%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 ' %mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt,missing=&missing';
put ' ,showmeta=&showmeta';
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 infile The QUOTED path to the file on which to perform the substitution
@param findvar= Macro variable NAME containing the string to search for
@param replacevar= Macro variable NAME containing the replacement string
@param 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_>50 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/X0ZJTEU9L1B1YmxpYy9hcHAvZGMvc2VydmljZXMvd2ViL3N0eWxlcy4zMjdlZGM4OGE1ZjAwMWJi'@;
put 'LmNzcyI+PC9oZWFkPgoKICA8IS0tCiAgICAjIyBTQVNKUyBBZGFwdGVyIGNvbmZpZyBkZXRhaWxzICMjCgogICAgKiBhcHBMb2M6IFRoZSBsb2NhdGlvbiBpbiBtZXRhZGF0YSBvciBTQVMgZHJpdmUgd2hlcmUgREMgd2lsbCBiZSBkZXBsb3llZAogICAgKiBzZXJ2ZXJUeXBlOiBlaXRoZXIg'@;
put 'U0FTOSwgU0FTVklZQSBvciBTQVNKUwogICAgKiBsb2dpbk1lY2hhbmlzbTogVXNlICdEZWZhdWx0JyBmb3IgcmVndWxhciAodXNlci9wYXNzKSBsb2dpbnMsIG9yICdSZWRpcmVjdGVkJyBmb3IgMkZBL1NTTwogICAgKiBkZWJ1ZzogV2hldGhlciB0byBlbmFibGUgZGVidWcgb24gc3RhcnR1'@;
put 'cAoKICAgICMjIFZpeWEgb25seSBzZXR0aW5ncyAjIwogICAgKiBhZG1pbkdyb3VwOiBUaGlzIGdyb3VwIHdpbGwgaGF2ZSB1bnJlc3RyaWN0ZWQgYWNjZXNzIChWaXlhIE9ubHkpCiAgICAqIGRjUGF0aDogVGhlIHBoeXNpY2FsIGxvY2F0aW9uIGluIHdoaWNoIHRvIGRlcGxveSB0aGUgc3Rh'@;
put 'Z2luZyBhcmVhIChWaXlhIG9ubHkpCiAgICAqIHVzZUNvbXB1dGVBcGk6IENvbm5lY3Rpb24gbWV0aG9kIChWaXlhIG9ubHkpCiAgICAqIGNvbnRleHROYW1lOiBDb21wdXRlIENvbnRleHQgKFZpeWEgb25seSkKCiAgLS0+CgogIDxib2R5IGNsYXNzPSJtLTAiPjxzYXNqcyBzZXJ2ZXJ1cmw9'@;
put 'IiIgYXBwbG9jPSIvUHVibGljL2FwcC9kYyIgc2VydmVydHlwZT0iU0FTVklZQSIgbG9naW5tZWNoYW5pc209IkRlZmF1bHQiIGRlYnVnPSJmYWxzZSIgdXNlY29tcHV0ZWFwaT0idHJ1ZSIgY29udGV4dG5hbWU9IlNBUyBKb2IgRXhlY3V0aW9uIGNvbXB1dGUgY29udGV4dCIgYWRtaW5ncm91'@;
put 'cD0ic2VjLXNhczktcHJkLWludC1zYXNwbGF0Zm9ybS0zMDAxMTRzYXNqcyIgZGNwYXRoPSIvdG1wL2RjIiBob3RsaWNlbmNla2V5PSJub24tY29tbWVyY2lhbC1hbmQtZXZhbHVhdGlvbiI+CiAgPC9zYXNqcz4KCiAgCiAgICA8bXktYXBwPjwvbXktYXBwPgogIDxzY3JpcHQgc3JjPSIvU0FT'@;
put 'Sm9iRXhlY3V0aW9uP19GSUxFPS9QdWJsaWMvYXBwL2RjL3NlcnZpY2VzL3dlYi9ydW50aW1lLmMzMTZhYzUxZDU5NjY3MTMuanMiIHR5cGU9Im1vZHVsZSI+PC9zY3JpcHQ+PHNjcmlwdCBzcmM9Ii9TQVNKb2JFeGVjdXRpb24/X0ZJTEU9L1B1YmxpYy9hcHAvZGMvc2VydmljZXMvd2ViL3Bv'@;
put 'bHlmaWxscy44N2RiYmQzZmFhYmVkNTEzLmpzIiB0eXBlPSJtb2R1bGUiPjwvc2NyaXB0PjxzY3JpcHQgc3JjPSIvU0FTSm9iRXhlY3V0aW9uP19GSUxFPS9QdWJsaWMvYXBwL2RjL3NlcnZpY2VzL3dlYi9zY3JpcHRzLjg5YTg5NDdhMDI2NmM0N2EuanMiIGRlZmVyPSIiPjwvc2NyaXB0Pjxz'@;
put 'Y3JpcHQgc3JjPSIvU0FTSm9iRXhlY3V0aW9uP19GSUxFPS9QdWJsaWMvYXBwL2RjL3NlcnZpY2VzL3dlYi9tYWluLjdhNjFkZWI5NTk0MDA3MDQuanMiIHR5cGU9Im1vZHVsZSI+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_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_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=''Shows which metadata groups can edit which 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_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_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_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=''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 '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 '/**';
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_A';
put '1,2,3 = "Disagree"';
put '4 = "Neither Agree nor Disagree"';
put '5,6,7 = "Agree"';
put ';';
put 'VALUE LIKERT7_B';
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_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_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_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 mpe_accesscheck(';
put 'base_table /* base table to check for */';
put ',outds=med_accesscheck /* WORK table to contain access details */';
put ',user= /* metadata user to check for */';
put ',access_level=APPROVE';
put ');';
put '%if &user= %then %let user=%mf_getuser();';
put '%if %index(&outds,.) %then %do;';
put '%local lib ds;';
put '%let lib=%scan(&outds,1,.);';
put '%let ds=%scan(&outds,2,.);';
put '%if %upcase(&lib) ne WORK %then %do;';
put '%mp_abort(msg=outds should be a WORK table';
put ',mac=mpe_accesscheck);';
put '%end;';
put '%end;';
put '%else %let ds=&outds;';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing base_table/user access_level)';
put ')';
put '/* ensure any existing table is dropped */';
put '%mp_dropmembers(&ds)';
put '/* create a new table for temp use */';
put 'data; run;';
put '%local tempds; %let tempds=&syslast;';
put '/* overwrite with the list of groups */';
put '%mpe_getgroups(user=&user,outds=&tempds);';
put '%if &_debug ge 131 %then %do;';
put 'data _null_;';
put 'set &tempds;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put 'proc sql;';
put 'create table &outds as';
put 'select * from &tempds';
put 'where groupname="&mpeadmins"';
put 'or groupname in';
put '(select sas_group from &mpelib..mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and access_level="&access_level"';
put '& (';
put '(libref="%scan(&base_table,1,.)" and dsn="%scan(&base_table,2,.)")';
put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")';
put 'or (libref="*ALL*")';
put ')';
put ');';
put '%put base_table=&base_table;';
put '%put libref=%scan(&base_table,1,.);';
put '%put dsn=%scan(&base_table,2,.);';
put '%put 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 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 '%local isThere;';
put 'select count(*) into: isThere from &syslast where alert_user="&from_user";';
put '%if &isThere>0 %then %do;';
put 'insert into &syslast set alert_user="&from_user";';
put '%end;';
put '/* if no email / displayname is provided, then extract from metadata */';
put 'data emails;';
put 'set 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 'run;';
put '%local emails;';
put 'proc sql noprint;';
put 'select user_email into: emails separated by ''" "'' from 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 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_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_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 mpe_accesscheck(';
put 'base_table /* base table to check for */';
put ',outds=med_accesscheck /* WORK table to contain access details */';
put ',user= /* metadata user to check for */';
put ',access_level=APPROVE';
put ');';
put '%if &user= %then %let user=%mf_getuser();';
put '%if %index(&outds,.) %then %do;';
put '%local lib ds;';
put '%let lib=%scan(&outds,1,.);';
put '%let ds=%scan(&outds,2,.);';
put '%if %upcase(&lib) ne WORK %then %do;';
put '%mp_abort(msg=outds should be a WORK table';
put ',mac=mpe_accesscheck);';
put '%end;';
put '%end;';
put '%else %let ds=&outds;';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing base_table/user access_level)';
put ')';
put '/* ensure any existing table is dropped */';
put '%mp_dropmembers(&ds)';
put '/* create a new table for temp use */';
put 'data; run;';
put '%local tempds; %let tempds=&syslast;';
put '/* overwrite with the list of groups */';
put '%mpe_getgroups(user=&user,outds=&tempds);';
put '%if &_debug ge 131 %then %do;';
put 'data _null_;';
put 'set &tempds;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put 'proc sql;';
put 'create table &outds as';
put 'select * from &tempds';
put 'where groupname="&mpeadmins"';
put 'or groupname in';
put '(select sas_group from &mpelib..mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and access_level="&access_level"';
put '& (';
put '(libref="%scan(&base_table,1,.)" and dsn="%scan(&base_table,2,.)")';
put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")';
put 'or (libref="*ALL*")';
put ')';
put ');';
put '%put base_table=&base_table;';
put '%put libref=%scan(&base_table,1,.);';
put '%put dsn=%scan(&base_table,2,.);';
put '%put 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 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_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_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 mpe_accesscheck(';
put 'base_table /* base table to check for */';
put ',outds=med_accesscheck /* WORK table to contain access details */';
put ',user= /* metadata user to check for */';
put ',access_level=APPROVE';
put ');';
put '%if &user= %then %let user=%mf_getuser();';
put '%if %index(&outds,.) %then %do;';
put '%local lib ds;';
put '%let lib=%scan(&outds,1,.);';
put '%let ds=%scan(&outds,2,.);';
put '%if %upcase(&lib) ne WORK %then %do;';
put '%mp_abort(msg=outds should be a WORK table';
put ',mac=mpe_accesscheck);';
put '%end;';
put '%end;';
put '%else %let ds=&outds;';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing base_table/user access_level)';
put ')';
put '/* ensure any existing table is dropped */';
put '%mp_dropmembers(&ds)';
put '/* create a new table for temp use */';
put 'data; run;';
put '%local tempds; %let tempds=&syslast;';
put '/* overwrite with the list of groups */';
put '%mpe_getgroups(user=&user,outds=&tempds);';
put '%if &_debug ge 131 %then %do;';
put 'data _null_;';
put 'set &tempds;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put 'proc sql;';
put 'create table &outds as';
put 'select * from &tempds';
put 'where groupname="&mpeadmins"';
put 'or groupname in';
put '(select sas_group from &mpelib..mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and access_level="&access_level"';
put '& (';
put '(libref="%scan(&base_table,1,.)" and dsn="%scan(&base_table,2,.)")';
put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")';
put 'or (libref="*ALL*")';
put ')';
put ');';
put '%put base_table=&base_table;';
put '%put libref=%scan(&base_table,1,.);';
put '%put dsn=%scan(&base_table,2,.);';
put '%put 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 /* base table to check for */';
put ',outds=med_accesscheck /* WORK table to contain access details */';
put ',user= /* metadata user to check for */';
put ',access_level=APPROVE';
put ');';
put '%if &user= %then %let user=%mf_getuser();';
put '%if %index(&outds,.) %then %do;';
put '%local lib ds;';
put '%let lib=%scan(&outds,1,.);';
put '%let ds=%scan(&outds,2,.);';
put '%if %upcase(&lib) ne WORK %then %do;';
put '%mp_abort(msg=outds should be a WORK table';
put ',mac=mpe_accesscheck);';
put '%end;';
put '%end;';
put '%else %let ds=&outds;';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing base_table/user access_level)';
put ')';
put '/* ensure any existing table is dropped */';
put '%mp_dropmembers(&ds)';
put '/* create a new table for temp use */';
put 'data; run;';
put '%local tempds; %let tempds=&syslast;';
put '/* overwrite with the list of groups */';
put '%mpe_getgroups(user=&user,outds=&tempds);';
put '%if &_debug ge 131 %then %do;';
put 'data _null_;';
put 'set &tempds;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put 'proc sql;';
put 'create table &outds as';
put 'select * from &tempds';
put 'where groupname="&mpeadmins"';
put 'or groupname in';
put '(select sas_group from &mpelib..mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and access_level="&access_level"';
put '& (';
put '(libref="%scan(&base_table,1,.)" and dsn="%scan(&base_table,2,.)")';
put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")';
put 'or (libref="*ALL*")';
put ')';
put ');';
put '%put base_table=&base_table;';
put '%put libref=%scan(&base_table,1,.);';
put '%put dsn=%scan(&base_table,2,.);';
put '%put 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 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 '%local isThere;';
put 'select count(*) into: isThere from &syslast where alert_user="&from_user";';
put '%if &isThere>0 %then %do;';
put 'insert into &syslast set alert_user="&from_user";';
put '%end;';
put '/* if no email / displayname is provided, then extract from metadata */';
put 'data emails;';
put 'set 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 'run;';
put '%local emails;';
put 'proc sql noprint;';
put 'select user_email into: emails separated by ''" "'' from 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=''Type of format - 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=''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=''Additional information. M=MultiLabel''';
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=0;';
put '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_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 '%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=''LIBDS'' then do;';
put 'if exist(value) le 0 then do;';
put 'call symputx(''msg'',"Unable to open staging table: "!!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 '%mp_abort(';
put 'iftrue=(&err ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(&msg)';
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 '/* update row marker - retain new var as fmtrow may already be in libds */';
put 'if first.fmtname then row=1;';
put 'else row+1;';
put 'drop row;';
put 'fmtrow=row;';
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 '%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(''TABLE'',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;';
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="&TABLE";';
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 table)=0)';
put ',mac=&_program';
put ',msg=%str(Missing: difftime orig_libds libds table)';
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="&TABLE" 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/&TABLE/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/&TABLE/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 */';
put '%let tmplib=%mf_getuniquelibref();';
put 'libname &tmplib "&mpelocapprovals/&TABLE";';
put 'data STAGING_DS;';
put 'set &tmplib..&TABLE;';
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="&TABLE";';
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(&table 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(&table 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="&table";';
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=&TABLE';
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="&TABLE";';
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/&TABLE/&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 "&TABLE"';
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 '%end;';
put 'libname approve "&mpelocapprovals/&TABLE";';
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/&TABLE/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="&TABLE";';
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(&table 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(&table 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="&table";';
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=&TABLE';
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_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_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 mpe_accesscheck(';
put 'base_table /* base table to check for */';
put ',outds=med_accesscheck /* WORK table to contain access details */';
put ',user= /* metadata user to check for */';
put ',access_level=APPROVE';
put ');';
put '%if &user= %then %let user=%mf_getuser();';
put '%if %index(&outds,.) %then %do;';
put '%local lib ds;';
put '%let lib=%scan(&outds,1,.);';
put '%let ds=%scan(&outds,2,.);';
put '%if %upcase(&lib) ne WORK %then %do;';
put '%mp_abort(msg=outds should be a WORK table';
put ',mac=mpe_accesscheck);';
put '%end;';
put '%end;';
put '%else %let ds=&outds;';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing base_table/user access_level)';
put ')';
put '/* ensure any existing table is dropped */';
put '%mp_dropmembers(&ds)';
put '/* create a new table for temp use */';
put 'data; run;';
put '%local tempds; %let tempds=&syslast;';
put '/* overwrite with the list of groups */';
put '%mpe_getgroups(user=&user,outds=&tempds);';
put '%if &_debug ge 131 %then %do;';
put 'data _null_;';
put 'set &tempds;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put 'proc sql;';
put 'create table &outds as';
put 'select * from &tempds';
put 'where groupname="&mpeadmins"';
put 'or groupname in';
put '(select sas_group from &mpelib..mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and access_level="&access_level"';
put '& (';
put '(libref="%scan(&base_table,1,.)" and dsn="%scan(&base_table,2,.)")';
put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")';
put 'or (libref="*ALL*")';
put ')';
put ');';
put '%put base_table=&base_table;';
put '%put libref=%scan(&base_table,1,.);';
put '%put dsn=%scan(&base_table,2,.);';
put '%put 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 mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mpe_getlabels(type,source,outds=mpe_getlabels);';
put '%local tmpds;';
put '%if &type=COLUMNS %then %do;';
put '%let tmpds=%mf_getuniquename();';
put 'proc contents noprint data=&source';
put 'out=&tmpds(keep=name memlabel label);';
put 'run;';
put 'proc sql ;';
put 'create table &outds as';
put 'select upcase(a.name) as name';
put ',a.memlabel';
put ',coalesce(b.dd_shortdesc,a.label) as desc';
put ',b.dd_longdesc as longdesc';
put 'from &tmpds a';
put 'left join &mpelib..mpe_datadictionary';
put '(where=(&dc_dttmtfmt. < tx_to';
put 'and dd_source ? %upcase("&source")';
put 'and dd_type=''COLUMN'')) b';
put 'on scan(b.dd_source,-1,''.'')=upcase(a.name);';
put '%end;';
put '%mend mpe_getlabels;';
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 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=''Type of format - 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=''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=''Additional information. M=MultiLabel''';
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=0;';
put '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_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 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 SØREN 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 "%str(ERR)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 "%str(ERR)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 '* CLS_FLG - set to 0 if there are no CLS rules (everything should be editable)';
put 'else set to 1 (CLS rules exist)';
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_dsmeta.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_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 '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 '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 ',0 as selectbox_order';
put 'from &lib..&ds';
put 'order by 1;';
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 'by base_col selectbox_order;';
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 '%mp_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 SØREN 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 "%str(ERR)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 "%str(ERR)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=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_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_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 mpe_accesscheck(';
put 'base_table /* base table to check for */';
put ',outds=med_accesscheck /* WORK table to contain access details */';
put ',user= /* metadata user to check for */';
put ',access_level=APPROVE';
put ');';
put '%if &user= %then %let user=%mf_getuser();';
put '%if %index(&outds,.) %then %do;';
put '%local lib ds;';
put '%let lib=%scan(&outds,1,.);';
put '%let ds=%scan(&outds,2,.);';
put '%if %upcase(&lib) ne WORK %then %do;';
put '%mp_abort(msg=outds should be a WORK table';
put ',mac=mpe_accesscheck);';
put '%end;';
put '%end;';
put '%else %let ds=&outds;';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing base_table/user access_level)';
put ')';
put '/* ensure any existing table is dropped */';
put '%mp_dropmembers(&ds)';
put '/* create a new table for temp use */';
put 'data; run;';
put '%local tempds; %let tempds=&syslast;';
put '/* overwrite with the list of groups */';
put '%mpe_getgroups(user=&user,outds=&tempds);';
put '%if &_debug ge 131 %then %do;';
put 'data _null_;';
put 'set &tempds;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put 'proc sql;';
put 'create table &outds as';
put 'select * from &tempds';
put 'where groupname="&mpeadmins"';
put 'or groupname in';
put '(select sas_group from &mpelib..mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and access_level="&access_level"';
put '& (';
put '(libref="%scan(&base_table,1,.)" and dsn="%scan(&base_table,2,.)")';
put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")';
put 'or (libref="*ALL*")';
put ')';
put ');';
put '%put base_table=&base_table;';
put '%put libref=%scan(&base_table,1,.);';
put '%put dsn=%scan(&base_table,2,.);';
put '%put 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 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 '%local isThere;';
put 'select count(*) into: isThere from &syslast where alert_user="&from_user";';
put '%if &isThere>0 %then %do;';
put 'insert into &syslast set alert_user="&from_user";';
put '%end;';
put '/* if no email / displayname is provided, then extract from metadata */';
put 'data emails;';
put 'set 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 'run;';
put '%local emails;';
put 'proc sql noprint;';
put 'select user_email into: emails separated by ''" "'' from 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_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 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=''Type of format - 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=''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=''Additional information. M=MultiLabel''';
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=0;';
put '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_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="!!trim(&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 '%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;';
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 'run;';
put '%mp_lockfilecheck(libds=&orig_libds)';
put 'data compare;';
put 'set &libds(drop=&txfrom &txto &processed);';
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_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_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 mpe_accesscheck(';
put 'base_table /* base table to check for */';
put ',outds=med_accesscheck /* WORK table to contain access details */';
put ',user= /* metadata user to check for */';
put ',access_level=APPROVE';
put ');';
put '%if &user= %then %let user=%mf_getuser();';
put '%if %index(&outds,.) %then %do;';
put '%local lib ds;';
put '%let lib=%scan(&outds,1,.);';
put '%let ds=%scan(&outds,2,.);';
put '%if %upcase(&lib) ne WORK %then %do;';
put '%mp_abort(msg=outds should be a WORK table';
put ',mac=mpe_accesscheck);';
put '%end;';
put '%end;';
put '%else %let ds=&outds;';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing base_table/user access_level)';
put ')';
put '/* ensure any existing table is dropped */';
put '%mp_dropmembers(&ds)';
put '/* create a new table for temp use */';
put 'data; run;';
put '%local tempds; %let tempds=&syslast;';
put '/* overwrite with the list of groups */';
put '%mpe_getgroups(user=&user,outds=&tempds);';
put '%if &_debug ge 131 %then %do;';
put 'data _null_;';
put 'set &tempds;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put 'proc sql;';
put 'create table &outds as';
put 'select * from &tempds';
put 'where groupname="&mpeadmins"';
put 'or groupname in';
put '(select sas_group from &mpelib..mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and access_level="&access_level"';
put '& (';
put '(libref="%scan(&base_table,1,.)" and dsn="%scan(&base_table,2,.)")';
put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")';
put 'or (libref="*ALL*")';
put ')';
put ');';
put '%put base_table=&base_table;';
put '%put libref=%scan(&base_table,1,.);';
put '%put dsn=%scan(&base_table,2,.);';
put '%put 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 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 '%local isThere;';
put 'select count(*) into: isThere from &syslast where alert_user="&from_user";';
put '%if &isThere>0 %then %do;';
put 'insert into &syslast set alert_user="&from_user";';
put '%end;';
put '/* if no email / displayname is provided, then extract from metadata */';
put 'data emails;';
put 'set 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 'run;';
put '%local emails;';
put 'proc sql noprint;';
put 'select user_email into: emails separated by ''" "'' from 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_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 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=''Type of format - 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=''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=''Additional information. M=MultiLabel''';
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=0;';
put '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_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="!!trim(&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 '%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'')';
put 'then ref=symget(''_WEBIN_FILEREF1'');';
put 'else if symexist(''sasjs_tables'') then do;';
put 'rc=filename(''ref'',"%sysfunc(pathname(work))/&dsn.csv");';
put 'ref=''ref'';';
put 'end;';
put 'else ref=''indata1'';';
put 'call symputx(''ref'',ref);';
put 'putlog ref=;';
put 'run;';
put '%mp_binarycopy(inref=&ref, outloc="&dir/_WEBIN_FILEREF1.txt")';
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 '* Only numeric values should remain';
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;';
put 'length reason_cd $4032 vtype $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 '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 'return;';
put 'end;';
put '/* now we can get the type */';
put 'else vtype=vartype(dsid,vnum);';
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''';
put 'and OPERATOR_NM in (''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'')';
put 'and 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 '/* 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 '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 'putlog raw_value3= $hex32.;';
put 'REASON_CD=cats(''Invalid RAW_VALUE:'',raw_value);';
put 'putlog REASON_CD= raw_value= raw_value1= raw_value2= raw_value3=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
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_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 '/* 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 'if subpad(dsn,length(dsn)-3,3) ne ''-FC'' then dsn=cats(dsn,''-FC'');';
put 'end;';
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 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=''Type of format - 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=''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=''Additional information. M=MultiLabel''';
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=0;';
put '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 '* Only numeric values should remain';
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;';
put 'length reason_cd $4032 vtype $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 '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 'return;';
put 'end;';
put '/* now we can get the type */';
put 'else vtype=vartype(dsid,vnum);';
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''';
put 'and OPERATOR_NM in (''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'')';
put 'and 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 '/* 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 '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 'putlog raw_value3= $hex32.;';
put 'REASON_CD=cats(''Invalid RAW_VALUE:'',raw_value);';
put 'putlog REASON_CD= raw_value= raw_value1= raw_value2= raw_value3=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
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=''Type of format - 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=''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=''Additional information. M=MultiLabel''';
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=''Type of format - 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=''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=''Additional information. M=MultiLabel''';
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=0;';
put '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..mp_editor_access table.';
put 'This service is also callable from EUCs - just add EUCDLM= parameter.';
put 'EUCDLM values: TAB or CSV';
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 '%webout(OPEN)';
put '%webout(OBJ,sasDatasets)';
put '%webout(OBJ,saslibs)';
put '%webout(OBJ,globvars)';
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=''Type of format - 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=''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=''Additional information. M=MultiLabel''';
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 '* Only numeric values should remain';
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;';
put 'length reason_cd $4032 vtype $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 '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 'return;';
put 'end;';
put '/* now we can get the type */';
put 'else vtype=vartype(dsid,vnum);';
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''';
put 'and OPERATOR_NM in (''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'')';
put 'and 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 '/* 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 '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 'putlog raw_value3= $hex32.;';
put 'REASON_CD=cats(''Invalid RAW_VALUE:'',raw_value);';
put 'putlog REASON_CD= raw_value= raw_value1= raw_value2= raw_value3=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
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 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 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=''Type of format - 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=''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=''Additional information. M=MultiLabel''';
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=0;';
put '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_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 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 SØREN 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 "%str(ERR)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 "%str(ERR)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_dsmeta.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_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 '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 '%mp_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 SØREN 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 "%str(ERR)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 "%str(ERR)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 'ZWY9ImltYWdlcy9mYXZpY29uLmljbyIvPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGVzLjMyN2VkYzg4YTVmMDAxYmIuY3NzIj48L2hlYWQ+CgogIDwhLS0KICAgICMjIFNBU0pTIEFkYXB0ZXIgY29uZmlnIGRldGFpbHMgIyMKCiAgICAqIGFwcExvYzogVGhlIGxvY2F0'@;
put 'aW9uIGluIG1ldGFkYXRhIG9yIFNBUyBkcml2ZSB3aGVyZSBEQyB3aWxsIGJlIGRlcGxveWVkCiAgICAqIHNlcnZlclR5cGU6IGVpdGhlciBTQVM5LCBTQVNWSVlBIG9yIFNBU0pTCiAgICAqIGxvZ2luTWVjaGFuaXNtOiBVc2UgJ0RlZmF1bHQnIGZvciByZWd1bGFyICh1c2VyL3Bhc3MpIGxv'@;
put 'Z2lucywgb3IgJ1JlZGlyZWN0ZWQnIGZvciAyRkEvU1NPCiAgICAqIGRlYnVnOiBXaGV0aGVyIHRvIGVuYWJsZSBkZWJ1ZyBvbiBzdGFydHVwCgogICAgIyMgVml5YSBvbmx5IHNldHRpbmdzICMjCiAgICAqIGFkbWluR3JvdXA6IFRoaXMgZ3JvdXAgd2lsbCBoYXZlIHVucmVzdHJpY3RlZCBh'@;
put 'Y2Nlc3MgKFZpeWEgT25seSkKICAgICogZGNQYXRoOiBUaGUgcGh5c2ljYWwgbG9jYXRpb24gaW4gd2hpY2ggdG8gZGVwbG95IHRoZSBzdGFnaW5nIGFyZWEgKFZpeWEgb25seSkKICAgICogdXNlQ29tcHV0ZUFwaTogQ29ubmVjdGlvbiBtZXRob2QgKFZpeWEgb25seSkKICAgICogY29udGV4'@;
put 'dE5hbWU6IENvbXB1dGUgQ29udGV4dCAoVml5YSBvbmx5KQoKICAtLT4KCiAgPHNhc2pzIHNlcnZlcnVybD0iIiBhcHBsb2M9Ii9QdWJsaWMvYXBwL2RjIiBzZXJ2ZXJ0eXBlPSJTQVNKUyIgbG9naW5tZWNoYW5pc209IkRlZmF1bHQiIGRlYnVnPSJmYWxzZSIgdXNlY29tcHV0ZWFwaT0idHJ1'@;
put 'ZSIgY29udGV4dG5hbWU9IlNBUyBKb2IgRXhlY3V0aW9uIGNvbXB1dGUgY29udGV4dCIgYWRtaW5ncm91cD0ic2VjLXNhczktcHJkLWludC1zYXNwbGF0Zm9ybS0zMDAxMTRzYXNqcyIgZGNwYXRoPSIvdG1wL2RjIiBob3RsaWNlbmNla2V5PSJub24tY29tbWVyY2lhbC1hbmQtZXZhbHVhdGlv'@;
put 'biI+CiAgPC9zYXNqcz4KCiAgPGJvZHkgY2xhc3M9Im0tMCI+CiAgICA8bXktYXBwPjwvbXktYXBwPgogIDxzY3JpcHQgc3JjPSJydW50aW1lLmMzMTZhYzUxZDU5NjY3MTMuanMiIHR5cGU9Im1vZHVsZSI+PC9zY3JpcHQ+PHNjcmlwdCBzcmM9InBvbHlmaWxscy44N2RiYmQzZmFhYmVkNTEz'@;
put 'LmpzIiB0eXBlPSJtb2R1bGUiPjwvc2NyaXB0PjxzY3JpcHQgc3JjPSJzY3JpcHRzLjg5YTg5NDdhMDI2NmM0N2EuanMiIGRlZmVyPjwvc2NyaXB0PjxzY3JpcHQgc3JjPSJtYWluLjdhNjFkZWI5NTk0MDA3MDQuanMiIHR5cGU9Im1vZHVsZSI+PC9zY3JpcHQ+PC9ib2R5Pgo8L2h0bWw+Cg==';
run;
%mv_createfile(path=&appLoc/&path, name=&filename, inref=filecode, intype=BASE64)
filename filecode clear;
%let filename=main.7a61deb959400704.js;
filename filecode temp lrecl=11996448;
data _null_;
file filecode;
put 'KHNlbGYud2VicGFja0NodW5rZGF0YWNvbnRyb2xsZXI9c2VsZi53ZWJwYWNrQ2h1bmtkYXRhY29udHJvbGxlcnx8W10pLnB1c2goW1sxNzldLHs3NDA5MjpmdW5jdGlvbihXZSl7V2UuZXhwb3J0cz1mdW5jdGlvbih6ZSl7dmFyIFQ9e307ZnVuY3Rpb24gc2Uoayl7aWYoVFtrXSlyZXR1cm4g'@;
put 'VFtrXS5leHBvcnRzO3ZhciB2PVRba109e2k6ayxsOiExLGV4cG9ydHM6e319O3JldHVybiB6ZVtrXS5jYWxsKHYuZXhwb3J0cyx2LHYuZXhwb3J0cyxzZSksdi5sPSEwLHYuZXhwb3J0c31yZXR1cm4gc2UubT16ZSxzZS5jPVQsc2UuZD1mdW5jdGlvbihrLHYsaGUpe3NlLm8oayx2KXx8T2Jq'@;
put 'ZWN0LmRlZmluZVByb3BlcnR5KGssdix7ZW51bWVyYWJsZTohMCxnZXQ6aGV9KX0sc2Uucj1mdW5jdGlvbihrKXt0eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoayxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSks'@;
put 'T2JqZWN0LmRlZmluZVByb3BlcnR5KGssIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxzZS50PWZ1bmN0aW9uKGssdil7aWYoMSZ2JiYoaz1zZShrKSksOCZ2fHw0JnYmJiJvYmplY3QiPT10eXBlb2YgayYmayYmay5fX2VzTW9kdWxlKXJldHVybiBrO3ZhciBoZT1PYmplY3QuY3JlYXRlKG51'@;
put 'bGwpO2lmKHNlLnIoaGUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoZSwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6a30pLDImdiYmInN0cmluZyIhPXR5cGVvZiBrKWZvcih2YXIgSCBpbiBrKXNlLmQoaGUsSCxmdW5jdGlvbihCKXtyZXR1cm4ga1tCXX0uYmluZChudWxsLEgpKTty'@;
put 'ZXR1cm4gaGV9LHNlLm49ZnVuY3Rpb24oayl7dmFyIHY9ayYmay5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIGsuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4ga307cmV0dXJuIHNlLmQodiwiYSIsdiksdn0sc2Uubz1mdW5jdGlvbihrLHYpe3JldHVybiBPYmplY3QucHJvdG90eXBl'@;
put 'Lmhhc093blByb3BlcnR5LmNhbGwoayx2KX0sc2UucD0iIixzZShzZS5zPSIuL3Byb2plY3RzL2ljb25zL3NyYy9pbmRleC50cyIpfSh7Ii4vcHJvamVjdHMvaWNvbnMvc3JjL2Nsci1pY29ucy1hcGkudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9jbHItaWNvbnMtYXBpLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5k'@;
put 'ICovZnVuY3Rpb24oemUsVCxzZSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShULCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxULkNsYXJpdHlJY29uc0FwaT12b2lkIDA7dmFyIGs9c2UoCi8qISAuL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVyICovCiIuL3Byb2pl'@;
put 'Y3RzL2ljb25zL3NyYy91dGlscy9zaGFwZS10ZW1wbGF0ZS1vYnNlcnZlci50cyIpLHY9e30saGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBIKCl7fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoSCwiaW5zdGFuY2UiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSC5zaW5nbGVJbnN0YW5jZXx8'@;
put 'KEguc2luZ2xlSW5zdGFuY2U9bmV3IEgpLEguc2luZ2xlSW5zdGFuY2V9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksSC5wcm90b3R5cGUudmFsaWRhdGVOYW1lPWZ1bmN0aW9uKEIpe2lmKDA9PT1CLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlNoYXBlIG5hbWUgb3IgYWxpYXMg'@;
put 'bXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmchIik7aWYoL1xzLy50ZXN0KEIpKXRocm93IG5ldyBFcnJvcigiU2hhcGUgbmFtZSBvciBhbGlhcyBtdXN0IG5vdCBjb250YWluIGFueSB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMhIik7cmV0dXJuITB9LEgucHJvdG90eXBlLm5vcm1hbGl6ZVNoYXBl'@;
put 'TmFtZT1mdW5jdGlvbihCKXtyZXR1cm4gQi50b0xvd2VyQ2FzZSgpfSxILnByb3RvdHlwZS5zZXRJY29uVGVtcGxhdGU9ZnVuY3Rpb24oQixMKXt2YXIgSz1MLnRyaW0oKTt0aGlzLnZhbGlkYXRlTmFtZShCKSYmKEI9dGhpcy5ub3JtYWxpemVTaGFwZU5hbWUoQiksdltCXSYmZGVsZXRlIHZb'@;
put 'Ql0sdltCXT1LLGsuU2hhcGVUZW1wbGF0ZU9ic2VydmVyLmluc3RhbmNlLmVtaXRDaGFuZ2VzKEIsSykpfSxILnByb3RvdHlwZS5zZXRJY29uQWxpYXNlcz1mdW5jdGlvbihCLEwsSyl7Zm9yKHZhciBKPTAsST1LO0o8SS5sZW5ndGg7SisrKXt2YXIgUj1JW0pdO3RoaXMudmFsaWRhdGVOYW1l'@;
put 'KFIpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoQixSLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQltMXX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX19LEgucHJvdG90eXBlLmFkZD1mdW5jdGlvbihCKXtpZigib2JqZWN0IiE9dHlwZW9mIEIpdGhyb3cgbmV3IEVycm9yKCdUaGUg'@;
put 'YXJndW1lbnQgbXVzdCBiZSBhbiBvYmplY3QgbGl0ZXJhbCBwYXNzZWQgaW4gdGhlIGZvbGxvd2luZyBwYXR0ZXJuOlxuICAgICAgICAgICAgICAgIHsgInNoYXBlLW5hbWUiOiAic2hhcGUtdGVtcGxhdGUiIH0nKTtmb3IodmFyIEwgaW4gQilCLmhhc093blByb3BlcnR5KEwpJiZ0aGlzLnNl'@;
put 'dEljb25UZW1wbGF0ZShMLEJbTF0pfSxILnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oQil7cmV0dXJuISF2W3RoaXMubm9ybWFsaXplU2hhcGVOYW1lKEIpXX0sSC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKEIpe2lmKCFCKXJldHVybiB2O2lmKCJzdHJpbmciIT10eXBlb2YgQil0aHJvdyBuZXcg'@;
put 'VHlwZUVycm9yKCJPbmx5IHN0cmluZyBhcmd1bWVudCBpcyBhbGxvd2VkIGluIHRoaXMgbWV0aG9kLiIpO3JldHVybiB2W3RoaXMubm9ybWFsaXplU2hhcGVOYW1lKEIpXX0sSC5wcm90b3R5cGUuYWxpYXM9ZnVuY3Rpb24oQil7aWYoIm9iamVjdCIhPXR5cGVvZiBCKXRocm93IG5ldyBFcnJv'@;
put 'cignVGhlIGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0IGxpdGVyYWwgcGFzc2VkIGluIHRoZSBmb2xsb3dpbmcgcGF0dGVybjpcbiAgICAgICAgICAgICAgICB7ICJzaGFwZS1uYW1lIjogWyJhbGlhcy1uYW1lIiwgLi4uXSB9Jyk7Zm9yKHZhciBMIGluIEIpaWYoQi5oYXNPd25Qcm9wZXJ0'@;
put 'eShMKSl7aWYoIXYuaGFzT3duUHJvcGVydHkoTCkpdGhyb3cgbmV3IEVycm9yKCdBbiBpY29uICInK0wrIlwiIHlvdSBhcmUgdHJ5aW5nIHRvIHNldCBhbGlhc2VzIHRvIGRvZXNuJ3QgZXhpc3QgaW4gdGhlIENsYXJpdHkgSWNvbnMgc2V0cyEiKTt0aGlzLnNldEljb25BbGlhc2VzKHYsTCxC'@;
put 'W0xdKX19LEh9KCk7VC5DbGFyaXR5SWNvbnNBcGk9aGV9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9jbHItaWNvbnMtZWxlbWVudC50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2pl'@;
put 'Y3RzL2ljb25zL3NyYy9jbHItaWNvbnMtZWxlbWVudC50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbih6ZSxULHNlKXsidXNlIHN0'@;
put 'cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFQuQ2xhcml0eUljb25FbGVtZW50PXZvaWQgMDt2YXIgaz1zZSgKLyohIC4vY2xyLWljb25zLWFwaSAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvY2xyLWljb25zLWFwaS50cyIpLHY9c2UoCi8q'@;
put 'ISAuL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVyICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zaGFwZS10ZW1wbGF0ZS1vYnNlcnZlci50cyIpLGhlPTAsSD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7SC5jbGFzc05hbWU9ImlzLW9mZi1zY3JlZW4iO3ZhciBC'@;
put 'PWZ1bmN0aW9uKCl7cmV0dXJuIEhUTUxFbGVtZW50LmFwcGx5KHRoaXMsYXJndW1lbnRzKX07ZnVuY3Rpb24gTCgpe3ZhciBLPUIuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBLLmNsckljb25VbmlxSWQ9Il9jbHJfaWNvbl8iK2hlLGhlKyssS30ib2JqZWN0Ij09dHlwZW9mIFJlZmxl'@;
put 'Y3QmJihCPWZ1bmN0aW9uKCl7cmV0dXJuIFJlZmxlY3QuY29uc3RydWN0KEhUTUxFbGVtZW50LGFyZ3VtZW50cyx0aGlzLmNvbnN0cnVjdG9yKX0pLFQuQ2xhcml0eUljb25FbGVtZW50PUwsTC5vYnNlcnZlZEF0dHJpYnV0ZXM9WyJzaGFwZSIsInNpemUiLCJ0aXRsZSJdLChMLnByb3RvdHlw'@;
put 'ZT1PYmplY3QuY3JlYXRlKEhUTUxFbGVtZW50LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpMfX0pKS5jb25zdHJ1Y3Rvcj1MLEwucHJvdG90eXBlLl9hcHBlbmRDdXN0b21UaXRsZT1mdW5jdGlvbigpe3ZhciBLPUguY2xvbmVOb2Rl'@;
put 'KCExKTtLLmlkPXRoaXMuY2xySWNvblVuaXFJZCxLLnRleHRDb250ZW50PXRoaXMuY3VycmVudFRpdGxlQXR0clZhbCx0aGlzLmFwcGVuZENoaWxkKEspfSxMLnByb3RvdHlwZS5fc2V0SWNvblNpemU9ZnVuY3Rpb24oSyl7IU51bWJlcihLKXx8TnVtYmVyKEspPDA/KHRoaXMuc3R5bGUud2lk'@;
put 'dGg9bnVsbCx0aGlzLnN0eWxlLmhlaWdodD1udWxsKToodGhpcy5zdHlsZS53aWR0aD1LKyJweCIsdGhpcy5zdHlsZS5oZWlnaHQ9SysicHgiKX0sTC5wcm90b3R5cGUuX25vcm1hbGl6ZVNoYXBlPWZ1bmN0aW9uKEspe3JldHVybiBLLnNwbGl0KC9ccy8pWzBdLnRvTG93ZXJDYXNlKCl9LEwu'@;
put 'cHJvdG90eXBlLmNvbm5lY3RlZENhbGxiYWNrPWZ1bmN0aW9uKCl7dmFyIEs9dGhpcztpZih0aGlzLmdldEF0dHJpYnV0ZSgicm9sZSIpfHx0aGlzLnNldEF0dHJpYnV0ZSgicm9sZSIsIm5vbmUiKSx0aGlzLmhhc0F0dHJpYnV0ZSgic2l6ZSIpKXt2YXIgSj10aGlzLmdldEF0dHJpYnV0ZSgi'@;
put 'c2l6ZSIpO3RoaXMuY3VycmVudFNpemVBdHRyVmFsIT09SiYmKHRoaXMuY3VycmVudFNpemVBdHRyVmFsPUosdGhpcy5fc2V0SWNvblNpemUoSikpfWlmKHRoaXMuaGFzQXR0cmlidXRlKCJzaGFwZSIpKXt2YXIgST10aGlzLl9ub3JtYWxpemVTaGFwZSh0aGlzLmdldEF0dHJpYnV0ZSgic2hh'@;
put 'cGUiKSk7aWYodGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbj12LlNoYXBlVGVtcGxhdGVPYnNlcnZlci5pbnN0YW5jZS5zdWJzY3JpYmVUbyhJLGZ1bmN0aW9uKHope0suX2luamVjdFRlbXBsYXRlKHopfSksdGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsPUksIWsuQ2xhcml0eUljb25z'@;
put 'QXBpLmluc3RhbmNlLmhhcyh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpKXJldHVybiB2b2lkIHRoaXMuX2luamVjdEVycm9yVGVtcGxhdGUoKTt2YXIgUj1rLkNsYXJpdHlJY29uc0FwaS5pbnN0YW5jZS5nZXQodGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsKTtpZihSPT09dGhpcy5jdXJyZW50'@;
put 'U2hhcGVUZW1wbGF0ZSlyZXR1cm47dGhpcy5jdXJyZW50U2hhcGVUZW1wbGF0ZT1SfWlmKHRoaXMuaGFzQXR0cmlidXRlKCJ0aXRsZSIpKXt2YXIgRT10aGlzLmdldEF0dHJpYnV0ZSgidGl0bGUiKTtpZih0aGlzLmN1cnJlbnRUaXRsZUF0dHJWYWwhPT1FJiYodGhpcy5jdXJyZW50VGl0bGVB'@;
put 'dHRyVmFsPUUpLCF0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpcmV0dXJufXRoaXMuX2luamVjdFRlbXBsYXRlKCl9LEwucHJvdG90eXBlLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaz1mdW5jdGlvbihLLEosSSl7dmFyIFI9dGhpcztpZigic2l6ZSI9PT1LJiZ0aGlzLl9zZXRJY29uU2l6ZShJ'@;
put 'KSwic2hhcGUiPT09Syl7aWYodGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsPXRoaXMuX25vcm1hbGl6ZVNoYXBlKEkpLHRoaXMuX3NoYXBlVGVtcGxhdGVTdWJzY3JpcHRpb24mJih0aGlzLl9zaGFwZVRlbXBsYXRlU3Vic2NyaXB0aW9uKCksdGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlv'@;
put 'bj12LlNoYXBlVGVtcGxhdGVPYnNlcnZlci5pbnN0YW5jZS5zdWJzY3JpYmVUbyh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwsZnVuY3Rpb24oRSl7Ui5faW5qZWN0VGVtcGxhdGUoRSl9KSksIWsuQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmhhcyh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwp'@;
put 'KXJldHVybiB2b2lkIHRoaXMuX2luamVjdEVycm9yVGVtcGxhdGUoKTt0aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlPWsuQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmdldCh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpfSJ0aXRsZSI9PT1LJiYodGhpcy5jdXJyZW50VGl0bGVBdHRyVmFsPUks'@;
put 'IXRoaXMuY3VycmVudFNoYXBlQXR0clZhbCl8fHRoaXMuX2luamVjdFRlbXBsYXRlKCl9LEwucHJvdG90eXBlLmRpc2Nvbm5lY3RlZENhbGxiYWNrPWZ1bmN0aW9uKCl7dGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbiYmdGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbigpfSxM'@;
put 'LnByb3RvdHlwZS5fc2V0QXJpYUxhYmVsbGVkQnk9ZnVuY3Rpb24oKXt2YXIgSz10aGlzLmdldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbGxlZGJ5IiksST10aGlzLnF1ZXJ5U2VsZWN0b3IoInN2ZyIpfHx0aGlzO0s/SyYmSy5pbmRleE9mKHRoaXMuY2xySWNvblVuaXFJZCk8MCYmSS5zZXRBdHRy'@;
put 'aWJ1dGUoImFyaWEtbGFiZWxsZWRieSIsSysiICIrdGhpcy5jbHJJY29uVW5pcUlkKTpJLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbGxlZGJ5Iix0aGlzLmNsckljb25VbmlxSWQpfSxMLnByb3RvdHlwZS5faW5qZWN0VGVtcGxhdGU9ZnVuY3Rpb24oSyl7SyYmSyE9PXRoaXMuY3VycmVudFNo'@;
put 'YXBlVGVtcGxhdGUmJih0aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlPUspLHRoaXMuaW5uZXJIVE1MPXRoaXMuY3VycmVudFNoYXBlVGVtcGxhdGUsdGhpcy5jdXJyZW50VGl0bGVBdHRyVmFsJiYodGhpcy5fc2V0QXJpYUxhYmVsbGVkQnkoKSx0aGlzLl9hcHBlbmRDdXN0b21UaXRsZSgpKX0s'@;
put 'TC5wcm90b3R5cGUuX2luamVjdEVycm9yVGVtcGxhdGU9ZnVuY3Rpb24oKXt0aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlPWsuQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmdldCgiZXJyb3IiKSx0aGlzLl9pbmplY3RUZW1wbGF0ZSgpfX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL2luZGV4LnRz'@;
put 'IjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL2luZGV4LnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8q'@;
put 'ISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKHplLFQsc2UpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoVCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksVC5DbGFyaXR5SWNvbnM9dm9pZCAwO3ZhciBrPXNlKAovKiEgLi9jbHItaWNvbnMtYXBpICovCiIu'@;
put 'L3Byb2plY3RzL2ljb25zL3NyYy9jbHItaWNvbnMtYXBpLnRzIiksdj1zZSgKLyohIC4vY2xyLWljb25zLWVsZW1lbnQgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL2Nsci1pY29ucy1lbGVtZW50LnRzIiksaGU9c2UoCi8qISAuL3NoYXBlcy9jb3JlLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9p'@;
put 'Y29ucy9zcmMvc2hhcGVzL2NvcmUtc2hhcGVzLnRzIiksSD1rLkNsYXJpdHlJY29uc0FwaS5pbnN0YW5jZTtULkNsYXJpdHlJY29ucz1ILEguYWRkKGhlLkNvcmVTaGFwZXMpLHR5cGVvZiB3aW5kb3c8InUiJiYod2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKXx8KHdpbmRv'@;
put 'dy5DbGFyaXR5SWNvbnM9SCksY3VzdG9tRWxlbWVudHMuZ2V0KCJjbHItaWNvbiIpfHxjdXN0b21FbGVtZW50cy5kZWZpbmUoImNsci1pY29uIix2LkNsYXJpdHlJY29uRWxlbWVudCkpfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvcmUtc2hhcGVzLnRzIjoKLyohKioqKioqKioq'@;
put 'KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKHplLFQsc2UpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoVCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksVC5Db3JlU2hhcGVzPVQuQ2xyU2hhcGVBcnJvdz1ULkNs'@;
put 'clNoYXBlU3RlcEZvcndhcmQyPVQuQ2xyU2hhcGVFeWVIaWRlPVQuQ2xyU2hhcGVFeWU9VC5DbHJTaGFwZUV2ZW50PVQuQ2xyU2hhcGVDYWxlbmRhcj1ULkNsclNoYXBlQW5nbGVEb3VibGU9VC5DbHJTaGFwZVZpZXdDb2x1bW5zPVQuQ2xyU2hhcGVTZWFyY2g9VC5DbHJTaGFwZVZtQnVnPVQu'@;
put 'Q2xyU2hhcGVGaWx0ZXJHcmlkQ2lyY2xlPVQuQ2xyU2hhcGVGaWx0ZXJHcmlkPVQuQ2xyU2hhcGVFbGxpcHNpc1ZlcnRpY2FsPVQuQ2xyU2hhcGVFbGxpcHNpc0hvcml6b250YWw9VC5DbHJTaGFwZUNsb3VkPVQuQ2xyU2hhcGVJbWFnZT1ULkNsclNoYXBlQmVsbD1ULkNsclNoYXBlRm9sZGVy'@;
put 'T3Blbj1ULkNsclNoYXBlRm9sZGVyPVQuQ2xyU2hhcGVBbmdsZT1ULkNsclNoYXBlVXNlcj1ULkNsclNoYXBlQmFycz1ULkNsclNoYXBlSGVscEluZm89VC5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZD1ULkNsclNoYXBlRXJyb3JTdGFuZGFyZD1ULkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJkPVQu'@;
put 'Q2xyU2hhcGVJbmZvU3RhbmRhcmQ9VC5DbHJTaGFwZUluZm9DaXJjbGU9VC5DbHJTaGFwZUNoZWNrQ2lyY2xlPVQuQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZT1ULkNsclNoYXBlRXhjbGFtYXRpb25UcmlhbmdsZT1ULkNsclNoYXBlVGltZXM9VC5DbHJTaGFwZUNoZWNrPVQuQ2xyU2hhcGVD'@;
put 'b2c9VC5DbHJTaGFwZUhvbWU9VC5DbHJTaGFwZVVua25vd25TdGF0dXM9dm9pZCAwO3ZhciBrPXNlKAovKiEgLi4vdXRpbHMvZGVzY3JpcHRvci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIiksdj1zZSgKLyohIC4uL3V0aWxzL3N2'@;
put 'Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpO1QuQ2xyU2hhcGVVbmtub3duU3RhdHVzPSgwLHYuY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGN4'@;
put 'PSIxNy41OCIgY3k9IjI2LjIzIiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI0LjcsMTNhNS4xOCw1LjE4LDAsMCwwLTIuMTYtMy41Niw3LjI2LDcuMjYsMCwwLDAtNS43MS0xLjA5QTExLjM0'@;
put 'LDExLjM0LDAsMCwwLDEyLDEwLjQ0LDEsMSwwLDEsMCwxMy4yNiwxMmE5LjMyLDkuMzIsMCwwLDEsMy45NC0xLjcyLDUuMjksNS4yOSwwLDAsMSw0LjE2Ljc0LDMuMjEsMy4yMSwwLDAsMSwxLjM1LDIuMTljLjMzLDIuNjktMy4xOSwzLjc1LTUuMzIsNC4xNGwtLjgyLjE1djQuMzZhMSwxLDAs'@;
put 'MCwwLDIsMFYxOS4xN0MyNC42MSwxNy43OSwyNC44OCwxNC40MSwyNC43LDEzWiIvPicpLFQuQ2xyU2hhcGVIb21lPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMuNzEsMTcuMjlsLTE1LTE1YTEsMSwwLDAs'@;
put 'MC0xLjQxLDBsLTE1LDE1YTEsMSwwLDAsMCwxLjQxLDEuNDFMMTgsNC40MSwzMi4yOSwxOC43MWExLDEsMCwwLDAsMS40MS0xLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjgsMzJoLTVWMjJIMTNW'@;
put 'MzJIOFYxOEw2LDIwVjMyYTIsMiwwLDAsMCwyLDJoN1YyNGg2VjM0aDdhMiwyLDAsMCwwLDItMlYxOS43NmwtMi0yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMywxOWExLDEsMCwwLDEtLjcxLS4yOUwxOCw0'@;
put 'LjQxLDMuNzEsMTguNzFhMSwxLDAsMCwxLTEuNDEtMS40MWwxNS0xNWExLDEsMCwwLDEsMS40MSwwbDE1LDE1QTEsMSwwLDAsMSwzMywxOVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTgsNy43OSw2LDE5Ljgz'@;
put 'VjMyYTIsMiwwLDAsMCwyLDJoN1YyNGg2VjM0aDdhMiwyLDAsMCwwLDItMlYxOS43NloiLz4nKSxULkNsclNoYXBlQ29nPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTguMSwxMWMtMy45LDAtNywzLjEtNyw3'@;
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 'dCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPicpLFQuQ2xyU2hhcGVDaGVjaz0oMCx2LmNsckljb25TVkcpKCc8cGF0'@;
put 'aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTEzLjcyLDI3LjY5LDMuMjksMTcuMjdhMSwxLDAsMCwxLDEuNDEtMS40MWw5LDlMMzEuMjksNy4yOWExLDEsMCwwLDEsMS40MSwxLjQxWiIvPicpLFQuQ2xyU2hhcGVUaW1lcz0oMCx2LmNsckljb25TVkcp'@;
put 'KCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LjQxLDE4bDguMjktOC4yOWExLDEsMCwwLDAtMS40MS0xLjQxTDE4LDE2LjU5LDkuNzEsOC4yOUExLDEsMCwwLDAsOC4yOSw5LjcxTDE2LjU5LDE4LDguMjksMjYuMjlhMSwxLDAsMSwwLDEu'@;
put 'NDEsMS40MUwxOCwxOS40MWw4LjI5LDguMjlhMSwxLDAsMCwwLDEuNDEtMS40MVoiLz4nKSxULkNsclNoYXBlRXhjbGFtYXRpb25UcmlhbmdsZT0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDIxLjMyYTEu'@;
put 'MywxLjMsMCwwLDAsMS4zLTEuM1YxNGExLjMsMS4zLDAsMSwwLTIuNiwwdjZBMS4zLDEuMywwLDAsMCwxOCwyMS4zMloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBjeD0iMTcuOTUiIGN5PSIyNC4yNyIgcj0i'@;
put 'MS41Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0zMC4zMywyNS41NCwyMC41OSw3LjZhMywzLDAsMCwwLTUuMjcsMEw1LjU3LDI1LjU0QTMsMywwLDAsMCw4LjIxLDMwSDI3LjY5YTMsMywwLDAsMCwyLjY0'@;
put 'LTQuNDNabS0xLjc4LDEuOTRhMSwxLDAsMCwxLS44Ni40OUg4LjIxYTEsMSwwLDAsMS0uODgtMS40OEwxNy4wNyw4LjU1YTEsMSwwLDAsMSwxLjc2LDBsOS43NCwxNy45NEExLDEsMCwwLDEsMjguNTUsMjcuNDhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk'@;
put 'IGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMwLjMzLDI1LjU0LDIwLjU5LDcuNmEzLDMsMCwwLDAtNS4yNywwTDUuNTcsMjUuNTRBMywzLDAsMCwwLDguMjEsMzBIMjcuNjlhMywzLDAsMCwwLDIuNjQtNC40M1pNMTYuNDYsMTIuNzRhMS40OSwxLjQ5LDAsMCwxLDMsMHY2Ljg5YTEuNDksMS40'@;
put 'OSwwLDEsMS0zLDBaTTE4LDI2LjI1YTEuNzIsMS43MiwwLDEsMSwxLjcyLTEuNzJBMS43MiwxLjcyLDAsMCwxLDE4LDI2LjI1WiIvPicpLFQuQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZT0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMSIgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptMCwyMkExMCwxMCwwLDEsMSwyOCwxOCwxMCwxMCwwLDAsMSwxOCwyOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIg'@;
put 'ZD0iTTE4LDIwLjA3YTEuMywxLjMsMCwwLDEtMS4zLTEuM3YtNmExLjMsMS4zLDAsMSwxLDIuNiwwdjZBMS4zLDEuMywwLDAsMSwxOCwyMC4wN1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBjeD0iMTcuOTUi'@;
put 'IGN5PSIyMy4wMiIgcj0iMS41Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptLTEuNDksNmExLjQ5LDEuNDksMCwwLDEsMywwdjYuODlhMS40'@;
put 'OSwxLjQ5LDAsMSwxLTMsMFpNMTgsMjUuNWExLjcyLDEuNzIsMCwxLDEsMS43Mi0xLjcyQTEuNzIsMS43MiwwLDAsMSwxOCwyNS41WiIvPicpLFQuQ2xyU2hhcGVDaGVja0NpcmNsZT0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMSIgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptMCwyMkExMCwxMCwwLDEsMSwyOCwxOCwxMCwxMCwwLDAsMSwxOCwyOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0i'@;
put 'TTE2LjM0LDIzLjc0bC01LTVhMSwxLDAsMCwxLDEuNDEtMS40MWwzLjU5LDMuNTksNi43OC02Ljc4YTEsMSwwLDAsMSwxLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMwLDE4QTEyLDEyLDAsMSwx'@;
put 'LDE4LDYsMTIsMTIsMCwwLDEsMzAsMThabS00Ljc3LTIuMTZhMS40LDEuNCwwLDAsMC0yLTJsLTYuNzcsNi43N0wxMywxNy4xNmExLjQsMS40LDAsMCwwLTIsMmw1LjQ1LDUuNDVaIi8+JyksVC5DbHJTaGFwZUluZm9DaXJjbGU9KDAsdi5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgIGN4PSIxNy45MyIgY3k9IjExLjkiIHI9IjEuNCIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAgZD0iTTIxLDIzSDE5VjE1SDE2YTEsMSwwLDAsMCwwLDJo'@;
put 'MXY2SDE1YTEsMSwwLDEsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptMCwyMkExMCwxMCww'@;
put 'LDEsMSwyOCwxOCwxMCwxMCwwLDAsMSwxOCwyOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0tMiw1LjE1YTIsMiwwLDEsMSwyLDJBMiwy'@;
put 'LDAsMCwxLDE1LjksMTEuMTVaTTIzLDI0YTEsMSwwLDAsMS0xLDFIMTVhMSwxLDAsMSwxLDAtMmgyVjE3SDE2YTEsMSwwLDAsMSwwLTJoNHY4aDJBMSwxLDAsMCwxLDIzLDI0WiIvPicpLFQuQ2xyU2hhcGVJbmZvU3RhbmRhcmQ9KDAsdi5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjE3Ljk3IiBjeT0iMTAuNDUiIHI9IjEuNCIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjEsMjVIMTlWMTQuMUgxNmExLDEsMCwwLDAsMCwy'@;
put 'aDFWMjVIMTVhMSwxLDAsMCwwLDAsMmg2YTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xOCwzNEExNiwxNiwwLDEsMSwzNCwxOCwxNiwxNiwwLDAsMSwxOCwzNFpNMTgsNEExNCwx'@;
put 'NCwwLDEsMCwzMiwxOCwxNCwxNCwwLDAsMCwxOCw0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyLjFhMTYsMTYsMCwxLDAsMTYsMTZBMTYsMTYsMCwwLDAsMTgsMi4xWm0tLjEsNS4yOGEyLDIsMCwxLDEt'@;
put 'MiwyQTIsMiwwLDAsMSwxNy45LDcuMzhabTMuNiwyMS4yNWgtN2ExLjQsMS40LDAsMSwxLDAtMi44aDIuMXYtOS4ySDE1YTEuNCwxLjQsMCwxLDEsMC0yLjhoNC40djEyaDIuMWExLjQsMS40LDAsMSwxLDAsMi44WiIvPicpLFQuQ2xyU2hhcGVTdWNjZXNzU3RhbmRhcmQ9KDAsdi5jbHJJY29u'@;
put 'U1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIi8+XG4gICAgICAgICAgICAgICAgPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yOCwxMi4xYTEsMSwwLDAsMC0xLjQxLDBMMTUuNDksMjMuMTVsLTYtNkExLDEsMCwwLDAsOCwxOC41M0wxNS40OSwyNiwyOCwxMy41MkExLDEsMCwwLDAsMjgsMTIuMVoiLz5cbiAgICAgICAgICAgICAg'@;
put 'ICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWk0yOC40NSwxMi42MywxNS4zMSwyNS43Niw3LjU1LDE4YTEuNCwxLjQsMCwwLDEsMi0ybDUuNzgsNS43OEwyNi40NywxMC42NWEx'@;
put 'LjQsMS40LDAsMSwxLDIsMloiLz4nKSxULkNsclNoYXBlRXJyb3JTdGFuZGFyZD0oMCx2LmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTgiIGN5PSIyNi4wNiIgcj0iMS4zMyIvPlxuICAgICAgICAgICAgICAgIDxw'@;
put 'YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMjIuNjFhMSwxLDAsMCwxLTEtMXYtMTJhMSwxLDAsMSwxLDIsMHYxMkExLDEsMCwwLDEsMTgsMjIuNjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xOCwzNEExNiwxNiwwLDEsMSwzNCwxOCwxNiwxNiwwLDAsMSwxOCwzNFpNMTgsNEExNCwxNCwwLDEsMCwzMiwxOCwxNCwxNCwwLDAsMCwxOCw0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w'@;
put 'YXRoLTEiIGQ9Ik0xOCwyLjFhMTYsMTYsMCwxLDAsMTYsMTZBMTYsMTYsMCwwLDAsMTgsMi4xWk0xNi42LDguOGExLjQsMS40LDAsMCwxLDIuOCwwdjEyYTEuNCwxLjQsMCwwLDEtMi44LDBaTTE4LDI4LjZhMS44LDEuOCwwLDEsMSwxLjgtMS44QTEuOCwxLjgsMCwwLDEsMTgsMjguNloiLz4n'@;
put 'KSxULkNsclNoYXBlV2FybmluZ1N0YW5kYXJkPSgwLHYuY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGN4PSIxOCIgY3k9IjI2LjA2IiByPSIxLjMzIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyMi42MWExLDEsMCwwLDEtMS0xdi0xMmExLDEsMCwxLDEsMiwwdjEyQTEsMSwwLDAsMSwxOCwyMi42MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIg'@;
put 'ZD0iTTE1LjA2MjA3ODIsMS42ODExOTYgQzE1LjYyOTg4MTksMC42NDkyNjYzNTUgMTYuNzEwOTA5MSwwLjAxMDIyMTkzOTYgMTcuODg1LDAuMDEwMjIxOTM5NiBDMTkuMDU5MDkwOSwwLjAxMDIyMTkzOTYgMjAuMTQwMTE4MSwwLjY0OTI2NjM1NSAyMC43MDg2NDMzLDEuNjgyNTIxMjkgTDM0'@;
put 'LjU5ODY0NCwyNy4yNDI1MjI1IEMzNS4xNDA3NzQ2LDI4LjI0MDEzOTcgMzUuMTE3NDM0NSwyOS40NDk1MzczIDM0LjUzNzIxNjEsMzAuNDI1NDk0MyBDMzMuOTU2OTk3NywzMS40MDE0NTE0IDMyLjkwNTY3MSwzMS45OTk2OTg0IDMxLjc3LDMyIEw0LjAyMjM5MzIzLDMxLjk5OTc0OTIgQzIu'@;
put 'ODc0MDkwMDksMzIuMDI1NDY5OSAxLjc5OTAyODQzLDMxLjQzNzU3NTMgMS4yMDEwNjMzNSwzMC40NTY5MTI2IEMwLjYwMzA5ODI2NSwyOS40NzYyNDk5IDAuNTcyNzc3ODk5LDI4LjI1MTMxNzkgMS4xMjIwNzgxOCwyNy4yNDExOTYgTDE1LjA2MjA3ODIsMS42ODExOTYgWiBNMi44Nzg1MDc2'@;
put 'NywyOC4xOTc3MjgyIEMyLjY3MDYwOTY2LDI4LjU4MDAzNzYgMi42ODIwOTc1LDI5LjA0NDE0MjMgMi45MDg2NTU3LDI5LjQxNTY5NzcgQzMuMTM1MjEzOSwyOS43ODcyNTMyIDMuNTQyNTM1NCwzMC4wMDk5OTU5IDQsMzAgTDMxLjc2OTczNDQsMzAgQzMyLjE5OTkxOTEsMjkuOTk5ODg1OCAz'@;
put 'Mi41OTgyNDc4LDI5Ljc3MzIyMDggMzIuODE4MDgyMSwyOS40MDM0NDgyIEMzMy4wMzc5MTY0LDI5LjAzMzY3NTcgMzMuMDQ2NzU5NSwyOC41NzU0NTY3IDMyLjg0MTM1NjcsMjguMTk3NDc4NyBMMTguOTUzODczOSwyLjY0MjA4MTk1IEMxOC43Mzk0MjM2LDIuMjUyMzQ0MzYgMTguMzI5ODQx'@;
put 'OSwyLjAxMDIyMTk0IDE3Ljg4NSwyLjAxMDIyMTk0IEMxNy40NDA2ODg5LDIuMDEwMjIxOTQgMTcuMDMxNTUzOCwyLjI1MTc2NjkyIDE2LjgxNjg5NDYsMi42NDA2ODc1MyBMMi44Nzg1MDc2NywyOC4xOTc3MjgyIFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzQuNiwyOS4yMSwyMC43MSwzLjY1YTMuMjIsMy4yMiwwLDAsMC01LjY2LDBMMS4xNywyOS4yMUEzLjIyLDMuMjIsMCwwLDAsNCwzNEgzMS43N2EzLjIyLDMuMjIsMCwwLDAsMi44My00Ljc1Wk0xNi42LDEwYTEuNCwxLjQsMCwwLDEsMi44LDB2'@;
put 'MTJhMS40LDEuNCwwLDAsMS0yLjgsMFpNMTgsMjkuODVhMS44LDEuOCwwLDEsMSwxLjgtMS44QTEuOCwxLjgsMCwwLDEsMTgsMjkuODVaIi8+JyksVC5DbHJTaGFwZUhlbHBJbmZvPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNS4zOSwyNS40NWExLDEsMCwwLDAtMS4zOC4yOWMtMS40'@;
put 'MSwyLjE2LTQsNC44MS02LjMxLDUuN3MtNC4xMi41Ny00Ljg0LDBjLS4zMS0uMjctMS4xMi0xLS40My0zLjQ5LjQ2LTEuNjYsMy4zMi05LjQ4LDQtMTEuMzhsLTIuMTguMjhjLS42OSwxLjg2LTMuMjksOC44NC0zLjc2LDEwLjU4LS42OCwyLjQ5LS4zNCw0LjMsMS4wOSw1LjU2QTUuNTksNS41'@;
put 'OSwwLDAsMCwxNSwzNGE5LjUzLDkuNTMsMCwwLDAsMy40NS0uN2MyLjc5LTEuMDksNS43Mi00LjEyLDcuMjYtNi40N0ExLDEsMCwwLDAsMjUuMzksMjUuNDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS4z'@;
put 'LDExYTQuNSw0LjUsMCwxLDAtNC41LTQuNUE0LjUsNC41LDAsMCwwLDE5LjMsMTFabTAtN2EyLjUsMi41LDAsMSwxLTIuNSwyLjVBMi41LDIuNSwwLDAsMSwxOS4zLDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9'@;
put 'Ik0xMS44MSwxNWMuMDYsMCw2LjI3LS44Miw3LjczLTEsLjY1LS4xLDEuMTQsMCwxLjMuMTVzLjIxLjgtLjA3LDEuNjhjLS42MSwxLjg2LTMuNjksMTEtNC41OSwxMy43MWE4LDgsMCwwLDAsMS4yOS0uMzgsNy4zMiw3LjMyLDAsMCwwLDEuMTUtLjZDMTkuODUsMjUsMjIuMTUsMTguMSwyMi42'@;
put 'NywxNi41MnMuMzktMi43OC0uMy0zLjZhMy4xNiwzLjE2LDAsMCwwLTMuMDgtLjgzYy0xLjQzLjE1LTcuNDcuOTQtNy43MywxYTEsMSwwLDAsMCwuMjYsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjAu'@;
put 'NzUiIGN5PSI2IiByPSI0IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0Ljg0LDI2LjIzYTEsMSwwLDAsMC0xLjQuMjksMTYuNiwxNi42LDAsMCwxLTMuNTEsMy43N2MtLjMzLjI1LTEuNTYsMS4yLTIuMDgsMS0uMzYt'@;
put 'LjExLS4xNS0uODItLjA4LTEuMTJsLjUzLTEuNTdjLjIyLS42NCw0LjA1LTEyLDQuNDctMTMuMy42Mi0xLjkuMzUtMy43Ny0yLjQ4LTMuMzItLjc3LjA4LTguNTgsMS4wOS04LjcyLDEuMWExLDEsMCwwLDAsLjEzLDJzMy0uMzksMy4zMy0uNDJhLjg4Ljg4LDAsMCwxLC44NS40NCwyLjQ3LDIu'@;
put 'NDcsMCwwLDEtLjA3LDEuNzFjLS4yNiwxLTQuMzcsMTIuNTgtNC41LDEzLjI1YTIuNzgsMi43OCwwLDAsMCwxLjE4LDMsNSw1LDAsMCwwLDMuMDguODNoMGE4LjUzLDguNTMsMCwwLDAsMy4wOS0uNjJjMi40OS0xLDUuMDktMy42Niw2LjQ2LTUuNzVBMSwxLDAsMCwwLDI0Ljg0LDI2LjIzWiIg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxULkNsclNoYXBlQmFycz0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDI5SDRhMSwxLDAsMCwxLDAtMkgzMmExLDEsMCwwLDEs'@;
put 'MCwyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIsMTlINGExLDEsMCwwLDEsMC0ySDMyYTEsMSwwLDAsMSwwLDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0zMiw5SDRBMSwxLDAsMCwxLDQsN0gzMmExLDEsMCwwLDEsMCwyWiIvPicpLFQuQ2xyU2hhcGVVc2VyPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwxN2E3LDcsMCwxLDAtNy03QTcsNywwLDAsMCwxOCwxN1pNMTgsNWE1LDUsMCwxLDEt'@;
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 'cz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxULkNsclNoYXBlQW5nbGU9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOS41MiwyMi41'@;
put 'MiwxOCwxMC42LDYuNDgsMjIuNTJhMS43LDEuNywwLDAsMCwyLjQ1LDIuMzZMMTgsMTUuNDlsOS4wOCw5LjM5YTEuNywxLjcsMCwwLDAsMi40NS0yLjM2WiIvPicpLFQuQ2xyU2hhcGVGb2xkZXI9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
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 'JyksVC5DbHJTaGFwZUZvbGRlck9wZW49KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zNS4zMiwxMy43NEExLjcxLDEuNzEsMCwwLDAsMzMuODcsMTNIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41Miwx'@;
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 'ZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxULkNsclNoYXBlQmVsbD0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLjUxLDI3Ljgz'@;
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+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLFQuQ2xyU2hhcGVJbWFnZT0oMCx2'@;
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 'Y2xyLWktYmFkZ2UiLz4nKSxULkNsclNoYXBlQ2xvdWQ9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yNy4xNCwzM0gxMC42MkM1LjY3LDMzLDEsMjguMTksMSwyMy4xYTEwLDEwLDAsMCwxLDgtOS43NSwxMC4x'@;
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 'MS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPicpLFQuQ2xyU2hhcGVFbGxpcHNpc0hvcml6b250YWw9KDAsdi5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjeD0iMzEuMSIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAg'@;
put 'ICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjQuOSIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzEuMSIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNC45IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAv'@;
put 'PlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLFQuQ2xyU2hhcGVFbGxpcHNpc1ZlcnRpY2FsPSgwLHYuY2xySWNvblNWRyko'@;
put 'JzxjaXJjbGUgY3g9IjE4IiBjeT0iNC45IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'MiIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMzEuMSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iNC45IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNp'@;
put 'cmNsZSBjeD0iMTgiIGN5PSIzMS4xIiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxULkNsclNoYXBlRmlsdGVyR3JpZD0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE1LDI1Ljg2bDIsMVYyMC4yN2ExLDEsMCww'@;
put 'LDAtLjI5LS43TDEwLjIzLDEzSDI1Ljc5bC02LjQ3LDYuNTdhMSwxLDAsMCwwLS4yOS43TDE5LDI4bDIsMVYyMC42OEwyNy41OCwxNEExLjQ2LDEuNDYsMCwwLDAsMjgsMTNWMTJhMSwxLDAsMCwwLTEtMUg5YTEsMSwwLDAsMC0xLDF2MWExLjQ2LDEuNDYsMCwwLDAsLjQyLDFMMTUsMjAuNjha'@;
put 'Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTgsMTF2MS4xMmEuNS41LDAsMCwwLC4xNS4zNWw3LjI4LDcuMzZhLjUuNSwwLDAsMSwuMTUuMzV2Ni44OWEuNS41LDAsMCwwLC4yOC40NWwzLjk1LDEuNDFhLjUuNSww'@;
put 'LDAsMCwuNzItLjQ1bDAtOC4zOWEuNTQuNTQsMCwwLDEsLjE4LS4zNWw3LjEyLTcuMjVhLjUuNSwwLDAsMCwuMTUtLjM1VjExWiIvPicpLFQuQ2xyU2hhcGVGaWx0ZXJHcmlkQ2lyY2xlPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0xIiBkPSJNMTUsMjUuODZsMiwxVjIwLjI3YTEsMSwwLDAsMC0uMjktLjdMMTAuMjMsMTNIMjUuNzlsLTYuNDcsNi41N2ExLDEsMCwwLDAtLjI5LjdMMTksMjhsMiwxVjIwLjY4TDI3LjU4LDE0QTEuNDYsMS40NiwwLDAsMCwyOCwxM1YxMmExLDEsMCwwLDAtMS0xSDlhMSwxLDAsMCww'@;
put 'LTEsMXYxYTEuNDYsMS40NiwwLDAsMCwuNDIsMUwxNSwyMC42OFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCww'@;
put 'LDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0'@;
put 'LDE0LDAsMCwxLDE4LDMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik04LDExdjEuMTJhLjUuNSwwLDAsMCwuMTUuMzVsNy4yOCw3LjM2YS41LjUsMCwwLDEsLjE1LjM1djYuODlhLjUuNSwwLDAsMCwuMjguNDVs'@;
put 'My45NSwxLjQxYS41LjUsMCwwLDAsLjcyLS40NWwwLTguMzlhLjU0LjU0LDAsMCwxLC4xOC0uMzVsNy4xMi03LjI1YS41LjUsMCwwLDAsLjE1LS4zNVYxMVoiLz4nKSxULkNsclNoYXBlVm1CdWc9KDAsdi5jbHJJY29uU1ZHKSgnPHJlY3Qgd2lkdGg9IjM2IiBoZWlnaHQ9IjM2IiByeD0iMyIg'@;
put 'ZmlsbD0iI2ZmZmZmZiIgb3BhY2l0eT0iMC4xNSIgc3R5bGU9Imlzb2xhdGlvbjppc29sYXRlIi8+PHBhdGggZD0iTTMuNzksMTQuODNhMS4wOSwxLjA5LDAsMCwwLTEuNDctLjU2LDEuMDksMS4wOSwwLDAsMC0uNTQsMS40OWwyLjQ3LDUuNGMuMzkuODUuOCwxLjI5LDEuNTcsMS4yOVM3LDIy'@;
put 'LDcuMzksMjEuMTZsMi4xNy00Ljc3YS4zMy4zMywwLDAsMSwuMzEtLjIuMzUuMzUsMCwwLDEsLjM1LjM1djQuNjFhMS4xNSwxLjE1LDAsMCwwLDEuMTQsMS4zLDEuMTcsMS4xNywwLDAsMCwxLjE3LTEuM1YxNy4zOGExLjE1LDEuMTUsMCwwLDEsMS4yMi0xLjIsMS4xMywxLjEzLDAsMCwxLDEu'@;
put 'MTgsMS4ydjMuNzdhMS4xNywxLjE3LDAsMSwwLDIuMzIsMFYxNy4zOGExLjE1LDEuMTUsMCwwLDEsMS4yMi0xLjIsMS4xMywxLjEzLDAsMCwxLDEuMTgsMS4ydjMuNzdhMS4xNiwxLjE2LDAsMSwwLDIuMzEsMFYxNi44NmEyLjY5LDIuNjksMCwwLDAtMi43OC0yLjY5LDMuNTcsMy41NywwLDAs'@;
put 'MC0yLjQ3LDEuMDUsMi43NSwyLjc1LDAsMCwwLTIuMzgtMS4wNUEzLjkzLDMuOTMsMCwwLDAsMTIsMTUuMjJhMi44MiwyLjgyLDAsMCwwLTIuMDgtMS4wNUEyLjU1LDIuNTUsMCwwLDAsNy40LDE1Ljg5TDUuODIsMTkuNjNsLTItNC44IiBmaWxsPSIjZmZmZmZmIi8+PHBhdGggZD0iTTMzLDE0'@;
put 'LjE4QTEuMTQsMS4xNCwwLDAsMCwzMS45LDE1bC0xLjE5LDMuNzNMMjkuNSwxNS4wNWExLjE4LDEuMTgsMCwwLDAtMS4xNS0uODdoLS4xYTEuMiwxLjIsMCwwLDAtMS4xNS44N2wtMS4xOSwzLjcxLTEuMTgtMy43MWExLjE1LDEuMTUsMCwwLDAtMS4xMS0uODcsMS4wOCwxLjA4LDAsMCwwLTEu'@;
put 'MTIsMS4wNywxLjY4LDEuNjgsMCwwLDAsLjEuNTRsMiw1LjdhMS4yNywxLjI3LDAsMCwwLDEuMjcsMSwxLjI0LDEuMjQsMCwwLDAsMS4yLS45M2wxLjItMy42NCwxLjIsMy42NGExLjI1LDEuMjUsMCwwLDAsMS4yNi45M0ExLjI3LDEuMjcsMCwwLDAsMzIsMjEuNUwzNCwxNS43M2ExLjc3LDEu'@;
put 'NzcsMCwwLDAsLjA4LS40OEExLjA3LDEuMDcsMCwwLDAsMzMsMTQuMThaIiBmaWxsPSIjZmZmZmZmIi8+JyksVC5DbHJTaGFwZVNlYXJjaD0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE2LjMzLDUuMDVBMTAu'@;
put 'OTUsMTAuOTUsMCwxLDEsNS4zOSwxNiwxMSwxMSwwLDAsMSwxNi4zMyw1LjA1bTAtMi4wNWExMywxMywwLDEsMCwxMywxMywxMywxMywwLDAsMC0xMy0xM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTM1'@;
put 'LDMzLjI5bC03LjM3LTcuNDItMS40MiwxLjQxLDcuMzcsNy40MkExLDEsMCwxLDAsMzUsMzMuMjlaIi8+JyksVC5DbHJTaGFwZVZpZXdDb2x1bW5zPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzEsNUg1QTIs'@;
put 'MiwwLDAsMCwzLDdWMjlhMiwyLDAsMCwwLDIsMkgzMWEyLDIsMCwwLDAsMi0yVjdBMiwyLDAsMCwwLDMxLDVaTTEzLDI5SDVWN2g4Wm0xMCwwSDE1VjdoOFoiLz4nKSxULkNsclNoYXBlQW5nbGVEb3VibGU9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOSwxOS40MWExLDEsMCwwLDEtLjcxLS4yOUwxOCw4LjgzLDcuNzEsMTkuMTJhMSwxLDAsMCwxLTEuNDEtMS40MUwxOCw2LDI5LjcxLDE3LjcxQTEsMSwwLDAsMSwyOSwxOS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI5LDMwLjQxYTEsMSwwLDAsMS0uNzEtLjI5TDE4LDE5LjgzLDcuNzEsMzAuMTJhMSwxLDAsMCwxLTEuNDEtMS40MUwxOCwxNywyOS43MSwyOC43MUExLDEsMCwwLDEsMjksMzAuNDFaIi8+JyksVC5DbHJTaGFwZUNhbGVuZGFyPSgw'@;
put 'LHYuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIuMjUsNkgyOVY4aDNWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEu'@;
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 'MS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPicpLFQuQ2xyU2hhcGVFdmVudD0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE2LjE3LDI1Ljg2LDEwLjgxLDIwLjVhMSwxLDAsMCwxLDEuNDEtMS40MUwxNi4xNywy'@;
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+JyksVC5DbHJTaGFwZUV5ZT0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMuNjIsMTcuNTNjLTMuMzctNi4y'@;
put 'My05LjI4LTEwLTE1LjgyLTEwUzUuMzQsMTEuMywyLDE3LjUzTDEuNzIsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwczEyLjQ2LTMuNzIsMTUuODItMTBsLjI2LS40OFpNMTcuOCwyNi40M0MxMi4xNywyNi40Myw3LDIzLjI5LDQsMThjMy01LjI5LDguMTctOC40MywxMy44'@;
put 'LTguNDNTMjguNTQsMTIuNzIsMzEuNTksMThDMjguNTQsMjMuMjksMjMuNDIsMjYuNDMsMTcuOCwyNi40M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguMDksMTEuMTdBNi44Niw2Ljg2LDAsMSwwLDI1LDE4'@;
put 'LDYuODYsNi44NiwwLDAsMCwxOC4wOSwxMS4xN1ptMCwxMS43MkE0Ljg2LDQuODYsMCwxLDEsMjMsMTgsNC44Nyw0Ljg3LDAsMCwxLDE4LjA5LDIyLjg5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42Miwx'@;
put 'Ny41M2MtMy4zNy02LjIzLTkuMjgtMTAtMTUuODItMTBTNS4zNCwxMS4zLDIsMTcuNTNMMS43MiwxOGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBzMTIuNDYtMy43MiwxNS44Mi0xMGwuMjYtLjQ4Wk0xNy44LDI2LjQzQzEyLjE3LDI2LjQzLDcsMjMuMjksNCwxOGMzLTUuMjks'@;
put 'OC4xNy04LjQzLDEzLjgtOC40M1MyOC41NCwxMi43MiwzMS41OSwxOEMyOC41NCwyMy4yOSwyMy40MiwyNi40MywxNy44LDI2LjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTguMDkiIGN5PSIxOC4wMyIgcj0i'@;
put 'Ni44NiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPicpLFQuQ2xyU2hhcGVFeWVIaWRlPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNS4xOSwyMC40QTYuNzgsNi43OCwwLDAsMCwyNS42MiwxOGE2Ljg2LDYuODYsMCwwLDAtNi44Ni02Ljg2LDYuNzksNi43'@;
put 'OSwwLDAsMC0yLjM3LjQzTDE4LDEzLjIzYTQuNzgsNC43OCwwLDAsMSwuNzQtLjA2QTQuODcsNC44NywwLDAsMSwyMy42MiwxOGE0Ljc5LDQuNzksMCwwLDEtLjA2Ljc0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9'@;
put 'Ik0zNC4yOSwxNy41M2MtMy4zNy02LjIzLTkuMjgtMTAtMTUuODItMTBhMTYuODIsMTYuODIsMCwwLDAtNS4yNC44NUwxNC44NCwxMGExNC43OCwxNC43OCwwLDAsMSwzLjYzLS40N2M1LjYzLDAsMTAuNzUsMy4xNCwxMy44LDguNDNhMTcuNzUsMTcuNzUsMCwwLDEtNC4zNyw1LjFsMS40Miwx'@;
put 'LjQyYTE5LjkzLDE5LjkzLDAsMCwwLDUtNmwuMjYtLjQ4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00Ljg3LDUuNzhsNC40Niw0LjQ2YTE5LjUyLDE5LjUyLDAsMCwwLTYuNjksNy4yOUwyLjM4LDE4bC4yNi40'@;
put 'OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMGExNi45MywxNi45MywwLDAsMCw3LjM3LTEuNjlsNSw1LDEuNzUtMS41LTI2LTI2Wm05Ljc1LDkuNzUsNi42NSw2LjY1YTQuODEsNC44MSwwLDAsMS0yLjUuNzJBNC44Nyw0Ljg3LDAsMCwxLDEzLjksMTgsNC44MSw0LjgxLDAsMCwxLDE0LjYy'@;
put 'LDE1LjUzWm0tMS40NS0xLjQ1YTYuODUsNi44NSwwLDAsMCw5LjU1LDkuNTVsMS42LDEuNmExNC45MSwxNC45MSwwLDAsMS01Ljg2LDEuMmMtNS42MywwLTEwLjc1LTMuMTQtMTMuOC04LjQzYTE3LjI5LDE3LjI5LDAsMCwxLDYuMTItNi4zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4zNywxMS4xN0E2Ljc5LDYuNzksMCwwLDAsMTYsMTEuNmw4LjgsOC44QTYuNzgsNi43OCwwLDAsMCwyNS4yMywxOCw2Ljg2LDYuODYsMCwwLDAsMTguMzcsMTEuMTdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt'@;
put 'c29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQuMjksMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwYTE2LjgyLDE2LjgyLDAsMCwwLTUuMjQuODVMMTQuODQsMTBhMTQuNzgsMTQuNzgsMCwwLDEsMy42My0uNDdjNS42MywwLDEwLjc1LDMuMTQsMTMuOCw4'@;
put 'LjQzYTE3Ljc1LDE3Ljc1LDAsMCwxLTQuMzcsNS4xbDEuNDIsMS40MmExOS45MywxOS45MywwLDAsMCw1LTZsLjI2LS40OFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00Ljg3LDUuNzhsNC40Niw0LjQ2YTE5LjUyLDE5'@;
put 'LjUyLDAsMCwwLTYuNjksNy4yOUwyLjM4LDE4bC4yNi40OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMGExNi45MywxNi45MywwLDAsMCw3LjM3LTEuNjlsNSw1LDEuNzUtMS41LTI2LTI2Wm04LjMsOC4zYTYuODUsNi44NSwwLDAsMCw5LjU1LDkuNTVsMS42LDEuNmExNC45MSwxNC45MSww'@;
put 'LDAsMS01Ljg2LDEuMmMtNS42MywwLTEwLjc1LTMuMTQtMTMuOC04LjQzYTE3LjI5LDE3LjI5LDAsMCwxLDYuMTItNi4zWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPicpLFQuQ2xyU2hhcGVTdGVwRm9yd2FyZDI9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0i'@;
put 'TTcuMDgsNi41MmExLjY4LDEuNjgsMCwwLDAsMCwyLjRMMTYuNTEsMTgsNy4xMiwyNy4wOGExLjcsMS43LDAsMCwwLDIuMzYsMi40NGgwTDIxLjQsMTgsOS40OCw2LjQ3QTEuNjksMS42OSwwLDAsMCw3LjA4LDYuNTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'MSIgLz48cGF0aCBkPSJNMjYuNDksNWExLjcsMS43LDAsMCwwLTEuNywxLjdWMjkuM2ExLjcsMS43LDAsMCwwLDMuNCwwVjYuN0ExLjcsMS43LDAsMCwwLDI2LjQ5LDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxULkNsclNoYXBlQXJyb3c9KDAs'@;
put 'di5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI3LjY2LDE1LjYxLDE4LDYsOC4zNCwxNS42MUExLDEsMCwxLDAsOS43NSwxN0wxNyw5LjgxVjI4Ljk0YTEsMSwwLDEsMCwyLDBWOS44MUwyNi4yNSwxN2ExLDEsMCwwLDAsMS40MS0xLjQyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEiLz4nKSxULkNvcmVTaGFwZXM9eyJ1bmtub3duLXN0YXR1cyI6VC5DbHJTaGFwZVVua25vd25TdGF0dXMsaG9tZTpULkNsclNoYXBlSG9tZSxjb2c6VC5DbHJTaGFwZUNvZyxjaGVjazpULkNsclNoYXBlQ2hlY2ssdGltZXM6VC5DbHJTaGFwZVRpbWVzLCJleGNsYW1hdGlv'@;
put 'bi10cmlhbmdsZSI6VC5DbHJTaGFwZUV4Y2xhbWF0aW9uVHJpYW5nbGUsImV4Y2xhbWF0aW9uLWNpcmNsZSI6VC5DbHJTaGFwZUV4Y2xhbWF0aW9uQ2lyY2xlLCJjaGVjay1jaXJjbGUiOlQuQ2xyU2hhcGVDaGVja0NpcmNsZSwiaW5mby1jaXJjbGUiOlQuQ2xyU2hhcGVJbmZvQ2lyY2xlLCJp'@;
put 'bmZvLXN0YW5kYXJkIjpULkNsclNoYXBlSW5mb1N0YW5kYXJkLCJzdWNjZXNzLXN0YW5kYXJkIjpULkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJkLCJlcnJvci1zdGFuZGFyZCI6VC5DbHJTaGFwZUVycm9yU3RhbmRhcmQsIndhcm5pbmctc3RhbmRhcmQiOlQuQ2xyU2hhcGVXYXJuaW5nU3RhbmRh'@;
put 'cmQsImhlbHAtaW5mbyI6VC5DbHJTaGFwZUhlbHBJbmZvLGJhcnM6VC5DbHJTaGFwZUJhcnMsdXNlcjpULkNsclNoYXBlVXNlcixhbmdsZTpULkNsclNoYXBlQW5nbGUsZm9sZGVyOlQuQ2xyU2hhcGVGb2xkZXIsImZvbGRlci1vcGVuIjpULkNsclNoYXBlRm9sZGVyT3BlbixiZWxsOlQuQ2xy'@;
put 'U2hhcGVCZWxsLGltYWdlOlQuQ2xyU2hhcGVJbWFnZSxjbG91ZDpULkNsclNoYXBlQ2xvdWQsImVsbGlwc2lzLWhvcml6b250YWwiOlQuQ2xyU2hhcGVFbGxpcHNpc0hvcml6b250YWwsImVsbGlwc2lzLXZlcnRpY2FsIjpULkNsclNoYXBlRWxsaXBzaXNWZXJ0aWNhbCwiZmlsdGVyLWdyaWQi'@;
put 'OlQuQ2xyU2hhcGVGaWx0ZXJHcmlkLCJmaWx0ZXItZ3JpZC1jaXJjbGUiOlQuQ2xyU2hhcGVGaWx0ZXJHcmlkQ2lyY2xlLCJ2bS1idWciOlQuQ2xyU2hhcGVWbUJ1ZyxzZWFyY2g6VC5DbHJTaGFwZVNlYXJjaCwidmlldy1jb2x1bW5zIjpULkNsclNoYXBlVmlld0NvbHVtbnMsImFuZ2xlLWRv'@;
put 'dWJsZSI6VC5DbHJTaGFwZUFuZ2xlRG91YmxlLGNhbGVuZGFyOlQuQ2xyU2hhcGVDYWxlbmRhcixldmVudDpULkNsclNoYXBlRXZlbnQsZXllOlQuQ2xyU2hhcGVFeWUsImV5ZS1oaWRlIjpULkNsclNoYXBlRXllSGlkZSwic3RlcC1mb3J3YXJkLTIiOlQuQ2xyU2hhcGVTdGVwRm9yd2FyZDIs'@;
put 'YXJyb3c6VC5DbHJTaGFwZUFycm93fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVC5Db3JlU2hhcGVzLCJob3VzZSIsKDAsay5kZXNjcmlwdG9yQ29uZmlnKShULkNvcmVTaGFwZXMuaG9tZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShULkNvcmVTaGFwZXMsInNldHRpbmdzIiwoMCxrLmRlc2Ny'@;
put 'aXB0b3JDb25maWcpKFQuQ29yZVNoYXBlcy5jb2cpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVC5Db3JlU2hhcGVzLCJzdWNjZXNzIiwoMCxrLmRlc2NyaXB0b3JDb25maWcpKFQuQ29yZVNoYXBlcy5jaGVjaykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShULkNvcmVTaGFwZXMsImNsb3NlIiwo'@;
put 'MCxrLmRlc2NyaXB0b3JDb25maWcpKFQuQ29yZVNoYXBlcy50aW1lcykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShULkNvcmVTaGFwZXMsIndhcm5pbmciLCgwLGsuZGVzY3JpcHRvckNvbmZpZykoVC5Db3JlU2hhcGVzWyJleGNsYW1hdGlvbi10cmlhbmdsZSJdKSksT2JqZWN0LmRlZmluZVBy'@;
put 'b3BlcnR5KFQuQ29yZVNoYXBlcywiZXJyb3IiLCgwLGsuZGVzY3JpcHRvckNvbmZpZykoVC5Db3JlU2hhcGVzWyJleGNsYW1hdGlvbi1jaXJjbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShULkNvcmVTaGFwZXMsImluZm8iLCgwLGsuZGVzY3JpcHRvckNvbmZpZykoVC5Db3JlU2hhcGVz'@;
put 'WyJpbmZvLWNpcmNsZSJdKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFQuQ29yZVNoYXBlcywibWVudSIsKDAsay5kZXNjcmlwdG9yQ29uZmlnKShULkNvcmVTaGFwZXMuYmFycykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShULkNvcmVTaGFwZXMsImF2YXRhciIsKDAsay5kZXNjcmlwdG9yQ29u'@;
put 'ZmlnKShULkNvcmVTaGFwZXMudXNlcikpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShULkNvcmVTaGFwZXMsImNhcmV0IiwoMCxrLmRlc2NyaXB0b3JDb25maWcpKFQuQ29yZVNoYXBlcy5hbmdsZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShULkNvcmVTaGFwZXMsImRpcmVjdG9yeSIsKDAsay5k'@;
put 'ZXNjcmlwdG9yQ29uZmlnKShULkNvcmVTaGFwZXMuZm9sZGVyKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFQuQ29yZVNoYXBlcywibm90aWZpY2F0aW9uIiwoMCxrLmRlc2NyaXB0b3JDb25maWcpKFQuQ29yZVNoYXBlcy5iZWxsKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFQuQ29yZVNoYXBl'@;
put 'cywiY29sbGFwc2UiLCgwLGsuZGVzY3JpcHRvckNvbmZpZykoVC5Db3JlU2hhcGVzWyJhbmdsZS1kb3VibGUiXSkpfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'Ki8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oemUsVCxzZSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShULCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxULmRlc2NyaXB0b3JDb25maWc9dm9pZCAwLFQuZGVzY3JpcHRvckNvbmZpZz1mdW5jdGlv'@;
put 'biBrKHYpe3JldHVybntlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx2YWx1ZTp2fX19LCIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zaGFwZS10ZW1wbGF0ZS1vYnNlcnZlci50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zaGFwZS10ZW1wbGF0ZS1vYnNlcnZlci50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbih6ZSxULHNlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFQuU2hhcGVUZW1wbGF0ZU9ic2VydmVyPVQuY2hh'@;
put 'bmdlSGFuZGxlckNhbGxiYWNrcz12b2lkIDAsVC5jaGFuZ2VIYW5kbGVyQ2FsbGJhY2tzPXt9O3ZhciBrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdigpe3RoaXMuY2FsbGJhY2tzPVQuY2hhbmdlSGFuZGxlckNhbGxiYWNrc31yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHYsImluc3RhbmNl'@;
put 'Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHYuc2luZ2xlSW5zdGFuY2V8fCh2LnNpbmdsZUluc3RhbmNlPW5ldyB2KSx2LnNpbmdsZUluc3RhbmNlfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHYucHJvdG90eXBlLnN1YnNjcmliZVRvPWZ1bmN0aW9uKGhlLEgpe3ZhciBCPXRo'@;
put 'aXM7cmV0dXJuIHRoaXMuY2FsbGJhY2tzW2hlXT8tMT09PXRoaXMuY2FsbGJhY2tzW2hlXS5pbmRleE9mKEgpJiZ0aGlzLmNhbGxiYWNrc1toZV0ucHVzaChIKTp0aGlzLmNhbGxiYWNrc1toZV09W0hdLGZ1bmN0aW9uKCl7dmFyIEw9Qi5jYWxsYmFja3NbaGVdLmluZGV4T2YoSCk7Qi5jYWxs'@;
put 'YmFja3NbaGVdLnNwbGljZShMLDEpLDA9PT1CLmNhbGxiYWNrc1toZV0ubGVuZ3RoJiZkZWxldGUgQi5jYWxsYmFja3NbaGVdfX0sdi5wcm90b3R5cGUuZW1pdENoYW5nZXM9ZnVuY3Rpb24oaGUsSCl7dGhpcy5jYWxsYmFja3NbaGVdJiZ0aGlzLmNhbGxiYWNrc1toZV0ubWFwKGZ1bmN0aW9u'@;
put 'KEIpe0IoSCl9KX0sdn0oKTtULlNoYXBlVGVtcGxhdGVPYnNlcnZlcj1rfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAg'@;
put 'ICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRz'@;
put 'IGZvdW5kICovZnVuY3Rpb24oemUsVCxzZSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShULCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxULmNsckljb25TVkc9dm9pZCAwO1QuY2xySWNvblNWRz1mdW5jdGlvbiBIKEIpe3ZhciBMPSIiO3JldHVybiBCLmluZGV4T2YoIi0t'@;
put 'YmFkZ2VkIik+LTEmJihMKz0iY2FuLWJhZGdlICIpLEIuaW5kZXhPZigiLS1hbGVydGVkIik+LTEmJihMKz0iY2FuLWFsZXJ0ICIpLEIuaW5kZXhPZigiY2xyLWktc29saWQiKT4tMSYmKEwrPSJoYXMtc29saWQgIiksKEw/JzxzdmcgdmVyc2lvbj0iMS4xIiBjbGFzcz0iJytMKyciIHZpZXdC'@;
put 'b3g9IjAgMCAzNiAzNiIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQgbWVldCJcbiAgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmb2N1c2FibGU9ImZhbHNlIiByb2xlPSJpbWciPic6'@;
put 'JzxzdmcgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMzYgMzYiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiXG4gICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgZm9jdXNh'@;
put 'YmxlPSJmYWxzZSIgcm9sZT0iaW1nIj4nKStCKyI8L3N2Zz4ifX19KX0sMzQyMDk6ZnVuY3Rpb24oV2Upe1dlLmV4cG9ydHM9ZnVuY3Rpb24oemUpe3ZhciBUPXt9O2Z1bmN0aW9uIHNlKGspe2lmKFRba10pcmV0dXJuIFRba10uZXhwb3J0czt2YXIgdj1UW2tdPXtpOmssbDohMSxleHBvcnRz'@;
put 'Ont9fTtyZXR1cm4gemVba10uY2FsbCh2LmV4cG9ydHMsdix2LmV4cG9ydHMsc2UpLHYubD0hMCx2LmV4cG9ydHN9cmV0dXJuIHNlLm09emUsc2UuYz1ULHNlLmQ9ZnVuY3Rpb24oayx2LGhlKXtzZS5vKGssdil8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShrLHYse2VudW1lcmFibGU6ITAsZ2V0'@;
put 'OmhlfSl9LHNlLnI9ZnVuY3Rpb24oayl7dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGssU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShrLCJfX2VzTW9kdWxlIix7dmFs'@;
put 'dWU6ITB9KX0sc2UudD1mdW5jdGlvbihrLHYpe2lmKDEmdiYmKGs9c2UoaykpLDgmdnx8NCZ2JiYib2JqZWN0Ij09dHlwZW9mIGsmJmsmJmsuX19lc01vZHVsZSlyZXR1cm4gazt2YXIgaGU9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihzZS5yKGhlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaGUs'@;
put 'ImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOmt9KSwyJnYmJiJzdHJpbmciIT10eXBlb2Ygaylmb3IodmFyIEggaW4gaylzZS5kKGhlLEgsZnVuY3Rpb24oQil7cmV0dXJuIGtbQl19LmJpbmQobnVsbCxIKSk7cmV0dXJuIGhlfSxzZS5uPWZ1bmN0aW9uKGspe3ZhciB2PWsmJmsuX19l'@;
put 'c01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBrLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIGt9O3JldHVybiBzZS5kKHYsImEiLHYpLHZ9LHNlLm89ZnVuY3Rpb24oayx2KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGssdil9LHNlLnA9IiIsc2Uoc2Uu'@;
put 'cz0iLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2FsbC1zaGFwZXMudHMiKX0oeyIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvYWxsLXNoYXBlcy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAg'@;
put 'ICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvYWxsLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbih6'@;
put 'ZSxULHNlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFQuQWxsU2hhcGVzPXZvaWQgMDt2YXIgaz1zZSgKLyohIC4vY2hhcnQtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY2hhcnQtc2hhcGVzLnRz'@;
put 'Iiksdj1zZSgKLyohIC4vY29tbWVyY2Utc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29tbWVyY2Utc2hhcGVzLnRzIiksaGU9c2UoCi8qISAuL2NvcmUtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMiKSxIPXNlKAov'@;
put 'KiEgLi9lc3NlbnRpYWwtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvZXNzZW50aWFsLXNoYXBlcy50cyIpLEI9c2UoCi8qISAuL21lZGlhLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL21lZGlhLXNoYXBlcy50cyIpLEw9c2UoCi8qISAuL3Nv'@;
put 'Y2lhbC1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9zb2NpYWwtc2hhcGVzLnRzIiksSz1zZSgKLyohIC4vdGVjaG5vbG9neS1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90ZWNobm9sb2d5LXNoYXBlcy50cyIpLEo9c2UoCi8qISAuL3RleHQt'@;
put 'ZWRpdC1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90ZXh0LWVkaXQtc2hhcGVzLnRzIiksST1zZSgKLyohIC4vdHJhdmVsLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3RyYXZlbC1zaGFwZXMudHMiKSxSPVtoZS5Db3JlU2hhcGVzLHYuQ29t'@;
put 'bWVyY2VTaGFwZXMsSC5Fc3NlbnRpYWxTaGFwZXMsQi5NZWRpYVNoYXBlcyxMLlNvY2lhbFNoYXBlcyxLLlRlY2hub2xvZ3lTaGFwZXMsSS5UcmF2ZWxTaGFwZXMsay5DaGFydFNoYXBlcyxKLlRleHRFZGl0U2hhcGVzXSxFPXt9O1QuQWxsU2hhcGVzPUU7Zm9yKHZhciB6PTAsaj1SO3o8ai5s'@;
put 'ZW5ndGg7eisrKXt2YXIgVj1qW3pdO2Zvcih2YXIgRyBpbiBWKVYuaGFzT3duUHJvcGVydHkoRykmJihFW0ddPVZbR10pfXR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChFKX0sIi4vcHJvamVj'@;
put 'dHMvaWNvbnMvc3JjL3NoYXBlcy9jaGFydC1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY2hhcnQtc2hhcGVzLnRzICoq'@;
put 'KiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oemUsVCxzZSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShULCJfX2Vz'@;
put 'TW9kdWxlIix7dmFsdWU6ITB9KSxULkNoYXJ0U2hhcGVzPVQuQ2xyU2hhcGVCZWxsQ3VydmU9VC5DbHJTaGFwZVRpY2tDaGFydD1ULkNsclNoYXBlU2NhdHRlclBsb3Q9VC5DbHJTaGFwZVBpZUNoYXJ0PVQuQ2xyU2hhcGVMaW5lQ2hhcnQ9VC5DbHJTaGFwZUhlYXRNYXA9VC5DbHJTaGFwZUdy'@;
put 'aWRDaGFydD1ULkNsclNoYXBlQ3VydmVDaGFydD1ULkNsclNoYXBlQ2xvdWRDaGFydD1ULkNsclNoYXBlQnViYmxlQ2hhcnQ9VC5DbHJTaGFwZUJveFBsb3Q9VC5DbHJTaGFwZUJhckNoYXJ0PVQuQ2xyU2hhcGVBeGlzQ2hhcnQ9dm9pZCAwO3ZhciBrPXNlKAovKiEgLi4vdXRpbHMvZGVzY3Jp'@;
put 'cHRvci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIiksdj1zZSgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpO1QuQ2xyU2hh'@;
put 'cGVBeGlzQ2hhcnQ9KDAsdi5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMz'@;
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 'MzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPicpLFQu'@;
put 'Q2xyU2hhcGVCYXJDaGFydD0oMCx2LmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiw1SDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzIsNVpN'@;
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 'TCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD4nKSxULkNsclNoYXBlQm94UGxvdD0oMCx2LmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiw1'@;
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+JyksVC5DbHJTaGFwZUJ1YmJsZUNoYXJ0PSgwLHYu'@;
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+JyksVC5DbHJTaGFwZUNsb3VkQ2hhcnQ9KDAsdi5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsNUg0'@;
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+PC9wYXRoPicpLFQuQ2xyU2hhcGVDdXJ2ZUNoYXJ0PSgwLHYuY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTSAzMiA1'@;
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 'KSxULkNsclNoYXBlR3JpZENoYXJ0PSgwLHYuY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE1LDE3SDRhMiwyLDAsMCwxLTItMlY4QTIsMiwwLDAsMSw0LDZIMTVhMiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwx'@;
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+JyksVC5DbHJTaGFwZUhlYXRNYXA9KDAsdi5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMx'@;
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+PC9wYXRoPicpLFQuQ2xyU2hhcGVMaW5lQ2hhcnQ9KDAsdi5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs'@;
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+JyksVC5DbHJTaGFwZVBpZUNoYXJ0PSgwLHYuY2xySWNvblNWRyko'@;
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+PC9wYXRoPicpLFQuQ2xyU2hhcGVTY2F0dGVy'@;
put 'UGxvdD0oMCx2LmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0gMzIgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDUgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA1IDMx'@;
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 'IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiLz5cbiAgPHJlY3Qgd2lkdGg9IjM2IiBoZWlnaHQ9IjM2IiBmaWxsLW9wYWNpdHk9IjAiLz4nKSxU'@;
put 'LkNsclNoYXBlVGlja0NoYXJ0PSgwLHYuY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTSAzMiA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NSAzMSA0IDMxIEwgMzIg'@;
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 'MDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiLz4nKSxULkNsclNoYXBlQmVsbEN1cnZlPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywyOUgzQTEsMSwwLDEsMSwzLDI3SDMzQTEsMSwwLDEsMSwzMywyOVoiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMywyNWgtLjYyYTguMTEsOC4xMSwwLDAsMS04LTYuNjdDMjMuNjIsMTQuNDQsMjEuODksNy45NCwxOCw3Ljk0cy01LjY5LDYuNTEtNi4zOCwxMC4zOWE4LjExLDguMTEsMCwwLDEtOCw2LjY1SDNhMSwxLDAs'@;
put 'MSwxLDAtMmguNkE2LjExLDYuMTEsMCwwLDAsOS42LDE4YzEuNDEtNy44OCw0LjMtMTIsOC4zNS0xMnM2LjkzLDQuMTYsOC4zMywxMmE2LjExLDYuMTEsMCwwLDAsNiw1SDMzYTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxU'@;
put 'LkNoYXJ0U2hhcGVzPXsiYXhpcy1jaGFydCI6VC5DbHJTaGFwZUF4aXNDaGFydCwiYmFyLWNoYXJ0IjpULkNsclNoYXBlQmFyQ2hhcnQsImJ1YmJsZS1jaGFydCI6VC5DbHJTaGFwZUJ1YmJsZUNoYXJ0LCJjbG91ZC1jaGFydCI6VC5DbHJTaGFwZUNsb3VkQ2hhcnQsImN1cnZlLWNoYXJ0IjpU'@;
put 'LkNsclNoYXBlQ3VydmVDaGFydCwiZ3JpZC1jaGFydCI6VC5DbHJTaGFwZUdyaWRDaGFydCwibGluZS1jaGFydCI6VC5DbHJTaGFwZUxpbmVDaGFydCwicGllLWNoYXJ0IjpULkNsclNoYXBlUGllQ2hhcnQsInRpY2stY2hhcnQiOlQuQ2xyU2hhcGVUaWNrQ2hhcnQsInNjYXR0ZXItcGxvdCI6'@;
put 'VC5DbHJTaGFwZVNjYXR0ZXJQbG90LCJib3gtcGxvdCI6VC5DbHJTaGFwZUJveFBsb3QsImhlYXQtbWFwIjpULkNsclNoYXBlSGVhdE1hcCwiYmVsbC1jdXJ2ZSI6VC5DbHJTaGFwZUJlbGxDdXJ2ZX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KFQuQ2hhcnRTaGFwZXMsImFuYWx5dGljcyIsKDAs'@;
put 'ay5kZXNjcmlwdG9yQ29uZmlnKShULkNoYXJ0U2hhcGVzWyJsaW5lLWNoYXJ0Il0pKSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoVC5DaGFydFNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25z'@;
put 'L3NyYy9zaGFwZXMvY29tbWVyY2Utc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvbW1lcmNlLXNoYXBlcy50cyAq'@;
put 'KiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKHplLFQsc2UpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoVCwi'@;
put 'X19lc01vZHVsZSIse3ZhbHVlOiEwfSksVC5Db21tZXJjZVNoYXBlcz1ULkNsclNoYXBlRmFjdG9yeT1ULkNsclNoYXBlRW1wbG95ZWU9VC5DbHJTaGFwZUVtcGxveWVlR3JvdXA9VC5DbHJTaGFwZVJ1YmxlPVQuQ2xyU2hhcGVQZXNvPVQuQ2xyU2hhcGVDb2luQmFnPVQuQ2xyU2hhcGVCaXRj'@;
put 'b2luPVQuQ2xyU2hhcGVZZW49VC5DbHJTaGFwZVdvbj1ULkNsclNoYXBlUnVwZWU9VC5DbHJTaGFwZVBvdW5kPVQuQ2xyU2hhcGVFQ2hlY2s9VC5DbHJTaGFwZURvbGxhckJpbGw9VC5DbHJTaGFwZUJhbms9VC5DbHJTaGFwZUNyZWRpdENhcmQ9VC5DbHJTaGFwZURvbGxhcj1ULkNsclNoYXBl'@;
put 'RXVybz1ULkNsclNoYXBlU3RvcmU9VC5DbHJTaGFwZVdhbGxldD1ULkNsclNoYXBlU2hvcHBpbmdDYXJ0PVQuQ2xyU2hhcGVQaWdneUJhbms9VC5DbHJTaGFwZVNob3BwaW5nQmFnPVQuQ2xyU2hhcGVDYWxjdWxhdG9yPXZvaWQgMDt2YXIgaz1zZSgKLyohIC4uL3V0aWxzL2Rlc2NyaXB0b3It'@;
put 'Y29uZmlnICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyIpLHY9c2UoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTtULkNsclNoYXBlQ2Fs'@;
put 'Y3VsYXRvcj0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI4LDJIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwyOCwyWk04LDMyVjRIMjhWMzJa'@;
put 'Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTEyLDhIMjUuNjdWNkgxMWExLDEsMCwwLDAtMSwxdjQuNjdoMloiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0zIiBwb2ludHM9IjEyIDE2IDEwIDE2IDEwIDE4IDE0IDE4IDE0IDE0IDEyIDE0IDEyIDE2Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgcG9pbnRzPSIyNCAxNiAyMiAxNiAyMiAxOCAyNiAxOCAyNiAx'@;
put 'NCAyNCAxNCAyNCAxNiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHBvaW50cz0iMTggMTYgMTYgMTYgMTYgMTggMjAgMTggMjAgMTQgMTggMTQgMTggMTYiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiBwb2ludHM9IjEyIDIyIDEwIDIyIDEwIDI0IDE0IDI0IDE0IDIwIDEyIDIwIDEyIDIyIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgcG9pbnRzPSIyNCAy'@;
put 'MiAyMiAyMiAyMiAyNCAyNiAyNCAyNiAyMCAyNCAyMCAyNCAyMiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIHBvaW50cz0iMTggMjIgMTYgMjIgMTYgMjQgMjAgMjQgMjAgMjAgMTggMjAgMTggMjIiLz5cbiAgICAg'@;
put 'ICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05IiBwb2ludHM9IjEyIDI4IDEwIDI4IDEwIDMwIDE0IDMwIDE0IDI2IDEyIDI2IDEyIDI4Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMTAiIHBvaW50cz0iMjQgMjggMjIgMjggMjIgMzAgMjYgMzAgMjYgMjYgMjQgMjYgMjQgMjgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMSIgcG9pbnRzPSIxOCAyOCAxNiAyOCAxNiAzMCAyMCAzMCAy'@;
put 'MCAyNiAxOCAyNiAxOCAyOCIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI4LDJIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwyOCwyWk0xMiwyOEgxMFYy'@;
put 'NmgyWm0wLTZIMTBWMjBoMlptMC02SDEwVjE0aDJabTcsMTJIMTdWMjZoMlptMC02SDE3VjIwaDJabTAtNkgxN1YxNGgyWm03LDEySDI0VjI2aDJabTAtNkgyNFYyMGgyWm0wLTZIMjRWMTRoMlptMC03SDEwVjVIMjZaIi8+JyksVC5DbHJTaGFwZVNob3BwaW5nQmFnPSgwLHYuY2xySWNvblNW'@;
put 'RykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjUsMTJWOS4wNWE3LDcsMCwxLDAtMTQsMHY3YTEsMSwwLDAsMCwyLDBWMTRoOFYxMkgxM1Y5LjA1YTUsNSwwLDEsMSwxMCwwVjE2YTEsMSwwLDEsMCwyLDBWMTRoNVYzMkg2VjE0SDlWMTJI'@;
put 'NFYzMi4wOUExLjkxLDEuOTEsMCwwLDAsNS45MSwzNEgzMC4wOUExLjkxLDEuOTEsMCwwLDAsMzIsMzIuMDlWMTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTMsOS4yMmE1LDUsMCwxLDEsMTAsMFYxMmgyVjkuMjJh'@;
put 'Nyw3LDAsMSwwLTE0LDBWMTJoMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yNSwxMnYzLjFhMSwxLDAsMSwxLTIsMFYxMkgxM3YzLjFhMSwxLDAsMCwxLTIsMFYxMkg0VjMyYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAs'@;
put 'MCwwLDItMlYxMloiLz4nKSxULkNsclNoYXBlUGlnZ3lCYW5rPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTkuNzIsMTAuNDdhMTEuNjUsMTEuNjUsMCwwLDAtNi4zMS41MkEuOC44LDAsMSwwLDE0LDEyLjQ4'@;
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+JyksVC5DbHJTaGFwZVNob3BwaW5nQ2FydD0oMCx2LmNsckljb25TVkcpKCc8'@;
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 'LWJhZGdlIiAvPicpLFQuQ2xyU2hhcGVXYWxsZXQ9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwxNUgzMVY5YTEsMSwwLDAsMC0xLTFINmExLDEsMCwwLDEtMS0uODJWNi44MkExLDEsMCwwLDEsNiw2SDI5'@;
put 'LjU4YTEsMSwwLDAsMCwwLTJINkEzLDMsMCwwLDAsMyw3YTMuMDgsMy4wOCwwLDAsMCwwLC4zNlYyNy45M0E0LjEsNC4xLDAsMCwwLDcuMTMsMzJIMzBhMSwxLDAsMCwwLDEtMVYyNWgxYTEsMSwwLDAsMCwxLTFWMTZBMSwxLDAsMCwwLDMyLDE1Wk0yOSwzMEg3LjEzQTIuMTEsMi4xMSwwLDAs'@;
put 'MSw1LDI3LjkzVjkuODhBMy4xMSwzLjExLDAsMCwwLDYsMTBIMjl2NUgyMmE1LDUsMCwwLDAsMCwxMGg3Wm0yLTdIMjJhMywzLDAsMCwxLDAtNkgzMVoiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGN4PSIyMy4wMSIg'@;
put 'Y3k9IjIwIiByPSIxLjUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi45NCwxNEgzMVY5YTEsMSwwLDAsMC0xLTFINkExLDEsMCwwLDEsNSw3SDVWN0ExLDEsMCwwLDEsNiw2SDI5LjZhMSwxLDAsMSwwLDAtMkg2QTIu'@;
put 'OTQsMi45NCwwLDAsMCwzLDYuODh2MjFBNC4xMyw0LjEzLDAsMCwwLDcuMTUsMzJIMzBhMSwxLDAsMCwwLDEtMVYyNmgxLjk0YS45My45MywwLDAsMCwxLS45MXYtMTBBMS4wOCwxLjA4LDAsMCwwLDMyLjk0LDE0Wk0zMiwyNGwtOC41OCwwYTMuODcsMy44NywwLDAsMS0zLjczLTQsMy44Nywz'@;
put 'Ljg3LDAsMCwxLDMuNzMtNEwzMiwxNloiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgY3g9IjI0LjA0IiBjeT0iMTkuOTIiIHI9IjEuNSIvPicpLFQuQ2xyU2hhcGVTdG9yZT0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI4LDMwSDE2VjIySDE0djhIOFYyMkg2djhhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjIySDI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTIiIGQ9Ik0zMy43OSwxMy4yNywyOS43MSw1LjExQTIsMiwwLDAsMCwyNy45Miw0SDguMDhBMiwyLDAsMCwwLDYuMjksNS4xMUwyLjIxLDEzLjI3YTIsMiwwLDAsMC0uMjEuOXYzLjA4YTIsMiwwLDAsMCwuNDYsMS4yOEE0LjY3LDQuNjcsMCwwLDAsNiwyMC4xM2E0LjcyLDQuNzIsMCww'@;
put 'LDAsMy0xLjA3LDQuNzMsNC43MywwLDAsMCw2LDAsNC43Myw0LjczLDAsMCwwLDYsMCw0LjczLDQuNzMsMCwwLDAsNiwwLDQuNzIsNC43MiwwLDAsMCw2LjUzLS41MkEyLDIsMCwwLDAsMzQsMTcuMjZWMTQuMTdBMiwyLDAsMCwwLDMzLjc5LDEzLjI3Wk0zMCwxOC4xM0EyLjY4LDIuNjgsMCww'@;
put 'LDEsMjcuODIsMTdMMjcsMTUuODgsMjYuMTksMTdhMi43MSwyLjcxLDAsMCwxLTQuMzcsMEwyMSwxNS44OCwyMC4xOSwxN2EyLjcxLDIuNzEsMCwwLDEtNC4zNywwTDE1LDE1Ljg4LDE0LjE5LDE3YTIuNzEsMi43MSwwLDAsMS00LjM3LDBMOSwxNS44OCw4LjE4LDE3QTIuNjgsMi42OCwwLDAs'@;
put 'MSw2LDE4LjEzYTIuNjQsMi42NCwwLDAsMS0yLS44OFYxNC4xN0w4LjA4LDZIMjcuOTJMMzIsMTQuMTZ2LjY3bDAsMi4zOUEyLjY3LDIuNjcsMCwwLDEsMzAsMTguMTNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjgs'@;
put 'MzBIMTZWMjJIMTR2OEg4VjIySDZ2OGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMjJIMjhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzMuNzksMTMuMjcsMjkuNzEsNS4xMUEyLDIsMCwwLDAsMjcuOTIs'@;
put 'NEg4LjA4QTIsMiwwLDAsMCw2LjI5LDUuMTFMMi4yMSwxMy4yN2EyLDIsMCwwLDAtLjIxLjl2My4wOGEyLDIsMCwwLDAsLjQ2LDEuMjhBNC42Nyw0LjY3LDAsMCwwLDYsMjAuMTNhNC43Miw0LjcyLDAsMCwwLDMtMS4wNyw0LjczLDQuNzMsMCwwLDAsNiwwLDQuNzMsNC43MywwLDAsMCw2LDAs'@;
put 'NC43Myw0LjczLDAsMCwwLDYsMCw0LjcyLDQuNzIsMCwwLDAsNi41My0uNTJBMiwyLDAsMCwwLDM0LDE3LjI2VjE0LjE3QTIsMiwwLDAsMCwzMy43OSwxMy4yN1pNMTUsMTQuNHYxLjUyTDE0LjE4LDE3YTIuNzEsMi43MSwwLDAsMS00LjM3LDBMOSwxNS44OFYxNC40TDExLjU5LDZIMTZabTEy'@;
put 'LDEuNDhMMjYuMTksMTdhMi43MSwyLjcxLDAsMCwxLTQuMzcsMEwyMSwxNS44OGwwLDBWMTQuNEwyMCw2aDQuNDVMMjcsMTQuNFoiLz4nKSxULkNsclNoYXBlRXVybz0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0i'@;
put 'TTMxLjQ4LDI4LjQ5YTEsMSwwLDAsMC0xLjM4LS4zMkExMiwxMiwwLDAsMSwxMi40NSwyMkgyNC4xNmExLDEsMCwwLDAsMC0ySDExLjkzYTExLjE2LDExLjE2LDAsMCwxLDAtNEgyNC4xNmExLDEsMCwwLDAsMC0ySDEyLjQ1QTEyLDEyLDAsMCwxLDMwLjA2LDcuOGExLDEsMCwwLDAsMS4wNi0x'@;
put 'LjdBMTQsMTQsMCwwLDAsMTAuMzQsMTRIMy41NGExLDEsMCwxLDAsMCwySDkuOTFhMTQsMTQsMCwwLDAtLjE2LDIsMTQsMTQsMCwwLDAsLjE2LDJIMy41NGExLDEsMCwxLDAsMCwyaDYuOGExNCwxNCwwLDAsMCwyMC44Myw3Ljg3QTEsMSwwLDAsMCwzMS40OCwyOC40OVoiLz5cbiAgICAgICAg'@;
put 'ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTcuNDIsMjUuMTZBMTAuODgsMTAuODgsMCwwLDEsOS4yMywyMUg1Ljg0YTEsMSwwLDAsMSwwLTJoM2MwLS4zNS0uMDUtLjcx'@;
put 'LS4wNS0xLjA3czAtLjYzLDAtLjkzaC0zYTEsMSwwLDAsMSwwLTJIOS4xOUExMC44NiwxMC44NiwwLDAsMSwyNS4zOCw4LjY5YTEuMjUsMS4yNSwwLDAsMS0xLjMyLDIuMTJBOC4zNiw4LjM2LDAsMCwwLDExLjgyLDE1aDkuMzZhMSwxLDAsMCwxLDAsMkgxMS4zM2E3LjcyLDcuNzIsMCwwLDAs'@;
put 'MCwyaDkuODJhMSwxLDAsMCwxLDAsMkgxMS44N2E4LjM2LDguMzYsMCwwLDAsMTIuMjIsNCwxLjI1LDEuMjUsMCwxLDEsMS4zMywyLjEyWiIvPicpLFQuQ2xyU2hhcGVEb2xsYXI9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTEiIGQ9Ik0yNiwyMS4xNWE2LjkxLDYuOTEsMCwwLDAtNC4zOC0zLjMyQTI2LDI2LDAsMCwwLDE5LDE3LjE5VjguMTJBMTAuMDUsMTAuMDUsMCwwLDEsMjMuODYsMTBhMSwxLDAsMCwwLDEuMzMtMS41QTExLjc1LDExLjc1LDAsMCwwLDE5LDYuMVYzYTEsMSwwLDAsMC0yLDBWNmMtNC40LjEt'@;
put 'Ni44MywyLjI5LTcuNTcsNC4xOEE1LjU2LDUuNTYsMCwwLDAsMTEuNjYsMTcsMTMuMiwxMy4yLDAsMCwwLDE3LDE4Ljg0VjI4YTEyLjMsMTIuMywwLDAsMS03LjE0LTIuNzRBMSwxLDAsMSwwLDguNDksMjYuNywxNC4wOSwxNC4wOSwwLDAsMCwxNywzMHYzYTEsMSwwLDAsMCwyLDBWMzBjMi44'@;
put 'Mi0uMTksNi4wNy0xLjA5LDcuMy00Ljc2QTUuMzMsNS4zMywwLDAsMCwyNiwyMS4xNVpNMTIuNzksMTUuMzJhMy41NywzLjU3LDAsMCwxLTEuNDktNC4zOUMxMS40MSwxMC42MywxMi41Myw4LjEyLDE3LDh2OC44QTEwLjcsMTAuNywwLDAsMSwxMi43OSwxNS4zMlpNMjQuNCwyNC41NmMtLjcy'@;
put 'LDIuMTQtMi4zMiwzLjE3LTUuNCwzLjRWMTkuMjNjLjY0LjE0LDEuMy4zLDIsLjUxYTUsNSwwLDAsMSwzLjE5LDIuMzJBMy4zNCwzLjM0LDAsMCwxLDI0LjQsMjQuNTZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIlxuICAgICAg'@;
put 'ICAgICAgICAgIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTcuNjUsMjEuNTljLTEsMy0zLjYxLDMuODQtNS45LDR2MmExLjI1LDEuMjUsMCwwLDEtMi41LDBWMjcuNTlBMTEuNDcsMTEuNDcsMCwwLDEsMTEsMjVhMS4yNSwxLjI1LDAsMSwxLDEuNzEtMS44'@;
put 'Myw5LjExLDkuMTEsMCwwLDAsNC41NSwxLjk0VjE4LjgzYTkuNjMsOS42MywwLDAsMS0zLjczLTEuNDEsNC44LDQuOCwwLDAsMS0xLjkxLTUuODRjLjU5LTEuNTEsMi40Mi0zLjIzLDUuNjQtMy41MVY2LjI1YTEuMjUsMS4yNSwwLDAsMSwyLjUsMFY4LjExYTkuNjcsOS42NywwLDAsMSw0Ljks'@;
put 'MkExLjI1LDEuMjUsMCwwLDEsMjMsMTEuOTVhNy4xNCw3LjE0LDAsMCwwLTMuMjQtMS4zMXY2LjEzYy42LjEzLDEuMjQuMjcsMS45MS40OGE1Ljg1LDUuODUsMCwwLDEsMy42OSwyLjgyQTQuNjQsNC42NCwwLDAsMSwyNS42NSwyMy41OVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj'@;
put 'bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yMC45MiwxOS42NGMtLjQtLjEyLS43OS0uMjItMS4xNy0uM3Y1Ljc2YzItLjIsMy4wNy0uOSwzLjUzLTIuM2EyLjE1LDIuMTUsMCwwLDAtLjE1LTEuNThBMy40OSwzLjQ5LDAsMCwwLDIwLjkyLDE5LjY0WiIvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTEzLjk0LDEyLjQ4YTIuMzEsMi4zMSwwLDAsMCwxLDIuODcsNi41Myw2LjUzLDAsMCwwLDIuMzIuOTJWMTAuNTVDMTUuMTYsMTAuOCwxNC4xOSwxMS44NCwxMy45NCwxMi40OFoiLz4nKSxULkNsclNo'@;
put 'YXBlQ3JlZGl0Q2FyZD0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZabTAsMiwwLDEySDRMNCw4Wk00LDI4VjI0SDMydjRaIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjMiIHdpZHRoPSIyMiIgaGVpZ2h0PSIzMCIgcng9IjAuOTYiIHJ5PSIwLjk2IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzNikgcm90YXRlKDkwKSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBz'@;
put 'dHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwy'@;
put 'LDAsMCwwLDMyLDZabTAsMThINFYyMEgzMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksVC5DbHJTaGFwZUJhbms9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMuNSwxMy41NiwxOCw1LjIzbDE0LjUsOC4zM2ExLDEsMCwwLDAsMS0xLjczTDE4LDIu'@;
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 'YXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz4nKSxULkNsclNoYXBlRG9sbGFyQmlsbD0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDhINGEyLDIsMCwwLDAtMiwyVjI2YTIsMiwwLDAsMCwyLDJIMzJh'@;
put 'MiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMzIsOFptMCw2YTQuMjUsNC4yNSwwLDAsMS0zLjktNEgzMlptMCwxLjYydjQuODNBNS44Nyw1Ljg3LDAsMCwwLDI2LjQ5LDI2aC0xN0E1Ljg3LDUuODcsMCwwLDAsNCwyMC40NFYxNS42QTUuODcsNS44NywwLDAsMCw5LjUxLDEwaDE3QTUuODcs'@;
put 'NS44NywwLDAsMCwzMiwxNS42Wk03LjksMTBBNC4yNSw0LjI1LDAsMCwxLDQsMTRWMTBaTTQsMjIuMDZBNC4yNSw0LjI1LDAsMCwxLDcuOSwyNkg0Wk0yOC4xLDI2QTQuMjUsNC4yNSwwLDAsMSwzMiwyMi4wNlYyNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMTAuODVjLTMuNDcsMC02LjMsMy4yMS02LjMsNy4xNXMyLjgzLDcuMTUsNi4zLDcuMTUsNi4zLTMuMjEsNi4zLTcuMTVTMjEuNDcsMTAuODUsMTgsMTAuODVabTAsMTIuNjljLTIuNTksMC00LjctMi40OS00LjctNS41NXMyLjExLTUuNTUs'@;
put 'NC43LTUuNTUsNC43LDIuNDksNC43LDUuNTVTMjAuNTksMjMuNTUsMTgsMjMuNTVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIsOEg0YTIsMiwwLDAsMC0yLDJWMjZhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAs'@;
put 'Mi0yVjEwQTIsMiwwLDAsMCwzMiw4Wk00LDI2VjIxLjE1QTUuMTgsNS4xOCwwLDAsMSw4Ljc5LDI2Wk00LDE0Ljg1VjEwSDguNzlBNS4xOCw1LjE4LDAsMCwxLDQsMTQuODVaTTE4LDI1LjE1Yy0zLjQ3LDAtNi4zLTMuMjEtNi4zLTcuMTVzMi44My03LjE1LDYuMy03LjE1LDYuMywzLjIxLDYu'@;
put 'Myw3LjE1UzIxLjQ3LDI1LjE1LDE4LDI1LjE1Wk0zMiwyNkgyNy4yNUE1LjE4LDUuMTgsMCwwLDEsMzIsMjEuMTVabTAtMTEuMTVBNS4xOCw1LjE4LDAsMCwxLDI3LjI1LDEwSDMyWiIvPlxuICAgICAgICAgICAgPGVsbGlwc2UgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'MiIgY3g9IjE4IiBjeT0iMTgiIHJ4PSI0IiByeT0iNC43MiIvPicpLFQuQ2xyU2hhcGVFQ2hlY2s9KDAsdi5jbHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHg9IjE2IiB5PSIxNiIgd2lkdGg9IjE1IiBoZWlnaHQ9IjIiLz5cbiAg'@;
put 'ICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIyMCIgeT0iMjEiIHdpZHRoPSIxMSIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTM0'@;
put 'LDhIMTIuOTNhOC4zNSw4LjM1LDAsMCwxLC43OSwySDMzVjI2SDNWMTkuOWE3LjgzLDcuODMsMCwwLDEtMi0xLjM0VjI3YTEsMSwwLDAsMCwxLDFIMzRhMSwxLDAsMCwwLDEtMVY5QTEsMSwwLDAsMCwzNCw4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTQiIGQ9Ik02LjU3LDE4LjY4YTYuMTcsNi4xNywwLDAsMCw0LjMyLTEuNTksMS4yLDEuMiwwLDAsMCwuMzYtLjg0LDEuMDgsMS4wOCwwLDAsMC0xLjA5LTEuMTEsMSwxLDAsMCwwLS43MS4yNSw0LjMyLDQuMzIsMCwwLDEtMi44NCwxLDMuMzUsMy4zNSwwLDAsMS0z'@;
put 'LjQ2LTNoNy41M0ExLjI5LDEuMjksMCwwLDAsMTIsMTIuMDYsNS42OCw1LjY4LDAsMCwwLDYuMjcsNi4xNCw2LDYsMCwwLDAsLjQsMTIuNHYwQTYsNiwwLDAsMCw2LjU3LDE4LjY4Wk02LjI1LDguMzljMS44MiwwLDIuODcsMS4zOSwzLDMuMTZIMy4xM0MzLjM4LDkuNjksNC41Niw4LjM5LDYu'@;
put 'MjUsOC4zOVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNCw4SDEyLjkxYTguNjEsOC42MSwwLDAsMSwxLjIsNC4zOSw4LDgsMCwwLDEtNy43OCw4LjI3QTcuNTEsNy41MSwwLDAsMSwxLDE4LjQxVjI3YTEsMSwwLDAs'@;
put 'MCwxLDFIMzRhMSwxLDAsMCwwLDEtMVY5QTEsMSwwLDAsMCwzNCw4Wk0zMSwyM0gyMFYyMUgzMVptMC01SDE2VjE2SDMxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTYuNTcsMTguNjhBNiw2LDAsMCwxLC40LDEyLjQ0'@;
put 'djBBNiw2LDAsMCwxLDYuMjcsNi4xNCw1LjY4LDUuNjgsMCwwLDEsMTIsMTIuMDZhMS4yOSwxLjI5LDAsMCwxLTEuMywxLjMySDMuMTVhMy4zNSwzLjM1LDAsMCwwLDMuNDYsMyw0LjMyLDQuMzIsMCwwLDAsMi44NC0xLDEsMSwwLDAsMSwuNzEtLjI1LDEuMDgsMS4wOCwwLDAsMSwxLjA5LDEu'@;
put 'MTEsMS4yLDEuMiwwLDAsMS0uMzYuODRBNi4xNyw2LjE3LDAsMCwxLDYuNTcsMTguNjhaTTkuMywxMS41NWMtLjE4LTEuNzctMS4yMy0zLjE2LTMtMy4xNnMtMi44NywxLjMtMy4xMiwzLjE2WiIvPicpLFQuQ2xyU2hhcGVQb3VuZD0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LjksMzBIMTMuNEE4LjQ1LDguNDUsMCwwLDAsMTUsMjQuNjVWMjFoNC4zMWExLDEsMCwwLDAsMC0ySDE1VjExLjMxQTUuMjQsNS4yNCwwLDAsMSwyMC4yMSw2LDUuMTksNS4xOSwwLDAsMSwyNCw3LjczYTEsMSwwLDAsMCwx'@;
put 'LjQ4LTEuMzVBNy4xOSw3LjE5LDAsMCwwLDEzLDExLjMxVjE5SDguNzJhMSwxLDAsMSwwLDAsMkgxM3YzLjY1QzEzLDI5LjM4LDEwLjEyLDMwLDEwLDMwYTEsMSwwLDAsMCwuMTcsMkgyNy45YTEsMSwwLDEsMCwwLTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm02LjUsMjUuOTJIMTEuNzRhMS4yNSwxLjI1LDAsMCwxLS4yMi0yLjQ4Yy4xNSwwLDEuNzItLjQ5LDEuNzItMy41NFYxOWgtMi41YTEsMSwwLDAsMSwwLTJoMi41VjExLjg4YTUu'@;
put 'ODUsNS44NSwwLDAsMSw1LjcyLTYsNS42Myw1LjYzLDAsMCwxLDQuMjEsMS45NEExLjI1LDEuMjUsMCwxLDEsMjEuMyw5LjUxLDMuMDgsMy4wOCwwLDAsMCwxOSw4LjQyYTMuMzUsMy4zNSwwLDAsMC0zLjIyLDMuNDZWMTdoM2ExLDEsMCwwLDEsMCwyaC0zdjIuOUE3LjY1LDcuNjUsMCwwLDEs'@;
put 'MTUsMjUuNDJIMjQuNWExLjI1LDEuMjUsMCwwLDEsMCwyLjVaIi8+JyksVC5DbHJTaGFwZVJ1cGVlPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjgsOEgyNC4xNEE3LjUyLDcuNTIsMCwwLDAsMjIuNiw2SDI4'@;
put 'YTEsMSwwLDAsMCwwLTJIMTBhMSwxLDAsMCwwLDAsMmg3LjU1YTUuNDIsNS40MiwwLDAsMSw0LjIsMkgxMGExLDEsMCwwLDAsMCwySDIyLjc5QTUuNTQsNS41NCwwLDAsMSwyMywxMS41MSw1LjQ4LDUuNDgsMCwwLDEsMTcuNTUsMTdIMTEuMTRhMSwxLDAsMCwwLS43NSwxLjY2TDIyLjA2LDMy'@;
put 'YTEsMSwwLDEsMCwxLjUtMS4zMkwxMy4zNSwxOWg0LjIxYTcuNTEsNy41MSwwLDAsMCw3LjMtOUgyOGExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYs'@;
put 'MTYsMCwwLDAsMTgsMlptNS44OCw5SDI2YTEsMSwwLDAsMSwwLDJIMjQuMjZjMCwuMDYsMCwuMTIsMCwuMTlhNi4wOSw2LjA5LDAsMCwxLTYsNi4yaC0ybDYuODIsOC4wNmExLjI1LDEuMjUsMCwwLDEtMS45MSwxLjYyTDEyLjYzLDE4Ljk0YTEuMjUsMS4yNSwwLDAsMSwxLTIuMDZoNC43MWEz'@;
put 'LjU5LDMuNTksMCwwLDAsMy40OC0zLjY5YzAtLjA3LDAtLjEzLDAtLjJoLTlhMSwxLDAsMCwxLDAtMmg4LjMyYTMuNDEsMy40MSwwLDAsMC0yLjc4LTEuNUgxMi43NWExLjI1LDEuMjUsMCwwLDEsMC0yLjVIMjZhMSwxLDAsMCwxLDAsMkgyMi42OEE2LjIzLDYuMjMsMCwwLDEsMjMuODgsMTFa'@;
put 'Ii8+JyksVC5DbHJTaGFwZVdvbj0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLDE4SDI4Ljc1bC41LTJIMzNhMSwxLDAsMCwwLDAtMkgyOS43NGwyLjE3LTguNzZBMSwxLDAsMCwwLDMwLDQuNzZMMjcuNjgs'@;
put 'MTRIMjEuMzFMMTksNC43NmExLDEsMCwwLDAtMS45NCwwTDE0Ljc5LDE0SDguNDJMNi4xMyw0Ljc2YTEsMSwwLDAsMC0xLjk0LjQ4TDYuMzYsMTRIM2ExLDEsMCwwLDAsMCwySDYuODVsLjUsMkgzYTEsMSwwLDAsMCwwLDJINy44NGwyLjc5LDExLjI0YTEsMSwwLDAsMCwxLjk0LDBMMTUuMzYs'@;
put 'MjBoNS4zOGwyLjc5LDExLjI0YTEsMSwwLDAsMCwxLjk0LDBMMjguMjUsMjBIMzNhMSwxLDAsMCwwLDAtMlptLTUuODItMi0uNSwySDIyLjNsLS41LTJaTTE4LDkuMTYsMTkuMjUsMTRoLTIuNFpNOC45MSwxNmg1LjM4bC0uNSwySDkuNDFaTTExLjYsMjYuODQsOS45MSwyMEgxMy4zWk0xNS44'@;
put 'NSwxOGwuNS0yaDMuMzlsLjUsMlptOC42NCw4Ljg0TDIyLjgsMjBoMy4zOVoiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIHBvaW50cz0iMTcuNzQgMTYgMTcuMjIgMTggMTguODUgMTggMTguMzIgMTYgMTcuNzQgMTYiLz5c'@;
put 'biAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIHBvaW50cz0iMTEuOTQgMTggMTQuNjMgMTggMTUuMTYgMTYgMTEuNDEgMTYgMTEuOTQgMTgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1z'@;
put 'b2xpZC1wYXRoLTMiIHBvaW50cz0iMTMuMjkgMjMuMSAxNC4xIDIwIDEyLjQ3IDIwIDEzLjI5IDIzLjEiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIHBvaW50cz0iMjEuNDQgMTggMjQuMTMgMTggMjQuNjYgMTYgMjAuOTEg'@;
put 'MTYgMjEuNDQgMTgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTUiIHBvaW50cz0iMjIuNzggMjMuMSAyMy42IDIwIDIxLjk3IDIwIDIyLjc4IDIzLjEiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBj'@;
put 'bHItaS1zb2xpZC1wYXRoLTYiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTI5LDIwSDI2LjE5TDI0LDI4LjMyYTEuMjUsMS4yNSwwLDAsMS0yLjQyLDBMMTkuMzgsMjBIMTYuNjlsLTIuMTksOC4zMmExLjI1LDEuMjUsMCwwLDEtMi40MiwwTDkuODgsMjBI'@;
put 'N2ExLDEsMCwwLDEsMC0ySDkuMzVsLS41My0ySDdhMSwxLDAsMCwxLDAtMkg4LjNsLTEtMy42OGExLjI1LDEuMjUsMCwwLDEsMi40Mi0uNjRMMTAuODgsMTRoNC44bDEuMTQtNC4zMmExLjI1LDEuMjUsMCwwLDEsMi40MiwwTDIwLjM4LDE0aDQuOGwxLjE0LTQuMzJhMS4yNSwxLjI1LDAsMCwx'@;
put 'LDIuNDIuNjRsLTEsMy42OEgyOWExLDEsMCwwLDEsMCwySDI3LjI0bC0uNTMsMkgyOWExLDEsMCwwLDEsMCwyWiIvPicpLFQuQ2xyU2hhcGVZZW49KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOS4zNCw0LjU1'@;
put 'YTEsMSwwLDEsMC0xLjY3LTEuMUwxOCwxOC4yMyw4LjMzLDMuNDVhMSwxLDAsMCwwLTEuNjcsMS4xTDE3LDIwLjM1VjIyLjJIMTJhLjguOCwwLDAsMCwwLDEuNmg1djIuNEgxMmEuOC44LDAsMCwwLDAsMS42aDVWMzJhMSwxLDAsMCwwLDIsMFYyNy44aDVhLjguOCwwLDAsMCwwLTEuNkgxOVYy'@;
put 'My44aDVhLjguOCwwLDAsMCwwLTEuNkgxOVYyMC4zNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTguMDcsNy45MUwxOS43NCwyMEgyMmExLDEs'@;
put 'MCwwLDEsMCwySDE5LjI1djJIMjJhMSwxLDAsMCwxLDAsMkgxOS4yNXYyLjc1YTEuMjUsMS4yNSwwLDAsMS0yLjUsMFYyNkgxNGExLDEsMCwxLDEsMC0yaDIuNzVWMjJIMTRhMSwxLDAsMSwxLDAtMmgyLjI2TDkuOTMsOS45MWExLjI1LDEuMjUsMCwxLDEsMi4xMi0xLjMzTDE4LDE4LjA4bDUu'@;
put 'OTUtOS40OWExLjI1LDEuMjUsMCwxLDEsMi4xMiwxLjMzWiIvPicpLFQuQ2xyU2hhcGVCaXRjb2luPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNC4xMSwxNi44OEE1LjQ5LDUuNDksMCwwLDAsMjEsN1Y0YTEsMSwwLDAsMC0yLDBWN0gxNlY0YTEsMSwwLDAsMC0yLDBWN0gxMWExLDEs'@;
put 'MCwwLDAtMSwxVjI4YTEsMSwwLDAsMCwxLDFoM3YzYTEsMSwwLDAsMCwyLDBWMjloM3YzYTEsMSwwLDAsMCwyLDBWMjloLjA4QTYuMDcsNi4wNywwLDAsMCwyNywyMi44MXYtLjYyQTYuMjUsNi4yNSwwLDAsMCwyNC4xMSwxNi44OFpNMTIsOWg4LjY5YTMuNTksMy41OSwwLDAsMSwzLjQzLDIu'@;
put 'MzZBMy41MSwzLjUxLDAsMCwxLDIwLjc5LDE2SDEyWk0yNSwyMi44MUE0LjA4LDQuMDgsMCwwLDEsMjEuMDYsMjdIMTJWMThoOS4wNkE0LjA4LDQuMDgsMCwwLDEsMjUsMjIuMTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGQ9Ik0yMS4xOCwxOC40N0gxNC41djZoNi42OGEyLjcsMi43LDAsMCwwLDIuNjMtMi43N3YtLjQ4QTIuNzEsMi43MSwwLDAsMCwyMS4xOCwxOC40N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMsMTMuNzVh'@;
put 'Mi4yNCwyLjI0LDAsMCwwLTIuMjMtMi4yNUgxNC41VjE2aDYuM0EyLjIyLDIuMjIsMCwwLDAsMjMsMTMuNzVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAs'@;
put 'MTgsMlptOC4zMSwxOS43M0E1LjIyLDUuMjIsMCwwLDEsMjEuMTgsMjdIMjF2MS45YTEsMSwwLDAsMS0yLDBWMjdIMTd2MS45YTEsMSwwLDAsMS0yLDBWMjdIMTMuMjVBMS4yNSwxLjI1LDAsMCwxLDEyLDI1Ljc1VjE3LjIzaDB2LTdBMS4yNSwxLjI1LDAsMCwxLDEzLjI1LDlIMTVWNy4wN2Ex'@;
put 'LDEsMCwwLDEsMiwwVjloMlY3LjA3YTEsMSwwLDAsMSwyLDBWOWE0LjcyLDQuNzIsMCwwLDEsMy4yLDgsNS4zMSw1LjMxLDAsMCwxLDIuMTEsNC4yNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JyksVC5DbHJTaGFwZUNvaW5CYWc9KDAsdi5jbHJJY29uU1ZH'@;
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 'N2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNiIgLz4nKSxULkNsclNoYXBlUGVzbz0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEsMTMuMkgyNy44OUE2LjgxLDYuODEsMCwwLDAsMjgsMTJhNy44NSw3Ljg1LDAsMCwwLS4xLTEuMTlo'@;
put 'Mi45M2EuOC44LDAsMCwwLDAtMS42SDI3LjQ2QTguNDQsOC40NCwwLDAsMCwxOS41Nyw0SDExYTEsMSwwLDAsMC0xLDFWOS4ySDdhLjguOCwwLDAsMCwwLDEuNmgzdjIuNEg3YS44LjgsMCwwLDAsMCwxLjZoM1YzMWExLDEsMCwwLDAsMiwwVjIwaDcuNTdhOC40NSw4LjQ1LDAsMCwwLDcuODkt'@;
put 'NS4ySDMxYS44LjgsMCwwLDAsMC0xLjZaTTEyLDZoNy41N2E2LjUxLDYuNTEsMCwwLDEsNS42OCwzLjJIMTJabTAsNC44SDI1Ljg3YTUuNiw1LjYsMCwwLDEsMCwyLjRIMTJaTTE5LjU3LDE4SDEyVjE0LjhIMjUuMjVBNi41MSw2LjUxLDAsMCwxLDE5LjU3LDE4WiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE0LjE4LDEzLjhWMTZoOS40NWE1LjI2LDUuMjYsMCwwLDAsLjA4LS44OSw0LjcyLDQuNzIsMCwwLDAtLjItMS4zMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTE0LjE4'@;
put 'LDE5LjdoNS4xOWE0LjI4LDQuMjgsMCwwLDAsMy41LTEuOUgxNC4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTE5LjM3LDEwLjUxSDE0LjE4VjEyaDguMzdBNC4yMSw0LjIxLDAsMCwwLDE5LjM3LDEwLjUxWiIgY2xhc3M9ImNsci1pLXNv'@;
put 'bGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz48cGF0aCBkPSJNMTcuNjcsMmExNiwxNiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxNy42NywyWm0xMC41LDE1LjhIMjUuN2E2Ljg3LDYuODcsMCwwLDEtNi4zMyw0LjRIMTQuMTh2Ni41NGExLjI1LDEuMjUsMCwxLDEtMi41LDBWMTcuOEg4Ljc2'@;
put 'YS45LjksMCwxLDEsMC0xLjhoMi45MlYxMy44SDguNzZhLjkuOSwwLDEsMSwwLTEuOGgyLjkyVjkuMjZBMS4yNSwxLjI1LDAsMCwxLDEyLjkzLDhoNi40NGE2Ljg0LDYuODQsMCwwLDEsNi4xNSw0aDIuNjVhLjkuOSwwLDAsMSwwLDEuOEgyNi4wOWE2LjkxLDYuOTEsMCwwLDEsLjEyLDEuMyw2'@;
put 'LjgsNi44LDAsMCwxLS4wNi45aDJhLjkuOSwwLDAsMSwwLDEuOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+JyksVC5DbHJTaGFwZVJ1YmxlPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMC41NywyMEE4LjIzLDguMjMsMCwwLDAsMjksMTJhOC4yMyw4'@;
put 'LjIzLDAsMCwwLTguNDMtOEgxMmExLDEsMCwwLDAtMSwxVjE4SDlhMSwxLDAsMCwwLDAsMmgydjJIOWExLDEsMCwwLDAsMCwyaDJ2N2ExLDEsMCwwLDAsMiwwVjI0aDlhMSwxLDAsMCwwLDAtMkgxM1YyMFpNMTMsNmg3LjU3QTYuMjQsNi4yNCwwLDAsMSwyNywxMmE2LjIzLDYuMjMsMCwwLDEt'@;
put 'Ni40Myw2SDEzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIwLjc1LDkuMjVIMTV2OC44MWg1Ljc5YTQuNjYsNC42NiwwLDAsMCw0Ljg2LTQuNEE0LjY1LDQuNjUsMCwwLDAsMjAuNzUsOS4yNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBj'@;
put 'bHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMi43NSwxOC41NkgxNVYyMmg4LjI5YTEsMSwwLDAsMSwwLDJIMTV2NWExLjI1LDEuMjUsMCwwLDEtMi41LDBWMjRIMTEuMjVhMSwxLDAsMCwxLDAtMmgxLjIxVjIw'@;
put 'LjU2SDExLjI1YTEuMjUsMS4yNSwwLDAsMSwwLTIuNWgxLjIxVjhhMS4yNSwxLjI1LDAsMCwxLDEuMjUtMS4yNWg3YTcuMTQsNy4xNCwwLDAsMSw3LjM2LDYuOUE3LjE1LDcuMTUsMCwwLDEsMjAuNzUsMjAuNTZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicp'@;
put 'LFQuQ2xyU2hhcGVFbXBsb3llZUdyb3VwPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOC40MiwxNi4zMWE1LjcsNS43LDAsMSwxLDUuNzYtNS43QTUuNzQsNS43NCwwLDAsMSwxOC40MiwxNi4zMVptMC05LjRhMy43LDMuNywwLDEsMCwzLjc2LDMuN0EzLjc0LDMuNzQsMCwwLDAsMTgu'@;
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 'LDEsMUgzMi44MWExLDEsMCwwLDAsMS0xVjIyLjI2QTEsMSwwLDAsMCwzMi44MSwyMS4yNlptLTEsMTAuMzZIMTcuNjRWMjMuMjZoNi4zdi45MWExLDEsMCwwLDAsMiwwdi0uOTFoNS44N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTciLz4nKSxULkNsclNoYXBlRW1w'@;
put 'bG95ZWU9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE2LjQzLDE2LjY5YTcsNywwLDEsMSw3LTdBNyw3LDAsMCwxLDE2LjQzLDE2LjY5Wm0wLTExLjkyYTUsNSwwLDEsMCw1LDVBNSw1LDAsMCwwLDE2LjQzLDQuNzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMSIvPlxuICA8cGF0aCBkPSJNMjIsMTcuOUEyNS40MSwyNS40MSwwLDAsMCw1Ljg4LDE5LjU3YTQuMDYsNC4wNiwwLDAsMC0yLjMxLDMuNjhWMjkuMmExLDEsMCwxLDAsMiwwVjIzLjI1YTIsMiwwLDAsMSwxLjE2LTEuODYsMjIuOTEsMjIuOTEsMCwwLDEsOS43LTIuMTEsMjMuNTgsMjMu'@;
put 'NTgsMCwwLDEsNS41Ny42NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxyZWN0IHg9IjIyLjE0IiB5PSIyNy40MSIgd2lkdGg9IjYuMTQiIGhlaWdodD0iMS40IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxu'@;
put 'ICA8cGF0aCBkPSJNMzMuMTcsMjEuNDdIMjh2Mmg0LjE3djguMzdIMThWMjMuNDdoNi4zdi40MmExLDEsMCwwLDAsMiwwVjIwYTEsMSwwLDAsMC0yLDB2MS40N0gxN2ExLDEsMCwwLDAtMSwxVjMyLjg0YTEsMSwwLDAsMCwxLDFIMzMuMTdhMSwxLDAsMCwwLDEtMVYyMi40N0ExLDEsMCwwLDAs'@;
put 'MzMuMTcsMjEuNDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICBcbiAgPGNpcmNsZSBjeD0iMTYuODYiIGN5PSI5LjczIiByPSI2LjQ2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gIDxyZWN0IHg9IjIxIiB5PSIy'@;
put 'OCIgd2lkdGg9IjciIGhlaWdodD0iMS40IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0xNSwzMHYzYTEsMSwwLDAsMCwxLDFIMzNhMSwxLDAsMCwwLDEtMVYyM2ExLDEsMCwwLDAtMS0xSDI2VjIwLjUzYTEsMSwwLDAsMC0yLDBWMjJIMjJW'@;
put 'MTguNDJBMzIuMTIsMzIuMTIsMCwwLDAsMTYuODYsMThhMjYsMjYsMCwwLDAtMTEsMi4zOSwzLjI4LDMuMjgsMCwwLDAtMS44OCwzVjMwWm0xNywySDE3VjI0aDd2LjQyYTEsMSwwLDAsMCwyLDBWMjRoNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz4nKSxULkNs'@;
put 'clNoYXBlRmFjdG9yeT0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMuNDcsNy4zN2ExLDEsMCwwLDAtMSwuMDZMMjMsMTMuNzdWOC4yNmExLDEsMCwwLDAtMS42NC0uNzdMMTMuNDgsMTRIMTBWNC42MmExLDEsMCwwLDAtLjc4LTFsLTQtLjlhMSwxLDAsMCwwLS44NS4yQTEsMSwwLDAs'@;
put 'MCw0LDMuNzNWMTRIM2ExLDEsMCwwLDAtMSwxVjMxYTEsMSwwLDAsMCwxLDFIMzNhMSwxLDAsMCwwLDEtMVY4LjI2QTEsMSwwLDAsMCwzMy40Nyw3LjM3Wk02LDVsMiwuNDRWMTRINlpNMzIsMzBINFYxNmg5LjgzYTEsMSwwLDAsMCwuNjQtLjIzTDIxLDEwLjM3djUuMjhhMSwxLDAsMCwwLDEu'@;
put 'NTYuODNMMzIsMTAuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cmVjdCB4PSI2IiB5PSIxNy45OSIgd2lkdGg9IjgiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHJlY3QgeD0i'@;
put 'NiIgeT0iMjEuOTkiIHdpZHRoPSI4IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxyZWN0IHg9IjYiIHk9IjI1Ljk5IiB3aWR0aD0iOCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'NCIvPlxuICA8cmVjdCB4PSIxOSIgeT0iMTguOTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gIDxyZWN0IHg9IjE5IiB5PSIyNC45OSIgd2lkdGg9IjIiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTYiLz5cbiAgPHJlY3QgeD0iMjMiIHk9IjE4Ljk5IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIvPlxuICA8cmVjdCB4PSIyMyIgeT0iMjQuOTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04Ii8+XG4gIDxyZWN0IHg9IjI3IiB5PSIxOC45OSIgd2lkdGg9IjIiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiLz5cbiAgPHJlY3QgeD0iMjciIHk9IjI0Ljk5IiB3aWR0'@;
put 'aD0iMiIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiLz5cbiAgXG4gIDxwYXRoIGQ9Ik0zMi40NSw4LjQ0LDIyLDE1LjNWOS41MWExLDEsMCwwLDAtMS42My0uNzhMMTQuMDcsMTRIMTBWNC4wNkw0LDIuNzFWMTRIMlYzMWExLDEsMCwwLDAs'@;
put 'MSwxSDMzYTEsMSwwLDAsMCwxLTFWOS4yN0ExLDEsMCwwLDAsMzIuNDUsOC40NFpNMTQsMjlINlYyN2g4Wm0wLTRINlYyM2g4Wm0wLTRINlYxOWg4Wm04LDhIMjBWMjZoMlptMC02SDIwVjIwaDJabTQsNkgyNFYyNmgyWm0wLTZIMjRWMjBoMlptNCw2SDI4VjI2aDJabTAtNkgyOFYyMGgyWiIg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLFQuQ29tbWVyY2VTaGFwZXM9e2NhbGN1bGF0b3I6VC5DbHJTaGFwZUNhbGN1bGF0b3IsInBpZ2d5LWJhbmsiOlQuQ2xyU2hhcGVQaWdneUJhbmssInNob3BwaW5nLWJhZyI6VC5DbHJTaGFwZVNob3BwaW5nQmFnLCJz'@;
put 'aG9wcGluZy1jYXJ0IjpULkNsclNoYXBlU2hvcHBpbmdDYXJ0LHdhbGxldDpULkNsclNoYXBlV2FsbGV0LHN0b3JlOlQuQ2xyU2hhcGVTdG9yZSxldXJvOlQuQ2xyU2hhcGVFdXJvLGRvbGxhcjpULkNsclNoYXBlRG9sbGFyLHBlc286VC5DbHJTaGFwZVBlc28sImNyZWRpdC1jYXJkIjpULkNs'@;
put 'clNoYXBlQ3JlZGl0Q2FyZCxiYW5rOlQuQ2xyU2hhcGVCYW5rLCJkb2xsYXItYmlsbCI6VC5DbHJTaGFwZURvbGxhckJpbGwsImUtY2hlY2siOlQuQ2xyU2hhcGVFQ2hlY2sscG91bmQ6VC5DbHJTaGFwZVBvdW5kLHJ1cGVlOlQuQ2xyU2hhcGVSdXBlZSx3b246VC5DbHJTaGFwZVdvbix5ZW46'@;
put 'VC5DbHJTaGFwZVllbixiaXRjb2luOlQuQ2xyU2hhcGVCaXRjb2luLHJ1YmxlOlQuQ2xyU2hhcGVSdWJsZSwiY29pbi1iYWciOlQuQ2xyU2hhcGVDb2luQmFnLCJlbXBsb3llZS1ncm91cCI6VC5DbHJTaGFwZUVtcGxveWVlR3JvdXAsZW1wbG95ZWU6VC5DbHJTaGFwZUVtcGxveWVlLGZhY3Rv'@;
put 'cnk6VC5DbHJTaGFwZUZhY3Rvcnl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShULkNvbW1lcmNlU2hhcGVzLCJzYXZpbmdzIiwoMCxrLmRlc2NyaXB0b3JDb25maWcpKFQuQ29tbWVyY2VTaGFwZXNbInBpZ2d5LWJhbmsiXSkpLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVy'@;
put 'dHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChULkNvbW1lcmNlU2hhcGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpc'@;
put 'CiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvcmUtc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMg'@;
put 'Zm91bmQgKi9mdW5jdGlvbih6ZSxULHNlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFQuQ29yZVNoYXBlcz1ULkNsclNoYXBlQXJyb3c9VC5DbHJTaGFwZVN0ZXBGb3J3YXJkMj1ULkNsclNoYXBlRXllSGlkZT1ULkNsclNo'@;
put 'YXBlRXllPVQuQ2xyU2hhcGVFdmVudD1ULkNsclNoYXBlQ2FsZW5kYXI9VC5DbHJTaGFwZUFuZ2xlRG91YmxlPVQuQ2xyU2hhcGVWaWV3Q29sdW1ucz1ULkNsclNoYXBlU2VhcmNoPVQuQ2xyU2hhcGVWbUJ1Zz1ULkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZT1ULkNsclNoYXBlRmlsdGVyR3Jp'@;
put 'ZD1ULkNsclNoYXBlRWxsaXBzaXNWZXJ0aWNhbD1ULkNsclNoYXBlRWxsaXBzaXNIb3Jpem9udGFsPVQuQ2xyU2hhcGVDbG91ZD1ULkNsclNoYXBlSW1hZ2U9VC5DbHJTaGFwZUJlbGw9VC5DbHJTaGFwZUZvbGRlck9wZW49VC5DbHJTaGFwZUZvbGRlcj1ULkNsclNoYXBlQW5nbGU9VC5DbHJT'@;
put 'aGFwZVVzZXI9VC5DbHJTaGFwZUJhcnM9VC5DbHJTaGFwZUhlbHBJbmZvPVQuQ2xyU2hhcGVXYXJuaW5nU3RhbmRhcmQ9VC5DbHJTaGFwZUVycm9yU3RhbmRhcmQ9VC5DbHJTaGFwZVN1Y2Nlc3NTdGFuZGFyZD1ULkNsclNoYXBlSW5mb1N0YW5kYXJkPVQuQ2xyU2hhcGVJbmZvQ2lyY2xlPVQu'@;
put 'Q2xyU2hhcGVDaGVja0NpcmNsZT1ULkNsclNoYXBlRXhjbGFtYXRpb25DaXJjbGU9VC5DbHJTaGFwZUV4Y2xhbWF0aW9uVHJpYW5nbGU9VC5DbHJTaGFwZVRpbWVzPVQuQ2xyU2hhcGVDaGVjaz1ULkNsclNoYXBlQ29nPVQuQ2xyU2hhcGVIb21lPVQuQ2xyU2hhcGVVbmtub3duU3RhdHVzPXZv'@;
put 'aWQgMDt2YXIgaz1zZSgKLyohIC4uL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyIpLHY9c2UoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRp'@;
put 'bHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTtULkNsclNoYXBlVW5rbm93blN0YXR1cz0oMCx2LmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTcuNTgiIGN5PSIyNi4yMyIgcj0iMS40Ii8+XG4gICAgICAgICAgICAg'@;
put 'ICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNC43LDEzYTUuMTgsNS4xOCwwLDAsMC0yLjE2LTMuNTYsNy4yNiw3LjI2LDAsMCwwLTUuNzEtMS4wOUExMS4zNCwxMS4zNCwwLDAsMCwxMiwxMC40NCwxLDEsMCwxLDAsMTMuMjYsMTJhOS4z'@;
put 'Miw5LjMyLDAsMCwxLDMuOTQtMS43Miw1LjI5LDUuMjksMCwwLDEsNC4xNi43NCwzLjIxLDMuMjEsMCwwLDEsMS4zNSwyLjE5Yy4zMywyLjY5LTMuMTksMy43NS01LjMyLDQuMTRsLS44Mi4xNXY0LjM2YTEsMSwwLDAsMCwyLDBWMTkuMTdDMjQuNjEsMTcuNzksMjQuODgsMTQuNDEsMjQuNywx'@;
put 'M1oiLz4nKSxULkNsclNoYXBlSG9tZT0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLjcxLDE3LjI5bC0xNS0xNWExLDEsMCwwLDAtMS40MSwwbC0xNSwxNWExLDEsMCwwLDAsMS40MSwxLjQxTDE4LDQuNDEs'@;
put 'MzIuMjksMTguNzFhMSwxLDAsMCwwLDEuNDEtMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI4LDMyaC01VjIySDEzVjMySDhWMThMNiwyMFYzMmEyLDIsMCwwLDAsMiwyaDdWMjRoNlYzNGg3YTIs'@;
put 'MiwwLDAsMCwyLTJWMTkuNzZsLTItMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMsMTlhMSwxLDAsMCwxLS43MS0uMjlMMTgsNC40MSwzLjcxLDE4LjcxYTEsMSwwLDAsMS0xLjQxLTEuNDFsMTUtMTVhMSwx'@;
put 'LDAsMCwxLDEuNDEsMGwxNSwxNUExLDEsMCwwLDEsMzMsMTlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE4LDcuNzksNiwxOS44M1YzMmEyLDIsMCwwLDAsMiwyaDdWMjRoNlYzNGg3YTIsMiwwLDAsMCwyLTJW'@;
put 'MTkuNzZaIi8+JyksVC5DbHJTaGFwZUNvZz0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LjEsMTFjLTMuOSwwLTcsMy4xLTcsN3MzLjEsNyw3LDdjMy45LDAsNy0zLjEsNy03UzIyLDExLDE4LjEsMTF6IE0x'@;
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 'Mi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxULkNsclNoYXBlQ2hlY2s9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi'@;
put 'IGQ9Ik0xMy43MiwyNy42OSwzLjI5LDE3LjI3YTEsMSwwLDAsMSwxLjQxLTEuNDFsOSw5TDMxLjI5LDcuMjlhMSwxLDAsMCwxLDEuNDEsMS40MVoiLz4nKSxULkNsclNoYXBlVGltZXM9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTEiIGQ9Ik0xOS40MSwxOGw4LjI5LTguMjlhMSwxLDAsMCwwLTEuNDEtMS40MUwxOCwxNi41OSw5LjcxLDguMjlBMSwxLDAsMCwwLDguMjksOS43MUwxNi41OSwxOCw4LjI5LDI2LjI5YTEsMSwwLDEsMCwxLjQxLDEuNDFMMTgsMTkuNDFsOC4yOSw4LjI5YTEsMSwwLDAsMCwxLjQxLTEu'@;
put 'NDFaIi8+JyksVC5DbHJTaGFwZUV4Y2xhbWF0aW9uVHJpYW5nbGU9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyMS4zMmExLjMsMS4zLDAsMCwwLDEuMy0xLjNWMTRhMS4zLDEuMywwLDEsMC0yLjYsMHY2'@;
put 'QTEuMywxLjMsMCwwLDAsMTgsMjEuMzJaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgY3g9IjE3Ljk1IiBjeT0iMjQuMjciIHI9IjEuNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzAuMzMsMjUuNTQsMjAuNTksNy42YTMsMywwLDAsMC01LjI3LDBMNS41NywyNS41NEEzLDMsMCwwLDAsOC4yMSwzMEgyNy42OWEzLDMsMCwwLDAsMi42NC00LjQzWm0tMS43OCwxLjk0YTEsMSwwLDAsMS0uODYuNDlIOC4yMWExLDEs'@;
put 'MCwwLDEtLjg4LTEuNDhMMTcuMDcsOC41NWExLDEsMCwwLDEsMS43NiwwbDkuNzQsMTcuOTRBMSwxLDAsMCwxLDI4LjU1LDI3LjQ4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMC4zMywyNS41NCwyMC41OSw3'@;
put 'LjZhMywzLDAsMCwwLTUuMjcsMEw1LjU3LDI1LjU0QTMsMywwLDAsMCw4LjIxLDMwSDI3LjY5YTMsMywwLDAsMCwyLjY0LTQuNDNaTTE2LjQ2LDEyLjc0YTEuNDksMS40OSwwLDAsMSwzLDB2Ni44OWExLjQ5LDEuNDksMCwxLDEtMywwWk0xOCwyNi4yNWExLjcyLDEuNzIsMCwxLDEsMS43Mi0x'@;
put 'LjcyQTEuNzIsMS43MiwwLDAsMSwxOCwyNi4yNVoiLz4nKSxULkNsclNoYXBlRXhjbGFtYXRpb25DaXJjbGU9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAs'@;
put 'MCwwLDE4LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyMC4wN2ExLjMsMS4zLDAsMCwxLTEuMy0xLjN2LTZhMS4zLDEu'@;
put 'MywwLDEsMSwyLjYsMHY2QTEuMywxLjMsMCwwLDEsMTgsMjAuMDdaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgY3g9IjE3Ljk1IiBjeT0iMjMuMDIiIHI9IjEuNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRo'@;
put 'IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabS0xLjQ5LDZhMS40OSwxLjQ5LDAsMCwxLDMsMHY2Ljg5YTEuNDksMS40OSwwLDEsMS0zLDBaTTE4LDI1LjVhMS43MiwxLjcyLDAsMSwxLDEu'@;
put 'NzItMS43MkExLjcyLDEuNzIsMCwwLDEsMTgsMjUuNVoiLz4nKSxULkNsclNoYXBlQ2hlY2tDaXJjbGU9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCww'@;
put 'LDE4LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xNi4zNCwyMy43NGwtNS01YTEsMSwwLDAsMSwxLjQxLTEuNDFsMy41OSwz'@;
put 'LjU5LDYuNzgtNi43OGExLDEsMCwwLDEsMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMCwxOEExMiwxMiwwLDEsMSwxOCw2LDEyLDEyLDAsMCwxLDMwLDE4Wm0tNC43Ny0yLjE2YTEuNCwxLjQs'@;
put 'MCwwLDAtMi0ybC02Ljc3LDYuNzdMMTMsMTcuMTZhMS40LDEuNCwwLDAsMC0yLDJsNS40NSw1LjQ1WiIvPicpLFQuQ2xyU2hhcGVJbmZvQ2lyY2xlPSgwLHYuY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiICBjeD0iMTcuOTMi'@;
put 'IGN5PSIxMS45IiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgIGQ9Ik0yMSwyM0gxOVYxNUgxNmExLDEsMCwwLDAsMCwyaDF2NkgxNWExLDEsMCwxLDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiLz5cbiAg'@;
put 'ICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAg'@;
put 'ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptLTIsNS4xNWEyLDIsMCwxLDEsMiwyQTIsMiwwLDAsMSwxNS45LDExLjE1Wk0yMywyNGExLDEsMCwwLDEtMSwxSDE1YTEs'@;
put 'MSwwLDEsMSwwLTJoMlYxN0gxNmExLDEsMCwwLDEsMC0yaDR2OGgyQTEsMSwwLDAsMSwyMywyNFoiLz4nKSxULkNsclNoYXBlSW5mb1N0YW5kYXJkPSgwLHYuY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGN4PSIxNy45NyIg'@;
put 'Y3k9IjEwLjQ1IiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTIxLDI1SDE5VjE0LjFIMTZhMSwxLDAsMCwwLDAsMmgxVjI1SDE1YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIvPlxu'@;
put 'ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAg'@;
put 'ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMi4xYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCwwLDE4LDIuMVptLS4xLDUuMjhhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMTcuOSw3LjM4Wm0zLjYsMjEuMjVoLTdhMS40LDEu'@;
put 'NCwwLDEsMSwwLTIuOGgyLjF2LTkuMkgxNWExLjQsMS40LDAsMSwxLDAtMi44aDQuNHYxMmgyLjFhMS40LDEuNCwwLDEsMSwwLDIuOFoiLz4nKSxULkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJkPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0y'@;
put 'IiBkPSJNMjgsMTIuMWExLDEsMCwwLDAtMS40MSwwTDE1LjQ5LDIzLjE1bC02LTZBMSwxLDAsMCwwLDgsMTguNTNMMTUuNDksMjYsMjgsMTMuNTJBMSwxLDAsMCwwLDI4LDEyLjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'MSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNMjguNDUsMTIuNjMsMTUuMzEsMjUuNzYsNy41NSwxOGExLjQsMS40LDAsMCwxLDItMmw1Ljc4LDUuNzhMMjYuNDcsMTAuNjVhMS40LDEuNCwwLDEsMSwyLDJaIi8+JyksVC5DbHJTaGFwZUVycm9yU3RhbmRh'@;
put 'cmQ9KDAsdi5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjE4IiBjeT0iMjYuMDYiIHI9IjEuMzMiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'MiIgZD0iTTE4LDIyLjYxYTEsMSwwLDAsMS0xLTF2LTEyYTEsMSwwLDEsMSwyLDB2MTJBMSwxLDAsMCwxLDE4LDIyLjYxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQs'@;
put 'MTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMi4xYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAs'@;
put 'MCwwLDE4LDIuMVpNMTYuNiw4LjhhMS40LDEuNCwwLDAsMSwyLjgsMHYxMmExLjQsMS40LDAsMCwxLTIuOCwwWk0xOCwyOC42YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDE4LDI4LjZaIi8+JyksVC5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZD0oMCx2LmNsckljb25TVkcp'@;
put 'KCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTgiIGN5PSIyNi4wNiIgcj0iMS4zMyIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMjIuNjFhMSwx'@;
put 'LDAsMCwxLTEtMXYtMTJhMSwxLDAsMSwxLDIsMHYxMkExLDEsMCwwLDEsMTgsMjIuNjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xNS4wNjIwNzgyLDEuNjgxMTk2IEMxNS42Mjk4ODE5LDAuNjQ5MjY2'@;
put 'MzU1IDE2LjcxMDkwOTEsMC4wMTAyMjE5Mzk2IDE3Ljg4NSwwLjAxMDIyMTkzOTYgQzE5LjA1OTA5MDksMC4wMTAyMjE5Mzk2IDIwLjE0MDExODEsMC42NDkyNjYzNTUgMjAuNzA4NjQzMywxLjY4MjUyMTI5IEwzNC41OTg2NDQsMjcuMjQyNTIyNSBDMzUuMTQwNzc0NiwyOC4yNDAxMzk3IDM1'@;
put 'LjExNzQzNDUsMjkuNDQ5NTM3MyAzNC41MzcyMTYxLDMwLjQyNTQ5NDMgQzMzLjk1Njk5NzcsMzEuNDAxNDUxNCAzMi45MDU2NzEsMzEuOTk5Njk4NCAzMS43NywzMiBMNC4wMjIzOTMyMywzMS45OTk3NDkyIEMyLjg3NDA5MDA5LDMyLjAyNTQ2OTkgMS43OTkwMjg0MywzMS40Mzc1NzUzIDEu'@;
put 'MjAxMDYzMzUsMzAuNDU2OTEyNiBDMC42MDMwOTgyNjUsMjkuNDc2MjQ5OSAwLjU3Mjc3Nzg5OSwyOC4yNTEzMTc5IDEuMTIyMDc4MTgsMjcuMjQxMTk2IEwxNS4wNjIwNzgyLDEuNjgxMTk2IFogTTIuODc4NTA3NjcsMjguMTk3NzI4MiBDMi42NzA2MDk2NiwyOC41ODAwMzc2IDIuNjgyMDk3'@;
put 'NSwyOS4wNDQxNDIzIDIuOTA4NjU1NywyOS40MTU2OTc3IEMzLjEzNTIxMzksMjkuNzg3MjUzMiAzLjU0MjUzNTQsMzAuMDA5OTk1OSA0LDMwIEwzMS43Njk3MzQ0LDMwIEMzMi4xOTk5MTkxLDI5Ljk5OTg4NTggMzIuNTk4MjQ3OCwyOS43NzMyMjA4IDMyLjgxODA4MjEsMjkuNDAzNDQ4MiBD'@;
put 'MzMuMDM3OTE2NCwyOS4wMzM2NzU3IDMzLjA0Njc1OTUsMjguNTc1NDU2NyAzMi44NDEzNTY3LDI4LjE5NzQ3ODcgTDE4Ljk1Mzg3MzksMi42NDIwODE5NSBDMTguNzM5NDIzNiwyLjI1MjM0NDM2IDE4LjMyOTg0MTksMi4wMTAyMjE5NCAxNy44ODUsMi4wMTAyMjE5NCBDMTcuNDQwNjg4OSwy'@;
put 'LjAxMDIyMTk0IDE3LjAzMTU1MzgsMi4yNTE3NjY5MiAxNi44MTY4OTQ2LDIuNjQwNjg3NTMgTDIuODc4NTA3NjcsMjguMTk3NzI4MiBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM0LjYsMjkuMjEsMjAuNzEs'@;
put 'My42NWEzLjIyLDMuMjIsMCwwLDAtNS42NiwwTDEuMTcsMjkuMjFBMy4yMiwzLjIyLDAsMCwwLDQsMzRIMzEuNzdhMy4yMiwzLjIyLDAsMCwwLDIuODMtNC43NVpNMTYuNiwxMGExLjQsMS40LDAsMCwxLDIuOCwwdjEyYTEuNCwxLjQsMCwwLDEtMi44LDBaTTE4LDI5Ljg1YTEuOCwxLjgsMCwx'@;
put 'LDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDE4LDI5Ljg1WiIvPicpLFQuQ2xyU2hhcGVIZWxwSW5mbz0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUuMzksMjUuNDVhMSwxLDAsMCwwLTEuMzguMjljLTEuNDEsMi4xNi00LDQuODEtNi4zMSw1LjdzLTQuMTIuNTctNC44NCwwYy0uMzEt'@;
put 'LjI3LTEuMTItMS0uNDMtMy40OS40Ni0xLjY2LDMuMzItOS40OCw0LTExLjM4bC0yLjE4LjI4Yy0uNjksMS44Ni0zLjI5LDguODQtMy43NiwxMC41OC0uNjgsMi40OS0uMzQsNC4zLDEuMDksNS41NkE1LjU5LDUuNTksMCwwLDAsMTUsMzRhOS41Myw5LjUzLDAsMCwwLDMuNDUtLjdjMi43OS0x'@;
put 'LjA5LDUuNzItNC4xMiw3LjI2LTYuNDdBMSwxLDAsMCwwLDI1LjM5LDI1LjQ1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuMywxMWE0LjUsNC41LDAsMSwwLTQuNS00LjVBNC41LDQuNSwwLDAsMCwxOS4z'@;
put 'LDExWm0wLTdhMi41LDIuNSwwLDEsMS0yLjUsMi41QTIuNSwyLjUsMCwwLDEsMTkuMyw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuODEsMTVjLjA2LDAsNi4yNy0uODIsNy43My0xLC42NS0uMSwxLjE0'@;
put 'LDAsMS4zLjE1cy4yMS44LS4wNywxLjY4Yy0uNjEsMS44Ni0zLjY5LDExLTQuNTksMTMuNzFhOCw4LDAsMCwwLDEuMjktLjM4LDcuMzIsNy4zMiwwLDAsMCwxLjE1LS42QzE5Ljg1LDI1LDIyLjE1LDE4LjEsMjIuNjcsMTYuNTJzLjM5LTIuNzgtLjMtMy42YTMuMTYsMy4xNiwwLDAsMC0zLjA4'@;
put 'LS44M2MtMS40My4xNS03LjQ3Ljk0LTcuNzMsMWExLDEsMCwwLDAsLjI2LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjIwLjc1IiBjeT0iNiIgcj0iNCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC44NCwyNi4yM2ExLDEsMCwwLDAtMS40LjI5LDE2LjYsMTYuNiwwLDAsMS0zLjUxLDMuNzdjLS4zMy4yNS0xLjU2LDEuMi0yLjA4LDEtLjM2LS4xMS0uMTUtLjgyLS4wOC0xLjEybC41My0xLjU3Yy4yMi0uNjQsNC4wNS0x'@;
put 'Miw0LjQ3LTEzLjMuNjItMS45LjM1LTMuNzctMi40OC0zLjMyLS43Ny4wOC04LjU4LDEuMDktOC43MiwxLjFhMSwxLDAsMCwwLC4xMywyczMtLjM5LDMuMzMtLjQyYS44OC44OCwwLDAsMSwuODUuNDQsMi40NywyLjQ3LDAsMCwxLS4wNywxLjcxYy0uMjYsMS00LjM3LDEyLjU4LTQuNSwxMy4y'@;
put 'NWEyLjc4LDIuNzgsMCwwLDAsMS4xOCwzLDUsNSwwLDAsMCwzLjA4LjgzaDBhOC41Myw4LjUzLDAsMCwwLDMuMDktLjYyYzIuNDktMSw1LjA5LTMuNjYsNi40Ni01Ljc1QTEsMSwwLDAsMCwyNC44NCwyNi4yM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+Jyks'@;
put 'VC5DbHJTaGFwZUJhcnM9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwyOUg0YTEsMSwwLDAsMSwwLTJIMzJhMSwxLDAsMCwxLDAsMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLDE5SDRhMSwxLDAsMCwxLDAtMkgzMmExLDEsMCwwLDEsMCwyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzIsOUg0QTEsMSwwLDAsMSw0'@;
put 'LDdIMzJhMSwxLDAsMCwxLDAsMloiLz4nKSxULkNsclNoYXBlVXNlcj0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMSwwLTctN0E3LDcsMCwwLDAsMTgsMTdaTTE4LDVhNSw1LDAsMSwxLTUsNUE1LDUsMCwwLDEsMTgsNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
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+JyksVC5DbHJTaGFwZUFuZ2xlPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjkuNTIsMjIuNTIsMTgsMTAuNiw2LjQ4LDIyLjUyYTEuNywxLjcsMCwwLDAsMi40NSwyLjM2'@;
put 'TDE4LDE1LjQ5bDkuMDgsOS4zOWExLjcsMS43LDAsMCwwLDIuNDUtMi4zNloiLz4nKSxULkNsclNoYXBlRm9sZGVyPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiww'@;
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+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLFQuQ2xyU2hhcGVGb2xkZXJPcGVuPSgwLHYuY2xySWNvblNWRykoJzxw'@;
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+JyksVC5DbHJTaGFwZUJlbGw9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMi41MSwyNy44M0ExNC40LDE0LjQsMCwwLDEsMzAsMjQuOWExMi42MywxMi42MywwLDAsMS0x'@;
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 'IDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxULkNsclNoYXBlSW1hZ2U9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2'@;
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+JyksVC5DbHJTaGFwZUNsb3VkPSgwLHYuY2xySWNv'@;
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 'LTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxULkNsclNoYXBlRWxsaXBz'@;
put 'aXNIb3Jpem9udGFsPSgwLHYuY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSI0LjkiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMxLjEiIGN5PSIx'@;
put 'OCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjQuOSIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIg'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxULkNsclNoYXBlRWxsaXBzaXNWZXJ0aWNhbD0oMCx2LmNsckljb25TVkcpKCc8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45IiBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjMxLjEi'@;
put 'IHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4g'@;
put 'ICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMzEuMSIgcj0iMi45IiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+'@;
put 'JyksVC5DbHJTaGFwZUZpbHRlckdyaWQ9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNSwyNS44NmwyLDFWMjAuMjdhMSwxLDAsMCwwLS4yOS0uN0wxMC4yMywxM0gyNS43OWwtNi40Nyw2LjU3YTEsMSwwLDAs'@;
put 'MC0uMjkuN0wxOSwyOGwyLDFWMjAuNjhMMjcuNTgsMTRBMS40NiwxLjQ2LDAsMCwwLDI4LDEzVjEyYTEsMSwwLDAsMC0xLTFIOWExLDEsMCwwLDAtMSwxdjFhMS40NiwxLjQ2LDAsMCwwLC40MiwxTDE1LDIwLjY4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp'@;
put 'ZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik04LDExdjEuMTJhLjUuNSwwLDAsMCwuMTUuMzVsNy4yOCw3LjM2YS41LjUsMCwwLDEsLjE1LjM1djYuODlhLjUuNSwwLDAsMCwuMjguNDVsMy45NSwxLjQxYS41LjUsMCwwLDAsLjcyLS40NWwwLTguMzlhLjU0LjU0LDAsMCwxLC4xOC0uMzVsNy4x'@;
put 'Mi03LjI1YS41LjUsMCwwLDAsLjE1LS4zNVYxMVoiLz4nKSxULkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZT0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE1LDI1Ljg2bDIsMVYyMC4yN2ExLDEsMCwwLDAtLjI5'@;
put 'LS43TDEwLjIzLDEzSDI1Ljc5bC02LjQ3LDYuNTdhMSwxLDAsMCwwLS4yOS43TDE5LDI4bDIsMVYyMC42OEwyNy41OCwxNEExLjQ2LDEuNDYsMCwwLDAsMjgsMTNWMTJhMSwxLDAsMCwwLTEtMUg5YTEsMSwwLDAsMC0xLDF2MWExLjQ2LDEuNDYsMCwwLDAsLjQyLDFMMTUsMjAuNjhaIi8+XG4g'@;
put 'ICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIi8+XG4gICAgICAgICAg'@;
put 'ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBj'@;
put 'bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNOCwxMXYxLjEyYS41LjUsMCwwLDAsLjE1LjM1bDcuMjgsNy4zNmEuNS41LDAsMCwxLC4xNS4zNXY2Ljg5YS41LjUsMCwwLDAsLjI4LjQ1bDMuOTUsMS40MWEuNS41LDAsMCwwLC43Mi0uNDVsMC04LjM5YS41NC41NCww'@;
put 'LDAsMSwuMTgtLjM1bDcuMTItNy4yNWEuNS41LDAsMCwwLC4xNS0uMzVWMTFaIi8+JyksVC5DbHJTaGFwZVZtQnVnPSgwLHYuY2xySWNvblNWRykoJzxyZWN0IHdpZHRoPSIzNiIgaGVpZ2h0PSIzNiIgcng9IjMiIGZpbGw9IiNmZmZmZmYiIG9wYWNpdHk9IjAuMTUiIHN0eWxlPSJpc29sYXRp'@;
put 'b246aXNvbGF0ZSIvPjxwYXRoIGQ9Ik0zLjc5LDE0LjgzYTEuMDksMS4wOSwwLDAsMC0xLjQ3LS41NiwxLjA5LDEuMDksMCwwLDAtLjU0LDEuNDlsMi40Nyw1LjRjLjM5Ljg1LjgsMS4yOSwxLjU3LDEuMjlTNywyMiw3LjM5LDIxLjE2bDIuMTctNC43N2EuMzMuMzMsMCwwLDEsLjMxLS4yLjM1'@;
put 'LjM1LDAsMCwxLC4zNS4zNXY0LjYxYTEuMTUsMS4xNSwwLDAsMCwxLjE0LDEuMywxLjE3LDEuMTcsMCwwLDAsMS4xNy0xLjNWMTcuMzhhMS4xNSwxLjE1LDAsMCwxLDEuMjItMS4yLDEuMTMsMS4xMywwLDAsMSwxLjE4LDEuMnYzLjc3YTEuMTcsMS4xNywwLDEsMCwyLjMyLDBWMTcuMzhhMS4x'@;
put 'NSwxLjE1LDAsMCwxLDEuMjItMS4yLDEuMTMsMS4xMywwLDAsMSwxLjE4LDEuMnYzLjc3YTEuMTYsMS4xNiwwLDEsMCwyLjMxLDBWMTYuODZhMi42OSwyLjY5LDAsMCwwLTIuNzgtMi42OSwzLjU3LDMuNTcsMCwwLDAtMi40NywxLjA1LDIuNzUsMi43NSwwLDAsMC0yLjM4LTEuMDVBMy45Mywz'@;
put 'LjkzLDAsMCwwLDEyLDE1LjIyYTIuODIsMi44MiwwLDAsMC0yLjA4LTEuMDVBMi41NSwyLjU1LDAsMCwwLDcuNCwxNS44OUw1LjgyLDE5LjYzbC0yLTQuOCIgZmlsbD0iI2ZmZmZmZiIvPjxwYXRoIGQ9Ik0zMywxNC4xOEExLjE0LDEuMTQsMCwwLDAsMzEuOSwxNWwtMS4xOSwzLjczTDI5LjUs'@;
put 'MTUuMDVhMS4xOCwxLjE4LDAsMCwwLTEuMTUtLjg3aC0uMWExLjIsMS4yLDAsMCwwLTEuMTUuODdsLTEuMTksMy43MS0xLjE4LTMuNzFhMS4xNSwxLjE1LDAsMCwwLTEuMTEtLjg3LDEuMDgsMS4wOCwwLDAsMC0xLjEyLDEuMDcsMS42OCwxLjY4LDAsMCwwLC4xLjU0bDIsNS43YTEuMjcsMS4y'@;
put 'NywwLDAsMCwxLjI3LDEsMS4yNCwxLjI0LDAsMCwwLDEuMi0uOTNsMS4yLTMuNjQsMS4yLDMuNjRhMS4yNSwxLjI1LDAsMCwwLDEuMjYuOTNBMS4yNywxLjI3LDAsMCwwLDMyLDIxLjVMMzQsMTUuNzNhMS43NywxLjc3LDAsMCwwLC4wOC0uNDhBMS4wNywxLjA3LDAsMCwwLDMzLDE0LjE4WiIg'@;
put 'ZmlsbD0iI2ZmZmZmZiIvPicpLFQuQ2xyU2hhcGVTZWFyY2g9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4zMyw1LjA1QTEwLjk1LDEwLjk1LDAsMSwxLDUuMzksMTYsMTEsMTEsMCwwLDEsMTYuMzMsNS4w'@;
put 'NW0wLTIuMDVhMTMsMTMsMCwxLDAsMTMsMTMsMTMsMTMsMCwwLDAtMTMtMTNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zNSwzMy4yOWwtNy4zNy03LjQyLTEuNDIsMS40MSw3LjM3LDcuNDJBMSwxLDAs'@;
put 'MSwwLDM1LDMzLjI5WiIvPicpLFQuQ2xyU2hhcGVWaWV3Q29sdW1ucz0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLDVINUEyLDIsMCwwLDAsMyw3VjI5YTIsMiwwLDAsMCwyLDJIMzFhMiwyLDAsMCwwLDIt'@;
put 'MlY3QTIsMiwwLDAsMCwzMSw1Wk0xMywyOUg1VjdoOFptMTAsMEgxNVY3aDhaIi8+JyksVC5DbHJTaGFwZUFuZ2xlRG91YmxlPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjksMTkuNDFhMSwxLDAsMCwxLS43'@;
put 'MS0uMjlMMTgsOC44Myw3LjcxLDE5LjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsNiwyOS43MSwxNy43MUExLDEsMCwwLDEsMjksMTkuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yOSwzMC40MWEx'@;
put 'LDEsMCwwLDEtLjcxLS4yOUwxOCwxOS44Myw3LjcxLDMwLjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsMTcsMjkuNzEsMjguNzFBMSwxLDAsMCwxLDI5LDMwLjQxWiIvPicpLFQuQ2xyU2hhcGVDYWxlbmRhcj0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBj'@;
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 'LTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxULkNsclNoYXBlRXZlbnQ9'@;
put 'KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4xNywyNS44NiwxMC44MSwyMC41YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTYuMTcsMjNsOC42NC04LjY0YTEsMSwwLDAsMSwxLjQxLDEuNDFaIi8+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 'b2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLFQuQ2xyU2hhcGVFeWU9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjYyLDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMFM1LjM0LDExLjMsMiwxNy41M0wxLjcyLDE4'@;
put 'bC4yNi40OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMHMxMi40Ni0zLjcyLDE1LjgyLTEwbC4yNi0uNDhaTTE3LjgsMjYuNDNDMTIuMTcsMjYuNDMsNywyMy4yOSw0LDE4YzMtNS4yOSw4LjE3LTguNDMsMTMuOC04LjQzUzI4LjU0LDEyLjcyLDMxLjU5LDE4QzI4LjU0LDIzLjI5LDIzLjQy'@;
put 'LDI2LjQzLDE3LjgsMjYuNDNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjA5LDExLjE3QTYuODYsNi44NiwwLDEsMCwyNSwxOCw2Ljg2LDYuODYsMCwwLDAsMTguMDksMTEuMTdabTAsMTEuNzJBNC44Niw0'@;
put 'Ljg2LDAsMSwxLDIzLDE4LDQuODcsNC44NywwLDAsMSwxOC4wOSwyMi44OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjIsMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwUzUuMzQsMTEuMywy'@;
put 'LDE3LjUzTDEuNzIsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwczEyLjQ2LTMuNzIsMTUuODItMTBsLjI2LS40OFpNMTcuOCwyNi40M0MxMi4xNywyNi40Myw3LDIzLjI5LDQsMThjMy01LjI5LDguMTctOC40MywxMy44LTguNDNTMjguNTQsMTIuNzIsMzEuNTksMThDMjgu'@;
put 'NTQsMjMuMjksMjMuNDIsMjYuNDMsMTcuOCwyNi40M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4LjA5IiBjeT0iMTguMDMiIHI9IjYuODYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIi'@;
put 'Lz4nKSxULkNsclNoYXBlRXllSGlkZT0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUuMTksMjAuNEE2Ljc4LDYuNzgsMCwwLDAsMjUuNjIsMThhNi44Niw2Ljg2LDAsMCwwLTYuODYtNi44Niw2Ljc5LDYuNzksMCwwLDAtMi4zNy40M0wxOCwxMy4yM2E0Ljc4LDQuNzgsMCwwLDEsLjc0'@;
put 'LS4wNkE0Ljg3LDQuODcsMCwwLDEsMjMuNjIsMThhNC43OSw0Ljc5LDAsMCwxLS4wNi43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQuMjksMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwYTE2'@;
put 'LjgyLDE2LjgyLDAsMCwwLTUuMjQuODVMMTQuODQsMTBhMTQuNzgsMTQuNzgsMCwwLDEsMy42My0uNDdjNS42MywwLDEwLjc1LDMuMTQsMTMuOCw4LjQzYTE3Ljc1LDE3Ljc1LDAsMCwxLTQuMzcsNS4xbDEuNDIsMS40MmExOS45MywxOS45MywwLDAsMCw1LTZsLjI2LS40OFoiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNC44Nyw1Ljc4bDQuNDYsNC40NmExOS41MiwxOS41MiwwLDAsMC02LjY5LDcuMjlMMi4zOCwxOGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBhMTYuOTMsMTYuOTMsMCww'@;
put 'LDAsNy4zNy0xLjY5bDUsNSwxLjc1LTEuNS0yNi0yNlptOS43NSw5Ljc1LDYuNjUsNi42NWE0LjgxLDQuODEsMCwwLDEtMi41LjcyQTQuODcsNC44NywwLDAsMSwxMy45LDE4LDQuODEsNC44MSwwLDAsMSwxNC42MiwxNS41M1ptLTEuNDUtMS40NWE2Ljg1LDYuODUsMCwwLDAsOS41NSw5LjU1'@;
put 'bDEuNiwxLjZhMTQuOTEsMTQuOTEsMCwwLDEtNS44NiwxLjJjLTUuNjMsMC0xMC43NS0zLjE0LTEzLjgtOC40M2ExNy4yOSwxNy4yOSwwLDAsMSw2LjEyLTYuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgu'@;
put 'MzcsMTEuMTdBNi43OSw2Ljc5LDAsMCwwLDE2LDExLjZsOC44LDguOEE2Ljc4LDYuNzgsMCwwLDAsMjUuMjMsMTgsNi44Niw2Ljg2LDAsMCwwLDE4LjM3LDExLjE3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LjI5'@;
put 'LDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMGExNi44MiwxNi44MiwwLDAsMC01LjI0Ljg1TDE0Ljg0LDEwYTE0Ljc4LDE0Ljc4LDAsMCwxLDMuNjMtLjQ3YzUuNjMsMCwxMC43NSwzLjE0LDEzLjgsOC40M2ExNy43NSwxNy43NSwwLDAsMS00LjM3LDUuMWwxLjQyLDEuNDJhMTku'@;
put 'OTMsMTkuOTMsMCwwLDAsNS02bC4yNi0uNDhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNC44Nyw1Ljc4bDQuNDYsNC40NmExOS41MiwxOS41MiwwLDAsMC02LjY5LDcuMjlMMi4zOCwxOGwuMjYuNDhjMy4zNyw2LjIz'@;
put 'LDkuMjgsMTAsMTUuODIsMTBhMTYuOTMsMTYuOTMsMCwwLDAsNy4zNy0xLjY5bDUsNSwxLjc1LTEuNS0yNi0yNlptOC4zLDguM2E2Ljg1LDYuODUsMCwwLDAsOS41NSw5LjU1bDEuNiwxLjZhMTQuOTEsMTQuOTEsMCwwLDEtNS44NiwxLjJjLTUuNjMsMC0xMC43NS0zLjE0LTEzLjgtOC40M2Ex'@;
put 'Ny4yOSwxNy4yOSwwLDAsMSw2LjEyLTYuM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz4nKSxULkNsclNoYXBlU3RlcEZvcndhcmQyPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik03LjA4LDYuNTJhMS42OCwxLjY4LDAsMCwwLDAsMi40TDE2LjUxLDE4LDcu'@;
put 'MTIsMjcuMDhhMS43LDEuNywwLDAsMCwyLjM2LDIuNDRoMEwyMS40LDE4LDkuNDgsNi40N0ExLjY5LDEuNjksMCwwLDAsNy4wOCw2LjUyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTI2LjQ5LDVhMS43LDEuNywwLDAsMC0xLjcsMS43'@;
put 'VjI5LjNhMS43LDEuNywwLDAsMCwzLjQsMFY2LjdBMS43LDEuNywwLDAsMCwyNi40OSw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksVC5DbHJTaGFwZUFycm93PSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy42NiwxNS42MSwxOCw2LDgu'@;
put 'MzQsMTUuNjFBMSwxLDAsMSwwLDkuNzUsMTdMMTcsOS44MVYyOC45NGExLDEsMCwxLDAsMiwwVjkuODFMMjYuMjUsMTdhMSwxLDAsMCwwLDEuNDEtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+JyksVC5Db3JlU2hhcGVzPXsidW5rbm93bi1zdGF0'@;
put 'dXMiOlQuQ2xyU2hhcGVVbmtub3duU3RhdHVzLGhvbWU6VC5DbHJTaGFwZUhvbWUsY29nOlQuQ2xyU2hhcGVDb2csY2hlY2s6VC5DbHJTaGFwZUNoZWNrLHRpbWVzOlQuQ2xyU2hhcGVUaW1lcywiZXhjbGFtYXRpb24tdHJpYW5nbGUiOlQuQ2xyU2hhcGVFeGNsYW1hdGlvblRyaWFuZ2xlLCJl'@;
put 'eGNsYW1hdGlvbi1jaXJjbGUiOlQuQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZSwiY2hlY2stY2lyY2xlIjpULkNsclNoYXBlQ2hlY2tDaXJjbGUsImluZm8tY2lyY2xlIjpULkNsclNoYXBlSW5mb0NpcmNsZSwiaW5mby1zdGFuZGFyZCI6VC5DbHJTaGFwZUluZm9TdGFuZGFyZCwic3VjY2Vz'@;
put 'cy1zdGFuZGFyZCI6VC5DbHJTaGFwZVN1Y2Nlc3NTdGFuZGFyZCwiZXJyb3Itc3RhbmRhcmQiOlQuQ2xyU2hhcGVFcnJvclN0YW5kYXJkLCJ3YXJuaW5nLXN0YW5kYXJkIjpULkNsclNoYXBlV2FybmluZ1N0YW5kYXJkLCJoZWxwLWluZm8iOlQuQ2xyU2hhcGVIZWxwSW5mbyxiYXJzOlQuQ2xy'@;
put 'U2hhcGVCYXJzLHVzZXI6VC5DbHJTaGFwZVVzZXIsYW5nbGU6VC5DbHJTaGFwZUFuZ2xlLGZvbGRlcjpULkNsclNoYXBlRm9sZGVyLCJmb2xkZXItb3BlbiI6VC5DbHJTaGFwZUZvbGRlck9wZW4sYmVsbDpULkNsclNoYXBlQmVsbCxpbWFnZTpULkNsclNoYXBlSW1hZ2UsY2xvdWQ6VC5DbHJT'@;
put 'aGFwZUNsb3VkLCJlbGxpcHNpcy1ob3Jpem9udGFsIjpULkNsclNoYXBlRWxsaXBzaXNIb3Jpem9udGFsLCJlbGxpcHNpcy12ZXJ0aWNhbCI6VC5DbHJTaGFwZUVsbGlwc2lzVmVydGljYWwsImZpbHRlci1ncmlkIjpULkNsclNoYXBlRmlsdGVyR3JpZCwiZmlsdGVyLWdyaWQtY2lyY2xlIjpU'@;
put 'LkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZSwidm0tYnVnIjpULkNsclNoYXBlVm1CdWcsc2VhcmNoOlQuQ2xyU2hhcGVTZWFyY2gsInZpZXctY29sdW1ucyI6VC5DbHJTaGFwZVZpZXdDb2x1bW5zLCJhbmdsZS1kb3VibGUiOlQuQ2xyU2hhcGVBbmdsZURvdWJsZSxjYWxlbmRhcjpULkNsclNo'@;
put 'YXBlQ2FsZW5kYXIsZXZlbnQ6VC5DbHJTaGFwZUV2ZW50LGV5ZTpULkNsclNoYXBlRXllLCJleWUtaGlkZSI6VC5DbHJTaGFwZUV5ZUhpZGUsInN0ZXAtZm9yd2FyZC0yIjpULkNsclNoYXBlU3RlcEZvcndhcmQyLGFycm93OlQuQ2xyU2hhcGVBcnJvd30sT2JqZWN0LmRlZmluZVByb3BlcnR5'@;
put 'KFQuQ29yZVNoYXBlcywiaG91c2UiLCgwLGsuZGVzY3JpcHRvckNvbmZpZykoVC5Db3JlU2hhcGVzLmhvbWUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVC5Db3JlU2hhcGVzLCJzZXR0aW5ncyIsKDAsay5kZXNjcmlwdG9yQ29uZmlnKShULkNvcmVTaGFwZXMuY29nKSksT2JqZWN0LmRlZmlu'@;
put 'ZVByb3BlcnR5KFQuQ29yZVNoYXBlcywic3VjY2VzcyIsKDAsay5kZXNjcmlwdG9yQ29uZmlnKShULkNvcmVTaGFwZXMuY2hlY2spKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVC5Db3JlU2hhcGVzLCJjbG9zZSIsKDAsay5kZXNjcmlwdG9yQ29uZmlnKShULkNvcmVTaGFwZXMudGltZXMpKSxP'@;
put 'YmplY3QuZGVmaW5lUHJvcGVydHkoVC5Db3JlU2hhcGVzLCJ3YXJuaW5nIiwoMCxrLmRlc2NyaXB0b3JDb25maWcpKFQuQ29yZVNoYXBlc1siZXhjbGFtYXRpb24tdHJpYW5nbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShULkNvcmVTaGFwZXMsImVycm9yIiwoMCxrLmRlc2NyaXB0b3JD'@;
put 'b25maWcpKFQuQ29yZVNoYXBlc1siZXhjbGFtYXRpb24tY2lyY2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVC5Db3JlU2hhcGVzLCJpbmZvIiwoMCxrLmRlc2NyaXB0b3JDb25maWcpKFQuQ29yZVNoYXBlc1siaW5mby1jaXJjbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShULkNv'@;
put 'cmVTaGFwZXMsIm1lbnUiLCgwLGsuZGVzY3JpcHRvckNvbmZpZykoVC5Db3JlU2hhcGVzLmJhcnMpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVC5Db3JlU2hhcGVzLCJhdmF0YXIiLCgwLGsuZGVzY3JpcHRvckNvbmZpZykoVC5Db3JlU2hhcGVzLnVzZXIpKSxPYmplY3QuZGVmaW5lUHJvcGVy'@;
put 'dHkoVC5Db3JlU2hhcGVzLCJjYXJldCIsKDAsay5kZXNjcmlwdG9yQ29uZmlnKShULkNvcmVTaGFwZXMuYW5nbGUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVC5Db3JlU2hhcGVzLCJkaXJlY3RvcnkiLCgwLGsuZGVzY3JpcHRvckNvbmZpZykoVC5Db3JlU2hhcGVzLmZvbGRlcikpLE9iamVj'@;
put 'dC5kZWZpbmVQcm9wZXJ0eShULkNvcmVTaGFwZXMsIm5vdGlmaWNhdGlvbiIsKDAsay5kZXNjcmlwdG9yQ29uZmlnKShULkNvcmVTaGFwZXMuYmVsbCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShULkNvcmVTaGFwZXMsImNvbGxhcHNlIiwoMCxrLmRlc2NyaXB0b3JDb25maWcpKFQuQ29yZVNo'@;
put 'YXBlc1siYW5nbGUtZG91YmxlIl0pKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9lc3NlbnRpYWwtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJv'@;
put 'amVjdHMvaWNvbnMvc3JjL3NoYXBlcy9lc3NlbnRpYWwtc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKHpl'@;
put 'LFQsc2UpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoVCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksVC5DbHJTaGFwZUxvZ291dD1ULkNsclNoYXBlTG9naW49VC5DbHJTaGFwZUhlbHA9VC5DbHJTaGFwZUNvcHk9VC5DbHJTaGFwZUNoaWxkQXJyb3c9VC5DbHJTaGFwZUNp'@;
put 'cmNsZUFycm93PVQuQ2xyU2hhcGVBbGFybUNsb2NrPVQuQ2xyU2hhcGVDbG9jaz1ULkNsclNoYXBlSGlzdG9yeT1ULkNsclNoYXBlVGFncz1ULkNsclNoYXBlVGFnPVQuQ2xyU2hhcGVUcmFzaD1ULkNsclNoYXBlVGltZXNDaXJjbGU9VC5DbHJTaGFwZUJhbj1ULkNsclNoYXBlUGx1c0NpcmNs'@;
put 'ZT1ULkNsclNoYXBlTWludXNDaXJjbGU9VC5DbHJTaGFwZU1pbnVzPVQuQ2xyU2hhcGVQbHVzPVQuQ2xyU2hhcGVGaWxlPVQuQ2xyU2hhcGVQaW49VC5DbHJTaGFwZUZpbHRlcj1ULkNsclNoYXBlUG9wT3V0PVQuQ2xyU2hhcGVVc2Vycz1ULkNsclNoYXBlVW5sb2NrPVQuQ2xyU2hhcGVMb2Nr'@;
put 'PVQuQ2xyU2hhcGVVcGxvYWQ9VC5DbHJTaGFwZURvd25sb2FkPVQuQ2xyU2hhcGVMaWdodGJ1bGI9VC5DbHJTaGFwZVZpZXdDYXJkcz1ULkNsclNoYXBlVmlld0xpc3Q9VC5DbHJTaGFwZVN5bmM9VC5DbHJTaGFwZVJlZnJlc2g9VC5DbHJTaGFwZU5vdGU9VC5DbHJTaGFwZVBlbmNpbD1ULkNs'@;
put 'clNoYXBlVGhlcm1vbWV0ZXI9VC5DbHJTaGFwZUJ1Zz1ULkNsclNoYXBlU2Npc3NvcnM9VC5DbHJTaGFwZUFzdGVyaXNrPVQuQ2xyU2hhcGVCb29rPVQuQ2xyU2hhcGVPYmplY3RzPVQuQ2xyU2hhcGVSZXNpemU9VC5DbHJTaGFwZUN1cnNvckhhbmRDbGljaz1ULkNsclNoYXBlQ3Vyc29ySGFu'@;
put 'ZD1ULkNsclNoYXBlQ3Vyc29yQXJyb3c9VC5DbHJTaGFwZUdyaWRWaWV3PVQuQ2xyU2hhcGVCdWJibGVFeGNsYW1hdGlvbj1ULkNsclNoYXBlTmV3PVQuQ2xyU2hhcGVBbGFybU9mZj1ULkNsclNoYXBlUGluYm9hcmQ9VC5DbHJTaGFwZUFkZFRleHQ9dm9pZCAwLFQuQ2xyU2hhcGVDbG9uZT1U'@;
put 'LkNsclNoYXBlQ3Vyc29yTW92ZT1ULkNsclNoYXBlV2FuZD1ULkNsclNoYXBlU3VuPVQuQ2xyU2hhcGVNb29uPVQuQ2xyU2hhcGVGaWx0ZXIyPVQuQ2xyU2hhcGVEcmFnSGFuZGxlPVQuQ2xyU2hhcGVDb3B5VG9DbGlwYm9hcmQ9VC5DbHJTaGFwZUNvbG9yUGlja2VyPVQuQ2xyU2hhcGVCcmll'@;
put 'ZmNhc2U9VC5DbHJTaGFwZUV4cGFuZENhcmQ9VC5DbHJTaGFwZUNvbGxhcHNlQ2FyZD1ULkNsclNoYXBlU29ydEJ5PVQuQ2xyU2hhcGVBY2Nlc3NpYmlsaXR5Mj1ULkNsclNoYXBlQWNjZXNzaWJpbGl0eTE9VC5DbHJTaGFwZVNocmluaz1ULkNsclNoYXBlUGFwZXJjbGlwPVQuQ2xyU2hhcGVG'@;
put 'aWxlR3JvdXA9VC5DbHJTaGFwZVJlcGVhdD1ULkNsclNoYXBlSWRCYWRnZT1ULkNsclNoYXBlQmFsYW5jZT1ULkNsclNoYXBlT3JnYW5pemF0aW9uPVQuQ2xyU2hhcGVOb0FjY2Vzcz1ULkNsclNoYXBlSG91cmdsYXNzPVQuQ2xyU2hhcGVGbGFtZT1ULkNsclNoYXBlVGFyZ2V0PVQuQ2xyU2hh'@;
put 'cGVCdWxsc2V5ZT1ULkNsclNoYXBlV3JlbmNoPVQuQ2xyU2hhcGVCb2x0PVQuQ2xyU2hhcGVMaWJyYXJ5PVQuQ2xyU2hhcGVLZXk9VC5DbHJTaGFwZVpvb21PdXQ9VC5DbHJTaGFwZVpvb21Jbj1ULkNsclNoYXBlV2luZG93UmVzdG9yZT1ULkNsclNoYXBlV2luZG93TWluPVQuQ2xyU2hhcGVX'@;
put 'aW5kb3dNYXg9VC5DbHJTaGFwZVdpbmRvd0Nsb3NlPVQuQ2xyU2hhcGVUb29scz1ULkNsclNoYXBlU3dpdGNoPVQuQ2xyU2hhcGVUd29XYXlBcnJvd3M9VC5DbHJTaGFwZUZpbGVTZXR0aW5ncz1ULkNsclNoYXBlU2Nyb2xsPVQuQ2xyU2hhcGVVbmRvPVQuQ2xyU2hhcGVSZWRvPVQuQ2xyU2hh'@;
put 'cGVMaXN0PVQuQ2xyU2hhcGVGaXJld2FsbD1ULkNsclNoYXBlQ2xpcGJvYXJkPVQuQ2xyU2hhcGVTbGlkZXI9VC5DbHJTaGFwZVdvcmxkPVQuQ2xyU2hhcGVQcmludGVyPXZvaWQgMCxULkVzc2VudGlhbFNoYXBlcz1ULkNsclNoYXBlQ29sb3JQYWxldHRlPVQuQ2xyU2hhcGVGaXJzdEFpZD1U'@;
put 'LkNsclNoYXBlQmV0YT1ULkNsclNoYXBlRG90Q2lyY2xlPVQuQ2xyU2hhcGVDaXJjbGU9VC5DbHJTaGFwZUNyb3NzaGFpcnM9VC5DbHJTaGFwZVZvbHVtZT1ULkNsclNoYXBlVGFibGU9VC5DbHJTaGFwZVNub3dmbGFrZT1ULkNsclNoYXBlRnVlbD1ULkNsclNoYXBlRm9ybT1ULkNsclNoYXBl'@;
put 'RmlzaD1ULkNsclNoYXBlVHJlZT1ULkNsclNoYXBlUmVjeWNsZT1ULkNsclNoYXBlRmlsdGVyT2ZmPVQuQ2xyU2hhcGVGaWxlWmlwPVQuQ2xyU2hhcGVDdXJzb3JIYW5kT3Blbj1ULkNsclNoYXBlQ3Vyc29ySGFuZEdyYWI9VC5DbHJTaGFwZVRyZWVWaWV3PVQuQ2xyU2hhcGVQb3J0cmFpdD1U'@;
put 'LkNsclNoYXBlUGFzdGU9VC5DbHJTaGFwZUxhbmRzY2FwZT1ULkNsclNoYXBlRXJhc2VyPVQuQ2xyU2hhcGVEcmFnSGFuZGxlQ29ybmVyPVQuQ2xyU2hhcGVEZXRhaWxzPXZvaWQgMDt2YXIgaz1zZSgKLyohIC4uL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnICovCiIuL3Byb2plY3RzL2ljb25z'@;
put 'L3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyIpLHY9c2UoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKSxoZT1zZSgKLyohIC4vY29yZS1zaGFwZXMgKi8KIi4vcHJvamVjdHMv'@;
put 'aWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyIpO1QuQ2xyU2hhcGVBZGRUZXh0PSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzEsMjFIMTNhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIv'@;
put 'PlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xMiwxNmExLDEsMCwwLDAsMSwxSDMxYTEsMSwwLDAsMCwwLTJIMTNBMSwxLDAsMCwwLDEyLDE2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yNywyN0gxM2ExLDEsMCwwLDAsMCwySDI3YTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTE1Ljg5LDlhMSwxLDAsMCwwLTEtMUgxMFYz'@;
put 'LjIxYTEsMSwwLDAsMC0yLDBWOEgyLjg5YTEsMSwwLDAsMCwwLDJIOHY1LjIxYTEsMSwwLDAsMCwyLDBWMTBoNC44OUExLDEsMCwwLDAsMTUuODksOVoiLz4nKSxULkNsclNoYXBlUGluYm9hcmQ9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEiIGQ9Ik0zMCwzMCw2LDMwLDYsNkgyMlY0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTRIMzBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMz'@;
put 'LjU3LDkuMzNsLTctN2ExLDEsMCwwLDAtMS40MSwxLjQxbDcsN2ExLDEsMCwxLDAsMS40MS0xLjQxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMi4xLDExLjE5bC43LjVMMjYuNDYsOCwyNSw2LjU2LDIyLjUx'@;
put 'LDkuMTNjLTItLjg3LTQuMzUuMTQtNS45MiwxLjY4bC0uNzIuNzEsMy41NCwzLjU0LTMuNjcsMy42NywxLjQxLDEuNDEsMy42Ny0zLjY3TDI0LjM3LDIwbC43MS0uNzJjMS41NC0xLjU3LDIuNTUtMy45MiwxLjY4LTUuOTNsMi41NC0yLjU3TDI3Ljg4LDkuMzgsMjQuMjEsMTMuMWwuNDkuNjlj'@;
put 'Ljc2LDEsLjI1LDIuMzctLjQxLDMuMzNMMTguNzcsMTEuNkMxOS44NCwxMC44NiwyMS4xNSwxMC41LDIyLjEsMTEuMTlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAsMzAsNiwzMCw2LDZIMjJWNEg2QTIsMiwwLDAs'@;
put 'MCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE0SDMwWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMzLjU3LDkuMzNsLTctN2ExLDEsMCwwLDAtMS40MSwxLjQxbDEuMzgsMS4zOC00LDRjLTIt'@;
put 'Ljg3LTQuMzUuMTQtNS45MiwxLjY4bC0uNzIuNzEsMy41NCwzLjU0LTMuNjcsMy42NywxLjQxLDEuNDEsMy42Ny0zLjY3TDI0LjM3LDIwbC43MS0uNzJjMS41NC0xLjU3LDIuNTUtMy45MSwxLjY4LTUuOTJsNC00LDEuMzgsMS4zOGExLDEsMCwxLDAsMS40MS0xLjQxWiIvPicpLFQuQ2xyU2hh'@;
put 'cGVBbGFybU9mZj0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLjQ3LDMuODRhNS43OCw1Ljc4LDAsMCwwLTcuMzctLjYzLDE2LjA4LDE2LjA4LDAsMCwxLDguMiw3LjY1QTUuNzMsNS43MywwLDAsMCwzMS40'@;
put 'NywzLjg0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNS4zMywyMS41NGEuOS45LDAsMCwwLS40MS0xLjJsLTMuMi0xLjU2TDI0Ljg5LDIyQS44OS44OSwwLDAsMCwyNS4zMywyMS41NFoiLz5cbiAgICAgICAg'@;
put 'ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsOC42YS45LjksMCwwLDAtLjkuOXY0LjZsMS44LDEuODFWOS41QS45LjksMCwwLDAsMTgsOC42WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTQiIGQ9Ik0xMS40MiwzLjQzYTUuOCw1LjgsMCwwLDAtNS44MS0uODFMOC4zLDUuMzJBMTYsMTYsMCwwLDEsMTEuNDIsMy40M1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNMTgsNGExMy45'@;
put 'MSwxMy45MSwwLDAsMC04LjMsMi43NWwxLjQyLDEuNDNBMTIsMTIsMCwwLDEsMjcuODIsMjQuOWwxLjQyLDEuNDNBMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiBkPSJNMS41Niw0LjIxLDIu'@;
put 'NzMsNS4zOGE1LjcsNS43LDAsMCwwLC42Nyw2LjFBMTUuNzgsMTUuNzgsMCwwLDEsNS40Niw4LjEyTDYuODgsOS41NUExMy45NCwxMy45NCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjg5LDEzLjg5LDAsMCwwLDE2LjgsMGw0LjE0'@;
put 'LDQuMTVMMzIsMzEuOSwzLDIuOFpNMjUsMjcuNzJBMTEuODksMTEuODksMCwwLDEsMTgsMzAsMTIsMTIsMCwwLDEsNiwxOGExMS44OSwxMS44OSwwLDAsMSwyLjI5LTdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzEu'@;
put 'NDcsMy44NGE1Ljc4LDUuNzgsMCwwLDAtNy4zNy0uNjMsMTYuMDgsMTYuMDgsMCwwLDEsOC4yLDcuNjVBNS43Myw1LjczLDAsMCwwLDMxLjQ3LDMuODRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTEuNDIsMy40M2E1'@;
put 'LjgsNS44LDAsMCwwLTUuNzctLjgyTDguMzMsNS4zQTE2LDE2LDAsMCwxLDExLjQyLDMuNDNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjQuOTIsMjEuOTRsNC4zNCw0LjM2QTE0LDE0LDAsMCwwLDkuNzUsNi43M0wx'@;
put 'NywxNFY5LjY5YTEsMSwwLDAsMSwyLDBWMTZsMi4zMywyLjM0TDI1LDIwLjFhMSwxLDAsMCwxLC40NywxLjMzQTEsMSwwLDAsMSwyNC45MiwyMS45NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0xLjYxLDQuMjEsMi43'@;
put 'Myw1LjM0YTUuNzMsNS43MywwLDAsMCwuNjcsNi4xNUExNS44OCwxNS44OCwwLDAsMSw1LjQ4LDguMUw2LjkxLDkuNTJBMTMuOTQsMTMuOTQsMCwwLDAsOC4xMSwyNy44OEw1LjU2LDMwLjQzQTEsMSwwLDEsMCw3LDMxLjg0bDIuNjYtMi42NmExMy44OSwxMy44OSwwLDAsMCwxNi44MywwbDQu'@;
put 'MTYsNC4xN0wzMiwzMS45LDMsMi44WiIvPicpLFQuQ2xyU2hhcGVOZXc9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zNC41OSwyM2wtNC4wOC01LDQtNC45YTEuODIsMS44MiwwLDAsMCwuMjMtMS45NEExLjkz'@;
put 'LDEuOTMsMCwwLDAsMzIuOTQsMTBoLTMxQTEuOTEsMS45MSwwLDAsMCwwLDExLjg4VjI0LjEzQTEuOTEsMS45MSwwLDAsMCwxLjk0LDI2SDMzLjA1YTEuOTMsMS45MywwLDAsMCwxLjc3LTEuMDlBMS44MiwxLjgyLDAsMCwwLDM0LjU5LDIzWk0yLDI0VjEySDMyLjc4bC00Ljg0LDUuOTNMMzIu'@;
put 'ODUsMjRaIi8+XG4gICAgICAgICAgICA8cG9seWdvbiAgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHBvaW50cz0iOS4zOSAxOS4zNSA2LjEzIDE1IDUgMTUgNSAyMS4xOCA2LjEzIDIxLjE4IDYuMTMgMTYuODQgOS4zOSAyMS4xOCAxMC41MSAyMS4xOCAxMC41'@;
put 'MSAxNSA5LjM5IDE1IDkuMzkgMTkuMzUiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgcG9pbnRzPSIxMi4xOCAyMS4xOCAxNi44NCAyMS4xOCAxNi44NCAyMC4xNiAxMy4zMSAyMC4xNiAxMy4zMSAxOC41NSAxNi41'@;
put 'IDE4LjU1IDE2LjUgMTcuNTIgMTMuMzEgMTcuNTIgMTMuMzEgMTYuMDMgMTYuODQgMTYuMDMgMTYuODQgMTUgMTIuMTggMTUgMTIuMTggMjEuMTgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgcG9pbnRzPSIyNC41'@;
put 'MiAxOS40MyAyMy4wNiAxNSAyMS44NCAxNSAyMC4zNyAxOS40MyAxOS4wNSAxNSAxNy44MiAxNSAxOS43OCAyMS4xOCAyMC44OSAyMS4xOCAyMi40NSAxNi41OSAyNCAyMS4xOCAyNS4xMyAyMS4xOCAyNy4wOCAxNSAyNS44NSAxNSAyNC41MiAxOS40MyIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM0LjExLDI0LjQ5bC0zLjkyLTYuNjIsMy44OC02LjM1QTEsMSwwLDAsMCwzMy4yMiwxMEgyYTIsMiwwLDAsMC0yLDJWMjRhMiwyLDAsMCwwLDIsMkgzMy4yNUExLDEsMCwwLDAsMzQuMTEsMjQuNDlabS0yMy42LTMu'@;
put 'MzFIOS4zOUw2LjEzLDE2Ljg0djQuMzVINVYxNUg2LjEzbDMuMjcsNC4zNVYxNWgxLjEyWk0xNi44NCwxNkgxMy4zMXYxLjQ5aDMuMnYxaC0zLjJ2MS42MWgzLjUzdjFIMTIuMThWMTVoNC42NVptOC4yOSw1LjE2SDI0bC0xLjU1LTQuNTlMMjAuOSwyMS4xOEgxOS43OGwtMi02LjE4SDE5bDEu'@;
put 'MzIsNC40M0wyMS44NCwxNWgxLjIybDEuNDYsNC40M0wyNS44NSwxNWgxLjIzWiIvPicpLFQuQ2xyU2hhcGVCdWJibGVFeGNsYW1hdGlvbj0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDIuNWMtOC44Miww'@;
put 'LTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUzLDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0LTkuMjdDMzQsOC43OCwyNi44MiwyLjUsMTgsMi41Wk0yOC4yOSwyNC42MWExLDEsMCwwLDAtLjMyLjczbDAsNS4z'@;
put 'NC00LjM4LTIuNzlhMSwxLDAsMCwwLS44My0uMTFBMTYsMTYsMCwwLDEsMTgsMjguNWMtNy43MiwwLTE0LTUuMzgtMTQtMTJzNi4yOC0xMiwxNC0xMiwxNCw1LjM4LDE0LDEyQTExLjA4LDExLjA4LDAsMCwxLDI4LjI5LDI0LjYxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyMC42M2ExLDEsMCwwLDAsMS0xVjguNDhhMSwxLDAsMSwwLTIsMFYxOS42MUExLDEsMCwwLDAsMTgsMjAuNjNaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0zIiBjeD0iMTgiIGN5PSIyNC4wNCIgcj0iMS4zMyIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDIuNWMtOC44MiwwLTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUz'@;
put 'LDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0LTkuMjdDMzQsOC43OCwyNi44MiwyLjUsMTgsMi41Wk0xNi45Myw5LjEzYTEuNDEsMS40MSwwLDEsMSwyLjgxLDBWMTguOWExLjQxLDEuNDEsMCwxLDEtMi44MSwwWm0xLjQxLDE3LjM1YTEuODcsMS44NywwLDEs'@;
put 'MSwxLjg3LTEuODdBMS44NywxLjg3LDAsMCwxLDE4LjM0LDI2LjQ3WiIvPicpLFQuQ2xyU2hhcGVHcmlkVmlldz0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE0LDRINkEyLDIsMCwwLDAsNCw2djhhMiwyLDAs'@;
put 'MCwwLDIsMmg4YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMTQsNFpNNiwxNFY2aDh2OFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzAsNEgyMmEyLDIsMCwwLDAtMiwydjhhMiwyLDAsMCwwLDIsMmg4YTIs'@;
put 'MiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzAsNFpNMjIsMTRWNmg4djhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE0LDIwSDZhMiwyLDAsMCwwLTIsMnY4YTIsMiwwLDAsMCwyLDJoOGEyLDIsMCwwLDAsMi0y'@;
put 'VjIyQTIsMiwwLDAsMCwxNCwyMFpNNiwzMFYyMmg4djhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMwLDIwSDIyYTIsMiwwLDAsMC0yLDJ2OGEyLDIsMCwwLDAsMiwyaDhhMiwyLDAsMCwwLDItMlYyMkEyLDIs'@;
put 'MCwwLDAsMzAsMjBaTTIyLDMwVjIyaDh2OFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIHg9IjQiIHk9IjQiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjIiIHJ5PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiB4PSIyMCIgeT0iNCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIiByeD0iMiIgcnk9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIHg9IjQiIHk9IjIwIiB3aWR0aD0iMTIi'@;
put 'IGhlaWdodD0iMTIiIHJ4PSIyIiByeT0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgeD0iMjAiIHk9IjIwIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHJ4PSIyIiByeT0iMiIvPicpLFQuQ2xyU2hhcGVDdXJzb3JBcnJvdz0o'@;
put 'MCx2LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE0LjU4LDMyLjMxYTEsMSwwLDAsMS0uOTQtLjY1TDQsNS42NUExLDEsMCwwLDEsNS4yNSw0LjM3bDI2LDkuNjhhMSwxLDAsMCwxLS4wNSwxLjg5bC04LjM2LDIuNTcs'@;
put 'OC4zLDguM2ExLDEsMCwwLDEsMCwxLjQxbC0zLjI2LDMuMjZhMSwxLDAsMCwxLS43MS4yOWgwYTEsMSwwLDAsMS0uNzEtLjI5bC04LjMzLTguMzMtMi42LDguNDVhMSwxLDAsMCwxLS45My43MVptMy4wOS0xMmExLDEsMCwwLDEsLjcxLjI5bDguNzksOC43OUwyOSwyNy41MWwtOC43Ni04Ljc2'@;
put 'YTEsMSwwLDAsMSwuNDEtMS42Nmw3LjEzLTIuMkw2LjYsN2w3Ljg5LDIxLjJMMTYuNzEsMjFhMSwxLDAsMCwxLC43MS0uNjhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjksMTIuMzYsMy44OCwzQTEsMSwwLDAsMCwy'@;
put 'LjU5LDQuMjhMMTIsMjkuNDRhMSwxLDAsMCwwLDEuODktLjA1bDIuNjktOC43NSw5LjEyLDguOWExLDEsMCwwLDAsMS40MSwwbDIuMzUtMi4zNWExLDEsMCwwLDAsMC0xLjQxbC05LjA5LTguODZMMjksMTQuMjVBMSwxLDAsMCwwLDI5LDEyLjM2WiIvPicpLFQuQ2xyU2hhcGVDdXJzb3JIYW5k'@;
put 'PSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAuNzQsMTUuMTlhMTMuNjYsMTMuNjYsMCwwLDAtNi44Ny0zLjgzQTI2LDI2LDAsMCwwLDE4LDEwLjU4VjUuMjhBMy40LDMuNCwwLDAsMCwxNC41LDIsMy40LDMu'@;
put 'NCwwLDAsMCwxMSw1LjI4djEwTDkuNCwxMy43YTMuNzcsMy43NywwLDAsMC01LjI4LDBBMy42NywzLjY3LDAsMCwwLDMsMTYuMzNhMy42LDMuNiwwLDAsMCwxLDIuNTZsNC42Niw1LjUyYTExLjUzLDExLjUzLDAsMCwwLDEuNDMsNCwxMC4xMiwxMC4xMiwwLDAsMCwyLDIuNTR2MS45MmExLjA3'@;
put 'LDEuMDcsMCwwLDAsMSwxLjA4SDI3YTEuMDcsMS4wNywwLDAsMCwxLTEuMDh2LTIuN2ExMi44MSwxMi44MSwwLDAsMCwzLTguMzZ2LTZBMSwxLDAsMCwwLDMwLjc0LDE1LjE5Wk0yOSwyMS44NmExMC43MiwxMC43MiwwLDAsMS0yLjYsNy4yNiwxLjExLDEuMTEsMCwwLDAtLjQuNzJWMzJIMTQu'@;
put 'MTRWMzAuNTJhMSwxLDAsMCwwLS40NC0uODMsNy4yNiw3LjI2LDAsMCwxLTEuODItMi4yMyw5LjE0LDkuMTQsMCwwLDEtMS4yLTMuNTIsMSwxLDAsMCwwLS4yMy0uNTlMNS41MywxNy41M2ExLjcsMS43LDAsMCwxLDAtMi40MiwxLjc2LDEuNzYsMCwwLDEsMi40NywwbDMsM3YzLjE0bDItMVY1'@;
put 'LjI4QTEuNDIsMS40MiwwLDAsMSwxNC41LDQsMS40MiwxLjQyLDAsMCwxLDE2LDUuMjh2MTEuOGwyLC40M1YxMi41OWEyNC4yNywyNC4yNywwLDAsMSwyLjUxLjE4VjE4bDEuNi4zNVYxM2MuNDEuMDguODMuMTcsMS4yNi4yOGExNC44OCwxNC44OCwwLDAsMSwxLjUzLjQ5djUuMTVsMS42LjM1'@;
put 'VjE0LjVBMTEuMDYsMTEuMDYsMCwwLDEsMjksMTYuMjNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjguNjksMTQuMzN2NC44M2wtMi0uNDNWMTMuMjRhMTYuMTksMTYuMTksMCwwLDAtMi4zMy0uODR2NS44MmwtMi0u'@;
put 'NDNWMTJjLTEuMS0uMTgtMi4xOC0uMy0zLjA4LS4zNnY1LjUxbC0yLS40M1YxMS40OGgwVjQuMzRhMi41MywyLjUzLDAsMCwwLTIuNi0yLjQzLDIuNTMsMi41MywwLDAsMC0yLjYsMi40M1YxNy4yN2gwdjIuNTlsLTIsMVYxNS42TDcuNzUsMTMuMjFhMi44MywyLjgzLDAsMCwwLTQsMCwyLjkz'@;
put 'LDIuOTMsMCwwLDAsMCw0LjA5bDYsNy4xYTEwLjgyLDEwLjgyLDAsMCwwLDEuMzksNC4yMiw4LjQyLDguNDIsMCwwLDAsMi4yMSwyLjczdjIuNTZIMjcuNzlWMzAuNjJhMTIuNTQsMTIuNTQsMCwwLDAsMy04LjV2LTZBMTAsMTAsMCwwLDAsMjguNjksMTQuMzNaIi8+JyksVC5DbHJTaGFwZUN1'@;
put 'cnNvckhhbmRDbGljaz0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLjQsMTcuNmMtMS44LTEuOS00LjItMy4yLTYuNy0zLjdjLTEuMS0wLjMtMi4yLTAuNS0zLjMtMC42YzIuOC0zLjMsMi4zLTguMy0xLTEx'@;
put 'LjFzLTguMy0yLjMtMTEuMSwxcy0yLjMsOC4zLDEsMTEuMVxuICAgICAgICAgICAgICAgICAgICBjMC42LDAuNSwxLjIsMC45LDEuOCwxLjF2Mi4ybC0xLjYtMS41Yy0xLjQtMS40LTMuNy0xLjQtNS4yLDBjLTEuNCwxLjQtMS41LDMuNi0wLjEsNWw0LjYsNS40YzAuMiwxLjQsMC43LDIuNywx'@;
put 'LjQsMy45XG4gICAgICAgICAgICAgICAgICAgIGMwLjUsMC45LDEuMiwxLjgsMS45LDIuNXYxLjljMCwwLjYsMC40LDEsMSwxaDEzLjZjMC41LDAsMS0wLjUsMS0xdi0yLjZjMS45LTIuMywyLjktNS4yLDIuOS04LjF2LTUuOFxuICAgICAgICAgICAgICAgICAgICBDMzAuNywxNy45LDMwLjYs'@;
put 'MTcuNywzMC40LDE3LjZ6IE04LjQsOC4yYzAtMy4zLDIuNy01LjksNi01LjhjMy4zLDAsNS45LDIuNyw1LjgsNmMwLDEuOC0wLjgsMy40LTIuMiw0LjVWNy45XG4gICAgICAgICAgICAgICAgICAgIGMtMC4xLTEuOC0xLjYtMy4yLTMuNC0zLjJjLTEuOC0wLjEtMy40LDEuNC0zLjQsMy4ydjUu'@;
put 'MkM5LjUsMTIuMSw4LjUsMTAuMiw4LjQsOC4yTDguNCw4LjJ6IE0yOC43LDI0YzAuMSwyLjYtMC44LDUuMS0yLjUsNy4xXG4gICAgICAgICAgICAgICAgICAgIGMtMC4yLDAuMi0wLjQsMC40LTAuNCwwLjd2Mi4xSDE0LjJ2LTEuNGMwLTAuMy0wLjItMC42LTAuNC0wLjhjLTAuNy0wLjYtMS4z'@;
put 'LTEuMy0xLjgtMi4yYy0wLjYtMS0xLTIuMi0xLjItMy40XG4gICAgICAgICAgICAgICAgICAgIGMwLTAuMi0wLjEtMC40LTAuMi0wLjZsLTQuOC01LjdjLTAuMy0wLjMtMC41LTAuNy0wLjUtMS4yYzAtMC40LDAuMi0wLjksMC41LTEuMmMwLjctMC42LDEuNy0wLjYsMi40LDBsMi45LDIuOXYz'@;
put 'bDEuOS0xVjcuOVxuICAgICAgICAgICAgICAgICAgICBjMC4xLTAuNywwLjctMS4zLDEuNS0xLjJjMC43LDAsMS40LDAuNSwxLjQsMS4ydjExLjVsMiwwLjR2LTQuNmMwLjEtMC4xLDAuMi0wLjEsMC4zLTAuMmMwLjcsMCwxLjQsMC4xLDIuMSwwLjJ2NS4xbDEuNiwwLjN2LTUuMlxuICAgICAg'@;
put 'ICAgICAgICAgICAgICBsMS4yLDAuM2MwLjUsMC4xLDEsMC4zLDEuNSwwLjV2NWwxLjYsMC4zdi00LjZjMC45LDAuNCwxLjcsMSwyLjQsMS43TDI4LjcsMjR6Ii8+JyksVC5DbHJTaGFwZVJlc2l6ZT0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMSIgZD0iTTE5LDRhMSwxLDAsMCwwLDAsMmg5LjU5bC05LjI1LDkuMjVhMSwxLDAsMSwwLDEuNDEsMS40MUwzMCw3LjQxVjE3YTEsMSwwLDAsMCwyLDBWNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0y'@;
put 'IiBkPSJNNCwxOWExLDEsMCwwLDEsMiwwdjkuNTlsOS4yNS05LjI1YTEsMSwwLDEsMSwxLjQxLDEuNDFMNy40MSwzMEgxN2ExLDEsMCwwLDEsMCwySDRaIi8+JyksVC5DbHJTaGFwZU9iamVjdHM9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEiIGQ9Ik0xNi4wOCwxNC45YTEwLjQxLDEwLjQxLDAsMCwxLDEuODctLjcxbC00LTEwLjc3YTIsMiwwLDAsMC0zLjc1LDBMMiwyNS4yNkEyLDIsMCwwLDAsMy45MiwyOGg2Ljk0YTEwLDEwLDAsMCwxLS41Mi0ySDMuOTJMMTIuMDYsNC4xMloiLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIsOUgyMmEyLDIsMCwwLDAtMiwydjIuODVjLjIzLDAsLjQ2LDAsLjY5LDBBMTAuNTEsMTAuNTEsMCwwLDEsMjIsMTMuOVYxMUgzMlYyMUgzMC42NWExMC40MiwxMC40MiwwLDAsMSwuNDUsMkgzMmEy'@;
put 'LDIsMCwwLDAsMi0yVjExQTIsMiwwLDAsMCwzMiw5WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMC42OSwxNS44MWE4LjUsOC41LDAsMSwwLDguNSw4LjVBOC41MSw4LjUxLDAsMCwwLDIwLjY5LDE1LjgxWm0w'@;
put 'LDE1YTYuNSw2LjUsMCwxLDEsNi41LTYuNUE2LjUxLDYuNTEsMCwwLDEsMjAuNjksMzAuODFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTAuNjUsMjQuNDRhOS41MSw5LjUxLDAsMCwxLDcuMDYtOS4xN0wxMywzYTEs'@;
put 'MSwwLDAsMC0xLjg3LDBMMi4wNywyNi41NkExLDEsMCwwLDAsMywyNy45Mmg4LjMyQTkuNDQsOS40NCwwLDAsMSwxMC42NSwyNC40NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0zMiwxMEgyMGExLDEsMCwwLDAtMSwx'@;
put 'djRhOS40Myw5LjQzLDAsMCwxLDEwLjYzLDlIMzJhMSwxLDAsMCwwLDEtMVYxMUExLDEsMCwwLDAsMzIsMTBaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGN4PSIyMC4xNSIgY3k9IjI0LjQ0IiByPSI3LjUiLz4nKSxULkNs'@;
put 'clNoYXBlQm9vaz0oMCx2LmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgeD0iMTAiIHk9IjUuMiIgd2lkdGg9IjE4IiBoZWlnaHQ9IjEuNTUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0yIiBkPSJNMjksOEg5Ljg2QTEuODksMS44OSwwLDAsMSw4LDYsMiwyLDAsMCwxLDkuODYsNEgyOWExLDEsMCwwLDAsMC0ySDkuODZBNCw0LDAsMCwwLDYsNmE0LjE0LDQuMTQsMCwwLDAsMCwuNDksMSwxLDAsMCwwLDAsLjI0VjMwYTQsNCwwLDAsMCwzLjg2LDRIMjlh'@;
put 'MSwxLDAsMCwwLDEtMVY5LjI1czAtLjA2LDAtLjA5LDAtLjA2LDAtLjA5QTEuMDcsMS4wNywwLDAsMCwyOSw4Wk0yOCwzMkg5Ljg2QTIsMiwwLDAsMSw4LDMwVjkuNTVBMy42MywzLjYzLDAsMCwwLDkuODYsMTBIMjhaIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0xIiB4PSIxMCIgeT0iNS4yIiB3aWR0aD0iMTgiIGhlaWdodD0iMS41NSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI5LDhIOS44NkExLjg5LDEuODksMCwwLDEsOCw2LDIsMiwwLDAsMSw5'@;
put 'Ljg2LDRIMjlhMSwxLDAsMSwwLDAtMkg5Ljg2QTQsNCwwLDAsMCw2LDZhNC4xNCw0LjE0LDAsMCwwLDAsLjQ5LDEsMSwwLDAsMCwwLC4yNFYzMGE0LDQsMCwwLDAsMy44Niw0SDI5YTEsMSwwLDAsMCwxLTFWOS4yNXMwLS4wNiwwLS4wOSwwLS4wNiwwLS4wOUExLjA3LDEuMDcsMCwwLDAsMjks'@;
put 'OFoiLz4nKSxULkNsclNoYXBlQXN0ZXJpc2s9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOC44OSwyMC45MWwtNS0yLjkxLDQuODctMi44NmEzLjExLDMuMTEsMCwwLDAsMS4xNC0xLjA4LDMsMywwLDAsMC00'@;
put 'LjA5LTQuMTVMMjEsMTIuNzZWN2EzLDMsMCwwLDAtNiwwdjUuNzZMMTAuMTUsOS45MWEzLDMsMCwxLDAtMyw1LjE4bDUsMi45MUw3LjIsMjAuODZhMy4xMSwzLjExLDAsMCwwLTEuMTQsMS4wOCwzLDMsMCwwLDAsNC4wOSw0LjE0TDE1LDIzLjI0VjI4LjlhMywzLDAsMCwwLDIsMi45NEEzLDMs'@;
put 'MCwwLDAsMjEsMjlWMjMuMjRsNC44NSwyLjg1YTMsMywwLDEsMCwzLTUuMThaTTI4LjI0LDI0YTEsMSwwLDAsMS0xLjM3LjM2TDE5LDE5Ljc1VjI5YTEsMSwwLDAsMS0yLDBWMTkuNzVMOS4xMywyNC4zNmExLDEsMCwwLDEtMS0xLjcyTDE2LDE4bC03LjktNC42NGExLDEsMCwxLDEsMS0xLjcy'@;
put 'TDE3LDE2LjI1VjdhMSwxLDAsMCwxLDIsMHY5LjI1bDcuODctNC42MmExLDEsMCwwLDEsMSwxLjcyTDIwLDE4bDcuOSw0LjY0QTEsMSwwLDAsMSwyOC4yNCwyNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOC44OSwy'@;
put 'MC45MWwtNS0yLjkxLDQuODctMi44NmEzLjExLDMuMTEsMCwwLDAsMS4xNC0xLjA4LDMsMywwLDAsMC00LjA5LTQuMTVMMjEsMTIuNzZWN2EzLDMsMCwwLDAtNiwwdjUuNzZMMTAuMTUsOS45MWEzLDMsMCwxLDAtMyw1LjE4bDUsMi45MUw3LjIsMjAuODZhMy4xMSwzLjExLDAsMCwwLTEuMTQs'@;
put 'MS4wOCwzLDMsMCwwLDAsNC4wOSw0LjE0TDE1LDIzLjI0VjI4LjlhMywzLDAsMCwwLDIsMi45NEEzLDMsMCwwLDAsMjEsMjlWMjMuMjRsNC44NSwyLjg1YTMsMywwLDEsMCwzLTUuMThaIi8+JyksVC5DbHJTaGFwZVNjaXNzb3JzPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIlxuICAgICAgICAgICAgZD0iTTI0LjA2LDE4LjE4bDkuNjEtOC43N2ExLDEsMCwwLDAtLjA5LTEuNTVsLTIuMjQtMS42YTMuNTcsMy41NywwLDAsMC00LjI4LjEyTDE1Ljg4LDE1LjNsLTMuMjYtMi41MmE1LjQ1LDUuNDUsMCwxLDAtMSwx'@;
put 'Ljc3bDIuNjIsMkwxMCwyMGE1LjQ4LDUuNDgsMCwxLDAsMS41OSwxLjI5TDI4LjMsNy45NGExLjU3LDEuNTcsMCwwLDEsMS44OC0uMDVsMS4yMy44OEwyMS4xLDE4LjE5bDEwLjMxLDkuNC0xLjIzLjg4YTEuNTcsMS41NywwLDAsMS0xLjg4LS4wNWwtOS44MS03Ljg1TDE3LDIxLjkzbDEwLjA2'@;
put 'LDhhMy41NywzLjU3LDAsMCwwLDQuMjkuMTJsMi4yNC0xLjZhMSwxLDAsMCwwLC4wOS0xLjU1Wk03LjQ1LDE0LjU0YTMuNDYsMy40NiwwLDEsMSwzLjQ1LTMuNDZBMy40NiwzLjQ2LDAsMCwxLDcuNDUsMTQuNTRabTAsMTMuNzJBMy40NiwzLjQ2LDAsMSwxLDEwLjksMjQuOCwzLjQ2LDMuNDYs'@;
put 'MCwwLDEsNy40NSwyOC4yNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMy44MSw4LjEzLDMxLjYzLDYuNDhhMS45MiwxLjkyLDAsMCwwLTIuMzYsMEwxMCwyMi4wNmE1LjQ2LDUuNDYsMCwxLDAsMiwxLjgxbDMuOS0z'@;
put 'LjEyTDI5LjI3LDMxLjUyYTEuOTIsMS45MiwwLDAsMCwyLjM2LDBsMi4xOC0xLjY0TDIwLjk0LDE5Wk03LjQ1LDI5Ljc1YTIuODYsMi44NiwwLDEsMSwyLjg2LTIuODZBMi44NywyLjg3LDAsMCwxLDcuNDUsMjkuNzVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTQuMywxNS4yNCwxMiwxMy4zOGE1LjQ2LDUuNDYsMCwxLDAtMiwxLjgxTDEyLjE2LDE3Wm0tNi44NS0yYTIuODYsMi44NiwwLDEsMSwyLjg2LTIuODZBMi44NiwyLjg2LDAsMCwxLDcuNDUsMTMuMjNaIi8+JyksVC5DbHJTaGFwZUJ1Zz0oMCx2LmNs'@;
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 'MDYsOS4wNiwwLDAsMC0xLjE5LDEuMThBNS44NSw1Ljg1LDAsMCwwLDE4LDQuM2E1LjkxLDUuOTEsMCwwLDAtMy4xNywxLjE5LDkuMiw5LjIsMCwwLDAtMS4yMi0xLjIxLDcuNDksNy40OSwwLDAsMC0xLjMyLS44MywxLjY4LDEuNjgsMCwxLDAtMS4xMSwxLjgzWiIvPicpLFQuQ2xyU2hhcGVU'@;
put 'aGVybW9tZXRlcj0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LDIzLjE3VjExLjQ2SDE3VjIzLjJhMywzLDAsMSwwLDIsMFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYsMTVhMSwxLDAsMCwwLDAtMkgyMy45MlYxMUgyNmExLDEsMCwwLDAsMC0ySDIzLjkyVjhhNiw2LDAsMCwwLTEyLDBWMjAuODFhOCw4LDAsMSwwLDEyLS4yVjE5SDI2YTEsMSwwLDAsMCwwLTJIMjMuOTJWMTVaTTI0LDI2YTYsNiwwLDEsMS0xMC4z'@;
put 'Ni00LjEybC4yNy0uMjlWOGE0LDQsMCwwLDEsOCwwVjIxLjQ0bC4zLjI5QTYsNiwwLDAsMSwyNCwyNloiLz4nKSxULkNsclNoYXBlUGVuY2lsPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMuODcsOC4zMiwy'@;
put 'OCwyLjQyYTIuMDcsMi4wNywwLDAsMC0yLjkyLDBMNC4yNywyMy4ybC0xLjksOC4yYTIuMDYsMi4wNiwwLDAsMCwyLDIuNSwyLjE0LDIuMTQsMCwwLDAsLjQzLDBMMTMuMDksMzIsMzMuODcsMTEuMjRBMi4wNywyLjA3LDAsMCwwLDMzLjg3LDguMzJaTTEyLjA5LDMwLjIsNC4zMiwzMS44M2wx'@;
put 'Ljc3LTcuNjJMMjEuNjYsOC43bDYsNlpNMjksMTMuMjVsLTYtNiwzLjQ4LTMuNDYsNS45LDZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTQuMjIsMjMuMmwtMS45LDguMmEyLjA2LDIuMDYsMCwwLDAsMiwyLjUs'@;
put 'Mi4xNCwyLjE0LDAsMCwwLC40MywwTDEzLDMyLDI4Ljg0LDE2LjIyLDIwLDcuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzMuODIsOC4zMmwtNS45LTUuOWEyLjA3LDIuMDcsMCwwLDAtMi45MiwwTDIxLjcy'@;
put 'LDUuN2w4LjgzLDguODMsMy4yOC0zLjI4QTIuMDcsMi4wNywwLDAsMCwzMy44Miw4LjMyWiIvPicpLFQuQ2xyU2hhcGVOb3RlPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOCwzMEg2VjhIMTkuMjJsMi0ySDZBMiwyLDAsMCwwLDQsOFYzMGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAs'@;
put 'MCwyLTJWMTVsLTIsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjUzLDUuODQsMzAuMTYsMi40N2ExLjYxLDEuNjEsMCwwLDAtMi4yOCwwTDE0LjE3LDE2LjI2bC0xLjExLDQuODFBMS42MSwxLjYxLDAs'@;
put 'MCwwLDE0LjYzLDIzLDEuNjksMS42OSwwLDAsMCwxNSwyM2w0Ljg1LTEuMDdMMzMuNTMsOC4xMkExLjYxLDEuNjEsMCwwLDAsMzMuNTMsNS44NFpNMTguODEsMjAuMDhsLTMuNjYuODFMMTYsMTcuMjYsMjYuMzIsNi44N2wyLjgyLDIuODJaTTMwLjI3LDguNTYsMjcuNDUsNS43NCwyOSw0LjE2'@;
put 'LDMxLjg0LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMyw2LjQsMjkuMywyLjdhMS43MSwxLjcxLDAsMCwwLTIuMzYsMEwyMy42NSw2SDZBMiwyLDAsMCwwLDQsOFYzMGEyLDIsMCwwLDAsMiwySDI4YTIs'@;
put 'MiwwLDAsMCwyLTJWMTEuNzZsMy0zQTEuNjcsMS42NywwLDAsMCwzMyw2LjRaTTE4LjgzLDIwLjEzbC00LjE5LjkzLDEtNC4xNSw5LjU1LTkuNTcsMy4yMywzLjIzWk0yOS41LDkuNDMsMjYuMjcsNi4ybDEuODUtMS44NSwzLjIzLDMuMjNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s'@;
put 'aWQtcGF0aC0xIiAvPicpLFQuQ2xyU2hhcGVSZWZyZXNoPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjIuNCwxMS42NWExLjA5LDEuMDksMCwwLDAsMS4wOSwxLjA5SDM0LjQzVjEuODFhMS4wOSwxLjA5LDAs'@;
put 'MSwwLTIuMTksMFY4Ljk1YTE2LjQxLDE2LjQxLDAsMSwwLDEuNDcsMTUuODYsMS4xMiwxLjEyLDAsMCwwLTIuMDUtLjksMTQuMTgsMTQuMTgsMCwxLDEtMS4wNS0xMy4zNkgyMy41QTEuMDksMS4wOSwwLDAsMCwyMi40LDExLjY1WiIvPicpLFQuQ2xyU2hhcGVTeW5jPSgwLHYuY2xySWNvblNW'@;
put 'RykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIuODQsMTUuNzJhMSwxLDAsMSwwLTIsLjI5QTEzLjE1LDEzLjE1LDAsMCwxLDMxLDE3Ljk0LDEzLDEzLDAsMCwxLDguNywyN2g1LjM2YTEsMSwwLDAsMCwwLTJoLTl2OWExLDEsMCwxLDAs'@;
put 'MiwwVjI4LjJBMTUsMTUsMCwwLDAsMzIuODQsMTUuNzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMC4wNiwxQTEuMDUsMS4wNSwwLDAsMCwyOSwyVjcuODNBMTQuOTQsMTQuOTQsMCwwLDAsMywxNy45'@;
put 'NGExNS4xNiwxNS4xNiwwLDAsMCwuMiwyLjQ4LDEsMSwwLDAsMCwxLC44NGguMTZhMSwxLDAsMCwwLC44Mi0xLjE1QTEzLjIzLDEzLjIzLDAsMCwxLDUsMTcuOTRhMTMsMTMsMCwwLDEsMTMtMTNBMTIuODcsMTIuODcsMCwwLDEsMjcuNDQsOUgyMi4wNmExLDEsMCwwLDAsMCwySDMxVjJBMSwx'@;
put 'LDAsMCwwLDMwLjA2LDFaIi8+JyksVC5DbHJTaGFwZVZpZXdMaXN0PSgwLHYuY2xySWNvblNWRykoJzxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSIyIiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik03LDEwSDMxYTEsMSwwLDAsMCwwLTJIN2ExLDEsMCwwLDAsMCwyWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSIyIiB5PSIx'@;
put 'NCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMzEsMTRIN2ExLDEsMCwwLDAsMCwySDMxYTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHg9IjIiIHk9IjIwIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIGQ9Ik0zMSwyMEg3YTEsMSwwLDAsMCww'@;
put 'LDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgeD0iMiIgeT0iMjYiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgZD0iTTMxLDI2SDdhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPicpLFQuQ2xyU2hhcGVWaWV3Q2FyZHM9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9'@;
put 'Ik0xNSwxN0g0YTIsMiwwLDAsMS0yLTJWOEEyLDIsMCwwLDEsNCw2SDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMTdaTTQsOHY3SDE1VjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMiwx'@;
put 'N0gyMWEyLDIsMCwwLDEtMi0yVjhhMiwyLDAsMCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDE3Wk0yMSw4djdIMzJWOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE1LDMwSDRh'@;
put 'MiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMzBaTTQsMjF2N0gxNVYyMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMyLDMwSDIxYTIs'@;
put 'MiwwLDAsMS0yLTJWMjFhMiwyLDAsMCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDMwWk0yMSwyMXY3SDMyVjIxWiIvPicpLFQuQ2xyU2hhcGVMaWdodGJ1bGI9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDIuMjVhMTEsMTEsMCwwLDAtMTEsMTEsMTAuNjgs'@;
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 'LS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz4nKSxULkNsclNoYXBlRG93bmxvYWQ9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMSwzMUg1YTEsMSwwLDAsMCwwLDJI'@;
put 'MzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDI5LjQ4LDI4LjYxLDE4Ljg3YTEsMSwwLDAsMC0xLjQxLTEuNDFMMTksMjUuNjVWNWExLDEsMCwwLDAtMiwwVjI1LjY1TDgu'@;
put 'ODEsMTcuNDZhMSwxLDAsMSwwLTEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMSwzMUg1YTEsMSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAg'@;
put 'ICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0xOCwyOS40OCwyOC42MSwxOC44N2ExLDEsMCwwLDAtMS40MS0xLjQxTDE5LDI1LjY1VjVhMSwxLDAsMCwwLTIsMFYyNS42NUw4LjgxLDE3LjQ2'@;
put 'YTEsMSwwLDEsMC0xLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0'@;
put 'aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMxLDMxSDVhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMTgsMjkuNDgsMjguNjEsMTguODdhMSwxLDAsMCwwLTEuNDEtMS40MUwxOSwyNS42NVY1YTEsMSwwLDAsMC0yLDBWMjUuNjVMOC44MSwxNy40NmExLDEsMCwxLDAtMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4y'@;
put 'OCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+JyksVC5DbHJTaGFwZVVwbG9hZD0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLDMxSDVhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPlxuICAg'@;
put 'ICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNOC44MSwxNSwxNyw2LjgzVjI3LjQ4YTEsMSwwLDAsMCwyLDBWNi44M0wyNy4xOSwxNWExLDEsMCwwLDAsMS40MS0xLjQxTDE4LDMsNy4zOSwxMy42MUExLDEsMCwxLDAsOC44'@;
put 'MSwxNVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMxLDMxSDVjLTAuNiwwLTEsMC40LTEsMXMwLjQsMSwxLDFoMjZjMC42LDAsMS0wLjQsMS0xUzMxLjYsMzEsMzEsMzF6'@;
put 'Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik04LjgsMTVMMTcsNi44djIwLjZjMCwwLjYsMC40LDEsMSwxczEtMC40LDEtMVY2LjhMMjAuMSw4bDEtMS44TDE4LDNMNy40LDEz'@;
put 'LjZDNywxNCw2LjksMTQuNiw3LjIsMTVzMSwwLjUsMS40LDAuMUM4LjcsMTUuMSw4LjgsMTUuMSw4LjgsMTV6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9'@;
put 'Ik0yNi45LDEuMUwyMS4xLDExYy0wLjQsMC42LTAuMiwxLjQsMC4zLDEuOGMwLjIsMC4yLDAuNSwwLjIsMC44LDAuMmgxMS41YzAuNywwLDEuMy0wLjUsMS4zLTEuMmMwLTAuMy0wLjEtMC41LTAuMi0wLjhsLTUuNy05LjljLTAuNC0wLjYtMS4xLTAuOC0xLjgtMC41QzI3LjEsMC44LDI3LDEs'@;
put 'MjYuOSwxLjF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzEsMzFINWExLDEsMCwwLDAsMCwySDMxYTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNOC44MSwxNSwxNyw2LjgzVjI3LjQ4YTEsMSwwLDAsMCwyLDBWNi44M0wyNy4xOSwxNWExLDEsMCwwLDAsMS40MS0xLjQxTDE4LDMsNy4zOSwxMy42MUExLDEsMCwxLDAsOC44MSwx'@;
put 'NVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLFQuQ2xyU2hhcGVMb2NrPSgwLHYuY2xySWNvblNWRykoJzxwYXRo'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTguMDksMjAuNTlBMi40MSwyLjQxLDAsMCwwLDE3LDI1LjE0VjI4aDJWMjUuMjNhMi40MSwyLjQxLDAsMCwwLS45MS00LjY0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYsMTVWMTAuNzJhOC4yLDguMiwwLDAsMC04LTguMzYsOC4yLDguMiwwLDAsMC04LDguMzZWMTVIN1YzMmEyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMTVaTTEyLDEwLjcyYTYuMiw2LjIsMCwwLDEsNi02LjM2LDYuMiw2LjIs'@;
put 'MCwwLDEsNiw2LjM2VjE1SDEyWk05LDMyVjE3SDI3VjMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNiwxNVYxMC43MmE4LjIsOC4yLDAsMCwwLTgtOC4zNiw4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUg3VjMy'@;
put 'YTIsMiwwLDAsMCwyLDJIMjdhMiwyLDAsMCwwLDItMlYxNVpNMTksMjUuMjNWMjhIMTdWMjUuMTRhMi40LDIuNCwwLDEsMSwyLC4wOVpNMjQsMTVIMTJWMTAuNzJhNi4yLDYuMiwwLDAsMSw2LTYuMzYsNi4yLDYuMiwwLDAsMSw2LDYuMzZaIi8+JyksVC5DbHJTaGFwZVVubG9jaz0oMCx2LmNs'@;
put 'ckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTEyLDI1LjE0VjI4aDJWMjUuMjNhMi40MiwyLjQyLDAsMSwwLTItLjA5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0yIiBkPSJNMjYsMmE4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUgyVjMyYTIsMiwwLDAsMCwyLDJIMjJhMiwyLDAsMCwwLDItMlYxNUgyMFYxMC4zNkE2LjIsNi4yLDAsMCwxLDI2LDRhNi4yLDYuMiwwLDAsMSw2LDYuMzZ2Ni44M2ExLDEsMCwwLDAsMiwwVjEwLjM2QTguMiw4LjIs'@;
put 'MCwwLDAsMjYsMlpNMjIsMTdWMzJINFYxN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjYsMmE4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUgyVjMyYTIsMiwwLDAsMCwyLDJIMjJhMiwyLDAsMCwwLDItMlYxNUgy'@;
put 'MFYxMC4zNkE2LjIsNi4yLDAsMCwxLDI2LDRhNi4yLDYuMiwwLDAsMSw2LDYuMzZ2Ni44M2ExLDEsMCwwLDAsMiwwVjEwLjM2QTguMiw4LjIsMCwwLDAsMjYsMlpNMTQsMjUuMjNWMjhIMTJWMjUuMTRhMi40LDIuNCwwLDEsMSwyLC4wOVoiLz4nKSxULkNsclNoYXBlVXNlcnM9KDAsdi5jbHJJ'@;
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 'YWRnZWQgY2xyLWktc29saWQtcGF0aC03LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxULkNsclNoYXBlUG9wT3V0PSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcsMzNI'@;
put 'NWEyLDIsMCwwLDEtMi0yVjlBMiwyLDAsMCwxLDUsN0gxNVY5SDVWMzFIMjdWMjFoMlYzMUEyLDIsMCwwLDEsMjcsMzNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwzYTEsMSwwLDAsMCwwLDJIMjku'@;
put 'NTlMMTUuNzQsMTguODVhMSwxLDAsMSwwLDEuNDEsMS40MUwzMSw2LjQxVjE4YTEsMSwwLDAsMCwyLDBWM1oiLz4nKSxULkNsclNoYXBlRmlsdGVyPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMsNEgzQTEs'@;
put 'MSwwLDAsMCwyLDVWNi42N2ExLjc5LDEuNzksMCwwLDAsLjUzLDEuMjdMMTQsMTkuNTh2MTAuMmwyLC43NlYxOWExLDEsMCwwLDAtLjI5LS43MUw0LDYuNTlWNkgzMnYuNjFMMjAuMzMsMTguMjlBMSwxLDAsMCwwLDIwLDE5bDAsMTMuMjFMMjIsMzNWMTkuNUwzMy40Nyw4QTEuODEsMS44MSww'@;
put 'LDAsMCwzNCw2LjdWNUExLDEsMCwwLDAsMzMsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjIsMzNWMTkuNUwzMy40Nyw4QTEuODEsMS44MSwwLDAsMCwzNCw2LjdWNWExLDEsMCwwLDAtMS0xSDNBMSwxLDAs'@;
put 'MCwwLDIsNVY2LjY3YTEuNzksMS43OSwwLDAsMCwuNTMsMS4yN0wxNCwxOS41OHYxMC4yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy40OCw0aC0zMUEuNTIuNTIsMCwwLDAsMiw0LjUyVjYuMjRhMS4zMywxLjMzLDAsMCwwLC4zOS45NWwxMiwxMnYxMGw3LjI1LDMuNjFWMTku'@;
put 'MTdsMTItMTJBMS4zNSwxLjM1LDAsMCwwLDM0LDYuMjZWNC41MkEuNTIuNTIsMCwwLDAsMzMuNDgsNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksVC5DbHJTaGFwZVBpbj0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLDE2LjU5YTEsMSwwLDAsMS0uNzEtLjI5TDE5LjcsMy43MWExLDEsMCwwLDEsMS40MS0xLjQxTDMzLjcxLDE0Ljg5QTEsMSwwLDAsMSwzMywxNi41OVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI4LjUyLDE1LjU2bC0xLjQxLTEuNDEtNy4yLDcuMmExLDEsMCwwLDAtLjI1LDEsOSw5LDAsMCwxLTEuNTMsOC4wOUw1LjU4LDE3Ljg3YTksOSwwLDAsMSw4LjA5LTEuNTMsMSwxLDAsMCwwLDEtLjI1bDcuMi03LjJMMjAuNDQsNy40OGwtNi43OSw2Ljc5'@;
put 'QTEwLjk0LDEwLjk0LDAsMCwwLDMuNDEsMTcuMTFhMSwxLDAsMCwwLDAsMS40Mmw2LjMzLDYuMzNMMi4yOSwzMi4yOWExLDEsMCwxLDAsMS40MSwxLjQxbDcuNDQtNy40NCw2LjMzLDYuMzNhMSwxLDAsMCwwLC43MS4yOWgwYTEsMSwwLDAsMCwuNzEtLjMsMTEsMTEsMCwwLDAsMi44NC0xMC4y'@;
put 'NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMsMTYuNzFhMSwxLDAsMCwxLS43MS0uMjlMMTkuNywzLjgyYTEsMSwwLDAsMSwxLjQxLTEuNDFMMzMuNzEsMTVBMSwxLDAsMCwxLDMzLDE2LjcxWiIvPlxuICAg'@;
put 'ICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yMC40NCw3LjU5bC02Ljc5LDYuNzlBMTAuOTQsMTAuOTQsMCwwLDAsMy40MSwxNy4yMmExLDEsMCwwLDAsMCwxLjQyTDkuNzMsMjUsMi4yOSwzMi40MWExLDEsMCwxLDAsMS40MSwx'@;
put 'LjQxbDcuNDQtNy40NCw2LjMzLDYuMzNhMSwxLDAsMCwwLC43MS4yOWgwYTEsMSwwLDAsMCwuNzEtLjMsMTEsMTEsMCwwLDAsMi44NC0xMC4yNGw2Ljc5LTYuNzlaIi8+JyksVC5DbHJTaGFwZUZpbGU9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
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 'MTEuNWMwLjcsMCwxLjMtMC41LDEuMy0xLjJjMC0wLjMtMC4xLTAuNS0wLjItMC44bC01LjctOS45Yy0wLjQtMC42LTEuMS0wLjgtMS44LTAuNUMyNy4xLDAuOCwyNywxLDI2LjksMS4xeiIvPicpLFQuQ2xyU2hhcGVQbHVzPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsMTdIMTlWNmExLDEsMCwxLDAtMiwwVjE3SDZhMSwxLDAsMCwwLTEsMSwuOTEuOTEsMCwwLDAsMSwuOTRIMTdWMzBhMSwxLDAsMSwwLDIsMFYxOUgzMGExLDEsMCwwLDAsMS0xQTEsMSwwLDAsMCwzMCwxN1oiLz4nKSxULkNsclNo'@;
put 'YXBlTWludXM9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LDE3SDEwYTEsMSwwLDAsMCwwLDJIMjZhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLFQuQ2xyU2hhcGVNaW51c0NpcmNsZT0oMCx2LmNsckljb25TVkcp'@;
put 'KCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN'@;
put 'MjQsMTdIMTJhMSwxLDAsMCwwLDAsMkgyNGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm02LDE3LjVIMTJhMS41'@;
put 'LDEuNSwwLDAsMSwwLTNIMjRhMS41LDEuNSwwLDAsMSwwLDNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLFQuQ2xyU2hhcGVQbHVzQ2lyY2xlPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi4xNywxN0gxOVY5LjgzYTEsMSwwLDAsMC0yLDBWMTdI'@;
put 'OS44M2ExLDEsMCwwLDAsMCwySDE3djcuMTdhMSwxLDAsMCwwLDIsMFYxOWg3LjE3YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCww'@;
put 'LDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQsMThBMTYsMTYsMCwxLDEsMTgsMiwxNiwxNiwwLDAsMSwzNCwxOFptLTgu'@;
put 'NDEtMS41SDE5LjVWMTAuNDFhMS41LDEuNSwwLDAsMC0zLDBWMTYuNUgxMC40MWExLjUsMS41LDAsMCwwLDAsM0gxNi41djYuMDlhMS41LDEuNSwwLDAsMCwzLDBWMTkuNWg2LjA5YTEuNSwxLjUsMCwwLDAsMC0zWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicp'@;
put 'LFQuQ2xyU2hhcGVCYW49KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTQsMThBMTMuOTMsMTMuOTMsMCwwLDEsNy40Myw4Ljg1TDI3LjE1'@;
put 'LDI4LjU3QTE0LDE0LDAsMCwxLDQsMThabTI0LjU3LDkuMTVMOC44NSw3LjQzQTE0LDE0LDAsMCwxLDI4LjU3LDI3LjE1WiIvPicpLFQuQ2xyU2hhcGVUaW1lc0NpcmNsZT0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg'@;
put 'ZD0iTTE5LjYxLDE4bDQuODYtNC44NmExLDEsMCwwLDAtMS40MS0xLjQxTDE4LjIsMTYuNTRsLTQuODktNC44OWExLDEsMCwwLDAtMS40MSwxLjQxTDE2Ljc4LDE4LDEyLDIyLjcyYTEsMSwwLDEsMCwxLjQxLDEuNDFsNC43Ny00Ljc3LDQuNzQsNC43NGExLDEsMCwwLDAsMS40MS0xLjQxWiIv'@;
put 'PlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAg'@;
put 'ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm04LDIyLjFhMS40LDEuNCwwLDAsMS0yLDJsLTYtNkwxMiwyNi4xMmExLjQsMS40LDAsMSwxLTItMkwxNiwxOC4w'@;
put 'OCw5LjgzLDExLjg2YTEuNCwxLjQsMCwxLDEsMi0yTDE4LDE2LjFsNi4xNy02LjE3YTEuNCwxLjQsMCwxLDEsMiwyTDIwLDE4LjA4WiIvPicpLFQuQ2xyU2hhcGVUcmFzaD0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg'@;
put 'ZD0iTTI3LjE0LDM0SDguODZBMi45MywyLjkzLDAsMCwxLDYsMzFWMTEuMjNIOFYzMWEuOTMuOTMsMCwwLDAsLjg2LDFIMjcuMTRBLjkzLjkzLDAsMCwwLDI4LDMxVjExLjIzaDJWMzFBMi45MywyLjkzLDAsMCwxLDI3LjE0LDM0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzAuNzgsOUg1QTEsMSwwLDAsMSw1LDdIMzAuNzhhMSwxLDAsMCwxLDAsMloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMjEiIHk9IjEz'@;
put 'IiB3aWR0aD0iMiIgaGVpZ2h0PSIxNSIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxMyIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjE1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0yMyw1Ljg2SDIxLjFWNEgxNC45VjUuODZIMTNWNGEyLDIsMCwwLDEsMS45LTJoNi4yQTIsMiwwLDAsMSwyMyw0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEi'@;
put 'IGQ9Ik02LDlWMzFhMi45MywyLjkzLDAsMCwwLDIuODYsM0gyNy4wOUEyLjkzLDIuOTMsMCwwLDAsMzAsMzFWOVptOSwyMEgxM1YxNGgyWm04LDBIMjFWMTRoMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzAu'@;
put 'NzMsNUgyM1Y0QTIsMiwwLDAsMCwyMSwyaC02LjJBMiwyLDAsMCwwLDEzLDRWNUg1QTEsMSwwLDEsMCw1LDdIMzAuNzNhMSwxLDAsMCwwLDAtMloiLz4nKSxULkNsclNoYXBlVGFnPSgwLHYuY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjEwLjUyIiBjeT0iMTAuNTIiIHI9IjEuNDMiIGNsYXNz'@;
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 'LTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2LjMzIiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLFQuQ2xyU2hhcGVUYWdzPSgwLHYuY2xySWNvblNWRykoJzxw'@;
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+JyksVC5DbHJTaGFwZUhpc3Rvcnk9KDAs'@;
put 'di5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDkuODNhMSwxLDAsMCwwLTEsMXY4LjcybDUuOSw0QTEsMSwwLDAsMCwyNCwyMS44OGwtNS0zLjM5VjEwLjgzQTEsMSwwLDAsMCwxOCw5LjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAg'@;
put 'ICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LjA5LDE2LjA5LDAsMCwwLDQsMTAuMjZWNS4yYTEsMSwwLDAsMC0yLDBWMTRoOC44YTEsMSwwLDAsMCwwLTJINS4zNUExNCwxNCwwLDEsMSw4LjU4LDI4LjM1YTEsMSwwLDAsMC0xLjM1LDEuNDhBMTYsMTYsMCwxLDAsMTgsMloiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+JyksVC5DbHJTaGFwZUNsb2NrPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFz'@;
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 'LDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz4nKSxULkNsclNoYXBlQWxhcm1DbG9jaz0oMCx2LmNsckljb25TVkcpKCc8'@;
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 'LjQ5LDIxLjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPicpLFQuQ2xyU2hhcGVDaXJjbGVBcnJvdz0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMy'@;
put 'LDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4wOCw4LjI2bC03LjYxLDcuNjFhMSwxLDAsMSwwLDEuNDEsMS40MUwxNywxMi4xOHYxNWExLDEsMCwwLDAsMiwwVjEybDUu'@;
put 'MjgsNS4yOGExLDEsMCwxLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTgsMTUuNTdhMS40MywxLjQzLDAsMCwxLTIs'@;
put 'MEwxOS40LDEzVjI3LjE0YTEuNCwxLjQsMCwwLDEtMi44LDB2LTE0bC00LjQzLDQuNDNhMS40LDEuNCwwLDAsMS0yLTJMMTguMDgsNy43LDI2LDE1LjU5QTEuNCwxLjQsMCwwLDEsMjYsMTcuNTdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+JyksVC5DbHJTaGFw'@;
put 'ZUNoaWxkQXJyb3c9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LjgyLDE1LjhhMSwxLDAsMCwwLTEuNDEsMCwxLDEsMCwwLDAsMCwxLjQxTDI3LjIsMjFIOVYzLjc4YTEsMSwwLDEsMC0yLDBWMjFhMiwyLDAsMCwwLDIsMkgyNy4xNWwtMy43NCwzLjc1YTEsMSwwLDAsMCwwLDEuNDEs'@;
put 'MSwxLDAsMCwwLC43LjI5LDEsMSwwLDAsMCwuNzEtLjI5TDMxLDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksVC5DbHJTaGFwZUNvcHk9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LjUsN2gtMTlBMS41LDEuNSwwLDAsMCw5LDguNXYy'@;
put 'NEExLjUsMS41LDAsMCwwLDEwLjUsMzRoMTlBMS41LDEuNSwwLDAsMCwzMSwzMi41VjguNUExLjUsMS41LDAsMCwwLDI5LjUsN1pNMjksMzJIMTFWOUgyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMy41'@;
put 'QTEuNSwxLjUsMCwwLDAsMjQuNSwySDUuNUExLjUsMS41LDAsMCwwLDQsMy41djI0QTEuNSwxLjUsMCwwLDAsNS41LDI5SDZWNEgyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcsMy41NkExLjU2LDEuNTYs'@;
put 'MCwwLDAsMjUuNDMsMkg1LjU3QTEuNTYsMS41NiwwLDAsMCw0LDMuNTZWMjguNDRBMS41NiwxLjU2LDAsMCwwLDUuNTcsMzBoLjUyVjQuMDdIMjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSI2IiB3aWR0aD0i'@;
put 'MjMiIGhlaWdodD0iMjgiIHJ4PSIxLjUiIHJ5PSIxLjUiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSxULkNsclNoYXBlSGVscD0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMw'@;
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 'OS43OVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxULkNsclNoYXBlTG9naW49KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI4LDRIMTJhMiwyLDAsMCwwLTIsMkgyOFYzMEgxMlYyMC4ySDEwVjMwYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDIt'@;
put 'MlY2QTIsMiwwLDAsMCwyOCw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuMTIsMTguNDZhMSwxLDAsMSwwLDEuNDEsMS40MWw1Ljc5LTUuNzlMMTYuNTQsOC4yOWExLDEsMCwwLDAtMS40MSwxLjQxTDE4'@;
put 'LjUsMTNINGExLDEsMCwwLDAtMSwxLDEsMSwwLDAsMCwxLDFIMTguNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDRIMTJhMiwyLDAsMCwwLTIsMnY3aDguNUwxNS4xMiw5LjcxYTEsMSwwLDAsMSwxLjQx'@;
put 'LTEuNDFsNS43OSw1Ljc5LTUuNzksNS43OWExLDEsMCwwLDEtMS40MS0xLjQxTDE4LjUsMTVIMTBWMzBhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDI4LDRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAg'@;
put 'PHBhdGggZD0iTTEwLDEzSDRhMSwxLDAsMCwwLTEsMSwxLDEsMCwwLDAsMSwxaDZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLFQuQ2xyU2hhcGVMb2dvdXQ9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTcsNkgyM3Y5LjhoMlY2YTIsMiwwLDAsMC0y'@;
put 'LTJIN0EyLDIsMCwwLDAsNSw2VjMwYTIsMiwwLDAsMCwyLDJIMjNhMiwyLDAsMCwwLDItMkg3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4xNiwxNy4yOGExLDEsMCwwLDAtMS40MSwxLjQxTDMwLjEzLDIy'@;
put 'SDE1LjYzYTEsMSwwLDAsMC0xLDEsMSwxLDAsMCwwLDEsMWgxNC41bC0zLjM4LDMuNDZhMSwxLDAsMSwwLDEuNDEsMS40MUwzNCwyMy4wN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMsNEg3QTIsMiwwLDAs'@;
put 'MCw1LDZWMzBhMiwyLDAsMCwwLDIsMkgyM2EyLDIsMCwwLDAsMi0yVjI0SDE1LjYzYTEsMSwwLDAsMS0xLTEsMSwxLDAsMCwxLDEtMUgyNVY2QTIsMiwwLDAsMCwyMyw0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4'@;
put 'LjE2LDE3LjI4YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzAuMTMsMjJIMjV2Mmg1LjEzbC0zLjM4LDMuNDZhMSwxLDAsMSwwLDEuNDEsMS40MUwzNCwyMy4wN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSxULkNsclNoYXBlUHJpbnRlcj0oMCx2LmNsckljb25T'@;
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 'MzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLFQuQ2xyU2hhcGVXb3JsZD0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYuNTQsMThhMTkuMzgsMTkuMzgsMCwwLDAtLjQzLTRo'@;
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 'c29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLFQuQ2xyU2hhcGVTbGlkZXI9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEyLDEyLjM3QTQsNCwwLDAsMCw5LDguNDhWNUExLDEsMCwxLDAsNyw1VjguNDhhNCw0LDAsMCwwLDAsNy43'@;
put 'OFYzMWExLDEsMCwxLDAsMiwwVjE2LjI2QTQsNCwwLDAsMCwxMiwxMi4zN1ptLTQsMmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSw4LDE0LjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDE1LjgzYTQsNCww'@;
put 'LDAsMC0zLTMuODlWNWExLDEsMCwxLDAtMiwwdjYuOTRhNCw0LDAsMCwwLDAsNy43OFYzMWExLDEsMCwxLDAsMiwwVjE5LjcyQTQsNCwwLDAsMCwzMiwxNS44M1ptLTQsMmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSwyOCwxNy44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsMjQuNWE0LDQsMCwwLDAtMy0zLjg5VjVhMSwxLDAsMSwwLTIsMFYyMC42MWE0LDQsMCwwLDAsMCw3Ljc4VjMxYTEsMSwwLDEsMCwyLDBWMjguMzlBNCw0LDAsMCwwLDIyLDI0LjVabS00LDJhMiwyLDAsMSwxLDItMkEyLDIs'@;
put 'MCwwLDEsMTgsMjYuNTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTksOS4yOVY1QTEsMSwwLDEsMCw3LDVWOS4zYTMuMjIsMy4yMiwwLDAsMCwwLDYuMTFWMzFhMSwxLDAsMSwwLDIsMFYxNS40M0EzLjIyLDMu'@;
put 'MjIsMCwwLDAsOSw5LjI5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDIxLjQ1VjVhMSwxLDAsMSwwLTIsMFYyMS40N2EzLjIyLDMuMjIsMCwwLDAsMCw2LjExVjMxYTEsMSwwLDEsMCwyLDBWMjcuNmEzLjIyLDMu'@;
put 'MjIsMCwwLDAsMC02LjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LDEyLjc1VjVhMSwxLDAsMSwwLTIsMHY3Ljc2YTMuMjIsMy4yMiwwLDAsMCwwLDYuMTFWMzFhMSwxLDAsMSwwLDIsMFYxOC44OWEzLjIyLDMu'@;
put 'MjIsMCwwLDAsMC02LjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPicpLFQuQ2xyU2hhcGVDbGlwYm9hcmQ9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LjI5LDVIMjdWN2gyVjMySDdWN0g5VjVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5VjMyLjMx'@;
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 'VC5DbHJTaGFwZUZpcmV3YWxsPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNNCw4SDMydjUuMDhIMjMuOHYtNEgyMnY0SDE0di00SDEydjRINFptMCw3SDMy'@;
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 'bGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLFQuQ2xyU2hhcGVMaXN0PSgwLHYuY2xySWNvblNWRykoJzxyZWN0IHg9IjE1IiB5PSI4IiB3aWR0aD0iOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAg'@;
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 'LWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLFQuQ2xyU2hhcGVSZWRvPSgwLHYuY2xySWNvblNWRykoJzxwYXRo'@;
put 'IGQ9Ik0yNCw0LjIyYTEsMSwwLDAsMC0xLjQxLDEuNDJsNS41Niw1LjQ5aC0xM0ExMSwxMSwwLDAsMCwxMC4wNywzMiwxLDEsMCwwLDAsMTEsMzAuMThhOSw5LDAsMCwxLTUtOCw5LjA4LDkuMDgsMCwwLDEsOS4xMy05aDEzbC01LjU0LDUuNDhBMSwxLDAsMCwwLDI0LDIwbDgtNy45MVoiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLFQuQ2xyU2hhcGVVbmRvPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMC44NywxMS4xNGgtMTNsNS41Ni01LjQ5QTEsMSwwLDAsMCwxMiw0LjIyTDQsMTIuMTMsMTIsMjBhMSwxLDAsMCwwLDEuNDEtMS40'@;
put 'Mkw3Ljg2LDEzLjE0aDEzYTkuMDgsOS4wOCwwLDAsMSw5LjEzLDksOSw5LDAsMCwxLTUsOEExLDEsMCwwLDAsMjUuOTMsMzJhMTEsMTEsMCwwLDAtNS4wNi0yMC44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLFQuQ2xyU2hhcGVTY3JvbGw9KDAs'@;
put 'di5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0LDExLjEyVjYuNThhNC41LDQuNSwwLDAsMC00LjUtNC41aC0xNkE0LjUsNC41LDAsMCwwLDksNi41OHYyM2EyLjUsMi41LDAsMSwxLTUsMFYyNkg3LjE5VjI0SDJ2NS41QTQuNSw0LjUsMCwwLDAsNi41LDM0SDI1LjU4YTQuNSw0LjUsMCwwLDAs'@;
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 'IGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxULkNsclNoYXBlRmlsZVNldHRpbmdzPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy44MywyMy40M2ExLjE2LDEu'@;
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+JyksVC5DbHJTaGFwZVR3b1dheUFycm93'@;
put 'cz0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMuNDMsMTYuODNBMSwxLDAsMCwwLDIyLDE4LjI0TDI1LjcyLDIySDcuODNhMSwxLDAsMCwwLDAsMkgyNS43MkwyMiwyNy43YTEsMSwwLDEsMCwxLjQyLDEuNDFMMjkuNTMsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy4yNCwxOC40NWExLDEsMCwwLDAsLjcxLTEuNzFMMTAuMjQsMTNIMjguMTJhMSwxLDAsMCwwLDAtMkgxMC4yNGwzLjcxLTMuNzNhMSwxLDAsMCwwLTEuNDItMS40MUw2LjQyLDEybDYuMTEsNi4xNEExLDEsMCwwLDAsMTMu'@;
put 'MjQsMTguNDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxULkNsclNoYXBlU3dpdGNoPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik01LjcxLDE0SDIwLjkyVjEySDUuNzFMOS40Miw4LjI3QTEsMSwwLDEsMCw4LDYuODZMMS44OSwxMyw4LDE5'@;
put 'LjE0YTEsMSwwLDEsMCwxLjQyLTEuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjEyIiB3aWR0aD0iMyIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'MiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI4IiB5PSIxMiIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcuOTIsMTcuODZhMSwxLDAsMCwwLTEuNDIsMS40MUwzMC4y'@;
put 'MSwyM0gxNXYySDMwLjIxTDI2LjUsMjguNzRhMSwxLDAsMSwwLDEuNDIsMS40TDM0LDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMCIgeT0iMjMiIHdpZHRoPSIzIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNiIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLFQuQ2xyU2hhcGVUb29scz0oMCx2LmNsckljb25T'@;
put 'VkcpKCc8cGF0aCBkPSJNMjAsMTRIMTZhMSwxLDAsMCwwLTEsMXY2YTEsMSwwLDAsMCwxLDFoNGExLDEsMCwwLDAsMS0xVjE1QTEsMSwwLDAsMCwyMCwxNFptLS40LDYuNkgxNi40VjE1LjRoMy4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAg'@;
put 'ICAgICAgICA8cGF0aCBkPSJNMzMuNzEsMTIuMzgsMjkuNjIsOC4yOUExLDEsMCwwLDAsMjguOTIsOGgtNVY2LjA1QTIsMiwwLDAsMCwyMiw0SDEzLjg0QTEuOTIsMS45MiwwLDAsMCwxMiw2LjA1VjhINy4wOGExLDEsMCwwLDAtLjcxLjI5TDIuMjksMTIuMzhhMSwxLDAsMCwwLS4yOS43MVYy'@;
put 'OGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTMuMDhBMSwxLDAsMCwwLDMzLjcxLDEyLjM4Wk0xNCw2aDhWOEgxNFpNMzIsMTdIMjJ2MS45M0gzMlYyOEg0VjE4LjkzSDE0VjE3SDRWMTMuNUw3LjUsMTBoMjFMMzIsMTMuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYuNCIgeT0iMTUuNCIgd2lkdGg9IjMuMiIgaGVpZ2h0PSI1LjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEsMjFhMSwxLDAsMCwxLTEsMUgx'@;
put 'NmExLDEsMCwwLDEtMS0xVjE5SDJ2OWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTlIMjFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjcxLDEyLjM4LDI5LjYyLDguMjlBMSwxLDAsMCwwLDI4Ljky'@;
put 'LDhoLTVWNi4wNUEyLDIsMCwwLDAsMjIsNEgxMy44NEExLjkyLDEuOTIsMCwwLDAsMTIsNi4wNVY4SDcuMDhhMSwxLDAsMCwwLS43MS4yOUwyLjI5LDEyLjM4YTEsMSwwLDAsMC0uMjkuNzFWMTdIMTVWMTVhMSwxLDAsMCwxLDEtMWg0YTEsMSwwLDAsMSwxLDF2MkgzNFYxMy4wOEExLDEsMCww'@;
put 'LDAsMzMuNzEsMTIuMzhaTTIyLDhIMTRWNmg4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxULkNsclNoYXBlV2luZG93Q2xvc2U9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE5LjQxLDE4bDcuMjktNy4yOWExLDEsMCwwLDAtMS40MS0xLjQxTDE4'@;
put 'LDE2LjU5LDEwLjcxLDkuMjlhMSwxLDAsMCwwLTEuNDEsMS40MUwxNi41OSwxOCw5LjI5LDI1LjI5YTEsMSwwLDEsMCwxLjQxLDEuNDFMMTgsMTkuNDFsNy4yOSw3LjI5YTEsMSwwLDAsMCwxLjQxLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4n'@;
put 'KSxULkNsclNoYXBlV2luZG93TWF4PSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy44OSw5aC0yMGEyLDIsMCwwLDAtMiwyVjI1YTIsMiwwLDAsMCwyLDJoMjBhMiwyLDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMjcuODksOVptLTIwLDE2VjExaDIwVjI1WiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksVC5DbHJTaGFwZVdpbmRvd01pbj0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcsMjdIOWExLDEsMCwwLDEsMC0ySDI3YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg'@;
put 'Lz4nKSxULkNsclNoYXBlV2luZG93UmVzdG9yZT0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjgsOEgxNGEyLDIsMCwwLDAtMiwydjJoMlYxMEgyOFYyMEgyNnYyaDJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMjgsOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLDE0SDhhMiwyLDAsMCwwLTIsMlYyNmEyLDIsMCwwLDAsMiwySDIyYTIsMiwwLDAsMCwyLTJWMTZBMiwyLDAsMCwwLDIyLDE0Wk04LDI2VjE2SDIyVjI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTIiIC8+JyksVC5DbHJTaGFwZVpvb21Jbj0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTYsNEExMiwxMiwwLDEsMCwyOCwxNiwxMiwxMiwwLDAsMCwxNiw0Wm0wLDIxLjkxQTEwLDEwLDAsMSwxLDI2LDE2LDEwLDEwLDAsMCwxLDE2LDI1LjkxWiIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNzEsMjkuNjlsLTUuMTctNS4xN0ExMy42OCwxMy42OCwwLDAsMSwyNS4xNSwyNmw1LjE1LDUuMTVhMSwxLDAsMCwwLDEuNDEtMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIxLDE1SDE3VjExYTEsMSwwLDAsMC0yLDB2NEgxMWExLDEsMCwwLDAsMCwyaDR2NGExLDEsMCwwLDAsMiwwVjE3aDRhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAv'@;
put 'PicpLFQuQ2xyU2hhcGVab29tT3V0PSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNiw0QTEyLDEyLDAsMSwwLDI4LDE2LDEyLDEyLDAsMCwwLDE2LDRabTAsMjEuOTFBMTAsMTAsMCwxLDEsMjYsMTYsMTAsMTAsMCwwLDEsMTYsMjUuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS43MSwyOS42OWwtNS4xNy01LjE3QTEzLjY4LDEzLjY4LDAsMCwxLDI1LjE1LDI2bDUuMTUsNS4xNWExLDEsMCwwLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAsMTVIMTJhMSwxLDAsMCwwLDAsMmg4YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxULkNsclNoYXBlS2V5PSgwLHYuY2xySWNvblNWRykoJzxyZWN0IHg9IjYuMzMi'@;
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+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxULkNsclNoYXBlTGlicmFyeT0oMCx2LmNsckljb25T'@;
put 'VkcpKCc8cGF0aCBkPSJNMzMuNDgsMjkuNjMsMjYuNzQsMTEuODJhMiwyLDAsMCwwLTIuNTgtMS4xNkwyMSwxMS44NVY4LjkyQTEuOTIsMS45MiwwLDAsMCwxOS4wOCw3SDE0VjQuOTJBMS45MiwxLjkyLDAsMCwwLDEyLjA4LDNINUEyLDIsMCwwLDAsMyw1VjMyYTEsMSwwLDAsMCwxLDFIMjBh'@;
put 'MSwxLDAsMCwwLDEtMVYxOS4yN2w1LDEzLjIxYTEsMSwwLDAsMCwxLjI5LjU4bDUuNjEtMi4xNGExLDEsMCwwLDAsLjU4LTEuMjlaTTEyLDguODNWMzFINVY1aDdaTTE5LDMxSDE0VjloNVptOC41MS0uMjVMMjEuMTMsMTMuOTJsMy43NC0xLjQyLDYuMzksMTYuODNaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi43NSwzSDUuMjVBMS4xNSwxLjE1LDAsMCwwLDQsNFYzM0gxNFY0QTEuMTUsMS4xNSwwLDAsMCwxMi43NSwzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5c'@;
put 'biAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43NywzMS4wOWwtNi45NC0xOC4zYTEsMSwwLDAsMC0xLjI5LS41OEwyMiwxMy41OVY5YTEsMSwwLDAsMC0xLTFIMTZWMzNoNlYxNC42OUwyOC45MywzM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksVC5DbHJT'@;
put 'aGFwZUJvbHQ9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEwLjUyLDM0aC0zYTEsMSwwLDAsMS0uODgtMS40NEwxMi41NSwyMUg2YTEsMSwwLDAsMS0uODUtMS41NGwxMC42OC0xN0ExLDEsMCwwLDEsMTYuNjQsMkgzMC4wN2ExLDEsMCwwLDEsLjc3LDEuNjlMMjEuNzgsMTRoNS4zOGEx'@;
put 'LDEsMCwwLDEsLjczLDEuNjZsLTE2LjYzLDE4QTEsMSwwLDAsMSwxMC41MiwzNFpNOS4xOCwzMmguOTFMMjQuODYsMTZIMTkuNTlhMSwxLDAsMCwxLS43Ny0xLjY5TDI3Ljg4LDRIMTcuMTlMNy43NywxOUgxNC4yYTEsMSwwLDAsMSwuODgsMS40NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjgsMi4yOUEuNDkuNDksMCwwLDAsMzAuMzUsMkgxNi40MmEuNS41LDAsMCwwLS40Mi4yM2wtMTAuNzEsMTdBLjQ5LjQ5LDAsMCwwLDUuNywyMGg3LjY3TDYuNiwzMy4yNWEuNTIuNTIsMCwwLDAsLjQ2Ljc1'@;
put 'aDNhLjUuNSwwLDAsMCwuMzctLjE2TDI4LDE0Ljg1YS41LjUsMCwwLDAtLjM3LS44NUgyMC44OUwzMC43MiwyLjgyQS40OS40OSwwLDAsMCwzMC44LDIuMjlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLFQuQ2xyU2hhcGVXcmVuY2g9KDAsdi5jbHJJY29u'@;
put 'U1ZHKSgnPHBhdGggZD0iTTMzLjE4LDI2LjExLDIwLjM1LDEzLjI4QTkuMjgsOS4yOCwwLDAsMCw3LjU0LDIuNzlsLTEuMzQuNTksNS4zOCw1LjM4TDguNzYsMTEuNTksMy4zOCw2LjIxLDIuNzksNy41NEE5LjI3LDkuMjcsMCwwLDAsMTMuMjgsMjAuMzVMMjYuMTEsMzMuMThhMiwyLDAsMCww'@;
put 'LDIuODMsMGw0LjI0LTQuMjRBMiwyLDAsMCwwLDMzLjE4LDI2LjExWm0tNS42Niw1LjY2TDEzLjg4LDE4LjEybC0uNTcuMTZhNy4yNyw3LjI3LDAsMCwxLTkuMzEtNyw3LjIsNy4yLDAsMCwxLC4xNS0xLjQ4bDQuNjEsNC42MSw1LjY2LTUuNjZMOS44MSw0LjE1YTcuMjcsNy4yNywwLDAsMSw4'@;
put 'LjQ3LDkuMTZsLS4xNi41N0wzMS43NywyNy41M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjcuMTMiIGN5PSIyNy4wOSIgcj0iMS4zIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTEuMjEgMjcuMTIpIHJv'@;
put 'dGF0ZSgtNDUpIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43MywyNy43MiwxOS42NywxMy42NmE4Ljc5LDguNzksMCwwLDAtMTItMTAuNUwxMyw4LjUzLDguNTMsMTMsMy4xNiw3LjY3YTguNzksOC43OSww'@;
put 'LDAsMCwxMC41LDEyTDI3LjcyLDMzLjczYTEuMDcsMS4wNywwLDAsMCwxLjUsMGw0LjUxLTQuNTFBMS4wNywxLjA3LDAsMCwwLDMzLjczLDI3LjcyWk0yOSwyOWExLjM4LDEuMzgsMCwxLDEsMC0yQTEuMzgsMS4zOCwwLDAsMSwyOSwyOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp'@;
put 'ZC1wYXRoLTEiIC8+JyksVC5DbHJTaGFwZUJ1bGxzZXllPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyYTE1LjkyLDE1LjkyLDAsMCwwLTQuMjUuNTlsLjc3LDEuODZhMTQuMDcsMTQuMDcsMCwxLDEtMTAsMTBsLTEuODYtLjc4QTE2LDE2LDAsMSwwLDE4LDJaIiBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik03LjQ1LDE1LjdhMTAuODEsMTAuODEsMCwxLDAsOC4zLTguMjZMMTYuMzcsOUE5LjI0LDkuMjQsMCwxLDEsOSwxNi4zMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIyLjA5YTQuMDgsNC4wOCwwLDAsMS00LTMuNjhsLTEuNjMtLjY4YzAsLjA5LDAsLjE4LDAsLjI3QTUuNjksNS42OSwwLDEsMCwxOCwxMi4zMWgtLjI0TDE4LjQzLDE0QTQuMDcsNC4wNywwLDAsMSwxOCwyMi4wOVoiIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTguMiwxMy4zNGEuNS41LDAsMCwwLC4zNS4xNUgxMi4ybDUuMzcsNS4zN0ExLDEsMCwwLDAsMTksMTcuNDRMMTMuNTMsMTJWOC41MWEuNS41LDAsMCwwLS4xNS0uMzVMNy43OSwy'@;
put 'LjU3YS41LjUsMCwwLDAtLjg1LjM1djRIM2EuNS41LDAsMCwwLS4zNS44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDE4Ljg1YTEsMSwwLDAsMS0xLjQxLDBsLTMtM0E0LDQsMCwwLDAsMTMuOTEsMTgs'@;
put 'NC4wOSw0LjA5LDAsMSwwLDE4LDEzLjkxYTQsNCwwLDAsMC0yLC41NWwzLDNBMSwxLDAsMCwxLDE5LDE4Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyYTE1LjkyLDE1LjkyLDAsMCwwLTQuMjUuNTlsMS42'@;
put 'LDMuODlBMTEuODksMTEuODksMCwxLDEsNi40OSwxNS4zTDIuNjEsMTMuNjhBMTYsMTYsMCwxLDAsMTgsMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOCwxNS45NEExMC4xNywxMC4xNywwLDEsMCwxNiw4bDEuNjks'@;
put 'NC4xMS4zMSwwQTUuODgsNS44OCwwLDEsMSwxMi4xMiwxOGMwLS4xMiwwLS4yMywwLS4zNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOC4yLDEzLjM0YS41LjUsMCwwLDAsLjM1LjE1SDEyLjJsMi4zNSwyLjM1QTQu'@;
put 'MDksNC4wOSwwLDAsMSwxNiwxNC40NkwxMy41MywxMlY4LjUxYS41LjUsMCwwLDAtLjE1LS4zNUw3Ljc5LDIuNTdhLjUuNSwwLDAsMC0uODUuMzV2NEgzYS41LjUsMCwwLDAtLjM1Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz4nKSxULkNsclNoYXBlVGFy'@;
put 'Z2V0PSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAg'@;
put 'ICAgICAgICAgIDxwYXRoIGQ9Ik0xOCw3LjJBMTAuOCwxMC44LDAsMSwwLDI4LjgsMTgsMTAuODEsMTAuODEsMCwwLDAsMTgsNy4yWm0wLDIwQTkuMiw5LjIsMCwxLDEsMjcuMiwxOCw5LjIxLDkuMjEsMCwwLDEsMTgsMjcuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEyLjMxQTUuNjksNS42OSwwLDEsMCwyMy42OSwxOCw1LjY5LDUuNjksMCwwLDAsMTgsMTIuMzFabTAsOS43N0E0LjA5LDQuMDksMCwxLDEsMjIuMDksMTgsNC4wOSw0LjA5LDAsMCwxLDE4LDIyLjA5WiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSI0LjA5IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDcuODNBMTAuMTcsMTAuMTcs'@;
put 'MCwxLDAsMjguMTcsMTgsMTAuMTgsMTAuMTgsMCwwLDAsMTgsNy44M1ptMCwxNkE1Ljg4LDUuODgsMCwxLDEsMjMuODgsMTgsNS44OCw1Ljg4LDAsMCwxLDE4LDIzLjg4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0x'@;
put 'OCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMjcuODNBMTEuODMsMTEuODMsMCwxLDEsMjkuODMsMTgsMTEuODUsMTEuODUsMCwwLDEsMTgsMjkuODNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPicpLFQuQ2xyU2hhcGVGbGFtZT0o'@;
put 'MCx2LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMywxNi42NmMtMS4xOS0yLjA5LTcuOTQtMTQuMTUtNy45NC0xNC4xNWExLDEsMCwwLDAtMS43NSwwbC02LDEwLjY0LTMtNS4yOGExLDEsMCwwLDAtMS43NSwwUzUuNCwxNy43OCw0LjQyLDE5LjVBOS4zLDkuMywwLDAsMCwzLDI0LjYxQzMs'@;
put 'MjkuNzIsNS44NiwzNCwxMS42NywzNEgyMi40OEMyOC4yOCwzNCwzMywyOSwzMywyMi43OEExMS4xMywxMS4xMywwLDAsMCwzMS4zLDE2LjY2Wk0yMi40OCwzMkgxMS43N0M4LjEzLDMyLDUsMjguNjYsNSwyNC42MWE3LjQzLDcuNDMsMCwwLDEsMS4xNi00LjEzYy43My0xLjI5LDQuMDUtNy4y'@;
put 'MSw1LjY1LTEwLjA3bDMsNS4yOGExLDEsMCwwLDAsLjg3LjUxaDBhMSwxLDAsMCwwLC44Ny0uNTFMMjIuNDksNWMxLjg2LDMuMzMsNi4xNSwxMSw3LjA3LDEyLjZBOS4yNCw5LjI0LDAsMCwxLDMxLDIyLjc4QzMxLDI3Ljg3LDI3LjE4LDMyLDIyLjQ4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUuNzUsMjEuNzNjLS42NS0xLjE2LTQuMzgtNy44MS00LjM4LTcuODFhLjguOCwwLDAsMC0xLjQsMGwtNC4yLDcuNDgtMS41OS0yLjQ5YS44LjgsMCwwLDAtMS4zNSwwTDkuMzcsMjQuMzVhNC4zNSw0'@;
put 'LjM1LDAsMCwwLS44MiwyLjYsNC40OSw0LjQ5LDAsMCwwLC41LDJIMTFhMywzLDAsMCwxLS44My0yLDIuNzgsMi43OCwwLDAsMSwuNTYtMS43M2wyLjgtNC4zOCwxLjY2LDIuNmEuOC44LDAsMCwwLDEuNDEtLjEyLDcuODIsNy44MiwwLDAsMSwuNC0uOEwyMC42NywxNmwzLjY5LDYuNTdhNC44'@;
put 'Myw0LjgzLDAsMCwxLC43NywyLjcxQTUsNSwwLDAsMSwyMy40NiwyOWgyLjEzYTYuNjgsNi42OCwwLDAsMCwxLjE0LTMuNzQsNi40NSw2LjQ1LDAsMCwwLTEtMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN'@;
put 'MzEuMywxNi4zMmMtMS4xOS0yLjA5LTcuOTQtMTQuMTUtNy45NC0xNC4xNWExLDEsMCwwLDAtMS43NSwwbC02LDEwLjY0LTMtNS4yOGExLDEsMCwwLDAtMS43NSwwUzUuNCwxNy40Myw0LjQyLDE5LjE1QTkuMyw5LjMsMCwwLDAsMywyNC4yNmMwLDUuMTEsMy44OCw5LjY1LDguNjcsOS43NEgy'@;
put 'Mi40OEMyOC4yOCwzNCwzMywyOC42MiwzMywyMi40NEExMS4xMywxMS4xMywwLDAsMCwzMS4zLDE2LjMyWk0yMS40OCwzMkgxNC41NEE0LjY4LDQuNjgsMCwwLDEsMTAsMjcuNDFhMy45MSwzLjkxLDAsMCwxLC43NS0yLjM0bDMuMzUtNS4yMWEuNS41LDAsMCwxLC44NCwwbDEuNzgsMi43Nyww'@;
put 'LS4wOGMuNjMtMS4xMSw0LjIzLTcuNDgsNC4yMy03LjQ4YS41LjUsMCwwLDEsLjg3LDBzMy42LDYuMzgsNC4yMyw3LjQ4QTUuODMsNS44MywwLDAsMSwyNywyNS43NkMyNywzMiwyMi4xLDMyLDIxLjQ4LDMyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxU'@;
put 'LkNsclNoYXBlSG91cmdsYXNzPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOSwzMkgyNlYyNC45MWE2LjY3LDYuNjcsMCwwLDAtMi42OS01LjMzbC0xLjI4LTFBNi4zNiw2LjM2LDAsMCwwLDIxLDE4aDBhNi4yOSw2LjI5LDAsMCwwLDEtLjYybDEuMjgtMUE2LjY3LDYuNjcsMCwwLDAs'@;
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+JyksVC5DbHJTaGFwZU5vQWNjZXNzPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0'@;
put 'LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy4xNSwxNUg4Ljg1QTEuODUsMS44NSwwLDAsMCw3'@;
put 'LDE2Ljg1djIuMjlBMS44NSwxLjg1LDAsMCwwLDguODUsMjFIMjcuMTVBMS44NSwxLjg1LDAsMCwwLDI5LDE5LjE1VjE2Ljg1QTEuODUsMS44NSwwLDAsMCwyNy4xNSwxNVptLjI1LDQuMTVhLjI1LjI1LDAsMCwxLS4yNS4yNUg4Ljg1YS4yNS4yNSwwLDAsMS0uMjUtLjI1VjE2Ljg1YS4yNS4y'@;
put 'NSwwLDAsMSwuMjUtLjI1SDI3LjE1YS4yNS4yNSwwLDAsMSwuMjUuMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTI5LjE1LDIwSDYu'@;
put 'ODVBLjg1Ljg1LDAsMCwxLDYsMTkuMTVWMTYuODVBLjg1Ljg1LDAsMCwxLDYuODUsMTZIMjkuMTVhLjg1Ljg1LDAsMCwxLC44NS44NXYyLjI5QS44NS44NSwwLDAsMSwyOS4xNSwyMFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksVC5DbHJTaGFwZU9yZ2Fu'@;
put 'aXphdGlvbj0oMCx2LmNsckljb25TVkcpKCc8cG9seWdvbiBwb2ludHM9IjkuOCAxOC44IDI2LjIgMTguOCAyNi4yIDIxLjg4IDI3LjggMjEuODggMjcuOCAxNy4yIDE4LjggMTcuMiAxOC44IDE0IDE3LjIgMTQgMTcuMiAxNy4yIDguMiAxNy4yIDguMiAyMS44OCA5LjggMjEuODggOS44IDE4'@;
put 'LjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LDIzSDRhMiwyLDAsMCwwLTIsMnY2YTIsMiwwLDAsMCwyLDJIMTRhMiwyLDAsMCwwLDItMlYyNUEyLDIsMCwwLDAsMTQsMjNaTTQsMzFWMjVIMTR2NloiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDIzSDIyYTIsMiwwLDAsMC0yLDJ2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjVBMiwyLDAsMCwwLDMyLDIzWk0yMiwzMVYyNUgzMnY2WiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMsMTNIMjNhMiwyLDAsMCwwLDItMlY1YTIsMiwwLDAsMC0yLTJIMTNhMiwyLDAsMCwwLTIsMnY2QTIsMiwwLDAsMCwxMywxM1ptMC04SDIzdjZIMTNaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOS44IDE4LjggMjYuMiAxOC44IDI2LjIgMjEuODggMjcuOCAyMS44OCAyNy44IDE3LjIgMTguOCAxNy4yIDE4LjggMTQgMTcuMiAxNCAxNy4yIDE3LjIgOC4yIDE3LjIgOC4yIDIx'@;
put 'Ljg4IDkuOCAyMS44OCA5LjggMTguOCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIiIHk9IjIzIiB3aWR0aD0iMTQiIGhlaWdodD0iMTAiIHJ4PSIyIiByeT0iMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIwIiB5PSIyMyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjEwIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMyIgd2lkdGg9IjE0'@;
put 'IiBoZWlnaHQ9IjEwIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+JyksVC5DbHJTaGFwZUJhbGFuY2U9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LDMzSDEyYTEsMSwwLDAsMSwwLTJIMjRhMSwxLDAsMCwxLDAsMloiIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTciIHk9IjkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIyLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0i'@;
put 'TTI4LDdIOEExLDEsMCwwLDEsOCw1SDI4YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi45MywyNC43OWE3LjIzLDcuMjMsMCwwLDEtNS44MS0yLjg5bC0uNi0uOCwxLjU5LTEuMjEu'@;
put 'Ni44YTUuMjgsNS4yOCwwLDAsMCw4LjQyLDBsLjYtLjgsMS41OSwxLjIxLS42LjhBNy4yMyw3LjIzLDAsMCwxLDI2LjkzLDI0Ljc5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNTEsMTkuMjVhLjguOCww'@;
put 'LDAsMS0uNzMtLjQ4TDI2LjkzLDEyLjJsLTIuODUsNi41N2EuOC44LDAsMCwxLTEuNDctLjY0TDI2LjIsOS44N2EuODMuODMsMCwwLDEsMS40NywwbDMuNTgsOC4yNmEuOC44LDAsMCwxLS43MywxLjEyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4g'@;
put 'ICAgICAgICAgICA8cGF0aCBkPSJNOS42OCwyNC43OUE3LjIzLDcuMjMsMCwwLDEsMy44OCwyMS45bC0uNi0uOEw0Ljg2LDE5LjlsLjYuOGE1LjI4LDUuMjgsMCwwLDAsOC40MiwwbC42LS44LDEuNTksMS4yMS0uNi44QTcuMjMsNy4yMywwLDAsMSw5LjY4LDI0Ljc5WiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuMjYsMTkuMjVhLjguOCwwLDAsMS0uNzMtLjQ4TDkuNjgsMTIuMiw2Ljg0LDE4Ljc3YS44LjgsMCwwLDEtMS40Ny0uNjRMOC45NSw5Ljg3YS44My44MywwLDAsMSwxLjQ3LDBMMTQsMTgu'@;
put 'MTNhLjguOCwwLDAsMS0uNzMsMS4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPicpLFQuQ2xyU2hhcGVJZEJhZGdlPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyMmE0LjIzLDQuMjMsMCwxLDAtNC4yMy00LjIzQTQuMjMsNC4yMywwLDAs'@;
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+JyksVC5DbHJTaGFwZVJlcGVhdD0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTYsMTQuMTVBMy4xNywzLjE3LDAsMCwxLDkuMTcsMTFIMjguNGwtNC4y'@;
put 'OCw0LjU0YTEsMSwwLDEsMCwxLjQ2LDEuMzdMMzIuMDksMTAsMjUuNTgsMy4wOWExLDEsMCwxLDAtMS40NiwxLjM3TDI4LjQsOUg5LjE3QTUuMTcsNS4xNywwLDAsMCw0LDE0LjE1djYuMWwyLTIuMTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMiIgZD0iTTMwLDIxLjg1QTMuMTcsMy4xNywwLDAsMSwyNi44MywyNUg3LjZsNC4yOC00LjU0YTEsMSwwLDEsMC0xLjQ2LTEuMzdMMy45MSwyNmw2LjUxLDYuOTFhMSwxLDAsMSwwLDEuNDYtMS4zN0w3LjYsMjdIMjYuODNBNS4xNyw1LjE3LDAsMCwwLDMyLDIxLjg1di02'@;
put 'LjFsLTIsMi4xMloiLz4nKSxULkNsclNoYXBlRmlsZUdyb3VwPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzEsMzRIMTNhMSwxLDAsMCwxLTEtMVYxMWExLDEsMCwwLDEsMS0xSDMxYTEsMSwwLDAsMSwxLDFW'@;
put 'MzNBMSwxLDAsMCwxLDMxLDM0Wk0xNCwzMkgzMFYxMkgxNFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIxNiIgeT0iMTYiIHdpZHRoPSIxMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMTYiIHk9IjIwIiB3aWR0aD0iMTIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHg9IjE2IiB5PSIyNCIgd2lkdGg9IjEyIiBoZWln'@;
put 'aHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNNiwyNFY0SDI0VjNhMSwxLDAsMCwwLTEtMUg1QTEsMSwwLDAsMCw0LDNWMjVhMSwxLDAsMCwwLDEsMUg2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIGQ9Ik0xMCwyOFY4SDI4VjdhMSwxLDAsMCwwLTEtMUg5QTEsMSwwLDAsMCw4LDdWMjlhMSwxLDAsMCwwLDEsMWgxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIg'@;
put 'ZD0iTTMxLDEwSDEzYTEsMSwwLDAsMC0xLDFWMzNhMSwxLDAsMCwwLDEsMUgzMWExLDEsMCwwLDAsMS0xVjExQTEsMSwwLDAsMCwzMSwxMFpNMjgsMjZIMTZWMjRIMjhabTAtNEgxNlYyMEgyOFptMC00SDE2VjE2SDI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk'@;
put 'IGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTYsMjRWNEgyNFYzYTEsMSwwLDAsMC0xLTFINUExLDEsMCwwLDAsNCwzVjI1YTEsMSwwLDAsMCwxLDFINloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xMCwyOFY4SDI4Vjdh'@;
put 'MSwxLDAsMCwwLTEtMUg5QTEsMSwwLDAsMCw4LDdWMjlhMSwxLDAsMCwwLDEsMWgxWiIvPicpLFQuQ2xyU2hhcGVQYXBlcmNsaXA9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik04LjQyLDMyLjZBNi4zLDYuMyww'@;
put 'LDAsMSw0LDMwLjc5bC0uMTMtLjEzQTYuMiw2LjIsMCwwLDEsMiwyNi4yMiw2Ljc3LDYuNzcsMCwwLDEsNCwyMS40TDE5LjUsNi4wN2E4LjY3LDguNjcsMCwwLDEsMTIuMTUtLjM1QTgsOCwwLDAsMSwzNCwxMS40NGE5LDksMCwwLDEtMi43LDYuMzZMMTcuMzcsMzEuNkExLDEsMCwxLDEsMTYs'@;
put 'MzAuMThMMjkuODksMTYuMzhBNyw3LDAsMCwwLDMyLDExLjQ0YTYsNiwwLDAsMC0xLjc2LTQuMyw2LjY3LDYuNjcsMCwwLDAtOS4zNC4zNUw1LjQ1LDIyLjgyQTQuNzgsNC43OCwwLDAsMCw0LDI2LjIyYTQuMjEsNC4yMSwwLDAsMCwxLjI0LDNsLjEzLjEzYTQuNjQsNC42NCwwLDAsMCw2LjUt'@;
put 'LjIxTDI1LjIyLDE1Ljk0QTIuNywyLjcsMCwwLDAsMjYsMTRhMi4zNSwyLjM1LDAsMCwwLS42OS0xLjY4LDIuNjEsMi42MSwwLDAsMC0zLjY2LjEzbC05LjIsOS4xMmExLDEsMCwxLDEtMS40MS0xLjQyTDIwLjI4LDExYTQuNjIsNC42MiwwLDAsMSw2LjQ4LS4xM0E0LjMzLDQuMzMsMCwwLDEs'@;
put 'MjgsMTRhNC42OCw0LjY4LDAsMCwxLTEuNDEsMy4zNEwxMy4yOCwzMC41OEE2LjkxLDYuOTEsMCwwLDEsOC40MiwzMi42WiIvPicpLFQuQ2xyU2hhcGVTaHJpbms9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0z'@;
put 'MiwxNUgyMi40MWw5LjI1LTkuMjVhMSwxLDAsMCwwLTEuNDEtMS40MUwyMSwxMy41OVY0YTEsMSwwLDAsMC0yLDBWMTdIMzJhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNNCwxOWExLDEs'@;
put 'MCwwLDAsMCwyaDkuNTlMNC4zMywzMC4yNWExLDEsMCwxLDAsMS40MSwxLjQxTDE1LDIyLjQxVjMyYTEsMSwwLDAsMCwyLDBWMTlaIi8+JyksVC5DbHJTaGFwZUFjY2Vzc2liaWxpdHkxPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC40NCwzMS45NGE3LjMxLDcuMzEsMCwwLDEtNS43'@;
put 'LTExLjg4TDcuMzIsMTguNjRhOS4zLDkuMywwLDAsMCwxMy4xLDEzLjExTDE5LDMwLjMzQTcuMjksNy4yOSwwLDAsMSwxNC40NCwzMS45NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LjM2LDEuNjdhNC4x'@;
put 'Miw0LjEyLDAsMSwwLDQuMTEsNC4xMUE0LjEyLDQuMTIsMCwwLDAsMjUuMzYsMS42N1ptMCw2LjIzYTIuMTIsMi4xMiwwLDEsMSwyLjExLTIuMTJBMi4xMiwyLjEyLDAsMCwxLDI1LjM2LDcuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAg'@;
put 'ICAgICAgPHBhdGggZD0iTTI2LjU2LDE4LjE4aC01YTEsMSwwLDAsMC0uMjQuMDVsMy4wOS0zLjU1YTIuODMsMi44MywwLDAsMC0uNjktNC4zM2wtOC00LjZhMSwxLDAsMCwwLTEuMTIuMDhMOS44Myw5LjU4QTEsMSwwLDAsMCw5LjY2LDExYTEsMSwwLDAsMCwuNzkuMzgsMSwxLDAsMCwwLC42'@;
put 'MS0uMjFsNC4yNy0zLjM0LDMuMTEsMS43Ny01LjA4LDUuNzhoMGE5LjI4LDkuMjgsMCwwLDAtNC41MywxLjgzbDEuNDMsMS40M0E3LjMsNy4zLDAsMCwxLDIwLjQyLDI4LjgxbDEuNDIsMS40M2E5LjI3LDkuMjcsMCwwLDAsLjc3LTEwLjA2aDIuODJsLS43Nyw2LjUxYTEsMSwwLDAsMCwuODgs'@;
put 'MS4xMWguMTJhMSwxLDAsMCwwLDEtLjg4bC45LTcuNjJhMSwxLDAsMCwwLS4yNS0uNzhBMSwxLDAsMCwwLDI2LjU2LDE4LjE4Wm0tNi4zNy03LjU2LDIuNTIsMS40NmEuNzkuNzksMCwwLDEsLjQuNTkuODEuODEsMCwwLDEtLjIuNjlMMTkuNzUsMTdBOS4xNyw5LjE3LDAsMCwwLDE2LDE1LjQ1'@;
put 'WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTQuNzcsMzEuOTRhNy4zMSw3LjMxLDAsMCwxLTUuNy0xMS44OEw3LjY1LDE4LjY0YTkuMyw5LjMsMCwwLDAsMTMuMSwxMy4xMWwtMS40Mi0xLjQyQTcuMjksNy4y'@;
put 'OSwwLDAsMSwxNC43NywzMS45NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNjUsMi4xYTMuMTIsMy4xMiwwLDEsMCwzLjExLDMuMTJBMy4xMiwzLjEyLDAsMCwwLDI2LjY1LDIuMVoiIGNsYXNzPSJjbHItaS1z'@;
put 'b2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODEsMTguMThIMjEuNDdxLS4zMS0uMzMtLjY2LS42M2w0LjM4LTQuODZhMi4xNCwyLjE0LDAsMCwwLS41My0zLjI3TDIwLjksNy4yM2wwLDBMMTcuMDUsNS4wN2ExLDEsMCwwLDAtMS4xMS4wOEwx'@;
put 'MS4xNSw4LjlhMSwxLDAsMCwwLDEuMjMsMS41OGw0LjI3LTMuMzQsMi44NywxLjYzTDEzLjYsMTUuMzlhOS4zMyw5LjMzLDAsMCwwLTQuNDQsMS44MmwxLjQyLDEuNDNBNy4zLDcuMywwLDAsMSwyMC43NSwyOC44MWwxLjQzLDEuNDNBOS4yNyw5LjI3LDAsMCwwLDIzLDIwLjE4aDIuNzRsLS43'@;
put 'Nyw2LjUxYTEsMSwwLDAsMCwuODcsMS4xMWguMTJhMSwxLDAsMCwwLDEtLjg4bC45LTcuNjJhMSwxLDAsMCwwLS4yNS0uNzhBMSwxLDAsMCwwLDI2LjgxLDE4LjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxULkNsclNoYXBlQWNjZXNzaWJpbGl0eTI9'@;
put 'KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMwLjA2LDExaC0yNGExLDEsMCwxLDAsMCwySDE0djkuNjVzMCwwLDAsMGwtMy43NSwxMGExLDEsMCwwLDAsLjU4LDEuMjksMS4xMywxLjEzLDAsMCwwLC4zNi4wNiwxLDEsMCwwLDAsLjkzLS42NUwxNS42MiwyNGg0Ljc2bDMuNTIsOS4zNWEx'@;
put 'LDEsMCwwLDAsLjkzLjY1LDEuMTMsMS4xMywwLDAsMCwuMzYtLjA2LDEsMSwwLDAsMCwuNTgtMS4yOUwyMiwyMi42OHMwLDAsMCwwVjEzaDguMDZhMSwxLDAsMSwwLDAtMlpNMjAsMjJIMTZWMTNoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggZD0iTTE4LDEwYTQsNCwwLDEsMC00LTRBNCw0LDAsMCwwLDE4LDEwWm0wLTZhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTcu'@;
put 'OTYiIGN5PSI1IiByPSIzIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEwSDZhMSwxLDAsMCwwLDAsMmg4djguMzZzMCwwLDAsMEwxMC4xMSwzMy4xN2ExLDEsMCwwLDAsLjY2LDEuMjUsMS41NSwxLjU1LDAsMCww'@;
put 'LC4yOSwwLDEsMSwwLDAsMCwxLS43MWwzLjI5LTEwLjg0aDUuMzhMMjQsMzMuNzVhMSwxLDAsMCwwLDEsLjcxLDEuNTUsMS41NSwwLDAsMCwuMjksMCwxLDEsMCwwLDAsLjY2LTEuMjVMMjIsMjAuNHMwLDAsMCwwVjEyaDhhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt'@;
put 'aS1zb2xpZC1wYXRoLTIiIC8+JyksVC5DbHJTaGFwZVNvcnRCeT0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjguNTQsMTNINy40NmExLDEsMCwwLDEsMC0ySDI4LjU0YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAg'@;
put 'ICAgICAgICAgIDxwYXRoIGQ9Ik0yMS4xNywxOUg3LjQ2YTEsMSwwLDAsMSwwLTJIMjEuMTdhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLjc0LDI1SDcuNDZhMSwxLDAsMCwxLDAt'@;
put 'Mmg2LjI4YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxULkNsclNoYXBlQ29sbGFwc2VDYXJkPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywyMUgzYTEsMSwwLDAsMC0xLDF2NmExLDEsMCwwLDAsMSwxSDMzYTEs'@;
put 'MSwwLDAsMCwxLTFWMjJBMSwxLDAsMCwwLDMzLDIxWm0tMSw2SDRWMjNIMzJaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMC4yMmw1LjY1LTUuNjVhLjgxLjgxLDAsMCwwLDAtMS4xNC44LjgsMCwwLDAt'@;
put 'MS4xMywwTDE4LDE4bC00LjUyLTQuNTJhLjguOCwwLDAsMC0xLjEzLDAsLjgxLjgxLDAsMCwwLDAsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE0LjIybDUuNjUtNS42NWEuODEuODEsMCwwLDAs'@;
put 'MC0xLjE0LjguOCwwLDAsMC0xLjEzLDBMMTgsMTIsMTMuNDgsNy40M2EuOC44LDAsMCwwLTEuMTMsMCwuODEuODEsMCwwLDAsMCwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyIiB5PSIyMiIgd2lkdGg9'@;
put 'IjMyIiBoZWlnaHQ9IjgiIHJ4PSIxIiByeT0iMSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMC43bC01Ljc5LTUuNzlhMSwxLDAsMCwxLDAtMS40MSwxLDEsMCwwLDEsMS40MSwwTDE4LDE3Ljg3bDQuMzgtNC4z'@;
put 'N2ExLDEsMCwwLDEsMS40MSwwLDEsMSwwLDAsMSwwLDEuNDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE0LjUsMTIuMjEsOC43MWExLDEsMCwwLDEsMC0xLjQyLDEsMSwwLDAsMSwxLjQxLDBMMTgsMTEuNjds'@;
put 'NC4zOC00LjM4YTEsMSwwLDAsMSwxLjQxLDAsMSwxLDAsMCwxLDAsMS40MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JyksVC5DbHJTaGFwZUV4cGFuZENhcmQ9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLDZIM0ExLDEsMCwwLDAsMiw3VjI5YTEs'@;
put 'MSwwLDAsMCwxLDFIMzNhMSwxLDAsMCwwLDEtMVY3QTEsMSwwLDAsMCwzMyw2Wk0zMiwyOEg0VjhIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLjQ4LDE1Ljg2LDE4LDExLjM0bDQuNTIsNC41MmEuNzcu'@;
put 'NzcsMCwwLDAsLjU2LjI0LjgxLjgxLDAsMCwwLC41Ny0xLjM3TDE4LDkuMDhsLTUuNjUsNS42NWEuOC44LDAsMSwwLDEuMTMsMS4xM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuNDgsMjEuODYsMTgsMTcu'@;
put 'MzRsNC41Miw0LjUyYS43Ny43NywwLDAsMCwuNTYuMjQuODEuODEsMCwwLDAsLjU3LTEuMzdMMTgsMTUuMDhsLTUuNjUsNS42NWEuOC44LDAsMSwwLDEuMTMsMS4xM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN'@;
put 'MzMsNkgzQTEsMSwwLDAsMCwyLDdWMjlhMSwxLDAsMCwwLDEsMUgzM2ExLDEsMCwwLDAsMS0xVjdBMSwxLDAsMCwwLDMzLDZaTTIzLjc5LDIxLjQxYTEsMSwwLDAsMS0xLjQxLDBMMTgsMTdsLTQuMzgsNC4zOGExLDEsMCwwLDEtMS40MSwwLDEsMSwwLDAsMSwwLTEuNDJMMTgsMTQuMiwyMy43'@;
put 'OSwyMEExLDEsMCwwLDEsMjMuNzksMjEuNDFabTAtNi4yYTEsMSwwLDAsMS0xLjQxLDBMMTgsMTAuODNsLTQuMzgsNC4zOGExLDEsMCwwLDEtMS40MSwwLDEsMSwwLDAsMSwwLTEuNDJMMTgsOGw1Ljc5LDUuNzlBMSwxLDAsMCwxLDIzLjc5LDE1LjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxULkNsclNoYXBlQnJpZWZjYXNlPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiwyOGEwLDAsMCwwLDEsMCwwSDRWMjEuMzJhNy4xLDcuMSwwLDAsMS0yLTEuNDNWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5Ljg5YTYuNzQs'@;
put 'Ni43NCwwLDAsMS0yLDEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0yNSwyMi40YTEsMSwwLDAsMCwxLTFWMTUuOTRIMjRWMThIMTR2MkgyNHYxLjRBMSwxLDAsMCwwLDI1LDIyLjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbjxwYXRoIGQ9Ik0zMyw2SDI0VjQuMzhBMi40MiwyLjQyLDAsMCwwLDIxLjU1LDJoLTcuMUEyLjQyLDIuNDIsMCwwLDAsMTIsNC4zOFY2SDNBMSwxLDAsMCwwLDIsN3Y4YTUsNSwwLDAsMCw1LDVoM3YxLjRhMSwxLDAsMCwwLDIsMFYxNS45NEgxMFYx'@;
put 'OEg3YTMsMywwLDAsMS0zLTNWOEgzMnY3YTMsMywwLDAsMS0zLDNIMjh2MmgxYTUsNSwwLDAsMCw1LTVWN0ExLDEsMCwwLDAsMzMsNlpNMjIsNkgxNFY0LjQzQS40NS40NSwwLDAsMSwxNC40NSw0aDcuMTFhLjQzLjQzLDAsMCwxLC40NC40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0zIiAvPlxuPHBhdGggZD0iTTMwLDE4QTQuMDYsNC4wNiwwLDAsMCwzNCwxNFY2SDI0VjQuNDNBMi40NCwyLjQ0LDAsMCwwLDIxLjU1LDJoLTcuMUEyLjQ0LDIuNDQsMCwwLDAsMTIsNC40M1Y2SDJ2OEE0LjA2LDQuMDYsMCwwLDAsNi4wNSwxOGg0VjE1LjkyaDJ2NS43'@;
put 'YTEsMSwwLDEsMS0yLDBWMjAuMDZINi4wNkE2LjA2LDYuMDYsMCwwLDEsMiwxOC40OXY5LjQ1YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOC40OWE2LDYsMCwwLDEtNC4wNiwxLjU3SDI4VjE4Wk0xNCw0LjQzQS40NS40NSwwLDAsMSwxNC40NSw0aDcuMWEuNDUuNDUsMCwwLDEs'@;
put 'LjQ1LjQzVjZIMTRaTTI2LDIxLjYyYTEsMSwwLDEsMS0yLDBWMjAuMDZIMTRWMThIMjRWMTUuOTJoMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksVC5DbHJTaGFwZUNvbG9yUGlja2VyPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywxMC4wNWE1'@;
put 'LjA3LDUuMDcsMCwwLDAsLjEtNy4xN0E1LjA2LDUuMDYsMCwwLDAsMjYsM0wyMC43OCw4LjE1YTIuMTMsMi4xMywwLDAsMS0zLDBsLS42Ny0uNjdMMTUuNzIsOC45MiwyNy4wOCwyMC4yOGwxLjQyLTEuNDItLjY3LS42N2EyLjEzLDIuMTMsMCwwLDEsMC0zWk0yNi40NCwxMy44YTQuMDcsNC4w'@;
put 'NywwLDAsMC0xLjA4LDEuOTJsLTUuMDgtNS4wOEE0LjA3LDQuMDcsMCwwLDAsMjIuMiw5LjU2bDUuMTYtNS4xN2EzLjA5LDMuMDksMCwwLDEsNC4zNS0uMSwzLjA5LDMuMDksMCwwLDEtLjEsNC4zNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBh'@;
put 'dGggZD0iTTcuMywzMS41MWEyLDIsMCwxLDEtMi44My0yLjgzTDE4LjU4LDE0LjU3bC0xLjQyLTEuNDFMMy4wNSwyNy4yN2E0LDQsMCwwLDAtLjY4LDQuOEwuODksMzMuNTVBMSwxLDAsMCwwLC44OSwzNWExLDEsMCwwLDAsMS40MiwwbDEuNDMtMS40NGEzLjkzLDMuOTMsMCwwLDAsMi4wOS42'@;
put 'LDQuMDYsNC4wNiwwLDAsMCwyLjg4LTEuMkwyMi44MiwxOC44MSwyMS40MSwxNy40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG48cGF0aCBkPSJNMzMuNzMsMi4xMWE0LjA5LDQuMDksMCwwLDAtNS43Ni4xTDIyLjgxLDcuMzhhMy4xMywzLjEzLDAs'@;
put 'MCwxLTQuMy4xMUwxNy4wOSw4LjkxLDI3LDE4Ljc5bDEuNDItMS40MkEzLjE4LDMuMTgsMCwwLDEsMjguNDYsMTNsNS4xNy01LjE3QTQuMDgsNC4wOCwwLDAsMCwzMy43MywyLjExWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0yMi4xOCwx'@;
put 'Ni43OSw3LjQ2LDMxLjUxYTIsMiwwLDEsMS0yLjgyLTIuODNMMTkuMzUsMTRsLTEuNDEtMS40MUwzLjIyLDI3LjI3YTQsNCwwLDAsMC0uNjgsNC44TDEuMDYsMzMuNTVhMSwxLDAsMCwwLDAsMS40MSwxLDEsMCwwLDAsMS40MSwwbDEuNDQtMS40NGEzLjkzLDMuOTMsMCwwLDAsMi4wOS42LDQu'@;
put 'MDYsNC4wNiwwLDAsMCwyLjg4LTEuMkwyMy42LDE4LjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxULkNsclNoYXBlQ29weVRvQ2xpcGJvYXJkPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMi42LDRIMjEuNTVhMy44OSwzLjg5LDAsMCwwLTcu'@;
put 'MzEsMEgxMy40QTIuNDEsMi40MSwwLDAsMCwxMSw2LjRWMTBIMjVWNi40QTIuNDEsMi40MSwwLDAsMCwyMi42LDRaTTIzLDhIMTNWNi4yNUEuMjUuMjUsMCwwLDEsMTMuMjUsNmgyLjY5bC4xMi0xLjExQTEuMjQsMS4yNCwwLDAsMSwxNi42MSw0YTIsMiwwLDAsMSwzLjE1LDEuMThsLjA5Ljg0'@;
put 'aDIuOWEuMjUuMjUsMCwwLDEsLjI1LjI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG48cGF0aCBkPSJNMzMuMjUsMTguMDZIMjEuMzNsMi44NC0yLjgzYTEsMSwwLDEsMC0xLjQyLTEuNDJMMTcuNSwxOS4wNmw1LjI1LDUuMjVhMSwxLDAsMCwwLC43'@;
put 'MS4yOSwxLDEsMCwwLDAsLjcxLTEuN2wtMi44NC0yLjg0SDMzLjI1YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbjxwYXRoIGQ9Ik0yOSwxNmgyVjYuNjhBMS42NiwxLjY2LDAsMCwwLDI5LjM1LDVIMjcuMDhWN0gyOVoiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuPHBhdGggZD0iTTI5LDMxSDdWN0g5VjVINi42NEExLjY2LDEuNjYsMCwwLDAsNSw2LjY3VjMxLjMyQTEuNjYsMS42NiwwLDAsMCw2LjY1LDMzSDI5LjM2QTEuNjYsMS42NiwwLDAsMCwzMSwzMS4zM1YyMi4wNkgy'@;
put 'OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLFQuQ2xyU2hhcGVEcmFnSGFuZGxlPSgwLHYuY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjE1IiBjeT0iMTIiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi'@;
put 'IC8+PGNpcmNsZSBjeD0iMTUiIGN5PSIyNCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48Y2lyY2xlIGN4PSIyMSIgY3k9IjEyIiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxjaXJjbGUg'@;
put 'Y3g9IjIxIiBjeT0iMjQiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PGNpcmNsZSBjeD0iMjEiIGN5PSIxOCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48Y2lyY2xlIGN4PSIxNSIgY3k9'@;
put 'IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLFQuQ2xyU2hhcGVGaWx0ZXIyPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywxMUgzYTEsMSwwLDAsMCwwLDJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTI4LDE3SDhhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG48cGF0aCBkPSJNMjMsMjNIMTNhMSwxLDAsMCwwLDAsMkgyM2Ex'@;
put 'LDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JyksVC5DbHJTaGFwZU1vb249KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLDI3LjE5YTEsMSwwLDAsMC0xLS41NmMtLjI4LDAtLjU2LDAtLjg1LDBBMTEsMTEsMCwwLDEsMjQu'@;
put 'OTIsNS42MWExLDEsMCwwLDAsLjYxLTEsMSwxLDAsMCwwLS42Ny0uOTEsMTQuNywxNC43LDAsMCwwLTUtLjg3LDE1LjEyLDE1LjEyLDAsMCwwLDAsMzAuMjQsMTQuNzgsMTQuNzgsMCwwLDAsMTEtNC44MUExLDEsMCwwLDAsMzEsMjcuMTlaTTE5Ljg5LDMxLjEyYTEzLjEyLDEzLjEyLDAsMCwx'@;
put 'LDAtMjYuMjQsMTEuODEsMTEuODEsMCwwLDEsMiwuMTYsMTMsMTMsMCwwLDAsNS43MiwyMy41M0ExMi43NSwxMi43NSwwLDAsMSwxOS44OSwzMS4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTI5LjIsMjYuNzJBMTIuMDcsMTIu'@;
put 'MDcsMCwwLDEsMjIuOSw0LjQ0LDEzLjY4LDEzLjY4LDAsMCwwLDE5LjQ5LDRhMTQsMTQsMCwwLDAsMCwyOCwxMy44MiwxMy44MiwwLDAsMCwxMC45LTUuMzRBMTEuNzEsMTEuNzEsMCwwLDEsMjkuMiwyNi43MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+Jyks'@;
put 'VC5DbHJTaGFwZVN1bj0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsNi4zMWExLDEsMCwwLDAsMS0xVjEuOTFhMSwxLDAsMCwwLTIsMHYzLjRBMSwxLDAsMCwwLDE4LDYuMzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0x'@;
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 'OC40QTEsMSwwLDAsMCwyNy42LDkuODFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC04IiAvPjxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjEwIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC05IiAvPicpLFQuQ2xyU2hhcGVXYW5kPSgwLHYuY2xy'@;
put 'SWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzQuMSw0LDMxLjcxLDEuNmExLjgzLDEuODMsMCwwLDAtMS4zMS0uNTRoMGEyLjA1LDIuMDUsMCwwLDAtMS40NS42MkwxLjc2LDI5LjIzQTIsMiwwLDAsMCwxLjY4LDMybDIuNCwy'@;
put 'LjQzQTEuODMsMS44MywwLDAsMCw1LjM5LDM1aDBhMi4wNSwyLjA1LDAsMCwwLDEuNDUtLjYyTDM0LDYuNzlBMiwyLDAsMCwwLDM0LjEsNFpNNS40MiwzMi45MywzLjE2LDMwLjY1aDBMMjQuMTEsOS40M2wyLjI1LDIuMjhaTTMyLjYxLDUuMzlsLTUuMTIsNS4xOEwyNS4yNCw4LjI5bDUuMTMt'@;
put 'NS4yLDIuMjUsMi4yOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIuNTMsMjAuNDdsMi4wOS0yLjA5YS44LjgsMCwwLDAtMS4xMy0xLjEzbC0yLjA5LDIuMDktMi4wOS0yLjA5YS44LjgsMCwwLDAtMS4xMywx'@;
put 'LjEzbDIuMDksMi4wOS0yLjA5LDIuMDlhLjguOCwwLDAsMCwxLjEzLDEuMTNsMi4wOS0yLjA5LDIuMDksMi4wOWEuOC44LDAsMCwwLDEuMTMtMS4xM1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTQuNzgsNi41'@;
put 'MWEuOC44LDAsMCwwLDEuMTMsMEwxNy40LDVsMS40OSwxLjQ5QS44LjgsMCwwLDAsMjAsNS4zOEwxOC41NCwzLjg5LDIwLDIuNGEuOC44LDAsMCwwLTEuMTMtMS4xM0wxNy40LDIuNzYsMTUuOTEsMS4yN0EuOC44LDAsMSwwLDE0Ljc4LDIuNGwxLjQ5LDEuNDlMMTQuNzgsNS4zOEEuOC44LDAs'@;
put 'MCwwLDE0Ljc4LDYuNTFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTguMzMsMTUuMjZhLjguOCwwLDAsMCwxLjEzLDBsMS4xNi0xLjE2LDEuMTYsMS4xNmEuOC44LDAsMSwwLDEuMTMtMS4xM0wxMS43NiwxM2wx'@;
put 'LjE2LTEuMTZhLjguOCwwLDEsMC0xLjEzLTEuMTNsLTEuMTYsMS4xNkw5LjQ2LDEwLjY4YS44LjgsMCwxLDAtMS4xMywxLjEzTDkuNDksMTMsOC4zMywxNC4xM0EuOC44LDAsMCwwLDguMzMsMTUuMjZaIi8+JyksVC5DbHJTaGFwZUN1cnNvck1vdmU9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGgg'@;
put 'ZD0iTTI4Ljg1LDEyLjg5YTEsMSwwLDAsMC0xLjQyLDAsMSwxLDAsMCwwLDAsMS40MUwzMC4xNCwxN0gxOVY1Ljg2bDIuNjksMi43YTEsMSwwLDAsMCwxLjQxLDAsMSwxLDAsMCwwLDAtMS40MkwxOCwyLDEyLjg5LDcuMTVhMSwxLDAsMCwwLS4yOS43MSwxLDEsMCwwLDAsMS43MS43TDE3LDUu'@;
put 'ODZWMTdINS44NmwyLjctMi42OWExLDEsMCwwLDAsMC0xLjQxLDEsMSwwLDAsMC0xLjQyLDBMMiwxOGw1LjE0LDUuMTFhMSwxLDAsMCwwLC43MS4yOSwxLDEsMCwwLDAsLjctMS43MUw1Ljg2LDE5SDE3VjMwLjE0bC0yLjY5LTIuN2ExLDEsMCwwLDAtMS43MS43LDEsMSwwLDAsMCwuMjkuNzFM'@;
put 'MTgsMzRsNS4xMS01LjE0YTEsMSwwLDAsMCwwLTEuNDIsMSwxLDAsMCwwLTEuNDEsMEwxOSwzMC4xNFYxOUgzMC4xNGwtMi43LDIuNjlhMSwxLDAsMCwwLC43LDEuNzEsMSwxLDAsMCwwLC43MS0uMjlMMzQsMThaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg'@;
put 'Lz4nKSxULkNsclNoYXBlQ2xvbmU9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTYsNkgyMnY0aDJWNmEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNlYyMmEyLDIsMCwwLDAsMiwyaDRWMjJINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxw'@;
put 'YXRoIGQ9Ik0zMCwxMkgxNGEyLDIsMCwwLDAtMiwyVjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNEEyLDIsMCwwLDAsMzAsMTJabTAsMThIMTRWMTRIMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cG9seWdvbiBwb2ludHM9IjIx'@;
put 'IDI4IDIzIDI4IDIzIDIzIDI4IDIzIDI4IDIxIDIzIDIxIDIzIDE2IDIxIDE2IDIxIDIxIDE2IDIxIDE2IDIzIDIxIDIzIDIxIDI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMjQsMTBWNmEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCww'@;
put 'LDQsNlYyMmEyLDIsMCwwLDAsMiwyaDRWMTJhMiwyLDAsMCwxLDItMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTMwLDEySDE0YTIsMiwwLDAsMC0yLDJWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE0QTIsMiwwLDAsMCwz'@;
put 'MCwxMlpNMjgsMjNIMjN2NUgyMVYyM0gxNlYyMWg1VjE2aDJ2NWg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxULkNsclNoYXBlRGV0YWlscz0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCww'@;
put 'LDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZabTAsMjJINFY4SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTksMTRIMjdhMSwxLDAsMCwwLDAtMkg5YTEsMSwwLDAsMCwwLDJaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNOSwxOEgyN2ExLDEsMCwwLDAsMC0ySDlhMSwxLDAsMCwwLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik05LDIySDE5YTEsMSwwLDAsMCwwLTJIOWExLDEsMCww'@;
put 'LDAsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk0xOSwyMkg5YTEsMSwwLDAsMSwwLTJIMTlhMSwx'@;
put 'LDAsMCwxLDAsMlptOC00SDlhMSwxLDAsMCwxLDAtMkgyN2ExLDEsMCwwLDEsMCwyWm0wLTRIOWExLDEsMCwwLDEsMC0ySDI3YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLFQuQ2xyU2hhcGVEcmFnSGFuZGxlQ29ybmVyPSgwLHYu'@;
put 'Y2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjEyIiBjeT0iMjQiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iMTgiIGN5PSIyNCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIg'@;
put 'Lz48Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxjaXJjbGUgY3g9IjI0IiBjeT0iMTIiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PGNpcmNsZSBj'@;
put 'eD0iMjQiIGN5PSIyNCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48Y2lyY2xlIGN4PSIyNCIgY3k9IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLFQuQ2xyU2hhcGVFcmFzZXI9'@;
put 'KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM1LjYyLDEyYTIuODIsMi44MiwwLDAsMC0uODQtMkwyNy40OSwyLjY1YTIuOSwyLjksMCwwLDAtNCwwTDIuODMsMjMuMjhhMi44NCwyLjg0LDAsMCwwLDAsNEw3LjUzLDMySDNhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0ySDE2Ljc0'@;
put 'bDE4LTE4QTIuODIsMi44MiwwLDAsMCwzNS42MiwxMlpNMTMuOTEsMzJIMTAuMzZMNC4yNSwyNS44OWEuODQuODQsMCwwLDEsMC0xLjE5bDUuNTEtNS41Miw4LjQ5LDguNDhaTTMzLjM3LDEyLjU0LDE5LjY2LDI2LjI1bC04LjQ4LTguNDksMTMuNy0xMy43YS44Ni44NiwwLDAsMSwxLjE5LDBs'@;
put 'Ny4zLDcuMjlhLjg2Ljg2LDAsMCwxLC4yNS42QS44Mi44MiwwLDAsMSwzMy4zNywxMi41NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yOCwzMkgxNS4zM0wxOSwyOC4zN2wtOS45LTkuOUwzLjU0LDI0YTEuODMsMS44MywwLDAsMCww'@;
put 'LDIuNkw5LDMySDNhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzQuMDgsMTAuNjVsLTcuMy03LjNhMS44MywxLjgzLDAsMCwwLTIuNiwwTDEwLjQ3LDE3LjA2bDkuOSw5LjlMMzQuMDgs'@;
put 'MTMuMjVBMS44NSwxLjg1LDAsMCwwLDM0LjA4LDEwLjY1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxULkNsclNoYXBlTGFuZHNjYXBlPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwy'@;
put 'SDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlptMCwyMkg0VjhIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNOSwyMmEuODIuODIsMCwwLDAsLjU1LS4yMS44LjgsMCwwLDAsMC0xLjEzTDcuODMsMTguOEgyOC4xN2wt'@;
put 'MS43MiwxLjg2YS44LjgsMCwwLDAsMCwxLjEzQS44Mi44MiwwLDAsMCwyNywyMmEuNzguNzgsMCwwLDAsLjU4LS4yNkwzMS4wOSwxOGwtMy40Ny0zLjc0YS43OS43OSwwLDAsMC0xLjEzLDAsLjguOCwwLDAsMCwwLDEuMTNsMS43MiwxLjg2SDcuODNsMS43Mi0xLjg2YS44LjgsMCwwLDAsMC0x'@;
put 'LjEzLjc5Ljc5LDAsMCwwLTEuMTMsMEw0LjkxLDE4bDMuNDcsMy43NEEuNzguNzgsMCwwLDAsOSwyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAs'@;
put 'MCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNMjcuNzcsMjEuODhhMSwxLDAsMCwxLS43My4zMiwxLDEsMCwwLDEtLjY4LS4yNywxLDEsMCwwLDEtLjA2LTEuNDFMMjcuNzEsMTlIOC4yOUw5LjcsMjAuNTJhMSwxLDAsMCwxLS4wNiwxLjQxQTEsMSwwLDAsMSw5LDIyLjJhMSwxLDAsMCwxLS43My0u'@;
put 'MzJMNC42NCwxOGwzLjU5LTMuODhBMSwxLDAsMCwxLDkuNywxNS40OEw4LjI5LDE3SDI3LjcxTDI2LjMsMTUuNDhhMSwxLDAsMCwxLDEuNDctMS4zNkwzMS4zNiwxOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksVC5DbHJTaGFwZVBhc3RlPSgwLHYuY2xy'@;
put 'SWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwxMkgyNnYyaDR2MmgyVjE0QTIsMiwwLDAsMCwzMCwxMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxyZWN0IHg9IjMwIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLDMwSDI4djJoMmEyLDIsMCwwLDAsMi0yVjI2SDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTI0LDIyVjZhMiwyLDAsMCwwLTItMkg2QTIsMiwwLDAsMCw0LDZWMjJh'@;
put 'MiwyLDAsMCwwLDIsMkgyMkEyLDIsMCwwLDAsMjQsMjJaTTYsNkgyMlYyMkg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHJlY3QgeD0iMjAiIHk9IjMwIiB3aWR0aD0iNiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMTQsMjZIMTJ2NGEyLDIsMCwwLDAsMiwyaDRWMzBIMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cGF0aCBkPSJNMzAsMTJIMjZ2Mmg0djJoMlYxNEEyLDIsMCwwLDAsMzAsMTJaIiBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxyZWN0IHg9IjMwIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMzAsMzBIMjh2MmgyYTIsMiwwLDAsMCwyLTJWMjZIMzBaIiBjbGFzcz0iY2xy'@;
put 'LWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxyZWN0IHg9IjQiIHk9IjQiIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgcng9IjIiIHJ5PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxyZWN0IHg9IjIwIiB5PSIzMCIgd2lkdGg9IjYiIGhlaWdodD0i'@;
put 'MiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz48cGF0aCBkPSJNMTQsMjZIMTJ2NGEyLDIsMCwwLDAsMiwyaDRWMzBIMTRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02IiAvPicpLFQuQ2xyU2hhcGVQb3J0cmFpdD0oMCx2LmNsckljb25T'@;
put 'VkcpKCc8cGF0aCBkPSJNMTUuMzQsMjYuNDVhLjguOCwwLDAsMC0xLjEzLDAsLjc5Ljc5LDAsMCwwLDAsMS4xM0wxOCwzMS4wOWwzLjc0LTMuNDdhLjc5Ljc5LDAsMCwwLC4wNS0xLjEzLjguOCwwLDAsMC0xLjEzLDBMMTguOCwyOC4xN1Y3LjgzbDEuODYsMS43MmEuOC44LDAsMSwwLDEuMDgt'@;
put 'MS4xN0wxOCw0LjkxLDE0LjI2LDguMzhhLjc5Ljc5LDAsMCwwLDAsMS4xMy44LjgsMCwwLDAsMS4xMywwTDE3LjIsNy44M1YyOC4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCww'@;
put 'LDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlptMCwzMEg4VjRIMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjgsMkg4QTIsMiwwLDAsMCw2LDRWMzJhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0y'@;
put 'VjRBMiwyLDAsMCwwLDI4LDJaTTIwLjUyLDI2LjNhMSwxLDAsMCwxLDEuMzYsMS40N0wxOCwzMS4zNmwtMy44OC0zLjU5YTEsMSwwLDAsMSwxLjM2LTEuNDdMMTcsMjcuNzFWOC4yOUwxNS40OCw5LjdhMSwxLDAsMCwxLTEuMzYtMS40N0wxOCw0LjY0bDMuODgsMy41OWExLDEsMCwwLDEsLjA1'@;
put 'LDEuNDEsMSwxLDAsMCwxLS43My4zMiwxLDEsMCwwLDEtLjY4LS4yNkwxOSw4LjI5VjI3LjcxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxULkNsclNoYXBlVHJlZVZpZXc9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE1LDMySDExYTEsMSwwLDAs'@;
put 'MS0xLTFWMjdhMSwxLDAsMCwxLDEtMWg0YTEsMSwwLDAsMSwxLDF2NEExLDEsMCwwLDEsMTUsMzJabS0zLTJoMlYyOEgxMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xNSwxNkgxMWExLDEsMCwwLDAtMSwxdjEuMkg1LjhWMTJIN2Ex'@;
put 'LDEsMCwwLDAsMS0xVjdBMSwxLDAsMCwwLDcsNkgzQTEsMSwwLDAsMCwyLDd2NGExLDEsMCwwLDAsMSwxSDQuMlYyOS44aDYuMzZhLjguOCwwLDAsMCwwLTEuNkg1LjhWMTkuOEgxMFYyMWExLDEsMCwwLDAsMSwxaDRhMSwxLDAsMCwwLDEtMVYxN0ExLDEsMCwwLDAsMTUsMTZaTTQsOEg2djJI'@;
put 'NFpNMTQsMjBIMTJWMThoMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zNCw5YTEsMSwwLDAsMC0xLTFIMTB2MkgzM0ExLDEsMCwwLDAsMzQsOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxw'@;
put 'YXRoIGQ9Ik0zMywxOEgxOHYySDMzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzMsMjhIMTh2MkgzM2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUi'@;
put 'IC8+PHJlY3QgeD0iMTAiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiByeD0iMSIgcnk9IjEiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTE1LDE2SDExYTEsMSwwLDAsMC0xLDF2MS4ySDUuOFYxMkg3YTEsMSwwLDAsMCwxLTFWN0ExLDEs'@;
put 'MCwwLDAsNyw2SDNBMSwxLDAsMCwwLDIsN3Y0YTEsMSwwLDAsMCwxLDFINC4yVjI5LjhIMTFhLjguOCwwLDEsMCwwLTEuNkg1LjhWMTkuOEgxMFYyMWExLDEsMCwwLDAsMSwxaDRhMSwxLDAsMCwwLDEtMVYxN0ExLDEsMCwwLDAsMTUsMTZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s'@;
put 'aWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMyw4SDEwdjJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLDE4SDE4djJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w'@;
put 'YXRoLTQiIC8+PHBhdGggZD0iTTMzLDI4SDE4djJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTUiIC8+JyksVC5DbHJTaGFwZUN1cnNvckhhbmRHcmFiPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOC4wOSw5Ljc0YTQsNCwwLDAs'@;
put 'MC0xLjE2LjE5Yy0uMTktMS4yNC0xLjU1LTIuMTgtMy4yNy0yLjE4QTQsNCwwLDAsMCwyMi4xMyw4LDMuMzcsMy4zNywwLDAsMCwxOSw2LjNhMy40NSwzLjQ1LDAsMCwwLTIuODcsMS4zMiwzLjY1LDMuNjUsMCwwLDAtMS44OS0uNTFBMy4wNSwzLjA1LDAsMCwwLDExLDkuODl2LjkxYy0xLjA2'@;
put 'LjQtNC4xMSwxLjgtNC45MSw0Ljg0cy4zNCw4LDIuNjksMTEuNzhhMjUuMjEsMjUuMjEsMCwwLDAsNS45LDYuNDEuOS45LDAsMCwwLC41My4xN0gyNS41NWEuOTIuOTIsMCwwLDAsLjU1LS4xOSwxMy4xMywxMy4xMywwLDAsMCwzLjc1LTYuMTNBMjUuOCwyNS44LDAsMCwwLDMxLjQxLDE4di01'@;
put 'LjVBMy4wOCwzLjA4LDAsMCwwLDI4LjA5LDkuNzRaTTI5LjYxLDE4YTI0LDI0LDAsMCwxLTEuNDcsOS4xNUExMi40NiwxMi40NiwwLDAsMSwyNS4yLDMyLjJIMTUuNDdhMjMuNzUsMjMuNzUsMCwwLDEtNS4yLTUuNzJjLTIuMzctMy44Ni0zLTguMjMtMi40OC0xMC4zOUE1LjcsNS43LDAsMCwx'@;
put 'LDExLDEyLjc2djcuNjVhLjkuOSwwLDAsMCwxLjgsMFY5Ljg5YzAtLjQ3LjU5LTEsMS40Ni0xczEuNDkuNTIsMS40OSwxdjUuNzJoMS44VjguODFjMC0uMjguNTgtLjcxLDEuNDYtLjcxczEuNTMuNDgsMS41My43NXY2Ljg5aDEuOFYxMGwuMTctLjEyYTIuMSwyLjEsMCwwLDEsMS4xOC0uMzJj'@;
put 'LjkzLDAsMS41LjQ0LDEuNS42OGwwLDYuNUgyN1YxMS44N2ExLjkxLDEuOTEsMCwwLDEsMS4xMi0uMzNjLjg2LDAsMS41Mi41MSwxLjUyLjk0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksVC5DbHJTaGFwZUN1cnNvckhhbmRPcGVuPSgwLHYuY2xy'@;
put 'SWNvblNWRykoJzxwYXRoIGQ9Ik0zMS40Niw4LjU3QTMuMTEsMy4xMSwwLDAsMCwyNyw1Ljc1YTMuMTksMy4xOSwwLDAsMC00LjY2LTIuNjQsMy4yOSwzLjI5LDAsMCwwLTYuNDItLjc2LDMuMjMsMy4yMywwLDAsMC0xLjY2LS40NkEzLjI3LDMuMjcsMCwwLDAsMTEsNS4xOFYxNy44NGMtMS4y'@;
put 'OC0xLjYtMi41My0zLjE4LTIuNzItMy40NUEzLjE5LDMuMTksMCwwLDAsNS41NiwxMi45YTMuMzcsMy4zNywwLDAsMC0zLjQ3LDMuNDhDMi4xOCwxOC4xOCw1LjY2LDI0LjU0LDgsMjhjMy41NCw1LjI0LDYuOTIsNiw3LjA3LDZsLjE4LDBIMjUuNTlhLjkyLjkyLDAsMCwwLC41NS0uMTksMTMu'@;
put 'MTMsMTMuMTMsMCwwLDAsMy43NS02LjEzYzEtMy4wOSwxLjUzLTcuNTMsMS41OC0xMy41NlpNMjguMTgsMjcuMTJhMTIuNDYsMTIuNDYsMCwwLDEtMi45NCw1LjA4SDE1LjMzYy0uNDctLjE0LTMuMDctMS4xLTUuODctNS4yNVMzLjk0LDE3LjI3LDMuODksMTYuMjlhMS41LDEuNSwwLDAsMSwu'@;
put 'NDUtMS4xMywxLjUyLDEuNTIsMCwwLDEsMS4xNC0uNDYsMS40MywxLjQzLDAsMCwxLDEuMzIuNzFjLjI5LjQzLDIuMzYsMywzLjU3LDQuNTNMMTIuOCwxOC4zVjUuMThhMS40OCwxLjQ4LDAsMSwxLDIuOTUsMFYxNi4zMmgxLjh2LTEzYTEuNTEsMS41MSwwLDAsMSwzLDBWMTYuNDVoMS44VjZh'@;
put 'MS40MywxLjQzLDAsMSwxLDIuODUsMFYxNy40NEgyN1Y4LjU0YTEuMzMsMS4zMywwLDAsMSwyLjY1LDB2NS41NUMyOS42MiwyMCwyOS4xNCwyNC4yMSwyOC4xOCwyNy4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLFQuQ2xyU2hhcGVGaWxlWmlw'@;
put 'PSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwzMC4yVjEybC04LjEtNy45SDcuOEM2LjgsNC4xLDYsNC45LDYsNmMwLDAsMCwwLDAsMHYyNC4yYzAsMSwwLjcsMS44LDEuNywxLjhjMCwwLDAuMSwwLDAuMSwwaDIwLjNcblx0XHRjMSwwLDEuOC0wLjcsMS44LTEuN0MzMCwzMC4zLDMw'@;
put 'LDMwLjIsMzAsMzAuMnogTTIyLDYuNmw1LjYsNS40SDIyVjYuNnogTTI4LDMwSDcuOUw4LDZoMTJ2OGg4VjMweiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTEyLDI0YzAsMS43LDEuMywzLDMsM3MzLTEuMywzLTN2LTRoLTZWMjR6IE0x'@;
put 'My40LDI0di0yLjZoMy4yVjI0YzAuMSwwLjktMC42LDEuNy0xLjUsMS43Yy0wLjksMC4xLTEuNy0wLjYtMS43LTEuNVxuXHRcdEMxMy40LDI0LjIsMTMuNCwyNC4xLDEzLjQsMjR6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTguMiw5'@;
put 'YzAtMC42LTAuNC0xLTEtMUgxNXYyaDIuMkMxNy44LDEwLDE4LjIsOS42LDE4LjIsOXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xMi43LDEwYy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxSDE1di0ySDEyLjd6IiBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMTcuMiwxNGMwLjYsMCwxLTAuNCwxLTFzLTAuNC0xLTEtMUgxNXYySDE3LjJ6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMTEuNywxNWMwLDAuNiwwLjQs'@;
put 'MSwxLDFIMTV2LTJoLTIuM0MxMi4yLDE0LDExLjcsMTQuNCwxMS43LDE1eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTE3LjIsMThjMC42LDAsMS0wLjQsMS0xcy0wLjQtMS0xLTFIMTV2MkgxNy4yeiIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+PHBhdGggZD0iTTE1LDI1LjZjMC45LDAsMS42LTAuNywxLjYtMS42di0yLjZoLTMuMlYyNEMxMy40LDI0LjksMTQuMSwyNS42LDE1LDI1LjZ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMS45'@;
put 'LDRINy44QzYuOCw0LDYsNC45LDYsNS45djI0LjJjMCwxLDAuOCwxLjksMS44LDEuOWgyMC4zYzEsMCwxLjgtMC45LDEuOC0xLjlWMTEuOUwyMS45LDR6IE0xOCwyNGMwLDEuNy0xLjMsMy0zLDNcblx0XHRzLTMtMS4zLTMtM3YtNGg2VjI0eiBNMTcuMiwxMmMwLjYsMCwxLDAuNCwxLDFzLTAu'@;
put 'NCwxLTEsMUgxNXYyaDIuMmMwLjYsMCwxLDAuNCwxLDFzLTAuNCwxLTEsMUgxNXYtMmgtMi4yYy0wLjYsMC0xLTAuNC0xLTFcblx0XHRzMC40LTEsMS0xSDE1di0yaC0yLjJjLTAuNiwwLTEtMC40LTEtMXMwLjQtMSwxLTFIMTVWOGgyLjJjMC42LDAsMSwwLjQsMSwxcy0wLjQsMS0xLDFIMTV2'@;
put 'MkgxNy4yeiBNMjEuOSwxMlY2LjVsNS43LDUuNUgyMS45eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxULkNsclNoYXBlRmlsdGVyT2ZmPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zNCw2LjRDMzQsNS42LDMzLjMsNSwzMi41LDVIMTAuM2wyLDJI'@;
put 'MzJ2MC42bC05LjYsOS42bDEuNCwxLjRMMzMuNCw5QzMzLjgsOC42LDM0LDguMSwzNCw3LjZWNi41QzM0LDYuNSwzNCw2LjQsMzQsNi40eiJcblx0XHQgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIuNywzbDIsMmgtMUMyLjksNC45LDIu'@;
put 'MSw1LjUsMiw2LjN2MS4xYzAsMC41LDAuMiwxLDAuNiwxLjRMMTQsMjAuMnYxMC4zbDEuOSwwLjhWMTkuNEw0LDcuNVY3aDIuN0wyMCwyMC4zdjEyLjlsMiwwLjhcblx0XHRjMCwwLDAsMCwwLTAuMVYyMi4zbDEwLjEsMTAuMWwxLjQtMS40TDQuMSwxLjZMMi43LDN6IiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjMuOSwxOC42TDEwLjMsNS4xaDIyLjJDMzMuMyw1LDM0LDUuNiwzNCw2LjRjMCwwLDAsMCwwLDAuMXYxLjFjMCwwLjUtMC4yLDEtMC42LDEuNEwyMy45LDE4LjZ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s'@;
put 'aWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMy41LDMxTDQuMSwxLjZMMi42LDNsMi4xLDIuMUgzLjVDMi43LDUsMiw1LjYsMiw2LjRjMCwwLDAsMCwwLDAuMXYxLjFjMCwwLjUsMC4yLDEsMC42LDEuNEwxNCwyMC41djEwLjFsOCwzLjRWMjIuNFxuXHRsMTAuMSwxMC4xTDMzLjUsMzF6IiBjbGFz'@;
put 'cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLFQuQ2xyU2hhcGVSZWN5Y2xlPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LjQsMTcuNGMwLjIsMC4xLDAuMywwLjEsMC41LDAuMWMwLjIsMCwwLjQtMC4xLDAuNS0wLjFsNy00LjFjMC4zLTAuMiwwLjUtMC41LDAu'@;
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 'LjEsMjguOCwyMS45LDI4LjUsMjEuNywyOC40eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxULkNsclNoYXBlVHJlZT0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAuNiwxMS43QzI5LjIsNS44LDI0LDEuNywxOCwxLjdjLTcuMiwwLTEzLDUuOC0x'@;
put 'MywxM2MwLDYuOCw1LjMsMTIuNCwxMiwxMi45djVjMCwwLjYsMC40LDEsMSwxczEtMC40LDEtMXYtNXYtMlYyMlxuXHRjMCwwLDAsMCwwLTAuMXYtMy42bDQuNy00LjdjMC40LTAuNCwwLjQtMSwwLTEuNGMtMC40LTAuNC0xLTAuNC0xLjQsMEwxOSwxNS42di0zbC0zLjMtMy4zYy0wLjQtMC40'@;
put 'LTEtMC40LTEuNCwwXG5cdGMtMC40LDAuNC0wLjQsMSwwLDEuNGwyLjcsMi43djYuMmwtMy44LTMuOGMtMC40LTAuNC0xLTAuNC0xLjQsMGMtMC40LDAuNC0wLjQsMSwwLDEuNGw1LjIsNS4ydjMuMmMtNS42LTAuNS0xMC01LjItMTAtMTAuOVxuXHRjMC02LjEsNC45LTExLDExLTExczExLDQu'@;
put 'OSwxMSwxMWMwLDQuOS0zLjMsOS4yLTgsMTAuNnYyLjFDMjgsMjUuNywzMi4zLDE4LjcsMzAuNiwxMS43eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LDJDMTAuOCwxLjcsNC44LDcuMyw0LjUsMTQuNUM0LjIsMjEuNyw5LjgsMjcu'@;
put 'NywxNywyOHYtNS4ybC01LjItNS4yYy0wLjQtMC40LTAuNC0xLDAtMS40YzAuNC0wLjQsMS0wLjQsMS40LDBcblx0YzAsMCwwLDAsMCwwbDMuOCwzLjh2LTYuMmwtMi43LTIuN2MtMC40LTAuNC0wLjQtMSwwLTEuNGMwLjQtMC40LDEtMC40LDEuNCwwYzAsMCwwLDAsMCwwbDMuMywzLjN2M2wz'@;
put 'LjMtMy4zYzAuNC0wLjQsMS0wLjQsMS40LDBcblx0YzAsMCwwLDAsMCwwYzAuNCwwLjQsMC40LDEsMCwxLjRMMTksMTguOFYyOGM3LjItMC4zLDEyLjgtNi4zLDEyLjUtMTMuNVMyNS4yLDEuNywxOCwyeiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBk'@;
put 'PSJNMTgsMjhjLTAuMywwLTAuNiwwLTEsMHY1YzAsMC42LDAuNCwxLDEsMXMxLTAuNCwxLTF2LTVDMTguNywyOCwxOC4zLDI4LDE4LDI4eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxULkNsclNoYXBlRmlzaD0oMCx2LmNsckljb25TVkcpKCc8Y2lyY2xl'@;
put 'IGN4PSIxMS40OSIgY3k9IjE3LjUiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLjQ4LDkuMjlhMSwxLDAsMCwwLTEsMGMtMy4zNywyLTUuOTEsNS44MS02LjksNy40NUwyNC44NSwxOHMtMSwxLjYyLTEsMS42MmMtMS43'@;
put 'NiwyLjQ5LTUuMSw2LjM2LTguNzksNi4zNi00LjY1LDAtOC43NS02LjE1LTkuODQtNy45NCwxLjA5LTEuNzksNS4xOC03Ljk0LDkuODQtNy45NCwzLjU0LDAsNi43NywzLjU4LDguNTgsNi4wN2wuMjgtLjQ4cy4zNi0uNTEuOTMtMS4yNUMyMi43MiwxMS42NCwxOS4xOCw4LjA2LDE1LDguMDZj'@;
put 'LTYuNTksMC0xMS42Nyw5LjA3LTExLjg4LDkuNDZMMi44OSwxOGwuMjcuNDhjLjIxLjM5LDUuMjksOS40NiwxMS44OCw5LjQ2LDUuMDYsMCw5LjIyLTUuMzQsMTEtOEMyNiwyMCwyNy4xOCwxOCwyNy4xOCwxOGgwbC4wNy0uMTFhMTguMDYsMTguMDYsMCwwLDEsMS44OC0yLjc1czAsMCwwLDBh'@;
put 'MjAuMzEsMjAuMzEsMCwwLDEsMi44Ni0zVjIzLjg4YTIwLjkzLDIwLjkzLDAsMCwxLTMuNjEtNGwtLjE2LjI2aDBsLTEsMS41OWExOC43NCwxOC43NCwwLDAsMCw1LjIxLDQuOTUsMSwxLDAsMCwwLC41LjE0LDEuMTMsMS4xMywwLDAsMCwuNS0uMTMsMSwxLDAsMCwwLC41LS44N1YxMC4xNkEx'@;
put 'LDEsMCwwLDAsMzMuNDgsOS4yOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLFQuQ2xyU2hhcGVGb3JtPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMSwxMkg3YTEsMSwwLDAsMS0xLTFWN0ExLDEsMCwwLDEsNyw2SDIxYTEsMSwwLDAsMSwx'@;
put 'LDF2NEExLDEsMCwwLDEsMjEsMTJaTTgsMTBIMjBWNy45NEg4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIxLDE0LjA4SDdhMSwxLDAsMCwwLTEsMVYxOWExLDEsMCwwLDAsMSwxSDE4LjM2TDIyLDE2LjNWMTUuMDhBMSwxLDAsMCww'@;
put 'LDIxLDE0LjA4Wk0yMCwxOEg4VjE2SDIwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTExLjA2LDMxLjUxdi0uMDZsLjMyLTEuMzlINFY0aDIwVjE0LjI1TDI2LDEyLjM2VjNhMSwxLDAsMCwwLTEtMUgzQTEsMSwwLDAsMCwyLDNWMzFh'@;
put 'MSwxLDAsMCwwLDEsMWg4QTMuNDQsMy40NCwwLDAsMSwxMS4wNiwzMS41MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yMiwxOS4xN2wtLjc4Ljc5QTEsMSwwLDAsMCwyMiwxOS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik02LDI2Ljk0YTEsMSwwLDAsMCwxLDFoNC44NGwuMy0xLjMuMTMtLjU1LDAtLjA1SDhWMjRoNi4zNGwyLTJIN2ExLDEsMCwwLDAtMSwxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMz'@;
put 'LjQ5LDE2LjY3LDMwLjEyLDEzLjNhMS42MSwxLjYxLDAsMCwwLTIuMjgsMGgwTDE0LjEzLDI3LjA5LDEzLDMxLjlhMS42MSwxLjYxLDAsMCwwLDEuMjYsMS45LDEuNTUsMS41NSwwLDAsMCwuMzEsMCwxLjE1LDEuMTUsMCwwLDAsLjM3LDBsNC44NS0xLjA3TDMzLjQ5LDE5YTEuNiwxLjYsMCww'@;
put 'LDAsMC0yLjI3Wk0xOC43NywzMC45MWwtMy42Ni44MUwxNiwyOC4wOSwyNi4yOCwxNy43bDIuODIsMi44MlpNMzAuMjMsMTkuMzlsLTIuODItMi44MkwyOSwxNWwyLjg0LDIuODRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxULkNsclNoYXBlRnVl'@;
put 'bD0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjAuMTIsMzRINS45QTIuODEsMi44MSwwLDAsMSwzLDMxLjE5VjQuODZBMi45LDIuOSwwLDAsMSw2LDIuMDdIMjAuMjJBMi43MiwyLjcyLDAsMCwxLDIzLDQuODZWMzEuMTlBMi44MiwyLjgyLDAsMCwxLDIwLjEyLDM0Wk01LjksNEEuODcu'@;
put 'ODcsMCwwLDAsNSw0Ljg2VjMxLjE5YS44Ny44NywwLDAsMCwuODcuODdIMjAuMTJhLjk0Ljk0LDAsMCwwLC45NS0uODdWNC44NkEuOTQuOTQsMCwwLDAsMjAuMTIsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yOS41MywzNEEzLjUs'@;
put 'My41LDAsMCwxLDI2LDMwLjVWMjNhMiwyLDAsMCwwLTItMkgyMi41N2ExLDEsMCwwLDEsMC0ySDI0YTQsNCwwLDAsMSw0LDRWMzAuNWExLjUsMS41LDAsMCwwLDMsMFYxNy4zbC0zLjEzLTdBMi4yOSwyLjI5LDAsMCwwLDI1LjgsOWgtLjczYTEsMSwwLDEsMSwwLTJoLjczYTQuMyw0LjMsMCww'@;
put 'LDEsMy45MywyLjU1bDMuMjEsNy4xNmExLDEsMCwwLDEsLjA5LjQxVjMwLjVBMy41LDMuNSwwLDAsMSwyOS41MywzNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xOCw5SDhBMSwxLDAsMSwxLDgsN0gxOGExLDEsMCwwLDEsMCwyWiIg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE4LDEzSDhBMSwxLDAsMSwxLDgsMTFIMThBMSwxLDAsMSwxLDE4LDEzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTI1LDEyLjA4YTEs'@;
put 'MSwwLDAsMS0xLTF2LTZhMSwxLDAsMCwxLDIsMHY2QTEsMSwwLDAsMSwyNSwxMi4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPicpLFQuQ2xyU2hhcGVTbm93Zmxha2U9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LjA1LDMzLjYxYTEsMSww'@;
put 'LDAsMS0xLTFWMy4zN2ExLDEsMCwxLDEsMS45NSwwVjMyLjYzQTEsMSwwLDAsMSwxOC4wNSwzMy42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOC4wNiwxMC4wNywxNC41Miw2LjU0YTEsMSwwLDAsMSwwLTEuNDEsMSwxLDAsMCwx'@;
put 'LDEuNDEsMGwyLjEzLDIuMTIsMi4xMi0yLjEyYTEsMSwwLDAsMSwxLjQxLDAsMSwxLDAsMCwxLDAsMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMC44NSwzMS4xN2ExLDEsMCwwLDEtLjctLjI5TDE4LDI4Ljc2LDE1LjksMzAu'@;
put 'ODhhMSwxLDAsMCwxLTEuNDEsMCwxLDEsMCwwLDEsMC0xLjQyTDE4LDI1LjkzbDMuNTQsMy41M2ExLDEsMCwwLDEsMCwxLjQyQTEsMSwwLDAsMSwyMC44NSwzMS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMC45MiwyNi41YTEs'@;
put 'MSwwLDAsMS0uNS0uMTNsLTI2LTE1QTEsMSwwLDAsMSw0LjA3LDEwYTEsMSwwLDAsMSwxLjM3LS4zNmwyNiwxNWExLDEsMCwwLDEtLjUsMS44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik02LDE1LjM3YTEsMSwwLDAsMS0uMjYtMmwy'@;
put 'LjktLjc4TDcuODQsOS43M2ExLDEsMCwxLDEsMS45My0uNTJMMTEuMDcsMTQsNi4yNCwxNS4zM0EuODIuODIsMCwwLDEsNiwxNS4zN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0yNy4wNSwyNy41NGExLDEsMCwwLDEtMS0uNzVMMjQu'@;
put 'OCwyMmw0LjgyLTEuM2ExLDEsMCwxLDEsLjUyLDEuOTNsLTIuOS43OC43OCwyLjlhMSwxLDAsMCwxLS43MSwxLjIyQS43NS43NSwwLDAsMSwyNy4wNSwyNy41NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPjxwYXRoIGQ9Ik00Ljk0LDI2LjVhMSwxLDAs'@;
put 'MCwxLS41LTEuODdsMjYtMTVhMSwxLDAsMCwxLDEuMzYuMzYsMSwxLDAsMCwxLS4zNiwxLjM3bC0yNiwxNUExLDEsMCwwLDEsNC45NCwyNi41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+PHBhdGggZD0iTTguODEsMjcuNTRhLjc1Ljc1LDAsMCwxLS4y'@;
put 'NiwwLDEsMSwwLDAsMS0uNzEtMS4yMmwuNzgtMi45LTIuOS0uNzhBMSwxLDAsMCwxLDUsMjEuMzhhMSwxLDAsMCwxLDEuMjMtLjcxTDExLjA3LDIybC0xLjMsNC44MkExLDEsMCwwLDEsOC44MSwyNy41NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiAvPjxw'@;
put 'YXRoIGQ9Ik0yOS44OCwxNS4zN2EuODIuODIsMCwwLDEtLjI2LDBMMjQuOCwxNGwxLjI5LTQuODNBMSwxLDAsMSwxLDI4LDkuNzNsLS43OCwyLjg5LDIuOS43OGExLDEsMCwwLDEtLjI2LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgLz4nKSxULkNsclNo'@;
put 'YXBlVGFibGU9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTgsMzRhMSwxLDAsMCwxLTEtMVYyLjkyYTEsMSwwLDAsMSwyLDBWMzNBMSwxLDAsMCwxLDgsMzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTcsMzMuOTJhMSwxLDAs'@;
put 'MCwxLTEtMVY5LjFhMSwxLDAsMSwxLDIsMFYzMi45MkExLDEsMCwwLDEsMTcsMzMuOTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjYsMzRhMSwxLDAsMCwxLTEtMVY5YTEsMSwwLDAsMSwyLDBWMzNBMSwxLDAsMCwxLDI2LDM0WiIg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLjExLDE4aC0yNWExLDEsMCwxLDEsMC0yaDI1YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzMuMSwyNi45'@;
put 'NEg4LjFBMSwxLDAsMSwxLDguMSwyNWgyNWExLDEsMCwxLDEsMCwxLjkyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMzLDguOTJIM0ExLDEsMCwxLDEsMyw3SDMzYTEsMSwwLDEsMSwwLDEuOTRaIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxULkNsclNoYXBlVm9sdW1lPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNS44OCwzMkgxMmE0LDQsMCwwLDEtNC00VjExLjQ2TDIuMzEsNS43N2ExLDEsMCwwLDEtLjIyLTEuMDlBMSwxLDAsMCwxLDMsNC4wNkgyOC44NmExLDEsMCww'@;
put 'LDEsMSwxVjI4QTQsNCwwLDAsMSwyNS44OCwzMlpNNS40Myw2bDQuMjgsNC4zNGEuNzUuNzUsMCwwLDEsLjIxLjYzdjE3QTIuMTMsMi4xMywwLDAsMCwxMiwzMEgyNS44OEEyLjEsMi4xLDAsMCwwLDI4LDI4VjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg'@;
put 'Lz48cGF0aCBkPSJNMzMsMTZhMSwxLDAsMCwxLTEtMVY2SDI4Ljg2YS45Mi45MiwwLDAsMS0xLS45LDEsMSwwLDAsMSwxLTFIMzNhMSwxLDAsMCwxLDEsMVYxNUExLDEsMCwwLDEsMzMsMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJN'@;
put 'MjQsMTFIMThhMSwxLDAsMSwxLDAtMkgyNGExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTI0LDE1SDIxYTEsMSwwLDEsMSwwLTJIMjRhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0yNCwxOUgxOGExLDEsMCwxLDEsMC0ySDI0YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMjQsMjdIMThhMSwxLDAsMSwxLDAtMkgyNGExLDEsMCwxLDEsMCwy'@;
put 'WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTI0LDIzSDIxQTEsMSwwLDEsMSwyMSwyMUgyNEExLDEsMCwxLDEsMjQsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz4nKSxULkNsclNoYXBlQ3Jv'@;
put 'c3NoYWlycz0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMjlBMTEsMTEsMCwxLDEsMjksMTgsMTEsMTEsMCwwLDEsMTgsMjlaTTE4LDlhOSw5LDAsMSwwLDksOUE5LDksMCwwLDAsMTgsOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRo'@;
put 'IGQ9Ik0xOCwyM2E1LDUsMCwxLDEsNS01QTUsNSwwLDAsMSwxOCwyM1ptMC04YTMsMywwLDEsMCwzLDNBMywzLDAsMCwwLDE4LDE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTE4LDlhMSwxLDAsMCwxLTEtMVYyLjhhMSwxLDAsMCwx'@;
put 'LDIsMFY4QTEsMSwwLDAsMSwxOCw5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE4LDM0YTEsMSwwLDAsMS0xLTFWMjhhMSwxLDAsMCwxLDIsMHY1QTEsMSwwLDAsMSwxOCwzNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik04LDE5SDMuMTdhMSwxLDAsMCwxLDAtMkg4YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzMuMSwxOUgyOGExLDEsMCwwLDEsMC0yaDUuMWExLDEsMCwwLDEsMCwy'@;
put 'WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+JyksVC5DbHJTaGFwZUNpcmNsZT0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQs'@;
put 'MTQsMCwwLDAsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwzNEExNiwxNiwwLDEsMSwzNCwxOCwxNiwxNiwwLDAsMSwxOCwzNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksVC5DbHJT'@;
put 'aGFwZURvdENpcmNsZT0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTFhNyw3LDAsMSwxLTcsNyw3LDcsMCwwLDEsNy03IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCww'@;
put 'LDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLFQuQ2xyU2hhcGVCZXRhPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik03LjIxLDE0LjA3aDNhMS42MSwxLjYx'@;
put 'LDAsMCwxLDEuODEsMS41LDEuNDQsMS40NCwwLDAsMS0uODQsMS4zNCwxLjY3LDEuNjcsMCwwLDEsMS4xLDEuNTMsMS43NSwxLjc1LDAsMCwxLTIsMS42M0g3LjIxWm0yLjcxLDIuNDJjLjQ4LDAsLjgyLS4yOC44Mi0uNjdzLS4zNC0uNjUtLjgyLS42NUg4LjQ5djEuMzJabS4yLDIuNDhhLjc1'@;
put 'Ljc1LDAsMSwwLDAtMS40N0g4LjQ5VjE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE0LjU1LDE1LjIzdjEuMmgzdjEuMTZoLTN2MS4zMmgzLjMzdjEuMTZIMTMuMjZ2LTZoNC42MnYxLjE2WiIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTIwLjQxLDE1LjIzSDE4LjU0VjE0LjA3aDV2MS4xNkgyMS43djQuODRIMjAuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMjgsMTkuMTJIMjUuMzJsLS4z'@;
put 'OC45NUgyMy41bDIuNDQtNmgxLjQ0bDIuNDUsNkgyOC4zOFpNMjcuNTUsMThsLS44OS0yLjE5TDI1Ljc3LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTguMDYsMzBhLjg0Ljg0LDAsMCwxLS4zOC0uMDhBMSwxLDAsMCwxLDcu'@;
put 'MDYsMjlWMjVoLTRhMSwxLDAsMCwxLTEtMVYxMGExLDEsMCwwLDEsMS0xaDMwYTEsMSwwLDAsMSwxLDFWMjRhMSwxLDAsMCwxLTEsMUgxMy40OEw4Ljc3LDI5LjcxQTEsMSwwLDAsMSw4LjA2LDMwWm0tNC03aDRhMSwxLDAsMCwxLDEsMXYyLjU5bDMuMy0zLjNhMSwxLDAsMCwxLC43LS4yOWgx'@;
put 'OVYxMWgtMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuXG4gIDxwb2x5Z29uIHBvaW50cz0iMjUuOCwxOCAyNy41LDE4IDI2LjcsMTUuOCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuXHQ8cGF0aCBkPSJNMTAuNCwx'@;
put 'Ny41Yy0wLjEsMC0wLjIsMC0wLjMsMEg4LjVWMTlsMS42LDBjMC40LDAuMSwwLjgtMC4yLDAuOS0wLjZDMTEuMSwxOCwxMC44LDE3LjYsMTAuNCwxNy41eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuXHQ8cGF0aCBkPSJNMTAuNywxNS44YzAtMC40LTAuMy0w'@;
put 'LjctMC44LTAuN0g4LjV2MS4zaDEuNEMxMC40LDE2LjUsMTAuNywxNi4yLDEwLjcsMTUuOHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cblx0PHBhdGggZD0iTTMzLjEsOWgtMzBjLTAuNiwwLTEsMC40LTEsMXYxNGMwLDAuNiwwLjQsMSwxLDFoNHY0YzAsMC40'@;
put 'LDAuMiwwLjgsMC42LDAuOUM3LjgsMzAsNy45LDMwLDguMSwzMGMwLjMsMCwwLjUtMC4xLDAuNy0wLjNcblx0XHRsNC43LTQuN2gxOS42YzAuNiwwLDEtMC40LDEtMVYxMEMzNC4xLDkuNCwzMy42LDksMzMuMSw5eiBNMTAuNCwyMC4xYy0wLjEsMC0wLjEsMC0wLjIsMEg3LjJ2LTZoM2MwLjkt'@;
put 'MC4xLDEuNywwLjUsMS44LDEuNFxuXHRcdGMwLDAsMCwwLjEsMCwwLjFjMCwwLjYtMC4zLDEuMS0wLjgsMS4zYzAuNiwwLjIsMS4xLDAuOCwxLjEsMS41QzEyLjIsMTkuNCwxMS40LDIwLjEsMTAuNCwyMC4xeiBNMTcuOSwxNS4yaC0zLjN2MS4yaDN2MS4yaC0zdjEuM1xuXHRcdGgzLjN2MS4y'@;
put 'aC00LjZ2LTZoNC42VjE1LjJ6IE0yMS43LDIwLjFoLTEuM3YtNC44aC0xLjl2LTEuMmg1djEuMmgtMS44VjIwLjF6IE0yOC40LDIwLjFsLTAuNC0xaC0yLjdsLTAuNCwxaC0xLjRsMi40LTZoMS40bDIuNSw2XG5cdFx0SDI4LjR6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0'@;
put 'aC00Ii8+XG4nKSxULkNsclNoYXBlRmlyc3RBaWQ9KDAsdi5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik0zMiw2SDIzLjkxVjQuNUEyLjUsMi41LDAsMCwwLDIxLjQxLDJoLTdhMi41LDIuNSwwLDAsMC0yLjUsMi41VjZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwy'@;
put 'LDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk0xMy45MSw0LjVhLjUuNSwwLDAsMSwuNS0uNWg3YS41LjUsMCwwLDEsLjUuNVY2aC04Wk00LDI4VjhIMzJWMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMjAuMTUsMjUuMkgx'@;
put 'Ni43NGExLjMsMS4zLDAsMCwxLTEuMy0xLjNWMjEuMmgtMi43YTEuMywxLjMsMCwwLDEtMS4zLTEuM1YxNi41YTEuMywxLjMsMCwwLDEsMS4zLTEuM2gyLjdWMTIuNWExLjMsMS4zLDAsMCwxLDEuMy0xLjNoMy40MWExLjMsMS4zLDAsMCwxLDEuMjksMS4zdjIuN2gyLjcxYTEuMywxLjMsMCww'@;
put 'LDEsMS4yOSwxLjN2My40YTEuMywxLjMsMCwwLDEtMS4yOSwxLjNIMjEuNDR2Mi43QTEuMywxLjMsMCwwLDEsMjAuMTUsMjUuMlpNMTcsMjMuNmgyLjgxdi00aDRWMTYuOGgtNHYtNEgxN3Y0SDEzdjIuOGg0Wm03LjExLTYuOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0yIi8+XG5cbiAgPHBhdGggZD0iTTMyLDZIMjMuOTFWNC41QTIuNSwyLjUsMCwwLDAsMjEuNDEsMmgtN2EyLjUsMi41LDAsMCwwLTIuNSwyLjVWNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTEzLjkxLDQu'@;
put 'NWEuNS41LDAsMCwxLC41LS41aDdhLjUuNSwwLDAsMSwuNS41VjZoLThaTTI0LjY0LDE5LjlhLjUuNSwwLDAsMS0uNS41aC0zLjV2My41YS41LjUsMCwwLDEtLjUuNWgtMy40YS41LjUsMCwwLDEtLjUtLjVWMjAuNGgtMy41YS41LjUsMCwwLDEtLjUtLjVWMTYuNWEuNS41LDAsMCwxLC41LS41'@;
put 'aDMuNVYxMi41YS41LjUsMCwwLDEsLjUtLjVoMy40YS41LjUsMCwwLDEsLjUuNVYxNmgzLjVhLjUuNSwwLDAsMSwuNS41WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAnKSxULkNsclNoYXBlQ29sb3JQYWxldHRlPSgwLHYuY2xySWNvblNWRykoJzxwYXRo'@;
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 'My4yLDAsMCwxLDEuNjktMS43NiwzLDMsMCwwLDEsNCwxLjJBMi41NCwyLjU0LDAsMCwxLDI1Ljc5LDIwWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLFQuRXNzZW50aWFsU2hhcGVzPXsiYWRkLXRleHQiOlQuQ2xyU2hhcGVBZGRUZXh0LCJhbGFybS1vZmYi'@;
put 'OlQuQ2xyU2hhcGVBbGFybU9mZixwaW5ib2FyZDpULkNsclNoYXBlUGluYm9hcmQsbmV3OlQuQ2xyU2hhcGVOZXcsImJ1YmJsZS1leGNsYW1hdGlvbiI6VC5DbHJTaGFwZUJ1YmJsZUV4Y2xhbWF0aW9uLCJncmlkLXZpZXciOlQuQ2xyU2hhcGVHcmlkVmlldywiY3Vyc29yLWFycm93IjpULkNs'@;
put 'clNoYXBlQ3Vyc29yQXJyb3csImN1cnNvci1oYW5kIjpULkNsclNoYXBlQ3Vyc29ySGFuZCwiY3Vyc29yLWhhbmQtY2xpY2siOlQuQ2xyU2hhcGVDdXJzb3JIYW5kQ2xpY2ssImN1cnNvci1oYW5kLWdyYWIiOlQuQ2xyU2hhcGVDdXJzb3JIYW5kR3JhYiwiY3Vyc29yLWhhbmQtb3BlbiI6VC5D'@;
put 'bHJTaGFwZUN1cnNvckhhbmRPcGVuLCJjdXJzb3ItbW92ZSI6VC5DbHJTaGFwZUN1cnNvck1vdmUsImZpcnN0LWFpZCI6VC5DbHJTaGFwZUZpcnN0QWlkLHJlc2l6ZTpULkNsclNoYXBlUmVzaXplLG9iamVjdHM6VC5DbHJTaGFwZU9iamVjdHMsYm9vazpULkNsclNoYXBlQm9vayxhc3Rlcmlz'@;
put 'azpULkNsclNoYXBlQXN0ZXJpc2ssYnVnOlQuQ2xyU2hhcGVCdWcsc2Npc3NvcnM6VC5DbHJTaGFwZVNjaXNzb3JzLHRoZXJtb21ldGVyOlQuQ2xyU2hhcGVUaGVybW9tZXRlcixwZW5jaWw6VC5DbHJTaGFwZVBlbmNpbCxub3RlOlQuQ2xyU2hhcGVOb3RlLHJlZnJlc2g6VC5DbHJTaGFwZVJl'@;
put 'ZnJlc2gsc3luYzpULkNsclNoYXBlU3luYywidmlldy1saXN0IjpULkNsclNoYXBlVmlld0xpc3QsInZpZXctY2FyZHMiOlQuQ2xyU2hhcGVWaWV3Q2FyZHMsInRyZWUtdmlldyI6VC5DbHJTaGFwZVRyZWVWaWV3LGxpZ2h0YnVsYjpULkNsclNoYXBlTGlnaHRidWxiLGRvd25sb2FkOlQuQ2xy'@;
put 'U2hhcGVEb3dubG9hZCx1cGxvYWQ6VC5DbHJTaGFwZVVwbG9hZCxsb2NrOlQuQ2xyU2hhcGVMb2NrLHVubG9jazpULkNsclNoYXBlVW5sb2NrLHVzZXJzOlQuQ2xyU2hhcGVVc2VycywicG9wLW91dCI6VC5DbHJTaGFwZVBvcE91dCxmaWx0ZXI6VC5DbHJTaGFwZUZpbHRlcixwaW46VC5DbHJT'@;
put 'aGFwZVBpbixmaWxlOlQuQ2xyU2hhcGVGaWxlLHBsdXM6VC5DbHJTaGFwZVBsdXMsbWludXM6VC5DbHJTaGFwZU1pbnVzLCJtaW51cy1jaXJjbGUiOlQuQ2xyU2hhcGVNaW51c0NpcmNsZSwicGx1cy1jaXJjbGUiOlQuQ2xyU2hhcGVQbHVzQ2lyY2xlLGJhbjpULkNsclNoYXBlQmFuLCJ0aW1l'@;
put 'cy1jaXJjbGUiOlQuQ2xyU2hhcGVUaW1lc0NpcmNsZSx0cmFzaDpULkNsclNoYXBlVHJhc2gsY2lyY2xlOlQuQ2xyU2hhcGVDaXJjbGUsdGFnOlQuQ2xyU2hhcGVUYWcsdGFnczpULkNsclNoYXBlVGFncyxoaXN0b3J5OlQuQ2xyU2hhcGVIaXN0b3J5LGNsb2NrOlQuQ2xyU2hhcGVDbG9jaywi'@;
put 'YWxhcm0tY2xvY2siOlQuQ2xyU2hhcGVBbGFybUNsb2NrLGFycm93OmhlLkNsclNoYXBlQXJyb3csImNpcmNsZS1hcnJvdyI6VC5DbHJTaGFwZUNpcmNsZUFycm93LCJjaGlsZC1hcnJvdyI6VC5DbHJTaGFwZUNoaWxkQXJyb3csY29weTpULkNsclNoYXBlQ29weSxoZWxwOlQuQ2xyU2hhcGVI'@;
put 'ZWxwLGxvZ2luOlQuQ2xyU2hhcGVMb2dpbixsb2dvdXQ6VC5DbHJTaGFwZUxvZ291dCxwcmludGVyOlQuQ2xyU2hhcGVQcmludGVyLHdvcmxkOlQuQ2xyU2hhcGVXb3JsZCxzbGlkZXI6VC5DbHJTaGFwZVNsaWRlcixjbGlwYm9hcmQ6VC5DbHJTaGFwZUNsaXBib2FyZCxmaXJld2FsbDpULkNs'@;
put 'clNoYXBlRmlyZXdhbGwsbGlzdDpULkNsclNoYXBlTGlzdCxyZWRvOlQuQ2xyU2hhcGVSZWRvLHVuZG86VC5DbHJTaGFwZVVuZG8sc2Nyb2xsOlQuQ2xyU2hhcGVTY3JvbGwsImZpbGUtc2V0dGluZ3MiOlQuQ2xyU2hhcGVGaWxlU2V0dGluZ3MsInR3by13YXktYXJyb3dzIjpULkNsclNoYXBl'@;
put 'VHdvV2F5QXJyb3dzLHN3aXRjaDpULkNsclNoYXBlU3dpdGNoLHRvb2xzOlQuQ2xyU2hhcGVUb29scywid2luZG93LWNsb3NlIjpULkNsclNoYXBlV2luZG93Q2xvc2UsIndpbmRvdy1tYXgiOlQuQ2xyU2hhcGVXaW5kb3dNYXgsIndpbmRvdy1taW4iOlQuQ2xyU2hhcGVXaW5kb3dNaW4sIndp'@;
put 'bmRvdy1yZXN0b3JlIjpULkNsclNoYXBlV2luZG93UmVzdG9yZSwiem9vbS1pbiI6VC5DbHJTaGFwZVpvb21Jbiwiem9vbS1vdXQiOlQuQ2xyU2hhcGVab29tT3V0LGtleTpULkNsclNoYXBlS2V5LGxpYnJhcnk6VC5DbHJTaGFwZUxpYnJhcnksYm9sdDpULkNsclNoYXBlQm9sdCx3cmVuY2g6'@;
put 'VC5DbHJTaGFwZVdyZW5jaCxidWxsc2V5ZTpULkNsclNoYXBlQnVsbHNleWUsdGFyZ2V0OlQuQ2xyU2hhcGVUYXJnZXQsZmxhbWU6VC5DbHJTaGFwZUZsYW1lLGhvdXJnbGFzczpULkNsclNoYXBlSG91cmdsYXNzLCJuby1hY2Nlc3MiOlQuQ2xyU2hhcGVOb0FjY2Vzcyxvcmdhbml6YXRpb246'@;
put 'VC5DbHJTaGFwZU9yZ2FuaXphdGlvbixiYWxhbmNlOlQuQ2xyU2hhcGVCYWxhbmNlLCJpZC1iYWRnZSI6VC5DbHJTaGFwZUlkQmFkZ2UscmVwZWF0OlQuQ2xyU2hhcGVSZXBlYXQsImZpbGUtZ3JvdXAiOlQuQ2xyU2hhcGVGaWxlR3JvdXAscGFwZXJjbGlwOlQuQ2xyU2hhcGVQYXBlcmNsaXAs'@;
put 'c2hyaW5rOlQuQ2xyU2hhcGVTaHJpbmssImFjY2Vzc2liaWxpdHktMSI6VC5DbHJTaGFwZUFjY2Vzc2liaWxpdHkxLCJhY2Nlc3NpYmlsaXR5LTIiOlQuQ2xyU2hhcGVBY2Nlc3NpYmlsaXR5Miwic29ydC1ieSI6VC5DbHJTaGFwZVNvcnRCeSwiY29sbGFwc2UtY2FyZCI6VC5DbHJTaGFwZUNv'@;
put 'bGxhcHNlQ2FyZCwiZXhwYW5kLWNhcmQiOlQuQ2xyU2hhcGVFeHBhbmRDYXJkLGJyaWVmY2FzZTpULkNsclNoYXBlQnJpZWZjYXNlLCJjb2xvci1waWNrZXIiOlQuQ2xyU2hhcGVDb2xvclBpY2tlciwiY29weS10by1jbGlwYm9hcmQiOlQuQ2xyU2hhcGVDb3B5VG9DbGlwYm9hcmQsImZpbHRl'@;
put 'ci0yIjpULkNsclNoYXBlRmlsdGVyMiwiZHJhZy1oYW5kbGUiOlQuQ2xyU2hhcGVEcmFnSGFuZGxlLG1vb246VC5DbHJTaGFwZU1vb24sc3VuOlQuQ2xyU2hhcGVTdW4sd2FuZDpULkNsclNoYXBlV2FuZCxjbG9uZTpULkNsclNoYXBlQ2xvbmUsZGV0YWlsczpULkNsclNoYXBlRGV0YWlscywi'@;
put 'ZHJhZy1oYW5kbGUtY29ybmVyIjpULkNsclNoYXBlRHJhZ0hhbmRsZUNvcm5lcixlcmFzZXI6VC5DbHJTaGFwZUVyYXNlcixsYW5kc2NhcGU6VC5DbHJTaGFwZUxhbmRzY2FwZSxwYXN0ZTpULkNsclNoYXBlUGFzdGUscG9ydHJhaXQ6VC5DbHJTaGFwZVBvcnRyYWl0LCJmaWxlLXppcCI6VC5D'@;
put 'bHJTaGFwZUZpbGVaaXAsImZpbHRlci1vZmYiOlQuQ2xyU2hhcGVGaWx0ZXJPZmYscmVjeWNsZTpULkNsclNoYXBlUmVjeWNsZSx0cmVlOlQuQ2xyU2hhcGVUcmVlLGZpc2g6VC5DbHJTaGFwZUZpc2gsZm9ybTpULkNsclNoYXBlRm9ybSxmdWVsOlQuQ2xyU2hhcGVGdWVsLHNub3dmbGFrZTpU'@;
put 'LkNsclNoYXBlU25vd2ZsYWtlLHRhYmxlOlQuQ2xyU2hhcGVUYWJsZSwiZG90LWNpcmNsZSI6VC5DbHJTaGFwZURvdENpcmNsZSx2b2x1bWU6VC5DbHJTaGFwZVZvbHVtZSxjcm9zc2hhaXJzOlQuQ2xyU2hhcGVDcm9zc2hhaXJzLGJldGE6VC5DbHJTaGFwZUJldGEsImNvbG9yLXBhbGV0dGUi'@;
put 'OlQuQ2xyU2hhcGVDb2xvclBhbGV0dGV9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShULkVzc2VudGlhbFNoYXBlcywiZWRpdCIsKDAsay5kZXNjcmlwdG9yQ29uZmlnKShULkVzc2VudGlhbFNoYXBlcy5wZW5jaWwpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVC5Fc3NlbnRpYWxTaGFwZXMsIm5v'@;
put 'dGUtZWRpdCIsKDAsay5kZXNjcmlwdG9yQ29uZmlnKShULkVzc2VudGlhbFNoYXBlcy5ub3RlKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFQuRXNzZW50aWFsU2hhcGVzLCJncm91cCIsKDAsay5kZXNjcmlwdG9yQ29uZmlnKShULkVzc2VudGlhbFNoYXBlcy51c2VycykpLE9iamVjdC5kZWZp'@;
put 'bmVQcm9wZXJ0eShULkVzc2VudGlhbFNoYXBlcywiZG9jdW1lbnQiLCgwLGsuZGVzY3JpcHRvckNvbmZpZykoVC5Fc3NlbnRpYWxTaGFwZXMuZmlsZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShULkVzc2VudGlhbFNoYXBlcywiYWRkIiwoMCxrLmRlc2NyaXB0b3JDb25maWcpKFQuRXNzZW50'@;
put 'aWFsU2hhcGVzLnBsdXMpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVC5Fc3NlbnRpYWxTaGFwZXMsImNhbmNlbCIsKDAsay5kZXNjcmlwdG9yQ29uZmlnKShULkVzc2VudGlhbFNoYXBlcy5iYW4pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVC5Fc3NlbnRpYWxTaGFwZXMsInJlbW92ZSIsKDAs'@;
put 'ay5kZXNjcmlwdG9yQ29uZmlnKShULkVzc2VudGlhbFNoYXBlc1sidGltZXMtY2lyY2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVC5Fc3NlbnRpYWxTaGFwZXMsInNpZ24taW4iLCgwLGsuZGVzY3JpcHRvckNvbmZpZykoVC5Fc3NlbnRpYWxTaGFwZXMubG9naW4pKSxPYmplY3QuZGVm'@;
put 'aW5lUHJvcGVydHkoVC5Fc3NlbnRpYWxTaGFwZXMsInNpZ24tb3V0IiwoMCxrLmRlc2NyaXB0b3JDb25maWcpKFQuRXNzZW50aWFsU2hhcGVzLmxvZ291dCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShULkVzc2VudGlhbFNoYXBlcywibGlnaHRuaW5nIiwoMCxrLmRlc2NyaXB0b3JDb25maWcp'@;
put 'KFQuRXNzZW50aWFsU2hhcGVzLmJvbHQpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVC5Fc3NlbnRpYWxTaGFwZXMsImZsb3ctY2hhcnQiLCgwLGsuZGVzY3JpcHRvckNvbmZpZykoVC5Fc3NlbnRpYWxTaGFwZXMub3JnYW5pemF0aW9uKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFQuRXNzZW50'@;
put 'aWFsU2hhcGVzLCJhbGVydCIsKDAsay5kZXNjcmlwdG9yQ29uZmlnKShULkVzc2VudGlhbFNoYXBlc1siYnViYmxlLWV4Y2xhbWF0aW9uIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVC5Fc3NlbnRpYWxTaGFwZXMsInBpbm5lZCIsKDAsay5kZXNjcmlwdG9yQ29uZmlnKShULkVzc2VudGlh'@;
put 'bFNoYXBlcy5waW5ib2FyZCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShULkVzc2VudGlhbFNoYXBlcywiYXR0YWNobWVudCIsKDAsay5kZXNjcmlwdG9yQ29uZmlnKShULkVzc2VudGlhbFNoYXBlcy5wYXBlcmNsaXApKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVC5Fc3NlbnRpYWxTaGFwZXMs'@;
put 'ImF0dGFjaG1lbnQiLCgwLGsuZGVzY3JpcHRvckNvbmZpZykoVC5Fc3NlbnRpYWxTaGFwZXMucGFwZXJjbGlwKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFQuRXNzZW50aWFsU2hhcGVzLCJyZXNpemUtZG93biIsKDAsay5kZXNjcmlwdG9yQ29uZmlnKShULkVzc2VudGlhbFNoYXBlcy5zaHJp'@;
put 'bmspKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVC5Fc3NlbnRpYWxTaGFwZXMsInJlc2l6ZS11cCIsKDAsay5kZXNjcmlwdG9yQ29uZmlnKShULkVzc2VudGlhbFNoYXBlcy5yZXNpemUpKSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYm'@;
put 'd2luZG93LkNsYXJpdHlJY29ucy5hZGQoVC5Fc3NlbnRpYWxTaGFwZXMpfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL21lZGlhLXNoYXBlcy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAg'@;
put 'ICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9tZWRpYS1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlv'@;
put 'bih6ZSxULHNlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFQuTWVkaWFTaGFwZXM9VC5DbHJTaGFwZU1pY3JvcGhvbmVNdXRlPVQuQ2xyU2hhcGVNaWNyb3Bob25lPVQuQ2xyU2hhcGVWaWRlb0dhbGxlcnk9VC5DbHJTaGFw'@;
put 'ZVJlcGxheU9uZT1ULkNsclNoYXBlUmVwbGF5QWxsPVQuQ2xyU2hhcGVJbWFnZUdhbGxlcnk9VC5DbHJTaGFwZU11c2ljTm90ZT1ULkNsclNoYXBlRmlsbVN0cmlwPVQuQ2xyU2hhcGVIZWFkcGhvbmVzPVQuQ2xyU2hhcGVWb2x1bWVNdXRlPVQuQ2xyU2hhcGVWb2x1bWVVcD1ULkNsclNoYXBl'@;
put 'Vm9sdW1lRG93bj1ULkNsclNoYXBlU2h1ZmZsZT1ULkNsclNoYXBlVmlkZW9DYW1lcmE9VC5DbHJTaGFwZUNhbWVyYT1ULkNsclNoYXBlRmFzdEZvcndhcmQ9VC5DbHJTaGFwZVJld2luZD1ULkNsclNoYXBlUG93ZXI9VC5DbHJTaGFwZVN0b3A9VC5DbHJTaGFwZVN0ZXBGb3J3YXJkPVQuQ2xy'@;
put 'U2hhcGVQYXVzZT1ULkNsclNoYXBlUGxheT12b2lkIDA7dmFyIGs9c2UoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTtULkNsclNoYXBlUGxheT0oMCxrLmNsckljb25TVkcpKCc8cGF0'@;
put 'aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTguMDcsMzEuNkEyLjA3LDIuMDcsMCwwLDEsNiwyOS41M1Y2LjMyQTIuMDcsMi4wNywwLDAsMSw5LDQuNDdMMzIuMjEsMTYuMDhhMi4wNywyLjA3LDAsMCwxLDAsMy43TDksMzEuMzhBMi4wNiwyLjA2LDAs'@;
put 'MCwxLDguMDcsMzEuNlptMC0yNS4zNEw4LDYuMzJWMjkuNTNsLjEuMDZMMzEuMzEsMThhLjA2LjA2LDAsMCwwLDAtLjA2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi4xNiwxNi4wOCw4Ljk0LDQuNDdBMi4w'@;
put 'NywyLjA3LDAsMCwwLDYsNi4zMlYyOS41M2EyLjA2LDIuMDYsMCwwLDAsMywxLjg1TDMyLjE2LDE5Ljc3YTIuMDcsMi4wNywwLDAsMCwwLTMuN1oiLz4nKSxULkNsclNoYXBlUGF1c2U9KDAsay5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTEiIGQ9Ik0xMi45MywzMkg2LjA3QTIuMDcsMi4wNywwLDAsMSw0LDI5LjkzVjYuMDdBMi4wNywyLjA3LDAsMCwxLDYuMDcsNGg2Ljg3QTIuMDcsMi4wNywwLDAsMSwxNSw2LjA3VjI5LjkzQTIuMDcsMi4wNywwLDAsMSwxMi45MywzMlpNMTMsNkg2VjMwaDdaIi8+XG4gICAgICAgICAg'@;
put 'ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yOS45MywzMkgyMy4wN0EyLjA3LDIuMDcsMCwwLDEsMjEsMjkuOTNWNi4wN0EyLjA3LDIuMDcsMCwwLDEsMjMuMDcsNGg2Ljg3QTIuMDcsMi4wNywwLDAsMSwzMiw2LjA3VjI5LjkzQTIu'@;
put 'MDcsMi4wNywwLDAsMSwyOS45MywzMlpNMzAsNkgyM1YzMGg3WiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIHg9IjMuOTUiIHk9IjQiIHdpZHRoPSIxMSIgaGVpZ2h0PSIyOCIgcng9IjIuMDciIHJ5PSIyLjA3Ii8+XG4g'@;
put 'ICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgeD0iMjAuOTUiIHk9IjQiIHdpZHRoPSIxMSIgaGVpZ2h0PSIyOCIgcng9IjIuMDciIHJ5PSIyLjA3Ii8+JyksVC5DbHJTaGFwZVN0ZXBGb3J3YXJkPSgwLGsuY2xySWNvblNWRykoJzxw'@;
put 'YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNNSwzMi4yM2EyLDIsMCwwLDEtMi0yVjUuNzdBMiwyLDAsMCwxLDYuMTcsNC4xNEwyMy4yMywxNi4zOGEyLDIsMCwwLDEsMCwzLjI1aDBMNi4xNywzMS44NkEyLDIsMCwwLDEsNSwzMi4yM1pNNSw1Ljc3'@;
put 'VjMwLjIzTDIyLjA3LDE4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzEsMzJIMjhhMiwyLDAsMCwxLTItMlY2YTIsMiwwLDAsMSwyLTJoM2EyLDIsMCwwLDEsMiwyVjMwQTIsMiwwLDAsMSwzMSwzMlpN'@;
put 'MjgsNlYzMGgzVjZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTUsMzEuOWEyLDIsMCwwLDEtMi0yVjUuNDRBMiwyLDAsMCwxLDYuMTIsMy44MUwyMy4xOCwxNmEyLDIsMCwwLDEsMCwzLjI1aDBMNi4xMiwzMS41'@;
put 'MkEyLDIsMCwwLDEsNSwzMS45WiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIHg9IjI1Ljk1IiB5PSIzLjY3IiB3aWR0aD0iNyIgaGVpZ2h0PSIyOCIgcng9IjIiIHJ5PSIyIi8+JyksVC5DbHJTaGFwZVN0b3A9KDAsay5j'@;
put 'bHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMCwzMkg2YTIsMiwwLDAsMS0yLTJWNkEyLDIsMCwwLDEsNiw0SDMwYTIsMiwwLDAsMSwyLDJWMzBBMiwyLDAsMCwxLDMwLDMyWk02LDZWMzBIMzBWNloiLz5cbiAgICAgICAg'@;
put 'ICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiB4PSIzLjk2IiB5PSI0IiB3aWR0aD0iMjcuOTkiIGhlaWdodD0iMjgiIHJ4PSIyIiByeT0iMiIvPicpLFQuQ2xyU2hhcGVQb3dlcj0oMCxrLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWkt'@;
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 'LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxULkNsclNoYXBlUmV3aW5kPSgwLGsuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTcuMDksMzEuNThsLTE1LjMyLTEyYTIsMiwwLDAs'@;
put 'MSwwLTMuMTVsMTUuMzItMTJhMS45MywxLjkzLDAsMCwxLDIuMDYtLjIyQTEuNzcsMS43NywwLDAsMSwyMCw2djYuN0wzMC44Myw0LjQyYTEuOTMsMS45MywwLDAsMSwyLjA2LS4yMkEyLDIsMCwwLDEsMzQsNlYzMGEyLDIsMCwwLDEtMS4xMSwxLjc5LDEuOTQsMS45NCwwLDAsMS0yLjA2LS4y'@;
put 'MkwyMCwyMy4zMVYzMGExLjc3LDEuNzcsMCwwLDEtLjg1LDEuNzksMS45NCwxLjk0LDAsMCwxLTIuMDYtLjIyWk0zMiwzMGwuMDYtMjRMMTgsMTYuOFY2TDMsMTgsMTgsMzBWMTkuMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEi'@;
put 'IGQ9Ik0xNi45MiwzMS41OCwxLjYsMTkuNTdhMiwyLDAsMCwxLDAtMy4xNWwxNS4zMi0xMkExLjkzLDEuOTMsMCwwLDEsMTksNC4yLDEuODksMS44OSwwLDAsMSwyMCw2djYuN0wzMC42Niw0LjQyYTEuOTMsMS45MywwLDAsMSwyLjA2LS4yMkEyLDIsMCwwLDEsMzMuODMsNlYzMGEyLDIsMCww'@;
put 'LDEtMS4xMSwxLjc5LDEuOTQsMS45NCwwLDAsMS0yLjA2LS4yMkwyMCwyMy4zMVYzMGExLjg5LDEuODksMCwwLDEtMSwxLjc5LDEuOTQsMS45NCwwLDAsMS0yLjA2LS4yMloiLz4nKSxULkNsclNoYXBlRmFzdEZvcndhcmQ9KDAsay5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNy43NywzMS45MmEyLDIsMCwwLDEtLjg2LS4yQTEuODEsMS44MSwwLDAsMSwxNiwyOS45M3YtNi43TDUuMjQsMzEuNWExLjk0LDEuOTQsMCwwLDEtMi4wNi4yMiwyLDIsMCwwLDEtMS4xMS0xLjc5di0yNEEyLDIsMCwwLDEsMy4xOCw0'@;
put 'LjEyYTEuOTMsMS45MywwLDAsMSwyLjA2LjIyTDE2LDEyLjYxVjUuOTFhMS44MSwxLjgxLDAsMCwxLC45MS0xLjc5QTEuOTMsMS45MywwLDAsMSwxOSw0LjM0bDE1LjMyLDEyYTIsMiwwLDAsMSwwLDMuMTVMMTksMzEuNUEyLDIsMCwwLDEsMTcuNzcsMzEuOTJabTAtMTIuOFYyOS45M2wxNS4y'@;
put 'Ni0xMi0xNS4zMi0xMiwuMDYsMTAuODFMNCw1LjkxdjI0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE3LjcxLDMyYTIsMiwwLDAsMS0uODYtLjJBMS43NywxLjc3LDAsMCwxLDE2LDMwdi02LjdMNS4xNywzMS41OGEx'@;
put 'Ljk0LDEuOTQsMCwwLDEtMi4wNi4yMkEyLDIsMCwwLDEsMiwzMFY2QTIsMiwwLDAsMSwzLjExLDQuMmExLjkzLDEuOTMsMCwwLDEsMi4wNi4yMkwxNiwxMi42OVY2YTEuNzcsMS43NywwLDAsMSwuODUtMS43OSwxLjkzLDEuOTMsMCwwLDEsMi4wNi4yMmwxNS4zMiwxMmEyLDIsMCwwLDEsMCwz'@;
put 'LjE1bC0xNS4zMiwxMkEyLDIsMCwwLDEsMTcuNzEsMzJaIi8+JyksVC5DbHJTaGFwZUNhbWVyYT0oMCxrLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsOEgyNC43TDIzLjY0LDUuMjhBMiwyLDAsMCwwLDIxLjc4LDRIMTQuMjJhMiwyLDAsMCwwLTEuODcsMS4yOEwxMS4zLDhINGEyLDIsMCww'@;
put 'LDAtMiwyVjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMzIsOFptMCwyMkg0VjEwaDguNjdsMS41NS00aDcuNTZsMS41NSw0SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9'@;
put 'Ik05LDE5YTksOSwwLDEsMCw5LTlBOSw5LDAsMCwwLDksMTlabTE2LjQsMEE3LjQsNy40LDAsMSwxLDE4LDExLjYsNy40MSw3LjQxLDAsMCwxLDI1LjQsMTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTkuMzcs'@;
put 'MTIuODNhLjguOCwwLDAsMC0uOC0uOEg2LjE3YS44LjgsMCwwLDAsMCwxLjZoMi40QS44LjgsMCwwLDAsOS4zNywxMi44M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTIuMzQsMTlhNS41Nyw1LjU3LDAsMCww'@;
put 'LDMuMjQsNWwuODUtMS4zN2E0LDQsMCwxLDEsNC4xMS02LjYxbC44Ni0xLjM4QTUuNTYsNS41NiwwLDAsMCwxMi4zNCwxOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsOEgyNC43TDIzLjY0LDUuMjhBMiwy'@;
put 'LDAsMCwwLDIxLjc4LDRIMTQuMjJhMiwyLDAsMCwwLTEuODcsMS4yOEwxMS4zLDhINGEyLDIsMCwwLDAtMiwyVjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMzIsOFpNNi4xNywxMy42M2EuOC44LDAsMCwxLDAtMS42aDIuNGEuOC44LDAsMCwxLDAsMS42'@;
put 'Wk0xOCwyOGE5LDksMCwxLDEsOS05QTksOSwwLDAsMSwxOCwyOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS4xMSwxOS4wNmE3LjA3LDcuMDcsMCwwLDAsNC4xMSw2LjQxbDEuMDktMS43NGE1LDUsMCwxLDEsNS4y'@;
put 'Mi04LjM5bDEuMDktMS43NmE3LjA2LDcuMDYsMCwwLDAtMTEuNTEsNS40OFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSxULkNsclNoYXBlVmlkZW9DYW1lcmE9KDAsay5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEiIGQ9Ik0zNCwxMC4zNGEyLjExLDIuMTEsMCwwLDAtMS4xNi0xLjksMiwyLDAsMCwwLTIuMTMuMTVMMjYsMTEuNlY4YTIsMiwwLDAsMC0yLTJINmE0LDQsMCwwLDAtNCw0VjI2YTQsNCwwLDAsMCw0LDRIMjRhMiwyLDAsMCwwLDItMlYyNC40bDQuNjQsM2EyLjA3LDIuMDcs'@;
put 'MCwwLDAsMi4yLjJBMi4xMSwyLjExLDAsMCwwLDM0LDI1LjY2Wk0zMS45MywyNS43N2MtLjA2LDAtLjExLDAtLjE5LS4wNkwyNCwyMC43N1YyOEg2YTIsMiwwLDAsMS0yLTJWMTBBMiwyLDAsMCwxLDYsOEgyNHY3LjIzbDcuOC01YS4xMS4xMSwwLDAsMSwuMTMsMCwuMTEuMTEsMCwwLDEsLjA3'@;
put 'LjExVjI1LjY2QS4xMS4xMSwwLDAsMSwzMS45MywyNS43N1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi4zLDkuMzUsMjYsMTIuOVY4YTIsMiwwLDAsMC0yLTJINmE0LDQsMCwwLDAtNCw0VjI2YTQsNCwwLDAsMCw0'@;
put 'LDRIMjRhMiwyLDAsMCwwLDItMlYyMy4wOGw2LjMsMy41NUExLjEsMS4xLDAsMCwwLDM0LDI1Ljc3VjEwLjJBMS4xLDEuMSwwLDAsMCwzMi4zLDkuMzVaIi8+JyksVC5DbHJTaGFwZVNodWZmbGU9KDAsay5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEiIGQ9Ik0yMS42MSwxMWg4LjYybC0zLjMsMy4zYTEsMSwwLDEsMCwxLjQxLDEuNDJMMzQsMTAuMDhsLS43MS0uNzFoMEwyOC4zNCw0LjQzYTEsMSwwLDAsMC0xLjQxLDEuNDJMMzAuMTEsOUgyMWExLDEsMCwwLDAtLjg2LjVMMTcuNSwxNC4wOWwxLjE2LDJaIi8+XG4gICAg'@;
put 'ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTExLjA3LDI1LjA3SDNhMSwxLDAsMCwwLDAsMmg4LjY1YTEsMSwwLDAsMCwuODYtLjVMMTUuMTgsMjIsMTQsMjBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTI4LjM0LDIwLjE3YTEsMSwwLDAsMC0xLjQxLDEuNDJsMy41LDMuNUgyMS42MUwxMi41MSw5LjUzYTEsMSwwLDAsMC0uODYtLjVIM2ExLDEsMCwxLDAsMCwyaDguMDdsOS4xLDE1LjU1YTEsMSwwLDAsMCwuODYuNUgyOS45bC0zLDNhMSwx'@;
put 'LDAsMCwwLDEuNDEsMS40Mmw0Ljk1LTQuOTRoMGwuNzEtLjcxWiIvPicpLFQuQ2xyU2hhcGVWb2x1bWVEb3duPSgwLGsuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjMuNDEsMjUuMTFhMSwxLDAsMCwxLS41NC0xLjg1'@;
put 'LDYuMjEsNi4yMSwwLDAsMC0uMTktMTAuNjUsMSwxLDAsMSwxLDEtMS43M0E4LjIxLDguMjEsMCwwLDEsMjMuOTQsMjUsMSwxLDAsMCwxLDIzLjQxLDI1LjExWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwz'@;
put 'MmEyLDIsMCwwLDEtMS40Mi0uNTlMOS4xNCwyNEg0YTIsMiwwLDAsMS0yLTJWMTRhMiwyLDAsMCwxLDItMkg5LjIybDcuMzMtNy40MUEyLDIsMCwwLDEsMjAsNlYzMGEyLDIsMCwwLDEtMS4yNCwxLjg1QTIsMiwwLDAsMSwxOCwzMlpNNCwxNHY4SDkuNTZhMSwxLDAsMCwxLC43MS4yOEwxOCwz'@;
put 'MFY2bC03LjY1LDcuNjhhMSwxLDAsMCwxLS43MS4zWk0xOCw2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTIzLjQxLDI1LjExYTEsMSwwLDAsMS0uNTQtMS44NSw2LjIxLDYuMjEsMCwwLDAtLjE5LTEwLjY1LDEsMSww'@;
put 'LDEsMSwxLTEuNzNBOC4yMSw4LjIxLDAsMCwxLDIzLjk0LDI1LDEsMSwwLDAsMSwyMy40MSwyNS4xMVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xOC4zNCwzLjg3LDksMTJIM2ExLDEsMCwwLDAtMSwxVjIzYTEsMSww'@;
put 'LDAsMCwxLDFIOC44M2w5LjUxLDguM0ExLDEsMCwwLDAsMjAsMzEuNTVWNC42MkExLDEsMCwwLDAsMTguMzQsMy44N1oiLz4nKSxULkNsclNoYXBlVm9sdW1lVXA9KDAsay5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0y'@;
put 'My40MSwyNS4yNWExLDEsMCwwLDEtLjU0LTEuODUsNi4yMSw2LjIxLDAsMCwwLS4xOS0xMC42NSwxLDEsMCwxLDEsMS0xLjczLDguMjEsOC4yMSwwLDAsMSwuMjQsMTQuMDZBMSwxLDAsMCwxLDIzLjQxLDI1LjI1WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNS42MiwzMS4xOGExLDEsMCwwLDEtLjQ1LTEuODlBMTIuNDQsMTIuNDQsMCwwLDAsMjUsNi44OWExLDEsMCwxLDEsLjg3LTEuOCwxNC40NCwxNC40NCwwLDAsMSwuMjQsMjZBMSwxLDAsMCwxLDI1LjYyLDMxLjE4WiIvPlxuICAgICAgICAgICAg'@;
put 'PHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xOCwzMi4wNmEyLDIsMCwwLDEtMS40Mi0uNTlMOS4xNCwyNEg0YTIsMiwwLDAsMS0yLTJWMTRhMiwyLDAsMCwxLDItMkg5LjIybDcuMzMtNy4zOUEyLDIsMCwwLDEsMjAsNnYyNGEyLDIsMCwwLDEt'@;
put 'MS4yNCwxLjg1QTIsMiwwLDAsMSwxOCwzMi4wNlpNNCwxNHY4SDkuNTZhMSwxLDAsMCwxLC43MS4zTDE4LDMwLjA2VjZMMTAuMzUsMTMuN2ExLDEsMCwwLDEtLjcxLjNaTTE4LDZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBk'@;
put 'PSJNMjMuNDEsMjUuMjVhMSwxLDAsMCwxLS41NC0xLjg1LDYuMjEsNi4yMSwwLDAsMC0uMTktMTAuNjUsMSwxLDAsMSwxLDEtMS43Myw4LjIxLDguMjEsMCwwLDEsLjI0LDE0LjA2QTEsMSwwLDAsMSwyMy40MSwyNS4yNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp'@;
put 'ZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yNS42MiwzMS4xOGExLDEsMCwwLDEtLjQ1LTEuODlBMTIuNDQsMTIuNDQsMCwwLDAsMjUsNi44OWExLDEsMCwxLDEsLjg3LTEuOCwxNC40NCwxNC40NCwwLDAsMSwuMjQsMjZBMSwxLDAsMCwxLDI1LjYyLDMxLjE4WiIvPlxuICAgICAgICAgICAg'@;
put 'PHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTE4LjMzLDQsOS4wNywxMmgtNmExLDEsMCwwLDAtMSwxdjkuOTJhMSwxLDAsMCwwLDEsMUg4Ljg4bDkuNDYsOC4yNEExLDEsMCwwLDAsMjAsMzEuNDNWNC43MkExLDEsMCwwLDAsMTguMzMsNFoiLz4nKSxU'@;
put 'LkNsclNoYXBlVm9sdW1lTXV0ZT0oMCxrLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMuNjEsNi40MSw5LjE5LDEySDRhMiwyLDAsMCwwLTIsMnY4YTIsMiwwLDAsMCwyLDJIOS4xNGw3LjQxLDcuNDdBMiwyLDAsMCww'@;
put 'LDE4LDMyYTIsMiwwLDAsMCwuNzYtLjE1QTIsMiwwLDAsMCwyMCwzMFYyMi43N2w1Ljg5LDUuODljLS4yNS4xNS0uNDkuMjktLjc1LjQyYTEsMSwwLDAsMCwuOSwxLjc5LDE0LjQsMTQuNCwwLDAsMCwxLjMxLS43NWwyLjI4LDIuMjhMMzEsMzEsNSw1Wk0xOCwzMGwtNy43My03Ljc3QTEsMSww'@;
put 'LDAsMCw5LjU2LDIySDRWMTRIOS42NGExLDEsMCwwLDAsLjcxLS4zbC4yNi0uMjZMMTgsMjAuODFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI0Ljg5LDYuNjlBMTIuNDIsMTIuNDIsMCwwLDEsMjksMjYuMWwx'@;
put 'LjQyLDEuNDJBMTQuNDIsMTQuNDIsMCwwLDAsMjUuNzYsNC44OGExLDEsMCwxLDAtLjg3LDEuOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMjIuNjksMTIuNjJBNi4yNyw2LjI3LDAsMCwxLDI1LjgsMThhNi4x'@;
put 'Nyw2LjE3LDAsMCwxLTEuMjQsMy43MUwyNiwyMy4xM0E4LjE1LDguMTUsMCwwLDAsMjcuOCwxOGE4LjI4LDguMjgsMCwwLDAtNC4xLTcuMTEsMSwxLDAsMSwwLTEsMS43M1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBk'@;
put 'PSJNMTgsNnY5LjE1bDIsMlY2YTIsMiwwLDAsMC0zLjQyLTEuNDFMMTIsOS4xN2wxLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjQuODcsNi42OUExMi40MiwxMi40MiwwLDAsMSwyOC43NSwyNi4zbDEu'@;
put 'NDIsMS40MkExNC40MywxNC40MywwLDAsMCwyNS43NCw0Ljg4YTEsMSwwLDAsMC0uODcsMS44WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI3LjMsMjcuNjdoMGwtMy44NC0zLjg0LS41Ny0uNTdoMEw0LjYzLDUsMy4y'@;
put 'MSw2LjQxLDguOCwxMkgzYTEsMSwwLDAsMC0xLDFWMjNhMSwxLDAsMCwwLDEsMUg4LjgzbDkuNTEsOC4zQTEsMSwwLDAsMCwyMCwzMS41NVYyMy4ybDUuNTksNS41OWMtLjE3LjEtLjM0LjItLjUxLjI5YTEsMSwwLDAsMCwuOSwxLjc5Yy4zNy0uMTkuNzItLjQsMS4wOC0uNjJsMi4xNCwyLjE0'@;
put 'TDMwLjYxLDMxbC0zLjI1LTMuMjVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjIuNjksMTIuNjJBNi4yNyw2LjI3LDAsMCwxLDI1LjgsMThhNi4xNyw2LjE3LDAsMCwxLTEuNDIsMy45MmwxLjQyLDEuNDJhOC4xNiw4'@;
put 'LjE2LDAsMCwwLDItNS4zNCw4LjI4LDguMjgsMCwwLDAtNC4xLTcuMTEsMSwxLDAsMSwwLTEsMS43M1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0yMCw0LjYyYTEsMSwwLDAsMC0xLjY2LS43NWwtNi40Miw1LjZMMjAs'@;
put 'MTcuNTRaIi8+JyksVC5DbHJTaGFwZUhlYWRwaG9uZXM9KDAsay5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwzQTE0LjI3LDE0LjI3LDAsMCwwLDQsMTcuNVYzMUg5LjJBMi43NCwyLjc0LDAsMCwwLDEyLDI4LjMz'@;
put 'VjIxLjY3QTIuNzQsMi43NCwwLDAsMCw5LjIsMTlINlYxNy41QTEyLjI3LDEyLjI3LDAsMCwxLDE4LDUsMTIuMjcsMTIuMjcsMCwwLDEsMzAsMTcuNVYxOUgyNi44QTIuNzQsMi43NCwwLDAsMCwyNCwyMS42N3Y2LjY3QTIuNzQsMi43NCwwLDAsMCwyNi44LDMxSDMyVjE3LjVBMTQuMjcsMTQu'@;
put 'MjcsMCwwLDAsMTgsM1pNOS4yLDIxYS43NS43NSwwLDAsMSwuOC42N3Y2LjY3YS43NS43NSwwLDAsMS0uOC42N0g2VjIxWk0yNiwyOC4zM1YyMS42N2EuNzUuNzUsMCwwLDEsLjgtLjY3SDMwdjhIMjYuOEEuNzUuNzUsMCwwLDEsMjYsMjguMzNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFz'@;
put 'cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsM0ExNC4yNywxNC4yNywwLDAsMCw0LDE3LjVWMzFIOC4yQTEuNzQsMS43NCwwLDAsMCwxMCwyOS4zM1YyMi42N0ExLjc0LDEuNzQsMCwwLDAsOC4yLDIxSDZWMTcuNUExMi4yNywxMi4yNywwLDAsMSwxOCw1LDEyLjI3'@;
put 'LDEyLjI3LDAsMCwxLDMwLDE3LjVWMjFIMjcuOEExLjc0LDEuNzQsMCwwLDAsMjYsMjIuNjd2Ni42N0ExLjc0LDEuNzQsMCwwLDAsMjcuOCwzMUgzMlYxNy41QTE0LjI3LDE0LjI3LDAsMCwwLDE4LDNaIi8+JyksVC5DbHJTaGFwZUZpbG1TdHJpcD0oMCxrLmNsckljb25TVkcpKCc8cGF0aCBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLDRINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMCw0Wm0wLDI2SDZWNkgzMFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTQuNiwyMy4wN2ExLjI5LDEuMjksMCwwLDAsMS4yNC4wOWw4LjczLTRhMS4zLDEuMywwLDAsMCwwLTIuMzdoMGwtOC43My00QTEuMywxLjMsMCwwLDAsMTQsMTR2OEExLjI5LDEuMjksMCwwLDAsMTQuNiwyMy4wN1ptMS04LjZM'@;
put 'MjMuMzEsMTgsMTUuNiwyMS41MVoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSI4IiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtNCIgeD0iMTQiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiB4PSIyMCIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAg'@;
put 'PHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIHg9IjI2IiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgeD0iOCIgeT0iMjYiIHdpZHRo'@;
put 'PSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiB4PSIxNCIgeT0iMjYiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC05IiB4PSIyMCIgeT0iMjYiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMCIgeD0iMjYiIHk9IjI2IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIi8+XG4gICAgICAgICAgICA8'@;
put 'cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAsNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMwLDRaTTIwLDdoMnYzSDIwWk0xNCw3aDJ2M0gxNFpNMTAsMjlIOFYyNmgyWm0wLTE5'@;
put 'SDhWN2gyWm02LDE5SDE0VjI2aDJabTYsMEgyMFYyNmgyWm0zLjE2LTEwLjE2TDE1LjM5LDIzLjJBMSwxLDAsMCwxLDE0LDIyLjI4VjEzLjU3YTEsMSwwLDAsMSwxLjQxLS45MUwyNS4xNiwxN0ExLDEsMCwwLDEsMjUuMTYsMTguODRaTTI4LDI5SDI2VjI2aDJabTAtMTlIMjZWN2gyWiIvPicp'@;
put 'LFQuQ2xyU2hhcGVNdXNpY05vdGU9KDAsay5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiXG4gICAgICAgICAgICAgICAgZD0iTTMxLjY4LDYuMTZjLTEuOTItMy4zLTEwLjYtNC0xMS41OC00LjA5TDE5LDJWMjIuMzRhNS44OSw1'@;
put 'Ljg5LDAsMCwwLS44Mi0uNTYsOC4zMyw4LjMzLDAsMCwwLTYuNTMtLjQxQzcuNTcsMjIuNyw0LjkyLDI2LjUsNS43OCwyOS44NGE1LjMzLDUuMzMsMCwwLDAsMi42NiwzLjMyLDcuNDgsNy40OCwwLDAsMCwzLjYxLjg4QTkuNTQsOS41NCwwLDAsMCwxNSwzMy41N2MzLjY3LTEuMTgsNi4xNy00'@;
put 'LjMzLDYuMDYtNy4zNlY5LjM0YTI5LjE0LDI5LjE0LDAsMCwxLDYuNTUsMS40MywxLDEsMCwxLDAsLjcyLTEuODdBMzEuMzcsMzEuMzcsMCwwLDAsMjEsNy4zM1Y0LjE3YzMuMzMuMzYsOCwxLjM4LDguOTIsMywyLDMuNDEtMi4zMyw3LjM2LTIuMzcsNy40YTEsMSwwLDAsMCwxLjMzLDEuNDlD'@;
put 'MjkuMTUsMTUuODUsMzQuNSwxMSwzMS42OCw2LjE2Wk0xNC4zNSwzMS42N2E2LjQzLDYuNDMsMCwwLDEtNS0uMjYsMy4zMSwzLjMxLDAsMCwxLTEuNjktMi4wN2MtLjYtMi4zMywxLjQ1LTUuMDUsNC41OC02LjA2YTcuNTIsNy41MiwwLDAsMSwyLjMtLjM3LDUuNTIsNS41MiwwLDAsMSwyLjY1'@;
put 'LjYyLDMuMzEsMy4zMSwwLDAsMSwxLjY5LDIuMDdDMTkuNTQsMjcuOTQsMTcuNDksMzAuNjYsMTQuMzUsMzEuNjdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIlxuICAgICAgICAgICAgICAgIGQ9Ik0zMS42OCw2LjE2Yy0xLjky'@;
put 'LTMuMy0xMC42LTQtMTEuNTgtNC4wOUwxOSwyVjIyLjI5YTUuODgsNS44OCwwLDAsMC0uODEtLjU1LDguMzMsOC4zMywwLDAsMC02LjUzLS40MWMtNC4xMiwxLjMzLTYuNzcsNS4xMy01LjkxLDguNDdhNS4zMyw1LjMzLDAsMCwwLDIuNjYsMy4zMiw3LjQ4LDcuNDgsMCwwLDAsMy42MS44OEE5'@;
put 'LjU0LDkuNTQsMCwwLDAsMTUsMzMuNTJjMy43LTEuMTksNi4yLTQuMzcsNi4wNi03LjQyLDAsMCwwLDAsMCwwVjguNDljMSwuMTIsMi4zNy4zMywzLjgyLjY0YTExLjE3LDExLjE3LDAsMCwxLDQuMDYsMS40NmMxLC42Ni4zOCwxLjkuMzMsMmExMS44LDExLjgsMCwwLDEtMS42NiwyLDEsMSww'@;
put 'LDAsMCwxLjMzLDEuNDlDMjkuMTUsMTUuODUsMzQuNSwxMSwzMS42OCw2LjE2WiIvPicpLFQuQ2xyU2hhcGVJbWFnZUdhbGxlcnk9KDAsay5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLjEyLDEwSDMuODhBMS44OCwxLjg4LDAsMCwwLDIsMTEuODhWMzAuMTJBMS44OCwxLjg4LDAsMCwwLDMu'@;
put 'ODgsMzJIMzIuMTJBMS44OCwxLjg4LDAsMCwwLDM0LDMwLjEyVjExLjg4QTEuODgsMS44OCwwLDAsMCwzMi4xMiwxMFpNMzIsMzBINFYxMkgzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik04LjU2LDE5LjQ1YTMsMywwLDEsMC0zLTNB'@;
put 'MywzLDAsMCwwLDguNTYsMTkuNDVabTAtNC42QTEuNiwxLjYsMCwxLDEsNywxNi40NSwxLjYsMS42LDAsMCwxLDguNTYsMTQuODVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNNy45LDI4bDYtNiwzLjE4LDMuMThMMTQuMjYsMjhoMmw3'@;
put 'LjQ2LTcuNDZMMzAsMjYuNzd2LTJMMjQuMiwxOWEuNzEuNzEsMCwwLDAtMSwwbC01LjE2LDUuMTZMMTQuMzcsMjAuNWEuNzEuNzEsMCwwLDAtMSwwTDUuOTIsMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzAuMTQsM2gwYTEsMSww'@;
put 'LDAsMC0xLTFoLTIyYTEsMSwwLDAsMC0xLDFoMFY0aDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMyLjEyLDdWN2ExLDEsMCwwLDAtMS0xaC0yNmExLDEsMCwwLDAtMSwxaDBWOGgyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zMC4xNCwzaDBhMSwxLDAsMCwwLTEtMWgtMjJhMSwxLDAsMCwwLTEsMWgwVjRoMjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMi4xMiw3VjdhMSwxLDAsMCwwLTEtMWgtMjZhMSwx'@;
put 'LDAsMCwwLTEsMWgwVjhoMjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMi4xMiwxMEgzLjg4QTEuODgsMS44OCwwLDAsMCwyLDExLjg4VjMwLjEyQTEuODgsMS44OCwwLDAsMCwzLjg4LDMySDMyLjEyQTEuODgsMS44OCwwLDAsMCwzNCwz'@;
put 'MC4xMlYxMS44OEExLjg4LDEuODgsMCwwLDAsMzIuMTIsMTBaTTguNTYsMTMuNDVhMywzLDAsMSwxLTMsM0EzLDMsMCwwLDEsOC41NiwxMy40NVpNMzAsMjhoLTI0bDcuNDYtNy40N2EuNzEuNzEsMCwwLDEsMSwwbDMuNjgsMy42OEwyMy4yMSwxOWEuNzEuNzEsMCwwLDEsMSwwTDMwLDI0Ljc5'@;
put 'WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxULkNsclNoYXBlUmVwbGF5QWxsPSgwLGsuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNy40NiwyNi4yMmExLjQsMS40LDAsMCwwLDEtLjQybDUuNTktNS41NmExLjQzLDEuNDMsMCwwLDAsLjQyLTEsMS40Niwx'@;
put 'LjQ2LDAsMCwwLS40Mi0xbC01LjU5LTUuNTZhMS40MywxLjQzLDAsMCwwLTIuNDQsMVYyNC43OWExLjQxLDEuNDEsMCwwLDAsLjg4LDEuMzJBMS41NCwxLjU0LDAsMCwwLDE3LjQ2LDI2LjIyWm0uMTYtMTIuMTYsNS4xOSw1LjE2LTUuMTksNS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOC4wNiw1aC02LjdsMi45Mi0yLjY0QTEsMSwwLDAsMCwxMi45NC44OEw3LjMyLDYsMTIuOTQsMTFhMSwxLDAsMCwwLC42Ny4yNiwxLDEsMCwwLDAsLjc0LS4zMywxLDEsMCwwLDAtLjA3LTEuNDJMMTEuNDYsN2g2LjZBMTEuNzgsMTEu'@;
put 'NzgsMCwxLDEsNy43MSwyNC40MSwxLDEsMCwwLDAsNiwyNS4zNiwxMy43OCwxMy43OCwwLDEsMCwxOC4wNiw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksVC5DbHJTaGFwZVJlcGxheU9uZT0oMCxrLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTks'@;
put 'MjcuMjdhMSwxLDAsMCwwLDEtMVYxNGExLDEsMCwwLDAtMS0xSDE5YTMuOCwzLjgsMCwwLDAtMS4xLjIzbC0yLC42MmEuOTIuOTIsMCwwLDAtLjcyLjg2Ljg4Ljg4LDAsMCwwLC44OC44NiwxLjQ2LDEuNDYsMCwwLDAsLjQzLS4wOEwxOCwxNS4wN3YxMS4yQTEsMSwwLDAsMCwxOSwyNy4yN1oi'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOC4wNiw1aC02LjdsMi45Mi0yLjY0QTEsMSwwLDAsMCwxMi45NC44OEw3LjMyLDYsMTIuOTQsMTFhMSwxLDAsMCwwLC42Ny4yNiwxLDEsMCwwLDAsLjc0LS4zMywxLDEsMCwwLDAtLjA3LTEu'@;
put 'NDJMMTEuNDYsN2g2LjZBMTEuNzgsMTEuNzgsMCwxLDEsNy43MSwyNC40MSwxLDEsMCwwLDAsNiwyNS4zNiwxMy43OCwxMy43OCwwLDEsMCwxOC4wNiw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksVC5DbHJTaGFwZVZpZGVvR2FsbGVyeT0oMCxr'@;
put 'LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIuMTIsMTBIMy44OEExLjg4LDEuODgsMCwwLDAsMiwxMS44OFYzMC4xMkExLjg4LDEuODgsMCwwLDAsMy44OCwzMkgzMi4xMkExLjg4LDEuODgsMCwwLDAsMzQsMzAuMTJWMTEuODhBMS44OCwxLjg4LDAsMCwwLDMyLjEyLDEwWk0zMiwzMEg0VjEy'@;
put 'SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMwLjE0LDNoMGExLDEsMCwwLDAtMS0xaC0yMmExLDEsMCwwLDAtMSwxaDBWNGgyNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9'@;
put 'Ik0zMi4xMiw3VjdhMSwxLDAsMCwwLTEtMWgtMjZhMSwxLDAsMCwwLTEsMWgwVjhoMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMTIuODIsMjYuNzlhMS43NCwxLjc0LDAsMCwwLC45My4yOCwxLjY4LDEuNjgsMCwwLDAsLjY5LS4x'@;
put 'NWw5Ljc3LTQuMzZhMS42OSwxLjY5LDAsMCwwLDAtMy4xTDE0LjQ0LDE1LjFhMS43LDEuNywwLDAsMC0yLjM5LDEuNTV2OC43MkExLjcsMS43LDAsMCwwLDEyLjgyLDI2Ljc5Wm0uNjMtMTAuMTRhLjI5LjI5LDAsMCwxLC4xNC0uMjUuMy4zLDAsMCwxLC4xNiwwLC4yNy4yNywwLDAsMSwuMTIs'@;
put 'MGw5Ljc3LDQuMzVhLjI5LjI5LDAsMCwxLC4xOC4yOC4yOC4yOCwwLDAsMS0uMTguMjdsLTkuNzcsNC4zNmEuMjguMjgsMCwwLDEtLjI4LDAsLjMxLjMxLDAsMCwxLS4xNC0uMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzIuMTIs'@;
put 'MTBIMy44OEExLjg4LDEuODgsMCwwLDAsMiwxMS44OFYzMC4xMkExLjg4LDEuODgsMCwwLDAsMy44OCwzMkgzMi4xMkExLjg4LDEuODgsMCwwLDAsMzQsMzAuMTJWMTEuODhBMS44OCwxLjg4LDAsMCwwLDMyLjEyLDEwWk0yNC4xOCwyMS44M2wtOS43Nyw0LjM2QTEsMSwwLDAsMSwxMywyNS4y'@;
put 'OFYxNi41NmExLDEsMCwwLDEsMS40MS0uOTFMMjQuMTgsMjBBMSwxLDAsMCwxLDI0LjE4LDIxLjgzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAuMTQsM2gwYTEsMSwwLDAsMC0xLTFoLTIyYTEsMSwwLDAsMC0xLDFoMFY0aDI0WiIgY2xh'@;
put 'c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMzIuMTIsN1Y3YTEsMSwwLDAsMC0xLTFoLTI2YTEsMSwwLDAsMC0xLDFoMFY4aDI4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxULkNsclNoYXBlTWljcm9waG9uZT0o'@;
put 'MCxrLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMjRjMy45LDAsNy0zLjEsNy03VjljMC0zLjktMy4xLTctNy03cy03LDMuMS03LDd2OEMxMSwyMC45LDE0LjEsMjQsMTgsMjR6IE0xMyw5YzAtMi44LDIuMi01LDUtNXM1LDIuMiw1LDV2OFxuXHRcdGMwLDIuOC0yLjIsNS01LDVzLTUtMi4y'@;
put 'LTUtNVY5eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMwLDE3aC0yYzAsNS41LTQuNSwxMC0xMCwxMFM4LDIyLjUsOCwxN0g2YzAsNi4zLDQuOCwxMS40LDExLDExLjlWMzJoLTNjLTAuNiwwLTEsMC40LTEsMXMwLjQsMSwxLDFoOGMw'@;
put 'LjYsMCwxLTAuNCwxLTFcblx0XHRzLTAuNC0xLTEtMWgtM3YtMy4xQzI1LjIsMjguNCwzMCwyMy4zLDMwLDE3eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTE4LDI0YzMuOSwwLDctMy4xLDctN1Y5YzAtMy45LTMuMS03LTctN3MtNywz'@;
put 'LjEtNyw3djhDMTEsMjAuOSwxNC4xLDI0LDE4LDI0eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAsMTdoLTJjMCw1LjUtNC41LDEwLTEwLDEwUzgsMjIuNSw4LDE3SDZjMCw2LjMsNC44LDExLjQsMTEsMTEuOVYzMmgtM2MtMC42LDAtMSww'@;
put 'LjQtMSwxczAuNCwxLDEsMWg4YzAuNiwwLDEtMC40LDEtMVxuXHRcdHMtMC40LTEtMS0xaC0zdi0zLjFDMjUuMiwyOC40LDMwLDIzLjMsMzAsMTd6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLFQuQ2xyU2hhcGVNaWNyb3Bob25lTXV0ZT0oMCxrLmNscklj'@;
put 'b25TVkcpKCc8cGF0aCBkPSJNMzAsMTdoLTJjMCwxLjgtMC41LDMuNS0xLjQsNWwxLjUsMS41QzI5LjMsMjEuNSwyOS45LDE5LjMsMzAsMTd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgsNGMyLjgsMCw1LDIuMiw1LDV2OGMwLDAu'@;
put 'NC0wLjEsMC44LTAuMiwxLjJsMS42LDEuNmMwLjQtMC45LDAuNi0xLjgsMC42LTIuOFY5YzAtMy45LTMuMi03LTcuMS02Ljlcblx0XHRjLTIuOSwwLTUuNiwxLjktNi41LDQuN0wxMyw4LjNDMTMuNSw1LjksMTUuNiw0LjIsMTgsNHoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yNS4yLDI2LjZsNi45LDYuOWwxLjQtMS40TDQsMi42TDIuNiw0bDguNCw4LjRWMTdjMCwzLjksMy4xLDcsNyw3YzEuMywwLDIuNS0wLjMsMy42LTFsMi4yLDIuMkMyMi4xLDI2LjQsMjAuMSwyNywxOCwyN1xuXHRcdGMtNS40LDAuMi05LjgtNC4xLTEw'@;
put 'LTkuNGMwLTAuMiwwLTAuNCwwLTAuNkg2YzAuMSw2LjIsNC44LDExLjQsMTEsMTJ2M2gtM2MtMC42LDAtMSwwLjQtMSwxczAuNCwxLDEsMWg4YzAuNiwwLDEtMC40LDEtMVxuXHRcdHMtMC40LTEtMS0xaC0zdi0zQzIxLjIsMjguOCwyMy40LDI4LDI1LjIsMjYuNnogTTEzLjgsMTkuN0MxMy4z'@;
put 'LDE4LjksMTMsMTgsMTMsMTd2LTIuNmw3LjEsNy4xQzE3LjksMjIuNSwxNS4yLDIxLjgsMTMuOCwxOS43eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMwLDE3aC0yYzAsMS44LTAuNSwzLjUtMS40LDVsMS41LDEuNUMyOS4zLDIxLjUs'@;
put 'MjkuOSwxOS4zLDMwLDE3eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMjUsMTdWOWMwLTMuOS0zLjItNy03LjEtNi45Yy0yLjksMC01LjYsMS45LTYuNSw0LjdsMTMsMTNDMjQuOCwxOC45LDI1LDE3LjksMjUsMTd6IiBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yNS4yLDI2LjZsNi45LDYuOWwxLjQtMS40TDQsMi42TDIuNiw0bDguNCw4LjRWMTdjMCwzLjksMy4xLDcsNyw3YzEuMywwLDIuNS0wLjMsMy42LTFsMi4yLDIuMkMyMi4xLDI2LjQsMjAuMSwyNywxOCwyN1xuXHRcdGMtNS40'@;
put 'LDAuMi05LjgtNC4xLTEwLTkuNGMwLTAuMiwwLTAuNCwwLTAuNkg2YzAuMSw2LjIsNC44LDExLjQsMTEsMTJ2M2gtM2MtMC42LDAtMSwwLjQtMSwxczAuNCwxLDEsMWg4YzAuNiwwLDEtMC40LDEtMVxuXHRcdHMtMC40LTEtMS0xaC0zdi0zQzIxLjIsMjguOCwyMy40LDI4LDI1LjIsMjYuNnoi'@;
put 'IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JyksVC5NZWRpYVNoYXBlcz17cGxheTpULkNsclNoYXBlUGxheSxwYXVzZTpULkNsclNoYXBlUGF1c2UsInN0ZXAtZm9yd2FyZCI6VC5DbHJTaGFwZVN0ZXBGb3J3YXJkLHN0b3A6VC5DbHJTaGFwZVN0b3AscG93ZXI6'@;
put 'VC5DbHJTaGFwZVBvd2VyLHJld2luZDpULkNsclNoYXBlUmV3aW5kLCJmYXN0LWZvcndhcmQiOlQuQ2xyU2hhcGVGYXN0Rm9yd2FyZCxjYW1lcmE6VC5DbHJTaGFwZUNhbWVyYSwidmlkZW8tY2FtZXJhIjpULkNsclNoYXBlVmlkZW9DYW1lcmEsc2h1ZmZsZTpULkNsclNoYXBlU2h1ZmZsZSwi'@;
put 'dm9sdW1lLXVwIjpULkNsclNoYXBlVm9sdW1lVXAsInZvbHVtZS1kb3duIjpULkNsclNoYXBlVm9sdW1lRG93biwidm9sdW1lLW11dGUiOlQuQ2xyU2hhcGVWb2x1bWVNdXRlLGhlYWRwaG9uZXM6VC5DbHJTaGFwZUhlYWRwaG9uZXMsImZpbG0tc3RyaXAiOlQuQ2xyU2hhcGVGaWxtU3RyaXAs'@;
put 'Im11c2ljLW5vdGUiOlQuQ2xyU2hhcGVNdXNpY05vdGUsImltYWdlLWdhbGxlcnkiOlQuQ2xyU2hhcGVJbWFnZUdhbGxlcnksInJlcGxheS1hbGwiOlQuQ2xyU2hhcGVSZXBsYXlBbGwsInJlcGxheS1vbmUiOlQuQ2xyU2hhcGVSZXBsYXlPbmUsInZpZGVvLWdhbGxlcnkiOlQuQ2xyU2hhcGVW'@;
put 'aWRlb0dhbGxlcnksbWljcm9waG9uZTpULkNsclNoYXBlTWljcm9waG9uZSwibWljcm9waG9uZS1tdXRlIjpULkNsclNoYXBlTWljcm9waG9uZU11dGV9LHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25z'@;
put 'LmFkZChULk1lZGlhU2hhcGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9zb2NpYWwtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNv'@;
put 'bnMvc3JjL3NoYXBlcy9zb2NpYWwtc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKHplLFQsc2UpeyJ1c2Ugc3Ry'@;
put 'aWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoVCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksVC5Tb2NpYWxTaGFwZXM9VC5DbHJTaGFwZUhhc2h0YWc9VC5DbHJTaGFwZUNyb3duPVQuQ2xyU2hhcGVUaHVtYnNEb3duPVQuQ2xyU2hhcGVUaHVtYnNVcD1ULkNsclNoYXBlU2FkRmFjZT1ULkNs'@;
put 'clNoYXBlTmV1dHJhbEZhY2U9VC5DbHJTaGFwZUhhcHB5RmFjZT1ULkNsclNoYXBlUGljdHVyZT1ULkNsclNoYXBlQ2hhdEJ1YmJsZT1ULkNsclNoYXBlVGFsa0J1YmJsZXM9VC5DbHJTaGFwZUhlYXJ0QnJva2VuPVQuQ2xyU2hhcGVIZWFydD1ULkNsclNoYXBlSW5ib3g9VC5DbHJTaGFwZUZs'@;
put 'YWc9VC5DbHJTaGFwZVRhc2tzPVQuQ2xyU2hhcGVFbnZlbG9wZT1ULkNsclNoYXBlQm9va21hcms9VC5DbHJTaGFwZUhhbGZTdGFyPVQuQ2xyU2hhcGVTdGFyPVQuQ2xyU2hhcGVTaGFyZT12b2lkIDA7dmFyIGs9c2UoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9q'@;
put 'ZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKSx2PXNlKAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIiksaGU9c2UoCi8qISAuL2NvcmUtc2hhcGVzICovCiIu'@;
put 'L3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMiKTtULkNsclNoYXBlU2hhcmU9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yNy41MywyNGE1LDUsMCwwLDAtMy42LDEuNTVMMTEuNzQs'@;
put 'MTkuNDVhNC40Nyw0LjQ3LDAsMCwwLDAtMi44bDEyLjIxLTYuMjFhNS4xMiw1LjEyLDAsMSwwLTEuMDctMS43TDEwLjc5LDE0Ljg5YTUsNSwwLDEsMCwwLDYuMzNsMTIuMDYsNi4wN0E0LjkzLDQuOTMsMCwwLDAsMjIuNTQsMjlhNSw1LDAsMSwwLDUtNVptMC0yMGEzLDMsMCwxLDEtMywzQTMs'@;
put 'MywwLDAsMSwyNy41Myw0Wk03LDIxYTMsMywwLDEsMSwzLTNBMywzLDAsMCwxLDcsMjFaTTI3LjUzLDMyYTMsMywwLDEsMSwzLTNBMywzLDAsMCwxLDI3LjUzLDMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0y'@;
put 'Ny41MywyNGE1LDUsMCwwLDAtMy42LDEuNTVMMTEuNzQsMTkuNDVhNC40Nyw0LjQ3LDAsMCwwLDAtMi44bDEyLjIxLTYuMjFhNS4xMiw1LjEyLDAsMSwwLTEuMDctMS43TDEwLjc5LDE0Ljg5YTUsNSwwLDEsMCwwLDYuMzNsMTIuMDYsNi4wN0E0LjkzLDQuOTMsMCwwLDAsMjIuNTQsMjlhNSw1'@;
put 'LDAsMSwwLDUtNVoiLz4nKSxULkNsclNoYXBlU3Rhcj0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LjE5LDM0YTIuMjIsMi4yMiwwLDAsMS0xLjI0LS4zOGwtNy40Ni01YS4yMi4yMiwwLDAsMC0uMjUsMGwt'@;
put 'Ny40Niw1QTIuMjIsMi4yMiwwLDAsMSw3LjQsMzEuMjFsMi40NS04LjY0YS4yMy4yMywwLDAsMC0uMDgtLjI0TDIuNzEsMTYuNzhhMi4yMiwyLjIyLDAsMCwxLDEuMjktNGw5LS4zNGEuMjMuMjMsMCwwLDAsLjItLjE1bDMuMS04LjQzYTIuMjIsMi4yMiwwLDAsMSw0LjE3LDBsMy4xLDguNDNh'@;
put 'LjIzLjIzLDAsMCwwLC4yLjE1bDksLjM0YTIuMjIsMi4yMiwwLDAsMSwxLjI5LDRMMjcsMjIuMzNhLjIyLjIyLDAsMCwwLS4wOC4yNGwyLjQ1LDguNjRBMi4yMywyLjIzLDAsMCwxLDI3LjE5LDM0Wm0tOC44Mi03LjQyQTIuMjEsMi4yMSwwLDAsMSwxOS42LDI3bDcuNDYsNWEuMjIuMjIsMCww'@;
put 'LDAsLjM0LS4yNWwtMi40NS04LjY0YTIuMjEsMi4yMSwwLDAsMSwuNzctMi4zNWw3LjA2LTUuNTVhLjIyLjIyLDAsMCwwLS4xMy0uNGwtOS0uMzRhMi4yMiwyLjIyLDAsMCwxLTItMS40NmwtMy4xLTguNDNhLjIyLjIyLDAsMCwwLS40MiwwTDE1LjA2LDEzYTIuMjIsMi4yMiwwLDAsMS0yLDEu'@;
put 'NDZsLTksLjM0YS4yMi4yMiwwLDAsMC0uMTMuNEwxMSwyMC43NmEyLjIyLDIuMjIsMCwwLDEsLjc3LDIuMzVMOS4zMywzMS43NWEuMjEuMjEsMCwwLDAsLjA4LjI0LjIuMiwwLDAsMCwuMjYsMGw3LjQ2LTVBMi4yMiwyLjIyLDAsMCwxLDE4LjM2LDI2LjYyWiIvPlxuICAgICAgICAgICAgICAg'@;
put 'IDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNCwxNi43OGEyLjIyLDIuMjIsMCwwLDAtMS4yOS00bC05LS4zNGEuMjMuMjMsMCwwLDEtLjItLjE1TDIwLjQsMy44OWEyLjIyLDIuMjIsMCwwLDAtNC4xNywwbC0zLjEsOC40M2EuMjMuMjMsMCwwLDEt'@;
put 'LjIuMTVsLTksLjM0YTIuMjIsMi4yMiwwLDAsMC0xLjI5LDRsNy4wNiw1LjU1YS4yMy4yMywwLDAsMSwuMDguMjRMNy4zNSwzMS4yMWEyLjIyLDIuMjIsMCwwLDAsMy4zOCwyLjQ1bDcuNDYtNWEuMjIuMjIsMCwwLDEsLjI1LDBsNy40Niw1YTIuMiwyLjIsMCwwLDAsMi41NSwwLDIuMiwyLjIs'@;
put 'MCwwLDAsLjgzLTIuNGwtMi40NS04LjY0YS4yMi4yMiwwLDAsMSwuMDgtLjI0WiIvPicpLFQuQ2xyU2hhcGVIYWxmU3Rhcj0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTM0LDE2Ljc4YTIuMjIsMi4yMiwwLDAs'@;
put 'MC0xLjI5LTRsLTktLjM0YS4yMy4yMywwLDAsMS0uMi0uMTVMMjAuNCwzLjg5YTIuMjIsMi4yMiwwLDAsMC00LjE3LDBsLTMuMSw4LjQzYS4yMy4yMywwLDAsMS0uMi4xNWwtOSwuMzRhMi4yMiwyLjIyLDAsMCwwLTEuMjksNGw3LjA2LDUuNTVhLjIyLjIyLDAsMCwxLC4wOC4yNEw3LjM1LDMx'@;
put 'LjIxQTIuMjMsMi4yMywwLDAsMCw5LjQ5LDM0YTIuMjIsMi4yMiwwLDAsMCwxLjI0LS4zOGw3LjQ2LTVhLjIyLjIyLDAsMCwxLC4yNSwwbDcuNDYsNWEyLjIyLDIuMjIsMCwwLDAsMy4zOC0yLjQ1bC0yLjQ1LTguNjRhLjIzLjIzLDAsMCwxLC4wOC0uMjRaTTE4LjMzLDI2LjYyaDBhMi4yMSwy'@;
put 'LjIxLDAsMCwwLTEuMjQuMzhMOS42MiwzMmEuMjIuMjIsMCwwLDEtLjM0LS4yNWwyLjQ1LTguNjRBMi4yMSwyLjIxLDAsMCwwLDExLDIwLjc2TDMuOSwxNS4yMWEuMjIuMjIsMCwwLDEsLjEzLS40bDktLjM0QTIuMjIsMi4yMiwwLDAsMCwxNSwxM2wzLjEtOC40M2EuMi4yLDAsMCwxLC4yMS0u'@;
put 'MTVoMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzQsMTYuNzhhMi4yMiwyLjIyLDAsMCwwLTEuMjktNGwtOS0uMzRhLjIzLjIzLDAsMCwxLS4yLS4xNUwyMC40LDMuODlhMi4yMiwyLjIyLDAsMCwwLTQuMTcs'@;
put 'MGwtMy4xLDguNDNhLjIzLjIzLDAsMCwxLS4yLjE1bC05LC4zNGEyLjIyLDIuMjIsMCwwLDAtMS4yOSw0bDcuMDYsNS41NWEuMjMuMjMsMCwwLDEsLjA4LjI0TDcuMzUsMzEuMjFhMi4yMiwyLjIyLDAsMCwwLDMuMzgsMi40NWw3LjQ2LTVhLjIyLjIyLDAsMCwxLC4yNSwwbDcuNDYsNWEyLjIs'@;
put 'Mi4yLDAsMCwwLDIuNTUsMCwyLjIsMi4yLDAsMCwwLC44My0yLjRsLTIuNDUtOC42NGEuMjIuMjIsMCwwLDEsLjA4LS4yNFpNMjQuOSwyMy4xMWwyLjQ1LDguNjRBLjIyLjIyLDAsMCwxLDI3LDMybC03LjQ2LTVhMi4yMSwyLjIxLDAsMCwwLTEuMjQtLjM4aDBWNC40NGgwYS4yLjIsMCwwLDEs'@;
put 'LjIxLjE1TDIxLjYyLDEzYTIuMjIsMi4yMiwwLDAsMCwyLDEuNDZsOSwuMzRhLjIyLjIyLDAsMCwxLC4xMy40bC03LjA2LDUuNTVBMi4yMSwyLjIxLDAsMCwwLDI0LjksMjMuMTFaIi8+JyksVC5DbHJTaGFwZUJvb2ttYXJrPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjYsMzRhMiwyLDAsMCwxLTEuNDEtLjU4TDE4LDI2LjgybC02LjU0LDYuNTJBMiwyLDAsMCwxLDgsMzEuOTNWNGEyLDIsMCwwLDEsMi0ySDI2YTIsMiwwLDAsMSwyLDJWMzJhMiwyLDAsMCwxLTIsMlptMC0yaDBWNEgxMFYzMS45M0wx'@;
put 'OCwyNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjYsMkgxMEEyLDIsMCwwLDAsOCw0VjMxLjkzYTIsMiwwLDAsMCwzLjQyLDEuNDFsNi41NC02LjUyLDYuNjMsNi42QTIsMiwwLDAsMCwyOCwzMlY0QTIsMiww'@;
put 'LDAsMCwyNiwyWiIvPicpLFQuQ2xyU2hhcGVFbnZlbG9wZT0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIs'@;
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+JyksVC5DbHJT'@;
put 'aGFwZVRhc2tzPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjkuMjksMzRINi43MUExLjcsMS43LDAsMCwxLDUsMzIuMzFWNi42OUExLjc1LDEuNzUsMCwwLDEsNyw1SDlWN0g3VjMySDI5VjdIMjdWNWgyLjI1'@;
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 'LWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxULkNsclNoYXBlRmxhZz0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTYsMzRhMSwxLDAsMCwxLTEt'@;
put 'MVYzQTEsMSwwLDAsMSw3LDNWMzNBMSwxLDAsMCwxLDYsMzRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMC41NSwzLjgyYTEsMSwwLDAsMC0xLDAsMTQuOSwxNC45LDAsMCwxLTYuMTMsMS4xNiwxMy4x'@;
put 'MSwxMy4xMSwwLDAsMS01LjE4LTEuNDksMTIuNzgsMTIuNzgsMCwwLDAtNS0xLjQ1QTEwLjg2LDEwLjg2LDAsMCwwLDksMi44NVY1LjA4QTguOCw4LjgsMCwwLDEsMTMuMjUsNGExMS4yMiwxMS4yMiwwLDAsMSw0LjIsMS4yOCwxNC44NCwxNC44NCwwLDAsMCw2LDEuNjZBMTguNzUsMTguNzUs'@;
put 'MCwwLDAsMjksNi4xMlYxOC45NWExNi4xNiwxNi4xNiwwLDAsMS01LjU4LjkzLDEzLjExLDEzLjExLDAsMCwxLTUuMTgtMS40OSwxMi43OCwxMi43OCwwLDAsMC01LTEuNDVBMTAuODYsMTAuODYsMCwwLDAsOSwxNy43OVYyMGE4LjgsOC44LDAsMCwxLDQuMjUtMS4wOCwxMS4yMiwxMS4yMiww'@;
put 'LDAsMSw0LjIsMS4yOCwxNC44NCwxNC44NCwwLDAsMCw2LDEuNjYsMTYuNzksMTYuNzksMCwwLDAsNy0xLjM3LDEsMSwwLDAsMCwuNTUtLjg5VjQuNjdBMSwxLDAsMCwwLDMwLjU1LDMuODJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMSIgZD0iTTUuOTIsMmExLDEsMCwwLDAtMSwxVjMzYTEsMSwwLDAsMCwyLDBWM0ExLDEsMCwwLDAsNS45MiwyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0zMC41LDMuODJhMSwxLDAsMCwwLTEsMCwx'@;
put 'NC45LDE0LjksMCwwLDEtNi4xMywxLjE2LDEzLjExLDEzLjExLDAsMCwxLTUuMTgtMS40OUExMi43OCwxMi43OCwwLDAsMCwxMy4yLDIsMTAuODYsMTAuODYsMCwwLDAsOSwyLjg1VjIwYTguOCw4LjgsMCwwLDEsNC4yNS0xLjA4LDExLjIyLDExLjIyLDAsMCwxLDQuMiwxLjI4LDE0Ljg0LDE0'@;
put 'Ljg0LDAsMCwwLDYsMS42NiwxNi43OSwxNi43OSwwLDAsMCw3LTEuMzcsMSwxLDAsMCwwLC41NS0uODlWNC42N0ExLDEsMCwwLDAsMzAuNSwzLjgyWiIvPicpLFQuQ2xyU2hhcGVJbmJveD0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTIuMjMsMTMuMDlhMSwxLDAsMCwwLDAsMS40MUwx'@;
put 'OCwyMC4zbDUuNzktNS43OWExLDEsMCwwLDAtMS40MS0xLjQxTDE5LDE2LjQ3VjJBMSwxLDAsMCwwLDE4LDFhMSwxLDAsMCwwLTEsMXYxNC41bC0zLjM4LTMuMzhBMSwxLDAsMCwwLDEyLjIzLDEzLjA5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAg'@;
put 'ICAgICAgICAgIDxwYXRoIGQ9Ik0yOS41LDVIMjJWN2g3VjIxSDIzLjYxbC0uMS44OWE1LjQyLDUuNDIsMCwwLDEtMTAuNzcsMGwtLjEtLjg5SDdWN2g3VjVINi41QTEuNSwxLjUsMCwwLDAsNSw2LjV2MjVBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41VjYu'@;
put 'NUExLjUsMS41LDAsMCwwLDI5LjUsNVpNMjksMzFIN1YyM2gzLjkxYTcuNDIsNy40MiwwLDAsMCwxNC40NCwwSDI5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi4yMywxMy4wOWExLDEsMCwwLDAsMCwxLjQx'@;
put 'TDE4LDIwLjNsNS43OS01Ljc5YTEsMSwwLDAsMC0xLjQxLTEuNDFMMTksMTYuNDdWMkExLDEsMCwwLDAsMTgsMWExLDEsMCwwLDAtMSwxdjE0LjVsLTMuMzgtMy4zOEExLDEsMCwwLDAsMTIuMjMsMTMuMDlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNTIsNy41MiwwLDAsMS0xLS4wN1YyMUgyMy42MWwtLjEuODlhNS40Miw1LjQyLDAsMCwxLTEwLjc3LDBsLS4xLS44OUg3VjdoN1Y1SDYuNUExLjUsMS41LDAsMCwwLDUsNi41djI1QTEuNSwxLjUsMCwwLDAs'@;
put 'Ni41LDMzaDIzQTEuNSwxLjUsMCwwLDAsMzEsMzEuNVYxMy40M0E3LjUyLDcuNTIsMCwwLDEsMzAsMTMuNVpNMjksMzFIN1YyM2gzLjkxYTcuNDIsNy40MiwwLDAsMCwxNC40NCwwSDI5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2Vk'@;
put 'Ii8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLFQuQ2xyU2hhcGVIZWFydD0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBkPSJN'@;
put 'MTgsMzIuNDNhMSwxLDAsMCwxLS42MS0uMjFDMTEuODMsMjcuOSw4LDI0LjE4LDUuMzIsMjAuNTEsMS45LDE1LjgyLDEuMTIsMTEuNDksMyw3LjY0YzEuMzQtMi43NSw1LjE5LTUsOS42OS0zLjY5QTkuODcsOS44NywwLDAsMSwxOCw3LjcyYTkuODcsOS44NywwLDAsMSw1LjMxLTMuNzdjNC40'@;
put 'OS0xLjI5LDguMzUuOTQsOS42OSwzLjY5LDEuODgsMy44NSwxLjEsOC4xOC0yLjMyLDEyLjg3QzI4LDI0LjE4LDI0LjE3LDI3LjksMTguNjEsMzIuMjJBMSwxLDAsMCwxLDE4LDMyLjQzWk0xMC4xMyw1LjU4QTUuOSw1LjksMCwwLDAsNC44LDguNTFjLTEuNTUsMy4xOC0uODUsNi43MiwyLjE0'@;
put 'LDEwLjgxQTU3LjEzLDU3LjEzLDAsMCwwLDE4LDMwLjE2LDU3LjEzLDU3LjEzLDAsMCwwLDI5LjA2LDE5LjMzYzMtNC4xLDMuNjktNy42NCwyLjE0LTEwLjgxLTEtMi00LTMuNTktNy4zNC0yLjY1YTgsOCwwLDAsMC00Ljk0LDQuMiwxLDEsMCwwLDEtMS44NSwwLDcuOTMsNy45MywwLDAsMC00'@;
put 'Ljk0LTQuMkE3LjMxLDcuMzEsMCwwLDAsMTAuMTMsNS41OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsNy42NGMtMS4zNC0yLjc1LTUuMi01LTkuNjktMy42OUE5Ljg3LDkuODcsMCwwLDAsMTgsNy43MmE5'@;
put 'Ljg3LDkuODcsMCwwLDAtNS4zMS0zLjc3QzguMTksMi42Niw0LjM0LDQuODksMyw3LjY0Yy0xLjg4LDMuODUtMS4xLDguMTgsMi4zMiwxMi44N0M4LDI0LjE4LDExLjgzLDI3LjksMTcuMzksMzIuMjJhMSwxLDAsMCwwLDEuMjMsMGM1LjU1LTQuMzEsOS4zOS04LDEyLjA3LTExLjcxQzM0LjEs'@;
put 'MTUuODIsMzQuODgsMTEuNDksMzMsNy42NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxULkNsclNoYXBlSGVhcnRCcm9rZW49KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLDcuNjRjLTEuMzQtMi43NS01LjA5LTUtOS42OS0zLjY5YTkuODcsOS44'@;
put 'NywwLDAsMC02LDQuODQsMTguOSwxOC45LDAsMCwwLTIuMjMsNS4zM2w1LjI4LDIuMzQtNC42LDQuMzcsMy40OSw0LjEsMS41Mi0xLjNMMTguNTQsMjFsNS40LTUuMTNMMTcuNTgsMTNBMTYuMjMsMTYuMjMsMCwwLDEsMTkuNzUsOC45YTcuNjgsNy42OCwwLDAsMSw0LjExLTNjMy4zNC0uODks'@;
put 'Ni4zNC42LDcuMzQsMi42NSwxLjU1LDMuMTguODUsNi43Mi0yLjE0LDEwLjgxQTU3LjE2LDU3LjE2LDAsMCwxLDE4LDMwLjE2LDU3LjE2LDU3LjE2LDAsMCwxLDYuOTQsMTkuMzNjLTMtNC4xLTMuNjktNy42NC0yLjE0LTEwLjgxYTUuOSw1LjksMCwwLDEsNS4zMy0yLjkzLDcuMzEsNy4zMSww'@;
put 'LDAsMSwyLC4yOSw3LjcsNy43LDAsMCwxLDMuMzgsMmwuMTUtLjNhMTAuNjYsMTAuNjYsMCwwLDEsMS0xLjQxLDkuNjQsOS42NCwwLDAsMC0zLjk0LTIuMjJDOC4yLDIuNjYsNC4zNCw0Ljg5LDMsNy42NGMtMS44OCwzLjg1LTEuMSw4LjE4LDIuMzIsMTIuODdDOCwyNC4xOCwxMS44MywyNy45'@;
put 'LDE3LjM5LDMyLjIyYTEsMSwwLDAsMCwxLjIzLDBjNS41NS00LjMxLDkuMzktOCwxMi4wNy0xMS43MUMzNC4xLDE1LjgyLDM0Ljg4LDExLjQ5LDMzLDcuNjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLDcu'@;
put 'NjRjLTEuMzQtMi43NS01LjItNS05LjY5LTMuNjlBMTEuNTUsMTEuNTUsMCwwLDAsMTguMTksNy41YTE2Ljg5LDE2Ljg5LDAsMCwwLTIuNDgsNC41NkwyMi4yNywxNSwxNi43LDIwLjI2LDE5LDIzbC0xLjU3LDEuMzQtMy42LTQuMjIsNC43NC00LjUxLTUuNDQtMi40MWExOS40OSwxOS40OSww'@;
put 'LDAsMSwyLjMtNS41LDE0Ljc3LDE0Ljc3LDAsMCwxLDEuMDYtMS41NGwuMDYsMGE5LjY2LDkuNjYsMCwwLDAtMy44OS0yLjE4QzguMTksMi42Niw0LjM0LDQuODksMyw3LjY0Yy0xLjg4LDMuODUtMS4xLDguMTgsMi4zMiwxMi44N0M4LDI0LjE4LDExLjgzLDI3LjksMTcuMzksMzIuMjJhMSwx'@;
put 'LDAsMCwwLDEuMjMsMGM1LjU1LTQuMzEsOS4zOS04LDEyLjA3LTExLjcxQzM0LjEsMTUuODIsMzQuODgsMTEuNDksMzMsNy42NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxULkNsclNoYXBlVGFsa0J1YmJsZXM9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGgg'@;
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 'NiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz4nKSxULkNsclNoYXBlQ2hhdEJ1YmJsZT0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMi41Yy04LjgyLDAtMTYsNi4yOC0xNiwxNHM3LjE4LDE0'@;
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 'aS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLFQuQ2xyU2hhcGVQaWN0dXJlPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEy'@;
put 'LDIsMCwwLDAsMzIsNFpNNCwzMFY2SDMyVjMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LjkyLDE0YTMsMywwLDEsMC0zLTNBMywzLDAsMCwwLDguOTIsMTRabTAtNC42QTEuNiwxLjYsMCwxLDEsNy4zMywx'@;
put 'MSwxLjYsMS42LDAsMCwxLDguOTIsOS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNzgsMTUuMzdsLTUuNCw1LjQtNC00YTEsMSwwLDAsMC0xLjQxLDBMNS45MiwyMi45djIuODNsNi43OS02Ljc5TDE2'@;
put 'LDIyLjE4bC0zLjc1LDMuNzVIMTVsOC40NS04LjQ1TDMwLDI0VjIxLjE4bC01LjgxLTUuODFBMSwxLDAsMCwwLDIyLjc4LDE1LjM3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS45MywxMWEzLDMsMCwxLDAt'@;
put 'MywzQTMsMywwLDAsMCwxMS45MywxMVptLTQuNiwwYTEuNiwxLjYsMCwxLDEsMS42LDEuNkExLjYsMS42LDAsMCwxLDcuMzMsMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNy4z'@;
put 'OCwyMC43N2wtNC00YTEsMSwwLDAsMC0xLjQxLDBMNS45MiwyMi45djIuODNsNi43OS02Ljc5TDE2LDIyLjE4bC0zLjc1LDMuNzVIMTVsOC40NS04LjQ1TDMwLDI0VjIxLjE4bC01LjgxLTUuODFhMSwxLDAsMCwwLTEuNDEsMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDEzLjIyVjMwSDRWNkgyMi41YTcuNDksNy40OSwwLDAsMSwuMjgtMkg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDUsNy40NSwwLDAsMSwz'@;
put 'MiwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1i'@;
put 'YWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIsNFpNOC45Miw4YTMsMywwLDEsMS0zLDNBMywzLDAsMCwxLDguOTIsOFpNNiwyN1YyMi45'@;
put 'bDYtNi4wOGExLDEsMCwwLDEsMS40MSwwTDE2LDE5LjM1LDguMzIsMjdabTI0LDBIMTEuMTVsNi4yMy02LjIzLDUuNC01LjRhMSwxLDAsMCwxLDEuNDEsMEwzMCwyMS4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0z'@;
put 'MCwxMy41QTcuNDgsNy40OCwwLDAsMSwyMi43OCw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40Niw3LjQ2LDAsMCwxLDMwLDEzLjVaTTguOTIsOGEzLDMsMCwxLDEtMywzQTMsMywwLDAsMSw4LjkyLDhaTTYsMjdWMjIuOWw2LTYu'@;
put 'MDhhMSwxLDAsMCwxLDEuNDEsMEwxNiwxOS4zNSw4LjMyLDI3Wm0yNCwwSDExLjE1bDYuMjMtNi4yMyw1LjQtNS40YTEsMSwwLDAsMSwxLjQxLDBMMzAsMjEuMThaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAg'@;
put 'PGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLFQuQ2xyU2hhcGVIYXBweUZhY2U9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAs'@;
put 'MzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMC44OSIgY3k9IjEzLjg5IiByPSIyIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjUuMDUiIGN5PSIxMy44OSIgcj0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4xMywy'@;
put 'OC4yMWE4LjY3LDguNjcsMCwwLDAsOC4yNi02SDkuODdBOC42Nyw4LjY3LDAsMCwwLDE4LjEzLDI4LjIxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCww'@;
put 'LDE4LDJaTTguODksMTMuODlhMiwyLDAsMSwxLDIsMkEyLDIsMCwwLDEsOC44OSwxMy44OVptOS4yNCwxNC4zMmE4LjY3LDguNjcsMCwwLDEtOC4yNi02SDI2LjM4QTguNjcsOC42NywwLDAsMSwxOC4xMywyOC4yMVptNi45My0xMi4zMmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSwyNS4wNSwx'@;
put 'NS44OVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxULkNsclNoYXBlTmV1dHJhbEZhY2U9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LjA1LDIyLjA2aC0xMmExLDEsMCwwLDAsMCwyaDEyYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNS4xNiIgY3k9IjE0LjI4IiByPSIxLjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMS4xNiIgY3k9IjE0LjI4IiByPSIxLjgiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm03LjA1LDIxLjA2YTEsMSwwLDAsMS0xLDFoLTEyYTEsMSwwLDAsMSwwLTJoMTJBMSwxLDAsMCwxLDI1'@;
put 'LjA1LDIzLjA2Wk0yNywxNC4yOGExLjgsMS44LDAsMSwxLTEuOC0xLjhBMS44LDEuOCwwLDAsMSwyNywxNC4yOFptLTE1LjgsMS44YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDExLjE2LDE2LjA4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIv'@;
put 'PicpLFQuQ2xyU2hhcGVTYWRGYWNlPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjUuMTYiIGN5PSIxNC4yOCIgcj0iMS44IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTEuNDEiIGN5PSIxNC4yOCIgcj0iMS44IiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjE2LDIwYTksOSwwLDAsMC03LjMzLDMuNzgsMSwxLDAsMSwwLDEuNjMsMS4xNiw3LDcsMCwwLDEsMTEuMzEtLjEzLDEsMSwwLDAsMCwxLjYtMS4yQTksOSwwLDAsMCwxOC4x'@;
put 'NiwyMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm05LDEyLjI4YTEuOCwxLjgsMCwxLDEtMS44LTEuOEExLjgsMS44LDAsMCwxLDI3LDE0'@;
put 'LjI4Wm0tMTUuNTUsMS44YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDExLjQxLDE2LjA4Wm0xNCw3LjUzYTEsMSwwLDAsMS0xLjYsMS4yLDcsNywwLDAsMC0xMS4zMS4xMywxLDEsMCwxLDEtMS42My0xLjE2LDksOSwwLDAsMSwxNC41NC0uMTdaIiBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+JyksVC5DbHJTaGFwZVRodW1ic1VwPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNCwyNmMtMi45MiwxLjgyLTcuMyw0LTkuMzcsNGgtNmExNi42OCwxNi42OCwwLDAsMS0zLjMxLTYuMDhBMjYuNzEsMjYuNzEsMCwwLDEsNCwxNmg5VjZh'@;
put 'Mi4wNSwyLjA1LDAsMCwxLDEuMjYtMS42OWMuNzcsMiwyLjYyLDYuNTcsNC4yMyw4LjcyQTExLjM5LDExLjM5LDAsMCwwLDI0LDE2LjkxVjE0Ljc4YTkuMTMsOS4xMywwLDAsMS0zLjkxLTNjLTEuODgtMi41MS00LjI5LTkuMTEtNC4zMS05LjE3QTEsMSwwLDAsMCwxNC41OSwyQzEzLjI1LDIu'@;
put 'MzgsMTEsMy42LDExLDZ2OEgzYTEsMSwwLDAsMC0xLDEsMjksMjksMCwwLDAsMS40LDkuNjJjMS44OSw1LjQsNC4xLDcuMTQsNC4yLDcuMjJhMSwxLDAsMCwwLC42MS4yMWg2LjQyYzIuNDMsMCw2LjU1LTIsOS4zNy0zLjYzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQsMzFIMjdhMSwxLDAsMCwxLTEtMVYxNGExLDEsMCwwLDEsMS0xaDdabS02LTJoNFYxNUgyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LjYz'@;
put 'LDEyLjEyQzE3LjUxLDkuMjgsMTQuODgsMiwxNC44OCwyUzEyLDIuODMsMTIsNS4yNVYxNUgyLjIzYTI5LjQ2LDI5LjQ2LDAsMCwwLDEuNDQsOS43NEM1LjYxLDMwLjI3LDcuOCwzMiw3LjgsMzJoNi44NkMxNi45LDMyLDIxLDMwLjA2LDI0LDI4LjMxVjE1LjUxQTEwLjg0LDEwLjg0LDAsMCwx'@;
put 'LDE5LjYzLDEyLjEyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNywxM2ExLDEsMCwwLDAtMSwxVjMwYTEsMSwwLDAsMCwxLDFoN1YxM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+'@;
put 'JyksVC5DbHJTaGFwZVRodW1ic0Rvd249KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEyLDEwYzIuOTItMS44Miw3LjMtNCw5LjM3LTRoNmExNi42OCwxNi42OCwwLDAsMSwzLjMxLDYuMDhBMjYuNzEsMjYuNzEsMCwwLDEsMzIsMjBIMjNWMzBhMi4wNSwyLjA1LDAsMCwxLTEuMjYsMS42'@;
put 'OWMtLjc3LTItMi42Mi02LjU3LTQuMjMtOC43MkExMS4zOSwxMS4zOSwwLDAsMCwxMiwxOS4wOXYyLjEzYTkuMTMsOS4xMywwLDAsMSwzLjkxLDNjMS44OCwyLjUxLDQuMjksOS4xMSw0LjMxLDkuMTdhMSwxLDAsMCwwLDEuMTkuNjNDMjIuNzUsMzMuNjIsMjUsMzIuNCwyNSwzMFYyMmg4YTEs'@;
put 'MSwwLDAsMCwxLTEsMjksMjksMCwwLDAtMS40LTkuNjJjLTEuODktNS40LTQuMS03LjE0LTQuMi03LjIyQTEsMSwwLDAsMCwyNy43OSw0SDIxLjM3QzE4Ljk0LDQsMTQuODMsNiwxMiw3LjYzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBkPSJNMiw1SDlhMSwxLDAsMCwxLDEsMVYyMmExLDEsMCwwLDEtMSwxSDJaTTgsN0g0VjIxSDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNi4zNywyMy44NGMyLjEyLDIuODQsNC43Niwx'@;
put 'MC4wNyw0Ljc2LDEwLjA3UzI0LDMzLjEzLDI0LDMwLjcxVjIxaDkuNzdhMjkuNDYsMjkuNDYsMCwwLDAtMS40NC05Ljc0QzMwLjM5LDUuNjgsMjguMiw0LDI4LjIsNEgyMS4zNUMxOS4xLDQsMTUsNS45LDEyLDcuNjV2MTIuOEExMC44NCwxMC44NCwwLDAsMSwxNi4zNywyMy44NFoiIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOSwyM2ExLDEsMCwwLDAsMS0xVjZBMSwxLDAsMCwwLDksNUgyVjIzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxULkNsclNoYXBlQ3Jvd249KDAs'@;
put 'di5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik00LDEzLjMzQTEuMzksMS4zOSwwLDEsMCwyLjYsMTQuNzIsMS4zOSwxLjM5LDAsMCwwLDQsMTMuMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMzEuODEsMTUuODRhMjAuMzUs'@;
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+XG4gICcpLFQuQ2xyU2hhcGVIYXNodGFnPSgwLHYu'@;
put 'Y2xySWNvblNWRykoJ1xuICA8cGF0aCBkPSJNMzIsMTJIMjUuMzRsMS41NS03Ljc0YTEsMSwwLDAsMC0yLS4zOUwyMy4zLDEySDE1LjExbDEuNTUtNy43NGExLDEsMCwwLDAtMi0uMzlMMTMuMDcsMTJINmExLDEsMCwwLDAsMCwyaDYuNjdsLTEuNiw4SDRhMSwxLDAsMCwwLDAsMmg2LjY2TDku'@;
put 'MTEsMzEuNzRhMSwxLDAsMCwwLC43OSwxLjE3LjY4LjY4LDAsMCwwLC4yLDAsMSwxLDAsMCwwLDEtLjhMMTIuNywyNGg4LjE5bC0xLjU1LDcuNzRhMSwxLDAsMCwwLC43OSwxLjE3LjYyLjYyLDAsMCwwLC4xOSwwLDEsMSwwLDAsMCwxLS44TDIyLjkzLDI0SDMwYTEsMSwwLDAsMCwwLTJIMjMu'@;
put 'MzNsMS42MS04SDMyYTEsMSwwLDAsMCwwLTJaTTIxLjI5LDIySDEzLjFsMS42MS04SDIyLjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuXG4gIDxwYXRoIGQ9Ik0zMS44NywxMEgyNi4zMmwxLTQuODNBMSwxLDAsMCwwLDI2LjM1LDRoLTJhMSwxLDAs'@;
put 'MCwwLTEsLjc4TDIyLjMzLDEwaC01LjRsMS00LjgzQTEsMSwwLDAsMCwxNyw0SDE1YTEsMSwwLDAsMC0xLC43OEwxMywxMEg3YTEsMSwwLDAsMC0xLC44bC0uNDEsMmExLDEsMCwwLDAsMSwxLjJoNS41NUwxMC41LDIyaC02YTEsMSwwLDAsMC0xLC44bC0uNDEsMmExLDEsMCwwLDAsMSwxLjJI'@;
put 'OS42OGwtMSw0LjgzYTEsMSwwLDAsMCwxLDEuMTdoMmExLDEsMCwwLDAsLjk1LS43OEwxMy42NywyNmg1LjRsLTEsNC44M0ExLDEsMCwwLDAsMTksMzJoMmExLDEsMCwwLDAsMS0uNzhMMjMuMDUsMjZoNmExLDEsMCwwLDAsMS0uOGwuNC0yYTEsMSwwLDAsMC0xLTEuMkgyMy44N2wxLjYzLTho'@;
put 'NmExLDEsMCwwLDAsMS0uOGwuNDEtMkExLDEsMCwwLDAsMzEuODcsMTBabS0xMiwxMmgtNS40bDEuNjQtOGg1LjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICcpLFQuU29jaWFsU2hhcGVzPXtjcm93bjpULkNsclNoYXBlQ3Jvd24sc2hhcmU6VC5DbHJT'@;
put 'aGFwZVNoYXJlLHN0YXI6VC5DbHJTaGFwZVN0YXIsImhhbGYtc3RhciI6VC5DbHJTaGFwZUhhbGZTdGFyLGJvb2ttYXJrOlQuQ2xyU2hhcGVCb29rbWFyayxlbnZlbG9wZTpULkNsclNoYXBlRW52ZWxvcGUsY2FsZW5kYXI6aGUuQ2xyU2hhcGVDYWxlbmRhcixldmVudDpoZS5DbHJTaGFwZUV2'@;
put 'ZW50LHRhc2tzOlQuQ2xyU2hhcGVUYXNrcyxmbGFnOlQuQ2xyU2hhcGVGbGFnLGluYm94OlQuQ2xyU2hhcGVJbmJveCxoYXNodGFnOlQuQ2xyU2hhcGVIYXNodGFnLGhlYXJ0OlQuQ2xyU2hhcGVIZWFydCwiaGVhcnQtYnJva2VuIjpULkNsclNoYXBlSGVhcnRCcm9rZW4sInRhbGstYnViYmxl'@;
put 'cyI6VC5DbHJTaGFwZVRhbGtCdWJibGVzLCJjaGF0LWJ1YmJsZSI6VC5DbHJTaGFwZUNoYXRCdWJibGUscGljdHVyZTpULkNsclNoYXBlUGljdHVyZSwiaGFwcHktZmFjZSI6VC5DbHJTaGFwZUhhcHB5RmFjZSwibmV1dHJhbC1mYWNlIjpULkNsclNoYXBlTmV1dHJhbEZhY2UsInNhZC1mYWNl'@;
put 'IjpULkNsclNoYXBlU2FkRmFjZSwidGh1bWJzLXVwIjpULkNsclNoYXBlVGh1bWJzVXAsInRodW1icy1kb3duIjpULkNsclNoYXBlVGh1bWJzRG93bn0sT2JqZWN0LmRlZmluZVByb3BlcnR5KFQuU29jaWFsU2hhcGVzLCJmYXZvcml0ZSIsKDAsay5kZXNjcmlwdG9yQ29uZmlnKShULlNvY2lh'@;
put 'bFNoYXBlcy5zdGFyKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFQuU29jaWFsU2hhcGVzLCJlbWFpbCIsKDAsay5kZXNjcmlwdG9yQ29uZmlnKShULlNvY2lhbFNoYXBlcy5lbnZlbG9wZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShULlNvY2lhbFNoYXBlcywiZGF0ZSIsKDAsay5kZXNjcmlw'@;
put 'dG9yQ29uZmlnKShULlNvY2lhbFNoYXBlcy5jYWxlbmRhcikpLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChULlNvY2lhbFNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMv'@;
put 'dGVjaG5vbG9neS1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90ZWNobm9sb2d5LXNoYXBlcy50cyAqKiohCiAg'@;
put 'ICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oemUsVCxzZSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShULCJfX2Vz'@;
put 'TW9kdWxlIix7dmFsdWU6ITB9KSxULkNsclNoYXBlVk1XQXBwPVQuQ2xyU2hhcGVWTT1ULkNsclNoYXBlUm91dGVyPVQuQ2xyU2hhcGVOZXR3b3JrU3dpdGNoPVQuQ2xyU2hhcGVOZXR3b3JrU2V0dGluZ3M9VC5DbHJTaGFwZU5ldHdvcmtHbG9iZT1ULkNsclNoYXBlVGFibGV0PVQuQ2xyU2hh'@;
put 'cGVNb2JpbGU9VC5DbHJTaGFwZUJhdHRlcnk9VC5DbHJTaGFwZUFwcGxpY2F0aW9uPVQuQ2xyU2hhcGVDb2RlPVQuQ2xyU2hhcGVUZXJtaW5hbD1ULkNsclNoYXBlRGlzcGxheT1ULkNsclNoYXBlQ29tcHV0ZXI9VC5DbHJTaGFwZUZsb3BweT1ULkNsclNoYXBlUGx1Z2luPVQuQ2xyU2hhcGVE'@;
put 'b3dubG9hZENsb3VkPVQuQ2xyU2hhcGVVcGxvYWRDbG91ZD1ULkNsclNoYXBlRXhwb3J0PVQuQ2xyU2hhcGVJbXBvcnQ9VC5DbHJTaGFwZVNoaWVsZFg9VC5DbHJTaGFwZVNoaWVsZD1ULkNsclNoYXBlU2hpZWxkQ2hlY2s9VC5DbHJTaGFwZVJlc291cmNlUG9vbD1ULkNsclNoYXBlRGF0YUNs'@;
put 'dXN0ZXI9VC5DbHJTaGFwZU1lbW9yeT1ULkNsclNoYXBlQ1BVPVQuQ2xyU2hhcGVCdWlsZGluZz1ULkNsclNoYXBlQXBwbGljYXRpb25zPVQuQ2xyU2hhcGVDbHVzdGVyPVQuQ2xyU2hhcGVTdG9yYWdlPVQuQ2xyU2hhcGVIb3N0PVQuQ2xyU2hhcGVEYXNoYm9hcmQ9VC5DbHJTaGFwZU1vdXNl'@;
put 'PVQuQ2xyU2hhcGVLZXlib2FyZD1ULkNsclNoYXBlRGV2aWNlcz1ULkNsclNoYXBlQmFja3VwPVQuQ2xyU2hhcGVCYWNrdXBSZXN0b3JlPVQuQ2xyU2hhcGVIYXJkRGlzaz1ULkNsclNoYXBlUmFja1NlcnZlcj1ULkNsclNoYXBlV2lmaT1ULkNsclNoYXBlQnVuZGxlPVQuQ2xyU2hhcGVCbG9j'@;
put 'a3NHcm91cD1ULkNsclNoYXBlQmxvY2s9VC5DbHJTaGFwZUxheWVycz1ULkNsclNoYXBlVW5pbnN0YWxsPVQuQ2xyU2hhcGVJbnN0YWxsPVQuQ2xyU2hhcGVOb1dpZmk9VC5DbHJTaGFwZVBob25lSGFuZHNldD1ULkNsclNoYXBlUnVsZXJQZW5jaWw9dm9pZCAwLFQuVGVjaG5vbG9neVNoYXBl'@;
put 'cz1ULkNsclNoYXBlRmlsZVNoYXJlMj1ULkNsclNoYXBlQ2lDZD1ULkNsclNoYXBlQW5pbWF0aW9uPVQuQ2xyU2hhcGVUYXBlRHJpdmU9VC5DbHJTaGFwZU1lZGlhQ2hhbmdlcj1ULkNsckNvbnRyb2xMdW49VC5DbHJTaGFwZVBvZD1ULkNsclNoYXBlTm9kZT1ULkNsclNoYXBlTmFtZXNwYWNl'@;
put 'PVQuQ2xyU2hhcGVOb2Rlcz1ULkNsclNoYXBlTm9kZUdyb3VwPVQuQ2xyU2hhcGVTdG9yYWdlQWRhcHRlcj1ULkNsclNoYXBlSG9zdEdyb3VwPVQuQ2xyU2hhcGVTcXVpZD1ULkNsclNoYXBlQ2FwYWNpdG9yPVQuQ2xyU2hhcGVSZXNpc3Rvcj1ULkNsclNoYXBlSW5kdWN0b3I9VC5DbHJTaGFw'@;
put 'ZVJhZGFyPVQuQ2xyU2hhcGVVc2I9VC5DbHJTaGFwZVFyQ29kZT1ULkNsclNoYXBlRmlsZVNoYXJlPVQuQ2xyU2hhcGVDb250YWluZXJWb2x1bWU9VC5DbHJTaGFwZUNvbnRhaW5lcj1ULkNsclNoYXBlQ2REdmQ9VC5DbHJTaGFwZUJhckNvZGU9VC5DbHJTaGFwZUF0b209VC5DbHJTaGFwZUFz'@;
put 'c2lnblVzZXI9VC5DbHJTaGFwZVByb2Nlc3NPblZNPVQuQ2xyU2hhcGVCbHVldG9vdGhPZmY9VC5DbHJTaGFwZUJsdWV0b290aD1ULkNsclNoYXBlU1NEPVQuQ2xyU2hhcGVOVk1lPVQuQ2xyU2hhcGVIYXJkRHJpdmVEaXNrcz1ULkNsclNoYXBlSGFyZERyaXZlPVQuQ2xyU2hhcGVBZG1pbmlz'@;
put 'dHJhdG9yPVQuQ2xyU2hhcGVGbGFzaz1ULkNsclNoYXBlSGVsaXg9VC5DbHJTaGFwZURlcGxveT1ULkNsclNoYXBlQ2xvdWRUcmFmZmljPVQuQ2xyU2hhcGVDbG91ZFNjYWxlPVQuQ2xyU2hhcGVDbG91ZE5ldHdvcms9VC5DbHJTaGFwZVVubGluaz1ULkNsclNoYXBlTGluaz1ULkNsclNoYXBl'@;
put 'RGlzY29ubmVjdD1ULkNsclNoYXBlQ29ubmVjdD1ULkNsclNoYXBlVW5hcmNoaXZlPVQuQ2xyU2hhcGVBcmNoaXZlPVQuQ2xyU2hhcGVDZXJ0aWZpY2F0ZT12b2lkIDA7dmFyIGs9c2UoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRp'@;
put 'bHMvZGVzY3JpcHRvci1jb25maWcudHMiKSx2PXNlKAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIik7VC5DbHJTaGFwZVJ1bGVyUGVuY2lsPSgwLHYuY2xySWNvblNWRykoJzxwb2x5Z29u'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBwb2ludHM9IjkgMTcuNDEgOSAyNyAxOC41OSAyNyAxNi41OSAyNSAxMSAyNSAxMSAxOS40MSA5IDE3LjQxIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMiIgZD0iTTM0Ljg3LDMyLjI5LDMyLDI5LjM4VjMySDRWMjcuODVINnYtMS42SDRWMTkuNkg2VjE4SDRWMTEuNkg2VjEwSDRWNC40MUwxOS45NCwyMC4yNlYxNy40NEwzLjcxLDEuMjlBMSwxLDAsMCwwLDIsMlYzM2ExLDEsMCwwLDAsMSwxSDM0LjE2YTEsMSwwLDAsMCwuNzEtMS43MVoi'@;
put 'Lz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMjQsMzBoNGEyLDIsMCwwLDAsMi0yVjguN0wyNy43LDQuNDdhMiwyLDAsMCwwLTEuNzYtMWgwYTIsMiwwLDAsMC0xLjc2LDEuMDhMMjIsOC43MlYyOEEyLDIsMCwwLDAs'@;
put 'MjQsMzBaTTI0LDkuMmwxLjk0LTMuNzdMMjgsOS4yMVYyNEgyNFptMCwxNi40M2g0djIuNDRIMjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzQuODcsMzIuMjEsMzAsMjcuMzdWOC43NUwyNy43LDQuNTJhMiwyLDAs'@;
put 'MCwwLTMuNTQsMEwyMiw4Ljc2VjE5LjQxTDMuNzEsMS4yMUExLDEsMCwwLDAsMiwxLjkyVjEwSDQuMTd2MS42SDJWMThINC4xN3YxLjZIMnY2LjY1SDQuMTd2MS42SDJ2NS4wN2ExLDEsMCwwLDAsMSwxSDM0LjE2YTEsMSwwLDAsMCwuNzEtMS43MVpNMTAsMjZWMTYuOTRMMTkuMDcsMjZabTE4'@;
put 'LDIuMTFIMjRWMjUuNjhoNFptMC00SDI0VjkuMjVsMS45NC0zLjc3TDI4LDkuMjZaIi8+XG4nKSxULkNsclNoYXBlUGhvbmVIYW5kc2V0PSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcuNzMsMzUuNDRhNC43'@;
put 'Miw0LjcyLDAsMCwxLTEtLjExLDMzLjkxLDMzLjkxLDAsMCwxLTE2LjYyLTguNzUsMzIuNzEsMzIuNzEsMCwwLDEtOS0xNi4yNUE0LjU4LDQuNTgsMCwwLDEsMi40Niw2LjA1bDQtMy44NUEyLDIsMCwwLDEsOCwxLjY2YTIsMiwwLDAsMSwxLjQ1Ljg3bDUsNy4zOWExLjYsMS42LDAsMCwxLS4x'@;
put 'MSwxLjlsLTIuNTEsM2ExOC45NCwxOC45NCwwLDAsMCw0LjE3LDUuODloMGExOS4yNiwxOS4yNiwwLDAsMCw2LjA3LDQuMDlsMy4xMS0yLjQ3YTEuNjQsMS42NCwwLDAsMSwxLjg2LS4xMmw3LjU1LDQuODhBMiwyLDAsMCwxLDM1LDMwLjJsLTMuOSwzLjg2QTQuNzQsNC43NCwwLDAsMSwyNy43'@;
put 'MywzNS40NFpNNy44NCwzLjY0bC00LDMuODVhMi41NCwyLjU0LDAsMCwwLS43NSwyLjQsMzAuNywzMC43LDAsMCwwLDguNDEsMTUuMjYsMzEuOSwzMS45LDAsMCwwLDE1LjY0LDguMjMsMi43NSwyLjc1LDAsMCwwLDIuNS0uNzRsMy45LTMuODYtNy4yOS00LjcxLTMuMzQsMi42NmExLDEsMCww'@;
put 'LDEtLjkyLjE3LDIwLjA2LDIwLjA2LDAsMCwxLTcuMzYtNC43NWgwYTE5LjQ5LDE5LjQ5LDAsMCwxLTQuODctNy4yQTEsMSwwLDAsMSwxMCwxNGwyLjctMy4yM1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xNS4yMiwy'@;
put 'MC42NGEyMC4zNywyMC4zNywwLDAsMCw3LjQsNC43OWwzLjc3LTNhLjY3LjY3LDAsMCwxLC43NiwwbDcsNC41MWEyLDIsMCwwLDEsLjMzLDMuMThsLTMuMjgsMy4yNGE0LDQsMCwwLDEtMy42MywxLjA3LDM1LjA5LDM1LjA5LDAsMCwxLTE3LjE1LTlBMzMuNzksMzMuNzksMCwwLDEsMS4xNSw4'@;
put 'LjZhMy43OCwzLjc4LDAsMCwxLDEuMS0zLjU1bDMuNC0zLjI4YTIsMiwwLDAsMSwzLjEyLjMyTDEzLjQzLDlhLjYzLjYzLDAsMCwxLDAsLjc1bC0zLjA3LDMuNjlBMTkuNzUsMTkuNzUsMCwwLDAsMTUuMjIsMjAuNjRaIi8+XG4nKSxULkNsclNoYXBlTm9XaWZpPSgwLHYuY2xySWNvblNWRyko'@;
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 'NiwwLDAsMSwxNC4yNSwxNmwzLjYsMy42YTEzLjM5LDEzLjM5LDAsMCwwLTYuNzksMS45MywxLjUsMS41LDAsMCwwLS40NiwyLjA5bC4xLjE2YTEuNTIsMS41MiwwLDAsMCwyLjA2LjQ0LDEwLjIsMTAuMiwwLDAsMSw5LS43TDI5LDMwLjc1bDEuNDEtMS40MS0yNi0yNloiLz5cbicpLFQuQ2xy'@;
put 'U2hhcGVJbnN0YWxsPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAuOTIsOEgyNi41NWExLDEsMCwwLDAsMCwySDMxVjMwSDVWMTBIOS4zOGExLDEsMCwwLDAsMC0ySDUuMDhBMiwyLDAsMCwwLDMsMTBWMzBh'@;
put 'MiwyLDAsMCwwLDIuMDgsMkgzMC45MkEyLDIsMCwwLDAsMzMsMzBWMTBBMiwyLDAsMCwwLDMwLjkyLDhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTEwLjMsMTguODdsNyw2Ljg5YTEsMSwwLDAsMCwxLjQsMGw3'@;
put 'LTYuODlhMSwxLDAsMCwwLTEuNC0xLjQzTDE5LDIyLjY1VjRhMSwxLDAsMCwwLTIsMFYyMi42NWwtNS4zLTUuMjFhMSwxLDAsMCwwLTEuNCwxLjQzWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2Vk'@;
put 'IiBkPSJNMTAuMywxOC44N2w3LDYuODlhMSwxLDAsMCwwLDEuNCwwbDctNi44OWExLDEsMCwwLDAtMS40LTEuNDNMMTksMjIuNjVWNGExLDEsMCwwLDAtMiwwVjIyLjY1bC01LjMtNS4yMWExLDEsMCwwLDAtMS40LDEuNDNaIi8+PHBhdGggZD0iTTMxLDEzLjQzVjMwSDVWMTBIOS4zOGExLDEs'@;
put 'MCwwLDAsMC0ySDUuMDhBMiwyLDAsMCwwLDMsMTBWMzBhMiwyLDAsMCwwLDIuMDgsMkgzMC45MkEyLDIsMCwwLDAsMzMsMzBWMTIuODdBNy40NSw3LjQ1LDAsMCwxLDMxLDEzLjQzWiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTAuMywxOC44N2w3LDYuODlhMSwxLDAs'@;
put 'MCwwLDEuNCwwbDctNi44OWExLDEsMCwwLDAtMS40LTEuNDNMMTksMjIuNjVWNGExLDEsMCwwLDAtMiwwVjIyLjY1bC01LjMtNS4yMWExLDEsMCwwLDAtMS40LDEuNDNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMi0tYWxlcnRlZCIgZD0iTTMxLDE1LjRWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxNS40WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUs'@;
put 'MS4xNFoiLz5cbicpLFQuQ2xyU2hhcGVVbmluc3RhbGw9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xMS4yOSwyNi43MmExLDEsMCwwLDAsMS40MSwwTDE4LDIxLjQ5bDUuMyw1LjIzQTEsMSwwLDAsMCwyNC43'@;
put 'LDI1LjNsLTUuMjgtNS4yMSw1LjI4LTUuMjFhMSwxLDAsMCwwLTEuNDEtMS40MkwxOCwxOC42OGwtNS4zLTUuMjNhMSwxLDAsMCwwLTEuNDEsMS40Mmw1LjI4LDUuMjFMMTEuMywyNS4zQTEsMSwwLDAsMCwxMS4yOSwyNi43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzAuOTIsOEgyNi41NWExLDEsMCwwLDAsMCwySDMxVjMwSDVWMTBIOS4zOGExLDEsMCwwLDAsMC0ySDUuMDhBMiwyLDAsMCwwLDMsMTBWMzBhMiwyLDAsMCwwLDIuMDgsMkgzMC45MkEyLDIsMCwwLDAsMzMsMzBWMTBBMiwyLDAsMCww'@;
put 'LDMwLjkyLDhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMS4yOSwyNi43MmExLDEsMCwwLDAsMS40MSwwTDE4LDIxLjQ5bDUuMyw1LjIzQTEsMSwwLDAsMCwyNC43LDI1LjNsLTUu'@;
put 'MjgtNS4yMSw1LjI4LTUuMjFhMSwxLDAsMCwwLTEuNDEtMS40MkwxOCwxOC42OGwtNS4zLTUuMjNhMSwxLDAsMCwwLTEuNDEsMS40Mmw1LjI4LDUuMjFMMTEuMywyNS4zQTEsMSwwLDAsMCwxMS4yOSwyNi43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i'@;
put 'YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTTMxLDEzLjQzVjMwSDVWMTBIOS4zOGExLDEsMCwwLDAsMC0ySDUuMDhBMiwyLDAsMCwwLDMsMTBWMzBhMiwyLDAsMCwwLDIuMDgsMkgzMC45MkEyLDIsMCwwLDAsMzMsMzBWMTIuODdBNy40NSw3LjQ1LDAsMCwxLDMxLDEz'@;
put 'LjQzWiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h'@;
put 'bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTEuMjksMjYuNzJhMSwxLDAsMCwwLDEuNDEsMEwxOCwyMS40OWw1LjMsNS4yM0ExLDEsMCwwLDAsMjQuNywyNS4zbC01LjI4LTUuMjEsNC43NS00LjY5SDIyLjIzYTMuNjUsMy42NSwwLDAsMS0uODEtLjFMMTgsMTgu'@;
put 'NjhsLTUuMy01LjIzYTEsMSwwLDAsMC0xLjQxLDEuNDJsNS4yOCw1LjIxTDExLjMsMjUuM0ExLDEsMCwwLDAsMTEuMjksMjYuNzJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTMx'@;
put 'LDE1LjRWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxNS40WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbicpLFQuQ2xyU2hh'@;
put 'cGVMYXllcnM9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyMC4yNWExLDEsMCwwLDEtLjQzLS4xbC0xNS03LjA5YTEsMSwwLDAsMSwwLTEuODFsMTUtNy4wOWExLDEsMCwwLDEsLjg1LDBsMTUsNy4wOWEx'@;
put 'LDEsMCwwLDEsMCwxLjgxbC0xNSw3LjA5QTEsMSwwLDAsMSwxOCwyMC4yNVpNNS4zNCwxMi4xNmwxMi42Niw2LDEyLjY2LTZMMTgsNi4xOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMjYuMTZhMSwxLDAs'@;
put 'MCwxLS40My0uMUwyLjU3LDE5YTEsMSwwLDEsMSwuODUtMS44MUwxOCwyNC4wNmwxNC41Ny02Ljg5QTEsMSwwLDEsMSwzMy40MywxOWwtMTUsNy4wOUExLDEsMCwwLDEsMTgsMjYuMTZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMyIgZD0iTTE4LDMyLjA3YTEsMSwwLDAsMS0uNDMtLjFsLTE1LTcuMDlhMSwxLDAsMCwxLC44NS0xLjgxTDE4LDMwbDE0LjU3LTYuODlhMSwxLDAsMSwxLC44NSwxLjgxTDE4LjQzLDMyQTEsMSwwLDAsMSwxOCwzMi4wN1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1z'@;
put 'b2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyMC4yNWExLDEsMCwwLDEtLjQzLS4xbC0xNS03LjA5YTEsMSwwLDAsMSwwLTEuODFsMTUtNy4wOWExLDEsMCwwLDEsLjg1LDBsMTUsNy4wOWExLDEsMCwwLDEsMCwxLjgxbC0xNSw3LjA5QTEsMSwwLDAsMSwxOCwyMC4yNVoiLz5cbiAg'@;
put 'ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xOCwyNi4xNmExLDEsMCwwLDEtLjQzLS4xTDIuNTcsMTlhMSwxLDAsMSwxLC44NS0xLjgxTDE4LDI0LjA2bDE0LjU3LTYuODlBMSwxLDAsMSwxLDMzLjQzLDE5bC0xNSw3LjA5QTEsMSww'@;
put 'LDAsMSwxOCwyNi4xNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xOCwzMi4wN2ExLDEsMCwwLDEtLjQzLS4xbC0xNS03LjA5YTEsMSwwLDAsMSwuODUtMS44MUwxOCwzMGwxNC41Ny02Ljg5YTEsMSwwLDEsMSwuODUs'@;
put 'MS44MUwxOC40MywzMkExLDEsMCwwLDEsMTgsMzIuMDdaIi8+XG4nKSxULkNsclNoYXBlQmxvY2s9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjQyLDkuMDlsLTEzLTZhMSwxLDAsMCwwLS44NCwwbC0xMyw2QTEsMSwwLDAsMCw0LDEwVjI3YTEsMSwwLDAsMCwuNTguOTFsMTMsNmEx'@;
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+JyksVC5DbHJTaGFwZUJsb2Nrc0dyb3VwPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy41MywxOC43NiwyNi42LDE1LjU3VjYuNDNBMSwxLDAsMCwwLDI2LDUuNTNsLTcuNS0z'@;
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 'Z2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuPGNpcmNsZSBjeD0iMjkuOTgiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxULkNsclNoYXBlQnVuZGxlPSgwLHYuY2xy'@;
put 'SWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIuNDMsOC4zNWwtMTMtNi4yMWExLDEsMCwwLDAtLjg3LDBsLTE1LDcuMjRhMSwxLDAsMCwwLS41Ny45VjI2LjgzYTEsMSwwLDAsMCwuNi45MmwxMyw2LjE5YTEsMSwwLDAsMCwu'@;
put 'ODcsMGwxNS03LjI0YTEsMSwwLDAsMCwuNTctLjlWOS4yNUExLDEsMCwwLDAsMzIuNDMsOC4zNVpNMTksNC4xNSwyOS45Myw5LjM3bC01LjA1LDIuNDRMMTQuMjEsNi40NlpNMTcsMTUuNjQsNiwxMC40MWw1LjktMi44NUwyMi42LDEyLjkxWk01LDEyLjEzLDE2LDE3LjRWMzEuNDZMNSwyNi4y'@;
put 'Wk0xOCwzMS40NVYxNy4zNmwxMy02LjI5djE0LjFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuNDMsOC4zNWwtMTMtNi4yMWExLDEsMCwwLDAtLjg3LDBsLTE1LDcuMjRhMSwxLDAsMCwwLS41Ny45VjI2LjgzYTEs'@;
put 'MSwwLDAsMCwuNi45MmwxMyw2LjE5YTEsMSwwLDAsMCwuODcsMGwxNS03LjI0YTEsMSwwLDAsMCwuNTctLjlWOS4yNUExLDEsMCwwLDAsMzIuNDMsOC4zNVpNMTksNC4xNSwyOS45Myw5LjM3bC01LjA1LDIuNDRMMTQuMjEsNi40NlpNMTcsMTUuNjQsNiwxMC40MWw1LjktMi44NUwyMi42LDEy'@;
put 'LjkxWm0xLDE1LjhWMTcuMzZsMTMtNi4yOXYxNC4xWiIvPlxuJyksVC5DbHJTaGFwZVdpZmk9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMy41NSw4LjJhMjguMSwyOC4xLDAsMCwwLTMxLjExLjA4QTEsMSww'@;
put 'LDEsMCwzLjU2LDkuOTRhMjYuMTEsMjYuMTEsMCwwLDEsMjguODktLjA3LDEsMSwwLDAsMCwxLjEtMS42N1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTguMDUsMTAuNzJBMjAuNzQsMjAuNzQsMCwwLDAsNi4y'@;
put 'MywxNC40LDEsMSwwLDAsMCw3LjM2LDE2LDE4Ljg1LDE4Ljg1LDAsMCwxLDI4LjY0LDE2YTEsMSwwLDAsMCwxLjEyLTEuNjVBMjAuNzUsMjAuNzUsMCwwLDAsMTguMDUsMTAuNzJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'MyIgZD0iTTE4LjA1LDE3LjlhMTMuNTEsMTMuNTEsMCwwLDAtOCwyLjY0LDEsMSwwLDAsMCwxLjE4LDEuNjEsMTEuNTYsMTEuNTYsMCwwLDEsMTMuNjItLjA4QTEsMSwwLDEsMCwyNiwyMC40NiwxMy41MiwxMy41MiwwLDAsMCwxOC4wNSwxNy45WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0xOCwyNC40MmE0LDQsMCwxLDAsNCw0QTQsNCwwLDAsMCwxOCwyNC40MlptMCw2YTIsMiwwLDEsMSwyLTJBMiwyLDAsMCwxLDE4LDMwLjQyWiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQgY2xyLWktc29saWQtcGF0aC0xIiBjeD0iMTgiIGN5PSIyOS41NCIgcj0iMyIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMyLjc2LDkuMzhhMjcuODcsMjcuODcsMCwwLDAtMjkuNTcsMCwxLjUxLDEuNTEsMCwwLDAt'@;
put 'LjQ4LDIuMTFsLjExLjE3YTEuNDksMS40OSwwLDAsMCwyLC40NiwyNC42OCwyNC42OCwwLDAsMSwyNi4yNiwwLDEuNDksMS40OSwwLDAsMCwyLS40NmwuMTEtLjE3QTEuNTEsMS41MSwwLDAsMCwzMi43Niw5LjM4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMyIgZD0iTTI4LjgyLDE1LjQ0YTIwLjU5LDIwLjU5LDAsMCwwLTIxLjcsMCwxLjUxLDEuNTEsMCwwLDAtLjQ2LDIuMWwuMTEuMTdhMS40OSwxLjQ5LDAsMCwwLDIsLjQ2LDE3LjQsMTcuNCwwLDAsMSwxOC4zNiwwLDEuNDksMS40OSwwLDAsMCwyLS40NmwuMTEtLjE3'@;
put 'QTEuNTEsMS41MSwwLDAsMCwyOC44MiwxNS40NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0yNC44OCwyMS40OWExMy40MSwxMy40MSwwLDAsMC0xMy44MiwwLDEuNSwxLjUsMCwwLDAtLjQ2LDIuMDlsLjEuMTZhMS41'@;
put 'MiwxLjUyLDAsMCwwLDIuMDYuNDQsMTAuMjcsMTAuMjcsMCwwLDEsMTAuNDIsMCwxLjUyLDEuNTIsMCwwLDAsMi4wNi0uNDVsLjEtLjE2QTEuNDksMS40OSwwLDAsMCwyNC44OCwyMS40OVoiLz5cbicpLFQuQ2xyU2hhcGVSYWNrU2VydmVyPSgwLHYuY2xySWNvblNWRykoJzxyZWN0IGNsYXNz'@;
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 'KSxULkNsclNoYXBlSGFyZERpc2s9KDAsdi5jbHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIHg9IjYiIHk9IjIwIiB3aWR0aD0iMjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xh'@;
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 'MlYyMlptMjgsNUgyNlYyNWg0WiIvPlxuJyksVC5DbHJTaGFwZUJhY2t1cFJlc3RvcmU9KDAsdi5jbHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIHg9IjYiIHk9IjIyIiB3aWR0aD0iMjQiIGhlaWdo'@;
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 'LDEsMCwyLDBWNmw0LDMuOTVBMSwxLDAsMSwwLDI0LjM4LDguNUwxOCwyLjE2LDExLjYxLDguNUExLDEsMCwwLDAsMTMsOS45MloiLz5cbicpLFQuQ2xyU2hhcGVCYWNrdXA9KDAsdi5jbHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGlu'@;
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 'ICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgZD0iTTIsMjR2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjRabTI4LDRIMjZWMjZoNFoiLz5cbicpLFQuQ2xyU2hhcGVEZXZpY2VzPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsMTNIMjRhMiwyLDAsMCwwLTIsMlYzMGEyLDIsMCwwLDAsMiwyaDhhMiwyLDAsMCwwLDItMlYxNUEyLDIsMCwwLDAsMzIsMTNabTAsMlYyNkgyNFYxNVpNMjQsMzBWMjcuNmg4VjMwWiIvPlxuICAgICAgICAgICAgPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yMCwyMkg0VjZIMjh2NWgyVjZhMiwyLDAsMCwwLTItMkg0QTIsMiwwLDAsMCwyLDZWMjJhMiwyLDAsMCwwLDIsMkgyMFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMjAsMjZIOWExLDEsMCwwLDAsMCwySDIwWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLDEzSDI0YTIsMiwwLDAsMC0yLDJWMzBhMiwyLDAsMCwwLDIsMmg4YTIsMiwwLDAs'@;
put 'MCwyLTJWMTVBMiwyLDAsMCwwLDMyLDEzWm0wLDJWMjhIMjRWMTVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjgsNEg0QTIsMiwwLDAsMCwyLDZWMjJhMiwyLDAsMCwwLDIsMmg4djJIOS4zMkExLjIsMS4yLDAsMCww'@;
put 'LDgsMjdhMS4yLDEuMiwwLDAsMCwxLjMyLDFIMTkuOTJ2LS4zN0gyMFYyMkg0VjZIMjh2NWgyVjZBMiwyLDAsMCwwLDI4LDRaIi8+XG4nKSxULkNsclNoYXBlS2V5Ym9hcmQ9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi'@;
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 'N0g5Wm0wLTRIN1YxM0g5Wm0yLDJoMnYySDExWm0xMy44OCw3SDExLjEzVjIySDI0Ljg4Wk0yNSwxOUgyM1YxN2gyWm0wLTRIMjNWMTNoMlptMy45NCw5SDI3VjIyaDEuOTRaTTI5LDE5SDI3VjE3aDJabTAtNEgyN1YxM2gyWiIvPlxuJyksVC5DbHJTaGFwZU1vdXNlPSgwLHYuY2xySWNvblNW'@;
put 'RykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsMzRBMTAsMTAsMCwwLDEsOCwyNFYxMmExMCwxMCwwLDAsMSwyMCwwVjI0QTEwLDEwLDAsMCwxLDE4LDM0Wk0xOCw0YTgsOCwwLDAsMC04LDhWMjRhOCw4LDAsMCwwLDE2LDBWMTJBOCw4'@;
put 'LDAsMCwwLDE4LDRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDE1YTEsMSwwLDAsMS0xLTFWMTBhMSwxLDAsMCwxLDIsMHY0QTEsMSwwLDAsMSwxOCwxNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTEwLDEwLDAsMCwwLDgsMTJWMjRhMTAsMTAsMCwwLDAsMjAsMFYxMkExMCwxMCwwLDAsMCwxOCwyWm0xLjMsMTEuNDRhMS4zLDEuMywwLDAsMS0yLjYsMFYxMGExLjMsMS4zLDAsMCwxLDIuNiwwWiIvPlxuJyksVC5D'@;
put 'bHJTaGFwZURhc2hib2FyZD0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI1LjE4LDEyLjMybC01LjkxLDUuODFhMywzLDAsMSwwLDEuNDEsMS40Mmw1LjkyLTUuODFaIi8+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 'Z2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbicpLFQuQ2xyU2hhcGVIb3N0PSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsMjQuM2EyLjQ4LDIuNDgsMCwxLDAsMi40OCwyLjQ3QTIuNDgsMi40OCwwLDAs'@;
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 'Z2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI1LjkiIHI9IjUiLz5cbicpLFQuQ2xyU2hhcGVTdG9yYWdlPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMs'@;
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 'LTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNS44NiIgcj0iNSIvPlxuJyksVC5DbHJTaGFwZUNsdXN0ZXI9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjM2LDhIMjcuNXYySDMxVjMwSDI3LjV2MkgzM1Y5LjY3QTEuNjUsMS42NSwwLDAsMCwzMS4zNiw4WiIgY2xh'@;
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+XG4gICAgICAgICcpLFQuQ2xyU2hhcGVBcHBsaWNhdGlvbnM9KDAsdi5jbHJJY29uU1ZHKSgnPHBvbHlnb24gcG9pbnRzPSI4IDggNCA4IDQg'@;
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 'ICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC05LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksVC5DbHJTaGFwZUJ1aWxkaW5nPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOS44'@;
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+XG4gICAgICAgICcpLFQuQ2xyU2hhcGVDUFU9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIzLjA4LDIzLjA3aC0xMXYxLjVIMjMuODNhLjc1Ljc1LDAsMCwwLC43'@;
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 'Wk0yNSwyMy44MUExLjE4LDEuMTgsMCwwLDEsMjQsMjVIMTNWMjNIMjNWMTFoMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgJyksVC5DbHJTaGFwZU1lbW9yeT0oMCx2LmNsckljb25TVkcpKCc8cmVjdCB4PSI4IiB5PSIxMiIgd2lkdGg9IjQi'@;
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+XG4gICAgICAgICcpLFQuQ2xyU2hhcGVEYXRhQ2x1c3Rlcj0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYuNSw0LjA4QzIyLjc3LDQuMDgsMTksNS40LDE5LDcu'@;
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 'PSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSxULkNsclNoYXBlUmVzb3VyY2VQb29sPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy42OCwxNS40SDMxLjczYTE0LDE0LDAsMCwx'@;
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+XG4gICAgICAgICcpLFQuQ2xyU2hhcGVTaGllbGRDaGVjaz0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYu'@;
put 'NjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUu'@;
put 'MDUsMTMuNjYtMTguNDVWNy41OVpNMzAsMTUuOTNjMCwxMS0xMCwxNS42MS0xMiwxNi40My0yLS44Mi0xMi01LjQ0LTEyLTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0yLjI1LDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODItMyw0OC4yMyw0OC4yMywwLDAsMCw1LjgyLDNBNDcuNTQs'@;
put 'NDcuNTQsMCwwLDAsMzAsOS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuODgsMTYuODdhMSwxLDAsMCwwLTEuNDEsMS40MWw2LDZMMjYuNCwxMy43N0ExLDEsMCwwLDAsMjUsMTIuMzNsLTkuNDcsOS4x'@;
put 'OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwz'@;
put 'LjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVptLTQuNTcsNi42NUwxNS41MSwyNC45LDkuMTksMTguNTdhMS40LDEuNCww'@;
put 'LDAsMSwyLTJMMTUuNTQsMjEsMjQuNzMsMTJhMS40LDEuNCwwLDEsMSwyLDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICcpLFQuQ2xyU2hhcGVTaGllbGQ9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjI1LDcuNGE0My43OSw0My43'@;
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 'ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksVC5DbHJTaGFwZVNoaWVsZFg9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjI1LDcuNGE0My43OSw0My43OSwwLDAsMS02LjYyLTIuMzUsNDUsNDUs'@;
put 'MCwwLDEtNi4wOC0zLjIxTDE4LDEuNWwtLjU0LjM1YTQ1LDQ1LDAsMCwxLTYuMDgsMy4yMUE0My43OSw0My43OSwwLDAsMSw0Ljc1LDcuNEw0LDcuNTl2OC4zNGMwLDEzLjM5LDEzLjUzLDE4LjQsMTMuNjYsMTguNDVsLjM0LjEyLjM0LS4xMmMuMTQsMCwxMy42Ni01LjA1LDEzLjY2LTE4LjQ1'@;
put 'VjcuNTlaTTMwLDE1LjkzYzAsMTEtMTAsMTUuNjEtMTIsMTYuNDMtMi0uODItMTItNS40NC0xMi0xNi40M1Y5LjE0YTQ3LjU0LDQ3LjU0LDAsMCwwLDYuMTgtMi4yNSw0OC4yMyw0OC4yMywwLDAsMCw1LjgyLTMsNDguMjMsNDguMjMsMCwwLDAsNS44MiwzQTQ3LjU0LDQ3LjU0LDAsMCwwLDMw'@;
put 'LDkuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjgxLDEwLjc5LDE4LDE1LjYxbC00LjgxLTQuODFhMSwxLDAsMCwwLTEuNDEsMS40MUwxNi41OSwxN2wtNC44MSw0LjgxYTEsMSwwLDEsMCwxLjQxLDEu'@;
put 'NDFMMTgsMTguNDNsNC44MSw0LjgxYTEsMSwwLDAsMCwxLjQxLTEuNDFMMTkuNDEsMTdsNC44MS00LjgxYTEsMSwwLDAsMC0xLjQxLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjI1LDcuNGE0My43'@;
put 'OSw0My43OSwwLDAsMS02LjYyLTIuMzUsNDUsNDUsMCwwLDEtNi4wOC0zLjIxTDE4LDEuNWwtLjU0LjM1YTQ1LDQ1LDAsMCwxLTYuMDgsMy4yMUE0My43OSw0My43OSwwLDAsMSw0Ljc1LDcuNEw0LDcuNTl2OC4zNGMwLDEzLjM5LDEzLjUzLDE4LjQsMTMuNjYsMTguNDVsLjM0LjEyLjM0LS4x'@;
put 'MmMuMTQsMCwxMy42Ni01LjA1LDEzLjY2LTE4LjQ1VjcuNTlaTTI0LjUxLDIxLjU1YTEuNCwxLjQsMCwwLDEtMiwyTDE4LDE5bC00LjUzLDQuNTNhMS40MywxLjQzLDAsMCwxLTIsMCwxLjQsMS40LDAsMCwxLDAtMkwxNiwxN2wtNC41My00LjUzYTEuNCwxLjQsMCwxLDEsMi0yTDE4LDE1bDQu'@;
put 'NTMtNC41M2ExLjQsMS40LDAsMCwxLDIsMkwyMCwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgJyksVC5DbHJTaGFwZUltcG9ydD0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjgsNEgxNC44N0w4LDEwLjg2VjE1aDJWMTMuNjFoNy42'@;
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+XG4gICAgICAgICcpLFQuQ2xyU2hhcGVFeHBvcnQ9KDAsdi5jbHJJY29uU1ZH'@;
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 'IGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSxULkNsclNoYXBlVXBsb2FkQ2xvdWQ9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMwLjMxLDEzYzAtLjEsMC0uMjEs'@;
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 'VC5DbHJTaGFwZURvd25sb2FkQ2xvdWQ9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMwLjMxLDEzYzAtLjEsMC0uMjEsMC0uMzJhMTAuMjYsMTAuMjYsMCwwLDAtMTAuNDUtMTAsMTAuNDcsMTAuNDcsMCwwLDAtOS42LDYuMUE5LjY1LDkuNjUsMCwwLDAsMTAuODksMjhhMywzLDAsMCwx'@;
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 'ICAgICAnKSxULkNsclNoYXBlUGx1Z2luPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOS44MSwxNkgyOVY4LjgzYTIsMiwwLDAsMC0yLTJIMjFBNS4xNCw1LjE0LDAsMCwwLDE2LjUxLDIsNSw1LDAsMCwwLDExLDYuODNINGEyLDIsMCwwLDAtMiwyVjE3SDQuODFBMy4xMywzLjEzLDAs'@;
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 'ZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksVC5DbHJTaGFw'@;
put 'ZUZsb3BweT0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcuMzYsNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjguNzhaTTI1LDMwSDExVjIySDI1Wm01LDBIMjdWMjJhMiwyLDAsMCwwLTItMkgxMWEyLDIsMCwwLDAtMiwydjhINlY2aDR2'@;
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 'bGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAnKSxULkNsclNoYXBlQ29tcHV0ZXI9KDAsdi5jbHJJY29uU1ZHKSgnPHBvbHlnb24gcG9pbnRzPSI5LjYgMjIuODggOS42IDEwLjYgMjQuNCAxMC42IDI1Ljk4IDkgOCA5IDgg'@;
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+XG4gICAgICAgICcpLFQuQ2xyU2hhcGVEaXNwbGF5PSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMi41LDNIMy41QTEuNSwx'@;
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+XG4gICAgICAgICcpLFQu'@;
put 'Q2xyU2hhcGVUZXJtaW5hbD0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNUg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjdBMiwyLDAsMCwwLDMyLDVaTTQsN0gzMlY5LjJINFpNNCwyOVYxMC44SDMyVjI5WiIgY2xhc3M9ImNsci1pLW91'@;
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+XG4gICAgICAgICcpLFQuQ2xyU2hhcGVDb2RlPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMy43MSwxMi41OWExLDEsMCwwLDAtMS4zOS0uMjZMNS43OSwxNi43OGExLDEsMCwwLDAsMCwxLjY1bDYuNTMsNC40NWExLDEsMCwxLDAsMS4xMy0x'@;
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 'bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgJyksVC5DbHJTaGFwZUFwcGxpY2F0aW9uPSgwLHYuY2xySWNvblNWRykoJzxyZWN0IHg9IjUiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOSIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMyIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNEg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMyLDRaTTQsNkgzMnY0LjJINFpNNCwzMFYxMS44SDMyVjMw'@;
put 'WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNEg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMyLDRabTAsNi4ySDRWNkgzMloiIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI1IiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOSIgeT0iNyIgd2lk'@;
put 'dGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzIiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPlxuICAgICAgICAn'@;
put 'KSxULkNsclNoYXBlQmF0dGVyeT0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTguNTksMTEuNzdhMSwxLDAsMCwwLTEuNzMsMWwyLjUsNC4zNC02LjA3LTEsNS4yOSwxMC41OWExLDEsMCwwLDAsMS43OS0uODlsLTMuNTMtNy4wOCw2LjM4LDEuMDZaIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
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+XG4gICAgICAgICcpLFQuQ2xyU2hhcGVNb2JpbGU9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI1LDRIMTFBMiwyLDAsMCwwLDksNlYzMGEyLDIsMCwwLDAsMiwySDI1YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMjUsNFpNMTEsNkgyNVYyNEgxMVpt'@;
put 'MCwyNFYyNkgyNXY0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNyIgeT0iMjciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggZD0iTTI1LDRIMTFBMiwyLDAsMCwwLDksNlYzMGEyLDIsMCwwLDAsMiwySDI1YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMjUsNFpNMTksMzBIMTdWMjhoMlptLTgtNFY2SDI1VjI2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5c'@;
put 'biAgICAgICAgJyksVC5DbHJTaGFwZVRhYmxldD0oMCx2LmNsckljb25TVkcpKCc8cmVjdCB4PSIxNyIgeT0iMjkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDJINkEy'@;
put 'LDIsMCwwLDAsNCw0VjMyYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwzMCwyWm0wLDJWMjYuMzhINlY0Wk02LDMyVjI4SDMwdjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0z'@;
put 'MCwySDZBMiwyLDAsMCwwLDQsNFYzMmEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMzAsMlpNMTksMzJIMTdWMzBoMlpNNiwyOFY0SDMwVjI4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgJyksVC5DbHJTaGFw'@;
put 'ZU5ldHdvcmtHbG9iZT0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYuNTgsMzJoLTE4YTEsMSwwLDEsMCwwLDJoMThhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3Ljc1LDJh'@;
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+XG4gICAgICAgICcpLFQuQ2xy'@;
put 'U2hhcGVOZXR3b3JrU2V0dGluZ3M9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEwLjg1LDI3LjQ0YTIuMjksMi4yOSwwLDAsMCwxLjc0LTEuNjhjLjU0LS4xNCwxLjA2LS4zMiwxLjU5LS41MXYtMS4yYTIuNzcsMi43NywwLDAsMSwuMDYtLjUxLDE3LjQ0LDE3LjQ0LDAsMCwxLTEuODIu'@;
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+XG4gICAgICAgICcpLFQuQ2xyU2hhcGVOZXR3b3JrU3dpdGNoPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy45MSwxOC40NywzMC43'@;
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 'ICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAnKSxULkNsclNoYXBlUm91dGVyPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwx'@;
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+XG4gICAgICAgICcpLFQuQ2xyU2hhcGVWTT0oMCx2LmNs'@;
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 'YmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAnKSxULkNsclNoYXBlVk1XQXBwPSgwLHYuY2xySWNvblNWRykoJzxwb2x5Z29uIHBvaW50cz0iMjggMjIgMzAgMjIgMzAgMzAgMjIgMzAgMjIgMjggMjAgMjggMjAgMzIgMzIgMzIgMzIg'@;
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+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAnKSxULkNsclNoYXBlQ2VydGlmaWNh'@;
put 'dGU9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMTlsLjU3LS43LjkzLTEuMTRMMjAuNDEsMjhINFY4SDMybDAsOC41NmE4LjQxLDguNDEsMCwwLDEsMiwxLjgxVjhBMiwyLDAsMCwwLDMyLDZaIiBjbGFzcz0iY2xyLWkt'@;
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+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgJyksVC5DbHJT'@;
put 'aGFwZUFyY2hpdmU9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LDMySDdWMjJINVYzMmEyLDIsMCwwLDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjJIMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0x'@;
put 'NCwyNGExLDEsMCwwLDAsMSwxaDZhMSwxLDAsMCwwLDAtMkgxNUExLDEsMCwwLDAsMTQsMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNCwxOEg2VjE0aDRhMywzLDAsMCwxLS42OC0xLjg3czAtLjA5LDAt'@;
put 'LjEzSDUuNUExLjUsMS41LDAsMCwwLDQsMTMuNVYyMEgxNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjUsMTJIMjYuNjZzMCwuMDksMCwuMTNBMywzLDAsMCwxLDI2LDE0aDR2NEgyMmwtMiwySDMyVjEz'@;
put 'LjVBMS41LDEuNSwwLDAsMCwzMC41LDEyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTkuMThsNi4zOC02LjM1QTEsMSwwLDEsMCwyMywxMS40MWwtNCwzLjk1VjNhMSwxLDAsMSwwLTIsMHYxMi40bC00'@;
put 'LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LjQxLDIwLjYsMTgsMjJsLTEuNDEtMS40TDE2LDIwSDVWMzJhMiwyLDAsMCwwLDIsMkgyOWEyLDIsMCwwLDAsMi0y'@;
put 'VjIwSDIwWk0yMiwyNGExLDEsMCwwLDEtMSwxSDE1YTEsMSwwLDAsMSwwLTJoNkExLDEsMCwwLDEsMjIsMjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjUsMTJIMjYuNjZzMCwuMDksMCwuMTNhMywzLDAsMCwx'@;
put 'LS44OCwyLjEyTDIyLDE4SDMyVjEzLjVBMS41LDEuNSwwLDAsMCwzMC41LDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC4yLDE0LjI1YTMsMywwLDAsMS0uODgtMi4xMnMwLS4wOSwwLS4xM0g1LjVBMS41LDEu'@;
put 'NSwwLDAsMCw0LDEzLjVWMThIMTRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE5LjE4bDYuMzgtNi4zNUExLDEsMCwxLDAsMjMsMTEuNDFsLTQsMy45NVYzYTEsMSwwLDEsMC0yLDB2MTIuNGwtNC0zLjk1YTEs'@;
put 'MSwwLDAsMC0xLjQxLDEuNDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPlxuICAgICAgICAnKSxULkNsclNoYXBlVW5hcmNoaXZlPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOSwzMkg3VjIySDVWMzJhMiwyLDAsMCwwLDIsMkgyOWEyLDIsMCwwLDAs'@;
put 'Mi0yVjIySDI5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTQsMjRhMSwxLDAsMCwwLDEsMWg2YTEsMSwwLDAsMCwwLTJIMTVBMSwxLDAsMCwwLDE0LDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUsMThINlYxNGg5VjEySDUuNUExLjUsMS41LDAsMCwwLDQsMTMuNVYyMEgxNS43OEEzLDMsMCwwLDEsMTUsMThaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAg'@;
put 'ICAgIDxwYXRoIGQ9Ik0zMC41LDEySDIxdjJoOXY0SDIxYTMsMywwLDAsMS0uNzgsMkgzMlYxMy41QTEuNSwxLjUsMCwwLDAsMzAuNSwxMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLDkuNTUsMTcsNS42'@;
put 'VjE4YTEsMSwwLDEsMCwyLDBWNS42bDQsMy45NWExLDEsMCwxLDAsMS40MS0xLjQyTDE4LDEuNzgsMTEuNjEsOC4xM0ExLDEsMCwwLDAsMTMsOS41NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIxYTMs'@;
put 'MywwLDAsMS0yLjIyLTFINVYzMmEyLDIsMCwwLDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjBIMjAuMjFBMywzLDAsMCwxLDE4LDIxWm00LDNhMSwxLDAsMCwxLTEsMUgxNWExLDEsMCwwLDEsMC0yaDZBMSwxLDAsMCwxLDIyLDI0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh'@;
put 'dGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSwxMkg1LjVBMS41LDEuNSwwLDAsMCw0LDEzLjVWMThIMTVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjUsMTJIMjF2NkgzMlYxMy41QTEuNSwxLjUs'@;
put 'MCwwLDAsMzAuNSwxMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMsOS41NSwxNyw1LjZWMThhMSwxLDAsMSwwLDIsMFY1LjZsNCwzLjk1YTEsMSwwLDEsMCwxLjQxLTEuNDJMMTgsMS43OCwxMS42MSw4LjEzQTEs'@;
put 'MSwwLDAsMCwxMyw5LjU1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz5cbiAgICAgICAgJyksVC5DbHJTaGFwZUNvbm5lY3Q9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0LDE3SDI4LjIzQTYuMjUsNi4yNSwwLDAsMCwyMiwxMkgxNC4xNWE2LjI1LDYu'@;
put 'MjUsMCwwLDAtNi4yMSw1SDJ2Mkg3LjkzYTYuMjIsNi4yMiwwLDAsMCw2LjIyLDVIMjJhNi4yMiw2LjIyLDAsMCwwLDYuMjItNUgzNFpNMTcuMDgsMjJIMTQuMTVhNC4xNyw0LjE3LDAsMCwxLTQuMzEtNCw0LjE3LDQuMTcsMCwwLDEsNC4zMS00aDIuOTRaTTIyLDIySDE5VjE0aDNhNC4xNyw0'@;
put 'LjE3LDAsMCwxLDQuMzEsNEE0LjE3LDQuMTcsMCwwLDEsMjIsMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywxMkgxNC4xNWE2LjI1LDYuMjUsMCwwLDAtNi4yMSw1SDJ2Mkg3LjkzYTYuMjIsNi4yMiww'@;
put 'LDAsMCw2LjIyLDVIMTdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjIzLDE3QTYuMjUsNi4yNSwwLDAsMCwyMiwxMkgxOVYyNGgzYTYuMjIsNi4yMiwwLDAsMCw2LjIyLTVIMzRWMTdaIiBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAnKSxULkNsclNoYXBlRGlzY29ubmVjdD0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTIuMTcsNkE2LjIxLDYuMjEsMCwwLDAsNiwxMUgyLjEzdjJINmE2LjIzLDYuMjMsMCwwLDAsNi4yMSw1SDE3VjZaTTE1LjEsMTZI'@;
put 'MTIuMTdhNC4yLDQuMiwwLDAsMS00LjMxLTQsNC4xNyw0LjE3LDAsMCwxLDQuMzEtNEgxNS4xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuOTIsMjNIMzAuMTRhNi4yNSw2LjI1LDAsMCwwLTYuMjEtNUgx'@;
put 'OXYySDE0YTEsMSwwLDEsMCwwLDJoNXY0SDE0YTEsMSwwLDAsMC0xLDEsMSwxLDAsMCwwLDEsMWg1djJoNC45NGE2LjIzLDYuMjMsMCwwLDAsNi4yMi01aDMuNzZabS0xMCw1SDIxVjIwaDIuOTRhNC4xNyw0LjE3LDAsMCwxLDQuMzEsNEE0LjE3LDQuMTcsMCwwLDEsMjMuOTQsMjhaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMiw2YTYuMjEsNi4yMSwwLDAsMC02LjIxLDVIMnYySDUuODNBNi4yMyw2LjIzLDAsMCwwLDEyLDE4SDE3VjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0'@;
put 'aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjc5LDIzSDMwLjE0YTYuMjUsNi4yNSwwLDAsMC02LjIxLTVIMTl2MkgxNGExLDEsMCwwLDAtMSwxLDEsMSwwLDAsMCwxLDFoNXY0SDE0YTEsMSwwLDAsMC0xLDEsMSwxLDAsMCwwLDEsMWg1djJoNC45NGE2LjIzLDYuMjMsMCwwLDAs'@;
put 'Ni4yMi01aDMuNjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAnKSxULkNsclNoYXBlTGluaz0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTcuNiwyNC4zMmwtMi40NiwyLjQ0YTQsNCwwLDAsMS01LjYyLDAsMy45MiwzLjkyLDAsMCwx'@;
put 'LDAtNS41NWw0LjY5LTQuNjVhNCw0LDAsMCwxLDUuNjIsMCwzLjg2LDMuODYsMCwwLDEsMSwxLjcxQTIsMiwwLDAsMCwyMS4xLDE4bDEuMjktMS4yOGE1Ljg5LDUuODksMCwwLDAtMS4xNS0xLjYyLDYsNiwwLDAsMC04LjQ0LDBMOC4xLDE5Ljc5YTUuOTEsNS45MSwwLDAsMCwwLDguMzksNiw2'@;
put 'LDAsMCwwLDguNDQsMGwzLjY1LTMuNjJjLS4xNywwLS4zMywwLS41LDBBOCw4LDAsMCwxLDE3LjYsMjQuMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC42MSw3LjgyYTYsNiwwLDAsMC04LjQ0LDBsLTMu'@;
put 'NjUsMy42MmMuMTcsMCwuMzMsMCwuNDksMGgwYTgsOCwwLDAsMSwyLjEuMjhsMi40Ni0yLjQ0YTQsNCwwLDAsMSw1LjYyLDAsMy45MiwzLjkyLDAsMCwxLDAsNS41NWwtNC42OSw0LjY1YTQsNCwwLDAsMS01LjYyLDAsMy44NiwzLjg2LDAsMCwxLTEtMS43MSwyLDIsMCwwLDAtLjI4LjIzbC0x'@;
put 'LjI5LDEuMjhhNS44OSw1Ljg5LDAsMCwwLDEuMTUsMS42Miw2LDYsMCwwLDAsOC40NCwwbDQuNjktNC42NWE1LjkyLDUuOTIsMCwwLDAsMC04LjM5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICcpLFQuQ2xyU2hhcGVVbmxpbms9KDAs'@;
put 'di5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTUsNSwzLjU5LDYuNDFsOSw5TDguMSwxOS43OWE1LjkxLDUuOTEsMCwwLDAsMCw4LjM5LDYsNiwwLDAsMCw4LjQ0LDBMMjEsMjMuNzhsOC42Myw4LjYzTDMxLDMxWk0xNS4xMywyNi43NmE0LDQsMCwwLDEtNS42MiwwLDMuOTIsMy45MiwwLDAsMSww'@;
put 'LTUuNTVMMTQsMTYuNzlsNS41OCw1LjU4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEuNTMsOS4yMmE0LDQsMCwwLDEsNS42MiwwLDMuOTIsMy45MiwwLDAsMSwwLDUuNTVsLTQuNzksNC43NkwyMy43OCwy'@;
put 'MWw0Ljc5LTQuNzZhNS45Miw1LjkyLDAsMCwwLDAtOC4zOSw2LDYsMCwwLDAtOC40NCwwbC00Ljc2LDQuNzRMMTYuNzgsMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgJyksVC5DbHJTaGFwZUNsb3VkTmV0d29yaz0oMCx2LmNscklj'@;
put 'b25TVkcpKCc8cGF0aCBkPSJNMzAuNzEsMTUuMTh2LTFBMTEuMjgsMTEuMjgsMCwwLDAsMTkuNTYsMi44M2gtLjExYTExLjI4LDExLjI4LDAsMCwwLTExLDguOTMsNy40Nyw3LjQ3LDAsMCwwLDAsMTQuOTRIMjkuMTNhNS44Niw1Ljg2LDAsMCwwLDEuNTgtMTEuNTJaTTI5LjEzLDI0LjdIOC40'@;
put 'NmE1LjQ3LDUuNDcsMCwxLDEsMC0xMC45NGgxLjY5bC4xMS0uODdhOS4yNyw5LjI3LDAsMCwxLDE4LjQ1LDEuM3YxLjI4YzAsLjA5LDAsLjE4LDAsLjI3bC0uMDcsMS4xNS45NC4xMWEzLjg2LDMuODYsMCwwLDEtLjQzLDcuNzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS41OCwzMS4xOEgxOC44NXYtMi40aC0ydjIuNEg2LjA4YTEsMSwwLDAsMCwwLDJoMjMuNWExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICcpLFQu'@;
put 'Q2xyU2hhcGVDbG91ZFNjYWxlPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LjMyLDExLjExSDcuODRMOCwxMC4yNEE3LjE5LDcuMTksMCwwLDEsMTUuMDcsNGguMDdhNy4xNSw3LjE1LDAsMCwxLDQuNzEsMS44MywxMS4xLDExLjEsMCwwLDEsMy4wOS42NEE5LjE4LDkuMTgsMCwwLDAs'@;
put 'MTUuMTYsMmgtLjA5QTkuMiw5LjIsMCwwLDAsNi4xMyw5LjExLDYuMTUsNi4xNSwwLDAsMCwyLjMzLDE5Ljk1LDguMDksOC4wOSwwLDAsMSwzLDE3LjcxYTQuMTIsNC4xMiwwLDAsMS0uODEtMi40NEE0LjE2LDQuMTYsMCwwLDEsNi4zMiwxMS4xMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjQsMTYuOTFoMS41MkwxMiwxNmE3LjE5LDcuMTksMCwwLDEsNy4xMi02LjI1aC4wN2E3LjE3LDcuMTcsMCwwLDEsNS43LDIuOTIsMTEuMDUsMTEuMDUsMCwwLDEsMi43Mi43Nyw5LjIsOS4yLDAsMCwwLTgu'@;
put 'NC01LjY5aC0uMDlhOS4yLDkuMiwwLDAsMC04Ljk0LDcuMTIsNi4xNSw2LjE1LDAsMCwwLTMuNjQsMTEsOC4xMSw4LjExLDAsMCwxLC43OS0yLDQuMTQsNC4xNCwwLDAsMSwzLTdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGQ9Ik0zMi40MiwyNC40N3YtLjYyYTkuMTgsOS4xOCwwLDAsMC0xOC4xMy0yLjE2QTYuMTYsNi4xNiwwLDAsMCwxNC40OCwzNEgzMWE0Ljg4LDQuODgsMCwwLDAsMS40Ni05LjUzWk0zMSwzMkgxNC40OGE0LjE2LDQuMTYsMCwxLDEsMC04LjMySDE2bC4xMS0uODdhNy4xOSw3LjE5LDAs'@;
put 'MCwxLDcuMTItNi4yNWguMDdhNy4yMSw3LjIxLDAsMCwxLDcuMTIsNy4yNXYxYzAsLjA3LDAsLjEzLDAsLjJsLS4wNywxLjExLjk0LjExQTIuODgsMi44OCwwLDAsMSwzMSwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAnKSxULkNs'@;
put 'clNoYXBlQ2xvdWRUcmFmZmljPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi41NCwyMC44MmEuODguODgsMCwwLDAtLjg4LS44OEgyMC43NWwxLjEtMS4xQS44OC44OCwwLDAsMCwyMC42LDE3LjZsLTMuMjEsMy4yMkwyMC42LDI0YS44OC44OCwwLDEsMCwxLjI1LTEuMjRMMjAuNzYs'@;
put 'MjEuN2g0LjlBLjg4Ljg4LDAsMCwwLDI2LjU0LDIwLjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuMjcsMjEuN2EuODguODgsMCwxLDAsMC0xLjc2aC0uNThhLjg4Ljg4LDAsMSwwLDAsMS43NloiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjIxLDIwaC0uMDZhLjg1Ljg1LDAsMCwwLS44NS44OC45MS45MSwwLDAsMCwuOTEuODguODguODgsMCwxLDAsMC0xLjc2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuNTksMTFhLjg4Ljg4LDAsMCwwLTEuMjUsMS4yNGwxLjEsMS4xSDI3LjUzYS44OC44OCwwLDEsMCwwLDEuNzZoNC45bC0xLjA5LDEuMDlhLjg4Ljg4LDAsMCwwLDEuMjUsMS4yNGwzLjIxLTMuMjJaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC41LDE1LjA3YS44OC44OCwwLDEsMCwwLTEuNzZoLS41OGEuODguODgsMCwxLDAsMCwxLjc2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUi'@;
put 'IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEuOSwxNC4yN2EuODUuODUsMCwwLDAtLjg1LS44OEgyMWEuODguODgsMCwxLDAsMCwxLjc2QS45MS45MSwwLDAsMCwyMS45LDE0LjI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAg'@;
put 'ICA8cGF0aCBkPSJNMzAuMzYsMjMuNjVjMCwuMTMsMCwuMjYsMCwuMzlhMy43NywzLjc3LDAsMCwxLTMuNjIsMy44OUg3LjI4YTUuMzIsNS4zMiwwLDAsMS01LjEzLTUuNDhBNS4zMiw1LjMyLDAsMCwxLDcuMjgsMTdIOC45MUw5LDE2LjEyYTguOTIsOC45MiwwLDAsMSw4LjYyLThoLjA4YTgu'@;
put 'NDksOC40OSwwLDAsMSw2LjU2LDMuMjloMi4zN2ExMC41NSwxMC41NSwwLDAsMC04LjkxLTUuMjVoLS4xMUExMC44MiwxMC44MiwwLDAsMCw3LjIyLDE1YTcuMjgsNy4yOCwwLDAsMC03LDcuNDMsNy4yNyw3LjI3LDAsMCwwLDcuMDgsNy40M0gyNi43N0E1LjcyLDUuNzIsMCwwLDAsMzIuMzUs'@;
put 'MjRhMy43NywzLjc3LDAsMCwwLDAtLjM5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+XG4gICAgICAgICcpLFQuQ2xyU2hhcGVEZXBsb3k9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTEiIGQ9Ik0zMywySDIyLjFhMSwxLDAsMCwwLDAsMmg4LjUzbC04LjgyLDlhMSwxLDAsMSwwLDEuNDMsMS40TDMyLDUuNDZWMTMuOWExLDEsMCwwLDAsMiwwVjNBMSwxLDAsMCwwLDMzLDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMiIgZD0iTTExLjU0LDEwLjczbC05LDUuMTdhMSwxLDAsMCwwLS41Ljg3djExYTEsMSwwLDAsMCwuNS44N2w5LDUuMTVhMSwxLDAsMCwwLDEsMGw5LTUuMTVhMSwxLDAsMCwwLC41LS44N3YtMTFhMSwxLDAsMCwwLS41LS44N2wtOS01LjE3QTEsMSwwLDAsMCwxMS41NCwxMC43M1pN'@;
put 'MTEsMzEuMDhsLTctNFYxOC40NGw3LDRaTTEyLDIxLDQuODEsMTYuODcsMTIsMTIuNzhsNy4yMSw0LjEyWm04LDYuMDktNyw0VjIyLjQ0bDctNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMywySDIyLjFhMSwxLDAs'@;
put 'MCwwLDAsMmg4LjUzbC04LjgyLDlhMSwxLDAsMSwwLDEuNDMsMS40TDMyLDUuNDZWMTMuOWExLDEsMCwwLDAsMiwwVjNBMSwxLDAsMCwwLDMzLDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTIuNDYsMTAuNzNhMSwx'@;
put 'LDAsMCwwLTEsMGwtOC42OCw1TDEyLDIxbDkuMTktNS4yNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yLDI3LjczYTEsMSwwLDAsMCwuNS44N0wxMSwzMy40NnYtMTFMMiwxNy4yOFoiLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0xMywzMy40Nmw4LjUtNC44NmExLDEsMCwwLDAsLjUtLjg3VjE3LjI5bC05LDUuMTVaIi8+XG4gICAgICAgICcpLFQuQ2xyU2hhcGVIZWxpeD0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWkt'@;
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 'MjQuMzFsNi0zLjg4QS45MS45MSwwLDEsMSwyNSwyMmwtNiwzLjg4YS45MS45MSwwLDAsMS0xLjI2LS4yN1pNMjksMjQuMzRsLTksNS43OGEuOTEuOTEsMCwxLDEtMS0xLjUzbDktNS43OGEuOTEuOTEsMCwxLDEsMSwxLjUzWiIvPlxuICAgICAgICAnKSxULkNsclNoYXBlRmxhc2s9KDAsdi5j'@;
put 'bHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjQzLDI3LjI4LDIzLDE0Ljg0VjRoMWExLDEsMCwwLDAsMC0ySDEyYTEsMSwwLDAsMCwwLDJoMVYxNC44NEw0LjUxLDI3LjM2QTQuMjksNC4yOSwwLDAsMCw1LDMyLjgsNC4zOCw0LjM4LDAsMCwwLDguMTUsMzRIMjhhNC4yNCw0LjI0LDAsMCwwLDMu'@;
put 'NDItNi43MlpNMjkuODUsMzFhMi42MiwyLjYyLDAsMCwxLTIsMUg4YTIuMiwyLjIsMCwwLDEtMi4wNi0xLjQxLDIuNjgsMi42OCwwLDAsMSwuMjktMi4xN2wzLTQuNDQsMTQsMC0xLjMxLTJIMTAuNTdMMTUsMTUuNDZWNGg2VjE1LjQ2bDguODQsMTMuMDVBMi4yMywyLjIzLDAsMCwxLDI5Ljg1'@;
put 'LDMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNDksMjcuNCwyMywxNC45NFY0aDFhMSwxLDAsMCwwLDAtMkgxMi4wOGExLDEsMCwwLDAsMCwySDEzVjE0Ljk0TDQuNTgsMjcuMzFhNC4zMSw0LjMxLDAs'@;
put 'MCwwLS43OCwzQTQuMjMsNC4yMywwLDAsMCw4LDM0SDI3Ljg2QTQuMzYsNC4zNiwwLDAsMCwzMSwzMi44LDQuMjMsNC4yMywwLDAsMCwzMS40OSwyNy40Wk0xNSwxNS40OVY0aDZWMTUuNDlMMjYuMTUsMjNIOS44NVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+'@;
put 'XG4gICAgICAgICcpLFQuQ2xyU2hhcGVBZG1pbmlzdHJhdG9yPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC42OCwxNC44MWE2Ljc2LDYuNzYsMCwxLDEsNi43Ni02Ljc1QTYuNzcsNi43NywwLDAsMSwxNC42OCwxNC44MVptMC0xMS41MWE0Ljc2LDQuNzYsMCwxLDAsNC43Niw0Ljc2'@;
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+XG4gICAgICAgICcpLFQuQ2xyU2hhcGVIYXJkRHJpdmU9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0LDhhMiwyLDAsMCwwLTItMkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0y'@;
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 'aC0xIiAvPlxuICAgICAgICAnKSxULkNsclNoYXBlSGFyZERyaXZlRGlza3M9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LDUuNzRBMS43NCwxLjc0LDAsMCwwLDI0LjI2LDRIMy43NEExLjc0LDEuNzQsMCwwLDAsMiw1Ljc0VjIwLjI2QTEuNzQsMS43NCwwLDAsMCwzLjc0LDIySDRW'@;
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 'IiAvPlxuICAgICAgICAnKSxULkNsclNoYXBlTlZNZT0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcsMjJWMTRhMiwyLDAsMCwwLTItMkgxMWEyLDIsMCwwLDAtMiwydjhhMiwyLDAsMCwwLDIsMkgyNUEyLDIsMCwwLDAsMjcsMjJaTTExLDE0SDI1djhIMTFaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE5IiB5PSI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI1LjAxIiB5PSI2'@;
put 'IiB3aWR0aD0iMS45NyIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01LjgsOEgxNi44N1Y2aC0xMUw3Ljc4LDQuMDhhMSwxLDAsMCwwLDAtMS40MiwxLDEsMCwwLDAtMS40MSwwTDIsNyw2LjM3'@;
put 'LDExLjRhMSwxLDAsMCwwLDEuNDEsMCwxLDEsMCwwLDAsMC0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuNjEsMjQuNjhhMSwxLDAsMCwwLTEuNDEsMCwxLDEsMCwwLDAsMCwxLjQyTDMwLjEsMjhI'@;
put 'MTl2MkgzMC4ybC0yLDJhMSwxLDAsMCwwLDAsMS40MSwxLDEsMCwwLDAsLjcuMjksMSwxLDAsMCwwLC43MS0uMjlMMzQsMjkuMDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzIiB5PSIyOCIgd2lkdGg9IjQi'@;
put 'IGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI5IiB5PSIyOCIgd2lkdGg9IjEuOTciIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+XG4gICAg'@;
put 'ICAgICcpLFQuQ2xyU2hhcGVTU0Q9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wm0wLDIySDRWOEgzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
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 'aC0yIiAvPlxuICAgICAgICAnKSxULkNsclNoYXBlQmx1ZXRvb3RoPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi42NCwyNS4yNywxOSwxNy41MywxOSwzLDI1LjIxLDkuNGwtNS42NSw1Ljc5TDIxLDE2LjYybDUuNjgtNS44MmEyLDIsMCwwLDAsMC0yLjc4TDIwLjQ4LDEuN0EyLjA4'@;
put 'LDIuMDgsMCwwLDAsMTguODUsMSwyLDIsMCwwLDAsMTcsM1YxNS4zOEwxMC4wNSw4LjI3QTEsMSwwLDAsMCw4LjYyLDkuNjZMMTYuNzksMTgsOS4wNiwyNmExLDEsMCwwLDAsMCwxLjQxLDEsMSwwLDAsMCwuNy4yOSwxLDEsMCwwLDAsLjcyLS4zMUwxNywyMC42OFYzM2EyLjA3LDIuMDcsMCww'@;
put 'LDAsLjcxLDEuNjJBMiwyLDAsMCwwLDE5LDM1YTEuOTQsMS45NCwwLDAsMCwxLjQyLS42bDYuMjMtNi4zOEEyLDIsMCwwLDAsMjYuNjQsMjUuMjdaTTE5LDMzLjA1VjIwLjI5bDYuMjEsNi4zNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICA8cGF0'@;
put 'aCBkPSJNMjYuNTIsMjQuNTJsLTUuNjUtNS44My0xLjQ2LTEuNXYtMTJMMjMuNzksOS43bC0zLjYsMy43MSwyLjI0LDIuMjksNC4wOS00LjIyYTIuNTQsMi41NCwwLDAsMCwwLTMuNTZMMjAuNTcsMS43OEEyLjU0LDIuNTQsMCwwLDAsMTYuMiwzLjU1VjEzLjg2bC01LjUzLTUuN2ExLjYsMS42'@;
put 'LDAsMSwwLTIuMywyLjIzTDE1Ljc1LDE4bC03LDcuMTlhMS42LDEuNiwwLDAsMCwwLDIuMjYsMS42MywxLjYzLDAsMCwwLDEuMTIuNDUsMS41OCwxLjU4LDAsMCwwLDEuMTUtLjQ5bDUuMTEtNS4yN1YzMi40NWEyLjUzLDIuNTMsMCwwLDAsMS41OSwyLjM2LDIuNDQsMi40NCwwLDAsMCwuOTUu'@;
put 'MTksMi41NiwyLjU2LDAsMCwwLDEuODMtLjc3bDUuOTUtNi4xNUEyLjU0LDIuNTQsMCwwLDAsMjYuNTIsMjQuNTJaTTE5LjQsMzAuODNWMjEuNzdsNC4zOSw0LjUzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxULkNsclNoYXBlQmx1ZXRvb3RoT2ZmPSgw'@;
put 'LHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOSwzLDI1LjIyLDkuNGwtNS42Niw1LjhMMjEsMTYuNjNsNS42OC01LjgzYTIsMiwwLDAsMCwwLTIuNzhMMjAuNDgsMS43QTIsMiwwLDAsMCwxOC44NSwxLDIsMiwwLDAsMCwxNywzdjExLjRsMiwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTQuNzcsNSwzLjM2LDYuNDIsMTUuODksMTksOS4wNiwyNmExLDEsMCwwLDAsLjcxLDEuNywxLDEsMCwwLDAsLjcyLS4zMUwxNywyMC42OFYzMi45NGEyLjA4LDIuMDgsMCwwLDAsLjcxLDEuNjNBMiwyLDAsMCwwLDE5LDM1YTIsMiwwLDAs'@;
put 'MCwxLjQyLS42bDUuNDEtNS41NCwzLjU0LDMuNTNMMzAuNzcsMzFaTTE5LDMzLjA1di0xMWw1LjQxLDUuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTkuMzEsNS4xNywyMy43LDkuN2wtMy41OSwzLjcxLDIuMjQsMi4yOSw0LjA5'@;
put 'LTQuMjJhMi41NiwyLjU2LDAsMCwwLDAtMy41NmwtNi02LjE0YTIuNTEsMi41MSwwLDAsMC0yLjc3LS41OSwyLjU0LDIuNTQsMCwwLDAtMS42LDIuMzZ2MTBsMy4yMSwzLjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNNC41LDUsMy4wOSw2'@;
put 'LjQyLDE1LjE3LDE4LjUxLDguNywyNS4xOUExLjYsMS42LDAsMCwwLDkuODUsMjcuOSwxLjU3LDEuNTcsMCwwLDAsMTEsMjcuNDFsNS4xMS01LjI3VjMyLjQ1YTIuNTQsMi41NCwwLDAsMCwxLjYsMi4zNiwyLjQ0LDIuNDQsMCwwLDAsLjk1LjE5LDIuNTUsMi41NSwwLDAsMCwxLjgyLS43N2w1'@;
put 'LjEyLTUuMjksMy40OSwzLjQ4TDMwLjUsMzFaTTE5LjgxLDMwLjgzVjIyLjY1bDQsNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksVC5DbHJTaGFwZVByb2Nlc3NPblZNPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy40OSwyNi4yOGExLDEsMCww'@;
put 'LDAtMS4yLS43bC0yLjQ5LjY3YTE0LjIzLDE0LjIzLDAsMCwwLDIuNC02Ljc1QTE0LjQ4LDE0LjQ4LDAsMCwwLDI3LjM3LDcuMzUsMSwxLDAsMCwwLDI2LDcuNDRhMSwxLDAsMCwwLC4wOSwxLjQxLDEyLjQ1LDEyLjQ1LDAsMCwxLDQuMTYsMTAuNDYsMTIuMTksMTIuMTksMCwwLDEtMiw1Ljc0'@;
put 'TDI4LDIyLjU0YTEsMSwwLDEsMC0xLjk1LjE2bC41LDYuNDQsNi4yNS0xLjY2QTEsMSwwLDAsMCwzMy40OSwyNi4yOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik00LjMxLDE3LjA4YTEuMDYsMS4wNiwwLDAsMCwuNDQuMTYsMSwxLDAs'@;
put 'MCwwLDEuMTItLjg1QTEyLjIxLDEyLjIxLDAsMCwxLDE4LjY5LDUuODRMMTYuNDUsNy4zN2ExLDEsMCwwLDAsLjQ3LDEuNzlBMSwxLDAsMCwwLDE3LjU2LDlsNS4zMy0zLjY2TDE4LjMzLjc2YTEsMSwwLDEsMC0xLjM5LDEuMzhsMS43LDEuN0ExNC4yLDE0LjIsMCwwLDAsMy44OSwxNi4xMiwx'@;
put 'LDEsMCwwLDAsNC4zMSwxNy4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMS43MywyOS45M2ExMiwxMiwwLDAsMS00Ljg0LjUxLDEyLjMsMTIuMywwLDAsMS05LjU3LTYuM2wyLjQ5LjkzYTEsMSwwLDAsMCwuNjktMS44NGwtNC41'@;
put 'OS0xLjdoMEw0LjQ0LDIxLDMuMzMsMjcuMzVhMSwxLDAsMCwwLC43OSwxLjEzbC4xNywwYTEsMSwwLDAsMCwxLS44MWwuNDItMi40YTE0LjMsMTQuMywwLDAsMCwxMSw3LjE0LDEzLjkxLDEzLjkxLDAsMCwwLDUuNjMtLjYsMSwxLDAsMCwwLS42LTEuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yMiwxM0gxNGExLDEsMCwwLDAtMSwxdjhhMSwxLDAsMCwwLDEsMWg4YTEsMSwwLDAsMCwxLTFWMTRBMSwxLDAsMCwwLDIyLDEzWm0tMSw4SDE1VjE1aDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'NCIgLz4nKSxULkNsclNoYXBlQXNzaWduVXNlcj0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTdhNy40Niw3LjQ2LDAsMSwwLTcuNDUtNy40NkE3LjQ2LDcuNDYsMCwwLDAsMTgsMTdaTTE4LDQuMDdhNS40Niw1LjQ2LDAsMSwxLTUuNDUsNS40NUE1LjQ2LDUuNDYsMCwwLDEsMTgs'@;
put 'NC4wN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik02LDMxLjg5VjI1Ljc3YTE2LjEzLDE2LjEzLDAsMCwxLDEyLTUsMTYuNjEsMTYuNjEsMCwwLDEsOC43MSwyLjMzbDEuMzUtMS41MUExOC41MywxOC41MywwLDAsMCwxOCwxOC43NCwx'@;
put 'Ny43LDE3LjcsMCwwLDAsNC4yMSwyNC44YTEsMSwwLDAsMC0uMjEuNnY2LjQ5QTIuMDYsMi4wNiwwLDAsMCw2LDM0SDE4LjM5bC0xLjktMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMCwzMS44OSwzMCwzMkgyNi44NWwtMS44LDJI'@;
put 'MzBhMi4wNiwyLjA2LDAsMCwwLDItMi4wN1YyNi4ybC0yLDIuMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzQuNzYsMTguNjJhMSwxLDAsMCwwLTEuNDEuMDhsLTExLjYyLDEzLTUuMi01LjU5QTEsMSwwLDAsMCwxNS4xMiwyNmEx'@;
put 'LDEsMCwwLDAtLjA2LDEuNDJsNi42OSw3LjJMMzQuODQsMjBBMSwxLDAsMCwwLDM0Ljc2LDE4LjYyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PGNpcmNsZSBjeD0iMTcuOTkiIGN5PSIxMC4zNiIgcj0iNi44MSIgY2xhc3M9ImNsci1pLXNvbGlkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMTIsMjYuNjVhMi44LDIuOCwwLDAsMSw0Ljg1LTEuOEwyMC43MSwyOWw2Ljg0LTcuNjNBMTYuODEsMTYuODEsMCwwLDAsMTgsMTguNTUsMTYuMTMsMTYuMTMsMCwwLDAsNS41LDI0YTEsMSwwLDAsMC0uMi42MVYzMGEyLDIsMCwwLDAsMS45'@;
put 'NCwyaDguNTdsLTMuMDctMy4zQTIuODEsMi44MSwwLDAsMSwxMiwyNi42NVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTI4Ljc2LDMyYTIsMiwwLDAsMCwxLjk0LTJWMjYuMjRMMjUuNTcsMzJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt'@;
put 'c29saWQtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMy43NywxOC42MmExLDEsMCwwLDAtMS40Mi4wOGwtMTEuNjIsMTMtNS4yLTUuNTlBMSwxLDAsMCwwLDE0LjEyLDI2YTEsMSwwLDAsMCwwLDEuNDJsNi42OCw3LjJMMzMuODQsMjBBMSwxLDAsMCwwLDMzLjc3LDE4LjYyWiIgY2xhc3M9ImNsci1p'@;
put 'LXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz4nKSxULkNsclNoYXBlQXRvbT0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTQuMDVhNCw0LDAsMSwwLDQsNEE0LDQsMCwwLDAsMTgsMTQuMDVabTAsNi40NGEyLjQyLDIuNDIsMCwxLDEsMi40Mi0yLjQyQTIuNDIsMi40MiwwLDAs'@;
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 'ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxULkNsclNoYXBlQmFyQ29kZT0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBkPSJNNSw3QTEsMSwwLDAsMCw0LDhWMzBhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCw1LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNOSw3QTEsMSwwLDAsMCw4LDhWMjZhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCw5LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTMsN2ExLDEsMCwwLDAtMSwxVjI2YTEsMSwwLDAs'@;
put 'MCwyLDBWOEExLDEsMCwwLDAsMTMsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xNyw3YTEsMSwwLDAsMC0xLDFWMjZhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCwxNyw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTIxLDdhMSwxLDAsMCwwLTEsMVYyNmExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDIxLDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMjUsN2ExLDEsMCwwLDAtMSwxVjI2YTEsMSwwLDAs'@;
put 'MCwyLDBWOEExLDEsMCwwLDAsMjUsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPjxwYXRoIGQ9Ik0yOSw3YTEsMSwwLDAsMC0xLDFWMjZhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCwyOSw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTciIC8+PHBhdGggZD0iTTMzLDdhMSwxLDAsMCwwLTEsMVYzMGExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDMzLDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgLz4nKSxULkNsclNoYXBlQ2REdmQ9KDAsdi5jbHJJY29uU1ZHKSgnPHBh'@;
put 'dGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMi4zMywxOGE0LjQ2LDQuNDYs'@;
put 'MCwxLDAtNC40NSw0LjQ2QTQuNDYsNC40NiwwLDAsMCwyMi4zMywxOFpNMTcuODgsMjAuOUEyLjg2LDIuODYsMCwxLDEsMjAuNzMsMTgsMi44NiwyLjg2LDAsMCwxLDE3Ljg4LDIwLjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTcu'@;
put 'ODgsNy40M0gxOFY1Ljg0aC0uMTJBMTIuMjEsMTIuMjEsMCwwLDAsNS42OCwxNy43NWgxLjZBMTAuNjEsMTAuNjEsMCwwLDEsMTcuODgsNy40M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMC4wOCwxOEgyOC40OXYwQTEwLjYxLDEw'@;
put 'LjYxLDAsMCwxLDE4LjI1LDI4LjYzdjEuNkExMi4yMiwxMi4yMiwwLDAsMCwzMC4wOSwxOFMzMC4wOCwxOCwzMC4wOCwxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0xOCwxMVY5LjQ0aC0uMTJhOC42Miw4LjYyLDAsMCwwLTguNiw4'@;
put 'LjMyaDEuNmE3LDcsMCwwLDEsNy02LjcyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTE4LjI1LDI1djEuNkE4LjYxLDguNjEsMCwwLDAsMjYuNDgsMTh2MGgtMS42djBBNyw3LDAsMCwxLDE4LjI1LDI1WiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTE4LjE3LDEuOTJhMTYsMTYsMCwxLDAsMTYsMTZBMTYsMTYsMCwwLDAsMTguMTcsMS45MlpNMjYuMjMsMThoMS41NGE5LjYxLDkuNjEsMCwwLDEtOS42LDkuNTNIMThWMjZoLjE3QTguMDcsOC4wNywwLDAsMCwyNi4yMywx'@;
put 'OFpNNi4wNSwxOEg0LjQ1di0uMDhBMTMuNzIsMTMuNzIsMCwwLDEsMTgsNC4yMXYxLjZBMTIuMTMsMTIuMTMsMCwwLDAsNi4wNSwxNy45MlptNC4wNSwwSDguNTZ2LS4wOEE5LjYxLDkuNjEsMCwwLDEsMTgsOC4zMlY5Ljg2YTguMDcsOC4wNywwLDAsMC03LjksOC4wNlptNC4zMi0uMDhhMy43'@;
put 'NSwzLjc1LDAsMSwxLDMuNzUsMy43NUEzLjc1LDMuNzUsMCwwLDEsMTQuNDIsMTcuOTJabTMuNzUsMTMuNzFIMThWMzBoLjE3QTEyLjEzLDEyLjEzLDAsMCwwLDMwLjI4LDE4aDEuNkExMy43MywxMy43MywwLDAsMSwxOC4xNywzMS42M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp'@;
put 'ZC1wYXRoLTEiIC8+JyksVC5DbHJTaGFwZUNvbnRhaW5lcj0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsMzBINGEyLDIsMCwwLDEtMi0yVjhBMiwyLDAsMCwxLDQsNkgzMmEyLDIsMCwwLDEsMiwyVjI4QTIsMiwwLDAsMSwzMiwzMFpNNCw4VjI4SDMyVjhaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNOSwyNS4zYS44LjgsMCwwLDEtLjgtLjh2LTEzYS44LjgsMCwwLDEsMS42LDB2MTNBLjguOCwwLDAsMSw5LDI1LjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJN'@;
put 'MTQuOTIsMjUuM2EuOC44LDAsMCwxLS44LS44di0xM2EuOC44LDAsMCwxLDEuNiwwdjEzQS44LjgsMCwwLDEsMTQuOTIsMjUuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yMSwyNS4zYS44LjgsMCwwLDEtLjgtLjh2LTEzYS44Ljgs'@;
put 'MCwwLDEsMS42LDB2MTNBLjguOCwwLDAsMSwyMSwyNS4zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTI3LDI1LjNhLjguOCwwLDAsMS0uOC0uOHYtMTNhLjguOCwwLDAsMSwxLjYsMHYxM0EuOC44LDAsMCwxLDI3LDI1LjNaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTkuNjMsMjQuMjNhLjc5Ljc5LDAsMCwxLS44MS43N0EuNzkuNzksMCww'@;
put 'LDEsOCwyNC4yM1YxMS43N0EuNzkuNzksMCwwLDEsOC44MiwxMWEuNzkuNzksMCwwLDEsLjgxLjc3Wm02LDBhLjc5Ljc5LDAsMCwxLS44Mi43Ny43OS43OSwwLDAsMS0uODEtLjc3VjExLjc3YS43OS43OSwwLDAsMSwuODEtLjc3Ljc5Ljc5LDAsMCwxLC44Mi43N1ptNi4yMSwwYS43OS43OSww'@;
put 'LDAsMS0uODIuNzcuNzkuNzksMCwwLDEtLjgxLS43N1YxMS43N2EuNzkuNzksMCwwLDEsLjgxLS43Ny43OS43OSwwLDAsMSwuODIuNzdabTYuMTIsMGEuNzkuNzksMCwwLDEtLjgyLjc3Ljc5Ljc5LDAsMCwxLS44MS0uNzdWMTEuNzdhLjc5Ljc5LDAsMCwxLC44MS0uNzcuNzkuNzksMCwwLDEs'@;
put 'LjgyLjc3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxULkNsclNoYXBlQ29udGFpbmVyVm9sdW1lPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik04LDE3LjU4YTMyLjM1LDMyLjM1LDAsMCwwLDYuMy45Miw0LjEzLDQuMTMsMCwwLDEsLjkyLTEuMzcs'@;
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+JyksVC5DbHJTaGFwZUZpbGVTaGFyZT0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFB'@;
put 'MiwyLDAsMCwwLDMwLDlabTAsMjBINlYxM2g3LjMxYTIsMiwwLDAsMCwyLTJINlY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjEuOTEsMjIuNDhhMi4wNiwyLjA2LDAs'@;
put 'MCwwLTEuNDQuNjJsLTUuNzItMi42NlYyMGw1LjY2LTIuNjVhMi4wOCwyLjA4LDAsMSwwLC4wNi0yLjk0LDIuMTIsMi4xMiwwLDAsMC0uNjQsMS40OHYuMjNsLTUuNjQsMi42NmEyLjA4LDIuMDgsMCwxLDAtLjA4LDIuOTVsLjA4LS4wOCw1LjY3LDIuNjZ2LjNhMi4wOSwyLjA5LDAsMSwwLDIu'@;
put 'MDgtMi4xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjExQTIsMiwwLDAs'@;
put 'MCwzMCw5Wk02LDdoNi40OWwyLjcyLDRINlpNMjEuOTQsMjYuNjRhMi4wOSwyLjA5LDAsMCwxLTIuMTEtMi4wNmwwLS4zLTUuNjctMi42Ni0uMDguMDhhMi4wOCwyLjA4LDAsMSwxLC4wOC0yLjk1bDUuNjQtMi42NnYtLjIzYTIuMDgsMi4wOCwwLDEsMSwuNTgsMS40NkwxNC43NSwyMHYuNDds'@;
put 'NS43MiwyLjY2YTIuMDcsMi4wNywwLDEsMSwxLjQ3LDMuNTRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLFQuQ2xyU2hhcGVRckNvZGU9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTUuNiw0QTEuNiwxLjYsMCwwLDAsNCw1LjZWMTJoOFY0Wk0xMCwx'@;
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+JyksVC5DbHJTaGFwZVVzYj0oMCx2LmNsckljb25T'@;
put 'VkcpKCc8cGF0aCBkPSJNMTQuMjksMTEuNGExLjQ5LDEuNDksMCwwLDEsMS4yOC0uNzJoMWEyLjg5LDIuODksMCwwLDAsMi43NSwyLjA5LDMsMywwLDAsMCwwLTUuOTEsMi45LDIuOSwwLDAsMC0yLjY3LDEuODJIMTUuNTdhMy40OSwzLjQ5LDAsMCwwLTMsMS42NmwtMyw0LjgzaDIuMzZabTUt'@;
put 'Mi45NEExLjM2LDEuMzYsMCwxLDEsMTgsOS44MSwxLjMyLDEuMzIsMCwwLDEsMTkuMzMsOC40NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zNC4zLDE3LjM3bC02LjExLTMuNjZhLjcuNywwLDAsMC0uNywwLC43MS43MSwwLDAsMC0u'@;
put 'MzYuNjFWMTdINi45MmEyLjMzLDIuMzMsMCwwLDEsLjMyLDEuMTcsMi40NywyLjQ3LDAsMSwxLTIuNDctMi40NiwyLjM3LDIuMzcsMCwwLDEsMS4xNS4zbC45My0xLjc2QTQuNDQsNC40NCwwLDEsMCw5LjE1LDE5aDMuNThsNC4xNyw2LjY1YTMuNDksMy40OSwwLDAsMCwzLDEuNjZoMS42NnYx'@;
put 'LjI4YS43OS43OSwwLDAsMCwuOC43OWg0LjQ5YS43OS43OSwwLDAsMCwuOC0uNzl2LTQuNGEuNzkuNzksMCwwLDAtLjgtLjhIMjIuMzRhLjguOCwwLDAsMC0uOC44djEuMTJIMTkuODhhMS41MSwxLjUxLDAsMCwxLTEuMjgtLjcyTDE1LjA5LDE5aDEydjIuNjZhLjY5LjY5LDAsMCwwLC4zNi42'@;
put 'MS42Ny42NywwLDAsMCwuMzQuMDkuNjUuNjUsMCwwLDAsLjM2LS4xbDYuMTEtMy42NmEuNjkuNjksMCwwLDAsLjM0LS42QS43MS43MSwwLDAsMCwzNC4zLDE3LjM3Wk0yMy4xNCwyNUgyNnYyLjhIMjMuMTRabTUuMzktNC41NlYxNS41NWw0LDIuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzQuNzIsMTcuMzdsLTUuNTEtMy4zMWEuNzEuNzEsMCwwLDAtMS4wNy42VjE3SDExLjc3bDMuNTItNS42YTEuNDksMS40OSwwLDAsMSwxLjI4LS43MmgxLjY0YTIuNDEsMi40MSwwLDAsMCwyLjI1LDEuNjEsMi40OCwyLjQ4LDAsMCww'@;
put 'LDAtNC45NSwyLjM4LDIuMzgsMCwwLDAtMi4xMywxLjM0SDE2LjU3YTMuNDksMy40OSwwLDAsMC0zLDEuNjZMOS40MSwxN0g4YTMuNDYsMy40NiwwLDEsMCwuMDgsMmg1LjY0bDQuMTUsNi42MmEzLjQ5LDMuNDksMCwwLDAsMywxLjY2aDIuNTl2LjkyaDQuNFYyMy44aC00LjR2MS40OEgyMC44'@;
put 'OGExLjUxLDEuNTEsMCwwLDEtMS4yOC0uNzJMMTYuMTEsMTloMTJ2Mi4yOGEuNy43LDAsMCwwLC4zNi42MS43Mi43MiwwLDAsMCwuMzQuMDkuNjUuNjUsMCwwLDAsLjM2LS4xbDUuNTItMy4zMWEuNy43LDAsMCwwLDAtMS4yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'MSIgLz4nKSxULkNsclNoYXBlUmFkYXI9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDE4YzAsNy43LTYuMywxNC0xNCwxNGMtNy43LDAtMTQtNi4zLTE0LTE0QzQsMTAuNiw5LjcsNC41LDE3LjEsNHYzLjdjLTUuNywwLjUtOS45LDUuNS05LjQsMTEuMnM1LjUsOS45LDExLjIsOS40'@;
put 'XG5cdGM1LjMtMC41LDkuNC00LjksOS40LTEwLjNoLTJjMCw0LjYtMy43LDguMy04LjMsOC4zcy04LjMtMy43LTguMy04LjNjMC00LjIsMy4xLTcuOCw3LjMtOC4zdjQuNGMtMS44LDAuNC0zLjEsMi0zLjEsMy45XG5cdGMwLDIuMiwxLjgsNCw0LDRzNC0xLjgsNC00YzAtMS44LTEuMy0zLjQt'@;
put 'My0zLjhWMi4xQzE4LjYsMiwxOC4zLDIsMTgsMkM5LjIsMiwyLDkuMiwyLDE4czcuMiwxNiwxNiwxNnMxNi03LjIsMTYtMTZIMzJ6IE0yMCwxOFxuXHRjMCwxLjEtMC45LDItMiwycy0yLTAuOS0yLTJzMC45LTIsMi0yUzIwLDE2LjksMjAsMTh6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzIsMThjMCw3LjctNi4yLDE0LTE0LDE0UzQsMjUuOCw0LDE4YzAtNy40LDUuNy0xMy41LDEzLjEtMTR2My43Yy01LjcsMC41LTkuOCw1LjUtOS4zLDExLjJzNS41LDkuOCwxMS4yLDkuM1xuXHRcdGM1LjMtMC41LDkuMy00LjksOS4zLTEw'@;
put 'LjJoLTJjMCw0LjYtMy43LDguMy04LjMsOC4zUzkuNywyMi42LDkuNywxOGMwLTQuMiwzLjItNy44LDcuMy04LjJ2NC40Yy0yLjEsMC42LTMuNCwyLjctMi45LDQuOVxuXHRcdGMwLjYsMi4xLDIuNywzLjQsNC45LDIuOWMyLjEtMC42LDMuNC0yLjcsMi45LTQuOWMtMC40LTEuNC0xLjUtMi41'@;
put 'LTIuOS0yLjlWMmMtMC40LDAtMC43LDAtMS4xLDBjLTguOCwwLTE2LDcuMi0xNiwxNlxuXHRcdGMwLDguOCw3LjIsMTYsMTYsMTZzMTYtNy4yLDE2LTE2YzAsMCwwLDAsMCwwSDMyeiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxULkNsclNoYXBlSW5kdWN0'@;
put 'b3I9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LjMxLDI1LjgxYy0xLjc1LDAtMy0yLjQ5LTMtNmExMi43OSwxMi43OSwwLDAsMSwxLjcyLTYuNywyLjU3LDIuNTcsMCwwLDAtMy43OSwwQTEyLjc5LDEyLjc5LDAsMCwxLDIxLDE5Ljc2YzAsMy41Ni0xLjIzLDYtMyw2cy0zLTIuNDkt'@;
put 'My02YTEyLjc5LDEyLjc5LDAsMCwxLDEuNzItNi43LDIuNTcsMi41NywwLDAsMC0zLjc5LDAsMTIuNzksMTIuNzksMCwwLDEsMS43Miw2LjdjMCwzLjU2LTEuMjMsNi0zLDZzLTMtMi40OS0zLTZhMTIuODgsMTIuODgsMCwwLDEsMS43MS02LjcsMi43LDIuNywwLDAsMC0xLjg5LS44N0M3LjEs'@;
put 'MTIuMTksNS42OSwxMy43LDUsMTZsLS4yMy43SDJhMSwxLDAsMCwxLDAtMkgzLjI5YzEuMS0yLjgzLDMuMDYtNC41NSw1LjI0LTQuNTVhNC42Nyw0LjY3LDAsMCwxLDMuMTYsMS4zMiw0LjYyLDQuNjIsMCwwLDEsMy4xNS0xLjMyQTQuNjUsNC42NSwwLDAsMSwxOCwxMS41MWE0LjQzLDQuNDMs'@;
put 'MCwwLDEsNi4zMSwwLDQuNjcsNC42NywwLDAsMSwzLjE2LTEuMzJjMi4xOCwwLDQuMTQsMS43Miw1LjI0LDQuNTVIMzRhMSwxLDAsMCwxLDAsMkgzMS4yOGwtLjIzLS43Yy0uNzQtMi4zNC0yLjE1LTMuODUtMy41OC0zLjg1YTIuNywyLjcsMCwwLDAtMS44OS44NywxMi44OCwxMi44OCwwLDAs'@;
put 'MSwxLjcxLDYuN0MyNy4yOSwyMy4zMiwyNi4wNywyNS44MSwyNC4zMSwyNS44MVpNMTgsMTQuOTNhMTEuNzEsMTEuNzEsMCwwLDAtMSw0LjgzYzAsMi41NC42NiwzLjc1LDEsNCwuMzItLjI3LDEtMS40OCwxLTRBMTEuNzEsMTEuNzEsMCwwLDAsMTgsMTQuOTNabTYuMzEsMGExMS43MSwxMS43'@;
put 'MSwwLDAsMC0xLDQuODNjMCwyLjU0LjY2LDMuNzUsMSw0LC4zMi0uMjcsMS0xLjQ4LDEtNEExMS43MSwxMS43MSwwLDAsMCwyNC4zMSwxNC45M1ptLTEyLjYyLDBhMTEuNzEsMTEuNzEsMCwwLDAtMSw0LjgzYzAsMi41NC42NiwzLjc1LDEsNCwuMzItLjI3LDEtMS40OCwxLTRBMTEuNzEsMTEu'@;
put 'NzEsMCwwLDAsMTEuNjksMTQuOTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxULkNsclNoYXBlUmVzaXN0b3I9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LjQzLDI2LjM0aDBBMS40NywxLjQ3LDAsMCwxLDI4LDI1LjIyTDI0Ljg2LDEz'@;
put 'LjE1LDIxLjc0LDI1LjIyYTEuNDksMS40OSwwLDAsMS0xLjQ1LDEuMTJoMGExLjQ5LDEuNDksMCwwLDEtMS40Ni0xLjEyTDE1LjcxLDEzLjE1LDEyLjYsMjUuMjJhMS41MSwxLjUxLDAsMCwxLTIuOTEsMEw2LjU3LDEzLjE1LDUuMjIsMTguMzdIMmExLDEsMCwwLDEsMC0ySDMuNjdsMS40NS01'@;
put 'LjU5QTEuNDgsMS40OCwwLDAsMSw2LjU3LDkuNjZoMEExLjQ3LDEuNDcsMCwwLDEsOCwxMC43OGwzLjEyLDEyLjA3LDMuMTItMTIuMDdhMS40OSwxLjQ5LDAsMCwxLDEuNDUtMS4xMmgwYTEuNDksMS40OSwwLDAsMSwxLjQ2LDEuMTJsMy4xMiwxMi4wNywzLjEyLTEyLjA3YTEuNSwxLjUsMCww'@;
put 'LDEsMi45LDBsMy4xMiwxMi4wNywxLjM1LTUuMjJIMzRhMSwxLDAsMCwxLDAsMkgzMi4zM2wtMS40NSw1LjU5QTEuNDgsMS40OCwwLDAsMSwyOS40MywyNi4zNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLFQuQ2xyU2hhcGVDYXBhY2l0b3I9KDAs'@;
put 'di5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE1LDM0LjA2YTEsMSwwLDAsMS0xLTFWMy4xNWExLDEsMCwxLDEsMiwwVjMzLjA2QTEsMSwwLDAsMSwxNSwzNC4wNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMSwzNC4wNmExLDEsMCww'@;
put 'LDEtMS0xVjMuMTVhMSwxLDAsMSwxLDIsMFYzMy4wNkExLDEsMCwwLDEsMjEsMzQuMDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTQuNDYsMTlIM2ExLDEsMCwwLDEsMC0ySDE0LjQ2YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzMsMTlIMjEuNTRhMSwxLDAsMCwxLDAtMkgzM2ExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+JyksVC5DbHJTaGFwZVNxdWlkPSgwLHYuY2xySWNv'@;
put 'blNWRykoJzxwYXRoIGQ9Ik0xOCw3YTEsMSwwLDAsMS0xLTFWMy4xOWExLDEsMCwwLDEsMiwwVjZBMSwxLDAsMCwxLDE4LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgsMzRhMSwxLDAsMCwxLTEtMVYzMGExLDEsMCwwLDEsMiww'@;
put 'djNBMSwxLDAsMCwxLDE4LDM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTcuNDEsMThsMS43OC0xLjc3YTEsMSwwLDEsMC0xLjQyLTEuNDJMNiwxNi41OSw0LjIzLDE0LjgxYTEsMSwwLDEsMC0xLjQyLDEuNDJMNC41OSwxOCwyLjgx'@;
put 'LDE5Ljc3YTEsMSwwLDAsMCwwLDEuNDIsMSwxLDAsMCwwLC43MS4yOSwxLDEsMCwwLDAsLjcxLS4yOUw2LDE5LjQxbDEuNzcsMS43OGExLDEsMCwwLDAsMS40MiwwLDEsMSwwLDAsMCwwLTEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBk'@;
put 'PSJNNiwxMy43NmwuMzYtLjM2YTMsMywwLDAsMSwyLjExLS44OCwxMSwxMSwwLDAsMSwxOSwwLDMsMywwLDAsMSwyLjEyLjg4bC4zNi4zNi4yLS4yYTEzLDEzLDAsMCwwLTI0LjQsMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zMCwy'@;
put 'Mi4yNGwtLjM2LjM2YTMsMywwLDAsMS0yLjEyLjg4LDExLDExLDAsMCwxLTE5LDAsMywzLDAsMCwxLTIuMTItLjg4TDYsMjIuMjRsLS4yLjJhMTMsMTMsMCwwLDAsMjQuNCwwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMxLjQxLDE4'@;
put 'bDEuNzgtMS43N2ExLDEsMCwwLDAtMS40Mi0xLjQyTDMwLDE2LjU5bC0xLjc3LTEuNzhhMSwxLDAsMSwwLTEuNDIsMS40MkwyOC41OSwxOGwtMS43OCwxLjc3YTEsMSwwLDAsMCwwLDEuNDIsMSwxLDAsMCwwLC43MS4yOSwxLDEsMCwwLDAsLjcxLS4yOUwzMCwxOS40MWwxLjc3LDEuNzhhMSwx'@;
put 'LDAsMCwwLDEuNDIsMCwxLDEsMCwwLDAsMC0xLjQyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+JyksVC5DbHJTaGFwZUhvc3RHcm91cD0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjEuMDgsMzRoLTE0QTEuMDgsMS4wOCwwLDAsMSw2LDMzVjEy'@;
put 'YTEuMDgsMS4wOCwwLDAsMSwxLjA4LTEuMDhoMTRBMS4wOCwxLjA4LDAsMCwxLDIyLjE2LDEyVjMzQTEuMDgsMS4wOCwwLDAsMSwyMS4wOCwzNFpNOC4xNiwzMS44OEgyMFYxM0g4LjE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG48cmVjdCB4PSIx'@;
put 'MC4wOCIgeT0iMTQuOTYiIHdpZHRoPSI4IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yNi4xLDI3LjgxaC0yVjloLTEyVjdoMTNhMSwxLDAsMCwxLDEsMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0zIiAvPlxuPHBhdGggZD0iTTMwLjA4LDIzaC0yVjVoLTExVjNoMTJhMSwxLDAsMCwxLDEsMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxyZWN0IHg9IjEzLjA4IiB5PSIyNy44OCIgd2lkdGg9IjIiIGhlaWdodD0iMi4xNiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG5cbjxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xNS4wOCwzMSBMMS4wOCwzMSBDMC41MTM0MjcxOTcsMzEuMDAxNTU2NCAwLjA0MTk2NjM3NjUsMzAuNTY1MDE4NiAwLDMwIEww'@;
put 'LDkgQzAsOC40MDM1MzI0NyAwLjQ4MzUzMjQ3LDcuOTIgMS4wOCw3LjkyIEwxNS4wOCw3LjkyIEMxNS42NzY0Njc1LDcuOTIgMTYuMTYsOC40MDM1MzI0NyAxNi4xNiw5IEwxNi4xNiwzMCBDMTYuMTE4MDMzNiwzMC41NjUwMTg2IDE1LjY0NjU3MjgsMzEuMDAxNTU2NCAxNS4wOCwzMSBaIE00'@;
put 'LjA4LDExLjk2IEw0LjA4LDEzLjk2IEwxMi4wOCwxMy45NiBMMTIuMDgsMTEuOTYgTDQuMDgsMTEuOTYgWiBNNy4wOCwyNC44OCBMNy4wOCwyNy4wNCBMOS4wOCwyNy4wNCBMOS4wOCwyNC44OCBMNy4wOCwyNC44OCBaIiAvPlxuPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMiIgZD0iTTIwLjEsMjQuODEgTDE4LjEsMjQuODEgTDE4LjEsNiBMNi4xLDYgTDYuMSw0IEwxOS4xLDQgQzE5LjY1MjI4NDcsNCAyMC4xLDQuNDQ3NzE1MjUgMjAuMSw1IEwyMC4xLDI0LjgxIFoiIC8+XG48cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0z'@;
put 'IiBkPSJNMjQuMDgsMjAgTDIyLjA4LDIwIEwyMi4wOCwyIEwxMS4wOCwyIEwxMS4wOCwwIEwyMy4wOCwwIEMyMy42MzIyODQ3LDAgMjQuMDgsMC40NDc3MTUyNSAyNC4wOCwxIEwyNC4wOCwyMCBaIiAvPicpLFQuQ2xyU2hhcGVTdG9yYWdlQWRhcHRlcj0oMCx2LmNsckljb25TVkcpKCc8cGF0'@;
put 'aCBkPSJNNi4wNiwzMGExLDEsMCwwLDEtMS0xVjhoLTJhMSwxLDAsMCwxLDAtMmg0VjI5QTEsMSwwLDAsMSw2LjA2LDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTMwLjA2LDI3aC0yNVY5aDI1YTMsMywwLDAsMSwzLDNWMjRB'@;
put 'MywzLDAsMCwxLDMwLjA2LDI3Wm0tMjMtMmgyM2ExLDEsMCwwLDAsMS0xVjEyYTEsMSwwLDAsMC0xLTFoLTIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHJlY3QgeD0iMjIuMDYiIHk9IjIwIiB3aWR0aD0iNiIgaGVpZ2h0PSIyIiBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cmVjdCB4PSIyMi4wNiIgeT0iMTQiIHdpZHRoPSI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0xOS4wNiwyMmgtOFYyMGg3VjE0aDJ2'@;
put 'N0ExLDEsMCwwLDEsMTkuMDYsMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPicpLFQuQ2xyU2hhcGVOb2RlR3JvdXA9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjUzLDIxLjU4bC00Ljk0LTIuODNWMTMuMDlhMSwxLDAsMCwwLS41MS0uODdM'@;
put 'MjIuNjQsOS4xYTEsMSwwLDAsMC0xLDBMMTYuMiwxMi4yMmExLDEsMCwwLDAtLjUxLjg3djUuNjZsLTQuOTQsMi44M2ExLDEsMCwwLDAtLjUuODd2Ni4yNGExLDEsMCwwLDAsLjUuODZsNS40NSwzLjEyYTEsMSwwLDAsMCwxLDBsNC45NS0yLjgzLDQuOTUsMi44M2ExLDEsMCwwLDAsLjUuMTQs'@;
put 'MSwxLDAsMCwwLC40OS0uMTRsNS40NS0zLjEyYTEsMSwwLDAsMCwuNS0uODZWMjIuNDVBMSwxLDAsMCwwLDMzLjUzLDIxLjU4Wk0yMi4xNCwxMS4xMmw0LjQ1LDIuNTVWMTlsLTQuNDYsMi41Ni00LjQ0LTIuNlYxMy42N1pNMTYuNjksMzAuNjVsLTQuNDQtMi41NFYyM2w0LjY4LTIuNjgsNC40'@;
put 'LDIuNTdWMjhaTTMyLDI4LjExbC00LjQ0LDIuNTRMMjIuOTMsMjhWMjIuOTNsNC40Ni0yLjU3TDMyLDIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTcsMjcuNDNhMSwxLDAsMCwxLTEtMVYxOS45QTEsMSwwLDAsMSw2LjUsMTls'@;
put 'NC45NS0yLjgzVjEwLjU0YTEsMSwwLDAsMSwuNS0uODdsNS4yMS0zYTEsMSwwLDAsMSwxLjM3LjM3LDEsMSwwLDAsMS0uMzgsMS4zN2wtNC43LDIuNjh2NS42NmExLDEsMCwwLDEtLjUxLjg3TDgsMjAuNDh2NS45NUExLDEsMCwwLDEsNywyNy40M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0zLDI1LjA1YTEsMSwwLDAsMS0xLTFWMTcuNTNhMSwxLDAsMCwxLC41LS44Nmw1LTIuODRWOC4xN0ExLDEsMCwwLDEsOCw3LjMxbDUuMjUtM2ExLDEsMCwwLDEsMSwxLjc0TDkuNDUsOC43NXY1LjY2YTEsMSwwLDAsMS0uNTEuODdM'@;
put 'NCwxOC4xMXY1Ljk0QTEsMSwwLDAsMSwzLDI1LjA1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz4nKSxULkNsclNoYXBlTm9kZXM9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEwLjUsMzQuMjksMiwyOS4zOVYxOS41OGw4LjUtNC45LDguNSw0Ljl2'@;
put 'OS44MVpNNCwyOC4yMywxMC41LDMyLDE3LDI4LjIzVjIwLjc0TDEwLjUsMTcsNCwyMC43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0yNS41LDM0LjI5LDE3LDI5LjM5VjE5LjU4bDguNS00LjksOC41LDQuOXY5LjgxWk0xOSwy'@;
put 'OC4yMywyNS41LDMyLDMyLDI4LjIzVjIwLjc0TDI1LjUsMTcsMTksMjAuNzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMTgsMjEuMzJsLTguNS00LjlWNi42MUwxOCwxLjcxbDguNSw0Ljl2OS44MVptLTYuNS02LjA2TDE4LDE5'@;
put 'bDYuNS0zLjc1VjcuNzdMMTgsNCwxMS41LDcuNzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPicpLFQuQ2xyU2hhcGVOYW1lc3BhY2U9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI3LDQuMThhMSwxLDAsMSwwLTEsMS43M2w2LDMuNDdWMjYuNjJs'@;
put 'LTYsMy40N2ExLDEsMCwwLDAtLjM3LDEuMzYsMSwxLDAsMCwwLDEuMzcuMzdsNy00LjA1VjguMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNOS42OCwyOS45LDQsMjYuNjJWOS4zOEw5LjY4LDYuMWExLDEsMCwxLDAtMS0xLjcz'@;
put 'TDIsOC4yM1YyNy43N2w2LjY4LDMuODZhMSwxLDAsMCwwLDEuMzctLjM3QTEsMSwwLDAsMCw5LjY4LDI5LjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMTAsMTJWMjRhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0yVjEy'@;
put 'YTIsMiwwLDAsMC0yLTJIMTJBMiwyLDAsMCwwLDEwLDEyWm03LDB2NUgxMlYxMlptLTUsN2g1djVIMTJabTcsNVYxOWg1djVabTUtN0gxOVYxMmg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz4nKSxULkNsclNoYXBlTm9kZT0oMCx2LmNsckljb25TVkcp'@;
put 'KCc8cGF0aCBkPSJNMTgsMzAuNjYsNywyNC4zM1YxMS42N0wxOCw1LjM0bDExLDYuMzNWMjQuMzNaTTksMjMuMThsOSw1LjE3LDktNS4xN1YxMi44MkwxOCw3LjY1LDksMTIuODJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPicpLFQuQ2xyU2hhcGVQb2Q9'@;
put 'KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LDMySDEwYTYsNiwwLDAsMS02LTZWMTBhNiw2LDAsMCwxLDYtNkgyNmE2LDYsMCwwLDEsNiw2VjI2QTYsNiwwLDAsMSwyNiwzMlpNMTAsNmE0LDQsMCwwLDAtNCw0VjI2YTQsNCwwLDAsMCw0LDRIMjZhNCw0LDAsMCwwLDQtNFYxMGE0LDQs'@;
put 'MCwwLDAtNC00WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTI2LjU2LDE1SDE1LjQ0QTEuNDMsMS40MywwLDAsMCwxNCwxNi40NHY4LjEyQTEuNDMsMS40MywwLDAsMCwxNS40NCwyNkgyNi41NkExLjQzLDEuNDMsMCwwLDAsMjgs'@;
put 'MjQuNTZWMTYuNDRBMS40MywxLjQzLDAsMCwwLDI2LjU2LDE1Wk0yNiwyNEgxNlYxN0gyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0xMi40LDE5SDEwVjEySDIwdjEuNGgydi0yQTEuNDMsMS40MywwLDAsMCwyMC41NiwxMEg5'@;
put 'LjQ0QTEuNDMsMS40MywwLDAsMCw4LDExLjQ0djguMTJBMS40MywxLjQzLDAsMCwwLDkuNDQsMjFoM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+JyksVC5DbHJDb250cm9sTHVuPSgwLHYuY2xySWNvblNWRykoJ1xuICA8cGF0aCBkPSJNOCwyNC41OWEy'@;
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 'bGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAnKSxULkNsclNoYXBlTWVkaWFDaGFuZ2VyPSgwLHYuY2xySWNvblNWRykoJ1xuICA8cGF0aCBkPSJNMzAsNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkg3Ljg4djEuNTdhMSwxLDAs'@;
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+XG4gICcpLFQuQ2xyU2hhcGVUYXBlRHJpdmU9KDAsdi5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiww'@;
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 'MCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAnKSxULkNsclNoYXBlQW5pbWF0aW9uPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMC4xNiwzMS43MWE0LjQsNC40LDAsMCwx'@;
put 'LTQuNjQtMUE0LjM0LDQuMzQsMCwwLDEsNC4yMywyNy42YTQuNDEsNC40MSwwLDAsMSwuMTgtMS4yLDExLjYxLDExLjYxLDAsMCwxLTEtMi41Niw2LjQsNi40LDAsMCwwLDkuMzMsOC42M0ExMS41NSwxMS41NSwwLDAsMSwxMC4xNiwzMS43MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0xOC40MSwyNy42OGE3LjYxLDcuNjEsMCwwLDEtOS4wOC0xLjI2LDcuNTgsNy41OCwwLDAsMS0xLjI3LTkuMDYsMTQuMjYsMTQuMjYsMCwwLDEtLjM3LTIuODUsOS41OCw5LjU4LDAsMCwwLC4yMiwxMy4zMyw5LjYzLDkuNjMsMCwwLDAs'@;
put 'MTMuMzUuMjJBMTQuNDYsMTQuNDYsMCwwLDEsMTguNDEsMjcuNjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjEuNjYsMjYuMjFhMTIuMSwxMi4xLDAsMSwxLDguNTctMy41NGgwQTEyLjExLDEyLjExLDAsMCwxLDIxLjY2LDI2'@;
put 'LjIxWk0yMS42Niw0QTEwLjExLDEwLjExLDAsMCwwLDExLjU0LDE0LjExYTEwLDEwLDAsMCwwLDMsNy4xNCwxMC4xMiwxMC4xMiwwLDAsMCwxNC4zMSwwQTEwLjExLDEwLjExLDAsMCwwLDIxLjY2LDRabTcuODYsMThoMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0zIi8+XG4gIFxuICA8cGF0aCBkPSJNMy41LDIzLjc3YTYuNDEsNi40MSwwLDAsMCw5LjMzLDguNjdBMTEuNjUsMTEuNjUsMCwwLDEsMy41LDIzLjc3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNNy42OCwxNC41M2E5LjYsOS42LDAs'@;
put 'MCwwLDEzLjQsMTMuN0ExNC4xMSwxNC4xMSwwLDAsMSw3LjY4LDE0LjUzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjEuNzgsMkExMi4xMiwxMi4xMiwwLDEsMSw5LjY2LDE0LjE1LDEyLjEyLDEyLjEyLDAsMCwxLDIxLjc4LDIiIGNs'@;
put 'YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgJyksVC5DbHJTaGFwZUNpQ2Q9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIzLjUzLDE5LjgxYTcuNDUsNy40NSwwLDAsMS0xLjY1LS4xOCwxMC40OCwxMC40OCwwLDAsMSwuNzIsMi4xM2MuMywwLC42MSwwLC45'@;
put 'MywwYTkuNTIsOS41MiwwLDAsMCwzLS40OWwtLjkzLTEuODFBNy42Nyw3LjY3LDAsMCwxLDIzLjUzLDE5LjgxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE4LjM2LDE3Ljg3LDE4LDE3LjQ5YTcuNCw3LjQsMCwwLDEtMi4yLTUu'@;
put 'OTIsNy4zMSw3LjMxLDAsMCwxLDEuNTQtNEwxNy4yNiw5QTEsMSwwLDAsMCwxOC4xNywxMGguMDlhMSwxLDAsMCwwLDEtLjkxTDE5LjYsNWExLDEsMCwwLDAtLjI5LS43OUExLDEsMCwwLDAsMTguNTIsNGwtNC4wOS4zNWExLDEsMCwwLDAsLjE3LDJsMS4yOS0uMTFhOS40NSw5LjQ1LDAsMCww'@;
put 'LTIuMDUsNS4zMiw5LjI4LDkuMjgsMCwwLDAsMi42Nyw3LjI2bC4zMS4zN2E3LjMzLDcuMzMsMCwwLDEsMi4wNiw0LjkxLDcuMzksNy4zOSwwLDAsMS0uMjYsMi40N2wxLjguOTFhOC43Niw4Ljc2LDAsMCwwLC40NS0zLjUxQTkuMjgsOS4yOCwwLDAsMCwxOC4zNiwxNy44N1oiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0zMi40LDE3LjkxLDMxLjE5LDE4QTkuNjUsOS42NSwwLDAsMCwyMy41MywyLjQ1YTkuMzMsOS4zMywwLDAsMC0zLC40OWwuOTEsMS44YTcuNjcsNy42NywwLDAsMSw5Ljc2LDcuMzksNy41OCw3LjU4LDAs'@;
put 'MCwxLTEuNjUsNC43MmwuMS0xLjU0YTEsMSwwLDEsMC0yLS4xM2wtLjI4LDQuMDhhMSwxLDAsMCwwLC4zMS43OC45NC45NCwwLDAsMCwuNjkuMjhoLjFsNC4wOC0uNDJhMSwxLDAsMCwwLC45LTEuMUExLDEsMCwwLDAsMzIuNCwxNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik00LjA3LDIwLjQ0aC4wOGw0LjA5LS4zNWExLDEsMCwxLDAtLjE3LTJsLTEuMzkuMTJhNy42Myw3LjYzLDAsMCwxLDQuNTItMS40OSw3LjksNy45LDAsMCwxLDEuNjMuMTgsMTAuMjMsMTAuMjMsMCwwLDEtLjcxLTIuMTNjLS4zLDAtLjYxLDAt'@;
put 'LjkyLDBhOS42Niw5LjY2LDAsMCwwLTUuOSwybC4xMi0xLjMxYTEsMSwwLDAsMC0uOTItMS4wOCwxLDEsMCwwLDAtMS4wOC45MWwtLjM1LDQuMDhhMSwxLDAsMCwwLDEsMS4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0xOC40'@;
put 'MiwyOC4yM2wtNC4wOS4yN2ExLDEsMCwwLDAsLjEzLDJMMTYsMzAuMzlhNy43MSw3LjcxLDAsMCwxLTEyLjU0LTYsNy42LDcuNiwwLDAsMSwuMjktMkwyLDIxLjQ2YTkuNTksOS41OSwwLDAsMC0uNDcsMi45NUE5LjcsOS43LDAsMCwwLDE3LjE5LDMybC0uMTIsMS4xOGExLDEsMCwwLDAsLjg5'@;
put 'LDEuMWguMTFhMSwxLDAsMCwwLDEtLjlsLjQyLTQuMDZhMSwxLDAsMCwwLTEuMDYtMS4xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz4nKSxULkNsclNoYXBlRmlsZVNoYXJlMj0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUsNEg3LjgzQTEuODks'@;
put 'MS44OSwwLDAsMCw2LDUuOTFWMzAuMDlBMS44OSwxLjg5LDAsMCwwLDcuODMsMzJIMjguMTdBMS44NywxLjg3LDAsMCwwLDMwLDMwLjA5VjlaTTI0LDUuNzgsMjguMiwxMEgyNFpNOCwzMFY2SDIydjZoNlYzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+'@;
put 'XG4gIDxwYXRoIGQ9Ik0yMiwyMS44MWEyLjExLDIuMTEsMCwwLDAtMS40NC42MmwtNS43Mi0yLjY2di0uNDRsNS42Ni0yLjY1YTIuMDgsMi4wOCwwLDEsMCwuMDYtMi45NGgwYTIuMTQsMi4xNCwwLDAsMC0uNjQsMS40OHYuMjNsLTUuNjQsMi42NmEyLjA4LDIuMDgsMCwxLDAtLjA4LDIuOTVs'@;
put 'LjA4LS4wOCw1LjY3LDIuNjZ2LjNBMi4wOSwyLjA5LDAsMSwwLDIyLDIxLjg0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgXG4gIDxwYXRoIGQ9Ik0yNSw0LjA2SDcuODNBMS44OSwxLjg5LDAsMCwwLDYsNlYzMC4xNWExLjg5LDEuODksMCwwLDAs'@;
put 'MS44MywxLjkxSDI4LjE3QTEuODcsMS44NywwLDAsMCwzMCwzMC4xNVY5Wk0yMiwyNmEyLjA5LDIuMDksMCwwLDEtMi4xLTIuMDh2LS4zTDE0LjI3LDIxbC0uMDguMDhhMi4wOCwyLjA4LDAsMSwxLC4wOC0yLjk1bDUuNjQtMi42NnYtLjIzYTIuMTQsMi4xNCwwLDAsMSwuNjQtMS40OGgwYTIu'@;
put 'MDgsMi4wOCwwLDEsMS0uMDYsMi45NGwtNS42NiwyLjY1di40NGw1LjcyLDIuNjZBMi4xMSwyLjExLDAsMCwxLDIyLDIxLjgxbDAsMEEyLjA5LDIuMDksMCwwLDEsMjIsMjZabTItMTZWNS44NGw0LjIsNC4yMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxU'@;
put 'LlRlY2hub2xvZ3lTaGFwZXM9eyJydWxlci1wZW5jaWwiOlQuQ2xyU2hhcGVSdWxlclBlbmNpbCwicGhvbmUtaGFuZHNldCI6VC5DbHJTaGFwZVBob25lSGFuZHNldCwibm8td2lmaSI6VC5DbHJTaGFwZU5vV2lmaSxpbnN0YWxsOlQuQ2xyU2hhcGVJbnN0YWxsLHVuaW5zdGFsbDpULkNsclNo'@;
put 'YXBlVW5pbnN0YWxsLGxheWVyczpULkNsclNoYXBlTGF5ZXJzLGJsb2NrOlQuQ2xyU2hhcGVCbG9jaywiYmxvY2tzLWdyb3VwIjpULkNsclNoYXBlQmxvY2tzR3JvdXAsYnVuZGxlOlQuQ2xyU2hhcGVCdW5kbGUsd2lmaTpULkNsclNoYXBlV2lmaSwicmFjay1zZXJ2ZXIiOlQuQ2xyU2hhcGVS'@;
put 'YWNrU2VydmVyLCJoYXJkLWRpc2siOlQuQ2xyU2hhcGVIYXJkRGlzaywiYmFja3VwLXJlc3RvcmUiOlQuQ2xyU2hhcGVCYWNrdXBSZXN0b3JlLGJhY2t1cDpULkNsclNoYXBlQmFja3VwLGRldmljZXM6VC5DbHJTaGFwZURldmljZXMsa2V5Ym9hcmQ6VC5DbHJTaGFwZUtleWJvYXJkLG1vdXNl'@;
put 'OlQuQ2xyU2hhcGVNb3VzZSxkYXNoYm9hcmQ6VC5DbHJTaGFwZURhc2hib2FyZCxob3N0OlQuQ2xyU2hhcGVIb3N0LHN0b3JhZ2U6VC5DbHJTaGFwZVN0b3JhZ2UsY2x1c3RlcjpULkNsclNoYXBlQ2x1c3RlcixhcHBsaWNhdGlvbnM6VC5DbHJTaGFwZUFwcGxpY2F0aW9ucyxidWlsZGluZzpU'@;
put 'LkNsclNoYXBlQnVpbGRpbmcsY3B1OlQuQ2xyU2hhcGVDUFUsbWVtb3J5OlQuQ2xyU2hhcGVNZW1vcnksImRhdGEtY2x1c3RlciI6VC5DbHJTaGFwZURhdGFDbHVzdGVyLCJyZXNvdXJjZS1wb29sIjpULkNsclNoYXBlUmVzb3VyY2VQb29sLHNoaWVsZDpULkNsclNoYXBlU2hpZWxkLCJzaGll'@;
put 'bGQtY2hlY2siOlQuQ2xyU2hhcGVTaGllbGRDaGVjaywic2hpZWxkLXgiOlQuQ2xyU2hhcGVTaGllbGRYLGltcG9ydDpULkNsclNoYXBlSW1wb3J0LGV4cG9ydDpULkNsclNoYXBlRXhwb3J0LCJ1cGxvYWQtY2xvdWQiOlQuQ2xyU2hhcGVVcGxvYWRDbG91ZCwiZG93bmxvYWQtY2xvdWQiOlQu'@;
put 'Q2xyU2hhcGVEb3dubG9hZENsb3VkLHBsdWdpbjpULkNsclNoYXBlUGx1Z2luLGZsb3BweTpULkNsclNoYXBlRmxvcHB5LGNvbXB1dGVyOlQuQ2xyU2hhcGVDb21wdXRlcixkaXNwbGF5OlQuQ2xyU2hhcGVEaXNwbGF5LHRlcm1pbmFsOlQuQ2xyU2hhcGVUZXJtaW5hbCxjb2RlOlQuQ2xyU2hh'@;
put 'cGVDb2RlLGFwcGxpY2F0aW9uOlQuQ2xyU2hhcGVBcHBsaWNhdGlvbixiYXR0ZXJ5OlQuQ2xyU2hhcGVCYXR0ZXJ5LG1vYmlsZTpULkNsclNoYXBlTW9iaWxlLHRhYmxldDpULkNsclNoYXBlVGFibGV0LCJuZXR3b3JrLWdsb2JlIjpULkNsclNoYXBlTmV0d29ya0dsb2JlLCJuZXR3b3JrLXNl'@;
put 'dHRpbmdzIjpULkNsclNoYXBlTmV0d29ya1NldHRpbmdzLCJuZXR3b3JrLXN3aXRjaCI6VC5DbHJTaGFwZU5ldHdvcmtTd2l0Y2gscm91dGVyOlQuQ2xyU2hhcGVSb3V0ZXIsdm06VC5DbHJTaGFwZVZNLCJ2bXctYXBwIjpULkNsclNoYXBlVk1XQXBwLGNlcnRpZmljYXRlOlQuQ2xyU2hhcGVD'@;
put 'ZXJ0aWZpY2F0ZSxhcmNoaXZlOlQuQ2xyU2hhcGVBcmNoaXZlLHVuYXJjaGl2ZTpULkNsclNoYXBlVW5hcmNoaXZlLGNvbm5lY3Q6VC5DbHJTaGFwZUNvbm5lY3QsZGlzY29ubmVjdDpULkNsclNoYXBlRGlzY29ubmVjdCxsaW5rOlQuQ2xyU2hhcGVMaW5rLHVubGluazpULkNsclNoYXBlVW5s'@;
put 'aW5rLCJjbG91ZC1uZXR3b3JrIjpULkNsclNoYXBlQ2xvdWROZXR3b3JrLCJjbG91ZC1zY2FsZSI6VC5DbHJTaGFwZUNsb3VkU2NhbGUsImNsb3VkLXRyYWZmaWMiOlQuQ2xyU2hhcGVDbG91ZFRyYWZmaWMsImNvbnRyb2wtbHVuIjpULkNsckNvbnRyb2xMdW4sZGVwbG95OlQuQ2xyU2hhcGVE'@;
put 'ZXBsb3ksaGVsaXg6VC5DbHJTaGFwZUhlbGl4LGZsYXNrOlQuQ2xyU2hhcGVGbGFzayxhZG1pbmlzdHJhdG9yOlQuQ2xyU2hhcGVBZG1pbmlzdHJhdG9yLCJoYXJkLWRyaXZlIjpULkNsclNoYXBlSGFyZERyaXZlLCJoYXJkLWRyaXZlLWRpc2tzIjpULkNsclNoYXBlSGFyZERyaXZlRGlza3Ms'@;
put 'bnZtZTpULkNsclNoYXBlTlZNZSxzc2Q6VC5DbHJTaGFwZVNTRCxibHVldG9vdGg6VC5DbHJTaGFwZUJsdWV0b290aCwiYmx1ZXRvb3RoLW9mZiI6VC5DbHJTaGFwZUJsdWV0b290aE9mZiwicHJvY2Vzcy1vbi12bSI6VC5DbHJTaGFwZVByb2Nlc3NPblZNLCJhc3NpZ24tdXNlciI6VC5DbHJT'@;
put 'aGFwZUFzc2lnblVzZXIsYXRvbTpULkNsclNoYXBlQXRvbSwiYmFyLWNvZGUiOlQuQ2xyU2hhcGVCYXJDb2RlLCJjZC1kdmQiOlQuQ2xyU2hhcGVDZER2ZCxjb250YWluZXI6VC5DbHJTaGFwZUNvbnRhaW5lciwiY29udGFpbmVyLXZvbHVtZSI6VC5DbHJTaGFwZUNvbnRhaW5lclZvbHVtZSwi'@;
put 'ZmlsZS1zaGFyZSI6VC5DbHJTaGFwZUZpbGVTaGFyZSwicXItY29kZSI6VC5DbHJTaGFwZVFyQ29kZSx1c2I6VC5DbHJTaGFwZVVzYixyYWRhcjpULkNsclNoYXBlUmFkYXIsY2FwYWNpdG9yOlQuQ2xyU2hhcGVDYXBhY2l0b3Isc3F1aWQ6VC5DbHJTaGFwZVNxdWlkLGluZHVjdG9yOlQuQ2xy'@;
put 'U2hhcGVJbmR1Y3RvcixyZXNpc3RvcjpULkNsclNoYXBlUmVzaXN0b3IsImhvc3QtZ3JvdXAiOlQuQ2xyU2hhcGVIb3N0R3JvdXAsInN0b3JhZ2UtYWRhcHRlciI6VC5DbHJTaGFwZVN0b3JhZ2VBZGFwdGVyLCJub2RlLWdyb3VwIjpULkNsclNoYXBlTm9kZUdyb3VwLG5vZGVzOlQuQ2xyU2hh'@;
put 'cGVOb2RlcyxuYW1lc3BhY2U6VC5DbHJTaGFwZU5hbWVzcGFjZSxub2RlOlQuQ2xyU2hhcGVOb2RlLHBvZDpULkNsclNoYXBlUG9kLCJtZWRpYS1jaGFuZ2VyIjpULkNsclNoYXBlTWVkaWFDaGFuZ2VyLCJ0YXBlLWRyaXZlIjpULkNsclNoYXBlVGFwZURyaXZlLGFuaW1hdGlvbjpULkNsclNo'@;
put 'YXBlQW5pbWF0aW9uLCJjaS1jZCI6VC5DbHJTaGFwZUNpQ2QsImZpbGUtc2hhcmUtMiI6VC5DbHJTaGFwZUZpbGVTaGFyZTJ9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShULlRlY2hub2xvZ3lTaGFwZXMsInNlcnZlciIsKDAsay5kZXNjcmlwdG9yQ29uZmlnKShULlRlY2hub2xvZ3lTaGFwZXMu'@;
put 'aG9zdCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShULlRlY2hub2xvZ3lTaGFwZXMsImNvbW1hbmQiLCgwLGsuZGVzY3JpcHRvckNvbmZpZykoVC5UZWNobm9sb2d5U2hhcGVzLnRlcm1pbmFsKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFQuVGVjaG5vbG9neVNoYXBlcywibW9iaWxlLXBob25l'@;
put 'IiwoMCxrLmRlc2NyaXB0b3JDb25maWcpKFQuVGVjaG5vbG9neVNoYXBlcy5tb2JpbGUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVC5UZWNobm9sb2d5U2hhcGVzLCJsaWNlbnNlIiwoMCxrLmRlc2NyaXB0b3JDb25maWcpKFQuVGVjaG5vbG9neVNoYXBlcy5jZXJ0aWZpY2F0ZSkpLE9iamVj'@;
put 'dC5kZWZpbmVQcm9wZXJ0eShULlRlY2hub2xvZ3lTaGFwZXMsImRpc2Nvbm5lY3RlZCIsKDAsay5kZXNjcmlwdG9yQ29uZmlnKShULlRlY2hub2xvZ3lTaGFwZXNbIm5vLXdpZmkiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShULlRlY2hub2xvZ3lTaGFwZXMsInJlY2VpdmVyIiwoMCxrLmRl'@;
put 'c2NyaXB0b3JDb25maWcpKFQuVGVjaG5vbG9neVNoYXBlc1sicGhvbmUtaGFuZHNldCJdKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFQuVGVjaG5vbG9neVNoYXBlcywiZGVzaWduIiwoMCxrLmRlc2NyaXB0b3JDb25maWcpKFQuVGVjaG5vbG9neVNoYXBlc1sicnVsZXItcGVuY2lsIl0pKSxP'@;
put 'YmplY3QuZGVmaW5lUHJvcGVydHkoVC5UZWNobm9sb2d5U2hhcGVzLCJkbmEiLCgwLGsuZGVzY3JpcHRvckNvbmZpZykoVC5UZWNobm9sb2d5U2hhcGVzLmhlbGl4KSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFQuVGVjaG5vbG9neVNoYXBlcywiZm9sZGVyLXNoYXJlIiwoMCxrLmRlc2NyaXB0'@;
put 'b3JDb25maWcpKFQuVGVjaG5vbG9neVNoYXBlc1siZmlsZS1zaGFyZSJdKSksdHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5oYXNPd25Qcm9wZXJ0eSgiQ2xhcml0eUljb25zIikmJndpbmRvdy5DbGFyaXR5SWNvbnMuYWRkKFQuVGVjaG5vbG9neVNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25z'@;
put 'L3NyYy9zaGFwZXMvdGV4dC1lZGl0LXNoYXBlcy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdGV4dC1lZGl0LXNoYXBlcy50'@;
put 'cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbih6ZSxULHNlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5'@;
put 'KFQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFQuVGV4dEVkaXRTaGFwZXM9VC5DbHJTaGFwZVN1cGVyc2NyaXB0PVQuQ2xyU2hhcGVTdWJzY3JpcHQ9VC5DbHJTaGFwZVN0cmlrZXRocm91Z2g9VC5DbHJTaGFwZUluZGVudD1ULkNsclNoYXBlT3V0ZGVudD1ULkNsclNoYXBlSGlnaGxpZ2h0'@;
put 'ZXI9VC5DbHJTaGFwZVRleHRDb2xvcj1ULkNsclNoYXBlTGFuZ3VhZ2U9VC5DbHJTaGFwZUFsaWduVG9wPVQuQ2xyU2hhcGVBbGlnbk1pZGRsZT1ULkNsclNoYXBlQWxpZ25Cb3R0b209VC5DbHJTaGFwZVVuZGVybGluZT1ULkNsclNoYXBlVGV4dD1ULkNsclNoYXBlQWxpZ25SaWdodFRleHQ9'@;
put 'VC5DbHJTaGFwZUJsb2NrUXVvdGU9VC5DbHJTaGFwZVBhaW50Um9sbGVyPVQuQ2xyU2hhcGVOdW1iZXJMaXN0PVQuQ2xyU2hhcGVBbGlnbkxlZnRUZXh0PVQuQ2xyU2hhcGVKdXN0aWZ5VGV4dD1ULkNsclNoYXBlSXRhbGljPVQuQ2xyU2hhcGVBbGlnblJpZ2h0PVQuQ2xyU2hhcGVBbGlnbkxl'@;
put 'ZnQ9VC5DbHJTaGFwZUFsaWduQ2VudGVyPVQuQ2xyU2hhcGVGb250U2l6ZT1ULkNsclNoYXBlQ2hlY2tib3hMaXN0PVQuQ2xyU2hhcGVDZW50ZXJUZXh0PVQuQ2xyU2hhcGVCdWxsZXRMaXN0PVQuQ2xyU2hhcGVCb2xkPXZvaWQgMDt2YXIgaz1zZSgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2Vu'@;
put 'ZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpO1QuQ2xyU2hhcGVCb2xkPSgwLGsuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMi40MywxNy41NGE0LjY3LDQuNjcsMCwwLDAsMi44LTQuMzd2LS4wNmE0LjQzLDQuNDMsMCwwLDAtMS4z'@;
put 'MS0zLjI1LDcuMDksNy4wOSwwLDAsMC01LjEzLTEuNzNoLTdBMS43MSwxLjcxLDAsMCwwLDEwLDkuODZWMjZhMS43MiwxLjcyLDAsMCwwLDEuNzQsMS43NGg3LjMzYzQuMzcsMCw3LjI1LTEuODgsNy4yNS01LjM4VjIyLjNDMjYuMzIsMTkuNjQsMjQuNzMsMTguMzIsMjIuNDMsMTcuNTRaTTEz'@;
put 'LjY4LDExLjRoNC41NGMyLDAsMy4xNS44OSwzLjE1LDIuMzN2LjA2YzAsMS42OC0xLjM2LDIuNDktMy4zOCwyLjQ5SDEzLjY4Wk0yMi4zNywyMmMwLDEuNTktMS4zMSwyLjQzLTMuNDYsMi40M0gxMy42OFYxOS42Mmg1YzIuNDksMCwzLjY5Ljg4LDMuNjksMi4zN1oiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLFQuQ2xyU2hhcGVCdWxsZXRMaXN0PSgwLGsuY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjUuMjEiIGN5PSI5LjE3IiByPSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48Y2lyY2xlIGN4PSI1'@;
put 'LjIxIiBjeT0iMTcuMTciIHI9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxjaXJjbGUgY3g9IjUuMjEiIGN5PSIyNS4xNyIgcj0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMyLjQyLDlh'@;
put 'MSwxLDAsMCwwLTEtMUgxMHYySDMxLjQyQTEsMSwwLDAsMCwzMi40Miw5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMxLjQyLDE2SDEwdjJIMzEuNDJhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zMS40MiwyNEgxMHYySDMxLjQyYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxULkNsclNoYXBlQ2VudGVyVGV4dD0oMCxrLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAuODgs'@;
put 'OEg1LjEyYTEuMSwxLjEsMCwwLDAsMCwyLjJIMzAuODhhMS4xLDEuMSwwLDEsMCwwLTIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yNS41LDE2LjJhMS4xLDEuMSwwLDEsMCwwLTIuMmgtMTVhMS4xLDEuMSwwLDEsMCwwLDIuMloi'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMC4yNSwyMEg1Ljc1YTEuMSwxLjEsMCwwLDAsMCwyLjJoMjQuNWExLjEsMS4xLDAsMCwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBh'@;
put 'dGggZD0iTTI0Ljg4LDI2SDExLjEyYTEuMSwxLjEsMCwxLDAsMCwyLjJIMjQuODhhMS4xLDEuMSwwLDEsMCwwLTIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLFQuQ2xyU2hhcGVDaGVja2JveExpc3Q9KDAsay5jbHJJY29uU1ZHKSgnPHBhdGgg'@;
put 'ZD0iTTMxLjQzLDE2SDEwdjJIMzEuNDNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMS40MywyNEgxMHYySDMxLjQzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMiIgLz48cGF0aCBkPSJNMTUuNDUsMTBoMTZhMSwxLDAsMCwwLDAtMmgtMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMTcuNSwzLjQyYTEuMDksMS4wOSwwLDAsMC0xLjU1LDBMNy44OSwxMS40OCw0LjUxLDcuODRBMS4x'@;
put 'LDEuMSwwLDEsMCwyLjksOS4zNGw0Ljk0LDUuM0wxNy41LDVBMS4xLDEuMSwwLDAsMCwxNy41LDMuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz4nKSxULkNsclNoYXBlRm9udFNpemU9KDAsay5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIxLDkuMDhB'@;
put 'MS4xMywxLjEzLDAsMCwwLDE5Ljg2LDhINC42MmExLjEsMS4xLDAsMSwwLDAsMi4xOUgxMVYyN2ExLjA5LDEuMDksMCwwLDAsMi4xNywwVjEwLjE5aDYuNjlBMS4xNCwxLjE0LDAsMCwwLDIxLDkuMDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0'@;
put 'aCBkPSJNMzAuNjcsMTVIMjEuMTVhMS4xLDEuMSwwLDEsMCwwLDIuMTlIMjVWMjYuNWExLjA5LDEuMDksMCwwLDAsMi4xNywwVjE3LjIzaDMuNTRhMS4xLDEuMSwwLDEsMCwwLTIuMTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxULkNsclNoYXBl'@;
put 'QWxpZ25DZW50ZXI9KDAsay5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLDIwSDE5VjE2aDZhMSwxLDAsMCwwLDEtMVY3YTEsMSwwLDAsMC0xLTFIMTlWMmExLDEsMCwwLDAtMiwwVjZIMTFhMSwxLDAsMCwwLTEsMXY4YTEsMSwwLDAsMCwxLDFoNnY0SDVhMSwxLDAsMCwwLTEsMXY4YTEsMSww'@;
put 'LDAsMCwxLDFIMTd2NGExLDEsMCwwLDAsMiwwVjMwSDMxYTEsMSwwLDAsMCwxLTFWMjFBMSwxLDAsMCwwLDMxLDIwWk0xMiwxNFY4SDI0djZaTTMwLDI4SDZWMjJIMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxULkNsclNoYXBlQWxpZ25MZWZ0'@;
put 'PSgwLGsuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik01LDFBMSwxLDAsMCwwLDQsMlYzNGExLDEsMCwwLDAsMiwwVjJBMSwxLDAsMCwwLDUsMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMSwyMEg4VjMwSDMxYTEsMSwwLDAsMCwxLTFW'@;
put 'MjFBMSwxLDAsMCwwLDMxLDIwWm0tMSw4SDEwVjIySDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI0LDE1VjdhMSwxLDAsMCwwLTEtMUg4VjE2SDIzQTEsMSwwLDAsMCwyNCwxNVptLTItMUgxMFY4SDIyWiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JyksVC5DbHJTaGFwZUFsaWduUmlnaHQ9KDAsay5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLDFhMSwxLDAsMCwwLTEsMVYzNGExLDEsMCwwLDAsMiwwVjJBMSwxLDAsMCwwLDMxLDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNCwyMXY4YTEsMSwwLDAsMCwxLDFIMjhWMjBINUExLDEsMCwwLDAsNCwyMVptMiwxSDI2djZINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xMiw3djhhMSwxLDAsMCwwLDEsMUgy'@;
put 'OFY2SDEzQTEsMSwwLDAsMCwxMiw3Wm0yLDFIMjZ2NkgxNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPicpLFQuQ2xyU2hhcGVJdGFsaWM9KDAsay5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LjQyLDhIMTcuMWExLjEsMS4xLDAsMSwwLDAsMi4xOWgy'@;
put 'LjEzTDEzLjExLDI1LjU1SDEwLjQ3YTEuMSwxLjEsMCwxLDAsMCwyLjE5SDE3LjhhMS4xLDEuMSwwLDEsMCwwLTIuMTlIMTUuNTFsNi4xMy0xNS4zNmgyLjc4YTEuMSwxLjEsMCwxLDAsMC0yLjE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksVC5D'@;
put 'bHJTaGFwZUp1c3RpZnlUZXh0PSgwLGsuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LDEwLjJIMzEuNzVhMS4xLDEuMSwwLDEsMCwwLTIuMkg2YTEuMSwxLjEsMCwxLDAsMCwyLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzEuNzUs'@;
put 'MTRINmExLjEsMS4xLDAsMSwwLDAsMi4ySDMxLjc1YTEuMSwxLjEsMCwxLDAsMC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzEuMTIsMjBINi42MmExLjEsMS4xLDAsMSwwLDAsMi4yaDI0LjVhMS4xLDEuMSwwLDEsMCwwLTIu'@;
put 'MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMC40NSwyNS44M0g2LjZhMS4xLDEuMSwwLDAsMCwwLDIuMkgzMC40NWExLjEsMS4xLDAsMCwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQi'@;
put 'IC8+JyksVC5DbHJTaGFwZUFsaWduTGVmdFRleHQ9KDAsay5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIwLjI1LDI2SDZ2Mi4ySDIwLjI1YTEuMSwxLjEsMCwwLDAsMC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjgsMjBINnYy'@;
put 'LjJIMjhBMS4xLDEuMSwwLDAsMCwyOCwyMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMi42LDE1LjFBMS4xLDEuMSwwLDAsMCwyMS41LDE0SDZ2Mi4ySDIxLjVBMS4xLDEuMSwwLDAsMCwyMi42LDE1LjFaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMjkuMjUsOEg2djIuMkgyOS4yNWExLjEsMS4xLDAsMSwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+JyksVC5DbHJTaGFwZU51bWJlckxpc3Q9KDAsay5jbHJJY29u'@;
put 'U1ZHKSgnPHBvbHlnb24gcG9pbnRzPSI1LjQ2IDcuNDEgNS40NiAxMS41NiA2LjY1IDExLjU2IDYuNjUgNi4wNSA1LjcgNi4wNSA0LjA1IDcuMTYgNC41MiA4IDUuNDYgNy40MSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTUuNTcsMTQu'@;
put 'ODJhLjc2Ljc2LDAsMCwxLC44My43M2MwLC4zOC0uMjEuNzQtLjg3LDEuMjdsLTIsMS41N3YxSDcuNjdWMTguMjhINS4zM2wxLS43N2MxLS43LDEuMjgtMS4yNywxLjI4LTJhMS44MywxLjgzLDAsMCwwLTItMS43NiwyLjYzLDIuNjMsMCwwLDAtMi4xNCwxLjA4bC43Ni43M0ExLjc1LDEuNzUs'@;
put 'MCwwLDEsNS41NywxNC44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik02LjU2LDI0LjY0YTEuMzIsMS4zMiwwLDAsMCwxLTEuMjdjMC0uODctLjc4LTEuNTEtMi0xLjUxYTIuNjEsMi42MSwwLDAsMC0yLjEsMWwuNjkuNzJhMS43OCwx'@;
put 'Ljc4LDAsMCwxLDEuMy0uNjRjLjU0LDAsLjkyLjI2LjkyLjY2cy0uMzYuNjItMSwuNjJINC43OXYxaC42NGMuNzQsMCwxLjA3LjIxLDEuMDcuNjNzLS4zNS42OC0xLC42OGEyLDIsMCwwLDEtMS40Ni0uNjVsLS43Ljc4YTIuODUsMi44NSwwLDAsMCwyLjIxLjkzYzEuMjksMCwyLjEzLS42OSwy'@;
put 'LjEzLTEuNjRBMS4zMywxLjMzLDAsMCwwLDYuNTYsMjQuNjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzIuNDIsOWExLDEsMCwwLDAtMS0xSDEwdjJIMzEuNDJBMSwxLDAsMCwwLDMyLjQyLDlaIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzEuNDIsMTZIMTB2MkgzMS40MmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMxLjQyLDI0SDEwdjJIMzEuNDJhMSwxLDAsMCwwLDAtMloiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLFQuQ2xyU2hhcGVQYWludFJvbGxlcj0oMCxrLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEsMTBWNGEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNHY2YTIsMiwwLDAsMCwyLDJIMjlBMiwyLDAsMCwwLDMx'@;
put 'LDEwWk02LDRIMjl2Nkg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLDZIMzJ2Ni4yOUwxOC43LDE2LjU0YTEsMSwwLDAsMC0uNywxVjE5SDE2VjMzYTIsMiwwLDAsMCwyLDJoMmEyLDIsMCwwLDAsMi0yVjE5SDIwdi0uNzNMMzMu'@;
put 'MywxNGExLDEsMCwwLDAsLjctMVY3QTEsMSwwLDAsMCwzMyw2Wk0yMCwzM0gxOFYyMWgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHJlY3QgeD0iNCIgeT0iMiIgd2lkdGg9IjI3IiBoZWlnaHQ9IjEwIiByeD0iMSIgcnk9IjEiIGNsYXNzPSJjbHIt'@;
put 'aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLDZIMzJ2Ni4yNEwxOC43MSwxNi40NWExLDEsMCwwLDAtLjcxLDFWMTlIMTZWMzRhMSwxLDAsMCwwLDEsMWg0YTEsMSwwLDAsMCwxLTFWMTlIMjB2LS44MkwzMy4yOSwxNEExLDEsMCwwLDAsMzQsMTNWN0ExLDEsMCww'@;
put 'LDAsMzMsNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksVC5DbHJTaGFwZUJsb2NrUXVvdGU9KDAsay5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTExLjg2LDE2LjU1YTQuMzEsNC4zMSwwLDAsMC0yLjExLjU2LDE0LjQ0LDE0LjQ0LDAsMCwxLDQuMzYtNiwx'@;
put 'LjEsMS4xLDAsMCwwLTEuNC0xLjdjLTQsMy4yNS01Ljc4LDcuNzUtNS43OCwxMC41NEE1LjA4LDUuMDgsMCwwLDAsMTAsMjQuNThhNC40LDQuNCwwLDAsMCwxLjg4LjQ0LDQuMjQsNC4yNCwwLDEsMCwwLTguNDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg'@;
put 'Lz48cGF0aCBkPSJNMjMsMTYuNTVhNC4yOSw0LjI5LDAsMCwwLTIuMTEuNTYsMTQuNSwxNC41LDAsMCwxLDQuMzUtNiwxLjEsMS4xLDAsMSwwLTEuMzktMS43Yy00LDMuMjUtNS43OCw3Ljc1LTUuNzgsMTAuNTRhNS4wOCw1LjA4LDAsMCwwLDMsNC42MUE0LjM3LDQuMzcsMCwwLDAsMjMsMjVh'@;
put 'NC4yNCw0LjI0LDAsMSwwLDAtOC40N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLFQuQ2xyU2hhcGVBbGlnblJpZ2h0VGV4dD0oMCxrLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTQuNjUsMjcuMWExLjEsMS4xLDAsMCwwLDEuMSwxLjFIMzBWMjZI'@;
put 'MTUuNzVBMS4xLDEuMSwwLDAsMCwxNC42NSwyNy4xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTYuOSwyMS4xQTEuMSwxLjEsMCwwLDAsOCwyMi4ySDMwVjIwSDhBMS4xLDEuMSwwLDAsMCw2LjksMjEuMVoiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xMy40LDE1LjFhMS4xLDEuMSwwLDAsMCwxLjEsMS4xSDMwVjE0SDE0LjVBMS4xLDEuMSwwLDAsMCwxMy40LDE1LjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJN'@;
put 'Ni43NSw4YTEuMSwxLjEsMCwxLDAsMCwyLjJIMzBWOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLFQuQ2xyU2hhcGVUZXh0PSgwLGsuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMi4xOSw4Ljg0YTEuNDUsMS40NSwwLDAsMC0xLjQtMWgtLjEyYTEu'@;
put 'NDYsMS40NiwwLDAsMC0xLjQyLDFMMS4xNCwyNi41NmExLjI5LDEuMjksMCwwLDAtLjE0LjU5LDEsMSwwLDAsMCwxLDEsMS4xMiwxLjEyLDAsMCwwLDEuMDgtLjc3bDIuMDgtNC42NWgxMWwyLjA4LDQuNTlhMS4yNCwxLjI0LDAsMCwwLDEuMTIuODMsMS4wOCwxLjA4LDAsMCwwLDEuMDgtMS4w'@;
put 'OCwxLjY0LDEuNjQsMCwwLDAtLjE0LS41N1pNNi4wOCwyMC43MWw0LjU5LTEwLjIyLDQuNiwxMC4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMi4yNCwxNC43OEE2LjM1LDYuMzUsMCwwLDAsMjcuNiwxMy4yYTExLjM2LDExLjM2'@;
put 'LDAsMCwwLTQuNywxLDEsMSwwLDAsMC0uNTguODksMSwxLDAsMCwwLC45NC45MiwxLjIzLDEuMjMsMCwwLDAsLjM5LS4wOCw4Ljg3LDguODcsMCwwLDEsMy43Mi0uODFjMi43LDAsNC4yOCwxLjMzLDQuMjgsMy45MnYuNWExNS4yOSwxNS4yOSwwLDAsMC00LjQyLS42MWMtMy42NCwwLTYuMTQs'@;
put 'MS42MS02LjE0LDQuNjR2LjA1YzAsMi45NSwyLjcsNC40OCw1LjM3LDQuNDhhNi4yOSw2LjI5LDAsMCwwLDUuMTktMi40OFYyNi45YTEsMSwwLDAsMCwxLDEsMSwxLDAsMCwwLDEtMS4wNlYxOUE1LjcxLDUuNzEsMCwwLDAsMzIuMjQsMTQuNzhabS0uNTYsNy43YzAsMi4yOC0yLjE3LDMuODkt'@;
put 'NC44MSwzLjg5LTEuOTQsMC0zLjYxLTEuMDYtMy42MS0yLjg2di0uMDZjMC0xLjgsMS41LTMsNC4yLTNhMTUuMiwxNS4yLDAsMCwxLDQuMjIuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxULkNsclNoYXBlVW5kZXJsaW5lPSgwLGsuY2xySWNv'@;
put 'blNWRykoJzxwYXRoIGQ9Ik0xOCwyOC4xN2M1LjA4LDAsOC40OC0zLjA4LDguNDgtOVY4LjU0YTEuMTUsMS4xNSwwLDEsMC0yLjMsMHYxMC44YzAsNC40NC0yLjM4LDYuNzEtNi4xMyw2Ljcxcy02LjIxLTIuNDctNi4yMS02Ljg1VjguNTRhMS4xNSwxLjE1LDAsMSwwLTIuMywwdjEwLjhDOS41'@;
put 'MywyNS4wOSwxMywyOC4xNywxOCwyOC4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMSwzMEg1YTEuMTEsMS4xMSwwLDAsMCwwLDIuMjFIMzFBMS4xMSwxLjExLDAsMCwwLDMxLDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTIiIC8+JyksVC5DbHJTaGFwZUFsaWduQm90dG9tPSgwLGsuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zNCwzMEgyYTEsMSwwLDAsMCwwLDJIMzRhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRo'@;
put 'IGQ9Ik0xNiw1YTEsMSwwLDAsMC0xLTFIN0ExLDEsMCwwLDAsNiw1VjI4SDE2Wk0xNCwyNkg4VjZoNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMCwxM2ExLDEsMCwwLDAtMS0xSDIxYTEsMSwwLDAsMC0xLDFWMjhIMzBaTTI4LDI2'@;
put 'SDIyVjE0aDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxULkNsclNoYXBlQWxpZ25NaWRkbGU9KDAsay5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0LDE3SDMwVjExYTEsMSwwLDAsMC0xLTFIMjFhMSwxLDAsMCwwLTEsMXY2SDE2VjVhMSwxLDAs'@;
put 'MCwwLTEtMUg3QTEsMSwwLDAsMCw2LDVWMTdIMmExLDEsMCwwLDAsMCwySDZWMzFhMSwxLDAsMCwwLDEsMWg4YTEsMSwwLDAsMCwxLTFWMTloNHY2YTEsMSwwLDAsMCwxLDFoOGExLDEsMCwwLDAsMS0xVjE5aDRhMSwxLDAsMCwwLDAtMlpNMTQsMzBIOFY2aDZabTE0LTZIMjJWMTJoNloiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLFQuQ2xyU2hhcGVBbGlnblRvcD0oMCxrLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzQsNEgyQTEsMSwwLDAsMCwyLDZIMzRhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik02LDMxYTEsMSwwLDAsMCwxLDFoOGExLDEsMCwwLDAsMS0xVjhINlpNOCwxMGg2VjMwSDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjAsMjNhMSwxLDAsMCwwLDEsMWg4YTEsMSwwLDAsMCwx'@;
put 'LTFWOEgyMFptMi0xM2g2VjIySDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JyksVC5DbHJTaGFwZUxhbmd1YWdlPSgwLGsuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwzSDE0djVoMlY1aDE0YzAuNiwwLDEsMC40LDEsMXYxMWMwLDAuNi0wLjQs'@;
put 'MS0xLDFIMTd2N2gtNS4zTDgsMjcuOVYyNUg1Yy0wLjYsMC0xLTAuNC0xLTFWMTNjMC0wLjYsMC40LTEsMS0xaDEzdi0ySDVcblx0XHRjLTEuNywwLTMsMS4zLTMsM3YxMWMwLDEuNywxLjMsMywzLDNoMXY1LjFsNi4zLTUuMUgxOXYtN2gxMWMxLjcsMCwzLTEuMywzLTNWNkMzMyw0LjMsMzEu'@;
put 'NywzLDMwLDN6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNi4yLDIyLjloMi40bDAuNi0xLjZoMy4xbDAuNiwxLjZoMi40TDExLjksMTRIOS41TDYuMiwyMi45eiBNMTAuNywxNi41bDEsMy4xaC0yTDEwLjcsMTYuNXoiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMCwxN2MxLjEsMCwyLjYtMC4zLDQtMWMxLjQsMC43LDMsMSw0LDF2LTJjMCwwLTEsMC0yLjEtMC40YzEuMi0xLjIsMi4xLTMsMi4xLTUuNlY4aC0zVjZoLTJ2MmgtM3YyaDUuOVxuXHRcdGMtMC4yLDEuOC0x'@;
put 'LDIuOS0xLjksMy42Yy0wLjYtMC41LTEuMi0xLjItMS42LTIuMWgtMi4xYzAuNCwxLjMsMSwyLjMsMS44LDMuMUMyMS4xLDE1LDIwLjIsMTUsMjAsMTVWMTd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cG9seWdvbiBwb2ludHM9IjExLDE2LjUgMTAs'@;
put 'MTkuNiAxMiwxOS42IDExLDE2LjUgXHQiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTMwLjMsM2gtMTZ2NWg0djJoLTEzYy0xLjcsMC0zLDEuMy0zLDN2MTFjMCwxLjcsMS4zLDMsMywzaDF2NS4xbDYuMy01LjFoNi43di03aDExYzEuNywwLDMt'@;
put 'MS4zLDMtM1Y2XG5cdFx0QzMzLjMsNC4zLDMyLDMsMzAuMywzeiBNMTMuMSwyMi45bC0wLjUtMS42SDkuNWwtMC42LDEuNkg2LjVMOS44LDE0aDIuNGwzLjMsOC45TDEzLjEsMjIuOXogTTI4LjMsMTV2MmMtMS4zLDAtMi43LTAuNC0zLjktMVxuXHRcdGMtMS4yLDAuNi0yLjYsMC45LTQsMWwt'@;
put 'MC4xLTJjMC43LDAsMS40LTAuMSwyLjEtMC4zYy0wLjktMC45LTEuNS0yLTEuOC0zLjJoMi4xYzAuMywwLjksMC45LDEuNiwxLjYsMi4yYzEuMS0wLjksMS44LTIuMiwxLjktMy43XG5cdFx0aC02VjhoM1Y2aDJ2MmgzLjNsMC4xLDFjMC4xLDIuMS0wLjcsNC4yLTIuMiw1LjdDMjcuMSwxNC45'@;
put 'LDI3LjcsMTUsMjguMywxNXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksVC5DbHJTaGFwZVRleHRDb2xvcj0oMCxrLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTkuNDcsMy44NGExLjQ1LDEuNDUsMCwwLDAtMS40LTFIMThhMS40NSwxLjQ1LDAsMCwwLTEu'@;
put 'NDIsMUw4LjQyLDIxLjU2YTEuMzUsMS4zNSwwLDAsMC0uMTQuNTksMSwxLDAsMCwwLDEsMSwxLjExLDEuMTEsMCwwLDAsMS4wOC0uNzdsMi4wOC00LjY1aDExbDIuMDgsNC41OWExLjI0LDEuMjQsMCwwLDAsMS4xMi44MywxLjA4LDEuMDgsMCwwLDAsMS4wOC0xLjA4LDEuNTksMS41OSwwLDAs'@;
put 'MC0uMTQtLjU3Wk0xMy4zNiwxNS43MSwxOCw1LjQ5bDQuNiwxMC4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxyZWN0IHg9IjQuMDYiIHk9IjI1IiB3aWR0aD0iMjgiIGhlaWdodD0iOCIgcng9IjIiIHJ5PSIyIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPicpLFQuQ2xyU2hhcGVIaWdobGlnaHRlcj0oMCxrLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTUuODIsMjYuMDZhMSwxLDAsMCwxLS43MS0uMjlMOC42NywxOS4zM2ExLDEsMCwwLDEtLjI5LS43MSwxLDEsMCwwLDEsLjI5LS43MUwyMywzLjU0'@;
put 'YTUuNTUsNS41NSwwLDEsMSw3Ljg1LDcuODZMMTYuNTMsMjUuNzdBMSwxLDAsMCwxLDE1LjgyLDI2LjA2Wm0tNS03LjQ0LDUsNUwyOS40OCwxMGEzLjU0LDMuNTQsMCwwLDAsMC01LDMuNjMsMy42MywwLDAsMC01LDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'MSIvPlxuICA8cGF0aCBkPSJNMTAuMzgsMjguMjhBMSwxLDAsMCwxLDkuNjcsMjhMNi40NSwyNC43N2ExLDEsMCwwLDEtLjIyLTEuMDlsMi4yMi01LjQ0YTEsMSwwLDAsMSwxLjYzLS4zM2w2LjQ1LDYuNDRBMSwxLDAsMCwxLDE2LjIsMjZsLTUuNDQsMi4yMkExLjMzLDEuMzMsMCwwLDEsMTAu'@;
put 'MzgsMjguMjhaTTguMzMsMjMuODJsMi4yOSwyLjI4LDMuNDMtMS40TDkuNzQsMjAuMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNOC45NCwzMGgtNWExLDEsMCwwLDEtLjg0LTEuNTVsMy4yMi00Ljk0YTEsMSwwLDAsMSwxLjU1'@;
put 'LS4xNmwzLjIxLDMuMjJhMSwxLDAsMCwxLC4wNiwxLjM1TDkuNywyOS42NEExLDEsMCwwLDEsOC45NCwzMFpNNS43OCwyOEg4LjQ3TDksMjcuMzRsLTEuNy0xLjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cmVjdCB4PSIzLjA2IiB5PSIzMSIg'@;
put 'd2lkdGg9IjMwIiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+JyksVC5DbHJTaGFwZU91dGRlbnQ9KDAsay5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjA2LDloLTI2YTEsMSwwLDEsMSwwLTJoMjZhMSwxLDAsMSwxLDAsMloiIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwxNGgtMTdhMSwxLDAsMCwxLDAtMmgxN2ExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTMxLjA2LDE5'@;
put 'aC0xN2ExLDEsMCwwLDEsMC0yaDE3YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMzEuMDYsMjRoLTE3YTEsMSwwLDAsMSwwLTJoMTdhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwyOWgtMjZhMSwxLDAsMCwxLDAtMmgyNmExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgPHBhdGggZD0iTTkuNTYsMjIuNTRhMSwxLDAsMCwxLS43LS4z'@;
put 'TDQuNjEsMThsNC4yNS00LjI0YTEsMSwwLDAsMSwxLjQxLDEuNDFMNy40NCwxOGwyLjgzLDIuODNhMSwxLDAsMCwxLS43MSwxLjcxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz4nKSxULkNsclNoYXBlSW5kZW50PSgwLGsuY2xySWNvblNWRykoJzxwYXRo'@;
put 'IGQ9Ik0zMS4wNiw5aC0yNmExLDEsMCwxLDEsMC0yaDI2YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMzEuMDYsMTRoLTE3YTEsMSwwLDAsMSwwLTJoMTdhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwxOWgtMTdhMSwxLDAsMCwxLDAtMmgxN2ExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTMxLjA2LDI0aC0xN2Ex'@;
put 'LDEsMCwwLDEsMC0yaDE3YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICA8cGF0aCBkPSJNMzEuMDYsMjloLTI2YTEsMSwwLDAsMSwwLTJoMjZhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC01Ii8+XG4gIDxwYXRoIGQ9Ik01LjU2LDIyLjU0YTEsMSwwLDAsMS0uNy0xLjcxTDcuNjgsMTgsNC44NiwxNS4xN2ExLDEsMCwwLDEsMC0xLjQxLDEsMSwwLDAsMSwxLjQxLDBMMTAuNTEsMTgsNi4yNywyMi4yNEExLDEsMCwwLDEsNS41NiwyMi41NFoiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+JyksVC5DbHJTaGFwZVN0cmlrZXRocm91Z2g9KDAsay5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLjg4LDE5LjkyaC0zMGExLDEsMCwxLDEsMC0yaDMwYTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNNy4yNywxNS44NmExMi45LDEyLjksMCwwLDEsMS4yOS0uNTJBNS42OSw1LjY5LDAsMCwxLDEwLjM5LDE1YTMuMTgsMy4xOCwwLDAsMSwyLjc1LDEuMTFBNC40NCw0LjQ0LDAsMCwxLDE0LDE4Ljg1di40OWExMy44MywxMy44MywwLDAsMC00'@;
put 'LjI5LS43NCw2LjE5LDYuMTksMCwwLDAtMi41OS41NEE1LDUsMCwwLDAsNS44MSwyMEgxNS44OFYxOC44NWE1LjY3LDUuNjcsMCwwLDAtMS4zNy00LDUuMTYsNS4xNiwwLDAsMC00LTEuNDksMTAsMTAsMCwwLDAtMy45MS44OC44Ny44NywwLDAsMC0uNDQsMS4xOEEuODQuODQsMCwwLDAsNy4y'@;
put 'NywxNS44NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMSwyMGE1Ljk0LDUuOTQsMCwwLDEsLjU0LTIuMzEsNC4zNSw0LjM1LDAsMCwxLDEuNTgtMS44Myw0LjI3LDQuMjcsMCwwLDEsNC41OSwwLDQuNDcsNC40NywwLDAsMSwx'@;
put 'LjU3LDEuODNBNi4xMiw2LjEyLDAsMCwxLDI5Ljg1LDIwaDJhNy43Myw3LjczLDAsMCwwLS43OC0zLjE5LDYsNiwwLDAsMC0yLjE4LTIuNDUsNS43NCw1Ljc0LDAsMCwwLTMuMS0uODgsNS4zOSw1LjM5LDAsMCwwLTIuOC43Myw1LjU1LDUuNTUsMCwwLDAtMiwyLjA1VjEwYS44Ny44NywwLDAs'@;
put 'MC0uODYtLjg2SDIwYS44Ny44NywwLDAsMC0uODYuODZWMjBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMjkuNjcsMjJhNS42MSw1LjYxLDAsMCwxLS4zNiwxLjA3LDQuNDcsNC40NywwLDAsMS0xLjU3LDEuODUsNC4zMiw0LjMy'@;
put 'LDAsMCwxLTQuNTksMCw0LjM1LDQuMzUsMCwwLDEtMS41OC0xLjg1QTUuNjQsNS42NCwwLDAsMSwyMS4yLDIySDE5LjA5djQuMTNBLjg3Ljg3LDAsMCwwLDIwLDI3aC4yYS44Ny44NywwLDAsMCwuODYtLjg2VjI0LjUxYTUuNTgsNS41OCwwLDAsMCwyLDIuMDYsNS40OCw1LjQ4LDAsMCwwLDIu'@;
put 'OC43Miw1LjY2LDUuNjYsMCwwLDAsMy4xLS44OEE1Ljg4LDUuODgsMCwwLDAsMzEuMDksMjQsNy4wOSw3LjA5LDAsMCwwLDMxLjczLDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTE0LDIydi43NmEzLjM0LDMuMzQsMCwwLDEt'@;
put 'MS42MiwyLDUuMzQsNS4zNCwwLDAsMS0yLjY5LjcyLDMuNzgsMy43OCwwLDAsMS0yLjM2LS43LDIuMjQsMi4yNCwwLDAsMS0uOTQtMS45LDIuMjksMi4yOSwwLDAsMSwuMi0uOTFINC42MmE0LDQsMCwwLDAtLjEzLDEsMy44MywzLjgzLDAsMCwwLDEuMzUsMy4wNkE1LjE1LDUuMTUsMCwwLDAs'@;
put 'OS4zMSwyNy4yLDYsNiwwLDAsMCwxMiwyNi41N2E0LjYyLDQuNjIsMCwwLDAsMi0xLjc0VjI2YS44Ni44NiwwLDAsMCwuODYuODZIMTVhLjg2Ljg2LDAsMCwwLC44Ni0uODZWMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPicpLFQuQ2xyU2hhcGVTdWJz'@;
put 'Y3JpcHQ9KDAsay5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE0LjU1LDE4bDYuOCw4LjZhMS4xNywxLjE3LDAsMCwxLS45MiwxLjloMGExLjE3LDEuMTcsMCwwLDEtLjkyLS40NEwxMywxOS45MSw2LjYsMjhhMS4xNywxLjE3LDAsMCwxLS45Mi40NGgwYTEuMTcsMS4xNywwLDAsMS0uOTItMS45'@;
put 'TDExLjU1LDE4bC02LjgtOC42YTEuMTcsMS4xNywwLDAsMSwuOTItMS45aDBBMS4xNywxLjE3LDAsMCwxLDYuNjMsOGw2LjQ0LDguMTNMMTkuNSw4YTEuMTcsMS4xNywwLDAsMSwuOTItLjQ0aDBhMS4xNywxLjE3LDAsMCwxLC45MiwxLjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMjMsMzEuOCwyNy40OSwyOGE5LjksOS45LDAsMCwwLDEuODgtMi4wNUEzLjQ0LDMuNDQsMCwwLDAsMzAsMjRhMi4zNSwyLjM1LDAsMCwwLS4zNS0xLjI3LDIuNDQsMi40NCwwLDAsMC0xLS44NCwyLjksMi45LDAsMCwwLTEuMjYtLjI4LDMu'@;
put 'MzYsMy4zNiwwLDAsMC0xLjgzLjUsNS42NCw1LjY0LDAsMCwwLTEuNDgsMS40MmwtMS0uODFhNS4xMSw1LjExLDAsMCwxLDQuMzYtMi4zNyw0LjM1LDQuMzUsMCwwLDEsMiwuNDUsMy40MywzLjQzLDAsMCwxLDIsMy4xOCw0LjQ1LDQuNDUsMCwwLDEtLjY4LDIuMzUsMTAuOSwxMC45LDAsMCwx'@;
put 'LTIuMjQsMi40NmwtMy4yNCwyLjgxSDMxLjVWMzNIMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPicpLFQuQ2xyU2hhcGVTdXBlcnNjcmlwdD0oMCxrLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTQuNDMsMThsNi43OSw4LjZhMS4xNywxLjE3LDAsMCwx'@;
put 'LS45MiwxLjloMGExLjE3LDEuMTcsMCwwLDEtLjkyLS40NGwtNi40NC04LjEzTDYuNDcsMjhhMS4xNywxLjE3LDAsMCwxLS45Mi40NGgwYTEuMTcsMS4xNywwLDAsMS0uOTItMS45TDExLjQzLDE4bC02LjgtOC42YTEuMTcsMS4xNywwLDAsMSwuOTItMS45aDBBMS4yLDEuMiwwLDAsMSw2LjUx'@;
put 'LDhsNi40Myw4LjEzTDE5LjM4LDhhMS4xNywxLjE3LDAsMCwxLC45Mi0uNDRoMGExLjE3LDEuMTcsMCwwLDEsLjkyLDEuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0yMi44NSwxNC40N2w0LjUxLTMuODVhOS4zNyw5LjM3LDAs'@;
put 'MCwwLDEuODgtMiwzLjQzLDMuNDMsMCwwLDAsLjU5LTEuODYsMi4yNywyLjI3LDAsMCwwLS4zNi0xLjI3LDIuMzgsMi4zOCwwLDAsMC0uOTUtLjgzLDIuNzcsMi43NywwLDAsMC0xLjI2LS4yOSwzLjM5LDMuMzksMCwwLDAtMS44My41LDUuODMsNS44MywwLDAsMC0xLjQ5LDEuNDJsLTEtLjgx'@;
put 'YTUuMTIsNS4xMiwwLDAsMSw0LjM2LTIuMzcsNC4zNiw0LjM2LDAsMCwxLDIsLjQ1LDMuNDcsMy40NywwLDAsMSwyLDMuMThBNC40NCw0LjQ0LDAsMCwxLDMwLjU4LDlhMTEuMTQsMTEuMTQsMCwwLDEtMi4yNCwyLjQ2TDI1LjEsMTQuMzFoNi4yOHYxLjMzSDIyLjg1WiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz4nKSxULlRleHRFZGl0U2hhcGVzPXtib2xkOlQuQ2xyU2hhcGVCb2xkLCJidWxsZXQtbGlzdCI6VC5DbHJTaGFwZUJ1bGxldExpc3QsImNoZWNrYm94LWxpc3QiOlQuQ2xyU2hhcGVDaGVja2JveExpc3QsIm51bWJlci1saXN0IjpULkNs'@;
put 'clNoYXBlTnVtYmVyTGlzdCwiZm9udC1zaXplIjpULkNsclNoYXBlRm9udFNpemUsaXRhbGljOlQuQ2xyU2hhcGVJdGFsaWMsImp1c3RpZnktdGV4dCI6VC5DbHJTaGFwZUp1c3RpZnlUZXh0LCJjZW50ZXItdGV4dCI6VC5DbHJTaGFwZUNlbnRlclRleHQsImFsaWduLWxlZnQtdGV4dCI6VC5D'@;
put 'bHJTaGFwZUFsaWduTGVmdFRleHQsImFsaWduLXJpZ2h0LXRleHQiOlQuQ2xyU2hhcGVBbGlnblJpZ2h0VGV4dCwicGFpbnQtcm9sbGVyIjpULkNsclNoYXBlUGFpbnRSb2xsZXIsImJsb2NrLXF1b3RlIjpULkNsclNoYXBlQmxvY2tRdW90ZSx0ZXh0OlQuQ2xyU2hhcGVUZXh0LHVuZGVybGlu'@;
put 'ZTpULkNsclNoYXBlVW5kZXJsaW5lLCJhbGlnbi1jZW50ZXIiOlQuQ2xyU2hhcGVBbGlnbkNlbnRlciwiYWxpZ24tbGVmdCI6VC5DbHJTaGFwZUFsaWduTGVmdCwiYWxpZ24tcmlnaHQiOlQuQ2xyU2hhcGVBbGlnblJpZ2h0LCJhbGlnbi1ib3R0b20iOlQuQ2xyU2hhcGVBbGlnbkJvdHRvbSwi'@;
put 'YWxpZ24tbWlkZGxlIjpULkNsclNoYXBlQWxpZ25NaWRkbGUsImFsaWduLXRvcCI6VC5DbHJTaGFwZUFsaWduVG9wLGxhbmd1YWdlOlQuQ2xyU2hhcGVMYW5ndWFnZSwidGV4dC1jb2xvciI6VC5DbHJTaGFwZVRleHRDb2xvcixoaWdobGlnaHRlcjpULkNsclNoYXBlSGlnaGxpZ2h0ZXIsaW5k'@;
put 'ZW50OlQuQ2xyU2hhcGVJbmRlbnQsb3V0ZGVudDpULkNsclNoYXBlT3V0ZGVudCxzdHJpa2V0aHJvdWdoOlQuQ2xyU2hhcGVTdHJpa2V0aHJvdWdoLHN1YnNjcmlwdDpULkNsclNoYXBlU3Vic2NyaXB0LHN1cGVyc2NyaXB0OlQuQ2xyU2hhcGVTdXBlcnNjcmlwdH0sdHlwZW9mIHdpbmRvdzwi'@;
put 'dSImJndpbmRvdy5oYXNPd25Qcm9wZXJ0eSgiQ2xhcml0eUljb25zIikmJndpbmRvdy5DbGFyaXR5SWNvbnMuYWRkKFQuVGV4dEVkaXRTaGFwZXMpfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3RyYXZlbC1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3RyYXZlbC1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oemUsVCxzZSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShULCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxULlRyYXZlbFNoYXBlcz1ULkNsclNoYXBlT25Ib2xpZGF5PVQuQ2xyU2hhcGVU'@;
put 'cmFpbGVyPVQuQ2xyU2hhcGVGZXJyeT1ULkNsclNoYXBlQ2FyYXZhbj1ULkNsclNoYXBlQ2FtcGVydmFuPVQuQ2xyU2hhcGVCb2F0PVQuQ2xyU2hhcGVCaWN5Y2xlPVQuQ2xyU2hhcGVNYXBNYXJrZXI9VC5DbHJTaGFwZUNvbXBhc3M9VC5DbHJTaGFwZU1hcD1ULkNsclNoYXBlQ2FyPVQuQ2xy'@;
put 'U2hhcGVBaXJwbGFuZT1ULkNsclNoYXBlVHJ1Y2s9dm9pZCAwO3ZhciBrPXNlKAovKiEgLi4vdXRpbHMvZGVzY3JpcHRvci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIiksdj1zZSgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJh'@;
put 'dG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpO1QuQ2xyU2hhcGVUcnVjaz0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLDEySDI2VjdhMSwxLDAsMCww'@;
put 'LTEtMUgzQTEsMSwwLDAsMCwyLDdWMjVhMSwxLDAsMCwwLDEsMUg0VjhIMjRWMTkuN2E2LjQ1LDYuNDUsMCwwLDEsMS41Ni0uMmMuMTUsMCwuMjksMCwuNDQsMFYxNGg0YTIsMiwwLDAsMSwyLDJ2MUgyOHYyaDR2NUgyOS42YTQuNTQsNC41NCwwLDAsMC04LjM0LDBIMTQuNDNhNC41LDQuNSww'@;
put 'LDAsMC00LjE3LTIuNzZBNC4zOCw0LjM4LDAsMSwwLDE0LjcyLDI2SDIxYTQuNDksNC40OSwwLDAsMCw4LjkyLDBIMzNhMSwxLDAsMCwwLDEtMVYxNkE0LDQsMCwwLDAsMzAsMTJaTTEwLjI2LDI4YTIuMzgsMi4zOCwwLDEsMSwwLTQuNzUsMi4zOCwyLjM4LDAsMSwxLDAsNC43NVptMTUuMTcs'@;
put 'MGEyLjM4LDIuMzgsMCwxLDEsMi41LTIuMzdBMi40NCwyLjQ0LDAsMCwxLDI1LjQzLDI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMwLDEySDI2VjdhMSwxLDAsMCwwLTEtMUgzQTEsMSwwLDAsMCwyLDdWMjVhMSwx'@;
put 'LDAsMCwwLDEsMUg0VjhIMjRWMjEuNDlBNC40NSw0LjQ1LDAsMCwwLDIxLjI1LDI0SDE0LjQzYTQuNSw0LjUsMCwwLDAtNC4xNy0yLjc2QTQuMzgsNC4zOCwwLDEsMCwxNC43MiwyNkgyMWE0LjQ4LDQuNDgsMCwwLDAsOC45MSwwSDM0VjE2QTQsNCwwLDAsMCwzMCwxMlpNMTAuMjYsMjhhMi4z'@;
put 'OCwyLjM4LDAsMSwxLDAtNC43NSwyLjM4LDIuMzgsMCwxLDEsMCw0Ljc1Wm0xNS4xNywwYTIuMzgsMi4zOCwwLDEsMSwyLjUtMi4zN0EyLjQ0LDIuNDQsMCwwLDEsMjUuNDIsMjhaTTMyLDE3SDI2VjE0aDRhMiwyLDAsMCwxLDIsMloiLz4nKSxULkNsclNoYXBlQWlycGxhbmU9KDAsdi5jbHJJ'@;
put 'Y29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zNS43Nyw4LjE2YTIuNDMsMi40MywwLDAsMC0xLjktMkwyOCw0Ljg3YTQuNSw0LjUsMCwwLDAtMy42NS43OUw3LDE4LjMsMi4xNCwxOC4xQTEuODYsMS44NiwwLDAsMCwuOTEsMjEu'@;
put 'NDFsNSwzLjkzYy42LjczLDEsLjU5LDEwLjkzLTQuODJsLjkzLDkuNDJhMS4zNiwxLjM2LDAsMCwwLC44NSwxLjE4LDEuNDMsMS40MywwLDAsMCwuNTQuMSwxLjU0LDEuNTQsMCwwLDAsMS0uNDFsMi4zOS0yLjE4YTEuNTIsMS41MiwwLDAsMCwuNDYtLjgzTDI1LjIsMTUuOWMzLjU3LTIsNi45'@;
put 'NS0zLjg4LDkuMzYtNS4yNUEyLjQzLDIuNDMsMCwwLDAsMzUuNzcsOC4xNlptLTIuMi43NWMtMi41LDEuNDItNiwzLjQxLTkuNzYsNS40N2wtLjQxLjIzTDIxLjA3LDI3LjI4bC0xLjQ3LDEuMzRMMTguNSwxNy4zMiwxNy4xNywxOEMxMCwyMiw3LjYxLDIzLjE2LDYuNzksMjMuNTJsLTQuMy0z'@;
put 'LjQxLDUuMDguMjIsMTgtMTMuMDZhMi41MSwyLjUxLDAsMCwxLDItLjQ1bDUuODUsMS4yNmEuNDMuNDMsMCwwLDEsLjM1LjM3QS40Mi40MiwwLDAsMSwzMy41Nyw4LjkxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9'@;
put 'Ik03LDEyLjU0bDMuNTYsMSwxLjY0LTEuMTktNC0xLjE2TDEwLDEwLjA5bDUuNDctLjE2LDIuMy0xLjY3TDEwLDguNWExLjI1LDEuMjUsMCwwLDAtLjcuMTdMNi42NywxMC4yQTEuMjgsMS4yOCwwLDAsMCw3LDEyLjU0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk'@;
put 'IGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTYuMjUsMTEuNSwxMiwxMy4xNmw2LjMyLTQuNTktOS4wNy4yNkEuNTIuNTIsMCwwLDAsOSw4LjkxTDYuMTMsMTAuNTZBLjUxLjUxLDAsMCwwLDYuMjUsMTEuNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1z'@;
put 'b2xpZC1wYXRoLTIiIGQ9Ik0zNC41Miw2LjM2LDI4LjIyLDVhMy43OCwzLjc4LDAsMCwwLTMuMDcuNjdMNi4xMiwxOS41bC00LjU3LS4yYTEuMjUsMS4yNSwwLDAsMC0uODMsMi4yMmw0LjQ1LDMuNTNhLjU1LjU1LDAsMCwwLC41My4wOWMxLjI3LS40OSw2LTMsMTEuNTktNi4wN2wxLjEyLDEx'@;
put 'LjUxYS41NS41NSwwLDAsMCwuOS4zN2wyLjUtMi4wOGEuNzYuNzYsMCwwLDAsLjI2LS40NWwyLjM3LTEzLjI5YzQtMi4yMiw3LjgyLTQuMzcsMTAuNTEtNS44OUExLjU1LDEuNTUsMCwwLDAsMzQuNTIsNi4zNloiLz4nKSxULkNsclNoYXBlQ2FyPSgwLHYuY2xySWNvblNWRykoJzxyZWN0IGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSIxNSIgeT0iMTciIHdpZHRoPSIzIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI2LjQ1LDE0LjE3QTIyLjEs'@;
put 'MjIuMSwwLDAsMCwxOS4zOCw3YTkuNjQsOS42NCwwLDAsMC05LS43LDguNiw4LjYsMCwwLDAtNC44Miw2LjRjLS4wOC40Ny0uMTQuOTItLjIsMS4zNkE0LDQsMCwwLDAsMiwxOHY2LjEzYTIsMiwwLDAsMCwyLDJWMjBINFYxOGEyLDIsMCwwLDEsMi0ySDI0LjczQTcuMjgsNy4yOCwwLDAsMSwz'@;
put 'MiwyMy4yN1YyNGgtMmE0LjUzLDQuNTMsMCwxLDAsLjMzLDJIMzJhMiwyLDAsMCwwLDItMnYtLjczQTkuMjgsOS4yOCwwLDAsMCwyNi40NSwxNC4xN1pNMTEsMTRINi45M2MwLS4zMS4wOS0uNjMuMTUtMUE2LjUyLDYuNTIsMCwwLDEsMTEsOGgwWm0yLDBWNy41OGE4LjE3LDguMTcsMCwwLDEs'@;
put 'NS4zNiwxLjE2QTE5LDE5LDAsMCwxLDIzLjksMTRaTTI1LjgsMjguMzhhMi41LDIuNSwwLDEsMSwyLjUtMi41QTIuNSwyLjUsMCwwLDEsMjUuOCwyOC4zOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE0'@;
put 'LjE3LDI0YTQuNTMsNC41MywwLDEsMCwuMzMsMmg1LjNjMC0uMDgsMC0uMTcsMC0uMjVBNiw2LDAsMCwxLDIwLDI0Wk0xMCwyOC4zOGEyLjUsMi41LDAsMSwxLDIuNS0yLjVBMi41LDIuNSwwLDAsMSwxMCwyOC4zOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjYuODcsMTQuMjhBMjIuMzYsMjIuMzYsMCwwLDAsMTkuNjUsNi45YTkuNjQsOS42NCwwLDAsMC05LS43LDguNiw4LjYsMCwwLDAtNC44Miw2LjRjLS4wOC40OS0uMTUsMS0uMjEsMS40aC0xQTIuNTksMi41OSwwLDAsMCwyLDE2LjU5djguNTVh'@;
put 'Ljg2Ljg2LDAsMCwwLC44Ni44Nkg0LjU5YzAtLjEzLDAtLjI2LDAtLjM5YTUuNzcsNS43NywwLDAsMSw3LjcxLTUuNDVsLTEsMWE0LjU2LDQuNTYsMCwwLDAtNC4zNCwxLjU4LDMsMywwLDAsMC0uNjMuOTNBNC41LDQuNSwwLDEsMCwxNC44MiwyNmg1LjQ4YzAtLjEzLDAtLjI2LDAtLjM5QTUu'@;
put 'NzcsNS43NywwLDAsMSwyOCwyMC4xNmwtMSwxYTQuNTYsNC41NiwwLDAsMC00LjM0LDEuNTgsMywzLDAsMCwwLS42My45M0E0LjUsNC41LDAsMSwwLDMwLjUzLDI2aDIuNjFhLjg2Ljg2LDAsMCwwLC44Ni0uODZWMjMuMzZBOS4zOSw5LjM5LDAsMCwwLDI2Ljg3LDE0LjI4Wk0xMiwxNEg4YzAt'@;
put 'LjM1LjEtLjcxLjE2LTEuMDdhNi41Miw2LjUyLDAsMCwxLDMuODctNWgwWk0xMC4zNiwyOC4zNmEyLjUsMi41LDAsMSwxLDIuNS0yLjVBMi41LDIuNSwwLDAsMSwxMC4zNiwyOC4zNlpNMTksMTlIMTZWMTdoM1ptLTYtNVY3LjQ3YTguMTYsOC4xNiwwLDAsMSw1LjQsMS4xNUExOS4xNSwxOS4x'@;
put 'NSwwLDAsMSwyNCwxNFpNMjYuMDYsMjguMzZhMi41LDIuNSwwLDEsMSwyLjUtMi41QTIuNSwyLjUsMCwwLDEsMjYuMDYsMjguMzZaIi8+JyksVC5DbHJTaGFwZU1hcD0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0i'@;
put 'TTMzLjU5LDYuMTlBMSwxLDAsMCwwLDMyLjcsNkwyMy4wOSw5LDEzLjQ2LDQuMTFhMSwxLDAsMCwwLS44NCwwTDIuNjIsOC4yQTEsMSwwLDAsMCwyLDkuMTNWMjkuNjFhMSwxLDAsMCwwLDEuMzguOTJMMTMsMjYuNThsOS41OSw0LjkyYTEsMSwwLDAsMCwuNDYuMTEsMSwxLDAsMCwwLC4zLDBs'@;
put 'MTAtMy4xMmExLDEsMCwwLDAsLjctMVY3QTEsMSwwLDAsMCwzMy41OSw2LjE5Wk0zMiwyNi43NWwtOC4zMiwyLjZWMjcuMDZoLTEuNnYybC04LjQtNC4zMVYyMy4wNmgtMS42djEuNzJMNCwyOC4xMVY5Ljc5bDguMDgtMy4zM1Y4LjgxaDEuNlY2LjQ3bDguNCw0LjN2Mi4xaDEuNlYxMUwzMiw4'@;
put 'LjM2WiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIyMi4wOCIgeT0iMTUuMDYiIHdpZHRoPSIxLjYiIGhlaWdodD0iMy44MSIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSIyMi4wOCIgeT0iMjEuMDYiIHdpZHRoPSIxLjYiIGhlaWdodD0iMy44MSIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxMi4wOCIgeT0iMTEuMDYiIHdpZHRoPSIx'@;
put 'LjYiIGhlaWdodD0iMy44MSIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiB4PSIxMi4wOCIgeT0iMTcuMTMiIHdpZHRoPSIxLjYiIGhlaWdodD0iMy43NSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj'@;
put 'bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMy4zMSw3LjM1LDI1LDkuOTRWMTRIMjNWMTAuMjlMMTQsNS42OFY5SDEyVjUuMjdsLTkuNjcsNEEuNTMuNTMsMCwwLDAsMiw5Ljc1VjMwLjQ1YS41My41MywwLDAsMCwuNzQuNDlMMTIsMjcuMTJWMjNoMnY0LjUzbDksNC42MVYy'@;
put 'OGgydjMuNzlsOC42My0yLjdhLjUzLjUzLDAsMCwwLC4zNy0uNTFWNy44NkEuNTMuNTMsMCwwLDAsMzMuMzEsNy4zNVpNMTQsMjFIMTJWMTdoMlptMC02SDEyVjExaDJaTTI1LDI2SDIzVjIyaDJabTAtNkgyM1YxNmgyWiIvPicpLFQuQ2xyU2hhcGVDb21wYXNzPSgwLHYuY2xySWNvblNWRyko'@;
put 'JzxwYXRoIGQ9Ik0yMC44MiwxNS4zMWgwTDEwLjQ2LDljLS40Ni0uMjYtMS4xMS4zNy0uODYuODRsNi4xNSwxMC41NiwxMC41Niw2LjE1YS42Ni42NiwwLDAsMCwuODQtLjg2Wm0tNCw0LDMtMyw0LjU1LDcuNDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg'@;
put 'Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTEsMjkuOTVWMjkuNTNIMTd2Mi40MkExNCwxNCwwLDAsMSw0LjA1LDE5SDYuNDdWMTdINC4wNUExNCwxNCwwLDAsMSwxNyw0LjA1VjYuNDdoMlY0LjA1QTE0LDE0LDAsMCwx'@;
put 'LDMxLjk1LDE3SDI5LjUzdjJoMi40MkExNCwxNCwwLDAsMSwxOSwzMS45NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNNi40NywxOUg0'@;
put 'LjA1YzAtLjMzLS4wNS0uNjYtLjA1LTFzMC0uNjcuMDUtMUg2LjQ3Wk0xNyw0LjA1Yy4zMywwLC42Ni0uMDUsMS0uMDVzLjY3LDAsMSwuMDVWNi40N0gxN1ptMiwyNy45Yy0uMzMsMC0uNjYuMDUtMSwuMDVzLS42NywwLTEtLjA1VjI5LjUzaDJabTgtNS41OGEuNTkuNTksMCwwLDEtLjY5LjE2'@;
put 'TDE1Ljc1LDIwLjM4LDkuNiw5LjgyYy0uMjUtLjQ3LjM5LTEuMS44Ni0uODRsMTAuMzcsNi4zM2gwbDYuMzMsMTAuMzdBLjU5LjU5LDAsMCwxLDI3LDI2LjM3Wk0yOS41MywxOVYxN2gyLjQyYzAsLjMzLjA1LjY2LjA1LDFzMCwuNjctLjA1LDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt'@;
put 'c29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxNi43NyAxOS4zNSAyNC4zNSAyMy43NyAxOS44IDE2LjMzIDE2Ljc3IDE5LjM1IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLFQuQ2xyU2hhcGVNYXBNYXJrZXI9KDAsdi5j'@;
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 'IjYiIHI9IjUiLz4nKSxULkNsclNoYXBlQmljeWNsZT0oMCx2LmNsckljb25TVkcpKCc8cGF0aCBkPSJNOC41LDI5LjY1QTYuNTEsNi41MSwwLDAsMSwyLDIzLjE1YTYuMzksNi4zOSwwLDAsMSw2LjUtNi4zNkE2LjM5LDYuMzksMCwwLDEsMTUsMjMuMTUsNi41MSw2LjUxLDAsMCwxLDguNSwy'@;
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 'MiwxLjMsMC41LDEuOCwwLjhsMS42LTMuMmgxMEwyNC43LDE2Ljd6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01IiAvPicpLFQuQ2xyU2hhcGVCb2F0PSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOS4xLDI3LjFDMjgsMjcsMjYuOSwyNy40LDI2LDI4LjJjLTEu'@;
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 'MmMwLjcsMCwxLjMsMC40LDEuNywxTDI2LDE1LjhjMC42LDEsMC4yLDIuMi0wLjcsMi43QzI1LDE4LjcsMjQuNiwxOC44LDI0LjMsMTguOVxuXHRMMjQuMywxOC45eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz4nKSxULkNsclNoYXBlQ2FtcGVydmFuPSgwLHYu'@;
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+JyksVC5DbHJTaGFwZUNhcmF2YW49KDAs'@;
put 'di5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEzLjUsMjFDMTEsMjEsOSwyMyw5LDI1LjVzMiw0LjUsNC41LDQuNWMyLjUsMCw0LjUtMiw0LjUtNC41QzE4LDIzLDE2LDIxLDEzLjUsMjF6IE0xMy41LDI4Yy0xLjQsMC0yLjUtMS4xLTIuNS0yLjVcblx0XHRzMS4xLTIuNSwyLjUtMi41czIuNSwx'@;
put 'LjEsMi41LDIuNVMxNC45LDI4LDEzLjUsMjh6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMsMjRoLTJ2LTcuNWMwLTAuNS0wLjEtMS0wLjQtMS41bC00LjItNy41Yy0wLjUtMS0xLjUtMS41LTIuNi0xLjVINUMzLjMsNiwyLDcuMywy'@;
put 'LDl2MTRjMCwxLjcsMS4zLDMsMywzaDJ2LTJINVxuXHRcdGMtMC42LDAtMS0wLjQtMS0xVjljMC0wLjYsMC40LTEsMS0xaDE4LjhjMC40LDAsMC43LDAuMiwwLjksMC41bDQuMiw3LjVjMC4xLDAuMSwwLjEsMC4zLDAuMSwwLjVWMjRoLTRWMTJoLTd2OGgydi02aDN2MTBoLTN2MmgxM1xuXHRc'@;
put 'dGMwLjYsMCwxLTAuNCwxLTFTMzMuNiwyNCwzMywyNHoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNiwxMkg3djZoOVYxMnogTTE0LDE2SDl2LTJoNVYxNnoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0z'@;
put 'IiAvPjxwYXRoIGQ9Ik0xMy41LDMwQzExLDMwLDksMjgsOSwyNS41czItNC41LDQuNS00LjVzNC41LDIsNC41LDQuNUMxOCwyOCwxNiwzMCwxMy41LDMweiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMsMjRoLTJ2LTcuNWMwLTAuNS0wLjEt'@;
put 'MS0wLjQtMS41bC00LjItNy41Yy0wLjUtMS0xLjUtMS41LTIuNi0xLjVINUMzLjMsNiwyLDcuMywyLDl2MTRjMCwxLjcsMS4zLDMsMywzaDJ2LTJINVxuXHRjLTAuNiwwLTEtMC40LTEtMVY5YzAtMC42LDAuNC0xLDEtMWgxOC44YzAuNCwwLDAuNywwLjIsMC45LDAuNWw0LjIsNy41YzAuMSww'@;
put 'LjEsMC4xLDAuMywwLjEsMC41VjI0aC00VjEyaC03djhoMnYtNmgzdjEwaC0zdjJoMTNcblx0YzAuNiwwLDEtMC40LDEtMVMzMy42LDI0LDMzLDI0eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMTYsMThIN3YtNmg5VjE4eiIgY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxULkNsclNoYXBlRmVycnk9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LDI1LjFjLTEuMiwwLTIuMywwLjQtMy4zLDEuMWMwLDAsMCwwLDAsMGMtMS4xLDEuMS0zLDEuMS00LjEsMGMtMC45LTAuOC0yLjEtMS4yLTMuMy0x'@;
put 'LjJjLTEuMiwwLTIuMywwLjQtMy4yLDEuMlxuXHRcdGMtMS4yLDEuMS0zLDEuMS00LjIsMEMxMCwyNS40LDguOCwyNSw3LjYsMjVjLTEuMiwwLTIuNCwwLjQtMy40LDEuMUMzLjYsMjYuNywyLjgsMjcsMiwyN3YyYzEuMywwLjEsMi41LTAuNCwzLjQtMS4yXG5cdFx0QzYuMSwyNy4zLDYuOSwy'@;
put 'Nyw3LjcsMjdjMC44LDAsMS41LDAuMywyLjEsMC44YzEuOSwxLjYsNC43LDEuNiw2LjUsMGMwLjYtMC41LDEuMy0wLjgsMi4xLTAuOGMwLjgsMCwxLjUsMC4zLDIuMSwwLjhcblx0XHRjMS45LDEuNiw0LjYsMS42LDYuNSwwYzAuNS0wLjUsMS4zLTAuOCwyLTAuOGMwLjcsMCwxLjUsMC4zLDIs'@;
put 'MC44YzAuOSwwLjcsMiwxLjEsMy4xLDEuMnYtMS45Yy0wLjcsMC0xLjQtMC4zLTEuOS0wLjlcblx0XHRDMzEuMywyNS40LDMwLjEsMjUsMjksMjUuMXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik01LjksMjMuMlYyMEgzMmwtMy41LDNo'@;
put 'MC4yYzAuOCwwLDEuNiwwLjIsMi4yLDAuNWwyLjUtMi4ybDAuMi0wLjJjMC41LTAuNiwwLjUtMS40LDAuMi0yLjFjLTAuNC0wLjctMS0xLTEuOC0xaC00LjRcblx0XHRMMjIuNSwxMUgxN2MtMS43LDAtMywxLjMtMywzaC0yVjguMUg2djYuMWMtMS4yLDAuNC0yLDEuNS0yLDIuOHYxLjFWMjB2'@;
put 'NC4zbDAuMS0wLjFDNC42LDIzLjcsNS4yLDIzLjQsNS45LDIzLjJ6IE04LDEwaDJ2NEg4VjEwelxuXHRcdCBNNiwxN2MwLTAuNiwwLjQtMSwxLTFoOXYtMmMwLTAuNiwwLjQtMSwxLTFoNWwwLjYsMUgxOHYyaDUuOGwxLjIsMi4xSDZWMTd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjguMiwyNWMtMS4yLDAtMi40LDAuNC0zLjMsMS4yYy0xLjIsMS4xLTMsMS4xLTQuMSwwYy0xLjktMS42LTQuNi0xLjYtNi41LDBjLTEuMiwxLjEtMi45LDEuMS00LjEsMFxuXHRcdGMtMC45LTAuOC0yLTEuMi0zLjItMS4yYy0xLjIsMC0yLjMs'@;
put 'MC40LTMuMiwxLjJDMy40LDI2LjcsMi43LDI3LDIsMjd2MmMxLjEtMC4xLDIuMi0wLjUsMy4xLTEuMkM1LjYsMjcuMyw2LjMsMjcsNywyN1xuXHRcdGMwLjcsMCwxLjUsMC4zLDIsMC44YzEuOSwxLjYsNC43LDEuNiw2LjYsMGMwLjYtMC41LDEuMy0wLjgsMi4xLTAuOGMwLjgsMCwxLjUsMC4z'@;
put 'LDIuMSwwLjhjMS45LDEuNiw0LjcsMS42LDYuNSwwXG5cdFx0YzAuNi0wLjUsMS4zLTAuOCwyLjEtMC44YzAuOCwwLDEuNiwwLjMsMi4xLDAuOGMwLjksMC44LDIuMiwxLjMsMy40LDEuMnYtMmMtMC44LDAtMS42LTAuMy0yLjItMC44QzMwLjcsMjUuNCwyOS41LDI1LDI4LjIsMjV6IiBjbGFz'@;
put 'cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik01LjgsMjMuMnYtMy4zaDI2LjFMMjguNCwyM2gwLjJjMC44LDAsMS42LDAuMiwyLjIsMC41bDIuNS0yLjJsMC4xLTAuMmMwLjctMC45LDAuNS0yLjEtMC40LTIuOGMtMC4zLTAuMy0wLjgtMC40LTEuMi0wLjRc'@;
put 'blx0XHRoLTQuMWwtNS40LTdoLTUuNWMtMS43LDAtMywxLjMtMywzaC0yVjhINnY2LjJjLTEuMiwwLjQtMi4xLDEuNS0yLjEsMi44bDAsNy4ybDAuMSwwQzQuNSwyMy43LDUuMSwyMy40LDUuOCwyMy4yeiBNMTcuOSwxNGg0LjJcblx0XHRsMS40LDJoLTUuN1YxNHogTTcuOSwxMGgydjRoLTJW'@;
put 'MTB6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLFQuQ2xyU2hhcGVUcmFpbGVyPSgwLHYuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNSwxOS4yYy0zLjIsMC01LjgsMi42LTUuOCw1LjhzMi42LDUuOCw1LjgsNS44czUuOC0yLjYsNS44LTUuOFMxOC4yLDE5'@;
put 'LjIsMTUsMTkuMnogTTE1LDI5LjJjLTIuMywwLTQuMi0xLjktNC4yLTQuMlxuXHRcdHMxLjktNC4yLDQuMi00LjJzNC4yLDEuOSw0LjIsNC4yUzE3LjMsMjkuMiwxNSwyOS4yeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHJlY3QgeD0iMTQiIHk9IjI0'@;
put 'IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzMsOUgydjEzLjFjMCwwLDAsMCwwLDBDMiwyNC4zLDMuNywyNiw1LjksMjZIN3YtMkg1LjljLTEsMC0xLjgtMC44LTEuOS0xLjlWMTVoMjJ2Ny4xYzAs'@;
put 'MS0wLjgsMS44LTEuOSwxLjlIMjN2MmgxLjFcblx0XHRjMCwwLDAsMCwwLDBjMi4xLDAsMy44LTEuNywzLjgtMy45VjExaDVjMC42LDAsMS0wLjQsMS0xUzMzLjYsOSwzMyw5eiBNMjYsMTNINHYtMmgyMlYxM3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAv'@;
put 'PjxwYXRoIGQ9Ik0zMyw5SDJ2MTMuMWMwLDAsMCwwLDAsMEMyLDI0LjMsMy43LDI2LDUuOSwyNkg3di0ySDUuOWMtMSwwLTEuOC0wLjgtMS45LTEuOVYxNWgyMnY3LjFjMCwxLTAuOCwxLjgtMS45LDEuOUgyM3YyaDEuMVxuXHRjMCwwLDAsMCwwLDBjMi4xLDAsMy44LTEuNywzLjgtMy45VjEx'@;
put 'aDVjMC42LDAsMS0wLjQsMS0xUzMzLjYsOSwzMyw5eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMTUsMTkuMmMtMy4yLDAtNS44LDIuNi01LjgsNS44czIuNiw1LjgsNS44LDUuOHM1LjgtMi42LDUuOC01LjhsMCwwQzIwLjgsMjEuOCwxOC4y'@;
put 'LDE5LjIsMTUsMTkuMnogTTE2LDI2aC0ydi0yaDJWMjZ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLFQuQ2xyU2hhcGVPbkhvbGlkYXk9KDAsdi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LjA4LDIuMzRjLTguODIsMC0xNiw2LjI4LTE2LDE0czcuMTgs'@;
put 'MTQsMTYsMTRBMTcuOTEsMTcuOTEsMCwwLDAsMjMsMjkuNjZsNS41MywzLjUyYTEsMSwwLDAsMCwxLjM4LS4zLDEsMSwwLDAsMCwuMTYtLjU0VjI1LjYxYTEzLDEzLDAsMCwwLDQtOS4yN0MzNC4wOCw4LjYyLDI2LjksMi4zNCwxOC4wOCwyLjM0Wk0yOC4zNywyNC40NWExLDEsMCwwLDAtLjMy'@;
put 'LjczdjUuMzRsLTQuMzgtMi43OWExLDEsMCwwLDAtLjgzLS4xMSwxNiwxNiwwLDAsMS00Ljc2LjcyYy03LjcyLDAtMTQtNS4zOC0xNC0xMnM2LjI4LTEyLDE0LTEyLDE0LDUuMzgsMTQsMTJBMTEuMSwxMS4xLDAsMCwxLDI4LjM3LDI0LjQ1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTMxLjEsMTUuODIsMzEsMTUuNjcsMjguNSwxMy40NGEzLjI1LDMuMjUsMCwwLDAtMi4zOS0uODRsLTUuMzguMzQtMy41OS0zYS44MS44MSwwLDAsMC0uNTItLjE5SDEzLjU2YS43OC43OCwwLDAsMC0uNjkuNC43Ny43NywwLDAsMCwwLC43'@;
put 'OWwxLjM2LDIuNDQtNC43MS4yOSwxLjMxLDEuNTIsMTUuMzktMWExLjY1LDEuNjUsMCwwLDEsMS4yMi40M2wyLjM2LDIuMTNhLjExLjExLDAsMCwxLDAsLjA3YzAsLjA2LS4wOS4wNS0uMS4wNkgyMS44MmwtLjM1LjM3LTUuMTksNS41M0gxNC42NGwyLjczLTUuOUg4LjU0TDcuMTMsMTQuMTYs'@;
put 'Ni41MSwxM2EuOC44LDAsMCwwLTEtLjJBLjgxLjgxLDAsMCwwLDUuMiwxMy45bDIsMy45NGExLjIxLDEuMjEsMCwwLDAsMS4wOC42NWg2LjU3bC0xLjk0LDQuMThBMS4yLDEuMiwwLDAsMCwxMywyMy44M2ExLjIyLDEuMjIsMCwwLDAsMSwuNTZoMi40M2ExLjE3LDEuMTcsMCwwLDAsLjg4LS4z'@;
put 'OWw1LjE4LTUuNTFoNy4xNmExLjY1LDEuNjUsMCwwLDAsMS41Mi0uOTFBMS43NCwxLjc0LDAsMCwwLDMxLjEsMTUuODJaTTE0LjkyLDExLjMxaDEuNDFsMi4wOSwxLjc3TDE2LDEzLjIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgXG4gIDxwYXRo'@;
put 'IGQ9Ik0xOCwyLjVjLTguODIsMC0xNiw2LjI4LTE2LDE0czcuMTgsMTQsMTYsMTRhMTcuOTEsMTcuOTEsMCwwLDAsNC44OC0uNjhsNS41MywzLjUyYTEsMSwwLDAsMCwxLjM4LS4zQTEsMSwwLDAsMCwzMCwzMi41VjI1Ljc3YTEzLDEzLDAsMCwwLDQtOS4yN0MzNCw4Ljc4LDI2LjgyLDIuNSwx'@;
put 'OCwyLjVaTTI5Ljg0LDE4SDIxLjUxYS40Mi40MiwwLDAsMC0uMy4xM2wtNS4zLDUuNjRhLjM5LjM5LDAsMCwxLS4yOS4xM0gxMy4xOWEuNDEuNDEsMCwwLDEtLjM3LS41OGwyLjQ3LTUuMzJINy40NmEuNDIuNDIsMCwwLDEtLjM2LS4yMmwtMi43LTVINi4yNGEuNTMuNTMsMCwwLDEsLjM5LjE4'@;
put 'bDEuNTYsMS42OWEuMzguMzgsMCwwLDAsLjMzLjE0bDYuMTgtLjM4LTItMy41NWgyLjg5YS40Ny40NywwLDAsMSwuMzEuMTFMMTkuNjMsMTRsNi42OS0uMzVhMi40NCwyLjQ0LDAsMCwxLDEuODEuNjNsMi40NywyLjIzQS45Mi45MiwwLDAsMSwyOS44NCwxOFoiIGNsYXNzPSJjbHItaS1zb2xp'@;
put 'ZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgJyksVC5UcmF2ZWxTaGFwZXM9e3RydWNrOlQuQ2xyU2hhcGVUcnVjayxhaXJwbGFuZTpULkNsclNoYXBlQWlycGxhbmUsY2FyOlQuQ2xyU2hhcGVDYXIsbWFwOlQuQ2xyU2hhcGVNYXAsY29tcGFzczpULkNsclNoYXBlQ29tcGFzcywibWFwLW1h'@;
put 'cmtlciI6VC5DbHJTaGFwZU1hcE1hcmtlcixiaWN5Y2xlOlQuQ2xyU2hhcGVCaWN5Y2xlLGJvYXQ6VC5DbHJTaGFwZUJvYXQsY2FtcGVydmFuOlQuQ2xyU2hhcGVDYW1wZXJ2YW4sY2FyYXZhbjpULkNsclNoYXBlQ2FyYXZhbixmZXJyeTpULkNsclNoYXBlRmVycnksdHJhaWxlcjpULkNsclNo'@;
put 'YXBlVHJhaWxlciwib24taG9saWRheSI6VC5DbHJTaGFwZU9uSG9saWRheX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KFQuVHJhdmVsU2hhcGVzLCJwbGFuZSIsKDAsay5kZXNjcmlwdG9yQ29uZmlnKShULlRyYXZlbFNoYXBlcy5haXJwbGFuZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShULlRy'@;
put 'YXZlbFNoYXBlcywiYXV0byIsKDAsay5kZXNjcmlwdG9yQ29uZmlnKShULlRyYXZlbFNoYXBlcy5jYXIpKSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoVC5UcmF2ZWxTaGFwZXMpfSwiLi9w'@;
put 'cm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3Jp'@;
put 'cHRvci1jb25maWcudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oemUsVCxzZSl7InVzZSBzdHJpY3QiO09iamVjdC5k'@;
put 'ZWZpbmVQcm9wZXJ0eShULCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxULmRlc2NyaXB0b3JDb25maWc9dm9pZCAwLFQuZGVzY3JpcHRvckNvbmZpZz1mdW5jdGlvbiBrKHYpe3JldHVybntlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx2YWx1ZTp2fX19LCIuL3By'@;
put 'b2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFn'@;
put 'LWdlbmVyYXRvci50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbih6ZSxULHNlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRl'@;
put 'ZmluZVByb3BlcnR5KFQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFQuY2xySWNvblNWRz12b2lkIDA7VC5jbHJJY29uU1ZHPWZ1bmN0aW9uIEgoQil7dmFyIEw9IiI7cmV0dXJuIEIuaW5kZXhPZigiLS1iYWRnZWQiKT4tMSYmKEwrPSJjYW4tYmFkZ2UgIiksQi5pbmRleE9mKCItLWFsZXJ0'@;
put 'ZWQiKT4tMSYmKEwrPSJjYW4tYWxlcnQgIiksQi5pbmRleE9mKCJjbHItaS1zb2xpZCIpPi0xJiYoTCs9Imhhcy1zb2xpZCAiKSwoTD8nPHN2ZyB2ZXJzaW9uPSIxLjEiIGNsYXNzPSInK0wrJyIgdmlld0JveD0iMCAwIDM2IDM2IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCBtZWV0'@;
put 'IlxuICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIGZvY3VzYWJsZT0iZmFsc2UiIHJvbGU9ImltZyI+JzonPHN2ZyB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAzNiAzNiIgcHJlc2VydmVB'@;
put 'c3BlY3RSYXRpbz0ieE1pZFlNaWQgbWVldCJcbiAgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmb2N1c2FibGU9ImZhbHNlIiByb2xlPSJpbWciPicpK0IrIjwvc3ZnPiJ9fX0pfSw2MTQ5NToo'@;
put 'V2UsemUsVCk9PnsidXNlIHN0cmljdCI7dmFyIHNlPXt9O1QucihzZSksVC5kKHNlLHtjYW5jZWxBbmltYXRpb25GcmFtZTooKT0+TFMsZ2V0Q29tcGFyaXNvbkZ1bmN0aW9uOigpPT5WY2UsaGFzQ2FwdGlvblByb2JsZW06KCk9PmlZLGlzQ2xhc3NMaXN0U3VwcG9ydGVkOigpPT5GY2UsaXNH'@;
put 'ZXRDb21wdXRlZFN0eWxlU3VwcG9ydGVkOigpPT5OY2UsaXNQYXNzaXZlRXZlbnRTdXBwb3J0ZWQ6KCk9PkJjZSxpc1RleHRDb250ZW50U3VwcG9ydGVkOigpPT5IY2UsaXNUb3VjaFN1cHBvcnRlZDooKT0+blkscmVxdWVzdEFuaW1hdGlvbkZyYW1lOigpPT5CSX0pO3ZhciBrPXt9O1Qucihr'@;
put 'KSxULmQoayx7YXJyYXlBdmc6KCk9PllXZSxhcnJheUVhY2g6KCk9PlJuLGFycmF5RmlsdGVyOigpPT5EMSxhcnJheUZsYXR0ZW46KCk9PlVjZSxhcnJheU1hcDooKT0+aGEsYXJyYXlNYXg6KCk9PlVXZSxhcnJheU1pbjooKT0+WldlLGFycmF5UmVkdWNlOigpPT5QcyxhcnJheVN1bTooKT0+'@;
put 'emNlLGFycmF5VW5pcXVlOigpPT5hWSxleHRlbmRBcnJheTooKT0+b1ksZ2V0RGlmZmVyZW5jZU9mQXJyYXlzOigpPT5sWSxnZXRJbnRlcnNlY3Rpb25PZkFycmF5czooKT0+V1dlLGdldFVuaW9uT2ZBcnJheXM6KCk9PkdXZSxwaXZvdDooKT0+RlMsc3RyaW5nVG9BcnJheTooKT0+c1ksdG8y'@;
put 'ZEFycmF5OigpPT5qY2V9KTt2YXIgdj17fTtULnIodiksVC5kKHYse2Nsb25lOigpPT5lMCxjcmVhdGVPYmplY3RQcm9wTGlzdGVuZXI6KCk9Pmc1LGRlZXBDbG9uZTooKT0+eGMsZGVlcEV4dGVuZDooKT0+SFMsZGVlcE9iamVjdFNpemU6KCk9PlVJLGRlZmluZUdldHRlcjooKT0+SGgsZHVj'@;
put 'a1NjaGVtYTooKT0+UDcsZXh0ZW5kOigpPT5ydSxnZXRQcm9wZXJ0eTooKT0+WWNlLGhhc093blByb3BlcnR5OigpPT5Tcyxpbmhlcml0OigpPT5mMyxpc09iamVjdDooKT0+cGEsaXNPYmplY3RFcXVhbDooKT0+akksbWl4aW46KCk9PlRsLG9iamVjdEVhY2g6KCk9Pm1hLHNldFByb3BlcnR5'@;
put 'OigpPT56SX0pO3ZhciBoZT17fTtULnIoaGUpLFQuZChoZSx7aXNDaHJvbWU6KCk9PnVZLGlzQ2hyb21lV2ViS2l0OigpPT4kY2UsaXNFZGdlOigpPT5YY2UsaXNFZGdlV2ViS2l0OigpPT5xV2UsaXNGaXJlZm94OigpPT5aSSxpc0ZpcmVmb3hXZWJLaXQ6KCk9PktjZSxpc0lFOigpPT5KY2Us'@;
put 'aXNJRTk6KCk9PlFjZSxpc0lPUzooKT0+Y1ksaXNJcGFkT1M6KCk9PmZZLGlzTGludXhPUzooKT0+SldlLGlzTVNCcm93c2VyOigpPT5YV2UsaXNNYWNPUzooKT0+WUksaXNNb2JpbGVCcm93c2VyOigpPT5QZCxpc1NhZmFyaTooKT0+cWNlLGlzV2luZG93c09TOigpPT5kWSxzZXRCcm93c2Vy'@;
put 'TWV0YTooKT0+V2NlLHNldFBsYXRmb3JtTWV0YTooKT0+R2NlfSk7dmFyIEg9e307VC5yKEgpLFQuZChILHtfaW5qZWN0UHJvZHVjdEluZm86KCk9PmYwZSxpc0RlZmluZWQ6KCk9PmlvLGlzRW1wdHk6KCk9Pnd1LGlzUmVnRXhwOigpPT5hMGUsaXNVbmRlZmluZWQ6KCk9PkxsLHN0cmluZ2lm'@;
put 'eTooKT0+TXN9KTt2YXIgQj17fTtULnIoQiksVC5kKEIse2VxdWFsc0lnbm9yZUNhc2U6KCk9PnJHZSxpc1BlcmNlbnRWYWx1ZTooKT0+Z1kscmFuZG9tU3RyaW5nOigpPT5tWSxzYW5pdGl6ZTooKT0+R0ksc3RyaXBUYWdzOigpPT55WSxzdWJzdGl0dXRlOigpPT52WSx0b1VwcGVyQ2FzZUZp'@;
put 'cnN0OigpPT5BY30pO3ZhciBMPXt9O1QucihMKSxULmQoTCx7SFRNTF9DSEFSQUNURVJTOigpPT52MGUsYWRkQ2xhc3M6KCk9PmdpLGFkZEV2ZW50OigpPT5jR2UsY2xlYXJUZXh0U2VsZWN0aW9uOigpPT5FWSxjbG9zZXN0OigpPT54NCxjbG9zZXN0RG93bjooKT0+elMsZW1wdHk6KCk9PkZk'@;
put 'LGZhc3RJbm5lckhUTUw6KCk9PnY1LGZhc3RJbm5lclRleHQ6KCk9Pk80LGdldENhcmV0UG9zaXRpb246KCk9PmtZLGdldENvbXB1dGVkU3R5bGU6KCk9PkQ0LGdldENzc1RyYW5zZm9ybTooKT0+aEdlLGdldEZyYW1lRWxlbWVudDooKT0+cDBlLGdldFBhcmVudDooKT0+aDBlLGdldFBhcmVu'@;
put 'dFdpbmRvdzooKT0+alMsZ2V0U2Nyb2xsTGVmdDooKT0+S0ksZ2V0U2Nyb2xsVG9wOigpPT5VUyxnZXRTY3JvbGxhYmxlRWxlbWVudDooKT0+WlMsZ2V0U2Nyb2xsYmFyV2lkdGg6KCk9Pk51LGdldFNlbGVjdGlvbkVuZFBvc2l0aW9uOigpPT55MGUsZ2V0U2VsZWN0aW9uVGV4dDooKT0+YjBl'@;
put 'LGdldFN0eWxlOigpPT5CNyxnZXRUcmltbWluZ0NvbnRhaW5lcjooKT0+YjUsZ2V0V2luZG93U2Nyb2xsTGVmdDooKT0+eTUsZ2V0V2luZG93U2Nyb2xsVG9wOigpPT5WNyxoYXNBY2Nlc3NUb1BhcmVudFdpbmRvdzooKT0+c0dlLGhhc0NsYXNzOigpPT5ZbyxoYXNIb3Jpem9udGFsU2Nyb2xs'@;
put 'YmFyOigpPT53MGUsaGFzVmVydGljYWxTY3JvbGxiYXI6KCk9Pl8wZSxpbmRleDooKT0+bTBlLGlubmVySGVpZ2h0OigpPT5kMyxpbm5lcldpZHRoOigpPT5ZUyxpc0NoaWxkT2Y6KCk9PkE0LGlzRGV0YWNoZWQ6KCk9PkFZLGlzSW5wdXQ6KCk9PiRTLGlzT3V0c2lkZUlucHV0OigpPT5YSSxp'@;
put 'c1Zpc2libGU6KCk9Pk43LG1hdGNoZXNDU1NSdWxlczooKT0+dUdlLG9ic2VydmVWaXNpYmlsaXR5Q2hhbmdlT25jZTooKT0+UzBlLG9mZnNldDooKT0+aXUsb3V0ZXJIZWlnaHQ6KCk9PmNzLG91dGVyV2lkdGg6KCk9PlNsLG92ZXJsYXlDb250YWluc0VsZW1lbnQ6KCk9PlQ0LHJlbW92ZUNs'@;
put 'YXNzOigpPT5KbyxyZW1vdmVFdmVudDooKT0+ZkdlLHJlbW92ZVRleHROb2RlczooKT0+TVkscmVzZXRDc3NUcmFuc2Zvcm06KCk9PkdTLHNlbGVjdEVsZW1lbnRJZkFsbG93ZWQ6KCk9PkMwZSxzZXRDYXJldFBvc2l0aW9uOigpPT5XUyxzZXRPdmVybGF5UG9zaXRpb246KCk9PnFJfSk7dmFy'@;
put 'IEs9e307VC5yKEspLFQuZChLLHtjdXJyeTooKT0+azBlLGN1cnJ5UmlnaHQ6KCk9PmdHZSxkZWJvdW5jZTooKT0+VFksZmFzdENhbGw6KCk9PkpJLGlzRnVuY3Rpb246KCk9PlBsLHBhcnRpYWw6KCk9Pk9ZLHBpcGU6KCk9Pm1HZSx0aHJvdHRsZTooKT0+TTBlLHRocm90dGxlQWZ0ZXJIaXRz'@;
put 'OigpPT5wR2V9KTt2YXIgSj17fTtULnIoSiksVC5kKEose0tFWV9DT0RFUzooKT0+aG8saXNDdHJsS2V5OigpPT55R2UsaXNDdHJsTWV0YUtleTooKT0+eDBlLGlzRnVuY3Rpb25LZXk6KCk9PkRZLGlzS2V5OigpPT5qNyxpc1ByaW50YWJsZUNoYXI6KCk9PkUwZX0pO3ZhciBJPXt9O1QucihJ'@;
put 'KSxULmQoSSx7aXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6KCk9Pl81LGlzTGVmdENsaWNrOigpPT5RSSxpc1JpZ2h0Q2xpY2s6KCk9Pkk0LHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjooKT0+SGR9KTt2YXIgUj17fTtULnIoUiksVC5kKFIse19kYXRhVG9IVE1MOigpPT56WSxodG1s'@;
put 'VG9HcmlkU2V0dGluZ3M6KCk9PkIwZSxpbnN0YW5jZVRvSFRNTDooKT0+all9KTt2YXIgRT17fTtULnIoRSksVC5kKEUse2lzTnVtZXJpYzooKT0+dDAsaXNOdW1lcmljTGlrZTooKT0+ajBlLHJhbmdlRWFjaDooKT0+X28scmFuZ2VFYWNoUmV2ZXJzZTooKT0+clIsdmFsdWVBY2NvcmRpbmdQ'@;
put 'ZXJjZW50OigpPT5ZWX0pO3ZhciB6PXt9O1Qucih6KSxULmQoeix7Y291bnRGaXJzdFJvd0tleXM6KCk9PkJXLGNyZWF0ZUVtcHR5U3ByZWFkc2hlZXREYXRhOigpPT5ndHQsY3JlYXRlU3ByZWFkc2hlZXREYXRhOigpPT5wdHQsY3JlYXRlU3ByZWFkc2hlZXRPYmplY3REYXRhOigpPT5tdHQs'@;
put 'ZGF0YVJvd1RvQ2hhbmdlc0FycmF5OigpPT5WVyxpc0FycmF5T2ZBcnJheXM6KCk9PmpmZSxpc0FycmF5T2ZPYmplY3RzOigpPT56ZmUsc3ByZWFkc2hlZXRDb2x1bW5JbmRleDooKT0+aHR0LHNwcmVhZHNoZWV0Q29sdW1uTGFiZWw6KCk9PlZSfSk7dmFyIGo9e307VC5yKGopLFQuZChqLHtD'@;
put 'T05URVhUTUVOVV9JVEVNU19BRERfQ09NTUVOVDooKT0+VEcsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UOigpPT5SRyxDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfQk9UVE9NOigpPT5CRyxDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfQ0VOVEVSOigpPT5QRyxDT05URVhUTUVO'@;
put 'VV9JVEVNU19BTElHTk1FTlRfSlVTVElGWTooKT0+SEcsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0xFRlQ6KCk9PkxHLENPTlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVF9NSURETEU6KCk9PlZHLENPTlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVF9SSUdIVDooKT0+RkcsQ09OVEVYVE1F'@;
put 'TlVfSVRFTVNfQUxJR05NRU5UX1RPUDooKT0+TkcsQ09OVEVYVE1FTlVfSVRFTVNfQk9SREVSUzooKT0+akcsQ09OVEVYVE1FTlVfSVRFTVNfQk9SREVSU19CT1RUT006KCk9PlpHLENPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlNfTEVGVDooKT0+WUcsQ09OVEVYVE1FTlVfSVRFTVNfQk9SREVS'@;
put 'U19SSUdIVDooKT0+VUcsQ09OVEVYVE1FTlVfSVRFTVNfQk9SREVSU19UT1A6KCk9PnpHLENPTlRFWFRNRU5VX0lURU1TX0NMRUFSX0NPTFVNTjooKT0+YkcsQ09OVEVYVE1FTlVfSVRFTVNfQ09QWTooKT0+X0csQ09OVEVYVE1FTlVfSVRFTVNfQ09QWV9DT0xVTU5fSEVBREVSU19PTkxZOigp'@;
put 'PT5TRyxDT05URVhUTUVOVV9JVEVNU19DT1BZX1dJVEhfQ09MVU1OX0dST1VQX0hFQURFUlM6KCk9PkNHLENPTlRFWFRNRU5VX0lURU1TX0NPUFlfV0lUSF9DT0xVTU5fSEVBREVSUzooKT0+d0csQ09OVEVYVE1FTlVfSVRFTVNfQ1VUOigpPT5NRyxDT05URVhUTUVOVV9JVEVNU19FRElUX0NP'@;
put 'TU1FTlQ6KCk9Pk9HLENPTlRFWFRNRU5VX0lURU1TX0ZSRUVaRV9DT0xVTU46KCk9PmtHLENPTlRFWFRNRU5VX0lURU1TX0hJREVfQ09MVU1OOigpPT5LRyxDT05URVhUTUVOVV9JVEVNU19ISURFX1JPVzooKT0+WEcsQ09OVEVYVE1FTlVfSVRFTVNfSU5TRVJUX0xFRlQ6KCk9PmRHLENPTlRF'@;
put 'WFRNRU5VX0lURU1TX0lOU0VSVF9SSUdIVDooKT0+aEcsQ09OVEVYVE1FTlVfSVRFTVNfTUVSR0VfQ0VMTFM6KCk9PnhHLENPTlRFWFRNRU5VX0lURU1TX05FU1RFRF9ST1dTX0RFVEFDSF9DSElMRDooKT0+JEcsQ09OVEVYVE1FTlVfSVRFTVNfTkVTVEVEX1JPV1NfSU5TRVJUX0NISUxEOigp'@;
put 'PT5HRyxDT05URVhUTUVOVV9JVEVNU19OT19JVEVNUzooKT0+dUcsQ09OVEVYVE1FTlVfSVRFTVNfUkVBRF9PTkxZOigpPT55RyxDT05URVhUTUVOVV9JVEVNU19SRUFEX09OTFlfQ09NTUVOVDooKT0+SUcsQ09OVEVYVE1FTlVfSVRFTVNfUkVETzooKT0+dkcsQ09OVEVYVE1FTlVfSVRFTVNf'@;
put 'UkVNT1ZFX0JPUkRFUlM6KCk9PldHLENPTlRFWFRNRU5VX0lURU1TX1JFTU9WRV9DT0xVTU46KCk9Pm1HLENPTlRFWFRNRU5VX0lURU1TX1JFTU9WRV9DT01NRU5UOigpPT5ERyxDT05URVhUTUVOVV9JVEVNU19SRU1PVkVfUk9XOigpPT5wRyxDT05URVhUTUVOVV9JVEVNU19ST1dfQUJPVkU6'@;
put 'KCk9PmNHLENPTlRFWFRNRU5VX0lURU1TX1JPV19CRUxPVzooKT0+ZkcsQ09OVEVYVE1FTlVfSVRFTVNfU0hPV19DT0xVTU46KCk9PnFHLENPTlRFWFRNRU5VX0lURU1TX1NIT1dfUk9XOigpPT5KRyxDT05URVhUTUVOVV9JVEVNU19VTkRPOigpPT5nRyxDT05URVhUTUVOVV9JVEVNU19VTkZS'@;
put 'RUVaRV9DT0xVTU46KCk9PkVHLENPTlRFWFRNRU5VX0lURU1TX1VOTUVSR0VfQ0VMTFM6KCk9PkFHLENPTlRFWFRfTUVOVV9JVEVNU19OQU1FU1BBQ0U6KCk9Pm1kZSxGSUxURVJTX0JVVFRPTlNfQ0FOQ0VMOigpPT5NJCxGSUxURVJTX0JVVFRPTlNfQ0xFQVI6KCk9PkMkLEZJTFRFUlNfQlVU'@;
put 'VE9OU19PSzooKT0+UyQsRklMVEVSU19CVVRUT05TX1BMQUNFSE9MREVSX1NFQVJDSDooKT0+ayQsRklMVEVSU19CVVRUT05TX1BMQUNFSE9MREVSX1NFQ09ORF9WQUxVRTooKT0+eCQsRklMVEVSU19CVVRUT05TX1BMQUNFSE9MREVSX1ZBTFVFOigpPT5FJCxGSUxURVJTX0JVVFRPTlNfU0VM'@;
put 'RUNUX0FMTDooKT0+dyQsRklMVEVSU19DT05ESVRJT05TX0FGVEVSOigpPT5oJCxGSUxURVJTX0NPTkRJVElPTlNfQkVGT1JFOigpPT5wJCxGSUxURVJTX0NPTkRJVElPTlNfQkVHSU5TX1dJVEg6KCk9PnIkLEZJTFRFUlNfQ09ORElUSU9OU19CRVRXRUVOOigpPT5mJCxGSUxURVJTX0NPTkRJ'@;
put 'VElPTlNfQllfVkFMVUU6KCk9PkFydCxGSUxURVJTX0NPTkRJVElPTlNfQ09OVEFJTlM6KCk9Pm8kLEZJTFRFUlNfQ09ORElUSU9OU19FTVBUWTooKT0+UUcsRklMVEVSU19DT05ESVRJT05TX0VORFNfV0lUSDooKT0+aSQsRklMVEVSU19DT05ESVRJT05TX0VRVUFMOigpPT50JCxGSUxURVJT'@;
put 'X0NPTkRJVElPTlNfR1JFQVRFUl9USEFOOigpPT5sJCxGSUxURVJTX0NPTkRJVElPTlNfR1JFQVRFUl9USEFOX09SX0VRVUFMOigpPT5zJCxGSUxURVJTX0NPTkRJVElPTlNfTEVTU19USEFOOigpPT51JCxGSUxURVJTX0NPTkRJVElPTlNfTEVTU19USEFOX09SX0VRVUFMOigpPT5jJCxGSUxU'@;
put 'RVJTX0NPTkRJVElPTlNfTkFNRVNQQUNFOigpPT5rcyxGSUxURVJTX0NPTkRJVElPTlNfTk9ORTooKT0+cVIsRklMVEVSU19DT05ESVRJT05TX05PVF9CRVRXRUVOOigpPT5kJCxGSUxURVJTX0NPTkRJVElPTlNfTk9UX0NPTlRBSU46KCk9PmEkLEZJTFRFUlNfQ09ORElUSU9OU19OT1RfRU1Q'@;
put 'VFk6KCk9PmUkLEZJTFRFUlNfQ09ORElUSU9OU19OT1RfRVFVQUw6KCk9Pm4kLEZJTFRFUlNfQ09ORElUSU9OU19UT0RBWTooKT0+bSQsRklMVEVSU19DT05ESVRJT05TX1RPTU9SUk9XOigpPT5nJCxGSUxURVJTX0NPTkRJVElPTlNfWUVTVEVSREFZOigpPT52JCxGSUxURVJTX0RJVlNfRklM'@;
put 'VEVSX0JZX0NPTkRJVElPTjooKT0+eSQsRklMVEVSU19ESVZTX0ZJTFRFUl9CWV9WQUxVRTooKT0+YiQsRklMVEVSU19MQUJFTFNfQ09OSlVOQ1RJT046KCk9Pl8kLEZJTFRFUlNfTEFCRUxTX0RJU0pVTkNUSU9OOigpPT5YUixGSUxURVJTX05BTUVTUEFDRTooKT0+bjAsRklMVEVSU19WQUxV'@;
put 'RVNfQkxBTktfQ0VMTFM6KCk9PkpSfSk7dmFyIFY9e307ZnVuY3Rpb24gRyhsKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgbH1mdW5jdGlvbiBXKGwpe2NvbnN0IGE9bChmPT57RXJyb3IuY2FsbChmKSxmLnN0YWNrPShuZXcgRXJyb3IpLnN0YWNrfSk7cmV0dXJuIGEucHJvdG90eXBlPU9i'@;
put 'amVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSxhLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1hLGF9VC5yKFYpLFQuZChWLHtnZXROb3JtYWxpemVkRGF0ZTooKT0+aDJlfSk7Y29uc3QgVT1XKGw9PmZ1bmN0aW9uKGEpe2wodGhpcyksdGhpcy5tZXNzYWdlPWE/YCR7YS5sZW5ndGh9IGVycm9y'@;
put 'cyBvY2N1cnJlZCBkdXJpbmcgdW5zdWJzY3JpcHRpb246XG4ke2EubWFwKChmLGQpPT5gJHtkKzF9KSAke2YudG9TdHJpbmcoKX1gKS5qb2luKCJcbiAgIil9YDoiIix0aGlzLm5hbWU9IlVuc3Vic2NyaXB0aW9uRXJyb3IiLHRoaXMuZXJyb3JzPWF9KTtmdW5jdGlvbiBxKGwsYyl7aWYobCl7'@;
put 'Y29uc3QgYT1sLmluZGV4T2YoYyk7MDw9YSYmbC5zcGxpY2UoYSwxKX19Y2xhc3MgdGV7Y29uc3RydWN0b3IoYyl7dGhpcy5pbml0aWFsVGVhcmRvd249Yyx0aGlzLmNsb3NlZD0hMSx0aGlzLl9wYXJlbnRhZ2U9bnVsbCx0aGlzLl9maW5hbGl6ZXJzPW51bGx9dW5zdWJzY3JpYmUoKXtsZXQg'@;
put 'YztpZighdGhpcy5jbG9zZWQpe3RoaXMuY2xvc2VkPSEwO2NvbnN0e19wYXJlbnRhZ2U6YX09dGhpcztpZihhKWlmKHRoaXMuX3BhcmVudGFnZT1udWxsLEFycmF5LmlzQXJyYXkoYSkpZm9yKGNvbnN0IGggb2YgYSloLnJlbW92ZSh0aGlzKTtlbHNlIGEucmVtb3ZlKHRoaXMpO2NvbnN0e2lu'@;
put 'aXRpYWxUZWFyZG93bjpmfT10aGlzO2lmKEcoZikpdHJ5e2YoKX1jYXRjaChoKXtjPWggaW5zdGFuY2VvZiBVP2guZXJyb3JzOltoXX1jb25zdHtfZmluYWxpemVyczpkfT10aGlzO2lmKGQpe3RoaXMuX2ZpbmFsaXplcnM9bnVsbDtmb3IoY29uc3QgaCBvZiBkKXRyeXtsZShoKX1jYXRjaCht'@;
put 'KXtjPWM/P1tdLG0gaW5zdGFuY2VvZiBVP2M9Wy4uLmMsLi4ubS5lcnJvcnNdOmMucHVzaChtKX19aWYoYyl0aHJvdyBuZXcgVShjKX19YWRkKGMpe3ZhciBhO2lmKGMmJmMhPT10aGlzKWlmKHRoaXMuY2xvc2VkKWxlKGMpO2Vsc2V7aWYoYyBpbnN0YW5jZW9mIHRlKXtpZihjLmNsb3NlZHx8'@;
put 'Yy5faGFzUGFyZW50KHRoaXMpKXJldHVybjtjLl9hZGRQYXJlbnQodGhpcyl9KHRoaXMuX2ZpbmFsaXplcnM9bnVsbCE9PShhPXRoaXMuX2ZpbmFsaXplcnMpJiZ2b2lkIDAhPT1hP2E6W10pLnB1c2goYyl9fV9oYXNQYXJlbnQoYyl7Y29uc3R7X3BhcmVudGFnZTphfT10aGlzO3JldHVybiBh'@;
put 'PT09Y3x8QXJyYXkuaXNBcnJheShhKSYmYS5pbmNsdWRlcyhjKX1fYWRkUGFyZW50KGMpe2NvbnN0e19wYXJlbnRhZ2U6YX09dGhpczt0aGlzLl9wYXJlbnRhZ2U9QXJyYXkuaXNBcnJheShhKT8oYS5wdXNoKGMpLGEpOmE/W2EsY106Y31fcmVtb3ZlUGFyZW50KGMpe2NvbnN0e19wYXJlbnRh'@;
put 'Z2U6YX09dGhpczthPT09Yz90aGlzLl9wYXJlbnRhZ2U9bnVsbDpBcnJheS5pc0FycmF5KGEpJiZxKGEsYyl9cmVtb3ZlKGMpe2NvbnN0e19maW5hbGl6ZXJzOmF9PXRoaXM7YSYmcShhLGMpLGMgaW5zdGFuY2VvZiB0ZSYmYy5fcmVtb3ZlUGFyZW50KHRoaXMpfX10ZS5FTVBUWT0oKCk9Pntj'@;
put 'b25zdCBsPW5ldyB0ZTtyZXR1cm4gbC5jbG9zZWQ9ITAsbH0pKCk7Y29uc3QgbmU9dGUuRU1QVFk7ZnVuY3Rpb24gaWUobCl7cmV0dXJuIGwgaW5zdGFuY2VvZiB0ZXx8bCYmImNsb3NlZCJpbiBsJiZHKGwucmVtb3ZlKSYmRyhsLmFkZCkmJkcobC51bnN1YnNjcmliZSl9ZnVuY3Rpb24gbGUo'@;
put 'bCl7RyhsKT9sKCk6bC51bnN1YnNjcmliZSgpfWNvbnN0IGRlPXtvblVuaGFuZGxlZEVycm9yOm51bGwsb25TdG9wcGVkTm90aWZpY2F0aW9uOm51bGwsUHJvbWlzZTp2b2lkIDAsdXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZzohMSx1c2VEZXByZWNhdGVkTmV4dENvbnRl'@;
put 'eHQ6ITF9LHVlPXtzZXRUaW1lb3V0KGwsYywuLi5hKXtjb25zdHtkZWxlZ2F0ZTpmfT11ZTtyZXR1cm4gZj8uc2V0VGltZW91dD9mLnNldFRpbWVvdXQobCxjLC4uLmEpOnNldFRpbWVvdXQobCxjLC4uLmEpfSxjbGVhclRpbWVvdXQobCl7Y29uc3R7ZGVsZWdhdGU6Y309dWU7cmV0dXJuKGM/'@;
put 'LmNsZWFyVGltZW91dHx8Y2xlYXJUaW1lb3V0KShsKX0sZGVsZWdhdGU6dm9pZCAwfTtmdW5jdGlvbiBjZShsKXt1ZS5zZXRUaW1lb3V0KCgpPT57Y29uc3R7b25VbmhhbmRsZWRFcnJvcjpjfT1kZTtpZighYyl0aHJvdyBsO2MobCl9KX1mdW5jdGlvbiBZKCl7fWNvbnN0IGI9RigiQyIsdm9p'@;
put 'ZCAwLHZvaWQgMCk7ZnVuY3Rpb24gRihsLGMsYSl7cmV0dXJue2tpbmQ6bCx2YWx1ZTpjLGVycm9yOmF9fWxldCBnPW51bGw7ZnVuY3Rpb24gQyhsKXtpZihkZS51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nKXtjb25zdCBjPSFnO2lmKGMmJihnPXtlcnJvclRocm93bjoh'@;
put 'MSxlcnJvcjpudWxsfSksbCgpLGMpe2NvbnN0e2Vycm9yVGhyb3duOmEsZXJyb3I6Zn09ZztpZihnPW51bGwsYSl0aHJvdyBmfX1lbHNlIGwoKX1jbGFzcyB5IGV4dGVuZHMgdGV7Y29uc3RydWN0b3IoYyl7c3VwZXIoKSx0aGlzLmlzU3RvcHBlZD0hMSxjPyh0aGlzLmRlc3RpbmF0aW9uPWMs'@;
put 'aWUoYykmJmMuYWRkKHRoaXMpKTp0aGlzLmRlc3RpbmF0aW9uPVRlfXN0YXRpYyBjcmVhdGUoYyxhLGYpe3JldHVybiBuZXcgcmUoYyxhLGYpfW5leHQoYyl7dGhpcy5pc1N0b3BwZWQ/a2UoZnVuY3Rpb24gTihsKXtyZXR1cm4gRigiTiIsbCx2b2lkIDApfShjKSx0aGlzKTp0aGlzLl9uZXh0'@;
put 'KGMpfWVycm9yKGMpe3RoaXMuaXNTdG9wcGVkP2tlKGZ1bmN0aW9uIHgobCl7cmV0dXJuIEYoIkUiLHZvaWQgMCxsKX0oYyksdGhpcyk6KHRoaXMuaXNTdG9wcGVkPSEwLHRoaXMuX2Vycm9yKGMpKX1jb21wbGV0ZSgpe3RoaXMuaXNTdG9wcGVkP2tlKGIsdGhpcyk6KHRoaXMuaXNTdG9wcGVk'@;
put 'PSEwLHRoaXMuX2NvbXBsZXRlKCkpfXVuc3Vic2NyaWJlKCl7dGhpcy5jbG9zZWR8fCh0aGlzLmlzU3RvcHBlZD0hMCxzdXBlci51bnN1YnNjcmliZSgpLHRoaXMuZGVzdGluYXRpb249bnVsbCl9X25leHQoYyl7dGhpcy5kZXN0aW5hdGlvbi5uZXh0KGMpfV9lcnJvcihjKXt0cnl7dGhpcy5k'@;
put 'ZXN0aW5hdGlvbi5lcnJvcihjKX1maW5hbGx5e3RoaXMudW5zdWJzY3JpYmUoKX19X2NvbXBsZXRlKCl7dHJ5e3RoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX1maW5hbGx5e3RoaXMudW5zdWJzY3JpYmUoKX19fWNvbnN0IHA9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ7ZnVuY3Rpb24gUyhs'@;
put 'LGMpe3JldHVybiBwLmNhbGwobCxjKX1jbGFzcyBRe2NvbnN0cnVjdG9yKGMpe3RoaXMucGFydGlhbE9ic2VydmVyPWN9bmV4dChjKXtjb25zdHtwYXJ0aWFsT2JzZXJ2ZXI6YX09dGhpcztpZihhLm5leHQpdHJ5e2EubmV4dChjKX1jYXRjaChmKXtmZShmKX19ZXJyb3IoYyl7Y29uc3R7cGFy'@;
put 'dGlhbE9ic2VydmVyOmF9PXRoaXM7aWYoYS5lcnJvcil0cnl7YS5lcnJvcihjKX1jYXRjaChmKXtmZShmKX1lbHNlIGZlKGMpfWNvbXBsZXRlKCl7Y29uc3R7cGFydGlhbE9ic2VydmVyOmN9PXRoaXM7aWYoYy5jb21wbGV0ZSl0cnl7Yy5jb21wbGV0ZSgpfWNhdGNoKGEpe2ZlKGEpfX19Y2xh'@;
put 'c3MgcmUgZXh0ZW5kcyB5e2NvbnN0cnVjdG9yKGMsYSxmKXtsZXQgZDtpZihzdXBlcigpLEcoYyl8fCFjKWQ9e25leHQ6Yz8/dm9pZCAwLGVycm9yOmE/P3ZvaWQgMCxjb21wbGV0ZTpmPz92b2lkIDB9O2Vsc2V7bGV0IGg7dGhpcyYmZGUudXNlRGVwcmVjYXRlZE5leHRDb250ZXh0PyhoPU9i'@;
put 'amVjdC5jcmVhdGUoYyksaC51bnN1YnNjcmliZT0oKT0+dGhpcy51bnN1YnNjcmliZSgpLGQ9e25leHQ6Yy5uZXh0JiZTKGMubmV4dCxoKSxlcnJvcjpjLmVycm9yJiZTKGMuZXJyb3IsaCksY29tcGxldGU6Yy5jb21wbGV0ZSYmUyhjLmNvbXBsZXRlLGgpfSk6ZD1jfXRoaXMuZGVzdGluYXRp'@;
put 'b249bmV3IFEoZCl9fWZ1bmN0aW9uIGZlKGwpe2RlLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc/ZnVuY3Rpb24gTShsKXtkZS51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nJiZnJiYoZy5lcnJvclRocm93bj0hMCxnLmVycm9yPWwpfShsKTpjZShs'@;
put 'KX1mdW5jdGlvbiBrZShsLGMpe2NvbnN0e29uU3RvcHBlZE5vdGlmaWNhdGlvbjphfT1kZTthJiZ1ZS5zZXRUaW1lb3V0KCgpPT5hKGwsYykpfWNvbnN0IFRlPXtjbG9zZWQ6ITAsbmV4dDpZLGVycm9yOmZ1bmN0aW9uIG1lKGwpe3Rocm93IGx9LGNvbXBsZXRlOll9LFBlPSJmdW5jdGlvbiI9'@;
put 'PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5vYnNlcnZhYmxlfHwiQEBvYnNlcnZhYmxlIjtmdW5jdGlvbiBGZShsKXtyZXR1cm4gbH1mdW5jdGlvbiBMZShsKXtyZXR1cm4gMD09PWwubGVuZ3RoP0ZlOjE9PT1sLmxlbmd0aD9sWzBdOmZ1bmN0aW9uKGEpe3JldHVybiBsLnJlZHVjZSgoZixkKT0+'@;
put 'ZChmKSxhKX19bGV0IEJlPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSl7YSYmKHRoaXMuX3N1YnNjcmliZT1hKX1saWZ0KGEpe2NvbnN0IGY9bmV3IGw7cmV0dXJuIGYuc291cmNlPXRoaXMsZi5vcGVyYXRvcj1hLGZ9c3Vic2NyaWJlKGEsZixkKXtjb25zdCBoPWZ1bmN0aW9uIG10KGwp'@;
put 'e3JldHVybiBsJiZsIGluc3RhbmNlb2YgeXx8ZnVuY3Rpb24gUWUobCl7cmV0dXJuIGwmJkcobC5uZXh0KSYmRyhsLmVycm9yKSYmRyhsLmNvbXBsZXRlKX0obCkmJmllKGwpfShhKT9hOm5ldyByZShhLGYsZCk7cmV0dXJuIEMoKCk9Pntjb25zdHtvcGVyYXRvcjptLHNvdXJjZTpffT10aGlz'@;
put 'O2guYWRkKG0/bS5jYWxsKGgsXyk6Xz90aGlzLl9zdWJzY3JpYmUoaCk6dGhpcy5fdHJ5U3Vic2NyaWJlKGgpKX0pLGh9X3RyeVN1YnNjcmliZShhKXt0cnl7cmV0dXJuIHRoaXMuX3N1YnNjcmliZShhKX1jYXRjaChmKXthLmVycm9yKGYpfX1mb3JFYWNoKGEsZil7cmV0dXJuIG5ldyhmPUhl'@;
put 'KGYpKSgoZCxoKT0+e2NvbnN0IG09bmV3IHJlKHtuZXh0Ol89Pnt0cnl7YShfKX1jYXRjaChPKXtoKE8pLG0udW5zdWJzY3JpYmUoKX19LGVycm9yOmgsY29tcGxldGU6ZH0pO3RoaXMuc3Vic2NyaWJlKG0pfSl9X3N1YnNjcmliZShhKXt2YXIgZjtyZXR1cm4gbnVsbD09PShmPXRoaXMuc291'@;
put 'cmNlKXx8dm9pZCAwPT09Zj92b2lkIDA6Zi5zdWJzY3JpYmUoYSl9W1BlXSgpe3JldHVybiB0aGlzfXBpcGUoLi4uYSl7cmV0dXJuIExlKGEpKHRoaXMpfXRvUHJvbWlzZShhKXtyZXR1cm4gbmV3KGE9SGUoYSkpKChmLGQpPT57bGV0IGg7dGhpcy5zdWJzY3JpYmUobT0+aD1tLG09PmQobSks'@;
put 'KCk9PmYoaCkpfSl9fXJldHVybiBsLmNyZWF0ZT1jPT5uZXcgbChjKSxsfSkoKTtmdW5jdGlvbiBIZShsKXt2YXIgYztyZXR1cm4gbnVsbCE9PShjPWw/P2RlLlByb21pc2UpJiZ2b2lkIDAhPT1jP2M6UHJvbWlzZX1jb25zdCBLZT1XKGw9PmZ1bmN0aW9uKCl7bCh0aGlzKSx0aGlzLm5hbWU9'@;
put 'Ik9iamVjdFVuc3Vic2NyaWJlZEVycm9yIix0aGlzLm1lc3NhZ2U9Im9iamVjdCB1bnN1YnNjcmliZWQifSk7bGV0IHdlPSgoKT0+e2NsYXNzIGwgZXh0ZW5kcyBCZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5jbG9zZWQ9ITEsdGhpcy5jdXJyZW50T2JzZXJ2ZXJzPW51bGwsdGhpcy5v'@;
put 'YnNlcnZlcnM9W10sdGhpcy5pc1N0b3BwZWQ9ITEsdGhpcy5oYXNFcnJvcj0hMSx0aGlzLnRocm93bkVycm9yPW51bGx9bGlmdChhKXtjb25zdCBmPW5ldyBJZSh0aGlzLHRoaXMpO3JldHVybiBmLm9wZXJhdG9yPWEsZn1fdGhyb3dJZkNsb3NlZCgpe2lmKHRoaXMuY2xvc2VkKXRocm93IG5l'@;
put 'dyBLZX1uZXh0KGEpe0MoKCk9PntpZih0aGlzLl90aHJvd0lmQ2xvc2VkKCksIXRoaXMuaXNTdG9wcGVkKXt0aGlzLmN1cnJlbnRPYnNlcnZlcnN8fCh0aGlzLmN1cnJlbnRPYnNlcnZlcnM9QXJyYXkuZnJvbSh0aGlzLm9ic2VydmVycykpO2Zvcihjb25zdCBmIG9mIHRoaXMuY3VycmVudE9i'@;
put 'c2VydmVycylmLm5leHQoYSl9fSl9ZXJyb3IoYSl7QygoKT0+e2lmKHRoaXMuX3Rocm93SWZDbG9zZWQoKSwhdGhpcy5pc1N0b3BwZWQpe3RoaXMuaGFzRXJyb3I9dGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy50aHJvd25FcnJvcj1hO2NvbnN0e29ic2VydmVyczpmfT10aGlzO2Zvcig7Zi5sZW5n'@;
put 'dGg7KWYuc2hpZnQoKS5lcnJvcihhKX19KX1jb21wbGV0ZSgpe0MoKCk9PntpZih0aGlzLl90aHJvd0lmQ2xvc2VkKCksIXRoaXMuaXNTdG9wcGVkKXt0aGlzLmlzU3RvcHBlZD0hMDtjb25zdHtvYnNlcnZlcnM6YX09dGhpcztmb3IoO2EubGVuZ3RoOylhLnNoaWZ0KCkuY29tcGxldGUoKX19'@;
put 'KX11bnN1YnNjcmliZSgpe3RoaXMuaXNTdG9wcGVkPXRoaXMuY2xvc2VkPSEwLHRoaXMub2JzZXJ2ZXJzPXRoaXMuY3VycmVudE9ic2VydmVycz1udWxsfWdldCBvYnNlcnZlZCgpe3ZhciBhO3JldHVybihudWxsPT09KGE9dGhpcy5vYnNlcnZlcnMpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmxl'@;
put 'bmd0aCk+MH1fdHJ5U3Vic2NyaWJlKGEpe3JldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksc3VwZXIuX3RyeVN1YnNjcmliZShhKX1fc3Vic2NyaWJlKGEpe3JldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhhKSx0aGlzLl9pbm5lclN1'@;
put 'YnNjcmliZShhKX1faW5uZXJTdWJzY3JpYmUoYSl7Y29uc3R7aGFzRXJyb3I6Zixpc1N0b3BwZWQ6ZCxvYnNlcnZlcnM6aH09dGhpcztyZXR1cm4gZnx8ZD9uZToodGhpcy5jdXJyZW50T2JzZXJ2ZXJzPW51bGwsaC5wdXNoKGEpLG5ldyB0ZSgoKT0+e3RoaXMuY3VycmVudE9ic2VydmVycz1u'@;
put 'dWxsLHEoaCxhKX0pKX1fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhhKXtjb25zdHtoYXNFcnJvcjpmLHRocm93bkVycm9yOmQsaXNTdG9wcGVkOmh9PXRoaXM7Zj9hLmVycm9yKGQpOmgmJmEuY29tcGxldGUoKX1hc09ic2VydmFibGUoKXtjb25zdCBhPW5ldyBCZTtyZXR1cm4gYS5zb3VyY2U9'@;
put 'dGhpcyxhfX1yZXR1cm4gbC5jcmVhdGU9KGMsYSk9Pm5ldyBJZShjLGEpLGx9KSgpO2NsYXNzIEllIGV4dGVuZHMgd2V7Y29uc3RydWN0b3IoYyxhKXtzdXBlcigpLHRoaXMuZGVzdGluYXRpb249Yyx0aGlzLnNvdXJjZT1hfW5leHQoYyl7dmFyIGEsZjtudWxsPT09KGY9bnVsbD09PShhPXRo'@;
put 'aXMuZGVzdGluYXRpb24pfHx2b2lkIDA9PT1hP3ZvaWQgMDphLm5leHQpfHx2b2lkIDA9PT1mfHxmLmNhbGwoYSxjKX1lcnJvcihjKXt2YXIgYSxmO251bGw9PT0oZj1udWxsPT09KGE9dGhpcy5kZXN0aW5hdGlvbil8fHZvaWQgMD09PWE/dm9pZCAwOmEuZXJyb3IpfHx2b2lkIDA9PT1mfHxm'@;
put 'LmNhbGwoYSxjKX1jb21wbGV0ZSgpe3ZhciBjLGE7bnVsbD09PShhPW51bGw9PT0oYz10aGlzLmRlc3RpbmF0aW9uKXx8dm9pZCAwPT09Yz92b2lkIDA6Yy5jb21wbGV0ZSl8fHZvaWQgMD09PWF8fGEuY2FsbChjKX1fc3Vic2NyaWJlKGMpe3ZhciBhLGY7cmV0dXJuIG51bGwhPT0oZj1udWxs'@;
put 'PT09KGE9dGhpcy5zb3VyY2UpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLnN1YnNjcmliZShjKSkmJnZvaWQgMCE9PWY/ZjpuZX19Y2xhc3MgT2UgZXh0ZW5kcyB3ZXtjb25zdHJ1Y3RvcihjKXtzdXBlcigpLHRoaXMuX3ZhbHVlPWN9Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuZ2V0VmFsdWUoKX1f'@;
put 'c3Vic2NyaWJlKGMpe2NvbnN0IGE9c3VwZXIuX3N1YnNjcmliZShjKTtyZXR1cm4hYS5jbG9zZWQmJmMubmV4dCh0aGlzLl92YWx1ZSksYX1nZXRWYWx1ZSgpe2NvbnN0e2hhc0Vycm9yOmMsdGhyb3duRXJyb3I6YSxfdmFsdWU6Zn09dGhpcztpZihjKXRocm93IGE7cmV0dXJuIHRoaXMuX3Ro'@;
put 'cm93SWZDbG9zZWQoKSxmfW5leHQoYyl7c3VwZXIubmV4dCh0aGlzLl92YWx1ZT1jKX19ZnVuY3Rpb24gZXQobCl7cmV0dXJuIEcobD8ubGlmdCl9ZnVuY3Rpb24gbnQobCl7cmV0dXJuIGM9PntpZihldChjKSlyZXR1cm4gYy5saWZ0KGZ1bmN0aW9uKGEpe3RyeXtyZXR1cm4gbChhLHRoaXMp'@;
put 'fWNhdGNoKGYpe3RoaXMuZXJyb3IoZil9fSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxlIHR5cGUiKX19ZnVuY3Rpb24gcWUobCxjLGEsZixkKXtyZXR1cm4gbmV3IGh0KGwsYyxhLGYsZCl9Y2xhc3MgaHQgZXh0ZW5kcyB5e2NvbnN0cnVj'@;
put 'dG9yKGMsYSxmLGQsaCxtKXtzdXBlcihjKSx0aGlzLm9uRmluYWxpemU9aCx0aGlzLnNob3VsZFVuc3Vic2NyaWJlPW0sdGhpcy5fbmV4dD1hP2Z1bmN0aW9uKF8pe3RyeXthKF8pfWNhdGNoKE8pe2MuZXJyb3IoTyl9fTpzdXBlci5fbmV4dCx0aGlzLl9lcnJvcj1kP2Z1bmN0aW9uKF8pe3Ry'@;
put 'eXtkKF8pfWNhdGNoKE8pe2MuZXJyb3IoTyl9ZmluYWxseXt0aGlzLnVuc3Vic2NyaWJlKCl9fTpzdXBlci5fZXJyb3IsdGhpcy5fY29tcGxldGU9Zj9mdW5jdGlvbigpe3RyeXtmKCl9Y2F0Y2goXyl7Yy5lcnJvcihfKX1maW5hbGx5e3RoaXMudW5zdWJzY3JpYmUoKX19OnN1cGVyLl9jb21w'@;
put 'bGV0ZX11bnN1YnNjcmliZSgpe3ZhciBjO2lmKCF0aGlzLnNob3VsZFVuc3Vic2NyaWJlfHx0aGlzLnNob3VsZFVuc3Vic2NyaWJlKCkpe2NvbnN0e2Nsb3NlZDphfT10aGlzO3N1cGVyLnVuc3Vic2NyaWJlKCksIWEmJihudWxsPT09KGM9dGhpcy5vbkZpbmFsaXplKXx8dm9pZCAwPT09Y3x8'@;
put 'Yy5jYWxsKHRoaXMpKX19fWZ1bmN0aW9uIEVlKGwsYyl7cmV0dXJuIG50KChhLGYpPT57bGV0IGQ9MDthLnN1YnNjcmliZShxZShmLGg9PntmLm5leHQobC5jYWxsKGMsaCxkKyspKX0pKX0pfWZ1bmN0aW9uIE90KGwsYyxhLGYpe3ZhciBtLGQ9YXJndW1lbnRzLmxlbmd0aCxoPWQ8Mz9jOm51'@;
put 'bGw9PT1mP2Y9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLGEpOmY7aWYoIm9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiYiZnVuY3Rpb24iPT10eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSloPVJlZmxlY3QuZGVjb3JhdGUobCxjLGEsZik7ZWxzZSBmb3IodmFyIF89bC5sZW5ndGgt'@;
put 'MTtfPj0wO18tLSkobT1sW19dKSYmKGg9KGQ8Mz9tKGgpOmQ+Mz9tKGMsYSxoKTptKGMsYSkpfHxoKTtyZXR1cm4gZD4zJiZoJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxhLGgpLGh9ZnVuY3Rpb24gX3QobCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfdD8odGhpcy52PWwsdGhpcyk6bmV3'@;
put 'IF90KGwpfWZ1bmN0aW9uIG90KGwpe2lmKCFTeW1ib2wuYXN5bmNJdGVyYXRvcil0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTt2YXIgYSxjPWxbU3ltYm9sLmFzeW5jSXRlcmF0b3JdO3JldHVybiBjP2MuY2FsbChsKToobD1mdW5j'@;
put 'dGlvbiBwdChsKXt2YXIgYz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3IsYT1jJiZsW2NdLGY9MDtpZihhKXJldHVybiBhLmNhbGwobCk7aWYobCYmIm51bWJlciI9PXR5cGVvZiBsLmxlbmd0aClyZXR1cm57bmV4dDpmdW5jdGlvbigpe3JldHVybiBsJiZmPj1s'@;
put 'Lmxlbmd0aCYmKGw9dm9pZCAwKSx7dmFsdWU6bCYmbFtmKytdLGRvbmU6IWx9fX07dGhyb3cgbmV3IFR5cGVFcnJvcihjPyJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLiI6IlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKX0obCksYT17fSxmKCJuZXh0IiksZigidGhyb3ciKSxmKCJy'@;
put 'ZXR1cm4iKSxhW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxhKTtmdW5jdGlvbiBmKGgpe2FbaF09bFtoXSYmZnVuY3Rpb24obSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKF8sTyl7IWZ1bmN0aW9uIGQoaCxtLF8sTyl7UHJvbWlzZS5yZXNvbHZl'@;
put 'KE8pLnRoZW4oZnVuY3Rpb24oWCl7aCh7dmFsdWU6WCxkb25lOl99KX0sbSl9KF8sTywobT1sW2hdKG0pKS5kb25lLG0udmFsdWUpfSl9fX0iZnVuY3Rpb24iPT10eXBlb2YgU3VwcHJlc3NlZEVycm9yJiZTdXBwcmVzc2VkRXJyb3I7Y29uc3QgRm49bD0+bCYmIm51bWJlciI9PXR5cGVvZiBs'@;
put 'Lmxlbmd0aCYmImZ1bmN0aW9uIiE9dHlwZW9mIGw7ZnVuY3Rpb24gcXQobCl7cmV0dXJuIEcobD8udGhlbil9ZnVuY3Rpb24gSG4obCl7cmV0dXJuIEcobFtQZV0pfWZ1bmN0aW9uIGlpKGwpe3JldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvciYmRyhsPy5bU3ltYm9sLmFzeW5jSXRlcmF0b3Jd'@;
put 'KX1mdW5jdGlvbiBjbihsKXtyZXR1cm4gbmV3IFR5cGVFcnJvcihgWW91IHByb3ZpZGVkICR7bnVsbCE9PWwmJiJvYmplY3QiPT10eXBlb2YgbD8iYW4gaW52YWxpZCBvYmplY3QiOmAnJHtsfSdgfSB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNl'@;
put 'cnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwgQXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLmApfWNvbnN0IFhyPWZ1bmN0aW9uIGpuKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yP1N5bWJvbC5pdGVyYXRvcjoiQEBpdGVy'@;
put 'YXRvciJ9KCk7ZnVuY3Rpb24gdmkobCl7cmV0dXJuIEcobD8uW1hyXSl9ZnVuY3Rpb24gRXIobCl7cmV0dXJuIGZ1bmN0aW9uIFZ0KGwsYyxhKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQu'@;
put 'Iik7dmFyIGQsZj1hLmFwcGx5KGwsY3x8W10pLGg9W107cmV0dXJuIGQ9e30sbSgibmV4dCIpLG0oInRocm93IiksbSgicmV0dXJuIiksZFtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZDtmdW5jdGlvbiBtKGJlKXtmW2JlXSYmKGRbYmVdPWZ1bmN0aW9u'@;
put 'KHhlKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oVmUsWmUpe2gucHVzaChbYmUseGUsVmUsWmVdKT4xfHxfKGJlLHhlKX0pfSl9ZnVuY3Rpb24gXyhiZSx4ZSl7dHJ5eyFmdW5jdGlvbiBPKGJlKXtiZS52YWx1ZSBpbnN0YW5jZW9mIF90P1Byb21pc2UucmVzb2x2ZShiZS52YWx1ZS52'@;
put 'KS50aGVuKFgsYWUpOnBlKGhbMF1bMl0sYmUpfShmW2JlXSh4ZSkpfWNhdGNoKFZlKXtwZShoWzBdWzNdLFZlKX19ZnVuY3Rpb24gWChiZSl7XygibmV4dCIsYmUpfWZ1bmN0aW9uIGFlKGJlKXtfKCJ0aHJvdyIsYmUpfWZ1bmN0aW9uIHBlKGJlLHhlKXtiZSh4ZSksaC5zaGlmdCgpLGgubGVu'@;
put 'Z3RoJiZfKGhbMF1bMF0saFswXVsxXSl9fSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbiooKXtjb25zdCBhPWwuZ2V0UmVhZGVyKCk7dHJ5e2Zvcig7Oyl7Y29uc3R7dmFsdWU6Zixkb25lOmR9PXlpZWxkIF90KGEucmVhZCgpKTtpZihkKXJldHVybiB5aWVsZCBfdCh2b2lkIDApO3lpZWxkIHlp'@;
put 'ZWxkIF90KGYpfX1maW5hbGx5e2EucmVsZWFzZUxvY2soKX19KX1mdW5jdGlvbiBZaShsKXtyZXR1cm4gRyhsPy5nZXRSZWFkZXIpfWZ1bmN0aW9uIEpyKGwpe2lmKGwgaW5zdGFuY2VvZiBCZSlyZXR1cm4gbDtpZihudWxsIT1sKXtpZihIbihsKSlyZXR1cm4gZnVuY3Rpb24gYW8obCl7cmV0'@;
put 'dXJuIG5ldyBCZShjPT57Y29uc3QgYT1sW1BlXSgpO2lmKEcoYS5zdWJzY3JpYmUpKXJldHVybiBhLnN1YnNjcmliZShjKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcm92aWRlZCBvYmplY3QgZG9lcyBub3QgY29ycmVjdGx5IGltcGxlbWVudCBTeW1ib2wub2JzZXJ2YWJsZSIpfSl9KGwpO2lm'@;
put 'KEZuKGwpKXJldHVybiBmdW5jdGlvbiBCcihsKXtyZXR1cm4gbmV3IEJlKGM9Pntmb3IobGV0IGE9MDthPGwubGVuZ3RoJiYhYy5jbG9zZWQ7YSsrKWMubmV4dChsW2FdKTtjLmNvbXBsZXRlKCl9KX0obCk7aWYocXQobCkpcmV0dXJuIGZ1bmN0aW9uIEppKGwpe3JldHVybiBuZXcgQmUoYz0+'@;
put 'e2wudGhlbihhPT57Yy5jbG9zZWR8fChjLm5leHQoYSksYy5jb21wbGV0ZSgpKX0sYT0+Yy5lcnJvcihhKSkudGhlbihudWxsLGNlKX0pfShsKTtpZihpaShsKSlyZXR1cm4gY28obCk7aWYodmkobCkpcmV0dXJuIGZ1bmN0aW9uIHRvKGwpe3JldHVybiBuZXcgQmUoYz0+e2Zvcihjb25zdCBh'@;
put 'IG9mIGwpaWYoYy5uZXh0KGEpLGMuY2xvc2VkKXJldHVybjtjLmNvbXBsZXRlKCl9KX0obCk7aWYoWWkobCkpcmV0dXJuIGZ1bmN0aW9uIGxvKGwpe3JldHVybiBjbyhFcihsKSl9KGwpfXRocm93IGNuKGwpfWZ1bmN0aW9uIGNvKGwpe3JldHVybiBuZXcgQmUoYz0+eyhmdW5jdGlvbiBzbyhs'@;
put 'LGMpe3ZhciBhLGYsZCxoO3JldHVybiBmdW5jdGlvbiBHbihsLGMsYSxmKXtyZXR1cm4gbmV3KGF8fChhPVByb21pc2UpKShmdW5jdGlvbihoLG0pe2Z1bmN0aW9uIF8oYWUpe3RyeXtYKGYubmV4dChhZSkpfWNhdGNoKHBlKXttKHBlKX19ZnVuY3Rpb24gTyhhZSl7dHJ5e1goZi50aHJvdyhh'@;
put 'ZSkpfWNhdGNoKHBlKXttKHBlKX19ZnVuY3Rpb24gWChhZSl7YWUuZG9uZT9oKGFlLnZhbHVlKTpmdW5jdGlvbiBkKGgpe3JldHVybiBoIGluc3RhbmNlb2YgYT9oOm5ldyBhKGZ1bmN0aW9uKG0pe20oaCl9KX0oYWUudmFsdWUpLnRoZW4oXyxPKX1YKChmPWYuYXBwbHkobCxjfHxbXSkpLm5l'@;
put 'eHQoKSl9KX0odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3RyeXtmb3IoYT1vdChsKTshKGY9eWllbGQgYS5uZXh0KCkpLmRvbmU7KWlmKGMubmV4dChmLnZhbHVlKSxjLmNsb3NlZClyZXR1cm59Y2F0Y2gobSl7ZD17ZXJyb3I6bX19ZmluYWxseXt0cnl7ZiYmIWYuZG9uZSYmKGg9'@;
put 'YS5yZXR1cm4pJiYoeWllbGQgaC5jYWxsKGEpKX1maW5hbGx5e2lmKGQpdGhyb3cgZC5lcnJvcn19Yy5jb21wbGV0ZSgpfSl9KShsLGMpLmNhdGNoKGE9PmMuZXJyb3IoYSkpfSl9ZnVuY3Rpb24gWGkobCxjLGEsZj0wLGQ9ITEpe2NvbnN0IGg9Yy5zY2hlZHVsZShmdW5jdGlvbigpe2EoKSxk'@;
put 'P2wuYWRkKHRoaXMuc2NoZWR1bGUobnVsbCxmKSk6dGhpcy51bnN1YnNjcmliZSgpfSxmKTtpZihsLmFkZChoKSwhZClyZXR1cm4gaH1mdW5jdGlvbiBfcihsLGMsYT0xLzApe3JldHVybiBHKGMpP19yKChmLGQpPT5FZSgoaCxtKT0+YyhmLGgsZCxtKSkoSnIobChmLGQpKSksYSk6KCJudW1i'@;
put 'ZXIiPT10eXBlb2YgYyYmKGE9YyksbnQoKGYsZCk9PmZ1bmN0aW9uIHBvKGwsYyxhLGYsZCxoLG0sXyl7Y29uc3QgTz1bXTtsZXQgWD0wLGFlPTAscGU9ITE7Y29uc3QgYmU9KCk9PntwZSYmIU8ubGVuZ3RoJiYhWCYmYy5jb21wbGV0ZSgpfSx4ZT1aZT0+WDxmP1ZlKFplKTpPLnB1c2goWmUp'@;
put 'LFZlPVplPT57aCYmYy5uZXh0KFplKSxYKys7bGV0IGx0PSExO0pyKGEoWmUsYWUrKykpLnN1YnNjcmliZShxZShjLGR0PT57ZD8uKGR0KSxoP3hlKGR0KTpjLm5leHQoZHQpfSwoKT0+e2x0PSEwfSx2b2lkIDAsKCk9PntpZihsdCl0cnl7Zm9yKFgtLTtPLmxlbmd0aCYmWDxmOyl7Y29uc3Qg'@;
put 'ZHQ9Ty5zaGlmdCgpO20/WGkoYyxtLCgpPT5WZShkdCkpOlZlKGR0KX1iZSgpfWNhdGNoKGR0KXtjLmVycm9yKGR0KX19KSl9O3JldHVybiBsLnN1YnNjcmliZShxZShjLHhlLCgpPT57cGU9ITAsYmUoKX0pKSwoKT0+e18/LigpfX0oZixkLGwsYSkpKX1mdW5jdGlvbiBGaShsPTEvMCl7cmV0'@;
put 'dXJuIF9yKEZlLGwpfWNvbnN0IEhvPW5ldyBCZShsPT5sLmNvbXBsZXRlKCkpO2Z1bmN0aW9uIFZ1KGwpe3JldHVybiBsJiZHKGwuc2NoZWR1bGUpfWZ1bmN0aW9uIGdzKGwpe3JldHVybiBsW2wubGVuZ3RoLTFdfWZ1bmN0aW9uIEJ1KGwpe3JldHVybiBHKGdzKGwpKT9sLnBvcCgpOnZvaWQg'@;
put 'MH1mdW5jdGlvbiBYMChsKXtyZXR1cm4gVnUoZ3MobCkpP2wucG9wKCk6dm9pZCAwfWZ1bmN0aW9uIEtkKGwsYz0wKXtyZXR1cm4gbnQoKGEsZik9PnthLnN1YnNjcmliZShxZShmLGQ9PlhpKGYsbCwoKT0+Zi5uZXh0KGQpLGMpLCgpPT5YaShmLGwsKCk9PmYuY29tcGxldGUoKSxjKSxkPT5Y'@;
put 'aShmLGwsKCk9PmYuZXJyb3IoZCksYykpKX0pfWZ1bmN0aW9uIGQwKGwsYz0wKXtyZXR1cm4gbnQoKGEsZik9PntmLmFkZChsLnNjaGVkdWxlKCgpPT5hLnN1YnNjcmliZShmKSxjKSl9KX1mdW5jdGlvbiBxZChsLGMpe2lmKCFsKXRocm93IG5ldyBFcnJvcigiSXRlcmFibGUgY2Fubm90IGJl'@;
put 'IG51bGwiKTtyZXR1cm4gbmV3IEJlKGE9PntYaShhLGMsKCk9Pntjb25zdCBmPWxbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7WGkoYSxjLCgpPT57Zi5uZXh0KCkudGhlbihkPT57ZC5kb25lP2EuY29tcGxldGUoKTphLm5leHQoZC52YWx1ZSl9KX0sMCwhMCl9KX0pfWZ1bmN0aW9uIG5sKGws'@;
put 'Yyl7cmV0dXJuIGM/ZnVuY3Rpb24gcjIobCxjKXtpZihudWxsIT1sKXtpZihIbihsKSlyZXR1cm4gZnVuY3Rpb24gTGMobCxjKXtyZXR1cm4gSnIobCkucGlwZShkMChjKSxLZChjKSl9KGwsYyk7aWYoRm4obCkpcmV0dXJuIGZ1bmN0aW9uIEZsKGwsYyl7cmV0dXJuIG5ldyBCZShhPT57bGV0'@;
put 'IGY9MDtyZXR1cm4gYy5zY2hlZHVsZShmdW5jdGlvbigpe2Y9PT1sLmxlbmd0aD9hLmNvbXBsZXRlKCk6KGEubmV4dChsW2YrK10pLGEuY2xvc2VkfHx0aGlzLnNjaGVkdWxlKCkpfSl9KX0obCxjKTtpZihxdChsKSlyZXR1cm4gZnVuY3Rpb24gdmEobCxjKXtyZXR1cm4gSnIobCkucGlwZShk'@;
put 'MChjKSxLZChjKSl9KGwsYyk7aWYoaWkobCkpcmV0dXJuIHFkKGwsYyk7aWYodmkobCkpcmV0dXJuIGZ1bmN0aW9uIE1yKGwsYyl7cmV0dXJuIG5ldyBCZShhPT57bGV0IGY7cmV0dXJuIFhpKGEsYywoKT0+e2Y9bFtYcl0oKSxYaShhLGMsKCk9PntsZXQgZCxoO3RyeXsoe3ZhbHVlOmQsZG9u'@;
put 'ZTpofT1mLm5leHQoKSl9Y2F0Y2gobSl7cmV0dXJuIHZvaWQgYS5lcnJvcihtKX1oP2EuY29tcGxldGUoKTphLm5leHQoZCl9LDAsITApfSksKCk9PkcoZj8ucmV0dXJuKSYmZi5yZXR1cm4oKX0pfShsLGMpO2lmKFlpKGwpKXJldHVybiBmdW5jdGlvbiBRMyhsLGMpe3JldHVybiBxZChFcihs'@;
put 'KSxjKX0obCxjKX10aHJvdyBjbihsKX0obCxjKTpKcihsKX1mdW5jdGlvbiBzYSguLi5sKXtjb25zdCBjPVgwKGwpLGE9ZnVuY3Rpb24gSjMobCxjKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGdzKGwpP2wucG9wKCk6Y30obCwxLzApLGY9bDtyZXR1cm4gZi5sZW5ndGg/MT09PWYubGVuZ3Ro'@;
put 'P0pyKGZbMF0pOkZpKGEpKG5sKGYsYykpOkhvfWZ1bmN0aW9uIEdpKC4uLmwpe3JldHVybiBubChsLFgwKGwpKX1mdW5jdGlvbiAkbChsPXt9KXtjb25zdHtjb25uZWN0b3I6Yz0oKCk9Pm5ldyB3ZSkscmVzZXRPbkVycm9yOmE9ITAscmVzZXRPbkNvbXBsZXRlOmY9ITAscmVzZXRPblJlZkNv'@;
put 'dW50WmVybzpkPSEwfT1sO3JldHVybiBoPT57bGV0IG0sXyxPLFg9MCxhZT0hMSxwZT0hMTtjb25zdCBiZT0oKT0+e18/LnVuc3Vic2NyaWJlKCksXz12b2lkIDB9LHhlPSgpPT57YmUoKSxtPU89dm9pZCAwLGFlPXBlPSExfSxWZT0oKT0+e2NvbnN0IFplPW07eGUoKSxaZT8udW5zdWJzY3Jp'@;
put 'YmUoKX07cmV0dXJuIG50KChaZSxsdCk9PntYKyssIXBlJiYhYWUmJmJlKCk7Y29uc3QgZHQ9Tz1PPz9jKCk7bHQuYWRkKCgpPT57WC0tLDA9PT1YJiYhcGUmJiFhZSYmKF89aDAoVmUsZCkpfSksZHQuc3Vic2NyaWJlKGx0KSwhbSYmWD4wJiYobT1uZXcgcmUoe25leHQ6Z3Q9PmR0Lm5leHQo'@;
put 'Z3QpLGVycm9yOmd0PT57cGU9ITAsYmUoKSxfPWgwKHhlLGEsZ3QpLGR0LmVycm9yKGd0KX0sY29tcGxldGU6KCk9PnthZT0hMCxiZSgpLF89aDAoeGUsZiksZHQuY29tcGxldGUoKX19KSxKcihaZSkuc3Vic2NyaWJlKG0pKX0pKGgpfX1mdW5jdGlvbiBoMChsLGMsLi4uYSl7aWYoITA9PT1j'@;
put 'KXJldHVybiB2b2lkIGwoKTtpZighMT09PWMpcmV0dXJuO2NvbnN0IGY9bmV3IHJlKHtuZXh0OigpPT57Zi51bnN1YnNjcmliZSgpLGwoKX19KTtyZXR1cm4gSnIoYyguLi5hKSkuc3Vic2NyaWJlKGYpfWZ1bmN0aW9uIGtsKGwsYyl7cmV0dXJuIG50KChhLGYpPT57bGV0IGQ9bnVsbCxoPTAs'@;
put 'bT0hMTtjb25zdCBfPSgpPT5tJiYhZCYmZi5jb21wbGV0ZSgpO2Euc3Vic2NyaWJlKHFlKGYsTz0+e2Q/LnVuc3Vic2NyaWJlKCk7bGV0IFg9MDtjb25zdCBhZT1oKys7SnIobChPLGFlKSkuc3Vic2NyaWJlKGQ9cWUoZixwZT0+Zi5uZXh0KGM/YyhPLHBlLGFlLFgrKyk6cGUpLCgpPT57ZD1u'@;
put 'dWxsLF8oKX0pKX0sKCk9PnttPSEwLF8oKX0pKX0pfWZ1bmN0aW9uIFBjKGwsYyl7cmV0dXJuIGw9PT1jfWZ1bmN0aW9uIERhKGwpe2ZvcihsZXQgYyBpbiBsKWlmKGxbY109PT1EYSlyZXR1cm4gYzt0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgcmVuYW1lZCBwcm9wZXJ0eSBvbiB0YXJn'@;
put 'ZXQgb2JqZWN0LiIpfWZ1bmN0aW9uIHAwKGwsYyl7Zm9yKGNvbnN0IGEgaW4gYyljLmhhc093blByb3BlcnR5KGEpJiYhbC5oYXNPd25Qcm9wZXJ0eShhKSYmKGxbYV09Y1thXSl9ZnVuY3Rpb24gS2wobCl7aWYoInN0cmluZyI9PXR5cGVvZiBsKXJldHVybiBsO2lmKEFycmF5LmlzQXJyYXko'@;
put 'bCkpcmV0dXJuIlsiK2wubWFwKEtsKS5qb2luKCIsICIpKyJdIjtpZihudWxsPT1sKXJldHVybiIiK2w7aWYobC5vdmVycmlkZGVuTmFtZSlyZXR1cm5gJHtsLm92ZXJyaWRkZW5OYW1lfWA7aWYobC5uYW1lKXJldHVybmAke2wubmFtZX1gO2NvbnN0IGM9bC50b1N0cmluZygpO2lmKG51bGw9'@;
put 'PWMpcmV0dXJuIiIrYztjb25zdCBhPWMuaW5kZXhPZigiXG4iKTtyZXR1cm4tMT09PWE/YzpjLnN1YnN0cmluZygwLGEpfWZ1bmN0aW9uIGt1KGwsYyl7cmV0dXJuIG51bGw9PWx8fCIiPT09bD9udWxsPT09Yz8iIjpjOm51bGw9PWN8fCIiPT09Yz9sOmwrIiAiK2N9Y29uc3QgYTI9RGEoe19f'@;
put 'Zm9yd2FyZF9yZWZfXzpEYX0pO2Z1bmN0aW9uIFBhKGwpe3JldHVybiBsLl9fZm9yd2FyZF9yZWZfXz1QYSxsLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEtsKHRoaXMoKSl9LGx9ZnVuY3Rpb24gQ28obCl7cmV0dXJuIG0wKGwpP2woKTpsfWZ1bmN0aW9uIG0wKGwpe3JldHVybiJmdW5j'@;
put 'dGlvbiI9PXR5cGVvZiBsJiZsLmhhc093blByb3BlcnR5KGEyKSYmbC5fX2ZvcndhcmRfcmVmX189PT1QYX1mdW5jdGlvbiBYZChsKXtyZXR1cm4gbCYmISFsLlx1MDI3NXByb3ZpZGVyc31jb25zdCBlcD0iaHR0cHM6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcyI7Y2xhc3MgSXIgZXh0ZW5kcyBF'@;
put 'cnJvcntjb25zdHJ1Y3RvcihjLGEpe3N1cGVyKGZ1bmN0aW9uIEV1KGwsYyl7cmV0dXJuYE5HMCR7TWF0aC5hYnMobCl9JHtjPyI6ICIrYzoiIn1gfShjLGEpKSx0aGlzLmNvZGU9Y319ZnVuY3Rpb24gSW8obCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBsP2w6bnVsbD09bD8iIjpTdHJpbmco'@;
put 'bCl9ZnVuY3Rpb24gbm8obCxjKXt0aHJvdyBuZXcgSXIoLTIwMSwhMSl9ZnVuY3Rpb24gcHIobCxjKXtudWxsPT1sJiZmdW5jdGlvbiB6byhsLGMsYSxmKXt0aHJvdyBuZXcgRXJyb3IoYEFTU0VSVElPTiBFUlJPUjogJHtsfWArKG51bGw9PWY/IiI6YCBbRXhwZWN0ZWQ9PiAke2F9ICR7Zn0g'@;
put 'JHtjfSA8PUFjdHVhbF1gKSl9KGMsbCxudWxsLCIhPSIpfWZ1bmN0aW9uIGhyKGwpe3JldHVybnt0b2tlbjpsLnRva2VuLHByb3ZpZGVkSW46bC5wcm92aWRlZElufHxudWxsLGZhY3Rvcnk6bC5mYWN0b3J5LHZhbHVlOnZvaWQgMH19ZnVuY3Rpb24geGkobCl7cmV0dXJue3Byb3ZpZGVyczps'@;
put 'LnByb3ZpZGVyc3x8W10saW1wb3J0czpsLmltcG9ydHN8fFtdfX1mdW5jdGlvbiBVZihsKXtyZXR1cm4gUTAobCx0cCl8fFEwKGwsQmEpfWZ1bmN0aW9uIFEwKGwsYyl7cmV0dXJuIGwuaGFzT3duUHJvcGVydHkoYyk/bFtjXTpudWxsfWZ1bmN0aW9uIEw2KGwpe3JldHVybiBsJiYobC5oYXNP'@;
put 'd25Qcm9wZXJ0eShjMil8fGwuaGFzT3duUHJvcGVydHkoSWIpKT9sW2MyXTpudWxsfWNvbnN0IHRwPURhKHtcdTAyNzVwcm92OkRhfSksYzI9RGEoe1x1MDI3NWluajpEYX0pLEJhPURhKHtuZ0luamVjdGFibGVEZWY6RGF9KSxJYj1EYSh7bmdJbmplY3RvckRlZjpEYX0pO3ZhciBhYT1mdW5j'@;
put 'dGlvbihsKXtyZXR1cm4gbFtsLkRlZmF1bHQ9MF09IkRlZmF1bHQiLGxbbC5Ib3N0PTFdPSJIb3N0IixsW2wuU2VsZj0yXT0iU2VsZiIsbFtsLlNraXBTZWxmPTRdPSJTa2lwU2VsZiIsbFtsLk9wdGlvbmFsPThdPSJPcHRpb25hbCIsbH0oYWF8fHt9KTtsZXQgdW07ZnVuY3Rpb24gcGkobCl7'@;
put 'Y29uc3QgYz11bTtyZXR1cm4gdW09bCxjfWZ1bmN0aW9uIEthKGwsYyxhKXtjb25zdCBmPVVmKGwpO3JldHVybiBmJiYicm9vdCI9PWYucHJvdmlkZWRJbj92b2lkIDA9PT1mLnZhbHVlP2YudmFsdWU9Zi5mYWN0b3J5KCk6Zi52YWx1ZTphJmFhLk9wdGlvbmFsP251bGw6dm9pZCAwIT09Yz9j'@;
put 'OnZvaWQgbm8oS2wobCkpfWNvbnN0IFBpPSgoKT0+dHlwZW9mIGdsb2JhbFRoaXM8InUiJiZnbG9iYWxUaGlzfHx0eXBlb2YgZ2xvYmFsPCJ1IiYmZ2xvYmFsfHx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93fHx0eXBlb2Ygc2VsZjwidSImJnR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSIm'@;
put 'JnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmc2VsZikoKSx2MD17fSwkMT0iX19OR19ESV9GTEFHX18iLEZjPSJuZ1RlbXBUb2tlblBhdGgiLGN1PS9cbi9nbSxINj0iX19zb3VyY2UiO2xldCBZZjtmdW5jdGlvbiBLMShsKXtjb25zdCBjPVlmO3JldHVybiBZZj1sLGN9ZnVu'@;
put 'Y3Rpb24gUmIobCxjPWFhLkRlZmF1bHQpe2lmKHZvaWQgMD09PVlmKXRocm93IG5ldyBJcigtMjAzLCExKTtyZXR1cm4gbnVsbD09PVlmP0thKGwsdm9pZCAwLGMpOllmLmdldChsLGMmYWEuT3B0aW9uYWw/bnVsbDp2b2lkIDAsYyl9ZnVuY3Rpb24gc3IobCxjPWFhLkRlZmF1bHQpe3JldHVy'@;
put 'bihmdW5jdGlvbiBjYSgpe3JldHVybiB1bX0oKXx8UmIpKENvKGwpLGMpfWZ1bmN0aW9uIEhpKGwsYz1hYS5EZWZhdWx0KXtyZXR1cm4gc3IobCx5MChjKSl9ZnVuY3Rpb24geTAobCl7cmV0dXJuIHR5cGVvZiBsPiJ1Inx8Im51bWJlciI9PXR5cGVvZiBsP2w6MHwobC5vcHRpb25hbCYmOCl8'@;
put 'KGwuaG9zdCYmMSl8KGwuc2VsZiYmMil8KGwuc2tpcFNlbGYmJjQpfWZ1bmN0aW9uIHJjKGwpe2NvbnN0IGM9W107Zm9yKGxldCBhPTA7YTxsLmxlbmd0aDthKyspe2NvbnN0IGY9Q28obFthXSk7aWYoQXJyYXkuaXNBcnJheShmKSl7aWYoMD09PWYubGVuZ3RoKXRocm93IG5ldyBJcig5MDAs'@;
put 'ITEpO2xldCBkLGg9YWEuRGVmYXVsdDtmb3IobGV0IG09MDttPGYubGVuZ3RoO20rKyl7Y29uc3QgXz1mW21dLE89TjYoXyk7Im51bWJlciI9PXR5cGVvZiBPPy0xPT09Tz9kPV8udG9rZW46aHw9TzpkPV99Yy5wdXNoKHNyKGQsaCkpfWVsc2UgYy5wdXNoKHNyKGYpKX1yZXR1cm4gY31mdW5j'@;
put 'dGlvbiBmMihsLGMpe3JldHVybiBsWyQxXT1jLGwucHJvdG90eXBlWyQxXT1jLGx9ZnVuY3Rpb24gTjYobCl7cmV0dXJuIGxbJDFdfWZ1bmN0aW9uIHZjKGwpe3JldHVybnt0b1N0cmluZzpsfS50b1N0cmluZygpfXZhciBxMT1mdW5jdGlvbihsKXtyZXR1cm4gbFtsLk9uUHVzaD0wXT0iT25Q'@;
put 'dXNoIixsW2wuRGVmYXVsdD0xXT0iRGVmYXVsdCIsbH0ocTF8fHt9KSxqdT1mdW5jdGlvbihsKXtyZXR1cm4gbFtsLkVtdWxhdGVkPTBdPSJFbXVsYXRlZCIsbFtsLk5vbmU9Ml09Ik5vbmUiLGxbbC5TaGFkb3dEb209M109IlNoYWRvd0RvbSIsbH0oanV8fHt9KTtjb25zdCBpYz17fSx4YT1b'@;
put 'XSxHZj1EYSh7XHUwMjc1Y21wOkRhfSksZDI9RGEoe1x1MDI3NWRpcjpEYX0pLG9jPURhKHtcdTAyNzVwaXBlOkRhfSksWDE9RGEoe1x1MDI3NW1vZDpEYX0pLGIwPURhKHtcdTAyNzVmYWM6RGF9KSxoMj1EYSh7X19OR19FTEVNRU5UX0lEX186RGF9KSx5bD1EYSh7X19OR19FTlZfSURfXzpE'@;
put 'YX0pO2Z1bmN0aW9uIHp1KGwsYyxhKXtsZXQgZj1sLmxlbmd0aDtmb3IoOzspe2NvbnN0IGQ9bC5pbmRleE9mKGMsYSk7aWYoLTE9PT1kKXJldHVybiBkO2lmKDA9PT1kfHxsLmNoYXJDb2RlQXQoZC0xKTw9MzIpe2NvbnN0IGg9Yy5sZW5ndGg7aWYoZCtoPT09Znx8bC5jaGFyQ29kZUF0KGQr'@;
put 'aCk8PTMyKXJldHVybiBkfWE9ZCsxfX1mdW5jdGlvbiAkZihsLGMsYSl7bGV0IGY9MDtmb3IoO2Y8YS5sZW5ndGg7KXtjb25zdCBkPWFbZl07aWYoIm51bWJlciI9PXR5cGVvZiBkKXtpZigwIT09ZClicmVhaztmKys7Y29uc3QgaD1hW2YrK10sbT1hW2YrK10sXz1hW2YrK107bC5zZXRBdHRy'@;
put 'aWJ1dGUoYyxtLF8saCl9ZWxzZXtjb25zdCBoPWQsbT1hWysrZl07Y20oaCk/bC5zZXRQcm9wZXJ0eShjLGgsbSk6bC5zZXRBdHRyaWJ1dGUoYyxoLG0pLGYrK319cmV0dXJuIGZ9ZnVuY3Rpb24gdGgobCl7cmV0dXJuIDM9PT1sfHw0PT09bHx8Nj09PWx9ZnVuY3Rpb24gY20obCl7cmV0dXJu'@;
put 'IDY0PT09bC5jaGFyQ29kZUF0KDApfWZ1bmN0aW9uIHAyKGwsYyl7aWYobnVsbCE9PWMmJjAhPT1jLmxlbmd0aClpZihudWxsPT09bHx8MD09PWwubGVuZ3RoKWw9Yy5zbGljZSgpO2Vsc2V7bGV0IGE9LTE7Zm9yKGxldCBmPTA7ZjxjLmxlbmd0aDtmKyspe2NvbnN0IGQ9Y1tmXTsibnVtYmVy'@;
put 'Ij09dHlwZW9mIGQ/YT1kOjA9PT1hfHxmbShsLGEsZCxudWxsLC0xPT09YXx8Mj09PWE/Y1srK2ZdOm51bGwpfX1yZXR1cm4gbH1mdW5jdGlvbiBmbShsLGMsYSxmLGQpe2xldCBoPTAsbT1sLmxlbmd0aDtpZigtMT09PWMpbT0tMTtlbHNlIGZvcig7aDxsLmxlbmd0aDspe2NvbnN0IF89bFto'@;
put 'KytdO2lmKCJudW1iZXIiPT10eXBlb2YgXyl7aWYoXz09PWMpe209LTE7YnJlYWt9aWYoXz5jKXttPWgtMTticmVha319fWZvcig7aDxsLmxlbmd0aDspe2NvbnN0IF89bFtoXTtpZigibnVtYmVyIj09dHlwZW9mIF8pYnJlYWs7aWYoXz09PWEpe2lmKG51bGw9PT1mKXJldHVybiB2b2lkKG51'@;
put 'bGwhPT1kJiYobFtoKzFdPWQpKTtpZihmPT09bFtoKzFdKXJldHVybiB2b2lkKGxbaCsyXT1kKX1oKyssbnVsbCE9PWYmJmgrKyxudWxsIT09ZCYmaCsrfS0xIT09bSYmKGwuc3BsaWNlKG0sMCxjKSxoPW0rMSksbC5zcGxpY2UoaCsrLDAsYSksbnVsbCE9PWYmJmwuc3BsaWNlKGgrKywwLGYp'@;
put 'LG51bGwhPT1kJiZsLnNwbGljZShoKyssMCxkKX1jb25zdCBkbT0ibmctdGVtcGxhdGUiO2Z1bmN0aW9uIExiKGwsYyxhKXtsZXQgZj0wLGQ9ITA7Zm9yKDtmPGwubGVuZ3RoOyl7bGV0IGg9bFtmKytdO2lmKCJzdHJpbmciPT10eXBlb2YgaCYmZCl7Y29uc3QgbT1sW2YrK107aWYoYSYmImNs'@;
put 'YXNzIj09PWgmJi0xIT09enUobS50b0xvd2VyQ2FzZSgpLGMsMCkpcmV0dXJuITB9ZWxzZXtpZigxPT09aCl7Zm9yKDtmPGwubGVuZ3RoJiYic3RyaW5nIj09dHlwZW9mKGg9bFtmKytdKTspaWYoaC50b0xvd2VyQ2FzZSgpPT09YylyZXR1cm4hMDtyZXR1cm4hMX0ibnVtYmVyIj09dHlwZW9m'@;
put 'IGgmJihkPSExKX19cmV0dXJuITF9ZnVuY3Rpb24gbnAobCl7cmV0dXJuIDQ9PT1sLnR5cGUmJmwudmFsdWUhPT1kbX1mdW5jdGlvbiBFbChsLGMsYSl7cmV0dXJuIGM9PT0oNCE9PWwudHlwZXx8YT9sLnZhbHVlOmRtKX1mdW5jdGlvbiBfMChsLGMsYSl7bGV0IGY9NDtjb25zdCBkPWwuYXR0'@;
put 'cnN8fFtdLGg9ZnVuY3Rpb24gUGIobCl7Zm9yKGxldCBjPTA7YzxsLmxlbmd0aDtjKyspaWYodGgobFtjXSkpcmV0dXJuIGM7cmV0dXJuIGwubGVuZ3RofShkKTtsZXQgbT0hMTtmb3IobGV0IF89MDtfPGMubGVuZ3RoO18rKyl7Y29uc3QgTz1jW19dO2lmKCJudW1iZXIiIT10eXBlb2YgTyl7'@;
put 'aWYoIW0paWYoNCZmKXtpZihmPTJ8MSZmLCIiIT09TyYmIUVsKGwsTyxhKXx8IiI9PT1PJiYxPT09Yy5sZW5ndGgpe2lmKFV1KGYpKXJldHVybiExO209ITB9fWVsc2V7Y29uc3QgWD04JmY/TzpjWysrX107aWYoOCZmJiZudWxsIT09bC5hdHRycyl7aWYoIUxiKGwuYXR0cnMsWCxhKSl7aWYo'@;
put 'VXUoZikpcmV0dXJuITE7bT0hMH1jb250aW51ZX1jb25zdCBwZT1ycCg4JmY/ImNsYXNzIjpPLGQsbnAobCksYSk7aWYoLTE9PT1wZSl7aWYoVXUoZikpcmV0dXJuITE7bT0hMDtjb250aW51ZX1pZigiIiE9PVgpe2xldCBiZTtiZT1wZT5oPyIiOmRbcGUrMV0udG9Mb3dlckNhc2UoKTtjb25z'@;
put 'dCB4ZT04JmY/YmU6bnVsbDtpZih4ZSYmLTEhPT16dSh4ZSxYLDApfHwyJmYmJlghPT1iZSl7aWYoVXUoZikpcmV0dXJuITE7bT0hMH19fX1lbHNle2lmKCFtJiYhVXUoZikmJiFVdShPKSlyZXR1cm4hMTtpZihtJiZVdShPKSljb250aW51ZTttPSExLGY9T3wxJmZ9fXJldHVybiBVdShmKXx8'@;
put 'bX1mdW5jdGlvbiBVdShsKXtyZXR1cm4gMD09KDEmbCl9ZnVuY3Rpb24gcnAobCxjLGEsZil7aWYobnVsbD09PWMpcmV0dXJuLTE7bGV0IGQ9MDtpZihmfHwhYSl7bGV0IGg9ITE7Zm9yKDtkPGMubGVuZ3RoOyl7Y29uc3QgbT1jW2RdO2lmKG09PT1sKXJldHVybiBkO2lmKDM9PT1tfHw2PT09'@;
put 'bSloPSEwO2Vsc2V7aWYoMT09PW18fDI9PT1tKXtsZXQgXz1jWysrZF07Zm9yKDsic3RyaW5nIj09dHlwZW9mIF87KV89Y1srK2RdO2NvbnRpbnVlfWlmKDQ9PT1tKWJyZWFrO2lmKDA9PT1tKXtkKz00O2NvbnRpbnVlfX1kKz1oPzE6Mn1yZXR1cm4tMX1yZXR1cm4gZnVuY3Rpb24gRmIobCxj'@;
put 'KXtsZXQgYT1sLmluZGV4T2YoNCk7aWYoYT4tMSlmb3IoYSsrO2E8bC5sZW5ndGg7KXtjb25zdCBmPWxbYV07aWYoIm51bWJlciI9PXR5cGVvZiBmKXJldHVybi0xO2lmKGY9PT1jKXJldHVybiBhO2ErK31yZXR1cm4tMX0oYyxsKX1mdW5jdGlvbiBobShsLGMsYT0hMSl7Zm9yKGxldCBmPTA7'@;
put 'ZjxjLmxlbmd0aDtmKyspaWYoXzAobCxjW2ZdLGEpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHBtKGwsYyl7ZTpmb3IobGV0IGE9MDthPGMubGVuZ3RoO2ErKyl7Y29uc3QgZj1jW2FdO2lmKGwubGVuZ3RoPT09Zi5sZW5ndGgpe2ZvcihsZXQgZD0wO2Q8bC5sZW5ndGg7ZCsrKWlmKGxb'@;
put 'ZF0hPT1mW2RdKWNvbnRpbnVlIGU7cmV0dXJuITB9fXJldHVybiExfWZ1bmN0aW9uIHZzKGwsYyl7cmV0dXJuIGw/Ijpub3QoIitjLnRyaW0oKSsiKSI6Y31mdW5jdGlvbiBWNihsKXtsZXQgYz1sWzBdLGE9MSxmPTIsZD0iIixoPSExO2Zvcig7YTxsLmxlbmd0aDspe2xldCBtPWxbYV07aWYo'@;
put 'InN0cmluZyI9PXR5cGVvZiBtKWlmKDImZil7Y29uc3QgXz1sWysrYV07ZCs9IlsiK20rKF8ubGVuZ3RoPjA/Jz0iJytfKyciJzoiIikrIl0ifWVsc2UgOCZmP2QrPSIuIittOjQmZiYmKGQrPSIgIittKTtlbHNlIiIhPT1kJiYhVXUobSkmJihjKz12cyhoLGQpLGQ9IiIpLGY9bSxoPWh8fCFV'@;
put 'dShmKTthKyt9cmV0dXJuIiIhPT1kJiYoYys9dnMoaCxkKSksY31mdW5jdGlvbiBrcihsKXtyZXR1cm4gdmMoKCk9Pntjb25zdCBjPWJtKGwpLGE9ey4uLmMsZGVjbHM6bC5kZWNscyx2YXJzOmwudmFycyx0ZW1wbGF0ZTpsLnRlbXBsYXRlLGNvbnN0czpsLmNvbnN0c3x8bnVsbCxuZ0NvbnRl'@;
put 'bnRTZWxlY3RvcnM6bC5uZ0NvbnRlbnRTZWxlY3RvcnMsb25QdXNoOmwuY2hhbmdlRGV0ZWN0aW9uPT09cTEuT25QdXNoLGRpcmVjdGl2ZURlZnM6bnVsbCxwaXBlRGVmczpudWxsLGRlcGVuZGVuY2llczpjLnN0YW5kYWxvbmUmJmwuZGVwZW5kZW5jaWVzfHxudWxsLGdldFN0YW5kYWxvbmVJ'@;
put 'bmplY3RvcjpudWxsLHNpZ25hbHM6bC5zaWduYWxzPz8hMSxkYXRhOmwuZGF0YXx8e30sZW5jYXBzdWxhdGlvbjpsLmVuY2Fwc3VsYXRpb258fGp1LkVtdWxhdGVkLHN0eWxlczpsLnN0eWxlc3x8eGEsXzpudWxsLHNjaGVtYXM6bC5zY2hlbWFzfHxudWxsLHRWaWV3Om51bGwsaWQ6IiJ9O2o2'@;
put 'KGEpO2NvbnN0IGY9bC5kZXBlbmRlbmNpZXM7cmV0dXJuIGEuZGlyZWN0aXZlRGVmcz1vcChmLCExKSxhLnBpcGVEZWZzPW9wKGYsITApLGEuaWQ9ZnVuY3Rpb24gVmIobCl7bGV0IGM9MDtjb25zdCBhPVtsLnNlbGVjdG9ycyxsLm5nQ29udGVudFNlbGVjdG9ycyxsLmhvc3RWYXJzLGwuaG9z'@;
put 'dEF0dHJzLGwuY29uc3RzLGwudmFycyxsLmRlY2xzLGwuZW5jYXBzdWxhdGlvbixsLnN0YW5kYWxvbmUsbC5zaWduYWxzLGwuZXhwb3J0QXMsSlNPTi5zdHJpbmdpZnkobC5pbnB1dHMpLEpTT04uc3RyaW5naWZ5KGwub3V0cHV0cyksT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobC50eXBl'@;
put 'LnByb3RvdHlwZSksISFsLmNvbnRlbnRRdWVyaWVzLCEhbC52aWV3UXVlcnldLmpvaW4oInwiKTtmb3IoY29uc3QgZCBvZiBhKWM9TWF0aC5pbXVsKDMxLGMpK2QuY2hhckNvZGVBdCgwKTw8MDtyZXR1cm4gYys9MjE0NzQ4MzY0OCwiYyIrY30oYSksYX0pfWZ1bmN0aW9uIHZtKGwpe3JldHVy'@;
put 'biBuYShsKXx8cWwobCl9ZnVuY3Rpb24gQjYobCl7cmV0dXJuIG51bGwhPT1sfWZ1bmN0aW9uIERpKGwpe3JldHVybiB2YygoKT0+KHt0eXBlOmwudHlwZSxib290c3RyYXA6bC5ib290c3RyYXB8fHhhLGRlY2xhcmF0aW9uczpsLmRlY2xhcmF0aW9uc3x8eGEsaW1wb3J0czpsLmltcG9ydHN8'@;
put 'fHhhLGV4cG9ydHM6bC5leHBvcnRzfHx4YSx0cmFuc2l0aXZlQ29tcGlsZVNjb3BlczpudWxsLHNjaGVtYXM6bC5zY2hlbWFzfHxudWxsLGlkOmwuaWR8fG51bGx9KSl9ZnVuY3Rpb24gaXAobCxjKXtpZihudWxsPT1sKXJldHVybiBpYztjb25zdCBhPXt9O2Zvcihjb25zdCBmIGluIGwpaWYo'@;
put 'bC5oYXNPd25Qcm9wZXJ0eShmKSl7bGV0IGQ9bFtmXSxoPWQ7QXJyYXkuaXNBcnJheShkKSYmKGg9ZFsxXSxkPWRbMF0pLGFbZF09ZixjJiYoY1tkXT1oKX1yZXR1cm4gYX1mdW5jdGlvbiBTcihsKXtyZXR1cm4gdmMoKCk9Pntjb25zdCBjPWJtKGwpO3JldHVybiBqNihjKSxjfSl9ZnVuY3Rp'@;
put 'b24gVmwobCl7cmV0dXJue3R5cGU6bC50eXBlLG5hbWU6bC5uYW1lLGZhY3Rvcnk6bnVsbCxwdXJlOiExIT09bC5wdXJlLHN0YW5kYWxvbmU6ITA9PT1sLnN0YW5kYWxvbmUsb25EZXN0cm95OmwudHlwZS5wcm90b3R5cGUubmdPbkRlc3Ryb3l8fG51bGx9fWZ1bmN0aW9uIG5hKGwpe3JldHVy'@;
put 'biBsW0dmXXx8bnVsbH1mdW5jdGlvbiBxbChsKXtyZXR1cm4gbFtkMl18fG51bGx9ZnVuY3Rpb24genMobCl7cmV0dXJuIGxbb2NdfHxudWxsfWZ1bmN0aW9uIFp1KGwsYyl7Y29uc3QgYT1sW1gxXXx8bnVsbDtpZighYSYmITA9PT1jKXRocm93IG5ldyBFcnJvcihgVHlwZSAke0tsKGwpfSBk'@;
put 'b2VzIG5vdCBoYXZlICdcdTAyNzVtb2QnIHByb3BlcnR5LmApO3JldHVybiBhfWZ1bmN0aW9uIGJtKGwpe2NvbnN0IGM9e307cmV0dXJue3R5cGU6bC50eXBlLHByb3ZpZGVyc1Jlc29sdmVyOm51bGwsZmFjdG9yeTpudWxsLGhvc3RCaW5kaW5nczpsLmhvc3RCaW5kaW5nc3x8bnVsbCxob3N0'@;
put 'VmFyczpsLmhvc3RWYXJzfHwwLGhvc3RBdHRyczpsLmhvc3RBdHRyc3x8bnVsbCxjb250ZW50UXVlcmllczpsLmNvbnRlbnRRdWVyaWVzfHxudWxsLGRlY2xhcmVkSW5wdXRzOmMsaW5wdXRUcmFuc2Zvcm1zOm51bGwsaW5wdXRDb25maWc6bC5pbnB1dHN8fGljLGV4cG9ydEFzOmwuZXhwb3J0'@;
put 'QXN8fG51bGwsc3RhbmRhbG9uZTohMD09PWwuc3RhbmRhbG9uZSxzaWduYWxzOiEwPT09bC5zaWduYWxzLHNlbGVjdG9yczpsLnNlbGVjdG9yc3x8eGEsdmlld1F1ZXJ5Omwudmlld1F1ZXJ5fHxudWxsLGZlYXR1cmVzOmwuZmVhdHVyZXN8fG51bGwsc2V0SW5wdXQ6bnVsbCxmaW5kSG9zdERp'@;
put 'cmVjdGl2ZURlZnM6bnVsbCxob3N0RGlyZWN0aXZlczpudWxsLGlucHV0czppcChsLmlucHV0cyxjKSxvdXRwdXRzOmlwKGwub3V0cHV0cyl9fWZ1bmN0aW9uIGo2KGwpe2wuZmVhdHVyZXM/LmZvckVhY2goYz0+YyhsKSl9ZnVuY3Rpb24gb3AobCxjKXtpZighbClyZXR1cm4gbnVsbDtjb25z'@;
put 'dCBhPWM/enM6dm07cmV0dXJuKCk9PigiZnVuY3Rpb24iPT10eXBlb2YgbD9sKCk6bCkubWFwKGY9PmEoZikpLmZpbHRlcihCNil9Y29uc3QgTmk9MCxqaT0xLFBvPTIsZmw9MyxYbD00LEoxPTUsR289NixOYz03LEJsPTgscWY9OSxRMT0xMCxabz0xMSxnMj0xMixfbT0xMyxVcz0xNCxKbD0x'@;
put 'NSxuaD0xNixyaD0xNyx5Yz0xOCx2Mj0xOSxlZj0yMCx0Zj0yMSx3MD0yMixhcD0yMyxscD0yNCx5YT0yNSx3bT0xLHo2PTIsQzA9NyxvaD05LGZ1PTExO2Z1bmN0aW9uIE91KGwpe3JldHVybiBBcnJheS5pc0FycmF5KGwpJiYib2JqZWN0Ij09dHlwZW9mIGxbd21dfWZ1bmN0aW9uIGR1KGwp'@;
put 'e3JldHVybiBBcnJheS5pc0FycmF5KGwpJiYhMD09PWxbd21dfWZ1bmN0aW9uIEpmKGwpe3JldHVybiAwIT0oNCZsLmZsYWdzKX1mdW5jdGlvbiBuZihsKXtyZXR1cm4gbC5jb21wb25lbnRPZmZzZXQ+LTF9ZnVuY3Rpb24geTIobCl7cmV0dXJuIDE9PSgxJmwuZmxhZ3MpfWZ1bmN0aW9uIGFj'@;
put 'KGwpe3JldHVybiEhbC50ZW1wbGF0ZX1mdW5jdGlvbiBDbShsKXtyZXR1cm4gMCE9KDUxMiZsW1BvXSl9ZnVuY3Rpb24gYWYobCxjKXtyZXR1cm4gbC5oYXNPd25Qcm9wZXJ0eShiMCk/bFtiMF06bnVsbH1sZXQgdGQ9UGkuV2Vha1JlZj8/Y2xhc3MgZTF7Y29uc3RydWN0b3IoYyl7dGhpcy5y'@;
put 'ZWY9Y31kZXJlZigpe3JldHVybiB0aGlzLnJlZn19LCQ2PTAsVmM9bnVsbCxzcD0hMTtmdW5jdGlvbiBicyhsKXtjb25zdCBjPVZjO3JldHVybiBWYz1sLGN9Y2xhc3MgdXB7Y29uc3RydWN0b3IoKXt0aGlzLmlkPSQ2KyssdGhpcy5yZWY9ZnVuY3Rpb24gYWgobCl7cmV0dXJuIG5ldyB0ZChs'@;
put 'KX0odGhpcyksdGhpcy5wcm9kdWNlcnM9bmV3IE1hcCx0aGlzLmNvbnN1bWVycz1uZXcgTWFwLHRoaXMudHJhY2tpbmdWZXJzaW9uPTAsdGhpcy52YWx1ZVZlcnNpb249MH1jb25zdW1lclBvbGxQcm9kdWNlcnNGb3JDaGFuZ2UoKXtmb3IoY29uc3RbYyxhXW9mIHRoaXMucHJvZHVjZXJzKXtj'@;
put 'b25zdCBmPWEucHJvZHVjZXJOb2RlLmRlcmVmKCk7aWYobnVsbCE9ZiYmYS5hdFRyYWNraW5nVmVyc2lvbj09PXRoaXMudHJhY2tpbmdWZXJzaW9uKXtpZihmLnByb2R1Y2VyUG9sbFN0YXR1cyhhLnNlZW5WYWx1ZVZlcnNpb24pKXJldHVybiEwfWVsc2UgdGhpcy5wcm9kdWNlcnMuZGVsZXRl'@;
put 'KGMpLGY/LmNvbnN1bWVycy5kZWxldGUodGhpcy5pZCl9cmV0dXJuITF9cHJvZHVjZXJNYXlIYXZlQ2hhbmdlZCgpe2NvbnN0IGM9c3A7c3A9ITA7dHJ5e2Zvcihjb25zdFthLGZdb2YgdGhpcy5jb25zdW1lcnMpe2NvbnN0IGQ9Zi5jb25zdW1lck5vZGUuZGVyZWYoKTtudWxsIT1kJiZkLnRy'@;
put 'YWNraW5nVmVyc2lvbj09PWYuYXRUcmFja2luZ1ZlcnNpb24/ZC5vbkNvbnN1bWVyRGVwZW5kZW5jeU1heUhhdmVDaGFuZ2VkKCk6KHRoaXMuY29uc3VtZXJzLmRlbGV0ZShhKSxkPy5wcm9kdWNlcnMuZGVsZXRlKHRoaXMuaWQpKX19ZmluYWxseXtzcD1jfX1wcm9kdWNlckFjY2Vzc2VkKCl7'@;
put 'aWYoc3ApdGhyb3cgbmV3IEVycm9yKCIiKTtpZihudWxsPT09VmMpcmV0dXJuO2xldCBjPVZjLnByb2R1Y2Vycy5nZXQodGhpcy5pZCk7dm9pZCAwPT09Yz8oYz17Y29uc3VtZXJOb2RlOlZjLnJlZixwcm9kdWNlck5vZGU6dGhpcy5yZWYsc2VlblZhbHVlVmVyc2lvbjp0aGlzLnZhbHVlVmVy'@;
put 'c2lvbixhdFRyYWNraW5nVmVyc2lvbjpWYy50cmFja2luZ1ZlcnNpb259LFZjLnByb2R1Y2Vycy5zZXQodGhpcy5pZCxjKSx0aGlzLmNvbnN1bWVycy5zZXQoVmMuaWQsYykpOihjLnNlZW5WYWx1ZVZlcnNpb249dGhpcy52YWx1ZVZlcnNpb24sYy5hdFRyYWNraW5nVmVyc2lvbj1WYy50cmFj'@;
put 'a2luZ1ZlcnNpb24pfWdldCBoYXNQcm9kdWNlcnMoKXtyZXR1cm4gdGhpcy5wcm9kdWNlcnMuc2l6ZT4wfWdldCBwcm9kdWNlclVwZGF0ZXNBbGxvd2VkKCl7cmV0dXJuITEhPT1WYz8uY29uc3VtZXJBbGxvd1NpZ25hbFdyaXRlc31wcm9kdWNlclBvbGxTdGF0dXMoYyl7cmV0dXJuIHRoaXMu'@;
put 'dmFsdWVWZXJzaW9uIT09Y3x8KHRoaXMub25Qcm9kdWNlclVwZGF0ZVZhbHVlVmVyc2lvbigpLHRoaXMudmFsdWVWZXJzaW9uIT09Yyl9fWxldCBqYz1udWxsO2Z1bmN0aW9uIGIyKGwpe2NvbnN0IGM9YnMobnVsbCk7dHJ5e3JldHVybiBsKCl9ZmluYWxseXticyhjKX19Y29uc3QgbjE9KCk9'@;
put 'Pnt9O2NsYXNzIHE2IGV4dGVuZHMgdXB7Y29uc3RydWN0b3IoYyxhLGYpe3N1cGVyKCksdGhpcy53YXRjaD1jLHRoaXMuc2NoZWR1bGU9YSx0aGlzLmRpcnR5PSExLHRoaXMuY2xlYW51cEZuPW4xLHRoaXMucmVnaXN0ZXJPbkNsZWFudXA9ZD0+e3RoaXMuY2xlYW51cEZuPWR9LHRoaXMuY29u'@;
put 'c3VtZXJBbGxvd1NpZ25hbFdyaXRlcz1mfW5vdGlmeSgpe3RoaXMuZGlydHl8fHRoaXMuc2NoZWR1bGUodGhpcyksdGhpcy5kaXJ0eT0hMH1vbkNvbnN1bWVyRGVwZW5kZW5jeU1heUhhdmVDaGFuZ2VkKCl7dGhpcy5ub3RpZnkoKX1vblByb2R1Y2VyVXBkYXRlVmFsdWVWZXJzaW9uKCl7fXJ1'@;
put 'bigpe2lmKHRoaXMuZGlydHk9ITEsMCE9PXRoaXMudHJhY2tpbmdWZXJzaW9uJiYhdGhpcy5jb25zdW1lclBvbGxQcm9kdWNlcnNGb3JDaGFuZ2UoKSlyZXR1cm47Y29uc3QgYz1icyh0aGlzKTt0aGlzLnRyYWNraW5nVmVyc2lvbisrO3RyeXt0aGlzLmNsZWFudXBGbigpLHRoaXMuY2xlYW51'@;
put 'cEZuPW4xLHRoaXMud2F0Y2godGhpcy5yZWdpc3Rlck9uQ2xlYW51cCl9ZmluYWxseXticyhjKX19Y2xlYW51cCgpe3RoaXMuY2xlYW51cEZuKCl9fWNsYXNzIEpie2NvbnN0cnVjdG9yKGMsYSxmKXt0aGlzLnByZXZpb3VzVmFsdWU9Yyx0aGlzLmN1cnJlbnRWYWx1ZT1hLHRoaXMuZmlyc3RD'@;
put 'aGFuZ2U9Zn1pc0ZpcnN0Q2hhbmdlKCl7cmV0dXJuIHRoaXMuZmlyc3RDaGFuZ2V9fWZ1bmN0aW9uIGJsKCl7cmV0dXJuIEVtfWZ1bmN0aW9uIEVtKGwpe3JldHVybiBsLnR5cGUucHJvdG90eXBlLm5nT25DaGFuZ2VzJiYobC5zZXRJbnB1dD1lXyksUWJ9ZnVuY3Rpb24gUWIoKXtjb25zdCBs'@;
put 'PVg2KHRoaXMpLGM9bD8uY3VycmVudDtpZihjKXtjb25zdCBhPWwucHJldmlvdXM7aWYoYT09PWljKWwucHJldmlvdXM9YztlbHNlIGZvcihsZXQgZiBpbiBjKWFbZl09Y1tmXTtsLmN1cnJlbnQ9bnVsbCx0aGlzLm5nT25DaGFuZ2VzKGMpfX1mdW5jdGlvbiBlXyhsLGMsYSxmKXtjb25zdCBk'@;
put 'PXRoaXMuZGVjbGFyZWRJbnB1dHNbYV0saD1YNihsKXx8ZnVuY3Rpb24gcjEobCxjKXtyZXR1cm4gbFtZc109Y30obCx7cHJldmlvdXM6aWMsY3VycmVudDpudWxsfSksbT1oLmN1cnJlbnR8fChoLmN1cnJlbnQ9e30pLF89aC5wcmV2aW91cyxPPV9bZF07bVtkXT1uZXcgSmIoTyYmTy5jdXJy'@;
put 'ZW50VmFsdWUsYyxfPT09aWMpLGxbZl09Y31ibC5uZ0luaGVyaXQ9ITA7Y29uc3QgWXM9Il9fbmdTaW1wbGVDaGFuZ2VzX18iO2Z1bmN0aW9uIFg2KGwpe3JldHVybiBsW1lzXXx8bnVsbH1jb25zdCBTMD1mdW5jdGlvbihsLGMsYSl7fTtmdW5jdGlvbiBfbChsKXtmb3IoO0FycmF5LmlzQXJy'@;
put 'YXkobCk7KWw9bFtOaV07cmV0dXJuIGx9ZnVuY3Rpb24gbzEobCxjKXtyZXR1cm4gX2woY1tsXSl9ZnVuY3Rpb24gV3MobCxjKXtyZXR1cm4gX2woY1tsLmluZGV4XSl9ZnVuY3Rpb24gQWUobCxjKXtyZXR1cm4gbC5kYXRhW2NdfWZ1bmN0aW9uIEplKGwsYyl7cmV0dXJuIGxbY119ZnVuY3Rp'@;
put 'b24gYnQobCxjKXtjb25zdCBhPWNbbF07cmV0dXJuIE91KGEpP2E6YVtOaV19ZnVuY3Rpb24gUHIobCxjKXtyZXR1cm4gbnVsbD09Yz9udWxsOmxbY119ZnVuY3Rpb24gU28obCl7bFtyaF09MH1mdW5jdGlvbiByYShsKXsxMDI0JmxbUG9dfHwobFtQb118PTEwMjQsaHUobCwxKSl9ZnVuY3Rp'@;
put 'b24gWWEobCl7MTAyNCZsW1BvXSYmKGxbUG9dJj0tMTAyNSxodShsLC0xKSl9ZnVuY3Rpb24gaHUobCxjKXtsZXQgYT1sW2ZsXTtpZihudWxsPT09YSlyZXR1cm47YVtKMV0rPWM7bGV0IGY9YTtmb3IoYT1hW2ZsXTtudWxsIT09YSYmKDE9PT1jJiYxPT09ZltKMV18fC0xPT09YyYmMD09PWZb'@;
put 'SjFdKTspYVtKMV0rPWMsZj1hLGE9YVtmbF19Y29uc3QgQm89e2xGcmFtZTpDeChudWxsKSxiaW5kaW5nc0VuYWJsZWQ6ITAsc2tpcEh5ZHJhdGlvblJvb3RUTm9kZTpudWxsfTtmdW5jdGlvbiBoeCgpe3JldHVybiBCby5iaW5kaW5nc0VuYWJsZWR9ZnVuY3Rpb24gaHAoKXtyZXR1cm4gbnVs'@;
put 'bCE9PUJvLnNraXBIeWRyYXRpb25Sb290VE5vZGV9ZnVuY3Rpb24gUXIoKXtyZXR1cm4gQm8ubEZyYW1lLmxWaWV3fWZ1bmN0aW9uIElhKCl7cmV0dXJuIEJvLmxGcmFtZS50Vmlld31mdW5jdGlvbiBVdChsKXtyZXR1cm4gQm8ubEZyYW1lLmNvbnRleHRMVmlldz1sLGxbQmxdfWZ1bmN0aW9u'@;
put 'IFp0KGwpe3JldHVybiBCby5sRnJhbWUuY29udGV4dExWaWV3PW51bGwsbH1mdW5jdGlvbiBEdSgpe2xldCBsPXB4KCk7Zm9yKDtudWxsIT09bCYmNjQ9PT1sLnR5cGU7KWw9bC5wYXJlbnQ7cmV0dXJuIGx9ZnVuY3Rpb24gcHgoKXtyZXR1cm4gQm8ubEZyYW1lLmN1cnJlbnRUTm9kZX1mdW5j'@;
put 'dGlvbiBsZihsLGMpe2NvbnN0IGE9Qm8ubEZyYW1lO2EuY3VycmVudFROb2RlPWwsYS5pc1BhcmVudD1jfWZ1bmN0aW9uIHRfKCl7cmV0dXJuIEJvLmxGcmFtZS5pc1BhcmVudH1mdW5jdGlvbiBlOCgpe0JvLmxGcmFtZS5pc1BhcmVudD0hMX1mdW5jdGlvbiBZdSgpe2NvbnN0IGw9Qm8ubEZy'@;
put 'YW1lO2xldCBjPWwuYmluZGluZ1Jvb3RJbmRleDtyZXR1cm4tMT09PWMmJihjPWwuYmluZGluZ1Jvb3RJbmRleD1sLnRWaWV3LmJpbmRpbmdTdGFydEluZGV4KSxjfWZ1bmN0aW9uIG5kKCl7cmV0dXJuIEJvLmxGcmFtZS5iaW5kaW5nSW5kZXh9ZnVuY3Rpb24gcHAoKXtyZXR1cm4gQm8ubEZy'@;
put 'YW1lLmJpbmRpbmdJbmRleCsrfWZ1bmN0aW9uIHNmKGwpe2NvbnN0IGM9Qm8ubEZyYW1lLGE9Yy5iaW5kaW5nSW5kZXg7cmV0dXJuIGMuYmluZGluZ0luZGV4PWMuYmluZGluZ0luZGV4K2wsYX1mdW5jdGlvbiBCRihsLGMpe2NvbnN0IGE9Qm8ubEZyYW1lO2EuYmluZGluZ0luZGV4PWEuYmlu'@;
put 'ZGluZ1Jvb3RJbmRleD1sLHQ4KGMpfWZ1bmN0aW9uIHQ4KGwpe0JvLmxGcmFtZS5jdXJyZW50RGlyZWN0aXZlSW5kZXg9bH1mdW5jdGlvbiByXyhsKXtjb25zdCBjPUJvLmxGcmFtZS5jdXJyZW50RGlyZWN0aXZlSW5kZXg7cmV0dXJuLTE9PT1jP251bGw6bFtjXX1mdW5jdGlvbiB5eCgpe3Jl'@;
put 'dHVybiBCby5sRnJhbWUuY3VycmVudFF1ZXJ5SW5kZXh9ZnVuY3Rpb24gaV8obCl7Qm8ubEZyYW1lLmN1cnJlbnRRdWVyeUluZGV4PWx9ZnVuY3Rpb24gYngobCl7Y29uc3QgYz1sW2ppXTtyZXR1cm4gMj09PWMudHlwZT9jLmRlY2xUTm9kZToxPT09Yy50eXBlP2xbR29dOm51bGx9ZnVuY3Rp'@;
put 'b24gX3gobCxjLGEpe2lmKGEmYWEuU2tpcFNlbGYpe2xldCBkPWMsaD1sO2Zvcig7IShkPWQucGFyZW50LG51bGwhPT1kfHxhJmFhLkhvc3R8fChkPWJ4KGgpLG51bGw9PT1kfHwoaD1oW1VzXSwxMCZkLnR5cGUpKSk7KTtpZihudWxsPT09ZClyZXR1cm4hMTtjPWQsbD1ofWNvbnN0IGY9Qm8u'@;
put 'bEZyYW1lPXd4KCk7cmV0dXJuIGYuY3VycmVudFROb2RlPWMsZi5sVmlldz1sLCEwfWZ1bmN0aW9uIG9fKGwpe2NvbnN0IGM9d3goKSxhPWxbamldO0JvLmxGcmFtZT1jLGMuY3VycmVudFROb2RlPWEuZmlyc3RDaGlsZCxjLmxWaWV3PWwsYy50Vmlldz1hLGMuY29udGV4dExWaWV3PWwsYy5i'@;
put 'aW5kaW5nSW5kZXg9YS5iaW5kaW5nU3RhcnRJbmRleCxjLmluSTE4bj0hMX1mdW5jdGlvbiB3eCgpe2NvbnN0IGw9Qm8ubEZyYW1lLGM9bnVsbD09PWw/bnVsbDpsLmNoaWxkO3JldHVybiBudWxsPT09Yz9DeChsKTpjfWZ1bmN0aW9uIEN4KGwpe2NvbnN0IGM9e2N1cnJlbnRUTm9kZTpudWxs'@;
put 'LGlzUGFyZW50OiEwLGxWaWV3Om51bGwsdFZpZXc6bnVsbCxzZWxlY3RlZEluZGV4Oi0xLGNvbnRleHRMVmlldzpudWxsLGVsZW1lbnREZXB0aENvdW50OjAsY3VycmVudE5hbWVzcGFjZTpudWxsLGN1cnJlbnREaXJlY3RpdmVJbmRleDotMSxiaW5kaW5nUm9vdEluZGV4Oi0xLGJpbmRpbmdJ'@;
put 'bmRleDotMSxjdXJyZW50UXVlcnlJbmRleDowLHBhcmVudDpsLGNoaWxkOm51bGwsaW5JMThuOiExfTtyZXR1cm4gbnVsbCE9PWwmJihsLmNoaWxkPWMpLGN9ZnVuY3Rpb24gU3goKXtjb25zdCBsPUJvLmxGcmFtZTtyZXR1cm4gQm8ubEZyYW1lPWwucGFyZW50LGwuY3VycmVudFROb2RlPW51'@;
put 'bGwsbC5sVmlldz1udWxsLGx9Y29uc3QgTXg9U3g7ZnVuY3Rpb24gbjgoKXtjb25zdCBsPVN4KCk7bC5pc1BhcmVudD0hMCxsLnRWaWV3PW51bGwsbC5zZWxlY3RlZEluZGV4PS0xLGwuY29udGV4dExWaWV3PW51bGwsbC5lbGVtZW50RGVwdGhDb3VudD0wLGwuY3VycmVudERpcmVjdGl2ZUlu'@;
put 'ZGV4PS0xLGwuY3VycmVudE5hbWVzcGFjZT1udWxsLGwuYmluZGluZ1Jvb3RJbmRleD0tMSxsLmJpbmRpbmdJbmRleD0tMSxsLmN1cnJlbnRRdWVyeUluZGV4PTB9ZnVuY3Rpb24gbGMoKXtyZXR1cm4gQm8ubEZyYW1lLnNlbGVjdGVkSW5kZXh9ZnVuY3Rpb24gXzIobCl7Qm8ubEZyYW1lLnNl'@;
put 'bGVjdGVkSW5kZXg9bH1mdW5jdGlvbiBRbCgpe2NvbnN0IGw9Qm8ubEZyYW1lO3JldHVybiBBZShsLnRWaWV3LGwuc2VsZWN0ZWRJbmRleCl9bGV0IEV4PSEwO2Z1bmN0aW9uIHI4KCl7cmV0dXJuIEV4fWZ1bmN0aW9uIHJkKGwpe0V4PWx9ZnVuY3Rpb24gaTgobCxjKXtmb3IobGV0IGE9Yy5k'@;
put 'aXJlY3RpdmVTdGFydCxmPWMuZGlyZWN0aXZlRW5kO2E8ZjthKyspe2NvbnN0IGg9bC5kYXRhW2FdLnR5cGUucHJvdG90eXBlLHtuZ0FmdGVyQ29udGVudEluaXQ6bSxuZ0FmdGVyQ29udGVudENoZWNrZWQ6XyxuZ0FmdGVyVmlld0luaXQ6TyxuZ0FmdGVyVmlld0NoZWNrZWQ6WCxuZ09uRGVz'@;
put 'dHJveTphZX09aDttJiYobC5jb250ZW50SG9va3M/Pz1bXSkucHVzaCgtYSxtKSxfJiYoKGwuY29udGVudEhvb2tzPz89W10pLnB1c2goYSxfKSwobC5jb250ZW50Q2hlY2tIb29rcz8/PVtdKS5wdXNoKGEsXykpLE8mJihsLnZpZXdIb29rcz8/PVtdKS5wdXNoKC1hLE8pLFgmJigobC52aWV3'@;
put 'SG9va3M/Pz1bXSkucHVzaChhLFgpLChsLnZpZXdDaGVja0hvb2tzPz89W10pLnB1c2goYSxYKSksbnVsbCE9YWUmJihsLmRlc3Ryb3lIb29rcz8/PVtdKS5wdXNoKGEsYWUpfX1mdW5jdGlvbiBvOChsLGMsYSl7eHgobCxjLDMsYSl9ZnVuY3Rpb24gYTgobCxjLGEsZil7KDMmbFtQb10pPT09'@;
put 'YSYmeHgobCxjLGEsZil9ZnVuY3Rpb24gYV8obCxjKXtsZXQgYT1sW1BvXTsoMyZhKT09PWMmJihhJj04MTkxLGErPTEsbFtQb109YSl9ZnVuY3Rpb24geHgobCxjLGEsZil7Y29uc3QgaD1mPz8tMSxtPWMubGVuZ3RoLTE7bGV0IF89MDtmb3IobGV0IE89dm9pZCAwIT09Zj82NTUzNSZsW3Jo'@;
put 'XTowO088bTtPKyspaWYoIm51bWJlciI9PXR5cGVvZiBjW08rMV0pe2lmKF89Y1tPXSxudWxsIT1mJiZfPj1mKWJyZWFrfWVsc2UgY1tPXTwwJiYobFtyaF0rPTY1NTM2KSwoXzxofHwtMT09aCkmJigkRihsLGEsYyxPKSxsW3JoXT0oNDI5NDkwMTc2MCZsW3JoXSkrTysyKSxPKyt9ZnVuY3Rp'@;
put 'b24gQXgobCxjKXtTMCg0LGwsYyk7Y29uc3QgYT1icyhudWxsKTt0cnl7Yy5jYWxsKGwpfWZpbmFsbHl7YnMoYSksUzAoNSxsLGMpfX1mdW5jdGlvbiAkRihsLGMsYSxmKXtjb25zdCBkPWFbZl08MCxoPWFbZisxXSxfPWxbZD8tYVtmXTphW2ZdXTtkP2xbUG9dPj4xMzxsW3JoXT4+MTYmJigz'@;
put 'JmxbUG9dKT09PWMmJihsW1BvXSs9ODE5MixBeChfLGgpKTpBeChfLGgpfWNvbnN0IG1wPS0xO2NsYXNzIE9te2NvbnN0cnVjdG9yKGMsYSxmKXt0aGlzLmZhY3Rvcnk9Yyx0aGlzLnJlc29sdmluZz0hMSx0aGlzLmNhblNlZVZpZXdQcm92aWRlcnM9YSx0aGlzLmluamVjdEltcGw9Zn19ZnVu'@;
put 'Y3Rpb24gVHgobCl7cmV0dXJuIGwhPT1tcH1mdW5jdGlvbiBzaChsKXtyZXR1cm4gMzI3NjcmbH1mdW5jdGlvbiBncChsLGMpe2xldCBhPWZ1bmN0aW9uIHNfKGwpe3JldHVybiBsPj4xNn0obCksZj1jO2Zvcig7YT4wOylmPWZbVXNdLGEtLTtyZXR1cm4gZn1sZXQgRG09ITA7ZnVuY3Rpb24g'@;
put 'dWYobCl7Y29uc3QgYz1EbTtyZXR1cm4gRG09bCxjfWNvbnN0IGw4PTI1NSxPeD01O2xldCBzOD0wO2NvbnN0IGNmPXt9O2Z1bmN0aW9uIHU4KGwsYyl7Y29uc3QgYT1EeChsLGMpO2lmKC0xIT09YSlyZXR1cm4gYTtjb25zdCBmPWNbamldO2YuZmlyc3RDcmVhdGVQYXNzJiYobC5pbmplY3Rv'@;
put 'ckluZGV4PWMubGVuZ3RoLHcyKGYuZGF0YSxsKSx3MihjLG51bGwpLHcyKGYuYmx1ZXByaW50LG51bGwpKTtjb25zdCBkPWNfKGwsYyksaD1sLmluamVjdG9ySW5kZXg7aWYoVHgoZCkpe2NvbnN0IG09c2goZCksXz1ncChkLGMpLE89X1tqaV0uZGF0YTtmb3IobGV0IFg9MDtYPDg7WCsrKWNb'@;
put 'aCtYXT1fW20rWF18T1ttK1hdfXJldHVybiBjW2grOF09ZCxofWZ1bmN0aW9uIHcyKGwsYyl7bC5wdXNoKDAsMCwwLDAsMCwwLDAsMCxjKX1mdW5jdGlvbiBEeChsLGMpe3JldHVybi0xPT09bC5pbmplY3RvckluZGV4fHxsLnBhcmVudCYmbC5wYXJlbnQuaW5qZWN0b3JJbmRleD09PWwuaW5q'@;
put 'ZWN0b3JJbmRleHx8bnVsbD09PWNbbC5pbmplY3RvckluZGV4KzhdPy0xOmwuaW5qZWN0b3JJbmRleH1mdW5jdGlvbiBjXyhsLGMpe2lmKGwucGFyZW50JiYtMSE9PWwucGFyZW50LmluamVjdG9ySW5kZXgpcmV0dXJuIGwucGFyZW50LmluamVjdG9ySW5kZXg7bGV0IGE9MCxmPW51bGwsZD1j'@;
put 'O2Zvcig7bnVsbCE9PWQ7KXtpZihmPU54KGQpLG51bGw9PT1mKXJldHVybiBtcDtpZihhKyssZD1kW1VzXSwtMSE9PWYuaW5qZWN0b3JJbmRleClyZXR1cm4gZi5pbmplY3RvckluZGV4fGE8PDE2fXJldHVybiBtcH1mdW5jdGlvbiBmXyhsLGMsYSl7IWZ1bmN0aW9uIHVfKGwsYyxhKXtsZXQg'@;
put 'Zjsic3RyaW5nIj09dHlwZW9mIGE/Zj1hLmNoYXJDb2RlQXQoMCl8fDA6YS5oYXNPd25Qcm9wZXJ0eShoMikmJihmPWFbaDJdKSxudWxsPT1mJiYoZj1hW2gyXT1zOCsrKTtjb25zdCBkPWYmbDg7Yy5kYXRhW2wrKGQ+Pk94KV18PTE8PGR9KGwsYyxhKX1mdW5jdGlvbiBJeChsLGMsYSl7aWYo'@;
put 'YSZhYS5PcHRpb25hbHx8dm9pZCAwIT09bClyZXR1cm4gbDtubygpfWZ1bmN0aW9uIFJ4KGwsYyxhLGYpe2lmKGEmYWEuT3B0aW9uYWwmJnZvaWQgMD09PWYmJihmPW51bGwpLCEoYSYoYWEuU2VsZnxhYS5Ib3N0KSkpe2NvbnN0IGQ9bFtxZl0saD1waSh2b2lkIDApO3RyeXtyZXR1cm4gZD9k'@;
put 'LmdldChjLGYsYSZhYS5PcHRpb25hbCk6S2EoYyxmLGEmYWEuT3B0aW9uYWwpfWZpbmFsbHl7cGkoaCl9fXJldHVybiBJeChmLDAsYSl9ZnVuY3Rpb24gTHgobCxjLGEsZj1hYS5EZWZhdWx0LGQpe2lmKG51bGwhPT1sKXtpZigyMDQ4JmNbUG9dJiYhKGYmYWEuU2VsZikpe2NvbnN0IG09ZnVu'@;
put 'Y3Rpb24gdEgobCxjLGEsZixkKXtsZXQgaD1sLG09Yztmb3IoO251bGwhPT1oJiZudWxsIT09bSYmMjA0OCZtW1BvXSYmISg1MTImbVtQb10pOyl7Y29uc3QgXz1QeChoLG0sYSxmfGFhLlNlbGYsY2YpO2lmKF8hPT1jZilyZXR1cm4gXztsZXQgTz1oLnBhcmVudDtpZighTyl7Y29uc3QgWD1t'@;
put 'W2VmXTtpZihYKXtjb25zdCBhZT1YLmdldChhLGNmLGYpO2lmKGFlIT09Y2YpcmV0dXJuIGFlfU89TngobSksbT1tW1VzXX1oPU99cmV0dXJuIGR9KGwsYyxhLGYsY2YpO2lmKG0hPT1jZilyZXR1cm4gbX1jb25zdCBoPVB4KGwsYyxhLGYsY2YpO2lmKGghPT1jZilyZXR1cm4gaH1yZXR1cm4g'@;
put 'UngoYyxhLGYsZCl9ZnVuY3Rpb24gUHgobCxjLGEsZixkKXtjb25zdCBoPWZ1bmN0aW9uIFFGKGwpe2lmKCJzdHJpbmciPT10eXBlb2YgbClyZXR1cm4gbC5jaGFyQ29kZUF0KDApfHwwO2NvbnN0IGM9bC5oYXNPd25Qcm9wZXJ0eShoMik/bFtoMl06dm9pZCAwO3JldHVybiJudW1iZXIiPT10'@;
put 'eXBlb2YgYz9jPj0wP2MmbDg6ZUg6Y30oYSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGgpe2lmKCFfeChjLGwsZikpcmV0dXJuIGYmYWEuSG9zdD9JeChkLDAsZik6UngoYyxhLGYsZCk7dHJ5e2NvbnN0IG09aChmKTtpZihudWxsIT1tfHxmJmFhLk9wdGlvbmFsKXJldHVybiBtO25vKCl9Zmlu'@;
put 'YWxseXtNeCgpfX1lbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgaCl7bGV0IG09bnVsbCxfPUR4KGwsYyksTz1tcCxYPWYmYWEuSG9zdD9jW0psXVtHb106bnVsbDtmb3IoKC0xPT09X3x8ZiZhYS5Ta2lwU2VsZikmJihPPS0xPT09Xz9jXyhsLGMpOmNbXys4XSxPIT09bXAmJkh4KGYsITEpPyht'@;
put 'PWNbamldLF89c2goTyksYz1ncChPLGMpKTpfPS0xKTstMSE9PV87KXtjb25zdCBhZT1jW2ppXTtpZihGeChoLF8sYWUuZGF0YSkpe2NvbnN0IHBlPUpGKF8sYyxhLG0sZixYKTtpZihwZSE9PWNmKXJldHVybiBwZX1PPWNbXys4XSxPIT09bXAmJkh4KGYsY1tqaV0uZGF0YVtfKzhdPT09WCkm'@;
put 'JkZ4KGgsXyxjKT8obT1hZSxfPXNoKE8pLGM9Z3AoTyxjKSk6Xz0tMX19cmV0dXJuIGR9ZnVuY3Rpb24gSkYobCxjLGEsZixkLGgpe2NvbnN0IG09Y1tqaV0sXz1tLmRhdGFbbCs4XSxhZT1jOChfLG0sYSxudWxsPT1mP25mKF8pJiZEbTpmIT1tJiYwIT0oMyZfLnR5cGUpLGQmYWEuSG9zdCYm'@;
put 'aD09PV8pO3JldHVybiBudWxsIT09YWU/QzIoYyxtLGFlLF8pOmNmfWZ1bmN0aW9uIGM4KGwsYyxhLGYsZCl7Y29uc3QgaD1sLnByb3ZpZGVySW5kZXhlcyxtPWMuZGF0YSxfPTEwNDg1NzUmaCxPPWwuZGlyZWN0aXZlU3RhcnQsYWU9aD4+MjAsYmU9ZD9fK2FlOmwuZGlyZWN0aXZlRW5kO2Zv'@;
put 'cihsZXQgeGU9Zj9fOl8rYWU7eGU8YmU7eGUrKyl7Y29uc3QgVmU9bVt4ZV07aWYoeGU8TyYmYT09PVZlfHx4ZT49TyYmVmUudHlwZT09PWEpcmV0dXJuIHhlfWlmKGQpe2NvbnN0IHhlPW1bT107aWYoeGUmJmFjKHhlKSYmeGUudHlwZT09PWEpcmV0dXJuIE99cmV0dXJuIG51bGx9ZnVuY3Rp'@;
put 'b24gQzIobCxjLGEsZil7bGV0IGQ9bFthXTtjb25zdCBoPWMuZGF0YTtpZihmdW5jdGlvbiBLRihsKXtyZXR1cm4gbCBpbnN0YW5jZW9mIE9tfShkKSl7Y29uc3QgbT1kO20ucmVzb2x2aW5nJiZmdW5jdGlvbiBnMChsLGMpe2NvbnN0IGE9Yz9gLiBEZXBlbmRlbmN5IHBhdGg6ICR7Yy5qb2lu'@;
put 'KCIgPiAiKX0gPiAke2x9YDoiIjt0aHJvdyBuZXcgSXIoLTIwMCxgQ2lyY3VsYXIgZGVwZW5kZW5jeSBpbiBESSBkZXRlY3RlZCBmb3IgJHtsfSR7YX1gKX0oZnVuY3Rpb24gRWEobCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGw/bC5uYW1lfHxsLnRvU3RyaW5nKCk6Im9iamVjdCI9PXR5'@;
put 'cGVvZiBsJiZudWxsIT1sJiYiZnVuY3Rpb24iPT10eXBlb2YgbC50eXBlP2wudHlwZS5uYW1lfHxsLnR5cGUudG9TdHJpbmcoKTpJbyhsKX0oaFthXSkpO2NvbnN0IF89dWYobS5jYW5TZWVWaWV3UHJvdmlkZXJzKTttLnJlc29sdmluZz0hMDtjb25zdCBPPW0uaW5qZWN0SW1wbD9waShtLmlu'@;
put 'amVjdEltcGwpOm51bGw7X3gobCxmLGFhLkRlZmF1bHQpO3RyeXtkPWxbYV09bS5mYWN0b3J5KHZvaWQgMCxoLGwsZiksYy5maXJzdENyZWF0ZVBhc3MmJmE+PWYuZGlyZWN0aXZlU3RhcnQmJmZ1bmN0aW9uIEdGKGwsYyxhKXtjb25zdHtuZ09uQ2hhbmdlczpmLG5nT25Jbml0OmQsbmdEb0No'@;
put 'ZWNrOmh9PWMudHlwZS5wcm90b3R5cGU7aWYoZil7Y29uc3QgbT1FbShjKTsoYS5wcmVPcmRlckhvb2tzPz89W10pLnB1c2gobCxtKSwoYS5wcmVPcmRlckNoZWNrSG9va3M/Pz1bXSkucHVzaChsLG0pfWQmJihhLnByZU9yZGVySG9va3M/Pz1bXSkucHVzaCgwLWwsZCksaCYmKChhLnByZU9y'@;
put 'ZGVySG9va3M/Pz1bXSkucHVzaChsLGgpLChhLnByZU9yZGVyQ2hlY2tIb29rcz8/PVtdKS5wdXNoKGwsaCkpfShhLGhbYV0sYyl9ZmluYWxseXtudWxsIT09TyYmcGkoTyksdWYoXyksbS5yZXNvbHZpbmc9ITEsTXgoKX19cmV0dXJuIGR9ZnVuY3Rpb24gRngobCxjLGEpe3JldHVybiEhKGFb'@;
put 'YysobD4+T3gpXSYxPDxsKX1mdW5jdGlvbiBIeChsLGMpe3JldHVybiEobCZhYS5TZWxmfHxsJmFhLkhvc3QmJmMpfWNsYXNzIHZwe2NvbnN0cnVjdG9yKGMsYSl7dGhpcy5fdE5vZGU9Yyx0aGlzLl9sVmlldz1hfWdldChjLGEsZil7cmV0dXJuIEx4KHRoaXMuX3ROb2RlLHRoaXMuX2xWaWV3'@;
put 'LGMseTAoZiksYSl9fWZ1bmN0aW9uIGVIKCl7cmV0dXJuIG5ldyB2cChEdSgpLFFyKCkpfWZ1bmN0aW9uIHhsKGwpe3JldHVybiB2YygoKT0+e2NvbnN0IGM9bC5wcm90b3R5cGUuY29uc3RydWN0b3IsYT1jW2IwXXx8bDEoYyksZj1PYmplY3QucHJvdG90eXBlO2xldCBkPU9iamVjdC5nZXRQ'@;
put 'cm90b3R5cGVPZihsLnByb3RvdHlwZSkuY29uc3RydWN0b3I7Zm9yKDtkJiZkIT09Zjspe2NvbnN0IGg9ZFtiMF18fGwxKGQpO2lmKGgmJmghPT1hKXJldHVybiBoO2Q9T2JqZWN0LmdldFByb3RvdHlwZU9mKGQpfXJldHVybiBoPT5uZXcgaH0pfWZ1bmN0aW9uIGwxKGwpe3JldHVybiBtMChs'@;
put 'KT8oKT0+e2NvbnN0IGM9bDEoQ28obCkpO3JldHVybiBjJiZjKCl9OmFmKGwpfWZ1bmN0aW9uIE54KGwpe2NvbnN0IGM9bFtqaV0sYT1jLnR5cGU7cmV0dXJuIDI9PT1hP2MuZGVjbFROb2RlOjE9PT1hP2xbR29dOm51bGx9ZnVuY3Rpb24gSW0obCl7cmV0dXJuIGZ1bmN0aW9uIGRfKGwsYyl7'@;
put 'aWYoImNsYXNzIj09PWMpcmV0dXJuIGwuY2xhc3NlcztpZigic3R5bGUiPT09YylyZXR1cm4gbC5zdHlsZXM7Y29uc3QgYT1sLmF0dHJzO2lmKGEpe2NvbnN0IGY9YS5sZW5ndGg7bGV0IGQ9MDtmb3IoO2Q8Zjspe2NvbnN0IGg9YVtkXTtpZih0aChoKSlicmVhaztpZigwPT09aClkKz0yO2Vs'@;
put 'c2UgaWYoIm51bWJlciI9PXR5cGVvZiBoKWZvcihkKys7ZDxmJiYic3RyaW5nIj09dHlwZW9mIGFbZF07KWQrKztlbHNle2lmKGg9PT1jKXJldHVybiBhW2QrMV07ZCs9Mn19fXJldHVybiBudWxsfShEdSgpLGwpfWNvbnN0IGJwPSJfX3BhcmFtZXRlcnNfXyI7ZnVuY3Rpb24gd3AobCxjLGEp'@;
put 'e3JldHVybiB2YygoKT0+e2NvbnN0IGY9ZnVuY3Rpb24gZjgobCl7cmV0dXJuIGZ1bmN0aW9uKC4uLmEpe2lmKGwpe2NvbnN0IGY9bCguLi5hKTtmb3IoY29uc3QgZCBpbiBmKXRoaXNbZF09ZltkXX19fShjKTtmdW5jdGlvbiBkKC4uLmgpe2lmKHRoaXMgaW5zdGFuY2VvZiBkKXJldHVybiBm'@;
put 'LmFwcGx5KHRoaXMsaCksdGhpcztjb25zdCBtPW5ldyBkKC4uLmgpO3JldHVybiBfLmFubm90YXRpb249bSxfO2Z1bmN0aW9uIF8oTyxYLGFlKXtjb25zdCBwZT1PLmhhc093blByb3BlcnR5KGJwKT9PW2JwXTpPYmplY3QuZGVmaW5lUHJvcGVydHkoTyxicCx7dmFsdWU6W119KVticF07Zm9y'@;
put 'KDtwZS5sZW5ndGg8PWFlOylwZS5wdXNoKG51bGwpO3JldHVybihwZVthZV09cGVbYWVdfHxbXSkucHVzaChtKSxPfX1yZXR1cm4gYSYmKGQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYS5wcm90b3R5cGUpKSxkLnByb3RvdHlwZS5uZ01ldGFkYXRhTmFtZT1sLGQuYW5ub3RhdGlvbkNscz1k'@;
put 'LGR9KX1jb25zdCBkOD1GdW5jdGlvbjtmdW5jdGlvbiBSbShsLGMpe2wuZm9yRWFjaChhPT5BcnJheS5pc0FycmF5KGEpP1JtKGEsYyk6YyhhKSl9ZnVuY3Rpb24gczEobCxjLGEpe2M+PWwubGVuZ3RoP2wucHVzaChhKTpsLnNwbGljZShjLDAsYSl9ZnVuY3Rpb24gaDgobCxjKXtyZXR1cm4g'@;
put 'Yz49bC5sZW5ndGgtMT9sLnBvcCgpOmwuc3BsaWNlKGMsMSlbMF19ZnVuY3Rpb24gaWQobCxjKXtjb25zdCBhPVtdO2ZvcihsZXQgZj0wO2Y8bDtmKyspYS5wdXNoKGMpO3JldHVybiBhfWZ1bmN0aW9uIEl1KGwsYyxhKXtsZXQgZj1vZChsLGMpO3JldHVybiBmPj0wP2xbMXxmXT1hOihmPX5m'@;
put 'LGZ1bmN0aW9uIGFIKGwsYyxhLGYpe2xldCBkPWwubGVuZ3RoO2lmKGQ9PWMpbC5wdXNoKGEsZik7ZWxzZSBpZigxPT09ZClsLnB1c2goZixsWzBdKSxsWzBdPWE7ZWxzZXtmb3IoZC0tLGwucHVzaChsW2QtMV0sbFtkXSk7ZD5jOylsW2RdPWxbZC0yXSxkLS07bFtjXT1hLGxbYysxXT1mfX0o'@;
put 'bCxmLGMsYSkpLGZ9ZnVuY3Rpb24gTTIobCxjKXtjb25zdCBhPW9kKGwsYyk7aWYoYT49MClyZXR1cm4gbFsxfGFdfWZ1bmN0aW9uIG9kKGwsYyl7cmV0dXJuIGZ1bmN0aW9uIGxIKGwsYyxhKXtsZXQgZj0wLGQ9bC5sZW5ndGg+PmE7Zm9yKDtkIT09Zjspe2NvbnN0IGg9ZisoZC1mPj4xKSxt'@;
put 'PWxbaDw8YV07aWYoYz09PW0pcmV0dXJuIGg8PGE7bT5jP2Q9aDpmPWgrMX1yZXR1cm5+KGQ8PGEpfShsLGMsMSl9Y29uc3QgY2g9ZjIod3AoIk9wdGlvbmFsIiksOCksRTA9ZjIod3AoIlNraXBTZWxmIiksNCk7ZnVuY3Rpb24gUzgobCl7cmV0dXJuIDEyOD09KDEyOCZsLmZsYWdzKX12YXIg'@;
put 'aGg9ZnVuY3Rpb24obCl7cmV0dXJuIGxbbC5JbXBvcnRhbnQ9MV09IkltcG9ydGFudCIsbFtsLkRhc2hDYXNlPTJdPSJEYXNoQ2FzZSIsbH0oaGh8fHt9KTtjb25zdCB2SD0vXj58Xi0+fDwhLS18LS0+fC0tIT58PCEtJC9nLHlIPS8oPHw+KS8sTTg9Ilx1MjAwYiQxXHUyMDBiIjtjb25zdCBi'@;
put 'Xz1uZXcgTWFwO2xldCBfXz0wO2NvbnN0IENfPSJfX25nQ29udGV4dF9fIjtmdW5jdGlvbiBXdShsLGMpe091KGMpPyhsW0NfXT1jW3YyXSxmdW5jdGlvbiBObShsKXtiXy5zZXQobFt2Ml0sbCl9KGMpKTpsW0NfXT1jfWxldCBTXztmdW5jdGlvbiBNXyhsLGMpe3JldHVybiBTXyhsLGMpfWZ1'@;
put 'bmN0aW9uIGptKGwpe2NvbnN0IGM9bFtmbF07cmV0dXJuIGR1KGMpP2NbZmxdOmN9ZnVuY3Rpb24gZUEobCl7cmV0dXJuIGs4KGxbZzJdKX1mdW5jdGlvbiB0QShsKXtyZXR1cm4gazgobFtYbF0pfWZ1bmN0aW9uIGs4KGwpe2Zvcig7bnVsbCE9PWwmJiFkdShsKTspbD1sW1hsXTtyZXR1cm4g'@;
put 'bH1mdW5jdGlvbiBFMihsLGMsYSxmLGQpe2lmKG51bGwhPWYpe2xldCBoLG09ITE7ZHUoZik/aD1mOk91KGYpJiYobT0hMCxmPWZbTmldKTtjb25zdCBfPV9sKGYpOzA9PT1sJiZudWxsIT09YT9udWxsPT1kP21oKGMsYSxfKTpwZihjLGEsXyxkfHxudWxsLCEwKToxPT09bCYmbnVsbCE9PWE/'@;
put 'cGYoYyxhLF8sZHx8bnVsbCwhMCk6Mj09PWw/ZnVuY3Rpb24gUjgobCxjLGEpe2NvbnN0IGY9VHAobCxjKTtmJiZmdW5jdGlvbiBVYyhsLGMsYSxmKXtsLnJlbW92ZUNoaWxkKGMsYSxmKX0obCxmLGMsYSl9KGMsXyxtKTozPT09bCYmYy5kZXN0cm95Tm9kZShfKSxudWxsIT1oJiZmdW5jdGlv'@;
put 'biBjQShsLGMsYSxmLGQpe2NvbnN0IGg9YVtDMF07aCE9PV9sKGEpJiZFMihjLGwsZixoLGQpO2ZvcihsZXQgXz1mdTtfPGEubGVuZ3RoO18rKyl7Y29uc3QgTz1hW19dO1ptKE9bamldLE8sbCxjLGYsaCl9fShjLGwsaCxhLGQpfX1mdW5jdGlvbiBrXyhsLGMpe3JldHVybiBsLmNyZWF0ZUNv'@;
put 'bW1lbnQoZnVuY3Rpb24gSG0obCl7cmV0dXJuIGwucmVwbGFjZSh2SCxjPT5jLnJlcGxhY2UoeUgsTTgpKX0oYykpfWZ1bmN0aW9uIHg4KGwsYyxhKXtyZXR1cm4gbC5jcmVhdGVFbGVtZW50KGMsYSl9ZnVuY3Rpb24gckEobCxjKXtjb25zdCBhPWxbb2hdLGY9YS5pbmRleE9mKGMpO1lhKGMp'@;
put 'LGEuc3BsaWNlKGYsMSl9ZnVuY3Rpb24geDIobCxjKXtpZihsLmxlbmd0aDw9ZnUpcmV0dXJuO2NvbnN0IGE9ZnUrYyxmPWxbYV07aWYoZil7Y29uc3QgZD1mW25oXTtudWxsIT09ZCYmZCE9PWwmJnJBKGQsZiksYz4wJiYobFthLTFdW1hsXT1mW1hsXSk7Y29uc3QgaD1oOChsLGZ1K2MpOyFm'@;
put 'dW5jdGlvbiBPSChsLGMpe1ptKGwsYyxjW1pvXSwyLG51bGwsbnVsbCksY1tOaV09bnVsbCxjW0dvXT1udWxsfShmW2ppXSxmKTtjb25zdCBtPWhbeWNdO251bGwhPT1tJiZtLmRldGFjaFZpZXcoaFtqaV0pLGZbZmxdPW51bGwsZltYbF09bnVsbCxmW1BvXSY9LTEyOX1yZXR1cm4gZn1mdW5j'@;
put 'dGlvbiBBOChsLGMpe2lmKCEoMjU2JmNbUG9dKSl7Y29uc3QgYT1jW1pvXTtjW2FwXT8uZGVzdHJveSgpLGNbbHBdPy5kZXN0cm95KCksYS5kZXN0cm95Tm9kZSYmWm0obCxjLGEsMyxudWxsLG51bGwpLGZ1bmN0aW9uIFJIKGwpe2xldCBjPWxbZzJdO2lmKCFjKXJldHVybiBUOChsW2ppXSxs'@;
put 'KTtmb3IoO2M7KXtsZXQgYT1udWxsO2lmKE91KGMpKWE9Y1tnMl07ZWxzZXtjb25zdCBmPWNbZnVdO2YmJihhPWYpfWlmKCFhKXtmb3IoO2MmJiFjW1hsXSYmYyE9PWw7KU91KGMpJiZUOChjW2ppXSxjKSxjPWNbZmxdO251bGw9PT1jJiYoYz1sKSxPdShjKSYmVDgoY1tqaV0sYyksYT1jJiZj'@;
put 'W1hsXX1jPWF9fShjKX19ZnVuY3Rpb24gVDgobCxjKXtpZighKDI1NiZjW1BvXSkpe2NbUG9dJj0tMTI5LGNbUG9dfD0yNTYsZnVuY3Rpb24gb0EobCxjKXtsZXQgYTtpZihudWxsIT1sJiZudWxsIT0oYT1sLmRlc3Ryb3lIb29rcykpZm9yKGxldCBmPTA7ZjxhLmxlbmd0aDtmKz0yKXtjb25z'@;
put 'dCBkPWNbYVtmXV07aWYoIShkIGluc3RhbmNlb2YgT20pKXtjb25zdCBoPWFbZisxXTtpZihBcnJheS5pc0FycmF5KGgpKWZvcihsZXQgbT0wO208aC5sZW5ndGg7bSs9Mil7Y29uc3QgXz1kW2hbbV1dLE89aFttKzFdO1MwKDQsXyxPKTt0cnl7Ty5jYWxsKF8pfWZpbmFsbHl7UzAoNSxfLE8p'@;
put 'fX1lbHNle1MwKDQsZCxoKTt0cnl7aC5jYWxsKGQpfWZpbmFsbHl7UzAoNSxkLGgpfX19fX0obCxjKSxmdW5jdGlvbiBpQShsLGMpe2NvbnN0IGE9bC5jbGVhbnVwLGY9Y1tOY107aWYobnVsbCE9PWEpZm9yKGxldCBoPTA7aDxhLmxlbmd0aC0xO2grPTIpaWYoInN0cmluZyI9PXR5cGVvZiBh'@;
put 'W2hdKXtjb25zdCBtPWFbaCszXTttPj0wP2ZbbV0oKTpmWy1tXS51bnN1YnNjcmliZSgpLGgrPTJ9ZWxzZSBhW2hdLmNhbGwoZlthW2grMV1dKTtudWxsIT09ZiYmKGNbTmNdPW51bGwpO2NvbnN0IGQ9Y1t0Zl07aWYobnVsbCE9PWQpe2NbdGZdPW51bGw7Zm9yKGxldCBoPTA7aDxkLmxlbmd0'@;
put 'aDtoKyspKDAsZFtoXSkoKX19KGwsYyksMT09PWNbamldLnR5cGUmJmNbWm9dLmRlc3Ryb3koKTtjb25zdCBhPWNbbmhdO2lmKG51bGwhPT1hJiZkdShjW2ZsXSkpe2EhPT1jW2ZsXSYmckEoYSxjKTtjb25zdCBmPWNbeWNdO251bGwhPT1mJiZmLmRldGFjaFZpZXcobCl9IWZ1bmN0aW9uIGJI'@;
put 'KGwpe2JfLmRlbGV0ZShsW3YyXSl9KGMpfX1mdW5jdGlvbiBBcChsLGMsYSl7cmV0dXJuIGZ1bmN0aW9uIHptKGwsYyxhKXtsZXQgZj1jO2Zvcig7bnVsbCE9PWYmJjQwJmYudHlwZTspZj0oYz1mKS5wYXJlbnQ7aWYobnVsbD09PWYpcmV0dXJuIGFbTmldO3tjb25zdHtjb21wb25lbnRPZmZz'@;
put 'ZXQ6ZH09ZjtpZihkPi0xKXtjb25zdHtlbmNhcHN1bGF0aW9uOmh9PWwuZGF0YVtmLmRpcmVjdGl2ZVN0YXJ0K2RdO2lmKGg9PT1qdS5Ob25lfHxoPT09anUuRW11bGF0ZWQpcmV0dXJuIG51bGx9cmV0dXJuIFdzKGYsYSl9fShsLGMucGFyZW50LGEpfWZ1bmN0aW9uIHBmKGwsYyxhLGYsZCl7'@;
put 'bC5pbnNlcnRCZWZvcmUoYyxhLGYsZCl9ZnVuY3Rpb24gbWgobCxjLGEpe2wuYXBwZW5kQ2hpbGQoYyxhKX1mdW5jdGlvbiBPOChsLGMsYSxmLGQpe251bGwhPT1mP3BmKGwsYyxhLGYsZCk6bWgobCxjLGEpfWZ1bmN0aW9uIFRwKGwsYyl7cmV0dXJuIGwucGFyZW50Tm9kZShjKX1mdW5jdGlv'@;
put 'biBtZihsLGMsYSl7cmV0dXJuIGxBKGwsYyxhKX1sZXQgRDgsWW0sVF8sTDgsbEE9ZnVuY3Rpb24gYUEobCxjLGEpe3JldHVybiA0MCZsLnR5cGU/V3MobCxhKTpudWxsfTtmdW5jdGlvbiBJOChsLGMsYSxmKXtjb25zdCBkPUFwKGwsZixjKSxoPWNbWm9dLF89bWYoZi5wYXJlbnR8fGNbR29d'@;
put 'LGYsYyk7aWYobnVsbCE9ZClpZihBcnJheS5pc0FycmF5KGEpKWZvcihsZXQgTz0wO088YS5sZW5ndGg7TysrKU84KGgsZCxhW09dLF8sITEpO2Vsc2UgTzgoaCxkLGEsXywhMSk7dm9pZCAwIT09RDgmJkQ4KGgsZixjLGEsZCl9ZnVuY3Rpb24gVW0obCxjKXtpZihudWxsIT09Yyl7Y29uc3Qg'@;
put 'YT1jLnR5cGU7aWYoMyZhKXJldHVybiBXcyhjLGwpO2lmKDQmYSlyZXR1cm4geF8oLTEsbFtjLmluZGV4XSk7aWYoOCZhKXtjb25zdCBmPWMuY2hpbGQ7aWYobnVsbCE9PWYpcmV0dXJuIFVtKGwsZik7e2NvbnN0IGQ9bFtjLmluZGV4XTtyZXR1cm4gZHUoZCk/eF8oLTEsZCk6X2woZCl9fWlm'@;
put 'KDMyJmEpcmV0dXJuIE1fKGMsbCkoKXx8X2wobFtjLmluZGV4XSk7e2NvbnN0IGY9c0EobCxjKTtyZXR1cm4gbnVsbCE9PWY/QXJyYXkuaXNBcnJheShmKT9mWzBdOlVtKGptKGxbSmxdKSxmKTpVbShsLGMubmV4dCl9fXJldHVybiBudWxsfWZ1bmN0aW9uIHNBKGwsYyl7cmV0dXJuIG51bGwh'@;
put 'PT1jP2xbSmxdW0dvXS5wcm9qZWN0aW9uW2MucHJvamVjdGlvbl06bnVsbH1mdW5jdGlvbiB4XyhsLGMpe2NvbnN0IGE9ZnUrbCsxO2lmKGE8Yy5sZW5ndGgpe2NvbnN0IGY9Y1thXSxkPWZbamldLmZpcnN0Q2hpbGQ7aWYobnVsbCE9PWQpcmV0dXJuIFVtKGYsZCl9cmV0dXJuIGNbQzBdfWZ1'@;
put 'bmN0aW9uIEFfKGwsYyxhLGYsZCxoLG0pe2Zvcig7bnVsbCE9YTspe2NvbnN0IF89ZlthLmluZGV4XSxPPWEudHlwZTtpZihtJiYwPT09YyYmKF8mJld1KF9sKF8pLGYpLGEuZmxhZ3N8PTIpLDMyIT0oMzImYS5mbGFncykpaWYoOCZPKUFfKGwsYyxhLmNoaWxkLGYsZCxoLCExKSxFMihjLGws'@;
put 'ZCxfLGgpO2Vsc2UgaWYoMzImTyl7Y29uc3QgWD1NXyhhLGYpO2xldCBhZTtmb3IoO2FlPVgoKTspRTIoYyxsLGQsYWUsaCk7RTIoYyxsLGQsXyxoKX1lbHNlIDE2Jk8/RkgobCxjLGYsYSxkLGgpOkUyKGMsbCxkLF8saCk7YT1tP2EucHJvamVjdGlvbk5leHQ6YS5uZXh0fX1mdW5jdGlvbiBa'@;
put 'bShsLGMsYSxmLGQsaCl7QV8oYSxmLGwuZmlyc3RDaGlsZCxjLGQsaCwhMSl9ZnVuY3Rpb24gRkgobCxjLGEsZixkLGgpe2NvbnN0IG09YVtKbF0sTz1tW0dvXS5wcm9qZWN0aW9uW2YucHJvamVjdGlvbl07aWYoQXJyYXkuaXNBcnJheShPKSlmb3IobGV0IFg9MDtYPE8ubGVuZ3RoO1grKylF'@;
put 'MihjLGwsZCxPW1hdLGgpO2Vsc2V7bGV0IFg9Tztjb25zdCBhZT1tW2ZsXTtTOChmKSYmKFguZmxhZ3N8PTEyOCksQV8obCxjLFgsYWUsZCxoLCEwKX19ZnVuY3Rpb24gZkEobCxjLGEpeyIiPT09YT9sLnJlbW92ZUF0dHJpYnV0ZShjLCJjbGFzcyIpOmwuc2V0QXR0cmlidXRlKGMsImNsYXNz'@;
put 'IixhKX1mdW5jdGlvbiBkQShsLGMsYSl7Y29uc3R7bWVyZ2VkQXR0cnM6ZixjbGFzc2VzOmQsc3R5bGVzOmh9PWE7bnVsbCE9PWYmJiRmKGwsYyxmKSxudWxsIT09ZCYmZkEobCxjLGQpLG51bGwhPT1oJiZmdW5jdGlvbiBISChsLGMsYSl7bC5zZXRBdHRyaWJ1dGUoYywic3R5bGUiLGEpfShs'@;
put 'LGMsaCl9ZnVuY3Rpb24gT3AobCl7cmV0dXJuIGZ1bmN0aW9uIFdtKCl7aWYodm9pZCAwPT09WW0mJihZbT1udWxsLFBpLnRydXN0ZWRUeXBlcykpdHJ5e1ltPVBpLnRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3koImFuZ3VsYXIiLHtjcmVhdGVIVE1MOmw9PmwsY3JlYXRlU2NyaXB0Omw9Pmws'@;
put 'Y3JlYXRlU2NyaXB0VVJMOmw9Pmx9KX1jYXRjaHt9cmV0dXJuIFltfSgpPy5jcmVhdGVIVE1MKGwpfHxsfWZ1bmN0aW9uIEdtKCl7aWYodm9pZCAwIT09VF8pcmV0dXJuIFRfO2lmKHR5cGVvZiBkb2N1bWVudDwidSIpcmV0dXJuIGRvY3VtZW50O3Rocm93IG5ldyBJcigyMTAsITEpfWZ1bmN0'@;
put 'aW9uIE9fKCl7aWYodm9pZCAwPT09TDgmJihMOD1udWxsLFBpLnRydXN0ZWRUeXBlcykpdHJ5e0w4PVBpLnRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3koImFuZ3VsYXIjdW5zYWZlLWJ5cGFzcyIse2NyZWF0ZUhUTUw6bD0+bCxjcmVhdGVTY3JpcHQ6bD0+bCxjcmVhdGVTY3JpcHRVUkw6bD0+'@;
put 'bH0pfWNhdGNoe31yZXR1cm4gTDh9ZnVuY3Rpb24gbUEobCl7cmV0dXJuIE9fKCk/LmNyZWF0ZUhUTUwobCl8fGx9ZnVuY3Rpb24gdkEobCl7cmV0dXJuIE9fKCk/LmNyZWF0ZVNjcmlwdFVSTChsKXx8bH1jbGFzcyB5QXtjb25zdHJ1Y3RvcihjKXt0aGlzLmNoYW5naW5nVGhpc0JyZWFrc0Fw'@;
put 'cGxpY2F0aW9uU2VjdXJpdHk9Y310b1N0cmluZygpe3JldHVybmBTYWZlVmFsdWUgbXVzdCB1c2UgW3Byb3BlcnR5XT1iaW5kaW5nOiAke3RoaXMuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eX0gKHNlZSAke2VwfSlgfX1mdW5jdGlvbiBnaChsKXtyZXR1cm4gbCBpbnN0'@;
put 'YW5jZW9mIHlBP2wuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eTpsfWZ1bmN0aW9uICRtKGwsYyl7Y29uc3QgYT1mdW5jdGlvbiBZSChsKXtyZXR1cm4gbCBpbnN0YW5jZW9mIHlBJiZsLmdldFR5cGVOYW1lKCl8fG51bGx9KGwpO2lmKG51bGwhPWEmJmEhPT1jKXtpZigi'@;
put 'UmVzb3VyY2VVUkwiPT09YSYmIlVSTCI9PT1jKXJldHVybiEwO3Rocm93IG5ldyBFcnJvcihgUmVxdWlyZWQgYSBzYWZlICR7Y30sIGdvdCBhICR7YX0gKHNlZSAke2VwfSlgKX1yZXR1cm4gYT09PWN9Y2xhc3MgRF97Y29uc3RydWN0b3IoYyl7dGhpcy5pbmVydERvY3VtZW50SGVscGVyPWN9'@;
put 'Z2V0SW5lcnRCb2R5RWxlbWVudChjKXtjPSI8Ym9keT48cmVtb3ZlPjwvcmVtb3ZlPiIrYzt0cnl7Y29uc3QgYT0obmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhPcChjKSwidGV4dC9odG1sIikuYm9keTtyZXR1cm4gbnVsbD09PWE/dGhpcy5pbmVydERvY3VtZW50SGVs'@;
put 'cGVyLmdldEluZXJ0Qm9keUVsZW1lbnQoYyk6KGEucmVtb3ZlQ2hpbGQoYS5maXJzdENoaWxkKSxhKX1jYXRjaHtyZXR1cm4gbnVsbH19fWNsYXNzIElfe2NvbnN0cnVjdG9yKGMpe3RoaXMuZGVmYXVsdERvYz1jLHRoaXMuaW5lcnREb2N1bWVudD10aGlzLmRlZmF1bHREb2MuaW1wbGVtZW50'@;
put 'YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCJzYW5pdGl6YXRpb24taW5lcnQiKX1nZXRJbmVydEJvZHlFbGVtZW50KGMpe2NvbnN0IGE9dGhpcy5pbmVydERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7cmV0dXJuIGEuaW5uZXJIVE1MPU9wKGMpLGF9fWNvbnN0IFdIPS9eKD8h'@;
put 'amF2YXNjcmlwdDopKD86W2EtejAtOSsuLV0rOnxbXiY6XC8/I10qKD86W1wvPyNdfCQpKS9pO2Z1bmN0aW9uIFJfKGwpe3JldHVybihsPVN0cmluZyhsKSkubWF0Y2goV0gpP2w6InVuc2FmZToiK2x9ZnVuY3Rpb24gZ2YobCl7Y29uc3QgYz17fTtmb3IoY29uc3QgYSBvZiBsLnNwbGl0KCIs'@;
put 'IikpY1thXT0hMDtyZXR1cm4gY31mdW5jdGlvbiBqbCguLi5sKXtjb25zdCBjPXt9O2Zvcihjb25zdCBhIG9mIGwpZm9yKGNvbnN0IGYgaW4gYSlhLmhhc093blByb3BlcnR5KGYpJiYoY1tmXT0hMCk7cmV0dXJuIGN9Y29uc3Qgc2Q9Z2YoImFyZWEsYnIsY29sLGhyLGltZyx3YnIiKSxMXz1n'@;
put 'ZigiY29sZ3JvdXAsZGQsZHQsbGkscCx0Ym9keSx0ZCx0Zm9vdCx0aCx0aGVhZCx0ciIpLFBfPWdmKCJycCxydCIpLEZfPWpsKHNkLGpsKExfLGdmKCJhZGRyZXNzLGFydGljbGUsYXNpZGUsYmxvY2txdW90ZSxjYXB0aW9uLGNlbnRlcixkZWwsZGV0YWlscyxkaWFsb2csZGlyLGRpdixkbCxm'@;
put 'aWd1cmUsZmlnY2FwdGlvbixmb290ZXIsaDEsaDIsaDMsaDQsaDUsaDYsaGVhZGVyLGhncm91cCxocixpbnMsbWFpbixtYXAsbWVudSxuYXYsb2wscHJlLHNlY3Rpb24sc3VtbWFyeSx0YWJsZSx1bCIpKSxqbChQXyxnZigiYSxhYmJyLGFjcm9ueW0sYXVkaW8sYixiZGksYmRvLGJpZyxicixj'@;
put 'aXRlLGNvZGUsZGVsLGRmbixlbSxmb250LGksaW1nLGlucyxrYmQsbGFiZWwsbWFwLG1hcmsscGljdHVyZSxxLHJ1YnkscnAscnQscyxzYW1wLHNtYWxsLHNvdXJjZSxzcGFuLHN0cmlrZSxzdHJvbmcsc3ViLHN1cCx0aW1lLHRyYWNrLHR0LHUsdmFyLHZpZGVvIikpLGpsKFBfLExfKSksSF89'@;
put 'Z2YoImJhY2tncm91bmQsY2l0ZSxocmVmLGl0ZW10eXBlLGxvbmdkZXNjLHBvc3RlcixzcmMseGxpbms6aHJlZiIpLF9BPWpsKEhfLGdmKCJhYmJyLGFjY2Vzc2tleSxhbGlnbixhbHQsYXV0b3BsYXksYXhpcyxiZ2NvbG9yLGJvcmRlcixjZWxscGFkZGluZyxjZWxsc3BhY2luZyxjbGFzcyxj'@;
put 'bGVhcixjb2xvcixjb2xzLGNvbHNwYW4sY29tcGFjdCxjb250cm9scyxjb29yZHMsZGF0ZXRpbWUsZGVmYXVsdCxkaXIsZG93bmxvYWQsZmFjZSxoZWFkZXJzLGhlaWdodCxoaWRkZW4saHJlZmxhbmcsaHNwYWNlLGlzbWFwLGl0ZW1zY29wZSxpdGVtcHJvcCxraW5kLGxhYmVsLGxhbmcsbGFu'@;
put 'Z3VhZ2UsbG9vcCxtZWRpYSxtdXRlZCxub2hyZWYsbm93cmFwLG9wZW4scHJlbG9hZCxyZWwscmV2LHJvbGUscm93cyxyb3dzcGFuLHJ1bGVzLHNjb3BlLHNjcm9sbGluZyxzaGFwZSxzaXplLHNpemVzLHNwYW4sc3JjbGFuZyxzcmNzZXQsc3RhcnQsc3VtbWFyeSx0YWJpbmRleCx0YXJnZXQs'@;
put 'dGl0bGUsdHJhbnNsYXRlLHR5cGUsdXNlbWFwLHZhbGlnbix2YWx1ZSx2c3BhY2Usd2lkdGgiKSxnZigiYXJpYS1hY3RpdmVkZXNjZW5kYW50LGFyaWEtYXRvbWljLGFyaWEtYXV0b2NvbXBsZXRlLGFyaWEtYnVzeSxhcmlhLWNoZWNrZWQsYXJpYS1jb2xjb3VudCxhcmlhLWNvbGluZGV4LGFy'@;
put 'aWEtY29sc3BhbixhcmlhLWNvbnRyb2xzLGFyaWEtY3VycmVudCxhcmlhLWRlc2NyaWJlZGJ5LGFyaWEtZGV0YWlscyxhcmlhLWRpc2FibGVkLGFyaWEtZHJvcGVmZmVjdCxhcmlhLWVycm9ybWVzc2FnZSxhcmlhLWV4cGFuZGVkLGFyaWEtZmxvd3RvLGFyaWEtZ3JhYmJlZCxhcmlhLWhhc3Bv'@;
put 'cHVwLGFyaWEtaGlkZGVuLGFyaWEtaW52YWxpZCxhcmlhLWtleXNob3J0Y3V0cyxhcmlhLWxhYmVsLGFyaWEtbGFiZWxsZWRieSxhcmlhLWxldmVsLGFyaWEtbGl2ZSxhcmlhLW1vZGFsLGFyaWEtbXVsdGlsaW5lLGFyaWEtbXVsdGlzZWxlY3RhYmxlLGFyaWEtb3JpZW50YXRpb24sYXJpYS1v'@;
put 'd25zLGFyaWEtcGxhY2Vob2xkZXIsYXJpYS1wb3NpbnNldCxhcmlhLXByZXNzZWQsYXJpYS1yZWFkb25seSxhcmlhLXJlbGV2YW50LGFyaWEtcmVxdWlyZWQsYXJpYS1yb2xlZGVzY3JpcHRpb24sYXJpYS1yb3djb3VudCxhcmlhLXJvd2luZGV4LGFyaWEtcm93c3BhbixhcmlhLXNlbGVjdGVk'@;
put 'LGFyaWEtc2V0c2l6ZSxhcmlhLXNvcnQsYXJpYS12YWx1ZW1heCxhcmlhLXZhbHVlbWluLGFyaWEtdmFsdWVub3csYXJpYS12YWx1ZXRleHQiKSksJEg9Z2YoInNjcmlwdCxzdHlsZSx0ZW1wbGF0ZSIpO2NsYXNzIEtIe2NvbnN0cnVjdG9yKCl7dGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITEs'@;
put 'dGhpcy5idWY9W119c2FuaXRpemVDaGlsZHJlbihjKXtsZXQgYT1jLmZpcnN0Q2hpbGQsZj0hMDtmb3IoO2E7KWlmKGEubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERT9mPXRoaXMuc3RhcnRFbGVtZW50KGEpOmEubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERT90aGlzLmNoYXJzKGEubm9k'@;
put 'ZVZhbHVlKTp0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMCxmJiZhLmZpcnN0Q2hpbGQpYT1hLmZpcnN0Q2hpbGQ7ZWxzZSBmb3IoO2E7KXthLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJnRoaXMuZW5kRWxlbWVudChhKTtsZXQgZD10aGlzLmNoZWNrQ2xvYmJlcmVkRWxlbWVudChh'@;
put 'LGEubmV4dFNpYmxpbmcpO2lmKGQpe2E9ZDticmVha31hPXRoaXMuY2hlY2tDbG9iYmVyZWRFbGVtZW50KGEsYS5wYXJlbnROb2RlKX1yZXR1cm4gdGhpcy5idWYuam9pbigiIil9c3RhcnRFbGVtZW50KGMpe2NvbnN0IGE9Yy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2lmKCFGXy5oYXNPd25Q'@;
put 'cm9wZXJ0eShhKSlyZXR1cm4gdGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITAsISRILmhhc093blByb3BlcnR5KGEpO3RoaXMuYnVmLnB1c2goIjwiKSx0aGlzLmJ1Zi5wdXNoKGEpO2NvbnN0IGY9Yy5hdHRyaWJ1dGVzO2ZvcihsZXQgZD0wO2Q8Zi5sZW5ndGg7ZCsrKXtjb25zdCBoPWYuaXRl'@;
put 'bShkKSxtPWgubmFtZSxfPW0udG9Mb3dlckNhc2UoKTtpZighX0EuaGFzT3duUHJvcGVydHkoXykpe3RoaXMuc2FuaXRpemVkU29tZXRoaW5nPSEwO2NvbnRpbnVlfWxldCBPPWgudmFsdWU7SF9bX10mJihPPVJfKE8pKSx0aGlzLmJ1Zi5wdXNoKCIgIixtLCc9Iicsd0EoTyksJyInKX1yZXR1'@;
put 'cm4gdGhpcy5idWYucHVzaCgiPiIpLCEwfWVuZEVsZW1lbnQoYyl7Y29uc3QgYT1jLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7Rl8uaGFzT3duUHJvcGVydHkoYSkmJiFzZC5oYXNPd25Qcm9wZXJ0eShhKSYmKHRoaXMuYnVmLnB1c2goIjwvIiksdGhpcy5idWYucHVzaChhKSx0aGlzLmJ1Zi5w'@;
put 'dXNoKCI+IikpfWNoYXJzKGMpe3RoaXMuYnVmLnB1c2god0EoYykpfWNoZWNrQ2xvYmJlcmVkRWxlbWVudChjLGEpe2lmKGEmJihjLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGEpJk5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZKT09PU5vZGUuRE9DVU1FTlRfUE9TSVRJT05f'@;
put 'Q09OVEFJTkVEX0JZKXRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHNhbml0aXplIGh0bWwgYmVjYXVzZSB0aGUgZWxlbWVudCBpcyBjbG9iYmVyZWQ6ICR7Yy5vdXRlckhUTUx9YCk7cmV0dXJuIGF9fWNvbnN0IHFIPS9bXHVEODAwLVx1REJGRl1bXHVEQzAwLVx1REZGRl0vZyxYSD0vKFte'@;
put 'XCMtfiB8IV0pL2c7ZnVuY3Rpb24gd0EobCl7cmV0dXJuIGwucmVwbGFjZSgvJi9nLCImYW1wOyIpLnJlcGxhY2UocUgsZnVuY3Rpb24oYyl7cmV0dXJuIiYjIisoMTAyNCooYy5jaGFyQ29kZUF0KDApLTU1Mjk2KSsoYy5jaGFyQ29kZUF0KDEpLTU2MzIwKSs2NTUzNikrIjsifSkucmVwbGFj'@;
put 'ZShYSCxmdW5jdGlvbihjKXtyZXR1cm4iJiMiK2MuY2hhckNvZGVBdCgwKSsiOyJ9KS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKX1sZXQgUDg7ZnVuY3Rpb24gTl8obCl7cmV0dXJuImNvbnRlbnQiaW4gbCYmZnVuY3Rpb24gUUgobCl7cmV0dXJuIGwubm9kZVR5'@;
put 'cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmIlRFTVBMQVRFIj09PWwubm9kZU5hbWV9KGwpP2wuY29udGVudDpudWxsfXZhciBEcD1mdW5jdGlvbihsKXtyZXR1cm4gbFtsLk5PTkU9MF09Ik5PTkUiLGxbbC5IVE1MPTFdPSJIVE1MIixsW2wuU1RZTEU9Ml09IlNUWUxFIixsW2wuU0NSSVBUPTNd'@;
put 'PSJTQ1JJUFQiLGxbbC5VUkw9NF09IlVSTCIsbFtsLlJFU09VUkNFX1VSTD01XT0iUkVTT1VSQ0VfVVJMIixsfShEcHx8e30pO2Z1bmN0aW9uIHZoKGwpe2NvbnN0IGM9S20oKTtyZXR1cm4gYz9tQShjLnNhbml0aXplKERwLkhUTUwsbCl8fCIiKTokbShsLCJIVE1MIik/bUEoZ2gobCkpOmZ1'@;
put 'bmN0aW9uIEpIKGwsYyl7bGV0IGE9bnVsbDt0cnl7UDg9UDh8fGZ1bmN0aW9uIEEyKGwpe2NvbnN0IGM9bmV3IElfKGwpO3JldHVybiBmdW5jdGlvbiBiQSgpe3RyeXtyZXR1cm4hIShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKE9wKCIiKSwidGV4dC9odG1sIil9Y2F0'@;
put 'Y2h7cmV0dXJuITF9fSgpP25ldyBEXyhjKTpjfShsKTtsZXQgZj1jP1N0cmluZyhjKToiIjthPVA4LmdldEluZXJ0Qm9keUVsZW1lbnQoZik7bGV0IGQ9NSxoPWY7ZG97aWYoMD09PWQpdGhyb3cgbmV3IEVycm9yKCJGYWlsZWQgdG8gc2FuaXRpemUgaHRtbCBiZWNhdXNlIHRoZSBpbnB1dCBp'@;
put 'cyB1bnN0YWJsZSIpO2QtLSxmPWgsaD1hLmlubmVySFRNTCxhPVA4LmdldEluZXJ0Qm9keUVsZW1lbnQoZil9d2hpbGUoZiE9PWgpO3JldHVybiBPcCgobmV3IEtIKS5zYW5pdGl6ZUNoaWxkcmVuKE5fKGEpfHxhKSl9ZmluYWxseXtpZihhKXtjb25zdCBmPU5fKGEpfHxhO2Zvcig7Zi5maXJz'@;
put 'dENoaWxkOylmLnJlbW92ZUNoaWxkKGYuZmlyc3RDaGlsZCl9fX0oR20oKSxJbyhsKSl9ZnVuY3Rpb24gVl8obCl7Y29uc3QgYz1LbSgpO3JldHVybiBjP2Muc2FuaXRpemUoRHAuVVJMLGwpfHwiIjokbShsLCJVUkwiKT9naChsKTpSXyhJbyhsKSl9ZnVuY3Rpb24gQ0EobCl7Y29uc3QgYz1L'@;
put 'bSgpO2lmKGMpcmV0dXJuIHZBKGMuc2FuaXRpemUoRHAuUkVTT1VSQ0VfVVJMLGwpfHwiIik7aWYoJG0obCwiUmVzb3VyY2VVUkwiKSlyZXR1cm4gdkEoZ2gobCkpO3Rocm93IG5ldyBJcig5MDQsITEpfWZ1bmN0aW9uIEttKCl7Y29uc3QgbD1RcigpO3JldHVybiBsJiZsW1ExXS5zYW5pdGl6'@;
put 'ZXJ9Y2xhc3MgTWl7Y29uc3RydWN0b3IoYyxhKXt0aGlzLl9kZXNjPWMsdGhpcy5uZ01ldGFkYXRhTmFtZT0iSW5qZWN0aW9uVG9rZW4iLHRoaXMuXHUwMjc1cHJvdj12b2lkIDAsIm51bWJlciI9PXR5cGVvZiBhP3RoaXMuX19OR19FTEVNRU5UX0lEX189YTp2b2lkIDAhPT1hJiYodGhpcy5c'@;
put 'dTAyNzVwcm92PWhyKHt0b2tlbjp0aGlzLHByb3ZpZGVkSW46YS5wcm92aWRlZElufHwicm9vdCIsZmFjdG9yeTphLmZhY3Rvcnl9KSl9Z2V0IG11bHRpKCl7cmV0dXJuIHRoaXN9dG9TdHJpbmcoKXtyZXR1cm5gSW5qZWN0aW9uVG9rZW4gJHt0aGlzLl9kZXNjfWB9fWNvbnN0IHFtPW5ldyBN'@;
put 'aSgiRU5WSVJPTk1FTlRfSU5JVElBTElaRVIiKSxNQT1uZXcgTWkoIklOSkVDVE9SIiwtMSksa0E9bmV3IE1pKCJJTkpFQ1RPUl9ERUZfVFlQRVMiKTtjbGFzcyBFQXtnZXQoYyxhPXYwKXtpZihhPT09djApe2NvbnN0IGY9bmV3IEVycm9yKGBOdWxsSW5qZWN0b3JFcnJvcjogTm8gcHJvdmlk'@;
put 'ZXIgZm9yICR7S2woYyl9IWApO3Rocm93IGYubmFtZT0iTnVsbEluamVjdG9yRXJyb3IiLGZ9cmV0dXJuIGF9fWZ1bmN0aW9uIG9OKC4uLmwpe3JldHVybntcdTAyNzVwcm92aWRlcnM6eEEoMCxsKSxcdTAyNzVmcm9tTmdNb2R1bGU6ITB9fWZ1bmN0aW9uIHhBKGwsLi4uYyl7Y29uc3QgYT1b'@;
put 'XSxmPW5ldyBTZXQ7bGV0IGQ7cmV0dXJuIFJtKGMsaD0+e2NvbnN0IG09aDtqXyhtLGEsW10sZikmJihkfHw9W10sZC5wdXNoKG0pKX0pLHZvaWQgMCE9PWQmJkFBKGQsYSksYX1mdW5jdGlvbiBBQShsLGMpe2ZvcihsZXQgYT0wO2E8bC5sZW5ndGg7YSsrKXtjb25zdHtwcm92aWRlcnM6ZH09'@;
put 'bFthXTt6XyhkLGg9PntjLnB1c2goaCl9KX19ZnVuY3Rpb24gal8obCxjLGEsZil7aWYoIShsPUNvKGwpKSlyZXR1cm4hMTtsZXQgZD1udWxsLGg9TDYobCk7Y29uc3QgbT0haCYmbmEobCk7aWYoaHx8bSl7aWYobSYmIW0uc3RhbmRhbG9uZSlyZXR1cm4hMTtkPWx9ZWxzZXtjb25zdCBPPWwu'@;
put 'bmdNb2R1bGU7aWYoaD1MNihPKSwhaClyZXR1cm4hMTtkPU99Y29uc3QgXz1mLmhhcyhkKTtpZihtKXtpZihfKXJldHVybiExO2lmKGYuYWRkKGQpLG0uZGVwZW5kZW5jaWVzKXtjb25zdCBPPSJmdW5jdGlvbiI9PXR5cGVvZiBtLmRlcGVuZGVuY2llcz9tLmRlcGVuZGVuY2llcygpOm0uZGVw'@;
put 'ZW5kZW5jaWVzO2Zvcihjb25zdCBYIG9mIE8pal8oWCxjLGEsZil9fWVsc2V7aWYoIWgpcmV0dXJuITE7e2lmKG51bGwhPWguaW1wb3J0cyYmIV8pe2xldCBYO2YuYWRkKGQpO3RyeXtSbShoLmltcG9ydHMsYWU9PntqXyhhZSxjLGEsZikmJihYfHw9W10sWC5wdXNoKGFlKSl9KX1maW5hbGx5'@;
put 'e312b2lkIDAhPT1YJiZBQShYLGMpfWlmKCFfKXtjb25zdCBYPWFmKGQpfHwoKCk9Pm5ldyBkKTtjLnB1c2goe3Byb3ZpZGU6ZCx1c2VGYWN0b3J5OlgsZGVwczp4YX0se3Byb3ZpZGU6a0EsdXNlVmFsdWU6ZCxtdWx0aTohMH0se3Byb3ZpZGU6cW0sdXNlVmFsdWU6KCk9PnNyKGQpLG11bHRp'@;
put 'OiEwfSl9Y29uc3QgTz1oLnByb3ZpZGVycztudWxsPT1PfHxffHx6XyhPLGFlPT57Yy5wdXNoKGFlKX0pfX1yZXR1cm4gZCE9PWwmJnZvaWQgMCE9PWwucHJvdmlkZXJzfWZ1bmN0aW9uIHpfKGwsYyl7Zm9yKGxldCBhIG9mIGwpWGQoYSkmJihhPWEuXHUwMjc1cHJvdmlkZXJzKSxBcnJheS5p'@;
put 'c0FycmF5KGEpP3pfKGEsYyk6YyhhKX1jb25zdCBhTj1EYSh7cHJvdmlkZTpTdHJpbmcsdXNlVmFsdWU6RGF9KTtmdW5jdGlvbiBVXyhsKXtyZXR1cm4gbnVsbCE9PWwmJiJvYmplY3QiPT10eXBlb2YgbCYmYU4gaW4gbH1mdW5jdGlvbiBUMihsKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Yg'@;
put 'bH1jb25zdCBKbT1uZXcgTWkoIlNldCBJbmplY3RvciBzY29wZS4iKSxGOD17fSxsTj17fTtsZXQgWl87ZnVuY3Rpb24gSDgoKXtyZXR1cm4gdm9pZCAwPT09Wl8mJihaXz1uZXcgRUEpLFpffWNsYXNzIHUxe31jbGFzcyBZXyBleHRlbmRzIHUxe2dldCBkZXN0cm95ZWQoKXtyZXR1cm4gdGhp'@;
put 'cy5fZGVzdHJveWVkfWNvbnN0cnVjdG9yKGMsYSxmLGQpe3N1cGVyKCksdGhpcy5wYXJlbnQ9YSx0aGlzLnNvdXJjZT1mLHRoaXMuc2NvcGVzPWQsdGhpcy5yZWNvcmRzPW5ldyBNYXAsdGhpcy5fbmdPbkRlc3Ryb3lIb29rcz1uZXcgU2V0LHRoaXMuX29uRGVzdHJveUhvb2tzPVtdLHRoaXMu'@;
put 'X2Rlc3Ryb3llZD0hMSxHXyhjLG09PnRoaXMucHJvY2Vzc1Byb3ZpZGVyKG0pKSx0aGlzLnJlY29yZHMuc2V0KE1BLElwKHZvaWQgMCx0aGlzKSksZC5oYXMoImVudmlyb25tZW50IikmJnRoaXMucmVjb3Jkcy5zZXQodTEsSXAodm9pZCAwLHRoaXMpKTtjb25zdCBoPXRoaXMucmVjb3Jkcy5n'@;
put 'ZXQoSm0pO251bGwhPWgmJiJzdHJpbmciPT10eXBlb2YgaC52YWx1ZSYmdGhpcy5zY29wZXMuYWRkKGgudmFsdWUpLHRoaXMuaW5qZWN0b3JEZWZUeXBlcz1uZXcgU2V0KHRoaXMuZ2V0KGtBLm11bHRpLHhhLGFhLlNlbGYpKX1kZXN0cm95KCl7dGhpcy5hc3NlcnROb3REZXN0cm95ZWQoKSx0'@;
put 'aGlzLl9kZXN0cm95ZWQ9ITA7dHJ5e2Zvcihjb25zdCBhIG9mIHRoaXMuX25nT25EZXN0cm95SG9va3MpYS5uZ09uRGVzdHJveSgpO2NvbnN0IGM9dGhpcy5fb25EZXN0cm95SG9va3M7dGhpcy5fb25EZXN0cm95SG9va3M9W107Zm9yKGNvbnN0IGEgb2YgYylhKCl9ZmluYWxseXt0aGlzLnJl'@;
put 'Y29yZHMuY2xlYXIoKSx0aGlzLl9uZ09uRGVzdHJveUhvb2tzLmNsZWFyKCksdGhpcy5pbmplY3RvckRlZlR5cGVzLmNsZWFyKCl9fW9uRGVzdHJveShjKXtyZXR1cm4gdGhpcy5hc3NlcnROb3REZXN0cm95ZWQoKSx0aGlzLl9vbkRlc3Ryb3lIb29rcy5wdXNoKGMpLCgpPT50aGlzLnJlbW92'@;
put 'ZU9uRGVzdHJveShjKX1ydW5JbkNvbnRleHQoYyl7dGhpcy5hc3NlcnROb3REZXN0cm95ZWQoKTtjb25zdCBhPUsxKHRoaXMpLGY9cGkodm9pZCAwKTt0cnl7cmV0dXJuIGMoKX1maW5hbGx5e0sxKGEpLHBpKGYpfX1nZXQoYyxhPXYwLGY9YWEuRGVmYXVsdCl7aWYodGhpcy5hc3NlcnROb3RE'@;
put 'ZXN0cm95ZWQoKSxjLmhhc093blByb3BlcnR5KHlsKSlyZXR1cm4gY1t5bF0odGhpcyk7Zj15MChmKTtjb25zdCBkPUsxKHRoaXMpLGg9cGkodm9pZCAwKTt0cnl7aWYoIShmJmFhLlNraXBTZWxmKSl7bGV0IF89dGhpcy5yZWNvcmRzLmdldChjKTtpZih2b2lkIDA9PT1fKXtjb25zdCBPPWZ1'@;
put 'bmN0aW9uIGROKGwpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBsfHwib2JqZWN0Ij09dHlwZW9mIGwmJmwgaW5zdGFuY2VvZiBNaX0oYykmJlVmKGMpO189TyYmdGhpcy5pbmplY3RhYmxlRGVmSW5TY29wZShPKT9JcChXXyhjKSxGOCk6bnVsbCx0aGlzLnJlY29yZHMuc2V0KGMsXyl9aWYo'@;
put 'bnVsbCE9XylyZXR1cm4gdGhpcy5oeWRyYXRlKGMsXyl9cmV0dXJuKGYmYWEuU2VsZj9IOCgpOnRoaXMucGFyZW50KS5nZXQoYyxhPWYmYWEuT3B0aW9uYWwmJmE9PT12MD9udWxsOmEpfWNhdGNoKG0pe2lmKCJOdWxsSW5qZWN0b3JFcnJvciI9PT1tLm5hbWUpe2lmKChtW0ZjXT1tW0ZjXXx8'@;
put 'W10pLnVuc2hpZnQoS2woYykpLGQpdGhyb3cgbTtyZXR1cm4gZnVuY3Rpb24gSGMobCxjLGEsZil7Y29uc3QgZD1sW0ZjXTt0aHJvdyBjW0g2XSYmZC51bnNoaWZ0KGNbSDZdKSxsLm1lc3NhZ2U9ZnVuY3Rpb24gV2YobCxjLGEsZj1udWxsKXtsPWwmJiJcbiI9PT1sLmNoYXJBdCgwKSYmIlx1'@;
put 'MDI3NSI9PWwuY2hhckF0KDEpP2wuc2xpY2UoMik6bDtsZXQgZD1LbChjKTtpZihBcnJheS5pc0FycmF5KGMpKWQ9Yy5tYXAoS2wpLmpvaW4oIiAtPiAiKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgYyl7bGV0IGg9W107Zm9yKGxldCBtIGluIGMpaWYoYy5oYXNPd25Qcm9wZXJ0eShtKSl7'@;
put 'bGV0IF89Y1ttXTtoLnB1c2gobSsiOiIrKCJzdHJpbmciPT10eXBlb2YgXz9KU09OLnN0cmluZ2lmeShfKTpLbChfKSkpfWQ9YHske2guam9pbigiLCAiKX19YH1yZXR1cm5gJHthfSR7Zj8iKCIrZisiKSI6IiJ9WyR7ZH1dOiAke2wucmVwbGFjZShjdSwiXG4gICIpfWB9KCJcbiIrbC5tZXNz'@;
put 'YWdlLGQsYSxmKSxsLm5nVG9rZW5QYXRoPWQsbFtGY109bnVsbCxsfShtLGMsIlIzSW5qZWN0b3JFcnJvciIsdGhpcy5zb3VyY2UpfXRocm93IG19ZmluYWxseXtwaShoKSxLMShkKX19cmVzb2x2ZUluamVjdG9ySW5pdGlhbGl6ZXJzKCl7Y29uc3QgYz1LMSh0aGlzKSxhPXBpKHZvaWQgMCk7'@;
put 'dHJ5e2NvbnN0IGY9dGhpcy5nZXQocW0ubXVsdGkseGEsYWEuU2VsZik7Zm9yKGNvbnN0IGQgb2YgZilkKCl9ZmluYWxseXtLMShjKSxwaShhKX19dG9TdHJpbmcoKXtjb25zdCBjPVtdLGE9dGhpcy5yZWNvcmRzO2Zvcihjb25zdCBmIG9mIGEua2V5cygpKWMucHVzaChLbChmKSk7cmV0dXJu'@;
put 'YFIzSW5qZWN0b3JbJHtjLmpvaW4oIiwgIil9XWB9YXNzZXJ0Tm90RGVzdHJveWVkKCl7aWYodGhpcy5fZGVzdHJveWVkKXRocm93IG5ldyBJcigyMDUsITEpfXByb2Nlc3NQcm92aWRlcihjKXtsZXQgYT1UMihjPUNvKGMpKT9jOkNvKGMmJmMucHJvdmlkZSk7Y29uc3QgZj1mdW5jdGlvbiB1'@;
put 'TihsKXtyZXR1cm4gVV8obCk/SXAodm9pZCAwLGwudXNlVmFsdWUpOklwKERBKGwpLEY4KX0oYyk7aWYoVDIoYyl8fCEwIT09Yy5tdWx0aSl0aGlzLnJlY29yZHMuZ2V0KGEpO2Vsc2V7bGV0IGQ9dGhpcy5yZWNvcmRzLmdldChhKTtkfHwoZD1JcCh2b2lkIDAsRjgsITApLGQuZmFjdG9yeT0o'@;
put 'KT0+cmMoZC5tdWx0aSksdGhpcy5yZWNvcmRzLnNldChhLGQpKSxhPWMsZC5tdWx0aS5wdXNoKGMpfXRoaXMucmVjb3Jkcy5zZXQoYSxmKX1oeWRyYXRlKGMsYSl7cmV0dXJuIGEudmFsdWU9PT1GOCYmKGEudmFsdWU9bE4sYS52YWx1ZT1hLmZhY3RvcnkoKSksIm9iamVjdCI9PXR5cGVvZiBh'@;
put 'LnZhbHVlJiZhLnZhbHVlJiZmdW5jdGlvbiBmTihsKXtyZXR1cm4gbnVsbCE9PWwmJiJvYmplY3QiPT10eXBlb2YgbCYmImZ1bmN0aW9uIj09dHlwZW9mIGwubmdPbkRlc3Ryb3l9KGEudmFsdWUpJiZ0aGlzLl9uZ09uRGVzdHJveUhvb2tzLmFkZChhLnZhbHVlKSxhLnZhbHVlfWluamVjdGFi'@;
put 'bGVEZWZJblNjb3BlKGMpe2lmKCFjLnByb3ZpZGVkSW4pcmV0dXJuITE7Y29uc3QgYT1DbyhjLnByb3ZpZGVkSW4pO3JldHVybiJzdHJpbmciPT10eXBlb2YgYT8iYW55Ij09PWF8fHRoaXMuc2NvcGVzLmhhcyhhKTp0aGlzLmluamVjdG9yRGVmVHlwZXMuaGFzKGEpfXJlbW92ZU9uRGVzdHJv'@;
put 'eShjKXtjb25zdCBhPXRoaXMuX29uRGVzdHJveUhvb2tzLmluZGV4T2YoYyk7LTEhPT1hJiZ0aGlzLl9vbkRlc3Ryb3lIb29rcy5zcGxpY2UoYSwxKX19ZnVuY3Rpb24gV18obCl7Y29uc3QgYz1VZihsKSxhPW51bGwhPT1jP2MuZmFjdG9yeTphZihsKTtpZihudWxsIT09YSlyZXR1cm4gYTtp'@;
put 'ZihsIGluc3RhbmNlb2YgTWkpdGhyb3cgbmV3IElyKDIwNCwhMSk7aWYobCBpbnN0YW5jZW9mIEZ1bmN0aW9uKXJldHVybiBmdW5jdGlvbiBzTihsKXtjb25zdCBjPWwubGVuZ3RoO2lmKGM+MCl0aHJvdyBpZChjLCI/IiksbmV3IElyKDIwNCwhMSk7Y29uc3QgYT1mdW5jdGlvbiBWYShsKXty'@;
put 'ZXR1cm4gbCYmKGxbdHBdfHxsW0JhXSl8fG51bGx9KGwpO3JldHVybiBudWxsIT09YT8oKT0+YS5mYWN0b3J5KGwpOigpPT5uZXcgbH0obCk7dGhyb3cgbmV3IElyKDIwNCwhMSl9ZnVuY3Rpb24gREEobCxjLGEpe2xldCBmO2lmKFQyKGwpKXtjb25zdCBkPUNvKGwpO3JldHVybiBhZihkKXx8'@;
put 'V18oZCl9aWYoVV8obCkpZj0oKT0+Q28obC51c2VWYWx1ZSk7ZWxzZSBpZihmdW5jdGlvbiBPQShsKXtyZXR1cm4hKCFsfHwhbC51c2VGYWN0b3J5KX0obCkpZj0oKT0+bC51c2VGYWN0b3J5KC4uLnJjKGwuZGVwc3x8W10pKTtlbHNlIGlmKGZ1bmN0aW9uIFRBKGwpe3JldHVybiEoIWx8fCFs'@;
put 'LnVzZUV4aXN0aW5nKX0obCkpZj0oKT0+c3IoQ28obC51c2VFeGlzdGluZykpO2Vsc2V7Y29uc3QgZD1DbyhsJiYobC51c2VDbGFzc3x8bC5wcm92aWRlKSk7aWYoIWZ1bmN0aW9uIGNOKGwpe3JldHVybiEhbC5kZXBzfShsKSlyZXR1cm4gYWYoZCl8fFdfKGQpO2Y9KCk9Pm5ldyBkKC4uLnJj'@;
put 'KGwuZGVwcykpfXJldHVybiBmfWZ1bmN0aW9uIElwKGwsYyxhPSExKXtyZXR1cm57ZmFjdG9yeTpsLHZhbHVlOmMsbXVsdGk6YT9bXTp2b2lkIDB9fWZ1bmN0aW9uIEdfKGwsYyl7Zm9yKGNvbnN0IGEgb2YgbClBcnJheS5pc0FycmF5KGEpP0dfKGEsYyk6YSYmWGQoYSk/R18oYS5cdTAyNzVw'@;
put 'cm92aWRlcnMsYyk6YyhhKX1jb25zdCBOOD1uZXcgTWkoIkFwcElkIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+aE59KSxoTj0ibmciLElBPW5ldyBNaSgiUGxhdGZvcm0gSW5pdGlhbGl6ZXIiKSxxYT1uZXcgTWkoIlBsYXRmb3JtIElEIix7cHJvdmlkZWRJbjoicGxhdGZvcm0i'@;
put 'LGZhY3Rvcnk6KCk9PiJ1bmtub3duIn0pLFJBPW5ldyBNaSgiQW5pbWF0aW9uTW9kdWxlVHlwZSIpLFY4PW5ldyBNaSgiQ1NQIG5vbmNlIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+R20oKS5ib2R5Py5xdWVyeVNlbGVjdG9yKCJbbmdDc3BOb25jZV0iKT8uZ2V0QXR0cmlidXRl'@;
put 'KCJuZ0NzcE5vbmNlIil8fG51bGx9KTtsZXQgUEE9KGwsYyk9Pm51bGw7ZnVuY3Rpb24gSEEobCxjKXtyZXR1cm4gUEEobCxjKX1jbGFzcyBCQXt9Y2xhc3MgakF7fWNsYXNzIEZwe3Jlc29sdmVDb21wb25lbnRGYWN0b3J5KGMpe3Rocm93IGZ1bmN0aW9uIG53KGwpe2NvbnN0IGM9RXJyb3Io'@;
put 'YE5vIGNvbXBvbmVudCBmYWN0b3J5IGZvdW5kIGZvciAke0tsKGwpfS5gKTtyZXR1cm4gYy5uZ0NvbXBvbmVudD1sLGN9KGMpfX1sZXQgYzE9KCgpPT57Y2xhc3MgbHt9cmV0dXJuIGwuTlVMTD1uZXcgRnAsbH0pKCk7ZnVuY3Rpb24gcncoKXtyZXR1cm4gdWQoRHUoKSxRcigpKX1mdW5jdGlv'@;
put 'biB1ZChsLGMpe3JldHVybiBuZXcgVmkoV3MobCxjKSl9bGV0IFZpPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSl7dGhpcy5uYXRpdmVFbGVtZW50PWF9fXJldHVybiBsLl9fTkdfRUxFTUVOVF9JRF9fPXJ3LGx9KSgpO2Z1bmN0aW9uIEkyKGwpe3JldHVybiBsIGluc3RhbmNlb2YgVmk/'@;
put 'bC5uYXRpdmVFbGVtZW50Omx9Y2xhc3MgSHB7fWxldCBqbz0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKCl7dGhpcy5kZXN0cm95Tm9kZT1udWxsfX1yZXR1cm4gbC5fX05HX0VMRU1FTlRfSURfXz0oKT0+ZnVuY3Rpb24gd2MoKXtjb25zdCBsPVFyKCksYT1idChEdSgpLmluZGV4LGwpO3Jl'@;
put 'dHVybihPdShhKT9hOmwpW1pvXX0oKSxsfSkoKSxZOD0oKCk9PntjbGFzcyBse31yZXR1cm4gbC5cdTAyNzVwcm92PWhyKHt0b2tlbjpsLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9Pm51bGx9KSxsfSkoKTtjbGFzcyByZ3tjb25zdHJ1Y3RvcihjKXt0aGlzLmZ1bGw9Yyx0aGlzLm1h'@;
put 'am9yPWMuc3BsaXQoIi4iKVswXSx0aGlzLm1pbm9yPWMuc3BsaXQoIi4iKVsxXSx0aGlzLnBhdGNoPWMuc3BsaXQoIi4iKS5zbGljZSgyKS5qb2luKCIuIil9fWNvbnN0IHlOPW5ldyByZygiMTYuMS42IiksaXc9e307ZnVuY3Rpb24gaWcobCl7Zm9yKDtsOyl7bFtQb118PTY0O2NvbnN0IGM9'@;
put 'am0obCk7aWYoQ20obCkmJiFjKXJldHVybiBsO2w9Y31yZXR1cm4gbnVsbH1mdW5jdGlvbiBvdyhsKXtyZXR1cm4gbC5uZ09yaWdpbmFsRXJyb3J9Y2xhc3MgUjJ7Y29uc3RydWN0b3IoKXt0aGlzLl9jb25zb2xlPWNvbnNvbGV9aGFuZGxlRXJyb3IoYyl7Y29uc3QgYT10aGlzLl9maW5kT3Jp'@;
put 'Z2luYWxFcnJvcihjKTt0aGlzLl9jb25zb2xlLmVycm9yKCJFUlJPUiIsYyksYSYmdGhpcy5fY29uc29sZS5lcnJvcigiT1JJR0lOQUwgRVJST1IiLGEpfV9maW5kT3JpZ2luYWxFcnJvcihjKXtsZXQgYT1jJiZvdyhjKTtmb3IoO2EmJm93KGEpOylhPW93KGEpO3JldHVybiBhfHxudWxsfX1j'@;
put 'b25zdCBsdz1uZXcgTWkoIiIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PiExfSk7ZnVuY3Rpb24gRzgobCl7cmV0dXJuIGwub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld31mdW5jdGlvbiBMMihsKXtyZXR1cm4gbC5vd25lckRvY3VtZW50fWZ1bmN0aW9uIHN3KGwpe3JldHVybiBs'@;
put 'Lm93bmVyRG9jdW1lbnQuYm9keX1mdW5jdGlvbiBjZChsKXtyZXR1cm4gbCBpbnN0YW5jZW9mIEZ1bmN0aW9uP2woKTpsfWNsYXNzICQ4IGV4dGVuZHMgdXB7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29uc3VtZXJBbGxvd1NpZ25hbFdyaXRlcz0hMSx0aGlzLl9s'@;
put 'Vmlldz1udWxsfXNldCBsVmlldyhjKXt0aGlzLl9sVmlldz1jfW9uQ29uc3VtZXJEZXBlbmRlbmN5TWF5SGF2ZUNoYW5nZWQoKXtpZyh0aGlzLl9sVmlldyl9b25Qcm9kdWNlclVwZGF0ZVZhbHVlVmVyc2lvbigpe31nZXQgaGFzUmVhZEFTaWduYWwoKXtyZXR1cm4gdGhpcy5oYXNQcm9kdWNl'@;
put 'cnN9cnVuSW5Db250ZXh0KGMsYSxmKXtjb25zdCBkPWJzKHRoaXMpO3RoaXMudHJhY2tpbmdWZXJzaW9uKys7dHJ5e2MoYSxmKX1maW5hbGx5e2JzKGQpfX1kZXN0cm95KCl7dGhpcy50cmFja2luZ1ZlcnNpb24rK319bGV0IEs4PW51bGw7ZnVuY3Rpb24gJEEoKXtyZXR1cm4gSzg/Pz1uZXcg'@;
put 'JDgsSzh9ZnVuY3Rpb24gS0EobCxjKXtyZXR1cm4gbFtjXT8/JEEoKX1mdW5jdGlvbiBxQShsLGMpe2NvbnN0IGE9JEEoKTthLmhhc1JlYWRBU2lnbmFsJiYobFtjXT1LOCxhLmxWaWV3PWwsSzg9bmV3ICQ4KX1jb25zdCBxbz17fTtmdW5jdGlvbiBTZShsKXt1dyhJYSgpLFFyKCksbGMoKSts'@;
put 'LCExKX1mdW5jdGlvbiB1dyhsLGMsYSxmKXtpZighZilpZigzPT0oMyZjW1BvXSkpe2NvbnN0IGg9bC5wcmVPcmRlckNoZWNrSG9va3M7bnVsbCE9PWgmJm84KGMsaCxhKX1lbHNle2NvbnN0IGg9bC5wcmVPcmRlckhvb2tzO251bGwhPT1oJiZhOChjLGgsMCxhKX1fMihhKX1mdW5jdGlvbiBj'@;
put 'dyhsLGM9bnVsbCxhPW51bGwsZil7Y29uc3QgZD1mdyhsLGMsYSxmKTtyZXR1cm4gZC5yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKSxkfWZ1bmN0aW9uIGZ3KGwsYz1udWxsLGE9bnVsbCxmLGQ9bmV3IFNldCl7Y29uc3QgaD1bYXx8eGEsb04obCldO3JldHVybiBmPWZ8fCgib2JqZWN0'@;
put 'Ij09dHlwZW9mIGw/dm9pZCAwOktsKGwpKSxuZXcgWV8oaCxjfHxIOCgpLGZ8fG51bGwsZCl9bGV0IEFsPSgoKT0+e2NsYXNzIGx7c3RhdGljIGNyZWF0ZShhLGYpe2lmKEFycmF5LmlzQXJyYXkoYSkpcmV0dXJuIGN3KHtuYW1lOiIifSxmLGEsIiIpO3tjb25zdCBkPWEubmFtZT8/IiI7cmV0'@;
put 'dXJuIGN3KHtuYW1lOmR9LGEucGFyZW50LGEucHJvdmlkZXJzLGQpfX19cmV0dXJuIGwuVEhST1dfSUZfTk9UX0ZPVU5EPXYwLGwuTlVMTD1uZXcgRUEsbC5cdTAyNzVwcm92PWhyKHt0b2tlbjpsLHByb3ZpZGVkSW46ImFueSIsZmFjdG9yeTooKT0+c3IoTUEpfSksbC5fX05HX0VMRU1FTlRf'@;
put 'SURfXz0tMSxsfSkoKTtmdW5jdGlvbiBydChsLGM9YWEuRGVmYXVsdCl7Y29uc3QgYT1RcigpO3JldHVybiBudWxsPT09YT9zcihsLGMpOkx4KER1KCksYSxDbyhsKSxjKX1mdW5jdGlvbiBxOChsLGMsYSxmLGQsaCxtLF8sTyxYLGFlKXtjb25zdCBwZT1jLmJsdWVwcmludC5zbGljZSgpO3Jl'@;
put 'dHVybiBwZVtOaV09ZCxwZVtQb109MTQwfGYsKG51bGwhPT1YfHxsJiYyMDQ4JmxbUG9dKSYmKHBlW1BvXXw9MjA0OCksU28ocGUpLHBlW2ZsXT1wZVtVc109bCxwZVtCbF09YSxwZVtRMV09bXx8bCYmbFtRMV0scGVbWm9dPV98fGwmJmxbWm9dLHBlW3FmXT1PfHxsJiZsW3FmXXx8bnVsbCxw'@;
put 'ZVtHb109aCxwZVt2Ml09ZnVuY3Rpb24gcGgoKXtyZXR1cm4gX18rK30oKSxwZVt3MF09YWUscGVbZWZdPVgscGVbSmxdPTI9PWMudHlwZT9sW0psXTpwZSxwZX1mdW5jdGlvbiBWcChsLGMsYSxmLGQpe2xldCBoPWwuZGF0YVtjXTtpZihudWxsPT09aCloPWZ1bmN0aW9uIGR3KGwsYyxhLGYs'@;
put 'ZCl7Y29uc3QgaD1weCgpLG09dF8oKSxPPWwuZGF0YVtjXT1mdW5jdGlvbiBKOChsLGMsYSxmLGQsaCl7bGV0IG09Yz9jLmluamVjdG9ySW5kZXg6LTEsXz0wO3JldHVybiBocCgpJiYoX3w9MTI4KSx7dHlwZTphLGluZGV4OmYsaW5zZXJ0QmVmb3JlSW5kZXg6bnVsbCxpbmplY3RvckluZGV4'@;
put 'Om0sZGlyZWN0aXZlU3RhcnQ6LTEsZGlyZWN0aXZlRW5kOi0xLGRpcmVjdGl2ZVN0eWxpbmdMYXN0Oi0xLGNvbXBvbmVudE9mZnNldDotMSxwcm9wZXJ0eUJpbmRpbmdzOm51bGwsZmxhZ3M6Xyxwcm92aWRlckluZGV4ZXM6MCx2YWx1ZTpkLGF0dHJzOmgsbWVyZ2VkQXR0cnM6bnVsbCxsb2Nh'@;
put 'bE5hbWVzOm51bGwsaW5pdGlhbElucHV0czp2b2lkIDAsaW5wdXRzOm51bGwsb3V0cHV0czpudWxsLHRWaWV3Om51bGwsbmV4dDpudWxsLHByZXY6bnVsbCxwcm9qZWN0aW9uTmV4dDpudWxsLGNoaWxkOm51bGwscGFyZW50OmMscHJvamVjdGlvbjpudWxsLHN0eWxlczpudWxsLHN0eWxlc1dp'@;
put 'dGhvdXRIb3N0Om51bGwscmVzaWR1YWxTdHlsZXM6dm9pZCAwLGNsYXNzZXM6bnVsbCxjbGFzc2VzV2l0aG91dEhvc3Q6bnVsbCxyZXNpZHVhbENsYXNzZXM6dm9pZCAwLGNsYXNzQmluZGluZ3M6MCxzdHlsZUJpbmRpbmdzOjB9fSgwLG0/aDpoJiZoLnBhcmVudCxhLGMsZixkKTtyZXR1cm4g'@;
put 'bnVsbD09PWwuZmlyc3RDaGlsZCYmKGwuZmlyc3RDaGlsZD1PKSxudWxsIT09aCYmKG0/bnVsbD09aC5jaGlsZCYmbnVsbCE9PU8ucGFyZW50JiYoaC5jaGlsZD1PKTpudWxsPT09aC5uZXh0JiYoaC5uZXh0PU8sTy5wcmV2PWgpKSxPfShsLGMsYSxmLGQpLGZ1bmN0aW9uIFZGKCl7cmV0dXJu'@;
put 'IEJvLmxGcmFtZS5pbkkxOG59KCkmJihoLmZsYWdzfD0zMik7ZWxzZSBpZig2NCZoLnR5cGUpe2gudHlwZT1hLGgudmFsdWU9ZixoLmF0dHJzPWQ7Y29uc3QgbT1mdW5jdGlvbiBUbSgpe2NvbnN0IGw9Qm8ubEZyYW1lLGM9bC5jdXJyZW50VE5vZGU7cmV0dXJuIGwuaXNQYXJlbnQ/YzpjLnBh'@;
put 'cmVudH0oKTtoLmluamVjdG9ySW5kZXg9bnVsbD09PW0/LTE6bS5pbmplY3RvckluZGV4fXJldHVybiBsZihoLCEwKSxofWZ1bmN0aW9uIG9nKGwsYyxhLGYpe2lmKDA9PT1hKXJldHVybi0xO2NvbnN0IGQ9Yy5sZW5ndGg7Zm9yKGxldCBoPTA7aDxhO2grKyljLnB1c2goZiksbC5ibHVlcHJp'@;
put 'bnQucHVzaChmKSxsLmRhdGEucHVzaChudWxsKTtyZXR1cm4gZH1mdW5jdGlvbiBpVChsLGMsYSxmLGQpe2NvbnN0IGg9S0EoYyxhcCksbT1sYygpLF89MiZmO3RyeXtpZihfMigtMSksXyYmYy5sZW5ndGg+eWEmJnV3KGwsYyx5YSwhMSksUzAoXz8yOjAsZCksXyloLnJ1bkluQ29udGV4dChh'@;
put 'LGYsZCk7ZWxzZXtjb25zdCBYPWJzKG51bGwpO3RyeXthKGYsZCl9ZmluYWxseXticyhYKX19fWZpbmFsbHl7XyYmbnVsbD09PWNbYXBdJiZxQShjLGFwKSxfMihtKSxTMChfPzM6MSxkKX19ZnVuY3Rpb24gaHcobCxjLGEpe2lmKEpmKGMpKXtjb25zdCBmPWJzKG51bGwpO3RyeXtjb25zdCBo'@;
put 'PWMuZGlyZWN0aXZlRW5kO2ZvcihsZXQgbT1jLmRpcmVjdGl2ZVN0YXJ0O208aDttKyspe2NvbnN0IF89bC5kYXRhW21dO18uY29udGVudFF1ZXJpZXMmJl8uY29udGVudFF1ZXJpZXMoMSxhW21dLG0pfX1maW5hbGx5e2JzKGYpfX19ZnVuY3Rpb24gcHcobCxjLGEpe2h4KCkmJihmdW5jdGlv'@;
put 'biBQTihsLGMsYSxmKXtjb25zdCBkPWEuZGlyZWN0aXZlU3RhcnQsaD1hLmRpcmVjdGl2ZUVuZDtuZihhKSYmZnVuY3Rpb24gek4obCxjLGEpe2NvbnN0IGY9V3MoYyxsKSxkPW9UKGEpO2xldCBtPTE2O2Euc2lnbmFscz9tPTQwOTY6YS5vblB1c2gmJihtPTY0KTtjb25zdCBfPWV2KGwscTgo'@;
put 'bCxkLG51bGwsbSxmLGMsbnVsbCxsW1ExXS5yZW5kZXJlckZhY3RvcnkuY3JlYXRlUmVuZGVyZXIoZixhKSxudWxsLG51bGwsbnVsbCkpO2xbYy5pbmRleF09X30oYyxhLGwuZGF0YVtkK2EuY29tcG9uZW50T2Zmc2V0XSksbC5maXJzdENyZWF0ZVBhc3N8fHU4KGEsYyksV3UoZixjKTtjb25z'@;
put 'dCBtPWEuaW5pdGlhbElucHV0cztmb3IobGV0IF89ZDtfPGg7XysrKXtjb25zdCBPPWwuZGF0YVtfXSxYPUMyKGMsbCxfLGEpO1d1KFgsYyksbnVsbCE9PW0mJlVOKDAsXy1kLFgsTywwLG0pLGFjKE8pJiYoYnQoYS5pbmRleCxjKVtCbF09QzIoYyxsLF8sYSkpfX0obCxjLGEsV3MoYSxjKSks'@;
put 'NjQ9PSg2NCZhLmZsYWdzKSYmZlQobCxjLGEpKX1mdW5jdGlvbiBYOChsLGMsYT1Xcyl7Y29uc3QgZj1jLmxvY2FsTmFtZXM7aWYobnVsbCE9PWYpe2xldCBkPWMuaW5kZXgrMTtmb3IobGV0IGg9MDtoPGYubGVuZ3RoO2grPTIpe2NvbnN0IG09ZltoKzFdLF89LTE9PT1tP2EoYyxsKTpsW21d'@;
put 'O2xbZCsrXT1ffX19ZnVuY3Rpb24gb1QobCl7Y29uc3QgYz1sLnRWaWV3O3JldHVybiBudWxsPT09Y3x8Yy5pbmNvbXBsZXRlRmlyc3RQYXNzP2wudFZpZXc9QnAoMSxudWxsLGwudGVtcGxhdGUsbC5kZWNscyxsLnZhcnMsbC5kaXJlY3RpdmVEZWZzLGwucGlwZURlZnMsbC52aWV3UXVlcnks'@;
put 'bC5zY2hlbWFzLGwuY29uc3RzLGwuaWQpOmN9ZnVuY3Rpb24gQnAobCxjLGEsZixkLGgsbSxfLE8sWCxhZSl7Y29uc3QgcGU9eWErZixiZT1wZStkLHhlPWZ1bmN0aW9uIGFUKGwsYyl7Y29uc3QgYT1bXTtmb3IobGV0IGY9MDtmPGM7ZisrKWEucHVzaChmPGw/bnVsbDpxbyk7cmV0dXJuIGF9'@;
put 'KHBlLGJlKSxWZT0iZnVuY3Rpb24iPT10eXBlb2YgWD9YKCk6WDtyZXR1cm4geGVbamldPXt0eXBlOmwsYmx1ZXByaW50OnhlLHRlbXBsYXRlOmEscXVlcmllczpudWxsLHZpZXdRdWVyeTpfLGRlY2xUTm9kZTpjLGRhdGE6eGUuc2xpY2UoKS5maWxsKG51bGwscGUpLGJpbmRpbmdTdGFydElu'@;
put 'ZGV4OnBlLGV4cGFuZG9TdGFydEluZGV4OmJlLGhvc3RCaW5kaW5nT3BDb2RlczpudWxsLGZpcnN0Q3JlYXRlUGFzczohMCxmaXJzdFVwZGF0ZVBhc3M6ITAsc3RhdGljVmlld1F1ZXJpZXM6ITEsc3RhdGljQ29udGVudFF1ZXJpZXM6ITEscHJlT3JkZXJIb29rczpudWxsLHByZU9yZGVyQ2hl'@;
put 'Y2tIb29rczpudWxsLGNvbnRlbnRIb29rczpudWxsLGNvbnRlbnRDaGVja0hvb2tzOm51bGwsdmlld0hvb2tzOm51bGwsdmlld0NoZWNrSG9va3M6bnVsbCxkZXN0cm95SG9va3M6bnVsbCxjbGVhbnVwOm51bGwsY29udGVudFF1ZXJpZXM6bnVsbCxjb21wb25lbnRzOm51bGwsZGlyZWN0aXZl'@;
put 'UmVnaXN0cnk6ImZ1bmN0aW9uIj09dHlwZW9mIGg/aCgpOmgscGlwZVJlZ2lzdHJ5OiJmdW5jdGlvbiI9PXR5cGVvZiBtP20oKTptLGZpcnN0Q2hpbGQ6bnVsbCxzY2hlbWFzOk8sY29uc3RzOlZlLGluY29tcGxldGVGaXJzdFBhc3M6ITEsc3NySWQ6YWV9fWxldCBtdz1sPT5udWxsO2Z1bmN0'@;
put 'aW9uIFAyKGwsYyxhLGYpe2ZvcihsZXQgZCBpbiBsKWlmKGwuaGFzT3duUHJvcGVydHkoZCkpe2E9bnVsbD09PWE/e306YTtjb25zdCBoPWxbZF07bnVsbD09PWY/UTgoYSxjLGQsaCk6Zi5oYXNPd25Qcm9wZXJ0eShkKSYmUTgoYSxjLGZbZF0saCl9cmV0dXJuIGF9ZnVuY3Rpb24gUTgobCxj'@;
put 'LGEsZil7bC5oYXNPd25Qcm9wZXJ0eShhKT9sW2FdLnB1c2goYyxmKTpsW2FdPVtjLGZdfWZ1bmN0aW9uIFpjKGwsYyxhLGYsZCxoLG0sXyl7Y29uc3QgTz1XcyhjLGEpO2xldCBhZSxYPWMuaW5wdXRzOyFfJiZudWxsIT1YJiYoYWU9WFtmXSk/KF93KGwsYSxhZSxmLGQpLG5mKGMpJiZmdW5j'@;
put 'dGlvbiBETihsLGMpe2NvbnN0IGE9YnQoYyxsKTsxNiZhW1BvXXx8KGFbUG9dfD02NCl9KGEsYy5pbmRleCkpOjMmYy50eXBlJiYoZj1mdW5jdGlvbiBjVChsKXtyZXR1cm4iY2xhc3MiPT09bD8iY2xhc3NOYW1lIjoiZm9yIj09PWw/Imh0bWxGb3IiOiJmb3JtYWN0aW9uIj09PWw/ImZvcm1B'@;
put 'Y3Rpb24iOiJpbm5lckh0bWwiPT09bD8iaW5uZXJIVE1MIjoicmVhZG9ubHkiPT09bD8icmVhZE9ubHkiOiJ0YWJpbmRleCI9PT1sPyJ0YWJJbmRleCI6bH0oZiksZD1udWxsIT1tP20oZCxjLnZhbHVlfHwiIixmKTpkLGguc2V0UHJvcGVydHkoTyxmLGQpKX1mdW5jdGlvbiBndyhsLGMsYSxm'@;
put 'KXtpZihoeCgpKXtjb25zdCBkPW51bGw9PT1mP251bGw6eyIiOi0xfSxoPWZ1bmN0aW9uIEhOKGwsYyl7Y29uc3QgYT1sLmRpcmVjdGl2ZVJlZ2lzdHJ5O2xldCBmPW51bGwsZD1udWxsO2lmKGEpZm9yKGxldCBoPTA7aDxhLmxlbmd0aDtoKyspe2NvbnN0IG09YVtoXTtpZihobShjLG0uc2Vs'@;
put 'ZWN0b3JzLCExKSlpZihmfHwoZj1bXSksYWMobSkpaWYobnVsbCE9PW0uZmluZEhvc3REaXJlY3RpdmVEZWZzKXtjb25zdCBfPVtdO2Q9ZHx8bmV3IE1hcCxtLmZpbmRIb3N0RGlyZWN0aXZlRGVmcyhtLF8sZCksZi51bnNoaWZ0KC4uLl8sbSksdncobCxjLF8ubGVuZ3RoKX1lbHNlIGYudW5z'@;
put 'aGlmdChtKSx2dyhsLGMsMCk7ZWxzZSBkPWR8fG5ldyBNYXAsbS5maW5kSG9zdERpcmVjdGl2ZURlZnM/LihtLGYsZCksZi5wdXNoKG0pfXJldHVybiBudWxsPT09Zj9udWxsOltmLGRdfShsLGEpO2xldCBtLF87bnVsbD09PWg/bT1fPW51bGw6W20sX109aCxudWxsIT09bSYmYWcobCxjLGEs'@;
put 'bSxkLF8pLGQmJmZ1bmN0aW9uIE5OKGwsYyxhKXtpZihjKXtjb25zdCBmPWwubG9jYWxOYW1lcz1bXTtmb3IobGV0IGQ9MDtkPGMubGVuZ3RoO2QrPTIpe2NvbnN0IGg9YVtjW2QrMV1dO2lmKG51bGw9PWgpdGhyb3cgbmV3IElyKC0zMDEsITEpO2YucHVzaChjW2RdLGgpfX19KGEsZixkKX1h'@;
put 'Lm1lcmdlZEF0dHJzPXAyKGEubWVyZ2VkQXR0cnMsYS5hdHRycyl9ZnVuY3Rpb24gYWcobCxjLGEsZixkLGgpe2ZvcihsZXQgWD0wO1g8Zi5sZW5ndGg7WCsrKWZfKHU4KGEsYyksbCxmW1hdLnR5cGUpOyFmdW5jdGlvbiBCTihsLGMsYSl7bC5mbGFnc3w9MSxsLmRpcmVjdGl2ZVN0YXJ0PWMs'@;
put 'bC5kaXJlY3RpdmVFbmQ9YythLGwucHJvdmlkZXJJbmRleGVzPWN9KGEsbC5kYXRhLmxlbmd0aCxmLmxlbmd0aCk7Zm9yKGxldCBYPTA7WDxmLmxlbmd0aDtYKyspe2NvbnN0IGFlPWZbWF07YWUucHJvdmlkZXJzUmVzb2x2ZXImJmFlLnByb3ZpZGVyc1Jlc29sdmVyKGFlKX1sZXQgbT0hMSxf'@;
put 'PSExLE89b2cobCxjLGYubGVuZ3RoLG51bGwpO2ZvcihsZXQgWD0wO1g8Zi5sZW5ndGg7WCsrKXtjb25zdCBhZT1mW1hdO2EubWVyZ2VkQXR0cnM9cDIoYS5tZXJnZWRBdHRycyxhZS5ob3N0QXR0cnMpLGpOKGwsYSxjLE8sYWUpLFZOKE8sYWUsZCksbnVsbCE9PWFlLmNvbnRlbnRRdWVyaWVz'@;
put 'JiYoYS5mbGFnc3w9NCksKG51bGwhPT1hZS5ob3N0QmluZGluZ3N8fG51bGwhPT1hZS5ob3N0QXR0cnN8fDAhPT1hZS5ob3N0VmFycykmJihhLmZsYWdzfD02NCk7Y29uc3QgcGU9YWUudHlwZS5wcm90b3R5cGU7IW0mJihwZS5uZ09uQ2hhbmdlc3x8cGUubmdPbkluaXR8fHBlLm5nRG9DaGVj'@;
put 'aykmJigobC5wcmVPcmRlckhvb2tzPz89W10pLnB1c2goYS5pbmRleCksbT0hMCksIV8mJihwZS5uZ09uQ2hhbmdlc3x8cGUubmdEb0NoZWNrKSYmKChsLnByZU9yZGVyQ2hlY2tIb29rcz8/PVtdKS5wdXNoKGEuaW5kZXgpLF89ITApLE8rK30hZnVuY3Rpb24gT04obCxjLGEpe2NvbnN0IGQ9'@;
put 'Yy5kaXJlY3RpdmVFbmQsaD1sLmRhdGEsbT1jLmF0dHJzLF89W107bGV0IE89bnVsbCxYPW51bGw7Zm9yKGxldCBhZT1jLmRpcmVjdGl2ZVN0YXJ0O2FlPGQ7YWUrKyl7Y29uc3QgcGU9aFthZV0sYmU9YT9hLmdldChwZSk6bnVsbCxWZT1iZT9iZS5vdXRwdXRzOm51bGw7Tz1QMihwZS5pbnB1'@;
put 'dHMsYWUsTyxiZT9iZS5pbnB1dHM6bnVsbCksWD1QMihwZS5vdXRwdXRzLGFlLFgsVmUpO2NvbnN0IFplPW51bGw9PT1PfHxudWxsPT09bXx8bnAoYyk/bnVsbDpaTihPLGFlLG0pO18ucHVzaChaZSl9bnVsbCE9PU8mJihPLmhhc093blByb3BlcnR5KCJjbGFzcyIpJiYoYy5mbGFnc3w9OCks'@;
put 'Ty5oYXNPd25Qcm9wZXJ0eSgic3R5bGUiKSYmKGMuZmxhZ3N8PTE2KSksYy5pbml0aWFsSW5wdXRzPV8sYy5pbnB1dHM9TyxjLm91dHB1dHM9WH0obCxhLGgpfWZ1bmN0aW9uIGZUKGwsYyxhKXtjb25zdCBmPWEuZGlyZWN0aXZlU3RhcnQsZD1hLmRpcmVjdGl2ZUVuZCxoPWEuaW5kZXgsbT1m'@;
put 'dW5jdGlvbiB2eCgpe3JldHVybiBCby5sRnJhbWUuY3VycmVudERpcmVjdGl2ZUluZGV4fSgpO3RyeXtfMihoKTtmb3IobGV0IF89ZjtfPGQ7XysrKXtjb25zdCBPPWwuZGF0YVtfXSxYPWNbX107dDgoXyksKG51bGwhPT1PLmhvc3RCaW5kaW5nc3x8MCE9PU8uaG9zdFZhcnN8fG51bGwhPT1P'@;
put 'Lmhvc3RBdHRycykmJkZOKE8sWCl9fWZpbmFsbHl7XzIoLTEpLHQ4KG0pfX1mdW5jdGlvbiBGTihsLGMpe251bGwhPT1sLmhvc3RCaW5kaW5ncyYmbC5ob3N0QmluZGluZ3MoMSxjKX1mdW5jdGlvbiB2dyhsLGMsYSl7Yy5jb21wb25lbnRPZmZzZXQ9YSwobC5jb21wb25lbnRzPz89W10pLnB1'@;
put 'c2goYy5pbmRleCl9ZnVuY3Rpb24gVk4obCxjLGEpe2lmKGEpe2lmKGMuZXhwb3J0QXMpZm9yKGxldCBmPTA7ZjxjLmV4cG9ydEFzLmxlbmd0aDtmKyspYVtjLmV4cG9ydEFzW2ZdXT1sO2FjKGMpJiYoYVsiIl09bCl9fWZ1bmN0aW9uIGpOKGwsYyxhLGYsZCl7bC5kYXRhW2ZdPWQ7Y29uc3Qg'@;
put 'aD1kLmZhY3Rvcnl8fChkLmZhY3Rvcnk9YWYoZC50eXBlKSksbT1uZXcgT20oaCxhYyhkKSxydCk7bC5ibHVlcHJpbnRbZl09bSxhW2ZdPW0sZnVuY3Rpb24gUk4obCxjLGEsZixkKXtjb25zdCBoPWQuaG9zdEJpbmRpbmdzO2lmKGgpe2xldCBtPWwuaG9zdEJpbmRpbmdPcENvZGVzO251bGw9'@;
put 'PT1tJiYobT1sLmhvc3RCaW5kaW5nT3BDb2Rlcz1bXSk7Y29uc3QgXz1+Yy5pbmRleDsoZnVuY3Rpb24gTE4obCl7bGV0IGM9bC5sZW5ndGg7Zm9yKDtjPjA7KXtjb25zdCBhPWxbLS1jXTtpZigibnVtYmVyIj09dHlwZW9mIGEmJmE8MClyZXR1cm4gYX1yZXR1cm4gMH0pKG0pIT1fJiZtLnB1'@;
put 'c2goXyksbS5wdXNoKGEsZixoKX19KGwsYyxmLG9nKGwsYSxkLmhvc3RWYXJzLHFvKSxkKX1mdW5jdGlvbiB2ZihsLGMsYSxmLGQsaCl7Y29uc3QgbT1XcyhsLGMpOyFmdW5jdGlvbiB5dyhsLGMsYSxmLGQsaCxtKXtpZihudWxsPT1oKWwucmVtb3ZlQXR0cmlidXRlKGMsZCxhKTtlbHNle2Nv'@;
put 'bnN0IF89bnVsbD09bT9JbyhoKTptKGgsZnx8IiIsZCk7bC5zZXRBdHRyaWJ1dGUoYyxkLF8sYSl9fShjW1pvXSxtLGgsbC52YWx1ZSxhLGYsZCl9ZnVuY3Rpb24gVU4obCxjLGEsZixkLGgpe2NvbnN0IG09aFtjXTtpZihudWxsIT09bSlmb3IobGV0IF89MDtfPG0ubGVuZ3RoOylkVChmLGEs'@;
put 'bVtfKytdLG1bXysrXSxtW18rK10pfWZ1bmN0aW9uIGRUKGwsYyxhLGYsZCl7Y29uc3QgaD1icyhudWxsKTt0cnl7Y29uc3QgbT1sLmlucHV0VHJhbnNmb3JtcztudWxsIT09bSYmbS5oYXNPd25Qcm9wZXJ0eShmKSYmKGQ9bVtmXS5jYWxsKGMsZCkpLG51bGwhPT1sLnNldElucHV0P2wuc2V0'@;
put 'SW5wdXQoYyxkLGEsZik6Y1tmXT1kfWZpbmFsbHl7YnMoaCl9fWZ1bmN0aW9uIFpOKGwsYyxhKXtsZXQgZj1udWxsLGQ9MDtmb3IoO2Q8YS5sZW5ndGg7KXtjb25zdCBoPWFbZF07aWYoMCE9PWgpaWYoNSE9PWgpe2lmKCJudW1iZXIiPT10eXBlb2YgaClicmVhaztpZihsLmhhc093blByb3Bl'@;
put 'cnR5KGgpKXtudWxsPT09ZiYmKGY9W10pO2NvbnN0IG09bFtoXTtmb3IobGV0IF89MDtfPG0ubGVuZ3RoO18rPTIpaWYobVtfXT09PWMpe2YucHVzaChoLG1bXysxXSxhW2QrMV0pO2JyZWFrfX1kKz0yfWVsc2UgZCs9MjtlbHNlIGQrPTR9cmV0dXJuIGZ9ZnVuY3Rpb24gaFQobCxjLGEsZil7'@;
put 'cmV0dXJuW2wsITAsITEsYyxudWxsLDAsZixhLG51bGwsbnVsbCxudWxsXX1mdW5jdGlvbiBwVChsLGMpe2NvbnN0IGE9bC5jb250ZW50UXVlcmllcztpZihudWxsIT09YSlmb3IobGV0IGY9MDtmPGEubGVuZ3RoO2YrPTIpe2NvbnN0IGg9YVtmKzFdO2lmKC0xIT09aCl7Y29uc3QgbT1sLmRh'@;
put 'dGFbaF07aV8oYVtmXSksbS5jb250ZW50UXVlcmllcygyLGNbaF0saCl9fX1mdW5jdGlvbiBldihsLGMpe3JldHVybiBsW2cyXT9sW19tXVtYbF09YzpsW2cyXT1jLGxbX21dPWMsY31mdW5jdGlvbiBidyhsLGMsYSl7aV8oMCk7Y29uc3QgZj1icyhudWxsKTt0cnl7YyhsLGEpfWZpbmFsbHl7'@;
put 'YnMoZil9fWZ1bmN0aW9uIG1UKGwpe3JldHVybiBsW05jXXx8KGxbTmNdPVtdKX1mdW5jdGlvbiBnVChsKXtyZXR1cm4gbC5jbGVhbnVwfHwobC5jbGVhbnVwPVtdKX1mdW5jdGlvbiB2VChsLGMsYSl7cmV0dXJuKG51bGw9PT1sfHxhYyhsKSkmJihhPWZ1bmN0aW9uIEFtKGwpe2Zvcig7QXJy'@;
put 'YXkuaXNBcnJheShsKTspe2lmKCJvYmplY3QiPT10eXBlb2YgbFt3bV0pcmV0dXJuIGw7bD1sW05pXX1yZXR1cm4gbnVsbH0oYVtjLmluZGV4XSkpLGFbWm9dfWZ1bmN0aW9uIHlUKGwsYyl7Y29uc3QgYT1sW3FmXSxmPWE/YS5nZXQoUjIsbnVsbCk6bnVsbDtmJiZmLmhhbmRsZUVycm9yKGMp'@;
put 'fWZ1bmN0aW9uIF93KGwsYyxhLGYsZCl7Zm9yKGxldCBoPTA7aDxhLmxlbmd0aDspe2NvbnN0IG09YVtoKytdLF89YVtoKytdO2RUKGwuZGF0YVttXSxjW21dLGYsXyxkKX19ZnVuY3Rpb24gZmQobCxjLGEpe2NvbnN0IGY9bzEoYyxsKTshZnVuY3Rpb24gbkEobCxjLGEpe2wuc2V0VmFsdWUo'@;
put 'YyxhKX0obFtab10sZixhKX1mdW5jdGlvbiBZTihsLGMpe2NvbnN0IGE9YnQoYyxsKSxmPWFbamldOyFmdW5jdGlvbiBXTihsLGMpe2ZvcihsZXQgYT1jLmxlbmd0aDthPGwuYmx1ZXByaW50Lmxlbmd0aDthKyspYy5wdXNoKGwuYmx1ZXByaW50W2FdKX0oZixhKTtjb25zdCBkPWFbTmldO251'@;
put 'bGwhPT1kJiZudWxsPT09YVt3MF0mJihhW3cwXT1IQShkLGFbcWZdKSksd3coZixhLGFbQmxdKX1mdW5jdGlvbiB3dyhsLGMsYSl7b18oYyk7dHJ5e2NvbnN0IGY9bC52aWV3UXVlcnk7bnVsbCE9PWYmJmJ3KDEsZixhKTtjb25zdCBkPWwudGVtcGxhdGU7bnVsbCE9PWQmJmlUKGwsYyxkLDEs'@;
put 'YSksbC5maXJzdENyZWF0ZVBhc3MmJihsLmZpcnN0Q3JlYXRlUGFzcz0hMSksbC5zdGF0aWNDb250ZW50UXVlcmllcyYmcFQobCxjKSxsLnN0YXRpY1ZpZXdRdWVyaWVzJiZidygyLGwudmlld1F1ZXJ5LGEpO2NvbnN0IGg9bC5jb21wb25lbnRzO251bGwhPT1oJiZmdW5jdGlvbiBiVChsLGMp'@;
put 'e2ZvcihsZXQgYT0wO2E8Yy5sZW5ndGg7YSsrKVlOKGwsY1thXSl9KGMsaCl9Y2F0Y2goZil7dGhyb3cgbC5maXJzdENyZWF0ZVBhc3MmJihsLmluY29tcGxldGVGaXJzdFBhc3M9ITAsbC5maXJzdENyZWF0ZVBhc3M9ITEpLGZ9ZmluYWxseXtjW1BvXSY9LTUsbjgoKX19bGV0IF9UPSgoKT0+'@;
put 'e2NsYXNzIGx7Y29uc3RydWN0b3IoKXt0aGlzLmFsbD1uZXcgU2V0LHRoaXMucXVldWU9bmV3IE1hcH1jcmVhdGUoYSxmLGQpe2NvbnN0IGg9dHlwZW9mIFpvbmU+InUiP251bGw6Wm9uZS5jdXJyZW50LG09bmV3IHE2KGEsWD0+e3RoaXMuYWxsLmhhcyhYKSYmdGhpcy5xdWV1ZS5zZXQoWCxo'@;
put 'KX0sZCk7bGV0IF87dGhpcy5hbGwuYWRkKG0pLG0ubm90aWZ5KCk7Y29uc3QgTz0oKT0+e20uY2xlYW51cCgpLF8/LigpLHRoaXMuYWxsLmRlbGV0ZShtKSx0aGlzLnF1ZXVlLmRlbGV0ZShtKX07cmV0dXJuIF89Zj8ub25EZXN0cm95KE8pLHtkZXN0cm95Ok99fWZsdXNoKCl7aWYoMCE9PXRo'@;
put 'aXMucXVldWUuc2l6ZSlmb3IoY29uc3RbYSxmXW9mIHRoaXMucXVldWUpdGhpcy5xdWV1ZS5kZWxldGUoYSksZj9mLnJ1bigoKT0+YS5ydW4oKSk6YS5ydW4oKX1nZXQgaXNRdWV1ZUVtcHR5KCl7cmV0dXJuIDA9PT10aGlzLnF1ZXVlLnNpemV9fXJldHVybiBsLlx1MDI3NXByb3Y9aHIoe3Rv'@;
put 'a2VuOmwscHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+bmV3IGx9KSxsfSkoKTtmdW5jdGlvbiB0dihsLGMsYSl7bGV0IGY9YT9sLnN0eWxlczpudWxsLGQ9YT9sLmNsYXNzZXM6bnVsbCxoPTA7aWYobnVsbCE9PWMpZm9yKGxldCBtPTA7bTxjLmxlbmd0aDttKyspe2NvbnN0IF89Y1tt'@;
put 'XTsibnVtYmVyIj09dHlwZW9mIF8/aD1fOjE9PWg/ZD1rdShkLF8pOjI9PWgmJihmPWt1KGYsXysiOiAiK2NbKyttXSsiOyIpKX1hP2wuc3R5bGVzPWY6bC5zdHlsZXNXaXRob3V0SG9zdD1mLGE/bC5jbGFzc2VzPWQ6bC5jbGFzc2VzV2l0aG91dEhvc3Q9ZH1mdW5jdGlvbiBsZyhsLGMsYSxm'@;
put 'LGQ9ITEpe2Zvcig7bnVsbCE9PWE7KXtjb25zdCBoPWNbYS5pbmRleF07aWYobnVsbCE9PWgmJmYucHVzaChfbChoKSksZHUoaCkpe2ZvcihsZXQgXz1mdTtfPGgubGVuZ3RoO18rKyl7Y29uc3QgTz1oW19dLFg9T1tqaV0uZmlyc3RDaGlsZDtudWxsIT09WCYmbGcoT1tqaV0sTyxYLGYpfWhb'@;
put 'QzBdIT09aFtOaV0mJmYucHVzaChoW0MwXSl9Y29uc3QgbT1hLnR5cGU7aWYoOCZtKWxnKGwsYyxhLmNoaWxkLGYpO2Vsc2UgaWYoMzImbSl7Y29uc3QgXz1NXyhhLGMpO2xldCBPO2Zvcig7Tz1fKCk7KWYucHVzaChPKX1lbHNlIGlmKDE2Jm0pe2NvbnN0IF89c0EoYyxhKTtpZihBcnJheS5p'@;
put 'c0FycmF5KF8pKWYucHVzaCguLi5fKTtlbHNle2NvbnN0IE89am0oY1tKbF0pO2xnKE9bamldLE8sXyxmLCEwKX19YT1kP2EucHJvamVjdGlvbk5leHQ6YS5uZXh0fXJldHVybiBmfWZ1bmN0aW9uIG52KGwsYyxhLGY9ITApe2NvbnN0IGQ9Y1tRMV0ucmVuZGVyZXJGYWN0b3J5O2QuYmVnaW4m'@;
put 'JmQuYmVnaW4oKTt0cnl7d1QobCxjLGwudGVtcGxhdGUsYSl9Y2F0Y2gobSl7dGhyb3cgZiYmeVQoYyxtKSxtfWZpbmFsbHl7ZC5lbmQmJmQuZW5kKCksY1tRMV0uZWZmZWN0TWFuYWdlcj8uZmx1c2goKX19ZnVuY3Rpb24gd1QobCxjLGEsZil7Y29uc3QgZD1jW1BvXTtpZigyNTYhPSgyNTYm'@;
put 'ZCkpe2NbUTFdLmVmZmVjdE1hbmFnZXI/LmZsdXNoKCksb18oYyk7dHJ5e1NvKGMpLGZ1bmN0aW9uIGd4KGwpe3JldHVybiBCby5sRnJhbWUuYmluZGluZ0luZGV4PWx9KGwuYmluZGluZ1N0YXJ0SW5kZXgpLG51bGwhPT1hJiZpVChsLGMsYSwyLGYpO2NvbnN0IG09Mz09KDMmZCk7aWYobSl7'@;
put 'Y29uc3QgWD1sLnByZU9yZGVyQ2hlY2tIb29rcztudWxsIT09WCYmbzgoYyxYLG51bGwpfWVsc2V7Y29uc3QgWD1sLnByZU9yZGVySG9va3M7bnVsbCE9PVgmJmE4KGMsWCwwLG51bGwpLGFfKGMsMCl9aWYoZnVuY3Rpb24gWE4obCl7Zm9yKGxldCBjPWVBKGwpO251bGwhPT1jO2M9dEEoYykp'@;
put 'e2lmKCFjW3o2XSljb250aW51ZTtjb25zdCBhPWNbb2hdO2ZvcihsZXQgZj0wO2Y8YS5sZW5ndGg7ZisrKXtyYShhW2ZdKX19fShjKSxDVChjLDIpLG51bGwhPT1sLmNvbnRlbnRRdWVyaWVzJiZwVChsLGMpLG0pe2NvbnN0IFg9bC5jb250ZW50Q2hlY2tIb29rcztudWxsIT09WCYmbzgoYyxY'@;
put 'KX1lbHNle2NvbnN0IFg9bC5jb250ZW50SG9va3M7bnVsbCE9PVgmJmE4KGMsWCwxKSxhXyhjLDEpfSFmdW5jdGlvbiByVChsLGMpe2NvbnN0IGE9bC5ob3N0QmluZGluZ09wQ29kZXM7aWYobnVsbD09PWEpcmV0dXJuO2NvbnN0IGY9S0EoYyxscCk7dHJ5e2ZvcihsZXQgZD0wO2Q8YS5sZW5n'@;
put 'dGg7ZCsrKXtjb25zdCBoPWFbZF07aWYoaDwwKV8yKH5oKTtlbHNle2NvbnN0IG09aCxfPWFbKytkXSxPPWFbKytkXTtCRihfLG0pLGYucnVuSW5Db250ZXh0KE8sMixjW21dKX19fWZpbmFsbHl7bnVsbD09PWNbbHBdJiZxQShjLGxwKSxfMigtMSl9fShsLGMpO2NvbnN0IF89bC5jb21wb25l'@;
put 'bnRzO251bGwhPT1fJiZNVChjLF8sMCk7Y29uc3QgTz1sLnZpZXdRdWVyeTtpZihudWxsIT09TyYmYncoMixPLGYpLG0pe2NvbnN0IFg9bC52aWV3Q2hlY2tIb29rcztudWxsIT09WCYmbzgoYyxYKX1lbHNle2NvbnN0IFg9bC52aWV3SG9va3M7bnVsbCE9PVgmJmE4KGMsWCwyKSxhXyhjLDIp'@;
put 'fSEwPT09bC5maXJzdFVwZGF0ZVBhc3MmJihsLmZpcnN0VXBkYXRlUGFzcz0hMSksY1tQb10mPS03MyxZYShjKX1maW5hbGx5e244KCl9fX1mdW5jdGlvbiBDVChsLGMpe2ZvcihsZXQgYT1lQShsKTtudWxsIT09YTthPXRBKGEpKWZvcihsZXQgZj1mdTtmPGEubGVuZ3RoO2YrKylTVChhW2Zd'@;
put 'LGMpfWZ1bmN0aW9uIEpOKGwsYyxhKXtTVChidChjLGwpLGEpfWZ1bmN0aW9uIFNUKGwsYyl7aWYoIWZ1bmN0aW9uIEt0KGwpe3JldHVybiAxMjg9PSgxMjgmbFtQb10pfShsKSlyZXR1cm47Y29uc3QgYT1sW2ppXTtpZig4MCZsW1BvXSYmMD09PWN8fDEwMjQmbFtQb118fDI9PT1jKXdUKGEs'@;
put 'bCxhLnRlbXBsYXRlLGxbQmxdKTtlbHNlIGlmKGxbSjFdPjApe0NUKGwsMSk7Y29uc3QgZD1sW2ppXS5jb21wb25lbnRzO251bGwhPT1kJiZNVChsLGQsMSl9fWZ1bmN0aW9uIE1UKGwsYyxhKXtmb3IobGV0IGY9MDtmPGMubGVuZ3RoO2YrKylKTihsLGNbZl0sYSl9Y2xhc3Mgc2d7Z2V0IHJv'@;
put 'b3ROb2Rlcygpe2NvbnN0IGM9dGhpcy5fbFZpZXcsYT1jW2ppXTtyZXR1cm4gbGcoYSxjLGEuZmlyc3RDaGlsZCxbXSl9Y29uc3RydWN0b3IoYyxhKXt0aGlzLl9sVmlldz1jLHRoaXMuX2NkUmVmSW5qZWN0aW5nVmlldz1hLHRoaXMuX2FwcFJlZj1udWxsLHRoaXMuX2F0dGFjaGVkVG9WaWV3'@;
put 'Q29udGFpbmVyPSExfWdldCBjb250ZXh0KCl7cmV0dXJuIHRoaXMuX2xWaWV3W0JsXX1zZXQgY29udGV4dChjKXt0aGlzLl9sVmlld1tCbF09Y31nZXQgZGVzdHJveWVkKCl7cmV0dXJuIDI1Nj09KDI1NiZ0aGlzLl9sVmlld1tQb10pfWRlc3Ryb3koKXtpZih0aGlzLl9hcHBSZWYpdGhpcy5f'@;
put 'YXBwUmVmLmRldGFjaFZpZXcodGhpcyk7ZWxzZSBpZih0aGlzLl9hdHRhY2hlZFRvVmlld0NvbnRhaW5lcil7Y29uc3QgYz10aGlzLl9sVmlld1tmbF07aWYoZHUoYykpe2NvbnN0IGE9Y1s4XSxmPWE/YS5pbmRleE9mKHRoaXMpOi0xO2Y+LTEmJih4MihjLGYpLGg4KGEsZikpfXRoaXMuX2F0'@;
put 'dGFjaGVkVG9WaWV3Q29udGFpbmVyPSExfUE4KHRoaXMuX2xWaWV3W2ppXSx0aGlzLl9sVmlldyl9b25EZXN0cm95KGMpeyFmdW5jdGlvbiBNMChsLGMpe2lmKDI1Nj09KDI1NiZsW1BvXSkpdGhyb3cgbmV3IElyKDkxMSwhMSk7bnVsbD09PWxbdGZdJiYobFt0Zl09W10pLGxbdGZdLnB1c2go'@;
put 'Yyl9KHRoaXMuX2xWaWV3LGMpfW1hcmtGb3JDaGVjaygpe2lnKHRoaXMuX2NkUmVmSW5qZWN0aW5nVmlld3x8dGhpcy5fbFZpZXcpfWRldGFjaCgpe3RoaXMuX2xWaWV3W1BvXSY9LTEyOX1yZWF0dGFjaCgpe3RoaXMuX2xWaWV3W1BvXXw9MTI4fWRldGVjdENoYW5nZXMoKXtudih0aGlzLl9s'@;
put 'Vmlld1tqaV0sdGhpcy5fbFZpZXcsdGhpcy5jb250ZXh0KX1jaGVja05vQ2hhbmdlcygpe31hdHRhY2hUb1ZpZXdDb250YWluZXJSZWYoKXtpZih0aGlzLl9hcHBSZWYpdGhyb3cgbmV3IElyKDkwMiwhMSk7dGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXI9ITB9ZGV0YWNoRnJvbUFwcFJl'@;
put 'Zigpe3RoaXMuX2FwcFJlZj1udWxsLGZ1bmN0aW9uIElIKGwsYyl7Wm0obCxjLGNbWm9dLDIsbnVsbCxudWxsKX0odGhpcy5fbFZpZXdbamldLHRoaXMuX2xWaWV3KX1hdHRhY2hUb0FwcFJlZihjKXtpZih0aGlzLl9hdHRhY2hlZFRvVmlld0NvbnRhaW5lcil0aHJvdyBuZXcgSXIoOTAyLCEx'@;
put 'KTt0aGlzLl9hcHBSZWY9Y319Y2xhc3MgUU4gZXh0ZW5kcyBzZ3tjb25zdHJ1Y3RvcihjKXtzdXBlcihjKSx0aGlzLl92aWV3PWN9ZGV0ZWN0Q2hhbmdlcygpe2NvbnN0IGM9dGhpcy5fdmlldztudihjW2ppXSxjLGNbQmxdLCExKX1jaGVja05vQ2hhbmdlcygpe31nZXQgY29udGV4dCgpe3Jl'@;
put 'dHVybiBudWxsfX1jbGFzcyBrVCBleHRlbmRzIGMxe2NvbnN0cnVjdG9yKGMpe3N1cGVyKCksdGhpcy5uZ01vZHVsZT1jfXJlc29sdmVDb21wb25lbnRGYWN0b3J5KGMpe2NvbnN0IGE9bmEoYyk7cmV0dXJuIG5ldyB1ZyhhLHRoaXMubmdNb2R1bGUpfX1mdW5jdGlvbiBFVChsKXtjb25zdCBj'@;
put 'PVtdO2ZvcihsZXQgYSBpbiBsKWwuaGFzT3duUHJvcGVydHkoYSkmJmMucHVzaCh7cHJvcE5hbWU6bFthXSx0ZW1wbGF0ZU5hbWU6YX0pO3JldHVybiBjfWNsYXNzIHRWe2NvbnN0cnVjdG9yKGMsYSl7dGhpcy5pbmplY3Rvcj1jLHRoaXMucGFyZW50SW5qZWN0b3I9YX1nZXQoYyxhLGYpe2Y9'@;
put 'eTAoZik7Y29uc3QgZD10aGlzLmluamVjdG9yLmdldChjLGl3LGYpO3JldHVybiBkIT09aXd8fGE9PT1pdz9kOnRoaXMucGFyZW50SW5qZWN0b3IuZ2V0KGMsYSxmKX19Y2xhc3MgdWcgZXh0ZW5kcyBqQXtnZXQgaW5wdXRzKCl7Y29uc3QgYz10aGlzLmNvbXBvbmVudERlZixhPWMuaW5wdXRU'@;
put 'cmFuc2Zvcm1zLGY9RVQoYy5pbnB1dHMpO2lmKG51bGwhPT1hKWZvcihjb25zdCBkIG9mIGYpYS5oYXNPd25Qcm9wZXJ0eShkLnByb3BOYW1lKSYmKGQudHJhbnNmb3JtPWFbZC5wcm9wTmFtZV0pO3JldHVybiBmfWdldCBvdXRwdXRzKCl7cmV0dXJuIEVUKHRoaXMuY29tcG9uZW50RGVmLm91'@;
put 'dHB1dHMpfWNvbnN0cnVjdG9yKGMsYSl7c3VwZXIoKSx0aGlzLmNvbXBvbmVudERlZj1jLHRoaXMubmdNb2R1bGU9YSx0aGlzLmNvbXBvbmVudFR5cGU9Yy50eXBlLHRoaXMuc2VsZWN0b3I9ZnVuY3Rpb24gSGIobCl7cmV0dXJuIGwubWFwKFY2KS5qb2luKCIsIil9KGMuc2VsZWN0b3JzKSx0'@;
put 'aGlzLm5nQ29udGVudFNlbGVjdG9ycz1jLm5nQ29udGVudFNlbGVjdG9ycz9jLm5nQ29udGVudFNlbGVjdG9yczpbXSx0aGlzLmlzQm91bmRUb01vZHVsZT0hIWF9Y3JlYXRlKGMsYSxmLGQpe2xldCBoPShkPWR8fHRoaXMubmdNb2R1bGUpaW5zdGFuY2VvZiB1MT9kOmQ/LmluamVjdG9yO2gm'@;
put 'Jm51bGwhPT10aGlzLmNvbXBvbmVudERlZi5nZXRTdGFuZGFsb25lSW5qZWN0b3ImJihoPXRoaXMuY29tcG9uZW50RGVmLmdldFN0YW5kYWxvbmVJbmplY3RvcihoKXx8aCk7Y29uc3QgbT1oP25ldyB0VihjLGgpOmMsXz1tLmdldChIcCxudWxsKTtpZihudWxsPT09Xyl0aHJvdyBuZXcgSXIo'@;
put 'NDA3LCExKTtjb25zdCBhZT17cmVuZGVyZXJGYWN0b3J5Ol8sc2FuaXRpemVyOm0uZ2V0KFk4LG51bGwpLGVmZmVjdE1hbmFnZXI6bS5nZXQoX1QsbnVsbCl9LHBlPV8uY3JlYXRlUmVuZGVyZXIobnVsbCx0aGlzLmNvbXBvbmVudERlZiksYmU9dGhpcy5jb21wb25lbnREZWYuc2VsZWN0b3Jz'@;
put 'WzBdWzBdfHwiZGl2Iix4ZT1mP2Z1bmN0aW9uIGxUKGwsYyxhLGYpe2NvbnN0IGg9Zi5nZXQobHcsITEpfHxhPT09anUuU2hhZG93RG9tLG09bC5zZWxlY3RSb290RWxlbWVudChjLGgpO3JldHVybiBmdW5jdGlvbiBBTihsKXttdyhsKX0obSksbX0ocGUsZix0aGlzLmNvbXBvbmVudERlZi5l'@;
put 'bmNhcHN1bGF0aW9uLG0pOng4KHBlLGJlLGZ1bmN0aW9uIGVWKGwpe2NvbnN0IGM9bC50b0xvd2VyQ2FzZSgpO3JldHVybiJzdmciPT09Yz8ic3ZnIjoibWF0aCI9PT1jPyJtYXRoIjpudWxsfShiZSkpLGx0PXRoaXMuY29tcG9uZW50RGVmLnNpZ25hbHM/NDYwODp0aGlzLmNvbXBvbmVudERl'@;
put 'Zi5vblB1c2g/NTc2OjUyOCxkdD1CcCgwLG51bGwsbnVsbCwxLDAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpLGd0PXE4KG51bGwsZHQsbnVsbCxsdCxudWxsLG51bGwsYWUscGUsbSxudWxsLG51bGwpO2xldCBqdCxybjtvXyhndCk7dHJ5e2NvbnN0IFh0PXRoaXMuY29tcG9uZW50'@;
put 'RGVmO2xldCB5bixRbj1udWxsO1h0LmZpbmRIb3N0RGlyZWN0aXZlRGVmcz8oeW49W10sUW49bmV3IE1hcCxYdC5maW5kSG9zdERpcmVjdGl2ZURlZnMoWHQseW4sUW4pLHluLnB1c2goWHQpKTp5bj1bWHRdO2NvbnN0IE9yPWZ1bmN0aW9uIHhUKGwsYyl7Y29uc3QgYT1sW2ppXSxmPXlhO3Jl'@;
put 'dHVybiBsW2ZdPWMsVnAoYSxmLDIsIiNob3N0IixudWxsKX0oZ3QseGUpLFZyPWZ1bmN0aW9uIHJWKGwsYyxhLGYsZCxoLG0pe2NvbnN0IF89ZFtqaV07IWZ1bmN0aW9uIGlWKGwsYyxhLGYpe2Zvcihjb25zdCBkIG9mIGwpYy5tZXJnZWRBdHRycz1wMihjLm1lcmdlZEF0dHJzLGQuaG9zdEF0'@;
put 'dHJzKTtudWxsIT09Yy5tZXJnZWRBdHRycyYmKHR2KGMsYy5tZXJnZWRBdHRycywhMCksbnVsbCE9PWEmJmRBKGYsYSxjKSl9KGYsbCxjLG0pO2xldCBPPW51bGw7bnVsbCE9PWMmJihPPUhBKGMsZFtxZl0pKTtjb25zdCBYPWgucmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKGMsYSk7'@;
put 'bGV0IGFlPTE2O2Euc2lnbmFscz9hZT00MDk2OmEub25QdXNoJiYoYWU9NjQpO2NvbnN0IHBlPXE4KGQsb1QoYSksbnVsbCxhZSxkW2wuaW5kZXhdLGwsaCxYLG51bGwsbnVsbCxPKTtyZXR1cm4gXy5maXJzdENyZWF0ZVBhc3MmJnZ3KF8sbCxmLmxlbmd0aC0xKSxldihkLHBlKSxkW2wuaW5k'@;
put 'ZXhdPXBlfShPcix4ZSxYdCx5bixndCxhZSxwZSk7cm49QWUoZHQseWEpLHhlJiZmdW5jdGlvbiBhVihsLGMsYSxmKXtpZihmKSRmKGwsYSxbIm5nLXZlcnNpb24iLHlOLmZ1bGxdKTtlbHNle2NvbnN0e2F0dHJzOmQsY2xhc3NlczpofT1mdW5jdGlvbiBtbShsKXtjb25zdCBjPVtdLGE9W107'@;
put 'bGV0IGY9MSxkPTI7Zm9yKDtmPGwubGVuZ3RoOyl7bGV0IGg9bFtmXTtpZigic3RyaW5nIj09dHlwZW9mIGgpMj09PWQ/IiIhPT1oJiZjLnB1c2goaCxsWysrZl0pOjg9PT1kJiZhLnB1c2goaCk7ZWxzZXtpZighVXUoZCkpYnJlYWs7ZD1ofWYrK31yZXR1cm57YXR0cnM6YyxjbGFzc2VzOmF9'@;
put 'fShjLnNlbGVjdG9yc1swXSk7ZCYmJGYobCxhLGQpLGgmJmgubGVuZ3RoPjAmJmZBKGwsYSxoLmpvaW4oIiAiKSl9fShwZSxYdCx4ZSxmKSx2b2lkIDAhPT1hJiZmdW5jdGlvbiBsVihsLGMsYSl7Y29uc3QgZj1sLnByb2plY3Rpb249W107Zm9yKGxldCBkPTA7ZDxjLmxlbmd0aDtkKyspe2Nv'@;
put 'bnN0IGg9YVtkXTtmLnB1c2gobnVsbCE9aD9BcnJheS5mcm9tKGgpOm51bGwpfX0ocm4sdGhpcy5uZ0NvbnRlbnRTZWxlY3RvcnMsYSksanQ9ZnVuY3Rpb24gb1YobCxjLGEsZixkLGgpe2NvbnN0IG09RHUoKSxfPWRbamldLE89V3MobSxkKTthZyhfLGQsbSxhLG51bGwsZik7Zm9yKGxldCBh'@;
put 'ZT0wO2FlPGEubGVuZ3RoO2FlKyspV3UoQzIoZCxfLG0uZGlyZWN0aXZlU3RhcnQrYWUsbSksZCk7ZlQoXyxkLG0pLE8mJld1KE8sZCk7Y29uc3QgWD1DMihkLF8sbS5kaXJlY3RpdmVTdGFydCttLmNvbXBvbmVudE9mZnNldCxtKTtpZihsW0JsXT1kW0JsXT1YLG51bGwhPT1oKWZvcihjb25z'@;
put 'dCBhZSBvZiBoKWFlKFgsYyk7cmV0dXJuIGh3KF8sbSxsKSxYfShWcixYdCx5bixRbixndCxbc1ZdKSx3dyhkdCxndCxudWxsKX1maW5hbGx5e244KCl9cmV0dXJuIG5ldyBuVih0aGlzLmNvbXBvbmVudFR5cGUsanQsdWQocm4sZ3QpLGd0LHJuKX19Y2xhc3MgblYgZXh0ZW5kcyBCQXtjb25z'@;
put 'dHJ1Y3RvcihjLGEsZixkLGgpe3N1cGVyKCksdGhpcy5sb2NhdGlvbj1mLHRoaXMuX3Jvb3RMVmlldz1kLHRoaXMuX3ROb2RlPWgsdGhpcy5wcmV2aW91c0lucHV0VmFsdWVzPW51bGwsdGhpcy5pbnN0YW5jZT1hLHRoaXMuaG9zdFZpZXc9dGhpcy5jaGFuZ2VEZXRlY3RvclJlZj1uZXcgUU4o'@;
put 'ZCksdGhpcy5jb21wb25lbnRUeXBlPWN9c2V0SW5wdXQoYyxhKXtjb25zdCBmPXRoaXMuX3ROb2RlLmlucHV0cztsZXQgZDtpZihudWxsIT09ZiYmKGQ9ZltjXSkpe2lmKHRoaXMucHJldmlvdXNJbnB1dFZhbHVlcz8/PW5ldyBNYXAsdGhpcy5wcmV2aW91c0lucHV0VmFsdWVzLmhhcyhjKSYm'@;
put 'T2JqZWN0LmlzKHRoaXMucHJldmlvdXNJbnB1dFZhbHVlcy5nZXQoYyksYSkpcmV0dXJuO2NvbnN0IGg9dGhpcy5fcm9vdExWaWV3O193KGhbamldLGgsZCxjLGEpLHRoaXMucHJldmlvdXNJbnB1dFZhbHVlcy5zZXQoYyxhKSxpZyhidCh0aGlzLl90Tm9kZS5pbmRleCxoKSl9fWdldCBpbmpl'@;
put 'Y3Rvcigpe3JldHVybiBuZXcgdnAodGhpcy5fdE5vZGUsdGhpcy5fcm9vdExWaWV3KX1kZXN0cm95KCl7dGhpcy5ob3N0Vmlldy5kZXN0cm95KCl9b25EZXN0cm95KGMpe3RoaXMuaG9zdFZpZXcub25EZXN0cm95KGMpfX1mdW5jdGlvbiBzVigpe2NvbnN0IGw9RHUoKTtpOChRcigpW2ppXSxs'@;
put 'KX1mdW5jdGlvbiBybyhsKXtsZXQgYz1mdW5jdGlvbiBBVChsKXtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKGwucHJvdG90eXBlKS5jb25zdHJ1Y3Rvcn0obC50eXBlKSxhPSEwO2NvbnN0IGY9W2xdO2Zvcig7Yzspe2xldCBkO2lmKGFjKGwpKWQ9Yy5cdTAyNzVjbXB8fGMuXHUwMjc1'@;
put 'ZGlyO2Vsc2V7aWYoYy5cdTAyNzVjbXApdGhyb3cgbmV3IElyKDkwMywhMSk7ZD1jLlx1MDI3NWRpcn1pZihkKXtpZihhKXtmLnB1c2goZCk7Y29uc3QgbT1sO20uaW5wdXRzPXJ2KGwuaW5wdXRzKSxtLmlucHV0VHJhbnNmb3Jtcz1ydihsLmlucHV0VHJhbnNmb3JtcyksbS5kZWNsYXJlZElu'@;
put 'cHV0cz1ydihsLmRlY2xhcmVkSW5wdXRzKSxtLm91dHB1dHM9cnYobC5vdXRwdXRzKTtjb25zdCBfPWQuaG9zdEJpbmRpbmdzO18mJmZWKGwsXyk7Y29uc3QgTz1kLnZpZXdRdWVyeSxYPWQuY29udGVudFF1ZXJpZXM7aWYoTyYmdVYobCxPKSxYJiZjVihsLFgpLHAwKGwuaW5wdXRzLGQuaW5w'@;
put 'dXRzKSxwMChsLmRlY2xhcmVkSW5wdXRzLGQuZGVjbGFyZWRJbnB1dHMpLHAwKGwub3V0cHV0cyxkLm91dHB1dHMpLG51bGwhPT1kLmlucHV0VHJhbnNmb3JtcyYmKG51bGw9PT1tLmlucHV0VHJhbnNmb3JtcyYmKG0uaW5wdXRUcmFuc2Zvcm1zPXt9KSxwMChtLmlucHV0VHJhbnNmb3Jtcyxk'@;
put 'LmlucHV0VHJhbnNmb3JtcykpLGFjKGQpJiZkLmRhdGEuYW5pbWF0aW9uKXtjb25zdCBhZT1sLmRhdGE7YWUuYW5pbWF0aW9uPShhZS5hbmltYXRpb258fFtdKS5jb25jYXQoZC5kYXRhLmFuaW1hdGlvbil9fWNvbnN0IGg9ZC5mZWF0dXJlcztpZihoKWZvcihsZXQgbT0wO208aC5sZW5ndGg7'@;
put 'bSsrKXtjb25zdCBfPWhbbV07XyYmXy5uZ0luaGVyaXQmJl8obCksXz09PXJvJiYoYT0hMSl9fWM9T2JqZWN0LmdldFByb3RvdHlwZU9mKGMpfSFmdW5jdGlvbiBDdyhsKXtsZXQgYz0wLGE9bnVsbDtmb3IobGV0IGY9bC5sZW5ndGgtMTtmPj0wO2YtLSl7Y29uc3QgZD1sW2ZdO2QuaG9zdFZh'@;
put 'cnM9Yys9ZC5ob3N0VmFycyxkLmhvc3RBdHRycz1wMihkLmhvc3RBdHRycyxhPXAyKGEsZC5ob3N0QXR0cnMpKX19KGYpfWZ1bmN0aW9uIHJ2KGwpe3JldHVybiBsPT09aWM/e306bD09PXhhP1tdOmx9ZnVuY3Rpb24gdVYobCxjKXtjb25zdCBhPWwudmlld1F1ZXJ5O2wudmlld1F1ZXJ5PWE/'@;
put 'KGYsZCk9PntjKGYsZCksYShmLGQpfTpjfWZ1bmN0aW9uIGNWKGwsYyl7Y29uc3QgYT1sLmNvbnRlbnRRdWVyaWVzO2wuY29udGVudFF1ZXJpZXM9YT8oZixkLGgpPT57YyhmLGQsaCksYShmLGQsaCl9OmN9ZnVuY3Rpb24gZlYobCxjKXtjb25zdCBhPWwuaG9zdEJpbmRpbmdzO2wuaG9zdEJp'@;
put 'bmRpbmdzPWE/KGYsZCk9PntjKGYsZCksYShmLGQpfTpjfWZ1bmN0aW9uIElUKGwpe2NvbnN0IGM9bC5pbnB1dENvbmZpZyxhPXt9O2Zvcihjb25zdCBmIGluIGMpaWYoYy5oYXNPd25Qcm9wZXJ0eShmKSl7Y29uc3QgZD1jW2ZdO0FycmF5LmlzQXJyYXkoZCkmJmRbMl0mJihhW2ZdPWRbMl0p'@;
put 'fWwuaW5wdXRUcmFuc2Zvcm1zPWF9ZnVuY3Rpb24gaXYobCl7cmV0dXJuISFvdihsKSYmKEFycmF5LmlzQXJyYXkobCl8fCEobCBpbnN0YW5jZW9mIE1hcCkmJlN5bWJvbC5pdGVyYXRvciBpbiBsKX1mdW5jdGlvbiBvdihsKXtyZXR1cm4gbnVsbCE9PWwmJigiZnVuY3Rpb24iPT10eXBlb2Yg'@;
put 'bHx8Im9iamVjdCI9PXR5cGVvZiBsKX1mdW5jdGlvbiB5ZihsLGMsYSl7cmV0dXJuIGxbY109YX1mdW5jdGlvbiBHdShsLGMsYSl7cmV0dXJuIU9iamVjdC5pcyhsW2NdLGEpJiYobFtjXT1hLCEwKX1mdW5jdGlvbiBGMihsLGMsYSxmKXtjb25zdCBkPUd1KGwsYyxhKTtyZXR1cm4gR3UobCxj'@;
put 'KzEsZil8fGR9ZnVuY3Rpb24gYXYobCxjLGEsZixkKXtjb25zdCBoPUYyKGwsYyxhLGYpO3JldHVybiBHdShsLGMrMixkKXx8aH1mdW5jdGlvbiB4MChsLGMsYSxmLGQsaCl7Y29uc3QgbT1GMihsLGMsYSxmKTtyZXR1cm4gRjIobCxjKzIsZCxoKXx8bX1mdW5jdGlvbiBScihsLGMsYSxmKXtj'@;
put 'b25zdCBkPVFyKCk7cmV0dXJuIEd1KGQscHAoKSxjKSYmKElhKCksdmYoUWwoKSxkLGwsYyxhLGYpKSxScn1mdW5jdGlvbiB6cChsLGMsYSxmKXtyZXR1cm4gR3UobCxwcCgpLGEpP2MrSW8oYSkrZjpxb31mdW5jdGlvbiB0dChsLGMsYSxmLGQsaCxtLF8pe2NvbnN0IE89UXIoKSxYPUlhKCks'@;
put 'YWU9bCt5YSxwZT1YLmZpcnN0Q3JlYXRlUGFzcz9mdW5jdGlvbiBGVihsLGMsYSxmLGQsaCxtLF8sTyl7Y29uc3QgWD1jLmNvbnN0cyxhZT1WcChjLGwsNCxtfHxudWxsLFByKFgsXykpO2d3KGMsYSxhZSxQcihYLE8pKSxpOChjLGFlKTtjb25zdCBwZT1hZS50Vmlldz1CcCgyLGFlLGYsZCxo'@;
put 'LGMuZGlyZWN0aXZlUmVnaXN0cnksYy5waXBlUmVnaXN0cnksbnVsbCxjLnNjaGVtYXMsWCxudWxsKTtyZXR1cm4gbnVsbCE9PWMucXVlcmllcyYmKGMucXVlcmllcy50ZW1wbGF0ZShjLGFlKSxwZS5xdWVyaWVzPWMucXVlcmllcy5lbWJlZGRlZFRWaWV3KGFlKSksYWV9KGFlLFgsTyxjLGEs'@;
put 'ZixkLGgsbSk6WC5kYXRhW2FlXTtsZihwZSwhMSk7Y29uc3QgYmU9SXcoWCxPLHBlLGwpO3I4KCkmJkk4KFgsTyxiZSxwZSksV3UoYmUsTyksZXYoTyxPW2FlXT1oVChiZSxPLGJlLHBlKSkseTIocGUpJiZwdyhYLE8scGUpLG51bGwhPW0mJlg4KE8scGUsXyl9bGV0IEl3PWZ1bmN0aW9uIFJ3'@;
put 'KGwsYyxhLGYpe3JldHVybiByZCghMCksY1tab10uY3JlYXRlQ29tbWVudCgiIil9O2Z1bmN0aW9uIFFpKGwpe3JldHVybiBKZShmdW5jdGlvbiBORigpe3JldHVybiBCby5sRnJhbWUuY29udGV4dExWaWV3fSgpLHlhK2wpfWZ1bmN0aW9uIFJlKGwsYyxhKXtjb25zdCBmPVFyKCk7cmV0dXJu'@;
put 'IEd1KGYscHAoKSxjKSYmWmMoSWEoKSxRbCgpLGYsbCxjLGZbWm9dLGEsITEpLFJlfWZ1bmN0aW9uIEx3KGwsYyxhLGYsZCl7Y29uc3QgbT1kPyJjbGFzcyI6InN0eWxlIjtfdyhsLGEsYy5pbnB1dHNbbV0sbSxmKX1mdW5jdGlvbiB5ZShsLGMsYSxmKXtjb25zdCBkPVFyKCksaD1JYSgpLG09'@;
put 'eWErbCxfPWRbWm9dLE89aC5maXJzdENyZWF0ZVBhc3M/ZnVuY3Rpb24gelQobCxjLGEsZixkLGgpe2NvbnN0IG09Yy5jb25zdHMsTz1WcChjLGwsMixmLFByKG0sZCkpO3JldHVybiBndyhjLGEsTyxQcihtLGgpKSxudWxsIT09Ty5hdHRycyYmdHYoTyxPLmF0dHJzLCExKSxudWxsIT09Ty5t'@;
put 'ZXJnZWRBdHRycyYmdHYoTyxPLm1lcmdlZEF0dHJzLCEwKSxudWxsIT09Yy5xdWVyaWVzJiZjLnF1ZXJpZXMuZWxlbWVudFN0YXJ0KGMsTyksT30obSxoLGQsYyxhLGYpOmguZGF0YVttXSxYPVVUKGgsZCxPLF8sYyxsKTtkW21dPVg7Y29uc3QgYWU9eTIoTyk7cmV0dXJuIGxmKE8sITApLGRB'@;
put 'KF8sWCxPKSwzMiE9KDMyJk8uZmxhZ3MpJiZyOCgpJiZJOChoLGQsWCxPKSwwPT09ZnVuY3Rpb24gT0YoKXtyZXR1cm4gQm8ubEZyYW1lLmVsZW1lbnREZXB0aENvdW50fSgpJiZXdShYLGQpLGZ1bmN0aW9uIERGKCl7Qm8ubEZyYW1lLmVsZW1lbnREZXB0aENvdW50Kyt9KCksYWUmJihwdyho'@;
put 'LGQsTyksaHcoaCxPLGQpKSxudWxsIT09ZiYmWDgoZCxPKSx5ZX1mdW5jdGlvbiBDZSgpe2xldCBsPUR1KCk7dF8oKT9lOCgpOihsPWwucGFyZW50LGxmKGwsITEpKTtjb25zdCBjPWw7KGZ1bmN0aW9uIFJGKGwpe3JldHVybiBCby5za2lwSHlkcmF0aW9uUm9vdFROb2RlPT09bH0pKGMpJiZm'@;
put 'dW5jdGlvbiBIRigpe0JvLnNraXBIeWRyYXRpb25Sb290VE5vZGU9bnVsbH0oKSxmdW5jdGlvbiBJRigpe0JvLmxGcmFtZS5lbGVtZW50RGVwdGhDb3VudC0tfSgpO2NvbnN0IGE9SWEoKTtyZXR1cm4gYS5maXJzdENyZWF0ZVBhc3MmJihpOChhLGwpLEpmKGwpJiZhLnF1ZXJpZXMuZWxlbWVu'@;
put 'dEVuZChsKSksbnVsbCE9Yy5jbGFzc2VzV2l0aG91dEhvc3QmJmZ1bmN0aW9uIHFGKGwpe3JldHVybiAwIT0oOCZsLmZsYWdzKX0oYykmJkx3KGEsYyxRcigpLGMuY2xhc3Nlc1dpdGhvdXRIb3N0LCEwKSxudWxsIT1jLnN0eWxlc1dpdGhvdXRIb3N0JiZmdW5jdGlvbiBYRihsKXtyZXR1cm4g'@;
put 'MCE9KDE2JmwuZmxhZ3MpfShjKSYmTHcoYSxjLFFyKCksYy5zdHlsZXNXaXRob3V0SG9zdCwhMSksQ2V9ZnVuY3Rpb24gdG4obCxjLGEsZil7cmV0dXJuIHllKGwsYyxhLGYpLENlKCksdG59bGV0IFVUPShsLGMsYSxmLGQsaCk9PihyZCghMCkseDgoZixkLGZ1bmN0aW9uIGt4KCl7cmV0dXJu'@;
put 'IEJvLmxGcmFtZS5jdXJyZW50TmFtZXNwYWNlfSgpKSk7ZnVuY3Rpb24gV3IobCxjLGEpe2NvbnN0IGY9UXIoKSxkPUlhKCksaD1sK3lhLG09ZC5maXJzdENyZWF0ZVBhc3M/ZnVuY3Rpb24gUHcobCxjLGEsZixkKXtjb25zdCBoPWMuY29uc3RzLG09UHIoaCxmKSxfPVZwKGMsbCw4LCJuZy1j'@;
put 'b250YWluZXIiLG0pO3JldHVybiBudWxsIT09bSYmdHYoXyxtLCEwKSxndyhjLGEsXyxQcihoLGQpKSxudWxsIT09Yy5xdWVyaWVzJiZjLnF1ZXJpZXMuZWxlbWVudFN0YXJ0KGMsXyksX30oaCxkLGYsYyxhKTpkLmRhdGFbaF07bGYobSwhMCk7Y29uc3QgXz1ZVChkLGYsbSxsKTtyZXR1cm4g'@;
put 'ZltoXT1fLHI4KCkmJkk4KGQsZixfLG0pLFd1KF8sZikseTIobSkmJihwdyhkLGYsbSksaHcoZCxtLGYpKSxudWxsIT1hJiZYOChmLG0pLFdyfWZ1bmN0aW9uIEdyKCl7bGV0IGw9RHUoKTtjb25zdCBjPUlhKCk7cmV0dXJuIHRfKCk/ZTgoKToobD1sLnBhcmVudCxsZihsLCExKSksYy5maXJz'@;
put 'dENyZWF0ZVBhc3MmJihpOChjLGwpLEpmKGwpJiZjLnF1ZXJpZXMuZWxlbWVudEVuZChsKSksR3J9ZnVuY3Rpb24gZXMobCxjLGEpe3JldHVybiBXcihsLGMsYSksR3IoKSxlc31sZXQgWVQ9KGwsYyxhLGYpPT4ocmQoITApLGtfKGNbWm9dLCIiKSk7ZnVuY3Rpb24gWm4oKXtyZXR1cm4gUXIo'@;
put 'KX1mdW5jdGlvbiBwZyhsKXtyZXR1cm4hIWwmJiJmdW5jdGlvbiI9PXR5cGVvZiBsLnRoZW59ZnVuY3Rpb24gV1QobCl7cmV0dXJuISFsJiYiZnVuY3Rpb24iPT10eXBlb2YgbC5zdWJzY3JpYmV9ZnVuY3Rpb24gRXQobCxjLGEsZil7Y29uc3QgZD1RcigpLGg9SWEoKSxtPUR1KCk7cmV0dXJu'@;
put 'IEdUKGgsZCxkW1pvXSxtLGwsYyxmKSxFdH1mdW5jdGlvbiBGdyhsLGMpe2NvbnN0IGE9RHUoKSxmPVFyKCksZD1JYSgpO3JldHVybiBHVChkLGYsdlQocl8oZC5kYXRhKSxhLGYpLGEsbCxjKSxGd31mdW5jdGlvbiBHVChsLGMsYSxmLGQsaCxtKXtjb25zdCBfPXkyKGYpLFg9bC5maXJzdENy'@;
put 'ZWF0ZVBhc3MmJmdUKGwpLGFlPWNbQmxdLHBlPW1UKGMpO2xldCBiZT0hMDtpZigzJmYudHlwZXx8bSl7Y29uc3QgWmU9V3MoZixjKSxsdD1tP20oWmUpOlplLGR0PXBlLmxlbmd0aCxndD1tP3JuPT5tKF9sKHJuW2YuaW5kZXhdKSk6Zi5pbmRleDtsZXQganQ9bnVsbDtpZighbSYmXyYmKGp0'@;
put 'PWZ1bmN0aW9uIGpWKGwsYyxhLGYpe2NvbnN0IGQ9bC5jbGVhbnVwO2lmKG51bGwhPWQpZm9yKGxldCBoPTA7aDxkLmxlbmd0aC0xO2grPTIpe2NvbnN0IG09ZFtoXTtpZihtPT09YSYmZFtoKzFdPT09Zil7Y29uc3QgXz1jW05jXSxPPWRbaCsyXTtyZXR1cm4gXy5sZW5ndGg+Tz9fW09dOm51'@;
put 'bGx9InN0cmluZyI9PXR5cGVvZiBtJiYoaCs9Mil9cmV0dXJuIG51bGx9KGwsYyxkLGYuaW5kZXgpKSxudWxsIT09anQpKGp0Ll9fbmdMYXN0TGlzdGVuZXJGbl9ffHxqdCkuX19uZ05leHRMaXN0ZW5lckZuX189aCxqdC5fX25nTGFzdExpc3RlbmVyRm5fXz1oLGJlPSExO2Vsc2V7aD1LVChm'@;
put 'LGMsYWUsaCwhMSk7Y29uc3Qgcm49YS5saXN0ZW4obHQsZCxoKTtwZS5wdXNoKGgscm4pLFgmJlgucHVzaChkLGd0LGR0LGR0KzEpfX1lbHNlIGg9S1QoZixjLGFlLGgsITEpO2NvbnN0IHhlPWYub3V0cHV0cztsZXQgVmU7aWYoYmUmJm51bGwhPT14ZSYmKFZlPXhlW2RdKSl7Y29uc3QgWmU9'@;
put 'VmUubGVuZ3RoO2lmKFplKWZvcihsZXQgbHQ9MDtsdDxaZTtsdCs9Mil7Y29uc3QgWHQ9Y1tWZVtsdF1dW1ZlW2x0KzFdXS5zdWJzY3JpYmUoaCkseW49cGUubGVuZ3RoO3BlLnB1c2goaCxYdCksWCYmWC5wdXNoKGQsZi5pbmRleCx5biwtKHluKzEpKX19fWZ1bmN0aW9uICRUKGwsYyxhLGYp'@;
put 'e3RyeXtyZXR1cm4gUzAoNixjLGEpLCExIT09YShmKX1jYXRjaChkKXtyZXR1cm4geVQobCxkKSwhMX1maW5hbGx5e1MwKDcsYyxhKX19ZnVuY3Rpb24gS1QobCxjLGEsZixkKXtyZXR1cm4gZnVuY3Rpb24gaChtKXtpZihtPT09RnVuY3Rpb24pcmV0dXJuIGY7aWcobC5jb21wb25lbnRPZmZz'@;
put 'ZXQ+LTE/YnQobC5pbmRleCxjKTpjKTtsZXQgTz0kVChjLGEsZixtKSxYPWguX19uZ05leHRMaXN0ZW5lckZuX187Zm9yKDtYOylPPSRUKGMsYSxYLG0pJiZPLFg9WC5fX25nTmV4dExpc3RlbmVyRm5fXztyZXR1cm4gZCYmITE9PT1PJiZtLnByZXZlbnREZWZhdWx0KCksT319ZnVuY3Rpb24g'@;
put 'R2UobD0xKXtyZXR1cm4gZnVuY3Rpb24gakYobCl7cmV0dXJuKEJvLmxGcmFtZS5jb250ZXh0TFZpZXc9ZnVuY3Rpb24gekYobCxjKXtmb3IoO2w+MDspYz1jW1VzXSxsLS07cmV0dXJuIGN9KGwsQm8ubEZyYW1lLmNvbnRleHRMVmlldykpW0JsXX0obCl9ZnVuY3Rpb24gelYobCxjKXtsZXQg'@;
put 'YT1udWxsO2NvbnN0IGY9ZnVuY3Rpb24gbTIobCl7Y29uc3QgYz1sLmF0dHJzO2lmKG51bGwhPWMpe2NvbnN0IGE9Yy5pbmRleE9mKDUpO2lmKCEoMSZhKSlyZXR1cm4gY1thKzFdfXJldHVybiBudWxsfShsKTtmb3IobGV0IGQ9MDtkPGMubGVuZ3RoO2QrKyl7Y29uc3QgaD1jW2RdO2lmKCIq'@;
put 'IiE9PWgpe2lmKG51bGw9PT1mP2htKGwsaCwhMCk6cG0oZixoKSlyZXR1cm4gZH1lbHNlIGE9ZH1yZXR1cm4gYX1mdW5jdGlvbiBUaShsKXtjb25zdCBjPVFyKClbSmxdW0dvXTtpZighYy5wcm9qZWN0aW9uKXtjb25zdCBmPWMucHJvamVjdGlvbj1pZChsP2wubGVuZ3RoOjEsbnVsbCksZD1m'@;
put 'LnNsaWNlKCk7bGV0IGg9Yy5jaGlsZDtmb3IoO251bGwhPT1oOyl7Y29uc3QgbT1sP3pWKGgsbCk6MDtudWxsIT09bSYmKGRbbV0/ZFttXS5wcm9qZWN0aW9uTmV4dD1oOmZbbV09aCxkW21dPWgpLGg9aC5uZXh0fX19ZnVuY3Rpb24gRHIobCxjPTAsYSl7Y29uc3QgZj1RcigpLGQ9SWEoKSxo'@;
put 'PVZwKGQseWErbCwxNixudWxsLGF8fG51bGwpO251bGw9PT1oLnByb2plY3Rpb24mJihoLnByb2plY3Rpb249YyksZTgoKSwoIWZbdzBdfHxocCgpKSYmMzIhPSgzMiZoLmZsYWdzKSYmZnVuY3Rpb24gUEgobCxjLGEpe0ZIKGNbWm9dLDAsYyxhLEFwKGwsYSxjKSxtZihhLnBhcmVudHx8Y1tH'@;
put 'b10sYSxjKSl9KGQsZixoKX1mdW5jdGlvbiBSdShsLGMsYSl7cmV0dXJuIGJoKGwsIiIsYywiIixhKSxSdX1mdW5jdGlvbiBiaChsLGMsYSxmLGQpe2NvbnN0IGg9UXIoKSxtPXpwKGgsYyxhLGYpO3JldHVybiBtIT09cW8mJlpjKElhKCksUWwoKSxoLGwsbSxoW1pvXSxkLCExKSxiaH1mdW5j'@;
put 'dGlvbiBnZyhsLGMpe3JldHVybiBsPDwxN3xjPDwyfWZ1bmN0aW9uIGYxKGwpe3JldHVybiBsPj4xNyYzMjc2N31mdW5jdGlvbiBIdyhsKXtyZXR1cm4gMnxsfWZ1bmN0aW9uIGQxKGwpe3JldHVybigxMzEwNjgmbCk+PjJ9ZnVuY3Rpb24gTncobCxjKXtyZXR1cm4tMTMxMDY5Jmx8Yzw8Mn1m'@;
put 'dW5jdGlvbiBWdyhsKXtyZXR1cm4gMXxsfWZ1bmN0aW9uIG5PKGwsYyxhLGYsZCl7Y29uc3QgaD1sW2ErMV0sbT1udWxsPT09YztsZXQgXz1mP2YxKGgpOmQxKGgpLE89ITE7Zm9yKDswIT09XyYmKCExPT09T3x8bSk7KXtjb25zdCBhZT1sW18rMV07V1YobFtfXSxjKSYmKE89ITAsbFtfKzFd'@;
put 'PWY/VncoYWUpOkh3KGFlKSksXz1mP2YxKGFlKTpkMShhZSl9TyYmKGxbYSsxXT1mP0h3KGgpOlZ3KGgpKX1mdW5jdGlvbiBXVihsLGMpe3JldHVybiBudWxsPT09bHx8bnVsbD09Y3x8KEFycmF5LmlzQXJyYXkobCk/bFsxXTpsKT09PWN8fCEoIUFycmF5LmlzQXJyYXkobCl8fCJzdHJpbmci'@;
put 'IT10eXBlb2YgYykmJm9kKGwsYyk+PTB9Y29uc3QgJHM9e3RleHRFbmQ6MCxrZXk6MCxrZXlFbmQ6MCx2YWx1ZTowLHZhbHVlRW5kOjB9O2Z1bmN0aW9uIHJPKGwpe3JldHVybiBsLnN1YnN0cmluZygkcy5rZXksJHMua2V5RW5kKX1mdW5jdGlvbiBpTyhsLGMpe2NvbnN0IGE9JHMudGV4dEVu'@;
put 'ZDtyZXR1cm4gYT09PWM/LTE6KGM9JHMua2V5RW5kPWZ1bmN0aW9uIHFWKGwsYyxhKXtmb3IoO2M8YSYmbC5jaGFyQ29kZUF0KGMpPjMyOyljKys7cmV0dXJuIGN9KGwsJHMua2V5PWMsYSksTjIobCxjLGEpKX1mdW5jdGlvbiBOMihsLGMsYSl7Zm9yKDtjPGEmJmwuY2hhckNvZGVBdChjKTw9'@;
put 'MzI7KWMrKztyZXR1cm4gY31mdW5jdGlvbiBXYyhsLGMsYSl7cmV0dXJuIEEwKGwsYyxhLCExKSxXY31mdW5jdGlvbiBncihsLGMpe3JldHVybiBBMChsLGMsbnVsbCwhMCksZ3J9ZnVuY3Rpb24gYmYobCxjKXtmb3IobGV0IGE9ZnVuY3Rpb24gJFYobCl7cmV0dXJuIGZ1bmN0aW9uIFljKGwp'@;
put 'eyRzLmtleT0wLCRzLmtleUVuZD0wLCRzLnZhbHVlPTAsJHMudmFsdWVFbmQ9MCwkcy50ZXh0RW5kPWwubGVuZ3RofShsKSxpTyhsLE4yKGwsMCwkcy50ZXh0RW5kKSl9KGMpO2E+PTA7YT1pTyhjLGEpKUl1KGwsck8oYyksITApfWZ1bmN0aW9uIEEwKGwsYyxhLGYpe2NvbnN0IGQ9UXIoKSxo'@;
put 'PUlhKCksbT1zZigyKTtoLmZpcnN0VXBkYXRlUGFzcyYmX2YoaCxsLG0sZiksYyE9PXFvJiZHdShkLG0sYykmJll3KGgsaC5kYXRhW2xjKCldLGQsZFtab10sbCxkW20rMV09ZnVuY3Rpb24gY08obCxjKXtyZXR1cm4gbnVsbD09bHx8IiI9PT1sfHwoInN0cmluZyI9PXR5cGVvZiBjP2wrPWM6'@;
put 'Im9iamVjdCI9PXR5cGVvZiBsJiYobD1LbChnaChsKSkpKSxsfShjLGEpLGYsbSl9ZnVuY3Rpb24gc08obCxjKXtyZXR1cm4gYz49bC5leHBhbmRvU3RhcnRJbmRleH1mdW5jdGlvbiBfZihsLGMsYSxmKXtjb25zdCBkPWwuZGF0YTtpZihudWxsPT09ZFthKzFdKXtjb25zdCBoPWRbbGMoKV0s'@;
put 'bT1zTyhsLGEpO1d3KGgsZikmJm51bGw9PT1jJiYhbSYmKGM9ITEpLGM9ZnVuY3Rpb24gSlYobCxjLGEsZil7Y29uc3QgZD1yXyhsKTtsZXQgaD1mP2MucmVzaWR1YWxDbGFzc2VzOmMucmVzaWR1YWxTdHlsZXM7aWYobnVsbD09PWQpMD09PShmP2MuY2xhc3NCaW5kaW5nczpjLnN0eWxlQmlu'@;
put 'ZGluZ3MpJiYoYT12ZyhhPVp3KG51bGwsbCxjLGEsZiksYy5hdHRycyxmKSxoPW51bGwpO2Vsc2V7Y29uc3QgbT1jLmRpcmVjdGl2ZVN0eWxpbmdMYXN0O2lmKC0xPT09bXx8bFttXSE9PWQpaWYoYT1adyhkLGwsYyxhLGYpLG51bGw9PT1oKXtsZXQgTz1mdW5jdGlvbiBRVihsLGMsYSl7Y29u'@;
put 'c3QgZj1hP2MuY2xhc3NCaW5kaW5nczpjLnN0eWxlQmluZGluZ3M7aWYoMCE9PWQxKGYpKXJldHVybiBsW2YxKGYpXX0obCxjLGYpO3ZvaWQgMCE9PU8mJkFycmF5LmlzQXJyYXkoTykmJihPPVp3KG51bGwsbCxjLE9bMV0sZiksTz12ZyhPLGMuYXR0cnMsZiksZnVuY3Rpb24gZUIobCxjLGEs'@;
put 'Zil7bFtmMShhP2MuY2xhc3NCaW5kaW5nczpjLnN0eWxlQmluZGluZ3MpXT1mfShsLGMsZixPKSl9ZWxzZSBoPWZ1bmN0aW9uIHRCKGwsYyxhKXtsZXQgZjtjb25zdCBkPWMuZGlyZWN0aXZlRW5kO2ZvcihsZXQgaD0xK2MuZGlyZWN0aXZlU3R5bGluZ0xhc3Q7aDxkO2grKylmPXZnKGYsbFto'@;
put 'XS5ob3N0QXR0cnMsYSk7cmV0dXJuIHZnKGYsYy5hdHRycyxhKX0obCxjLGYpfXJldHVybiB2b2lkIDAhPT1oJiYoZj9jLnJlc2lkdWFsQ2xhc3Nlcz1oOmMucmVzaWR1YWxTdHlsZXM9aCksYX0oZCxoLGMsZiksZnVuY3Rpb24gWlYobCxjLGEsZixkLGgpe2xldCBtPWg/Yy5jbGFzc0JpbmRp'@;
put 'bmdzOmMuc3R5bGVCaW5kaW5ncyxfPWYxKG0pLE89ZDEobSk7bFtmXT1hO2xldCBhZSxYPSExO2lmKEFycmF5LmlzQXJyYXkoYSk/KGFlPWFbMV0sKG51bGw9PT1hZXx8b2QoYSxhZSk+MCkmJihYPSEwKSk6YWU9YSxkKWlmKDAhPT1PKXtjb25zdCBiZT1mMShsW18rMV0pO2xbZisxXT1nZyhi'@;
put 'ZSxfKSwwIT09YmUmJihsW2JlKzFdPU53KGxbYmUrMV0sZikpLGxbXysxXT1mdW5jdGlvbiBTaShsLGMpe3JldHVybiAxMzEwNzEmbHxjPDwxN30obFtfKzFdLGYpfWVsc2UgbFtmKzFdPWdnKF8sMCksMCE9PV8mJihsW18rMV09TncobFtfKzFdLGYpKSxfPWY7ZWxzZSBsW2YrMV09Z2coTyww'@;
put 'KSwwPT09Xz9fPWY6bFtPKzFdPU53KGxbTysxXSxmKSxPPWY7WCYmKGxbZisxXT1IdyhsW2YrMV0pKSxuTyhsLGFlLGYsITApLG5PKGwsYWUsZiwhMSksZnVuY3Rpb24gWVYobCxjLGEsZixkKXtjb25zdCBoPWQ/bC5yZXNpZHVhbENsYXNzZXM6bC5yZXNpZHVhbFN0eWxlcztudWxsIT1oJiYi'@;
put 'c3RyaW5nIj09dHlwZW9mIGMmJm9kKGgsYyk+PTAmJihhW2YrMV09VncoYVtmKzFdKSl9KGMsYWUsbCxmLGgpLG09Z2coXyxPKSxoP2MuY2xhc3NCaW5kaW5ncz1tOmMuc3R5bGVCaW5kaW5ncz1tfShkLGgsYyxhLG0sZil9fWZ1bmN0aW9uIFp3KGwsYyxhLGYsZCl7bGV0IGg9bnVsbDtjb25z'@;
put 'dCBtPWEuZGlyZWN0aXZlRW5kO2xldCBfPWEuZGlyZWN0aXZlU3R5bGluZ0xhc3Q7Zm9yKC0xPT09Xz9fPWEuZGlyZWN0aXZlU3RhcnQ6XysrO188bSYmKGg9Y1tfXSxmPXZnKGYsaC5ob3N0QXR0cnMsZCksaCE9PWwpOylfKys7cmV0dXJuIG51bGwhPT1sJiYoYS5kaXJlY3RpdmVTdHlsaW5n'@;
put 'TGFzdD1fKSxmfWZ1bmN0aW9uIHZnKGwsYyxhKXtjb25zdCBmPWE/MToyO2xldCBkPS0xO2lmKG51bGwhPT1jKWZvcihsZXQgaD0wO2g8Yy5sZW5ndGg7aCsrKXtjb25zdCBtPWNbaF07Im51bWJlciI9PXR5cGVvZiBtP2Q9bTpkPT09ZiYmKEFycmF5LmlzQXJyYXkobCl8fChsPXZvaWQgMD09'@;
put 'PWw/W106WyIiLGxdKSxJdShsLG0sISFhfHxjWysraF0pKX1yZXR1cm4gdm9pZCAwPT09bD9udWxsOmx9ZnVuY3Rpb24gWXcobCxjLGEsZixkLGgsbSxfKXtpZighKDMmYy50eXBlKSlyZXR1cm47Y29uc3QgTz1sLmRhdGEsWD1PW18rMV0sYWU9ZnVuY3Rpb24gVVYobCl7cmV0dXJuIDE9PSgx'@;
put 'JmwpfShYKT90cyhPLGMsYSxkLGQxKFgpLG0pOnZvaWQgMDt3ZihhZSl8fCh3ZihoKXx8ZnVuY3Rpb24gdE8obCl7cmV0dXJuIDI9PSgyJmwpfShYKSYmKGg9dHMoTyxudWxsLGEsZCxfLG0pKSxmdW5jdGlvbiBYUShsLGMsYSxmLGQpe2lmKGMpZD9sLmFkZENsYXNzKGEsZik6bC5yZW1vdmVD'@;
put 'bGFzcyhhLGYpO2Vsc2V7bGV0IGg9LTE9PT1mLmluZGV4T2YoIi0iKT92b2lkIDA6aGguRGFzaENhc2U7bnVsbD09ZD9sLnJlbW92ZVN0eWxlKGEsZixoKTooInN0cmluZyI9PXR5cGVvZiBkJiZkLmVuZHNXaXRoKCIhaW1wb3J0YW50IikmJihkPWQuc2xpY2UoMCwtMTApLGh8PWhoLkltcG9y'@;
put 'dGFudCksbC5zZXRTdHlsZShhLGYsZCxoKSl9fShmLG0sbzEobGMoKSxhKSxkLGgpKX1mdW5jdGlvbiB0cyhsLGMsYSxmLGQsaCl7Y29uc3QgbT1udWxsPT09YztsZXQgXztmb3IoO2Q+MDspe2NvbnN0IE89bFtkXSxYPUFycmF5LmlzQXJyYXkoTyksYWU9WD9PWzFdOk8scGU9bnVsbD09PWFl'@;
put 'O2xldCBiZT1hW2QrMV07YmU9PT1xbyYmKGJlPXBlP3hhOnZvaWQgMCk7bGV0IHhlPXBlP00yKGJlLGYpOmFlPT09Zj9iZTp2b2lkIDA7aWYoWCYmIXdmKHhlKSYmKHhlPU0yKE8sZikpLHdmKHhlKSYmKF89eGUsbSkpcmV0dXJuIF87Y29uc3QgVmU9bFtkKzFdO2Q9bT9mMShWZSk6ZDEoVmUp'@;
put 'fWlmKG51bGwhPT1jKXtsZXQgTz1oP2MucmVzaWR1YWxDbGFzc2VzOmMucmVzaWR1YWxTdHlsZXM7bnVsbCE9TyYmKF89TTIoTyxmKSl9cmV0dXJuIF99ZnVuY3Rpb24gd2YobCl7cmV0dXJuIHZvaWQgMCE9PWx9ZnVuY3Rpb24gV3cobCxjKXtyZXR1cm4gMCE9KGwuZmxhZ3MmKGM/ODoxNikp'@;
put 'fWZ1bmN0aW9uIFllKGwsYz0iIil7Y29uc3QgYT1RcigpLGY9SWEoKSxkPWwreWEsaD1mLmZpcnN0Q3JlYXRlUGFzcz9WcChmLGQsMSxjLG51bGwpOmYuZGF0YVtkXSxtPUd3KGYsYSxoLGMsbCk7YVtkXT1tLHI4KCkmJkk4KGYsYSxtLGgpLGxmKGgsITEpfWxldCBHdz0obCxjLGEsZixkKT0+'@;
put 'KHJkKCEwKSxmdW5jdGlvbiBFOChsLGMpe3JldHVybiBsLmNyZWF0ZVRleHQoYyl9KGNbWm9dLGYpKTtmdW5jdGlvbiBhcihsKXtyZXR1cm4gd3IoIiIsbCwiIiksYXJ9ZnVuY3Rpb24gd3IobCxjLGEpe2NvbnN0IGY9UXIoKSxkPXpwKGYsbCxjLGEpO3JldHVybiBkIT09cW8mJmZkKGYsbGMo'@;
put 'KSxkKSx3cn1mdW5jdGlvbiAkdShsLGMsYSxmLGQpe2NvbnN0IGg9UXIoKSxtPWZ1bmN0aW9uIFVwKGwsYyxhLGYsZCxoKXtjb25zdCBfPUYyKGwsbmQoKSxhLGQpO3JldHVybiBzZigyKSxfP2MrSW8oYSkrZitJbyhkKStoOnFvfShoLGwsYyxhLGYsZCk7cmV0dXJuIG0hPT1xbyYmZmQoaCxs'@;
put 'YygpLG0pLCR1fWZ1bmN0aW9uIE8wKGwsYyxhLGYsZCxoLG0pe2NvbnN0IF89UXIoKSxPPWZ1bmN0aW9uIFpwKGwsYyxhLGYsZCxoLG0sXyl7Y29uc3QgWD1hdihsLG5kKCksYSxkLG0pO3JldHVybiBzZigzKSxYP2MrSW8oYSkrZitJbyhkKStoK0lvKG0pK186cW99KF8sbCxjLGEsZixkLGgs'@;
put 'bSk7cmV0dXJuIE8hPT1xbyYmZmQoXyxsYygpLE8pLE8wfWZ1bmN0aW9uIHlnKGwsYyxhLGYsZCxoLG0sXyxPKXtjb25zdCBYPVFyKCksYWU9ZnVuY3Rpb24gWXAobCxjLGEsZixkLGgsbSxfLE8sWCl7Y29uc3QgcGU9eDAobCxuZCgpLGEsZCxtLE8pO3JldHVybiBzZig0KSxwZT9jK0lvKGEp'@;
put 'K2YrSW8oZCkraCtJbyhtKStfK0lvKE8pK1g6cW99KFgsbCxjLGEsZixkLGgsbSxfLE8pO3JldHVybiBhZSE9PXFvJiZmZChYLGxjKCksYWUpLHlnfWZ1bmN0aW9uIHBPKGwsYyxhKXshZnVuY3Rpb24gVDAobCxjLGEsZil7Y29uc3QgZD1JYSgpLGg9c2YoMik7ZC5maXJzdFVwZGF0ZVBhc3Mm'@;
put 'Jl9mKGQsbnVsbCxoLGYpO2NvbnN0IG09UXIoKTtpZihhIT09cW8mJkd1KG0saCxhKSl7Y29uc3QgXz1kLmRhdGFbbGMoKV07aWYoV3coXyxmKSYmIXNPKGQsaCkpe2xldCBPPWY/Xy5jbGFzc2VzV2l0aG91dEhvc3Q6Xy5zdHlsZXNXaXRob3V0SG9zdDtudWxsIT09TyYmKGE9a3UoTyxhfHwi'@;
put 'IikpLEx3KGQsXyxtLGEsZil9ZWxzZSFmdW5jdGlvbiBwdShsLGMsYSxmLGQsaCxtLF8pe2Q9PT1xbyYmKGQ9eGEpO2xldCBPPTAsWD0wLGFlPTA8ZC5sZW5ndGg/ZFswXTpudWxsLHBlPTA8aC5sZW5ndGg/aFswXTpudWxsO2Zvcig7bnVsbCE9PWFlfHxudWxsIT09cGU7KXtjb25zdCBiZT1P'@;
put 'PGQubGVuZ3RoP2RbTysxXTp2b2lkIDAseGU9WDxoLmxlbmd0aD9oW1grMV06dm9pZCAwO2xldCBaZSxWZT1udWxsO2FlPT09cGU/KE8rPTIsWCs9MixiZSE9PXhlJiYoVmU9cGUsWmU9eGUpKTpudWxsPT09cGV8fG51bGwhPT1hZSYmYWU8cGU/KE8rPTIsVmU9YWUpOihYKz0yLFZlPXBlLFpl'@;
put 'PXhlKSxudWxsIT09VmUmJll3KGwsYyxhLGYsVmUsWmUsbSxfKSxhZT1PPGQubGVuZ3RoP2RbT106bnVsbCxwZT1YPGgubGVuZ3RoP2hbWF06bnVsbH19KGQsXyxtLG1bWm9dLG1baCsxXSxtW2grMV09ZnVuY3Rpb24gbkIobCxjLGEpe2lmKG51bGw9PWF8fCIiPT09YSlyZXR1cm4geGE7Y29u'@;
put 'c3QgZj1bXSxkPWdoKGEpO2lmKEFycmF5LmlzQXJyYXkoZCkpZm9yKGxldCBoPTA7aDxkLmxlbmd0aDtoKyspbChmLGRbaF0sITApO2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiBkKWZvcihjb25zdCBoIGluIGQpZC5oYXNPd25Qcm9wZXJ0eShoKSYmbChmLGgsZFtoXSk7ZWxzZSJzdHJpbmci'@;
put 'PT10eXBlb2YgZCYmYyhmLGQpO3JldHVybiBmfShsLGMsYSksZixoKX19KEl1LGJmLHpwKFFyKCksbCxjLGEpLCEwKX1mdW5jdGlvbiBtMShsLGMsYSl7Y29uc3QgZj1RcigpO3JldHVybiBHdShmLHBwKCksYykmJlpjKElhKCksUWwoKSxmLGwsYyxmW1pvXSxhLCEwKSxtMX1mdW5jdGlvbiBf'@;
put 'ZyhsLGMsYSl7Y29uc3QgZj1RcigpO2lmKEd1KGYscHAoKSxjKSl7Y29uc3QgaD1JYSgpLG09UWwoKTtaYyhoLG0sZixsLGMsdlQocl8oaC5kYXRhKSxtLGYpLGEsITApfXJldHVybiBfZ31jb25zdCBCMj12b2lkIDA7dmFyIHB2PVsiZW4iLFtbImEiLCJwIl0sWyJBTSIsIlBNIl0sQjJdLFtb'@;
put 'IkFNIiwiUE0iXSxCMixCMl0sW1siUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLFsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sWyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJd'@;
put 'LFsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXV0sQjIsW1siSiIsIkYiLCJNIiwiQSIsIk0iLCJKIiwiSiIsIkEiLCJTIiwiTyIsIk4iLCJEIl0sWyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMi'@;
put 'XSxbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl1dLEIyLFtbIkIiLCJBIl0sWyJCQyIsIkFEIl0sWyJCZWZvcmUgQ2hyaXN0IiwiQW5ubyBE'@;
put 'b21pbmkiXV0sMCxbNiwwXSxbIk0vZC95eSIsIk1NTSBkLCB5IiwiTU1NTSBkLCB5IiwiRUVFRSwgTU1NTSBkLCB5Il0sWyJoOm1tIGEiLCJoOm1tOnNzIGEiLCJoOm1tOnNzIGEgeiIsImg6bW06c3MgYSB6enp6Il0sWyJ7MX0sIHswfSIsQjIsInsxfSAnYXQnIHswfSIsQjJdLFsiLiIsIiwi'@;
put 'LCI7IiwiJSIsIisiLCItIiwiRSIsIlx4ZDciLCJcdTIwMzAiLCJcdTIyMWUiLCJOYU4iLCI6Il0sWyIjLCMjMC4jIyMiLCIjLCMjMCUiLCJceGE0IywjIzAuMDAiLCIjRTAiXSwiVVNEIiwiJCIsIlVTIERvbGxhciIse30sImx0ciIsZnVuY3Rpb24gX08obCl7Y29uc3QgYT1NYXRoLmZsb29y'@;
put 'KE1hdGguYWJzKGwpKSxmPWwudG9TdHJpbmcoKS5yZXBsYWNlKC9eW14uXSpcLj8vLCIiKS5sZW5ndGg7cmV0dXJuIDE9PT1hJiYwPT09Zj8xOjV9XTtsZXQgZGQ9e307ZnVuY3Rpb24gS3MobCl7Y29uc3QgYz1mdW5jdGlvbiBnQihsKXtyZXR1cm4gbC50b0xvd2VyQ2FzZSgpLnJlcGxhY2Uo'@;
put 'L18vZywiLSIpfShsKTtsZXQgYT1lQyhjKTtpZihhKXJldHVybiBhO2NvbnN0IGY9Yy5zcGxpdCgiLSIpWzBdO2lmKGE9ZUMoZiksYSlyZXR1cm4gYTtpZigiZW4iPT09ZilyZXR1cm4gcHY7dGhyb3cgbmV3IElyKDcwMSwhMSl9ZnVuY3Rpb24gZUMobCl7cmV0dXJuIGwgaW4gZGR8fChkZFts'@;
put 'XT1QaS5uZyYmUGkubmcuY29tbW9uJiZQaS5uZy5jb21tb24ubG9jYWxlcyYmUGkubmcuY29tbW9uLmxvY2FsZXNbbF0pLGRkW2xdfXZhciBlYT1mdW5jdGlvbihsKXtyZXR1cm4gbFtsLkxvY2FsZUlkPTBdPSJMb2NhbGVJZCIsbFtsLkRheVBlcmlvZHNGb3JtYXQ9MV09IkRheVBlcmlvZHNG'@;
put 'b3JtYXQiLGxbbC5EYXlQZXJpb2RzU3RhbmRhbG9uZT0yXT0iRGF5UGVyaW9kc1N0YW5kYWxvbmUiLGxbbC5EYXlzRm9ybWF0PTNdPSJEYXlzRm9ybWF0IixsW2wuRGF5c1N0YW5kYWxvbmU9NF09IkRheXNTdGFuZGFsb25lIixsW2wuTW9udGhzRm9ybWF0PTVdPSJNb250aHNGb3JtYXQiLGxb'@;
put 'bC5Nb250aHNTdGFuZGFsb25lPTZdPSJNb250aHNTdGFuZGFsb25lIixsW2wuRXJhcz03XT0iRXJhcyIsbFtsLkZpcnN0RGF5T2ZXZWVrPThdPSJGaXJzdERheU9mV2VlayIsbFtsLldlZWtlbmRSYW5nZT05XT0iV2Vla2VuZFJhbmdlIixsW2wuRGF0ZUZvcm1hdD0xMF09IkRhdGVGb3JtYXQi'@;
put 'LGxbbC5UaW1lRm9ybWF0PTExXT0iVGltZUZvcm1hdCIsbFtsLkRhdGVUaW1lRm9ybWF0PTEyXT0iRGF0ZVRpbWVGb3JtYXQiLGxbbC5OdW1iZXJTeW1ib2xzPTEzXT0iTnVtYmVyU3ltYm9scyIsbFtsLk51bWJlckZvcm1hdHM9MTRdPSJOdW1iZXJGb3JtYXRzIixsW2wuQ3VycmVuY3lDb2Rl'@;
put 'PTE1XT0iQ3VycmVuY3lDb2RlIixsW2wuQ3VycmVuY3lTeW1ib2w9MTZdPSJDdXJyZW5jeVN5bWJvbCIsbFtsLkN1cnJlbmN5TmFtZT0xN109IkN1cnJlbmN5TmFtZSIsbFtsLkN1cnJlbmNpZXM9MThdPSJDdXJyZW5jaWVzIixsW2wuRGlyZWN0aW9uYWxpdHk9MTldPSJEaXJlY3Rpb25hbGl0'@;
put 'eSIsbFtsLlBsdXJhbENhc2U9MjBdPSJQbHVyYWxDYXNlIixsW2wuRXh0cmFEYXRhPTIxXT0iRXh0cmFEYXRhIixsfShlYXx8e30pO2NvbnN0IHFwPSJlbi1VUyI7bGV0IG9lPXFwO2Z1bmN0aW9uIFVyKGwsYyxhLGYsZCl7aWYobD1DbyhsKSxBcnJheS5pc0FycmF5KGwpKWZvcihsZXQgaD0w'@;
put 'O2g8bC5sZW5ndGg7aCsrKVVyKGxbaF0sYyxhLGYsZCk7ZWxzZXtjb25zdCBoPUlhKCksbT1RcigpO2xldCBfPVQyKGwpP2w6Q28obC5wcm92aWRlKSxPPURBKGwpO2NvbnN0IFg9RHUoKSxhZT0xMDQ4NTc1JlgucHJvdmlkZXJJbmRleGVzLHBlPVguZGlyZWN0aXZlU3RhcnQsYmU9WC5wcm92'@;
put 'aWRlckluZGV4ZXM+PjIwO2lmKFQyKGwpfHwhbC5tdWx0aSl7Y29uc3QgeGU9bmV3IE9tKE8sZCxydCksVmU9ZmkoXyxjLGQ/YWU6YWUrYmUscGUpOy0xPT09VmU/KGZfKHU4KFgsbSksaCxfKSxGcihoLGwsYy5sZW5ndGgpLGMucHVzaChfKSxYLmRpcmVjdGl2ZVN0YXJ0KyssWC5kaXJlY3Rp'@;
put 'dmVFbmQrKyxkJiYoWC5wcm92aWRlckluZGV4ZXMrPTEwNDg1NzYpLGEucHVzaCh4ZSksbS5wdXNoKHhlKSk6KGFbVmVdPXhlLG1bVmVdPXhlKX1lbHNle2NvbnN0IHhlPWZpKF8sYyxhZStiZSxwZSksVmU9ZmkoXyxjLGFlLGFlK2JlKSxsdD1WZT49MCYmYVtWZV07aWYoZCYmIWx0fHwhZCYm'@;
put 'ISh4ZT49MCYmYVt4ZV0pKXtmXyh1OChYLG0pLGgsXyk7Y29uc3QgZHQ9ZnVuY3Rpb24gJG8obCxjLGEsZixkKXtjb25zdCBoPW5ldyBPbShsLGEscnQpO3JldHVybiBoLm11bHRpPVtdLGguaW5kZXg9YyxoLmNvbXBvbmVudFByb3ZpZGVycz0wLGtpKGgsZCxmJiYhYSksaH0oZD9nbzpFbyxh'@;
put 'Lmxlbmd0aCxkLGYsTyk7IWQmJmx0JiYoYVtWZV0ucHJvdmlkZXJGYWN0b3J5PWR0KSxGcihoLGwsYy5sZW5ndGgsMCksYy5wdXNoKF8pLFguZGlyZWN0aXZlU3RhcnQrKyxYLmRpcmVjdGl2ZUVuZCsrLGQmJihYLnByb3ZpZGVySW5kZXhlcys9MTA0ODU3NiksYS5wdXNoKGR0KSxtLnB1c2go'@;
put 'ZHQpfWVsc2UgRnIoaCxsLHhlPi0xP3hlOlZlLGtpKGFbZD9WZTp4ZV0sTywhZCYmZikpOyFkJiZmJiZsdCYmYVtWZV0uY29tcG9uZW50UHJvdmlkZXJzKyt9fX1mdW5jdGlvbiBGcihsLGMsYSxmKXtjb25zdCBkPVQyKGMpLGg9ZnVuY3Rpb24gWG0obCl7cmV0dXJuISFsLnVzZUNsYXNzfShj'@;
put 'KTtpZihkfHxoKXtjb25zdCBPPShoP0NvKGMudXNlQ2xhc3MpOmMpLnByb3RvdHlwZS5uZ09uRGVzdHJveTtpZihPKXtjb25zdCBYPWwuZGVzdHJveUhvb2tzfHwobC5kZXN0cm95SG9va3M9W10pO2lmKCFkJiZjLm11bHRpKXtjb25zdCBhZT1YLmluZGV4T2YoYSk7LTE9PT1hZT9YLnB1c2go'@;
put 'YSxbZixPXSk6WFthZSsxXS5wdXNoKGYsTyl9ZWxzZSBYLnB1c2goYSxPKX19fWZ1bmN0aW9uIGtpKGwsYyxhKXtyZXR1cm4gYSYmbC5jb21wb25lbnRQcm92aWRlcnMrKyxsLm11bHRpLnB1c2goYyktMX1mdW5jdGlvbiBmaShsLGMsYSxmKXtmb3IobGV0IGQ9YTtkPGY7ZCsrKWlmKGNbZF09'@;
put 'PT1sKXJldHVybiBkO3JldHVybi0xfWZ1bmN0aW9uIEVvKGwsYyxhLGYpe3JldHVybiBCaSh0aGlzLm11bHRpLFtdKX1mdW5jdGlvbiBnbyhsLGMsYSxmKXtjb25zdCBkPXRoaXMubXVsdGk7bGV0IGg7aWYodGhpcy5wcm92aWRlckZhY3Rvcnkpe2NvbnN0IG09dGhpcy5wcm92aWRlckZhY3Rv'@;
put 'cnkuY29tcG9uZW50UHJvdmlkZXJzLF89QzIoYSxhW2ppXSx0aGlzLnByb3ZpZGVyRmFjdG9yeS5pbmRleCxmKTtoPV8uc2xpY2UoMCxtKSxCaShkLGgpO2ZvcihsZXQgTz1tO088Xy5sZW5ndGg7TysrKWgucHVzaChfW09dKX1lbHNlIGg9W10sQmkoZCxoKTtyZXR1cm4gaH1mdW5jdGlvbiBC'@;
put 'aShsLGMpe2ZvcihsZXQgYT0wO2E8bC5sZW5ndGg7YSsrKWMucHVzaCgoMCxsW2FdKSgpKTtyZXR1cm4gY31mdW5jdGlvbiByaShsLGM9W10pe3JldHVybiBhPT57YS5wcm92aWRlcnNSZXNvbHZlcj0oZixkKT0+ZnVuY3Rpb24geXIobCxjLGEpe2NvbnN0IGY9SWEoKTtpZihmLmZpcnN0Q3Jl'@;
put 'YXRlUGFzcyl7Y29uc3QgZD1hYyhsKTtVcihhLGYuZGF0YSxmLmJsdWVwcmludCxkLCEwKSxVcihjLGYuZGF0YSxmLmJsdWVwcmludCxkLCExKX19KGYsZD9kKGwpOmwsYyl9fWNsYXNzIFhze31jbGFzcyBndXt9Y2xhc3MgejIgZXh0ZW5kcyBYc3tjb25zdHJ1Y3RvcihjLGEsZil7c3VwZXIo'@;
put 'KSx0aGlzLl9wYXJlbnQ9YSx0aGlzLl9ib290c3RyYXBDb21wb25lbnRzPVtdLHRoaXMuZGVzdHJveUNicz1bXSx0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1uZXcga1QodGhpcyk7Y29uc3QgZD1adShjKTt0aGlzLl9ib290c3RyYXBDb21wb25lbnRzPWNkKGQuYm9vdHN0cmFwKSx0'@;
put 'aGlzLl9yM0luamVjdG9yPWZ3KGMsYSxbe3Byb3ZpZGU6WHMsdXNlVmFsdWU6dGhpc30se3Byb3ZpZGU6YzEsdXNlVmFsdWU6dGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJ9LC4uLmZdLEtsKGMpLG5ldyBTZXQoWyJlbnZpcm9ubWVudCJdKSksdGhpcy5fcjNJbmplY3Rvci5yZXNvbHZl'@;
put 'SW5qZWN0b3JJbml0aWFsaXplcnMoKSx0aGlzLmluc3RhbmNlPXRoaXMuX3IzSW5qZWN0b3IuZ2V0KGMpfWdldCBpbmplY3Rvcigpe3JldHVybiB0aGlzLl9yM0luamVjdG9yfWRlc3Ryb3koKXtjb25zdCBjPXRoaXMuX3IzSW5qZWN0b3I7IWMuZGVzdHJveWVkJiZjLmRlc3Ryb3koKSx0aGlz'@;
put 'LmRlc3Ryb3lDYnMuZm9yRWFjaChhPT5hKCkpLHRoaXMuZGVzdHJveUNicz1udWxsfW9uRGVzdHJveShjKXt0aGlzLmRlc3Ryb3lDYnMucHVzaChjKX19Y2xhc3MgaGQgZXh0ZW5kcyBndXtjb25zdHJ1Y3RvcihjKXtzdXBlcigpLHRoaXMubW9kdWxlVHlwZT1jfWNyZWF0ZShjKXtyZXR1cm4g'@;
put 'bmV3IHoyKHRoaXMubW9kdWxlVHlwZSxjLFtdKX19Y2xhc3MgQ2YgZXh0ZW5kcyBYc3tjb25zdHJ1Y3RvcihjKXtzdXBlcigpLHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPW5ldyBrVCh0aGlzKSx0aGlzLmluc3RhbmNlPW51bGw7Y29uc3QgYT1uZXcgWV8oWy4uLmMucHJvdmlkZXJz'@;
put 'LHtwcm92aWRlOlhzLHVzZVZhbHVlOnRoaXN9LHtwcm92aWRlOmMxLHVzZVZhbHVlOnRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyfV0sYy5wYXJlbnR8fEg4KCksYy5kZWJ1Z05hbWUsbmV3IFNldChbImVudmlyb25tZW50Il0pKTt0aGlzLmluamVjdG9yPWEsYy5ydW5FbnZpcm9ubWVu'@;
put 'dEluaXRpYWxpemVycyYmYS5yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKX1kZXN0cm95KCl7dGhpcy5pbmplY3Rvci5kZXN0cm95KCl9b25EZXN0cm95KGMpe3RoaXMuaW5qZWN0b3Iub25EZXN0cm95KGMpfX1mdW5jdGlvbiB5QihsLGMsYT1udWxsKXtyZXR1cm4gbmV3IENmKHtwcm92'@;
put 'aWRlcnM6bCxwYXJlbnQ6YyxkZWJ1Z05hbWU6YSxydW5FbnZpcm9ubWVudEluaXRpYWxpemVyczohMH0pLmluamVjdG9yfWxldCBzdmU9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhKXt0aGlzLl9pbmplY3Rvcj1hLHRoaXMuY2FjaGVkSW5qZWN0b3JzPW5ldyBNYXB9Z2V0T3JDcmVhdGVT'@;
put 'dGFuZGFsb25lSW5qZWN0b3IoYSl7aWYoIWEuc3RhbmRhbG9uZSlyZXR1cm4gbnVsbDtpZighdGhpcy5jYWNoZWRJbmplY3RvcnMuaGFzKGEpKXtjb25zdCBmPXhBKDAsYS50eXBlKSxkPWYubGVuZ3RoPjA/eUIoW2ZdLHRoaXMuX2luamVjdG9yLGBTdGFuZGFsb25lWyR7YS50eXBlLm5hbWV9'@;
put 'XWApOm51bGw7dGhpcy5jYWNoZWRJbmplY3RvcnMuc2V0KGEsZCl9cmV0dXJuIHRoaXMuY2FjaGVkSW5qZWN0b3JzLmdldChhKX1uZ09uRGVzdHJveSgpe3RyeXtmb3IoY29uc3QgYSBvZiB0aGlzLmNhY2hlZEluamVjdG9ycy52YWx1ZXMoKSludWxsIT09YSYmYS5kZXN0cm95KCl9ZmluYWxs'@;
put 'eXt0aGlzLmNhY2hlZEluamVjdG9ycy5jbGVhcigpfX19cmV0dXJuIGwuXHUwMjc1cHJvdj1ocih7dG9rZW46bCxwcm92aWRlZEluOiJlbnZpcm9ubWVudCIsZmFjdG9yeTooKT0+bmV3IGwoc3IodTEpKX0pLGx9KSgpO2Z1bmN0aW9uIExlZShsKXtsLmdldFN0YW5kYWxvbmVJbmplY3Rvcj1j'@;
put 'PT5jLmdldChzdmUpLmdldE9yQ3JlYXRlU3RhbmRhbG9uZUluamVjdG9yKGwpfWZ1bmN0aW9uIFhhKGwsYyxhKXtjb25zdCBmPVl1KCkrbCxkPVFyKCk7cmV0dXJuIGRbZl09PT1xbz95ZihkLGYsYT9jLmNhbGwoYSk6YygpKTpmdW5jdGlvbiBjZyhsLGMpe3JldHVybiBsW2NdfShkLGYpfWZ1'@;
put 'bmN0aW9uIF9oKGwsYyxhLGYpe3JldHVybiBqZWUoUXIoKSxZdSgpLGwsYyxhLGYpfWZ1bmN0aW9uIHdoKGwsYyxhLGYsZCl7cmV0dXJuIHplZShRcigpLFl1KCksbCxjLGEsZixkKX1mdW5jdGlvbiBuQyhsLGMsYSxmLGQsaCl7cmV0dXJuIFVlZShRcigpLFl1KCksbCxjLGEsZixkLGgpfWZ1'@;
put 'bmN0aW9uIE1PKGwsYyxhLGYsZCxoLG0pe3JldHVybiBmdW5jdGlvbiBaZWUobCxjLGEsZixkLGgsbSxfLE8pe2NvbnN0IFg9YythO3JldHVybiB4MChsLFgsZCxoLG0sXyk/eWYobCxYKzQsTz9mLmNhbGwoTyxkLGgsbSxfKTpmKGQsaCxtLF8pKTpyQyhsLFgrNCl9KFFyKCksWXUoKSxsLGMs'@;
put 'YSxmLGQsaCxtKX1mdW5jdGlvbiByQyhsLGMpe2NvbnN0IGE9bFtjXTtyZXR1cm4gYT09PXFvP3ZvaWQgMDphfWZ1bmN0aW9uIGplZShsLGMsYSxmLGQsaCl7Y29uc3QgbT1jK2E7cmV0dXJuIEd1KGwsbSxkKT95ZihsLG0rMSxoP2YuY2FsbChoLGQpOmYoZCkpOnJDKGwsbSsxKX1mdW5jdGlv'@;
put 'biB6ZWUobCxjLGEsZixkLGgsbSl7Y29uc3QgXz1jK2E7cmV0dXJuIEYyKGwsXyxkLGgpP3lmKGwsXysyLG0/Zi5jYWxsKG0sZCxoKTpmKGQsaCkpOnJDKGwsXysyKX1mdW5jdGlvbiBVZWUobCxjLGEsZixkLGgsbSxfKXtjb25zdCBPPWMrYTtyZXR1cm4gYXYobCxPLGQsaCxtKT95ZihsLE8r'@;
put 'MyxfP2YuY2FsbChfLGQsaCxtKTpmKGQsaCxtKSk6ckMobCxPKzMpfWZ1bmN0aW9uIHdsKGwsYyl7Y29uc3QgYT1JYSgpO2xldCBmO2NvbnN0IGQ9bCt5YTthLmZpcnN0Q3JlYXRlUGFzcz8oZj1mdW5jdGlvbiBDdmUobCxjKXtpZihjKWZvcihsZXQgYT1jLmxlbmd0aC0xO2E+PTA7YS0tKXtj'@;
put 'b25zdCBmPWNbYV07aWYobD09PWYubmFtZSlyZXR1cm4gZn19KGMsYS5waXBlUmVnaXN0cnkpLGEuZGF0YVtkXT1mLGYub25EZXN0cm95JiYoYS5kZXN0cm95SG9va3M/Pz1bXSkucHVzaChkLGYub25EZXN0cm95KSk6Zj1hLmRhdGFbZF07Y29uc3QgaD1mLmZhY3Rvcnl8fChmLmZhY3Rvcnk9'@;
put 'YWYoZi50eXBlKSksbT1waShydCk7dHJ5e2NvbnN0IF89dWYoITEpLE89aCgpO3JldHVybiB1ZihfKSxmdW5jdGlvbiBIVihsLGMsYSxmKXthPj1sLmRhdGEubGVuZ3RoJiYobC5kYXRhW2FdPW51bGwsbC5ibHVlcHJpbnRbYV09bnVsbCksY1thXT1mfShhLFFyKCksZCxPKSxPfWZpbmFsbHl7'@;
put 'cGkobSl9fWZ1bmN0aW9uIEpzKGwsYyxhKXtjb25zdCBmPWwreWEsZD1RcigpLGg9SmUoZCxmKTtyZXR1cm4gaUMoZCxmKT9qZWUoZCxZdSgpLGMsaC50cmFuc2Zvcm0sYSxoKTpoLnRyYW5zZm9ybShhKX1mdW5jdGlvbiB3ZyhsLGMsYSxmKXtjb25zdCBkPWwreWEsaD1RcigpLG09SmUoaCxk'@;
put 'KTtyZXR1cm4gaUMoaCxkKT96ZWUoaCxZdSgpLGMsbS50cmFuc2Zvcm0sYSxmLG0pOm0udHJhbnNmb3JtKGEsZil9ZnVuY3Rpb24gX0IobCxjLGEsZixkKXtjb25zdCBoPWwreWEsbT1RcigpLF89SmUobSxoKTtyZXR1cm4gaUMobSxoKT9VZWUobSxZdSgpLGMsXy50cmFuc2Zvcm0sYSxmLGQs'@;
put 'Xyk6Xy50cmFuc2Zvcm0oYSxmLGQpfWZ1bmN0aW9uIGlDKGwsYyl7cmV0dXJuIGxbamldLmRhdGFbY10ucHVyZX1mdW5jdGlvbiB3QihsKXtyZXR1cm4gYz0+e3NldFRpbWVvdXQobCx2b2lkIDAsYyl9fWNvbnN0IHhyPWNsYXNzIGt2ZSBleHRlbmRzIHdle2NvbnN0cnVjdG9yKGM9ITEpe3N1'@;
put 'cGVyKCksdGhpcy5fX2lzQXN5bmM9Y31lbWl0KGMpe3N1cGVyLm5leHQoYyl9c3Vic2NyaWJlKGMsYSxmKXtsZXQgZD1jLGg9YXx8KCgpPT5udWxsKSxtPWY7aWYoYyYmIm9iamVjdCI9PXR5cGVvZiBjKXtjb25zdCBPPWM7ZD1PLm5leHQ/LmJpbmQoTyksaD1PLmVycm9yPy5iaW5kKE8pLG09'@;
put 'Ty5jb21wbGV0ZT8uYmluZChPKX10aGlzLl9faXNBc3luYyYmKGg9d0IoaCksZCYmKGQ9d0IoZCkpLG0mJihtPXdCKG0pKSk7Y29uc3QgXz1zdXBlci5zdWJzY3JpYmUoe25leHQ6ZCxlcnJvcjpoLGNvbXBsZXRlOm19KTtyZXR1cm4gYyBpbnN0YW5jZW9mIHRlJiZjLmFkZChfKSxffX07ZnVu'@;
put 'Y3Rpb24gRXZlKCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHNbU3ltYm9sLml0ZXJhdG9yXSgpfWNsYXNzIFUye2dldCBjaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2NoYW5nZXN8fCh0aGlzLl9jaGFuZ2VzPW5ldyB4cil9Y29uc3RydWN0b3IoYz0hMSl7dGhpcy5fZW1pdERpc3RpbmN0Q2hhbmdlc09u'@;
put 'bHk9Yyx0aGlzLmRpcnR5PSEwLHRoaXMuX3Jlc3VsdHM9W10sdGhpcy5fY2hhbmdlc0RldGVjdGVkPSExLHRoaXMuX2NoYW5nZXM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMuZmlyc3Q9dm9pZCAwLHRoaXMubGFzdD12b2lkIDA7Y29uc3QgYT1VMi5wcm90b3R5cGU7YVtTeW1ib2wuaXRlcmF0'@;
put 'b3JdfHwoYVtTeW1ib2wuaXRlcmF0b3JdPUV2ZSl9Z2V0KGMpe3JldHVybiB0aGlzLl9yZXN1bHRzW2NdfW1hcChjKXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5tYXAoYyl9ZmlsdGVyKGMpe3JldHVybiB0aGlzLl9yZXN1bHRzLmZpbHRlcihjKX1maW5kKGMpe3JldHVybiB0aGlzLl9yZXN1bHRz'@;
put 'LmZpbmQoYyl9cmVkdWNlKGMsYSl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMucmVkdWNlKGMsYSl9Zm9yRWFjaChjKXt0aGlzLl9yZXN1bHRzLmZvckVhY2goYyl9c29tZShjKXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5zb21lKGMpfXRvQXJyYXkoKXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5zbGljZSgp'@;
put 'fXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMudG9TdHJpbmcoKX1yZXNldChjLGEpe2NvbnN0IGY9dGhpcztmLmRpcnR5PSExO2NvbnN0IGQ9ZnVuY3Rpb24gazAobCl7cmV0dXJuIGwuZmxhdChOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpfShjKTsodGhpcy5fY2hhbmdlc0RldGVj'@;
put 'dGVkPSFmdW5jdGlvbiBmZihsLGMsYSl7aWYobC5sZW5ndGghPT1jLmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IGY9MDtmPGwubGVuZ3RoO2YrKyl7bGV0IGQ9bFtmXSxoPWNbZl07aWYoYSYmKGQ9YShkKSxoPWEoaCkpLGghPT1kKXJldHVybiExfXJldHVybiEwfShmLl9yZXN1bHRzLGQsYSkp'@;
put 'JiYoZi5fcmVzdWx0cz1kLGYubGVuZ3RoPWQubGVuZ3RoLGYubGFzdD1kW3RoaXMubGVuZ3RoLTFdLGYuZmlyc3Q9ZFswXSl9bm90aWZ5T25DaGFuZ2VzKCl7dGhpcy5fY2hhbmdlcyYmKHRoaXMuX2NoYW5nZXNEZXRlY3RlZHx8IXRoaXMuX2VtaXREaXN0aW5jdENoYW5nZXNPbmx5KSYmdGhp'@;
put 'cy5fY2hhbmdlcy5lbWl0KHRoaXMpfXNldERpcnR5KCl7dGhpcy5kaXJ0eT0hMH1kZXN0cm95KCl7dGhpcy5jaGFuZ2VzLmNvbXBsZXRlKCksdGhpcy5jaGFuZ2VzLnVuc3Vic2NyaWJlKCl9fWxldCB6bD0oKCk9PntjbGFzcyBse31yZXR1cm4gbC5fX05HX0VMRU1FTlRfSURfXz1UdmUsbH0p'@;
put 'KCk7Y29uc3QgeHZlPXpsLEF2ZT1jbGFzcyBleHRlbmRzIHh2ZXtjb25zdHJ1Y3RvcihjLGEsZil7c3VwZXIoKSx0aGlzLl9kZWNsYXJhdGlvbkxWaWV3PWMsdGhpcy5fZGVjbGFyYXRpb25UQ29udGFpbmVyPWEsdGhpcy5lbGVtZW50UmVmPWZ9Z2V0IHNzcklkKCl7cmV0dXJuIHRoaXMuX2Rl'@;
put 'Y2xhcmF0aW9uVENvbnRhaW5lci50Vmlldz8uc3NySWR8fG51bGx9Y3JlYXRlRW1iZWRkZWRWaWV3KGMsYSl7cmV0dXJuIHRoaXMuY3JlYXRlRW1iZWRkZWRWaWV3SW1wbChjLGEsbnVsbCl9Y3JlYXRlRW1iZWRkZWRWaWV3SW1wbChjLGEsZil7Y29uc3QgbT10aGlzLl9kZWNsYXJhdGlvblRD'@;
put 'b250YWluZXIudFZpZXcsXz1xOCh0aGlzLl9kZWNsYXJhdGlvbkxWaWV3LG0sYyw0MDk2JnRoaXMuX2RlY2xhcmF0aW9uTFZpZXdbUG9dPzQwOTY6MTYsbnVsbCxtLmRlY2xUTm9kZSxudWxsLG51bGwsbnVsbCxhfHxudWxsLGZ8fG51bGwpO19bbmhdPXRoaXMuX2RlY2xhcmF0aW9uTFZpZXdb'@;
put 'dGhpcy5fZGVjbGFyYXRpb25UQ29udGFpbmVyLmluZGV4XTtjb25zdCBYPXRoaXMuX2RlY2xhcmF0aW9uTFZpZXdbeWNdO3JldHVybiBudWxsIT09WCYmKF9beWNdPVguY3JlYXRlRW1iZWRkZWRWaWV3KG0pKSx3dyhtLF8sYyksbmV3IHNnKF8pfX07ZnVuY3Rpb24gVHZlKCl7cmV0dXJuIGtP'@;
put 'KER1KCksUXIoKSl9ZnVuY3Rpb24ga08obCxjKXtyZXR1cm4gNCZsLnR5cGU/bmV3IEF2ZShjLGwsdWQobCxjKSk6bnVsbH1sZXQgZmE9KCgpPT57Y2xhc3MgbHt9cmV0dXJuIGwuX19OR19FTEVNRU5UX0lEX189RnZlLGx9KSgpO2Z1bmN0aW9uIEZ2ZSgpe3JldHVybiBYZWUoRHUoKSxRcigp'@;
put 'KX1jb25zdCBIdmU9ZmEsS2VlPWNsYXNzIGV4dGVuZHMgSHZle2NvbnN0cnVjdG9yKGMsYSxmKXtzdXBlcigpLHRoaXMuX2xDb250YWluZXI9Yyx0aGlzLl9ob3N0VE5vZGU9YSx0aGlzLl9ob3N0TFZpZXc9Zn1nZXQgZWxlbWVudCgpe3JldHVybiB1ZCh0aGlzLl9ob3N0VE5vZGUsdGhpcy5f'@;
put 'aG9zdExWaWV3KX1nZXQgaW5qZWN0b3IoKXtyZXR1cm4gbmV3IHZwKHRoaXMuX2hvc3RUTm9kZSx0aGlzLl9ob3N0TFZpZXcpfWdldCBwYXJlbnRJbmplY3Rvcigpe2NvbnN0IGM9Y18odGhpcy5faG9zdFROb2RlLHRoaXMuX2hvc3RMVmlldyk7aWYoVHgoYykpe2NvbnN0IGE9Z3AoYyx0aGlz'@;
put 'Ll9ob3N0TFZpZXcpLGY9c2goYyk7cmV0dXJuIG5ldyB2cChhW2ppXS5kYXRhW2YrOF0sYSl9cmV0dXJuIG5ldyB2cChudWxsLHRoaXMuX2hvc3RMVmlldyl9Y2xlYXIoKXtmb3IoO3RoaXMubGVuZ3RoPjA7KXRoaXMucmVtb3ZlKHRoaXMubGVuZ3RoLTEpfWdldChjKXtjb25zdCBhPXFlZSh0'@;
put 'aGlzLl9sQ29udGFpbmVyKTtyZXR1cm4gbnVsbCE9PWEmJmFbY118fG51bGx9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLl9sQ29udGFpbmVyLmxlbmd0aC1mdX1jcmVhdGVFbWJlZGRlZFZpZXcoYyxhLGYpe2xldCBkLGg7Im51bWJlciI9PXR5cGVvZiBmP2Q9ZjpudWxsIT1mJiYoZD1mLmlu'@;
put 'ZGV4LGg9Zi5pbmplY3Rvcik7Y29uc3QgXz1jLmNyZWF0ZUVtYmVkZGVkVmlld0ltcGwoYXx8e30saCxudWxsKTtyZXR1cm4gdGhpcy5pbnNlcnRJbXBsKF8sZCxmYWxzZSksX31jcmVhdGVDb21wb25lbnQoYyxhLGYsZCxoKXtjb25zdCBtPWMmJiFmdW5jdGlvbiBTMihsKXtyZXR1cm4iZnVu'@;
put 'Y3Rpb24iPT10eXBlb2YgbH0oYyk7bGV0IF87aWYobSlfPWE7ZWxzZXtjb25zdCBaZT1hfHx7fTtfPVplLmluZGV4LGY9WmUuaW5qZWN0b3IsZD1aZS5wcm9qZWN0YWJsZU5vZGVzLGg9WmUuZW52aXJvbm1lbnRJbmplY3Rvcnx8WmUubmdNb2R1bGVSZWZ9Y29uc3QgTz1tP2M6bmV3IHVnKG5h'@;
put 'KGMpKSxYPWZ8fHRoaXMucGFyZW50SW5qZWN0b3I7aWYoIWgmJm51bGw9PU8ubmdNb2R1bGUpe2NvbnN0IGx0PShtP1g6dGhpcy5wYXJlbnRJbmplY3RvcikuZ2V0KHUxLG51bGwpO2x0JiYoaD1sdCl9bmEoTy5jb21wb25lbnRUeXBlPz97fSk7Y29uc3QgeGU9Ty5jcmVhdGUoWCxkLG51bGws'@;
put 'aCk7cmV0dXJuIHRoaXMuaW5zZXJ0SW1wbCh4ZS5ob3N0VmlldyxfLGZhbHNlKSx4ZX1pbnNlcnQoYyxhKXtyZXR1cm4gdGhpcy5pbnNlcnRJbXBsKGMsYSwhMSl9aW5zZXJ0SW1wbChjLGEsZil7Y29uc3QgZD1jLl9sVmlldyxoPWRbamldO2lmKGZ1bmN0aW9uIFVuKGwpe3JldHVybiBkdShs'@;
put 'W2ZsXSl9KGQpKXtjb25zdCBPPXRoaXMuaW5kZXhPZihjKTtpZigtMSE9PU8pdGhpcy5kZXRhY2goTyk7ZWxzZXtjb25zdCBYPWRbZmxdLGFlPW5ldyBLZWUoWCxYW0dvXSxYW2ZsXSk7YWUuZGV0YWNoKGFlLmluZGV4T2YoYykpfX1jb25zdCBtPXRoaXMuX2FkanVzdEluZGV4KGEpLF89dGhp'@;
put 'cy5fbENvbnRhaW5lcjtpZihmdW5jdGlvbiBkbChsLGMsYSxmKXtjb25zdCBkPWZ1K2YsaD1hLmxlbmd0aDtmPjAmJihhW2QtMV1bWGxdPWMpLGY8aC1mdT8oY1tYbF09YVtkXSxzMShhLGZ1K2YsYykpOihhLnB1c2goYyksY1tYbF09bnVsbCksY1tmbF09YTtjb25zdCBtPWNbbmhdO251bGwh'@;
put 'PT1tJiZhIT09bSYmZnVuY3Rpb24gcVEobCxjKXtjb25zdCBhPWxbb2hdO2NbSmxdIT09Y1tmbF1bZmxdW0psXSYmKGxbejZdPSEwKSxudWxsPT09YT9sW29oXT1bY106YS5wdXNoKGMpfShtLGMpO2NvbnN0IF89Y1t5Y107bnVsbCE9PV8mJl8uaW5zZXJ0VmlldyhsKSxjW1BvXXw9MTI4fSho'@;
put 'LGQsXyxtKSwhZil7Y29uc3QgTz14XyhtLF8pLFg9ZFtab10sYWU9VHAoWCxfW0MwXSk7bnVsbCE9PWFlJiZmdW5jdGlvbiBESChsLGMsYSxmLGQsaCl7ZltOaV09ZCxmW0dvXT1jLFptKGwsZixhLDEsZCxoKX0oaCxfW0dvXSxYLGQsYWUsTyl9cmV0dXJuIGMuYXR0YWNoVG9WaWV3Q29udGFp'@;
put 'bmVyUmVmKCksczEoU0IoXyksbSxjKSxjfW1vdmUoYyxhKXtyZXR1cm4gdGhpcy5pbnNlcnQoYyxhKX1pbmRleE9mKGMpe2NvbnN0IGE9cWVlKHRoaXMuX2xDb250YWluZXIpO3JldHVybiBudWxsIT09YT9hLmluZGV4T2YoYyk6LTF9cmVtb3ZlKGMpe2NvbnN0IGE9dGhpcy5fYWRqdXN0SW5k'@;
put 'ZXgoYywtMSksZj14Mih0aGlzLl9sQ29udGFpbmVyLGEpO2YmJihoOChTQih0aGlzLl9sQ29udGFpbmVyKSxhKSxBOChmW2ppXSxmKSl9ZGV0YWNoKGMpe2NvbnN0IGE9dGhpcy5fYWRqdXN0SW5kZXgoYywtMSksZj14Mih0aGlzLl9sQ29udGFpbmVyLGEpO3JldHVybiBmJiZudWxsIT1oOChT'@;
put 'Qih0aGlzLl9sQ29udGFpbmVyKSxhKT9uZXcgc2coZik6bnVsbH1fYWRqdXN0SW5kZXgoYyxhPTApe3JldHVybiBjPz90aGlzLmxlbmd0aCthfX07ZnVuY3Rpb24gcWVlKGwpe3JldHVybiBsWzhdfWZ1bmN0aW9uIFNCKGwpe3JldHVybiBsWzhdfHwobFs4XT1bXSl9ZnVuY3Rpb24gWGVlKGws'@;
put 'Yyl7bGV0IGE7Y29uc3QgZj1jW2wuaW5kZXhdO3JldHVybiBkdShmKT9hPWY6KGE9aFQoZixjLG51bGwsbCksY1tsLmluZGV4XT1hLGV2KGMsYSkpLEplZShhLGMsbCxmKSxuZXcgS2VlKGEsbCxjKX1sZXQgSmVlPWZ1bmN0aW9uIFFlZShsLGMsYSxmKXtpZihsW0MwXSlyZXR1cm47bGV0IGQ7'@;
put 'ZD04JmEudHlwZT9fbChmKTpmdW5jdGlvbiBOdmUobCxjKXtjb25zdCBhPWxbWm9dLGY9YS5jcmVhdGVDb21tZW50KCIiKSxkPVdzKGMsbCk7cmV0dXJuIHBmKGEsVHAoYSxkKSxmLGZ1bmN0aW9uIExIKGwsYyl7cmV0dXJuIGwubmV4dFNpYmxpbmcoYyl9KGEsZCksITEpLGZ9KGMsYSksbFtD'@;
put 'MF09ZH07Y2xhc3MgTUJ7Y29uc3RydWN0b3IoYyl7dGhpcy5xdWVyeUxpc3Q9Yyx0aGlzLm1hdGNoZXM9bnVsbH1jbG9uZSgpe3JldHVybiBuZXcgTUIodGhpcy5xdWVyeUxpc3QpfXNldERpcnR5KCl7dGhpcy5xdWVyeUxpc3Quc2V0RGlydHkoKX19Y2xhc3Mga0J7Y29uc3RydWN0b3IoYz1b'@;
put 'XSl7dGhpcy5xdWVyaWVzPWN9Y3JlYXRlRW1iZWRkZWRWaWV3KGMpe2NvbnN0IGE9Yy5xdWVyaWVzO2lmKG51bGwhPT1hKXtjb25zdCBmPW51bGwhPT1jLmNvbnRlbnRRdWVyaWVzP2MuY29udGVudFF1ZXJpZXNbMF06YS5sZW5ndGgsZD1bXTtmb3IobGV0IGg9MDtoPGY7aCsrKXtjb25zdCBt'@;
put 'PWEuZ2V0QnlJbmRleChoKTtkLnB1c2godGhpcy5xdWVyaWVzW20uaW5kZXhJbkRlY2xhcmF0aW9uVmlld10uY2xvbmUoKSl9cmV0dXJuIG5ldyBrQihkKX1yZXR1cm4gbnVsbH1pbnNlcnRWaWV3KGMpe3RoaXMuZGlydHlRdWVyaWVzV2l0aE1hdGNoZXMoYyl9ZGV0YWNoVmlldyhjKXt0aGlz'@;
put 'LmRpcnR5UXVlcmllc1dpdGhNYXRjaGVzKGMpfWRpcnR5UXVlcmllc1dpdGhNYXRjaGVzKGMpe2ZvcihsZXQgYT0wO2E8dGhpcy5xdWVyaWVzLmxlbmd0aDthKyspbnVsbCE9PWl0ZShjLGEpLm1hdGNoZXMmJnRoaXMucXVlcmllc1thXS5zZXREaXJ0eSgpfX1jbGFzcyBldGV7Y29uc3RydWN0'@;
put 'b3IoYyxhLGY9bnVsbCl7dGhpcy5wcmVkaWNhdGU9Yyx0aGlzLmZsYWdzPWEsdGhpcy5yZWFkPWZ9fWNsYXNzIEVCe2NvbnN0cnVjdG9yKGM9W10pe3RoaXMucXVlcmllcz1jfWVsZW1lbnRTdGFydChjLGEpe2ZvcihsZXQgZj0wO2Y8dGhpcy5xdWVyaWVzLmxlbmd0aDtmKyspdGhpcy5xdWVy'@;
put 'aWVzW2ZdLmVsZW1lbnRTdGFydChjLGEpfWVsZW1lbnRFbmQoYyl7Zm9yKGxldCBhPTA7YTx0aGlzLnF1ZXJpZXMubGVuZ3RoO2ErKyl0aGlzLnF1ZXJpZXNbYV0uZWxlbWVudEVuZChjKX1lbWJlZGRlZFRWaWV3KGMpe2xldCBhPW51bGw7Zm9yKGxldCBmPTA7Zjx0aGlzLmxlbmd0aDtmKysp'@;
put 'e2NvbnN0IGQ9bnVsbCE9PWE/YS5sZW5ndGg6MCxoPXRoaXMuZ2V0QnlJbmRleChmKS5lbWJlZGRlZFRWaWV3KGMsZCk7aCYmKGguaW5kZXhJbkRlY2xhcmF0aW9uVmlldz1mLG51bGwhPT1hP2EucHVzaChoKTphPVtoXSl9cmV0dXJuIG51bGwhPT1hP25ldyBFQihhKTpudWxsfXRlbXBsYXRl'@;
put 'KGMsYSl7Zm9yKGxldCBmPTA7Zjx0aGlzLnF1ZXJpZXMubGVuZ3RoO2YrKyl0aGlzLnF1ZXJpZXNbZl0udGVtcGxhdGUoYyxhKX1nZXRCeUluZGV4KGMpe3JldHVybiB0aGlzLnF1ZXJpZXNbY119Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLnF1ZXJpZXMubGVuZ3RofXRyYWNrKGMpe3RoaXMu'@;
put 'cXVlcmllcy5wdXNoKGMpfX1jbGFzcyB4Qntjb25zdHJ1Y3RvcihjLGE9LTEpe3RoaXMubWV0YWRhdGE9Yyx0aGlzLm1hdGNoZXM9bnVsbCx0aGlzLmluZGV4SW5EZWNsYXJhdGlvblZpZXc9LTEsdGhpcy5jcm9zc2VzTmdUZW1wbGF0ZT0hMSx0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZT0hMCx0'@;
put 'aGlzLl9kZWNsYXJhdGlvbk5vZGVJbmRleD1hfWVsZW1lbnRTdGFydChjLGEpe3RoaXMuaXNBcHBseWluZ1RvTm9kZShhKSYmdGhpcy5tYXRjaFROb2RlKGMsYSl9ZWxlbWVudEVuZChjKXt0aGlzLl9kZWNsYXJhdGlvbk5vZGVJbmRleD09PWMuaW5kZXgmJih0aGlzLl9hcHBsaWVzVG9OZXh0'@;
put 'Tm9kZT0hMSl9dGVtcGxhdGUoYyxhKXt0aGlzLmVsZW1lbnRTdGFydChjLGEpfWVtYmVkZGVkVFZpZXcoYyxhKXtyZXR1cm4gdGhpcy5pc0FwcGx5aW5nVG9Ob2RlKGMpPyh0aGlzLmNyb3NzZXNOZ1RlbXBsYXRlPSEwLHRoaXMuYWRkTWF0Y2goLWMuaW5kZXgsYSksbmV3IHhCKHRoaXMubWV0'@;
put 'YWRhdGEpKTpudWxsfWlzQXBwbHlpbmdUb05vZGUoYyl7aWYodGhpcy5fYXBwbGllc1RvTmV4dE5vZGUmJjEhPSgxJnRoaXMubWV0YWRhdGEuZmxhZ3MpKXtjb25zdCBhPXRoaXMuX2RlY2xhcmF0aW9uTm9kZUluZGV4O2xldCBmPWMucGFyZW50O2Zvcig7bnVsbCE9PWYmJjgmZi50eXBlJiZm'@;
put 'LmluZGV4IT09YTspZj1mLnBhcmVudDtyZXR1cm4gYT09PShudWxsIT09Zj9mLmluZGV4Oi0xKX1yZXR1cm4gdGhpcy5fYXBwbGllc1RvTmV4dE5vZGV9bWF0Y2hUTm9kZShjLGEpe2NvbnN0IGY9dGhpcy5tZXRhZGF0YS5wcmVkaWNhdGU7aWYoQXJyYXkuaXNBcnJheShmKSlmb3IobGV0IGQ9'@;
put 'MDtkPGYubGVuZ3RoO2QrKyl7Y29uc3QgaD1mW2RdO3RoaXMubWF0Y2hUTm9kZVdpdGhSZWFkT3B0aW9uKGMsYSxqdmUoYSxoKSksdGhpcy5tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24oYyxhLGM4KGEsYyxoLCExLCExKSl9ZWxzZSBmPT09emw/NCZhLnR5cGUmJnRoaXMubWF0Y2hUTm9kZVdp'@;
put 'dGhSZWFkT3B0aW9uKGMsYSwtMSk6dGhpcy5tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24oYyxhLGM4KGEsYyxmLCExLCExKSl9bWF0Y2hUTm9kZVdpdGhSZWFkT3B0aW9uKGMsYSxmKXtpZihudWxsIT09Zil7Y29uc3QgZD10aGlzLm1ldGFkYXRhLnJlYWQ7aWYobnVsbCE9PWQpaWYoZD09PVZp'@;
put 'fHxkPT09ZmF8fGQ9PT16bCYmNCZhLnR5cGUpdGhpcy5hZGRNYXRjaChhLmluZGV4LC0yKTtlbHNle2NvbnN0IGg9YzgoYSxjLGQsITEsITEpO251bGwhPT1oJiZ0aGlzLmFkZE1hdGNoKGEuaW5kZXgsaCl9ZWxzZSB0aGlzLmFkZE1hdGNoKGEuaW5kZXgsZil9fWFkZE1hdGNoKGMsYSl7bnVs'@;
put 'bD09PXRoaXMubWF0Y2hlcz90aGlzLm1hdGNoZXM9W2MsYV06dGhpcy5tYXRjaGVzLnB1c2goYyxhKX19ZnVuY3Rpb24ganZlKGwsYyl7Y29uc3QgYT1sLmxvY2FsTmFtZXM7aWYobnVsbCE9PWEpZm9yKGxldCBmPTA7ZjxhLmxlbmd0aDtmKz0yKWlmKGFbZl09PT1jKXJldHVybiBhW2YrMV07'@;
put 'cmV0dXJuIG51bGx9ZnVuY3Rpb24gVXZlKGwsYyxhLGYpe3JldHVybi0xPT09YT9mdW5jdGlvbiB6dmUobCxjKXtyZXR1cm4gMTEmbC50eXBlP3VkKGwsYyk6NCZsLnR5cGU/a08obCxjKTpudWxsfShjLGwpOi0yPT09YT9mdW5jdGlvbiBadmUobCxjLGEpe3JldHVybiBhPT09Vmk/dWQoYyxs'@;
put 'KTphPT09emw/a08oYyxsKTphPT09ZmE/WGVlKGMsbCk6dm9pZCAwfShsLGMsZik6QzIobCxsW2ppXSxhLGMpfWZ1bmN0aW9uIHR0ZShsLGMsYSxmKXtjb25zdCBkPWNbeWNdLnF1ZXJpZXNbZl07aWYobnVsbD09PWQubWF0Y2hlcyl7Y29uc3QgaD1sLmRhdGEsbT1hLm1hdGNoZXMsXz1bXTtm'@;
put 'b3IobGV0IE89MDtPPG0ubGVuZ3RoO08rPTIpe2NvbnN0IFg9bVtPXTtfLnB1c2goWDwwP251bGw6VXZlKGMsaFtYXSxtW08rMV0sYS5tZXRhZGF0YS5yZWFkKSl9ZC5tYXRjaGVzPV99cmV0dXJuIGQubWF0Y2hlc31mdW5jdGlvbiBBQihsLGMsYSxmKXtjb25zdCBkPWwucXVlcmllcy5nZXRC'@;
put 'eUluZGV4KGEpLGg9ZC5tYXRjaGVzO2lmKG51bGwhPT1oKXtjb25zdCBtPXR0ZShsLGMsZCxhKTtmb3IobGV0IF89MDtfPGgubGVuZ3RoO18rPTIpe2NvbnN0IE89aFtfXTtpZihPPjApZi5wdXNoKG1bXy8yXSk7ZWxzZXtjb25zdCBYPWhbXysxXSxhZT1jWy1PXTtmb3IobGV0IHBlPWZ1O3Bl'@;
put 'PGFlLmxlbmd0aDtwZSsrKXtjb25zdCBiZT1hZVtwZV07YmVbbmhdPT09YmVbZmxdJiZBQihiZVtqaV0sYmUsWCxmKX1pZihudWxsIT09YWVbb2hdKXtjb25zdCBwZT1hZVtvaF07Zm9yKGxldCBiZT0wO2JlPHBlLmxlbmd0aDtiZSsrKXtjb25zdCB4ZT1wZVtiZV07QUIoeGVbamldLHhlLFgs'@;
put 'Zil9fX19fXJldHVybiBmfWZ1bmN0aW9uIHVpKGwpe2NvbnN0IGM9UXIoKSxhPUlhKCksZj15eCgpO2lfKGYrMSk7Y29uc3QgZD1pdGUoYSxmKTtpZihsLmRpcnR5JiZmdW5jdGlvbiBSdChsKXtyZXR1cm4gND09KDQmbFtQb10pfShjKT09PSgyPT0oMiZkLm1ldGFkYXRhLmZsYWdzKSkpe2lm'@;
put 'KG51bGw9PT1kLm1hdGNoZXMpbC5yZXNldChbXSk7ZWxzZXtjb25zdCBoPWQuY3Jvc3Nlc05nVGVtcGxhdGU/QUIoYSxjLGYsW10pOnR0ZShhLGMsZCxmKTtsLnJlc2V0KGgsSTIpLGwubm90aWZ5T25DaGFuZ2VzKCl9cmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gTm8obCxjLGEpe2NvbnN0'@;
put 'IGY9SWEoKTtmLmZpcnN0Q3JlYXRlUGFzcyYmKHJ0ZShmLG5ldyBldGUobCxjLGEpLC0xKSwyPT0oMiZjKSYmKGYuc3RhdGljVmlld1F1ZXJpZXM9ITApKSxudGUoZixRcigpLGMpfWZ1bmN0aW9uIEZvKGwsYyxhLGYpe2NvbnN0IGQ9SWEoKTtpZihkLmZpcnN0Q3JlYXRlUGFzcyl7Y29uc3Qg'@;
put 'aD1EdSgpO3J0ZShkLG5ldyBldGUoYyxhLGYpLGguaW5kZXgpLGZ1bmN0aW9uIFd2ZShsLGMpe2NvbnN0IGE9bC5jb250ZW50UXVlcmllc3x8KGwuY29udGVudFF1ZXJpZXM9W10pO2MhPT0oYS5sZW5ndGg/YVthLmxlbmd0aC0xXTotMSkmJmEucHVzaChsLnF1ZXJpZXMubGVuZ3RoLTEsYyl9'@;
put 'KGQsbCksMj09KDImYSkmJihkLnN0YXRpY0NvbnRlbnRRdWVyaWVzPSEwKX1udGUoZCxRcigpLGEpfWZ1bmN0aW9uIGNpKCl7cmV0dXJuIGZ1bmN0aW9uIFl2ZShsLGMpe3JldHVybiBsW3ljXS5xdWVyaWVzW2NdLnF1ZXJ5TGlzdH0oUXIoKSx5eCgpKX1mdW5jdGlvbiBudGUobCxjLGEpe2Nv'@;
put 'bnN0IGY9bmV3IFUyKDQ9PSg0JmEpKTsoZnVuY3Rpb24gVE4obCxjLGEsZil7Y29uc3QgZD1tVChjKTtkLnB1c2goYSksbC5maXJzdENyZWF0ZVBhc3MmJmdUKGwpLnB1c2goZixkLmxlbmd0aC0xKX0pKGwsYyxmLGYuZGVzdHJveSksbnVsbD09PWNbeWNdJiYoY1t5Y109bmV3IGtCKSxjW3lj'@;
put 'XS5xdWVyaWVzLnB1c2gobmV3IE1CKGYpKX1mdW5jdGlvbiBydGUobCxjLGEpe251bGw9PT1sLnF1ZXJpZXMmJihsLnF1ZXJpZXM9bmV3IEVCKSxsLnF1ZXJpZXMudHJhY2sobmV3IHhCKGMsYSkpfWZ1bmN0aW9uIGl0ZShsLGMpe3JldHVybiBsLnF1ZXJpZXMuZ2V0QnlJbmRleChjKX1mdW5j'@;
put 'dGlvbiBLdShsLGMpe3JldHVybiBrTyhsLGMpfWNvbnN0IExCPW5ldyBNaSgiQXBwbGljYXRpb24gSW5pdGlhbGl6ZXIiKTtsZXQgUEI9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3Rvcigpe3RoaXMuaW5pdGlhbGl6ZWQ9ITEsdGhpcy5kb25lPSExLHRoaXMuZG9uZVByb21pc2U9bmV3IFByb21p'@;
put 'c2UoKGEsZik9Pnt0aGlzLnJlc29sdmU9YSx0aGlzLnJlamVjdD1mfSksdGhpcy5hcHBJbml0cz1IaShMQix7b3B0aW9uYWw6ITB9KT8/W119cnVuSW5pdGlhbGl6ZXJzKCl7aWYodGhpcy5pbml0aWFsaXplZClyZXR1cm47Y29uc3QgYT1bXTtmb3IoY29uc3QgZCBvZiB0aGlzLmFwcEluaXRz'@;
put 'KXtjb25zdCBoPWQoKTtpZihwZyhoKSlhLnB1c2goaCk7ZWxzZSBpZihXVChoKSl7Y29uc3QgbT1uZXcgUHJvbWlzZSgoXyxPKT0+e2guc3Vic2NyaWJlKHtjb21wbGV0ZTpfLGVycm9yOk99KX0pO2EucHVzaChtKX19Y29uc3QgZj0oKT0+e3RoaXMuZG9uZT0hMCx0aGlzLnJlc29sdmUoKX07'@;
put 'UHJvbWlzZS5hbGwoYSkudGhlbigoKT0+e2YoKX0pLmNhdGNoKGQ9Pnt0aGlzLnJlamVjdChkKX0pLDA9PT1hLmxlbmd0aCYmZigpLHRoaXMuaW5pdGlhbGl6ZWQ9ITB9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NXByb3Y9aHIoe3Rv'@;
put 'a2VuOmwsZmFjdG9yeTpsLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGx9KSgpLHd0ZT0oKCk9PntjbGFzcyBse2xvZyhhKXtjb25zb2xlLmxvZyhhKX13YXJuKGEpe2NvbnNvbGUud2FybihhKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9'@;
put 'LGwuXHUwMjc1cHJvdj1ocih7dG9rZW46bCxmYWN0b3J5OmwuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InBsYXRmb3JtIn0pLGx9KSgpO2NvbnN0IHBkPW5ldyBNaSgiTG9jYWxlSWQiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5IaShwZCxhYS5PcHRpb25hbHxhYS5Ta2lwU2VsZil8'@;
put 'fGZ1bmN0aW9uIGg3ZSgpe3JldHVybiB0eXBlb2YgJGxvY2FsaXplPCJ1IiYmJGxvY2FsaXplLmxvY2FsZXx8cXB9KCl9KTtsZXQgeE89KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3Rvcigpe3RoaXMudGFza0lkPTAsdGhpcy5wZW5kaW5nVGFza3M9bmV3IFNldCx0aGlzLmhhc1BlbmRpbmdUYXNr'@;
put 'cz1uZXcgT2UoITEpfWFkZCgpe3RoaXMuaGFzUGVuZGluZ1Rhc2tzLm5leHQoITApO2NvbnN0IGE9dGhpcy50YXNrSWQrKztyZXR1cm4gdGhpcy5wZW5kaW5nVGFza3MuYWRkKGEpLGF9cmVtb3ZlKGEpe3RoaXMucGVuZGluZ1Rhc2tzLmRlbGV0ZShhKSwwPT09dGhpcy5wZW5kaW5nVGFza3Mu'@;
put 'c2l6ZSYmdGhpcy5oYXNQZW5kaW5nVGFza3MubmV4dCghMSl9bmdPbkRlc3Ryb3koKXt0aGlzLnBlbmRpbmdUYXNrcy5jbGVhcigpLHRoaXMuaGFzUGVuZGluZ1Rhc2tzLm5leHQoITEpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVw'@;
put 'cm92PWhyKHt0b2tlbjpsLGZhY3Rvcnk6bC5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxsfSkoKTtjbGFzcyBnN2V7Y29uc3RydWN0b3IoYyxhKXt0aGlzLm5nTW9kdWxlRmFjdG9yeT1jLHRoaXMuY29tcG9uZW50RmFjdG9yaWVzPWF9fWxldCBDdGU9KCgpPT57Y2xhc3MgbHtjb21w'@;
put 'aWxlTW9kdWxlU3luYyhhKXtyZXR1cm4gbmV3IGhkKGEpfWNvbXBpbGVNb2R1bGVBc3luYyhhKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuY29tcGlsZU1vZHVsZVN5bmMoYSkpfWNvbXBpbGVNb2R1bGVBbmRBbGxDb21wb25lbnRzU3luYyhhKXtjb25zdCBmPXRoaXMuY29tcGlsZU1v'@;
put 'ZHVsZVN5bmMoYSksaD1jZChadShhKS5kZWNsYXJhdGlvbnMpLnJlZHVjZSgobSxfKT0+e2NvbnN0IE89bmEoXyk7cmV0dXJuIE8mJm0ucHVzaChuZXcgdWcoTykpLG19LFtdKTtyZXR1cm4gbmV3IGc3ZShmLGgpfWNvbXBpbGVNb2R1bGVBbmRBbGxDb21wb25lbnRzQXN5bmMoYSl7cmV0dXJu'@;
put 'IFByb21pc2UucmVzb2x2ZSh0aGlzLmNvbXBpbGVNb2R1bGVBbmRBbGxDb21wb25lbnRzU3luYyhhKSl9Y2xlYXJDYWNoZSgpe31jbGVhckNhY2hlRm9yKGEpe31nZXRNb2R1bGVJZChhKXt9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3'@;
put 'NXByb3Y9aHIoe3Rva2VuOmwsZmFjdG9yeTpsLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGx9KSgpO2Z1bmN0aW9uIGt0ZSguLi5sKXt9Y2xhc3MgVW97Y29uc3RydWN0b3Ioe2VuYWJsZUxvbmdTdGFja1RyYWNlOmM9ITEsc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlv'@;
put 'bjphPSExLHNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uOmY9ITF9KXtpZih0aGlzLmhhc1BlbmRpbmdNYWNyb3Rhc2tzPSExLHRoaXMuaGFzUGVuZGluZ01pY3JvdGFza3M9ITEsdGhpcy5pc1N0YWJsZT0hMCx0aGlzLm9uVW5zdGFibGU9bmV3IHhyKCExKSx0aGlzLm9uTWljcm90'@;
put 'YXNrRW1wdHk9bmV3IHhyKCExKSx0aGlzLm9uU3RhYmxlPW5ldyB4cighMSksdGhpcy5vbkVycm9yPW5ldyB4cighMSksdHlwZW9mIFpvbmU+InUiKXRocm93IG5ldyBJcig5MDgsITEpO1pvbmUuYXNzZXJ0Wm9uZVBhdGNoZWQoKTtjb25zdCBkPXRoaXM7ZC5fbmVzdGluZz0wLGQuX291dGVy'@;
put 'PWQuX2lubmVyPVpvbmUuY3VycmVudCxab25lLlRhc2tUcmFja2luZ1pvbmVTcGVjJiYoZC5faW5uZXI9ZC5faW5uZXIuZm9yayhuZXcgWm9uZS5UYXNrVHJhY2tpbmdab25lU3BlYykpLGMmJlpvbmUubG9uZ1N0YWNrVHJhY2Vab25lU3BlYyYmKGQuX2lubmVyPWQuX2lubmVyLmZvcmsoWm9u'@;
put 'ZS5sb25nU3RhY2tUcmFjZVpvbmVTcGVjKSksZC5zaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9uPSFmJiZhLGQuc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb249ZixkLmxhc3RSZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZD0tMSxkLm5hdGl2ZVJlcXVlc3RBbmltYXRpb25G'@;
put 'cmFtZT1mdW5jdGlvbiBiN2UoKXtjb25zdCBsPSJmdW5jdGlvbiI9PXR5cGVvZiBQaS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7bGV0IGM9UGlbbD8icmVxdWVzdEFuaW1hdGlvbkZyYW1lIjoic2V0VGltZW91dCJdLGE9UGlbbD8iY2FuY2VsQW5pbWF0aW9uRnJhbWUiOiJjbGVhclRpbWVvdXQi'@;
put 'XTtpZih0eXBlb2YgWm9uZTwidSImJmMmJmEpe2NvbnN0IGY9Y1tab25lLl9fc3ltYm9sX18oIk9yaWdpbmFsRGVsZWdhdGUiKV07ZiYmKGM9Zik7Y29uc3QgZD1hW1pvbmUuX19zeW1ib2xfXygiT3JpZ2luYWxEZWxlZ2F0ZSIpXTtkJiYoYT1kKX1yZXR1cm57bmF0aXZlUmVxdWVzdEFuaW1h'@;
put 'dGlvbkZyYW1lOmMsbmF0aXZlQ2FuY2VsQW5pbWF0aW9uRnJhbWU6YX19KCkubmF0aXZlUmVxdWVzdEFuaW1hdGlvbkZyYW1lLGZ1bmN0aW9uIEM3ZShsKXtjb25zdCBjPSgpPT57IWZ1bmN0aW9uIHc3ZShsKXtsLmlzQ2hlY2tTdGFibGVSdW5uaW5nfHwtMSE9PWwubGFzdFJlcXVlc3RBbmlt'@;
put 'YXRpb25GcmFtZUlkfHwobC5sYXN0UmVxdWVzdEFuaW1hdGlvbkZyYW1lSWQ9bC5uYXRpdmVSZXF1ZXN0QW5pbWF0aW9uRnJhbWUuY2FsbChQaSwoKT0+e2wuZmFrZVRvcEV2ZW50VGFza3x8KGwuZmFrZVRvcEV2ZW50VGFzaz1ab25lLnJvb3Quc2NoZWR1bGVFdmVudFRhc2soImZha2VUb3BF'@;
put 'dmVudFRhc2siLCgpPT57bC5sYXN0UmVxdWVzdEFuaW1hdGlvbkZyYW1lSWQ9LTEsSEIobCksbC5pc0NoZWNrU3RhYmxlUnVubmluZz0hMCxGQihsKSxsLmlzQ2hlY2tTdGFibGVSdW5uaW5nPSExfSx2b2lkIDAsKCk9Pnt9LCgpPT57fSkpLGwuZmFrZVRvcEV2ZW50VGFzay5pbnZva2UoKX0p'@;
put 'LEhCKGwpKX0obCl9O2wuX2lubmVyPWwuX2lubmVyLmZvcmsoe25hbWU6ImFuZ3VsYXIiLHByb3BlcnRpZXM6e2lzQW5ndWxhclpvbmU6ITB9LG9uSW52b2tlVGFzazooYSxmLGQsaCxtLF8pPT57dHJ5e3JldHVybiBFdGUobCksYS5pbnZva2VUYXNrKGQsaCxtLF8pfWZpbmFsbHl7KGwuc2hv'@;
put 'dWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbiYmImV2ZW50VGFzayI9PT1oLnR5cGV8fGwuc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb24pJiZjKCkseHRlKGwpfX0sb25JbnZva2U6KGEsZixkLGgsbSxfLE8pPT57dHJ5e3JldHVybiBFdGUobCksYS5pbnZva2UoZCxoLG0s'@;
put 'XyxPKX1maW5hbGx5e2wuc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb24mJmMoKSx4dGUobCl9fSxvbkhhc1Rhc2s6KGEsZixkLGgpPT57YS5oYXNUYXNrKGQsaCksZj09PWQmJigibWljcm9UYXNrIj09aC5jaGFuZ2U/KGwuX2hhc1BlbmRpbmdNaWNyb3Rhc2tzPWgubWljcm9UYXNr'@;
put 'LEhCKGwpLEZCKGwpKToibWFjcm9UYXNrIj09aC5jaGFuZ2UmJihsLmhhc1BlbmRpbmdNYWNyb3Rhc2tzPWgubWFjcm9UYXNrKSl9LG9uSGFuZGxlRXJyb3I6KGEsZixkLGgpPT4oYS5oYW5kbGVFcnJvcihkLGgpLGwucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pmwub25FcnJvci5lbWl0KGgpKSwh'@;
put 'MSl9KX0oZCl9c3RhdGljIGlzSW5Bbmd1bGFyWm9uZSgpe3JldHVybiB0eXBlb2YgWm9uZTwidSImJiEwPT09Wm9uZS5jdXJyZW50LmdldCgiaXNBbmd1bGFyWm9uZSIpfXN0YXRpYyBhc3NlcnRJbkFuZ3VsYXJab25lKCl7aWYoIVVvLmlzSW5Bbmd1bGFyWm9uZSgpKXRocm93IG5ldyBJcig5'@;
put 'MDksITEpfXN0YXRpYyBhc3NlcnROb3RJbkFuZ3VsYXJab25lKCl7aWYoVW8uaXNJbkFuZ3VsYXJab25lKCkpdGhyb3cgbmV3IElyKDkwOSwhMSl9cnVuKGMsYSxmKXtyZXR1cm4gdGhpcy5faW5uZXIucnVuKGMsYSxmKX1ydW5UYXNrKGMsYSxmLGQpe2NvbnN0IGg9dGhpcy5faW5uZXIsbT1o'@;
put 'LnNjaGVkdWxlRXZlbnRUYXNrKCJOZ1pvbmVFdmVudDogIitkLGMsXzdlLGt0ZSxrdGUpO3RyeXtyZXR1cm4gaC5ydW5UYXNrKG0sYSxmKX1maW5hbGx5e2guY2FuY2VsVGFzayhtKX19cnVuR3VhcmRlZChjLGEsZil7cmV0dXJuIHRoaXMuX2lubmVyLnJ1bkd1YXJkZWQoYyxhLGYpfXJ1bk91'@;
put 'dHNpZGVBbmd1bGFyKGMpe3JldHVybiB0aGlzLl9vdXRlci5ydW4oYyl9fWNvbnN0IF83ZT17fTtmdW5jdGlvbiBGQihsKXtpZigwPT1sLl9uZXN0aW5nJiYhbC5oYXNQZW5kaW5nTWljcm90YXNrcyYmIWwuaXNTdGFibGUpdHJ5e2wuX25lc3RpbmcrKyxsLm9uTWljcm90YXNrRW1wdHkuZW1p'@;
put 'dChudWxsKX1maW5hbGx5e2lmKGwuX25lc3RpbmctLSwhbC5oYXNQZW5kaW5nTWljcm90YXNrcyl0cnl7bC5ydW5PdXRzaWRlQW5ndWxhcigoKT0+bC5vblN0YWJsZS5lbWl0KG51bGwpKX1maW5hbGx5e2wuaXNTdGFibGU9ITB9fX1mdW5jdGlvbiBIQihsKXtsLmhhc1BlbmRpbmdNaWNyb3Rh'@;
put 'c2tzPSEhKGwuX2hhc1BlbmRpbmdNaWNyb3Rhc2tzfHwobC5zaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9ufHxsLnNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uKSYmLTEhPT1sLmxhc3RSZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZCl9ZnVuY3Rpb24gRXRlKGwpe2wuX25l'@;
put 'c3RpbmcrKyxsLmlzU3RhYmxlJiYobC5pc1N0YWJsZT0hMSxsLm9uVW5zdGFibGUuZW1pdChudWxsKSl9ZnVuY3Rpb24geHRlKGwpe2wuX25lc3RpbmctLSxGQihsKX1jbGFzcyBTN2V7Y29uc3RydWN0b3IoKXt0aGlzLmhhc1BlbmRpbmdNaWNyb3Rhc2tzPSExLHRoaXMuaGFzUGVuZGluZ01h'@;
put 'Y3JvdGFza3M9ITEsdGhpcy5pc1N0YWJsZT0hMCx0aGlzLm9uVW5zdGFibGU9bmV3IHhyLHRoaXMub25NaWNyb3Rhc2tFbXB0eT1uZXcgeHIsdGhpcy5vblN0YWJsZT1uZXcgeHIsdGhpcy5vbkVycm9yPW5ldyB4cn1ydW4oYyxhLGYpe3JldHVybiBjLmFwcGx5KGEsZil9cnVuR3VhcmRlZChj'@;
put 'LGEsZil7cmV0dXJuIGMuYXBwbHkoYSxmKX1ydW5PdXRzaWRlQW5ndWxhcihjKXtyZXR1cm4gYygpfXJ1blRhc2soYyxhLGYsZCl7cmV0dXJuIGMuYXBwbHkoYSxmKX19Y29uc3QgQXRlPW5ldyBNaSgiIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpUdGV9KTtmdW5jdGlvbiBUdGUoKXtj'@;
put 'b25zdCBsPUhpKFVvKTtsZXQgYz0hMDtyZXR1cm4gc2EobmV3IEJlKGQ9PntjPWwuaXNTdGFibGUmJiFsLmhhc1BlbmRpbmdNYWNyb3Rhc2tzJiYhbC5oYXNQZW5kaW5nTWljcm90YXNrcyxsLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57ZC5uZXh0KGMpLGQuY29tcGxldGUoKX0pfSksbmV3IEJl'@;
put 'KGQ9PntsZXQgaDtsLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57aD1sLm9uU3RhYmxlLnN1YnNjcmliZSgoKT0+e1VvLmFzc2VydE5vdEluQW5ndWxhclpvbmUoKSxxdWV1ZU1pY3JvdGFzaygoKT0+eyFjJiYhbC5oYXNQZW5kaW5nTWFjcm90YXNrcyYmIWwuaGFzUGVuZGluZ01pY3JvdGFza3Mm'@;
put 'JihjPSEwLGQubmV4dCghMCkpfSl9KX0pO2NvbnN0IG09bC5vblVuc3RhYmxlLnN1YnNjcmliZSgoKT0+e1VvLmFzc2VydEluQW5ndWxhclpvbmUoKSxjJiYoYz0hMSxsLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57ZC5uZXh0KCExKX0pKX0pO3JldHVybigpPT57aC51bnN1YnNjcmliZSgpLG0u'@;
put 'dW5zdWJzY3JpYmUoKX19KS5waXBlKCRsKCkpKX1jb25zdCBPdGU9bmV3IE1pKCIiKSxBTz1uZXcgTWkoIiIpO2xldCBCQixOQj0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEsZixkKXt0aGlzLl9uZ1pvbmU9YSx0aGlzLnJlZ2lzdHJ5PWYsdGhpcy5fcGVuZGluZ0NvdW50PTAsdGhpcy5f'@;
put 'aXNab25lU3RhYmxlPSEwLHRoaXMuX2RpZFdvcms9ITEsdGhpcy5fY2FsbGJhY2tzPVtdLHRoaXMudGFza1RyYWNraW5nWm9uZT1udWxsLEJCfHwoZnVuY3Rpb24gTTdlKGwpe0JCPWx9KGQpLGQuYWRkVG9XaW5kb3coZikpLHRoaXMuX3dhdGNoQW5ndWxhckV2ZW50cygpLGEucnVuKCgpPT57'@;
put 'dGhpcy50YXNrVHJhY2tpbmdab25lPXR5cGVvZiBab25lPiJ1Ij9udWxsOlpvbmUuY3VycmVudC5nZXQoIlRhc2tUcmFja2luZ1pvbmUiKX0pfV93YXRjaEFuZ3VsYXJFdmVudHMoKXt0aGlzLl9uZ1pvbmUub25VbnN0YWJsZS5zdWJzY3JpYmUoe25leHQ6KCk9Pnt0aGlzLl9kaWRXb3JrPSEw'@;
put 'LHRoaXMuX2lzWm9uZVN0YWJsZT0hMX19KSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9uZ1pvbmUub25TdGFibGUuc3Vic2NyaWJlKHtuZXh0OigpPT57VW8uYXNzZXJ0Tm90SW5Bbmd1bGFyWm9uZSgpLHF1ZXVlTWljcm90YXNrKCgpPT57dGhpcy5faXNab25l'@;
put 'U3RhYmxlPSEwLHRoaXMuX3J1bkNhbGxiYWNrc0lmUmVhZHkoKX0pfX0pfSl9aW5jcmVhc2VQZW5kaW5nUmVxdWVzdENvdW50KCl7cmV0dXJuIHRoaXMuX3BlbmRpbmdDb3VudCs9MSx0aGlzLl9kaWRXb3JrPSEwLHRoaXMuX3BlbmRpbmdDb3VudH1kZWNyZWFzZVBlbmRpbmdSZXF1ZXN0Q291'@;
put 'bnQoKXtpZih0aGlzLl9wZW5kaW5nQ291bnQtPTEsdGhpcy5fcGVuZGluZ0NvdW50PDApdGhyb3cgbmV3IEVycm9yKCJwZW5kaW5nIGFzeW5jIHJlcXVlc3RzIGJlbG93IHplcm8iKTtyZXR1cm4gdGhpcy5fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpLHRoaXMuX3BlbmRpbmdDb3VudH1pc1N0YWJs'@;
put 'ZSgpe3JldHVybiB0aGlzLl9pc1pvbmVTdGFibGUmJjA9PT10aGlzLl9wZW5kaW5nQ291bnQmJiF0aGlzLl9uZ1pvbmUuaGFzUGVuZGluZ01hY3JvdGFza3N9X3J1bkNhbGxiYWNrc0lmUmVhZHkoKXtpZih0aGlzLmlzU3RhYmxlKCkpcXVldWVNaWNyb3Rhc2soKCk9Pntmb3IoOzAhPT10aGlz'@;
put 'Ll9jYWxsYmFja3MubGVuZ3RoOyl7bGV0IGE9dGhpcy5fY2FsbGJhY2tzLnBvcCgpO2NsZWFyVGltZW91dChhLnRpbWVvdXRJZCksYS5kb25lQ2IodGhpcy5fZGlkV29yayl9dGhpcy5fZGlkV29yaz0hMX0pO2Vsc2V7bGV0IGE9dGhpcy5nZXRQZW5kaW5nVGFza3MoKTt0aGlzLl9jYWxsYmFj'@;
put 'a3M9dGhpcy5fY2FsbGJhY2tzLmZpbHRlcihmPT4hZi51cGRhdGVDYnx8IWYudXBkYXRlQ2IoYSl8fChjbGVhclRpbWVvdXQoZi50aW1lb3V0SWQpLCExKSksdGhpcy5fZGlkV29yaz0hMH19Z2V0UGVuZGluZ1Rhc2tzKCl7cmV0dXJuIHRoaXMudGFza1RyYWNraW5nWm9uZT90aGlzLnRhc2tU'@;
put 'cmFja2luZ1pvbmUubWFjcm9UYXNrcy5tYXAoYT0+KHtzb3VyY2U6YS5zb3VyY2UsY3JlYXRpb25Mb2NhdGlvbjphLmNyZWF0aW9uTG9jYXRpb24sZGF0YTphLmRhdGF9KSk6W119YWRkQ2FsbGJhY2soYSxmLGQpe2xldCBoPS0xO2YmJmY+MCYmKGg9c2V0VGltZW91dCgoKT0+e3RoaXMuX2Nh'@;
put 'bGxiYWNrcz10aGlzLl9jYWxsYmFja3MuZmlsdGVyKG09Pm0udGltZW91dElkIT09aCksYSh0aGlzLl9kaWRXb3JrLHRoaXMuZ2V0UGVuZGluZ1Rhc2tzKCkpfSxmKSksdGhpcy5fY2FsbGJhY2tzLnB1c2goe2RvbmVDYjphLHRpbWVvdXRJZDpoLHVwZGF0ZUNiOmR9KX13aGVuU3RhYmxlKGEs'@;
put 'ZixkKXtpZihkJiYhdGhpcy50YXNrVHJhY2tpbmdab25lKXRocm93IG5ldyBFcnJvcignVGFzayB0cmFja2luZyB6b25lIGlzIHJlcXVpcmVkIHdoZW4gcGFzc2luZyBhbiB1cGRhdGUgY2FsbGJhY2sgdG8gd2hlblN0YWJsZSgpLiBJcyAiem9uZS5qcy9wbHVnaW5zL3Rhc2stdHJhY2tpbmci'@;
put 'IGxvYWRlZD8nKTt0aGlzLmFkZENhbGxiYWNrKGEsZixkKSx0aGlzLl9ydW5DYWxsYmFja3NJZlJlYWR5KCl9Z2V0UGVuZGluZ1JlcXVlc3RDb3VudCgpe3JldHVybiB0aGlzLl9wZW5kaW5nQ291bnR9cmVnaXN0ZXJBcHBsaWNhdGlvbihhKXt0aGlzLnJlZ2lzdHJ5LnJlZ2lzdGVyQXBwbGlj'@;
put 'YXRpb24oYSx0aGlzKX11bnJlZ2lzdGVyQXBwbGljYXRpb24oYSl7dGhpcy5yZWdpc3RyeS51bnJlZ2lzdGVyQXBwbGljYXRpb24oYSl9ZmluZFByb3ZpZGVycyhhLGYsZCl7cmV0dXJuW119fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHNyKFVvKSxz'@;
put 'cihWQiksc3IoQU8pKX0sbC5cdTAyNzVwcm92PWhyKHt0b2tlbjpsLGZhY3Rvcnk6bC5cdTAyNzVmYWN9KSxsfSkoKSxWQj0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKCl7dGhpcy5fYXBwbGljYXRpb25zPW5ldyBNYXB9cmVnaXN0ZXJBcHBsaWNhdGlvbihhLGYpe3RoaXMuX2FwcGxpY2F0'@;
put 'aW9ucy5zZXQoYSxmKX11bnJlZ2lzdGVyQXBwbGljYXRpb24oYSl7dGhpcy5fYXBwbGljYXRpb25zLmRlbGV0ZShhKX11bnJlZ2lzdGVyQWxsQXBwbGljYXRpb25zKCl7dGhpcy5fYXBwbGljYXRpb25zLmNsZWFyKCl9Z2V0VGVzdGFiaWxpdHkoYSl7cmV0dXJuIHRoaXMuX2FwcGxpY2F0aW9u'@;
put 'cy5nZXQoYSl8fG51bGx9Z2V0QWxsVGVzdGFiaWxpdGllcygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuX2FwcGxpY2F0aW9ucy52YWx1ZXMoKSl9Z2V0QWxsUm9vdEVsZW1lbnRzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fYXBwbGljYXRpb25zLmtleXMoKSl9ZmluZFRlc3RhYmlsaXR5'@;
put 'SW5UcmVlKGEsZj0hMCl7cmV0dXJuIEJCPy5maW5kVGVzdGFiaWxpdHlJblRyZWUodGhpcyxhLGYpPz9udWxsfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVwcm92PWhyKHt0b2tlbjpsLGZhY3Rvcnk6bC5cdTAyNzVmYWMscHJvdmlk'@;
put 'ZWRJbjoicGxhdGZvcm0ifSksbH0pKCksSnA9bnVsbDtjb25zdCBEdGU9bmV3IE1pKCJBbGxvd011bHRpcGxlVG9rZW4iKSxqQj1uZXcgTWkoIlBsYXRmb3JtRGVzdHJveUxpc3RlbmVycyIpLHpCPW5ldyBNaSgiYXBwQm9vdHN0cmFwTGlzdGVuZXIiKTtjbGFzcyBSdGV7Y29uc3RydWN0b3Io'@;
put 'YyxhKXt0aGlzLm5hbWU9Yyx0aGlzLnRva2VuPWF9fWZ1bmN0aW9uIFB0ZShsLGMsYT1bXSl7Y29uc3QgZj1gUGxhdGZvcm06ICR7Y31gLGQ9bmV3IE1pKGYpO3JldHVybihoPVtdKT0+e2xldCBtPVVCKCk7aWYoIW18fG0uaW5qZWN0b3IuZ2V0KER0ZSwhMSkpe2NvbnN0IF89Wy4uLmEsLi4u'@;
put 'aCx7cHJvdmlkZTpkLHVzZVZhbHVlOiEwfV07bD9sKF8pOmZ1bmN0aW9uIHg3ZShsKXtpZihKcCYmIUpwLmdldChEdGUsITEpKXRocm93IG5ldyBJcig0MDAsITEpOyhmdW5jdGlvbiBJdGUoKXshZnVuY3Rpb24gS2IobCl7amM9bH0oKCk9Pnt0aHJvdyBuZXcgSXIoNjAwLCExKX0pfSkoKSxK'@;
put 'cD1sO2NvbnN0IGM9bC5nZXQoSHRlKTsoZnVuY3Rpb24gTHRlKGwpe2wuZ2V0KElBLG51bGwpPy5mb3JFYWNoKGE9PmEoKSl9KShsKX0oZnVuY3Rpb24gRnRlKGw9W10sYyl7cmV0dXJuIEFsLmNyZWF0ZSh7bmFtZTpjLHByb3ZpZGVyczpbe3Byb3ZpZGU6Sm0sdXNlVmFsdWU6InBsYXRmb3Jt'@;
put 'In0se3Byb3ZpZGU6akIsdXNlVmFsdWU6bmV3IFNldChbKCk9PkpwPW51bGxdKX0sLi4ubF19KX0oXyxmKSl9cmV0dXJuIGZ1bmN0aW9uIFQ3ZShsKXtjb25zdCBjPVVCKCk7aWYoIWMpdGhyb3cgbmV3IElyKDQwMSwhMSk7cmV0dXJuIGN9KCl9fWZ1bmN0aW9uIFVCKCl7cmV0dXJuIEpwPy5n'@;
put 'ZXQoSHRlKT8/bnVsbH1sZXQgSHRlPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSl7dGhpcy5faW5qZWN0b3I9YSx0aGlzLl9tb2R1bGVzPVtdLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnM9W10sdGhpcy5fZGVzdHJveWVkPSExfWJvb3RzdHJhcE1vZHVsZUZhY3RvcnkoYSxmKXtjb25zdCBk'@;
put 'PWZ1bmN0aW9uIE83ZShsPSJ6b25lLmpzIixjKXtyZXR1cm4ibm9vcCI9PT1sP25ldyBTN2U6InpvbmUuanMiPT09bD9uZXcgVW8oYyk6bH0oZj8ubmdab25lLGZ1bmN0aW9uIE50ZShsKXtyZXR1cm57ZW5hYmxlTG9uZ1N0YWNrVHJhY2U6ITEsc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURl'@;
put 'dGVjdGlvbjpsPy5ldmVudENvYWxlc2Npbmc/PyExLHNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uOmw/LnJ1bkNvYWxlc2Npbmc/PyExfX0oe2V2ZW50Q29hbGVzY2luZzpmPy5uZ1pvbmVFdmVudENvYWxlc2NpbmcscnVuQ29hbGVzY2luZzpmPy5uZ1pvbmVSdW5Db2FsZXNjaW5n'@;
put 'fSkpO3JldHVybiBkLnJ1bigoKT0+e2NvbnN0IGg9ZnVuY3Rpb24gdEMobCxjLGEpe3JldHVybiBuZXcgejIobCxjLGEpfShhLm1vZHVsZVR5cGUsdGhpcy5pbmplY3RvcixmdW5jdGlvbiBVdGUobCl7cmV0dXJuW3twcm92aWRlOlVvLHVzZUZhY3Rvcnk6bH0se3Byb3ZpZGU6cW0sbXVsdGk6'@;
put 'ITAsdXNlRmFjdG9yeTooKT0+e2NvbnN0IGM9SGkoSTdlLHtvcHRpb25hbDohMH0pO3JldHVybigpPT5jLmluaXRpYWxpemUoKX19LHtwcm92aWRlOnp0ZSx1c2VGYWN0b3J5OkQ3ZX0se3Byb3ZpZGU6QXRlLHVzZUZhY3Rvcnk6VHRlfV19KCgpPT5kKSksbT1oLmluamVjdG9yLmdldChSMixu'@;
put 'dWxsKTtyZXR1cm4gZC5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2NvbnN0IF89ZC5vbkVycm9yLnN1YnNjcmliZSh7bmV4dDpPPT57bS5oYW5kbGVFcnJvcihPKX19KTtoLm9uRGVzdHJveSgoKT0+e1RPKHRoaXMuX21vZHVsZXMsaCksXy51bnN1YnNjcmliZSgpfSl9KSxmdW5jdGlvbiBWdGUo'@;
put 'bCxjLGEpe3RyeXtjb25zdCBmPWEoKTtyZXR1cm4gcGcoZik/Zi5jYXRjaChkPT57dGhyb3cgYy5ydW5PdXRzaWRlQW5ndWxhcigoKT0+bC5oYW5kbGVFcnJvcihkKSksZH0pOmZ9Y2F0Y2goZil7dGhyb3cgYy5ydW5PdXRzaWRlQW5ndWxhcigoKT0+bC5oYW5kbGVFcnJvcihmKSksZn19KG0s'@;
put 'ZCwoKT0+e2NvbnN0IF89aC5pbmplY3Rvci5nZXQoUEIpO3JldHVybiBfLnJ1bkluaXRpYWxpemVycygpLF8uZG9uZVByb21pc2UudGhlbigoKT0+KGZ1bmN0aW9uIGdlKGwpe3ByKGwsIkV4cGVjdGVkIGxvY2FsZUlkIHRvIGJlIGRlZmluZWQiKSwic3RyaW5nIj09dHlwZW9mIGwmJihvZT1s'@;
put 'LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXy9nLCItIikpfShoLmluamVjdG9yLmdldChwZCxxcCl8fHFwKSx0aGlzLl9tb2R1bGVEb0Jvb3RzdHJhcChoKSxoKSl9KX0pfWJvb3RzdHJhcE1vZHVsZShhLGY9W10pe2NvbnN0IGQ9QnRlKHt9LGYpO3JldHVybiBmdW5jdGlvbiBrN2UobCxjLGEp'@;
put 'e2NvbnN0IGY9bmV3IGhkKGEpO3JldHVybiBQcm9taXNlLnJlc29sdmUoZil9KDAsMCxhKS50aGVuKGg9PnRoaXMuYm9vdHN0cmFwTW9kdWxlRmFjdG9yeShoLGQpKX1fbW9kdWxlRG9Cb290c3RyYXAoYSl7Y29uc3QgZj1hLmluamVjdG9yLmdldChDZyk7aWYoYS5fYm9vdHN0cmFwQ29tcG9u'@;
put 'ZW50cy5sZW5ndGg+MClhLl9ib290c3RyYXBDb21wb25lbnRzLmZvckVhY2goZD0+Zi5ib290c3RyYXAoZCkpO2Vsc2V7aWYoIWEuaW5zdGFuY2UubmdEb0Jvb3RzdHJhcCl0aHJvdyBuZXcgSXIoLTQwMywhMSk7YS5pbnN0YW5jZS5uZ0RvQm9vdHN0cmFwKGYpfXRoaXMuX21vZHVsZXMucHVz'@;
put 'aChhKX1vbkRlc3Ryb3koYSl7dGhpcy5fZGVzdHJveUxpc3RlbmVycy5wdXNoKGEpfWdldCBpbmplY3Rvcigpe3JldHVybiB0aGlzLl9pbmplY3Rvcn1kZXN0cm95KCl7aWYodGhpcy5fZGVzdHJveWVkKXRocm93IG5ldyBJcig0MDQsITEpO3RoaXMuX21vZHVsZXMuc2xpY2UoKS5mb3JFYWNo'@;
put 'KGY9PmYuZGVzdHJveSgpKSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzLmZvckVhY2goZj0+ZigpKTtjb25zdCBhPXRoaXMuX2luamVjdG9yLmdldChqQixudWxsKTthJiYoYS5mb3JFYWNoKGY9PmYoKSksYS5jbGVhcigpKSx0aGlzLl9kZXN0cm95ZWQ9ITB9Z2V0IGRlc3Ryb3llZCgpe3JldHVy'@;
put 'biB0aGlzLl9kZXN0cm95ZWR9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHNyKEFsKSl9LGwuXHUwMjc1cHJvdj1ocih7dG9rZW46bCxmYWN0b3J5OmwuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InBsYXRmb3JtIn0pLGx9KSgpO2Z1bmN0aW9uIEJ0ZShs'@;
put 'LGMpe3JldHVybiBBcnJheS5pc0FycmF5KGMpP2MucmVkdWNlKEJ0ZSxsKTp7Li4ubCwuLi5jfX1sZXQgQ2c9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3Rvcigpe3RoaXMuX2Jvb3RzdHJhcExpc3RlbmVycz1bXSx0aGlzLl9ydW5uaW5nVGljaz0hMSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5f'@;
put 'ZGVzdHJveUxpc3RlbmVycz1bXSx0aGlzLl92aWV3cz1bXSx0aGlzLmludGVybmFsRXJyb3JIYW5kbGVyPUhpKHp0ZSksdGhpcy56b25lSXNTdGFibGU9SGkoQXRlKSx0aGlzLmNvbXBvbmVudFR5cGVzPVtdLHRoaXMuY29tcG9uZW50cz1bXSx0aGlzLmlzU3RhYmxlPUhpKHhPKS5oYXNQZW5k'@;
put 'aW5nVGFza3MucGlwZShrbChhPT5hP0dpKCExKTp0aGlzLnpvbmVJc1N0YWJsZSksZnVuY3Rpb24gbzIobCxjPUZlKXtyZXR1cm4gbD1sPz9QYyxudCgoYSxmKT0+e2xldCBkLGg9ITA7YS5zdWJzY3JpYmUocWUoZixtPT57Y29uc3QgXz1jKG0pOyhofHwhbChkLF8pKSYmKGg9ITEsZD1fLGYu'@;
put 'bmV4dChtKSl9KSl9KX0oKSwkbCgpKSx0aGlzLl9pbmplY3Rvcj1IaSh1MSl9Z2V0IGRlc3Ryb3llZCgpe3JldHVybiB0aGlzLl9kZXN0cm95ZWR9Z2V0IGluamVjdG9yKCl7cmV0dXJuIHRoaXMuX2luamVjdG9yfWJvb3RzdHJhcChhLGYpe2NvbnN0IGQ9YSBpbnN0YW5jZW9mIGpBO2lmKCF0'@;
put 'aGlzLl9pbmplY3Rvci5nZXQoUEIpLmRvbmUpdGhyb3chZCYmZnVuY3Rpb24gS2YobCl7Y29uc3QgYz1uYShsKXx8cWwobCl8fHpzKGwpO3JldHVybiBudWxsIT09YyYmYy5zdGFuZGFsb25lfShhKSxuZXcgSXIoNDA1LCExKTtsZXQgbTttPWQ/YTp0aGlzLl9pbmplY3Rvci5nZXQoYzEpLnJl'@;
put 'c29sdmVDb21wb25lbnRGYWN0b3J5KGEpLHRoaXMuY29tcG9uZW50VHlwZXMucHVzaChtLmNvbXBvbmVudFR5cGUpO2NvbnN0IF89ZnVuY3Rpb24gRTdlKGwpe3JldHVybiBsLmlzQm91bmRUb01vZHVsZX0obSk/dm9pZCAwOnRoaXMuX2luamVjdG9yLmdldChYcyksWD1tLmNyZWF0ZShBbC5O'@;
put 'VUxMLFtdLGZ8fG0uc2VsZWN0b3IsXyksYWU9WC5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LHBlPVguaW5qZWN0b3IuZ2V0KE90ZSxudWxsKTtyZXR1cm4gcGU/LnJlZ2lzdGVyQXBwbGljYXRpb24oYWUpLFgub25EZXN0cm95KCgpPT57dGhpcy5kZXRhY2hWaWV3KFguaG9zdFZpZXcpLFRPKHRo'@;
put 'aXMuY29tcG9uZW50cyxYKSxwZT8udW5yZWdpc3RlckFwcGxpY2F0aW9uKGFlKX0pLHRoaXMuX2xvYWRDb21wb25lbnQoWCksWH10aWNrKCl7aWYodGhpcy5fcnVubmluZ1RpY2spdGhyb3cgbmV3IElyKDEwMSwhMSk7dHJ5e3RoaXMuX3J1bm5pbmdUaWNrPSEwO2ZvcihsZXQgYSBvZiB0aGlz'@;
put 'Ll92aWV3cylhLmRldGVjdENoYW5nZXMoKX1jYXRjaChhKXt0aGlzLmludGVybmFsRXJyb3JIYW5kbGVyKGEpfWZpbmFsbHl7dGhpcy5fcnVubmluZ1RpY2s9ITF9fWF0dGFjaFZpZXcoYSl7Y29uc3QgZj1hO3RoaXMuX3ZpZXdzLnB1c2goZiksZi5hdHRhY2hUb0FwcFJlZih0aGlzKX1kZXRh'@;
put 'Y2hWaWV3KGEpe2NvbnN0IGY9YTtUTyh0aGlzLl92aWV3cyxmKSxmLmRldGFjaEZyb21BcHBSZWYoKX1fbG9hZENvbXBvbmVudChhKXt0aGlzLmF0dGFjaFZpZXcoYS5ob3N0VmlldyksdGhpcy50aWNrKCksdGhpcy5jb21wb25lbnRzLnB1c2goYSk7Y29uc3QgZj10aGlzLl9pbmplY3Rvci5n'@;
put 'ZXQoekIsW10pO2YucHVzaCguLi50aGlzLl9ib290c3RyYXBMaXN0ZW5lcnMpLGYuZm9yRWFjaChkPT5kKGEpKX1uZ09uRGVzdHJveSgpe2lmKCF0aGlzLl9kZXN0cm95ZWQpdHJ5e3RoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMuZm9yRWFjaChhPT5hKCkpLHRoaXMuX3ZpZXdzLnNsaWNlKCkuZm9y'@;
put 'RWFjaChhPT5hLmRlc3Ryb3koKSl9ZmluYWxseXt0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5fdmlld3M9W10sdGhpcy5fYm9vdHN0cmFwTGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnM9W119fW9uRGVzdHJveShhKXtyZXR1cm4gdGhpcy5fZGVzdHJveUxpc3RlbmVycy5wdXNo'@;
put 'KGEpLCgpPT5UTyh0aGlzLl9kZXN0cm95TGlzdGVuZXJzLGEpfWRlc3Ryb3koKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IElyKDQwNiwhMSk7Y29uc3QgYT10aGlzLl9pbmplY3RvcjthLmRlc3Ryb3kmJiFhLmRlc3Ryb3llZCYmYS5kZXN0cm95KCl9Z2V0IHZpZXdDb3VudCgpe3Jl'@;
put 'dHVybiB0aGlzLl92aWV3cy5sZW5ndGh9d2FybklmRGVzdHJveWVkKCl7fX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVwcm92PWhyKHt0b2tlbjpsLGZhY3Rvcnk6bC5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxsfSkoKTtm'@;
put 'dW5jdGlvbiBUTyhsLGMpe2NvbnN0IGE9bC5pbmRleE9mKGMpO2E+LTEmJmwuc3BsaWNlKGEsMSl9Y29uc3QgenRlPW5ldyBNaSgiIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+SGkoUjIpLmhhbmRsZUVycm9yLmJpbmQodm9pZCAwKX0pO2Z1bmN0aW9uIEQ3ZSgpe2NvbnN0IGw9'@;
put 'SGkoVW8pLGM9SGkoUjIpO3JldHVybiBhPT5sLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5jLmhhbmRsZUVycm9yKGEpKX1sZXQgSTdlPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoKXt0aGlzLnpvbmU9SGkoVW8pLHRoaXMuYXBwbGljYXRpb25SZWY9SGkoQ2cpfWluaXRpYWxpemUoKXt0aGlz'@;
put 'Ll9vbk1pY3JvdGFza0VtcHR5U3Vic2NyaXB0aW9ufHwodGhpcy5fb25NaWNyb3Rhc2tFbXB0eVN1YnNjcmlwdGlvbj10aGlzLnpvbmUub25NaWNyb3Rhc2tFbXB0eS5zdWJzY3JpYmUoe25leHQ6KCk9Pnt0aGlzLnpvbmUucnVuKCgpPT57dGhpcy5hcHBsaWNhdGlvblJlZi50aWNrKCl9KX19'@;
put 'KSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9vbk1pY3JvdGFza0VtcHR5U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVwcm92PWhyKHt0b2tlbjpsLGZhY3Rvcnk6bC5cdTAyNzVmYWMscHJv'@;
put 'dmlkZWRJbjoicm9vdCJ9KSxsfSkoKTtsZXQgVWw9KCgpPT57Y2xhc3MgbHt9cmV0dXJuIGwuX19OR19FTEVNRU5UX0lEX189TDdlLGx9KSgpO2Z1bmN0aW9uIEw3ZShsKXtyZXR1cm4gZnVuY3Rpb24gUDdlKGwsYyxhKXtpZihuZihsKSYmIWEpe2NvbnN0IGY9YnQobC5pbmRleCxjKTtyZXR1'@;
put 'cm4gbmV3IHNnKGYsZil9cmV0dXJuIDQ3JmwudHlwZT9uZXcgc2coY1tKbF0sYyk6bnVsbH0oRHUoKSxRcigpLDE2PT0oMTYmbCkpfWNsYXNzIEd0ZXtjb25zdHJ1Y3Rvcigpe31zdXBwb3J0cyhjKXtyZXR1cm4gaXYoYyl9Y3JlYXRlKGMpe3JldHVybiBuZXcgajdlKGMpfX1jb25zdCBCN2U9'@;
put 'KGwsYyk9PmM7Y2xhc3Mgajdle2NvbnN0cnVjdG9yKGMpe3RoaXMubGVuZ3RoPTAsdGhpcy5fbGlua2VkUmVjb3Jkcz1udWxsLHRoaXMuX3VubGlua2VkUmVjb3Jkcz1udWxsLHRoaXMuX3ByZXZpb3VzSXRIZWFkPW51bGwsdGhpcy5faXRIZWFkPW51bGwsdGhpcy5faXRUYWlsPW51bGwsdGhp'@;
put 'cy5fYWRkaXRpb25zSGVhZD1udWxsLHRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbCx0aGlzLl9tb3Zlc0hlYWQ9bnVsbCx0aGlzLl9tb3Zlc1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9bnVsbCx0aGlzLl9yZW1vdmFsc1RhaWw9bnVsbCx0aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkPW51'@;
put 'bGwsdGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD1udWxsLHRoaXMuX3RyYWNrQnlGbj1jfHxCN2V9Zm9yRWFjaEl0ZW0oYyl7bGV0IGE7Zm9yKGE9dGhpcy5faXRIZWFkO251bGwhPT1hO2E9YS5fbmV4dCljKGEpfWZvckVhY2hPcGVyYXRpb24oYyl7bGV0IGE9dGhpcy5faXRIZWFkLGY9dGhp'@;
put 'cy5fcmVtb3ZhbHNIZWFkLGQ9MCxoPW51bGw7Zm9yKDthfHxmOyl7Y29uc3QgbT0hZnx8YSYmYS5jdXJyZW50SW5kZXg8S3RlKGYsZCxoKT9hOmYsXz1LdGUobSxkLGgpLE89bS5jdXJyZW50SW5kZXg7aWYobT09PWYpZC0tLGY9Zi5fbmV4dFJlbW92ZWQ7ZWxzZSBpZihhPWEuX25leHQsbnVs'@;
put 'bD09bS5wcmV2aW91c0luZGV4KWQrKztlbHNle2h8fChoPVtdKTtjb25zdCBYPV8tZCxhZT1PLWQ7aWYoWCE9YWUpe2ZvcihsZXQgYmU9MDtiZTxYO2JlKyspe2NvbnN0IHhlPWJlPGgubGVuZ3RoP2hbYmVdOmhbYmVdPTAsVmU9eGUrYmU7YWU8PVZlJiZWZTxYJiYoaFtiZV09eGUrMSl9aFtt'@;
put 'LnByZXZpb3VzSW5kZXhdPWFlLVh9fV8hPT1PJiZjKG0sXyxPKX19Zm9yRWFjaFByZXZpb3VzSXRlbShjKXtsZXQgYTtmb3IoYT10aGlzLl9wcmV2aW91c0l0SGVhZDtudWxsIT09YTthPWEuX25leHRQcmV2aW91cyljKGEpfWZvckVhY2hBZGRlZEl0ZW0oYyl7bGV0IGE7Zm9yKGE9dGhpcy5f'@;
put 'YWRkaXRpb25zSGVhZDtudWxsIT09YTthPWEuX25leHRBZGRlZCljKGEpfWZvckVhY2hNb3ZlZEl0ZW0oYyl7bGV0IGE7Zm9yKGE9dGhpcy5fbW92ZXNIZWFkO251bGwhPT1hO2E9YS5fbmV4dE1vdmVkKWMoYSl9Zm9yRWFjaFJlbW92ZWRJdGVtKGMpe2xldCBhO2ZvcihhPXRoaXMuX3JlbW92'@;
put 'YWxzSGVhZDtudWxsIT09YTthPWEuX25leHRSZW1vdmVkKWMoYSl9Zm9yRWFjaElkZW50aXR5Q2hhbmdlKGMpe2xldCBhO2ZvcihhPXRoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ7bnVsbCE9PWE7YT1hLl9uZXh0SWRlbnRpdHlDaGFuZ2UpYyhhKX1kaWZmKGMpe2lmKG51bGw9PWMmJihjPVtd'@;
put 'KSwhaXYoYykpdGhyb3cgbmV3IElyKDkwMCwhMSk7cmV0dXJuIHRoaXMuY2hlY2soYyk/dGhpczpudWxsfW9uRGVzdHJveSgpe31jaGVjayhjKXt0aGlzLl9yZXNldCgpO2xldCBkLGgsbSxhPXRoaXMuX2l0SGVhZCxmPSExO2lmKEFycmF5LmlzQXJyYXkoYykpe3RoaXMubGVuZ3RoPWMubGVu'@;
put 'Z3RoO2ZvcihsZXQgXz0wO188dGhpcy5sZW5ndGg7XysrKWg9Y1tfXSxtPXRoaXMuX3RyYWNrQnlGbihfLGgpLG51bGwhPT1hJiZPYmplY3QuaXMoYS50cmFja0J5SWQsbSk/KGYmJihhPXRoaXMuX3ZlcmlmeVJlaW5zZXJ0aW9uKGEsaCxtLF8pKSxPYmplY3QuaXMoYS5pdGVtLGgpfHx0aGlz'@;
put 'Ll9hZGRJZGVudGl0eUNoYW5nZShhLGgpKTooYT10aGlzLl9taXNtYXRjaChhLGgsbSxfKSxmPSEwKSxhPWEuX25leHR9ZWxzZSBkPTAsZnVuY3Rpb24geVYobCxjKXtpZihBcnJheS5pc0FycmF5KGwpKWZvcihsZXQgYT0wO2E8bC5sZW5ndGg7YSsrKWMobFthXSk7ZWxzZXtjb25zdCBhPWxb'@;
put 'U3ltYm9sLml0ZXJhdG9yXSgpO2xldCBmO2Zvcig7IShmPWEubmV4dCgpKS5kb25lOyljKGYudmFsdWUpfX0oYyxfPT57bT10aGlzLl90cmFja0J5Rm4oZCxfKSxudWxsIT09YSYmT2JqZWN0LmlzKGEudHJhY2tCeUlkLG0pPyhmJiYoYT10aGlzLl92ZXJpZnlSZWluc2VydGlvbihhLF8sbSxk'@;
put 'KSksT2JqZWN0LmlzKGEuaXRlbSxfKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UoYSxfKSk6KGE9dGhpcy5fbWlzbWF0Y2goYSxfLG0sZCksZj0hMCksYT1hLl9uZXh0LGQrK30pLHRoaXMubGVuZ3RoPWQ7cmV0dXJuIHRoaXMuX3RydW5jYXRlKGEpLHRoaXMuY29sbGVjdGlvbj1jLHRoaXMu'@;
put 'aXNEaXJ0eX1nZXQgaXNEaXJ0eSgpe3JldHVybiBudWxsIT09dGhpcy5fYWRkaXRpb25zSGVhZHx8bnVsbCE9PXRoaXMuX21vdmVzSGVhZHx8bnVsbCE9PXRoaXMuX3JlbW92YWxzSGVhZHx8bnVsbCE9PXRoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWR9X3Jlc2V0KCl7aWYodGhpcy5pc0RpcnR5'@;
put 'KXtsZXQgYztmb3IoYz10aGlzLl9wcmV2aW91c0l0SGVhZD10aGlzLl9pdEhlYWQ7bnVsbCE9PWM7Yz1jLl9uZXh0KWMuX25leHRQcmV2aW91cz1jLl9uZXh0O2ZvcihjPXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9PWM7Yz1jLl9uZXh0QWRkZWQpYy5wcmV2aW91c0luZGV4PWMuY3VycmVu'@;
put 'dEluZGV4O2Zvcih0aGlzLl9hZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbCxjPXRoaXMuX21vdmVzSGVhZDtudWxsIT09YztjPWMuX25leHRNb3ZlZCljLnByZXZpb3VzSW5kZXg9Yy5jdXJyZW50SW5kZXg7dGhpcy5fbW92ZXNIZWFkPXRoaXMuX21vdmVzVGFpbD1udWxs'@;
put 'LHRoaXMuX3JlbW92YWxzSGVhZD10aGlzLl9yZW1vdmFsc1RhaWw9bnVsbCx0aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkPXRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWw9bnVsbH19X21pc21hdGNoKGMsYSxmLGQpe2xldCBoO3JldHVybiBudWxsPT09Yz9oPXRoaXMuX2l0VGFpbDooaD1jLl9w'@;
put 'cmV2LHRoaXMuX3JlbW92ZShjKSksbnVsbCE9PShjPW51bGw9PT10aGlzLl91bmxpbmtlZFJlY29yZHM/bnVsbDp0aGlzLl91bmxpbmtlZFJlY29yZHMuZ2V0KGYsbnVsbCkpPyhPYmplY3QuaXMoYy5pdGVtLGEpfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZShjLGEpLHRoaXMuX3JlaW5zZXJ0'@;
put 'QWZ0ZXIoYyxoLGQpKTpudWxsIT09KGM9bnVsbD09PXRoaXMuX2xpbmtlZFJlY29yZHM/bnVsbDp0aGlzLl9saW5rZWRSZWNvcmRzLmdldChmLGQpKT8oT2JqZWN0LmlzKGMuaXRlbSxhKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UoYyxhKSx0aGlzLl9tb3ZlQWZ0ZXIoYyxoLGQpKTpjPXRo'@;
put 'aXMuX2FkZEFmdGVyKG5ldyB6N2UoYSxmKSxoLGQpLGN9X3ZlcmlmeVJlaW5zZXJ0aW9uKGMsYSxmLGQpe2xldCBoPW51bGw9PT10aGlzLl91bmxpbmtlZFJlY29yZHM/bnVsbDp0aGlzLl91bmxpbmtlZFJlY29yZHMuZ2V0KGYsbnVsbCk7cmV0dXJuIG51bGwhPT1oP2M9dGhpcy5fcmVpbnNl'@;
put 'cnRBZnRlcihoLGMuX3ByZXYsZCk6Yy5jdXJyZW50SW5kZXghPWQmJihjLmN1cnJlbnRJbmRleD1kLHRoaXMuX2FkZFRvTW92ZXMoYyxkKSksY31fdHJ1bmNhdGUoYyl7Zm9yKDtudWxsIT09Yzspe2NvbnN0IGE9Yy5fbmV4dDt0aGlzLl9hZGRUb1JlbW92YWxzKHRoaXMuX3VubGluayhjKSks'@;
put 'Yz1hfW51bGwhPT10aGlzLl91bmxpbmtlZFJlY29yZHMmJnRoaXMuX3VubGlua2VkUmVjb3Jkcy5jbGVhcigpLG51bGwhPT10aGlzLl9hZGRpdGlvbnNUYWlsJiYodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPW51bGwpLG51bGwhPT10aGlzLl9tb3Zlc1RhaWwmJih0aGlzLl9tb3Zl'@;
put 'c1RhaWwuX25leHRNb3ZlZD1udWxsKSxudWxsIT09dGhpcy5faXRUYWlsJiYodGhpcy5faXRUYWlsLl9uZXh0PW51bGwpLG51bGwhPT10aGlzLl9yZW1vdmFsc1RhaWwmJih0aGlzLl9yZW1vdmFsc1RhaWwuX25leHRSZW1vdmVkPW51bGwpLG51bGwhPT10aGlzLl9pZGVudGl0eUNoYW5nZXNU'@;
put 'YWlsJiYodGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbC5fbmV4dElkZW50aXR5Q2hhbmdlPW51bGwpfV9yZWluc2VydEFmdGVyKGMsYSxmKXtudWxsIT09dGhpcy5fdW5saW5rZWRSZWNvcmRzJiZ0aGlzLl91bmxpbmtlZFJlY29yZHMucmVtb3ZlKGMpO2NvbnN0IGQ9Yy5fcHJldlJlbW92ZWQs'@;
put 'aD1jLl9uZXh0UmVtb3ZlZDtyZXR1cm4gbnVsbD09PWQ/dGhpcy5fcmVtb3ZhbHNIZWFkPWg6ZC5fbmV4dFJlbW92ZWQ9aCxudWxsPT09aD90aGlzLl9yZW1vdmFsc1RhaWw9ZDpoLl9wcmV2UmVtb3ZlZD1kLHRoaXMuX2luc2VydEFmdGVyKGMsYSxmKSx0aGlzLl9hZGRUb01vdmVzKGMsZiks'@;
put 'Y31fbW92ZUFmdGVyKGMsYSxmKXtyZXR1cm4gdGhpcy5fdW5saW5rKGMpLHRoaXMuX2luc2VydEFmdGVyKGMsYSxmKSx0aGlzLl9hZGRUb01vdmVzKGMsZiksY31fYWRkQWZ0ZXIoYyxhLGYpe3JldHVybiB0aGlzLl9pbnNlcnRBZnRlcihjLGEsZiksdGhpcy5fYWRkaXRpb25zVGFpbD1udWxs'@;
put 'PT09dGhpcy5fYWRkaXRpb25zVGFpbD90aGlzLl9hZGRpdGlvbnNIZWFkPWM6dGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPWMsY31faW5zZXJ0QWZ0ZXIoYyxhLGYpe2NvbnN0IGQ9bnVsbD09PWE/dGhpcy5faXRIZWFkOmEuX25leHQ7cmV0dXJuIGMuX25leHQ9ZCxjLl9wcmV2PWEs'@;
put 'bnVsbD09PWQ/dGhpcy5faXRUYWlsPWM6ZC5fcHJldj1jLG51bGw9PT1hP3RoaXMuX2l0SGVhZD1jOmEuX25leHQ9YyxudWxsPT09dGhpcy5fbGlua2VkUmVjb3JkcyYmKHRoaXMuX2xpbmtlZFJlY29yZHM9bmV3ICR0ZSksdGhpcy5fbGlua2VkUmVjb3Jkcy5wdXQoYyksYy5jdXJyZW50SW5k'@;
put 'ZXg9ZixjfV9yZW1vdmUoYyl7cmV0dXJuIHRoaXMuX2FkZFRvUmVtb3ZhbHModGhpcy5fdW5saW5rKGMpKX1fdW5saW5rKGMpe251bGwhPT10aGlzLl9saW5rZWRSZWNvcmRzJiZ0aGlzLl9saW5rZWRSZWNvcmRzLnJlbW92ZShjKTtjb25zdCBhPWMuX3ByZXYsZj1jLl9uZXh0O3JldHVybiBu'@;
put 'dWxsPT09YT90aGlzLl9pdEhlYWQ9ZjphLl9uZXh0PWYsbnVsbD09PWY/dGhpcy5faXRUYWlsPWE6Zi5fcHJldj1hLGN9X2FkZFRvTW92ZXMoYyxhKXtyZXR1cm4gYy5wcmV2aW91c0luZGV4PT09YXx8KHRoaXMuX21vdmVzVGFpbD1udWxsPT09dGhpcy5fbW92ZXNUYWlsP3RoaXMuX21vdmVz'@;
put 'SGVhZD1jOnRoaXMuX21vdmVzVGFpbC5fbmV4dE1vdmVkPWMpLGN9X2FkZFRvUmVtb3ZhbHMoYyl7cmV0dXJuIG51bGw9PT10aGlzLl91bmxpbmtlZFJlY29yZHMmJih0aGlzLl91bmxpbmtlZFJlY29yZHM9bmV3ICR0ZSksdGhpcy5fdW5saW5rZWRSZWNvcmRzLnB1dChjKSxjLmN1cnJlbnRJ'@;
put 'bmRleD1udWxsLGMuX25leHRSZW1vdmVkPW51bGwsbnVsbD09PXRoaXMuX3JlbW92YWxzVGFpbD8odGhpcy5fcmVtb3ZhbHNUYWlsPXRoaXMuX3JlbW92YWxzSGVhZD1jLGMuX3ByZXZSZW1vdmVkPW51bGwpOihjLl9wcmV2UmVtb3ZlZD10aGlzLl9yZW1vdmFsc1RhaWwsdGhpcy5fcmVtb3Zh'@;
put 'bHNUYWlsPXRoaXMuX3JlbW92YWxzVGFpbC5fbmV4dFJlbW92ZWQ9YyksY31fYWRkSWRlbnRpdHlDaGFuZ2UoYyxhKXtyZXR1cm4gYy5pdGVtPWEsdGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD1udWxsPT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD90aGlzLl9pZGVudGl0eUNoYW5nZXNI'@;
put 'ZWFkPWM6dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbC5fbmV4dElkZW50aXR5Q2hhbmdlPWMsY319Y2xhc3Mgejdle2NvbnN0cnVjdG9yKGMsYSl7dGhpcy5pdGVtPWMsdGhpcy50cmFja0J5SWQ9YSx0aGlzLmN1cnJlbnRJbmRleD1udWxsLHRoaXMucHJldmlvdXNJbmRleD1udWxsLHRoaXMu'@;
put 'X25leHRQcmV2aW91cz1udWxsLHRoaXMuX3ByZXY9bnVsbCx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcHJldkR1cD1udWxsLHRoaXMuX25leHREdXA9bnVsbCx0aGlzLl9wcmV2UmVtb3ZlZD1udWxsLHRoaXMuX25leHRSZW1vdmVkPW51bGwsdGhpcy5fbmV4dEFkZGVkPW51bGwsdGhpcy5fbmV4'@;
put 'dE1vdmVkPW51bGwsdGhpcy5fbmV4dElkZW50aXR5Q2hhbmdlPW51bGx9fWNsYXNzIFU3ZXtjb25zdHJ1Y3Rvcigpe3RoaXMuX2hlYWQ9bnVsbCx0aGlzLl90YWlsPW51bGx9YWRkKGMpe251bGw9PT10aGlzLl9oZWFkPyh0aGlzLl9oZWFkPXRoaXMuX3RhaWw9YyxjLl9uZXh0RHVwPW51bGws'@;
put 'Yy5fcHJldkR1cD1udWxsKToodGhpcy5fdGFpbC5fbmV4dER1cD1jLGMuX3ByZXZEdXA9dGhpcy5fdGFpbCxjLl9uZXh0RHVwPW51bGwsdGhpcy5fdGFpbD1jKX1nZXQoYyxhKXtsZXQgZjtmb3IoZj10aGlzLl9oZWFkO251bGwhPT1mO2Y9Zi5fbmV4dER1cClpZigobnVsbD09PWF8fGE8PWYu'@;
put 'Y3VycmVudEluZGV4KSYmT2JqZWN0LmlzKGYudHJhY2tCeUlkLGMpKXJldHVybiBmO3JldHVybiBudWxsfXJlbW92ZShjKXtjb25zdCBhPWMuX3ByZXZEdXAsZj1jLl9uZXh0RHVwO3JldHVybiBudWxsPT09YT90aGlzLl9oZWFkPWY6YS5fbmV4dER1cD1mLG51bGw9PT1mP3RoaXMuX3RhaWw9'@;
put 'YTpmLl9wcmV2RHVwPWEsbnVsbD09PXRoaXMuX2hlYWR9fWNsYXNzICR0ZXtjb25zdHJ1Y3Rvcigpe3RoaXMubWFwPW5ldyBNYXB9cHV0KGMpe2NvbnN0IGE9Yy50cmFja0J5SWQ7bGV0IGY9dGhpcy5tYXAuZ2V0KGEpO2Z8fChmPW5ldyBVN2UsdGhpcy5tYXAuc2V0KGEsZikpLGYuYWRkKGMp'@;
put 'fWdldChjLGEpe2NvbnN0IGQ9dGhpcy5tYXAuZ2V0KGMpO3JldHVybiBkP2QuZ2V0KGMsYSk6bnVsbH1yZW1vdmUoYyl7Y29uc3QgYT1jLnRyYWNrQnlJZDtyZXR1cm4gdGhpcy5tYXAuZ2V0KGEpLnJlbW92ZShjKSYmdGhpcy5tYXAuZGVsZXRlKGEpLGN9Z2V0IGlzRW1wdHkoKXtyZXR1cm4g'@;
put 'MD09PXRoaXMubWFwLnNpemV9Y2xlYXIoKXt0aGlzLm1hcC5jbGVhcigpfX1mdW5jdGlvbiBLdGUobCxjLGEpe2NvbnN0IGY9bC5wcmV2aW91c0luZGV4O2lmKG51bGw9PT1mKXJldHVybiBmO2xldCBkPTA7cmV0dXJuIGEmJmY8YS5sZW5ndGgmJihkPWFbZl0pLGYrYytkfWNsYXNzIHF0ZXtj'@;
put 'b25zdHJ1Y3Rvcigpe31zdXBwb3J0cyhjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIE1hcHx8b3YoYyl9Y3JlYXRlKCl7cmV0dXJuIG5ldyBaN2V9fWNsYXNzIFo3ZXtjb25zdHJ1Y3Rvcigpe3RoaXMuX3JlY29yZHM9bmV3IE1hcCx0aGlzLl9tYXBIZWFkPW51bGwsdGhpcy5fYXBwZW5kQWZ0ZXI9'@;
put 'bnVsbCx0aGlzLl9wcmV2aW91c01hcEhlYWQ9bnVsbCx0aGlzLl9jaGFuZ2VzSGVhZD1udWxsLHRoaXMuX2NoYW5nZXNUYWlsPW51bGwsdGhpcy5fYWRkaXRpb25zSGVhZD1udWxsLHRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9bnVsbCx0aGlzLl9yZW1vdmFs'@;
put 'c1RhaWw9bnVsbH1nZXQgaXNEaXJ0eSgpe3JldHVybiBudWxsIT09dGhpcy5fYWRkaXRpb25zSGVhZHx8bnVsbCE9PXRoaXMuX2NoYW5nZXNIZWFkfHxudWxsIT09dGhpcy5fcmVtb3ZhbHNIZWFkfWZvckVhY2hJdGVtKGMpe2xldCBhO2ZvcihhPXRoaXMuX21hcEhlYWQ7bnVsbCE9PWE7YT1h'@;
put 'Ll9uZXh0KWMoYSl9Zm9yRWFjaFByZXZpb3VzSXRlbShjKXtsZXQgYTtmb3IoYT10aGlzLl9wcmV2aW91c01hcEhlYWQ7bnVsbCE9PWE7YT1hLl9uZXh0UHJldmlvdXMpYyhhKX1mb3JFYWNoQ2hhbmdlZEl0ZW0oYyl7bGV0IGE7Zm9yKGE9dGhpcy5fY2hhbmdlc0hlYWQ7bnVsbCE9PWE7YT1h'@;
put 'Ll9uZXh0Q2hhbmdlZCljKGEpfWZvckVhY2hBZGRlZEl0ZW0oYyl7bGV0IGE7Zm9yKGE9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT09YTthPWEuX25leHRBZGRlZCljKGEpfWZvckVhY2hSZW1vdmVkSXRlbShjKXtsZXQgYTtmb3IoYT10aGlzLl9yZW1vdmFsc0hlYWQ7bnVsbCE9PWE7YT1h'@;
put 'Ll9uZXh0UmVtb3ZlZCljKGEpfWRpZmYoYyl7aWYoYyl7aWYoIShjIGluc3RhbmNlb2YgTWFwfHxvdihjKSkpdGhyb3cgbmV3IElyKDkwMCwhMSl9ZWxzZSBjPW5ldyBNYXA7cmV0dXJuIHRoaXMuY2hlY2soYyk/dGhpczpudWxsfW9uRGVzdHJveSgpe31jaGVjayhjKXt0aGlzLl9yZXNldCgp'@;
put 'O2xldCBhPXRoaXMuX21hcEhlYWQ7aWYodGhpcy5fYXBwZW5kQWZ0ZXI9bnVsbCx0aGlzLl9mb3JFYWNoKGMsKGYsZCk9PntpZihhJiZhLmtleT09PWQpdGhpcy5fbWF5YmVBZGRUb0NoYW5nZXMoYSxmKSx0aGlzLl9hcHBlbmRBZnRlcj1hLGE9YS5fbmV4dDtlbHNle2NvbnN0IGg9dGhpcy5f'@;
put 'Z2V0T3JDcmVhdGVSZWNvcmRGb3JLZXkoZCxmKTthPXRoaXMuX2luc2VydEJlZm9yZU9yQXBwZW5kKGEsaCl9fSksYSl7YS5fcHJldiYmKGEuX3ByZXYuX25leHQ9bnVsbCksdGhpcy5fcmVtb3ZhbHNIZWFkPWE7Zm9yKGxldCBmPWE7bnVsbCE9PWY7Zj1mLl9uZXh0UmVtb3ZlZClmPT09dGhp'@;
put 'cy5fbWFwSGVhZCYmKHRoaXMuX21hcEhlYWQ9bnVsbCksdGhpcy5fcmVjb3Jkcy5kZWxldGUoZi5rZXkpLGYuX25leHRSZW1vdmVkPWYuX25leHQsZi5wcmV2aW91c1ZhbHVlPWYuY3VycmVudFZhbHVlLGYuY3VycmVudFZhbHVlPW51bGwsZi5fcHJldj1udWxsLGYuX25leHQ9bnVsbH1yZXR1'@;
put 'cm4gdGhpcy5fY2hhbmdlc1RhaWwmJih0aGlzLl9jaGFuZ2VzVGFpbC5fbmV4dENoYW5nZWQ9bnVsbCksdGhpcy5fYWRkaXRpb25zVGFpbCYmKHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD1udWxsKSx0aGlzLmlzRGlydHl9X2luc2VydEJlZm9yZU9yQXBwZW5kKGMsYSl7aWYoYyl7'@;
put 'Y29uc3QgZj1jLl9wcmV2O3JldHVybiBhLl9uZXh0PWMsYS5fcHJldj1mLGMuX3ByZXY9YSxmJiYoZi5fbmV4dD1hKSxjPT09dGhpcy5fbWFwSGVhZCYmKHRoaXMuX21hcEhlYWQ9YSksdGhpcy5fYXBwZW5kQWZ0ZXI9YyxjfXJldHVybiB0aGlzLl9hcHBlbmRBZnRlcj8odGhpcy5fYXBwZW5k'@;
put 'QWZ0ZXIuX25leHQ9YSxhLl9wcmV2PXRoaXMuX2FwcGVuZEFmdGVyKTp0aGlzLl9tYXBIZWFkPWEsdGhpcy5fYXBwZW5kQWZ0ZXI9YSxudWxsfV9nZXRPckNyZWF0ZVJlY29yZEZvcktleShjLGEpe2lmKHRoaXMuX3JlY29yZHMuaGFzKGMpKXtjb25zdCBkPXRoaXMuX3JlY29yZHMuZ2V0KGMp'@;
put 'O3RoaXMuX21heWJlQWRkVG9DaGFuZ2VzKGQsYSk7Y29uc3QgaD1kLl9wcmV2LG09ZC5fbmV4dDtyZXR1cm4gaCYmKGguX25leHQ9bSksbSYmKG0uX3ByZXY9aCksZC5fbmV4dD1udWxsLGQuX3ByZXY9bnVsbCxkfWNvbnN0IGY9bmV3IFk3ZShjKTtyZXR1cm4gdGhpcy5fcmVjb3Jkcy5zZXQo'@;
put 'YyxmKSxmLmN1cnJlbnRWYWx1ZT1hLHRoaXMuX2FkZFRvQWRkaXRpb25zKGYpLGZ9X3Jlc2V0KCl7aWYodGhpcy5pc0RpcnR5KXtsZXQgYztmb3IodGhpcy5fcHJldmlvdXNNYXBIZWFkPXRoaXMuX21hcEhlYWQsYz10aGlzLl9wcmV2aW91c01hcEhlYWQ7bnVsbCE9PWM7Yz1jLl9uZXh0KWMu'@;
put 'X25leHRQcmV2aW91cz1jLl9uZXh0O2ZvcihjPXRoaXMuX2NoYW5nZXNIZWFkO251bGwhPT1jO2M9Yy5fbmV4dENoYW5nZWQpYy5wcmV2aW91c1ZhbHVlPWMuY3VycmVudFZhbHVlO2ZvcihjPXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9YztjPWMuX25leHRBZGRlZCljLnByZXZpb3VzVmFs'@;
put 'dWU9Yy5jdXJyZW50VmFsdWU7dGhpcy5fY2hhbmdlc0hlYWQ9dGhpcy5fY2hhbmdlc1RhaWw9bnVsbCx0aGlzLl9hZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9bnVsbH19X21heWJlQWRkVG9DaGFuZ2VzKGMsYSl7T2JqZWN0LmlzKGEs'@;
put 'Yy5jdXJyZW50VmFsdWUpfHwoYy5wcmV2aW91c1ZhbHVlPWMuY3VycmVudFZhbHVlLGMuY3VycmVudFZhbHVlPWEsdGhpcy5fYWRkVG9DaGFuZ2VzKGMpKX1fYWRkVG9BZGRpdGlvbnMoYyl7bnVsbD09PXRoaXMuX2FkZGl0aW9uc0hlYWQ/dGhpcy5fYWRkaXRpb25zSGVhZD10aGlzLl9hZGRp'@;
put 'dGlvbnNUYWlsPWM6KHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD1jLHRoaXMuX2FkZGl0aW9uc1RhaWw9Yyl9X2FkZFRvQ2hhbmdlcyhjKXtudWxsPT09dGhpcy5fY2hhbmdlc0hlYWQ/dGhpcy5fY2hhbmdlc0hlYWQ9dGhpcy5fY2hhbmdlc1RhaWw9YzoodGhpcy5fY2hhbmdlc1Rh'@;
put 'aWwuX25leHRDaGFuZ2VkPWMsdGhpcy5fY2hhbmdlc1RhaWw9Yyl9X2ZvckVhY2goYyxhKXtjIGluc3RhbmNlb2YgTWFwP2MuZm9yRWFjaChhKTpPYmplY3Qua2V5cyhjKS5mb3JFYWNoKGY9PmEoY1tmXSxmKSl9fWNsYXNzIFk3ZXtjb25zdHJ1Y3RvcihjKXt0aGlzLmtleT1jLHRoaXMucHJl'@;
put 'dmlvdXNWYWx1ZT1udWxsLHRoaXMuY3VycmVudFZhbHVlPW51bGwsdGhpcy5fbmV4dFByZXZpb3VzPW51bGwsdGhpcy5fbmV4dD1udWxsLHRoaXMuX3ByZXY9bnVsbCx0aGlzLl9uZXh0QWRkZWQ9bnVsbCx0aGlzLl9uZXh0UmVtb3ZlZD1udWxsLHRoaXMuX25leHRDaGFuZ2VkPW51bGx9fWZ1'@;
put 'bmN0aW9uIFh0ZSgpe3JldHVybiBuZXcgYnYoW25ldyBHdGVdKX1sZXQgYnY9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhKXt0aGlzLmZhY3Rvcmllcz1hfXN0YXRpYyBjcmVhdGUoYSxmKXtpZihudWxsIT1mKXtjb25zdCBkPWYuZmFjdG9yaWVzLnNsaWNlKCk7YT1hLmNvbmNhdChkKX1y'@;
put 'ZXR1cm4gbmV3IGwoYSl9c3RhdGljIGV4dGVuZChhKXtyZXR1cm57cHJvdmlkZTpsLHVzZUZhY3Rvcnk6Zj0+bC5jcmVhdGUoYSxmfHxYdGUoKSksZGVwczpbW2wsbmV3IEUwLG5ldyBjaF1dfX1maW5kKGEpe2NvbnN0IGY9dGhpcy5mYWN0b3JpZXMuZmluZChkPT5kLnN1cHBvcnRzKGEpKTtp'@;
put 'ZihudWxsIT1mKXJldHVybiBmO3Rocm93IG5ldyBJcig5MDEsITEpfX1yZXR1cm4gbC5cdTAyNzVwcm92PWhyKHt0b2tlbjpsLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6WHRlfSksbH0pKCk7ZnVuY3Rpb24gSnRlKCl7cmV0dXJuIG5ldyBhQyhbbmV3IHF0ZV0pfWxldCBhQz0oKCk9Pntj'@;
put 'bGFzcyBse2NvbnN0cnVjdG9yKGEpe3RoaXMuZmFjdG9yaWVzPWF9c3RhdGljIGNyZWF0ZShhLGYpe2lmKGYpe2NvbnN0IGQ9Zi5mYWN0b3JpZXMuc2xpY2UoKTthPWEuY29uY2F0KGQpfXJldHVybiBuZXcgbChhKX1zdGF0aWMgZXh0ZW5kKGEpe3JldHVybntwcm92aWRlOmwsdXNlRmFjdG9y'@;
put 'eTpmPT5sLmNyZWF0ZShhLGZ8fEp0ZSgpKSxkZXBzOltbbCxuZXcgRTAsbmV3IGNoXV19fWZpbmQoYSl7Y29uc3QgZj10aGlzLmZhY3Rvcmllcy5maW5kKGQ9PmQuc3VwcG9ydHMoYSkpO2lmKGYpcmV0dXJuIGY7dGhyb3cgbmV3IElyKDkwMSwhMSl9fXJldHVybiBsLlx1MDI3NXByb3Y9aHIo'@;
put 'e3Rva2VuOmwscHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpKdGV9KSxsfSkoKTtjb25zdCAkN2U9UHRlKG51bGwsImNvcmUiLFtdKTtsZXQgSzdlPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSl7fX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShz'@;
put 'cihDZykpfSxsLlx1MDI3NW1vZD1EaSh7dHlwZTpsfSksbC5cdTAyNzVpbmo9eGkoe30pLGx9KSgpO2Z1bmN0aW9uIF92KGwpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGw/bDpudWxsIT1sJiYiZmFsc2UiIT09bH1sZXQgcUI9bnVsbDtmdW5jdGlvbiBRcCgpe3JldHVybiBxQn1jbGFzcyBs'@;
put 'OWV7fWNvbnN0IEZhPW5ldyBNaSgiRG9jdW1lbnRUb2tlbiIpO2xldCBYQj0oKCk9PntjbGFzcyBse2hpc3RvcnlHbyhhKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVw'@;
put 'cm92PWhyKHt0b2tlbjpsLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gSGkodTllKX0scHJvdmlkZWRJbjoicGxhdGZvcm0ifSksbH0pKCk7Y29uc3QgczllPW5ldyBNaSgiTG9jYXRpb24gSW5pdGlhbGl6ZWQiKTtsZXQgdTllPSgoKT0+e2NsYXNzIGwgZXh0ZW5kcyBYQntjb25zdHJ1Y3Rv'@;
put 'cigpe3N1cGVyKCksdGhpcy5fZG9jPUhpKEZhKSx0aGlzLl9sb2NhdGlvbj13aW5kb3cubG9jYXRpb24sdGhpcy5faGlzdG9yeT13aW5kb3cuaGlzdG9yeX1nZXRCYXNlSHJlZkZyb21ET00oKXtyZXR1cm4gUXAoKS5nZXRCYXNlSHJlZih0aGlzLl9kb2MpfW9uUG9wU3RhdGUoYSl7Y29uc3Qg'@;
put 'Zj1RcCgpLmdldEdsb2JhbEV2ZW50VGFyZ2V0KHRoaXMuX2RvYywid2luZG93Iik7cmV0dXJuIGYuYWRkRXZlbnRMaXN0ZW5lcigicG9wc3RhdGUiLGEsITEpLCgpPT5mLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvcHN0YXRlIixhKX1vbkhhc2hDaGFuZ2UoYSl7Y29uc3QgZj1RcCgpLmdldEds'@;
put 'b2JhbEV2ZW50VGFyZ2V0KHRoaXMuX2RvYywid2luZG93Iik7cmV0dXJuIGYuYWRkRXZlbnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIsYSwhMSksKCk9PmYucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIsYSl9Z2V0IGhyZWYoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24uaHJlZn1nZXQg'@;
put 'cHJvdG9jb2woKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24ucHJvdG9jb2x9Z2V0IGhvc3RuYW1lKCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9uLmhvc3RuYW1lfWdldCBwb3J0KCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9uLnBvcnR9Z2V0IHBhdGhuYW1lKCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9uLnBh'@;
put 'dGhuYW1lfWdldCBzZWFyY2goKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24uc2VhcmNofWdldCBoYXNoKCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9uLmhhc2h9c2V0IHBhdGhuYW1lKGEpe3RoaXMuX2xvY2F0aW9uLnBhdGhuYW1lPWF9cHVzaFN0YXRlKGEsZixkKXt0aGlzLl9oaXN0b3J5LnB1c2hT'@;
put 'dGF0ZShhLGYsZCl9cmVwbGFjZVN0YXRlKGEsZixkKXt0aGlzLl9oaXN0b3J5LnJlcGxhY2VTdGF0ZShhLGYsZCl9Zm9yd2FyZCgpe3RoaXMuX2hpc3RvcnkuZm9yd2FyZCgpfWJhY2soKXt0aGlzLl9oaXN0b3J5LmJhY2soKX1oaXN0b3J5R28oYT0wKXt0aGlzLl9oaXN0b3J5LmdvKGEpfWdl'@;
put 'dFN0YXRlKCl7cmV0dXJuIHRoaXMuX2hpc3Rvcnkuc3RhdGV9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmwsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgbH0scHJvdmlkZWRJbjoicGxhdGZvcm0i'@;
put 'fSksbH0pKCk7ZnVuY3Rpb24gSkIobCxjKXtpZigwPT1sLmxlbmd0aClyZXR1cm4gYztpZigwPT1jLmxlbmd0aClyZXR1cm4gbDtsZXQgYT0wO3JldHVybiBsLmVuZHNXaXRoKCIvIikmJmErKyxjLnN0YXJ0c1dpdGgoIi8iKSYmYSsrLDI9PWE/bCtjLnN1YnN0cmluZygxKToxPT1hP2wrYzps'@;
put 'KyIvIitjfWZ1bmN0aW9uIG9uZShsKXtjb25zdCBjPWwubWF0Y2goLyN8XD98JC8pLGE9YyYmYy5pbmRleHx8bC5sZW5ndGg7cmV0dXJuIGwuc2xpY2UoMCxhLSgiLyI9PT1sW2EtMV0/MTowKSkrbC5zbGljZShhKX1mdW5jdGlvbiBaMihsKXtyZXR1cm4gbCYmIj8iIT09bFswXT8iPyIrbDps'@;
put 'fWxldCBNZz0oKCk9PntjbGFzcyBse2hpc3RvcnlHbyhhKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVwcm92PWhyKHt0b2tlbjpsLGZhY3Rvcnk6ZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gSGkobG5lKX0scHJvdmlkZWRJbjoicm9vdCJ9KSxsfSkoKTtjb25zdCBhbmU9bmV3IE1pKCJhcHBCYXNlSHJlZiIpO2xldCBsbmU9KCgpPT57Y2xhc3MgbCBleHRlbmRzIE1ne2NvbnN0cnVjdG9yKGEsZil7c3VwZXIoKSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uPWEsdGhpcy5fcmVt'@;
put 'b3ZlTGlzdGVuZXJGbnM9W10sdGhpcy5fYmFzZUhyZWY9Zj8/dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5nZXRCYXNlSHJlZkZyb21ET00oKT8/SGkoRmEpLmxvY2F0aW9uPy5vcmlnaW4/PyIifW5nT25EZXN0cm95KCl7Zm9yKDt0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5sZW5ndGg7KXRoaXMu'@;
put 'X3JlbW92ZUxpc3RlbmVyRm5zLnBvcCgpKCl9b25Qb3BTdGF0ZShhKXt0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5wdXNoKHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ub25Qb3BTdGF0ZShhKSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uSGFzaENoYW5nZShhKSl9Z2V0QmFzZUhyZWYoKXtyZXR1'@;
put 'cm4gdGhpcy5fYmFzZUhyZWZ9cHJlcGFyZUV4dGVybmFsVXJsKGEpe3JldHVybiBKQih0aGlzLl9iYXNlSHJlZixhKX1wYXRoKGE9ITEpe2NvbnN0IGY9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wYXRobmFtZStaMih0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnNlYXJjaCksZD10aGlzLl9wbGF0'@;
put 'Zm9ybUxvY2F0aW9uLmhhc2g7cmV0dXJuIGQmJmE/YCR7Zn0ke2R9YDpmfXB1c2hTdGF0ZShhLGYsZCxoKXtjb25zdCBtPXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKGQrWjIoaCkpO3RoaXMuX3BsYXRmb3JtTG9jYXRpb24ucHVzaFN0YXRlKGEsZixtKX1yZXBsYWNlU3RhdGUoYSxmLGQsaCl7'@;
put 'Y29uc3QgbT10aGlzLnByZXBhcmVFeHRlcm5hbFVybChkK1oyKGgpKTt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnJlcGxhY2VTdGF0ZShhLGYsbSl9Zm9yd2FyZCgpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uZm9yd2FyZCgpfWJhY2soKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmJhY2soKX1n'@;
put 'ZXRTdGF0ZSgpe3JldHVybiB0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmdldFN0YXRlKCl9aGlzdG9yeUdvKGE9MCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oaXN0b3J5R28/LihhKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkoc3IoWEIpLHNyKGFu'@;
put 'ZSw4KSl9LGwuXHUwMjc1cHJvdj1ocih7dG9rZW46bCxmYWN0b3J5OmwuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbH0pKCksYzllPSgoKT0+e2NsYXNzIGwgZXh0ZW5kcyBNZ3tjb25zdHJ1Y3RvcihhLGYpe3N1cGVyKCksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbj1hLHRoaXMuX2Jh'@;
put 'c2VIcmVmPSIiLHRoaXMuX3JlbW92ZUxpc3RlbmVyRm5zPVtdLG51bGwhPWYmJih0aGlzLl9iYXNlSHJlZj1mKX1uZ09uRGVzdHJveSgpe2Zvcig7dGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMubGVuZ3RoOyl0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5wb3AoKSgpfW9uUG9wU3RhdGUoYSl7dGhp'@;
put 'cy5fcmVtb3ZlTGlzdGVuZXJGbnMucHVzaCh0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uUG9wU3RhdGUoYSksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vbkhhc2hDaGFuZ2UoYSkpfWdldEJhc2VIcmVmKCl7cmV0dXJuIHRoaXMuX2Jhc2VIcmVmfXBhdGgoYT0hMSl7bGV0IGY9dGhpcy5fcGxh'@;
put 'dGZvcm1Mb2NhdGlvbi5oYXNoO3JldHVybiBudWxsPT1mJiYoZj0iIyIpLGYubGVuZ3RoPjA/Zi5zdWJzdHJpbmcoMSk6Zn1wcmVwYXJlRXh0ZXJuYWxVcmwoYSl7Y29uc3QgZj1KQih0aGlzLl9iYXNlSHJlZixhKTtyZXR1cm4gZi5sZW5ndGg+MD8iIyIrZjpmfXB1c2hTdGF0ZShhLGYsZCxo'@;
put 'KXtsZXQgbT10aGlzLnByZXBhcmVFeHRlcm5hbFVybChkK1oyKGgpKTswPT1tLmxlbmd0aCYmKG09dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wYXRobmFtZSksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wdXNoU3RhdGUoYSxmLG0pfXJlcGxhY2VTdGF0ZShhLGYsZCxoKXtsZXQgbT10aGlzLnBy'@;
put 'ZXBhcmVFeHRlcm5hbFVybChkK1oyKGgpKTswPT1tLmxlbmd0aCYmKG09dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wYXRobmFtZSksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5yZXBsYWNlU3RhdGUoYSxmLG0pfWZvcndhcmQoKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmZvcndhcmQoKX1iYWNr'@;
put 'KCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5iYWNrKCl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5nZXRTdGF0ZSgpfWhpc3RvcnlHbyhhPTApe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uaGlzdG9yeUdvPy4oYSl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlv'@;
put 'bihhKXtyZXR1cm4gbmV3KGF8fGwpKHNyKFhCKSxzcihhbmUsOCkpfSxsLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmwsZmFjdG9yeTpsLlx1MDI3NWZhY30pLGx9KSgpLGdkPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSl7dGhpcy5fc3ViamVjdD1uZXcgeHIsdGhpcy5fdXJsQ2hhbmdlTGlz'@;
put 'dGVuZXJzPVtdLHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj1udWxsLHRoaXMuX2xvY2F0aW9uU3RyYXRlZ3k9YTtjb25zdCBmPXRoaXMuX2xvY2F0aW9uU3RyYXRlZ3kuZ2V0QmFzZUhyZWYoKTt0aGlzLl9iYXNlUGF0aD1mdW5jdGlvbiBoOWUobCl7aWYobmV3IFJlZ0V4cCgiXihodHRw'@;
put 'cz86KT8vLyIpLnRlc3QobCkpe2NvbnN0WyxhXT1sLnNwbGl0KC9cL1wvW15cL10rLyk7cmV0dXJuIGF9cmV0dXJuIGx9KG9uZShzbmUoZikpKSx0aGlzLl9sb2NhdGlvblN0cmF0ZWd5Lm9uUG9wU3RhdGUoZD0+e3RoaXMuX3N1YmplY3QuZW1pdCh7dXJsOnRoaXMucGF0aCghMCkscG9wOiEw'@;
put 'LHN0YXRlOmQuc3RhdGUsdHlwZTpkLnR5cGV9KX0pfW5nT25EZXN0cm95KCl7dGhpcy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpLHRoaXMuX3VybENoYW5nZUxpc3RlbmVycz1bXX1wYXRoKGE9ITEpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSh0aGlzLl9sb2NhdGlvblN0'@;
put 'cmF0ZWd5LnBhdGgoYSkpfWdldFN0YXRlKCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9uU3RyYXRlZ3kuZ2V0U3RhdGUoKX1pc0N1cnJlbnRQYXRoRXF1YWxUbyhhLGY9IiIpe3JldHVybiB0aGlzLnBhdGgoKT09dGhpcy5ub3JtYWxpemUoYStaMihmKSl9bm9ybWFsaXplKGEpe3JldHVybiBsLnN0'@;
put 'cmlwVHJhaWxpbmdTbGFzaChmdW5jdGlvbiBkOWUobCxjKXtpZighbHx8IWMuc3RhcnRzV2l0aChsKSlyZXR1cm4gYztjb25zdCBhPWMuc3Vic3RyaW5nKGwubGVuZ3RoKTtyZXR1cm4iIj09PWF8fFsiLyIsIjsiLCI/IiwiIyJdLmluY2x1ZGVzKGFbMF0pP2E6Y30odGhpcy5fYmFzZVBhdGgs'@;
put 'c25lKGEpKSl9cHJlcGFyZUV4dGVybmFsVXJsKGEpe3JldHVybiBhJiYiLyIhPT1hWzBdJiYoYT0iLyIrYSksdGhpcy5fbG9jYXRpb25TdHJhdGVneS5wcmVwYXJlRXh0ZXJuYWxVcmwoYSl9Z28oYSxmPSIiLGQ9bnVsbCl7dGhpcy5fbG9jYXRpb25TdHJhdGVneS5wdXNoU3RhdGUoZCwiIixh'@;
put 'LGYpLHRoaXMuX25vdGlmeVVybENoYW5nZUxpc3RlbmVycyh0aGlzLnByZXBhcmVFeHRlcm5hbFVybChhK1oyKGYpKSxkKX1yZXBsYWNlU3RhdGUoYSxmPSIiLGQ9bnVsbCl7dGhpcy5fbG9jYXRpb25TdHJhdGVneS5yZXBsYWNlU3RhdGUoZCwiIixhLGYpLHRoaXMuX25vdGlmeVVybENoYW5n'@;
put 'ZUxpc3RlbmVycyh0aGlzLnByZXBhcmVFeHRlcm5hbFVybChhK1oyKGYpKSxkKX1mb3J3YXJkKCl7dGhpcy5fbG9jYXRpb25TdHJhdGVneS5mb3J3YXJkKCl9YmFjaygpe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3kuYmFjaygpfWhpc3RvcnlHbyhhPTApe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3ku'@;
put 'aGlzdG9yeUdvPy4oYSl9b25VcmxDaGFuZ2UoYSl7cmV0dXJuIHRoaXMuX3VybENoYW5nZUxpc3RlbmVycy5wdXNoKGEpLHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbnx8KHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj10aGlzLnN1YnNjcmliZShmPT57dGhpcy5fbm90aWZ5VXJsQ2hh'@;
put 'bmdlTGlzdGVuZXJzKGYudXJsLGYuc3RhdGUpfSkpLCgpPT57Y29uc3QgZj10aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnMuaW5kZXhPZihhKTt0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnMuc3BsaWNlKGYsMSksMD09PXRoaXMuX3VybENoYW5nZUxpc3RlbmVycy5sZW5ndGgmJih0aGlzLl91cmxD'@;
put 'aGFuZ2VTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCksdGhpcy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9uPW51bGwpfX1fbm90aWZ5VXJsQ2hhbmdlTGlzdGVuZXJzKGE9IiIsZil7dGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLmZvckVhY2goZD0+ZChhLGYpKX1zdWJzY3JpYmUoYSxmLGQpe3Jl'@;
put 'dHVybiB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZSh7bmV4dDphLGVycm9yOmYsY29tcGxldGU6ZH0pfX1yZXR1cm4gbC5ub3JtYWxpemVRdWVyeVBhcmFtcz1aMixsLmpvaW5XaXRoU2xhc2g9SkIsbC5zdHJpcFRyYWlsaW5nU2xhc2g9b25lLGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy'@;
put 'biBuZXcoYXx8bCkoc3IoTWcpKX0sbC5cdTAyNzVwcm92PWhyKHt0b2tlbjpsLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gZjllKCl7cmV0dXJuIG5ldyBnZChzcihNZykpfSgpfSxwcm92aWRlZEluOiJyb290In0pLGx9KSgpO2Z1bmN0aW9uIHNuZShsKXtyZXR1cm4gbC5y'@;
put 'ZXBsYWNlKC9cL2luZGV4Lmh0bWwkLywiIil9dmFyIEx1PWZ1bmN0aW9uKGwpe3JldHVybiBsW2wuRm9ybWF0PTBdPSJGb3JtYXQiLGxbbC5TdGFuZGFsb25lPTFdPSJTdGFuZGFsb25lIixsfShMdXx8e30pLGlsPWZ1bmN0aW9uKGwpe3JldHVybiBsW2wuTmFycm93PTBdPSJOYXJyb3ciLGxb'@;
put 'bC5BYmJyZXZpYXRlZD0xXT0iQWJicmV2aWF0ZWQiLGxbbC5XaWRlPTJdPSJXaWRlIixsW2wuU2hvcnQ9M109IlNob3J0IixsfShpbHx8e30pLEQwPWZ1bmN0aW9uKGwpe3JldHVybiBsW2wuU2hvcnQ9MF09IlNob3J0IixsW2wuTWVkaXVtPTFdPSJNZWRpdW0iLGxbbC5Mb25nPTJdPSJMb25n'@;
put 'IixsW2wuRnVsbD0zXT0iRnVsbCIsbH0oRDB8fHt9KTtmdW5jdGlvbiBRQihsLGMsYSl7Y29uc3QgZj1LcyhsKSxoPU1mKFtmW2VhLkRheXNGb3JtYXRdLGZbZWEuRGF5c1N0YW5kYWxvbmVdXSxjKTtyZXR1cm4gTWYoaCxhKX1mdW5jdGlvbiBlaihsLGMsYSl7Y29uc3QgZj1LcyhsKSxoPU1m'@;
put 'KFtmW2VhLk1vbnRoc0Zvcm1hdF0sZltlYS5Nb250aHNTdGFuZGFsb25lXV0sYyk7cmV0dXJuIE1mKGgsYSl9ZnVuY3Rpb24gTWYobCxjKXtmb3IobGV0IGE9YzthPi0xO2EtLSlpZih0eXBlb2YgbFthXTwidSIpcmV0dXJuIGxbYV07dGhyb3cgbmV3IEVycm9yKCJMb2NhbGUgZGF0YSBBUEk6'@;
put 'IGxvY2FsZSBkYXRhIHVuZGVmaW5lZCIpfWZ1bmN0aW9uIHZuZShsLGMpe2M9ZW5jb2RlVVJJQ29tcG9uZW50KGMpO2Zvcihjb25zdCBhIG9mIGwuc3BsaXQoIjsiKSl7Y29uc3QgZj1hLmluZGV4T2YoIj0iKSxbZCxoXT0tMT09Zj9bYSwiIl06W2Euc2xpY2UoMCxmKSxhLnNsaWNlKGYrMSld'@;
put 'O2lmKGQudHJpbSgpPT09YylyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGgpfXJldHVybiBudWxsfWNvbnN0IGNqPS9ccysvLHluZT1bXTtsZXQgeXU9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhLGYsZCxoKXt0aGlzLl9pdGVyYWJsZURpZmZlcnM9YSx0aGlzLl9rZXlWYWx1ZURpZmZl'@;
put 'cnM9Zix0aGlzLl9uZ0VsPWQsdGhpcy5fcmVuZGVyZXI9aCx0aGlzLmluaXRpYWxDbGFzc2VzPXluZSx0aGlzLnN0YXRlTWFwPW5ldyBNYXB9c2V0IGtsYXNzKGEpe3RoaXMuaW5pdGlhbENsYXNzZXM9bnVsbCE9YT9hLnRyaW0oKS5zcGxpdChjaik6eW5lfXNldCBuZ0NsYXNzKGEpe3RoaXMu'@;
put 'cmF3Q2xhc3M9InN0cmluZyI9PXR5cGVvZiBhP2EudHJpbSgpLnNwbGl0KGNqKTphfW5nRG9DaGVjaygpe2Zvcihjb25zdCBmIG9mIHRoaXMuaW5pdGlhbENsYXNzZXMpdGhpcy5fdXBkYXRlU3RhdGUoZiwhMCk7Y29uc3QgYT10aGlzLnJhd0NsYXNzO2lmKEFycmF5LmlzQXJyYXkoYSl8fGEg'@;
put 'aW5zdGFuY2VvZiBTZXQpZm9yKGNvbnN0IGYgb2YgYSl0aGlzLl91cGRhdGVTdGF0ZShmLCEwKTtlbHNlIGlmKG51bGwhPWEpZm9yKGNvbnN0IGYgb2YgT2JqZWN0LmtleXMoYSkpdGhpcy5fdXBkYXRlU3RhdGUoZiwhIWFbZl0pO3RoaXMuX2FwcGx5U3RhdGVEaWZmKCl9X3VwZGF0ZVN0YXRl'@;
put 'KGEsZil7Y29uc3QgZD10aGlzLnN0YXRlTWFwLmdldChhKTt2b2lkIDAhPT1kPyhkLmVuYWJsZWQhPT1mJiYoZC5jaGFuZ2VkPSEwLGQuZW5hYmxlZD1mKSxkLnRvdWNoZWQ9ITApOnRoaXMuc3RhdGVNYXAuc2V0KGEse2VuYWJsZWQ6ZixjaGFuZ2VkOiEwLHRvdWNoZWQ6ITB9KX1fYXBwbHlT'@;
put 'dGF0ZURpZmYoKXtmb3IoY29uc3QgYSBvZiB0aGlzLnN0YXRlTWFwKXtjb25zdCBmPWFbMF0sZD1hWzFdO2QuY2hhbmdlZD8odGhpcy5fdG9nZ2xlQ2xhc3MoZixkLmVuYWJsZWQpLGQuY2hhbmdlZD0hMSk6ZC50b3VjaGVkfHwoZC5lbmFibGVkJiZ0aGlzLl90b2dnbGVDbGFzcyhmLCExKSx0'@;
put 'aGlzLnN0YXRlTWFwLmRlbGV0ZShmKSksZC50b3VjaGVkPSExfX1fdG9nZ2xlQ2xhc3MoYSxmKXsoYT1hLnRyaW0oKSkubGVuZ3RoPjAmJmEuc3BsaXQoY2opLmZvckVhY2goZD0+e2Y/dGhpcy5fcmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LGQpOnRoaXMuX3Jl'@;
put 'bmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuX25nRWwubmF0aXZlRWxlbWVudCxkKX0pfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChidikscnQoYUMpLHJ0KFZpKSxydChqbykpfSxsLlx1MDI3NWRpcj1Tcih7dHlwZTpsLHNlbGVjdG9yczpbWyIi'@;
put 'LCJuZ0NsYXNzIiwiIl1dLGlucHV0czp7a2xhc3M6WyJjbGFzcyIsImtsYXNzIl0sbmdDbGFzczoibmdDbGFzcyJ9LHN0YW5kYWxvbmU6ITB9KSxsfSkoKTtjbGFzcyBKOWV7Y29uc3RydWN0b3IoYyxhLGYsZCl7dGhpcy4kaW1wbGljaXQ9Yyx0aGlzLm5nRm9yT2Y9YSx0aGlzLmluZGV4PWYs'@;
put 'dGhpcy5jb3VudD1kfWdldCBmaXJzdCgpe3JldHVybiAwPT09dGhpcy5pbmRleH1nZXQgbGFzdCgpe3JldHVybiB0aGlzLmluZGV4PT09dGhpcy5jb3VudC0xfWdldCBldmVuKCl7cmV0dXJuIHRoaXMuaW5kZXglMj09MH1nZXQgb2RkKCl7cmV0dXJuIXRoaXMuZXZlbn19bGV0IFJhPSgoKT0+'@;
put 'e2NsYXNzIGx7c2V0IG5nRm9yT2YoYSl7dGhpcy5fbmdGb3JPZj1hLHRoaXMuX25nRm9yT2ZEaXJ0eT0hMH1zZXQgbmdGb3JUcmFja0J5KGEpe3RoaXMuX3RyYWNrQnlGbj1hfWdldCBuZ0ZvclRyYWNrQnkoKXtyZXR1cm4gdGhpcy5fdHJhY2tCeUZufWNvbnN0cnVjdG9yKGEsZixkKXt0aGlz'@;
put 'Ll92aWV3Q29udGFpbmVyPWEsdGhpcy5fdGVtcGxhdGU9Zix0aGlzLl9kaWZmZXJzPWQsdGhpcy5fbmdGb3JPZj1udWxsLHRoaXMuX25nRm9yT2ZEaXJ0eT0hMCx0aGlzLl9kaWZmZXI9bnVsbH1zZXQgbmdGb3JUZW1wbGF0ZShhKXthJiYodGhpcy5fdGVtcGxhdGU9YSl9bmdEb0NoZWNrKCl7'@;
put 'aWYodGhpcy5fbmdGb3JPZkRpcnR5KXt0aGlzLl9uZ0Zvck9mRGlydHk9ITE7Y29uc3QgYT10aGlzLl9uZ0Zvck9mOyF0aGlzLl9kaWZmZXImJmEmJih0aGlzLl9kaWZmZXI9dGhpcy5fZGlmZmVycy5maW5kKGEpLmNyZWF0ZSh0aGlzLm5nRm9yVHJhY2tCeSkpfWlmKHRoaXMuX2RpZmZlcil7'@;
put 'Y29uc3QgYT10aGlzLl9kaWZmZXIuZGlmZih0aGlzLl9uZ0Zvck9mKTthJiZ0aGlzLl9hcHBseUNoYW5nZXMoYSl9fV9hcHBseUNoYW5nZXMoYSl7Y29uc3QgZj10aGlzLl92aWV3Q29udGFpbmVyO2EuZm9yRWFjaE9wZXJhdGlvbigoZCxoLG0pPT57aWYobnVsbD09ZC5wcmV2aW91c0luZGV4'@;
put 'KWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX3RlbXBsYXRlLG5ldyBKOWUoZC5pdGVtLHRoaXMuX25nRm9yT2YsLTEsLTEpLG51bGw9PT1tP3ZvaWQgMDptKTtlbHNlIGlmKG51bGw9PW0pZi5yZW1vdmUobnVsbD09PWg/dm9pZCAwOmgpO2Vsc2UgaWYobnVsbCE9PWgpe2NvbnN0IF89Zi5n'@;
put 'ZXQoaCk7Zi5tb3ZlKF8sbSksX25lKF8sZCl9fSk7Zm9yKGxldCBkPTAsaD1mLmxlbmd0aDtkPGg7ZCsrKXtjb25zdCBfPWYuZ2V0KGQpLmNvbnRleHQ7Xy5pbmRleD1kLF8uY291bnQ9aCxfLm5nRm9yT2Y9dGhpcy5fbmdGb3JPZn1hLmZvckVhY2hJZGVudGl0eUNoYW5nZShkPT57X25lKGYu'@;
put 'Z2V0KGQuY3VycmVudEluZGV4KSxkKX0pfXN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKGEsZil7cmV0dXJuITB9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHJ0KGZhKSxydCh6bCkscnQoYnYpKX0sbC5cdTAyNzVkaXI9U3Ioe3R5cGU6bCxz'@;
put 'ZWxlY3RvcnM6W1siIiwibmdGb3IiLCIiLCJuZ0Zvck9mIiwiIl1dLGlucHV0czp7bmdGb3JPZjoibmdGb3JPZiIsbmdGb3JUcmFja0J5OiJuZ0ZvclRyYWNrQnkiLG5nRm9yVGVtcGxhdGU6Im5nRm9yVGVtcGxhdGUifSxzdGFuZGFsb25lOiEwfSksbH0pKCk7ZnVuY3Rpb24gX25lKGwsYyl7'@;
put 'bC5jb250ZXh0LiRpbXBsaWNpdD1jLml0ZW19bGV0ICRpPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmKXt0aGlzLl92aWV3Q29udGFpbmVyPWEsdGhpcy5fY29udGV4dD1uZXcgUTllLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZj1udWxsLHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZj1udWxsLHRo'@;
put 'aXMuX3RoZW5WaWV3UmVmPW51bGwsdGhpcy5fZWxzZVZpZXdSZWY9bnVsbCx0aGlzLl90aGVuVGVtcGxhdGVSZWY9Zn1zZXQgbmdJZihhKXt0aGlzLl9jb250ZXh0LiRpbXBsaWNpdD10aGlzLl9jb250ZXh0Lm5nSWY9YSx0aGlzLl91cGRhdGVWaWV3KCl9c2V0IG5nSWZUaGVuKGEpe3duZSgi'@;
put 'bmdJZlRoZW4iLGEpLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZj1hLHRoaXMuX3RoZW5WaWV3UmVmPW51bGwsdGhpcy5fdXBkYXRlVmlldygpfXNldCBuZ0lmRWxzZShhKXt3bmUoIm5nSWZFbHNlIixhKSx0aGlzLl9lbHNlVGVtcGxhdGVSZWY9YSx0aGlzLl9lbHNlVmlld1JlZj1udWxsLHRoaXMu'@;
put 'X3VwZGF0ZVZpZXcoKX1fdXBkYXRlVmlldygpe3RoaXMuX2NvbnRleHQuJGltcGxpY2l0P3RoaXMuX3RoZW5WaWV3UmVmfHwodGhpcy5fdmlld0NvbnRhaW5lci5jbGVhcigpLHRoaXMuX2Vsc2VWaWV3UmVmPW51bGwsdGhpcy5fdGhlblRlbXBsYXRlUmVmJiYodGhpcy5fdGhlblZpZXdSZWY9'@;
put 'dGhpcy5fdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGhlblRlbXBsYXRlUmVmLHRoaXMuX2NvbnRleHQpKSk6dGhpcy5fZWxzZVZpZXdSZWZ8fCh0aGlzLl92aWV3Q29udGFpbmVyLmNsZWFyKCksdGhpcy5fdGhlblZpZXdSZWY9bnVsbCx0aGlzLl9lbHNlVGVtcGxh'@;
put 'dGVSZWYmJih0aGlzLl9lbHNlVmlld1JlZj10aGlzLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl9lbHNlVGVtcGxhdGVSZWYsdGhpcy5fY29udGV4dCkpKX1zdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZChhLGYpe3JldHVybiEwfX1yZXR1cm4gbC5cdTAyNzVm'@;
put 'YWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChmYSkscnQoemwpKX0sbC5cdTAyNzVkaXI9U3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siIiwibmdJZiIsIiJdXSxpbnB1dHM6e25nSWY6Im5nSWYiLG5nSWZUaGVuOiJuZ0lmVGhlbiIsbmdJZkVsc2U6Im5nSWZFbHNlIn0sc3RhbmRh'@;
put 'bG9uZTohMH0pLGx9KSgpO2NsYXNzIFE5ZXtjb25zdHJ1Y3Rvcigpe3RoaXMuJGltcGxpY2l0PW51bGwsdGhpcy5uZ0lmPW51bGx9fWZ1bmN0aW9uIHduZShsLGMpe2lmKGMmJiFjLmNyZWF0ZUVtYmVkZGVkVmlldyl0aHJvdyBuZXcgRXJyb3IoYCR7bH0gbXVzdCBiZSBhIFRlbXBsYXRlUmVm'@;
put 'LCBidXQgcmVjZWl2ZWQgJyR7S2woYyl9Jy5gKX1jbGFzcyBmantjb25zdHJ1Y3RvcihjLGEpe3RoaXMuX3ZpZXdDb250YWluZXJSZWY9Yyx0aGlzLl90ZW1wbGF0ZVJlZj1hLHRoaXMuX2NyZWF0ZWQ9ITF9Y3JlYXRlKCl7dGhpcy5fY3JlYXRlZD0hMCx0aGlzLl92aWV3Q29udGFpbmVyUmVm'@;
put 'LmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90ZW1wbGF0ZVJlZil9ZGVzdHJveSgpe3RoaXMuX2NyZWF0ZWQ9ITEsdGhpcy5fdmlld0NvbnRhaW5lclJlZi5jbGVhcigpfWVuZm9yY2VTdGF0ZShjKXtjJiYhdGhpcy5fY3JlYXRlZD90aGlzLmNyZWF0ZSgpOiFjJiZ0aGlzLl9jcmVhdGVkJiZ0'@;
put 'aGlzLmRlc3Ryb3koKX19bGV0IGtmPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoKXt0aGlzLl9kZWZhdWx0Vmlld3M9W10sdGhpcy5fZGVmYXVsdFVzZWQ9ITEsdGhpcy5fY2FzZUNvdW50PTAsdGhpcy5fbGFzdENhc2VDaGVja0luZGV4PTAsdGhpcy5fbGFzdENhc2VzTWF0Y2hlZD0hMX1z'@;
put 'ZXQgbmdTd2l0Y2goYSl7dGhpcy5fbmdTd2l0Y2g9YSwwPT09dGhpcy5fY2FzZUNvdW50JiZ0aGlzLl91cGRhdGVEZWZhdWx0Q2FzZXMoITApfV9hZGRDYXNlKCl7cmV0dXJuIHRoaXMuX2Nhc2VDb3VudCsrfV9hZGREZWZhdWx0KGEpe3RoaXMuX2RlZmF1bHRWaWV3cy5wdXNoKGEpfV9tYXRj'@;
put 'aENhc2UoYSl7Y29uc3QgZj1hPT10aGlzLl9uZ1N3aXRjaDtyZXR1cm4gdGhpcy5fbGFzdENhc2VzTWF0Y2hlZD10aGlzLl9sYXN0Q2FzZXNNYXRjaGVkfHxmLHRoaXMuX2xhc3RDYXNlQ2hlY2tJbmRleCsrLHRoaXMuX2xhc3RDYXNlQ2hlY2tJbmRleD09PXRoaXMuX2Nhc2VDb3VudCYmKHRo'@;
put 'aXMuX3VwZGF0ZURlZmF1bHRDYXNlcyghdGhpcy5fbGFzdENhc2VzTWF0Y2hlZCksdGhpcy5fbGFzdENhc2VDaGVja0luZGV4PTAsdGhpcy5fbGFzdENhc2VzTWF0Y2hlZD0hMSksZn1fdXBkYXRlRGVmYXVsdENhc2VzKGEpe2lmKHRoaXMuX2RlZmF1bHRWaWV3cy5sZW5ndGg+MCYmYSE9PXRo'@;
put 'aXMuX2RlZmF1bHRVc2VkKXt0aGlzLl9kZWZhdWx0VXNlZD1hO2Zvcihjb25zdCBmIG9mIHRoaXMuX2RlZmF1bHRWaWV3cylmLmVuZm9yY2VTdGF0ZShhKX19fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NWRpcj1Tcih7dHlwZTpsLHNl'@;
put 'bGVjdG9yczpbWyIiLCJuZ1N3aXRjaCIsIiJdXSxpbnB1dHM6e25nU3dpdGNoOiJuZ1N3aXRjaCJ9LHN0YW5kYWxvbmU6ITB9KSxsfSkoKSxDaD0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEsZixkKXt0aGlzLm5nU3dpdGNoPWQsZC5fYWRkQ2FzZSgpLHRoaXMuX3ZpZXc9bmV3IGZqKGEs'@;
put 'Zil9bmdEb0NoZWNrKCl7dGhpcy5fdmlldy5lbmZvcmNlU3RhdGUodGhpcy5uZ1N3aXRjaC5fbWF0Y2hDYXNlKHRoaXMubmdTd2l0Y2hDYXNlKSl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHJ0KGZhKSxydCh6bCkscnQoa2YsOSkpfSxsLlx1MDI3'@;
put 'NWRpcj1Tcih7dHlwZTpsLHNlbGVjdG9yczpbWyIiLCJuZ1N3aXRjaENhc2UiLCIiXV0saW5wdXRzOntuZ1N3aXRjaENhc2U6Im5nU3dpdGNoQ2FzZSJ9LHN0YW5kYWxvbmU6ITB9KSxsfSkoKSxTbmU9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhLGYsZCl7dGhpcy5fbmdFbD1hLHRoaXMu'@;
put 'X2RpZmZlcnM9Zix0aGlzLl9yZW5kZXJlcj1kLHRoaXMuX25nU3R5bGU9bnVsbCx0aGlzLl9kaWZmZXI9bnVsbH1zZXQgbmdTdHlsZShhKXt0aGlzLl9uZ1N0eWxlPWEsIXRoaXMuX2RpZmZlciYmYSYmKHRoaXMuX2RpZmZlcj10aGlzLl9kaWZmZXJzLmZpbmQoYSkuY3JlYXRlKCkpfW5nRG9D'@;
put 'aGVjaygpe2lmKHRoaXMuX2RpZmZlcil7Y29uc3QgYT10aGlzLl9kaWZmZXIuZGlmZih0aGlzLl9uZ1N0eWxlKTthJiZ0aGlzLl9hcHBseUNoYW5nZXMoYSl9fV9zZXRTdHlsZShhLGYpe2NvbnN0W2QsaF09YS5zcGxpdCgiLiIpLG09LTE9PT1kLmluZGV4T2YoIi0iKT92b2lkIDA6aGguRGFz'@;
put 'aENhc2U7bnVsbCE9Zj90aGlzLl9yZW5kZXJlci5zZXRTdHlsZSh0aGlzLl9uZ0VsLm5hdGl2ZUVsZW1lbnQsZCxoP2Ake2Z9JHtofWA6ZixtKTp0aGlzLl9yZW5kZXJlci5yZW1vdmVTdHlsZSh0aGlzLl9uZ0VsLm5hdGl2ZUVsZW1lbnQsZCxtKX1fYXBwbHlDaGFuZ2VzKGEpe2EuZm9yRWFj'@;
put 'aFJlbW92ZWRJdGVtKGY9PnRoaXMuX3NldFN0eWxlKGYua2V5LG51bGwpKSxhLmZvckVhY2hBZGRlZEl0ZW0oZj0+dGhpcy5fc2V0U3R5bGUoZi5rZXksZi5jdXJyZW50VmFsdWUpKSxhLmZvckVhY2hDaGFuZ2VkSXRlbShmPT50aGlzLl9zZXRTdHlsZShmLmtleSxmLmN1cnJlbnRWYWx1ZSkp'@;
put 'fX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChWaSkscnQoYUMpLHJ0KGpvKSl9LGwuXHUwMjc1ZGlyPVNyKHt0eXBlOmwsc2VsZWN0b3JzOltbIiIsIm5nU3R5bGUiLCIiXV0saW5wdXRzOntuZ1N0eWxlOiJuZ1N0eWxlIn0sc3RhbmRhbG9uZToh'@;
put 'MH0pLGx9KSgpLHlkPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSl7dGhpcy5fdmlld0NvbnRhaW5lclJlZj1hLHRoaXMuX3ZpZXdSZWY9bnVsbCx0aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0PW51bGwsdGhpcy5uZ1RlbXBsYXRlT3V0bGV0PW51bGwsdGhpcy5uZ1RlbXBsYXRlT3V0'@;
put 'bGV0SW5qZWN0b3I9bnVsbH1uZ09uQ2hhbmdlcyhhKXtpZihhLm5nVGVtcGxhdGVPdXRsZXR8fGEubmdUZW1wbGF0ZU91dGxldEluamVjdG9yKXtjb25zdCBmPXRoaXMuX3ZpZXdDb250YWluZXJSZWY7aWYodGhpcy5fdmlld1JlZiYmZi5yZW1vdmUoZi5pbmRleE9mKHRoaXMuX3ZpZXdSZWYp'@;
put 'KSx0aGlzLm5nVGVtcGxhdGVPdXRsZXQpe2NvbnN0e25nVGVtcGxhdGVPdXRsZXQ6ZCxuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dDpoLG5nVGVtcGxhdGVPdXRsZXRJbmplY3RvcjptfT10aGlzO3RoaXMuX3ZpZXdSZWY9Zi5jcmVhdGVFbWJlZGRlZFZpZXcoZCxoLG0/e2luamVjdG9yOm19OnZv'@;
put 'aWQgMCl9ZWxzZSB0aGlzLl92aWV3UmVmPW51bGx9ZWxzZSB0aGlzLl92aWV3UmVmJiZhLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0JiZ0aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0JiYodGhpcy5fdmlld1JlZi5jb250ZXh0PXRoaXMubmdUZW1wbGF0ZU91dGxldENvbnRleHQpfX1yZXR1'@;
put 'cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChmYSkpfSxsLlx1MDI3NWRpcj1Tcih7dHlwZTpsLHNlbGVjdG9yczpbWyIiLCJuZ1RlbXBsYXRlT3V0bGV0IiwiIl1dLGlucHV0czp7bmdUZW1wbGF0ZU91dGxldENvbnRleHQ6Im5nVGVtcGxhdGVPdXRsZXRD'@;
put 'b250ZXh0IixuZ1RlbXBsYXRlT3V0bGV0OiJuZ1RlbXBsYXRlT3V0bGV0IixuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3I6Im5nVGVtcGxhdGVPdXRsZXRJbmplY3RvciJ9LHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W2JsXX0pLGx9KSgpO2NsYXNzIG55ZXtjcmVhdGVTdWJzY3JpcHRpb24oYyxh'@;
put 'KXtyZXR1cm4gYjIoKCk9PmMuc3Vic2NyaWJlKHtuZXh0OmEsZXJyb3I6Zj0+e3Rocm93IGZ9fSkpfWRpc3Bvc2UoYyl7YjIoKCk9PmMudW5zdWJzY3JpYmUoKSl9fWNsYXNzIHJ5ZXtjcmVhdGVTdWJzY3JpcHRpb24oYyxhKXtyZXR1cm4gYy50aGVuKGEsZj0+e3Rocm93IGZ9KX1kaXNwb3Nl'@;
put 'KGMpe319Y29uc3QgaXllPW5ldyByeWUsb3llPW5ldyBueWU7bGV0IHpPPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSl7dGhpcy5fbGF0ZXN0VmFsdWU9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb249bnVsbCx0aGlzLl9vYmo9bnVsbCx0aGlzLl9zdHJhdGVneT1udWxsLHRoaXMuX3JlZj1h'@;
put 'fW5nT25EZXN0cm95KCl7dGhpcy5fc3Vic2NyaXB0aW9uJiZ0aGlzLl9kaXNwb3NlKCksdGhpcy5fcmVmPW51bGx9dHJhbnNmb3JtKGEpe3JldHVybiB0aGlzLl9vYmo/YSE9PXRoaXMuX29iaj8odGhpcy5fZGlzcG9zZSgpLHRoaXMudHJhbnNmb3JtKGEpKTp0aGlzLl9sYXRlc3RWYWx1ZToo'@;
put 'YSYmdGhpcy5fc3Vic2NyaWJlKGEpLHRoaXMuX2xhdGVzdFZhbHVlKX1fc3Vic2NyaWJlKGEpe3RoaXMuX29iaj1hLHRoaXMuX3N0cmF0ZWd5PXRoaXMuX3NlbGVjdFN0cmF0ZWd5KGEpLHRoaXMuX3N1YnNjcmlwdGlvbj10aGlzLl9zdHJhdGVneS5jcmVhdGVTdWJzY3JpcHRpb24oYSxmPT50'@;
put 'aGlzLl91cGRhdGVMYXRlc3RWYWx1ZShhLGYpKX1fc2VsZWN0U3RyYXRlZ3koYSl7aWYocGcoYSkpcmV0dXJuIGl5ZTtpZihXVChhKSlyZXR1cm4gb3llO3Rocm93IGZ1bmN0aW9uIGJkKGwsYyl7cmV0dXJuIG5ldyBJcigyMTAwLCExKX0oKX1fZGlzcG9zZSgpe3RoaXMuX3N0cmF0ZWd5LmRp'@;
put 'c3Bvc2UodGhpcy5fc3Vic2NyaXB0aW9uKSx0aGlzLl9sYXRlc3RWYWx1ZT1udWxsLHRoaXMuX3N1YnNjcmlwdGlvbj1udWxsLHRoaXMuX29iaj1udWxsfV91cGRhdGVMYXRlc3RWYWx1ZShhLGYpe2E9PT10aGlzLl9vYmomJih0aGlzLl9sYXRlc3RWYWx1ZT1mLHRoaXMuX3JlZi5tYXJrRm9y'@;
put 'Q2hlY2soKSl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHJ0KFVsLDE2KSl9LGwuXHUwMjc1cGlwZT1WbCh7bmFtZToiYXN5bmMiLHR5cGU6bCxwdXJlOiExLHN0YW5kYWxvbmU6ITB9KSxsfSkoKSxNbmU9KCgpPT57Y2xhc3MgbHt0cmFuc2Zvcm0o'@;
put 'YSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGEsbnVsbCwyKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1cGlwZT1WbCh7bmFtZToianNvbiIsdHlwZTpsLHB1cmU6ITEsc3RhbmRhbG9uZTohMH0pLGx9KSgpLFVPPSgoKT0+e2NsYXNz'@;
put 'IGx7Y29uc3RydWN0b3IoYSl7dGhpcy5kaWZmZXJzPWEsdGhpcy5rZXlWYWx1ZXM9W10sdGhpcy5jb21wYXJlRm49a25lfXRyYW5zZm9ybShhLGY9a25lKXtpZighYXx8IShhIGluc3RhbmNlb2YgTWFwKSYmIm9iamVjdCIhPXR5cGVvZiBhKXJldHVybiBudWxsO3RoaXMuZGlmZmVyfHwodGhp'@;
put 'cy5kaWZmZXI9dGhpcy5kaWZmZXJzLmZpbmQoYSkuY3JlYXRlKCkpO2NvbnN0IGQ9dGhpcy5kaWZmZXIuZGlmZihhKSxoPWYhPT10aGlzLmNvbXBhcmVGbjtyZXR1cm4gZCYmKHRoaXMua2V5VmFsdWVzPVtdLGQuZm9yRWFjaEl0ZW0obT0+e3RoaXMua2V5VmFsdWVzLnB1c2goZnVuY3Rpb24g'@;
put 'dnllKGwsYyl7cmV0dXJue2tleTpsLHZhbHVlOmN9fShtLmtleSxtLmN1cnJlbnRWYWx1ZSkpfSkpLChkfHxoKSYmKHRoaXMua2V5VmFsdWVzLnNvcnQoZiksdGhpcy5jb21wYXJlRm49ZiksdGhpcy5rZXlWYWx1ZXN9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3'@;
put 'KGF8fGwpKHJ0KGFDLDE2KSl9LGwuXHUwMjc1cGlwZT1WbCh7bmFtZToia2V5dmFsdWUiLHR5cGU6bCxwdXJlOiExLHN0YW5kYWxvbmU6ITB9KSxsfSkoKTtmdW5jdGlvbiBrbmUobCxjKXtjb25zdCBhPWwua2V5LGY9Yy5rZXk7aWYoYT09PWYpcmV0dXJuIDA7aWYodm9pZCAwPT09YSlyZXR1'@;
put 'cm4gMTtpZih2b2lkIDA9PT1mKXJldHVybi0xO2lmKG51bGw9PT1hKXJldHVybiAxO2lmKG51bGw9PT1mKXJldHVybi0xO2lmKCJzdHJpbmciPT10eXBlb2YgYSYmInN0cmluZyI9PXR5cGVvZiBmKXJldHVybiBhPGY/LTE6MTtpZigibnVtYmVyIj09dHlwZW9mIGEmJiJudW1iZXIiPT10eXBl'@;
put 'b2YgZilyZXR1cm4gYS1mO2lmKCJib29sZWFuIj09dHlwZW9mIGEmJiJib29sZWFuIj09dHlwZW9mIGYpcmV0dXJuIGE8Zj8tMToxO2NvbnN0IGQ9U3RyaW5nKGEpLGg9U3RyaW5nKGYpO3JldHVybiBkPT1oPzA6ZDxoPy0xOjF9bGV0IGJvPSgoKT0+e2NsYXNzIGx7fXJldHVybiBsLlx1MDI3'@;
put 'NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NW1vZD1EaSh7dHlwZTpsfSksbC5cdTAyNzVpbmo9eGkoe30pLGx9KSgpO2Z1bmN0aW9uIEhhKGwpe3JldHVybiJicm93c2VyIj09PWx9ZnVuY3Rpb24geG5lKGwpe3JldHVybiJzZXJ2ZXIiPT09bH1sZXQgTXllPSgo'@;
put 'KT0+e2NsYXNzIGx7fXJldHVybiBsLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmwscHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+bmV3IGt5ZShzcihGYSksd2luZG93KX0pLGx9KSgpO2NsYXNzIGt5ZXtjb25zdHJ1Y3RvcihjLGEpe3RoaXMuZG9jdW1lbnQ9Yyx0aGlzLndpbmRvdz1hLHRo'@;
put 'aXMub2Zmc2V0PSgpPT5bMCwwXX1zZXRPZmZzZXQoYyl7dGhpcy5vZmZzZXQ9QXJyYXkuaXNBcnJheShjKT8oKT0+YzpjfWdldFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuc3VwcG9ydHNTY3JvbGxpbmcoKT9bdGhpcy53aW5kb3cucGFnZVhPZmZzZXQsdGhpcy53aW5kb3cucGFnZVlP'@;
put 'ZmZzZXRdOlswLDBdfXNjcm9sbFRvUG9zaXRpb24oYyl7dGhpcy5zdXBwb3J0c1Njcm9sbGluZygpJiZ0aGlzLndpbmRvdy5zY3JvbGxUbyhjWzBdLGNbMV0pfXNjcm9sbFRvQW5jaG9yKGMpe2lmKCF0aGlzLnN1cHBvcnRzU2Nyb2xsaW5nKCkpcmV0dXJuO2NvbnN0IGE9ZnVuY3Rpb24gRXll'@;
put 'KGwsYyl7Y29uc3QgYT1sLmdldEVsZW1lbnRCeUlkKGMpfHxsLmdldEVsZW1lbnRzQnlOYW1lKGMpWzBdO2lmKGEpcmV0dXJuIGE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGwuY3JlYXRlVHJlZVdhbGtlciYmbC5ib2R5JiYiZnVuY3Rpb24iPT10eXBlb2YgbC5ib2R5LmF0dGFjaFNoYWRvdyl7'@;
put 'Y29uc3QgZj1sLmNyZWF0ZVRyZWVXYWxrZXIobC5ib2R5LE5vZGVGaWx0ZXIuU0hPV19FTEVNRU5UKTtsZXQgZD1mLmN1cnJlbnROb2RlO2Zvcig7ZDspe2NvbnN0IGg9ZC5zaGFkb3dSb290O2lmKGgpe2NvbnN0IG09aC5nZXRFbGVtZW50QnlJZChjKXx8aC5xdWVyeVNlbGVjdG9yKGBbbmFt'@;
put 'ZT0iJHtjfSJdYCk7aWYobSlyZXR1cm4gbX1kPWYubmV4dE5vZGUoKX19cmV0dXJuIG51bGx9KHRoaXMuZG9jdW1lbnQsYyk7YSYmKHRoaXMuc2Nyb2xsVG9FbGVtZW50KGEpLGEuZm9jdXMoKSl9c2V0SGlzdG9yeVNjcm9sbFJlc3RvcmF0aW9uKGMpe2lmKHRoaXMuc3VwcG9ydFNjcm9sbFJl'@;
put 'c3RvcmF0aW9uKCkpe2NvbnN0IGE9dGhpcy53aW5kb3cuaGlzdG9yeTthJiZhLnNjcm9sbFJlc3RvcmF0aW9uJiYoYS5zY3JvbGxSZXN0b3JhdGlvbj1jKX19c2Nyb2xsVG9FbGVtZW50KGMpe2NvbnN0IGE9Yy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxmPWEubGVmdCt0aGlzLndpbmRvdy5w'@;
put 'YWdlWE9mZnNldCxkPWEudG9wK3RoaXMud2luZG93LnBhZ2VZT2Zmc2V0LGg9dGhpcy5vZmZzZXQoKTt0aGlzLndpbmRvdy5zY3JvbGxUbyhmLWhbMF0sZC1oWzFdKX1zdXBwb3J0U2Nyb2xsUmVzdG9yYXRpb24oKXt0cnl7aWYoIXRoaXMuc3VwcG9ydHNTY3JvbGxpbmcoKSlyZXR1cm4hMTtj'@;
put 'b25zdCBjPUFuZSh0aGlzLndpbmRvdy5oaXN0b3J5KXx8QW5lKE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzLndpbmRvdy5oaXN0b3J5KSk7cmV0dXJuISghY3x8IWMud3JpdGFibGUmJiFjLnNldCl9Y2F0Y2h7cmV0dXJuITF9fXN1cHBvcnRzU2Nyb2xsaW5nKCl7dHJ5e3JldHVybiEhdGhp'@;
put 'cy53aW5kb3cmJiEhdGhpcy53aW5kb3cuc2Nyb2xsVG8mJiJwYWdlWE9mZnNldCJpbiB0aGlzLndpbmRvd31jYXRjaHtyZXR1cm4hMX19fWZ1bmN0aW9uIEFuZShsKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihsLCJzY3JvbGxSZXN0b3JhdGlvbiIpfWNsYXNzIFRu'@;
put 'ZXt9Y2xhc3MgS3llIGV4dGVuZHMgbDlle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnN1cHBvcnRzRE9NRXZlbnRzPSEwfX1jbGFzcyBnaiBleHRlbmRzIEt5ZXtzdGF0aWMgbWFrZUN1cnJlbnQoKXshZnVuY3Rpb24gYTllKGwpe3FCfHwocUI9bCl9KG5ldyBnail9'@;
put 'b25BbmRDYW5jZWwoYyxhLGYpe3JldHVybiBjLmFkZEV2ZW50TGlzdGVuZXIoYSxmKSwoKT0+e2MucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGYpfX1kaXNwYXRjaEV2ZW50KGMsYSl7Yy5kaXNwYXRjaEV2ZW50KGEpfXJlbW92ZShjKXtjLnBhcmVudE5vZGUmJmMucGFyZW50Tm9kZS5yZW1vdmVD'@;
put 'aGlsZChjKX1jcmVhdGVFbGVtZW50KGMsYSl7cmV0dXJuKGE9YXx8dGhpcy5nZXREZWZhdWx0RG9jdW1lbnQoKSkuY3JlYXRlRWxlbWVudChjKX1jcmVhdGVIdG1sRG9jdW1lbnQoKXtyZXR1cm4gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCJmYWtlVGl0bGUi'@;
put 'KX1nZXREZWZhdWx0RG9jdW1lbnQoKXtyZXR1cm4gZG9jdW1lbnR9aXNFbGVtZW50Tm9kZShjKXtyZXR1cm4gYy5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFfWlzU2hhZG93Um9vdChjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnR9Z2V0R2xvYmFsRXZlbnRUYXJn'@;
put 'ZXQoYyxhKXtyZXR1cm4id2luZG93Ij09PWE/d2luZG93OiJkb2N1bWVudCI9PT1hP2M6ImJvZHkiPT09YT9jLmJvZHk6bnVsbH1nZXRCYXNlSHJlZihjKXtjb25zdCBhPWZ1bmN0aW9uIHF5ZSgpe3JldHVybiBmQz1mQ3x8ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiYmFzZSIpLGZDP2ZDLmdl'@;
put 'dEF0dHJpYnV0ZSgiaHJlZiIpOm51bGx9KCk7cmV0dXJuIG51bGw9PWE/bnVsbDpmdW5jdGlvbiBYeWUobCl7V089V098fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxXTy5zZXRBdHRyaWJ1dGUoImhyZWYiLGwpO2NvbnN0IGM9V08ucGF0aG5hbWU7cmV0dXJuIi8iPT09Yy5jaGFyQXQo'@;
put 'MCk/YzpgLyR7Y31gfShhKX1yZXNldEJhc2VFbGVtZW50KCl7ZkM9bnVsbH1nZXRVc2VyQWdlbnQoKXtyZXR1cm4gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnR9Z2V0Q29va2llKGMpe3JldHVybiB2bmUoZG9jdW1lbnQuY29va2llLGMpfX1sZXQgV08sZkM9bnVsbCxReWU9KCgpPT57Y2xh'@;
put 'c3MgbHtidWlsZCgpe3JldHVybiBuZXcgWE1MSHR0cFJlcXVlc3R9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmwsZmFjdG9yeTpsLlx1MDI3NWZhY30pLGx9KSgpO2NvbnN0IHZqPW5ldyBNaSgiRXZlbnRN'@;
put 'YW5hZ2VyUGx1Z2lucyIpO2xldCBMbmU9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhLGYpe3RoaXMuX3pvbmU9Zix0aGlzLl9ldmVudE5hbWVUb1BsdWdpbj1uZXcgTWFwLGEuZm9yRWFjaChkPT57ZC5tYW5hZ2VyPXRoaXN9KSx0aGlzLl9wbHVnaW5zPWEuc2xpY2UoKS5yZXZlcnNlKCl9'@;
put 'YWRkRXZlbnRMaXN0ZW5lcihhLGYsZCl7cmV0dXJuIHRoaXMuX2ZpbmRQbHVnaW5Gb3IoZikuYWRkRXZlbnRMaXN0ZW5lcihhLGYsZCl9Z2V0Wm9uZSgpe3JldHVybiB0aGlzLl96b25lfV9maW5kUGx1Z2luRm9yKGEpe2xldCBmPXRoaXMuX2V2ZW50TmFtZVRvUGx1Z2luLmdldChhKTtpZihm'@;
put 'KXJldHVybiBmO2lmKGY9dGhpcy5fcGx1Z2lucy5maW5kKGg9Pmguc3VwcG9ydHMoYSkpLCFmKXRocm93IG5ldyBJcig1MTAxLCExKTtyZXR1cm4gdGhpcy5fZXZlbnROYW1lVG9QbHVnaW4uc2V0KGEsZiksZn19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8'@;
put 'bCkoc3IodmopLHNyKFVvKSl9LGwuXHUwMjc1cHJvdj1ocih7dG9rZW46bCxmYWN0b3J5OmwuXHUwMjc1ZmFjfSksbH0pKCk7Y2xhc3MgUG5le2NvbnN0cnVjdG9yKGMpe3RoaXMuX2RvYz1jfX1jb25zdCB5aj0ibmctYXBwLWlkIjtsZXQgRm5lPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3Io'@;
put 'YSxmLGQsaD17fSl7dGhpcy5kb2M9YSx0aGlzLmFwcElkPWYsdGhpcy5ub25jZT1kLHRoaXMucGxhdGZvcm1JZD1oLHRoaXMuc3R5bGVSZWY9bmV3IE1hcCx0aGlzLmhvc3ROb2Rlcz1uZXcgU2V0LHRoaXMuc3R5bGVOb2Rlc0luRE9NPXRoaXMuY29sbGVjdFNlcnZlclJlbmRlcmVkU3R5bGVz'@;
put 'KCksdGhpcy5wbGF0Zm9ybUlzU2VydmVyPXhuZShoKSx0aGlzLnJlc2V0SG9zdE5vZGVzKCl9YWRkU3R5bGVzKGEpe2Zvcihjb25zdCBmIG9mIGEpMT09PXRoaXMuY2hhbmdlVXNhZ2VDb3VudChmLDEpJiZ0aGlzLm9uU3R5bGVBZGRlZChmKX1yZW1vdmVTdHlsZXMoYSl7Zm9yKGNvbnN0IGYg'@;
put 'b2YgYSl0aGlzLmNoYW5nZVVzYWdlQ291bnQoZiwtMSk8PTAmJnRoaXMub25TdHlsZVJlbW92ZWQoZil9bmdPbkRlc3Ryb3koKXtjb25zdCBhPXRoaXMuc3R5bGVOb2Rlc0luRE9NO2EmJihhLmZvckVhY2goZj0+Zi5yZW1vdmUoKSksYS5jbGVhcigpKTtmb3IoY29uc3QgZiBvZiB0aGlzLmdl'@;
put 'dEFsbFN0eWxlcygpKXRoaXMub25TdHlsZVJlbW92ZWQoZik7dGhpcy5yZXNldEhvc3ROb2RlcygpfWFkZEhvc3QoYSl7dGhpcy5ob3N0Tm9kZXMuYWRkKGEpO2Zvcihjb25zdCBmIG9mIHRoaXMuZ2V0QWxsU3R5bGVzKCkpdGhpcy5hZGRTdHlsZVRvSG9zdChhLGYpfXJlbW92ZUhvc3QoYSl7'@;
put 'dGhpcy5ob3N0Tm9kZXMuZGVsZXRlKGEpfWdldEFsbFN0eWxlcygpe3JldHVybiB0aGlzLnN0eWxlUmVmLmtleXMoKX1vblN0eWxlQWRkZWQoYSl7Zm9yKGNvbnN0IGYgb2YgdGhpcy5ob3N0Tm9kZXMpdGhpcy5hZGRTdHlsZVRvSG9zdChmLGEpfW9uU3R5bGVSZW1vdmVkKGEpe2NvbnN0IGY9'@;
put 'dGhpcy5zdHlsZVJlZjtmLmdldChhKT8uZWxlbWVudHM/LmZvckVhY2goZD0+ZC5yZW1vdmUoKSksZi5kZWxldGUoYSl9Y29sbGVjdFNlcnZlclJlbmRlcmVkU3R5bGVzKCl7Y29uc3QgYT10aGlzLmRvYy5oZWFkPy5xdWVyeVNlbGVjdG9yQWxsKGBzdHlsZVske3lqfT0iJHt0aGlzLmFwcElk'@;
put 'fSJdYCk7aWYoYT8ubGVuZ3RoKXtjb25zdCBmPW5ldyBNYXA7cmV0dXJuIGEuZm9yRWFjaChkPT57bnVsbCE9ZC50ZXh0Q29udGVudCYmZi5zZXQoZC50ZXh0Q29udGVudCxkKX0pLGZ9cmV0dXJuIG51bGx9Y2hhbmdlVXNhZ2VDb3VudChhLGYpe2NvbnN0IGQ9dGhpcy5zdHlsZVJlZjtpZihk'@;
put 'LmhhcyhhKSl7Y29uc3QgaD1kLmdldChhKTtyZXR1cm4gaC51c2FnZSs9ZixoLnVzYWdlfXJldHVybiBkLnNldChhLHt1c2FnZTpmLGVsZW1lbnRzOltdfSksZn1nZXRTdHlsZUVsZW1lbnQoYSxmKXtjb25zdCBkPXRoaXMuc3R5bGVOb2Rlc0luRE9NLGg9ZD8uZ2V0KGYpO2lmKGg/LnBhcmVu'@;
put 'dE5vZGU9PT1hKXJldHVybiBkLmRlbGV0ZShmKSxoLnJlbW92ZUF0dHJpYnV0ZSh5aiksaDt7Y29uc3QgbT10aGlzLmRvYy5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO3JldHVybiB0aGlzLm5vbmNlJiZtLnNldEF0dHJpYnV0ZSgibm9uY2UiLHRoaXMubm9uY2UpLG0udGV4dENvbnRlbnQ9Zix0'@;
put 'aGlzLnBsYXRmb3JtSXNTZXJ2ZXImJm0uc2V0QXR0cmlidXRlKHlqLHRoaXMuYXBwSWQpLG19fWFkZFN0eWxlVG9Ib3N0KGEsZil7Y29uc3QgZD10aGlzLmdldFN0eWxlRWxlbWVudChhLGYpO2EuYXBwZW5kQ2hpbGQoZCk7Y29uc3QgaD10aGlzLnN0eWxlUmVmLG09aC5nZXQoZik/LmVsZW1l'@;
put 'bnRzO20/bS5wdXNoKGQpOmguc2V0KGYse2VsZW1lbnRzOltkXSx1c2FnZToxfSl9cmVzZXRIb3N0Tm9kZXMoKXtjb25zdCBhPXRoaXMuaG9zdE5vZGVzO2EuY2xlYXIoKSxhLmFkZCh0aGlzLmRvYy5oZWFkKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8'@;
put 'bCkoc3IoRmEpLHNyKE44KSxzcihWOCw4KSxzcihxYSkpfSxsLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmwsZmFjdG9yeTpsLlx1MDI3NWZhY30pLGx9KSgpO2NvbnN0IGJqPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRt'@;
put 'bCIseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8iLG1hdGg6Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aE1MLyJ9LF9qPS8l'@;
put 'Q09NUCUvZyxyYmU9bmV3IE1pKCJSZW1vdmVTdHlsZXNPbkNvbXBEZXN0cm95Iix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+ITF9KTtmdW5jdGlvbiBObmUobCxjKXtyZXR1cm4gYy5tYXAoYT0+YS5yZXBsYWNlKF9qLGwpKX1sZXQgd2o9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3Rv'@;
put 'cihhLGYsZCxoLG0sXyxPLFg9bnVsbCl7dGhpcy5ldmVudE1hbmFnZXI9YSx0aGlzLnNoYXJlZFN0eWxlc0hvc3Q9Zix0aGlzLmFwcElkPWQsdGhpcy5yZW1vdmVTdHlsZXNPbkNvbXBEZXN0cm95PWgsdGhpcy5kb2M9bSx0aGlzLnBsYXRmb3JtSWQ9Xyx0aGlzLm5nWm9uZT1PLHRoaXMubm9u'@;
put 'Y2U9WCx0aGlzLnJlbmRlcmVyQnlDb21wSWQ9bmV3IE1hcCx0aGlzLnBsYXRmb3JtSXNTZXJ2ZXI9eG5lKF8pLHRoaXMuZGVmYXVsdFJlbmRlcmVyPW5ldyBDaihhLG0sTyx0aGlzLnBsYXRmb3JtSXNTZXJ2ZXIpfWNyZWF0ZVJlbmRlcmVyKGEsZil7aWYoIWF8fCFmKXJldHVybiB0aGlzLmRl'@;
put 'ZmF1bHRSZW5kZXJlcjt0aGlzLnBsYXRmb3JtSXNTZXJ2ZXImJmYuZW5jYXBzdWxhdGlvbj09PWp1LlNoYWRvd0RvbSYmKGY9ey4uLmYsZW5jYXBzdWxhdGlvbjpqdS5FbXVsYXRlZH0pO2NvbnN0IGQ9dGhpcy5nZXRPckNyZWF0ZVJlbmRlcmVyKGEsZik7cmV0dXJuIGQgaW5zdGFuY2VvZiBC'@;
put 'bmU/ZC5hcHBseVRvSG9zdChhKTpkIGluc3RhbmNlb2YgU2omJmQuYXBwbHlTdHlsZXMoKSxkfWdldE9yQ3JlYXRlUmVuZGVyZXIoYSxmKXtjb25zdCBkPXRoaXMucmVuZGVyZXJCeUNvbXBJZDtsZXQgaD1kLmdldChmLmlkKTtpZighaCl7Y29uc3QgbT10aGlzLmRvYyxfPXRoaXMubmdab25l'@;
put 'LE89dGhpcy5ldmVudE1hbmFnZXIsWD10aGlzLnNoYXJlZFN0eWxlc0hvc3QsYWU9dGhpcy5yZW1vdmVTdHlsZXNPbkNvbXBEZXN0cm95LHBlPXRoaXMucGxhdGZvcm1Jc1NlcnZlcjtzd2l0Y2goZi5lbmNhcHN1bGF0aW9uKXtjYXNlIGp1LkVtdWxhdGVkOmg9bmV3IEJuZShPLFgsZix0aGlz'@;
put 'LmFwcElkLGFlLG0sXyxwZSk7YnJlYWs7Y2FzZSBqdS5TaGFkb3dEb206cmV0dXJuIG5ldyBsYmUoTyxYLGEsZixtLF8sdGhpcy5ub25jZSxwZSk7ZGVmYXVsdDpoPW5ldyBTaihPLFgsZixhZSxtLF8scGUpfWQuc2V0KGYuaWQsaCl9cmV0dXJuIGh9bmdPbkRlc3Ryb3koKXt0aGlzLnJlbmRl'@;
put 'cmVyQnlDb21wSWQuY2xlYXIoKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkoc3IoTG5lKSxzcihGbmUpLHNyKE44KSxzcihyYmUpLHNyKEZhKSxzcihxYSksc3IoVW8pLHNyKFY4KSl9LGwuXHUwMjc1cHJvdj1ocih7dG9rZW46bCxmYWN0b3J5Omwu'@;
put 'XHUwMjc1ZmFjfSksbH0pKCk7Y2xhc3MgQ2p7Y29uc3RydWN0b3IoYyxhLGYsZCl7dGhpcy5ldmVudE1hbmFnZXI9Yyx0aGlzLmRvYz1hLHRoaXMubmdab25lPWYsdGhpcy5wbGF0Zm9ybUlzU2VydmVyPWQsdGhpcy5kYXRhPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5kZXN0cm95Tm9kZT1u'@;
put 'dWxsfWRlc3Ryb3koKXt9Y3JlYXRlRWxlbWVudChjLGEpe3JldHVybiBhP3RoaXMuZG9jLmNyZWF0ZUVsZW1lbnROUyhialthXXx8YSxjKTp0aGlzLmRvYy5jcmVhdGVFbGVtZW50KGMpfWNyZWF0ZUNvbW1lbnQoYyl7cmV0dXJuIHRoaXMuZG9jLmNyZWF0ZUNvbW1lbnQoYyl9Y3JlYXRlVGV4'@;
put 'dChjKXtyZXR1cm4gdGhpcy5kb2MuY3JlYXRlVGV4dE5vZGUoYyl9YXBwZW5kQ2hpbGQoYyxhKXsoVm5lKGMpP2MuY29udGVudDpjKS5hcHBlbmRDaGlsZChhKX1pbnNlcnRCZWZvcmUoYyxhLGYpe2MmJihWbmUoYyk/Yy5jb250ZW50OmMpLmluc2VydEJlZm9yZShhLGYpfXJlbW92ZUNoaWxk'@;
put 'KGMsYSl7YyYmYy5yZW1vdmVDaGlsZChhKX1zZWxlY3RSb290RWxlbWVudChjLGEpe2xldCBmPSJzdHJpbmciPT10eXBlb2YgYz90aGlzLmRvYy5xdWVyeVNlbGVjdG9yKGMpOmM7aWYoIWYpdGhyb3cgbmV3IElyKC01MTA0LCExKTtyZXR1cm4gYXx8KGYudGV4dENvbnRlbnQ9IiIpLGZ9cGFy'@;
put 'ZW50Tm9kZShjKXtyZXR1cm4gYy5wYXJlbnROb2RlfW5leHRTaWJsaW5nKGMpe3JldHVybiBjLm5leHRTaWJsaW5nfXNldEF0dHJpYnV0ZShjLGEsZixkKXtpZihkKXthPWQrIjoiK2E7Y29uc3QgaD1ialtkXTtoP2Muc2V0QXR0cmlidXRlTlMoaCxhLGYpOmMuc2V0QXR0cmlidXRlKGEsZil9'@;
put 'ZWxzZSBjLnNldEF0dHJpYnV0ZShhLGYpfXJlbW92ZUF0dHJpYnV0ZShjLGEsZil7aWYoZil7Y29uc3QgZD1ialtmXTtkP2MucmVtb3ZlQXR0cmlidXRlTlMoZCxhKTpjLnJlbW92ZUF0dHJpYnV0ZShgJHtmfToke2F9YCl9ZWxzZSBjLnJlbW92ZUF0dHJpYnV0ZShhKX1hZGRDbGFzcyhjLGEp'@;
put 'e2MuY2xhc3NMaXN0LmFkZChhKX1yZW1vdmVDbGFzcyhjLGEpe2MuY2xhc3NMaXN0LnJlbW92ZShhKX1zZXRTdHlsZShjLGEsZixkKXtkJihoaC5EYXNoQ2FzZXxoaC5JbXBvcnRhbnQpP2Muc3R5bGUuc2V0UHJvcGVydHkoYSxmLGQmaGguSW1wb3J0YW50PyJpbXBvcnRhbnQiOiIiKTpjLnN0'@;
put 'eWxlW2FdPWZ9cmVtb3ZlU3R5bGUoYyxhLGYpe2YmaGguRGFzaENhc2U/Yy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShhKTpjLnN0eWxlW2FdPSIifXNldFByb3BlcnR5KGMsYSxmKXtjW2FdPWZ9c2V0VmFsdWUoYyxhKXtjLm5vZGVWYWx1ZT1hfWxpc3RlbihjLGEsZil7aWYoInN0cmluZyI9PXR5'@;
put 'cGVvZiBjJiYhKGM9UXAoKS5nZXRHbG9iYWxFdmVudFRhcmdldCh0aGlzLmRvYyxjKSkpdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBldmVudCB0YXJnZXQgJHtjfSBmb3IgZXZlbnQgJHthfWApO3JldHVybiB0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGMsYSx0aGlz'@;
put 'LmRlY29yYXRlUHJldmVudERlZmF1bHQoZikpfWRlY29yYXRlUHJldmVudERlZmF1bHQoYyl7cmV0dXJuIGE9PntpZigiX19uZ1Vud3JhcF9fIj09PWEpcmV0dXJuIGM7ITE9PT0odGhpcy5wbGF0Zm9ybUlzU2VydmVyP3RoaXMubmdab25lLnJ1bkd1YXJkZWQoKCk9PmMoYSkpOmMoYSkpJiZh'@;
put 'LnByZXZlbnREZWZhdWx0KCl9fX1mdW5jdGlvbiBWbmUobCl7cmV0dXJuIlRFTVBMQVRFIj09PWwudGFnTmFtZSYmdm9pZCAwIT09bC5jb250ZW50fWNsYXNzIGxiZSBleHRlbmRzIENqe2NvbnN0cnVjdG9yKGMsYSxmLGQsaCxtLF8sTyl7c3VwZXIoYyxoLG0sTyksdGhpcy5zaGFyZWRTdHls'@;
put 'ZXNIb3N0PWEsdGhpcy5ob3N0RWw9Zix0aGlzLnNoYWRvd1Jvb3Q9Zi5hdHRhY2hTaGFkb3coe21vZGU6Im9wZW4ifSksdGhpcy5zaGFyZWRTdHlsZXNIb3N0LmFkZEhvc3QodGhpcy5zaGFkb3dSb290KTtjb25zdCBYPU5uZShkLmlkLGQuc3R5bGVzKTtmb3IoY29uc3QgYWUgb2YgWCl7Y29u'@;
put 'c3QgcGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtfJiZwZS5zZXRBdHRyaWJ1dGUoIm5vbmNlIixfKSxwZS50ZXh0Q29udGVudD1hZSx0aGlzLnNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQocGUpfX1ub2RlT3JTaGFkb3dSb290KGMpe3JldHVybiBjPT09dGhpcy5ob3N0RWw/dGhp'@;
put 'cy5zaGFkb3dSb290OmN9YXBwZW5kQ2hpbGQoYyxhKXtyZXR1cm4gc3VwZXIuYXBwZW5kQ2hpbGQodGhpcy5ub2RlT3JTaGFkb3dSb290KGMpLGEpfWluc2VydEJlZm9yZShjLGEsZil7cmV0dXJuIHN1cGVyLmluc2VydEJlZm9yZSh0aGlzLm5vZGVPclNoYWRvd1Jvb3QoYyksYSxmKX1yZW1v'@;
put 'dmVDaGlsZChjLGEpe3JldHVybiBzdXBlci5yZW1vdmVDaGlsZCh0aGlzLm5vZGVPclNoYWRvd1Jvb3QoYyksYSl9cGFyZW50Tm9kZShjKXtyZXR1cm4gdGhpcy5ub2RlT3JTaGFkb3dSb290KHN1cGVyLnBhcmVudE5vZGUodGhpcy5ub2RlT3JTaGFkb3dSb290KGMpKSl9ZGVzdHJveSgpe3Ro'@;
put 'aXMuc2hhcmVkU3R5bGVzSG9zdC5yZW1vdmVIb3N0KHRoaXMuc2hhZG93Um9vdCl9fWNsYXNzIFNqIGV4dGVuZHMgQ2p7Y29uc3RydWN0b3IoYyxhLGYsZCxoLG0sXyxPKXtzdXBlcihjLGgsbSxfKSx0aGlzLnNoYXJlZFN0eWxlc0hvc3Q9YSx0aGlzLnJlbW92ZVN0eWxlc09uQ29tcERlc3Ry'@;
put 'b3k9ZCx0aGlzLnN0eWxlcz1PP05uZShPLGYuc3R5bGVzKTpmLnN0eWxlc31hcHBseVN0eWxlcygpe3RoaXMuc2hhcmVkU3R5bGVzSG9zdC5hZGRTdHlsZXModGhpcy5zdHlsZXMpfWRlc3Ryb3koKXt0aGlzLnJlbW92ZVN0eWxlc09uQ29tcERlc3Ryb3kmJnRoaXMuc2hhcmVkU3R5bGVzSG9z'@;
put 'dC5yZW1vdmVTdHlsZXModGhpcy5zdHlsZXMpfX1jbGFzcyBCbmUgZXh0ZW5kcyBTantjb25zdHJ1Y3RvcihjLGEsZixkLGgsbSxfLE8pe2NvbnN0IFg9ZCsiLSIrZi5pZDtzdXBlcihjLGEsZixoLG0sXyxPLFgpLHRoaXMuY29udGVudEF0dHI9ZnVuY3Rpb24gaWJlKGwpe3JldHVybiJfbmdj'@;
put 'b250ZW50LSVDT01QJSIucmVwbGFjZShfaixsKX0oWCksdGhpcy5ob3N0QXR0cj1mdW5jdGlvbiBvYmUobCl7cmV0dXJuIl9uZ2hvc3QtJUNPTVAlIi5yZXBsYWNlKF9qLGwpfShYKX1hcHBseVRvSG9zdChjKXt0aGlzLmFwcGx5U3R5bGVzKCksdGhpcy5zZXRBdHRyaWJ1dGUoYyx0aGlzLmhv'@;
put 'c3RBdHRyLCIiKX1jcmVhdGVFbGVtZW50KGMsYSl7Y29uc3QgZj1zdXBlci5jcmVhdGVFbGVtZW50KGMsYSk7cmV0dXJuIHN1cGVyLnNldEF0dHJpYnV0ZShmLHRoaXMuY29udGVudEF0dHIsIiIpLGZ9fWxldCBzYmU9KCgpPT57Y2xhc3MgbCBleHRlbmRzIFBuZXtjb25zdHJ1Y3RvcihhKXtz'@;
put 'dXBlcihhKX1zdXBwb3J0cyhhKXtyZXR1cm4hMH1hZGRFdmVudExpc3RlbmVyKGEsZixkKXtyZXR1cm4gYS5hZGRFdmVudExpc3RlbmVyKGYsZCwhMSksKCk9PnRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGYsZCl9cmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGYsZCl7cmV0dXJuIGEucmVtb3Zl'@;
put 'RXZlbnRMaXN0ZW5lcihmLGQpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShzcihGYSkpfSxsLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmwsZmFjdG9yeTpsLlx1MDI3NWZhY30pLGx9KSgpO2NvbnN0IGpuZT1bImFsdCIsImNvbnRyb2wiLCJtZXRhIiwi'@;
put 'c2hpZnQiXSx1YmU9eyJcYiI6IkJhY2tzcGFjZSIsIlx0IjoiVGFiIiwiXHg3ZiI6IkRlbGV0ZSIsIlx4MWIiOiJFc2NhcGUiLERlbDoiRGVsZXRlIixFc2M6IkVzY2FwZSIsTGVmdDoiQXJyb3dMZWZ0IixSaWdodDoiQXJyb3dSaWdodCIsVXA6IkFycm93VXAiLERvd246IkFycm93RG93biIs'@;
put 'TWVudToiQ29udGV4dE1lbnUiLFNjcm9sbDoiU2Nyb2xsTG9jayIsV2luOiJPUyJ9LGNiZT17YWx0Omw9PmwuYWx0S2V5LGNvbnRyb2w6bD0+bC5jdHJsS2V5LG1ldGE6bD0+bC5tZXRhS2V5LHNoaWZ0Omw9Pmwuc2hpZnRLZXl9O2xldCBmYmU9KCgpPT57Y2xhc3MgbCBleHRlbmRzIFBuZXtj'@;
put 'b25zdHJ1Y3RvcihhKXtzdXBlcihhKX1zdXBwb3J0cyhhKXtyZXR1cm4gbnVsbCE9bC5wYXJzZUV2ZW50TmFtZShhKX1hZGRFdmVudExpc3RlbmVyKGEsZixkKXtjb25zdCBoPWwucGFyc2VFdmVudE5hbWUoZiksbT1sLmV2ZW50Q2FsbGJhY2soaC5mdWxsS2V5LGQsdGhpcy5tYW5hZ2VyLmdl'@;
put 'dFpvbmUoKSk7cmV0dXJuIHRoaXMubWFuYWdlci5nZXRab25lKCkucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PlFwKCkub25BbmRDYW5jZWwoYSxoLmRvbUV2ZW50TmFtZSxtKSl9c3RhdGljIHBhcnNlRXZlbnROYW1lKGEpe2NvbnN0IGY9YS50b0xvd2VyQ2FzZSgpLnNwbGl0KCIuIiksZD1mLnNo'@;
put 'aWZ0KCk7aWYoMD09PWYubGVuZ3RofHwia2V5ZG93biIhPT1kJiYia2V5dXAiIT09ZClyZXR1cm4gbnVsbDtjb25zdCBoPWwuX25vcm1hbGl6ZUtleShmLnBvcCgpKTtsZXQgbT0iIixfPWYuaW5kZXhPZigiY29kZSIpO2lmKF8+LTEmJihmLnNwbGljZShfLDEpLG09ImNvZGUuIiksam5lLmZv'@;
put 'ckVhY2goWD0+e2NvbnN0IGFlPWYuaW5kZXhPZihYKTthZT4tMSYmKGYuc3BsaWNlKGFlLDEpLG0rPVgrIi4iKX0pLG0rPWgsMCE9Zi5sZW5ndGh8fDA9PT1oLmxlbmd0aClyZXR1cm4gbnVsbDtjb25zdCBPPXt9O3JldHVybiBPLmRvbUV2ZW50TmFtZT1kLE8uZnVsbEtleT1tLE99c3RhdGlj'@;
put 'IG1hdGNoRXZlbnRGdWxsS2V5Q29kZShhLGYpe2xldCBkPXViZVthLmtleV18fGEua2V5LGg9IiI7cmV0dXJuIGYuaW5kZXhPZigiY29kZS4iKT4tMSYmKGQ9YS5jb2RlLGg9ImNvZGUuIiksIShudWxsPT1kfHwhZCkmJihkPWQudG9Mb3dlckNhc2UoKSwiICI9PT1kP2Q9InNwYWNlIjoiLiI9'@;
put 'PT1kJiYoZD0iZG90Iiksam5lLmZvckVhY2gobT0+e20hPT1kJiYoMCxjYmVbbV0pKGEpJiYoaCs9bSsiLiIpfSksaCs9ZCxoPT09Zil9c3RhdGljIGV2ZW50Q2FsbGJhY2soYSxmLGQpe3JldHVybiBoPT57bC5tYXRjaEV2ZW50RnVsbEtleUNvZGUoaCxhKSYmZC5ydW5HdWFyZGVkKCgpPT5m'@;
put 'KGgpKX19c3RhdGljIF9ub3JtYWxpemVLZXkoYSl7cmV0dXJuImVzYyI9PT1hPyJlc2NhcGUiOmF9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHNyKEZhKSl9LGwuXHUwMjc1cHJvdj1ocih7dG9rZW46bCxmYWN0b3J5OmwuXHUwMjc1ZmFjfSksbH0p'@;
put 'KCk7Y29uc3QgVW5lPVt7cHJvdmlkZTpxYSx1c2VWYWx1ZToiYnJvd3NlciJ9LHtwcm92aWRlOklBLHVzZVZhbHVlOmZ1bmN0aW9uIGRiZSgpe2dqLm1ha2VDdXJyZW50KCl9LG11bHRpOiEwfSx7cHJvdmlkZTpGYSx1c2VGYWN0b3J5OmZ1bmN0aW9uIHBiZSgpe3JldHVybiBmdW5jdGlvbiBw'@;
put 'QShsKXtUXz1sfShkb2N1bWVudCksZG9jdW1lbnR9LGRlcHM6W119XSxtYmU9UHRlKCQ3ZSwiYnJvd3NlciIsVW5lKSxnYmU9bmV3IE1pKCIiKSxabmU9W3twcm92aWRlOkFPLHVzZUNsYXNzOmNsYXNzIEp5ZXthZGRUb1dpbmRvdyhjKXtQaS5nZXRBbmd1bGFyVGVzdGFiaWxpdHk9KGYsZD0h'@;
put 'MCk9Pntjb25zdCBoPWMuZmluZFRlc3RhYmlsaXR5SW5UcmVlKGYsZCk7aWYobnVsbD09aCl0aHJvdyBuZXcgSXIoNTEwMywhMSk7cmV0dXJuIGh9LFBpLmdldEFsbEFuZ3VsYXJUZXN0YWJpbGl0aWVzPSgpPT5jLmdldEFsbFRlc3RhYmlsaXRpZXMoKSxQaS5nZXRBbGxBbmd1bGFyUm9vdEVs'@;
put 'ZW1lbnRzPSgpPT5jLmdldEFsbFJvb3RFbGVtZW50cygpLFBpLmZyYW1ld29ya1N0YWJpbGl6ZXJzfHwoUGkuZnJhbWV3b3JrU3RhYmlsaXplcnM9W10pLFBpLmZyYW1ld29ya1N0YWJpbGl6ZXJzLnB1c2goZj0+e2NvbnN0IGQ9UGkuZ2V0QWxsQW5ndWxhclRlc3RhYmlsaXRpZXMoKTtsZXQg'@;
put 'aD1kLmxlbmd0aCxtPSExO2NvbnN0IF89ZnVuY3Rpb24oTyl7bT1tfHxPLGgtLSwwPT1oJiZmKG0pfTtkLmZvckVhY2goTz0+e08ud2hlblN0YWJsZShfKX0pfSl9ZmluZFRlc3RhYmlsaXR5SW5UcmVlKGMsYSxmKXtyZXR1cm4gbnVsbD09YT9udWxsOmMuZ2V0VGVzdGFiaWxpdHkoYSk/Pyhm'@;
put 'P1FwKCkuaXNTaGFkb3dSb290KGEpP3RoaXMuZmluZFRlc3RhYmlsaXR5SW5UcmVlKGMsYS5ob3N0LCEwKTp0aGlzLmZpbmRUZXN0YWJpbGl0eUluVHJlZShjLGEucGFyZW50RWxlbWVudCwhMCk6bnVsbCl9fSxkZXBzOltdfSx7cHJvdmlkZTpPdGUsdXNlQ2xhc3M6TkIsZGVwczpbVW8sVkIs'@;
put 'QU9dfSx7cHJvdmlkZTpOQix1c2VDbGFzczpOQixkZXBzOltVbyxWQixBT119XSxZbmU9W3twcm92aWRlOkptLHVzZVZhbHVlOiJyb290In0se3Byb3ZpZGU6UjIsdXNlRmFjdG9yeTpmdW5jdGlvbiBoYmUoKXtyZXR1cm4gbmV3IFIyfSxkZXBzOltdfSx7cHJvdmlkZTp2aix1c2VDbGFzczpz'@;
put 'YmUsbXVsdGk6ITAsZGVwczpbRmEsVW8scWFdfSx7cHJvdmlkZTp2aix1c2VDbGFzczpmYmUsbXVsdGk6ITAsZGVwczpbRmFdfSx3aixGbmUsTG5lLHtwcm92aWRlOkhwLHVzZUV4aXN0aW5nOndqfSx7cHJvdmlkZTpUbmUsdXNlQ2xhc3M6UXllLGRlcHM6W119LFtdXTtsZXQgV25lPSgoKT0+'@;
put 'e2NsYXNzIGx7Y29uc3RydWN0b3IoYSl7fXN0YXRpYyB3aXRoU2VydmVyVHJhbnNpdGlvbihhKXtyZXR1cm57bmdNb2R1bGU6bCxwcm92aWRlcnM6W3twcm92aWRlOk44LHVzZVZhbHVlOmEuYXBwSWR9XX19fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwp'@;
put 'KHNyKGdiZSwxMikpfSxsLlx1MDI3NW1vZD1EaSh7dHlwZTpsfSksbC5cdTAyNzVpbmo9eGkoe3Byb3ZpZGVyczpbLi4uWW5lLC4uLlpuZV0saW1wb3J0czpbYm8sSzdlXX0pLGx9KSgpLEduZT0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEpe3RoaXMuX2RvYz1hfWdldFRpdGxlKCl7cmV0'@;
put 'dXJuIHRoaXMuX2RvYy50aXRsZX1zZXRUaXRsZShhKXt0aGlzLl9kb2MudGl0bGU9YXx8IiJ9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHNyKEZhKSl9LGwuXHUwMjc1cHJvdj1ocih7dG9rZW46bCxmYWN0b3J5OmZ1bmN0aW9uKGEpe2xldCBmPW51'@;
put 'bGw7cmV0dXJuIGY9YT9uZXcgYTpmdW5jdGlvbiB5YmUoKXtyZXR1cm4gbmV3IEduZShzcihGYSkpfSgpLGZ9LHByb3ZpZGVkSW46InJvb3QifSksbH0pKCk7dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdztUKDc0MDkyKSxUKDM0MjA5KTtjb25zdCBraj17ZmlsdGVyOntjb2xzOltdLHZhbHM6'@;
put 'W10sZ3JvdXBMb2dpYzoiIix3aGVyZUNsYXVzZToiIixsaWJkczoiIixjbGF1c2VzOltdLHF1ZXJ5OltdfX0sSm49e3Jvb3RQYXJhbToiIixlZGl0b3I6e3N0YXJ0dXBTZXQ6ITEsdHJlZU5vZGVMaWJyYXJpZXM6W10sbGlic0FuZFRhYmxlczpbXSxsaWJyYXJpZXM6W10sbGlicmFyeToiIix0'@;
put 'YWJsZToiIixmaWx0ZXI6e2NvbHM6W10sdmFsczpbXSxncm91cExvZ2ljOiIiLHdoZXJlQ2xhdXNlOiIiLGxpYmRzOiIiLGNsYXVzZXM6W10scXVlcnk6W119fSx2aWV3ZXI6e3N0YXJ0dXBTZXQ6ITEsdGFibGVzU2V0OiExLGxpYnJhcmllczpbXSx0YWJsZXM6bnVsbCxsaWJyYXJ5OiIiLHRh'@;
put 'YmxlOiIiLGxpYmluZm86W10sbGlicmFyaWVzU2VhcmNoOiIiLGZpbHRlcjp7Y29sczpbXSx2YWxzOltdLGdyb3VwTG9naWM6IiIsd2hlcmVDbGF1c2U6IiIsbGliZHM6IiIsY2xhdXNlczpbXSxxdWVyeTpbXX0sY3VycmVudFNlbGVjdGlvbjoiIn0sdmlld2JveGVzOnt9LGxpbmVhZ2U6e2xp'@;
put 'YnJhcnlMaXN0OltdLHRhYmxlc0xpc3Q6W10sY29sdW1uc0xpc3Q6W10sbGlicmFyaWVzU2VhcmNoOiIiLGxpYjoiIix0YWJsZToiIixjb2x1bW46IiIsY3VycmVudExpbmVhZ2VQYXRoTGliVGFibGU6IiIsY3VycmVudExpbmVhZ2VQYXRoQ29sdW1uOiIifSxtZXRhZGF0YTp7bWV0YURhdGFM'@;
put 'aXN0OnZvaWQgMCxtZXRhRGF0YVNlYXJjaDoiIixtZXRhT2JqZWN0TGlzdDpbXSxtZXRhT2JqZWN0U2VhcmNoOiIiLG1ldGFSZXBvc2l0b3JpZXM6dm9pZCAwLHNlbGVjdGVkUmVwb3NpdG9yeToiIn0sdml5YUFwaTp7Y29sbGVjdGlvbnNMaXN0OnZvaWQgMCxjb2xsZWN0aW9uc1NlYXJjaDoi'@;
put 'IixzZWxlY3RlZFJlcG9zaXRvcnk6IiJ9LHVzZXJuYXY6e3VzZXJMaXN0OnZvaWQgMCx1c2VyU2VhcmNoOiIiLGdyb3VwTGlzdDp2b2lkIDAsZ3JvdXBTZWFyY2g6IiIscm9sZUxpc3Q6dm9pZCAwLHJvbGVTZWFyY2g6IiJ9LG9wZXJhdG9yczp7bnVtT3BlcmF0b3JzOlsiPSIsIjwiLCI+Iiwi'@;
put 'PD0iLCI+PSIsIkJFVFdFRU4iLCJJTiIsIk5PVCBJTiIsIk5FIl0sY2hhck9wZXJhdG9yczpbIj0iLCI8IiwiPiIsIjw9IiwiPj0iLCJDT05UQUlOUyIsIklOIiwiTk9UIElOIiwiTkUiXX19O3ZhciBLbz1UKDE2Njc2KSxYbmU9VC5uKEtvKTtmdW5jdGlvbiBKbmUobCxjLGEsZixkLGgsbSl7'@;
put 'dHJ5e3ZhciBfPWxbaF0obSksTz1fLnZhbHVlfWNhdGNoKFgpe3JldHVybiB2b2lkIGEoWCl9Xy5kb25lP2MoTyk6UHJvbWlzZS5yZXNvbHZlKE8pLnRoZW4oZixkKX1mdW5jdGlvbiB5aShsKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYz10aGlzLGE9YXJndW1lbnRzO3JldHVybiBuZXcgUHJv'@;
put 'bWlzZShmdW5jdGlvbihmLGQpe3ZhciBoPWwuYXBwbHkoYyxhKTtmdW5jdGlvbiBtKE8pe0puZShoLGYsZCxtLF8sIm5leHQiLE8pfWZ1bmN0aW9uIF8oTyl7Sm5lKGgsZixkLG0sXywidGhyb3ciLE8pfW0odm9pZCAwKX0pfX1mdW5jdGlvbiBFaihsKXtyZXR1cm4hIWwmJihsIGluc3RhbmNl'@;
put 'b2YgQmV8fEcobC5saWZ0KSYmRyhsLnN1YnNjcmliZSkpfWNvbnN0e2lzQXJyYXk6U2JlfT1BcnJheSx7Z2V0UHJvdG90eXBlT2Y6TWJlLHByb3RvdHlwZTprYmUsa2V5czpFYmV9PU9iamVjdDtmdW5jdGlvbiBRbmUobCl7aWYoMT09PWwubGVuZ3RoKXtjb25zdCBjPWxbMF07aWYoU2JlKGMp'@;
put 'KXJldHVybnthcmdzOmMsa2V5czpudWxsfTtpZihmdW5jdGlvbiB4YmUobCl7cmV0dXJuIGwmJiJvYmplY3QiPT10eXBlb2YgbCYmTWJlKGwpPT09a2JlfShjKSl7Y29uc3QgYT1FYmUoYyk7cmV0dXJue2FyZ3M6YS5tYXAoZj0+Y1tmXSksa2V5czphfX19cmV0dXJue2FyZ3M6bCxrZXlzOm51'@;
put 'bGx9fWNvbnN0e2lzQXJyYXk6QWJlfT1BcnJheTtmdW5jdGlvbiB4aihsKXtyZXR1cm4gRWUoYz0+ZnVuY3Rpb24gVGJlKGwsYyl7cmV0dXJuIEFiZShjKT9sKC4uLmMpOmwoYyl9KGwsYykpfWZ1bmN0aW9uIGVyZShsLGMpe3JldHVybiBsLnJlZHVjZSgoYSxmLGQpPT4oYVtmXT1jW2RdLGEp'@;
put 'LHt9KX1mdW5jdGlvbiBDdiguLi5sKXtjb25zdCBjPVgwKGwpLGE9QnUobCkse2FyZ3M6ZixrZXlzOmR9PVFuZShsKTtpZigwPT09Zi5sZW5ndGgpcmV0dXJuIG5sKFtdLGMpO2NvbnN0IGg9bmV3IEJlKGZ1bmN0aW9uIE9iZShsLGMsYT1GZSl7cmV0dXJuIGY9Pnt0cmUoYywoKT0+e2NvbnN0'@;
put 'e2xlbmd0aDpkfT1sLGg9bmV3IEFycmF5KGQpO2xldCBtPWQsXz1kO2ZvcihsZXQgTz0wO088ZDtPKyspdHJlKGMsKCk9Pntjb25zdCBYPW5sKGxbT10sYyk7bGV0IGFlPSExO1guc3Vic2NyaWJlKHFlKGYscGU9PntoW09dPXBlLGFlfHwoYWU9ITAsXy0tKSxffHxmLm5leHQoYShoLnNsaWNl'@;
put 'KCkpKX0sKCk9PnstLW18fGYuY29tcGxldGUoKX0pKX0sZil9LGYpfX0oZixjLGQ/bT0+ZXJlKGQsbSk6RmUpKTtyZXR1cm4gYT9oLnBpcGUoeGooYSkpOmh9ZnVuY3Rpb24gdHJlKGwsYyxhKXtsP1hpKGEsbCxjKTpjKCl9Y29uc3QgR089VyhsPT5mdW5jdGlvbigpe2wodGhpcyksdGhpcy5u'@;
put 'YW1lPSJFbXB0eUVycm9yIix0aGlzLm1lc3NhZ2U9Im5vIGVsZW1lbnRzIGluIHNlcXVlbmNlIn0pO2Z1bmN0aW9uICRPKC4uLmwpe3JldHVybiBmdW5jdGlvbiBEYmUoKXtyZXR1cm4gRmkoMSl9KCkobmwobCxYMChsKSkpfWZ1bmN0aW9uIG5yZShsKXtyZXR1cm4gbmV3IEJlKGM9PntKcihs'@;
put 'KCkpLnN1YnNjcmliZShjKX0pfWZ1bmN0aW9uIGRDKGwsYyl7Y29uc3QgYT1HKGwpP2w6KCk9PmwsZj1kPT5kLmVycm9yKGEoKSk7cmV0dXJuIG5ldyBCZShjP2Q9PmMuc2NoZWR1bGUoZiwwLGQpOmYpfWZ1bmN0aW9uIEFqKCl7cmV0dXJuIG50KChsLGMpPT57bGV0IGE9bnVsbDtsLl9yZWZD'@;
put 'b3VudCsrO2NvbnN0IGY9cWUoYyx2b2lkIDAsdm9pZCAwLHZvaWQgMCwoKT0+e2lmKCFsfHxsLl9yZWZDb3VudDw9MHx8MDwtLWwuX3JlZkNvdW50KXJldHVybiB2b2lkKGE9bnVsbCk7Y29uc3QgZD1sLl9jb25uZWN0aW9uLGg9YTthPW51bGwsZCYmKCFofHxkPT09aCkmJmQudW5zdWJzY3Jp'@;
put 'YmUoKSxjLnVuc3Vic2NyaWJlKCl9KTtsLnN1YnNjcmliZShmKSxmLmNsb3NlZHx8KGE9bC5jb25uZWN0KCkpfSl9Y2xhc3MgcnJlIGV4dGVuZHMgQmV7Y29uc3RydWN0b3IoYyxhKXtzdXBlcigpLHRoaXMuc291cmNlPWMsdGhpcy5zdWJqZWN0RmFjdG9yeT1hLHRoaXMuX3N1YmplY3Q9bnVs'@;
put 'bCx0aGlzLl9yZWZDb3VudD0wLHRoaXMuX2Nvbm5lY3Rpb249bnVsbCxldChjKSYmKHRoaXMubGlmdD1jLmxpZnQpfV9zdWJzY3JpYmUoYyl7cmV0dXJuIHRoaXMuZ2V0U3ViamVjdCgpLnN1YnNjcmliZShjKX1nZXRTdWJqZWN0KCl7Y29uc3QgYz10aGlzLl9zdWJqZWN0O3JldHVybighY3x8'@;
put 'Yy5pc1N0b3BwZWQpJiYodGhpcy5fc3ViamVjdD10aGlzLnN1YmplY3RGYWN0b3J5KCkpLHRoaXMuX3N1YmplY3R9X3RlYXJkb3duKCl7dGhpcy5fcmVmQ291bnQ9MDtjb25zdHtfY29ubmVjdGlvbjpjfT10aGlzO3RoaXMuX3N1YmplY3Q9dGhpcy5fY29ubmVjdGlvbj1udWxsLGM/LnVuc3Vi'@;
put 'c2NyaWJlKCl9Y29ubmVjdCgpe2xldCBjPXRoaXMuX2Nvbm5lY3Rpb247aWYoIWMpe2M9dGhpcy5fY29ubmVjdGlvbj1uZXcgdGU7Y29uc3QgYT10aGlzLmdldFN1YmplY3QoKTtjLmFkZCh0aGlzLnNvdXJjZS5zdWJzY3JpYmUocWUoYSx2b2lkIDAsKCk9Pnt0aGlzLl90ZWFyZG93bigpLGEu'@;
put 'Y29tcGxldGUoKX0sZj0+e3RoaXMuX3RlYXJkb3duKCksYS5lcnJvcihmKX0sKCk9PnRoaXMuX3RlYXJkb3duKCkpKSksYy5jbG9zZWQmJih0aGlzLl9jb25uZWN0aW9uPW51bGwsYz10ZS5FTVBUWSl9cmV0dXJuIGN9cmVmQ291bnQoKXtyZXR1cm4gQWooKSh0aGlzKX19ZnVuY3Rpb24gRWYo'@;
put 'bCl7cmV0dXJuIGw8PTA/KCk9PkhvOm50KChjLGEpPT57bGV0IGY9MDtjLnN1YnNjcmliZShxZShhLGQ9PnsrK2Y8PWwmJihhLm5leHQoZCksbDw9ZiYmYS5jb21wbGV0ZSgpKX0pKX0pfWZ1bmN0aW9uIHQ0KC4uLmwpe2NvbnN0IGM9WDAobCk7cmV0dXJuIG50KChhLGYpPT57KGM/JE8obCxh'@;
put 'LGMpOiRPKGwsYSkpLnN1YnNjcmliZShmKX0pfWZ1bmN0aW9uIElsKGwsYyl7cmV0dXJuIG50KChhLGYpPT57bGV0IGQ9MDthLnN1YnNjcmliZShxZShmLGg9PmwuY2FsbChjLGgsZCsrKSYmZi5uZXh0KGgpKSl9KX1mdW5jdGlvbiBLTyhsKXtyZXR1cm4gbnQoKGMsYSk9PntsZXQgZj0hMTtj'@;
put 'LnN1YnNjcmliZShxZShhLGQ9PntmPSEwLGEubmV4dChkKX0sKCk9PntmfHxhLm5leHQobCksYS5jb21wbGV0ZSgpfSkpfSl9ZnVuY3Rpb24gaXJlKGw9SWJlKXtyZXR1cm4gbnQoKGMsYSk9PntsZXQgZj0hMTtjLnN1YnNjcmliZShxZShhLGQ9PntmPSEwLGEubmV4dChkKX0sKCk9PmY/YS5j'@;
put 'b21wbGV0ZSgpOmEuZXJyb3IobCgpKSkpfSl9ZnVuY3Rpb24gSWJlKCl7cmV0dXJuIG5ldyBHT31mdW5jdGlvbiBuNChsLGMpe2NvbnN0IGE9YXJndW1lbnRzLmxlbmd0aD49MjtyZXR1cm4gZj0+Zi5waXBlKGw/SWwoKGQsaCk9PmwoZCxoLGYpKTpGZSxFZigxKSxhP0tPKGMpOmlyZSgoKT0+'@;
put 'bmV3IEdPKSl9ZnVuY3Rpb24gU3YobCxjKXtyZXR1cm4gRyhjKT9fcihsLGMsMSk6X3IobCwxKX1mdW5jdGlvbiBxdShsLGMsYSl7Y29uc3QgZj1HKGwpfHxjfHxhP3tuZXh0OmwsZXJyb3I6Yyxjb21wbGV0ZTphfTpsO3JldHVybiBmP250KChkLGgpPT57dmFyIG07bnVsbD09PShtPWYuc3Vi'@;
put 'c2NyaWJlKXx8dm9pZCAwPT09bXx8bS5jYWxsKGYpO2xldCBfPSEwO2Quc3Vic2NyaWJlKHFlKGgsTz0+e3ZhciBYO251bGw9PT0oWD1mLm5leHQpfHx2b2lkIDA9PT1YfHxYLmNhbGwoZixPKSxoLm5leHQoTyl9LCgpPT57dmFyIE87Xz0hMSxudWxsPT09KE89Zi5jb21wbGV0ZSl8fHZvaWQg'@;
put 'MD09PU98fE8uY2FsbChmKSxoLmNvbXBsZXRlKCl9LE89Pnt2YXIgWDtfPSExLG51bGw9PT0oWD1mLmVycm9yKXx8dm9pZCAwPT09WHx8WC5jYWxsKGYsTyksaC5lcnJvcihPKX0sKCk9Pnt2YXIgTyxYO18mJihudWxsPT09KE89Zi51bnN1YnNjcmliZSl8fHZvaWQgMD09PU98fE8uY2FsbChm'@;
put 'KSksbnVsbD09PShYPWYuZmluYWxpemUpfHx2b2lkIDA9PT1YfHxYLmNhbGwoZil9KSl9KTpGZX1mdW5jdGlvbiBrZyhsKXtyZXR1cm4gbnQoKGMsYSk9PntsZXQgaCxmPW51bGwsZD0hMTtmPWMuc3Vic2NyaWJlKHFlKGEsdm9pZCAwLHZvaWQgMCxtPT57aD1KcihsKG0sa2cobCkoYykpKSxm'@;
put 'PyhmLnVuc3Vic2NyaWJlKCksZj1udWxsLGguc3Vic2NyaWJlKGEpKTpkPSEwfSkpLGQmJihmLnVuc3Vic2NyaWJlKCksZj1udWxsLGguc3Vic2NyaWJlKGEpKX0pfWZ1bmN0aW9uIFRqKGwpe3JldHVybiBsPD0wPygpPT5IbzpudCgoYyxhKT0+e2xldCBmPVtdO2Muc3Vic2NyaWJlKHFlKGEs'@;
put 'ZD0+e2YucHVzaChkKSxsPGYubGVuZ3RoJiZmLnNoaWZ0KCl9LCgpPT57Zm9yKGNvbnN0IGQgb2YgZilhLm5leHQoZCk7YS5jb21wbGV0ZSgpfSx2b2lkIDAsKCk9PntmPW51bGx9KSl9KX1mdW5jdGlvbiBoQyhsKXtyZXR1cm4gbnQoKGMsYSk9Pnt0cnl7Yy5zdWJzY3JpYmUoYSl9ZmluYWxs'@;
put 'eXthLmFkZChsKX19KX1jb25zdCBkYT0icHJpbWFyeSIscEM9U3ltYm9sKCJSb3V0ZVRpdGxlIik7Y2xhc3MgRmJle2NvbnN0cnVjdG9yKGMpe3RoaXMucGFyYW1zPWN8fHt9fWhhcyhjKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMucGFyYW1zLGMp'@;
put 'fWdldChjKXtpZih0aGlzLmhhcyhjKSl7Y29uc3QgYT10aGlzLnBhcmFtc1tjXTtyZXR1cm4gQXJyYXkuaXNBcnJheShhKT9hWzBdOmF9cmV0dXJuIG51bGx9Z2V0QWxsKGMpe2lmKHRoaXMuaGFzKGMpKXtjb25zdCBhPXRoaXMucGFyYW1zW2NdO3JldHVybiBBcnJheS5pc0FycmF5KGEpP2E6'@;
put 'W2FdfXJldHVybltdfWdldCBrZXlzKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMucGFyYW1zKX19ZnVuY3Rpb24gTXYobCl7cmV0dXJuIG5ldyBGYmUobCl9ZnVuY3Rpb24gSGJlKGwsYyxhKXtjb25zdCBmPWEucGF0aC5zcGxpdCgiLyIpO2lmKGYubGVuZ3RoPmwubGVuZ3RofHwiZnVsbCI9'@;
put 'PT1hLnBhdGhNYXRjaCYmKGMuaGFzQ2hpbGRyZW4oKXx8Zi5sZW5ndGg8bC5sZW5ndGgpKXJldHVybiBudWxsO2NvbnN0IGQ9e307Zm9yKGxldCBoPTA7aDxmLmxlbmd0aDtoKyspe2NvbnN0IG09ZltoXSxfPWxbaF07aWYobS5zdGFydHNXaXRoKCI6IikpZFttLnN1YnN0cmluZygxKV09Xztl'@;
put 'bHNlIGlmKG0hPT1fLnBhdGgpcmV0dXJuIG51bGx9cmV0dXJue2NvbnN1bWVkOmwuc2xpY2UoMCxmLmxlbmd0aCkscG9zUGFyYW1zOmR9fWZ1bmN0aW9uIE1oKGwsYyl7Y29uc3QgYT1sP09iamVjdC5rZXlzKGwpOnZvaWQgMCxmPWM/T2JqZWN0LmtleXMoYyk6dm9pZCAwO2lmKCFhfHwhZnx8'@;
put 'YS5sZW5ndGghPWYubGVuZ3RoKXJldHVybiExO2xldCBkO2ZvcihsZXQgaD0wO2g8YS5sZW5ndGg7aCsrKWlmKGQ9YVtoXSwhYXJlKGxbZF0sY1tkXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gYXJlKGwsYyl7aWYoQXJyYXkuaXNBcnJheShsKSYmQXJyYXkuaXNBcnJheShjKSl7aWYo'@;
put 'bC5sZW5ndGghPT1jLmxlbmd0aClyZXR1cm4hMTtjb25zdCBhPVsuLi5sXS5zb3J0KCksZj1bLi4uY10uc29ydCgpO3JldHVybiBhLmV2ZXJ5KChkLGgpPT5mW2hdPT09ZCl9cmV0dXJuIGw9PT1jfWZ1bmN0aW9uIGxyZShsKXtyZXR1cm4gbC5sZW5ndGg+MD9sW2wubGVuZ3RoLTFdOm51bGx9'@;
put 'ZnVuY3Rpb24gcjQobCl7cmV0dXJuIEVqKGwpP2w6cGcobCk/bmwoUHJvbWlzZS5yZXNvbHZlKGwpKTpHaShsKX1jb25zdCBWYmU9e2V4YWN0OmZ1bmN0aW9uIGNyZShsLGMsYSl7aWYoIUVnKGwuc2VnbWVudHMsYy5zZWdtZW50cyl8fCFxTyhsLnNlZ21lbnRzLGMuc2VnbWVudHMsYSl8fGwu'@;
put 'bnVtYmVyT2ZDaGlsZHJlbiE9PWMubnVtYmVyT2ZDaGlsZHJlbilyZXR1cm4hMTtmb3IoY29uc3QgZiBpbiBjLmNoaWxkcmVuKWlmKCFsLmNoaWxkcmVuW2ZdfHwhY3JlKGwuY2hpbGRyZW5bZl0sYy5jaGlsZHJlbltmXSxhKSlyZXR1cm4hMTtyZXR1cm4hMH0sc3Vic2V0OmZyZX0sc3JlPXtl'@;
put 'eGFjdDpmdW5jdGlvbiBCYmUobCxjKXtyZXR1cm4gTWgobCxjKX0sc3Vic2V0OmZ1bmN0aW9uIGpiZShsLGMpe3JldHVybiBPYmplY3Qua2V5cyhjKS5sZW5ndGg8PU9iamVjdC5rZXlzKGwpLmxlbmd0aCYmT2JqZWN0LmtleXMoYykuZXZlcnkoYT0+YXJlKGxbYV0sY1thXSkpfSxpZ25vcmVk'@;
put 'OigpPT4hMH07ZnVuY3Rpb24gdXJlKGwsYyxhKXtyZXR1cm4gVmJlW2EucGF0aHNdKGwucm9vdCxjLnJvb3QsYS5tYXRyaXhQYXJhbXMpJiZzcmVbYS5xdWVyeVBhcmFtc10obC5xdWVyeVBhcmFtcyxjLnF1ZXJ5UGFyYW1zKSYmISgiZXhhY3QiPT09YS5mcmFnbWVudCYmbC5mcmFnbWVudCE9'@;
put 'PWMuZnJhZ21lbnQpfWZ1bmN0aW9uIGZyZShsLGMsYSl7cmV0dXJuIGRyZShsLGMsYy5zZWdtZW50cyxhKX1mdW5jdGlvbiBkcmUobCxjLGEsZil7aWYobC5zZWdtZW50cy5sZW5ndGg+YS5sZW5ndGgpe2NvbnN0IGQ9bC5zZWdtZW50cy5zbGljZSgwLGEubGVuZ3RoKTtyZXR1cm4hKCFFZyhk'@;
put 'LGEpfHxjLmhhc0NoaWxkcmVuKCl8fCFxTyhkLGEsZikpfWlmKGwuc2VnbWVudHMubGVuZ3RoPT09YS5sZW5ndGgpe2lmKCFFZyhsLnNlZ21lbnRzLGEpfHwhcU8obC5zZWdtZW50cyxhLGYpKXJldHVybiExO2Zvcihjb25zdCBkIGluIGMuY2hpbGRyZW4paWYoIWwuY2hpbGRyZW5bZF18fCFm'@;
put 'cmUobC5jaGlsZHJlbltkXSxjLmNoaWxkcmVuW2RdLGYpKXJldHVybiExO3JldHVybiEwfXtjb25zdCBkPWEuc2xpY2UoMCxsLnNlZ21lbnRzLmxlbmd0aCksaD1hLnNsaWNlKGwuc2VnbWVudHMubGVuZ3RoKTtyZXR1cm4hIShFZyhsLnNlZ21lbnRzLGQpJiZxTyhsLnNlZ21lbnRzLGQsZikm'@;
put 'JmwuY2hpbGRyZW5bZGFdKSYmZHJlKGwuY2hpbGRyZW5bZGFdLGMsaCxmKX19ZnVuY3Rpb24gcU8obCxjLGEpe3JldHVybiBjLmV2ZXJ5KChmLGQpPT5zcmVbYV0obFtkXS5wYXJhbWV0ZXJzLGYucGFyYW1ldGVycykpfWNsYXNzIGt2e2NvbnN0cnVjdG9yKGM9bmV3IENsKFtdLHt9KSxhPXt9'@;
put 'LGY9bnVsbCl7dGhpcy5yb290PWMsdGhpcy5xdWVyeVBhcmFtcz1hLHRoaXMuZnJhZ21lbnQ9Zn1nZXQgcXVlcnlQYXJhbU1hcCgpe3JldHVybiB0aGlzLl9xdWVyeVBhcmFtTWFwfHwodGhpcy5fcXVlcnlQYXJhbU1hcD1Ndih0aGlzLnF1ZXJ5UGFyYW1zKSksdGhpcy5fcXVlcnlQYXJhbU1h'@;
put 'cH10b1N0cmluZygpe3JldHVybiBaYmUuc2VyaWFsaXplKHRoaXMpfX1jbGFzcyBDbHtjb25zdHJ1Y3RvcihjLGEpe3RoaXMuc2VnbWVudHM9Yyx0aGlzLmNoaWxkcmVuPWEsdGhpcy5wYXJlbnQ9bnVsbCxPYmplY3QudmFsdWVzKGEpLmZvckVhY2goZj0+Zi5wYXJlbnQ9dGhpcyl9aGFzQ2hp'@;
put 'bGRyZW4oKXtyZXR1cm4gdGhpcy5udW1iZXJPZkNoaWxkcmVuPjB9Z2V0IG51bWJlck9mQ2hpbGRyZW4oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5jaGlsZHJlbikubGVuZ3RofXRvU3RyaW5nKCl7cmV0dXJuIFhPKHRoaXMpfX1jbGFzcyBtQ3tjb25zdHJ1Y3RvcihjLGEpe3RoaXMucGF0'@;
put 'aD1jLHRoaXMucGFyYW1ldGVycz1hfWdldCBwYXJhbWV0ZXJNYXAoKXtyZXR1cm4gdGhpcy5fcGFyYW1ldGVyTWFwfHwodGhpcy5fcGFyYW1ldGVyTWFwPU12KHRoaXMucGFyYW1ldGVycykpLHRoaXMuX3BhcmFtZXRlck1hcH10b1N0cmluZygpe3JldHVybiBtcmUodGhpcyl9fWZ1bmN0aW9u'@;
put 'IEVnKGwsYyl7cmV0dXJuIGwubGVuZ3RoPT09Yy5sZW5ndGgmJmwuZXZlcnkoKGEsZik9PmEucGF0aD09PWNbZl0ucGF0aCl9bGV0IGdDPSgoKT0+e2NsYXNzIGx7fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NXByb3Y9aHIoe3Rva2Vu'@;
put 'OmwsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgT2p9LHByb3ZpZGVkSW46InJvb3QifSksbH0pKCk7Y2xhc3MgT2p7cGFyc2UoYyl7Y29uc3QgYT1uZXcgdF9lKGMpO3JldHVybiBuZXcga3YoYS5wYXJzZVJvb3RTZWdtZW50KCksYS5wYXJzZVF1ZXJ5UGFyYW1zKCksYS5wYXJzZUZy'@;
put 'YWdtZW50KCkpfXNlcmlhbGl6ZShjKXtjb25zdCBhPWAvJHt2QyhjLnJvb3QsITApfWAsZj1mdW5jdGlvbiBHYmUobCl7Y29uc3QgYz1PYmplY3Qua2V5cyhsKS5tYXAoYT0+e2NvbnN0IGY9bFthXTtyZXR1cm4gQXJyYXkuaXNBcnJheShmKT9mLm1hcChkPT5gJHtKTyhhKX09JHtKTyhkKX1g'@;
put 'KS5qb2luKCImIik6YCR7Sk8oYSl9PSR7Sk8oZil9YH0pLmZpbHRlcihhPT4hIWEpO3JldHVybiBjLmxlbmd0aD9gPyR7Yy5qb2luKCImIil9YDoiIn0oYy5xdWVyeVBhcmFtcyk7cmV0dXJuYCR7YX0ke2Z9JHsic3RyaW5nIj09dHlwZW9mIGMuZnJhZ21lbnQ/YCMke2Z1bmN0aW9uIFliZShs'@;
put 'KXtyZXR1cm4gZW5jb2RlVVJJKGwpfShjLmZyYWdtZW50KX1gOiIifWB9fWNvbnN0IFpiZT1uZXcgT2o7ZnVuY3Rpb24gWE8obCl7cmV0dXJuIGwuc2VnbWVudHMubWFwKGM9Pm1yZShjKSkuam9pbigiLyIpfWZ1bmN0aW9uIHZDKGwsYyl7aWYoIWwuaGFzQ2hpbGRyZW4oKSlyZXR1cm4gWE8o'@;
put 'bCk7aWYoYyl7Y29uc3QgYT1sLmNoaWxkcmVuW2RhXT92QyhsLmNoaWxkcmVuW2RhXSwhMSk6IiIsZj1bXTtyZXR1cm4gT2JqZWN0LmVudHJpZXMobC5jaGlsZHJlbikuZm9yRWFjaCgoW2QsaF0pPT57ZCE9PWRhJiZmLnB1c2goYCR7ZH06JHt2QyhoLCExKX1gKX0pLGYubGVuZ3RoPjA/YCR7'@;
put 'YX0oJHtmLmpvaW4oIi8vIil9KWA6YX17Y29uc3QgYT1mdW5jdGlvbiBVYmUobCxjKXtsZXQgYT1bXTtyZXR1cm4gT2JqZWN0LmVudHJpZXMobC5jaGlsZHJlbikuZm9yRWFjaCgoW2YsZF0pPT57Zj09PWRhJiYoYT1hLmNvbmNhdChjKGQsZikpKX0pLE9iamVjdC5lbnRyaWVzKGwuY2hpbGRy'@;
put 'ZW4pLmZvckVhY2goKFtmLGRdKT0+e2YhPT1kYSYmKGE9YS5jb25jYXQoYyhkLGYpKSl9KSxhfShsLChmLGQpPT5kPT09ZGE/W3ZDKGwuY2hpbGRyZW5bZGFdLCExKV06W2Ake2R9OiR7dkMoZiwhMSl9YF0pO3JldHVybiAxPT09T2JqZWN0LmtleXMobC5jaGlsZHJlbikubGVuZ3RoJiZudWxs'@;
put 'IT1sLmNoaWxkcmVuW2RhXT9gJHtYTyhsKX0vJHthWzBdfWA6YCR7WE8obCl9Lygke2Euam9pbigiLy8iKX0pYH19ZnVuY3Rpb24gaHJlKGwpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQobCkucmVwbGFjZSgvJTQwL2csIkAiKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQv'@;
put 'ZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpfWZ1bmN0aW9uIEpPKGwpe3JldHVybiBocmUobCkucmVwbGFjZSgvJTNCL2dpLCI7Iil9ZnVuY3Rpb24gRGoobCl7cmV0dXJuIGhyZShsKS5yZXBsYWNlKC9cKC9nLCIlMjgiKS5yZXBsYWNlKC9cKS9nLCIlMjkiKS5yZXBsYWNlKC8lMjYvZ2ks'@;
put 'IiYiKX1mdW5jdGlvbiBRTyhsKXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGwpfWZ1bmN0aW9uIHByZShsKXtyZXR1cm4gUU8obC5yZXBsYWNlKC9cKy9nLCIlMjAiKSl9ZnVuY3Rpb24gbXJlKGwpe3JldHVybmAke0RqKGwucGF0aCl9JHtmdW5jdGlvbiBXYmUobCl7cmV0dXJuIE9iamVj'@;
put 'dC5rZXlzKGwpLm1hcChjPT5gOyR7RGooYyl9PSR7RGoobFtjXSl9YCkuam9pbigiIil9KGwucGFyYW1ldGVycyl9YH1jb25zdCAkYmU9L15bXlwvKCk/OyNdKy87ZnVuY3Rpb24gSWoobCl7Y29uc3QgYz1sLm1hdGNoKCRiZSk7cmV0dXJuIGM/Y1swXToiIn1jb25zdCBLYmU9L15bXlwvKCk/'@;
put 'Oz0jXSsvLFhiZT0vXltePT8mI10rLyxRYmU9L15bXiYjXSsvO2NsYXNzIHRfZXtjb25zdHJ1Y3RvcihjKXt0aGlzLnVybD1jLHRoaXMucmVtYWluaW5nPWN9cGFyc2VSb290U2VnbWVudCgpe3JldHVybiB0aGlzLmNvbnN1bWVPcHRpb25hbCgiLyIpLCIiPT09dGhpcy5yZW1haW5pbmd8fHRo'@;
put 'aXMucGVla1N0YXJ0c1dpdGgoIj8iKXx8dGhpcy5wZWVrU3RhcnRzV2l0aCgiIyIpP25ldyBDbChbXSx7fSk6bmV3IENsKFtdLHRoaXMucGFyc2VDaGlsZHJlbigpKX1wYXJzZVF1ZXJ5UGFyYW1zKCl7Y29uc3QgYz17fTtpZih0aGlzLmNvbnN1bWVPcHRpb25hbCgiPyIpKWRve3RoaXMucGFy'@;
put 'c2VRdWVyeVBhcmFtKGMpfXdoaWxlKHRoaXMuY29uc3VtZU9wdGlvbmFsKCImIikpO3JldHVybiBjfXBhcnNlRnJhZ21lbnQoKXtyZXR1cm4gdGhpcy5jb25zdW1lT3B0aW9uYWwoIiMiKT9kZWNvZGVVUklDb21wb25lbnQodGhpcy5yZW1haW5pbmcpOm51bGx9cGFyc2VDaGlsZHJlbigpe2lm'@;
put 'KCIiPT09dGhpcy5yZW1haW5pbmcpcmV0dXJue307dGhpcy5jb25zdW1lT3B0aW9uYWwoIi8iKTtjb25zdCBjPVtdO2Zvcih0aGlzLnBlZWtTdGFydHNXaXRoKCIoIil8fGMucHVzaCh0aGlzLnBhcnNlU2VnbWVudCgpKTt0aGlzLnBlZWtTdGFydHNXaXRoKCIvIikmJiF0aGlzLnBlZWtTdGFy'@;
put 'dHNXaXRoKCIvLyIpJiYhdGhpcy5wZWVrU3RhcnRzV2l0aCgiLygiKTspdGhpcy5jYXB0dXJlKCIvIiksYy5wdXNoKHRoaXMucGFyc2VTZWdtZW50KCkpO2xldCBhPXt9O3RoaXMucGVla1N0YXJ0c1dpdGgoIi8oIikmJih0aGlzLmNhcHR1cmUoIi8iKSxhPXRoaXMucGFyc2VQYXJlbnMoITAp'@;
put 'KTtsZXQgZj17fTtyZXR1cm4gdGhpcy5wZWVrU3RhcnRzV2l0aCgiKCIpJiYoZj10aGlzLnBhcnNlUGFyZW5zKCExKSksKGMubGVuZ3RoPjB8fE9iamVjdC5rZXlzKGEpLmxlbmd0aD4wKSYmKGZbZGFdPW5ldyBDbChjLGEpKSxmfXBhcnNlU2VnbWVudCgpe2NvbnN0IGM9SWoodGhpcy5yZW1h'@;
put 'aW5pbmcpO2lmKCIiPT09YyYmdGhpcy5wZWVrU3RhcnRzV2l0aCgiOyIpKXRocm93IG5ldyBJcig0MDA5LCExKTtyZXR1cm4gdGhpcy5jYXB0dXJlKGMpLG5ldyBtQyhRTyhjKSx0aGlzLnBhcnNlTWF0cml4UGFyYW1zKCkpfXBhcnNlTWF0cml4UGFyYW1zKCl7Y29uc3QgYz17fTtmb3IoO3Ro'@;
put 'aXMuY29uc3VtZU9wdGlvbmFsKCI7Iik7KXRoaXMucGFyc2VQYXJhbShjKTtyZXR1cm4gY31wYXJzZVBhcmFtKGMpe2NvbnN0IGE9ZnVuY3Rpb24gcWJlKGwpe2NvbnN0IGM9bC5tYXRjaChLYmUpO3JldHVybiBjP2NbMF06IiJ9KHRoaXMucmVtYWluaW5nKTtpZighYSlyZXR1cm47dGhpcy5j'@;
put 'YXB0dXJlKGEpO2xldCBmPSIiO2lmKHRoaXMuY29uc3VtZU9wdGlvbmFsKCI9Iikpe2NvbnN0IGQ9SWoodGhpcy5yZW1haW5pbmcpO2QmJihmPWQsdGhpcy5jYXB0dXJlKGYpKX1jW1FPKGEpXT1RTyhmKX1wYXJzZVF1ZXJ5UGFyYW0oYyl7Y29uc3QgYT1mdW5jdGlvbiBKYmUobCl7Y29uc3Qg'@;
put 'Yz1sLm1hdGNoKFhiZSk7cmV0dXJuIGM/Y1swXToiIn0odGhpcy5yZW1haW5pbmcpO2lmKCFhKXJldHVybjt0aGlzLmNhcHR1cmUoYSk7bGV0IGY9IiI7aWYodGhpcy5jb25zdW1lT3B0aW9uYWwoIj0iKSl7Y29uc3QgbT1mdW5jdGlvbiBlX2UobCl7Y29uc3QgYz1sLm1hdGNoKFFiZSk7cmV0'@;
put 'dXJuIGM/Y1swXToiIn0odGhpcy5yZW1haW5pbmcpO20mJihmPW0sdGhpcy5jYXB0dXJlKGYpKX1jb25zdCBkPXByZShhKSxoPXByZShmKTtpZihjLmhhc093blByb3BlcnR5KGQpKXtsZXQgbT1jW2RdO0FycmF5LmlzQXJyYXkobSl8fChtPVttXSxjW2RdPW0pLG0ucHVzaChoKX1lbHNlIGNb'@;
put 'ZF09aH1wYXJzZVBhcmVucyhjKXtjb25zdCBhPXt9O2Zvcih0aGlzLmNhcHR1cmUoIigiKTshdGhpcy5jb25zdW1lT3B0aW9uYWwoIikiKSYmdGhpcy5yZW1haW5pbmcubGVuZ3RoPjA7KXtjb25zdCBmPUlqKHRoaXMucmVtYWluaW5nKSxkPXRoaXMucmVtYWluaW5nW2YubGVuZ3RoXTtpZigi'@;
put 'LyIhPT1kJiYiKSIhPT1kJiYiOyIhPT1kKXRocm93IG5ldyBJcig0MDEwLCExKTtsZXQgaDtmLmluZGV4T2YoIjoiKT4tMT8oaD1mLnNsaWNlKDAsZi5pbmRleE9mKCI6IikpLHRoaXMuY2FwdHVyZShoKSx0aGlzLmNhcHR1cmUoIjoiKSk6YyYmKGg9ZGEpO2NvbnN0IG09dGhpcy5wYXJzZUNo'@;
put 'aWxkcmVuKCk7YVtoXT0xPT09T2JqZWN0LmtleXMobSkubGVuZ3RoP21bZGFdOm5ldyBDbChbXSxtKSx0aGlzLmNvbnN1bWVPcHRpb25hbCgiLy8iKX1yZXR1cm4gYX1wZWVrU3RhcnRzV2l0aChjKXtyZXR1cm4gdGhpcy5yZW1haW5pbmcuc3RhcnRzV2l0aChjKX1jb25zdW1lT3B0aW9uYWwo'@;
put 'Yyl7cmV0dXJuISF0aGlzLnBlZWtTdGFydHNXaXRoKGMpJiYodGhpcy5yZW1haW5pbmc9dGhpcy5yZW1haW5pbmcuc3Vic3RyaW5nKGMubGVuZ3RoKSwhMCl9Y2FwdHVyZShjKXtpZighdGhpcy5jb25zdW1lT3B0aW9uYWwoYykpdGhyb3cgbmV3IElyKDQwMTEsITEpfX1mdW5jdGlvbiBncmUo'@;
put 'bCl7cmV0dXJuIGwuc2VnbWVudHMubGVuZ3RoPjA/bmV3IENsKFtdLHtbZGFdOmx9KTpsfWZ1bmN0aW9uIHZyZShsKXtjb25zdCBjPXt9O2Zvcihjb25zdCBmIG9mIE9iamVjdC5rZXlzKGwuY2hpbGRyZW4pKXtjb25zdCBoPXZyZShsLmNoaWxkcmVuW2ZdKTtpZihmPT09ZGEmJjA9PT1oLnNl'@;
put 'Z21lbnRzLmxlbmd0aCYmaC5oYXNDaGlsZHJlbigpKWZvcihjb25zdFttLF9db2YgT2JqZWN0LmVudHJpZXMoaC5jaGlsZHJlbikpY1ttXT1fO2Vsc2UoaC5zZWdtZW50cy5sZW5ndGg+MHx8aC5oYXNDaGlsZHJlbigpKSYmKGNbZl09aCl9cmV0dXJuIGZ1bmN0aW9uIG5fZShsKXtpZigxPT09'@;
put 'bC5udW1iZXJPZkNoaWxkcmVuJiZsLmNoaWxkcmVuW2RhXSl7Y29uc3QgYz1sLmNoaWxkcmVuW2RhXTtyZXR1cm4gbmV3IENsKGwuc2VnbWVudHMuY29uY2F0KGMuc2VnbWVudHMpLGMuY2hpbGRyZW4pfXJldHVybiBsfShuZXcgQ2wobC5zZWdtZW50cyxjKSl9ZnVuY3Rpb24geGcobCl7cmV0'@;
put 'dXJuIGwgaW5zdGFuY2VvZiBrdn1mdW5jdGlvbiB5cmUobCl7bGV0IGM7Y29uc3QgZD1ncmUoZnVuY3Rpb24gYShoKXtjb25zdCBtPXt9O2Zvcihjb25zdCBPIG9mIGguY2hpbGRyZW4pe2NvbnN0IFg9YShPKTttW08ub3V0bGV0XT1YfWNvbnN0IF89bmV3IENsKGgudXJsLG0pO3JldHVybiBo'@;
put 'PT09bCYmKGM9XyksX30obC5yb290KSk7cmV0dXJuIGM/P2R9ZnVuY3Rpb24gYnJlKGwsYyxhLGYpe2xldCBkPWw7Zm9yKDtkLnBhcmVudDspZD1kLnBhcmVudDtpZigwPT09Yy5sZW5ndGgpcmV0dXJuIFJqKGQsZCxkLGEsZik7Y29uc3QgaD1mdW5jdGlvbiBpX2UobCl7aWYoInN0cmluZyI9'@;
put 'PXR5cGVvZiBsWzBdJiYxPT09bC5sZW5ndGgmJiIvIj09PWxbMF0pcmV0dXJuIG5ldyB3cmUoITAsMCxsKTtsZXQgYz0wLGE9ITE7Y29uc3QgZj1sLnJlZHVjZSgoZCxoLG0pPT57aWYoIm9iamVjdCI9PXR5cGVvZiBoJiZudWxsIT1oKXtpZihoLm91dGxldHMpe2NvbnN0IF89e307cmV0dXJu'@;
put 'IE9iamVjdC5lbnRyaWVzKGgub3V0bGV0cykuZm9yRWFjaCgoW08sWF0pPT57X1tPXT0ic3RyaW5nIj09dHlwZW9mIFg/WC5zcGxpdCgiLyIpOlh9KSxbLi4uZCx7b3V0bGV0czpffV19aWYoaC5zZWdtZW50UGF0aClyZXR1cm5bLi4uZCxoLnNlZ21lbnRQYXRoXX1yZXR1cm4ic3RyaW5nIiE9'@;
put 'dHlwZW9mIGg/Wy4uLmQsaF06MD09PW0/KGguc3BsaXQoIi8iKS5mb3JFYWNoKChfLE8pPT57MD09TyYmIi4iPT09X3x8KDA9PU8mJiIiPT09Xz9hPSEwOiIuLiI9PT1fP2MrKzoiIiE9XyYmZC5wdXNoKF8pKX0pLGQpOlsuLi5kLGhdfSxbXSk7cmV0dXJuIG5ldyB3cmUoYSxjLGYpfShjKTtp'@;
put 'ZihoLnRvUm9vdCgpKXJldHVybiBSaihkLGQsbmV3IENsKFtdLHt9KSxhLGYpO2NvbnN0IG09ZnVuY3Rpb24gb19lKGwsYyxhKXtpZihsLmlzQWJzb2x1dGUpcmV0dXJuIG5ldyB0RChjLCEwLDApO2lmKCFhKXJldHVybiBuZXcgdEQoYywhMSxOYU4pO2lmKG51bGw9PT1hLnBhcmVudClyZXR1'@;
put 'cm4gbmV3IHREKGEsITAsMCk7Y29uc3QgZj1lRChsLmNvbW1hbmRzWzBdKT8wOjE7cmV0dXJuIGZ1bmN0aW9uIGFfZShsLGMsYSl7bGV0IGY9bCxkPWMsaD1hO2Zvcig7aD5kOyl7aWYoaC09ZCxmPWYucGFyZW50LCFmKXRocm93IG5ldyBJcig0MDA1LCExKTtkPWYuc2VnbWVudHMubGVuZ3Ro'@;
put 'fXJldHVybiBuZXcgdEQoZiwhMSxkLWgpfShhLGEuc2VnbWVudHMubGVuZ3RoLTErZixsLm51bWJlck9mRG91YmxlRG90cyl9KGgsZCxsKSxfPW0ucHJvY2Vzc0NoaWxkcmVuP2JDKG0uc2VnbWVudEdyb3VwLG0uaW5kZXgsaC5jb21tYW5kcyk6Q3JlKG0uc2VnbWVudEdyb3VwLG0uaW5kZXgs'@;
put 'aC5jb21tYW5kcyk7cmV0dXJuIFJqKGQsbS5zZWdtZW50R3JvdXAsXyxhLGYpfWZ1bmN0aW9uIGVEKGwpe3JldHVybiJvYmplY3QiPT10eXBlb2YgbCYmbnVsbCE9bCYmIWwub3V0bGV0cyYmIWwuc2VnbWVudFBhdGh9ZnVuY3Rpb24geUMobCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBsJiZu'@;
put 'dWxsIT1sJiZsLm91dGxldHN9ZnVuY3Rpb24gUmoobCxjLGEsZixkKXtsZXQgbSxoPXt9O2YmJk9iamVjdC5lbnRyaWVzKGYpLmZvckVhY2goKFtPLFhdKT0+e2hbT109QXJyYXkuaXNBcnJheShYKT9YLm1hcChhZT0+YCR7YWV9YCk6YCR7WH1gfSksbT1sPT09Yz9hOl9yZShsLGMsYSk7Y29u'@;
put 'c3QgXz1ncmUodnJlKG0pKTtyZXR1cm4gbmV3IGt2KF8saCxkKX1mdW5jdGlvbiBfcmUobCxjLGEpe2NvbnN0IGY9e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKGwuY2hpbGRyZW4pLmZvckVhY2goKFtkLGhdKT0+e2ZbZF09aD09PWM/YTpfcmUoaCxjLGEpfSksbmV3IENsKGwuc2VnbWVudHMs'@;
put 'Zil9Y2xhc3Mgd3Jle2NvbnN0cnVjdG9yKGMsYSxmKXtpZih0aGlzLmlzQWJzb2x1dGU9Yyx0aGlzLm51bWJlck9mRG91YmxlRG90cz1hLHRoaXMuY29tbWFuZHM9ZixjJiZmLmxlbmd0aD4wJiZlRChmWzBdKSl0aHJvdyBuZXcgSXIoNDAwMywhMSk7Y29uc3QgZD1mLmZpbmQoeUMpO2lmKGQm'@;
put 'JmQhPT1scmUoZikpdGhyb3cgbmV3IElyKDQwMDQsITEpfXRvUm9vdCgpe3JldHVybiB0aGlzLmlzQWJzb2x1dGUmJjE9PT10aGlzLmNvbW1hbmRzLmxlbmd0aCYmIi8iPT10aGlzLmNvbW1hbmRzWzBdfX1jbGFzcyB0RHtjb25zdHJ1Y3RvcihjLGEsZil7dGhpcy5zZWdtZW50R3JvdXA9Yyx0'@;
put 'aGlzLnByb2Nlc3NDaGlsZHJlbj1hLHRoaXMuaW5kZXg9Zn19ZnVuY3Rpb24gQ3JlKGwsYyxhKXtpZihsfHwobD1uZXcgQ2woW10se30pKSwwPT09bC5zZWdtZW50cy5sZW5ndGgmJmwuaGFzQ2hpbGRyZW4oKSlyZXR1cm4gYkMobCxjLGEpO2NvbnN0IGY9ZnVuY3Rpb24gc19lKGwsYyxhKXts'@;
put 'ZXQgZj0wLGQ9Yztjb25zdCBoPXttYXRjaDohMSxwYXRoSW5kZXg6MCxjb21tYW5kSW5kZXg6MH07Zm9yKDtkPGwuc2VnbWVudHMubGVuZ3RoOyl7aWYoZj49YS5sZW5ndGgpcmV0dXJuIGg7Y29uc3QgbT1sLnNlZ21lbnRzW2RdLF89YVtmXTtpZih5QyhfKSlicmVhaztjb25zdCBPPWAke199'@;
put 'YCxYPWY8YS5sZW5ndGgtMT9hW2YrMV06bnVsbDtpZihkPjAmJnZvaWQgMD09PU8pYnJlYWs7aWYoTyYmWCYmIm9iamVjdCI9PXR5cGVvZiBYJiZ2b2lkIDA9PT1YLm91dGxldHMpe2lmKCFNcmUoTyxYLG0pKXJldHVybiBoO2YrPTJ9ZWxzZXtpZighTXJlKE8se30sbSkpcmV0dXJuIGg7Zisr'@;
put 'fWQrK31yZXR1cm57bWF0Y2g6ITAscGF0aEluZGV4OmQsY29tbWFuZEluZGV4OmZ9fShsLGMsYSksZD1hLnNsaWNlKGYuY29tbWFuZEluZGV4KTtpZihmLm1hdGNoJiZmLnBhdGhJbmRleDxsLnNlZ21lbnRzLmxlbmd0aCl7Y29uc3QgaD1uZXcgQ2wobC5zZWdtZW50cy5zbGljZSgwLGYucGF0'@;
put 'aEluZGV4KSx7fSk7cmV0dXJuIGguY2hpbGRyZW5bZGFdPW5ldyBDbChsLnNlZ21lbnRzLnNsaWNlKGYucGF0aEluZGV4KSxsLmNoaWxkcmVuKSxiQyhoLDAsZCl9cmV0dXJuIGYubWF0Y2gmJjA9PT1kLmxlbmd0aD9uZXcgQ2wobC5zZWdtZW50cyx7fSk6Zi5tYXRjaCYmIWwuaGFzQ2hpbGRy'@;
put 'ZW4oKT9MaihsLGMsYSk6Zi5tYXRjaD9iQyhsLDAsZCk6TGoobCxjLGEpfWZ1bmN0aW9uIGJDKGwsYyxhKXtpZigwPT09YS5sZW5ndGgpcmV0dXJuIG5ldyBDbChsLnNlZ21lbnRzLHt9KTt7Y29uc3QgZj1mdW5jdGlvbiBsX2UobCl7cmV0dXJuIHlDKGxbMF0pP2xbMF0ub3V0bGV0czp7W2Rh'@;
put 'XTpsfX0oYSksZD17fTtpZighZltkYV0mJmwuY2hpbGRyZW5bZGFdJiYxPT09bC5udW1iZXJPZkNoaWxkcmVuJiYwPT09bC5jaGlsZHJlbltkYV0uc2VnbWVudHMubGVuZ3RoKXtjb25zdCBoPWJDKGwuY2hpbGRyZW5bZGFdLGMsYSk7cmV0dXJuIG5ldyBDbChsLnNlZ21lbnRzLGguY2hpbGRy'@;
put 'ZW4pfXJldHVybiBPYmplY3QuZW50cmllcyhmKS5mb3JFYWNoKChbaCxtXSk9Pnsic3RyaW5nIj09dHlwZW9mIG0mJihtPVttXSksbnVsbCE9PW0mJihkW2hdPUNyZShsLmNoaWxkcmVuW2hdLGMsbSkpfSksT2JqZWN0LmVudHJpZXMobC5jaGlsZHJlbikuZm9yRWFjaCgoW2gsbV0pPT57dm9p'@;
put 'ZCAwPT09ZltoXSYmKGRbaF09bSl9KSxuZXcgQ2wobC5zZWdtZW50cyxkKX19ZnVuY3Rpb24gTGoobCxjLGEpe2NvbnN0IGY9bC5zZWdtZW50cy5zbGljZSgwLGMpO2xldCBkPTA7Zm9yKDtkPGEubGVuZ3RoOyl7Y29uc3QgaD1hW2RdO2lmKHlDKGgpKXtjb25zdCBPPXVfZShoLm91dGxldHMp'@;
put 'O3JldHVybiBuZXcgQ2woZixPKX1pZigwPT09ZCYmZUQoYVswXSkpe2YucHVzaChuZXcgbUMobC5zZWdtZW50c1tjXS5wYXRoLFNyZShhWzBdKSkpLGQrKztjb250aW51ZX1jb25zdCBtPXlDKGgpP2gub3V0bGV0c1tkYV06YCR7aH1gLF89ZDxhLmxlbmd0aC0xP2FbZCsxXTpudWxsO20mJl8m'@;
put 'JmVEKF8pPyhmLnB1c2gobmV3IG1DKG0sU3JlKF8pKSksZCs9Mik6KGYucHVzaChuZXcgbUMobSx7fSkpLGQrKyl9cmV0dXJuIG5ldyBDbChmLHt9KX1mdW5jdGlvbiB1X2UobCl7Y29uc3QgYz17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMobCkuZm9yRWFjaCgoW2EsZl0pPT57InN0cmluZyI9'@;
put 'PXR5cGVvZiBmJiYoZj1bZl0pLG51bGwhPT1mJiYoY1thXT1MaihuZXcgQ2woW10se30pLDAsZikpfSksY31mdW5jdGlvbiBTcmUobCl7Y29uc3QgYz17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMobCkuZm9yRWFjaCgoW2EsZl0pPT5jW2FdPWAke2Z9YCksY31mdW5jdGlvbiBNcmUobCxjLGEp'@;
put 'e3JldHVybiBsPT1hLnBhdGgmJk1oKGMsYS5wYXJhbWV0ZXJzKX1jb25zdCBfQz0iaW1wZXJhdGl2ZSI7Y2xhc3Mga2h7Y29uc3RydWN0b3IoYyxhKXt0aGlzLmlkPWMsdGhpcy51cmw9YX19Y2xhc3MgUGogZXh0ZW5kcyBraHtjb25zdHJ1Y3RvcihjLGEsZj0iaW1wZXJhdGl2ZSIsZD1udWxs'@;
put 'KXtzdXBlcihjLGEpLHRoaXMudHlwZT0wLHRoaXMubmF2aWdhdGlvblRyaWdnZXI9Zix0aGlzLnJlc3RvcmVkU3RhdGU9ZH10b1N0cmluZygpe3JldHVybmBOYXZpZ2F0aW9uU3RhcnQoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhpcy51cmx9JylgfX1jbGFzcyBpNCBleHRlbmRzIGtoe2Nv'@;
put 'bnN0cnVjdG9yKGMsYSxmKXtzdXBlcihjLGEpLHRoaXMudXJsQWZ0ZXJSZWRpcmVjdHM9Zix0aGlzLnR5cGU9MX10b1N0cmluZygpe3JldHVybmBOYXZpZ2F0aW9uRW5kKGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScsIHVybEFmdGVyUmVkaXJlY3RzOiAnJHt0aGlzLnVybEFm'@;
put 'dGVyUmVkaXJlY3RzfScpYH19Y2xhc3MgbkQgZXh0ZW5kcyBraHtjb25zdHJ1Y3RvcihjLGEsZixkKXtzdXBlcihjLGEpLHRoaXMucmVhc29uPWYsdGhpcy5jb2RlPWQsdGhpcy50eXBlPTJ9dG9TdHJpbmcoKXtyZXR1cm5gTmF2aWdhdGlvbkNhbmNlbChpZDogJHt0aGlzLmlkfSwgdXJsOiAn'@;
put 'JHt0aGlzLnVybH0nKWB9fWNsYXNzIHdDIGV4dGVuZHMga2h7Y29uc3RydWN0b3IoYyxhLGYsZCl7c3VwZXIoYyxhKSx0aGlzLnJlYXNvbj1mLHRoaXMuY29kZT1kLHRoaXMudHlwZT0xNn19Y2xhc3MgRmogZXh0ZW5kcyBraHtjb25zdHJ1Y3RvcihjLGEsZixkKXtzdXBlcihjLGEpLHRoaXMu'@;
put 'ZXJyb3I9Zix0aGlzLnRhcmdldD1kLHRoaXMudHlwZT0zfXRvU3RyaW5nKCl7cmV0dXJuYE5hdmlnYXRpb25FcnJvcihpZDogJHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nLCBlcnJvcjogJHt0aGlzLmVycm9yfSlgfX1jbGFzcyBjX2UgZXh0ZW5kcyBraHtjb25zdHJ1Y3RvcihjLGEs'@;
put 'ZixkKXtzdXBlcihjLGEpLHRoaXMudXJsQWZ0ZXJSZWRpcmVjdHM9Zix0aGlzLnN0YXRlPWQsdGhpcy50eXBlPTR9dG9TdHJpbmcoKXtyZXR1cm5gUm91dGVzUmVjb2duaXplZChpZDogJHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nLCB1cmxBZnRlclJlZGlyZWN0czogJyR7dGhpcy51'@;
put 'cmxBZnRlclJlZGlyZWN0c30nLCBzdGF0ZTogJHt0aGlzLnN0YXRlfSlgfX1jbGFzcyBmX2UgZXh0ZW5kcyBraHtjb25zdHJ1Y3RvcihjLGEsZixkKXtzdXBlcihjLGEpLHRoaXMudXJsQWZ0ZXJSZWRpcmVjdHM9Zix0aGlzLnN0YXRlPWQsdGhpcy50eXBlPTd9dG9TdHJpbmcoKXtyZXR1cm5g'@;
put 'R3VhcmRzQ2hlY2tTdGFydChpZDogJHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nLCB1cmxBZnRlclJlZGlyZWN0czogJyR7dGhpcy51cmxBZnRlclJlZGlyZWN0c30nLCBzdGF0ZTogJHt0aGlzLnN0YXRlfSlgfX1jbGFzcyBkX2UgZXh0ZW5kcyBraHtjb25zdHJ1Y3RvcihjLGEsZixk'@;
put 'LGgpe3N1cGVyKGMsYSksdGhpcy51cmxBZnRlclJlZGlyZWN0cz1mLHRoaXMuc3RhdGU9ZCx0aGlzLnNob3VsZEFjdGl2YXRlPWgsdGhpcy50eXBlPTh9dG9TdHJpbmcoKXtyZXR1cm5gR3VhcmRzQ2hlY2tFbmQoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhpcy51cmx9JywgdXJsQWZ0ZXJS'@;
put 'ZWRpcmVjdHM6ICcke3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHN9Jywgc3RhdGU6ICR7dGhpcy5zdGF0ZX0sIHNob3VsZEFjdGl2YXRlOiAke3RoaXMuc2hvdWxkQWN0aXZhdGV9KWB9fWNsYXNzIGhfZSBleHRlbmRzIGtoe2NvbnN0cnVjdG9yKGMsYSxmLGQpe3N1cGVyKGMsYSksdGhpcy51cmxB'@;
put 'ZnRlclJlZGlyZWN0cz1mLHRoaXMuc3RhdGU9ZCx0aGlzLnR5cGU9NX10b1N0cmluZygpe3JldHVybmBSZXNvbHZlU3RhcnQoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhpcy51cmx9JywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICcke3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHN9Jywgc3RhdGU6ICR7'@;
put 'dGhpcy5zdGF0ZX0pYH19Y2xhc3MgcF9lIGV4dGVuZHMga2h7Y29uc3RydWN0b3IoYyxhLGYsZCl7c3VwZXIoYyxhKSx0aGlzLnVybEFmdGVyUmVkaXJlY3RzPWYsdGhpcy5zdGF0ZT1kLHRoaXMudHlwZT02fXRvU3RyaW5nKCl7cmV0dXJuYFJlc29sdmVFbmQoaWQ6ICR7dGhpcy5pZH0sIHVy'@;
put 'bDogJyR7dGhpcy51cmx9JywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICcke3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHN9Jywgc3RhdGU6ICR7dGhpcy5zdGF0ZX0pYH19Y2xhc3MgbV9le2NvbnN0cnVjdG9yKGMpe3RoaXMucm91dGU9Yyx0aGlzLnR5cGU9OX10b1N0cmluZygpe3JldHVybmBSb3V0ZUNv'@;
put 'bmZpZ0xvYWRTdGFydChwYXRoOiAke3RoaXMucm91dGUucGF0aH0pYH19Y2xhc3MgZ19le2NvbnN0cnVjdG9yKGMpe3RoaXMucm91dGU9Yyx0aGlzLnR5cGU9MTB9dG9TdHJpbmcoKXtyZXR1cm5gUm91dGVDb25maWdMb2FkRW5kKHBhdGg6ICR7dGhpcy5yb3V0ZS5wYXRofSlgfX1jbGFzcyB2'@;
put 'X2V7Y29uc3RydWN0b3IoYyl7dGhpcy5zbmFwc2hvdD1jLHRoaXMudHlwZT0xMX10b1N0cmluZygpe3JldHVybmBDaGlsZEFjdGl2YXRpb25TdGFydChwYXRoOiAnJHt0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnJiZ0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGh8fCIifScpYH19Y2xh'@;
put 'c3MgeV9le2NvbnN0cnVjdG9yKGMpe3RoaXMuc25hcHNob3Q9Yyx0aGlzLnR5cGU9MTJ9dG9TdHJpbmcoKXtyZXR1cm5gQ2hpbGRBY3RpdmF0aW9uRW5kKHBhdGg6ICcke3RoaXMuc25hcHNob3Qucm91dGVDb25maWcmJnRoaXMuc25hcHNob3Qucm91dGVDb25maWcucGF0aHx8IiJ9JylgfX1j'@;
put 'bGFzcyBiX2V7Y29uc3RydWN0b3IoYyl7dGhpcy5zbmFwc2hvdD1jLHRoaXMudHlwZT0xM310b1N0cmluZygpe3JldHVybmBBY3RpdmF0aW9uU3RhcnQocGF0aDogJyR7dGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZyYmdGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZy5wYXRofHwiIn0nKWB9fWNs'@;
put 'YXNzIF9fZXtjb25zdHJ1Y3RvcihjKXt0aGlzLnNuYXBzaG90PWMsdGhpcy50eXBlPTE0fXRvU3RyaW5nKCl7cmV0dXJuYEFjdGl2YXRpb25FbmQocGF0aDogJyR7dGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZyYmdGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZy5wYXRofHwiIn0nKWB9fWNsYXNz'@;
put 'IGtyZXtjb25zdHJ1Y3RvcihjLGEsZil7dGhpcy5yb3V0ZXJFdmVudD1jLHRoaXMucG9zaXRpb249YSx0aGlzLmFuY2hvcj1mLHRoaXMudHlwZT0xNX10b1N0cmluZygpe3JldHVybmBTY3JvbGwoYW5jaG9yOiAnJHt0aGlzLmFuY2hvcn0nLCBwb3NpdGlvbjogJyR7dGhpcy5wb3NpdGlvbj9g'@;
put 'JHt0aGlzLnBvc2l0aW9uWzBdfSwgJHt0aGlzLnBvc2l0aW9uWzFdfWA6bnVsbH0nKWB9fWNsYXNzIHdfZXtjb25zdHJ1Y3Rvcigpe3RoaXMub3V0bGV0PW51bGwsdGhpcy5yb3V0ZT1udWxsLHRoaXMuaW5qZWN0b3I9bnVsbCx0aGlzLmNoaWxkcmVuPW5ldyBDQyx0aGlzLmF0dGFjaFJlZj1u'@;
put 'dWxsfX1sZXQgQ0M9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3Rvcigpe3RoaXMuY29udGV4dHM9bmV3IE1hcH1vbkNoaWxkT3V0bGV0Q3JlYXRlZChhLGYpe2NvbnN0IGQ9dGhpcy5nZXRPckNyZWF0ZUNvbnRleHQoYSk7ZC5vdXRsZXQ9Zix0aGlzLmNvbnRleHRzLnNldChhLGQpfW9uQ2hpbGRP'@;
put 'dXRsZXREZXN0cm95ZWQoYSl7Y29uc3QgZj10aGlzLmdldENvbnRleHQoYSk7ZiYmKGYub3V0bGV0PW51bGwsZi5hdHRhY2hSZWY9bnVsbCl9b25PdXRsZXREZWFjdGl2YXRlZCgpe2NvbnN0IGE9dGhpcy5jb250ZXh0cztyZXR1cm4gdGhpcy5jb250ZXh0cz1uZXcgTWFwLGF9b25PdXRsZXRS'@;
put 'ZUF0dGFjaGVkKGEpe3RoaXMuY29udGV4dHM9YX1nZXRPckNyZWF0ZUNvbnRleHQoYSl7bGV0IGY9dGhpcy5nZXRDb250ZXh0KGEpO3JldHVybiBmfHwoZj1uZXcgd19lLHRoaXMuY29udGV4dHMuc2V0KGEsZikpLGZ9Z2V0Q29udGV4dChhKXtyZXR1cm4gdGhpcy5jb250ZXh0cy5nZXQoYSl8'@;
put 'fG51bGx9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmwsZmFjdG9yeTpsLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGx9KSgpO2NsYXNzIEVyZXtjb25zdHJ1Y3RvcihjKXt0aGlzLl9yb290PWN9'@;
put 'Z2V0IHJvb3QoKXtyZXR1cm4gdGhpcy5fcm9vdC52YWx1ZX1wYXJlbnQoYyl7Y29uc3QgYT10aGlzLnBhdGhGcm9tUm9vdChjKTtyZXR1cm4gYS5sZW5ndGg+MT9hW2EubGVuZ3RoLTJdOm51bGx9Y2hpbGRyZW4oYyl7Y29uc3QgYT1IaihjLHRoaXMuX3Jvb3QpO3JldHVybiBhP2EuY2hpbGRy'@;
put 'ZW4ubWFwKGY9PmYudmFsdWUpOltdfWZpcnN0Q2hpbGQoYyl7Y29uc3QgYT1IaihjLHRoaXMuX3Jvb3QpO3JldHVybiBhJiZhLmNoaWxkcmVuLmxlbmd0aD4wP2EuY2hpbGRyZW5bMF0udmFsdWU6bnVsbH1zaWJsaW5ncyhjKXtjb25zdCBhPU5qKGMsdGhpcy5fcm9vdCk7cmV0dXJuIGEubGVu'@;
put 'Z3RoPDI/W106YVthLmxlbmd0aC0yXS5jaGlsZHJlbi5tYXAoZD0+ZC52YWx1ZSkuZmlsdGVyKGQ9PmQhPT1jKX1wYXRoRnJvbVJvb3QoYyl7cmV0dXJuIE5qKGMsdGhpcy5fcm9vdCkubWFwKGE9PmEudmFsdWUpfX1mdW5jdGlvbiBIaihsLGMpe2lmKGw9PT1jLnZhbHVlKXJldHVybiBjO2Zv'@;
put 'cihjb25zdCBhIG9mIGMuY2hpbGRyZW4pe2NvbnN0IGY9SGoobCxhKTtpZihmKXJldHVybiBmfXJldHVybiBudWxsfWZ1bmN0aW9uIE5qKGwsYyl7aWYobD09PWMudmFsdWUpcmV0dXJuW2NdO2Zvcihjb25zdCBhIG9mIGMuY2hpbGRyZW4pe2NvbnN0IGY9TmoobCxhKTtpZihmLmxlbmd0aCly'@;
put 'ZXR1cm4gZi51bnNoaWZ0KGMpLGZ9cmV0dXJuW119Y2xhc3MgRzJ7Y29uc3RydWN0b3IoYyxhKXt0aGlzLnZhbHVlPWMsdGhpcy5jaGlsZHJlbj1hfXRvU3RyaW5nKCl7cmV0dXJuYFRyZWVOb2RlKCR7dGhpcy52YWx1ZX0pYH19ZnVuY3Rpb24gRXYobCl7Y29uc3QgYz17fTtyZXR1cm4gbCYm'@;
put 'bC5jaGlsZHJlbi5mb3JFYWNoKGE9PmNbYS52YWx1ZS5vdXRsZXRdPWEpLGN9Y2xhc3MgeHJlIGV4dGVuZHMgRXJle2NvbnN0cnVjdG9yKGMsYSl7c3VwZXIoYyksdGhpcy5zbmFwc2hvdD1hLFZqKHRoaXMsYyl9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5zbmFwc2hvdC50b1N0cmluZygpfX1m'@;
put 'dW5jdGlvbiBBcmUobCxjKXtjb25zdCBhPWZ1bmN0aW9uIENfZShsLGMpe2NvbnN0IG09bmV3IHJEKFtdLHt9LHt9LCIiLHt9LGRhLGMsbnVsbCx7fSk7cmV0dXJuIG5ldyBPcmUoIiIsbmV3IEcyKG0sW10pKX0oMCxjKSxmPW5ldyBPZShbbmV3IG1DKCIiLHt9KV0pLGQ9bmV3IE9lKHt9KSxo'@;
put 'PW5ldyBPZSh7fSksbT1uZXcgT2Uoe30pLF89bmV3IE9lKCIiKSxPPW5ldyB0dShmLGQsbSxfLGgsZGEsYyxhLnJvb3QpO3JldHVybiBPLnNuYXBzaG90PWEucm9vdCxuZXcgeHJlKG5ldyBHMihPLFtdKSxhKX1jbGFzcyB0dXtjb25zdHJ1Y3RvcihjLGEsZixkLGgsbSxfLE8pe3RoaXMudXJs'@;
put 'U3ViamVjdD1jLHRoaXMucGFyYW1zU3ViamVjdD1hLHRoaXMucXVlcnlQYXJhbXNTdWJqZWN0PWYsdGhpcy5mcmFnbWVudFN1YmplY3Q9ZCx0aGlzLmRhdGFTdWJqZWN0PWgsdGhpcy5vdXRsZXQ9bSx0aGlzLmNvbXBvbmVudD1fLHRoaXMuX2Z1dHVyZVNuYXBzaG90PU8sdGhpcy50aXRsZT10'@;
put 'aGlzLmRhdGFTdWJqZWN0Py5waXBlKEVlKFg9PlhbcENdKSk/P0dpKHZvaWQgMCksdGhpcy51cmw9Yyx0aGlzLnBhcmFtcz1hLHRoaXMucXVlcnlQYXJhbXM9Zix0aGlzLmZyYWdtZW50PWQsdGhpcy5kYXRhPWh9Z2V0IHJvdXRlQ29uZmlnKCl7cmV0dXJuIHRoaXMuX2Z1dHVyZVNuYXBzaG90'@;
put 'LnJvdXRlQ29uZmlnfWdldCByb290KCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnJvb3R9Z2V0IHBhcmVudCgpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5wYXJlbnQodGhpcyl9Z2V0IGZpcnN0Q2hpbGQoKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUuZmlyc3RDaGlsZCh0aGlzKX1n'@;
put 'ZXQgY2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUuY2hpbGRyZW4odGhpcyl9Z2V0IHBhdGhGcm9tUm9vdCgpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5wYXRoRnJvbVJvb3QodGhpcyl9Z2V0IHBhcmFtTWFwKCl7cmV0dXJuIHRoaXMuX3BhcmFtTWFwfHwodGhpcy5fcGFy'@;
put 'YW1NYXA9dGhpcy5wYXJhbXMucGlwZShFZShjPT5NdihjKSkpKSx0aGlzLl9wYXJhbU1hcH1nZXQgcXVlcnlQYXJhbU1hcCgpe3JldHVybiB0aGlzLl9xdWVyeVBhcmFtTWFwfHwodGhpcy5fcXVlcnlQYXJhbU1hcD10aGlzLnF1ZXJ5UGFyYW1zLnBpcGUoRWUoYz0+TXYoYykpKSksdGhpcy5f'@;
put 'cXVlcnlQYXJhbU1hcH10b1N0cmluZygpe3JldHVybiB0aGlzLnNuYXBzaG90P3RoaXMuc25hcHNob3QudG9TdHJpbmcoKTpgRnV0dXJlKCR7dGhpcy5fZnV0dXJlU25hcHNob3R9KWB9fWZ1bmN0aW9uIFRyZShsLGM9ImVtcHR5T25seSIpe2NvbnN0IGE9bC5wYXRoRnJvbVJvb3Q7bGV0IGY9'@;
put 'MDtpZigiYWx3YXlzIiE9PWMpZm9yKGY9YS5sZW5ndGgtMTtmPj0xOyl7Y29uc3QgZD1hW2ZdLGg9YVtmLTFdO2lmKGQucm91dGVDb25maWcmJiIiPT09ZC5yb3V0ZUNvbmZpZy5wYXRoKWYtLTtlbHNle2lmKGguY29tcG9uZW50KWJyZWFrO2YtLX19cmV0dXJuIGZ1bmN0aW9uIFNfZShsKXty'@;
put 'ZXR1cm4gbC5yZWR1Y2UoKGMsYSk9Pih7cGFyYW1zOnsuLi5jLnBhcmFtcywuLi5hLnBhcmFtc30sZGF0YTp7Li4uYy5kYXRhLC4uLmEuZGF0YX0scmVzb2x2ZTp7Li4uYS5kYXRhLC4uLmMucmVzb2x2ZSwuLi5hLnJvdXRlQ29uZmlnPy5kYXRhLC4uLmEuX3Jlc29sdmVkRGF0YX19KSx7cGFy'@;
put 'YW1zOnt9LGRhdGE6e30scmVzb2x2ZTp7fX0pfShhLnNsaWNlKGYpKX1jbGFzcyByRHtnZXQgdGl0bGUoKXtyZXR1cm4gdGhpcy5kYXRhPy5bcENdfWNvbnN0cnVjdG9yKGMsYSxmLGQsaCxtLF8sTyxYKXt0aGlzLnVybD1jLHRoaXMucGFyYW1zPWEsdGhpcy5xdWVyeVBhcmFtcz1mLHRoaXMu'@;
put 'ZnJhZ21lbnQ9ZCx0aGlzLmRhdGE9aCx0aGlzLm91dGxldD1tLHRoaXMuY29tcG9uZW50PV8sdGhpcy5yb3V0ZUNvbmZpZz1PLHRoaXMuX3Jlc29sdmU9WH1nZXQgcm9vdCgpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5yb290fWdldCBwYXJlbnQoKXtyZXR1cm4gdGhpcy5fcm91dGVyU3Rh'@;
put 'dGUucGFyZW50KHRoaXMpfWdldCBmaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLmZpcnN0Q2hpbGQodGhpcyl9Z2V0IGNoaWxkcmVuKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLmNoaWxkcmVuKHRoaXMpfWdldCBwYXRoRnJvbVJvb3QoKXtyZXR1cm4gdGhpcy5fcm91'@;
put 'dGVyU3RhdGUucGF0aEZyb21Sb290KHRoaXMpfWdldCBwYXJhbU1hcCgpe3JldHVybiB0aGlzLl9wYXJhbU1hcHx8KHRoaXMuX3BhcmFtTWFwPU12KHRoaXMucGFyYW1zKSksdGhpcy5fcGFyYW1NYXB9Z2V0IHF1ZXJ5UGFyYW1NYXAoKXtyZXR1cm4gdGhpcy5fcXVlcnlQYXJhbU1hcHx8KHRo'@;
put 'aXMuX3F1ZXJ5UGFyYW1NYXA9TXYodGhpcy5xdWVyeVBhcmFtcykpLHRoaXMuX3F1ZXJ5UGFyYW1NYXB9dG9TdHJpbmcoKXtyZXR1cm5gUm91dGUodXJsOicke3RoaXMudXJsLm1hcChmPT5mLnRvU3RyaW5nKCkpLmpvaW4oIi8iKX0nLCBwYXRoOicke3RoaXMucm91dGVDb25maWc/dGhpcy5y'@;
put 'b3V0ZUNvbmZpZy5wYXRoOiIifScpYH19Y2xhc3MgT3JlIGV4dGVuZHMgRXJle2NvbnN0cnVjdG9yKGMsYSl7c3VwZXIoYSksdGhpcy51cmw9YyxWaih0aGlzLGEpfXRvU3RyaW5nKCl7cmV0dXJuIERyZSh0aGlzLl9yb290KX19ZnVuY3Rpb24gVmoobCxjKXtjLnZhbHVlLl9yb3V0ZXJTdGF0'@;
put 'ZT1sLGMuY2hpbGRyZW4uZm9yRWFjaChhPT5WaihsLGEpKX1mdW5jdGlvbiBEcmUobCl7Y29uc3QgYz1sLmNoaWxkcmVuLmxlbmd0aD4wP2AgeyAke2wuY2hpbGRyZW4ubWFwKERyZSkuam9pbigiLCAiKX0gfSBgOiIiO3JldHVybmAke2wudmFsdWV9JHtjfWB9ZnVuY3Rpb24gQmoobCl7aWYo'@;
put 'bC5zbmFwc2hvdCl7Y29uc3QgYz1sLnNuYXBzaG90LGE9bC5fZnV0dXJlU25hcHNob3Q7bC5zbmFwc2hvdD1hLE1oKGMucXVlcnlQYXJhbXMsYS5xdWVyeVBhcmFtcyl8fGwucXVlcnlQYXJhbXNTdWJqZWN0Lm5leHQoYS5xdWVyeVBhcmFtcyksYy5mcmFnbWVudCE9PWEuZnJhZ21lbnQmJmwu'@;
put 'ZnJhZ21lbnRTdWJqZWN0Lm5leHQoYS5mcmFnbWVudCksTWgoYy5wYXJhbXMsYS5wYXJhbXMpfHxsLnBhcmFtc1N1YmplY3QubmV4dChhLnBhcmFtcyksZnVuY3Rpb24gTmJlKGwsYyl7aWYobC5sZW5ndGghPT1jLmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IGE9MDthPGwubGVuZ3RoOysrYSlp'@;
put 'ZighTWgobFthXSxjW2FdKSlyZXR1cm4hMTtyZXR1cm4hMH0oYy51cmwsYS51cmwpfHxsLnVybFN1YmplY3QubmV4dChhLnVybCksTWgoYy5kYXRhLGEuZGF0YSl8fGwuZGF0YVN1YmplY3QubmV4dChhLmRhdGEpfWVsc2UgbC5zbmFwc2hvdD1sLl9mdXR1cmVTbmFwc2hvdCxsLmRhdGFTdWJq'@;
put 'ZWN0Lm5leHQobC5fZnV0dXJlU25hcHNob3QuZGF0YSl9ZnVuY3Rpb24gamoobCxjKXtjb25zdCBhPU1oKGwucGFyYW1zLGMucGFyYW1zKSYmZnVuY3Rpb24gemJlKGwsYyl7cmV0dXJuIEVnKGwsYykmJmwuZXZlcnkoKGEsZik9Pk1oKGEucGFyYW1ldGVycyxjW2ZdLnBhcmFtZXRlcnMpKX0o'@;
put 'bC51cmwsYy51cmwpO3JldHVybiBhJiYhKCFsLnBhcmVudCE9IWMucGFyZW50KSYmKCFsLnBhcmVudHx8amoobC5wYXJlbnQsYy5wYXJlbnQpKX1sZXQgeHY9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3Rvcigpe3RoaXMuYWN0aXZhdGVkPW51bGwsdGhpcy5fYWN0aXZhdGVkUm91dGU9bnVsbCx0'@;
put 'aGlzLm5hbWU9ZGEsdGhpcy5hY3RpdmF0ZUV2ZW50cz1uZXcgeHIsdGhpcy5kZWFjdGl2YXRlRXZlbnRzPW5ldyB4cix0aGlzLmF0dGFjaEV2ZW50cz1uZXcgeHIsdGhpcy5kZXRhY2hFdmVudHM9bmV3IHhyLHRoaXMucGFyZW50Q29udGV4dHM9SGkoQ0MpLHRoaXMubG9jYXRpb249SGkoZmEp'@;
put 'LHRoaXMuY2hhbmdlRGV0ZWN0b3I9SGkoVWwpLHRoaXMuZW52aXJvbm1lbnRJbmplY3Rvcj1IaSh1MSksdGhpcy5pbnB1dEJpbmRlcj1IaShpRCx7b3B0aW9uYWw6ITB9KSx0aGlzLnN1cHBvcnRzQmluZGluZ1RvQ29tcG9uZW50SW5wdXRzPSEwfWdldCBhY3RpdmF0ZWRDb21wb25lbnRSZWYo'@;
put 'KXtyZXR1cm4gdGhpcy5hY3RpdmF0ZWR9bmdPbkNoYW5nZXMoYSl7aWYoYS5uYW1lKXtjb25zdHtmaXJzdENoYW5nZTpmLHByZXZpb3VzVmFsdWU6ZH09YS5uYW1lO2lmKGYpcmV0dXJuO3RoaXMuaXNUcmFja2VkSW5QYXJlbnRDb250ZXh0cyhkKSYmKHRoaXMuZGVhY3RpdmF0ZSgpLHRoaXMu'@;
put 'cGFyZW50Q29udGV4dHMub25DaGlsZE91dGxldERlc3Ryb3llZChkKSksdGhpcy5pbml0aWFsaXplT3V0bGV0V2l0aE5hbWUoKX19bmdPbkRlc3Ryb3koKXt0aGlzLmlzVHJhY2tlZEluUGFyZW50Q29udGV4dHModGhpcy5uYW1lKSYmdGhpcy5wYXJlbnRDb250ZXh0cy5vbkNoaWxkT3V0bGV0'@;
put 'RGVzdHJveWVkKHRoaXMubmFtZSksdGhpcy5pbnB1dEJpbmRlcj8udW5zdWJzY3JpYmVGcm9tUm91dGVEYXRhKHRoaXMpfWlzVHJhY2tlZEluUGFyZW50Q29udGV4dHMoYSl7cmV0dXJuIHRoaXMucGFyZW50Q29udGV4dHMuZ2V0Q29udGV4dChhKT8ub3V0bGV0PT09dGhpc31uZ09uSW5pdCgp'@;
put 'e3RoaXMuaW5pdGlhbGl6ZU91dGxldFdpdGhOYW1lKCl9aW5pdGlhbGl6ZU91dGxldFdpdGhOYW1lKCl7aWYodGhpcy5wYXJlbnRDb250ZXh0cy5vbkNoaWxkT3V0bGV0Q3JlYXRlZCh0aGlzLm5hbWUsdGhpcyksdGhpcy5hY3RpdmF0ZWQpcmV0dXJuO2NvbnN0IGE9dGhpcy5wYXJlbnRDb250'@;
put 'ZXh0cy5nZXRDb250ZXh0KHRoaXMubmFtZSk7YT8ucm91dGUmJihhLmF0dGFjaFJlZj90aGlzLmF0dGFjaChhLmF0dGFjaFJlZixhLnJvdXRlKTp0aGlzLmFjdGl2YXRlV2l0aChhLnJvdXRlLGEuaW5qZWN0b3IpKX1nZXQgaXNBY3RpdmF0ZWQoKXtyZXR1cm4hIXRoaXMuYWN0aXZhdGVkfWdl'@;
put 'dCBjb21wb25lbnQoKXtpZighdGhpcy5hY3RpdmF0ZWQpdGhyb3cgbmV3IElyKDQwMTIsITEpO3JldHVybiB0aGlzLmFjdGl2YXRlZC5pbnN0YW5jZX1nZXQgYWN0aXZhdGVkUm91dGUoKXtpZighdGhpcy5hY3RpdmF0ZWQpdGhyb3cgbmV3IElyKDQwMTIsITEpO3JldHVybiB0aGlzLl9hY3Rp'@;
put 'dmF0ZWRSb3V0ZX1nZXQgYWN0aXZhdGVkUm91dGVEYXRhKCl7cmV0dXJuIHRoaXMuX2FjdGl2YXRlZFJvdXRlP3RoaXMuX2FjdGl2YXRlZFJvdXRlLnNuYXBzaG90LmRhdGE6e319ZGV0YWNoKCl7aWYoIXRoaXMuYWN0aXZhdGVkKXRocm93IG5ldyBJcig0MDEyLCExKTt0aGlzLmxvY2F0aW9u'@;
put 'LmRldGFjaCgpO2NvbnN0IGE9dGhpcy5hY3RpdmF0ZWQ7cmV0dXJuIHRoaXMuYWN0aXZhdGVkPW51bGwsdGhpcy5fYWN0aXZhdGVkUm91dGU9bnVsbCx0aGlzLmRldGFjaEV2ZW50cy5lbWl0KGEuaW5zdGFuY2UpLGF9YXR0YWNoKGEsZil7dGhpcy5hY3RpdmF0ZWQ9YSx0aGlzLl9hY3RpdmF0'@;
put 'ZWRSb3V0ZT1mLHRoaXMubG9jYXRpb24uaW5zZXJ0KGEuaG9zdFZpZXcpLHRoaXMuaW5wdXRCaW5kZXI/LmJpbmRBY3RpdmF0ZWRSb3V0ZVRvT3V0bGV0Q29tcG9uZW50KHRoaXMpLHRoaXMuYXR0YWNoRXZlbnRzLmVtaXQoYS5pbnN0YW5jZSl9ZGVhY3RpdmF0ZSgpe2lmKHRoaXMuYWN0aXZh'@;
put 'dGVkKXtjb25zdCBhPXRoaXMuY29tcG9uZW50O3RoaXMuYWN0aXZhdGVkLmRlc3Ryb3koKSx0aGlzLmFjdGl2YXRlZD1udWxsLHRoaXMuX2FjdGl2YXRlZFJvdXRlPW51bGwsdGhpcy5kZWFjdGl2YXRlRXZlbnRzLmVtaXQoYSl9fWFjdGl2YXRlV2l0aChhLGYpe2lmKHRoaXMuaXNBY3RpdmF0'@;
put 'ZWQpdGhyb3cgbmV3IElyKDQwMTMsITEpO3RoaXMuX2FjdGl2YXRlZFJvdXRlPWE7Y29uc3QgZD10aGlzLmxvY2F0aW9uLG09YS5zbmFwc2hvdC5jb21wb25lbnQsXz10aGlzLnBhcmVudENvbnRleHRzLmdldE9yQ3JlYXRlQ29udGV4dCh0aGlzLm5hbWUpLmNoaWxkcmVuLE89bmV3IE1fZShh'@;
put 'LF8sZC5pbmplY3Rvcik7dGhpcy5hY3RpdmF0ZWQ9ZC5jcmVhdGVDb21wb25lbnQobSx7aW5kZXg6ZC5sZW5ndGgsaW5qZWN0b3I6TyxlbnZpcm9ubWVudEluamVjdG9yOmY/P3RoaXMuZW52aXJvbm1lbnRJbmplY3Rvcn0pLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCksdGhp'@;
put 'cy5pbnB1dEJpbmRlcj8uYmluZEFjdGl2YXRlZFJvdXRlVG9PdXRsZXRDb21wb25lbnQodGhpcyksdGhpcy5hY3RpdmF0ZUV2ZW50cy5lbWl0KHRoaXMuYWN0aXZhdGVkLmluc3RhbmNlKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1'@;
put 'ZGlyPVNyKHt0eXBlOmwsc2VsZWN0b3JzOltbInJvdXRlci1vdXRsZXQiXV0saW5wdXRzOntuYW1lOiJuYW1lIn0sb3V0cHV0czp7YWN0aXZhdGVFdmVudHM6ImFjdGl2YXRlIixkZWFjdGl2YXRlRXZlbnRzOiJkZWFjdGl2YXRlIixhdHRhY2hFdmVudHM6ImF0dGFjaCIsZGV0YWNoRXZlbnRz'@;
put 'OiJkZXRhY2gifSxleHBvcnRBczpbIm91dGxldCJdLHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W2JsXX0pLGx9KSgpO2NsYXNzIE1fZXtjb25zdHJ1Y3RvcihjLGEsZil7dGhpcy5yb3V0ZT1jLHRoaXMuY2hpbGRDb250ZXh0cz1hLHRoaXMucGFyZW50PWZ9Z2V0KGMsYSl7cmV0dXJuIGM9PT10'@;
put 'dT90aGlzLnJvdXRlOmM9PT1DQz90aGlzLmNoaWxkQ29udGV4dHM6dGhpcy5wYXJlbnQuZ2V0KGMsYSl9fWNvbnN0IGlEPW5ldyBNaSgiIik7bGV0IElyZT0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKCl7dGhpcy5vdXRsZXREYXRhU3Vic2NyaXB0aW9ucz1uZXcgTWFwfWJpbmRBY3RpdmF0'@;
put 'ZWRSb3V0ZVRvT3V0bGV0Q29tcG9uZW50KGEpe3RoaXMudW5zdWJzY3JpYmVGcm9tUm91dGVEYXRhKGEpLHRoaXMuc3Vic2NyaWJlVG9Sb3V0ZURhdGEoYSl9dW5zdWJzY3JpYmVGcm9tUm91dGVEYXRhKGEpe3RoaXMub3V0bGV0RGF0YVN1YnNjcmlwdGlvbnMuZ2V0KGEpPy51bnN1YnNjcmli'@;
put 'ZSgpLHRoaXMub3V0bGV0RGF0YVN1YnNjcmlwdGlvbnMuZGVsZXRlKGEpfXN1YnNjcmliZVRvUm91dGVEYXRhKGEpe2NvbnN0e2FjdGl2YXRlZFJvdXRlOmZ9PWEsZD1DdihbZi5xdWVyeVBhcmFtcyxmLnBhcmFtcyxmLmRhdGFdKS5waXBlKGtsKChbaCxtLF9dLE8pPT4oXz17Li4uaCwuLi5t'@;
put 'LC4uLl99LDA9PT1PP0dpKF8pOlByb21pc2UucmVzb2x2ZShfKSkpKS5zdWJzY3JpYmUoaD0+e2lmKCFhLmlzQWN0aXZhdGVkfHwhYS5hY3RpdmF0ZWRDb21wb25lbnRSZWZ8fGEuYWN0aXZhdGVkUm91dGUhPT1mfHxudWxsPT09Zi5jb21wb25lbnQpcmV0dXJuIHZvaWQgdGhpcy51bnN1YnNj'@;
put 'cmliZUZyb21Sb3V0ZURhdGEoYSk7Y29uc3QgbT1mdW5jdGlvbiBvOWUobCl7Y29uc3QgYz1uYShsKTtpZighYylyZXR1cm4gbnVsbDtjb25zdCBhPW5ldyB1ZyhjKTtyZXR1cm57Z2V0IHNlbGVjdG9yKCl7cmV0dXJuIGEuc2VsZWN0b3J9LGdldCB0eXBlKCl7cmV0dXJuIGEuY29tcG9uZW50'@;
put 'VHlwZX0sZ2V0IGlucHV0cygpe3JldHVybiBhLmlucHV0c30sZ2V0IG91dHB1dHMoKXtyZXR1cm4gYS5vdXRwdXRzfSxnZXQgbmdDb250ZW50U2VsZWN0b3JzKCl7cmV0dXJuIGEubmdDb250ZW50U2VsZWN0b3JzfSxnZXQgaXNTdGFuZGFsb25lKCl7cmV0dXJuIGMuc3RhbmRhbG9uZX0sZ2V0'@;
put 'IGlzU2lnbmFsKCl7cmV0dXJuIGMuc2lnbmFsc319fShmLmNvbXBvbmVudCk7aWYobSlmb3IoY29uc3R7dGVtcGxhdGVOYW1lOl99b2YgbS5pbnB1dHMpYS5hY3RpdmF0ZWRDb21wb25lbnRSZWYuc2V0SW5wdXQoXyxoW19dKTtlbHNlIHRoaXMudW5zdWJzY3JpYmVGcm9tUm91dGVEYXRhKGEp'@;
put 'fSk7dGhpcy5vdXRsZXREYXRhU3Vic2NyaXB0aW9ucy5zZXQoYSxkKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1cHJvdj1ocih7dG9rZW46bCxmYWN0b3J5OmwuXHUwMjc1ZmFjfSksbH0pKCk7ZnVuY3Rpb24gU0MobCxjLGEpe2lm'@;
put 'KGEmJmwuc2hvdWxkUmV1c2VSb3V0ZShjLnZhbHVlLGEudmFsdWUuc25hcHNob3QpKXtjb25zdCBmPWEudmFsdWU7Zi5fZnV0dXJlU25hcHNob3Q9Yy52YWx1ZTtjb25zdCBkPWZ1bmN0aW9uIEVfZShsLGMsYSl7cmV0dXJuIGMuY2hpbGRyZW4ubWFwKGY9Pntmb3IoY29uc3QgZCBvZiBhLmNo'@;
put 'aWxkcmVuKWlmKGwuc2hvdWxkUmV1c2VSb3V0ZShmLnZhbHVlLGQudmFsdWUuc25hcHNob3QpKXJldHVybiBTQyhsLGYsZCk7cmV0dXJuIFNDKGwsZil9KX0obCxjLGEpO3JldHVybiBuZXcgRzIoZixkKX17aWYobC5zaG91bGRBdHRhY2goYy52YWx1ZSkpe2NvbnN0IGg9bC5yZXRyaWV2ZShj'@;
put 'LnZhbHVlKTtpZihudWxsIT09aCl7Y29uc3QgbT1oLnJvdXRlO3JldHVybiBtLnZhbHVlLl9mdXR1cmVTbmFwc2hvdD1jLnZhbHVlLG0uY2hpbGRyZW49Yy5jaGlsZHJlbi5tYXAoXz0+U0MobCxfKSksbX19Y29uc3QgZj1mdW5jdGlvbiB4X2UobCl7cmV0dXJuIG5ldyB0dShuZXcgT2UobC51'@;
put 'cmwpLG5ldyBPZShsLnBhcmFtcyksbmV3IE9lKGwucXVlcnlQYXJhbXMpLG5ldyBPZShsLmZyYWdtZW50KSxuZXcgT2UobC5kYXRhKSxsLm91dGxldCxsLmNvbXBvbmVudCxsKX0oYy52YWx1ZSksZD1jLmNoaWxkcmVuLm1hcChoPT5TQyhsLGgpKTtyZXR1cm4gbmV3IEcyKGYsZCl9fWNvbnN0'@;
put 'IHpqPSJuZ05hdmlnYXRpb25DYW5jZWxpbmdFcnJvciI7ZnVuY3Rpb24gUnJlKGwsYyl7Y29uc3R7cmVkaXJlY3RUbzphLG5hdmlnYXRpb25CZWhhdmlvck9wdGlvbnM6Zn09eGcoYyk/e3JlZGlyZWN0VG86YyxuYXZpZ2F0aW9uQmVoYXZpb3JPcHRpb25zOnZvaWQgMH06YyxkPUxyZSghMSww'@;
put 'LGMpO3JldHVybiBkLnVybD1hLGQubmF2aWdhdGlvbkJlaGF2aW9yT3B0aW9ucz1mLGR9ZnVuY3Rpb24gTHJlKGwsYyxhKXtjb25zdCBmPW5ldyBFcnJvcigiTmF2aWdhdGlvbkNhbmNlbGluZ0Vycm9yOiAiKyhsfHwiIikpO3JldHVybiBmW3pqXT0hMCxmLmNhbmNlbGxhdGlvbkNvZGU9Yyxh'@;
put 'JiYoZi51cmw9YSksZn1mdW5jdGlvbiBQcmUobCl7cmV0dXJuIEZyZShsKSYmeGcobC51cmwpfWZ1bmN0aW9uIEZyZShsKXtyZXR1cm4gbCYmbFt6al19bGV0IEhyZT0oKCk9PntjbGFzcyBse31yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAy'@;
put 'NzVjbXA9a3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1sibmctY29tcG9uZW50Il1dLHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W0xlZV0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxmKXsxJmEmJnRuKDAsInJvdXRlci1vdXRsZXQiKX0sZGVwZW5kZW5jaWVzOlt4dl0sZW5jYXBz'@;
put 'dWxhdGlvbjoyfSksbH0pKCk7ZnVuY3Rpb24gVWoobCl7Y29uc3QgYz1sLmNoaWxkcmVuJiZsLmNoaWxkcmVuLm1hcChVaiksYT1jP3suLi5sLGNoaWxkcmVuOmN9OnsuLi5sfTtyZXR1cm4hYS5jb21wb25lbnQmJiFhLmxvYWRDb21wb25lbnQmJihjfHxhLmxvYWRDaGlsZHJlbikmJmEub3V0'@;
put 'bGV0JiZhLm91dGxldCE9PWRhJiYoYS5jb21wb25lbnQ9SHJlKSxhfWZ1bmN0aW9uIF9kKGwpe3JldHVybiBsLm91dGxldHx8ZGF9ZnVuY3Rpb24gTUMobCl7aWYoIWwpcmV0dXJuIG51bGw7aWYobC5yb3V0ZUNvbmZpZz8uX2luamVjdG9yKXJldHVybiBsLnJvdXRlQ29uZmlnLl9pbmplY3Rv'@;
put 'cjtmb3IobGV0IGM9bC5wYXJlbnQ7YztjPWMucGFyZW50KXtjb25zdCBhPWMucm91dGVDb25maWc7aWYoYT8uX2xvYWRlZEluamVjdG9yKXJldHVybiBhLl9sb2FkZWRJbmplY3RvcjtpZihhPy5faW5qZWN0b3IpcmV0dXJuIGEuX2luamVjdG9yfXJldHVybiBudWxsfWNsYXNzIExfZXtjb25z'@;
put 'dHJ1Y3RvcihjLGEsZixkLGgpe3RoaXMucm91dGVSZXVzZVN0cmF0ZWd5PWMsdGhpcy5mdXR1cmVTdGF0ZT1hLHRoaXMuY3VyclN0YXRlPWYsdGhpcy5mb3J3YXJkRXZlbnQ9ZCx0aGlzLmlucHV0QmluZGluZ0VuYWJsZWQ9aH1hY3RpdmF0ZShjKXtjb25zdCBhPXRoaXMuZnV0dXJlU3RhdGUu'@;
put 'X3Jvb3QsZj10aGlzLmN1cnJTdGF0ZT90aGlzLmN1cnJTdGF0ZS5fcm9vdDpudWxsO3RoaXMuZGVhY3RpdmF0ZUNoaWxkUm91dGVzKGEsZixjKSxCaih0aGlzLmZ1dHVyZVN0YXRlLnJvb3QpLHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyhhLGYsYyl9ZGVhY3RpdmF0ZUNoaWxkUm91dGVzKGMs'@;
put 'YSxmKXtjb25zdCBkPUV2KGEpO2MuY2hpbGRyZW4uZm9yRWFjaChoPT57Y29uc3QgbT1oLnZhbHVlLm91dGxldDt0aGlzLmRlYWN0aXZhdGVSb3V0ZXMoaCxkW21dLGYpLGRlbGV0ZSBkW21dfSksT2JqZWN0LnZhbHVlcyhkKS5mb3JFYWNoKGg9Pnt0aGlzLmRlYWN0aXZhdGVSb3V0ZUFuZEl0'@;
put 'c0NoaWxkcmVuKGgsZil9KX1kZWFjdGl2YXRlUm91dGVzKGMsYSxmKXtjb25zdCBkPWMudmFsdWUsaD1hP2EudmFsdWU6bnVsbDtpZihkPT09aClpZihkLmNvbXBvbmVudCl7Y29uc3QgbT1mLmdldENvbnRleHQoZC5vdXRsZXQpO20mJnRoaXMuZGVhY3RpdmF0ZUNoaWxkUm91dGVzKGMsYSxt'@;
put 'LmNoaWxkcmVuKX1lbHNlIHRoaXMuZGVhY3RpdmF0ZUNoaWxkUm91dGVzKGMsYSxmKTtlbHNlIGgmJnRoaXMuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4oYSxmKX1kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbihjLGEpe2MudmFsdWUuY29tcG9uZW50JiZ0aGlzLnJvdXRlUmV1'@;
put 'c2VTdHJhdGVneS5zaG91bGREZXRhY2goYy52YWx1ZS5zbmFwc2hvdCk/dGhpcy5kZXRhY2hBbmRTdG9yZVJvdXRlU3VidHJlZShjLGEpOnRoaXMuZGVhY3RpdmF0ZVJvdXRlQW5kT3V0bGV0KGMsYSl9ZGV0YWNoQW5kU3RvcmVSb3V0ZVN1YnRyZWUoYyxhKXtjb25zdCBmPWEuZ2V0Q29udGV4'@;
put 'dChjLnZhbHVlLm91dGxldCksZD1mJiZjLnZhbHVlLmNvbXBvbmVudD9mLmNoaWxkcmVuOmEsaD1FdihjKTtmb3IoY29uc3QgbSBvZiBPYmplY3Qua2V5cyhoKSl0aGlzLmRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuKGhbbV0sZCk7aWYoZiYmZi5vdXRsZXQpe2NvbnN0IG09Zi5vdXRs'@;
put 'ZXQuZGV0YWNoKCksXz1mLmNoaWxkcmVuLm9uT3V0bGV0RGVhY3RpdmF0ZWQoKTt0aGlzLnJvdXRlUmV1c2VTdHJhdGVneS5zdG9yZShjLnZhbHVlLnNuYXBzaG90LHtjb21wb25lbnRSZWY6bSxyb3V0ZTpjLGNvbnRleHRzOl99KX19ZGVhY3RpdmF0ZVJvdXRlQW5kT3V0bGV0KGMsYSl7Y29u'@;
put 'c3QgZj1hLmdldENvbnRleHQoYy52YWx1ZS5vdXRsZXQpLGQ9ZiYmYy52YWx1ZS5jb21wb25lbnQ/Zi5jaGlsZHJlbjphLGg9RXYoYyk7Zm9yKGNvbnN0IG0gb2YgT2JqZWN0LmtleXMoaCkpdGhpcy5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbihoW21dLGQpO2YmJihmLm91dGxldCYm'@;
put 'KGYub3V0bGV0LmRlYWN0aXZhdGUoKSxmLmNoaWxkcmVuLm9uT3V0bGV0RGVhY3RpdmF0ZWQoKSksZi5hdHRhY2hSZWY9bnVsbCxmLnJvdXRlPW51bGwpfWFjdGl2YXRlQ2hpbGRSb3V0ZXMoYyxhLGYpe2NvbnN0IGQ9RXYoYSk7Yy5jaGlsZHJlbi5mb3JFYWNoKGg9Pnt0aGlzLmFjdGl2YXRl'@;
put 'Um91dGVzKGgsZFtoLnZhbHVlLm91dGxldF0sZiksdGhpcy5mb3J3YXJkRXZlbnQobmV3IF9fZShoLnZhbHVlLnNuYXBzaG90KSl9KSxjLmNoaWxkcmVuLmxlbmd0aCYmdGhpcy5mb3J3YXJkRXZlbnQobmV3IHlfZShjLnZhbHVlLnNuYXBzaG90KSl9YWN0aXZhdGVSb3V0ZXMoYyxhLGYpe2Nv'@;
put 'bnN0IGQ9Yy52YWx1ZSxoPWE/YS52YWx1ZTpudWxsO2lmKEJqKGQpLGQ9PT1oKWlmKGQuY29tcG9uZW50KXtjb25zdCBtPWYuZ2V0T3JDcmVhdGVDb250ZXh0KGQub3V0bGV0KTt0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXMoYyxhLG0uY2hpbGRyZW4pfWVsc2UgdGhpcy5hY3RpdmF0ZUNoaWxk'@;
put 'Um91dGVzKGMsYSxmKTtlbHNlIGlmKGQuY29tcG9uZW50KXtjb25zdCBtPWYuZ2V0T3JDcmVhdGVDb250ZXh0KGQub3V0bGV0KTtpZih0aGlzLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGRBdHRhY2goZC5zbmFwc2hvdCkpe2NvbnN0IF89dGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kucmV0cmll'@;
put 'dmUoZC5zbmFwc2hvdCk7dGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kuc3RvcmUoZC5zbmFwc2hvdCxudWxsKSxtLmNoaWxkcmVuLm9uT3V0bGV0UmVBdHRhY2hlZChfLmNvbnRleHRzKSxtLmF0dGFjaFJlZj1fLmNvbXBvbmVudFJlZixtLnJvdXRlPV8ucm91dGUudmFsdWUsbS5vdXRsZXQmJm0u'@;
put 'b3V0bGV0LmF0dGFjaChfLmNvbXBvbmVudFJlZixfLnJvdXRlLnZhbHVlKSxCaihfLnJvdXRlLnZhbHVlKSx0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXMoYyxudWxsLG0uY2hpbGRyZW4pfWVsc2V7Y29uc3QgXz1NQyhkLnNuYXBzaG90KTttLmF0dGFjaFJlZj1udWxsLG0ucm91dGU9ZCxtLmlu'@;
put 'amVjdG9yPV8sbS5vdXRsZXQmJm0ub3V0bGV0LmFjdGl2YXRlV2l0aChkLG0uaW5qZWN0b3IpLHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyhjLG51bGwsbS5jaGlsZHJlbil9fWVsc2UgdGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKGMsbnVsbCxmKX19Y2xhc3MgTnJle2NvbnN0cnVjdG9yKGMp'@;
put 'e3RoaXMucGF0aD1jLHRoaXMucm91dGU9dGhpcy5wYXRoW3RoaXMucGF0aC5sZW5ndGgtMV19fWNsYXNzIG9Ee2NvbnN0cnVjdG9yKGMsYSl7dGhpcy5jb21wb25lbnQ9Yyx0aGlzLnJvdXRlPWF9fWZ1bmN0aW9uIFBfZShsLGMsYSl7Y29uc3QgZj1sLl9yb290O3JldHVybiBrQyhmLGM/Yy5f'@;
put 'cm9vdDpudWxsLGEsW2YudmFsdWVdKX1mdW5jdGlvbiBBdihsLGMpe2NvbnN0IGE9U3ltYm9sKCksZj1jLmdldChsLGEpO3JldHVybiBmPT09YT8iZnVuY3Rpb24iIT10eXBlb2YgbHx8ZnVuY3Rpb24gRGIobCl7cmV0dXJuIG51bGwhPT1VZihsKX0obCk/Yy5nZXQobCk6bDpmfWZ1bmN0aW9u'@;
put 'IGtDKGwsYyxhLGYsZD17Y2FuRGVhY3RpdmF0ZUNoZWNrczpbXSxjYW5BY3RpdmF0ZUNoZWNrczpbXX0pe2NvbnN0IGg9RXYoYyk7cmV0dXJuIGwuY2hpbGRyZW4uZm9yRWFjaChtPT57KGZ1bmN0aW9uIEhfZShsLGMsYSxmLGQ9e2NhbkRlYWN0aXZhdGVDaGVja3M6W10sY2FuQWN0aXZhdGVD'@;
put 'aGVja3M6W119KXtjb25zdCBoPWwudmFsdWUsbT1jP2MudmFsdWU6bnVsbCxfPWE/YS5nZXRDb250ZXh0KGwudmFsdWUub3V0bGV0KTpudWxsO2lmKG0mJmgucm91dGVDb25maWc9PT1tLnJvdXRlQ29uZmlnKXtjb25zdCBPPWZ1bmN0aW9uIE5fZShsLGMsYSl7aWYoImZ1bmN0aW9uIj09dHlw'@;
put 'ZW9mIGEpcmV0dXJuIGEobCxjKTtzd2l0Y2goYSl7Y2FzZSJwYXRoUGFyYW1zQ2hhbmdlIjpyZXR1cm4hRWcobC51cmwsYy51cmwpO2Nhc2UicGF0aFBhcmFtc09yUXVlcnlQYXJhbXNDaGFuZ2UiOnJldHVybiFFZyhsLnVybCxjLnVybCl8fCFNaChsLnF1ZXJ5UGFyYW1zLGMucXVlcnlQYXJh'@;
put 'bXMpO2Nhc2UiYWx3YXlzIjpyZXR1cm4hMDtjYXNlInBhcmFtc09yUXVlcnlQYXJhbXNDaGFuZ2UiOnJldHVybiFqaihsLGMpfHwhTWgobC5xdWVyeVBhcmFtcyxjLnF1ZXJ5UGFyYW1zKTtkZWZhdWx0OnJldHVybiFqaihsLGMpfX0obSxoLGgucm91dGVDb25maWcucnVuR3VhcmRzQW5kUmVz'@;
put 'b2x2ZXJzKTtPP2QuY2FuQWN0aXZhdGVDaGVja3MucHVzaChuZXcgTnJlKGYpKTooaC5kYXRhPW0uZGF0YSxoLl9yZXNvbHZlZERhdGE9bS5fcmVzb2x2ZWREYXRhKSxrQyhsLGMsaC5jb21wb25lbnQ/Xz9fLmNoaWxkcmVuOm51bGw6YSxmLGQpLE8mJl8mJl8ub3V0bGV0JiZfLm91dGxldC5p'@;
put 'c0FjdGl2YXRlZCYmZC5jYW5EZWFjdGl2YXRlQ2hlY2tzLnB1c2gobmV3IG9EKF8ub3V0bGV0LmNvbXBvbmVudCxtKSl9ZWxzZSBtJiZFQyhjLF8sZCksZC5jYW5BY3RpdmF0ZUNoZWNrcy5wdXNoKG5ldyBOcmUoZikpLGtDKGwsbnVsbCxoLmNvbXBvbmVudD9fP18uY2hpbGRyZW46bnVsbDph'@;
put 'LGYsZCl9KShtLGhbbS52YWx1ZS5vdXRsZXRdLGEsZi5jb25jYXQoW20udmFsdWVdKSxkKSxkZWxldGUgaFttLnZhbHVlLm91dGxldF19KSxPYmplY3QuZW50cmllcyhoKS5mb3JFYWNoKChbbSxfXSk9PkVDKF8sYS5nZXRDb250ZXh0KG0pLGQpKSxkfWZ1bmN0aW9uIEVDKGwsYyxhKXtjb25z'@;
put 'dCBmPUV2KGwpLGQ9bC52YWx1ZTtPYmplY3QuZW50cmllcyhmKS5mb3JFYWNoKChbaCxtXSk9PntFQyhtLGQuY29tcG9uZW50P2M/Yy5jaGlsZHJlbi5nZXRDb250ZXh0KGgpOm51bGw6YyxhKX0pLGEuY2FuRGVhY3RpdmF0ZUNoZWNrcy5wdXNoKG5ldyBvRChkLmNvbXBvbmVudCYmYyYmYy5v'@;
put 'dXRsZXQmJmMub3V0bGV0LmlzQWN0aXZhdGVkP2Mub3V0bGV0LmNvbXBvbmVudDpudWxsLGQpKX1mdW5jdGlvbiB4QyhsKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgbH1mdW5jdGlvbiBWcmUobCl7cmV0dXJuIGwgaW5zdGFuY2VvZiBHT3x8IkVtcHR5RXJyb3IiPT09bD8ubmFtZX1jb25z'@;
put 'dCBhRD1TeW1ib2woIklOSVRJQUxfVkFMVUUiKTtmdW5jdGlvbiBUdigpe3JldHVybiBrbChsPT5DdihsLm1hcChjPT5jLnBpcGUoRWYoMSksdDQoYUQpKSkpLnBpcGUoRWUoYz0+e2Zvcihjb25zdCBhIG9mIGMpaWYoITAhPT1hKXtpZihhPT09YUQpcmV0dXJuIGFEO2lmKCExPT09YXx8YSBp'@;
put 'bnN0YW5jZW9mIGt2KXJldHVybiBhfXJldHVybiEwfSksSWwoYz0+YyE9PWFEKSxFZigxKSkpfWZ1bmN0aW9uIEJyZShsKXtyZXR1cm4gZnVuY3Rpb24gTmUoLi4ubCl7cmV0dXJuIExlKGwpfShxdShjPT57aWYoeGcoYykpdGhyb3cgUnJlKDAsYyl9KSxFZShjPT4hMD09PWMpKX1jbGFzcyBs'@;
put 'RHtjb25zdHJ1Y3RvcihjKXt0aGlzLnNlZ21lbnRHcm91cD1jfHxudWxsfX1jbGFzcyBqcmV7Y29uc3RydWN0b3IoYyl7dGhpcy51cmxUcmVlPWN9fWZ1bmN0aW9uIE92KGwpe3JldHVybiBkQyhuZXcgbEQobCkpfWZ1bmN0aW9uIHpyZShsKXtyZXR1cm4gZEMobmV3IGpyZShsKSl9Y2xhc3Mg'@;
put 'aXdle2NvbnN0cnVjdG9yKGMsYSl7dGhpcy51cmxTZXJpYWxpemVyPWMsdGhpcy51cmxUcmVlPWF9bm9NYXRjaEVycm9yKGMpe3JldHVybiBuZXcgSXIoNDAwMiwhMSl9bGluZXJhbGl6ZVNlZ21lbnRzKGMsYSl7bGV0IGY9W10sZD1hLnJvb3Q7Zm9yKDs7KXtpZihmPWYuY29uY2F0KGQuc2Vn'@;
put 'bWVudHMpLDA9PT1kLm51bWJlck9mQ2hpbGRyZW4pcmV0dXJuIEdpKGYpO2lmKGQubnVtYmVyT2ZDaGlsZHJlbj4xfHwhZC5jaGlsZHJlbltkYV0pcmV0dXJuIGRDKG5ldyBJcig0ZTMsITEpKTtkPWQuY2hpbGRyZW5bZGFdfX1hcHBseVJlZGlyZWN0Q29tbWFuZHMoYyxhLGYpe3JldHVybiB0'@;
put 'aGlzLmFwcGx5UmVkaXJlY3RDcmVhdGVVcmxUcmVlKGEsdGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKGEpLGMsZil9YXBwbHlSZWRpcmVjdENyZWF0ZVVybFRyZWUoYyxhLGYsZCl7Y29uc3QgaD10aGlzLmNyZWF0ZVNlZ21lbnRHcm91cChjLGEucm9vdCxmLGQpO3JldHVybiBuZXcga3YoaCx0'@;
put 'aGlzLmNyZWF0ZVF1ZXJ5UGFyYW1zKGEucXVlcnlQYXJhbXMsdGhpcy51cmxUcmVlLnF1ZXJ5UGFyYW1zKSxhLmZyYWdtZW50KX1jcmVhdGVRdWVyeVBhcmFtcyhjLGEpe2NvbnN0IGY9e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKGMpLmZvckVhY2goKFtkLGhdKT0+e2lmKCJzdHJpbmciPT10'@;
put 'eXBlb2YgaCYmaC5zdGFydHNXaXRoKCI6Iikpe2NvbnN0IF89aC5zdWJzdHJpbmcoMSk7ZltkXT1hW19dfWVsc2UgZltkXT1ofSksZn1jcmVhdGVTZWdtZW50R3JvdXAoYyxhLGYsZCl7Y29uc3QgaD10aGlzLmNyZWF0ZVNlZ21lbnRzKGMsYS5zZWdtZW50cyxmLGQpO2xldCBtPXt9O3JldHVy'@;
put 'biBPYmplY3QuZW50cmllcyhhLmNoaWxkcmVuKS5mb3JFYWNoKChbXyxPXSk9PnttW19dPXRoaXMuY3JlYXRlU2VnbWVudEdyb3VwKGMsTyxmLGQpfSksbmV3IENsKGgsbSl9Y3JlYXRlU2VnbWVudHMoYyxhLGYsZCl7cmV0dXJuIGEubWFwKGg9PmgucGF0aC5zdGFydHNXaXRoKCI6Iik/dGhp'@;
put 'cy5maW5kUG9zUGFyYW0oYyxoLGQpOnRoaXMuZmluZE9yUmV0dXJuKGgsZikpfWZpbmRQb3NQYXJhbShjLGEsZil7Y29uc3QgZD1mW2EucGF0aC5zdWJzdHJpbmcoMSldO2lmKCFkKXRocm93IG5ldyBJcig0MDAxLCExKTtyZXR1cm4gZH1maW5kT3JSZXR1cm4oYyxhKXtsZXQgZj0wO2Zvcihj'@;
put 'b25zdCBkIG9mIGEpe2lmKGQucGF0aD09PWMucGF0aClyZXR1cm4gYS5zcGxpY2UoZiksZDtmKyt9cmV0dXJuIGN9fWNvbnN0IFpqPXttYXRjaGVkOiExLGNvbnN1bWVkU2VnbWVudHM6W10scmVtYWluaW5nU2VnbWVudHM6W10scGFyYW1ldGVyczp7fSxwb3NpdGlvbmFsUGFyYW1TZWdtZW50'@;
put 'czp7fX07ZnVuY3Rpb24gb3dlKGwsYyxhLGYsZCl7Y29uc3QgaD1ZaihsLGMsYSk7cmV0dXJuIGgubWF0Y2hlZD8oZj1mdW5jdGlvbiBBX2UobCxjKXtyZXR1cm4gbC5wcm92aWRlcnMmJiFsLl9pbmplY3RvciYmKGwuX2luamVjdG9yPXlCKGwucHJvdmlkZXJzLGMsYFJvdXRlOiAke2wucGF0'@;
put 'aH1gKSksbC5faW5qZWN0b3I/P2N9KGMsZiksZnVuY3Rpb24gdHdlKGwsYyxhLGYpe2NvbnN0IGQ9Yy5jYW5NYXRjaDtyZXR1cm4gZCYmMCE9PWQubGVuZ3RoP0dpKGQubWFwKG09Pntjb25zdCBfPUF2KG0sbCk7cmV0dXJuIHI0KGZ1bmN0aW9uIFpfZShsKXtyZXR1cm4gbCYmeEMobC5jYW5N'@;
put 'YXRjaCl9KF8pP18uY2FuTWF0Y2goYyxhKTpsLnJ1bkluQ29udGV4dCgoKT0+XyhjLGEpKSl9KSkucGlwZShUdigpLEJyZSgpKTpHaSghMCl9KGYsYyxhKS5waXBlKEVlKG09PiEwPT09bT9oOnsuLi5aan0pKSk6R2koaCl9ZnVuY3Rpb24gWWoobCxjLGEpe2lmKCIiPT09Yy5wYXRoKXJldHVy'@;
put 'biJmdWxsIj09PWMucGF0aE1hdGNoJiYobC5oYXNDaGlsZHJlbigpfHxhLmxlbmd0aD4wKT97Li4uWmp9OnttYXRjaGVkOiEwLGNvbnN1bWVkU2VnbWVudHM6W10scmVtYWluaW5nU2VnbWVudHM6YSxwYXJhbWV0ZXJzOnt9LHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzOnt9fTtjb25zdCBkPShj'@;
put 'Lm1hdGNoZXJ8fEhiZSkoYSxsLGMpO2lmKCFkKXJldHVybnsuLi5aan07Y29uc3QgaD17fTtPYmplY3QuZW50cmllcyhkLnBvc1BhcmFtcz8/e30pLmZvckVhY2goKFtfLE9dKT0+e2hbX109Ty5wYXRofSk7Y29uc3QgbT1kLmNvbnN1bWVkLmxlbmd0aD4wP3suLi5oLC4uLmQuY29uc3VtZWRb'@;
put 'ZC5jb25zdW1lZC5sZW5ndGgtMV0ucGFyYW1ldGVyc306aDtyZXR1cm57bWF0Y2hlZDohMCxjb25zdW1lZFNlZ21lbnRzOmQuY29uc3VtZWQscmVtYWluaW5nU2VnbWVudHM6YS5zbGljZShkLmNvbnN1bWVkLmxlbmd0aCkscGFyYW1ldGVyczptLHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzOmQu'@;
put 'cG9zUGFyYW1zPz97fX19ZnVuY3Rpb24gVXJlKGwsYyxhLGYpe3JldHVybiBhLmxlbmd0aD4wJiZmdW5jdGlvbiBzd2UobCxjLGEpe3JldHVybiBhLnNvbWUoZj0+c0QobCxjLGYpJiZfZChmKSE9PWRhKX0obCxhLGYpP3tzZWdtZW50R3JvdXA6bmV3IENsKGMsbHdlKGYsbmV3IENsKGEsbC5j'@;
put 'aGlsZHJlbikpKSxzbGljZWRTZWdtZW50czpbXX06MD09PWEubGVuZ3RoJiZmdW5jdGlvbiB1d2UobCxjLGEpe3JldHVybiBhLnNvbWUoZj0+c0QobCxjLGYpKX0obCxhLGYpP3tzZWdtZW50R3JvdXA6bmV3IENsKGwuc2VnbWVudHMsYXdlKGwsMCxhLGYsbC5jaGlsZHJlbikpLHNsaWNlZFNl'@;
put 'Z21lbnRzOmF9OntzZWdtZW50R3JvdXA6bmV3IENsKGwuc2VnbWVudHMsbC5jaGlsZHJlbiksc2xpY2VkU2VnbWVudHM6YX19ZnVuY3Rpb24gYXdlKGwsYyxhLGYsZCl7Y29uc3QgaD17fTtmb3IoY29uc3QgbSBvZiBmKWlmKHNEKGwsYSxtKSYmIWRbX2QobSldKXtjb25zdCBfPW5ldyBDbChb'@;
put 'XSx7fSk7aFtfZChtKV09X31yZXR1cm57Li4uZCwuLi5ofX1mdW5jdGlvbiBsd2UobCxjKXtjb25zdCBhPXt9O2FbZGFdPWM7Zm9yKGNvbnN0IGYgb2YgbClpZigiIj09PWYucGF0aCYmX2QoZikhPT1kYSl7Y29uc3QgZD1uZXcgQ2woW10se30pO2FbX2QoZildPWR9cmV0dXJuIGF9ZnVuY3Rp'@;
put 'b24gc0QobCxjLGEpe3JldHVybighKGwuaGFzQ2hpbGRyZW4oKXx8Yy5sZW5ndGg+MCl8fCJmdWxsIiE9PWEucGF0aE1hdGNoKSYmIiI9PT1hLnBhdGh9Y2xhc3MgaHdle2NvbnN0cnVjdG9yKGMsYSxmLGQsaCxtLF8pe3RoaXMuaW5qZWN0b3I9Yyx0aGlzLmNvbmZpZ0xvYWRlcj1hLHRoaXMu'@;
put 'cm9vdENvbXBvbmVudFR5cGU9Zix0aGlzLmNvbmZpZz1kLHRoaXMudXJsVHJlZT1oLHRoaXMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneT1tLHRoaXMudXJsU2VyaWFsaXplcj1fLHRoaXMuYWxsb3dSZWRpcmVjdHM9ITAsdGhpcy5hcHBseVJlZGlyZWN0cz1uZXcgaXdlKHRoaXMudXJsU2Vy'@;
put 'aWFsaXplcix0aGlzLnVybFRyZWUpfW5vTWF0Y2hFcnJvcihjKXtyZXR1cm4gbmV3IElyKDQwMDIsITEpfXJlY29nbml6ZSgpe2NvbnN0IGM9VXJlKHRoaXMudXJsVHJlZS5yb290LFtdLFtdLHRoaXMuY29uZmlnKS5zZWdtZW50R3JvdXA7cmV0dXJuIHRoaXMucHJvY2Vzc1NlZ21lbnRHcm91'@;
put 'cCh0aGlzLmluamVjdG9yLHRoaXMuY29uZmlnLGMsZGEpLnBpcGUoa2coYT0+e2lmKGEgaW5zdGFuY2VvZiBqcmUpcmV0dXJuIHRoaXMuYWxsb3dSZWRpcmVjdHM9ITEsdGhpcy51cmxUcmVlPWEudXJsVHJlZSx0aGlzLm1hdGNoKGEudXJsVHJlZSk7dGhyb3cgYSBpbnN0YW5jZW9mIGxEP3Ro'@;
put 'aXMubm9NYXRjaEVycm9yKGEpOmF9KSxFZShhPT57Y29uc3QgZj1uZXcgckQoW10sT2JqZWN0LmZyZWV6ZSh7fSksT2JqZWN0LmZyZWV6ZSh7Li4udGhpcy51cmxUcmVlLnF1ZXJ5UGFyYW1zfSksdGhpcy51cmxUcmVlLmZyYWdtZW50LHt9LGRhLHRoaXMucm9vdENvbXBvbmVudFR5cGUsbnVs'@;
put 'bCx7fSksZD1uZXcgRzIoZixhKSxoPW5ldyBPcmUoIiIsZCksbT1mdW5jdGlvbiByX2UobCxjLGE9bnVsbCxmPW51bGwpe3JldHVybiBicmUoeXJlKGwpLGMsYSxmKX0oZixbXSx0aGlzLnVybFRyZWUucXVlcnlQYXJhbXMsdGhpcy51cmxUcmVlLmZyYWdtZW50KTtyZXR1cm4gbS5xdWVyeVBh'@;
put 'cmFtcz10aGlzLnVybFRyZWUucXVlcnlQYXJhbXMsaC51cmw9dGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShtKSx0aGlzLmluaGVyaXRQYXJhbXNBbmREYXRhKGguX3Jvb3QpLHtzdGF0ZTpoLHRyZWU6bX19KSl9bWF0Y2goYyl7cmV0dXJuIHRoaXMucHJvY2Vzc1NlZ21lbnRHcm91cCh0'@;
put 'aGlzLmluamVjdG9yLHRoaXMuY29uZmlnLGMucm9vdCxkYSkucGlwZShrZyhmPT57dGhyb3cgZiBpbnN0YW5jZW9mIGxEP3RoaXMubm9NYXRjaEVycm9yKGYpOmZ9KSl9aW5oZXJpdFBhcmFtc0FuZERhdGEoYyl7Y29uc3QgYT1jLnZhbHVlLGY9VHJlKGEsdGhpcy5wYXJhbXNJbmhlcml0YW5j'@;
put 'ZVN0cmF0ZWd5KTthLnBhcmFtcz1PYmplY3QuZnJlZXplKGYucGFyYW1zKSxhLmRhdGE9T2JqZWN0LmZyZWV6ZShmLmRhdGEpLGMuY2hpbGRyZW4uZm9yRWFjaChkPT50aGlzLmluaGVyaXRQYXJhbXNBbmREYXRhKGQpKX1wcm9jZXNzU2VnbWVudEdyb3VwKGMsYSxmLGQpe3JldHVybiAwPT09'@;
put 'Zi5zZWdtZW50cy5sZW5ndGgmJmYuaGFzQ2hpbGRyZW4oKT90aGlzLnByb2Nlc3NDaGlsZHJlbihjLGEsZik6dGhpcy5wcm9jZXNzU2VnbWVudChjLGEsZixmLnNlZ21lbnRzLGQsITApfXByb2Nlc3NDaGlsZHJlbihjLGEsZil7Y29uc3QgZD1bXTtmb3IoY29uc3QgaCBvZiBPYmplY3Qua2V5'@;
put 'cyhmLmNoaWxkcmVuKSkicHJpbWFyeSI9PT1oP2QudW5zaGlmdChoKTpkLnB1c2goaCk7cmV0dXJuIG5sKGQpLnBpcGUoU3YoaD0+e2NvbnN0IG09Zi5jaGlsZHJlbltoXSxfPWZ1bmN0aW9uIElfZShsLGMpe2NvbnN0IGE9bC5maWx0ZXIoZj0+X2QoZik9PT1jKTtyZXR1cm4gYS5wdXNoKC4u'@;
put 'LmwuZmlsdGVyKGY9Pl9kKGYpIT09YykpLGF9KGEsaCk7cmV0dXJuIHRoaXMucHJvY2Vzc1NlZ21lbnRHcm91cChjLF8sbSxoKX0pLGZ1bmN0aW9uIExiZShsLGMpe3JldHVybiBudChmdW5jdGlvbiBSYmUobCxjLGEsZixkKXtyZXR1cm4oaCxtKT0+e2xldCBfPWEsTz1jLFg9MDtoLnN1YnNj'@;
put 'cmliZShxZShtLGFlPT57Y29uc3QgcGU9WCsrO089Xz9sKE8sYWUscGUpOihfPSEwLGFlKSxmJiZtLm5leHQoTyl9LGQmJigoKT0+e18mJm0ubmV4dChPKSxtLmNvbXBsZXRlKCl9KSkpfX0obCxjLGFyZ3VtZW50cy5sZW5ndGg+PTIsITApKX0oKGgsbSk9PihoLnB1c2goLi4ubSksaCkpLEtP'@;
put 'KG51bGwpLGZ1bmN0aW9uIFBiZShsLGMpe2NvbnN0IGE9YXJndW1lbnRzLmxlbmd0aD49MjtyZXR1cm4gZj0+Zi5waXBlKGw/SWwoKGQsaCk9PmwoZCxoLGYpKTpGZSxUaigxKSxhP0tPKGMpOmlyZSgoKT0+bmV3IEdPKSl9KCksX3IoaD0+e2lmKG51bGw9PT1oKXJldHVybiBPdihmKTtjb25z'@;
put 'dCBtPVpyZShoKTtyZXR1cm4gZnVuY3Rpb24gcHdlKGwpe2wuc29ydCgoYyxhKT0+Yy52YWx1ZS5vdXRsZXQ9PT1kYT8tMTphLnZhbHVlLm91dGxldD09PWRhPzE6Yy52YWx1ZS5vdXRsZXQubG9jYWxlQ29tcGFyZShhLnZhbHVlLm91dGxldCkpfShtKSxHaShtKX0pKX1wcm9jZXNzU2VnbWVu'@;
put 'dChjLGEsZixkLGgsbSl7cmV0dXJuIG5sKGEpLnBpcGUoU3YoXz0+dGhpcy5wcm9jZXNzU2VnbWVudEFnYWluc3RSb3V0ZShfLl9pbmplY3Rvcj8/YyxhLF8sZixkLGgsbSkucGlwZShrZyhPPT57aWYoTyBpbnN0YW5jZW9mIGxEKXJldHVybiBHaShudWxsKTt0aHJvdyBPfSkpKSxuNChfPT4h'@;
put 'IV8pLGtnKF89PntpZihWcmUoXykpcmV0dXJuIGZ1bmN0aW9uIGZ3ZShsLGMsYSl7cmV0dXJuIDA9PT1jLmxlbmd0aCYmIWwuY2hpbGRyZW5bYV19KGYsZCxoKT9HaShbXSk6T3YoZik7dGhyb3cgX30pKX1wcm9jZXNzU2VnbWVudEFnYWluc3RSb3V0ZShjLGEsZixkLGgsbSxfKXtyZXR1cm4g'@;
put 'ZnVuY3Rpb24gY3dlKGwsYyxhLGYpe3JldHVybiEhKF9kKGwpPT09Znx8ZiE9PWRhJiZzRChjLGEsbCkpJiYoIioqIj09PWwucGF0aHx8WWooYyxsLGEpLm1hdGNoZWQpfShmLGQsaCxtKT92b2lkIDA9PT1mLnJlZGlyZWN0VG8/dGhpcy5tYXRjaFNlZ21lbnRBZ2FpbnN0Um91dGUoYyxkLGYs'@;
put 'aCxtLF8pOl8mJnRoaXMuYWxsb3dSZWRpcmVjdHM/dGhpcy5leHBhbmRTZWdtZW50QWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdChjLGQsYSxmLGgsbSk6T3YoZCk6T3YoZCl9ZXhwYW5kU2VnbWVudEFnYWluc3RSb3V0ZVVzaW5nUmVkaXJlY3QoYyxhLGYsZCxoLG0pe3JldHVybiIqKiI9PT1k'@;
put 'LnBhdGg/dGhpcy5leHBhbmRXaWxkQ2FyZFdpdGhQYXJhbXNBZ2FpbnN0Um91dGVVc2luZ1JlZGlyZWN0KGMsZixkLG0pOnRoaXMuZXhwYW5kUmVndWxhclNlZ21lbnRBZ2FpbnN0Um91dGVVc2luZ1JlZGlyZWN0KGMsYSxmLGQsaCxtKX1leHBhbmRXaWxkQ2FyZFdpdGhQYXJhbXNBZ2FpbnN0'@;
put 'Um91dGVVc2luZ1JlZGlyZWN0KGMsYSxmLGQpe2NvbnN0IGg9dGhpcy5hcHBseVJlZGlyZWN0cy5hcHBseVJlZGlyZWN0Q29tbWFuZHMoW10sZi5yZWRpcmVjdFRvLHt9KTtyZXR1cm4gZi5yZWRpcmVjdFRvLnN0YXJ0c1dpdGgoIi8iKT96cmUoaCk6dGhpcy5hcHBseVJlZGlyZWN0cy5saW5l'@;
put 'cmFsaXplU2VnbWVudHMoZixoKS5waXBlKF9yKG09Pntjb25zdCBfPW5ldyBDbChtLHt9KTtyZXR1cm4gdGhpcy5wcm9jZXNzU2VnbWVudChjLGEsXyxtLGQsITEpfSkpfWV4cGFuZFJlZ3VsYXJTZWdtZW50QWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdChjLGEsZixkLGgsbSl7Y29uc3R7bWF0'@;
put 'Y2hlZDpfLGNvbnN1bWVkU2VnbWVudHM6TyxyZW1haW5pbmdTZWdtZW50czpYLHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzOmFlfT1ZaihhLGQsaCk7aWYoIV8pcmV0dXJuIE92KGEpO2NvbnN0IHBlPXRoaXMuYXBwbHlSZWRpcmVjdHMuYXBwbHlSZWRpcmVjdENvbW1hbmRzKE8sZC5yZWRpcmVj'@;
put 'dFRvLGFlKTtyZXR1cm4gZC5yZWRpcmVjdFRvLnN0YXJ0c1dpdGgoIi8iKT96cmUocGUpOnRoaXMuYXBwbHlSZWRpcmVjdHMubGluZXJhbGl6ZVNlZ21lbnRzKGQscGUpLnBpcGUoX3IoYmU9PnRoaXMucHJvY2Vzc1NlZ21lbnQoYyxmLGEsYmUuY29uY2F0KFgpLG0sITEpKSl9bWF0Y2hTZWdt'@;
put 'ZW50QWdhaW5zdFJvdXRlKGMsYSxmLGQsaCxtKXtsZXQgXztpZigiKioiPT09Zi5wYXRoKXtjb25zdCBPPWQubGVuZ3RoPjA/bHJlKGQpLnBhcmFtZXRlcnM6e307Xz1HaSh7c25hcHNob3Q6bmV3IHJEKGQsTyxPYmplY3QuZnJlZXplKHsuLi50aGlzLnVybFRyZWUucXVlcnlQYXJhbXN9KSx0'@;
put 'aGlzLnVybFRyZWUuZnJhZ21lbnQsWXJlKGYpLF9kKGYpLGYuY29tcG9uZW50Pz9mLl9sb2FkZWRDb21wb25lbnQ/P251bGwsZixXcmUoZikpLGNvbnN1bWVkU2VnbWVudHM6W10scmVtYWluaW5nU2VnbWVudHM6W119KSxhLmNoaWxkcmVuPXt9fWVsc2UgXz1vd2UoYSxmLGQsYykucGlwZShF'@;
put 'ZSgoe21hdGNoZWQ6Tyxjb25zdW1lZFNlZ21lbnRzOlgscmVtYWluaW5nU2VnbWVudHM6YWUscGFyYW1ldGVyczpwZX0pPT5PP3tzbmFwc2hvdDpuZXcgckQoWCxwZSxPYmplY3QuZnJlZXplKHsuLi50aGlzLnVybFRyZWUucXVlcnlQYXJhbXN9KSx0aGlzLnVybFRyZWUuZnJhZ21lbnQsWXJl'@;
put 'KGYpLF9kKGYpLGYuY29tcG9uZW50Pz9mLl9sb2FkZWRDb21wb25lbnQ/P251bGwsZixXcmUoZikpLGNvbnN1bWVkU2VnbWVudHM6WCxyZW1haW5pbmdTZWdtZW50czphZX06bnVsbCkpO3JldHVybiBfLnBpcGUoa2woTz0+bnVsbD09PU8/T3YoYSk6dGhpcy5nZXRDaGlsZENvbmZpZyhjPWYu'@;
put 'X2luamVjdG9yPz9jLGYsZCkucGlwZShrbCgoe3JvdXRlczpYfSk9Pntjb25zdCBhZT1mLl9sb2FkZWRJbmplY3Rvcj8/Yyx7c25hcHNob3Q6cGUsY29uc3VtZWRTZWdtZW50czpiZSxyZW1haW5pbmdTZWdtZW50czp4ZX09Tyx7c2VnbWVudEdyb3VwOlZlLHNsaWNlZFNlZ21lbnRzOlplfT1V'@;
put 'cmUoYSxiZSx4ZSxYKTtpZigwPT09WmUubGVuZ3RoJiZWZS5oYXNDaGlsZHJlbigpKXJldHVybiB0aGlzLnByb2Nlc3NDaGlsZHJlbihhZSxYLFZlKS5waXBlKEVlKGR0PT5udWxsPT09ZHQ/bnVsbDpbbmV3IEcyKHBlLGR0KV0pKTtpZigwPT09WC5sZW5ndGgmJjA9PT1aZS5sZW5ndGgpcmV0'@;
put 'dXJuIEdpKFtuZXcgRzIocGUsW10pXSk7Y29uc3QgbHQ9X2QoZik9PT1oO3JldHVybiB0aGlzLnByb2Nlc3NTZWdtZW50KGFlLFgsVmUsWmUsbHQ/ZGE6aCwhMCkucGlwZShFZShkdD0+W25ldyBHMihwZSxkdCldKSl9KSkpKX1nZXRDaGlsZENvbmZpZyhjLGEsZil7cmV0dXJuIGEuY2hpbGRy'@;
put 'ZW4/R2koe3JvdXRlczphLmNoaWxkcmVuLGluamVjdG9yOmN9KTphLmxvYWRDaGlsZHJlbj92b2lkIDAhPT1hLl9sb2FkZWRSb3V0ZXM/R2koe3JvdXRlczphLl9sb2FkZWRSb3V0ZXMsaW5qZWN0b3I6YS5fbG9hZGVkSW5qZWN0b3J9KTpmdW5jdGlvbiBld2UobCxjLGEsZil7Y29uc3QgZD1j'@;
put 'LmNhbkxvYWQ7cmV0dXJuIHZvaWQgMD09PWR8fDA9PT1kLmxlbmd0aD9HaSghMCk6R2koZC5tYXAobT0+e2NvbnN0IF89QXYobSxsKTtyZXR1cm4gcjQoZnVuY3Rpb24gQl9lKGwpe3JldHVybiBsJiZ4QyhsLmNhbkxvYWQpfShfKT9fLmNhbkxvYWQoYyxhKTpsLnJ1bkluQ29udGV4dCgoKT0+'@;
put 'XyhjLGEpKSl9KSkucGlwZShUdigpLEJyZSgpKX0oYyxhLGYpLnBpcGUoX3IoZD0+ZD90aGlzLmNvbmZpZ0xvYWRlci5sb2FkQ2hpbGRyZW4oYyxhKS5waXBlKHF1KGg9PnthLl9sb2FkZWRSb3V0ZXM9aC5yb3V0ZXMsYS5fbG9hZGVkSW5qZWN0b3I9aC5pbmplY3Rvcn0pKTpmdW5jdGlvbiBy'@;
put 'd2UobCl7cmV0dXJuIGRDKExyZSghMSwzKSl9KCkpKTpHaSh7cm91dGVzOltdLGluamVjdG9yOmN9KX19ZnVuY3Rpb24gbXdlKGwpe2NvbnN0IGM9bC52YWx1ZS5yb3V0ZUNvbmZpZztyZXR1cm4gYyYmIiI9PT1jLnBhdGh9ZnVuY3Rpb24gWnJlKGwpe2NvbnN0IGM9W10sYT1uZXcgU2V0O2Zv'@;
put 'cihjb25zdCBmIG9mIGwpe2lmKCFtd2UoZikpe2MucHVzaChmKTtjb250aW51ZX1jb25zdCBkPWMuZmluZChoPT5mLnZhbHVlLnJvdXRlQ29uZmlnPT09aC52YWx1ZS5yb3V0ZUNvbmZpZyk7dm9pZCAwIT09ZD8oZC5jaGlsZHJlbi5wdXNoKC4uLmYuY2hpbGRyZW4pLGEuYWRkKGQpKTpjLnB1'@;
put 'c2goZil9Zm9yKGNvbnN0IGYgb2YgYSl7Y29uc3QgZD1acmUoZi5jaGlsZHJlbik7Yy5wdXNoKG5ldyBHMihmLnZhbHVlLGQpKX1yZXR1cm4gYy5maWx0ZXIoZj0+IWEuaGFzKGYpKX1mdW5jdGlvbiBZcmUobCl7cmV0dXJuIGwuZGF0YXx8e319ZnVuY3Rpb24gV3JlKGwpe3JldHVybiBsLnJl'@;
put 'c29sdmV8fHt9fWZ1bmN0aW9uIHZ3ZShsLGMpe3JldHVybiBfcihhPT57Y29uc3R7dGFyZ2V0U25hcHNob3Q6ZixndWFyZHM6e2NhbkFjdGl2YXRlQ2hlY2tzOmR9fT1hO2lmKCFkLmxlbmd0aClyZXR1cm4gR2koYSk7bGV0IGg9MDtyZXR1cm4gbmwoZCkucGlwZShTdihtPT5mdW5jdGlvbiB5'@;
put 'd2UobCxjLGEsZil7Y29uc3QgZD1sLnJvdXRlQ29uZmlnLGg9bC5fcmVzb2x2ZTtyZXR1cm4gdm9pZCAwIT09ZD8udGl0bGUmJiFHcmUoZCkmJihoW3BDXT1kLnRpdGxlKSxmdW5jdGlvbiBid2UobCxjLGEsZil7Y29uc3QgZD1mdW5jdGlvbiBfd2UobCl7cmV0dXJuWy4uLk9iamVjdC5rZXlz'@;
put 'KGwpLC4uLk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMobCldfShsKTtpZigwPT09ZC5sZW5ndGgpcmV0dXJuIEdpKHt9KTtjb25zdCBoPXt9O3JldHVybiBubChkKS5waXBlKF9yKG09PmZ1bmN0aW9uIHd3ZShsLGMsYSxmKXtjb25zdCBkPU1DKGMpPz9mLGg9QXYobCxkKTtyZXR1cm4g'@;
put 'cjQoaC5yZXNvbHZlP2gucmVzb2x2ZShjLGEpOmQucnVuSW5Db250ZXh0KCgpPT5oKGMsYSkpKX0obFttXSxjLGEsZikucGlwZShuNCgpLHF1KF89PntoW21dPV99KSkpLFRqKDEpLGZ1bmN0aW9uIG9yZShsKXtyZXR1cm4gRWUoKCk9PmwpfShoKSxrZyhtPT5WcmUobSk/SG86ZEMobSkpKX0o'@;
put 'aCxsLGMsZikucGlwZShFZShtPT4obC5fcmVzb2x2ZWREYXRhPW0sbC5kYXRhPVRyZShsLGEpLnJlc29sdmUsZCYmR3JlKGQpJiYobC5kYXRhW3BDXT1kLnRpdGxlKSxudWxsKSkpfShtLnJvdXRlLGYsbCxjKSkscXUoKCk9PmgrKyksVGooMSksX3IobT0+aD09PWQubGVuZ3RoP0dpKGEpOkhv'@;
put 'KSl9KX1mdW5jdGlvbiBHcmUobCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBsLnRpdGxlfHxudWxsPT09bC50aXRsZX1mdW5jdGlvbiBXaihsKXtyZXR1cm4ga2woYz0+e2NvbnN0IGE9bChjKTtyZXR1cm4gYT9ubChhKS5waXBlKEVlKCgpPT5jKSk6R2koYyl9KX1jb25zdCBEdj1uZXcgTWko'@;
put 'IlJPVVRFUyIpO2xldCBHaj0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKCl7dGhpcy5jb21wb25lbnRMb2FkZXJzPW5ldyBXZWFrTWFwLHRoaXMuY2hpbGRyZW5Mb2FkZXJzPW5ldyBXZWFrTWFwLHRoaXMuY29tcGlsZXI9SGkoQ3RlKX1sb2FkQ29tcG9uZW50KGEpe2lmKHRoaXMuY29tcG9u'@;
put 'ZW50TG9hZGVycy5nZXQoYSkpcmV0dXJuIHRoaXMuY29tcG9uZW50TG9hZGVycy5nZXQoYSk7aWYoYS5fbG9hZGVkQ29tcG9uZW50KXJldHVybiBHaShhLl9sb2FkZWRDb21wb25lbnQpO3RoaXMub25Mb2FkU3RhcnRMaXN0ZW5lciYmdGhpcy5vbkxvYWRTdGFydExpc3RlbmVyKGEpO2NvbnN0'@;
put 'IGY9cjQoYS5sb2FkQ29tcG9uZW50KCkpLnBpcGUoRWUoJHJlKSxxdShoPT57dGhpcy5vbkxvYWRFbmRMaXN0ZW5lciYmdGhpcy5vbkxvYWRFbmRMaXN0ZW5lcihhKSxhLl9sb2FkZWRDb21wb25lbnQ9aH0pLGhDKCgpPT57dGhpcy5jb21wb25lbnRMb2FkZXJzLmRlbGV0ZShhKX0pKSxkPW5l'@;
put 'dyBycmUoZiwoKT0+bmV3IHdlKS5waXBlKEFqKCkpO3JldHVybiB0aGlzLmNvbXBvbmVudExvYWRlcnMuc2V0KGEsZCksZH1sb2FkQ2hpbGRyZW4oYSxmKXtpZih0aGlzLmNoaWxkcmVuTG9hZGVycy5nZXQoZikpcmV0dXJuIHRoaXMuY2hpbGRyZW5Mb2FkZXJzLmdldChmKTtpZihmLl9sb2Fk'@;
put 'ZWRSb3V0ZXMpcmV0dXJuIEdpKHtyb3V0ZXM6Zi5fbG9hZGVkUm91dGVzLGluamVjdG9yOmYuX2xvYWRlZEluamVjdG9yfSk7dGhpcy5vbkxvYWRTdGFydExpc3RlbmVyJiZ0aGlzLm9uTG9hZFN0YXJ0TGlzdGVuZXIoZik7Y29uc3QgaD10aGlzLmxvYWRNb2R1bGVGYWN0b3J5T3JSb3V0ZXMo'@;
put 'Zi5sb2FkQ2hpbGRyZW4pLnBpcGUoRWUoXz0+e3RoaXMub25Mb2FkRW5kTGlzdGVuZXImJnRoaXMub25Mb2FkRW5kTGlzdGVuZXIoZik7bGV0IE8sWDtyZXR1cm4gQXJyYXkuaXNBcnJheShfKT9YPV86KE89Xy5jcmVhdGUoYSkuaW5qZWN0b3IsWD1PLmdldChEdixbXSxhYS5TZWxmfGFhLk9w'@;
put 'dGlvbmFsKS5mbGF0KCkpLHtyb3V0ZXM6WC5tYXAoVWopLGluamVjdG9yOk99fSksaEMoKCk9Pnt0aGlzLmNoaWxkcmVuTG9hZGVycy5kZWxldGUoZil9KSksbT1uZXcgcnJlKGgsKCk9Pm5ldyB3ZSkucGlwZShBaigpKTtyZXR1cm4gdGhpcy5jaGlsZHJlbkxvYWRlcnMuc2V0KGYsbSksbX1s'@;
put 'b2FkTW9kdWxlRmFjdG9yeU9yUm91dGVzKGEpe3JldHVybiByNChhKCkpLnBpcGUoRWUoJHJlKSxfcihmPT5mIGluc3RhbmNlb2YgZ3V8fEFycmF5LmlzQXJyYXkoZik/R2koZik6bmwodGhpcy5jb21waWxlci5jb21waWxlTW9kdWxlQXN5bmMoZikpKSl9fXJldHVybiBsLlx1MDI3NWZhYz1m'@;
put 'dW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmwsZmFjdG9yeTpsLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGx9KSgpO2Z1bmN0aW9uICRyZShsKXtyZXR1cm4gZnVuY3Rpb24gQ3dlKGwpe3JldHVybiBsJiYib2JqZWN0Ij09dHlwZW9m'@;
put 'IGwmJiJkZWZhdWx0ImluIGx9KGwpP2wuZGVmYXVsdDpsfWxldCB1RD0oKCk9PntjbGFzcyBse2dldCBoYXNSZXF1ZXN0ZWROYXZpZ2F0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5hdmlnYXRpb25JZH1jb25zdHJ1Y3Rvcigpe3RoaXMuY3VycmVudE5hdmlnYXRpb249bnVsbCx0aGlzLmxhc3RT'@;
put 'dWNjZXNzZnVsTmF2aWdhdGlvbj1udWxsLHRoaXMuZXZlbnRzPW5ldyB3ZSx0aGlzLmNvbmZpZ0xvYWRlcj1IaShHaiksdGhpcy5lbnZpcm9ubWVudEluamVjdG9yPUhpKHUxKSx0aGlzLnVybFNlcmlhbGl6ZXI9SGkoZ0MpLHRoaXMucm9vdENvbnRleHRzPUhpKENDKSx0aGlzLmlucHV0Qmlu'@;
put 'ZGluZ0VuYWJsZWQ9bnVsbCE9PUhpKGlELHtvcHRpb25hbDohMH0pLHRoaXMubmF2aWdhdGlvbklkPTAsdGhpcy5hZnRlclByZWFjdGl2YXRpb249KCk9PkdpKHZvaWQgMCksdGhpcy5yb290Q29tcG9uZW50VHlwZT1udWxsLHRoaXMuY29uZmlnTG9hZGVyLm9uTG9hZEVuZExpc3RlbmVyPWQ9'@;
put 'PnRoaXMuZXZlbnRzLm5leHQobmV3IGdfZShkKSksdGhpcy5jb25maWdMb2FkZXIub25Mb2FkU3RhcnRMaXN0ZW5lcj1kPT50aGlzLmV2ZW50cy5uZXh0KG5ldyBtX2UoZCkpfWNvbXBsZXRlKCl7dGhpcy50cmFuc2l0aW9ucz8uY29tcGxldGUoKX1oYW5kbGVOYXZpZ2F0aW9uUmVxdWVzdChh'@;
put 'KXtjb25zdCBmPSsrdGhpcy5uYXZpZ2F0aW9uSWQ7dGhpcy50cmFuc2l0aW9ucz8ubmV4dCh7Li4udGhpcy50cmFuc2l0aW9ucy52YWx1ZSwuLi5hLGlkOmZ9KX1zZXR1cE5hdmlnYXRpb25zKGEpe3JldHVybiB0aGlzLnRyYW5zaXRpb25zPW5ldyBPZSh7aWQ6MCxjdXJyZW50VXJsVHJlZTph'@;
put 'LmN1cnJlbnRVcmxUcmVlLGN1cnJlbnRSYXdVcmw6YS5jdXJyZW50VXJsVHJlZSxleHRyYWN0ZWRVcmw6YS51cmxIYW5kbGluZ1N0cmF0ZWd5LmV4dHJhY3QoYS5jdXJyZW50VXJsVHJlZSksdXJsQWZ0ZXJSZWRpcmVjdHM6YS51cmxIYW5kbGluZ1N0cmF0ZWd5LmV4dHJhY3QoYS5jdXJyZW50'@;
put 'VXJsVHJlZSkscmF3VXJsOmEuY3VycmVudFVybFRyZWUsZXh0cmFzOnt9LHJlc29sdmU6bnVsbCxyZWplY3Q6bnVsbCxwcm9taXNlOlByb21pc2UucmVzb2x2ZSghMCksc291cmNlOl9DLHJlc3RvcmVkU3RhdGU6bnVsbCxjdXJyZW50U25hcHNob3Q6YS5yb3V0ZXJTdGF0ZS5zbmFwc2hvdCx0'@;
put 'YXJnZXRTbmFwc2hvdDpudWxsLGN1cnJlbnRSb3V0ZXJTdGF0ZTphLnJvdXRlclN0YXRlLHRhcmdldFJvdXRlclN0YXRlOm51bGwsZ3VhcmRzOntjYW5BY3RpdmF0ZUNoZWNrczpbXSxjYW5EZWFjdGl2YXRlQ2hlY2tzOltdfSxndWFyZHNSZXN1bHQ6bnVsbH0pLHRoaXMudHJhbnNpdGlvbnMu'@;
put 'cGlwZShJbChmPT4wIT09Zi5pZCksRWUoZj0+KHsuLi5mLGV4dHJhY3RlZFVybDphLnVybEhhbmRsaW5nU3RyYXRlZ3kuZXh0cmFjdChmLnJhd1VybCl9KSksa2woZj0+e2xldCBkPSExLGg9ITE7cmV0dXJuIEdpKGYpLnBpcGUocXUobT0+e3RoaXMuY3VycmVudE5hdmlnYXRpb249e2lkOm0u'@;
put 'aWQsaW5pdGlhbFVybDptLnJhd1VybCxleHRyYWN0ZWRVcmw6bS5leHRyYWN0ZWRVcmwsdHJpZ2dlcjptLnNvdXJjZSxleHRyYXM6bS5leHRyYXMscHJldmlvdXNOYXZpZ2F0aW9uOnRoaXMubGFzdFN1Y2Nlc3NmdWxOYXZpZ2F0aW9uP3suLi50aGlzLmxhc3RTdWNjZXNzZnVsTmF2aWdhdGlv'@;
put 'bixwcmV2aW91c05hdmlnYXRpb246bnVsbH06bnVsbH19KSxrbChtPT57Y29uc3QgXz1hLmJyb3dzZXJVcmxUcmVlLnRvU3RyaW5nKCksTz0hYS5uYXZpZ2F0ZWR8fG0uZXh0cmFjdGVkVXJsLnRvU3RyaW5nKCkhPT1ffHxfIT09YS5jdXJyZW50VXJsVHJlZS50b1N0cmluZygpO2lmKCFPJiYi'@;
put 'cmVsb2FkIiE9PShtLmV4dHJhcy5vblNhbWVVcmxOYXZpZ2F0aW9uPz9hLm9uU2FtZVVybE5hdmlnYXRpb24pKXtjb25zdCBhZT0iIjtyZXR1cm4gdGhpcy5ldmVudHMubmV4dChuZXcgd0MobS5pZCxhLnNlcmlhbGl6ZVVybChmLnJhd1VybCksYWUsMCkpLGEucmF3VXJsVHJlZT1tLnJhd1Vy'@;
put 'bCxtLnJlc29sdmUobnVsbCksSG99aWYoYS51cmxIYW5kbGluZ1N0cmF0ZWd5LnNob3VsZFByb2Nlc3NVcmwobS5yYXdVcmwpKXJldHVybiBLcmUobS5zb3VyY2UpJiYoYS5icm93c2VyVXJsVHJlZT1tLmV4dHJhY3RlZFVybCksR2kobSkucGlwZShrbChhZT0+e2NvbnN0IHBlPXRoaXMudHJh'@;
put 'bnNpdGlvbnM/LmdldFZhbHVlKCk7cmV0dXJuIHRoaXMuZXZlbnRzLm5leHQobmV3IFBqKGFlLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoYWUuZXh0cmFjdGVkVXJsKSxhZS5zb3VyY2UsYWUucmVzdG9yZWRTdGF0ZSkpLHBlIT09dGhpcy50cmFuc2l0aW9ucz8uZ2V0VmFsdWUo'@;
put 'KT9IbzpQcm9taXNlLnJlc29sdmUoYWUpfSksZnVuY3Rpb24gZ3dlKGwsYyxhLGYsZCxoKXtyZXR1cm4gX3IobT0+ZnVuY3Rpb24gZHdlKGwsYyxhLGYsZCxoLG09ImVtcHR5T25seSIpe3JldHVybiBuZXcgaHdlKGwsYyxhLGYsZCxtLGgpLnJlY29nbml6ZSgpfShsLGMsYSxmLG0uZXh0cmFj'@;
put 'dGVkVXJsLGQsaCkucGlwZShFZSgoe3N0YXRlOl8sdHJlZTpPfSk9Pih7Li4ubSx0YXJnZXRTbmFwc2hvdDpfLHVybEFmdGVyUmVkaXJlY3RzOk99KSkpKX0odGhpcy5lbnZpcm9ubWVudEluamVjdG9yLHRoaXMuY29uZmlnTG9hZGVyLHRoaXMucm9vdENvbXBvbmVudFR5cGUsYS5jb25maWcs'@;
put 'dGhpcy51cmxTZXJpYWxpemVyLGEucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneSkscXUoYWU9PntpZihmLnRhcmdldFNuYXBzaG90PWFlLnRhcmdldFNuYXBzaG90LGYudXJsQWZ0ZXJSZWRpcmVjdHM9YWUudXJsQWZ0ZXJSZWRpcmVjdHMsdGhpcy5jdXJyZW50TmF2aWdhdGlvbj17Li4udGhp'@;
put 'cy5jdXJyZW50TmF2aWdhdGlvbixmaW5hbFVybDphZS51cmxBZnRlclJlZGlyZWN0c30sImVhZ2VyIj09PWEudXJsVXBkYXRlU3RyYXRlZ3kpe2lmKCFhZS5leHRyYXMuc2tpcExvY2F0aW9uQ2hhbmdlKXtjb25zdCBiZT1hLnVybEhhbmRsaW5nU3RyYXRlZ3kubWVyZ2UoYWUudXJsQWZ0ZXJS'@;
put 'ZWRpcmVjdHMsYWUucmF3VXJsKTthLnNldEJyb3dzZXJVcmwoYmUsYWUpfWEuYnJvd3NlclVybFRyZWU9YWUudXJsQWZ0ZXJSZWRpcmVjdHN9Y29uc3QgcGU9bmV3IGNfZShhZS5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKGFlLmV4dHJhY3RlZFVybCksdGhpcy51cmxTZXJpYWxp'@;
put 'emVyLnNlcmlhbGl6ZShhZS51cmxBZnRlclJlZGlyZWN0cyksYWUudGFyZ2V0U25hcHNob3QpO3RoaXMuZXZlbnRzLm5leHQocGUpfSkpO2lmKE8mJmEudXJsSGFuZGxpbmdTdHJhdGVneS5zaG91bGRQcm9jZXNzVXJsKGEucmF3VXJsVHJlZSkpe2NvbnN0e2lkOmFlLGV4dHJhY3RlZFVybDpw'@;
put 'ZSxzb3VyY2U6YmUscmVzdG9yZWRTdGF0ZTp4ZSxleHRyYXM6VmV9PW0sWmU9bmV3IFBqKGFlLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUocGUpLGJlLHhlKTt0aGlzLmV2ZW50cy5uZXh0KFplKTtjb25zdCBsdD1BcmUoMCx0aGlzLnJvb3RDb21wb25lbnRUeXBlKS5zbmFwc2hvdDty'@;
put 'ZXR1cm4gR2koZj17Li4ubSx0YXJnZXRTbmFwc2hvdDpsdCx1cmxBZnRlclJlZGlyZWN0czpwZSxleHRyYXM6ey4uLlZlLHNraXBMb2NhdGlvbkNoYW5nZTohMSxyZXBsYWNlVXJsOiExfX0pfXtjb25zdCBhZT0iIjtyZXR1cm4gdGhpcy5ldmVudHMubmV4dChuZXcgd0MobS5pZCxhLnNlcmlh'@;
put 'bGl6ZVVybChmLmV4dHJhY3RlZFVybCksYWUsMSkpLGEucmF3VXJsVHJlZT1tLnJhd1VybCxtLnJlc29sdmUobnVsbCksSG99fSkscXUobT0+e2NvbnN0IF89bmV3IGZfZShtLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUobS5leHRyYWN0ZWRVcmwpLHRoaXMudXJsU2VyaWFsaXpl'@;
put 'ci5zZXJpYWxpemUobS51cmxBZnRlclJlZGlyZWN0cyksbS50YXJnZXRTbmFwc2hvdCk7dGhpcy5ldmVudHMubmV4dChfKX0pLEVlKG09PmY9ey4uLm0sZ3VhcmRzOlBfZShtLnRhcmdldFNuYXBzaG90LG0uY3VycmVudFNuYXBzaG90LHRoaXMucm9vdENvbnRleHRzKX0pLGZ1bmN0aW9uIFdf'@;
put 'ZShsLGMpe3JldHVybiBfcihhPT57Y29uc3R7dGFyZ2V0U25hcHNob3Q6ZixjdXJyZW50U25hcHNob3Q6ZCxndWFyZHM6e2NhbkFjdGl2YXRlQ2hlY2tzOmgsY2FuRGVhY3RpdmF0ZUNoZWNrczptfX09YTtyZXR1cm4gMD09PW0ubGVuZ3RoJiYwPT09aC5sZW5ndGg/R2koey4uLmEsZ3VhcmRz'@;
put 'UmVzdWx0OiEwfSk6ZnVuY3Rpb24gR19lKGwsYyxhLGYpe3JldHVybiBubChsKS5waXBlKF9yKGQ9PmZ1bmN0aW9uIFFfZShsLGMsYSxmLGQpe2NvbnN0IGg9YyYmYy5yb3V0ZUNvbmZpZz9jLnJvdXRlQ29uZmlnLmNhbkRlYWN0aXZhdGU6bnVsbDtyZXR1cm4gaCYmMCE9PWgubGVuZ3RoP0dp'@;
put 'KGgubWFwKF89Pntjb25zdCBPPU1DKGMpPz9kLFg9QXYoXyxPKTtyZXR1cm4gcjQoZnVuY3Rpb24gVV9lKGwpe3JldHVybiBsJiZ4QyhsLmNhbkRlYWN0aXZhdGUpfShYKT9YLmNhbkRlYWN0aXZhdGUobCxjLGEsZik6Ty5ydW5JbkNvbnRleHQoKCk9PlgobCxjLGEsZikpKS5waXBlKG40KCkp'@;
put 'fSkpLnBpcGUoVHYoKSk6R2koITApfShkLmNvbXBvbmVudCxkLnJvdXRlLGEsYyxmKSksbjQoZD0+ITAhPT1kLCEwKSl9KG0sZixkLGwpLnBpcGUoX3IoXz0+XyYmZnVuY3Rpb24gVl9lKGwpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGx9KF8pP2Z1bmN0aW9uICRfZShsLGMsYSxmKXtyZXR1'@;
put 'cm4gbmwoYykucGlwZShTdihkPT4kTyhmdW5jdGlvbiBxX2UobCxjKXtyZXR1cm4gbnVsbCE9PWwmJmMmJmMobmV3IHZfZShsKSksR2koITApfShkLnJvdXRlLnBhcmVudCxmKSxmdW5jdGlvbiBLX2UobCxjKXtyZXR1cm4gbnVsbCE9PWwmJmMmJmMobmV3IGJfZShsKSksR2koITApfShkLnJv'@;
put 'dXRlLGYpLGZ1bmN0aW9uIEpfZShsLGMsYSl7Y29uc3QgZj1jW2MubGVuZ3RoLTFdLGg9Yy5zbGljZSgwLGMubGVuZ3RoLTEpLnJldmVyc2UoKS5tYXAobT0+ZnVuY3Rpb24gRl9lKGwpe2NvbnN0IGM9bC5yb3V0ZUNvbmZpZz9sLnJvdXRlQ29uZmlnLmNhbkFjdGl2YXRlQ2hpbGQ6bnVsbDty'@;
put 'ZXR1cm4gYyYmMCE9PWMubGVuZ3RoP3tub2RlOmwsZ3VhcmRzOmN9Om51bGx9KG0pKS5maWx0ZXIobT0+bnVsbCE9PW0pLm1hcChtPT5ucmUoKCk9PkdpKG0uZ3VhcmRzLm1hcChPPT57Y29uc3QgWD1NQyhtLm5vZGUpPz9hLGFlPUF2KE8sWCk7cmV0dXJuIHI0KGZ1bmN0aW9uIHpfZShsKXty'@;
put 'ZXR1cm4gbCYmeEMobC5jYW5BY3RpdmF0ZUNoaWxkKX0oYWUpP2FlLmNhbkFjdGl2YXRlQ2hpbGQoZixsKTpYLnJ1bkluQ29udGV4dCgoKT0+YWUoZixsKSkpLnBpcGUobjQoKSl9KSkucGlwZShUdigpKSkpO3JldHVybiBHaShoKS5waXBlKFR2KCkpfShsLGQucGF0aCxhKSxmdW5jdGlvbiBY'@;
put 'X2UobCxjLGEpe2NvbnN0IGY9Yy5yb3V0ZUNvbmZpZz9jLnJvdXRlQ29uZmlnLmNhbkFjdGl2YXRlOm51bGw7aWYoIWZ8fDA9PT1mLmxlbmd0aClyZXR1cm4gR2koITApO2NvbnN0IGQ9Zi5tYXAoaD0+bnJlKCgpPT57Y29uc3QgbT1NQyhjKT8/YSxfPUF2KGgsbSk7cmV0dXJuIHI0KGZ1bmN0'@;
put 'aW9uIGpfZShsKXtyZXR1cm4gbCYmeEMobC5jYW5BY3RpdmF0ZSl9KF8pP18uY2FuQWN0aXZhdGUoYyxsKTptLnJ1bkluQ29udGV4dCgoKT0+XyhjLGwpKSkucGlwZShuNCgpKX0pKTtyZXR1cm4gR2koZCkucGlwZShUdigpKX0obCxkLnJvdXRlLGEpKSksbjQoZD0+ITAhPT1kLCEwKSl9KGYs'@;
put 'aCxsLGMpOkdpKF8pKSxFZShfPT4oey4uLmEsZ3VhcmRzUmVzdWx0Ol99KSkpfSl9KHRoaXMuZW52aXJvbm1lbnRJbmplY3RvcixtPT50aGlzLmV2ZW50cy5uZXh0KG0pKSxxdShtPT57aWYoZi5ndWFyZHNSZXN1bHQ9bS5ndWFyZHNSZXN1bHQseGcobS5ndWFyZHNSZXN1bHQpKXRocm93IFJy'@;
put 'ZSgwLG0uZ3VhcmRzUmVzdWx0KTtjb25zdCBfPW5ldyBkX2UobS5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKG0uZXh0cmFjdGVkVXJsKSx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKG0udXJsQWZ0ZXJSZWRpcmVjdHMpLG0udGFyZ2V0U25hcHNob3QsISFtLmd1YXJkc1Jl'@;
put 'c3VsdCk7dGhpcy5ldmVudHMubmV4dChfKX0pLElsKG09PiEhbS5ndWFyZHNSZXN1bHR8fChhLnJlc3RvcmVIaXN0b3J5KG0pLHRoaXMuY2FuY2VsTmF2aWdhdGlvblRyYW5zaXRpb24obSwiIiwzKSwhMSkpLFdqKG09PntpZihtLmd1YXJkcy5jYW5BY3RpdmF0ZUNoZWNrcy5sZW5ndGgpcmV0'@;
put 'dXJuIEdpKG0pLnBpcGUocXUoXz0+e2NvbnN0IE89bmV3IGhfZShfLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoXy5leHRyYWN0ZWRVcmwpLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoXy51cmxBZnRlclJlZGlyZWN0cyksXy50YXJnZXRTbmFwc2hvdCk7dGhpcy5ldmVu'@;
put 'dHMubmV4dChPKX0pLGtsKF89PntsZXQgTz0hMTtyZXR1cm4gR2koXykucGlwZSh2d2UoYS5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5LHRoaXMuZW52aXJvbm1lbnRJbmplY3RvcikscXUoe25leHQ6KCk9Pk89ITAsY29tcGxldGU6KCk9PntPfHwoYS5yZXN0b3JlSGlzdG9yeShfKSx0aGlz'@;
put 'LmNhbmNlbE5hdmlnYXRpb25UcmFuc2l0aW9uKF8sIiIsMikpfX0pKX0pLHF1KF89Pntjb25zdCBPPW5ldyBwX2UoXy5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKF8uZXh0cmFjdGVkVXJsKSx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKF8udXJsQWZ0ZXJSZWRpcmVjdHMp'@;
put 'LF8udGFyZ2V0U25hcHNob3QpO3RoaXMuZXZlbnRzLm5leHQoTyl9KSl9KSxXaihtPT57Y29uc3QgXz1PPT57Y29uc3QgWD1bXTtPLnJvdXRlQ29uZmlnPy5sb2FkQ29tcG9uZW50JiYhTy5yb3V0ZUNvbmZpZy5fbG9hZGVkQ29tcG9uZW50JiZYLnB1c2godGhpcy5jb25maWdMb2FkZXIubG9h'@;
put 'ZENvbXBvbmVudChPLnJvdXRlQ29uZmlnKS5waXBlKHF1KGFlPT57Ty5jb21wb25lbnQ9YWV9KSxFZSgoKT0+e30pKSk7Zm9yKGNvbnN0IGFlIG9mIE8uY2hpbGRyZW4pWC5wdXNoKC4uLl8oYWUpKTtyZXR1cm4gWH07cmV0dXJuIEN2KF8obS50YXJnZXRTbmFwc2hvdC5yb290KSkucGlwZShL'@;
put 'TygpLEVmKDEpKX0pLFdqKCgpPT50aGlzLmFmdGVyUHJlYWN0aXZhdGlvbigpKSxFZShtPT57Y29uc3QgXz1mdW5jdGlvbiBrX2UobCxjLGEpe2NvbnN0IGY9U0MobCxjLl9yb290LGE/YS5fcm9vdDp2b2lkIDApO3JldHVybiBuZXcgeHJlKGYsYyl9KGEucm91dGVSZXVzZVN0cmF0ZWd5LG0u'@;
put 'dGFyZ2V0U25hcHNob3QsbS5jdXJyZW50Um91dGVyU3RhdGUpO3JldHVybiBmPXsuLi5tLHRhcmdldFJvdXRlclN0YXRlOl99fSkscXUobT0+e2EuY3VycmVudFVybFRyZWU9bS51cmxBZnRlclJlZGlyZWN0cyxhLnJhd1VybFRyZWU9YS51cmxIYW5kbGluZ1N0cmF0ZWd5Lm1lcmdlKG0udXJs'@;
put 'QWZ0ZXJSZWRpcmVjdHMsbS5yYXdVcmwpLGEucm91dGVyU3RhdGU9bS50YXJnZXRSb3V0ZXJTdGF0ZSwiZGVmZXJyZWQiPT09YS51cmxVcGRhdGVTdHJhdGVneSYmKG0uZXh0cmFzLnNraXBMb2NhdGlvbkNoYW5nZXx8YS5zZXRCcm93c2VyVXJsKGEucmF3VXJsVHJlZSxtKSxhLmJyb3dzZXJV'@;
put 'cmxUcmVlPW0udXJsQWZ0ZXJSZWRpcmVjdHMpfSksKChsLGMsYSxmKT0+RWUoZD0+KG5ldyBMX2UoYyxkLnRhcmdldFJvdXRlclN0YXRlLGQuY3VycmVudFJvdXRlclN0YXRlLGEsZikuYWN0aXZhdGUobCksZCkpKSh0aGlzLnJvb3RDb250ZXh0cyxhLnJvdXRlUmV1c2VTdHJhdGVneSxtPT50'@;
put 'aGlzLmV2ZW50cy5uZXh0KG0pLHRoaXMuaW5wdXRCaW5kaW5nRW5hYmxlZCksRWYoMSkscXUoe25leHQ6bT0+e2Q9ITAsdGhpcy5sYXN0U3VjY2Vzc2Z1bE5hdmlnYXRpb249dGhpcy5jdXJyZW50TmF2aWdhdGlvbixhLm5hdmlnYXRlZD0hMCx0aGlzLmV2ZW50cy5uZXh0KG5ldyBpNChtLmlk'@;
put 'LHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUobS5leHRyYWN0ZWRVcmwpLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoYS5jdXJyZW50VXJsVHJlZSkpKSxhLnRpdGxlU3RyYXRlZ3k/LnVwZGF0ZVRpdGxlKG0udGFyZ2V0Um91dGVyU3RhdGUuc25hcHNob3QpLG0ucmVzb2x2ZSgh'@;
put 'MCl9LGNvbXBsZXRlOigpPT57ZD0hMH19KSxoQygoKT0+e2R8fGh8fHRoaXMuY2FuY2VsTmF2aWdhdGlvblRyYW5zaXRpb24oZiwiIiwxKSx0aGlzLmN1cnJlbnROYXZpZ2F0aW9uPy5pZD09PWYuaWQmJih0aGlzLmN1cnJlbnROYXZpZ2F0aW9uPW51bGwpfSksa2cobT0+e2lmKGg9ITAsRnJl'@;
put 'KG0pKXtQcmUobSl8fChhLm5hdmlnYXRlZD0hMCxhLnJlc3RvcmVIaXN0b3J5KGYsITApKTtjb25zdCBfPW5ldyBuRChmLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoZi5leHRyYWN0ZWRVcmwpLG0ubWVzc2FnZSxtLmNhbmNlbGxhdGlvbkNvZGUpO2lmKHRoaXMuZXZlbnRzLm5l'@;
put 'eHQoXyksUHJlKG0pKXtjb25zdCBPPWEudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZShtLnVybCxhLnJhd1VybFRyZWUpLFg9e3NraXBMb2NhdGlvbkNoYW5nZTpmLmV4dHJhcy5za2lwTG9jYXRpb25DaGFuZ2UscmVwbGFjZVVybDoiZWFnZXIiPT09YS51cmxVcGRhdGVTdHJhdGVneXx8S3Jl'@;
put 'KGYuc291cmNlKX07YS5zY2hlZHVsZU5hdmlnYXRpb24oTyxfQyxudWxsLFgse3Jlc29sdmU6Zi5yZXNvbHZlLHJlamVjdDpmLnJlamVjdCxwcm9taXNlOmYucHJvbWlzZX0pfWVsc2UgZi5yZXNvbHZlKCExKX1lbHNle2EucmVzdG9yZUhpc3RvcnkoZiwhMCk7Y29uc3QgXz1uZXcgRmooZi5p'@;
put 'ZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKGYuZXh0cmFjdGVkVXJsKSxtLGYudGFyZ2V0U25hcHNob3Q/P3ZvaWQgMCk7dGhpcy5ldmVudHMubmV4dChfKTt0cnl7Zi5yZXNvbHZlKGEuZXJyb3JIYW5kbGVyKG0pKX1jYXRjaChPKXtmLnJlamVjdChPKX19cmV0dXJuIEhvfSkpfSkp'@;
put 'fWNhbmNlbE5hdmlnYXRpb25UcmFuc2l0aW9uKGEsZixkKXtjb25zdCBoPW5ldyBuRChhLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoYS5leHRyYWN0ZWRVcmwpLGYsZCk7dGhpcy5ldmVudHMubmV4dChoKSxhLnJlc29sdmUoITEpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rp'@;
put 'b24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVwcm92PWhyKHt0b2tlbjpsLGZhY3Rvcnk6bC5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxsfSkoKTtmdW5jdGlvbiBLcmUobCl7cmV0dXJuIGwhPT1fQ31sZXQgcXJlPSgoKT0+e2NsYXNzIGx7YnVpbGRUaXRsZShhKXtsZXQg'@;
put 'ZixkPWEucm9vdDtmb3IoO3ZvaWQgMCE9PWQ7KWY9dGhpcy5nZXRSZXNvbHZlZFRpdGxlRm9yUm91dGUoZCk/P2YsZD1kLmNoaWxkcmVuLmZpbmQoaD0+aC5vdXRsZXQ9PT1kYSk7cmV0dXJuIGZ9Z2V0UmVzb2x2ZWRUaXRsZUZvclJvdXRlKGEpe3JldHVybiBhLmRhdGFbcENdfX1yZXR1cm4g'@;
put 'bC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVwcm92PWhyKHt0b2tlbjpsLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gSGkoU3dlKX0scHJvdmlkZWRJbjoicm9vdCJ9KSxsfSkoKSxTd2U9KCgpPT57Y2xhc3MgbCBleHRlbmRzIHFyZXtjb25zdHJ1'@;
put 'Y3RvcihhKXtzdXBlcigpLHRoaXMudGl0bGU9YX11cGRhdGVUaXRsZShhKXtjb25zdCBmPXRoaXMuYnVpbGRUaXRsZShhKTt2b2lkIDAhPT1mJiZ0aGlzLnRpdGxlLnNldFRpdGxlKGYpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShzcihHbmUpKX0s'@;
put 'bC5cdTAyNzVwcm92PWhyKHt0b2tlbjpsLGZhY3Rvcnk6bC5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxsfSkoKSxNd2U9KCgpPT57Y2xhc3MgbHt9cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1cHJvdj1ocih7dG9rZW46bCxm'@;
put 'YWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIEhpKEV3ZSl9LHByb3ZpZGVkSW46InJvb3QifSksbH0pKCk7Y2xhc3Mga3dle3Nob3VsZERldGFjaChjKXtyZXR1cm4hMX1zdG9yZShjLGEpe31zaG91bGRBdHRhY2goYyl7cmV0dXJuITF9cmV0cmlldmUoYyl7cmV0dXJuIG51bGx9c2hvdWxkUmV1'@;
put 'c2VSb3V0ZShjLGEpe3JldHVybiBjLnJvdXRlQ29uZmlnPT09YS5yb3V0ZUNvbmZpZ319bGV0IEV3ZT0oKCk9PntjbGFzcyBsIGV4dGVuZHMga3dle31yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgYztyZXR1cm4gZnVuY3Rpb24oZil7cmV0dXJuKGN8fChjPXhsKGwpKSkoZnx8'@;
put 'bCl9fSgpLGwuXHUwMjc1cHJvdj1ocih7dG9rZW46bCxmYWN0b3J5OmwuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbH0pKCk7Y29uc3QgY0Q9bmV3IE1pKCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT4oe30pfSk7bGV0IHh3ZT0oKCk9PntjbGFzcyBse31yZXR1cm4g'@;
put 'bC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVwcm92PWhyKHt0b2tlbjpsLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gSGkoQXdlKX0scHJvdmlkZWRJbjoicm9vdCJ9KSxsfSkoKSxBd2U9KCgpPT57Y2xhc3MgbHtzaG91bGRQcm9jZXNzVXJsKGEp'@;
put 'e3JldHVybiEwfWV4dHJhY3QoYSl7cmV0dXJuIGF9bWVyZ2UoYSxmKXtyZXR1cm4gYX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1cHJvdj1ocih7dG9rZW46bCxmYWN0b3J5OmwuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSks'@;
put 'bH0pKCk7dmFyIEFDPWZ1bmN0aW9uKGwpe3JldHVybiBsW2wuQ09NUExFVEU9MF09IkNPTVBMRVRFIixsW2wuRkFJTEVEPTFdPSJGQUlMRUQiLGxbbC5SRURJUkVDVElORz0yXT0iUkVESVJFQ1RJTkciLGx9KEFDfHx7fSk7ZnVuY3Rpb24gWHJlKGwsYyl7bC5ldmVudHMucGlwZShJbChhPT5h'@;
put 'IGluc3RhbmNlb2YgaTR8fGEgaW5zdGFuY2VvZiBuRHx8YSBpbnN0YW5jZW9mIEZqfHxhIGluc3RhbmNlb2Ygd0MpLEVlKGE9PmEgaW5zdGFuY2VvZiBpNHx8YSBpbnN0YW5jZW9mIHdDP0FDLkNPTVBMRVRFOmEgaW5zdGFuY2VvZiBuRCYmKDA9PT1hLmNvZGV8fDE9PT1hLmNvZGUpP0FDLlJF'@;
put 'RElSRUNUSU5HOkFDLkZBSUxFRCksSWwoYT0+YSE9PUFDLlJFRElSRUNUSU5HKSxFZigxKSkuc3Vic2NyaWJlKCgpPT57YygpfSl9ZnVuY3Rpb24gVHdlKGwpe3Rocm93IGx9ZnVuY3Rpb24gT3dlKGwsYyxhKXtyZXR1cm4gYy5wYXJzZSgiLyIpfWNvbnN0IER3ZT17cGF0aHM6ImV4YWN0Iixm'@;
put 'cmFnbWVudDoiaWdub3JlZCIsbWF0cml4UGFyYW1zOiJpZ25vcmVkIixxdWVyeVBhcmFtczoiZXhhY3QifSxJd2U9e3BhdGhzOiJzdWJzZXQiLGZyYWdtZW50OiJpZ25vcmVkIixtYXRyaXhQYXJhbXM6Imlnbm9yZWQiLHF1ZXJ5UGFyYW1zOiJzdWJzZXQifTtsZXQgTGE9KCgpPT57Y2xhc3Mg'@;
put 'bHtnZXQgbmF2aWdhdGlvbklkKCl7cmV0dXJuIHRoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLm5hdmlnYXRpb25JZH1nZXQgYnJvd3NlclBhZ2VJZCgpe2lmKCJjb21wdXRlZCI9PT10aGlzLmNhbmNlbGVkTmF2aWdhdGlvblJlc29sdXRpb24pcmV0dXJuIHRoaXMubG9jYXRpb24uZ2V0U3Rh'@;
put 'dGUoKT8uXHUwMjc1cm91dGVyUGFnZUlkfWdldCBldmVudHMoKXtyZXR1cm4gdGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMuZXZlbnRzfWNvbnN0cnVjdG9yKCl7dGhpcy5kaXNwb3NlZD0hMSx0aGlzLmN1cnJlbnRQYWdlSWQ9MCx0aGlzLmNvbnNvbGU9SGkod3RlKSx0aGlzLmlzTmdab25l'@;
put 'RW5hYmxlZD0hMSx0aGlzLm9wdGlvbnM9SGkoY0Qse29wdGlvbmFsOiEwfSl8fHt9LHRoaXMucGVuZGluZ1Rhc2tzPUhpKHhPKSx0aGlzLmVycm9ySGFuZGxlcj10aGlzLm9wdGlvbnMuZXJyb3JIYW5kbGVyfHxUd2UsdGhpcy5tYWxmb3JtZWRVcmlFcnJvckhhbmRsZXI9dGhpcy5vcHRpb25z'@;
put 'Lm1hbGZvcm1lZFVyaUVycm9ySGFuZGxlcnx8T3dlLHRoaXMubmF2aWdhdGVkPSExLHRoaXMubGFzdFN1Y2Nlc3NmdWxJZD0tMSx0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3k9SGkoeHdlKSx0aGlzLnJvdXRlUmV1c2VTdHJhdGVneT1IaShNd2UpLHRoaXMudGl0bGVTdHJhdGVneT1IaShxcmUp'@;
put 'LHRoaXMub25TYW1lVXJsTmF2aWdhdGlvbj10aGlzLm9wdGlvbnMub25TYW1lVXJsTmF2aWdhdGlvbnx8Imlnbm9yZSIsdGhpcy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5PXRoaXMub3B0aW9ucy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5fHwiZW1wdHlPbmx5Iix0aGlzLnVybFVwZGF0'@;
put 'ZVN0cmF0ZWd5PXRoaXMub3B0aW9ucy51cmxVcGRhdGVTdHJhdGVneXx8ImRlZmVycmVkIix0aGlzLmNhbmNlbGVkTmF2aWdhdGlvblJlc29sdXRpb249dGhpcy5vcHRpb25zLmNhbmNlbGVkTmF2aWdhdGlvblJlc29sdXRpb258fCJyZXBsYWNlIix0aGlzLmNvbmZpZz1IaShEdix7b3B0aW9u'@;
put 'YWw6ITB9KT8uZmxhdCgpPz9bXSx0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucz1IaSh1RCksdGhpcy51cmxTZXJpYWxpemVyPUhpKGdDKSx0aGlzLmxvY2F0aW9uPUhpKGdkKSx0aGlzLmNvbXBvbmVudElucHV0QmluZGluZ0VuYWJsZWQ9ISFIaShpRCx7b3B0aW9uYWw6ITB9KSx0aGlzLmlz'@;
put 'Tmdab25lRW5hYmxlZD1IaShVbylpbnN0YW5jZW9mIFVvJiZVby5pc0luQW5ndWxhclpvbmUoKSx0aGlzLnJlc2V0Q29uZmlnKHRoaXMuY29uZmlnKSx0aGlzLmN1cnJlbnRVcmxUcmVlPW5ldyBrdix0aGlzLnJhd1VybFRyZWU9dGhpcy5jdXJyZW50VXJsVHJlZSx0aGlzLmJyb3dzZXJVcmxU'@;
put 'cmVlPXRoaXMuY3VycmVudFVybFRyZWUsdGhpcy5yb3V0ZXJTdGF0ZT1BcmUoMCxudWxsKSx0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5zZXR1cE5hdmlnYXRpb25zKHRoaXMpLnN1YnNjcmliZShhPT57dGhpcy5sYXN0U3VjY2Vzc2Z1bElkPWEuaWQsdGhpcy5jdXJyZW50UGFnZUlkPXRo'@;
put 'aXMuYnJvd3NlclBhZ2VJZD8/MH0sYT0+e3RoaXMuY29uc29sZS53YXJuKGBVbmhhbmRsZWQgTmF2aWdhdGlvbiBFcnJvcjogJHthfWApfSl9cmVzZXRSb290Q29tcG9uZW50VHlwZShhKXt0aGlzLnJvdXRlclN0YXRlLnJvb3QuY29tcG9uZW50PWEsdGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlv'@;
put 'bnMucm9vdENvbXBvbmVudFR5cGU9YX1pbml0aWFsTmF2aWdhdGlvbigpe2lmKHRoaXMuc2V0VXBMb2NhdGlvbkNoYW5nZUxpc3RlbmVyKCksIXRoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLmhhc1JlcXVlc3RlZE5hdmlnYXRpb24pe2NvbnN0IGE9dGhpcy5sb2NhdGlvbi5nZXRTdGF0ZSgp'@;
put 'O3RoaXMubmF2aWdhdGVUb1N5bmNXaXRoQnJvd3Nlcih0aGlzLmxvY2F0aW9uLnBhdGgoITApLF9DLGEpfX1zZXRVcExvY2F0aW9uQ2hhbmdlTGlzdGVuZXIoKXt0aGlzLmxvY2F0aW9uU3Vic2NyaXB0aW9ufHwodGhpcy5sb2NhdGlvblN1YnNjcmlwdGlvbj10aGlzLmxvY2F0aW9uLnN1YnNj'@;
put 'cmliZShhPT57Y29uc3QgZj0icG9wc3RhdGUiPT09YS50eXBlPyJwb3BzdGF0ZSI6Imhhc2hjaGFuZ2UiOyJwb3BzdGF0ZSI9PT1mJiZzZXRUaW1lb3V0KCgpPT57dGhpcy5uYXZpZ2F0ZVRvU3luY1dpdGhCcm93c2VyKGEudXJsLGYsYS5zdGF0ZSl9LDApfSkpfW5hdmlnYXRlVG9TeW5jV2l0'@;
put 'aEJyb3dzZXIoYSxmLGQpe2NvbnN0IGg9e3JlcGxhY2VVcmw6ITB9LG09ZD8ubmF2aWdhdGlvbklkP2Q6bnVsbDtpZihkKXtjb25zdCBPPXsuLi5kfTtkZWxldGUgTy5uYXZpZ2F0aW9uSWQsZGVsZXRlIE8uXHUwMjc1cm91dGVyUGFnZUlkLDAhPT1PYmplY3Qua2V5cyhPKS5sZW5ndGgmJiho'@;
put 'LnN0YXRlPU8pfWNvbnN0IF89dGhpcy5wYXJzZVVybChhKTt0aGlzLnNjaGVkdWxlTmF2aWdhdGlvbihfLGYsbSxoKX1nZXQgdXJsKCl7cmV0dXJuIHRoaXMuc2VyaWFsaXplVXJsKHRoaXMuY3VycmVudFVybFRyZWUpfWdldEN1cnJlbnROYXZpZ2F0aW9uKCl7cmV0dXJuIHRoaXMubmF2aWdh'@;
put 'dGlvblRyYW5zaXRpb25zLmN1cnJlbnROYXZpZ2F0aW9ufWdldCBsYXN0U3VjY2Vzc2Z1bE5hdmlnYXRpb24oKXtyZXR1cm4gdGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMubGFzdFN1Y2Nlc3NmdWxOYXZpZ2F0aW9ufXJlc2V0Q29uZmlnKGEpe3RoaXMuY29uZmlnPWEubWFwKFVqKSx0aGlz'@;
put 'Lm5hdmlnYXRlZD0hMSx0aGlzLmxhc3RTdWNjZXNzZnVsSWQ9LTF9bmdPbkRlc3Ryb3koKXt0aGlzLmRpc3Bvc2UoKX1kaXNwb3NlKCl7dGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMuY29tcGxldGUoKSx0aGlzLmxvY2F0aW9uU3Vic2NyaXB0aW9uJiYodGhpcy5sb2NhdGlvblN1YnNjcmlw'@;
put 'dGlvbi51bnN1YnNjcmliZSgpLHRoaXMubG9jYXRpb25TdWJzY3JpcHRpb249dm9pZCAwKSx0aGlzLmRpc3Bvc2VkPSEwfWNyZWF0ZVVybFRyZWUoYSxmPXt9KXtjb25zdHtyZWxhdGl2ZVRvOmQscXVlcnlQYXJhbXM6aCxmcmFnbWVudDptLHF1ZXJ5UGFyYW1zSGFuZGxpbmc6XyxwcmVzZXJ2'@;
put 'ZUZyYWdtZW50Ok99PWYsWD1PP3RoaXMuY3VycmVudFVybFRyZWUuZnJhZ21lbnQ6bTtsZXQgcGUsYWU9bnVsbDtzd2l0Y2goXyl7Y2FzZSJtZXJnZSI6YWU9ey4uLnRoaXMuY3VycmVudFVybFRyZWUucXVlcnlQYXJhbXMsLi4uaH07YnJlYWs7Y2FzZSJwcmVzZXJ2ZSI6YWU9dGhpcy5jdXJy'@;
put 'ZW50VXJsVHJlZS5xdWVyeVBhcmFtczticmVhaztkZWZhdWx0OmFlPWh8fG51bGx9bnVsbCE9PWFlJiYoYWU9dGhpcy5yZW1vdmVFbXB0eVByb3BzKGFlKSk7dHJ5e3BlPXlyZShkP2Quc25hcHNob3Q6dGhpcy5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC5yb290KX1jYXRjaHsoInN0cmluZyIhPXR5'@;
put 'cGVvZiBhWzBdfHwhYVswXS5zdGFydHNXaXRoKCIvIikpJiYoYT1bXSkscGU9dGhpcy5jdXJyZW50VXJsVHJlZS5yb290fXJldHVybiBicmUocGUsYSxhZSxYPz9udWxsKX1uYXZpZ2F0ZUJ5VXJsKGEsZj17c2tpcExvY2F0aW9uQ2hhbmdlOiExfSl7Y29uc3QgZD14ZyhhKT9hOnRoaXMucGFy'@;
put 'c2VVcmwoYSksaD10aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kubWVyZ2UoZCx0aGlzLnJhd1VybFRyZWUpO3JldHVybiB0aGlzLnNjaGVkdWxlTmF2aWdhdGlvbihoLF9DLG51bGwsZil9bmF2aWdhdGUoYSxmPXtza2lwTG9jYXRpb25DaGFuZ2U6ITF9KXtyZXR1cm4gZnVuY3Rpb24gUndlKGwp'@;
put 'e2ZvcihsZXQgYz0wO2M8bC5sZW5ndGg7YysrKWlmKG51bGw9PWxbY10pdGhyb3cgbmV3IElyKDQwMDgsITEpfShhKSx0aGlzLm5hdmlnYXRlQnlVcmwodGhpcy5jcmVhdGVVcmxUcmVlKGEsZiksZil9c2VyaWFsaXplVXJsKGEpe3JldHVybiB0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXpl'@;
put 'KGEpfXBhcnNlVXJsKGEpe2xldCBmO3RyeXtmPXRoaXMudXJsU2VyaWFsaXplci5wYXJzZShhKX1jYXRjaChkKXtmPXRoaXMubWFsZm9ybWVkVXJpRXJyb3JIYW5kbGVyKGQsdGhpcy51cmxTZXJpYWxpemVyLGEpfXJldHVybiBmfWlzQWN0aXZlKGEsZil7bGV0IGQ7aWYoZD0hMD09PWY/ey4u'@;
put 'LkR3ZX06ITE9PT1mP3suLi5Jd2V9OmYseGcoYSkpcmV0dXJuIHVyZSh0aGlzLmN1cnJlbnRVcmxUcmVlLGEsZCk7Y29uc3QgaD10aGlzLnBhcnNlVXJsKGEpO3JldHVybiB1cmUodGhpcy5jdXJyZW50VXJsVHJlZSxoLGQpfXJlbW92ZUVtcHR5UHJvcHMoYSl7cmV0dXJuIE9iamVjdC5rZXlz'@;
put 'KGEpLnJlZHVjZSgoZixkKT0+e2NvbnN0IGg9YVtkXTtyZXR1cm4gbnVsbCE9aCYmKGZbZF09aCksZn0se30pfXNjaGVkdWxlTmF2aWdhdGlvbihhLGYsZCxoLG0pe2lmKHRoaXMuZGlzcG9zZWQpcmV0dXJuIFByb21pc2UucmVzb2x2ZSghMSk7bGV0IF8sTyxYO20/KF89bS5yZXNvbHZlLE89'@;
put 'bS5yZWplY3QsWD1tLnByb21pc2UpOlg9bmV3IFByb21pc2UoKHBlLGJlKT0+e189cGUsTz1iZX0pO2NvbnN0IGFlPXRoaXMucGVuZGluZ1Rhc2tzLmFkZCgpO3JldHVybiBYcmUodGhpcywoKT0+e3F1ZXVlTWljcm90YXNrKCgpPT50aGlzLnBlbmRpbmdUYXNrcy5yZW1vdmUoYWUpKX0pLHRo'@;
put 'aXMubmF2aWdhdGlvblRyYW5zaXRpb25zLmhhbmRsZU5hdmlnYXRpb25SZXF1ZXN0KHtzb3VyY2U6ZixyZXN0b3JlZFN0YXRlOmQsY3VycmVudFVybFRyZWU6dGhpcy5jdXJyZW50VXJsVHJlZSxjdXJyZW50UmF3VXJsOnRoaXMuY3VycmVudFVybFRyZWUscmF3VXJsOmEsZXh0cmFzOmgscmVz'@;
put 'b2x2ZTpfLHJlamVjdDpPLHByb21pc2U6WCxjdXJyZW50U25hcHNob3Q6dGhpcy5yb3V0ZXJTdGF0ZS5zbmFwc2hvdCxjdXJyZW50Um91dGVyU3RhdGU6dGhpcy5yb3V0ZXJTdGF0ZX0pLFguY2F0Y2gocGU9PlByb21pc2UucmVqZWN0KHBlKSl9c2V0QnJvd3NlclVybChhLGYpe2NvbnN0IGQ9'@;
put 'dGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShhKTtpZih0aGlzLmxvY2F0aW9uLmlzQ3VycmVudFBhdGhFcXVhbFRvKGQpfHxmLmV4dHJhcy5yZXBsYWNlVXJsKXtjb25zdCBtPXsuLi5mLmV4dHJhcy5zdGF0ZSwuLi50aGlzLmdlbmVyYXRlTmdSb3V0ZXJTdGF0ZShmLmlkLHRoaXMuYnJv'@;
put 'd3NlclBhZ2VJZCl9O3RoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKGQsIiIsbSl9ZWxzZXtjb25zdCBoPXsuLi5mLmV4dHJhcy5zdGF0ZSwuLi50aGlzLmdlbmVyYXRlTmdSb3V0ZXJTdGF0ZShmLmlkLCh0aGlzLmJyb3dzZXJQYWdlSWQ/PzApKzEpfTt0aGlzLmxvY2F0aW9uLmdvKGQsIiIs'@;
put 'aCl9fXJlc3RvcmVIaXN0b3J5KGEsZj0hMSl7aWYoImNvbXB1dGVkIj09PXRoaXMuY2FuY2VsZWROYXZpZ2F0aW9uUmVzb2x1dGlvbil7Y29uc3QgaD10aGlzLmN1cnJlbnRQYWdlSWQtKHRoaXMuYnJvd3NlclBhZ2VJZD8/dGhpcy5jdXJyZW50UGFnZUlkKTswIT09aD90aGlzLmxvY2F0aW9u'@;
put 'Lmhpc3RvcnlHbyhoKTp0aGlzLmN1cnJlbnRVcmxUcmVlPT09dGhpcy5nZXRDdXJyZW50TmF2aWdhdGlvbigpPy5maW5hbFVybCYmMD09PWgmJih0aGlzLnJlc2V0U3RhdGUoYSksdGhpcy5icm93c2VyVXJsVHJlZT1hLmN1cnJlbnRVcmxUcmVlLHRoaXMucmVzZXRVcmxUb0N1cnJlbnRVcmxU'@;
put 'cmVlKCkpfWVsc2UicmVwbGFjZSI9PT10aGlzLmNhbmNlbGVkTmF2aWdhdGlvblJlc29sdXRpb24mJihmJiZ0aGlzLnJlc2V0U3RhdGUoYSksdGhpcy5yZXNldFVybFRvQ3VycmVudFVybFRyZWUoKSl9cmVzZXRTdGF0ZShhKXt0aGlzLnJvdXRlclN0YXRlPWEuY3VycmVudFJvdXRlclN0YXRl'@;
put 'LHRoaXMuY3VycmVudFVybFRyZWU9YS5jdXJyZW50VXJsVHJlZSx0aGlzLnJhd1VybFRyZWU9dGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5Lm1lcmdlKHRoaXMuY3VycmVudFVybFRyZWUsYS5yYXdVcmwpfXJlc2V0VXJsVG9DdXJyZW50VXJsVHJlZSgpe3RoaXMubG9jYXRpb24ucmVwbGFjZVN0'@;
put 'YXRlKHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUodGhpcy5yYXdVcmxUcmVlKSwiIix0aGlzLmdlbmVyYXRlTmdSb3V0ZXJTdGF0ZSh0aGlzLmxhc3RTdWNjZXNzZnVsSWQsdGhpcy5jdXJyZW50UGFnZUlkKSl9Z2VuZXJhdGVOZ1JvdXRlclN0YXRlKGEsZil7cmV0dXJuImNvbXB1dGVk'@;
put 'Ij09PXRoaXMuY2FuY2VsZWROYXZpZ2F0aW9uUmVzb2x1dGlvbj97bmF2aWdhdGlvbklkOmEsXHUwMjc1cm91dGVyUGFnZUlkOmZ9OntuYXZpZ2F0aW9uSWQ6YX19fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NXByb3Y9aHIoe3Rva2Vu'@;
put 'OmwsZmFjdG9yeTpsLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGx9KSgpLEkwPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmLGQsaCxtLF8pe3RoaXMucm91dGVyPWEsdGhpcy5yb3V0ZT1mLHRoaXMudGFiSW5kZXhBdHRyaWJ1dGU9ZCx0aGlzLnJlbmRlcmVyPWgsdGhpcy5l'@;
put 'bD1tLHRoaXMubG9jYXRpb25TdHJhdGVneT1fLHRoaXMuaHJlZj1udWxsLHRoaXMuY29tbWFuZHM9bnVsbCx0aGlzLm9uQ2hhbmdlcz1uZXcgd2UsdGhpcy5wcmVzZXJ2ZUZyYWdtZW50PSExLHRoaXMuc2tpcExvY2F0aW9uQ2hhbmdlPSExLHRoaXMucmVwbGFjZVVybD0hMTtjb25zdCBPPW0u'@;
put 'bmF0aXZlRWxlbWVudC50YWdOYW1lPy50b0xvd2VyQ2FzZSgpO3RoaXMuaXNBbmNob3JFbGVtZW50PSJhIj09PU98fCJhcmVhIj09PU8sdGhpcy5pc0FuY2hvckVsZW1lbnQ/dGhpcy5zdWJzY3JpcHRpb249YS5ldmVudHMuc3Vic2NyaWJlKFg9PntYIGluc3RhbmNlb2YgaTQmJnRoaXMudXBk'@;
put 'YXRlSHJlZigpfSk6dGhpcy5zZXRUYWJJbmRleElmTm90T25OYXRpdmVFbCgiMCIpfXNldFRhYkluZGV4SWZOb3RPbk5hdGl2ZUVsKGEpe251bGwhPXRoaXMudGFiSW5kZXhBdHRyaWJ1dGV8fHRoaXMuaXNBbmNob3JFbGVtZW50fHx0aGlzLmFwcGx5QXR0cmlidXRlVmFsdWUoInRhYmluZGV4'@;
put 'IixhKX1uZ09uQ2hhbmdlcyhhKXt0aGlzLmlzQW5jaG9yRWxlbWVudCYmdGhpcy51cGRhdGVIcmVmKCksdGhpcy5vbkNoYW5nZXMubmV4dCh0aGlzKX1zZXQgcm91dGVyTGluayhhKXtudWxsIT1hPyh0aGlzLmNvbW1hbmRzPUFycmF5LmlzQXJyYXkoYSk/YTpbYV0sdGhpcy5zZXRUYWJJbmRl'@;
put 'eElmTm90T25OYXRpdmVFbCgiMCIpKToodGhpcy5jb21tYW5kcz1udWxsLHRoaXMuc2V0VGFiSW5kZXhJZk5vdE9uTmF0aXZlRWwobnVsbCkpfW9uQ2xpY2soYSxmLGQsaCxtKXtyZXR1cm4hIShudWxsPT09dGhpcy51cmxUcmVlfHx0aGlzLmlzQW5jaG9yRWxlbWVudCYmKDAhPT1hfHxmfHxk'@;
put 'fHxofHxtfHwic3RyaW5nIj09dHlwZW9mIHRoaXMudGFyZ2V0JiYiX3NlbGYiIT10aGlzLnRhcmdldCkpfHwodGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLnVybFRyZWUse3NraXBMb2NhdGlvbkNoYW5nZTp0aGlzLnNraXBMb2NhdGlvbkNoYW5nZSxyZXBsYWNlVXJsOnRoaXMucmVw'@;
put 'bGFjZVVybCxzdGF0ZTp0aGlzLnN0YXRlfSksIXRoaXMuaXNBbmNob3JFbGVtZW50KX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpfXVwZGF0ZUhyZWYoKXt0aGlzLmhyZWY9bnVsbCE9PXRoaXMudXJsVHJlZSYmdGhpcy5sb2NhdGlvblN0cmF0ZWd5P3Ro'@;
put 'aXMubG9jYXRpb25TdHJhdGVneT8ucHJlcGFyZUV4dGVybmFsVXJsKHRoaXMucm91dGVyLnNlcmlhbGl6ZVVybCh0aGlzLnVybFRyZWUpKTpudWxsO2NvbnN0IGE9bnVsbD09PXRoaXMuaHJlZj9udWxsOmZ1bmN0aW9uIFNBKGwsYyxhKXtyZXR1cm4gZnVuY3Rpb24gaU4obCxjKXtyZXR1cm4i'@;
put 'c3JjIj09PWMmJigiZW1iZWQiPT09bHx8ImZyYW1lIj09PWx8fCJpZnJhbWUiPT09bHx8Im1lZGlhIj09PWx8fCJzY3JpcHQiPT09bCl8fCJocmVmIj09PWMmJigiYmFzZSI9PT1sfHwibGluayI9PT1sKT9DQTpWX30oYyxhKShsKX0odGhpcy5ocmVmLHRoaXMuZWwubmF0aXZlRWxlbWVudC50'@;
put 'YWdOYW1lLnRvTG93ZXJDYXNlKCksImhyZWYiKTt0aGlzLmFwcGx5QXR0cmlidXRlVmFsdWUoImhyZWYiLGEpfWFwcGx5QXR0cmlidXRlVmFsdWUoYSxmKXtjb25zdCBkPXRoaXMucmVuZGVyZXIsaD10aGlzLmVsLm5hdGl2ZUVsZW1lbnQ7bnVsbCE9PWY/ZC5zZXRBdHRyaWJ1dGUoaCxhLGYp'@;
put 'OmQucmVtb3ZlQXR0cmlidXRlKGgsYSl9Z2V0IHVybFRyZWUoKXtyZXR1cm4gbnVsbD09PXRoaXMuY29tbWFuZHM/bnVsbDp0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKHRoaXMuY29tbWFuZHMse3JlbGF0aXZlVG86dm9pZCAwIT09dGhpcy5yZWxhdGl2ZVRvP3RoaXMucmVsYXRpdmVUbzp0'@;
put 'aGlzLnJvdXRlLHF1ZXJ5UGFyYW1zOnRoaXMucXVlcnlQYXJhbXMsZnJhZ21lbnQ6dGhpcy5mcmFnbWVudCxxdWVyeVBhcmFtc0hhbmRsaW5nOnRoaXMucXVlcnlQYXJhbXNIYW5kbGluZyxwcmVzZXJ2ZUZyYWdtZW50OnRoaXMucHJlc2VydmVGcmFnbWVudH0pfX1yZXR1cm4gbC5cdTAyNzVm'@;
put 'YWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChMYSkscnQodHUpLEltKCJ0YWJpbmRleCIpLHJ0KGpvKSxydChWaSkscnQoTWcpKX0sbC5cdTAyNzVkaXI9U3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siIiwicm91dGVyTGluayIsIiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpm'@;
put 'dW5jdGlvbihhLGYpezEmYSYmRXQoImNsaWNrIixmdW5jdGlvbihoKXtyZXR1cm4gZi5vbkNsaWNrKGguYnV0dG9uLGguY3RybEtleSxoLnNoaWZ0S2V5LGguYWx0S2V5LGgubWV0YUtleSl9KSwyJmEmJlJyKCJ0YXJnZXQiLGYudGFyZ2V0KX0saW5wdXRzOnt0YXJnZXQ6InRhcmdldCIscXVl'@;
put 'cnlQYXJhbXM6InF1ZXJ5UGFyYW1zIixmcmFnbWVudDoiZnJhZ21lbnQiLHF1ZXJ5UGFyYW1zSGFuZGxpbmc6InF1ZXJ5UGFyYW1zSGFuZGxpbmciLHN0YXRlOiJzdGF0ZSIscmVsYXRpdmVUbzoicmVsYXRpdmVUbyIscHJlc2VydmVGcmFnbWVudDpbInByZXNlcnZlRnJhZ21lbnQiLCJwcmVz'@;
put 'ZXJ2ZUZyYWdtZW50Iixfdl0sc2tpcExvY2F0aW9uQ2hhbmdlOlsic2tpcExvY2F0aW9uQ2hhbmdlIiwic2tpcExvY2F0aW9uQ2hhbmdlIixfdl0scmVwbGFjZVVybDpbInJlcGxhY2VVcmwiLCJyZXBsYWNlVXJsIixfdl0scm91dGVyTGluazoicm91dGVyTGluayJ9LHN0YW5kYWxvbmU6ITAs'@;
put 'ZmVhdHVyZXM6W0lULGJsXX0pLGx9KSgpLFRDPSgoKT0+e2NsYXNzIGx7Z2V0IGlzQWN0aXZlKCl7cmV0dXJuIHRoaXMuX2lzQWN0aXZlfWNvbnN0cnVjdG9yKGEsZixkLGgsbSl7dGhpcy5yb3V0ZXI9YSx0aGlzLmVsZW1lbnQ9Zix0aGlzLnJlbmRlcmVyPWQsdGhpcy5jZHI9aCx0aGlzLmxp'@;
put 'bms9bSx0aGlzLmNsYXNzZXM9W10sdGhpcy5faXNBY3RpdmU9ITEsdGhpcy5yb3V0ZXJMaW5rQWN0aXZlT3B0aW9ucz17ZXhhY3Q6ITF9LHRoaXMuaXNBY3RpdmVDaGFuZ2U9bmV3IHhyLHRoaXMucm91dGVyRXZlbnRzU3Vic2NyaXB0aW9uPWEuZXZlbnRzLnN1YnNjcmliZShfPT57XyBpbnN0'@;
put 'YW5jZW9mIGk0JiZ0aGlzLnVwZGF0ZSgpfSl9bmdBZnRlckNvbnRlbnRJbml0KCl7R2kodGhpcy5saW5rcy5jaGFuZ2VzLEdpKG51bGwpKS5waXBlKEZpKCkpLnN1YnNjcmliZShhPT57dGhpcy51cGRhdGUoKSx0aGlzLnN1YnNjcmliZVRvRWFjaExpbmtPbkNoYW5nZXMoKX0pfXN1YnNjcmli'@;
put 'ZVRvRWFjaExpbmtPbkNoYW5nZXMoKXt0aGlzLmxpbmtJbnB1dENoYW5nZXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7Y29uc3QgYT1bLi4udGhpcy5saW5rcy50b0FycmF5KCksdGhpcy5saW5rXS5maWx0ZXIoZj0+ISFmKS5tYXAoZj0+Zi5vbkNoYW5nZXMpO3RoaXMubGlua0lucHV0'@;
put 'Q2hhbmdlc1N1YnNjcmlwdGlvbj1ubChhKS5waXBlKEZpKCkpLnN1YnNjcmliZShmPT57dGhpcy5faXNBY3RpdmUhPT10aGlzLmlzTGlua0FjdGl2ZSh0aGlzLnJvdXRlcikoZikmJnRoaXMudXBkYXRlKCl9KX1zZXQgcm91dGVyTGlua0FjdGl2ZShhKXtjb25zdCBmPUFycmF5LmlzQXJyYXko'@;
put 'YSk/YTphLnNwbGl0KCIgIik7dGhpcy5jbGFzc2VzPWYuZmlsdGVyKGQ9PiEhZCl9bmdPbkNoYW5nZXMoYSl7dGhpcy51cGRhdGUoKX1uZ09uRGVzdHJveSgpe3RoaXMucm91dGVyRXZlbnRzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5saW5rSW5wdXRDaGFuZ2VzU3Vic2NyaXB0'@;
put 'aW9uPy51bnN1YnNjcmliZSgpfXVwZGF0ZSgpeyF0aGlzLmxpbmtzfHwhdGhpcy5yb3V0ZXIubmF2aWdhdGVkfHxxdWV1ZU1pY3JvdGFzaygoKT0+e2NvbnN0IGE9dGhpcy5oYXNBY3RpdmVMaW5rcygpO3RoaXMuX2lzQWN0aXZlIT09YSYmKHRoaXMuX2lzQWN0aXZlPWEsdGhpcy5jZHIubWFy'@;
put 'a0ZvckNoZWNrKCksdGhpcy5jbGFzc2VzLmZvckVhY2goZj0+e2E/dGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCxmKTp0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LGYpfSksYSYmdm9pZCAwIT09dGhp'@;
put 'cy5hcmlhQ3VycmVudFdoZW5BY3RpdmU/dGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsImFyaWEtY3VycmVudCIsdGhpcy5hcmlhQ3VycmVudFdoZW5BY3RpdmUudG9TdHJpbmcoKSk6dGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhp'@;
put 'cy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsImFyaWEtY3VycmVudCIpLHRoaXMuaXNBY3RpdmVDaGFuZ2UuZW1pdChhKSl9KX1pc0xpbmtBY3RpdmUoYSl7Y29uc3QgZj1mdW5jdGlvbiBMd2UobCl7cmV0dXJuISFsLnBhdGhzfSh0aGlzLnJvdXRlckxpbmtBY3RpdmVPcHRpb25zKT90aGlzLnJv'@;
put 'dXRlckxpbmtBY3RpdmVPcHRpb25zOnRoaXMucm91dGVyTGlua0FjdGl2ZU9wdGlvbnMuZXhhY3R8fCExO3JldHVybiBkPT4hIWQudXJsVHJlZSYmYS5pc0FjdGl2ZShkLnVybFRyZWUsZil9aGFzQWN0aXZlTGlua3MoKXtjb25zdCBhPXRoaXMuaXNMaW5rQWN0aXZlKHRoaXMucm91dGVyKTty'@;
put 'ZXR1cm4gdGhpcy5saW5rJiZhKHRoaXMubGluayl8fHRoaXMubGlua3Muc29tZShhKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkocnQoTGEpLHJ0KFZpKSxydChqbykscnQoVWwpLHJ0KEkwLDgpKX0sbC5cdTAyNzVkaXI9U3Ioe3R5cGU6bCxzZWxl'@;
put 'Y3RvcnM6W1siIiwicm91dGVyTGlua0FjdGl2ZSIsIiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGYsZCl7aWYoMSZhJiZGbyhkLEkwLDUpLDImYSl7bGV0IGg7dWkoaD1jaSgpKSYmKGYubGlua3M9aCl9fSxpbnB1dHM6e3JvdXRlckxpbmtBY3RpdmVPcHRpb25zOiJyb3V0ZXJMaW5r'@;
put 'QWN0aXZlT3B0aW9ucyIsYXJpYUN1cnJlbnRXaGVuQWN0aXZlOiJhcmlhQ3VycmVudFdoZW5BY3RpdmUiLHJvdXRlckxpbmtBY3RpdmU6InJvdXRlckxpbmtBY3RpdmUifSxvdXRwdXRzOntpc0FjdGl2ZUNoYW5nZToiaXNBY3RpdmVDaGFuZ2UifSxleHBvcnRBczpbInJvdXRlckxpbmtBY3Rp'@;
put 'dmUiXSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOltibF19KSxsfSkoKTtjbGFzcyBKcmV7fWxldCBQd2U9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhLGYsZCxoLG0pe3RoaXMucm91dGVyPWEsdGhpcy5pbmplY3Rvcj1kLHRoaXMucHJlbG9hZGluZ1N0cmF0ZWd5PWgsdGhpcy5sb2FkZXI9'@;
put 'bX1zZXRVcFByZWxvYWRpbmcoKXt0aGlzLnN1YnNjcmlwdGlvbj10aGlzLnJvdXRlci5ldmVudHMucGlwZShJbChhPT5hIGluc3RhbmNlb2YgaTQpLFN2KCgpPT50aGlzLnByZWxvYWQoKSkpLnN1YnNjcmliZSgoKT0+e30pfXByZWxvYWQoKXtyZXR1cm4gdGhpcy5wcm9jZXNzUm91dGVzKHRo'@;
put 'aXMuaW5qZWN0b3IsdGhpcy5yb3V0ZXIuY29uZmlnKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXByb2Nlc3NSb3V0ZXMoYSxmKXtjb25zdCBkPVtdO2Zvcihjb25zdCBoIG9mIGYpe2gucHJvdmlkZXJzJiYhaC5faW5q'@;
put 'ZWN0b3ImJihoLl9pbmplY3Rvcj15QihoLnByb3ZpZGVycyxhLGBSb3V0ZTogJHtoLnBhdGh9YCkpO2NvbnN0IG09aC5faW5qZWN0b3I/P2EsXz1oLl9sb2FkZWRJbmplY3Rvcj8/bTsoaC5sb2FkQ2hpbGRyZW4mJiFoLl9sb2FkZWRSb3V0ZXMmJnZvaWQgMD09PWguY2FuTG9hZHx8aC5sb2Fk'@;
put 'Q29tcG9uZW50JiYhaC5fbG9hZGVkQ29tcG9uZW50KSYmZC5wdXNoKHRoaXMucHJlbG9hZENvbmZpZyhtLGgpKSwoaC5jaGlsZHJlbnx8aC5fbG9hZGVkUm91dGVzKSYmZC5wdXNoKHRoaXMucHJvY2Vzc1JvdXRlcyhfLGguY2hpbGRyZW4/P2guX2xvYWRlZFJvdXRlcykpfXJldHVybiBubChk'@;
put 'KS5waXBlKEZpKCkpfXByZWxvYWRDb25maWcoYSxmKXtyZXR1cm4gdGhpcy5wcmVsb2FkaW5nU3RyYXRlZ3kucHJlbG9hZChmLCgpPT57bGV0IGQ7ZD1mLmxvYWRDaGlsZHJlbiYmdm9pZCAwPT09Zi5jYW5Mb2FkP3RoaXMubG9hZGVyLmxvYWRDaGlsZHJlbihhLGYpOkdpKG51bGwpO2NvbnN0'@;
put 'IGg9ZC5waXBlKF9yKG09Pm51bGw9PT1tP0dpKHZvaWQgMCk6KGYuX2xvYWRlZFJvdXRlcz1tLnJvdXRlcyxmLl9sb2FkZWRJbmplY3Rvcj1tLmluamVjdG9yLHRoaXMucHJvY2Vzc1JvdXRlcyhtLmluamVjdG9yPz9hLG0ucm91dGVzKSkpKTtyZXR1cm4gZi5sb2FkQ29tcG9uZW50JiYhZi5f'@;
put 'bG9hZGVkQ29tcG9uZW50P25sKFtoLHRoaXMubG9hZGVyLmxvYWRDb21wb25lbnQoZildKS5waXBlKEZpKCkpOmh9KX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkoc3IoTGEpLHNyKEN0ZSksc3IodTEpLHNyKEpyZSksc3IoR2opKX0sbC5cdTAyNzVw'@;
put 'cm92PWhyKHt0b2tlbjpsLGZhY3Rvcnk6bC5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxsfSkoKTtjb25zdCAkaj1uZXcgTWkoIiIpO2xldCBRcmU9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhLGYsZCxoLG09e30pe3RoaXMudXJsU2VyaWFsaXplcj1hLHRoaXMudHJhbnNpdGlv'@;
put 'bnM9Zix0aGlzLnZpZXdwb3J0U2Nyb2xsZXI9ZCx0aGlzLnpvbmU9aCx0aGlzLm9wdGlvbnM9bSx0aGlzLmxhc3RJZD0wLHRoaXMubGFzdFNvdXJjZT0iaW1wZXJhdGl2ZSIsdGhpcy5yZXN0b3JlZElkPTAsdGhpcy5zdG9yZT17fSxtLnNjcm9sbFBvc2l0aW9uUmVzdG9yYXRpb249bS5zY3Jv'@;
put 'bGxQb3NpdGlvblJlc3RvcmF0aW9ufHwiZGlzYWJsZWQiLG0uYW5jaG9yU2Nyb2xsaW5nPW0uYW5jaG9yU2Nyb2xsaW5nfHwiZGlzYWJsZWQifWluaXQoKXsiZGlzYWJsZWQiIT09dGhpcy5vcHRpb25zLnNjcm9sbFBvc2l0aW9uUmVzdG9yYXRpb24mJnRoaXMudmlld3BvcnRTY3JvbGxlci5z'@;
put 'ZXRIaXN0b3J5U2Nyb2xsUmVzdG9yYXRpb24oIm1hbnVhbCIpLHRoaXMucm91dGVyRXZlbnRzU3Vic2NyaXB0aW9uPXRoaXMuY3JlYXRlU2Nyb2xsRXZlbnRzKCksdGhpcy5zY3JvbGxFdmVudHNTdWJzY3JpcHRpb249dGhpcy5jb25zdW1lU2Nyb2xsRXZlbnRzKCl9Y3JlYXRlU2Nyb2xsRXZl'@;
put 'bnRzKCl7cmV0dXJuIHRoaXMudHJhbnNpdGlvbnMuZXZlbnRzLnN1YnNjcmliZShhPT57YSBpbnN0YW5jZW9mIFBqPyh0aGlzLnN0b3JlW3RoaXMubGFzdElkXT10aGlzLnZpZXdwb3J0U2Nyb2xsZXIuZ2V0U2Nyb2xsUG9zaXRpb24oKSx0aGlzLmxhc3RTb3VyY2U9YS5uYXZpZ2F0aW9uVHJp'@;
put 'Z2dlcix0aGlzLnJlc3RvcmVkSWQ9YS5yZXN0b3JlZFN0YXRlP2EucmVzdG9yZWRTdGF0ZS5uYXZpZ2F0aW9uSWQ6MCk6YSBpbnN0YW5jZW9mIGk0Pyh0aGlzLmxhc3RJZD1hLmlkLHRoaXMuc2NoZWR1bGVTY3JvbGxFdmVudChhLHRoaXMudXJsU2VyaWFsaXplci5wYXJzZShhLnVybEFmdGVy'@;
put 'UmVkaXJlY3RzKS5mcmFnbWVudCkpOmEgaW5zdGFuY2VvZiB3QyYmMD09PWEuY29kZSYmKHRoaXMubGFzdFNvdXJjZT12b2lkIDAsdGhpcy5yZXN0b3JlZElkPTAsdGhpcy5zY2hlZHVsZVNjcm9sbEV2ZW50KGEsdGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKGEudXJsKS5mcmFnbWVudCkpfSl9'@;
put 'Y29uc3VtZVNjcm9sbEV2ZW50cygpe3JldHVybiB0aGlzLnRyYW5zaXRpb25zLmV2ZW50cy5zdWJzY3JpYmUoYT0+e2EgaW5zdGFuY2VvZiBrcmUmJihhLnBvc2l0aW9uPyJ0b3AiPT09dGhpcy5vcHRpb25zLnNjcm9sbFBvc2l0aW9uUmVzdG9yYXRpb24/dGhpcy52aWV3cG9ydFNjcm9sbGVy'@;
put 'LnNjcm9sbFRvUG9zaXRpb24oWzAsMF0pOiJlbmFibGVkIj09PXRoaXMub3B0aW9ucy5zY3JvbGxQb3NpdGlvblJlc3RvcmF0aW9uJiZ0aGlzLnZpZXdwb3J0U2Nyb2xsZXIuc2Nyb2xsVG9Qb3NpdGlvbihhLnBvc2l0aW9uKTphLmFuY2hvciYmImVuYWJsZWQiPT09dGhpcy5vcHRpb25zLmFu'@;
put 'Y2hvclNjcm9sbGluZz90aGlzLnZpZXdwb3J0U2Nyb2xsZXIuc2Nyb2xsVG9BbmNob3IoYS5hbmNob3IpOiJkaXNhYmxlZCIhPT10aGlzLm9wdGlvbnMuc2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbiYmdGhpcy52aWV3cG9ydFNjcm9sbGVyLnNjcm9sbFRvUG9zaXRpb24oWzAsMF0pKX0pfXNj'@;
put 'aGVkdWxlU2Nyb2xsRXZlbnQoYSxmKXt0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntzZXRUaW1lb3V0KCgpPT57dGhpcy56b25lLnJ1bigoKT0+e3RoaXMudHJhbnNpdGlvbnMuZXZlbnRzLm5leHQobmV3IGtyZShhLCJwb3BzdGF0ZSI9PT10aGlzLmxhc3RTb3VyY2U/dGhpcy5z'@;
put 'dG9yZVt0aGlzLnJlc3RvcmVkSWRdOm51bGwsZikpfSl9LDApfSl9bmdPbkRlc3Ryb3koKXt0aGlzLnJvdXRlckV2ZW50c1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKSx0aGlzLnNjcm9sbEV2ZW50c1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1'@;
put 'bmN0aW9uKGEpeyFmdW5jdGlvbiBuVCgpe3Rocm93IG5ldyBFcnJvcigiaW52YWxpZCIpfSgpfSxsLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmwsZmFjdG9yeTpsLlx1MDI3NWZhY30pLGx9KSgpO2Z1bmN0aW9uICQyKGwsYyl7cmV0dXJue1x1MDI3NWtpbmQ6bCxcdTAyNzVwcm92aWRlcnM6Y319'@;
put 'ZnVuY3Rpb24gdGllKCl7Y29uc3QgbD1IaShBbCk7cmV0dXJuIGM9Pntjb25zdCBhPWwuZ2V0KENnKTtpZihjIT09YS5jb21wb25lbnRzWzBdKXJldHVybjtjb25zdCBmPWwuZ2V0KExhKSxkPWwuZ2V0KG5pZSk7MT09PWwuZ2V0KEtqKSYmZi5pbml0aWFsTmF2aWdhdGlvbigpLGwuZ2V0KHJp'@;
put 'ZSxudWxsLGFhLk9wdGlvbmFsKT8uc2V0VXBQcmVsb2FkaW5nKCksbC5nZXQoJGosbnVsbCxhYS5PcHRpb25hbCk/LmluaXQoKSxmLnJlc2V0Um9vdENvbXBvbmVudFR5cGUoYS5jb21wb25lbnRUeXBlc1swXSksZC5jbG9zZWR8fChkLm5leHQoKSxkLmNvbXBsZXRlKCksZC51bnN1YnNjcmli'@;
put 'ZSgpKX19Y29uc3QgbmllPW5ldyBNaSgiIix7ZmFjdG9yeTooKT0+bmV3IHdlfSksS2o9bmV3IE1pKCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT4xfSkscmllPW5ldyBNaSgiIik7ZnVuY3Rpb24gVndlKGwpe3JldHVybiAkMigwLFt7cHJvdmlkZTpyaWUsdXNlRXhpc3Rpbmc6'@;
put 'UHdlfSx7cHJvdmlkZTpKcmUsdXNlRXhpc3Rpbmc6bH1dKX1jb25zdCBpaWU9bmV3IE1pKCJST1VURVJfRk9SUk9PVF9HVUFSRCIpLGp3ZT1bZ2Qse3Byb3ZpZGU6Z0MsdXNlQ2xhc3M6T2p9LExhLENDLHtwcm92aWRlOnR1LHVzZUZhY3Rvcnk6ZnVuY3Rpb24gZWllKGwpe3JldHVybiBsLnJv'@;
put 'dXRlclN0YXRlLnJvb3R9LGRlcHM6W0xhXX0sR2osW11dO2Z1bmN0aW9uIHp3ZSgpe3JldHVybiBuZXcgUnRlKCJSb3V0ZXIiLExhKX1sZXQgbzQ9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhKXt9c3RhdGljIGZvclJvb3QoYSxmKXtyZXR1cm57bmdNb2R1bGU6bCxwcm92aWRlcnM6W2p3'@;
put 'ZSxbXSx7cHJvdmlkZTpEdixtdWx0aTohMCx1c2VWYWx1ZTphfSx7cHJvdmlkZTppaWUsdXNlRmFjdG9yeTpXd2UsZGVwczpbW0xhLG5ldyBjaCxuZXcgRTBdXX0se3Byb3ZpZGU6Y0QsdXNlVmFsdWU6Znx8e319LGY/LnVzZUhhc2g/e3Byb3ZpZGU6TWcsdXNlQ2xhc3M6YzllfTp7cHJvdmlk'@;
put 'ZTpNZyx1c2VDbGFzczpsbmV9LHtwcm92aWRlOiRqLHVzZUZhY3Rvcnk6KCk9Pntjb25zdCBsPUhpKE15ZSksYz1IaShVbyksYT1IaShjRCksZj1IaSh1RCksZD1IaShnQyk7cmV0dXJuIGEuc2Nyb2xsT2Zmc2V0JiZsLnNldE9mZnNldChhLnNjcm9sbE9mZnNldCksbmV3IFFyZShkLGYsbCxj'@;
put 'LGEpfX0sZj8ucHJlbG9hZGluZ1N0cmF0ZWd5P1Z3ZShmLnByZWxvYWRpbmdTdHJhdGVneSkuXHUwMjc1cHJvdmlkZXJzOltdLHtwcm92aWRlOlJ0ZSxtdWx0aTohMCx1c2VGYWN0b3J5Onp3ZX0sZj8uaW5pdGlhbE5hdmlnYXRpb24/R3dlKGYpOltdLGY/LmJpbmRUb0NvbXBvbmVudElucHV0'@;
put 'cz8kMig4LFtJcmUse3Byb3ZpZGU6aUQsdXNlRXhpc3Rpbmc6SXJlfV0pLlx1MDI3NXByb3ZpZGVyczpbXSxbe3Byb3ZpZGU6b2llLHVzZUZhY3Rvcnk6dGllfSx7cHJvdmlkZTp6QixtdWx0aTohMCx1c2VFeGlzdGluZzpvaWV9XV19fXN0YXRpYyBmb3JDaGlsZChhKXtyZXR1cm57bmdNb2R1'@;
put 'bGU6bCxwcm92aWRlcnM6W3twcm92aWRlOkR2LG11bHRpOiEwLHVzZVZhbHVlOmF9XX19fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHNyKGlpZSw4KSl9LGwuXHUwMjc1bW9kPURpKHt0eXBlOmx9KSxsLlx1MDI3NWluaj14aSh7fSksbH0pKCk7ZnVu'@;
put 'Y3Rpb24gV3dlKGwpe3JldHVybiJndWFyZGVkIn1mdW5jdGlvbiBHd2UobCl7cmV0dXJuWyJkaXNhYmxlZCI9PT1sLmluaXRpYWxOYXZpZ2F0aW9uPyQyKDMsW3twcm92aWRlOkxCLG11bHRpOiEwLHVzZUZhY3Rvcnk6KCk9Pntjb25zdCBjPUhpKExhKTtyZXR1cm4oKT0+e2Muc2V0VXBMb2Nh'@;
put 'dGlvbkNoYW5nZUxpc3RlbmVyKCl9fX0se3Byb3ZpZGU6S2osdXNlVmFsdWU6Mn1dKS5cdTAyNzVwcm92aWRlcnM6W10sImVuYWJsZWRCbG9ja2luZyI9PT1sLmluaXRpYWxOYXZpZ2F0aW9uPyQyKDIsW3twcm92aWRlOktqLHVzZVZhbHVlOjB9LHtwcm92aWRlOkxCLG11bHRpOiEwLGRlcHM6'@;
put 'W0FsXSx1c2VGYWN0b3J5OmM9Pntjb25zdCBhPWMuZ2V0KHM5ZSxQcm9taXNlLnJlc29sdmUoKSk7cmV0dXJuKCk9PmEudGhlbigoKT0+bmV3IFByb21pc2UoZj0+e2NvbnN0IGQ9Yy5nZXQoTGEpLGg9Yy5nZXQobmllKTtYcmUoZCwoKT0+e2YoITApfSksYy5nZXQodUQpLmFmdGVyUHJlYWN0'@;
put 'aXZhdGlvbj0oKT0+KGYoITApLGguY2xvc2VkP0dpKHZvaWQgMCk6aCksZC5pbml0aWFsTmF2aWdhdGlvbigpfSkpfX1dKS5cdTAyNzVwcm92aWRlcnM6W11dfWNvbnN0IG9pZT1uZXcgTWkoIiIpO3ZhciBhaWU9VCgzNjA3MiksS3dlPVQoNjYzMDQpO2NvbnN0IHFqPXt1c2Vyc19hbGxvd2Vk'@;
put 'OjEsdmlld2VyX3Jvd3NfYWxsb3dlZDoxNSxlZGl0b3Jfcm93c19hbGxvd2VkOjE1LHN0YWdlX3Jvd3NfYWxsb3dlZDoxLzAsaGlzdG9yeV9yb3dzX2FsbG93ZWQ6MTUsc3VibWl0X3Jvd3NfbGltaXQ6NSx2aWV3Ym94X2xpbWl0OjEsbGluZWFnZV9kYWlseV9saW1pdDozLHRhYmxlc19pbl9s'@;
put 'aWJyYXJ5X2xpbWl0OjM1LHZpZXdib3g6ITAsZmlsZVVwbG9hZDohMCxlZGl0UmVjb3JkOiEwLGFkZFJlY29yZDohMH07dmFyIGcxPWZ1bmN0aW9uKGwpe3JldHVybiBsW2wudmlld2VyX3Jvd3NfYWxsb3dlZD0wXT0idmlld2VyX3Jvd3NfYWxsb3dlZCIsbFtsLmVkaXRvcl9yb3dzX2FsbG93'@;
put 'ZWQ9MV09ImVkaXRvcl9yb3dzX2FsbG93ZWQiLGxbbC5zdGFnZV9yb3dzX2FsbG93ZWQ9Ml09InN0YWdlX3Jvd3NfYWxsb3dlZCIsbFtsLmhpc3Rvcnlfcm93c19hbGxvd2VkPTNdPSJoaXN0b3J5X3Jvd3NfYWxsb3dlZCIsbFtsLnN1Ym1pdF9yb3dzX2xpbWl0PTRdPSJzdWJtaXRfcm93c19s'@;
put 'aW1pdCIsbFtsLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0PTVdPSJ0YWJsZXNfaW5fbGlicmFyeV9saW1pdCIsbFtsLnZpZXdib3g9Nl09InZpZXdib3giLGxbbC52aWV3Ym94X2xpbWl0PTddPSJ2aWV3Ym94X2xpbWl0IixsW2wubGluZWFnZV9kYWlseV9saW1pdD04XT0ibGluZWFnZV9kYWls'@;
put 'eV9saW1pdCIsbFtsLmZpbGVVcGxvYWQ9OV09ImZpbGVVcGxvYWQiLGxbbC5lZGl0UmVjb3JkPTEwXT0iZWRpdFJlY29yZCIsbFtsLmFkZFJlY29yZD0xMV09ImFkZFJlY29yZCIsbH0oZzF8fHt9KSx2MT1UKDU2MzIxKSxsaWU9VC5uKHYxKSxYdT1UKDc2NzcxKTtsZXQgSXY9KCgpPT57Y2xh'@;
put 'c3MgbHtjb25zdHJ1Y3Rvcigpe31zZXREY0FkYXB0ZXJTZXR0aW5ncyhhKXt0aGlzLmRjQWRhcHRlclNldHRpbmdzPWF9Z2V0RGNBZGFwdGVyU2V0dGluZ3MoKXtyZXR1cm4gdGhpcy5kY0FkYXB0ZXJTZXR0aW5nc319cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXco'@;
put 'YXx8bCl9LGwuXHUwMjc1cHJvdj1ocih7dG9rZW46bCxmYWN0b3J5OmwuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbH0pKCksWGo9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3Rvcigpe3RoaXMudXNlckNoYW5nZT1uZXcgd2V9c2V0IHVzZXIoYSl7dGhpcy5fdXNlcj1hLHRoaXMudXNl'@;
put 'ckNoYW5nZS5uZXh0KGEpfWdldCB1c2VyKCl7cmV0dXJuIHRoaXMuX3VzZXJ9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmwsZmFjdG9yeTpsLlx1MDI3NWZhY30pLGx9KSgpLEpqPSgoKT0+e2NsYXNzIGx7'@;
put 'Y29uc3RydWN0b3IoKXt0aGlzLmFsZXJ0cz1uZXcgd2V9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmwsZmFjdG9yeTpsLlx1MDI3NWZhY30pLGx9KSgpLFJzPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3Io'@;
put 'YSl7dGhpcy5hbGVydHNTZXJ2aWNlPWEsdGhpcy5vblNpZGViYXJUb2dnbGU9bmV3IHhyLHRoaXMub25TdGFydHVwRGF0YUxvYWRlZD1uZXcgeHIsdGhpcy5vblNob3dBYm9ydE1vZGFsPW5ldyB4cix0aGlzLm9uUmVxdWVzdHNNb2RhbE9wZW49bmV3IHhyLHRoaXMub25EZW1vTGltaXRNb2Rh'@;
put 'bFNob3c9bmV3IHhyLHRoaXMudmlld0xhc3RVcmw9bnVsbCx0aGlzLnNpZGViYXJDbG9zZUxpbWl0PTEyODB9c2hvd0RlbW9MaW1pdE1vZGFsKGEpe3RoaXMub25EZW1vTGltaXRNb2RhbFNob3cuZW1pdChhKX1zaG93SW5mb01vZGFsKGE9IkluZm8iLGYpe3RoaXMub25TaG93QWJvcnRNb2Rh'@;
put 'bC5lbWl0KHttb2RhbFRpdGxlOmEsbWVzc2FnZTpmLHNhc1NlcnZpY2U6IiIsZGV0YWlsczpudWxsfSl9c2hvd0Fib3J0TW9kYWwoYSxmLGQsaD12b2lkIDApe2R8fChkPW51bGwpO2xldCBtPXtzYXNTZXJ2aWNlOmEsbWVzc2FnZTpmLGRldGFpbHM6ZH07aCYmKG0ubW9kYWxUaXRsZT1oKSx0'@;
put 'aGlzLm9uU2hvd0Fib3J0TW9kYWwuZW1pdChtKX1vcGVuUmVxdWVzdHNNb2RhbCgpe3RoaXMub25SZXF1ZXN0c01vZGFsT3Blbi5lbWl0KCEwKX1jYXRjaFJlc3BvbnNlRXJyb3IoYSxmKXtsZXQgZD0iU0FTIFNlcnZpY2UgZXJyb3Igb2N1cnJlZCI7aWYoZi5lcnJvcil7bGV0IGg7ZD1mLmVy'@;
put 'cm9yLm1lc3NhZ2UsZi5lcnJvci5kZXRhaWxzJiZmLmVycm9yLmRldGFpbHMubG9nJiYoaD1mLmVycm9yLmRldGFpbHMubG9nKSwoIWR8fGQudHJpbSgpLmxlbmd0aDwxKSYmKGQ9IlNBUyBTZXJ2aWNlIGVycm9yIG9jdXJyZWQiKSx0aGlzLnNob3dBYm9ydE1vZGFsKGEsZCx7TE9HOmh9LCJS'@;
put 'ZXF1ZXN0IGVycm9yIil9ZWxzZSB0aGlzLnNob3dBYm9ydE1vZGFsKGEsZCl9dG9nZ2xlU2lkZWJhcigpe3RoaXMub25TaWRlYmFyVG9nZ2xlLmVtaXQoKX1jbG9zZVNpZGViYXIoKXt3aW5kb3cuaW5uZXJXaWR0aDx0aGlzLnNpZGViYXJDbG9zZUxpbWl0JiZ0aGlzLm9uU2lkZWJhclRvZ2ds'@;
put 'ZS5lbWl0KHtvcGVuOiExfSl9b3BlblNpZGViYXIoKXt0aGlzLm9uU2lkZWJhclRvZ2dsZS5lbWl0KHtvcGVuOiEwfSl9c3RhcnR1cERhdGFMb2FkZWQoKXt0aGlzLm9uU3RhcnR1cERhdGFMb2FkZWQuZW1pdCgpfWRpc3BhdGNoRXZlbnQoYSl7bGV0IGY7ImZ1bmN0aW9uIj09dHlwZW9mIEV2'@;
put 'ZW50P2Y9bmV3IEV2ZW50KGEpOihmPWRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLGYuaW5pdEV2ZW50KGEsITAsITApKSx3aW5kb3cuZGlzcGF0Y2hFdmVudChmKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkoc3IoSmopKX0sbC5cdTAyNzVw'@;
put 'cm92PWhyKHt0b2tlbjpsLGZhY3Rvcnk6bC5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxsfSkoKTtjbGFzcyBmRHt9Y2xhc3MgZER7fWNsYXNzIEVoe2NvbnN0cnVjdG9yKGMpe3RoaXMubm9ybWFsaXplZE5hbWVzPW5ldyBNYXAsdGhpcy5sYXp5VXBkYXRlPW51bGwsYz8ic3RyaW5n'@;
put 'Ij09dHlwZW9mIGM/dGhpcy5sYXp5SW5pdD0oKT0+e3RoaXMuaGVhZGVycz1uZXcgTWFwLGMuc3BsaXQoIlxuIikuZm9yRWFjaChhPT57Y29uc3QgZj1hLmluZGV4T2YoIjoiKTtpZihmPjApe2NvbnN0IGQ9YS5zbGljZSgwLGYpLGg9ZC50b0xvd2VyQ2FzZSgpLG09YS5zbGljZShmKzEpLnRy'@;
put 'aW0oKTt0aGlzLm1heWJlU2V0Tm9ybWFsaXplZE5hbWUoZCxoKSx0aGlzLmhlYWRlcnMuaGFzKGgpP3RoaXMuaGVhZGVycy5nZXQoaCkucHVzaChtKTp0aGlzLmhlYWRlcnMuc2V0KGgsW21dKX19KX06dHlwZW9mIEhlYWRlcnM8InUiJiZjIGluc3RhbmNlb2YgSGVhZGVycz8odGhpcy5oZWFk'@;
put 'ZXJzPW5ldyBNYXAsYy5mb3JFYWNoKChhLGYpPT57dGhpcy5zZXRIZWFkZXJFbnRyaWVzKGYsYSl9KSk6dGhpcy5sYXp5SW5pdD0oKT0+e3RoaXMuaGVhZGVycz1uZXcgTWFwLE9iamVjdC5lbnRyaWVzKGMpLmZvckVhY2goKFthLGZdKT0+e3RoaXMuc2V0SGVhZGVyRW50cmllcyhhLGYpfSl9'@;
put 'OnRoaXMuaGVhZGVycz1uZXcgTWFwfWhhcyhjKXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5oZWFkZXJzLmhhcyhjLnRvTG93ZXJDYXNlKCkpfWdldChjKXt0aGlzLmluaXQoKTtjb25zdCBhPXRoaXMuaGVhZGVycy5nZXQoYy50b0xvd2VyQ2FzZSgpKTtyZXR1cm4gYSYmYS5sZW5ndGg+MD9h'@;
put 'WzBdOm51bGx9a2V5cygpe3JldHVybiB0aGlzLmluaXQoKSxBcnJheS5mcm9tKHRoaXMubm9ybWFsaXplZE5hbWVzLnZhbHVlcygpKX1nZXRBbGwoYyl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMuaGVhZGVycy5nZXQoYy50b0xvd2VyQ2FzZSgpKXx8bnVsbH1hcHBlbmQoYyxhKXtyZXR1cm4g'@;
put 'dGhpcy5jbG9uZSh7bmFtZTpjLHZhbHVlOmEsb3A6ImEifSl9c2V0KGMsYSl7cmV0dXJuIHRoaXMuY2xvbmUoe25hbWU6Yyx2YWx1ZTphLG9wOiJzIn0pfWRlbGV0ZShjLGEpe3JldHVybiB0aGlzLmNsb25lKHtuYW1lOmMsdmFsdWU6YSxvcDoiZCJ9KX1tYXliZVNldE5vcm1hbGl6ZWROYW1l'@;
put 'KGMsYSl7dGhpcy5ub3JtYWxpemVkTmFtZXMuaGFzKGEpfHx0aGlzLm5vcm1hbGl6ZWROYW1lcy5zZXQoYSxjKX1pbml0KCl7dGhpcy5sYXp5SW5pdCYmKHRoaXMubGF6eUluaXQgaW5zdGFuY2VvZiBFaD90aGlzLmNvcHlGcm9tKHRoaXMubGF6eUluaXQpOnRoaXMubGF6eUluaXQoKSx0aGlz'@;
put 'LmxhenlJbml0PW51bGwsdGhpcy5sYXp5VXBkYXRlJiYodGhpcy5sYXp5VXBkYXRlLmZvckVhY2goYz0+dGhpcy5hcHBseVVwZGF0ZShjKSksdGhpcy5sYXp5VXBkYXRlPW51bGwpKX1jb3B5RnJvbShjKXtjLmluaXQoKSxBcnJheS5mcm9tKGMuaGVhZGVycy5rZXlzKCkpLmZvckVhY2goYT0+'@;
put 'e3RoaXMuaGVhZGVycy5zZXQoYSxjLmhlYWRlcnMuZ2V0KGEpKSx0aGlzLm5vcm1hbGl6ZWROYW1lcy5zZXQoYSxjLm5vcm1hbGl6ZWROYW1lcy5nZXQoYSkpfSl9Y2xvbmUoYyl7Y29uc3QgYT1uZXcgRWg7cmV0dXJuIGEubGF6eUluaXQ9dGhpcy5sYXp5SW5pdCYmdGhpcy5sYXp5SW5pdCBp'@;
put 'bnN0YW5jZW9mIEVoP3RoaXMubGF6eUluaXQ6dGhpcyxhLmxhenlVcGRhdGU9KHRoaXMubGF6eVVwZGF0ZXx8W10pLmNvbmNhdChbY10pLGF9YXBwbHlVcGRhdGUoYyl7Y29uc3QgYT1jLm5hbWUudG9Mb3dlckNhc2UoKTtzd2l0Y2goYy5vcCl7Y2FzZSJhIjpjYXNlInMiOmxldCBmPWMudmFs'@;
put 'dWU7aWYoInN0cmluZyI9PXR5cGVvZiBmJiYoZj1bZl0pLDA9PT1mLmxlbmd0aClyZXR1cm47dGhpcy5tYXliZVNldE5vcm1hbGl6ZWROYW1lKGMubmFtZSxhKTtjb25zdCBkPSgiYSI9PT1jLm9wP3RoaXMuaGVhZGVycy5nZXQoYSk6dm9pZCAwKXx8W107ZC5wdXNoKC4uLmYpLHRoaXMuaGVh'@;
put 'ZGVycy5zZXQoYSxkKTticmVhaztjYXNlImQiOmNvbnN0IGg9Yy52YWx1ZTtpZihoKXtsZXQgbT10aGlzLmhlYWRlcnMuZ2V0KGEpO2lmKCFtKXJldHVybjttPW0uZmlsdGVyKF89Pi0xPT09aC5pbmRleE9mKF8pKSwwPT09bS5sZW5ndGg/KHRoaXMuaGVhZGVycy5kZWxldGUoYSksdGhpcy5u'@;
put 'b3JtYWxpemVkTmFtZXMuZGVsZXRlKGEpKTp0aGlzLmhlYWRlcnMuc2V0KGEsbSl9ZWxzZSB0aGlzLmhlYWRlcnMuZGVsZXRlKGEpLHRoaXMubm9ybWFsaXplZE5hbWVzLmRlbGV0ZShhKX19c2V0SGVhZGVyRW50cmllcyhjLGEpe2NvbnN0IGY9KEFycmF5LmlzQXJyYXkoYSk/YTpbYV0pLm1h'@;
put 'cChoPT5oLnRvU3RyaW5nKCkpLGQ9Yy50b0xvd2VyQ2FzZSgpO3RoaXMuaGVhZGVycy5zZXQoZCxmKSx0aGlzLm1heWJlU2V0Tm9ybWFsaXplZE5hbWUoYyxkKX1mb3JFYWNoKGMpe3RoaXMuaW5pdCgpLEFycmF5LmZyb20odGhpcy5ub3JtYWxpemVkTmFtZXMua2V5cygpKS5mb3JFYWNoKGE9'@;
put 'PmModGhpcy5ub3JtYWxpemVkTmFtZXMuZ2V0KGEpLHRoaXMuaGVhZGVycy5nZXQoYSkpKX19Y2xhc3MgcXdle2VuY29kZUtleShjKXtyZXR1cm4gc2llKGMpfWVuY29kZVZhbHVlKGMpe3JldHVybiBzaWUoYyl9ZGVjb2RlS2V5KGMpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoYyl9ZGVj'@;
put 'b2RlVmFsdWUoYyl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChjKX19Y29uc3QgSndlPS8lKFxkW2EtZjAtOV0pL2dpLFF3ZT17NDA6IkAiLCIzQSI6IjoiLDI0OiIkIiwiMkMiOiIsIiwiM0IiOiI7IiwiM0QiOiI9IiwiM0YiOiI/IiwiMkYiOiIvIn07ZnVuY3Rpb24gc2llKGwpe3JldHVy'@;
put 'biBlbmNvZGVVUklDb21wb25lbnQobCkucmVwbGFjZShKd2UsKGMsYSk9PlF3ZVthXT8/Yyl9ZnVuY3Rpb24gaEQobCl7cmV0dXJuYCR7bH1gfWNsYXNzIGE0e2NvbnN0cnVjdG9yKGM9e30pe2lmKHRoaXMudXBkYXRlcz1udWxsLHRoaXMuY2xvbmVGcm9tPW51bGwsdGhpcy5lbmNvZGVyPWMu'@;
put 'ZW5jb2Rlcnx8bmV3IHF3ZSxjLmZyb21TdHJpbmcpe2lmKGMuZnJvbU9iamVjdCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzcGVjaWZ5IGJvdGggZnJvbVN0cmluZyBhbmQgZnJvbU9iamVjdC4iKTt0aGlzLm1hcD1mdW5jdGlvbiBYd2UobCxjKXtjb25zdCBhPW5ldyBNYXA7cmV0dXJuIGwu'@;
put 'bGVuZ3RoPjAmJmwucmVwbGFjZSgvXlw/LywiIikuc3BsaXQoIiYiKS5mb3JFYWNoKGQ9Pntjb25zdCBoPWQuaW5kZXhPZigiPSIpLFttLF9dPS0xPT1oP1tjLmRlY29kZUtleShkKSwiIl06W2MuZGVjb2RlS2V5KGQuc2xpY2UoMCxoKSksYy5kZWNvZGVWYWx1ZShkLnNsaWNlKGgrMSkpXSxP'@;
put 'PWEuZ2V0KG0pfHxbXTtPLnB1c2goXyksYS5zZXQobSxPKX0pLGF9KGMuZnJvbVN0cmluZyx0aGlzLmVuY29kZXIpfWVsc2UgYy5mcm9tT2JqZWN0Pyh0aGlzLm1hcD1uZXcgTWFwLE9iamVjdC5rZXlzKGMuZnJvbU9iamVjdCkuZm9yRWFjaChhPT57Y29uc3QgZj1jLmZyb21PYmplY3RbYV0s'@;
put 'ZD1BcnJheS5pc0FycmF5KGYpP2YubWFwKGhEKTpbaEQoZildO3RoaXMubWFwLnNldChhLGQpfSkpOnRoaXMubWFwPW51bGx9aGFzKGMpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLm1hcC5oYXMoYyl9Z2V0KGMpe3RoaXMuaW5pdCgpO2NvbnN0IGE9dGhpcy5tYXAuZ2V0KGMpO3JldHVybiBh'@;
put 'P2FbMF06bnVsbH1nZXRBbGwoYyl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMubWFwLmdldChjKXx8bnVsbH1rZXlzKCl7cmV0dXJuIHRoaXMuaW5pdCgpLEFycmF5LmZyb20odGhpcy5tYXAua2V5cygpKX1hcHBlbmQoYyxhKXtyZXR1cm4gdGhpcy5jbG9uZSh7cGFyYW06Yyx2YWx1ZTphLG9w'@;
put 'OiJhIn0pfWFwcGVuZEFsbChjKXtjb25zdCBhPVtdO3JldHVybiBPYmplY3Qua2V5cyhjKS5mb3JFYWNoKGY9Pntjb25zdCBkPWNbZl07QXJyYXkuaXNBcnJheShkKT9kLmZvckVhY2goaD0+e2EucHVzaCh7cGFyYW06Zix2YWx1ZTpoLG9wOiJhIn0pfSk6YS5wdXNoKHtwYXJhbTpmLHZhbHVl'@;
put 'OmQsb3A6ImEifSl9KSx0aGlzLmNsb25lKGEpfXNldChjLGEpe3JldHVybiB0aGlzLmNsb25lKHtwYXJhbTpjLHZhbHVlOmEsb3A6InMifSl9ZGVsZXRlKGMsYSl7cmV0dXJuIHRoaXMuY2xvbmUoe3BhcmFtOmMsdmFsdWU6YSxvcDoiZCJ9KX10b1N0cmluZygpe3JldHVybiB0aGlzLmluaXQo'@;
put 'KSx0aGlzLmtleXMoKS5tYXAoYz0+e2NvbnN0IGE9dGhpcy5lbmNvZGVyLmVuY29kZUtleShjKTtyZXR1cm4gdGhpcy5tYXAuZ2V0KGMpLm1hcChmPT5hKyI9Iit0aGlzLmVuY29kZXIuZW5jb2RlVmFsdWUoZikpLmpvaW4oIiYiKX0pLmZpbHRlcihjPT4iIiE9PWMpLmpvaW4oIiYiKX1jbG9u'@;
put 'ZShjKXtjb25zdCBhPW5ldyBhNCh7ZW5jb2Rlcjp0aGlzLmVuY29kZXJ9KTtyZXR1cm4gYS5jbG9uZUZyb209dGhpcy5jbG9uZUZyb218fHRoaXMsYS51cGRhdGVzPSh0aGlzLnVwZGF0ZXN8fFtdKS5jb25jYXQoYyksYX1pbml0KCl7bnVsbD09PXRoaXMubWFwJiYodGhpcy5tYXA9bmV3IE1h'@;
put 'cCksbnVsbCE9PXRoaXMuY2xvbmVGcm9tJiYodGhpcy5jbG9uZUZyb20uaW5pdCgpLHRoaXMuY2xvbmVGcm9tLmtleXMoKS5mb3JFYWNoKGM9PnRoaXMubWFwLnNldChjLHRoaXMuY2xvbmVGcm9tLm1hcC5nZXQoYykpKSx0aGlzLnVwZGF0ZXMuZm9yRWFjaChjPT57c3dpdGNoKGMub3Ape2Nh'@;
put 'c2UiYSI6Y2FzZSJzIjpjb25zdCBhPSgiYSI9PT1jLm9wP3RoaXMubWFwLmdldChjLnBhcmFtKTp2b2lkIDApfHxbXTthLnB1c2goaEQoYy52YWx1ZSkpLHRoaXMubWFwLnNldChjLnBhcmFtLGEpO2JyZWFrO2Nhc2UiZCI6aWYodm9pZCAwPT09Yy52YWx1ZSl7dGhpcy5tYXAuZGVsZXRlKGMu'@;
put 'cGFyYW0pO2JyZWFrfXtsZXQgZj10aGlzLm1hcC5nZXQoYy5wYXJhbSl8fFtdO2NvbnN0IGQ9Zi5pbmRleE9mKGhEKGMudmFsdWUpKTstMSE9PWQmJmYuc3BsaWNlKGQsMSksZi5sZW5ndGg+MD90aGlzLm1hcC5zZXQoYy5wYXJhbSxmKTp0aGlzLm1hcC5kZWxldGUoYy5wYXJhbSl9fX0pLHRo'@;
put 'aXMuY2xvbmVGcm9tPXRoaXMudXBkYXRlcz1udWxsKX19Y2xhc3MgZUNle2NvbnN0cnVjdG9yKCl7dGhpcy5tYXA9bmV3IE1hcH1zZXQoYyxhKXtyZXR1cm4gdGhpcy5tYXAuc2V0KGMsYSksdGhpc31nZXQoYyl7cmV0dXJuIHRoaXMubWFwLmhhcyhjKXx8dGhpcy5tYXAuc2V0KGMsYy5kZWZh'@;
put 'dWx0VmFsdWUoKSksdGhpcy5tYXAuZ2V0KGMpfWRlbGV0ZShjKXtyZXR1cm4gdGhpcy5tYXAuZGVsZXRlKGMpLHRoaXN9aGFzKGMpe3JldHVybiB0aGlzLm1hcC5oYXMoYyl9a2V5cygpe3JldHVybiB0aGlzLm1hcC5rZXlzKCl9fWZ1bmN0aW9uIHVpZShsKXtyZXR1cm4gdHlwZW9mIEFycmF5'@;
put 'QnVmZmVyPCJ1IiYmbCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfWZ1bmN0aW9uIGNpZShsKXtyZXR1cm4gdHlwZW9mIEJsb2I8InUiJiZsIGluc3RhbmNlb2YgQmxvYn1mdW5jdGlvbiBmaWUobCl7cmV0dXJuIHR5cGVvZiBGb3JtRGF0YTwidSImJmwgaW5zdGFuY2VvZiBGb3JtRGF0YX1jbGFz'@;
put 'cyBPQ3tjb25zdHJ1Y3RvcihjLGEsZixkKXtsZXQgaDtpZih0aGlzLnVybD1hLHRoaXMuYm9keT1udWxsLHRoaXMucmVwb3J0UHJvZ3Jlc3M9ITEsdGhpcy53aXRoQ3JlZGVudGlhbHM9ITEsdGhpcy5yZXNwb25zZVR5cGU9Impzb24iLHRoaXMubWV0aG9kPWMudG9VcHBlckNhc2UoKSxmdW5j'@;
put 'dGlvbiB0Q2UobCl7c3dpdGNoKGwpe2Nhc2UiREVMRVRFIjpjYXNlIkdFVCI6Y2FzZSJIRUFEIjpjYXNlIk9QVElPTlMiOmNhc2UiSlNPTlAiOnJldHVybiExO2RlZmF1bHQ6cmV0dXJuITB9fSh0aGlzLm1ldGhvZCl8fGQ/KHRoaXMuYm9keT12b2lkIDAhPT1mP2Y6bnVsbCxoPWQpOmg9Zixo'@;
put 'JiYodGhpcy5yZXBvcnRQcm9ncmVzcz0hIWgucmVwb3J0UHJvZ3Jlc3MsdGhpcy53aXRoQ3JlZGVudGlhbHM9ISFoLndpdGhDcmVkZW50aWFscyxoLnJlc3BvbnNlVHlwZSYmKHRoaXMucmVzcG9uc2VUeXBlPWgucmVzcG9uc2VUeXBlKSxoLmhlYWRlcnMmJih0aGlzLmhlYWRlcnM9aC5oZWFk'@;
put 'ZXJzKSxoLmNvbnRleHQmJih0aGlzLmNvbnRleHQ9aC5jb250ZXh0KSxoLnBhcmFtcyYmKHRoaXMucGFyYW1zPWgucGFyYW1zKSksdGhpcy5oZWFkZXJzfHwodGhpcy5oZWFkZXJzPW5ldyBFaCksdGhpcy5jb250ZXh0fHwodGhpcy5jb250ZXh0PW5ldyBlQ2UpLHRoaXMucGFyYW1zKXtjb25z'@;
put 'dCBtPXRoaXMucGFyYW1zLnRvU3RyaW5nKCk7aWYoMD09PW0ubGVuZ3RoKXRoaXMudXJsV2l0aFBhcmFtcz1hO2Vsc2V7Y29uc3QgXz1hLmluZGV4T2YoIj8iKTt0aGlzLnVybFdpdGhQYXJhbXM9YSsoLTE9PT1fPyI/IjpfPGEubGVuZ3RoLTE/IiYiOiIiKSttfX1lbHNlIHRoaXMucGFyYW1z'@;
put 'PW5ldyBhNCx0aGlzLnVybFdpdGhQYXJhbXM9YX1zZXJpYWxpemVCb2R5KCl7cmV0dXJuIG51bGw9PT10aGlzLmJvZHk/bnVsbDp1aWUodGhpcy5ib2R5KXx8Y2llKHRoaXMuYm9keSl8fGZpZSh0aGlzLmJvZHkpfHxmdW5jdGlvbiBuQ2UobCl7cmV0dXJuIHR5cGVvZiBVUkxTZWFyY2hQYXJh'@;
put 'bXM8InUiJiZsIGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zfSh0aGlzLmJvZHkpfHwic3RyaW5nIj09dHlwZW9mIHRoaXMuYm9keT90aGlzLmJvZHk6dGhpcy5ib2R5IGluc3RhbmNlb2YgYTQ/dGhpcy5ib2R5LnRvU3RyaW5nKCk6Im9iamVjdCI9PXR5cGVvZiB0aGlzLmJvZHl8fCJib29s'@;
put 'ZWFuIj09dHlwZW9mIHRoaXMuYm9keXx8QXJyYXkuaXNBcnJheSh0aGlzLmJvZHkpP0pTT04uc3RyaW5naWZ5KHRoaXMuYm9keSk6dGhpcy5ib2R5LnRvU3RyaW5nKCl9ZGV0ZWN0Q29udGVudFR5cGVIZWFkZXIoKXtyZXR1cm4gbnVsbD09PXRoaXMuYm9keXx8ZmllKHRoaXMuYm9keSk/bnVs'@;
put 'bDpjaWUodGhpcy5ib2R5KT90aGlzLmJvZHkudHlwZXx8bnVsbDp1aWUodGhpcy5ib2R5KT9udWxsOiJzdHJpbmciPT10eXBlb2YgdGhpcy5ib2R5PyJ0ZXh0L3BsYWluIjp0aGlzLmJvZHkgaW5zdGFuY2VvZiBhND8iYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9'@;
put 'VVRGLTgiOiJvYmplY3QiPT10eXBlb2YgdGhpcy5ib2R5fHwibnVtYmVyIj09dHlwZW9mIHRoaXMuYm9keXx8ImJvb2xlYW4iPT10eXBlb2YgdGhpcy5ib2R5PyJhcHBsaWNhdGlvbi9qc29uIjpudWxsfWNsb25lKGM9e30pe2NvbnN0IGE9Yy5tZXRob2R8fHRoaXMubWV0aG9kLGY9Yy51cmx8'@;
put 'fHRoaXMudXJsLGQ9Yy5yZXNwb25zZVR5cGV8fHRoaXMucmVzcG9uc2VUeXBlLGg9dm9pZCAwIT09Yy5ib2R5P2MuYm9keTp0aGlzLmJvZHksbT12b2lkIDAhPT1jLndpdGhDcmVkZW50aWFscz9jLndpdGhDcmVkZW50aWFsczp0aGlzLndpdGhDcmVkZW50aWFscyxfPXZvaWQgMCE9PWMucmVw'@;
put 'b3J0UHJvZ3Jlc3M/Yy5yZXBvcnRQcm9ncmVzczp0aGlzLnJlcG9ydFByb2dyZXNzO2xldCBPPWMuaGVhZGVyc3x8dGhpcy5oZWFkZXJzLFg9Yy5wYXJhbXN8fHRoaXMucGFyYW1zO2NvbnN0IGFlPWMuY29udGV4dD8/dGhpcy5jb250ZXh0O3JldHVybiB2b2lkIDAhPT1jLnNldEhlYWRlcnMm'@;
put 'JihPPU9iamVjdC5rZXlzKGMuc2V0SGVhZGVycykucmVkdWNlKChwZSxiZSk9PnBlLnNldChiZSxjLnNldEhlYWRlcnNbYmVdKSxPKSksYy5zZXRQYXJhbXMmJihYPU9iamVjdC5rZXlzKGMuc2V0UGFyYW1zKS5yZWR1Y2UoKHBlLGJlKT0+cGUuc2V0KGJlLGMuc2V0UGFyYW1zW2JlXSksWCkp'@;
put 'LG5ldyBPQyhhLGYsaCx7cGFyYW1zOlgsaGVhZGVyczpPLGNvbnRleHQ6YWUscmVwb3J0UHJvZ3Jlc3M6XyxyZXNwb25zZVR5cGU6ZCx3aXRoQ3JlZGVudGlhbHM6bX0pfX12YXIgUnY9ZnVuY3Rpb24obCl7cmV0dXJuIGxbbC5TZW50PTBdPSJTZW50IixsW2wuVXBsb2FkUHJvZ3Jlc3M9MV09'@;
put 'IlVwbG9hZFByb2dyZXNzIixsW2wuUmVzcG9uc2VIZWFkZXI9Ml09IlJlc3BvbnNlSGVhZGVyIixsW2wuRG93bmxvYWRQcm9ncmVzcz0zXT0iRG93bmxvYWRQcm9ncmVzcyIsbFtsLlJlc3BvbnNlPTRdPSJSZXNwb25zZSIsbFtsLlVzZXI9NV09IlVzZXIiLGx9KFJ2fHx7fSk7Y2xhc3MgUWp7'@;
put 'Y29uc3RydWN0b3IoYyxhPTIwMCxmPSJPSyIpe3RoaXMuaGVhZGVycz1jLmhlYWRlcnN8fG5ldyBFaCx0aGlzLnN0YXR1cz12b2lkIDAhPT1jLnN0YXR1cz9jLnN0YXR1czphLHRoaXMuc3RhdHVzVGV4dD1jLnN0YXR1c1RleHR8fGYsdGhpcy51cmw9Yy51cmx8fG51bGwsdGhpcy5vaz10aGlz'@;
put 'LnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDB9fWNsYXNzIGV6IGV4dGVuZHMgUWp7Y29uc3RydWN0b3IoYz17fSl7c3VwZXIoYyksdGhpcy50eXBlPVJ2LlJlc3BvbnNlSGVhZGVyfWNsb25lKGM9e30pe3JldHVybiBuZXcgZXooe2hlYWRlcnM6Yy5oZWFkZXJzfHx0aGlzLmhlYWRlcnMs'@;
put 'c3RhdHVzOnZvaWQgMCE9PWMuc3RhdHVzP2Muc3RhdHVzOnRoaXMuc3RhdHVzLHN0YXR1c1RleHQ6Yy5zdGF0dXNUZXh0fHx0aGlzLnN0YXR1c1RleHQsdXJsOmMudXJsfHx0aGlzLnVybHx8dm9pZCAwfSl9fWNsYXNzIEx2IGV4dGVuZHMgUWp7Y29uc3RydWN0b3IoYz17fSl7c3VwZXIoYyks'@;
put 'dGhpcy50eXBlPVJ2LlJlc3BvbnNlLHRoaXMuYm9keT12b2lkIDAhPT1jLmJvZHk/Yy5ib2R5Om51bGx9Y2xvbmUoYz17fSl7cmV0dXJuIG5ldyBMdih7Ym9keTp2b2lkIDAhPT1jLmJvZHk/Yy5ib2R5OnRoaXMuYm9keSxoZWFkZXJzOmMuaGVhZGVyc3x8dGhpcy5oZWFkZXJzLHN0YXR1czp2'@;
put 'b2lkIDAhPT1jLnN0YXR1cz9jLnN0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0OmMuc3RhdHVzVGV4dHx8dGhpcy5zdGF0dXNUZXh0LHVybDpjLnVybHx8dGhpcy51cmx8fHZvaWQgMH0pfX1jbGFzcyBkaWUgZXh0ZW5kcyBRantjb25zdHJ1Y3RvcihjKXtzdXBlcihjLDAsIlVua25vd24g'@;
put 'RXJyb3IiKSx0aGlzLm5hbWU9Ikh0dHBFcnJvclJlc3BvbnNlIix0aGlzLm9rPSExLHRoaXMubWVzc2FnZT10aGlzLnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDA/YEh0dHAgZmFpbHVyZSBkdXJpbmcgcGFyc2luZyBmb3IgJHtjLnVybHx8Iih1bmtub3duIHVybCkifWA6YEh0dHAgZmFp'@;
put 'bHVyZSByZXNwb25zZSBmb3IgJHtjLnVybHx8Iih1bmtub3duIHVybCkifTogJHtjLnN0YXR1c30gJHtjLnN0YXR1c1RleHR9YCx0aGlzLmVycm9yPWMuZXJyb3J8fG51bGx9fWZ1bmN0aW9uIHR6KGwsYyl7cmV0dXJue2JvZHk6YyxoZWFkZXJzOmwuaGVhZGVycyxjb250ZXh0OmwuY29udGV4'@;
put 'dCxvYnNlcnZlOmwub2JzZXJ2ZSxwYXJhbXM6bC5wYXJhbXMscmVwb3J0UHJvZ3Jlc3M6bC5yZXBvcnRQcm9ncmVzcyxyZXNwb25zZVR5cGU6bC5yZXNwb25zZVR5cGUsd2l0aENyZWRlbnRpYWxzOmwud2l0aENyZWRlbnRpYWxzfX1sZXQgbno9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3Rvcihh'@;
put 'KXt0aGlzLmhhbmRsZXI9YX1yZXF1ZXN0KGEsZixkPXt9KXtsZXQgaDtpZihhIGluc3RhbmNlb2YgT0MpaD1hO2Vsc2V7bGV0IE8sWDtPPWQuaGVhZGVycyBpbnN0YW5jZW9mIEVoP2QuaGVhZGVyczpuZXcgRWgoZC5oZWFkZXJzKSxkLnBhcmFtcyYmKFg9ZC5wYXJhbXMgaW5zdGFuY2VvZiBh'@;
put 'ND9kLnBhcmFtczpuZXcgYTQoe2Zyb21PYmplY3Q6ZC5wYXJhbXN9KSksaD1uZXcgT0MoYSxmLHZvaWQgMCE9PWQuYm9keT9kLmJvZHk6bnVsbCx7aGVhZGVyczpPLGNvbnRleHQ6ZC5jb250ZXh0LHBhcmFtczpYLHJlcG9ydFByb2dyZXNzOmQucmVwb3J0UHJvZ3Jlc3MscmVzcG9uc2VUeXBl'@;
put 'OmQucmVzcG9uc2VUeXBlfHwianNvbiIsd2l0aENyZWRlbnRpYWxzOmQud2l0aENyZWRlbnRpYWxzfSl9Y29uc3QgbT1HaShoKS5waXBlKFN2KE89PnRoaXMuaGFuZGxlci5oYW5kbGUoTykpKTtpZihhIGluc3RhbmNlb2YgT0N8fCJldmVudHMiPT09ZC5vYnNlcnZlKXJldHVybiBtO2NvbnN0'@;
put 'IF89bS5waXBlKElsKE89Pk8gaW5zdGFuY2VvZiBMdikpO3N3aXRjaChkLm9ic2VydmV8fCJib2R5Iil7Y2FzZSJib2R5Ijpzd2l0Y2goaC5yZXNwb25zZVR5cGUpe2Nhc2UiYXJyYXlidWZmZXIiOnJldHVybiBfLnBpcGUoRWUoTz0+e2lmKG51bGwhPT1PLmJvZHkmJiEoTy5ib2R5IGluc3Rh'@;
put 'bmNlb2YgQXJyYXlCdWZmZXIpKXRocm93IG5ldyBFcnJvcigiUmVzcG9uc2UgaXMgbm90IGFuIEFycmF5QnVmZmVyLiIpO3JldHVybiBPLmJvZHl9KSk7Y2FzZSJibG9iIjpyZXR1cm4gXy5waXBlKEVlKE89PntpZihudWxsIT09Ty5ib2R5JiYhKE8uYm9keSBpbnN0YW5jZW9mIEJsb2IpKXRo'@;
put 'cm93IG5ldyBFcnJvcigiUmVzcG9uc2UgaXMgbm90IGEgQmxvYi4iKTtyZXR1cm4gTy5ib2R5fSkpO2Nhc2UidGV4dCI6cmV0dXJuIF8ucGlwZShFZShPPT57aWYobnVsbCE9PU8uYm9keSYmInN0cmluZyIhPXR5cGVvZiBPLmJvZHkpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBpcyBub3Qg'@;
put 'YSBzdHJpbmcuIik7cmV0dXJuIE8uYm9keX0pKTtkZWZhdWx0OnJldHVybiBfLnBpcGUoRWUoTz0+Ty5ib2R5KSl9Y2FzZSJyZXNwb25zZSI6cmV0dXJuIF87ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVucmVhY2hhYmxlOiB1bmhhbmRsZWQgb2JzZXJ2ZSB0eXBlICR7ZC5vYnNlcnZlfX1g'@;
put 'KX19ZGVsZXRlKGEsZj17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiREVMRVRFIixhLGYpfWdldChhLGY9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIkdFVCIsYSxmKX1oZWFkKGEsZj17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiSEVBRCIsYSxmKX1qc29ucChhLGYpe3JldHVybiB0aGlzLnJl'@;
put 'cXVlc3QoIkpTT05QIixhLHtwYXJhbXM6KG5ldyBhNCkuYXBwZW5kKGYsIkpTT05QX0NBTExCQUNLIiksb2JzZXJ2ZToiYm9keSIscmVzcG9uc2VUeXBlOiJqc29uIn0pfW9wdGlvbnMoYSxmPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJPUFRJT05TIixhLGYpfXBhdGNoKGEsZixkPXt9KXty'@;
put 'ZXR1cm4gdGhpcy5yZXF1ZXN0KCJQQVRDSCIsYSx0eihkLGYpKX1wb3N0KGEsZixkPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJQT1NUIixhLHR6KGQsZikpfXB1dChhLGYsZD17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiUFVUIixhLHR6KGQsZikpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVu'@;
put 'Y3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShzcihmRCkpfSxsLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmwsZmFjdG9yeTpsLlx1MDI3NWZhY30pLGx9KSgpO2Z1bmN0aW9uIG1pZShsLGMpe3JldHVybiBjKGwpfWZ1bmN0aW9uIGlDZShsLGMpe3JldHVybihhLGYpPT5jLmludGVyY2VwdChhLHto'@;
put 'YW5kbGU6ZD0+bChkLGYpfSl9Y29uc3QgYUNlPW5ldyBNaSgiIiksREM9bmV3IE1pKCIiKSxnaWU9bmV3IE1pKCIiKTtmdW5jdGlvbiBsQ2UoKXtsZXQgbD1udWxsO3JldHVybihjLGEpPT57bnVsbD09PWwmJihsPShIaShhQ2Use29wdGlvbmFsOiEwfSk/P1tdKS5yZWR1Y2VSaWdodChpQ2Us'@;
put 'bWllKSk7Y29uc3QgZj1IaSh4TyksZD1mLmFkZCgpO3JldHVybiBsKGMsYSkucGlwZShoQygoKT0+Zi5yZW1vdmUoZCkpKX19bGV0IHZpZT0oKCk9PntjbGFzcyBsIGV4dGVuZHMgZkR7Y29uc3RydWN0b3IoYSxmKXtzdXBlcigpLHRoaXMuYmFja2VuZD1hLHRoaXMuaW5qZWN0b3I9Zix0aGlz'@;
put 'LmNoYWluPW51bGwsdGhpcy5wZW5kaW5nVGFza3M9SGkoeE8pfWhhbmRsZShhKXtpZihudWxsPT09dGhpcy5jaGFpbil7Y29uc3QgZD1BcnJheS5mcm9tKG5ldyBTZXQoWy4uLnRoaXMuaW5qZWN0b3IuZ2V0KERDKSwuLi50aGlzLmluamVjdG9yLmdldChnaWUsW10pXSkpO3RoaXMuY2hhaW49'@;
put 'ZC5yZWR1Y2VSaWdodCgoaCxtKT0+ZnVuY3Rpb24gb0NlKGwsYyxhKXtyZXR1cm4oZixkKT0+YS5ydW5JbkNvbnRleHQoKCk9PmMoZixoPT5sKGgsZCkpKX0oaCxtLHRoaXMuaW5qZWN0b3IpLG1pZSl9Y29uc3QgZj10aGlzLnBlbmRpbmdUYXNrcy5hZGQoKTtyZXR1cm4gdGhpcy5jaGFpbihh'@;
put 'LGQ9PnRoaXMuYmFja2VuZC5oYW5kbGUoZCkpLnBpcGUoaEMoKCk9PnRoaXMucGVuZGluZ1Rhc2tzLnJlbW92ZShmKSkpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShzcihkRCksc3IodTEpKX0sbC5cdTAyNzVwcm92PWhyKHt0b2tlbjpsLGZhY3Rv'@;
put 'cnk6bC5cdTAyNzVmYWN9KSxsfSkoKTtjb25zdCBmQ2U9L15cKVxdXH0nLD9cbi87bGV0IGJpZT0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEpe3RoaXMueGhyRmFjdG9yeT1hfWhhbmRsZShhKXtpZigiSlNPTlAiPT09YS5tZXRob2QpdGhyb3cgbmV3IElyKC0yODAwLCExKTtjb25zdCBm'@;
put 'PXRoaXMueGhyRmFjdG9yeTtyZXR1cm4oZi5cdTAyNzVsb2FkSW1wbD9ubChmLlx1MDI3NWxvYWRJbXBsKCkpOkdpKG51bGwpKS5waXBlKGtsKCgpPT5uZXcgQmUoaD0+e2NvbnN0IG09Zi5idWlsZCgpO2lmKG0ub3BlbihhLm1ldGhvZCxhLnVybFdpdGhQYXJhbXMpLGEud2l0aENyZWRlbnRp'@;
put 'YWxzJiYobS53aXRoQ3JlZGVudGlhbHM9ITApLGEuaGVhZGVycy5mb3JFYWNoKChaZSxsdCk9Pm0uc2V0UmVxdWVzdEhlYWRlcihaZSxsdC5qb2luKCIsIikpKSxhLmhlYWRlcnMuaGFzKCJBY2NlcHQiKXx8bS5zZXRSZXF1ZXN0SGVhZGVyKCJBY2NlcHQiLCJhcHBsaWNhdGlvbi9qc29uLCB0'@;
put 'ZXh0L3BsYWluLCAqLyoiKSwhYS5oZWFkZXJzLmhhcygiQ29udGVudC1UeXBlIikpe2NvbnN0IFplPWEuZGV0ZWN0Q29udGVudFR5cGVIZWFkZXIoKTtudWxsIT09WmUmJm0uc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIixaZSl9aWYoYS5yZXNwb25zZVR5cGUpe2NvbnN0IFplPWEu'@;
put 'cmVzcG9uc2VUeXBlLnRvTG93ZXJDYXNlKCk7bS5yZXNwb25zZVR5cGU9Impzb24iIT09WmU/WmU6InRleHQifWNvbnN0IF89YS5zZXJpYWxpemVCb2R5KCk7bGV0IE89bnVsbDtjb25zdCBYPSgpPT57aWYobnVsbCE9PU8pcmV0dXJuIE87Y29uc3QgWmU9bS5zdGF0dXNUZXh0fHwiT0siLGx0'@;
put 'PW5ldyBFaChtLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSxkdD1mdW5jdGlvbiBkQ2UobCl7cmV0dXJuInJlc3BvbnNlVVJMImluIGwmJmwucmVzcG9uc2VVUkw/bC5yZXNwb25zZVVSTDovXlgtUmVxdWVzdC1VUkw6L20udGVzdChsLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKT9sLmdldFJl'@;
put 'c3BvbnNlSGVhZGVyKCJYLVJlcXVlc3QtVVJMIik6bnVsbH0obSl8fGEudXJsO3JldHVybiBPPW5ldyBleih7aGVhZGVyczpsdCxzdGF0dXM6bS5zdGF0dXMsc3RhdHVzVGV4dDpaZSx1cmw6ZHR9KSxPfSxhZT0oKT0+e2xldHtoZWFkZXJzOlplLHN0YXR1czpsdCxzdGF0dXNUZXh0OmR0LHVy'@;
put 'bDpndH09WCgpLGp0PW51bGw7MjA0IT09bHQmJihqdD10eXBlb2YgbS5yZXNwb25zZT4idSI/bS5yZXNwb25zZVRleHQ6bS5yZXNwb25zZSksMD09PWx0JiYobHQ9anQ/MjAwOjApO2xldCBybj1sdD49MjAwJiZsdDwzMDA7aWYoImpzb24iPT09YS5yZXNwb25zZVR5cGUmJiJzdHJpbmciPT10'@;
put 'eXBlb2YganQpe2NvbnN0IFh0PWp0O2p0PWp0LnJlcGxhY2UoZkNlLCIiKTt0cnl7anQ9IiIhPT1qdD9KU09OLnBhcnNlKGp0KTpudWxsfWNhdGNoKHluKXtqdD1YdCxybiYmKHJuPSExLGp0PXtlcnJvcjp5bix0ZXh0Omp0fSl9fXJuPyhoLm5leHQobmV3IEx2KHtib2R5Omp0LGhlYWRlcnM6'@;
put 'WmUsc3RhdHVzOmx0LHN0YXR1c1RleHQ6ZHQsdXJsOmd0fHx2b2lkIDB9KSksaC5jb21wbGV0ZSgpKTpoLmVycm9yKG5ldyBkaWUoe2Vycm9yOmp0LGhlYWRlcnM6WmUsc3RhdHVzOmx0LHN0YXR1c1RleHQ6ZHQsdXJsOmd0fHx2b2lkIDB9KSl9LHBlPVplPT57Y29uc3R7dXJsOmx0fT1YKCks'@;
put 'ZHQ9bmV3IGRpZSh7ZXJyb3I6WmUsc3RhdHVzOm0uc3RhdHVzfHwwLHN0YXR1c1RleHQ6bS5zdGF0dXNUZXh0fHwiVW5rbm93biBFcnJvciIsdXJsOmx0fHx2b2lkIDB9KTtoLmVycm9yKGR0KX07bGV0IGJlPSExO2NvbnN0IHhlPVplPT57YmV8fChoLm5leHQoWCgpKSxiZT0hMCk7bGV0IGx0'@;
put 'PXt0eXBlOlJ2LkRvd25sb2FkUHJvZ3Jlc3MsbG9hZGVkOlplLmxvYWRlZH07WmUubGVuZ3RoQ29tcHV0YWJsZSYmKGx0LnRvdGFsPVplLnRvdGFsKSwidGV4dCI9PT1hLnJlc3BvbnNlVHlwZSYmbS5yZXNwb25zZVRleHQmJihsdC5wYXJ0aWFsVGV4dD1tLnJlc3BvbnNlVGV4dCksaC5uZXh0'@;
put 'KGx0KX0sVmU9WmU9PntsZXQgbHQ9e3R5cGU6UnYuVXBsb2FkUHJvZ3Jlc3MsbG9hZGVkOlplLmxvYWRlZH07WmUubGVuZ3RoQ29tcHV0YWJsZSYmKGx0LnRvdGFsPVplLnRvdGFsKSxoLm5leHQobHQpfTtyZXR1cm4gbS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixhZSksbS5hZGRFdmVudExp'@;
put 'c3RlbmVyKCJlcnJvciIscGUpLG0uYWRkRXZlbnRMaXN0ZW5lcigidGltZW91dCIscGUpLG0uYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHBlKSxhLnJlcG9ydFByb2dyZXNzJiYobS5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIseGUpLG51bGwhPT1fJiZtLnVwbG9hZCYmbS51cGxvYWQu'@;
put 'YWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLFZlKSksbS5zZW5kKF8pLGgubmV4dCh7dHlwZTpSdi5TZW50fSksKCk9PnttLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixwZSksbS5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIscGUpLG0ucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9h'@;
put 'ZCIsYWUpLG0ucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGltZW91dCIscGUpLGEucmVwb3J0UHJvZ3Jlc3MmJihtLnJlbW92ZUV2ZW50TGlzdGVuZXIoInByb2dyZXNzIix4ZSksbnVsbCE9PV8mJm0udXBsb2FkJiZtLnVwbG9hZC5yZW1vdmVFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsVmUpKSxt'@;
put 'LnJlYWR5U3RhdGUhPT1tLkRPTkUmJm0uYWJvcnQoKX19KSkpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShzcihUbmUpKX0sbC5cdTAyNzVwcm92PWhyKHt0b2tlbjpsLGZhY3Rvcnk6bC5cdTAyNzVmYWN9KSxsfSkoKTtjb25zdCByej1uZXcgTWko'@;
put 'IlhTUkZfRU5BQkxFRCIpLF9pZT1uZXcgTWkoIlhTUkZfQ09PS0lFX05BTUUiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT4iWFNSRi1UT0tFTiJ9KSx3aWU9bmV3IE1pKCJYU1JGX0hFQURFUl9OQU1FIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+IlgtWFNSRi1UT0tF'@;
put 'TiJ9KTtjbGFzcyBDaWV7fWxldCBtQ2U9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhLGYsZCl7dGhpcy5kb2M9YSx0aGlzLnBsYXRmb3JtPWYsdGhpcy5jb29raWVOYW1lPWQsdGhpcy5sYXN0Q29va2llU3RyaW5nPSIiLHRoaXMubGFzdFRva2VuPW51bGwsdGhpcy5wYXJzZUNvdW50PTB9'@;
put 'Z2V0VG9rZW4oKXtpZigic2VydmVyIj09PXRoaXMucGxhdGZvcm0pcmV0dXJuIG51bGw7Y29uc3QgYT10aGlzLmRvYy5jb29raWV8fCIiO3JldHVybiBhIT09dGhpcy5sYXN0Q29va2llU3RyaW5nJiYodGhpcy5wYXJzZUNvdW50KyssdGhpcy5sYXN0VG9rZW49dm5lKGEsdGhpcy5jb29raWVO'@;
put 'YW1lKSx0aGlzLmxhc3RDb29raWVTdHJpbmc9YSksdGhpcy5sYXN0VG9rZW59fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHNyKEZhKSxzcihxYSksc3IoX2llKSl9LGwuXHUwMjc1cHJvdj1ocih7dG9rZW46bCxmYWN0b3J5OmwuXHUwMjc1ZmFjfSks'@;
put 'bH0pKCk7ZnVuY3Rpb24gZ0NlKGwsYyl7Y29uc3QgYT1sLnVybC50b0xvd2VyQ2FzZSgpO2lmKCFIaShyeil8fCJHRVQiPT09bC5tZXRob2R8fCJIRUFEIj09PWwubWV0aG9kfHxhLnN0YXJ0c1dpdGgoImh0dHA6Ly8iKXx8YS5zdGFydHNXaXRoKCJodHRwczovLyIpKXJldHVybiBjKGwpO2Nv'@;
put 'bnN0IGY9SGkoQ2llKS5nZXRUb2tlbigpLGQ9SGkod2llKTtyZXR1cm4gbnVsbCE9ZiYmIWwuaGVhZGVycy5oYXMoZCkmJihsPWwuY2xvbmUoe2hlYWRlcnM6bC5oZWFkZXJzLnNldChkLGYpfSkpLGMobCl9dmFyIGw0PWZ1bmN0aW9uKGwpe3JldHVybiBsW2wuSW50ZXJjZXB0b3JzPTBdPSJJ'@;
put 'bnRlcmNlcHRvcnMiLGxbbC5MZWdhY3lJbnRlcmNlcHRvcnM9MV09IkxlZ2FjeUludGVyY2VwdG9ycyIsbFtsLkN1c3RvbVhzcmZDb25maWd1cmF0aW9uPTJdPSJDdXN0b21Yc3JmQ29uZmlndXJhdGlvbiIsbFtsLk5vWHNyZlByb3RlY3Rpb249M109Ik5vWHNyZlByb3RlY3Rpb24iLGxbbC5K'@;
put 'c29ucFN1cHBvcnQ9NF09Ikpzb25wU3VwcG9ydCIsbFtsLlJlcXVlc3RzTWFkZVZpYVBhcmVudD01XT0iUmVxdWVzdHNNYWRlVmlhUGFyZW50IixsW2wuRmV0Y2g9Nl09IkZldGNoIixsfShsNHx8e30pO2Z1bmN0aW9uIEFnKGwsYyl7cmV0dXJue1x1MDI3NWtpbmQ6bCxcdTAyNzVwcm92aWRl'@;
put 'cnM6Y319ZnVuY3Rpb24gdkNlKC4uLmwpe2NvbnN0IGM9W256LGJpZSx2aWUse3Byb3ZpZGU6ZkQsdXNlRXhpc3Rpbmc6dmllfSx7cHJvdmlkZTpkRCx1c2VFeGlzdGluZzpiaWV9LHtwcm92aWRlOkRDLHVzZVZhbHVlOmdDZSxtdWx0aTohMH0se3Byb3ZpZGU6cnosdXNlVmFsdWU6ITB9LHtw'@;
put 'cm92aWRlOkNpZSx1c2VDbGFzczptQ2V9XTtmb3IoY29uc3QgYSBvZiBsKWMucHVzaCguLi5hLlx1MDI3NXByb3ZpZGVycyk7cmV0dXJuIGZ1bmN0aW9uIEJfKGwpe3JldHVybntcdTAyNzVwcm92aWRlcnM6bH19KGMpfWNvbnN0IFNpZT1uZXcgTWkoIkxFR0FDWV9JTlRFUkNFUFRPUl9GTiIp'@;
put 'O2xldCBiQ2U9KCgpPT57Y2xhc3MgbHt9cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1bW9kPURpKHt0eXBlOmx9KSxsLlx1MDI3NWluaj14aSh7cHJvdmlkZXJzOlt2Q2UoQWcobDQuTGVnYWN5SW50ZXJjZXB0b3JzLFt7cHJvdmlkZTpT'@;
put 'aWUsdXNlRmFjdG9yeTpsQ2V9LHtwcm92aWRlOkRDLHVzZUV4aXN0aW5nOlNpZSxtdWx0aTohMH1dKSldfSksbH0pKCksTWllPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmKXt0aGlzLmh0dHA9YSx0aGlzLmFwcFN0b3JlU2VydmljZT1mLHRoaXMudXJsPSIiLHRoaXMuZHJpdmVVcmw9'@;
put 'IiIsdGhpcy5odHRwT3B0aW9ucz17d2l0aENyZWRlbnRpYWxzOiEwfX1zZXR1cCgpe2NvbnN0IGE9dGhpcy5hcHBTdG9yZVNlcnZpY2UuZ2V0RGNBZGFwdGVyU2V0dGluZ3MoKTt0aGlzLnVybD1gJHthPy5zZXJ2ZXJVcmx8fCIifS9TQVNqc0FwaWAsdGhpcy5kcml2ZVVybD1gJHt0aGlzLnVy'@;
put 'bH0vZHJpdmVgfWdldFNlcnZlckluZm8oKXtyZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLnVybH0vaW5mb2ApfWdldEZpbGVGcm9tRHJpdmUoYSl7cmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5kcml2ZVVybH0vZmlsZS8/X2ZpbGVQYXRoPSR7YX1gLHRoaXMuaHR0cE9wdGlvbnMp'@;
put 'fWdldEZvbGRlckNvbnRlbnRzRnJvbURyaXZlKGEpe3JldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuZHJpdmVVcmx9L2ZvbGRlcj9fZm9sZGVyUGF0aD0ke2F9YCx0aGlzLmh0dHBPcHRpb25zKX1nZXRGaWxlVHJlZUZyb21Ecml2ZSgpe3JldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMu'@;
put 'ZHJpdmVVcmx9L2ZpbGV0cmVlYCx0aGlzLmh0dHBPcHRpb25zKX1nZXRGaWxlRnJvbUZpbGVUcmVlKGEpe3JldHVybiBuZXcgUHJvbWlzZSgoZixkKT0+e3RoaXMuZ2V0RmlsZVRyZWVGcm9tRHJpdmUoKS5zdWJzY3JpYmUoaD0+e2NvbnN0IF89dGhpcy5maW5kSW5UcmVlKGgudHJlZSxhKTtm'@;
put 'KF8pfSl9KX1maW5kSW5UcmVlKGEsZil7aWYoYS5yZWxhdGl2ZVBhdGg9PT1mKXJldHVybiBhO2ZvcihsZXQgZCBvZiBhLmNoaWxkcmVuKXtjb25zdCBoPXRoaXMuZmluZEluVHJlZShkLGYpO2lmKGgpcmV0dXJuIGh9fX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5l'@;
put 'dyhhfHxsKShzcihueiksc3IoSXYpKX0sbC5cdTAyNzVwcm92PWhyKHt0b2tlbjpsLGZhY3Rvcnk6bC5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxsfSkoKSxwbD0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEsZixkLGgsbSxfKXt0aGlzLmFwcFN0b3JlU2VydmljZT1hLHRoaXMu'@;
put 'dXNlclNlcnZpY2U9Zix0aGlzLmV2ZW50U2VydmljZT1kLHRoaXMuc2FzanNTZXJ2aWNlPWgsdGhpcy5sb2dnZXJTZXJ2aWNlPW0sdGhpcy5yb3V0ZXI9Xyx0aGlzLmxvYWRTdGFydHVwU2VydmljZUVtaXR0ZXI9bmV3IHhyLHRoaXMuaW5jb3JyZWN0U2l0ZUlkRW1pdHRlcj1uZXcgeHIsdGhp'@;
put 'cy5yZXF1ZXN0U2l0ZUlkRW1pdHRlcj1uZXcgeHIsdGhpcy5zYXNqc0FkYXB0ZXI9bmV3KGxpZSgpKSx0aGlzLmFwcExvY0NoZWNrUGVuZGluZz0hMSx0aGlzLnNob3VsZExvZ2luPW5ldyBPZSghMSksdGhpcy5saWNlbnNlX3NpdGVfaWQ9bmV3IE9lKG51bGwpfXNhc1NlcnZpY2VJbml0KCl7'@;
put 'aWYodGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz10aGlzLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpLHRoaXMuc2FzanNTZXJ2aWNlLnNldHVwKCksdGhpcy5kY0FkYXB0ZXJTZXR0aW5ncyl7c3dpdGNoKHRoaXMuc2FzanNBZGFwdGVyPW5ldyhsaWUoKSkodGhpcy5kY0Fk'@;
put 'YXB0ZXJTZXR0aW5ncyksdGhpcy5kY0FkYXB0ZXJTZXR0aW5ncy5zZXJ2ZXJUeXBlKXtjYXNlIFh1LkQuU2FzVml5YTp0aGlzLmNoZWNrVml5YURlcGxveSh0aGlzLmRjQWRhcHRlclNldHRpbmdzLmFwcExvY3x8IiIpO2JyZWFrO2Nhc2UgWHUuRC5TYXM5OnRoaXMubG9hZFN0YXJ0dXBTZXJ2'@;
put 'aWNlRW1pdHRlci5lbWl0KCk7YnJlYWs7Y2FzZSBYdS5ELlNhc2pzOnRoaXMuY2hlY2tTYXNqc0RlcGxveSgpfSJSZWRpcmVjdGVkIj09PXRoaXMuZ2V0U2FzanNDb25maWcoKS5sb2dpbk1lY2hhbmlzbSYmdGhpcy5zaG91bGRMb2dpbi5zdWJzY3JpYmUoYT0+e2EmJnRoaXMuc2FzanNBZGFw'@;
put 'dGVyLmxvZ0luKCkudGhlbihmPT57Y29uc29sZS5sb2coInJlcyIsZil9KX0pfWVsc2UgdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRXJyb3IiLCJBZGFwdGVyIHNldHRpbmdzIChpbmRleC5odG1sKSBhcmUgbm90IHByZXNlbnQuIil9cmVxdWVzdChhLGYsZCxoKXtyZXR1cm4g'@;
put 'aHx8KGg9e30pLHRoaXMubG9nZ2VyU2VydmljZS5sb2dSZXF1ZXN0RGF0YShhPSJzZXJ2aWNlcy8iK2EsZiksbmV3IFByb21pc2UoKG0sXyk9Pnt0aGlzLnNhc2pzQWRhcHRlci5yZXF1ZXN0KGEsZixkLCgpPT57dGhpcy5zaG91bGRMb2dpbi5uZXh0KCEwKX0pLnRoZW4oTz0+e2lmKCExPT09'@;
put 'Ty5sb2dpbiYmKHRoaXMuc2hvdWxkTG9naW4ubmV4dCghMCksXyghMSkpLCF0aGlzLnVzZXJTZXJ2aWNlLnVzZXImJk8uTUZfR0VUVVNFUiYmKHRoaXMudXNlclNlcnZpY2UudXNlcj17dXNlcm5hbWU6Ty5NRl9HRVRVU0VSfSksTy5TWVNTSVRFJiYodGhpcy5yZXF1ZXN0U2l0ZUlkRW1pdHRl'@;
put 'ci5lbWl0KE8uU1lTU0lURSksdGhpcy5nZXRMaWNlbnNlU2l0ZUlkKCkubGVuZ3RoPjAmJih0aGlzLmdldExpY2Vuc2VTaXRlSWQoKS5pbmNsdWRlcyhPLlNZU1NJVEUpfHx0aGlzLmluY29ycmVjdFNpdGVJZEVtaXR0ZXIuZW1pdChPLlNZU1NJVEUpKSksNDA0PT09Ty5zdGF0dXMmJl8oe01F'@;
put 'U1NBR0U6Ty5ib2R5fHwiU0FTIFJlc3BvbmRlZCB3aXRoIGVycm9yIn0pLHR5cGVvZiBPLnNhc2pzQWJvcnQ8InUiKXtjb25zdCBYPU8sYWU9WC5zYXNqc0Fib3J0WzBdLk1TRyxwZT1YLnNhc2pzQWJvcnRbMF0uTUFDO2lmKGFlLmluY2x1ZGVzKCJEYXRhX0NvbnRyb2xsZXJfU2V0dGluZ3Mo'@;
put 'U3RvcmVkUHJvY2Vzcykgbm90IGZvdW5kIikpcmV0dXJuIHRoaXMuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2RlcGxveSIpLHZvaWQgXyh7ZXJyb3I6YWV9KTtoPy5zdXBwcmVzc1N1Y2Nlc3NBYm9ydE1vZGFsfHx0aGlzLmV2'@;
put 'ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChhLnJlcGxhY2UoInNlcnZpY2VzLyIsIiIpLGFlLHtTWVNXQVJOSU5HVEVYVDpYLlNZU1dBUk5JTkdURVhULFNZU0VSUk9SVEVYVDpYLlNZU0VSUk9SVEVYVCxNQUM6cGV9KSxfKHtlcnJvcjphZX0pfW0oTyl9LE89PntpZihjb25zb2xlLmVycm9y'@;
put 'KE8pLE8uZXJyb3Ipe2xldCBhZSxYPU8uZXJyb3IubWVzc2FnZTtPLmVycm9yLmRldGFpbHMmJk8uZXJyb3IuZGV0YWlscy5sb2cmJihhZT1PLmVycm9yLmRldGFpbHMubG9nKSwoIVh8fFgudHJpbSgpLmxlbmd0aDwxKSYmKFg9IlNBUyBTZXJ2aWNlIGVycm9yIG9jdXJyZWQiKSxoPy5zdXBw'@;
put 'cmVzc0Vycm9yQWJvcnRNb2RhbHx8dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwoYSxYLHtMT0c6YWV9LCJSZXF1ZXN0IGVycm9yIiksXyh7ZXJyb3I6WH0pfV8oTyl9KX0pfXVwbG9hZEZpbGUoYSxmLGQpe3JldHVybiB0aGlzLnNhc2pzQWRhcHRlci51cGxvYWRGaWxlKGEsZixk'@;
put 'KX1sb2dpbihhLGYpe3ZhciBkPXRoaXM7cmV0dXJuIHlpKGZ1bmN0aW9uKigpe2NvbnN0IGg9ZC5nZXRTZXJ2ZXJUeXBlKCk9PT1YdS5ELlNhc2pzPyJjbGllbnRJRDEiOnZvaWQgMDtyZXR1cm4gZC5zYXNqc0FkYXB0ZXIubG9nSW4oYSxmLGgpLnRoZW4obT0+KG0uaXNMb2dnZWRJbiYmKGQu'@;
put 'dXNlclNlcnZpY2UudXNlcj17dXNlcm5hbWU6bS51c2VyTmFtZX0sZC5hcHBMb2NDaGVja1BlbmRpbmcmJihkLmNoZWNrVml5YURlcGxveShkLmRjQWRhcHRlclNldHRpbmdzPy5hcHBMb2N8fCIiKSxkLmFwcExvY0NoZWNrUGVuZGluZz0hMSkpLGQuc2hvdWxkTG9naW4ubmV4dCghbS5pc0xv'@;
put 'Z2dlZEluKSxtLmlzTG9nZ2VkSW4pLG09Pihjb25zb2xlLmVycm9yKG0pLGQuc2hvdWxkTG9naW4ubmV4dCghMCksITEpKS5jYXRjaChtPT4oNDAzPT09bSYmY29uc29sZS5lcnJvcigiSW52YWxpZCBob3N0IiksITEpKX0pKCl9Z2V0TGljZW5zZVNpdGVJZCgpe3JldHVybiB0aGlzLmxpY2Vu'@;
put 'c2Vfc2l0ZV9pZC52YWx1ZXx8W119c2V0TGljZW5zZVNpdGVJZChhKXt0aGlzLmxpY2Vuc2Vfc2l0ZV9pZC5uZXh0KCJvYmplY3QiPT10eXBlb2YgYT9hOlthXSl9Y2hlY2tTYXNqc0RlcGxveSgpe3ZhciBhPXRoaXM7cmV0dXJuIHlpKGZ1bmN0aW9uKigpe2NvbnN0IGQ9YCR7YS5nZXRTYXNq'@;
put 'c0NvbmZpZygpLmFwcExvY30vc2VydmljZXMvYWRtaW5gO2Euc2FzanNTZXJ2aWNlLmdldEZvbGRlckNvbnRlbnRzRnJvbURyaXZlKGQpLnN1YnNjcmliZShoPT57aC5maWxlcy5pbmNsdWRlcygibWFrZWRhdGEuc2FzIik/KGEuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksYS5y'@;
put 'b3V0ZXIubmF2aWdhdGVCeVVybCgiL2RlcGxveSIpKTooYS5sb2FkU3RhcnR1cFNlcnZpY2VFbWl0dGVyLmVtaXQoKSxhLnJvdXRlci51cmwuaW5jbHVkZXMoImRlcGxveSIpJiZhLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvIikpfSxoPT57aC5lcnJvci5pbmNsdWRlcygiVW5hdXRob3JpemVk'@;
put 'Iik/KGEuc2hvdWxkTG9naW4ubmV4dCghMCksYS5zaG91bGRMb2dpbi5zdWJzY3JpYmUobT0+eyExPT09bSYmbG9jYXRpb24ucmVsb2FkKCl9KSk6aC5lcnJvci5pbmNsdWRlcygiRm9sZGVyIGRvZXNuJ3QgZXhpc3QuIikmJihjb25zb2xlLndhcm4oIlNBU2pzIFNBUyBzZXJ2aWNlcyBhcmUg'@;
put 'bm90IHByZXNlbnQgb24gdGhlIGN1cnJlbnQgYXBwTG9jLiIpLGEuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksYS5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2RlcGxveSIpKX0pfSkoKX1zYXNqc01ha2VkYXRhQ2hlY2tpbmcoKXt2YXIgYT10aGlzO3JldHVybiB5aShmdW5jdGlv'@;
put 'biooKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oKXt2YXIgZj15aShmdW5jdGlvbiooZCxoKXthLmNoZWNraW5nSW50ZXJ2YWw9c2V0SW50ZXJ2YWwoeWkoZnVuY3Rpb24qKCl7YS5zYXNqc01ha2VkYXRhU3VjY2Vzc2Z1bGwoKS50aGVuKG09PnttJiYoY2xlYXJJbnRlcnZhbChhLmNo'@;
put 'ZWNraW5nSW50ZXJ2YWwpLGQobSkpfSkuY2F0Y2gobT0+e2NsZWFySW50ZXJ2YWwoYS5jaGVja2luZ0ludGVydmFsKSxoKG0pfSl9KSwxZTMpfSk7cmV0dXJuIGZ1bmN0aW9uKGQsaCl7cmV0dXJuIGYuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSl9KSgpfXNhc2pzTWFrZWRhdGFTdWNjZXNz'@;
put 'ZnVsbCgpe3ZhciBhPXRoaXM7cmV0dXJuIHlpKGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgoZixkKT0+e2NvbnN0IG09YCR7YS5nZXRTYXNqc0NvbmZpZygpLmFwcExvY30vc2VydmljZXMvYWRtaW5gO2Euc2FzanNTZXJ2aWNlLmdldEZvbGRlckNvbnRlbnRzRnJvbURyaXZlKG0p'@;
put 'LnN1YnNjcmliZShfPT57Xy5maWxlcy5pbmNsdWRlcygibWFrZWRhdGEuc2FzIik/ZighMSk6ZighMCl9LF89PntfLmVycm9yLmluY2x1ZGVzKCJGb2xkZXIgZG9lc24ndCBleGlzdC4iKSYmZCgpfSl9KX0pKCl9Y2hlY2tWaXlhRGVwbG95KGEpe3ZhciBmPXRoaXM7cmV0dXJuIHlpKGZ1bmN0'@;
put 'aW9uKigpe2xldCBoPSExO2g9dHlwZW9mIGYuc2FzanNBZGFwdGVyLmdldEZvbGRlcjwidSI/eWllbGQgZi5hcHBMb2NDaGVjayhhKTp5aWVsZCBmLmFwcExvY0NoZWNrUHJlQXhpb3NkQWRhcHRlcihhKSxoJiZmLmxvYWRTdGFydHVwU2VydmljZUVtaXR0ZXIuZW1pdCgpfSkoKX1hcHBMb2ND'@;
put 'aGVjayhhKXt2YXIgZj10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbigpe3ZhciBkPXlpKGZ1bmN0aW9uKihoLG0pe2xldCBPLF89ITE7dHJ5e089eWllbGQgZi5zYXNqc0FkYXB0ZXIuZ2V0Rm9sZGVyKGEpfWNhdGNoKFgpeyJMb2dpblJlcXVpcmVkRXJyb3IiPT09WC5uYW1lPyhm'@;
put 'LmFwcExvY0NoZWNrUGVuZGluZz0hMCxmLnNob3VsZExvZ2luLm5leHQoITApLGgoITEpKTpfPSEwfWlmKF8pcmV0dXJuIGNvbnNvbGUud2FybigiVml5YSBzZXJ2aWNlcyBhcmUgbm90IHByZXNlbnQgb24gdGhlIGN1cnJlbnQgYXBwTG9jLiIpLGYuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRh'@;
put 'TG9hZGVkKCksZi5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2RlcGxveSIpLGgoITEpO2goITApfSk7cmV0dXJuIGZ1bmN0aW9uKGgsbSl7cmV0dXJuIGQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSl9YXBwTG9jQ2hlY2tQcmVBeGlvc2RBZGFwdGVyKGEpe3JldHVybiBuZXcgUHJvbWlzZSgo'@;
put 'ZixkKT0+e2xldCBtPSExO3JldHVybiBmZXRjaChgL2ZvbGRlcnMvZm9sZGVycy9AaXRlbT9wYXRoPSR7YX1gKS50aGVuKF89Pig0MDQ9PT1fLnN0YXR1cyYmKG09ITApLF8udGV4dCgpKSkudGhlbihfPT57aWYodGhpcy5pc0xvZ2luUmVxdWlyZWQoXykpdGhpcy5hcHBMb2NDaGVja1BlbmRp'@;
put 'bmc9ITAsdGhpcy5zaG91bGRMb2dpbi5uZXh0KCEwKTtlbHNle2lmKG0pcmV0dXJuIGNvbnNvbGUud2FybigiVml5YSBzZXJ2aWNlcyBhcmUgbm90IHByZXNlbnQgb24gdGhlIGN1cnJlbnQgYXBwTG9jLiIpLHRoaXMuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksdGhpcy5yb3V0'@;
put 'ZXIubmF2aWdhdGVCeVVybCgiL2RlcGxveSIpLGYoITEpO2xldCBPPW51bGw7dHJ5e089SlNPTi5wYXJzZShfKX1jYXRjaHt9aWYoTyYmTy5odHRwU3RhdHVzQ29kZSYmNDA0PT09Ty5odHRwU3RhdHVzQ29kZSlyZXR1cm4gY29uc29sZS53YXJuKCJWaXlhIHNlcnZpY2VzIGFyZSBub3QgcHJl'@;
put 'c2VudCBvbiB0aGUgY3VycmVudCBhcHBMb2MuIiksdGhpcy5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQoKSx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZGVwbG95IiksZighMSk7ZighMCl9fSkuY2F0Y2goXz0+e2YoITEpfSl9KX1pc0xvZ2luUmVxdWlyZWQoYSl7cmV0dXJu'@;
put 'Lzxmb3JtLithY3Rpb249IiguKkxvZ29uW14iXSopLio+L2dtLnRlc3QoYSl9bG9nb3V0KCl7dGhpcy5zYXNqc0FkYXB0ZXIubG9nT3V0KCkudGhlbigoKT0+e2xvY2F0aW9uLnJlbG9hZCgpfSl9Z2V0U2FzanNDb25maWcoKXtyZXR1cm4gdGhpcy5zYXNqc0FkYXB0ZXIuZ2V0U2FzanNDb25m'@;
put 'aWcoKX1nZXRTYXNSZXF1ZXN0cygpe3JldHVybiB0aGlzLnNhc2pzQWRhcHRlci5nZXRTYXNSZXF1ZXN0cygpfXNldERlYnVnU3RhdGUoYSl7dGhpcy5zYXNqc0FkYXB0ZXIuc2V0RGVidWdTdGF0ZShhKX1nZXRTYXNqc0luc3RhbmNlKCl7cmV0dXJuIHRoaXMuc2FzanNBZGFwdGVyfWdldFNl'@;
put 'cnZlclR5cGUoKXtjb25zdCBhPXRoaXMuc2FzanNBZGFwdGVyLmdldFNhc2pzQ29uZmlnKCk7cmV0dXJuIGEuc2VydmVyVHlwZT9hLnNlcnZlclR5cGU6IlNBU1ZJWUEifWdldEV4ZWN1dGlvblBhdGgoKXtjb25zdCBhPXRoaXMuc2FzanNBZGFwdGVyLmdldFNhc2pzQ29uZmlnKCk7c3dpdGNo'@;
put 'KGEuc2VydmVyVHlwZSl7Y2FzZSBYdS5ELlNhc1ZpeWE6cmV0dXJuIGEucGF0aFNBU1ZpeWE7Y2FzZSBYdS5ELlNhczk6cmV0dXJuIGEucGF0aFNBUzk7Y2FzZSBYdS5ELlNhc2pzOnJldHVybiBhLnBhdGhTQVNKU319fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3'@;
put 'KGF8fGwpKHNyKEl2KSxzcihYaiksc3IoUnMpLHNyKE1pZSksc3IoeTEpLHNyKExhKSl9LGwuXHUwMjc1cHJvdj1ocih7dG9rZW46bCxmYWN0b3J5OmwuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbH0pKCkseTE9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhKXt0aGlzLmluamVj'@;
put 'dG9yPWF9bG9nKGEsZil7dGhpcy5pbmplY3RTYXNTZXJ2aWNlKCksdGhpcy5zYXNqc0NvbmZpZz8uZGVidWcmJihmP2NvbnNvbGUubG9nKGEsZik6Y29uc29sZS5sb2coYSkpfWVycm9yKGEsZil7Y29uc29sZS5lcnJvcihhLGYpfWxvZ1JlcXVlc3REYXRhKGEsZil7aWYodGhpcy5sb2coIi0t'@;
put 'LSBBZGFwdGVyIFJlcXVlc3QgSW5wdXQgLS0tIiksdGhpcy5sb2coYSksZil7Zm9yKGxldCBkIG9mIE9iamVjdC5rZXlzKGYpKXRoaXMubG9nKGQsZltkXSk7dGhpcy5sb2coIi0tLS0tLSIpfWVsc2UgdGhpcy5sb2coIm5vIGRhdGEgc2VudCIpfWluamVjdFNhc1NlcnZpY2UoKXtpZighdGhp'@;
put 'cy5zYXNqc0NvbmZpZyl7Y29uc3QgYT10aGlzLmluamVjdG9yLmdldChwbCk7dGhpcy5zYXNqc0NvbmZpZz1hLmdldFNhc2pzQ29uZmlnKCl9fX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShzcihBbCkpfSxsLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmws'@;
put 'ZmFjdG9yeTpsLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGx9KSgpO2NvbnN0IGtpZT1mdW5jdGlvbiB4Q2UobCxjKXtyZXR1cm4gbD09PWN8fGwhPWwmJmMhPWN9LG1EPWZ1bmN0aW9uIEFDZShsLGMpe2Zvcih2YXIgYT1sLmxlbmd0aDthLS07KWlmKGtpZShsW2FdWzBdLGMpKXJl'@;
put 'dHVybiBhO3JldHVybi0xfTt2YXIgT0NlPUFycmF5LnByb3RvdHlwZS5zcGxpY2U7ZnVuY3Rpb24gUHYobCl7dmFyIGM9LTEsYT1udWxsPT1sPzA6bC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2M8YTspe3ZhciBmPWxbY107dGhpcy5zZXQoZlswXSxmWzFdKX19UHYucHJvdG90eXBlLmNs'@;
put 'ZWFyPWZ1bmN0aW9uIGtDZSgpe3RoaXMuX19kYXRhX189W10sdGhpcy5zaXplPTB9LFB2LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24gRENlKGwpe3ZhciBjPXRoaXMuX19kYXRhX18sYT1tRChjLGwpO3JldHVybiEoYTwwfHwoYT09Yy5sZW5ndGgtMT9jLnBvcCgpOk9DZS5jYWxsKGMsYSwx'@;
put 'KSwtLXRoaXMuc2l6ZSwwKSl9LFB2LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24gUkNlKGwpe3ZhciBjPXRoaXMuX19kYXRhX18sYT1tRChjLGwpO3JldHVybiBhPDA/dm9pZCAwOmNbYV1bMV19LFB2LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gUENlKGwpe3JldHVybiBtRCh0aGlzLl9fZGF0YV9f'@;
put 'LGwpPi0xfSxQdi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uIEhDZShsLGMpe3ZhciBhPXRoaXMuX19kYXRhX18sZj1tRChhLGwpO3JldHVybiBmPDA/KCsrdGhpcy5zaXplLGEucHVzaChbbCxjXSkpOmFbZl1bMV09Yyx0aGlzfTtjb25zdCBnRD1QdixFaWU9Im9iamVjdCI9PXR5cGVvZiBnbG9i'@;
put 'YWwmJmdsb2JhbCYmZ2xvYmFsLk9iamVjdD09PU9iamVjdCYmZ2xvYmFsO3ZhciAkQ2U9Im9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZjtjb25zdCB4aD1FaWV8fCRDZXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSxzND14aC5TeW1ib2w7'@;
put 'dmFyIHhpZT1PYmplY3QucHJvdG90eXBlLFhDZT14aWUuaGFzT3duUHJvcGVydHksSkNlPXhpZS50b1N0cmluZyxJQz1zND9zNC50b1N0cmluZ1RhZzp2b2lkIDA7dmFyIG5TZT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO3ZhciBBaWU9czQ/czQudG9TdHJpbmdUYWc6dm9pZCAwO2NvbnN0'@;
put 'IEZ2PWZ1bmN0aW9uIGxTZShsKXtyZXR1cm4gbnVsbD09bD92b2lkIDA9PT1sPyJbb2JqZWN0IFVuZGVmaW5lZF0iOiJbb2JqZWN0IE51bGxdIjpBaWUmJkFpZSBpbiBPYmplY3QobCk/ZnVuY3Rpb24gUUNlKGwpe3ZhciBjPVhDZS5jYWxsKGwsSUMpLGE9bFtJQ107dHJ5e2xbSUNdPXZvaWQg'@;
put 'MDt2YXIgZj0hMH1jYXRjaHt9dmFyIGQ9SkNlLmNhbGwobCk7cmV0dXJuIGYmJihjP2xbSUNdPWE6ZGVsZXRlIGxbSUNdKSxkfShsKTpmdW5jdGlvbiByU2UobCl7cmV0dXJuIG5TZS5jYWxsKGwpfShsKX0sUkM9ZnVuY3Rpb24gc1NlKGwpe3ZhciBjPXR5cGVvZiBsO3JldHVybiBudWxsIT1s'@;
put 'JiYoIm9iamVjdCI9PWN8fCJmdW5jdGlvbiI9PWMpfSxUaWU9ZnVuY3Rpb24gaFNlKGwpe2lmKCFSQyhsKSlyZXR1cm4hMTt2YXIgYz1GdihsKTtyZXR1cm4iW29iamVjdCBGdW5jdGlvbl0iPT1jfHwiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iPT1jfHwiW29iamVjdCBBc3luY0Z1bmN0'@;
put 'aW9uXSI9PWN8fCJbb2JqZWN0IFByb3h5XSI9PWN9O3ZhciBsLHBTZT14aFsiX19jb3JlLWpzX3NoYXJlZF9fIl0sT2llPShsPS9bXi5dKyQvLmV4ZWMocFNlJiZwU2Uua2V5cyYmcFNlLmtleXMuSUVfUFJPVE98fCIiKSk/IlN5bWJvbChzcmMpXzEuIitsOiIiO3ZhciB5U2U9RnVuY3Rpb24u'@;
put 'cHJvdG90eXBlLnRvU3RyaW5nO2NvbnN0IFRnPWZ1bmN0aW9uIGJTZShsKXtpZihudWxsIT1sKXt0cnl7cmV0dXJuIHlTZS5jYWxsKGwpfWNhdGNoe310cnl7cmV0dXJuIGwrIiJ9Y2F0Y2h7fX1yZXR1cm4iIn07dmFyIHdTZT0vXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyxFU2U9UmVn'@;
put 'RXhwKCJeIitGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KS5yZXBsYWNlKC9bXFxeJC4qKz8oKVtcXXt9fF0vZywiXFwkJiIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4r'@;
put 'Pyg/PVxcXF0pL2csIiQxLio/IikrIiQiKTtjb25zdCBBU2U9ZnVuY3Rpb24geFNlKGwpe3JldHVybiEoIVJDKGwpfHxmdW5jdGlvbiBtU2UobCl7cmV0dXJuISFPaWUmJk9pZSBpbiBsfShsKSkmJihUaWUobCk/RVNlOndTZSkudGVzdChUZyhsKSl9LE9nPWZ1bmN0aW9uIERTZShsLGMpe3Zh'@;
put 'ciBhPWZ1bmN0aW9uIFRTZShsLGMpe3JldHVybiBsPy5bY119KGwsYyk7cmV0dXJuIEFTZShhKT9hOnZvaWQgMH0sTEM9T2coeGgsIk1hcCIpLFBDPU9nKE9iamVjdCwiY3JlYXRlIik7dmFyIEJTZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciBaU2U9T2JqZWN0LnByb3Rv'@;
put 'dHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBIdihsKXt2YXIgYz0tMSxhPW51bGw9PWw/MDpsLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrYzxhOyl7dmFyIGY9bFtjXTt0aGlzLnNldChmWzBdLGZbMV0pfX1Idi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gTFNlKCl7dGhpcy5fX2Rh'@;
put 'dGFfXz1QQz9QQyhudWxsKTp7fSx0aGlzLnNpemU9MH0sSHYucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiBGU2UobCl7dmFyIGM9dGhpcy5oYXMobCkmJmRlbGV0ZSB0aGlzLl9fZGF0YV9fW2xdO3JldHVybiB0aGlzLnNpemUtPWM/MTowLGN9LEh2LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24g'@;
put 'alNlKGwpe3ZhciBjPXRoaXMuX19kYXRhX187aWYoUEMpe3ZhciBhPWNbbF07cmV0dXJuIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iPT09YT92b2lkIDA6YX1yZXR1cm4gQlNlLmNhbGwoYyxsKT9jW2xdOnZvaWQgMH0sSHYucHJvdG90eXBlLmhhcz1mdW5jdGlvbiBZU2UobCl7dmFyIGM9'@;
put 'dGhpcy5fX2RhdGFfXztyZXR1cm4gUEM/dm9pZCAwIT09Y1tsXTpaU2UuY2FsbChjLGwpfSxIdi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uICRTZShsLGMpe3ZhciBhPXRoaXMuX19kYXRhX187cmV0dXJuIHRoaXMuc2l6ZSs9dGhpcy5oYXMobCk/MDoxLGFbbF09UEMmJnZvaWQgMD09PWM/Il9f'@;
put 'bG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iOmMsdGhpc307Y29uc3QgRGllPUh2LHZEPWZ1bmN0aW9uIGVNZShsLGMpe3ZhciBhPWwuX19kYXRhX187cmV0dXJuIGZ1bmN0aW9uIEpTZShsKXt2YXIgYz10eXBlb2YgbDtyZXR1cm4ic3RyaW5nIj09Y3x8Im51bWJlciI9PWN8fCJzeW1ib2wiPT1j'@;
put 'fHwiYm9vbGVhbiI9PWM/Il9fcHJvdG9fXyIhPT1sOm51bGw9PT1sfShjKT9hWyJzdHJpbmciPT10eXBlb2YgYz8ic3RyaW5nIjoiaGFzaCJdOmEubWFwfTtmdW5jdGlvbiBOdihsKXt2YXIgYz0tMSxhPW51bGw9PWw/MDpsLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrYzxhOyl7dmFyIGY9'@;
put 'bFtjXTt0aGlzLnNldChmWzBdLGZbMV0pfX1Odi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gcVNlKCl7dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgRGllLG1hcDpuZXcoTEN8fGdEKSxzdHJpbmc6bmV3IERpZX19LE52LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24gdE1l'@;
put 'KGwpe3ZhciBjPXZEKHRoaXMsbCkuZGVsZXRlKGwpO3JldHVybiB0aGlzLnNpemUtPWM/MTowLGN9LE52LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24gck1lKGwpe3JldHVybiB2RCh0aGlzLGwpLmdldChsKX0sTnYucHJvdG90eXBlLmhhcz1mdW5jdGlvbiBvTWUobCl7cmV0dXJuIHZEKHRoaXMs'@;
put 'bCkuaGFzKGwpfSxOdi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uIGxNZShsLGMpe3ZhciBhPXZEKHRoaXMsbCksZj1hLnNpemU7cmV0dXJuIGEuc2V0KGwsYyksdGhpcy5zaXplKz1hLnNpemU9PWY/MDoxLHRoaXN9O2NvbnN0IG96PU52O2Z1bmN0aW9uIFZ2KGwpe3ZhciBjPXRoaXMuX19kYXRh'@;
put 'X189bmV3IGdEKGwpO3RoaXMuc2l6ZT1jLnNpemV9VnYucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uIFZDZSgpe3RoaXMuX19kYXRhX189bmV3IGdELHRoaXMuc2l6ZT0wfSxWdi5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uIGpDZShsKXt2YXIgYz10aGlzLl9fZGF0YV9fLGE9Yy5kZWxldGUo'@;
put 'bCk7cmV0dXJuIHRoaXMuc2l6ZT1jLnNpemUsYX0sVnYucHJvdG90eXBlLmdldD1mdW5jdGlvbiBVQ2UobCl7cmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KGwpfSxWdi5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIFlDZShsKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMobCl9LFZ2LnByb3RvdHlw'@;
put 'ZS5zZXQ9ZnVuY3Rpb24gY01lKGwsYyl7dmFyIGE9dGhpcy5fX2RhdGFfXztpZihhIGluc3RhbmNlb2YgZ0Qpe3ZhciBmPWEuX19kYXRhX187aWYoIUxDfHxmLmxlbmd0aDwxOTkpcmV0dXJuIGYucHVzaChbbCxjXSksdGhpcy5zaXplPSsrYS5zaXplLHRoaXM7YT10aGlzLl9fZGF0YV9fPW5l'@;
put 'dyBveihmKX1yZXR1cm4gYS5zZXQobCxjKSx0aGlzLnNpemU9YS5zaXplLHRoaXN9O2NvbnN0IGRNZT1Wdjt2YXIgbU1lPWZ1bmN0aW9uKCl7dHJ5e3ZhciBsPU9nKE9iamVjdCwiZGVmaW5lUHJvcGVydHkiKTtyZXR1cm4gbCh7fSwiIix7fSksbH1jYXRjaHt9fSgpO2NvbnN0IElpZT1tTWUs'@;
put 'UmllPWZ1bmN0aW9uIGdNZShsLGMsYSl7Il9fcHJvdG9fXyI9PWMmJklpZT9JaWUobCxjLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTphLHdyaXRhYmxlOiEwfSk6bFtjXT1hfTt2YXIgeU1lPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7Y29uc3QgTGllPWZ1'@;
put 'bmN0aW9uIGJNZShsLGMsYSl7dmFyIGY9bFtjXTsoIXlNZS5jYWxsKGwsYyl8fCFraWUoZixhKXx8dm9pZCAwPT09YSYmIShjIGluIGwpKSYmUmllKGwsYyxhKX0seUQ9ZnVuY3Rpb24gX01lKGwsYyxhLGYpe3ZhciBkPSFhO2F8fChhPXt9KTtmb3IodmFyIGg9LTEsbT1jLmxlbmd0aDsrK2g8'@;
put 'bTspe3ZhciBfPWNbaF0sTz1mP2YoYVtfXSxsW19dLF8sYSxsKTp2b2lkIDA7dm9pZCAwPT09TyYmKE89bFtfXSksZD9SaWUoYSxfLE8pOkxpZShhLF8sTyl9cmV0dXJuIGF9LEJ2PWZ1bmN0aW9uIFNNZShsKXtyZXR1cm4gbnVsbCE9bCYmIm9iamVjdCI9PXR5cGVvZiBsfSxQaWU9ZnVuY3Rp'@;
put 'b24ga01lKGwpe3JldHVybiBCdihsKSYmIltvYmplY3QgQXJndW1lbnRzXSI9PUZ2KGwpfTt2YXIgRmllPU9iamVjdC5wcm90b3R5cGUsRU1lPUZpZS5oYXNPd25Qcm9wZXJ0eSx4TWU9RmllLnByb3BlcnR5SXNFbnVtZXJhYmxlLEFNZT1QaWUoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRz'@;
put 'fSgpKT9QaWU6ZnVuY3Rpb24obCl7cmV0dXJuIEJ2KGwpJiZFTWUuY2FsbChsLCJjYWxsZWUiKSYmIXhNZS5jYWxsKGwsImNhbGxlZSIpfTtjb25zdCBUTWU9QU1lLGp2PUFycmF5LmlzQXJyYXk7dmFyIEhpZT0ib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJmV4cG9ydHMmJiFleHBvcnRzLm5v'@;
put 'ZGVUeXBlJiZleHBvcnRzLE5pZT1IaWUmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlJiZtb2R1bGUmJiFtb2R1bGUubm9kZVR5cGUmJm1vZHVsZSxWaWU9TmllJiZOaWUuZXhwb3J0cz09PUhpZT94aC5CdWZmZXI6dm9pZCAwO2NvbnN0IEJpZT0oVmllP1ZpZS5pc0J1ZmZlcjp2b2lkIDApfHxm'@;
put 'dW5jdGlvbiBETWUoKXtyZXR1cm4hMX07dmFyIEhNZT0vXig/OjB8WzEtOV1cZCopJC87Y29uc3QgVk1lPWZ1bmN0aW9uIE5NZShsLGMpe3ZhciBhPXR5cGVvZiBsO3JldHVybiEhKGM9Yz8/OTAwNzE5OTI1NDc0MDk5MSkmJigibnVtYmVyIj09YXx8InN5bWJvbCIhPWEmJkhNZS50ZXN0KGwp'@;
put 'KSYmbD4tMSYmbCUxPT0wJiZsPGN9LGppZT1mdW5jdGlvbiBqTWUobCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBsJiZsPi0xJiZsJTE9PTAmJmw8PTkwMDcxOTkyNTQ3NDA5OTF9O3ZhciBycz17fTtyc1siW29iamVjdCBGbG9hdDMyQXJyYXldIl09cnNbIltvYmplY3QgRmxvYXQ2NEFycmF5'@;
put 'XSJdPXJzWyJbb2JqZWN0IEludDhBcnJheV0iXT1yc1siW29iamVjdCBJbnQxNkFycmF5XSJdPXJzWyJbb2JqZWN0IEludDMyQXJyYXldIl09cnNbIltvYmplY3QgVWludDhBcnJheV0iXT1yc1siW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iXT1yc1siW29iamVjdCBVaW50MTZBcnJheV0i'@;
put 'XT1yc1siW29iamVjdCBVaW50MzJBcnJheV0iXT0hMCxyc1siW29iamVjdCBBcmd1bWVudHNdIl09cnNbIltvYmplY3QgQXJyYXldIl09cnNbIltvYmplY3QgQXJyYXlCdWZmZXJdIl09cnNbIltvYmplY3QgQm9vbGVhbl0iXT1yc1siW29iamVjdCBEYXRhVmlld10iXT1yc1siW29iamVjdCBE'@;
put 'YXRlXSJdPXJzWyJbb2JqZWN0IEVycm9yXSJdPXJzWyJbb2JqZWN0IEZ1bmN0aW9uXSJdPXJzWyJbb2JqZWN0IE1hcF0iXT1yc1siW29iamVjdCBOdW1iZXJdIl09cnNbIltvYmplY3QgT2JqZWN0XSJdPXJzWyJbb2JqZWN0IFJlZ0V4cF0iXT1yc1siW29iamVjdCBTZXRdIl09cnNbIltvYmpl'@;
put 'Y3QgU3RyaW5nXSJdPXJzWyJbb2JqZWN0IFdlYWtNYXBdIl09ITE7Y29uc3QgYXo9ZnVuY3Rpb24gcGtlKGwpe3JldHVybiBmdW5jdGlvbihjKXtyZXR1cm4gbChjKX19O3ZhciB6aWU9Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiZleHBvcnRzJiYhZXhwb3J0cy5ub2RlVHlwZSYmZXhwb3J0'@;
put 'cyxGQz16aWUmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlJiZtb2R1bGUmJiFtb2R1bGUubm9kZVR5cGUmJm1vZHVsZSxsej1GQyYmRkMuZXhwb3J0cz09PXppZSYmRWllLnByb2Nlc3M7Y29uc3QgenY9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIEZDJiZGQy5yZXF1aXJlJiZGQy5yZXF1aXJlKCJ1'@;
put 'dGlsIikudHlwZXN8fGx6JiZsei5iaW5kaW5nJiZsei5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2h7fX0oKTt2YXIgVWllPXp2JiZ6di5pc1R5cGVkQXJyYXk7Y29uc3QgeWtlPVVpZT9heihVaWUpOmZ1bmN0aW9uIGRrZShsKXtyZXR1cm4gQnYobCkmJmppZShsLmxlbmd0aCkmJiEhcnNbRnYobCld'@;
put 'fTt2YXIgX2tlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7Y29uc3QgWmllPWZ1bmN0aW9uIHdrZShsLGMpe3ZhciBhPWp2KGwpLGY9IWEmJlRNZShsKSxkPSFhJiYhZiYmQmllKGwpLGg9IWEmJiFmJiYhZCYmeWtlKGwpLG09YXx8Znx8ZHx8aCxfPW0/ZnVuY3Rpb24gd01lKGws'@;
put 'Yyl7Zm9yKHZhciBhPS0xLGY9QXJyYXkobCk7KythPGw7KWZbYV09YyhhKTtyZXR1cm4gZn0obC5sZW5ndGgsU3RyaW5nKTpbXSxPPV8ubGVuZ3RoO2Zvcih2YXIgWCBpbiBsKShjfHxfa2UuY2FsbChsLFgpKSYmKCFtfHwhKCJsZW5ndGgiPT1YfHxkJiYoIm9mZnNldCI9PVh8fCJwYXJlbnQi'@;
put 'PT1YKXx8aCYmKCJidWZmZXIiPT1YfHwiYnl0ZUxlbmd0aCI9PVh8fCJieXRlT2Zmc2V0Ij09WCl8fFZNZShYLE8pKSkmJl8ucHVzaChYKTtyZXR1cm4gX307dmFyIENrZT1PYmplY3QucHJvdG90eXBlO2NvbnN0IHN6PWZ1bmN0aW9uIFNrZShsKXt2YXIgYz1sJiZsLmNvbnN0cnVjdG9yO3Jl'@;
put 'dHVybiBsPT09KCJmdW5jdGlvbiI9PXR5cGVvZiBjJiZjLnByb3RvdHlwZXx8Q2tlKX0sWWllPWZ1bmN0aW9uIE1rZShsLGMpe3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gbChjKGEpKX19LEVrZT1ZaWUoT2JqZWN0LmtleXMsT2JqZWN0KTt2YXIgQWtlPU9iamVjdC5wcm90b3R5cGUuaGFz'@;
put 'T3duUHJvcGVydHk7Y29uc3QgV2llPWZ1bmN0aW9uIERrZShsKXtyZXR1cm4gbnVsbCE9bCYmamllKGwubGVuZ3RoKSYmIVRpZShsKX0sdXo9ZnVuY3Rpb24gSWtlKGwpe3JldHVybiBXaWUobCk/WmllKGwpOmZ1bmN0aW9uIFRrZShsKXtpZighc3oobCkpcmV0dXJuIEVrZShsKTt2YXIgYz1b'@;
put 'XTtmb3IodmFyIGEgaW4gT2JqZWN0KGwpKUFrZS5jYWxsKGwsYSkmJiJjb25zdHJ1Y3RvciIhPWEmJmMucHVzaChhKTtyZXR1cm4gY30obCl9O3ZhciBOa2U9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtjb25zdCBCa2U9ZnVuY3Rpb24gVmtlKGwpe2lmKCFSQyhsKSlyZXR1cm4g'@;
put 'ZnVuY3Rpb24gUGtlKGwpe3ZhciBjPVtdO2lmKG51bGwhPWwpZm9yKHZhciBhIGluIE9iamVjdChsKSljLnB1c2goYSk7cmV0dXJuIGN9KGwpO3ZhciBjPXN6KGwpLGE9W107Zm9yKHZhciBmIGluIGwpImNvbnN0cnVjdG9yIj09ZiYmKGN8fCFOa2UuY2FsbChsLGYpKXx8YS5wdXNoKGYpO3Jl'@;
put 'dHVybiBhfSxjej1mdW5jdGlvbiBqa2UobCl7cmV0dXJuIFdpZShsKT9aaWUobCwhMCk6QmtlKGwpfTt2YXIgR2llPSJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMsJGllPUdpZSYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJm1v'@;
put 'ZHVsZSYmIW1vZHVsZS5ub2RlVHlwZSYmbW9kdWxlLEtpZT0kaWUmJiRpZS5leHBvcnRzPT09R2llP3hoLkJ1ZmZlcjp2b2lkIDAscWllPUtpZT9LaWUuYWxsb2NVbnNhZmU6dm9pZCAwO2NvbnN0IFhpZT1mdW5jdGlvbiBYa2UoKXtyZXR1cm5bXX07dmFyIFFrZT1PYmplY3QucHJvdG90eXBl'@;
put 'LnByb3BlcnR5SXNFbnVtZXJhYmxlLEppZT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLGVFZT1KaWU/ZnVuY3Rpb24obCl7cmV0dXJuIG51bGw9PWw/W106KGw9T2JqZWN0KGwpLGZ1bmN0aW9uIEtrZShsLGMpe2Zvcih2YXIgYT0tMSxmPW51bGw9PWw/MDpsLmxlbmd0aCxkPTAsaD1b'@;
put 'XTsrK2E8Zjspe3ZhciBtPWxbYV07YyhtLGEsbCkmJihoW2QrK109bSl9cmV0dXJuIGh9KEppZShsKSxmdW5jdGlvbihjKXtyZXR1cm4gUWtlLmNhbGwobCxjKX0pKX06WGllO2NvbnN0IGZ6PWVFZSxRaWU9ZnVuY3Rpb24gckVlKGwsYyl7Zm9yKHZhciBhPS0xLGY9Yy5sZW5ndGgsZD1sLmxl'@;
put 'bmd0aDsrK2E8ZjspbFtkK2FdPWNbYV07cmV0dXJuIGx9LGVvZT1ZaWUoT2JqZWN0LmdldFByb3RvdHlwZU9mLE9iamVjdCk7dmFyIGFFZT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP2Z1bmN0aW9uKGwpe2Zvcih2YXIgYz1bXTtsOylRaWUoYyxmeihsKSksbD1lb2UobCk7cmV0dXJu'@;
put 'IGN9OlhpZTtjb25zdCB0b2U9YUVlLG5vZT1mdW5jdGlvbiB1RWUobCxjLGEpe3ZhciBmPWMobCk7cmV0dXJuIGp2KGwpP2Y6UWllKGYsYShsKSl9LGZFZT1mdW5jdGlvbiBjRWUobCl7cmV0dXJuIG5vZShsLHV6LGZ6KX0saEVlPWZ1bmN0aW9uIGRFZShsKXtyZXR1cm4gbm9lKGwsY3osdG9l'@;
put 'KX0sZHo9T2coeGgsIkRhdGFWaWV3IiksaHo9T2coeGgsIlByb21pc2UiKSxwej1PZyh4aCwiU2V0IiksbXo9T2coeGgsIldlYWtNYXAiKTt2YXIgcm9lPSJbb2JqZWN0IE1hcF0iLGlvZT0iW29iamVjdCBQcm9taXNlXSIsb29lPSJbb2JqZWN0IFNldF0iLGFvZT0iW29iamVjdCBXZWFrTWFw'@;
put 'XSIsbG9lPSJbb2JqZWN0IERhdGFWaWV3XSIsYkVlPVRnKGR6KSxfRWU9VGcoTEMpLHdFZT1UZyhoeiksQ0VlPVRnKHB6KSxTRWU9VGcobXopLERnPUZ2OyhkeiYmRGcobmV3IGR6KG5ldyBBcnJheUJ1ZmZlcigxKSkpIT1sb2V8fExDJiZEZyhuZXcgTEMpIT1yb2V8fGh6JiZEZyhoei5yZXNv'@;
put 'bHZlKCkpIT1pb2V8fHB6JiZEZyhuZXcgcHopIT1vb2V8fG16JiZEZyhuZXcgbXopIT1hb2UpJiYoRGc9ZnVuY3Rpb24obCl7dmFyIGM9RnYobCksYT0iW29iamVjdCBPYmplY3RdIj09Yz9sLmNvbnN0cnVjdG9yOnZvaWQgMCxmPWE/VGcoYSk6IiI7aWYoZilzd2l0Y2goZil7Y2FzZSBiRWU6'@;
put 'cmV0dXJuIGxvZTtjYXNlIF9FZTpyZXR1cm4gcm9lO2Nhc2Ugd0VlOnJldHVybiBpb2U7Y2FzZSBDRWU6cmV0dXJuIG9vZTtjYXNlIFNFZTpyZXR1cm4gYW9lfXJldHVybiBjfSk7Y29uc3QgZ3o9RGc7dmFyIGtFZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2NvbnN0IHNvZT14'@;
put 'aC5VaW50OEFycmF5LHZ6PWZ1bmN0aW9uIFRFZShsKXt2YXIgYz1uZXcgbC5jb25zdHJ1Y3RvcihsLmJ5dGVMZW5ndGgpO3JldHVybiBuZXcgc29lKGMpLnNldChuZXcgc29lKGwpKSxjfTt2YXIgSUVlPS9cdyokLzt2YXIgdW9lPXM0P3M0LnByb3RvdHlwZTp2b2lkIDAsY29lPXVvZT91b2Uu'@;
put 'dmFsdWVPZjp2b2lkIDA7Y29uc3Qgb3hlPWZ1bmN0aW9uIGl4ZShsLGMsYSl7dmFyIGY9bC5jb25zdHJ1Y3Rvcjtzd2l0Y2goYyl7Y2FzZSJbb2JqZWN0IEFycmF5QnVmZmVyXSI6cmV0dXJuIHZ6KGwpO2Nhc2UiW29iamVjdCBCb29sZWFuXSI6Y2FzZSJbb2JqZWN0IERhdGVdIjpyZXR1cm4g'@;
put 'bmV3IGYoK2wpO2Nhc2UiW29iamVjdCBEYXRhVmlld10iOnJldHVybiBmdW5jdGlvbiBPRWUobCxjKXt2YXIgYT1jP3Z6KGwuYnVmZmVyKTpsLmJ1ZmZlcjtyZXR1cm4gbmV3IGwuY29uc3RydWN0b3IoYSxsLmJ5dGVPZmZzZXQsbC5ieXRlTGVuZ3RoKX0obCxhKTtjYXNlIltvYmplY3QgRmxv'@;
put 'YXQzMkFycmF5XSI6Y2FzZSJbb2JqZWN0IEZsb2F0NjRBcnJheV0iOmNhc2UiW29iamVjdCBJbnQ4QXJyYXldIjpjYXNlIltvYmplY3QgSW50MTZBcnJheV0iOmNhc2UiW29iamVjdCBJbnQzMkFycmF5XSI6Y2FzZSJbb2JqZWN0IFVpbnQ4QXJyYXldIjpjYXNlIltvYmplY3QgVWludDhDbGFt'@;
put 'cGVkQXJyYXldIjpjYXNlIltvYmplY3QgVWludDE2QXJyYXldIjpjYXNlIltvYmplY3QgVWludDMyQXJyYXldIjpyZXR1cm4gZnVuY3Rpb24gSEVlKGwsYyl7dmFyIGE9Yz92eihsLmJ1ZmZlcik6bC5idWZmZXI7cmV0dXJuIG5ldyBsLmNvbnN0cnVjdG9yKGEsbC5ieXRlT2Zmc2V0LGwubGVu'@;
put 'Z3RoKX0obCxhKTtjYXNlIltvYmplY3QgTWFwXSI6Y2FzZSJbb2JqZWN0IFNldF0iOnJldHVybiBuZXcgZjtjYXNlIltvYmplY3QgTnVtYmVyXSI6Y2FzZSJbb2JqZWN0IFN0cmluZ10iOnJldHVybiBuZXcgZihsKTtjYXNlIltvYmplY3QgUmVnRXhwXSI6cmV0dXJuIGZ1bmN0aW9uIFJFZShs'@;
put 'KXt2YXIgYz1uZXcgbC5jb25zdHJ1Y3RvcihsLnNvdXJjZSxJRWUuZXhlYyhsKSk7cmV0dXJuIGMubGFzdEluZGV4PWwubGFzdEluZGV4LGN9KGwpO2Nhc2UiW29iamVjdCBTeW1ib2xdIjpyZXR1cm4gZnVuY3Rpb24gUEVlKGwpe3JldHVybiBjb2U/T2JqZWN0KGNvZS5jYWxsKGwpKTp7fX0o'@;
put 'bCl9fTt2YXIgZm9lPU9iamVjdC5jcmVhdGUsYXhlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbCgpe31yZXR1cm4gZnVuY3Rpb24oYyl7aWYoIVJDKGMpKXJldHVybnt9O2lmKGZvZSlyZXR1cm4gZm9lKGMpO2wucHJvdG90eXBlPWM7dmFyIGE9bmV3IGw7cmV0dXJuIGwucHJvdG90eXBlPXZvaWQg'@;
put 'MCxhfX0oKTtjb25zdCBseGU9YXhlO3ZhciBkb2U9enYmJnp2LmlzTWFwO2NvbnN0IHB4ZT1kb2U/YXooZG9lKTpmdW5jdGlvbiBmeGUobCl7cmV0dXJuIEJ2KGwpJiYiW29iamVjdCBNYXBdIj09Z3oobCl9O3ZhciBob2U9enYmJnp2LmlzU2V0O2NvbnN0IGJ4ZT1ob2U/YXooaG9lKTpmdW5j'@;
put 'dGlvbiBneGUobCl7cmV0dXJuIEJ2KGwpJiYiW29iamVjdCBTZXRdIj09Z3oobCl9O3ZhciBwb2U9IltvYmplY3QgQXJndW1lbnRzXSIsbW9lPSJbb2JqZWN0IEZ1bmN0aW9uXSIsZ29lPSJbb2JqZWN0IE9iamVjdF0iLFlsPXt9O1lsW3BvZV09WWxbIltvYmplY3QgQXJyYXldIl09WWxbIltv'@;
put 'YmplY3QgQXJyYXlCdWZmZXJdIl09WWxbIltvYmplY3QgRGF0YVZpZXddIl09WWxbIltvYmplY3QgQm9vbGVhbl0iXT1ZbFsiW29iamVjdCBEYXRlXSJdPVlsWyJbb2JqZWN0IEZsb2F0MzJBcnJheV0iXT1ZbFsiW29iamVjdCBGbG9hdDY0QXJyYXldIl09WWxbIltvYmplY3QgSW50OEFycmF5'@;
put 'XSJdPVlsWyJbb2JqZWN0IEludDE2QXJyYXldIl09WWxbIltvYmplY3QgSW50MzJBcnJheV0iXT1ZbFsiW29iamVjdCBNYXBdIl09WWxbIltvYmplY3QgTnVtYmVyXSJdPVlsW2dvZV09WWxbIltvYmplY3QgUmVnRXhwXSJdPVlsWyJbb2JqZWN0IFNldF0iXT1ZbFsiW29iamVjdCBTdHJpbmdd'@;
put 'Il09WWxbIltvYmplY3QgU3ltYm9sXSJdPVlsWyJbb2JqZWN0IFVpbnQ4QXJyYXldIl09WWxbIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIl09WWxbIltvYmplY3QgVWludDE2QXJyYXldIl09WWxbIltvYmplY3QgVWludDMyQXJyYXldIl09ITAsWWxbIltvYmplY3QgRXJyb3JdIl09WWxb'@;
put 'bW9lXT1ZbFsiW29iamVjdCBXZWFrTWFwXSJdPSExO2NvbnN0IFd4ZT1mdW5jdGlvbiBiRChsLGMsYSxmLGQsaCl7dmFyIG0sXz0xJmMsTz0yJmMsWD00JmM7aWYoYSYmKG09ZD9hKGwsZixkLGgpOmEobCkpLHZvaWQgMCE9PW0pcmV0dXJuIG07aWYoIVJDKGwpKXJldHVybiBsO3ZhciBhZT1q'@;
put 'dihsKTtpZihhZSl7aWYobT1mdW5jdGlvbiBFRWUobCl7dmFyIGM9bC5sZW5ndGgsYT1uZXcgbC5jb25zdHJ1Y3RvcihjKTtyZXR1cm4gYyYmInN0cmluZyI9PXR5cGVvZiBsWzBdJiZrRWUuY2FsbChsLCJpbmRleCIpJiYoYS5pbmRleD1sLmluZGV4LGEuaW5wdXQ9bC5pbnB1dCksYX0obCks'@;
put 'IV8pcmV0dXJuIGZ1bmN0aW9uIEdrZShsLGMpe3ZhciBhPS0xLGY9bC5sZW5ndGg7Zm9yKGN8fChjPUFycmF5KGYpKTsrK2E8ZjspY1thXT1sW2FdO3JldHVybiBjfShsLG0pfWVsc2V7dmFyIHBlPWd6KGwpLGJlPXBlPT1tb2V8fCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PXBlO2lm'@;
put 'KEJpZShsKSlyZXR1cm4gZnVuY3Rpb24gWWtlKGwsYyl7aWYoYylyZXR1cm4gbC5zbGljZSgpO3ZhciBhPWwubGVuZ3RoLGY9cWllP3FpZShhKTpuZXcgbC5jb25zdHJ1Y3RvcihhKTtyZXR1cm4gbC5jb3B5KGYpLGZ9KGwsXyk7aWYocGU9PWdvZXx8cGU9PXBvZXx8YmUmJiFkKXtpZihtPU98'@;
put 'fGJlP3t9OmZ1bmN0aW9uIHN4ZShsKXtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgbC5jb25zdHJ1Y3Rvcnx8c3oobCk/e306bHhlKGVvZShsKSl9KGwpLCFfKXJldHVybiBPP2Z1bmN0aW9uIGxFZShsLGMpe3JldHVybiB5RChsLHRvZShsKSxjKX0obCxmdW5jdGlvbiB6a2UobCxjKXtyZXR1'@;
put 'cm4gbCYmeUQoYyxjeihjKSxsKX0obSxsKSk6ZnVuY3Rpb24gdEVlKGwsYyl7cmV0dXJuIHlEKGwsZnoobCksYyl9KGwsZnVuY3Rpb24gUmtlKGwsYyl7cmV0dXJuIGwmJnlEKGMsdXooYyksbCl9KG0sbCkpfWVsc2V7aWYoIVlsW3BlXSlyZXR1cm4gZD9sOnt9O209b3hlKGwscGUsXyl9fWh8'@;
put 'fChoPW5ldyBkTWUpO3ZhciB4ZT1oLmdldChsKTtpZih4ZSlyZXR1cm4geGU7aC5zZXQobCxtKSxieGUobCk/bC5mb3JFYWNoKGZ1bmN0aW9uKGx0KXttLmFkZChiRChsdCxjLGEsbHQsbCxoKSl9KTpweGUobCkmJmwuZm9yRWFjaChmdW5jdGlvbihsdCxkdCl7bS5zZXQoZHQsYkQobHQsYyxh'@;
put 'LGR0LGwsaCkpfSk7dmFyIFplPWFlP3ZvaWQgMDooWD9PP2hFZTpmRWU6Tz9jejp1eikobCk7cmV0dXJuIGZ1bmN0aW9uIGhNZShsLGMpe2Zvcih2YXIgYT0tMSxmPW51bGw9PWw/MDpsLmxlbmd0aDsrK2E8ZiYmITEhPT1jKGxbYV0sYSxsKTspO30oWmV8fGwsZnVuY3Rpb24obHQsZHQpe1pl'@;
put 'JiYobHQ9bFtkdD1sdF0pLExpZShtLGR0LGJEKGx0LGMsYSxkdCxsLGgpKX0pLG19LF9EPWZ1bmN0aW9uIEt4ZShsKXtyZXR1cm4gV3hlKGwsNSl9O3ZhciBxeGU9VCg5Mjg3Myk7bGV0IFB1PSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoKXt0aGlzLnNob3duTGlicmFyaWVzPTUwLHRoaXMu'@;
put 'bG9hZE1vcmVDb3VudD01MCx0aGlzLmlzTWljcm9zb2Z0PSExLHRoaXMuaXNNaWNyb3NvZnQ9dGhpcy5pc0lFb3JFREdFKCksY29uc29sZS5sb2coIklzIElFIG9yIEVkZ2U/Iix0aGlzLmlzTWljcm9zb2Z0KX1jb252ZXJ0SnNEYXRlVG9TYXNEYXRlKGEsZj0iZGF5cyIpe2xldCBkLGg9MDtk'@;
put 'PWEgaW5zdGFuY2VvZiBEYXRlP2E6bmV3IERhdGUoYSksaD1uZXcgRGF0ZShEYXRlLlVUQyhkLmdldEZ1bGxZZWFyKCksZC5nZXRNb250aCgpLGQuZ2V0RGF0ZSgpLGQuZ2V0SG91cnMoKSxkLmdldE1pbnV0ZXMoKSxkLmdldFNlY29uZHMoKSkpLnZhbHVlT2YoKTtjb25zdCBPPWgrMzE1NjE5'@;
put 'MmU1O3N3aXRjaChmKXtjYXNlImRheXMiOntsZXQgWD1PLzg2NGU1O3JldHVybiBYPU1hdGguYWJzKFgpLFg9TWF0aC5mbG9vcihYKSxYfWNhc2Uic2Vjb25kcyI6cmV0dXJuIE8vMWUzfXJldHVybiAwfWNvbnZlcnRTYXNEYXlzVG9Kc0RhdGUoYSxmPSJkYXlzIil7aWYoIm51bWJlciIhPXR5'@;
put 'cGVvZiBhJiYoYT1wYXJzZUZsb2F0KGEpKSwic2Vjb25kcyI9PT1mKXtsZXQgXz0xZTMqYS0zMTU2MTkyZTU7cmV0dXJuIF8rPTYwKm5ldyBEYXRlKF8pLmdldFRpbWV6b25lT2Zmc2V0KCkqMWUzLG5ldyBEYXRlKF8pfXJldHVybiBuZXcgRGF0ZSg4NjRlNSphLTMxNTYxOTJlNSl9dHJlZU9u'@;
put 'RmlsdGVyKGEsZil7bGV0IGQ9YS5zZWFyY2hTdHJpbmc/YS5zZWFyY2hTdHJpbmc6IiIsaD1mLnNwbGl0KCIuIilbMF0sbT1mLnNwbGl0KCIuIilbMV0sXz1oKyJBbGwiO2FbaF0mJihhW19dfHwoYVtfXT10aGlzLmRlZXBDbG9uZShhW2hdKSksYVtoXT10aGlzLmRlZXBDbG9uZShhW19dKSxk'@;
put 'Lmxlbmd0aD4wJiYoYVtoXT1hW2hdLmZpbHRlcihtP089Pk9bbV0udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhkLnRvTG93ZXJDYXNlKCkpOk89Pk8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhkLnRvTG93ZXJDYXNlKCkpKSkpfWxpYnJhcnlPbkZpbHRlcihhLGYsZCl7Zi5sZW5ndGg+MD9hLmZv'@;
put 'ckVhY2goaD0+e2hbZF0udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmLnRvTG93ZXJDYXNlKCkpPyhoLmhpZGRlbj0hMSxoLmluRm9yZWdyb3VuZD0hMCk6KGguaGlkZGVuPSEwLGguaW5Gb3JlZ3JvdW5kPSExKX0pOih0aGlzLnJlc2V0QXJyYXlGaWx0ZXIoYSksdGhpcy5kaXNwbGF5TGlicmFy'@;
put 'aWVzKGEpKX1kaXNwbGF5TGlicmFyaWVzKGEsZil7Zj90aGlzLnNob3duTGlicmFyaWVzKz10aGlzLmxvYWRNb3JlQ291bnQ6KHRoaXMuc2hvd25MaWJyYXJpZXM9NTAsdGhpcy5yZXNldExpYnJhcnlGb3JlZ3JvdW5kKGEpKTtmb3IobGV0IGQ9MDtkPGEubGVuZ3RoJiZkIT09dGhpcy5zaG93'@;
put 'bkxpYnJhcmllcztkKyspYVtkXS5pbkZvcmVncm91bmQ9ITB9cmVzZXRMaWJyYXJ5Rm9yZWdyb3VuZChhKXtmb3IobGV0IGY9MDtmPGEubGVuZ3RoO2YrKylhW2ZdLmluRm9yZWdyb3VuZD0hMX1tZXRhT2JqZWN0T25GaWx0ZXIoYSxmLGQpe2YubGVuZ3RoPjA/KHRoaXMucmVzZXRBcnJheUZp'@;
put 'bHRlcihhKSxhLmZvckVhY2goaD0+e2hbZF0udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmLnRvTG93ZXJDYXNlKCkpfHwoaC5oaWRkZW49ITApfSkpOnRoaXMucmVzZXRBcnJheUZpbHRlcihhKX1yZXNldEFycmF5RmlsdGVyKGEpe2EuZm9yRWFjaChmPT57Zi5oaWRkZW49ITEsZi5pbkZvcmVn'@;
put 'cm91bmQmJmRlbGV0ZSBmLmluRm9yZWdyb3VuZH0pfWlzSUVvckVER0UoKXt2YXIgYT13aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDtyZXR1cm4gYS5pbmRleE9mKCJNU0lFICIpPjB8fChhLmluZGV4T2YoIlRyaWRlbnQvIik+MD8oYS5pbmRleE9mKCJydjoiKSwhMCk6YS5pbmRleE9mKCJF'@;
put 'ZGdlLyIpPjApfWNvbnZlcnRPYmplY3RzVG9BcnJheShhLGY9ITEpe3JldHVybiBmJiYoYT10aGlzLmRlZXBDbG9uZShhKSksYS5tYXAoZD0+T2JqZWN0LmtleXMoZCkubWFwKGg9PmRbaF0pKX1hZGRMZWFkaW5nWmVybyhhKXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGEmJihhPWEudG9TdHJp'@;
put 'bmcoKSksYS5sZW5ndGg8Mj8iMCIrYTphfWRlbGV0ZUtleXNBbmRIYXNoKGEsZixkPSEwKXtjb25zdCBoPWQ/dGhpcy5kZWVwQ2xvbmUoYSk6YTtmb3IobGV0IG0gb2YgZilkZWxldGUgaFttXTtyZXR1cm4gcXhlKEpTT04uc3RyaW5naWZ5KGgpKS50b1N0cmluZygpfWRvd25sb2FkVGV4dEZp'@;
put 'bGUoYSxmKXtjb25zdCBkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtkLnNldEF0dHJpYnV0ZSgiaHJlZiIsImRhdGE6dGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04LCIrZW5jb2RlVVJJQ29tcG9uZW50KGYpKSxkLnNldEF0dHJpYnV0ZSgiZG93bmxvYWQiLGErIi50eHQiKSxkLnN0eWxl'@;
put 'LmRpc3BsYXk9Im5vbmUiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZCksZC5jbGljaygpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZCl9Y29udmVydEFycmF5VmFsdWVzKGEsZil7aWYoYS5sZW5ndGg8MSlyZXR1cm5bXTtzd2l0Y2goZil7Y2FzZSJudW1iZXIiOnJldHVybiBhLm1h'@;
put 'cChkPT4xKmQpO2Nhc2Uic3RyaW5nIjpyZXR1cm4gYS50b1N0cmluZygpLnNwbGl0KCIsIil9fWRlYm91bmNlQ2FsbChhLGYpe2NsZWFyVGltZW91dCh0aGlzLmRlYm91bmNlVGltZW91dCksdGhpcy5kZWJvdW5jZVRpbWVvdXQ9c2V0VGltZW91dChmLGEpfWRlZXBDbG9uZShhKXtyZXR1cm4g'@;
put 'X0QoYSl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmwsZmFjdG9yeTpsLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGx9KSgpLGIxPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmLGQsaCxt'@;
put 'LF8pe3RoaXMubG9nZ2VyU2VydmljZT1hLHRoaXMuYXBwU3RvcmVTZXJ2aWNlPWYsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLnNhc1NlcnZpY2U9aCx0aGlzLmhlbHBlclNlcnZpY2U9bSx0aGlzLnJvdXRlcj1fLHRoaXMudXNlckNvdW50TGltaXRhdGlvbj0hMSx0aGlzLmxpY2Vuc2VLZXlE'@;
put 'YXRhPW51bGwsdGhpcy5fbGljZW5jZVN0YXRlPXFqLHRoaXMuYWxsRmVhdHVyZXNPbj17dmlld2VyX3Jvd3NfYWxsb3dlZDoxLzAsZWRpdG9yX3Jvd3NfYWxsb3dlZDoxLzAsc3RhZ2Vfcm93c19hbGxvd2VkOjEvMCxoaXN0b3J5X3Jvd3NfYWxsb3dlZDoxLzAsc3VibWl0X3Jvd3NfbGltaXQ6'@;
put 'MS8wLHRhYmxlc19pbl9saWJyYXJ5X2xpbWl0OjEvMCx2aWV3Ym94X2xpbWl0OjEvMCxsaW5lYWdlX2RhaWx5X2xpbWl0OjEvMCx2aWV3Ym94OiEwLGZpbGVVcGxvYWQ6ITAsZWRpdFJlY29yZDohMCxhZGRSZWNvcmQ6ITB9LHRoaXMuZnJlZVRpZXJMaWNlbmNlRGF0YT17ZGVtbzohMCxob3Rf'@;
put 'bGljZW5zZV9rZXk6dGhpcy5hcHBTdG9yZVNlcnZpY2UuZ2V0RGNBZGFwdGVyU2V0dGluZ3MoKT8uaG90TGljZW5jZUtleSx1c2Vyc19hbGxvd2VkOnRoaXMuX2xpY2VuY2VTdGF0ZS51c2Vyc19hbGxvd2VkfHwxLHZhbGlkX3VudGlsOktvKCkuYWRkKDEsInllYXIiKS5mb3JtYXQoIllZWVkt'@;
put 'TU0tREQiKSxzaXRlX2lkOiIiLHNpdGVfaWRfbXVsdGlwbGU6W119LHRoaXMuaXNBcHBBY3RpdmF0ZWQ9bmV3IE9lKG51bGwpLHRoaXMuaXNBcHBPdmVyQ2FwYWNpdHk9bmV3IE9lKCExKSx0aGlzLmN1cnJlbnRVc2VyQ2FuUmVnaXN0ZXI9bmV3IE9lKCExKSx0aGlzLmFwcExvY2tlZD1uZXcg'@;
put 'T2UoITEpLHRoaXMubGljZW5zZUV4cGlyZXNJbkRheXM9bmV3IE9lKG51bGwpLHRoaXMuaXNBcHBGcmVlVGllcj1uZXcgT2UoITEpLHRoaXMubGljZW5jZVByb2JsZW09bmV3IE9lKG51bGwpLHRoaXMuaG90X2xpY2Vuc2Vfa2V5PW5ldyBPZSh2b2lkIDApLHRoaXMubGljZW5jZVN0YXRlPW5l'@;
put 'dyBPZSh0aGlzLl9saWNlbmNlU3RhdGUpLHRoaXMuc2FzU2VydmljZS5pbmNvcnJlY3RTaXRlSWRFbWl0dGVyLnN1YnNjcmliZShPPT57aWYobnVsbCE9PXRoaXMuaXNBcHBBY3RpdmF0ZWQudmFsdWUmJiF0aGlzLmlzQXBwRnJlZVRpZXIudmFsdWUpe2NvbnN0IFg9YC9saWNlbnNpbmcva2V5'@;
put 'P2Vycm9yPW1pc3NtYXRjaCZtaXNzbWF0Y2hJZD0ke099JmZvcmNlPXRydWVgO3RoaXMubGljZW5jZVByb2JsZW0ubmV4dChYKSx0aGlzLmRlYWN0aXZhdGVBcHAoWCl9fSl9YWN0aXZhdGlvbihhKXt2YXIgZj10aGlzO3JldHVybiB5aShmdW5jdGlvbiooKXtmLmZyZWVUaWVyTGljZW5jZURh'@;
put 'dGEuaG90X2xpY2Vuc2Vfa2V5PWYuYXBwU3RvcmVTZXJ2aWNlLmdldERjQWRhcHRlclNldHRpbmdzKCk/LmhvdExpY2VuY2VLZXkseWllbGQgZi5zZXRTdGFydHVwc2VydmljZVJ1bGVzKGEpLHlpZWxkIGYubGljZW5zaW5nKGEuZ2xvYnZhcnMsYS5TWVNTSVRFKX0pKCl9c2V0U3RhcnR1cHNl'@;
put 'cnZpY2VSdWxlcyhhKXt0aGlzLl9saWNlbmNlU3RhdGUuZWRpdFJlY29yZD0iWUVTIiE9PWEuZ2xvYnZhcnNbMF0uRENfUkVTVFJJQ1RfRURJVFJFQ09SRH1saWNlbnNpbmcoYSxmKXt2YXIgZD10aGlzO3JldHVybiB5aShmdW5jdGlvbiooKXtpZighYXx8IWFbMF0pe2NvbnN0IG09J0Vycm9y'@;
put 'IGdldHRpbmcgIkdsb2J2YXJzIiBmcm9tIHN0YXJ0dXBzZXJ2aWNlIHJlc3BvbnNlLic7cmV0dXJuIGNvbnNvbGUuZXJyb3IobSksZC5pc0FwcEFjdGl2YXRlZC5uZXh0KCExKSx2b2lkIGQucm91dGVyLm5hdmlnYXRlQnlVcmwoYC9saWNlbnNpbmcva2V5P2Vycm9yPWludmFsaWQmZGV0YWls'@;
put 'cz0ke2J0b2EobSl9YCl9bGV0IGg9YVswXTtyZXR1cm4gdm9pZCAwPT09aC5MSUNFTkNFX0tFWXx8dm9pZCAwPT09aC5BQ1RJVkFUSU9OX0tFWXx8bnVsbD09aC5SRUdJU1RFUkNPVU5UfHxudWxsPT1oLklTUkVHSVNURVJFRD8oY29uc29sZS5lcnJvcigiU29tZSBvZiBnbG9idmFycyBhcmUg'@;
put 'bm90IHByZXNlbnQiKSxkLmlzQXBwQWN0aXZhdGVkLm5leHQoITEpLHZvaWQgZC5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRXJyb3IiLCJTb21lIG9mIHRoZSBnbG9idmFycyBhcmUgbm90IHByZXNlbnQgaW4gdGhlIHN0YXJ0dXBzZXJ2aWNlIikpOmguTElDRU5DRV9LRVkmJmguQUNU'@;
put 'SVZBVElPTl9LRVk/KGQubGljZW5jZUtleT1oLkxJQ0VOQ0VfS0VZLGQuYWN0aXZhdGlvbktleT1oLkFDVElWQVRJT05fS0VZLHZvaWQoeWllbGQgZC5kZWNyeXB0TGljZW5zZUtleShoLkxJQ0VOQ0VfS0VZLGguQUNUSVZBVElPTl9LRVkpLnRoZW4oZnVuY3Rpb24oKXt2YXIgbT15aShmdW5j'@;
put 'dGlvbiooXyl7eWllbGQgZC5hcHBsaWNhdGlvbkFjdGl2YXRpb24oXyxoLGYpfSk7cmV0dXJuIGZ1bmN0aW9uKF8pe3JldHVybiBtLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksZnVuY3Rpb24oKXt2YXIgbT15aShmdW5jdGlvbiooXyl7Y29uc3QgTz1gRXJyb3IgZGVjcnlwdGluZyBsaWNl'@;
put 'bnNlIGtleS4gJHtffWA7Y29uc29sZS5lcnJvcihPKTtjb25zdCBYPWAvbGljZW5zaW5nL2tleT9lcnJvcj1pbnZhbGlkJmRldGFpbHM9JHtidG9hKE8pfSZmb3JjZT10cnVlYDtkLmxpY2VuY2VQcm9ibGVtLm5leHQoWCksZC5yb3V0ZXIubmF2aWdhdGVCeVVybChYKSxzZXRUaW1lb3V0KCgp'@;
put 'PT5kLmFwcGxpY2F0aW9uQWN0aXZhdGlvbihkLmZyZWVUaWVyTGljZW5jZURhdGEsaCxmLCEwKSl9KTtyZXR1cm4gZnVuY3Rpb24oXyl7cmV0dXJuIG0uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSkpKTp5aWVsZCBkLmFwcGxpY2F0aW9uQWN0aXZhdGlvbihkLmZyZWVUaWVyTGljZW5jZURh'@;
put 'dGEsaCxmKX0pKCl9YXBwbGljYXRpb25BY3RpdmF0aW9uKGEsZixkLGgpe2h8fChoPSExKSx0aGlzLnNldFNpdGVJZChhKSwhYS5kZW1vJiZmJiZkJiZ0aGlzLmhhbmRsZVNpdGVJZE1pc3NtYXRjaChhLGYsZCxoKTtsZXQgbT12b2lkIDAhPT1hLmhvdF9saWNlbnNlX2tleT9hLmhvdF9saWNl'@;
put 'bnNlX2tleTp0aGlzLmhvdF9saWNlbnNlX2tleS52YWx1ZTttfHwobT10aGlzLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpPy5ob3RMaWNlbmNlS2V5KSx0aGlzLmhvdF9saWNlbnNlX2tleS5uZXh0KG0pLHRoaXMudXNlckNvdW50TGltaXRhdGlvbiYmdGhpcy5oYW5k'@;
put 'bGVVc2Vyc0FsbG93ZWQoYSksdGhpcy5saWNlbnNlS2V5RGF0YT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKGEpLHdpbmRvdy5hcHBpbmZvKCk7Y29uc3R7ZXhwaXJ5X2RhdGU6XyxkYXlzVG9FeHBpcnk6T309dGhpcy5jYWxjdWxhdGVFeHBpcnkoYSk7aWYod2luZG93LmxpY2Vuc2VF'@;
put 'eHBpcmVzSW49Tyx0aGlzLmxpY2Vuc2VFeHBpcmVzSW5EYXlzLm5leHQoTyksTzw9MClyZXR1cm4gY29uc29sZS5lcnJvcigiTGljZW5zZSBrZXkgaGFzIGV4cGlyZWQiKSx2b2lkKGYmJmQmJnRoaXMuaGFuZGxlRXhwaXJ5KF8sZixkLGgpKTt0aGlzLmlzQXBwRnJlZVRpZXIubmV4dCghIWEu'@;
put 'ZGVtbyksZiYmdGhpcy5oYW5kbGVVc2VyUmVnaXN0cmF0aW9uKGEsZixoKSx0aGlzLmRlY29kZUxpY2VuY2VGZWF0dXJlcyhhKSx0aGlzLmxpY2VuY2VTdGF0ZS5uZXh0KHRoaXMuX2xpY2VuY2VTdGF0ZSl9ZGVjb2RlTGljZW5jZUZlYXR1cmVzKGEpe2lmKCFhLmZlYXR1cmVzKXtpZihhLmRl'@;
put 'bW8pcmV0dXJuO3JldHVybiB2b2lkKHRoaXMuX2xpY2VuY2VTdGF0ZT10aGlzLmFsbEZlYXR1cmVzT24pfWNvbnN0IGY9YS5mZWF0dXJlcy5zcGxpdCgiLCIpO3RoaXMuX2xpY2VuY2VTdGF0ZT17Li4udGhpcy5fbGljZW5jZVN0YXRlLHZpZXdlcl9yb3dzX2FsbG93ZWQ6dGhpcy5wYXJzZUZl'@;
put 'YXR1cmVWYWx1ZShmW2cxLnZpZXdlcl9yb3dzX2FsbG93ZWRdKSxlZGl0b3Jfcm93c19hbGxvd2VkOnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZltnMS5lZGl0b3Jfcm93c19hbGxvd2VkXSksc3RhZ2Vfcm93c19hbGxvd2VkOnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZltnMS5zdGFnZV9yb3dz'@;
put 'X2FsbG93ZWRdKSxoaXN0b3J5X3Jvd3NfYWxsb3dlZDp0aGlzLnBhcnNlRmVhdHVyZVZhbHVlKGZbZzEuaGlzdG9yeV9yb3dzX2FsbG93ZWRdKSxzdWJtaXRfcm93c19saW1pdDp0aGlzLnBhcnNlRmVhdHVyZVZhbHVlKGZbZzEuc3VibWl0X3Jvd3NfbGltaXRdKSx0YWJsZXNfaW5fbGlicmFy'@;
put 'eV9saW1pdDp0aGlzLnBhcnNlRmVhdHVyZVZhbHVlKGZbZzEudGFibGVzX2luX2xpYnJhcnlfbGltaXRdKSx2aWV3Ym94X2xpbWl0OnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZltnMS52aWV3Ym94X2xpbWl0XSksbGluZWFnZV9kYWlseV9saW1pdDp0aGlzLnBhcnNlRmVhdHVyZVZhbHVlKGZb'@;
put 'ZzEubGluZWFnZV9kYWlseV9saW1pdF0pLHZpZXdib3g6dGhpcy5wYXJzZUZlYXR1cmVUb2dnbGUoZltnMS52aWV3Ym94XSksZmlsZVVwbG9hZDp0aGlzLnBhcnNlRmVhdHVyZVRvZ2dsZShmW2cxLmZpbGVVcGxvYWRdKSxlZGl0UmVjb3JkOnRoaXMucGFyc2VGZWF0dXJlVG9nZ2xlKGZbZzEu'@;
put 'ZWRpdFJlY29yZF0pLGFkZFJlY29yZDp0aGlzLnBhcnNlRmVhdHVyZVRvZ2dsZShmW2cxLmFkZFJlY29yZF0pfSx0aGlzLmxvZ2dlclNlcnZpY2UubG9nKCJMaWNlbmNlIHN0YXRlOiIsdGhpcy5fbGljZW5jZVN0YXRlKX1wYXJzZUZlYXR1cmVWYWx1ZShhKXtyZXR1cm4iLSI9PT1hPzEvMDpw'@;
put 'YXJzZUludChhKX1wYXJzZUZlYXR1cmVUb2dnbGUoYSl7cmV0dXJuISFwYXJzZUludChhKX1kZWNyeXB0TGljZW5zZUtleShhLGYpe3ZhciBkPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKCl7dmFyIGg9eWkoZnVuY3Rpb24qKG0sXyl7aWYoIXdpbmRvdy5jcnlwdG98fCF3aW5k'@;
put 'b3cuY3J5cHRvLnN1YnRsZSl0cnl7bGV0IGJlPWF0b2IoYS5zcGxpdCgiIikucmV2ZXJzZSgpLmpvaW4oIiIpKTttKEpTT04ucGFyc2UoYmUpKX1jYXRjaChiZSl7XygiRXJyb3IgcGFyc2luZyBodHRwIGxpY2Vuc2Uga2V5IGRhdGEuICIrYmUpfWxldCBYLE89eWllbGQgZC5iYXNlNjRUb0Fy'@;
put 'cmF5QnVmZmVyKGEpLmNhdGNoKGJlPT57XyhiZSl9KTtjb25zdCBhZT15aWVsZCBkLmJhc2U2NFRvQXJyYXlCdWZmZXIoZikuY2F0Y2goYmU9PntfKGJlKX0pO2lmKCFhZSlyZXR1cm4gdm9pZCBfKCJNaXNzaW5nIGFjdGl2YXRpb24ga2V5Iik7bGV0IHBlO1g9YWU7dHJ5e3BlPXlpZWxkIHdp'@;
put 'bmRvdy5jcnlwdG8uc3VidGxlLmltcG9ydEtleSgicGtjczgiLFgse25hbWU6IlJTQS1PQUVQIixoYXNoOiJTSEEtMjU2In0sITAsWyJkZWNyeXB0Il0pfWNhdGNoKGJlKXtfKCJVbmFibGUgdG8gaW1wb3J0IGRlY3J5cHRpb24ga2V5OiAiK2JlKX1pZihwZSlpZihPKXRyeXt3aW5kb3cuY3J5'@;
put 'cHRvLnN1YnRsZS5kZWNyeXB0KHtuYW1lOiJSU0EtT0FFUCIsaGFzaDp7bmFtZToiU0hBLTI1NiJ9fSxwZSxPKS50aGVuKGJlPT57bGV0IHhlPShuZXcgS3dlLlRleHREZWNvZGVyKS5kZWNvZGUoYmUpO3RyeXttKEpTT04ucGFyc2UoeGUpKX1jYXRjaChWZSl7XygiRXJyb3IgcGFyc2luZyBs'@;
put 'aWNlbnNlIGtleSBkYXRhLiAiK1ZlKX19LGJlPT57XyhiZSl9KX1jYXRjaChiZSl7XyhiZSl9ZWxzZSBfKCJMaWNlbnNlIGtleSBieXRlcyBtaXNzaW5nIik7ZWxzZSBfKCJVbmFibGUgdG8gaW1wb3J0IGRlY3J5cHRpb24ga2V5Iil9KTtyZXR1cm4gZnVuY3Rpb24obSxfKXtyZXR1cm4gaC5h'@;
put 'cHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKX1nZXRIb3RMaWNlbnNlS2V5KCl7cmV0dXJuIHRoaXMuaG90X2xpY2Vuc2Vfa2V5LnZhbHVlfWdldExpY2Vuc2VLZXlEYXRhKCl7cmV0dXJuIHRoaXMubGljZW5zZUtleURhdGF9ZGVhY3RpdmF0ZUFwcChhKXt0aGlzLl9saWNlbmNlU3RhdGU9cWos'@;
put 'dGhpcy5hcHBsaWNhdGlvbkFjdGl2YXRpb24odGhpcy5mcmVlVGllckxpY2VuY2VEYXRhKSxhJiZ0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGEpfWNoZWNrTGluZWFnZUxpbWl0KGEpe2lmKHRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmxpbmVhZ2VfZGFpbHlfbGltaXQ9PT0xLzApcmV0dXJu'@;
put 'ITE7Y29uc3QgZj1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgibGluZWFnZV9yZW5kZXJzIiksZD1LbygpLnZhbHVlT2YoKTtpZighZilyZXR1cm4gYXx8dGhpcy5zZXRMaW5lYWdlUmVuZGVyKGQsMSksITE7Y29uc3QgaD1wYXJzZUludChmLnNwbGl0KCIsIilbMF0pLG09cGFyc2VJbnQoZi5zcGxp'@;
put 'dCgiLCIpWzFdKTtyZXR1cm4gS28oaCkuaXNTYW1lKEtvKCksImRheSIpP20+PXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmxpbmVhZ2VfZGFpbHlfbGltaXR8fChhfHx0aGlzLnNldExpbmVhZ2VSZW5kZXIoZCxtKzEpLCExKTooYXx8dGhpcy5zZXRMaW5lYWdlUmVuZGVyKGQsMSksITEpfXNl'@;
put 'dExpbmVhZ2VSZW5kZXIoYSxmKXtsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgibGluZWFnZV9yZW5kZXJzIixgJHthfSwke2Z9YCl9YmFzZTY0VG9BcnJheUJ1ZmZlcihhKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oKXt2YXIgZj15aShmdW5jdGlvbiooZCxoKXtkKGFpZS5KKGEpKX0pO3Jl'@;
put 'dHVybiBmdW5jdGlvbihkLGgpe3JldHVybiBmLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpfWFycmF5QnVmZmVyVG9CYXNlNjQoYSl7cmV0dXJuIG5ldyBQcm9taXNlKChmLGQpPT57ZihhaWUuYyhhKSl9KX1zZXRTaXRlSWQoYSl7YS5zaXRlX2lkX211bHRpcGxlP3RoaXMuc2FzU2Vydmlj'@;
put 'ZS5zZXRMaWNlbnNlU2l0ZUlkKGEuc2l0ZV9pZF9tdWx0aXBsZSk6YS5zaXRlX2lkJiZ0aGlzLnNhc1NlcnZpY2Uuc2V0TGljZW5zZVNpdGVJZChhLnNpdGVfaWQpfWhhbmRsZVNpdGVJZE1pc3NtYXRjaChhLGYsZCxoKXtsZXQgbT0hMSxfPSExO2lmKCghYS5zaXRlX2lkfHxhLnNpdGVfaWQh'@;
put 'PT1kKSYmKG09ITApLCghYS5zaXRlX2lkX211bHRpcGxlfHwhYS5zaXRlX2lkX211bHRpcGxlLmluY2x1ZGVzKGQpKSYmKF89ITApLG0mJl8pcmV0dXJuIGNvbnNvbGUuZXJyb3IoIlRoZSBrZXkgcHJvdmlkZWQgaXMgZm9yIGRpZmZlcmVudCBvcmdhbml6YXRpb24uIiksdm9pZCBzZXRUaW1l'@;
put 'b3V0KCgpPT57Y29uc3QgTz0iL2xpY2Vuc2luZy9rZXk/ZXJyb3I9bWlzc21hdGNoJmZvcmNlPXRydWUiO3RoaXMubGljZW5jZVByb2JsZW0ubmV4dChPKSx0aGlzLl9saWNlbmNlU3RhdGU9cWosdGhpcy5hcHBsaWNhdGlvbkFjdGl2YXRpb24odGhpcy5mcmVlVGllckxpY2VuY2VEYXRhLGYs'@;
put 'ZCwhMCksaHx8dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChPKX0pfWNhbGN1bGF0ZUV4cGlyeShhKXtsZXQgZj1LbyhhLnZhbGlkX3VudGlsLCJZWVlZLU1NLUREIikuc3RhcnRPZigiZGF5IiksZD1LbygpLnN0YXJ0T2YoImRheSIpLGg9Zi5kaWZmKGQsImRheXMiKTtyZXR1cm57ZXhwaXJ5'@;
put 'X2RhdGU6ZixkYXlzVG9FeHBpcnk6aH19aGFuZGxlRXhwaXJ5KGEsZixkLGgpe3NldFRpbWVvdXQoKCk9Pntjb25zdCBtPWAvbGljZW5zaW5nL2tleT9mb3JjZT10cnVlJmVycm9yPWV4cGlyZWQmZGV0YWlscz0ke2J0b2EoIkV4cGlyeSBkYXRlOiAiK2EuZm9ybWF0KCJERC9NTS9ZWVlZIikp'@;
put 'fWA7dGhpcy5saWNlbmNlUHJvYmxlbS5uZXh0KG0pLHRoaXMuYXBwbGljYXRpb25BY3RpdmF0aW9uKHRoaXMuZnJlZVRpZXJMaWNlbmNlRGF0YSxmLGQsITApLGh8fHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwobSl9KX1oYW5kbGVVc2Vyc0FsbG93ZWQoYSl7YS5kZW1vJiZ2b2lkIDAhPT10'@;
put 'aGlzLl9saWNlbmNlU3RhdGUudXNlcnNfYWxsb3dlZCYmKGEudXNlcnNfYWxsb3dlZD1hLnVzZXJzX2FsbG93ZWQ+MD9hLnVzZXJzX2FsbG93ZWQ6dGhpcy5fbGljZW5jZVN0YXRlLnVzZXJzX2FsbG93ZWQpLHRoaXMuX2xpY2VuY2VTdGF0ZS51c2Vyc19hbGxvd2VkPWEudXNlcnNfYWxsb3dl'@;
put 'ZH1oYW5kbGVVc2VyUmVnaXN0cmF0aW9uKGEsZixkKXtpZih0aGlzLnVzZXJDb3VudExpbWl0YXRpb24mJihmLlJFR0lTVEVSQ09VTlQ+YS51c2Vyc19hbGxvd2VkPyhjb25zb2xlLndhcm4oIkFwcCBoYXMgbW9yZSB1c2VycyByZWdpc3RlcmVkIHRoZW4gbGljZW5zZWQuIiksdGhpcy5pc0Fw'@;
put 'cE92ZXJDYXBhY2l0eS5uZXh0KCEwKSk6Zi5SRUdJU1RFUkNPVU5UPT09YS51c2Vyc19hbGxvd2VkJiZjb25zb2xlLndhcm4oIkFwcCBoYXMgaGl0IGxpbWl0IG9mIHVzZXJzIHJlZ2lzdGVyZWQuIikpLDEhPT1mLklTUkVHSVNURVJFRClyZXR1cm4gZi5SRUdJU1RFUkNPVU5UPGEudXNlcnNf'@;
put 'YWxsb3dlZHx8IXRoaXMudXNlckNvdW50TGltaXRhdGlvbj8oY29uc29sZS5sb2coIlVzZXIgY2FuIHJlZ2lzdGVyIiksdGhpcy5jdXJyZW50VXNlckNhblJlZ2lzdGVyLm5leHQoITApLHRoaXMuaXNBcHBBY3RpdmF0ZWQubmV4dCghMSksdm9pZChkfHx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5'@;
put 'VXJsKCIvbGljZW5zaW5nL3JlZ2lzdGVyIikpKToodGhpcy5jdXJyZW50VXNlckNhblJlZ2lzdGVyLm5leHQoITEpLHRoaXMuaXNBcHBBY3RpdmF0ZWQubmV4dCghMSksdm9pZChkfHx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvbGljZW5zaW5nL2xpbWl0IikpKTt0aGlzLmlzQXBwQWN0'@;
put 'aXZhdGVkLm5leHQoITApfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShzcih5MSksc3IoSXYpLHNyKFJzKSxzcihwbCksc3IoUHUpLHNyKExhKSl9LGwuXHUwMjc1cHJvdj1ocih7dG9rZW46bCxmYWN0b3J5OmwuXHUwMjc1ZmFjLHByb3ZpZGVkSW46'@;
put 'InJvb3QifSksbH0pKCksd0Q9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhLGYsZCxoLG0pe3RoaXMubGljZW5jZVNlcnZpY2U9YSx0aGlzLmV2ZW50U2VydmljZT1mLHRoaXMuc2FzU2VydmljZT1kLHRoaXMubG9nZ2VyU2VydmljZT1oLHRoaXMucm91dGVyPW0sdGhpcy5zeXNzaXRlPW5l'@;
put 'dyBPZShudWxsKSx0aGlzLmVudmlyb25tZW50SW5mbz1udWxsLHRoaXMuc3Vic2NyaWJlKCksdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZShfPT57XyBpbnN0YW5jZW9mIGk0JiYiL2RlcGxveSI9PT1fLnVybCYmdGhpcy5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQoKX0pfXNh'@;
put 'c1NlcnZpY2VJbml0KCl7dGhpcy5zYXNTZXJ2aWNlLnNhc1NlcnZpY2VJbml0KCl9c3Vic2NyaWJlKCl7dGhpcy5zYXNTZXJ2aWNlLmxvYWRTdGFydHVwU2VydmljZUVtaXR0ZXIuc3Vic2NyaWJlKCgpPT57dGhpcy5zdGFydFVwRGF0YSgpfSksdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3RTaXRl'@;
put 'SWRFbWl0dGVyLnN1YnNjcmliZShhPT57dGhpcy5wYXRjaFN5c3NpdGUoYSl9KX1nZXRFbnZpcm9ubWVudEluZm8oKXtyZXR1cm4gdGhpcy5lbnZpcm9ubWVudEluZm99cGF0Y2hTeXNzaXRlKGEpe2xldCBmPXRoaXMuc3lzc2l0ZS5nZXRWYWx1ZSgpO2YmJihmLmluY2x1ZGVzKGEpfHwoZi5w'@;
put 'dXNoKGEpLHRoaXMuc3lzc2l0ZS5uZXh0KGYpKSl9c3RhcnRVcERhdGEoKXt2YXIgYT10aGlzO3JldHVybiB5aShmdW5jdGlvbiooKXtsZXQgZj0hMTt5aWVsZCBhLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3N0YXJ0dXBzZXJ2aWNlIixudWxsKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGQ9'@;
put 'eWkoZnVuY3Rpb24qKGgpe2Euc3lzc2l0ZS5uZXh0KFtoLlNZU1NJVEVdKTtsZXQgbT1bXTtpZigoIWguZ2xvYnZhcnN8fGguZ2xvYnZhcnMmJiFoLmdsb2J2YXJzWzBdKSYmbS5wdXNoKCJHbG9idmFycyIpLGguc2FzZGF0YXNldHN8fG0ucHVzaCgiU2FzZGF0YXNldHMiKSxoLnNhc2xpYnN8'@;
put 'fG0ucHVzaCgiU2FzbGlicyIpLG0ubGVuZ3RoPjApcmV0dXJuIGY9ITAsYS5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRXJyb3IiLGAke20uam9pbigiLCAiKX0gYXJlIG5vdCBwcmVzZW50IGluIHRoZSBzdGFydHVwc2VydmljZWApLHZvaWQgYS5saWNlbmNlU2VydmljZS5pc0FwcEFj'@;
put 'dGl2YXRlZC5uZXh0KCExKTthLmVudmlyb25tZW50SW5mbz17U1lTU0lURTpoLlNZU1NJVEUsU1lTU0NQTDpoLlNZU1NDUEwsU1lTVENQSVBIT1NUTkFNRTpoLlNZU1RDUElQSE9TVE5BTUUsU1lTVkxPTkc6aC5TWVNWTE9ORyxNRU1TSVpFOmguTUVNU0laRSxTWVNQUk9DRVNTTU9ERTpoLlNZ'@;
put 'U1BST0NFU1NNT0RFLFNZU0hPU1ROQU1FOmguU1lTSE9TVE5BTUUsU1lTSE9TVElORk9MT05HOmguU1lTSE9TVElORk9MT05HLFNZU0VOQ09ESU5HOmguU1lTRU5DT0RJTkcsQVVUT0VYRUM6aC5BVVRPRVhFQyxJU0FETUlOOmguZ2xvYnZhcnNbMF0uSVNBRE1JTixEQ19BRE1JTl9HUk9VUDpo'@;
put 'Lmdsb2J2YXJzWzBdLkRDX0FETUlOX0dST1VQfTtsZXQgWCxhZSxfPWguc2FzZGF0YXNldHMsTz17fTtmb3IobGV0IFZlIG9mIF8pT1tWZS5MSUJSRUZdfHwoT1tWZS5MSUJSRUZdPVtdKSxPW1ZlLkxJQlJFRl0ucHVzaChWZS5EU04pO2xldCBwZT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5'@;
put 'KE8pKSxiZT1bXTtmb3IobGV0IFZlIG9mIE9iamVjdC5rZXlzKHBlKSliZS5wdXNoKHtMSUJSQVJZUkVGOlZlLHRhYmxlczpwZVtWZV19KTtsZXQgeGU9YmU7WD1PLGFlPU9iamVjdC5rZXlzKE8pLHZvaWQgMCE9PVgmJihKbi5lZGl0b3IubGlic0FuZFRhYmxlcz1YKSxKbi5lZGl0b3IudHJl'@;
put 'ZU5vZGVMaWJyYXJpZXM9eGUsSm4uZWRpdG9yLmxpYnJhcmllcz1hZSxKbi5lZGl0b3Iuc3RhcnR1cFNldD0hMCx5aWVsZCBhLmxpY2VuY2VTZXJ2aWNlLmFjdGl2YXRpb24oaCl9KTtyZXR1cm4gZnVuY3Rpb24oaCl7cmV0dXJuIGQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSkuY2F0Y2go'@;
put 'ZD0+e2Y9ITAsYS5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRXJyb3IiLCJUaGVyZSBpcyBhbiBpc3N1ZSB3aXRoIHN0YXJ0dXBzZXJ2aWNlIHJlc3BvbnNlIiksYS5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZC5uZXh0KCExKX0pLGEubG9nZ2VyU2VydmljZS5sb2coIkFjdGl2'@;
put 'YXRlZDoiLGEubGljZW5jZVNlcnZpY2UuaXNBcHBBY3RpdmF0ZWQudmFsdWUpLGZ8fChhLmV2ZW50U2VydmljZS5zdGFydHVwRGF0YUxvYWRlZCgpLGEubGljZW5jZVNlcnZpY2UuaXNBcHBBY3RpdmF0ZWQudmFsdWU/YS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJsaWNlbnNpbmciKSYmYS5yb3V0'@;
put 'ZXIubmF2aWdhdGVCeVVybCgiL2hvbWUiKTohYS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJkZXBsb3kiKSYmIWEucm91dGVyLnVybC5pbmNsdWRlcygibGljZW5zaW5nIikmJmEucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9saWNlbnNpbmcva2V5P2Vycm9yPW1pc3NpbmcmZm9yY2U9dHJ1ZSIpKX0p'@;
put 'KCl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHNyKGIxKSxzcihScyksc3IocGwpLHNyKHkxKSxzcihMYSkpfSxsLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmwsZmFjdG9yeTpsLlx1MDI3NWZhY30pLGx9KSgpO2NsYXNzIFh4ZXtjb25zdHJ1Y3Rvcihj'@;
put 'LGEpe3RoaXMuZm49Yyx0aGlzLnN1YnNjcmlwdGlvbnM9YX11bnN1YnNjcmliZSgpe2NvbnN0IGM9dGhpcy5zdWJzY3JpcHRpb25zLmluZGV4T2YodGhpcyk7LTEhPT1jJiZ0aGlzLnN1YnNjcmlwdGlvbnMuc3BsaWNlKGMsMSl9fWZ1bmN0aW9uIHU0KGwpe3JldHVybiBudWxsIT1sJiYib2Jq'@;
put 'ZWN0Ij09dHlwZW9mIGwmJiEwPT09bFsiQEBmdW5jdGlvbmFsL3BsYWNlaG9sZGVyIl19ZnVuY3Rpb24gSzIobCl7cmV0dXJuIGZ1bmN0aW9uIGMoYSl7cmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RofHx1NChhKT9jOmwuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBVdihsKXty'@;
put 'ZXR1cm4gZnVuY3Rpb24gYyhhLGYpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIGM7Y2FzZSAxOnJldHVybiB1NChhKT9jOksyKGZ1bmN0aW9uKGQpe3JldHVybiBsKGEsZCl9KTtkZWZhdWx0OnJldHVybiB1NChhKSYmdTQoZik/Yzp1NChhKT9LMihmdW5jdGlvbihk'@;
put 'KXtyZXR1cm4gbChkLGYpfSk6dTQoZik/SzIoZnVuY3Rpb24oZCl7cmV0dXJuIGwoYSxkKX0pOmwoYSxmKX19fWNvbnN0IENEPVV2KGZ1bmN0aW9uKGMsYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBjfHxudWxsIT1hJiYoYS5jb25zdHJ1Y3Rvcj09PWN8fCJPYmplY3QiPT09Yy5uYW1lJiYib2Jq'@;
put 'ZWN0Ij09dHlwZW9mIGEpfSk7ZnVuY3Rpb24gU0QobCxjKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGMsbCl9dmFyIHZvZT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2NvbnN0IHlvZT1mdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEFyZ3VtZW50c10i'@;
put 'PT09dm9lLmNhbGwoYXJndW1lbnRzKT9mdW5jdGlvbihjKXtyZXR1cm4iW29iamVjdCBBcmd1bWVudHNdIj09PXZvZS5jYWxsKGMpfTpmdW5jdGlvbihjKXtyZXR1cm4gU0QoImNhbGxlZSIsYyl9fSgpLHRBZT1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihjKXtyZXR1cm4gbnVsbCE9YyYmYy5s'@;
put 'ZW5ndGg+PTAmJiJbb2JqZWN0IEFycmF5XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYyl9O2Z1bmN0aW9uIGJvZShsKXtyZXR1cm4iW29iamVjdCBTdHJpbmddIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsKX12YXIgaUFlPUsyKGZ1bmN0aW9uKGMpe3Jl'@;
put 'dHVybiBudWxsIT1jJiYiZnVuY3Rpb24iPT10eXBlb2YgY1siZmFudGFzeS1sYW5kL2VtcHR5Il0/Y1siZmFudGFzeS1sYW5kL2VtcHR5Il0oKTpudWxsIT1jJiZudWxsIT1jLmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgYy5jb25zdHJ1Y3RvclsiZmFudGFzeS1sYW5kL2VtcHR5'@;
put 'Il0/Yy5jb25zdHJ1Y3RvclsiZmFudGFzeS1sYW5kL2VtcHR5Il0oKTpudWxsIT1jJiYiZnVuY3Rpb24iPT10eXBlb2YgYy5lbXB0eT9jLmVtcHR5KCk6bnVsbCE9YyYmbnVsbCE9Yy5jb25zdHJ1Y3RvciYmImZ1bmN0aW9uIj09dHlwZW9mIGMuY29uc3RydWN0b3IuZW1wdHk/Yy5jb25zdHJ1'@;
put 'Y3Rvci5lbXB0eSgpOnRBZShjKT9bXTpib2UoYyk/IiI6ZnVuY3Rpb24gbkFlKGwpe3JldHVybiJbb2JqZWN0IE9iamVjdF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGwpfShjKT97fTp5b2UoYyk/ZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpOmZ1bmN0aW9uIHJB'@;
put 'ZShsKXt2YXIgYz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobCk7cmV0dXJuIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIj09PWN8fCJbb2JqZWN0IEludDhBcnJheV0iPT09Y3x8IltvYmplY3QgVWludDhBcnJheV0iPT09Y3x8IltvYmplY3QgSW50MTZBcnJheV0iPT09Y3x8'@;
put 'IltvYmplY3QgVWludDE2QXJyYXldIj09PWN8fCJbb2JqZWN0IEludDMyQXJyYXldIj09PWN8fCJbb2JqZWN0IFVpbnQzMkFycmF5XSI9PT1jfHwiW29iamVjdCBGbG9hdDMyQXJyYXldIj09PWN8fCJbb2JqZWN0IEZsb2F0NjRBcnJheV0iPT09Y3x8IltvYmplY3QgQmlnSW50NjRBcnJheV0i'@;
put 'PT09Y3x8IltvYmplY3QgQmlnVWludDY0QXJyYXldIj09PWN9KGMpP2MuY29uc3RydWN0b3IuZnJvbSgiIik6dm9pZCAwfSk7Y29uc3Qgb0FlPWlBZTtmdW5jdGlvbiBfb2UobCl7Zm9yKHZhciBhLGM9W107IShhPWwubmV4dCgpKS5kb25lOyljLnB1c2goYS52YWx1ZSk7cmV0dXJuIGN9ZnVu'@;
put 'Y3Rpb24gd29lKGwsYyxhKXtmb3IodmFyIGY9MCxkPWEubGVuZ3RoO2Y8ZDspe2lmKGwoYyxhW2ZdKSlyZXR1cm4hMDtmKz0xfXJldHVybiExfWNvbnN0IGJ6PSJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuaXM/T2JqZWN0LmlzOmZ1bmN0aW9uIGxBZShsLGMpe3JldHVybiBsPT09Yz8wIT09'@;
put 'bHx8MS9sPT0xL2M6bCE9bCYmYyE9Y307dmFyIHNBZT0he3RvU3RyaW5nOm51bGx9LnByb3BlcnR5SXNFbnVtZXJhYmxlKCJ0b1N0cmluZyIpLENvZT1bImNvbnN0cnVjdG9yIiwidmFsdWVPZiIsImlzUHJvdG90eXBlT2YiLCJ0b1N0cmluZyIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiaGFz'@;
put 'T3duUHJvcGVydHkiLCJ0b0xvY2FsZVN0cmluZyJdLFNvZT1mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHMucHJvcGVydHlJc0VudW1lcmFibGUoImxlbmd0aCIpfSgpLHVBZT1mdW5jdGlvbihjLGEpe2Zvcih2YXIgZj0wO2Y8Yy5sZW5ndGg7KXtpZihjW2ZdPT09YSlyZXR1cm4hMDtmKz0x'@;
put 'fXJldHVybiExfTtjb25zdCBNb2U9SzIoImZ1bmN0aW9uIiE9dHlwZW9mIE9iamVjdC5rZXlzfHxTb2U/ZnVuY3Rpb24oYyl7aWYoT2JqZWN0KGMpIT09YylyZXR1cm5bXTt2YXIgYSxmLGQ9W10saD1Tb2UmJnlvZShjKTtmb3IoYSBpbiBjKVNEKGEsYykmJighaHx8Imxlbmd0aCIhPT1hKSYm'@;
put 'KGRbZC5sZW5ndGhdPWEpO2lmKHNBZSlmb3IoZj1Db2UubGVuZ3RoLTE7Zj49MDspU0QoYT1Db2VbZl0sYykmJiF1QWUoZCxhKSYmKGRbZC5sZW5ndGhdPWEpLGYtPTE7cmV0dXJuIGR9OmZ1bmN0aW9uKGMpe3JldHVybiBPYmplY3QoYykhPT1jP1tdOk9iamVjdC5rZXlzKGMpfSksa29lPUsy'@;
put 'KGZ1bmN0aW9uKGMpe3JldHVybiBudWxsPT09Yz8iTnVsbCI6dm9pZCAwPT09Yz8iVW5kZWZpbmVkIjpPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYykuc2xpY2UoOCwtMSl9KTtmdW5jdGlvbiBFb2UobCxjLGEsZil7dmFyIGQ9X29lKGwpO2Z1bmN0aW9uIG0oXyxPKXtyZXR1cm4g'@;
put 'X3ooXyxPLGEuc2xpY2UoKSxmLnNsaWNlKCkpfXJldHVybiF3b2UoZnVuY3Rpb24oXyxPKXtyZXR1cm4hd29lKG0sTyxfKX0sX29lKGMpLGQpfWZ1bmN0aW9uIF96KGwsYyxhLGYpe2lmKGJ6KGwsYykpcmV0dXJuITA7dmFyIGQ9a29lKGwpO2lmKGQhPT1rb2UoYykpcmV0dXJuITE7aWYoImZ1'@;
put 'bmN0aW9uIj09dHlwZW9mIGxbImZhbnRhc3ktbGFuZC9lcXVhbHMiXXx8ImZ1bmN0aW9uIj09dHlwZW9mIGNbImZhbnRhc3ktbGFuZC9lcXVhbHMiXSlyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgbFsiZmFudGFzeS1sYW5kL2VxdWFscyJdJiZsWyJmYW50YXN5LWxhbmQvZXF1YWxzIl0oYykm'@;
put 'JiJmdW5jdGlvbiI9PXR5cGVvZiBjWyJmYW50YXN5LWxhbmQvZXF1YWxzIl0mJmNbImZhbnRhc3ktbGFuZC9lcXVhbHMiXShsKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgbC5lcXVhbHN8fCJmdW5jdGlvbiI9PXR5cGVvZiBjLmVxdWFscylyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgbC5lcXVh'@;
put 'bHMmJmwuZXF1YWxzKGMpJiYiZnVuY3Rpb24iPT10eXBlb2YgYy5lcXVhbHMmJmMuZXF1YWxzKGwpO3N3aXRjaChkKXtjYXNlIkFyZ3VtZW50cyI6Y2FzZSJBcnJheSI6Y2FzZSJPYmplY3QiOmlmKCJmdW5jdGlvbiI9PXR5cGVvZiBsLmNvbnN0cnVjdG9yJiYiUHJvbWlzZSI9PT1mdW5jdGlv'@;
put 'biBhQWUobCl7dmFyIGM9U3RyaW5nKGwpLm1hdGNoKC9eZnVuY3Rpb24gKFx3KikvKTtyZXR1cm4gbnVsbD09Yz8iIjpjWzFdfShsLmNvbnN0cnVjdG9yKSlyZXR1cm4gbD09PWM7YnJlYWs7Y2FzZSJCb29sZWFuIjpjYXNlIk51bWJlciI6Y2FzZSJTdHJpbmciOmlmKHR5cGVvZiBsIT10eXBl'@;
put 'b2YgY3x8IWJ6KGwudmFsdWVPZigpLGMudmFsdWVPZigpKSlyZXR1cm4hMTticmVhaztjYXNlIkRhdGUiOmlmKCFieihsLnZhbHVlT2YoKSxjLnZhbHVlT2YoKSkpcmV0dXJuITE7YnJlYWs7Y2FzZSJFcnJvciI6cmV0dXJuIGwubmFtZT09PWMubmFtZSYmbC5tZXNzYWdlPT09Yy5tZXNzYWdl'@;
put 'O2Nhc2UiUmVnRXhwIjppZihsLnNvdXJjZSE9PWMuc291cmNlfHxsLmdsb2JhbCE9PWMuZ2xvYmFsfHxsLmlnbm9yZUNhc2UhPT1jLmlnbm9yZUNhc2V8fGwubXVsdGlsaW5lIT09Yy5tdWx0aWxpbmV8fGwuc3RpY2t5IT09Yy5zdGlja3l8fGwudW5pY29kZSE9PWMudW5pY29kZSlyZXR1cm4h'@;
put 'MX1mb3IodmFyIGg9YS5sZW5ndGgtMTtoPj0wOyl7aWYoYVtoXT09PWwpcmV0dXJuIGZbaF09PT1jO2gtPTF9c3dpdGNoKGQpe2Nhc2UiTWFwIjpyZXR1cm4gbC5zaXplPT09Yy5zaXplJiZFb2UobC5lbnRyaWVzKCksYy5lbnRyaWVzKCksYS5jb25jYXQoW2xdKSxmLmNvbmNhdChbY10pKTtj'@;
put 'YXNlIlNldCI6cmV0dXJuIGwuc2l6ZT09PWMuc2l6ZSYmRW9lKGwudmFsdWVzKCksYy52YWx1ZXMoKSxhLmNvbmNhdChbbF0pLGYuY29uY2F0KFtjXSkpO2Nhc2UiQXJndW1lbnRzIjpjYXNlIkFycmF5IjpjYXNlIk9iamVjdCI6Y2FzZSJCb29sZWFuIjpjYXNlIk51bWJlciI6Y2FzZSJTdHJp'@;
put 'bmciOmNhc2UiRGF0ZSI6Y2FzZSJFcnJvciI6Y2FzZSJSZWdFeHAiOmNhc2UiSW50OEFycmF5IjpjYXNlIlVpbnQ4QXJyYXkiOmNhc2UiVWludDhDbGFtcGVkQXJyYXkiOmNhc2UiSW50MTZBcnJheSI6Y2FzZSJVaW50MTZBcnJheSI6Y2FzZSJJbnQzMkFycmF5IjpjYXNlIlVpbnQzMkFycmF5'@;
put 'IjpjYXNlIkZsb2F0MzJBcnJheSI6Y2FzZSJGbG9hdDY0QXJyYXkiOmNhc2UiQXJyYXlCdWZmZXIiOmJyZWFrO2RlZmF1bHQ6cmV0dXJuITF9dmFyIG09TW9lKGwpO2lmKG0ubGVuZ3RoIT09TW9lKGMpLmxlbmd0aClyZXR1cm4hMTt2YXIgXz1hLmNvbmNhdChbbF0pLE89Zi5jb25jYXQoW2Nd'@;
put 'KTtmb3IoaD1tLmxlbmd0aC0xO2g+PTA7KXt2YXIgWD1tW2hdO2lmKCFTRChYLGMpfHwhX3ooY1tYXSxsW1hdLF8sTykpcmV0dXJuITE7aC09MX1yZXR1cm4hMH1jb25zdCBoQWU9VXYoZnVuY3Rpb24oYyxhKXtyZXR1cm4gX3ooYyxhLFtdLFtdKX0pLHhvZT1LMihmdW5jdGlvbihjKXtyZXR1'@;
put 'cm4gbnVsbCE9YyYmaEFlKGMsb0FlKGMpKX0pO2Z1bmN0aW9uIEhDKGwpe3JldHVybiBudWxsPT1sfWZ1bmN0aW9uIGM0KGwpe3JldHVybiBIQyhsKXx8eG9lKGwpfWZ1bmN0aW9uIHd6KGwpe3JldHVybiBDRChTdHJpbmcsbCl9ZnVuY3Rpb24gTUQobCl7cmV0dXJuIENEKE9iamVjdCxsKX1m'@;
put 'dW5jdGlvbiBUb2UobCl7cmV0dXJuIENEKE1hcCxsKX1mdW5jdGlvbiBPb2UobCxjKXtyZXR1cm4gbCE9PWN9ZnVuY3Rpb24gRG9lKGwsYyl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGwpPT09SlNPTi5zdHJpbmdpZnkoYyl9ZnVuY3Rpb24gSW9lKGwpe2NvbnN0IGM9bmV3IE1hcDtmb3IoY29u'@;
put 'c3RbYSxmXW9mIGwpVG9lKGYpP2Muc2V0KGEsSW9lKGYpKTpjLnNldChhLGYpO3JldHVybiBjfWZ1bmN0aW9uIF9BZShsKXtzd2l0Y2goITApe2Nhc2UgVG9lKGwpOnJldHVybiBJb2UobCk7Y2FzZSBNRChsKSYmIUFycmF5LmlzQXJyYXkobCk6cmV0dXJuIElnKHt9LGwpO2RlZmF1bHQ6cmV0'@;
put 'dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobCkpfX1mdW5jdGlvbiBJZyguLi5sKXtjb25zdCBjPXt9O3JldHVybiBsLm1hcChhPT5NRChhKT97Li4uYX06e30pLmZvckVhY2goYT0+e09iamVjdC5rZXlzKGEpLmZvckVhY2goZj0+e2NvbnN0IGQ9YVtmXTtjW2ZdPUFycmF5LmlzQXJy'@;
put 'YXkoZCk/QXJyYXkuZnJvbShkKTpNRChkKT9JZyhjW2ZdfHx7fSxkKTpkfSl9KSxjfWZ1bmN0aW9uIExvZShsPXdpbmRvdyl7cmV0dXJuIUhDKGwpfWxldCBrRCxQb2UsQ3osU3o7ZnVuY3Rpb24gRm9lKGw9ITApe2lmKCFsfHwha0Qpe2NvbnN0IGM9ZG9jdW1lbnQmJmRvY3VtZW50LnF1ZXJ5'@;
put 'U2VsZWN0b3IoIltuZy12ZXJzaW9uXSIpO2tEPWM/IiIrYy5nZXRBdHRyaWJ1dGUoIm5nLXZlcnNpb24iKTp2b2lkIDB9cmV0dXJuIGtEfWZ1bmN0aW9uIGtBZShsPSEwKXtyZXR1cm4gbCYma0R8fChQb2U9d2luZG93Py5hbmd1bGFyPy52ZXJzaW9uPy5mdWxsKSxQb2V9ZnVuY3Rpb24gSG9l'@;
put 'KGw9ITApe3JldHVybiBsJiZDenx8KEN6PXdpbmRvdz8uQ0RTPy5fcmVhY3Q/LnZlcnNpb24/d2luZG93LkNEUy5fcmVhY3QudmVyc2lvbjpkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJbZGF0YS1yZWFjdHJvb3RdLCBbZGF0YS1yZWFjdGlkXSIpPyJ1bmtub3duIHZlcnNpb24iOnZvaWQgMCks'@;
put 'Q3p9ZnVuY3Rpb24gTm9lKGw9ITApe2lmKCFsfHwhU3ope2NvbnN0IGM9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiKiIpO2xldCBhO2ZvcihsZXQgZj0wO2Y8Yy5sZW5ndGg7ZisrKWlmKGNbZl0uX192dWVfXyl7YT1jW2ZdO2JyZWFrfVN6PWE/InVua25vd24gdmVyc2lvbiI6dm9pZCAw'@;
put 'fXJldHVybiBTen1mdW5jdGlvbiBSZyhsKXtyZXR1cm4gbC5yZXBsYWNlKC9bQS1aXS9nLGM9PiItIitjLnRvTG93ZXJDYXNlKCkpfWZ1bmN0aW9uIGpvZShsKXtyZXR1cm4gbC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStsLnNsaWNlKDEpfWNvbnN0IElBZT1uZXcgY2xhc3N7Y29uc3RydWN0'@;
put 'b3IoKXtpZih0aGlzLnN1cHBvcnRzPXtqczohMH0sIWRvY3VtZW50LmJvZHkuaGFzQXR0cmlidXRlKCJjZHMtc3VwcG9ydHMiKXx8Im5vLWpzIj09PWRvY3VtZW50LmJvZHkuZ2V0QXR0cmlidXRlKCJjZHMtc3VwcG9ydHMiKSl7Y29uc3QgbD1SZyhPYmplY3Qua2V5cyh0aGlzLnN1cHBvcnRz'@;
put 'KS5yZWR1Y2UoKGMsYSk9PmAke2N9ICR7dGhpcy5zdXBwb3J0c1thXT9hOiJuby0iK2F9YCwiIikpLnRyaW0oKTtkb2N1bWVudC5ib2R5LnNldEF0dHJpYnV0ZSgiY2RzLXN1cHBvcnRzIixsKX19fTtmdW5jdGlvbiBab2UobCxjKXtzd2l0Y2gobCl7Y2FzZSAwOnJldHVybiBmdW5jdGlvbigp'@;
put 'e3JldHVybiBjLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSAxOnJldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gYy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24oYSxmKXtyZXR1cm4gYy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Nhc2UgMzpyZXR1cm4g'@;
put 'ZnVuY3Rpb24oYSxmLGQpe3JldHVybiBjLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSA0OnJldHVybiBmdW5jdGlvbihhLGYsZCxoKXtyZXR1cm4gYy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Nhc2UgNTpyZXR1cm4gZnVuY3Rpb24oYSxmLGQsaCxtKXtyZXR1cm4gYy5hcHBseSh0aGlz'@;
put 'LGFyZ3VtZW50cyl9O2Nhc2UgNjpyZXR1cm4gZnVuY3Rpb24oYSxmLGQsaCxtLF8pe3JldHVybiBjLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSA3OnJldHVybiBmdW5jdGlvbihhLGYsZCxoLG0sXyxPKXtyZXR1cm4gYy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Nhc2UgODpyZXR1cm4g'@;
put 'ZnVuY3Rpb24oYSxmLGQsaCxtLF8sTyxYKXtyZXR1cm4gYy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Nhc2UgOTpyZXR1cm4gZnVuY3Rpb24oYSxmLGQsaCxtLF8sTyxYLGFlKXtyZXR1cm4gYy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Nhc2UgMTA6cmV0dXJuIGZ1bmN0aW9uKGEsZixkLGgs'@;
put 'bSxfLE8sWCxhZSxwZSl7cmV0dXJuIGMuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiRmlyc3QgYXJndW1lbnQgdG8gX2FyaXR5IG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlciBubyBncmVhdGVyIHRoYW4gdGVuIil9fWZ1bmN0aW9uIFlvZShs'@;
put 'LGMsYSl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBmPVtdLGQ9MCxoPWwsbT0wO208Yy5sZW5ndGh8fGQ8YXJndW1lbnRzLmxlbmd0aDspe3ZhciBfO208Yy5sZW5ndGgmJighdTQoY1ttXSl8fGQ+PWFyZ3VtZW50cy5sZW5ndGgpP189Y1ttXTooXz1hcmd1bWVudHNbZF0sZCs9MSksZltt'@;
put 'XT1fLHU0KF8pfHwoaC09MSksbSs9MX1yZXR1cm4gaDw9MD9hLmFwcGx5KHRoaXMsZik6Wm9lKGgsWW9lKGwsZixhKSl9fWNvbnN0IFdvZT1VdihmdW5jdGlvbihjLGEpe3JldHVybiAxPT09Yz9LMihhKTpab2UoYyxZb2UoYyxbXSxhKSl9KSxMQWU9TnVtYmVyLmlzSW50ZWdlcnx8ZnVuY3Rp'@;
put 'b24oYyl7cmV0dXJuIGM8PDA9PT1jfSxGQWU9VXYoZnVuY3Rpb24oYyxhKXt2YXIgZj1jPDA/YS5sZW5ndGgrYzpjO3JldHVybiBib2UoYSk/YS5jaGFyQXQoZik6YVtmXX0pLE5BZT1VdihmdW5jdGlvbihjLGEpe3JldHVybiBjLm1hcChmdW5jdGlvbihmKXtmb3IodmFyIG0sZD1hLGg9MDto'@;
put 'PGYubGVuZ3RoOyl7aWYobnVsbD09ZClyZXR1cm47ZD1MQWUobT1mW2hdKT9GQWUobSxkKTpkW21dLGgrPTF9cmV0dXJuIGR9KX0pLEJBZT1VdihmdW5jdGlvbihjLGEpe3JldHVybiBOQWUoW2NdLGEpWzBdfSksekFlPVdvZSgyLChsLGMpPT52b2lkIDAhPT1CQWUobCxjKSksR29lPXpBZSh7'@;
put 'IkBAZnVuY3Rpb25hbC9wbGFjZWhvbGRlciI6ITB9LHdpbmRvdyk7Y2xhc3MgTGd7c3RhdGljIGxvZyguLi5jKXtFeigpJiZreigpJiZjb25zb2xlLmxvZyguLi5jKX1zdGF0aWMgd2FybiguLi5jKXtFeigpJiZreigpJiZjb25zb2xlLndhcm4oLi4uYyl9c3RhdGljIGVycm9yKC4uLmMpe0V6'@;
put 'KCkmJmt6KCkmJmNvbnNvbGUuZXJyb3IoLi4uYyl9fWZ1bmN0aW9uIGt6KCl7cmV0dXJuIUdvZShbImphc21pbmUiXSl9ZnVuY3Rpb24gRXooKXtyZXR1cm4hd2luZG93LkNEUy5lbnZpcm9ubWVudC5wcm9kdWN0aW9ufWZ1bmN0aW9uICRvZSgpe0xvZSgpJiYod2luZG93LkNEUz13aW5kb3cu'@;
put 'Q0RTfHx7X3ZlcnNpb246W10sX3JlYWN0Ont2ZXJzaW9uOnZvaWQgMH0sX3N1cHBvcnRzOklBZS5zdXBwb3J0cyxfaXNTdGF0ZVByb3hpZWQ6ITEsX3N0YXRlOntmb2N1c1RyYXBJdGVtczpbXSxsYXllckVsZW1lbnRzOltdLGkxOG5SZWdpc3RyeTp7fSxlbGVtZW50UmVnaXN0cnk6e30saWNv'@;
put 'blJlZ2lzdHJ5Ont9LG1vdGlvblJlZ2lzdHJ5Ont9fSxlbnZpcm9ubWVudDp7cHJvZHVjdGlvbjohMX0sZ2V0RGV0YWlsczpLb2UsbG9nRGV0YWlsczpaQWV9LGZ1bmN0aW9uKCl7Y29uc3QgbD0iNi40LjUiO3dpbmRvdy5DRFMuX3ZlcnNpb24uaW5kZXhPZihsKTwwJiYod2luZG93LkNEUy5f'@;
put 'dmVyc2lvbi5wdXNoKGwpLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImJvZHkiKT8uc2V0QXR0cmlidXRlKCJjZHMtdmVyc2lvbiIsd2luZG93LkNEUy5fdmVyc2lvbi5qb2luKCIgIikpKSx3aW5kb3cuQ0RTLl92ZXJzaW9uLmxlbmd0aD4xJiZMZy53YXJuKCJSdW5uaW5nIG1vcmUgdGhhbiBv'@;
put 'bmUgdmVyc2lvbiBvZiBDbGFyaXR5IGNhbiBjYXVzZSB1bmV4cGVjdGVkIGlzc3Vlcy4gUGxlYXNlIGVuc3VyZSBvbmx5IG9uZSB2ZXJzaW9uIGlzIGxvYWRlZC4iKX0oKSx3aW5kb3cuQ0RTLl9pc1N0YXRlUHJveGllZHx8KHdpbmRvdy5DRFMuX2lzU3RhdGVQcm94aWVkPSEwLHdpbmRvdy5D'@;
put 'RFMuX3N0YXRlPW5ldyBQcm94eSh3aW5kb3cuQ0RTLl9zdGF0ZSx7c2V0OihsLGMsYSk9Pntjb25zdCBmPXtrZXk6YyxwcmV2OndpbmRvdy5DRFMuX3N0YXRlW2NdLGN1cnJlbnQ6YX07cmV0dXJuIGxbY109YSxkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiQ0RTX1NU'@;
put 'QVRFX1VQREFURSIse2RldGFpbDpmfSkpLCEwfX0pKSl9ZnVuY3Rpb24gS29lKCl7cmV0dXJue3ZlcnNpb25zOndpbmRvdy5DRFMuX3ZlcnNpb24sZW52aXJvbm1lbnQ6d2luZG93LkNEUy5lbnZpcm9ubWVudCx1c2VyQWdlbnQ6bmF2aWdhdG9yLnVzZXJBZ2VudCxzdXBwb3J0czp3aW5kb3cu'@;
put 'Q0RTLl9zdXBwb3J0cyxhbmd1bGFyVmVyc2lvbjpGb2UoITEpLGFuZ3VsYXJKU1ZlcnNpb246a0FlKCExKSxyZWFjdFZlcnNpb246SG9lKCExKSx2dWVWZXJzaW9uOk5vZSghMSksc3RhdGU6ey4uLndpbmRvdy5DRFMuX3N0YXRlLGljb25SZWdpc3RyeTpPYmplY3Qua2V5cyh3aW5kb3cuQ0RT'@;
put 'Ll9zdGF0ZS5pY29uUmVnaXN0cnkpLG1vdGlvblJlZ2lzdHJ5Ok9iamVjdC5rZXlzKHdpbmRvdy5DRFMuX3N0YXRlLm1vdGlvblJlZ2lzdHJ5KSxmb2N1c1RyYXBSZWdpc3RyeTpPYmplY3Qua2V5cyh3aW5kb3cuQ0RTLl9zdGF0ZS5mb2N1c1RyYXBJdGVtcy5tYXAobD0+bC5mb2N1c1RyYXBJ'@;
put 'ZCkpfX19ZnVuY3Rpb24gWkFlKCl7TGcubG9nKEpTT04uc3RyaW5naWZ5KEtvZSgpLG51bGwsMikpfWNvbnN0IHh6PW5ldyBjbGFzcyBKeGV7Y29uc3RydWN0b3IoKXt0aGlzLnN1YnNjcmlwdGlvbnM9W119c3Vic2NyaWJlKGMpe2NvbnN0IGE9bmV3IFh4ZShjLHRoaXMuc3Vic2NyaXB0aW9u'@;
put 'cyk7cmV0dXJuIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGEpLGF9ZW1pdChjKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLmZuKGMpKX10b0V2ZW50T2JzZXJ2YWJsZSgpe3JldHVybiB0aGlzfX07eHoubGlzdGVuZXI9ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiQ0RTX1NU'@;
put 'QVRFX1VQREFURSIsbD0+eHouZW1pdChsLmRldGFpbCkpO2NsYXNzIG51e3N0YXRpYyBnZXQgc3RhdGUoKXtyZXR1cm4gJG9lKCksd2luZG93LkNEUy5fc3RhdGV9c3RhdGljIGdldFZhbHVlKGMpe3JldHVybiBudS5zdGF0ZVtjXX1zdGF0aWMgc2V0VmFsdWUoYyxhKXtudS5zdGF0ZVtjXT1h'@;
put 'fXN0YXRpYyBsb2coKXtMZy5sb2coSlNPTi5zdHJpbmdpZnkobnUuc3RhdGUsbnVsbCwyKSl9fW51LnN0YXRlVXBkYXRlcz14ei50b0V2ZW50T2JzZXJ2YWJsZSgpO2NvbnN0IFlBZT1bInVua25vd24iLHtvdXRsaW5lOic8Y2lyY2xlIGNsYXNzPSJjZHMtaW50ZXJuYWwtZG90LTMiIGN4PSIz'@;
put 'MS4xIiBjeT0iMTgiIHI9IjIuOSIvPjxjaXJjbGUgY2xhc3M9ImNkcy1pbnRlcm5hbC1kb3QtMiIgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIvPjxjaXJjbGUgY2xhc3M9ImNkcy1pbnRlcm5hbC1kb3QtMSIgY3g9IjQuOSIgY3k9IjE4IiByPSIyLjkiLz4nfV07Y2xhc3MgamF7c3RhdGljIGdl'@;
put 'dCByZWdpc3RyeSgpe3JldHVybnt1bmtub3duOllBZVsxXSwuLi5udS5zdGF0ZS5pY29uUmVnaXN0cnl9fXN0YXRpYyBhZGRJY29ucyguLi5jKXtudS5zdGF0ZS5pY29uUmVnaXN0cnk9ey4uLm51LnN0YXRlLmljb25SZWdpc3RyeSwuLi5PYmplY3QuZnJvbUVudHJpZXMoYy5maWx0ZXIoKFth'@;
put 'XSk9PiFqYS5yZWdpc3RyeVthXSkpfX1zdGF0aWMgYWRkQWxpYXNlcyguLi5jKXtjb25zdCBhPWMuZmlsdGVyKChbZl0pPT5qYS5yZWdpc3RyeVtmXSkuZmxhdE1hcCgoW2YsZF0pPT5kLm1hcChoPT5baCxqYS5yZWdpc3RyeVtmXV0pKTtudS5zdGF0ZS5pY29uUmVnaXN0cnk9ey4uLm51LnN0'@;
put 'YXRlLmljb25SZWdpc3RyeSwuLi5PYmplY3QuZnJvbUVudHJpZXMoYSl9fXN0YXRpYyBnZXRJY29uTmFtZUZyb21TaGFwZShjKXtyZXR1cm4gY1swXX19Y29uc3QgWnY9WyJhbmdsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0yOS41MiwyMi41MiwxOCwxMC42LDYuNDgsMjIuNTJhMS43LDEuNyww'@;
put 'LDAsMCwyLjQ1LDIuMzZMMTgsMTUuNDlsOS4wOCw5LjM5YTEuNywxLjcsMCwwLDAsMi40NS0yLjM2WiIvPid9XSxfMT1bImV4Y2xhbWF0aW9uLWNpcmNsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabTAsMjJBMTAsMTAsMCwx'@;
put 'LDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+PHBhdGggZD0iTTE4LDIwLjA3YTEuMywxLjMsMCwwLDEtMS4zLTEuM3YtNmExLjMsMS4zLDAsMSwxLDIuNiwwdjZBMS4zLDEuMywwLDAsMSwxOCwyMC4wN1oiLz48Y2lyY2xlIGN4PSIxNy45NSIgY3k9IjIzLjAyIiByPSIxLjUiLz4nLHNv'@;
put 'bGlkOic8cGF0aCBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0tMS40OSw2YTEuNDksMS40OSwwLDAsMSwzLDB2Ni44OWExLjQ5LDEuNDksMCwxLDEtMywwWk0xOCwyNS41YTEuNzIsMS43MiwwLDEsMSwxLjcyLTEuNzJBMS43MiwxLjcyLDAsMCwxLDE4LDI1'@;
put 'LjVaIi8+J31dLHcxPVsiY2hlY2stY2lyY2xlIix7b3V0bGluZTonPHBhdGggZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptMCwyMkExMCwxMCwwLDEsMSwyOCwxOCwxMCwxMCwwLDAsMSwxOCwyOFoiLz48cGF0aCBkPSJNMTYuMzQsMjMuNzRsLTUtNWExLDEs'@;
put 'MCwwLDEsMS40MS0xLjQxbDMuNTksMy41OSw2Ljc4LTYuNzhhMSwxLDAsMCwxLDEuNDEsMS40MVoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMzAsMThBMTIsMTIsMCwxLDEsMTgsNiwxMiwxMiwwLDAsMSwzMCwxOFptLTQuNzctMi4xNmExLjQsMS40LDAsMCwwLTItMmwtNi43Nyw2Ljc3TDEzLDE3'@;
put 'LjE2YTEuNCwxLjQsMCwwLDAtMiwybDUuNDUsNS40NVoiLz4nfV0scW9lPVsiZWxsaXBzaXMtaG9yaXpvbnRhbCIse291dGxpbmU6JzxjaXJjbGUgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45Ii8+PGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIgcj0iMi45Ii8+PGNpcmNsZSBjeD0iNC45IiBjeT0i'@;
put 'MTgiIHI9IjIuOSIvPicsb3V0bGluZUJhZGdlZDonPGNpcmNsZSBjeD0iMzEuMSIgY3k9IjE4IiByPSIyLjkiLz48Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiLz48Y2lyY2xlIGN4PSI0LjkiIGN5PSIxOCIgcj0iMi45Ii8+J31dLE5DPVsid2luZG93LWNsb3NlIix7b3V0bGluZTon'@;
put 'PHBhdGggZD0iTTE5LjQxLDE4bDcuMjktNy4yOWExLDEsMCwwLDAtMS40MS0xLjQxTDE4LDE2LjU5LDEwLjcxLDkuMjlhMSwxLDAsMCwwLTEuNDEsMS40MUwxNi41OSwxOCw5LjI5LDI1LjI5YTEsMSwwLDEsMCwxLjQxLDEuNDFMMTgsMTkuNDFsNy4yOSw3LjI5YTEsMSwwLDAsMCwxLjQxLTEu'@;
put 'NDFaIi8+J31dLFdBZT1bImV2ZW50Iix7b3V0bGluZTonPHBhdGggZD0iTTE2LjE3LDI1Ljg2LDEwLjgxLDIwLjVhMSwxLDAsMCwxLDEuNDEtMS40MUwxNi4xNywyM2w4LjY0LTguNjRhMSwxLDAsMCwxLDEuNDEsMS40MVoiLz48cGF0aCBkPSJNMzIuMjUsNkgyOVY4aDNWMzBINFY4SDdWNkgz'@;
put 'Ljc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWNy44MUExLjc4LDEuNzgsMCwwLDAsMzIuMjUsNloiLz48cGF0aCBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNW'@;
put 'OUExLDEsMCwwLDAsMTAsMTBaIi8+PHBhdGggZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAsMCwwLDI2LDEwWiIvPjxyZWN0IHg9IjEzIiB5PSI2IiB3aWR0aD0iMTAiIGhlaWdodD0iMiIvPicsb3V0bGluZUFsZXJ0ZWQ6JzxwYXRoIGQ9Ik0xMCwxMGEx'@;
put 'LDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz48cGF0aCBkPSJNMTAuODEsMjAuNWw1LjM2LDUuMzZMMjYuMjIsMTUuODFhMSwxLDAsMCwwLC4yMy0uNDFIMjMuOEwxNi4xNywyM2wtMy45NC0zLjk0YTEsMSwwLDAsMC0xLjQxLDEuNDFaIi8+PHBvbHln'@;
put 'b24gcG9pbnRzPSIyMS4yOSA2IDEzIDYgMTMgOCAyMC4xNCA4IDIxLjI5IDYiLz48cGF0aCBkPSJNMzMuNjgsMTUuNEgzMlYzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwz'@;
put 'MC4xOVYxNS4zOFoiLz4nLG91dGxpbmVCYWRnZWQ6JzxwYXRoIGQ9Ik0xMC44MSwyMC41bDUuMzYsNS4zNkwyNi4yMiwxNS44MWExLDEsMCwwLDAtMS40MS0xLjQxTDE2LjE3LDIzbC0zLjk0LTMuOTRhMSwxLDAsMCwwLTEuNDEsMS40MVoiLz48cGF0aCBkPSJNMTAsMTBhMSwxLDAsMCwwLDEt'@;
put 'MVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+PHBhdGggZD0iTTMyLDEzLjIyVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjEyLjM0QTcu'@;
put 'NDUsNy40NSwwLDAsMSwzMiwxMy4yMloiLz48cGF0aCBkPSJNMjIuNSw2SDEzVjhoOS43OEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz48cGF0aCBkPSJN'@;
put 'MjYsMTBhMSwxLDAsMCwwLDEtMVYzYTEsMSwwLDAsMC0yLDBWOUExLDEsMCwwLDAsMjYsMTBaIi8+PHBhdGggZD0iTTMyLjI1LDZoLTRWOWEyLjIsMi4yLDAsMCwxLTQuNCwwVjZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEu'@;
put 'NzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjcuODFBMS43OCwxLjc4LDAsMCwwLDMyLjI1LDZaTTI1Ljk0LDE2LjU4bC05LjY3LDkuNjdMMTEsMjAuOTRBMS4zNiwxLjM2LDAsMCwxLDEyLjksMTlsMy4zOCwzLjM4TDI0LDE0LjY2YTEuMzYsMS4z'@;
put 'NiwwLDEsMSwxLjkzLDEuOTNaIi8+Jyxzb2xpZEFsZXJ0ZWQ6JzxwYXRoIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz48cGF0aCBkPSJNMzMuNjgsMTUuNEgyNi4zYTEuMzQsMS4zNCwwLDAsMS0uMzYsMS4xOGwtOS42Nyw5LjY3'@;
put 'TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwxMi45LDE5bDMuMzgsMy4zOCw3LTdoLTFBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEuMjksNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUs'@;
put 'MzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+Jyxzb2xpZEJhZGdlZDonPHBhdGggZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPjxwYXRoIGQ9Ik0zMCwxMy41QTcuNSw3LjUsMCwwLDEsMjIuNSw2SDEy'@;
put 'LjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzAsMTMuNVptLTQuMDYsMy4wOC05LjY3LDkuNjdM'@;
put 'MTEsMjAuOTRBMS4zNiwxLjM2LDAsMCwxLDEyLjksMTlsMy4zOCwzLjM4TDI0LDE0LjY2YTEuMzYsMS4zNiwwLDEsMSwxLjkzLDEuOTNaIi8+J31dLEdBZT1bImNhbGVuZGFyIix7b3V0bGluZTonPHBhdGggZD0iTTMyLjI1LDZIMjlWOGgzVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCww'@;
put 'LDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjcuODFBMS43OCwxLjc4LDAsMCwwLDMyLjI1LDZaIi8+PHJlY3QgeD0iOCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIxNCIgeT0iMTQiIHdp'@;
put 'ZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyMCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyNiIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSI4IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjE0IiB5PSIxOSIg'@;
put 'd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjIwIiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjI2IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjgiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QiIHg9IjE0IiB5PSIy'@;
put 'NCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjIwIiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjI2IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxwYXRoIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAs'@;
put 'MCwxMCwxMFoiLz48cGF0aCBkPSJNMjYsMTBhMSwxLDAsMCwwLDEtMVYzYTEsMSwwLDAsMC0yLDBWOUExLDEsMCwwLDAsMjYsMTBaIi8+PHJlY3QgeD0iMTMiIHk9IjYiIHdpZHRoPSIxMCIgaGVpZ2h0PSIyIi8+JyxvdXRsaW5lQWxlcnRlZDonPHBhdGggZD0iTTMzLjY4LDE1LjRIMzJWMzBI'@;
put 'NFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+PHJlY3QgeD0iOCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIxNCIgeT0iMTQi'@;
put 'IHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSI4IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjE0IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjIwIiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjI2IiB5PSIx'@;
put 'OSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjgiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMTQiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMjAiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMjYiIHk9'@;
put 'IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHBhdGggZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPjxwb2x5Z29uIHBvaW50cz0iMjEuMjkgNiAxMyA2IDEzIDggMjAuMTQgOCAyMS4yOSA2Ii8+JyxvdXRsaW5lQmFkZ2VkOic8'@;
put 'cGF0aCBkPSJNMzIsMTMuMjJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIvPjxyZWN0IHg9IjgiIHk9'@;
put 'IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMTQiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMjAiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMjYiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iOCIg'@;
put 'eT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyMCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyNiIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSI4'@;
put 'IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjE0IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjIwIiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjI2IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxwYXRoIGQ9'@;
put 'Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz48cGF0aCBkPSJNMjIuNSw2SDEzVjhoOS43OEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0zMi4yNSw2aC00VjlhMi4yLDIuMiwwLDEsMS00LjQsMFY2'@;
put 'SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2Wk0xMCwyNkg4VjI0aDJabTAtNUg4'@;
put 'VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRoMlptMC01SDE0VjE5aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm0wLTVIMjBWMTRoMlptNiwxMEgyNlYyNGgyWm0wLTVIMjZWMTloMlptMC01SDI2VjE0aDJaIi8+PHBhdGggZD0iTTEwLDEwYTEsMSwwLDAs'@;
put 'MCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPjxwYXRoIGQ9Ik0yNiwxMGExLDEsMCwwLDAsMS0xVjNhMSwxLDAsMCwwLTIsMFY5QTEsMSwwLDAsMCwyNiwxMFoiLz4nLHNvbGlkQWxlcnRlZDonPHBhdGggZD0iTTMzLjY4LDE1LjRIMjIuMjNBMy42OCwzLjY4LDAs'@;
put 'MCwxLDE5LDkuODlMMjEuMjksNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaTTEwLDI2SDhWMjRoMlptMC01SDhWMTlo'@;
put 'MlptMC01SDhWMTRoMlptNiwxMEgxNFYyNGgyWm0wLTVIMTRWMTloMlptMC01SDE0VjE0aDJabTYsMTBIMjBWMjRoMlptMC01SDIwVjE5aDJabTYsNUgyNlYyNGgyWm0wLTVIMjZWMTloMloiLz48cGF0aCBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCww'@;
put 'LDAsMTAsMTBaIi8+Jyxzb2xpZEJhZGdlZDonPHBhdGggZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPjxwYXRoIGQ9Ik0zMCwxMy41QTcuNSw3LjUsMCwwLDEsMjIuNSw2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRB'@;
put 'MS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzAsMTMuNVpNMTAsMjZIOFYyNGgyWm0wLTVIOFYxOWgyWm0wLTVIOFYxNGgyWm02LDEwSDE0VjI0aDJa'@;
put 'bTAtNUgxNFYxOWgyWm0wLTVIMTRWMTRoMlptNiwxMEgyMFYyNGgyWm0wLTVIMjBWMTloMlptMC01SDIwVjE0aDJabTYsMTBIMjZWMjRoMlptMC01SDI2VjE5aDJabTAtNUgyNlYxNGgyWiIvPid9XSwkQWU9WyJleWUtaGlkZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0yNS4xOSwyMC40QTYuNzgs'@;
put 'Ni43OCwwLDAsMCwyNS42MiwxOGE2Ljg2LDYuODYsMCwwLDAtNi44Ni02Ljg2LDYuNzksNi43OSwwLDAsMC0yLjM3LjQzTDE4LDEzLjIzYTQuNzgsNC43OCwwLDAsMSwuNzQtLjA2QTQuODcsNC44NywwLDAsMSwyMy42MiwxOGE0Ljc5LDQuNzksMCwwLDEtLjA2Ljc0WiIvPjxwYXRoIGQ9Ik0z'@;
put 'NC4yOSwxNy41M2MtMy4zNy02LjIzLTkuMjgtMTAtMTUuODItMTBhMTYuODIsMTYuODIsMCwwLDAtNS4yNC44NUwxNC44NCwxMGExNC43OCwxNC43OCwwLDAsMSwzLjYzLS40N2M1LjYzLDAsMTAuNzUsMy4xNCwxMy44LDguNDNhMTcuNzUsMTcuNzUsMCwwLDEtNC4zNyw1LjFsMS40MiwxLjQy'@;
put 'YTE5LjkzLDE5LjkzLDAsMCwwLDUtNmwuMjYtLjQ4WiIvPjxwYXRoIGQ9Ik00Ljg3LDUuNzhsNC40Niw0LjQ2YTE5LjUyLDE5LjUyLDAsMCwwLTYuNjksNy4yOUwyLjM4LDE4bC4yNi40OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMGExNi45MywxNi45MywwLDAsMCw3LjM3LTEuNjlsNSw1'@;
put 'LDEuNzUtMS41LTI2LTI2Wm05Ljc1LDkuNzUsNi42NSw2LjY1YTQuODEsNC44MSwwLDAsMS0yLjUuNzJBNC44Nyw0Ljg3LDAsMCwxLDEzLjksMTgsNC44MSw0LjgxLDAsMCwxLDE0LjYyLDE1LjUzWm0tMS40NS0xLjQ1YTYuODUsNi44NSwwLDAsMCw5LjU1LDkuNTVsMS42LDEuNmExNC45MSwx'@;
put 'NC45MSwwLDAsMS01Ljg2LDEuMmMtNS42MywwLTEwLjc1LTMuMTQtMTMuOC04LjQzYTE3LjI5LDE3LjI5LDAsMCwxLDYuMTItNi4zWiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xOC4zNywxMS4xN0E2Ljc5LDYuNzksMCwwLDAsMTYsMTEuNmw4LjgsOC44QTYuNzgsNi43OCwwLDAsMCwyNS4yMywx'@;
put 'OCw2Ljg2LDYuODYsMCwwLDAsMTguMzcsMTEuMTdaIi8+PHBhdGggZD0iTTM0LjI5LDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMGExNi44MiwxNi44MiwwLDAsMC01LjI0Ljg1TDE0Ljg0LDEwYTE0Ljc4LDE0Ljc4LDAsMCwxLDMuNjMtLjQ3YzUuNjMsMCwxMC43NSwzLjE0LDEz'@;
put 'LjgsOC40M2ExNy43NSwxNy43NSwwLDAsMS00LjM3LDUuMWwxLjQyLDEuNDJhMTkuOTMsMTkuOTMsMCwwLDAsNS02bC4yNi0uNDhaIi8+PHBhdGggZD0iTTQuODcsNS43OGw0LjQ2LDQuNDZhMTkuNTIsMTkuNTIsMCwwLDAtNi42OSw3LjI5TDIuMzgsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4'@;
put 'LDEwLDE1LjgyLDEwYTE2LjkzLDE2LjkzLDAsMCwwLDcuMzctMS42OWw1LDUsMS43NS0xLjUtMjYtMjZabTguMyw4LjNhNi44NSw2Ljg1LDAsMCwwLDkuNTUsOS41NWwxLjYsMS42YTE0LjkxLDE0LjkxLDAsMCwxLTUuODYsMS4yYy01LjYzLDAtMTAuNzUtMy4xNC0xMy44LTguNDNhMTcuMjks'@;
put 'MTcuMjksMCwwLDEsNi4xMi02LjNaIi8+J31dLEtBZT1bImV5ZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0zMy42MiwxNy41M2MtMy4zNy02LjIzLTkuMjgtMTAtMTUuODItMTBTNS4zNCwxMS4zLDIsMTcuNTNMMS43MiwxOGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBzMTIuNDYt'@;
put 'My43MiwxNS44Mi0xMGwuMjYtLjQ4Wk0xNy44LDI2LjQzQzEyLjE3LDI2LjQzLDcsMjMuMjksNCwxOGMzLTUuMjksOC4xNy04LjQzLDEzLjgtOC40M1MyOC41NCwxMi43MiwzMS41OSwxOEMyOC41NCwyMy4yOSwyMy40MiwyNi40MywxNy44LDI2LjQzWiIvPjxwYXRoIGQ9Ik0xOC4wOSwxMS4x'@;
put 'N0E2Ljg2LDYuODYsMCwxLDAsMjUsMTgsNi44Niw2Ljg2LDAsMCwwLDE4LjA5LDExLjE3Wm0wLDExLjcyQTQuODYsNC44NiwwLDEsMSwyMywxOCw0Ljg3LDQuODcsMCwwLDEsMTguMDksMjIuODlaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTMzLjYyLDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0x'@;
put 'NS44Mi0xMFM1LjM0LDExLjMsMiwxNy41M0wxLjcyLDE4bC4yNi40OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMHMxMi40Ni0zLjcyLDE1LjgyLTEwbC4yNi0uNDhaTTE3LjgsMjYuNDNDMTIuMTcsMjYuNDMsNywyMy4yOSw0LDE4YzMtNS4yOSw4LjE3LTguNDMsMTMuOC04LjQzUzI4LjU0'@;
put 'LDEyLjcyLDMxLjU5LDE4QzI4LjU0LDIzLjI5LDIzLjQyLDI2LjQzLDE3LjgsMjYuNDNaIi8+PGNpcmNsZSBjeD0iMTguMDkiIGN5PSIxOC4wMyIgcj0iNi44NiIvPid9XSxxQWU9WyJlbGxpcHNpcy12ZXJ0aWNhbCIse291dGxpbmU6JzxjaXJjbGUgY3g9IjE4IiBjeT0iNC45IiByPSIyLjki'@;
put 'Lz48Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiLz48Y2lyY2xlIGN4PSIxOCIgY3k9IjMxLjEiIHI9IjIuOSIvPicsb3V0bGluZUJhZGdlZDonPGNpcmNsZSBjeD0iMTgiIGN5PSI0LjkiIHI9IjIuOSIvPjxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIvPjxjaXJjbGUgY3g9'@;
put 'IjE4IiBjeT0iMzEuMSIgcj0iMi45Ii8+J31dLFhBZT1bInZpZXctY29sdW1ucyIse291dGxpbmU6JzxwYXRoIGQ9Ik0zMSw1SDVBMiwyLDAsMCwwLDMsN1YyOWEyLDIsMCwwLDAsMiwySDMxYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzEsNVpNMTMsMjlINVY3aDhabTEwLDBIMTVWN2g4'@;
put 'WiIvPid9XSxKQWU9WyJhcnJvdyIse291dGxpbmU6JzxwYXRoIGQ9Ik0yNy42NiwxNS42MSwxOCw2LDguMzQsMTUuNjFBMSwxLDAsMSwwLDkuNzUsMTdMMTcsOS44MVYyOC45NGExLDEsMCwxLDAsMiwwVjkuODFMMjYuMjUsMTdhMSwxLDAsMCwwLDEuNDEtMS40MloiLz4nfV0sWG9lPVsidGlt'@;
put 'ZXMiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTkuNDEsMThsOC4yOS04LjI5YTEsMSwwLDAsMC0xLjQxLTEuNDFMMTgsMTYuNTksOS43MSw4LjI5QTEsMSwwLDAsMCw4LjI5LDkuNzFMMTYuNTksMTgsOC4yOSwyNi4yOWExLDEsMCwxLDAsMS40MSwxLjQxTDE4LDE5LjQxbDguMjksOC4yOWExLDEs'@;
put 'MCwwLDAsMS40MS0xLjQxWiIvPid9XSxRQWU9WyJzdGVwLWZvcndhcmQtMiIse291dGxpbmU6JzxwYXRoIGQ9Ik03LjA4LDYuNTJhMS42OCwxLjY4LDAsMCwwLDAsMi40TDE2LjUxLDE4LDcuMTIsMjcuMDhhMS43LDEuNywwLDAsMCwyLjM2LDIuNDRoMEwyMS40LDE4LDkuNDgsNi40N0ExLjY5'@;
put 'LDEuNjksMCwwLDAsNy4wOCw2LjUyWiIvPjxwYXRoIGQ9Ik0yNi40OSw1YTEuNywxLjcsMCwwLDAtMS43LDEuN1YyOS4zYTEuNywxLjcsMCwwLDAsMy40LDBWNi43QTEuNywxLjcsMCwwLDAsMjYuNDksNVoiLz4nfV0sSm9lPVsiYW5nbGUtZG91YmxlIix7b3V0bGluZTonPHBhdGggZD0iTTI5'@;
put 'LDE5LjQxYTEsMSwwLDAsMS0uNzEtLjI5TDE4LDguODMsNy43MSwxOS4xMmExLDEsMCwwLDEtMS40MS0xLjQxTDE4LDYsMjkuNzEsMTcuNzFBMSwxLDAsMCwxLDI5LDE5LjQxWiIvPjxwYXRoIGQ9Ik0yOSwzMC40MWExLDEsMCwwLDEtLjcxLS4yOUwxOCwxOS44Myw3LjcxLDMwLjEyYTEsMSww'@;
put 'LDAsMS0xLjQxLTEuNDFMMTgsMTcsMjkuNzEsMjguNzFBMSwxLDAsMCwxLDI5LDMwLjQxWiIvPid9XSxlVGU9WyJmaWx0ZXItZ3JpZC1jaXJjbGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTUsMjUuODZsMiwxVjIwLjI3YTEsMSwwLDAsMC0uMjktLjdMMTAuMjMsMTNIMjUuNzlsLTYuNDcsNi41'@;
put 'N2ExLDEsMCwwLDAtLjI5LjdMMTksMjhsMiwxVjIwLjY4TDI3LjU4LDE0QTEuNDYsMS40NiwwLDAsMCwyOCwxM1YxMmExLDEsMCwwLDAtMS0xSDlhMSwxLDAsMCwwLTEsMXYxYTEuNDYsMS40NiwwLDAsMCwuNDIsMUwxNSwyMC42OFoiLz48cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwx'@;
put 'OCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJa'@;
put 'Ii8+PHBhdGggZD0iTTgsMTF2MS4xMmEuNS41LDAsMCwwLC4xNS4zNWw3LjI4LDcuMzZhLjUuNSwwLDAsMSwuMTUuMzV2Ni44OWEuNS41LDAsMCwwLC4yOC40NWwzLjk1LDEuNDFhLjUuNSwwLDAsMCwuNzItLjQ1bDAtOC4zOWEuNTQuNTQsMCwwLDEsLjE4LS4zNWw3LjEyLTcuMjVhLjUuNSww'@;
put 'LDAsMCwuMTUtLjM1VjExWiIvPid9XSx0VGU9WyJmaWx0ZXItZ3JpZCIse291dGxpbmU6JzxwYXRoIGQ9Ik0xNSwyNS44NmwyLDFWMjAuMjdhMSwxLDAsMCwwLS4yOS0uN0wxMC4yMywxM0gyNS43OWwtNi40Nyw2LjU3YTEsMSwwLDAsMC0uMjkuN0wxOSwyOGwyLDFWMjAuNjhMMjcuNTgsMTRB'@;
put 'MS40NiwxLjQ2LDAsMCwwLDI4LDEzVjEyYTEsMSwwLDAsMC0xLTFIOWExLDEsMCwwLDAtMSwxdjFhMS40NiwxLjQ2LDAsMCwwLC40MiwxTDE1LDIwLjY4WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik04LDExdjEuMTJhLjUuNSwwLDAsMCwuMTUuMzVsNy4yOCw3LjM2YS41LjUsMCwwLDEsLjE1LjM1'@;
put 'djYuODlhLjUuNSwwLDAsMCwuMjguNDVsMy45NSwxLjQxYS41LjUsMCwwLDAsLjcyLS40NWwwLTguMzlhLjU0LjU0LDAsMCwxLC4xOC0uMzVsNy4xMi03LjI1YS41LjUsMCwwLDAsLjE1LS4zNVYxMVoiLz4nfV0sUW9lPVsiaW5mby1jaXJjbGUiLHtvdXRsaW5lOic8Y2lyY2xlIGN4PSIxNy45'@;
put 'MyIgY3k9IjExLjkiIHI9IjEuNCIvPjxwYXRoIGQ9Ik0yMSwyM0gxOVYxNUgxNmExLDEsMCwwLDAsMCwyaDF2NkgxNWExLDEsMCwxLDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiLz48cGF0aCBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0wLDIyQTEwLDEwLDAs'@;
put 'MSwxLDI4LDE4LDEwLDEwLDAsMCwxLDE4LDI4WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabS0yLDUuMTVhMiwyLDAsMSwxLDIsMkEyLDIsMCwwLDEsMTUuOSwxMS4xNVpNMjMsMjRhMSwxLDAsMCwxLTEsMUgxNWExLDEsMCwx'@;
put 'LDEsMC0yaDJWMTdIMTZhMSwxLDAsMCwxLDAtMmg0djhoMkExLDEsMCwwLDEsMjMsMjRaIi8+J31dLG5UZT1bImV4Y2xhbWF0aW9uLXRyaWFuZ2xlIix7b3V0bGluZTonPHBhdGggZD0iTTE4LDIxLjMyYTEuMywxLjMsMCwwLDAsMS4zLTEuM1YxNGExLjMsMS4zLDAsMSwwLTIuNiwwdjZBMS4z'@;
put 'LDEuMywwLDAsMCwxOCwyMS4zMloiLz48Y2lyY2xlIGN4PSIxNy45NSIgY3k9IjI0LjI3IiByPSIxLjUiLz48cGF0aCBkPSJNMzAuMzMsMjUuNTQsMjAuNTksNy42YTMsMywwLDAsMC01LjI3LDBMNS41NywyNS41NEEzLDMsMCwwLDAsOC4yMSwzMEgyNy42OWEzLDMsMCwwLDAsMi42NC00LjQz'@;
put 'Wm0tMS43OCwxLjk0YTEsMSwwLDAsMS0uODYuNDlIOC4yMWExLDEsMCwwLDEtLjg4LTEuNDhMMTcuMDcsOC41NWExLDEsMCwwLDEsMS43NiwwbDkuNzQsMTcuOTRBMSwxLDAsMCwxLDI4LjU1LDI3LjQ4WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0zMC4zMywyNS41NCwyMC41OSw3LjZhMywzLDAs'@;
put 'MCwwLTUuMjcsMEw1LjU3LDI1LjU0QTMsMywwLDAsMCw4LjIxLDMwSDI3LjY5YTMsMywwLDAsMCwyLjY0LTQuNDNaTTE2LjQ2LDEyLjc0YTEuNDksMS40OSwwLDAsMSwzLDB2Ni44OWExLjQ5LDEuNDksMCwxLDEtMywwWk0xOCwyNi4yNWExLjcyLDEuNzIsMCwxLDEsMS43Mi0xLjcyQTEuNzIs'@;
put 'MS43MiwwLDAsMSwxOCwyNi4yNVoiLz4nfV0sclRlPVsiY2lyY2xlIix7b3V0bGluZTonPHBhdGggZD0iTTE4LDM0QTE2LDE2LDAsMSwxLDM0LDE4LDE2LDE2LDAsMCwxLDE4LDM0Wk0xOCw0QTE0LDE0LDAsMSwwLDMyLDE4LDE0LDE0LDAsMCwwLDE4LDRaIi8+Jyxzb2xpZDonPHBhdGggZD0i'@;
put 'TTE4LDM0QTE2LDE2LDAsMSwxLDM0LDE4LDE2LDE2LDAsMCwxLDE4LDM0WiIvPid9XSxpVGU9WyJkb3QtY2lyY2xlIix7b3V0bGluZTonPHBhdGggZD0iTTE4LDExYTcsNywwLDEsMS03LDcsNyw3LDAsMCwxLDctNyIvPjxwYXRoIGQ9Ik0xOCwzNEExNiwxNiwwLDEsMSwzNCwxOCwxNiwxNiww'@;
put 'LDAsMSwxOCwzNFpNMTgsNEExNCwxNCwwLDEsMCwzMiwxOCwxNCwxNCwwLDAsMCwxOCw0WiIvPid9XSxlYWU9WyJlcnJvci1zdGFuZGFyZCIse291dGxpbmU6JzxjaXJjbGUgY3g9IjE4IiBjeT0iMjYuMDYiIHI9IjEuMzMiLz48cGF0aCBkPSJNMTgsMjIuNjFhMSwxLDAsMCwxLTEtMXYtMTJh'@;
put 'MSwxLDAsMSwxLDIsMHYxMkExLDEsMCwwLDEsMTgsMjIuNjFaIi8+PHBhdGggZD0iTTE4LDM0QTE2LDE2LDAsMSwxLDM0LDE4LDE2LDE2LDAsMCwxLDE4LDM0Wk0xOCw0QTE0LDE0LDAsMSwwLDMyLDE4LDE0LDE0LDAsMCwwLDE4LDRaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4LDIuMWExNiwx'@;
put 'NiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxOCwyLjFaTTE2LjYsOC44YTEuNCwxLjQsMCwwLDEsMi44LDB2MTJhMS40LDEuNCwwLDAsMS0yLjgsMFpNMTgsMjguNmExLjgsMS44LDAsMSwxLDEuOC0xLjhBMS44LDEuOCwwLDAsMSwxOCwyOC42WiIvPid9XSxvVGU9WyJzdWNjZXNzLXN0YW5k'@;
put 'YXJkIix7b3V0bGluZTonPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiLz48cGF0aCBkPSJNMjgsMTIuMWExLDEsMCwwLDAtMS40MSwwTDE1LjQ5LDIzLjE1bC02LTZBMSwx'@;
put 'LDAsMCwwLDgsMTguNTNMMTUuNDksMjYsMjgsMTMuNTJBMSwxLDAsMCwwLDI4LDEyLjFaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNMjguNDUsMTIuNjMsMTUuMzEsMjUuNzYsNy41NSwxOGExLjQsMS40LDAsMCwxLDItMmw1'@;
put 'Ljc4LDUuNzhMMjYuNDcsMTAuNjVhMS40LDEuNCwwLDEsMSwyLDJaIi8+J31dO2NsYXNzIGxUZSBleHRlbmRzIHRle2NvbnN0cnVjdG9yKGMsYSl7c3VwZXIoKX1zY2hlZHVsZShjLGE9MCl7cmV0dXJuIHRoaXN9fWNvbnN0IEVEPXtzZXRJbnRlcnZhbChsLGMsLi4uYSl7Y29uc3R7ZGVsZWdh'@;
put 'dGU6Zn09RUQ7cmV0dXJuIGY/LnNldEludGVydmFsP2Yuc2V0SW50ZXJ2YWwobCxjLC4uLmEpOnNldEludGVydmFsKGwsYywuLi5hKX0sY2xlYXJJbnRlcnZhbChsKXtjb25zdHtkZWxlZ2F0ZTpjfT1FRDtyZXR1cm4oYz8uY2xlYXJJbnRlcnZhbHx8Y2xlYXJJbnRlcnZhbCkobCl9LGRlbGVn'@;
put 'YXRlOnZvaWQgMH07Y2xhc3MgQXogZXh0ZW5kcyBsVGV7Y29uc3RydWN0b3IoYyxhKXtzdXBlcihjLGEpLHRoaXMuc2NoZWR1bGVyPWMsdGhpcy53b3JrPWEsdGhpcy5wZW5kaW5nPSExfXNjaGVkdWxlKGMsYT0wKXt2YXIgZjtpZih0aGlzLmNsb3NlZClyZXR1cm4gdGhpczt0aGlzLnN0YXRl'@;
put 'PWM7Y29uc3QgZD10aGlzLmlkLGg9dGhpcy5zY2hlZHVsZXI7cmV0dXJuIG51bGwhPWQmJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQoaCxkLGEpKSx0aGlzLnBlbmRpbmc9ITAsdGhpcy5kZWxheT1hLHRoaXMuaWQ9bnVsbCE9PShmPXRoaXMuaWQpJiZ2b2lkIDAhPT1mP2Y6dGhpcy5y'@;
put 'ZXF1ZXN0QXN5bmNJZChoLHRoaXMuaWQsYSksdGhpc31yZXF1ZXN0QXN5bmNJZChjLGEsZj0wKXtyZXR1cm4gRUQuc2V0SW50ZXJ2YWwoYy5mbHVzaC5iaW5kKGMsdGhpcyksZil9cmVjeWNsZUFzeW5jSWQoYyxhLGY9MCl7aWYobnVsbCE9ZiYmdGhpcy5kZWxheT09PWYmJiExPT09dGhpcy5w'@;
put 'ZW5kaW5nKXJldHVybiBhO251bGwhPWEmJkVELmNsZWFySW50ZXJ2YWwoYSl9ZXhlY3V0ZShjLGEpe2lmKHRoaXMuY2xvc2VkKXJldHVybiBuZXcgRXJyb3IoImV4ZWN1dGluZyBhIGNhbmNlbGxlZCBhY3Rpb24iKTt0aGlzLnBlbmRpbmc9ITE7Y29uc3QgZj10aGlzLl9leGVjdXRlKGMsYSk7'@;
put 'aWYoZilyZXR1cm4gZjshMT09PXRoaXMucGVuZGluZyYmbnVsbCE9dGhpcy5pZCYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlcix0aGlzLmlkLG51bGwpKX1fZXhlY3V0ZShjLGEpe2xldCBkLGY9ITE7dHJ5e3RoaXMud29yayhjKX1jYXRjaChoKXtmPSEwLGQ9'@;
put 'aHx8bmV3IEVycm9yKCJTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yIil9aWYoZilyZXR1cm4gdGhpcy51bnN1YnNjcmliZSgpLGR9dW5zdWJzY3JpYmUoKXtpZighdGhpcy5jbG9zZWQpe2NvbnN0e2lkOmMsc2NoZWR1bGVyOmF9PXRoaXMse2FjdGlvbnM6Zn09YTt0aGlzLndv'@;
put 'cms9dGhpcy5zdGF0ZT10aGlzLnNjaGVkdWxlcj1udWxsLHRoaXMucGVuZGluZz0hMSxxKGYsdGhpcyksbnVsbCE9YyYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZChhLGMsbnVsbCkpLHRoaXMuZGVsYXk9bnVsbCxzdXBlci51bnN1YnNjcmliZSgpfX19Y29uc3QgVHo9e25vdzooKT0+'@;
put 'KFR6LmRlbGVnYXRlfHxEYXRlKS5ub3coKSxkZWxlZ2F0ZTp2b2lkIDB9O2NsYXNzIFZDe2NvbnN0cnVjdG9yKGMsYT1WQy5ub3cpe3RoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcj1jLHRoaXMubm93PWF9c2NoZWR1bGUoYyxhPTAsZil7cmV0dXJuIG5ldyB0aGlzLnNjaGVkdWxlckFjdGlvbkN0'@;
put 'b3IodGhpcyxjKS5zY2hlZHVsZShmLGEpfX1WQy5ub3c9VHoubm93O2NsYXNzIE96IGV4dGVuZHMgVkN7Y29uc3RydWN0b3IoYyxhPVZDLm5vdyl7c3VwZXIoYyxhKSx0aGlzLmFjdGlvbnM9W10sdGhpcy5fYWN0aXZlPSExfWZsdXNoKGMpe2NvbnN0e2FjdGlvbnM6YX09dGhpcztpZih0aGlz'@;
put 'Ll9hY3RpdmUpcmV0dXJuIHZvaWQgYS5wdXNoKGMpO2xldCBmO3RoaXMuX2FjdGl2ZT0hMDtkb3tpZihmPWMuZXhlY3V0ZShjLnN0YXRlLGMuZGVsYXkpKWJyZWFrfXdoaWxlKGM9YS5zaGlmdCgpKTtpZih0aGlzLl9hY3RpdmU9ITEsZil7Zm9yKDtjPWEuc2hpZnQoKTspYy51bnN1YnNjcmli'@;
put 'ZSgpO3Rocm93IGZ9fX1jb25zdCBCQz1uZXcgT3ooQXopLHNUZT1CQztmdW5jdGlvbiBZdihsLGM9QkMpe3JldHVybiBudCgoYSxmKT0+e2xldCBkPW51bGwsaD1udWxsLG09bnVsbDtjb25zdCBfPSgpPT57aWYoZCl7ZC51bnN1YnNjcmliZSgpLGQ9bnVsbDtjb25zdCBYPWg7aD1udWxsLGYu'@;
put 'bmV4dChYKX19O2Z1bmN0aW9uIE8oKXtjb25zdCBYPW0rbCxhZT1jLm5vdygpO2lmKGFlPFgpcmV0dXJuIGQ9dGhpcy5zY2hlZHVsZSh2b2lkIDAsWC1hZSksdm9pZCBmLmFkZChkKTtfKCl9YS5zdWJzY3JpYmUocWUoZixYPT57aD1YLG09Yy5ub3coKSxkfHwoZD1jLnNjaGVkdWxlKE8sbCks'@;
put 'Zi5hZGQoZCkpfSwoKT0+e18oKSxmLmNvbXBsZXRlKCl9LHZvaWQgMCwoKT0+e2g9ZD1udWxsfSkpfSl9ZnVuY3Rpb24gQWgobCl7cmV0dXJuIG50KChjLGEpPT57SnIobCkuc3Vic2NyaWJlKHFlKGEsKCk9PmEuY29tcGxldGUoKSxZKSksIWEuY2xvc2VkJiZjLnN1YnNjcmliZShhKX0pfWZ1'@;
put 'bmN0aW9uIER6KGw9MCxjLGE9c1RlKXtsZXQgZj0tMTtyZXR1cm4gbnVsbCE9YyYmKFZ1KGMpP2E9YzpmPWMpLG5ldyBCZShkPT57bGV0IGg9ZnVuY3Rpb24gY1RlKGwpe3JldHVybiBsIGluc3RhbmNlb2YgRGF0ZSYmIWlzTmFOKGwpfShsKT8rbC1hLm5vdygpOmw7aDwwJiYoaD0wKTtsZXQg'@;
put 'bT0wO3JldHVybiBhLnNjaGVkdWxlKGZ1bmN0aW9uKCl7ZC5jbG9zZWR8fChkLm5leHQobSsrKSwwPD1mP3RoaXMuc2NoZWR1bGUodm9pZCAwLGYpOmQuY29tcGxldGUoKSl9LGgpfSl9Y29uc3QgZFRlPVsiYWRkTGlzdGVuZXIiLCJyZW1vdmVMaXN0ZW5lciJdLGhUZT1bImFkZEV2ZW50TGlz'@;
put 'dGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIl0scFRlPVsib24iLCJvZmYiXTtmdW5jdGlvbiB3ZChsLGMsYSxmKXtpZihHKGEpJiYoZj1hLGE9dm9pZCAwKSxmKXJldHVybiB3ZChsLGMsYSkucGlwZSh4aihmKSk7Y29uc3RbZCxoXT1mdW5jdGlvbiB2VGUobCl7cmV0dXJuIEcobC5hZGRF'@;
put 'dmVudExpc3RlbmVyKSYmRyhsLnJlbW92ZUV2ZW50TGlzdGVuZXIpfShsKT9oVGUubWFwKG09Pl89PmxbbV0oYyxfLGEpKTpmdW5jdGlvbiBtVGUobCl7cmV0dXJuIEcobC5hZGRMaXN0ZW5lcikmJkcobC5yZW1vdmVMaXN0ZW5lcil9KGwpP2RUZS5tYXAobmFlKGwsYykpOmZ1bmN0aW9uIGdU'@;
put 'ZShsKXtyZXR1cm4gRyhsLm9uKSYmRyhsLm9mZil9KGwpP3BUZS5tYXAobmFlKGwsYykpOltdO2lmKCFkJiZGbihsKSlyZXR1cm4gX3IobT0+d2QobSxjLGEpKShKcihsKSk7aWYoIWQpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBldmVudCB0YXJnZXQiKTtyZXR1cm4gbmV3IEJlKG09'@;
put 'Pntjb25zdCBfPSguLi5PKT0+bS5uZXh0KDE8Ty5sZW5ndGg/TzpPWzBdKTtyZXR1cm4gZChfKSwoKT0+aChfKX0pfWZ1bmN0aW9uIG5hZShsLGMpe3JldHVybiBhPT5mPT5sW2FdKGMsZil9Y2xhc3MgeEQgZXh0ZW5kcyB3ZXtjb25zdHJ1Y3RvcihjPTEvMCxhPTEvMCxmPVR6KXtzdXBlcigp'@;
put 'LHRoaXMuX2J1ZmZlclNpemU9Yyx0aGlzLl93aW5kb3dUaW1lPWEsdGhpcy5fdGltZXN0YW1wUHJvdmlkZXI9Zix0aGlzLl9idWZmZXI9W10sdGhpcy5faW5maW5pdGVUaW1lV2luZG93PSEwLHRoaXMuX2luZmluaXRlVGltZVdpbmRvdz1hPT09MS8wLHRoaXMuX2J1ZmZlclNpemU9TWF0aC5t'@;
put 'YXgoMSxjKSx0aGlzLl93aW5kb3dUaW1lPU1hdGgubWF4KDEsYSl9bmV4dChjKXtjb25zdHtpc1N0b3BwZWQ6YSxfYnVmZmVyOmYsX2luZmluaXRlVGltZVdpbmRvdzpkLF90aW1lc3RhbXBQcm92aWRlcjpoLF93aW5kb3dUaW1lOm19PXRoaXM7YXx8KGYucHVzaChjKSwhZCYmZi5wdXNoKGgu'@;
put 'bm93KCkrbSkpLHRoaXMuX3RyaW1CdWZmZXIoKSxzdXBlci5uZXh0KGMpfV9zdWJzY3JpYmUoYyl7dGhpcy5fdGhyb3dJZkNsb3NlZCgpLHRoaXMuX3RyaW1CdWZmZXIoKTtjb25zdCBhPXRoaXMuX2lubmVyU3Vic2NyaWJlKGMpLHtfaW5maW5pdGVUaW1lV2luZG93OmYsX2J1ZmZlcjpkfT10'@;
put 'aGlzLGg9ZC5zbGljZSgpO2ZvcihsZXQgbT0wO208aC5sZW5ndGgmJiFjLmNsb3NlZDttKz1mPzE6MiljLm5leHQoaFttXSk7cmV0dXJuIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoYyksYX1fdHJpbUJ1ZmZlcigpe2NvbnN0e19idWZmZXJTaXplOmMsX3RpbWVzdGFtcFByb3ZpZGVy'@;
put 'OmEsX2J1ZmZlcjpmLF9pbmZpbml0ZVRpbWVXaW5kb3c6ZH09dGhpcyxoPShkPzE6MikqYztpZihjPDEvMCYmaDxmLmxlbmd0aCYmZi5zcGxpY2UoMCxmLmxlbmd0aC1oKSwhZCl7Y29uc3QgbT1hLm5vdygpO2xldCBfPTA7Zm9yKGxldCBPPTE7TzxmLmxlbmd0aCYmZltPXTw9bTtPKz0yKV89'@;
put 'TztfJiZmLnNwbGljZSgwLF8rMSl9fX1jbGFzcyByYWV7fWNsYXNzIHlUZXt9Y29uc3QgcTI9IioiO2Z1bmN0aW9uIEMxKGwsYyl7cmV0dXJue3R5cGU6NyxuYW1lOmwsZGVmaW5pdGlvbnM6YyxvcHRpb25zOnt9fX1mdW5jdGlvbiBjYyhsLGM9bnVsbCl7cmV0dXJue3R5cGU6NCxzdHlsZXM6'@;
put 'Yyx0aW1pbmdzOmx9fWZ1bmN0aW9uIGlhZShsLGM9bnVsbCl7cmV0dXJue3R5cGU6MixzdGVwczpsLG9wdGlvbnM6Y319ZnVuY3Rpb24gQ2EobCl7cmV0dXJue3R5cGU6NixzdHlsZXM6bCxvZmZzZXQ6bnVsbH19ZnVuY3Rpb24gQUQobCxjLGEpe3JldHVybnt0eXBlOjAsbmFtZTpsLHN0eWxl'@;
put 'czpjLG9wdGlvbnM6YX19ZnVuY3Rpb24gYlRlKGwpe3JldHVybnt0eXBlOjUsc3RlcHM6bH19ZnVuY3Rpb24gYnUobCxjLGE9bnVsbCl7cmV0dXJue3R5cGU6MSxleHByOmwsYW5pbWF0aW9uOmMsb3B0aW9uczphfX1jbGFzcyBqQ3tjb25zdHJ1Y3RvcihjPTAsYT0wKXt0aGlzLl9vbkRvbmVG'@;
put 'bnM9W10sdGhpcy5fb25TdGFydEZucz1bXSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10sdGhpcy5fb3JpZ2luYWxPbkRvbmVGbnM9W10sdGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3Bv'@;
put 'c2l0aW9uPTAsdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLnRvdGFsVGltZT1jK2F9X29uRmluaXNoKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbnMuZm9yRWFjaChjPT5jKCkpLHRoaXMuX29uRG9uZUZucz1bXSl9b25TdGFydChjKXt0aGlz'@;
put 'Ll9vcmlnaW5hbE9uU3RhcnRGbnMucHVzaChjKSx0aGlzLl9vblN0YXJ0Rm5zLnB1c2goYyl9b25Eb25lKGMpe3RoaXMuX29yaWdpbmFsT25Eb25lRm5zLnB1c2goYyksdGhpcy5fb25Eb25lRm5zLnB1c2goYyl9b25EZXN0cm95KGMpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKGMpfWhhc1N0'@;
put 'YXJ0ZWQoKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH1pbml0KCl7fXBsYXkoKXt0aGlzLmhhc1N0YXJ0ZWQoKXx8KHRoaXMuX29uU3RhcnQoKSx0aGlzLnRyaWdnZXJNaWNyb3Rhc2soKSksdGhpcy5fc3RhcnRlZD0hMH10cmlnZ2VyTWljcm90YXNrKCl7cXVldWVNaWNyb3Rhc2soKCk9PnRoaXMu'@;
put 'X29uRmluaXNoKCkpfV9vblN0YXJ0KCl7dGhpcy5fb25TdGFydEZucy5mb3JFYWNoKGM9PmMoKSksdGhpcy5fb25TdGFydEZucz1bXX1wYXVzZSgpe31yZXN0YXJ0KCl7fWZpbmlzaCgpe3RoaXMuX29uRmluaXNoKCl9ZGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3ll'@;
put 'ZD0hMCx0aGlzLmhhc1N0YXJ0ZWQoKXx8dGhpcy5fb25TdGFydCgpLHRoaXMuZmluaXNoKCksdGhpcy5fb25EZXN0cm95Rm5zLmZvckVhY2goYz0+YygpKSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfXJlc2V0KCl7dGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9vblN0'@;
put 'YXJ0Rm5zPXRoaXMuX29yaWdpbmFsT25TdGFydEZucyx0aGlzLl9vbkRvbmVGbnM9dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnN9c2V0UG9zaXRpb24oYyl7dGhpcy5fcG9zaXRpb249dGhpcy50b3RhbFRpbWU/Yyp0aGlzLnRvdGFsVGltZToxfWdldFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMudG90'@;
put 'YWxUaW1lP3RoaXMuX3Bvc2l0aW9uL3RoaXMudG90YWxUaW1lOjF9dHJpZ2dlckNhbGxiYWNrKGMpe2NvbnN0IGE9InN0YXJ0Ij09Yz90aGlzLl9vblN0YXJ0Rm5zOnRoaXMuX29uRG9uZUZuczthLmZvckVhY2goZj0+ZigpKSxhLmxlbmd0aD0wfX1jbGFzcyBvYWV7Y29uc3RydWN0b3IoYyl7'@;
put 'dGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy50b3RhbFRpbWU9MCx0aGlzLnBsYXll'@;
put 'cnM9YztsZXQgYT0wLGY9MCxkPTA7Y29uc3QgaD10aGlzLnBsYXllcnMubGVuZ3RoOzA9PWg/cXVldWVNaWNyb3Rhc2soKCk9PnRoaXMuX29uRmluaXNoKCkpOnRoaXMucGxheWVycy5mb3JFYWNoKG09PnttLm9uRG9uZSgoKT0+eysrYT09aCYmdGhpcy5fb25GaW5pc2goKX0pLG0ub25EZXN0'@;
put 'cm95KCgpPT57KytmPT1oJiZ0aGlzLl9vbkRlc3Ryb3koKX0pLG0ub25TdGFydCgoKT0+eysrZD09aCYmdGhpcy5fb25TdGFydCgpfSl9KSx0aGlzLnRvdGFsVGltZT10aGlzLnBsYXllcnMucmVkdWNlKChtLF8pPT5NYXRoLm1heChtLF8udG90YWxUaW1lKSwwKX1fb25GaW5pc2goKXt0aGlz'@;
put 'Ll9maW5pc2hlZHx8KHRoaXMuX2ZpbmlzaGVkPSEwLHRoaXMuX29uRG9uZUZucy5mb3JFYWNoKGM9PmMoKSksdGhpcy5fb25Eb25lRm5zPVtdKX1pbml0KCl7dGhpcy5wbGF5ZXJzLmZvckVhY2goYz0+Yy5pbml0KCkpfW9uU3RhcnQoYyl7dGhpcy5fb25TdGFydEZucy5wdXNoKGMpfV9vblN0'@;
put 'YXJ0KCl7dGhpcy5oYXNTdGFydGVkKCl8fCh0aGlzLl9zdGFydGVkPSEwLHRoaXMuX29uU3RhcnRGbnMuZm9yRWFjaChjPT5jKCkpLHRoaXMuX29uU3RhcnRGbnM9W10pfW9uRG9uZShjKXt0aGlzLl9vbkRvbmVGbnMucHVzaChjKX1vbkRlc3Ryb3koYyl7dGhpcy5fb25EZXN0cm95Rm5zLnB1'@;
put 'c2goYyl9aGFzU3RhcnRlZCgpe3JldHVybiB0aGlzLl9zdGFydGVkfXBsYXkoKXt0aGlzLnBhcmVudFBsYXllcnx8dGhpcy5pbml0KCksdGhpcy5fb25TdGFydCgpLHRoaXMucGxheWVycy5mb3JFYWNoKGM9PmMucGxheSgpKX1wYXVzZSgpe3RoaXMucGxheWVycy5mb3JFYWNoKGM9PmMucGF1'@;
put 'c2UoKSl9cmVzdGFydCgpe3RoaXMucGxheWVycy5mb3JFYWNoKGM9PmMucmVzdGFydCgpKX1maW5pc2goKXt0aGlzLl9vbkZpbmlzaCgpLHRoaXMucGxheWVycy5mb3JFYWNoKGM9PmMuZmluaXNoKCkpfWRlc3Ryb3koKXt0aGlzLl9vbkRlc3Ryb3koKX1fb25EZXN0cm95KCl7dGhpcy5fZGVz'@;
put 'dHJveWVkfHwodGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuX29uRmluaXNoKCksdGhpcy5wbGF5ZXJzLmZvckVhY2goYz0+Yy5kZXN0cm95KCkpLHRoaXMuX29uRGVzdHJveUZucy5mb3JFYWNoKGM9PmMoKSksdGhpcy5fb25EZXN0cm95Rm5zPVtdKX1yZXNldCgpe3RoaXMucGxheWVycy5mb3JF'@;
put 'YWNoKGM9PmMucmVzZXQoKSksdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITF9c2V0UG9zaXRpb24oYyl7Y29uc3QgYT1jKnRoaXMudG90YWxUaW1lO3RoaXMucGxheWVycy5mb3JFYWNoKGY9Pntjb25zdCBkPWYudG90YWxUaW1lP01hdGgubWlu'@;
put 'KDEsYS9mLnRvdGFsVGltZSk6MTtmLnNldFBvc2l0aW9uKGQpfSl9Z2V0UG9zaXRpb24oKXtjb25zdCBjPXRoaXMucGxheWVycy5yZWR1Y2UoKGEsZik9Pm51bGw9PT1hfHxmLnRvdGFsVGltZT5hLnRvdGFsVGltZT9mOmEsbnVsbCk7cmV0dXJuIG51bGwhPWM/Yy5nZXRQb3NpdGlvbigpOjB9'@;
put 'YmVmb3JlRGVzdHJveSgpe3RoaXMucGxheWVycy5mb3JFYWNoKGM9PntjLmJlZm9yZURlc3Ryb3kmJmMuYmVmb3JlRGVzdHJveSgpfSl9dHJpZ2dlckNhbGxiYWNrKGMpe2NvbnN0IGE9InN0YXJ0Ij09Yz90aGlzLl9vblN0YXJ0Rm5zOnRoaXMuX29uRG9uZUZuczthLmZvckVhY2goZj0+Zigp'@;
put 'KSxhLmxlbmd0aD0wfX1sZXQgYWFlPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmKXt0aGlzLl9yZW5kZXJlcj1hLHRoaXMuX2VsZW1lbnRSZWY9Zix0aGlzLm9uQ2hhbmdlPWQ9Pnt9LHRoaXMub25Ub3VjaGVkPSgpPT57fX1zZXRQcm9wZXJ0eShhLGYpe3RoaXMuX3JlbmRlcmVyLnNl'@;
put 'dFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxhLGYpfXJlZ2lzdGVyT25Ub3VjaGVkKGEpe3RoaXMub25Ub3VjaGVkPWF9cmVnaXN0ZXJPbkNoYW5nZShhKXt0aGlzLm9uQ2hhbmdlPWF9c2V0RGlzYWJsZWRTdGF0ZShhKXt0aGlzLnNldFByb3BlcnR5KCJkaXNhYmxl'@;
put 'ZCIsYSl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHJ0KGpvKSxydChWaSkpfSxsLlx1MDI3NWRpcj1Tcih7dHlwZTpsfSksbH0pKCksUGc9KCgpPT57Y2xhc3MgbCBleHRlbmRzIGFhZXt9cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0'@;
put 'IGM7cmV0dXJuIGZ1bmN0aW9uKGYpe3JldHVybihjfHwoYz14bChsKSkpKGZ8fGwpfX0oKSxsLlx1MDI3NWRpcj1Tcih7dHlwZTpsLGZlYXR1cmVzOltyb119KSxsfSkoKTtjb25zdCBUaD1uZXcgTWkoIk5nVmFsdWVBY2Nlc3NvciIpLHdUZT17cHJvdmlkZTpUaCx1c2VFeGlzdGluZzpQYSgo'@;
put 'KT0+UjApLG11bHRpOiEwfTtsZXQgUjA9KCgpPT57Y2xhc3MgbCBleHRlbmRzIFBne3dyaXRlVmFsdWUoYSl7dGhpcy5zZXRQcm9wZXJ0eSgiY2hlY2tlZCIsYSl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCBjO3JldHVybiBmdW5jdGlvbihmKXtyZXR1cm4oY3x8KGM9eGwo'@;
put 'bCkpKShmfHxsKX19KCksbC5cdTAyNzVkaXI9U3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsImNoZWNr'@;
put 'Ym94IiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxmKXsxJmEmJkV0KCJjaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBmLm9uQ2hhbmdlKGgudGFyZ2V0LmNoZWNrZWQpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGYub25Ub3VjaGVkKCl9KX0sZmVhdHVyZXM6'@;
put 'W3JpKFt3VGVdKSxyb119KSxsfSkoKTtjb25zdCBDVGU9e3Byb3ZpZGU6VGgsdXNlRXhpc3Rpbmc6UGEoKCk9PmlzKSxtdWx0aTohMH0sTVRlPW5ldyBNaSgiQ29tcG9zaXRpb25FdmVudE1vZGUiKTtsZXQgaXM9KCgpPT57Y2xhc3MgbCBleHRlbmRzIGFhZXtjb25zdHJ1Y3RvcihhLGYsZCl7'@;
put 'c3VwZXIoYSxmKSx0aGlzLl9jb21wb3NpdGlvbk1vZGU9ZCx0aGlzLl9jb21wb3Npbmc9ITEsbnVsbD09dGhpcy5fY29tcG9zaXRpb25Nb2RlJiYodGhpcy5fY29tcG9zaXRpb25Nb2RlPSFmdW5jdGlvbiBTVGUoKXtjb25zdCBsPVFwKCk/UXAoKS5nZXRVc2VyQWdlbnQoKToiIjtyZXR1cm4v'@;
put 'YW5kcm9pZCAoXGQrKS8udGVzdChsLnRvTG93ZXJDYXNlKCkpfSgpKX13cml0ZVZhbHVlKGEpe3RoaXMuc2V0UHJvcGVydHkoInZhbHVlIixhPz8iIil9X2hhbmRsZUlucHV0KGEpeyghdGhpcy5fY29tcG9zaXRpb25Nb2RlfHx0aGlzLl9jb21wb3NpdGlvbk1vZGUmJiF0aGlzLl9jb21wb3Np'@;
put 'bmcpJiZ0aGlzLm9uQ2hhbmdlKGEpfV9jb21wb3NpdGlvblN0YXJ0KCl7dGhpcy5fY29tcG9zaW5nPSEwfV9jb21wb3NpdGlvbkVuZChhKXt0aGlzLl9jb21wb3Npbmc9ITEsdGhpcy5fY29tcG9zaXRpb25Nb2RlJiZ0aGlzLm9uQ2hhbmdlKGEpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rp'@;
put 'b24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChqbykscnQoVmkpLHJ0KE1UZSw4KSl9LGwuXHUwMjc1ZGlyPVNyKHt0eXBlOmwsc2VsZWN0b3JzOltbImlucHV0IiwiZm9ybUNvbnRyb2xOYW1lIiwiIiwzLCJ0eXBlIiwiY2hlY2tib3giXSxbInRleHRhcmVhIiwiZm9ybUNvbnRyb2xOYW1lIiwi'@;
put 'Il0sWyJpbnB1dCIsImZvcm1Db250cm9sIiwiIiwzLCJ0eXBlIiwiY2hlY2tib3giXSxbInRleHRhcmVhIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwibmdNb2RlbCIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyJ0ZXh0YXJlYSIsIm5nTW9kZWwiLCIiXSxbIiIsIm5nRGVmYXVsdENv'@;
put 'bnRyb2wiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZil7MSZhJiZFdCgiaW5wdXQiLGZ1bmN0aW9uKGgpe3JldHVybiBmLl9oYW5kbGVJbnB1dChoLnRhcmdldC52YWx1ZSl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gZi5vblRvdWNoZWQoKX0pKCJjb21wb3NpdGlvbnN0YXJ0'@;
put 'IixmdW5jdGlvbigpe3JldHVybiBmLl9jb21wb3NpdGlvblN0YXJ0KCl9KSgiY29tcG9zaXRpb25lbmQiLGZ1bmN0aW9uKGgpe3JldHVybiBmLl9jb21wb3NpdGlvbkVuZChoLnRhcmdldC52YWx1ZSl9KX0sZmVhdHVyZXM6W3JpKFtDVGVdKSxyb119KSxsfSkoKTtjb25zdCBmYz1uZXcgTWko'@;
put 'Ik5nVmFsaWRhdG9ycyIpLGQ0PW5ldyBNaSgiTmdBc3luY1ZhbGlkYXRvcnMiKTtmdW5jdGlvbiBnYWUobCl7cmV0dXJuIG51bGwhPWx9ZnVuY3Rpb24gdmFlKGwpe3JldHVybiBwZyhsKT9ubChsKTpsfWZ1bmN0aW9uIHlhZShsKXtsZXQgYz17fTtyZXR1cm4gbC5mb3JFYWNoKGE9PntjPW51'@;
put 'bGwhPWE/ey4uLmMsLi4uYX06Y30pLDA9PT1PYmplY3Qua2V5cyhjKS5sZW5ndGg/bnVsbDpjfWZ1bmN0aW9uIGJhZShsLGMpe3JldHVybiBjLm1hcChhPT5hKGwpKX1mdW5jdGlvbiBfYWUobCl7cmV0dXJuIGwubWFwKGM9PmZ1bmN0aW9uIEVUZShsKXtyZXR1cm4hbC52YWxpZGF0ZX0oYyk/'@;
put 'YzphPT5jLnZhbGlkYXRlKGEpKX1mdW5jdGlvbiBSeihsKXtyZXR1cm4gbnVsbCE9bD9mdW5jdGlvbiB3YWUobCl7aWYoIWwpcmV0dXJuIG51bGw7Y29uc3QgYz1sLmZpbHRlcihnYWUpO3JldHVybiAwPT1jLmxlbmd0aD9udWxsOmZ1bmN0aW9uKGEpe3JldHVybiB5YWUoYmFlKGEsYykpfX0o'@;
put 'X2FlKGwpKTpudWxsfWZ1bmN0aW9uIEx6KGwpe3JldHVybiBudWxsIT1sP2Z1bmN0aW9uIENhZShsKXtpZighbClyZXR1cm4gbnVsbDtjb25zdCBjPWwuZmlsdGVyKGdhZSk7cmV0dXJuIDA9PWMubGVuZ3RoP251bGw6ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uIF9UZSguLi5sKXtjb25z'@;
put 'dCBjPUJ1KGwpLHthcmdzOmEsa2V5czpmfT1RbmUobCksZD1uZXcgQmUoaD0+e2NvbnN0e2xlbmd0aDptfT1hO2lmKCFtKXJldHVybiB2b2lkIGguY29tcGxldGUoKTtjb25zdCBfPW5ldyBBcnJheShtKTtsZXQgTz1tLFg9bTtmb3IobGV0IGFlPTA7YWU8bTthZSsrKXtsZXQgcGU9ITE7SnIo'@;
put 'YVthZV0pLnN1YnNjcmliZShxZShoLGJlPT57cGV8fChwZT0hMCxYLS0pLF9bYWVdPWJlfSwoKT0+Ty0tLHZvaWQgMCwoKT0+eyghT3x8IXBlKSYmKFh8fGgubmV4dChmP2VyZShmLF8pOl8pLGguY29tcGxldGUoKSl9KSl9fSk7cmV0dXJuIGM/ZC5waXBlKHhqKGMpKTpkfShiYWUoYSxjKS5t'@;
put 'YXAodmFlKSkucGlwZShFZSh5YWUpKX19KF9hZShsKSk6bnVsbH1mdW5jdGlvbiBTYWUobCxjKXtyZXR1cm4gbnVsbD09PWw/W2NdOkFycmF5LmlzQXJyYXkobCk/Wy4uLmwsY106W2wsY119ZnVuY3Rpb24gUHoobCl7cmV0dXJuIGw/QXJyYXkuaXNBcnJheShsKT9sOltsXTpbXX1mdW5jdGlv'@;
put 'biBPRChsLGMpe3JldHVybiBBcnJheS5pc0FycmF5KGwpP2wuaW5jbHVkZXMoYyk6bD09PWN9ZnVuY3Rpb24gRWFlKGwsYyl7Y29uc3QgYT1QeihjKTtyZXR1cm4gUHoobCkuZm9yRWFjaChkPT57T0QoYSxkKXx8YS5wdXNoKGQpfSksYX1mdW5jdGlvbiB4YWUobCxjKXtyZXR1cm4gUHooYyku'@;
put 'ZmlsdGVyKGE9PiFPRChsLGEpKX1jbGFzcyBBYWV7Y29uc3RydWN0b3IoKXt0aGlzLl9yYXdWYWxpZGF0b3JzPVtdLHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz1bXSx0aGlzLl9vbkRlc3Ryb3lDYWxsYmFja3M9W119Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRy'@;
put 'b2wudmFsdWU6bnVsbH1nZXQgdmFsaWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC52YWxpZDpudWxsfWdldCBpbnZhbGlkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuaW52YWxpZDpudWxsfWdldCBwZW5kaW5nKCl7cmV0dXJuIHRoaXMuY29udHJvbD90'@;
put 'aGlzLmNvbnRyb2wucGVuZGluZzpudWxsfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmRpc2FibGVkOm51bGx9Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5lbmFibGVkOm51bGx9Z2V0IGVycm9ycygpe3JldHVy'@;
put 'biB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmVycm9yczpudWxsfWdldCBwcmlzdGluZSgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnByaXN0aW5lOm51bGx9Z2V0IGRpcnR5KCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZGlydHk6bnVsbH1nZXQgdG91'@;
put 'Y2hlZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnRvdWNoZWQ6bnVsbH1nZXQgc3RhdHVzKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuc3RhdHVzOm51bGx9Z2V0IHVudG91Y2hlZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnVudG91'@;
put 'Y2hlZDpudWxsfWdldCBzdGF0dXNDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuc3RhdHVzQ2hhbmdlczpudWxsfWdldCB2YWx1ZUNoYW5nZXMoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC52YWx1ZUNoYW5nZXM6bnVsbH1nZXQgcGF0aCgpe3Jl'@;
put 'dHVybiBudWxsfV9zZXRWYWxpZGF0b3JzKGMpe3RoaXMuX3Jhd1ZhbGlkYXRvcnM9Y3x8W10sdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbj1Seih0aGlzLl9yYXdWYWxpZGF0b3JzKX1fc2V0QXN5bmNWYWxpZGF0b3JzKGMpe3RoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz1jfHxbXSx0aGlzLl9j'@;
put 'b21wb3NlZEFzeW5jVmFsaWRhdG9yRm49THoodGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzKX1nZXQgdmFsaWRhdG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm58fG51bGx9Z2V0IGFzeW5jVmFsaWRhdG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JG'@;
put 'bnx8bnVsbH1fcmVnaXN0ZXJPbkRlc3Ryb3koYyl7dGhpcy5fb25EZXN0cm95Q2FsbGJhY2tzLnB1c2goYyl9X2ludm9rZU9uRGVzdHJveUNhbGxiYWNrcygpe3RoaXMuX29uRGVzdHJveUNhbGxiYWNrcy5mb3JFYWNoKGM9PmMoKSksdGhpcy5fb25EZXN0cm95Q2FsbGJhY2tzPVtdfXJlc2V0'@;
put 'KGM9dm9pZCAwKXt0aGlzLmNvbnRyb2wmJnRoaXMuY29udHJvbC5yZXNldChjKX1oYXNFcnJvcihjLGEpe3JldHVybiEhdGhpcy5jb250cm9sJiZ0aGlzLmNvbnRyb2wuaGFzRXJyb3IoYyxhKX1nZXRFcnJvcihjLGEpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmdldEVycm9y'@;
put 'KGMsYSk6bnVsbH19Y2xhc3MgS2MgZXh0ZW5kcyBBYWV7Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gbnVsbH1nZXQgcGF0aCgpe3JldHVybiBudWxsfX1jbGFzcyBxYyBleHRlbmRzIEFhZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fcGFyZW50PW51bGwsdGhp'@;
put 'cy5uYW1lPW51bGwsdGhpcy52YWx1ZUFjY2Vzc29yPW51bGx9fWNsYXNzIFRhZXtjb25zdHJ1Y3RvcihjKXt0aGlzLl9jZD1jfWdldCBpc1RvdWNoZWQoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy50b3VjaGVkfWdldCBpc1VudG91Y2hlZCgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRy'@;
put 'b2w/LnVudG91Y2hlZH1nZXQgaXNQcmlzdGluZSgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LnByaXN0aW5lfWdldCBpc0RpcnR5KCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8uZGlydHl9Z2V0IGlzVmFsaWQoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy52YWxpZH1nZXQg'@;
put 'aXNJbnZhbGlkKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8uaW52YWxpZH1nZXQgaXNQZW5kaW5nKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8ucGVuZGluZ31nZXQgaXNTdWJtaXR0ZWQoKXtyZXR1cm4hIXRoaXMuX2NkPy5zdWJtaXR0ZWR9fWxldCBXYT0oKCk9PntjbGFzcyBs'@;
put 'IGV4dGVuZHMgVGFle2NvbnN0cnVjdG9yKGEpe3N1cGVyKGEpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChxYywyKSl9LGwuXHUwMjc1ZGlyPVNyKHt0eXBlOmwsc2VsZWN0b3JzOltbIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiIiwibmdN'@;
put 'b2RlbCIsIiJdLFsiIiwiZm9ybUNvbnRyb2wiLCIiXV0saG9zdFZhcnM6MTQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZil7MiZhJiZncigibmctdW50b3VjaGVkIixmLmlzVW50b3VjaGVkKSgibmctdG91Y2hlZCIsZi5pc1RvdWNoZWQpKCJuZy1wcmlzdGluZSIsZi5pc1ByaXN0aW5lKSgi'@;
put 'bmctZGlydHkiLGYuaXNEaXJ0eSkoIm5nLXZhbGlkIixmLmlzVmFsaWQpKCJuZy1pbnZhbGlkIixmLmlzSW52YWxpZCkoIm5nLXBlbmRpbmciLGYuaXNQZW5kaW5nKX0sZmVhdHVyZXM6W3JvXX0pLGx9KSgpLGg0PSgoKT0+e2NsYXNzIGwgZXh0ZW5kcyBUYWV7Y29uc3RydWN0b3IoYSl7c3Vw'@;
put 'ZXIoYSl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHJ0KEtjLDEwKSl9LGwuXHUwMjc1ZGlyPVNyKHt0eXBlOmwsc2VsZWN0b3JzOltbIiIsImZvcm1Hcm91cE5hbWUiLCIiXSxbIiIsImZvcm1BcnJheU5hbWUiLCIiXSxbIiIsIm5nTW9kZWxHcm91'@;
put 'cCIsIiJdLFsiIiwiZm9ybUdyb3VwIiwiIl0sWyJmb3JtIiwzLCJuZ05vRm9ybSIsIiJdLFsiIiwibmdGb3JtIiwiIl1dLGhvc3RWYXJzOjE2LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGYpezImYSYmZ3IoIm5nLXVudG91Y2hlZCIsZi5pc1VudG91Y2hlZCkoIm5nLXRvdWNoZWQiLGYuaXNU'@;
put 'b3VjaGVkKSgibmctcHJpc3RpbmUiLGYuaXNQcmlzdGluZSkoIm5nLWRpcnR5IixmLmlzRGlydHkpKCJuZy12YWxpZCIsZi5pc1ZhbGlkKSgibmctaW52YWxpZCIsZi5pc0ludmFsaWQpKCJuZy1wZW5kaW5nIixmLmlzUGVuZGluZykoIm5nLXN1Ym1pdHRlZCIsZi5pc1N1Ym1pdHRlZCl9LGZl'@;
put 'YXR1cmVzOltyb119KSxsfSkoKTtjb25zdCB6Qz0iVkFMSUQiLElEPSJJTlZBTElEIixXdj0iUEVORElORyIsVUM9IkRJU0FCTEVEIjtmdW5jdGlvbiBOeihsKXtyZXR1cm4oUkQobCk/bC52YWxpZGF0b3JzOmwpfHxudWxsfWZ1bmN0aW9uIFZ6KGwsYyl7cmV0dXJuKFJEKGMpP2MuYXN5bmNW'@;
put 'YWxpZGF0b3JzOmwpfHxudWxsfWZ1bmN0aW9uIFJEKGwpe3JldHVybiBudWxsIT1sJiYhQXJyYXkuaXNBcnJheShsKSYmIm9iamVjdCI9PXR5cGVvZiBsfWNsYXNzIFJhZXtjb25zdHJ1Y3RvcihjLGEpe3RoaXMuX3BlbmRpbmdEaXJ0eT0hMSx0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxp'@;
put 'ZGF0b3I9ITEsdGhpcy5fcGVuZGluZ1RvdWNoZWQ9ITEsdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlPSgpPT57fSx0aGlzLl9wYXJlbnQ9bnVsbCx0aGlzLnByaXN0aW5lPSEwLHRoaXMudG91Y2hlZD0hMSx0aGlzLl9vbkRpc2FibGVkQ2hhbmdlPVtdLHRoaXMuX2Fzc2lnblZhbGlkYXRvcnMo'@;
put 'YyksdGhpcy5fYXNzaWduQXN5bmNWYWxpZGF0b3JzKGEpfWdldCB2YWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbn1zZXQgdmFsaWRhdG9yKGMpe3RoaXMuX3Jhd1ZhbGlkYXRvcnM9dGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbj1jfWdldCBhc3luY1ZhbGlkYXRv'@;
put 'cigpe3JldHVybiB0aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm59c2V0IGFzeW5jVmFsaWRhdG9yKGMpe3RoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz10aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm49Y31nZXQgcGFyZW50KCl7cmV0dXJuIHRoaXMuX3BhcmVudH1nZXQgdmFsaWQo'@;
put 'KXtyZXR1cm4gdGhpcy5zdGF0dXM9PT16Q31nZXQgaW52YWxpZCgpe3JldHVybiB0aGlzLnN0YXR1cz09PUlEfWdldCBwZW5kaW5nKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT1Xdn1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5zdGF0dXM9PT1VQ31nZXQgZW5hYmxlZCgpe3JldHVybiB0aGlz'@;
put 'LnN0YXR1cyE9PVVDfWdldCBkaXJ0eSgpe3JldHVybiF0aGlzLnByaXN0aW5lfWdldCB1bnRvdWNoZWQoKXtyZXR1cm4hdGhpcy50b3VjaGVkfWdldCB1cGRhdGVPbigpe3JldHVybiB0aGlzLl91cGRhdGVPbj90aGlzLl91cGRhdGVPbjp0aGlzLnBhcmVudD90aGlzLnBhcmVudC51cGRhdGVP'@;
put 'bjoiY2hhbmdlIn1zZXRWYWxpZGF0b3JzKGMpe3RoaXMuX2Fzc2lnblZhbGlkYXRvcnMoYyl9c2V0QXN5bmNWYWxpZGF0b3JzKGMpe3RoaXMuX2Fzc2lnbkFzeW5jVmFsaWRhdG9ycyhjKX1hZGRWYWxpZGF0b3JzKGMpe3RoaXMuc2V0VmFsaWRhdG9ycyhFYWUoYyx0aGlzLl9yYXdWYWxpZGF0'@;
put 'b3JzKSl9YWRkQXN5bmNWYWxpZGF0b3JzKGMpe3RoaXMuc2V0QXN5bmNWYWxpZGF0b3JzKEVhZShjLHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycykpfXJlbW92ZVZhbGlkYXRvcnMoYyl7dGhpcy5zZXRWYWxpZGF0b3JzKHhhZShjLHRoaXMuX3Jhd1ZhbGlkYXRvcnMpKX1yZW1vdmVBc3luY1Zh'@;
put 'bGlkYXRvcnMoYyl7dGhpcy5zZXRBc3luY1ZhbGlkYXRvcnMoeGFlKGMsdGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzKSl9aGFzVmFsaWRhdG9yKGMpe3JldHVybiBPRCh0aGlzLl9yYXdWYWxpZGF0b3JzLGMpfWhhc0FzeW5jVmFsaWRhdG9yKGMpe3JldHVybiBPRCh0aGlzLl9yYXdBc3luY1Zh'@;
put 'bGlkYXRvcnMsYyl9Y2xlYXJWYWxpZGF0b3JzKCl7dGhpcy52YWxpZGF0b3I9bnVsbH1jbGVhckFzeW5jVmFsaWRhdG9ycygpe3RoaXMuYXN5bmNWYWxpZGF0b3I9bnVsbH1tYXJrQXNUb3VjaGVkKGM9e30pe3RoaXMudG91Y2hlZD0hMCx0aGlzLl9wYXJlbnQmJiFjLm9ubHlTZWxmJiZ0aGlz'@;
put 'Ll9wYXJlbnQubWFya0FzVG91Y2hlZChjKX1tYXJrQWxsQXNUb3VjaGVkKCl7dGhpcy5tYXJrQXNUb3VjaGVkKHtvbmx5U2VsZjohMH0pLHRoaXMuX2ZvckVhY2hDaGlsZChjPT5jLm1hcmtBbGxBc1RvdWNoZWQoKSl9bWFya0FzVW50b3VjaGVkKGM9e30pe3RoaXMudG91Y2hlZD0hMSx0aGlz'@;
put 'Ll9wZW5kaW5nVG91Y2hlZD0hMSx0aGlzLl9mb3JFYWNoQ2hpbGQoYT0+e2EubWFya0FzVW50b3VjaGVkKHtvbmx5U2VsZjohMH0pfSksdGhpcy5fcGFyZW50JiYhYy5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVUb3VjaGVkKGMpfW1hcmtBc0RpcnR5KGM9e30pe3RoaXMucHJpc3Rp'@;
put 'bmU9ITEsdGhpcy5fcGFyZW50JiYhYy5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Lm1hcmtBc0RpcnR5KGMpfW1hcmtBc1ByaXN0aW5lKGM9e30pe3RoaXMucHJpc3RpbmU9ITAsdGhpcy5fcGVuZGluZ0RpcnR5PSExLHRoaXMuX2ZvckVhY2hDaGlsZChhPT57YS5tYXJrQXNQcmlzdGluZSh7b25s'@;
put 'eVNlbGY6ITB9KX0pLHRoaXMuX3BhcmVudCYmIWMub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBkYXRlUHJpc3RpbmUoYyl9bWFya0FzUGVuZGluZyhjPXt9KXt0aGlzLnN0YXR1cz1XdiwhMSE9PWMuZW1pdEV2ZW50JiZ0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0aGlzLnN0YXR1cyksdGhp'@;
put 'cy5fcGFyZW50JiYhYy5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Lm1hcmtBc1BlbmRpbmcoYyl9ZGlzYWJsZShjPXt9KXtjb25zdCBhPXRoaXMuX3BhcmVudE1hcmtlZERpcnR5KGMub25seVNlbGYpO3RoaXMuc3RhdHVzPVVDLHRoaXMuZXJyb3JzPW51bGwsdGhpcy5fZm9yRWFjaENoaWxkKGY9'@;
put 'PntmLmRpc2FibGUoey4uLmMsb25seVNlbGY6ITB9KX0pLHRoaXMuX3VwZGF0ZVZhbHVlKCksITEhPT1jLmVtaXRFdmVudCYmKHRoaXMudmFsdWVDaGFuZ2VzLmVtaXQodGhpcy52YWx1ZSksdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0dXMpKSx0aGlzLl91cGRhdGVBbmNlc3Rv'@;
put 'cnMoey4uLmMsc2tpcFByaXN0aW5lQ2hlY2s6YX0pLHRoaXMuX29uRGlzYWJsZWRDaGFuZ2UuZm9yRWFjaChmPT5mKCEwKSl9ZW5hYmxlKGM9e30pe2NvbnN0IGE9dGhpcy5fcGFyZW50TWFya2VkRGlydHkoYy5vbmx5U2VsZik7dGhpcy5zdGF0dXM9ekMsdGhpcy5fZm9yRWFjaENoaWxkKGY9'@;
put 'PntmLmVuYWJsZSh7Li4uYyxvbmx5U2VsZjohMH0pfSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6Yy5lbWl0RXZlbnR9KSx0aGlzLl91cGRhdGVBbmNlc3RvcnMoey4uLmMsc2tpcFByaXN0aW5lQ2hlY2s6YX0pLHRoaXMuX29uRGlzYWJsZWRD'@;
put 'aGFuZ2UuZm9yRWFjaChmPT5mKCExKSl9X3VwZGF0ZUFuY2VzdG9ycyhjKXt0aGlzLl9wYXJlbnQmJiFjLm9ubHlTZWxmJiYodGhpcy5fcGFyZW50LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoYyksYy5za2lwUHJpc3RpbmVDaGVja3x8dGhpcy5fcGFyZW50Ll91cGRhdGVQcmlzdGluZSgpLHRo'@;
put 'aXMuX3BhcmVudC5fdXBkYXRlVG91Y2hlZCgpKX1zZXRQYXJlbnQoYyl7dGhpcy5fcGFyZW50PWN9Z2V0UmF3VmFsdWUoKXtyZXR1cm4gdGhpcy52YWx1ZX11cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGM9e30pe3RoaXMuX3NldEluaXRpYWxTdGF0dXMoKSx0aGlzLl91cGRhdGVWYWx1ZSgpLHRo'@;
put 'aXMuZW5hYmxlZCYmKHRoaXMuX2NhbmNlbEV4aXN0aW5nU3Vic2NyaXB0aW9uKCksdGhpcy5lcnJvcnM9dGhpcy5fcnVuVmFsaWRhdG9yKCksdGhpcy5zdGF0dXM9dGhpcy5fY2FsY3VsYXRlU3RhdHVzKCksKHRoaXMuc3RhdHVzPT09ekN8fHRoaXMuc3RhdHVzPT09V3YpJiZ0aGlzLl9ydW5B'@;
put 'c3luY1ZhbGlkYXRvcihjLmVtaXRFdmVudCkpLCExIT09Yy5lbWl0RXZlbnQmJih0aGlzLnZhbHVlQ2hhbmdlcy5lbWl0KHRoaXMudmFsdWUpLHRoaXMuc3RhdHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSksdGhpcy5fcGFyZW50JiYhYy5vbmx5U2VsZiYmdGhpcy5fcGFyZW50LnVwZGF0'@;
put 'ZVZhbHVlQW5kVmFsaWRpdHkoYyl9X3VwZGF0ZVRyZWVWYWxpZGl0eShjPXtlbWl0RXZlbnQ6ITB9KXt0aGlzLl9mb3JFYWNoQ2hpbGQoYT0+YS5fdXBkYXRlVHJlZVZhbGlkaXR5KGMpKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDpjLmVtaXRF'@;
put 'dmVudH0pfV9zZXRJbml0aWFsU3RhdHVzKCl7dGhpcy5zdGF0dXM9dGhpcy5fYWxsQ29udHJvbHNEaXNhYmxlZCgpP1VDOnpDfV9ydW5WYWxpZGF0b3IoKXtyZXR1cm4gdGhpcy52YWxpZGF0b3I/dGhpcy52YWxpZGF0b3IodGhpcyk6bnVsbH1fcnVuQXN5bmNWYWxpZGF0b3IoYyl7aWYodGhp'@;
put 'cy5hc3luY1ZhbGlkYXRvcil7dGhpcy5zdGF0dXM9V3YsdGhpcy5faGFzT3duUGVuZGluZ0FzeW5jVmFsaWRhdG9yPSEwO2NvbnN0IGE9dmFlKHRoaXMuYXN5bmNWYWxpZGF0b3IodGhpcykpO3RoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbj1hLnN1YnNjcmliZShmPT57dGhpcy5f'@;
put 'aGFzT3duUGVuZGluZ0FzeW5jVmFsaWRhdG9yPSExLHRoaXMuc2V0RXJyb3JzKGYse2VtaXRFdmVudDpjfSl9KX19X2NhbmNlbEV4aXN0aW5nU3Vic2NyaXB0aW9uKCl7dGhpcy5fYXN5bmNWYWxpZGF0aW9uU3Vic2NyaXB0aW9uJiYodGhpcy5fYXN5bmNWYWxpZGF0aW9uU3Vic2NyaXB0aW9u'@;
put 'LnVuc3Vic2NyaWJlKCksdGhpcy5faGFzT3duUGVuZGluZ0FzeW5jVmFsaWRhdG9yPSExKX1zZXRFcnJvcnMoYyxhPXt9KXt0aGlzLmVycm9ycz1jLHRoaXMuX3VwZGF0ZUNvbnRyb2xzRXJyb3JzKCExIT09YS5lbWl0RXZlbnQpfWdldChjKXtsZXQgYT1jO3JldHVybiBudWxsPT1hfHwoQXJy'@;
put 'YXkuaXNBcnJheShhKXx8KGE9YS5zcGxpdCgiLiIpKSwwPT09YS5sZW5ndGgpP251bGw6YS5yZWR1Y2UoKGYsZCk9PmYmJmYuX2ZpbmQoZCksdGhpcyl9Z2V0RXJyb3IoYyxhKXtjb25zdCBmPWE/dGhpcy5nZXQoYSk6dGhpcztyZXR1cm4gZiYmZi5lcnJvcnM/Zi5lcnJvcnNbY106bnVsbH1o'@;
put 'YXNFcnJvcihjLGEpe3JldHVybiEhdGhpcy5nZXRFcnJvcihjLGEpfWdldCByb290KCl7bGV0IGM9dGhpcztmb3IoO2MuX3BhcmVudDspYz1jLl9wYXJlbnQ7cmV0dXJuIGN9X3VwZGF0ZUNvbnRyb2xzRXJyb3JzKGMpe3RoaXMuc3RhdHVzPXRoaXMuX2NhbGN1bGF0ZVN0YXR1cygpLGMmJnRo'@;
put 'aXMuc3RhdHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSx0aGlzLl9wYXJlbnQmJnRoaXMuX3BhcmVudC5fdXBkYXRlQ29udHJvbHNFcnJvcnMoYyl9X2luaXRPYnNlcnZhYmxlcygpe3RoaXMudmFsdWVDaGFuZ2VzPW5ldyB4cix0aGlzLnN0YXR1c0NoYW5nZXM9bmV3IHhyfV9jYWxjdWxh'@;
put 'dGVTdGF0dXMoKXtyZXR1cm4gdGhpcy5fYWxsQ29udHJvbHNEaXNhYmxlZCgpP1VDOnRoaXMuZXJyb3JzP0lEOnRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcnx8dGhpcy5fYW55Q29udHJvbHNIYXZlU3RhdHVzKFd2KT9Xdjp0aGlzLl9hbnlDb250cm9sc0hhdmVTdGF0dXMoSUQp'@;
put 'P0lEOnpDfV9hbnlDb250cm9sc0hhdmVTdGF0dXMoYyl7cmV0dXJuIHRoaXMuX2FueUNvbnRyb2xzKGE9PmEuc3RhdHVzPT09Yyl9X2FueUNvbnRyb2xzRGlydHkoKXtyZXR1cm4gdGhpcy5fYW55Q29udHJvbHMoYz0+Yy5kaXJ0eSl9X2FueUNvbnRyb2xzVG91Y2hlZCgpe3JldHVybiB0aGlz'@;
put 'Ll9hbnlDb250cm9scyhjPT5jLnRvdWNoZWQpfV91cGRhdGVQcmlzdGluZShjPXt9KXt0aGlzLnByaXN0aW5lPSF0aGlzLl9hbnlDb250cm9sc0RpcnR5KCksdGhpcy5fcGFyZW50JiYhYy5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVQcmlzdGluZShjKX1fdXBkYXRlVG91Y2hlZChj'@;
put 'PXt9KXt0aGlzLnRvdWNoZWQ9dGhpcy5fYW55Q29udHJvbHNUb3VjaGVkKCksdGhpcy5fcGFyZW50JiYhYy5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVUb3VjaGVkKGMpfV9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZShjKXt0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2U9Y31fc2V0'@;
put 'VXBkYXRlU3RyYXRlZ3koYyl7UkQoYykmJm51bGwhPWMudXBkYXRlT24mJih0aGlzLl91cGRhdGVPbj1jLnVwZGF0ZU9uKX1fcGFyZW50TWFya2VkRGlydHkoYyl7cmV0dXJuIWMmJiEoIXRoaXMuX3BhcmVudHx8IXRoaXMuX3BhcmVudC5kaXJ0eSkmJiF0aGlzLl9wYXJlbnQuX2FueUNvbnRy'@;
put 'b2xzRGlydHkoKX1fZmluZChjKXtyZXR1cm4gbnVsbH1fYXNzaWduVmFsaWRhdG9ycyhjKXt0aGlzLl9yYXdWYWxpZGF0b3JzPUFycmF5LmlzQXJyYXkoYyk/Yy5zbGljZSgpOmMsdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbj1mdW5jdGlvbiBPVGUobCl7cmV0dXJuIEFycmF5LmlzQXJyYXko'@;
put 'bCk/UnoobCk6bHx8bnVsbH0odGhpcy5fcmF3VmFsaWRhdG9ycyl9X2Fzc2lnbkFzeW5jVmFsaWRhdG9ycyhjKXt0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnM9QXJyYXkuaXNBcnJheShjKT9jLnNsaWNlKCk6Yyx0aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm49ZnVuY3Rpb24gRFRlKGwp'@;
put 'e3JldHVybiBBcnJheS5pc0FycmF5KGwpP0x6KGwpOmx8fG51bGx9KHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycyl9fWNsYXNzIExEIGV4dGVuZHMgUmFle2NvbnN0cnVjdG9yKGMsYSxmKXtzdXBlcihOeihhKSxWeihmLGEpKSx0aGlzLmNvbnRyb2xzPWMsdGhpcy5faW5pdE9ic2VydmFibGVz'@;
put 'KCksdGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3koYSksdGhpcy5fc2V0VXBDb250cm9scygpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiEhdGhpcy5hc3luY1ZhbGlkYXRvcn0pfXJlZ2lzdGVyQ29udHJvbChjLGEpe3JldHVybiB0aGlzLmNvbnRy'@;
put 'b2xzW2NdP3RoaXMuY29udHJvbHNbY106KHRoaXMuY29udHJvbHNbY109YSxhLnNldFBhcmVudCh0aGlzKSxhLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSh0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UpLGEpfWFkZENvbnRyb2woYyxhLGY9e30pe3RoaXMucmVnaXN0ZXJDb250cm9sKGMs'@;
put 'YSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6Zi5lbWl0RXZlbnR9KSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX1yZW1vdmVDb250cm9sKGMsYT17fSl7dGhpcy5jb250cm9sc1tjXSYmdGhpcy5jb250cm9sc1tjXS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFu'@;
put 'Z2UoKCk9Pnt9KSxkZWxldGUgdGhpcy5jb250cm9sc1tjXSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDphLmVtaXRFdmVudH0pLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpfXNldENvbnRyb2woYyxhLGY9e30pe3RoaXMuY29udHJvbHNbY10mJnRoaXMuY29udHJv'@;
put 'bHNbY10uX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKCgpPT57fSksZGVsZXRlIHRoaXMuY29udHJvbHNbY10sYSYmdGhpcy5yZWdpc3RlckNvbnRyb2woYyxhKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDpmLmVtaXRFdmVudH0pLHRoaXMuX29uQ29sbGVjdGlv'@;
put 'bkNoYW5nZSgpfWNvbnRhaW5zKGMpe3JldHVybiB0aGlzLmNvbnRyb2xzLmhhc093blByb3BlcnR5KGMpJiZ0aGlzLmNvbnRyb2xzW2NdLmVuYWJsZWR9c2V0VmFsdWUoYyxhPXt9KXsoZnVuY3Rpb24gSWFlKGwsYyxhKXtsLl9mb3JFYWNoQ2hpbGQoKGYsZCk9PntpZih2b2lkIDA9PT1hW2Rd'@;
put 'KXRocm93IG5ldyBJcigxMDAyLCIiKX0pfSkodGhpcywwLGMpLE9iamVjdC5rZXlzKGMpLmZvckVhY2goZj0+eyhmdW5jdGlvbiBEYWUobCxjLGEpe2NvbnN0IGY9bC5jb250cm9scztpZighKGM/T2JqZWN0LmtleXMoZik6ZikubGVuZ3RoKXRocm93IG5ldyBJcigxZTMsIiIpO2lmKCFmW2Fd'@;
put 'KXRocm93IG5ldyBJcigxMDAxLCIiKX0pKHRoaXMsITAsZiksdGhpcy5jb250cm9sc1tmXS5zZXRWYWx1ZShjW2ZdLHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6YS5lbWl0RXZlbnR9KX0pLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShhKX1wYXRjaFZhbHVlKGMsYT17fSl7bnVsbCE9YyYm'@;
put 'KE9iamVjdC5rZXlzKGMpLmZvckVhY2goZj0+e2NvbnN0IGQ9dGhpcy5jb250cm9sc1tmXTtkJiZkLnBhdGNoVmFsdWUoY1tmXSx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmEuZW1pdEV2ZW50fSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoYSkpfXJlc2V0KGM9e30sYT17fSl7dGhp'@;
put 'cy5fZm9yRWFjaENoaWxkKChmLGQpPT57Zi5yZXNldChjW2RdLHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6YS5lbWl0RXZlbnR9KX0pLHRoaXMuX3VwZGF0ZVByaXN0aW5lKGEpLHRoaXMuX3VwZGF0ZVRvdWNoZWQoYSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGEpfWdldFJhd1ZhbHVl'@;
put 'KCl7cmV0dXJuIHRoaXMuX3JlZHVjZUNoaWxkcmVuKHt9LChjLGEsZik9PihjW2ZdPWEuZ2V0UmF3VmFsdWUoKSxjKSl9X3N5bmNQZW5kaW5nQ29udHJvbHMoKXtsZXQgYz10aGlzLl9yZWR1Y2VDaGlsZHJlbighMSwoYSxmKT0+ISFmLl9zeW5jUGVuZGluZ0NvbnRyb2xzKCl8fGEpO3JldHVy'@;
put 'biBjJiZ0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwfSksY31fZm9yRWFjaENoaWxkKGMpe09iamVjdC5rZXlzKHRoaXMuY29udHJvbHMpLmZvckVhY2goYT0+e2NvbnN0IGY9dGhpcy5jb250cm9sc1thXTtmJiZjKGYsYSl9KX1fc2V0VXBDb250cm9scygpe3RoaXMu'@;
put 'X2ZvckVhY2hDaGlsZChjPT57Yy5zZXRQYXJlbnQodGhpcyksYy5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UodGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKX0pfV91cGRhdGVWYWx1ZSgpe3RoaXMudmFsdWU9dGhpcy5fcmVkdWNlVmFsdWUoKX1fYW55Q29udHJvbHMoYyl7Zm9yKGNvbnN0'@;
put 'W2EsZl1vZiBPYmplY3QuZW50cmllcyh0aGlzLmNvbnRyb2xzKSlpZih0aGlzLmNvbnRhaW5zKGEpJiZjKGYpKXJldHVybiEwO3JldHVybiExfV9yZWR1Y2VWYWx1ZSgpe3JldHVybiB0aGlzLl9yZWR1Y2VDaGlsZHJlbih7fSwoYSxmLGQpPT4oKGYuZW5hYmxlZHx8dGhpcy5kaXNhYmxlZCkm'@;
put 'JihhW2RdPWYudmFsdWUpLGEpKX1fcmVkdWNlQ2hpbGRyZW4oYyxhKXtsZXQgZj1jO3JldHVybiB0aGlzLl9mb3JFYWNoQ2hpbGQoKGQsaCk9PntmPWEoZixkLGgpfSksZn1fYWxsQ29udHJvbHNEaXNhYmxlZCgpe2Zvcihjb25zdCBjIG9mIE9iamVjdC5rZXlzKHRoaXMuY29udHJvbHMpKWlm'@;
put 'KHRoaXMuY29udHJvbHNbY10uZW5hYmxlZClyZXR1cm4hMTtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5jb250cm9scykubGVuZ3RoPjB8fHRoaXMuZGlzYWJsZWR9X2ZpbmQoYyl7cmV0dXJuIHRoaXMuY29udHJvbHMuaGFzT3duUHJvcGVydHkoYyk/dGhpcy5jb250cm9sc1tjXTpudWxsfX1j'@;
put 'b25zdCBGZz1uZXcgTWkoIkNhbGxTZXREaXNhYmxlZFN0YXRlIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+WkN9KSxaQz0iYWx3YXlzIjtmdW5jdGlvbiBZQyhsLGMsYT1aQyl7QnoobCxjKSxjLnZhbHVlQWNjZXNzb3Iud3JpdGVWYWx1ZShsLnZhbHVlKSwobC5kaXNhYmxlZHx8'@;
put 'ImFsd2F5cyI9PT1hKSYmYy52YWx1ZUFjY2Vzc29yLnNldERpc2FibGVkU3RhdGU/LihsLmRpc2FibGVkKSxmdW5jdGlvbiBMVGUobCxjKXtjLnZhbHVlQWNjZXNzb3IucmVnaXN0ZXJPbkNoYW5nZShhPT57bC5fcGVuZGluZ1ZhbHVlPWEsbC5fcGVuZGluZ0NoYW5nZT0hMCxsLl9wZW5kaW5n'@;
put 'RGlydHk9ITAsImNoYW5nZSI9PT1sLnVwZGF0ZU9uJiZMYWUobCxjKX0pfShsLGMpLGZ1bmN0aW9uIEZUZShsLGMpe2NvbnN0IGE9KGYsZCk9PntjLnZhbHVlQWNjZXNzb3Iud3JpdGVWYWx1ZShmKSxkJiZjLnZpZXdUb01vZGVsVXBkYXRlKGYpfTtsLnJlZ2lzdGVyT25DaGFuZ2UoYSksYy5f'@;
put 'cmVnaXN0ZXJPbkRlc3Ryb3koKCk9PntsLl91bnJlZ2lzdGVyT25DaGFuZ2UoYSl9KX0obCxjKSxmdW5jdGlvbiBQVGUobCxjKXtjLnZhbHVlQWNjZXNzb3IucmVnaXN0ZXJPblRvdWNoZWQoKCk9PntsLl9wZW5kaW5nVG91Y2hlZD0hMCwiYmx1ciI9PT1sLnVwZGF0ZU9uJiZsLl9wZW5kaW5n'@;
put 'Q2hhbmdlJiZMYWUobCxjKSwic3VibWl0IiE9PWwudXBkYXRlT24mJmwubWFya0FzVG91Y2hlZCgpfSl9KGwsYyksZnVuY3Rpb24gUlRlKGwsYyl7aWYoYy52YWx1ZUFjY2Vzc29yLnNldERpc2FibGVkU3RhdGUpe2NvbnN0IGE9Zj0+e2MudmFsdWVBY2Nlc3Nvci5zZXREaXNhYmxlZFN0YXRl'@;
put 'KGYpfTtsLnJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZShhKSxjLl9yZWdpc3Rlck9uRGVzdHJveSgoKT0+e2wuX3VucmVnaXN0ZXJPbkRpc2FibGVkQ2hhbmdlKGEpfSl9fShsLGMpfWZ1bmN0aW9uIEhEKGwsYyl7bC5mb3JFYWNoKGE9PnthLnJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UmJmEu'@;
put 'cmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShjKX0pfWZ1bmN0aW9uIEJ6KGwsYyl7Y29uc3QgYT1mdW5jdGlvbiBNYWUobCl7cmV0dXJuIGwuX3Jhd1ZhbGlkYXRvcnN9KGwpO251bGwhPT1jLnZhbGlkYXRvcj9sLnNldFZhbGlkYXRvcnMoU2FlKGEsYy52YWxpZGF0b3IpKToiZnVuY3Rpb24i'@;
put 'PT10eXBlb2YgYSYmbC5zZXRWYWxpZGF0b3JzKFthXSk7Y29uc3QgZj1mdW5jdGlvbiBrYWUobCl7cmV0dXJuIGwuX3Jhd0FzeW5jVmFsaWRhdG9yc30obCk7bnVsbCE9PWMuYXN5bmNWYWxpZGF0b3I/bC5zZXRBc3luY1ZhbGlkYXRvcnMoU2FlKGYsYy5hc3luY1ZhbGlkYXRvcikpOiJmdW5j'@;
put 'dGlvbiI9PXR5cGVvZiBmJiZsLnNldEFzeW5jVmFsaWRhdG9ycyhbZl0pO2NvbnN0IGQ9KCk9PmwudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO0hEKGMuX3Jhd1ZhbGlkYXRvcnMsZCksSEQoYy5fcmF3QXN5bmNWYWxpZGF0b3JzLGQpfWZ1bmN0aW9uIExhZShsLGMpe2wuX3BlbmRpbmdEaXJ0'@;
put 'eSYmbC5tYXJrQXNEaXJ0eSgpLGwuc2V0VmFsdWUobC5fcGVuZGluZ1ZhbHVlLHtlbWl0TW9kZWxUb1ZpZXdDaGFuZ2U6ITF9KSxjLnZpZXdUb01vZGVsVXBkYXRlKGwuX3BlbmRpbmdWYWx1ZSksbC5fcGVuZGluZ0NoYW5nZT0hMX1jb25zdCBqVGU9e3Byb3ZpZGU6S2MsdXNlRXhpc3Rpbmc6'@;
put 'UGEoKCk9PkNkKX0sV0M9KCgpPT5Qcm9taXNlLnJlc29sdmUoKSkoKTtsZXQgQ2Q9KCgpPT57Y2xhc3MgbCBleHRlbmRzIEtje2NvbnN0cnVjdG9yKGEsZixkKXtzdXBlcigpLHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGU9ZCx0aGlzLnN1Ym1pdHRlZD0hMSx0aGlzLl9kaXJlY3RpdmVzPW5l'@;
put 'dyBTZXQsdGhpcy5uZ1N1Ym1pdD1uZXcgeHIsdGhpcy5mb3JtPW5ldyBMRCh7fSxSeihhKSxMeihmKSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3koKX1nZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiB0aGlzfWdldCBjb250cm9sKCl7cmV0dXJuIHRoaXMuZm9y'@;
put 'bX1nZXQgcGF0aCgpe3JldHVybltdfWdldCBjb250cm9scygpe3JldHVybiB0aGlzLmZvcm0uY29udHJvbHN9YWRkQ29udHJvbChhKXtXQy50aGVuKCgpPT57Y29uc3QgZj10aGlzLl9maW5kQ29udGFpbmVyKGEucGF0aCk7YS5jb250cm9sPWYucmVnaXN0ZXJDb250cm9sKGEubmFtZSxhLmNv'@;
put 'bnRyb2wpLFlDKGEuY29udHJvbCxhLHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGUpLGEuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KSx0aGlzLl9kaXJlY3RpdmVzLmFkZChhKX0pfWdldENvbnRyb2woYSl7cmV0dXJuIHRoaXMuZm9ybS5nZXQoYS5wYXRo'@;
put 'KX1yZW1vdmVDb250cm9sKGEpe1dDLnRoZW4oKCk9Pntjb25zdCBmPXRoaXMuX2ZpbmRDb250YWluZXIoYS5wYXRoKTtmJiZmLnJlbW92ZUNvbnRyb2woYS5uYW1lKSx0aGlzLl9kaXJlY3RpdmVzLmRlbGV0ZShhKX0pfWFkZEZvcm1Hcm91cChhKXtXQy50aGVuKCgpPT57Y29uc3QgZj10aGlz'@;
put 'Ll9maW5kQ29udGFpbmVyKGEucGF0aCksZD1uZXcgTEQoe30pOyhmdW5jdGlvbiBQYWUobCxjKXtCeihsLGMpfSkoZCxhKSxmLnJlZ2lzdGVyQ29udHJvbChhLm5hbWUsZCksZC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX0pfXJlbW92ZUZvcm1Hcm91cChhKXtXQy50'@;
put 'aGVuKCgpPT57Y29uc3QgZj10aGlzLl9maW5kQ29udGFpbmVyKGEucGF0aCk7ZiYmZi5yZW1vdmVDb250cm9sKGEubmFtZSl9KX1nZXRGb3JtR3JvdXAoYSl7cmV0dXJuIHRoaXMuZm9ybS5nZXQoYS5wYXRoKX11cGRhdGVNb2RlbChhLGYpe1dDLnRoZW4oKCk9Pnt0aGlzLmZvcm0uZ2V0KGEu'@;
put 'cGF0aCkuc2V0VmFsdWUoZil9KX1zZXRWYWx1ZShhKXt0aGlzLmNvbnRyb2wuc2V0VmFsdWUoYSl9b25TdWJtaXQoYSl7cmV0dXJuIHRoaXMuc3VibWl0dGVkPSEwLGZ1bmN0aW9uIEZhZShsLGMpe2wuX3N5bmNQZW5kaW5nQ29udHJvbHMoKSxjLmZvckVhY2goYT0+e2NvbnN0IGY9YS5jb250'@;
put 'cm9sOyJzdWJtaXQiPT09Zi51cGRhdGVPbiYmZi5fcGVuZGluZ0NoYW5nZSYmKGEudmlld1RvTW9kZWxVcGRhdGUoZi5fcGVuZGluZ1ZhbHVlKSxmLl9wZW5kaW5nQ2hhbmdlPSExKX0pfSh0aGlzLmZvcm0sdGhpcy5fZGlyZWN0aXZlcyksdGhpcy5uZ1N1Ym1pdC5lbWl0KGEpLCJkaWFsb2ci'@;
put 'PT09YT8udGFyZ2V0Py5tZXRob2R9b25SZXNldCgpe3RoaXMucmVzZXRGb3JtKCl9cmVzZXRGb3JtKGE9dm9pZCAwKXt0aGlzLmZvcm0ucmVzZXQoYSksdGhpcy5zdWJtaXR0ZWQ9ITF9X3NldFVwZGF0ZVN0cmF0ZWd5KCl7dGhpcy5vcHRpb25zJiZudWxsIT10aGlzLm9wdGlvbnMudXBkYXRl'@;
put 'T24mJih0aGlzLmZvcm0uX3VwZGF0ZU9uPXRoaXMub3B0aW9ucy51cGRhdGVPbil9X2ZpbmRDb250YWluZXIoYSl7cmV0dXJuIGEucG9wKCksYS5sZW5ndGg/dGhpcy5mb3JtLmdldChhKTp0aGlzLmZvcm19fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwp'@;
put 'KHJ0KGZjLDEwKSxydChkNCwxMCkscnQoRmcsOCkpfSxsLlx1MDI3NWRpcj1Tcih7dHlwZTpsLHNlbGVjdG9yczpbWyJmb3JtIiwzLCJuZ05vRm9ybSIsIiIsMywiZm9ybUdyb3VwIiwiIl0sWyJuZy1mb3JtIl0sWyIiLCJuZ0Zvcm0iLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZil7'@;
put 'MSZhJiZFdCgic3VibWl0IixmdW5jdGlvbihoKXtyZXR1cm4gZi5vblN1Ym1pdChoKX0pKCJyZXNldCIsZnVuY3Rpb24oKXtyZXR1cm4gZi5vblJlc2V0KCl9KX0saW5wdXRzOntvcHRpb25zOlsibmdGb3JtT3B0aW9ucyIsIm9wdGlvbnMiXX0sb3V0cHV0czp7bmdTdWJtaXQ6Im5nU3VibWl0'@;
put 'In0sZXhwb3J0QXM6WyJuZ0Zvcm0iXSxmZWF0dXJlczpbcmkoW2pUZV0pLHJvXX0pLGx9KSgpO2Z1bmN0aW9uIEhhZShsLGMpe2NvbnN0IGE9bC5pbmRleE9mKGMpO2E+LTEmJmwuc3BsaWNlKGEsMSl9ZnVuY3Rpb24gTmFlKGwpe3JldHVybiJvYmplY3QiPT10eXBlb2YgbCYmbnVsbCE9PWwm'@;
put 'JjI9PT1PYmplY3Qua2V5cyhsKS5sZW5ndGgmJiJ2YWx1ZSJpbiBsJiYiZGlzYWJsZWQiaW4gbH1jb25zdCBaej1jbGFzcyBleHRlbmRzIFJhZXtjb25zdHJ1Y3RvcihjPW51bGwsYSxmKXtzdXBlcihOeihhKSxWeihmLGEpKSx0aGlzLmRlZmF1bHRWYWx1ZT1udWxsLHRoaXMuX29uQ2hhbmdl'@;
put 'PVtdLHRoaXMuX3BlbmRpbmdDaGFuZ2U9ITEsdGhpcy5fYXBwbHlGb3JtU3RhdGUoYyksdGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3koYSksdGhpcy5faW5pdE9ic2VydmFibGVzKCksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ISF0aGlzLmFzeW5j'@;
put 'VmFsaWRhdG9yfSksUkQoYSkmJihhLm5vbk51bGxhYmxlfHxhLmluaXRpYWxWYWx1ZUlzRGVmYXVsdCkmJih0aGlzLmRlZmF1bHRWYWx1ZT1OYWUoYyk/Yy52YWx1ZTpjKX1zZXRWYWx1ZShjLGE9e30pe3RoaXMudmFsdWU9dGhpcy5fcGVuZGluZ1ZhbHVlPWMsdGhpcy5fb25DaGFuZ2UubGVu'@;
put 'Z3RoJiYhMSE9PWEuZW1pdE1vZGVsVG9WaWV3Q2hhbmdlJiZ0aGlzLl9vbkNoYW5nZS5mb3JFYWNoKGY9PmYodGhpcy52YWx1ZSwhMSE9PWEuZW1pdFZpZXdUb01vZGVsQ2hhbmdlKSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGEpfXBhdGNoVmFsdWUoYyxhPXt9KXt0aGlzLnNldFZh'@;
put 'bHVlKGMsYSl9cmVzZXQoYz10aGlzLmRlZmF1bHRWYWx1ZSxhPXt9KXt0aGlzLl9hcHBseUZvcm1TdGF0ZShjKSx0aGlzLm1hcmtBc1ByaXN0aW5lKGEpLHRoaXMubWFya0FzVW50b3VjaGVkKGEpLHRoaXMuc2V0VmFsdWUodGhpcy52YWx1ZSxhKSx0aGlzLl9wZW5kaW5nQ2hhbmdlPSExfV91'@;
put 'cGRhdGVWYWx1ZSgpe31fYW55Q29udHJvbHMoYyl7cmV0dXJuITF9X2FsbENvbnRyb2xzRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZH1yZWdpc3Rlck9uQ2hhbmdlKGMpe3RoaXMuX29uQ2hhbmdlLnB1c2goYyl9X3VucmVnaXN0ZXJPbkNoYW5nZShjKXtIYWUodGhpcy5fb25DaGFu'@;
put 'Z2UsYyl9cmVnaXN0ZXJPbkRpc2FibGVkQ2hhbmdlKGMpe3RoaXMuX29uRGlzYWJsZWRDaGFuZ2UucHVzaChjKX1fdW5yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UoYyl7SGFlKHRoaXMuX29uRGlzYWJsZWRDaGFuZ2UsYyl9X2ZvckVhY2hDaGlsZChjKXt9X3N5bmNQZW5kaW5nQ29udHJvbHMo'@;
put 'KXtyZXR1cm4hKCJzdWJtaXQiIT09dGhpcy51cGRhdGVPbnx8KHRoaXMuX3BlbmRpbmdEaXJ0eSYmdGhpcy5tYXJrQXNEaXJ0eSgpLHRoaXMuX3BlbmRpbmdUb3VjaGVkJiZ0aGlzLm1hcmtBc1RvdWNoZWQoKSwhdGhpcy5fcGVuZGluZ0NoYW5nZSl8fCh0aGlzLnNldFZhbHVlKHRoaXMuX3Bl'@;
put 'bmRpbmdWYWx1ZSx7b25seVNlbGY6ITAsZW1pdE1vZGVsVG9WaWV3Q2hhbmdlOiExfSksMCkpfV9hcHBseUZvcm1TdGF0ZShjKXtOYWUoYyk/KHRoaXMudmFsdWU9dGhpcy5fcGVuZGluZ1ZhbHVlPWMudmFsdWUsYy5kaXNhYmxlZD90aGlzLmRpc2FibGUoe29ubHlTZWxmOiEwLGVtaXRFdmVu'@;
put 'dDohMX0pOnRoaXMuZW5hYmxlKHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ITF9KSk6dGhpcy52YWx1ZT10aGlzLl9wZW5kaW5nVmFsdWU9Y319LFpUZT17cHJvdmlkZTpxYyx1c2VFeGlzdGluZzpQYSgoKT0+emEpfSxCYWU9KCgpPT5Qcm9taXNlLnJlc29sdmUoKSkoKTtsZXQgemE9KCgpPT57'@;
put 'Y2xhc3MgbCBleHRlbmRzIHFje2NvbnN0cnVjdG9yKGEsZixkLGgsbSxfKXtzdXBlcigpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPW0sdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZT1fLHRoaXMuY29udHJvbD1uZXcgWnosdGhpcy5fcmVnaXN0ZXJlZD0hMSx0aGlzLm5hbWU9IiIsdGhpcy51'@;
put 'cGRhdGU9bmV3IHhyLHRoaXMuX3BhcmVudD1hLHRoaXMuX3NldFZhbGlkYXRvcnMoZiksdGhpcy5fc2V0QXN5bmNWYWxpZGF0b3JzKGQpLHRoaXMudmFsdWVBY2Nlc3Nvcj1mdW5jdGlvbiBVeihsLGMpe2lmKCFjKXJldHVybiBudWxsO2xldCBhLGYsZDtyZXR1cm4gQXJyYXkuaXNBcnJheShj'@;
put 'KSxjLmZvckVhY2goaD0+e2guY29uc3RydWN0b3I9PT1pcz9hPWg6ZnVuY3Rpb24gVlRlKGwpe3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YobC5jb25zdHJ1Y3Rvcik9PT1QZ30oaCk/Zj1oOmQ9aH0pLGR8fGZ8fGF8fG51bGx9KDAsaCl9bmdPbkNoYW5nZXMoYSl7aWYodGhpcy5fY2hl'@;
put 'Y2tGb3JFcnJvcnMoKSwhdGhpcy5fcmVnaXN0ZXJlZHx8Im5hbWUiaW4gYSl7aWYodGhpcy5fcmVnaXN0ZXJlZCYmKHRoaXMuX2NoZWNrTmFtZSgpLHRoaXMuZm9ybURpcmVjdGl2ZSkpe2NvbnN0IGY9YS5uYW1lLnByZXZpb3VzVmFsdWU7dGhpcy5mb3JtRGlyZWN0aXZlLnJlbW92ZUNvbnRy'@;
put 'b2woe25hbWU6ZixwYXRoOnRoaXMuX2dldFBhdGgoZil9KX10aGlzLl9zZXRVcENvbnRyb2woKX0iaXNEaXNhYmxlZCJpbiBhJiZ0aGlzLl91cGRhdGVEaXNhYmxlZChhKSxmdW5jdGlvbiB6eihsLGMpe2lmKCFsLmhhc093blByb3BlcnR5KCJtb2RlbCIpKXJldHVybiExO2NvbnN0IGE9bC5t'@;
put 'b2RlbDtyZXR1cm4hIWEuaXNGaXJzdENoYW5nZSgpfHwhT2JqZWN0LmlzKGMsYS5jdXJyZW50VmFsdWUpfShhLHRoaXMudmlld01vZGVsKSYmKHRoaXMuX3VwZGF0ZVZhbHVlKHRoaXMubW9kZWwpLHRoaXMudmlld01vZGVsPXRoaXMubW9kZWwpfW5nT25EZXN0cm95KCl7dGhpcy5mb3JtRGly'@;
put 'ZWN0aXZlJiZ0aGlzLmZvcm1EaXJlY3RpdmUucmVtb3ZlQ29udHJvbCh0aGlzKX1nZXQgcGF0aCgpe3JldHVybiB0aGlzLl9nZXRQYXRoKHRoaXMubmFtZSl9Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gdGhpcy5fcGFyZW50P3RoaXMuX3BhcmVudC5mb3JtRGlyZWN0aXZlOm51bGx9dmll'@;
put 'd1RvTW9kZWxVcGRhdGUoYSl7dGhpcy52aWV3TW9kZWw9YSx0aGlzLnVwZGF0ZS5lbWl0KGEpfV9zZXRVcENvbnRyb2woKXt0aGlzLl9zZXRVcGRhdGVTdHJhdGVneSgpLHRoaXMuX2lzU3RhbmRhbG9uZSgpP3RoaXMuX3NldFVwU3RhbmRhbG9uZSgpOnRoaXMuZm9ybURpcmVjdGl2ZS5hZGRD'@;
put 'b250cm9sKHRoaXMpLHRoaXMuX3JlZ2lzdGVyZWQ9ITB9X3NldFVwZGF0ZVN0cmF0ZWd5KCl7dGhpcy5vcHRpb25zJiZudWxsIT10aGlzLm9wdGlvbnMudXBkYXRlT24mJih0aGlzLmNvbnRyb2wuX3VwZGF0ZU9uPXRoaXMub3B0aW9ucy51cGRhdGVPbil9X2lzU3RhbmRhbG9uZSgpe3JldHVy'@;
put 'biF0aGlzLl9wYXJlbnR8fCEoIXRoaXMub3B0aW9uc3x8IXRoaXMub3B0aW9ucy5zdGFuZGFsb25lKX1fc2V0VXBTdGFuZGFsb25lKCl7WUModGhpcy5jb250cm9sLHRoaXMsdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZSksdGhpcy5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2Vt'@;
put 'aXRFdmVudDohMX0pfV9jaGVja0ZvckVycm9ycygpe3RoaXMuX2lzU3RhbmRhbG9uZSgpfHx0aGlzLl9jaGVja1BhcmVudFR5cGUoKSx0aGlzLl9jaGVja05hbWUoKX1fY2hlY2tQYXJlbnRUeXBlKCl7fV9jaGVja05hbWUoKXt0aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5uYW1lJiYodGhp'@;
put 'cy5uYW1lPXRoaXMub3B0aW9ucy5uYW1lKSx0aGlzLl9pc1N0YW5kYWxvbmUoKX1fdXBkYXRlVmFsdWUoYSl7QmFlLnRoZW4oKCk9Pnt0aGlzLmNvbnRyb2wuc2V0VmFsdWUoYSx7ZW1pdFZpZXdUb01vZGVsQ2hhbmdlOiExfSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY/Lm1hcmtGb3JDaGVj'@;
put 'aygpfSl9X3VwZGF0ZURpc2FibGVkKGEpe2NvbnN0IGY9YS5pc0Rpc2FibGVkLmN1cnJlbnRWYWx1ZSxkPTAhPT1mJiZfdihmKTtCYWUudGhlbigoKT0+e2QmJiF0aGlzLmNvbnRyb2wuZGlzYWJsZWQ/dGhpcy5jb250cm9sLmRpc2FibGUoKTohZCYmdGhpcy5jb250cm9sLmRpc2FibGVkJiZ0'@;
put 'aGlzLmNvbnRyb2wuZW5hYmxlKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY/Lm1hcmtGb3JDaGVjaygpfSl9X2dldFBhdGgoYSl7cmV0dXJuIHRoaXMuX3BhcmVudD9mdW5jdGlvbiBQRChsLGMpe3JldHVyblsuLi5jLnBhdGgsbF19KGEsdGhpcy5fcGFyZW50KTpbYV19fXJldHVybiBsLlx1'@;
put 'MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHJ0KEtjLDkpLHJ0KGZjLDEwKSxydChkNCwxMCkscnQoVGgsMTApLHJ0KFVsLDgpLHJ0KEZnLDgpKX0sbC5cdTAyNzVkaXI9U3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siIiwibmdNb2RlbCIsIiIsMywiZm9ybUNvbnRyb2xOYW1l'@;
put 'IiwiIiwzLCJmb3JtQ29udHJvbCIsIiJdXSxpbnB1dHM6e25hbWU6Im5hbWUiLGlzRGlzYWJsZWQ6WyJkaXNhYmxlZCIsImlzRGlzYWJsZWQiXSxtb2RlbDpbIm5nTW9kZWwiLCJtb2RlbCJdLG9wdGlvbnM6WyJuZ01vZGVsT3B0aW9ucyIsIm9wdGlvbnMiXX0sb3V0cHV0czp7dXBkYXRlOiJu'@;
put 'Z01vZGVsQ2hhbmdlIn0sZXhwb3J0QXM6WyJuZ01vZGVsIl0sZmVhdHVyZXM6W3JpKFtaVGVdKSxybyxibF19KSxsfSkoKSxwND0oKCk9PntjbGFzcyBse31yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVkaXI9U3Ioe3R5cGU6bCxzZWxl'@;
put 'Y3RvcnM6W1siZm9ybSIsMywibmdOb0Zvcm0iLCIiLDMsIm5nTmF0aXZlVmFsaWRhdGUiLCIiXV0saG9zdEF0dHJzOlsibm92YWxpZGF0ZSIsIiJdfSksbH0pKCk7Y29uc3QgWVRlPXtwcm92aWRlOlRoLHVzZUV4aXN0aW5nOlBhKCgpPT5WRCksbXVsdGk6ITB9O2xldCBWRD0oKCk9PntjbGFz'@;
put 'cyBsIGV4dGVuZHMgUGd7d3JpdGVWYWx1ZShhKXt0aGlzLnNldFByb3BlcnR5KCJ2YWx1ZSIsYT8/IiIpfXJlZ2lzdGVyT25DaGFuZ2UoYSl7dGhpcy5vbkNoYW5nZT1mPT57YSgiIj09Zj9udWxsOnBhcnNlRmxvYXQoZikpfX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IGM7'@;
put 'cmV0dXJuIGZ1bmN0aW9uKGYpe3JldHVybihjfHwoYz14bChsKSkpKGZ8fGwpfX0oKSxsLlx1MDI3NWRpcj1Tcih7dHlwZTpsLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsIm51bWJlciIsImZvcm1Db250'@;
put 'cm9sIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGYpezEmYSYmRXQoImlucHV0IixmdW5jdGlvbihoKXtyZXR1cm4gZi5vbkNoYW5nZShoLnRhcmdldC52YWx1ZSl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4g'@;
put 'Zi5vblRvdWNoZWQoKX0pfSxmZWF0dXJlczpbcmkoW1lUZV0pLHJvXX0pLGx9KSgpO2NvbnN0IFdUZT17cHJvdmlkZTpUaCx1c2VFeGlzdGluZzpQYSgoKT0+QkQpLG11bHRpOiEwfTtsZXQgamFlPSgoKT0+e2NsYXNzIGx7fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4g'@;
put 'bmV3KGF8fGwpfSxsLlx1MDI3NW1vZD1EaSh7dHlwZTpsfSksbC5cdTAyNzVpbmo9eGkoe30pLGx9KSgpLEdUZT0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKCl7dGhpcy5fYWNjZXNzb3JzPVtdfWFkZChhLGYpe3RoaXMuX2FjY2Vzc29ycy5wdXNoKFthLGZdKX1yZW1vdmUoYSl7Zm9yKGxl'@;
put 'dCBmPXRoaXMuX2FjY2Vzc29ycy5sZW5ndGgtMTtmPj0wOy0tZilpZih0aGlzLl9hY2Nlc3NvcnNbZl1bMV09PT1hKXJldHVybiB2b2lkIHRoaXMuX2FjY2Vzc29ycy5zcGxpY2UoZiwxKX1zZWxlY3QoYSl7dGhpcy5fYWNjZXNzb3JzLmZvckVhY2goZj0+e3RoaXMuX2lzU2FtZUdyb3VwKGYs'@;
put 'YSkmJmZbMV0hPT1hJiZmWzFdLmZpcmVVbmNoZWNrKGEudmFsdWUpfSl9X2lzU2FtZUdyb3VwKGEsZil7cmV0dXJuISFhWzBdLmNvbnRyb2wmJmFbMF0uX3BhcmVudD09PWYuX2NvbnRyb2wuX3BhcmVudCYmYVsxXS5uYW1lPT09Zi5uYW1lfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24o'@;
put 'YSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVwcm92PWhyKHt0b2tlbjpsLGZhY3Rvcnk6bC5cdTAyNzVmYWMscHJvdmlkZWRJbjpqYWV9KSxsfSkoKSxCRD0oKCk9PntjbGFzcyBsIGV4dGVuZHMgUGd7Y29uc3RydWN0b3IoYSxmLGQsaCl7c3VwZXIoYSxmKSx0aGlzLl9yZWdpc3RyeT1k'@;
put 'LHRoaXMuX2luamVjdG9yPWgsdGhpcy5zZXREaXNhYmxlZFN0YXRlRmlyZWQ9ITEsdGhpcy5vbkNoYW5nZT0oKT0+e30sdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZT1IaShGZyx7b3B0aW9uYWw6ITB9KT8/WkN9bmdPbkluaXQoKXt0aGlzLl9jb250cm9sPXRoaXMuX2luamVjdG9yLmdldChx'@;
put 'YyksdGhpcy5fY2hlY2tOYW1lKCksdGhpcy5fcmVnaXN0cnkuYWRkKHRoaXMuX2NvbnRyb2wsdGhpcyl9bmdPbkRlc3Ryb3koKXt0aGlzLl9yZWdpc3RyeS5yZW1vdmUodGhpcyl9d3JpdGVWYWx1ZShhKXt0aGlzLl9zdGF0ZT1hPT09dGhpcy52YWx1ZSx0aGlzLnNldFByb3BlcnR5KCJjaGVj'@;
put 'a2VkIix0aGlzLl9zdGF0ZSl9cmVnaXN0ZXJPbkNoYW5nZShhKXt0aGlzLl9mbj1hLHRoaXMub25DaGFuZ2U9KCk9PnthKHRoaXMudmFsdWUpLHRoaXMuX3JlZ2lzdHJ5LnNlbGVjdCh0aGlzKX19c2V0RGlzYWJsZWRTdGF0ZShhKXsodGhpcy5zZXREaXNhYmxlZFN0YXRlRmlyZWR8fGF8fCJ3'@;
put 'aGVuRGlzYWJsZWRGb3JMZWdhY3lDb2RlIj09PXRoaXMuY2FsbFNldERpc2FibGVkU3RhdGUpJiZ0aGlzLnNldFByb3BlcnR5KCJkaXNhYmxlZCIsYSksdGhpcy5zZXREaXNhYmxlZFN0YXRlRmlyZWQ9ITB9ZmlyZVVuY2hlY2soYSl7dGhpcy53cml0ZVZhbHVlKGEpfV9jaGVja05hbWUoKXsh'@;
put 'dGhpcy5uYW1lJiZ0aGlzLmZvcm1Db250cm9sTmFtZSYmKHRoaXMubmFtZT10aGlzLmZvcm1Db250cm9sTmFtZSl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHJ0KGpvKSxydChWaSkscnQoR1RlKSxydChBbCkpfSxsLlx1MDI3NWRpcj1Tcih7dHlw'@;
put 'ZTpsLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJyYWRpbyIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwicmFkaW8iLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwicmFkaW8iLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihh'@;
put 'LGYpezEmYSYmRXQoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gZi5vbkNoYW5nZSgpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGYub25Ub3VjaGVkKCl9KX0saW5wdXRzOntuYW1lOiJuYW1lIixmb3JtQ29udHJvbE5hbWU6ImZvcm1Db250cm9sTmFtZSIsdmFsdWU6InZhbHVlIn0s'@;
put 'ZmVhdHVyZXM6W3JpKFtXVGVdKSxyb119KSxsfSkoKTtjb25zdCBXej1uZXcgTWkoIk5nTW9kZWxXaXRoRm9ybUNvbnRyb2xXYXJuaW5nIiksZU9lPXtwcm92aWRlOlRoLHVzZUV4aXN0aW5nOlBhKCgpPT5MMCksbXVsdGk6ITB9O2Z1bmN0aW9uIFdhZShsLGMpe3JldHVybiBudWxsPT1sP2Ak'@;
put 'e2N9YDooYyYmIm9iamVjdCI9PXR5cGVvZiBjJiYoYz0iT2JqZWN0IiksYCR7bH06ICR7Y31gLnNsaWNlKDAsNTApKX1sZXQgTDA9KCgpPT57Y2xhc3MgbCBleHRlbmRzIFBne2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9vcHRpb25NYXA9bmV3IE1hcCx0aGlzLl9p'@;
put 'ZENvdW50ZXI9MCx0aGlzLl9jb21wYXJlV2l0aD1PYmplY3QuaXN9c2V0IGNvbXBhcmVXaXRoKGEpe3RoaXMuX2NvbXBhcmVXaXRoPWF9d3JpdGVWYWx1ZShhKXt0aGlzLnZhbHVlPWE7Y29uc3QgZD1XYWUodGhpcy5fZ2V0T3B0aW9uSWQoYSksYSk7dGhpcy5zZXRQcm9wZXJ0eSgidmFsdWUi'@;
put 'LGQpfXJlZ2lzdGVyT25DaGFuZ2UoYSl7dGhpcy5vbkNoYW5nZT1mPT57dGhpcy52YWx1ZT10aGlzLl9nZXRPcHRpb25WYWx1ZShmKSxhKHRoaXMudmFsdWUpfX1fcmVnaXN0ZXJPcHRpb24oKXtyZXR1cm4odGhpcy5faWRDb3VudGVyKyspLnRvU3RyaW5nKCl9X2dldE9wdGlvbklkKGEpe2Zv'@;
put 'cihjb25zdCBmIG9mIHRoaXMuX29wdGlvbk1hcC5rZXlzKCkpaWYodGhpcy5fY29tcGFyZVdpdGgodGhpcy5fb3B0aW9uTWFwLmdldChmKSxhKSlyZXR1cm4gZjtyZXR1cm4gbnVsbH1fZ2V0T3B0aW9uVmFsdWUoYSl7Y29uc3QgZj1mdW5jdGlvbiB0T2UobCl7cmV0dXJuIGwuc3BsaXQoIjoi'@;
put 'KVswXX0oYSk7cmV0dXJuIHRoaXMuX29wdGlvbk1hcC5oYXMoZik/dGhpcy5fb3B0aW9uTWFwLmdldChmKTphfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgYztyZXR1cm4gZnVuY3Rpb24oZil7cmV0dXJuKGN8fChjPXhsKGwpKSkoZnx8bCl9fSgpLGwuXHUwMjc1ZGlyPVNy'@;
put 'KHt0eXBlOmwsc2VsZWN0b3JzOltbInNlbGVjdCIsImZvcm1Db250cm9sTmFtZSIsIiIsMywibXVsdGlwbGUiLCIiXSxbInNlbGVjdCIsImZvcm1Db250cm9sIiwiIiwzLCJtdWx0aXBsZSIsIiJdLFsic2VsZWN0IiwibmdNb2RlbCIsIiIsMywibXVsdGlwbGUiLCIiXV0saG9zdEJpbmRpbmdz'@;
put 'OmZ1bmN0aW9uKGEsZil7MSZhJiZFdCgiY2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gZi5vbkNoYW5nZShoLnRhcmdldC52YWx1ZSl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gZi5vblRvdWNoZWQoKX0pfSxpbnB1dHM6e2NvbXBhcmVXaXRoOiJjb21wYXJlV2l0aCJ9LGZlYXR1cmVz'@;
put 'OltyaShbZU9lXSkscm9dfSksbH0pKCksUzE9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhLGYsZCl7dGhpcy5fZWxlbWVudD1hLHRoaXMuX3JlbmRlcmVyPWYsdGhpcy5fc2VsZWN0PWQsdGhpcy5fc2VsZWN0JiYodGhpcy5pZD10aGlzLl9zZWxlY3QuX3JlZ2lzdGVyT3B0aW9uKCkpfXNl'@;
put 'dCBuZ1ZhbHVlKGEpe251bGwhPXRoaXMuX3NlbGVjdCYmKHRoaXMuX3NlbGVjdC5fb3B0aW9uTWFwLnNldCh0aGlzLmlkLGEpLHRoaXMuX3NldEVsZW1lbnRWYWx1ZShXYWUodGhpcy5pZCxhKSksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSl9c2V0IHZhbHVl'@;
put 'KGEpe3RoaXMuX3NldEVsZW1lbnRWYWx1ZShhKSx0aGlzLl9zZWxlY3QmJnRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSl9X3NldEVsZW1lbnRWYWx1ZShhKXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsInZh'@;
put 'bHVlIixhKX1uZ09uRGVzdHJveSgpe3RoaXMuX3NlbGVjdCYmKHRoaXMuX3NlbGVjdC5fb3B0aW9uTWFwLmRlbGV0ZSh0aGlzLmlkKSx0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXco'@;
put 'YXx8bCkocnQoVmkpLHJ0KGpvKSxydChMMCw5KSl9LGwuXHUwMjc1ZGlyPVNyKHt0eXBlOmwsc2VsZWN0b3JzOltbIm9wdGlvbiJdXSxpbnB1dHM6e25nVmFsdWU6Im5nVmFsdWUiLHZhbHVlOiJ2YWx1ZSJ9fSksbH0pKCk7Y29uc3Qgbk9lPXtwcm92aWRlOlRoLHVzZUV4aXN0aW5nOlBhKCgp'@;
put 'PT5HQyksbXVsdGk6ITB9O2Z1bmN0aW9uIEdhZShsLGMpe3JldHVybiBudWxsPT1sP2Ake2N9YDooInN0cmluZyI9PXR5cGVvZiBjJiYoYz1gJyR7Y30nYCksYyYmIm9iamVjdCI9PXR5cGVvZiBjJiYoYz0iT2JqZWN0IiksYCR7bH06ICR7Y31gLnNsaWNlKDAsNTApKX1sZXQgR0M9KCgpPT57'@;
put 'Y2xhc3MgbCBleHRlbmRzIFBne2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9vcHRpb25NYXA9bmV3IE1hcCx0aGlzLl9pZENvdW50ZXI9MCx0aGlzLl9jb21wYXJlV2l0aD1PYmplY3QuaXN9c2V0IGNvbXBhcmVXaXRoKGEpe3RoaXMuX2NvbXBhcmVXaXRoPWF9d3Jp'@;
put 'dGVWYWx1ZShhKXtsZXQgZjtpZih0aGlzLnZhbHVlPWEsQXJyYXkuaXNBcnJheShhKSl7Y29uc3QgZD1hLm1hcChoPT50aGlzLl9nZXRPcHRpb25JZChoKSk7Zj0oaCxtKT0+e2guX3NldFNlbGVjdGVkKGQuaW5kZXhPZihtLnRvU3RyaW5nKCkpPi0xKX19ZWxzZSBmPShkLGgpPT57ZC5fc2V0'@;
put 'U2VsZWN0ZWQoITEpfTt0aGlzLl9vcHRpb25NYXAuZm9yRWFjaChmKX1yZWdpc3Rlck9uQ2hhbmdlKGEpe3RoaXMub25DaGFuZ2U9Zj0+e2NvbnN0IGQ9W10saD1mLnNlbGVjdGVkT3B0aW9ucztpZih2b2lkIDAhPT1oKXtjb25zdCBtPWg7Zm9yKGxldCBfPTA7XzxtLmxlbmd0aDtfKyspe2Nv'@;
put 'bnN0IFg9dGhpcy5fZ2V0T3B0aW9uVmFsdWUobVtfXS52YWx1ZSk7ZC5wdXNoKFgpfX1lbHNle2NvbnN0IG09Zi5vcHRpb25zO2ZvcihsZXQgXz0wO188bS5sZW5ndGg7XysrKXtjb25zdCBPPW1bX107aWYoTy5zZWxlY3RlZCl7Y29uc3QgWD10aGlzLl9nZXRPcHRpb25WYWx1ZShPLnZhbHVl'@;
put 'KTtkLnB1c2goWCl9fX10aGlzLnZhbHVlPWQsYShkKX19X3JlZ2lzdGVyT3B0aW9uKGEpe2NvbnN0IGY9KHRoaXMuX2lkQ291bnRlcisrKS50b1N0cmluZygpO3JldHVybiB0aGlzLl9vcHRpb25NYXAuc2V0KGYsYSksZn1fZ2V0T3B0aW9uSWQoYSl7Zm9yKGNvbnN0IGYgb2YgdGhpcy5fb3B0'@;
put 'aW9uTWFwLmtleXMoKSlpZih0aGlzLl9jb21wYXJlV2l0aCh0aGlzLl9vcHRpb25NYXAuZ2V0KGYpLl92YWx1ZSxhKSlyZXR1cm4gZjtyZXR1cm4gbnVsbH1fZ2V0T3B0aW9uVmFsdWUoYSl7Y29uc3QgZj1mdW5jdGlvbiByT2UobCl7cmV0dXJuIGwuc3BsaXQoIjoiKVswXX0oYSk7cmV0dXJu'@;
put 'IHRoaXMuX29wdGlvbk1hcC5oYXMoZik/dGhpcy5fb3B0aW9uTWFwLmdldChmKS5fdmFsdWU6YX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IGM7cmV0dXJuIGZ1bmN0aW9uKGYpe3JldHVybihjfHwoYz14bChsKSkpKGZ8fGwpfX0oKSxsLlx1MDI3NWRpcj1Tcih7dHlwZTps'@;
put 'LHNlbGVjdG9yczpbWyJzZWxlY3QiLCJtdWx0aXBsZSIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsic2VsZWN0IiwibXVsdGlwbGUiLCIiLCJmb3JtQ29udHJvbCIsIiJdLFsic2VsZWN0IiwibXVsdGlwbGUiLCIiLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGYp'@;
put 'ezEmYSYmRXQoImNoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIGYub25DaGFuZ2UoaC50YXJnZXQpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGYub25Ub3VjaGVkKCl9KX0saW5wdXRzOntjb21wYXJlV2l0aDoiY29tcGFyZVdpdGgifSxmZWF0dXJlczpbcmkoW25PZV0pLHJvXX0pLGx9'@;
put 'KSgpLE0xPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmLGQpe3RoaXMuX2VsZW1lbnQ9YSx0aGlzLl9yZW5kZXJlcj1mLHRoaXMuX3NlbGVjdD1kLHRoaXMuX3NlbGVjdCYmKHRoaXMuaWQ9dGhpcy5fc2VsZWN0Ll9yZWdpc3Rlck9wdGlvbih0aGlzKSl9c2V0IG5nVmFsdWUoYSl7bnVs'@;
put 'bCE9dGhpcy5fc2VsZWN0JiYodGhpcy5fdmFsdWU9YSx0aGlzLl9zZXRFbGVtZW50VmFsdWUoR2FlKHRoaXMuaWQsYSkpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpfXNldCB2YWx1ZShhKXt0aGlzLl9zZWxlY3Q/KHRoaXMuX3ZhbHVlPWEsdGhpcy5fc2V0'@;
put 'RWxlbWVudFZhbHVlKEdhZSh0aGlzLmlkLGEpKSx0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKTp0aGlzLl9zZXRFbGVtZW50VmFsdWUoYSl9X3NldEVsZW1lbnRWYWx1ZShhKXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50Lm5hdGl2'@;
put 'ZUVsZW1lbnQsInZhbHVlIixhKX1fc2V0U2VsZWN0ZWQoYSl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LCJzZWxlY3RlZCIsYSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zZWxlY3QmJih0aGlzLl9zZWxlY3QuX29wdGlvbk1hcC5kZWxldGUo'@;
put 'dGhpcy5pZCksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHJ0KFZpKSxydChqbykscnQoR0MsOSkpfSxsLlx1MDI3NWRpcj1Tcih7dHlwZTpsLHNlbGVjdG9yczpbWyJv'@;
put 'cHRpb24iXV0saW5wdXRzOntuZ1ZhbHVlOiJuZ1ZhbHVlIix2YWx1ZToidmFsdWUifX0pLGx9KSgpLHJsZT0oKCk9PntjbGFzcyBse31yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVtb2Q9RGkoe3R5cGU6bH0pLGwuXHUwMjc1aW5qPXhp'@;
put 'KHtpbXBvcnRzOltqYWVdfSksbH0pKCksZGM9KCgpPT57Y2xhc3MgbHtzdGF0aWMgd2l0aENvbmZpZyhhKXtyZXR1cm57bmdNb2R1bGU6bCxwcm92aWRlcnM6W3twcm92aWRlOkZnLHVzZVZhbHVlOmEuY2FsbFNldERpc2FibGVkU3RhdGU/P1pDfV19fX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVu'@;
put 'Y3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVtb2Q9RGkoe3R5cGU6bH0pLGwuXHUwMjc1aW5qPXhpKHtpbXBvcnRzOltybGVdfSksbH0pKCksaE9lPSgoKT0+e2NsYXNzIGx7c3RhdGljIHdpdGhDb25maWcoYSl7cmV0dXJue25nTW9kdWxlOmwscHJvdmlkZXJzOlt7cHJvdmlk'@;
put 'ZTpXeix1c2VWYWx1ZTphLndhcm5Pbk5nTW9kZWxXaXRoRm9ybUNvbnRyb2w/PyJhbHdheXMifSx7cHJvdmlkZTpGZyx1c2VWYWx1ZTphLmNhbGxTZXREaXNhYmxlZFN0YXRlPz9aQ31dfX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1'@;
put 'bW9kPURpKHt0eXBlOmx9KSxsLlx1MDI3NWluaj14aSh7aW1wb3J0czpbcmxlXX0pLGx9KSgpO2Z1bmN0aW9uIHBPZShsLGMpe3RoaXMudj1sLHRoaXMuaz1jfWZ1bmN0aW9uIFVEKGwpe3ZhciBjLGE7ZnVuY3Rpb24gZihoLG0pe3RyeXt2YXIgXz1sW2hdKG0pLE89Xy52YWx1ZSxYPU8gaW5z'@;
put 'dGFuY2VvZiBwT2U7UHJvbWlzZS5yZXNvbHZlKFg/Ty52Ok8pLnRoZW4oZnVuY3Rpb24oYWUpe2lmKFgpe3ZhciBwZT0icmV0dXJuIj09PWg/InJldHVybiI6Im5leHQiO2lmKCFPLmt8fGFlLmRvbmUpcmV0dXJuIGYocGUsYWUpO2FlPWxbcGVdKGFlKS52YWx1ZX1kKF8uZG9uZT8icmV0dXJu'@;
put 'Ijoibm9ybWFsIixhZSl9LGZ1bmN0aW9uKGFlKXtmKCJ0aHJvdyIsYWUpfSl9Y2F0Y2goYWUpe2QoInRocm93IixhZSl9fWZ1bmN0aW9uIGQoaCxtKXtzd2l0Y2goaCl7Y2FzZSJyZXR1cm4iOmMucmVzb2x2ZSh7dmFsdWU6bSxkb25lOiEwfSk7YnJlYWs7Y2FzZSJ0aHJvdyI6Yy5yZWplY3Qo'@;
put 'bSk7YnJlYWs7ZGVmYXVsdDpjLnJlc29sdmUoe3ZhbHVlOm0sZG9uZTohMX0pfShjPWMubmV4dCk/ZihjLmtleSxjLmFyZyk6YT1udWxsfXRoaXMuX2ludm9rZT1mdW5jdGlvbihoLG0pe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihfLE8pe3ZhciBYPXtrZXk6aCxhcmc6bSxyZXNvbHZl'@;
put 'Ol8scmVqZWN0Ok8sbmV4dDpudWxsfTthP2E9YS5uZXh0PVg6KGM9YT1YLGYoaCxtKSl9KX0sImZ1bmN0aW9uIiE9dHlwZW9mIGwucmV0dXJuJiYodGhpcy5yZXR1cm49dm9pZCAwKX1VRC5wcm90b3R5cGVbImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmFzeW5jSXRlcmF0b3J8'@;
put 'fCJAQGFzeW5jSXRlcmF0b3IiXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxVRC5wcm90b3R5cGUubmV4dD1mdW5jdGlvbihsKXtyZXR1cm4gdGhpcy5faW52b2tlKCJuZXh0IixsKX0sVUQucHJvdG90eXBlLnRocm93PWZ1bmN0aW9uKGwpe3JldHVybiB0aGlzLl9pbnZva2UoInRocm93Iixs'@;
put 'KX0sVUQucHJvdG90eXBlLnJldHVybj1mdW5jdGlvbihsKXtyZXR1cm4gdGhpcy5faW52b2tlKCJyZXR1cm4iLGwpfTtjbGFzcyBaRHtzdGF0aWMgZ2V0VHJhcEVsZW1lbnRzKCl7cmV0dXJuWy4uLm51LnN0YXRlLmZvY3VzVHJhcEl0ZW1zXX1zdGF0aWMgc2V0VHJhcEVsZW1lbnRzKGMpe2Nv'@;
put 'bnN0IGE9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiaHRtbCIpO251bGwhPT1hJiZmdW5jdGlvbiBxeihsLC4uLmMpe2wmJmMuZm9yRWFjaCgoW2EsZl0pPT57ITE9PT1mfHxudWxsPT09Zj9sLnJlbW92ZUF0dHJpYnV0ZShhKTpsLnNldEF0dHJpYnV0ZShhLGYrIiIpfSl9KGEsWyJjZHMtZm9j'@;
put 'dXMtdHJhcCIsISFjLmxlbmd0aCYmIiJdKSxudS5zdGF0ZS5mb2N1c1RyYXBJdGVtcz1bLi4uY119c3RhdGljIHJlbW92ZVRyYXBFbGVtZW50KGMpe3RoaXMuZ2V0VHJhcEVsZW1lbnRzKCkubGVuZ3RoPDF8fHRoaXMuc2V0VHJhcEVsZW1lbnRzKFsuLi50aGlzLmdldFRyYXBFbGVtZW50cygp'@;
put 'LmZpbHRlcihhPT5hLmZvY3VzVHJhcElkIT09Yy5mb2N1c1RyYXBJZCldKX1zdGF0aWMgc2V0Q3VycmVudChjKXtjPy5mb2N1c1RyYXBJZCYmdGhpcy5zZXRUcmFwRWxlbWVudHMoWy4uLnRoaXMuZ2V0VHJhcEVsZW1lbnRzKCkuZmlsdGVyKGE9PmEuZm9jdXNUcmFwSWQhPT1jLmZvY3VzVHJh'@;
put 'cElkKSxjXSl9c3RhdGljIGFjdGl2YXRlUHJldmlvdXNDdXJyZW50KCl7dGhpcy5zZXRUcmFwRWxlbWVudHMoWy4uLnRoaXMuZ2V0VHJhcEVsZW1lbnRzKCldLnNsaWNlKDAsLTEpKX1zdGF0aWMgZ2V0Q3VycmVudCgpe3JldHVybiBmdW5jdGlvbiBtT2UobCl7cmV0dXJuIGwubGVuZ3RoP2xb'@;
put 'bC5sZW5ndGgtMV06dm9pZCAwfSh0aGlzLmdldFRyYXBFbGVtZW50cygpKXx8bnVsbH19Y29uc3QgRU9lPVdvZSgzLChsLGMsYSk9PnshZnVuY3Rpb24gVUFlKGwsYyl7cmV0dXJuIGN8fChjPXdpbmRvdyYmd2luZG93LmN1c3RvbUVsZW1lbnRzKSwhY3x8ISFjLmdldChsKX0obCl8fGZ1bmN0'@;
put 'aW9uIEVBZSgpe3JldHVybiB3aW5kb3c/LmxvY2F0aW9uPy5ocmVmPy5pbmNsdWRlcygibG9jYWxob3N0OjYwMDYiKX0oKT8oYS5kZWZpbmUobCxjKSwkb2UoKSx3aW5kb3cmJiFPYmplY3Qua2V5cyh3aW5kb3cuQ0RTLl9zdGF0ZS5lbGVtZW50UmVnaXN0cnkpLnNvbWUoZj0+Zj09PWwpJiYo'@;
put 'd2luZG93LkNEUy5fc3RhdGUuZWxlbWVudFJlZ2lzdHJ5PXsuLi53aW5kb3cuQ0RTLl9zdGF0ZS5lbGVtZW50UmVnaXN0cnksW2xdOnt9fSkpOkxnLndhcm4obCsiIGhhcyBhbHJlYWR5IGJlZW4gcmVnaXN0ZXJlZCIpfSk7ZnVuY3Rpb24gb2xlKGwsYyl7TG9lKCkmJkdvZShbImN1c3RvbUVs'@;
put 'ZW1lbnRzIl0pJiZFT2UobCxjLHdpbmRvdy5jdXN0b21FbGVtZW50cyl9bGV0IGFsZT0hMTtmdW5jdGlvbiB4T2UobCl7aWYoKGw9TWF0aC50cnVuYyhsKXx8MCk8MCYmKGwrPXRoaXMubGVuZ3RoKSwhKGw8MHx8bD49dGhpcy5sZW5ndGgpKXJldHVybiB0aGlzW2xdfWlmKCFhbGUpe2FsZT0h'@;
put 'MDtjb25zdCBsPVJlZmxlY3QuZ2V0UHJvdG90eXBlT2YoSW50OEFycmF5KTtmb3IoY29uc3QgYyBvZltBcnJheSxTdHJpbmcsbF0pT2JqZWN0LmRlZmluZVByb3BlcnR5KGMucHJvdG90eXBlLCJhdCIse3ZhbHVlOnhPZSx3cml0YWJsZTohMCxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZToh'@;
put 'MH0pfWxldCBsbGU9ITEsc2xlPSExO2Z1bmN0aW9uIHVsZShsLGMsYSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsYSx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKGMpP3RoaXMuZ2V0QXR0cmlidXRlKGMpOm51'@;
put 'bGx9LHNldDpmdW5jdGlvbihmKXtudWxsIT09Zj90aGlzLnNldEF0dHJpYnV0ZShjLGYpOnRoaXMucmVtb3ZlQXR0cmlidXRlKGMpfX0pfWxsZXx8RWxlbWVudC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoInJvbGUiKXx8KHVsZShFbGVtZW50LnByb3RvdHlwZSwicm9sZSIsInJvbGUiKSxs'@;
put 'bGU9ITApLHNsZXx8RWxlbWVudC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoImFyaWFMYWJlbCIpfHwoc2xlPSEwLFsiQWN0aXZlRGVzY2VuZGFudCIsIkF0b21pYyIsIkF1dG9Db21wbGV0ZSIsIkJ1c3kiLCJDaGVja2VkIiwiQ29sQ291bnQiLCJDb2xJbmRleCIsIkNvbFNwYW4iLCJDb250'@;
put 'cm9scyIsIkN1cnJlbnQiLCJEZXNjcmliZWRCeSIsIkRldGFpbHMiLCJEaXNhYmxlZCIsIkVycm9yTWVzc2FnZSIsIkV4cGFuZGVkIiwiRmxvd1RvIiwiSGFzUG9wdXAiLCJIaWRkZW4iLCJJbnZhbGlkIiwiS2V5U2hvcnRjdXRzIiwiTGFiZWwiLCJMYWJlbGxlZEJ5IiwiTGV2ZWwiLCJMaXZl'@;
put 'IiwiTW9kYWwiLCJNdWx0aUxpbmUiLCJNdWx0aVNlbGVjdGFibGUiLCJPcmllbnRhdGlvbiIsIk93bnMiLCJQbGFjZWhvbGRlciIsIlBvc0luU2V0IiwiUHJlc3NlZCIsIlJlYWRPbmx5IiwiUmVsZXZhbnQiLCJSZXF1aXJlZCIsIlJvbGVEZXNjcmlwdGlvbiIsIlJvd0NvdW50IiwiUm93SW5k'@;
put 'ZXgiLCJSb3dTcGFuIiwiU2VsZWN0ZWQiLCJTZXRTaXplIiwiU29ydCIsIlZhbHVlTWF4IiwiVmFsdWVNaW4iLCJWYWx1ZU5vdyIsIlZhbHVlVGV4dCJdLmZvckVhY2gobD0+dWxlKEVsZW1lbnQucHJvdG90eXBlLCJhcmlhLSIrbC50b0xvd2VyQ2FzZSgpLCJhcmlhIitsKSkpO2NvbnN0IFlE'@;
put 'PXdpbmRvdyxYej1ZRC5TaGFkb3dSb290JiYodm9pZCAwPT09WUQuU2hhZHlDU1N8fFlELlNoYWR5Q1NTLm5hdGl2ZVNoYWRvdykmJiJhZG9wdGVkU3R5bGVTaGVldHMiaW4gRG9jdW1lbnQucHJvdG90eXBlJiYicmVwbGFjZSJpbiBDU1NTdHlsZVNoZWV0LnByb3RvdHlwZSxKej1TeW1ib2wo'@;
put 'KSxjbGU9bmV3IFdlYWtNYXA7Y2xhc3MgZmxle2NvbnN0cnVjdG9yKGMsYSxmKXtpZih0aGlzLl8kY3NzUmVzdWx0JD0hMCxmIT09SnopdGhyb3cgRXJyb3IoIkNTU1Jlc3VsdCBpcyBub3QgY29uc3RydWN0YWJsZS4gVXNlIGB1bnNhZmVDU1NgIG9yIGBjc3NgIGluc3RlYWQuIik7dGhpcy5j'@;
put 'c3NUZXh0PWMsdGhpcy50PWF9Z2V0IHN0eWxlU2hlZXQoKXtsZXQgYz10aGlzLm87Y29uc3QgYT10aGlzLnQ7aWYoWHomJnZvaWQgMD09PWMpe2NvbnN0IGY9dm9pZCAwIT09YSYmMT09PWEubGVuZ3RoO2YmJihjPWNsZS5nZXQoYSkpLHZvaWQgMD09PWMmJigodGhpcy5vPWM9bmV3IENTU1N0'@;
put 'eWxlU2hlZXQpLnJlcGxhY2VTeW5jKHRoaXMuY3NzVGV4dCksZiYmY2xlLnNldChhLGMpKX1yZXR1cm4gY310b1N0cmluZygpe3JldHVybiB0aGlzLmNzc1RleHR9fWNvbnN0IFF6PShsLC4uLmMpPT57Y29uc3QgYT0xPT09bC5sZW5ndGg/bFswXTpjLnJlZHVjZSgoZixkLGgpPT5mKyhtPT57'@;
put 'aWYoITA9PT1tLl8kY3NzUmVzdWx0JClyZXR1cm4gbS5jc3NUZXh0O2lmKCJudW1iZXIiPT10eXBlb2YgbSlyZXR1cm4gbTt0aHJvdyBFcnJvcigiVmFsdWUgcGFzc2VkIHRvICdjc3MnIGZ1bmN0aW9uIG11c3QgYmUgYSAnY3NzJyBmdW5jdGlvbiByZXN1bHQ6ICIrbSsiLiBVc2UgJ3Vuc2Fm'@;
put 'ZUNTUycgdG8gcGFzcyBub24tbGl0ZXJhbCB2YWx1ZXMsIGJ1dCB0YWtlIGNhcmUgdG8gZW5zdXJlIHBhZ2Ugc2VjdXJpdHkuIil9KShkKStsW2grMV0sbFswXSk7cmV0dXJuIG5ldyBmbGUoYSxsLEp6KX0sZGxlPVh6P2w9Pmw6bD0+bCBpbnN0YW5jZW9mIENTU1N0eWxlU2hlZXQ/KGM9Pnts'@;
put 'ZXQgYT0iIjtmb3IoY29uc3QgZiBvZiBjLmNzc1J1bGVzKWErPWYuY3NzVGV4dDtyZXR1cm4obD0+bmV3IGZsZSgic3RyaW5nIj09dHlwZW9mIGw/bDpsKyIiLHZvaWQgMCxKeikpKGEpfSkobCk6bDt2YXIgZVU7Y29uc3QgV0Q9d2luZG93LGhsZT1XRC50cnVzdGVkVHlwZXMsT09lPWhsZT9o'@;
put 'bGUuZW1wdHlTY3JpcHQ6IiIscGxlPVdELnJlYWN0aXZlRWxlbWVudFBvbHlmaWxsU3VwcG9ydCx0VT17dG9BdHRyaWJ1dGUobCxjKXtzd2l0Y2goYyl7Y2FzZSBCb29sZWFuOmw9bD9PT2U6bnVsbDticmVhaztjYXNlIE9iamVjdDpjYXNlIEFycmF5Omw9bnVsbD09bD9sOkpTT04uc3RyaW5n'@;
put 'aWZ5KGwpfXJldHVybiBsfSxmcm9tQXR0cmlidXRlKGwsYyl7bGV0IGE9bDtzd2l0Y2goYyl7Y2FzZSBCb29sZWFuOmE9bnVsbCE9PWw7YnJlYWs7Y2FzZSBOdW1iZXI6YT1udWxsPT09bD9udWxsOk51bWJlcihsKTticmVhaztjYXNlIE9iamVjdDpjYXNlIEFycmF5OnRyeXthPUpTT04ucGFy'@;
put 'c2UobCl9Y2F0Y2h7YT1udWxsfX1yZXR1cm4gYX19LG1sZT0obCxjKT0+YyE9PWwmJihjPT1jfHxsPT1sKSxuVT17YXR0cmlidXRlOiEwLHR5cGU6U3RyaW5nLGNvbnZlcnRlcjp0VSxyZWZsZWN0OiExLGhhc0NoYW5nZWQ6bWxlfSxyVT0iZmluYWxpemVkIjtjbGFzcyBHdiBleHRlbmRzIEhU'@;
put 'TUxFbGVtZW50e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl8kRWk9bmV3IE1hcCx0aGlzLmlzVXBkYXRlUGVuZGluZz0hMSx0aGlzLmhhc1VwZGF0ZWQ9ITEsdGhpcy5fJEVsPW51bGwsdGhpcy51KCl9c3RhdGljIGFkZEluaXRpYWxpemVyKGMpe3ZhciBhO3RoaXMuZmluYWxpemUoKSwo'@;
put 'bnVsbCE9PShhPXRoaXMuaCkmJnZvaWQgMCE9PWE/YTp0aGlzLmg9W10pLnB1c2goYyl9c3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKXt0aGlzLmZpbmFsaXplKCk7Y29uc3QgYz1bXTtyZXR1cm4gdGhpcy5lbGVtZW50UHJvcGVydGllcy5mb3JFYWNoKChhLGYpPT57Y29uc3QgZD10'@;
put 'aGlzLl8kRXAoZixhKTt2b2lkIDAhPT1kJiYodGhpcy5fJEV2LnNldChkLGYpLGMucHVzaChkKSl9KSxjfXN0YXRpYyBjcmVhdGVQcm9wZXJ0eShjLGE9blUpe2lmKGEuc3RhdGUmJihhLmF0dHJpYnV0ZT0hMSksdGhpcy5maW5hbGl6ZSgpLHRoaXMuZWxlbWVudFByb3BlcnRpZXMuc2V0KGMs'@;
put 'YSksIWEubm9BY2Nlc3NvciYmIXRoaXMucHJvdG90eXBlLmhhc093blByb3BlcnR5KGMpKXtjb25zdCBmPSJzeW1ib2wiPT10eXBlb2YgYz9TeW1ib2woKToiX18iK2MsZD10aGlzLmdldFByb3BlcnR5RGVzY3JpcHRvcihjLGYsYSk7dm9pZCAwIT09ZCYmT2JqZWN0LmRlZmluZVByb3BlcnR5'@;
put 'KHRoaXMucHJvdG90eXBlLGMsZCl9fXN0YXRpYyBnZXRQcm9wZXJ0eURlc2NyaXB0b3IoYyxhLGYpe3JldHVybntnZXQoKXtyZXR1cm4gdGhpc1thXX0sc2V0KGQpe2NvbnN0IGg9dGhpc1tjXTt0aGlzW2FdPWQsdGhpcy5yZXF1ZXN0VXBkYXRlKGMsaCxmKX0sY29uZmlndXJhYmxlOiEwLGVu'@;
put 'dW1lcmFibGU6ITB9fXN0YXRpYyBnZXRQcm9wZXJ0eU9wdGlvbnMoYyl7cmV0dXJuIHRoaXMuZWxlbWVudFByb3BlcnRpZXMuZ2V0KGMpfHxuVX1zdGF0aWMgZmluYWxpemUoKXtpZih0aGlzLmhhc093blByb3BlcnR5KHJVKSlyZXR1cm4hMTt0aGlzW3JVXT0hMDtjb25zdCBjPU9iamVjdC5n'@;
put 'ZXRQcm90b3R5cGVPZih0aGlzKTtpZihjLmZpbmFsaXplKCksdm9pZCAwIT09Yy5oJiYodGhpcy5oPVsuLi5jLmhdKSx0aGlzLmVsZW1lbnRQcm9wZXJ0aWVzPW5ldyBNYXAoYy5lbGVtZW50UHJvcGVydGllcyksdGhpcy5fJEV2PW5ldyBNYXAsdGhpcy5oYXNPd25Qcm9wZXJ0eSgicHJvcGVy'@;
put 'dGllcyIpKXtjb25zdCBhPXRoaXMucHJvcGVydGllcyxmPVsuLi5PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhhKSwuLi5PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGEpXTtmb3IoY29uc3QgZCBvZiBmKXRoaXMuY3JlYXRlUHJvcGVydHkoZCxhW2RdKX1yZXR1cm4gdGhpcy5lbGVt'@;
put 'ZW50U3R5bGVzPXRoaXMuZmluYWxpemVTdHlsZXModGhpcy5zdHlsZXMpLCEwfXN0YXRpYyBmaW5hbGl6ZVN0eWxlcyhjKXtjb25zdCBhPVtdO2lmKEFycmF5LmlzQXJyYXkoYykpe2NvbnN0IGY9bmV3IFNldChjLmZsYXQoMS8wKS5yZXZlcnNlKCkpO2Zvcihjb25zdCBkIG9mIGYpYS51bnNo'@;
put 'aWZ0KGRsZShkKSl9ZWxzZSB2b2lkIDAhPT1jJiZhLnB1c2goZGxlKGMpKTtyZXR1cm4gYX1zdGF0aWMgXyRFcChjLGEpe2NvbnN0IGY9YS5hdHRyaWJ1dGU7cmV0dXJuITE9PT1mP3ZvaWQgMDoic3RyaW5nIj09dHlwZW9mIGY/Zjoic3RyaW5nIj09dHlwZW9mIGM/Yy50b0xvd2VyQ2FzZSgp'@;
put 'OnZvaWQgMH11KCl7dmFyIGM7dGhpcy5fJEVfPW5ldyBQcm9taXNlKGE9PnRoaXMuZW5hYmxlVXBkYXRpbmc9YSksdGhpcy5fJEFMPW5ldyBNYXAsdGhpcy5fJEVnKCksdGhpcy5yZXF1ZXN0VXBkYXRlKCksbnVsbD09PShjPXRoaXMuY29uc3RydWN0b3IuaCl8fHZvaWQgMD09PWN8fGMuZm9y'@;
put 'RWFjaChhPT5hKHRoaXMpKX1hZGRDb250cm9sbGVyKGMpe3ZhciBhLGY7KG51bGwhPT0oYT10aGlzLl8kRVMpJiZ2b2lkIDAhPT1hP2E6dGhpcy5fJEVTPVtdKS5wdXNoKGMpLHZvaWQgMCE9PXRoaXMucmVuZGVyUm9vdCYmdGhpcy5pc0Nvbm5lY3RlZCYmKG51bGw9PT0oZj1jLmhvc3RDb25u'@;
put 'ZWN0ZWQpfHx2b2lkIDA9PT1mfHxmLmNhbGwoYykpfXJlbW92ZUNvbnRyb2xsZXIoYyl7dmFyIGE7bnVsbD09PShhPXRoaXMuXyRFUyl8fHZvaWQgMD09PWF8fGEuc3BsaWNlKHRoaXMuXyRFUy5pbmRleE9mKGMpPj4+MCwxKX1fJEVnKCl7dGhpcy5jb25zdHJ1Y3Rvci5lbGVtZW50UHJvcGVy'@;
put 'dGllcy5mb3JFYWNoKChjLGEpPT57dGhpcy5oYXNPd25Qcm9wZXJ0eShhKSYmKHRoaXMuXyRFaS5zZXQoYSx0aGlzW2FdKSxkZWxldGUgdGhpc1thXSl9KX1jcmVhdGVSZW5kZXJSb290KCl7dmFyIGM7Y29uc3QgYT1udWxsIT09KGM9dGhpcy5zaGFkb3dSb290KSYmdm9pZCAwIT09Yz9jOnRo'@;
put 'aXMuYXR0YWNoU2hhZG93KHRoaXMuY29uc3RydWN0b3Iuc2hhZG93Um9vdE9wdGlvbnMpO3JldHVybigobCxjKT0+e1h6P2wuYWRvcHRlZFN0eWxlU2hlZXRzPWMubWFwKGE9PmEgaW5zdGFuY2VvZiBDU1NTdHlsZVNoZWV0P2E6YS5zdHlsZVNoZWV0KTpjLmZvckVhY2goYT0+e2NvbnN0IGY9'@;
put 'ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKSxkPVlELmxpdE5vbmNlO3ZvaWQgMCE9PWQmJmYuc2V0QXR0cmlidXRlKCJub25jZSIsZCksZi50ZXh0Q29udGVudD1hLmNzc1RleHQsbC5hcHBlbmRDaGlsZChmKX0pfSkoYSx0aGlzLmNvbnN0cnVjdG9yLmVsZW1lbnRTdHlsZXMpLGF9'@;
put 'Y29ubmVjdGVkQ2FsbGJhY2soKXt2YXIgYzt2b2lkIDA9PT10aGlzLnJlbmRlclJvb3QmJih0aGlzLnJlbmRlclJvb3Q9dGhpcy5jcmVhdGVSZW5kZXJSb290KCkpLHRoaXMuZW5hYmxlVXBkYXRpbmcoITApLG51bGw9PT0oYz10aGlzLl8kRVMpfHx2b2lkIDA9PT1jfHxjLmZvckVhY2goYT0+'@;
put 'e3ZhciBmO3JldHVybiBudWxsPT09KGY9YS5ob3N0Q29ubmVjdGVkKXx8dm9pZCAwPT09Zj92b2lkIDA6Zi5jYWxsKGEpfSl9ZW5hYmxlVXBkYXRpbmcoYyl7fWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7dmFyIGM7bnVsbD09PShjPXRoaXMuXyRFUyl8fHZvaWQgMD09PWN8fGMuZm9yRWFjaChh'@;
put 'PT57dmFyIGY7cmV0dXJuIG51bGw9PT0oZj1hLmhvc3REaXNjb25uZWN0ZWQpfHx2b2lkIDA9PT1mP3ZvaWQgMDpmLmNhbGwoYSl9KX1hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soYyxhLGYpe3RoaXMuXyRBSyhjLGYpfV8kRU8oYyxhLGY9blUpe3ZhciBkO2NvbnN0IGg9dGhpcy5jb25zdHJ1'@;
put 'Y3Rvci5fJEVwKGMsZik7aWYodm9pZCAwIT09aCYmITA9PT1mLnJlZmxlY3Qpe2NvbnN0IG09KHZvaWQgMCE9PShudWxsPT09KGQ9Zi5jb252ZXJ0ZXIpfHx2b2lkIDA9PT1kP3ZvaWQgMDpkLnRvQXR0cmlidXRlKT9mLmNvbnZlcnRlcjp0VSkudG9BdHRyaWJ1dGUoYSxmLnR5cGUpO3RoaXMu'@;
put 'XyRFbD1jLG51bGw9PW0/dGhpcy5yZW1vdmVBdHRyaWJ1dGUoaCk6dGhpcy5zZXRBdHRyaWJ1dGUoaCxtKSx0aGlzLl8kRWw9bnVsbH19XyRBSyhjLGEpe3ZhciBmO2NvbnN0IGQ9dGhpcy5jb25zdHJ1Y3RvcixoPWQuXyRFdi5nZXQoYyk7aWYodm9pZCAwIT09aCYmdGhpcy5fJEVsIT09aCl7'@;
put 'Y29uc3QgbT1kLmdldFByb3BlcnR5T3B0aW9ucyhoKSxfPSJmdW5jdGlvbiI9PXR5cGVvZiBtLmNvbnZlcnRlcj97ZnJvbUF0dHJpYnV0ZTptLmNvbnZlcnRlcn06dm9pZCAwIT09KG51bGw9PT0oZj1tLmNvbnZlcnRlcil8fHZvaWQgMD09PWY/dm9pZCAwOmYuZnJvbUF0dHJpYnV0ZSk/bS5j'@;
put 'b252ZXJ0ZXI6dFU7dGhpcy5fJEVsPWgsdGhpc1toXT1fLmZyb21BdHRyaWJ1dGUoYSxtLnR5cGUpLHRoaXMuXyRFbD1udWxsfX1yZXF1ZXN0VXBkYXRlKGMsYSxmKXtsZXQgZD0hMDt2b2lkIDAhPT1jJiYoKChmPWZ8fHRoaXMuY29uc3RydWN0b3IuZ2V0UHJvcGVydHlPcHRpb25zKGMpKS5o'@;
put 'YXNDaGFuZ2VkfHxtbGUpKHRoaXNbY10sYSk/KHRoaXMuXyRBTC5oYXMoYyl8fHRoaXMuXyRBTC5zZXQoYyxhKSwhMD09PWYucmVmbGVjdCYmdGhpcy5fJEVsIT09YyYmKHZvaWQgMD09PXRoaXMuXyRFQyYmKHRoaXMuXyRFQz1uZXcgTWFwKSx0aGlzLl8kRUMuc2V0KGMsZikpKTpkPSExKSwh'@;
put 'dGhpcy5pc1VwZGF0ZVBlbmRpbmcmJmQmJih0aGlzLl8kRV89dGhpcy5fJEVqKCkpfV8kRWooKXt2YXIgYz10aGlzO3JldHVybiB5aShmdW5jdGlvbiooKXtjLmlzVXBkYXRlUGVuZGluZz0hMDt0cnl7eWllbGQgYy5fJEVffWNhdGNoKGYpe1Byb21pc2UucmVqZWN0KGYpfWNvbnN0IGE9Yy5z'@;
put 'Y2hlZHVsZVVwZGF0ZSgpO3JldHVybiBudWxsIT1hJiYoeWllbGQgYSksIWMuaXNVcGRhdGVQZW5kaW5nfSkoKX1zY2hlZHVsZVVwZGF0ZSgpe3JldHVybiB0aGlzLnBlcmZvcm1VcGRhdGUoKX1wZXJmb3JtVXBkYXRlKCl7dmFyIGM7aWYoIXRoaXMuaXNVcGRhdGVQZW5kaW5nKXJldHVybjt0'@;
put 'aGlzLl8kRWkmJih0aGlzLl8kRWkuZm9yRWFjaCgoZCxoKT0+dGhpc1toXT1kKSx0aGlzLl8kRWk9dm9pZCAwKTtsZXQgYT0hMTtjb25zdCBmPXRoaXMuXyRBTDt0cnl7YT10aGlzLnNob3VsZFVwZGF0ZShmKSxhPyh0aGlzLndpbGxVcGRhdGUoZiksbnVsbD09PShjPXRoaXMuXyRFUyl8fHZv'@;
put 'aWQgMD09PWN8fGMuZm9yRWFjaChkPT57dmFyIGg7cmV0dXJuIG51bGw9PT0oaD1kLmhvc3RVcGRhdGUpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmNhbGwoZCl9KSx0aGlzLnVwZGF0ZShmKSk6dGhpcy5fJEVrKCl9Y2F0Y2goZCl7dGhyb3cgYT0hMSx0aGlzLl8kRWsoKSxkfWEmJnRoaXMuXyRB'@;
put 'RShmKX13aWxsVXBkYXRlKGMpe31fJEFFKGMpe3ZhciBhO251bGw9PT0oYT10aGlzLl8kRVMpfHx2b2lkIDA9PT1hfHxhLmZvckVhY2goZj0+e3ZhciBkO3JldHVybiBudWxsPT09KGQ9Zi5ob3N0VXBkYXRlZCl8fHZvaWQgMD09PWQ/dm9pZCAwOmQuY2FsbChmKX0pLHRoaXMuaGFzVXBkYXRl'@;
put 'ZHx8KHRoaXMuaGFzVXBkYXRlZD0hMCx0aGlzLmZpcnN0VXBkYXRlZChjKSksdGhpcy51cGRhdGVkKGMpfV8kRWsoKXt0aGlzLl8kQUw9bmV3IE1hcCx0aGlzLmlzVXBkYXRlUGVuZGluZz0hMX1nZXQgdXBkYXRlQ29tcGxldGUoKXtyZXR1cm4gdGhpcy5nZXRVcGRhdGVDb21wbGV0ZSgpfWdl'@;
put 'dFVwZGF0ZUNvbXBsZXRlKCl7cmV0dXJuIHRoaXMuXyRFX31zaG91bGRVcGRhdGUoYyl7cmV0dXJuITB9dXBkYXRlKGMpe3ZvaWQgMCE9PXRoaXMuXyRFQyYmKHRoaXMuXyRFQy5mb3JFYWNoKChhLGYpPT50aGlzLl8kRU8oZix0aGlzW2ZdLGEpKSx0aGlzLl8kRUM9dm9pZCAwKSx0aGlzLl8k'@;
put 'RWsoKX11cGRhdGVkKGMpe31maXJzdFVwZGF0ZWQoYyl7fX12YXIgaVU7R3ZbclVdPSEwLEd2LmVsZW1lbnRQcm9wZXJ0aWVzPW5ldyBNYXAsR3YuZWxlbWVudFN0eWxlcz1bXSxHdi5zaGFkb3dSb290T3B0aW9ucz17bW9kZToib3BlbiJ9LHBsZT8uKHtSZWFjdGl2ZUVsZW1lbnQ6R3Z9KSwo'@;
put 'bnVsbCE9PShlVT1XRC5yZWFjdGl2ZUVsZW1lbnRWZXJzaW9ucykmJnZvaWQgMCE9PWVVP2VVOldELnJlYWN0aXZlRWxlbWVudFZlcnNpb25zPVtdKS5wdXNoKCIxLjYuMiIpO2NvbnN0IEdEPXdpbmRvdywkdj1HRC50cnVzdGVkVHlwZXMsZ2xlPSR2PyR2LmNyZWF0ZVBvbGljeSgibGl0LWh0'@;
put 'bWwiLHtjcmVhdGVIVE1MOmw9Pmx9KTp2b2lkIDAsJEQ9IiRsaXQkIixYMj1gbGl0JCR7KE1hdGgucmFuZG9tKCkrIiIpLnNsaWNlKDkpfSRgLG9VPSI/IitYMixET2U9YDwke29VfT5gLE5nPWRvY3VtZW50LCRDPSgpPT5OZy5jcmVhdGVDb21tZW50KCIiKSxLQz1sPT5udWxsPT09bHx8Im9i'@;
put 'amVjdCIhPXR5cGVvZiBsJiYiZnVuY3Rpb24iIT10eXBlb2YgbCx2bGU9QXJyYXkuaXNBcnJheSxhVT0iWyBcdFxuXGZccl0iLHFDPS88KD86KCEtLXxcL1teYS16QS1aXSl8KFwvP1thLXpBLVpdW14+XHNdKil8KFwvPyQpKS9nLGJsZT0vLS0+L2csX2xlPS8+L2csVmc9UmVnRXhwKGA+fCR7'@;
put 'YVV9KD86KFteXFxzIic+PS9dKykoJHthVX0qPSR7YVV9Kig/OlteIFx0XG5cZlxyIidcYDw+PV18KCJ8Jyl8KSl8JClgLCJnIiksd2xlPS8nL2csQ2xlPS8iL2csU2xlPS9eKD86c2NyaXB0fHN0eWxlfHRleHRhcmVhfHRpdGxlKSQvaSxNbGU9bD0+KGMsLi4uYSk9Pih7XyRsaXRUeXBlJDps'@;
put 'LHN0cmluZ3M6Yyx2YWx1ZXM6YX0pLGxVPU1sZSgxKSxJT2U9TWxlKDIpLEt2PVN5bWJvbC5mb3IoImxpdC1ub0NoYW5nZSIpLEZ1PVN5bWJvbC5mb3IoImxpdC1ub3RoaW5nIiksa2xlPW5ldyBXZWFrTWFwLEJnPU5nLmNyZWF0ZVRyZWVXYWxrZXIoTmcsMTI5LG51bGwsITEpO2Z1bmN0aW9u'@;
put 'IEVsZShsLGMpe2lmKCFBcnJheS5pc0FycmF5KGwpfHwhbC5oYXNPd25Qcm9wZXJ0eSgicmF3IikpdGhyb3cgRXJyb3IoImludmFsaWQgdGVtcGxhdGUgc3RyaW5ncyBhcnJheSIpO3JldHVybiB2b2lkIDAhPT1nbGU/Z2xlLmNyZWF0ZUhUTUwoYyk6Y31jbGFzcyBYQ3tjb25zdHJ1Y3Rvcih7'@;
put 'c3RyaW5nczpjLF8kbGl0VHlwZSQ6YX0sZil7bGV0IGQ7dGhpcy5wYXJ0cz1bXTtsZXQgaD0wLG09MDtjb25zdCBfPWMubGVuZ3RoLTEsTz10aGlzLnBhcnRzLFtYLGFlXT0oKGwsYyk9Pntjb25zdCBhPWwubGVuZ3RoLTEsZj1bXTtsZXQgZCxoPTI9PT1jPyI8c3ZnPiI6IiIsbT1xQztmb3Io'@;
put 'bGV0IF89MDtfPGE7XysrKXtjb25zdCBPPWxbX107bGV0IFgsYWUscGU9LTEsYmU9MDtmb3IoO2JlPE8ubGVuZ3RoJiYobS5sYXN0SW5kZXg9YmUsYWU9bS5leGVjKE8pLG51bGwhPT1hZSk7KWJlPW0ubGFzdEluZGV4LG09PT1xQz8iIS0tIj09PWFlWzFdP209YmxlOnZvaWQgMCE9PWFlWzFd'@;
put 'P209X2xlOnZvaWQgMCE9PWFlWzJdPyhTbGUudGVzdChhZVsyXSkmJihkPVJlZ0V4cCgiPC8iK2FlWzJdLCJnIikpLG09VmcpOnZvaWQgMCE9PWFlWzNdJiYobT1WZyk6bT09PVZnPyI+Ij09PWFlWzBdPyhtPWQ/P3FDLHBlPS0xKTp2b2lkIDA9PT1hZVsxXT9wZT0tMjoocGU9bS5sYXN0SW5k'@;
put 'ZXgtYWVbMl0ubGVuZ3RoLFg9YWVbMV0sbT12b2lkIDA9PT1hZVszXT9WZzonIic9PT1hZVszXT9DbGU6d2xlKTptPT09Q2xlfHxtPT09d2xlP209Vmc6bT09PWJsZXx8bT09PV9sZT9tPXFDOihtPVZnLGQ9dm9pZCAwKTtjb25zdCB4ZT1tPT09VmcmJmxbXysxXS5zdGFydHNXaXRoKCIvPiIp'@;
put 'PyIgIjoiIjtoKz1tPT09cUM/TytET2U6cGU+PTA/KGYucHVzaChYKSxPLnNsaWNlKDAscGUpKyREK08uc2xpY2UocGUpK1gyK3hlKTpPK1gyKygtMj09PXBlPyhmLnB1c2godm9pZCAwKSxfKTp4ZSl9cmV0dXJuW0VsZShsLGgrKGxbYV18fCI8Pz4iKSsoMj09PWM/Ijwvc3ZnPiI6IiIpKSxm'@;
put 'XX0pKGMsYSk7aWYodGhpcy5lbD1YQy5jcmVhdGVFbGVtZW50KFgsZiksQmcuY3VycmVudE5vZGU9dGhpcy5lbC5jb250ZW50LDI9PT1hKXtjb25zdCBwZT10aGlzLmVsLmNvbnRlbnQsYmU9cGUuZmlyc3RDaGlsZDtiZS5yZW1vdmUoKSxwZS5hcHBlbmQoLi4uYmUuY2hpbGROb2Rlcyl9Zm9y'@;
put 'KDtudWxsIT09KGQ9QmcubmV4dE5vZGUoKSkmJk8ubGVuZ3RoPF87KXtpZigxPT09ZC5ub2RlVHlwZSl7aWYoZC5oYXNBdHRyaWJ1dGVzKCkpe2NvbnN0IHBlPVtdO2Zvcihjb25zdCBiZSBvZiBkLmdldEF0dHJpYnV0ZU5hbWVzKCkpaWYoYmUuZW5kc1dpdGgoJEQpfHxiZS5zdGFydHNXaXRo'@;
put 'KFgyKSl7Y29uc3QgeGU9YWVbbSsrXTtpZihwZS5wdXNoKGJlKSx2b2lkIDAhPT14ZSl7Y29uc3QgVmU9ZC5nZXRBdHRyaWJ1dGUoeGUudG9Mb3dlckNhc2UoKSskRCkuc3BsaXQoWDIpLFplPS8oWy4/QF0pPyguKikvLmV4ZWMoeGUpO08ucHVzaCh7dHlwZToxLGluZGV4OmgsbmFtZTpaZVsy'@;
put 'XSxzdHJpbmdzOlZlLGN0b3I6Ii4iPT09WmVbMV0/VGxlOiI/Ij09PVplWzFdP09sZToiQCI9PT1aZVsxXT9EbGU6SkN9KX1lbHNlIE8ucHVzaCh7dHlwZTo2LGluZGV4Omh9KX1mb3IoY29uc3QgYmUgb2YgcGUpZC5yZW1vdmVBdHRyaWJ1dGUoYmUpfWlmKFNsZS50ZXN0KGQudGFnTmFtZSkp'@;
put 'e2NvbnN0IHBlPWQudGV4dENvbnRlbnQuc3BsaXQoWDIpLGJlPXBlLmxlbmd0aC0xO2lmKGJlPjApe2QudGV4dENvbnRlbnQ9JHY/JHYuZW1wdHlTY3JpcHQ6IiI7Zm9yKGxldCB4ZT0wO3hlPGJlO3hlKyspZC5hcHBlbmQocGVbeGVdLCRDKCkpLEJnLm5leHROb2RlKCksTy5wdXNoKHt0eXBl'@;
put 'OjIsaW5kZXg6KytofSk7ZC5hcHBlbmQocGVbYmVdLCRDKCkpfX19ZWxzZSBpZig4PT09ZC5ub2RlVHlwZSlpZihkLmRhdGE9PT1vVSlPLnB1c2goe3R5cGU6MixpbmRleDpofSk7ZWxzZXtsZXQgcGU9LTE7Zm9yKDstMSE9PShwZT1kLmRhdGEuaW5kZXhPZihYMixwZSsxKSk7KU8ucHVzaCh7'@;
put 'dHlwZTo3LGluZGV4Omh9KSxwZSs9WDIubGVuZ3RoLTF9aCsrfX1zdGF0aWMgY3JlYXRlRWxlbWVudChjLGEpe2NvbnN0IGY9TmcuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtyZXR1cm4gZi5pbm5lckhUTUw9YyxmfX1mdW5jdGlvbiBqZyhsLGMsYT1sLGYpe3ZhciBkLGgsbSxfO2lmKGM9'@;
put 'PT1LdilyZXR1cm4gYztsZXQgTz12b2lkIDAhPT1mP251bGw9PT0oZD1hLl8kQ28pfHx2b2lkIDA9PT1kP3ZvaWQgMDpkW2ZdOmEuXyRDbDtjb25zdCBYPUtDKGMpP3ZvaWQgMDpjLl8kbGl0RGlyZWN0aXZlJDtyZXR1cm4gTz8uY29uc3RydWN0b3IhPT1YJiYobnVsbD09PShoPU8/Ll8kQU8p'@;
put 'fHx2b2lkIDA9PT1ofHxoLmNhbGwoTywhMSksdm9pZCAwPT09WD9PPXZvaWQgMDooTz1uZXcgWChsKSxPLl8kQVQobCxhLGYpKSx2b2lkIDAhPT1mPyhudWxsIT09KG09KF89YSkuXyRDbykmJnZvaWQgMCE9PW0/bTpfLl8kQ289W10pW2ZdPU86YS5fJENsPU8pLHZvaWQgMCE9PU8mJihjPWpn'@;
put 'KGwsTy5fJEFTKGwsYy52YWx1ZXMpLE8sZikpLGN9Y2xhc3MgQWxle2NvbnN0cnVjdG9yKGMsYSl7dGhpcy5fJEFWPVtdLHRoaXMuXyRBTj12b2lkIDAsdGhpcy5fJEFEPWMsdGhpcy5fJEFNPWF9Z2V0IHBhcmVudE5vZGUoKXtyZXR1cm4gdGhpcy5fJEFNLnBhcmVudE5vZGV9Z2V0IF8kQVUo'@;
put 'KXtyZXR1cm4gdGhpcy5fJEFNLl8kQVV9dShjKXt2YXIgYTtjb25zdHtlbDp7Y29udGVudDpmfSxwYXJ0czpkfT10aGlzLl8kQUQsaD0obnVsbCE9PShhPWM/LmNyZWF0aW9uU2NvcGUpJiZ2b2lkIDAhPT1hP2E6TmcpLmltcG9ydE5vZGUoZiwhMCk7QmcuY3VycmVudE5vZGU9aDtsZXQgbT1C'@;
put 'Zy5uZXh0Tm9kZSgpLF89MCxPPTAsWD1kWzBdO2Zvcig7dm9pZCAwIT09WDspe2lmKF89PT1YLmluZGV4KXtsZXQgYWU7Mj09PVgudHlwZT9hZT1uZXcgcXYobSxtLm5leHRTaWJsaW5nLHRoaXMsYyk6MT09PVgudHlwZT9hZT1uZXcgWC5jdG9yKG0sWC5uYW1lLFguc3RyaW5ncyx0aGlzLGMp'@;
put 'OjY9PT1YLnR5cGUmJihhZT1uZXcgSWxlKG0sdGhpcyxjKSksdGhpcy5fJEFWLnB1c2goYWUpLFg9ZFsrK09dfV8hPT1YPy5pbmRleCYmKG09QmcubmV4dE5vZGUoKSxfKyspfXJldHVybiBCZy5jdXJyZW50Tm9kZT1OZyxofXYoYyl7bGV0IGE9MDtmb3IoY29uc3QgZiBvZiB0aGlzLl8kQVYp'@;
put 'dm9pZCAwIT09ZiYmKHZvaWQgMCE9PWYuc3RyaW5ncz8oZi5fJEFJKGMsZixhKSxhKz1mLnN0cmluZ3MubGVuZ3RoLTIpOmYuXyRBSShjW2FdKSksYSsrfX1jbGFzcyBxdntjb25zdHJ1Y3RvcihjLGEsZixkKXt2YXIgaDt0aGlzLnR5cGU9Mix0aGlzLl8kQUg9RnUsdGhpcy5fJEFOPXZvaWQg'@;
put 'MCx0aGlzLl8kQUE9Yyx0aGlzLl8kQUI9YSx0aGlzLl8kQU09Zix0aGlzLm9wdGlvbnM9ZCx0aGlzLl8kQ3A9bnVsbD09PShoPWQ/LmlzQ29ubmVjdGVkKXx8dm9pZCAwPT09aHx8aH1nZXQgXyRBVSgpe3ZhciBjLGE7cmV0dXJuIG51bGwhPT0oYT1udWxsPT09KGM9dGhpcy5fJEFNKXx8dm9p'@;
put 'ZCAwPT09Yz92b2lkIDA6Yy5fJEFVKSYmdm9pZCAwIT09YT9hOnRoaXMuXyRDcH1nZXQgcGFyZW50Tm9kZSgpe2xldCBjPXRoaXMuXyRBQS5wYXJlbnROb2RlO2NvbnN0IGE9dGhpcy5fJEFNO3JldHVybiB2b2lkIDAhPT1hJiYxMT09PWM/Lm5vZGVUeXBlJiYoYz1hLnBhcmVudE5vZGUpLGN9'@;
put 'Z2V0IHN0YXJ0Tm9kZSgpe3JldHVybiB0aGlzLl8kQUF9Z2V0IGVuZE5vZGUoKXtyZXR1cm4gdGhpcy5fJEFCfV8kQUkoYyxhPXRoaXMpe2M9amcodGhpcyxjLGEpLEtDKGMpP2M9PT1GdXx8bnVsbD09Y3x8IiI9PT1jPyh0aGlzLl8kQUghPT1GdSYmdGhpcy5fJEFSKCksdGhpcy5fJEFIPUZ1'@;
put 'KTpjIT09dGhpcy5fJEFIJiZjIT09S3YmJnRoaXMuXyhjKTp2b2lkIDAhPT1jLl8kbGl0VHlwZSQ/dGhpcy5nKGMpOnZvaWQgMCE9PWMubm9kZVR5cGU/dGhpcy4kKGMpOihsPT52bGUobCl8fCJmdW5jdGlvbiI9PXR5cGVvZiBsPy5bU3ltYm9sLml0ZXJhdG9yXSkoYyk/dGhpcy5UKGMpOnRo'@;
put 'aXMuXyhjKX1rKGMpe3JldHVybiB0aGlzLl8kQUEucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYyx0aGlzLl8kQUIpfSQoYyl7dGhpcy5fJEFIIT09YyYmKHRoaXMuXyRBUigpLHRoaXMuXyRBSD10aGlzLmsoYykpfV8oYyl7dGhpcy5fJEFIIT09RnUmJktDKHRoaXMuXyRBSCk/dGhpcy5fJEFB'@;
put 'Lm5leHRTaWJsaW5nLmRhdGE9Yzp0aGlzLiQoTmcuY3JlYXRlVGV4dE5vZGUoYykpLHRoaXMuXyRBSD1jfWcoYyl7dmFyIGE7Y29uc3R7dmFsdWVzOmYsXyRsaXRUeXBlJDpkfT1jLGg9Im51bWJlciI9PXR5cGVvZiBkP3RoaXMuXyRBQyhjKToodm9pZCAwPT09ZC5lbCYmKGQuZWw9WEMuY3Jl'@;
put 'YXRlRWxlbWVudChFbGUoZC5oLGQuaFswXSksdGhpcy5vcHRpb25zKSksZCk7aWYoKG51bGw9PT0oYT10aGlzLl8kQUgpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLl8kQUQpPT09aCl0aGlzLl8kQUgudihmKTtlbHNle2NvbnN0IG09bmV3IEFsZShoLHRoaXMpLF89bS51KHRoaXMub3B0aW9ucyk7'@;
put 'bS52KGYpLHRoaXMuJChfKSx0aGlzLl8kQUg9bX19XyRBQyhjKXtsZXQgYT1rbGUuZ2V0KGMuc3RyaW5ncyk7cmV0dXJuIHZvaWQgMD09PWEmJmtsZS5zZXQoYy5zdHJpbmdzLGE9bmV3IFhDKGMpKSxhfVQoYyl7dmxlKHRoaXMuXyRBSCl8fCh0aGlzLl8kQUg9W10sdGhpcy5fJEFSKCkpO2Nv'@;
put 'bnN0IGE9dGhpcy5fJEFIO2xldCBmLGQ9MDtmb3IoY29uc3QgaCBvZiBjKWQ9PT1hLmxlbmd0aD9hLnB1c2goZj1uZXcgcXYodGhpcy5rKCRDKCkpLHRoaXMuaygkQygpKSx0aGlzLHRoaXMub3B0aW9ucykpOmY9YVtkXSxmLl8kQUkoaCksZCsrO2Q8YS5sZW5ndGgmJih0aGlzLl8kQVIoZiYm'@;
put 'Zi5fJEFCLm5leHRTaWJsaW5nLGQpLGEubGVuZ3RoPWQpfV8kQVIoYz10aGlzLl8kQUEubmV4dFNpYmxpbmcsYSl7dmFyIGY7Zm9yKG51bGw9PT0oZj10aGlzLl8kQVApfHx2b2lkIDA9PT1mfHxmLmNhbGwodGhpcywhMSwhMCxhKTtjJiZjIT09dGhpcy5fJEFCOyl7Y29uc3QgZD1jLm5leHRT'@;
put 'aWJsaW5nO2MucmVtb3ZlKCksYz1kfX1zZXRDb25uZWN0ZWQoYyl7dmFyIGE7dm9pZCAwPT09dGhpcy5fJEFNJiYodGhpcy5fJENwPWMsbnVsbD09PShhPXRoaXMuXyRBUCl8fHZvaWQgMD09PWF8fGEuY2FsbCh0aGlzLGMpKX19Y2xhc3MgSkN7Y29uc3RydWN0b3IoYyxhLGYsZCxoKXt0aGlz'@;
put 'LnR5cGU9MSx0aGlzLl8kQUg9RnUsdGhpcy5fJEFOPXZvaWQgMCx0aGlzLmVsZW1lbnQ9Yyx0aGlzLm5hbWU9YSx0aGlzLl8kQU09ZCx0aGlzLm9wdGlvbnM9aCxmLmxlbmd0aD4yfHwiIiE9PWZbMF18fCIiIT09ZlsxXT8odGhpcy5fJEFIPUFycmF5KGYubGVuZ3RoLTEpLmZpbGwobmV3IFN0'@;
put 'cmluZyksdGhpcy5zdHJpbmdzPWYpOnRoaXMuXyRBSD1GdX1nZXQgdGFnTmFtZSgpe3JldHVybiB0aGlzLmVsZW1lbnQudGFnTmFtZX1nZXQgXyRBVSgpe3JldHVybiB0aGlzLl8kQU0uXyRBVX1fJEFJKGMsYT10aGlzLGYsZCl7Y29uc3QgaD10aGlzLnN0cmluZ3M7bGV0IG09ITE7aWYodm9p'@;
put 'ZCAwPT09aCljPWpnKHRoaXMsYyxhLDApLG09IUtDKGMpfHxjIT09dGhpcy5fJEFIJiZjIT09S3YsbSYmKHRoaXMuXyRBSD1jKTtlbHNle2NvbnN0IF89YztsZXQgTyxYO2ZvcihjPWhbMF0sTz0wO088aC5sZW5ndGgtMTtPKyspWD1qZyh0aGlzLF9bZitPXSxhLE8pLFg9PT1LdiYmKFg9dGhp'@;
put 'cy5fJEFIW09dKSxtfHwobT0hS0MoWCl8fFghPT10aGlzLl8kQUhbT10pLFg9PT1GdT9jPUZ1OmMhPT1GdSYmKGMrPShYPz8iIikraFtPKzFdKSx0aGlzLl8kQUhbT109WH1tJiYhZCYmdGhpcy5qKGMpfWooYyl7Yz09PUZ1P3RoaXMuZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUodGhpcy5uYW1l'@;
put 'KTp0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKHRoaXMubmFtZSxjPz8iIil9fWNsYXNzIFRsZSBleHRlbmRzIEpDe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnR5cGU9M31qKGMpe3RoaXMuZWxlbWVudFt0aGlzLm5hbWVdPWM9PT1GdT92b2lkIDA6Y319Y29uc3Qg'@;
put 'Uk9lPSR2PyR2LmVtcHR5U2NyaXB0OiIiO2NsYXNzIE9sZSBleHRlbmRzIEpDe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnR5cGU9NH1qKGMpe2MmJmMhPT1GdT90aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKHRoaXMubmFtZSxST2UpOnRoaXMuZWxlbWVudC5yZW1v'@;
put 'dmVBdHRyaWJ1dGUodGhpcy5uYW1lKX19Y2xhc3MgRGxlIGV4dGVuZHMgSkN7Y29uc3RydWN0b3IoYyxhLGYsZCxoKXtzdXBlcihjLGEsZixkLGgpLHRoaXMudHlwZT01fV8kQUkoYyxhPXRoaXMpe3ZhciBmO2lmKChjPW51bGwhPT0oZj1qZyh0aGlzLGMsYSwwKSkmJnZvaWQgMCE9PWY/ZjpG'@;
put 'dSk9PT1LdilyZXR1cm47Y29uc3QgZD10aGlzLl8kQUgsaD1jPT09RnUmJmQhPT1GdXx8Yy5jYXB0dXJlIT09ZC5jYXB0dXJlfHxjLm9uY2UhPT1kLm9uY2V8fGMucGFzc2l2ZSE9PWQucGFzc2l2ZSxtPWMhPT1GdSYmKGQ9PT1GdXx8aCk7aCYmdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50TGlz'@;
put 'dGVuZXIodGhpcy5uYW1lLHRoaXMsZCksbSYmdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodGhpcy5uYW1lLHRoaXMsYyksdGhpcy5fJEFIPWN9aGFuZGxlRXZlbnQoYyl7dmFyIGEsZjsiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5fJEFIP3RoaXMuXyRBSC5jYWxsKG51bGwhPT0oZj1u'@;
put 'dWxsPT09KGE9dGhpcy5vcHRpb25zKXx8dm9pZCAwPT09YT92b2lkIDA6YS5ob3N0KSYmdm9pZCAwIT09Zj9mOnRoaXMuZWxlbWVudCxjKTp0aGlzLl8kQUguaGFuZGxlRXZlbnQoYyl9fWNsYXNzIElsZXtjb25zdHJ1Y3RvcihjLGEsZil7dGhpcy5lbGVtZW50PWMsdGhpcy50eXBlPTYsdGhp'@;
put 'cy5fJEFOPXZvaWQgMCx0aGlzLl8kQU09YSx0aGlzLm9wdGlvbnM9Zn1nZXQgXyRBVSgpe3JldHVybiB0aGlzLl8kQU0uXyRBVX1fJEFJKGMpe2pnKHRoaXMsYyl9fWNvbnN0IFJsZT1HRC5saXRIdG1sUG9seWZpbGxTdXBwb3J0O1JsZT8uKFhDLHF2KSwobnVsbCE9PShpVT1HRC5saXRIdG1s'@;
put 'VmVyc2lvbnMpJiZ2b2lkIDAhPT1pVT9pVTpHRC5saXRIdG1sVmVyc2lvbnM9W10pLnB1c2goIjIuNy41Iik7Y29uc3QgTGxlPShsLGMsYSk9Pnt2YXIgZixkO2NvbnN0IGg9bnVsbCE9PShmPWE/LnJlbmRlckJlZm9yZSkmJnZvaWQgMCE9PWY/ZjpjO2xldCBtPWguXyRsaXRQYXJ0JDtpZih2'@;
put 'b2lkIDA9PT1tKXtjb25zdCBfPW51bGwhPT0oZD1hPy5yZW5kZXJCZWZvcmUpJiZ2b2lkIDAhPT1kP2Q6bnVsbDtoLl8kbGl0UGFydCQ9bT1uZXcgcXYoYy5pbnNlcnRCZWZvcmUoJEMoKSxfKSxfLHZvaWQgMCxhPz97fSl9cmV0dXJuIG0uXyRBSShsKSxtfTt2YXIgc1UsdVU7Y2xhc3MgWHYg'@;
put 'ZXh0ZW5kcyBHdntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5yZW5kZXJPcHRpb25zPXtob3N0OnRoaXN9LHRoaXMuXyREbz12b2lkIDB9Y3JlYXRlUmVuZGVyUm9vdCgpe3ZhciBjLGE7Y29uc3QgZj1zdXBlci5jcmVhdGVSZW5kZXJSb290KCk7cmV0dXJuIG51bGwh'@;
put 'PT0oYz0oYT10aGlzLnJlbmRlck9wdGlvbnMpLnJlbmRlckJlZm9yZSkmJnZvaWQgMCE9PWN8fChhLnJlbmRlckJlZm9yZT1mLmZpcnN0Q2hpbGQpLGZ9dXBkYXRlKGMpe2NvbnN0IGE9dGhpcy5yZW5kZXIoKTt0aGlzLmhhc1VwZGF0ZWR8fCh0aGlzLnJlbmRlck9wdGlvbnMuaXNDb25uZWN0'@;
put 'ZWQ9dGhpcy5pc0Nvbm5lY3RlZCksc3VwZXIudXBkYXRlKGMpLHRoaXMuXyREbz1MbGUoYSx0aGlzLnJlbmRlclJvb3QsdGhpcy5yZW5kZXJPcHRpb25zKX1jb25uZWN0ZWRDYWxsYmFjaygpe3ZhciBjO3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksbnVsbD09PShjPXRoaXMuXyREbyl8fHZv'@;
put 'aWQgMD09PWN8fGMuc2V0Q29ubmVjdGVkKCEwKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3ZhciBjO3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksbnVsbD09PShjPXRoaXMuXyREbyl8fHZvaWQgMD09PWN8fGMuc2V0Q29ubmVjdGVkKCExKX1yZW5kZXIoKXtyZXR1cm4gS3Z9fVh2LmZp'@;
put 'bmFsaXplZD0hMCxYdi5fJGxpdEVsZW1lbnQkPSEwLG51bGw9PT0oc1U9Z2xvYmFsVGhpcy5saXRFbGVtZW50SHlkcmF0ZVN1cHBvcnQpfHx2b2lkIDA9PT1zVXx8c1UuY2FsbChnbG9iYWxUaGlzLHtMaXRFbGVtZW50Olh2fSk7Y29uc3QgUGxlPWdsb2JhbFRoaXMubGl0RWxlbWVudFBvbHlm'@;
put 'aWxsU3VwcG9ydDtQbGU/Lih7TGl0RWxlbWVudDpYdn0pLChudWxsIT09KHVVPWdsb2JhbFRoaXMubGl0RWxlbWVudFZlcnNpb25zKSYmdm9pZCAwIT09dVU/dVU6Z2xvYmFsVGhpcy5saXRFbGVtZW50VmVyc2lvbnM9W10pLnB1c2goIjMuMy4yIik7Y29uc3QgRmxlPVF6YEBjaGFyc2V0ICJV'@;
put 'VEYtOCI7Omhvc3QsOnJvb3R7LS3OtDI6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UteHhzLCBjYWxjKDQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpKTstLc60Mzp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14cywgY2FsYyg4ICogMXJlbSAvIHZhcigt'@;
put 'LWNkcy1nbG9iYWwtYmFzZSwgMjApKSk7LS3OtDQ6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2Utc20sIGNhbGMoMTIgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpKTstLc60NTp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS1tZCwgY2FsYygxNiAqIDFyZW0g'@;
put 'LyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkpOy0tzrQ2OnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLWxnLCBjYWxjKDI0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSk7LS3OtDc6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UteGwsIGNhbGMoMzIg'@;
put 'KiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpKX1bY2RzLWxheW91dH49IndyYXA6bm9uZSJde2ZsZXgtd3JhcDpub3dyYXAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJde2ZsZXgtZ3JvdzoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImFsaWduOnNo'@;
put 'cmluayJde2ZsZXgtc2hyaW5rOjEhaW1wb3J0YW50O2ZsZXgtZ3JvdzowIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LXdyYXA6d3JhcDtqdXN0aWZ5LWl0ZW1zOmZsZXgtc3RhcnQ7YWxpZ24taXRlbXM6Zmxl'@;
put 'eC1zdGFydDt3aWR0aDoxMDAlO21hcmdpbjowO21pbi1oZWlnaHQ6MH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dH49dmVydGljYWxdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5b'@;
put 'Y2RzLXRleHRde3dpZHRoOmluaXRpYWwhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl17YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXtqdXN0aWZ5'@;
put 'LWNvbnRlbnQ6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il17anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl17YWxpZ24t'@;
put 'aXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246'@;
put 'Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJvcmRlcjpyZXZlcnNlIl17ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2V9W2Nkcy1sYXlvdXR+'@;
put 'PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLXN0cmV0Y2giXXtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtc3RyZXRjaCJdPip7ZmxleC1ncm93'@;
put 'OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl0+'@;
put 'KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49aG9y'@;
put 'aXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJde21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxh'@;
put 'eW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjp0b3AiXXthbGlnbi1zZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246cmlnaHQiXXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpv'@;
put 'bnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF17d2lkdGg6MTAwJTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+'@;
put 'PXZlcnRpY2FsXSxbY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjp0b3AiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxh'@;
put 'eW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJde2FsaWduLWl0ZW1zOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRp'@;
put 'Y2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlv'@;
put 'dXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0ib3JkZXI6cmV2ZXJzZSJde2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2h9W2Nkcy1sYXlv'@;
put 'dXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+'@;
put 'PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1s'@;
put 'YXlvdXQqPSJhbGlnbjpjZW50ZXIiXSxbY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl17bWFyZ2luLWJvdHRv'@;
put 'bTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246cmlnaHQiXXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG99W2Nkcy1sYXlvdXR+'@;
put 'PWdyaWRde2Rpc3BsYXk6Z3JpZDthbGlnbi1pdGVtczpzdGFydDthbGlnbi1jb250ZW50OnN0YXJ0O2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQodmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtZ3JpZC1jb2xzLDEyKSwxZnIpO3dpZHRoOjEwMCV9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1s'@;
put 'YXlvdXQqPXJvd3Nde2dyaWQtdGVtcGxhdGUtcm93czpyZXBlYXQoMTIsYXV0byl9W2Nkcy1sYXlvdXR+PWdyaWRdPltjZHMtbGF5b3V0Kj1yb3dde2FsaWduLXNlbGY6c3RyZXRjaH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOnRvcCJde2FsaWduLWNvbnRlbnQ6c3Rh'@;
put 'cnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJde2p1c3RpZnktY29udGVudDplbmR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17anVzdGlmeS1jb250ZW50OnN0YXJ0fVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0'@;
put 'Kj0iYWxpZ246aG9yaXpvbnRhbC1zdHJldGNoIl17anVzdGlmeS1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNo'@;
put 'O2p1c3RpZnktaXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49Z3JpZF1bY2Rz'@;
put 'LWxheW91dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVyIl17anVzdGlmeS1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRl'@;
put 'cjtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfTo6c2xvdHRlZChbY2RzLWxheW91dH49ImRpc3BsYXk6c2NyZWVuLXJlYWRlci1vbmx5Il0pLFtjZHMtbGF5b3V0fj0iZGlzcGxheTpzY3JlZW4tcmVhZGVyLW9ubHkiXXtwb3NpdGlvbjphYnNvbHV0ZSFpbXBv'@;
put 'cnRhbnQ7Y2xpcDpyZWN0KDFweCwxcHgsMXB4LDFweCk7Y2xpcC1wYXRoOmluc2V0KDUwJSk7cGFkZGluZzowO2JvcmRlcjowO2hlaWdodDoxcHg7d2lkdGg6MXB4O292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXA7dG9wOjA7bGVmdDowO2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50'@;
put 'fVtjZHMtbGF5b3V0Kj0iZ2FwOm5vbmUiXXtnYXA6MH1bY2RzLWxheW91dCo9ImdhcDp4eHMiXXtnYXA6dmFyKC0tzrQyKX1bY2RzLWxheW91dCo9ImdhcDp4cyJde2dhcDp2YXIoLS3OtDMpfVtjZHMtbGF5b3V0Kj0iZ2FwOnNtIl17Z2FwOnZhcigtLc60NCl9W2Nkcy1sYXlvdXQqPSJnYXA6'@;
put 'bWQiXXtnYXA6dmFyKC0tzrQ1KX1bY2RzLWxheW91dCo9ImdhcDpsZyJde2dhcDp2YXIoLS3OtDYpfVtjZHMtbGF5b3V0fj0icDpub25lIl17cGFkZGluZzowIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6eHhzIl17cGFkZGluZzp2YXIoLS3OtDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49'@;
put 'InA6eHMiXXtwYWRkaW5nOnZhcigtLc60MykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icDpzbSJde3BhZGRpbmc6dmFyKC0tzrQ0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOm1kIl17cGFkZGluZzp2YXIoLS3OtDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im06bWQiXXttYXJnaW46'@;
put 'dmFyKC0tzrQ1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOmxnIl17cGFkZGluZzp2YXIoLS3OtDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteTp4cyJde3BhZGRpbmctdG9wOnZhcigtLc60MykhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLc60MykhaW1wb3J0YW50fVtj'@;
put 'ZHMtbGF5b3V0fj0icC14OmxnIl17cGFkZGluZy1sZWZ0OnZhcigtLc60NikhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tzrQ2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXk6bGciXXtwYWRkaW5nLXRvcDp2YXIoLS3OtDYpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIo'@;
put 'LS3OtDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbDptZCJde3BhZGRpbmctbGVmdDp2YXIoLS3OtDUpIWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7W2Nkcy1sYXlvdXQqPSJnYXBAbWQ6bGciXXtnYXA6dmFyKC0tzrQ2KX1bY2RzLWxheW91dH49InBAbWQ6bGciXXtw'@;
put 'YWRkaW5nOnZhcigtLc60NikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBtZDp4bCJde21hcmdpbjp2YXIoLS3OtDcpIWltcG9ydGFudH19W2Nkcy1sYXlvdXR+PWZpbGxde3dpZHRoOjEwMCUhaW1wb3J0YW50fSosOmFmdGVyLDpiZWZvcmV7Ym94LXNpemluZzpib3JkZXItYm94fVtjZHMt'@;
put 'bGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1zdHJldGNoIl0+OjpzbG90dGVkKCopLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJdPjo6c2xvdHRlZCgqKSxbY2RzLWxheW91dH49dmVydGljYWxdW2Nk'@;
put 'cy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl0+OjpzbG90dGVkKCope2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxp'@;
put 'Z246dmVydGljYWwtY2VudGVyIl0pe21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQq'@;
put 'PSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOnRvcCJdKXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90'@;
put 'dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246Ym90dG9tIl0pe21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpz'@;
put 'bG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246bGVmdCJdKSxbY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246bGVmdCJde21hcmdpbi1yaWdodDphdXRvfUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXtbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2Rz'@;
put 'LWxheW91dCo9ImFsaWduQHhzOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOnZlcnRpY2FsLWNlbnRlciJdKXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpz'@;
put 'bG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6aG9yaXpvbnRhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0'@;
put 'ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp0b3AiXSl7bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmJvdHRvbSJdKXttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0'@;
put 'fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG99fUBtZWRpYSAobWlu'@;
put 'LXdpZHRoOjc2OHB4KXtbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOnZlcnRpY2FsLWNlbnRlciJdKXttYXJnaW4tdG9w'@;
put 'OmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206aG9yaXpvbnRhbC1jZW50ZXIi'@;
put 'XSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTp0b3AiXSl7bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWdu'@;
put 'QHNtOmJvdHRvbSJdKXttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91'@;
put 'dCo9ImFsaWduQHNtOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG99fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXtbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChb'@;
put 'Y2RzLWxheW91dCo9ImFsaWduQG1kOnZlcnRpY2FsLWNlbnRlciJdKXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0g'@;
put 'OjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6aG9yaXpvbnRhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp0b3AiXSl7bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1b'@;
put 'Y2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOmJvdHRvbSJdKXttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6cmlnaHQiXSl7bWFyZ2luLWxl'@;
put 'ZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG99fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJh'@;
put 'bGlnbkBsZzpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzp2ZXJ0aWNhbC1jZW50ZXIiXSl7bWFyZ2luLXRvcDphdXRvO21hcmdpbi1ib3R0b206YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2Rz'@;
put 'LWxheW91dCo9ImFsaWduQGxnOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmhvcml6b250YWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5'@;
put 'b3V0Kj0iYWxpZ25AbGc6dG9wIl0pe21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpib3R0b20iXSl7bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxd'@;
put 'IDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvfX1AbWVkaWEgKG1pbi13aWR0aDoxNDQw'@;
put 'cHgpe1tjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dmVydGljYWwtY2VudGVyIl0pe21hcmdpbi10b3A6YXV0bzttYXJn'@;
put 'aW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpob3Jpem9udGFsLWNlbnRlciJdKXthbGlnbi1z'@;
put 'ZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOnRvcCJdKXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Ym90dG9t'@;
put 'Il0pe21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25A'@;
put 'eGw6bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0b319W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVy'@;
put 'Il0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVyIl0pe21h'@;
put 'cmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl0pe2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpz'@;
put 'bG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246Ym90dG9tIl0pe2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jp'@;
put 'em9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmNlbnRlciJd'@;
put 'KSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dmVydGljYWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpjZW50ZXIiXSks'@;
put 'W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmhvcml6b250YWwtY2VudGVyIl0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90'@;
put 'dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dG9wIl0pe2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Ym90dG9tIl0pe2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250'@;
put 'YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFu'@;
put 'dH19QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpe1tjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOnZlcnRpY2FsLWNl'@;
put 'bnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpob3Jpem9udGFsLWNl'@;
put 'bnRlciJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOnRvcCJdKXthbGlnbi1zZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhv'@;
put 'cml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmJvdHRvbSJdKXthbGlnbi1zZWxmOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFu'@;
put 'dH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXtbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5'@;
put 'b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp2ZXJ0aWNhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91'@;
put 'dCo9ImFsaWduQG1kOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6aG9yaXpvbnRhbC1jZW50ZXIiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5'@;
put 'b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp0b3AiXSl7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpib3R0b20iXSl7YWxpZ24tc2VsZjpmbGV4LWVu'@;
put 'ZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOmxlZnQiXSl7bWFy'@;
put 'Z2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpe1tjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91'@;
put 'dCo9ImFsaWduQGxnOnZlcnRpY2FsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQq'@;
put 'PSJhbGlnbkBsZzpob3Jpem9udGFsLWNlbnRlciJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOnRvcCJdKXthbGlnbi1zZWxmOmZs'@;
put 'ZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmJvdHRvbSJdKXthbGlnbi1zZWxmOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpyaWdodCJdKXtt'@;
put 'YXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjE0NDBweCl7W2Nkcy1sYXlvdXR+PWhvcml6'@;
put 'b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dmVydGljYWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9u'@;
put 'dGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmhvcml6b250YWwtY2VudGVyIl0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdo'@;
put 'dDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dG9wIl0pe2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Ym90'@;
put 'dG9tIl0pe2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlv'@;
put 'dXQqPSJhbGlnbkB4bDpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH19W2Nkcy10ZXh0XXtmb250LWZhbWlseTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmKTttYXJnaW4t'@;
put 'dG9wOjA7bWFyZ2luLWJvdHRvbTowfVtjZHMtdGV4dF1bY2RzLWxheW91dH49Z3JpZF06OmFmdGVyLFtjZHMtdGV4dF1bY2RzLWxheW91dH49Z3JpZF06OmJlZm9yZSxbY2RzLXRleHRdW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdOjphZnRlcixbY2RzLXRleHRdW2Nkcy1sYXlvdXR+PWhvcml6'@;
put 'b250YWxdOjpiZWZvcmUsW2Nkcy10ZXh0XVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF06OmFmdGVyLFtjZHMtdGV4dF1bY2RzLWxheW91dH49dmVydGljYWxdOjpiZWZvcmV7ZGlzcGxheTpub25lfVtjZHMtdGV4dCo9ZGlzcGxheV0sW2Nkcy10ZXh0Kj1zZWN0aW9uXSxbY2RzLXRleHQqPXN1YnNl'@;
put 'Y3Rpb25dLFtjZHMtdGV4dCo9dGl0bGVde2ZvbnQtZmFtaWx5OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkZXItZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmKTtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29s'@;
put 'b3ItNDAwLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTkwMCwjMjEzMzNiKSl9W2Nkcy10ZXh0Kj1ib2R5XSxbY2RzLXRleHQqPW1lc3NhZ2VdLFtjZHMtdGV4dCo9c2Vjb25kYXJ5XXtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNTAwLHZhcigt'@;
put 'LWNkcy1nbG9iYWwtY29sb3ItYmxhY2ssIzAwMCkpfVtjZHMtdGV4dCo9aW5saW5lXXt3aWR0aDphdXRvIWltcG9ydGFudDtkaXNwbGF5OmlubGluZS1ibG9jayFpbXBvcnRhbnR9W2Nkcy10ZXh0Kj1kaXNwbGF5XXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3Bs'@;
put 'YXktZm9udC1zaXplLGNhbGMoNDAgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWZvbnQtd2VpZ2h0LDQwMCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRp'@;
put 'c3BsYXktbGluZS1oZWlnaHQsMS4xZW0pO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWxldHRlci1zcGFjaW5nLC0uMDEyNWVtKX1bY2RzLXRleHQqPWRpc3BsYXldOjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dp'@;
put 'ZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktbGluZS1oZWlnaHQsMS4xZW0pIC0gMWVtKS8gMikpKi0xKSArIC4wMzdl'@;
put 'bSl9W2Nkcy10ZXh0Kj1kaXNwbGF5XTo6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSAtIHZhcigtLWNkcy1nbG9i'@;
put 'YWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQsLjE3MDNlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQsLjUxN2VtKSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1saW5lLWhlaWdodCwxLjFlbSkgLSAxZW0pLyAyKSkqLTEp'@;
put 'IC0gLjA0NGVtKX1bY2RzLXRleHQqPXRpdGxlXXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRpdGxlLWZvbnQtc2l6ZSxjYWxjKDI0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFw'@;
put 'aHktdGl0bGUtZm9udC13ZWlnaHQsNDAwKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGluZS1oZWlnaHQsMS4xNjY2N2VtKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGV0dGVyLXNwYWNpbmcsLS4wMDgz'@;
put 'MzNlbSl9W2Nkcy10ZXh0Kj10aXRsZV06OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgKyBjYWxjKCh2YXIoLS1jZHMt'@;
put 'Z2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGluZS1oZWlnaHQsMS4xNjY2N2VtKSAtIDFlbSkvIDIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9dGl0bGVdOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0g'@;
put 'dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZh'@;
put 'cigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1saW5lLWhlaWdodCwxLjE2NjY3ZW0pIC0gMWVtKS8gMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1zZWN0aW9uXXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC1zaXplLGNhbGMoMjAg'@;
put 'KiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtd2VpZ2h0LDQwMCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQsMS4y'@;
put 'ZW0pO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWxldHRlci1zcGFjaW5nLC0uMDFlbSl9W2Nkcy10ZXh0Kj1zZWN0aW9uXTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2Fs'@;
put 'YygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0LDEuMmVtKSAtIDFlbSkvIDIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9c2VjdGlvbl06'@;
put 'OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXIt'@;
put 'aGVpZ2h0LC4xNzAzZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0LC41MTdlbSkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQsMS4yZW0pIC0gMWVtKS8gMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1z'@;
put 'dWJzZWN0aW9uXXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC1zaXplLGNhbGMoMTYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9u'@;
put 'LWZvbnQtd2VpZ2h0LDQwMCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQsMS4yNWVtKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1sZXR0ZXItc3BhY2luZywtLjAxMjVl'@;
put 'bSl9W2Nkcy10ZXh0Kj1zdWJzZWN0aW9uXTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNhbGMoKHZhcigtLWNk'@;
put 'cy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0LDEuMjVlbSkgLSAxZW0pLyAyKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPXN1YnNlY3Rpb25dOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMo'@;
put 'KCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSAr'@;
put 'IGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0LDEuMjVlbSkgLSAxZW0pLyAyKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPWJvZHlde2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0'@;
put 'LDQwMCk7Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSxjYWxjKDE0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2lu'@;
put 'ZywtLjAxNDI4NmVtKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCwxLjQyODU3ZW0pfVtjZHMtdGV4dCo9Ym9keV06OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNh'@;
put 'bGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCwxLjQyODU3ZW0pIC0gMWVtKS8gMikpKi0xKSArIC4xZW0pfVtjZHMtdGV4dCo9Ym9keV06OmFm'@;
put 'dGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVp'@;
put 'Z2h0LC4xNzAzZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0LC41MTdlbSkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQsMS40Mjg1N2VtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfWJvZHlbY2RzLXRleHQq'@;
put 'PWJvZHldOjphZnRlcixib2R5W2Nkcy10ZXh0Kj1ib2R5XTo6YmVmb3Jle2NvbnRlbnQ6bm9uZX1bY2RzLXRleHQqPW1lc3NhZ2Vde2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1mb250LXNpemUsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFs'@;
put 'LWJhc2UsMjApKSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtZm9udC13ZWlnaHQsY2FsYyg0MDAgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdl'@;
put 'LWxpbmUtaGVpZ2h0LDEuMjVlbSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtbGV0dGVyLXNwYWNpbmcsLS4wMTI1ZW0pfVtjZHMtdGV4dCo9bWVzc2FnZV06OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6'@;
put 'MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1saW5lLWhlaWdodCwxLjI1ZW0pIC0gMWVtKS8gMikpKi0xKSArIC4wMzdlbSl9'@;
put 'W2Nkcy10ZXh0Kj1tZXNzYWdlXTo6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSAtIHZhcigtLWNkcy1nbG9iYWwt'@;
put 'dHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQsLjE3MDNlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQsLjUxN2VtKSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1saW5lLWhlaWdodCwxLjI1ZW0pIC0gMWVtKS8gMikpKi0xKSAt'@;
put 'IC4wNDRlbSl9W2Nkcy10ZXh0Kj1zZWNvbmRhcnlde2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSxjYWxjKDEzICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5'@;
put 'cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0LDQwMCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCwxLjIzMDc3ZW0pO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0'@;
put 'dGVyLXNwYWNpbmcsLS4wMDc2OTJlbSl9W2Nkcy10ZXh0Kj1zZWNvbmRhcnldOjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1'@;
put 'ZW0pICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCwxLjIzMDc3ZW0pIC0gMWVtKS8gMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1zZWNvbmRhcnldOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lk'@;
put 'dGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBo'@;
put 'eS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQsMS4yMzA3N2VtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dH49bGlua117Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5'@;
put 'LWxpbmstY29sb3IsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCwjMDA3OWFkKSkhaW1wb3J0YW50O3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUhaW1wb3J0YW50O2xpbmUtaGVpZ2h0OmluaGVyaXQhaW1wb3J0YW50O2ZvbnQtc2l6ZTppbmhlcml0IWltcG9ydGFudH1bY2RzLXRl'@;
put 'eHR+PWxpbmtdOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lLEhpZ2hsaWdodCBzb2xpZCAycHgpO291dGxpbmUtb2Zmc2V0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZS1vZmZzZXQsMXB4KX1bY2RzLXRl'@;
put 'eHR+PWxpbmtdOmhvdmVye2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1saW5rLWNvbG9yLWhvdmVyLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDAsIzAwNjA4YSkpIWltcG9ydGFudH1bY2RzLXRleHR+PWxpbmtdOnZpc2l0ZWQ6bm90KFtjZHMtdGV4dH49c3RhdGlj'@;
put 'XSl7Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3ItdmlzaXRlZCx2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTYwMCwjM2I0MGNlKSkhaW1wb3J0YW50fVtjZHMtdGV4dH49bGlua106dmlzaXRlZDpub3QoW2Nkcy10ZXh0fj1zdGF0aWNdKTpob3Zl'@;
put 'cntjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xvci12aXNpdGVkLWhvdmVyLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItNzAwLCMyNDI5YzIpKSFpbXBvcnRhbnR9QG1lZGlhICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86MCl7W2Nkcy10'@;
put 'ZXh0PWxpbmtdOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lLXdlYmtpdCw1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3IpfX1bY2RzLXRleHR+PWNvZGVde2NvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLHZh'@;
put 'cigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCwjZTAyMjAwKSk7Zm9udC1mYW1pbHk6bW9ub3NwYWNlO2ZvbnQtc2l6ZToxLjFlbX1bY2RzLWRpdmlkZXJde2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCxjYWxjKDEgKiAxcmVt'@;
put 'IC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO292ZXJmbG93OmhpZGRlbjtib3gtc2hhZG93OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIwMCwjY2JkNGQ4KSkgMCAwIDAgdmFyKC0tY2RzLWFsaWFz'@;
put 'LW9iamVjdC1ib3JkZXItd2lkdGgtMTAwLGNhbGMoMSAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkgaW5zZXR9W2Nkcy10ZXh0fj1saWdodF17Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LWxpZ2h0LDMwMCkhaW1wb3J0YW50'@;
put 'fVtjZHMtdGV4dH49anVzdGlmeV17dGV4dC1hbGlnbjpqdXN0aWZ5IWltcG9ydGFudH1bY2RzLXRleHR+PWxlZnRde3RleHQtYWxpZ246bGVmdCFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1yaWdodF17dGV4dC1hbGlnbjpyaWdodCFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1jZW50ZXJde3RleHQtYWxp'@;
put 'Z246Y2VudGVyIWltcG9ydGFudH1bY2RzLXRleHR+PWxoZV17cGFkZGluZzouMDVweCAwfVtjZHMtdGV4dH49bGhlXTo6YmVmb3Jle2NvbnRlbnQ6IiI7bWFyZ2luLXRvcDotLjEyNGVtO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjB9W2Nkcy10ZXh0fj1saGVdOjphZnRlcntjb250ZW50OiIiO21h'@;
put 'cmdpbi1ib3R0b206LS4yMjFlbTtkaXNwbGF5OmJsb2NrO2hlaWdodDowfVtjZHMtdGV4dCo9aDJdLFtjZHMtdGV4dCo9aDNde2ZvbnQtZmFtaWx5OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkZXItZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBz'@;
put 'YW5zLXNlcmlmKTtmb250LXNpemU6MS40cmVtO2ZvbnQtd2VpZ2h0OjIwMDtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNDAwKTtsaW5lLWhlaWdodDoxLjcxNDNlbTtsZXR0ZXItc3BhY2luZzotLjAxNzg1N2VtfVtjZHMtdGV4dCo9aDJdOjpiZWZvcmV7Y29udGVu'@;
put 'dDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pICsgY2FsYygoMS43MTQzZW0gLSAxZW0pLyAyKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPWgy'@;
put 'XTo6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRl'@;
put 'ci1oZWlnaHQsLjE3MDNlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQsLjUxN2VtKSkgKyBjYWxjKCgxLjcxNDNlbSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9aDNde2ZvbnQtc2l6ZToxLjFyZW07bGluZS1oZWlnaHQ6MS4wOTA5ZW07bGV0'@;
put 'dGVyLXNwYWNpbmc6LS4wMTM2MzZlbX1bY2RzLXRleHQqPWgzXTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNh'@;
put 'bGMoKDEuMDkwOWVtIC0gMWVtKS8gMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1oM106OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1o'@;
put 'ZWlnaHQsLjE0NzVlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0LC4xNzAzZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0LC41MTdlbSkpICsgY2FsYygoMS4wOTA5ZW0gLSAxZW0pLyAyKSkqLTEpIC0gLjA0NGVtKX06aG9z'@;
put 'dHthbGw6aW5pdGlhbDtkaXNwbGF5OmJsb2NrO3Zpc2liaWxpdHk6aW5oZXJpdDtmb250LWZhbWlseTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmKTtjb250YWluOmxheW91dDtib3gtc2l6'@;
put 'aW5nOmJvcmRlci1ib3ghaW1wb3J0YW50Oy13ZWJraXQtYXBwZWFyYW5jZTpub25lIWltcG9ydGFudH0qLDphZnRlciw6YmVmb3Jle2JveC1zaXppbmc6aW5oZXJpdCFpbXBvcnRhbnR9c2xvdHtmb250LWZhbWlseTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1mYW1pbHksICJD'@;
put 'bGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmKTtkaXNwbGF5OmNvbnRlbnRzIWltcG9ydGFudH06OnNsb3R0ZWQoKil7Zm9udC1mYW1pbHk6aW5oZXJpdDtib3gtc2l6aW5nOmluaGVyaXR9OjpzbG90dGVkKCopOjpwbGFjZWhvbGRlcntjb2xvcjp2YXIoLS1jZHMtZ2xv'@;
put 'YmFsLXR5cG9ncmFwaHktY29sb3ItMjAwLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCwjNGY2MTY5KSl9Omhvc3QoW19pcy1hbmNob3JdKSw6aG9zdChbcm9sZT1idXR0b25dKXtjdXJzb3I6cG9pbnRlciFpbXBvcnRhbnR9Omhvc3QoW19pcy1hbmNob3JdKSA6OnNs'@;
put 'b3R0ZWQoKiksOmhvc3QoW3JvbGU9YnV0dG9uXSkgOjpzbG90dGVkKCope2N1cnNvcjpwb2ludGVyIWltcG9ydGFudH06aG9zdChbcm9sZT1idXR0b25dW2Rpc2FibGVkXSl7Y3Vyc29yOm5vdC1hbGxvd2VkIWltcG9ydGFudH06aG9zdChbcm9sZT1idXR0b25dW2Rpc2FibGVkXSkgOjpzbG90'@;
put 'dGVkKCope2N1cnNvcjpub3QtYWxsb3dlZCFpbXBvcnRhbnQ7cG9pbnRlci1ldmVudHM6bm9uZX06aG9zdChbaGlkZGVuXSksW2hpZGRlbl17ZGlzcGxheTpub25lIWltcG9ydGFudH06aG9zdChbaGlkZGVuKj1mYWxzZV0pe2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fTpob3N0KFtyb2xlPWRp'@;
put 'YWxvZ11baGlkZGVuXSksOmhvc3QoW3JvbGU9ZGlhbG9nXVtoaWRkZW5dKSA6OnNsb3R0ZWQoKil7ZGlzcGxheTpibG9jayFpbXBvcnRhbnQ7dmlzaWJpbGl0eTpoaWRkZW4haW1wb3J0YW50fTpob3N0KFtyb2xlPWRpYWxvZ11baGlkZGVuKj1mYWxzZV0pLDpob3N0KFtyb2xlPWRpYWxvZ11b'@;
put 'aGlkZGVuKj1mYWxzZV0pIDo6c2xvdHRlZCgqKXt2aXNpYmlsaXR5OnZpc2libGUhaW1wb3J0YW50fTpob3N0KFtfZm9jdXNlZF0pIC5pbnB1dCw6aG9zdChbX2ZvY3VzZWRdKSBbZm9jdXNhYmxlXSw6aG9zdChbdGFiaW5kZXg9IjAiXTpmb2N1cyksOmhvc3QoW3RhYmluZGV4PSIwIl06Zm9j'@;
put 'dXMpIFtmb2N1c2FibGVdLFt0YWJpbmRleD0iMCJdW2ZvY3VzYWJsZV06Zm9jdXN7b3V0bGluZTpIaWdobGlnaHQgc29saWQgMnB4O291dGxpbmU6NXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291dGxpbmUtb2Zmc2V0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rp'@;
put 'b24tb3V0bGluZS1vZmZzZXQsMXB4KX1gO2Z1bmN0aW9uIGNVKGwpe3JldHVybmBjYWxjKCgke2x9IC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkgKiAxcmVtKWB9Y29uc3QgTk9lPShsLGMpPT4ibWV0aG9kIj09PWMua2luZCYmYy5kZXNjcmlwdG9yJiYhKCJ2YWx1ZSJpbiBjLmRlc2NyaXB0'@;
put 'b3IpP3suLi5jLGZpbmlzaGVyKGEpe2EuY3JlYXRlUHJvcGVydHkoYy5rZXksbCl9fTp7a2luZDoiZmllbGQiLGtleTpTeW1ib2woKSxwbGFjZW1lbnQ6Im93biIsZGVzY3JpcHRvcjp7fSxvcmlnaW5hbEtleTpjLmtleSxpbml0aWFsaXplcigpeyJmdW5jdGlvbiI9PXR5cGVvZiBjLmluaXRp'@;
put 'YWxpemVyJiYodGhpc1tjLmtleV09Yy5pbml0aWFsaXplci5jYWxsKHRoaXMpKX0sZmluaXNoZXIoYSl7YS5jcmVhdGVQcm9wZXJ0eShjLmtleSxsKX19LFZPZT0obCxjLGEpPT57Yy5jb25zdHJ1Y3Rvci5jcmVhdGVQcm9wZXJ0eShhLGwpfTtmdW5jdGlvbiBIbGUobCl7cmV0dXJuKGMsYSk9'@;
put 'PnZvaWQgMCE9PWE/Vk9lKGwsYyxhKTpOT2UobCxjKX1mdW5jdGlvbiBObGUobCxjKXtzd2l0Y2goYyYmYy50eXBlKXtjYXNlIEFycmF5OmNhc2UgT2JqZWN0OnJldHVybntyZWZsZWN0OiExLC4uLmN9O2Nhc2UgU3RyaW5nOnJldHVybntyZWZsZWN0OiEwLGF0dHJpYnV0ZTpSZyhsKSxjb252'@;
put 'ZXJ0ZXI6e3RvQXR0cmlidXRlOmE9PmF8fG51bGx9LC4uLmN9O2Nhc2UgTnVtYmVyOnJldHVybntyZWZsZWN0OiEwLGF0dHJpYnV0ZTpSZyhsKSwuLi5jfTtjYXNlIEJvb2xlYW46cmV0dXJue3JlZmxlY3Q6ITAsYXR0cmlidXRlOlJnKGwpLGNvbnZlcnRlcjp7dG9BdHRyaWJ1dGU6YT0+YT8i'@;
put 'IjpudWxsLGZyb21BdHRyaWJ1dGU6YT0+ZnVuY3Rpb24ga09lKGwpe3JldHVybiBudWxsIT1sJiYiIitsIT0iZmFsc2UifShhKX0sLi4uY307Y2FzZSBEYXRlOnJldHVybntyZWZsZWN0OiExLGNvbnZlcnRlcjp7ZnJvbUF0dHJpYnV0ZTphPT5uZXcgRGF0ZShhKX0sLi4uY307ZGVmYXVsdDpy'@;
put 'ZXR1cm57Li4uY319fWZ1bmN0aW9uIExzKGwpe3JldHVybihjLGEpPT4obD8ucmVxdWlyZWQmJmZ1bmN0aW9uIEJPZShsLGMsYSl7Y29uc3QgZj1sLmZpcnN0VXBkYXRlZDtsLmZpcnN0VXBkYXRlZD1mdW5jdGlvbihkKXtpZihhJiZhLnJlcXVpcmVkJiZjNCh0aGlzW2NdKSl7Y29uc3QgaD1h'@;
put 'LnJlcXVpcmVkTWVzc2FnZXx8ZnVuY3Rpb24obT0id2FybmluZyIsXyxPKXtjb25zdCBYPU8udG9Mb2NhbGVMb3dlckNhc2UoKTtyZXR1cm5gJHtqb2UobSl9OiAke199IGlzIHJlcXVpcmVkIHRvIHVzZSAke1h9IGNvbXBvbmVudC4gU2V0IHRoZSBKUyBQcm9wZXJ0eSBvciBIVE1MIEF0dHJp'@;
put 'YnV0ZS5cblxuYCsoRm9lKCk/YEFuZ3VsYXI6IDwke1h9IFske199XT0iLi4uIj48LyR7WH0+XG5gOiIiKSsoTm9lKCk/YFZ1ZTogPCR7WH0gOiR7X309Ii4uLiI+PC8ke1h9PlxuYDoiIikrKEhvZSgpP2BSZWFjdDogPCR7ZnVuY3Rpb24gQUFlKGwpe3JldHVybiBqb2UoZnVuY3Rpb24geEFl'@;
put 'KGwpe3JldHVybiBsLnNwbGl0KCItIikubWFwKChjLGEpPT5hP2MuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYy5zbGljZSgxKS50b0xvd2VyQ2FzZSgpOmMpLmpvaW4oIiIpfShsKSl9KFgpfSAke2FlPV8sYWUuc3RhcnRzV2l0aCgiYXJpYSIpP1JnKGFlKTphZX09ey4uLn0gLz5cbmA6IiIp'@;
put 'K2BIVE1MOiA8JHtYfSAke1JnKF8pfT0iLi4uIj48LyR7WH0+XG5KYXZhU2NyaXB0OiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcke1h9JykuJHtffSA9ICcuLi4nO1xuXG5gO3ZhciBhZX0oYS5yZXF1aXJlZCxjLHRoaXMudGFnTmFtZSk7aWYoImVycm9yIj09PWEucmVxdWlyZWQpdGhyb3cg'@;
put 'RXJyb3IoaCk7TGcud2FybihoLHRoaXMpfWYmJmYuY2FsbCh0aGlzLGQpfX0oYyxhLGwpLEhsZShObGUoYSxsKSkoYyxhKSl9ZnVuY3Rpb24gVmxlKGwpe3JldHVybihjLGEpPT57Y29uc3QgZj1ObGUoYSxsKTtyZXR1cm4gZiYmKGYucmVmbGVjdD0hIWw/LnJlZmxlY3QmJmwucmVmbGVjdCxm'@;
put 'LnJlZmxlY3QmJiFsPy5hdHRyaWJ1dGUmJihmLmF0dHJpYnV0ZT0iXyIrUmcoYSkpKSxIbGUoZikoYyxhKX19dmFyIE9oLFVPZT1RemBAa2V5ZnJhbWVzIGZhZGVJbkFuZE91dHswJSx0b3tvcGFjaXR5OjB9NzUle29wYWNpdHk6MX19Omhvc3R7LS1jb2xvcjpjdXJyZW50Q29sb3I7ZGlzcGxh'@;
put 'eTppbmxpbmUtYmxvY2s7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjAp'@;
put 'KSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtt'@;
put 'YXJnaW46MDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7ZmlsbDp2YXIoLS1jb2xvcik7Y29sb3I6dmFyKC0tY29sb3IpO2NvbnRhaW46c3RyaWN0O2N1cnNvcjppbmhlcml0fXN2Z3tkaXNwbGF5OmJsb2NrfTpob3N0KFtzaXplKj14c10pe2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUs'@;
put 'Y2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSxjYWxjKDggKiAx'@;
put 'cmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKX06aG9zdChbc2l6ZSo9c21dKXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03LGNh'@;
put 'bGMoMTYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICog'@;
put 'MXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03LGNhbGMoMTYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpfTpob3N0KFtzaXplKj1tZF0pe2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTks'@;
put 'Y2FsYygyNCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05LGNhbGMoMjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05LGNhbGMoMjQg'@;
put 'KiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTksY2FsYygyNCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSl9Omhvc3QoW3NpemUqPWxnXSl7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2Ut'@;
put 'MTEsY2FsYygzNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSxjYWxjKDM2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEsY2Fs'@;
put 'YygzNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEsY2FsYygzNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSl9Omhvc3QoW3NpemUqPXhsXSl7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwt'@;
put 'c3BhY2UtMTIsY2FsYyg0OCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMixjYWxjKDQ4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2Ut'@;
put 'MTIsY2FsYyg0OCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTIsY2FsYyg0OCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSl9Omhvc3QoW3NpemUqPXh4bF0pe2hlaWdodDpjYWxjKHZhcigt'@;
put 'LWNkcy1nbG9iYWwtc3BhY2UtMTMsY2FsYyg2NCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKSk7d2lkdGg6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFs'@;
put 'LXNwYWNlLTEzLGNhbGMoNjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkpO21pbi1oZWlnaHQ6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNl'@;
put 'LTEzLGNhbGMoNjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkpO21pbi13aWR0aDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTMsY2Fs'@;
put 'Yyg2NCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKSl9Omhvc3QoW3NpemUqPWZpdF0pe2hlaWdodDphdXRvO3dpZHRoOmF1dG87Y29udGFpbjps'@;
put 'YXlvdXR9Omhvc3QoW3N0YXR1cz1zdWNjZXNzXSl7LS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNzAwLCAjNDI4MTBlKSl9Omhvc3QoW3N0YXR1cz1kYW5nZXJdKXstLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0'@;
put 'dXMtZGFuZ2VyLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDAsICNlMDIyMDApKX06aG9zdChbc3RhdHVzPXdhcm5pbmddKXstLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy1kYXJrLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTgwMCwgI2EzNjUwMCkp'@;
put 'fTpob3N0KFtzdGF0dXM9aW5mb10pey0tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzAwLCAjMDA3OWFkKSl9Omhvc3QoW3N0YXR1cz1uZXV0cmFsXSl7LS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWws'@;
put 'IHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCwgIzRmNjE2OSkpfTpob3N0KFtpbnZlcnNlXSl7LS1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDAsICNjYmQ0ZDgpfTpob3N0KFtkaXJlY3Rpb249dXBdKXt0cmFuc2Zvcm06cm90YXRl'@;
put 'KDApfTpob3N0KFtkaXJlY3Rpb249ZG93bl0pe3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX06aG9zdChbZGlyZWN0aW9uPXJpZ2h0XSl7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyl9Omhvc3QoW2RpcmVjdGlvbj1sZWZ0XSl7dHJhbnNmb3JtOnJvdGF0ZSgyNzBkZWcpfTpob3N0KFtmbGlwPWhv'@;
put 'cml6b250YWxdKXt0cmFuc2Zvcm06c2NhbGUoLTEpIHJvdGF0ZVgoMTgwZGVnKX06aG9zdChbZmxpcD12ZXJ0aWNhbF0pe3RyYW5zZm9ybTpzY2FsZSgtMSkgcm90YXRlWSgxODBkZWcpfS5hbGVydCwuYmFkZ2V7ZmlsbDp2YXIoLS1iYWRnZS1jb2xvcix2YXIoLS1jZHMtYWxpYXMtc3RhdHVz'@;
put 'LWRhbmdlcix2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDAsI2UwMjIwMCkpKX06aG9zdChbYmFkZ2U9c3VjY2Vzc10pey0tYmFkZ2UtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTcwMCwgIzQyODEwZSkpfTpo'@;
put 'b3N0KFtiYWRnZT1kYW5nZXJdKXstLWJhZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDAsICNlMDIyMDApKX06aG9zdChbYmFkZ2UqPXdhcm5pbmddKXstLWJhZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0'@;
put 'dXMtd2FybmluZy1kYXJrLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTgwMCwgI2EzNjUwMCkpfTpob3N0KFtiYWRnZT1pbmhlcml0XSl7LS1iYWRnZS1jb2xvcjpjdXJyZW50Q29sb3J9Omhvc3QoW2JhZGdlPWluZm9dKXstLWJhZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0'@;
put 'dXMtaW5mbywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCwgIzAwNzlhZCkpfTpob3N0KFtiYWRnZT1uZXV0cmFsXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCwgIzRm'@;
put 'NjE2OSkpfTpob3N0KFtiYWRnZT1pbmhlcml0LXRyaWFuZ2xlXSl7LS1iYWRnZS1jb2xvcjpjdXJyZW50Q29sb3J9Omhvc3QoW2JhZGdlXVtpbnZlcnNlXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlciwgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNzAw'@;
put 'LCAjZTAyMjAwKSl9Omhvc3QoW2JhZGdlPXN1Y2Nlc3NdW2ludmVyc2VdKXstLWJhZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2VzcywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi03MDAsICM0MjgxMGUpKX06aG9zdChbYmFkZ2UqPXdhcm5pbmddW2ludmVyc2Vd'@;
put 'KXstLWJhZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy1kYXJrLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTgwMCwgI2EzNjUwMCkpfTpob3N0KFtiYWRnZSo9aW5oZXJpdF1baW52ZXJzZV0pey0tYmFkZ2UtY29sb3I6Y3VycmVudENvbG9yfTpob3N0KFti'@;
put 'YWRnZT1pbmZvXVtpbnZlcnNlXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8sIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDAsICMwMDc5YWQpKX0uY2RzLWludGVybmFsLWRvdC0xe2FuaW1hdGlvbjpmYWRlSW5BbmRPdXQgMS44cyBlYXNlLWluIDBz'@;
put 'IGluZmluaXRlfS5jZHMtaW50ZXJuYWwtZG90LTJ7YW5pbWF0aW9uOmZhZGVJbkFuZE91dCAxLjhzIGVhc2Utb3V0IC40MjJzIGluZmluaXRlfS5jZHMtaW50ZXJuYWwtZG90LTN7YW5pbWF0aW9uOmZhZGVJbkFuZE91dCAxLjhzIGVhc2Utb3V0IC42NzVzIGluZmluaXRlfUBtZWRpYSAocHJl'@;
put 'ZmVycy1yZWR1Y2VkLW1vdGlvbil7LmNkcy1pbnRlcm5hbC1kb3QtMSwuY2RzLWludGVybmFsLWRvdC0yLC5jZHMtaW50ZXJuYWwtZG90LTN7YW5pbWF0aW9uOm5vbmV9fWA7ZnVuY3Rpb24gR09lKGwsYyl7bGV0IGE9IiI7c3dpdGNoKGZ1bmN0aW9uIFpPZShsKXtzd2l0Y2goITApe2Nhc2Ug'@;
put 'YzQobCk6cmV0dXJuIE9oLk5pbFNpemVWYWx1ZTtjYXNlIGZ1bmN0aW9uIEJsZShsKXtyZXR1cm5bInh4cyIsInhzIiwic20iLCJtZCIsImxnIiwieGwiLCJ4eGwiXS5pbmRleE9mKGwpPi0xfShsKTpyZXR1cm4gT2guVmFsaWRTaXplU3RyaW5nO2Nhc2UgZnVuY3Rpb24gQW9lKGwpe3JldHVy'@;
put 'biB3eihsKSYmIXhvZShsLnRyaW0oKSkmJitsPT0rbH0obCk6cmV0dXJuIE9oLlZhbGlkTnVtZXJpY1N0cmluZztkZWZhdWx0OnJldHVybiBPaC5CYWRTaXplVmFsdWV9fShmdW5jdGlvbiBZT2UobCl7cmV0dXJuIGM0KGwpPyIiOmZ1bmN0aW9uIFRBZShsLGMsYT0iIil7Y29uc3QgZj1sLnNw'@;
put 'bGl0KCIgIiksZD0iIj09PWE/Zi5maWx0ZXIoaD0+aCE9PWMpOmYubWFwKGg9Pmg9PT1jP2E6aCk7cmV0dXJuIGQubGVuZ3RoPjA/ZC5qb2luKCIgIik6IiJ9KGwsImZpdCIpfShjKSkpe2Nhc2UgT2guVmFsaWROdW1lcmljU3RyaW5nOnJldHVybiBhPWNVKHBhcnNlSW50KGMpKSx2b2lkIGZ1'@;
put 'bmN0aW9uIEZPZShsLC4uLmMpe2MuZm9yRWFjaCgoW2EsZl0pPT57bC5zdHlsZVthXT1mfSl9KGwsLi4uZnVuY3Rpb24gV09lKGwsYyl7cmV0dXJuIUhDKGwpJiZsLmluZGV4T2YoImZpdCIpPi0xP1tbIndpZHRoIiwiYXV0byJdLFsiaGVpZ2h0IiwiYXV0byJdLFsibWluLXdpZHRoIixjXSxb'@;
put 'Im1pbi1oZWlnaHQiLGNdXTpbWyJ3aWR0aCIsY10sWyJoZWlnaHQiLGNdLFsibWluLXdpZHRoIixjXSxbIm1pbi1oZWlnaHQiLGNdXX0oYyxhKSk7Y2FzZSBPaC5WYWxpZFNpemVTdHJpbmc6Y2FzZSBPaC5OaWxTaXplVmFsdWU6cmV0dXJuIHZvaWQgZnVuY3Rpb24gSE9lKGwsLi4uYyl7Yy5m'@;
put 'b3JFYWNoKGE9PntsLnN0eWxlW2FdPSIifSl9KGwsIndpZHRoIiwiaGVpZ2h0IiwibWluLXdpZHRoIiwibWluLWhlaWdodCIpO2RlZmF1bHQ6cmV0dXJufX1mdW5jdGlvbiBmVShsKXtyZXR1cm4gbC5iYWRnZSYmKCJpbmhlcml0LXRyaWFuZ2xlIj09PWwuYmFkZ2V8fCJ3YXJuaW5nLXRyaWFu'@;
put 'Z2xlIj09PWwuYmFkZ2UpfSFmdW5jdGlvbihsKXtsLkJhZFNpemVWYWx1ZT0iYmFkLXZhbHVlIixsLlZhbGlkU2l6ZVN0cmluZz0idmFsdWUtaXMtc3RyaW5nIixsLlZhbGlkTnVtZXJpY1N0cmluZz0idmFsdWUtaXMtbnVtZXJpYyIsbC5OaWxTaXplVmFsdWU9InZhbHVlLWlzLW5pbCJ9KE9o'@;
put 'fHwoT2g9e30pKTtjbGFzcyBTZCBleHRlbmRzIFh2e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9zaGFwZT0idW5rbm93biIsdGhpcy5zb2xpZD0hMSx0aGlzLmludmVyc2U9ITF9c3RhdGljIGdldCBzdHlsZXMoKXtyZXR1cm5bRmxlLFVPZV19Z2V0IHNoYXBlKCl7'@;
put 'cmV0dXJuIHRoaXMuX3NoYXBlfXNldCBzaGFwZShjKXtpZihmdW5jdGlvbiB2QWUobCxjKXtyZXR1cm4hYzQobCkmJk9vZShsLGMpfShjLHRoaXMuX3NoYXBlKSl7Y29uc3QgYT10aGlzLl9zaGFwZTt0aGlzLl9zaGFwZT1jLHRoaXMucmVxdWVzdFVwZGF0ZSgic2hhcGUiLGEpfX1nZXQgc2l6'@;
put 'ZSgpe3JldHVybiB0aGlzLl9zaXplfXNldCBzaXplKGMpe2lmKGZ1bmN0aW9uIGdBZShsLGMpe3JldHVybiBmdW5jdGlvbiBtQWUobCl7cmV0dXJuIENEKFN0cmluZyxsKXx8SEMobCl9KGwpJiZPb2UobCxjKX0oYyx0aGlzLl9zaXplKSl7Y29uc3QgYT10aGlzLl9zaXplO3RoaXMuX3NpemU9'@;
put 'YyxHT2UodGhpcyxjKSx0aGlzLnJlcXVlc3RVcGRhdGUoInNpemUiLGEpfX11cGRhdGVkKGMpe2lmKGMuaGFzKCJpbm5lck9mZnNldCIpJiZ0aGlzLmlubmVyT2Zmc2V0PjApe2NvbnN0IGE9Y1UoLTEqdGhpcy5pbm5lck9mZnNldCksZj1gY2FsYygxMDAlICsgJHtjVSgyKnRoaXMuaW5uZXJP'@;
put 'ZmZzZXQpfSlgO3RoaXMuc3ZnLnN0eWxlLndpZHRoPWYsdGhpcy5zdmcuc3R5bGUuaGVpZ2h0PWYsdGhpcy5zdmcuc3R5bGUubWFyZ2luPWAke2F9IDAgMCAke2F9YH19Zmlyc3RVcGRhdGVkKGMpe2lmKHN1cGVyLmZpcnN0VXBkYXRlZChjKSx0aGlzLmlzQ29ubmVjdGVkKXtsZXQgYT0idW5r'@;
put 'bm93biI7dGhpcy5zdWJzY3JpcHRpb249bnUuc3RhdGVVcGRhdGVzLnN1YnNjcmliZShmPT57Imljb25SZWdpc3RyeSI9PT1mLmtleSYmamEucmVnaXN0cnlbdGhpcy5zaGFwZV0mJmEhPT10aGlzLnNoYXBlJiYoYT10aGlzLnNoYXBlLHRoaXMucmVxdWVzdFVwZGF0ZSgic2hhcGUiKSl9KX19'@;
put 'ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpfXJlbmRlcigpe3JldHVybiB3eihqYS5yZWdpc3RyeVt0aGlzLnNoYXBlXSk/bFVgPHNwYW4gLmlubmVySFRNTD0iJHtqYS5yZWdpc3RyeVt0'@;
put 'aGlzLnNoYXBlXX0iPjwvc3Bhbj5gOklPZWA8c3ZnIC5pbm5lckhUTUw9IiR7ZnVuY3Rpb24gS09lKGwpe2NvbnN0IGM9amEucmVnaXN0cnlbbC5zaGFwZV0/P2phLnJlZ2lzdHJ5LnVua25vd247bGV0IGE9bC5zb2xpZCYmYy5zb2xpZD9jLnNvbGlkOmMub3V0bGluZTtyZXR1cm4gbC5iYWRn'@;
put 'ZSYmIWZVKGwpJiYoYT1sLnNvbGlkP2Muc29saWRCYWRnZWQ/P2E6Yy5vdXRsaW5lQmFkZ2VkPz9hKSxmVShsKSYmKGE9bC5zb2xpZD9jLnNvbGlkQWxlcnRlZD8/YTpjLm91dGxpbmVBbGVydGVkPz9hKSxhfSh0aGlzKStmdW5jdGlvbiAkT2UobCl7bGV0IGM9IiI7cmV0dXJuIGwuYmFkZ2Um'@;
put 'JmZVKGwpP2M9JzxwYXRoIGQ9Ik0yNi44NSAxLjE0TDIxLjEzIDExYTEuMjggMS4yOCAwIDAwMS4xIDJoMTEuNDVhMS4yOCAxLjI4IDAgMDAxLjEtMmwtNS43Mi05Ljg2YTEuMjggMS4yOCAwIDAwLTIuMjEgMHoiIGNsYXNzPSJhbGVydCIgLz4nOmwuYmFkZ2UmJihjPSc8Y2lyY2xlIGN4PSIz'@;
put 'MCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJiYWRnZSIgLz4nKSxjfSh0aGlzKX0iIHZpZXdCb3g9IjAgMCAzNiAzNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9zdmc+YH19T3QoW0xzKHt0eXBlOlN0cmluZ30pXSxTZC5wcm90b3R5cGUs'@;
put 'InNoYXBlIixudWxsKSxPdChbTHMoe3R5cGU6U3RyaW5nfSldLFNkLnByb3RvdHlwZSwic2l6ZSIsbnVsbCksT3QoW0xzKHt0eXBlOlN0cmluZ30pXSxTZC5wcm90b3R5cGUsImRpcmVjdGlvbiIsdm9pZCAwKSxPdChbTHMoe3R5cGU6U3RyaW5nfSldLFNkLnByb3RvdHlwZSwiZmxpcCIsdm9p'@;
put 'ZCAwKSxPdChbTHMoe3R5cGU6Qm9vbGVhbn0pXSxTZC5wcm90b3R5cGUsInNvbGlkIix2b2lkIDApLE90KFtMcyh7dHlwZTpTdHJpbmd9KV0sU2QucHJvdG90eXBlLCJzdGF0dXMiLHZvaWQgMCksT3QoW0xzKHt0eXBlOkJvb2xlYW59KV0sU2QucHJvdG90eXBlLCJpbnZlcnNlIix2b2lkIDAp'@;
put 'LE90KFtMcyh7dHlwZTpTdHJpbmd9KV0sU2QucHJvdG90eXBlLCJiYWRnZSIsdm9pZCAwKSxPdChbVmxlKHt0eXBlOk51bWJlcn0pXSxTZC5wcm90b3R5cGUsImlubmVyT2Zmc2V0Iix2b2lkIDApLE90KFtmdW5jdGlvbiB6T2UobCxjKXtyZXR1cm4oKHtmaW5pc2hlcjpsLGRlc2NyaXB0b3I6'@;
put 'Y30pPT4oYSxmKT0+e3ZhciBkO2lmKHZvaWQgMD09PWYpe2NvbnN0IGg9bnVsbCE9PShkPWEub3JpZ2luYWxLZXkpJiZ2b2lkIDAhPT1kP2Q6YS5rZXksbT1udWxsIT1jP3traW5kOiJtZXRob2QiLHBsYWNlbWVudDoicHJvdG90eXBlIixrZXk6aCxkZXNjcmlwdG9yOmMoYS5rZXkpfTp7Li4u'@;
put 'YSxrZXk6aH07cmV0dXJuIG51bGwhPWwmJihtLmZpbmlzaGVyPWZ1bmN0aW9uKF8pe2woXyxoKX0pLG19e2NvbnN0IGg9YS5jb25zdHJ1Y3Rvcjt2b2lkIDAhPT1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxmLGMoZikpLGw/LihoLGYpfX0pKHtkZXNjcmlwdG9yOmE9Pntjb25zdCBmPXtn'@;
put 'ZXQoKXt2YXIgZCxoO3JldHVybiBudWxsIT09KGg9bnVsbD09PShkPXRoaXMucmVuZGVyUm9vdCl8fHZvaWQgMD09PWQ/dm9pZCAwOmQucXVlcnlTZWxlY3RvcihsKSkmJnZvaWQgMCE9PWg/aDpudWxsfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH07aWYoYyl7Y29uc3QgZD0ic3lt'@;
put 'Ym9sIj09dHlwZW9mIGE/U3ltYm9sKCk6Il9fIithO2YuZ2V0PWZ1bmN0aW9uKCl7dmFyIGgsbTtyZXR1cm4gdm9pZCAwPT09dGhpc1tkXSYmKHRoaXNbZF09bnVsbCE9PShtPW51bGw9PT0oaD10aGlzLnJlbmRlclJvb3QpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLnF1ZXJ5U2VsZWN0b3IobCkp'@;
put 'JiZ2b2lkIDAhPT1tP206bnVsbCksdGhpc1tkXX19cmV0dXJuIGZ9fSl9KCJzdmciKV0sU2QucHJvdG90eXBlLCJzdmciLHZvaWQgMCksb2xlKCJjZHMtaWNvbiIsU2QpO2NsYXNzIFhPZXtjb25zdHJ1Y3RvcihjKXt0aGlzLmhvc3Q9Yyx0aGlzLmhvc3QuYWRkQ29udHJvbGxlcih0aGlzKX1o'@;
put 'b3N0Q29ubmVjdGVkKCl7dmFyIGM9dGhpcztyZXR1cm4geWkoZnVuY3Rpb24qKCl7eWllbGQgYy5ob3N0LnVwZGF0ZUNvbXBsZXRlLGMuaG9zdC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixhPT5jLmVtdWxhdGVBY3RpdmUoYSkpLGMuaG9zdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRv'@;
put 'd24iLGE9PmMuZW11bGF0ZUFjdGl2ZShhKSksYy5ob3N0LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIiwoKT0+Yy5lbXVsYXRlSW5hY3RpdmUoKSksYy5ob3N0LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCgpPT5jLmVtdWxhdGVJbmFjdGl2ZSgpKSxjLmhvc3QuYWRkRXZlbnRMaXN0ZW5lcigi'@;
put 'bW91c2V1cCIsKCk9PmMuZW11bGF0ZUluYWN0aXZlKCkpfSkoKX1lbXVsYXRlQWN0aXZlKGMpe3RoaXMuaG9zdC5kaXNhYmxlZHx8dGhpcy5ob3N0Py5zZXRBdHRyaWJ1dGUoImNkcy1hY3RpdmUiLCIiKSwiU3BhY2UiPT09Yy5jb2RlJiZjLnRhcmdldD09PXRoaXMuaG9zdCYmYy5wcmV2ZW50'@;
put 'RGVmYXVsdCgpfWVtdWxhdGVJbmFjdGl2ZSgpe3RoaXMuaG9zdC5yZW1vdmVBdHRyaWJ1dGUoImNkcy1hY3RpdmUiKX19Y2xhc3MgUU9le2NvbnN0cnVjdG9yKGMpe3RoaXMuaG9zdD1jLHRoaXMuaG9zdC5hZGRDb250cm9sbGVyKHRoaXMpfWhvc3RDb25uZWN0ZWQoKXsodGhpcy5ob3N0Lmhh'@;
put 'c0F0dHJpYnV0ZSgiYXJpYS1jb250cm9scyIpfHx0aGlzLmhvc3QuYXJpYUNvbnRyb2xzKSYmKHRoaXMuaG9zdC5hcmlhSGFzUG9wdXA9InRydWUiLHRoaXMuaG9zdC5hcmlhRXhwYW5kZWQ9ImZhbHNlIil9fWNsYXNzIHREZXtjb25zdHJ1Y3RvcihjKXt0aGlzLmhvc3Q9Yyx0aGlzLmhvc3Qu'@;
put 'YWRkQ29udHJvbGxlcih0aGlzKX1ob3N0VXBkYXRlZCgpe251bGwhPT10aGlzLmhvc3QuZGlzYWJsZWQmJih0aGlzLmhvc3QuYXJpYURpc2FibGVkPXRoaXMuaG9zdC5kaXNhYmxlZCksdGhpcy5ob3N0LnJlYWRvbmx5JiYodGhpcy5ob3N0LmFyaWFEaXNhYmxlZD1udWxsKX19Y2xhc3MgckRl'@;
put 'e2NvbnN0cnVjdG9yKGMpe3RoaXMuaG9zdD1jLHRoaXMuaG9zdC5hZGRDb250cm9sbGVyKHRoaXMpfWhvc3RVcGRhdGVkKCl7bnVsbCE9dGhpcy5ob3N0LnByZXNzZWQmJih0aGlzLmhvc3QuYXJpYVByZXNzZWQ9dGhpcy5ob3N0LnByZXNzZWQ/InRydWUiOiJmYWxzZSIpLHRoaXMuaG9zdC5y'@;
put 'ZWFkb25seSYmKHRoaXMuaG9zdC5hcmlhUHJlc3NlZD1udWxsKX19Y2xhc3Mgb0Rle2NvbnN0cnVjdG9yKGMpe3RoaXMuaG9zdD1jLHRoaXMuaG9zdC5hZGRDb250cm9sbGVyKHRoaXMpfWhvc3RDb25uZWN0ZWQoKXt0aGlzLmhvc3QudGFiSW5kZXg9MH1ob3N0VXBkYXRlZCgpe3RoaXMuaG9z'@;
put 'dC5yb2xlPXRoaXMuaG9zdC5yZWFkb25seT9udWxsOiJidXR0b24iLHRoaXMuaG9zdC50YWJJbmRleD10aGlzLmhvc3QuZGlzYWJsZWQ/LTE6MCx0aGlzLmhvc3QucmVhZG9ubHkmJnRoaXMuaG9zdC5yZW1vdmVBdHRyaWJ1dGUoInRhYmluZGV4Iil9fWNsYXNzIGxEZXtjb25zdHJ1Y3Rvcihj'@;
put 'KXt0aGlzLmhvc3Q9Yyx0aGlzLmhvc3QuYWRkQ29udHJvbGxlcih0aGlzKX1nZXQgY3VycmVudEFuY2hvcigpe3JldHVybiJBIj09PXRoaXMuaG9zdC5wYXJlbnRFbGVtZW50Py50YWdOYW1lP3RoaXMuaG9zdC5wYXJlbnRFbGVtZW50Om51bGx9aG9zdENvbm5lY3RlZCgpe3RoaXMuc2V0QW5j'@;
put 'aG9yKCl9aG9zdFVwZGF0ZWQoKXt0aGlzLnNldEFuY2hvcigpfXNldEFuY2hvcigpe3RoaXMuY3VycmVudEFuY2hvciYmdGhpcy5jdXJyZW50QW5jaG9yIT09dGhpcy5wcmV2aW91c0FuY2hvciYmKHRoaXMucHJldmlvdXNBbmNob3I9dGhpcy5jdXJyZW50QW5jaG9yLHRoaXMuaG9zdC5yZWFk'@;
put 'b25seT0hMCx0aGlzLmN1cnJlbnRBbmNob3Iuc3R5bGUubGluZUhlaWdodD0iMCIsdGhpcy5jdXJyZW50QW5jaG9yLnN0eWxlLnRleHREZWNvcmF0aW9uPSJub25lIil9fWNvbnN0IGRVPWw9Pmw/P0Z1O2Z1bmN0aW9uIGpsZShsKXtsLnByZXZlbnREZWZhdWx0KCksbC5zdG9wUHJvcGFnYXRp'@;
put 'b24oKX1jb25zdCBoVT1uZXcgTWFwKFtbImFycm93LWxlZnQiLCJBcnJvd0xlZnQiXSxbImFycm93LXJpZ2h0IiwiQXJyb3dSaWdodCJdLFsiYXJyb3ctdXAiLCJBcnJvd1VwIl0sWyJhcnJvdy1kb3duIiwiQXJyb3dEb3duIl0sWyJ0YWIiLCJUYWIiXSxbImVudGVyIiwiRW50ZXIiXSxbImVz'@;
put 'Y2FwZSIsIkVzY2FwZSJdLFsic3BhY2UiLCIgIl0sWyJob21lIiwiSG9tZSJdLFsiZW5kIiwiRW5kIl1dKTtjbGFzcyB1RGV7c3RhdGljIGdldCBrZXljb2Rlcygpe3JldHVybiBfQWUoaFUpfXN0YXRpYyBhZGQoYyxhKXtoVS5zZXQoYyxhKX1zdGF0aWMgaGFzKGMpe3JldHVybiBoVS5oYXMo'@;
put 'Yyl9c3RhdGljIGdldENvZGUoYyxhPXRoaXMua2V5Y29kZXMpe3JldHVybiBmdW5jdGlvbiBjRGUobCxjKXtyZXR1cm4gYy5nZXQobCl8fCIifShjLGEpfX1mdW5jdGlvbiBwVShsLGMpe3JldHVybiB1RGUuZ2V0Q29kZShjKT09PWwua2V5fXZhciBEaDshZnVuY3Rpb24obCl7bC5BcnJvd1Vw'@;
put 'PSJBcnJvd1VwIixsLkFycm93RG93bj0iQXJyb3dEb3duIixsLkFycm93TGVmdD0iQXJyb3dMZWZ0IixsLkFycm93UmlnaHQ9IkFycm93UmlnaHQiLGwuRW5kPSJFbmQiLGwuSG9tZT0iSG9tZSIsbC5QYWdlVXA9IlBhZ2VVcCIsbC5QYWdlRG93bj0iUGFnZURvd24ifShEaHx8KERoPXt9KSk7'@;
put 'Y2xhc3MgdkRle2NvbnN0cnVjdG9yKGMpe3RoaXMuaG9zdD1jLHRoaXMudHJpZ2dlck5hdGl2ZUJ1dHRvbkJlaGF2aW9ySGFuZGxlcj10aGlzLnRyaWdnZXJOYXRpdmVCdXR0b25CZWhhdmlvci5iaW5kKHRoaXMpLHRoaXMuZW11bGF0ZUtleUJvYXJkRXZlbnRCZWhhdmlvckhhbmRsZXI9dGhp'@;
put 'cy5lbXVsYXRlS2V5Qm9hcmRFdmVudEJlaGF2aW9yLmJpbmQodGhpcyksdGhpcy5ob3N0LmFkZENvbnRyb2xsZXIodGhpcyl9aG9zdFVwZGF0ZWQoKXt0aGlzLnNldEJ1dHRvblR5cGUoKSx0aGlzLnNldHVwTmF0aXZlQnV0dG9uQmVoYXZpb3IoKX1zZXRCdXR0b25UeXBlKCl7IXRoaXMuaG9z'@;
put 'dC50eXBlJiZ0aGlzLmhvc3QuY2xvc2VzdCgiZm9ybSIpJiYodGhpcy5ob3N0LnR5cGU9InN1Ym1pdCIpfXNldHVwTmF0aXZlQnV0dG9uQmVoYXZpb3IoKXt0aGlzLmhvc3QucmVhZG9ubHl8fHRoaXMuaG9zdC5kaXNhYmxlZD8odGhpcy5ob3N0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNr'@;
put 'Iix0aGlzLnRyaWdnZXJOYXRpdmVCdXR0b25CZWhhdmlvckhhbmRsZXIpLHRoaXMuaG9zdC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsdGhpcy5lbXVsYXRlS2V5Qm9hcmRFdmVudEJlaGF2aW9ySGFuZGxlcikpOih0aGlzLmhvc3QuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMu'@;
put 'dHJpZ2dlck5hdGl2ZUJ1dHRvbkJlaGF2aW9ySGFuZGxlciksdGhpcy5ob3N0LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIix0aGlzLmVtdWxhdGVLZXlCb2FyZEV2ZW50QmVoYXZpb3JIYW5kbGVyKSl9ZW11bGF0ZUtleUJvYXJkRXZlbnRCZWhhdmlvcihjKXshZnVuY3Rpb24gZkRlKGwsYyxh'@;
put 'KXtsLmZpbHRlcihmPT5wVShjLGYpKS5sZW5ndGg+MCYmYSgpfShbImVudGVyIiwic3BhY2UiXSxjLCgpPT57InN1Ym1pdCI9PT10aGlzLmhvc3QudHlwZT90aGlzLnRyaWdnZXJOYXRpdmVCdXR0b25CZWhhdmlvcihjKTp0aGlzLmhvc3QuY2xpY2soKSxqbGUoYyl9KX10cmlnZ2VyTmF0aXZl'@;
put 'QnV0dG9uQmVoYXZpb3IoYyl7aWYodGhpcy5ob3N0LmRpc2FibGVkKWpsZShjKTtlbHNlIGlmKCFjLmRlZmF1bHRQcmV2ZW50ZWQpe2NvbnN0IGE9ZnVuY3Rpb24gbURlKGwsYyxhKXtjb25zdCBmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2MuYXBwZW5kQ2hpbGQoZiksTGxlKGws'@;
put 'Yyx7cmVuZGVyQmVmb3JlOmYsLi4uYX0pO2NvbnN0IGQ9Zi5wcmV2aW91c1NpYmxpbmc7cmV0dXJuIGYucmVtb3ZlKCksZH0obFVgPGJ1dHRvbiBhcmlhLWhpZGRlbj0idHJ1ZSIgcm9sZT0icHJlc2VudGF0aW9uIiA/ZGlzYWJsZWQ9IiR7dGhpcy5ob3N0LmRpc2FibGVkfSIgdGFiaW5kZXg9'@;
put 'Ii0xIiBzdHlsZT0iZGlzcGxheTpub25lIWltcG9ydGFudCIgdmFsdWU9IiR7ZFUodGhpcy5ob3N0LnZhbHVlKX0iIG5hbWU9IiR7ZFUodGhpcy5ob3N0Lm5hbWUpfSIgdHlwZT0iJHtkVSh0aGlzLmhvc3QudHlwZSl9Ij48L2J1dHRvbj5gLHRoaXMuaG9zdCk7YT8uZGlzcGF0Y2hFdmVudChu'@;
put 'ZXcgTW91c2VFdmVudCgiY2xpY2siLHtyZWxhdGVkVGFyZ2V0OnRoaXMuaG9zdCxjb21wb3NlZDohMH0pKSxhPy5yZW1vdmUoKX19fWNsYXNzIGJEZXtjb25zdHJ1Y3RvcihjKXt0aGlzLmhvc3Q9Yyx0aGlzLmhvc3QuYWRkQ29udHJvbGxlcih0aGlzKX1ob3N0VXBkYXRlZCgpe251bGwhPXRo'@;
put 'aXMuaG9zdC5leHBhbmRlZCYmKHRoaXMuaG9zdC5hcmlhRXhwYW5kZWQ9dGhpcy5ob3N0LmV4cGFuZGVkPyJ0cnVlIjoiZmFsc2UiKSx0aGlzLmhvc3QucmVhZG9ubHkmJih0aGlzLmhvc3QuYXJpYUV4cGFuZGVkPW51bGwpfX1sZXQgTWQ9Y2xhc3MgZXh0ZW5kcyBYdntjb25zdHJ1Y3Rvcigp'@;
put 'e3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fZGlzYWJsZWQ9ITF9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfXNldCBkaXNhYmxlZChsKXtjb25zdCBjPXRoaXMuX2Rpc2FibGVkO3RoaXMuX2Rpc2FibGVkPWwsdGhpcy5yZXF1ZXN0VXBkYXRlKCJkaXNhYmxlZCIsYyl9'@;
put 'fTtPdChbTHMoe3R5cGU6Qm9vbGVhbn0pXSxNZC5wcm90b3R5cGUsInByZXNzZWQiLHZvaWQgMCksT3QoW0xzKHt0eXBlOkJvb2xlYW59KV0sTWQucHJvdG90eXBlLCJleHBhbmRlZCIsdm9pZCAwKSxPdChbTHMoe3R5cGU6Qm9vbGVhbn0pXSxNZC5wcm90b3R5cGUsInJlYWRvbmx5Iix2b2lk'@;
put 'IDApLE90KFtMcyh7dHlwZTpTdHJpbmd9KV0sTWQucHJvdG90eXBlLCJ0eXBlIix2b2lkIDApLE90KFtMcyh7dHlwZTpTdHJpbmd9KV0sTWQucHJvdG90eXBlLCJuYW1lIix2b2lkIDApLE90KFtMcyh7dHlwZTpTdHJpbmd9KV0sTWQucHJvdG90eXBlLCJ2YWx1ZSIsdm9pZCAwKSxPdChbTHMo'@;
put 'e3R5cGU6Qm9vbGVhbn0pXSxNZC5wcm90b3R5cGUsImRpc2FibGVkIixudWxsKSxPdChbTHMoe3R5cGU6U3RyaW5nfSldLE1kLnByb3RvdHlwZSwicG9wdXAiLHZvaWQgMCksTWQ9T3QoW2Z1bmN0aW9uIHFPZSgpe3JldHVybiBsPT5sLmFkZEluaXRpYWxpemVyKGM9Pm5ldyBYT2UoYykpfSgp'@;
put 'LGZ1bmN0aW9uIGlEZSgpe3JldHVybiBsPT5sLmFkZEluaXRpYWxpemVyKGM9Pm5ldyBvRGUoYykpfSgpLGZ1bmN0aW9uIG5EZSgpe3JldHVybiBsPT5sLmFkZEluaXRpYWxpemVyKGM9Pm5ldyByRGUoYykpfSgpLGZ1bmN0aW9uIHlEZSgpe3JldHVybiBsPT5sLmFkZEluaXRpYWxpemVyKGM9'@;
put 'Pm5ldyBiRGUoYykpfSgpLGZ1bmN0aW9uIGVEZSgpe3JldHVybiBsPT5sLmFkZEluaXRpYWxpemVyKGM9Pm5ldyB0RGUoYykpfSgpLGZ1bmN0aW9uIEpPZSgpe3JldHVybiBsPT5sLmFkZEluaXRpYWxpemVyKGM9Pm5ldyBRT2UoYykpfSgpLGZ1bmN0aW9uIGdEZSgpe3JldHVybiBsPT5sLmFk'@;
put 'ZEluaXRpYWxpemVyKGM9Pm5ldyB2RGUoYykpfSgpLGZ1bmN0aW9uIGFEZSgpe3JldHVybiBsPT5sLmFkZEluaXRpYWxpemVyKGM9Pm5ldyBsRGUoYykpfSgpXSxNZCk7Y29uc3QgS0Q9e2FjdGlvbnM6e3NvcnQ6IlNvcnQiLGV4cGFuZDoiRXhwYW5kIixjbG9zZToiQ2xvc2UiLHJlc2l6ZToi'@;
put 'UmVzaXplIixmaWx0ZXI6IkZpbHRlciJ9LGFsZXJ0OntjbG9zZUJ1dHRvbkFyaWFMYWJlbDoiQ2xvc2UiLGxvYWRpbmc6IkxvYWRpbmciLGluZm86IkluZm8iLHN1Y2Nlc3M6IlN1Y2Nlc3MiLHdhcm5pbmc6Ildhcm5pbmciLGRhbmdlcjoiRXJyb3IifSxkcm9wZG93bjp7b3BlbjoiT3BlbiJ9'@;
put 'LGZpbGU6e2Jyb3dzZToiYnJvd3NlIixmaWxlczoiZmlsZXMiLHJlbW92ZUZpbGU6InJlbW92ZSBmaWxlIn0sbW9kYWw6e2Nsb3NlQnV0dG9uQXJpYUxhYmVsOiJDbG9zZSBtb2RhbCIsY29udGVudFN0YXJ0OiJCZWdpbm5pbmcgb2YgbW9kYWwgY29udGVudCIsY29udGVudEJveDoiU2Nyb2xs'@;
put 'YWJsZSBtb2RhbCBib2R5Iixjb250ZW50RW5kOiJFbmQgb2YgbW9kYWwgY29udGVudCJ9LG5hdmlnYXRpb246e25hdmlnYXRpb25FbGVtZW50OiJuYXZpZ2F0aW9uIixuYXZpZ2F0aW9uTGFiZWw6Im5hdmlnYXRpb24gbWVudSIsbmF2aWdhdGlvbkFicmlkZ2VkVGV4dDoiVmlldyBhYnJpZGdl'@;
put 'ZCBtZW51IixuYXZpZ2F0aW9uVW5hYnJpZGdlZFRleHQ6IlZpZXcgdW5hYnJpZGdlZCBtZW51In0sb3ZlcmxheTp7Y2xvc2VCdXR0b25BcmlhTGFiZWw6IkNsb3NlIGRpYWxvZyIsY29udGVudFN0YXJ0OiJCZWdpbm5pbmcgb2YgZGlhbG9nIGNvbnRlbnQiLGNvbnRlbnRFbmQ6IkVuZCBvZiBk'@;
put 'aWFsb2cgY29udGVudCJ9LHBvcHVwOntjbG9zZUJ1dHRvbkFyaWFMYWJlbDoiQ2xvc2UgcG9wdXAiLGNvbnRlbnRTdGFydDoiQmVnaW5uaW5nIG9mIHBvcHVwIGNvbnRlbnQiLGNvbnRlbnRFbmQ6IkVuZCBvZiBwb3B1cCBjb250ZW50In0scGFzc3dvcmQ6e3Nob3dCdXR0b25BcmlhTGFiZWw6'@;
put 'IlNob3cgcGFzc3dvcmQiLGhpZGVCdXR0b25BcmlhTGFiZWw6IkhpZGUgcGFzc3dvcmQifSxwcm9ncmVzczp7bG9hZGluZzoiTG9hZGluZyIsbG9vcGluZzoiTG9hZGluZyJ9LHRyZWV2aWV3Ontsb2FkaW5nOiJMb2FkaW5nIn0sZ3JpZDp7cmVzaXplQ29sdW1uOiJSZXNpemUgQ29sdW1uIixj'@;
put 'bG9zZURldGFpbHM6IkNsb3NlIERldGFpbHMiLG5vRGF0YToiTm8gUmVzdWx0cyBGb3VuZCIscm93RGV0YWlsU3RhcnQ6IlN0YXJ0IG9mIHJvdyBkZXRhaWxzIixyb3dEZXRhaWxFbmQ6IkVuZCBvZiByb3cgZGV0YWlscyIsZm9vdGVyRW5kOiJFbmQgb2YgZ3JpZCByb3dzIixhY3Rpb246IkFj'@;
put 'dGlvbiIsZHJvcFRhcmdldDoiRHJvcCBJdGVtIixwYWdpbmF0aW9uOntsYWJlbDoiZ3JpZCBwYWdpbmF0aW9uIixmaXJzdFBhZ2U6ImdvIHRvIGZpcnN0IHBhZ2UiLHByZXZpb3VzUGFnZToiZ28gdG8gcHJldmlvdXMgcGFnZSIsbmV4dFBhZ2U6ImdvIHRvIG5leHQgcGFnZSIsbGFzdFBhZ2U6'@;
put 'ImdvIHRvIGxhc3QgcGFnZSIscGFnZVNpemU6InJvd3MgcGVyIHBhZ2UiLHBhZ2U6InBhZ2UifX19O2NsYXNzIHpne3N0YXRpYyBnZXQga2V5cygpe3JldHVybiAwPT09T2JqZWN0LmtleXMobnUuc3RhdGUuaTE4blJlZ2lzdHJ5KS5sZW5ndGgmJihudS5zdGF0ZS5pMThuUmVnaXN0cnk9SWco'@;
put 'S0QsbnUuc3RhdGUuaTE4blJlZ2lzdHJ5KSksSWcoS0QsbnUuc3RhdGUuaTE4blJlZ2lzdHJ5KX1zdGF0aWMgZmluZEtleShjKXtjb25zdCBhPXpnLmtleXM7cmV0dXJuIE9iamVjdC5rZXlzKGEpLmZpbmQoZj0+RG9lKGFbZl0sYykpfXN0YXRpYyBnZXQoYyl7cmV0dXJuIGMmJnpnLmtleXNb'@;
put 'Y118fHt9fXN0YXRpYyByZXNldCgpe251LnN0YXRlLmkxOG5SZWdpc3RyeT1JZyh7fSxLRCl9c3RhdGljIGh5ZHJhdGUoYyxhKXtyZXR1cm4gSlNPTi5wYXJzZShmdW5jdGlvbiBEQWUobCxjLGEpe3JldHVybiBsLnJlcGxhY2UoL1wkXHsuKz9cfS9nLGY9PmZ1bmN0aW9uIGJBZShsLGMsYT1g'@;
put 'XCR7JHtsfX1gKXtyZXR1cm4gbC5zcGxpdCgiLiIpLnJlZHVjZSgoZixkKT0+e3RyeXtjb25zdCBoPWZbZF07c3dpdGNoKCEwKXtjYXNlIG51bGw9PT1oOmNhc2UhMT09PWg6Y2FzZSIiPT09aDpjYXNlIDA9PT1oOnJldHVybiBoO2RlZmF1bHQ6cmV0dXJuIGh8fGF9fWNhdGNoe3JldHVybiBh'@;
put 'fX0sYyl9KGYuc3Vic3RyKDIsZi5sZW5ndGgtMykudHJpbSgpLGMsYSkpfShKU09OLnN0cmluZ2lmeShjKSxhKSl9c3RhdGljIGxvY2FsaXplKGMpe251LnN0YXRlLmkxOG5SZWdpc3RyeT1JZyhLRCxudS5zdGF0ZS5pMThuUmVnaXN0cnksYyl9fXZhciBTRGU9UXpgOmhvc3R7LS1pY29uLXdp'@;
put 'ZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNywgY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkpOy0taWNvbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03LCBjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSk7LS13'@;
put 'aWR0aDp2YXIoLS1pY29uLXdpZHRoKTstLWhlaWdodDp2YXIoLS1pY29uLXdpZHRoKTstLWN1cnNvcjpwb2ludGVyOy0tY29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTMwMCwgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tODAwLCAjMmQ0MDQ4KSk7'@;
put 'LS1mb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0zLCBjYWxjKDEzICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSk7LS1iYWNrZ3JvdW5kOnRyYW5zcGFyZW50Oy0tcGFkZGluZzowOy0tb3V0bGluZTp2YXIoLS1jZHMtYWxpYXMtb2Jq'@;
put 'ZWN0LWludGVyYWN0aW9uLW91dGxpbmUsIEhpZ2hsaWdodCBzb2xpZCAycHgpOy0tb3V0bGluZS1vZmZzZXQ6Y2FsYyh2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUtb2Zmc2V0LCAxcHgpICogLTEpO3BvaW50ZXItZXZlbnRzOm5vbmU7ZGlzcGxheTppbmxpbmUt'@;
put 'YmxvY2s7b3V0bGluZTowIWltcG9ydGFudH06aG9zdChbcm9sZT1idXR0b25dKXtwb2ludGVyLWV2ZW50czppbml0aWFsO2N1cnNvcjp2YXIoLS1jdXJzb3IpIWltcG9ydGFudH06aG9zdChbc3RhdHVzPWFjdGl2ZV0pey0tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvLCB2YXIo'@;
put 'LS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzAwLCAjMDA3OWFkKSl9OjpzbG90dGVkKFtzaGFwZT1jbG9zZV0pLDo6c2xvdHRlZChbc2hhcGU9aW5mby1jaXJjbGVdKSw6OnNsb3R0ZWQoW3NoYXBlPXRpbWVzXSksOmhvc3QoW3NoYXBlPWNsb3NlXSksOmhvc3QoW3NoYXBlPWluZm8tY2lyY2xl'@;
put 'XSl7LS1pY29uLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCwgY2FsYygxOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkpOy0taWNvbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04LCBjYWxjKDE4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFz'@;
put 'ZSwgMjApKSl9Omhvc3QoOmhvdmVyKXstLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXIsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMDAsICMxYjJiMzIpKX06aG9zdCg6YWN0aXZlKXstLWNvbG9yOnZhcigtLWNkcy1h'@;
put 'bGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDAwLCAjMWIyYjMyKSl9Omhvc3QoOmFjdGl2ZSkgLnByaXZhdGUtaG9zdHt0cmFuc2Zvcm06dHJhbnNsYXRlWShjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3Bh'@;
put 'Y2UtMSxjYWxjKDEgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpLyAyKSl9Omhvc3QoW2Rpc2FibGVkXSl7LS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlv'@;
put 'bi0zMDAsICNhZWI4YmMpKX0ucHJpdmF0ZS1ob3N0ey0taWNvbi1jb2xvcjp2YXIoLS1jb2xvcik7YmFja2dyb3VuZDp2YXIoLS1iYWNrZ3JvdW5kKTtwYWRkaW5nOnZhcigtLXBhZGRpbmcpO2NvbG9yOnZhcigtLWNvbG9yKTtmb250LXNpemU6dmFyKC0tZm9udC1zaXplKTtkaXNwbGF5OmZs'@;
put 'ZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7bWluLXdpZHRoOnZhcigtLXdpZHRoKTttaW4taGVpZ2h0OnZhcigtLWhlaWdodCl9OjpzbG90dGVkKGNkcy1pY29uKSxjZHMtaWNvbnt3aWR0aDp2YXIoLS1pY29uLXdpZHRoKTtoZWlnaHQ6dmFyKC0taWNvbi1o'@;
put 'ZWlnaHQpO3BvaW50ZXItZXZlbnRzOm5vbmV9OjpzbG90dGVkKGNkcy1pY29uOm5vdChbc3RhdHVzXSkpLGNkcy1pY29uey0tY29sb3I6dmFyKC0taWNvbi1jb2xvcil9Omhvc3QoW2Rpc2FibGVkXTphY3RpdmUpe3BvaW50ZXItZXZlbnRzOm5vbmUhaW1wb3J0YW50fS5wcml2YXRlLWhvc3Q6'@;
put 'OmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7bGVmdDpjYWxjKC0xKnZhcigtLXdpZHRoKSAtIDEpO3RvcDpjYWxjKC0xKnZhcigtLWhlaWdodCkgLSAxKTt3aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXRvdWNoLXRhcmdldCxjYWxjKDM2ICogMXJl'@;
put 'bSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtoZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi10b3VjaC10YXJnZXQsY2FsYygzNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSl9Omhvc3QoW2Rpc2FibGVkXSkgLnByaXZhdGUtaG9zdDo6'@;
put 'YWZ0ZXJ7b3V0bGluZTowIWltcG9ydGFudH06aG9zdCg6Zm9jdXMpIC5wcml2YXRlLWhvc3Q6OmFmdGVye291dGxpbmU6dmFyKC0tb3V0bGluZSk7b3V0bGluZS1vZmZzZXQ6dmFyKC0tb3V0bGluZS1vZmZzZXQpfUBtZWRpYSAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOjApezpo'@;
put 'b3N0KDpmb2N1cykgLnByaXZhdGUtaG9zdDo6YWZ0ZXJ7b3V0bGluZS1jb2xvcjotd2Via2l0LWZvY3VzLXJpbmctY29sb3J9fWA7Y2xhc3MgVWcgZXh0ZW5kcyBNZHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pMThuPXpnLmtleXMuYWN0aW9ucyx0aGlzLmNkc0J1'@;
put 'dHRvbkFjdGlvbj0hMH1yZW5kZXIoKXtyZXR1cm4gbFVgPGRpdiBjbGFzcz0icHJpdmF0ZS1ob3N0Ij48c2xvdD48Y2RzLWljb24gLnNoYXBlPSIke3RoaXMuc2hhcGU/dGhpcy5zaGFwZToiZWxsaXBzaXMtdmVydGljYWwifSIgLnNpemU9IiR7dGhpcy5pY29uU2l6ZX0iID9zb2xpZD0iJHt0'@;
put 'aGlzLnByZXNzZWR8fHRoaXMuZXhwYW5kZWR9IiBpbm5lci1vZmZzZXQ9IiR7MX0iPjwvY2RzLWljb24+PC9zbG90PjwvZGl2PmB9dXBkYXRlZChjKXtzdXBlci51cGRhdGVkKGMpLHRoaXMuYXJpYUxhYmVsfHx0aGlzLnJlYWRvbmx5fHxMZy53YXJuKCJBIGFyaWEtbGFiZWwgaXMgcmVxdWly'@;
put 'ZWQgZm9yIGludGVyYWN0aXZlIGNkcy1idXR0b24tYWN0aW9uIHR5cGUiLHRoaXMpLGMuaGFzKCJyZWFkb25seSIpJiYodGhpcy5hcmlhSGlkZGVuPXRoaXMucmVhZG9ubHkmJiF0aGlzLmhhc0F0dHJpYnV0ZSgiYXJpYS1sYWJlbCIpPyJ0cnVlIjpudWxsKX19VWcuc3R5bGVzPVtGbGUsU0Rl'@;
put 'XSxPdChbTHMoe3R5cGU6U3RyaW5nfSldLFVnLnByb3RvdHlwZSwic2hhcGUiLHZvaWQgMCksT3QoW0xzKHt0eXBlOlN0cmluZyxyZWZsZWN0OiEwfSldLFVnLnByb3RvdHlwZSwiYWN0aW9uIix2b2lkIDApLE90KFtMcyh7dHlwZTpTdHJpbmd9KV0sVWcucHJvdG90eXBlLCJpY29uU2l6ZSIs'@;
put 'dm9pZCAwKSxPdChbZnVuY3Rpb24gX0RlKCl7cmV0dXJuKGwsYyk9Pntjb25zdCBhPWwuY29ubmVjdGVkQ2FsbGJhY2ssZj1sLmRpc2Nvbm5lY3RlZENhbGxiYWNrO2wuY29ubmVjdGVkQ2FsbGJhY2s9ZnVuY3Rpb24oKXtsLl9faTE4blN1Yj1udS5zdGF0ZVVwZGF0ZXMuc3Vic2NyaWJlKGg9'@;
put 'PnsiaTE4blJlZ2lzdHJ5Ij09PWgua2V5JiZ0aGlzLnJlcXVlc3RVcGRhdGUoYyl9KSxhJiZhLmFwcGx5KHRoaXMpfSxsLmRpc2Nvbm5lY3RlZENhbGxiYWNrPWZ1bmN0aW9uKCl7bC5fX2kxOG5TdWIudW5zdWJzY3JpYmUoKSxmJiZmLmFwcGx5KHRoaXMpfTtjb25zdCBkPXtnZXQoKXtjb25z'@;
put 'dCBoPUlnKHpnLmtleXNbdGhpcy5fX2kxOG5LZXldLHRoaXMuX19pMThufHx7fSk7cmV0dXJuIHpnLmh5ZHJhdGUoaCx0aGlzKX0sc2V0KGgpe2NvbnN0IG09ZnVuY3Rpb24gd0RlKGwsYyl7aWYoYzQobCkpe2xldCBhPXt9O2lmKGMuaGFzQXR0cmlidXRlKCJjZHMtaTE4biIpKXtjb25zdCBm'@;
put 'PWMuZ2V0QXR0cmlidXRlKCJjZHMtaTE4biIpKyIiO2lmKGM0KGYpKWE9e307ZWxzZSB0cnl7YT1KU09OLnBhcnNlKGYpfWNhdGNoe0xnLndhcm4oIkNsYXJpdHkgaTE4bjogSW52YWxpZCBKU09OIHBhc3NlZCB0byBjZHMtaTE4biIpLGE9e319fXJldHVybiBhfXJldHVybiBsfShoLHRoaXMp'@;
put 'LF89ZnVuY3Rpb24gQ0RlKGwsYyxhLGYpe3JldHVybiBjNChsKT9Eb2UoYSxmKT97dXBkYXRlOiExfTp7dXBkYXRlOiEwLHZhbHVlczphfTpsPT09Yz97dXBkYXRlOiExLHZhbHVlczp7fX06e3VwZGF0ZTohMCxrZXk6bCx2YWx1ZXM6e319fSh6Zy5maW5kS2V5KG0pfHwiIix0aGlzLl9faTE4'@;
put 'bktleSxtLHRoaXMuX19pMThuKTt2b2lkIDAhPT1fLmtleSYmKHRoaXMuX19pMThuS2V5PV8ua2V5KyIiKSx2b2lkIDAhPT1fLnZhbHVlcyYmKHRoaXMuX19pMThuPXsuLi5fLnZhbHVlc30pLCEwPT09Xy51cGRhdGUmJnRoaXMucmVxdWVzdFVwZGF0ZSgpLHRoaXMucmVxdWVzdFVwZGF0ZShj'@;
put 'KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9O3JldHVybiB2b2lkIDAhPT1jP2Z1bmN0aW9uKGgsbSxfKXtjb25zdCBPPU9iamVjdC5kZWZpbmVQcm9wZXJ0eShtLF8saCk7cmV0dXJuIExzKHt0eXBlOk9iamVjdCxhdHRyaWJ1dGU6ImNkcy1pMThuIn0pKE8sXyl9KGQsbCxjKTpm'@;
put 'dW5jdGlvbihoLG0pe2NvbnN0IF89e2tpbmQ6Im1ldGhvZCIscGxhY2VtZW50OiJwcm90b3R5cGUiLGtleTptLmtleSxkZXNjcmlwdG9yOmh9O3JldHVybiBMcyh7dHlwZTpPYmplY3R9KShfKX0oZCxsKX19KCldLFVnLnByb3RvdHlwZSwiaTE4biIsdm9pZCAwKSxPdChbVmxlKHt0eXBlOkJv'@;
put 'b2xlYW4scmVmbGVjdDohMCxhdHRyaWJ1dGU6ImNkcy1idXR0b24tYWN0aW9uIn0pXSxVZy5wcm90b3R5cGUsImNkc0J1dHRvbkFjdGlvbiIsdm9pZCAwKTtjbGFzcyBVbGUgZXh0ZW5kcyBVZ3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5zaGFwZT0iY2xvc2UifWNv'@;
put 'bm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLmFyaWFMYWJlbD10aGlzLmFyaWFMYWJlbD90aGlzLmFyaWFMYWJlbDp0aGlzLmkxOG4uY2xvc2V9fU90KFtMcyh7dHlwZTpTdHJpbmd9KV0sVWxlLnByb3RvdHlwZSwic2hhcGUiLHZvaWQgMCksb2xlKCJj'@;
put 'ZHMtaW50ZXJuYWwtY2xvc2UtYnV0dG9uIixVbGUpLGphLmFkZEljb25zKFhvZSksamEuYWRkQWxpYXNlcyhbInRpbWVzIixbImNsb3NlIl1dKTtjb25zdCBPbz1bIioiXTtmdW5jdGlvbiBrRGUobCxjKXtpZigxJmwmJihXcigwKSxZZSgxKSxHcigpKSwyJmwpe2NvbnN0IGE9R2UoMyk7U2Uo'@;
put 'MSksYXIoYS5jb21tb25TdHJpbmdzLmtleXMuZGFuZ2VyKX19ZnVuY3Rpb24gRURlKGwsYyl7aWYoMSZsJiYoeWUoMCwiZGl2IiwxNCksdHQoMSxrRGUsMiwxLCJuZy1jb250YWluZXIiLDApLENlKCkpLDImbCl7Y29uc3QgYT1HZSgpLiRpbXBsaWNpdCxmPUdlKCk7U2UoMSksUmUoIm5nSWYi'@;
put 'LGEuc3RhdHVzPT09Zi5BY2NvcmRpb25TdGF0dXMuRXJyb3IpfX1mdW5jdGlvbiB4RGUobCxjKXtpZigxJmwmJihXcigwKSxZZSgxKSxHcigpKSwyJmwpe2NvbnN0IGE9R2UoMik7U2UoMSksYXIoYS5jb21tb25TdHJpbmdzLmtleXMuZGFuZ2VyKX19ZnVuY3Rpb24gQURlKGwsYyl7aWYoMSZs'@;
put 'JiYoV3IoMCksWWUoMSksR3IoKSksMiZsKXtjb25zdCBhPUdlKDIpO1NlKDEpLGFyKGEuY29tbW9uU3RyaW5ncy5rZXlzLnN1Y2Nlc3MpfX1mdW5jdGlvbiBURGUobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJkaXYiLDE1KSxFdCgiQHRvZ2dsZS5kb25lIixmdW5jdGlvbigpe1V0'@;
put 'KGEpO2NvbnN0IGQ9R2UoKS4kaW1wbGljaXQ7cmV0dXJuIFp0KEdlKCkuY29sbGFwc2VQYW5lbE9uQW5pbWF0aW9uRG9uZShkKSl9KSx5ZSgxLCJkaXYiLDE2KSxEcigyLDIpLENlKCkoKX0yJmwmJlJlKCJAdG9nZ2xlIix2b2lkIDApfWZ1bmN0aW9uIE9EZShsLGMpe2lmKDEmbCl7Y29uc3Qg'@;
put 'YT1abigpO1dyKDApLHR0KDEsRURlLDIsMSwiZGl2IiwxKSx5ZSgyLCJkaXYiLDIpKDMsImRpdiIsMykoNCwiYnV0dG9uIiw0LDUpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gVXQoYSksWnQoR2UoKS50b2dnbGVQYW5lbCgpKX0pLHdsKDYsImFzeW5jIikseWUoNywic3BhbiIsNiks'@;
put 'dHQoOCx4RGUsMiwxLCJuZy1jb250YWluZXIiLDApLHR0KDksQURlLDIsMSwibmctY29udGFpbmVyIiwwKSxDZSgpLHllKDEwLCJzcGFuIiw3KSx0bigxMSwiY2RzLWljb24iLDgpKDEyLCJzcGFuIiw5KSgxMywiY2RzLWljb24iLDEwKSgxNCwiY2RzLWljb24iLDExKSxDZSgpLERyKDE1KSxE'@;
put 'cigxNiwxKSxDZSgpKCkseWUoMTcsImRpdiIsMTIpLHR0KDE4LFREZSwzLDEsImRpdiIsMTMpLENlKCkoKSxHcigpfWlmKDImbCl7Y29uc3QgYT1jLiRpbXBsaWNpdCxmPUdlKCk7bGV0IGQ7U2UoMSksUmUoIm5nSWYiLGEuc3RhdHVzIT09Zi5BY2NvcmRpb25TdGF0dXMuSW5hY3RpdmUpLFNl'@;
put 'KDEpLFJlKCJuZ0NsYXNzIixmLmdldFBhbmVsU3RhdGVDbGFzc2VzKGEpKSxTZSgyKSxncigiY2xyLWFjY29yZGlvbi1oZWFkZXItaGFzLWRlc2NyaXB0aW9uIiwobnVsbD09KGQ9SnMoNiwxNixmLmFjY29yZGlvbkRlc2NyaXB0aW9uLmNoYW5nZXMpKT9udWxsOmQubGVuZ3RoKXx8Zi5hY2Nv'@;
put 'cmRpb25EZXNjcmlwdGlvbi5sZW5ndGgpLFJlKCJpZCIsZi5nZXRBY2NvcmRpb25IZWFkZXJJZChhLnRlbXBsYXRlSWQpKSgiZGlzYWJsZWQiLGYuaXNBY2NvcmRpb24mJmEuZGlzYWJsZWQpLFJyKCJhcmlhLWRpc2FibGVkIiwhZi5pc0FjY29yZGlvbiYmYS5kaXNhYmxlZCkoImFyaWEtY29u'@;
put 'dHJvbHMiLGYuZ2V0QWNjb3JkaW9uQ29udGVudElkKGEudGVtcGxhdGVJZCkpKCJhcmlhLWV4cGFuZGVkIixhLm9wZW4pLFNlKDQpLFJlKCJuZ0lmIixhLnN0YXR1cz09PWYuQWNjb3JkaW9uU3RhdHVzLkVycm9yKSxTZSgxKSxSZSgibmdJZiIsYS5zdGF0dXM9PT1mLkFjY29yZGlvblN0YXR1'@;
put 'cy5Db21wbGV0ZSksU2UoOCksUmUoIkBza2lwSW5pdGlhbFJlbmRlciIsdm9pZCAwKSgiaWQiLGYuZ2V0QWNjb3JkaW9uQ29udGVudElkKGEudGVtcGxhdGVJZCkpLFJyKCJhcmlhLWhpZGRlbiIsIWEub3BlbikoImFyaWEtbGFiZWxsZWRieSIsZi5nZXRBY2NvcmRpb25IZWFkZXJJZChhLnRl'@;
put 'bXBsYXRlSWQpKSxTZSgxKSxSZSgibmdJZiIsYS5vcGVuKX19Y29uc3QgWmxlPVtbWyJjbHItYWNjb3JkaW9uLXRpdGxlIl0sWyJjbHItc3RlcC10aXRsZSJdXSxbWyJjbHItYWNjb3JkaW9uLWRlc2NyaXB0aW9uIl0sWyJjbHItc3RlcC1kZXNjcmlwdGlvbiJdXSwiKiJdLFlsZT1bImNsci1h'@;
put 'Y2NvcmRpb24tdGl0bGUsIGNsci1zdGVwLXRpdGxlIiwiY2xyLWFjY29yZGlvbi1kZXNjcmlwdGlvbiwgY2xyLXN0ZXAtZGVzY3JpcHRpb24iLCIqIl0sSkRlPVsiY2xyTG9hZGluZyIsIiJdO2Z1bmN0aW9uIFFEZShsLGMpezEmbCYmKHllKDAsInNwYW4iKSx0bigxLCJzcGFuIiwyKSxDZSgp'@;
put 'KSwyJmwmJihTZSgxKSxSZSgiQHNwaW5uZXIiLHZvaWQgMCkpfWZ1bmN0aW9uIGVJZShsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsInNwYW4iKSgxLCJzcGFuIiwzKSxFdCgiQHZhbGlkYXRlZC5kb25lIixmdW5jdGlvbigpe1V0KGEpO2NvbnN0IGQ9R2UoKTtyZXR1cm4gWnQoZC5s'@;
put 'b2FkaW5nU3RhdGVDaGFuZ2UoZC5idXR0b25TdGF0ZS5ERUZBVUxUKSl9KSxDZSgpKCl9MiZsJiYoU2UoMSksUmUoIkB2YWxpZGF0ZWQiLHZvaWQgMCkpfWZ1bmN0aW9uIHRJZShsLGMpezEmbCYmKHllKDAsInNwYW4iKSxEcigxKSxDZSgpKSwyJmwmJlJlKCJAZGVmYXVsdEJ1dHRvbiIsdm9p'@;
put 'ZCAwKX1mdW5jdGlvbiBuSWUobCxjKXsxJmwmJnRuKDAsImxhYmVsIil9Y29uc3QgckllPVtbWyIiLCJjbHJDaGVja2JveCIsIiJdLFsiIiwiY2xyVG9nZ2xlIiwiIl1dLFtbImxhYmVsIl1dXSxpSWU9WyJbY2xyQ2hlY2tib3hdLFtjbHJUb2dnbGVdIiwibGFiZWwiXTtmdW5jdGlvbiBvSWUo'@;
put 'bCxjKXsxJmwmJnRuKDAsImxhYmVsIil9ZnVuY3Rpb24gYUllKGwsYyl7MSZsJiZEcigwLDIsWyIqbmdJZiIsInNob3dIZWxwZXIiXSl9ZnVuY3Rpb24gbEllKGwsYyl7MSZsJiZ0bigwLCJjZHMtaWNvbiIsNSl9ZnVuY3Rpb24gc0llKGwsYyl7MSZsJiZ0bigwLCJjZHMtaWNvbiIsNil9ZnVu'@;
put 'Y3Rpb24gdUllKGwsYyl7MSZsJiZEcigwLDMsWyIqbmdJZiIsInNob3dJbnZhbGlkIl0pfWZ1bmN0aW9uIGNJZShsLGMpezEmbCYmRHIoMCw0LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9Y29uc3QgZkllPVtbWyJsYWJlbCJdXSxbWyJjbHItY2hlY2tib3gtd3JhcHBlciJdLFsiY2xyLXRvZ2ds'@;
put 'ZS13cmFwcGVyIl1dLFtbImNsci1jb250cm9sLWhlbHBlciJdXSxbWyJjbHItY29udHJvbC1lcnJvciJdXSxbWyJjbHItY29udHJvbC1zdWNjZXNzIl1dXSxkSWU9WyJsYWJlbCIsImNsci1jaGVja2JveC13cmFwcGVyLGNsci10b2dnbGUtd3JhcHBlciIsImNsci1jb250cm9sLWhlbHBlciIs'@;
put 'ImNsci1jb250cm9sLWVycm9yIiwiY2xyLWNvbnRyb2wtc3VjY2VzcyJdLGhJZT1bImNscktleUZvY3VzIiwiIl07ZnVuY3Rpb24geUllKGwsYyl7MSZsJiZ0bigwLCJsYWJlbCIpfWZ1bmN0aW9uIGJJZShsLGMpezEmbCYmdG4oMCwiY2RzLWljb24iLDUpfWZ1bmN0aW9uIF9JZShsLGMpezEm'@;
put 'bCYmdG4oMCwiY2RzLWljb24iLDYpfWZ1bmN0aW9uIHdJZShsLGMpezEmbCYmRHIoMCwyLFsiKm5nSWYiLCJzaG93SGVscGVyIl0pfWZ1bmN0aW9uIENJZShsLGMpezEmbCYmRHIoMCwzLFsiKm5nSWYiLCJzaG93SW52YWxpZCJdKX1mdW5jdGlvbiBTSWUobCxjKXsxJmwmJkRyKDAsNCxbIipu'@;
put 'Z0lmIiwic2hvd1ZhbGlkIl0pfWNvbnN0IE1JZT1bW1sibGFiZWwiXV0sW1siIiwiY2xySW5wdXQiLCIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLGtJZT1bImxhYmVsIiwiW2NscklucHV0XSIs'@;
put 'ImNsci1jb250cm9sLWhlbHBlciIsImNsci1jb250cm9sLWVycm9yIiwiY2xyLWNvbnRyb2wtc3VjY2VzcyJdO2Z1bmN0aW9uIEVJZShsLGMpe2lmKDEmbCYmKHllKDAsInRoIiw0KSxZZSgxKSxDZSgpKSwyJmwpe2NvbnN0IGE9Yy4kaW1wbGljaXQ7UnIoImFyaWEtbGFiZWwiLGEuZGF5KSxT'@;
put 'ZSgxKSx3cigiICIsYS5uYXJyb3csIiAiKX19ZnVuY3Rpb24geEllKGwsYyl7aWYoMSZsJiYoeWUoMCwidGQiLDcpLHRuKDEsImNsci1kYXkiLDgpLENlKCkpLDImbCl7Y29uc3QgYT1jLiRpbXBsaWNpdDtTZSgxKSxSZSgiY2xyRGF5VmlldyIsYSl9fWZ1bmN0aW9uIEFJZShsLGMpe2lmKDEm'@;
put 'bCYmKHllKDAsInRyIiw1KSx0dCgxLHhJZSwyLDEsInRkIiw2KSxDZSgpKSwyJmwpe2NvbnN0IGE9Yy4kaW1wbGljaXQ7U2UoMSksUmUoIm5nRm9yT2YiLGEpfX1mdW5jdGlvbiBUSWUobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJidXR0b24iLDEpLEV0KCJjbGljayIsZnVuY3Rp'@;
put 'b24oKXtjb25zdCBoPVV0KGEpLmluZGV4O3JldHVybiBadChHZSgpLmNoYW5nZU1vbnRoKGgpKX0pLFllKDEpLENlKCl9aWYoMiZsKXtjb25zdCBhPWMuJGltcGxpY2l0LGY9Yy5pbmRleCxkPUdlKCk7Z3IoImlzLXNlbGVjdGVkIixmPT09ZC5jYWxlbmRhck1vbnRoSW5kZXgpLFJyKCJ0YWJp'@;
put 'bmRleCIsZC5nZXRUYWJJbmRleChmKSksU2UoMSksd3IoIiAiLGEsIiAiKX19ZnVuY3Rpb24gT0llKGwsYyl7aWYoMSZsKXtjb25zdCBhPVpuKCk7eWUoMCwiYnV0dG9uIiw3KSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD1VdChhKS4kaW1wbGljaXQ7cmV0dXJuIFp0KEdlKCkuY2hh'@;
put 'bmdlWWVhcihoKSl9KSxZZSgxKSxDZSgpfWlmKDImbCl7Y29uc3QgYT1jLiRpbXBsaWNpdCxmPUdlKCk7Z3IoImlzLXNlbGVjdGVkIixhPT09Zi5jYWxlbmRhclllYXIpLFJyKCJ0YWJpbmRleCIsZi5nZXRUYWJJbmRleChhKSksU2UoMSksd3IoIiAiLGEsIiAiKX19ZnVuY3Rpb24gREllKGws'@;
put 'Yyl7MSZsJiZ0bigwLCJjbHItbW9udGhwaWNrZXIiKX1mdW5jdGlvbiBJSWUobCxjKXsxJmwmJnRuKDAsImNsci15ZWFycGlja2VyIil9ZnVuY3Rpb24gUkllKGwsYyl7MSZsJiZ0bigwLCJjbHItZGF5cGlja2VyIil9Y29uc3QgTEllPVsiYWN0aW9uQnV0dG9uIl07ZnVuY3Rpb24gUEllKGws'@;
put 'Yyl7MSZsJiZ0bigwLCJsYWJlbCIpfWZ1bmN0aW9uIEZJZShsLGMpezEmbCYmKHllKDAsImJ1dHRvbiIsOCw5KSx0bigyLCJjZHMtaWNvbiIsMTApLENlKCkpLDImbCYmUmUoImRpc2FibGVkIixHZSgpLmlzSW5wdXREYXRlRGlzYWJsZWQpfWZ1bmN0aW9uIEhJZShsLGMpezEmbCYmdG4oMCwi'@;
put 'Y2xyLWRhdGVwaWNrZXItdmlldy1tYW5hZ2VyIiwxMSl9ZnVuY3Rpb24gTkllKGwsYyl7MSZsJiZ0bigwLCJjZHMtaWNvbiIsMTIpfWZ1bmN0aW9uIFZJZShsLGMpezEmbCYmdG4oMCwiY2RzLWljb24iLDEzKX1mdW5jdGlvbiBCSWUobCxjKXsxJmwmJkRyKDAsMixbIipuZ0lmIiwic2hvd0hl'@;
put 'bHBlciJdKX1mdW5jdGlvbiBqSWUobCxjKXsxJmwmJkRyKDAsMyxbIipuZ0lmIiwic2hvd0ludmFsaWQiXSl9ZnVuY3Rpb24gekllKGwsYyl7MSZsJiZEcigwLDQsWyIqbmdJZiIsInNob3dWYWxpZCJdKX1jb25zdCBVSWU9W1tbImxhYmVsIl1dLFtbIiIsImNsckRhdGUiLCIiXV0sW1siY2xy'@;
put 'LWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLFpJZT1bImxhYmVsIiwiW2NsckRhdGVdIiwiY2xyLWNvbnRyb2wtaGVscGVyIiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl07ZnVuY3Rp'@;
put 'b24gWUllKGwsYyl7MSZsJiZ0bigwLCJsYWJlbCIpfWNvbnN0IFdJZT1bW1siIiwiY2xyUmFkaW8iLCIiXV0sW1sibGFiZWwiXV1dLEdJZT1bIltjbHJSYWRpb10iLCJsYWJlbCJdO2Z1bmN0aW9uICRJZShsLGMpezEmbCYmdG4oMCwibGFiZWwiKX1mdW5jdGlvbiBLSWUobCxjKXsxJmwmJkRy'@;
put 'KDAsMixbIipuZ0lmIiwic2hvd0hlbHBlciJdKX1mdW5jdGlvbiBxSWUobCxjKXsxJmwmJnRuKDAsImNkcy1pY29uIiw1KX1mdW5jdGlvbiBYSWUobCxjKXsxJmwmJnRuKDAsImNkcy1pY29uIiw2KX1mdW5jdGlvbiBKSWUobCxjKXsxJmwmJkRyKDAsMyxbIipuZ0lmIiwic2hvd0ludmFsaWQi'@;
put 'XSl9ZnVuY3Rpb24gUUllKGwsYyl7MSZsJiZEcigwLDQsWyIqbmdJZiIsInNob3dWYWxpZCJdKX1jb25zdCBlUmU9W1tbImxhYmVsIl1dLFtbImNsci1yYWRpby13cmFwcGVyIl1dLFtbImNsci1jb250cm9sLWhlbHBlciJdXSxbWyJjbHItY29udHJvbC1lcnJvciJdXSxbWyJjbHItY29udHJv'@;
put 'bC1zdWNjZXNzIl1dXSx0UmU9WyJsYWJlbCIsImNsci1yYWRpby13cmFwcGVyIiwiY2xyLWNvbnRyb2wtaGVscGVyIiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl07ZnVuY3Rpb24gblJlKGwsYyl7MSZsJiZ0bigwLCJsYWJlbCIpfWZ1bmN0aW9uIHJSZShsLGMp'@;
put 'ezEmbCYmdG4oMCwiY2RzLWljb24iLDUpfWZ1bmN0aW9uIGlSZShsLGMpezEmbCYmdG4oMCwiY2RzLWljb24iLDYpfWZ1bmN0aW9uIG9SZShsLGMpezEmbCYmRHIoMCwyLFsiKm5nSWYiLCJzaG93SGVscGVyIl0pfWZ1bmN0aW9uIGFSZShsLGMpezEmbCYmRHIoMCwzLFsiKm5nSWYiLCJzaG93'@;
put 'SW52YWxpZCJdKX1mdW5jdGlvbiBsUmUobCxjKXsxJmwmJkRyKDAsNCxbIipuZ0lmIiwic2hvd1ZhbGlkIl0pfWNvbnN0IHNSZT1bW1sibGFiZWwiXV0sW1siIiwiY2xyU2VsZWN0IiwiIl1dLFtbImNsci1jb250cm9sLWhlbHBlciJdXSxbWyJjbHItY29udHJvbC1lcnJvciJdXSxbWyJjbHIt'@;
put 'Y29udHJvbC1zdWNjZXNzIl1dXSx1UmU9WyJsYWJlbCIsIltjbHJTZWxlY3RdIiwiY2xyLWNvbnRyb2wtaGVscGVyIiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl07ZnVuY3Rpb24gY1JlKGwsYyl7MSZsJiZ0bigwLCJsYWJlbCIpfWZ1bmN0aW9uIGZSZShsLGMp'@;
put 'ezEmbCYmdG4oMCwiY2RzLWljb24iLDUpfWZ1bmN0aW9uIGRSZShsLGMpezEmbCYmdG4oMCwiY2RzLWljb24iLDYpfWZ1bmN0aW9uIGhSZShsLGMpezEmbCYmRHIoMCwyLFsiKm5nSWYiLCJzaG93SGVscGVyIl0pfWZ1bmN0aW9uIHBSZShsLGMpezEmbCYmRHIoMCwzLFsiKm5nSWYiLCJzaG93'@;
put 'SW52YWxpZCJdKX1mdW5jdGlvbiBtUmUobCxjKXsxJmwmJkRyKDAsNCxbIipuZ0lmIiwic2hvd1ZhbGlkIl0pfWNvbnN0IGdSZT1bW1sibGFiZWwiXV0sW1siIiwiY2xyVGV4dGFyZWEiLCIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNs'@;
put 'ci1jb250cm9sLXN1Y2Nlc3MiXV1dLHZSZT1bImxhYmVsIiwiW2NsclRleHRhcmVhXSIsImNsci1jb250cm9sLWhlbHBlciIsImNsci1jb250cm9sLWVycm9yIiwiY2xyLWNvbnRyb2wtc3VjY2VzcyJdLHlSZT1bImFuY2hvciJdO2Z1bmN0aW9uIGJSZShsLGMpe2lmKDEmbCYmKHllKDAsImRp'@;
put 'diIsNCkoMSwiZGl2Iiw1KSgyLCJidXR0b24iLDYpLHRuKDMsImNkcy1pY29uIiw3KSxDZSgpKCksRHIoNCksQ2UoKSksMiZsKXtjb25zdCBhPUdlKCk7UmUoImlkIixhLnBvcG92ZXJJZCksUnIoImFyaWEtbGFiZWwiLGEuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGFncmlkRmlsdGVyRGlhbG9n'@;
put 'QXJpYUxhYmVsKSxTZSgzKSxScigidGl0bGUiLGEuY29tbW9uU3RyaW5ncy5rZXlzLmNsb3NlKX19Y29uc3QgX1JlPVsiaW5wdXRfbG93Il0sd1JlPVsiaW5wdXQiXSxDUmU9WyJjb2x1bW5Qb3J0YWwiXTtmdW5jdGlvbiBTUmUobCxjKXsxJmwmJkRyKDApfWNvbnN0IE1SZT1bInJlc2l6ZVRy'@;
put 'YWNrZXIiXSxrUmU9WyJjb2x1bW5IYW5kbGUiXTtmdW5jdGlvbiBFUmUobCxjKXsxJmwmJmVzKDApfWZ1bmN0aW9uIHhSZShsLGMpezEmbCYmdG4oMCwiY2RzLWljb24iLDEwKSwyJmwmJlJyKCJkaXJlY3Rpb24iLEdlKDIpLnNvcnREaXJlY3Rpb24pfWZ1bmN0aW9uIEFSZShsLGMpe2lmKDEm'@;
put 'bCl7Y29uc3QgYT1abigpO3llKDAsImJ1dHRvbiIsNyksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBVdChhKSxadChHZSgpLnNvcnQoKSl9KSx0dCgxLEVSZSwxLDAsIm5nLWNvbnRhaW5lciIsOCksdHQoMix4UmUsMSwxLCJjZHMtaWNvbiIsOSksQ2UoKX1pZigyJmwpe2NvbnN0IGE9'@;
put 'R2UoKSxmPVFpKDYpO1NlKDEpLFJlKCJuZ1RlbXBsYXRlT3V0bGV0IixmKSxTZSgxKSxSZSgibmdJZiIsYS5zb3J0RGlyZWN0aW9uKX19ZnVuY3Rpb24gVFJlKGwsYyl7aWYoMSZsKXtjb25zdCBhPVpuKCk7eWUoMCwiY2xyLWRnLXN0cmluZy1maWx0ZXIiLDExKSxFdCgiY2xyRmlsdGVyVmFs'@;
put 'dWVDaGFuZ2UiLGZ1bmN0aW9uKGQpe3JldHVybiBVdChhKSxadChHZSgpLmZpbHRlclZhbHVlPWQpfSksQ2UoKX1pZigyJmwpe2NvbnN0IGE9R2UoKTtSZSgiY2xyRmlsdGVyUGxhY2Vob2xkZXIiLGEuZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXIpKCJjbHJEZ1N0cmluZ0ZpbHRlciIsYS5yZWdp'@;
put 'c3RlcmVkKSgiY2xyRmlsdGVyVmFsdWUiLGEuZmlsdGVyVmFsdWUpfX1mdW5jdGlvbiBPUmUobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJjbHItZGctbnVtZXJpYy1maWx0ZXIiLDEyKSxFdCgiY2xyRmlsdGVyVmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGQpe3JldHVybiBVdChhKSxa'@;
put 'dChHZSgpLmZpbHRlclZhbHVlPWQpfSksQ2UoKX1pZigyJmwpe2NvbnN0IGE9R2UoKTtSZSgiY2xyRmlsdGVyTWF4UGxhY2Vob2xkZXIiLGEuZmlsdGVyTnVtYmVyTWF4UGxhY2Vob2xkZXIpKCJjbHJGaWx0ZXJNaW5QbGFjZWhvbGRlciIsYS5maWx0ZXJOdW1iZXJNaW5QbGFjZWhvbGRlciko'@;
put 'ImNsckRnTnVtZXJpY0ZpbHRlciIsYS5yZWdpc3RlcmVkKSgiY2xyRmlsdGVyVmFsdWUiLGEuZmlsdGVyVmFsdWUpfX1mdW5jdGlvbiBEUmUobCxjKXsxJmwmJkRyKDAsMSl9ZnVuY3Rpb24gSVJlKGwsYyl7MSZsJiZlcygwKX1mdW5jdGlvbiBSUmUobCxjKXtpZigxJmwmJih5ZSgwLCJzcGFu'@;
put 'IiwxMyksdHQoMSxJUmUsMSwwLCJuZy1jb250YWluZXIiLDgpLENlKCkpLDImbCl7R2UoKTtjb25zdCBhPVFpKDYpO1NlKDEpLFJlKCJuZ1RlbXBsYXRlT3V0bGV0IixhKX19ZnVuY3Rpb24gTFJlKGwsYyl7MSZsJiZ0bigwLCJjbHItZGctY29sdW1uLXNlcGFyYXRvciIpfWNvbnN0IFBSZT1b'@;
put 'W1siY2xyLWRnLWZpbHRlciJdLFsiY2xyLWRnLXN0cmluZy1maWx0ZXIiXSxbImNsci1kZy1udW1lcmljLWZpbHRlciJdXSwiKiJdLEZSZT1bImNsci1kZy1maWx0ZXIsIGNsci1kZy1zdHJpbmctZmlsdGVyLCBjbHItZGctbnVtZXJpYy1maWx0ZXIiLCIqIl07ZnVuY3Rpb24gSFJlKGwsYyl7'@;
put 'MSZsJiZ0bigwLCJkaXYiLDQpfWZ1bmN0aW9uIE5SZShsLGMpezEmbCYmRHIoMCwwLFsiKm5nSWYiLCJlbXB0eURhdGFncmlkIl0pfWZ1bmN0aW9uIFZSZShsLGMpe2lmKDEmbCYmKFdyKDApLHllKDEsImJ1dHRvbiIsMSksdG4oMiwiY2RzLWljb24iLDIpLENlKCksR3IoKSksMiZsKXtjb25z'@;
put 'dCBhPUdlKCk7U2UoMiksUnIoInRpdGxlIixhLmNvbW1vblN0cmluZ3Mua2V5cy5pbmZvKX19Y29uc3QgQlJlPVsiY2VsbFBvcnRhbCJdO2Z1bmN0aW9uIGpSZShsLGMpezEmbCYmRHIoMCl9Y29uc3QgelJlPVsicm93UG9ydGFsIl07ZnVuY3Rpb24gVVJlKGwsYyl7MSZsJiZEcigwKX1jb25z'@;
put 'dCBaUmU9WyJkZXRhaWxCdXR0b24iXSxZUmU9WyJzdGlja3lDZWxscyJdLFdSZT1bInNjcm9sbGFibGVDZWxscyJdLEdSZT1bImNhbGN1bGF0ZWRDZWxscyJdO2Z1bmN0aW9uICRSZShsLGMpe31mdW5jdGlvbiBLUmUobCxjKXtpZigxJmwmJih5ZSgwLCJjbHItZXhwYW5kYWJsZS1hbmltYXRp'@;
put 'b24iLDcpLHR0KDEsJFJlLDAsMCwibmctdGVtcGxhdGUiLDgpLENlKCkpLDImbCl7Y29uc3QgYT1HZSgyKSxmPVFpKDYpO1JlKCJjbHJFeHBhbmRUcmlnZ2VyIixhLmV4cGFuZEFuaW1hdGlvblRyaWdnZXIpLFNlKDEpLFJlKCJuZ1RlbXBsYXRlT3V0bGV0IixmKX19ZnVuY3Rpb24gcVJlKGws'@;
put 'Yyl7fWZ1bmN0aW9uIFhSZShsLGMpezEmbCYmdHQoMCxxUmUsMCwwLCJuZy10ZW1wbGF0ZSIsOCksMiZsJiYoR2UoMiksUmUoIm5nVGVtcGxhdGVPdXRsZXQiLFFpKDYpKSl9ZnVuY3Rpb24gSlJlKGwsYyl7aWYoMSZsKXtjb25zdCBhPVpuKCk7eWUoMCwiZGl2Iiw2KSxFdCgibW91c2Vkb3du'@;
put 'IixmdW5jdGlvbihkKXtyZXR1cm4gVXQoYSksWnQoR2UoKS5jbGVhclJhbmdlcyhkKSl9KSgiY2xpY2siLGZ1bmN0aW9uKGQpe1V0KGEpO2NvbnN0IGg9R2UoKTtyZXR1cm4gWnQoaC5zZWxlY3RSb3coIWguc2VsZWN0ZWQsZCkpfSksdHQoMSxLUmUsMiwyLCJjbHItZXhwYW5kYWJsZS1hbmlt'@;
put 'YXRpb24iLDEpLHR0KDIsWFJlLDEsMSxudWxsLDIpLENlKCl9aWYoMiZsKXtjb25zdCBhPUdlKCk7U2UoMSksUmUoIm5nSWYiLGEuZXhwYW5kLmV4cGFuZGFibGUpLFNlKDEpLFJlKCJuZ0lmIiwhYS5leHBhbmQuZXhwYW5kYWJsZSl9fWZ1bmN0aW9uIFFSZShsLGMpe31mdW5jdGlvbiBlTGUo'@;
put 'bCxjKXtpZigxJmwmJih5ZSgwLCJjbHItZXhwYW5kYWJsZS1hbmltYXRpb24iLDcpLHR0KDEsUVJlLDAsMCwibmctdGVtcGxhdGUiLDgpLENlKCkpLDImbCl7Y29uc3QgYT1HZSgpLGY9UWkoNik7UmUoImNsckV4cGFuZFRyaWdnZXIiLGEuZXhwYW5kQW5pbWF0aW9uVHJpZ2dlciksU2UoMSks'@;
put 'UmUoIm5nVGVtcGxhdGVPdXRsZXQiLGYpfX1mdW5jdGlvbiB0TGUobCxjKXt9ZnVuY3Rpb24gbkxlKGwsYyl7MSZsJiZ0dCgwLHRMZSwwLDAsIm5nLXRlbXBsYXRlIiw4KSwyJmwmJihHZSgpLFJlKCJuZ1RlbXBsYXRlT3V0bGV0IixRaSg2KSkpfWZ1bmN0aW9uIHJMZShsLGMpezEmbCYmRHIo'@;
put 'MCl9Y29uc3QgV2xlPWZ1bmN0aW9uKGwpe3JldHVybnsiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCI6bH19O2Z1bmN0aW9uIGlMZShsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImRpdiIsMTkpKDEsImNsci1jaGVja2JveC13cmFwcGVyIikoMiwiaW5wdXQiLDIwKSxFdCgibmdN'@;
put 'b2RlbENoYW5nZSIsZnVuY3Rpb24oZCl7cmV0dXJuIFV0KGEpLFp0KEdlKDIpLnRvZ2dsZShkKSl9KSxDZSgpLHllKDMsImxhYmVsIiwyMSksRXQoImNsaWNrIixmdW5jdGlvbihkKXtyZXR1cm4gVXQoYSksWnQoR2UoMikuY2xlYXJSYW5nZXMoZCkpfSkseWUoNCwic3BhbiIsMjIpLFllKDUp'@;
put 'LENlKCkoKSgpKCl9aWYoMiZsKXtjb25zdCBhPUdlKDIpO1JlKCJuZ0NsYXNzIixfaCg3LFdsZSwhYS5jbHJEZ1NlbGVjdGFibGUpKSxTZSgyKSxSZSgibmdNb2RlbCIsYS5zZWxlY3RlZCkoImlkIixhLmNoZWNrYm94SWQpKCJkaXNhYmxlZCIsIWEuY2xyRGdTZWxlY3RhYmxlfHxudWxsKSxS'@;
put 'cigiYXJpYS1kaXNhYmxlZCIsIWEuY2xyRGdTZWxlY3RhYmxlfHxudWxsKSxTZSgxKSxSZSgiZm9yIixhLmNoZWNrYm94SWQpLFNlKDIpLGFyKGEuY2xyRGdSb3dBcmlhTGFiZWx8fGEuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdCl9fWZ1bmN0aW9uIG9MZShsLGMpe2lmKDEmbCl7Y29uc3Qg'@;
put 'YT1abigpO3llKDAsImRpdiIsMTkpKDEsImNsci1yYWRpby13cmFwcGVyIikoMiwiaW5wdXQiLDIzKSxFdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oZCl7cmV0dXJuIFV0KGEpLFp0KEdlKDIpLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlPWQpfSksQ2UoKSx5ZSgzLCJsYWJlbCIsMjQpKDQs'@;
put 'InNwYW4iLDIyKSxZZSg1KSxDZSgpKCkoKSgpfWlmKDImbCl7Y29uc3QgYT1HZSgyKTtSZSgibmdDbGFzcyIsX2goMTAsV2xlLCFhLmNsckRnU2VsZWN0YWJsZSkpLFNlKDIpLFJlKCJpZCIsYS5yYWRpb0lkKSgibmFtZSIsYS5zZWxlY3Rpb24uaWQrIi1yYWRpbyIpKCJ2YWx1ZSIsYS5pdGVt'@;
put 'KSgibmdNb2RlbCIsYS5zZWxlY3Rpb24uY3VycmVudFNpbmdsZSkoImNoZWNrZWQiLGEuc2VsZWN0aW9uLmN1cnJlbnRTaW5nbGU9PT1hLml0ZW0pKCJkaXNhYmxlZCIsIWEuY2xyRGdTZWxlY3RhYmxlfHxudWxsKSxScigiYXJpYS1kaXNhYmxlZCIsIWEuY2xyRGdTZWxlY3RhYmxlfHxudWxs'@;
put 'KSxTZSgxKSxSZSgiZm9yIixhLnJhZGlvSWQpLFNlKDIpLGFyKGEuY2xyRGdSb3dBcmlhTGFiZWx8fGEuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdCl9fWZ1bmN0aW9uIGFMZShsLGMpezEmbCYmKHllKDAsImRpdiIsMjUpLERyKDEsMiksQ2UoKSl9ZnVuY3Rpb24gbExlKGwsYyl7aWYoMSZs'@;
put 'KXtjb25zdCBhPVpuKCk7eWUoMCwiYnV0dG9uIiwyOSksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBVdChhKSxadChHZSg0KS50b2dnbGVFeHBhbmQoKSl9KSx0bigxLCJjZHMtaWNvbiIsMzApLENlKCl9aWYoMiZsKXtjb25zdCBhPUdlKDQpO1JyKCJhcmlhLWV4cGFuZGVkIixhLmV4'@;
put 'cGFuZC5leHBhbmRlZCkoImFyaWEtbGFiZWwiLGEuZXhwYW5kLmV4cGFuZGVkP2EuY2xyRGdEZXRhaWxDbG9zZUxhYmVsOmEuY2xyRGdEZXRhaWxPcGVuTGFiZWwpKCJhcmlhLWNvbnRyb2xzIixhLmV4cGFuZGFibGVJZCksU2UoMSksUnIoImRpcmVjdGlvbiIsYS5leHBhbmQuZXhwYW5kZWQ/'@;
put 'ImRvd24iOiJyaWdodCIpKCJ0aXRsZSIsYS5leHBhbmQuZXhwYW5kZWQ/YS5jb21tb25TdHJpbmdzLmtleXMuY29sbGFwc2U6YS5jb21tb25TdHJpbmdzLmtleXMuZXhwYW5kKX19ZnVuY3Rpb24gc0xlKGwsYyl7aWYoMSZsJiYoeWUoMCwiY2xyLXNwaW5uZXIiLDMxKSxZZSgxKSxDZSgpKSwy'@;
put 'Jmwpe2NvbnN0IGE9R2UoNCk7U2UoMSksYXIoYS5jb21tb25TdHJpbmdzLmtleXMubG9hZGluZyl9fWZ1bmN0aW9uIHVMZShsLGMpe2lmKDEmbCYmKFdyKDApLHR0KDEsbExlLDIsNSwiYnV0dG9uIiwyNyksdHQoMixzTGUsMiwxLCJjbHItc3Bpbm5lciIsMjgpLEdyKCkpLDImbCl7Y29uc3Qg'@;
put 'YT1HZSgzKTtTZSgxKSxSZSgibmdJZiIsIWEuZXhwYW5kLmxvYWRpbmcpLFNlKDEpLFJlKCJuZ0lmIixhLmV4cGFuZC5sb2FkaW5nKX19ZnVuY3Rpb24gY0xlKGwsYyl7aWYoMSZsJiYoeWUoMCwiZGl2IiwyNiksdHQoMSx1TGUsMywyLCJuZy1jb250YWluZXIiLDIpLENlKCkpLDImbCl7Y29u'@;
put 'c3QgYT1HZSgyKTtTZSgxKSxSZSgibmdJZiIsYS5leHBhbmQuZXhwYW5kYWJsZSl9fWZ1bmN0aW9uIGZMZShsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImRpdiIsMzIpKDEsImJ1dHRvbiIsMzMsMzQpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtVdChhKTtjb25zdCBkPVFpKDIpLGg9'@;
put 'R2UoMik7cmV0dXJuIFp0KGguZGV0YWlsU2VydmljZS50b2dnbGUoaC5pdGVtLGQpKX0pLHRuKDMsImNkcy1pY29uIiwzNSksQ2UoKSgpfWlmKDImbCl7Y29uc3QgYT1HZSgyKTtTZSgxKSxncigiaXMtb3BlbiIsYS5kZXRhaWxTZXJ2aWNlLmlzUm93T3BlbihhLml0ZW0pKSxScigiYXJpYS1s'@;
put 'YWJlbCIsYS5kZXRhaWxTZXJ2aWNlLmlzUm93T3BlbihhLml0ZW0pP2EuY2xyRGdEZXRhaWxDbG9zZUxhYmVsOmEuY2xyRGdEZXRhaWxPcGVuTGFiZWwpKCJhcmlhLWV4cGFuZGVkIixhLmRldGFpbFNlcnZpY2UuaXNPcGVuKSgiYXJpYS1jb250cm9scyIsYS5kZXRhaWxTZXJ2aWNlLmlkKSxT'@;
put 'ZSgyKSxScigiZGlyZWN0aW9uIixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSk/ImxlZnQiOiJyaWdodCIpKCJ0aXRsZSIsYS5kZXRhaWxTZXJ2aWNlLmlzUm93T3BlbihhLml0ZW0pP2EuY29tbW9uU3RyaW5ncy5rZXlzLmNsb3NlOmEuY29tbW9uU3RyaW5ncy5rZXlzLm9wZW4p'@;
put 'fX1mdW5jdGlvbiBkTGUobCxjKXt9ZnVuY3Rpb24gaExlKGwsYyl7MSZsJiZ0dCgwLGRMZSwwLDAsIm5nLXRlbXBsYXRlIiw4KSwyJmwmJihHZSgyKSxSZSgibmdUZW1wbGF0ZU91dGxldCIsUWkoNCkpKX1mdW5jdGlvbiBwTGUobCxjKXt9ZnVuY3Rpb24gbUxlKGwsYyl7MSZsJiZ0dCgwLHBM'@;
put 'ZSwwLDAsIm5nLXRlbXBsYXRlIiw4KSwyJmwmJihHZSgyKSxSZSgibmdUZW1wbGF0ZU91dGxldCIsUWkoNCkpKX1jb25zdCBnTGU9ZnVuY3Rpb24obCl7cmV0dXJueyJpcy1yZXBsYWNlZCI6bH19O2Z1bmN0aW9uIHZMZShsLGMpe2lmKDEmbCYmKHllKDAsImRpdiIsOSkoMSwiZGl2IiwxMCks'@;
put 'V3IoMixudWxsLDExKSx0dCg0LGlMZSw2LDksImRpdiIsMTIpLHR0KDUsb0xlLDYsMTIsImRpdiIsMTIpLHR0KDYsYUxlLDIsMCwiZGl2IiwxMyksdHQoNyxjTGUsMiwxLCJkaXYiLDE0KSx0dCg4LGZMZSw0LDcsImRpdiIsMTUpLEdyKCksQ2UoKSx5ZSg5LCJkaXYiLDE2KSgxMCwiZGl2Iiwx'@;
put 'NyksRHIoMTEsMSksZXMoMTIsbnVsbCwxOCksQ2UoKSx0dCgxNCxoTGUsMSwxLG51bGwsMiksdHQoMTUsbUxlLDEsMSxudWxsLDIpLENlKCkoKSksMiZsKXtjb25zdCBhPUdlKCk7Z3IoImRhdGFncmlkLXJvdy1kZXRhaWwtb3BlbiIsYS5kZXRhaWxTZXJ2aWNlLmlzUm93T3BlbihhLml0ZW0p'@;
put 'KSxSZSgiaWQiLGEuaWQpLFNlKDQpLFJlKCJuZ0lmIixhLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09YS5TRUxFQ1RJT05fVFlQRS5NdWx0aSksU2UoMSksUmUoIm5nSWYiLGEuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1hLlNFTEVDVElPTl9UWVBFLlNpbmdsZSksU2UoMSksUmUoIm5n'@;
put 'SWYiLGEucm93QWN0aW9uU2VydmljZS5oYXNBY3Rpb25hYmxlUm93KSxTZSgxKSxSZSgibmdJZiIsYS5nbG9iYWxFeHBhbmRhYmxlLmhhc0V4cGFuZGFibGVSb3cpLFNlKDEpLFJlKCJuZ0lmIixhLmRldGFpbFNlcnZpY2UuZW5hYmxlZCksU2UoMSksUmUoIm5nQ2xhc3MiLF9oKDExLGdMZSxh'@;
put 'LnJlcGxhY2VkJiZhLmV4cGFuZGVkKSksU2UoNSksUmUoIm5nSWYiLGEucmVwbGFjZWQmJiFhLmV4cGFuZC5sb2FkaW5nKSxTZSgxKSxSZSgibmdJZiIsIWEucmVwbGFjZWQmJiFhLmV4cGFuZC5sb2FkaW5nKX19Y29uc3QgeUxlPVtbWyJjbHItZGctcm93LWRldGFpbCJdXSxbWyJjbHItZGct'@;
put 'Y2VsbCJdXSxbWyJjbHItZGctYWN0aW9uLW92ZXJmbG93Il1dXSxiTGU9WyJjbHItZGctcm93LWRldGFpbCIsImNsci1kZy1jZWxsIiwiY2xyLWRnLWFjdGlvbi1vdmVyZmxvdyJdLF9MZT1bImRhdGFncmlkVGFibGUiXSx3TGU9WyJzY3JvbGxhYmxlQ29sdW1ucyJdLENMZT1bInByb2plY3Rl'@;
put 'ZERpc3BsYXlDb2x1bW5zIl0sU0xlPVsicHJvamVjdGVkQ2FsY3VsYXRpb25Db2x1bW5zIl0sTUxlPVsiZGlzcGxheWVkUm93cyJdLGtMZT1bImNhbGN1bGF0aW9uUm93cyJdO2Z1bmN0aW9uIEVMZShsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImRpdiIsMjQpLEV0KCJrZXlkb3du'@;
put 'LnNwYWNlIixmdW5jdGlvbihkKXtVdChhKTtjb25zdCBoPUdlKCk7cmV0dXJuIGguYWxsU2VsZWN0ZWQ9IWguYWxsU2VsZWN0ZWQsWnQoZC5wcmV2ZW50RGVmYXVsdCgpKX0pLHllKDEsImRpdiIsMjUpKDIsImlucHV0IiwyNiksRXQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGQpe3JldHVy'@;
put 'biBVdChhKSxadChHZSgpLmFsbFNlbGVjdGVkPWQpfSksQ2UoKSx5ZSgzLCJsYWJlbCIsMjcpKDQsInNwYW4iLDI4KSxZZSg1KSxDZSgpKCkoKSx0big2LCJkaXYiLDI5KSxDZSgpfWlmKDImbCl7Y29uc3QgYT1HZSgpO1NlKDIpLFJlKCJpZCIsYS5zZWxlY3RBbGxJZCkoIm5nTW9kZWwiLGEu'@;
put 'YWxsU2VsZWN0ZWQpLFJyKCJhcmlhLWxhYmVsIixhLmNvbW1vblN0cmluZ3Mua2V5cy5zZWxlY3RBbGwpLFNlKDEpLFJlKCJmb3IiLGEuc2VsZWN0QWxsSWQpLFNlKDIpLGFyKGEuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdEFsbCl9fWZ1bmN0aW9uIHhMZShsLGMpezEmbCYmKHllKDAsImRp'@;
put 'diIsMzApLHRuKDEsImRpdiIsMjkpLENlKCkpLDImbCYmUnIoImFyaWEtbGFiZWwiLEdlKCkuY2xyRGdTaW5nbGVTZWxlY3Rpb25BcmlhTGFiZWwpfWZ1bmN0aW9uIEFMZShsLGMpezEmbCYmKHllKDAsImRpdiIsMzEpLHRuKDEsImRpdiIsMjkpLENlKCkpLDImbCYmUnIoImFyaWEtbGFiZWwi'@;
put 'LEdlKCkuY2xyRGdTaW5nbGVBY3Rpb25hYmxlQXJpYUxhYmVsKX1mdW5jdGlvbiBUTGUobCxjKXsxJmwmJih5ZSgwLCJkaXYiLDMyKSx0bigxLCJkaXYiLDI5KSxDZSgpKSwyJmwmJlJyKCJhcmlhLWxhYmVsIixHZSgpLmNsckRldGFpbEV4cGFuZGFibGVBcmlhTGFiZWwpfWZ1bmN0aW9uIE9M'@;
put 'ZShsLGMpezEmbCYmdG4oMCwiY2xyLWRnLXBsYWNlaG9sZGVyIil9ZnVuY3Rpb24gRExlKGwsYyl7MSZsJiYoeWUoMCwiZGl2IiwzMykoMSwiY2xyLXNwaW5uZXIiLDM0KSxZZSgyLCJMb2FkaW5nIiksQ2UoKSgpKX1jb25zdCBJTGU9W1tbImNsci1kZy1hY3Rpb24tYmFyIl1dLFtbImNsci1k'@;
put 'Zy1wbGFjZWhvbGRlciJdXSxbWyJjbHItZGctZm9vdGVyIl1dLFtbIiIsImNscklmRGV0YWlsIiwiIl0sWyJjbHItZGctZGV0YWlsIl1dXSxSTGU9WyJjbHItZGctYWN0aW9uLWJhciIsImNsci1kZy1wbGFjZWhvbGRlciIsImNsci1kZy1mb290ZXIiLCJbY2xySWZEZXRhaWxdLGNsci1kZy1k'@;
put 'ZXRhaWwiXSxQTGU9WyJhbGxTZWxlY3RlZCJdO2Z1bmN0aW9uIEZMZShsLGMpe2lmKDEmbCYmKFdyKDApLHllKDEsImgyIiksWWUoMiksQ2UoKSxHcigpKSwyJmwpe2NvbnN0IGE9R2UoMik7U2UoMiksYXIoYS5jb21tb25TdHJpbmdzLmtleXMuc2hvd0NvbHVtbnMpfX1mdW5jdGlvbiBITGUo'@;
put 'bCxjKXt9ZnVuY3Rpb24gTkxlKGwsYyl7aWYoMSZsKXtjb25zdCBhPVpuKCk7eWUoMCwibGkiKSgxLCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDIsImlucHV0IiwxNCksRXQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGQpe2NvbnN0IG09VXQoYSkuJGltcGxpY2l0O3JldHVybiBadChHZSgy'@;
put 'KS50b2dnbGVDb2x1bW5TdGF0ZShtLCFkKSl9KSxDZSgpLHllKDMsImxhYmVsIiksdHQoNCxITGUsMCwwLCJuZy10ZW1wbGF0ZSIsMTUpLENlKCkoKSgpfWlmKDImbCl7Y29uc3QgYT1jLiRpbXBsaWNpdCxmPUdlKDIpO1NlKDIpLFJlKCJkaXNhYmxlZCIsZi5oYXNPbmx5T25lVmlzaWJsZUNv'@;
put 'bHVtbiYmIWEuaGlkZGVuKSgibmdNb2RlbCIsIWEuaGlkZGVuKSxTZSgyKSxSZSgibmdUZW1wbGF0ZU91dGxldCIsYS50aXRsZVRlbXBsYXRlUmVmKX19ZnVuY3Rpb24gVkxlKGwsYyl7aWYoMSZsKXtjb25zdCBhPVpuKCk7eWUoMCwiY2xyLWRnLWNvbHVtbi10b2dnbGUtYnV0dG9uIiwxNiks'@;
put 'RXQoImNsckFsbFNlbGVjdGVkIixmdW5jdGlvbigpe3JldHVybiBVdChhKSxadChHZSgyKS5hbGxDb2x1bW5zU2VsZWN0ZWQoKSl9KSxZZSgxKSxDZSgpfWlmKDImbCl7Y29uc3QgYT1HZSgyKTtTZSgxKSx3cigiICIsYS5jb21tb25TdHJpbmdzLmtleXMuc2VsZWN0QWxsLCIgIil9fWZ1bmN0'@;
put 'aW9uIEJMZShsLGMpe2lmKDEmbCYmKHllKDAsImRpdiIsMikoMSwiZGl2IiwzKSgyLCJkaXYiLDQsNSksWWUoNCksQ2UoKSx0dCg1LEZMZSwzLDEsIm5nLWNvbnRhaW5lciIsNiksRHIoNikseWUoNywiYnV0dG9uIiw3KSx0big4LCJjZHMtaWNvbiIsOCkseWUoOSwic3BhbiIsOSksWWUoMTAp'@;
put 'LENlKCkoKSgpLHllKDExLCJ1bCIsMTApLHR0KDEyLE5MZSw1LDMsImxpIiwxMSksQ2UoKSx5ZSgxMywiZGl2IiwxMiksRHIoMTQsMSksdHQoMTUsVkxlLDIsMSwiY2xyLWRnLWNvbHVtbi10b2dnbGUtYnV0dG9uIiwxMyksQ2UoKSgpKSwyJmwpe2NvbnN0IGE9R2UoKTtSZSgiaWQiLGEucG9w'@;
put 'b3ZlcklkKSxScigiYXJpYS1sYWJlbCIsYS5jb21tb25TdHJpbmdzLmtleXMuc2hvd0NvbHVtbnNNZW51RGVzY3JpcHRpb24pLFNlKDQpLGFyKGEuY29tbW9uU3RyaW5ncy5rZXlzLmFsbENvbHVtbnNTZWxlY3RlZCksU2UoMSksUmUoIm5nSWYiLCFhLmN1c3RvbVRvZ2dsZVRpdGxlKSxTZSgy'@;
put 'KSxScigiYXJpYS1sYWJlbCIsYS5jb21tb25TdHJpbmdzLmtleXMuY2xvc2UpLFNlKDEpLFJyKCJ0aXRsZSIsYS5jb21tb25TdHJpbmdzLmtleXMuY2xvc2UpLFNlKDIpLGFyKGEuY29tbW9uU3RyaW5ncy5rZXlzLmNsb3NlKSxTZSgyKSxSZSgibmdGb3JPZiIsYS5oaWRlYWJsZUNvbHVtblN0'@;
put 'YXRlcykoIm5nRm9yVHJhY2tCeSIsYS50cmFja0J5Rm4pLFNlKDMpLFJlKCJuZ0lmIiwhYS5jdXN0b21Ub2dnbGVCdXR0b24pfX1jb25zdCBqTGU9W1tbImNsci1kZy1jb2x1bW4tdG9nZ2xlLXRpdGxlIl1dLFtbImNsci1kZy1jb2x1bW4tdG9nZ2xlLWJ1dHRvbiJdXV0sekxlPVsiY2xyLWRn'@;
put 'LWNvbHVtbi10b2dnbGUtdGl0bGUiLCJjbHItZGctY29sdW1uLXRvZ2dsZS1idXR0b24iXTtmdW5jdGlvbiBZTGUobCxjKXtpZigxJmwmJihXcigwKSx5ZSgxLCJkaXYiLDEpKDIsImNsci1jaGVja2JveC13cmFwcGVyIiwyKSx0bigzLCJpbnB1dCIsMykseWUoNCwibGFiZWwiKSxZZSg1KSxD'@;
put 'ZSgpLHllKDYsInNwYW4iLDQpLFllKDcpLENlKCkoKSgpLEdyKCkpLDImbCl7Y29uc3QgYT1HZSgpO1NlKDUpLGFyKGEuc2VsZWN0aW9uLmN1cnJlbnQubGVuZ3RoKSxTZSgyKSxhcihhLmNvbW1vblN0cmluZ3Mua2V5cy5zZWxlY3RlZFJvd3MpfX1mdW5jdGlvbiBXTGUobCxjKXsxJmwmJnRu'@;
put 'KDAsImNsci1kZy1jb2x1bW4tdG9nZ2xlIil9ZnVuY3Rpb24gR0xlKGwsYyl7aWYoMSZsJiYoV3IoMCksRHIoMSwxKSx0dCgyLFdMZSwxLDAsImNsci1kZy1jb2x1bW4tdG9nZ2xlIiwwKSx5ZSgzLCJkaXYiLDUpLERyKDQsMiksQ2UoKSxHcigpKSwyJmwpe2NvbnN0IGE9R2UoKTtTZSgyKSxS'@;
put 'ZSgibmdJZiIsYS5oYXNIaWRlYWJsZUNvbHVtbnMmJiFhLnRvZ2dsZSl9fWNvbnN0ICRMZT1bW1siY2xyLWRnLXBhZ2luYXRpb24iXV0sW1siY2xyLWRnLWNvbHVtbi10b2dnbGUiXV0sIioiXSxLTGU9WyJjbHItZGctcGFnaW5hdGlvbiIsImNsci1kZy1jb2x1bW4tdG9nZ2xlIiwiKiJdO2Z1'@;
put 'bmN0aW9uIHFMZShsLGMpe2lmKDEmbCYmKHllKDAsIm9wdGlvbiIsMyksWWUoMSksQ2UoKSksMiZsKXtjb25zdCBhPWMuJGltcGxpY2l0O1JlKCJuZ1ZhbHVlIixhKSxTZSgxKSxhcihhKX19Y29uc3QgWExlPVsiY3VycmVudFBhZ2VJbnB1dCJdO2Z1bmN0aW9uIEpMZShsLGMpezEmbCYmKHll'@;
put 'KDAsImRpdiIsNCksRHIoMSwxKSxDZSgpKX1mdW5jdGlvbiBRTGUobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJpbnB1dCIsMTcsMTgpLEV0KCJrZXlkb3duLmVudGVyIixmdW5jdGlvbihkKXtyZXR1cm4gVXQoYSksWnQoR2UoMykudXBkYXRlQ3VycmVudFBhZ2UoZCkpfSkoImJs'@;
put 'dXIiLGZ1bmN0aW9uKGQpe3JldHVybiBVdChhKSxadChHZSgzKS51cGRhdGVDdXJyZW50UGFnZShkKSl9KSxDZSgpfWlmKDImbCl7Y29uc3QgYT1HZSgzKTtSZSgic2l6ZSIsYS5wYWdlLmxhc3QudG9TdHJpbmcoKS5sZW5ndGgpKCJ2YWx1ZSIsYS5wYWdlLmN1cnJlbnQpLFJyKCJhcmlhLWxh'@;
put 'YmVsIixhLmNvbW1vblN0cmluZ3Mua2V5cy5jdXJyZW50UGFnZSl9fWZ1bmN0aW9uIGVQZShsLGMpe2lmKDEmbCYmKHllKDAsInNwYW4iKSxZZSgxKSxDZSgpKSwyJmwpe2NvbnN0IGE9R2UoMyk7U2UoMSksYXIoYS5wYWdlLmN1cnJlbnQpfX1mdW5jdGlvbiB0UGUobCxjKXtpZigxJmwpe2Nv'@;
put 'bnN0IGE9Wm4oKTt5ZSgwLCJkaXYiLDUpKDEsImJ1dHRvbiIsNiksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBVdChhKSxadChHZSgyKS5wYWdlLmN1cnJlbnQ9MSl9KSx5ZSgyLCJzcGFuIiw3KSxZZSgzKSxDZSgpLHRuKDQsImNkcy1pY29uIiw4KSxDZSgpLHllKDUsImJ1dHRvbiIs'@;
put 'OSksRXQoImNsaWNrIixmdW5jdGlvbigpe1V0KGEpO2NvbnN0IGQ9R2UoMik7cmV0dXJuIFp0KGQucGFnZS5jdXJyZW50PWQucGFnZS5jdXJyZW50LTEpfSkseWUoNiwic3BhbiIsNyksWWUoNyksQ2UoKSx0big4LCJjZHMtaWNvbiIsMTApLENlKCksdHQoOSxRTGUsMiwzLCJpbnB1dCIsMTEp'@;
put 'LHR0KDEwLGVQZSwyLDEsIm5nLXRlbXBsYXRlIixudWxsLDEyLEt1KSxZZSgxMiwiIFx4YTAvXHhhMCIpLHllKDEzLCJzcGFuIiksWWUoMTQpLENlKCkseWUoMTUsImJ1dHRvbiIsMTMpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtVdChhKTtjb25zdCBkPUdlKDIpO3JldHVybiBadChkLnBhZ2Uu'@;
put 'Y3VycmVudD1kLnBhZ2UuY3VycmVudCsxKX0pLHllKDE2LCJzcGFuIiw3KSxZZSgxNyksQ2UoKSx0bigxOCwiY2RzLWljb24iLDE0KSxDZSgpLHllKDE5LCJidXR0b24iLDE1KSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7VXQoYSk7Y29uc3QgZD1HZSgyKTtyZXR1cm4gWnQoZC5wYWdlLmN1cnJl'@;
put 'bnQ9ZC5wYWdlLmxhc3QpfSkseWUoMjAsInNwYW4iLDcpLFllKDIxKSxDZSgpLHRuKDIyLCJjZHMtaWNvbiIsMTYpLENlKCkoKX1pZigyJmwpe2NvbnN0IGE9UWkoMTEpLGY9R2UoMik7U2UoMSksUmUoImRpc2FibGVkIixmLnBhZ2UuY3VycmVudDw9MSksUnIoImFyaWEtbGFiZWwiLGYuY29t'@;
put 'bW9uU3RyaW5ncy5rZXlzLmZpcnN0UGFnZSksU2UoMiksYXIoZi5jb21tb25TdHJpbmdzLmtleXMuZmlyc3RQYWdlKSxTZSgyKSxSZSgiZGlzYWJsZWQiLGYucGFnZS5jdXJyZW50PD0xKSxScigiYXJpYS1sYWJlbCIsZi5jb21tb25TdHJpbmdzLmtleXMucHJldmlvdXNQYWdlKSxTZSgyKSxh'@;
put 'cihmLmNvbW1vblN0cmluZ3Mua2V5cy5wcmV2aW91c1BhZ2UpLFNlKDIpLFJlKCJuZ0lmIiwhZi5kaXNhYmxlQ3VycmVudFBhZ2VJbnB1dCkoIm5nSWZFbHNlIixhKSxTZSg0KSxScigiYXJpYS1sYWJlbCIsZi5jb21tb25TdHJpbmdzLmtleXMudG90YWxQYWdlcyksU2UoMSksYXIoZi5wYWdl'@;
put 'Lmxhc3QpLFNlKDEpLFJlKCJkaXNhYmxlZCIsZi5wYWdlLmN1cnJlbnQ+PWYucGFnZS5sYXN0KSxScigiYXJpYS1sYWJlbCIsZi5jb21tb25TdHJpbmdzLmtleXMubmV4dFBhZ2UpLFNlKDIpLGFyKGYuY29tbW9uU3RyaW5ncy5rZXlzLm5leHRQYWdlKSxTZSgyKSxSZSgiZGlzYWJsZWQiLGYu'@;
put 'cGFnZS5jdXJyZW50Pj1mLnBhZ2UubGFzdCksUnIoImFyaWEtbGFiZWwiLGYuY29tbW9uU3RyaW5ncy5rZXlzLmxhc3RQYWdlKSxTZSgyKSxhcihmLmNvbW1vblN0cmluZ3Mua2V5cy5sYXN0UGFnZSl9fWZ1bmN0aW9uIG5QZShsLGMpe2lmKDEmbCYmKFdyKDApLHR0KDEsSkxlLDIsMCwiZGl2'@;
put 'IiwxKSx5ZSgyLCJkaXYiLDIpLERyKDMpLENlKCksdHQoNCx0UGUsMjMsMTYsImRpdiIsMyksR3IoKSksMiZsKXtjb25zdCBhPUdlKCk7U2UoMSksUmUoIm5nSWYiLGEuX3BhZ2VTaXplQ29tcG9uZW50KSxTZSgzKSxSZSgibmdJZiIsYS5wYWdlLmxhc3Q+MSl9fWZ1bmN0aW9uIHJQZShsLGMp'@;
put 'e2lmKDEmbCl7Y29uc3QgYT1abigpO1dyKDApLHllKDEsImRpdiIsMTkpLFllKDIpLENlKCkseWUoMywiZGl2Iiw1KSg0LCJidXR0b24iLDkpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtVdChhKTtjb25zdCBkPUdlKCk7cmV0dXJuIFp0KGQucGFnZS5jdXJyZW50PWQucGFnZS5jdXJyZW50LTEp'@;
put 'fSkseWUoNSwic3BhbiIsNyksWWUoNiksQ2UoKSx0big3LCJjZHMtaWNvbiIsMTApLENlKCkseWUoOCwic3BhbiIpLFllKDkpLENlKCkseWUoMTAsImJ1dHRvbiIsMTMpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtVdChhKTtjb25zdCBkPUdlKCk7cmV0dXJuIFp0KGQucGFnZS5jdXJyZW50PWQu'@;
put 'cGFnZS5jdXJyZW50KzEpfSkseWUoMTEsInNwYW4iLDcpLFllKDEyKSxDZSgpLHRuKDEzLCJjZHMtaWNvbiIsMTQpLENlKCkoKSxHcigpfWlmKDImbCl7Y29uc3QgYT1HZSgpO1NlKDIpLE8wKCIgIixhLnBhZ2UuZmlyc3RJdGVtKzEsIi0iLGEucGFnZS5sYXN0SXRlbSsxLCIgLyAiLGEucGFn'@;
put 'ZS50b3RhbEl0ZW1zLCIgIiksU2UoMiksUmUoImRpc2FibGVkIixhLnBhZ2UuY3VycmVudDw9MSksUnIoImFyaWEtbGFiZWwiLGEuY29tbW9uU3RyaW5ncy5rZXlzLnByZXZpb3VzUGFnZSksU2UoMiksYXIoYS5jb21tb25TdHJpbmdzLmtleXMucHJldmlvdXNQYWdlKSxTZSgzKSxhcihhLnBh'@;
put 'Z2UuY3VycmVudCksU2UoMSksUmUoImRpc2FibGVkIixhLnBhZ2UuY3VycmVudD49YS5wYWdlLmxhc3QpLFJyKCJhcmlhLWxhYmVsIixhLmNvbW1vblN0cmluZ3Mua2V5cy5uZXh0UGFnZSksU2UoMiksYXIoYS5jb21tb25TdHJpbmdzLmtleXMubmV4dFBhZ2UpfX1jb25zdCBpUGU9WyIqIixb'@;
put 'WyJjbHItZGctcGFnZS1zaXplIl1dXSxvUGU9WyIqIiwiY2xyLWRnLXBhZ2Utc2l6ZSJdO2Z1bmN0aW9uIGFQZShsLGMpezEmbCYmdG4oMCwiY2RzLWljb24iLDcpLDImbCYmUnIoImRpcmVjdGlvbiIsR2UoKS5jYXJldERpcmVjdGlvbil9ZnVuY3Rpb24gbFBlKGwsYyl7aWYoMSZsJiYoeWUo'@;
put 'MCwic3BhbiIsOCksWWUoMSksQ2UoKSksMiZsKXtjb25zdCBhPUdlKCk7U2UoMSksYXIoYS5jb21tb25TdHJpbmdzLmtleXMuc3RhY2tWaWV3Q2hhbmdlZCl9fWZ1bmN0aW9uIHNQZShsLGMpe2lmKDEmbCYmKHllKDAsImRpdiIsOSksRHIoMSwyKSxDZSgpKSwyJmwpe2NvbnN0IGE9R2UoKTtX'@;
put 'YygiaGVpZ2h0IixhLmV4cGFuZGVkPyJhdXRvIjowKSxScigiaWQiLGEuZ2V0U3RhY2tDaGlsZHJlbklkKCkpKCJhcmlhLWxhYmVsbGVkYnkiLGEubGFiZWxsZWRCeUlkKX19Y29uc3QgdVBlPVtbWyJjbHItc3RhY2stbGFiZWwiXV0sIioiLFtbImNsci1zdGFjay1ibG9jayJdXV0sY1BlPVsi'@;
put 'Y2xyLXN0YWNrLWxhYmVsIiwiKiIsImNsci1zdGFjay1ibG9jayJdLGZQZT1bW1siY2xyLXN0YWNrLWhlYWRlciJdXSwiKiJdLGRQZT1bImNsci1zdGFjay1oZWFkZXIiLCIqIl07ZnVuY3Rpb24gX1BlKGwsYyl7MSZsJiZlcygwKX1mdW5jdGlvbiB3UGUobCxjKXtpZigxJmwmJihXcigwKSx0'@;
put 'dCgxLF9QZSwxLDAsIm5nLWNvbnRhaW5lciIsMiksR3IoKSksMiZsKXtjb25zdCBhPWMuJGltcGxpY2l0LGY9R2UoMik7U2UoMSksUmUoIm5nVGVtcGxhdGVPdXRsZXQiLGYuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbi50ZW1wbGF0ZSkoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixmLmdl'@;
put 'dENvbnRleHQoYSkpfX1mdW5jdGlvbiBDUGUobCxjKXtpZigxJmwmJihXcigwKSx0dCgxLHdQZSwyLDIsIm5nLWNvbnRhaW5lciIsMSksR3IoKSksMiZsKXtjb25zdCBhPUdlKCk7U2UoMSksUmUoIm5nRm9yT2YiLChudWxsPT1hLnBhcmVudD9udWxsOmEucGFyZW50LmNoaWxkcmVuKXx8YS5j'@;
put 'aGlsZHJlbil9fWNvbnN0IFNQZT1bImNvbnRlbnRDb250YWluZXIiXTtmdW5jdGlvbiBNUGUobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJidXR0b24iLDkpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gVXQoYSksWnQoR2UoKS5leHBhbmRTZXJ2aWNlLnRvZ2dsZSgpKX0p'@;
put 'KCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gVXQoYSksWnQoR2UoKS5mb2N1c1RyZWVOb2RlKCkpfSksdG4oMSwiY2RzLWljb24iLDEwKSxDZSgpfWlmKDImbCl7Y29uc3QgYT1HZSgpO1NlKDEpLFJyKCJkaXJlY3Rpb24iLGEuZXhwYW5kU2VydmljZS5leHBhbmRlZD8iZG93biI6InJpZ2h0'@;
put 'Iil9fWZ1bmN0aW9uIGtQZShsLGMpezEmbCYmKHllKDAsImRpdiIsMTEpLHRuKDEsInNwYW4iLDEyKSxDZSgpKX1mdW5jdGlvbiBFUGUobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJkaXYiLDEzKSgxLCJpbnB1dCIsMTQpLEV0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7VXQoYSk7Y29u'@;
put 'c3QgZD1HZSgpO3JldHVybiBadChkLl9tb2RlbC50b2dnbGVTZWxlY3Rpb24oZC5mZWF0dXJlc1NlcnZpY2UuZWFnZXIpKX0pKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gVXQoYSksWnQoR2UoKS5mb2N1c1RyZWVOb2RlKCkpfSksQ2UoKSx0bigyLCJsYWJlbCIsMTUpLENlKCl9aWYoMiZs'@;
put 'KXtjb25zdCBhPUdlKCk7U2UoMSksYmgoImlkIiwiIixhLm5vZGVJZCwiLWNoZWNrIiksUmUoImNoZWNrZWQiLGEuX21vZGVsLnNlbGVjdGVkLnZhbHVlPT09YS5TVEFURVMuU0VMRUNURUQpKCJpbmRldGVybWluYXRlIixhLl9tb2RlbC5zZWxlY3RlZC52YWx1ZT09PWEuU1RBVEVTLklOREVU'@;
put 'RVJNSU5BVEUpLFNlKDEpLGJoKCJmb3IiLCIiLGEubm9kZUlkLCItY2hlY2siKX19ZnVuY3Rpb24geFBlKGwsYyl7MSZsJiYoeWUoMCwic3BhbiIpLFllKDEsIiBzZWxlY3RlZCIpLENlKCkpfWZ1bmN0aW9uIEFQZShsLGMpezEmbCYmKHllKDAsInNwYW4iKSxZZSgxLCIgdW5zZWxlY3RlZCIp'@;
put 'LENlKCkpfWZ1bmN0aW9uIFRQZShsLGMpe2lmKDEmbCYmKHllKDAsImRpdiIsMTYpLHR0KDEseFBlLDIsMCwic3BhbiIsMTcpLHR0KDIsQVBlLDIsMCwic3BhbiIsMTcpLENlKCkpLDImbCl7Y29uc3QgYT1HZSgpO1NlKDEpLFJlKCJuZ0lmIixhLmFyaWFTZWxlY3RlZCksU2UoMSksUmUoIm5n'@;
put 'SWYiLCFhLmFyaWFTZWxlY3RlZCl9fWNvbnN0IE9QZT1bIioiLFtbImNsci10cmVlLW5vZGUiXV0sW1siIiwiY2xySWZFeHBhbmRlZCIsIiJdXV0sRFBlPVsiKiIsImNsci10cmVlLW5vZGUiLCJbY2xySWZFeHBhbmRlZF0iXTtmdW5jdGlvbiBJUGUobCxjKXsxJmwmJnRuKDAsImNsci1yZWN1'@;
put 'cnNpdmUtY2hpbGRyZW4iLDEpLDImbCYmUmUoImNoaWxkcmVuIixHZSgpLmZlYXR1cmVzU2VydmljZS5yZWN1cnNpb24ucm9vdCl9ZnVuY3Rpb24gUlBlKGwsYyl7aWYoMSZsKXtjb25zdCBhPVpuKCk7eWUoMCwiYnV0dG9uIiw0KSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFV0KGEp'@;
put 'LFp0KEdlKDIpLmNsb3NlKCkpfSksdG4oMSwiY2RzLWljb24iLDUpLENlKCl9MiZsJiZScigiYXJpYS1sYWJlbCIsR2UoMikuY2xyQ2xvc2VCdXR0b25BcmlhTGFiZWwpfWZ1bmN0aW9uIExQZShsLGMpe2lmKDEmbCYmKHllKDAsImRpdiIsMSkoMSwiZGl2IiwyKSxEcigyKSxDZSgpLHR0KDMs'@;
put 'UlBlLDIsMSwiYnV0dG9uIiwzKSxDZSgpKSwyJmwpe2NvbnN0IGE9R2UoKTtncigiYWxlcnQtaGlkZGVuIixhLmhpZGRlbikoImFsZXJ0LXNtIixhLmlzU21hbGwpKCJhbGVydC1hcHAtbGV2ZWwiLGEuaXNBcHBMZXZlbCksUmUoIm5nQ2xhc3MiLGEuYWxlcnRDbGFzcyksU2UoMyksUmUoIm5n'@;
put 'SWYiLGEuY2xvc2FibGUpfX1mdW5jdGlvbiBQUGUobCxjKXsxJmwmJnRuKDAsImNsci1hbGVydHMtcGFnZXIiLDEpLDImbCYmUmUoImNsckN1cnJlbnRBbGVydEluZGV4IixHZSgpLmN1cnJlbnRBbGVydEluZGV4KX1jb25zdCBGUGU9W1tbImNsci1hbGVydCJdXV0sSFBlPVsiY2xyLWFsZXJ0'@;
put 'Il07ZnVuY3Rpb24gQlBlKGwsYyl7MSZsJiZEcigwKX1jb25zdCBqUGU9WyJ0YWJDb250ZW50UHJvamVjdGVkUmVmIl07ZnVuY3Rpb24gelBlKGwsYyl7aWYoMSZsJiYoeWUoMCwic2VjdGlvbiIsMSksRHIoMSksQ2UoKSksMiZsKXtjb25zdCBhPUdlKCk7Z3IoImFjdGl2ZSIsYS5hY3RpdmUp'@;
put 'LFJlKCJpZCIsYS50YWJDb250ZW50SWQpKCJoaWRkZW4iLCFhLmFjdGl2ZSksUnIoImFyaWEtbGFiZWxsZWRieSIsYS5hcmlhTGFiZWxsZWRCeSkoImFyaWEtaGlkZGVuIiwhYS5hY3RpdmUpfX1jb25zdCBVUGU9WyJ0YWJDb250ZW50Vmlld0NvbnRhaW5lciJdO2Z1bmN0aW9uIFpQZShsLGMp'@;
put 'e2lmKDEmbCYmKFdyKDApLHllKDEsImxpIiw0KSxlcygyLDUpLENlKCksR3IoKSksMiZsKXtjb25zdCBhPUdlKCkuJGltcGxpY2l0O1NlKDIpLFJlKCJuZ1RlbXBsYXRlT3V0bGV0IixhLnRlbXBsYXRlUmVmQ29udGFpbmVyLnRlbXBsYXRlKX19ZnVuY3Rpb24gWVBlKGwsYyl7aWYoMSZsJiYo'@;
put 'V3IoMCksdHQoMSxaUGUsMywxLCJuZy1jb250YWluZXIiLDIpLEdyKCkpLDImbCl7Y29uc3QgYT1jLiRpbXBsaWNpdCxmPUdlKCk7U2UoMSksUmUoIm5nSWYiLGEudGFic0lkPT09Zi50YWJzSWQmJiFhLmluT3ZlcmZsb3cpfX1mdW5jdGlvbiBXUGUobCxjKXsxJmwmJmVzKDAsNSksMiZsJiZS'@;
put 'ZSgibmdUZW1wbGF0ZU91dGxldCIsR2UoKS4kaW1wbGljaXQudGVtcGxhdGVSZWZDb250YWluZXIudGVtcGxhdGUpfWZ1bmN0aW9uIEdQZShsLGMpe2lmKDEmbCYmKFdyKDApLHR0KDEsV1BlLDEsMSwibmctY29udGFpbmVyIiwxMyksR3IoKSksMiZsKXtjb25zdCBhPWMuJGltcGxpY2l0LGY9'@;
put 'R2UoMyk7U2UoMSksUmUoIm5nSWYiLGEudGFic0lkPT09Zi50YWJzSWQmJmEuaW5PdmVyZmxvdyl9fWZ1bmN0aW9uICRQZShsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImNsci10YWItb3ZlcmZsb3ctY29udGVudCIsMTIpLEV0KCJrZXlkb3duLmVzY2FwZSIsZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gVXQoYSksWnQoR2UoMikuY2xvc2VPbkVzY2FwZUtleSgpKX0sMCxMMikoImNsaWNrIixmdW5jdGlvbihkKXtVdChhKSxHZSgpO2NvbnN0IGg9UWkoNCk7cmV0dXJuIFp0KEdlKCkuY2xvc2VPbk91dHNpZGVDbGljayhkLGgpKX0sITEsTDIpKCJmb2N1c291dCIsZnVuY3Rpb24oZCl7'@;
put 'cmV0dXJuIFV0KGEpLFp0KEdlKDIpLmNsb3NlT25Gb2N1c091dChkKSl9KSx0dCgxLEdQZSwyLDEsIm5nLWNvbnRhaW5lciIsMSksQ2UoKX1pZigyJmwpe2NvbnN0IGE9R2UoMik7U2UoMSksUmUoIm5nRm9yT2YiLGEudGFiTGlua0RpcmVjdGl2ZXMpfX1mdW5jdGlvbiBLUGUobCxjKXtpZigx'@;
put 'Jmwpe2NvbnN0IGE9Wm4oKTtXcigwKSx5ZSgxLCJkaXYiLDYpKDIsImxpIiw3KSgzLCJidXR0b24iLDgsOSksRXQoIm1vdXNlZG93biIsZnVuY3Rpb24oKXtyZXR1cm4gVXQoYSksWnQoR2UoKS5fbW91c2Vkb3duPSEwKX0pKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gVXQoYSksWnQoR2Uo'@;
put 'KS5vcGVuT3ZlcmZsb3dPbkZvY3VzKCkpfSkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBVdChhKSxadChHZSgpLnRvZ2dsZU92ZXJmbG93T25DbGljaygpKX0pLHRuKDUsImNkcy1pY29uIiwxMCksQ2UoKSgpLHR0KDYsJFBlLDIsMSwiY2xyLXRhYi1vdmVyZmxvdy1jb250ZW50IiwxMSks'@;
put 'Q2UoKSxHcigpfWlmKDImbCl7Y29uc3QgYT1HZSgpO1NlKDEpLGdyKCJvcGVuIixhLnRvZ2dsZVNlcnZpY2Uub3BlbiksU2UoMiksZ3IoImFjdGl2ZSIsYS5hY3RpdmVUYWJJbk92ZXJmbG93KSgib3BlbiIsYS50b2dnbGVTZXJ2aWNlLm9wZW4pLFJyKCJ0YWJpbmRleCIsYS5hY3RpdmVUYWJJ'@;
put 'bk92ZXJmbG93JiYhYS50b2dnbGVTZXJ2aWNlLm9wZW4/MDotMSkoInRpdGxlIixhLmNvbW1vblN0cmluZ3Mua2V5cy5tb3JlKSxTZSgyKSxScigidGl0bGUiLGEuY29tbW9uU3RyaW5ncy5rZXlzLm1vcmUpLFNlKDEpLFJlKCJuZ0lmIixhLnRvZ2dsZVNlcnZpY2Uub3Blbil9fWZ1bmN0aW9u'@;
put 'IHFQZShsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImJ1dHRvbiIsMyksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBVdChhKSxadChHZSgpLnRvZ2dsZUJ5QnV0dG9uKCkpfSksdG4oMSwiY2RzLWljb24iLDQpLENlKCl9aWYoMiZsKXtjb25zdCBhPUdlKCk7Z3IoIm9uLWNv'@;
put 'bGxhcHNlIixhLmNvbGxhcHNlZCksUnIoImFyaWEtZXhwYW5kZWQiLGEuYXJpYUV4cGFuZGVkKSgiYXJpYS1sYWJlbCIsYS5jb21tb25TdHJpbmdzLmtleXMudmVydGljYWxOYXZUb2dnbGUpLFNlKDEpLFJyKCJkaXJlY3Rpb24iLGEuY29sbGFwc2VkPyJyaWdodCI6ImxlZnQiKSgidGl0bGUi'@;
put 'LGEuY29sbGFwc2VkP2EuY29tbW9uU3RyaW5ncy5rZXlzLmV4cGFuZDphLmNvbW1vblN0cmluZ3Mua2V5cy5jb2xsYXBzZSl9fWZ1bmN0aW9uIFhQZShsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImJ1dHRvbiIsNSksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBVdChhKSxa'@;
put 'dChHZSgpLmNvbGxhcHNlZD0hMSl9KSxDZSgpfTImbCYmUnIoImFyaWEtbGFiZWwiLEdlKCkuY29tbW9uU3RyaW5ncy5rZXlzLnZlcnRpY2FsTmF2VG9nZ2xlKX1jb25zdCBlRmU9WyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiXSx0RmU9W1tbIiIsImNsclZlcnRpY2FsTmF2SWNvbiIsIiJdXSwi'@;
put 'KiJdLG5GZT1bIltjbHJWZXJ0aWNhbE5hdkljb25dIiwiKiJdO2Z1bmN0aW9uIHJGZShsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImJ1dHRvbiIsMTEpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gVXQoYSksWnQoR2UoMikuY2xvc2UoKSl9KSx0bigxLCJjZHMtaWNvbiIs'@;
put 'MTIpLENlKCl9aWYoMiZsKXtjb25zdCBhPUdlKDIpO1JyKCJhcmlhLWxhYmVsIixhLmNsb3NlQnV0dG9uQXJpYUxhYmVsfHxhLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZSl9fWZ1bmN0aW9uIGlGZShsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImRpdiIsMSkoMSwiZGl2IiwyKSxF'@;
put 'dCgiQGZhZGVEb3duLmRvbmUiLGZ1bmN0aW9uKGQpe3JldHVybiBVdChhKSxadChHZSgpLmZhZGVEb25lKGQpKX0pLHllKDIsImRpdiIsMyksWWUoMyksQ2UoKSx5ZSg0LCJkaXYiLDQpLERyKDUpLHllKDYsImRpdiIsNSkoNywiZGl2Iiw2KSg4LCJkaXYiLDcpLERyKDksMSksQ2UoKSx0dCgx'@;
put 'MCxyRmUsMiwxLCJidXR0b24iLDgpLENlKCkseWUoMTEsImRpdiIsOSksRHIoMTIsMiksQ2UoKSxEcigxMywzKSxDZSgpKCkseWUoMTQsImRpdiIsMyksWWUoMTUpLENlKCkoKSx5ZSgxNiwiZGl2IiwxMCksRXQoImNsaWNrIixmdW5jdGlvbigpe1V0KGEpO2NvbnN0IGQ9R2UoKTtyZXR1cm4g'@;
put 'WnQoZC5zdGF0aWNCYWNrZHJvcHx8ZC5jbG9zZSgpKX0pLENlKCkoKX1pZigyJmwpe2NvbnN0IGE9R2UoKTtTZSgxKSxncigibW9kYWwtc20iLCJzbSI9PWEuc2l6ZSkoIm1vZGFsLWxnIiwibGciPT1hLnNpemUpKCJtb2RhbC14bCIsInhsIj09YS5zaXplKSxSZSgiQGZhZGVEb3duIixhLnNr'@;
put 'aXBBbmltYXRpb24pLFJyKCJhcmlhLWhpZGRlbiIsIWEuX29wZW4pKCJhcmlhLWxhYmVsbGVkYnkiLGEubGFiZWxsZWRCeSksU2UoMiksYXIoYS5jb21tb25TdHJpbmdzLmtleXMubW9kYWxDb250ZW50U3RhcnQpLFNlKDUpLFJ1KCJpZCIsYS5tb2RhbElkKSxTZSgyKSxSZSgibmdJZiIsYS5j'@;
put 'bG9zYWJsZSksU2UoNSksYXIoYS5jb21tb25TdHJpbmdzLmtleXMubW9kYWxDb250ZW50RW5kKSxTZSgxKSxSZSgiQGZhZGUiLHZvaWQgMCl9fWNvbnN0IG9GZT1bW1siIiw4LCJtb2RhbC1uYXYiXV0sW1siIiw4LCJtb2RhbC10aXRsZSJdXSxbWyIiLDgsIm1vZGFsLWJvZHkiXV0sW1siIiw4'@;
put 'LCJtb2RhbC1mb290ZXIiXV1dLGFGZT1bIi5tb2RhbC1uYXYiLCIubW9kYWwtdGl0bGUiLCIubW9kYWwtYm9keSIsIi5tb2RhbC1mb290ZXIiXTtsZXQgUmw9KCgpPT57Y2xhc3MgbHt9cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1ZGly'@;
put 'PVNyKHt0eXBlOmwsc2VsZWN0b3JzOltbImNsci1pY29uIl1dfSksbH0pKCksSmE9KCgpPT57Y2xhc3MgbHt9cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1ZGlyPVNyKHt0eXBlOmwsc2VsZWN0b3JzOltbImNkcy1pY29uIl1dfSksbH0p'@;
put 'KCksbGw9KCgpPT57Y2xhc3MgbHt9cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1bW9kPURpKHt0eXBlOmx9KSxsLlx1MDI3NWluaj14aSh7aW1wb3J0czpbW2JvXV19KSxsfSkoKTtjbGFzcyBRQ3t9dmFyIFhjPWZ1bmN0aW9uKGwpe3Jl'@;
put 'dHVybiBsW2wuREVGQVVMVD0wXT0iREVGQVVMVCIsbFtsLkxPQURJTkc9MV09IkxPQURJTkciLGxbbC5TVUNDRVNTPTJdPSJTVUNDRVNTIixsW2wuRVJST1I9M109IkVSUk9SIixsfShYY3x8e30pO2xldCBKYz0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEpe3RoaXMubGlzdGVuZXI9YSx0'@;
put 'aGlzLl9sb2FkaW5nU3RhdGU9WGMuREVGQVVMVH1nZXQgbG9hZGluZ1N0YXRlKCl7cmV0dXJuIHRoaXMuX2xvYWRpbmdTdGF0ZX1zZXQgbG9hZGluZ1N0YXRlKGEpeyEwPT09YT9hPVhjLkxPQURJTkc6YXx8KGE9WGMuREVGQVVMVCksYSE9PXRoaXMuX2xvYWRpbmdTdGF0ZSYmKHRoaXMuX2xv'@;
put 'YWRpbmdTdGF0ZT1hLHRoaXMubGlzdGVuZXImJnRoaXMubGlzdGVuZXIubG9hZGluZ1N0YXRlQ2hhbmdlKGEpKX1uZ09uRGVzdHJveSgpe3RoaXMubG9hZGluZ1N0YXRlPVhjLkRFRkFVTFR9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHJ0KFFDLDgp'@;
put 'KX0sbC5cdTAyNzVkaXI9U3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siIiwiY2xyTG9hZGluZyIsIiJdXSxpbnB1dHM6e2xvYWRpbmdTdGF0ZTpbImNsckxvYWRpbmciLCJsb2FkaW5nU3RhdGUiXX19KSxsfSkoKSxRYz0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKCl7dGhpcy5leHBhbmRhYmxl'@;
put 'PTAsdGhpcy5fbG9hZGluZz0hMSx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9leHBhbmRDaGFuZ2U9bmV3IHdlfWdldCBsb2FkaW5nKCl7cmV0dXJuIHRoaXMuX2xvYWRpbmd9c2V0IGxvYWRpbmcoYSl7KGE9ISFhKSE9PXRoaXMuX2xvYWRpbmcmJih0aGlzLl9sb2FkaW5nPWEpfWdldCBleHBh'@;
put 'bmRlZCgpe3JldHVybiB0aGlzLl9leHBhbmRlZH1zZXQgZXhwYW5kZWQoYSl7KGE9ISFhKSE9PXRoaXMuX2V4cGFuZGVkJiYodGhpcy5fZXhwYW5kZWQ9YSx0aGlzLl9leHBhbmRDaGFuZ2UubmV4dChhKSl9Z2V0IGV4cGFuZENoYW5nZSgpe3JldHVybiB0aGlzLl9leHBhbmRDaGFuZ2UuYXNP'@;
put 'YnNlcnZhYmxlKCl9dG9nZ2xlKCl7dGhpcy5leHBhbmRlZD0hdGhpcy5fZXhwYW5kZWR9bG9hZGluZ1N0YXRlQ2hhbmdlKGEpe3RoaXMubG9hZGluZz1hPT09WGMuTE9BRElOR319cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1cHJvdj1o'@;
put 'cih7dG9rZW46bCxmYWN0b3J5OmwuXHUwMjc1ZmFjfSksbH0pKCksT0ZlPTA7ZnVuY3Rpb24gSHUoKXtyZXR1cm4iY2xyLWlkLSIrT0ZlKyt9bGV0IEdsZT0oKCk9PntjbGFzcyBse31yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVjbXA9'@;
put 'a3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siY2xyLWFjY29yZGlvbi1kZXNjcmlwdGlvbiJdLFsiY2xyLXN0ZXAtZGVzY3JpcHRpb24iXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxmKXsyJmEmJmdyKCJjbHItYWNjb3JkaW9uLWRlc2NyaXB0aW9uIiwhMCl9LG5nQ29udGVu'@;
put 'dFNlbGVjdG9yczpPbyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGYpezEmYSYmKFRpKCksRHIoMCkpfSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxsfSkoKTt2YXIgSjI9ZnVuY3Rpb24obCl7cmV0dXJuIGwuSW5hY3RpdmU9ImluYWN0aXZlIixsLkVy'@;
put 'cm9yPSJlcnJvciIsbC5Db21wbGV0ZT0iY29tcGxldGUiLGx9KEoyfHx7fSk7Y29uc3Qga2Q9IjAuMnMgZWFzZS1pbi1vdXQiLERGZT1bQzEoInNraXBJbml0aWFsUmVuZGVyIixbYnUoIjplbnRlciIsW10pXSksQzEoInRvZ2dsZSIsW2J1KCJ2b2lkID0+ICoiLFtDYSh7ZGlzcGxheToiYmxv'@;
put 'Y2siLGhlaWdodDowfSksY2Moa2QsQ2Eoe2hlaWdodDoiKiJ9KSldKV0pXSxtVT0oQzEoInNraXBJbml0aWFsUmVuZGVyIixbYnUoIjplbnRlciIsW10pXSksQzEoInRvZ2dsZSIsW2J1KCJ2b2lkID0+ICoiLFtDYSh7ZGlzcGxheToiYmxvY2siLGhlaWdodDowfSksY2Moa2QsQ2Eoe2hlaWdo'@;
put 'dDoiKiJ9KSldKSxidSgiKiA9PiB2b2lkIixbQ2Eoe2Rpc3BsYXk6ImJsb2NrIn0pLGNjKGtkLENhKHtoZWlnaHQ6MCxkaXNwbGF5OiJub25lIn0pKV0pXSkse29wZW46Ik9wZW4iLGNsb3NlOiJDbG9zZSIsc2hvdzoiU2hvdyIsaGlkZToiSGlkZSIsZXhwYW5kOiJFeHBhbmQiLGNvbGxhcHNl'@;
put 'OiJDb2xsYXBzZSIsbW9yZToiTW9yZSIsc2VsZWN0OiJTZWxlY3QiLHNlbGVjdEFsbDoiU2VsZWN0IEFsbCIscHJldmlvdXM6IlByZXZpb3VzIixuZXh0OiJOZXh0IixjdXJyZW50OiJKdW1wIHRvIGN1cnJlbnQiLGluZm86IkluZm8iLHN1Y2Nlc3M6IlN1Y2Nlc3MiLHdhcm5pbmc6Ildhcm5p'@;
put 'bmciLGRhbmdlcjoiRXJyb3IiLHJvd0FjdGlvbnM6IkF2YWlsYWJsZSBhY3Rpb25zIixwaWNrQ29sdW1uczoiTWFuYWdlIENvbHVtbnMiLHNob3dDb2x1bW5zOiJTaG93IENvbHVtbnMiLHNvcnRDb2x1bW46IlNvcnQgQ29sdW1uIixmaXJzdFBhZ2U6IkZpcnN0IFBhZ2UiLGxhc3RQYWdlOiJM'@;
put 'YXN0IFBhZ2UiLG5leHRQYWdlOiJOZXh0IFBhZ2UiLHByZXZpb3VzUGFnZToiUHJldmlvdXMgUGFnZSIsY3VycmVudFBhZ2U6IkN1cnJlbnQgUGFnZSIsdG90YWxQYWdlczoiVG90YWwgUGFnZXMiLGZpbHRlckl0ZW1zOiJGaWx0ZXIgaXRlbXMiLG1pblZhbHVlOiJNaW4gdmFsdWUiLG1heFZh'@;
put 'bHVlOiJNYXggdmFsdWUiLG1vZGFsQ29udGVudFN0YXJ0OiJCZWdpbm5pbmcgb2YgTW9kYWwgQ29udGVudCIsbW9kYWxDb250ZW50RW5kOiJFbmQgb2YgTW9kYWwgQ29udGVudCIsc2hvd0NvbHVtbnNNZW51RGVzY3JpcHRpb246IlNob3cgb3IgaGlkZSBjb2x1bW5zIG1lbnUiLGFsbENvbHVt'@;
put 'bnNTZWxlY3RlZDoiQWxsIGNvbHVtbnMgc2VsZWN0ZWQiLHNpZ25wb3N0VG9nZ2xlOiJTaWducG9zdCBUb2dnbGUiLHNpZ25wb3N0Q2xvc2U6IlNpZ25wb3N0IENsb3NlIixsb2FkaW5nOiJMb2FkaW5nIixkZXRhaWxQYW5lU3RhcnQ6IlN0YXJ0IG9mIHJvdyBkZXRhaWxzIixkZXRhaWxQYW5l'@;
put 'RW5kOiJFbmQgb2Ygcm93IGRldGFpbHMiLHNpbmdsZVNlbGVjdGlvbkFyaWFMYWJlbDoiU2luZ2xlIHNlbGVjdGlvbiBoZWFkZXIiLHNpbmdsZUFjdGlvbmFibGVBcmlhTGFiZWw6IlNpbmdsZSBhY3Rpb25hYmxlIGhlYWRlciIsZGV0YWlsRXhwYW5kYWJsZUFyaWFMYWJlbDoiVG9nZ2xlIG1v'@;
put 'cmUgcm93IGNvbnRlbnQiLGRhdGFncmlkRmlsdGVyQXJpYUxhYmVsOiJUb2dnbGUge0NPTFVNTn0gZmlsdGVyIixkYXRhZ3JpZEZpbHRlckRpYWxvZ0FyaWFMYWJlbDoiRmlsdGVyIGRpYWxvZyIsY29sdW1uU2VwYXJhdG9yQXJpYUxhYmVsOiJDb2x1bW4gcmVzaXplIGhhbmRsZSIsY29sdW1u'@;
put 'U2VwYXJhdG9yRGVzY3JpcHRpb246IlVzZSBsZWZ0IG9yIHJpZ2h0IGtleSB0byByZXNpemUgdGhlIGNvbHVtbiIsYWxlcnRDbG9zZUJ1dHRvbkFyaWFMYWJlbDoiQ2xvc2UgYWxlcnQiLGFsZXJ0TmV4dEFsZXJ0QXJpYUxhYmVsOiJOZXh0IGFsZXJ0IG1lc3NhZ2UsIHtDVVJSRU5UfSBvZiB7'@;
put 'Q09VTlR9IixhbGVydFByZXZpb3VzQWxlcnRBcmlhTGFiZWw6IlByZXZpb3VzIGFsZXJ0IG1lc3NhZ2UsIHtDVVJSRU5UfSBvZiB7Q09VTlR9IixkYXRlcGlja2VyRGlhbG9nTGFiZWw6IkNob29zZSBkYXRlIixkYXRlcGlja2VyVG9nZ2xlOiJUb2dnbGUgZGF0ZXBpY2tlciIsZGF0ZXBpY2tl'@;
put 'clRvZ2dsZUNob29zZURhdGVMYWJlbDoiQ2hvb3NlIGRhdGUiLGRhdGVwaWNrZXJUb2dnbGVDaGFuZ2VEYXRlTGFiZWw6IkNoYW5nZSBkYXRlLCB7U0VMRUNURURfREFURX0iLGRhdGVwaWNrZXJQcmV2aW91c01vbnRoOiJQcmV2aW91cyBtb250aCIsZGF0ZXBpY2tlckN1cnJlbnRNb250aDoi'@;
put 'Q3VycmVudCBtb250aCIsZGF0ZXBpY2tlck5leHRNb250aDoiTmV4dCBtb250aCIsZGF0ZXBpY2tlclByZXZpb3VzRGVjYWRlOiJQcmV2aW91cyBkZWNhZGUiLGRhdGVwaWNrZXJOZXh0RGVjYWRlOiJOZXh0IGRlY2FkZSIsZGF0ZXBpY2tlckN1cnJlbnREZWNhZGU6IkN1cnJlbnQgZGVjYWRl'@;
put 'IixkYXRlcGlja2VyU2VsZWN0TW9udGhUZXh0OiJTZWxlY3QgbW9udGgsIHRoZSBjdXJyZW50IG1vbnRoIGlzIHtDQUxFTkRBUl9NT05USH0iLGRhdGVwaWNrZXJTZWxlY3RZZWFyVGV4dDoiU2VsZWN0IHllYXIsIHRoZSBjdXJyZW50IHllYXIgaXMge0NBTEVOREFSX1lFQVJ9IixkYXRlcGlj'@;
put 'a2VyU2VsZWN0ZWRMYWJlbDoie0ZVTExfREFURX0gLSBTZWxlY3RlZCIsc3RhY2tWaWV3Q2hhbmdlZDoiVmFsdWUgY2hhbmdlZC4iLHJlc3BvbnNpdmVOYXZUb2dnbGVPcGVuOiJOYXZpZ2F0aW9uIG1lbnUiLHJlc3BvbnNpdmVOYXZUb2dnbGVDbG9zZToiTmF2aWdhdGlvbiBtZW51IixyZXNw'@;
put 'b25zaXZlTmF2T3ZlcmZsb3dPcGVuOiJOYXZpZ2F0aW9uIG92ZXJmbG93IG1lbnUiLHJlc3BvbnNpdmVOYXZPdmVyZmxvd0Nsb3NlOiJOYXZpZ2F0aW9uIG92ZXJmbG93IG1lbnUiLHZlcnRpY2FsTmF2R3JvdXBUb2dnbGU6IlRvZ2dsZSB2ZXJ0aWNhbCBuYXZpZ2F0aW9uIGdyb3VwIix2ZXJ0'@;
put 'aWNhbE5hdlRvZ2dsZToiVG9nZ2xlIHZlcnRpY2FsIG5hdmlnYXRpb24iLHRpbWVsaW5lU3RlcE5vdFN0YXJ0ZWQ6Ik5vdCBzdGFydGVkIix0aW1lbGluZVN0ZXBDdXJyZW50OiJDdXJyZW50Iix0aW1lbGluZVN0ZXBTdWNjZXNzOiJDb21wbGV0ZWQiLHRpbWVsaW5lU3RlcEVycm9yOiJFcnJv'@;
put 'ciIsdGltZWxpbmVTdGVwUHJvY2Vzc2luZzoiSW4gcHJvZ3Jlc3MiLGNvbWJvYm94RGVsZXRlOiJEZWxldGUgc2VsZWN0ZWQgb3B0aW9uIixjb21ib2JveFNlYXJjaGluZzonU2VhcmNoaW5nIGZvciBtYXRjaGVzIGZvciAie0lOUFVUfSInLGNvbWJvYm94U2VsZWN0aW9uOiJTZWxlY3Rpb24i'@;
put 'LGNvbWJvYm94U2VsZWN0ZWQ6IlNlbGVjdGVkIixjb21ib2JveE5vUmVzdWx0czoiTm8gcmVzdWx0cyIsY29tYm9ib3hPcGVuOiJTaG93IG9wdGlvbnMiLGRhdGFncmlkRXhwYW5kYWJsZUJlZ2lubmluZ09mOiJCZWdpbm5pbmcgb2YiLGRhdGFncmlkRXhwYW5kYWJsZUVuZE9mOiJFbmQgb2Yi'@;
put 'LGRhdGFncmlkRXhwYW5kYWJsZVJvd0NvbnRlbnQ6IkV4cGFuZGFibGUgcm93IGNvbnRlbnQiLGRhdGFncmlkRXhwYW5kYWJsZVJvd3NIZWxwZXJUZXh0OiJTY3JlZW4gcmVhZGVyIHRhYmxlIGNvbW1hbmRzIG1heSBub3Qgd29yayBmb3Igdmlld2luZyBleHBhbmRlZCBjb250ZW50LCBwbGVh'@;
put 'c2UgdXNlIHlvdXIgc2NyZWVuIHJlYWRlcidzIGJyb3dzZSBtb2RlIHRvIHJlYWQgdGhlIGNvbnRlbnQgZXhwb3NlZCBieSB0aGlzIGJ1dHRvbiIsd2l6YXJkU3RlcFN1Y2Nlc3M6IkNvbXBsZXRlZCIsd2l6YXJkU3RlcEVycm9yOiJFcnJvciIsd2l6YXJkU3RlcG5hdkFyaWFMYWJlbDoiU3Rl'@;
put 'cCBuYXZpZ2F0aW9uIixwYXNzd29yZEhpZGU6IkhpZGUgcGFzc3dvcmQiLHBhc3N3b3JkU2hvdzoiU2hvdyBwYXNzd29yZCIsc2VsZWN0ZWRSb3dzOiJTZWxlY3RlZCByb3dzIn0pO2xldCBUYT0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKCl7dGhpcy5fc3RyaW5ncz1tVX1nZXQga2V5cygp'@;
put 'e3JldHVybiB0aGlzLl9zdHJpbmdzfWxvY2FsaXplKGEpe3RoaXMuX3N0cmluZ3M9ey4uLnRoaXMuX3N0cmluZ3MsLi4uYX19cGFyc2UoYSxmPXt9KXtjb25zdCBkPU9iamVjdC5rZXlzKGYpO2xldCBoPWE7cmV0dXJuIGQubGVuZ3RoJiZkLmZvckVhY2gobT0+e2g9aC5yZXBsYWNlKGB7JHtt'@;
put 'fX1gLGZbbV0pfSksaH19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1cHJvdj1ocih7dG9rZW46bCxmYWN0b3J5OmwuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbH0pKCk7dmFyIGVTPWZ1bmN0aW9uKGwpe3JldHVybiBsLkRl'@;
put 'ZmF1bHQ9ImRlZmF1bHQiLGwuTXVsdGk9Im11bHRpIixsfShlU3x8e30pO2xldCBSRmU9MDtjbGFzcyBMRmV7Y29uc3RydWN0b3IoYyxhKXt0aGlzLmlkPWMsdGhpcy5hY2NvcmRpb25JZD1hLHRoaXMuc3RhdHVzPUoyLkluYWN0aXZlLHRoaXMuaW5kZXg9bnVsbCx0aGlzLmRpc2FibGVkPSEx'@;
put 'LHRoaXMub3Blbj0hMSx0aGlzLnRlbXBsYXRlSWQ9YCR7dGhpcy5pZH0tJHt0aGlzLmFjY29yZGlvbklkfWB9fWNsYXNzICRsZXtjb25zdHJ1Y3Rvcigpe3RoaXMuc3RyYXRlZ3k9ZVMuRGVmYXVsdCx0aGlzLmFjY29yZGlvbkNvdW50PVJGZSsrLHRoaXMuX3BhbmVscz17fX1nZXQgcGFuZWxz'@;
put 'KCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX3BhbmVscykubWFwKGM9PnRoaXMuX3BhbmVsc1tjXSl9c2V0U3RyYXRlZ3koYyl7dGhpcy5zdHJhdGVneT1jfXVwZGF0ZVBhbmVsT3JkZXIoYyl7Yy5mb3JFYWNoKChhLGYpPT50aGlzLl9wYW5lbHNbYV0uaW5kZXg9ZiksdGhpcy5yZW1vdmVP'@;
put 'bGRQYW5lbHMoYyl9YWRkUGFuZWwoYyxhPSExKXt0aGlzLl9wYW5lbHNbY109bmV3IExGZShjLHRoaXMuYWNjb3JkaW9uQ291bnQpLHRoaXMuX3BhbmVsc1tjXS5vcGVuPWF9dG9nZ2xlUGFuZWwoYyxhKXtjb25zdCBkPXZvaWQgMCE9PWE/YTohdGhpcy5fcGFuZWxzW2NdLm9wZW47ZCYmdGhp'@;
put 'cy5zdHJhdGVneT09PWVTLkRlZmF1bHQmJnRoaXMuY2xvc2VBbGxQYW5lbHMoKSx0aGlzLl9wYW5lbHNbY10ub3Blbj1kfWRpc2FibGVQYW5lbChjLGEpe3RoaXMuX3BhbmVsc1tjXS5kaXNhYmxlZD1hfWNsb3NlQWxsUGFuZWxzKCl7dGhpcy5wYW5lbHMuZm9yRWFjaChjPT50aGlzLl9wYW5l'@;
put 'bHNbYy5pZF0ub3Blbj0hMSl9cmVtb3ZlT2xkUGFuZWxzKGMpe3RoaXMucGFuZWxzLmZpbHRlcihhPT52b2lkIDA9PT1jLmZpbmQoZj0+Zj09PWEuaWQpKS5mb3JFYWNoKGE9PmRlbGV0ZSB0aGlzLl9wYW5lbHNbYS5pZF0pfX1sZXQgdFM9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3Rvcigpe3Ro'@;
put 'aXMuYWNjb3JkaW9uPW5ldyAkbGUsdGhpcy5fcGFuZWxzQ2hhbmdlcz1uZXcgT2UodGhpcy5hY2NvcmRpb24ucGFuZWxzKX1nZXRQYW5lbENoYW5nZXMoYSl7cmV0dXJuIHRoaXMuX3BhbmVsc0NoYW5nZXMucGlwZShFZShmPT5mLmZpbmQoZD0+ZC5pZD09PWEpKSl9c2V0U3RyYXRlZ3koYSl7'@;
put 'dGhpcy5hY2NvcmRpb24uc2V0U3RyYXRlZ3koYSl9YWRkUGFuZWwoYSxmPSExKXt0aGlzLmFjY29yZGlvbi5hZGRQYW5lbChhLGYpLHRoaXMuZW1pdFVwZGF0ZWRQYW5lbHMoKX10b2dnbGVQYW5lbChhLGYpe3RoaXMuYWNjb3JkaW9uLnRvZ2dsZVBhbmVsKGEsZiksdGhpcy5lbWl0VXBkYXRl'@;
put 'ZFBhbmVscygpfWRpc2FibGVQYW5lbChhLGYpe3RoaXMuYWNjb3JkaW9uLmRpc2FibGVQYW5lbChhLGYpLHRoaXMuZW1pdFVwZGF0ZWRQYW5lbHMoKX11cGRhdGVQYW5lbE9yZGVyKGEpe3RoaXMuYWNjb3JkaW9uLnVwZGF0ZVBhbmVsT3JkZXIoYSksdGhpcy5lbWl0VXBkYXRlZFBhbmVscygp'@;
put 'fWVtaXRVcGRhdGVkUGFuZWxzKCl7dGhpcy5fcGFuZWxzQ2hhbmdlcy5uZXh0KHRoaXMuYWNjb3JkaW9uLnBhbmVscyl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmwsZmFjdG9yeTpsLlx1MDI3NWZhY30p'@;
put 'LGx9KSgpLHFEPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmLGQpe3RoaXMuY29tbW9uU3RyaW5ncz1hLHRoaXMuYWNjb3JkaW9uU2VydmljZT1mLHRoaXMuaWZFeHBhbmRTZXJ2aWNlPWQsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLnBhbmVsT3Blbj0hMSx0aGlzLnBhbmVsT3BlbkNoYW5n'@;
put 'ZT1uZXcgeHIsdGhpcy5BY2NvcmRpb25TdGF0dXM9SjIsdGhpcy5pc0FjY29yZGlvbj0hMCx0aGlzLl9pZD1IdSgpfWdldCBpZCgpe3JldHVybiB0aGlzLl9pZH1zZXQgaWQoYSl7dGhpcy5faWQ9YX1uZ09uSW5pdCgpe3RoaXMucGFuZWw9dGhpcy5hY2NvcmRpb25TZXJ2aWNlLmdldFBhbmVs'@;
put 'Q2hhbmdlcyh0aGlzLmlkKS5waXBlKHF1KGE9PnRoaXMuZW1pdFBhbmVsQ2hhbmdlKGEpKSksdGhpcy5hY2NvcmRpb25TZXJ2aWNlLmFkZFBhbmVsKHRoaXMuaWQsdGhpcy5wYW5lbE9wZW4pLHRoaXMuYWNjb3JkaW9uU2VydmljZS50b2dnbGVQYW5lbCh0aGlzLmlkLHRoaXMucGFuZWxPcGVu'@;
put 'KSx0aGlzLmFjY29yZGlvblNlcnZpY2UuZGlzYWJsZVBhbmVsKHRoaXMuaWQsdGhpcy5kaXNhYmxlZCl9bmdPbkNoYW5nZXMoYSl7dGhpcy5wYW5lbCYmYS5wYW5lbE9wZW4mJmEucGFuZWxPcGVuLmN1cnJlbnRWYWx1ZSE9PWEucGFuZWxPcGVuLnByZXZpb3VzVmFsdWUmJnRoaXMuYWNjb3Jk'@;
put 'aW9uU2VydmljZS50b2dnbGVQYW5lbCh0aGlzLmlkLGEucGFuZWxPcGVuLmN1cnJlbnRWYWx1ZSksdGhpcy5wYW5lbCYmYS5kaXNhYmxlZCYmYS5kaXNhYmxlZC5jdXJyZW50VmFsdWUhPT1hLmRpc2FibGVkLnByZXZpb3VzVmFsdWUmJnRoaXMuYWNjb3JkaW9uU2VydmljZS5kaXNhYmxlUGFu'@;
put 'ZWwodGhpcy5pZCxhLmRpc2FibGVkLmN1cnJlbnRWYWx1ZSl9dG9nZ2xlUGFuZWwoKXt0aGlzLmFjY29yZGlvblNlcnZpY2UudG9nZ2xlUGFuZWwodGhpcy5pZCl9Y29sbGFwc2VQYW5lbE9uQW5pbWF0aW9uRG9uZShhKXthLm9wZW58fCh0aGlzLmlmRXhwYW5kU2VydmljZS5leHBhbmRlZD0h'@;
put 'MSl9Z2V0UGFuZWxTdGF0ZUNsYXNzZXMoYSl7cmV0dXJuYGNsci1hY2NvcmRpb24tcGFuZWwtJHthLnN0YXR1c30gJHthLm9wZW4/ImNsci1hY2NvcmRpb24tcGFuZWwtb3BlbiI6IiJ9YH1nZXRBY2NvcmRpb25Db250ZW50SWQoYSl7cmV0dXJuYGNsci1hY2NvcmRpb24tY29udGVudC0ke2F9'@;
put 'J2B9Z2V0QWNjb3JkaW9uSGVhZGVySWQoYSl7cmV0dXJuYGNsci1hY2NvcmRpb24taGVhZGVyLSR7YX1gfWVtaXRQYW5lbENoYW5nZShhKXthLm9wZW4hPT10aGlzLnBhbmVsT3BlbiYmKHRoaXMucGFuZWxPcGVuQ2hhbmdlLmVtaXQoYS5vcGVuKSx0aGlzLnBhbmVsT3Blbj1hLm9wZW4pLGEu'@;
put 'b3BlbiYmKHRoaXMuaWZFeHBhbmRTZXJ2aWNlLmV4cGFuZGVkPSEwKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkocnQoVGEpLHJ0KHRTKSxydChRYykpfSxsLlx1MDI3NWNtcD1rcih7dHlwZTpsLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uLXBh'@;
put 'bmVsIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZixkKXtpZigxJmEmJkZvKGQsR2xlLDQpLDImYSl7bGV0IGg7dWkoaD1jaSgpKSYmKGYuYWNjb3JkaW9uRGVzY3JpcHRpb249aCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGYpezImYSYmZ3IoImNsci1hY2Nv'@;
put 'cmRpb24tcGFuZWwiLCEwKX0saW5wdXRzOntkaXNhYmxlZDpbImNsckFjY29yZGlvblBhbmVsRGlzYWJsZWQiLCJkaXNhYmxlZCJdLHBhbmVsT3BlbjpbImNsckFjY29yZGlvblBhbmVsT3BlbiIsInBhbmVsT3BlbiJdfSxvdXRwdXRzOntwYW5lbE9wZW5DaGFuZ2U6ImNsckFjY29yZGlvblBh'@;
put 'bmVsT3BlbkNoYW5nZSJ9LGZlYXR1cmVzOltyaShbUWNdKSxibF0sbmdDb250ZW50U2VsZWN0b3JzOllsZSxkZWNsczoyLHZhcnM6Myxjb25zdHM6W1s0LCJuZ0lmIl0sWyJhcmlhLWxpdmUiLCJhc3NlcnRpdmUiLCJjbGFzcyIsImNsci1zci1vbmx5Iiw0LCJuZ0lmIl0sWzMsIm5nQ2xhc3Mi'@;
put 'XSxbMSwiY2xyLWFjY29yZGlvbi1oZWFkZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbiIsMywiaWQiLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJoZWFkZXJCdXR0b24iLCIiXSxbMSwiY2xyLXNyLW9ubHkiXSxbMSwiY2xyLWFjY29yZGlvbi1zdGF0'@;
put 'dXMiXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJyaWdodCIsMSwiY2xyLWFjY29yZGlvbi1hbmdsZSJdLFsxLCJjbHItYWNjb3JkaW9uLW51bWJlciJdLFsic3RhdHVzIiwiZGFuZ2VyIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLDEsImNsci1hY2NvcmRpb24tZXJyb3It'@;
put 'aWNvbiJdLFsic3RhdHVzIiwic3VjY2VzcyIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwxLCJjbHItYWNjb3JkaW9uLWNvbXBsZXRlLWljb24iXSxbInJvbGUiLCJyZWdpb24iLDEsImNsci1hY2NvcmRpb24tY29udGVudC1yZWdpb24iLDMsImlkIl0sWyJjbGFzcyIsImNsci1hY2NvcmRpb24t'@;
put 'Y29udGVudCIsNCwibmdJZiJdLFsiYXJpYS1saXZlIiwiYXNzZXJ0aXZlIiwxLCJjbHItc3Itb25seSJdLFsxLCJjbHItYWNjb3JkaW9uLWNvbnRlbnQiXSxbMSwiY2xyLWFjY29yZGlvbi1pbm5lci1jb250ZW50Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZil7MSZhJiYoVGkoWmxlKSx0dCgw'@;
put 'LE9EZSwxOSwxOCwibmctY29udGFpbmVyIiwwKSx3bCgxLCJhc3luYyIpKSwyJmEmJlJlKCJuZ0lmIixKcygxLDEsZi5wYW5lbCkpfSxkZXBlbmRlbmNpZXM6WyRpLHl1LEphLHpPXSxlbmNhcHN1bGF0aW9uOjIsZGF0YTp7YW5pbWF0aW9uOkRGZX0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxsfSko'@;
put 'KSxLbGU9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhKXt0aGlzLmFjY29yZGlvblNlcnZpY2U9YSx0aGlzLm11bHRpUGFuZWw9ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdfW5nT25Jbml0KCl7dGhpcy5zZXRBY2NvcmRpb25TdHJhdGVneSgpfW5nT25DaGFuZ2VzKGEpe2EubXVsdGlQYW5l'@;
put 'bC5jdXJyZW50VmFsdWUhPT1hLm11bHRpUGFuZWwucHJldmlvdXNWYWx1ZSYmdGhpcy5zZXRBY2NvcmRpb25TdHJhdGVneSgpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9yRE9NQ2hhbmdlcygpKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vi'@;
put 'c2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c2V0QWNjb3JkaW9uU3RyYXRlZ3koKXt0aGlzLmFjY29yZGlvblNlcnZpY2Uuc2V0U3RyYXRlZ3kodGhpcy5tdWx0aVBhbmVsP2VTLk11bHRpOmVTLkRlZmF1bHQpfWxpc3RlbkZvckRPTUNoYW5nZXMoKXtyZXR1cm4gdGhp'@;
put 'cy5wYW5lbHMuY2hhbmdlcy5waXBlKHQ0KHRoaXMucGFuZWxzKSkuc3Vic2NyaWJlKGE9PnRoaXMuYWNjb3JkaW9uU2VydmljZS51cGRhdGVQYW5lbE9yZGVyKGEudG9BcnJheSgpLm1hcChmPT5mLmlkKSkpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxs'@;
put 'KShydCh0UykpfSxsLlx1MDI3NWNtcD1rcih7dHlwZTpsLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZixkKXtpZigxJmEmJkZvKGQscUQsNSksMiZhKXtsZXQgaDt1aShoPWNpKCkpJiYoZi5wYW5lbHM9aCl9fSxob3N0VmFyczoyLGhv'@;
put 'c3RCaW5kaW5nczpmdW5jdGlvbihhLGYpezImYSYmZ3IoImNsci1hY2NvcmRpb24iLCEwKX0saW5wdXRzOnttdWx0aVBhbmVsOlsiY2xyQWNjb3JkaW9uTXVsdGlQYW5lbCIsIm11bHRpUGFuZWwiXX0sZmVhdHVyZXM6W3JpKFt0U10pLGJsXSxuZ0NvbnRlbnRTZWxlY3RvcnM6T28sZGVjbHM6'@;
put 'MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxmKXsxJmEmJihUaSgpLERyKDApKX0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbH0pKCkscWxlPSgoKT0+e2NsYXNzIGx7fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1'@;
put 'MDI3NWNtcD1rcih7dHlwZTpsLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uLWNvbnRlbnQiXSxbImNsci1zdGVwLWNvbnRlbnQiXV0sbmdDb250ZW50U2VsZWN0b3JzOk9vLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZil7MSZhJiYoVGkoKSxEcigwKSl9LGVuY2Fwc3Vs'@;
put 'YXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLGx9KSgpLFhsZT0oKCk9PntjbGFzcyBse31yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVjbXA9a3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siY2xyLWFjY29yZGlvbi10aXRsZSJdLFsiY2xy'@;
put 'LXN0ZXAtdGl0bGUiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxmKXsyJmEmJmdyKCJjbHItYWNjb3JkaW9uLXRpdGxlIiwhMCl9LG5nQ29udGVudFNlbGVjdG9yczpPbyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGYpezEmYSYmKFRpKCksRHIoMCkp'@;
put 'fSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxsfSkoKSxKdj0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKCl7dGhpcy5kaXNhYmxlQ2hvY29sYXRlQ2hlY2s9ITEsdGhpcy5fY2hvY29sYXRlPW5ldyB3ZX1nZXQgY2hvY29sYXRlKCl7cmV0dXJuIHRoaXMuX2Nob2NvbGF0'@;
put 'ZS5hc09ic2VydmFibGUoKX1uZ0FmdGVyVmlld0NoZWNrZWQoKXt0aGlzLmRpc2FibGVDaG9jb2xhdGVDaGVja3x8dGhpcy5fY2hvY29sYXRlLm5leHQoKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1ZGlyPVNyKHt0eXBlOmx9KSxs'@;
put 'fSkoKSxRdj0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEsZil7dGhpcy5zdWJzY3JpcHRpb249Zi5jaG9jb2xhdGUuc3Vic2NyaWJlKCgpPT57dGhpcy5sYXRlc3RGbGF2b3IhPT10aGlzLmZsYXZvciYmKGYuZGlzYWJsZUNob2NvbGF0ZUNoZWNrPSEwLGEuZGV0ZWN0Q2hhbmdlcygpLGYu'@;
put 'ZGlzYWJsZUNob2NvbGF0ZUNoZWNrPSExKX0pfW5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpe3RoaXMubGF0ZXN0Rmxhdm9yPXRoaXMuZmxhdm9yfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy'@;
put 'biBuZXcoYXx8bCkocnQoVWwpLHJ0KEp2KSl9LGwuXHUwMjc1ZGlyPVNyKHt0eXBlOmx9KSxsfSkoKSxnVT0oKCk9PntjbGFzcyBsIGV4dGVuZHMgSnZ7fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCBjO3JldHVybiBmdW5jdGlvbihmKXtyZXR1cm4oY3x8KGM9eGwobCkpKShm'@;
put 'fHxsKX19KCksbC5cdTAyNzVkaXI9U3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siY2xyLWFjY29yZGlvbiJdXSxmZWF0dXJlczpbcm9dfSksbH0pKCksSmxlPSgoKT0+e2NsYXNzIGwgZXh0ZW5kcyBRdntjb25zdHJ1Y3RvcihhLGYsZCl7aWYoIWYpdGhyb3cgbmV3IEVycm9yKCJjbHItYWNjb3Jk'@;
put 'aW9uLXBhbmVsIHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGNsci1hY2NvcmRpb24iKTtzdXBlcihhLGYpLHRoaXMuZXhwYW5kPWR9Z2V0IGZsYXZvcigpe3JldHVybiB0aGlzLmV4cGFuZC5leHBhbmRlZH19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXco'@;
put 'YXx8bCkocnQoVWwpLHJ0KGdVLDgpLHJ0KFFjKSl9LGwuXHUwMjc1ZGlyPVNyKHt0eXBlOmwsc2VsZWN0b3JzOltbImNsci1hY2NvcmRpb24tcGFuZWwiXV0sZmVhdHVyZXM6W3JvXX0pLGx9KSgpLFFsZT0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKCl7amEuYWRkSWNvbnMoWnYsXzEsdzEp'@;
put 'fX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVtb2Q9RGkoe3R5cGU6bH0pLGwuXHUwMjc1aW5qPXhpKHtpbXBvcnRzOltbYm8sbGxdXX0pLGx9KSgpLFZGZT0oKCk9PntjbGFzcyBse31yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24o'@;
put 'YSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVtb2Q9RGkoe3R5cGU6bH0pLGwuXHUwMjc1aW5qPXhpKHtpbXBvcnRzOltbYm8sbGwsUWxlXSxRbGVdfSksbH0pKCk7dmFyIE1vPWZ1bmN0aW9uKGwpe3JldHVybiBsLkFycm93TGVmdD0iQXJyb3dMZWZ0IixsLkFycm93VXA9IkFycm93VXAi'@;
put 'LGwuQXJyb3dSaWdodD0iQXJyb3dSaWdodCIsbC5BcnJvd0Rvd249IkFycm93RG93biIsbC5CYWNrc3BhY2U9IkJhY2tzcGFjZSIsbC5UYWI9IlRhYiIsbC5FbnRlcj0iRW50ZXIiLGwuRXNjYXBlPSJFc2NhcGUiLGwuU3BhY2U9IlNwYWNlIixsLlNwYWNlYmFyPSIgIixsLkhvbWU9IkhvbWUi'@;
put 'LGwuRW5kPSJFbmQiLGx9KE1vfHx7fSksWmc9ZnVuY3Rpb24obCl7cmV0dXJuIGwuQXJyb3dVcD0iVXAiLGwuQXJyb3dEb3duPSJEb3duIixsLkFycm93UmlnaHQ9IlJpZ2h0IixsLkFycm93TGVmdD0iTGVmdCIsbC5TcGFjZT0iU3BhY2ViYXIiLGwuRXNjYXBlPSJFc2MiLGx9KFpnfHx7fSk7'@;
put 'ZnVuY3Rpb24gRWQobCl7cmV0dXJuIGw9PT1Nby5BcnJvd1VwfHxsPT09WmcuQXJyb3dVcD9Nby5BcnJvd1VwOmw9PT1Nby5BcnJvd0Rvd258fGw9PT1aZy5BcnJvd0Rvd24/TW8uQXJyb3dEb3duOmw9PT1Nby5BcnJvd1JpZ2h0fHxsPT09WmcuQXJyb3dSaWdodD9Nby5BcnJvd1JpZ2h0Omw9'@;
put 'PT1Nby5BcnJvd0xlZnR8fGw9PT1aZy5BcnJvd0xlZnQ/TW8uQXJyb3dMZWZ0Omw9PT1Nby5TcGFjZXx8bD09PVpnLlNwYWNlP01vLlNwYWNlOmw9PT1Nby5Fc2NhcGV8fGw9PT1aZy5Fc2NhcGU/TW8uRXNjYXBlOmx9ZnVuY3Rpb24gYlUobCl7Y29uc3QgYz1FZChsLmtleSk7KGM9PT1Nby5B'@;
put 'cnJvd1VwfHxjPT09TW8uQXJyb3dEb3dufHxjPT09TW8uQXJyb3dMZWZ0fHxjPT09TW8uQXJyb3dSaWdodCkmJmwucHJldmVudERlZmF1bHQoKX1sZXQgUWE9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3Rvcigpe3RoaXMuX29wZW49ITEsdGhpcy5fb3BlbkNoYW5nZT1uZXcgd2UsdGhpcy5fb3Bl'@;
put 'bkV2ZW50Q2hhbmdlPW5ldyB3ZSx0aGlzLl9wb3BvdmVyQWxpZ25lZD1uZXcgd2V9Z2V0IG9wZW5DaGFuZ2UoKXtyZXR1cm4gdGhpcy5fb3BlbkNoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgb3BlbkV2ZW50KCl7cmV0dXJuIHRoaXMuX29wZW5FdmVudH1zZXQgb3BlbkV2ZW50KGEpe3RoaXMu'@;
put 'X29wZW5FdmVudD1hLHRoaXMuX29wZW5FdmVudENoYW5nZS5uZXh0KGEpfWdldCBvcGVuKCl7cmV0dXJuIHRoaXMuX29wZW59c2V0IG9wZW4oYSl7dGhpcy5fb3BlbiE9PShhPSEhYSkmJih0aGlzLl9vcGVuPWEsdGhpcy5fb3BlbkNoYW5nZS5uZXh0KGEpKX1nZXQgb3JpZ2luYWxFdmVudCgp'@;
put 'e3JldHVybiB0aGlzLl9vcGVuRXZlbnR9Z2V0IHBvcG92ZXJBbGlnbmVkKCl7cmV0dXJuIHRoaXMuX3BvcG92ZXJBbGlnbmVkLmFzT2JzZXJ2YWJsZSgpfWdldEV2ZW50Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX29wZW5FdmVudENoYW5nZS5hc09ic2VydmFibGUoKX10b2dnbGVXaXRoRXZlbnQo'@;
put 'YSl7YlUoYSksdGhpcy5vcGVuRXZlbnQ9YSx0aGlzLm9wZW49IXRoaXMub3Blbn1wb3BvdmVyQWxpZ25lZEVtaXQoYSl7dGhpcy5fcG9wb3ZlckFsaWduZWQubmV4dChhKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1cHJvdj1ocih7'@;
put 'dG9rZW46bCxmYWN0b3J5OmwuXHUwMjc1ZmFjfSksbH0pKCksUTI9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhLGYsZCl7dGhpcy5yZW5kZXJlcj1hLHRoaXMuc21hcnRPcGVuU2VydmljZT1mLHRoaXMuZG9jdW1lbnQ9ZCx0aGlzLm91dHNpZGVDbGlja0Nsb3NlPSEwLHRoaXMuc2Nyb2xs'@;
put 'VG9DbG9zZT0hMCx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goZi5vcGVuQ2hhbmdlLnN1YnNjcmliZShoPT57aD8odGhpcy5hZGRFc2NhcGVMaXN0ZW5lcigpLHRoaXMuYWRkQ2xpY2tMaXN0ZW5lcigpLHRoaXMuYWRkU2Nyb2xsTGlzdGVuZXIoKSk6dGhp'@;
put 'cy5yZW1vdmVBbGxFdmVudExpc3RlbmVycygpfSksZi5nZXRFdmVudENoYW5nZSgpLnN1YnNjcmliZShoPT57dGhpcy5pZ25vcmVkRXZlbnQ9aH0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSksdGhpcy5yZW1vdmVBbGxFdmVu'@;
put 'dExpc3RlbmVycygpfWFkZFNjcm9sbExpc3RlbmVyKCl7dGhpcy5zY3JvbGxUb0Nsb3NlJiYodGhpcy5kb2N1bWVudFNjcm9sbGVyPXdkKHRoaXMuZG9jdW1lbnQsInNjcm9sbCIse2NhcHR1cmU6ITB9KSx0aGlzLnNjcm9sbFN1YnNjcmlwdGlvbj10aGlzLmRvY3VtZW50U2Nyb2xsZXIucGlw'@;
put 'ZShJbCh0aGlzLnRlc3RGb3JTbWFydFBvcG92ZXJDb250ZW50Q29udGFpbmVyKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW49ITEsdGhpcy5zZXRBbmNob3JGb2N1cygpfSkpfXJlbW92ZVNjcm9sbExpc3RlbmVyKCl7dGhpcy5kb2N1bWVudFNjcm9sbGVyJiYo'@;
put 'dGhpcy5zY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSxkZWxldGUgdGhpcy5kb2N1bWVudFNjcm9sbGVyKX1hZGRDbGlja0xpc3RlbmVyKCl7dGhpcy5vdXRzaWRlQ2xpY2tDbG9zZSYmKHRoaXMuZG9jdW1lbnRDbGlja0xpc3RlbmVyPXRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMu'@;
put 'ZG9jdW1lbnQsImNsaWNrIixhPT57YT09PXRoaXMuaWdub3JlZEV2ZW50P2RlbGV0ZSB0aGlzLmlnbm9yZWRFdmVudDoodGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW49ITEsYS50YXJnZXQuZm9jdXMoKSl9KSl9cmVtb3ZlQ2xpY2tMaXN0ZW5lcigpe3RoaXMub3V0c2lkZUNsaWNrQ2xvc2Um'@;
put 'JihkZWxldGUgdGhpcy5pZ25vcmVkRXZlbnQsdGhpcy5kb2N1bWVudENsaWNrTGlzdGVuZXImJih0aGlzLmRvY3VtZW50Q2xpY2tMaXN0ZW5lcigpLGRlbGV0ZSB0aGlzLmRvY3VtZW50Q2xpY2tMaXN0ZW5lcikpfWFkZEVzY2FwZUxpc3RlbmVyKCl7dGhpcy5lc2NhcGVMaXN0ZW5lcj10aGlz'@;
put 'LnJlbmRlcmVyLmxpc3Rlbih0aGlzLmRvY3VtZW50LCJrZXlkb3duLmVzY2FwZSIsKCk9Pnt0aGlzLnNtYXJ0T3BlblNlcnZpY2Uub3Blbj0hMSx0aGlzLnNldEFuY2hvckZvY3VzKCl9KX1yZW1vdmVFc2NhcGVMaXN0ZW5lcigpe3RoaXMuZXNjYXBlTGlzdGVuZXImJih0aGlzLmVzY2FwZUxp'@;
put 'c3RlbmVyKCksZGVsZXRlIHRoaXMuZXNjYXBlTGlzdGVuZXIpfXNldENsb3NlRm9jdXMoKXt0aGlzLmNsb3NlQnV0dG9uUmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX1zZXRBbmNob3JGb2N1cygpe3RoaXMuYW5jaG9yQnV0dG9uUmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX10ZXN0Rm9yU21h'@;
put 'cnRQb3BvdmVyQ29udGVudENvbnRhaW5lcihhKXtsZXQgZj1hLnRhcmdldDtmb3IoO2YuY2xhc3NMaXN0JiYiYm9keSIhPT1mLnBhcmVudEVsZW1lbnQubG9jYWxOYW1lOylmPWYucGFyZW50RWxlbWVudDtyZXR1cm4hIWYuY2xhc3NMaXN0JiYhZi5jbGFzc0xpc3QuY29udGFpbnMoImNsci1w'@;
put 'b3BvdmVyLWNvbnRlbnQiKX1yZW1vdmVBbGxFdmVudExpc3RlbmVycygpe3RoaXMucmVtb3ZlU2Nyb2xsTGlzdGVuZXIoKSx0aGlzLnJlbW92ZUNsaWNrTGlzdGVuZXIoKSx0aGlzLnJlbW92ZUVzY2FwZUxpc3RlbmVyKCl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4g'@;
put 'bmV3KGF8fGwpKHNyKGpvKSxzcihRYSksc3IoRmEpKX0sbC5cdTAyNzVwcm92PWhyKHt0b2tlbjpsLGZhY3Rvcnk6bC5cdTAyNzVmYWN9KSxsfSkoKSxyUz0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEsZil7YS5hbmNob3JCdXR0b25SZWY9Zn19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0'@;
put 'aW9uKGEpe3JldHVybiBuZXcoYXx8bCkocnQoUTIpLHJ0KFZpKSl9LGwuXHUwMjc1ZGlyPVNyKHt0eXBlOmwsc2VsZWN0b3JzOltbIiIsImNsclBvcG92ZXJBbmNob3IiLCIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxmKXsyJmEmJmdyKCJjbHItYW5jaG9yIiwhMCl9'@;
put 'fSksbH0pKCksbnNlPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmLGQpe3RoaXMuZWxlbWVudFJlZj1hLHRoaXMuc21hcnRFdmVudHNTZXJ2aWNlPWYsdGhpcy5zbWFydE9wZW5TZXJ2aWNlPWQsdGhpcy5jbG9zZUNoYW5nZT1uZXcgeHIsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMu'@;
put 'c3Vic2NyaXB0aW9ucy5wdXNoKGQub3BlbkNoYW5nZS5waXBlKElsKGg9PiFoKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5jbG9zZUNoYW5nZS5uZXh0KCl9KSl9aGFuZGxlQ2xpY2soYSl7dGhpcy5zbWFydE9wZW5TZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChhKSx0aGlzLnNtYXJ0RXZlbnRzU2Vy'@;
put 'dmljZS5zZXRBbmNob3JGb2N1cygpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuc21hcnRFdmVudHNTZXJ2aWNlLmNsb3NlQnV0dG9uUmVmPXRoaXMuZWxlbWVudFJlZix0aGlzLnNtYXJ0RXZlbnRzU2VydmljZS5zZXRDbG9zZUZvY3VzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlv'@;
put 'bnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChWaSkscnQoUTIpLHJ0KFFhKSl9LGwuXHUwMjc1ZGlyPVNyKHt0eXBlOmwsc2VsZWN0b3JzOltbIiIsImNsclBvcG92ZXJDbG9zZUJ1dHRvbiIs'@;
put 'IiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGYpezEmYSYmRXQoImNsaWNrIixmdW5jdGlvbihoKXtyZXR1cm4gZi5oYW5kbGVDbGljayhoKX0pLDImYSYmZ3IoImNsci1zbWFydC1jbG9zZS1idXR0b24iLCEwKX0sb3V0cHV0czp7Y2xvc2VDaGFuZ2U6ImNsclBvcG92'@;
put 'ZXJPbkNsb3NlQ2hhbmdlIn19KSxsfSkoKTt2YXIgU2M9ZnVuY3Rpb24obCl7cmV0dXJuIGxbbC5WRVJUSUNBTD0wXT0iVkVSVElDQUwiLGxbbC5IT1JJWk9OVEFMPTFdPSJIT1JJWk9OVEFMIixsfShTY3x8e30pLE5hPWZ1bmN0aW9uKGwpe3JldHVybiBsW2wuU1RBUlQ9MF09IlNUQVJUIixs'@;
put 'W2wuQ0VOVEVSPS41XT0iQ0VOVEVSIixsW2wuRU5EPTFdPSJFTkQiLGx9KE5hfHx7fSksaVM9ZnVuY3Rpb24obCl7cmV0dXJuIGxbbC5CT1RUT009MF09IkJPVFRPTSIsbFtsLkxFRlQ9MV09IkxFRlQiLGxbbC5SSUdIVD0yXT0iUklHSFQiLGxbbC5UT1A9M109IlRPUCIsbH0oaVN8fHt9KTtj'@;
put 'b25zdCBtND1sPT4oey4uLmwsc2lkZTotMSpsLnNpZGV9KSxlMz0obCxjKT0+e2NvbnN0IGE9bC5jb250ZW50KyhjPy41Oi0uNSk7cmV0dXJuIGE8MHx8YT4xP2w6ey4uLmwsY29udGVudDphfX07ZnVuY3Rpb24gZTcobCxjLGEpe3JldHVybiBmPT5jKGwoZiksYSl9ZnVuY3Rpb24gazEobCxj'@;
put 'LGEpe2xldCBmPWMubGVmdCxkPWMudG9wO3N3aXRjaChsLmF4aXMrbC5zaWRlKXtjYXNlLTE6Zis9cnNlKGwsYyxhKSxkLT1hLmhlaWdodDticmVhaztjYXNlIDE6Zis9cnNlKGwsYyxhKSxkKz1jLmhlaWdodDticmVhaztjYXNlIDA6Zi09YS53aWR0aCxkKz1pc2UobCxjLGEpO2JyZWFrO2Nh'@;
put 'c2UgMjpmKz1jLndpZHRoLGQrPWlzZShsLGMsYSl9cmV0dXJue3hPZmZzZXQ6Zix5T2Zmc2V0OmR9fWZ1bmN0aW9uIHJzZShsLGMsYSl7bGV0IGY9MDtzd2l0Y2gobC5hbmNob3Ipe2Nhc2UgTmEuU1RBUlQ6YnJlYWs7Y2FzZSBOYS5DRU5URVI6Zis9Yy53aWR0aC8yO2JyZWFrO2Nhc2UgTmEu'@;
put 'RU5EOmYrPWMud2lkdGh9c3dpdGNoKGwuY29udGVudCl7Y2FzZSBOYS5TVEFSVDpicmVhaztjYXNlIE5hLkNFTlRFUjpmLT1hLndpZHRoLzI7YnJlYWs7Y2FzZSBOYS5FTkQ6Zi09YS53aWR0aH1yZXR1cm4gZn1mdW5jdGlvbiBpc2UobCxjLGEpe2xldCBmPTA7c3dpdGNoKGwuYW5jaG9yKXtj'@;
put 'YXNlIE5hLlNUQVJUOmJyZWFrO2Nhc2UgTmEuQ0VOVEVSOmYrPWMuaGVpZ2h0LzI7YnJlYWs7Y2FzZSBOYS5FTkQ6Zis9Yy5oZWlnaHR9c3dpdGNoKGwuY29udGVudCl7Y2FzZSBOYS5TVEFSVDpicmVhaztjYXNlIE5hLkNFTlRFUjpmLT1hLmhlaWdodC8yO2JyZWFrO2Nhc2UgTmEuRU5EOmYt'@;
put 'PWEuaGVpZ2h0fXJldHVybiBmfWxldCB0Nz0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEsZil7dGhpcy5ldmVudFNlcnZpY2U9YSx0aGlzLnBsYXRmb3JtSWQ9Zix0aGlzLl9zaG91bGRSZWFsaWduPW5ldyB3ZSx0aGlzLnNob3VsZFJlYWxpZ249dGhpcy5fc2hvdWxkUmVhbGlnbi5hc09i'@;
put 'c2VydmFibGUoKX1yZWFsaWduKCl7dGhpcy5fc2hvdWxkUmVhbGlnbi5uZXh0KCl9YWxpZ25Db250ZW50KGEpe2lmKCFIYSh0aGlzLnBsYXRmb3JtSWQpKXJldHVybnt4T2Zmc2V0OjAseU9mZnNldDowfTt0aGlzLmN1cnJlbnRBbmNob3JDb29yZHM9dGhpcy5ldmVudFNlcnZpY2UuYW5jaG9y'@;
put 'QnV0dG9uUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcz1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMuY29udGVudE9mZnNldHM9azEodGhpcy5wb3NpdGlvbix0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhp'@;
put 'cy5jdXJyZW50Q29udGVudENvb3Jkcyk7Y29uc3QgZj1mdW5jdGlvbiBqRmUobCxjKXtjb25zdCBhPVtdLGZfYm90dG9tPWwueU9mZnNldCtjLmhlaWdodCxmX2xlZnQ9bC54T2Zmc2V0LGZfcmlnaHQ9bC54T2Zmc2V0K2Mud2lkdGg7cmV0dXJuIGwueU9mZnNldD49MHx8YS5wdXNoKGlTLlRP'@;
put 'UCksZl9sZWZ0Pj0wfHxhLnB1c2goaVMuTEVGVCksZl9ib3R0b208PSh3aW5kb3cuaW5uZXJIZWlnaHR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpfHxhLnB1c2goaVMuQk9UVE9NKSxmX3JpZ2h0PD0od2luZG93LmlubmVyV2lkdGh8fGRvY3VtZW50LmRvY3VtZW50'@;
put 'RWxlbWVudC5jbGllbnRXaWR0aCl8fGEucHVzaChpUy5SSUdIVCksYX0odGhpcy5jb250ZW50T2Zmc2V0cyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKSxkPWYucmVkdWNlKChoLG0pPT5oK20sMCk7cmV0dXJuIDE9PT1mLmxlbmd0aCYmdGhpcy5wb3NpdGlvbi5heGlzPT09U2MuVkVSVElD'@;
put 'QUw/dGhpcy5oYW5kbGVWZXJ0aWNhbEF4aXNPbmVWaW9sYXRpb24oZCk6MT09PWYubGVuZ3RoJiZ0aGlzLnBvc2l0aW9uLmF4aXM9PT1TYy5IT1JJWk9OVEFMP3RoaXMuaGFuZGxlSG9yaXpvbnRhbEF4aXNPbmVWaW9sYXRpb24oZCk6Mj09PWYubGVuZ3RoJiZ0aGlzLnBvc2l0aW9uLmF4aXM9'@;
put 'PT1TYy5WRVJUSUNBTD90aGlzLmhhbmRsZVZlcnRpY2FsQXhpc1R3b1Zpb2xhdGlvbnMoZCk6Mj09PWYubGVuZ3RoJiZ0aGlzLnBvc2l0aW9uLmF4aXM9PT1TYy5IT1JJWk9OVEFMJiZ0aGlzLmhhbmRsZUhvcml6b250YWxBeGlzVHdvVmlvbGF0aW9ucyhkKSx0aGlzLmNvbnRlbnRPZmZzZXRz'@;
put 'fWhhbmRsZVZlcnRpY2FsQXhpc09uZVZpb2xhdGlvbihhKXtzd2l0Y2goYSl7Y2FzZSAwOmNhc2UgMzp0aGlzLmNvbnRlbnRPZmZzZXRzPWsxKG00KHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVhaztjYXNlIDE6'@;
put 'dGhpcy5jb250ZW50T2Zmc2V0cz1rMSh0aGlzLnBvc2l0aW9uLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKSx0aGlzLmNvbnRlbnRPZmZzZXRzLnhPZmZzZXQ8MCYmKHRoaXMuY29udGVudE9mZnNldHMueE9mZnNldD0xMCk7YnJlYWs7Y2FzZSAy'@;
put 'OnRoaXMuY29udGVudE9mZnNldHM9azEoZTModGhpcy5wb3NpdGlvbiwhMCksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpfX1oYW5kbGVWZXJ0aWNhbEF4aXNUd29WaW9sYXRpb25zKGEpe3N3aXRjaChhKXtjYXNlIDU6e2NvbnN0IGY9ZTcobTQs'@;
put 'ZTMsITApO3RoaXMuY29udGVudE9mZnNldHM9azEoZih0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWt9Y2FzZSA0Ontjb25zdCBmPWU3KG00LGUzLCExKTt0aGlzLmNvbnRlbnRPZmZzZXRzPWsxKGYodGhpcy5w'@;
put 'b3NpdGlvbiksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpO2JyZWFrfWNhc2UgMzpkZWZhdWx0OmJyZWFrO2Nhc2UgMjp7Y29uc3QgZj1lNyhtNCxlMywhMCk7dGhpcy5jb250ZW50T2Zmc2V0cz1rMShmKHRoaXMucG9zaXRpb24pLHRoaXMuY3Vy'@;
put 'cmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVha31jYXNlIDE6e2NvbnN0IGY9ZTcobTQsZTMsITEpO3RoaXMuY29udGVudE9mZnNldHM9azEoZih0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENv'@;
put 'b3Jkcyk7YnJlYWt9fX1oYW5kbGVIb3Jpem9udGFsQXhpc09uZVZpb2xhdGlvbihhKXtzd2l0Y2goYSl7Y2FzZSAxOmNhc2UgMjp0aGlzLmNvbnRlbnRPZmZzZXRzPWsxKG00KHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRz'@;
put 'KTticmVhaztjYXNlIDA6dGhpcy5jb250ZW50T2Zmc2V0cz1rMShlMyh0aGlzLnBvc2l0aW9uLCEwKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWs7Y2FzZSAzOnRoaXMuY29udGVudE9mZnNldHM9azEoZTModGhpcy5wb3NpdGlvbiks'@;
put 'dGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpfX1oYW5kbGVIb3Jpem9udGFsQXhpc1R3b1Zpb2xhdGlvbnMoYSl7c3dpdGNoKGEpe2Nhc2UgNTpjYXNlIDQ6e2NvbnN0IGY9ZTcobTQsZTMsITEpO3RoaXMuY29udGVudE9mZnNldHM9azEoZih0aGlz'@;
put 'LnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWt9Y2FzZSAzOmRlZmF1bHQ6YnJlYWs7Y2FzZSAyOmNhc2UgMTp7Y29uc3QgZj1lNyhtNCxlMywhMCk7dGhpcy5jb250ZW50T2Zmc2V0cz1rMShmKHRoaXMucG9zaXRpb24p'@;
put 'LHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVha319fX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShzcihRMiksc3IocWEpKX0sbC5cdTAyNzVwcm92PWhyKHt0b2tlbjpsLGZhY3Rvcnk6bC5cdTAy'@;
put 'NzVmYWN9KSxsfSkoKSxvUz0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEsZixkLGgsbSxfLE8pe3RoaXMuZG9jdW1lbnQ9YSx0aGlzLmNvbnRhaW5lcj1mLHRoaXMudGVtcGxhdGU9ZCx0aGlzLnJlbmRlcmVyPWgsdGhpcy5zbWFydFBvc2l0aW9uU2VydmljZT1tLHRoaXMuc21hcnRFdmVu'@;
put 'dHNTZXJ2aWNlPV8sdGhpcy5zbWFydE9wZW5TZXJ2aWNlPU8sdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMucmVtb3ZlQ2xpY2tMaXN0ZW5lckZuPW51bGwsdGhpcy5zaG91bGRSZWFsaWduPSExLHRoaXMuY2hlY2tDb2xsZWN0b3I9bmV3IHhyfXNldCBvcGVuKGEpe3RoaXMuc21hcnRPcGVu'@;
put 'U2VydmljZS5vcGVuPSEhYX1zZXQgY29udGVudEF0KGEpe3RoaXMuc21hcnRQb3NpdGlvblNlcnZpY2UucG9zaXRpb249YX1zZXQgb3V0c2lkZUNsaWNrQ2xvc2UoYSl7dGhpcy5zbWFydEV2ZW50c1NlcnZpY2Uub3V0c2lkZUNsaWNrQ2xvc2U9ISFhfXNldCBzY3JvbGxUb0Nsb3NlKGEpe3Ro'@;
put 'aXMuc21hcnRFdmVudHNTZXJ2aWNlLnNjcm9sbFRvQ2xvc2U9ISFhfW5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpe3RoaXMuc21hcnRPcGVuU2VydmljZS5vcGVuJiZ0aGlzLnZpZXcmJnRoaXMuc2hvdWxkUmVhbGlnbiYmdGhpcy5jaGVja0NvbGxlY3Rvci5lbWl0KCl9bmdBZnRlclZpZXdJbml0'@;
put 'KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGE9PnthP3RoaXMuYWRkQ29udGVudCgpOnRoaXMucmVtb3ZlQ29udGVudCgpfSksdGhpcy5zbWFydFBvc2l0aW9uU2VydmljZS5zaG91bGRSZWFsaWduLnN1YnNjcmli'@;
put 'ZSgoKT0+e3RoaXMuc2hvdWxkUmVhbGlnbj0hMH0pLHRoaXMuY2hlY2tDb2xsZWN0b3IucGlwZShZdigwKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5hbGlnbkNvbnRlbnQoKSx0aGlzLnNob3VsZFJlYWxpZ249ITEsdGhpcy52aWV3JiZ0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudmlldy5y'@;
put 'b290Tm9kZXNbMF0sIm9wYWNpdHkiLCIxIil9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnJlbW92ZUNvbnRlbnQoKSx0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfWFkZENvbnRlbnQoKXt0aGlzLnZpZXc9dGhpcy5jb250YWluZXIuY3JlYXRlRW1iZWRkZWRW'@;
put 'aWV3KHRoaXMudGVtcGxhdGUpO2NvbnN0W2FdPXRoaXMudmlldy5yb290Tm9kZXM7dGhpcy5zbWFydEV2ZW50c1NlcnZpY2UuY29udGVudFJlZj1hLHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoYSwiY2xyLXBvcG92ZXItY29udGVudCIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoYSwidG9wIiwi'@;
put 'MHB4IiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZShhLCJsZWZ0IiwiMHB4IiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZShhLCJvcGFjaXR5IiwiMCIpLHRoaXMucmVtb3ZlQ2xpY2tMaXN0ZW5lckZuPXRoaXMucmVuZGVyZXIubGlzdGVuKGEsImNsaWNrIixmPT57dGhpcy5zbWFydE9wZW5TZXJ2'@;
put 'aWNlLm9wZW5FdmVudD1mfSksdGhpcy52aWV3LnJvb3ROb2Rlcy5mb3JFYWNoKGY9Pnt0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuZG9jdW1lbnQuYm9keSxmKX0pLHRoaXMuc2hvdWxkUmVhbGlnbj0hMH1yZW1vdmVDb250ZW50KCl7dGhpcy52aWV3JiYodGhpcy5yZW1vdmVDbGlj'@;
put 'a0xpc3RlbmVyRm4mJih0aGlzLnJlbW92ZUNsaWNrTGlzdGVuZXJGbigpLHRoaXMucmVtb3ZlQ2xpY2tMaXN0ZW5lckZuPW51bGwpLHRoaXMudmlldy5yb290Tm9kZXMuZm9yRWFjaChhPT50aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKHRoaXMuZG9jdW1lbnQuYm9keSxhKSksdGhpcy5jb250'@;
put 'YWluZXIuY2xlYXIoKSxkZWxldGUgdGhpcy52aWV3KX1hbGlnbkNvbnRlbnQoKXtpZighdGhpcy52aWV3KXJldHVybjtjb25zdCBhPXRoaXMuc21hcnRQb3NpdGlvblNlcnZpY2UuYWxpZ25Db250ZW50KHRoaXMudmlldy5yb290Tm9kZXNbMF0pO3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhp'@;
put 'cy52aWV3LnJvb3ROb2Rlc1swXSwidG9wIixgJHthLnlPZmZzZXR9cHhgKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudmlldy5yb290Tm9kZXNbMF0sImxlZnQiLGAke2EueE9mZnNldH1weGApLHRoaXMuc21hcnRPcGVuU2VydmljZS5wb3BvdmVyQWxpZ25lZEVtaXQodGhpcy52aWV3'@;
put 'LnJvb3ROb2Rlc1swXSl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHJ0KEZhKSxydChmYSkscnQoemwpLHJ0KGpvKSxydCh0NykscnQoUTIpLHJ0KFFhKSl9LGwuXHUwMjc1ZGlyPVNyKHt0eXBlOmwsc2VsZWN0b3JzOltbIiIsImNsclBvcG92ZXJD'@;
put 'b250ZW50IiwiIl1dLGlucHV0czp7b3BlbjpbImNsclBvcG92ZXJDb250ZW50Iiwib3BlbiJdLGNvbnRlbnRBdDpbImNsclBvcG92ZXJDb250ZW50QXQiLCJjb250ZW50QXQiXSxvdXRzaWRlQ2xpY2tDbG9zZTpbImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsIm91dHNp'@;
put 'ZGVDbGlja0Nsb3NlIl0sc2Nyb2xsVG9DbG9zZTpbImNsclBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9zZSIsInNjcm9sbFRvQ2xvc2UiXX19KSxsfSkoKSxhUz0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEpe3RoaXMuc21hcnRPcGVuU2VydmljZT1hLHRoaXMub3BlbkNsb3NlQ2hhbmdl'@;
put 'PW5ldyB4cix0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGY9Pnt0aGlzLm9wZW5DbG9zZUNoYW5nZS5uZXh0KGYpfSkpfWhhbmRsZUNsaWNrKGEpe3RoaXMuc21hcnRPcGVuU2Vy'@;
put 'dmljZS50b2dnbGVXaXRoRXZlbnQoYSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChRYSkpfSxsLlx1MDI3NWRpcj1Tcih7dHlwZTps'@;
put 'LHNlbGVjdG9yczpbWyIiLCJjbHJQb3BvdmVyT3BlbkNsb3NlQnV0dG9uIiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZil7MSZhJiZFdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3JldHVybiBmLmhhbmRsZUNsaWNrKGgpfSksMiZhJiZncigiY2xyLXNtYXJ0LW9wZW4t'@;
put 'Y2xvc2UiLCEwKX0sb3V0cHV0czp7b3BlbkNsb3NlQ2hhbmdlOiJjbHJQb3BvdmVyT3BlbkNsb3NlQ2hhbmdlIn19KSxsfSkoKSxsUz0oKCk9PntjbGFzcyBse31yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVtb2Q9RGkoe3R5cGU6bH0p'@;
put 'LGwuXHUwMjc1aW5qPXhpKHtpbXBvcnRzOltbXV19KSxsfSkoKTt2YXIgRTE9ZnVuY3Rpb24obCl7cmV0dXJuIGwuVVA9InVwIixsLkRPV049ImRvd24iLGwuTEVGVD0ibGVmdCIsbC5SSUdIVD0icmlnaHQiLGx9KEUxfHx7fSk7bGV0IHNTPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSl7'@;
put 'dGhpcy5yZW5kZXJlcj1hLHRoaXMuX3VubGlzdGVuRnVuY3M9W119Z2V0IGN1cnJlbnQoKXtyZXR1cm4gdGhpcy5fY3VycmVudH1yZXNldChhKXt0aGlzLl9jdXJyZW50PWF9bGlzdGVuVG9BcnJvd0tleXMoYSl7dGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVu'@;
put 'KGEsImtleWRvd24uYXJyb3d1cCIsKCk9PiF0aGlzLm1vdmUoRTEuVVApKSksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uYXJyb3dkb3duIiwoKT0+IXRoaXMubW92ZShFMS5ET1dOKSkpLHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0'@;
put 'aGlzLnJlbmRlcmVyLmxpc3RlbihhLCJrZXlkb3duLmFycm93bGVmdCIsKCk9PiF0aGlzLm1vdmUoRTEuTEVGVCkpKSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5hcnJvd3JpZ2h0IiwoKT0+IXRoaXMubW92ZShFMS5SSUdIVCkpKX1y'@;
put 'ZWdpc3RlckNvbnRhaW5lcihhLGY9IjAiKXt0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShhLCJ0YWJpbmRleCIsZiksdGhpcy5saXN0ZW5Ub0Fycm93S2V5cyhhKSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5zcGFjZSIsKCk9PiF0'@;
put 'aGlzLmFjdGl2YXRlQ3VycmVudCgpKSksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uZW50ZXIiLCgpPT4hdGhpcy5hY3RpdmF0ZUN1cnJlbnQoKSkpfW1vdmVUbyhhKXt2b2lkIDAhPT1hJiYodGhpcy5jdXJyZW50JiZ0aGlzLmN1cnJl'@;
put 'bnQuYmx1cigpLGEuZm9jdXMoKSx0aGlzLl9jdXJyZW50PWEpfW1vdmUoYSl7bGV0IGY9ITE7aWYodGhpcy5jdXJyZW50KXtjb25zdCBkPXRoaXMuY3VycmVudFthXTtkJiYoRWooZCk/ZDpHaShkKSkuc3Vic2NyaWJlKG09PnttJiYodGhpcy5tb3ZlVG8obSksZj0hMCl9KX1yZXR1cm4gZn1h'@;
put 'Y3RpdmF0ZUN1cnJlbnQoKXtyZXR1cm4hKCF0aGlzLmN1cnJlbnR8fCF0aGlzLmN1cnJlbnQuYWN0aXZhdGV8fCh0aGlzLmN1cnJlbnQuYWN0aXZhdGUoKSwwKSl9ZGV0YWNoTGlzdGVuZXJzKCl7dGhpcy5fdW5saXN0ZW5GdW5jcy5mb3JFYWNoKGE9PmEoKSl9fXJldHVybiBsLlx1MDI3NWZh'@;
put 'Yz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHNyKGpvKSl9LGwuXHUwMjc1cHJvdj1ocih7dG9rZW46bCxmYWN0b3J5OmwuXHUwMjc1ZmFjfSksbH0pKCk7Y29uc3QgbHNlPXtwcm92aWRlOnNTLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gekZlKGwsYyl7cmV0dXJuIGx8fG5ldyBzUyhjKX0s'@;
put 'ZGVwczpbW25ldyBjaCxuZXcgRTAsc1NdLGpvXX07dmFyIHhmPWZ1bmN0aW9uKGwpe3JldHVybiBsW2wuQkVGT1JFPS0xXT0iQkVGT1JFIixsW2wuQUZURVI9MV09IkFGVEVSIixsfSh4Znx8e30pO2NsYXNzIFAwe31QMFsidG9wLXJpZ2h0Il09e2F4aXM6U2MuVkVSVElDQUwsc2lkZTp4Zi5C'@;
put 'RUZPUkUsYW5jaG9yOk5hLkVORCxjb250ZW50Ok5hLkVORH0sUDBbInRvcC1sZWZ0Il09e2F4aXM6U2MuVkVSVElDQUwsc2lkZTp4Zi5CRUZPUkUsYW5jaG9yOk5hLlNUQVJULGNvbnRlbnQ6TmEuU1RBUlR9LFAwWyJib3R0b20tcmlnaHQiXT17YXhpczpTYy5WRVJUSUNBTCxzaWRlOnhmLkFG'@;
put 'VEVSLGFuY2hvcjpOYS5FTkQsY29udGVudDpOYS5FTkR9LFAwWyJib3R0b20tbGVmdCJdPXtheGlzOlNjLlZFUlRJQ0FMLHNpZGU6eGYuQUZURVIsYW5jaG9yOk5hLlNUQVJULGNvbnRlbnQ6TmEuU1RBUlR9LFAwWyJyaWdodC10b3AiXT17YXhpczpTYy5IT1JJWk9OVEFMLHNpZGU6eGYuQUZU'@;
put 'RVIsYW5jaG9yOk5hLkNFTlRFUixjb250ZW50Ok5hLkVORH0sUDBbInJpZ2h0LWJvdHRvbSJdPXtheGlzOlNjLkhPUklaT05UQUwsc2lkZTp4Zi5BRlRFUixhbmNob3I6TmEuU1RBUlQsY29udGVudDpOYS5TVEFSVH0sUDBbImxlZnQtdG9wIl09e2F4aXM6U2MuSE9SSVpPTlRBTCxzaWRlOnhm'@;
put 'LkJFRk9SRSxhbmNob3I6TmEuQ0VOVEVSLGNvbnRlbnQ6TmEuRU5EfSxQMFsibGVmdC1ib3R0b20iXT17YXhpczpTYy5IT1JJWk9OVEFMLHNpZGU6eGYuQkVGT1JFLGFuY2hvcjpOYS5TVEFSVCxjb250ZW50Ok5hLlNUQVJUfTtjbGFzcyB3VXtzdGF0aWMgbGlua1BhcmVudChjLGEsZil7Yy5m'@;
put 'b3JFYWNoKGQ9PmRbZl09YSl9c3RhdGljIGxpbmtWZXJ0aWNhbChjLGE9ITApe2MuZm9yRWFjaCgoZixkKT0+e2Q+MCYmKGYudXA9Y1tkLTFdKSxkPGMubGVuZ3RoLTEmJihmLmRvd249Y1tkKzFdKX0pLGEmJmMubGVuZ3RoPjEmJihjWzBdLnVwPWNbYy5sZW5ndGgtMV0sY1tjLmxlbmd0aC0x'@;
put 'XS5kb3duPWNbMF0pfX1sZXQgeDE9KCgpPT57Y2xhc3MgbHt1c2VyRGVmaW5lZFdpZHRoKGEpe2EuY2xhc3NMaXN0LmFkZCgiZGF0YWdyaWQtY2VsbC13aWR0aC16ZXJvIik7Y29uc3QgZj10aGlzLmNsaWVudFJlY3QoYSkud2lkdGg7cmV0dXJuIGEuY2xhc3NMaXN0LnJlbW92ZSgiZGF0YWdy'@;
put 'aWQtY2VsbC13aWR0aC16ZXJvIiksZn1zY3JvbGxCYXJXaWR0aChhKXtyZXR1cm4gYS5vZmZzZXRXaWR0aC1hLmNsaWVudFdpZHRofXNjcm9sbFdpZHRoKGEpe3JldHVybiBhLnNjcm9sbFdpZHRofHwwfWNvbXB1dGVkSGVpZ2h0KGEpe3JldHVybiBwYXJzZUludChnZXRDb21wdXRlZFN0eWxl'@;
put 'KGEpLmdldFByb3BlcnR5VmFsdWUoImhlaWdodCIpLDEwKX1jbGllbnRSZWN0KGEpe2NvbnN0IGY9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57dG9wOnBhcnNlSW50KGYudG9wLDEwKSxib3R0b206cGFyc2VJbnQoZi5ib3R0b20sMTApLGxlZnQ6cGFyc2VJbnQoZi5sZWZ0LDEw'@;
put 'KSxyaWdodDpwYXJzZUludChmLnJpZ2h0LDEwKSx3aWR0aDpwYXJzZUludChmLndpZHRoLDEwKSxoZWlnaHQ6cGFyc2VJbnQoZi5oZWlnaHQsMTApfX1taW5XaWR0aChhKXtyZXR1cm4gcGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZShhKS5nZXRQcm9wZXJ0eVZhbHVlKCJtaW4td2lkdGgiKSwx'@;
put 'MCl9Zm9jdXMoYSl7YS5mb2N1cygpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVwcm92PWhyKHt0b2tlbjpsLGZhY3Rvcnk6bC5cdTAyNzVmYWN9KSxsfSkoKSxYRD0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEsZil7dGhpcy5l'@;
put 'bGVtZW50PWEsdGhpcy5kb21BZGFwdGVyPWYsdGhpcy5zdGFydEhlaWdodD0wfWdldCBleHBhbmRBbmltYXRpb24oKXtyZXR1cm57dmFsdWU6dGhpcy5jbHJFeHBhbmRUcmlnZ2VyLHBhcmFtczp7c3RhcnRIZWlnaHQ6dGhpcy5zdGFydEhlaWdodH19fWFuaW1hdGlvbkRvbmUoKXt0aGlzLnVw'@;
put 'ZGF0ZVN0YXJ0SGVpZ2h0KCl9dXBkYXRlU3RhcnRIZWlnaHQoKXt0aGlzLnN0YXJ0SGVpZ2h0PXRoaXMuZG9tQWRhcHRlci5jb21wdXRlZEhlaWdodCh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCl8fDB9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwp'@;
put 'KHJ0KFZpKSxydCh4MSkpfSxsLlx1MDI3NWNtcD1rcih7dHlwZTpsLHNlbGVjdG9yczpbWyJjbHItZXhwYW5kYWJsZS1hbmltYXRpb24iXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxmKXsxJmEmJkZ3KCJAZXhwYW5kQW5pbWF0aW9uLmRvbmUiLGZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIGYuYW5pbWF0aW9uRG9uZSgpfSksMiZhJiZfZygiQGV4cGFuZEFuaW1hdGlvbiIsZi5leHBhbmRBbmltYXRpb24pfSxpbnB1dHM6e2NsckV4cGFuZFRyaWdnZXI6ImNsckV4cGFuZFRyaWdnZXIifSxmZWF0dXJlczpbcmkoW3gxXSldLG5nQ29udGVudFNlbGVjdG9yczpPbyxkZWNsczox'@;
put 'LHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGYpezEmYSYmKFRpKCksRHIoMCkpfSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6YmxvY2s7b3ZlcmZsb3c6aGlkZGVufSJdLGRhdGE6e2FuaW1hdGlvbjpbQzEoImV4cGFuZEFuaW1hdGlvbiIsW2J1KCJ0cnVlIDw9PiBmYWxz'@;
put 'ZSIsW0NhKHtoZWlnaHQ6Int7c3RhcnRIZWlnaHR9fXB4In0pLGNjKCIwLjJzIGVhc2UtaW4tb3V0IixDYSh7aGVpZ2h0OiIqIn0pKV0pXSldfX0pLGx9KSgpLENVPSgoKT0+e2NsYXNzIGx7fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3'@;
put 'NW1vZD1EaSh7dHlwZTpsfSksbC5cdTAyNzVpbmo9eGkoe2ltcG9ydHM6W1tib11dfSksbH0pKCksVUZlPTA7Y29uc3Qgcjc9bmV3IE1pKCJJRl9BQ1RJVkVfSUQiKSxZRmU9e3Byb3ZpZGU6cjcsdXNlRmFjdG9yeTpmdW5jdGlvbiBaRmUoKXtyZXR1cm4rK1VGZX19O2xldCBZZz0oKCk9Pntj'@;
put 'bGFzcyBse2NvbnN0cnVjdG9yKCl7dGhpcy5fY3VycmVudENoYW5nZT1uZXcgd2V9Z2V0IGN1cnJlbnRDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fY3VycmVudENoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgY3VycmVudCgpe3JldHVybiB0aGlzLl9jdXJyZW50fXNldCBjdXJyZW50KGEpe3RoaXMu'@;
put 'X2N1cnJlbnQhPT1hJiYodGhpcy5fY3VycmVudD1hLHRoaXMuX2N1cnJlbnRDaGFuZ2UubmV4dChhKSl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmwsZmFjdG9yeTpsLlx1MDI3NWZhY30pLGx9KSgpLHVT'@;
put 'PSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmLGQsaCl7dGhpcy5pZkFjdGl2ZVNlcnZpY2U9YSx0aGlzLmlkPWYsdGhpcy50ZW1wbGF0ZT1kLHRoaXMuY29udGFpbmVyPWgsdGhpcy5hY3RpdmVDaGFuZ2U9bmV3IHhyKCExKSx0aGlzLndhc0FjdGl2ZT0hMSx0aGlzLmNoZWNrQW5kVXBk'@;
put 'YXRlVmlldyhhLmN1cnJlbnQpLHRoaXMuc3Vic2NyaXB0aW9uPXRoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnRDaGFuZ2Uuc3Vic2NyaWJlKG09Pnt0aGlzLmNoZWNrQW5kVXBkYXRlVmlldyhtKX0pfWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5pZkFjdGl2ZVNlcnZpY2UuY3VycmVudD09'@;
put 'PXRoaXMuaWR9c2V0IGFjdGl2ZShhKXthJiYodGhpcy5pZkFjdGl2ZVNlcnZpY2UuY3VycmVudD10aGlzLmlkKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9dXBkYXRlVmlldyhhKXthP3RoaXMuY29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlz'@;
put 'LnRlbXBsYXRlKTp0aGlzLmNvbnRhaW5lci5jbGVhcigpfWNoZWNrQW5kVXBkYXRlVmlldyhhKXtjb25zdCBmPWE9PT10aGlzLmlkO2YhPT10aGlzLndhc0FjdGl2ZSYmKHRoaXMudXBkYXRlVmlldyhmKSx0aGlzLmFjdGl2ZUNoYW5nZS5lbWl0KGYpLHRoaXMud2FzQWN0aXZlPWYpfX1yZXR1'@;
put 'cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChZZykscnQocjcpLHJ0KHpsKSxydChmYSkpfSxsLlx1MDI3NWRpcj1Tcih7dHlwZTpsLHNlbGVjdG9yczpbWyIiLCJjbHJJZkFjdGl2ZSIsIiJdXSxpbnB1dHM6e2FjdGl2ZTpbImNscklmQWN0aXZlIiwiYWN0'@;
put 'aXZlIl19LG91dHB1dHM6e2FjdGl2ZUNoYW5nZToiY2xySWZBY3RpdmVDaGFuZ2UifX0pLGx9KSgpLHhkPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmLGQpe3RoaXMudG9nZ2xlU2VydmljZT1hLHRoaXMudGVtcGxhdGU9Zix0aGlzLmNvbnRhaW5lcj1kLHRoaXMub3BlbkNoYW5nZT1u'@;
put 'ZXcgeHIoITEpLHRoaXMuc3Vic2NyaXB0aW9uPXRoaXMudG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShoPT57dGhpcy51cGRhdGVWaWV3KGgpLHRoaXMub3BlbkNoYW5nZS5lbWl0KGgpfSl9Z2V0IG9wZW4oKXtyZXR1cm4gdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW59c2V0IG9w'@;
put 'ZW4oYSl7dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49YX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9dXBkYXRlVmlldyhhKXthP3RoaXMuY29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRlbXBsYXRlKTp0aGlzLmNvbnRhaW5lci5jbGVhcigp'@;
put 'fX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChRYSkscnQoemwpLHJ0KGZhKSl9LGwuXHUwMjc1ZGlyPVNyKHt0eXBlOmwsc2VsZWN0b3JzOltbIiIsImNscklmT3BlbiIsIiJdXSxpbnB1dHM6e29wZW46WyJjbHJJZk9wZW4iLCJvcGVuIl19LG91'@;
put 'dHB1dHM6e29wZW5DaGFuZ2U6ImNscklmT3BlbkNoYW5nZSJ9fSksbH0pKCksc3NlPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmLGQsaCxtKXt0aGlzLnRlbXBsYXRlPWEsdGhpcy5jb250YWluZXI9Zix0aGlzLmVsPWQsdGhpcy5yZW5kZXJlcj1oLHRoaXMuZXhwYW5kPW0sdGhpcy5l'@;
put 'eHBhbmRlZENoYW5nZT1uZXcgeHIoITApLHRoaXMuX2V4cGFuZGVkPSExLHRoaXMuX3N1YnNjcmlwdGlvbnM9W10sdGhpcy5fc3Vic2NyaXB0aW9ucy5wdXNoKG0uZXhwYW5kQ2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMudXBkYXRlVmlldygpLHRoaXMuZXhwYW5kZWRDaGFuZ2UuZW1pdCh0'@;
put 'aGlzLmV4cGFuZC5leHBhbmRlZCl9KSl9Z2V0IGV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuX2V4cGFuZGVkfXNldCBleHBhbmRlZChhKXsiYm9vbGVhbiI9PXR5cGVvZiBhJiYodGhpcy5leHBhbmQuZXhwYW5kZWQ9YSx0aGlzLl9leHBhbmRlZD1hKX1uZ09uSW5pdCgpe3RoaXMuZXhwYW5kLmV4'@;
put 'cGFuZGFibGUrKyx0aGlzLnVwZGF0ZVZpZXcoKX1uZ09uRGVzdHJveSgpe3RoaXMuZXhwYW5kLmV4cGFuZGFibGUtLSx0aGlzLl9zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX11cGRhdGVWaWV3KCl7aWYoIXRoaXMuZXhwYW5kLmV4cGFuZGVkfHwwPT09dGhpcy5j'@;
put 'b250YWluZXIubGVuZ3RoKWlmKHRoaXMudGVtcGxhdGUpdGhpcy5leHBhbmQuZXhwYW5kZWQ/dGhpcy5jb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGUpOnRoaXMuY29udGFpbmVyLmNsZWFyKCk7ZWxzZSB0cnl7dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVs'@;
put 'Lm5hdGl2ZUVsZW1lbnQsImRpc3BsYXkiLHRoaXMuZXhwYW5kLmV4cGFuZGVkP251bGw6Im5vbmUiKX1jYXRjaHt9fX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydCh6bCw4KSxydChmYSkscnQoVmkpLHJ0KGpvKSxydChRYykpfSxsLlx1MDI3NWRp'@;
put 'cj1Tcih7dHlwZTpsLHNlbGVjdG9yczpbWyIiLCJjbHJJZkV4cGFuZGVkIiwiIl1dLGlucHV0czp7ZXhwYW5kZWQ6WyJjbHJJZkV4cGFuZGVkIiwiZXhwYW5kZWQiXX0sb3V0cHV0czp7ZXhwYW5kZWRDaGFuZ2U6ImNscklmRXhwYW5kZWRDaGFuZ2UifX0pLGx9KSgpLEFmPSgoKT0+e2NsYXNz'@;
put 'IGx7fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NW1vZD1EaSh7dHlwZTpsfSksbC5cdTAyNzVpbmo9eGkoe2ltcG9ydHM6W1tib11dfSksbH0pKCk7Y2xhc3MgdDN7Y29uc3RydWN0b3IoYyl7dGhpcy5kcmFnUG9zaXRpb249Yy5kcmFn'@;
put 'UG9zaXRpb24sdGhpcy5ncm91cD1jLmdyb3VwLHRoaXMuZHJhZ0RhdGFUcmFuc2Zlcj1jLmRyYWdEYXRhVHJhbnNmZXIsdGhpcy5kcm9wUG9pbnRQb3NpdGlvbj1jLmRyb3BQb2ludFBvc2l0aW9ufX12YXIgRjA9ZnVuY3Rpb24obCl7cmV0dXJuIGxbbC5EUkFHX1NUQVJUPTBdPSJEUkFHX1NU'@;
put 'QVJUIixsW2wuRFJBR19NT1ZFPTFdPSJEUkFHX01PVkUiLGxbbC5EUkFHX0VORD0yXT0iRFJBR19FTkQiLGxbbC5EUkFHX0VOVEVSPTNdPSJEUkFHX0VOVEVSIixsW2wuRFJBR19MRUFWRT00XT0iRFJBR19MRUFWRSIsbFtsLkRST1A9NV09IkRST1AiLGx9KEYwfHx7fSk7bGV0IHVzZT0oKCk9'@;
put 'PntjbGFzcyBse2NvbnN0cnVjdG9yKCl7dGhpcy5kcmFnU3RhcnQ9bmV3IHdlLHRoaXMuZHJhZ01vdmU9bmV3IHdlLHRoaXMuZHJhZ0VuZD1uZXcgd2UsdGhpcy5kcm9wPW5ldyB3ZX1nZXQgZHJhZ1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5kcmFnU3RhcnQuYXNPYnNlcnZhYmxlKCl9Z2V0IGRy'@;
put 'YWdNb3ZlZCgpe3JldHVybiB0aGlzLmRyYWdNb3ZlLmFzT2JzZXJ2YWJsZSgpfWdldCBkcmFnRW5kZWQoKXtyZXR1cm4gdGhpcy5kcmFnRW5kLmFzT2JzZXJ2YWJsZSgpfWdldCBkcm9wcGVkKCl7cmV0dXJuIHRoaXMuZHJvcC5hc09ic2VydmFibGUoKX1icm9hZGNhc3QoYSl7c3dpdGNoKGEu'@;
put 'dHlwZSl7Y2FzZSBGMC5EUkFHX1NUQVJUOnRoaXMuZHJhZ1N0YXJ0Lm5leHQoYSk7YnJlYWs7Y2FzZSBGMC5EUkFHX01PVkU6dGhpcy5kcmFnTW92ZS5uZXh0KGEpO2JyZWFrO2Nhc2UgRjAuRFJBR19FTkQ6dGhpcy5kcmFnRW5kLm5leHQoYSk7YnJlYWs7Y2FzZSBGMC5EUk9QOnRoaXMuZHJv'@;
put 'cC5uZXh0KGEpfX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1cHJvdj1ocih7dG9rZW46bCxmYWN0b3J5OmwuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbH0pKCksY1M9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhLGYs'@;
put 'ZCl7dGhpcy5uZ1pvbmU9YSx0aGlzLnJlbmRlcmVyPWYsdGhpcy5ldmVudEJ1cz1kLHRoaXMuZHJhZ1N0YXJ0RGVsYXk9MCx0aGlzLmhhc0RyYWdTdGFydGVkPSExLHRoaXMuZHJhZ1N0YXJ0PW5ldyB3ZSx0aGlzLmRyYWdNb3ZlPW5ldyB3ZSx0aGlzLmRyYWdFbmQ9bmV3IHdlLHRoaXMubGlz'@;
put 'dGVuZXJzPVtdfWdldCBkcmFnU3RhcnRlZCgpe3JldHVybiB0aGlzLmRyYWdTdGFydC5hc09ic2VydmFibGUoKX1nZXQgZHJhZ01vdmVkKCl7cmV0dXJuIHRoaXMuZHJhZ01vdmUuYXNPYnNlcnZhYmxlKCl9Z2V0IGRyYWdFbmRlZCgpe3JldHVybiB0aGlzLmRyYWdFbmQuYXNPYnNlcnZhYmxl'@;
put 'KCl9Z2V0IGRyYWdTdGFydFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuaW5pdGlhbFBvc2l0aW9ufWF0dGFjaERyYWdMaXN0ZW5lcnMoYSl7dGhpcy5kcmFnZ2FibGVFbD1hLHRoaXMubGlzdGVuZXJzLnB1c2godGhpcy5jdXN0b21EcmFnRXZlbnQodGhpcy5kcmFnZ2FibGVFbCwibW91c2Vkb3du'@;
put 'IiwibW91c2Vtb3ZlIiwibW91c2V1cCIpKSx0aGlzLmxpc3RlbmVycy5wdXNoKHRoaXMuY3VzdG9tRHJhZ0V2ZW50KHRoaXMuZHJhZ2dhYmxlRWwsInRvdWNoc3RhcnQiLCJ0b3VjaG1vdmUiLCJ0b3VjaGVuZCIpKX1kZXRhY2hEcmFnTGlzdGVuZXJzKCl7dGhpcy5saXN0ZW5lcnMmJnRoaXMu'@;
put 'bGlzdGVuZXJzLm1hcChhPT5hKCkpLHRoaXMubmVzdGVkTGlzdGVuZXJzJiZ0aGlzLm5lc3RlZExpc3RlbmVycy5tYXAoYT0+YSgpKSx0aGlzLmNoZWNrRHJhZ1N0YXJ0Qm91bmRhcnlMaXN0ZW5lciYmdGhpcy5jaGVja0RyYWdTdGFydEJvdW5kYXJ5TGlzdGVuZXIoKX1nZXROYXRpdmVFdmVu'@;
put 'dE9iamVjdChhKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsImNoYW5nZWRUb3VjaGVzIik/YS5jaGFuZ2VkVG91Y2hlc1swXTphfWN1c3RvbURyYWdFdmVudChhLGYsZCxoKXtyZXR1cm4gdGhpcy5yZW5kZXJlci5saXN0ZW4oYSxmLG09Pnt0aGlzLmlu'@;
put 'aXRpYWxQb3NpdGlvbj17cGFnZVg6dGhpcy5nZXROYXRpdmVFdmVudE9iamVjdChtKS5wYWdlWCxwYWdlWTp0aGlzLmdldE5hdGl2ZUV2ZW50T2JqZWN0KG0pLnBhZ2VZfSx0aGlzLm5lc3RlZExpc3RlbmVycz1bXSx0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMubmVz'@;
put 'dGVkTGlzdGVuZXJzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oImRvY3VtZW50Iiwic2VsZWN0c3RhcnQiLF89PntfLnByZXZlbnREZWZhdWx0KCksXy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX0pKSx0aGlzLmNoZWNrRHJhZ1N0YXJ0Qm91bmRhcnkoZCksdGhpcy5kcmFnU3RhcnRE'@;
put 'ZWxheVRpbWVvdXQ9c2V0VGltZW91dCgoKT0+e3RoaXMuY2hlY2tEcmFnU3RhcnRCb3VuZGFyeUxpc3RlbmVyJiZ0aGlzLmNoZWNrRHJhZ1N0YXJ0Qm91bmRhcnlMaXN0ZW5lcigpLHRoaXMuaGFzRHJhZ1N0YXJ0ZWQ9ITAsdGhpcy5icm9hZGNhc3QobSxGMC5EUkFHX1NUQVJUKSx0aGlzLm5l'@;
put 'c3RlZExpc3RlbmVycy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKCJkb2N1bWVudCIsZCxfPT57Xy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSx0aGlzLmhhc0RyYWdTdGFydGVkJiZ0aGlzLmJyb2FkY2FzdChfLEYwLkRSQUdfTU9WRSl9KSl9LHRoaXMuZHJhZ1N0YXJ0RGVsYXkpfSks'@;
put 'dGhpcy5uZXN0ZWRMaXN0ZW5lcnMucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbigiZG9jdW1lbnQiLGgsXz0+e3RoaXMuaGFzRHJhZ1N0YXJ0ZWQmJih0aGlzLmhhc0RyYWdTdGFydGVkPSExLHRoaXMuYnJvYWRjYXN0KF8sRjAuRFJBR19FTkQpKSxjbGVhclRpbWVvdXQodGhpcy5kcmFnU3Rh'@;
put 'cnREZWxheVRpbWVvdXQpLHRoaXMubmVzdGVkTGlzdGVuZXJzLm1hcChPPT5PKCkpLHRoaXMuY2hlY2tEcmFnU3RhcnRCb3VuZGFyeUxpc3RlbmVyJiZ0aGlzLmNoZWNrRHJhZ1N0YXJ0Qm91bmRhcnlMaXN0ZW5lcigpfSkpfSl9Y2hlY2tEcmFnU3RhcnRCb3VuZGFyeShhKXt0aGlzLmNoZWNr'@;
put 'RHJhZ1N0YXJ0Qm91bmRhcnlMaXN0ZW5lcj10aGlzLnJlbmRlcmVyLmxpc3RlbigiZG9jdW1lbnQiLGEsZj0+e2NvbnN0IGQ9TWF0aC5hYnModGhpcy5nZXROYXRpdmVFdmVudE9iamVjdChmKS5wYWdlWC10aGlzLmluaXRpYWxQb3NpdGlvbi5wYWdlWCksaD1NYXRoLmFicyh0aGlzLmdldE5h'@;
put 'dGl2ZUV2ZW50T2JqZWN0KGYpLnBhZ2VZLXRoaXMuaW5pdGlhbFBvc2l0aW9uLnBhZ2VZKTsoZD4xfHxoPjEpJiYoY2xlYXJUaW1lb3V0KHRoaXMuZHJhZ1N0YXJ0RGVsYXlUaW1lb3V0KSx0aGlzLmNoZWNrRHJhZ1N0YXJ0Qm91bmRhcnlMaXN0ZW5lciYmdGhpcy5jaGVja0RyYWdTdGFydEJv'@;
put 'dW5kYXJ5TGlzdGVuZXIoKSl9KX1icm9hZGNhc3QoYSxmKXtjb25zdCBkPXRoaXMuZ2VuZXJhdGVEcmFnRXZlbnQoYSxmKTtzd2l0Y2goZC50eXBlKXtjYXNlIEYwLkRSQUdfU1RBUlQ6dGhpcy5kcmFnU3RhcnQubmV4dChkKTticmVhaztjYXNlIEYwLkRSQUdfTU9WRTp0aGlzLmRyYWdNb3Zl'@;
put 'Lm5leHQoZCk7YnJlYWs7Y2FzZSBGMC5EUkFHX0VORDp0aGlzLmRyYWdFbmQubmV4dChkKX1kLmdob3N0RWxlbWVudD10aGlzLmdob3N0RWxlbWVudCxkLmRyb3BQb2ludFBvc2l0aW9uPXRoaXMuZHJvcFBvaW50UG9zaXRpb24sdGhpcy5ldmVudEJ1cy5icm9hZGNhc3QoZCl9Z2VuZXJhdGVE'@;
put 'cmFnRXZlbnQoYSxmKXtjb25zdCBkPXRoaXMuZ2V0TmF0aXZlRXZlbnRPYmplY3QoYSk7cmV0dXJue3R5cGU6ZixkcmFnUG9zaXRpb246e3BhZ2VYOmQucGFnZVgscGFnZVk6ZC5wYWdlWSxtb3ZlWDpkLnBhZ2VYLXRoaXMuaW5pdGlhbFBvc2l0aW9uLnBhZ2VYLG1vdmVZOmQucGFnZVktdGhp'@;
put 'cy5pbml0aWFsUG9zaXRpb24ucGFnZVl9LGdyb3VwOnRoaXMuZ3JvdXAsZHJhZ0RhdGFUcmFuc2Zlcjp0aGlzLmRyYWdEYXRhVHJhbnNmZXIsZ2hvc3RFbGVtZW50OnRoaXMuZ2hvc3RFbGVtZW50fX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkoc3Io'@;
put 'VW8pLHNyKGpvKSxzcih1c2UpKX0sbC5cdTAyNzVwcm92PWhyKHt0b2tlbjpsLGZhY3Rvcnk6bC5cdTAyNzVmYWN9KSxsfSkoKSxTVT0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEpe3RoaXMuZG9tQWRhcHRlcj1hfWdldCBoYXNEcmFnZ2FibGVTdGF0ZSgpe3JldHVybiEhdGhpcy5zbmFw'@;
put 'c2hvdERyYWdFdmVudCYmISF0aGlzLmRyYWdnYWJsZUVsQ2xpZW50UmVjdH1nZXQgY2xpZW50UmVjdCgpe3JldHVybiB0aGlzLmRyYWdnYWJsZUVsQ2xpZW50UmVjdH1nZXQgZHJhZ0V2ZW50KCl7cmV0dXJuIHRoaXMuc25hcHNob3REcmFnRXZlbnR9Y2FwdHVyZShhLGYpe3RoaXMuZHJhZ2dh'@;
put 'YmxlRWxDbGllbnRSZWN0PXRoaXMuZG9tQWRhcHRlci5jbGllbnRSZWN0KGEpLHRoaXMuc25hcHNob3REcmFnRXZlbnQ9Zn1kaXNjYXJkKCl7ZGVsZXRlIHRoaXMuZHJhZ2dhYmxlRWxDbGllbnRSZWN0LGRlbGV0ZSB0aGlzLnNuYXBzaG90RHJhZ0V2ZW50fX1yZXR1cm4gbC5cdTAyNzVmYWM9'@;
put 'ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShzcih4MSkpfSxsLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmwsZmFjdG9yeTpsLlx1MDI3NWZhY30pLGx9KSgpLGNzZT0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEsZixkLGgsbSl7aWYodGhpcy5lbD1hLHRoaXMuZHJhZ0V2ZW50TGlzdGVu'@;
put 'ZXI9Zix0aGlzLmRyYWdnYWJsZVNuYXBzaG90PWQsdGhpcy5yZW5kZXJlcj1oLHRoaXMubmdab25lPW0sdGhpcy5sZWF2ZUFuaW1Db25maWc9e3ZhbHVlOjAscGFyYW1zOnt0b3A6IjBweCIsbGVmdDoiMHB4In19LHRoaXMuc3Vic2NyaXB0aW9ucz1bXSwhdGhpcy5kcmFnRXZlbnRMaXN0ZW5l'@;
put 'cnx8IXRoaXMuZHJhZ2dhYmxlU25hcHNob3QpdGhyb3cgbmV3IEVycm9yKCJUaGUgY2xyLWRyYWdnYWJsZS1naG9zdCBjb21wb25lbnQgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgYSBjbHJEcmFnZ2FibGUgZGlyZWN0aXZlLiIpO3RoaXMuZHJhZ2dhYmxlR2hvc3RFbD10aGlzLmVsLm5h'@;
put 'dGl2ZUVsZW1lbnQsdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmRyYWdnYWJsZUdob3N0RWwsImRyYWdnYWJsZS1naG9zdCIpLHRoaXMuZHJhZ0V2ZW50TGlzdGVuZXIuZ2hvc3RFbGVtZW50PXRoaXMuZHJhZ2dhYmxlR2hvc3RFbCx0aGlzLnNldERlZmF1bHRHaG9zdFNpemUodGhpcy5k'@;
put 'cmFnZ2FibGVHaG9zdEVsKTtjb25zdCBfPXt0b3A6dGhpcy5kcmFnZ2FibGVTbmFwc2hvdC5oYXNEcmFnZ2FibGVTdGF0ZT90aGlzLmRyYWdnYWJsZVNuYXBzaG90LmRyYWdFdmVudC5kcmFnUG9zaXRpb24ucGFnZVktdGhpcy5kcmFnZ2FibGVTbmFwc2hvdC5jbGllbnRSZWN0LnRvcDowLGxl'@;
put 'ZnQ6dGhpcy5kcmFnZ2FibGVTbmFwc2hvdC5oYXNEcmFnZ2FibGVTdGF0ZT90aGlzLmRyYWdnYWJsZVNuYXBzaG90LmRyYWdFdmVudC5kcmFnUG9zaXRpb24ucGFnZVgtdGhpcy5kcmFnZ2FibGVTbmFwc2hvdC5jbGllbnRSZWN0LmxlZnQ6MH07bGV0IE89ITE7dGhpcy5zdWJzY3JpcHRpb25z'@;
put 'LnB1c2godGhpcy5kcmFnRXZlbnRMaXN0ZW5lci5kcmFnTW92ZWQuc3Vic2NyaWJlKFg9PntPfHwodGhpcy5kcmFnZ2FibGVTbmFwc2hvdC5oYXNEcmFnZ2FibGVTdGF0ZT90aGlzLmFuaW1hdGVUb09uTGVhdmUoYCR7dGhpcy5kcmFnZ2FibGVTbmFwc2hvdC5jbGllbnRSZWN0LnRvcH1weGAs'@;
put 'YCR7dGhpcy5kcmFnZ2FibGVTbmFwc2hvdC5jbGllbnRSZWN0LmxlZnR9cHhgKTp0aGlzLmFuaW1hdGVUb09uTGVhdmUoYCR7dGhpcy5kcmFnRXZlbnRMaXN0ZW5lci5kcmFnU3RhcnRQb3NpdGlvbi5wYWdlWX1weGAsYCR7dGhpcy5kcmFnRXZlbnRMaXN0ZW5lci5kcmFnU3RhcnRQb3NpdGlv'@;
put 'bi5wYWdlWX1weGApLE89ITApO2NvbnN0IGFlPXRoaXMuZmluZFRvcExlZnRQb3NpdGlvbihYLmRyYWdQb3NpdGlvbixfKTt0aGlzLnNldFBvc2l0aW9uU3R5bGUodGhpcy5kcmFnZ2FibGVHaG9zdEVsLGFlLnBhZ2VYLGFlLnBhZ2VZKSx0aGlzLmRyYWdFdmVudExpc3RlbmVyLmRyb3BQb2lu'@;
put 'dFBvc2l0aW9uPXRoaXMuZmluZERyb3BQb2ludFBvc2l0aW9uKGFlKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c2V0RGVmYXVsdEdob3N0U2l6ZShhKXt0aGlzLmRyYWdnYWJsZVNuYXBzaG90Lmhhc0RyYWdnYWJsZVN0'@;
put 'YXRlJiZ0aGlzLnNldFNpemVTdHlsZShhLHRoaXMuZHJhZ2dhYmxlU25hcHNob3QuY2xpZW50UmVjdC53aWR0aCx0aGlzLmRyYWdnYWJsZVNuYXBzaG90LmNsaWVudFJlY3QuaGVpZ2h0KX1hbmltYXRlVG9PbkxlYXZlKGEsZil7dGhpcy5uZ1pvbmUucnVuKCgpPT57dGhpcy5sZWF2ZUFuaW1D'@;
put 'b25maWc9e3ZhbHVlOjAscGFyYW1zOnt0b3A6YSxsZWZ0OmZ9fX0pfWZpbmRUb3BMZWZ0UG9zaXRpb24oYSxmKXtyZXR1cm57cGFnZVg6YS5wYWdlWC1mLmxlZnQscGFnZVk6YS5wYWdlWS1mLnRvcH19ZmluZERyb3BQb2ludFBvc2l0aW9uKGEpe3JldHVybiB0aGlzLmRyYWdnYWJsZVNuYXBz'@;
put 'aG90Lmhhc0RyYWdnYWJsZVN0YXRlP3twYWdlWDphLnBhZ2VYK3RoaXMuZHJhZ2dhYmxlU25hcHNob3QuY2xpZW50UmVjdC53aWR0aC8yLHBhZ2VZOmEucGFnZVkrdGhpcy5kcmFnZ2FibGVTbmFwc2hvdC5jbGllbnRSZWN0LmhlaWdodC8yfTphfXNldFNpemVTdHlsZShhLGYsZCl7dGhpcy5y'@;
put 'ZW5kZXJlci5zZXRTdHlsZShhLCJ3aWR0aCIsYCR7Zn1weGApLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoYSwiaGVpZ2h0IixgJHtkfXB4YCl9c2V0UG9zaXRpb25TdHlsZShhLGYsZCl7dGhpcy5yZW5kZXJlci5zZXRTdHlsZShhLCJsZWZ0IixgJHtmfXB4YCksdGhpcy5yZW5kZXJlci5zZXRT'@;
put 'dHlsZShhLCJ0b3AiLGAke2R9cHhgKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGEsInZpc2liaWxpdHkiLCJ2aXNpYmxlIil9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHJ0KFZpKSxydChjUyw4KSxydChTVSw4KSxydChqbykscnQoVW8pKX0sbC5c'@;
put 'dTAyNzVjbXA9a3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siY2xyLWRyYWdnYWJsZS1naG9zdCJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGYpezImYSYmX2coIkBsZWF2ZUFuaW1hdGlvbiIsZi5sZWF2ZUFuaW1Db25maWcpfSxuZ0NvbnRlbnRTZWxlY3RvcnM6T28sZGVj'@;
put 'bHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxmKXsxJmEmJihUaSgpLERyKDApKX0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbQzEoImxlYXZlQW5pbWF0aW9uIixbYnUoIjpsZWF2ZSIsW0NhKHtsZWZ0OiIqIix0b3A6IioifSksY2MoIjAuMnMgZWFzZS1pbi1vdXQi'@;
put 'LENhKHt0b3A6Int7dG9wfX0iLGxlZnQ6Int7bGVmdH19In0pKV0pXSldfX0pLGx9KSgpLGZzZT0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEsZixkKXtpZih0aGlzLnRlbXBsYXRlPWEsdGhpcy5jb250YWluZXI9Zix0aGlzLmRyYWdFdmVudExpc3RlbmVyPWQsdGhpcy5zdWJzY3JpcHRp'@;
put 'b25zPVtdLCF0aGlzLmRyYWdFdmVudExpc3RlbmVyfHwhdGhpcy5jb250YWluZXIpdGhyb3cgbmV3IEVycm9yKCJUaGUgKmNscklmRHJhZ2dlZCBkaXJlY3RpdmUgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgYSBjbHJEcmFnZ2FibGUgZGlyZWN0aXZlLiIpO3RoaXMuc3Vic2NyaXB0aW9u'@;
put 'cy5wdXNoKHRoaXMuZHJhZ0V2ZW50TGlzdGVuZXIuZHJhZ1N0YXJ0ZWQuc3Vic2NyaWJlKCgpPT57dGhpcy5jb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGUpfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuZHJhZ0V2ZW50TGlzdGVuZXIuZHJhZ0VuZGVk'@;
put 'LnN1YnNjcmliZSgoKT0+e3RoaXMuY29udGFpbmVyLmNsZWFyKCl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydCh6bCkscnQoZmEs'@;
put 'MTIpLHJ0KGNTLDgpKX0sbC5cdTAyNzVkaXI9U3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siIiwiY2xySWZEcmFnZ2VkIiwiIl1dfSksbH0pKCksTVU9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhLGYpe3RoaXMuZHJhZ0V2ZW50TGlzdGVuZXI9YSx0aGlzLnJlbmRlcmVyPWZ9Z2V0IGRlZmF1'@;
put 'bHRIYW5kbGVFbCgpe3JldHVybiB0aGlzLl9kZWZhdWx0SGFuZGxlRWx9c2V0IGRlZmF1bHRIYW5kbGVFbChhKXt0aGlzLl9kZWZhdWx0SGFuZGxlRWw9YSx0aGlzLl9jdXN0b21IYW5kbGVFbHx8dGhpcy5tYWtlRWxlbWVudEhhbmRsZSh0aGlzLl9kZWZhdWx0SGFuZGxlRWwpfWdldCBjdXN0'@;
put 'b21IYW5kbGVFbCgpe3JldHVybiB0aGlzLl9jdXN0b21IYW5kbGVFbH1yZWdpc3RlckN1c3RvbUhhbmRsZShhKXt0aGlzLmRyYWdFdmVudExpc3RlbmVyLmRldGFjaERyYWdMaXN0ZW5lcnMoKSx0aGlzLl9jdXN0b21IYW5kbGVFbD1hLHRoaXMubWFrZUVsZW1lbnRIYW5kbGUodGhpcy5fY3Vz'@;
put 'dG9tSGFuZGxlRWwpfXVucmVnaXN0ZXJDdXN0b21IYW5kbGUoKXt0aGlzLmRyYWdFdmVudExpc3RlbmVyLmRldGFjaERyYWdMaXN0ZW5lcnMoKSx0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuX2N1c3RvbUhhbmRsZUVsLCJkcmFnLWhhbmRsZSIpLGRlbGV0ZSB0aGlzLl9jdXN0b21I'@;
put 'YW5kbGVFbCx0aGlzLl9kZWZhdWx0SGFuZGxlRWwmJnRoaXMubWFrZUVsZW1lbnRIYW5kbGUodGhpcy5fZGVmYXVsdEhhbmRsZUVsKX1tYWtlRWxlbWVudEhhbmRsZShhKXt0aGlzLl9kZWZhdWx0SGFuZGxlRWwmJnRoaXMuX2RlZmF1bHRIYW5kbGVFbCE9PWEmJnRoaXMucmVuZGVyZXIucmVt'@;
put 'b3ZlQ2xhc3ModGhpcy5fZGVmYXVsdEhhbmRsZUVsLCJkcmFnLWhhbmRsZSIpLHRoaXMuZHJhZ0V2ZW50TGlzdGVuZXIuYXR0YWNoRHJhZ0xpc3RlbmVycyhhKSx0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGEsImRyYWctaGFuZGxlIil9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXty'@;
put 'ZXR1cm4gbmV3KGF8fGwpKHNyKGNTKSxzcihqbykpfSxsLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmwsZmFjdG9yeTpsLlx1MDI3NWZhY30pLGx9KSgpLGRzZT0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEpe3RoaXMucmVuZGVyZXI9YX1lbnRlcigpe3RoaXMucmVuZGVyZXIuYWRkQ2xhc3Mo'@;
put 'ZG9jdW1lbnQuYm9keSwiaW4tZHJhZyIpfWV4aXQoKXt0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGRvY3VtZW50LmJvZHksImluLWRyYWciKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkoc3Ioam8pKX0sbC5cdTAyNzVwcm92PWhyKHt0b2tlbjps'@;
put 'LGZhY3Rvcnk6bC5cdTAyNzVmYWN9KSxsfSkoKSxoc2U9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhLGYsZCxoLG0sXyxPLFgpe3RoaXMuZWw9YSx0aGlzLmRyYWdFdmVudExpc3RlbmVyPWYsdGhpcy5kcmFnSGFuZGxlUmVnaXN0cmFyPWQsdGhpcy52aWV3Q29udGFpbmVyUmVmPWgsdGhp'@;
put 'cy5jZnI9bSx0aGlzLmluamVjdG9yPV8sdGhpcy5kcmFnZ2FibGVTbmFwc2hvdD1PLHRoaXMuZ2xvYmFsRHJhZ01vZGU9WCx0aGlzLmRyYWdTdGFydEVtaXR0ZXI9bmV3IHhyLHRoaXMuZHJhZ01vdmVFbWl0dGVyPW5ldyB4cix0aGlzLmRyYWdFbmRFbWl0dGVyPW5ldyB4cix0aGlzLmRyYWdP'@;
put 'bj0hMSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5kcmFnZ2FibGVFbD10aGlzLmVsLm5hdGl2ZUVsZW1lbnQsdGhpcy5jb21wb25lbnRGYWN0b3J5PXRoaXMuY2ZyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGNzZSl9c2V0IGRhdGFUcmFuc2ZlcihhKXt0aGlzLmRyYWdFdmVudExpc3Rl'@;
put 'bmVyLmRyYWdEYXRhVHJhbnNmZXI9YX1zZXQgZ3JvdXAoYSl7dGhpcy5kcmFnRXZlbnRMaXN0ZW5lci5ncm91cD1hfXNldCBkcmFnU3RhcnREZWxheShhKXsibnVtYmVyIj09dHlwZW9mIGE/dGhpcy5kcmFnRXZlbnRMaXN0ZW5lci5kcmFnU3RhcnREZWxheT1hOiJzdHJpbmciPT10eXBlb2Yg'@;
put 'YSYmKHRoaXMuZHJhZ0V2ZW50TGlzdGVuZXIuZHJhZ1N0YXJ0RGVsYXk9cGFyc2VJbnQoYSwxMCl8fDApfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuZHJhZ0hhbmRsZVJlZ2lzdHJhci5kZWZhdWx0SGFuZGxlRWw9dGhpcy5kcmFnZ2FibGVFbCx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0'@;
put 'aGlzLmRyYWdFdmVudExpc3RlbmVyLmRyYWdTdGFydGVkLnN1YnNjcmliZShhPT57dGhpcy5nbG9iYWxEcmFnTW9kZS5lbnRlcigpLHRoaXMuZHJhZ09uPSEwLHRoaXMuY3VzdG9tR2hvc3R8fHRoaXMuY3JlYXRlRGVmYXVsdEdob3N0KGEpLHRoaXMuZHJhZ1N0YXJ0RW1pdHRlci5lbWl0KG5l'@;
put 'dyB0MyhhKSl9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5kcmFnRXZlbnRMaXN0ZW5lci5kcmFnTW92ZWQuc3Vic2NyaWJlKGE9Pnt0aGlzLmRyYWdNb3ZlRW1pdHRlci5lbWl0KG5ldyB0MyhhKSl9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5kcmFnRXZlbnRMaXN0'@;
put 'ZW5lci5kcmFnRW5kZWQuc3Vic2NyaWJlKGE9Pnt0aGlzLmdsb2JhbERyYWdNb2RlLmV4aXQoKSx0aGlzLmRyYWdPbj0hMSx0aGlzLmN1c3RvbUdob3N0fHx0aGlzLmRlc3Ryb3lEZWZhdWx0R2hvc3QoKSx0aGlzLmRyYWdFbmRFbWl0dGVyLmVtaXQobmV3IHQzKGEpKX0pKX1uZ09uRGVzdHJv'@;
put 'eSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSksdGhpcy5kcmFnRXZlbnRMaXN0ZW5lci5kZXRhY2hEcmFnTGlzdGVuZXJzKCl9Y3JlYXRlRGVmYXVsdEdob3N0KGEpe3RoaXMuZHJhZ2dhYmxlU25hcHNob3QuY2FwdHVyZSh0aGlzLmRyYWdnYWJsZUVs'@;
put 'LGEpLHRoaXMudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQodGhpcy5jb21wb25lbnRGYWN0b3J5LDAsdGhpcy5pbmplY3RvcixbW3RoaXMuZHJhZ2dhYmxlRWwuY2xvbmVOb2RlKCEwKV1dKX1kZXN0cm95RGVmYXVsdEdob3N0KCl7dGhpcy52aWV3Q29udGFpbmVyUmVmLmNsZWFy'@;
put 'KCksdGhpcy5kcmFnZ2FibGVTbmFwc2hvdC5kaXNjYXJkKCl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHJ0KFZpKSxydChjUykscnQoTVUpLHJ0KGZhKSxydChjMSkscnQoQWwpLHJ0KFNVKSxydChkc2UpKX0sbC5cdTAyNzVkaXI9U3Ioe3R5cGU6'@;
put 'bCxzZWxlY3RvcnM6W1siIiwiY2xyRHJhZ2dhYmxlIiwiIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZixkKXtpZigxJmEmJkZvKGQsZnNlLDUpLDImYSl7bGV0IGg7dWkoaD1jaSgpKSYmKGYuY3VzdG9tR2hvc3Q9aC5maXJzdCl9fSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5j'@;
put 'dGlvbihhLGYpezImYSYmZ3IoImRyYWdnYWJsZSIsITApKCJiZWluZy1kcmFnZ2VkIixmLmRyYWdPbil9LGlucHV0czp7ZGF0YVRyYW5zZmVyOlsiY2xyRHJhZ2dhYmxlIiwiZGF0YVRyYW5zZmVyIl0sZ3JvdXA6WyJjbHJHcm91cCIsImdyb3VwIl0sZHJhZ1N0YXJ0RGVsYXk6WyJjbHJEcmFn'@;
put 'U3RhcnREZWxheSIsImRyYWdTdGFydERlbGF5Il19LG91dHB1dHM6e2RyYWdTdGFydEVtaXR0ZXI6ImNsckRyYWdTdGFydCIsZHJhZ01vdmVFbWl0dGVyOiJjbHJEcmFnTW92ZSIsZHJhZ0VuZEVtaXR0ZXI6ImNsckRyYWdFbmQifSxmZWF0dXJlczpbcmkoW2NTLE1VLFNVLGRzZSx4MV0pXX0p'@;
put 'LGx9KSgpLHBzZT0oKCk9PntjbGFzcyBse31yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVtb2Q9RGkoe3R5cGU6bH0pLGwuXHUwMjc1aW5qPXhpKHtpbXBvcnRzOltbYm9dXX0pLGx9KSgpO2NvbnN0IG1zZT1uZXcgTWkoIkZPQ1VTX09O'@;
put 'X1ZJRVdfSU5JVCIpLEdGZT17cHJvdmlkZTptc2UsdXNlVmFsdWU6ITB9O2xldCBrVT0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEsZixkLGgsbSxfKXt0aGlzLmVsPWEsdGhpcy5wbGF0Zm9ybUlkPWYsdGhpcy5mb2N1c09uVmlld0luaXQ9ZCx0aGlzLnJlbmRlcmVyPW0sdGhpcy5kaXJl'@;
put 'Y3RGb2N1cz0hMCx0aGlzLmRlc3Ryb3kkPW5ldyB3ZSx0aGlzLl9pc0VuYWJsZWQ9dGhpcy5mb2N1c09uVmlld0luaXQsdGhpcy5kb2N1bWVudD1oLF8ucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PndkKGEubmF0aXZlRWxlbWVudCwiZm9jdXNvdXQiKS5waXBlKEFoKHRoaXMuZGVzdHJveSQpKS5z'@;
put 'dWJzY3JpYmUoKCk9Pnt0aGlzLmRpcmVjdEZvY3VzfHwodGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ0YWJpbmRleCIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJvdXRsaW5lIixudWxsKSl9KSl9c2V0'@;
put 'IGlzRW5hYmxlZChhKXt0aGlzLmZvY3VzT25WaWV3SW5pdCYmImJvb2xlYW4iPT10eXBlb2YgYSYmKHRoaXMuX2lzRW5hYmxlZD1hKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmZvY3VzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKX1mb2N1cygpe0hhKHRoaXMucGxhdGZv'@;
put 'cm1JZCkmJnRoaXMuX2lzRW5hYmxlZCYmdGhpcy5kb2N1bWVudCYmdGhpcy5kb2N1bWVudC5hY3RpdmVFbGVtZW50IT09dGhpcy5lbC5uYXRpdmVFbGVtZW50JiYodGhpcy5lbC5uYXRpdmVFbGVtZW50LmZvY3VzKCksdGhpcy5kb2N1bWVudC5hY3RpdmVFbGVtZW50IT09dGhpcy5lbC5uYXRp'@;
put 'dmVFbGVtZW50JiYodGhpcy5kaXJlY3RGb2N1cz0hMSx0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsInRhYmluZGV4IiwiLTEiKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwib3V0bGluZSIsIm5vbmUiKSx0aGlz'@;
put 'LmVsLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKSkpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChWaSkscnQocWEpLHJ0KG1zZSkscnQoRmEpLHJ0KGpvKSxydChVbykpfSxsLlx1MDI3NWRpcj1Tcih7dHlwZTpsLHNlbGVjdG9yczpbWyIiLCJjbHJG'@;
put 'b2N1c09uVmlld0luaXQiLCIiXV0saW5wdXRzOntpc0VuYWJsZWQ6WyJjbHJGb2N1c09uVmlld0luaXQiLCJpc0VuYWJsZWQiXX19KSxsfSkoKSxXZz0oKCk9PntjbGFzcyBse31yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVtb2Q9RGko'@;
put 'e3R5cGU6bH0pLGwuXHUwMjc1aW5qPXhpKHtwcm92aWRlcnM6W0dGZV0saW1wb3J0czpbW2JvXV19KSxsfSkoKSwkRmU9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3Rvcigpe3RoaXMuX3ByZXZpb3VzRm9jdXNUcmFwcz1bXX1nZXQgY3VycmVudCgpe3JldHVybiB0aGlzLl9jdXJyZW50fXNldCBj'@;
put 'dXJyZW50KGEpe3RoaXMuX3ByZXZpb3VzRm9jdXNUcmFwcy5wdXNoKHRoaXMuX2N1cnJlbnQpLHRoaXMuX2N1cnJlbnQ9YX1nZXQgbmJGb2N1c1RyYXBwZXJzKCl7cmV0dXJuIHRoaXMuX3ByZXZpb3VzRm9jdXNUcmFwcy5sZW5ndGh9YWN0aXZhdGVQcmV2aW91c1RyYXBwZXIoKXt0aGlzLl9j'@;
put 'dXJyZW50PXRoaXMuX3ByZXZpb3VzRm9jdXNUcmFwcy5wb3AoKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1cHJvdj1ocih7dG9rZW46bCxmYWN0b3J5OmwuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbH0pKCksZzQ9KCgp'@;
put 'PT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhLGYsZCxoLG0pe3RoaXMuZWw9YSx0aGlzLmluamVjdG9yPWYsdGhpcy5mb2N1c1RyYXBzVHJhY2tlcj1kLHRoaXMucmVuZGVyZXI9aCx0aGlzLnBsYXRmb3JtSWQ9bSx0aGlzLmxvY2FsRm9jdXNFc2NhcGVkPSExLHRoaXMuX2NvbmZpZz17c3RyaWN0'@;
put 'OiEwfSx0aGlzLmRvY3VtZW50PXRoaXMuaW5qZWN0b3IuZ2V0KEZhKSx0aGlzLmZvY3VzVHJhcHNUcmFja2VyLmN1cnJlbnQ9dGhpc31zZXQgY29uZmlnKGEpe3RoaXMuX2NvbmZpZz1PYmplY3QuYXNzaWduKHRoaXMuX2NvbmZpZywiIj09PWE/e306YSl9Z2V0IHBvdGVudGlhbGx5Rm9jdXNh'@;
put 'YmxlRWxzKCl7cmV0dXJuWy4uLnRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbaHJlZl06bm90KFt0YWJpbmRleD0iLTEiXSksIGJ1dHRvbjpub3QoW2Rpc2FibGVkXSk6bm90KFt0YWJpbmRleD0iLTEiXSksIGlucHV0Om5vdChbZGlzYWJsZWRdKTpub3QoW3RhYmlu'@;
put 'ZGV4PSItMSJdKSwgc2VsZWN0Om5vdChbZGlzYWJsZWRdKTpub3QoW3RhYmluZGV4PSItMSJdKSwgdGV4dGFyZWE6bm90KFtkaXNhYmxlZF0pOm5vdChbdGFiaW5kZXg9Ii0xIl0pLCBbY29udGVudGVkaXRhYmxlPSJ0cnVlIl06bm90KFt0YWJpbmRleD0iLTEiXSksIFt0YWJpbmRleF06bm90'@;
put 'KFt0YWJpbmRleD0iLTEiXSkgJyldfW5nT25Jbml0KCl7SGEodGhpcy5wbGF0Zm9ybUlkKSYmKHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiLCItMSIpLHRoaXMuZWwubmF0aXZlRWxlbWVudC5mb2N1cygpKX1uZ0FmdGVyVmlld0lu'@;
put 'aXQoKXtIYSh0aGlzLnBsYXRmb3JtSWQpJiYodGhpcy5wcmV2aW91c0FjdGl2ZUVsZW1lbnQ9dGhpcy5kb2N1bWVudC5hY3RpdmVFbGVtZW50LHRoaXMucGFyZW50RWxlbWVudD10aGlzLmVsLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudCksdGhpcy5hZGRSZWJvdW5kRWxzKCl9bmdPbkRl'@;
put 'c3Ryb3koKXt0aGlzLnJlbW92ZVJlYm91bmRFbHMoKSx0aGlzLnNldFByZXZpb3VzRm9jdXMoKSx0aGlzLmZvY3VzVHJhcHNUcmFja2VyLmFjdGl2YXRlUHJldmlvdXNUcmFwcGVyKCl9b25Gb2N1c0luKGEpe2NvbnN0IGY9dGhpcy5lbC5uYXRpdmVFbGVtZW50O3RoaXMuZm9jdXNUcmFwc1Ry'@;
put 'YWNrZXIuY3VycmVudCE9PXRoaXN8fCFIYSh0aGlzLnBsYXRmb3JtSWQpfHx0aGlzLmxvY2FsRm9jdXNFc2NhcGVkfHxmLmNvbnRhaW5zKGEudGFyZ2V0KXx8KGEudGFyZ2V0PT09dGhpcy50b3BSZWJvdW5kRWwmJmYuY29udGFpbnMoYS5yZWxhdGVkVGFyZ2V0KT8odGhpcy5mb2N1c0xhc3RG'@;
put 'b2N1c2FibGUoKSx0aGlzLmZvY3VzVHJhcEVsSWZPdXRzaWRlKCkpOmEudGFyZ2V0PT09dGhpcy5ib3R0b21SZWJvdW5kRWwmJmYuY29udGFpbnMoYS5yZWxhdGVkVGFyZ2V0KT8odGhpcy5mb2N1c0ZpcnN0Rm9jdXNhYmxlKCksdGhpcy5mb2N1c1RyYXBFbElmT3V0c2lkZSgpKTp0aGlzLl9j'@;
put 'b25maWcuc3RyaWN0P3RoaXMuZWwubmF0aXZlRWxlbWVudC5mb2N1cygpOnRoaXMubG9jYWxGb2N1c0VzY2FwZWQ9ITApfXNldFByZXZpb3VzRm9jdXMoKXt0aGlzLnByZXZpb3VzQWN0aXZlRWxlbWVudCYmdGhpcy5wcmV2aW91c0FjdGl2ZUVsZW1lbnQuZm9jdXMmJnRoaXMucHJldmlvdXNB'@;
put 'Y3RpdmVFbGVtZW50LmZvY3VzKCl9Y3JlYXRlRm9jdXNhYmxlT2ZmU2NyZWVuRWwoKXtjb25zdCBhPXRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO3JldHVybiB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShhLCJ0YWJpbmRleCIsIjAiKSx0aGlzLnJlbmRlcmVyLmFkZENs'@;
put 'YXNzKGEsIm9mZnNjcmVlbi1mb2N1cy1yZWJvdW5kZXIiKSxhfWFkZFJlYm91bmRFbHMoKXtpZihIYSh0aGlzLnBsYXRmb3JtSWQpKXt0aGlzLnRvcFJlYm91bmRFbD10aGlzLmNyZWF0ZUZvY3VzYWJsZU9mZlNjcmVlbkVsKCksdGhpcy5ib3R0b21SZWJvdW5kRWw9dGhpcy5jcmVhdGVGb2N1'@;
put 'c2FibGVPZmZTY3JlZW5FbCgpO2NvbnN0IGE9dGhpcy5lbC5uYXRpdmVFbGVtZW50O3RoaXMucmVuZGVyZXIuaW5zZXJ0QmVmb3JlKGEucGFyZW50RWxlbWVudCx0aGlzLnRvcFJlYm91bmRFbCxhKSxhLm5leHRTaWJsaW5nP3RoaXMucmVuZGVyZXIuaW5zZXJ0QmVmb3JlKGEucGFyZW50Tm9k'@;
put 'ZSx0aGlzLmJvdHRvbVJlYm91bmRFbCxhLm5leHRTaWJsaW5nKTp0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKGEucGFyZW50Tm9kZSx0aGlzLmJvdHRvbVJlYm91bmRFbCl9fXJlbW92ZVJlYm91bmRFbHMoKXtIYSh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLnRvcFJlYm91bmRFbCYmdGhpcy5i'@;
put 'b3R0b21SZWJvdW5kRWwmJih0aGlzLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy50b3BSZWJvdW5kRWwpLHRoaXMucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLmJvdHRvbVJlYm91bmRFbCksZGVsZXRlIHRoaXMudG9wUmVib3VuZEVsLGRlbGV0ZSB0aGlzLmJvdHRvbVJl'@;
put 'Ym91bmRFbCl9Zm9jdXNGaXJzdEZvY3VzYWJsZSgpe2ZvcihsZXQgYT0wO2E8dGhpcy5wb3RlbnRpYWxseUZvY3VzYWJsZUVscy5sZW5ndGgmJih0aGlzLmZpcnN0Rm9jdXNhYmxlRWw9dGhpcy5mb2N1c0VsZW1lbnQodGhpcy5wb3RlbnRpYWxseUZvY3VzYWJsZUVsc1thXSksIXRoaXMuZmly'@;
put 'c3RGb2N1c2FibGVFbCk7YSsrKTt9Zm9jdXNMYXN0Rm9jdXNhYmxlKCl7Zm9yKGxldCBhPXRoaXMucG90ZW50aWFsbHlGb2N1c2FibGVFbHMubGVuZ3RoLTE7YT49MCYmKHRoaXMubGFzdEZvY3VzYWJsZUVsPXRoaXMuZm9jdXNFbGVtZW50KHRoaXMucG90ZW50aWFsbHlGb2N1c2FibGVFbHNb'@;
put 'YV0pLCF0aGlzLmxhc3RGb2N1c2FibGVFbCk7YS0tKTt9Zm9jdXNUcmFwRWxJZk91dHNpZGUoKXt0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCl8fHRoaXMuZWwubmF0aXZlRWxlbWVudC5mb2N1cygpfWZvY3VzRWxlbWVudChhKXtyZXR1cm4g'@;
put 'YSYmYS5mb2N1cyYmKGEuZm9jdXMoKSxkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09YSk/YTpudWxsfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChWaSkscnQoQWwpLHJ0KCRGZSkscnQoam8pLHJ0KHFhKSl9LGwuXHUwMjc1ZGlyPVNyKHt0eXBl'@;
put 'Omwsc2VsZWN0b3JzOltbIiIsImNsckZvY3VzVHJhcCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxmKXsxJmEmJkV0KCJmb2N1c2luIixmdW5jdGlvbihoKXtyZXR1cm4gZi5vbkZvY3VzSW4oaCl9LDAsTDIpfSxpbnB1dHM6e2NvbmZpZzpbImNsckZvY3VzVHJhcCIsImNvbmZpZyJd'@;
put 'fX0pLGx9KSgpLEpEPSgoKT0+e2NsYXNzIGx7fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NW1vZD1EaSh7dHlwZTpsfSksbC5cdTAyNzVpbmo9eGkoe2ltcG9ydHM6W1tib11dfSksbH0pKCkscUZlPSgoKT0+e2NsYXNzIGx7Y29uc3Ry'@;
put 'dWN0b3IoKXt0aGlzLl90ZXh0Q29udGVudENoYW5nZT1uZXcgd2V9Z2V0IHRleHRDb250ZW50KCl7cmV0dXJuIHRoaXMuX3RleHRDb250ZW50fXNldCB0ZXh0Q29udGVudChhKXt0aGlzLl90ZXh0Q29udGVudD1hLHRoaXMuX3RleHRDb250ZW50Q2hhbmdlLm5leHQoYSl9Z2V0IHRleHRDb250'@;
put 'ZW50Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX3RleHRDb250ZW50Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVwcm92PWhyKHt0b2tlbjpsLGZhY3Rvcnk6bC5cdTAyNzVmYWN9KSxsfSkoKSxYRmU9'@;
put 'KCgpPT57Y2xhc3MgbHt9cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1bW9kPURpKHt0eXBlOmx9KSxsLlx1MDI3NWluaj14aSh7aW1wb3J0czpbW2JvXV19KSxsfSkoKSxRRmU9KCgpPT57Y2xhc3MgbHt9cmV0dXJuIGwuXHUwMjc1ZmFj'@;
put 'PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1bW9kPURpKHt0eXBlOmx9KSxsLlx1MDI3NWluaj14aSh7aW1wb3J0czpbW2JvLGxsLGxTXV19KSxsfSkoKSxJaD0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEsZil7dGhpcy5lbD1hLHRoaXMucmVuZGVyZXI9Zix0aGlz'@;
put 'LmNsckxvYWRpbmdDaGFuZ2U9bmV3IHhyKCExKSx0aGlzLmJ1dHRvblN0YXRlPVhjLHRoaXMuc3RhdGU9WGMuREVGQVVMVH1sb2FkaW5nU3RhdGVDaGFuZ2UoYSl7aWYoYSE9PXRoaXMuc3RhdGUpe3N3aXRjaCh0aGlzLnN0YXRlPWEsYSl7Y2FzZSBYYy5ERUZBVUxUOnRoaXMucmVuZGVyZXIu'@;
put 'cmVtb3ZlU3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ3aWR0aCIpLHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ0cmFuc2Zvcm0iKSx0aGlzLmRpc2FibGVkfHx0aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVs'@;
put 'ZW1lbnQsImRpc2FibGVkIik7YnJlYWs7Y2FzZSBYYy5MT0FESU5HOnRoaXMuc2V0RXhwbGljaXRCdXR0b25XaWR0aCgpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGV6KDApIiksdGhpcy5yZW5kZXJlci5zZXRBdHRy'@;
put 'aWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJkaXNhYmxlZCIsIiIpO2JyZWFrO2Nhc2UgWGMuU1VDQ0VTUzp0aGlzLnNldEV4cGxpY2l0QnV0dG9uV2lkdGgoKTticmVhaztjYXNlIFhjLkVSUk9SOnRoaXMubG9hZGluZ1N0YXRlQ2hhbmdlKFhjLkRFRkFVTFQpfXRoaXMuY2xyTG9hZGlu'@;
put 'Z0NoYW5nZS5lbWl0KGEpfX1zZXRFeHBsaWNpdEJ1dHRvbldpZHRoKCl7aWYodGhpcy5lbC5uYXRpdmVFbGVtZW50JiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KXtjb25zdCBhPXRoaXMuZWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3Qo'@;
put 'KSxmPU1hdGgubWF4KDQyLGEud2lkdGgpO3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ3aWR0aCIsYCR7Zn1weGApfX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkocnQoVmkpLHJ0KGpvKSl9LGwuXHUwMjc1Y21w'@;
put 'PWtyKHt0eXBlOmwsc2VsZWN0b3JzOltbImJ1dHRvbiIsImNsckxvYWRpbmciLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxmKXsyJmEmJlJyKCJkaXNhYmxlZCIsZi5kaXNhYmxlZD8iIjpudWxsKX0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQifSxvdXRwdXRz'@;
put 'OntjbHJMb2FkaW5nQ2hhbmdlOiJjbHJMb2FkaW5nQ2hhbmdlIn0sZmVhdHVyZXM6W3JpKFt7cHJvdmlkZTpRQyx1c2VFeGlzdGluZzpsfV0pXSxhdHRyczpKRGUsbmdDb250ZW50U2VsZWN0b3JzOk9vLGRlY2xzOjQsdmFyczo0LGNvbnN0czpbWzMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNo'@;
put 'Q2FzZSJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1pbmxpbmUiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItaW5saW5lIiwic3Bpbm5lci1jaGVjayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGYpezEmYSYmKFRpKCksV3IoMCwwKSx0dCgxLFFEZSwyLDEsInNwYW4iLDEpLHR0KDIsZUllLDIsMSwi'@;
put 'c3BhbiIsMSksdHQoMyx0SWUsMiwxLCJzcGFuIiwxKSxHcigpKSwyJmEmJihSZSgibmdTd2l0Y2giLGYuc3RhdGUpLFNlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLGYuYnV0dG9uU3RhdGUuTE9BRElORyksU2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsZi5idXR0b25TdGF0ZS5TVUNDRVNTKSxTZSgx'@;
put 'KSxSZSgibmdTd2l0Y2hDYXNlIixmLmJ1dHRvblN0YXRlLkRFRkFVTFQpKX0sZGVwZW5kZW5jaWVzOltrZixDaF0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbQzEoImRlZmF1bHRCdXR0b24iLFtidSgiOmVudGVyIixbQ2Eoe29wYWNpdHk6MH0pLGNjKCIyMDBtcyAxMDBtcyBl'@;
put 'YXNlLWluIixDYSh7b3BhY2l0eToxfSkpXSksYnUoIjpsZWF2ZSIsW0NhKHtvcGFjaXR5OjB9KV0pXSksQzEoInNwaW5uZXIiLFtidSgiOmVudGVyIixbQ2Eoe29wYWNpdHk6MH0pLGNjKCIyMDBtcyAxMDBtcyBlYXNlLWluIixDYSh7b3BhY2l0eToxfSkpXSksYnUoIjpsZWF2ZSIsW0NhKHtv'@;
put 'cGFjaXR5OjF9KSxjYygiMTAwbXMgZWFzZS1vdXQiLENhKHtvcGFjaXR5OjB9KSldKV0pLEMxKCJ2YWxpZGF0ZWQiLFtidSgiOmVudGVyIixbY2MoIjYwMG1zIixiVGUoW0NhKHt0cmFuc2Zvcm06InNjYWxlKDAsMCkiLG9mZnNldDowfSksQ2Eoe29wYWNpdHk6MSxvZmZzZXQ6LjJ9KSxDYSh7'@;
put 'dHJhbnNmb3JtOiJzY2FsZSgxLjIsMS4yKSIsb2Zmc2V0Oi40fSksQ2Eoe3RyYW5zZm9ybToic2NhbGUoLjksLjkpIixvZmZzZXQ6LjZ9KSxDYSh7dHJhbnNmb3JtOiJzY2FsZSgxLDEpIixvZmZzZXQ6MX0pXSkpXSksYnUoIjpsZWF2ZSIsW0NhKHtvcGFjaXR5OjF9KSxjYygiMTAwbXMgZWFz'@;
put 'ZS1vdXQiLENhKHtvcGFjaXR5OjB9KSldKV0pXX19KSxsfSkoKSx0SGU9KCgpPT57Y2xhc3MgbHt9cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1bW9kPURpKHt0eXBlOmx9KSxsLlx1MDI3NWluaj14aSh7aW1wb3J0czpbW2JvXV19KSxs'@;
put 'fSkoKSxuSGU9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3Rvcigpe2phLmFkZEljb25zKHFvZSl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NW1vZD1EaSh7dHlwZTpsfSksbC5cdTAyNzVpbmo9eGkoe2ltcG9ydHM6W3RIZSxRRmVdfSks'@;
put 'bH0pKCksckhlPSgoKT0+e2NsYXNzIGx7fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NWNtcD1rcih7dHlwZTpsLHNlbGVjdG9yczpbWyJuZy1jb21wb25lbnQiXV0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxmKXt9'@;
put 'LGVuY2Fwc3VsYXRpb246Mn0pLGx9KSgpLFFEPSgoKT0+e2NsYXNzIGx7fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NW1vZD1EaSh7dHlwZTpsfSksbC5cdTAyNzVpbmo9eGkoe30pLGx9KSgpLGlIZT0wLFRmPSgoKT0+e2NsYXNzIGx7'@;
put 'Y29uc3RydWN0b3IoKXt0aGlzLl9pZD0iY2xyLWZvcm0tY29udHJvbC0iKyArK2lIZSx0aGlzLl9pZENoYW5nZT1uZXcgT2UodGhpcy5faWQpfWdldCBpZCgpe3JldHVybiB0aGlzLl9pZH1zZXQgaWQoYSl7dGhpcy5faWQ9YSx0aGlzLl9pZENoYW5nZS5uZXh0KGEpfWdldCBpZENoYW5nZSgp'@;
put 'e3JldHVybiB0aGlzLl9pZENoYW5nZS5hc09ic2VydmFibGUoKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1cHJvdj1ocih7dG9rZW46bCxmYWN0b3J5OmwuXHUwMjc1ZmFjfSksbH0pKCksb0hlPTAsR2c9KCgpPT57Y2xhc3MgbHtj'@;
put 'b25zdHJ1Y3Rvcigpe3RoaXMuX2lkPSJjbHItZm9ybS1jb250YWluZXItIisgKytvSGUsdGhpcy5faWRDaGFuZ2U9bmV3IE9lKHRoaXMuX2lkKX1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWR9c2V0IGlkKGEpe3RoaXMuX2lkPWEsdGhpcy5faWRDaGFuZ2UubmV4dChhKX1nZXQgaWRDaGFuZ2Uo'@;
put 'KXtyZXR1cm4gdGhpcy5faWRDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmwsZmFjdG9yeTpsLlx1MDI3NWZhY30pLGx9KSgpO2xldCBFVT0oKCk9PntjbGFzcyBse2Nv'@;
put 'bnN0cnVjdG9yKGEsZil7dGhpcy5jb250cm9sSWRTZXJ2aWNlPWEsdGhpcy5jb250YWluZXJJZFNlcnZpY2U9Zix0aGlzLmNvbnRyb2xJZFN1ZmZpeD0iYWJzdHJhY3QifWdldCBpZCgpe3JldHVybiB0aGlzLmNvbnRhaW5lcklkU2VydmljZT9gJHt0aGlzLmNvbnRhaW5lcklkU2VydmljZS5p'@;
put 'ZH0tJHt0aGlzLmNvbnRyb2xJZFN1ZmZpeH1gOnRoaXMuY29udHJvbElkU2VydmljZT9gJHt0aGlzLmNvbnRyb2xJZFNlcnZpY2UuaWR9LSR7dGhpcy5jb250cm9sSWRTdWZmaXh9YDpudWxsfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChUZiw4'@;
put 'KSxydChHZyw4KSl9LGwuXHUwMjc1ZGlyPVNyKHt0eXBlOmx9KSxsfSkoKSxhSGU9KCgpPT57Y2xhc3MgbCBleHRlbmRzIEVVe2NvbnN0cnVjdG9yKGEsZil7c3VwZXIoYSxmKSx0aGlzLmNvbnRyb2xJZFNlcnZpY2U9YSx0aGlzLmNvbnRhaW5lcklkU2VydmljZT1mLHRoaXMuY29udHJvbElk'@;
put 'U3VmZml4PSJlcnJvciJ9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHJ0KFRmLDgpLHJ0KEdnLDgpKX0sbC5cdTAyNzVjbXA9a3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siY2xyLWNvbnRyb2wtZXJyb3IiXV0saG9zdFZhcnM6Myxob3N0QmluZGluZ3M6'@;
put 'ZnVuY3Rpb24oYSxmKXsyJmEmJihScigiaWQiLGYuaWQpLGdyKCJjbHItc3VidGV4dCIsITApKX0sZmVhdHVyZXM6W3JvXSxuZ0NvbnRlbnRTZWxlY3RvcnM6T28sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxmKXsxJmEmJihUaSgpLERyKDApKX0sZW5jYXBzdWxhdGlvbjoy'@;
put 'fSksbH0pKCkseFU9KCgpPT57Y2xhc3MgbCBleHRlbmRzIEVVe2NvbnN0cnVjdG9yKGEsZil7c3VwZXIoYSxmKSx0aGlzLmNvbnRyb2xJZFNlcnZpY2U9YSx0aGlzLmNvbnRhaW5lcklkU2VydmljZT1mLHRoaXMuY29udHJvbElkU3VmZml4PSJoZWxwZXIifX1yZXR1cm4gbC5cdTAyNzVmYWM9'@;
put 'ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChUZiw4KSxydChHZyw4KSl9LGwuXHUwMjc1Y21wPWtyKHt0eXBlOmwsc2VsZWN0b3JzOltbImNsci1jb250cm9sLWhlbHBlciJdXSxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGYpezImYSYmKFJyKCJpZCIsZi5pZCks'@;
put 'Z3IoImNsci1zdWJ0ZXh0IiwhMCkpfSxmZWF0dXJlczpbcm9dLG5nQ29udGVudFNlbGVjdG9yczpPbyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGYpezEmYSYmKFRpKCksRHIoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxsfSkoKSxIMD0oKCk9PntjbGFzcyBse2NvbnN0cnVj'@;
put 'dG9yKCl7dGhpcy5fY29udHJvbENoYW5nZXM9bmV3IHdlLHRoaXMuX2hlbHBlcnM9bmV3IHdlfWdldCBjb250cm9sQ2hhbmdlcygpe3JldHVybiB0aGlzLl9jb250cm9sQ2hhbmdlcy5hc09ic2VydmFibGUoKX1nZXQgaGVscGVyc0NoYW5nZSgpe3JldHVybiB0aGlzLl9oZWxwZXJzLmFzT2Jz'@;
put 'ZXJ2YWJsZSgpfXNldENvbnRyb2woYSl7dGhpcy5fY29udHJvbENoYW5nZXMubmV4dChhKX1zZXRIZWxwZXJzKGEpe3RoaXMuX2hlbHBlcnMubmV4dChhKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1cHJvdj1ocih7dG9rZW46bCxm'@;
put 'YWN0b3J5OmwuXHUwMjc1ZmFjfSksbH0pKCk7dmFyIE4wPWZ1bmN0aW9uKGwpe3JldHVybiBsLk5PTkU9Ik5PTkUiLGwuVkFMSUQ9IlZBTElEIixsLklOVkFMSUQ9IklOVkFMSUQiLGx9KE4wfHx7fSk7bGV0IE9mPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSl7dGhpcy5uZ0NvbnRyb2xT'@;
put 'ZXJ2aWNlPWEsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuX3N0YXR1c0NoYW5nZXM9bmV3IE9lKE4wLk5PTkUpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubmdDb250cm9sU2VydmljZS5jb250cm9sQ2hhbmdlcy5zdWJzY3JpYmUoZj0+e2YmJih0aGlzLmNvbnRyb2w9Zix0aGlz'@;
put 'LnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmNvbnRyb2wuc3RhdHVzQ2hhbmdlcy5zdWJzY3JpYmUoKCk9Pnt0aGlzLnRyaWdnZXJTdGF0dXNDaGFuZ2UoKX0pKSl9KSl9Z2V0IHN0YXR1c0NoYW5nZXMoKXtyZXR1cm4gdGhpcy5fc3RhdHVzQ2hhbmdlcy5hc09ic2VydmFibGUoKX1uZ09uRGVz'@;
put 'dHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9dHJpZ2dlclN0YXR1c0NoYW5nZSgpe2lmKHRoaXMuY29udHJvbCl7Y29uc3QgYT1OMFt0aGlzLmNvbnRyb2wuc3RhdHVzXTt0aGlzLl9zdGF0dXNDaGFuZ2VzLm5leHQoWyJWQUxJRCIsIklOVkFM'@;
put 'SUQiXS5pbmNsdWRlcyhhKT9hOk4wLk5PTkUpfX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkoc3IoSDApKX0sbC5cdTAyNzVwcm92PWhyKHt0b2tlbjpsLGZhY3Rvcnk6bC5cdTAyNzVmYWN9KSxsfSkoKTt2YXIgJGc9ZnVuY3Rpb24obCl7cmV0dXJu'@;
put 'IGwuVkVSVElDQUw9InZlcnRpY2FsIixsLkhPUklaT05UQUw9Imhvcml6b250YWwiLGwuQ09NUEFDVD0iY29tcGFjdCIsbH0oJGd8fHt9KTtsZXQgbjM9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3Rvcigpe3RoaXMubWluTGFiZWxTaXplPTEsdGhpcy5tYXhMYWJlbFNpemU9MTIsdGhpcy5sYXlv'@;
put 'dXQ9JGcuSE9SSVpPTlRBTCx0aGlzLmxheW91dFZhbHVlcz1PYmplY3Qua2V5cygkZykubWFwKGE9PiRnW2FdKSx0aGlzLl9sYWJlbFNpemU9Mn1nZXQgbGFiZWxTaXplKCl7cmV0dXJuIHRoaXMuX2xhYmVsU2l6ZX1zZXQgbGFiZWxTaXplKGEpe3RoaXMubGFiZWxTaXplSXNWYWxpZChhKSYm'@;
put 'KHRoaXMuX2xhYmVsU2l6ZT1hKX1nZXQgbGF5b3V0Q2xhc3MoKXtyZXR1cm5gY2xyLWZvcm0tJHt0aGlzLmxheW91dH1gfWlzVmVydGljYWwoKXtyZXR1cm4gdGhpcy5sYXlvdXQ9PT0kZy5WRVJUSUNBTH1pc0hvcml6b250YWwoKXtyZXR1cm4gdGhpcy5sYXlvdXQ9PT0kZy5IT1JJWk9OVEFM'@;
put 'fWlzQ29tcGFjdCgpe3JldHVybiB0aGlzLmxheW91dD09PSRnLkNPTVBBQ1R9aXNWYWxpZChhKXtyZXR1cm4gdGhpcy5sYXlvdXRWYWx1ZXMuaW5kZXhPZihhKT4tMX1sYWJlbFNpemVJc1ZhbGlkKGEpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGEpJiZhPj10aGlzLm1pbkxhYmVsU2l6ZSYm'@;
put 'YTw9dGhpcy5tYXhMYWJlbFNpemV9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmwsZmFjdG9yeTpsLlx1MDI3NWZhY30pLGx9KSgpLGVsPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmLGQsaCxtKXt0'@;
put 'aGlzLmNvbnRyb2xJZFNlcnZpY2U9YSx0aGlzLmxheW91dFNlcnZpY2U9Zix0aGlzLm5nQ29udHJvbFNlcnZpY2U9ZCx0aGlzLnJlbmRlcmVyPWgsdGhpcy5lbD1tLHRoaXMuZW5hYmxlR3JpZD0hMCx0aGlzLnN1YnNjcmlwdGlvbnM9W119Z2V0IGxhYmVsVGV4dCgpe3JldHVybiB0aGlzLmVs'@;
put 'Lm5hdGl2ZUVsZW1lbnQmJnRoaXMuZWwubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudH1uZ09uSW5pdCgpeyh0aGlzLmNvbnRyb2xJZFNlcnZpY2V8fHRoaXMubmdDb250cm9sU2VydmljZSkmJnRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LCJjbHItY29udHJv'@;
put 'bC1sYWJlbCIpLHRoaXMuZW5hYmxlR3JpZCYmdGhpcy5sYXlvdXRTZXJ2aWNlJiYhdGhpcy5sYXlvdXRTZXJ2aWNlLmlzVmVydGljYWwoKSYmdGhpcy5lbC5uYXRpdmVFbGVtZW50JiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xhc3NOYW1lLmluZGV4T2YoImNsci1jb2wiKTwwJiYodGhpcy5y'@;
put 'ZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImNsci1jb2wtMTIiKSx0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxgY2xyLWNvbC1tZC0ke3RoaXMubGF5b3V0U2VydmljZS5sYWJlbFNpemV9YCkpLHRoaXMuY29udHJvbElkU2Vydmlj'@;
put 'ZSYmIXRoaXMuZm9yQXR0ciYmdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5jb250cm9sSWRTZXJ2aWNlLmlkQ2hhbmdlLnN1YnNjcmliZShhPT50aGlzLmZvckF0dHI9YSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1k'@;
put 'aXNhYmxlR3JpZCgpe3RoaXMuZW5hYmxlR3JpZD0hMX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkocnQoVGYsOCkscnQobjMsOCkscnQoSDAsOCkscnQoam8pLHJ0KFZpKSl9LGwuXHUwMjc1ZGlyPVNyKHt0eXBlOmwsc2VsZWN0b3JzOltbImxhYmVs'@;
put 'Il1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZil7MiZhJiZScigiZm9yIixmLmZvckF0dHIpfSxpbnB1dHM6e2ZvckF0dHI6WyJmb3IiLCJmb3JBdHRyIl19fSksbH0pKCksbEhlPSgoKT0+e2NsYXNzIGwgZXh0ZW5kcyBFVXtjb25zdHJ1Y3RvcihhLGYpe3N1cGVyKGEs'@;
put 'ZiksdGhpcy5jb250cm9sSWRTZXJ2aWNlPWEsdGhpcy5jb250YWluZXJJZFNlcnZpY2U9Zix0aGlzLmNvbnRyb2xJZFN1ZmZpeD0ic3VjY2VzcyJ9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHJ0KFRmLDgpLHJ0KEdnLDgpKX0sbC5cdTAyNzVjbXA9'@;
put 'a3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siY2xyLWNvbnRyb2wtc3VjY2VzcyJdXSxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGYpezImYSYmKFJyKCJpZCIsZi5pZCksZ3IoImNsci1zdWJ0ZXh0IiwhMCkpfSxmZWF0dXJlczpbcm9dLG5nQ29udGVudFNlbGVjdG9yczpPbyxk'@;
put 'ZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGYpezEmYSYmKFRpKCksRHIoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxsfSkoKSxEZj0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEpe3RoaXMubGF5b3V0U2VydmljZT1hLHRoaXMuY2xhc3NOYW1lPSIifWNvbnRyb2xDbGFzcyhh'@;
put 'PU4wLk5PTkUsZj0hMSxkPSIiKXtjb25zdCBoPVt0aGlzLmNsYXNzTmFtZSxkXTtzd2l0Y2goYSl7Y2FzZSBOMC5WQUxJRDpoLnB1c2goImNsci1zdWNjZXNzIik7YnJlYWs7Y2FzZSBOMC5JTlZBTElEOmgucHVzaCgiY2xyLWVycm9yIil9cmV0dXJuIGYmJnRoaXMubGF5b3V0U2VydmljZSYm'@;
put 'LTE9PT10aGlzLmNsYXNzTmFtZS5pbmRleE9mKCJjbHItY29sIikmJmgucHVzaChgY2xyLWNvbC1tZC0ke3RoaXMubGF5b3V0U2VydmljZS5tYXhMYWJlbFNpemUtdGhpcy5sYXlvdXRTZXJ2aWNlLmxhYmVsU2l6ZX0gY2xyLWNvbC0xMmApLGguam9pbigiICIpLnRyaW0oKX1pbml0Q29udHJv'@;
put 'bENsYXNzKGEsZil7ZiYmZi5jbGFzc05hbWUmJih0aGlzLmNsYXNzTmFtZT1mLmNsYXNzTmFtZSxmLmNsYXNzTmFtZS5zcGxpdCgiICIpLmZvckVhY2goaD0+e2guc3RhcnRzV2l0aCgiY2xyLWNvbCIpJiZhLnJlbW92ZUNsYXNzKGYsaCl9KSl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlv'@;
put 'bihhKXtyZXR1cm4gbmV3KGF8fGwpKHNyKG4zLDgpKX0sbC5cdTAyNzVwcm92PWhyKHt0b2tlbjpsLGZhY3Rvcnk6bC5cdTAyNzVmYWN9KSxsfSkoKSxvNz0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEsZixkLGgpe3RoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPWEsdGhpcy5sYXlvdXRT'@;
put 'ZXJ2aWNlPWYsdGhpcy5jb250cm9sQ2xhc3NTZXJ2aWNlPWQsdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPWgsdGhpcy5fZHluYW1pYz0hMSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2Uuc3RhdHVzQ2hhbmdlcy5z'@;
put 'dWJzY3JpYmUobT0+e3RoaXMuc3RhdGU9bSx0aGlzLnVwZGF0ZUhlbHBlcnMoKX0pKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLm5nQ29udHJvbFNlcnZpY2UuY29udHJvbENoYW5nZXMuc3Vic2NyaWJlKG09Pnt0aGlzLmNvbnRyb2w9bX0pKX1nZXQgc2hvd0hlbHBlcigpe3JldHVy'@;
put 'biEhdGhpcy5jb250cm9sSGVscGVyQ29tcG9uZW50JiYoISF0aGlzLmNvbnRyb2xIZWxwZXJDb21wb25lbnQmJighdGhpcy50b3VjaGVkfHx0aGlzLnN0YXRlPT09TjAuTk9ORSl8fCF0aGlzLmNvbnRyb2xTdWNjZXNzQ29tcG9uZW50JiZ0aGlzLnN0YXRlPT09TjAuVkFMSUR8fCF0aGlzLmNv'@;
put 'bnRyb2xFcnJvckNvbXBvbmVudCYmdGhpcy5zdGF0ZT09PU4wLklOVkFMSUQpfWdldCBzaG93VmFsaWQoKXtyZXR1cm4gdGhpcy50b3VjaGVkJiZ0aGlzLnN0YXRlPT09TjAuVkFMSUQmJiEhdGhpcy5jb250cm9sU3VjY2Vzc0NvbXBvbmVudH1nZXQgc2hvd0ludmFsaWQoKXtyZXR1cm4gdGhp'@;
put 'cy50b3VjaGVkJiZ0aGlzLnN0YXRlPT09TjAuSU5WQUxJRCYmISF0aGlzLmNvbnRyb2xFcnJvckNvbXBvbmVudH1nZXQgdG91Y2hlZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/LnRvdWNoZWR9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy51cGRhdGVIZWxwZXJzKCl9bmdPbkRlc3Ryb3koKXt0'@;
put 'aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfWNvbnRyb2xDbGFzcygpe3JldHVybiB0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2UuY29udHJvbENsYXNzKCF0aGlzLmNvbnRyb2xTdWNjZXNzQ29tcG9uZW50JiZ0aGlzLnN0YXRlPT09TjAuVkFMSUR8fCF0aGlz'@;
put 'LnRvdWNoZWQ/TjAuTk9ORTp0aGlzLnN0YXRlLHRoaXMuYWRkR3JpZCgpKX1hZGRHcmlkKCl7cmV0dXJuIHRoaXMubGF5b3V0U2VydmljZSYmIXRoaXMubGF5b3V0U2VydmljZS5pc1ZlcnRpY2FsKCl9dXBkYXRlSGVscGVycygpe3RoaXMubmdDb250cm9sU2VydmljZSYmdGhpcy5uZ0NvbnRy'@;
put 'b2xTZXJ2aWNlLnNldEhlbHBlcnMoe3Nob3c6dGhpcy5zaG93SW52YWxpZHx8dGhpcy5zaG93SGVscGVyfHx0aGlzLnNob3dWYWxpZCxzaG93SW52YWxpZDp0aGlzLnNob3dJbnZhbGlkLHNob3dIZWxwZXI6dGhpcy5zaG93SGVscGVyLHNob3dWYWxpZDp0aGlzLnNob3dWYWxpZH0pfX1yZXR1'@;
put 'cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChPZikscnQobjMsOCkscnQoRGYpLHJ0KEgwKSl9LGwuXHUwMjc1ZGlyPVNyKHt0eXBlOmwsY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxmLGQpe2lmKDEmYSYmKEZvKGQsZWwsNSksRm8oZCxsSGUsNSksRm8o'@;
put 'ZCxhSGUsNSksRm8oZCx4VSw1KSksMiZhKXtsZXQgaDt1aShoPWNpKCkpJiYoZi5sYWJlbD1oLmZpcnN0KSx1aShoPWNpKCkpJiYoZi5jb250cm9sU3VjY2Vzc0NvbXBvbmVudD1oLmZpcnN0KSx1aShoPWNpKCkpJiYoZi5jb250cm9sRXJyb3JDb21wb25lbnQ9aC5maXJzdCksdWkoaD1jaSgp'@;
put 'KSYmKGYuY29udHJvbEhlbHBlckNvbXBvbmVudD1oLmZpcnN0KX19fSksbH0pKCk7Y2xhc3MgZUl7Y29uc3RydWN0b3IoYyxhLGY9MCl7aWYodGhpcy5pbmplY3Rvcj1hLmluamVjdG9yLCF0aGlzLmluamVjdG9yLmdldChjLG51bGwpKXtjb25zdCBkPXRoaXMuaW5qZWN0b3IuZ2V0KGMxKSxo'@;
put 'PXRoaXMuaW5qZWN0b3IuZ2V0KFZpKTthLmNyZWF0ZUNvbXBvbmVudChkLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHJIZSkpO2NvbnN0IG09ZC5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShjKSxfPVtdO19bZl09W2gubmF0aXZlRWxlbWVudF07Y29uc3QgTz1hLmNyZWF0ZUNvbXBvbmVudCht'@;
put 'LHZvaWQgMCx2b2lkIDAsXyk7YS5yZW1vdmUoMCksTy5pbnN0YW5jZS5fZHluYW1pYz0hMCx0aGlzLmluamVjdG9yPU8uaW5qZWN0b3J9fWdldChjLGEpe3JldHVybiB0aGlzLmluamVjdG9yLmdldChjLGEpfX1sZXQgQVU9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3Rvcigpe3RoaXMuX3RvdWNo'@;
put 'ZWQ9bmV3IHdlfWdldCB0b3VjaGVkQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX3RvdWNoZWQuYXNPYnNlcnZhYmxlKCl9bWFya0FzVG91Y2hlZCgpe3RoaXMuX3RvdWNoZWQubmV4dCgpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVwcm92'@;
put 'PWhyKHt0b2tlbjpsLGZhY3Rvcnk6bC5cdTAyNzVmYWN9KSxsfSkoKSxhNz0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEsZixkLGgsbSxfKXt0aGlzLnZjcj1hLHRoaXMud3JhcHBlclR5cGU9Zix0aGlzLm5nQ29udHJvbD1oLHRoaXMuaW5kZXg9MCx0aGlzLnN1YnNjcmlwdGlvbnM9W10s'@;
put 'dGhpcy5yZW5kZXJlcj1tLHRoaXMuZWw9Xzt0cnl7dGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPWQuZ2V0KEgwKSx0aGlzLmlmQ29udHJvbFN0YXRlU2VydmljZT1kLmdldChPZiksdGhpcy5jb250cm9sQ2xhc3NTZXJ2aWNlPWQuZ2V0KERmKSx0aGlzLm1hcmtDb250cm9sU2VydmljZT1kLmdldChB'@;
put 'VSl9Y2F0Y2h7fXRoaXMuY29udHJvbENsYXNzU2VydmljZSYmdGhpcy5jb250cm9sQ2xhc3NTZXJ2aWNlLmluaXRDb250cm9sQ2xhc3MobSxfLm5hdGl2ZUVsZW1lbnQpLHRoaXMubWFya0NvbnRyb2xTZXJ2aWNlJiZ0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLm1hcmtDb250cm9sU2Vy'@;
put 'dmljZS50b3VjaGVkQ2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMubWFya0FzVG91Y2hlZCgpfSkpLHRoaXMubmdDb250cm9sU2VydmljZSYmdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5uZ0NvbnRyb2xTZXJ2aWNlLmhlbHBlcnNDaGFuZ2Uuc3Vic2NyaWJlKE89Pnt0aGlzLnNldEFy'@;
put 'aWFEZXNjcmliZWRCeShPKX0pKX1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWR9c2V0IGlkKGEpe3RoaXMuX2lkPWEsdGhpcy5jb250cm9sSWRTZXJ2aWNlJiYodGhpcy5jb250cm9sSWRTZXJ2aWNlLmlkPWEpfW5nT25Jbml0KCl7dGhpcy5fY29udGFpbmVySW5qZWN0b3I9bmV3IGVJKHRoaXMu'@;
put 'd3JhcHBlclR5cGUsdGhpcy52Y3IsdGhpcy5pbmRleCksdGhpcy5jb250cm9sSWRTZXJ2aWNlPXRoaXMuX2NvbnRhaW5lckluamVjdG9yLmdldChUZik7dHJ5e3RoaXMuY29udGFpbmVySWRTZXJ2aWNlPXRoaXMuX2NvbnRhaW5lckluamVjdG9yLmdldChHZyl9Y2F0Y2h7fXRoaXMuX2lkP3Ro'@;
put 'aXMuY29udHJvbElkU2VydmljZS5pZD10aGlzLl9pZDp0aGlzLl9pZD10aGlzLmNvbnRyb2xJZFNlcnZpY2UuaWQsdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlJiZ0aGlzLm5nQ29udHJvbFNlcnZpY2Uuc2V0Q29udHJvbCh0aGlzLm5nQ29udHJvbCl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlw'@;
put 'dGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXRyaWdnZXJWYWxpZGF0aW9uKCl7dGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2UmJnRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlLnRyaWdnZXJTdGF0dXNDaGFuZ2UoKX1nZXRQcm92aWRlckZyb21Db250YWluZXIoYSxmKXt0cnl7'@;
put 'cmV0dXJuIHRoaXMuX2NvbnRhaW5lckluamVjdG9yLmdldChhLGYpfWNhdGNoe3JldHVybiBmfX1tYXJrQXNUb3VjaGVkKCl7dGhpcy5uZ0NvbnRyb2wuY29udHJvbC5tYXJrQXNUb3VjaGVkKCksdGhpcy5uZ0NvbnRyb2wuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCl9c2V0QXJp'@;
put 'YURlc2NyaWJlZEJ5KGEpe2lmKGEuc2hvdyl7Y29uc3QgZj10aGlzLmdldEFyaWFEZXNjcmliZWRCeUlkKGEpO2lmKG51bGwhPT1mKXJldHVybiB2b2lkIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiYXJpYS1kZXNjcmliZWRieSIsZil9dGhpcy5y'@;
put 'ZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJhcmlhLWRlc2NyaWJlZGJ5Iil9Z2V0QXJpYURlc2NyaWJlZEJ5SWQoYSl7bGV0IGY9ImhlbHBlciI7cmV0dXJuIGEuc2hvd0ludmFsaWQ/Zj0iZXJyb3IiOmEuc2hvd1ZhbGlkJiYoZj0ic3VjY2VzcyIpLHRo'@;
put 'aXMuY29udGFpbmVySWRTZXJ2aWNlP3RoaXMuY29udGFpbmVySWRTZXJ2aWNlLmlkLmNvbmNhdCgiLSIsZik6dGhpcy5jb250cm9sSWRTZXJ2aWNlP3RoaXMuY29udHJvbElkU2VydmljZS5pZC5jb25jYXQoIi0iLGYpOm51bGx9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1'@;
put 'cm4gbmV3KGF8fGwpKHJ0KGZhKSxydChkOCkscnQoQWwpLHJ0KHFjKSxydChqbykscnQoVmkpKX0sbC5cdTAyNzVkaXI9U3Ioe3R5cGU6bCxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGYpezEmYSYmRXQoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGYudHJpZ2dlclZhbGlk'@;
put 'YXRpb24oKX0pLDImYSYmbTEoImlkIixmLmlkKX0saW5wdXRzOntpZDoiaWQifX0pLGx9KSgpLHZzZT0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEsZil7dGhpcy5sYXlvdXRTZXJ2aWNlPWEsdGhpcy5tYXJrQ29udHJvbFNlcnZpY2U9Zn1zZXQgbGFiZWxTaXplKGEpe2NvbnN0IGY9cGFy'@;
put 'c2VJbnQoYSwxMCl8fDI7dGhpcy5sYXlvdXRTZXJ2aWNlLmxhYmVsU2l6ZT1mfW9uRm9ybVN1Ym1pdCgpe3RoaXMubWFya0FzVG91Y2hlZCgpfW1hcmtBc1RvdWNoZWQoKXt0aGlzLm1hcmtDb250cm9sU2VydmljZS5tYXJrQXNUb3VjaGVkKCl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlv'@;
put 'bihhKXtyZXR1cm4gbmV3KGF8fGwpKHJ0KG4zKSxydChBVSkpfSxsLlx1MDI3NWRpcj1Tcih7dHlwZTpsLHNlbGVjdG9yczpbWyIiLCJjbHJGb3JtIiwiIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZixkKXtpZigxJmEmJkZvKGQsZWwsNSksMiZhKXtsZXQgaDt1aShoPWNpKCkpJiYo'@;
put 'Zi5sYWJlbHM9aCl9fSxob3N0VmFyczo2LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGYpezEmYSYmRXQoInN1Ym1pdCIsZnVuY3Rpb24oKXtyZXR1cm4gZi5vbkZvcm1TdWJtaXQoKX0pLDImYSYmZ3IoImNsci1mb3JtIiwhMCkoImNsci1mb3JtLWhvcml6b250YWwiLGYubGF5b3V0U2Vydmlj'@;
put 'ZS5pc0hvcml6b250YWwoKSkoImNsci1mb3JtLWNvbXBhY3QiLGYubGF5b3V0U2VydmljZS5pc0NvbXBhY3QoKSl9LGlucHV0czp7bGFiZWxTaXplOlsiY2xyTGFiZWxTaXplIiwibGFiZWxTaXplIl19LGZlYXR1cmVzOltyaShbbjMsQVVdKV19KSxsfSkoKSxKdT0oKCk9PntjbGFzcyBse2Nv'@;
put 'bnN0cnVjdG9yKCl7amEuYWRkSWNvbnMoXzEsdzEpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVtb2Q9RGkoe3R5cGU6bH0pLGwuXHUwMjc1aW5qPXhpKHtpbXBvcnRzOltbYm8sbGxdXX0pLGx9KSgpO2NvbnN0IFRVPW5ldyBNaSgi'@;
put 'SVNfVE9HR0xFIiksZkhlPXtwcm92aWRlOlRVLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gY0hlKCl7cmV0dXJuIG5ldyBPZSghMSl9fTtsZXQgVjA9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhKXt0aGlzLl9keW5hbWljPSExLHRoaXMudG9nZ2xlPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0'@;
put 'aGlzLnN1YnNjcmlwdGlvbnMucHVzaChhLnN1YnNjcmliZShmPT57dGhpcy50b2dnbGU9Zn0pKX1uZ09uSW5pdCgpe3RoaXMubGFiZWwmJnRoaXMubGFiZWwuZGlzYWJsZUdyaWQoKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9'@;
put 'fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHJ0KFRVKSl9LGwuXHUwMjc1Y21wPWtyKHt0eXBlOmwsc2VsZWN0b3JzOltbImNsci1jaGVja2JveC13cmFwcGVyIl0sWyJjbHItdG9nZ2xlLXdyYXBwZXIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24o'@;
put 'YSxmLGQpe2lmKDEmYSYmRm8oZCxlbCw3KSwyJmEpe2xldCBoO3VpKGg9Y2koKSkmJihmLmxhYmVsPWguZmlyc3QpfX0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxmKXsyJmEmJmdyKCJjbHItY2hlY2tib3gtd3JhcHBlciIsIWYudG9nZ2xlKSgiY2xyLXRvZ2dsZS13cmFw'@;
put 'cGVyIixmLnRvZ2dsZSl9LGZlYXR1cmVzOltyaShbVGYsZkhlXSldLG5nQ29udGVudFNlbGVjdG9yczppSWUsZGVjbHM6Myx2YXJzOjEsY29uc3RzOltbNCwibmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGYpezEmYSYmKFRpKHJJZSksRHIoMCksRHIoMSwxKSx0dCgyLG5JZSwxLDAsImxh'@;
put 'YmVsIiwwKSksMiZhJiYoU2UoMiksUmUoIm5nSWYiLCFmLmxhYmVsKSl9LGRlcGVuZGVuY2llczpbJGksZWxdLGVuY2Fwc3VsYXRpb246Mn0pLGx9KSgpLEIwPSgoKT0+e2NsYXNzIGwgZXh0ZW5kcyBhN3tjb25zdHJ1Y3RvcihhLGYsZCxoLG0sXyl7c3VwZXIoYSxWMCxmLGQsaCxtKSx0aGlz'@;
put 'LnRvZ2dsZT1ffW5nT25Jbml0KCl7c3VwZXIubmdPbkluaXQoKTtjb25zdCBhPXRoaXMuZ2V0UHJvdmlkZXJGcm9tQ29udGFpbmVyKFRVLG51bGwpO2EmJm51bGwhPT10aGlzLnRvZ2dsZSYmYS5uZXh0KCEwKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8'@;
put 'bCkocnQoZmEpLHJ0KEFsKSxydChxYywxMCkscnQoam8pLHJ0KFZpKSxJbSgiY2xyVG9nZ2xlIikpfSxsLlx1MDI3NWRpcj1Tcih7dHlwZTpsLHNlbGVjdG9yczpbWyIiLCJjbHJDaGVja2JveCIsIiJdLFsiIiwiY2xyVG9nZ2xlIiwiIl1dLGZlYXR1cmVzOltyb119KSxsfSkoKSxsNz0oKCk9'@;
put 'PntjbGFzcyBsIGV4dGVuZHMgbzd7Y29uc3RydWN0b3IoYSxmLGQsaCl7c3VwZXIoaCxhLGYsZCksdGhpcy5sYXlvdXRTZXJ2aWNlPWEsdGhpcy5jb250cm9sQ2xhc3NTZXJ2aWNlPWYsdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPWQsdGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2U9aCx0aGlzLmlu'@;
put 'bGluZT0hMX1nZXQgY2xySW5saW5lKCl7cmV0dXJuIHRoaXMuaW5saW5lfXNldCBjbHJJbmxpbmUoYSl7dGhpcy5pbmxpbmU9InN0cmluZyI9PXR5cGVvZiBhPyJmYWxzZSIhPT1hOiEhYX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnNldEFyaWFSb2xlcygpfXNldEFyaWFSb2xlcygpe3Ro'@;
put 'aXMucm9sZT10aGlzLmNoZWNrYm94ZXMubGVuZ3RoPyJncm91cCI6bnVsbH19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkocnQobjMsOCkscnQoRGYpLHJ0KEgwKSxydChPZikpfSxsLlx1MDI3NWNtcD1rcih7dHlwZTpsLHNlbGVjdG9yczpbWyJjbHIt'@;
put 'Y2hlY2tib3gtY29udGFpbmVyIl0sWyJjbHItdG9nZ2xlLWNvbnRhaW5lciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGYsZCl7aWYoMSZhJiZGbyhkLEIwLDUpLDImYSl7bGV0IGg7dWkoaD1jaSgpKSYmKGYuY2hlY2tib3hlcz1oKX19LGhvc3RWYXJzOjcsaG9zdEJpbmRpbmdzOmZ1'@;
put 'bmN0aW9uKGEsZil7MiZhJiYoUnIoInJvbGUiLGYucm9sZSksZ3IoImNsci1mb3JtLWNvbnRyb2wiLCEwKSgiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCIsbnVsbD09Zi5jb250cm9sP251bGw6Zi5jb250cm9sLmRpc2FibGVkKSgiY2xyLXJvdyIsZi5hZGRHcmlkKCkpKX0saW5wdXRzOntj'@;
put 'bHJJbmxpbmU6ImNscklubGluZSJ9LGZlYXR1cmVzOltyaShbT2YsSDAsRGYsR2ddKSxyb10sbmdDb250ZW50U2VsZWN0b3JzOmRJZSxkZWNsczoxMCx2YXJzOjksY29uc3RzOltbNCwibmdJZiJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiLDMsIm5nQ2xhc3MiXSxbMSwiY2xyLXN1YnRl'@;
put 'eHQtd3JhcHBlciJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJjaGVjay1j'@;
put 'aXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXSxbInNoYXBlIiwiY2hlY2st'@;
put 'Y2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxmKXsxJmEmJihUaShmSWUpLERyKDApLHR0KDEsb0llLDEsMCwibGFiZWwiLDApLHllKDIsImRpdiIsMSksRHIoMywxKSx5ZSg0'@;
put 'LCJkaXYiLDIpLHR0KDUsYUllLDEsMCwibmctY29udGVudCIsMCksdHQoNixsSWUsMSwwLCJjZHMtaWNvbiIsMyksdHQoNyxzSWUsMSwwLCJjZHMtaWNvbiIsNCksdHQoOCx1SWUsMSwwLCJuZy1jb250ZW50IiwwKSx0dCg5LGNJZSwxLDAsIm5nLWNvbnRlbnQiLDApLENlKCkoKSksMiZhJiYo'@;
put 'U2UoMSksUmUoIm5nSWYiLCFmLmxhYmVsJiZmLmFkZEdyaWQoKSksU2UoMSksZ3IoImNsci1jb250cm9sLWlubGluZSIsZi5jbHJJbmxpbmUpLFJlKCJuZ0NsYXNzIixmLmNvbnRyb2xDbGFzcygpKSxTZSgzKSxSZSgibmdJZiIsZi5zaG93SGVscGVyKSxTZSgxKSxSZSgibmdJZiIsZi5zaG93'@;
put 'SW52YWxpZCksU2UoMSksUmUoIm5nSWYiLGYuc2hvd1ZhbGlkKSxTZSgxKSxSZSgibmdJZiIsZi5zaG93SW52YWxpZCksU2UoMSksUmUoIm5nSWYiLGYuc2hvd1ZhbGlkKSl9LGRlcGVuZGVuY2llczpbJGksZWwseXUsSmFdLGVuY2Fwc3VsYXRpb246Mn0pLGx9KSgpLGRIZT0oKCk9PntjbGFz'@;
put 'cyBse2NvbnN0cnVjdG9yKCl7amEuYWRkSWNvbnMoXzEsdzEpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVtb2Q9RGkoe3R5cGU6bH0pLGwuXHUwMjc1aW5qPXhpKHtpbXBvcnRzOltbYm8sbGwsSnUsUURdLEp1XX0pLGx9KSgpO2Z1'@;
put 'bmN0aW9uIElmKGwpe3JldHVybiBudWxsIT09bCYmKCJzdHJpbmciPT10eXBlb2YgbD9sLmxlbmd0aD49MDoiYm9vbGVhbiI9PXR5cGVvZiBsJiZsKX1sZXQgUmg9KCgpPT57Y2xhc3MgbHtnZXQgc3Bpbm5lckNsYXNzKCl7cmV0dXJuITB9Z2V0IGlubGluZUNsYXNzKCl7cmV0dXJuIHRoaXMu'@;
put 'X2lubGluZX1zZXQgY2xySW5saW5lKGEpe3RoaXMuX2lubGluZT1JZihhKX1nZXQgaW52ZXJzZUNsYXNzKCl7cmV0dXJuIHRoaXMuX2ludmVyc2V9c2V0IGNsckludmVyc2UoYSl7dGhpcy5faW52ZXJzZT1JZihhKX1nZXQgc21hbGxDbGFzcygpe3JldHVybiB0aGlzLl9zbWFsbH1zZXQgY2xy'@;
put 'U21hbGwoYSl7dGhpcy5fc21hbGw9SWYoYSl9Z2V0IG1lZGl1bUNsYXNzKCl7cmV0dXJuIXRoaXMuX3NtYWxsJiZ0aGlzLl9tZWRpdW19c2V0IGNsck1lZGl1bShhKXt0aGlzLl9tZWRpdW09SWYoYSl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxs'@;
put 'Llx1MDI3NWNtcD1rcih7dHlwZTpsLHNlbGVjdG9yczpbWyJjbHItc3Bpbm5lciJdXSxob3N0VmFyczoxMSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxmKXsyJmEmJihScigiYXJpYS1idXN5IiwhMCksZ3IoInNwaW5uZXIiLGYuc3Bpbm5lckNsYXNzKSgic3Bpbm5lci1pbmxpbmUiLGYuaW5s'@;
put 'aW5lQ2xhc3MpKCJzcGlubmVyLWludmVyc2UiLGYuaW52ZXJzZUNsYXNzKSgic3Bpbm5lci1zbSIsZi5zbWFsbENsYXNzKSgic3Bpbm5lci1tZCIsZi5tZWRpdW1DbGFzcykpfSxpbnB1dHM6e2NscklubGluZToiY2xySW5saW5lIixjbHJJbnZlcnNlOiJjbHJJbnZlcnNlIixjbHJTbWFsbDoi'@;
put 'Y2xyU21hbGwiLGNsck1lZGl1bToiY2xyTWVkaXVtIn0sbmdDb250ZW50U2VsZWN0b3JzOk9vLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZil7MSZhJiYoVGkoKSxEcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGx9KSgpLGZTPSgoKT0+e2NsYXNzIGx7fXJldHVybiBsLlx1'@;
put 'MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NW1vZD1EaSh7dHlwZTpsfSksbC5cdTAyNzVpbmo9eGkoe2ltcG9ydHM6W1tib11dfSksbH0pKCk7dmFyIHY0PWZ1bmN0aW9uKGwpe3JldHVybiBsLlZFUlRJQ0FMPSJ2ZXJ0aWNhbCIsbC5IT1JJWk9OVEFMPSJo'@;
put 'b3Jpem9udGFsIixsLkJPVEg9ImJvdGgiLGx9KHY0fHx7fSk7bGV0IHlzZT0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEsZil7dGhpcy5lbGVtZW50UmVmPWEsdGhpcy5wbGF0Zm9ybUlkPWZ9Z2V0IG5hdGl2ZUVsZW1lbnQoKXtyZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1l'@;
put 'bnR9Zm9jdXMoKXtIYSh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChWaSkscnQocWEpKX0sbC5cdTAyNzVkaXI9U3Ioe3R5cGU6bCxzZWxlY3Rv'@;
put 'cnM6W1siIiwiY2xyS2V5Rm9jdXNJdGVtIiwiIl1dfSksbH0pKCksczc9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhKXt0aGlzLmVsZW1lbnRSZWY9YSx0aGlzLmRpcmVjdGlvbj12NC5WRVJUSUNBTCx0aGlzLmZvY3VzT25Mb2FkPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLmZv'@;
put 'Y3VzQ2hhbmdlPW5ldyB4cix0aGlzLl9jdXJyZW50PTB9Z2V0IGZvY3VzYWJsZUl0ZW1zKCl7cmV0dXJuIHRoaXMuX2ZvY3VzYWJsZUl0ZW1zP3RoaXMuX2ZvY3VzYWJsZUl0ZW1zOnRoaXMuY2xyS2V5Rm9jdXNJdGVtcz90aGlzLmNscktleUZvY3VzSXRlbXMudG9BcnJheSgpOltdfXNldCBm'@;
put 'b2N1c2FibGVJdGVtcyhhKXtBcnJheS5pc0FycmF5KGEpJiZhLmxlbmd0aCYmKHRoaXMuX2ZvY3VzYWJsZUl0ZW1zPWEsdGhpcy5pbml0aWFsaXplRm9jdXMoKSl9Z2V0IG5hdGl2ZUVsZW1lbnQoKXtyZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnR9Z2V0IGN1cnJlbnQoKXty'@;
put 'ZXR1cm4gdGhpcy5fY3VycmVudH1zZXQgY3VycmVudChhKXt0aGlzLl9jdXJyZW50IT09YSYmKHRoaXMuX2N1cnJlbnQ9YSl9Z2V0IGN1cnJlbnRJdGVtKCl7cmV0dXJuIHRoaXMuZm9jdXNhYmxlSXRlbXNbdGhpcy5fY3VycmVudF19Z2V0IGN1cnJlbnRJdGVtRWxlbWVudCgpe3JldHVybiB0'@;
put 'aGlzLmN1cnJlbnRJdGVtLm5hdGl2ZUVsZW1lbnQ/dGhpcy5jdXJyZW50SXRlbS5uYXRpdmVFbGVtZW50OnRoaXMuY3VycmVudEl0ZW19bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5saXN0ZW5Gb3JJdGVtVXBkYXRlcygpKSx0aGlzLmluaXRpYWxp'@;
put 'emVGb2N1cygpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1oYW5kbGVLZXlib2FyZEV2ZW50KGEpe2lmKHRoaXMuY3VycmVudEl0ZW1FbGVtZW50IT09YS50YXJnZXQpe2NvbnN0IGY9dGhpcy5nZXRJdGVtUG9zaXRpb24oYS50'@;
put 'YXJnZXQpO3RoaXMucG9zaXRpb25JblJhbmdlKGYpJiYodGhpcy5jdXJyZW50PWYpfXRoaXMucHJldktleVByZXNzZWQoYSkmJnRoaXMuY3VycmVudEZvY3VzSXNOb3RGaXJzdEl0ZW0oKT90aGlzLm1vdmVUbyh0aGlzLmN1cnJlbnQtMSk6dGhpcy5uZXh0S2V5UHJlc3NlZChhKSYmdGhpcy5j'@;
put 'dXJyZW50Rm9jdXNJc05vdExhc3RJdGVtKCk/dGhpcy5tb3ZlVG8odGhpcy5jdXJyZW50KzEpOmEuY29kZT09PU1vLkhvbWU/dGhpcy5tb3ZlVG8oMCk6YS5jb2RlPT09TW8uRW5kJiZ0aGlzLm1vdmVUbyh0aGlzLmZvY3VzYWJsZUl0ZW1zLmxlbmd0aC0xKSxiVShhKX1zZXRDbGlja2VkSXRl'@;
put 'bUN1cnJlbnQoYSl7Y29uc3QgZj10aGlzLmdldEl0ZW1Qb3NpdGlvbihhLnRhcmdldCk7Zj4tMSYmdGhpcy5tb3ZlVG8oZil9Zm9jdXNDdXJyZW50KCl7dGhpcy5jdXJyZW50SXRlbS5mb2N1cygpLHRoaXMuZm9jdXNDaGFuZ2UubmV4dCh0aGlzLl9jdXJyZW50KX1tb3ZlVG8oYSl7dGhpcy5w'@;
put 'b3NpdGlvbkluUmFuZ2UoYSkmJih0aGlzLmN1cnJlbnQ9YSx0aGlzLmZvY3VzQ3VycmVudCgpKX1wb3NpdGlvbkluUmFuZ2UoYSl7cmV0dXJuIGE+PTAmJmE8dGhpcy5mb2N1c2FibGVJdGVtcy5sZW5ndGh9Y3VycmVudEZvY3VzSXNOb3RGaXJzdEl0ZW0oKXtyZXR1cm4gdGhpcy5fY3VycmVu'@;
put 'dC0xPj0wfWN1cnJlbnRGb2N1c0lzTm90TGFzdEl0ZW0oKXtyZXR1cm4gdGhpcy5fY3VycmVudCsxPHRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RofWluaXRpYWxpemVGb2N1cygpe3RoaXMuZm9jdXNhYmxlSXRlbXMmJnRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RoJiYodGhpcy5fY3VycmVu'@;
put 'dD49dGhpcy5mb2N1c2FibGVJdGVtcy5sZW5ndGgmJih0aGlzLl9jdXJyZW50PXRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RoLTEpLHRoaXMuZm9jdXNPbkxvYWQmJih0aGlzLmN1cnJlbnRJdGVtLmZvY3VzKCksdGhpcy5mb2N1c0NoYW5nZS5uZXh0KCkpKX1uZXh0S2V5UHJlc3NlZChhKXtj'@;
put 'b25zdCBmPUVkKGEua2V5KTtzd2l0Y2godGhpcy5kaXJlY3Rpb24pe2Nhc2UgdjQuVkVSVElDQUw6cmV0dXJuIGY9PT1Nby5BcnJvd0Rvd247Y2FzZSB2NC5IT1JJWk9OVEFMOnJldHVybiBmPT09TW8uQXJyb3dSaWdodDtjYXNlIHY0LkJPVEg6cmV0dXJuIGY9PT1Nby5BcnJvd0Rvd258fGY9'@;
put 'PT1Nby5BcnJvd1JpZ2h0O2RlZmF1bHQ6cmV0dXJuITF9fXByZXZLZXlQcmVzc2VkKGEpe2NvbnN0IGY9RWQoYS5rZXkpO3N3aXRjaCh0aGlzLmRpcmVjdGlvbil7Y2FzZSB2NC5WRVJUSUNBTDpyZXR1cm4gZj09PU1vLkFycm93VXA7Y2FzZSB2NC5IT1JJWk9OVEFMOnJldHVybiBmPT09TW8u'@;
put 'QXJyb3dMZWZ0O2Nhc2UgdjQuQk9USDpyZXR1cm4gZj09PU1vLkFycm93VXB8fGY9PT1Nby5BcnJvd0xlZnQ7ZGVmYXVsdDpyZXR1cm4hMX19Z2V0SXRlbVBvc2l0aW9uKGEpe3JldHVybiB0aGlzLl9mb2N1c2FibGVJdGVtcz90aGlzLmZvY3VzYWJsZUl0ZW1zLmluZGV4T2YoYSk6dGhpcy5m'@;
put 'b2N1c2FibGVJdGVtcy5tYXAoZj0+Zi5uYXRpdmVFbGVtZW50KS5pbmRleE9mKGEpfWxpc3RlbkZvckl0ZW1VcGRhdGVzKCl7cmV0dXJuIHRoaXMuY2xyS2V5Rm9jdXNJdGVtcy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuaW5pdGlhbGl6ZUZvY3VzKCl9KX19cmV0dXJuIGwuXHUwMjc1'@;
put 'ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkocnQoVmkpKX0sbC5cdTAyNzVjbXA9a3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siIiwiY2xyS2V5Rm9jdXMiLCIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxmLGQpe2lmKDEmYSYmRm8oZCx5c2UsNSksMiZhKXtsZXQgaDt1aSho'@;
put 'PWNpKCkpJiYoZi5jbHJLZXlGb2N1c0l0ZW1zPWgpfX0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZil7MSZhJiZFdCgia2V5ZG93biIsZnVuY3Rpb24oaCl7cmV0dXJuIGYuaGFuZGxlS2V5Ym9hcmRFdmVudChoKX0pKCJjbGljayIsZnVuY3Rpb24oaCl7cmV0dXJuIGYuc2V0Q2xpY2tlZEl0'@;
put 'ZW1DdXJyZW50KGgpfSl9LGlucHV0czp7ZGlyZWN0aW9uOlsiY2xyRGlyZWN0aW9uIiwiZGlyZWN0aW9uIl0sZm9jdXNPbkxvYWQ6WyJjbHJGb2N1c09uTG9hZCIsImZvY3VzT25Mb2FkIl0sZm9jdXNhYmxlSXRlbXM6WyJjbHJLZXlGb2N1cyIsImZvY3VzYWJsZUl0ZW1zIl19LG91dHB1dHM6'@;
put 'e2ZvY3VzQ2hhbmdlOiJjbHJGb2N1c0NoYW5nZSJ9LGF0dHJzOmhJZSxuZ0NvbnRlbnRTZWxlY3RvcnM6T28sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxmKXsxJmEmJihUaSgpLERyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksbH0pKCksT1U9KCgpPT57Y2xhc3MgbHt9cmV0'@;
put 'dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1bW9kPURpKHt0eXBlOmx9KSxsLlx1MDI3NWluaj14aSh7aW1wb3J0czpbW2JvXV19KSxsfSkoKTtjb25zdCB1Nz1uZXcgTWkoIlBPUE9WRVJfSE9TVF9BTkNIT1IiKTtjbGFzcyBoSGV7Y29udGFp'@;
put 'bnNJdGVtKGMpe3JldHVybiEhdGhpcy5tb2RlbCYmdGhpcy5tb2RlbC5pbmNsdWRlcyhjKX1zZWxlY3QoYyl7dGhpcy5hZGRJdGVtKGMpfXVuc2VsZWN0KGMpe3RoaXMucmVtb3ZlSXRlbShjKX1pc0VtcHR5KCl7cmV0dXJuISh0aGlzLm1vZGVsJiZ0aGlzLm1vZGVsLmxlbmd0aD4wKX1wb3Ao'@;
put 'KXtsZXQgYztyZXR1cm4gdGhpcy5tb2RlbCYmdGhpcy5tb2RlbC5sZW5ndGg+MCYmKGM9dGhpcy5tb2RlbFt0aGlzLm1vZGVsLmxlbmd0aC0xXSx0aGlzLnJlbW92ZUl0ZW0oYykpLGN9dG9TdHJpbmcoYyxhPS0xKXtsZXQgZj0iIjtyZXR1cm4gdGhpcy5tb2RlbCYmKGE+LTE/dGhpcy5tb2Rl'@;
put 'bFthXSYmKGYrPWMmJnRoaXMubW9kZWxbYV1bY10/dGhpcy5tb2RlbFthXVtjXTp0aGlzLm1vZGVsW2FdLnRvU3RyaW5nKCkpOnRoaXMubW9kZWwuZm9yRWFjaChkPT57Zis9YyYmZFtjXT9kW2NdOmQudG9TdHJpbmcoKSxmKz0iICJ9KSksZi50cmltKCl9YWRkSXRlbShjKXt0aGlzLmNvbnRh'@;
put 'aW5zSXRlbShjKXx8KHRoaXMubW9kZWw9dGhpcy5tb2RlbHx8W10sdGhpcy5tb2RlbC5wdXNoKGMpKX1yZW1vdmVJdGVtKGMpe2lmKG51bGw9PXRoaXMubW9kZWwpcmV0dXJuO2NvbnN0IGE9dGhpcy5tb2RlbC5pbmRleE9mKGMpO2E+LTEmJnRoaXMubW9kZWwuc3BsaWNlKGEsMSksMD09PXRo'@;
put 'aXMubW9kZWwubGVuZ3RoJiYodGhpcy5tb2RlbD1udWxsKX19Y2xhc3MgcEhle2NvbnRhaW5zSXRlbShjKXtyZXR1cm4gdGhpcy5tb2RlbD09PWN9c2VsZWN0KGMpe3RoaXMubW9kZWw9Y311bnNlbGVjdChjKXt0aGlzLmNvbnRhaW5zSXRlbShjKSYmKHRoaXMubW9kZWw9bnVsbCl9aXNFbXB0'@;
put 'eSgpe3JldHVybiF0aGlzLm1vZGVsfXBvcCgpe2NvbnN0IGM9dGhpcy5tb2RlbDtyZXR1cm4gdGhpcy5tb2RlbD1udWxsLGN9dG9TdHJpbmcoYyl7cmV0dXJuIHRoaXMubW9kZWw/YyYmdGhpcy5tb2RlbFtjXT90aGlzLm1vZGVsW2NdOnRoaXMubW9kZWwudG9TdHJpbmcoKToiIn19Y2xhc3Mg'@;
put 'dEl7fWZ1bmN0aW9uIGJzZShsKXtyZXR1cm5bbCx7cHJvdmlkZTp0SSx1c2VFeGlzdGluZzpsfV19Y2xhc3MgbUhlIGV4dGVuZHMgcEhle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9mb2N1c0NoYW5nZWQ9bmV3IE9lKG51bGwpfWdldCBmb2N1c0NoYW5nZWQoKXty'@;
put 'ZXR1cm4gdGhpcy5fZm9jdXNDaGFuZ2VkLmFzT2JzZXJ2YWJsZSgpfXNlbGVjdChjKXt0aGlzLm1vZGVsIT09YyYmKHRoaXMubW9kZWw9Yyx0aGlzLl9mb2N1c0NoYW5nZWQubmV4dChjKSl9fWxldCBnSGU9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3Rvcigpe3RoaXMubG9hZGluZz0hMSx0aGlz'@;
put 'Ll9jdXJyZW50SW5wdXQ9IiIsdGhpcy5faW5wdXRDaGFuZ2VkPW5ldyBPZSgiIiksdGhpcy5fc2VsZWN0aW9uQ2hhbmdlZD1uZXcgeEQoMSksdGhpcy5pbnB1dENoYW5nZWQ9dGhpcy5faW5wdXRDaGFuZ2VkLmFzT2JzZXJ2YWJsZSgpfWdldCBjdXJyZW50SW5wdXQoKXtyZXR1cm4gdGhpcy5f'@;
put 'Y3VycmVudElucHV0fXNldCBjdXJyZW50SW5wdXQoYSl7IiI9PT1hJiYhdGhpcy5tdWx0aXNlbGVjdGFibGUmJnRoaXMuc2V0U2VsZWN0aW9uVmFsdWUobnVsbCksdGhpcy5fY3VycmVudElucHV0PWEsdGhpcy5faW5wdXRDaGFuZ2VkLm5leHQoYSl9Z2V0IHNlbGVjdGlvbkNoYW5nZWQoKXty'@;
put 'ZXR1cm4gdGhpcy5fc2VsZWN0aW9uQ2hhbmdlZC5hc09ic2VydmFibGUoKX1nZXQgbXVsdGlzZWxlY3RhYmxlKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uTW9kZWwgaW5zdGFuY2VvZiBoSGV9c2VsZWN0KGEpe251bGw9PWF8fHRoaXMuc2VsZWN0aW9uTW9kZWwuY29udGFpbnNJdGVtKGEpfHwo'@;
put 'dGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoYSksdGhpcy5fc2VsZWN0aW9uQ2hhbmdlZC5uZXh0KHRoaXMuc2VsZWN0aW9uTW9kZWwpKX10b2dnbGUoYSl7bnVsbCE9YSYmKHRoaXMuc2VsZWN0aW9uTW9kZWwuY29udGFpbnNJdGVtKGEpP3RoaXMuc2VsZWN0aW9uTW9kZWwudW5zZWxlY3Qo'@;
put 'YSk6dGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoYSksdGhpcy5fc2VsZWN0aW9uQ2hhbmdlZC5uZXh0KHRoaXMuc2VsZWN0aW9uTW9kZWwpKX11bnNlbGVjdChhKXtudWxsPT1hfHwhdGhpcy5zZWxlY3Rpb25Nb2RlbC5jb250YWluc0l0ZW0oYSl8fCh0aGlzLnNlbGVjdGlvbk1vZGVsLnVu'@;
put 'c2VsZWN0KGEpLHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQubmV4dCh0aGlzLnNlbGVjdGlvbk1vZGVsKSl9c2V0U2VsZWN0aW9uVmFsdWUoYSl7IXRoaXMuc2VsZWN0aW9uTW9kZWx8fHRoaXMuc2VsZWN0aW9uTW9kZWwubW9kZWw9PT1hfHwhdGhpcy5zZWxlY3Rpb25Nb2RlbC5tb2RlbCYmIWF8'@;
put 'fCh0aGlzLnNlbGVjdGlvbk1vZGVsLm1vZGVsPWEsdGhpcy5fc2VsZWN0aW9uQ2hhbmdlZC5uZXh0KHRoaXMuc2VsZWN0aW9uTW9kZWwpKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1cHJvdj1ocih7dG9rZW46bCxmYWN0b3J5Omwu'@;
put 'XHUwMjc1ZmFjfSksbH0pKCk7YnNlKCgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmLGQsaCl7dGhpcy50b2dnbGVTZXJ2aWNlPWYsdGhpcy5zZWxlY3Rpb25TZXJ2aWNlPWQsdGhpcy5wbGF0Zm9ybUlkPWgsdGhpcy5wc2V1ZG9Gb2N1cz1uZXcgbUhlLHRoaXMub3B0aW9uRGF0YT1bXSx0'@;
put 'aGlzLmhhbmRsZUZvY3VzU3Vic2NyaXB0aW9uKCksdGhpcy5yZW5kZXJlcj1hLmNyZWF0ZVJlbmRlcmVyKG51bGwsbnVsbCl9Z2V0IHRyaWdnZXIoKXtyZXR1cm4gdGhpcy5fdHJpZ2dlcn1zZXQgdHJpZ2dlcihhKXt0aGlzLl90cmlnZ2VyPWEsdGhpcy5hZGRGb2N1c09uQmx1ckxpc3RlbmVy'@;
put 'KGEpfWdldCBsaXN0Ym94KCl7cmV0dXJuIHRoaXMuX2xpc3Rib3h9c2V0IGxpc3Rib3goYSl7dGhpcy5fbGlzdGJveD1hLHRoaXMuYWRkRm9jdXNPbkJsdXJMaXN0ZW5lcihhKX1nZXQgdGV4dElucHV0KCl7cmV0dXJuIHRoaXMuX3RleHRJbnB1dH1zZXQgdGV4dElucHV0KGEpe3RoaXMuX3Rl'@;
put 'eHRJbnB1dD1hLHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24iLGY9PiF0aGlzLmhhbmRsZVRleHRJbnB1dChmKSksdGhpcy5hZGRGb2N1c09uQmx1ckxpc3RlbmVyKGEpfWZvY3VzSW5wdXQoKXt0aGlzLnRleHRJbnB1dCYmSGEodGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy50ZXh0SW5w'@;
put 'dXQuZm9jdXMoKX1mb2N1c0ZpcnN0QWN0aXZlKCl7aWYodGhpcy5vcHRpb25EYXRhLmxlbmd0aD4wKWlmKHRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3Rpb25Nb2RlbC5pc0VtcHR5KCkpdGhpcy5wc2V1ZG9Gb2N1cy5zZWxlY3QodGhpcy5vcHRpb25EYXRhWzBdKTtlbHNle2xldCBhO2E9'@;
put 'dGhpcy5zZWxlY3Rpb25TZXJ2aWNlLm11bHRpc2VsZWN0YWJsZT90aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwubW9kZWxbMF06dGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdGlvbk1vZGVsLm1vZGVsO2NvbnN0IGY9dGhpcy5vcHRpb25EYXRhLmZpbmQoZD0+ZC52YWx1'@;
put 'ZT09PWEpO3RoaXMucHNldWRvRm9jdXMuc2VsZWN0KGZ8fHRoaXMub3B0aW9uRGF0YVswXSksdGhpcy5zY3JvbGxJbnRvU2VsZWN0ZWRNb2RlbCgiYXV0byIpfX1hZGRPcHRpb25WYWx1ZXMoYSl7dGhpcy5vcHRpb25EYXRhPWF9aGFuZGxlRm9jdXNTdWJzY3JpcHRpb24oKXt0aGlzLnRvZ2ds'@;
put 'ZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoYT0+e2F8fCh0aGlzLnBzZXVkb0ZvY3VzLm1vZGVsPW51bGwpfSl9bW92ZUZvY3VzVG8oYSl7bGV0IGY9dGhpcy5vcHRpb25EYXRhLmZpbmRJbmRleChkPT5kLmVxdWFscyh0aGlzLnBzZXVkb0ZvY3VzLm1vZGVsKSk7YT09PUUxLlVQPy0x'@;
put 'PT09Znx8MD09PWY/Zj10aGlzLm9wdGlvbkRhdGEubGVuZ3RoLTE6Zi0tOmE9PT1FMS5ET1dOJiYoLTE9PT1mfHxmPT09dGhpcy5vcHRpb25EYXRhLmxlbmd0aC0xP2Y9MDpmKyspLHRoaXMucHNldWRvRm9jdXMuc2VsZWN0KHRoaXMub3B0aW9uRGF0YVtmXSksdGhpcy5zY3JvbGxJbnRvU2Vs'@;
put 'ZWN0ZWRNb2RlbCgpfW9wZW5BbmRNb3ZlVG8oYSl7dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4/dGhpcy5tb3ZlRm9jdXNUbyhhKToodGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2UucGlwZShFZigxKSkuc3Vic2NyaWJlKGY9PntmJiZ0aGlzLm1vdmVGb2N1c1RvKGEpfSksdGhpcy50b2dn'@;
put 'bGVTZXJ2aWNlLm9wZW49ITApfWhhbmRsZVRleHRJbnB1dChhKXtsZXQgZj0hMTtjb25zdCBkPUVkKGEua2V5KTtpZihhKXN3aXRjaChkKXtjYXNlIE1vLkVudGVyOnRoaXMudG9nZ2xlU2VydmljZS5vcGVuJiZ0aGlzLnBzZXVkb0ZvY3VzLm1vZGVsJiYodGhpcy5zZWxlY3Rpb25TZXJ2aWNl'@;
put 'Lm11bHRpc2VsZWN0YWJsZT90aGlzLnNlbGVjdGlvblNlcnZpY2UudG9nZ2xlKHRoaXMucHNldWRvRm9jdXMubW9kZWwudmFsdWUpOnRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3QodGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbC52YWx1ZSksZj0hMCk7YnJlYWs7Y2FzZSBNby5TcGFjZTp0aGlz'@;
put 'LnRvZ2dsZVNlcnZpY2Uub3Blbnx8KHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSEwLGY9ITApO2JyZWFrO2Nhc2UgTW8uQXJyb3dVcDp0aGlzLnByZXZlbnRWaWV3cG9ydFNjcm9sbGluZyhhKSx0aGlzLm9wZW5BbmRNb3ZlVG8oRTEuVVApLGY9ITA7YnJlYWs7Y2FzZSBNby5BcnJvd0Rvd246'@;
put 'dGhpcy5wcmV2ZW50Vmlld3BvcnRTY3JvbGxpbmcoYSksdGhpcy5vcGVuQW5kTW92ZVRvKEUxLkRPV04pLGY9ITA7YnJlYWs7ZGVmYXVsdDphLmtleSE9PU1vLlRhYiYmKCF0aGlzLnNlbGVjdGlvblNlcnZpY2UubXVsdGlzZWxlY3RhYmxlfHxhLmtleSE9PU1vLkJhY2tzcGFjZSkmJmEua2V5'@;
put 'IT09TW8uRXNjYXBlJiYhdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJih0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMCl9cmV0dXJuIGZ9c2Nyb2xsSW50b1NlbGVjdGVkTW9kZWwoYT0ic21vb3RoIil7dGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbCYmdGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbC5lbCYm'@;
put 'dGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbC5lbC5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6YSxibG9jazoiY2VudGVyIixpbmxpbmU6Im5lYXJlc3QifSl9cHJldmVudFZpZXdwb3J0U2Nyb2xsaW5nKGEpe2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWFk'@;
put 'ZEZvY3VzT25CbHVyTGlzdGVuZXIoYSl7SGEodGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy5yZW5kZXJlci5saXN0ZW4oYSwiYmx1ciIsZj0+e3RoaXMuZm9jdXNPdXRPZkNvbXBvbmVudChmKSYmKHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExLHRoaXMuY29tcG9uZW50Q2RSZWYmJnRoaXMuY29t'@;
put 'cG9uZW50Q2RSZWYuZGV0ZWN0Q2hhbmdlcygpKX0pfWZvY3VzT3V0T2ZDb21wb25lbnQoYSl7Y29uc3QgZj1hLnJlbGF0ZWRUYXJnZXR8fGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7cmV0dXJuISh0aGlzLnRleHRJbnB1dC5jb250YWlucyhmKXx8dGhpcy50cmlnZ2VyLmNvbnRhaW5zKGYpfHx0'@;
put 'aGlzLmxpc3Rib3guY29udGFpbnMoZikpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShzcihIcCksc3IoUWEpLHNyKGdIZSksc3IocWEpKX0sbC5cdTAyNzVwcm92PWhyKHt0b2tlbjpsLGZhY3Rvcnk6bC5cdTAyNzVmYWN9KSxsfSkoKSk7bGV0IHZI'@;
put 'ZT0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKCl7amEuYWRkSWNvbnMoXzEsdzEsWnYsTkMpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVtb2Q9RGkoe3R5cGU6bH0pLGwuXHUwMjc1aW5qPXhpKHtpbXBvcnRzOltbYm8sZGMsbGws'@;
put 'T1UsSnUsQWYsbFMsZlNdLEp1LEFmXX0pLGx9KSgpLERVPSgoKT0+e2NsYXNzIGwgZXh0ZW5kcyBvN3t9cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IGM7cmV0dXJuIGZ1bmN0aW9uKGYpe3JldHVybihjfHwoYz14bChsKSkpKGZ8fGwpfX0oKSxsLlx1MDI3NWNtcD1rcih7dHlw'@;
put 'ZTpsLHNlbGVjdG9yczpbWyJjbHItaW5wdXQtY29udGFpbmVyIl1dLGhvc3RWYXJzOjYsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZil7MiZhJiZncigiY2xyLWZvcm0tY29udHJvbCIsITApKCJjbHItZm9ybS1jb250cm9sLWRpc2FibGVkIixudWxsPT1mLmNvbnRyb2w/bnVsbDpmLmNvbnRy'@;
put 'b2wuZGlzYWJsZWQpKCJjbHItcm93IixmLmFkZEdyaWQoKSl9LGZlYXR1cmVzOltyaShbT2YsSDAsVGYsRGZdKSxyb10sbmdDb250ZW50U2VsZWN0b3JzOmtJZSxkZWNsczoxMCx2YXJzOjcsY29uc3RzOltbNCwibmdJZiJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiLDMsIm5nQ2xhc3Mi'@;
put 'XSxbMSwiY2xyLWlucHV0LXdyYXBwZXIiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNo'@;
put 'YXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl0sWyJz'@;
put 'aGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZil7MSZhJiYoVGkoTUllKSxEcigwKSx0dCgxLHlJZSwxLDAsImxhYmVsIiwwKSx5ZSgyLCJkaXYiLDEp'@;
put 'KDMsImRpdiIsMiksRHIoNCwxKSx0dCg1LGJJZSwxLDAsImNkcy1pY29uIiwzKSx0dCg2LF9JZSwxLDAsImNkcy1pY29uIiw0KSxDZSgpLHR0KDcsd0llLDEsMCwibmctY29udGVudCIsMCksdHQoOCxDSWUsMSwwLCJuZy1jb250ZW50IiwwKSx0dCg5LFNJZSwxLDAsIm5nLWNvbnRlbnQiLDAp'@;
put 'LENlKCkpLDImYSYmKFNlKDEpLFJlKCJuZ0lmIiwhZi5sYWJlbCYmZi5hZGRHcmlkKCkpLFNlKDEpLFJlKCJuZ0NsYXNzIixmLmNvbnRyb2xDbGFzcygpKSxTZSgzKSxSZSgibmdJZiIsZi5zaG93SW52YWxpZCksU2UoMSksUmUoIm5nSWYiLGYuc2hvd1ZhbGlkKSxTZSgxKSxSZSgibmdJZiIs'@;
put 'Zi5zaG93SGVscGVyKSxTZSgxKSxSZSgibmdJZiIsZi5zaG93SW52YWxpZCksU2UoMSksUmUoIm5nSWYiLGYuc2hvd1ZhbGlkKSl9LGRlcGVuZGVuY2llczpbJGksZWwseXUsSmFdLGVuY2Fwc3VsYXRpb246Mn0pLGx9KSgpLFJmPSgoKT0+e2NsYXNzIGwgZXh0ZW5kcyBhN3tjb25zdHJ1Y3Rv'@;
put 'cihhLGYsZCxoLG0pe3N1cGVyKGEsRFUsZixkLGgsbSksdGhpcy5pbmRleD0xfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChmYSkscnQoQWwpLHJ0KHFjLDEwKSxydChqbykscnQoVmkpKX0sbC5cdTAyNzVkaXI9U3Ioe3R5cGU6bCxzZWxlY3Rv'@;
put 'cnM6W1siIiwiY2xySW5wdXQiLCIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxmKXsyJmEmJmdyKCJjbHItaW5wdXQiLCEwKX0sZmVhdHVyZXM6W3JvXX0pLGx9KSgpLF9zZT0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKCl7amEuYWRkSWNvbnMoXzEsdzEpfX1yZXR1'@;
put 'cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVtb2Q9RGkoe3R5cGU6bH0pLGwuXHUwMjc1aW5qPXhpKHtpbXBvcnRzOltbYm8sZGMsbGwsSnVdLEp1XX0pLGx9KSgpLElVPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoKXt0aGlzLl9mb2N1c2Vk'@;
put 'PW5ldyBPZSghMSl9Z2V0IGZvY3VzQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2ZvY3VzZWQuYXNPYnNlcnZhYmxlKCl9c2V0IGZvY3VzZWQoYSl7dGhpcy5fZm9jdXNlZC5uZXh0KGEpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVwcm92'@;
put 'PWhyKHt0b2tlbjpsLGZhY3Rvcnk6bC5cdTAyNzVmYWN9KSxsfSkoKSx5SGU9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3Rvcigpe2phLmFkZEljb25zKF8xLHcxKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1bW9kPURpKHt0eXBlOmx9'@;
put 'KSxsLlx1MDI3NWluaj14aSh7aW1wb3J0czpbW2JvLF9zZSxsbF1dfSksbH0pKCk7Y29uc3QgX0hlPS9kKy4rbSsuK3krL2ksd0hlPS9tKy4rZCsuK3krL2ksQ0hlPS9kK3xtK3x5Ky9pLFNIZT0vXGQrL2csTUhlPS9Nb2JpL2ksa0hlPS9cdTIwMGYvZyxSVT0iWVlZWSIsbkk9e25hbWU6IkxJ'@;
put 'VFRMRV9FTkRJQU4iLGZvcm1hdDpbIkREIiwiTU0iLFJVXX0sRlU9e25hbWU6Ik1JRERMRV9FTkRJQU4iLGZvcm1hdDpbIk1NIiwiREQiLFJVXX0sRUhlPXtuYW1lOiJCSUdfRU5ESUFOIixmb3JtYXQ6W1JVLCJNTSIsIkREIl19O2Z1bmN0aW9uIENzZShsLGMpe3JldHVybiBuZXcgRGF0ZShs'@;
put 'LGMrMSwwKS5nZXREYXRlKCl9Y2xhc3MgREhle2NvbnN0cnVjdG9yKGMsYT0hMSxmPSExLGQ9ITEsaD0hMSxtPSExKXt0aGlzLmRheU1vZGVsPWMsdGhpcy5pc1RvZGF5c0RhdGU9YSx0aGlzLmlzRXhjbHVkZWQ9Zix0aGlzLmlzRGlzYWJsZWQ9ZCx0aGlzLmlzU2VsZWN0ZWQ9aCx0aGlzLmlz'@;
put 'Rm9jdXNhYmxlPW19Z2V0IHRhYkluZGV4KCl7cmV0dXJuIHRoaXMuaXNGb2N1c2FibGU/MDotMX19Y2xhc3MgQTF7Y29uc3RydWN0b3IoYyxhLGYpe3RoaXMueWVhcj1jLHRoaXMubW9udGg9YSx0aGlzLmRhdGU9Zn1pc0VxdWFsKGMpe3JldHVybiEhYyYmdGhpcy55ZWFyPT09Yy55ZWFyJiZ0'@;
put 'aGlzLm1vbnRoPT09Yy5tb250aCYmdGhpcy5kYXRlPT09Yy5kYXRlfXRvRGF0ZSgpe3JldHVybiBuZXcgRGF0ZSh0aGlzLnllYXIsdGhpcy5tb250aCx0aGlzLmRhdGUpfWluY3JlbWVudEJ5KGMpe2NvbnN0IGE9bmV3IERhdGUodGhpcy55ZWFyLHRoaXMubW9udGgsdGhpcy5kYXRlK2MpO3Jl'@;
put 'dHVybiBuZXcgQTEoYS5nZXRGdWxsWWVhcigpLGEuZ2V0TW9udGgoKSxhLmdldERhdGUoKSl9Y2xvbmUoKXtyZXR1cm4gbmV3IEExKHRoaXMueWVhcix0aGlzLm1vbnRoLHRoaXMuZGF0ZSl9dG9Db21wYXJpc29uU3RyaW5nKCl7cmV0dXJuYCR7dGhpcy55ZWFyfSR7dGhpcy5wYWQodGhpcy5t'@;
put 'b250aCl9JHt0aGlzLnBhZCh0aGlzLmRhdGUpfWB9dG9EYXRlU3RyaW5nKCl7cmV0dXJuIHRoaXMudG9EYXRlKCkudG9Mb2NhbGVEYXRlU3RyaW5nKCl9cGFkKGMpe3JldHVybiBjPDEwP2AwJHtjfWA6YCR7Y31gfX1jbGFzcyBJSGV7Y29uc3RydWN0b3IoYyxhLGYsZCxoLG0pe3RoaXMuY2Fs'@;
put 'ZW5kYXI9Yyx0aGlzLnNlbGVjdGVkRGF5PWEsdGhpcy5mb2N1c2FibGVEYXk9Zix0aGlzLnRvZGF5PWQsdGhpcy5maXJzdERheU9mV2Vlaz1oLHRoaXMuZXhjbHVkZWREYXRlcz1tLHRoaXMuY3Vyck1vbnRoRGF5Vmlld3M9W10sdGhpcy5pbml0aWFsaXplQ2FsZW5kYXJWaWV3KCl9Z2V0IGNh'@;
put 'bGVuZGFyVmlldygpe3JldHVybiB0aGlzLl9jYWxlbmRhclZpZXd9dXBkYXRlRm9jdXNhYmxlRGF5KGMpe3RoaXMuc2V0Rm9jdXNhYmxlRmxhZyh0aGlzLmZvY3VzYWJsZURheSwhMSksdGhpcy5zZXRGb2N1c2FibGVGbGFnKGMsITApLHRoaXMuZm9jdXNhYmxlRGF5PWN9aW5pdGlhbGl6ZUNh'@;
put 'bGVuZGFyVmlldygpe2NvbnN0IGM9dGhpcy5jYWxlbmRhci5wcmV2aW91c01vbnRoKCksYT10aGlzLmNhbGVuZGFyLm5leHRNb250aCgpLGY9dGhpcy5udW1EYXlzRnJvbVByZXZNb250aEluQ2FsVmlldyh0aGlzLmNhbGVuZGFyLnllYXIsdGhpcy5jYWxlbmRhci5tb250aCksZD00Mi0odGhp'@;
put 'cy5jYWxlbmRhci5kYXlzLmxlbmd0aCtmKTtsZXQgaD1bXSxtPVtdO2Y+MCYmKGg9dGhpcy5nZW5lcmF0ZURheVZpZXdNb2RlbHMoYy5kYXlzLnNsaWNlKC0xKmYpLCEwLCExKSksdGhpcy5jdXJyTW9udGhEYXlWaWV3cz10aGlzLmdlbmVyYXRlRGF5Vmlld01vZGVscyh0aGlzLmNhbGVuZGFy'@;
put 'LmRheXMsITEsITApLGQ+MCYmKG09dGhpcy5nZW5lcmF0ZURheVZpZXdNb2RlbHMoYS5kYXlzLnNsaWNlKDAsZCksITAsITEpKSx0aGlzLl9jYWxlbmRhclZpZXc9dGhpcy5nZW5lcmF0ZUNhbGVuZGFyVmlldyhoLHRoaXMuY3Vyck1vbnRoRGF5Vmlld3MsbSksdGhpcy5pbml0aWFsaXplU2Vs'@;
put 'ZWN0ZWREYXkoKSx0aGlzLmluaXRpYWxpemVGb2N1c2FibGVEYXkoKX1pc0RhdGVFeGNsdWRlZChjKXtjb25zdHttaW5EYXRlOmEsbWF4RGF0ZTpmfT10aGlzLmV4Y2x1ZGVkRGF0ZXMsZD1hLnRvQ29tcGFyaXNvblN0cmluZygpLGg9Zi50b0NvbXBhcmlzb25TdHJpbmcoKSxtPWMudG9Db21w'@;
put 'YXJpc29uU3RyaW5nKCk7cmV0dXJuIShtPj1kJiZtPD1oKX1nZW5lcmF0ZURheVZpZXdNb2RlbHMoYyxhLGYpe2NvbnN0IGQ9Yy5tYXAoaD0+bmV3IERIZShoLCExLGEsdGhpcy5pc0RhdGVFeGNsdWRlZChoKSwhMSwhMSkpO3JldHVybiBmJiZ0aGlzLmNhbGVuZGFyLmlzRGF5SW5DYWxlbmRh'@;
put 'cih0aGlzLnRvZGF5KSYmKGRbdGhpcy50b2RheS5kYXRlLTFdLmlzVG9kYXlzRGF0ZT0hMCksZH1udW1EYXlzRnJvbVByZXZNb250aEluQ2FsVmlldyhjLGEpe2NvbnN0IGY9ZnVuY3Rpb24gQUhlKGwsYyxhKXtyZXR1cm4gbmV3IERhdGUobCxjLGEpLmdldERheSgpfShjLGEsMSk7cmV0dXJu'@;
put 'IGY+PXRoaXMuZmlyc3REYXlPZldlZWs/Zi10aGlzLmZpcnN0RGF5T2ZXZWVrOjcrZi10aGlzLmZpcnN0RGF5T2ZXZWVrfWlzRGF5SW5DYWxlbmRhclZpZXcoYyl7cmV0dXJuISF0aGlzLmNhbGVuZGFyLmlzRGF5SW5DYWxlbmRhcihjKX1nZW5lcmF0ZUNhbGVuZGFyVmlldyhjLGEsZil7Y29u'@;
put 'c3QgZD1bLi4uYywuLi5hLC4uLmZdLGg9W107Zm9yKGxldCBtPTA7bTw2O20rKyloW21dPWQuc2xpY2UoNyptLDcqKG0rMSkpO3JldHVybiBofWluaXRpYWxpemVTZWxlY3RlZERheSgpe3RoaXMuc2VsZWN0ZWREYXkmJnRoaXMuaXNEYXlJbkNhbGVuZGFyVmlldyh0aGlzLnNlbGVjdGVkRGF5'@;
put 'KSYmKHRoaXMuY3Vyck1vbnRoRGF5Vmlld3NbdGhpcy5zZWxlY3RlZERheS5kYXRlLTFdLmlzU2VsZWN0ZWQ9ITApfWluaXRpYWxpemVGb2N1c2FibGVEYXkoKXt0aGlzLmZvY3VzYWJsZURheSYmdGhpcy5pc0RheUluQ2FsZW5kYXJWaWV3KHRoaXMuZm9jdXNhYmxlRGF5KT90aGlzLnNldEZv'@;
put 'Y3VzYWJsZUZsYWcodGhpcy5mb2N1c2FibGVEYXksITApOnRoaXMuc2VsZWN0ZWREYXkmJnRoaXMuaXNEYXlJbkNhbGVuZGFyVmlldyh0aGlzLnNlbGVjdGVkRGF5KT8odGhpcy5zZXRGb2N1c2FibGVGbGFnKHRoaXMuc2VsZWN0ZWREYXksITApLHRoaXMuZm9jdXNhYmxlRGF5PXRoaXMuc2Vs'@;
put 'ZWN0ZWREYXkuY2xvbmUoKSk6dGhpcy5pc0RheUluQ2FsZW5kYXJWaWV3KHRoaXMudG9kYXkpPyh0aGlzLnNldEZvY3VzYWJsZUZsYWcodGhpcy50b2RheSwhMCksdGhpcy5mb2N1c2FibGVEYXk9dGhpcy50b2RheS5jbG9uZSgpKToodGhpcy5mb2N1c2FibGVEYXk9bmV3IEExKHRoaXMuY2Fs'@;
put 'ZW5kYXIueWVhcix0aGlzLmNhbGVuZGFyLm1vbnRoLDE1KSx0aGlzLnNldEZvY3VzYWJsZUZsYWcodGhpcy5mb2N1c2FibGVEYXksITApKX1zZXRGb2N1c2FibGVGbGFnKGMsYSl7YyYmKHRoaXMuY3Vyck1vbnRoRGF5Vmlld3NbYy5kYXRlLTFdLmlzRm9jdXNhYmxlPWEpfX1sZXQgZFM9KCgp'@;
put 'PT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhKXt0aGlzLmxvY2FsZT1hLHRoaXMuX2ZpcnN0RGF5T2ZXZWVrPTAsdGhpcy5pbml0aWFsaXplTG9jYWxlRGF0YSgpfWdldCBmaXJzdERheU9mV2Vlaygpe3JldHVybiB0aGlzLl9maXJzdERheU9mV2Vla31nZXQgbG9jYWxlRGF5cygpe3JldHVybiB0'@;
put 'aGlzLl9sb2NhbGVEYXlzfWdldCBsb2NhbGVEYXlzTmFycm93KCl7cmV0dXJuIHRoaXMuX2xvY2FsZURheXMubWFwKGE9PmEubmFycm93KX1nZXQgbG9jYWxlTW9udGhzQWJicmV2aWF0ZWQoKXtyZXR1cm4gdGhpcy5fbG9jYWxlTW9udGhzQWJicmV2aWF0ZWR9Z2V0IGxvY2FsZU1vbnRoc1dp'@;
put 'ZGUoKXtyZXR1cm4gdGhpcy5fbG9jYWxlTW9udGhzV2lkZX1nZXQgbG9jYWxlRGF0ZUZvcm1hdCgpe3JldHVybiB0aGlzLl9sb2NhbGVEYXRlRm9ybWF0fWluaXRpYWxpemVMb2NhbGVEYXRhKCl7dGhpcy5pbml0aWFsaXplRmlyc3REYXlPZldlZWsoKSx0aGlzLmluaXRpYWxpemVMb2NhbGVE'@;
put 'YXRlRm9ybWF0KCksdGhpcy5pbml0aWFsaXplTG9jYWxlTW9udGhzQWJicmV2aWF0ZWQoKSx0aGlzLmluaXRpYWxpemVMb2NhbGVNb250aHNXaWRlKCksdGhpcy5pbml0aWFsaXplTG9jYWxlRGF5cygpfWluaXRpYWxpemVMb2NhbGVEYXlzKCl7Y29uc3QgYT1bXSxmPVFCKHRoaXMubG9jYWxl'@;
put 'LEx1LlN0YW5kYWxvbmUsaWwuV2lkZSkuc2xpY2UoKSxkPVFCKHRoaXMubG9jYWxlLEx1LlN0YW5kYWxvbmUsaWwuTmFycm93KS5zbGljZSgpLGg9dGhpcy5maXJzdERheU9mV2Vlaztmb3IobGV0IG09MDttPDc7bSsrKWEucHVzaCh7ZGF5OmZbbV0sbmFycm93OmRbbV19KTtpZihoPjApe2Nv'@;
put 'bnN0IG09YS5zcGxpY2UoMCxoKTthLnB1c2goLi4ubSl9dGhpcy5fbG9jYWxlRGF5cz1hfWluaXRpYWxpemVMb2NhbGVNb250aHNBYmJyZXZpYXRlZCgpe3RoaXMuX2xvY2FsZU1vbnRoc0FiYnJldmlhdGVkPWVqKHRoaXMubG9jYWxlLEx1LlN0YW5kYWxvbmUsaWwuQWJicmV2aWF0ZWQpLnNs'@;
put 'aWNlKCl9aW5pdGlhbGl6ZUxvY2FsZU1vbnRoc1dpZGUoKXt0aGlzLl9sb2NhbGVNb250aHNXaWRlPWVqKHRoaXMubG9jYWxlLEx1LlN0YW5kYWxvbmUsaWwuV2lkZSkuc2xpY2UoKX1pbml0aWFsaXplRmlyc3REYXlPZldlZWsoKXt0aGlzLl9maXJzdERheU9mV2Vlaz1mdW5jdGlvbiB5OWUo'@;
put 'bCl7cmV0dXJuIEtzKGwpW2VhLkZpcnN0RGF5T2ZXZWVrXX0odGhpcy5sb2NhbGUpfWluaXRpYWxpemVMb2NhbGVEYXRlRm9ybWF0KCl7dGhpcy5fbG9jYWxlRGF0ZUZvcm1hdD1mdW5jdGlvbiBsQyhsLGMpe3JldHVybiBNZihLcyhsKVtlYS5EYXRlRm9ybWF0XSxjKX0odGhpcy5sb2NhbGUs'@;
put 'RDAuU2hvcnQpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShzcihwZCkpfSxsLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmwsZmFjdG9yeTpsLlx1MDI3NWZhY30pLGx9KSgpO2NsYXNzIEFke2NvbnN0cnVjdG9yKGMsYSl7dGhpcy55ZWFyPWMsdGhpcy5t'@;
put 'b250aD1hLHRoaXMuaW5pdGlhbGl6ZURheXNJbkNhbGVuZGFyKCl9aXNFcXVhbChjKXtyZXR1cm4hIWMmJnRoaXMueWVhcj09PWMueWVhciYmdGhpcy5tb250aD09PWMubW9udGh9aXNEYXlJbkNhbGVuZGFyKGMpe3JldHVybiEhYyYmdGhpcy55ZWFyPT09Yy55ZWFyJiZ0aGlzLm1vbnRoPT09'@;
put 'Yy5tb250aH1wcmV2aW91c01vbnRoKCl7cmV0dXJuIDA9PT10aGlzLm1vbnRoP25ldyBBZCh0aGlzLnllYXItMSwxMSk6bmV3IEFkKHRoaXMueWVhcix0aGlzLm1vbnRoLTEpfW5leHRNb250aCgpe3JldHVybiAxMT09PXRoaXMubW9udGg/bmV3IEFkKHRoaXMueWVhcisxLDApOm5ldyBBZCh0'@;
put 'aGlzLnllYXIsdGhpcy5tb250aCsxKX1pbml0aWFsaXplRGF5c0luQ2FsZW5kYXIoKXtjb25zdCBjPUNzZSh0aGlzLnllYXIsdGhpcy5tb250aCk7dGhpcy5kYXlzPUFycmF5KGMpLmZpbGwobnVsbCkubWFwKChhLGYpPT5uZXcgQTEodGhpcy55ZWFyLHRoaXMubW9udGgsZisxKSl9fWxldCBy'@;
put 'Mz0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKCl7dGhpcy5fdG9kYXlzRnVsbERhdGU9bmV3IERhdGUsdGhpcy5fc2VsZWN0ZWREYXlDaGFuZ2U9bmV3IHdlLHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyQ2hhbmdlPW5ldyB3ZSx0aGlzLl9mb2N1c09uQ2FsZW5kYXJDaGFuZ2U9bmV3IHdlLHRo'@;
put 'aXMuX2ZvY3VzZWREYXlDaGFuZ2U9bmV3IHdlfWdldCB0b2RheSgpe3JldHVybiB0aGlzLl90b2RheX1nZXQgZGlzcGxheWVkQ2FsZW5kYXIoKXtyZXR1cm4gdGhpcy5fZGlzcGxheWVkQ2FsZW5kYXJ9Z2V0IHNlbGVjdGVkRGF5Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGVkRGF5Q2hh'@;
put 'bmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBkaXNwbGF5ZWRDYWxlbmRhckNoYW5nZSgpe3JldHVybiB0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhckNoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgZm9jdXNPbkNhbGVuZGFyQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2ZvY3VzT25DYWxlbmRhckNoYW5nZS5h'@;
put 'c09ic2VydmFibGUoKX1nZXQgZm9jdXNlZERheUNoYW5nZSgpe3JldHVybiB0aGlzLl9mb2N1c2VkRGF5Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpfW5vdGlmeVNlbGVjdGVkRGF5Q2hhbmdlZChhKXt0aGlzLnNlbGVjdGVkRGF5PWEsdGhpcy5fc2VsZWN0ZWREYXlDaGFuZ2UubmV4dChhKX1pbml0'@;
put 'aWFsaXplQ2FsZW5kYXIoKXt0aGlzLmZvY3VzZWREYXk9bnVsbCx0aGlzLmluaXRpYWxpemVUb2RheXNEYXRlKCksdGhpcy5fZGlzcGxheWVkQ2FsZW5kYXI9dGhpcy5zZWxlY3RlZERheT9uZXcgQWQodGhpcy5zZWxlY3RlZERheS55ZWFyLHRoaXMuc2VsZWN0ZWREYXkubW9udGgpOm5ldyBB'@;
put 'ZCh0aGlzLnRvZGF5LnllYXIsdGhpcy50b2RheS5tb250aCl9Y2hhbmdlTW9udGgoYSl7dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcihuZXcgQWQodGhpcy5fZGlzcGxheWVkQ2FsZW5kYXIueWVhcixhKSl9Y2hhbmdlWWVhcihhKXt0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKG5ldyBBZChh'@;
put 'LHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyLm1vbnRoKSl9bW92ZVRvTmV4dE1vbnRoKCl7dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcih0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci5uZXh0TW9udGgoKSl9bW92ZVRvUHJldmlvdXNNb250aCgpe3RoaXMuc2V0RGlzcGxheWVkQ2FsZW5kYXIodGhp'@;
put 'cy5fZGlzcGxheWVkQ2FsZW5kYXIucHJldmlvdXNNb250aCgpKX1tb3ZlVG9DdXJyZW50TW9udGgoKXt0aGlzLmRpc3BsYXllZENhbGVuZGFyLmlzRGF5SW5DYWxlbmRhcih0aGlzLnRvZGF5KXx8dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcihuZXcgQWQodGhpcy50b2RheS55ZWFyLHRoaXMu'@;
put 'dG9kYXkubW9udGgpKSx0aGlzLl9mb2N1c09uQ2FsZW5kYXJDaGFuZ2UubmV4dCgpfWluY3JlbWVudEZvY3VzRGF5KGEpe3RoaXMuZm9jdXNlZERheT10aGlzLmZvY3VzZWREYXkuaW5jcmVtZW50QnkoYSksdGhpcy5fZGlzcGxheWVkQ2FsZW5kYXIuaXNEYXlJbkNhbGVuZGFyKHRoaXMuZm9j'@;
put 'dXNlZERheSk/dGhpcy5fZm9jdXNlZERheUNoYW5nZS5uZXh0KHRoaXMuZm9jdXNlZERheSk6dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcihuZXcgQWQodGhpcy5mb2N1c2VkRGF5LnllYXIsdGhpcy5mb2N1c2VkRGF5Lm1vbnRoKSksdGhpcy5fZm9jdXNPbkNhbGVuZGFyQ2hhbmdlLm5leHQo'@;
put 'KX1zZXREaXNwbGF5ZWRDYWxlbmRhcihhKXt0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci5pc0VxdWFsKGEpfHwodGhpcy5fZGlzcGxheWVkQ2FsZW5kYXI9YSx0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhckNoYW5nZS5uZXh0KCkpfWluaXRpYWxpemVUb2RheXNEYXRlKCl7dGhpcy5fdG9kYXlzRnVs'@;
put 'bERhdGU9bmV3IERhdGUsdGhpcy5fdG9kYXk9bmV3IEExKHRoaXMuX3RvZGF5c0Z1bGxEYXRlLmdldEZ1bGxZZWFyKCksdGhpcy5fdG9kYXlzRnVsbERhdGUuZ2V0TW9udGgoKSx0aGlzLl90b2RheXNGdWxsRGF0ZS5nZXREYXRlKCkpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7'@;
put 'cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVwcm92PWhyKHt0b2tlbjpsLGZhY3Rvcnk6bC5cdTAyNzVmYWN9KSxsfSkoKSxmNz0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEsZil7dGhpcy5fbmdab25lPWEsdGhpcy5wbGF0Zm9ybUlkPWZ9Zm9jdXNDZWxsKGEpe3RoaXMuX25nWm9uZS5y'@;
put 'dW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMubmdab25lSXNTdGFibGVJbkJyb3dzZXIoKS5zdWJzY3JpYmUoKCk9Pntjb25zdCBmPWEubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdbdGFiaW5kZXg9IjAiXScpO2YmJmYuZm9jdXMoKX0pfSl9Zm9jdXNJbnB1dChhKXt0aGlzLl9uZ1pv'@;
put 'bmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PnRoaXMubmdab25lSXNTdGFibGVJbkJyb3dzZXIoKS5zdWJzY3JpYmUoKCk9PmEuZm9jdXMoKSkpfWVsZW1lbnRJc0ZvY3VzZWQoYSl7cmV0dXJuIEhhKHRoaXMucGxhdGZvcm1JZCkmJmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1hfW5nWm9uZUlz'@;
put 'U3RhYmxlSW5Ccm93c2VyKCl7cmV0dXJuIHRoaXMuX25nWm9uZS5vblN0YWJsZS5hc09ic2VydmFibGUoKS5waXBlKG40KCksSWwoKCk9PkhhKHRoaXMucGxhdGZvcm1JZCkpKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkoc3IoVW8pLHNyKHFhKSl9'@;
put 'LGwuXHUwMjc1cHJvdj1ocih7dG9rZW46bCxmYWN0b3J5OmwuXHUwMjc1ZmFjfSksbH0pKCksZDc9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhKXt0aGlzLl9sb2NhbGVIZWxwZXJTZXJ2aWNlPWEsdGhpcy5kaXNhYmxlZERhdGVzPXttaW5EYXRlOm5ldyBBMSgwLDAsMSksbWF4RGF0ZTpu'@;
put 'ZXcgQTEoOTk5OSwxMSwzMSl9LHRoaXMuY2xkckxvY2FsZURhdGVGb3JtYXQ9ImRkL01NL3kiLHRoaXMubG9jYWxlRGlzcGxheUZvcm1hdD1uSSx0aGlzLmRlbGltaXRlcnM9WyIvIiwiLyJdLHRoaXMuY2xkckxvY2FsZURhdGVGb3JtYXQ9dGhpcy5fbG9jYWxlSGVscGVyU2VydmljZS5sb2Nh'@;
put 'bGVEYXRlRm9ybWF0LHRoaXMuaW5pdGlhbGl6ZUxvY2FsZURpc3BsYXlGb3JtYXQoKX1nZXQgcGxhY2Vob2xkZXJUZXh0KCl7Y29uc3QgYT10aGlzLmxvY2FsZURpc3BsYXlGb3JtYXQuZm9ybWF0O3JldHVybiBhWzBdK3RoaXMuZGVsaW1pdGVyc1swXSthWzFdK3RoaXMuZGVsaW1pdGVyc1sx'@;
put 'XSthWzJdfXNldE1pbkRhdGUoYSl7aWYoYSl7Y29uc3RbZixkLGhdPWEuc3BsaXQoIi0iKS5tYXAobT0+cGFyc2VJbnQobSwxMCkpO3RoaXMuZGlzYWJsZWREYXRlcy5taW5EYXRlPW5ldyBBMShmLGQtMSxoKX1lbHNlIHRoaXMuZGlzYWJsZWREYXRlcy5taW5EYXRlPW5ldyBBMSgwLDAsMSl9'@;
put 'c2V0TWF4RGF0ZShhKXtpZihhKXtjb25zdFtmLGQsaF09YS5zcGxpdCgiLSIpLm1hcChtPT5wYXJzZUludChtLDEwKSk7dGhpcy5kaXNhYmxlZERhdGVzLm1heERhdGU9bmV3IEExKGYsZC0xLGgpfWVsc2UgdGhpcy5kaXNhYmxlZERhdGVzLm1heERhdGU9bmV3IEExKDk5OTksMTEsMzEpfXRv'@;
put 'TG9jYWxlRGlzcGxheUZvcm1hdFN0cmluZyhhKXtpZihhKXtpZihpc05hTihhLmdldFRpbWUoKSkpcmV0dXJuIiI7Y29uc3QgZj1hLmdldERhdGUoKSxkPWEuZ2V0TW9udGgoKSsxLGg9Zj45P2YudG9TdHJpbmcoKToiMCIrZixtPWQ+OT9kLnRvU3RyaW5nKCk6IjAiK2Q7cmV0dXJuIHRoaXMu'@;
put 'bG9jYWxlRGlzcGxheUZvcm1hdD09PW5JP2grdGhpcy5kZWxpbWl0ZXJzWzBdK20rdGhpcy5kZWxpbWl0ZXJzWzFdK2EuZ2V0RnVsbFllYXIoKTp0aGlzLmxvY2FsZURpc3BsYXlGb3JtYXQ9PT1GVT9tK3RoaXMuZGVsaW1pdGVyc1swXStoK3RoaXMuZGVsaW1pdGVyc1sxXSthLmdldEZ1bGxZ'@;
put 'ZWFyKCk6YS5nZXRGdWxsWWVhcigpK3RoaXMuZGVsaW1pdGVyc1swXSttK3RoaXMuZGVsaW1pdGVyc1sxXStofXJldHVybiIifWdldERhdGVWYWx1ZUZyb21EYXRlU3RyaW5nKGEpe2lmKCFhKXJldHVybiBudWxsO2NvbnN0IGY9YS5tYXRjaChTSGUpO2lmKCFmfHwzIT09Zi5sZW5ndGgpcmV0'@;
put 'dXJuIG51bGw7Y29uc3RbZCxoLG1dPWY7cmV0dXJuIHRoaXMubG9jYWxlRGlzcGxheUZvcm1hdD09PW5JP3RoaXMudmFsaWRhdGVBbmRHZXREYXRlKG0saCxkKTp0aGlzLmxvY2FsZURpc3BsYXlGb3JtYXQ9PT1GVT90aGlzLnZhbGlkYXRlQW5kR2V0RGF0ZShtLGQsaCk6dGhpcy52YWxpZGF0'@;
put 'ZUFuZEdldERhdGUoZCxoLG0pfWluaXRpYWxpemVMb2NhbGVEaXNwbGF5Rm9ybWF0KCl7Y29uc3QgYT10aGlzLmNsZHJMb2NhbGVEYXRlRm9ybWF0LnRvTG9jYWxlTG93ZXJDYXNlKCk7dGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0PV9IZS50ZXN0KGEpP25JOndIZS50ZXN0KGEpP0ZVOkVIZSx0'@;
put 'aGlzLmV4dHJhY3REZWxpbWl0ZXJzKCl9ZXh0cmFjdERlbGltaXRlcnMoKXtpZih0aGlzLmNsZHJMb2NhbGVEYXRlRm9ybWF0KXtjb25zdCBmPXRoaXMuY2xkckxvY2FsZURhdGVGb3JtYXQucmVwbGFjZShrSGUsIiIpLnNwbGl0KENIZSk7ZiYmND09PWYubGVuZ3RoP3RoaXMuZGVsaW1pdGVy'@;
put 'cz1bZlsxXSxmWzJdXTpjb25zb2xlLmVycm9yKCJVbmV4cGVjdGVkIGRhdGUgZm9ybWF0IHJlY2VpdmVkLiBEZWxpbWl0ZXJzIGV4dHJhY3RlZDogIixmKX19aXNWYWxpZE1vbnRoKGEpe3JldHVybiBhPi0xJiZhPDEyfWlzVmFsaWREYXRlKGEsZixkKXtyZXR1cm4gZD4wJiZkPD1Dc2UoYSxm'@;
put 'KX12YWxpZGF0ZUFuZEdldERhdGUoYSxmLGQpe2NvbnN0IGg9K2EsbT0rZi0xLF89K2Q7aWYoIXRoaXMuaXNWYWxpZE1vbnRoKG0pfHwhdGhpcy5pc1ZhbGlkRGF0ZShoLG0sXykpcmV0dXJuIG51bGw7Y29uc3QgTz1mdW5jdGlvbiBUSGUobCl7aWYobD45OTk5fHxsPjEwMCYmbDw5OTl8fGw8'@;
put 'MTApcmV0dXJuLTE7aWYobD45OTkpcmV0dXJuIGw7Y29uc3QgYz0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCk7bGV0IGY9bCsxMDAqTWF0aC5mbG9vcihjLzEwMCk7cmV0dXJuIGY+YysyMCYmKGYtPTEwMCksZn0oaCk7cmV0dXJuLTEhPT1PP25ldyBEYXRlKE8sbSxfKTpudWxsfX1yZXR1cm4g'@;
put 'bC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShzcihkUykpfSxsLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmwsZmFjdG9yeTpsLlx1MDI3NWZhY30pLGx9KSgpLGhTPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoKXt0aGlzLl90b3VjaGVkQ2hhbmdlPW5ldyB3ZSx0aGlz'@;
put 'Ll9kaXJ0eUNoYW5nZT1uZXcgd2V9Z2V0IHRvdWNoZWRDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fdG91Y2hlZENoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgZGlydHlDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fZGlydHlDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9bWFya0FzVG91Y2hlZCgpe3RoaXMuX3Rv'@;
put 'dWNoZWRDaGFuZ2UubmV4dCgpfW1hcmtBc0RpcnR5KCl7dGhpcy5fZGlydHlDaGFuZ2UubmV4dCgpfXNldERpc2FibGVkKGEpe3RoaXMuZGlzYWJsZWQ9YX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1cHJvdj1ocih7dG9rZW46bCxm'@;
put 'YWN0b3J5OmwuXHUwMjc1ZmFjfSksbH0pKCksU3NlPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmLGQsaCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPWEsdGhpcy5fdG9nZ2xlU2VydmljZT1mLHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZT1kLHRoaXMuY29tbW9uU3RyaW5n'@;
put 'cz1ofWdldCBkYXlWaWV3KCl7cmV0dXJuIHRoaXMuX2RheVZpZXd9c2V0IGRheVZpZXcoYSl7dGhpcy5fZGF5Vmlldz1hfWdldCBkYXlTdHJpbmcoKXtyZXR1cm4gdGhpcy5kYXlWaWV3LmlzU2VsZWN0ZWQ/dGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlz'@;
put 'LmRhdGVwaWNrZXJTZWxlY3RlZExhYmVsLHtGVUxMX0RBVEU6dGhpcy5fZGF5Vmlldy5kYXlNb2RlbC50b0RhdGVTdHJpbmcoKX0pOnRoaXMuX2RheVZpZXcuZGF5TW9kZWwudG9EYXRlU3RyaW5nKCl9b25EYXlWaWV3Rm9jdXMoKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZm9jdXNl'@;
put 'ZERheT10aGlzLmRheVZpZXcuZGF5TW9kZWx9c2VsZWN0RGF5KCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm5vdGlmeVNlbGVjdGVkRGF5Q2hhbmdlZCh0aGlzLmRheVZpZXcuZGF5TW9kZWwpLHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5tYXJrQXNEaXJ0eSgpLHRoaXMuX3Rv'@;
put 'Z2dsZVNlcnZpY2Uub3Blbj0hMX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkocnQocjMpLHJ0KFFhKSxydChoUykscnQoVGEpKX0sbC5cdTAyNzVjbXA9a3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siY2xyLWRheSJdXSxob3N0VmFyczoyLGhvc3RCaW5k'@;
put 'aW5nczpmdW5jdGlvbihhLGYpezImYSYmZ3IoImRheSIsITApfSxpbnB1dHM6e2RheVZpZXc6WyJjbHJEYXlWaWV3IiwiZGF5VmlldyJdfSxkZWNsczoyLHZhcnM6MTMsY29uc3RzOltbInR5cGUiLCJidXR0b24iLDEsImRheS1idG4iLDMsImNsaWNrIiwiZm9jdXMiXV0sdGVtcGxhdGU6ZnVu'@;
put 'Y3Rpb24oYSxmKXsxJmEmJih5ZSgwLCJidXR0b24iLDApLEV0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZi5zZWxlY3REYXkoKX0pKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gZi5vbkRheVZpZXdGb2N1cygpfSksWWUoMSksQ2UoKSksMiZhJiYoZ3IoImlzLXRvZGF5IixmLmRheVZp'@;
put 'ZXcuaXNUb2RheXNEYXRlKSgiaXMtZXhjbHVkZWQiLGYuZGF5Vmlldy5pc0V4Y2x1ZGVkKSgiaXMtZGlzYWJsZWQiLGYuZGF5Vmlldy5pc0Rpc2FibGVkKSgiaXMtc2VsZWN0ZWQiLGYuZGF5Vmlldy5pc1NlbGVjdGVkKSxScigidGFiaW5kZXgiLGYuZGF5Vmlldy50YWJJbmRleCkoImFyaWEt'@;
put 'Y3VycmVudCIsZi5kYXlWaWV3LmlzVG9kYXlzRGF0ZT8iZGF0ZSI6ImZhbHNlIikoImFyaWEtbGFiZWwiLGYuZGF5U3RyaW5nKSgiYXJpYS1zZWxlY3RlZCIsZi5kYXlWaWV3LmlzU2VsZWN0ZWQpLFNlKDEpLHdyKCIgIixmLmRheVZpZXcuZGF5TW9kZWwuZGF0ZSwiICIpKX0sZW5jYXBzdWxh'@;
put 'dGlvbjoyfSksbH0pKCksTXNlPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmLGQsaCxtKXt0aGlzLl9sb2NhbGVIZWxwZXJTZXJ2aWNlPWEsdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPWYsdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZT1kLHRoaXMuX2RhdGVJT1NlcnZpY2U9'@;
put 'aCx0aGlzLl9lbFJlZj1tLHRoaXMuX3N1YnM9W10sdGhpcy5nZW5lcmF0ZUNhbGVuZGFyVmlldygpLHRoaXMuaW5pdGlhbGl6ZVN1YnNjcmlwdGlvbnMoKX1nZXQgbG9jYWxlRGF5cygpe3JldHVybiB0aGlzLl9sb2NhbGVIZWxwZXJTZXJ2aWNlLmxvY2FsZURheXN9Z2V0IGNhbGVuZGFyKCl7'@;
put 'cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5kaXNwbGF5ZWRDYWxlbmRhcn1nZXQgc2VsZWN0ZWREYXkoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5fWdldCBmb2N1c2VkRGF5KCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2Vy'@;
put 'dmljZS5mb2N1c2VkRGF5fWdldCB0b2RheSgpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UudG9kYXl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpfW5nT25EZXN0cm95KCl7dGhpcy5fc3Vicy5m'@;
put 'b3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9b25LZXlEb3duKGEpe2lmKGEmJnRoaXMuZm9jdXNlZERheSlzd2l0Y2goRWQoYS5rZXkpKXtjYXNlIE1vLkFycm93VXA6YS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pbmNyZW1lbnRGb2N1c0RheSgtNyk7'@;
put 'YnJlYWs7Y2FzZSBNby5BcnJvd0Rvd246YS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pbmNyZW1lbnRGb2N1c0RheSg3KTticmVhaztjYXNlIE1vLkFycm93TGVmdDphLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlu'@;
put 'Y3JlbWVudEZvY3VzRGF5KC0xKTticmVhaztjYXNlIE1vLkFycm93UmlnaHQ6YS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pbmNyZW1lbnRGb2N1c0RheSgxKX19aW5pdGlhbGl6ZVN1YnNjcmlwdGlvbnMoKXt0aGlzLl9zdWJzLnB1c2godGhpcy5fZGF0'@;
put 'ZU5hdmlnYXRpb25TZXJ2aWNlLmRpc3BsYXllZENhbGVuZGFyQ2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMuZ2VuZXJhdGVDYWxlbmRhclZpZXcoKX0pKSx0aGlzLl9zdWJzLnB1c2godGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmZvY3VzZWREYXlDaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0'@;
put 'aGlzLmNhbGVuZGFyVmlld01vZGVsLnVwZGF0ZUZvY3VzYWJsZURheShhKX0pKSx0aGlzLl9zdWJzLnB1c2godGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmZvY3VzT25DYWxlbmRhckNoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2Vs'@;
put 'bCh0aGlzLl9lbFJlZil9KSl9Z2VuZXJhdGVDYWxlbmRhclZpZXcoKXt0aGlzLmNhbGVuZGFyVmlld01vZGVsPW5ldyBJSGUodGhpcy5jYWxlbmRhcix0aGlzLnNlbGVjdGVkRGF5LHRoaXMuZm9jdXNlZERheSx0aGlzLnRvZGF5LHRoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2UuZmlyc3REYXlP'@;
put 'ZldlZWssdGhpcy5fZGF0ZUlPU2VydmljZS5kaXNhYmxlZERhdGVzKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkocnQoZFMpLHJ0KHIzKSxydChmNykscnQoZDcpLHJ0KFZpKSl9LGwuXHUwMjc1Y21wPWtyKHt0eXBlOmwsc2VsZWN0b3JzOltbImNs'@;
put 'ci1jYWxlbmRhciJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxmKXsxJmEmJkV0KCJrZXlkb3duIixmdW5jdGlvbihoKXtyZXR1cm4gZi5vbktleURvd24oaCl9KX0sZGVjbHM6NCx2YXJzOjIsY29uc3RzOltbMSwiY2FsZW5kYXItdGFibGUiXSxbMSwiY2FsZW5kYXItcm93Iiwid2Vla2Rh'@;
put 'eXMiXSxbImNsYXNzIiwiY2FsZW5kYXItY2VsbCB3ZWVrZGF5Iiwicm9sZSIsImhlYWRpbmciLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJjYWxlbmRhci1yb3ciLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsicm9sZSIsImhlYWRpbmciLDEsImNhbGVuZGFyLWNlbGwiLCJ3ZWVrZGF5'@;
put 'Il0sWzEsImNhbGVuZGFyLXJvdyJdLFsiY2xhc3MiLCJjYWxlbmRhci1jZWxsIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY2FsZW5kYXItY2VsbCJdLFszLCJjbHJEYXlWaWV3Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZil7MSZhJiYoeWUoMCwidGFibGUiLDApKDEsInRyIiwxKSx0dCgy'@;
put 'LEVJZSwyLDIsInRoIiwyKSxDZSgpLHR0KDMsQUllLDIsMSwidHIiLDMpLENlKCkpLDImYSYmKFNlKDIpLFJlKCJuZ0Zvck9mIixmLmxvY2FsZURheXMpLFNlKDEpLFJlKCJuZ0Zvck9mIixmLmNhbGVuZGFyVmlld01vZGVsLmNhbGVuZGFyVmlldykpfSxkZXBlbmRlbmNpZXM6W1NzZSxSYV0s'@;
put 'ZW5jYXBzdWxhdGlvbjoyfSksbH0pKCksckk9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhKXt0aGlzLl9kb2N1bWVudD1hLHRoaXMuX2lzVXNlckFnZW50TW9iaWxlPSExLHRoaXMuX2RvY3VtZW50JiYodGhpcy5faXNVc2VyQWdlbnRNb2JpbGU9TUhlLnRlc3QoYS5kZWZhdWx0Vmlldy5u'@;
put 'YXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLl9pbm5lcldpZHRoPWEuZGVmYXVsdFZpZXcuaW5uZXJXaWR0aCl9Z2V0IGlzRW5hYmxlZCgpe3JldHVybiEodGhpcy5fZG9jdW1lbnQmJnRoaXMuX2lubmVyV2lkdGg8NzY4JiZ0aGlzLl9pc1VzZXJBZ2VudE1vYmlsZSl9fXJldHVybiBsLlx1MDI3'@;
put 'NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHNyKEZhKSl9LGwuXHUwMjc1cHJvdj1ocih7dG9rZW46bCxmYWN0b3J5OmwuXHUwMjc1ZmFjfSksbH0pKCksaDc9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3Rvcigpe3RoaXMucG9zaXRpb249UDBbImJvdHRvbS1sZWZ0Il0sdGhpcy5f'@;
put 'Y3VycmVudFZpZXc9IkRBWVZJRVcifWdldCBpc0RheVZpZXcoKXtyZXR1cm4iREFZVklFVyI9PT10aGlzLl9jdXJyZW50Vmlld31nZXQgaXNZZWFyVmlldygpe3JldHVybiJZRUFSVklFVyI9PT10aGlzLl9jdXJyZW50Vmlld31nZXQgaXNNb250aFZpZXcoKXtyZXR1cm4iTU9OVEhWSUVXIj09'@;
put 'PXRoaXMuX2N1cnJlbnRWaWV3fWNoYW5nZVRvTW9udGhWaWV3KCl7dGhpcy5fY3VycmVudFZpZXc9Ik1PTlRIVklFVyJ9Y2hhbmdlVG9ZZWFyVmlldygpe3RoaXMuX2N1cnJlbnRWaWV3PSJZRUFSVklFVyJ9Y2hhbmdlVG9EYXlWaWV3KCl7dGhpcy5fY3VycmVudFZpZXc9IkRBWVZJRVcifX1y'@;
put 'ZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVwcm92PWhyKHt0b2tlbjpsLGZhY3Rvcnk6bC5cdTAyNzVmYWN9KSxsfSkoKSxrc2U9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhLGYsZCxoLG0pe3RoaXMuX3ZpZXdNYW5hZ2VyU2Vydmlj'@;
put 'ZT1hLHRoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2U9Zix0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2U9ZCx0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlPWgsdGhpcy5fZWxSZWY9bSx0aGlzLl9mb2N1c2VkTW9udGhJbmRleD10aGlzLmNhbGVuZGFyTW9udGhJbmRleH1nZXQgbW9udGhO'@;
put 'YW1lcygpe3JldHVybiB0aGlzLl9sb2NhbGVIZWxwZXJTZXJ2aWNlLmxvY2FsZU1vbnRoc1dpZGV9Z2V0IGNhbGVuZGFyTW9udGhJbmRleCgpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXIubW9udGh9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5f'@;
put 'ZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpfW9uS2V5RG93bihhKXtpZihhKXtjb25zdCBmPUVkKGEua2V5KTtmPT09TW8uQXJyb3dVcCYmdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXg+MD8oYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRNb250aElu'@;
put 'ZGV4LS0sdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpKTpmPT09TW8uQXJyb3dEb3duJiZ0aGlzLl9mb2N1c2VkTW9udGhJbmRleDwxMT8oYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRNb250aEluZGV4KyssdGhpcy5fZGF0ZXBpY2tl'@;
put 'ckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpKTpmPT09TW8uQXJyb3dSaWdodCYmdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXg8Nj8oYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRNb250aEluZGV4PXRoaXMuX2ZvY3VzZWRNb250aEluZGV4KzYsdGhpcy5fZGF0ZXBp'@;
put 'Y2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpKTpmPT09TW8uQXJyb3dMZWZ0JiZ0aGlzLl9mb2N1c2VkTW9udGhJbmRleD41JiYoYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRNb250aEluZGV4PXRoaXMuX2ZvY3VzZWRNb250aEluZGV4LTYsdGhpcy5fZGF0'@;
put 'ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpKX19Y2hhbmdlTW9udGgoYSl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmNoYW5nZU1vbnRoKGEpLHRoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZS5jaGFuZ2VUb0RheVZpZXcoKX1nZXRUYWJJbmRleChhKXtyZXR1'@;
put 'cm4gYT09PXRoaXMuX2ZvY3VzZWRNb250aEluZGV4PzA6LTF9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHJ0KGg3KSxydChkUykscnQocjMpLHJ0KGY3KSxydChWaSkpfSxsLlx1MDI3NWNtcD1rcih7dHlwZTpsLHNlbGVjdG9yczpbWyJjbHItbW9u'@;
put 'dGhwaWNrZXIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxmKXsxJmEmJkV0KCJrZXlkb3duIixmdW5jdGlvbihoKXtyZXR1cm4gZi5vbktleURvd24oaCl9KSwyJmEmJmdyKCJtb250aHBpY2tlciIsITApfSxkZWNsczoxLHZhcnM6MSxjb25zdHM6W1sidHlwZSIsImJ1'@;
put 'dHRvbiIsImNsYXNzIiwiY2FsZW5kYXItYnRuIG1vbnRoIiwzLCJpcy1zZWxlY3RlZCIsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbInR5cGUiLCJidXR0b24iLDEsImNhbGVuZGFyLWJ0biIsIm1vbnRoIiwzLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGYpezEmYSYmdHQo'@;
put 'MCxUSWUsMiw0LCJidXR0b24iLDApLDImYSYmUmUoIm5nRm9yT2YiLGYubW9udGhOYW1lcyl9LGRlcGVuZGVuY2llczpbUmFdLGVuY2Fwc3VsYXRpb246Mn0pLGx9KSgpO2NsYXNzIHBTe2NvbnN0cnVjdG9yKGMpe3RoaXMueWVhcj1jLHRoaXMueWVhclJhbmdlPVtdLHRoaXMuZ2VuZXJhdGVZ'@;
put 'ZWFyUmFuZ2UoKX1nZXQgbWlkZGxlWWVhcigpe3JldHVybiB0aGlzLnllYXJSYW5nZVtNYXRoLmZsb29yKHRoaXMueWVhclJhbmdlLmxlbmd0aC8yKV19bmV4dERlY2FkZSgpe3JldHVybiBuZXcgcFModGhpcy55ZWFyKzEwKX1wcmV2aW91c0RlY2FkZSgpe3JldHVybiBuZXcgcFModGhpcy55'@;
put 'ZWFyLTEwKX1jdXJyZW50RGVjYWRlKCl7cmV0dXJuIG5ldyBwUygobmV3IERhdGUpLmdldEZ1bGxZZWFyKCkpfWluUmFuZ2UoYyl7cmV0dXJuIHRoaXMueWVhclJhbmdlLmluZGV4T2YoYyk+LTF9Z2VuZXJhdGVZZWFyUmFuZ2UoKXtjb25zdCBhPXRoaXMueWVhci10aGlzLnllYXIlMTA7dGhp'@;
put 'cy55ZWFyUmFuZ2U9dGhpcy5nZW5lcmF0ZVJhbmdlKGEsYSsxMCl9Z2VuZXJhdGVSYW5nZShjLGEpe3JldHVybiBBcnJheS5mcm9tKHtsZW5ndGg6YS1jfSwoZixkKT0+ZCtjKX19bGV0IHhzZT0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEsZixkLGgsbSl7dGhpcy5fZGF0ZU5hdmlnYXRp'@;
put 'b25TZXJ2aWNlPWEsdGhpcy5fdmlld01hbmFnZXJTZXJ2aWNlPWYsdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZT1kLHRoaXMuX2VsUmVmPWgsdGhpcy5jb21tb25TdHJpbmdzPW0sdGhpcy55ZWFyUmFuZ2VNb2RlbD1uZXcgcFModGhpcy5jYWxlbmRhclllYXIpLHRoaXMuX2ZvY3VzZWRZ'@;
put 'ZWFyPXRoaXMuY2FsZW5kYXJZZWFyfWdldCBjYWxlbmRhclllYXIoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmRpc3BsYXllZENhbGVuZGFyLnllYXJ9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxS'@;
put 'ZWYpfW9uS2V5RG93bihhKXtpZihhKXtjb25zdCBmPUVkKGEua2V5KTtmPT09TW8uQXJyb3dVcD8oYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaW5jcmVtZW50Rm9jdXNZZWFyQnkoLTEpKTpmPT09TW8uQXJyb3dEb3duPyhhLnByZXZlbnREZWZhdWx0KCksdGhpcy5pbmNyZW1lbnRGb2N1c1ll'@;
put 'YXJCeSgxKSk6Zj09PU1vLkFycm93UmlnaHQ/KGEucHJldmVudERlZmF1bHQoKSx0aGlzLmluY3JlbWVudEZvY3VzWWVhckJ5KDUpKTpmPT09TW8uQXJyb3dMZWZ0JiYoYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaW5jcmVtZW50Rm9jdXNZZWFyQnkoLTUpKX19Y2hhbmdlWWVhcihhKXt0aGlz'@;
put 'Ll9kYXRlTmF2aWdhdGlvblNlcnZpY2UuY2hhbmdlWWVhcihhKSx0aGlzLl92aWV3TWFuYWdlclNlcnZpY2UuY2hhbmdlVG9EYXlWaWV3KCl9cHJldmlvdXNEZWNhZGUoKXt0aGlzLnllYXJSYW5nZU1vZGVsPXRoaXMueWVhclJhbmdlTW9kZWwucHJldmlvdXNEZWNhZGUoKX1jdXJyZW50RGVj'@;
put 'YWRlKCl7dGhpcy55ZWFyUmFuZ2VNb2RlbC5pblJhbmdlKHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS50b2RheS55ZWFyKXx8KHRoaXMueWVhclJhbmdlTW9kZWw9dGhpcy55ZWFyUmFuZ2VNb2RlbC5jdXJyZW50RGVjYWRlKCkpLHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9j'@;
put 'dXNDZWxsKHRoaXMuX2VsUmVmKX1uZXh0RGVjYWRlKCl7dGhpcy55ZWFyUmFuZ2VNb2RlbD10aGlzLnllYXJSYW5nZU1vZGVsLm5leHREZWNhZGUoKX1nZXRUYWJJbmRleChhKXtyZXR1cm4gdGhpcy55ZWFyUmFuZ2VNb2RlbC5pblJhbmdlKHRoaXMuX2ZvY3VzZWRZZWFyKXx8KHRoaXMuX2Zv'@;
put 'Y3VzZWRZZWFyPXRoaXMueWVhclJhbmdlTW9kZWwuaW5SYW5nZSh0aGlzLmNhbGVuZGFyWWVhcik/dGhpcy5jYWxlbmRhclllYXI6dGhpcy55ZWFyUmFuZ2VNb2RlbC5taWRkbGVZZWFyKSx0aGlzLl9mb2N1c2VkWWVhcj09PWE/MDotMX1pbmNyZW1lbnRGb2N1c1llYXJCeShhKXt0aGlzLl9m'@;
put 'b2N1c2VkWWVhcj10aGlzLl9mb2N1c2VkWWVhcithLHRoaXMueWVhclJhbmdlTW9kZWwuaW5SYW5nZSh0aGlzLl9mb2N1c2VkWWVhcil8fCh0aGlzLnllYXJSYW5nZU1vZGVsPWE+MD90aGlzLnllYXJSYW5nZU1vZGVsLm5leHREZWNhZGUoKTp0aGlzLnllYXJSYW5nZU1vZGVsLnByZXZpb3Vz'@;
put 'RGVjYWRlKCkpLHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRoaXMuX2VsUmVmKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkocnQocjMpLHJ0KGg3KSxydChmNykscnQoVmkpLHJ0KFRhKSl9LGwuXHUwMjc1Y21wPWtyKHt0'@;
put 'eXBlOmwsc2VsZWN0b3JzOltbImNsci15ZWFycGlja2VyIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZil7MSZhJiZFdCgia2V5ZG93biIsZnVuY3Rpb24oaCl7cmV0dXJuIGYub25LZXlEb3duKGgpfSksMiZhJiZncigieWVhcnBpY2tlciIsITApfSxkZWNsczo5LHZh'@;
put 'cnM6Nyxjb25zdHM6W1sxLCJ5ZWFyLXN3aXRjaGVycyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2FsZW5kYXItYnRuIiwic3dpdGNoZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwibGVmdCJdLFsic2hhcGUiLCJldmVudCJdLFsic2hhcGUiLCJhbmdsZSIsImRp'@;
put 'cmVjdGlvbiIsInJpZ2h0Il0sWzEsInllYXJzIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJjYWxlbmRhci1idG4geWVhciIsMywiaXMtc2VsZWN0ZWQiLCJjbGljayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRhci1idG4iLCJ5ZWFyIiwzLCJj'@;
put 'bGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGYpezEmYSYmKHllKDAsImRpdiIsMCkoMSwiYnV0dG9uIiwxKSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGYucHJldmlvdXNEZWNhZGUoKX0pLHRuKDIsImNkcy1pY29uIiwyKSxDZSgpLHllKDMsImJ1dHRvbiIsMSksRXQoImNsaWNr'@;
put 'IixmdW5jdGlvbigpe3JldHVybiBmLmN1cnJlbnREZWNhZGUoKX0pLHRuKDQsImNkcy1pY29uIiwzKSxDZSgpLHllKDUsImJ1dHRvbiIsMSksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBmLm5leHREZWNhZGUoKX0pLHRuKDYsImNkcy1pY29uIiw0KSxDZSgpKCkseWUoNywiZGl2Iiw1'@;
put 'KSx0dCg4LE9JZSwyLDQsImJ1dHRvbiIsNiksQ2UoKSksMiZhJiYoU2UoMSksUnIoImFyaWEtbGFiZWwiLGYuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJQcmV2aW91c0RlY2FkZSksU2UoMSksUnIoInRpdGxlIixmLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyUHJldmlvdXNE'@;
put 'ZWNhZGUpLFNlKDEpLFJyKCJhcmlhLWxhYmVsIixmLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyQ3VycmVudERlY2FkZSksU2UoMSksUnIoInRpdGxlIixmLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyQ3VycmVudERlY2FkZSksU2UoMSksUnIoImFyaWEtbGFiZWwiLGYuY29t'@;
put 'bW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJOZXh0RGVjYWRlKSxTZSgxKSxScigidGl0bGUiLGYuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJOZXh0RGVjYWRlKSxTZSgyKSxSZSgibmdGb3JPZiIsZi55ZWFyUmFuZ2VNb2RlbC55ZWFyUmFuZ2UpKX0sZGVwZW5kZW5jaWVzOltKYSxS'@;
put 'YV0sZW5jYXBzdWxhdGlvbjoyfSksbH0pKCksQXNlPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmLGQsaCl7dGhpcy5fdmlld01hbmFnZXJTZXJ2aWNlPWEsdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPWYsdGhpcy5fbG9jYWxlSGVscGVyU2VydmljZT1kLHRoaXMuY29tbW9uU3Ry'@;
put 'aW5ncz1ofWdldCBtb250aEF0dHJTdHJpbmcoKXtyZXR1cm4gdGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJTZWxlY3RNb250aFRleHQse0NBTEVOREFSX01PTlRIOnRoaXMuY2FsZW5kYXJNb250aH0pfWdldCB5ZWFyQXR0clN0cmlu'@;
put 'Zygpe3JldHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclNlbGVjdFllYXJUZXh0LHtDQUxFTkRBUl9ZRUFSOnRoaXMuY2FsZW5kYXJZZWFyLnRvU3RyaW5nKCl9KX1nZXQgY2FsZW5kYXJNb250aCgpe3JldHVybiB0aGlzLl9s'@;
put 'b2NhbGVIZWxwZXJTZXJ2aWNlLmxvY2FsZU1vbnRoc0FiYnJldmlhdGVkW3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5kaXNwbGF5ZWRDYWxlbmRhci5tb250aF19Z2V0IGNhbGVuZGFyWWVhcigpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5k'@;
put 'YXIueWVhcn1jaGFuZ2VUb01vbnRoVmlldygpe3RoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZS5jaGFuZ2VUb01vbnRoVmlldygpfWNoYW5nZVRvWWVhclZpZXcoKXt0aGlzLl92aWV3TWFuYWdlclNlcnZpY2UuY2hhbmdlVG9ZZWFyVmlldygpfW5leHRNb250aCgpe3RoaXMuX2RhdGVOYXZpZ2F0'@;
put 'aW9uU2VydmljZS5tb3ZlVG9OZXh0TW9udGgoKX1wcmV2aW91c01vbnRoKCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm1vdmVUb1ByZXZpb3VzTW9udGgoKX1jdXJyZW50TW9udGgoKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UubW92ZVRvQ3VycmVudE1vbnRoKCl9fXJldHVy'@;
put 'biBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHJ0KGg3KSxydChyMykscnQoZFMpLHJ0KFRhKSl9LGwuXHUwMjc1Y21wPWtyKHt0eXBlOmwsc2VsZWN0b3JzOltbImNsci1kYXlwaWNrZXIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxmKXsy'@;
put 'JmEmJmdyKCJkYXlwaWNrZXIiLCEwKX0sZGVjbHM6MTgsdmFyczoxNCxjb25zdHM6W1sxLCJjbHItc3Itb25seSJdLFsxLCJjYWxlbmRhci1oZWFkZXIiXSxbMSwiY2FsZW5kYXItcGlja2VycyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2FsZW5kYXItYnRuIiwibW9udGhwaWNrZXItdHJpZ2dl'@;
put 'ciIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImNhbGVuZGFyLWJ0biIsInllYXJwaWNrZXItdHJpZ2dlciIsMywiY2xpY2siXSxbMSwiY2FsZW5kYXItc3dpdGNoZXJzIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRhci1idG4iLCJzd2l0Y2hlciIsMywiY2xpY2siXSxbInNo'@;
put 'YXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJsZWZ0Il0sWyJzaGFwZSIsImV2ZW50Il0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwicmlnaHQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxmKXsxJmEmJih5ZSgwLCJkaXYiLDApLFllKDEpLENlKCkseWUoMiwiZGl2IiwxKSgzLCJkaXYi'@;
put 'LDIpKDQsImJ1dHRvbiIsMyksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBmLmNoYW5nZVRvTW9udGhWaWV3KCl9KSxZZSg1KSxDZSgpLHllKDYsImJ1dHRvbiIsNCksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBmLmNoYW5nZVRvWWVhclZpZXcoKX0pLFllKDcpLENlKCkoKSx5'@;
put 'ZSg4LCJkaXYiLDUpKDksImJ1dHRvbiIsNiksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBmLnByZXZpb3VzTW9udGgoKX0pLHRuKDEwLCJjZHMtaWNvbiIsNyksQ2UoKSx5ZSgxMSwiYnV0dG9uIiw2KSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGYuY3VycmVudE1vbnRoKCl9'@;
put 'KSx0bigxMiwiY2RzLWljb24iLDgpLENlKCkseWUoMTMsImJ1dHRvbiIsNiksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBmLm5leHRNb250aCgpfSksdG4oMTQsImNkcy1pY29uIiw5KSxDZSgpKCkoKSx0bigxNSwiY2xyLWNhbGVuZGFyIikseWUoMTYsImRpdiIsMCksWWUoMTcpLENl'@;
put 'KCkpLDImYSYmKFNlKDEpLGFyKGYuY29tbW9uU3RyaW5ncy5rZXlzLm1vZGFsQ29udGVudFN0YXJ0KSxTZSgzKSxScigiYXJpYS1sYWJlbCIsZi5tb250aEF0dHJTdHJpbmcpKCJ0aXRsZSIsZi5tb250aEF0dHJTdHJpbmcpLFNlKDEpLHdyKCIgIixmLmNhbGVuZGFyTW9udGgsIiAiKSxTZSgx'@;
put 'KSxScigiYXJpYS1sYWJlbCIsZi55ZWFyQXR0clN0cmluZykoInRpdGxlIixmLnllYXJBdHRyU3RyaW5nKSxTZSgxKSx3cigiICIsZi5jYWxlbmRhclllYXIsIiAiKSxTZSgyKSxScigiYXJpYS1sYWJlbCIsZi5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclByZXZpb3VzTW9udGgpLFNl'@;
put 'KDEpLFJyKCJ0aXRsZSIsZi5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclByZXZpb3VzTW9udGgpLFNlKDEpLFJyKCJhcmlhLWxhYmVsIixmLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyQ3VycmVudE1vbnRoKSxTZSgxKSxScigidGl0bGUiLGYuY29tbW9uU3RyaW5ncy5rZXlz'@;
put 'LmRhdGVwaWNrZXJDdXJyZW50TW9udGgpLFNlKDEpLFJyKCJhcmlhLWxhYmVsIixmLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyTmV4dE1vbnRoKSxTZSgxKSxScigidGl0bGUiLGYuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJOZXh0TW9udGgpLFNlKDMpLGFyKGYuY29tbW9u'@;
put 'U3RyaW5ncy5rZXlzLm1vZGFsQ29udGVudEVuZCkpfSxkZXBlbmRlbmNpZXM6W01zZSxKYV0sZW5jYXBzdWxhdGlvbjoyfSksbH0pKCksVHNlPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmKXt0aGlzLmNvbW1vblN0cmluZ3M9YSx0aGlzLnZpZXdNYW5hZ2VyU2VydmljZT1mfWdldCBp'@;
put 'c01vbnRoVmlldygpe3JldHVybiB0aGlzLnZpZXdNYW5hZ2VyU2VydmljZS5pc01vbnRoVmlld31nZXQgaXNZZWFyVmlldygpe3JldHVybiB0aGlzLnZpZXdNYW5hZ2VyU2VydmljZS5pc1llYXJWaWV3fWdldCBpc0RheVZpZXcoKXtyZXR1cm4gdGhpcy52aWV3TWFuYWdlclNlcnZpY2UuaXNE'@;
put 'YXlWaWV3fX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChUYSkscnQoaDcpKX0sbC5cdTAyNzVjbXA9a3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siY2xyLWRhdGVwaWNrZXItdmlldy1tYW5hZ2VyIl1dLGhvc3RBdHRyczpbInJvbGUiLCJkaWFsb2ci'@;
put 'XSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGYpezImYSYmKFJyKCJhcmlhLW1vZGFsIiwhMCkoImFyaWEtbGFiZWwiLGYuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJEaWFsb2dMYWJlbCksZ3IoImRhdGVwaWNrZXIiLCEwKSl9LGZlYXR1cmVzOltyaShbZjddKV0s'@;
put 'ZGVjbHM6Myx2YXJzOjMsY29uc3RzOltbNCwibmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGYpezEmYSYmKHR0KDAsREllLDEsMCwiY2xyLW1vbnRocGlja2VyIiwwKSx0dCgxLElJZSwxLDAsImNsci15ZWFycGlja2VyIiwwKSx0dCgyLFJJZSwxLDAsImNsci1kYXlwaWNrZXIiLDApKSwy'@;
put 'JmEmJihSZSgibmdJZiIsZi5pc01vbnRoVmlldyksU2UoMSksUmUoIm5nSWYiLGYuaXNZZWFyVmlldyksU2UoMSksUmUoIm5nSWYiLGYuaXNEYXlWaWV3KSl9LGRlcGVuZGVuY2llczpba3NlLHhzZSxBc2UsJGldLGVuY2Fwc3VsYXRpb246Mn0pLGx9KSgpLG1TPSgoKT0+e2NsYXNzIGwgZXh0'@;
put 'ZW5kcyBvN3tjb25zdHJ1Y3RvcihhLGYsZCxoLG0sXyxPLFgsYWUscGUsYmUseGUsVmUpe3N1cGVyKFZlLGJlLHBlLHhlKSx0aGlzLnJlbmRlcmVyPWEsdGhpcy50b2dnbGVTZXJ2aWNlPWYsdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2U9ZCx0aGlzLmRhdGVwaWNrZXJFbmFibGVkU2Vydmlj'@;
put 'ZT1oLHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZT1tLHRoaXMuZGF0ZUlPU2VydmljZT1fLHRoaXMuY29tbW9uU3RyaW5ncz1PLHRoaXMuZm9jdXNTZXJ2aWNlPVgsdGhpcy52aWV3TWFuYWdlclNlcnZpY2U9YWUsdGhpcy5jb250cm9sQ2xhc3NTZXJ2aWNlPXBlLHRoaXMubGF5b3V0U2Vy'@;
put 'dmljZT1iZSx0aGlzLm5nQ29udHJvbFNlcnZpY2U9eGUsdGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2U9VmUsdGhpcy5mb2N1cz0hMSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmZvY3VzU2VydmljZS5mb2N1c0NoYW5nZS5zdWJzY3JpYmUoWmU9Pnt0aGlzLmZvY3VzPVplfSkpLHRo'@;
put 'aXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMudG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5tYXJrQXNUb3VjaGVkKCl9KSl9c2V0IGNsclBvc2l0aW9uKGEpe2EmJlAwW2FdJiYodGhpcy52aWV3TWFuYWdlclNlcnZp'@;
put 'Y2UucG9zaXRpb249UDBbYV0pfXNldCBhY3Rpb25CdXR0b24oYSl7dGhpcy50b2dnbGVCdXR0b249YX1nZXQgcG9wb3ZlclBvc2l0aW9uKCl7cmV0dXJuIHRoaXMudmlld01hbmFnZXJTZXJ2aWNlLnBvc2l0aW9ufWdldCBvcGVuKCl7cmV0dXJuIHRoaXMudG9nZ2xlU2VydmljZS5vcGVufWdl'@;
put 'dCBpc0VuYWJsZWQoKXtyZXR1cm4gdGhpcy5kYXRlcGlja2VyRW5hYmxlZFNlcnZpY2UuaXNFbmFibGVkfWdldCBpc0lucHV0RGF0ZURpc2FibGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbCYmdGhpcy5jb250cm9sLmRpc2FibGVkfHx0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UmJnRoaXMu'@;
put 'ZGF0ZUZvcm1Db250cm9sU2VydmljZS5kaXNhYmxlZH1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoYT0+e2E/dGhpcy5pbml0aWFsaXplQ2FsZW5kYXIoKTp0aGlzLnRvZ2dsZUJ1dHRvbi5u'@;
put 'YXRpdmVFbGVtZW50LmZvY3VzKCl9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5saXN0ZW5Gb3JEYXRlQ2hhbmdlcygpKX1nZXRUb2dnbGVCdXR0b25MYWJlbChhKXtpZihhKXtjb25zdCBmPXRoaXMuZGF0ZUlPU2VydmljZS50b0xvY2FsZURpc3BsYXlGb3JtYXRTdHJpbmcoYS50'@;
put 'b0RhdGUoKSk7cmV0dXJuIHRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyVG9nZ2xlQ2hhbmdlRGF0ZUxhYmVsLHtTRUxFQ1RFRF9EQVRFOmZ9KXx8dGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclRvZ2dsZX1yZXR1cm4g'@;
put 'dGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclRvZ2dsZUNob29zZURhdGVMYWJlbHx8dGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclRvZ2dsZX1saXN0ZW5Gb3JEYXRlQ2hhbmdlcygpe3JldHVybiB0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERh'@;
put 'eUNoYW5nZS5waXBlKHQ0KHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5KSkuc3Vic2NyaWJlKGE9PntpZih0aGlzLmlzRW5hYmxlZCl7Y29uc3QgZj10aGlzLmdldFRvZ2dsZUJ1dHRvbkxhYmVsKGEpLGQ9dGhpcy50b2dnbGVCdXR0b24ubmF0aXZlRWxlbWVudDt0aGlz'@;
put 'LnJlbmRlcmVyLnNldEF0dHJpYnV0ZShkLCJhcmlhLWxhYmVsIixmKSx0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShkLCJ0aXRsZSIsZil9fSl9aW5pdGlhbGl6ZUNhbGVuZGFyKCl7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaW5pdGlhbGl6ZUNhbGVuZGFyKCl9fXJldHVybiBsLlx1'@;
put 'MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHJ0KGpvKSxydChRYSkscnQocjMpLHJ0KHJJKSxydChoUykscnQoZDcpLHJ0KFRhKSxydChJVSkscnQoaDcpLHJ0KERmKSxydChuMyw4KSxydChIMCkscnQoT2YpKX0sbC5cdTAyNzVjbXA9a3Ioe3R5cGU6bCxzZWxlY3RvcnM6'@;
put 'W1siY2xyLWRhdGUtY29udGFpbmVyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGYpe2lmKDEmYSYmTm8oTEllLDUpLDImYSl7bGV0IGQ7dWkoZD1jaSgpKSYmKGYuYWN0aW9uQnV0dG9uPWQuZmlyc3QpfX0saG9zdFZhcnM6OCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxmKXsyJmEmJmdyKCJj'@;
put 'bHItZGF0ZS1jb250YWluZXIiLCEwKSgiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCIsZi5pc0lucHV0RGF0ZURpc2FibGVkKSgiY2xyLWZvcm0tY29udHJvbCIsITApKCJjbHItcm93IixmLmFkZEdyaWQoKSl9LGlucHV0czp7Y2xyUG9zaXRpb246ImNsclBvc2l0aW9uIn0sZmVhdHVyZXM6'@;
put 'W3JpKFtUZixRYSxRMix0NyxkUyxEZixJVSxIMCxkNyxyMyxySSxoUyxoNyxPZl0pLHJvXSxuZ0NvbnRlbnRTZWxlY3RvcnM6WkllLGRlY2xzOjEzLHZhcnM6MTQsY29uc3RzOltbNCwibmdJZiJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiLDMsIm5nQ2xhc3MiXSxbImNsclBvcG92ZXJB'@;
put 'bmNob3IiLCIiLDEsImNsci1pbnB1dC13cmFwcGVyIl0sWzEsImNsci1pbnB1dC1ncm91cCJdLFsidHlwZSIsImJ1dHRvbiIsImNsclBvcG92ZXJPcGVuQ2xvc2VCdXR0b24iLCIiLCJjbGFzcyIsImNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbiIsMywiZGlzYWJsZWQiLDQsIm5nSWYiXSxb'@;
put 'ImNsckZvY3VzVHJhcCIsIiIsNCwiY2xyUG9wb3ZlckNvbnRlbnQiLCJjbHJQb3BvdmVyQ29udGVudEF0IiwiY2xyUG9wb3ZlckNvbnRlbnRPdXRzaWRlQ2xpY2tUb0Nsb3NlIiwiY2xyUG9wb3ZlckNvbnRlbnRTY3JvbGxUb0Nsb3NlIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwi'@;
put 'c2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRy'@;
put 'dWUiLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLCJjbHJQb3BvdmVyT3BlbkNsb3NlQnV0dG9uIiwiIiwxLCJjbHItaW5wdXQtZ3JvdXAtaWNvbi1hY3Rpb24iLDMsImRpc2FibGVkIl0sWyJhY3Rpb25CdXR0b24iLCIiXSxbInN0YXR1cyIsImluZm8iLCJzaGFwZSIsImNhbGVuZGFyIl0s'@;
put 'WyJjbHJGb2N1c1RyYXAiLCIiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdLFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRk'@;
put 'ZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGYpezEmYSYmKFRpKFVJZSksRHIoMCksdHQoMSxQSWUsMSwwLCJsYWJlbCIsMCkseWUoMiwiZGl2IiwxKSgzLCJkaXYiLDIpKDQsImRpdiIsMyksRHIoNSwxKSx0dCg2LEZJZSwzLDEsImJ1dHRv'@;
put 'biIsNCksdHQoNyxISWUsMSwwLCJjbHItZGF0ZXBpY2tlci12aWV3LW1hbmFnZXIiLDUpLENlKCksdHQoOCxOSWUsMSwwLCJjZHMtaWNvbiIsNiksdHQoOSxWSWUsMSwwLCJjZHMtaWNvbiIsNyksQ2UoKSx0dCgxMCxCSWUsMSwwLCJuZy1jb250ZW50IiwwKSx0dCgxMSxqSWUsMSwwLCJuZy1j'@;
put 'b250ZW50IiwwKSx0dCgxMix6SWUsMSwwLCJuZy1jb250ZW50IiwwKSxDZSgpKSwyJmEmJihTZSgxKSxSZSgibmdJZiIsIWYubGFiZWwmJmYuYWRkR3JpZCgpKSxTZSgxKSxSZSgibmdDbGFzcyIsZi5jb250cm9sQ2xhc3MoKSksU2UoMiksZ3IoImNsci1mb2N1cyIsZi5mb2N1cyksU2UoMiks'@;
put 'UmUoIm5nSWYiLGYuaXNFbmFibGVkKSxTZSgxKSxSZSgiY2xyUG9wb3ZlckNvbnRlbnQiLGYub3BlbikoImNsclBvcG92ZXJDb250ZW50QXQiLGYucG9wb3ZlclBvc2l0aW9uKSgiY2xyUG9wb3ZlckNvbnRlbnRPdXRzaWRlQ2xpY2tUb0Nsb3NlIiwhMCkoImNsclBvcG92ZXJDb250ZW50U2Ny'@;
put 'b2xsVG9DbG9zZSIsITApLFNlKDEpLFJlKCJuZ0lmIixmLnNob3dJbnZhbGlkKSxTZSgxKSxSZSgibmdJZiIsZi5zaG93VmFsaWQpLFNlKDEpLFJlKCJuZ0lmIixmLnNob3dIZWxwZXIpLFNlKDEpLFJlKCJuZ0lmIixmLnNob3dJbnZhbGlkKSxTZSgxKSxSZSgibmdJZiIsZi5zaG93VmFsaWQp'@;
put 'KX0sZGVwZW5kZW5jaWVzOltUc2UsJGksZWwseXUsclMsYVMsSmEsb1MsZzRdLGVuY2Fwc3VsYXRpb246Mn0pLGx9KSgpLE5VPSgoKT0+e2NsYXNzIGwgZXh0ZW5kcyBhN3tjb25zdHJ1Y3RvcihhLGYsZCxoLG0sXyxPLFgsYWUscGUsYmUseGUsVmUpe3N1cGVyKGEsbVMsZixtLGgsZCksdGhp'@;
put 'cy5lbD1kLHRoaXMucmVuZGVyZXI9aCx0aGlzLmNvbnRyb2w9bSx0aGlzLmNvbnRhaW5lcj1fLHRoaXMuZGF0ZUlPU2VydmljZT1PLHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPVgsdGhpcy5kYXRlcGlja2VyRW5hYmxlZFNlcnZpY2U9YWUsdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNl'@;
put 'PXBlLHRoaXMucGxhdGZvcm1JZD1iZSx0aGlzLmZvY3VzU2VydmljZT14ZSx0aGlzLmRhdGVwaWNrZXJGb2N1c1NlcnZpY2U9VmUsdGhpcy5kYXRlQ2hhbmdlPW5ldyB4cighMSksdGhpcy5pbmRleD0xfXNldCBkYXRlKGEpe3RoaXMucHJldmlvdXNEYXRlQ2hhbmdlIT09YSYmdGhpcy51cGRh'@;
put 'dGVEYXRlKHRoaXMuZ2V0VmFsaWREYXRlVmFsdWVGcm9tRGF0ZShhKSksdGhpcy5pbml0aWFsQ2xyRGF0ZUlucHV0VmFsdWV8fCh0aGlzLmluaXRpYWxDbHJEYXRlSW5wdXRWYWx1ZT1hKX1zZXQgbWluKGEpe3RoaXMuZGF0ZUlPU2VydmljZS5zZXRNaW5EYXRlKGEpfXNldCBtYXgoYSl7dGhp'@;
put 'cy5kYXRlSU9TZXJ2aWNlLnNldE1heERhdGUoYSl9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZT90aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UuZGlzYWJsZWQ6bnVsbH1zZXQgZGlzYWJsZWQoYSl7dGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNl'@;
put 'JiZ0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2Uuc2V0RGlzYWJsZWQoSWYoYSkpfWdldCBwbGFjZWhvbGRlclRleHQoKXtyZXR1cm4gdGhpcy5wbGFjZWhvbGRlcj90aGlzLnBsYWNlaG9sZGVyOnRoaXMuZGF0ZUlPU2VydmljZS5wbGFjZWhvbGRlclRleHR9Z2V0IGlucHV0VHlwZSgpe3Jl'@;
put 'dHVybiBIYSh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLnVzaW5nTmF0aXZlRGF0ZXBpY2tlcigpPyJkYXRlIjoidGV4dCJ9bmdPbkluaXQoKXtzdXBlci5uZ09uSW5pdCgpLHRoaXMucG9wdWxhdGVTZXJ2aWNlc0Zyb21Db250YWluZXJDb21wb25lbnQoKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVz'@;
put 'aCh0aGlzLmxpc3RlbkZvclVzZXJTZWxlY3RlZERheUNoYW5nZXMoKSx0aGlzLmxpc3RlbkZvckNvbnRyb2xWYWx1ZUNoYW5nZXMoKSx0aGlzLmxpc3RlbkZvclRvdWNoQ2hhbmdlcygpLHRoaXMubGlzdGVuRm9yRGlydHlDaGFuZ2VzKCksdGhpcy5saXN0ZW5Gb3JJbnB1dFJlZm9jdXMoKSl9'@;
put 'bmdBZnRlclZpZXdJbml0KCl7dGhpcy5wcm9jZXNzSW5pdGlhbElucHV0cygpfXNldEZvY3VzU3RhdGVzKCl7dGhpcy5zZXRGb2N1cyghMCl9dHJpZ2dlclZhbGlkYXRpb24oKXtzdXBlci50cmlnZ2VyVmFsaWRhdGlvbigpLHRoaXMuc2V0Rm9jdXMoITEpfW9uVmFsdWVDaGFuZ2UoYSl7Y29u'@;
put 'c3QgZj10aGlzLmRhdGVJT1NlcnZpY2UuZ2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcoYS52YWx1ZSk7aWYodGhpcy51c2luZ0NsYXJpdHlEYXRlcGlja2VyKCkmJmYpdGhpcy51cGRhdGVEYXRlKGYsITApO2Vsc2UgaWYodGhpcy51c2luZ05hdGl2ZURhdGVwaWNrZXIoKSl7Y29uc3RbZCxo'@;
put 'LG1dPWEudmFsdWUuc3BsaXQoIi0iKTt0aGlzLnVwZGF0ZURhdGUobmV3IERhdGUoK2QsK2gtMSwrbSksITApfWVsc2UgdGhpcy5lbWl0RGF0ZU91dHB1dChudWxsKX11c2luZ0NsYXJpdHlEYXRlcGlja2VyKCl7cmV0dXJuIHRoaXMuZGF0ZXBpY2tlckVuYWJsZWRTZXJ2aWNlLmlzRW5hYmxl'@;
put 'ZH11c2luZ05hdGl2ZURhdGVwaWNrZXIoKXtyZXR1cm4hdGhpcy5kYXRlcGlja2VyRW5hYmxlZFNlcnZpY2UuaXNFbmFibGVkfXNldEZvY3VzKGEpe3RoaXMuZm9jdXNTZXJ2aWNlJiYodGhpcy5mb2N1c1NlcnZpY2UuZm9jdXNlZD1hKX1wb3B1bGF0ZVNlcnZpY2VzRnJvbUNvbnRhaW5lckNv'@;
put 'bXBvbmVudCgpe3RoaXMuY29udGFpbmVyfHwodGhpcy5kYXRlSU9TZXJ2aWNlPXRoaXMuZ2V0UHJvdmlkZXJGcm9tQ29udGFpbmVyKGQ3KSx0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZT10aGlzLmdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcihyMyksdGhpcy5kYXRlcGlja2VyRW5hYmxlZFNl'@;
put 'cnZpY2U9dGhpcy5nZXRQcm92aWRlckZyb21Db250YWluZXIockkpLHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZT10aGlzLmdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcihoUykpfXByb2Nlc3NJbml0aWFsSW5wdXRzKCl7dGhpcy5kYXRlcGlja2VySGFzRm9ybUNvbnRyb2woKT90aGlzLnVw'@;
put 'ZGF0ZURhdGUodGhpcy5kYXRlSU9TZXJ2aWNlLmdldERhdGVWYWx1ZUZyb21EYXRlU3RyaW5nKHRoaXMuY29udHJvbC52YWx1ZSkpOnRoaXMudXBkYXRlRGF0ZSh0aGlzLmluaXRpYWxDbHJEYXRlSW5wdXRWYWx1ZSl9dXBkYXRlRGF0ZShhLGY9ITEpe2NvbnN0IGQ9dGhpcy5nZXRWYWxpZERh'@;
put 'dGVWYWx1ZUZyb21EYXRlKGEpO2Y/dGhpcy5lbWl0RGF0ZU91dHB1dChkKTp0aGlzLnByZXZpb3VzRGF0ZUNoYW5nZT1kLHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlJiYodGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXk9ZD9uZXcgQTEoZC5nZXRGdWxsWWVhcigpLGQu'@;
put 'Z2V0TW9udGgoKSxkLmdldERhdGUoKSk6bnVsbCksdGhpcy51cGRhdGVJbnB1dChkKX11cGRhdGVJbnB1dChhKXtpZihhKXtjb25zdCBmPXRoaXMuZGF0ZUlPU2VydmljZS50b0xvY2FsZURpc3BsYXlGb3JtYXRTdHJpbmcoYSk7dGhpcy51c2luZ05hdGl2ZURhdGVwaWNrZXIoKT8oYS5zZXRN'@;
put 'aW51dGVzKGEuZ2V0TWludXRlcygpLWEuZ2V0VGltZXpvbmVPZmZzZXQoKSksdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsInZhbHVlQXNEYXRlIixhKSk6dGhpcy5kYXRlcGlja2VySGFzRm9ybUNvbnRyb2woKSYmZiE9PXRoaXMuY29udHJvbC52YWx1'@;
put 'ZT90aGlzLmNvbnRyb2wuY29udHJvbC5zZXRWYWx1ZShmKTp0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuZWwubmF0aXZlRWxlbWVudCwidmFsdWUiLGYpfWVsc2UgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsInZhbHVlIiwiIil9Z2V0VmFs'@;
put 'aWREYXRlVmFsdWVGcm9tRGF0ZShhKXtpZih0aGlzLmRhdGVJT1NlcnZpY2Upe2NvbnN0IGY9dGhpcy5kYXRlSU9TZXJ2aWNlLnRvTG9jYWxlRGlzcGxheUZvcm1hdFN0cmluZyhhKTtyZXR1cm4gdGhpcy5kYXRlSU9TZXJ2aWNlLmdldERhdGVWYWx1ZUZyb21EYXRlU3RyaW5nKGYpfXJldHVy'@;
put 'biBudWxsfWVtaXREYXRlT3V0cHV0KGEpeyFmdW5jdGlvbiBPSGUobCxjKXtyZXR1cm4gbCBpbnN0YW5jZW9mIERhdGUmJmMgaW5zdGFuY2VvZiBEYXRlJiZsLmdldEZ1bGxZZWFyKCk9PT1jLmdldEZ1bGxZZWFyKCkmJmwuZ2V0TW9udGgoKT09PWMuZ2V0TW9udGgoKSYmbC5nZXREYXRlKCk9'@;
put 'PT1jLmdldERhdGUoKX0oYSx0aGlzLnByZXZpb3VzRGF0ZUNoYW5nZSk/KHRoaXMuZGF0ZUNoYW5nZS5lbWl0KGEpLHRoaXMucHJldmlvdXNEYXRlQ2hhbmdlPWEpOiFhJiZ0aGlzLnByZXZpb3VzRGF0ZUNoYW5nZSYmKHRoaXMuZGF0ZUNoYW5nZS5lbWl0KG51bGwpLHRoaXMucHJldmlvdXNE'@;
put 'YXRlQ2hhbmdlPW51bGwpfWRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpe3JldHVybiEhdGhpcy5jb250cm9sfWxpc3RlbkZvckNvbnRyb2xWYWx1ZUNoYW5nZXMoKXtyZXR1cm4gR2kodGhpcy5kYXRlcGlja2VySGFzRm9ybUNvbnRyb2woKSkucGlwZShJbChhPT5hKSxrbCgoKT0+dGhpcy5j'@;
put 'b250cm9sLnZhbHVlQ2hhbmdlcyksSWwoKCk9PiF0aGlzLmRhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZWxlbWVudElzRm9jdXNlZCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpKSkuc3Vic2NyaWJlKGE9PnRoaXMudXBkYXRlRGF0ZSh0aGlzLmRhdGVJT1NlcnZpY2UuZ2V0RGF0ZVZhbHVlRnJvbURh'@;
put 'dGVTdHJpbmcoYSkpKX1saXN0ZW5Gb3JVc2VyU2VsZWN0ZWREYXlDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Q2hhbmdlLnN1YnNjcmliZShhPT50aGlzLnVwZGF0ZURhdGUoYS50b0RhdGUoKSwhMCkpfWxpc3RlbkZvclRvdWNoQ2hhbmdl'@;
put 'cygpe3JldHVybiB0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UudG91Y2hlZENoYW5nZS5waXBlKElsKCgpPT50aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpKSkuc3Vic2NyaWJlKCgpPT50aGlzLmNvbnRyb2wuY29udHJvbC5tYXJrQXNUb3VjaGVkKCkpfWxpc3RlbkZvckRpcnR5'@;
put 'Q2hhbmdlcygpe3JldHVybiB0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UuZGlydHlDaGFuZ2UucGlwZShJbCgoKT0+dGhpcy5kYXRlcGlja2VySGFzRm9ybUNvbnRyb2woKSkpLnN1YnNjcmliZSgoKT0+dGhpcy5jb250cm9sLmNvbnRyb2wubWFya0FzRGlydHkoKSl9bGlzdGVuRm9ySW5w'@;
put 'dXRSZWZvY3VzKCl7cmV0dXJuIHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Q2hhbmdlLnBpcGUoSWwoYT0+ISFhKSkuc3Vic2NyaWJlKCgpPT50aGlzLmRhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNJbnB1dCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpKX19cmV0dXJu'@;
put 'IGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkocnQoZmEpLHJ0KEFsKSxydChWaSkscnQoam8pLHJ0KHFjLDEwKSxydChtUyw4KSxydChkNyw4KSxydChyMyw4KSxydChySSw4KSxydChoUyw4KSxydChxYSkscnQoSVUsOCkscnQoZjcpKX0sbC5cdTAyNzVkaXI9U3Io'@;
put 'e3R5cGU6bCxzZWxlY3RvcnM6W1siIiwiY2xyRGF0ZSIsIiJdXSxob3N0VmFyczo1LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGYpezEmYSYmRXQoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBmLnNldEZvY3VzU3RhdGVzKCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gZi50cmlnZ2Vy'@;
put 'VmFsaWRhdGlvbigpfSkoImNoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIGYub25WYWx1ZUNoYW5nZShoLnRhcmdldCl9KSwyJmEmJihtMSgiZGlzYWJsZWQiLGYuZGlzYWJsZWQpLFJyKCJwbGFjZWhvbGRlciIsZi5wbGFjZWhvbGRlclRleHQpKCJ0eXBlIixmLmlucHV0VHlwZSksZ3IoImNs'@;
put 'ci1pbnB1dCIsITApKX0saW5wdXRzOntwbGFjZWhvbGRlcjoicGxhY2Vob2xkZXIiLGRhdGU6WyJjbHJEYXRlIiwiZGF0ZSJdLG1pbjoibWluIixtYXg6Im1heCIsZGlzYWJsZWQ6ImRpc2FibGVkIn0sb3V0cHV0czp7ZGF0ZUNoYW5nZToiY2xyRGF0ZUNoYW5nZSJ9LGZlYXR1cmVzOltyaShb'@;
put 'ZjddKSxyb119KSxsfSkoKSxWVT0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEpe3RoaXMuZGF0ZUlPU2VydmljZT1hfXZhbGlkYXRlKGEpe2lmKHRoaXMuZGF0ZUlPU2VydmljZSl7Y29uc3QgZj10aGlzLmRhdGVJT1NlcnZpY2UuZ2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcoYS52YWx1'@;
put 'ZSksZD10aGlzLmRhdGVJT1NlcnZpY2UuZGlzYWJsZWREYXRlcy5taW5EYXRlLnRvRGF0ZSgpLGg9dGhpcy5kYXRlSU9TZXJ2aWNlLmRpc2FibGVkRGF0ZXMubWF4RGF0ZS50b0RhdGUoKTtpZihmJiZmPHRoaXMuZGF0ZUlPU2VydmljZS5kaXNhYmxlZERhdGVzLm1pbkRhdGUudG9EYXRlKCkp'@;
put 'cmV0dXJue21pbjp7bWluOmQudG9Mb2NhbGVEYXRlU3RyaW5nKCksYWN0dWFsOmYudG9Mb2NhbGVEYXRlU3RyaW5nKCl9fTtpZihmJiZmPnRoaXMuZGF0ZUlPU2VydmljZS5kaXNhYmxlZERhdGVzLm1heERhdGUudG9EYXRlKCkpcmV0dXJue21heDp7bWF4OmgudG9Mb2NhbGVEYXRlU3RyaW5n'@;
put 'KCksYWN0dWFsOmYudG9Mb2NhbGVEYXRlU3RyaW5nKCl9fX1yZXR1cm4gbnVsbH19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkocnQoZDcsOCkpfSxsLlx1MDI3NWRpcj1Tcih7dHlwZTpsLHNlbGVjdG9yczpbWyIiLCJjbHJEYXRlIiwiIl1dLGZlYXR1'@;
put 'cmVzOltyaShbe3Byb3ZpZGU6ZmMsdXNlRXhpc3Rpbmc6bCxtdWx0aTohMH1dKV19KSxsfSkoKSxMSGU9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3Rvcigpe2phLmFkZEljb25zKF8xLHcxLFp2LFdBZSxHQWUpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxs'@;
put 'KX0sbC5cdTAyNzVtb2Q9RGkoe3R5cGU6bH0pLGwuXHUwMjc1aW5qPXhpKHtpbXBvcnRzOltbYm8sUUQsQWYsbFMsbGwsSkQsSnVdXX0pLGx9KSgpO25ldyBNaSh2b2lkIDApO2xldCBISGU9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3Rvcigpe2phLmFkZEljb25zKCRBZSxLQWUsXzEsdzEpfX1y'@;
put 'ZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVtb2Q9RGkoe3R5cGU6bH0pLGwuXHUwMjc1aW5qPXhpKHtpbXBvcnRzOltbYm8sZGMsbGwsSnVdLEp1XX0pLGx9KSgpLEJVPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoKXt0aGlzLl9keW5h'@;
put 'bWljPSExfW5nT25Jbml0KCl7dGhpcy5sYWJlbCYmdGhpcy5sYWJlbC5kaXNhYmxlR3JpZCgpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVjbXA9a3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siY2xyLXJhZGlvLXdyYXBwZXIiXV0sY29u'@;
put 'dGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxmLGQpe2lmKDEmYSYmRm8oZCxlbCw3KSwyJmEpe2xldCBoO3VpKGg9Y2koKSkmJihmLmxhYmVsPWguZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxmKXsyJmEmJmdyKCJjbHItcmFkaW8td3JhcHBlciIsITApfSxmZWF0'@;
put 'dXJlczpbcmkoW1RmXSldLG5nQ29udGVudFNlbGVjdG9yczpHSWUsZGVjbHM6Myx2YXJzOjEsY29uc3RzOltbNCwibmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGYpezEmYSYmKFRpKFdJZSksRHIoMCksRHIoMSwxKSx0dCgyLFlJZSwxLDAsImxhYmVsIiwwKSksMiZhJiYoU2UoMiksUmUo'@;
put 'Im5nSWYiLCFmLmxhYmVsKSl9LGRlcGVuZGVuY2llczpbJGksZWxdLGVuY2Fwc3VsYXRpb246Mn0pLGx9KSgpLGpVPSgoKT0+e2NsYXNzIGwgZXh0ZW5kcyBhN3tjb25zdHJ1Y3RvcihhLGYsZCxoLG0pe3N1cGVyKGEsQlUsZixkLGgsbSl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihh'@;
put 'KXtyZXR1cm4gbmV3KGF8fGwpKHJ0KGZhKSxydChBbCkscnQocWMsMTApLHJ0KGpvKSxydChWaSkpfSxsLlx1MDI3NWRpcj1Tcih7dHlwZTpsLHNlbGVjdG9yczpbWyIiLCJjbHJSYWRpbyIsIiJdXSxmZWF0dXJlczpbcm9dfSksbH0pKCksTkhlPSgoKT0+e2NsYXNzIGwgZXh0ZW5kcyBvN3tj'@;
put 'b25zdHJ1Y3RvcihhLGYsZCxoKXtzdXBlcihoLGEsZixkKSx0aGlzLmxheW91dFNlcnZpY2U9YSx0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2U9Zix0aGlzLm5nQ29udHJvbFNlcnZpY2U9ZCx0aGlzLmlmQ29udHJvbFN0YXRlU2VydmljZT1oLHRoaXMuaW5saW5lPSExfWdldCBjbHJJbmxpbmUo'@;
put 'KXtyZXR1cm4gdGhpcy5pbmxpbmV9c2V0IGNscklubGluZShhKXt0aGlzLmlubGluZT0ic3RyaW5nIj09dHlwZW9mIGE/ImZhbHNlIiE9PWE6ISFhfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc2V0QXJpYVJvbGVzKCl9c2V0QXJpYVJvbGVzKCl7dGhpcy5yb2xlPXRoaXMucmFkaW9zLmxl'@;
put 'bmd0aD8iZ3JvdXAiOm51bGx9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHJ0KG4zLDgpLHJ0KERmKSxydChIMCkscnQoT2YpKX0sbC5cdTAyNzVjbXA9a3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siY2xyLXJhZGlvLWNvbnRhaW5lciJdXSxjb250ZW50'@;
put 'UXVlcmllczpmdW5jdGlvbihhLGYsZCl7aWYoMSZhJiZGbyhkLGpVLDUpLDImYSl7bGV0IGg7dWkoaD1jaSgpKSYmKGYucmFkaW9zPWgpfX0saG9zdFZhcnM6Nyxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxmKXsyJmEmJihScigicm9sZSIsZi5yb2xlKSxncigiY2xyLWZvcm0tY29udHJvbCIs'@;
put 'ITApKCJjbHItZm9ybS1jb250cm9sLWRpc2FibGVkIixudWxsPT1mLmNvbnRyb2w/bnVsbDpmLmNvbnRyb2wuZGlzYWJsZWQpKCJjbHItcm93IixmLmFkZEdyaWQoKSkpfSxpbnB1dHM6e2NscklubGluZToiY2xySW5saW5lIn0sZmVhdHVyZXM6W3JpKFtIMCxPZixEZixHZ10pLHJvXSxuZ0Nv'@;
put 'bnRlbnRTZWxlY3RvcnM6dFJlLGRlY2xzOjEwLHZhcnM6OSxjb25zdHM6W1s0LCJuZ0lmIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciIsMywibmdDbGFzcyJdLFsxLCJjbHItc3VidGV4dC13cmFwcGVyIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJleGNsYW1h'@;
put 'dGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxb'@;
put 'InNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdLFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFs'@;
put 'aWRhdGUtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGYpezEmYSYmKFRpKGVSZSksRHIoMCksdHQoMSwkSWUsMSwwLCJsYWJlbCIsMCkseWUoMiwiZGl2IiwxKSxEcigzLDEpLHllKDQsImRpdiIsMiksdHQoNSxLSWUsMSwwLCJuZy1jb250ZW50IiwwKSx0dCg2LHFJZSwxLDAsImNkcy1p'@;
put 'Y29uIiwzKSx0dCg3LFhJZSwxLDAsImNkcy1pY29uIiw0KSx0dCg4LEpJZSwxLDAsIm5nLWNvbnRlbnQiLDApLHR0KDksUUllLDEsMCwibmctY29udGVudCIsMCksQ2UoKSgpKSwyJmEmJihTZSgxKSxSZSgibmdJZiIsIWYubGFiZWwmJmYuYWRkR3JpZCgpKSxTZSgxKSxncigiY2xyLWNvbnRy'@;
put 'b2wtaW5saW5lIixmLmNscklubGluZSksUmUoIm5nQ2xhc3MiLGYuY29udHJvbENsYXNzKCkpLFNlKDMpLFJlKCJuZ0lmIixmLnNob3dIZWxwZXIpLFNlKDEpLFJlKCJuZ0lmIixmLnNob3dJbnZhbGlkKSxTZSgxKSxSZSgibmdJZiIsZi5zaG93VmFsaWQpLFNlKDEpLFJlKCJuZ0lmIixmLnNo'@;
put 'b3dJbnZhbGlkKSxTZSgxKSxSZSgibmdJZiIsZi5zaG93VmFsaWQpKX0sZGVwZW5kZW5jaWVzOlskaSxlbCx5dSxKYV0sZW5jYXBzdWxhdGlvbjoyfSksbH0pKCksVkhlPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoKXtqYS5hZGRJY29ucyhfMSx3MSl9fXJldHVybiBsLlx1MDI3NWZhYz1m'@;
put 'dW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NW1vZD1EaSh7dHlwZTpsfSksbC5cdTAyNzVpbmo9eGkoe2ltcG9ydHM6W1tibyxKdSxRRCxsbF0sSnVdfSksbH0pKCksQkhlPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoKXtqYS5hZGRJY29ucyhfMSx3MSl9fXJldHVybiBs'@;
put 'Llx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NW1vZD1EaSh7dHlwZTpsfSksbC5cdTAyNzVpbmo9eGkoe2ltcG9ydHM6W1tibyxKdSxRRCxsbF0sSnVdfSksbH0pKCkscDc9KCgpPT57Y2xhc3MgbCBleHRlbmRzIG83e2NvbnN0cnVjdG9yKGEsZixkLGgp'@;
put 'e3N1cGVyKGgsYSxmLGQpLHRoaXMubGF5b3V0U2VydmljZT1hLHRoaXMuY29udHJvbENsYXNzU2VydmljZT1mLHRoaXMubmdDb250cm9sU2VydmljZT1kLHRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPWgsdGhpcy5tdWx0aT0hMX1uZ09uSW5pdCgpe3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNo'@;
put 'KHRoaXMubmdDb250cm9sU2VydmljZS5jb250cm9sQ2hhbmdlcy5zdWJzY3JpYmUoYT0+e2EmJih0aGlzLm11bHRpPWEudmFsdWVBY2Nlc3NvciBpbnN0YW5jZW9mIEdDLHRoaXMuY29udHJvbD1hKX0pKX13cmFwcGVyQ2xhc3MoKXtyZXR1cm4gdGhpcy5tdWx0aT8iY2xyLW11bHRpc2VsZWN0'@;
put 'LXdyYXBwZXIiOiJjbHItc2VsZWN0LXdyYXBwZXIifX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChuMyw4KSxydChEZikscnQoSDApLHJ0KE9mKSl9LGwuXHUwMjc1Y21wPWtyKHt0eXBlOmwsc2VsZWN0b3JzOltbImNsci1zZWxlY3QtY29udGFp'@;
put 'bmVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZixkKXtpZigxJmEmJkZvKGQsR0MsNSksMiZhKXtsZXQgaDt1aShoPWNpKCkpJiYoZi5tdWx0aXBsZT1oLmZpcnN0KX19LGhvc3RWYXJzOjYsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZil7MiZhJiZncigiY2xyLWZvcm0tY29udHJv'@;
put 'bCIsITApKCJjbHItZm9ybS1jb250cm9sLWRpc2FibGVkIixudWxsPT1mLmNvbnRyb2w/bnVsbDpmLmNvbnRyb2wuZGlzYWJsZWQpKCJjbHItcm93IixmLmFkZEdyaWQoKSl9LGZlYXR1cmVzOltyaShbT2YsSDAsVGYsRGZdKSxyb10sbmdDb250ZW50U2VsZWN0b3JzOnVSZSxkZWNsczoxMCx2'@;
put 'YXJzOjgsY29uc3RzOltbNCwibmdJZiJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiLDMsIm5nQ2xhc3MiXSxbMywibmdDbGFzcyJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRk'@;
put 'ZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRh'@;
put 'bmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXSxbInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxmKXsxJmEm'@;
put 'JihUaShzUmUpLERyKDApLHR0KDEsblJlLDEsMCwibGFiZWwiLDApLHllKDIsImRpdiIsMSkoMywiZGl2IiwyKSxEcig0LDEpLHR0KDUsclJlLDEsMCwiY2RzLWljb24iLDMpLHR0KDYsaVJlLDEsMCwiY2RzLWljb24iLDQpLENlKCksdHQoNyxvUmUsMSwwLCJuZy1jb250ZW50IiwwKSx0dCg4'@;
put 'LGFSZSwxLDAsIm5nLWNvbnRlbnQiLDApLHR0KDksbFJlLDEsMCwibmctY29udGVudCIsMCksQ2UoKSksMiZhJiYoU2UoMSksUmUoIm5nSWYiLCFmLmxhYmVsJiZmLmFkZEdyaWQoKSksU2UoMSksUmUoIm5nQ2xhc3MiLGYuY29udHJvbENsYXNzKCkpLFNlKDEpLFJlKCJuZ0NsYXNzIixmLndy'@;
put 'YXBwZXJDbGFzcygpKSxTZSgyKSxSZSgibmdJZiIsZi5zaG93SW52YWxpZCksU2UoMSksUmUoIm5nSWYiLGYuc2hvd1ZhbGlkKSxTZSgxKSxSZSgibmdJZiIsZi5zaG93SGVscGVyKSxTZSgxKSxSZSgibmdJZiIsZi5zaG93SW52YWxpZCksU2UoMSksUmUoIm5nSWYiLGYuc2hvd1ZhbGlkKSl9'@;
put 'LGRlcGVuZGVuY2llczpbJGksZWwseXUsSmFdLGVuY2Fwc3VsYXRpb246Mn0pLGx9KSgpLG03PSgoKT0+e2NsYXNzIGwgZXh0ZW5kcyBhN3tjb25zdHJ1Y3RvcihhLGYsZCxoLG0pe3N1cGVyKGEscDcsZixkLGgsbSksdGhpcy5pbmRleD0xfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24o'@;
put 'YSl7cmV0dXJuIG5ldyhhfHxsKShydChmYSkscnQoQWwpLHJ0KHFjLDEwKSxydChqbykscnQoVmkpKX0sbC5cdTAyNzVkaXI9U3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siIiwiY2xyU2VsZWN0IiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZil7MiZhJiZncigiY2xy'@;
put 'LXNlbGVjdCIsITApfSxmZWF0dXJlczpbcm9dfSksbH0pKCksakhlPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoKXtqYS5hZGRJY29ucyhfMSx3MSl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NW1vZD1EaSh7dHlwZTpsfSksbC5c'@;
put 'dTAyNzVpbmo9eGkoe2ltcG9ydHM6W1tibyxkYyxsbCxKdV0sSnVdfSksbH0pKCksT3NlPSgoKT0+e2NsYXNzIGwgZXh0ZW5kcyBvN3t9cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IGM7cmV0dXJuIGZ1bmN0aW9uKGYpe3JldHVybihjfHwoYz14bChsKSkpKGZ8fGwpfX0oKSxs'@;
put 'Llx1MDI3NWNtcD1rcih7dHlwZTpsLHNlbGVjdG9yczpbWyJjbHItdGV4dGFyZWEtY29udGFpbmVyIl1dLGhvc3RWYXJzOjYsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZil7MiZhJiZncigiY2xyLWZvcm0tY29udHJvbCIsITApKCJjbHItZm9ybS1jb250cm9sLWRpc2FibGVkIixudWxsPT1m'@;
put 'LmNvbnRyb2w/bnVsbDpmLmNvbnRyb2wuZGlzYWJsZWQpKCJjbHItcm93IixmLmFkZEdyaWQoKSl9LGZlYXR1cmVzOltyaShbT2YsSDAsVGYsRGZdKSxyb10sbmdDb250ZW50U2VsZWN0b3JzOnZSZSxkZWNsczoxMCx2YXJzOjcsY29uc3RzOltbNCwibmdJZiJdLFsxLCJjbHItY29udHJvbC1j'@;
put 'b250YWluZXIiLDMsIm5nQ2xhc3MiXSxbMSwiY2xyLXRleHRhcmVhLXdyYXBwZXIiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3Mi'@;
put 'LCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEs'@;
put 'ImNsci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZil7MSZhJiYoVGkoZ1JlKSxEcigwKSx0dCgxLGNSZSwxLDAs'@;
put 'ImxhYmVsIiwwKSx5ZSgyLCJkaXYiLDEpKDMsImRpdiIsMiksRHIoNCwxKSx0dCg1LGZSZSwxLDAsImNkcy1pY29uIiwzKSx0dCg2LGRSZSwxLDAsImNkcy1pY29uIiw0KSxDZSgpLHR0KDcsaFJlLDEsMCwibmctY29udGVudCIsMCksdHQoOCxwUmUsMSwwLCJuZy1jb250ZW50IiwwKSx0dCg5'@;
put 'LG1SZSwxLDAsIm5nLWNvbnRlbnQiLDApLENlKCkpLDImYSYmKFNlKDEpLFJlKCJuZ0lmIiwhZi5sYWJlbCYmZi5hZGRHcmlkKCkpLFNlKDEpLFJlKCJuZ0NsYXNzIixmLmNvbnRyb2xDbGFzcygpKSxTZSgzKSxSZSgibmdJZiIsZi5zaG93SW52YWxpZCksU2UoMSksUmUoIm5nSWYiLGYuc2hv'@;
put 'd1ZhbGlkKSxTZSgxKSxSZSgibmdJZiIsZi5zaG93SGVscGVyKSxTZSgxKSxSZSgibmdJZiIsZi5zaG93SW52YWxpZCksU2UoMSksUmUoIm5nSWYiLGYuc2hvd1ZhbGlkKSl9LGRlcGVuZGVuY2llczpbJGksZWwseXUsSmFdLGVuY2Fwc3VsYXRpb246Mn0pLGx9KSgpLHpIZT0oKCk9PntjbGFz'@;
put 'cyBsIGV4dGVuZHMgYTd7Y29uc3RydWN0b3IoYSxmLGQsaCxtKXtzdXBlcihhLE9zZSxmLGQsaCxtKSx0aGlzLmluZGV4PTF9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHJ0KGZhKSxydChBbCkscnQocWMsMTApLHJ0KGpvKSxydChWaSkpfSxsLlx1'@;
put 'MDI3NWRpcj1Tcih7dHlwZTpsLHNlbGVjdG9yczpbWyIiLCJjbHJUZXh0YXJlYSIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGYpezImYSYmZ3IoImNsci10ZXh0YXJlYSIsITApfSxmZWF0dXJlczpbcm9dfSksbH0pKCksVUhlPSgoKT0+e2NsYXNzIGx7Y29uc3Ry'@;
put 'dWN0b3IoKXtqYS5hZGRJY29ucyhfMSx3MSl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NW1vZD1EaSh7dHlwZTpsfSksbC5cdTAyNzVpbmo9eGkoe2ltcG9ydHM6W1tibyxkYyxsbCxKdV0sSnVdfSksbH0pKCksRHNlPSgoKT0+e2Ns'@;
put 'YXNzIGx7fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NW1vZD1EaSh7dHlwZTpsfSksbC5cdTAyNzVpbmo9eGkoe2ltcG9ydHM6W1tib10sSnUsZEhlLHZIZSxMSGUsX3NlLEhIZSxWSGUsakhlLFVIZSxCSGUseUhlXX0pLGx9KSgpLElz'@;
put 'ZT0oKCk9PntjbGFzcyBse31yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVtb2Q9RGkoe3R5cGU6bH0pLGwuXHUwMjc1aW5qPXhpKHtpbXBvcnRzOltbYm9dXX0pLGx9KSgpLFpIZT0oKCk9PntjbGFzcyBse31yZXR1cm4gbC5cdTAyNzVm'@;
put 'YWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVtb2Q9RGkoe3R5cGU6bH0pLGwuXHUwMjc1aW5qPXhpKHtpbXBvcnRzOltbYm9dXX0pLGx9KSgpO2NsYXNzIGlJe31sZXQgZ1M9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3Rvcigpe3RoaXMubmJDaGFuZ2VzPTAsdGhpcy5f'@;
put 'Y2hhbmdlPW5ldyB3ZX1nZXQgY2hhbmdlKCl7cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09ic2VydmFibGUoKX1jaGFuZ2VTdGFydCgpe3RoaXMubmJDaGFuZ2VzKyt9Y2hhbmdlRG9uZSgpezA9PS0tdGhpcy5uYkNoYW5nZXMmJnRoaXMuX2NoYW5nZS5uZXh0KCl9fXJldHVybiBsLlx1MDI3NWZh'@;
put 'Yz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmwsZmFjdG9yeTpsLlx1MDI3NWZhY30pLGx9KSgpLHk0PSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSl7dGhpcy5zdGF0ZURlYm91bmNlcj1hLHRoaXMuYWN0aXZhdGVkPSExLHRoaXMuX3Np'@;
put 'emU9MCx0aGlzLl9jdXJyZW50PTEsdGhpcy5fY2hhbmdlPW5ldyB3ZSx0aGlzLnByZXZlbnRFbWl0PSExLHRoaXMuX3NpemVDaGFuZ2U9bmV3IHdlfWdldCBzaXplKCl7cmV0dXJuIHRoaXMuX3NpemV9c2V0IHNpemUoYSl7Y29uc3QgZj10aGlzLl9zaXplO2EhPT1mJiYodGhpcy5wcmV2ZW50'@;
put 'RW1pdHx8dGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VTdGFydCgpLHRoaXMuX3NpemU9YSx0aGlzLl9jdXJyZW50PTA9PT1hPzE6TWF0aC5mbG9vcihmL2EqKHRoaXMuX2N1cnJlbnQtMSkpKzEsdGhpcy5wcmV2ZW50RW1pdHx8KHRoaXMuX2NoYW5nZS5uZXh0KHRoaXMuX2N1cnJlbnQpLHRo'@;
put 'aXMuX3NpemVDaGFuZ2UubmV4dCh0aGlzLl9zaXplKSx0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZURvbmUoKSkpLHRoaXMucHJldmVudEVtaXQ9ITF9Z2V0IHRvdGFsSXRlbXMoKXtyZXR1cm4gdGhpcy5fdG90YWxJdGVtc3x8MH1zZXQgdG90YWxJdGVtcyhhKXt0aGlzLl90b3RhbEl0ZW1z'@;
put 'PWEsdGhpcy5jdXJyZW50PnRoaXMubGFzdCYmKHRoaXMuY3VycmVudD10aGlzLmxhc3QpfWdldCBsYXN0KCl7cmV0dXJuIHRoaXMuX2xhc3Q/dGhpcy5fbGFzdDp0aGlzLnNpemU+MCYmdGhpcy50b3RhbEl0ZW1zP01hdGguY2VpbCh0aGlzLnRvdGFsSXRlbXMvdGhpcy5zaXplKToxfXNldCBs'@;
put 'YXN0KGEpe3RoaXMuX2xhc3Q9YX1nZXQgY2hhbmdlKCl7cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgc2l6ZUNoYW5nZSgpe3JldHVybiB0aGlzLl9zaXplQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBjdXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9c2V0IGN1'@;
put 'cnJlbnQoYSl7YSE9PXRoaXMuX2N1cnJlbnQmJih0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZVN0YXJ0KCksdGhpcy5fY3VycmVudD1hLHRoaXMuX2NoYW5nZS5uZXh0KGEpLHRoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlRG9uZSgpKX1nZXQgZmlyc3RJdGVtKCl7cmV0dXJuIDA9PT10aGlz'@;
put 'Ll90b3RhbEl0ZW1zPy0xOjA9PT10aGlzLnNpemU/MDoodGhpcy5jdXJyZW50LTEpKnRoaXMuc2l6ZX1nZXQgbGFzdEl0ZW0oKXtpZigwPT09dGhpcy5fdG90YWxJdGVtcylyZXR1cm4tMTtpZigwPT09dGhpcy5zaXplKXJldHVybiB0aGlzLnRvdGFsSXRlbXMtMTtsZXQgYT10aGlzLmN1cnJl'@;
put 'bnQqdGhpcy5zaXplLTE7cmV0dXJuIHRoaXMudG90YWxJdGVtcyYmKGE9TWF0aC5taW4oYSx0aGlzLnRvdGFsSXRlbXMtMSkpLGF9cHJldmlvdXMoKXt0aGlzLmN1cnJlbnQ+MSYmdGhpcy5jdXJyZW50LS19bmV4dCgpe3RoaXMuY3VycmVudDx0aGlzLmxhc3QmJnRoaXMuY3VycmVudCsrfXJl'@;
put 'c2V0UGFnZVNpemUoYT0hMSl7dGhpcy5wcmV2ZW50RW1pdD1hLHRoaXMuc2l6ZT0wfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShzcihnUykpfSxsLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmwsZmFjdG9yeTpsLlx1MDI3NWZhY30pLGx9KSgpLGkzPSgo'@;
put 'KT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmKXt0aGlzLl9wYWdlPWEsdGhpcy5zdGF0ZURlYm91bmNlcj1mLHRoaXMuX2NoYW5nZT1uZXcgd2UsdGhpcy5fYWxsPVtdfWdldCBjaGFuZ2UoKXtyZXR1cm4gdGhpcy5fY2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWhhc0FjdGl2ZUZpbHRlcnMoKXtm'@;
put 'b3IoY29uc3R7ZmlsdGVyOmF9b2YgdGhpcy5fYWxsKWlmKGEmJmEuaXNBY3RpdmUoKSlyZXR1cm4hMDtyZXR1cm4hMX1nZXRBY3RpdmVGaWx0ZXJzKCl7Y29uc3QgYT1bXTtmb3IoY29uc3R7ZmlsdGVyOmZ9b2YgdGhpcy5fYWxsKWYmJmYuaXNBY3RpdmUoKSYmYS5wdXNoKGYpO3JldHVybiBh'@;
put 'fWFkZChhKXtjb25zdCBmPWEuY2hhbmdlcy5zdWJzY3JpYmUoKCk9PnRoaXMucmVzZXRQYWdlQW5kRW1pdEZpbHRlckNoYW5nZShbYV0pKTtsZXQgZD0hMTtjb25zdCBoPW5ldyBvSShhLCgpPT57aWYoZClyZXR1cm47Zi51bnN1YnNjcmliZSgpO2NvbnN0IG09dGhpcy5fYWxsLmZpbmRJbmRl'@;
put 'eChfPT5fLmZpbHRlcj09PWEpO20+PTAmJnRoaXMuX2FsbC5zcGxpY2UobSwxKSxhLmlzQWN0aXZlKCkmJnRoaXMucmVzZXRQYWdlQW5kRW1pdEZpbHRlckNoYW5nZShbXSksZD0hMH0pO3JldHVybiB0aGlzLl9hbGwucHVzaChoKSxhLmlzQWN0aXZlKCkmJnRoaXMucmVzZXRQYWdlQW5kRW1p'@;
put 'dEZpbHRlckNoYW5nZShbYV0pLGh9YWNjZXB0cyhhKXtmb3IoY29uc3R7ZmlsdGVyOmZ9b2YgdGhpcy5fYWxsKWlmKGYmJmYuaXNBY3RpdmUoKSYmIWYuYWNjZXB0cyhhKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXNldFBhZ2VBbmRFbWl0RmlsdGVyQ2hhbmdlKGEpe3RoaXMuc3RhdGVEZWJvdW5j'@;
put 'ZXIuY2hhbmdlU3RhcnQoKSx0aGlzLl9wYWdlLmN1cnJlbnQ9MSx0aGlzLl9jaGFuZ2UubmV4dChhKSx0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZURvbmUoKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkoc3IoeTQpLHNyKGdTKSl9LGwuXHUwMjc1'@;
put 'cHJvdj1ocih7dG9rZW46bCxmYWN0b3J5OmwuXHUwMjc1ZmFjfSksbH0pKCk7Y2xhc3Mgb0l7Y29uc3RydWN0b3IoYyxhKXt0aGlzLmZpbHRlcj1jLHRoaXMudW5yZWdpc3Rlcj1hfX1sZXQgYUk9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhKXt0aGlzLmZpbHRlcnM9YX1nZXQgZmlsdGVy'@;
put 'KCl7cmV0dXJuIHRoaXMucmVnaXN0ZXJlZCYmdGhpcy5yZWdpc3RlcmVkLmZpbHRlcn1uZ09uRGVzdHJveSgpe3RoaXMuZGVsZXRlRmlsdGVyKCl9c2V0RmlsdGVyKGEpe3RoaXMuZGVsZXRlRmlsdGVyKCksYSBpbnN0YW5jZW9mIG9JP3RoaXMucmVnaXN0ZXJlZD1hOmEmJih0aGlzLnJlZ2lz'@;
put 'dGVyZWQ9dGhpcy5maWx0ZXJzLmFkZChhKSl9ZGVsZXRlRmlsdGVyKCl7dGhpcy5yZWdpc3RlcmVkJiYodGhpcy5yZWdpc3RlcmVkLnVucmVnaXN0ZXIoKSxkZWxldGUgdGhpcy5yZWdpc3RlcmVkKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkocnQo'@;
put 'aTMpKX0sbC5cdTAyNzVkaXI9U3Ioe3R5cGU6bH0pLGx9KSgpLHZTPSgoKT0+e2NsYXNzIGwgZXh0ZW5kcyBhSXtjb25zdHJ1Y3RvcihhLGYsZCxoLG0pe3N1cGVyKGEpLHRoaXMuY29tbW9uU3RyaW5ncz1mLHRoaXMuc21hcnRUb2dnbGVTZXJ2aWNlPWQsdGhpcy5wbGF0Zm9ybUlkPWgsdGhp'@;
put 'cy5lbGVtZW50UmVmPW0sdGhpcy5vcGVuQ2hhbmdlPW5ldyB4cighMSksdGhpcy5hcmlhRXhwYW5kZWQ9ITEsdGhpcy5wb3BvdmVySWQ9SHUoKSx0aGlzLnNtYXJ0UG9zaXRpb249e2F4aXM6U2MuVkVSVElDQUwsc2lkZTp4Zi5BRlRFUixhbmNob3I6TmEuRU5ELGNvbnRlbnQ6TmEuRU5EfSx0'@;
put 'aGlzLl9vcGVuPSExLHRoaXMuc3Vicz1bXSx0aGlzLnN1YnMucHVzaChkLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKF89Pnt0aGlzLm9wZW49Xyx0aGlzLmFyaWFFeHBhbmRlZD1ffSkpfWdldCBvcGVuKCl7cmV0dXJuIHRoaXMuX29wZW59c2V0IG9wZW4oYSl7dGhpcy5vcGVuIT09KGE9ISFhKSYm'@;
put 'KHRoaXMuc21hcnRUb2dnbGVTZXJ2aWNlLm9wZW49YSx0aGlzLm9wZW5DaGFuZ2UuZW1pdChhKSwhYSYmSGEodGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy5hbmNob3IubmF0aXZlRWxlbWVudC5mb2N1cygpLHRoaXMuX29wZW49YSl9c2V0IGN1c3RvbUZpbHRlcihhKXt0aGlzLnNldEZpbHRlcihh'@;
put 'KX1nZXQgYWN0aXZlKCl7cmV0dXJuISF0aGlzLmZpbHRlciYmdGhpcy5maWx0ZXIuaXNBY3RpdmUoKX1uZ09uQ2hhbmdlcygpe3RoaXMuc2V0VG9nZ2xlQnV0dG9uQXJpYUxhYmVsKCl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuc3Vicy5mb3JFYWNoKGE9PmEudW5z'@;
put 'dWJzY3JpYmUoKSl9c2V0VG9nZ2xlQnV0dG9uQXJpYUxhYmVsKCl7Y29uc3QgZD10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudD8uY2xvc2VzdCgiY2xyLWRnLWNvbHVtbiIpPy5xdWVyeVNlbGVjdG9yKCIuZGF0YWdyaWQtY29sdW1uLXRpdGxlIik/LnRleHRDb250ZW50LnRyaW0oKS50'@;
put 'b0xvY2FsZUxvd2VyQ2FzZSgpO3RoaXMudG9nZ2xlQnV0dG9uQXJpYUxhYmVsPXRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRhZ3JpZEZpbHRlckFyaWFMYWJlbCx7Q09MVU1OOmR8fCIifSl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihh'@;
put 'KXtyZXR1cm4gbmV3KGF8fGwpKHJ0KGkzKSxydChUYSkscnQoUWEpLHJ0KHFhKSxydChWaSkpfSxsLlx1MDI3NWNtcD1rcih7dHlwZTpsLHNlbGVjdG9yczpbWyJjbHItZGctZmlsdGVyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGYpe2lmKDEmYSYmTm8oeVJlLDUsVmkpLDImYSl7bGV0IGQ7'@;
put 'dWkoZD1jaSgpKSYmKGYuYW5jaG9yPWQuZmlyc3QpfX0saW5wdXRzOntvcGVuOlsiY2xyRGdGaWx0ZXJPcGVuIiwib3BlbiJdLGN1c3RvbUZpbHRlcjpbImNsckRnRmlsdGVyIiwiY3VzdG9tRmlsdGVyIl19LG91dHB1dHM6e29wZW5DaGFuZ2U6ImNsckRnRmlsdGVyT3BlbkNoYW5nZSJ9LGZl'@;
put 'YXR1cmVzOltyaShbe3Byb3ZpZGU6aUksdXNlRXhpc3Rpbmc6bH1dKSxybyxibF0sbmdDb250ZW50U2VsZWN0b3JzOk9vLGRlY2xzOjQsdmFyczoxMyxjb25zdHM6W1sidHlwZSIsImJ1dHRvbiIsImNsclBvcG92ZXJBbmNob3IiLCIiLCJjbHJQb3BvdmVyT3BlbkNsb3NlQnV0dG9uIiwiIiwx'@;
put 'LCJkYXRhZ3JpZC1maWx0ZXItdG9nZ2xlIl0sWyJhbmNob3IiLCIiXSxbInNvbGlkIiwiIl0sWyJjbGFzcyIsImRhdGFncmlkLWZpbHRlciIsImNsckZvY3VzVHJhcCIsIiIsInJvbGUiLCJkaWFsb2ciLDMsImlkIiw0LCJjbHJQb3BvdmVyQ29udGVudCIsImNsclBvcG92ZXJDb250ZW50QXQi'@;
put 'LCJjbHJQb3BvdmVyQ29udGVudE91dHNpZGVDbGlja1RvQ2xvc2UiLCJjbHJQb3BvdmVyQ29udGVudFNjcm9sbFRvQ2xvc2UiXSxbImNsckZvY3VzVHJhcCIsIiIsInJvbGUiLCJkaWFsb2ciLDEsImRhdGFncmlkLWZpbHRlciIsMywiaWQiXSxbMSwiZGF0YWdyaWQtZmlsdGVyLWNsb3NlLXdy'@;
put 'YXBwZXIiXSxbInR5cGUiLCJidXR0b24iLCJjbHJQb3BvdmVyQ2xvc2VCdXR0b24iLCIiLDEsImNsb3NlIl0sWyJzaGFwZSIsIndpbmRvdy1jbG9zZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGYpezEmYSYmKFRpKCkseWUoMCwiYnV0dG9uIiwwLDEpLHRuKDIsImNkcy1pY29uIiwyKSxDZSgp'@;
put 'LHR0KDMsYlJlLDUsMywiZGl2IiwzKSksMiZhJiYoZ3IoImRhdGFncmlkLWZpbHRlci1vcGVuIixmLm9wZW4pKCJkYXRhZ3JpZC1maWx0ZXJlZCIsZi5hY3RpdmUpLFJyKCJhcmlhLWxhYmVsIixmLnRvZ2dsZUJ1dHRvbkFyaWFMYWJlbCkoImFyaWEtZXhwYW5kZWQiLGYuYXJpYUV4cGFuZGVk'@;
put 'KSgiYXJpYS1jb250cm9scyIsZi5wb3BvdmVySWQpLFNlKDIpLFJyKCJzdGF0dXMiLGYuYWN0aXZlPyJpbmZvIjpudWxsKSgic2hhcGUiLGYuYWN0aXZlPyJmaWx0ZXItZ3JpZC1jaXJjbGUiOiJmaWx0ZXItZ3JpZCIpLFNlKDEpLFJlKCJjbHJQb3BvdmVyQ29udGVudCIsZi5vcGVuKSgiY2xy'@;
put 'UG9wb3ZlckNvbnRlbnRBdCIsZi5zbWFydFBvc2l0aW9uKSgiY2xyUG9wb3ZlckNvbnRlbnRPdXRzaWRlQ2xpY2tUb0Nsb3NlIiwhMCkoImNsclBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9zZSIsITApKX0sZGVwZW5kZW5jaWVzOltyUyxhUyxKYSxvUyxnNCxuc2VdLGVuY2Fwc3VsYXRpb246'@;
put 'Mn0pLGx9KSgpO2NsYXNzIHpVe2NvbnN0cnVjdG9yKGMpe3RoaXMucHJvcD1jLGMuaW5kZXhPZigiLiIpPj0wJiYodGhpcy5zcGxpdFByb3A9Yy5zcGxpdCgiLiIpKX1nZXRQcm9wVmFsdWUoYyl7aWYodGhpcy5zcGxpdFByb3Ape2xldCBhPWM7Zm9yKGNvbnN0IGYgb2YgdGhpcy5zcGxpdFBy'@;
put 'b3Ape2lmKG51bGw9PT1hfHx0eXBlb2YgYT4idSJ8fHR5cGVvZiBhW2ZdPiJ1IilyZXR1cm47YT1hW2ZdfXJldHVybiBhfXJldHVybiBjW3RoaXMucHJvcF19fWNsYXNzIGxJe2NvbnN0cnVjdG9yKGMsYT0hMSl7dGhpcy5wcm9wPWMsdGhpcy5leGFjdD1hLHRoaXMubmVzdGVkUHJvcD1uZXcg'@;
put 'elUoYyl9YWNjZXB0cyhjLGEsZil7Y29uc3QgZD10aGlzLm5lc3RlZFByb3AuZ2V0UHJvcFZhbHVlKGMpO3JldHVybiEodm9pZCAwPT09ZHx8bnVsbCE9PWEmJigibnVtYmVyIiE9dHlwZW9mIGR8fGQ8YSl8fG51bGwhPT1mJiYoIm51bWJlciIhPXR5cGVvZiBkfHxkPmYpKX19Y2xhc3MgS2d7'@;
put 'Y29uc3RydWN0b3IoYyl7dGhpcy5maWx0ZXJGbj1jLHRoaXMuX2NoYW5nZXM9bmV3IHdlLHRoaXMuX2xvdz1udWxsLHRoaXMuX2hpZ2g9bnVsbH1nZXQgY2hhbmdlcygpe3JldHVybiB0aGlzLl9jaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpfWdldCB2YWx1ZSgpe3JldHVyblt0aGlzLl9sb3csdGhp'@;
put 'cy5faGlnaF19c2V0IHZhbHVlKGMpe2NvbnN0IGE9Y1swXSxmPWNbMV07KGEhPT10aGlzLl9sb3d8fGYhPT10aGlzLl9oaWdoKSYmKHRoaXMuX2xvdz1hLHRoaXMuX2hpZ2g9Zix0aGlzLl9jaGFuZ2VzLm5leHQoW3RoaXMuX2xvdyx0aGlzLl9oaWdoXSkpfWdldCBsb3coKXtyZXR1cm4gdGhp'@;
put 'cy5fbG93fXNldCBsb3coYyl7YyE9PXRoaXMuX2xvdyYmKHRoaXMuX2xvdz1jLHRoaXMuX2NoYW5nZXMubmV4dChbdGhpcy5fbG93LHRoaXMuX2hpZ2hdKSl9Z2V0IGhpZ2goKXtyZXR1cm4gdGhpcy5faGlnaH1zZXQgaGlnaChjKXtjIT09dGhpcy5faGlnaCYmKHRoaXMuX2hpZ2g9Yyx0aGlz'@;
put 'Ll9jaGFuZ2VzLm5leHQoW3RoaXMuX2xvdyx0aGlzLl9oaWdoXSkpfWdldCBzdGF0ZSgpe3JldHVybiB0aGlzLmZpbHRlckZuIGluc3RhbmNlb2YgbEk/e3Byb3BlcnR5OnRoaXMuZmlsdGVyRm4ucHJvcCxsb3c6dGhpcy5fbG93LGhpZ2g6dGhpcy5faGlnaH06dGhpc31pc0FjdGl2ZSgpe3Jl'@;
put 'dHVybiBudWxsIT09dGhpcy5fbG93fHxudWxsIT09dGhpcy5oaWdofWFjY2VwdHMoYyl7cmV0dXJuIHRoaXMuZmlsdGVyRm4uYWNjZXB0cyhjLHRoaXMuX2xvdyx0aGlzLl9oaWdoKX1lcXVhbHMoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBLZyYmKGMuZmlsdGVyRm4gaW5zdGFuY2VvZiBsST90'@;
put 'aGlzLmZpbHRlckZuIGluc3RhbmNlb2YgbEkmJmMuZmlsdGVyRm4ucHJvcD09PXRoaXMuZmlsdGVyRm4ucHJvcCYmYy5sb3c9PT10aGlzLl9sb3cmJmMuaGlnaD09PXRoaXMuX2hpZ2g6Yz09PXRoaXMpfX1sZXQgUnNlPSgoKT0+e2NsYXNzIGwgZXh0ZW5kcyBhSXtjb25zdHJ1Y3RvcihhLGYs'@;
put 'ZCxoLG0pe3N1cGVyKGEpLHRoaXMuZG9tQWRhcHRlcj1mLHRoaXMuY29tbW9uU3RyaW5ncz1kLHRoaXMucG9wb3ZlclRvZ2dsZVNlcnZpY2U9aCx0aGlzLm5nWm9uZT1tLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2U9bmV3IHhyLHRoaXMub3Blbj0hMSx0aGlzLnN1YnNjcmlwdGlvbnM9W119Z2V0'@;
put 'IHZhbHVlKCl7cmV0dXJuW3RoaXMuZmlsdGVyLmxvdyx0aGlzLmZpbHRlci5oaWdoXX1zZXQgdmFsdWUoYSl7dGhpcy5maWx0ZXImJkFycmF5LmlzQXJyYXkoYSk/YSYmKGFbMF0hPT10aGlzLmZpbHRlci5sb3d8fGFbMV0hPT10aGlzLmZpbHRlci5oaWdoKSYmKHRoaXMuZmlsdGVyLmxvdz0i'@;
put 'bnVtYmVyIj09dHlwZW9mIGFbMF0/YVswXTpudWxsLHRoaXMuZmlsdGVyLmhpZ2g9Im51bWJlciI9PXR5cGVvZiBhWzFdP2FbMV06bnVsbCx0aGlzLmZpbHRlclZhbHVlQ2hhbmdlLmVtaXQoYSkpOnRoaXMuaW5pdEZpbHRlclZhbHVlcz1hfXNldCBjdXN0b21OdW1lcmljRmlsdGVyKGEpe3Ro'@;
put 'aXMuc2V0RmlsdGVyKGEgaW5zdGFuY2VvZiBvST9hOm5ldyBLZyhhKSksdGhpcy5pbml0RmlsdGVyVmFsdWVzJiYodGhpcy52YWx1ZT10aGlzLmluaXRGaWx0ZXJWYWx1ZXMsZGVsZXRlIHRoaXMuaW5pdEZpbHRlclZhbHVlcyl9Z2V0IG1heFBsYWNlaG9sZGVyVmFsdWUoKXtyZXR1cm4gdGhp'@;
put 'cy5tYXhQbGFjZWhvbGRlcnx8dGhpcy5jb21tb25TdHJpbmdzLmtleXMubWF4VmFsdWV9Z2V0IG1pblBsYWNlaG9sZGVyVmFsdWUoKXtyZXR1cm4gdGhpcy5taW5QbGFjZWhvbGRlcnx8dGhpcy5jb21tb25TdHJpbmdzLmtleXMubWluVmFsdWV9Z2V0IGxvdygpe3JldHVybiJudW1iZXIiPT10'@;
put 'eXBlb2YgdGhpcy5maWx0ZXIubG93JiZpc0Zpbml0ZSh0aGlzLmZpbHRlci5sb3cpP3RoaXMuZmlsdGVyLmxvdzpudWxsfXNldCBsb3coYSl7Im51bWJlciI9PXR5cGVvZiBhJiZhIT09dGhpcy5maWx0ZXIubG93Pyh0aGlzLmZpbHRlci5sb3c9YSx0aGlzLmZpbHRlclZhbHVlQ2hhbmdlLmVt'@;
put 'aXQoW3RoaXMuZmlsdGVyLmxvdyx0aGlzLmZpbHRlci5oaWdoXSkpOiJudW1iZXIiIT10eXBlb2YgYSYmKHRoaXMuZmlsdGVyLmxvdz1udWxsLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChbdGhpcy5maWx0ZXIubG93LHRoaXMuZmlsdGVyLmhpZ2hdKSl9Z2V0IGhpZ2goKXtyZXR1cm4i'@;
put 'bnVtYmVyIj09dHlwZW9mIHRoaXMuZmlsdGVyLmhpZ2gmJmlzRmluaXRlKHRoaXMuZmlsdGVyLmhpZ2gpP3RoaXMuZmlsdGVyLmhpZ2g6bnVsbH1zZXQgaGlnaChhKXsibnVtYmVyIj09dHlwZW9mIGEmJmEhPT10aGlzLmZpbHRlci5oaWdoPyh0aGlzLmZpbHRlci5oaWdoPWEsdGhpcy5maWx0'@;
put 'ZXJWYWx1ZUNoYW5nZS5lbWl0KFt0aGlzLmZpbHRlci5sb3csdGhpcy5maWx0ZXIuaGlnaF0pKToibnVtYmVyIiE9dHlwZW9mIGEmJih0aGlzLmZpbHRlci5oaWdoPW51bGwsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KFt0aGlzLmZpbHRlci5sb3csdGhpcy5maWx0ZXIuaGlnaF0pKX1u'@;
put 'Z0FmdGVyVmlld0luaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnBvcG92ZXJUb2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLm9wZW49YSx0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+'@;
put 'e3RoaXMuZG9tQWRhcHRlci5mb2N1cyh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQpfSl9KX0pKX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+e2EudW5zdWJzY3JpYmUoKX0pfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rp'@;
put 'b24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChpMykscnQoeDEpLHJ0KFRhKSxydChRYSkscnQoVW8pKX0sbC5cdTAyNzVjbXA9a3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siY2xyLWRnLW51bWVyaWMtZmlsdGVyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGYpe2lmKDEmYSYmKE5vKF9SZSw1KSxO'@;
put 'byh2Uyw1KSksMiZhKXtsZXQgZDt1aShkPWNpKCkpJiYoZi5pbnB1dD1kLmZpcnN0KSx1aShkPWNpKCkpJiYoZi5maWx0ZXJDb250YWluZXI9ZC5maXJzdCl9fSxpbnB1dHM6e21pblBsYWNlaG9sZGVyOlsiY2xyRmlsdGVyTWluUGxhY2Vob2xkZXIiLCJtaW5QbGFjZWhvbGRlciJdLG1heFBs'@;
put 'YWNlaG9sZGVyOlsiY2xyRmlsdGVyTWF4UGxhY2Vob2xkZXIiLCJtYXhQbGFjZWhvbGRlciJdLHZhbHVlOlsiY2xyRmlsdGVyVmFsdWUiLCJ2YWx1ZSJdLGN1c3RvbU51bWVyaWNGaWx0ZXI6WyJjbHJEZ051bWVyaWNGaWx0ZXIiLCJjdXN0b21OdW1lcmljRmlsdGVyIl19LG91dHB1dHM6e2Zp'@;
put 'bHRlclZhbHVlQ2hhbmdlOiJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSJ9LGZlYXR1cmVzOltyaShbe3Byb3ZpZGU6aUksdXNlRXhpc3Rpbmc6bH1dKSxyb10sZGVjbHM6Nix2YXJzOjgsY29uc3RzOltbMywiY2xyRGdGaWx0ZXIiLCJjbHJEZ0ZpbHRlck9wZW4iLCJjbHJEZ0ZpbHRlck9wZW5DaGFu'@;
put 'Z2UiXSxbInR5cGUiLCJudW1iZXIiLCJhdXRvY29tcGxldGUiLCJvZmYiLCJuYW1lIiwibG93IiwxLCJkYXRhZ3JpZC1udW1lcmljLWZpbHRlci1pbnB1dCIsMywibmdNb2RlbCIsInBsYWNlaG9sZGVyIiwibmdNb2RlbENoYW5nZSJdLFsiaW5wdXRfbG93IiwiIl0sWzEsImRhdGFncmlkLWZp'@;
put 'bHRlci1pbnB1dC1zcGFjZXIiXSxbInR5cGUiLCJudW1iZXIiLCJhdXRvY29tcGxldGUiLCJvZmYiLCJuYW1lIiwiaGlnaCIsMSwiZGF0YWdyaWQtbnVtZXJpYy1maWx0ZXItaW5wdXQiLDMsIm5nTW9kZWwiLCJwbGFjZWhvbGRlciIsIm5nTW9kZWxDaGFuZ2UiXSxbImlucHV0X2hpZ2giLCIi'@;
put 'XV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxmKXsxJmEmJih5ZSgwLCJjbHItZGctZmlsdGVyIiwwKSxFdCgiY2xyRGdGaWx0ZXJPcGVuQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gZi5vcGVuPWh9KSx5ZSgxLCJpbnB1dCIsMSwyKSxFdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0'@;
put 'dXJuIGYubG93PWh9KSxDZSgpLHRuKDMsInNwYW4iLDMpLHllKDQsImlucHV0Iiw0LDUpLEV0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gZi5oaWdoPWh9KSxDZSgpKCkpLDImYSYmKFJlKCJjbHJEZ0ZpbHRlciIsZi5yZWdpc3RlcmVkKSgiY2xyRGdGaWx0ZXJPcGVuIixm'@;
put 'Lm9wZW4pLFNlKDEpLFJlKCJuZ01vZGVsIixmLmxvdykoInBsYWNlaG9sZGVyIixmLm1pblBsYWNlaG9sZGVyVmFsdWUpLFJyKCJhcmlhLWxhYmVsIixmLm1pblBsYWNlaG9sZGVyVmFsdWUpLFNlKDMpLFJlKCJuZ01vZGVsIixmLmhpZ2gpKCJwbGFjZWhvbGRlciIsZi5tYXhQbGFjZWhvbGRl'@;
put 'clZhbHVlKSxScigiYXJpYS1sYWJlbCIsZi5tYXhQbGFjZWhvbGRlclZhbHVlKSl9LGRlcGVuZGVuY2llczpbdlMsVkQsaXMsV2EsemFdLGVuY2Fwc3VsYXRpb246Mn0pLGx9KSgpO2NsYXNzIHNJe2NvbnN0cnVjdG9yKGMsYT0hMSl7dGhpcy5wcm9wPWMsdGhpcy5leGFjdD1hLHRoaXMubmVz'@;
put 'dGVkUHJvcD1uZXcgelUoYyl9YWNjZXB0cyhjLGEpe2NvbnN0IGY9dGhpcy5uZXN0ZWRQcm9wLmdldFByb3BWYWx1ZShjKTtyZXR1cm4hKHR5cGVvZiBmPiJ1IikmJih0aGlzLmV4YWN0PygiIitmKS50b0xvd2VyQ2FzZSgpPT09YTooIiIrZikudG9Mb3dlckNhc2UoKS5pbmRleE9mKGEpPj0w'@;
put 'KX19Y2xhc3MgcWd7Y29uc3RydWN0b3IoYyl7dGhpcy5maWx0ZXJGbj1jLHRoaXMuX2NoYW5nZXM9bmV3IHdlLHRoaXMuX2xvd2VyQ2FzZVZhbHVlPSIiLHRoaXMuX3Jhd1ZhbHVlPSIifWdldCBjaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2NoYW5nZXMuYXNPYnNlcnZhYmxlKCl9Z2V0IGxvd2Vy'@;
put 'Q2FzZVZhbHVlKCl7cmV0dXJuIHRoaXMuX2xvd2VyQ2FzZVZhbHVlfWdldCBzdGF0ZSgpe3JldHVybiB0aGlzLmZpbHRlckZuIGluc3RhbmNlb2Ygc0k/e3Byb3BlcnR5OnRoaXMuZmlsdGVyRm4ucHJvcCx2YWx1ZTp0aGlzLnZhbHVlfTp0aGlzfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLl9y'@;
put 'YXdWYWx1ZX1zZXQgdmFsdWUoYyl7Y3x8KGM9IiIpLGMhPT10aGlzLl9yYXdWYWx1ZSYmKHRoaXMuX3Jhd1ZhbHVlPWMsdGhpcy5fbG93ZXJDYXNlVmFsdWU9Yy50b0xvd2VyQ2FzZSgpLnRyaW0oKSx0aGlzLl9jaGFuZ2VzLm5leHQoYykpfWlzQWN0aXZlKCl7cmV0dXJuISF0aGlzLnZhbHVl'@;
put 'fWFjY2VwdHMoYyl7cmV0dXJuIHRoaXMuZmlsdGVyRm4uYWNjZXB0cyhjLHRoaXMubG93ZXJDYXNlVmFsdWUpfWVxdWFscyhjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIHFnJiYoYy5maWx0ZXJGbiBpbnN0YW5jZW9mIHNJP3RoaXMuZmlsdGVyRm4gaW5zdGFuY2VvZiBzSSYmYy5maWx0ZXJGbi5w'@;
put 'cm9wPT09dGhpcy5maWx0ZXJGbi5wcm9wJiZjLnZhbHVlPT09dGhpcy52YWx1ZTpjPT09dGhpcyl9fWxldCBVVT0oKCk9PntjbGFzcyBsIGV4dGVuZHMgYUl7Y29uc3RydWN0b3IoYSxmLGQsaCxtKXtzdXBlcihhKSx0aGlzLmRvbUFkYXB0ZXI9Zix0aGlzLmNvbW1vblN0cmluZ3M9ZCx0aGlz'@;
put 'LnNtYXJ0VG9nZ2xlU2VydmljZT1oLHRoaXMubmdab25lPW0sdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZT1uZXcgeHIsdGhpcy5vcGVuPSExLHRoaXMuc3Vicz1bXX1zZXQgY3VzdG9tU3RyaW5nRmlsdGVyKGEpe3RoaXMuc2V0RmlsdGVyKGEgaW5zdGFuY2VvZiBvST9hOm5ldyBxZyhhKSksdGhp'@;
put 'cy5pbml0RmlsdGVyVmFsdWUmJih0aGlzLnZhbHVlPXRoaXMuaW5pdEZpbHRlclZhbHVlLGRlbGV0ZSB0aGlzLmluaXRGaWx0ZXJWYWx1ZSl9Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuZmlsdGVyLnZhbHVlfXNldCB2YWx1ZShhKXt0aGlzLmZpbHRlciYmInN0cmluZyI9PXR5cGVvZiBhPyhh'@;
put 'fHwoYT0iIiksYSE9PXRoaXMuZmlsdGVyLnZhbHVlJiYodGhpcy5maWx0ZXIudmFsdWU9YSx0aGlzLmZpbHRlclZhbHVlQ2hhbmdlLmVtaXQoYSkpKTp0aGlzLmluaXRGaWx0ZXJWYWx1ZT1hfWdldCBwbGFjZWhvbGRlclZhbHVlKCl7cmV0dXJuIHRoaXMucGxhY2Vob2xkZXJ8fHRoaXMuY29t'@;
put 'bW9uU3RyaW5ncy5rZXlzLmZpbHRlckl0ZW1zfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuc3Vicy5wdXNoKHRoaXMuc21hcnRUb2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLm9wZW49YSx0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3JlcXVlc3RB'@;
put 'bmltYXRpb25GcmFtZSgoKT0+e3RoaXMuZG9tQWRhcHRlci5mb2N1cyh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQpfSl9KX0pKX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksdGhpcy5zdWJzLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX19cmV0dXJuIGwuXHUwMjc1ZmFj'@;
put 'PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkocnQoaTMpLHJ0KHgxKSxydChUYSkscnQoUWEpLHJ0KFVvKSl9LGwuXHUwMjc1Y21wPWtyKHt0eXBlOmwsc2VsZWN0b3JzOltbImNsci1kZy1zdHJpbmctZmlsdGVyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGYpe2lmKDEmYSYmKE5vKHdS'@;
put 'ZSw1KSxObyh2Uyw1KSksMiZhKXtsZXQgZDt1aShkPWNpKCkpJiYoZi5pbnB1dD1kLmZpcnN0KSx1aShkPWNpKCkpJiYoZi5maWx0ZXJDb250YWluZXI9ZC5maXJzdCl9fSxpbnB1dHM6e3BsYWNlaG9sZGVyOlsiY2xyRmlsdGVyUGxhY2Vob2xkZXIiLCJwbGFjZWhvbGRlciJdLGN1c3RvbVN0'@;
put 'cmluZ0ZpbHRlcjpbImNsckRnU3RyaW5nRmlsdGVyIiwiY3VzdG9tU3RyaW5nRmlsdGVyIl0sdmFsdWU6WyJjbHJGaWx0ZXJWYWx1ZSIsInZhbHVlIl19LG91dHB1dHM6e2ZpbHRlclZhbHVlQ2hhbmdlOiJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSJ9LGZlYXR1cmVzOltyaShbe3Byb3ZpZGU6aUks'@;
put 'dXNlRXhpc3Rpbmc6bH1dKSxyb10sZGVjbHM6Myx2YXJzOjUsY29uc3RzOltbMywiY2xyRGdGaWx0ZXIiLCJjbHJEZ0ZpbHRlck9wZW4iLCJjbHJEZ0ZpbHRlck9wZW5DaGFuZ2UiXSxbInR5cGUiLCJ0ZXh0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwibmFtZSIsInNlYXJjaCIsMSwiY2xyLWlu'@;
put 'cHV0IiwzLCJuZ01vZGVsIiwicGxhY2Vob2xkZXIiLCJuZ01vZGVsQ2hhbmdlIl0sWyJpbnB1dCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGYpezEmYSYmKHllKDAsImNsci1kZy1maWx0ZXIiLDApLEV0KCJjbHJEZ0ZpbHRlck9wZW5DaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBmLm9w'@;
put 'ZW49aH0pLHllKDEsImlucHV0IiwxLDIpLEV0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gZi52YWx1ZT1ofSksQ2UoKSgpKSwyJmEmJihSZSgiY2xyRGdGaWx0ZXIiLGYucmVnaXN0ZXJlZCkoImNsckRnRmlsdGVyT3BlbiIsZi5vcGVuKSxTZSgxKSxSZSgibmdNb2RlbCIs'@;
put 'Zi52YWx1ZSkoInBsYWNlaG9sZGVyIixmLnBsYWNlaG9sZGVyVmFsdWUpLFJyKCJhcmlhLWxhYmVsIixmLnBsYWNlaG9sZGVyVmFsdWUpKX0sZGVwZW5kZW5jaWVzOlt2UyxpcyxXYSx6YV0sZW5jYXBzdWxhdGlvbjoyfSksbH0pKCksYjQ9KCgpPT57Y2xhc3MgbCBleHRlbmRzIEp2e31yZXR1'@;
put 'cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgYztyZXR1cm4gZnVuY3Rpb24oZil7cmV0dXJuKGN8fChjPXhsKGwpKSkoZnx8bCl9fSgpLGwuXHUwMjc1ZGlyPVNyKHt0eXBlOmwsc2VsZWN0b3JzOltbImNsci1kYXRhZ3JpZCJdXSxmZWF0dXJlczpbcm9dfSksbH0pKCksZzc9KCgpPT57'@;
put 'Y2xhc3MgbHtjb25zdHJ1Y3Rvcigpe3RoaXMuYWN0aW9uYWJsZUNvdW50PTB9Z2V0IGhhc0FjdGlvbmFibGVSb3coKXtyZXR1cm4gdGhpcy5hY3Rpb25hYmxlQ291bnQ+MH1yZWdpc3Rlcigpe3RoaXMuYWN0aW9uYWJsZUNvdW50Kyt9dW5yZWdpc3Rlcigpe3RoaXMuYWN0aW9uYWJsZUNvdW50'@;
put 'LS19fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmwsZmFjdG9yeTpsLlx1MDI3NWZhY30pLGx9KSgpLHY3PSgoKT0+e2NsYXNzIGwgZXh0ZW5kcyBRdntjb25zdHJ1Y3RvcihhLGYsZCl7aWYoIWYpdGhyb3cg'@;
put 'bmV3IEVycm9yKCJjbHItZGctcm93IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLWRhdGFncmlkIik7c3VwZXIoYSxmKSx0aGlzLnJvd0FjdGlvbnM9ZH1nZXQgZmxhdm9yKCl7cmV0dXJuIHRoaXMucm93QWN0aW9ucy5oYXNBY3Rpb25hYmxlUm93fX1yZXR1cm4gbC5cdTAy'@;
put 'NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChVbCkscnQoYjQsOCkscnQoZzcpKX0sbC5cdTAyNzVkaXI9U3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siY2xyLWRhdGFncmlkIl0sWyJjbHItZGctcm93Il1dLGZlYXR1cmVzOltyb119KSxsfSkoKSxUZD0oKCk9PntjbGFzcyBs'@;
put 'e2NvbnN0cnVjdG9yKCl7dGhpcy50b2dnbGVTdGF0ZT0hMSx0aGlzLl9lbmFibGVkPSExLHRoaXMuX3N0YXRlPW5ldyBPZSh0aGlzLnRvZ2dsZVN0YXRlKX1nZXQgZW5hYmxlZCgpe3JldHVybiB0aGlzLl9lbmFibGVkfXNldCBlbmFibGVkKGEpe3RoaXMuX2VuYWJsZWQ9YX1nZXQgc3RhdGUo'@;
put 'KXtyZXR1cm4gdGhpcy5jYWNoZX1nZXQgc3RhdGVDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fc3RhdGUuYXNPYnNlcnZhYmxlKCl9Z2V0IGlzT3Blbigpe3JldHVybiEwPT09dGhpcy50b2dnbGVTdGF0ZX1jbG9zZSgpe3RoaXMudG9nZ2xlU3RhdGU9ITEsdGhpcy5fc3RhdGUubmV4dCh0aGlzLnRv'@;
put 'Z2dsZVN0YXRlKSx0aGlzLmJ1dHRvbiYmKHRoaXMuYnV0dG9uLmZvY3VzKCksdGhpcy5idXR0b249bnVsbCl9b3BlbihhLGYpe3RoaXMuY2FjaGU9YSx0aGlzLmJ1dHRvbj1mLHRoaXMudG9nZ2xlU3RhdGU9ITAsdGhpcy5fc3RhdGUubmV4dCh0aGlzLnRvZ2dsZVN0YXRlKX10b2dnbGUoYSxm'@;
put 'KXt0aGlzLmlzUm93T3BlbihhKXx8IWE/dGhpcy5jbG9zZSgpOnRoaXMub3BlbihhLGYpfWlzUm93T3BlbihhKXtyZXR1cm4hKCF0aGlzLnRvZ2dsZVN0YXRlfHx0aGlzLmNhY2hlIT09YSl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3'@;
put 'NXByb3Y9aHIoe3Rva2VuOmwsZmFjdG9yeTpsLlx1MDI3NWZhY30pLGx9KSgpLHk3PSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSl7dGhpcy5kZXRhaWxTZXJ2aWNlPWEsdGhpcy5leHBhbmRhYmxlQ291bnQ9MH1nZXQgaGFzRXhwYW5kYWJsZVJvdygpe3JldHVybiF0aGlzLmRldGFpbFNl'@;
put 'cnZpY2UuZW5hYmxlZCYmdGhpcy5leHBhbmRhYmxlQ291bnQ+MH1yZWdpc3Rlcigpe3RoaXMuZXhwYW5kYWJsZUNvdW50Kyt9dW5yZWdpc3Rlcigpe3RoaXMuZXhwYW5kYWJsZUNvdW50LS19fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHNyKFRkKSl9'@;
put 'LGwuXHUwMjc1cHJvdj1ocih7dG9rZW46bCxmYWN0b3J5OmwuXHUwMjc1ZmFjfSksbH0pKCksYjc9KCgpPT57Y2xhc3MgbCBleHRlbmRzIFF2e2NvbnN0cnVjdG9yKGEsZixkKXtpZighZil0aHJvdyBuZXcgRXJyb3IoImNsci1kZy1yb3cgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2Yg'@;
put 'YSBjbHItZGF0YWdyaWQiKTtzdXBlcihhLGYpLHRoaXMuZXhwYW5kYWJsZUNvdW50PWR9Z2V0IGZsYXZvcigpe3JldHVybiB0aGlzLmV4cGFuZGFibGVDb3VudC5oYXNFeHBhbmRhYmxlUm93fX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChVbCks'@;
put 'cnQoYjQsOCkscnQoeTcpKX0sbC5cdTAyNzVkaXI9U3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siY2xyLWRhdGFncmlkIl0sWyJjbHItZGctcm93Il1dLGZlYXR1cmVzOltyb119KSxsfSkoKTtjbGFzcyB1SXtjb25zdHJ1Y3RvcihjKXt0aGlzLnByb3A9Yyx0aGlzLm5lc3RlZFByb3A9bmV3IHpV'@;
put 'KGMpfWNvbXBhcmUoYyxhKXtsZXQgZj10aGlzLm5lc3RlZFByb3AuZ2V0UHJvcFZhbHVlKGMpLGQ9dGhpcy5uZXN0ZWRQcm9wLmdldFByb3BWYWx1ZShhKTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGYmJihmPWYudG9Mb3dlckNhc2UoKSksInN0cmluZyI9PXR5cGVvZiBkJiYoZD1kLnRvTG93'@;
put 'ZXJDYXNlKCkpLHR5cGVvZiBmPiJ1Inx8bnVsbD09PWY/dHlwZW9mIGQ+InUifHxudWxsPT09ZD8wOjE6dHlwZW9mIGQ+InUifHxudWxsPT09ZHx8ZjxkPy0xOmY+ZD8xOjB9fXZhciBqMD1mdW5jdGlvbihsKXtyZXR1cm4gbFtsLlVOU09SVEVEPTBdPSJVTlNPUlRFRCIsbFtsLkFTQz0xXT0i'@;
put 'QVNDIixsW2wuREVTQz0tMV09IkRFU0MiLGx9KGowfHx7fSk7bGV0IFpVPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoKXt0aGlzLl9keW5hbWljPSExfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuY29sdW1uVmlldz10aGlzLnRlbXBsYXRlUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyhudWxsKX1u'@;
put 'Z09uRGVzdHJveSgpe3RoaXMuY29sdW1uVmlldy5kZXN0cm95KCl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NWNtcD1rcih7dHlwZTpsLHNlbGVjdG9yczpbWyJkZy13cmFwcGVkLWNvbHVtbiJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24o'@;
put 'YSxmKXtpZigxJmEmJk5vKENSZSw1KSwyJmEpe2xldCBkO3VpKGQ9Y2koKSkmJihmLnRlbXBsYXRlUmVmPWQuZmlyc3QpfX0sbmdDb250ZW50U2VsZWN0b3JzOk9vLGRlY2xzOjIsdmFyczowLGNvbnN0czpbWyJjb2x1bW5Qb3J0YWwiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxmKXsxJmEm'@;
put 'JihUaSgpLHR0KDAsU1JlLDEsMCwibmctdGVtcGxhdGUiLG51bGwsMCxLdSkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxsfSkoKSxjST0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEpe3RoaXMuc3RhdGVEZWJvdW5jZXI9YSx0aGlzLl9yZXZlcnNlPSExLHRoaXMuX2NoYW5nZT1uZXcgd2V9Z2V0'@;
put 'IGNvbXBhcmF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcGFyYXRvcn1zZXQgY29tcGFyYXRvcihhKXt0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZVN0YXJ0KCksdGhpcy5fY29tcGFyYXRvcj1hLHRoaXMuZW1pdENoYW5nZSgpLHRoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlRG9uZSgpfWdldCBy'@;
put 'ZXZlcnNlKCl7cmV0dXJuIHRoaXMuX3JldmVyc2V9c2V0IHJldmVyc2UoYSl7dGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VTdGFydCgpLHRoaXMuX3JldmVyc2U9YSx0aGlzLmVtaXRDaGFuZ2UoKSx0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZURvbmUoKX1nZXQgY2hhbmdlKCl7cmV0dXJu'@;
put 'IHRoaXMuX2NoYW5nZS5hc09ic2VydmFibGUoKX10b2dnbGUoYSxmKXt0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZVN0YXJ0KCksdGhpcy5jb21wYXJhdG9yPT09YT90aGlzLl9yZXZlcnNlPXR5cGVvZiBmPCJ1IiYmZnx8IXRoaXMuX3JldmVyc2U6KHRoaXMuX2NvbXBhcmF0b3I9YSx0aGlz'@;
put 'Ll9yZXZlcnNlPXR5cGVvZiBmPCJ1IiYmZiksdGhpcy5lbWl0Q2hhbmdlKCksdGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VEb25lKCl9Y2xlYXIoKXt0aGlzLmNvbXBhcmF0b3I9bnVsbH1jb21wYXJlKGEsZil7cmV0dXJuKHRoaXMucmV2ZXJzZT8tMToxKSp0aGlzLmNvbXBhcmF0b3IuY29t'@;
put 'cGFyZShhLGYpfWVtaXRDaGFuZ2UoKXt0aGlzLl9jaGFuZ2UubmV4dCh0aGlzKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkoc3IoZ1MpKX0sbC5cdTAyNzVwcm92PWhyKHt0b2tlbjpsLGZhY3Rvcnk6bC5cdTAyNzVmYWN9KSxsfSkoKTt2YXIgT2Q9'@;
put 'ZnVuY3Rpb24obCl7cmV0dXJuIGxbbC5BTElHTl9DT0xVTU5TPTBdPSJBTElHTl9DT0xVTU5TIixsW2wuQ0FMQ1VMQVRFX01PREVfT049MV09IkNBTENVTEFURV9NT0RFX09OIixsW2wuQ0FMQ1VMQVRFX01PREVfT0ZGPTJdPSJDQUxDVUxBVEVfTU9ERV9PRkYiLGxbbC5DTEVBUl9XSURUSFM9'@;
put 'M109IkNMRUFSX1dJRFRIUyIsbFtsLkNPTVBVVEVfQ09MVU1OX1dJRFRIUz00XT0iQ09NUFVURV9DT0xVTU5fV0lEVEhTIixsfShPZHx8e30pO2xldCBYZz0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKCl7dGhpcy5fcmVuZGVyU3RlcD1uZXcgd2UsdGhpcy5hbHJlYWR5U2l6ZWQ9ITF9Z2V0'@;
put 'IHJlbmRlclN0ZXAoKXtyZXR1cm4gdGhpcy5fcmVuZGVyU3RlcC5hc09ic2VydmFibGUoKX1maWx0ZXJSZW5kZXJTdGVwcyhhKXtyZXR1cm4gdGhpcy5yZW5kZXJTdGVwLnBpcGUoSWwoZj0+YT09PWYpKX1yZXNpemUoKXt0aGlzLl9yZW5kZXJTdGVwLm5leHQoT2QuQ0FMQ1VMQVRFX01PREVf'@;
put 'T04pLHRoaXMuYWxyZWFkeVNpemVkJiZ0aGlzLl9yZW5kZXJTdGVwLm5leHQoT2QuQ0xFQVJfV0lEVEhTKSx0aGlzLl9yZW5kZXJTdGVwLm5leHQoT2QuQ09NUFVURV9DT0xVTU5fV0lEVEhTKSx0aGlzLl9yZW5kZXJTdGVwLm5leHQoT2QuQUxJR05fQ09MVU1OUyksdGhpcy5hbHJlYWR5U2l6'@;
put 'ZWQ9ITAsdGhpcy5fcmVuZGVyU3RlcC5uZXh0KE9kLkNBTENVTEFURV9NT0RFX09GRil9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmwsZmFjdG9yeTpsLlx1MDI3NWZhY30pLGx9KSgpLFlVPSgoKT0+e2Ns'@;
put 'YXNzIGx7Y29uc3RydWN0b3IoYSxmLGQpe3RoaXMuZWw9YSx0aGlzLmRvbUFkYXB0ZXI9Zix0aGlzLm9yZ2FuaXplcj1kLHRoaXMuX3Jlc2l6ZWRCeT0wfWdldCByZXNpemVkQnkoKXtyZXR1cm4gdGhpcy5fcmVzaXplZEJ5fWdldCBtaW5Db2x1bW5XaWR0aCgpe3JldHVybiB0aGlzLmRvbUFk'@;
put 'YXB0ZXIubWluV2lkdGgodGhpcy5lbC5uYXRpdmVFbGVtZW50KXx8OTZ9Z2V0IG1heFJlc2l6ZVJhbmdlKCl7cmV0dXJuIHRoaXMud2lkdGhCZWZvcmVSZXNpemUtdGhpcy5taW5Db2x1bW5XaWR0aH1nZXQgd2lkdGhBZnRlclJlc2l6ZSgpe3JldHVybiB0aGlzLndpZHRoQmVmb3JlUmVzaXpl'@;
put 'K3RoaXMuX3Jlc2l6ZWRCeX1zdGFydFJlc2l6ZSgpe3RoaXMuX3Jlc2l6ZWRCeT0wLHRoaXMuaXNXaXRoaW5NYXhSZXNpemVSYW5nZT0hMCx0aGlzLndpZHRoQmVmb3JlUmVzaXplPXRoaXMuZG9tQWRhcHRlci5jbGllbnRSZWN0KHRoaXMuZWwubmF0aXZlRWxlbWVudCkud2lkdGh9ZW5kUmVz'@;
put 'aXplKCl7dGhpcy5vcmdhbml6ZXIucmVzaXplKCl9Y2FsY3VsYXRlUmVzaXplKGEpe2E8LXRoaXMubWF4UmVzaXplUmFuZ2U/KHRoaXMuX3Jlc2l6ZWRCeT0tdGhpcy5tYXhSZXNpemVSYW5nZSx0aGlzLmlzV2l0aGluTWF4UmVzaXplUmFuZ2U9ITEpOih0aGlzLl9yZXNpemVkQnk9YSx0aGlz'@;
put 'LmlzV2l0aGluTWF4UmVzaXplUmFuZ2U9ITApfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShzcihWaSksc3IoeDEpLHNyKFhnKSl9LGwuXHUwMjc1cHJvdj1ocih7dG9rZW46bCxmYWN0b3J5OmwuXHUwMjc1ZmFjfSksbH0pKCksV1U9KCgpPT57Y2xh'@;
put 'c3MgbHtjb25zdHJ1Y3RvcihhKXt0aGlzLnBsYXRmb3JtSWQ9YX1nZXQgdGFibGVSZWYoKXtyZXR1cm4gdGhpcy5fdGFibGVSZWZ9c2V0IHRhYmxlUmVmKGEpe3RoaXMuX3RhYmxlUmVmPWF9c2V0IHRhYmxlKGEpe0hhKHRoaXMucGxhdGZvcm1JZCkmJmEubmF0aXZlRWxlbWVudCYmKHRoaXMu'@;
put 'dGFibGVSZWY9YS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5kYXRhZ3JpZC10YWJsZSIpKX1nZXRDb2x1bW5EcmFnSGVpZ2h0KCl7cmV0dXJuIHRoaXMudGFibGVSZWY/YCR7dGhpcy50YWJsZVJlZi5jbGllbnRIZWlnaHR9cHhgOm51bGx9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5j'@;
put 'dGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHNyKHFhKSl9LGwuXHUwMjc1cHJvdj1ocih7dG9rZW46bCxmYWN0b3J5OmwuXHUwMjc1ZmFjfSksbH0pKCksUHNlPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmLGQsaCxtLF8pe3RoaXMuY29sdW1uUmVzaXplclNlcnZpY2U9YSx0aGlzLnJl'@;
put 'bmRlcmVyPWYsdGhpcy5uZ1pvbmU9ZCx0aGlzLnRhYmxlU2l6ZVNlcnZpY2U9aCx0aGlzLmNvbW1vblN0cmluZz1tLHRoaXMuZG9jdW1lbnQ9Xyx0aGlzLmNvbHVtblNlcGFyYXRvcklkPUh1KCksdGhpcy5yZXNpemVTdGFydGVkT25LZXlEb3duPSExLHRoaXMudW5saXN0ZW5lcnM9W119Z2V0'@;
put 'IGRlc2NyaXB0aW9uSWQoKXtyZXR1cm5gJHt0aGlzLmNvbHVtblNlcGFyYXRvcklkfS1hcmlhLWRlc2NyaWJlZGJ5YH1nZXQgcmVzaXplVHJhY2tlckVsKCl7cmV0dXJuIHRoaXMucmVzaXplVHJhY2tlclJlZi5uYXRpdmVFbGVtZW50fWdldCBjb2x1bW5IYW5kbGVFbCgpe3JldHVybiB0aGlz'@;
put 'LmNvbHVtbkhhbmRsZVJlZi5uYXRpdmVFbGVtZW50fW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy51bmxpc3RlbmVycy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuY29sdW1uSGFuZGxlRWwsImtleWRvd24iLGE9Pnt0aGlz'@;
put 'LnNob3dUcmFja2VyT25GaXJzdEtleURvd24oYSksdGhpcy5tb3ZlVHJhY2tlck9uS2V5RG93bihhKX0pKSx0aGlzLnVubGlzdGVuZXJzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5jb2x1bW5IYW5kbGVFbCwia2V5dXAiLGE9Pnt0aGlzLmhpZGVUcmFja2VyT25LZXlVcChhKX0p'@;
put 'KX0pfW5nT25EZXN0cm95KCl7dGhpcy51bmxpc3RlbmVycy5mb3JFYWNoKGE9PmEoKSl9c2hvd1RyYWNrZXIoKXt0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnN0YXJ0UmVzaXplKCk7Y29uc3QgYT10aGlzLnRhYmxlU2l6ZVNlcnZpY2UuZ2V0Q29sdW1uRHJhZ0hlaWdodCgpO3RoaXMucmVu'@;
put 'ZGVyZXIuc2V0U3R5bGUodGhpcy5yZXNpemVUcmFja2VyRWwsImhlaWdodCIsYSksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwiZGlzcGxheSIsImJsb2NrIil9bW92ZVRyYWNrZXIoYSl7dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5jYWxjdWxhdGVSZXNp'@;
put 'emUoYSksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwidHJhbnNmb3JtIixgdHJhbnNsYXRlWCgke3RoaXMuY29sdW1uUmVzaXplclNlcnZpY2UucmVzaXplZEJ5fXB4KWApLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5kb2N1bWVudC5ib2R5LCJjdXJz'@;
put 'b3IiLCJjb2wtcmVzaXplIiksdGhpcy5yZWRGbGFnVHJhY2tlcigpfWhpZGVUcmFja2VyKCl7dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5lbmRSZXNpemUoKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMucmVzaXplVHJhY2tlckVsLCJkaXNwbGF5Iiwibm9uZSIpLHRoaXMucmVuZGVy'@;
put 'ZXIuc2V0U3R5bGUodGhpcy5yZXNpemVUcmFja2VyRWwsInRyYW5zZm9ybSIsInRyYW5zbGF0ZVgoMHB4KSIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5kb2N1bWVudC5ib2R5LCJjdXJzb3IiLCJhdXRvIil9c2hvd1RyYWNrZXJPbkZpcnN0S2V5RG93bihhKXshdGhpcy5yZXNpemVT'@;
put 'dGFydGVkT25LZXlEb3duJiYodGhpcy5pc0Fycm93TGVmdEtleUV2ZW50KGEpfHx0aGlzLmlzQXJyb3dSaWdodEtleUV2ZW50KGEpKSYmKHRoaXMucmVzaXplU3RhcnRlZE9uS2V5RG93bj0hMCx0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMucmVzaXplVHJhY2tlckVsLCJvbi1hcnJvdy1r'@;
put 'ZXktcmVzaXplIiksdGhpcy5zaG93VHJhY2tlcigpKX1tb3ZlVHJhY2tlck9uS2V5RG93bihhKXt0aGlzLmlzQXJyb3dMZWZ0S2V5RXZlbnQoYSk/dGhpcy5tb3ZlVHJhY2tlcih0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnJlc2l6ZWRCeS0xMik6dGhpcy5pc0Fycm93UmlnaHRLZXlFdmVu'@;
put 'dChhKSYmdGhpcy5tb3ZlVHJhY2tlcih0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnJlc2l6ZWRCeSsxMil9aGlkZVRyYWNrZXJPbktleVVwKGEpe3RoaXMucmVzaXplU3RhcnRlZE9uS2V5RG93biYmKHRoaXMuaXNBcnJvd0xlZnRLZXlFdmVudChhKXx8dGhpcy5pc0Fycm93UmlnaHRLZXlF'@;
put 'dmVudChhKSkmJih0aGlzLnJlc2l6ZVN0YXJ0ZWRPbktleURvd249ITEsdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwib24tYXJyb3cta2V5LXJlc2l6ZSIpLHRoaXMuaGlkZVRyYWNrZXIoKSx0aGlzLmNvbHVtbkhhbmRsZUVsLmZvY3VzKCkpfXJlZEZs'@;
put 'YWdUcmFja2VyKCl7dGhpcy5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlIT09dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlJiYodGhpcy5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlPXRoaXMuY29sdW1uUmVzaXplclNlcnZpY2UuaXNXaXRoaW5NYXhSZXNpemVS'@;
put 'YW5nZSx0aGlzLmlzV2l0aGluTWF4UmVzaXplUmFuZ2U/dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwiZXhjZWVkZWQtbWF4Iik6dGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwiZXhjZWVkZWQtbWF4IikpfWlzQXJyb3dM'@;
put 'ZWZ0S2V5RXZlbnQoYSl7cmV0dXJuIEVkKGEua2V5KT09PU1vLkFycm93TGVmdH1pc0Fycm93UmlnaHRLZXlFdmVudChhKXtyZXR1cm4gRWQoYS5rZXkpPT09TW8uQXJyb3dSaWdodH19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkocnQoWVUpLHJ0KGpv'@;
put 'KSxydChVbykscnQoV1UpLHJ0KFRhKSxydChGYSkpfSxsLlx1MDI3NWNtcD1rcih7dHlwZTpsLHNlbGVjdG9yczpbWyJjbHItZGctY29sdW1uLXNlcGFyYXRvciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxmKXtpZigxJmEmJihObyhNUmUsNSksTm8oa1JlLDUpKSwyJmEpe2xldCBkO3VpKGQ9'@;
put 'Y2koKSkmJihmLnJlc2l6ZVRyYWNrZXJSZWY9ZC5maXJzdCksdWkoZD1jaSgpKSYmKGYuY29sdW1uSGFuZGxlUmVmPWQuZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxmKXsyJmEmJmdyKCJkYXRhZ3JpZC1jb2x1bW4tc2VwYXJhdG9yIiwhMCl9LGRlY2xzOjYs'@;
put 'dmFyczo1LGNvbnN0czpbWyJ0eXBlIiwiYnV0dG9uIiwiY2xyRHJhZ2dhYmxlIiwiIiwxLCJkYXRhZ3JpZC1jb2x1bW4taGFuZGxlIiwzLCJjbHJHcm91cCIsImNsckRyYWdTdGFydCIsImNsckRyYWdNb3ZlIiwiY2xyRHJhZ0VuZCJdLFsiY29sdW1uSGFuZGxlIiwiIl0sWzEsImNsci1zci1v'@;
put 'bmx5Il0sWzEsImRhdGFncmlkLWNvbHVtbi1yZXNpemUtdHJhY2tlciJdLFsicmVzaXplVHJhY2tlciIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGYpezEmYSYmKHllKDAsImJ1dHRvbiIsMCwxKSxFdCgiY2xyRHJhZ1N0YXJ0IixmdW5jdGlvbigpe3JldHVybiBmLnNob3dUcmFja2VyKCl9'@;
put 'KSgiY2xyRHJhZ01vdmUiLGZ1bmN0aW9uKGgpe3JldHVybiBmLm1vdmVUcmFja2VyKGguZHJhZ1Bvc2l0aW9uLm1vdmVYKX0pKCJjbHJEcmFnRW5kIixmdW5jdGlvbigpe3JldHVybiBmLmhpZGVUcmFja2VyKCl9KSxDZSgpLHllKDIsInNwYW4iLDIpLFllKDMpLENlKCksdG4oNCwiZGl2Iiwz'@;
put 'LDQpKSwyJmEmJihSZSgiY2xyR3JvdXAiLGYuY29sdW1uU2VwYXJhdG9ySWQpLFJyKCJhcmlhLWxhYmVsIixmLmNvbW1vblN0cmluZy5rZXlzLmNvbHVtblNlcGFyYXRvckFyaWFMYWJlbCkoImFyaWEtZGVzY3JpYmVkYnkiLGYuZGVzY3JpcHRpb25JZCksU2UoMiksUnIoImlkIixmLmRlc2Ny'@;
put 'aXB0aW9uSWQpLFNlKDEpLHdyKCIgIixmLmNvbW1vblN0cmluZy5rZXlzLmNvbHVtblNlcGFyYXRvckRlc2NyaXB0aW9uLCIgIikpfSxkZXBlbmRlbmNpZXM6W2hzZV0sZW5jYXBzdWxhdGlvbjoyfSksbH0pKCksSmc9KCgpPT57Y2xhc3MgbCBleHRlbmRzIGFJe2NvbnN0cnVjdG9yKGEsZixk'@;
put 'LGgsbSl7c3VwZXIoZiksdGhpcy5fc29ydD1hLHRoaXMudmNyPWQsdGhpcy5kZXRhaWxTZXJ2aWNlPWgsdGhpcy5jaGFuZ2VEZXRlY3RvclJlZj1tLHRoaXMuc29ydE9yZGVyQ2hhbmdlPW5ldyB4cix0aGlzLmZpbHRlclZhbHVlQ2hhbmdlPW5ldyB4cix0aGlzLnNvcnRlZENoYW5nZT1uZXcg'@;
put 'eHIsdGhpcy5zaG93U2VwYXJhdG9yPSEwLHRoaXMuY3VzdG9tRmlsdGVyPSExLHRoaXMuX2NvbFR5cGU9InN0cmluZyIsdGhpcy5fc29ydE9yZGVyPWowLlVOU09SVEVELHRoaXMuX3NvcnRlZD0hMSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5s'@;
put 'aXN0ZW5Gb3JTb3J0aW5nQ2hhbmdlcygpKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmxpc3RlbkZvckRldGFpbFBhbmVDaGFuZ2VzKCkpfWdldCBjb2xUeXBlKCl7cmV0dXJuIHRoaXMuX2NvbFR5cGV9c2V0IGNvbFR5cGUoYSl7dGhpcy5fY29sVHlwZT1hfWdldCBmaWVsZCgpe3Jl'@;
put 'dHVybiB0aGlzLl9maWVsZH1zZXQgZmllbGQoYSl7InN0cmluZyI9PXR5cGVvZiBhJiYodGhpcy5fZmllbGQ9YSx0aGlzLl9zb3J0Qnl8fCh0aGlzLl9zb3J0Qnk9bmV3IHVJKGEpKSl9Z2V0IHNvcnRCeSgpe3JldHVybiB0aGlzLl9zb3J0Qnl9c2V0IHNvcnRCeShhKXsic3RyaW5nIj09dHlw'@;
put 'ZW9mIGE/dGhpcy5fc29ydEJ5PW5ldyB1SShhKTphP3RoaXMuX3NvcnRCeT1hOnRoaXMuZmllbGQ/dGhpcy5fc29ydEJ5PW5ldyB1SSh0aGlzLmZpZWxkKTpkZWxldGUgdGhpcy5fc29ydEJ5fWdldCBzb3J0T3JkZXIoKXtyZXR1cm4gdGhpcy5fc29ydE9yZGVyfXNldCBzb3J0T3JkZXIoYSl7'@;
put 'aWYoISh0eXBlb2YgYT4idSIpJiZ0aGlzLl9zb3J0T3JkZXIhPT1hKXN3aXRjaChhKXtkZWZhdWx0OmNhc2UgajAuVU5TT1JURUQ6dGhpcy5fc29ydC5jbGVhcigpO2JyZWFrO2Nhc2UgajAuQVNDOnRoaXMuc29ydCghMSk7YnJlYWs7Y2FzZSBqMC5ERVNDOnRoaXMuc29ydCghMCl9fWdldCBz'@;
put 'b3J0ZWQoKXtyZXR1cm4gdGhpcy5fc29ydGVkfXNldCBzb3J0ZWQoYSl7IWEmJnRoaXMuc29ydGVkPyh0aGlzLl9zb3J0ZWQ9ITEsdGhpcy5fc29ydC5jbGVhcigpKTphJiYhdGhpcy5zb3J0ZWQmJnRoaXMuc29ydCgpfXNldCB1cGRhdGVGaWx0ZXJWYWx1ZShhKXt0aGlzLmZpbHRlcj90aGlz'@;
put 'LmZpbHRlciBpbnN0YW5jZW9mIHFnPygoIWF8fCJzdHJpbmciIT10eXBlb2YgYSkmJihhPSIiKSxhIT09dGhpcy5maWx0ZXIudmFsdWUmJih0aGlzLmZpbHRlci52YWx1ZT1hKSk6dGhpcy5maWx0ZXIgaW5zdGFuY2VvZiBLZyYmKCghYXx8IShhIGluc3RhbmNlb2YgQXJyYXkpKSYmKGE9W251'@;
put 'bGwsbnVsbF0pLDI9PT1hLmxlbmd0aCYmKGFbMF0hPT10aGlzLmZpbHRlci52YWx1ZVswXXx8YVsxXSE9PXRoaXMuZmlsdGVyLnZhbHVlWzFdKSYmKHRoaXMuZmlsdGVyLnZhbHVlPWEpKTp0aGlzLmluaXRGaWx0ZXJWYWx1ZT1hfXNldCBwcm9qZWN0ZWRGaWx0ZXIoYSl7YSYmKHRoaXMuZGVs'@;
put 'ZXRlRmlsdGVyKCksdGhpcy5jdXN0b21GaWx0ZXI9ITApfWdldCBzb3J0YWJsZSgpe3JldHVybiEhdGhpcy5fc29ydEJ5fWdldCBhcmlhU29ydCgpe3N3aXRjaCh0aGlzLl9zb3J0T3JkZXIpe2RlZmF1bHQ6Y2FzZSBqMC5VTlNPUlRFRDpyZXR1cm4ibm9uZSI7Y2FzZSBqMC5BU0M6cmV0dXJu'@;
put 'ImFzY2VuZGluZyI7Y2FzZSBqMC5ERVNDOnJldHVybiJkZXNjZW5kaW5nIn19Z2V0IHNvcnREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5fc29ydERpcmVjdGlvbn1nZXQgZmlsdGVyVmFsdWUoKXtyZXR1cm4gdGhpcy5maWx0ZXIgaW5zdGFuY2VvZiBxZ3x8dGhpcy5maWx0ZXIgaW5zdGFuY2Vv'@;
put 'ZiBLZz90aGlzLmZpbHRlci52YWx1ZTpudWxsfXNldCBmaWx0ZXJWYWx1ZShhKXsodGhpcy5maWx0ZXIgaW5zdGFuY2VvZiBxZ3x8dGhpcy5maWx0ZXIgaW5zdGFuY2VvZiBLZykmJih0aGlzLnVwZGF0ZUZpbHRlclZhbHVlPWEsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KHRoaXMuZmls'@;
put 'dGVyLnZhbHVlKSl9Z2V0IF92aWV3KCl7cmV0dXJuIHRoaXMud3JhcHBlZEluamVjdG9yLmdldChaVSx0aGlzLnZjcikuY29sdW1uVmlld31uZ09uSW5pdCgpe3RoaXMud3JhcHBlZEluamVjdG9yPW5ldyBlSShaVSx0aGlzLnZjcil9bmdPbkNoYW5nZXMoYSl7YS5jb2xUeXBlJiZhLmNvbFR5'@;
put 'cGUuY3VycmVudFZhbHVlJiZhLmNvbFR5cGUuY3VycmVudFZhbHVlIT09YS5jb2xUeXBlLnByZXZpb3VzVmFsdWUmJiF0aGlzLmN1c3RvbUZpbHRlciYmIXRoaXMuZmlsdGVyJiZ0aGlzLmNvbFR5cGUmJnRoaXMuZmllbGQmJnRoaXMuc2V0dXBEZWZhdWx0RmlsdGVyKHRoaXMuZmllbGQsdGhp'@;
put 'cy5jb2xUeXBlKSxhLmZpZWxkJiZhLmZpZWxkLmN1cnJlbnRWYWx1ZSYmYS5maWVsZC5jdXJyZW50VmFsdWUhPT1hLmZpZWxkLnByZXZpb3VzVmFsdWUmJiF0aGlzLmN1c3RvbUZpbHRlciYmdGhpcy5jb2xUeXBlJiZ0aGlzLnNldHVwRGVmYXVsdEZpbHRlcih0aGlzLmZpZWxkLHRoaXMuY29s'@;
put 'VHlwZSl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c29ydChhKXt0aGlzLnNvcnRhYmxlJiYodGhpcy5fc29ydC50b2dnbGUodGhpcy5fc29ydEJ5LGEpLHRoaXMuX3NvcnRPcmRlcj10aGlz'@;
put 'Ll9zb3J0LnJldmVyc2U/ajAuREVTQzpqMC5BU0MsdGhpcy5fc29ydERpcmVjdGlvbj10aGlzLl9zb3J0T3JkZXI9PT1qMC5ERVNDPyJkb3duIjoidXAiLHRoaXMuc29ydEljb249dGhpcy5fc29ydE9yZGVyPT09ajAuREVTQz8iYXJyb3cgZG93biI6ImFycm93Iix0aGlzLnNvcnRPcmRlckNo'@;
put 'YW5nZS5lbWl0KHRoaXMuX3NvcnRPcmRlciksdGhpcy5fc29ydGVkPSEwLHRoaXMuc29ydGVkQ2hhbmdlLmVtaXQoITApKX1saXN0ZW5Gb3JEZXRhaWxQYW5lQ2hhbmdlcygpe3JldHVybiB0aGlzLmRldGFpbFNlcnZpY2Uuc3RhdGVDaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLnNob3dTZXBh'@;
put 'cmF0b3IhPT0hYSYmKHRoaXMuc2hvd1NlcGFyYXRvcj0hYSx0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX0pfWxpc3RlbkZvclNvcnRpbmdDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX3NvcnQuY2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5t'@;
put 'YXJrRm9yQ2hlY2soKSx0aGlzLnNvcnRPcmRlciE9PWowLlVOU09SVEVEJiZhLmNvbXBhcmF0b3IhPT10aGlzLl9zb3J0QnkmJih0aGlzLl9zb3J0T3JkZXI9ajAuVU5TT1JURUQsdGhpcy5zb3J0T3JkZXJDaGFuZ2UuZW1pdCh0aGlzLl9zb3J0T3JkZXIpLHRoaXMuc29ydEljb249bnVsbCx0'@;
put 'aGlzLl9zb3J0RGlyZWN0aW9uPW51bGwpLHRoaXMuc29ydGVkJiZhLmNvbXBhcmF0b3IhPT10aGlzLl9zb3J0QnkmJih0aGlzLl9zb3J0ZWQ9ITEsdGhpcy5zb3J0ZWRDaGFuZ2UuZW1pdCghMSkpfSl9c2V0dXBEZWZhdWx0RmlsdGVyKGEsZil7Im51bWJlciI9PT1mP3RoaXMuc2V0RmlsdGVy'@;
put 'KG5ldyBLZyhuZXcgbEkoYSkpKToic3RyaW5nIj09PWYmJnRoaXMuc2V0RmlsdGVyKG5ldyBxZyhuZXcgc0koYSkpKSx0aGlzLmZpbHRlciYmdGhpcy5pbml0RmlsdGVyVmFsdWUmJih0aGlzLnVwZGF0ZUZpbHRlclZhbHVlPXRoaXMuaW5pdEZpbHRlclZhbHVlLGRlbGV0ZSB0aGlzLmluaXRG'@;
put 'aWx0ZXJWYWx1ZSl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHJ0KGNJKSxydChpMykscnQoZmEpLHJ0KFRkKSxydChVbCkpfSxsLlx1MDI3NWNtcD1rcih7dHlwZTpsLHNlbGVjdG9yczpbWyJjbHItZGctY29sdW1uIl1dLGNvbnRlbnRRdWVyaWVz'@;
put 'OmZ1bmN0aW9uKGEsZixkKXtpZigxJmEmJkZvKGQsaUksNSksMiZhKXtsZXQgaDt1aShoPWNpKCkpJiYoZi5wcm9qZWN0ZWRGaWx0ZXI9aC5maXJzdCl9fSxob3N0QXR0cnM6WyJyb2xlIiwiY29sdW1uaGVhZGVyIl0saG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxmKXsyJmEm'@;
put 'JihScigiYXJpYS1zb3J0IixmLmFyaWFTb3J0KSxncigiZGF0YWdyaWQtY29sdW1uIiwhMCkpfSxpbnB1dHM6e2ZpbHRlclN0cmluZ1BsYWNlaG9sZGVyOlsiY2xyRmlsdGVyU3RyaW5nUGxhY2Vob2xkZXIiLCJmaWx0ZXJTdHJpbmdQbGFjZWhvbGRlciJdLGZpbHRlck51bWJlck1heFBsYWNl'@;
put 'aG9sZGVyOlsiY2xyRmlsdGVyTnVtYmVyTWF4UGxhY2Vob2xkZXIiLCJmaWx0ZXJOdW1iZXJNYXhQbGFjZWhvbGRlciJdLGZpbHRlck51bWJlck1pblBsYWNlaG9sZGVyOlsiY2xyRmlsdGVyTnVtYmVyTWluUGxhY2Vob2xkZXIiLCJmaWx0ZXJOdW1iZXJNaW5QbGFjZWhvbGRlciJdLGNvbFR5'@;
put 'cGU6WyJjbHJEZ0NvbFR5cGUiLCJjb2xUeXBlIl0sZmllbGQ6WyJjbHJEZ0ZpZWxkIiwiZmllbGQiXSxzb3J0Qnk6WyJjbHJEZ1NvcnRCeSIsInNvcnRCeSJdLHNvcnRPcmRlcjpbImNsckRnU29ydE9yZGVyIiwic29ydE9yZGVyIl0sc29ydGVkOlsiY2xyRGdTb3J0ZWQiLCJzb3J0ZWQiXSx1'@;
put 'cGRhdGVGaWx0ZXJWYWx1ZTpbImNsckZpbHRlclZhbHVlIiwidXBkYXRlRmlsdGVyVmFsdWUiXX0sb3V0cHV0czp7c29ydE9yZGVyQ2hhbmdlOiJjbHJEZ1NvcnRPcmRlckNoYW5nZSIsZmlsdGVyVmFsdWVDaGFuZ2U6ImNsckZpbHRlclZhbHVlQ2hhbmdlIixzb3J0ZWRDaGFuZ2U6ImNsckRn'@;
put 'U29ydGVkQ2hhbmdlIn0sZmVhdHVyZXM6W3JpKFt0NyxRMixRYV0pLHJvLGJsXSxuZ0NvbnRlbnRTZWxlY3RvcnM6RlJlLGRlY2xzOjksdmFyczo1LGNvbnN0czpbWzEsImRhdGFncmlkLWNvbHVtbi1mbGV4Il0sWyJjbGFzcyIsImRhdGFncmlkLWNvbHVtbi10aXRsZSIsInR5cGUiLCJidXR0'@;
put 'b24iLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsckZpbHRlclBsYWNlaG9sZGVyIiwiY2xyRGdTdHJpbmdGaWx0ZXIiLCJjbHJGaWx0ZXJWYWx1ZSIsImNsckZpbHRlclZhbHVlQ2hhbmdlIiw0LCJuZ0lmIl0sWzMsImNsckZpbHRlck1heFBsYWNlaG9sZGVyIiwiY2xyRmlsdGVyTWluUGxh'@;
put 'Y2Vob2xkZXIiLCJjbHJEZ051bWVyaWNGaWx0ZXIiLCJjbHJGaWx0ZXJWYWx1ZSIsImNsckZpbHRlclZhbHVlQ2hhbmdlIiw0LCJuZ0lmIl0sWyJjb2x1bW5UaXRsZSIsIiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1jb2x1bW4tdGl0bGUiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsidHlwZSIsImJ1'@;
put 'dHRvbiIsMSwiZGF0YWdyaWQtY29sdW1uLXRpdGxlIiwzLCJjbGljayJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0Il0sWyJzaGFwZSIsImFycm93IiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwiY2xhc3MiLCJzb3J0LWljb24iLDQsIm5nSWYiXSxbInNoYXBlIiwiYXJyb3ciLCJhcmlhLWhpZGRlbiIs'@;
put 'InRydWUiLDEsInNvcnQtaWNvbiJdLFszLCJjbHJGaWx0ZXJQbGFjZWhvbGRlciIsImNsckRnU3RyaW5nRmlsdGVyIiwiY2xyRmlsdGVyVmFsdWUiLCJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSJdLFszLCJjbHJGaWx0ZXJNYXhQbGFjZWhvbGRlciIsImNsckZpbHRlck1pblBsYWNlaG9sZGVyIiwi'@;
put 'Y2xyRGdOdW1lcmljRmlsdGVyIiwiY2xyRmlsdGVyVmFsdWUiLCJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSJdLFsxLCJkYXRhZ3JpZC1jb2x1bW4tdGl0bGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxmKXsxJmEmJihUaShQUmUpLHllKDAsImRpdiIsMCksdHQoMSxBUmUsMywyLCJidXR0b24iLDEp'@;
put 'LERyKDIpLHR0KDMsVFJlLDEsMywiY2xyLWRnLXN0cmluZy1maWx0ZXIiLDIpLHR0KDQsT1JlLDEsNCwiY2xyLWRnLW51bWVyaWMtZmlsdGVyIiwzKSx0dCg1LERSZSwxLDAsIm5nLXRlbXBsYXRlIixudWxsLDQsS3UpLHR0KDcsUlJlLDIsMSwic3BhbiIsNSksdHQoOCxMUmUsMSwwLCJjbHIt'@;
put 'ZGctY29sdW1uLXNlcGFyYXRvciIsNiksQ2UoKSksMiZhJiYoU2UoMSksUmUoIm5nSWYiLGYuc29ydGFibGUpLFNlKDIpLFJlKCJuZ0lmIixmLmZpZWxkJiYhZi5jdXN0b21GaWx0ZXImJiJzdHJpbmciPT1mLmNvbFR5cGUpLFNlKDEpLFJlKCJuZ0lmIixmLmZpZWxkJiYhZi5jdXN0b21GaWx0'@;
put 'ZXImJiJudW1iZXIiPT1mLmNvbFR5cGUpLFNlKDMpLFJlKCJuZ0lmIiwhZi5zb3J0YWJsZSksU2UoMSksUmUoIm5nSWYiLGYuc2hvd1NlcGFyYXRvcikpfSxkZXBlbmRlbmNpZXM6W1VVLFJzZSxQc2UsJGkseWQsSmFdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLGx9KSgp'@;
put 'LF80PSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmLGQpe3RoaXMuX2ZpbHRlcnM9YSx0aGlzLl9zb3J0PWYsdGhpcy5fcGFnZT1kLHRoaXMubG9hZGluZz0hMSx0aGlzLl9zbWFydD0hMSx0aGlzLl9kaXNwbGF5ZWQ9W10sdGhpcy5fY2hhbmdlPW5ldyB3ZSx0aGlzLl9hbGxDaGFuZ2Vz'@;
put 'PW5ldyB3ZSx0aGlzLml0ZXJhdG9yVHJhY2tCeT0oaCxtKT0+bX1nZXQgc21hcnQoKXtyZXR1cm4gdGhpcy5fc21hcnR9Z2V0IGFsbCgpe3JldHVybiB0aGlzLl9hbGx9c2V0IGFsbChhKXt0aGlzLl9hbGw9YSx0aGlzLmVtaXRBbGxDaGFuZ2VzKGEpLHRoaXMuc21hcnQ/dGhpcy5fZmlsdGVy'@;
put 'SXRlbXMoKToodGhpcy5fZGlzcGxheWVkPWEsdGhpcy5lbWl0Q2hhbmdlKCkpfWdldCBkaXNwbGF5ZWQoKXtyZXR1cm4gdGhpcy5fZGlzcGxheWVkfWdldCBjaGFuZ2UoKXtyZXR1cm4gdGhpcy5fY2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBhbGxDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2Fs'@;
put 'bENoYW5nZXMuYXNPYnNlcnZhYmxlKCl9Z2V0IHVuaW5pdGlhbGl6ZWQoKXtyZXR1cm4hdGhpcy5fYWxsfWRlc3Ryb3koKXt0aGlzLl9maWx0ZXJzU3ViJiZ0aGlzLl9maWx0ZXJzU3ViLnVuc3Vic2NyaWJlKCksdGhpcy5fc29ydFN1YiYmdGhpcy5fc29ydFN1Yi51bnN1YnNjcmliZSgpLHRo'@;
put 'aXMuX3BhZ2VTdWImJnRoaXMuX3BhZ2VTdWIudW5zdWJzY3JpYmUoKX1zbWFydGVuVXAoKXt0aGlzLl9zbWFydD0hMCx0aGlzLl9maWx0ZXJzU3ViPXRoaXMuX2ZpbHRlcnMuY2hhbmdlLnN1YnNjcmliZSgoKT0+dGhpcy5fZmlsdGVySXRlbXMoKSksdGhpcy5fc29ydFN1Yj10aGlzLl9zb3J0'@;
put 'LmNoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9zb3J0LmNvbXBhcmF0b3I/dGhpcy5fc29ydEl0ZW1zKCk6dGhpcy5fZmlsdGVySXRlbXMoKX0pLHRoaXMuX3BhZ2VTdWI9dGhpcy5fcGFnZS5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT50aGlzLl9jaGFuZ2VQYWdlKCkpfXJlZnJlc2goKXt0aGlz'@;
put 'LnNtYXJ0JiZ0aGlzLl9maWx0ZXJJdGVtcygpfWNhblRyYWNrQnkoKXtyZXR1cm4hIXRoaXMuZGF0YWdyaWRUcmFja0J5fHxBcnJheS5pc0FycmF5KHRoaXMuYWxsKX10cmFja0J5KGEsZil7aWYodGhpcy5kYXRhZ3JpZFRyYWNrQnkpcmV0dXJuIHRoaXMuZGF0YWdyaWRUcmFja0J5KGEpO2lm'@;
put 'KEFycmF5LmlzQXJyYXkodGhpcy5hbGwpKXJldHVybiBmPWY/P3RoaXMuYWxsLmluZGV4T2YoYSksdGhpcy5pdGVyYXRvclRyYWNrQnkoZixhKTt0aHJvdyBuZXcgRXJyb3IoImltcHJvcGVyIGNhbGwgdG8gSXRlbXMjdHJhY2tCeSIpfWVtaXRDaGFuZ2UoKXt0aGlzLl9jaGFuZ2UubmV4dCh0'@;
put 'aGlzLmRpc3BsYXllZCl9ZW1pdEFsbENoYW5nZXMoYSl7dGhpcy5fYWxsQ2hhbmdlcy5uZXh0KGEpfV9maWx0ZXJJdGVtcygpe3RoaXMudW5pbml0aWFsaXplZHx8KHRoaXMuX2ZpbHRlcmVkPXRoaXMuX2ZpbHRlcnMuaGFzQWN0aXZlRmlsdGVycygpP3RoaXMuX2FsbC5maWx0ZXIoYT0+dGhp'@;
put 'cy5fZmlsdGVycy5hY2NlcHRzKGEpKTp0aGlzLl9hbGwuc2xpY2UoKSx0aGlzLl9wYWdlLnRvdGFsSXRlbXM9dGhpcy5fZmlsdGVyZWQubGVuZ3RoLHRoaXMuX3NvcnRJdGVtcygpKX1fc29ydEl0ZW1zKCl7dGhpcy51bmluaXRpYWxpemVkfHwodGhpcy5fc29ydC5jb21wYXJhdG9yJiZ0aGlz'@;
put 'Ll9maWx0ZXJlZC5zb3J0KChhLGYpPT50aGlzLl9zb3J0LmNvbXBhcmUoYSxmKSksdGhpcy5fY2hhbmdlUGFnZSgpKX1fY2hhbmdlUGFnZSgpe3RoaXMudW5pbml0aWFsaXplZHx8dGhpcy5fcGFnZS5hY3RpdmF0ZWQmJjA9PT10aGlzLl9wYWdlLnNpemV8fCh0aGlzLl9kaXNwbGF5ZWQ9dGhp'@;
put 'cy5fcGFnZS5zaXplPjA/dGhpcy5fZmlsdGVyZWQuc2xpY2UodGhpcy5fcGFnZS5maXJzdEl0ZW0sdGhpcy5fcGFnZS5sYXN0SXRlbSsxKTp0aGlzLl9maWx0ZXJlZCx0aGlzLmVtaXRDaGFuZ2UoKSl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHNy'@;
put 'KGkzKSxzcihjSSksc3IoeTQpKX0sbC5cdTAyNzVwcm92PWhyKHt0b2tlbjpsLGZhY3Rvcnk6bC5cdTAyNzVmYWN9KSxsfSkoKSxfNz0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEsZixkLGgpe3RoaXMudGVtcGxhdGU9YSx0aGlzLmRpZmZlcnM9Zix0aGlzLml0ZW1zPWQsdGhpcy52Y3I9'@;
put 'aCx0aGlzLmRpZmZlcj1udWxsLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSxkLnNtYXJ0ZW5VcCgpLHRoaXMuaXRlcmFibGVQcm94eT1uZXcgUmEodGhpcy52Y3IsdGhpcy50ZW1wbGF0ZSx0aGlzLmRpZmZlcnMpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGQuY2hhbmdlLnN1YnNjcmliZShtPT57'@;
put 'dGhpcy5pdGVyYWJsZVByb3h5Lm5nRm9yT2Y9bSx0aGlzLml0ZXJhYmxlUHJveHkubmdEb0NoZWNrKCl9KSl9c2V0IHJhd0l0ZW1zKGEpe3RoaXMuX3Jhd0l0ZW1zPWF8fFtdfXNldCB0cmFja0J5KGEpe3RoaXMuaXRlbXMuaXRlcmF0b3JUcmFja0J5PWEsdGhpcy5pdGVyYWJsZVByb3h5Lm5n'@;
put 'Rm9yVHJhY2tCeT1hfXN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKGEsZil7cmV0dXJuITB9bmdEb0NoZWNrKCl7dGhpcy5kaWZmZXJ8fCh0aGlzLmRpZmZlcj10aGlzLmRpZmZlcnMuZmluZCh0aGlzLl9yYXdJdGVtcykuY3JlYXRlKHRoaXMuaXRlcmFibGVQcm94eS5uZ0ZvclRyYWNr'@;
put 'QnkpKSx0aGlzLmRpZmZlciYmdGhpcy5kaWZmZXIuZGlmZih0aGlzLl9yYXdJdGVtcykmJih0aGlzLml0ZW1zLmFsbD10aGlzLl9yYXdJdGVtcyl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfX1yZXR1cm4gbC5cdTAyNzVmYWM9'@;
put 'ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydCh6bCkscnQoYnYpLHJ0KF80KSxydChmYSkpfSxsLlx1MDI3NWRpcj1Tcih7dHlwZTpsLHNlbGVjdG9yczpbWyIiLCJjbHJEZ0l0ZW1zIiwiIiwiY2xyRGdJdGVtc09mIiwiIl1dLGlucHV0czp7cmF3SXRlbXM6WyJjbHJEZ0l0ZW1zT2Yi'@;
put 'LCJyYXdJdGVtcyJdLHRyYWNrQnk6WyJjbHJEZ0l0ZW1zVHJhY2tCeSIsInRyYWNrQnkiXX19KSxsfSkoKSxHVT0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEpe3RoaXMuaXRlbXM9YX1nZXQgZW1wdHlEYXRhZ3JpZCgpe3JldHVybiEodGhpcy5pdGVtcy5sb2FkaW5nfHx0aGlzLml0ZW1z'@;
put 'LmRpc3BsYXllZCYmMCE9PXRoaXMuaXRlbXMuZGlzcGxheWVkLmxlbmd0aCl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHJ0KF80KSl9LGwuXHUwMjc1Y21wPWtyKHt0eXBlOmwsc2VsZWN0b3JzOltbImNsci1kZy1wbGFjZWhvbGRlciJdXSxob3N0'@;
put 'VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGYpezImYSYmZ3IoImRhdGFncmlkLXBsYWNlaG9sZGVyLWNvbnRhaW5lciIsITApfSxuZ0NvbnRlbnRTZWxlY3RvcnM6T28sZGVjbHM6NCx2YXJzOjQsY29uc3RzOltbInJvbGUiLCJyb3ciLDEsImRhdGFncmlkLXBsYWNlaG9sZGVyIl0s'@;
put 'WyJjbGFzcyIsImRhdGFncmlkLXBsYWNlaG9sZGVyLWltYWdlIiw0LCJuZ0lmIl0sWyJyb2xlIiwiZ3JpZGNlbGwiLDEsImRhdGFncmlkLXBsYWNlaG9sZGVyLWNvbnRlbnQiXSxbNCwibmdJZiJdLFsxLCJkYXRhZ3JpZC1wbGFjZWhvbGRlci1pbWFnZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihh'@;
put 'LGYpezEmYSYmKFRpKCkseWUoMCwiZGl2IiwwKSx0dCgxLEhSZSwxLDAsImRpdiIsMSkseWUoMiwic3BhbiIsMiksdHQoMyxOUmUsMSwwLCJuZy1jb250ZW50IiwzKSxDZSgpKCkpLDImYSYmKGdyKCJkYXRhZ3JpZC1lbXB0eSIsZi5lbXB0eURhdGFncmlkKSxTZSgxKSxSZSgibmdJZiIsZi5l'@;
put 'bXB0eURhdGFncmlkKSxTZSgyKSxSZSgibmdJZiIsZi5lbXB0eURhdGFncmlkKSl9LGRlcGVuZGVuY2llczpbJGldLGVuY2Fwc3VsYXRpb246Mn0pLGx9KSgpLCRVPSgoKT0+e2NsYXNzIGx7c2V0IHRyaWdnZXJFbChhKXt0aGlzLl90cmlnZ2VyRWw9YX1mb2N1c1RyaWdnZXIoKXt0aGlzLl90'@;
put 'cmlnZ2VyRWwmJnRoaXMuX3RyaWdnZXJFbC5mb2N1cygpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVwcm92PWhyKHt0b2tlbjpsLGZhY3Rvcnk6bC5cdTAyNzVmYWN9KSxsfSkoKSxLVT0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9y'@;
put 'KCl7dGhpcy5faWQ9bmV3IHdlfWdldCBpZCgpe3JldHVybiB0aGlzLl9pZC5hc09ic2VydmFibGUoKX1zZXRJZChhKXt0aGlzLl9pZC5uZXh0KGEpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVwcm92PWhyKHt0b2tlbjpsLGZhY3Rv'@;
put 'cnk6bC5cdTAyNzVmYWN9KSxsfSkoKSxmST0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEsZixkLGgsbSxfLE8pe3RoaXMudG9nZ2xlU2VydmljZT1hLHRoaXMuZWw9Zix0aGlzLmNvbW1vblN0cmluZ3M9ZCx0aGlzLnNpZ25wb3N0SWRTZXJ2aWNlPWgsdGhpcy5zaWducG9zdEZvY3VzTWFu'@;
put 'YWdlcj1tLHRoaXMucGxhdGZvcm1JZD1PLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLmRvY3VtZW50PV99bmdPbkluaXQoKXt0aGlzLnNpZ25wb3N0Rm9jdXNNYW5hZ2VyLnRyaWdnZXJFbD10aGlzLmVsLm5hdGl2ZUVsZW1lbnQsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy50b2dn'@;
put 'bGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLmFyaWFFeHBhbmRlZD1hO2NvbnN0IGY9dGhpcy5pc09wZW47dGhpcy5pc09wZW49YSwhdGhpcy5pc09wZW4mJmYmJnRoaXMuZm9jdXNPbkNsb3NlKCl9KSx0aGlzLnNpZ25wb3N0SWRTZXJ2aWNlLmlkLnN1YnNjcmliZShh'@;
put 'PT50aGlzLmFyaWFDb250cm9sPWEpKSx0aGlzLmFkZERlZmF1bHRBcmlhTGFiZWwodGhpcy5lbC5uYXRpdmVFbGVtZW50KX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9b25TaWducG9zdFRyaWdnZXJDbGljayhhKXt0aGlzLnRv'@;
put 'Z2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGEpfWFkZERlZmF1bHRBcmlhTGFiZWwoYSl7YS5oYXNBdHRyaWJ1dGUoImFyaWEtbGFiZWwiKXx8YS5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnNpZ25wb3N0VG9nZ2xlKX1mb2N1c09uQ2xvc2Uo'@;
put 'KXtIYSh0aGlzLnBsYXRmb3JtSWQpJiYhdGhpcy5pc09wZW4mJnRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PXRoaXMuZG9jdW1lbnQuYm9keSYmdGhpcy5zaWducG9zdEZvY3VzTWFuYWdlci5mb2N1c1RyaWdnZXIoKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy'@;
put 'biBuZXcoYXx8bCkocnQoUWEpLHJ0KFZpKSxydChUYSkscnQoS1UpLHJ0KCRVKSxydChGYSkscnQocWEpKX0sbC5cdTAyNzVkaXI9U3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siIiwiY2xyU2lnbnBvc3RUcmlnZ2VyIiwiIl1dLGhvc3RBdHRyczpbMSwic2lnbnBvc3QtdHJpZ2dlciJdLGhvc3RW'@;
put 'YXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZil7MSZhJiZFdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3JldHVybiBmLm9uU2lnbnBvc3RUcmlnZ2VyQ2xpY2soaCl9KSwyJmEmJihScigiYXJpYS1leHBhbmRlZCIsZi5hcmlhRXhwYW5kZWQpKCJhcmlhLWNvbnRyb2xzIixmLmFyaWFDb250'@;
put 'cm9sKSxncigiYWN0aXZlIixmLmlzT3BlbikpfX0pLGx9KSgpLHFVPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSl7dGhpcy5jb21tb25TdHJpbmdzPWEsdGhpcy51c2VDdXN0b21UcmlnZ2VyPSExfXNldCBjdXN0b21UcmlnZ2VyKGEpe3RoaXMudXNlQ3VzdG9tVHJpZ2dlcj0hIWF9fXJl'@;
put 'dHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHJ0KFRhKSl9LGwuXHUwMjc1Y21wPWtyKHt0eXBlOmwsc2VsZWN0b3JzOltbImNsci1zaWducG9zdCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGYsZCl7aWYoMSZhJiZGbyhkLGZJLDUpLDImYSl7bGV0'@;
put 'IGg7dWkoaD1jaSgpKSYmKGYuY3VzdG9tVHJpZ2dlcj1oLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZil7MiZhJiZncigic2lnbnBvc3QiLCEwKX0sZmVhdHVyZXM6W3JpKFtRYSwkVSx7cHJvdmlkZTp1Nyx1c2VFeGlzdGluZzpWaX0sS1VdKV0sbmdDb250'@;
put 'ZW50U2VsZWN0b3JzOk9vLGRlY2xzOjIsdmFyczoxLGNvbnN0czpbWzQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLCJjbHJTaWducG9zdFRyaWdnZXIiLCIiLDEsInNpZ25wb3N0LWFjdGlvbiIsImJ0biIsImJ0bi1zbWFsbCIsImJ0bi1saW5rIl0sWyJzaGFwZSIsImluZm8tY2lyY2xlIl1d'@;
put 'LHRlbXBsYXRlOmZ1bmN0aW9uKGEsZil7MSZhJiYoVGkoKSx0dCgwLFZSZSwzLDEsIm5nLWNvbnRhaW5lciIsMCksRHIoMSkpLDImYSYmUmUoIm5nSWYiLCFmLnVzZUN1c3RvbVRyaWdnZXIpfSxkZXBlbmRlbmNpZXM6WyRpLGZJLEphXSxlbmNhcHN1bGF0aW9uOjJ9KSxsfSkoKSxYVT0oKCk9'@;
put 'PntjbGFzcyBse2NvbnN0cnVjdG9yKCl7dGhpcy5fZHluYW1pYz0hMX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmNlbGxWaWV3PXRoaXMudGVtcGxhdGVSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KG51bGwpfW5nT25EZXN0cm95KCl7dGhpcy5jZWxsVmlldy5kZXN0cm95KCl9fXJldHVybiBsLlx1'@;
put 'MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NWNtcD1rcih7dHlwZTpsLHNlbGVjdG9yczpbWyJkZy13cmFwcGVkLWNlbGwiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZil7aWYoMSZhJiZObyhCUmUsNSksMiZhKXtsZXQgZDt1aShkPWNpKCkpJiYoZi50ZW1w'@;
put 'bGF0ZVJlZj1kLmZpcnN0KX19LG5nQ29udGVudFNlbGVjdG9yczpPbyxkZWNsczoyLHZhcnM6MCxjb25zdHM6W1siY2VsbFBvcnRhbCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGYpezEmYSYmKFRpKCksdHQoMCxqUmUsMSwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwwLEt1KSl9LGVuY2Fwc3Vs'@;
put 'YXRpb246Mn0pLGx9KSgpLHc0PSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSl7dGhpcy52Y3I9YX1nZXQgX3ZpZXcoKXtyZXR1cm4gdGhpcy53cmFwcGVkSW5qZWN0b3IuZ2V0KFhVLHRoaXMudmNyKS5jZWxsVmlld31uZ09uSW5pdCgpe3RoaXMud3JhcHBlZEluamVjdG9yPW5ldyBlSShY'@;
put 'VSx0aGlzLnZjcil9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHJ0KGZhKSl9LGwuXHUwMjc1Y21wPWtyKHt0eXBlOmwsc2VsZWN0b3JzOltbImNsci1kZy1jZWxsIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZixkKXtpZigxJmEmJkZvKGQs'@;
put 'cVUsNCksMiZhKXtsZXQgaDt1aShoPWNpKCkpJiYoZi5zaWducG9zdD1oKX19LGhvc3RBdHRyczpbInJvbGUiLCJncmlkY2VsbCJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZil7MiZhJiZncigiZGF0YWdyaWQtY2VsbCIsITApKCJkYXRhZ3JpZC1zaWducG9zdC10cmln'@;
put 'Z2VyIixmLnNpZ25wb3N0Lmxlbmd0aD4wKX0sbmdDb250ZW50U2VsZWN0b3JzOk9vLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZil7MSZhJiYoVGkoKSxEcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGx9KSgpLEZzZT0wLHlTPSgoKT0+e2NsYXNzIGwgZXh0ZW5kcyBRY3tj'@;
put 'b25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5leHBhbmRhYmxlSWQ9IiIsdGhpcy5fcmVwbGFjZT1uZXcgT2UoITEpLHRoaXMuX2FuaW1hdGU9bmV3IHdlLEZzZSsrLHRoaXMuZXhwYW5kYWJsZUlkPSJjbHItZGctZXhwYW5kYWJsZS1yb3ctIitGc2V9Z2V0IGV4cGFuZGVkKCl7cmV0dXJuIHRo'@;
put 'aXMuX2V4cGFuZGVkfXNldCBleHBhbmRlZChhKXsoYT0hIWEpIT09dGhpcy5fZXhwYW5kZWQmJih0aGlzLl9leHBhbmRlZD1hLHRoaXMuX2FuaW1hdGUubmV4dCgpLHRoaXMuX2V4cGFuZENoYW5nZS5uZXh0KGEpKX1nZXQgcmVwbGFjZSgpe3JldHVybiB0aGlzLl9yZXBsYWNlLmFzT2JzZXJ2'@;
put 'YWJsZSgpfWdldCBhbmltYXRlKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGUuYXNPYnNlcnZhYmxlKCl9bG9hZGluZ1N0YXRlQ2hhbmdlKGEpe3N1cGVyLmxvYWRpbmdTdGF0ZUNoYW5nZShhKSxhIT09WGMuTE9BRElORyYmdGhpcy5fYW5pbWF0ZS5uZXh0KCl9c2V0UmVwbGFjZShhKXt0aGlzLl9y'@;
put 'ZXBsYWNlLm5leHQoYSl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmwsZmFjdG9yeTpsLlx1MDI3NWZhY30pLGx9KSgpO3ZhciB3Nz1mdW5jdGlvbihsKXtyZXR1cm4gbFtsLkRJU1BMQVk9MF09IkRJU1BM'@;
put 'QVkiLGxbbC5DQUxDVUxBVEU9MV09IkNBTENVTEFURSIsbH0odzd8fHt9KSxzbD1mdW5jdGlvbihsKXtyZXR1cm4gbFtsLk5vbmU9MF09Ik5vbmUiLGxbbC5TaW5nbGU9MV09IlNpbmdsZSIsbFtsLk11bHRpPTJdPSJNdWx0aSIsbH0oc2x8fHt9KTtsZXQgSlU9KCgpPT57Y2xhc3MgbHtjb25z'@;
put 'dHJ1Y3Rvcigpe3RoaXMuX2R5bmFtaWM9ITF9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5yb3dWaWV3PXRoaXMudGVtcGxhdGVSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KG51bGwpfW5nT25EZXN0cm95KCl7dGhpcy5yb3dWaWV3LmRlc3Ryb3koKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9u'@;
put 'KGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1Y21wPWtyKHt0eXBlOmwsc2VsZWN0b3JzOltbImRnLXdyYXBwZWQtcm93Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGYpe2lmKDEmYSYmTm8oelJlLDUpLDImYSl7bGV0IGQ7dWkoZD1jaSgpKSYmKGYudGVtcGxhdGVSZWY9ZC5maXJzdCl9'@;
put 'fSxuZ0NvbnRlbnRTZWxlY3RvcnM6T28sZGVjbHM6Mix2YXJzOjAsY29uc3RzOltbInJvd1BvcnRhbCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGYpezEmYSYmKFRpKCksdHQoMCxVUmUsMSwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwwLEt1KSl9LGVuY2Fwc3VsYXRpb246Mn0pLGx9KSgpLFdI'@;
put 'ZT0wLEM3PSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmKXt0aGlzLl9pdGVtcz1hLHRoaXMuX2ZpbHRlcnM9Zix0aGlzLnByZXNlcnZlU2VsZWN0aW9uPSExLHRoaXMuc2hpZnRQcmVzc2VkPSExLHRoaXMucm93U2VsZWN0aW9uTW9kZT0hMSx0aGlzLnByZXZTZWxlY3Rpb25SZWZzPVtd'@;
put 'LHRoaXMubG9ja2VkUmVmcz1bXSx0aGlzLnZhbHVlQ29sbGVjdG9yPW5ldyB3ZSx0aGlzLl9zZWxlY3Rpb25UeXBlPXNsLk5vbmUsdGhpcy5fY2hhbmdlPW5ldyB3ZSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5pZD0iY2xyLWRnLXNlbGVjdGlvbiIrV0hlKyssdGhpcy5zdWJzY3JpcHRp'@;
put 'b25zLnB1c2godGhpcy5fZmlsdGVycy5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT57IXRoaXMuX3NlbGVjdGFibGV8fHRoaXMucHJlc2VydmVTZWxlY3Rpb258fHRoaXMuY2xlYXJTZWxlY3Rpb24oKX0pKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLl9pdGVtcy5hbGxDaGFuZ2VzLnN1YnNj'@;
put 'cmliZShkPT57Y29uc3QgaD1bXTtzd2l0Y2godGhpcy5zZWxlY3Rpb25UeXBlKXtjYXNlIHNsLk5vbmU6YnJlYWs7Y2FzZSBzbC5TaW5nbGU6e2xldCBtLF89ITE7dGhpcy5jdXJyZW50U2luZ2xlJiYhdGhpcy5wcmV2U2luZ2xlU2VsZWN0aW9uUmVmJiZ0aGlzLl9pdGVtcy5jYW5UcmFja0J5'@;
put 'KCkmJih0aGlzLnByZXZTaW5nbGVTZWxlY3Rpb25SZWY9dGhpcy5faXRlbXMudHJhY2tCeSh0aGlzLmN1cnJlbnRTaW5nbGUpKSxkLmZvckVhY2goKE8sWCk9Pntjb25zdCBhZT10aGlzLl9pdGVtcy50cmFja0J5KE8sWCk7dGhpcy5wcmV2U2luZ2xlU2VsZWN0aW9uUmVmPT09YWUmJihtPU8s'@;
put 'Xz0hMCksdGhpcy5sb2NrZWRSZWZzLmluZGV4T2YoYWUpPi0xJiZoLnB1c2goYWUpfSksdGhpcy5faXRlbXMuc21hcnQmJiFtJiYoXz0hMCksc2V0VGltZW91dCgoKT0+e18mJih0aGlzLmN1cnJlbnRTaW5nbGU9bSl9LDApO2JyZWFrfWNhc2Ugc2wuTXVsdGk6e2xldCBtPXRoaXMuY3VycmVu'@;
put 'dC5zbGljZSgpLF89ITE7dGhpcy5jdXJyZW50Lmxlbmd0aD4wJiZ0aGlzLnByZXZTZWxlY3Rpb25SZWZzLmxlbmd0aCE9PXRoaXMuY3VycmVudC5sZW5ndGgmJnRoaXMuX2l0ZW1zLmNhblRyYWNrQnkoKSYmKHRoaXMucHJldlNlbGVjdGlvblJlZnM9W10sdGhpcy5jdXJyZW50LmZvckVhY2go'@;
put 'Tz0+e3RoaXMucHJldlNlbGVjdGlvblJlZnMucHVzaCh0aGlzLl9pdGVtcy50cmFja0J5KE8pKX0pKSxkLmZvckVhY2goKE8sWCk9Pntjb25zdCBhZT10aGlzLl9pdGVtcy50cmFja0J5KE8sWCk7dGhpcy5sb2NrZWRSZWZzLmluZGV4T2YoYWUpPi0xJiZoLnB1c2goYWUpfSksbS5sZW5ndGg+'@;
put 'MCYmKGQuZm9yRWFjaCgoTyxYKT0+e2NvbnN0IGFlPXRoaXMuX2l0ZW1zLnRyYWNrQnkoTyxYKSxwZT10aGlzLnByZXZTZWxlY3Rpb25SZWZzLmluZGV4T2YoYWUpO3BlPi0xJiYobVtwZV09TyxfPSEwKX0pLHRoaXMuX2l0ZW1zLnNtYXJ0JiYobT1tLmZpbHRlcihPPT5kLmluZGV4T2YoTyk+'@;
put 'LTEpLHRoaXMuY3VycmVudC5sZW5ndGghPT1tLmxlbmd0aCYmKF89ITApKSxzZXRUaW1lb3V0KCgpPT57XyYmKHRoaXMuY3VycmVudD1tKX0sMCkpO2JyZWFrfX10aGlzLmxvY2tlZFJlZnM9aH0pKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnZhbHVlQ29sbGVjdG9yLnBpcGUoWXYo'@;
put 'MCkpLnN1YnNjcmliZSgoKT0+dGhpcy5lbWl0Q2hhbmdlKCkpKX1nZXQgc2VsZWN0aW9uVHlwZSgpe3JldHVybiB0aGlzLl9zZWxlY3Rpb25UeXBlfXNldCBzZWxlY3Rpb25UeXBlKGEpe2EhPT10aGlzLnNlbGVjdGlvblR5cGUmJih0aGlzLl9zZWxlY3Rpb25UeXBlPWEsYT09PXNsLk5vbmU/'@;
put 'ZGVsZXRlIHRoaXMuY3VycmVudDp0aGlzLnVwZGF0ZUN1cnJlbnQoW10sITEpKX1nZXQgY3VycmVudCgpe3JldHVybiB0aGlzLl9jdXJyZW50fXNldCBjdXJyZW50KGEpe3RoaXMudXBkYXRlQ3VycmVudChhLCEwKX1nZXQgY3VycmVudFNpbmdsZSgpe3JldHVybiB0aGlzLl9jdXJyZW50U2lu'@;
put 'Z2xlfXNldCBjdXJyZW50U2luZ2xlKGEpe2EhPT10aGlzLl9jdXJyZW50U2luZ2xlJiYodGhpcy5fY3VycmVudFNpbmdsZT1hLHRoaXMuX2l0ZW1zLmNhblRyYWNrQnkoKSYmYSYmKHRoaXMucHJldlNpbmdsZVNlbGVjdGlvblJlZj10aGlzLl9pdGVtcy50cmFja0J5KGEpKSx0aGlzLmVtaXRD'@;
put 'aGFuZ2UoKSl9Z2V0IGNoYW5nZSgpe3JldHVybiB0aGlzLl9jaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IF9zZWxlY3RhYmxlKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGlvblR5cGU9PT1zbC5NdWx0aXx8dGhpcy5fc2VsZWN0aW9uVHlwZT09PXNsLlNpbmdsZX1jbGVhclNlbGVjdGlvbigpe3Ro'@;
put 'aXMuX2N1cnJlbnQ9W10sdGhpcy5wcmV2U2VsZWN0aW9uUmVmcz1bXSx0aGlzLnByZXZTaW5nbGVTZWxlY3Rpb25SZWY9bnVsbCx0aGlzLl9jdXJyZW50U2luZ2xlPW51bGwsdGhpcy5lbWl0Q2hhbmdlKCl9ZGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJz'@;
put 'Y3JpYmUoKSl9dXBkYXRlQ3VycmVudChhLGYpe3RoaXMuX2N1cnJlbnQ9YSxmJiZ0aGlzLnZhbHVlQ29sbGVjdG9yLm5leHQoYSl9aXNTZWxlY3RlZChhKXtyZXR1cm4gdGhpcy5fc2VsZWN0aW9uVHlwZT09PXNsLlNpbmdsZT90aGlzLmN1cnJlbnRTaW5nbGU9PT1hOnRoaXMuX3NlbGVjdGlv'@;
put 'blR5cGU9PT1zbC5NdWx0aSYmdGhpcy5jdXJyZW50LmluZGV4T2YoYSk+PTB9c2V0U2VsZWN0ZWQoYSxmKXtjb25zdCBkPXRoaXMuY3VycmVudD90aGlzLmN1cnJlbnQuaW5kZXhPZihhKTotMTtzd2l0Y2godGhpcy5fc2VsZWN0aW9uVHlwZSl7Y2FzZSBzbC5Ob25lOmNhc2Ugc2wuU2luZ2xl'@;
put 'OmJyZWFrO2Nhc2Ugc2wuTXVsdGk6ZD49MCYmIWY/dGhpcy5kZXNlbGVjdEl0ZW0oZCk6ZDwwJiZmJiZ0aGlzLnNlbGVjdEl0ZW0oYSl9fWlzQWxsU2VsZWN0ZWQoKXtpZih0aGlzLl9zZWxlY3Rpb25UeXBlIT09c2wuTXVsdGl8fCF0aGlzLl9pdGVtcy5kaXNwbGF5ZWQpcmV0dXJuITE7Y29u'@;
put 'c3QgYT10aGlzLl9pdGVtcy5kaXNwbGF5ZWQuZmlsdGVyKGg9PiExPT09dGhpcy5pc0xvY2tlZChoKSk7cmV0dXJuIShhLmxlbmd0aDwxKSYmYS5maWx0ZXIoaD0+dGhpcy5jdXJyZW50LmluZGV4T2YoaCk+LTEpLmxlbmd0aD09PWEubGVuZ3RofWxvY2tJdGVtKGEsZil7aWYodGhpcy5jYW5J'@;
put 'dEJlTG9ja2VkKCkpe2NvbnN0IGQ9dGhpcy5faXRlbXMudHJhY2tCeShhKTshMD09PWY/dGhpcy5sb2NrZWRSZWZzLnB1c2goZCk6dGhpcy5sb2NrZWRSZWZzPXRoaXMubG9ja2VkUmVmcy5maWx0ZXIoaD0+ZCE9PWgpfX1pc0xvY2tlZChhKXtpZih0aGlzLmNhbkl0QmVMb2NrZWQoKSl7Y29u'@;
put 'c3QgZj10aGlzLl9pdGVtcy50cmFja0J5KGEpO3JldHVybiB0aGlzLmxvY2tlZFJlZnMuaW5kZXhPZihmKT4tMX1yZXR1cm4hMX10b2dnbGVBbGwoKXt0aGlzLl9zZWxlY3Rpb25UeXBlPT09c2wuTm9uZXx8dGhpcy5fc2VsZWN0aW9uVHlwZT09PXNsLlNpbmdsZXx8KHRoaXMuaXNBbGxTZWxl'@;
put 'Y3RlZCgpP3RoaXMuX2l0ZW1zLmRpc3BsYXllZC5mb3JFYWNoKGE9Pntjb25zdCBmPXRoaXMuY3VycmVudC5pbmRleE9mKGEpO2Y+LTEmJiExPT09dGhpcy5pc0xvY2tlZChhKSYmdGhpcy5kZXNlbGVjdEl0ZW0oZil9KTp0aGlzLl9pdGVtcy5kaXNwbGF5ZWQuZm9yRWFjaChhPT57dGhpcy5j'@;
put 'dXJyZW50LmluZGV4T2YoYSk8MCYmITE9PT10aGlzLmlzTG9ja2VkKGEpJiZ0aGlzLnNlbGVjdEl0ZW0oYSl9KSl9c2VsZWN0SXRlbShhKXt0aGlzLmN1cnJlbnQ9dGhpcy5jdXJyZW50LmNvbmNhdChhKSx0aGlzLl9pdGVtcy5jYW5UcmFja0J5KCkmJnRoaXMucHJldlNlbGVjdGlvblJlZnMu'@;
put 'cHVzaCh0aGlzLl9pdGVtcy50cmFja0J5KGEpKX1kZXNlbGVjdEl0ZW0oYSl7aWYodGhpcy5jdXJyZW50PXRoaXMuY3VycmVudC5zbGljZSgwLGEpLmNvbmNhdCh0aGlzLmN1cnJlbnQuc2xpY2UoYSsxKSksYTx0aGlzLnByZXZTZWxlY3Rpb25SZWZzLmxlbmd0aCl7Y29uc3QgZj10aGlzLnBy'@;
put 'ZXZTZWxlY3Rpb25SZWZzLnNwbGljZShhLDEpO3RoaXMubG9ja2VkUmVmcz10aGlzLmxvY2tlZFJlZnMuZmlsdGVyKGQ9PmQhPT1mWzBdKX19Y2FuSXRCZUxvY2tlZCgpe3JldHVybiB0aGlzLl9zZWxlY3Rpb25UeXBlIT09c2wuTm9uZSYmdGhpcy5faXRlbXMuY2FuVHJhY2tCeSgpfWVtaXRD'@;
put 'aGFuZ2UoKXt0aGlzLl9zZWxlY3Rpb25UeXBlPT09c2wuU2luZ2xlP3RoaXMuX2NoYW5nZS5uZXh0KHRoaXMuY3VycmVudFNpbmdsZSk6dGhpcy5fc2VsZWN0aW9uVHlwZT09PXNsLk11bHRpJiZ0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLmN1cnJlbnQpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVu'@;
put 'Y3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShzcihfNCksc3IoaTMpKX0sbC5cdTAyNzVwcm92PWhyKHt0b2tlbjpsLGZhY3Rvcnk6bC5cdTAyNzVmYWN9KSxsfSkoKSxRVT0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEpe3RoaXMuX3ZpZXc9bmV3IE9lKHc3LkRJU1BMQVkpLHRoaXMuc3Vi'@;
put 'c2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChhLmZpbHRlclJlbmRlclN0ZXBzKE9kLkNBTENVTEFURV9NT0RFX09OKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3ZpZXcubmV4dCh3Ny5DQUxDVUxBVEUpKSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goYS5maWx0ZXJSZW5kZXJT'@;
put 'dGVwcyhPZC5DQUxDVUxBVEVfTU9ERV9PRkYpLnN1YnNjcmliZSgoKT0+dGhpcy5fdmlldy5uZXh0KHc3LkRJU1BMQVkpKSl9Z2V0IHZpZXcoKXtyZXR1cm4gdGhpcy5fdmlldy5hc09ic2VydmFibGUoKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5z'@;
put 'dWJzY3JpYmUoKSl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHNyKFhnKSl9LGwuXHUwMjc1cHJvdj1ocih7dG9rZW46bCxmYWN0b3J5OmwuXHUwMjc1ZmFjfSksbH0pKCksZVo9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhKXt0aGlzLnNlbGVj'@;
put 'dGlvbj1hfW9uU2VsZWN0aW9uQ2VsbENsaWNrKGEpe3RoaXMuc2VsZWN0aW9uLnJvd1NlbGVjdGlvbk1vZGV8fCJMQUJFTCIhPT1hLnRhcmdldC50YWdOYW1lJiYiSU5QVVQiIT09YS50YXJnZXQudGFnTmFtZSYmYS50YXJnZXQucXVlcnlTZWxlY3RvcigiaW5wdXQiKS5jbGljaygpfX1yZXR1'@;
put 'cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChDNykpfSxsLlx1MDI3NWRpcj1Tcih7dHlwZTpsLHNlbGVjdG9yczpbWyIiLDgsImRhdGFncmlkLXNlbGVjdCJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxmKXsxJmEmJkV0KCJjbGljayIsZnVuY3Rpb24o'@;
put 'aCl7cmV0dXJuIGYub25TZWxlY3Rpb25DZWxsQ2xpY2soaCl9KX19KSxsfSkoKSxkST0wLFFnPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmLGQsaCxtLF8sTyxYLGFlLHBlLGJlLHhlKXt0aGlzLnNlbGVjdGlvbj1hLHRoaXMucm93QWN0aW9uU2VydmljZT1mLHRoaXMuZ2xvYmFsRXhw'@;
put 'YW5kYWJsZT1kLHRoaXMuZXhwYW5kPWgsdGhpcy5kZXRhaWxTZXJ2aWNlPW0sdGhpcy5kaXNwbGF5TW9kZT1fLHRoaXMudmNyPU8sdGhpcy5yZW5kZXJlcj1YLHRoaXMuZWw9YWUsdGhpcy5jb21tb25TdHJpbmdzPXBlLHRoaXMuaXRlbXM9YmUsdGhpcy5kb2N1bWVudD14ZSx0aGlzLnNlbGVj'@;
put 'dGVkQ2hhbmdlZD1uZXcgeHIoITEpLHRoaXMuZXhwYW5kZWRDaGFuZ2U9bmV3IHhyKCExKSx0aGlzLmRpc3BsYXlDZWxscz0hMSx0aGlzLmV4cGFuZEFuaW1hdGlvblRyaWdnZXI9ITEsdGhpcy5TRUxFQ1RJT05fVFlQRT1zbCx0aGlzLml0ZW1DaGFuZ2VzPW5ldyB4RCgxKSx0aGlzLl9zZWxl'@;
put 'Y3RlZD0hMSx0aGlzLl9kZXRhaWxPcGVuTGFiZWw9IiIsdGhpcy5fZGV0YWlsQ2xvc2VMYWJlbD0iIix0aGlzLl9yb3dBcmlhTGFiZWw9IiIsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuX3NlbGVjdGFibGU9ITAsZEkrKyx0aGlzLmlkPSJjbHItZGctcm93IitkSSx0aGlzLnJhZGlvSWQ9'@;
put 'ImNsci1kZy1yb3ctcmQiK2RJLHRoaXMuY2hlY2tib3hJZD0iY2xyLWRnLXJvdy1jYiIrZEksdGhpcy5leHBhbmRhYmxlSWQ9aC5leHBhbmRhYmxlSWQsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goQ3YodGhpcy5leHBhbmQucmVwbGFjZSx0aGlzLmV4cGFuZC5leHBhbmRDaGFuZ2UpLnN1YnNj'@;
put 'cmliZSgoW1ZlLFplXSk9PntWZSYmWmU/KHRoaXMucmVwbGFjZWQ9ITAsdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImRhdGFncmlkLXJvdy1yZXBsYWNlZCIpKToodGhpcy5yZXBsYWNlZD0hMSx0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwu'@;
put 'bmF0aXZlRWxlbWVudCwiZGF0YWdyaWQtcm93LXJlcGxhY2VkIikpfSkpfWdldCBpdGVtKCl7cmV0dXJuIHRoaXMuX2l0ZW19c2V0IGl0ZW0oYSl7dGhpcy5faXRlbT1hLHRoaXMuaXRlbUNoYW5nZXMubmV4dChhKSx0aGlzLmNsckRnU2VsZWN0YWJsZT10aGlzLl9zZWxlY3RhYmxlfWdldCBj'@;
put 'bHJEZ1NlbGVjdGFibGUoKXtyZXR1cm4hdGhpcy5zZWxlY3Rpb24uaXNMb2NrZWQodGhpcy5pdGVtKX1zZXQgY2xyRGdTZWxlY3RhYmxlKGEpe3RoaXMuaXRlbSYmdGhpcy5zZWxlY3Rpb24ubG9ja0l0ZW0odGhpcy5pdGVtLCJmYWxzZSI9PT1hfHwhMT09PWEpLHRoaXMuX3NlbGVjdGFibGU9'@;
put 'YX1nZXQgc2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PXNsLk5vbmU/dGhpcy5fc2VsZWN0ZWQ6dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZCh0aGlzLml0ZW0pfXNldCBzZWxlY3RlZChhKXt0aGlzLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09c2wu'@;
put 'Tm9uZT90aGlzLl9zZWxlY3RlZD1hOihhJiZ0aGlzLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09c2wuTXVsdGk/dGhpcy5yYW5nZVNlbGVjdCgpOnRoaXMuc2VsZWN0aW9uLnJhbmdlU3RhcnQ9bnVsbCx0aGlzLnNlbGVjdGlvbi5zZXRTZWxlY3RlZCh0aGlzLml0ZW0sYSkpfWdldCBleHBh'@;
put 'bmRlZCgpe3JldHVybiB0aGlzLmV4cGFuZC5leHBhbmRlZH1zZXQgZXhwYW5kZWQoYSl7dGhpcy5leHBhbmQuZXhwYW5kZWQ9YX1nZXQgY2xyRGdEZXRhaWxPcGVuTGFiZWwoKXtyZXR1cm4gdGhpcy5fZGV0YWlsT3BlbkxhYmVsP3RoaXMuX2RldGFpbE9wZW5MYWJlbDp0aGlzLmNvbW1vblN0'@;
put 'cmluZ3Mua2V5cy5vcGVufXNldCBjbHJEZ0RldGFpbE9wZW5MYWJlbChhKXt0aGlzLl9kZXRhaWxPcGVuTGFiZWw9YX1nZXQgY2xyRGdEZXRhaWxDbG9zZUxhYmVsKCl7cmV0dXJuIHRoaXMuX2RldGFpbENsb3NlTGFiZWw/dGhpcy5fZGV0YWlsQ2xvc2VMYWJlbDp0aGlzLmNvbW1vblN0cmlu'@;
put 'Z3Mua2V5cy5jbG9zZX1zZXQgY2xyRGdEZXRhaWxDbG9zZUxhYmVsKGEpe3RoaXMuX2RldGFpbENsb3NlTGFiZWw9YX1nZXQgY2xyRGdSb3dBcmlhTGFiZWwoKXtyZXR1cm4gdGhpcy5fcm93QXJpYUxhYmVsP3RoaXMuX3Jvd0FyaWFMYWJlbDp0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5zZWxl'@;
put 'Y3R9c2V0IGNsckRnUm93QXJpYUxhYmVsKGEpe3RoaXMuX3Jvd0FyaWFMYWJlbD1hfWdldCBfdmlldygpe3JldHVybiB0aGlzLndyYXBwZWRJbmplY3Rvci5nZXQoSlUsdGhpcy52Y3IpLnJvd1ZpZXd9bmdPbkluaXQoKXt0aGlzLndyYXBwZWRJbmplY3Rvcj1uZXcgZUkoSlUsdGhpcy52Y3Ip'@;
put 'LHRoaXMuc2VsZWN0aW9uLmxvY2tJdGVtKHRoaXMuaXRlbSwhMT09PXRoaXMuY2xyRGdTZWxlY3RhYmxlKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLmRnQ2VsbHMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9Pnt0aGlzLmRnQ2VsbHMuZm9yRWFjaChhPT57YS5fdmlldy5kZXN0cm95ZWR8fHRo'@;
put 'aXMuX3Njcm9sbGFibGVDZWxscy5pbnNlcnQoYS5fdmlldyl9KX0pfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuZGlzcGxheU1vZGUudmlldy5zdWJzY3JpYmUoYT0+e2ZvcihsZXQgZj10aGlzLl9zY3JvbGxhYmxlQ2VsbHMubGVuZ3RoO2Y+MDtmLS0p'@;
put 'dGhpcy5fc2Nyb2xsYWJsZUNlbGxzLmRldGFjaCgpO2ZvcihsZXQgZj10aGlzLl9jYWxjdWxhdGVkQ2VsbHMubGVuZ3RoO2Y+MDtmLS0pdGhpcy5fY2FsY3VsYXRlZENlbGxzLmRldGFjaCgpO2E9PT13Ny5DQUxDVUxBVEU/KHRoaXMuZGlzcGxheUNlbGxzPSExLHRoaXMuZGdDZWxscy5mb3JF'@;
put 'YWNoKGY9PntmLl92aWV3LmRlc3Ryb3llZHx8dGhpcy5fY2FsY3VsYXRlZENlbGxzLmluc2VydChmLl92aWV3KX0pKToodGhpcy5kaXNwbGF5Q2VsbHM9ITAsdGhpcy5kZ0NlbGxzLmZvckVhY2goZj0+e2YuX3ZpZXcuZGVzdHJveWVkfHx0aGlzLl9zY3JvbGxhYmxlQ2VsbHMuaW5zZXJ0KGYu'@;
put 'X3ZpZXcpfSkpfSksdGhpcy5leHBhbmQuYW5pbWF0ZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmV4cGFuZEFuaW1hdGlvblRyaWdnZXI9IXRoaXMuZXhwYW5kQW5pbWF0aW9uVHJpZ2dlcn0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUo'@;
put 'KSl9dG9nZ2xlKGE9IXRoaXMuc2VsZWN0ZWQpe2EhPT10aGlzLnNlbGVjdGVkJiYodGhpcy5zZWxlY3RlZD1hLHRoaXMuc2VsZWN0ZWRDaGFuZ2VkLmVtaXQoYSkpfXRvZ2dsZUV4cGFuZCgpe3RoaXMuZXhwYW5kLmV4cGFuZGFibGUmJih0aGlzLmV4cGFuZEFuaW1hdGlvbi51cGRhdGVTdGFy'@;
put 'dEhlaWdodCgpLHRoaXMuZXhwYW5kZWQ9IXRoaXMuZXhwYW5kZWQsdGhpcy5leHBhbmRlZENoYW5nZS5lbWl0KHRoaXMuZXhwYW5kZWQpKX1jbGVhclJhbmdlcyhhKXthLnNoaWZ0S2V5JiYodGhpcy5kb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKSwtMSE9PXdpbmRv'@;
put 'dy5uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIkZpcmVmb3giKSYmKGEucHJldmVudERlZmF1bHQoKSx0aGlzLnRvZ2dsZSghMCkpKX1zZWxlY3RSb3coYT0hdGhpcy5zZWxlY3RlZCxmKXsiTEFCRUwiIT09Zi50YXJnZXQudGFnTmFtZSYmKHRoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5'@;
put 'cGU9PT10aGlzLlNFTEVDVElPTl9UWVBFLlNpbmdsZT90aGlzLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlPXRoaXMuaXRlbTp0aGlzLnRvZ2dsZShhKSl9cmFuZ2VTZWxlY3QoKXtjb25zdCBhPXRoaXMuaXRlbXMuZGlzcGxheWVkO2lmKCFhKXJldHVybjtjb25zdCBmPWEuaW5kZXhPZih0aGlz'@;
put 'LnNlbGVjdGlvbi5yYW5nZVN0YXJ0KTtpZih0aGlzLnNlbGVjdGlvbi5yYW5nZVN0YXJ0JiZ0aGlzLnNlbGVjdGlvbi5jdXJyZW50LmluY2x1ZGVzKHRoaXMuc2VsZWN0aW9uLnJhbmdlU3RhcnQpJiZ0aGlzLnNlbGVjdGlvbi5zaGlmdFByZXNzZWQmJi0xIT09Zil7Y29uc3QgZD1hLmluZGV4'@;
put 'T2YodGhpcy5pdGVtKSxoPW5ldyBTZXQodGhpcy5zZWxlY3Rpb24uY3VycmVudC5jb25jYXQoYS5zbGljZShNYXRoLm1pbihmLGQpLE1hdGgubWF4KGYsZCkrMSkpKTt0aGlzLnNlbGVjdGlvbi5jbGVhclNlbGVjdGlvbigpLHRoaXMuc2VsZWN0aW9uLmN1cnJlbnQucHVzaCguLi5oKX1lbHNl'@;
put 'IHRoaXMuc2VsZWN0aW9uLnJhbmdlU3RhcnQ9dGhpcy5pdGVtfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChDNykscnQoZzcpLHJ0KHk3KSxydCh5UykscnQoVGQpLHJ0KFFVKSxydChmYSkscnQoam8pLHJ0KFZpKSxydChUYSkscnQoXzQpLHJ0'@;
put 'KEZhKSl9LGwuXHUwMjc1Y21wPWtyKHt0eXBlOmwsc2VsZWN0b3JzOltbImNsci1kZy1yb3ciXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxmLGQpe2lmKDEmYSYmRm8oZCx3NCw0KSwyJmEpe2xldCBoO3VpKGg9Y2koKSkmJihmLmRnQ2VsbHM9aCl9fSx2aWV3UXVlcnk6ZnVuY3Rpb24o'@;
put 'YSxmKXtpZigxJmEmJihObyhYRCw1KSxObyhaUmUsNSksTm8oWVJlLDUsZmEpLE5vKFdSZSw1LGZhKSxObyhHUmUsNSxmYSkpLDImYSl7bGV0IGQ7dWkoZD1jaSgpKSYmKGYuZXhwYW5kQW5pbWF0aW9uPWQuZmlyc3QpLHVpKGQ9Y2koKSkmJihmLmRldGFpbEJ1dHRvbj1kLmZpcnN0KSx1aShk'@;
put 'PWNpKCkpJiYoZi5fc3RpY2t5Q2VsbHM9ZC5maXJzdCksdWkoZD1jaSgpKSYmKGYuX3Njcm9sbGFibGVDZWxscz1kLmZpcnN0KSx1aShkPWNpKCkpJiYoZi5fY2FsY3VsYXRlZENlbGxzPWQuZmlyc3QpfX0saG9zdEF0dHJzOlsicm9sZSIsInJvd2dyb3VwIl0saG9zdFZhcnM6NSxob3N0Qmlu'@;
put 'ZGluZ3M6ZnVuY3Rpb24oYSxmKXsyJmEmJihScigiYXJpYS1vd25zIixmLmlkKSxncigiZGF0YWdyaWQtcm93IiwhMCkoImRhdGFncmlkLXNlbGVjdGVkIixmLnNlbGVjdGVkKSl9LGlucHV0czp7aXRlbTpbImNsckRnSXRlbSIsIml0ZW0iXSxjbHJEZ1NlbGVjdGFibGU6ImNsckRnU2VsZWN0'@;
put 'YWJsZSIsc2VsZWN0ZWQ6WyJjbHJEZ1NlbGVjdGVkIiwic2VsZWN0ZWQiXSxleHBhbmRlZDpbImNsckRnRXhwYW5kZWQiLCJleHBhbmRlZCJdLGNsckRnRGV0YWlsT3BlbkxhYmVsOiJjbHJEZ0RldGFpbE9wZW5MYWJlbCIsY2xyRGdEZXRhaWxDbG9zZUxhYmVsOiJjbHJEZ0RldGFpbENsb3Nl'@;
put 'TGFiZWwiLGNsckRnUm93QXJpYUxhYmVsOiJjbHJEZ1Jvd0FyaWFMYWJlbCJ9LG91dHB1dHM6e3NlbGVjdGVkQ2hhbmdlZDoiY2xyRGdTZWxlY3RlZENoYW5nZSIsZXhwYW5kZWRDaGFuZ2U6ImNsckRnRXhwYW5kZWRDaGFuZ2UifSxmZWF0dXJlczpbcmkoW3lTLHtwcm92aWRlOlFjLHVzZUV4'@;
put 'aXN0aW5nOnlTfSx7cHJvdmlkZTpRQyx1c2VFeGlzdGluZzp5U31dKV0sbmdDb250ZW50U2VsZWN0b3JzOmJMZSxkZWNsczo5LHZhcnM6Myxjb25zdHM6W1siY2xhc3MiLCJkYXRhZ3JpZC1yb3ctY2xpY2thYmxlIiwzLCJtb3VzZWRvd24iLCJjbGljayIsNCwibmdJZiJdLFszLCJjbHJFeHBh'@;
put 'bmRUcmlnZ2VyIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbImRldGFpbCIsIiJdLFsicm93Q29udGVudCIsIiJdLFsiY2FsY3VsYXRlZENlbGxzIiwiIl0sWzEsImRhdGFncmlkLXJvdy1jbGlja2FibGUiLDMsIm1vdXNlZG93biIsImNsaWNrIl0sWzMsImNsckV4cGFuZFRyaWdnZXIiXSxbMywi'@;
put 'bmdUZW1wbGF0ZU91dGxldCJdLFsicm9sZSIsInJvdyIsMSwiZGF0YWdyaWQtcm93LW1hc3RlciIsImRhdGFncmlkLXJvdy1mbGV4IiwzLCJpZCJdLFsxLCJkYXRhZ3JpZC1yb3ctc3RpY2t5Il0sWyJzdGlja3lDZWxscyIsIiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1zZWxlY3QgZGF0YWdyaWQt'@;
put 'Zml4ZWQtY29sdW1uIGRhdGFncmlkLWNlbGwiLCJyb2xlIiwiZ3JpZGNlbGwiLDMsIm5nQ2xhc3MiLDQsIm5nSWYiXSxbImNsYXNzIiwiZGF0YWdyaWQtcm93LWFjdGlvbnMgZGF0YWdyaWQtZml4ZWQtY29sdW1uIGRhdGFncmlkLWNlbGwiLCJyb2xlIiwiZ3JpZGNlbGwiLDQsIm5nSWYiXSxb'@;
put 'ImNsYXNzIiwiZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCBkYXRhZ3JpZC1maXhlZC1jb2x1bW4gZGF0YWdyaWQtY2VsbCIsInJvbGUiLCJncmlkY2VsbCIsNCwibmdJZiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1kZXRhaWwtY2FyZXQgZGF0YWdyaWQtZml4ZWQtY29sdW1uIGRhdGFncmlkLWNl'@;
put 'bGwiLDQsIm5nSWYiXSxbMSwiZGF0YWdyaWQtcm93LXNjcm9sbGFibGUiLDMsIm5nQ2xhc3MiXSxbMSwiZGF0YWdyaWQtc2Nyb2xsaW5nLWNlbGxzIl0sWyJzY3JvbGxhYmxlQ2VsbHMiLCIiXSxbInJvbGUiLCJncmlkY2VsbCIsMSwiZGF0YWdyaWQtc2VsZWN0IiwiZGF0YWdyaWQtZml4ZWQt'@;
put 'Y29sdW1uIiwiZGF0YWdyaWQtY2VsbCIsMywibmdDbGFzcyJdLFsidHlwZSIsImNoZWNrYm94IiwiY2xyQ2hlY2tib3giLCIiLDMsIm5nTW9kZWwiLCJpZCIsImRpc2FibGVkIiwibmdNb2RlbENoYW5nZSJdLFsxLCJjbHItY29udHJvbC1sYWJlbCIsImNsci1jb2wtbnVsbCIsMywiZm9yIiwi'@;
put 'Y2xpY2siXSxbMSwiY2xyLXNyLW9ubHkiXSxbInR5cGUiLCJyYWRpbyIsImNsclJhZGlvIiwiIiwzLCJpZCIsIm5hbWUiLCJ2YWx1ZSIsIm5nTW9kZWwiLCJjaGVja2VkIiwiZGlzYWJsZWQiLCJuZ01vZGVsQ2hhbmdlIl0sWzEsImNsci1jb250cm9sLWxhYmVsIiwiY2xyLWNvbC1udWxsIiwz'@;
put 'LCJmb3IiXSxbInJvbGUiLCJncmlkY2VsbCIsMSwiZGF0YWdyaWQtcm93LWFjdGlvbnMiLCJkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLCJkYXRhZ3JpZC1jZWxsIl0sWyJyb2xlIiwiZ3JpZGNlbGwiLDEsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQiLCJkYXRhZ3JpZC1maXhlZC1jb2x1bW4i'@;
put 'LCJkYXRhZ3JpZC1jZWxsIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJkYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0LWJ1dHRvbiIsMywiY2xpY2siLDQsIm5nSWYiXSxbImNsclNtYWxsIiwiIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJkYXRhZ3JpZC1leHBhbmRhYmxlLWNh'@;
put 'cmV0LWJ1dHRvbiIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUiLDEsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtaWNvbiJdLFsiY2xyU21hbGwiLCIiXSxbMSwiZGF0YWdyaWQtZGV0YWlsLWNhcmV0IiwiZGF0YWdyaWQtZml4ZWQtY29sdW1uIiwiZGF0YWdyaWQtY2VsbCJdLFsidHlw'@;
put 'ZSIsImJ1dHRvbiIsImFyaWEtaGFzcG9wdXAiLCJkaWFsb2ciLDEsImRhdGFncmlkLWRldGFpbC1jYXJldC1idXR0b24iLDMsImNsaWNrIl0sWyJkZXRhaWxCdXR0b24iLCIiXSxbInNoYXBlIiwiYW5nbGUtZG91YmxlIiwxLCJkYXRhZ3JpZC1kZXRhaWwtY2FyZXQtaWNvbiJdXSx0ZW1wbGF0'@;
put 'ZTpmdW5jdGlvbihhLGYpezEmYSYmKFRpKHlMZSksdHQoMCxKUmUsMywyLCJkaXYiLDApLHR0KDEsZUxlLDIsMiwiY2xyLWV4cGFuZGFibGUtYW5pbWF0aW9uIiwxKSx0dCgyLG5MZSwxLDEsbnVsbCwyKSx0dCgzLHJMZSwxLDAsIm5nLXRlbXBsYXRlIixudWxsLDMsS3UpLHR0KDUsdkxlLDE2'@;
put 'LDEzLCJuZy10ZW1wbGF0ZSIsbnVsbCw0LEt1KSxlcyg3LG51bGwsNSkpLDImYSYmKFJlKCJuZ0lmIixmLnNlbGVjdGlvbi5yb3dTZWxlY3Rpb25Nb2RlKSxTZSgxKSxSZSgibmdJZiIsIWYuc2VsZWN0aW9uLnJvd1NlbGVjdGlvbk1vZGUmJmYuZXhwYW5kLmV4cGFuZGFibGUpLFNlKDEpLFJl'@;
put 'KCJuZ0lmIiwhZi5zZWxlY3Rpb24ucm93U2VsZWN0aW9uTW9kZSYmIWYuZXhwYW5kLmV4cGFuZGFibGUpKX0sZGVwZW5kZW5jaWVzOltYRCxWMCxCVSxSaCwkaSx5ZCxlWix5dSxSMCxCMCxXYSx6YSxlbCxCRCxpcyxqVSxKYV0sZW5jYXBzdWxhdGlvbjoyfSksbH0pKCk7dmFyIHowPWZ1bmN0'@;
put 'aW9uKGwpe3JldHVybiBsW2wuV0lEVEg9MF09IldJRFRIIixsW2wuSElEREVOPTFdPSJISURERU4iLGx9KHowfHx7fSk7Y29uc3QgSHNlPU9iamVjdC5rZXlzKHowKS5tYXAobD0+ejBbbF0pLmZpbHRlcihsPT5sPT09cGFyc2VJbnQobCwxMCkpO2xldCBvMz0oKCk9PntjbGFzcyBse2NvbnN0'@;
put 'cnVjdG9yKCl7dGhpcy5jb2x1bW5zPVtdLHRoaXMuX2NhY2hlPVtdfWdldCBjb2x1bW5TdGF0ZXMoKXtyZXR1cm4gdGhpcy5jb2x1bW5zLm1hcChhPT5hLnZhbHVlKX1nZXQgaGFzSGlkZWFibGVDb2x1bW5zKCl7cmV0dXJuIHRoaXMuY29sdW1uU3RhdGVzLmZpbHRlcihhPT5hLmhpZGVhYmxl'@;
put 'KS5sZW5ndGg+MH1jYWNoZSgpe3RoaXMuX2NhY2hlPXRoaXMuY29sdW1ucy5tYXAoYT0+e2NvbnN0IGY9ey4uLmEudmFsdWV9O3JldHVybiBkZWxldGUgZi5jaGFuZ2VzLGZ9KX1oYXNDYWNoZSgpe3JldHVybiEhdGhpcy5fY2FjaGUubGVuZ3RofXJlc2V0VG9MYXN0Q2FjaGUoKXt0aGlzLl9j'@;
put 'YWNoZS5mb3JFYWNoKChhLGYpPT57dGhpcy5jb2x1bW5zW2ZdLm5leHQoey4uLmEsY2hhbmdlczpIc2V9KX0pLHRoaXMuX2NhY2hlPVtdfWVtaXRTdGF0ZUNoYW5nZUF0KGEsZil7dGhpcy5jb2x1bW5zW2FdJiZ0aGlzLmVtaXRTdGF0ZUNoYW5nZSh0aGlzLmNvbHVtbnNbYV0sZil9ZW1pdFN0'@;
put 'YXRlQ2hhbmdlKGEsZil7YS5uZXh0KHsuLi5hLnZhbHVlLC4uLmZ9KX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1cHJvdj1ocih7dG9rZW46bCxmYWN0b3J5OmwuXHUwMjc1ZmFjfSksbH0pKCksTnNlPSgoKT0+e2NsYXNzIGx7Y29u'@;
put 'c3RydWN0b3IoYSxmLGQsaCl7dGhpcy5maWx0ZXJzPWEsdGhpcy5zb3J0PWYsdGhpcy5wYWdlPWQsdGhpcy5kZWJvdW5jZXI9aCx0aGlzLmNoYW5nZT10aGlzLmRlYm91bmNlci5jaGFuZ2UucGlwZShFZSgoKT0+dGhpcy5zdGF0ZSkpfWdldCBzdGF0ZSgpe2NvbnN0IGE9e307dGhpcy5wYWdl'@;
put 'LnNpemU+MCYmKGEucGFnZT17ZnJvbTp0aGlzLnBhZ2UuZmlyc3RJdGVtLHRvOnRoaXMucGFnZS5sYXN0SXRlbSxzaXplOnRoaXMucGFnZS5zaXplLGN1cnJlbnQ6dGhpcy5wYWdlLmN1cnJlbnR9KSx0aGlzLnNvcnQuY29tcGFyYXRvciYmKGEuc29ydD10aGlzLnNvcnQuY29tcGFyYXRvciBp'@;
put 'bnN0YW5jZW9mIHVJP3tieTp0aGlzLnNvcnQuY29tcGFyYXRvci5wcm9wLHJldmVyc2U6dGhpcy5zb3J0LnJldmVyc2V9OntieTp0aGlzLnNvcnQuY29tcGFyYXRvcixyZXZlcnNlOnRoaXMuc29ydC5yZXZlcnNlfSk7Y29uc3QgZj10aGlzLmZpbHRlcnMuZ2V0QWN0aXZlRmlsdGVycygpO2lm'@;
put 'KGYubGVuZ3RoPjApe2EuZmlsdGVycz1bXTtmb3IoY29uc3QgZCBvZiBmKWEuZmlsdGVycy5wdXNoKGQuc3RhdGU/ZC5zdGF0ZTpkKX1yZXR1cm4gYX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkoc3IoaTMpLHNyKGNJKSxzcih5NCksc3IoZ1MpKX0s'@;
put 'bC5cdTAyNzVwcm92PWhyKHt0b2tlbjpsLGZhY3Rvcnk6bC5cdTAyNzVmYWN9KSxsfSkoKSxWc2U9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhKXt0aGlzLnpvbmU9YSx0aGlzLmxpc3RlbmVyc0FkZGVkPSExLHRoaXMuZGVzdHJveSQ9bmV3IHdlLHRoaXMuY29uZmlnPXtrZXlHcmlkUm93'@;
put 'czoiW3JvbGU9cm93XTpub3QoLmRhdGFncmlkLXBsYWNlaG9sZGVyKSIsa2V5R3JpZENlbGxzOiJbcm9sZT1ncmlkY2VsbF06bm90KC5kYXRhZ3JpZC1oaWRkZW4tY29sdW1uKTpub3QoLmRhdGFncmlkLXBsYWNlaG9sZGVyLWNvbnRlbnQpLCBbcm9sZT1jb2x1bW5oZWFkZXJdOm5vdCguZGF0'@;
put 'YWdyaWQtaGlkZGVuLWNvbHVtbik6bm90KC5kYXRhZ3JpZC1wbGFjZWhvbGRlci1jb250ZW50KSwgLmRhdGFncmlkLWRldGFpbC1jYXJldCIsa2V5R3JpZDoiW3JvbGU9Z3JpZF0ifX1nZXQgZ3JpZCgpe3JldHVybiB0aGlzLmhvc3Q/LnF1ZXJ5U2VsZWN0b3IodGhpcy5jb25maWcua2V5R3Jp'@;
put 'ZCl9Z2V0IHJvd3MoKXtyZXR1cm4gdGhpcy5ob3N0Py5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuY29uZmlnLmtleUdyaWRSb3dzKX1nZXQgY2VsbHMoKXtyZXR1cm4gdGhpcy5ob3N0Py5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuY29uZmlnLmtleUdyaWRDZWxscyl9bmdPbkRlc3Ryb3koKXt0aGlz'@;
put 'LmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9YWRkTGlzdGVuZXJzKCl7dGhpcy5saXN0ZW5lcnNBZGRlZHx8KHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3dkKHRoaXMuZ3JpZCwibW91c2Vkb3duIikucGlwZShBaCh0aGlzLmRlc3Ryb3kkKSkuc3Vi'@;
put 'c2NyaWJlKGE9PntpZigxPT09YS5idXR0b25zJiYhYS5jdHJsS2V5KXtjb25zdCBmPXRoaXMuY2VsbHM/QXJyYXkuZnJvbSh0aGlzLmNlbGxzKS5maW5kKGQ9PmQ9PT1hLnRhcmdldHx8ZD09PWEudGFyZ2V0LmNsb3Nlc3QodGhpcy5jb25maWcua2V5R3JpZENlbGxzKSk6bnVsbDtmJiZ0aGlz'@;
put 'LnNldEFjdGl2ZUNlbGwoZil9fSksd2QodGhpcy5ncmlkLCJrZXlkb3duIikucGlwZShBaCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKGE9PntpZigoIWEudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygiZHJhZy1oYW5kbGUiKXx8IkFycm93TGVmdCIhPT1hLmNvZGUmJiJBcnJvd1JpZ2h0'@;
put 'IiE9PWEuY29kZSkmJigiQXJyb3dVcCI9PT1hLmNvZGV8fCJBcnJvd0Rvd24iPT09YS5jb2RlfHwiQXJyb3dMZWZ0Ij09PWEuY29kZXx8IkFycm93UmlnaHQiPT09YS5jb2RlfHwiRW5kIj09PWEuY29kZXx8IkhvbWUiPT09YS5jb2RlfHwiUGFnZVVwIj09PWEuY29kZXx8IlBhZ2VEb3duIj09'@;
put 'PWEuY29kZSkpe2NvbnN0e3g6Zix5OmR9PXRoaXMuZ2V0TmV4dEl0ZW1Db29yZGluYXRlKGEpLGg9dGhpcy5yb3dzP0FycmF5LmZyb20odGhpcy5yb3dzW2RdLnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5jb25maWcua2V5R3JpZENlbGxzKSlbZl06bnVsbDtoJiZ0aGlzLnNldEFjdGl2ZUNlbGwo'@;
put 'aCksYS5wcmV2ZW50RGVmYXVsdCgpfX0pfSksdGhpcy5saXN0ZW5lcnNBZGRlZD0hMCl9aW5pdGlhbGl6ZUtleUdyaWQoYSl7dGhpcy5ob3N0PWEsdGhpcy5hZGRMaXN0ZW5lcnMoKSx0aGlzLnJlc2V0S2V5R3JpZCgpfXJlc2V0S2V5R3JpZCgpe3RoaXMuY2VsbHM/LmZvckVhY2goZj0+Zi5z'@;
put 'ZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSksKHRoaXMuY2VsbHM/dGhpcy5jZWxsc1swXTpudWxsKT8uc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIjAiKX1zZXRBY3RpdmVDZWxsKGEpe2NvbnN0IGY9dGhpcy5jZWxscz9BcnJheS5mcm9tKHRoaXMuY2VsbHMpLmZpbmQobT0+IjAiPT09'@;
put 'bS5nZXRBdHRyaWJ1dGUoInRhYmluZGV4IikpOm51bGw7ZiYmZi5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSxhLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCIwIik7Y29uc3QgZD1mdW5jdGlvbiBHSGUobCl7Y29uc3QgYz1bImFbaHJlZl0iLCJhcmVhW2hyZWZdIiwiaW5wdXQ6bm90'@;
put 'KFtkaXNhYmxlZF0pIiwiYnV0dG9uOm5vdChbZGlzYWJsZWRdKSIsInNlbGVjdDpub3QoW2Rpc2FibGVkXSkiLCJ0ZXh0YXJlYTpub3QoW2Rpc2FibGVkXSkiLCJpZnJhbWUiLCJvYmplY3QiLCJlbWJlZCIsIipbdGFiaW5kZXhdIiwiKltjb250ZW50ZWRpdGFibGU9dHJ1ZV0iLCJbcm9sZT1i'@;
put 'dXR0b25dOm5vdChbZGlzYWJsZWRdKSJdLmpvaW4oIiwiKTtyZXR1cm4gQXJyYXkuZnJvbShsLnF1ZXJ5U2VsZWN0b3JBbGwoYykpfShhKTsoImNvbHVtbmhlYWRlciIhPT1hLmdldEF0dHJpYnV0ZSgicm9sZSIpJiZkWzBdP2RbMF06YSkuZm9jdXMoKX1nZXROZXh0SXRlbUNvb3JkaW5hdGUo'@;
put 'YSl7bGV0IGY9dGhpcy5jZWxscz9BcnJheS5mcm9tKHRoaXMuY2VsbHMpLmZpbmQoeGU9PiIwIj09PXhlLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKSk6bnVsbDsiVGFiIj09PWEuY29kZSYmKGY9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7Y29uc3QgZD10aGlzLnJvd3MmJmY/QXJyYXkuZnJv'@;
put 'bSh0aGlzLnJvd3MpLmZpbmQoeGU9PnhlLmNvbnRhaW5zKGYpKTpudWxsLGg9dGhpcy5yb3dzP3RoaXMucm93cy5sZW5ndGgtMTowLG09dGhpcy5jZWxscz90aGlzLmNlbGxzLmxlbmd0aC90aGlzLnJvd3MubGVuZ3RoLTE6MDtsZXQgXz1kJiZmP0FycmF5LmZyb20oZC5xdWVyeVNlbGVjdG9y'@;
put 'QWxsKHRoaXMuY29uZmlnLmtleUdyaWRDZWxscykpLmluZGV4T2YoZik6MCxPPWQmJmYmJnRoaXMucm93cz9BcnJheS5mcm9tKHRoaXMucm93cykuaW5kZXhPZihkKTowO2NvbnN0IFg9dGhpcy5ob3N0LmRpcixhZT0icnRsIj09PVg/IkFycm93UmlnaHQiOiJBcnJvd0xlZnQiLHBlPSJydGwi'@;
put 'PT09WD8iQXJyb3dMZWZ0IjoiQXJyb3dSaWdodCIsYmU9TWF0aC5mbG9vcih0aGlzLmhvc3Q/LnF1ZXJ5U2VsZWN0b3IoIi5kYXRhZ3JpZCIpLmNsaWVudEhlaWdodC90aGlzLnJvd3NbMF0uY2xpZW50SGVpZ2h0KS0xfHwwO3JldHVybiJBcnJvd1VwIj09PWEuY29kZSYmMCE9PU8/Ty09MToi'@;
put 'QXJyb3dEb3duIj09PWEuY29kZSYmTzxoP08rPTE6YS5jb2RlPT09YWUmJjAhPT1fP18tPTE6YS5jb2RlPT09cGUmJl88bT9fKz0xOiJFbmQiPT09YS5jb2RlPyhfPW0sYS5jdHJsS2V5JiYoTz1oKSk6IkhvbWUiPT09YS5jb2RlPyhfPTAsYS5jdHJsS2V5JiYoTz0wKSk6IlBhZ2VVcCI9PT1h'@;
put 'LmNvZGU/Tz1PLWJlPjA/Ty1iZTowOiJQYWdlRG93biI9PT1hLmNvZGUmJihPPU8rYmU8aD9PK2JlOmgpLHt4Ol8seTpPfX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkoc3IoVW8pKX0sbC5cdTAyNzVwcm92PWhyKHt0b2tlbjpsLGZhY3Rvcnk6bC5c'@;
put 'dTAyNzVmYWN9KSxsfSkoKSxTNz0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEsZixkLGgsbSxfLE8sWCxhZSxwZSxiZSx4ZSxWZSxaZSxsdCxkdCl7dGhpcy5vcmdhbml6ZXI9YSx0aGlzLml0ZW1zPWYsdGhpcy5leHBhbmRhYmxlUm93cz1kLHRoaXMuc2VsZWN0aW9uPWgsdGhpcy5yb3dB'@;
put 'Y3Rpb25TZXJ2aWNlPW0sdGhpcy5zdGF0ZVByb3ZpZGVyPV8sdGhpcy5kaXNwbGF5TW9kZT1PLHRoaXMucmVuZGVyZXI9WCx0aGlzLmRldGFpbFNlcnZpY2U9YWUsdGhpcy5kb2N1bWVudD1wZSx0aGlzLmVsPWJlLHRoaXMucGFnZT14ZSx0aGlzLmNvbW1vblN0cmluZ3M9VmUsdGhpcy5jb2x1'@;
put 'bW5zU2VydmljZT1aZSx0aGlzLmtleU5hdmlnYXRpb249bHQsdGhpcy56b25lPWR0LHRoaXMuY2xyRGdTaW5nbGVTZWxlY3Rpb25BcmlhTGFiZWw9dGhpcy5jb21tb25TdHJpbmdzLmtleXMuc2luZ2xlU2VsZWN0aW9uQXJpYUxhYmVsLHRoaXMuY2xyRGdTaW5nbGVBY3Rpb25hYmxlQXJpYUxh'@;
put 'YmVsPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnNpbmdsZUFjdGlvbmFibGVBcmlhTGFiZWwsdGhpcy5jbHJEZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVsPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRldGFpbEV4cGFuZGFibGVBcmlhTGFiZWwsdGhpcy5jbHJEZ0Rpc2FibGVQYWdlRm9jdXM9'@;
put 'ITEsdGhpcy5zZWxlY3RlZENoYW5nZWQ9bmV3IHhyKCExKSx0aGlzLnNpbmdsZVNlbGVjdGVkQ2hhbmdlZD1uZXcgeHIoITEpLHRoaXMucmVmcmVzaD1uZXcgeHIoITEpLHRoaXMuU0VMRUNUSU9OX1RZUEU9c2wsdGhpcy5fc3Vic2NyaXB0aW9ucz1bXTtjb25zdCBndD1IdSgpO3RoaXMuc2Vs'@;
put 'ZWN0QWxsSWQ9ImNsci1kZy1zZWxlY3QtYWxsLSIrZ3QsdGhpcy5kZXRhaWxTZXJ2aWNlLmlkPWd0fWdldCBsb2FkaW5nKCl7cmV0dXJuIHRoaXMuaXRlbXMubG9hZGluZ31zZXQgbG9hZGluZyhhKXt0aGlzLml0ZW1zLmxvYWRpbmc9YX1zZXQgc2VsZWN0ZWQoYSl7dGhpcy5zZWxlY3Rpb24u'@;
put 'c2VsZWN0aW9uVHlwZT1hP3NsLk11bHRpOnNsLk5vbmUsdGhpcy5zZWxlY3Rpb24udXBkYXRlQ3VycmVudChhLCExKX1zZXQgc2luZ2xlU2VsZWN0ZWQoYSl7dGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT1zbC5TaW5nbGUsYT90aGlzLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlPWE6dGhp'@;
put 'cy5zZWxlY3Rpb24uY3VycmVudFNpbmdsZSYmKHRoaXMuc2VsZWN0aW9uLmN1cnJlbnRTaW5nbGU9bnVsbCl9c2V0IGNsckRnUHJlc2VydmVTZWxlY3Rpb24oYSl7dGhpcy5zZWxlY3Rpb24ucHJlc2VydmVTZWxlY3Rpb249YX1zZXQgcm93U2VsZWN0aW9uTW9kZShhKXt0aGlzLnNlbGVjdGlv'@;
put 'bi5yb3dTZWxlY3Rpb25Nb2RlPWF9c2V0IHRyYWNrQnkoYSl7dGhpcy5pdGVtcy5kYXRhZ3JpZFRyYWNrQnk9YX1nZXQgYWxsU2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb24uaXNBbGxTZWxlY3RlZCgpfXNldCBhbGxTZWxlY3RlZChhKXt0aGlzLnNlbGVjdGlvbi50b2dnbGVBbGwo'@;
put 'KX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLml0ZW1zLnNtYXJ0fHwodGhpcy5pdGVtcy5hbGw9dGhpcy5yb3dzLm1hcChmPT5mLml0ZW0pKTtjb25zdCBhPXRoaXMucm93cy5jaGFuZ2VzLnBpcGUoa2woZj0+c2EoR2koZi5tYXAoZD0+ZC5pdGVtKSksQ3YoZi5tYXAoZD0+ZC5pdGVtQ2hh'@;
put 'bmdlcykpLnBpcGUoWXYoMCkpKSkpO3RoaXMuX3N1YnNjcmlwdGlvbnMucHVzaChhLnN1YnNjcmliZShmPT57dGhpcy5pdGVtcy5zbWFydHx8KHRoaXMuaXRlbXMuYWxsPWYpfSksdGhpcy5yb3dzLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT57Zm9yKGxldCBmPXRoaXMuX2Rpc3BsYXllZFJvd3Mu'@;
put 'bGVuZ3RoLTE7Zj49MDtmLS0pdGhpcy5fZGlzcGxheWVkUm93cy5nZXQoZikuZGVzdHJveWVkJiZ0aGlzLl9kaXNwbGF5ZWRSb3dzLnJlbW92ZShmKTtpZih0aGlzLnJvd3MuZm9yRWFjaChmPT57dGhpcy5fZGlzcGxheWVkUm93cy5pbnNlcnQoZi5fdmlldyl9KSx0aGlzLmRldGFpbFNlcnZp'@;
put 'Y2Uuc3RhdGUmJnRoaXMuZGV0YWlsU2VydmljZS5pc09wZW4pe2NvbnN0IGY9dGhpcy5pdGVtcy5jYW5UcmFja0J5KCk/dGhpcy5yb3dzLmZpbmQoZD0+dGhpcy5pdGVtcy50cmFja0J5KGQuaXRlbSk9PT10aGlzLml0ZW1zLnRyYWNrQnkodGhpcy5kZXRhaWxTZXJ2aWNlLnN0YXRlKSk6dm9p'@;
put 'ZCAwO2Y/dGhpcy5kZXRhaWxTZXJ2aWNlLm9wZW4oZi5pdGVtLGYuZGV0YWlsQnV0dG9uLm5hdGl2ZUVsZW1lbnQpOnRoaXMuZGV0YWlsU2VydmljZS5jbG9zZSgpfX0pKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmtleU5hdmlnYXRpb24uaW5pdGlhbGl6ZUtleUdyaWQodGhpcy5lbC5uYXRp'@;
put 'dmVFbGVtZW50KSx0aGlzLnJlZnJlc2guZW1pdCh0aGlzLnN0YXRlUHJvdmlkZXIuc3RhdGUpLHRoaXMuX3N1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnN0YXRlUHJvdmlkZXIuY2hhbmdlLnN1YnNjcmliZShhPT50aGlzLnJlZnJlc2guZW1pdChhKSksdGhpcy5zZWxlY3Rpb24uY2hhbmdlLnN1'@;
put 'YnNjcmliZShhPT57dGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PXNsLlNpbmdsZT90aGlzLnNpbmdsZVNlbGVjdGVkQ2hhbmdlZC5lbWl0KGEpOnRoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1zbC5NdWx0aSYmdGhpcy5zZWxlY3RlZENoYW5nZWQuZW1pdChhKX0pLHRoaXMu'@;
put 'cGFnZS5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy5rZXlOYXZpZ2F0aW9uLnJlc2V0S2V5R3JpZCgpLHRoaXMuY2xyRGdEaXNhYmxlUGFnZUZvY3VzfHx0aGlzLmRhdGFncmlkVGFibGUubmF0aXZlRWxlbWVudC5mb2N1cygpfSksQ3YodGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zKS5z'@;
put 'dWJzY3JpYmUoKCk9PnRoaXMua2V5TmF2aWdhdGlvbj8ucmVzZXRLZXlHcmlkKCkpLHRoaXMuZGlzcGxheU1vZGUudmlldy5zdWJzY3JpYmUoYT0+e2ZvcihsZXQgZj10aGlzLl9wcm9qZWN0ZWREaXNwbGF5Q29sdW1ucy5sZW5ndGg7Zj4wO2YtLSl0aGlzLl9wcm9qZWN0ZWREaXNwbGF5Q29s'@;
put 'dW1ucy5kZXRhY2goKTtmb3IobGV0IGY9dGhpcy5fcHJvamVjdGVkQ2FsY3VsYXRpb25Db2x1bW5zLmxlbmd0aDtmPjA7Zi0tKXRoaXMuX3Byb2plY3RlZENhbGN1bGF0aW9uQ29sdW1ucy5kZXRhY2goKTtmb3IobGV0IGY9dGhpcy5fY2FsY3VsYXRpb25Sb3dzLmxlbmd0aDtmPjA7Zi0tKXRo'@;
put 'aXMuX2NhbGN1bGF0aW9uUm93cy5kZXRhY2goKTtmb3IobGV0IGY9dGhpcy5fZGlzcGxheWVkUm93cy5sZW5ndGg7Zj4wO2YtLSl0aGlzLl9kaXNwbGF5ZWRSb3dzLmRldGFjaCgpO2E9PT13Ny5ESVNQTEFZPyh0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVu'@;
put 'dCwiZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUiKSx0aGlzLmNvbHVtbnMuZm9yRWFjaChmPT57dGhpcy5fcHJvamVjdGVkRGlzcGxheUNvbHVtbnMuaW5zZXJ0KGYuX3ZpZXcpfSksdGhpcy5yb3dzLmZvckVhY2goZj0+e3RoaXMuX2Rpc3BsYXllZFJvd3MuaW5zZXJ0KGYuX3ZpZXcpfSkpOih0'@;
put 'aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUiKSx0aGlzLmNvbHVtbnMuZm9yRWFjaChmPT57dGhpcy5fcHJvamVjdGVkQ2FsY3VsYXRpb25Db2x1bW5zLmluc2VydChmLl92aWV3KX0pLHRoaXMucm93cy5mb3JFYWNo'@;
put 'KGY9Pnt0aGlzLl9jYWxjdWxhdGlvblJvd3MuaW5zZXJ0KGYuX3ZpZXcpfSkpfSkpLHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX3N1YnNjcmlwdGlvbnMucHVzaCh3ZCh0aGlzLmRvY3VtZW50LmJvZHksImtleWRvd24iKS5zdWJzY3JpYmUoYT0+eyJTaGlmdCI9PT1h'@;
put 'LmtleSYmKHRoaXMuc2VsZWN0aW9uLnNoaWZ0UHJlc3NlZD0hMCl9KSx3ZCh0aGlzLmRvY3VtZW50LmJvZHksImtleXVwIikuc3Vic2NyaWJlKGE9PnsiU2hpZnQiPT09YS5rZXkmJih0aGlzLnNlbGVjdGlvbi5zaGlmdFByZXNzZWQ9ITEpfSkpfSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdWJz'@;
put 'Y3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1yZXNpemUoKXt0aGlzLm9yZ2FuaXplci5yZXNpemUoKX1kYXRhQ2hhbmdlZCgpe3RoaXMuaXRlbXMucmVmcmVzaCgpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChYZykscnQo'@;
put 'XzQpLHJ0KHk3KSxydChDNykscnQoZzcpLHJ0KE5zZSkscnQoUVUpLHJ0KGpvKSxydChUZCkscnQoRmEpLHJ0KFZpKSxydCh5NCkscnQoVGEpLHJ0KG8zKSxydChWc2UpLHJ0KFVvKSl9LGwuXHUwMjc1Y21wPWtyKHt0eXBlOmwsc2VsZWN0b3JzOltbImNsci1kYXRhZ3JpZCJdXSxjb250ZW50'@;
put 'UXVlcmllczpmdW5jdGlvbihhLGYsZCl7aWYoMSZhJiYoRm8oZCxfNyw1KSxGbyhkLEdVLDUpLEZvKGQsSmcsNCksRm8oZCxRZyw0KSksMiZhKXtsZXQgaDt1aShoPWNpKCkpJiYoZi5pdGVyYXRvcj1oLmZpcnN0KSx1aShoPWNpKCkpJiYoZi5wbGFjZWhvbGRlcj1oLmZpcnN0KSx1aShoPWNp'@;
put 'KCkpJiYoZi5jb2x1bW5zPWgpLHVpKGg9Y2koKSkmJihmLnJvd3M9aCl9fSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxmKXtpZigxJmEmJihObyhfTGUsNSxWaSksTm8od0xlLDUsZmEpLE5vKENMZSw1LGZhKSxObyhTTGUsNSxmYSksTm8oTUxlLDUsZmEpLE5vKGtMZSw1LGZhKSksMiZhKXtsZXQg'@;
put 'ZDt1aShkPWNpKCkpJiYoZi5kYXRhZ3JpZFRhYmxlPWQuZmlyc3QpLHVpKGQ9Y2koKSkmJihmLnNjcm9sbGFibGVDb2x1bW5zPWQuZmlyc3QpLHVpKGQ9Y2koKSkmJihmLl9wcm9qZWN0ZWREaXNwbGF5Q29sdW1ucz1kLmZpcnN0KSx1aShkPWNpKCkpJiYoZi5fcHJvamVjdGVkQ2FsY3VsYXRp'@;
put 'b25Db2x1bW5zPWQuZmlyc3QpLHVpKGQ9Y2koKSkmJihmLl9kaXNwbGF5ZWRSb3dzPWQuZmlyc3QpLHVpKGQ9Y2koKSkmJihmLl9jYWxjdWxhdGlvblJvd3M9ZC5maXJzdCl9fSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGYpezImYSYmZ3IoImRhdGFncmlkLWhvc3QiLCEw'@;
put 'KSgiZGF0YWdyaWQtZGV0YWlsLW9wZW4iLGYuZGV0YWlsU2VydmljZS5pc09wZW4pfSxpbnB1dHM6e2NsckRnU2luZ2xlU2VsZWN0aW9uQXJpYUxhYmVsOiJjbHJEZ1NpbmdsZVNlbGVjdGlvbkFyaWFMYWJlbCIsY2xyRGdTaW5nbGVBY3Rpb25hYmxlQXJpYUxhYmVsOiJjbHJEZ1NpbmdsZUFj'@;
put 'dGlvbmFibGVBcmlhTGFiZWwiLGNsckRldGFpbEV4cGFuZGFibGVBcmlhTGFiZWw6ImNsckRldGFpbEV4cGFuZGFibGVBcmlhTGFiZWwiLGNsckRnRGlzYWJsZVBhZ2VGb2N1czoiY2xyRGdEaXNhYmxlUGFnZUZvY3VzIixsb2FkaW5nOlsiY2xyRGdMb2FkaW5nIiwibG9hZGluZyJdLHNlbGVj'@;
put 'dGVkOlsiY2xyRGdTZWxlY3RlZCIsInNlbGVjdGVkIl0sc2luZ2xlU2VsZWN0ZWQ6WyJjbHJEZ1NpbmdsZVNlbGVjdGVkIiwic2luZ2xlU2VsZWN0ZWQiXSxjbHJEZ1ByZXNlcnZlU2VsZWN0aW9uOiJjbHJEZ1ByZXNlcnZlU2VsZWN0aW9uIixyb3dTZWxlY3Rpb25Nb2RlOlsiY2xyRGdSb3dT'@;
put 'ZWxlY3Rpb24iLCJyb3dTZWxlY3Rpb25Nb2RlIl0sdHJhY2tCeTpbImNsckRnSXRlbXNUcmFja0J5IiwidHJhY2tCeSJdfSxvdXRwdXRzOntzZWxlY3RlZENoYW5nZWQ6ImNsckRnU2VsZWN0ZWRDaGFuZ2UiLHNpbmdsZVNlbGVjdGVkQ2hhbmdlZDoiY2xyRGdTaW5nbGVTZWxlY3RlZENoYW5n'@;
put 'ZSIscmVmcmVzaDoiY2xyRGdSZWZyZXNoIn0sZmVhdHVyZXM6W3JpKFtDNyxjSSxpMyx5NCxfNCxYZyxnNyx5NyxnUyxUZCxOc2UsV1UsbzMsUVUsVnNlXSldLG5nQ29udGVudFNlbGVjdG9yczpSTGUsZGVjbHM6MzIsdmFyczo3LGNvbnN0czpbWzEsImRhdGFncmlkLW91dGVyLXdyYXBwZXIi'@;
put 'XSxbMSwiZGF0YWdyaWQtaW5uZXItd3JhcHBlciJdLFsxLCJkYXRhZ3JpZCJdLFsiZGF0YWdyaWQiLCIiXSxbMSwiZGF0YWdyaWQtdGFibGUtd3JhcHBlciJdLFsicm9sZSIsImdyaWQiLCJ0YWJpbmRleCIsIi0xIiwxLCJkYXRhZ3JpZC10YWJsZSJdLFsiZGF0YWdyaWRUYWJsZSIsIiJdLFsi'@;
put 'cm9sZSIsInJvd2dyb3VwIiwxLCJkYXRhZ3JpZC1oZWFkZXIiXSxbInJvbGUiLCJyb3ciLDEsImRhdGFncmlkLXJvdyJdLFsxLCJkYXRhZ3JpZC1yb3ctbWFzdGVyIiwiZGF0YWdyaWQtcm93LWZsZXgiXSxbMSwiZGF0YWdyaWQtcm93LXN0aWNreSJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIs'@;
put 'ImNsYXNzIiwiZGF0YWdyaWQtY29sdW1uIGRhdGFncmlkLXNlbGVjdCBkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLDMsImtleWRvd24uc3BhY2UiLDQsIm5nSWYiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLCJjbGFzcyIsImRhdGFncmlkLWNvbHVtbiBkYXRhZ3JpZC1zZWxlY3QgZGF0YWdyaWQt'@;
put 'Zml4ZWQtY29sdW1uIiw0LCJuZ0lmIl0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwiY2xhc3MiLCJkYXRhZ3JpZC1jb2x1bW4gZGF0YWdyaWQtcm93LWFjdGlvbnMgZGF0YWdyaWQtZml4ZWQtY29sdW1uIiw0LCJuZ0lmIl0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwiY2xhc3MiLCJkYXRhZ3Jp'@;
put 'ZC1jb2x1bW4gZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCBkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLDQsIm5nSWYiXSxbMSwiZGF0YWdyaWQtcm93LXNjcm9sbGFibGUiXSxbInByb2plY3RlZERpc3BsYXlDb2x1bW5zIiwiIl0sWyJkaXNwbGF5ZWRSb3dzIiwiIl0sWzQsIm5nSWYiXSxbImNs'@;
put 'YXNzIiwiZGF0YWdyaWQtc3Bpbm5lciIsNCwibmdJZiJdLFsxLCJkYXRhZ3JpZC1jYWxjdWxhdGlvbi10YWJsZSJdLFsxLCJkYXRhZ3JpZC1jYWxjdWxhdGlvbi1oZWFkZXIiXSxbInByb2plY3RlZENhbGN1bGF0aW9uQ29sdW1ucyIsIiJdLFsiY2FsY3VsYXRpb25Sb3dzIiwiIl0sWyJyb2xl'@;
put 'IiwiY29sdW1uaGVhZGVyIiwxLCJkYXRhZ3JpZC1jb2x1bW4iLCJkYXRhZ3JpZC1zZWxlY3QiLCJkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLDMsImtleWRvd24uc3BhY2UiXSxbMSwiY2xyLWNoZWNrYm94LXdyYXBwZXIiXSxbInR5cGUiLCJjaGVja2JveCIsInRhYmluZGV4IiwiLTEiLDMsImlk'@;
put 'IiwibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXSxbMSwiY2xyLWNvbnRyb2wtbGFiZWwiLCJjbHItY29sLW51bGwiLDMsImZvciJdLFsxLCJjbHItc3Itb25seSJdLFsxLCJkYXRhZ3JpZC1jb2x1bW4tc2VwYXJhdG9yIl0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwxLCJkYXRhZ3JpZC1jb2x1'@;
put 'bW4iLCJkYXRhZ3JpZC1zZWxlY3QiLCJkYXRhZ3JpZC1maXhlZC1jb2x1bW4iXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLDEsImRhdGFncmlkLWNvbHVtbiIsImRhdGFncmlkLXJvdy1hY3Rpb25zIiwiZGF0YWdyaWQtZml4ZWQtY29sdW1uIl0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwxLCJk'@;
put 'YXRhZ3JpZC1jb2x1bW4iLCJkYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IiwiZGF0YWdyaWQtZml4ZWQtY29sdW1uIl0sWzEsImRhdGFncmlkLXNwaW5uZXIiXSxbImNsck1lZGl1bSIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGYpezEmYSYmKFRpKElMZSksRHIoMCkseWUoMSwiZGl2Iiww'@;
put 'KSgyLCJkaXYiLDEpKDMsImRpdiIsMiwzKSg1LCJkaXYiLDQpKDYsImRpdiIsNSw2KSg4LCJkaXYiLDcpKDksImRpdiIsOCkoMTAsImRpdiIsOSkoMTEsImRpdiIsMTApLHR0KDEyLEVMZSw3LDUsImRpdiIsMTEpLHR0KDEzLHhMZSwyLDEsImRpdiIsMTIpLHR0KDE0LEFMZSwyLDEsImRpdiIs'@;
put 'MTMpLHR0KDE1LFRMZSwyLDEsImRpdiIsMTQpLENlKCkseWUoMTYsImRpdiIsMTUpLGVzKDE3LG51bGwsMTYpLENlKCkoKSgpKCksZXMoMTksbnVsbCwxNyksRHIoMjEsMSksdHQoMjIsT0xlLDEsMCwiY2xyLWRnLXBsYWNlaG9sZGVyIiwxOCksQ2UoKSgpKCksRHIoMjMsMiksdHQoMjQsRExl'@;
put 'LDMsMCwiZGl2IiwxOSksQ2UoKSxEcigyNSwzKSxDZSgpLHllKDI2LCJkaXYiLDIwKSgyNywiZGl2IiwyMSksZXMoMjgsbnVsbCwyMiksQ2UoKSxlcygzMCxudWxsLDIzKSxDZSgpKSwyJmEmJihTZSgzKSxScigiYXJpYS1oaWRkZW4iLCEhZi5kZXRhaWxTZXJ2aWNlLmlzT3Blbnx8bnVsbCks'@;
put 'U2UoOSksUmUoIm5nSWYiLGYuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1mLlNFTEVDVElPTl9UWVBFLk11bHRpKSxTZSgxKSxSZSgibmdJZiIsZi5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PWYuU0VMRUNUSU9OX1RZUEUuU2luZ2xlKSxTZSgxKSxSZSgibmdJZiIsZi5yb3dBY3Rpb25T'@;
put 'ZXJ2aWNlLmhhc0FjdGlvbmFibGVSb3cpLFNlKDEpLFJlKCJuZ0lmIixmLmV4cGFuZGFibGVSb3dzLmhhc0V4cGFuZGFibGVSb3d8fGYuZGV0YWlsU2VydmljZS5lbmFibGVkKSxTZSg3KSxSZSgibmdJZiIsIWYucGxhY2Vob2xkZXIpLFNlKDIpLFJlKCJuZ0lmIixmLmxvYWRpbmcpKX0sZGVw'@;
put 'ZW5kZW5jaWVzOltHVSxSaCwkaSxlWixSMCxXYSx6YSxlbF0sZW5jYXBzdWxhdGlvbjoyfSksbH0pKCksdFo9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhKXt0aGlzLmNvbHVtbnNTZXJ2aWNlPWEsdGhpcy5hbGxTZWxlY3RlZD1uZXcgeHJ9Z2V0IGNsckFsbFNlbGVjdGVkKCl7cmV0dXJu'@;
put 'IHRoaXMuYWxsU2VsZWN0ZWQuYXNPYnNlcnZhYmxlKCl9Z2V0IGFsbEhpZGVhYmxlc1Zpc2libGUoKXtyZXR1cm4gMD09PXRoaXMuaGlkZWFibGVDb2x1bW5zKCkuZmlsdGVyKGE9PmEudmFsdWUuaGlkZGVuKS5sZW5ndGh9c2VsZWN0QWxsKCl7dGhpcy5oaWRlYWJsZUNvbHVtbnMoKS5mb3JF'@;
put 'YWNoKGE9PnRoaXMuY29sdW1uc1NlcnZpY2UuZW1pdFN0YXRlQ2hhbmdlKGEse2hpZGRlbjohMSxjaGFuZ2VzOlt6MC5ISURERU5dfSkpLHRoaXMuYWxsU2VsZWN0ZWQubmV4dCghMCl9aGlkZWFibGVDb2x1bW5zKCl7cmV0dXJuIHRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5maWx0ZXIo'@;
put 'YT0+YS52YWx1ZS5oaWRlYWJsZSl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHJ0KG8zKSl9LGwuXHUwMjc1Y21wPWtyKHt0eXBlOmwsc2VsZWN0b3JzOltbImNsci1kZy1jb2x1bW4tdG9nZ2xlLWJ1dHRvbiJdXSxvdXRwdXRzOntjbHJBbGxTZWxl'@;
put 'Y3RlZDoiY2xyQWxsU2VsZWN0ZWQifSxuZ0NvbnRlbnRTZWxlY3RvcnM6T28sZGVjbHM6Mix2YXJzOjEsY29uc3RzOltbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwic3dpdGNoLWJ1dHRvbiIsMywiZGlzYWJsZWQiLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5j'@;
put 'dGlvbihhLGYpezEmYSYmKFRpKCkseWUoMCwiYnV0dG9uIiwwKSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGYuc2VsZWN0QWxsKCl9KSxEcigxKSxDZSgpKSwyJmEmJlJlKCJkaXNhYmxlZCIsZi5hbGxIaWRlYWJsZXNWaXNpYmxlKX0sZW5jYXBzdWxhdGlvbjoyfSksbH0pKCksQnNl'@;
put 'PSgoKT0+e2NsYXNzIGx7fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NWNtcD1rcih7dHlwZTpsLHNlbGVjdG9yczpbWyJjbHItZGctY29sdW1uLXRvZ2dsZS10aXRsZSJdXSxuZ0NvbnRlbnRTZWxlY3RvcnM6T28sZGVjbHM6MSx2YXJz'@;
put 'OjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxmKXsxJmEmJihUaSgpLERyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksbH0pKCk7Y29uc3QganNlPWw9Pmw7bGV0IG5aPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSl7dGhpcy5faXRlbXM9YX1zZXQgdHJhY2tCeShhKXthIT09anNlJiZ0aGlzLl9p'@;
put 'dGVtcyYmKHRoaXMuX2l0ZW1zLml0ZXJhdG9yVHJhY2tCeT1hKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkocnQoXzQsOCkpfSxsLlx1MDI3NWRpcj1Tcih7dHlwZTpsLHNlbGVjdG9yczpbWyIiLCJuZ0ZvclRyYWNrQnkiLCIiXV0saW5wdXRzOnt0'@;
put 'cmFja0J5OlsibmdGb3JUcmFja0J5IiwidHJhY2tCeSJdfX0pLGx9KSgpLHJaPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmLGQpe3RoaXMuY29tbW9uU3RyaW5ncz1hLHRoaXMuY29sdW1uc1NlcnZpY2U9Zix0aGlzLnBvcG92ZXJJZD1IdSgpLHRoaXMuc21hcnRQb3NpdGlvbj17YXhp'@;
put 'czpTYy5WRVJUSUNBTCxzaWRlOnhmLkJFRk9SRSxhbmNob3I6TmEuU1RBUlQsY29udGVudDpOYS5TVEFSVH0sdGhpcy50cmFja0J5Rm49anNlLHRoaXMuc3Vic2NyaXB0aW9uPWQub3BlbkNoYW5nZS5zdWJzY3JpYmUoaD0+dGhpcy5vcGVuU3RhdGU9aCl9Z2V0IGFsbENvbHVtbnNWaXNpYmxl'@;
put 'KCl7cmV0dXJuIHRoaXMuX2FsbENvbHVtbnNWaXNpYmxlfXNldCBhbGxDb2x1bW5zVmlzaWJsZShhKXt0aGlzLl9hbGxDb2x1bW5zVmlzaWJsZT1hfWdldCBoaWRlYWJsZUNvbHVtblN0YXRlcygpe3JldHVybiB0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnMuZmlsdGVyKGY9PmYudmFsdWUu'@;
put 'aGlkZWFibGUpLm1hcChmPT5mLnZhbHVlKX1nZXQgaGFzT25seU9uZVZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zLmxlbmd0aC10aGlzLmhpZGVhYmxlQ29sdW1uU3RhdGVzLmxlbmd0aD09MCYmMT09PXRoaXMuaGlkZWFibGVDb2x1bW5TdGF0ZXMu'@;
put 'ZmlsdGVyKGY9PiFmLmhpZGRlbikubGVuZ3RofW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX10b2dnbGVDb2x1bW5TdGF0ZShhLGYpe2NvbnN0IGQ9dGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zLmZpbHRlcihoPT5oLnZhbHVlPT09YSlbMF07dGhpcy5j'@;
put 'b2x1bW5zU2VydmljZS5lbWl0U3RhdGVDaGFuZ2UoZCx7aGlkZGVuOmYsY2hhbmdlczpbejAuSElEREVOXX0pfXRvZ2dsZVN3aXRjaFBhbmVsKCl7dGhpcy5vcGVuU3RhdGU9IXRoaXMub3BlblN0YXRlfWFsbENvbHVtbnNTZWxlY3RlZCgpe3RoaXMuYWxsU2VsZWN0ZWRFbGVtZW50Lm5hdGl2'@;
put 'ZUVsZW1lbnQuZm9jdXMoKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkocnQoVGEpLHJ0KG8zKSxydChRYSkpfSxsLlx1MDI3NWNtcD1rcih7dHlwZTpsLHNlbGVjdG9yczpbWyJjbHItZGctY29sdW1uLXRvZ2dsZSJdXSxjb250ZW50UXVlcmllczpm'@;
put 'dW5jdGlvbihhLGYsZCl7aWYoMSZhJiYoRm8oZCxCc2UsNSksRm8oZCx0Wiw1KSksMiZhKXtsZXQgaDt1aShoPWNpKCkpJiYoZi5jdXN0b21Ub2dnbGVUaXRsZT1oLmZpcnN0KSx1aShoPWNpKCkpJiYoZi5jdXN0b21Ub2dnbGVCdXR0b249aC5maXJzdCl9fSx2aWV3UXVlcnk6ZnVuY3Rpb24o'@;
put 'YSxmKXtpZigxJmEmJk5vKFBMZSw1LFZpKSwyJmEpe2xldCBkO3VpKGQ9Y2koKSkmJihmLmFsbFNlbGVjdGVkRWxlbWVudD1kLmZpcnN0KX19LGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZil7MiZhJiZncigiY29sdW1uLXN3aXRjaC13cmFwcGVyIiwhMCkoImFjdGl2ZSIs'@;
put 'Zi5vcGVuU3RhdGUpfSxmZWF0dXJlczpbcmkoW1EyLHQ3LFFhXSldLG5nQ29udGVudFNlbGVjdG9yczp6TGUsZGVjbHM6Myx2YXJzOjgsY29uc3RzOltbInJvbGUiLCJidXR0b24iLCJ0eXBlIiwiYnV0dG9uIiwiY2xyUG9wb3ZlckFuY2hvciIsIiIsImNsclBvcG92ZXJPcGVuQ2xvc2VCdXR0'@;
put 'b24iLCIiLDEsImJ0biIsImJ0bi1zbSIsImNvbHVtbi10b2dnbGUtLWFjdGlvbiJdLFsiY2xhc3MiLCJjb2x1bW4tc3dpdGNoIiwicm9sZSIsImRpYWxvZyIsImNsckZvY3VzVHJhcCIsIiIsMywiaWQiLDQsImNsclBvcG92ZXJDb250ZW50IiwiY2xyUG9wb3ZlckNvbnRlbnRBdCIsImNsclBv'@;
put 'cG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsImNsclBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9zZSJdLFsicm9sZSIsImRpYWxvZyIsImNsckZvY3VzVHJhcCIsIiIsMSwiY29sdW1uLXN3aXRjaCIsMywiaWQiXSxbMSwic3dpdGNoLWhlYWRlciJdLFsidGFiaW5kZXgiLCItMSIs'@;
put 'MSwiY2xyLXNyLW9ubHkiXSxbImFsbFNlbGVjdGVkIiwiIl0sWzQsIm5nSWYiXSxbImNsclBvcG92ZXJDbG9zZUJ1dHRvbiIsIiIsInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwidG9nZ2xlLXN3aXRjaC1jbG9zZS1idXR0b24iXSxbInNoYXBlIiwid2luZG93'@;
put 'LWNsb3NlIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIl0sWzEsImNsci1zci1vbmx5Il0sWzEsInN3aXRjaC1jb250ZW50IiwibGlzdC11bnN0eWxlZCJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiXSxbMSwic3dpdGNoLWZvb3RlciJdLFszLCJjbHJBbGxTZWxlY3RlZCIsNCwi'@;
put 'bmdJZiJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2tib3giLDMsImRpc2FibGVkIiwibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXSxbMywibmdUZW1wbGF0ZU91dGxldCJdLFszLCJjbHJBbGxTZWxlY3RlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGYpezEmYSYmKFRpKGpMZSks'@;
put 'eWUoMCwiYnV0dG9uIiwwKSxZZSgxKSxDZSgpLHR0KDIsQkxlLDE2LDEwLCJkaXYiLDEpKSwyJmEmJihScigiYXJpYS1jb250cm9scyIsZi5wb3BvdmVySWQpKCJhcmlhLW93bnMiLGYucG9wb3ZlcklkKSgiYXJpYS1leHBhbmRlZCIsZi5vcGVuU3RhdGUpLFNlKDEpLHdyKCIgIixmLmNvbW1v'@;
put 'blN0cmluZ3Mua2V5cy5waWNrQ29sdW1ucywiICIpLFNlKDEpLFJlKCJjbHJQb3BvdmVyQ29udGVudCIsZi5vcGVuU3RhdGUpKCJjbHJQb3BvdmVyQ29udGVudEF0IixmLnNtYXJ0UG9zaXRpb24pKCJjbHJQb3BvdmVyQ29udGVudE91dHNpZGVDbGlja1RvQ2xvc2UiLCEwKSgiY2xyUG9wb3Zl'@;
put 'ckNvbnRlbnRTY3JvbGxUb0Nsb3NlIiwhMCkpfSxkZXBlbmRlbmNpZXM6W1YwLHRaLHJTLGFTLG9TLGc0LCRpLG5zZSxKYSxSYSxuWixSMCxCMCxXYSx6YSxlbCx5ZF0sZW5jYXBzdWxhdGlvbjoyfSksbH0pKCksVXNlPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSl7dGhpcy5leHBhbmRh'@;
put 'YmxlUm93c0NvdW50PWEsdGhpcy5leHBhbmRhYmxlUm93c0NvdW50JiZ0aGlzLmV4cGFuZGFibGVSb3dzQ291bnQucmVnaXN0ZXIoKX1uZ09uRGVzdHJveSgpe3RoaXMuZXhwYW5kYWJsZVJvd3NDb3VudCYmdGhpcy5leHBhbmRhYmxlUm93c0NvdW50LnVucmVnaXN0ZXIoKX19cmV0dXJuIGwu'@;
put 'XHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkocnQoeTcsOCkpfSxsLlx1MDI3NWRpcj1Tcih7dHlwZTpsLHNlbGVjdG9yczpbWyIiLCJjbHJJZkV4cGFuZGVkIiwiIl1dfSksbH0pKCksaEk9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhLGYsZCxoKXt0aGlzLnNlbGVj'@;
put 'dGlvbj1hLHRoaXMuZGV0YWlsU2VydmljZT1mLHRoaXMuY29sdW1uc1NlcnZpY2U9ZCx0aGlzLmNvbW1vblN0cmluZ3M9aCx0aGlzLlNFTEVDVElPTl9UWVBFPXNsfWdldCBoYXNIaWRlYWJsZUNvbHVtbnMoKXtyZXR1cm4gdGhpcy5jb2x1bW5zU2VydmljZS5oYXNIaWRlYWJsZUNvbHVtbnN9'@;
put 'fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHJ0KEM3KSxydChUZCkscnQobzMpLHJ0KFRhKSl9LGwuXHUwMjc1Y21wPWtyKHt0eXBlOmwsc2VsZWN0b3JzOltbImNsci1kZy1mb290ZXIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxmLGQpe2lm'@;
put 'KDEmYSYmRm8oZCxyWiw1KSwyJmEpe2xldCBoO3VpKGg9Y2koKSkmJihmLnRvZ2dsZT1oLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZil7MiZhJiZncigiZGF0YWdyaWQtZm9vdGVyIiwhMCl9LG5nQ29udGVudFNlbGVjdG9yczpLTGUsZGVjbHM6Myx2YXJz'@;
put 'OjIsY29uc3RzOltbNCwibmdJZiJdLFsxLCJjbHItZm9ybS1jb250cm9sLWRpc2FibGVkIl0sWzEsImRhdGFncmlkLWZvb3Rlci1zZWxlY3QiXSxbImNsckNoZWNrYm94IiwiIiwidHlwZSIsImNoZWNrYm94IiwiY2hlY2tlZCIsImNoZWNrZWQiLCJkaXNhYmxlZCIsIiJdLFsxLCJjbHItc3It'@;
put 'b25seSJdLFsxLCJkYXRhZ3JpZC1mb290ZXItZGVzY3JpcHRpb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxmKXsxJmEmJihUaSgkTGUpLHR0KDAsWUxlLDgsMiwibmctY29udGFpbmVyIiwwKSx0dCgxLEdMZSw1LDEsIm5nLWNvbnRhaW5lciIsMCksRHIoMikpLDImYSYmKFJlKCJuZ0lmIixm'@;
put 'LnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09Zi5TRUxFQ1RJT05fVFlQRS5NdWx0aSYmZi5zZWxlY3Rpb24uY3VycmVudC5sZW5ndGg+MCksU2UoMSksUmUoIm5nSWYiLCFmLmRldGFpbFNlcnZpY2UuaXNPcGVuKSl9LGRlcGVuZGVuY2llczpbVjAsclosJGksQjAsZWxdLGVuY2Fwc3VsYXRp'@;
put 'b246Mn0pLGx9KSgpO2NvbnN0IGlaPW5ldyBNaSgiQ09MVU1OX1NUQVRFIiksZU5lPXtwcm92aWRlOmlaLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gUUhlKCl7cmV0dXJuIG5ldyBPZSh7Y2hhbmdlczpbXX0pfX07bGV0IG9aPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSl7dGhpcy5wYWdlPWEs'@;
put 'dGhpcy5wYWdlU2l6ZU9wdGlvbnNJZD1IdSgpfW5nT25Jbml0KCl7KCF0aGlzLnBhZ2VTaXplT3B0aW9uc3x8MD09PXRoaXMucGFnZVNpemVPcHRpb25zLmxlbmd0aCkmJih0aGlzLnBhZ2VTaXplT3B0aW9ucz1bdGhpcy5wYWdlLnNpemVdKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9u'@;
put 'KGEpe3JldHVybiBuZXcoYXx8bCkocnQoeTQpKX0sbC5cdTAyNzVjbXA9a3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siY2xyLWRnLXBhZ2Utc2l6ZSJdXSxpbnB1dHM6e3BhZ2VTaXplT3B0aW9uczpbImNsclBhZ2VTaXplT3B0aW9ucyIsInBhZ2VTaXplT3B0aW9ucyJdLHBhZ2VTaXplT3B0aW9u'@;
put 'c0lkOlsiY2xyUGFnZVNpemVPcHRpb25zSWQiLCJwYWdlU2l6ZU9wdGlvbnNJZCJdfSxuZ0NvbnRlbnRTZWxlY3RvcnM6T28sZGVjbHM6NCx2YXJzOjUsY29uc3RzOltbMSwiY2xyLXNlbGVjdC13cmFwcGVyIl0sWzMsImlkIiwibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXSxbMywibmdWYWx1'@;
put 'ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsIm5nVmFsdWUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxmKXsxJmEmJihUaSgpLERyKDApLHllKDEsImRpdiIsMCkoMiwic2VsZWN0IiwxKSxFdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIGYucGFnZS5zaXplPWh9KSx0dCgz'@;
put 'LHFMZSwyLDIsIm9wdGlvbiIsMiksQ2UoKSgpKSwyJmEmJihTZSgyKSxncigiY2xyLXBhZ2Utc2l6ZS1zZWxlY3QiLCEwKSxSZSgiaWQiLGYucGFnZVNpemVPcHRpb25zSWQpKCJuZ01vZGVsIixmLnBhZ2Uuc2l6ZSksU2UoMSksUmUoIm5nRm9yT2YiLGYucGFnZVNpemVPcHRpb25zKSl9LGRl'@;
put 'cGVuZGVuY2llczpbTDAsV2EsemEsUmEsUzEsTTFdLGVuY2Fwc3VsYXRpb246Mn0pLGx9KSgpLHBJPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmLGQpe3RoaXMucGFnZT1hLHRoaXMuY29tbW9uU3RyaW5ncz1mLHRoaXMuZGV0YWlsU2VydmljZT1kLHRoaXMuY3VycmVudENoYW5nZWQ9'@;
put 'bmV3IHhyKCExKSx0aGlzLnBhZ2UuYWN0aXZhdGVkPSEwfWdldCBwYWdlU2l6ZSgpe3JldHVybiB0aGlzLnBhZ2Uuc2l6ZX1zZXQgcGFnZVNpemUoYSl7Im51bWJlciI9PXR5cGVvZiBhJiYodGhpcy5wYWdlLnNpemU9YSl9Z2V0IHRvdGFsSXRlbXMoKXtyZXR1cm4gdGhpcy5wYWdlLnRvdGFs'@;
put 'SXRlbXN9c2V0IHRvdGFsSXRlbXMoYSl7Im51bWJlciI9PXR5cGVvZiBhJiYodGhpcy5wYWdlLnRvdGFsSXRlbXM9YSl9Z2V0IGxhc3RQYWdlKCl7cmV0dXJuIHRoaXMucGFnZS5sYXN0fXNldCBsYXN0UGFnZShhKXsibnVtYmVyIj09dHlwZW9mIGEmJih0aGlzLnBhZ2UubGFzdD1hKX1nZXQg'@;
put 'Y3VycmVudFBhZ2UoKXtyZXR1cm4gdGhpcy5wYWdlLmN1cnJlbnR9c2V0IGN1cnJlbnRQYWdlKGEpeyJudW1iZXIiPT10eXBlb2YgYSYmKHRoaXMucGFnZS5jdXJyZW50PWEpfWdldCBmaXJzdEl0ZW0oKXtyZXR1cm4gdGhpcy5wYWdlLmZpcnN0SXRlbX1nZXQgbGFzdEl0ZW0oKXtyZXR1cm4g'@;
put 'dGhpcy5wYWdlLmxhc3RJdGVtfWdldCBtaWRkbGVQYWdlcygpe2NvbnN0IGE9W107cmV0dXJuIHRoaXMucGFnZS5jdXJyZW50PjEmJmEucHVzaCh0aGlzLnBhZ2UuY3VycmVudC0xKSxhLnB1c2godGhpcy5wYWdlLmN1cnJlbnQpLHRoaXMucGFnZS5jdXJyZW50PHRoaXMucGFnZS5sYXN0JiZh'@;
put 'LnB1c2godGhpcy5wYWdlLmN1cnJlbnQrMSksYX1uZ09uSW5pdCgpe3RoaXMucGFnZS5zaXplfHwodGhpcy5wYWdlLnNpemU9MTApLHRoaXMuX3BhZ2VTdWJzY3JpcHRpb249dGhpcy5wYWdlLmNoYW5nZS5zdWJzY3JpYmUoYT0+dGhpcy5jdXJyZW50Q2hhbmdlZC5lbWl0KGEpKX1uZ09uRGVz'@;
put 'dHJveSgpe3RoaXMucGFnZS5yZXNldFBhZ2VTaXplKCEwKSx0aGlzLl9wYWdlU3Vic2NyaXB0aW9uJiZ0aGlzLl9wYWdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9cHJldmlvdXMoKXt0aGlzLnBhZ2UucHJldmlvdXMoKX1uZXh0KCl7dGhpcy5wYWdlLm5leHQoKX11cGRhdGVDdXJyZW50'@;
put 'UGFnZShhKXtjb25zdCBmPXBhcnNlSW50KGEudGFyZ2V0LnZhbHVlLDEwKTtpc05hTihmKXx8KHRoaXMucGFnZS5jdXJyZW50PWY8MT8xOmY+dGhpcy5wYWdlLmxhc3Q/dGhpcy5wYWdlLmxhc3Q6ZiksdGhpcy5jdXJyZW50UGFnZUlucHV0UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWU9dGhpcy5w'@;
put 'YWdlLmN1cnJlbnR9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHJ0KHk0KSxydChUYSkscnQoVGQpKX0sbC5cdTAyNzVjbXA9a3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siY2xyLWRnLXBhZ2luYXRpb24iXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24o'@;
put 'YSxmLGQpe2lmKDEmYSYmRm8oZCxvWiw1KSwyJmEpe2xldCBoO3VpKGg9Y2koKSkmJihmLl9wYWdlU2l6ZUNvbXBvbmVudD1oLmZpcnN0KX19LHZpZXdRdWVyeTpmdW5jdGlvbihhLGYpe2lmKDEmYSYmTm8oWExlLDUpLDImYSl7bGV0IGQ7dWkoZD1jaSgpKSYmKGYuY3VycmVudFBhZ2VJbnB1'@;
put 'dFJlZj1kLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZil7MiZhJiZncigicGFnaW5hdGlvbiIsITApfSxpbnB1dHM6e2Rpc2FibGVDdXJyZW50UGFnZUlucHV0OlsiY2xyRGdQYWdlSW5wdXREaXNhYmxlZCIsImRpc2FibGVDdXJyZW50UGFnZUlucHV0Il0s'@;
put 'cGFnZVNpemU6WyJjbHJEZ1BhZ2VTaXplIiwicGFnZVNpemUiXSx0b3RhbEl0ZW1zOlsiY2xyRGdUb3RhbEl0ZW1zIiwidG90YWxJdGVtcyJdLGxhc3RQYWdlOlsiY2xyRGdMYXN0UGFnZSIsImxhc3RQYWdlIl0sY3VycmVudFBhZ2U6WyJjbHJEZ1BhZ2UiLCJjdXJyZW50UGFnZSJdfSxvdXRw'@;
put 'dXRzOntjdXJyZW50Q2hhbmdlZDoiY2xyRGdQYWdlQ2hhbmdlIn0sbmdDb250ZW50U2VsZWN0b3JzOm9QZSxkZWNsczoyLHZhcnM6Mixjb25zdHM6W1s0LCJuZ0lmIl0sWyJjbGFzcyIsInBhZ2luYXRpb24tc2l6ZSIsNCwibmdJZiJdLFsxLCJwYWdpbmF0aW9uLWRlc2NyaXB0aW9uIl0sWyJj'@;
put 'bGFzcyIsInBhZ2luYXRpb24tbGlzdCIsNCwibmdJZiJdLFsxLCJwYWdpbmF0aW9uLXNpemUiXSxbMSwicGFnaW5hdGlvbi1saXN0Il0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJwYWdpbmF0aW9uLWZpcnN0IiwzLCJkaXNhYmxlZCIsImNsaWNrIl0sWzEsImNsci1zci1vbmx5Il0sWyJzaGFwZSIs'@;
put 'InN0ZXAtZm9yd2FyZC0yIiwiZGlyZWN0aW9uIiwiZG93biJdLFsidHlwZSIsImJ1dHRvbiIsMSwicGFnaW5hdGlvbi1wcmV2aW91cyIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsImxlZnQiXSxbInR5cGUiLCJ0ZXh0IiwiY2xhc3MiLCJwYWdp'@;
put 'bmF0aW9uLWN1cnJlbnQgY2xyLWlucHV0IiwzLCJzaXplIiwidmFsdWUiLCJrZXlkb3duLmVudGVyIiwiYmx1ciIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJyZWFkT25seSIsIiJdLFsidHlwZSIsImJ1dHRvbiIsMSwicGFnaW5hdGlvbi1uZXh0IiwzLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJz'@;
put 'aGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwicmlnaHQiXSxbInR5cGUiLCJidXR0b24iLDEsInBhZ2luYXRpb24tbGFzdCIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsic2hhcGUiLCJzdGVwLWZvcndhcmQtMiIsImRpcmVjdGlvbiIsInVwIl0sWyJ0eXBlIiwidGV4dCIsMSwicGFnaW5hdGlv'@;
put 'bi1jdXJyZW50IiwiY2xyLWlucHV0IiwzLCJzaXplIiwidmFsdWUiLCJrZXlkb3duLmVudGVyIiwiYmx1ciJdLFsiY3VycmVudFBhZ2VJbnB1dCIsIiJdLFsxLCJwYWdpbmF0aW9uLWRlc2NyaXB0aW9uLWNvbXBhY3QiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxmKXsxJmEmJihUaShpUGUpLHR0'@;
put 'KDAsblBlLDUsMiwibmctY29udGFpbmVyIiwwKSx0dCgxLHJQZSwxNCwxMCwibmctY29udGFpbmVyIiwwKSksMiZhJiYoUmUoIm5nSWYiLCFmLmRldGFpbFNlcnZpY2UuaXNPcGVuKSxTZSgxKSxSZSgibmdJZiIsZi5kZXRhaWxTZXJ2aWNlLmlzT3BlbikpfSxkZXBlbmRlbmNpZXM6WyRpLEph'@;
put 'XSxlbmNhcHN1bGF0aW9uOjJ9KSxsfSkoKTtjb25zdCBNNz0iZGF0YWdyaWQtZml4ZWQtd2lkdGgiLG1JPSJkYXRhZ3JpZC1oaWRkZW4tY29sdW1uIjtsZXQgZTU9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhLGYsZCl7dGhpcy5lbD1hLHRoaXMucmVuZGVyZXI9Zix0aGlzLnN1YnNjcmlw'@;
put 'dGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goZC5maWx0ZXJSZW5kZXJTdGVwcyhPZC5DTEVBUl9XSURUSFMpLnN1YnNjcmliZSgoKT0+dGhpcy5jbGVhcldpZHRoKCkpKX1zZXQgY29sdW1uU3RhdGUoYSl7dGhpcy5zdGF0ZVN1YnNjcmlwdGlvbiYmdGhpcy5zdGF0ZVN1YnNjcmlw'@;
put 'dGlvbi51bnN1YnNjcmliZSgpLHRoaXMucnVuQWxsQ2hhbmdlcz1Ic2UsdGhpcy5zdGF0ZVN1YnNjcmlwdGlvbj1hLnN1YnNjcmliZShmPT50aGlzLnN0YXRlQ2hhbmdlcyhmKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpLHRo'@;
put 'aXMuc3RhdGVTdWJzY3JpcHRpb24mJnRoaXMuc3RhdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1zdGF0ZUNoYW5nZXMoYSl7dGhpcy5ydW5BbGxDaGFuZ2VzJiYoYS5jaGFuZ2VzPXRoaXMucnVuQWxsQ2hhbmdlcyxkZWxldGUgdGhpcy5ydW5BbGxDaGFuZ2VzKSxhLmNoYW5nZXMmJmEu'@;
put 'Y2hhbmdlcy5sZW5ndGgmJmEuY2hhbmdlcy5mb3JFYWNoKGY9Pntzd2l0Y2goZil7Y2FzZSB6MC5XSURUSDp0aGlzLnNldFdpZHRoKGEpO2JyZWFrO2Nhc2UgejAuSElEREVOOnRoaXMuc2V0SGlkZGVuKGEpfX0pfWNsZWFyV2lkdGgoKXt0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMu'@;
put 'ZWwubmF0aXZlRWxlbWVudCxNNyksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixudWxsKX1zZXRXaWR0aChhKXthLnN0cmljdFdpZHRoP3RoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LE03KTp0aGlzLnJlbmRl'@;
put 'cmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxNNyksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixhLndpZHRoKyJweCIpfXNldEhpZGRlbihhKXthLmhpZGRlbj90aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0'@;
put 'aXZlRWxlbWVudCxtSSk6dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsbUkpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChWaSkscnQoam8pLHJ0KFhnKSl9LGwuXHUwMjc1ZGlyPVNyKHt0eXBlOmwsc2Vs'@;
put 'ZWN0b3JzOltbImNsci1kZy1jZWxsIl1dfSksbH0pKCksdDU9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhLGYsZCxoLG0sXyxPKXt0aGlzLmVsPWEsdGhpcy5yZW5kZXJlcj1mLHRoaXMub3JnYW5pemVyPWQsdGhpcy5kb21BZGFwdGVyPWgsdGhpcy5jb2x1bW5SZXNpemVyU2VydmljZT1t'@;
put 'LHRoaXMuY29sdW1uc1NlcnZpY2U9Xyx0aGlzLmNvbHVtblN0YXRlPU8sdGhpcy5yZXNpemVFbWl0dGVyPW5ldyB4cix0aGlzLndpZHRoU2V0PSExLHRoaXMuYXV0b1NldD0hMSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5vcmdhbml6ZXIuZmls'@;
put 'dGVyUmVuZGVyU3RlcHMoT2QuQ0xFQVJfV0lEVEhTKS5zdWJzY3JpYmUoKCk9PnRoaXMuY2xlYXJXaWR0aCgpKSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goTy5zdWJzY3JpYmUoWD0+dGhpcy5zdGF0ZUNoYW5nZXMoWCkpKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JF'@;
put 'YWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9Z2V0Q29sdW1uV2lkdGhTdGF0ZSgpe2NvbnN0IGE9dGhpcy5kZXRlY3RTdHJpY3RXaWR0aCgpO3JldHVybnt3aWR0aDp0aGlzLmNvbXB1dGVXaWR0aChhKSxzdHJpY3RXaWR0aDphfX1zZXRDb2x1bW5TdGF0ZShhKXt0aGlzLmNvbHVtbnNTZXJ2aWNl'@;
put 'LmNvbHVtbnNbYV09dGhpcy5jb2x1bW5TdGF0ZX1zdGF0ZUNoYW5nZXMoYSl7YS5jaGFuZ2VzJiZhLmNoYW5nZXMubGVuZ3RoJiZhLmNoYW5nZXMuZm9yRWFjaChmPT57c3dpdGNoKGYpe2Nhc2UgejAuV0lEVEg6dGhpcy5zZXRXaWR0aChhKTticmVhaztjYXNlIHowLkhJRERFTjp0aGlzLnNl'@;
put 'dEhpZGRlbihhKX19KX1jbGVhcldpZHRoKCl7dGhpcy53aWR0aFNldCYmIXRoaXMuY29sdW1uUmVzaXplclNlcnZpY2UucmVzaXplZEJ5JiZ0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwid2lkdGgiLG51bGwpLHRoaXMuYXV0b1NldCYmdGhpcy5yZW5kZXJl'@;
put 'ci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsTTcpfWRldGVjdFN0cmljdFdpZHRoKCl7cmV0dXJuIHRoaXMuY29sdW1uUmVzaXplclNlcnZpY2UucmVzaXplZEJ5P3RoaXMuY29sdW1uUmVzaXplclNlcnZpY2Uud2lkdGhBZnRlclJlc2l6ZTp0aGlzLmF1dG9TZXQ/MDp0aGlz'@;
put 'LmRvbUFkYXB0ZXIudXNlckRlZmluZWRXaWR0aCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpfWNvbXB1dGVXaWR0aChhKXtsZXQgZj1hO3JldHVybiBmfHwoZj10aGlzLmRvbUFkYXB0ZXIuc2Nyb2xsV2lkdGgodGhpcy5lbC5uYXRpdmVFbGVtZW50KSksZn1zZXRXaWR0aChhKXthLnN0cmljdFdp'@;
put 'ZHRoPyh0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnJlc2l6ZWRCeSYmKHRoaXMucmVzaXplRW1pdHRlci5lbWl0KGEud2lkdGgpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ3aWR0aCIsYS53aWR0aCsicHgiKSx0aGlzLndpZHRoU2V0PSExKSx0aGlz'@;
put 'LnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxNNyksdGhpcy5hdXRvU2V0PSExKToodGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsTTcpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ3aWR0'@;
put 'aCIsYS53aWR0aCsicHgiKSx0aGlzLndpZHRoU2V0PSEwLHRoaXMuYXV0b1NldD0hMCl9c2V0SGlkZGVuKGEpe2EuaGlkZGVuP3RoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LG1JKTp0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxl'@;
put 'bWVudCxtSSl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHJ0KFZpKSxydChqbykscnQoWGcpLHJ0KHgxKSxydChZVSkscnQobzMpLHJ0KGlaKSl9LGwuXHUwMjc1ZGlyPVNyKHt0eXBlOmwsc2VsZWN0b3JzOltbImNsci1kZy1jb2x1bW4iXV0sb3V0'@;
put 'cHV0czp7cmVzaXplRW1pdHRlcjoiY2xyRGdDb2x1bW5SZXNpemUifSxmZWF0dXJlczpbcmkoW1lVLGVOZV0pXX0pLGx9KSgpLGlOZT0oKCk9PntjbGFzcyBse3VzZXJEZWZpbmVkV2lkdGgoYSl7cmV0dXJuIDB9c2Nyb2xsQmFyV2lkdGgoYSl7cmV0dXJuIDB9c2Nyb2xsV2lkdGgoYSl7cmV0'@;
put 'dXJuIDB9Y29tcHV0ZWRIZWlnaHQoYSl7cmV0dXJuIDB9Y2xpZW50UmVjdChhKXtyZXR1cm57dG9wOjAsYm90dG9tOjAsbGVmdDowLHJpZ2h0OjAsd2lkdGg6MCxoZWlnaHQ6MH19bWluV2lkdGgoYSl7cmV0dXJuIDB9Zm9jdXMoYSl7fX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7'@;
put 'cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVwcm92PWhyKHt0b2tlbjpsLGZhY3Rvcnk6bC5cdTAyNzVmYWN9KSxsfSkoKSxuNT0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEpe3RoaXMuY29sdW1uc1NlcnZpY2U9YSx0aGlzLnN1YnNjcmlwdGlvbnM9W119bmdBZnRlckNvbnRlbnRJbml0'@;
put 'KCl7dGhpcy5zZXRDb2x1bW5TdGF0ZSgpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuY2VsbHMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9Pnt0aGlzLnNldENvbHVtblN0YXRlKCl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJl'@;
put 'KCkpfXNldENvbHVtblN0YXRlKCl7dGhpcy5jZWxscy5sZW5ndGg9PT10aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnMubGVuZ3RoJiZ0aGlzLmNlbGxzLmZvckVhY2goKGEsZik9Pnt0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnNbZl0mJihhLmNvbHVtblN0YXRlPXRoaXMuY29sdW1uc1Nl'@;
put 'cnZpY2UuY29sdW1uc1tmXSl9KX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkocnQobzMpKX0sbC5cdTAyNzVkaXI9U3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siY2xyLWRnLXJvdyJdLFsiY2xyLWRnLXJvdy1kZXRhaWwiXV0sY29udGVudFF1ZXJpZXM6'@;
put 'ZnVuY3Rpb24oYSxmLGQpe2lmKDEmYSYmRm8oZCxlNSw0KSwyJmEpe2xldCBoO3VpKGg9Y2koKSkmJihmLmNlbGxzPWgpfX19KSxsfSkoKTtjb25zdCBvTmU9bD0+SGEobCk/bmV3IHgxOm5ldyBpTmU7bGV0IGs3PSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmLGQsaCxtLF8sTyxYLGFl'@;
put 'LHBlKXt0aGlzLm9yZ2FuaXplcj1hLHRoaXMuaXRlbXM9Zix0aGlzLnBhZ2U9ZCx0aGlzLmRvbUFkYXB0ZXI9aCx0aGlzLmVsPW0sdGhpcy5yZW5kZXJlcj1fLHRoaXMuZGV0YWlsU2VydmljZT1PLHRoaXMudGFibGVTaXplU2VydmljZT1YLHRoaXMuY29sdW1uc1NlcnZpY2U9YWUsdGhpcy5u'@;
put 'Z1pvbmU9cGUsdGhpcy5faGVpZ2h0U2V0PSExLHRoaXMuc2hvdWxkU3RhYmlsaXplQ29sdW1ucz0hMCx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5jb2x1bW5zU2l6ZXNTdGFibGU9ITEsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5vcmdhbml6ZXIuZmlsdGVyUmVuZGVyU3RlcHMo'@;
put 'T2QuQ09NUFVURV9DT0xVTU5fV0lEVEhTKS5zdWJzY3JpYmUoKCk9PnRoaXMuY29tcHV0ZUhlYWRlcnNXaWR0aCgpKSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5wYWdlLnNpemVDaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy5faGVpZ2h0U2V0JiZ0aGlzLnJlc2V0RGF0YWdyaWRI'@;
put 'ZWlnaHQoKX0pKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmRldGFpbFNlcnZpY2Uuc3RhdGVDaGFuZ2Uuc3Vic2NyaWJlKGJlPT50aGlzLnRvZ2dsZURldGFpbFBhbmUoYmUpKSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5pdGVtcy5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT50'@;
put 'aGlzLnNob3VsZFN0YWJpbGl6ZUNvbHVtbnM9ITApKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnNldHVwQ29sdW1ucygpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuaGVhZGVycy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuc2V0dXBDb2x1bW5zKCksdGhpcy5jb2x1bW5z'@;
put 'U2l6ZXNTdGFibGU9ITEsdGhpcy5zdGFiaWxpemVDb2x1bW5zKCl9KSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy50YWJsZVNpemVTZXJ2aWNlLnRhYmxlPXRoaXMuZWx9bmdBZnRlclZpZXdDaGVja2VkKCl7dGhpcy5zaG91bGRTdGFiaWxpemVDb2x1bW5zJiZ0aGlzLnN0YWJpbGl6ZUNvbHVt'@;
put 'bnMoKSx0aGlzLnNob3VsZENvbXB1dGVIZWlnaHQoKSYmdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntzZXRUaW1lb3V0KCgpPT57dGhpcy5jb21wdXRlRGF0YWdyaWRIZWlnaHQoKX0pfSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVu'@;
put 'c3Vic2NyaWJlKCkpfXRvZ2dsZURldGFpbFBhbmUoYSl7dGhpcy5oZWFkZXJzJiYoYSYmIXRoaXMuY29sdW1uc1NlcnZpY2UuaGFzQ2FjaGUoKT8odGhpcy5jb2x1bW5zU2VydmljZS5jYWNoZSgpLHRoaXMuaGVhZGVycy5mb3JFYWNoKChmLGQpPT57ZD4wJiZ0aGlzLmNvbHVtbnNTZXJ2aWNl'@;
put 'LmVtaXRTdGF0ZUNoYW5nZUF0KGQse2NoYW5nZXM6W3owLkhJRERFTl0saGlkZGVuOmF9KX0pKTphfHx0aGlzLmNvbHVtbnNTZXJ2aWNlLnJlc2V0VG9MYXN0Q2FjaGUoKSl9c2V0dXBDb2x1bW5zKCl7dGhpcy5oZWFkZXJzLmZvckVhY2goKGEsZik9PmEuc2V0Q29sdW1uU3RhdGUoZikpLHRo'@;
put 'aXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5zcGxpY2UodGhpcy5oZWFkZXJzLmxlbmd0aCksdGhpcy5yb3dzLmZvckVhY2goYT0+YS5zZXRDb2x1bW5TdGF0ZSgpKX1zaG91bGRDb21wdXRlSGVpZ2h0KCl7cmV0dXJuIXRoaXMuX2hlaWdodFNldCYmdGhpcy5wYWdlLnNpemU+MCYmdGhpcy5p'@;
put 'dGVtcy5kaXNwbGF5ZWQubGVuZ3RoPT09dGhpcy5wYWdlLnNpemV9Y29tcHV0ZURhdGFncmlkSGVpZ2h0KCl7Y29uc3QgYT10aGlzLmRvbUFkYXB0ZXIuY2xpZW50UmVjdCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpLmhlaWdodDt0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZl'@;
put 'RWxlbWVudCwiaGVpZ2h0IixhKyJweCIpLHRoaXMuX2hlaWdodFNldD0hMH1yZXNldERhdGFncmlkSGVpZ2h0KCl7dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImhlaWdodCIsIiIpLHRoaXMuX2hlaWdodFNldD0hMX1jb21wdXRlSGVhZGVyc1dpZHRoKCl7'@;
put 'Y29uc3QgYT10aGlzLmhlYWRlcnMubGVuZ3RoO2xldCBmPSEwO3RoaXMuaGVhZGVycy5mb3JFYWNoKChkLGgpPT57Y29uc3QgbT17Y2hhbmdlczpbejAuV0lEVEhdLC4uLmQuZ2V0Q29sdW1uV2lkdGhTdGF0ZSgpfTttLnN0cmljdFdpZHRofHwoZj0hMSksYT09PWgrMSYmZiYmKG0uc3RyaWN0'@;
put 'V2lkdGg9MCksdGhpcy5jb2x1bW5zU2VydmljZS5lbWl0U3RhdGVDaGFuZ2VBdChoLG0pfSl9c3RhYmlsaXplQ29sdW1ucygpe3RoaXMuc2hvdWxkU3RhYmlsaXplQ29sdW1ucz0hMSwhdGhpcy5jb2x1bW5zU2l6ZXNTdGFibGUmJnRoaXMuaXRlbXMuZGlzcGxheWVkLmxlbmd0aD4wJiYodGhp'@;
put 'cy5vcmdhbml6ZXIucmVzaXplKCksdGhpcy5jb2x1bW5zU2l6ZXNTdGFibGU9ITApfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChYZykscnQoXzQpLHJ0KHk0KSxydCh4MSkscnQoVmkpLHJ0KGpvKSxydChUZCkscnQoV1UpLHJ0KG8zKSxydChV'@;
put 'bykpfSxsLlx1MDI3NWRpcj1Tcih7dHlwZTpsLHNlbGVjdG9yczpbWyJjbHItZGF0YWdyaWQiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxmLGQpe2lmKDEmYSYmKEZvKGQsdDUsNCksRm8oZCxuNSw1KSksMiZhKXtsZXQgaDt1aShoPWNpKCkpJiYoZi5oZWFkZXJzPWgpLHVpKGg9Y2ko'@;
put 'KSkmJihmLnJvd3M9aCl9fSxmZWF0dXJlczpbcmkoW3twcm92aWRlOngxLHVzZUZhY3Rvcnk6b05lLGRlcHM6W3FhXX1dKV19KSxsfSkoKSxhTmU9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3Rvcigpe2phLmFkZEljb25zKHFBZSxYQWUsTkMsSkFlLFhvZSxRQWUsSm9lLGVUZSx0VGUpfX1yZXR1'@;
put 'cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVtb2Q9RGkoe3R5cGU6bH0pLGwuXHUwMjc1aW5qPXhpKHtpbXBvcnRzOltbYm8sbGwsRHNlLGRjLENVLEFmLFpIZSxJc2UscHNlLGZTLGxTLE9VLEpELFdnXV19KSxsfSkoKSxac2U9KCgpPT57Y2xh'@;
put 'c3MgbHt9cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1ZGlyPVNyKHt0eXBlOmwsc2VsZWN0b3JzOltbImNsci1zdGFjay1jb250ZW50Il1dfSksbH0pKCksYVo9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3Rvcigpe3RoaXMuX2dlbmVyYXRl'@;
put 'ZElkPW51bGwsdGhpcy5faWQ9bnVsbH1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWR9c2V0IGlkKGEpe3RoaXMuX2lkPSJzdHJpbmciPT10eXBlb2YgYSYmIiIhPT1hP2E6dGhpcy5fZ2VuZXJhdGVkSWQrIiJ9bmdPbkluaXQoKXt0aGlzLl9nZW5lcmF0ZWRJZD0iY2xyLXN0YWNrLWxhYmVsLSIr'@;
put 'SHUoKSx0aGlzLmlkfHwodGhpcy5faWQ9dGhpcy5fZ2VuZXJhdGVkSWQrIiIpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVjbXA9a3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siY2xyLXN0YWNrLWxhYmVsIl1dLGhvc3RWYXJzOjEsaG9z'@;
put 'dEJpbmRpbmdzOmZ1bmN0aW9uKGEsZil7MiZhJiZScigiaWQiLGYuaWQpfSxpbnB1dHM6e2lkOiJpZCJ9LG5nQ29udGVudFNlbGVjdG9yczpPbyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGYpezEmYSYmKFRpKCksRHIoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxsfSkoKSxZ'@;
put 'c2U9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhLGYpe3RoaXMucGFyZW50PWEsdGhpcy5jb21tb25TdHJpbmdzPWYsdGhpcy5leHBhbmRlZD0hMSx0aGlzLmV4cGFuZGFibGU9ITEsdGhpcy5leHBhbmRlZENoYW5nZT1uZXcgeHIoITEpLHRoaXMuZm9jdXNlZD0hMSx0aGlzLnVuaXF1ZUlk'@;
put 'PUh1KCksdGhpcy5fY2hhbmdlZENoaWxkcmVuPTAsdGhpcy5fZnVsbHlJbml0aWFsaXplZD0hMSx0aGlzLl9jaGFuZ2VkPSExLGEmJmEuYWRkQ2hpbGQoKX1zZXQgc2V0Q2hhbmdlZFZhbHVlKGEpe3RoaXMuX2NoYW5nZWQ9YSx0aGlzLnBhcmVudCYmdGhpcy5fZnVsbHlJbml0aWFsaXplZCYm'@;
put 'KGE/dGhpcy5wYXJlbnQuX2NoYW5nZWRDaGlsZHJlbisrOnRoaXMucGFyZW50Ll9jaGFuZ2VkQ2hpbGRyZW4tLSl9Z2V0IGdldENoYW5nZWRWYWx1ZSgpe3JldHVybiB0aGlzLl9jaGFuZ2VkfHx0aGlzLl9jaGFuZ2VkQ2hpbGRyZW4+MCYmIXRoaXMuZXhwYW5kZWR9Z2V0IG9uU3RhY2tMYWJl'@;
put 'bEZvY3VzKCl7cmV0dXJuIHRoaXMuZXhwYW5kYWJsZSYmIXRoaXMuZXhwYW5kZWQmJnRoaXMuZm9jdXNlZH1nZXQgbGFiZWxsZWRCeUlkKCl7cmV0dXJuIHRoaXMuc3RhY2tCbG9ja1RpdGxlLmlkfWdldCBoZWFkaW5nTGV2ZWwoKXtyZXR1cm4gdGhpcy5hcmlhTGV2ZWw/dGhpcy5hcmlhTGV2'@;
put 'ZWwrIiI6dGhpcy5wYXJlbnQ/IjQiOiIzIn1nZXQgY2FyZXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5leHBhbmRlZD8iZG93biI6InJpZ2h0In1nZXQgcm9sZSgpe3JldHVybiB0aGlzLmV4cGFuZGFibGU/ImJ1dHRvbiI6bnVsbH1nZXQgdGFiSW5kZXgoKXtyZXR1cm4gdGhpcy5leHBhbmRh'@;
put 'YmxlPyIwIjpudWxsfWdldCBhcmlhRXhwYW5kZWQoKXtyZXR1cm4gdGhpcy5leHBhbmRhYmxlP3RoaXMuZXhwYW5kZWQ/InRydWUiOiJmYWxzZSI6bnVsbH1uZ09uSW5pdCgpe3RoaXMuX2Z1bGx5SW5pdGlhbGl6ZWQ9ITB9YWRkQ2hpbGQoKXt0aGlzLmV4cGFuZGFibGU9ITB9dG9nZ2xlRXhw'@;
put 'YW5kKCl7dGhpcy5leHBhbmRhYmxlJiYodGhpcy5leHBhbmRlZD0hdGhpcy5leHBhbmRlZCx0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodGhpcy5leHBhbmRlZCkpfWdldFN0YWNrQ2hpbGRyZW5JZCgpe3JldHVybiB0aGlzLmV4cGFuZGVkP2BjbHItc3RhY2stY2hpbGRyZW4tJHt0aGlzLnVu'@;
put 'aXF1ZUlkfWA6bnVsbH19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkocnQobCwxMikscnQoVGEpKX0sbC5cdTAyNzVjbXA9a3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siY2xyLXN0YWNrLWJsb2NrIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZixk'@;
put 'KXtpZigxJmEmJkZvKGQsYVosNSksMiZhKXtsZXQgaDt1aShoPWNpKCkpJiYoZi5zdGFja0Jsb2NrVGl0bGU9aC5maXJzdCl9fSxob3N0VmFyczoxMixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxmKXsyJmEmJihScigicm9sZSIsImhlYWRpbmciKSgiYXJpYS1sZXZlbCIsZi5oZWFkaW5nTGV2'@;
put 'ZWwpLGdyKCJzdGFjay1ibG9jayIsITApKCJzdGFjay1ibG9jay1leHBhbmRlZCIsZi5leHBhbmRlZCkoInN0YWNrLWJsb2NrLWV4cGFuZGFibGUiLGYuZXhwYW5kYWJsZSkoInN0YWNrLWJsb2NrLWNoYW5nZWQiLGYuZ2V0Q2hhbmdlZFZhbHVlKSgib24tZm9jdXMiLGYub25TdGFja0xhYmVs'@;
put 'Rm9jdXMpKX0saW5wdXRzOntleHBhbmRlZDpbImNsclNiRXhwYW5kZWQiLCJleHBhbmRlZCJdLGV4cGFuZGFibGU6WyJjbHJTYkV4cGFuZGFibGUiLCJleHBhbmRhYmxlIl0sYXJpYUxldmVsOlsiY2xyU3RhY2tWaWV3TGV2ZWwiLCJhcmlhTGV2ZWwiXSxhcmlhU2V0c2l6ZTpbImNsclN0YWNr'@;
put 'Vmlld1NldHNpemUiLCJhcmlhU2V0c2l6ZSJdLGFyaWFQb3NpbnNldDpbImNsclN0YWNrVmlld1Bvc2luc2V0IiwiYXJpYVBvc2luc2V0Il0sc2V0Q2hhbmdlZFZhbHVlOlsiY2xyU2JOb3RpZnlDaGFuZ2UiLCJzZXRDaGFuZ2VkVmFsdWUiXX0sb3V0cHV0czp7ZXhwYW5kZWRDaGFuZ2U6ImNs'@;
put 'clNiRXhwYW5kZWRDaGFuZ2UifSxuZ0NvbnRlbnRTZWxlY3RvcnM6Y1BlLGRlY2xzOjksdmFyczo5LGNvbnN0czpbWzEsInN0YWNrLWJsb2NrLWxhYmVsIiwzLCJpZCIsImNsaWNrIiwia2V5dXAuZW50ZXIiLCJrZXl1cC5zcGFjZSIsImtleWRvd24uc3BhY2UiLCJmb2N1cyIsImJsdXIiXSxb'@;
put 'InNoYXBlIiwiYW5nbGUiLCJjbGFzcyIsInN0YWNrLWJsb2NrLWNhcmV0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1zci1vbmx5Iiw0LCJuZ0lmIl0sWzEsInN0YWNrLXZpZXcta2V5Il0sWzEsInN0YWNrLWJsb2NrLWNvbnRlbnQiXSxbMSwic3RhY2stY2hpbGRyZW4iLDMsImNsckV4cGFu'@;
put 'ZFRyaWdnZXIiXSxbInJvbGUiLCJyZWdpb24iLDMsImhlaWdodCIsNCwibmdJZiJdLFsic2hhcGUiLCJhbmdsZSIsMSwic3RhY2stYmxvY2stY2FyZXQiXSxbMSwiY2xyLXNyLW9ubHkiXSxbInJvbGUiLCJyZWdpb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxmKXsxJmEmJihUaSh1UGUpLHll'@;
put 'KDAsImRpdiIsMCksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBmLnRvZ2dsZUV4cGFuZCgpfSkoImtleXVwLmVudGVyIixmdW5jdGlvbigpe3JldHVybiBmLnRvZ2dsZUV4cGFuZCgpfSkoImtleXVwLnNwYWNlIixmdW5jdGlvbigpe3JldHVybiBmLnRvZ2dsZUV4cGFuZCgpfSkoImtl'@;
put 'eWRvd24uc3BhY2UiLGZ1bmN0aW9uKGgpe3JldHVybiBoLnByZXZlbnREZWZhdWx0KCl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGYuZm9jdXNlZD0hMH0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBmLmZvY3VzZWQ9ITF9KSx0dCgxLGFQZSwxLDEsImNkcy1pY29uIiwxKSx0dCgy'@;
put 'LGxQZSwyLDEsInNwYW4iLDIpLHllKDMsImRpdiIsMyksRHIoNCksQ2UoKSx5ZSg1LCJkaXYiLDQpLERyKDYsMSksQ2UoKSgpLHllKDcsImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiIsNSksdHQoOCxzUGUsMiw0LCJkaXYiLDYpLENlKCkpLDImYSYmKFJlKCJpZCIsZi51bmlxdWVJZCksUnIo'@;
put 'InJvbGUiLGYucm9sZSkoInRhYmluZGV4IixmLnRhYkluZGV4KSgiYXJpYS1leHBhbmRlZCIsZi5hcmlhRXhwYW5kZWQpKCJhcmlhLWNvbnRyb2xzIixmLmdldFN0YWNrQ2hpbGRyZW5JZCgpKSxTZSgxKSxSZSgibmdJZiIsZi5leHBhbmRhYmxlKSxTZSgxKSxSZSgibmdJZiIsZi5nZXRDaGFu'@;
put 'Z2VkVmFsdWUpLFNlKDUpLFJlKCJjbHJFeHBhbmRUcmlnZ2VyIixmLmV4cGFuZGVkKSxTZSgxKSxSZSgibmdJZiIsZi5leHBhbmRlZCkpfSxkZXBlbmRlbmNpZXM6W1hELCRpLEphXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6YmxvY2t9Il19KSxsfSkoKSxFNz0oKCk9Pntj'@;
put 'bGFzcyBse2NvbnN0cnVjdG9yKCl7dGhpcy5zYXZlPW5ldyB4cighMSksdGhpcy5lZGl0YWJsZT0hMSx0aGlzLmVkaXRpbmdDaGFuZ2U9bmV3IHhyKCExKSx0aGlzLl9lZGl0TW9kZT0hMX1nZXQgZWRpdGluZygpe3JldHVybiB0aGlzLmVkaXRhYmxlJiZ0aGlzLl9lZGl0TW9kZX1zZXQgZWRp'@;
put 'dGluZyhhKXt0aGlzLmVkaXRhYmxlJiYodGhpcy5fZWRpdE1vZGU9YSx0aGlzLmVkaXRpbmdDaGFuZ2UuZW1pdChhKSxhfHx0aGlzLnNhdmUuZW1pdChudWxsKSl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NWNtcD1rcih7dHlwZTps'@;
put 'LHNlbGVjdG9yczpbWyJjbHItc3RhY2stdmlldyJdXSxvdXRwdXRzOntzYXZlOiJjbHJTdGFja1NhdmUifSxuZ0NvbnRlbnRTZWxlY3RvcnM6ZFBlLGRlY2xzOjMsdmFyczowLGNvbnN0czpbWzEsInN0YWNrLXZpZXciXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxmKXsxJmEmJihUaShmUGUpLERy'@;
put 'KDApLHllKDEsImRpdiIsMCksRHIoMiwxKSxDZSgpKX0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmJsb2NrfSJdfSksbH0pKCksdU5lPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoKXtqYS5hZGRJY29ucyhadil9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXty'@;
put 'ZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NW1vZD1EaSh7dHlwZTpsfSksbC5cdTAyNzVpbmo9eGkoe2ltcG9ydHM6W1tibyxkYyxsbCxJc2VdXX0pLGx9KSgpLHI1PSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoKXt0aGlzLnNlbGVjdGFibGU9ITEsdGhpcy5lYWdlcj0hMCx0aGlzLmNoaWxk'@;
put 'cmVuRmV0Y2hlZD1uZXcgd2V9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmwsZmFjdG9yeTpsLlx1MDI3NWZhY30pLGx9KSgpO2NvbnN0IEdzZT17cHJvdmlkZTpyNSx1c2VGYWN0b3J5OmZ1bmN0aW9uIGNO'@;
put 'ZShsKXtyZXR1cm4gbHx8bmV3IHI1fSxkZXBzOltbbmV3IGNoLG5ldyBFMCxyNV1dfTtsZXQgJHNlPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmKXt0aGlzLmZlYXR1cmVzU2VydmljZT1hLHRoaXMuZXhwYW5kU2VydmljZT1mLGYmJih0aGlzLnN1YnNjcmlwdGlvbj10aGlzLmV4cGFu'@;
put 'ZFNlcnZpY2UuZXhwYW5kQ2hhbmdlLnN1YnNjcmliZShkPT57IWQmJnRoaXMucGFyZW50JiYhdGhpcy5mZWF0dXJlc1NlcnZpY2UuZWFnZXImJnRoaXMuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbiYmdGhpcy5wYXJlbnQuY2xlYXJDaGlsZHJlbigpfSkpfXNob3VsZFJlbmRlcigpe3JldHVy'@;
put 'biB0aGlzLmZlYXR1cmVzU2VydmljZS5yZWN1cnNpb24mJih0aGlzLmZlYXR1cmVzU2VydmljZS5lYWdlcnx8IXRoaXMuZXhwYW5kU2VydmljZXx8dGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkKX1nZXRDb250ZXh0KGEpe3JldHVybnskaW1wbGljaXQ6YS5tb2RlbCxjbHJNb2RlbDphfX1u'@;
put 'Z09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChyNSkscnQoUWMsOCkpfSxsLlx1MDI3NWNtcD1rcih7dHlwZTpsLHNlbGVjdG9yczpb'@;
put 'WyJjbHItcmVjdXJzaXZlLWNoaWxkcmVuIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZil7MiZhJiZScigicm9sZSIsImdyb3VwIil9LGlucHV0czp7cGFyZW50OiJwYXJlbnQiLGNoaWxkcmVuOiJjaGlsZHJlbiJ9LGRlY2xzOjEsdmFyczoxLGNvbnN0czpbWzQsIm5n'@;
put 'SWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGYpezEmYSYmdHQoMCxDUGUsMiwxLCJuZy1jb250YWluZXIiLDApLDImYSYmUmUoIm5nSWYiLGYuc2hvdWxkUmVuZGVy'@;
put 'KCkpfSxkZXBlbmRlbmNpZXM6WyRpLFJhLHlkXSxlbmNhcHN1bGF0aW9uOjJ9KSxsfSkoKTt2YXIgX3U9ZnVuY3Rpb24obCl7cmV0dXJuIGxbbC5VTlNFTEVDVEVEPTBdPSJVTlNFTEVDVEVEIixsW2wuU0VMRUNURUQ9MV09IlNFTEVDVEVEIixsW2wuSU5ERVRFUk1JTkFURT0yXT0iSU5ERVRF'@;
put 'Uk1JTkFURSIsbH0oX3V8fHt9KTtjbGFzcyBLc2V7Y29uc3RydWN0b3IoKXt0aGlzLmxvYWRpbmckPW5ldyBPZSghMSksdGhpcy5zZWxlY3RlZD1uZXcgT2UoX3UuVU5TRUxFQ1RFRCksdGhpcy5fbG9hZGluZz0hMX1nZXQgbG9hZGluZygpe3JldHVybiB0aGlzLl9sb2FkaW5nfXNldCBsb2Fk'@;
put 'aW5nKGMpe3RoaXMuX2xvYWRpbmc9Yyx0aGlzLmxvYWRpbmckLm5leHQoYyl9ZGVzdHJveSgpe3RoaXMuc2VsZWN0ZWQuY29tcGxldGUoKX1zZXRTZWxlY3RlZChjLGEsZil7YyE9PXRoaXMuc2VsZWN0ZWQudmFsdWUmJih0aGlzLnNlbGVjdGVkLm5leHQoYyksZiYmYyE9PV91LklOREVURVJN'@;
put 'SU5BVEUmJnRoaXMuY2hpbGRyZW4mJnRoaXMuY2hpbGRyZW4uZm9yRWFjaChkPT5kLnNldFNlbGVjdGVkKGMsITEsITApKSxhJiZ0aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQuX3VwZGF0ZVNlbGVjdGlvbkZyb21DaGlsZHJlbigpKX10b2dnbGVTZWxlY3Rpb24oYyl7dGhpcy5zZXRTZWxlY3Rl'@;
put 'ZCh0aGlzLnNlbGVjdGVkLnZhbHVlPT09X3UuU0VMRUNURUQ/X3UuVU5TRUxFQ1RFRDpfdS5TRUxFQ1RFRCwhMCxjKX1fdXBkYXRlU2VsZWN0aW9uRnJvbUNoaWxkcmVuKCl7Y29uc3QgYz10aGlzLmNvbXB1dGVTZWxlY3Rpb25TdGF0ZUZyb21DaGlsZHJlbigpO2MhPT10aGlzLnNlbGVjdGVk'@;
put 'LnZhbHVlJiYodGhpcy5zZWxlY3RlZC5uZXh0KGMpLHRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5fdXBkYXRlU2VsZWN0aW9uRnJvbUNoaWxkcmVuKCkpfWNvbXB1dGVTZWxlY3Rpb25TdGF0ZUZyb21DaGlsZHJlbigpe2xldCBjPSExLGE9ITE7Zm9yKGNvbnN0IGYgb2YgdGhpcy5jaGlsZHJl'@;
put 'bilzd2l0Y2goZi5zZWxlY3RlZC52YWx1ZSl7Y2FzZSBfdS5JTkRFVEVSTUlOQVRFOnJldHVybiBfdS5JTkRFVEVSTUlOQVRFO2Nhc2UgX3UuU0VMRUNURUQ6aWYoYz0hMCxhKXJldHVybiBfdS5JTkRFVEVSTUlOQVRFO2JyZWFrO2RlZmF1bHQ6aWYoYT0hMCxjKXJldHVybiBfdS5JTkRFVEVS'@;
put 'TUlOQVRFfXJldHVybiBjP2E/X3UuVU5TRUxFQ1RFRDpfdS5TRUxFQ1RFRDpfdS5VTlNFTEVDVEVEfX1jbGFzcyBnSSBleHRlbmRzIEtzZXtjb25zdHJ1Y3RvcihjLGEsZixkKXtzdXBlcigpLHRoaXMuZ2V0Q2hpbGRyZW49Zix0aGlzLmZlYXR1cmVzU2VydmljZT1kLHRoaXMuY2hpbGRyZW5G'@;
put 'ZXRjaGVkPSExLHRoaXMuX2NoaWxkcmVuPVtdLHRoaXMubW9kZWw9Yyx0aGlzLnBhcmVudD1hfWdldCBjaGlsZHJlbigpe3JldHVybiB0aGlzLmZldGNoQ2hpbGRyZW4oKSx0aGlzLl9jaGlsZHJlbn1zZXQgY2hpbGRyZW4oYyl7dGhpcy5fY2hpbGRyZW49Y31kZXN0cm95KCl7dGhpcy5zdWJz'@;
put 'Y3JpcHRpb24mJnRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksc3VwZXIuZGVzdHJveSgpfWNsZWFyQ2hpbGRyZW4oKXt0aGlzLl9jaGlsZHJlbi5mb3JFYWNoKGM9PmMuZGVzdHJveSgpKSxkZWxldGUgdGhpcy5fY2hpbGRyZW4sdGhpcy5jaGlsZHJlbkZldGNoZWQ9ITF9ZmV0Y2hD'@;
put 'aGlsZHJlbigpe2lmKHRoaXMuY2hpbGRyZW5GZXRjaGVkKXJldHVybjtjb25zdCBjPXRoaXMuZ2V0Q2hpbGRyZW4odGhpcy5tb2RlbCk7IWZ1bmN0aW9uIGZOZShsKXtyZXR1cm4gbCYmImZ1bmN0aW9uIj09dHlwZW9mIGwudGhlbn0oYyk/RWooYyk/KHRoaXMubG9hZGluZz0hMCx0aGlzLnN1'@;
put 'YnNjcmlwdGlvbj1jLnN1YnNjcmliZShhPT57dGhpcy5fY2hpbGRyZW49dGhpcy53cmFwQ2hpbGRyZW4oYSksdGhpcy5sb2FkaW5nPSExfSkpOnRoaXMuX2NoaWxkcmVuPWM/dGhpcy53cmFwQ2hpbGRyZW4oYyk6W106KHRoaXMubG9hZGluZz0hMCxjLnRoZW4oYT0+e3RoaXMuX2NoaWxkcmVu'@;
put 'PXRoaXMud3JhcENoaWxkcmVuKGEpLHRoaXMubG9hZGluZz0hMX0pKSx0aGlzLmNoaWxkcmVuRmV0Y2hlZD0hMCx0aGlzLmZlYXR1cmVzU2VydmljZSYmdGhpcy5mZWF0dXJlc1NlcnZpY2UuY2hpbGRyZW5GZXRjaGVkLm5leHQoKX13cmFwQ2hpbGRyZW4oYyl7cmV0dXJuIGMubWFwKGE9Pm5l'@;
put 'dyBnSShhLHRoaXMsdGhpcy5nZXRDaGlsZHJlbix0aGlzLmZlYXR1cmVzU2VydmljZSkpfX1sZXQgcXNlPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmLGQpe3RoaXMudGVtcGxhdGU9YSx0aGlzLmZlYXR1cmVzU2VydmljZT1mLHRoaXMuY2RyPWR9bmdPbkNoYW5nZXMoKXtsZXQgYTth'@;
put 'PUFycmF5LmlzQXJyYXkodGhpcy5ub2Rlcyk/dGhpcy5ub2Rlcy5tYXAoZj0+bmV3IGdJKGYsbnVsbCx0aGlzLmdldENoaWxkcmVuLHRoaXMuZmVhdHVyZXNTZXJ2aWNlKSk6W25ldyBnSSh0aGlzLm5vZGVzLG51bGwsdGhpcy5nZXRDaGlsZHJlbix0aGlzLmZlYXR1cmVzU2VydmljZSldLHRo'@;
put 'aXMuY2hpbGRyZW5GZXRjaFN1YnNjcmlwdGlvbnx8KHRoaXMuY2hpbGRyZW5GZXRjaFN1YnNjcmlwdGlvbj10aGlzLmZlYXR1cmVzU2VydmljZS5jaGlsZHJlbkZldGNoZWQucGlwZShZdigwKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpfSkpLHRoaXMuZmVhdHVy'@;
put 'ZXNTZXJ2aWNlLnJlY3Vyc2lvbj17dGVtcGxhdGU6dGhpcy50ZW1wbGF0ZSxyb290OmF9fW5nT25EZXN0cm95KCl7dGhpcy5jaGlsZHJlbkZldGNoU3Vic2NyaXB0aW9uJiZ0aGlzLmNoaWxkcmVuRmV0Y2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1'@;
put 'bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkocnQoemwpLHJ0KHI1KSxydChVbCkpfSxsLlx1MDI3NWRpcj1Tcih7dHlwZTpsLHNlbGVjdG9yczpbWyIiLCJjbHJSZWN1cnNpdmVGb3IiLCIiLCJjbHJSZWN1cnNpdmVGb3JPZiIsIiJdXSxpbnB1dHM6e25vZGVzOlsiY2xyUmVjdXJzaXZlRm9y'@;
put 'T2YiLCJub2RlcyJdLGdldENoaWxkcmVuOlsiY2xyUmVjdXJzaXZlRm9yR2V0Q2hpbGRyZW4iLCJnZXRDaGlsZHJlbiJdfSxmZWF0dXJlczpbYmxdfSksbH0pKCksbFo9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3Rvcigpe3RoaXMuX2ZvY3VzUmVxdWVzdD1uZXcgd2UsdGhpcy5fZm9jdXNDaGFu'@;
put 'Z2U9bmV3IHdlfWdldCBmb2N1c1JlcXVlc3QoKXtyZXR1cm4gdGhpcy5fZm9jdXNSZXF1ZXN0LmFzT2JzZXJ2YWJsZSgpfWdldCBmb2N1c0NoYW5nZSgpe3JldHVybiB0aGlzLl9mb2N1c0NoYW5nZS5hc09ic2VydmFibGUoKX1mb2N1c05vZGUoYSl7YSYmdGhpcy5fZm9jdXNSZXF1ZXN0Lm5l'@;
put 'eHQoYS5ub2RlSWQpfWJyb2FkY2FzdEZvY3VzZWROb2RlKGEpe3RoaXMuZm9jdXNlZE5vZGVJZCE9PWEmJih0aGlzLmZvY3VzZWROb2RlSWQ9YSx0aGlzLl9mb2N1c0NoYW5nZS5uZXh0KGEpKX1mb2N1c1BhcmVudChhKXthJiZ0aGlzLmZvY3VzTm9kZShhLnBhcmVudCl9Zm9jdXNGaXJzdFZp'@;
put 'c2libGVOb2RlKCl7dGhpcy5mb2N1c05vZGUodGhpcy5yb290Tm9kZU1vZGVscyYmdGhpcy5yb290Tm9kZU1vZGVsc1swXSl9Zm9jdXNMYXN0VmlzaWJsZU5vZGUoKXt0aGlzLmZvY3VzTm9kZSh0aGlzLmZpbmRMYXN0VmlzaWJsZUluVHJlZSgpKX1mb2N1c05vZGVBYm92ZShhKXt0aGlzLmZv'@;
put 'Y3VzTm9kZSh0aGlzLmZpbmROb2RlQWJvdmUoYSkpfWZvY3VzTm9kZUJlbG93KGEpe3RoaXMuZm9jdXNOb2RlKHRoaXMuZmluZE5vZGVCZWxvdyhhKSl9Zm9jdXNOb2RlU3RhcnRzV2l0aChhLGYpe3RoaXMuZm9jdXNOb2RlKHRoaXMuZmluZENsb3Nlc3ROb2RlU3RhcnRzV2l0aChhLGYpKX1m'@;
put 'aW5kU2libGluZ3MoYSl7cmV0dXJuIGEucGFyZW50P2EucGFyZW50LmNoaWxkcmVuOnRoaXMucm9vdE5vZGVNb2RlbHN9ZmluZExhc3RWaXNpYmxlSW5Ob2RlKGEpe2lmKCFhKXJldHVybiBudWxsO2lmKGEuZXhwYW5kZWQmJmEuY2hpbGRyZW4ubGVuZ3RoPjApe2NvbnN0IGY9YS5jaGlsZHJl'@;
put 'bjtyZXR1cm4gdGhpcy5maW5kTGFzdFZpc2libGVJbk5vZGUoZltmLmxlbmd0aC0xXSl9cmV0dXJuIGF9ZmluZE5leHRGb2N1c2FibGUoYSl7aWYoIWEpcmV0dXJuIG51bGw7Y29uc3QgZj10aGlzLmZpbmRTaWJsaW5ncyhhKSxkPWYuaW5kZXhPZihhKTtyZXR1cm4gZDxmLmxlbmd0aC0xP2Zb'@;
put 'ZCsxXTpkPT09Zi5sZW5ndGgtMT90aGlzLmZpbmROZXh0Rm9jdXNhYmxlKGEucGFyZW50KTpudWxsfWZpbmRMYXN0VmlzaWJsZUluVHJlZSgpe3JldHVybiB0aGlzLmZpbmRMYXN0VmlzaWJsZUluTm9kZSh0aGlzLnJvb3ROb2RlTW9kZWxzJiZ0aGlzLnJvb3ROb2RlTW9kZWxzLmxlbmd0aCYm'@;
put 'dGhpcy5yb290Tm9kZU1vZGVsc1t0aGlzLnJvb3ROb2RlTW9kZWxzLmxlbmd0aC0xXSl9ZmluZE5vZGVBYm92ZShhKXtpZighYSlyZXR1cm4gbnVsbDtjb25zdCBmPXRoaXMuZmluZFNpYmxpbmdzKGEpLGQ9Zi5pbmRleE9mKGEpO3JldHVybiAwPT09ZD9hLnBhcmVudDpkPjA/dGhpcy5maW5k'@;
put 'TGFzdFZpc2libGVJbk5vZGUoZltkLTFdKTpudWxsfWZpbmROb2RlQmVsb3coYSl7cmV0dXJuIGE/YS5leHBhbmRlZCYmYS5jaGlsZHJlbi5sZW5ndGg+MD9hLmNoaWxkcmVuWzBdOnRoaXMuZmluZE5leHRGb2N1c2FibGUoYSk6bnVsbH1maW5kRGVzY2VuZGVudE5vZGVTdGFydHNXaXRoKGEs'@;
put 'Zil7aWYoZi5leHBhbmRlZCYmZi5jaGlsZHJlbi5sZW5ndGg+MClmb3IoY29uc3QgZCBvZiBmLmNoaWxkcmVuKXtjb25zdCBoPXRoaXMuZmluZE5vZGVTdGFydHNXaXRoKGEsZCk7aWYoaClyZXR1cm4gaH1yZXR1cm4gbnVsbH1maW5kU2libGluZ05vZGVTdGFydHNXaXRoKGEsZil7Y29uc3Qg'@;
put 'ZD10aGlzLmZpbmRTaWJsaW5ncyhmKTtmb3IobGV0IG09ZC5pbmRleE9mKGYpKzE7bTxkLmxlbmd0aDttKyspe2NvbnN0IE89dGhpcy5maW5kTm9kZVN0YXJ0c1dpdGgoYSxkW21dKTtpZihPKXJldHVybiBPfXJldHVybiBudWxsfWZpbmRSb290Tm9kZVN0YXJ0c1dpdGgoYSxmKXtmb3IoY29u'@;
put 'c3QgZCBvZiB0aGlzLnJvb3ROb2RlTW9kZWxzKXtpZihmLnBhcmVudCYmZi5wYXJlbnQ9PT1kKWNvbnRpbnVlO2NvbnN0IGg9dGhpcy5maW5kTm9kZVN0YXJ0c1dpdGgoYSxkKTtpZihoKXJldHVybiBofXJldHVybiBudWxsfWZpbmROb2RlU3RhcnRzV2l0aChhLGYpe3JldHVybiBmP2YudGV4'@;
put 'dENvbnRlbnQuc3RhcnRzV2l0aChhKT9mOnRoaXMuZmluZERlc2NlbmRlbnROb2RlU3RhcnRzV2l0aChhLGYpOm51bGx9ZmluZENsb3Nlc3ROb2RlU3RhcnRzV2l0aChhLGYpe2lmKCFmKXJldHVybiBudWxsO2NvbnN0IGQ9dGhpcy5maW5kRGVzY2VuZGVudE5vZGVTdGFydHNXaXRoKGEsZik7'@;
put 'aWYoZClyZXR1cm4gZDtjb25zdCBoPXRoaXMuZmluZFNpYmxpbmdOb2RlU3RhcnRzV2l0aChhLGYpO3JldHVybiBofHwodGhpcy5maW5kUm9vdE5vZGVTdGFydHNXaXRoKGEsZil8fHRoaXMuZmluZE5vZGVTdGFydHNXaXRoKGEsZi5wYXJlbnQpKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0'@;
put 'aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1cHJvdj1ocih7dG9rZW46bCxmYWN0b3J5OmwuXHUwMjc1ZmFjfSksbH0pKCk7Y2xhc3MgZE5lIGV4dGVuZHMgS3Nle2NvbnN0cnVjdG9yKGMpe3N1cGVyKCksdGhpcy5wYXJlbnQ9YyxjJiZjLl9hZGRDaGlsZCh0aGlzKSx0aGlzLmNo'@;
put 'aWxkcmVuPVtdfWRlc3Ryb3koKXt0aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQuX3JlbW92ZUNoaWxkKHRoaXMpLHN1cGVyLmRlc3Ryb3koKX1fYWRkQ2hpbGQoYyl7dGhpcy5jaGlsZHJlbi5wdXNoKGMpfV9yZW1vdmVDaGlsZChjKXtjb25zdCBhPXRoaXMuY2hpbGRyZW4uaW5kZXhPZihjKTth'@;
put 'Pi0xJiZ0aGlzLmNoaWxkcmVuLnNwbGljZShhLDEpfX1sZXQgaTU9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhKXt0aGlzLmVsPWF9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCJhY3RpdmUiKX1hY3RpdmF0ZSgpe3RoaXMu'@;
put 'ZWwubmF0aXZlRWxlbWVudCYmdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsaWNrJiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xpY2soKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkocnQoVmkpKX0sbC5cdTAyNzVkaXI9U3Ioe3R5cGU6bCxzZWxlY3Rv'@;
put 'cnM6W1siIiw4LCJjbHItdHJlZW5vZGUtbGluayJdXX0pLGx9KSgpLExmPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmLGQsaCxtLF8sTyxYKXt0aGlzLnBsYXRmb3JtSWQ9YSx0aGlzLmZvclR5cGVBaGVhZFByb3ZpZGVyPWQsdGhpcy5mZWF0dXJlc1NlcnZpY2U9aCx0aGlzLmV4cGFu'@;
put 'ZFNlcnZpY2U9bSx0aGlzLmNvbW1vblN0cmluZ3M9Xyx0aGlzLmZvY3VzTWFuYWdlcj1PLHRoaXMuc2VsZWN0ZWRDaGFuZ2U9bmV3IHhyKCExKSx0aGlzLmV4cGFuZGVkQ2hhbmdlPW5ldyB4cix0aGlzLlNUQVRFUz1fdSx0aGlzLmlzTW9kZWxMb2FkaW5nPSExLHRoaXMubm9kZUlkPUh1KCks'@;
put 'dGhpcy5jb250ZW50Q29udGFpbmVyVGFiaW5kZXg9LTEsdGhpcy5za2lwRW1pdENoYW5nZT0hMSx0aGlzLnR5cGVBaGVhZEtleUJ1ZmZlcj0iIix0aGlzLnR5cGVBaGVhZEtleUV2ZW50PW5ldyB3ZSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5fbW9kZWw9dGhpcy5mZWF0dXJlc1NlcnZp'@;
put 'Y2UucmVjdXJzaW9uP1gudmlldz9YLnZpZXcuY29udGV4dC5jbHJNb2RlbDpYLl9sVmlld1s4XS5jbHJNb2RlbDpuZXcgZE5lKGY/Zi5fbW9kZWw6bnVsbCksdGhpcy5fbW9kZWwubm9kZUlkPXRoaXMubm9kZUlkfWdldCBzZWxlY3RlZCgpe3JldHVybiB0aGlzLl9tb2RlbC5zZWxlY3RlZC52'@;
put 'YWx1ZX1zZXQgc2VsZWN0ZWQoYSl7dGhpcy5mZWF0dXJlc1NlcnZpY2Uuc2VsZWN0YWJsZT0hMCwobnVsbD09PWF8fHR5cGVvZiBhPiJ1IikmJihhPV91LlVOU0VMRUNURUQpLCJib29sZWFuIj09dHlwZW9mIGEmJihhPWE/X3UuU0VMRUNURUQ6X3UuVU5TRUxFQ1RFRCksdGhpcy5za2lwRW1p'@;
put 'dENoYW5nZT0hMCx0aGlzLl9tb2RlbC5zZXRTZWxlY3RlZChhLHRoaXMuZmVhdHVyZXNTZXJ2aWNlLmVhZ2VyLHRoaXMuZmVhdHVyZXNTZXJ2aWNlLmVhZ2VyKSx0aGlzLnNraXBFbWl0Q2hhbmdlPSExfWdldCBleHBhbmRlZCgpe3JldHVybiB0aGlzLmV4cGFuZFNlcnZpY2UuZXhwYW5kZWR9'@;
put 'c2V0IGV4cGFuZGVkKGEpe3RoaXMuZXhwYW5kU2VydmljZS5leHBhbmRlZD1hfWdldCBhcmlhU2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5pc1NlbGVjdGFibGUoKT90aGlzLl9tb2RlbC5zZWxlY3RlZC52YWx1ZT09PV91LlNFTEVDVEVEOiEhdGhpcy50cmVlTm9kZUxpbms/LmFjdGl2ZXx8bnVs'@;
put 'bH1nZXQgdHJlZU5vZGVMaW5rKCl7cmV0dXJuIHRoaXMudHJlZU5vZGVMaW5rTGlzdCYmdGhpcy50cmVlTm9kZUxpbmtMaXN0LmZpcnN0fWdldCBpc1BhcmVudCgpe3JldHVybiB0aGlzLl9tb2RlbC5jaGlsZHJlbiYmdGhpcy5fbW9kZWwuY2hpbGRyZW4ubGVuZ3RoPjB9bmdPbkluaXQoKXt0'@;
put 'aGlzLl9tb2RlbC5leHBhbmRlZD10aGlzLmV4cGFuZGVkLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuX21vZGVsLnNlbGVjdGVkLnBpcGUoSWwoKCk9PiF0aGlzLnNraXBFbWl0Q2hhbmdlKSkuc3Vic2NyaWJlKGE9Pnt0aGlzLnNlbGVjdGVkQ2hhbmdlLmVtaXQoYSl9KSksdGhpcy5z'@;
put 'dWJzY3JpcHRpb25zLnB1c2godGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZENoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuZXhwYW5kZWRDaGFuZ2UuZW1pdChhKSx0aGlzLl9tb2RlbC5leHBhbmRlZD1hfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuZm9jdXNNYW5hZ2VyLmZvY3Vz'@;
put 'UmVxdWVzdC5zdWJzY3JpYmUoYT0+e3RoaXMubm9kZUlkPT09YSYmdGhpcy5mb2N1c1RyZWVOb2RlKCl9KSx0aGlzLmZvY3VzTWFuYWdlci5mb2N1c0NoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuY2hlY2tUYWJJbmRleChhKX0pKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLl9tb2Rl'@;
put 'bC5sb2FkaW5nJC5waXBlKFl2KDApKS5zdWJzY3JpYmUoYT0+dGhpcy5pc01vZGVsTG9hZGluZz1hKSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5mb3JUeXBlQWhlYWRQcm92aWRlciYmKHRoaXMuX21vZGVsLnRleHRDb250ZW50PXRoaXMuZm9yVHlwZUFoZWFkUHJvdmlkZXIudGV4dENv'@;
put 'bnRlbnQsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy50eXBlQWhlYWRLZXlFdmVudC5waXBlKFl2KDIwMCkpLnN1YnNjcmliZShhPT57dGhpcy5mb2N1c01hbmFnZXIuZm9jdXNOb2RlU3RhcnRzV2l0aChhLHRoaXMuX21vZGVsKSx0aGlzLnR5cGVBaGVhZEtleUJ1ZmZlcj0iIn0pKSl9'@;
put 'bmdPbkRlc3Ryb3koKXt0aGlzLl9tb2RlbC5kZXN0cm95KCksdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1pc0V4cGFuZGFibGUoKXtyZXR1cm4gdHlwZW9mIHRoaXMuZXhwYW5kYWJsZTwidSI/dGhpcy5leHBhbmRhYmxlOiEhdGhpcy5leHBhbmRTZXJ2'@;
put 'aWNlLmV4cGFuZGFibGV8fHRoaXMuaXNQYXJlbnR9aXNTZWxlY3RhYmxlKCl7cmV0dXJuIHRoaXMuZmVhdHVyZXNTZXJ2aWNlLnNlbGVjdGFibGV9Zm9jdXNUcmVlTm9kZSgpe2NvbnN0IGE9dGhpcy5jb250ZW50Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7SGEodGhpcy5wbGF0Zm9ybUlkKSYm'@;
put 'ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PWEmJih0aGlzLnNldFRhYkluZGV4KDApLGEuZm9jdXMoKSxhLnNjcm9sbEludG9WaWV3KHtibG9jazoibmVhcmVzdCIsaW5saW5lOiJuZWFyZXN0In0pKX1icm9hZGNhc3RGb2N1c09uQ29udGFpbmVyKCl7dGhpcy5mb2N1c01hbmFnZXIuYnJvYWRj'@;
put 'YXN0Rm9jdXNlZE5vZGUodGhpcy5ub2RlSWQpfW9uS2V5RG93bihhKXtzd2l0Y2goYlUoYSksRWQoYS5rZXkpKXtjYXNlIE1vLkFycm93VXA6dGhpcy5mb2N1c01hbmFnZXIuZm9jdXNOb2RlQWJvdmUodGhpcy5fbW9kZWwpO2JyZWFrO2Nhc2UgTW8uQXJyb3dEb3duOnRoaXMuZm9jdXNNYW5h'@;
put 'Z2VyLmZvY3VzTm9kZUJlbG93KHRoaXMuX21vZGVsKTticmVhaztjYXNlIE1vLkFycm93UmlnaHQ6dGhpcy5leHBhbmRPckZvY3VzRmlyc3RDaGlsZCgpO2JyZWFrO2Nhc2UgTW8uQXJyb3dMZWZ0OnRoaXMuY29sbGFwc2VPckZvY3VzUGFyZW50KCk7YnJlYWs7Y2FzZSBNby5Ib21lOmEucHJl'@;
put 'dmVudERlZmF1bHQoKSx0aGlzLmZvY3VzTWFuYWdlci5mb2N1c0ZpcnN0VmlzaWJsZU5vZGUoKTticmVhaztjYXNlIE1vLkVuZDphLnByZXZlbnREZWZhdWx0KCksdGhpcy5mb2N1c01hbmFnZXIuZm9jdXNMYXN0VmlzaWJsZU5vZGUoKTticmVhaztjYXNlIE1vLkVudGVyOnRoaXMudG9nZ2xl'@;
put 'RXhwYW5kT3JUcmlnZ2VyRGVmYXVsdCgpO2JyZWFrO2Nhc2UgTW8uU3BhY2U6Y2FzZSBNby5TcGFjZWJhcjphLnByZXZlbnREZWZhdWx0KCksdGhpcy50b2dnbGVFeHBhbmRPclRyaWdnZXJEZWZhdWx0KCk7YnJlYWs7ZGVmYXVsdDppZih0aGlzLl9tb2RlbC50ZXh0Q29udGVudCYmZnVuY3Rp'@;
put 'b24gQkZlKGwpe2NvbnN0IGM9bC5rZXk7cmV0dXJuIGMudG9Mb3dlckNhc2UoKSE9PWMudG9VcHBlckNhc2UoKXx8Yz49IjAiJiZjPD0iOSJ9KGEpKXJldHVybiB0aGlzLnR5cGVBaGVhZEtleUJ1ZmZlcis9YS5rZXksdm9pZCB0aGlzLnR5cGVBaGVhZEtleUV2ZW50Lm5leHQodGhpcy50eXBl'@;
put 'QWhlYWRLZXlCdWZmZXIpfXRoaXMudHlwZUFoZWFkS2V5QnVmZmVyPSIifXNldFRhYkluZGV4KGEpe3RoaXMuY29udGVudENvbnRhaW5lclRhYmluZGV4PWEsdGhpcy5jb250ZW50Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsYSl9Y2hlY2tUYWJJbmRl'@;
put 'eChhKXtIYSh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLm5vZGVJZCE9PWEmJi0xIT09dGhpcy5jb250ZW50Q29udGFpbmVyVGFiaW5kZXgmJnRoaXMuc2V0VGFiSW5kZXgoLTEpfXRvZ2dsZUV4cGFuZE9yVHJpZ2dlckRlZmF1bHQoKXt0aGlzLmlzRXhwYW5kYWJsZSgpJiYhdGhpcy5pc1NlbGVj'@;
put 'dGFibGUoKT90aGlzLmV4cGFuZFNlcnZpY2UuZXhwYW5kZWQ9IXRoaXMuZXhwYW5kZWQ6dGhpcy50cmlnZ2VyRGVmYXVsdEFjdGlvbigpfWV4cGFuZE9yRm9jdXNGaXJzdENoaWxkKCl7dGhpcy5leHBhbmRlZD90aGlzLmlzUGFyZW50JiZ0aGlzLmZvY3VzTWFuYWdlci5mb2N1c05vZGVCZWxv'@;
put 'dyh0aGlzLl9tb2RlbCk6dGhpcy5pc0V4cGFuZGFibGUoKSYmKHRoaXMuZXhwYW5kU2VydmljZS5leHBhbmRlZD0hMCl9Y29sbGFwc2VPckZvY3VzUGFyZW50KCl7dGhpcy5leHBhbmRlZD90aGlzLmV4cGFuZFNlcnZpY2UuZXhwYW5kZWQ9ITE6dGhpcy5mb2N1c01hbmFnZXIuZm9jdXNQYXJl'@;
put 'bnQodGhpcy5fbW9kZWwpfXRyaWdnZXJEZWZhdWx0QWN0aW9uKCl7dGhpcy50cmVlTm9kZUxpbms/dGhpcy50cmVlTm9kZUxpbmsuYWN0aXZhdGUoKTp0aGlzLmlzU2VsZWN0YWJsZSgpJiZ0aGlzLl9tb2RlbC50b2dnbGVTZWxlY3Rpb24odGhpcy5mZWF0dXJlc1NlcnZpY2UuZWFnZXIpfX1y'@;
put 'ZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChxYSkscnQobCwxMikscnQocUZlLDEwKSxydChyNSkscnQoUWMpLHJ0KFRhKSxydChsWikscnQoQWwpKX0sbC5cdTAyNzVjbXA9a3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siY2xyLXRyZWUtbm9kZSJdXSxj'@;
put 'b250ZW50UXVlcmllczpmdW5jdGlvbihhLGYsZCl7aWYoMSZhJiZGbyhkLGk1LDQpLDImYSl7bGV0IGg7dWkoaD1jaSgpKSYmKGYudHJlZU5vZGVMaW5rTGlzdD1oKX19LHZpZXdRdWVyeTpmdW5jdGlvbihhLGYpe2lmKDEmYSYmTm8oU1BlLDcsVmkpLDImYSl7bGV0IGQ7dWkoZD1jaSgpKSYm'@;
put 'KGYuY29udGVudENvbnRhaW5lcj1kLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZil7MiZhJiZncigiY2xyLXRyZWUtbm9kZSIsITApfSxpbnB1dHM6e2V4cGFuZGFibGU6WyJjbHJFeHBhbmRhYmxlIiwiZXhwYW5kYWJsZSJdLHNlbGVjdGVkOlsiY2xyU2Vs'@;
put 'ZWN0ZWQiLCJzZWxlY3RlZCJdLGV4cGFuZGVkOlsiY2xyRXhwYW5kZWQiLCJleHBhbmRlZCJdfSxvdXRwdXRzOntzZWxlY3RlZENoYW5nZToiY2xyU2VsZWN0ZWRDaGFuZ2UiLGV4cGFuZGVkQ2hhbmdlOiJjbHJFeHBhbmRlZENoYW5nZSJ9LGZlYXR1cmVzOltyaShbR3NlLFFjLHtwcm92aWRl'@;
put 'OlFDLHVzZUV4aXN0aW5nOlFjfV0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6RFBlLGRlY2xzOjEyLHZhcnM6OSxjb25zdHM6W1sicm9sZSIsInRyZWVpdGVtIiwidGFiaW5kZXgiLCItMSIsMSwiY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciIsMywia2V5ZG93biIsImZvY3VzIl0sWyJj'@;
put 'b250ZW50Q29udGFpbmVyIiwiIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJ0eXBlIiwiYnV0dG9uIiwidGFiaW5kZXgiLCItMSIsImNsYXNzIiwiY2xyLXRyZWVub2RlLWNhcmV0IiwzLCJjbGljayIsImZvY3VzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci10cmVlbm9kZS1zcGlubmVyLWNv'@;
put 'bnRhaW5lciIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItY2hlY2tib3gtd3JhcHBlciBjbHItdHJlZW5vZGUtY2hlY2tib3giLDQsIm5nSWYiXSxbMSwiY2xyLXRyZWVub2RlLWNvbnRlbnQiLDMsIm1vdXNlZG93biJdLFsiY2xhc3MiLCJjbHItc3Itb25seSIsNCwibmdJZiJdLFsxLCJjbHIt'@;
put 'dHJlZW5vZGUtY2hpbGRyZW4iXSxbMywicGFyZW50Il0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJ0eXBlIiwiYnV0dG9uIiwidGFiaW5kZXgiLCItMSIsMSwiY2xyLXRyZWVub2RlLWNhcmV0IiwzLCJjbGljayIsImZvY3VzIl0sWyJzaGFwZSIsImFuZ2xlIiwxLCJjbHItdHJlZW5vZGUtY2Fy'@;
put 'ZXQtaWNvbiJdLFsxLCJjbHItdHJlZW5vZGUtc3Bpbm5lci1jb250YWluZXIiXSxbMSwiY2xyLXRyZWVub2RlLXNwaW5uZXIiLCJzcGlubmVyIl0sWzEsImNsci1jaGVja2JveC13cmFwcGVyIiwiY2xyLXRyZWVub2RlLWNoZWNrYm94Il0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJ0eXBlIiwi'@;
put 'Y2hlY2tib3giLCJ0YWJpbmRleCIsIi0xIiwxLCJjbHItY2hlY2tib3giLDMsImlkIiwiY2hlY2tlZCIsImluZGV0ZXJtaW5hdGUiLCJjaGFuZ2UiLCJmb2N1cyJdLFsxLCJjbHItY29udHJvbC1sYWJlbCIsMywiZm9yIl0sWzEsImNsci1zci1vbmx5Il0sWzQsIm5nSWYiXV0sdGVtcGxhdGU6'@;
put 'ZnVuY3Rpb24oYSxmKXsxJmEmJihUaShPUGUpLHllKDAsImRpdiIsMCwxKSxFdCgia2V5ZG93biIsZnVuY3Rpb24oaCl7cmV0dXJuIGYub25LZXlEb3duKGgpfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBmLmJyb2FkY2FzdEZvY3VzT25Db250YWluZXIoKX0pLHR0KDIsTVBlLDIsMSwi'@;
put 'YnV0dG9uIiwyKSx0dCgzLGtQZSwyLDAsImRpdiIsMyksdHQoNCxFUGUsMyw0LCJkaXYiLDQpLHllKDUsImRpdiIsNSksRXQoIm1vdXNlZG93biIsZnVuY3Rpb24oKXtyZXR1cm4gZi5mb2N1c1RyZWVOb2RlKCl9KSxEcig2KSx0dCg3LFRQZSwzLDIsImRpdiIsNiksQ2UoKSgpLHllKDgsImRp'@;
put 'diIsNyksRHIoOSwxKSxEcigxMCwyKSx0bigxMSwiY2xyLXJlY3Vyc2l2ZS1jaGlsZHJlbiIsOCksQ2UoKSksMiZhJiYoUnIoImFyaWEtZXhwYW5kZWQiLGYuaXNFeHBhbmRhYmxlKCk/Zi5leHBhbmRlZDpudWxsKSgiYXJpYS1zZWxlY3RlZCIsZi5hcmlhU2VsZWN0ZWQpLFNlKDIpLFJlKCJu'@;
put 'Z0lmIixmLmlzRXhwYW5kYWJsZSgpJiYhZi5pc01vZGVsTG9hZGluZyYmIWYuZXhwYW5kU2VydmljZS5sb2FkaW5nKSxTZSgxKSxSZSgibmdJZiIsZi5leHBhbmRTZXJ2aWNlLmxvYWRpbmd8fGYuaXNNb2RlbExvYWRpbmcpLFNlKDEpLFJlKCJuZ0lmIixmLmZlYXR1cmVzU2VydmljZS5zZWxl'@;
put 'Y3RhYmxlKSxTZSgzKSxSZSgibmdJZiIsZi5mZWF0dXJlc1NlcnZpY2Uuc2VsZWN0YWJsZXx8Zi5hcmlhU2VsZWN0ZWQpLFNlKDEpLFJlKCJAdG9nZ2xlQ2hpbGRyZW5BbmltIixmLmV4cGFuZFNlcnZpY2UuZXhwYW5kZWQ/ImV4cGFuZGVkIjoiY29sbGFwc2VkIiksUnIoInJvbGUiLGYuaXNF'@;
put 'eHBhbmRhYmxlKCkmJiFmLmZlYXR1cmVzU2VydmljZS5yZWN1cnNpb24/Imdyb3VwIjpudWxsKSxTZSgzKSxSZSgicGFyZW50IixmLl9tb2RlbCkpfSxkZXBlbmRlbmNpZXM6WyRzZSwkaSxKYV0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbQzEoInRvZ2dsZUNoaWxkcmVuQW5p'@;
put 'bSIsW2J1KCJjb2xsYXBzZWQgPT4gZXhwYW5kZWQiLFtDYSh7aGVpZ2h0OjB9KSxjYygyMDAsQ2Eoe2hlaWdodDoiKiJ9KSldKSxidSgiZXhwYW5kZWQgPT4gY29sbGFwc2VkIixbQ2Eoe2hlaWdodDoiKiJ9KSxjYygyMDAsQ2Eoe2hlaWdodDowfSkpXSksQUQoImV4cGFuZGVkIixDYSh7aGVp'@;
put 'Z2h0OiIqIiwib3ZlcmZsb3cteSI6InZpc2libGUifSkpLEFEKCJjb2xsYXBzZWQiLENhKHtoZWlnaHQ6MH0pKV0pXX19KSxsfSkoKSxEZD0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEsZix7bmF0aXZlRWxlbWVudDpkfSxoLG0pe3RoaXMuZmVhdHVyZXNTZXJ2aWNlPWEsdGhpcy5mb2N1'@;
put 'c01hbmFnZXJTZXJ2aWNlPWYsdGhpcy5zdWJzY3JpcHRpb25zPVtdO2NvbnN0IF89bS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+d2QoZCwiZm9jdXNpbiIpLnN1YnNjcmliZShPPT57Ty50YXJnZXQ9PT1kJiYodGhpcy5mb2N1c01hbmFnZXJTZXJ2aWNlLmZvY3VzRmlyc3RWaXNpYmxlTm9kZSgp'@;
put 'LGgucmVtb3ZlQXR0cmlidXRlKGQsInRhYmluZGV4IikpfSkpO3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKF8pfXNldCBsYXp5KGEpe3RoaXMuZmVhdHVyZXNTZXJ2aWNlLmVhZ2VyPSFhfWdldCBpc011bHRpU2VsZWN0YWJsZSgpe3JldHVybiB0aGlzLmZlYXR1cmVzU2VydmljZS5zZWxlY3Rh'@;
put 'YmxlJiZ0aGlzLnJvb3ROb2Rlcy5sZW5ndGg+MH1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnNldFJvb3ROb2RlcygpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMucm9vdE5vZGVzLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT57dGhpcy5zZXRSb290Tm9kZXMoKX0pKX1uZ09uRGVzdHJv'@;
put 'eSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c2V0Um9vdE5vZGVzKCl7dGhpcy5mb2N1c01hbmFnZXJTZXJ2aWNlLnJvb3ROb2RlTW9kZWxzPXRoaXMucm9vdE5vZGVzLm1hcChhPT5hLl9tb2RlbCkuZmlsdGVyKGE9PiFhLnBhcmVudCl9fXJldHVy'@;
put 'biBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHJ0KHI1KSxydChsWikscnQoVmkpLHJ0KGpvKSxydChVbykpfSxsLlx1MDI3NWNtcD1rcih7dHlwZTpsLHNlbGVjdG9yczpbWyJjbHItdHJlZSJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGYsZCl7aWYoMSZh'@;
put 'JiZGbyhkLExmLDQpLDImYSl7bGV0IGg7dWkoaD1jaSgpKSYmKGYucm9vdE5vZGVzPWgpfX0saG9zdEF0dHJzOlsidGFiaW5kZXgiLCIwIl0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxmKXsyJmEmJlJyKCJyb2xlIiwidHJlZSIpKCJhcmlhLW11bHRpc2VsZWN0YWJsZSIs'@;
put 'Zi5pc011bHRpU2VsZWN0YWJsZSl9LGlucHV0czp7bGF6eTpbImNsckxhenkiLCJsYXp5Il19LGZlYXR1cmVzOltyaShbR3NlLGxaXSldLG5nQ29udGVudFNlbGVjdG9yczpPbyxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1szLCJjaGlsZHJlbiIsNCwibmdJZiJdLFszLCJjaGlsZHJlbiJdXSx0'@;
put 'ZW1wbGF0ZTpmdW5jdGlvbihhLGYpezEmYSYmKFRpKCksRHIoMCksdHQoMSxJUGUsMSwxLCJjbHItcmVjdXJzaXZlLWNoaWxkcmVuIiwwKSksMiZhJiYoU2UoMSksUmUoIm5nSWYiLGYuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbikpfSxkZXBlbmRlbmNpZXM6WyRzZSwkaV0sZW5jYXBzdWxh'@;
put 'dGlvbjoyfSksbH0pKCksbU5lPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoKXtqYS5hZGRJY29ucyhadil9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NW1vZD1EaSh7dHlwZTpsfSksbC5cdTAyNzVpbmo9eGkoe2ltcG9ydHM6W1ti'@;
put 'byxsbCxDVV1dfSksbH0pKCksZ05lPSgoKT0+e2NsYXNzIGx7fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NW1vZD1EaSh7dHlwZTpsfSksbC5cdTAyNzVpbmo9eGkoe2ltcG9ydHM6W2FOZSx1TmUsbU5lXX0pLGx9KSgpO2Z1bmN0aW9u'@;
put 'IFhzZShsLGMsYSl7cmV0dXJuIEJlLmNyZWF0ZShmPT57YyhmKTtjb25zdCBkPWwuc3Vic2NyaWJlKGYpO3JldHVybigpPT57ZC51bnN1YnNjcmliZSgpLGEmJmEoZil9fSl9bGV0IHNaPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmLGQsaCxtKXt0aGlzLnJlbmRlcmVyPWEsdGhpcy5w'@;
put 'YXJlbnQ9Zix0aGlzLnRvZ2dsZVNlcnZpY2U9ZCx0aGlzLmZvY3VzU2VydmljZT1oLHRoaXMucGxhdGZvcm1JZD1tLHRoaXMuaWQ9SHUoKSx0aGlzLmZvY3VzQmFja09uVHJpZ2dlcj0hMSx0aGlzLl91bmxpc3RlbkZ1bmNzPVtdLHRoaXMucmVzZXRDaGlsZHJlbigpLHRoaXMubW92ZVRvRmly'@;
put 'c3RJdGVtV2hlbk9wZW4oKSx0aGlzLnBhcmVudHx8dGhpcy5oYW5kbGVSb290Rm9jdXMoKX1nZXQgdHJpZ2dlcigpe3JldHVybiB0aGlzLl90cmlnZ2VyfXNldCB0cmlnZ2VyKGEpe3RoaXMuX3RyaWdnZXI9YSx0aGlzLnBhcmVudD90aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5k'@;
put 'ZXJlci5saXN0ZW4oYSwia2V5ZG93bi5hcnJvd3JpZ2h0IixmPT50aGlzLnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGYpKSk6KHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihhLCJrZXlkb3duLmFycm93dXAiLGY9PnRoaXMudG9nZ2xlU2Vydmlj'@;
put 'ZS50b2dnbGVXaXRoRXZlbnQoZikpKSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5hcnJvd2Rvd24iLGY9PnRoaXMudG9nZ2xlU2VydmljZS50b2dnbGVXaXRoRXZlbnQoZikpKSx0aGlzLmZvY3VzU2VydmljZS5saXN0ZW5Ub0Fycm93'@;
put 'S2V5cyhhKSl9Z2V0IGNvbnRhaW5lcigpe3JldHVybiB0aGlzLl9jb250YWluZXJ9c2V0IGNvbnRhaW5lcihhKXt0aGlzLl9jb250YWluZXI9YSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi50YWIiLGY9PnRoaXMudG9nZ2xlU2Vydmlj'@;
put 'ZS50b2dnbGVXaXRoRXZlbnQoZikpKSx0aGlzLnBhcmVudD90aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5lc2NhcGUiLGY9Pnt0aGlzLmZvY3VzU2VydmljZS5tb3ZlKEUxLkxFRlQpLGYuc3RvcFByb3BhZ2F0aW9uKCl9KSk6KHRoaXMu'@;
put 'Zm9jdXNTZXJ2aWNlLnJlZ2lzdGVyQ29udGFpbmVyKGEpLHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihhLCJrZXlkb3duLmVzY2FwZSIsZj0+dGhpcy50b2dnbGVTZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChmKSkpLHRoaXMuX3VubGlzdGVuRnVuY3MucHVz'@;
put 'aCh0aGlzLnJlbmRlcmVyLmxpc3RlbihhLCJibHVyIixmPT57dGhpcy5jaGlsZHJlbi5waXBlKEVmKDEpKS5zdWJzY3JpYmUoaD0+aC5mb3JFYWNoKG09Pm0uYmx1cigpKSk7Y29uc3QgZD1mLnJlbGF0ZWRUYXJnZXR8fGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7ZCYmSGEodGhpcy5wbGF0Zm9y'@;
put 'bUlkKSYmKGEuY29udGFpbnMoZCl8fGQ9PT10aGlzLnRyaWdnZXIpfHwodGhpcy5mb2N1c0JhY2tPblRyaWdnZXI9ITEsdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITEpfSkpKX1uZ09uRGVzdHJveSgpe3RoaXMuX3VubGlzdGVuRnVuY3MuZm9yRWFjaChhPT5hKCkpLHRoaXMuZm9jdXNTZXJ2'@;
put 'aWNlLmRldGFjaExpc3RlbmVycygpfW1vdmVUb0ZpcnN0SXRlbVdoZW5PcGVuKCl7Y29uc3QgYT10aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoZj0+e2YmJnRoaXMudG9nZ2xlU2VydmljZS5vcmlnaW5hbEV2ZW50JiZzZXRUaW1lb3V0KCgpPT57dGhpcy5mb2N1c1Nl'@;
put 'cnZpY2UubW92ZVRvKHRoaXMpLHRoaXMuZm9jdXNTZXJ2aWNlLm1vdmUodGhpcy5wYXJlbnQ/RTEuUklHSFQ6RTEuRE9XTil9KX0pO3RoaXMuX3VubGlzdGVuRnVuY3MucHVzaCgoKT0+YS51bnN1YnNjcmliZSgpKX1oYW5kbGVSb290Rm9jdXMoKXtjb25zdCBhPXRoaXMudG9nZ2xlU2Vydmlj'@;
put 'ZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShmPT57Znx8KHRoaXMuZm9jdXNTZXJ2aWNlLnJlc2V0KHRoaXMpLHRoaXMuZm9jdXNCYWNrT25UcmlnZ2VyJiZ0aGlzLmZvY3VzKCkpLHRoaXMuZm9jdXNCYWNrT25UcmlnZ2VyPWZ9KTt0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2goKCk9PmEudW5zdWJz'@;
put 'Y3JpYmUoKSl9Zm9jdXMoKXt0aGlzLnRyaWdnZXImJkhhKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMudHJpZ2dlci5mb2N1cygpfWJsdXIoKXt0aGlzLnRyaWdnZXImJkhhKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMudHJpZ2dlci5ibHVyKCl9YWN0aXZhdGUoKXtIYSh0aGlzLnBsYXRmb3JtSWQp'@;
put 'JiZ0aGlzLnRyaWdnZXIuY2xpY2soKX1yZXNldENoaWxkcmVuKCl7dGhpcy5jaGlsZHJlbj1uZXcgeEQoMSksdGhpcy5wYXJlbnQ/dGhpcy5yaWdodD10aGlzLm9wZW5BbmRHZXRDaGlsZHJlbigpLnBpcGUoRWUoYT0+YVswXSkpOih0aGlzLmRvd249dGhpcy5vcGVuQW5kR2V0Q2hpbGRyZW4o'@;
put 'KS5waXBlKEVlKGE9PmFbMF0pKSx0aGlzLnVwPXRoaXMub3BlbkFuZEdldENoaWxkcmVuKCkucGlwZShFZShhPT5hW2EubGVuZ3RoLTFdKSkpfWFkZENoaWxkcmVuKGEpe3dVLmxpbmtWZXJ0aWNhbChhKSx0aGlzLnBhcmVudCYmd1UubGlua1BhcmVudChhLHRoaXMuY2xvc2VBbmRHZXRUaGlz'@;
put 'KCksRTEuTEVGVCksdGhpcy5jaGlsZHJlbi5uZXh0KGEpfW9wZW5BbmRHZXRDaGlsZHJlbigpe3JldHVybiBYc2UodGhpcy5jaGlsZHJlbiwoKT0+dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITApfWNsb3NlQW5kR2V0VGhpcygpe3JldHVybiBYc2UoR2kodGhpcyksKCk9PnRoaXMudG9nZ2xl'@;
put 'U2VydmljZS5vcGVuPSExKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkoc3Ioam8pLHNyKGwsMTIpLHNyKFFhKSxzcihzUyksc3IocWEpKX0sbC5cdTAyNzVwcm92PWhyKHt0b2tlbjpsLGZhY3Rvcnk6bC5cdTAyNzVmYWN9KSxsfSkoKTtjb25zdCB2'@;
put 'TmU9YnNlKHNaKTtsZXQgYlM9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3Rvcigpe3RoaXMuX2NoYW5nZXM9bmV3IHdlfWdldCBjaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2NoYW5nZXMuYXNPYnNlcnZhYmxlKCl9Y2xvc2VNZW51cygpe3RoaXMuX2NoYW5nZXMubmV4dCghMSl9fXJldHVybiBsLlx1'@;
put 'MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmwsZmFjdG9yeTpsLlx1MDI3NWZhY30pLGx9KSgpO2NvbnN0IGJOZT17cHJvdmlkZTpiUyx1c2VGYWN0b3J5OmZ1bmN0aW9uIHlOZShsKXtyZXR1cm4gbHx8bmV3IGJTfSxkZXBzOltb'@;
put 'bmV3IGNoLG5ldyBFMCxiU11dfTtsZXQgYTM9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhLGYsZCxoKXt0aGlzLnBhcmVudD1hLHRoaXMudG9nZ2xlU2VydmljZT1mLHRoaXMuY2RyPWQsdGhpcy5pc01lbnVDbG9zYWJsZT0hMCx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3Jp'@;
put 'cHRpb25zLnB1c2goaC5jaGFuZ2VzLnN1YnNjcmliZShtPT50aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj1tKSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goZi5vcGVuQ2hhbmdlLnN1YnNjcmliZSgoKT0+dGhpcy5jZHIubWFya0ZvckNoZWNrKCkpKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2Ny'@;
put 'aXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHJ0KGwsMTIpLHJ0KFFhKSxydChVbCkscnQoYlMpKX0sbC5cdTAyNzVjbXA9a3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siY2xyLWRyb3Bkb3du'@;
put 'Il1dLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZil7MiZhJiZncigiZHJvcGRvd24iLCEwKSgib3BlbiIsZi50b2dnbGVTZXJ2aWNlLm9wZW4pfSxpbnB1dHM6e2lzTWVudUNsb3NhYmxlOlsiY2xyQ2xvc2VNZW51T25JdGVtQ2xpY2siLCJpc01lbnVDbG9zYWJsZSJdfSxm'@;
put 'ZWF0dXJlczpbcmkoW2JOZSx7cHJvdmlkZTp1Nyx1c2VFeGlzdGluZzpWaX0sbHNlLFFhLHZOZV0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6T28sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxmKXsxJmEmJihUaSgpLERyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksbH0pKCk7Y29u'@;
put 'c3QgX05lPVt7cHJvdmlkZTp0SSx1c2VDbGFzczooKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEsZixkKXt0aGlzLmVsPWEsdGhpcy5yZW5kZXJlcj1mLHRoaXMucGxhdGZvcm1JZD1kLHRoaXMuaWQ9SHUoKSx0aGlzLmRpc2FibGVkPSExLGYuc2V0QXR0cmlidXRlKGEubmF0aXZlRWxlbWVu'@;
put 'dCwiaWQiLHRoaXMuaWQpLGYuc2V0QXR0cmlidXRlKGEubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiLCItMSIpfWZvY3VzKCl7SGEodGhpcy5wbGF0Zm9ybUlkKSYmKHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiLCIwIiksdGhpcy5l'@;
put 'bC5uYXRpdmVFbGVtZW50LmZvY3VzKCksdGhpcy5lbC5uYXRpdmVFbGVtZW50LnNjcm9sbEludG9WaWV3KHtiZWhhdmlvcjoic21vb3RoIixibG9jazoiY2VudGVyIixpbmxpbmU6Im5lYXJlc3QifSkpfWJsdXIoKXtIYSh0aGlzLnBsYXRmb3JtSWQpJiYodGhpcy5yZW5kZXJlci5zZXRBdHRy'@;
put 'aWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ0YWJpbmRleCIsIi0xIiksdGhpcy5lbC5uYXRpdmVFbGVtZW50LmJsdXIoKSl9YWN0aXZhdGUoKXtIYSh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xpY2soKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9u'@;
put 'KGEpe3JldHVybiBuZXcoYXx8bCkoc3IoVmkpLHNyKGpvKSxzcihxYSkpfSxsLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmwsZmFjdG9yeTpsLlx1MDI3NWZhY30pLGx9KSgpfV07bGV0IHg3PSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmLGQpe3RoaXMuZHJvcGRvd249YSx0aGlzLl9kcm9w'@;
put 'ZG93blNlcnZpY2U9Zix0aGlzLmZvY3VzYWJsZUl0ZW09ZCx0aGlzLnNldEJ5RGVwcmVjYXRlZERpc2FibGVkPSExfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLmZvY3VzYWJsZUl0ZW0uZGlzYWJsZWR9c2V0IGRpc2FibGVkKGEpe3RoaXMuZm9jdXNhYmxlSXRlbS5kaXNhYmxlZD0hIWF8'@;
put 'fCIiPT09YX1nZXQgZGlzYWJsZWREZXByZWNhdGVkKCl7cmV0dXJuIHRoaXMuZm9jdXNhYmxlSXRlbS5kaXNhYmxlZH1zZXQgZGlzYWJsZWREZXByZWNhdGVkKGEpe3RoaXMuZm9jdXNhYmxlSXRlbS5kaXNhYmxlZD0hIWF8fCIiPT09YSx0aGlzLnNldEJ5RGVwcmVjYXRlZERpc2FibGVkPSEw'@;
put 'fWdldCBkcm9wZG93bkl0ZW1JZCgpe3JldHVybiB0aGlzLmZvY3VzYWJsZUl0ZW0uaWR9c2V0IGRyb3Bkb3duSXRlbUlkKGEpe3RoaXMuZm9jdXNhYmxlSXRlbS5pZD1hfW9uRHJvcGRvd25JdGVtQ2xpY2soKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5kcm9wZG93bi5pc01lbnVDbG9zYWJsZSYm'@;
put 'IXRoaXMuZGlzYWJsZWQmJnRoaXMuX2Ryb3Bkb3duU2VydmljZS5jbG9zZU1lbnVzKCl9KX1vblNwYWNlS2V5ZG93bihhKXt0aGlzLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbklmRGlzYWJsZWQoYSl9b25FbnRlcktleWRvd24oYSl7dGhpcy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb25JZkRp'@;
put 'c2FibGVkKGEpfXN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbklmRGlzYWJsZWQoYSl7dGhpcy5kaXNhYmxlZCYmKGEucHJldmVudERlZmF1bHQoKSxhLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkocnQo'@;
put 'YTMpLHJ0KGJTKSxydCh0SSkpfSxsLlx1MDI3NWRpcj1Tcih7dHlwZTpsLHNlbGVjdG9yczpbWyIiLCJjbHJEcm9wZG93bkl0ZW0iLCIiXV0saG9zdFZhcnM6OCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxmKXsxJmEmJkV0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZi5vbkRyb3Bkb3du'@;
put 'SXRlbUNsaWNrKCl9KSgia2V5ZG93bi5zcGFjZSIsZnVuY3Rpb24oaCl7cmV0dXJuIGYub25TcGFjZUtleWRvd24oaCl9KSgia2V5ZG93bi5lbnRlciIsZnVuY3Rpb24oaCl7cmV0dXJuIGYub25FbnRlcktleWRvd24oaCl9KSwyJmEmJihScigicm9sZSIsIm1lbnVpdGVtIikoImFyaWEtZGlz'@;
put 'YWJsZWQiLGYuZGlzYWJsZWQpKCJkaXNhYmxlZCIsZi5kaXNhYmxlZCYmZi5zZXRCeURlcHJlY2F0ZWREaXNhYmxlZD8iIjpudWxsKSgiaWQiLGYuZHJvcGRvd25JdGVtSWQpLGdyKCJkaXNhYmxlZCIsZi5kaXNhYmxlZCkoImRyb3Bkb3duLWl0ZW0iLCEwKSl9LGlucHV0czp7ZGlzYWJsZWQ6'@;
put 'WyJjbHJEaXNhYmxlZCIsImRpc2FibGVkIl0sZGlzYWJsZWREZXByZWNhdGVkOlsiZGlzYWJsZWQiLCJkaXNhYmxlZERlcHJlY2F0ZWQiXSxkcm9wZG93bkl0ZW1JZDpbImlkIiwiZHJvcGRvd25JdGVtSWQiXX0sZmVhdHVyZXM6W3JpKFtfTmVdKV19KSxsfSkoKTt2YXIgS3I9ZnVuY3Rpb24o'@;
put 'bCl7cmV0dXJuIGxbbC5SSUdIVF9DRU5URVI9MF09IlJJR0hUX0NFTlRFUiIsbFtsLlJJR0hUX1RPUD0xXT0iUklHSFRfVE9QIixsW2wuUklHSFRfQk9UVE9NPTJdPSJSSUdIVF9CT1RUT00iLGxbbC5UT1BfQ0VOVEVSPTNdPSJUT1BfQ0VOVEVSIixsW2wuVE9QX1JJR0hUPTRdPSJUT1BfUklH'@;
put 'SFQiLGxbbC5UT1BfTEVGVD01XT0iVE9QX0xFRlQiLGxbbC5CT1RUT01fQ0VOVEVSPTZdPSJCT1RUT01fQ0VOVEVSIixsW2wuQk9UVE9NX1JJR0hUPTddPSJCT1RUT01fUklHSFQiLGxbbC5CT1RUT01fTEVGVD04XT0iQk9UVE9NX0xFRlQiLGxbbC5MRUZUX0NFTlRFUj05XT0iTEVGVF9DRU5U'@;
put 'RVIiLGxbbC5MRUZUX1RPUD0xMF09IkxFRlRfVE9QIixsW2wuTEVGVF9CT1RUT009MTFdPSJMRUZUX0JPVFRPTSIsbH0oS3J8fHt9KTtjbGFzcyBTTmV7Y29uc3RydWN0b3IoYyl7dGhpcy5lbGVtZW50PWMsdGhpcy5ib3VuZE9uU2Nyb2xsTGlzdGVuZXI9dGhpcy5lbWl0U2Nyb2xsRXZlbnQu'@;
put 'YmluZCh0aGlzKSx0aGlzLnNjcm9sbGFibGVFbGVtZW50cz1bXSxjLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsYy5zdHlsZS50b3A9MCxjLnN0eWxlLmJvdHRvbT0iYXV0byIsYy5zdHlsZS5sZWZ0PTAsYy5zdHlsZS5yaWdodD0iYXV0byJ9YW5jaG9yKGMsYSxmLHtvZmZzZXRYOmQ9MCxv'@;
put 'ZmZzZXRZOmg9MCx1c2VBbmNob3JQYXJlbnQ6bT0hMX09e30pe3RoaXMuYWRkU2Nyb2xsRXZlbnRMaXN0ZW5lcnMoYyksbSYmKGM9Yy5wYXJlbnROb2RlKSxjLnN0eWxlLnBvc2l0aW9uPSJzdGF0aWMiO2NvbnN0IF89Yy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxPPXRoaXMuZWxlbWVudC5n'@;
put 'ZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsZXQgWD1fLmxlZnQtTy5sZWZ0K2QsYWU9Xy50b3AtTy50b3AraDtzd2l0Y2goYSl7Y2FzZSBLci5MRUZUX1RPUDpjYXNlIEtyLlRPUF9MRUZUOmJyZWFrO2Nhc2UgS3IuVE9QX0NFTlRFUjpYKz1fLndpZHRoLzI7YnJlYWs7Y2FzZSBLci5UT1BfUklH'@;
put 'SFQ6Y2FzZSBLci5SSUdIVF9UT1A6WCs9Xy53aWR0aDticmVhaztjYXNlIEtyLkxFRlRfQk9UVE9NOmNhc2UgS3IuQk9UVE9NX0xFRlQ6YWUrPV8uaGVpZ2h0O2JyZWFrO2Nhc2UgS3IuQk9UVE9NX0NFTlRFUjphZSs9Xy5oZWlnaHQsWCs9Xy53aWR0aC8yO2JyZWFrO2Nhc2UgS3IuQk9UVE9N'@;
put 'X1JJR0hUOmNhc2UgS3IuUklHSFRfQk9UVE9NOmFlKz1fLmhlaWdodCxYKz1fLndpZHRoO2JyZWFrO2Nhc2UgS3IuTEVGVF9DRU5URVI6YWUrPV8uaGVpZ2h0LzI7YnJlYWs7Y2FzZSBLci5SSUdIVF9DRU5URVI6YWUrPV8uaGVpZ2h0LzIsWCs9Xy53aWR0aH1zd2l0Y2goZil7Y2FzZSBLci5M'@;
put 'RUZUX1RPUDpjYXNlIEtyLlRPUF9MRUZUOmJyZWFrO2Nhc2UgS3IuVE9QX0NFTlRFUjpYLT1PLndpZHRoLzI7YnJlYWs7Y2FzZSBLci5UT1BfUklHSFQ6Y2FzZSBLci5SSUdIVF9UT1A6WC09Ty53aWR0aDticmVhaztjYXNlIEtyLkxFRlRfQk9UVE9NOmNhc2UgS3IuQk9UVE9NX0xFRlQ6YWUt'@;
put 'PU8uaGVpZ2h0O2JyZWFrO2Nhc2UgS3IuQk9UVE9NX0NFTlRFUjphZS09Ty5oZWlnaHQsWC09Ty53aWR0aC8yO2JyZWFrO2Nhc2UgS3IuQk9UVE9NX1JJR0hUOmNhc2UgS3IuUklHSFRfQk9UVE9NOmFlLT1PLmhlaWdodCxYLT1PLndpZHRoO2JyZWFrO2Nhc2UgS3IuTEVGVF9DRU5URVI6YWUt'@;
put 'PU8uaGVpZ2h0LzI7YnJlYWs7Y2FzZSBLci5SSUdIVF9DRU5URVI6YWUtPU8uaGVpZ2h0LzIsWC09Ty53aWR0aH1jb25zdCBwZT1nZXRDb21wdXRlZFN0eWxlKHRoaXMuZWxlbWVudCksYmU9cGFyc2VJbnQocGUubWFyZ2luTGVmdCwxMCkseGU9cGFyc2VJbnQocGUubWFyZ2luUmlnaHQsMTAp'@;
put 'LFZlPXBhcnNlSW50KHBlLm1hcmdpblRvcCwxMCksWmU9cGFyc2VJbnQocGUubWFyZ2luQm90dG9tLDEwKTtzd2l0Y2goYSl7Y2FzZSBLci5MRUZUX1RPUDpjYXNlIEtyLlRPUF9MRUZUOmNhc2UgS3IuVE9QX1JJR0hUOmNhc2UgS3IuUklHSFRfVE9QOihmPT09S3IuQk9UVE9NX1JJR0hUfHxm'@;
put 'PT09S3IuUklHSFRfQk9UVE9NKSYmKGFlLT1aZSxYLT14ZSksKGY9PT1Lci5CT1RUT01fTEVGVHx8Zj09PUtyLkxFRlRfQk9UVE9NKSYmKGFlLT1WZSxYKz1iZSksKGY9PT1Lci5UT1BfTEVGVHx8Zj09PUtyLkxFRlRfVE9QKSYmKGFlKz1WZSxYKz1iZSksKGY9PT1Lci5UT1BfUklHSFR8fGY9'@;
put 'PT1Lci5SSUdIVF9UT1ApJiYoYWUrPVZlLFgtPXhlKTticmVhaztjYXNlIEtyLkxFRlRfQk9UVE9NOmNhc2UgS3IuQk9UVE9NX0xFRlQ6Y2FzZSBLci5CT1RUT01fUklHSFQ6Y2FzZSBLci5SSUdIVF9CT1RUT006KGY9PT1Lci5CT1RUT01fTEVGVHx8Zj09PUtyLkxFRlRfQk9UVE9NKSYmKGFl'@;
put 'LT1aZSxYKz1iZSksKGY9PT1Lci5CT1RUT01fUklHSFR8fGY9PT1Lci5SSUdIVF9CT1RUT00pJiYoYWUtPVplLFgtPXhlKSwoZj09PUtyLlRPUF9MRUZUfHxmPT09S3IuTEVGVF9UT1ApJiYoYWUrPVZlLFgrPWJlKSwoZj09PUtyLlRPUF9SSUdIVHx8Zj09PUtyLlJJR0hUX1RPUCkmJihhZSs9'@;
put 'VmUsWC09eGUpO2JyZWFrO2Nhc2UgS3IuVE9QX0NFTlRFUjphZS09WmUsWCs9YmUsWC09eGU7YnJlYWs7Y2FzZSBLci5CT1RUT01fQ0VOVEVSOmFlKz1WZSxYKz1iZSxYLT14ZTticmVhaztjYXNlIEtyLkxFRlRfQ0VOVEVSOmFlKz1WZSxhZS09WmUsWC09eGU7YnJlYWs7Y2FzZSBLci5SSUdI'@;
put 'VF9DRU5URVI6YWUrPVZlLGFlLT1aZSxYKz1iZX1yZXR1cm4gdGhpcy5lbGVtZW50LnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlWCgke01hdGgucm91bmQoWCl9cHgpIHRyYW5zbGF0ZVkoJHtNYXRoLnJvdW5kKGFlKX1weClgLHRoaXMuX3Njcm9sbC5hc09ic2VydmFibGUoKX1yZWxlYXNl'@;
put 'KCl7dGhpcy5lbGVtZW50LnN0eWxlLnRyYW5zZm9ybT0iIix0aGlzLnJlbW92ZVNjcm9sbEV2ZW50TGlzdGVuZXJzKCl9aXNQb3NpdGlvbmVkKGMpe2NvbnN0IGE9Z2V0Q29tcHV0ZWRTdHlsZShjKS5wb3NpdGlvbjtyZXR1cm4icmVsYXRpdmUiPT09YXx8ImFic29sdXRlIj09PWF8fCJmaXhl'@;
put 'ZCI9PT1hfWVtaXRTY3JvbGxFdmVudCgpe3RoaXMuX3Njcm9sbC5uZXh0KCl9YWRkU2Nyb2xsRXZlbnRMaXN0ZW5lcnMoYyl7dGhpcy5fc2Nyb2xsPW5ldyB3ZTtjb25zdCBhPWM7bGV0IGY9Yztmb3IoO2YmJmYhPT1kb2N1bWVudCYmKHRoaXMuc2Nyb2xscyhmKSYmKGYuYWRkRXZlbnRMaXN0'@;
put 'ZW5lcigic2Nyb2xsIix0aGlzLmJvdW5kT25TY3JvbGxMaXN0ZW5lciksdGhpcy5zY3JvbGxhYmxlRWxlbWVudHMucHVzaChmKSksZj09PWF8fCF0aGlzLmlzUG9zaXRpb25lZChmKSk7KWY9Zi5wYXJlbnROb2RlfXJlbW92ZVNjcm9sbEV2ZW50TGlzdGVuZXJzKCl7Zm9yKGNvbnN0IGMgb2Yg'@;
put 'dGhpcy5zY3JvbGxhYmxlRWxlbWVudHMpYy5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuYm91bmRPblNjcm9sbExpc3RlbmVyKTt0aGlzLnNjcm9sbGFibGVFbGVtZW50cy5sZW5ndGg9MCx0aGlzLl9zY3JvbGwmJih0aGlzLl9zY3JvbGwuY29tcGxldGUoKSxkZWxldGUgdGhp'@;
put 'cy5fc2Nyb2xsKX1zY3JvbGxzKGMpe2NvbnN0IGE9Z2V0Q29tcHV0ZWRTdHlsZShjKTtyZXR1cm4ic2Nyb2xsIj09PWEub3ZlcmZsb3dYfHwiYXV0byI9PT1hLm92ZXJmbG93WHx8InNjcm9sbCI9PT1hLm92ZXJmbG93WXx8ImF1dG8iPT09YS5vdmVyZmxvd1l9fWxldCB1Wj0oKCk9PntjbGFz'@;
put 'cyBse2NvbnN0cnVjdG9yKGEsZil7dGhpcy5wYXJlbnRIb3N0PWYsdGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrPSExLHRoaXMucG9wb3Zlck9wdGlvbnM9e30sdGhpcy51cGRhdGVBbmNob3I9ITEsdGhpcy5kb2N1bWVudEVTQ0xpc3RlbmVyPW51bGwsdGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNr'@;
put 'Q2FsbGJhY2s9ZD0+e3RoaXMuYW5jaG9yRWxlbS5jb250YWlucyhkLnRhcmdldCl8fCh0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMSl9LHRoaXMuZWw9YS5nZXQoVmkpLHRoaXMudG9nZ2xlU2VydmljZT1hLmdldChRYSksdGhpcy5yZW5kZXJlcj1hLmdldChqbyksdGhpcy5uZ1pvbmU9YS5n'@;
put 'ZXQoVW8pLHRoaXMucmVmPWEuZ2V0KFVsKSx0aGlzLmFuY2hvckVsZW09Zi5uYXRpdmVFbGVtZW50LHRoaXMucG9wb3Zlckluc3RhbmNlPW5ldyBTTmUodGhpcy5lbC5uYXRpdmVFbGVtZW50KSx0aGlzLnN1YnNjcmlwdGlvbj10aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3Jp'@;
put 'YmUoZD0+e2Q/KHRoaXMuYW5jaG9yKCksdGhpcy5hdHRhY2hFU0NMaXN0ZW5lcigpKToodGhpcy5yZWxlYXNlKCksdGhpcy5kZXRhY2hFU0NMaXN0ZW5lcigpKX0pLHRoaXMudG9nZ2xlU2VydmljZS5vcGVuJiYodGhpcy5hbmNob3IoKSx0aGlzLmF0dGFjaEVTQ0xpc3RlbmVyKCkpfWdldCBp'@;
put 'c09mZlNjcmVlbigpe3JldHVybiF0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbn1uZ0FmdGVyVmlld0NoZWNrZWQoKXt0aGlzLnVwZGF0ZUFuY2hvciYmKHRoaXMudXBkYXRlQW5jaG9yPSExLHRoaXMucG9wb3Zlckluc3RhbmNlLmFuY2hvcih0aGlzLmFuY2hvckVsZW0sdGhpcy5hbmNob3JQb2lu'@;
put 'dCx0aGlzLnBvcG92ZXJQb2ludCx0aGlzLnBvcG92ZXJPcHRpb25zKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMX0pLHRoaXMuYXR0YWNoT3V0c2lkZUNsaWNrTGlzdGVuZXIoKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnJlbGVhc2UoKSx0aGlzLmRldGFjaEVTQ0xp'@;
put 'c3RlbmVyKCksdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1hbmNob3IoKXt0aGlzLnVwZGF0ZUFuY2hvcj0hMH1yZWxlYXNlKCl7dGhpcy5kZXRhY2hPdXRzaWRlQ2xpY2tMaXN0ZW5lcigpLHRoaXMucG9wb3Zlckluc3RhbmNlLnJlbGVhc2UoKX1hdHRhY2hFU0NMaXN0ZW5lcigp'@;
put 'e3RoaXMucG9wb3Zlck9wdGlvbnMuaWdub3JlR2xvYmFsRVNDTGlzdGVuZXJ8fHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5kb2N1bWVudEVTQ0xpc3RlbmVyPXRoaXMucmVuZGVyZXIubGlzdGVuKCJkb2N1bWVudCIsImtleWRvd24iLGE9PnthJiZhLmtleSYmRWQo'@;
put 'YS5rZXkpPT09TW8uRXNjYXBlJiZ0aGlzLm5nWm9uZS5ydW4oKCk9Pnt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMSx0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKX0pfSl9KX1kZXRhY2hFU0NMaXN0ZW5lcigpe3RoaXMuZG9jdW1lbnRFU0NMaXN0ZW5lciYmKHRoaXMuZG9jdW1lbnRFU0NMaXN0'@;
put 'ZW5lcigpLHRoaXMuZG9jdW1lbnRFU0NMaXN0ZW5lcj1udWxsKX1hdHRhY2hPdXRzaWRlQ2xpY2tMaXN0ZW5lcigpe3RoaXMuY2xvc2VPbk91dHNpZGVDbGljayYmdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJmRvY3VtZW50JiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyJiZkb2N1bWVudC5h'@;
put 'ZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrQ2FsbGJhY2ssITApfWRldGFjaE91dHNpZGVDbGlja0xpc3RlbmVyKCl7dGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrJiZkb2N1bWVudCYmZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciYmZG9jdW1lbnQu'@;
put 'cmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuY2xvc2VPbk91dHNpZGVDbGlja0NhbGxiYWNrLCEwKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkocnQoQWwpLHJ0KFZpLDQpKX0sbC5cdTAyNzVkaXI9U3Ioe3R5cGU6bCxob3N0VmFyczoy'@;
put 'LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGYpezImYSYmZ3IoImlzLW9mZi1zY3JlZW4iLGYuaXNPZmZTY3JlZW4pfX0pLGx9KSgpLG81PSgoKT0+e2NsYXNzIGwgZXh0ZW5kcyB1Wntjb25zdHJ1Y3RvcihhLGYsZCxoKXtpZighZil0aHJvdyBuZXcgRXJyb3IoImNsci1kcm9wZG93bi1tZW51'@;
put 'IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLWRyb3Bkb3duIik7c3VwZXIoYSxmKSxkPyh0aGlzLmFuY2hvclBvaW50PUtyLlJJR0hUX1RPUCx0aGlzLnBvcG92ZXJQb2ludD1Lci5MRUZUX1RPUCk6KHRoaXMuYW5jaG9yUG9pbnQ9S3IuQk9UVE9NX0xFRlQsdGhpcy5wb3Bv'@;
put 'dmVyUG9pbnQ9S3IuTEVGVF9UT1ApLHRoaXMucG9wb3Zlck9wdGlvbnMuYWxsb3dNdWx0aXBsZU9wZW49ITAsdGhpcy5wb3BvdmVyT3B0aW9ucy5pZ25vcmVHbG9iYWxFU0NMaXN0ZW5lcj0hMCx0aGlzLmNsb3NlT25PdXRzaWRlQ2xpY2s9ITAsdGhpcy5mb2N1c0hhbmRsZXI9aH1zZXQgcG9z'@;
put 'aXRpb24oYSl7c3dpdGNoKGEpe2Nhc2UidG9wLXJpZ2h0Ijp0aGlzLmFuY2hvclBvaW50PUtyLlRPUF9SSUdIVCx0aGlzLnBvcG92ZXJQb2ludD1Lci5SSUdIVF9CT1RUT007YnJlYWs7Y2FzZSJ0b3AtbGVmdCI6dGhpcy5hbmNob3JQb2ludD1Lci5UT1BfTEVGVCx0aGlzLnBvcG92ZXJQb2lu'@;
put 'dD1Lci5MRUZUX0JPVFRPTTticmVhaztjYXNlImJvdHRvbS1yaWdodCI6dGhpcy5hbmNob3JQb2ludD1Lci5CT1RUT01fUklHSFQsdGhpcy5wb3BvdmVyUG9pbnQ9S3IuUklHSFRfVE9QO2JyZWFrO2Nhc2UiYm90dG9tLWxlZnQiOmRlZmF1bHQ6dGhpcy5hbmNob3JQb2ludD1Lci5CT1RUT01f'@;
put 'TEVGVCx0aGlzLnBvcG92ZXJQb2ludD1Lci5MRUZUX1RPUDticmVhaztjYXNlInJpZ2h0LXRvcCI6dGhpcy5hbmNob3JQb2ludD1Lci5SSUdIVF9UT1AsdGhpcy5wb3BvdmVyUG9pbnQ9S3IuTEVGVF9UT1A7YnJlYWs7Y2FzZSJyaWdodC1ib3R0b20iOnRoaXMuYW5jaG9yUG9pbnQ9S3IuUklH'@;
put 'SFRfQk9UVE9NLHRoaXMucG9wb3ZlclBvaW50PUtyLkxFRlRfQk9UVE9NO2JyZWFrO2Nhc2UibGVmdC10b3AiOnRoaXMuYW5jaG9yUG9pbnQ9S3IuTEVGVF9UT1AsdGhpcy5wb3BvdmVyUG9pbnQ9S3IuUklHSFRfVE9QO2JyZWFrO2Nhc2UibGVmdC1ib3R0b20iOnRoaXMuYW5jaG9yUG9pbnQ9'@;
put 'S3IuTEVGVF9CT1RUT00sdGhpcy5wb3BvdmVyUG9pbnQ9S3IuUklHSFRfQk9UVE9NfX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLmZvY3VzSGFuZGxlci5jb250YWluZXI9dGhpcy5lbC5uYXRpdmVFbGVtZW50LHRoaXMuaXRlbXMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9PnRoaXMuZm9jdXNI'@;
put 'YW5kbGVyLmFkZENoaWxkcmVuKHRoaXMuaXRlbXMudG9BcnJheSgpKSksdGhpcy5pdGVtcy5ub3RpZnlPbkNoYW5nZXMoKX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksdGhpcy5mb2N1c0hhbmRsZXIucmVzZXRDaGlsZHJlbigpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rp'@;
put 'b24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChBbCkscnQodTcsOCkscnQobCwxMikscnQoc1opKX0sbC5cdTAyNzVjbXA9a3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siY2xyLWRyb3Bkb3duLW1lbnUiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxmLGQpe2lmKDEmYSYmRm8oZCx0SSw0KSwy'@;
put 'JmEpe2xldCBoO3VpKGg9Y2koKSkmJihmLml0ZW1zPWgpfX0saG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxmKXsyJmEmJihScigicm9sZSIsIm1lbnUiKSxncigiZHJvcGRvd24tbWVudSIsITApKX0saW5wdXRzOntwb3NpdGlvbjpbImNsclBvc2l0aW9uIiwicG9zaXRpb24i'@;
put 'XX0sZmVhdHVyZXM6W3JvXSxuZ0NvbnRlbnRTZWxlY3RvcnM6T28sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxmKXsxJmEmJihUaSgpLERyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksbH0pKCksYTU9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhLGYsZCxoKXt0aGlzLnRv'@;
put 'Z2dsZVNlcnZpY2U9Zix0aGlzLmlzUm9vdExldmVsVG9nZ2xlPSEwLGEucGFyZW50JiYodGhpcy5pc1Jvb3RMZXZlbFRvZ2dsZT0hMSksaC50cmlnZ2VyPWQubmF0aXZlRWxlbWVudH1nZXQgYWN0aXZlKCl7cmV0dXJuIHRoaXMudG9nZ2xlU2VydmljZS5vcGVufW9uRHJvcGRvd25UcmlnZ2Vy'@;
put 'Q2xpY2soYSl7dGhpcy50b2dnbGVTZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChhKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkocnQoYTMpLHJ0KFFhKSxydChWaSkscnQoc1opKX0sbC5cdTAyNzVkaXI9U3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siIiwi'@;
put 'Y2xyRHJvcGRvd25UcmlnZ2VyIiwiIl0sWyIiLCJjbHJEcm9wZG93blRvZ2dsZSIsIiJdXSxob3N0VmFyczoxMCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxmKXsxJmEmJkV0KCJjbGljayIsZnVuY3Rpb24oaCl7cmV0dXJuIGYub25Ecm9wZG93blRyaWdnZXJDbGljayhoKX0pLDImYSYmKFJy'@;
put 'KCJhcmlhLWhhc3BvcHVwIiwibWVudSIpKCJhcmlhLWV4cGFuZGVkIixmLmFjdGl2ZSksZ3IoImRyb3Bkb3duLXRvZ2dsZSIsZi5pc1Jvb3RMZXZlbFRvZ2dsZSkoImRyb3Bkb3duLWl0ZW0iLCFmLmlzUm9vdExldmVsVG9nZ2xlKSgiZXhwYW5kYWJsZSIsIWYuaXNSb290TGV2ZWxUb2dnbGUp'@;
put 'KCJhY3RpdmUiLGYuYWN0aXZlKSl9fSksbH0pKCksY1o9KCgpPT57Y2xhc3MgbHt9cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1bW9kPURpKHt0eXBlOmx9KSxsLlx1MDI3NWluaj14aSh7aW1wb3J0czpbW2JvXSxBZixsbF19KSxsfSko'@;
put 'KTtjb25zdCBNTmU9WyJpbmZvIiwid2FybmluZyIsImRhbmdlciIsInN1Y2Nlc3MiXTtsZXQgZlo9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhKXt0aGlzLmNvbW1vblN0cmluZ3M9YSx0aGlzLmRlZmF1bHRJY29uU2hhcGU9ImluZm8tY2lyY2xlIix0aGlzLl9hbGVydEljb25TaGFwZT0i'@;
put 'Iix0aGlzLl9hbGVydFR5cGU9ImluZm8ifWdldCBhbGVydFR5cGUoKXtyZXR1cm4gdGhpcy5fYWxlcnRUeXBlfXNldCBhbGVydFR5cGUoYSl7TU5lLmluZGV4T2YoYSk+LTEmJih0aGlzLl9hbGVydFR5cGU9YSl9Z2V0IGFsZXJ0SWNvblNoYXBlKCl7cmV0dXJuIiI9PT10aGlzLl9hbGVydElj'@;
put 'b25TaGFwZT90aGlzLmljb25JbmZvRnJvbVR5cGUodGhpcy5fYWxlcnRUeXBlKS5zaGFwZTp0aGlzLl9hbGVydEljb25TaGFwZX1zZXQgYWxlcnRJY29uU2hhcGUoYSl7YT9hIT09dGhpcy5fYWxlcnRJY29uU2hhcGUmJih0aGlzLl9hbGVydEljb25TaGFwZT1hKTp0aGlzLl9hbGVydEljb25T'@;
put 'aGFwZT0iIn1nZXQgYWxlcnRJY29uVGl0bGUoKXtyZXR1cm4gdGhpcy5pY29uSW5mb0Zyb21UeXBlKHRoaXMuX2FsZXJ0VHlwZSkudGl0bGV9aWNvbkluZm9Gcm9tVHlwZShhKXtjb25zdCBmPXtzaGFwZToiIixjc3NDbGFzczoiIix0aXRsZToiIn07c3dpdGNoKGEpe2Nhc2Uid2FybmluZyI6'@;
put 'Zi5zaGFwZT0iZXhjbGFtYXRpb24tdHJpYW5nbGUiLGYuY3NzQ2xhc3M9ImFsZXJ0LXdhcm5pbmciLGYudGl0bGU9dGhpcy5jb21tb25TdHJpbmdzLmtleXMud2FybmluZzticmVhaztjYXNlImRhbmdlciI6Zi5zaGFwZT0iZXhjbGFtYXRpb24tY2lyY2xlIixmLmNzc0NsYXNzPSJhbGVydC1k'@;
put 'YW5nZXIiLGYudGl0bGU9dGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGFuZ2VyO2JyZWFrO2Nhc2Uic3VjY2VzcyI6Zi5zaGFwZT0iY2hlY2stY2lyY2xlIixmLmNzc0NsYXNzPSJhbGVydC1zdWNjZXNzIixmLnRpdGxlPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnN1Y2Nlc3M7YnJlYWs7ZGVm'@;
put 'YXVsdDpmLnNoYXBlPXRoaXMuZGVmYXVsdEljb25TaGFwZSxmLmNzc0NsYXNzPSJhbGVydC1pbmZvIixmLnRpdGxlPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmluZm99cmV0dXJuIGZ9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHNyKFRhKSl9LGwu'@;
put 'XHUwMjc1cHJvdj1ocih7dG9rZW46bCxmYWN0b3J5OmwuXHUwMjc1ZmFjfSksbH0pKCksdkk9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3Rvcigpe3RoaXMuX2NoYW5nZT1uZXcgd2V9Z2V0IGNoYW5nZXMoKXtyZXR1cm4gdGhpcy5fY2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBjdXJyZW50KCl7'@;
put 'cmV0dXJuIHRoaXMuX2N1cnJlbnR9c2V0IGN1cnJlbnQoYSl7YSE9PXRoaXMuX2N1cnJlbnQmJih0aGlzLl9jdXJyZW50PWEsdGhpcy5fY2hhbmdlLm5leHQoYSkpfWdldCBhY3RpdmVBbGVydHMoKXtyZXR1cm4gdGhpcy5hbGxBbGVydHMmJnRoaXMuYWxsQWxlcnRzLmZpbHRlcihhPT4hYS5f'@;
put 'Y2xvc2VkKX1nZXQgY3VycmVudEFsZXJ0KCl7cmV0dXJuIHRoaXMuYWN0aXZlQWxlcnRzJiZ0aGlzLmFjdGl2ZUFsZXJ0c1t0aGlzLmN1cnJlbnRdfXNldCBjdXJyZW50QWxlcnQoYSl7dGhpcy5jdXJyZW50PXRoaXMuYWN0aXZlQWxlcnRzLmluZGV4T2YoYSl9Z2V0IGNvdW50KCl7cmV0dXJu'@;
put 'IHRoaXMuYWN0aXZlQWxlcnRzJiZ0aGlzLmFjdGl2ZUFsZXJ0cy5sZW5ndGh8fDB9bWFuYWdlKGEpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuYWxsQWxlcnRzPWEsdGhpcy5jdXJyZW50PSJudW1iZXIiPT10eXBlb2YgdGhpcy5fY3Vy'@;
put 'cmVudD90aGlzLl9jdXJyZW50OjAsdGhpcy5fY2hhbmdlLm5leHQodGhpcy5jdXJyZW50KSx0aGlzLnN1YnNjcmlwdGlvbj10aGlzLmFsbEFsZXJ0cy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuY3VycmVudD49dGhpcy5hbGxBbGVydHMubGVuZ3RoJiYodGhpcy5jdXJyZW50PU1hdGgu'@;
put 'bWF4KDAsdGhpcy5hbGxBbGVydHMubGVuZ3RoLTEpKX0pfW5leHQoKXt0aGlzLl9jdXJyZW50PXRoaXMuY3VycmVudD09PXRoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aC0xPzA6dGhpcy5jdXJyZW50KzEsdGhpcy5fY2hhbmdlLm5leHQodGhpcy5fY3VycmVudCl9cHJldmlvdXMoKXswIT09dGhp'@;
put 'cy5hY3RpdmVBbGVydHMubGVuZ3RoJiYodGhpcy5fY3VycmVudD0wPT09dGhpcy5jdXJyZW50P3RoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aC0xOnRoaXMuY3VycmVudC0xLHRoaXMuX2NoYW5nZS5uZXh0KHRoaXMuX2N1cnJlbnQpKX1vcGVuKCl7MCE9PXRoaXMuYWN0aXZlQWxlcnRzLmxlbmd0'@;
put 'aCYmKHRoaXMuY3VycmVudEFsZXJ0fHwodGhpcy5fY3VycmVudD0wKSx0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLl9jdXJyZW50KSl9Y2xvc2UoYSl7MCE9PXRoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aCYmKGEmJih0aGlzLl9jdXJyZW50PU1hdGgubWF4KDAsdGhpcy5jdXJyZW50LTEpKSx0aGlz'@;
put 'Ll9jaGFuZ2UubmV4dCh0aGlzLl9jdXJyZW50KSl9ZGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVwcm92PWhyKHt0b2tlbjps'@;
put 'LGZhY3Rvcnk6bC5cdTAyNzVmYWN9KSxsfSkoKSxfUz0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEsZixkLGgpe3RoaXMuaWNvblNlcnZpY2U9YSx0aGlzLmNkcj1mLHRoaXMubXVsdGlBbGVydFNlcnZpY2U9ZCx0aGlzLmNvbW1vblN0cmluZ3M9aCx0aGlzLmlzU21hbGw9ITEsdGhpcy5j'@;
put 'bG9zYWJsZT0hMCx0aGlzLmlzQXBwTGV2ZWw9ITEsdGhpcy5jbHJDbG9zZUJ1dHRvbkFyaWFMYWJlbD10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5hbGVydENsb3NlQnV0dG9uQXJpYUxhYmVsLHRoaXMuX2Nsb3NlZENoYW5nZWQ9bmV3IHhyKCExKSx0aGlzLl9jbG9zZWQ9ITEsdGhpcy5zdWJz'@;
put 'Y3JpcHRpb25zPVtdfWdldCBhbGVydFR5cGUoKXtyZXR1cm4gdGhpcy5pY29uU2VydmljZS5hbGVydFR5cGV9c2V0IGFsZXJ0VHlwZShhKXt0aGlzLmljb25TZXJ2aWNlLmFsZXJ0VHlwZT1hfXNldCBhbGVydEljb25TaGFwZShhKXt0aGlzLmljb25TZXJ2aWNlLmFsZXJ0SWNvblNoYXBlPWF9'@;
put 'c2V0IGNsb3NlZChhKXthJiYhdGhpcy5fY2xvc2VkP3RoaXMuY2xvc2UoKTohYSYmdGhpcy5fY2xvc2VkJiZ0aGlzLm9wZW4oKX1nZXQgYWxlcnRDbGFzcygpe3JldHVybiB0aGlzLmljb25TZXJ2aWNlLmljb25JbmZvRnJvbVR5cGUodGhpcy5pY29uU2VydmljZS5hbGVydFR5cGUpLmNzc0Ns'@;
put 'YXNzfWdldCBoaWRkZW4oKXtyZXR1cm4gdGhpcy5faGlkZGVufXNldCBoaWRkZW4oYSl7YSE9PXRoaXMuX2hpZGRlbiYmKHRoaXMuX2hpZGRlbj1hLHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKSl9bmdPbkluaXQoKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlJiZ0aGlzLnN1YnNjcmlwdGlvbnMu'@;
put 'cHVzaCh0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT57dGhpcy5oaWRkZW49dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnQhPT10aGlzfSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmli'@;
put 'ZSgpKX1vcGVuKCl7dGhpcy5fY2xvc2VkPSExLHRoaXMubXVsdGlBbGVydFNlcnZpY2UmJnRoaXMubXVsdGlBbGVydFNlcnZpY2Uub3BlbigpLHRoaXMuX2Nsb3NlZENoYW5nZWQuZW1pdCghMSl9Y2xvc2UoKXtpZighdGhpcy5jbG9zYWJsZSlyZXR1cm47Y29uc3QgYT10aGlzLm11bHRpQWxl'@;
put 'cnRTZXJ2aWNlPy5jdXJyZW50QWxlcnQ9PT10aGlzO3RoaXMuX2Nsb3NlZD0hMCx0aGlzLm11bHRpQWxlcnRTZXJ2aWNlJiZ0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNsb3NlKGEpLHRoaXMuX2Nsb3NlZENoYW5nZWQuZW1pdCghMCl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXty'@;
put 'ZXR1cm4gbmV3KGF8fGwpKHJ0KGZaKSxydChVbCkscnQodkksOCkscnQoVGEpKX0sbC5cdTAyNzVjbXA9a3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siY2xyLWFsZXJ0Il1dLGlucHV0czp7aXNTbWFsbDpbImNsckFsZXJ0U2l6ZVNtYWxsIiwiaXNTbWFsbCJdLGNsb3NhYmxlOlsiY2xyQWxlcnRD'@;
put 'bG9zYWJsZSIsImNsb3NhYmxlIl0saXNBcHBMZXZlbDpbImNsckFsZXJ0QXBwTGV2ZWwiLCJpc0FwcExldmVsIl0sY2xyQ2xvc2VCdXR0b25BcmlhTGFiZWw6ImNsckNsb3NlQnV0dG9uQXJpYUxhYmVsIixhbGVydFR5cGU6WyJjbHJBbGVydFR5cGUiLCJhbGVydFR5cGUiXSxhbGVydEljb25T'@;
put 'aGFwZTpbImNsckFsZXJ0SWNvbiIsImFsZXJ0SWNvblNoYXBlIl0sY2xvc2VkOlsiY2xyQWxlcnRDbG9zZWQiLCJjbG9zZWQiXX0sb3V0cHV0czp7X2Nsb3NlZENoYW5nZWQ6ImNsckFsZXJ0Q2xvc2VkQ2hhbmdlIn0sZmVhdHVyZXM6W3JpKFtmWl0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6T28s'@;
put 'ZGVjbHM6MSx2YXJzOjEsY29uc3RzOltbImNsYXNzIiwiYWxlcnQiLDMsIm5nQ2xhc3MiLCJhbGVydC1oaWRkZW4iLCJhbGVydC1zbSIsImFsZXJ0LWFwcC1sZXZlbCIsNCwibmdJZiJdLFsxLCJhbGVydCIsMywibmdDbGFzcyJdLFsxLCJhbGVydC1pdGVtcyJdLFsidHlwZSIsImJ1dHRvbiIs'@;
put 'ImNsYXNzIiwiY2xvc2UiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjbG9zZSIsMywiY2xpY2siXSxbInNoYXBlIiwid2luZG93LWNsb3NlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZil7MSZhJiYoVGkoKSx0dCgwLExQZSw0LDgsImRpdiIsMCkpLDImYSYmUmUo'@;
put 'Im5nSWYiLCFmLl9jbG9zZWQpfSxkZXBlbmRlbmNpZXM6WyRpLHl1LEphXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6YmxvY2t9Il19KSxsfSkoKSx0dWU9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhKXt0aGlzLmljb25TZXJ2aWNlPWF9fXJldHVybiBsLlx1MDI3NWZh'@;
put 'Yz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHJ0KGZaKSl9LGwuXHUwMjc1Y21wPWtyKHt0eXBlOmwsc2VsZWN0b3JzOltbImNsci1hbGVydC1pdGVtIl1dLGhvc3RBdHRyczpbMSwiYWxlcnQtaXRlbSJdLG5nQ29udGVudFNlbGVjdG9yczpPbyxkZWNsczozLHZhcnM6Mixjb25zdHM6'@;
put 'W1sxLCJhbGVydC1pY29uLXdyYXBwZXIiXSxbInJvbGUiLCJpbWciLDEsImFsZXJ0LWljb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxmKXsxJmEmJihUaSgpLHllKDAsImRpdiIsMCksdG4oMSwiY2RzLWljb24iLDEpLENlKCksRHIoMikpLDImYSYmKFNlKDEpLFJyKCJzaGFwZSIsZi5pY29u'@;
put 'U2VydmljZS5hbGVydEljb25TaGFwZSkoImFyaWEtbGFiZWwiLGYuaWNvblNlcnZpY2UuYWxlcnRJY29uVGl0bGUpKX0sZGVwZW5kZW5jaWVzOltKYV0sZW5jYXBzdWxhdGlvbjoyfSksbH0pKCksd1M9KCgpPT57Y2xhc3MgbHt9cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy'@;
put 'biBuZXcoYXx8bCl9LGwuXHUwMjc1ZGlyPVNyKHt0eXBlOmwsc2VsZWN0b3JzOltbIiIsOCwiYWxlcnQtdGV4dCJdXX0pLGx9KSgpLG51ZT0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEsZil7dGhpcy5tdWx0aUFsZXJ0U2VydmljZT1hLHRoaXMuY29tbW9uU3RyaW5ncz1mLHRoaXMuY3Vy'@;
put 'cmVudEFsZXJ0Q2hhbmdlPW5ldyB4cighMSksdGhpcy5jdXJyZW50QWxlcnRJbmRleENoYW5nZT1uZXcgeHJ9Z2V0IGN1cnJlbnRBbGVydCgpe3JldHVybiB0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydH1zZXQgY3VycmVudEFsZXJ0KGEpe2EmJih0aGlzLm11bHRpQWxlcnRT'@;
put 'ZXJ2aWNlLmN1cnJlbnRBbGVydD1hKX1nZXQgY3VycmVudEFsZXJ0SW5kZXgoKXtyZXR1cm4gdGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50fXNldCBjdXJyZW50QWxlcnRJbmRleChhKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnQ9YX1nZXQgcHJldmlvdXNBbGVydEFyaWFM'@;
put 'YWJlbCgpe2NvbnN0IGE9dGhpcy5jdXJyZW50QWxlcnRJbmRleCsxO3JldHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuYWxlcnRQcmV2aW91c0FsZXJ0QXJpYUxhYmVsLHtDVVJSRU5UOigxPT09YT90aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNv'@;
put 'dW50OmEtMSkudG9TdHJpbmcoKSxDT1VOVDp0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNvdW50LnRvU3RyaW5nKCl9KX1nZXQgbmV4dEFsZXJ0QXJpYUxhYmVsKCl7Y29uc3QgYT10aGlzLmN1cnJlbnRBbGVydEluZGV4KzE7cmV0dXJuIHRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNv'@;
put 'bW1vblN0cmluZ3Mua2V5cy5hbGVydE5leHRBbGVydEFyaWFMYWJlbCx7Q1VSUkVOVDooYT09PXRoaXMubXVsdGlBbGVydFNlcnZpY2UuY291bnQ/MTphKzEpLnRvU3RyaW5nKCksQ09VTlQ6dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jb3VudC50b1N0cmluZygpfSl9bmdPbkluaXQoKXt0aGlz'@;
put 'Lm11bHRpQWxlcnRTZXJ2aWNlQ2hhbmdlcz10aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNoYW5nZXMuc3Vic2NyaWJlKGE9Pnt0aGlzLmN1cnJlbnRBbGVydEluZGV4Q2hhbmdlLmVtaXQoYSksdGhpcy5jdXJyZW50QWxlcnRDaGFuZ2UuZW1pdCh0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmFjdGl2'@;
put 'ZUFsZXJ0c1thXSl9KX1uZ09uRGVzdHJveSgpe3RoaXMubXVsdGlBbGVydFNlcnZpY2VDaGFuZ2VzLnVuc3Vic2NyaWJlKCl9cGFnZVVwKCl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5uZXh0KCl9cGFnZURvd24oKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLnByZXZpb3VzKCl9fXJldHVybiBs'@;
put 'Llx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHJ0KHZJKSxydChUYSkpfSxsLlx1MDI3NWNtcD1rcih7dHlwZTpsLHNlbGVjdG9yczpbWyJjbHItYWxlcnRzLXBhZ2VyIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZil7MiZhJiZncigiYWxlcnRz'@;
put 'LXBhZ2VyIiwhMCl9LGlucHV0czp7Y3VycmVudEFsZXJ0OlsiY2xyQ3VycmVudEFsZXJ0IiwiY3VycmVudEFsZXJ0Il0sY3VycmVudEFsZXJ0SW5kZXg6WyJjbHJDdXJyZW50QWxlcnRJbmRleCIsImN1cnJlbnRBbGVydEluZGV4Il19LG91dHB1dHM6e2N1cnJlbnRBbGVydENoYW5nZToiY2xy'@;
put 'Q3VycmVudEFsZXJ0Q2hhbmdlIixjdXJyZW50QWxlcnRJbmRleENoYW5nZToiY2xyQ3VycmVudEFsZXJ0SW5kZXhDaGFuZ2UifSxkZWNsczo5LHZhcnM6NCxjb25zdHM6W1sxLCJhbGVydHMtcGFnZXItY29udHJvbCJdLFsxLCJhbGVydHMtcGFnZS1kb3duIl0sWyJ0eXBlIiwiYnV0dG9uIiwx'@;
put 'LCJhbGVydHMtcGFnZXItYnV0dG9uIiwzLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsImxlZnQiXSxbMSwiYWxlcnRzLXBhZ2VyLXRleHQiXSxbMSwiYWxlcnRzLXBhZ2UtdXAiXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJyaWdodCJdXSx0ZW1wbGF0ZTpm'@;
put 'dW5jdGlvbihhLGYpezEmYSYmKHllKDAsImRpdiIsMCkoMSwiZGl2IiwxKSgyLCJidXR0b24iLDIpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZi5wYWdlRG93bigpfSksdG4oMywiY2RzLWljb24iLDMpLENlKCkoKSx5ZSg0LCJkaXYiLDQpLFllKDUpLENlKCkseWUoNiwiZGl2Iiw1'@;
put 'KSg3LCJidXR0b24iLDIpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZi5wYWdlVXAoKX0pLHRuKDgsImNkcy1pY29uIiw2KSxDZSgpKCkoKSksMiZhJiYoU2UoMiksUnIoImFyaWEtbGFiZWwiLGYucHJldmlvdXNBbGVydEFyaWFMYWJlbCksU2UoMyksJHUoIiIsZi5tdWx0aUFsZXJ0'@;
put 'U2VydmljZS5jdXJyZW50KzEsIiAvICIsZi5tdWx0aUFsZXJ0U2VydmljZS5jb3VudCwiIiksU2UoMiksUnIoImFyaWEtbGFiZWwiLGYubmV4dEFsZXJ0QXJpYUxhYmVsKSl9LGRlcGVuZGVuY2llczpbSmFdLGVuY2Fwc3VsYXRpb246Mn0pLGx9KSgpLHJ1ZT0oKCk9PntjbGFzcyBse2NvbnN0'@;
put 'cnVjdG9yKGEpe3RoaXMubXVsdGlBbGVydFNlcnZpY2U9YSx0aGlzLmN1cnJlbnRBbGVydENoYW5nZT1uZXcgeHIoITEpLHRoaXMuY3VycmVudEFsZXJ0SW5kZXhDaGFuZ2U9bmV3IHhyKCExKSx0aGlzLnN1YnNjcmlwdGlvbnM9W119c2V0IGFsbEFsZXJ0cyhhKXt0aGlzLm11bHRpQWxlcnRT'@;
put 'ZXJ2aWNlLm1hbmFnZShhKX1zZXQgX2lucHV0Q3VycmVudEluZGV4KGEpe051bWJlci5pc0ludGVnZXIoYSkmJmE+PTAmJih0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnQ9YSl9Z2V0IGN1cnJlbnRBbGVydEluZGV4KCl7cmV0dXJuIHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVu'@;
put 'dH1zZXQgY3VycmVudEFsZXJ0SW5kZXgoYSl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50PWF9Z2V0IGN1cnJlbnRBbGVydCgpe3JldHVybiB0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydH1zZXQgY3VycmVudEFsZXJ0KGEpe2EmJih0aGlzLm11bHRpQWxlcnRTZXJ2'@;
put 'aWNlLmN1cnJlbnRBbGVydD1hKX1nZXQgYWxlcnRzKCl7cmV0dXJuIHRoaXMuYWxsQWxlcnRzLmZpbHRlcihhPT4hMT09PWEuaGlkZGVuKX1nZXQgY3VycmVudEFsZXJ0VHlwZSgpe3JldHVybiB0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydD90aGlzLm11bHRpQWxlcnRTZXJ2'@;
put 'aWNlLmN1cnJlbnRBbGVydC5hbGVydFR5cGU6IiJ9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jaGFuZ2VzLnN1YnNjcmliZShhPT57dGhpcy5jdXJyZW50QWxlcnRJbmRleENoYW5nZS5uZXh0KGEpLHRoaXMuY3Vy'@;
put 'cmVudEFsZXJ0Q2hhbmdlLm5leHQodGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnQpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKSx0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmRlc3Ryb3koKX19cmV0dXJuIGwu'@;
put 'XHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkocnQodkkpKX0sbC5cdTAyNzVjbXA9a3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siY2xyLWFsZXJ0cyJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGYsZCl7aWYoMSZhJiZGbyhkLF9TLDQpLDImYSl7bGV0IGg7dWkoaD1j'@;
put 'aSgpKSYmKGYuYWxsQWxlcnRzPWgpfX0saG9zdFZhcnM6MTAsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZil7MiZhJiZncigiYWxlcnRzIiwhMCkoImFsZXJ0LWRhbmdlciIsImRhbmdlciI9PWYuY3VycmVudEFsZXJ0VHlwZSkoImFsZXJ0LWluZm8iLCJpbmZvIj09Zi5jdXJyZW50QWxlcnRU'@;
put 'eXBlKSgiYWxlcnQtc3VjY2VzcyIsInN1Y2Nlc3MiPT1mLmN1cnJlbnRBbGVydFR5cGUpKCJhbGVydC13YXJuaW5nIiwid2FybmluZyI9PWYuY3VycmVudEFsZXJ0VHlwZSl9LGlucHV0czp7X2lucHV0Q3VycmVudEluZGV4OlsiY2xyQ3VycmVudEFsZXJ0SW5kZXgiLCJfaW5wdXRDdXJyZW50'@;
put 'SW5kZXgiXSxjdXJyZW50QWxlcnQ6WyJjbHJDdXJyZW50QWxlcnQiLCJjdXJyZW50QWxlcnQiXX0sb3V0cHV0czp7Y3VycmVudEFsZXJ0Q2hhbmdlOiJjbHJDdXJyZW50QWxlcnRDaGFuZ2UiLGN1cnJlbnRBbGVydEluZGV4Q2hhbmdlOiJjbHJDdXJyZW50QWxlcnRJbmRleENoYW5nZSJ9LGZl'@;
put 'YXR1cmVzOltyaShbdkldKV0sbmdDb250ZW50U2VsZWN0b3JzOkhQZSxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1szLCJjbHJDdXJyZW50QWxlcnRJbmRleCIsNCwibmdJZiJdLFszLCJjbHJDdXJyZW50QWxlcnRJbmRleCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGYpezEmYSYmKFRpKEZQZSks'@;
put 'dHQoMCxQUGUsMSwxLCJjbHItYWxlcnRzLXBhZ2VyIiwwKSxEcigxKSksMiZhJiZSZSgibmdJZiIsZi5tdWx0aUFsZXJ0U2VydmljZS5jb3VudD4xKX0sZGVwZW5kZW5jaWVzOltudWUsJGldLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpibG9ja30iXX0pLGx9KSgpLGl1ZT0o'@;
put 'KCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKCl7amEuYWRkSWNvbnModzEsUW9lLF8xLG5UZSxOQyl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NW1vZD1EaSh7dHlwZTpsfSksbC5cdTAyNzVpbmo9eGkoe2ltcG9ydHM6W1tibyxsbCxj'@;
put 'Wl1dfSksbH0pKCksa05lPSgoKT0+e2NsYXNzIGx7fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NW1vZD1EaSh7dHlwZTpsfSksbC5cdTAyNzVpbmo9eGkoe2ltcG9ydHM6W2l1ZV19KSxsfSkoKSx0bD0oKCk9PntjbGFzcyBse31yZXR1'@;
put 'cm4gbC5OQVZfTEVWRUxfMT0xLGwuTkFWX0xFVkVMXzI9MixsLk5BVl9DTE9TRV9BTEw9Ik5BVl9DTE9TRV9BTEwiLGwuTkFWX09QRU49Ik5BVl9PUEVOIixsLk5BVl9DTE9TRT0iTkFWX0NMT1NFIixsLk5BVl9UT0dHTEU9Ik5BVl9UT0dHTEUiLGwuTkFWX0NMQVNTX0hBTUJVUkdFUl9NRU5V'@;
put 'PSJvcGVuLWhhbWJ1cmdlci1tZW51IixsLk5BVl9DTEFTU19PVkVSRkxPV19NRU5VPSJvcGVuLW92ZXJmbG93LW1lbnUiLGwuTkFWX0NMQVNTX1RSSUdHRVJfMT0iaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyIixsLk5BVl9DTEFTU19UUklHR0VSXzI9ImhlYWRlci1vdmVyZmxvdy10cmlnZ2Vy'@;
put 'IixsLk5BVl9DTEFTU19MRVZFTF8xPSJjbHItbmF2LWxldmVsLTEiLGwuTkFWX0NMQVNTX0xFVkVMXzI9ImNsci1uYXYtbGV2ZWwtMiIsbH0pKCk7Y2xhc3Mgb3Vle2NvbnN0cnVjdG9yKGMsYSl7dGhpcy5fY29udHJvbENvZGU9Yyx0aGlzLl9uYXZMZXZlbD1hfWdldCBjb250cm9sQ29kZSgp'@;
put 'e3JldHVybiB0aGlzLl9jb250cm9sQ29kZX1nZXQgbmF2TGV2ZWwoKXtyZXR1cm4gdGhpcy5fbmF2TGV2ZWx9fWxldCB5ST0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKCl7dGhpcy5yZXNwb25zaXZlTmF2TGlzdD1bXSx0aGlzLnJlZ2lzdGVyTmF2U3ViamVjdD1uZXcgeEQsdGhpcy5jb250'@;
put 'cm9sTmF2U3ViamVjdD1uZXcgd2UsdGhpcy5jbG9zZUFsbE5hdnMoKX1nZXQgcmVnaXN0ZXJlZE5hdnMoKXtyZXR1cm4gdGhpcy5yZWdpc3Rlck5hdlN1YmplY3QuYXNPYnNlcnZhYmxlKCl9Z2V0IG5hdkNvbnRyb2woKXtyZXR1cm4gdGhpcy5jb250cm9sTmF2U3ViamVjdC5hc09ic2VydmFi'@;
put 'bGUoKX1yZWdpc3Rlck5hdihhKXshYXx8dGhpcy5pc05hdlJlZ2lzdGVyZWQoYSl8fCh0aGlzLnJlc3BvbnNpdmVOYXZMaXN0LnB1c2goYSksdGhpcy5yZWdpc3Rlck5hdlN1YmplY3QubmV4dCh0aGlzLnJlc3BvbnNpdmVOYXZMaXN0KSl9aXNOYXZSZWdpc3RlcmVkKGEpe3JldHVybiB0aGlz'@;
put 'LnJlc3BvbnNpdmVOYXZMaXN0LmluZGV4T2YoYSk+LTEmJihjb25zb2xlLmVycm9yKCJNdWx0aXBsZSBjbHItbmF2LWxldmVsICIrYSsiIGF0dHJpYnV0ZXMgZm91bmQuIFBsZWFzZSBtYWtlIHN1cmUgdGhhdCBvbmx5IG9uZSBleGlzdHMiKSwhMCl9dW5yZWdpc3Rlck5hdihhKXtjb25zdCBm'@;
put 'PXRoaXMucmVzcG9uc2l2ZU5hdkxpc3QuaW5kZXhPZihhKTtmPi0xJiYodGhpcy5yZXNwb25zaXZlTmF2TGlzdC5zcGxpY2UoZiwxKSx0aGlzLnJlZ2lzdGVyTmF2U3ViamVjdC5uZXh0KHRoaXMucmVzcG9uc2l2ZU5hdkxpc3QpKX1zZW5kQ29udHJvbE1lc3NhZ2UoYSxmKXtjb25zdCBkPW5l'@;
put 'dyBvdWUoYSxmKTt0aGlzLmNvbnRyb2xOYXZTdWJqZWN0Lm5leHQoZCl9Y2xvc2VBbGxOYXZzKCl7Y29uc3QgYT1uZXcgb3VlKHRsLk5BVl9DTE9TRV9BTEwsLTk5OSk7dGhpcy5jb250cm9sTmF2U3ViamVjdC5uZXh0KGEpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJu'@;
put 'IG5ldyhhfHxsKX0sbC5cdTAyNzVwcm92PWhyKHt0b2tlbjpsLGZhY3Rvcnk6bC5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxsfSkoKSxFTmU9KCgpPT57Y2xhc3MgbHt9cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1bW9kPURp'@;
put 'KHt0eXBlOmx9KSxsLlx1MDI3NWluaj14aSh7aW1wb3J0czpbW2JvLGxsXV19KSxsfSkoKTtmdW5jdGlvbiBsdWUobCl7Y29uc3QgYz1sLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtyZXR1cm4gYy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiMCIpLGMuY2xhc3NMaXN0LmFkZCgib2Zmc2NyZWVu'@;
put 'LWZvY3VzLXJlYm91bmRlciIpLGN9Y2xhc3MgTE5le2NvbnN0cnVjdG9yKGMsYSxmLGQpe3RoaXMucmVuZGVyZXI9Yyx0aGlzLmFjdGl2ZT0hMSxIYShmKSYmKHRoaXMuX2RvY3VtZW50PWEuZ2V0KEZhKSksZC5mb2N1c1RyYXBJZHx8KGQuZm9jdXNUcmFwSWQ9ZnVuY3Rpb24geUFlKGw9Il8i'@;
put 'KXtyZXR1cm5gJHtsfSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsOSl9YH0oKSksdGhpcy5mb2N1c1RyYXBFbGVtZW50PWR9ZW5hYmxlRm9jdXNUcmFwKCl7Y29uc3QgYz10aGlzLmZvY3VzVHJhcEVsZW1lbnQsYT1jLnF1ZXJ5U2VsZWN0b3IoIltjZHMtZmlyc3QtZm9j'@;
put 'dXNdIiksZj10aGlzLl9kb2N1bWVudC5hY3RpdmVFbGVtZW50O2lmKFpELmdldEN1cnJlbnQoKT09PWMpdGhyb3cgbmV3IEVycm9yKCJGb2N1cyB0cmFwIGlzIGFscmVhZHkgZW5hYmxlZCBmb3IgdGhpcyBpbnN0YW5jZS4iKTt0aGlzLmZpcnN0Rm9jdXNFbGVtZW50PWF8fHRoaXMuZm9jdXNU'@;
put 'cmFwRWxlbWVudCxmdW5jdGlvbiBJTmUobCxjKXtpZihjJiYhYy50b3BSZWJvdW5kRWxlbWVudCYmIWMuYm90dG9tUmVib3VuZEVsZW1lbnQpe2MudG9wUmVib3VuZEVsZW1lbnQ9bHVlKGwpLGMuYm90dG9tUmVib3VuZEVsZW1lbnQ9bHVlKGwpO2NvbnN0IGE9Yy5wYXJlbnRFbGVtZW50LGY9'@;
put 'Yy5uZXh0U2libGluZzthJiYoYS5pbnNlcnRCZWZvcmUoYy50b3BSZWJvdW5kRWxlbWVudCxjKSxmP2EuaW5zZXJ0QmVmb3JlKGMuYm90dG9tUmVib3VuZEVsZW1lbnQsZik6YS5hcHBlbmRDaGlsZChjLmJvdHRvbVJlYm91bmRFbGVtZW50KSl9fSh0aGlzLl9kb2N1bWVudCxjKSxmdW5jdGlv'@;
put 'biBiT2UobCl7c3dpdGNoKGwudGFnTmFtZS50b0xvd2VyQ2FzZSgpKXtjYXNlImlucHV0IjpyZXR1cm4iaGlkZGVuIiE9PWwuZ2V0QXR0cmlidXRlKCJ0eXBlIikmJiFsLmhhc0F0dHJpYnV0ZSgiZGlzYWJsZWQiKSYmIWwuaGFzQXR0cmlidXRlKCJyZWFkb25seSIpO2Nhc2UiYnV0dG9uIjpj'@;
put 'YXNlInNlbGVjdCI6Y2FzZSJ0ZXh0YXJlYSI6cmV0dXJuIWwuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpO2Nhc2UiaWZyYW1lIjpjYXNlImVtYmVkIjpjYXNlIm9iamVjdCI6cmV0dXJuITA7Y2FzZSJhIjpjYXNlImFyZWEiOnJldHVybiBsLmhhc0F0dHJpYnV0ZSgiaHJlZiIpO2Nhc2UiYXVk'@;
put 'aW8iOmNhc2UidmlkZW8iOnJldHVybiBsLmhhc0F0dHJpYnV0ZSgiY29udHJvbHMiKTtkZWZhdWx0OnJldHVybiBsLmhhc0F0dHJpYnV0ZSgidGFiaW5kZXgiKXx8InRydWUiPT09bC5nZXRBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpfHwiYnV0dG9uIj09PWwuZ2V0QXR0cmlidXRlKCJy'@;
put 'b2xlIikmJiFsLmhhc0F0dHJpYnV0ZSgiZGlzYWJsZWQiKX19KGMpfHxjLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCItMSIpLGYmJmZ1bmN0aW9uIENPZShsKXtyZXR1cm4hIWwmJmwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudH0oZikmJih0aGlzLnByZXZpb3VzRm9jdXM9ZiksWkQuc2V0Q3Vy'@;
put 'cmVudChjKTtjb25zdCBkPXNldFRpbWVvdXQoKCk9Pnt0aGlzLmZpcnN0Rm9jdXNFbGVtZW50LmZvY3VzKCksY2xlYXJUaW1lb3V0KGQpfSwxMCk7dGhpcy5vbkZvY3VzSW5FdmVudD10aGlzLm9uRm9jdXNJbi5iaW5kKHRoaXMpLHRoaXMudW5saXN0ZW49dGhpcy5yZW5kZXJlci5saXN0ZW4o'@;
put 'dGhpcy5fZG9jdW1lbnQsImZvY3VzaW4iLHRoaXMub25Gb2N1c0luRXZlbnQpLHRoaXMuYWN0aXZlPSEwfXJlbW92ZUZvY3VzVHJhcCgpe3RoaXMudW5saXN0ZW4mJnRoaXMudW5saXN0ZW4oKSxmdW5jdGlvbiBSTmUobCl7aWYobCl7Y29uc3QgYz1sLnBhcmVudEVsZW1lbnQ7aWYoYyl7Y29u'@;
put 'c3QgYT1sLnRvcFJlYm91bmRFbGVtZW50LGY9bC5ib3R0b21SZWJvdW5kRWxlbWVudDthJiZjLnJlbW92ZUNoaWxkKGEpLGYmJmMucmVtb3ZlQ2hpbGQoZil9ZGVsZXRlIGwudG9wUmVib3VuZEVsZW1lbnQsZGVsZXRlIGwuYm90dG9tUmVib3VuZEVsZW1lbnR9fSh0aGlzLmZvY3VzVHJhcEVs'@;
put 'ZW1lbnQpLHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuZm9jdXNUcmFwRWxlbWVudCwidGFiaW5kZXgiKSxaRC5hY3RpdmF0ZVByZXZpb3VzQ3VycmVudCgpLHRoaXMuYWN0aXZlPSExLHRoaXMucHJldmlvdXNGb2N1cyYmdGhpcy5wcmV2aW91c0ZvY3VzLmZvY3VzKCl9b25G'@;
put 'b2N1c0luKGMpeyFmdW5jdGlvbiBPTmUobCxjLGEpe2NvbnN0IGY9WkQuZ2V0Q3VycmVudCgpPT09YyxkPWZ1bmN0aW9uIEROZShsLGMpe3JldHVybiBsPT09Yy50b3BSZWJvdW5kRWxlbWVudHx8bD09PWMuYm90dG9tUmVib3VuZEVsZW1lbnR8fCEoYy5jb250YWlucyhsKXx8bnVsbCE9PWMm'@;
put 'JmMuY29udGFpbnMobCkpfShsLGMpO2YmJmQ/KGE9YXx8YykuZm9jdXMoKTpsLmZvY3VzKCl9KGMuY29tcG9zZWRQYXRoKClbMF0sdGhpcy5mb2N1c1RyYXBFbGVtZW50LHRoaXMuZmlyc3RGb2N1c0VsZW1lbnQpfX1sZXQgc3VlPSgoKT0+e2NsYXNzIGwgZXh0ZW5kcyBMTmV7Y29uc3RydWN0'@;
put 'b3IoYSxmLGQsaCxtKXtzdXBlcihoLG0sYSxkLm5hdGl2ZUVsZW1lbnQpLHRoaXMucmVzcG9uc2l2ZU5hdlNlcnZpY2U9Zix0aGlzLmVsZW1lbnRSZWY9ZCx0aGlzLl9pc09wZW49ITEsSGEoYSkmJih0aGlzLl9kb2N1bWVudD1tLmdldChGYSkpLHRoaXMuX3N1YnNjcmlwdGlvbj1mLm5hdkNv'@;
put 'bnRyb2wucGlwZShJbChfPT5fLm5hdkxldmVsPT09dGhpcy5sZXZlbCksSWwoKHtjb250cm9sQ29kZTpffSk9Pl89PT10bC5OQVZfT1BFTiYmIXRoaXMuaXNPcGVufHxfPT09dGwuTkFWX0NMT1NFJiZ0aGlzLmlzT3BlbikpLnN1YnNjcmliZSgoe2NvbnRyb2xDb2RlOl99KT0+e18hPT10bC5O'@;
put 'QVZfT1BFTj90aGlzLmNsb3NlKCk6dGhpcy5vcGVuKCl9KSx0aGlzLl9zdWJzY3JpcHRpb24uYWRkKGYubmF2Q29udHJvbC5waXBlKElsKCh7Y29udHJvbENvZGU6X30pPT5fPT09dGwuTkFWX0NMT1NFX0FMTCkpLnN1YnNjcmliZSgoKT0+dGhpcy5jbG9zZSgpKSl9Z2V0IGxldmVsKCl7cmV0'@;
put 'dXJuIHRoaXMuX2xldmVsfWdldCByZXNwb25zaXZlTmF2Q29kZXMoKXtyZXR1cm4gdGx9Z2V0IGlzT3Blbigpe3JldHVybiB0aGlzLl9pc09wZW59bmdPbkluaXQoKXt0aGlzLmNsb3NlQnV0dG9uQXJpYUxhYmVsfHwodGhpcy5jbG9zZUJ1dHRvbkFyaWFMYWJlbD10aGlzLl9sZXZlbD09PXRs'@;
put 'Lk5BVl9MRVZFTF8xP21VLnJlc3BvbnNpdmVOYXZUb2dnbGVDbG9zZTptVS5yZXNwb25zaXZlTmF2T3ZlcmZsb3dDbG9zZSksdGhpcy5sZXZlbD09PXRsLk5BVl9MRVZFTF8xfHx0aGlzLmxldmVsPT09dGwuTkFWX0xFVkVMXzI/KHRoaXMucmVzcG9uc2l2ZU5hdlNlcnZpY2UucmVnaXN0ZXJO'@;
put 'YXYodGhpcy5sZXZlbCksdGhpcy5hZGROYXZDbGFzcyh0aGlzLmxldmVsKSk6Y29uc29sZS5lcnJvcigiTmF2IExldmVsIGNhbiBvbmx5IGJlIDEgb3IgMiIpfW5nQWZ0ZXJWaWV3SW5pdCgpe2NvbnN0IGE9KChsLGMpPT57Y29uc3QgYT10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJj'@;
put 'ZHMtaW50ZXJuYWwtY2xvc2UtYnV0dG9uIik7cmV0dXJuIGEuc2V0QXR0cmlidXRlKCJpY29uLXNpemUiLCIzMiIpLGEuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIixjKSxhLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIiksYS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJidXR0b24i'@;
put 'KSxhLnNldEF0dHJpYnV0ZSgiaGlkZGVuIiwidHJ1ZSIpLGEuY2xhc3NOYW1lPSJjbHItbmF2LWNsb3NlIixhfSkoMCx0aGlzLmNsb3NlQnV0dG9uQXJpYUxhYmVsKTt0aGlzLnJlbmRlcmVyLmxpc3RlbihhLCJjbGljayIsdGhpcy5jbG9zZS5iaW5kKHRoaXMpKSx0aGlzLnJlbmRlcmVyLmlu'@;
put 'c2VydEJlZm9yZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxhLHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZpcnN0Q2hpbGQpLHRoaXMuX2RvY3VtZW50LmJvZHkuY2xpZW50V2lkdGg8OTkyJiZ0aGlzLmNsb3NlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLnJlc3BvbnNpdmVO'@;
put 'YXZTZXJ2aWNlLnVucmVnaXN0ZXJOYXYodGhpcy5sZXZlbCksdGhpcy5fc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9b25SZXNpemUoYSl7YS50YXJnZXQuaW5uZXJXaWR0aDw5OTImJnRoaXMuaXNPcGVuP3RoaXMuY2xvc2UoKTp0aGlzLnNob3dOYXZpZ2F0aW9uKCl9b25Nb3VzZUNsaWNr'@;
put 'KGEpe2xldCBmPWE7Y29uc3QgZD10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtmb3IoO2Y7KXtpZihmPT09ZClyZXR1cm47aWYoZi5jbGFzc0xpc3QuY29udGFpbnMoIm5hdi1saW5rIikmJnRoaXMuX2RvY3VtZW50LmJvZHkuY2xpZW50V2lkdGg8OTkyKXJldHVybiB2b2lkIHRoaXMu'@;
put 'Y2xvc2UoKTtmPWYucGFyZW50Tm9kZX19YWRkTmF2Q2xhc3MoYSl7Y29uc3QgZj10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3Q7YT09PXRsLk5BVl9MRVZFTF8xP2YuYWRkKHRsLk5BVl9DTEFTU19MRVZFTF8xKTphPT09dGwuTkFWX0xFVkVMXzImJmYuYWRkKHRsLk5B'@;
put 'Vl9DTEFTU19MRVZFTF8yKX1vcGVuKCl7dGhpcy5faXNPcGVuPSEwLHRoaXMuc2hvd05hdmlnYXRpb24oKSx0aGlzLmVuYWJsZUZvY3VzVHJhcCgpLHRoaXMuc2hvd0Nsb3NlQnV0dG9uKCksdGhpcy5yZXNwb25zaXZlTmF2U2VydmljZS5zZW5kQ29udHJvbE1lc3NhZ2UodGwuTkFWX09QRU4s'@;
put 'dGhpcy5sZXZlbCl9Y2xvc2UoKXt0aGlzLl9pc09wZW49ITEsdGhpcy5oaWRlTmF2aWdhdGlvbigpLHRoaXMucmVtb3ZlRm9jdXNUcmFwKCksdGhpcy5oaWRlQ2xvc2VCdXR0b24oKSx0aGlzLnJlc3BvbnNpdmVOYXZTZXJ2aWNlLnNlbmRDb250cm9sTWVzc2FnZSh0bC5OQVZfQ0xPU0UsdGhp'@;
put 'cy5sZXZlbCl9aGlkZU5hdmlnYXRpb24oKXt0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwiYXJpYS1oaWRkZW4iLCJ0cnVlIiksdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsImhp'@;
put 'ZGRlbiIsInRydWUiKX1zaG93TmF2aWdhdGlvbigpe3RoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJhcmlhLWhpZGRlbiIsImZhbHNlIiksdGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVs'@;
put 'ZW1lbnQsImhpZGRlbiIpfWhpZGVDbG9zZUJ1dHRvbigpe3RoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJhcmlhLWhpZGRlbiIsInRydWUiKSx0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxl'@;
put 'bWVudC5xdWVyeVNlbGVjdG9yKCIuY2xyLW5hdi1jbG9zZSIpLCJoaWRkZW4iLCJ0cnVlIil9c2hvd0Nsb3NlQnV0dG9uKCl7dGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigiLmNsci1uYXYtY2xvc2UiKSwiYXJp'@;
put 'YS1oaWRkZW4iLCJmYWxzZSIpLHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5jbHItbmF2LWNsb3NlIiksImhpZGRlbiIpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhh'@;
put 'fHxsKShydChxYSkscnQoeUkpLHJ0KFZpKSxydChqbykscnQoQWwpKX0sbC5cdTAyNzVkaXI9U3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siIiwiY2xyLW5hdi1sZXZlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxmKXsxJmEmJkV0KCJyZXNpemUiLGZ1bmN0aW9uKGgpe3JldHVybiBm'@;
put 'Lm9uUmVzaXplKGgpfSwwLEc4KSgiY2xpY2siLGZ1bmN0aW9uKGgpe3JldHVybiBmLm9uTW91c2VDbGljayhoLnRhcmdldCl9KX0saW5wdXRzOntfbGV2ZWw6WyJjbHItbmF2LWxldmVsIiwiX2xldmVsIl0sY2xvc2VCdXR0b25BcmlhTGFiZWw6WyJjbG9zZUFyaWFMYWJlbCIsImNsb3NlQnV0'@;
put 'dG9uQXJpYUxhYmVsIl19LGZlYXR1cmVzOltyb119KSxsfSkoKSxGTmU9KCgpPT57Y2xhc3MgbHt9cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1bW9kPURpKHt0eXBlOmx9KSxsLlx1MDI3NWluaj14aSh7aW1wb3J0czpbW2JvLGxsLGNa'@;
put 'XV19KSxsfSkoKSx1dWU9KCgpPT57Y2xhc3MgbHt9cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1Y21wPWtyKHt0eXBlOmwsc2VsZWN0b3JzOltbIm5nLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxmKXtpZigxJmEmJk5v'@;
put 'KHpsLDUpLDImYSl7bGV0IGQ7dWkoZD1jaSgpKSYmKGYudGVtcGxhdGU9ZC5maXJzdCl9fSxuZ0NvbnRlbnRTZWxlY3RvcnM6T28sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxmKXsxJmEmJihUaSgpLHR0KDAsQlBlLDEsMCwibmctdGVtcGxhdGUiKSl9LGVuY2Fwc3VsYXRp'@;
put 'b246Mn0pLGx9KSgpLEhOZT0oKCk9PntjbGFzcyBse31yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVtb2Q9RGkoe3R5cGU6bH0pLGwuXHUwMjc1aW5qPXhpKHtpbXBvcnRzOltbYm9dXX0pLGx9KSgpLGw1PSgoKT0+e2NsYXNzIGwgZXh0'@;
put 'ZW5kcyBKdnt9cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IGM7cmV0dXJuIGZ1bmN0aW9uKGYpe3JldHVybihjfHwoYz14bChsKSkpKGZ8fGwpfX0oKSxsLlx1MDI3NWRpcj1Tcih7dHlwZTpsLHNlbGVjdG9yczpbWyJjbHItdGFicyJdXSxmZWF0dXJlczpbcm9dfSksbH0pKCks'@;
put 'QTc9KCgpPT57Y2xhc3MgbCBleHRlbmRzIFF2e2NvbnN0cnVjdG9yKGEsZixkLGgpe2lmKCFmKXRocm93IG5ldyBFcnJvcigiY2xyVGFiTGluayBhbmQgY2xyLXRhYi1jb250ZW50IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLXRhYnMiKTtzdXBlcihhLGYpLHRoaXMuaWZB'@;
put 'Y3RpdmU9aCx0aGlzLmlkPWR9Z2V0IGZsYXZvcigpe3JldHVybiB0aGlzLmlmQWN0aXZlLmN1cnJlbnQ9PT10aGlzLmlkfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChVbCkscnQobDUsOCkscnQocjcpLHJ0KFlnKSl9LGwuXHUwMjc1ZGlyPVNy'@;
put 'KHt0eXBlOmwsc2VsZWN0b3JzOltbIiIsImNsclRhYkxpbmsiLCIiXSxbImNsci10YWItY29udGVudCJdXSxmZWF0dXJlczpbcm9dfSksbH0pKCk7dmFyIHM1PWZ1bmN0aW9uKGwpe3JldHVybiBsLkhPUklaT05UQUw9Imhvcml6b250YWwiLGwuVkVSVElDQUw9InZlcnRpY2FsIixsfShzNXx8'@;
put 'e30pO2xldCBDUz0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKCl7dGhpcy5sYXlvdXQ9czUuSE9SSVpPTlRBTCx0aGlzLl9jaGlsZHJlbj1bXX1nZXQgY2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5fY2hpbGRyZW59Z2V0IGFjdGl2ZVRhYigpe3JldHVybiB0aGlzLmNoaWxkcmVuLmZpbmQoYT0+'@;
put 'YS5hY3RpdmUpfWdldCBvdmVyZmxvd1RhYnMoKXtyZXR1cm4gdGhpcy5sYXlvdXQ9PT1zNS5WRVJUSUNBTD9bXTp0aGlzLmNoaWxkcmVuLmZpbHRlcihhPT4hMD09PWEudGFiTGluay5pbk92ZXJmbG93KX1yZWdpc3RlcihhKXt0aGlzLl9jaGlsZHJlbi5wdXNoKGEpfXVucmVnaXN0ZXIoYSl7'@;
put 'Y29uc3QgZj10aGlzLmNoaWxkcmVuLmluZGV4T2YoYSk7Zj4tMSYmdGhpcy5jaGlsZHJlbi5zcGxpY2UoZiwxKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1cHJvdj1ocih7dG9rZW46bCxmYWN0b3J5OmwuXHUwMjc1ZmFjfSksbH0p'@;
put 'KCksTk5lPTAsdTU9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhLGYsZCl7dGhpcy5pZkFjdGl2ZVNlcnZpY2U9YSx0aGlzLmlkPWYsdGhpcy50YWJzU2VydmljZT1kLHRoaXMudGFiQ29udGVudElkfHwodGhpcy50YWJDb250ZW50SWQ9ImNsci10YWItY29udGVudC0iK05OZSsrKX1nZXQg'@;
put 'YWN0aXZlKCl7cmV0dXJuIHRoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ9PT10aGlzLmlkfWdldCBhcmlhTGFiZWxsZWRCeSgpe3JldHVybiB0aGlzLnRhYnNTZXJ2aWNlLmNoaWxkcmVuLmZpbmQoYT0+YS50YWJDb250ZW50PT09dGhpcyk/LnRhYkxpbms/LnRhYkxpbmtJZH1zZXQgdGVt'@;
put 'cGxhdGVSZWYoYSl7dGhpcy52aWV3UmVmPXRoaXMudGFic1NlcnZpY2UudGFiQ29udGVudFZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KGEpfW5nT25EZXN0cm95KCl7Y29uc3QgYT10aGlzLnRhYnNTZXJ2aWNlLnRhYkNvbnRlbnRWaWV3Q29udGFpbmVyLmluZGV4T2YodGhpcy52'@;
put 'aWV3UmVmKTthPi0xJiZ0aGlzLnRhYnNTZXJ2aWNlLnRhYkNvbnRlbnRWaWV3Q29udGFpbmVyLnJlbW92ZShhKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkocnQoWWcpLHJ0KHI3KSxydChDUykpfSxsLlx1MDI3NWNtcD1rcih7dHlwZTpsLHNlbGVj'@;
put 'dG9yczpbWyJjbHItdGFiLWNvbnRlbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZil7aWYoMSZhJiZObyhqUGUsNyksMiZhKXtsZXQgZDt1aShkPWNpKCkpJiYoZi50ZW1wbGF0ZVJlZj1kLmZpcnN0KX19LGlucHV0czp7dGFiQ29udGVudElkOlsiaWQiLCJ0YWJDb250ZW50SWQiXX0sbmdD'@;
put 'b250ZW50U2VsZWN0b3JzOk9vLGRlY2xzOjIsdmFyczowLGNvbnN0czpbWyJ0YWJDb250ZW50UHJvamVjdGVkUmVmIiwiIl0sWyJyb2xlIiwidGFicGFuZWwiLDEsInRhYi1jb250ZW50IiwzLCJpZCIsImhpZGRlbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGYpezEmYSYmKFRpKCksdHQoMCx6'@;
put 'UGUsMiw2LCJuZy10ZW1wbGF0ZSIsbnVsbCwwLEt1KSl9LGVuY2Fwc3VsYXRpb246Mn0pLGx9KSgpLFZOZT0wO2NvbnN0IGRaPW5ldyBNaSgiVEFCU19JRCIpLGpOZT17cHJvdmlkZTpkWix1c2VGYWN0b3J5OmZ1bmN0aW9uIEJOZSgpe3JldHVybiJjbHItdGFicy0iK1ZOZSsrfX07bGV0IHpO'@;
put 'ZT0wLGM1PSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmLGQsaCxtLF8sTyl7dGhpcy5pZkFjdGl2ZVNlcnZpY2U9YSx0aGlzLmlkPWYsdGhpcy5lbD1kLHRoaXMuY2ZyPWgsdGhpcy52aWV3Q29udGFpbmVyUmVmPW0sdGhpcy50YWJzU2VydmljZT1fLHRoaXMudGFic0lkPU8sdGhpcy50'@;
put 'YWJMaW5rSWR8fCh0aGlzLnRhYkxpbmtJZD0iY2xyLXRhYi1saW5rLSIrek5lKyspO2NvbnN0IFg9dGhpcy5jZnIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodXVlKTt0aGlzLnRlbXBsYXRlUmVmQ29udGFpbmVyPXRoaXMudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoWCx2b2lk'@;
put 'IDAsdm9pZCAwLFtbdGhpcy5lbC5uYXRpdmVFbGVtZW50XV0pLmluc3RhbmNlfWdldCBpbk92ZXJmbG93KCl7cmV0dXJuIHRoaXMuX2luT3ZlcmZsb3cmJnRoaXMudGFic1NlcnZpY2UubGF5b3V0IT09czUuVkVSVElDQUx9c2V0IGluT3ZlcmZsb3coYSl7dGhpcy5faW5PdmVyZmxvdz1hfWdl'@;
put 'dCBhZGRMaW5rQ2xhc3Nlcygpe3JldHVybiF0aGlzLmluT3ZlcmZsb3d9Z2V0IGFyaWFDb250cm9scygpe3JldHVybiB0aGlzLnRhYnNTZXJ2aWNlLmNoaWxkcmVuLmZpbmQoYT0+YS50YWJMaW5rPT09dGhpcyk/LnRhYkNvbnRlbnQ/LnRhYkNvbnRlbnRJZH1nZXQgYWN0aXZlKCl7cmV0dXJu'@;
put 'IHRoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ9PT10aGlzLmlkfWdldCB0YWJpbmRleCgpe3JldHVybiB0aGlzLmFjdGl2ZT8wOi0xfWFjdGl2YXRlKCl7dGhpcy5pZkFjdGl2ZVNlcnZpY2UuY3VycmVudD10aGlzLmlkfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJu'@;
put 'IG5ldyhhfHxsKShydChZZykscnQocjcpLHJ0KFZpKSxydChjMSkscnQoZmEpLHJ0KENTKSxydChkWikpfSxsLlx1MDI3NWRpcj1Tcih7dHlwZTpsLHNlbGVjdG9yczpbWyIiLCJjbHJUYWJMaW5rIiwiIl1dLGhvc3RBdHRyczpbInJvbGUiLCJ0YWIiLCJ0eXBlIiwiYnV0dG9uIl0saG9zdFZh'@;
put 'cnM6MTIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZil7MSZhJiZFdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGYuYWN0aXZhdGUoKX0pLDImYSYmKG0xKCJpZCIsZi50YWJMaW5rSWQpLFJyKCJhcmlhLWNvbnRyb2xzIixmLmFyaWFDb250cm9scykoImFyaWEtc2VsZWN0ZWQiLGYuYWN0'@;
put 'aXZlKSgidGFiaW5kZXgiLGYudGFiaW5kZXgpLGdyKCJidG4iLCEwKSgiYnRuLWxpbmsiLGYuYWRkTGlua0NsYXNzZXMpKCJuYXYtbGluayIsZi5hZGRMaW5rQ2xhc3NlcykoImFjdGl2ZSIsZi5hY3RpdmUpKX0saW5wdXRzOnt0YWJMaW5rSWQ6WyJpZCIsInRhYkxpbmtJZCJdLGluT3ZlcmZs'@;
put 'b3c6WyJjbHJUYWJMaW5rSW5PdmVyZmxvdyIsImluT3ZlcmZsb3ciXX19KSxsfSkoKSxmNT0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEsZixkKXt0aGlzLmlmQWN0aXZlU2VydmljZT1hLHRoaXMuaWQ9Zix0aGlzLnRhYnNTZXJ2aWNlPWQsZC5yZWdpc3Rlcih0aGlzKX1nZXQgYWN0aXZl'@;
put 'KCl7cmV0dXJuIHRoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ9PT10aGlzLmlkfW5nT25EZXN0cm95KCl7dGhpcy50YWJzU2VydmljZS51bnJlZ2lzdGVyKHRoaXMpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChZZykscnQocjcpLHJ0KENT'@;
put 'KSl9LGwuXHUwMjc1Y21wPWtyKHt0eXBlOmwsc2VsZWN0b3JzOltbImNsci10YWIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxmLGQpe2lmKDEmYSYmKEZvKGQsYzUsNyksRm8oZCx1NSw3KSksMiZhKXtsZXQgaDt1aShoPWNpKCkpJiYoZi50YWJMaW5rPWguZmlyc3QpLHVpKGg9Y2ko'@;
put 'KSkmJihmLnRhYkNvbnRlbnQ9aC5maXJzdCl9fSxmZWF0dXJlczpbcmkoW1lGZV0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6T28sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxmKXsxJmEmJihUaSgpLERyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksbH0pKCksaFo9KCgpPT57Y2xh'@;
put 'c3MgbHt9cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1Y21wPWtyKHt0eXBlOmwsc2VsZWN0b3JzOltbImNsci10YWItb3ZlcmZsb3ctY29udGVudCJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGYpezImYSYmZ3Io'@;
put 'ImRyb3Bkb3duLW1lbnUiLCEwKX0sbmdDb250ZW50U2VsZWN0b3JzOk9vLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZil7MSZhJiYoVGkoKSxEcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGx9KSgpLFQ3PSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmLGQsaCxtKXt0'@;
put 'aGlzLmlmQWN0aXZlU2VydmljZT1hLHRoaXMudG9nZ2xlU2VydmljZT1mLHRoaXMudGFic1NlcnZpY2U9ZCx0aGlzLnRhYnNJZD1oLHRoaXMuY29tbW9uU3RyaW5ncz1tLHRoaXMudGFiTGlua0VsZW1lbnRzPVtdLHRoaXMuX21vdXNlZG93bj0hMSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhp'@;
put 'cy5fdGFiTGlua0RpcmVjdGl2ZXM9W119Z2V0IGxheW91dCgpe3JldHVybiB0aGlzLnRhYnNTZXJ2aWNlLmxheW91dH1zZXQgbGF5b3V0KGEpe09iamVjdC5rZXlzKHM1KS5tYXAoZj0+czVbZl0pLmluZGV4T2YoYSk+PTAmJih0aGlzLnRhYnNTZXJ2aWNlLmxheW91dD1hKX1nZXQgdGFiTGlu'@;
put 'a0RpcmVjdGl2ZXMoKXtyZXR1cm4gdGhpcy5fdGFiTGlua0RpcmVjdGl2ZXN9Z2V0IGFjdGl2ZVRhYkluT3ZlcmZsb3coKXtyZXR1cm4gdGhpcy50YWJzU2VydmljZS5vdmVyZmxvd1RhYnMuaW5kZXhPZih0aGlzLnRhYnNTZXJ2aWNlLmFjdGl2ZVRhYik+LTF9Z2V0IGFjdGl2ZVRhYlBvc2l0'@;
put 'aW9uKCl7cmV0dXJuIHRoaXMuX3RhYkxpbmtEaXJlY3RpdmVzLmZpbmRJbmRleChhPT5hLmFjdGl2ZSl9Z2V0IGlzQ3VycmVudEluT3ZlcmZsb3coKXtyZXR1cm4gdGhpcy5rZXlGb2N1cy5jdXJyZW50Pj10aGlzLm92ZXJmbG93UG9zaXRpb259Z2V0IGlzVmVydGljYWwoKXtyZXR1cm4gdGhp'@;
put 'cy5sYXlvdXQ9PT1zNS5WRVJUSUNBTH1zZXQgdGFiT3ZlcmZsb3dFbChhKXt0aGlzLl90YWJPdmVyZmxvd0VsPWEmJmEubmF0aXZlRWxlbWVudCx0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbiYmYSYmdGhpcy5rZXlGb2N1cy5mb2N1c0N1cnJlbnQoKX1nZXQgb3ZlcmZsb3dQb3NpdGlvbigpe3Jl'@;
put 'dHVybiB0aGlzLl90YWJMaW5rRGlyZWN0aXZlcy5maWx0ZXIoYT0+IWEuaW5PdmVyZmxvdykubGVuZ3RofXNldCB0YWJDb250ZW50Vmlld0NvbnRhaW5lcihhKXt0aGlzLnRhYnNTZXJ2aWNlLnRhYkNvbnRlbnRWaWV3Q29udGFpbmVyPWF9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zdWJz'@;
put 'Y3JpcHRpb25zLnB1c2godGhpcy5saXN0ZW5Gb3JUYWJMaW5rQ2hhbmdlcygpKSx0eXBlb2YgdGhpcy5pZkFjdGl2ZVNlcnZpY2UuY3VycmVudD4idSImJnRoaXMudGFiTGlua0RpcmVjdGl2ZXNbMF0mJnRoaXMudGFiTGlua0RpcmVjdGl2ZXNbMF0uYWN0aXZhdGUoKSx0aGlzLmtleUZvY3Vz'@;
put 'LmN1cnJlbnQ9dGhpcy5hY3RpdmVUYWJQb3NpdGlvbn1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PnthLnVuc3Vic2NyaWJlKCl9KX10b2dnbGVPdmVyZmxvd09uUG9zaXRpb24oYSl7dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49YT49dGhpcy5vdmVyZmxvd1Bv'@;
put 'c2l0aW9ufXJlc2V0S2V5Rm9jdXNDdXJyZW50VG9BY3RpdmUoYSl7IXRoaXMua2V5Rm9jdXMubmF0aXZlRWxlbWVudC5jb250YWlucyhhLnJlbGF0ZWRUYXJnZXQpJiZ0aGlzLmtleUZvY3VzLmN1cnJlbnQhPT10aGlzLmFjdGl2ZVRhYlBvc2l0aW9uJiYodGhpcy5rZXlGb2N1cy5jdXJyZW50'@;
put 'PXRoaXMuYWN0aXZlVGFiUG9zaXRpb24pfXRvZ2dsZU92ZXJmbG93T25DbGljaygpe3RoaXMua2V5Rm9jdXMubW92ZVRvKHRoaXMuaXNDdXJyZW50SW5PdmVyZmxvdyYmdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4/dGhpcy5vdmVyZmxvd1Bvc2l0aW9uLTE6dGhpcy5vdmVyZmxvd1Bvc2l0aW9u'@;
put 'KSx0aGlzLl9tb3VzZWRvd249ITF9b3Blbk92ZXJmbG93T25Gb2N1cygpeyF0aGlzLl9tb3VzZWRvd24mJiF0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbiYmdGhpcy5rZXlGb2N1cy5tb3ZlVG8odGhpcy5hY3RpdmVUYWJQb3NpdGlvbil9Y2xvc2VPbkZvY3VzT3V0KGEpeyF0aGlzLl90YWJPdmVy'@;
put 'Zmxvd0VsLmNvbnRhaW5zKGEucmVsYXRlZFRhcmdldCkmJnRoaXMudG9nZ2xlU2VydmljZS5vcGVuJiYhdGhpcy5fbW91c2Vkb3duJiYodGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITEsdGhpcy50YWJMaW5rRWxlbWVudHNbdGhpcy5hY3RpdmVUYWJQb3NpdGlvbl09PT1hLnJlbGF0ZWRUYXJn'@;
put 'ZXQmJih0aGlzLmtleUZvY3VzLmN1cnJlbnQ9dGhpcy5hY3RpdmVUYWJQb3NpdGlvbikpfWNsb3NlT25Fc2NhcGVLZXkoKXt0aGlzLmtleUZvY3VzLm1vdmVUbyh0aGlzLm92ZXJmbG93UG9zaXRpb24tMSl9Y2xvc2VPbk91dHNpZGVDbGljayhhLGYpe2EudGFyZ2V0PT09Znx8Zi5jb250YWlu'@;
put 'cyhhLnRhcmdldCl8fCF0aGlzLl90YWJPdmVyZmxvd0VsLmNvbnRhaW5zKGEudGFyZ2V0KSYmdGhpcy5pc0N1cnJlbnRJbk92ZXJmbG93JiZ0aGlzLmtleUZvY3VzLm1vdmVUbyh0aGlzLm92ZXJmbG93UG9zaXRpb24tMSl9bGlzdGVuRm9yVGFiTGlua0NoYW5nZXMoKXtyZXR1cm4gdGhpcy50'@;
put 'YWJzLmNoYW5nZXMucGlwZSh0NCh0aGlzLnRhYnMubWFwKGE9PmEudGFiTGluaykpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl90YWJMaW5rRGlyZWN0aXZlcz10aGlzLnRhYnMubWFwKGE9PmEudGFiTGluayksdGhpcy50YWJMaW5rRWxlbWVudHM9dGhpcy5fdGFiTGlua0RpcmVjdGl2ZXMubWFw'@;
put 'KGE9PmEuZWwubmF0aXZlRWxlbWVudCl9KX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkocnQoWWcpLHJ0KFFhKSxydChDUykscnQoZFopLHJ0KFRhKSl9LGwuXHUwMjc1Y21wPWtyKHt0eXBlOmwsc2VsZWN0b3JzOltbImNsci10YWJzIl1dLGNvbnRl'@;
put 'bnRRdWVyaWVzOmZ1bmN0aW9uKGEsZixkKXtpZigxJmEmJkZvKGQsZjUsNCksMiZhKXtsZXQgaDt1aShoPWNpKCkpJiYoZi50YWJzPWgpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZil7aWYoMSZhJiYoTm8oczcsNyksTm8oaFosNSxWaSksTm8oVVBlLDcsZmEpKSwyJmEpe2xldCBkO3VpKGQ9'@;
put 'Y2koKSkmJihmLmtleUZvY3VzPWQuZmlyc3QpLHVpKGQ9Y2koKSkmJihmLnRhYk92ZXJmbG93RWw9ZC5maXJzdCksdWkoZD1jaSgpKSYmKGYudGFiQ29udGVudFZpZXdDb250YWluZXI9ZC5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGYpezImYSYmZ3IoInRh'@;
put 'YnMtdmVydGljYWwiLGYuaXNWZXJ0aWNhbCl9LGlucHV0czp7bGF5b3V0OlsiY2xyTGF5b3V0IiwibGF5b3V0Il19LGZlYXR1cmVzOltyaShbWWcsUWEsQ1Msak5lXSldLGRlY2xzOjUsdmFyczozLGNvbnN0czpbWyJyb2xlIiwidGFibGlzdCIsImNsckRpcmVjdGlvbiIsImJvdGgiLDEsIm5h'@;
put 'diIsMywiY2xyS2V5Rm9jdXMiLCJjbHJGb2N1c0NoYW5nZSIsImZvY3Vzb3V0Il0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFs0LCJuZ0lmIl0sWyJ0YWJDb250ZW50Vmlld0NvbnRhaW5lciIsIiJdLFsicm9sZSIsInByZXNlbnRhdGlvbiIsMSwibmF2LWl0ZW0iXSxbMywibmdUZW1wbGF0ZU91'@;
put 'dGxldCJdLFsicm9sZSIsInByZXNlbnRhdGlvbiIsMSwidGFicy1vdmVyZmxvdyIsImJvdHRvbS1yaWdodCJdLFsicm9sZSIsImFwcGxpY2F0aW9uIiwxLCJuYXYtaXRlbSJdLFsidHlwZSIsImJ1dHRvbiIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiYnRuIiwiYnRuLWxpbmsiLCJuYXYtbGlu'@;
put 'ayIsImRyb3Bkb3duLXRvZ2dsZSIsMywibW91c2Vkb3duIiwiZm9jdXMiLCJjbGljayJdLFsidGFiT3ZlcmZsb3dUcmlnZ2VyIiwiIl0sWyJzaGFwZSIsImVsbGlwc2lzLWhvcml6b250YWwiLCJzdGF0dXMiLCJ0b2dnbGVTZXJ2aWNlLm9wZW4gPyAnaW5mbycgOiBudWxsIl0sWzMsImtleWRv'@;
put 'd24uZXNjYXBlIiwiY2xpY2siLCJmb2N1c291dCIsNCwibmdJZiJdLFszLCJrZXlkb3duLmVzY2FwZSIsImNsaWNrIiwiZm9jdXNvdXQiXSxbMywibmdUZW1wbGF0ZU91dGxldCIsNCwibmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGYpezEmYSYmKHllKDAsInVsIiwwKSxFdCgiY2xyRm9j'@;
put 'dXNDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBmLnRvZ2dsZU92ZXJmbG93T25Qb3NpdGlvbihoKX0pKCJmb2N1c291dCIsZnVuY3Rpb24oaCl7cmV0dXJuIGYucmVzZXRLZXlGb2N1c0N1cnJlbnRUb0FjdGl2ZShoKX0pLHR0KDEsWVBlLDIsMSwibmctY29udGFpbmVyIiwxKSx0dCgyLEtQ'@;
put 'ZSw3LDEwLCJuZy1jb250YWluZXIiLDIpLENlKCksZXMoMyxudWxsLDMpKSwyJmEmJihSZSgiY2xyS2V5Rm9jdXMiLGYudGFiTGlua0VsZW1lbnRzKSxTZSgxKSxSZSgibmdGb3JPZiIsZi50YWJMaW5rRGlyZWN0aXZlcyksU2UoMSksUmUoIm5nSWYiLGYudGFic1NlcnZpY2Uub3ZlcmZsb3dU'@;
put 'YWJzLmxlbmd0aD4wKSl9LGRlcGVuZGVuY2llczpbczcsaFosUmEsJGkseWQsSmFdLGVuY2Fwc3VsYXRpb246Mn0pLGx9KSgpLFVOZT0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKCl7amEuYWRkSWNvbnMocW9lKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXco'@;
put 'YXx8bCl9LGwuXHUwMjc1bW9kPURpKHt0eXBlOmx9KSxsLlx1MDI3NWluaj14aSh7aW1wb3J0czpbW2JvLEFmLGxsLEhOZSxPVV0sQWZdfSksbH0pKCkscFo9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3Rvcigpe3RoaXMubmF2R3JvdXBDb3VudD0wfXJlZ2lzdGVyTmF2R3JvdXAoKXt0aGlzLm5h'@;
put 'dkdyb3VwQ291bnQrK311bnJlZ2lzdGVyTmF2R3JvdXAoKXt0aGlzLm5hdkdyb3VwQ291bnQtLX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1cHJvdj1ocih7dG9rZW46bCxmYWN0b3J5OmwuXHUwMjc1ZmFjfSksbH0pKCksbVo9KCgp'@;
put 'PT57Y2xhc3MgbHtjb25zdHJ1Y3Rvcigpe3RoaXMuX2ljb25zPTB9Z2V0IGhhc0ljb25zKCl7cmV0dXJuIHRoaXMuX2ljb25zPjB9cmVnaXN0ZXJJY29uKCl7dGhpcy5faWNvbnMrK311bnJlZ2lzdGVySWNvbigpe3RoaXMuX2ljb25zLS19fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihh'@;
put 'KXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmwsZmFjdG9yeTpsLlx1MDI3NWZhY30pLGx9KSgpLGdaPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoKXt0aGlzLl9hbmltYXRlT25Db2xsYXBzZWQ9bmV3IHdlLHRoaXMuX2NvbGxhcHNlZENoYW5nZWQ9bmV3IHdl'@;
put 'LHRoaXMuX2NvbGxhcHNlZD0hMSx0aGlzLl9jb2xsYXBzaWJsZT0hMX1nZXQgYW5pbWF0ZU9uQ29sbGFwc2VkKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGVPbkNvbGxhcHNlZC5hc09ic2VydmFibGUoKX1nZXQgY29sbGFwc2VkQ2hhbmdlZCgpe3JldHVybiB0aGlzLl9jb2xsYXBzZWRDaGFuZ2Vk'@;
put 'LmFzT2JzZXJ2YWJsZSgpfWdldCBjb2xsYXBzZWQoKXtyZXR1cm4gdGhpcy5fY29sbGFwc2VkfXNldCBjb2xsYXBzZWQoYSl7YT0hIWEsdGhpcy5jb2xsYXBzaWJsZSYmdGhpcy5fY29sbGFwc2VkIT09YSYmdGhpcy51cGRhdGVDb2xsYXBzZUJlaGF2aW9yKGEpfWdldCBjb2xsYXBzaWJsZSgp'@;
put 'e3JldHVybiB0aGlzLl9jb2xsYXBzaWJsZX1zZXQgY29sbGFwc2libGUoYSl7dGhpcy5fY29sbGFwc2libGUhPT0oYT0hIWEpJiYoIWEmJnRoaXMuY29sbGFwc2VkJiZ0aGlzLnVwZGF0ZUNvbGxhcHNlQmVoYXZpb3IoITEpLHRoaXMuX2NvbGxhcHNpYmxlPWEpfXVwZGF0ZUNvbGxhcHNlQmVo'@;
put 'YXZpb3IoYSl7dGhpcy5fYW5pbWF0ZU9uQ29sbGFwc2VkLm5leHQoYSksdGhpcy5fY29sbGFwc2VkPWEsdGhpcy5fY29sbGFwc2VkQ2hhbmdlZC5uZXh0KGEpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVwcm92PWhyKHt0b2tlbjps'@;
put 'LGZhY3Rvcnk6bC5cdTAyNzVmYWN9KSxsfSkoKSxjdWU9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhLGYsZCxoKXt0aGlzLl9uYXZTZXJ2aWNlPWEsdGhpcy5fbmF2SWNvblNlcnZpY2U9Zix0aGlzLl9uYXZHcm91cFJlZ2lzdHJhdGlvblNlcnZpY2U9ZCx0aGlzLmNvbW1vblN0cmluZ3M9'@;
put 'aCx0aGlzLl9jb2xsYXBzZWRDaGFuZ2VkPW5ldyB4cighMCksdGhpcy5fc3ViPXRoaXMuX25hdlNlcnZpY2UuY29sbGFwc2VkQ2hhbmdlZC5zdWJzY3JpYmUobT0+e3RoaXMuX2NvbGxhcHNlZENoYW5nZWQuZW1pdChtKX0pfWdldCBjb2xsYXBzaWJsZSgpe3JldHVybiB0aGlzLl9uYXZTZXJ2'@;
put 'aWNlLmNvbGxhcHNpYmxlfXNldCBjb2xsYXBzaWJsZShhKXt0aGlzLl9uYXZTZXJ2aWNlLmNvbGxhcHNpYmxlPWF9Z2V0IGNvbGxhcHNlZCgpe3JldHVybiB0aGlzLl9uYXZTZXJ2aWNlLmNvbGxhcHNlZH1zZXQgY29sbGFwc2VkKGEpe3RoaXMuX25hdlNlcnZpY2UuY29sbGFwc2VkPWF9Z2V0'@;
put 'IGhhc05hdkdyb3Vwcygpe3JldHVybiB0aGlzLl9uYXZHcm91cFJlZ2lzdHJhdGlvblNlcnZpY2UubmF2R3JvdXBDb3VudD4wfWdldCBoYXNJY29ucygpe3JldHVybiB0aGlzLl9uYXZJY29uU2VydmljZS5oYXNJY29uc31nZXQgYXJpYUV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuY29sbGFwc2li'@;
put 'bGU/dGhpcy5jb2xsYXBzZWQ/ImZhbHNlIjoidHJ1ZSI6bnVsbH1uZ09uRGVzdHJveSgpe3RoaXMuX3N1Yi51bnN1YnNjcmliZSgpfXRvZ2dsZUJ5QnV0dG9uKCl7dGhpcy5jb2xsYXBzZWQ9IXRoaXMuY29sbGFwc2VkfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5l'@;
put 'dyhhfHxsKShydChnWikscnQobVopLHJ0KHBaKSxydChUYSkpfSxsLlx1MDI3NWNtcD1rcih7dHlwZTpsLHNlbGVjdG9yczpbWyJjbHItdmVydGljYWwtbmF2Il1dLGhvc3RBdHRyczpbMSwiY2xyLXZlcnRpY2FsLW5hdiJdLGhvc3RWYXJzOjYsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZil7'@;
put 'MiZhJiZncigiaXMtY29sbGFwc2VkIixmLmNvbGxhcHNlZCkoImhhcy1uYXYtZ3JvdXBzIixmLmhhc05hdkdyb3VwcykoImhhcy1pY29ucyIsZi5oYXNJY29ucyl9LGlucHV0czp7Y29sbGFwc2libGU6WyJjbHJWZXJ0aWNhbE5hdkNvbGxhcHNpYmxlIiwiY29sbGFwc2libGUiXSxjb2xsYXBz'@;
put 'ZWQ6WyJjbHJWZXJ0aWNhbE5hdkNvbGxhcHNlZCIsImNvbGxhcHNlZCJdfSxvdXRwdXRzOntfY29sbGFwc2VkQ2hhbmdlZDoiY2xyVmVydGljYWxOYXZDb2xsYXBzZWRDaGFuZ2UifSxmZWF0dXJlczpbcmkoW2daLG1aLHBaXSldLG5nQ29udGVudFNlbGVjdG9yczpPbyxkZWNsczo0LHZhcnM6'@;
put 'Mixjb25zdHM6W1sidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwibmF2LXRyaWdnZXIiLDMsIm9uLWNvbGxhcHNlIiwiY2xpY2siLDQsIm5nSWYiXSxbMSwibmF2LWNvbnRlbnQiXSxbImNsYXNzIiwibmF2LWJ0biIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsInRhYmluZGV4IiwiLTEiLDMsImNsaWNr'@;
put 'Iiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJuYXYtdHJpZ2dlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUtZG91YmxlIiwxLCJuYXYtdHJpZ2dlci1pY29uIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJ0YWJpbmRleCIsIi0xIiwxLCJuYXYtYnRuIiwzLCJjbGljayJdXSx0'@;
put 'ZW1wbGF0ZTpmdW5jdGlvbihhLGYpezEmYSYmKFRpKCksdHQoMCxxUGUsMiw2LCJidXR0b24iLDApLHllKDEsImRpdiIsMSksRHIoMiksdHQoMyxYUGUsMSwxLCJidXR0b24iLDIpLENlKCkpLDImYSYmKFJlKCJuZ0lmIixmLmNvbGxhcHNpYmxlKSxTZSgzKSxSZSgibmdJZiIsZi5jb2xsYXBz'@;
put 'aWJsZSYmZi5jb2xsYXBzZWQpKX0sZGVwZW5kZW5jaWVzOlskaSxKYV0sZW5jYXBzdWxhdGlvbjoyfSksbH0pKCksdlo9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3Rvcigpe3RoaXMuX2V4cGFuZENoYW5nZT1uZXcgd2V9Z2V0IGV4cGFuZENoYW5nZSgpe3JldHVybiB0aGlzLl9leHBhbmRDaGFu'@;
put 'Z2UuYXNPYnNlcnZhYmxlKCl9ZXhwYW5kKCl7dGhpcy5fZXhwYW5kQ2hhbmdlLm5leHQoITApfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVwcm92PWhyKHt0b2tlbjpsLGZhY3Rvcnk6bC5cdTAyNzVmYWN9KSxsfSkoKSxmdWU9KCgp'@;
put 'PT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhLGYsZCl7dGhpcy5kZXN0cm95JD1uZXcgd2UsZCYmd2QoYS5uYXRpdmVFbGVtZW50LCJjbGljayIpLnBpcGUoQWgodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKT0+e2QuZXhwYW5kKCksZi5tYXJrRm9yQ2hlY2soKX0pfW5nT25EZXN0cm95KCl7'@;
put 'dGhpcy5kZXN0cm95JC5uZXh0KCl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHJ0KFZpKSxydChVbCkscnQodlosOCkpfSxsLlx1MDI3NWNtcD1rcih7dHlwZTpsLHNlbGVjdG9yczpbWyIiLCJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiXV0saG9zdEF0'@;
put 'dHJzOlsxLCJuYXYtbGluayJdLGF0dHJzOmVGZSxuZ0NvbnRlbnRTZWxlY3RvcnM6bkZlLGRlY2xzOjMsdmFyczowLGNvbnN0czpbWzEsIm5hdi10ZXh0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZil7MSZhJiYoVGkodEZlKSxEcigwKSx5ZSgxLCJzcGFuIiwwKSxEcigyLDEpLENlKCkpfSxl'@;
put 'bmNhcHN1bGF0aW9uOjJ9KSxsfSkoKSxHTmU9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3Rvcigpe2phLmFkZEljb25zKFp2LEpvZSl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NW1vZD1EaSh7dHlwZTpsfSksbC5cdTAyNzVpbmo9eGko'@;
put 'e2ltcG9ydHM6W1tibyxsbCxBZixXZ10sQWYsbGwsV2ddfSksbH0pKCksJE5lPSgoKT0+e2NsYXNzIGx7fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NW1vZD1EaSh7dHlwZTpsfSksbC5cdTAyNzVpbmo9eGkoe2ltcG9ydHM6W0VOZSxG'@;
put 'TmUsVU5lLEdOZV19KSxsfSkoKSxkdWU9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhKXt0aGlzLl9kb2N1bWVudD1hfXN0b3BTY3JvbGxpbmcoKXt0aGlzLl9kb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoIm5vLXNjcm9sbGluZyIpfXJlc3VtZVNjcm9sbGluZygpe3RoaXMuX2RvY3Vt'@;
put 'ZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCJuby1zY3JvbGxpbmciKSYmdGhpcy5fZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCJuby1zY3JvbGxpbmciKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkoc3IoRmEpKX0sbC5cdTAyNzVw'@;
put 'cm92PWhyKHt0b2tlbjpsLGZhY3Rvcnk6bC5cdTAyNzVmYWN9KSxsfSkoKSxNYz0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEsZil7dGhpcy5fc2Nyb2xsaW5nU2VydmljZT1hLHRoaXMuY29tbW9uU3RyaW5ncz1mLHRoaXMubW9kYWxJZD1IdSgpLHRoaXMuX29wZW49ITEsdGhpcy5fb3Bl'@;
put 'bkNoYW5nZWQ9bmV3IHhyKCExKSx0aGlzLmNsb3NhYmxlPSEwLHRoaXMuY2xvc2VCdXR0b25BcmlhTGFiZWw9dGhpcy5jb21tb25TdHJpbmdzLmtleXMuY2xvc2UsdGhpcy5zdGF0aWNCYWNrZHJvcD0hMCx0aGlzLnNraXBBbmltYXRpb249ImZhbHNlIix0aGlzLmJ5cGFzc1Njcm9sbFNlcnZp'@;
put 'Y2U9ITEsdGhpcy5zdG9wQ2xvc2U9ITEsdGhpcy5hbHRDbG9zZT1uZXcgeHIoITEpLHRoaXMubGFiZWxsZWRCeT10aGlzLm1vZGFsSWR9bmdPbkNoYW5nZXMoYSl7IXRoaXMuYnlwYXNzU2Nyb2xsU2VydmljZSYmYSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsIl9v'@;
put 'cGVuIikmJihhLl9vcGVuLmN1cnJlbnRWYWx1ZT90aGlzLl9zY3JvbGxpbmdTZXJ2aWNlLnN0b3BTY3JvbGxpbmcoKTp0aGlzLl9zY3JvbGxpbmdTZXJ2aWNlLnJlc3VtZVNjcm9sbGluZygpKX1uZ09uRGVzdHJveSgpe3RoaXMuX3Njcm9sbGluZ1NlcnZpY2UucmVzdW1lU2Nyb2xsaW5nKCl9'@;
put 'b3Blbigpe3RoaXMuX29wZW58fCh0aGlzLl9vcGVuPSEwLHRoaXMuX29wZW5DaGFuZ2VkLmVtaXQoITApKX1jbG9zZSgpe3RoaXMuc3RvcENsb3NlP3RoaXMuYWx0Q2xvc2UuZW1pdCghMSk6IXRoaXMuY2xvc2FibGV8fCF0aGlzLl9vcGVufHwodGhpcy5fb3Blbj0hMSx0aGlzLmZvY3VzVHJh'@;
put 'cC5zZXRQcmV2aW91c0ZvY3VzKCkpfWZhZGVEb25lKGEpeyJ2b2lkIj09PWEudG9TdGF0ZSYmdGhpcy5fb3BlbkNoYW5nZWQuZW1pdCghMSl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHJ0KGR1ZSkscnQoVGEpKX0sbC5cdTAyNzVjbXA9a3Ioe3R5'@;
put 'cGU6bCxzZWxlY3RvcnM6W1siY2xyLW1vZGFsIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGYpe2lmKDEmYSYmTm8oZzQsNSksMiZhKXtsZXQgZDt1aShkPWNpKCkpJiYoZi5mb2N1c1RyYXA9ZC5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGYpezEmYSYmRXQo'@;
put 'ImtleXVwLmVzY2FwZSIsZnVuY3Rpb24oKXtyZXR1cm4gZi5jbG9zZSgpfSwwLHN3KSwyJmEmJmdyKCJvcGVuIixmLl9vcGVuKX0saW5wdXRzOntfb3BlbjpbImNsck1vZGFsT3BlbiIsIl9vcGVuIl0sY2xvc2FibGU6WyJjbHJNb2RhbENsb3NhYmxlIiwiY2xvc2FibGUiXSxjbG9zZUJ1dHRv'@;
put 'bkFyaWFMYWJlbDpbImNsck1vZGFsQ2xvc2VCdXR0b25BcmlhTGFiZWwiLCJjbG9zZUJ1dHRvbkFyaWFMYWJlbCJdLHNpemU6WyJjbHJNb2RhbFNpemUiLCJzaXplIl0sc3RhdGljQmFja2Ryb3A6WyJjbHJNb2RhbFN0YXRpY0JhY2tkcm9wIiwic3RhdGljQmFja2Ryb3AiXSxza2lwQW5pbWF0'@;
put 'aW9uOlsiY2xyTW9kYWxTa2lwQW5pbWF0aW9uIiwic2tpcEFuaW1hdGlvbiJdLGJ5cGFzc1Njcm9sbFNlcnZpY2U6WyJjbHJNb2RhbE92ZXJyaWRlU2Nyb2xsU2VydmljZSIsImJ5cGFzc1Njcm9sbFNlcnZpY2UiXSxzdG9wQ2xvc2U6WyJjbHJNb2RhbFByZXZlbnRDbG9zZSIsInN0b3BDbG9z'@;
put 'ZSJdLGxhYmVsbGVkQnk6WyJjbHJNb2RhbExhYmVsbGVkQnlJZCIsImxhYmVsbGVkQnkiXX0sb3V0cHV0czp7X29wZW5DaGFuZ2VkOiJjbHJNb2RhbE9wZW5DaGFuZ2UiLGFsdENsb3NlOiJjbHJNb2RhbEFsdGVybmF0ZUNsb3NlIn0sZmVhdHVyZXM6W3JpKFtdLFtkdWVdKSxibF0sbmdDb250'@;
put 'ZW50U2VsZWN0b3JzOmFGZSxkZWNsczoxLHZhcnM6MSxjb25zdHM6W1siY2xyRm9jdXNUcmFwIiwiIiwiY2xhc3MiLCJtb2RhbCIsNCwibmdJZiJdLFsiY2xyRm9jdXNUcmFwIiwiIiwxLCJtb2RhbCJdLFsicm9sZSIsImRpYWxvZyIsImFyaWEtbW9kYWwiLCJ0cnVlIiwxLCJtb2RhbC1kaWFs'@;
put 'b2ciXSxbMSwiY2xyLXNyLW9ubHkiXSxbMSwibW9kYWwtY29udGVudC13cmFwcGVyIl0sWzEsIm1vZGFsLWNvbnRlbnQiXSxbMSwibW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIl0sWyJjbHJGb2N1c09uVmlld0luaXQiLCIiLDEsIm1vZGFsLXRpdGxlLXdyYXBwZXIiLDMsImlkIl0sWyJ0eXBl'@;
put 'IiwiYnV0dG9uIiwiY2xhc3MiLCJjbG9zZSIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwibW9kYWwtYm9keS13cmFwcGVyIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1vZGFsLWJhY2tkcm9wIiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2xvc2UiLDMsImNsaWNrIl0sWyJz'@;
put 'aGFwZSIsIndpbmRvdy1jbG9zZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGYpezEmYSYmKFRpKG9GZSksdHQoMCxpRmUsMTcsMTQsImRpdiIsMCkpLDImYSYmUmUoIm5nSWYiLGYuX29wZW4pfSxkZXBlbmRlbmNpZXM6WyRpLGc0LGtVLEphXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rp'@;
put 'c3BsYXk6bm9uZX0ub3Blbltfbmdob3N0LSVDT01QJV17ZGlzcGxheTppbmxpbmV9Il0sZGF0YTp7YW5pbWF0aW9uOltDMSgiZmFkZURvd24iLFtidSgiKiA9PiBmYWxzZSIsW0NhKHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoMCwgLTI1JSkifSksY2MoIjAuMnMgZWFzZS1pbi1v'@;
put 'dXQiKV0pLGJ1KCJmYWxzZSA9PiAqIixbY2MoIjAuMnMgZWFzZS1pbi1vdXQiLENhKHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoMCwgLTI1JSkifSkpXSldKSxDMSgiZmFkZSIsW2J1KCJ2b2lkID0+ICoiLFtDYSh7b3BhY2l0eTowfSksY2MoIjAuMnMgZWFzZS1pbi1vdXQiLENh'@;
put 'KHtvcGFjaXR5Oi44NX0pKV0pLGJ1KCIqID0+IHZvaWQiLFtjYygiMC4ycyBlYXNlLWluLW91dCIsQ2Eoe29wYWNpdHk6MH0pKV0pXSldfX0pLGx9KSgpLGtjPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmLGQpe3RoaXMucmVuZGVyZXI9YSx0aGlzLmhvc3Q9Zix0aGlzLnRhYmluZGV4'@;
put 'PSIwIix0aGlzLnVubGlzdGVuZXJzPVtdLGQucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLm9ic2VydmVyPW5ldyBSZXNpemVPYnNlcnZlcigoKT0+dGhpcy5hZGRPclJlbW92ZVRhYkluZGV4KCkpLHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmhvc3QubmF0aXZlRWxlbWVudCksdGhp'@;
put 'cy51bmxpc3RlbmVycy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LCJtb3VzZXVwIiwoKT0+e3RoaXMuYWRkT3JSZW1vdmVUYWJJbmRleCgpfSksdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQsIm1vdXNlZG93biIs'@;
put 'KCk9Pnt0aGlzLnJlbW92ZVRhYkluZGV4KCl9KSl9KX1uZ09uRGVzdHJveSgpe2Zvcig7dGhpcy51bmxpc3RlbmVycy5sZW5ndGg7KXRoaXMudW5saXN0ZW5lcnMucG9wKCkoKTt0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKSx0aGlzLm9ic2VydmVyPW51bGx9YWRkVGFiSW5kZXgoKXt0aGlz'@;
put 'LnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmhvc3QubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiLHRoaXMudGFiaW5kZXgpfXJlbW92ZVRhYkluZGV4KCl7dGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQsInRhYmluZGV4Iil9YWRkT3JSZW1v'@;
put 'dmVUYWJJbmRleCgpe2NvbnN0IGE9dGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDthJiZhLmNsaWVudEhlaWdodDxhLnNjcm9sbEhlaWdodD90aGlzLmFkZFRhYkluZGV4KCk6dGhpcy5yZW1vdmVUYWJJbmRleCgpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7'@;
put 'cmV0dXJuIG5ldyhhfHxsKShydChqbykscnQoVmkpLHJ0KFVvKSl9LGwuXHUwMjc1ZGlyPVNyKHt0eXBlOmwsc2VsZWN0b3JzOltbIiIsOCwibW9kYWwtYm9keSJdXX0pLGx9KSgpLGh1ZT0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKCl7amEuYWRkSWNvbnMoTkMpfX1yZXR1cm4gbC5cdTAy'@;
put 'NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVtb2Q9RGkoe3R5cGU6bH0pLGwuXHUwMjc1aW5qPXhpKHtpbXBvcnRzOltbYm8sbGwsSkQsV2ddLGxsLFdnXX0pLGx9KSgpO2NvbnN0IEtOZT17InRvcC1sZWZ0Ijp7YW5jaG9yUG9pbnQ6S3IuVE9QX0NFTlRFUixw'@;
put 'b3BvdmVyUG9pbnQ6S3IuQk9UVE9NX1JJR0hULG9mZnNldFk6LTEwLG9mZnNldFg6MH0sInRvcC1taWRkbGUiOnthbmNob3JQb2ludDpLci5UT1BfQ0VOVEVSLHBvcG92ZXJQb2ludDpLci5CT1RUT01fQ0VOVEVSLG9mZnNldFk6LTEwLG9mZnNldFg6MH0sInRvcC1yaWdodCI6e2FuY2hvclBv'@;
put 'aW50OktyLlRPUF9DRU5URVIscG9wb3ZlclBvaW50OktyLkJPVFRPTV9MRUZULG9mZnNldFk6LTEwLG9mZnNldFg6MH0sInJpZ2h0LXRvcCI6e2FuY2hvclBvaW50OktyLlJJR0hUX0NFTlRFUixwb3BvdmVyUG9pbnQ6S3IuTEVGVF9CT1RUT00sb2Zmc2V0WToyLG9mZnNldFg6MTR9LCJyaWdo'@;
put 'dC1taWRkbGUiOnthbmNob3JQb2ludDpLci5SSUdIVF9DRU5URVIscG9wb3ZlclBvaW50OktyLkxFRlRfQ0VOVEVSLG9mZnNldFk6NixvZmZzZXRYOjE0fSwicmlnaHQtYm90dG9tIjp7YW5jaG9yUG9pbnQ6S3IuUklHSFRfQ0VOVEVSLHBvcG92ZXJQb2ludDpLci5MRUZUX1RPUCxvZmZzZXRZ'@;
put 'Oi0xLG9mZnNldFg6MTR9LCJib3R0b20tcmlnaHQiOnthbmNob3JQb2ludDpLci5CT1RUT01fQ0VOVEVSLHBvcG92ZXJQb2ludDpLci5UT1BfTEVGVCxvZmZzZXRZOjksb2Zmc2V0WDotMX0sImJvdHRvbS1taWRkbGUiOnthbmNob3JQb2ludDpLci5CT1RUT01fQ0VOVEVSLHBvcG92ZXJQb2lu'@;
put 'dDpLci5UT1BfQ0VOVEVSLG9mZnNldFk6OSxvZmZzZXRYOjEyfSwiYm90dG9tLWxlZnQiOnthbmNob3JQb2ludDpLci5CT1RUT01fQ0VOVEVSLHBvcG92ZXJQb2ludDpLci5UT1BfUklHSFQsb2Zmc2V0WTo5LG9mZnNldFg6MH0sImxlZnQtYm90dG9tIjp7YW5jaG9yUG9pbnQ6S3IuTEVGVF9D'@;
put 'RU5URVIscG9wb3ZlclBvaW50OktyLlJJR0hUX1RPUCxvZmZzZXRZOjAsb2Zmc2V0WDotMTR9LCJsZWZ0LW1pZGRsZSI6e2FuY2hvclBvaW50OktyLkxFRlRfQ0VOVEVSLHBvcG92ZXJQb2ludDpLci5SSUdIVF9DRU5URVIsb2Zmc2V0WTo0LG9mZnNldFg6LTE0fSwibGVmdC10b3AiOnthbmNo'@;
put 'b3JQb2ludDpLci5MRUZUX0NFTlRFUixwb3BvdmVyUG9pbnQ6S3IuUklHSFRfQk9UVE9NLG9mZnNldFk6MCxvZmZzZXRYOi0xNH0sZGVmYXVsdDp7YW5jaG9yUG9pbnQ6S3IuUklHSFRfQ0VOVEVSLHBvcG92ZXJQb2ludDpLci5MRUZUX0NFTlRFUixvZmZzZXRZOjYsb2Zmc2V0WDoxNH19LHFO'@;
put 'ZT1bInRvcC1sZWZ0IiwidG9wLW1pZGRsZSIsInRvcC1yaWdodCIsInJpZ2h0LXRvcCIsInJpZ2h0LW1pZGRsZSIsInJpZ2h0LWJvdHRvbSIsImJvdHRvbS1yaWdodCIsImJvdHRvbS1taWRkbGUiLCJib3R0b20tbGVmdCIsImxlZnQtYm90dG9tIiwibGVmdC1taWRkbGUiLCJsZWZ0LXRvcCJd'@;
put 'O2xldCBwdWU9KCgpPT57Y2xhc3MgbCBleHRlbmRzIHVae2NvbnN0cnVjdG9yKGEsZixkLGgsbSxfLE8pe2lmKHN1cGVyKGEsZiksdGhpcy5jb21tb25TdHJpbmdzPWQsdGhpcy5zaWducG9zdElkU2VydmljZT1oLHRoaXMuc2lnbnBvc3RGb2N1c01hbmFnZXI9bSx0aGlzLnBsYXRmb3JtSWQ9'@;
put 'Xyx0aGlzLnNpZ25wb3N0Q29udGVudElkPUh1KCksIWYpdGhyb3cgbmV3IEVycm9yKCJjbHItc2lnbnBvc3QtY29udGVudCBzaG91bGQgb25seSBiZSB1c2VkIGluc2lkZSBvZiBhIGNsci1zaWducG9zdCIpO3RoaXMucG9zaXRpb249InJpZ2h0LW1pZGRsZSIsdGhpcy5jbG9zZU9uT3V0c2lk'@;
put 'ZUNsaWNrPSEwLHRoaXMuc2lnbnBvc3RJZFNlcnZpY2Uuc2V0SWQodGhpcy5zaWducG9zdENvbnRlbnRJZCksdGhpcy5kb2N1bWVudD1PfWdldCBwb3NpdGlvbigpe3JldHVybiB0aGlzLl9wb3NpdGlvbn1zZXQgcG9zaXRpb24oYSl7dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVs'@;
put 'Lm5hdGl2ZUVsZW1lbnQsdGhpcy5wb3NpdGlvbiksdGhpcy5fcG9zaXRpb249YSYmcU5lLmluZGV4T2YoYSk+LTE/YToicmlnaHQtbWlkZGxlIix0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCx0aGlzLnBvc2l0aW9uKTtjb25zdCBmPUtOZVt0aGlzLnBvc2l0'@;
put 'aW9uXTt0aGlzLmFuY2hvclBvaW50PWYuYW5jaG9yUG9pbnQsdGhpcy5wb3BvdmVyUG9pbnQ9Zi5wb3BvdmVyUG9pbnQsdGhpcy5wb3BvdmVyT3B0aW9ucy5vZmZzZXRZPWYub2Zmc2V0WSx0aGlzLnBvcG92ZXJPcHRpb25zLm9mZnNldFg9Zi5vZmZzZXRYfWNsb3NlKCl7dGhpcy50b2dnbGVT'@;
put 'ZXJ2aWNlLm9wZW49ITF9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLEhhKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMuZWwubmF0aXZlRWxlbWVudC5jb250YWlucyh0aGlzLmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpJiZ0aGlzLnNpZ25wb3N0Rm9jdXNNYW5hZ2VyLmZvY3VzVHJp'@;
put 'Z2dlcigpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChBbCkscnQodTcsOCkscnQoVGEpLHJ0KEtVKSxydCgkVSkscnQocWEpLHJ0KEZhKSl9LGwuXHUwMjc1Y21wPWtyKHt0eXBlOmwsc2VsZWN0b3JzOltbImNsci1zaWducG9zdC1jb250ZW50'@;
put 'Il1dLGhvc3RWYXJzOjMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZil7MiZhJiYobTEoImlkIixmLnNpZ25wb3N0Q29udGVudElkKSxncigic2lnbnBvc3QtY29udGVudCIsITApKX0saW5wdXRzOntwb3NpdGlvbjpbImNsclBvc2l0aW9uIiwicG9zaXRpb24iXX0sZmVhdHVyZXM6W3JvXSxu'@;
put 'Z0NvbnRlbnRTZWxlY3RvcnM6T28sZGVjbHM6Nyx2YXJzOjMsY29uc3RzOltbMSwic2lnbnBvc3Qtd3JhcCJdLFsxLCJwb3BvdmVyLXBvaW50ZXIiXSxbMSwic2lnbnBvc3QtY29udGVudC1oZWFkZXIiXSxbInR5cGUiLCJidXR0b24iLDEsInNpZ25wb3N0LWFjdGlvbiIsImNsb3NlIiwzLCJj'@;
put 'bGljayJdLFsic2hhcGUiLCJ3aW5kb3ctY2xvc2UiXSxbMSwic2lnbnBvc3QtY29udGVudC1ib2R5Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZil7MSZhJiYoVGkoKSx5ZSgwLCJkaXYiLDApLHRuKDEsImRpdiIsMSkseWUoMiwiZGl2IiwyKSgzLCJidXR0b24iLDMpLEV0KCJjbGljayIsZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gZi5jbG9zZSgpfSksdG4oNCwiY2RzLWljb24iLDQpLENlKCkoKSx5ZSg1LCJkaXYiLDUpLERyKDYpLENlKCkoKSksMiZhJiYoU2UoMyksUnIoImFyaWEtbGFiZWwiLGYuY29tbW9uU3RyaW5ncy5rZXlzLnNpZ25wb3N0Q2xvc2UpKCJhcmlhLWNvbnRyb2xzIixmLnNp'@;
put 'Z25wb3N0Q29udGVudElkKSxTZSgxKSxScigidGl0bGUiLGYuY29tbW9uU3RyaW5ncy5rZXlzLmNsb3NlKSl9LGRlcGVuZGVuY2llczpbSmFdLGVuY2Fwc3VsYXRpb246Mn0pLGx9KSgpLFhOZT0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKCl7amEuYWRkSWNvbnMoTkMsUW9lKX19cmV0dXJu'@;
put 'IGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1bW9kPURpKHt0eXBlOmx9KSxsLlx1MDI3NWluaj14aSh7aW1wb3J0czpbW2JvLGxsLFdnXSxBZl19KSxsfSkoKSx5Wj0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKCl7dGhpcy5faWQ9bmV3IHdlfWdl'@;
put 'dCBpZCgpe3JldHVybiB0aGlzLl9pZC5hc09ic2VydmFibGUoKX11cGRhdGVJZChhKXt0aGlzLl9pZC5uZXh0KGEpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVwcm92PWhyKHt0b2tlbjpsLGZhY3Rvcnk6bC5cdTAyNzVmYWN9KSxs'@;
put 'fSkoKSxiWj0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEpe3RoaXMudG9nZ2xlU2VydmljZT1hfW9uTW91c2VFbnRlclRyaWdnZXIoKXt0aGlzLm1vdXNlT3ZlclRyaWdnZXI9ITAsdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITB9b25Nb3VzZUxlYXZlVHJpZ2dlcigpe3RoaXMubW91c2VP'@;
put 'dmVyVHJpZ2dlcj0hMSx0aGlzLmhpZGVJZk1vdXNlT3V0KCl9b25Nb3VzZUVudGVyQ29udGVudCgpe3RoaXMubW91c2VPdmVyQ29udGVudD0hMH1vbk1vdXNlTGVhdmVDb250ZW50KCl7dGhpcy5tb3VzZU92ZXJDb250ZW50PSExLHRoaXMuaGlkZUlmTW91c2VPdXQoKX1oaWRlSWZNb3VzZU91'@;
put 'dCgpe3NldFRpbWVvdXQoKCk9PnshdGhpcy5tb3VzZU92ZXJUcmlnZ2VyJiYhdGhpcy5tb3VzZU92ZXJDb250ZW50JiYodGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITEpfSwwKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkoc3IoUWEpKX0sbC5cdTAy'@;
put 'NzVwcm92PWhyKHt0b2tlbjpsLGZhY3Rvcnk6bC5cdTAyNzVmYWN9KSxsfSkoKSxNUz0oKCk9PntjbGFzcyBse31yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVjbXA9a3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siY2xyLXRvb2x0aXAiXV0s'@;
put 'aG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxmKXsyJmEmJmdyKCJ0b29sdGlwIiwhMCl9LGZlYXR1cmVzOltyaShbUWEse3Byb3ZpZGU6dTcsdXNlRXhpc3Rpbmc6Vml9LHlaLGJaXSldLG5nQ29udGVudFNlbGVjdG9yczpPbyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5j'@;
put 'dGlvbihhLGYpezEmYSYmKFRpKCksRHIoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxsfSkoKTtjb25zdCBRTmU9WyJib3R0b20tbGVmdCIsImJvdHRvbS1yaWdodCIsInRvcC1sZWZ0IiwidG9wLXJpZ2h0IiwicmlnaHQiLCJsZWZ0Il0sZVZlPVsieHMiLCJzbSIsIm1kIiwibGciXTtsZXQga1M9'@;
put 'KCgpPT57Y2xhc3MgbCBleHRlbmRzIHVae2NvbnN0cnVjdG9yKGEsZixkLGgpe2lmKHN1cGVyKGEsZiksdGhpcy50b29sdGlwSWRTZXJ2aWNlPWQsdGhpcy50b29sdGlwTW91c2VTZXJ2aWNlPWgsIWYpdGhyb3cgbmV3IEVycm9yKCJjbHItdG9vbHRpcC1jb250ZW50IHNob3VsZCBvbmx5IGJl'@;
put 'IHVzZWQgaW5zaWRlIG9mIGEgY2xyLXRvb2x0aXAiKTt0aGlzLmlkPUh1KCl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBpZChhKXtjb25zdCBmPWF8fCIiO3RoaXMuX2lkPWYsdGhpcy50b29sdGlwSWRTZXJ2aWNlLnVwZGF0ZUlkKGYpfWdldCBwb3NpdGlvbigpe3JldHVybiB0aGlz'@;
put 'Ll9wb3NpdGlvbn1zZXQgcG9zaXRpb24oYSl7Y29uc3QgZj10aGlzLl9wb3NpdGlvbixkPVFOZS5pbmNsdWRlcyhhKT9hOiJyaWdodCI7c3dpdGNoKHRoaXMuX3Bvc2l0aW9uPWQsdGhpcy51cGRhdGVDc3NDbGFzcyh7b2xkQ2xhc3M6YHRvb2x0aXAtJHtmfWAsbmV3Q2xhc3M6YHRvb2x0aXAt'@;
put 'JHtkfWB9KSxkKXtjYXNlInRvcC1yaWdodCI6dGhpcy5hbmNob3JQb2ludD1Lci5UT1BfQ0VOVEVSLHRoaXMucG9wb3ZlclBvaW50PUtyLkxFRlRfQk9UVE9NO2JyZWFrO2Nhc2UidG9wLWxlZnQiOnRoaXMuYW5jaG9yUG9pbnQ9S3IuVE9QX0NFTlRFUix0aGlzLnBvcG92ZXJQb2ludD1Lci5S'@;
put 'SUdIVF9CT1RUT007YnJlYWs7Y2FzZSJib3R0b20tcmlnaHQiOnRoaXMuYW5jaG9yUG9pbnQ9S3IuQk9UVE9NX0NFTlRFUix0aGlzLnBvcG92ZXJQb2ludD1Lci5MRUZUX1RPUDticmVhaztjYXNlImJvdHRvbS1sZWZ0Ijp0aGlzLmFuY2hvclBvaW50PUtyLkJPVFRPTV9DRU5URVIsdGhpcy5w'@;
put 'b3BvdmVyUG9pbnQ9S3IuUklHSFRfVE9QO2JyZWFrO2Nhc2UicmlnaHQiOnRoaXMuYW5jaG9yUG9pbnQ9S3IuUklHSFRfQ0VOVEVSLHRoaXMucG9wb3ZlclBvaW50PUtyLkxFRlRfVE9QO2JyZWFrO2Nhc2UibGVmdCI6dGhpcy5hbmNob3JQb2ludD1Lci5MRUZUX0NFTlRFUix0aGlzLnBvcG92'@;
put 'ZXJQb2ludD1Lci5SSUdIVF9UT1A7YnJlYWs7ZGVmYXVsdDohZnVuY3Rpb24gSk5lKGwpe3Rocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIHZhbHVlOiAke2x9YCl9KGQpfX1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLl9zaXplfXNldCBzaXplKGEpe2NvbnN0IGY9dGhpcy5fc2l6ZSxkPWVWZS5p'@;
put 'bmNsdWRlcyhhKT9hOiJzbSI7dGhpcy5fc2l6ZT1kLHRoaXMudXBkYXRlQ3NzQ2xhc3Moe29sZENsYXNzOmB0b29sdGlwLSR7Zn1gLG5ld0NsYXNzOmB0b29sdGlwLSR7ZH1gfSl9bmdPbkluaXQoKXt0aGlzLnNpemU9dGhpcy5zaXplfHwic20iLHRoaXMucG9zaXRpb249dGhpcy5wb3NpdGlv'@;
put 'bnx8InJpZ2h0In1vbk1vdXNlRW50ZXIoKXt0aGlzLnRvb2x0aXBNb3VzZVNlcnZpY2Uub25Nb3VzZUVudGVyQ29udGVudCgpfW9uTW91c2VMZWF2ZSgpe3RoaXMudG9vbHRpcE1vdXNlU2VydmljZS5vbk1vdXNlTGVhdmVDb250ZW50KCl9dXBkYXRlQ3NzQ2xhc3Moe29sZENsYXNzOmEsbmV3'@;
put 'Q2xhc3M6Zn0pe3RoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LGEpLHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LGYpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChBbCks'@;
put 'cnQodTcsOCkscnQoeVopLHJ0KGJaKSl9LGwuXHUwMjc1Y21wPWtyKHt0eXBlOmwsc2VsZWN0b3JzOltbImNsci10b29sdGlwLWNvbnRlbnQiXV0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxmKXsxJmEmJkV0KCJtb3VzZWVudGVyIixmdW5jdGlvbigpe3JldHVybiBmLm9u'@;
put 'TW91c2VFbnRlcigpfSkoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIGYub25Nb3VzZUxlYXZlKCl9KSwyJmEmJihtMSgiaWQiLGYuaWQpLFJyKCJyb2xlIiwidG9vbHRpcCIpLFdjKCJvcGFjaXR5IiwxKSxncigidG9vbHRpcC1jb250ZW50IiwhMCkpfSxpbnB1dHM6e2lkOiJpZCIs'@;
put 'cG9zaXRpb246WyJjbHJQb3NpdGlvbiIsInBvc2l0aW9uIl0sc2l6ZTpbImNsclNpemUiLCJzaXplIl19LGZlYXR1cmVzOltyb10sbmdDb250ZW50U2VsZWN0b3JzOk9vLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZil7MSZhJiYoVGkoKSxEcigwKSl9LGVuY2Fwc3VsYXRp'@;
put 'b246Mn0pLGx9KSgpLEVTPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmLGQpe3RoaXMudG9nZ2xlU2VydmljZT1hLHRoaXMudG9vbHRpcElkU2VydmljZT1mLHRoaXMudG9vbHRpcE1vdXNlU2VydmljZT1kLHRoaXMuc3Vicz1bXSx0aGlzLnN1YnMucHVzaCh0aGlzLnRvb2x0aXBJZFNl'@;
put 'cnZpY2UuaWQuc3Vic2NyaWJlKGg9PnRoaXMuYXJpYURlc2NyaWJlZEJ5PWgpKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vicy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c2hvd1Rvb2x0aXAoKXt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMH1oaWRlVG9vbHRpcCgpe3RoaXMudG9nZ2xl'@;
put 'U2VydmljZS5vcGVuPSExfW9uTW91c2VFbnRlcigpe3RoaXMudG9vbHRpcE1vdXNlU2VydmljZS5vbk1vdXNlRW50ZXJUcmlnZ2VyKCl9b25Nb3VzZUxlYXZlKCl7dGhpcy50b29sdGlwTW91c2VTZXJ2aWNlLm9uTW91c2VMZWF2ZVRyaWdnZXIoKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0'@;
put 'aW9uKGEpe3JldHVybiBuZXcoYXx8bCkocnQoUWEpLHJ0KHlaKSxydChiWikpfSxsLlx1MDI3NWRpcj1Tcih7dHlwZTpsLHNlbGVjdG9yczpbWyIiLCJjbHJUb29sdGlwVHJpZ2dlciIsIiJdXSxob3N0QXR0cnM6WyJ0YWJpbmRleCIsIjAiXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5j'@;
put 'dGlvbihhLGYpezEmYSYmRXQoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBmLnNob3dUb29sdGlwKCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gZi5oaWRlVG9vbHRpcCgpfSkoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGYub25Nb3VzZUVudGVyKCl9KSgibW91c2VsZWF2'@;
put 'ZSIsZnVuY3Rpb24oKXtyZXR1cm4gZi5vbk1vdXNlTGVhdmUoKX0pLDImYSYmKFJyKCJhcmlhLWRlc2NyaWJlZGJ5IixmLmFyaWFEZXNjcmliZWRCeSkoInJvbGUiLCJidXR0b24iKSxncigidG9vbHRpcC10cmlnZ2VyIiwhMCkpfX0pLGx9KSgpLHRWZT0oKCk9PntjbGFzcyBse31yZXR1cm4g'@;
put 'bC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVtb2Q9RGkoe3R5cGU6bH0pLGwuXHUwMjc1aW5qPXhpKHtpbXBvcnRzOltbYm9dLEFmLGxsXX0pLGx9KSgpLG5WZT0oKCk9PntjbGFzcyBse31yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0'@;
put 'dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVtb2Q9RGkoe3R5cGU6bH0pLGwuXHUwMjc1aW5qPXhpKHtpbXBvcnRzOltjWixYTmUsdFZlXX0pLGx9KSgpLHJWZT0oKCk9PntjbGFzcyBse31yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVtb2Q9'@;
put 'RGkoe3R5cGU6bH0pLGwuXHUwMjc1aW5qPXhpKHtpbXBvcnRzOltbYm9dXX0pLGx9KSgpLG9WZT0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKCl7amEuYWRkSWNvbnMoclRlLGlUZSxlYWUsb1RlKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwu'@;
put 'XHUwMjc1bW9kPURpKHt0eXBlOmx9KSxsLlx1MDI3NWluaj14aSh7aW1wb3J0czpbW2JvLGxsLGZTXSxsbCxmU119KSxsfSkoKSxjVmU9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3Rvcigpe2phLmFkZEljb25zKGVhZSl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3'@;
put 'KGF8fGwpfSxsLlx1MDI3NW1vZD1EaSh7dHlwZTpsfSksbC5cdTAyNzVpbmo9eGkoe2ltcG9ydHM6W1tibyxodWUsaXVlXV19KSxsfSkoKSxJZD0oKCk9PntjbGFzcyBse31yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVtb2Q9RGkoe3R5'@;
put 'cGU6bH0pLGwuXHUwMjc1aW5qPXhpKHtpbXBvcnRzOltrTmUsZ05lLGxsLGh1ZSxDVSxBZixKRCxXZyxYRmUsbkhlLERzZSwkTmUsblZlLGNWZSxwc2UsVkZlLGZTLHJWZSxsUyxvVmVdfSksbH0pKCk7ZnVuY3Rpb24gZlZlKGwsYyl7MSZsJiYoeWUoMCwic3BhbiIsMTApLFllKDEsImxvYWRp'@;
put 'bmciKSxDZSgpKX1mdW5jdGlvbiBkVmUobCxjKXsxJmwmJih5ZSgwLCJzcGFuIiwxMSksWWUoMSwibG9hZGVkIiksQ2UoKSl9ZnVuY3Rpb24gaFZlKGwsYyl7MSZsJiYoeWUoMCwic3BhbiIsMTIpLFllKDEsImZhaWxlZCIpLENlKCkpfWZ1bmN0aW9uIHBWZShsLGMpe2lmKDEmbCYmKHllKDAs'@;
put 'InAiKSgxLCJjb2RlIiksWWUoMiksQ2UoKSxZZSgzLCIgXHhhMCAiKSx0dCg0LGZWZSwyLDAsInNwYW4iLDcpLHR0KDUsZFZlLDIsMCwic3BhbiIsOCksdHQoNixoVmUsMiwwLCJzcGFuIiw5KSxDZSgpKSwyJmwpe2NvbnN0IGE9Yy4kaW1wbGljaXQ7U2UoMiksYXIoYS5wcm9ncmFtKSxTZSgy'@;
put 'KSxSZSgibmdJZiIsYS5ydW5uaW5nKSxTZSgxKSxSZSgibmdJZiIsIWEucnVubmluZyYmYS5zdWNjZXNzZnVsKSxTZSgxKSxSZSgibmdJZiIsIWEucnVubmluZyYmIWEuc3VjY2Vzc2Z1bCl9fWZ1bmN0aW9uIG1WZShsLGMpe2lmKDEmbCYmKHllKDAsImNsci1zaWducG9zdC1jb250ZW50Iiw1'@;
put 'KSx0dCgxLHBWZSw3LDQsInAiLDYpLENlKCkpLDImbCl7Y29uc3QgYT1HZSgpO1JlKCJjbHJQb3NpdGlvbiIsImJvdHRvbS1taWRkbGUiKSxTZSgxKSxSZSgibmdGb3JPZiIsYS5yZXF1ZXN0cyl9fWxldCBnVmU9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3Rvcigpe3RoaXMubG9hZGluZz0hMSx0'@;
put 'aGlzLnJlcXVlc3RzPVtdLHRoaXMuX2xvYWRpbmdTdWI9bmV3IHRlfW5nT25Jbml0KCl7fW5nT25EZXN0cm95KCl7dGhpcy5fbG9hZGluZ1N1Yi51bnN1YnNjcmliZSgpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVjbXA9a3Ioe3R5'@;
put 'cGU6bCxzZWxlY3RvcnM6W1siYXBwLWxvYWRpbmctaW5kaWNhdG9yIl1dLGRlY2xzOjYsdmFyczo2LGNvbnN0czpbWzEsImxvYWRpbmctaW5kaWNhdG9yIl0sWyJjbHJTaWducG9zdFRyaWdnZXIiLCIiLDEsInNwaW5uZXIiLCJzcGlubmVyLXNtIiwic3Bpbm5lci1pbnZlcnNlIl0sWyJjbHJT'@;
put 'aWducG9zdFRyaWdnZXIiLCIiLCJzaGFwZSIsImNoZWNrIiwic2l6ZSIsIjIwIiwxLCJpcy1pbmZvIl0sWyJjbHJTaWducG9zdFRyaWdnZXIiLCIiLCJzaGFwZSIsImVycm9yIiwic2l6ZSIsIjI0IiwxLCJpcy1lcnJvciJdLFszLCJjbHJQb3NpdGlvbiIsNCwiY2xySWZPcGVuIl0sWzMsImNs'@;
put 'clBvc2l0aW9uIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJydW5uaW5nIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInN1Y2Nlc3MiLDQsIm5nSWYiXSxbImNsYXNzIiwiZmFpbCIsNCwibmdJZiJdLFsxLCJydW5uaW5nIl0sWzEsInN1Y2Nlc3MiXSxbMSwiZmFpbCJdXSx0ZW1wbGF0'@;
put 'ZTpmdW5jdGlvbihhLGYpezEmYSYmKHllKDAsImRpdiIsMCkoMSwiY2xyLXNpZ25wb3N0IiksdG4oMiwic3BhbiIsMSkoMywiY2xyLWljb24iLDIpKDQsImNsci1pY29uIiwzKSx0dCg1LG1WZSwyLDIsImNsci1zaWducG9zdC1jb250ZW50Iiw0KSxDZSgpKCkpLDImYSYmKFNlKDIpLFdjKCJk'@;
put 'aXNwbGF5IixmLmxvYWRpbmc/ImlubGluZS1ibG9jayI6Im5vbmUiKSxTZSgxKSxXYygiZGlzcGxheSIsIWYubG9hZGluZyYmZi5yZXF1ZXN0cy5sZW5ndGg+MCYmZi5yZXF1ZXN0c1swXS5zdWNjZXNzZnVsPyJpbmxpbmUtYmxvY2siOiJub25lIiksU2UoMSksV2MoImRpc3BsYXkiLCFmLmxv'@;
put 'YWRpbmcmJmYucmVxdWVzdHMubGVuZ3RoPjAmJiFmLnJlcXVlc3RzWzBdLnN1Y2Nlc3NmdWw/ImlubGluZS1ibG9jayI6Im5vbmUiKSl9LGRlcGVuZGVuY2llczpbUmEsJGksUmwseGQscVUscHVlLGZJXSxzdHlsZXM6WyIubG9hZGluZy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde2xp'@;
put 'bmUtaGVpZ2h0OjIuNXJlbTtoZWlnaHQ6Mi41cmVtO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9LmxvYWRpbmctaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zcGlubmVyW19uZ2NvbnRlbnQtJUNPTVAlXXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmxvYWRpbmctaW5k'@;
put 'aWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1zaWducG9zdC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoyNHB4O2NvbG9yOiM1NjU2NTY7Y3Vyc29yOmF1dG99LmxvYWRpbmctaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1zaWducG9zdC1j'@;
put 'b250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MTBweDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59LmxvYWRpbmctaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1zaWducG9zdC1jb250'@;
put 'ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdOmZpcnN0LWNoaWxke21hcmdpbi10b3A6MH0ubG9hZGluZy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVdICAgY2xyLXNpZ25wb3N0LWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50'@;
put 'LSVDT01QJV06bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9LmxvYWRpbmctaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1zaWducG9zdC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdICAgc3Bhbltfbmdjb250ZW50LSVDT01QJV17'@;
put 'bWFyZ2luLWxlZnQ6MTBweH0ubG9hZGluZy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVdICAgY2xyLXNpZ25wb3N0LWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0gICBzcGFuLnJ1bm5pbmdbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNlOWJm'@;
put 'MDR9LmxvYWRpbmctaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1zaWducG9zdC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdICAgc3Bhbi5zdWNjZXNzW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjBiNTE1fS5sb2FkaW5nLWlu'@;
put 'ZGljYXRvcltfbmdjb250ZW50LSVDT01QJV0gICBjbHItc2lnbnBvc3QtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHNwYW4uZmFpbFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2M5MjEwMH0iXX0pLGx9KSgpLHZWZT0oKCk9PntjbGFzcyBs'@;
put 'e2NvbnN0cnVjdG9yKGEsZil7dGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5sb2dnZXJTZXJ2aWNlPWYsdGhpcy5fc3Vic2NyaXB0aW9uPW5ldyB0ZSx0aGlzLmxvYWRpbmc9ITEsdGhpcy5hbGVydENsb3NlZD0hMCx0aGlzLmRhdGE9e3VzZXI6bnVsbCxwYXNzOm51bGx9fW5nT25Jbml0KCl7IlJl'@;
put 'ZGlyZWN0ZWQiIT09dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCkubG9naW5NZWNoYW5pc20mJih0aGlzLl9zdWJzY3JpcHRpb249dGhpcy5zYXNTZXJ2aWNlLnNob3VsZExvZ2luLnN1YnNjcmliZShmPT57dGhpcy5pc0FjdGl2ZT1mO2xldCBkPWRvY3VtZW50LnF1ZXJ5U2VsZWN0'@;
put 'b3IoImJvZHkiKTtkJiYoZj9kLmNsYXNzTGlzdC5hZGQoInNob3VsZC1sb2dpbiIpOmQuY2xhc3NMaXN0LnJlbW92ZSgic2hvdWxkLWxvZ2luIikpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5fc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9c3VibWl0KCl7dGhpcy5sb2FkaW5nfHwodGhpcy5s'@;
put 'b2FkaW5nPSEwLHRoaXMuZGF0YS51c2VyJiZ0aGlzLmRhdGEucGFzcyYmdGhpcy5zYXNTZXJ2aWNlLmxvZ2luKHRoaXMuZGF0YS51c2VyLHRoaXMuZGF0YS5wYXNzKS50aGVuKGE9Pnt0aGlzLmxvYWRpbmc9ITEsYXx8KHRoaXMuZXJyb3JNc2c9IlVzZXJuYW1lIG9yIHBhc3N3b3JkIGludmFs'@;
put 'aWQiLHRoaXMuYWxlcnRDbG9zZWQ9ITEpfSxhPT57dGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyhhKSx0aGlzLmxvYWRpbmc9ITEsdGhpcy5lcnJvck1zZz1hLHRoaXMuYWxlcnRDbG9zZWQ9ITF9KSl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHJ0KHBs'@;
put 'KSxydCh5MSkpfSxsLlx1MDI3NWNtcD1rcih7dHlwZTpsLHNlbGVjdG9yczpbWyJhcHAtbG9naW4iXV0sZGVjbHM6MjAsdmFyczo5LGNvbnN0czpbWzEsImxvZ2luLXNpZGViYXItd3JhcHBlciJdLFsxLCJsb2dpbi1zaWRlYmFyIiwic2lkZUJhclByb3BzIl0sWyJzcmMiLCIvU0FTSm9iRXhl'@;
put 'Y3V0aW9uP19GSUxFPS9QdWJsaWMvYXBwL2RjL3NlcnZpY2VzL3dlYi9pbWFnZXMvZGF0YWNvbnRyb2xsZXIuc3ZnIiwiYWx0IiwiIiwxLCJsb2dpbi1sb2dvIl0sWzEsImxvZ2luIiwzLCJuZ1N1Ym1pdCJdLFsxLCJ0aXRsZSJdLFsxLCJ3ZWxjb21lIl0sWzEsImhpbnQiXSxbMSwibG9naW4t'@;
put 'Z3JvdXAiXSxbImNscklucHV0IiwiIiwibmFtZSIsInVzZXIiLCJ0eXBlIiwidGV4dCIsInBsYWNlaG9sZGVyIiwiVXNlcm5hbWUiLDEsInVzZXJuYW1lIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSJdLFsiY2xySW5wdXQiLCIiLCJuYW1lIiwicGFzcyIsInR5cGUiLCJwYXNzd29yZCIs'@;
put 'InBsYWNlaG9sZGVyIiwiUGFzc3dvcmQiLDEsInBhc3N3b3JkIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSJdLFszLCJjbHJBbGVydFR5cGUiLCJjbHJBbGVydENsb3NlZCIsImNsckFsZXJ0Q2xvc2VkQ2hhbmdlIl0sWyJjbHItYWxlcnQtaXRlbSIsIiIsMSwiYWxlcnQtaXRlbSJdLFsx'@;
put 'LCJhbGVydC10ZXh0Il0sWyJ0eXBlIiwic3VibWl0IiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIsMywiY2xyTG9hZGluZyIsImRpc2FibGVkIl0sWzEsIm92ZXJsYXkiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxmKXsxJmEmJih5ZSgwLCJkaXYiLDApKDEsImRpdiIsMSksdG4oMiwi'@;
put 'aW1nIiwyKSx5ZSgzLCJmb3JtIiwzKSxFdCgibmdTdWJtaXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGYuc3VibWl0KCl9KSx5ZSg0LCJsYWJlbCIsNCkoNSwiaDMiLDUpLFllKDYsIldlbGNvbWUgdG8iKSxDZSgpLFllKDcsIiBEYXRhIENvbnRyb2xsZXIgIikseWUoOCwiaDUiLDYpLFllKDksIkNh'@;
put 'cHR1cmUsIFJldmlldywgYW5kIEFwcHJvdmUiKSxDZSgpKCkseWUoMTAsImRpdiIsNykoMTEsImlucHV0Iiw4KSxFdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIGYuZGF0YS51c2VyPWh9KSxDZSgpLHllKDEyLCJpbnB1dCIsOSksRXQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0'@;
put 'aW9uKGgpe3JldHVybiBmLmRhdGEucGFzcz1ofSksQ2UoKSx5ZSgxMywiY2xyLWFsZXJ0IiwxMCksRXQoImNsckFsZXJ0Q2xvc2VkQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gZi5hbGVydENsb3NlZD1ofSkseWUoMTQsImRpdiIsMTEpKDE1LCJzcGFuIiwxMiksWWUoMTYpLENlKCkoKSgp'@;
put 'LHllKDE3LCJidXR0b24iLDEzKSxZZSgxOCwiIExvZyBpbiAiKSxDZSgpKCkoKSgpLHRuKDE5LCJkaXYiLDE0KSxDZSgpKSwyJmEmJihncigiYWN0aXZlIixmLmlzQWN0aXZlKSxTZSgxMSksUmUoIm5nTW9kZWwiLGYuZGF0YS51c2VyKSxTZSgxKSxSZSgibmdNb2RlbCIsZi5kYXRhLnBhc3Mp'@;
put 'LFNlKDEpLFJlKCJjbHJBbGVydFR5cGUiLCJhbGVydC1kYW5nZXIiKSgiY2xyQWxlcnRDbG9zZWQiLGYuYWxlcnRDbG9zZWQpLFNlKDMpLGFyKGYuZXJyb3JNc2cpLFNlKDEpLFJlKCJjbHJMb2FkaW5nIixmLmxvYWRpbmcpKCJkaXNhYmxlZCIsZi5sb2FkaW5nKSl9LGRlcGVuZGVuY2llczpb'@;
put 'cDQsaXMsV2EsaDQsemEsQ2QsX1Msd1MsSmMsSWgsZWwsUmZdLHN0eWxlczpbIi5zaWRlQmFyUHJvcHNbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6IzMxNDM1MSFpbXBvcnRhbnQ7Y29sb3I6I2UwZTBlMH0uc2lkZUJhclByb3BzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2Nv'@;
put 'bnRlbnQtJUNPTVAlXSwgLnNpZGVCYXJQcm9wc1tfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5zaWRlQmFyUHJvcHNbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVdLCAuc2lkZUJhclByb3BzW19uZ2NvbnRlbnQtJUNPTVAlXSAg'@;
put 'IGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLnNpZGVCYXJQcm9wc1tfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2UwZTBlMH0uc2lkZUJhclByb3BzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVy'@;
put 'LWNvbG9yOndoZWF0IWltcG9ydGFudH0uc2lkZUJhclByb3BzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGFbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNlMGUwZTB9LmxvZ2luLXNpZGViYXItd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtwb3NpdGlv'@;
put 'bjpmaXhlZDt0b3A6MDtsZWZ0OjA7cG9pbnRlci1ldmVudHM6bm9uZTt6LWluZGV4OjEwMDAwfS5sb2dpbi1zaWRlYmFyLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdID4gKltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6YXV0b30ubG9naW4tc2lkZWJhci13cmFwcGVyW19u'@;
put 'Z2NvbnRlbnQtJUNPTVAlXSAgIC5sb2dpbi1zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDo0MDBweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7YmFja2dyb3VuZDojZmZmO2JvcmRlci1yaWdodDoxcHggc29saWQgI2RkZDtwYWRkaW5nOjQwcHg7dHJh'@;
put 'bnNmb3JtOnRyYW5zbGF0ZSgtNDAwcHgpO3RyYW5zaXRpb246dHJhbnNmb3JtIC4zcyBlYXNlfS5sb2dpbi1zaWRlYmFyLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLmxvZ2luLXNpZGViYXJbX25nY29udGVudC0lQ09NUCVdICAgZm9ybS5sb2dpbltfbmdjb250ZW50LSVDT01QJV17'@;
put 'ei1pbmRleDoxMDE7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5sb2dpbi1zaWRlYmFyLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLmxvZ2luLXNpZGViYXJbX25nY29udGVudC0lQ09NUCVdICAgZm9ybS5sb2dpbltfbmdj'@;
put 'b250ZW50LSVDT01QJV0gICAudGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTozMnB4O2xldHRlci1zcGFjaW5nOm5vcm1hbDtsaW5lLWhlaWdodDozNnB4fS5sb2dpbi1zaWRlYmFyLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLmxvZ2luLXNpZGViYXJbX25nY29udGVu'@;
put 'dC0lQ09NUCVdICAgZm9ybS5sb2dpbltfbmdjb250ZW50LSVDT01QJV0gICAudGl0bGVbX25nY29udGVudC0lQ09NUCVdICAgLndlbGNvbWVbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MzZweH0ubG9naW4tc2lkZWJhci13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5sb2dp'@;
put 'bi1zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGZvcm0ubG9naW5bX25nY29udGVudC0lQ09NUCVdICAgLmxvZ2luLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3BhZGRpbmc6NDhweCAwIDB9LmxvZ2luLXNpZGViYXItd3Jh'@;
put 'cHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubG9naW4tc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV0gICBmb3JtLmxvZ2luW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5sb2dpbi1ncm91cFtfbmdjb250ZW50LSVDT01QJV0gPiAqW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46NnB4IDAgMThw'@;
put 'eH0ubG9naW4tc2lkZWJhci13cmFwcGVyLmFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubG9naW4tc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZSgwKTt6LWluZGV4OjEwMX0ubG9naW4tc2lkZWJhci13cmFwcGVyLmFjdGl2ZVtfbmdjb250ZW50LSVD'@;
put 'T01QJV0gICAub3ZlcmxheVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpibG9ja30ubG9naW4tc2lkZWJhci13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5vdmVybGF5W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmU7cG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO2hl'@;
put 'aWdodDoxMDAlO3dpZHRoOjEwMCU7YmFja2dyb3VuZDpyZ2JhKDMzLDMzLDMzLC41KTt6LWluZGV4OjEwMH0gIC5sb2dpbi1zaWRlYmFyLXdyYXBwZXIgLmxvZ2luLWdyb3VwIC5jbHItY29udHJvbC1jb250YWluZXIsICAgLmxvZ2luLXNpZGViYXItd3JhcHBlciAubG9naW4tZ3JvdXAgLnVz'@;
put 'ZXJuYW1lLCAgIC5sb2dpbi1zaWRlYmFyLXdyYXBwZXIgLmxvZ2luLWdyb3VwIC5wYXNzd29yZHt3aWR0aDoxMDAlfSAgLmxvZ2luLXNpZGViYXItd3JhcHBlciAubG9naW4tZ3JvdXAgLmNsci1pbnB1dC13cmFwcGVye21heC13aWR0aDpub25lfSAgLmxvZ2luLXNpZGViYXItd3JhcHBlciAu'@;
put 'bG9naW4tZ3JvdXAgYnV0dG9ue21heC13aWR0aDpub25lfS5sb2dpbi1sb2dvW19uZ2NvbnRlbnQtJUNPTVAlXXttYXgtd2lkdGg6MjAwcHh9Il19KSxsfSkoKTtmdW5jdGlvbiB5VmUobCxjKXtpZigxJmwmJih5ZSgwLCJzcGFuIiksdG4oMSwiaW1nIiwxOSksQ2UoKSksMiZsKXtjb25zdCBh'@;
put 'PUdlKCk7U2UoMSksUnUoInNyYyIsYS5nZXRQaWN0dXJlVXJsKCksVl8pfX1mdW5jdGlvbiBiVmUobCxjKXtpZigxJmwmJih5ZSgwLCJzcGFuIiwyMCksWWUoMSksQ2UoKSksMiZsKXtjb25zdCBhPUdlKCk7Z3IoImhpZGRlbiIsMD09PWEuZmFpbGVkUmVxcy5sZW5ndGgpLFNlKDEpLGFyKGEu'@;
put 'ZmFpbGVkUmVxcy5sZW5ndGgpfX1mdW5jdGlvbiBfVmUobCxjKXtpZigxJmwmJih5ZSgwLCJzcGFuIiwyMSksWWUoMSksQ2UoKSksMiZsKXtjb25zdCBhPUdlKCk7Z3IoImhpZGRlbiIsMD09PWEuZGVidWdMb2dzLmxlbmd0aCksU2UoMSksYXIoYS5kZWJ1Z0xvZ3MubGVuZ3RoKX19ZnVuY3Rp'@;
put 'b24gd1ZlKGwsYyl7MSZsJiZ0bigwLCJjbHItaWNvbiIsMjIpfWZ1bmN0aW9uIENWZShsLGMpezEmbCYmKFdyKDApLHllKDEsImEiLDMzKSgyLCJzcGFuIiwzNCksWWUoMywiRG9jdW1lbnRhdGlvbiIpLENlKCkoKSxHcigpKX1mdW5jdGlvbiBTVmUobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4o'@;
put 'KTt5ZSgwLCJjbHItZHJvcGRvd24tbWVudSIsMjMpKDEsImRpdiIsMjQsMjUpKDMsImNsci10b2dnbGUtY29udGFpbmVyIiwyNiksRXQoImNsaWNrIixmdW5jdGlvbihkKXtVdChhKTtjb25zdCBoPVFpKDIpO3JldHVybiBadChHZSgpLm9uRGVidWdSb3dDbGljayhkLGgpKX0pLHllKDQsImNs'@;
put 'ci10b2dnbGUtd3JhcHBlciIpKDUsImlucHV0IiwyNyksRXQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGQpe3JldHVybiBVdChhKSxadChHZSgpLnNhc2pzQ29uZmlnLmRlYnVnPWQpfSkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIFV0KGEpLFp0KEdlKCkub25EZWJ1Z01v'@;
put 'ZGVDaGFuZ2UoKSl9KSxDZSgpLHllKDYsImxhYmVsIiksWWUoNywiRGVidWcgTW9kZSIpLENlKCkoKSgpKCkseWUoOCwiYSIsMjgpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gVXQoYSksWnQoR2UoKS5vcGVuUmVxdWVzdHNNb2RhbCgpKX0pLHllKDksInNwYW4iKSxZZSgxMCwiU0FT'@;
put 'IFJlcXVlc3RzIiksQ2UoKSgpLHR0KDExLENWZSw0LDAsIm5nLWNvbnRhaW5lciIsMiksdG4oMTIsImRpdiIsMTUpLHllKDEzLCJhIiwyOSkoMTQsInNwYW4iKSxZZSgxNSwiU3lzdGVtIiksQ2UoKSgpLHllKDE2LCJhIiwzMCksRXQoImNsaWNrIixmdW5jdGlvbihkKXtyZXR1cm4gVXQoYSks'@;
put 'WnQoR2UoKS5sb2dvdXQoZCkpfSkseWUoMTcsInNwYW4iKSxZZSgxOCwiTG9nIE91dCIpLENlKCksdG4oMTksImNsci1pY29uIiwzMSksQ2UoKSx5ZSgyMCwiZGl2IiwzMikoMjEsInNwYW4iKSxZZSgyMiksQ2UoKSgpKCl9aWYoMiZsKXtjb25zdCBhPUdlKCk7U2UoNSksUmUoIm5nTW9kZWwi'@;
put 'LGEuc2FzanNDb25maWcuZGVidWcpLFNlKDYpLFJlKCJuZ0lmIiwhYS5pc0RlcGxveVBhZ2UpLFNlKDExKSx3cigidiIsYS5jb21taXRWZXIsIiIpfX1jb25zdCBNVmU9ZnVuY3Rpb24oKXtyZXR1cm57c3RhbmRhbG9uZTohMH19O2xldCBrVmU9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3Rvcihh'@;
put 'LGYsZCxoKXt0aGlzLnVzZXJTZXJ2aWNlPWEsdGhpcy5zYXNTZXJ2aWNlPWYsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLnJvdXRlcj1oLHRoaXMudXNlck5hbWU9Ik5vdCBsb2dnZWQgaW4iLHRoaXMucmVxU3ViPW5ldyB0ZSx0aGlzLnVzZXJTdWI9bmV3IHRlLHRoaXMuYXBwTG9ncz1bXSx0'@;
put 'aGlzLmRlYnVnTG9ncz1bXSx0aGlzLmZhaWxlZFJlcXM9W10sdGhpcy5zYXNFcnJvcnM9W10sdGhpcy5pc1ZpeWE9ITEsdGhpcy5zYXNqc0NvbmZpZz1uZXcgdjEuU0FTanNDb25maWcsdGhpcy5yZXF1ZXN0c0NvdW50PTAsdGhpcy5jb21taXRWZXI9IiJ9bmdPbkluaXQoKXt0aGlzLnVzZXJT'@;
put 'dWI9dGhpcy51c2VyU2VydmljZS51c2VyQ2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy51c2VyTmFtZT1hLnVzZXJuYW1lfSksdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSwiU0FTVklZQSI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUmJih0'@;
put 'aGlzLmlzVml5YT0hMCksdGhpcy5jb21taXRWZXI9InY2LjEuMCIucmVwbGFjZSgidiIsIiIpKyIuZ2JiYTJhNmMifW5nT25EZXN0cm95KCl7dGhpcy5yZXFTdWIudW5zdWJzY3JpYmUoKSx0aGlzLnVzZXJTdWIudW5zdWJzY3JpYmUoKX1vcGVuUmVxdWVzdHNNb2RhbCgpe3RoaXMuZXZlbnRT'@;
put 'ZXJ2aWNlLm9wZW5SZXF1ZXN0c01vZGFsKCl9b25EZWJ1Z01vZGVDaGFuZ2UoYSl7dGhpcy5zYXNqc0NvbmZpZyYmdGhpcy5zYXNTZXJ2aWNlLnNldERlYnVnU3RhdGUodGhpcy5zYXNqc0NvbmZpZy5kZWJ1Zyl9b25EZWJ1Z1Jvd0NsaWNrKGEsZil7YS5zdG9wUHJvcGFnYXRpb24oKSxzZXRU'@;
put 'aW1lb3V0KCgpPT57Zi5jbGljaygpfSwzMDApfWxvZ291dChhKXthLnByZXZlbnREZWZhdWx0KCk7dHJ5e3RoaXMuc2FzU2VydmljZS5sb2dvdXQoKX1jYXRjaChmKXtjb25zb2xlLmVycm9yKGYpfX1nZXRQaWN0dXJlVXJsKCl7cmV0dXJuYCR7dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmx9'@;
put 'L2lkZW50aXRpZXMvdXNlcnMvJHt0aGlzLnVzZXJOYW1lfS9hdmF0YXIvY29udGVudGB9Z2V0IGlzRGVwbG95UGFnZSgpe3JldHVybiB0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoImRlcGxveSIpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChY'@;
put 'aikscnQocGwpLHJ0KFJzKSxydChMYSkpfSxsLlx1MDI3NWNtcD1rcih7dHlwZTpsLHNlbGVjdG9yczpbWyJhcHAtdXNlci1uYXYtZHJvcGRvd24iXV0sZGVjbHM6MzIsdmFyczoxMCxjb25zdHM6W1sxLCJhcHAtbmF2LWRyb3Bkb3duIiwiZC1tZC1ibG9jayJdLFsiY2xyRHJvcGRvd25Ub2dn'@;
put 'bGUiLCIiLDEsIm5hdi10ZXh0IiwiY29sb3Itd2hpdGUiXSxbNCwibmdJZiJdLFsiY2xhc3MiLCJiYWRnZSBiYWRnZS1kYW5nZXIiLDMsImhpZGRlbiIsNCwibmdJZiJdLFsiY2xhc3MiLCJiYWRnZSBiYWRnZS1pbmZvIiwzLCJoaWRkZW4iLDQsIm5nSWYiXSxbInNoYXBlIiwiY2FyZXQgZG93'@;
put 'biIsNCwibmdJZiJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiLDQsImNscklmT3BlbiJdLFsxLCJjb250ZW50LWNvbnRhaW5lciIsImgtYXV0byJdLFsxLCJzaWRlbmF2IiwiZC1ibG9jayIsImQtbWQtbm9uZSIsMywiY2xyLW5hdi1sZXZlbCJdLFsxLCJzaWRlbmF2LWNvbnRlbnQi'@;
put 'XSxbImhyZWYiLCIuLi4iLDEsIm5hdi1saW5rIiwiYWN0aXZlIl0sWzEsInRvZ2dsZS1zd2l0Y2giXSxbImlkIiwiZGVidWctdG9nZ2xlMiIsInR5cGUiLCJjaGVja2JveCIsMywibmdNb2RlbCIsIm5nTW9kZWxPcHRpb25zIiwibmdNb2RlbENoYW5nZSJdLFsiZm9yIiwiZGVidWctdG9nZ2xl'@;
put 'MiIsMSwiZGVidWctdG9nZ2xlLWxhYmVsIiwiY29sb3ItZGFyay1ncmF5Il0sWyJ0YXJnZXQiLCJfYmxhbmsiLCJocmVmIiwiaHR0cHM6Ly9kb2NzLmRhdGFjb250cm9sbGVyLmlvIiwxLCJuYXYtbGluayIsImQtYmxvY2siXSxbMSwic2VwYXJhdG9yIl0sWyJyb3V0ZXJMaW5rIiwiL3N5c3Rl'@;
put 'bSIsMSwibmF2LWxpbmsiLCJkLWJsb2NrIl0sWyJzaGFwZSIsImxvZ291dCJdLFsiaHJlZiIsIi4uLiIsMSwibmF2LWxpbmsiLCJkLWJsb2NrIiwzLCJjbGljayJdLFsiYWx0IiwiIiwxLCJhdmF0YXItaW1nIiwzLCJzcmMiXSxbMSwiYmFkZ2UiLCJiYWRnZS1kYW5nZXIiXSxbMSwiYmFkZ2Ui'@;
put 'LCJiYWRnZS1pbmZvIl0sWyJzaGFwZSIsImNhcmV0IGRvd24iXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0Il0sWyJjbHJEcm9wZG93bkl0ZW0iLCIiLDEsImRlYnVnLXN3aXRjaC1pdGVtIl0sWyJkcm9wZG93bkl0ZW1EZWJ1ZyIsIiJdLFsxLCJ0b2dnbGUtc3dpdGNoIiwzLCJjbGlj'@;
put 'ayJdLFsiaWQiLCJkZWJ1Zy10b2dnbGUxIiwidHlwZSIsImNoZWNrYm94IiwiY2xyVG9nZ2xlIiwiIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSJdLFsiY2xyRHJvcGRvd25JdGVtIiwiIiwzLCJjbGljayJdLFsiaHJlZiIsIi4uLiIsInJvdXRlckxpbmsiLCIvc3lzdGVtIiwiY2xyRHJv'@;
put 'cGRvd25JdGVtIiwiIl0sWyJocmVmIiwiLi4uIiwiY2xyRHJvcGRvd25JdGVtIiwiIiwzLCJjbGljayJdLFsic2hhcGUiLCJsb2dvdXQiLDEsImNsci1sb2dvdXQiXSxbMSwiY29weVJpZ2h0Il0sWyJ0YXJnZXQiLCJfYmxhbmsiLCJocmVmIiwiaHR0cHM6Ly9kb2NzLmRhdGFjb250cm9sbGVy'@;
put 'LmlvIiwiY2xyRHJvcGRvd25JdGVtIiwiIl0sWzEsImRyb3Bkb3duLXRleHQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxmKXsxJmEmJih5ZSgwLCJjbHItZHJvcGRvd24iLDApKDEsImJ1dHRvbiIsMSkoMiwic3BhbiIpLFllKDMpLENlKCksdHQoNCx5VmUsMiwxLCJzcGFuIiwyKSx0dCg1LGJW'@;
put 'ZSwyLDMsInNwYW4iLDMpLHR0KDYsX1ZlLDIsMywic3BhbiIsNCksdHQoNyx3VmUsMSwwLCJjbHItaWNvbiIsNSksQ2UoKSx0dCg4LFNWZSwyMywzLCJjbHItZHJvcGRvd24tbWVudSIsNiksQ2UoKSx5ZSg5LCJkaXYiLDcpKDEwLCJuYXYiLDgpKDExLCJzZWN0aW9uIiw5KSgxMiwiYSIsMTAp'@;
put 'LFllKDEzKSxDZSgpLHllKDE0LCJkaXYiKSgxNSwiZm9ybSIpKDE2LCJkaXYiLDExKSgxNywiaW5wdXQiLDEyKSxFdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIGYuc2FzanNDb25maWcuZGVidWc9aH0pKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBmLm9u'@;
put 'RGVidWdNb2RlQ2hhbmdlKCl9KSxDZSgpLHllKDE4LCJsYWJlbCIsMTMpLFllKDE5LCJEZWJ1ZyBNb2RlIiksQ2UoKSgpKCkoKSx5ZSgyMCwiYSIsMTQpKDIxLCJzcGFuIiksWWUoMjIsIkRvY3VtZW50YXRpb24iKSxDZSgpKCksdG4oMjMsImRpdiIsMTUpLHllKDI0LCJhIiwxNikoMjUsInNw'@;
put 'YW4iKSxZZSgyNiwiU3lzdGVtIiksQ2UoKSx0bigyNywiY2xyLWljb24iLDE3KSxDZSgpLHllKDI4LCJhIiwxOCksRXQoImNsaWNrIixmdW5jdGlvbihoKXtyZXR1cm4gZi5sb2dvdXQoaCl9KSx5ZSgyOSwic3BhbiIpLFllKDMwLCJMb2cgT3V0IiksQ2UoKSx0bigzMSwiY2xyLWljb24iLDE3'@;
put 'KSxDZSgpKCkoKSgpKSwyJmEmJihTZSgzKSxhcihmLnVzZXJOYW1lKSxTZSgxKSxSZSgibmdJZiIsIk5vdCBsb2dnZWQgaW4iIT09Zi51c2VyTmFtZSYmZi5pc1ZpeWEpLFNlKDEpLFJlKCJuZ0lmIiwhZi5zYXNqc0NvbmZpZy5kZWJ1ZyksU2UoMSksUmUoIm5nSWYiLGYuc2FzanNDb25maWcu'@;
put 'ZGVidWcpLFNlKDEpLFJlKCJuZ0lmIiwhZi5pc1ZpeWEpLFNlKDMpLFJlKCJjbHItbmF2LWxldmVsIiwyKSxTZSgzKSx3cigiICIsZi51c2VyTmFtZSwiICIpLFNlKDQpLFJlKCJuZ01vZGVsIixmLnNhc2pzQ29uZmlnLmRlYnVnKSgibmdNb2RlbE9wdGlvbnMiLFhhKDksTVZlKSkpfSxkZXBl'@;
put 'bmRlbmNpZXM6WyRpLHA0LFIwLFdhLGg0LHphLENkLEkwLFJsLHhkLGVsLEIwLGw3LFYwLHN1ZSxhMyxvNSxhNSx4N10sc3R5bGVzOlsnLmNvcHlSaWdodFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDoxMHB4fS5jb3B5UmlnaHRbX25nY29udGVudC0lQ09NUCVdICAgc3Bhbltfbmdj'@;
put 'b250ZW50LSVDT01QJV17d29yZC1icmVhazpicmVhay13b3JkO3doaXRlLXNwYWNlOnByZS13cmFwO3dpZHRoOjEwMCU7dGV4dC1hbGlnbjpjZW50ZXI7bGluZS1oZWlnaHQ6MS41fS5hcHAtbmF2LWRyb3Bkb3duW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLXJpZ2h0OjE1cHg7bGluZS1o'@;
put 'ZWlnaHQ6M3JlbTtoZWlnaHQ6M3JlbX0uYXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV0gPiBidXR0b24uZHJvcGRvd24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZmFmYWZhO3Bvc2l0aW9uOnJlbGF0aXZlfS5hcHAtbmF2LWRyb3Bkb3duW19uZ2NvbnRlbnQt'@;
put 'JUNPTVAlXSA+IGJ1dHRvbi5kcm9wZG93bi10b2dnbGVbX25nY29udGVudC0lQ09NUCVdOmFmdGVye2NvbnRlbnQ6IiI7YmFja2dyb3VuZC1jb2xvcjojZmFmYWZhO29wYWNpdHk6LjE1O2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7aGVpZ2h0OjQwcHg7dG9wOjEwcHh9LmFw'@;
put 'cC1uYXYtZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVdID4gYnV0dG9uLmRyb3Bkb3duLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV0gICAuYmFkZ2UuaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXt2aXNpYmlsaXR5OmhpZGRlbn0uYXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50LSVDT01Q'@;
put 'JV0gICBjbHItZHJvcGRvd24tbWVudVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzU2NTY1NjtwYWRkaW5nLWJvdHRvbTowfS5hcHAtbmF2LWRyb3Bkb3duW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1kcm9wZG93bi1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZXBhcmF0b3JbX25n'@;
put 'Y29udGVudC0lQ09NUCVde21hcmdpbjoxMHB4IDA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgZ3JheX0uYXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV0gICBjbHItZHJvcGRvd24tbWVudVtfbmdjb250ZW50LSVDT01QJV0gICAuZHJvcGRvd24taXRlbVtfbmdjb250ZW50LSVD'@;
put 'T01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OjQ1cHg7bGluZS1oZWlnaHQ6NDBweH0uYXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV0gICBjbHItZHJvcGRvd24tbWVudVtfbmdj'@;
put 'b250ZW50LSVDT01QJV0gICAuZHJvcGRvd24taXRlbVtfbmdjb250ZW50LSVDT01QJV0gICBzcGFuLmRyb3Bkb3duLXRleHRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM1NjU2NTZ9LmFwcC1uYXYtZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVdICAgY2xyLWRyb3Bkb3duLW1lbnVbX25n'@;
put 'Y29udGVudC0lQ09NUCVdICAgLmRyb3Bkb3duLWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLmJhZGdlW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MTVweDtyaWdodDoyNnB4O21hcmdpbi1yaWdodDowfS5hcHAtbmF2LWRyb3Bkb3duW19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXSAgIGNsci1kcm9wZG93bi1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcm9wZG93bi1pdGVtLmRlYnVnLXN3aXRjaC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjB9LmFwcC1uYXYtZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVdICAgY2xyLWRyb3Bkb3duLW1lbnVb'@;
put 'X25nY29udGVudC0lQ09NUCVdICAgLmRyb3Bkb3duLWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLnRvZ2dsZS1zd2l0Y2hbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uYXBwLW5hdi1kcm9wZG93bltf'@;
put 'bmdjb250ZW50LSVDT01QJV0gICBjbHItZHJvcGRvd24tbWVudVtfbmdjb250ZW50LSVDT01QJV0gICAuZHJvcGRvd24taXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAuY2xyLWxvZ291dFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MjBweDt0b3A6MTVweH0u'@;
put 'YXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV0gICBjbHItZHJvcGRvd24tbWVudVtfbmdjb250ZW50LSVDT01QJV0gICAuZHJvcGRvd24taXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250YWluZXJ7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJX0uYXBw'@;
put 'LW5hdi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV0gICBjbHItZHJvcGRvd24tbWVudVtfbmdjb250ZW50LSVDT01QJV0gICAuZHJvcGRvd24taXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci10b2dnbGUtd3JhcHBlcnt3aWR0aDoxMDAlO21hcmdpbjowO2hlaWdodDoxMDAlO3Bh'@;
put 'ZGRpbmc6MTBweCAyMHB4fS5hcHAtbmF2LWRyb3Bkb3duW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1kcm9wZG93bi1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcm9wZG93bi1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgaW5wdXR7aW5zZXQ6MDt3aWR0aDoxMDAlO2hlaWdodDox'@;
put 'MDAlO2N1cnNvcjpwb2ludGVyfS5hcHAtbmF2LWRyb3Bkb3duW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1kcm9wZG93bi1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcm9wZG93bi1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBl'@;
put 'PWNoZWNrYm94XStsYWJlbDphZnRlcnt0cmFuc2l0aW9uOm5vbmUhaW1wb3J0YW50fS5kZWJ1Zy10b2dnbGUtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctbGVmdDo0MnB4fUBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCl7LnNpZGVuYXYtY29udGVudFtfbmdjb250ZW50LSVDT01Q'@;
put 'JV0gICBhLm5hdi1saW5rLmFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6aW5oZXJpdDtwYWRkaW5nOjE1cHg7YmFja2dyb3VuZDojNTY1NjU2fX0ubmF2LWxpbmsuZC1ibG9ja1tfbmdjb250ZW50LSVDT01QJV0gICBzcGFuLmJhZGdlW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlv'@;
put 'bjphYnNvbHV0ZX0uYXZhdGFyLWltZ1tfbmdjb250ZW50LSVDT01QJV17d2lkdGg6NDBweDtoZWlnaHQ6NDBweDttYXJnaW4tbGVmdDoxMHB4O2JvcmRlci1yYWRpdXM6NTBweH0nXX0pLGx9KSgpO2Z1bmN0aW9uIEVWZShsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImNsci1hbGVy'@;
put 'dCIsMiksRXQoImNsckFsZXJ0Q2xvc2VkQ2hhbmdlIixmdW5jdGlvbihkKXtyZXR1cm4gWnQoVXQoYSkuJGltcGxpY2l0LmNsb3NlZD1kKX0pKCJjbHJBbGVydENsb3NlZENoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gVXQoYSksWnQoR2UoMikub25BbGVydENsb3NlKCkpfSkseWUoMSwiZGl2'@;
put 'IiwzKSgyLCJzcGFuIiw0KSxZZSgzKSxDZSgpKCkoKX1pZigyJmwpe2NvbnN0IGE9Yy4kaW1wbGljaXQ7UmUoImNsckFsZXJ0VHlwZSIsYS50eXBlKSgiY2xyQWxlcnRBcHBMZXZlbCIsITApKCJjbHJBbGVydENsb3NlZCIsYS5jbG9zZWQpLFNlKDMpLHdyKCIgIixhLm1lc3NhZ2UsIiAiKX19'@;
put 'ZnVuY3Rpb24geFZlKGwsYyl7aWYoMSZsJiYoeWUoMCwiY2xyLWFsZXJ0cyIpLHR0KDEsRVZlLDQsNCwiY2xyLWFsZXJ0IiwxKSxDZSgpKSwyJmwpe2NvbnN0IGE9R2UoKTtTZSgxKSxSZSgibmdGb3JPZiIsYS5hbGVydHMpfX1sZXQgQVZlPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSl7'@;
put 'dGhpcy5fYWxlcnRzU2VydmljZT1hLHRoaXMuYWxlcnRzPVtdLHRoaXMuaGFzT3BlbkFsZXJ0PSExLHRoaXMuYWxlcnRzU3ViPW5ldyB0ZX1uZ09uSW5pdCgpe3RoaXMuYWxlcnRzU3ViPXRoaXMuX2FsZXJ0c1NlcnZpY2UuYWxlcnRzLnN1YnNjcmliZShhPT57dGhpcy5hbGVydHMucHVzaChh'@;
put 'KSx0aGlzLmhhc09wZW5BbGVydD0hMCxhLmVyciYmY29uc29sZS5lcnJvcihhLmVycil9KX1vbkFsZXJ0Q2xvc2UoKXt0aGlzLmhhc09wZW5BbGVydD10aGlzLmFsZXJ0cy5zb21lKGE9PiFhLmNsb3NlZCl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwp'@;
put 'KHJ0KEpqKSl9LGwuXHUwMjc1Y21wPWtyKHt0eXBlOmwsc2VsZWN0b3JzOltbImFwcC1hbGVydHMiXV0sZGVjbHM6MSx2YXJzOjEsY29uc3RzOltbNCwibmdJZiJdLFszLCJjbHJBbGVydFR5cGUiLCJjbHJBbGVydEFwcExldmVsIiwiY2xyQWxlcnRDbG9zZWQiLCJjbHJBbGVydENsb3NlZENo'@;
put 'YW5nZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsImNsckFsZXJ0VHlwZSIsImNsckFsZXJ0QXBwTGV2ZWwiLCJjbHJBbGVydENsb3NlZCIsImNsckFsZXJ0Q2xvc2VkQ2hhbmdlIl0sWzEsImFsZXJ0LWl0ZW0iXSxbMSwiYWxlcnQtdGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGYpezEm'@;
put 'YSYmdHQoMCx4VmUsMiwxLCJjbHItYWxlcnRzIiwwKSwyJmEmJlJlKCJuZ0lmIixmLmhhc09wZW5BbGVydCl9LGRlcGVuZGVuY2llczpbUmEsJGksX1MscnVlLHdTXSxzdHlsZXM6WyJjbHItYWxlcnRzW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmJsb2NrfSJdfSksbH0pKCksYkk9KCgp'@;
put 'PT57Y2xhc3MgbHtjb25zdHJ1Y3Rvcigpe3RoaXMuY2xhc3Nlcz0iIn1uZ09uSW5pdCgpe319cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1Y21wPWtyKHt0eXBlOmwsc2VsZWN0b3JzOltbImNvbnRhY3QtbGluayJdXSxpbnB1dHM6e2Ns'@;
put 'YXNzZXM6ImNsYXNzZXMifSxkZWNsczoyLHZhcnM6Myxjb25zdHM6W1siaHJlZiIsIm1haWx0bzpzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvP3N1YmplY3Q9TGljZW5jZSIsMywibmdDbGFzcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGYpezEmYSYmKHllKDAsImEiLDApLFllKDEsInN1cHBv'@;
put 'cnRAZGF0YWNvbnRyb2xsZXIuaW8iKSxDZSgpKSwyJmEmJihncigidW5zZXQiLCIiIT09Zi5jbGFzc2VzKSxSZSgibmdDbGFzcyIsZi5jbGFzc2VzKSl9LGRlcGVuZGVuY2llczpbeXVdLHN0eWxlczpbIi51bnNldFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dW5zZXR9Il19KSxsfSkoKSxf'@;
put 'ST0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKCl7dGhpcy5maWxlT3Zlcj0hMSx0aGlzLmZpbGVEcm9wcGVkPW5ldyB4cix0aGlzLmZpbGVEcmFnZ2VkT3Zlcj1uZXcgeHJ9b25EcmFnT3ZlcihhKXthLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmNvbnRhaW5z'@;
put 'RmlsZXMoYSkmJiF0aGlzLmZpbGVPdmVyJiYodGhpcy5maWxlT3Zlcj0hMCx0aGlzLmZpbGVEcmFnZ2VkT3Zlci5lbWl0KCkpfW9uRHJhZ0xlYXZlKGEpe2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuZmlsZU92ZXI9ITF9b25kcm9wKGEpe2EucHJldmVudERl'@;
put 'ZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuZmlsZU92ZXI9ITE7Y29uc3QgZj1hLmRhdGFUcmFuc2Zlci5maWxlcztmLmxlbmd0aD4wJiZ0aGlzLmZpbGVEcm9wcGVkLmVtaXQoZil9Y29udGFpbnNGaWxlcyhhKXtpZihhJiZhLmRhdGFUcmFuc2ZlciYmYS5kYXRhVHJhbnNmZXIu'@;
put 'dHlwZXMpZm9yKGxldCBmPTA7ZjxhLmRhdGFUcmFuc2Zlci50eXBlcy5sZW5ndGg7ZisrKWlmKCJGaWxlcyI9PWEuZGF0YVRyYW5zZmVyLnR5cGVzW2ZdKXJldHVybiEwfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVkaXI9U3Ioe3R5'@;
put 'cGU6bCxzZWxlY3RvcnM6W1siIiwiYXBwRHJhZ05kcm9wIiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZil7MSZhJiZFdCgiZHJhZ292ZXIiLGZ1bmN0aW9uKGgpe3JldHVybiBmLm9uRHJhZ092ZXIoaCl9KSgiZHJhZ2xlYXZlIixmdW5jdGlvbihoKXtyZXR1cm4g'@;
put 'Zi5vbkRyYWdMZWF2ZShoKX0pKCJkcm9wIixmdW5jdGlvbihoKXtyZXR1cm4gZi5vbmRyb3AoaCl9KSwyJmEmJmdyKCJmaWxlb3ZlciIsZi5maWxlT3Zlcil9LG91dHB1dHM6e2ZpbGVEcm9wcGVkOiJmaWxlRHJvcHBlZCIsZmlsZURyYWdnZWRPdmVyOiJmaWxlRHJhZ2dlZE92ZXIifX0pLGx9'@;
put 'KSgpO2Z1bmN0aW9uIFRWZShsLGMpezEmbCYmKHllKDAsInAiLDYpLFllKDEsIk5vIHJlcXVlc3RzIG1hZGUiKSxDZSgpKX1mdW5jdGlvbiBPVmUobCxjKXsxJmwmJih5ZSgwLCJzcGFuIiksdG4oMSwiY2xyLWljb24iLDEzKSxDZSgpKX1mdW5jdGlvbiBEVmUobCxjKXsxJmwmJih5ZSgwLCJz'@;
put 'cGFuIiksdG4oMSwiY2xyLWljb24iLDE0KSxDZSgpKX1mdW5jdGlvbiBJVmUobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJjbHItdHJlZS1ub2RlIiwyMSksRXQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9VXQoYSkuJGltcGxpY2l0LG09R2UoMykuaW5kZXg7cmV0dXJuIFp0'@;
put 'KEdlKDIpLmdvVG9Mb2dMaW5lKGgsInJlcXVlc3RfIittLCJlcnJvciIpKX0pLHllKDEsImJ1dHRvbiIsMjIpLFllKDIpLENlKCkoKX1pZigyJmwpe2NvbnN0IGE9Yy4kaW1wbGljaXQ7U2UoMiksd3IoIiAiLGEsIiAiKX19Y29uc3QgT3VlPWZ1bmN0aW9uKCl7cmV0dXJuW119O2Z1bmN0aW9u'@;
put 'IFJWZShsLGMpe2lmKDEmbCYmKHllKDAsImNsci10cmVlLW5vZGUiLDE4KSx0bigxLCJjbHItaWNvbiIsMTkpLFllKDIpLHR0KDMsSVZlLDMsMSwiY2xyLXRyZWUtbm9kZSIsMjApLENlKCkpLDImbCl7Y29uc3QgYT1HZSgyKS4kaW1wbGljaXQ7U2UoMiksd3IoIiBFcnJvcnMgKCIsYS5sb2dF'@;
put 'cnJvcnMubGVuZ3RoLCIpICIpLFNlKDEpLFJlKCJuZ0Zvck9mIixhLmxvZ0Vycm9yc3x8WGEoMixPdWUpKX19ZnVuY3Rpb24gTFZlKGwsYyl7aWYoMSZsKXtjb25zdCBhPVpuKCk7eWUoMCwiY2xyLXRyZWUtbm9kZSIsMjEpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPVV0KGEpLiRp'@;
put 'bXBsaWNpdCxtPUdlKDMpLmluZGV4O3JldHVybiBadChHZSgyKS5nb1RvTG9nTGluZShoLCJyZXF1ZXN0XyIrbSwid2FybmluZyIpKX0pLHllKDEsImJ1dHRvbiIsMjIpLFllKDIpLENlKCkoKX1pZigyJmwpe2NvbnN0IGE9Yy4kaW1wbGljaXQ7U2UoMiksd3IoIiAiLGEsIiAiKX19ZnVuY3Rp'@;
put 'b24gUFZlKGwsYyl7aWYoMSZsJiYoeWUoMCwiY2xyLXRyZWUtbm9kZSIsMTgpLHRuKDEsImNsci1pY29uIiwyMyksWWUoMiksdHQoMyxMVmUsMywxLCJjbHItdHJlZS1ub2RlIiwyMCksQ2UoKSksMiZsKXtjb25zdCBhPUdlKDIpLiRpbXBsaWNpdDtTZSgyKSx3cigiIFdhcm5pbmdzICgiLGEu'@;
put 'bG9nV2FybmluZ3MubGVuZ3RoLCIpICIpLFNlKDEpLFJlKCJuZ0Zvck9mIixhLmxvZ1dhcm5pbmdzfHxYYSgyLE91ZSkpfX1mdW5jdGlvbiBGVmUobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJidXR0b24iLDI0KSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7VXQoYSk7Y29uc3QgZD1H'@;
put 'ZSgyKS4kaW1wbGljaXQ7cmV0dXJuIFp0KEdlKDIpLmRvd25sb2FkTG9nKGQubG9nRmlsZSkpfSksWWUoMSwiIERvd25sb2FkICIpLENlKCl9fWZ1bmN0aW9uIEhWZShsLGMpe2lmKDEmbCYmKHllKDAsImNsci10YWItY29udGVudCIpKDEsImNsci10cmVlIiksdHQoMixSVmUsNCwzLCJjbHIt'@;
put 'dHJlZS1ub2RlIiwxNSksdHQoMyxQVmUsNCwzLCJjbHItdHJlZS1ub2RlIiwxNSksQ2UoKSx0big0LCJkaXYiLDE2KSx0dCg1LEZWZSwyLDAsImJ1dHRvbiIsMTcpLENlKCkpLDImbCl7Y29uc3QgYT1HZSgpLiRpbXBsaWNpdDtTZSgyKSxSZSgibmdJZiIsYS5sb2dFcnJvcnMpLFNlKDEpLFJl'@;
put 'KCJuZ0lmIixhLmxvZ1dhcm5pbmdzKSxTZSgxKSxSZSgiaW5uZXJIVE1MIixhLmxvZ0ZpbGUsdmgpLFNlKDEpLFJlKCJuZ0lmIiwobnVsbD09YS5sb2dGaWxlP251bGw6YS5sb2dGaWxlLmxlbmd0aCk+MCl9fWZ1bmN0aW9uIE5WZShsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImJ1'@;
put 'dHRvbiIsMjQpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtVdChhKTtjb25zdCBkPUdlKDIpLiRpbXBsaWNpdDtyZXR1cm4gWnQoR2UoMikuZG93bmxvYWRTb3VyY2VDb2RlKGQuc291cmNlQ29kZSkpfSksWWUoMSwiIERvd25sb2FkICIpLENlKCl9fWZ1bmN0aW9uIFZWZShsLGMpe2lmKDEmbCYm'@;
put 'KHllKDAsImNsci10YWItY29udGVudCIpKDEsImRpdiIsMjUpLFllKDIpLENlKCksdHQoMyxOVmUsMiwwLCJidXR0b24iLDE3KSxDZSgpKSwyJmwpe2NvbnN0IGE9R2UoKS4kaW1wbGljaXQ7U2UoMiksYXIoYS5zb3VyY2VDb2RlKSxTZSgxKSxSZSgibmdJZiIsKG51bGw9PWEuc291cmNlQ29k'@;
put 'ZT9udWxsOmEuc291cmNlQ29kZS5sZW5ndGgpPjApfX1mdW5jdGlvbiBCVmUobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJidXR0b24iLDI0KSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7VXQoYSk7Y29uc3QgZD1HZSgyKS4kaW1wbGljaXQ7cmV0dXJuIFp0KEdlKDIpLmRvd25sb2Fk'@;
put 'R2VuZXJhdGVkQ29kZShkLmdlbmVyYXRlZENvZGUpKX0pLFllKDEsIiBEb3dubG9hZCAiKSxDZSgpfX1mdW5jdGlvbiBqVmUobCxjKXtpZigxJmwmJih5ZSgwLCJjbHItdGFiLWNvbnRlbnQiKSgxLCJkaXYiLDI1KSxZZSgyKSxDZSgpLHR0KDMsQlZlLDIsMCwiYnV0dG9uIiwxNyksQ2UoKSks'@;
put 'MiZsKXtjb25zdCBhPUdlKCkuJGltcGxpY2l0O1NlKDIpLHdyKCIgIixhLmdlbmVyYXRlZENvZGUsIiAiKSxTZSgxKSxSZSgibmdJZiIsKG51bGw9PWEuZ2VuZXJhdGVkQ29kZT9udWxsOmEuZ2VuZXJhdGVkQ29kZS5sZW5ndGgpPjApfX1mdW5jdGlvbiB6VmUobCxjKXtpZigxJmwpe2NvbnN0'@;
put 'IGE9Wm4oKTt5ZSgwLCJkaXYiLDMxKSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD1VdChhKS4kaW1wbGljaXQ7cmV0dXJuIFp0KEdlKDMpLiRpbXBsaWNpdC5zZWxlY3RlZFRhYmxlPWgua2V5KX0pLFllKDEpLENlKCl9aWYoMiZsKXtjb25zdCBhPWMuJGltcGxpY2l0O2dyKCJzZWxl'@;
put 'Y3RlZCIsR2UoMykuJGltcGxpY2l0LnNlbGVjdGVkVGFibGU9PT1hLmtleSksU2UoMSksd3IoIiAiLGEua2V5LCIgIil9fWZ1bmN0aW9uIFVWZShsLGMpe2lmKDEmbCYmKHllKDAsImNsci1kcm9wZG93bi1tZW51IiksdHQoMSx6VmUsMiwzLCJkaXYiLDMwKSx3bCgyLCJrZXl2YWx1ZSIpLENl'@;
put 'KCkpLDImbCl7Y29uc3QgYT1HZSgyKS4kaW1wbGljaXQ7U2UoMSksUmUoIm5nRm9yT2YiLEpzKDIsMSxhLlNBU1dPUkspKX19ZnVuY3Rpb24gWlZlKGwsYyl7aWYoMSZsJiYoeWUoMCwicCIsMzUpKDEsInN0cm9uZyIpLFllKDIpLENlKCkoKSksMiZsKXtjb25zdCBhPUdlKDMpLiRpbXBsaWNp'@;
put 'dDtTZSgyKSx3cigiIixhLnNlbGVjdGVkVGFibGUsIiAoZmlyc3QgMTAgcm93cykgIil9fWZ1bmN0aW9uIFlWZShsLGMpe2lmKDEmbCYmKHllKDAsInRoIiksWWUoMSksQ2UoKSksMiZsKXtjb25zdCBhPWMuJGltcGxpY2l0O1NlKDEpLHdyKCIgIixhLmtleSwiICIpfX1mdW5jdGlvbiBXVmUo'@;
put 'bCxjKXtpZigxJmwmJih5ZSgwLCJ0ZCIpLFllKDEpLENlKCkpLDImbCl7Y29uc3QgYT1jLiRpbXBsaWNpdCxmPUdlKCkuJGltcGxpY2l0O1NlKDEpLHdyKCIgIixmW2Eua2V5XSwiICIpfX1mdW5jdGlvbiBHVmUobCxjKXtpZigxJmwmJih5ZSgwLCJ0ciIpLHR0KDEsV1ZlLDIsMSwidGQiLDM3'@;
put 'KSx3bCgyLCJrZXl2YWx1ZSIpLENlKCkpLDImbCl7Y29uc3QgYT1HZSg0KS4kaW1wbGljaXQ7U2UoMSksUmUoIm5nRm9yT2YiLEpzKDIsMSxhLlNBU1dPUktbYS5zZWxlY3RlZFRhYmxlXS5maXJzdDEwcm93c1swXSkpfX1mdW5jdGlvbiAkVmUobCxjKXtpZigxJmwmJih5ZSgwLCJ0YWJsZSIs'@;
put 'MzYpKDEsInRoZWFkIikoMiwidHIiKSx0dCgzLFlWZSwyLDEsInRoIiwzNyksd2woNCwia2V5dmFsdWUiKSxDZSgpKCkseWUoNSwidGJvZHkiKSx0dCg2LEdWZSwzLDMsInRyIiwzNyksQ2UoKSgpKSwyJmwpe2NvbnN0IGE9R2UoMykuJGltcGxpY2l0O1NlKDMpLFJlKCJuZ0Zvck9mIixKcyg0'@;
put 'LDIsYS5TQVNXT1JLW2Euc2VsZWN0ZWRUYWJsZV0uZmlyc3QxMHJvd3NbMF0pKSxTZSgzKSxSZSgibmdGb3JPZiIsYS5TQVNXT1JLW2Euc2VsZWN0ZWRUYWJsZV0uZmlyc3QxMHJvd3MpfX1mdW5jdGlvbiBLVmUobCxjKXtpZigxJmwmJih5ZSgwLCJjbHItdGFiLWNvbnRlbnQiKSx0dCgxLFpW'@;
put 'ZSwzLDEsInAiLDMyKSx5ZSgyLCJkaXYiLDMzKSx0dCgzLCRWZSw3LDQsInRhYmxlIiwzNCksQ2UoKSgpKSwyJmwpe2NvbnN0IGE9R2UoMikuJGltcGxpY2l0O1NlKDEpLFJlKCJuZ0lmIixhLnNlbGVjdGVkVGFibGUpLFNlKDIpLFJlKCJuZ0lmIixhLnNlbGVjdGVkVGFibGUpfX1mdW5jdGlv'@;
put 'biBxVmUobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJjbHItdGFiIikoMSwiY2xyLWRyb3Bkb3duIiwyNikoMiwiYnV0dG9uIiwyNyksWWUoMywiIFNBUyBXb3JrIFRhYmxlcyAiKSx0big0LCJjbHItaWNvbiIsMjgpLENlKCksdHQoNSxVVmUsMywzLCJjbHItZHJvcGRvd24tbWVu'@;
put 'dSIsMjkpLENlKCksdHQoNixLVmUsNCwyLCJuZy10ZW1wbGF0ZSIsMTIpLEV0KCJjbHJJZkFjdGl2ZUNoYW5nZSIsZnVuY3Rpb24oZCl7cmV0dXJuIFV0KGEpLFp0KEdlKDMpLnRhYmxlc0FjdGl2ZT1kKX0pLENlKCl9aWYoMiZsKXtjb25zdCBhPUdlKDMpO1NlKDEpLFJlKCJjbHJDbG9zZU1l'@;
put 'bnVPbkl0ZW1DbGljayIsITApLFNlKDUpLFJlKCJjbHJJZkFjdGl2ZSIsYS50YWJsZXNBY3RpdmUpfX1mdW5jdGlvbiBYVmUobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJjbHItc3RhY2stYmxvY2siLDgpKDEsImNsci1zdGFjay1sYWJlbCIpLFllKDIpLHllKDMsInNwYW4iLDkp'@;
put 'LHR0KDQsT1ZlLDIsMCwic3BhbiIsNSksdHQoNSxEVmUsMiwwLCJzcGFuIiw1KSxDZSgpKCkseWUoNiwiY2xyLXN0YWNrLWNvbnRlbnQiKSxZZSg3KSxDZSgpLHllKDgsImNsci1zdGFjay1ibG9jayIsMTApKDksImNsci1zdGFjay1jb250ZW50IikoMTAsImNsci10YWJzIikoMTEsImNsci10'@;
put 'YWIiKSgxMiwiYnV0dG9uIiwxMSksWWUoMTMsIlNBUyBMb2ciKSxDZSgpLHR0KDE0LEhWZSw2LDQsIm5nLXRlbXBsYXRlIiwxMiksRXQoImNscklmQWN0aXZlQ2hhbmdlIixmdW5jdGlvbihkKXtyZXR1cm4gVXQoYSksWnQoR2UoMikuc2FzTG9nQWN0aXZlPWQpfSksQ2UoKSx5ZSgxNSwiY2xy'@;
put 'LXRhYiIpKDE2LCJidXR0b24iLDExKSxZZSgxNywiU0FTIFNvdXJjZSBDb2RlIiksQ2UoKSx0dCgxOCxWVmUsNCwyLCJuZy10ZW1wbGF0ZSIsMTIpLEV0KCJjbHJJZkFjdGl2ZUNoYW5nZSIsZnVuY3Rpb24oZCl7cmV0dXJuIFV0KGEpLFp0KEdlKDIpLnNhc1NvdXJjZUNvZGVBY3RpdmU9ZCl9'@;
put 'KSxDZSgpLHllKDE5LCJjbHItdGFiIikoMjAsImJ1dHRvbiIsMTEpLFllKDIxLCJTQVMgR2VuZXJhdGVkIENvZGUiKSxDZSgpLHR0KDIyLGpWZSw0LDIsIm5nLXRlbXBsYXRlIiwxMiksRXQoImNscklmQWN0aXZlQ2hhbmdlIixmdW5jdGlvbihkKXtyZXR1cm4gVXQoYSksWnQoR2UoMikuc2Fz'@;
put 'R2VuZXJhdGVkQ29kZUFjdGl2ZT1kKX0pLENlKCksdHQoMjMscVZlLDcsMiwiY2xyLXRhYiIsNSksQ2UoKSgpKCkoKX1pZigyJmwpe2NvbnN0IGE9Yy4kaW1wbGljaXQsZj1jLmluZGV4LGQ9R2UoMik7UmUoImlkIiwicmVxdWVzdF8iK2YpKCJjbHJTdGFja1ZpZXdMZXZlbCIsMSkoImNsclN0'@;
put 'YWNrVmlld1NldHNpemUiLDMpKCJjbHJTdGFja1ZpZXdQb3NpbnNldCIsMyksU2UoMiksd3IoIiAiLGEuc2VydmljZUxpbmssIiAiKSxTZSgyKSxSZSgibmdJZiIsKG51bGw9PWEubG9nV2FybmluZ3M/bnVsbDphLmxvZ1dhcm5pbmdzLmxlbmd0aCk+MCksU2UoMSksUmUoIm5nSWYiLChudWxs'@;
put 'PT1hLmxvZ0Vycm9ycz9udWxsOmEubG9nRXJyb3JzLmxlbmd0aCk+MCksU2UoMiksYXIoYS5wYXJzZWRUaW1lc3RhbXApLFNlKDcpLFJlKCJjbHJJZkFjdGl2ZSIsZC5zYXNMb2dBY3RpdmUpLFNlKDQpLFJlKCJjbHJJZkFjdGl2ZSIsZC5zYXNTb3VyY2VDb2RlQWN0aXZlKSxTZSg0KSxSZSgi'@;
put 'Y2xySWZBY3RpdmUiLGQuc2FzR2VuZXJhdGVkQ29kZUFjdGl2ZSksU2UoMSksUmUoIm5nSWYiLGEuU0FTV09SSyl9fWZ1bmN0aW9uIEpWZShsLGMpe2lmKDEmbCYmKHllKDAsImNsci1zdGFjay12aWV3IiksdHQoMSxYVmUsMjQsMTIsImNsci1zdGFjay1ibG9jayIsNyksQ2UoKSksMiZsKXtj'@;
put 'b25zdCBhPUdlKCk7U2UoMSksUmUoIm5nRm9yT2YiLGEuc2FzanNSZXF1ZXN0cyl9fWxldCBRVmU9KCgpPT57Y2xhc3MgbHtnZXQgb3BlbmVkKCl7cmV0dXJuIHRoaXMuX29wZW5lZH1zZXQgb3BlbmVkKGEpe3RoaXMuX29wZW5lZD1hLGEmJnRoaXMubW9kYWxPcGVuZWQoKSx0aGlzLmxvZ2dl'@;
put 'clNlcnZpY2UubG9nKHRoaXMuc2FzanNSZXF1ZXN0cyl9Y29uc3RydWN0b3IoYSxmLGQpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMubG9nZ2VyU2VydmljZT1mLHRoaXMuaGVscGVyU2VydmljZT1kLHRoaXMuX29wZW5lZD0hMSx0aGlzLm9wZW5lZENoYW5nZT1uZXcgeHIsdGhpcy5zYXNMb2dB'@;
put 'Y3RpdmU9ITAsdGhpcy5zYXNTb3VyY2VDb2RlQWN0aXZlPSExLHRoaXMuc2FzR2VuZXJhdGVkQ29kZUFjdGl2ZT0hMSx0aGlzLnRhYmxlc0FjdGl2ZT0hMSx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLHRoaXMuc2FzanNSZXF1ZXN0cz1bXX1uZ09u'@;
put 'SW5pdCgpe31wYXJzZUxvZ1RpbWVzdGFtcChhKXtyZXR1cm5gJHt0aGlzLmZvcm1hdFRpbWVzdGFtcChhKX0gJHt0aGlzLnRpbWVzdGFtcEZyb21Ob3coYSl9YH1jdXRBcHBMb2MoYSl7cmV0dXJuIGEucmVwbGFjZSh0aGlzLnNhc2pzQ29uZmlnLmFwcExvYysiLyIsIiIpfWZvcm1hdFRpbWVz'@;
put 'dGFtcChhKXtyZXR1cm4gS28oYSkuZm9ybWF0KCk/S28oYSkuZm9ybWF0KCJkZGRkLCBNTU1NIERvIFlZWVksIGg6bW06c3MgYSIpOmF9dGltZXN0YW1wRnJvbU5vdyhhKXtyZXR1cm4gS28oYSkuZm9ybWF0KCk/YCAoJHtLbyhhKS5mcm9tTm93KCl9KWA6IiJ9bW9kYWxPcGVuQ2hhbmdlKGEp'@;
put 'e3RoaXMub3BlbmVkPWEsdGhpcy5vcGVuZWRDaGFuZ2UuZW1pdCh0aGlzLm9wZW5lZCl9bW9kYWxPcGVuZWQoKXt0aGlzLnNhc2pzUmVxdWVzdHM9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc1JlcXVlc3RzKCk7Zm9yKGxldCBhIG9mIHRoaXMuc2FzanNSZXF1ZXN0cyl0aGlzLnBhcnNlRXJyb3Jz'@;
put 'QW5kV2FybmluZ3MoYSksYS5zZXJ2aWNlTGluaz10aGlzLmN1dEFwcExvYyhhLnNlcnZpY2VMaW5rKSxhLnBhcnNlZFRpbWVzdGFtcD10aGlzLnBhcnNlTG9nVGltZXN0YW1wKGEudGltZXN0YW1wKX1nb1RvTG9nTGluZShhLGYsZCl7bGV0IGg9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChg'@;
put 'IyR7Zn0gLmxvZy13cmFwcGVyLnNhc2xvZyBmb250YCksbT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtmfSAubG9nLXdyYXBwZXIuc2FzbG9nYCk7Zm9yKGxldCBfIG9mIGgpXy50ZXh0Q29udGVudC5pbmNsdWRlcyhhKSYmKG0uc2Nyb2xsVG9wPV8ub2Zmc2V0VG9wLW0ub2Zmc2V0VG9w'@;
put 'LF8uc3R5bGUuYmFja2dyb3VuZENvbG9yPSIjNjFhMjIwMmIiLHNldFRpbWVvdXQoKCk9PntfLnN0eWxlPSIifSwzZTMpKX1wYXJzZUVycm9yc0FuZFdhcm5pbmdzKGEpe3ZhciBmPXRoaXM7cmV0dXJuIHlpKGZ1bmN0aW9uKigpe2lmKCFhfHwhYS5sb2dGaWxlfHwic3RyaW5nIiE9dHlwZW9m'@;
put 'IGEubG9nRmlsZXx8dm9pZCAwIT09YS5sb2dFcnJvcnN8fHZvaWQgMCE9PWEubG9nV2FybmluZ3MpcmV0dXJuO2xldCBkPVtdLGg9W10sbT1hLmxvZ0ZpbGUuc3BsaXQoIlxuIik7Zm9yKGxldCBfPTA7XzxtLmxlbmd0aDtfKyspe2lmKC88Lio+RVJST1IvZ20udGVzdChtW19dKSl7bGV0IE89'@;
put 'bVtfXS5zdWJzdHJpbmcobVtfXS5pbmRleE9mKCJFIiksbVtfXS5sZW5ndGgtMSk7ZC5wdXNoKE8pfWVsc2UvXkVSUk9SL2dtLnRlc3QobVtfXSkmJihkLnB1c2gobVtfXSksbVtfXT0iPGZvbnQ+IittW19dKyI8L2ZvbnQ+Iik7aWYoLzwuKj5XQVJOSU5HL2dtLnRlc3QobVtfXSkpe2xldCBP'@;
put 'PW1bX10uc3Vic3RyaW5nKG1bX10uaW5kZXhPZigiVyIpLG1bX10ubGVuZ3RoLTEpO2gucHVzaChPKX1lbHNlL15XQVJOSU5HL2dtLnRlc3QobVtfXSkmJihoLnB1c2gobVtfXSksbVtfXT0iPGZvbnQ+IittW19dKyI8L2ZvbnQ+Iil9Zi5sb2dnZXJTZXJ2aWNlLmxvZyhoKSxhLmxvZ0ZpbGU9'@;
put 'bS5qb2luKCJcbiIpLGEubG9nRXJyb3JzPWQsYS5sb2dXYXJuaW5ncz1ofSkoKX1kb3dubG9hZExvZyhhKXtjb25zdCBmPShuZXcgRGF0ZSkudmFsdWVPZigpO3RoaXMuaGVscGVyU2VydmljZS5kb3dubG9hZFRleHRGaWxlKGBsb2dGaWxlLSR7Zn1gLGEpfWRvd25sb2FkU291cmNlQ29kZShh'@;
put 'KXtjb25zdCBmPShuZXcgRGF0ZSkudmFsdWVPZigpO3RoaXMuaGVscGVyU2VydmljZS5kb3dubG9hZFRleHRGaWxlKGBzb3VyY2VDb2RlLSR7Zn1gLGEpfWRvd25sb2FkR2VuZXJhdGVkQ29kZShhKXtjb25zdCBmPShuZXcgRGF0ZSkudmFsdWVPZigpO3RoaXMuaGVscGVyU2VydmljZS5kb3du'@;
put 'bG9hZFRleHRGaWxlKGBnZW5lcmF0ZWRDb2RlLSR7Zn1gLGEpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChwbCkscnQoeTEpLHJ0KFB1KSl9LGwuXHUwMjc1Y21wPWtyKHt0eXBlOmwsc2VsZWN0b3JzOltbImFwcC1yZXF1ZXN0cy1tb2RhbCJd'@;
put 'XSxpbnB1dHM6e29wZW5lZDoib3BlbmVkIn0sb3V0cHV0czp7b3BlbmVkQ2hhbmdlOiJvcGVuZWRDaGFuZ2UifSxkZWNsczo4LHZhcnM6NCxjb25zdHM6W1siY2xyTW9kYWxTaXplIiwieGwiLDEsInJlcXVlc3RzLW1vZGFsIiwzLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbE9wZW5DaGFuZ2Ui'@;
put 'XSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibXQtMCIsImQtaW5saW5lLWJsb2NrIl0sWzEsIm1vZGFsLWJvZHkiLCJoLTcwdmgiXSxbImNsYXNzIiwibm8tcmVxcyIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsIm5vLXJlcXMiXSxbMywiaWQiLCJjbHJTdGFja1ZpZXdMZXZlbCIsImNsclN0YWNr'@;
put 'Vmlld1NldHNpemUiLCJjbHJTdGFja1ZpZXdQb3NpbnNldCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsImlkIiwiY2xyU3RhY2tWaWV3TGV2ZWwiLCJjbHJTdGFja1ZpZXdTZXRzaXplIiwiY2xyU3RhY2tWaWV3UG9zaW5zZXQiXSxbMSwibWwtMTAiXSxbMSwiY29udGVudCJdLFsiY2xyVGFi'@;
put 'TGluayIsIiJdLFszLCJjbHJJZkFjdGl2ZSIsImNscklmQWN0aXZlQ2hhbmdlIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsMSwibWItNSIsImNvbG9yLWdyZWVuIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLXRyaWFuZ2xlIiwxLCJtYi01IiwiY29sb3ItcmVkIl0sWyJjbGFzcyIs'@;
put 'ImVyci1saW5rcyIsNCwibmdJZiJdLFsxLCJsb2ctd3JhcHBlciIsInNhc2xvZyIsMywiaW5uZXJIVE1MIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJidG4gYnRuLWxpbmsiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImVyci1saW5rcyJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi10cmlh'@;
put 'bmdsZSIsMSwiY29sb3ItcmVkIl0sWzMsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywiY2xpY2siXSxbMSwiY2xyLXRyZWVub2RlLWxpbmsiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwxLCJjb2xvci1ncmVlbiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRu'@;
put 'LWxpbmsiLDMsImNsaWNrIl0sWzEsImxvZy13cmFwcGVyIl0sWyJjbHJUYWJMaW5rIiwiIiwxLCJ3b3JrLXRhYmxlcy1kcm9wZG93biIsMywiY2xyQ2xvc2VNZW51T25JdGVtQ2xpY2siXSxbImNsckRyb3Bkb3duVHJpZ2dlciIsIiJdLFsic2hhcGUiLCJjYXJldCBkb3duIl0sWzQsImNscklm'@;
put 'T3BlbiJdLFsiY2xhc3MiLCJkcm9wZG93bi1pdGVtIiwiY2xyRHJvcGRvd25JdGVtIiwiIiwzLCJzZWxlY3RlZCIsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMSwiZHJvcGRvd24taXRlbSIsMywiY2xpY2siXSxbImNsYXNzIiwibXQtMTAiLDQs'@;
put 'Im5nSWYiXSxbMSwibWluLWgtNTB2aCJdLFsiY2xhc3MiLCJ0YWJsZSBtdC0xMCIsNCwibmdJZiJdLFsxLCJtdC0xMCJdLFsxLCJ0YWJsZSIsIm10LTEwIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGYpezEmYSYmKHllKDAsImNsci1tb2RhbCIsMCksRXQo'@;
put 'ImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIGYubW9kYWxPcGVuQ2hhbmdlKGgpfSkseWUoMSwiaDMiLDEpLFllKDIsIiBSZXF1ZXN0IEhpc3RvcnkgIikseWUoMywicCIsMiksWWUoNCksQ2UoKSgpLHllKDUsImRpdiIsMyksdHQoNixUVmUsMiwwLCJwIiw0KSx0dCg3'@;
put 'LEpWZSwyLDEsImNsci1zdGFjay12aWV3Iiw1KSxDZSgpKCkpLDImYSYmKFJlKCJjbHJNb2RhbE9wZW4iLGYub3BlbmVkKSxTZSg0KSx3cigiQXBwIExvY2F0aW9uOiAiLGYuc2FzanNDb25maWcuYXBwTG9jLCIiKSxTZSgyKSxSZSgibmdJZiIsKG51bGw9PWYuc2FzanNSZXF1ZXN0cz9udWxs'@;
put 'OmYuc2FzanNSZXF1ZXN0cy5sZW5ndGgpPDEpLFNlKDEpLFJlKCJuZ0lmIixmLm9wZW5lZCYmKG51bGw9PWYuc2FzanNSZXF1ZXN0cz9udWxsOmYuc2FzanNSZXF1ZXN0cy5sZW5ndGgpPjApKX0sZGVwZW5kZW5jaWVzOltSYSwkaSxFNyxZc2UsYVosWnNlLERkLExmLGk1LFJsLE1jLGtjLHVT'@;
put 'LHhkLHU1LGY1LFQ3LGM1LGw1LEE3LGEzLG81LGE1LHg3LFVPXSxzdHlsZXM6WyIucmVxdWVzdHMtbW9kYWwgLm1vZGFsLWhlYWRlciAuY2xvc2UgY2xyLWljb257ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9ICAucmVxdWVzdHMtbW9kYWwgLm1vZGFsLWNvbnRlbnR7cGFkZGluZzoyMHB4IDEw'@;
put 'cHggNXB4fSAgLndvcmstdGFibGVzLWRyb3Bkb3duIGJ1dHRvbntjb2xvcjp2YXIoLS1jbHItbmF2LWxpbmstY29sb3IsICM4YzhjOGMpIWltcG9ydGFudH0gIC5zdGFjay12aWV3e2hlaWdodDphdXRvIWltcG9ydGFudDttYXNrLWltYWdlOm5vbmUhaW1wb3J0YW50Oy13ZWJraXQtbWFzay1p'@;
put 'bWFnZTpub25lIWltcG9ydGFudH0gIC5jb250ZW50IGNsci1pY29ue21hcmdpbi1ib3R0b206NXB4fSAgLmNvbnRlbnQgcHJle3dvcmQtYnJlYWs6YnJlYWstYWxsO3doaXRlLXNwYWNlOnByZS13cmFwO21heC1oZWlnaHQ6aW5pdGlhbDtvdmVyZmxvdzp2aXNpYmxlO2JvcmRlcjowfSAgLmNv'@;
put 'bnRlbnQgLnN0YWNrLWJsb2NrLWxhYmVse3dpZHRoOjEwMCU7cGFkZGluZy1sZWZ0Oi42cmVtIWltcG9ydGFudH0gIC5jb250ZW50IC5zdGFjay1ibG9jay1sYWJlbCAuc3RhY2stdmlldy1rZXl7ZGlzcGxheTpub25lIWltcG9ydGFudH0gIC5lcnItbGlua3MgLmNsci10cmVlbm9kZS1jaGls'@;
put 'ZHJlbnttYXgtaGVpZ2h0OjU1cHg7b3ZlcmZsb3c6YXV0b30uZHJvcGRvd24taXRlbS5zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojZDhlM2U5fS5sb2ctd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWluLWhlaWdodDo1MHB4O3BhZGRpbmc6MTBweDttYXJnaW4t'@;
put 'dG9wOjEwcHg7d2hpdGUtc3BhY2U6cHJlLXdyYXA7Ym9yZGVyLXJhZGl1czozcHg7Ym9yZGVyOjFweCBzb2xpZCAjZTJlMmUyO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYjtoZWlnaHQ6NDh2aDtvdmVyZmxvdzphdXRvfS5uby1yZXFzW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9wOjFw'@;
put 'eCBzb2xpZCByZ2JhKDAsMCwwLC4xMDE5NjA3ODQzKTtwYWRkaW5nLXRvcDo1cHg7dGV4dC1hbGlnbjpjZW50ZXJ9Il19KSxsfSkoKTtjbGFzcyBlQmV7Y29uc3RydWN0b3IoKXt0aGlzLnNhc1NlcnZpY2U9bnVsbCx0aGlzLm1lc3NhZ2U9IiIsdGhpcy5kZXRhaWxzPW5ldyBEdWV9fWNsYXNz'@;
put 'IER1ZXt9ZnVuY3Rpb24gdEJlKGwsYyl7aWYoMSZsJiYoeWUoMCwicCIsOCksWWUoMSwiIFNBUyBTZXJ2aWNlOiAiKSx5ZSgyLCJzdHJvbmciKSxZZSgzKSxDZSgpKCkpLDImbCl7Y29uc3QgYT1HZSgpO1NlKDMpLGFyKGEuZGF0YS5zYXNTZXJ2aWNlKX19ZnVuY3Rpb24gbkJlKGwsYyl7aWYo'@;
put 'MSZsJiYoeWUoMCwiZGl2Iiw5KSgxLCJwIikoMiwic3Ryb25nIiksWWUoMywiU1lTV0FSTklOR1RFWFQ6IiksQ2UoKSxZZSg0KSxDZSgpLHllKDUsInAiKSg2LCJzdHJvbmciKSxZZSg3LCJTWVNFUlJPUlRFWFQ6IiksQ2UoKSxZZSg4KSxDZSgpLHllKDksInAiKSgxMCwic3Ryb25nIiksWWUo'@;
put 'MTEsIk1BQzoiKSxDZSgpLFllKDEyKSxDZSgpKCkpLDImbCl7Y29uc3QgYT1HZSgpO1NlKDQpLHdyKCIgIixhLmRhdGEuZGV0YWlscy5TWVNXQVJOSU5HVEVYVCwiIiksU2UoNCksd3IoIiAiLGEuZGF0YS5kZXRhaWxzLlNZU0VSUk9SVEVYVCwiIiksU2UoNCksd3IoIiAiLGEuZGF0YS5kZXRh'@;
put 'aWxzLk1BQywiIil9fWZ1bmN0aW9uIHJCZShsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImJ1dHRvbiIsMTApLEV0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gVXQoYSksWnQoR2UoKS5vcGVuQ29uZmlndXJhdG9yKCkpfSksWWUoMSwiIE9wZW4gY29uZmlndXJhdG9yICIpLENl'@;
put 'KCl9fWZ1bmN0aW9uIGlCZShsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImJ1dHRvbiIsMTApLEV0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gVXQoYSksWnQoR2UoKS5vcGVuUmVxdWVzdHNNb2RhbCgpKX0pLFllKDEsIiBPcGVuIHJlcXVlc3RzIG1vZGFsICIpLENlKCl9fWZ1'@;
put 'bmN0aW9uIG9CZShsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImJ1dHRvbiIsMTApLEV0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gVXQoYSksWnQoR2UoKS5kb3dubG9hZExvZygpKX0pLFllKDEsIiBEb3dubG9hZCBsb2cgIiksQ2UoKX19ZnVuY3Rpb24gYUJlKGwsYyl7aWYo'@;
put 'MSZsKXtjb25zdCBhPVpuKCk7eWUoMCwiYnV0dG9uIiwxMCksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBVdChhKSxadChHZSgpLmNsb3NlQWJvcnRNb2RhbCgpKX0pLFllKDEsIiBDbG9zZSAiKSxDZSgpfX1mdW5jdGlvbiBsQmUobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgw'@;
put 'LCJidXR0b24iLDEwKSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFV0KGEpLFp0KEdlKCkucmVsb2FkKCkpfSksWWUoMSwiIFJlbG9hZCAiKSxDZSgpfX1sZXQgc0JlPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmLGQsaCl7dGhpcy5oZWxwZXJTZXJ2aWNlPWEsdGhpcy5ldmVu'@;
put 'dFNlcnZpY2U9Zix0aGlzLnNhc1NlcnZpY2U9ZCx0aGlzLnJvdXRlcj1oLHRoaXMub25Db25maXJtTW9kYWxDbGljaz1uZXcgeHIsdGhpcy5kYXRhPW5ldyBlQmUsdGhpcy5mb3JjZVJlbG9hZD0hMSx0aGlzLm1vZGFsRW5hYmxlZD0hMCx0aGlzLmRlZmF1bHREYXRhPXttb2RhbFRpdGxlOiJB'@;
put 'Ym9ydCBNZXNzYWdlIixzYXNTZXJ2aWNlOm51bGwsbWVzc2FnZToiIixkZXRhaWxzOm5ldyBEdWV9fW5nT25Jbml0KCl7bGV0IGE9ey4uLnRoaXMuZGVmYXVsdERhdGEsLi4udGhpcy5kYXRhfTt0aGlzLmRhdGE9YX1zaG93Q29uZmlndXJhdG9yQnV0dG9uKGEpe2NvbnN0IGY9dGhpcy5zYXNT'@;
put 'ZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCk7cmV0dXJuIGE/LmluY2x1ZGVzKCJzdGFydHVwc2VydmljZSIpJiZmLnNlcnZlclR5cGU9PT1YdS5ELlNhczl9Y2xvc2VBYm9ydE1vZGFsKCl7dGhpcy5vbkNvbmZpcm1Nb2RhbENsaWNrLmVtaXQoKX1vcGVuQ29uZmlndXJhdG9yKCl7dGhpcy5ldmVu'@;
put 'dFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQoKSx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZGVwbG95IiksdGhpcy5jbG9zZUFib3J0TW9kYWwoKX1kb3dubG9hZExvZygpe3RoaXMuaGVscGVyU2VydmljZS5kb3dubG9hZFRleHRGaWxlKGAke3RoaXMuZGF0YS5zYXNTZXJ2aWNlfS1M'@;
put 'T0dgLHRoaXMuZGF0YS5kZXRhaWxzPy5MT0d8fCJFcnJvciBwYXJzaW5nIHRoZSBsb2ciKX1vcGVuUmVxdWVzdHNNb2RhbCgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9wZW5SZXF1ZXN0c01vZGFsKCl9cmVsb2FkKCl7bG9jYXRpb24ucmVsb2FkKCl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlv'@;
put 'bihhKXtyZXR1cm4gbmV3KGF8fGwpKHJ0KFB1KSxydChScykscnQocGwpLHJ0KExhKSl9LGwuXHUwMjc1Y21wPWtyKHt0eXBlOmwsc2VsZWN0b3JzOltbImFwcC1pbmZvLW1vZGFsIl1dLGlucHV0czp7ZGF0YToiZGF0YSIsZm9yY2VSZWxvYWQ6ImZvcmNlUmVsb2FkIn0sb3V0cHV0czp7b25D'@;
put 'b25maXJtTW9kYWxDbGljazoib25Db25maXJtTW9kYWxDbGljayJ9LGRlY2xzOjEzLHZhcnM6MTIsY29uc3RzOltbImFwcERyYWdOZHJvcCIsIiIsMSwiY2xyLWFib3J0LW1vZGFsIiwzLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbENsb3NhYmxlIiwiY2xyTW9kYWxP'@;
put 'cGVuQ2hhbmdlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWyJjbGFzcyIsInNhc1NlcnZpY2UiLDQsIm5nSWYiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJhYm9ydE1zZyIsMywiaW5uZXJIVE1MIl0sWyJjbGFzcyIsInN5c3RleHQiLDQsIm5nSWYiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwi'@;
put 'YnV0dG9uIiwiY2xhc3MiLCJidG4gYnRuLXByaW1hcnkiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsInNhc1NlcnZpY2UiXSxbMSwic3lzdGV4dCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZil7MSZhJiYo'@;
put 'eWUoMCwiY2xyLW1vZGFsIiwwKSxFdCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gZi5tb2RhbEVuYWJsZWQ9aH0pLHllKDEsImgzIiwxKSxZZSgyKSx0dCgzLHRCZSw0LDEsInAiLDIpLENlKCkseWUoNCwiZGl2IiwzKSx0big1LCJkaXYiLDQpLHR0KDYsbkJlLDEz'@;
put 'LDMsImRpdiIsNSksQ2UoKSx5ZSg3LCJkaXYiLDYpLHR0KDgsckJlLDIsMCwiYnV0dG9uIiw3KSx0dCg5LGlCZSwyLDAsImJ1dHRvbiIsNyksdHQoMTAsb0JlLDIsMCwiYnV0dG9uIiw3KSx0dCgxMSxhQmUsMiwwLCJidXR0b24iLDcpLHR0KDEyLGxCZSwyLDAsImJ1dHRvbiIsNyksQ2UoKSgp'@;
put 'KSwyJmEmJihSZSgiY2xyTW9kYWxPcGVuIixmLm1vZGFsRW5hYmxlZCkoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsQ2xvc2FibGUiLCFmLmZvcmNlUmVsb2FkKSxTZSgyKSx3cigiICIsZi5kYXRhLm1vZGFsVGl0bGUsIiAiKSxTZSgxKSxSZSgibmdJZiIsZi5kYXRhLnNhc1NlcnZp'@;
put 'Y2UmJmYuZGF0YS5zYXNTZXJ2aWNlLmxlbmd0aD4wKSxTZSgyKSxSZSgiaW5uZXJIVE1MIixmLmRhdGEubWVzc2FnZSx2aCksU2UoMSksUmUoIm5nSWYiLG51bGwhPT1mLmRhdGEuZGV0YWlscyksU2UoMiksUmUoIm5nSWYiLGYuc2hvd0NvbmZpZ3VyYXRvckJ1dHRvbihmLmRhdGEuc2FzU2Vy'@;
put 'dmljZSkpLFNlKDEpLFJlKCJuZ0lmIixudWxsIT09Zi5kYXRhLmRldGFpbHMpLFNlKDEpLFJlKCJuZ0lmIiwobnVsbD09Zi5kYXRhLmRldGFpbHM/bnVsbDpmLmRhdGEuZGV0YWlscy5MT0cpJiYobnVsbD09Zi5kYXRhLmRldGFpbHN8fG51bGw9PWYuZGF0YS5kZXRhaWxzLkxPRz9udWxsOmYu'@;
put 'ZGF0YS5kZXRhaWxzLkxPRy50cmltKCkubGVuZ3RoKT4wKSxTZSgxKSxSZSgibmdJZiIsIWYuZm9yY2VSZWxvYWQpLFNlKDEpLFJlKCJuZ0lmIixmLmZvcmNlUmVsb2FkKSl9LGRlcGVuZGVuY2llczpbJGksTWMsa2MsX0ldLHN0eWxlczpbIi5jbHItYWJvcnQtbW9kYWxbX25nY29udGVudC0l'@;
put 'Q09NUCVdICAgICAubW9kYWwtdGl0bGUtd3JhcHBlcnt3aWR0aDoxMDAlfS5jbHItYWJvcnQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICAubW9kYWx7ei1pbmRleDoyMDUwfS5tb2RhbC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9LnNhc1NlcnZpY2Vb'@;
put 'X25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3JpZ2h0OjEwcHg7bWFyZ2luOjB9Lm1vZGFsLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmU7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RjZGNkY30uc3lzdGV4dFtfbmdjb250ZW50LSVD'@;
put 'T01QJV17b3ZlcmZsb3c6YXV0bzttYXJnaW4tdG9wOjIwcHg7cGFkZGluZzoxMHB4IDA7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RjZGNkY30uc3lzdGV4dFtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjA7d29yZC13cmFwOmJyZWFrLXdvcmR9'@;
put 'Il19KSxsfSkoKTtmdW5jdGlvbiB1QmUobCxjKXsxJmwmJihXcigwKSx5ZSgxLCJkaXYiLDIwKSgyLCJkaXYiLDIxKSgzLCJkaXYiLDIyKSx0big0LCJjbHItaWNvbiIsMjMpLENlKCkseWUoNSwiZGl2IiwyNCksWWUoNiwiIERhdGEgQ29udHJvbGxlciAoRlJFRSBUaWVyKSAtIHRvIHVwZ3Jh'@;
put 'ZGUgY29udGFjdCAiKSx0big3LCJjb250YWN0LWxpbmsiLDI1KSxDZSgpKCkoKSx5ZSg4LCJhIiwyNiksWWUoOSwiVXBkYXRlIExpY2VuY2UgS2V5IiksQ2UoKSxHcigpKX1mdW5jdGlvbiBjQmUobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTtXcigwKSx5ZSgxLCJkaXYiLDIwKSgyLCJkaXYi'@;
put 'LDIxKSgzLCJkaXYiLDIyKSx0big0LCJjbHItaWNvbiIsMjMpLENlKCkseWUoNSwiZGl2IiwyNCksWWUoNiwiIERhdGEgQ29udHJvbGxlciAoRlJFRSBUaWVyKSAtIFByb2JsZW0gd2l0aCBsaWNlbmNlICIpLENlKCkoKSgpLHllKDcsImEiLDI3KSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7VXQo'@;
put 'YSk7Y29uc3QgZD1HZSgzKTtyZXR1cm4gWnQoZC5saWNlbmNlUHJvYmxlbURldGFpbHMoZC5saWNlbmNlUHJvYmxlbS52YWx1ZSkpfSksWWUoOCwiTW9yZSBkZXRhaWxzIiksQ2UoKSxHcigpfX1mdW5jdGlvbiBmQmUobCxjKXtpZigxJmwmJih5ZSgwLCJkaXYiLDE5KSx0dCgxLHVCZSwxMCww'@;
put 'LCJuZy1jb250YWluZXIiLDEpLHR0KDIsY0JlLDksMCwibmctY29udGFpbmVyIiwxKSxDZSgpKSwyJmwpe2NvbnN0IGE9R2UoMik7U2UoMSksUmUoIm5nSWYiLG51bGw9PT1hLmxpY2VuY2VQcm9ibGVtLnZhbHVlKSxTZSgxKSxSZSgibmdJZiIsbnVsbCE9PWEubGljZW5jZVByb2JsZW0udmFs'@;
put 'dWUpfX1mdW5jdGlvbiBkQmUobCxjKXsxJmwmJih5ZSgwLCJhIiwyNiksWWUoMSwiVXBkYXRlIExpY2VuY2UgS2V5IiksQ2UoKSl9ZnVuY3Rpb24gaEJlKGwsYyl7aWYoMSZsJiYoeWUoMCwiZGl2IiwyOCkoMSwiZGl2IiwyMCkoMiwiZGl2IiwyMSkoMywiZGl2IiwyMiksdG4oNCwiY2xyLWlj'@;
put 'b24iLDIzKSxDZSgpLHllKDUsImRpdiIsMjQpLFllKDYpLHRuKDcsImNvbnRhY3QtbGluayIsMjUpLFllKDgpLENlKCkoKSgpLHR0KDksZEJlLDIsMCwiYSIsMjkpLENlKCkpLDImbCl7Y29uc3QgYT1HZSgyKTtTZSg2KSwkdSgiIFRoaXMgbGljZW5zZSBrZXkgd2lsbCBleHBpcmUgaW4gIixh'@;
put 'LmxpY2Vuc2VFeHBpcmluZ0RheXMsIiAiLDE9PT1hLmxpY2Vuc2VFeHBpcmluZ0RheXM/ImRheSI6ImRheXMiLCIuIFBsZWFzZSBjb250YWN0ICIpLFNlKDIpLHdyKCIgb3IgeW91ciByZXNlbGxlciB0byBhcnJhbmdlIGFkZGl0aW9uYWwgbGljZW5jZSBmb3Igc2l0ZSBpZCAiLGEuc3lzc2l0'@;
put 'ZS5nZXRWYWx1ZSgpLCIuICIpLFNlKDEpLFJlKCJuZ0lmIiwhYS5mcmVlVGllckJhbm5lcil9fWZ1bmN0aW9uIHBCZShsLGMpezEmbCYmKHllKDAsImEiLDI2KSxZZSgxLCJVcGRhdGUgTGljZW5jZSBLZXkiKSxDZSgpKX1mdW5jdGlvbiBtQmUobCxjKXtpZigxJmwmJih5ZSgwLCJkaXYiLDI4'@;
put 'KSgxLCJkaXYiLDIwKSgyLCJkaXYiLDIxKSgzLCJkaXYiLDIyKSx0big0LCJjbHItaWNvbiIsMjMpLENlKCkseWUoNSwiZGl2IiwyNCksWWUoNiwiIFRoZSByZWdpc3RlcmVkIG51bWJlciBvZiB1c2VycyBleGNlZWRzIHRoZSBsaW1pdCBzcGVjaWZpZWQgZm9yIHlvdXIgbGljZW5zZS4gUGxl'@;
put 'YXNlIGNvbnRhY3QgIiksdG4oNywiY29udGFjdC1saW5rIiwyNSksWWUoOCksQ2UoKSgpKCksdHQoOSxwQmUsMiwwLCJhIiwyOSksQ2UoKSksMiZsKXtjb25zdCBhPUdlKDIpO1NlKDgpLHdyKCIgb3IgeW91ciByZXNlbGxlciB0byBhcnJhbmdlIGFkZGl0aW9uYWwgbGljZW5jZSBmb3Igc2l0'@;
put 'ZSBpZCAiLGEuc3lzc2l0ZS5nZXRWYWx1ZSgpLCIuICIpLFNlKDEpLFJlKCJuZ0lmIiwhYS5saWNlbnNlRXhwaXJpbmdEYXlzJiYhYS5mcmVlVGllckJhbm5lcil9fWZ1bmN0aW9uIGdCZShsLGMpe2lmKDEmbCYmKFdyKDApLHR0KDEsZkJlLDMsMiwiZGl2IiwxNyksdHQoMixoQmUsMTAsNCwi'@;
put 'ZGl2IiwxOCksdHQoMyxtQmUsMTAsMiwiZGl2IiwxOCksR3IoKSksMiZsKXtjb25zdCBhPUdlKCk7U2UoMSksUmUoIm5nSWYiLGEuZnJlZVRpZXJCYW5uZXImJighYS5saWNlbnNlRXhwaXJpbmdEYXlzfHxhLmxpY2Vuc2VFeHBpcmluZ0RheXM8MCkpLFNlKDEpLFJlKCJuZ0lmIixhLmxpY2Vu'@;
put 'c2VFeHBpcmluZ0RheXMmJiFhLmZyZWVUaWVyQmFubmVyKSxTZSgxKSxSZSgibmdJZiIsYS5hcHBPdmVyQ2FwYWNpdHkpfX1mdW5jdGlvbiB2QmUobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJkaXYiLDMwKSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFV0KGEpLFp0KEdl'@;
put 'KCkudG9nZ2xlU2lkZWJhcigpKX0pLHRuKDEsImNsci1pY29uIiwzMSksQ2UoKX19Y29uc3QgeUJlPWZ1bmN0aW9uKCl7cmV0dXJuWyIvIl19O2Z1bmN0aW9uIGJCZShsLGMpezEmbCYmKHllKDAsImEiLDMyKSx0bigxLCJpbWciLDMzKSgyLCJpbWciLDM0KSxDZSgpKSwyJmwmJlJlKCJyb3V0'@;
put 'ZXJMaW5rIixYYSgxLHlCZSkpfWZ1bmN0aW9uIF9CZShsLGMpezEmbCYmKHllKDAsImEiKSx0bigxLCJzcGFuIiwzNSksQ2UoKSl9Y29uc3QgSXVlPWZ1bmN0aW9uKCl7cmV0dXJuWyIvdmlldyJdfSxSdWU9ZnVuY3Rpb24oKXtyZXR1cm5bIi9ob21lIl19LHdaPWZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'WyIvc3VibWl0dGVkIl19O2Z1bmN0aW9uIHdCZShsLGMpezEmbCYmKHllKDAsImNsci1kcm9wZG93bi1tZW51Iiw0MykoMSwiYSIsNDQpLFllKDIsIlZJRVciKSxDZSgpLHllKDMsImEiLDQ0KSxZZSg0LCJFRElUIiksQ2UoKSx5ZSg1LCJhIiw0NCksWWUoNiwiUkVWSUVXIiksQ2UoKSgpKSwy'@;
put 'JmwmJihTZSgxKSxSZSgicm91dGVyTGluayIsWGEoMyxJdWUpKSxTZSgyKSxSZSgicm91dGVyTGluayIsWGEoNCxSdWUpKSxTZSgyKSxSZSgicm91dGVyTGluayIsWGEoNSx3WikpKX1mdW5jdGlvbiBDQmUobCxjKXtpZigxJmwmJihXcigwKSx5ZSgxLCJkaXYiLDM2KSgyLCJjbHItZHJvcGRv'@;
put 'd24iKSgzLCJidXR0b24iLDM3KSxZZSg0LCIgTWVudSAiKSxDZSgpLHR0KDUsd0JlLDcsNiwiY2xyLWRyb3Bkb3duLW1lbnUiLDM4KSxDZSgpKCkseWUoNiwiZGl2IiwzOSkoNywiYSIsNDApLFllKDgsIlZJRVciKSxDZSgpLHllKDksImEiLDQxKSxZZSgxMCwiRURJVCIpLENlKCkseWUoMTEs'@;
put 'ImEiLDQyKSxZZSgxMiwiUkVWSUVXIiksQ2UoKSgpLEdyKCkpLDImbCl7Y29uc3QgYT1HZSgpO1NlKDcpLFJlKCJyb3V0ZXJMaW5rIixYYSg3LEl1ZSkpLFNlKDIpLGdyKCJhY3RpdmUiLGEucm91dGVyLnVybC5pbmNsdWRlcygiZWRpdG9yIil8fGEucm91dGVyLnVybC5pbmNsdWRlcygiZWRp'@;
put 'dC1yZWNvcmQiKXx8YS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJob21lIikpLFJlKCJyb3V0ZXJMaW5rIixYYSg4LFJ1ZSkpLFNlKDIpLGdyKCJhY3RpdmUiLGEucm91dGVyLnVybC5pbmNsdWRlcygic3VibWl0dGVkIil8fGEucm91dGVyLnVybC5pbmNsdWRlcygiYXBwcm92ZSIpfHxhLnJvdXRl'@;
put 'ci51cmwuaW5jbHVkZXMoImhpc3RvcnkiKSksUmUoInJvdXRlckxpbmsiLFhhKDksd1opKX19Y29uc3QgU0JlPWZ1bmN0aW9uKCl7cmV0dXJuWyIvYXBwcm92ZSJdfSxNQmU9ZnVuY3Rpb24oKXtyZXR1cm5bIi9oaXN0b3J5Il19O2Z1bmN0aW9uIGtCZShsLGMpezEmbCYmKHllKDAsIm5hdiIs'@;
put 'NDUpKDEsInVsIiw0NikoMiwibGkiLDQ3KSgzLCJhIiw0MCksWWUoNCwiU1VCTUlUIiksQ2UoKSgpLHllKDUsImxpIiw0NykoNiwiYSIsNDApLFllKDcsIkFQUFJPVkUiKSxDZSgpKCkseWUoOCwibGkiLDQ3KSg5LCJhIiw0MCksWWUoMTAsIkhJU1RPUlkiKSxDZSgpKCkoKSgpKSwyJmwmJihT'@;
put 'ZSgzKSxSZSgicm91dGVyTGluayIsWGEoMyx3WikpLFNlKDMpLFJlKCJyb3V0ZXJMaW5rIixYYSg0LFNCZSkpLFNlKDMpLFJlKCJyb3V0ZXJMaW5rIixYYSg1LE1CZSkpKX1mdW5jdGlvbiBFQmUobCxjKXsxJmwmJnRuKDAsImFwcC1hbGVydHMiKX1mdW5jdGlvbiB4QmUobCxjKXsxJmwmJnRu'@;
put 'KDAsInJvdXRlci1vdXRsZXQiKX1mdW5jdGlvbiBBQmUobCxjKXsxJmwmJnRuKDAsImFwcC1hbGVydHMiKX1mdW5jdGlvbiBUQmUobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJhcHAtaW5mby1tb2RhbCIsNDgpLEV0KCJvbkNvbmZpcm1Nb2RhbENsaWNrIixmdW5jdGlvbigpe2Nv'@;
put 'bnN0IGg9VXQoYSkuJGltcGxpY2l0O3JldHVybiBadChHZSgpLmNsb3NlQWJvcnRNb2RhbChoLmlkKSl9KSxDZSgpfWlmKDImbCl7Y29uc3QgYT1jLiRpbXBsaWNpdCxmPUdlKCk7UmUoImRhdGEiLGEpKCJmb3JjZVJlbG9hZCIsIWYuc3RhcnR1cERhdGFMb2FkZWQmJjE9PT1mLnNhc2pzQWJv'@;
put 'cnRzLmxlbmd0aCl9fWZ1bmN0aW9uIE9CZShsLGMpezEmbCYmKHllKDAsImRpdiIsNTIpLHRuKDEsImRpdiIsNTMpKDIsImRpdiIsNTQpKDMsImRpdiIsNTUpLENlKCkpfWZ1bmN0aW9uIERCZShsLGMpe2lmKDEmbCYmKHllKDAsImRpdiIsNDkpLHRuKDEsImltZyIsNTApLHR0KDIsT0JlLDQs'@;
put 'MCwiZGl2Iiw1MSksQ2UoKSksMiZsKXtjb25zdCBhPUdlKCk7U2UoMiksUmUoIm5nSWYiLG51bGw9PT1hLmFwcEFjdGl2ZSl9fWxldCBJQmU9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhLGYsZCxoLG0sXyxPLFgsYWUpe3RoaXMuYXBwU2VydmljZT1hLHRoaXMubGljZW5jZVNlcnZpY2U9'@;
put 'Zix0aGlzLnJvdXRlcj1kLHRoaXMucm91dGU9aCx0aGlzLmxvY2F0aW9uPW0sdGhpcy5ldmVudFNlcnZpY2U9Xyx0aGlzLmFwcFN0b3JlU2VydmljZT1PLHRoaXMuY2RyPVgsdGhpcy5lbGVtZW50UmVmPWFlLHRoaXMubGljZW5zZUV4cGlyaW5nRGF5cz1udWxsLHRoaXMuc2FzanNBYm9ydHM9'@;
put 'W10sdGhpcy5lZGl0b3JBY3RpdmU9ITEsdGhpcy5hcHByb3ZlQWN0aXZlPSExLHRoaXMuZnJlZVRpZXJCYW5uZXI9dGhpcy5saWNlbmNlU2VydmljZS5pc0FwcEZyZWVUaWVyLnZhbHVlLHRoaXMubGljZW5jZVByb2JsZW09dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlUHJvYmxlbSx0aGlz'@;
put 'LmFwcE92ZXJDYXBhY2l0eT0hMSx0aGlzLmFwcEFjdGl2ZT1udWxsLHRoaXMucmVxdWVzdHNNb2RhbD0hMSx0aGlzLnNob3dSZWdpc3RyYXRpb249ITAsdGhpcy5zdGFydHVwRGF0YUxvYWRlZD0hMSx0aGlzLmRlbW9MaW1pdE5vdGljZT17b3BlbjohMSxmZWF0dXJlTmFtZToiIn0sdGhpcy5z'@;
put 'eXNzaXRlPXRoaXMuYXBwU2VydmljZS5zeXNzaXRlLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMucGFyc2VEY0FkYXB0ZXJTZXR0aW5ncygpLHdpbmRvdy5hcHBpbmZvPSgpPT57Y29uc3QgcGU9dGhpcy5saWNlbmNlU2VydmljZS5nZXRM'@;
put 'aWNlbnNlS2V5RGF0YSgpO2lmKHBlKXtjb25zdCBiZT1LbyhwZS52YWxpZF91bnRpbCwiWVlZWS1NTS1ERCIpLnN0YXJ0T2YoImRheSIpLHhlPUtvKCkuc3RhcnRPZigiZGF5IiksVmU9YmUuZGlmZih4ZSwiZGF5cyIpO3BlLnZhbGlkX3VudGlsKz1gICgke1ZlfSAkezE9PT1WZT8iZGF5Ijoi'@;
put 'ZGF5cyJ9IHJlbWFpbmluZylgLGlzTmFOKFZlKSYmKHBlLnZhbGlkX3VudGlsPSJVbmxpbWl0ZWQiKX1jb25zb2xlLnRhYmxlKHsiQWRhcHRlciB2ZXJzaW9uIjoiNC4zLjYiLCJBcHAgdmVyc2lvbiI6InY2LjEuMCIucmVwbGFjZSgidiIsIiIpLCJCdWlsZCB0aW1lc3RhbXAiOktvKHBhcnNl'@;
put 'SW50KCIxNjkwMjk4MTE3NTQ5IikpLmZvcm1hdCgiREQtTU1NLVlZWVkgSEg6TU0iKSwiLi4uIjoiLi4uIn0pfSx0aGlzLnN1YnNjcmliZVRvTGljZW5zZUV2ZW50cygpLHRoaXMuY29tbWl0VmVyPSJ2Ni4xLjAiLnJlcGxhY2UoInYiLCIiKSsiLmdiYmEyYTZjIixkLmV2ZW50cy5zdWJzY3Jp'@;
put 'YmUocGU9PntpZih0aGlzLnJvdXRlVXJsPXRoaXMucm91dGVyLnVybCx0eXBlb2YgdGhpcy5yb3V0ZVVybDwidSImJnRoaXMucm91dGVVcmwubGVuZ3RoPjQpe2xldCBiZT10aGlzLnJvdXRlVXJsLnNwbGl0KCIvIilbMV07ImVkaXRvciI9PT1iZT8odGhpcy5lcnJUb3A9ITAsdGhpcy5lZGl0'@;
put 'b3JBY3RpdmU9ITAsdGhpcy5hcHByb3ZlQWN0aXZlPSExKToiaG9tZSI9PT1iZT8odGhpcy5lcnJUb3A9ITEsdGhpcy5lZGl0b3JBY3RpdmU9ITAsdGhpcy5hcHByb3ZlQWN0aXZlPSExKToodGhpcy5lcnJUb3A9ITAsdGhpcy5lZGl0b3JBY3RpdmU9ITEpLEpuLnJvb3RQYXJhbT1iZX10eXBl'@;
put 'b2YgdGhpcy5yb3V0ZVVybDwidSImJnRoaXMucm91dGVVcmwubGVuZ3RoPjYmJih0aGlzLmFwcHJvdmVBY3RpdmU9ISF0aGlzLnJvdXRlVXJsLmluY2x1ZGVzKCJhcHByb3ZlRGV0Iil8fCEhdGhpcy5yb3V0ZVVybC5pbmNsdWRlcygidG9hcHByb3ZlIikpfSksdGhpcy5zdWJzY3JpYmVUb1No'@;
put 'b3dBYm9ydE1vZGFsKCksdGhpcy5zdWJzY3JpYmVUb1JlcXVlc3RzTW9kYWwoKSx0aGlzLnN1YnNjcmliZVRvU3RhcnR1cERhdGEoKSx0aGlzLnN1YnNjcmliZVRvQXBwQWN0aXZlKCksdGhpcy5zdWJzY3JpYmVUb0RlbW9MaW1pdE1vZGFsKCksd2luZG93LmZyYW1lRWxlbWVudCYmKHdpbmRv'@;
put 'dy5mcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJzdHlsZSIsImhlaWdodDoxMDAlO3dpZHRoOjEwMCU7cG9zaXRpb246YWJzb2x1dGUiKSx3aW5kb3cuZnJhbWVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYWxsb3dmdWxsc2NyZWVuIiwiIiksd2luZG93LmZyYW1lRWxlbWVudC5zZXRBdHRyaWJ1'@;
put 'dGUoImZyYW1lYm9yZGVyIiwiMCIpLHdpbmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJtYXJnaW5oZWlnaHQiLCIwIiksd2luZG93LmZyYW1lRWxlbWVudC5zZXRBdHRyaWJ1dGUoIm1hcmdpbndpZHRoIiwiMCIpLHdpbmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJzY3Jv'@;
put 'bGxpbmciLCJhdXRvIiksd2luZG93LmZvY3VzKCkpfXBhcnNlRGNBZGFwdGVyU2V0dGluZ3MoKXtjb25zdCBhPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInNhc2pzIik7aWYoIWEpcmV0dXJuIHRoaXMubGljZW5jZVNlcnZpY2UuZGVhY3RpdmF0ZUFwcCgpLHZvaWQgc2V0VGltZW91dCgoKT0+'@;
put 'e3RoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsIlBsZWFzZSBtYWtlIHN1cmUgJ1NBU0pTJyB0YWcgd2l0aCBjb25maWcgYXR0cmlidXRlcyBpcyBhZGRlZCB0byBpbmRleC5odG1sIixudWxsLCJTQVNqcyBDb25maWcgbm90IGZvdW5kIil9KTtjb25zdCBmPWg9PmEuZ2V0'@;
put 'QXR0cmlidXRlKGgpfHx2b2lkIDAsZD17c2VydmVyVXJsOmYoInNlcnZlclVybCIpfHwiIixhcHBMb2M6ZigiYXBwTG9jIil8fCIiLHNlcnZlclR5cGU6Zigic2VydmVyVHlwZSIpLGxvZ2luTWVjaGFuaXNtOmYoImxvZ2luTWVjaGFuaXNtIil8fCIiLGFkbWluR3JvdXA6ZigiYWRtaW5Hcm91'@;
put 'cCIpfHwiIixkY1BhdGg6ZigiZGNQYXRoIil8fCIiLGRlYnVnOiJ0cnVlIj09PWYoImRlYnVnIil8fCExLHVzZUNvbXB1dGVBcGk6dGhpcy5wYXJzZUNvbXB1dGVBcGkoZigidXNlQ29tcHV0ZUFwaSIpKSxjb250ZXh0TmFtZTpmKCJjb250ZXh0TmFtZSIpfHwiIixob3RMaWNlbmNlS2V5OmYo'@;
put 'ImhvdExpY2VuY2VLZXkiKXx8IiJ9O3RoaXMuZGNBZGFwdGVyU2V0dGluZ3M9ZCx0aGlzLmFwcFN0b3JlU2VydmljZS5zZXREY0FkYXB0ZXJTZXR0aW5ncyhkKSx0aGlzLmFwcFNlcnZpY2Uuc2FzU2VydmljZUluaXQoKX1saWNlbmNlUHJvYmxlbURldGFpbHMoYSl7dGhpcy5yb3V0ZXIubmF2'@;
put 'aWdhdGVCeVVybChhKX1wYXJzZUNvbXB1dGVBcGkoYSl7cmV0dXJuIHZvaWQgMD09PWF8fCJ1bmRlZmluZWQiPT09YXx8Im51bGwiPT09YT9udWxsOiJ0cnVlIj09PWF8fCExfXN1YnNjcmliZVRvRGVtb0xpbWl0TW9kYWwoKXt0aGlzLmV2ZW50U2VydmljZS5vbkRlbW9MaW1pdE1vZGFsU2hv'@;
put 'dy5zdWJzY3JpYmUoYT0+e3RoaXMuZGVtb0xpbWl0Tm90aWNlPXtvcGVuOiEwLGZlYXR1cmVOYW1lOmF9fSl9c3Vic2NyaWJlVG9MaWNlbnNlRXZlbnRzKCl7dGhpcy5saWNlbmNlU2VydmljZS5pc0FwcEZyZWVUaWVyLnN1YnNjcmliZShhPT57dGhpcy5mcmVlVGllckJhbm5lcj1hfSksdGhp'@;
put 'cy5saWNlbmNlU2VydmljZS5saWNlbnNlRXhwaXJlc0luRGF5cy5zdWJzY3JpYmUoYT0+e2EmJmE8PTE0JiYodGhpcy5saWNlbnNlRXhwaXJpbmdEYXlzPWEpfSksdGhpcy5saWNlbmNlU2VydmljZS5pc0FwcE92ZXJDYXBhY2l0eS5zdWJzY3JpYmUoYT0+e3RoaXMuYXBwT3ZlckNhcGFjaXR5'@;
put 'PWF9KX1zdWJzY3JpYmVUb0FwcEFjdGl2ZSgpe3RoaXMubGljZW5jZVNlcnZpY2UuaXNBcHBBY3RpdmF0ZWQuc3Vic2NyaWJlKGE9Pnt0aGlzLmFwcEFjdGl2ZT1hfSl9c3Vic2NyaWJlVG9TaG93QWJvcnRNb2RhbCgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9uU2hvd0Fib3J0TW9kYWwuc3Vic2Ny'@;
put 'aWJlKGE9PnthLmlkPXRoaXMuc2FzanNBYm9ydHMubGVuZ3RoKzEsdGhpcy5zYXNqc0Fib3J0cy5wdXNoKGEpLHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKX0pfXN1YnNjcmliZVRvU3RhcnR1cERhdGEoKXt0aGlzLmV2ZW50U2VydmljZS5vblN0YXJ0dXBEYXRhTG9hZGVkLnN1YnNjcmliZSgo'@;
put 'KT0+e3RoaXMuc3RhcnR1cERhdGFMb2FkZWQ9ITB9KX1zdWJzY3JpYmVUb1JlcXVlc3RzTW9kYWwoKXt0aGlzLmV2ZW50U2VydmljZS5vblJlcXVlc3RzTW9kYWxPcGVuLnN1YnNjcmliZShhPT57dGhpcy5yZXF1ZXN0c01vZGFsPSEwfSl9Y2xvc2VBYm9ydE1vZGFsKGEpe2xldCBmPXRoaXMu'@;
put 'c2FzanNBYm9ydHMuZmluZEluZGV4KGQ9PmQuaWQ9PT1hKTt0aGlzLnNhc2pzQWJvcnRzLnNwbGljZShmLDEpfXRvZ2dsZVNpZGViYXIoKXt0aGlzLmV2ZW50U2VydmljZS50b2dnbGVTaWRlYmFyKCl9aXNNYWluUm91dGUoYSl7cmV0dXJuIHRoaXMucm91dGVyLnVybC5pbmNsdWRlcyhhKX1v'@;
put 'cGVuTGljZW5jaW5nUGFnZSgpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9saWNlbnNpbmcvdXBkYXRlIil9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHJ0KHdEKSxydChiMSkscnQoTGEpLHJ0KHR1KSxydChnZCkscnQoUnMpLHJ0KEl2KSxy'@;
put 'dChVbCkscnQoVmkpKX0sbC5cdTAyNzVjbXA9a3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1sibXktYXBwIl1dLGRlY2xzOjI5LHZhcnM6MTcsY29uc3RzOltbMSwibWFpbi1jb250YWluZXIiXSxbNCwibmdJZiJdLFsxLCJhcHAtaGVhZGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJjdXJz'@;
put 'b3ItcG9pbnRlciBzZWxlY3Qtbm9uZSBtbC0xMCBkLWZsZXggY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIgY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwibG9nbyIsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbImhyZWYiLCIjIiwi'@;
put 'Y2xhc3MiLCJuYXYtbGluayIsMywicm91dGVyTGluayIsNCwibmdJZiJdLFsxLCJoZWFkZXItYWN0aW9ucyJdLFsxLCJuYXYtdGV4dCJdLFsxLCJkcm9wZG93biJdLFsiY2xhc3MiLCJzdWJuYXYiLDQsIm5nSWYiXSxbMywib3BlbmVkIiwib3BlbmVkQ2hhbmdlIl0sWzMsImRhdGEiLCJmb3Jj'@;
put 'ZVJlbG9hZCIsIm9uQ29uZmlybU1vZGFsQ2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiYXBwRHJhZ05kcm9wIiwiIiwxLCJwb3NpdGlvbi1yZWxhdGl2ZSIsMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxDbG9zYWJsZSIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsT3BlbkNoYW5nZSJd'@;
put 'LFsxLCJtb2RhbC10aXRsZSJdLFsic2l6ZSIsIjIwIiwic2hhcGUiLCJsb2NrIl0sWzEsIm1vZGFsLWJvZHkiXSxbImNsYXNzIiwiYXBwLWxvYWRpbmciLDQsIm5nSWYiXSxbImNsYXNzIiwiYWxlcnQgYWxlcnQtYXBwLWxldmVsIGFsZXJ0LXdhcm5pbmciLCJpZCIsImRlbW8tYmFubmVyIiwi'@;
put 'cm9sZSIsImFsZXJ0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImFsZXJ0IGFsZXJ0LWFwcC1sZXZlbCBhbGVydC1kYW5nZXIiLCJpZCIsImRlbW8tYmFubmVyIiwicm9sZSIsImFsZXJ0Iiw0LCJuZ0lmIl0sWyJpZCIsImRlbW8tYmFubmVyIiwicm9sZSIsImFsZXJ0IiwxLCJhbGVydCIsImFsZXJ0'@;
put 'LWFwcC1sZXZlbCIsImFsZXJ0LXdhcm5pbmciXSxbMSwiYWxlcnQtaXRlbXMiXSxbMSwiYWxlcnQtaXRlbSIsInN0YXRpYyJdLFsxLCJhbGVydC1pY29uLXdyYXBwZXIiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsMSwibXQtMiJdLFsxLCJhbGVydC10ZXh0Il0sWyJjbGFzc2VzIiwi'@;
put 'Y29sb3Itd2hpdGUiXSxbInJvdXRlckxpbmsiLCIvbGljZW5zaW5nL3VwZGF0ZSIsMSwidXBkYXRlLWtleSJdLFsxLCJ1cGRhdGUta2V5IiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJpZCIsImRlbW8tYmFubmVyIiwicm9sZSIsImFsZXJ0IiwxLCJhbGVydCIsImFsZXJ0LWFwcC1s'@;
put 'ZXZlbCIsImFsZXJ0LWRhbmdlciJdLFsicm91dGVyTGluayIsIi9saWNlbnNpbmcvdXBkYXRlIiwiY2xhc3MiLCJ1cGRhdGUta2V5Iiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjdXJzb3ItcG9pbnRlciIsInNlbGVjdC1ub25lIiwibWwtMTAiLCJkLWZsZXgiLCJjbHItanVzdGlm'@;
put 'eS1jb250ZW50LWNlbnRlciIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLDMsImNsaWNrIl0sWyJzaXplIiwiMjQiLCJzaGFwZSIsInRyZWUtdmlldyJdLFsiaHJlZiIsIiMiLDEsIm5hdi1saW5rIiwzLCJyb3V0ZXJMaW5rIl0sWyJzcmMiLCIvU0FTSm9iRXhlY3V0aW9uP19GSUxFPS9QdWJs'@;
put 'aWMvYXBwL2RjL3NlcnZpY2VzL3dlYi9pbWFnZXMvZGMtbG9nby5zdmciLDEsIndpdGhvdXQtdGV4dCIsImQtYmxvY2siLCJkLW1kLW5vbmUiXSxbInNyYyIsIi9TQVNKb2JFeGVjdXRpb24/X0ZJTEU9L1B1YmxpYy9hcHAvZGMvc2VydmljZXMvd2ViL2ltYWdlcy9kYXRhY29udHJvbGxlci5z'@;
put 'dmciLDEsIndpdGgtdGV4dCIsImQtbm9uZSIsImQtbWQtYmxvY2siXSxbMSwiY2xyLWljb24iLCJoZWFkZXItbG9nbyIsIm1sLTEwIl0sWzEsImhlYWRlci1uYXYiLCJkLWZsZXgiLCJkLXNtLW5vbmUiXSxbImNsckRyb3Bkb3duVHJpZ2dlciIsIiIsImFyaWEtbGFiZWwiLCJ0b2dnbGUgc2V0'@;
put 'dGluZ3MgbWVudSIsMSwibmF2LWljb24iLCJjb2xvci13aGl0ZS1pIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0Iiw0LCJjbHJJZk9wZW4iXSxbMSwiaGVhZGVyLW5hdiIsImQtbm9uZSIsImQtc20tZmxleCJdLFsicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsMSwibmF2LWxpbmsi'@;
put 'LCJuYXYtdGV4dCIsMywicm91dGVyTGluayJdLFsxLCJuYXYtbGluayIsIm5hdi10ZXh0IiwzLCJyb3V0ZXJMaW5rIl0sWzEsIm5hdi1saW5rIiwibmF2LXRleHQiLCJjdXJzb3ItcG9pbnRlciIsMywicm91dGVyTGluayJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCJdLFsiY2xyRHJv'@;
put 'cGRvd25JdGVtIiwiIiwzLCJyb3V0ZXJMaW5rIl0sWzEsInN1Ym5hdiJdLFsxLCJuYXYiXSxbMSwibmF2LWl0ZW0iXSxbMywiZGF0YSIsImZvcmNlUmVsb2FkIiwib25Db25maXJtTW9kYWxDbGljayJdLFsxLCJhcHAtbG9hZGluZyJdLFsic3JjIiwiL1NBU0pvYkV4ZWN1dGlvbj9fRklMRT0v'@;
put 'UHVibGljL2FwcC9kYy9zZXJ2aWNlcy93ZWIvaW1hZ2VzL2RhdGFjb250cm9sbGVyLnN2ZyIsMSwibG9hZGluZy1sb2dvIl0sWyJjbGFzcyIsInNsaWRlciIsNCwibmdJZiJdLFsxLCJzbGlkZXIiXSxbMSwibGluZSJdLFsxLCJzdWJsaW5lIiwiaW5jIl0sWzEsInN1YmxpbmUiLCJkZWMiXV0s'@;
put 'dGVtcGxhdGU6ZnVuY3Rpb24oYSxmKXsxJmEmJih5ZSgwLCJkaXYiLDApLHR0KDEsZ0JlLDQsMywibmctY29udGFpbmVyIiwxKSx5ZSgyLCJoZWFkZXIiLDIpLHR0KDMsdkJlLDIsMCwiZGl2IiwzKSx5ZSg0LCJkaXYiLDQpLHR0KDUsYkJlLDMsMiwiYSIsNSksdHQoNixfQmUsMiwwLCJhIiwx'@;
put 'KSxDZSgpLHR0KDcsQ0JlLDEzLDEwLCJuZy1jb250YWluZXIiLDEpLHllKDgsImRpdiIsNikoOSwiZGl2Iiw3KSx0bigxMCwiYXBwLWxvYWRpbmctaW5kaWNhdG9yIiksQ2UoKSx5ZSgxMSwiZGl2Iiw4KSx0bigxMiwiYXBwLXVzZXItbmF2LWRyb3Bkb3duIiksQ2UoKSgpKCksdHQoMTMsa0Jl'@;
put 'LDExLDYsIm5hdiIsOSksdHQoMTQsRUJlLDEsMCwiYXBwLWFsZXJ0cyIsMSkseWUoMTUsImFwcC1yZXF1ZXN0cy1tb2RhbCIsMTApLEV0KCJvcGVuZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBmLnJlcXVlc3RzTW9kYWw9aH0pLENlKCksdHQoMTYseEJlLDEsMCwicm91dGVyLW91dGxl'@;
put 'dCIsMSksdG4oMTcsImFwcC1sb2dpbiIpLHR0KDE4LEFCZSwxLDAsImFwcC1hbGVydHMiLDEpLHR0KDE5LFRCZSwxLDIsImFwcC1pbmZvLW1vZGFsIiwxMSkseWUoMjAsImNsci1tb2RhbCIsMTIpLEV0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBmLmRlbW9MaW1p'@;
put 'dE5vdGljZS5vcGVuPWh9KSx5ZSgyMSwiaDMiLDEzKSxZZSgyMiksdG4oMjMsImNsci1pY29uIiwxNCksQ2UoKSx5ZSgyNCwiZGl2IiwxNSksWWUoMjUsIiBDb250YWN0ICIpLHRuKDI2LCJjb250YWN0LWxpbmsiKSxZZSgyNyksQ2UoKSgpKCksdHQoMjgsREJlLDMsMSwiZGl2IiwxNikpLDIm'@;
put 'YSYmKFNlKDEpLFJlKCJuZ0lmIiwhZi5yb3V0ZXIudXJsLmluY2x1ZGVzKCJsaWNlbnNpbmciKSksU2UoMiksUmUoIm5nSWYiLGYuaXNNYWluUm91dGUoInZpZXciKXx8Zi5pc01haW5Sb3V0ZSgiaG9tZSIpJiYhZi5yb3V0ZXIudXJsLmluY2x1ZGVzKCJsaWNlbnNpbmciKSksU2UoMiksUmUo'@;
put 'Im5nSWYiLCFmLnJvdXRlci51cmwuaW5jbHVkZXMoImRlcGxveSIpKSxTZSgxKSxSZSgibmdJZiIsZi5yb3V0ZXIudXJsLmluY2x1ZGVzKCJkZXBsb3kiKSksU2UoMSksUmUoIm5nSWYiLCFmLnJvdXRlci51cmwuaW5jbHVkZXMoImRlcGxveSIpJiYhZi5yb3V0ZXIudXJsLmluY2x1ZGVzKCJs'@;
put 'aWNlbnNpbmciKSksU2UoNiksUmUoIm5nSWYiLGYucm91dGVyLnVybC5pbmNsdWRlcygic3VibWl0dGVkIil8fGYucm91dGVyLnVybC5pbmNsdWRlcygiYXBwcm92ZSIpfHxmLnJvdXRlci51cmwuaW5jbHVkZXMoImhpc3RvcnkiKSksU2UoMSksUmUoIm5nSWYiLCFmLmVyclRvcCksU2UoMSks'@;
put 'UmUoIm9wZW5lZCIsZi5yZXF1ZXN0c01vZGFsKSxTZSgxKSxSZSgibmdJZiIsZi5zdGFydHVwRGF0YUxvYWRlZCksU2UoMiksUmUoIm5nSWYiLGYuZXJyVG9wKSxTZSgxKSxSZSgibmdGb3JPZiIsZi5zYXNqc0Fib3J0cyksU2UoMSksUmUoImNsck1vZGFsT3BlbiIsZi5kZW1vTGltaXROb3Rp'@;
put 'Y2Uub3BlbikoImNsck1vZGFsQ2xvc2FibGUiLCEwKSgiY2xyTW9kYWxTaXplIiwibGciKSxTZSgyKSx3cigiIExvY2tlZCBGZWF0dXJlICgiLGYuZGVtb0xpbWl0Tm90aWNlLmZlYXR1cmVOYW1lLCIpICIpLFNlKDUpLHdyKCIgd2l0aCB5b3VyIHNpdGUgaWQgKCIsZi5zeXNzaXRlLnZhbHVl'@;
put 'LCIpIHRvIGFjdGl2YXRlISAiKSxTZSgxKSxSZSgibmdJZiIsIWYuc3RhcnR1cERhdGFMb2FkZWQpKX0sZGVwZW5kZW5jaWVzOltSYSwkaSx4dixJMCxUQyxnVmUsdlZlLGtWZSxBVmUsYkksd1MsUmwsTWMsa2MseGQsYTMsbzUsYTUseDcsX0ksUVZlLHNCZV0sc3R5bGVzOlsiYXBwLXJlcXVl'@;
put 'c3RzLW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXXt6LWluZGV4OjEwMDAwfWhlYWRlci5hcHAtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiMzMTQzNTEhaW1wb3J0YW50O2NvbG9yOiNmZmZ9LmxvZ29bX25nY29udGVudC0lQ09NUCVdICAgaW1nLndpdGhvdXQtdGV4dFtf'@;
put 'bmdjb250ZW50LSVDT01QJV17d2lkdGg6MzBweH0ubG9nb1tfbmdjb250ZW50LSVDT01QJV0gICBpbWcud2l0aC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoyMTBweH0uaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmJsb2NrO2JhY2tn'@;
put 'cm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOjA7bWFyZ2luLWxlZnQ6MTBweH0uZGVtby1leHBpcmVkLW5vdGljZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3Bvc2l0aW9uOmZpeGVkO2xlZnQ6MDt0b3A6'@;
put 'MDtoZWlnaHQ6MTAwdmghaW1wb3J0YW50O3dpZHRoOjEwMHZ3IWltcG9ydGFudDt6LWluZGV4OjEwNTtiYWNrZ3JvdW5kOnJnYmEoMzMsMzMsMzMsLjUpfS5kZW1vLWV4cGlyZWQtbm90aWNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBpcmVkLWRldGFpbHNbX25nY29udGVudC0lQ09NUCVd'@;
put 'e2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzozMHB4O3otaW5kZXg6MTEwO2JhY2tncm91bmQ6IzMxNDM1MX0uZGVtby1leHBpcmVkLW5vdGljZVtfbmdjb250ZW50LSVDT01QJV0gICAuZXhwaXJlZC1kZXRhaWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAg'@;
put 'IC5leHBpcmVkLW5vdGljZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2UwZTBlMDtmb250LXNpemU6MTZweH0uZGVtby1leHBpcmVkLW5vdGljZVtfbmdjb250ZW50LSVDT01QJV0gICAuZXhwaXJlZC1kZXRhaWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBpcmVkLW5vdGljZVtfbmdj'@;
put 'b250ZW50LSVDT01QJV0gICAubWFpbHRvW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojOGRjNTNlfS5tYWluLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAudXBkYXRlLWtleVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtjb2xvcjoj'@;
put 'ZmZmO3BhZGRpbmc6MCAxMHB4O2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMTQ5MDE5NjA3OCl9LmFsZXJ0LWljb24td3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDowIWltcG9ydGFudH0ubmF2LXRleHRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi1yaWdodDoyMHB4fS5z'@;
put 'aWRlYmFyLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2hlaWdodDoxMDAlO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nLWxlZnQ6MTBweH0uc2lkZWJhci10b2dnbGVbX25nY29udGVudC0lQ09NUCVdICAgY2xyLWljb25bX25nY29udGVudC0lQ09NUCVde2N1cnNv'@;
put 'cjpwb2ludGVyO3dpZHRoOjMwcHg7aGVpZ2h0OjMwcHh9aGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oZWFkZXItYWN0aW9uc1tfbmdjb250ZW50LSVDT01QJV0gICAuZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnVuc2V0fWhlYWRlcltfbmdjb250ZW50LSVDT01Q'@;
put 'JV0gICAubmF2W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYXYtbGlua1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2ZhZmFmYTtvcGFjaXR5Oi45O2xpbmUtaGVpZ2h0OjEuNDVyZW19aGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYXZbX25nY29udGVudC0lQ09NUCVdICAgLm5hdi1s'@;
put 'aW5rW19uZ2NvbnRlbnQtJUNPTVAlXTpob3Zlcntib3gtc2hhZG93Omluc2V0IDAgLTNweCAwIHRyYW5zcGFyZW50O3RyYW5zaXRpb246Ym94LXNoYWRvdyAuMnMgZWFzZS1pbn1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm5hdltfbmdjb250ZW50LSVDT01QJV0gICAubmF2LWxpbmtb'@;
put 'X25nY29udGVudC0lQ09NUCVdOmhvdmVye2NvbG9yOiNmYWZhZmE7b3BhY2l0eToxfWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubmF2W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYXYtbGluay5hY3RpdmVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6IzYxNzE3RDtvcGFjaXR5'@;
put 'OjE7Ym94LXNoYWRvdzppbnNldCAwIC0zcHggdHJhbnNwYXJlbnR9aGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYXZbX25nY29udGVudC0lQ09NUCVdICAgLm5hdi1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tcmlnaHQ6MXJlbX0ubm90Zltfbmdjb250ZW50LSVDT01QJV17'@;
put 'YmFja2dyb3VuZDojMTZhNTdhO2NvbG9yOiNmZmZjZmM7Zm9udC1zaXplOjEycHh9LmJ0bi5idG4tc3VjY2Vzc1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWNvbG9yOiM2MmE0MjA7YmFja2dyb3VuZC1jb2xvcjojMTZhNTdhIWltcG9ydGFudDtjb2xvcjojZmZmfS5idG4uYnRuLXN1Y2Nl'@;
put 'c3NbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzJhZGQzOTtjb2xvcjojZmZmfS50b2dnbGUtc3dpdGNoW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W3R5cGU9Y2hlY2tib3hdW19uZ2NvbnRlbnQtJUNPTVAlXTpjaGVja2VkICsgbGFiZWxbX25nY29udGVu'@;
put 'dC0lQ09NUCVdOmJlZm9yZXtib3JkZXItY29sb3I6IzYxNzE3ZDtiYWNrZ3JvdW5kLWNvbG9yOiM2MTcxN2Q7dHJhbnNpdGlvbjouMTVzIGVhc2UtaW47dHJhbnNpdGlvbi1wcm9wZXJ0eTpib3JkZXItY29sb3IsYmFja2dyb3VuZC1jb2xvcn0ubWFpbi1jb250YWluZXJbX25nY29udGVudC0l'@;
put 'Q09NUCVde21pbi1oZWlnaHQ6MTAwdmghaW1wb3J0YW50fS5tYWluLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY29udGVudC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRlbnQtYXJlYVtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzowcmVtIDFyZW0gMXJl'@;
put 'bX0uY29udGVudC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3otaW5kZXg6MCFpbXBvcnRhbnR9Lm5hdkJhclJlc3BbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2JhY2tncm91bmQ6IzQ5NUE2Nztjb2xvcjojZmZmfUBtZWRpYSBz'@;
put 'Y3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2OHB4KXsubmF2QmFyUmVzcFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0O2JhY2tncm91bmQ6IzQ5NUE2Nztjb2xvcjojZmZmfS5tYWluLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0g'@;
put 'ICAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTFbX25nY29udGVudC0lQ09NUCVdICAgLm5hdltfbmdjb250ZW50LSVDT01QJV0gICAubmF2LWxpbmtbX25nY29udGVudC0lQ09NUCVdLCAubWFpbi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0y'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYXZbX25nY29udGVudC0lQ09NUCVdICAgLm5hdi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1haW4tY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYXZb'@;
put 'X25nY29udGVudC0lQ09NUCVdICAgLm5hdi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1haW4tY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYXZbX25nY29udGVudC0lQ09NUCVdICAgLm5hdi1s'@;
put 'aW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjAgLjVyZW0gMCAxcmVtO3dpZHRoOjEwMCU7bWF4LXdpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7Ym9yZGVyLXJhZGl1czouMTI1cmVtIDAgMCAuMTI1cmVtO2NvbG9yOiM5NWM4NGJ9LmNhcmQt'@;
put 'YmxvY2tbX25nY29udGVudC0lQ09NUCVdLCAuY2FyZC1mb290ZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MTBweCAwIDB9Lm1haW4tY29udGFpbmVyW19uZ2NvbnRlbnQtYzBdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50LWNvbnRhaW5lcltfbmdjb250ZW50LWMwXVtfbmdj'@;
put 'b250ZW50LSVDT01QJV0gICAuY29udGVudC1hcmVhW19uZ2NvbnRlbnQtYzBdW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjByZW19fSAgLmh0SW52YWxpZHtiYWNrZ3JvdW5kOmJsYWNrIWltcG9ydGFudH1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0ODBweCl7ICBoMntmb250'@;
put 'LXNpemU6LjdyZW0haW1wb3J0YW50fSAgaDN7Zm9udC1zaXplOi43cmVtfX0gIC5uYXYtbGlua3twYWRkaW5nOjByZW0gMXJlbX0gIC5idG4tcHJpbWFyeSAuYnRuLCAgIC5idG4uYnRuLXByaW1hcnl7Ym9yZGVyLWNvbG9yOiMzMTQzNTE7YmFja2dyb3VuZC1jb2xvcjojMzE0MzUxO2NvbG9y'@;
put 'OiNmZmZ9ICAuYnRue2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWJsb2NrOy13ZWJraXQtYXBwZWFyYW5jZTpub25lIWltcG9ydGFudDtib3JkZXItcmFkaXVzOi4xMjVyZW07Ym9yZGVyOjFweCBzb2xpZDttaW4td2lkdGg6M3JlbTttYXgtd2lkdGg6MTVyZW07d2hpdGUtc3BhY2U6'@;
put 'bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7b3ZlcmZsb3c6aGlkZGVuO3RleHQtYWxpZ246Y2VudGVyO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bGluZS1oZWlnaHQ6MS41cmVtO2xldHRlci1zcGFjaW5nOi4xMmVtO2ZvbnQtc2l6ZTouNXJl'@;
put 'bTtmb250LXdlaWdodDo1MDA7aGVpZ2h0OjEuNXJlbTtwYWRkaW5nOjAgLjVyZW07Ym9yZGVyLWNvbG9yOiMzMTQzNTE7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjojMzE0MzUxfSAgLmJ0bi5idG4tb3V0bGluZXtib3JkZXItY29sb3I6IzMxNDM1MTtiYWNrZ3JvdW5kLWNv'@;
put 'bG9yOnRyYW5zcGFyZW50O2NvbG9yOiMzMTQzNTF9ICAuYnRuLmJ0bi1vdXRsaW5lOmhvdmVye2JvcmRlci1jb2xvcjojMzE0MzUxO2JhY2tncm91bmQtY29sb3I6IzQ5NWE2Nztjb2xvcjojZmZmfSAgLmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzVl'@;
put 'YTcxZjtjb2xvcjojZmZmN2Y3O2JvcmRlci1jb2xvcjojOWE5Njk2fSAgLmh0TW9iaWxlRWRpdG9yQ29udGFpbmVyIC5pbnB1dHMgdGV4dGFyZWF7Zm9udC1zaXplOjEzcHQ7Ym9yZGVyOjJweCBzb2xpZCAjNDg1OTY3O2JvcmRlci1yYWRpdXM6NHB4Oy13ZWJraXQtYXBwZWFyYW5jZTpub25l'@;
put 'O2JveC1zaGFkb3c6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowIDAgMCAxNHB4O3BhZGRpbmc6N3B0O3dpZHRoOjI5MHB4fSAgLmh0TW9iaWxlRWRpdG9yQ29udGFpbmVyIC5wb3NpdGlvbkNvbnRyb2xze3dpZHRoOjMzM3B4O3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjVwdDt0b3A6'@;
put 'NTBweDtib3R0b206MDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcn0gIC5odE1vYmlsZUVkaXRvckNvbnRhaW5lci5hY3RpdmV7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTIwcHg7d2lkdGg6MzUwcHh9ICAuaGFuZHNvbnRhYmxle2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3Jk'@;
put 'ZXItcmFkaXVzOjNweH0gIC5oYW5kc29udGFibGUgdGh7YmFja2dyb3VuZC1jb2xvcjojZmFmYWZhfSAgLmh0X2Nsb25lX2xlZnQgdGh7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjY2NjO2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjY2NjfSAgLmh0X2Nsb25lX3RvcCB0aHtib3JkZXItdG9wOjFw'@;
put 'eCBzb2xpZCAjY2NjO2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjYztib3JkZXItYm90dG9tOjFweCBzb2xpZCAjY2NjfSAgLmh0X2Nsb25lX3RvcF9sZWZ0X2Nvcm5lciB0aHtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNjY2N9ICAuaHRfbWFzdGVyIHRyOm50aC1vZi10eXBlKG9kZCk+dGR7'@;
put 'YmFja2dyb3VuZC1jb2xvcjojZjNmM2YzO2JvcmRlcjoxcHggc29saWQgcmdiKDE5NywxOTcsMTk3KTtib3JkZXItYm90dG9tOjFweCBzb2xpZCByZ2IoMjM2LDIzNSwyMzUpfSAgLmh0X21hc3RlciB0cjpudGgtb2YtdHlwZShldmVuKT50ZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVy'@;
put 'OjFweCBzb2xpZCByZ2IoMTk3LDE5NywxOTcpO2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYigyMzYsMjM1LDIzNSl9ICAud3RCb3JkZXJ7YmFja2dyb3VuZC1jb2xvcjojNDk1YTY3IWltcG9ydGFudH0gIC5oYW5kc29udGFibGUgLmhhbmRzb250YWJsZS5odF9jbG9uZV90b3AgLnd0SGlk'@;
put 'ZXJ7cGFkZGluZzowIWltcG9ydGFudDttYXJnaW46MDtib3JkZXItYm90dG9tOjNweCBzb2xpZCAjZDZkM2QzfSAgLmNvbnRlbnQtY29udGFpbmVye2JhY2tncm91bmQ6I0Y1RjZGRn0gIC5jYXJke2JveC1zaGFkb3c6MCAuMTI1cmVtICNkN2Q3ZDc7Ym9yZGVyLXJhZGl1czowcmVtO2JvcmRl'@;
put 'cjoxcHggc29saWQgdHJhbnNwYXJlbnR9ICAuZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQsICAgLmRhdGFncmlkLWhpc3RvcnkgLmRhdGFncmlke2JvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6LjEyNXJlbTtiYWNr'@;
put 'Z3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzU2NTY1NjttYXJnaW46MDttYXJnaW4tdG9wOjFyZW07bWF4LXdpZHRoOjEwMCU7d2lkdGg6MTAwJTtwYWRkaW5nOjE1cHggMTVweCA1MHB4fSAgLmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWZvb3QsICAgLmRhdGFncmlkLWhpc3RvcnkgLmRh'@;
put 'dGFncmlkLWZvb3R7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO2hlaWdodDoxLjVyZW07cGFkZGluZzowIC41cmVtO2xpbmUtaGVpZ2h0OmNhbGMoMS41cmVtIC0gM3B4KTtmb250LXNpemU6LjQ1ODMzcmVtO2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItdG9wOjFweCBzb2xpZCAjY2Nj'@;
put 'O2JvcmRlci1yYWRpdXM6MH0gIC5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1mb290ZXIsICAgLmRhdGFncmlkLWhpc3RvcnkgLmRhdGFncmlkLWZvb3Rlcntwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoxNXB4O3RvcDoycHh9ICAuZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQgLmRhdGFn'@;
put 'cmlkLWhlYWQsICAgLmRhdGFncmlkLWhpc3RvcnkgLmRhdGFncmlkIC5kYXRhZ3JpZC1oZWFke2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjY2NjfSAgLmRyb3Bkb3duLW1lbnV7cG9zaXRpb246YWJzb2x1dGU7dG9wOjEwMCU7bGVmdDowO21hcmdpbi10'@;
put 'b3A6LjA4MzMzM3JlbTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2JhY2tncm91bmQ6I2Y1ZjZmZjtwYWRkaW5nOi41cmVtIDA7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JveC1zaGFkb3c6MCAxcHggLjEyNXJlbSAjNzM3MzczNDA7bWluLXdpZHRoOjVyZW07bWF4LXdpZHRo'@;
put 'OjE1cmVtO2JvcmRlci1yYWRpdXM6LjEyNXJlbTt2aXNpYmlsaXR5OmhpZGRlbjt6LWluZGV4OjEwMDB9ICAudGFibGV7Ym9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlO2JvcmRlcjoxcHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJhZGl1czowO2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xv'@;
put 'cjojNTY1NjU2O21hcmdpbjowO21hcmdpbi10b3A6MXJlbTttYXgtd2lkdGg6MTAwJTt3aWR0aDoxMDAlfSAgLnRhYmxlIHRoe2ZvbnQtc2l6ZTouNDU4MzNyZW07Zm9udC13ZWlnaHQ6NjAwO2xldHRlci1zcGFjaW5nOi4wM2VtO2JhY2tncm91bmQtY29sb3I6I2ZmZjt2ZXJ0aWNhbC1hbGln'@;
put 'bjpib3R0b207Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2NjYzt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9ICAubW9kYWwtaGVhZGVye2JvcmRlci1ib3R0b206MnB4IHNvbGlkICNlNGU0ZTQ7cGFkZGluZzowIDAgLjVyZW07bWFyZ2luLWJvdHRvbToxcmVtfSAgLm1haW4tY29udGFpbmVy'@;
put 'IC5jb250ZW50LWNvbnRhaW5lcnttaW4taGVpZ2h0OjBweDtwb3NpdGlvbjpyZWxhdGl2ZX0uYXBwLWxvYWRpbmdbX25nY29udGVudC0lQ09NUCVdICAgLmxvYWRpbmctbG9nb1tfbmdjb250ZW50LSVDT01QJV17bWF4LXdpZHRoOjQwMHB4O3dpZHRoOjEwMCV9Il19KSxsfSkoKTtmdW5jdGlv'@;
put 'biBMdWUobCl7cmV0dXJuIG5ldyBJcigzZTMsITEpfWZ1bmN0aW9uIFM0KGwpe3N3aXRjaChsLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgakM7Y2FzZSAxOnJldHVybiBsWzBdO2RlZmF1bHQ6cmV0dXJuIG5ldyBvYWUobCl9fWZ1bmN0aW9uIFB1ZShsLGMsYT1uZXcgTWFwLGY9bmV3IE1h'@;
put 'cCl7Y29uc3QgZD1bXSxoPVtdO2xldCBtPS0xLF89bnVsbDtpZihjLmZvckVhY2goTz0+e2NvbnN0IFg9Ty5nZXQoIm9mZnNldCIpLGFlPVg9PW0scGU9YWUmJl98fG5ldyBNYXA7Ty5mb3JFYWNoKChiZSx4ZSk9PntsZXQgVmU9eGUsWmU9YmU7aWYoIm9mZnNldCIhPT14ZSlzd2l0Y2goVmU9'@;
put 'bC5ub3JtYWxpemVQcm9wZXJ0eU5hbWUoVmUsZCksWmUpe2Nhc2UiISI6WmU9YS5nZXQoeGUpO2JyZWFrO2Nhc2UgcTI6WmU9Zi5nZXQoeGUpO2JyZWFrO2RlZmF1bHQ6WmU9bC5ub3JtYWxpemVTdHlsZVZhbHVlKHhlLFZlLFplLGQpfXBlLnNldChWZSxaZSl9KSxhZXx8aC5wdXNoKHBlKSxf'@;
put 'PXBlLG09WH0pLGQubGVuZ3RoKXRocm93IGZ1bmN0aW9uIHRqZShsKXtyZXR1cm4gbmV3IElyKDM1MDIsITEpfSgpO3JldHVybiBofWZ1bmN0aW9uIENaKGwsYyxhLGYpe3N3aXRjaChjKXtjYXNlInN0YXJ0IjpsLm9uU3RhcnQoKCk9PmYoYSYmU1ooYSwic3RhcnQiLGwpKSk7YnJlYWs7Y2Fz'@;
put 'ZSJkb25lIjpsLm9uRG9uZSgoKT0+ZihhJiZTWihhLCJkb25lIixsKSkpO2JyZWFrO2Nhc2UiZGVzdHJveSI6bC5vbkRlc3Ryb3koKCk9PmYoYSYmU1ooYSwiZGVzdHJveSIsbCkpKX19ZnVuY3Rpb24gU1oobCxjLGEpe2NvbnN0IGg9TVoobC5lbGVtZW50LGwudHJpZ2dlck5hbWUsbC5mcm9t'@;
put 'U3RhdGUsbC50b1N0YXRlLGN8fGwucGhhc2VOYW1lLGEudG90YWxUaW1lPz9sLnRvdGFsVGltZSwhIWEuZGlzYWJsZWQpLG09bC5fZGF0YTtyZXR1cm4gbnVsbCE9bSYmKGguX2RhdGE9bSksaH1mdW5jdGlvbiBNWihsLGMsYSxmLGQ9IiIsaD0wLG0pe3JldHVybntlbGVtZW50OmwsdHJpZ2dl'@;
put 'ck5hbWU6Yyxmcm9tU3RhdGU6YSx0b1N0YXRlOmYscGhhc2VOYW1lOmQsdG90YWxUaW1lOmgsZGlzYWJsZWQ6ISFtfX1mdW5jdGlvbiBUMShsLGMsYSl7bGV0IGY9bC5nZXQoYyk7cmV0dXJuIGZ8fGwuc2V0KGMsZj1hKSxmfWZ1bmN0aW9uIEZ1ZShsKXtjb25zdCBjPWwuaW5kZXhPZigiOiIp'@;
put 'O3JldHVybltsLnN1YnN0cmluZygxLGMpLGwuc2xpY2UoYysxKV19Y29uc3QgaGplPSgoKT0+dHlwZW9mIGRvY3VtZW50PiJ1Ij9udWxsOmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkoKTtmdW5jdGlvbiBrWihsKXtjb25zdCBjPWwucGFyZW50Tm9kZXx8bC5ob3N0fHxudWxsO3JldHVybiBj'@;
put 'PT09aGplP251bGw6Y31sZXQgZDU9bnVsbCxIdWU9ITE7ZnVuY3Rpb24gTnVlKGwsYyl7Zm9yKDtjOyl7aWYoYz09PWwpcmV0dXJuITA7Yz1rWihjKX1yZXR1cm4hMX1mdW5jdGlvbiBWdWUobCxjLGEpe2lmKGEpcmV0dXJuIEFycmF5LmZyb20obC5xdWVyeVNlbGVjdG9yQWxsKGMpKTtjb25z'@;
put 'dCBmPWwucXVlcnlTZWxlY3RvcihjKTtyZXR1cm4gZj9bZl06W119bGV0IEJ1ZT0oKCk9PntjbGFzcyBse3ZhbGlkYXRlU3R5bGVQcm9wZXJ0eShhKXtyZXR1cm4gZnVuY3Rpb24gbWplKGwpe2Q1fHwoZDU9ZnVuY3Rpb24gZ2plKCl7cmV0dXJuIHR5cGVvZiBkb2N1bWVudDwidSI/ZG9jdW1l'@;
put 'bnQuYm9keTpudWxsfSgpfHx7fSxIdWU9ISFkNS5zdHlsZSYmIldlYmtpdEFwcGVhcmFuY2UiaW4gZDUuc3R5bGUpO2xldCBjPSEwO3JldHVybiBkNS5zdHlsZSYmIWZ1bmN0aW9uIHBqZShsKXtyZXR1cm4iZWJraXQiPT1sLnN1YnN0cmluZygxLDYpfShsKSYmKGM9bCBpbiBkNS5zdHlsZSwh'@;
put 'YyYmSHVlJiYoYz0iV2Via2l0IitsLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2wuc2xpY2UoMSlpbiBkNS5zdHlsZSkpLGN9KGEpfW1hdGNoZXNFbGVtZW50KGEsZil7cmV0dXJuITF9Y29udGFpbnNFbGVtZW50KGEsZil7cmV0dXJuIE51ZShhLGYpfWdldFBhcmVudEVsZW1lbnQoYSl7cmV0'@;
put 'dXJuIGtaKGEpfXF1ZXJ5KGEsZixkKXtyZXR1cm4gVnVlKGEsZixkKX1jb21wdXRlU3R5bGUoYSxmLGQpe3JldHVybiBkfHwiIn1hbmltYXRlKGEsZixkLGgsbSxfPVtdLE8pe3JldHVybiBuZXcgakMoZCxoKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8'@;
put 'bCl9LGwuXHUwMjc1cHJvdj1ocih7dG9rZW46bCxmYWN0b3J5OmwuXHUwMjc1ZmFjfSksbH0pKCksRVo9KCgpPT57Y2xhc3MgbHt9cmV0dXJuIGwuTk9PUD1uZXcgQnVlLGx9KSgpO2NvbnN0IHZqZT0xZTMseFo9Im5nLWVudGVyIix3ST0ibmctbGVhdmUiLENJPSJuZy10cmlnZ2VyIixTST0i'@;
put 'Lm5nLXRyaWdnZXIiLHp1ZT0ibmctYW5pbWF0aW5nIixBWj0iLm5nLWFuaW1hdGluZyI7ZnVuY3Rpb24gczMobCl7aWYoIm51bWJlciI9PXR5cGVvZiBsKXJldHVybiBsO2NvbnN0IGM9bC5tYXRjaCgvXigtP1tcLlxkXSspKG0/cykvKTtyZXR1cm4hY3x8Yy5sZW5ndGg8Mj8wOlRaKHBhcnNl'@;
put 'RmxvYXQoY1sxXSksY1syXSl9ZnVuY3Rpb24gVFoobCxjKXtyZXR1cm4icyI9PT1jP2wqdmplOmx9ZnVuY3Rpb24gTUkobCxjLGEpe3JldHVybiBsLmhhc093blByb3BlcnR5KCJkdXJhdGlvbiIpP2w6ZnVuY3Rpb24gYmplKGwsYyxhKXtsZXQgZCxoPTAsbT0iIjtpZigic3RyaW5nIj09dHlw'@;
put 'ZW9mIGwpe2NvbnN0IF89bC5tYXRjaCgvXigtP1tcLlxkXSspKG0/cykoPzpccysoLT9bXC5cZF0rKShtP3MpKT8oPzpccysoWy1hLXpdKyg/OlwoLis/XCkpPykpPyQvaSk7aWYobnVsbD09PV8pcmV0dXJuIGMucHVzaChMdWUoKSkse2R1cmF0aW9uOjAsZGVsYXk6MCxlYXNpbmc6IiJ9O2Q9'@;
put 'VFoocGFyc2VGbG9hdChfWzFdKSxfWzJdKTtjb25zdCBPPV9bM107bnVsbCE9TyYmKGg9VFoocGFyc2VGbG9hdChPKSxfWzRdKSk7Y29uc3QgWD1fWzVdO1gmJihtPVgpfWVsc2UgZD1sO2lmKCFhKXtsZXQgXz0hMSxPPWMubGVuZ3RoO2Q8MCYmKGMucHVzaChmdW5jdGlvbiBSQmUoKXtyZXR1'@;
put 'cm4gbmV3IElyKDMxMDAsITEpfSgpKSxfPSEwKSxoPDAmJihjLnB1c2goZnVuY3Rpb24gTEJlKCl7cmV0dXJuIG5ldyBJcigzMTAxLCExKX0oKSksXz0hMCksXyYmYy5zcGxpY2UoTywwLEx1ZSgpKX1yZXR1cm57ZHVyYXRpb246ZCxkZWxheTpoLGVhc2luZzptfX0obCxjLGEpfWZ1bmN0aW9u'@;
put 'IEFTKGwsYz17fSl7cmV0dXJuIE9iamVjdC5rZXlzKGwpLmZvckVhY2goYT0+e2NbYV09bFthXX0pLGN9ZnVuY3Rpb24gVXVlKGwpe2NvbnN0IGM9bmV3IE1hcDtyZXR1cm4gT2JqZWN0LmtleXMobCkuZm9yRWFjaChhPT57Yy5zZXQoYSxsW2FdKX0pLGN9ZnVuY3Rpb24gTTQobCxjPW5ldyBN'@;
put 'YXAsYSl7aWYoYSlmb3IobGV0W2YsZF1vZiBhKWMuc2V0KGYsZCk7Zm9yKGxldFtmLGRdb2YgbCljLnNldChmLGQpO3JldHVybiBjfWZ1bmN0aW9uIExoKGwsYyxhKXtjLmZvckVhY2goKGYsZCk9Pntjb25zdCBoPURaKGQpO2EmJiFhLmhhcyhkKSYmYS5zZXQoZCxsLnN0eWxlW2hdKSxsLnN0'@;
put 'eWxlW2hdPWZ9KX1mdW5jdGlvbiBoNShsLGMpe2MuZm9yRWFjaCgoYSxmKT0+e2NvbnN0IGQ9RFooZik7bC5zdHlsZVtkXT0iIn0pfWZ1bmN0aW9uIFRTKGwpe3JldHVybiBBcnJheS5pc0FycmF5KGwpPzE9PWwubGVuZ3RoP2xbMF06aWFlKGwpOmx9Y29uc3QgT1o9bmV3IFJlZ0V4cCgie3tc'@;
put 'XHMqKC4rPylcXHMqfX0iLCJnIik7ZnVuY3Rpb24gWXVlKGwpe2xldCBjPVtdO2lmKCJzdHJpbmciPT10eXBlb2YgbCl7bGV0IGE7Zm9yKDthPU9aLmV4ZWMobCk7KWMucHVzaChhWzFdKTtPWi5sYXN0SW5kZXg9MH1yZXR1cm4gY31mdW5jdGlvbiBPUyhsLGMsYSl7Y29uc3QgZj1sLnRvU3Ry'@;
put 'aW5nKCksZD1mLnJlcGxhY2UoT1osKGgsbSk9PntsZXQgXz1jW21dO3JldHVybiBudWxsPT1fJiYoYS5wdXNoKGZ1bmN0aW9uIEZCZShsKXtyZXR1cm4gbmV3IElyKDMwMDMsITEpfSgpKSxfPSIiKSxfLnRvU3RyaW5nKCl9KTtyZXR1cm4gZD09Zj9sOmR9ZnVuY3Rpb24ga0kobCl7Y29uc3Qg'@;
put 'Yz1bXTtsZXQgYT1sLm5leHQoKTtmb3IoOyFhLmRvbmU7KWMucHVzaChhLnZhbHVlKSxhPWwubmV4dCgpO3JldHVybiBjfWNvbnN0IENqZT0vLSsoW2EtejAtOV0pL2c7ZnVuY3Rpb24gRFoobCl7cmV0dXJuIGwucmVwbGFjZShDamUsKC4uLmMpPT5jWzFdLnRvVXBwZXJDYXNlKCkpfWZ1bmN0'@;
put 'aW9uIE8xKGwsYyxhKXtzd2l0Y2goYy50eXBlKXtjYXNlIDc6cmV0dXJuIGwudmlzaXRUcmlnZ2VyKGMsYSk7Y2FzZSAwOnJldHVybiBsLnZpc2l0U3RhdGUoYyxhKTtjYXNlIDE6cmV0dXJuIGwudmlzaXRUcmFuc2l0aW9uKGMsYSk7Y2FzZSAyOnJldHVybiBsLnZpc2l0U2VxdWVuY2UoYyxh'@;
put 'KTtjYXNlIDM6cmV0dXJuIGwudmlzaXRHcm91cChjLGEpO2Nhc2UgNDpyZXR1cm4gbC52aXNpdEFuaW1hdGUoYyxhKTtjYXNlIDU6cmV0dXJuIGwudmlzaXRLZXlmcmFtZXMoYyxhKTtjYXNlIDY6cmV0dXJuIGwudmlzaXRTdHlsZShjLGEpO2Nhc2UgODpyZXR1cm4gbC52aXNpdFJlZmVyZW5j'@;
put 'ZShjLGEpO2Nhc2UgOTpyZXR1cm4gbC52aXNpdEFuaW1hdGVDaGlsZChjLGEpO2Nhc2UgMTA6cmV0dXJuIGwudmlzaXRBbmltYXRlUmVmKGMsYSk7Y2FzZSAxMTpyZXR1cm4gbC52aXNpdFF1ZXJ5KGMsYSk7Y2FzZSAxMjpyZXR1cm4gbC52aXNpdFN0YWdnZXIoYyxhKTtkZWZhdWx0OnRocm93'@;
put 'IGZ1bmN0aW9uIEhCZShsKXtyZXR1cm4gbmV3IElyKDMwMDQsITEpfSgpfX1mdW5jdGlvbiBXdWUobCxjKXtyZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUobClbY119Y29uc3QgRUk9IioiO2Z1bmN0aW9uIGtqZShsLGMpe2NvbnN0IGE9W107cmV0dXJuInN0cmluZyI9PXR5cGVvZiBs'@;
put 'P2wuc3BsaXQoL1xzKixccyovKS5mb3JFYWNoKGY9PmZ1bmN0aW9uIEVqZShsLGMsYSl7aWYoIjoiPT1sWzBdKXtjb25zdCBPPWZ1bmN0aW9uIHhqZShsLGMpe3N3aXRjaChsKXtjYXNlIjplbnRlciI6cmV0dXJuInZvaWQgPT4gKiI7Y2FzZSI6bGVhdmUiOnJldHVybiIqID0+IHZvaWQiO2Nh'@;
put 'c2UiOmluY3JlbWVudCI6cmV0dXJuKGEsZik9PnBhcnNlRmxvYXQoZik+cGFyc2VGbG9hdChhKTtjYXNlIjpkZWNyZW1lbnQiOnJldHVybihhLGYpPT5wYXJzZUZsb2F0KGYpPHBhcnNlRmxvYXQoYSk7ZGVmYXVsdDpyZXR1cm4gYy5wdXNoKGZ1bmN0aW9uIFhCZShsKXtyZXR1cm4gbmV3IEly'@;
put 'KDMwMTYsITEpfSgpKSwiKiA9PiAqIn19KGwsYSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIE8pcmV0dXJuIHZvaWQgYy5wdXNoKE8pO2w9T31jb25zdCBmPWwubWF0Y2goL14oXCp8Wy1cd10rKVxzKig8P1s9LV0+KVxzKihcKnxbLVx3XSspJC8pO2lmKG51bGw9PWZ8fGYubGVuZ3RoPDQpcmV0'@;
put 'dXJuIGEucHVzaChmdW5jdGlvbiBxQmUobCl7cmV0dXJuIG5ldyBJcigzMDE1LCExKX0oKSksYztjb25zdCBkPWZbMV0saD1mWzJdLG09ZlszXTtjLnB1c2goR3VlKGQsbSkpOyI8Ij09aFswXSYmIShkPT1FSSYmbT09RUkpJiZjLnB1c2goR3VlKG0sZCkpfShmLGEsYykpOmEucHVzaChsKSxh'@;
put 'fWNvbnN0IHhJPW5ldyBTZXQoWyJ0cnVlIiwiMSJdKSxBST1uZXcgU2V0KFsiZmFsc2UiLCIwIl0pO2Z1bmN0aW9uIEd1ZShsLGMpe2NvbnN0IGE9eEkuaGFzKGwpfHxBSS5oYXMobCksZj14SS5oYXMoYyl8fEFJLmhhcyhjKTtyZXR1cm4oZCxoKT0+e2xldCBtPWw9PUVJfHxsPT1kLF89Yz09'@;
put 'RUl8fGM9PWg7cmV0dXJuIW0mJmEmJiJib29sZWFuIj09dHlwZW9mIGQmJihtPWQ/eEkuaGFzKGwpOkFJLmhhcyhsKSksIV8mJmYmJiJib29sZWFuIj09dHlwZW9mIGgmJihfPWg/eEkuaGFzKGMpOkFJLmhhcyhjKSksbSYmX319Y29uc3QgQWplPW5ldyBSZWdFeHAoInMqOnNlbGZzKiw/Iiwi'@;
put 'ZyIpO2Z1bmN0aW9uIElaKGwsYyxhLGYpe3JldHVybiBuZXcgVGplKGwpLmJ1aWxkKGMsYSxmKX1jbGFzcyBUamV7Y29uc3RydWN0b3IoYyl7dGhpcy5fZHJpdmVyPWN9YnVpbGQoYyxhLGYpe2NvbnN0IGQ9bmV3IElqZShhKTtyZXR1cm4gdGhpcy5fcmVzZXRDb250ZXh0U3R5bGVUaW1pbmdT'@;
put 'dGF0ZShkKSxPMSh0aGlzLFRTKGMpLGQpfV9yZXNldENvbnRleHRTdHlsZVRpbWluZ1N0YXRlKGMpe2MuY3VycmVudFF1ZXJ5U2VsZWN0b3I9IiIsYy5jb2xsZWN0ZWRTdHlsZXM9bmV3IE1hcCxjLmNvbGxlY3RlZFN0eWxlcy5zZXQoIiIsbmV3IE1hcCksYy5jdXJyZW50VGltZT0wfXZpc2l0'@;
put 'VHJpZ2dlcihjLGEpe2xldCBmPWEucXVlcnlDb3VudD0wLGQ9YS5kZXBDb3VudD0wO2NvbnN0IGg9W10sbT1bXTtyZXR1cm4iQCI9PWMubmFtZS5jaGFyQXQoMCkmJmEuZXJyb3JzLnB1c2goZnVuY3Rpb24gVkJlKCl7cmV0dXJuIG5ldyBJcigzMDA2LCExKX0oKSksYy5kZWZpbml0aW9ucy5m'@;
put 'b3JFYWNoKF89PntpZih0aGlzLl9yZXNldENvbnRleHRTdHlsZVRpbWluZ1N0YXRlKGEpLDA9PV8udHlwZSl7Y29uc3QgTz1fLFg9Ty5uYW1lO1gudG9TdHJpbmcoKS5zcGxpdCgvXHMqLFxzKi8pLmZvckVhY2goYWU9PntPLm5hbWU9YWUsaC5wdXNoKHRoaXMudmlzaXRTdGF0ZShPLGEpKX0p'@;
put 'LE8ubmFtZT1YfWVsc2UgaWYoMT09Xy50eXBlKXtjb25zdCBPPXRoaXMudmlzaXRUcmFuc2l0aW9uKF8sYSk7Zis9Ty5xdWVyeUNvdW50LGQrPU8uZGVwQ291bnQsbS5wdXNoKE8pfWVsc2UgYS5lcnJvcnMucHVzaChmdW5jdGlvbiBCQmUoKXtyZXR1cm4gbmV3IElyKDMwMDcsITEpfSgpKX0p'@;
put 'LHt0eXBlOjcsbmFtZTpjLm5hbWUsc3RhdGVzOmgsdHJhbnNpdGlvbnM6bSxxdWVyeUNvdW50OmYsZGVwQ291bnQ6ZCxvcHRpb25zOm51bGx9fXZpc2l0U3RhdGUoYyxhKXtjb25zdCBmPXRoaXMudmlzaXRTdHlsZShjLnN0eWxlcyxhKSxkPWMub3B0aW9ucyYmYy5vcHRpb25zLnBhcmFtc3x8'@;
put 'bnVsbDtpZihmLmNvbnRhaW5zRHluYW1pY1N0eWxlcyl7Y29uc3QgaD1uZXcgU2V0LG09ZHx8e307Zi5zdHlsZXMuZm9yRWFjaChfPT57XyBpbnN0YW5jZW9mIE1hcCYmXy5mb3JFYWNoKE89PntZdWUoTykuZm9yRWFjaChYPT57bS5oYXNPd25Qcm9wZXJ0eShYKXx8aC5hZGQoWCl9KX0pfSks'@;
put 'aC5zaXplJiYoa0koaC52YWx1ZXMoKSksYS5lcnJvcnMucHVzaChmdW5jdGlvbiBqQmUobCxjKXtyZXR1cm4gbmV3IElyKDMwMDgsITEpfSgpKSl9cmV0dXJue3R5cGU6MCxuYW1lOmMubmFtZSxzdHlsZTpmLG9wdGlvbnM6ZD97cGFyYW1zOmR9Om51bGx9fXZpc2l0VHJhbnNpdGlvbihjLGEp'@;
put 'e2EucXVlcnlDb3VudD0wLGEuZGVwQ291bnQ9MDtjb25zdCBmPU8xKHRoaXMsVFMoYy5hbmltYXRpb24pLGEpO3JldHVybnt0eXBlOjEsbWF0Y2hlcnM6a2plKGMuZXhwcixhLmVycm9ycyksYW5pbWF0aW9uOmYscXVlcnlDb3VudDphLnF1ZXJ5Q291bnQsZGVwQ291bnQ6YS5kZXBDb3VudCxv'@;
put 'cHRpb25zOnA1KGMub3B0aW9ucyl9fXZpc2l0U2VxdWVuY2UoYyxhKXtyZXR1cm57dHlwZToyLHN0ZXBzOmMuc3RlcHMubWFwKGY9Pk8xKHRoaXMsZixhKSksb3B0aW9uczpwNShjLm9wdGlvbnMpfX12aXNpdEdyb3VwKGMsYSl7Y29uc3QgZj1hLmN1cnJlbnRUaW1lO2xldCBkPTA7Y29uc3Qg'@;
put 'aD1jLnN0ZXBzLm1hcChtPT57YS5jdXJyZW50VGltZT1mO2NvbnN0IF89TzEodGhpcyxtLGEpO3JldHVybiBkPU1hdGgubWF4KGQsYS5jdXJyZW50VGltZSksX30pO3JldHVybiBhLmN1cnJlbnRUaW1lPWQse3R5cGU6MyxzdGVwczpoLG9wdGlvbnM6cDUoYy5vcHRpb25zKX19dmlzaXRBbmlt'@;
put 'YXRlKGMsYSl7Y29uc3QgZj1mdW5jdGlvbiBMamUobCxjKXtpZihsLmhhc093blByb3BlcnR5KCJkdXJhdGlvbiIpKXJldHVybiBsO2lmKCJudW1iZXIiPT10eXBlb2YgbClyZXR1cm4gUlooTUkobCxjKS5kdXJhdGlvbiwwLCIiKTtjb25zdCBhPWw7aWYoYS5zcGxpdCgvXHMrLykuc29tZSho'@;
put 'PT4ieyI9PWguY2hhckF0KDApJiYieyI9PWguY2hhckF0KDEpKSl7Y29uc3QgaD1SWigwLDAsIiIpO3JldHVybiBoLmR5bmFtaWM9ITAsaC5zdHJWYWx1ZT1hLGh9Y29uc3QgZD1NSShhLGMpO3JldHVybiBSWihkLmR1cmF0aW9uLGQuZGVsYXksZC5lYXNpbmcpfShjLnRpbWluZ3MsYS5lcnJv'@;
put 'cnMpO2EuY3VycmVudEFuaW1hdGVUaW1pbmdzPWY7bGV0IGQsaD1jLnN0eWxlcz9jLnN0eWxlczpDYSh7fSk7aWYoNT09aC50eXBlKWQ9dGhpcy52aXNpdEtleWZyYW1lcyhoLGEpO2Vsc2V7bGV0IG09Yy5zdHlsZXMsXz0hMTtpZighbSl7Xz0hMDtjb25zdCBYPXt9O2YuZWFzaW5nJiYoWC5l'@;
put 'YXNpbmc9Zi5lYXNpbmcpLG09Q2EoWCl9YS5jdXJyZW50VGltZSs9Zi5kdXJhdGlvbitmLmRlbGF5O2NvbnN0IE89dGhpcy52aXNpdFN0eWxlKG0sYSk7Ty5pc0VtcHR5U3RlcD1fLGQ9T31yZXR1cm4gYS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCx7dHlwZTo0LHRpbWluZ3M6ZixzdHls'@;
put 'ZTpkLG9wdGlvbnM6bnVsbH19dmlzaXRTdHlsZShjLGEpe2NvbnN0IGY9dGhpcy5fbWFrZVN0eWxlQXN0KGMsYSk7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlU3R5bGVBc3QoZixhKSxmfV9tYWtlU3R5bGVBc3QoYyxhKXtjb25zdCBmPVtdLGQ9QXJyYXkuaXNBcnJheShjLnN0eWxlcyk/Yy5zdHls'@;
put 'ZXM6W2Muc3R5bGVzXTtmb3IobGV0IF8gb2YgZCkic3RyaW5nIj09dHlwZW9mIF8/Xz09PXEyP2YucHVzaChfKTphLmVycm9ycy5wdXNoKG5ldyBJcigzMDAyLCExKSk6Zi5wdXNoKFV1ZShfKSk7bGV0IGg9ITEsbT1udWxsO3JldHVybiBmLmZvckVhY2goXz0+e2lmKF8gaW5zdGFuY2VvZiBN'@;
put 'YXAmJihfLmhhcygiZWFzaW5nIikmJihtPV8uZ2V0KCJlYXNpbmciKSxfLmRlbGV0ZSgiZWFzaW5nIikpLCFoKSlmb3IobGV0IE8gb2YgXy52YWx1ZXMoKSlpZihPLnRvU3RyaW5nKCkuaW5kZXhPZigie3siKT49MCl7aD0hMDticmVha319KSx7dHlwZTo2LHN0eWxlczpmLGVhc2luZzptLG9m'@;
put 'ZnNldDpjLm9mZnNldCxjb250YWluc0R5bmFtaWNTdHlsZXM6aCxvcHRpb25zOm51bGx9fV92YWxpZGF0ZVN0eWxlQXN0KGMsYSl7Y29uc3QgZj1hLmN1cnJlbnRBbmltYXRlVGltaW5ncztsZXQgZD1hLmN1cnJlbnRUaW1lLGg9YS5jdXJyZW50VGltZTtmJiZoPjAmJihoLT1mLmR1cmF0aW9u'@;
put 'K2YuZGVsYXkpLGMuc3R5bGVzLmZvckVhY2gobT0+eyJzdHJpbmciIT10eXBlb2YgbSYmbS5mb3JFYWNoKChfLE8pPT57Y29uc3QgWD1hLmNvbGxlY3RlZFN0eWxlcy5nZXQoYS5jdXJyZW50UXVlcnlTZWxlY3RvciksYWU9WC5nZXQoTyk7bGV0IHBlPSEwO2FlJiYoaCE9ZCYmaD49YWUuc3Rh'@;
put 'cnRUaW1lJiZkPD1hZS5lbmRUaW1lJiYoYS5lcnJvcnMucHVzaChmdW5jdGlvbiBVQmUobCxjLGEsZixkKXtyZXR1cm4gbmV3IElyKDMwMTAsITEpfSgpKSxwZT0hMSksaD1hZS5zdGFydFRpbWUpLHBlJiZYLnNldChPLHtzdGFydFRpbWU6aCxlbmRUaW1lOmR9KSxhLm9wdGlvbnMmJmZ1bmN0'@;
put 'aW9uIHdqZShsLGMsYSl7Y29uc3QgZj1jLnBhcmFtc3x8e30sZD1ZdWUobCk7ZC5sZW5ndGgmJmQuZm9yRWFjaChoPT57Zi5oYXNPd25Qcm9wZXJ0eShoKXx8YS5wdXNoKGZ1bmN0aW9uIFBCZShsKXtyZXR1cm4gbmV3IElyKDMwMDEsITEpfSgpKX0pfShfLGEub3B0aW9ucyxhLmVycm9ycyl9'@;
put 'KX0pfXZpc2l0S2V5ZnJhbWVzKGMsYSl7Y29uc3QgZj17dHlwZTo1LHN0eWxlczpbXSxvcHRpb25zOm51bGx9O2lmKCFhLmN1cnJlbnRBbmltYXRlVGltaW5ncylyZXR1cm4gYS5lcnJvcnMucHVzaChmdW5jdGlvbiBaQmUoKXtyZXR1cm4gbmV3IElyKDMwMTEsITEpfSgpKSxmO2xldCBoPTA7'@;
put 'Y29uc3QgbT1bXTtsZXQgXz0hMSxPPSExLFg9MDtjb25zdCBhZT1jLnN0ZXBzLm1hcChkdD0+e2NvbnN0IGd0PXRoaXMuX21ha2VTdHlsZUFzdChkdCxhKTtsZXQganQ9bnVsbCE9Z3Qub2Zmc2V0P2d0Lm9mZnNldDpmdW5jdGlvbiBSamUobCl7aWYoInN0cmluZyI9PXR5cGVvZiBsKXJldHVy'@;
put 'biBudWxsO2xldCBjPW51bGw7aWYoQXJyYXkuaXNBcnJheShsKSlsLmZvckVhY2goYT0+e2lmKGEgaW5zdGFuY2VvZiBNYXAmJmEuaGFzKCJvZmZzZXQiKSl7Y29uc3QgZj1hO2M9cGFyc2VGbG9hdChmLmdldCgib2Zmc2V0IikpLGYuZGVsZXRlKCJvZmZzZXQiKX19KTtlbHNlIGlmKGwgaW5z'@;
put 'dGFuY2VvZiBNYXAmJmwuaGFzKCJvZmZzZXQiKSl7Y29uc3QgYT1sO2M9cGFyc2VGbG9hdChhLmdldCgib2Zmc2V0IikpLGEuZGVsZXRlKCJvZmZzZXQiKX1yZXR1cm4gY30oZ3Quc3R5bGVzKSxybj0wO3JldHVybiBudWxsIT1qdCYmKGgrKyxybj1ndC5vZmZzZXQ9anQpLE89T3x8cm48MHx8'@;
put 'cm4+MSxfPV98fHJuPFgsWD1ybixtLnB1c2gocm4pLGd0fSk7TyYmYS5lcnJvcnMucHVzaChmdW5jdGlvbiBZQmUoKXtyZXR1cm4gbmV3IElyKDMwMTIsITEpfSgpKSxfJiZhLmVycm9ycy5wdXNoKGZ1bmN0aW9uIFdCZSgpe3JldHVybiBuZXcgSXIoMzIwMCwhMSl9KCkpO2NvbnN0IHBlPWMu'@;
put 'c3RlcHMubGVuZ3RoO2xldCBiZT0wO2g+MCYmaDxwZT9hLmVycm9ycy5wdXNoKGZ1bmN0aW9uIEdCZSgpe3JldHVybiBuZXcgSXIoMzIwMiwhMSl9KCkpOjA9PWgmJihiZT0xLyhwZS0xKSk7Y29uc3QgeGU9cGUtMSxWZT1hLmN1cnJlbnRUaW1lLFplPWEuY3VycmVudEFuaW1hdGVUaW1pbmdz'@;
put 'LGx0PVplLmR1cmF0aW9uO3JldHVybiBhZS5mb3JFYWNoKChkdCxndCk9Pntjb25zdCBqdD1iZT4wP2d0PT14ZT8xOmJlKmd0Om1bZ3RdLHJuPWp0Kmx0O2EuY3VycmVudFRpbWU9VmUrWmUuZGVsYXkrcm4sWmUuZHVyYXRpb249cm4sdGhpcy5fdmFsaWRhdGVTdHlsZUFzdChkdCxhKSxkdC5v'@;
put 'ZmZzZXQ9anQsZi5zdHlsZXMucHVzaChkdCl9KSxmfXZpc2l0UmVmZXJlbmNlKGMsYSl7cmV0dXJue3R5cGU6OCxhbmltYXRpb246TzEodGhpcyxUUyhjLmFuaW1hdGlvbiksYSksb3B0aW9uczpwNShjLm9wdGlvbnMpfX12aXNpdEFuaW1hdGVDaGlsZChjLGEpe3JldHVybiBhLmRlcENvdW50'@;
put 'Kysse3R5cGU6OSxvcHRpb25zOnA1KGMub3B0aW9ucyl9fXZpc2l0QW5pbWF0ZVJlZihjLGEpe3JldHVybnt0eXBlOjEwLGFuaW1hdGlvbjp0aGlzLnZpc2l0UmVmZXJlbmNlKGMuYW5pbWF0aW9uLGEpLG9wdGlvbnM6cDUoYy5vcHRpb25zKX19dmlzaXRRdWVyeShjLGEpe2NvbnN0IGY9YS5j'@;
put 'dXJyZW50UXVlcnlTZWxlY3RvcixkPWMub3B0aW9uc3x8e307YS5xdWVyeUNvdW50KyssYS5jdXJyZW50UXVlcnk9Yztjb25zdFtoLG1dPWZ1bmN0aW9uIE9qZShsKXtjb25zdCBjPSEhbC5zcGxpdCgvXHMqLFxzKi8pLmZpbmQoYT0+IjpzZWxmIj09YSk7cmV0dXJuIGMmJihsPWwucmVwbGFj'@;
put 'ZShBamUsIiIpKSxsPWwucmVwbGFjZSgvQFwqL2csU0kpLnJlcGxhY2UoL0BcdysvZyxhPT5TSSsiLSIrYS5zbGljZSgxKSkucmVwbGFjZSgvOmFuaW1hdGluZy9nLEFaKSxbbCxjXX0oYy5zZWxlY3Rvcik7YS5jdXJyZW50UXVlcnlTZWxlY3Rvcj1mLmxlbmd0aD9mKyIgIitoOmgsVDEoYS5j'@;
put 'b2xsZWN0ZWRTdHlsZXMsYS5jdXJyZW50UXVlcnlTZWxlY3RvcixuZXcgTWFwKTtjb25zdCBfPU8xKHRoaXMsVFMoYy5hbmltYXRpb24pLGEpO3JldHVybiBhLmN1cnJlbnRRdWVyeT1udWxsLGEuY3VycmVudFF1ZXJ5U2VsZWN0b3I9Zix7dHlwZToxMSxzZWxlY3RvcjpoLGxpbWl0OmQubGlt'@;
put 'aXR8fDAsb3B0aW9uYWw6ISFkLm9wdGlvbmFsLGluY2x1ZGVTZWxmOm0sYW5pbWF0aW9uOl8sb3JpZ2luYWxTZWxlY3RvcjpjLnNlbGVjdG9yLG9wdGlvbnM6cDUoYy5vcHRpb25zKX19dmlzaXRTdGFnZ2VyKGMsYSl7YS5jdXJyZW50UXVlcnl8fGEuZXJyb3JzLnB1c2goZnVuY3Rpb24gJEJl'@;
put 'KCl7cmV0dXJuIG5ldyBJcigzMDEzLCExKX0oKSk7Y29uc3QgZj0iZnVsbCI9PT1jLnRpbWluZ3M/e2R1cmF0aW9uOjAsZGVsYXk6MCxlYXNpbmc6ImZ1bGwifTpNSShjLnRpbWluZ3MsYS5lcnJvcnMsITApO3JldHVybnt0eXBlOjEyLGFuaW1hdGlvbjpPMSh0aGlzLFRTKGMuYW5pbWF0aW9u'@;
put 'KSxhKSx0aW1pbmdzOmYsb3B0aW9uczpudWxsfX19Y2xhc3MgSWple2NvbnN0cnVjdG9yKGMpe3RoaXMuZXJyb3JzPWMsdGhpcy5xdWVyeUNvdW50PTAsdGhpcy5kZXBDb3VudD0wLHRoaXMuY3VycmVudFRyYW5zaXRpb249bnVsbCx0aGlzLmN1cnJlbnRRdWVyeT1udWxsLHRoaXMuY3VycmVu'@;
put 'dFF1ZXJ5U2VsZWN0b3I9bnVsbCx0aGlzLmN1cnJlbnRBbmltYXRlVGltaW5ncz1udWxsLHRoaXMuY3VycmVudFRpbWU9MCx0aGlzLmNvbGxlY3RlZFN0eWxlcz1uZXcgTWFwLHRoaXMub3B0aW9ucz1udWxsLHRoaXMudW5zdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzRm91bmQ9bmV3IFNldH19ZnVu'@;
put 'Y3Rpb24gcDUobCl7cmV0dXJuIGw/KGw9QVMobCkpLnBhcmFtcyYmKGwucGFyYW1zPWZ1bmN0aW9uIERqZShsKXtyZXR1cm4gbD9BUyhsKTpudWxsfShsLnBhcmFtcykpOmw9e30sbH1mdW5jdGlvbiBSWihsLGMsYSl7cmV0dXJue2R1cmF0aW9uOmwsZGVsYXk6YyxlYXNpbmc6YX19ZnVuY3Rp'@;
put 'b24gTFoobCxjLGEsZixkLGgsbT1udWxsLF89ITEpe3JldHVybnt0eXBlOjEsZWxlbWVudDpsLGtleWZyYW1lczpjLHByZVN0eWxlUHJvcHM6YSxwb3N0U3R5bGVQcm9wczpmLGR1cmF0aW9uOmQsZGVsYXk6aCx0b3RhbFRpbWU6ZCtoLGVhc2luZzptLHN1YlRpbWVsaW5lOl99fWNsYXNzIFRJ'@;
put 'e2NvbnN0cnVjdG9yKCl7dGhpcy5fbWFwPW5ldyBNYXB9Z2V0KGMpe3JldHVybiB0aGlzLl9tYXAuZ2V0KGMpfHxbXX1hcHBlbmQoYyxhKXtsZXQgZj10aGlzLl9tYXAuZ2V0KGMpO2Z8fHRoaXMuX21hcC5zZXQoYyxmPVtdKSxmLnB1c2goLi4uYSl9aGFzKGMpe3JldHVybiB0aGlzLl9tYXAu'@;
put 'aGFzKGMpfWNsZWFyKCl7dGhpcy5fbWFwLmNsZWFyKCl9fWNvbnN0IEhqZT1uZXcgUmVnRXhwKCI6ZW50ZXIiLCJnIiksVmplPW5ldyBSZWdFeHAoIjpsZWF2ZSIsImciKTtmdW5jdGlvbiBQWihsLGMsYSxmLGQsaD1uZXcgTWFwLG09bmV3IE1hcCxfLE8sWD1bXSl7cmV0dXJuKG5ldyBCamUp'@;
put 'LmJ1aWxkS2V5ZnJhbWVzKGwsYyxhLGYsZCxoLG0sXyxPLFgpfWNsYXNzIEJqZXtidWlsZEtleWZyYW1lcyhjLGEsZixkLGgsbSxfLE8sWCxhZT1bXSl7WD1YfHxuZXcgVEk7Y29uc3QgcGU9bmV3IEZaKGMsYSxYLGQsaCxhZSxbXSk7cGUub3B0aW9ucz1PO2NvbnN0IGJlPU8uZGVsYXk/czMo'@;
put 'Ty5kZWxheSk6MDtwZS5jdXJyZW50VGltZWxpbmUuZGVsYXlOZXh0U3RlcChiZSkscGUuY3VycmVudFRpbWVsaW5lLnNldFN0eWxlcyhbbV0sbnVsbCxwZS5lcnJvcnMsTyksTzEodGhpcyxmLHBlKTtjb25zdCB4ZT1wZS50aW1lbGluZXMuZmlsdGVyKFZlPT5WZS5jb250YWluc0FuaW1hdGlv'@;
put 'bigpKTtpZih4ZS5sZW5ndGgmJl8uc2l6ZSl7bGV0IFZlO2ZvcihsZXQgWmU9eGUubGVuZ3RoLTE7WmU+PTA7WmUtLSl7Y29uc3QgbHQ9eGVbWmVdO2lmKGx0LmVsZW1lbnQ9PT1hKXtWZT1sdDticmVha319VmUmJiFWZS5hbGxvd09ubHlUaW1lbGluZVN0eWxlcygpJiZWZS5zZXRTdHlsZXMo'@;
put 'W19dLG51bGwscGUuZXJyb3JzLE8pfXJldHVybiB4ZS5sZW5ndGg/eGUubWFwKFZlPT5WZS5idWlsZEtleWZyYW1lcygpKTpbTFooYSxbXSxbXSxbXSwwLGJlLCIiLCExKV19dmlzaXRUcmlnZ2VyKGMsYSl7fXZpc2l0U3RhdGUoYyxhKXt9dmlzaXRUcmFuc2l0aW9uKGMsYSl7fXZpc2l0QW5p'@;
put 'bWF0ZUNoaWxkKGMsYSl7Y29uc3QgZj1hLnN1Ykluc3RydWN0aW9ucy5nZXQoYS5lbGVtZW50KTtpZihmKXtjb25zdCBkPWEuY3JlYXRlU3ViQ29udGV4dChjLm9wdGlvbnMpLGg9YS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUsbT10aGlzLl92aXNpdFN1Ykluc3RydWN0aW9ucyhmLGQs'@;
put 'ZC5vcHRpb25zKTtoIT1tJiZhLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShtKX1hLnByZXZpb3VzTm9kZT1jfXZpc2l0QW5pbWF0ZVJlZihjLGEpe2NvbnN0IGY9YS5jcmVhdGVTdWJDb250ZXh0KGMub3B0aW9ucyk7Zi50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoKSx0aGlzLl9hcHBseUFu'@;
put 'aW1hdGlvblJlZkRlbGF5cyhbYy5vcHRpb25zLGMuYW5pbWF0aW9uLm9wdGlvbnNdLGEsZiksdGhpcy52aXNpdFJlZmVyZW5jZShjLmFuaW1hdGlvbixmKSxhLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShmLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSksYS5wcmV2aW91c05vZGU9Y31f'@;
put 'YXBwbHlBbmltYXRpb25SZWZEZWxheXMoYyxhLGYpe2Zvcihjb25zdCBkIG9mIGMpe2NvbnN0IGg9ZD8uZGVsYXk7aWYoaCl7Y29uc3QgbT0ibnVtYmVyIj09dHlwZW9mIGg/aDpzMyhPUyhoLGQ/LnBhcmFtcz8/e30sYS5lcnJvcnMpKTtmLmRlbGF5TmV4dFN0ZXAobSl9fX1fdmlzaXRTdWJJ'@;
put 'bnN0cnVjdGlvbnMoYyxhLGYpe2xldCBoPWEuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lO2NvbnN0IG09bnVsbCE9Zi5kdXJhdGlvbj9zMyhmLmR1cmF0aW9uKTpudWxsLF89bnVsbCE9Zi5kZWxheT9zMyhmLmRlbGF5KTpudWxsO3JldHVybiAwIT09bSYmYy5mb3JFYWNoKE89Pntjb25z'@;
put 'dCBYPWEuYXBwZW5kSW5zdHJ1Y3Rpb25Ub1RpbWVsaW5lKE8sbSxfKTtoPU1hdGgubWF4KGgsWC5kdXJhdGlvbitYLmRlbGF5KX0pLGh9dmlzaXRSZWZlcmVuY2UoYyxhKXthLnVwZGF0ZU9wdGlvbnMoYy5vcHRpb25zLCEwKSxPMSh0aGlzLGMuYW5pbWF0aW9uLGEpLGEucHJldmlvdXNOb2Rl'@;
put 'PWN9dmlzaXRTZXF1ZW5jZShjLGEpe2NvbnN0IGY9YS5zdWJDb250ZXh0Q291bnQ7bGV0IGQ9YTtjb25zdCBoPWMub3B0aW9ucztpZihoJiYoaC5wYXJhbXN8fGguZGVsYXkpJiYoZD1hLmNyZWF0ZVN1YkNvbnRleHQoaCksZC50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoKSxudWxsIT1oLmRl'@;
put 'bGF5KSl7Nj09ZC5wcmV2aW91c05vZGUudHlwZSYmKGQuY3VycmVudFRpbWVsaW5lLnNuYXBzaG90Q3VycmVudFN0eWxlcygpLGQucHJldmlvdXNOb2RlPU9JKTtjb25zdCBtPXMzKGguZGVsYXkpO2QuZGVsYXlOZXh0U3RlcChtKX1jLnN0ZXBzLmxlbmd0aCYmKGMuc3RlcHMuZm9yRWFjaCht'@;
put 'PT5PMSh0aGlzLG0sZCkpLGQuY3VycmVudFRpbWVsaW5lLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLGQuc3ViQ29udGV4dENvdW50PmYmJmQudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCkpLGEucHJldmlvdXNOb2RlPWN9dmlzaXRHcm91cChjLGEpe2NvbnN0IGY9W107bGV0IGQ9YS5jdXJy'@;
put 'ZW50VGltZWxpbmUuY3VycmVudFRpbWU7Y29uc3QgaD1jLm9wdGlvbnMmJmMub3B0aW9ucy5kZWxheT9zMyhjLm9wdGlvbnMuZGVsYXkpOjA7Yy5zdGVwcy5mb3JFYWNoKG09Pntjb25zdCBfPWEuY3JlYXRlU3ViQ29udGV4dChjLm9wdGlvbnMpO2gmJl8uZGVsYXlOZXh0U3RlcChoKSxPMSh0'@;
put 'aGlzLG0sXyksZD1NYXRoLm1heChkLF8uY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKSxmLnB1c2goXy5jdXJyZW50VGltZWxpbmUpfSksZi5mb3JFYWNoKG09PmEuY3VycmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXMobSkpLGEudHJhbnNmb3JtSW50b05ld1Rp'@;
put 'bWVsaW5lKGQpLGEucHJldmlvdXNOb2RlPWN9X3Zpc2l0VGltaW5nKGMsYSl7aWYoYy5keW5hbWljKXtjb25zdCBmPWMuc3RyVmFsdWU7cmV0dXJuIE1JKGEucGFyYW1zP09TKGYsYS5wYXJhbXMsYS5lcnJvcnMpOmYsYS5lcnJvcnMpfXJldHVybntkdXJhdGlvbjpjLmR1cmF0aW9uLGRlbGF5'@;
put 'OmMuZGVsYXksZWFzaW5nOmMuZWFzaW5nfX12aXNpdEFuaW1hdGUoYyxhKXtjb25zdCBmPWEuY3VycmVudEFuaW1hdGVUaW1pbmdzPXRoaXMuX3Zpc2l0VGltaW5nKGMudGltaW5ncyxhKSxkPWEuY3VycmVudFRpbWVsaW5lO2YuZGVsYXkmJihhLmluY3JlbWVudFRpbWUoZi5kZWxheSksZC5z'@;
put 'bmFwc2hvdEN1cnJlbnRTdHlsZXMoKSk7Y29uc3QgaD1jLnN0eWxlOzU9PWgudHlwZT90aGlzLnZpc2l0S2V5ZnJhbWVzKGgsYSk6KGEuaW5jcmVtZW50VGltZShmLmR1cmF0aW9uKSx0aGlzLnZpc2l0U3R5bGUoaCxhKSxkLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpKSxhLmN1cnJlbnRBbmlt'@;
put 'YXRlVGltaW5ncz1udWxsLGEucHJldmlvdXNOb2RlPWN9dmlzaXRTdHlsZShjLGEpe2NvbnN0IGY9YS5jdXJyZW50VGltZWxpbmUsZD1hLmN1cnJlbnRBbmltYXRlVGltaW5nczshZCYmZi5oYXNDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCkmJmYuZm9yd2FyZEZyYW1lKCk7Y29uc3QgaD1kJiZk'@;
put 'LmVhc2luZ3x8Yy5lYXNpbmc7Yy5pc0VtcHR5U3RlcD9mLmFwcGx5RW1wdHlTdGVwKGgpOmYuc2V0U3R5bGVzKGMuc3R5bGVzLGgsYS5lcnJvcnMsYS5vcHRpb25zKSxhLnByZXZpb3VzTm9kZT1jfXZpc2l0S2V5ZnJhbWVzKGMsYSl7Y29uc3QgZj1hLmN1cnJlbnRBbmltYXRlVGltaW5ncyxk'@;
put 'PWEuY3VycmVudFRpbWVsaW5lLmR1cmF0aW9uLGg9Zi5kdXJhdGlvbixfPWEuY3JlYXRlU3ViQ29udGV4dCgpLmN1cnJlbnRUaW1lbGluZTtfLmVhc2luZz1mLmVhc2luZyxjLnN0eWxlcy5mb3JFYWNoKE89PntfLmZvcndhcmRUaW1lKChPLm9mZnNldHx8MCkqaCksXy5zZXRTdHlsZXMoTy5z'@;
put 'dHlsZXMsTy5lYXNpbmcsYS5lcnJvcnMsYS5vcHRpb25zKSxfLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpfSksYS5jdXJyZW50VGltZWxpbmUubWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyhfKSxhLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShkK2gpLGEucHJldmlvdXNOb2RlPWN9dmlz'@;
put 'aXRRdWVyeShjLGEpe2NvbnN0IGY9YS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUsZD1jLm9wdGlvbnN8fHt9LGg9ZC5kZWxheT9zMyhkLmRlbGF5KTowO2gmJig2PT09YS5wcmV2aW91c05vZGUudHlwZXx8MD09ZiYmYS5jdXJyZW50VGltZWxpbmUuaGFzQ3VycmVudFN0eWxlUHJvcGVy'@;
put 'dGllcygpKSYmKGEuY3VycmVudFRpbWVsaW5lLnNuYXBzaG90Q3VycmVudFN0eWxlcygpLGEucHJldmlvdXNOb2RlPU9JKTtsZXQgbT1mO2NvbnN0IF89YS5pbnZva2VRdWVyeShjLnNlbGVjdG9yLGMub3JpZ2luYWxTZWxlY3RvcixjLmxpbWl0LGMuaW5jbHVkZVNlbGYsISFkLm9wdGlvbmFs'@;
put 'LGEuZXJyb3JzKTthLmN1cnJlbnRRdWVyeVRvdGFsPV8ubGVuZ3RoO2xldCBPPW51bGw7Xy5mb3JFYWNoKChYLGFlKT0+e2EuY3VycmVudFF1ZXJ5SW5kZXg9YWU7Y29uc3QgcGU9YS5jcmVhdGVTdWJDb250ZXh0KGMub3B0aW9ucyxYKTtoJiZwZS5kZWxheU5leHRTdGVwKGgpLFg9PT1hLmVs'@;
put 'ZW1lbnQmJihPPXBlLmN1cnJlbnRUaW1lbGluZSksTzEodGhpcyxjLmFuaW1hdGlvbixwZSkscGUuY3VycmVudFRpbWVsaW5lLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLG09TWF0aC5tYXgobSxwZS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUpfSksYS5jdXJyZW50UXVlcnlJbmRleD0w'@;
put 'LGEuY3VycmVudFF1ZXJ5VG90YWw9MCxhLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShtKSxPJiYoYS5jdXJyZW50VGltZWxpbmUubWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyhPKSxhLmN1cnJlbnRUaW1lbGluZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSksYS5wcmV2aW91c05vZGU9'@;
put 'Y312aXNpdFN0YWdnZXIoYyxhKXtjb25zdCBmPWEucGFyZW50Q29udGV4dCxkPWEuY3VycmVudFRpbWVsaW5lLGg9Yy50aW1pbmdzLG09TWF0aC5hYnMoaC5kdXJhdGlvbiksXz1tKihhLmN1cnJlbnRRdWVyeVRvdGFsLTEpO2xldCBPPW0qYS5jdXJyZW50UXVlcnlJbmRleDtzd2l0Y2goaC5k'@;
put 'dXJhdGlvbjwwPyJyZXZlcnNlIjpoLmVhc2luZyl7Y2FzZSJyZXZlcnNlIjpPPV8tTzticmVhaztjYXNlImZ1bGwiOk89Zi5jdXJyZW50U3RhZ2dlclRpbWV9Y29uc3QgYWU9YS5jdXJyZW50VGltZWxpbmU7TyYmYWUuZGVsYXlOZXh0U3RlcChPKTtjb25zdCBwZT1hZS5jdXJyZW50VGltZTtP'@;
put 'MSh0aGlzLGMuYW5pbWF0aW9uLGEpLGEucHJldmlvdXNOb2RlPWMsZi5jdXJyZW50U3RhZ2dlclRpbWU9ZC5jdXJyZW50VGltZS1wZSsoZC5zdGFydFRpbWUtZi5jdXJyZW50VGltZWxpbmUuc3RhcnRUaW1lKX19Y29uc3QgT0k9e307Y2xhc3MgRlp7Y29uc3RydWN0b3IoYyxhLGYsZCxoLG0s'@;
put 'XyxPKXt0aGlzLl9kcml2ZXI9Yyx0aGlzLmVsZW1lbnQ9YSx0aGlzLnN1Ykluc3RydWN0aW9ucz1mLHRoaXMuX2VudGVyQ2xhc3NOYW1lPWQsdGhpcy5fbGVhdmVDbGFzc05hbWU9aCx0aGlzLmVycm9ycz1tLHRoaXMudGltZWxpbmVzPV8sdGhpcy5wYXJlbnRDb250ZXh0PW51bGwsdGhpcy5j'@;
put 'dXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCx0aGlzLnByZXZpb3VzTm9kZT1PSSx0aGlzLnN1YkNvbnRleHRDb3VudD0wLHRoaXMub3B0aW9ucz17fSx0aGlzLmN1cnJlbnRRdWVyeUluZGV4PTAsdGhpcy5jdXJyZW50UXVlcnlUb3RhbD0wLHRoaXMuY3VycmVudFN0YWdnZXJUaW1lPTAsdGhp'@;
put 'cy5jdXJyZW50VGltZWxpbmU9T3x8bmV3IERJKHRoaXMuX2RyaXZlcixhLDApLF8ucHVzaCh0aGlzLmN1cnJlbnRUaW1lbGluZSl9Z2V0IHBhcmFtcygpe3JldHVybiB0aGlzLm9wdGlvbnMucGFyYW1zfXVwZGF0ZU9wdGlvbnMoYyxhKXtpZighYylyZXR1cm47Y29uc3QgZj1jO2xldCBkPXRo'@;
put 'aXMub3B0aW9ucztudWxsIT1mLmR1cmF0aW9uJiYoZC5kdXJhdGlvbj1zMyhmLmR1cmF0aW9uKSksbnVsbCE9Zi5kZWxheSYmKGQuZGVsYXk9czMoZi5kZWxheSkpO2NvbnN0IGg9Zi5wYXJhbXM7aWYoaCl7bGV0IG09ZC5wYXJhbXM7bXx8KG09dGhpcy5vcHRpb25zLnBhcmFtcz17fSksT2Jq'@;
put 'ZWN0LmtleXMoaCkuZm9yRWFjaChfPT57KCFhfHwhbS5oYXNPd25Qcm9wZXJ0eShfKSkmJihtW19dPU9TKGhbX10sbSx0aGlzLmVycm9ycykpfSl9fV9jb3B5T3B0aW9ucygpe2NvbnN0IGM9e307aWYodGhpcy5vcHRpb25zKXtjb25zdCBhPXRoaXMub3B0aW9ucy5wYXJhbXM7aWYoYSl7Y29u'@;
put 'c3QgZj1jLnBhcmFtcz17fTtPYmplY3Qua2V5cyhhKS5mb3JFYWNoKGQ9PntmW2RdPWFbZF19KX19cmV0dXJuIGN9Y3JlYXRlU3ViQ29udGV4dChjPW51bGwsYSxmKXtjb25zdCBkPWF8fHRoaXMuZWxlbWVudCxoPW5ldyBGWih0aGlzLl9kcml2ZXIsZCx0aGlzLnN1Ykluc3RydWN0aW9ucyx0'@;
put 'aGlzLl9lbnRlckNsYXNzTmFtZSx0aGlzLl9sZWF2ZUNsYXNzTmFtZSx0aGlzLmVycm9ycyx0aGlzLnRpbWVsaW5lcyx0aGlzLmN1cnJlbnRUaW1lbGluZS5mb3JrKGQsZnx8MCkpO3JldHVybiBoLnByZXZpb3VzTm9kZT10aGlzLnByZXZpb3VzTm9kZSxoLmN1cnJlbnRBbmltYXRlVGltaW5n'@;
put 'cz10aGlzLmN1cnJlbnRBbmltYXRlVGltaW5ncyxoLm9wdGlvbnM9dGhpcy5fY29weU9wdGlvbnMoKSxoLnVwZGF0ZU9wdGlvbnMoYyksaC5jdXJyZW50UXVlcnlJbmRleD10aGlzLmN1cnJlbnRRdWVyeUluZGV4LGguY3VycmVudFF1ZXJ5VG90YWw9dGhpcy5jdXJyZW50UXVlcnlUb3RhbCxo'@;
put 'LnBhcmVudENvbnRleHQ9dGhpcyx0aGlzLnN1YkNvbnRleHRDb3VudCsrLGh9dHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKGMpe3JldHVybiB0aGlzLnByZXZpb3VzTm9kZT1PSSx0aGlzLmN1cnJlbnRUaW1lbGluZT10aGlzLmN1cnJlbnRUaW1lbGluZS5mb3JrKHRoaXMuZWxlbWVudCxjKSx0'@;
put 'aGlzLnRpbWVsaW5lcy5wdXNoKHRoaXMuY3VycmVudFRpbWVsaW5lKSx0aGlzLmN1cnJlbnRUaW1lbGluZX1hcHBlbmRJbnN0cnVjdGlvblRvVGltZWxpbmUoYyxhLGYpe2NvbnN0IGQ9e2R1cmF0aW9uOmE/P2MuZHVyYXRpb24sZGVsYXk6dGhpcy5jdXJyZW50VGltZWxpbmUuY3VycmVudFRp'@;
put 'bWUrKGY/PzApK2MuZGVsYXksZWFzaW5nOiIifSxoPW5ldyBqamUodGhpcy5fZHJpdmVyLGMuZWxlbWVudCxjLmtleWZyYW1lcyxjLnByZVN0eWxlUHJvcHMsYy5wb3N0U3R5bGVQcm9wcyxkLGMuc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWUpO3JldHVybiB0aGlzLnRpbWVsaW5lcy5wdXNoKGgp'@;
put 'LGR9aW5jcmVtZW50VGltZShjKXt0aGlzLmN1cnJlbnRUaW1lbGluZS5mb3J3YXJkVGltZSh0aGlzLmN1cnJlbnRUaW1lbGluZS5kdXJhdGlvbitjKX1kZWxheU5leHRTdGVwKGMpe2M+MCYmdGhpcy5jdXJyZW50VGltZWxpbmUuZGVsYXlOZXh0U3RlcChjKX1pbnZva2VRdWVyeShjLGEsZixk'@;
put 'LGgsbSl7bGV0IF89W107aWYoZCYmXy5wdXNoKHRoaXMuZWxlbWVudCksYy5sZW5ndGg+MCl7Yz0oYz1jLnJlcGxhY2UoSGplLCIuIit0aGlzLl9lbnRlckNsYXNzTmFtZSkpLnJlcGxhY2UoVmplLCIuIit0aGlzLl9sZWF2ZUNsYXNzTmFtZSk7bGV0IFg9dGhpcy5fZHJpdmVyLnF1ZXJ5KHRo'@;
put 'aXMuZWxlbWVudCxjLDEhPWYpOzAhPT1mJiYoWD1mPDA/WC5zbGljZShYLmxlbmd0aCtmLFgubGVuZ3RoKTpYLnNsaWNlKDAsZikpLF8ucHVzaCguLi5YKX1yZXR1cm4haCYmMD09Xy5sZW5ndGgmJm0ucHVzaChmdW5jdGlvbiBLQmUobCl7cmV0dXJuIG5ldyBJcigzMDE0LCExKX0oKSksX319'@;
put 'Y2xhc3MgREl7Y29uc3RydWN0b3IoYyxhLGYsZCl7dGhpcy5fZHJpdmVyPWMsdGhpcy5lbGVtZW50PWEsdGhpcy5zdGFydFRpbWU9Zix0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXA9ZCx0aGlzLmR1cmF0aW9uPTAsdGhpcy5lYXNpbmc9bnVsbCx0aGlzLl9wcmV2aW91c0tleWZy'@;
put 'YW1lPW5ldyBNYXAsdGhpcy5fY3VycmVudEtleWZyYW1lPW5ldyBNYXAsdGhpcy5fa2V5ZnJhbWVzPW5ldyBNYXAsdGhpcy5fc3R5bGVTdW1tYXJ5PW5ldyBNYXAsdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcz1uZXcgTWFwLHRoaXMuX3BlbmRpbmdTdHlsZXM9bmV3IE1hcCx0aGlzLl9iYWNr'@;
put 'RmlsbD1uZXcgTWFwLHRoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZT1udWxsLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cHx8KHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cD1uZXcgTWFwKSx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcz10aGlzLl9lbGVt'@;
put 'ZW50VGltZWxpbmVTdHlsZXNMb29rdXAuZ2V0KGEpLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzfHwodGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXM9dGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcyx0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXAuc2V0KGEsdGhpcy5fbG9jYWxU'@;
put 'aW1lbGluZVN0eWxlcykpLHRoaXMuX2xvYWRLZXlmcmFtZSgpfWNvbnRhaW5zQW5pbWF0aW9uKCl7c3dpdGNoKHRoaXMuX2tleWZyYW1lcy5zaXplKXtjYXNlIDA6cmV0dXJuITE7Y2FzZSAxOnJldHVybiB0aGlzLmhhc0N1cnJlbnRTdHlsZVByb3BlcnRpZXMoKTtkZWZhdWx0OnJldHVybiEw'@;
put 'fX1oYXNDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRLZXlmcmFtZS5zaXplPjB9Z2V0IGN1cnJlbnRUaW1lKCl7cmV0dXJuIHRoaXMuc3RhcnRUaW1lK3RoaXMuZHVyYXRpb259ZGVsYXlOZXh0U3RlcChjKXtjb25zdCBhPTE9PT10aGlzLl9rZXlmcmFtZXMu'@;
put 'c2l6ZSYmdGhpcy5fcGVuZGluZ1N0eWxlcy5zaXplO3RoaXMuZHVyYXRpb258fGE/KHRoaXMuZm9yd2FyZFRpbWUodGhpcy5jdXJyZW50VGltZStjKSxhJiZ0aGlzLnNuYXBzaG90Q3VycmVudFN0eWxlcygpKTp0aGlzLnN0YXJ0VGltZSs9Y31mb3JrKGMsYSl7cmV0dXJuIHRoaXMuYXBwbHlT'@;
put 'dHlsZXNUb0tleWZyYW1lKCksbmV3IERJKHRoaXMuX2RyaXZlcixjLGF8fHRoaXMuY3VycmVudFRpbWUsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwKX1fbG9hZEtleWZyYW1lKCl7dGhpcy5fY3VycmVudEtleWZyYW1lJiYodGhpcy5fcHJldmlvdXNLZXlmcmFtZT10aGlzLl9j'@;
put 'dXJyZW50S2V5ZnJhbWUpLHRoaXMuX2N1cnJlbnRLZXlmcmFtZT10aGlzLl9rZXlmcmFtZXMuZ2V0KHRoaXMuZHVyYXRpb24pLHRoaXMuX2N1cnJlbnRLZXlmcmFtZXx8KHRoaXMuX2N1cnJlbnRLZXlmcmFtZT1uZXcgTWFwLHRoaXMuX2tleWZyYW1lcy5zZXQodGhpcy5kdXJhdGlvbix0aGlz'@;
put 'Ll9jdXJyZW50S2V5ZnJhbWUpKX1mb3J3YXJkRnJhbWUoKXt0aGlzLmR1cmF0aW9uKz0xLHRoaXMuX2xvYWRLZXlmcmFtZSgpfWZvcndhcmRUaW1lKGMpe3RoaXMuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksdGhpcy5kdXJhdGlvbj1jLHRoaXMuX2xvYWRLZXlmcmFtZSgpfV91cGRhdGVTdHls'@;
put 'ZShjLGEpe3RoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMuc2V0KGMsYSksdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXMuc2V0KGMsYSksdGhpcy5fc3R5bGVTdW1tYXJ5LnNldChjLHt0aW1lOnRoaXMuY3VycmVudFRpbWUsdmFsdWU6YX0pfWFsbG93T25seVRpbWVsaW5lU3R5bGVzKCl7cmV0'@;
put 'dXJuIHRoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZSE9PXRoaXMuX2N1cnJlbnRLZXlmcmFtZX1hcHBseUVtcHR5U3RlcChjKXtjJiZ0aGlzLl9wcmV2aW91c0tleWZyYW1lLnNldCgiZWFzaW5nIixjKTtmb3IobGV0W2EsZl1vZiB0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcyl0aGlz'@;
put 'Ll9iYWNrRmlsbC5zZXQoYSxmfHxxMiksdGhpcy5fY3VycmVudEtleWZyYW1lLnNldChhLHEyKTt0aGlzLl9jdXJyZW50RW1wdHlTdGVwS2V5ZnJhbWU9dGhpcy5fY3VycmVudEtleWZyYW1lfXNldFN0eWxlcyhjLGEsZixkKXthJiZ0aGlzLl9wcmV2aW91c0tleWZyYW1lLnNldCgiZWFzaW5n'@;
put 'IixhKTtjb25zdCBoPWQmJmQucGFyYW1zfHx7fSxtPWZ1bmN0aW9uIHpqZShsLGMpe2NvbnN0IGE9bmV3IE1hcDtsZXQgZjtyZXR1cm4gbC5mb3JFYWNoKGQ9PntpZigiKiI9PT1kKXtmPWZ8fGMua2V5cygpO2ZvcihsZXQgaCBvZiBmKWEuc2V0KGgscTIpfWVsc2UgTTQoZCxhKX0pLGF9KGMs'@;
put 'dGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXMpO2ZvcihsZXRbXyxPXW9mIG0pe2NvbnN0IFg9T1MoTyxoLGYpO3RoaXMuX3BlbmRpbmdTdHlsZXMuc2V0KF8sWCksdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcy5oYXMoXyl8fHRoaXMuX2JhY2tGaWxsLnNldChfLHRoaXMuX2dsb2JhbFRpbWVs'@;
put 'aW5lU3R5bGVzLmdldChfKT8/cTIpLHRoaXMuX3VwZGF0ZVN0eWxlKF8sWCl9fWFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpezAhPXRoaXMuX3BlbmRpbmdTdHlsZXMuc2l6ZSYmKHRoaXMuX3BlbmRpbmdTdHlsZXMuZm9yRWFjaCgoYyxhKT0+e3RoaXMuX2N1cnJlbnRLZXlmcmFtZS5zZXQoYSxj'@;
put 'KX0pLHRoaXMuX3BlbmRpbmdTdHlsZXMuY2xlYXIoKSx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzLmZvckVhY2goKGMsYSk9Pnt0aGlzLl9jdXJyZW50S2V5ZnJhbWUuaGFzKGEpfHx0aGlzLl9jdXJyZW50S2V5ZnJhbWUuc2V0KGEsYyl9KSl9c25hcHNob3RDdXJyZW50U3R5bGVzKCl7Zm9y'@;
put 'KGxldFtjLGFdb2YgdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcyl0aGlzLl9wZW5kaW5nU3R5bGVzLnNldChjLGEpLHRoaXMuX3VwZGF0ZVN0eWxlKGMsYSl9Z2V0RmluYWxLZXlmcmFtZSgpe3JldHVybiB0aGlzLl9rZXlmcmFtZXMuZ2V0KHRoaXMuZHVyYXRpb24pfWdldCBwcm9wZXJ0aWVz'@;
put 'KCl7Y29uc3QgYz1bXTtmb3IobGV0IGEgaW4gdGhpcy5fY3VycmVudEtleWZyYW1lKWMucHVzaChhKTtyZXR1cm4gY31tZXJnZVRpbWVsaW5lQ29sbGVjdGVkU3R5bGVzKGMpe2MuX3N0eWxlU3VtbWFyeS5mb3JFYWNoKChhLGYpPT57Y29uc3QgZD10aGlzLl9zdHlsZVN1bW1hcnkuZ2V0KGYp'@;
put 'OyghZHx8YS50aW1lPmQudGltZSkmJnRoaXMuX3VwZGF0ZVN0eWxlKGYsYS52YWx1ZSl9KX1idWlsZEtleWZyYW1lcygpe3RoaXMuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCk7Y29uc3QgYz1uZXcgU2V0LGE9bmV3IFNldCxmPTE9PT10aGlzLl9rZXlmcmFtZXMuc2l6ZSYmMD09PXRoaXMuZHVy'@;
put 'YXRpb247bGV0IGQ9W107dGhpcy5fa2V5ZnJhbWVzLmZvckVhY2goKF8sTyk9Pntjb25zdCBYPU00KF8sbmV3IE1hcCx0aGlzLl9iYWNrRmlsbCk7WC5mb3JFYWNoKChhZSxwZSk9PnsiISI9PT1hZT9jLmFkZChwZSk6YWU9PT1xMiYmYS5hZGQocGUpfSksZnx8WC5zZXQoIm9mZnNldCIsTy90'@;
put 'aGlzLmR1cmF0aW9uKSxkLnB1c2goWCl9KTtjb25zdCBoPWMuc2l6ZT9rSShjLnZhbHVlcygpKTpbXSxtPWEuc2l6ZT9rSShhLnZhbHVlcygpKTpbXTtpZihmKXtjb25zdCBfPWRbMF0sTz1uZXcgTWFwKF8pO18uc2V0KCJvZmZzZXQiLDApLE8uc2V0KCJvZmZzZXQiLDEpLGQ9W18sT119cmV0'@;
put 'dXJuIExaKHRoaXMuZWxlbWVudCxkLGgsbSx0aGlzLmR1cmF0aW9uLHRoaXMuc3RhcnRUaW1lLHRoaXMuZWFzaW5nLCExKX19Y2xhc3MgamplIGV4dGVuZHMgREl7Y29uc3RydWN0b3IoYyxhLGYsZCxoLG0sXz0hMSl7c3VwZXIoYyxhLG0uZGVsYXkpLHRoaXMua2V5ZnJhbWVzPWYsdGhpcy5w'@;
put 'cmVTdHlsZVByb3BzPWQsdGhpcy5wb3N0U3R5bGVQcm9wcz1oLHRoaXMuX3N0cmV0Y2hTdGFydGluZ0tleWZyYW1lPV8sdGhpcy50aW1pbmdzPXtkdXJhdGlvbjptLmR1cmF0aW9uLGRlbGF5Om0uZGVsYXksZWFzaW5nOm0uZWFzaW5nfX1jb250YWluc0FuaW1hdGlvbigpe3JldHVybiB0aGlz'@;
put 'LmtleWZyYW1lcy5sZW5ndGg+MX1idWlsZEtleWZyYW1lcygpe2xldCBjPXRoaXMua2V5ZnJhbWVzLHtkZWxheTphLGR1cmF0aW9uOmYsZWFzaW5nOmR9PXRoaXMudGltaW5ncztpZih0aGlzLl9zdHJldGNoU3RhcnRpbmdLZXlmcmFtZSYmYSl7Y29uc3QgaD1bXSxtPWYrYSxfPWEvbSxPPU00'@;
put 'KGNbMF0pO08uc2V0KCJvZmZzZXQiLDApLGgucHVzaChPKTtjb25zdCBYPU00KGNbMF0pO1guc2V0KCJvZmZzZXQiLHF1ZShfKSksaC5wdXNoKFgpO2NvbnN0IGFlPWMubGVuZ3RoLTE7Zm9yKGxldCBwZT0xO3BlPD1hZTtwZSsrKXtsZXQgYmU9TTQoY1twZV0pO2NvbnN0IHhlPWJlLmdldCgi'@;
put 'b2Zmc2V0Iik7YmUuc2V0KCJvZmZzZXQiLHF1ZSgoYSt4ZSpmKS9tKSksaC5wdXNoKGJlKX1mPW0sYT0wLGQ9IiIsYz1ofXJldHVybiBMWih0aGlzLmVsZW1lbnQsYyx0aGlzLnByZVN0eWxlUHJvcHMsdGhpcy5wb3N0U3R5bGVQcm9wcyxmLGEsZCwhMCl9fWZ1bmN0aW9uIHF1ZShsLGM9Myl7'@;
put 'Y29uc3QgYT1NYXRoLnBvdygxMCxjLTEpO3JldHVybiBNYXRoLnJvdW5kKGwqYSkvYX1jbGFzcyBIWnt9Y29uc3QgVWplPW5ldyBTZXQoWyJ3aWR0aCIsImhlaWdodCIsIm1pbldpZHRoIiwibWluSGVpZ2h0IiwibWF4V2lkdGgiLCJtYXhIZWlnaHQiLCJsZWZ0IiwidG9wIiwiYm90dG9tIiwi'@;
put 'cmlnaHQiLCJmb250U2l6ZSIsIm91dGxpbmVXaWR0aCIsIm91dGxpbmVPZmZzZXQiLCJwYWRkaW5nVG9wIiwicGFkZGluZ0xlZnQiLCJwYWRkaW5nQm90dG9tIiwicGFkZGluZ1JpZ2h0IiwibWFyZ2luVG9wIiwibWFyZ2luTGVmdCIsIm1hcmdpbkJvdHRvbSIsIm1hcmdpblJpZ2h0IiwiYm9y'@;
put 'ZGVyUmFkaXVzIiwiYm9yZGVyV2lkdGgiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlckxlZnRXaWR0aCIsImJvcmRlclJpZ2h0V2lkdGgiLCJib3JkZXJCb3R0b21XaWR0aCIsInRleHRJbmRlbnQiLCJwZXJzcGVjdGl2ZSJdKTtjbGFzcyBaamUgZXh0ZW5kcyBIWntub3JtYWxpemVQcm9wZXJ0'@;
put 'eU5hbWUoYyxhKXtyZXR1cm4gRFooYyl9bm9ybWFsaXplU3R5bGVWYWx1ZShjLGEsZixkKXtsZXQgaD0iIjtjb25zdCBtPWYudG9TdHJpbmcoKS50cmltKCk7aWYoVWplLmhhcyhhKSYmMCE9PWYmJiIwIiE9PWYpaWYoIm51bWJlciI9PXR5cGVvZiBmKWg9InB4IjtlbHNle2NvbnN0IF89Zi5t'@;
put 'YXRjaCgvXlsrLV0/W1xkXC5dKyhbYS16XSopJC8pO18mJjA9PV9bMV0ubGVuZ3RoJiZkLnB1c2goZnVuY3Rpb24gTkJlKGwsYyl7cmV0dXJuIG5ldyBJcigzMDA1LCExKX0oKSl9cmV0dXJuIG0raH19ZnVuY3Rpb24gWHVlKGwsYyxhLGYsZCxoLG0sXyxPLFgsYWUscGUsYmUpe3JldHVybnt0'@;
put 'eXBlOjAsZWxlbWVudDpsLHRyaWdnZXJOYW1lOmMsaXNSZW1vdmFsVHJhbnNpdGlvbjpkLGZyb21TdGF0ZTphLGZyb21TdHlsZXM6aCx0b1N0YXRlOmYsdG9TdHlsZXM6bSx0aW1lbGluZXM6XyxxdWVyaWVkRWxlbWVudHM6TyxwcmVTdHlsZVByb3BzOlgscG9zdFN0eWxlUHJvcHM6YWUsdG90'@;
put 'YWxUaW1lOnBlLGVycm9yczpiZX19Y29uc3QgTlo9e307Y2xhc3MgSnVle2NvbnN0cnVjdG9yKGMsYSxmKXt0aGlzLl90cmlnZ2VyTmFtZT1jLHRoaXMuYXN0PWEsdGhpcy5fc3RhdGVTdHlsZXM9Zn1tYXRjaChjLGEsZixkKXtyZXR1cm4gZnVuY3Rpb24gWWplKGwsYyxhLGYsZCl7cmV0dXJu'@;
put 'IGwuc29tZShoPT5oKGMsYSxmLGQpKX0odGhpcy5hc3QubWF0Y2hlcnMsYyxhLGYsZCl9YnVpbGRTdHlsZXMoYyxhLGYpe2xldCBkPXRoaXMuX3N0YXRlU3R5bGVzLmdldCgiKiIpO3JldHVybiB2b2lkIDAhPT1jJiYoZD10aGlzLl9zdGF0ZVN0eWxlcy5nZXQoYz8udG9TdHJpbmcoKSl8fGQp'@;
put 'LGQ/ZC5idWlsZFN0eWxlcyhhLGYpOm5ldyBNYXB9YnVpbGQoYyxhLGYsZCxoLG0sXyxPLFgsYWUpe2NvbnN0IHBlPVtdLGJlPXRoaXMuYXN0Lm9wdGlvbnMmJnRoaXMuYXN0Lm9wdGlvbnMucGFyYW1zfHxOWixWZT10aGlzLmJ1aWxkU3R5bGVzKGYsXyYmXy5wYXJhbXN8fE5aLHBlKSxaZT1P'@;
put 'JiZPLnBhcmFtc3x8TlosbHQ9dGhpcy5idWlsZFN0eWxlcyhkLFplLHBlKSxkdD1uZXcgU2V0LGd0PW5ldyBNYXAsanQ9bmV3IE1hcCxybj0idm9pZCI9PT1kLFh0PXtwYXJhbXM6V2plKFplLGJlKSxkZWxheTp0aGlzLmFzdC5vcHRpb25zPy5kZWxheX0seW49YWU/W106UFooYyxhLHRoaXMu'@;
put 'YXN0LmFuaW1hdGlvbixoLG0sVmUsbHQsWHQsWCxwZSk7bGV0IFFuPTA7aWYoeW4uZm9yRWFjaChWcj0+e1FuPU1hdGgubWF4KFZyLmR1cmF0aW9uK1ZyLmRlbGF5LFFuKX0pLHBlLmxlbmd0aClyZXR1cm4gWHVlKGEsdGhpcy5fdHJpZ2dlck5hbWUsZixkLHJuLFZlLGx0LFtdLFtdLGd0LGp0'@;
put 'LFFuLHBlKTt5bi5mb3JFYWNoKFZyPT57Y29uc3QgWnI9VnIuZWxlbWVudCxpcj1UMShndCxacixuZXcgU2V0KTtWci5wcmVTdHlsZVByb3BzLmZvckVhY2goQXI9PmlyLmFkZChBcikpO2NvbnN0IHNpPVQxKGp0LFpyLG5ldyBTZXQpO1ZyLnBvc3RTdHlsZVByb3BzLmZvckVhY2goQXI9PnNp'@;
put 'LmFkZChBcikpLFpyIT09YSYmZHQuYWRkKFpyKX0pO2NvbnN0IE9yPWtJKGR0LnZhbHVlcygpKTtyZXR1cm4gWHVlKGEsdGhpcy5fdHJpZ2dlck5hbWUsZixkLHJuLFZlLGx0LHluLE9yLGd0LGp0LFFuKX19ZnVuY3Rpb24gV2plKGwsYyl7Y29uc3QgYT1BUyhjKTtmb3IoY29uc3QgZiBpbiBs'@;
put 'KWwuaGFzT3duUHJvcGVydHkoZikmJm51bGwhPWxbZl0mJihhW2ZdPWxbZl0pO3JldHVybiBhfWNsYXNzIEdqZXtjb25zdHJ1Y3RvcihjLGEsZil7dGhpcy5zdHlsZXM9Yyx0aGlzLmRlZmF1bHRQYXJhbXM9YSx0aGlzLm5vcm1hbGl6ZXI9Zn1idWlsZFN0eWxlcyhjLGEpe2NvbnN0IGY9bmV3'@;
put 'IE1hcCxkPUFTKHRoaXMuZGVmYXVsdFBhcmFtcyk7cmV0dXJuIE9iamVjdC5rZXlzKGMpLmZvckVhY2goaD0+e2NvbnN0IG09Y1toXTtudWxsIT09bSYmKGRbaF09bSl9KSx0aGlzLnN0eWxlcy5zdHlsZXMuZm9yRWFjaChoPT57InN0cmluZyIhPXR5cGVvZiBoJiZoLmZvckVhY2goKG0sXyk9'@;
put 'PnttJiYobT1PUyhtLGQsYSkpO2NvbnN0IE89dGhpcy5ub3JtYWxpemVyLm5vcm1hbGl6ZVByb3BlcnR5TmFtZShfLGEpO209dGhpcy5ub3JtYWxpemVyLm5vcm1hbGl6ZVN0eWxlVmFsdWUoXyxPLG0sYSksZi5zZXQoXyxtKX0pfSksZn19Y2xhc3MgS2ple2NvbnN0cnVjdG9yKGMsYSxmKXt0'@;
put 'aGlzLm5hbWU9Yyx0aGlzLmFzdD1hLHRoaXMuX25vcm1hbGl6ZXI9Zix0aGlzLnRyYW5zaXRpb25GYWN0b3JpZXM9W10sdGhpcy5zdGF0ZXM9bmV3IE1hcCxhLnN0YXRlcy5mb3JFYWNoKGQ9Pnt0aGlzLnN0YXRlcy5zZXQoZC5uYW1lLG5ldyBHamUoZC5zdHlsZSxkLm9wdGlvbnMmJmQub3B0'@;
put 'aW9ucy5wYXJhbXN8fHt9LGYpKX0pLFF1ZSh0aGlzLnN0YXRlcywidHJ1ZSIsIjEiKSxRdWUodGhpcy5zdGF0ZXMsImZhbHNlIiwiMCIpLGEudHJhbnNpdGlvbnMuZm9yRWFjaChkPT57dGhpcy50cmFuc2l0aW9uRmFjdG9yaWVzLnB1c2gobmV3IEp1ZShjLGQsdGhpcy5zdGF0ZXMpKX0pLHRo'@;
put 'aXMuZmFsbGJhY2tUcmFuc2l0aW9uPWZ1bmN0aW9uIHFqZShsLGMsYSl7cmV0dXJuIG5ldyBKdWUobCx7dHlwZToxLGFuaW1hdGlvbjp7dHlwZToyLHN0ZXBzOltdLG9wdGlvbnM6bnVsbH0sbWF0Y2hlcnM6WyhtLF8pPT4hMF0sb3B0aW9uczpudWxsLHF1ZXJ5Q291bnQ6MCxkZXBDb3VudDow'@;
put 'fSxjKX0oYyx0aGlzLnN0YXRlcyl9Z2V0IGNvbnRhaW5zUXVlcmllcygpe3JldHVybiB0aGlzLmFzdC5xdWVyeUNvdW50PjB9bWF0Y2hUcmFuc2l0aW9uKGMsYSxmLGQpe3JldHVybiB0aGlzLnRyYW5zaXRpb25GYWN0b3JpZXMuZmluZChtPT5tLm1hdGNoKGMsYSxmLGQpKXx8bnVsbH1tYXRj'@;
put 'aFN0eWxlcyhjLGEsZil7cmV0dXJuIHRoaXMuZmFsbGJhY2tUcmFuc2l0aW9uLmJ1aWxkU3R5bGVzKGMsYSxmKX19ZnVuY3Rpb24gUXVlKGwsYyxhKXtsLmhhcyhjKT9sLmhhcyhhKXx8bC5zZXQoYSxsLmdldChjKSk6bC5oYXMoYSkmJmwuc2V0KGMsbC5nZXQoYSkpfWNvbnN0IFhqZT1uZXcg'@;
put 'VEk7Y2xhc3MgSmple2NvbnN0cnVjdG9yKGMsYSxmKXt0aGlzLmJvZHlOb2RlPWMsdGhpcy5fZHJpdmVyPWEsdGhpcy5fbm9ybWFsaXplcj1mLHRoaXMuX2FuaW1hdGlvbnM9bmV3IE1hcCx0aGlzLl9wbGF5ZXJzQnlJZD1uZXcgTWFwLHRoaXMucGxheWVycz1bXX1yZWdpc3RlcihjLGEpe2Nv'@;
put 'bnN0IGY9W10saD1JWih0aGlzLl9kcml2ZXIsYSxmLFtdKTtpZihmLmxlbmd0aCl0aHJvdyBmdW5jdGlvbiBuamUobCl7cmV0dXJuIG5ldyBJcigzNTAzLCExKX0oKTt0aGlzLl9hbmltYXRpb25zLnNldChjLGgpfV9idWlsZFBsYXllcihjLGEsZil7Y29uc3QgZD1jLmVsZW1lbnQsaD1QdWUo'@;
put 'dGhpcy5fbm9ybWFsaXplcixjLmtleWZyYW1lcyxhLGYpO3JldHVybiB0aGlzLl9kcml2ZXIuYW5pbWF0ZShkLGgsYy5kdXJhdGlvbixjLmRlbGF5LGMuZWFzaW5nLFtdLCEwKX1jcmVhdGUoYyxhLGY9e30pe2NvbnN0IGQ9W10saD10aGlzLl9hbmltYXRpb25zLmdldChjKTtsZXQgbTtjb25z'@;
put 'dCBfPW5ldyBNYXA7aWYoaD8obT1QWih0aGlzLl9kcml2ZXIsYSxoLHhaLHdJLG5ldyBNYXAsbmV3IE1hcCxmLFhqZSxkKSxtLmZvckVhY2goYWU9Pntjb25zdCBwZT1UMShfLGFlLmVsZW1lbnQsbmV3IE1hcCk7YWUucG9zdFN0eWxlUHJvcHMuZm9yRWFjaChiZT0+cGUuc2V0KGJlLG51bGwp'@;
put 'KX0pKTooZC5wdXNoKGZ1bmN0aW9uIHJqZSgpe3JldHVybiBuZXcgSXIoMzMwMCwhMSl9KCkpLG09W10pLGQubGVuZ3RoKXRocm93IGZ1bmN0aW9uIGlqZShsKXtyZXR1cm4gbmV3IElyKDM1MDQsITEpfSgpO18uZm9yRWFjaCgoYWUscGUpPT57YWUuZm9yRWFjaCgoYmUseGUpPT57YWUuc2V0'@;
put 'KHhlLHRoaXMuX2RyaXZlci5jb21wdXRlU3R5bGUocGUseGUscTIpKX0pfSk7Y29uc3QgWD1TNChtLm1hcChhZT0+e2NvbnN0IHBlPV8uZ2V0KGFlLmVsZW1lbnQpO3JldHVybiB0aGlzLl9idWlsZFBsYXllcihhZSxuZXcgTWFwLHBlKX0pKTtyZXR1cm4gdGhpcy5fcGxheWVyc0J5SWQuc2V0'@;
put 'KGMsWCksWC5vbkRlc3Ryb3koKCk9PnRoaXMuZGVzdHJveShjKSksdGhpcy5wbGF5ZXJzLnB1c2goWCksWH1kZXN0cm95KGMpe2NvbnN0IGE9dGhpcy5fZ2V0UGxheWVyKGMpO2EuZGVzdHJveSgpLHRoaXMuX3BsYXllcnNCeUlkLmRlbGV0ZShjKTtjb25zdCBmPXRoaXMucGxheWVycy5pbmRl'@;
put 'eE9mKGEpO2Y+PTAmJnRoaXMucGxheWVycy5zcGxpY2UoZiwxKX1fZ2V0UGxheWVyKGMpe2NvbnN0IGE9dGhpcy5fcGxheWVyc0J5SWQuZ2V0KGMpO2lmKCFhKXRocm93IGZ1bmN0aW9uIG9qZShsKXtyZXR1cm4gbmV3IElyKDMzMDEsITEpfSgpO3JldHVybiBhfWxpc3RlbihjLGEsZixkKXtj'@;
put 'b25zdCBoPU1aKGEsIiIsIiIsIiIpO3JldHVybiBDWih0aGlzLl9nZXRQbGF5ZXIoYyksZixoLGQpLCgpPT57fX1jb21tYW5kKGMsYSxmLGQpe2lmKCJyZWdpc3RlciI9PWYpcmV0dXJuIHZvaWQgdGhpcy5yZWdpc3RlcihjLGRbMF0pO2lmKCJjcmVhdGUiPT1mKXJldHVybiB2b2lkIHRoaXMu'@;
put 'Y3JlYXRlKGMsYSxkWzBdfHx7fSk7Y29uc3QgaD10aGlzLl9nZXRQbGF5ZXIoYyk7c3dpdGNoKGYpe2Nhc2UicGxheSI6aC5wbGF5KCk7YnJlYWs7Y2FzZSJwYXVzZSI6aC5wYXVzZSgpO2JyZWFrO2Nhc2UicmVzZXQiOmgucmVzZXQoKTticmVhaztjYXNlInJlc3RhcnQiOmgucmVzdGFydCgp'@;
put 'O2JyZWFrO2Nhc2UiZmluaXNoIjpoLmZpbmlzaCgpO2JyZWFrO2Nhc2UiaW5pdCI6aC5pbml0KCk7YnJlYWs7Y2FzZSJzZXRQb3NpdGlvbiI6aC5zZXRQb3NpdGlvbihwYXJzZUZsb2F0KGRbMF0pKTticmVhaztjYXNlImRlc3Ryb3kiOnRoaXMuZGVzdHJveShjKX19fWNvbnN0IGVjZT0ibmct'@;
put 'YW5pbWF0ZS1xdWV1ZWQiLFZaPSJuZy1hbmltYXRlLWRpc2FibGVkIixyemU9W10sdGNlPXtuYW1lc3BhY2VJZDoiIixzZXRGb3JSZW1vdmFsOiExLHNldEZvck1vdmU6ITEsaGFzQW5pbWF0aW9uOiExLHJlbW92ZWRCZWZvcmVRdWVyaWVkOiExfSxpemU9e25hbWVzcGFjZUlkOiIiLHNldEZv'@;
put 'ck1vdmU6ITEsc2V0Rm9yUmVtb3ZhbDohMSxoYXNBbmltYXRpb246ITEscmVtb3ZlZEJlZm9yZVF1ZXJpZWQ6ITB9LFJkPSJfX25nX3JlbW92ZWQiO2NsYXNzIEJae2dldCBwYXJhbXMoKXtyZXR1cm4gdGhpcy5vcHRpb25zLnBhcmFtc31jb25zdHJ1Y3RvcihjLGE9IiIpe3RoaXMubmFtZXNw'@;
put 'YWNlSWQ9YTtjb25zdCBmPWMmJmMuaGFzT3duUHJvcGVydHkoInZhbHVlIik7aWYodGhpcy52YWx1ZT1mdW5jdGlvbiBzemUobCl7cmV0dXJuIGw/P251bGx9KGY/Yy52YWx1ZTpjKSxmKXtjb25zdCBoPUFTKGMpO2RlbGV0ZSBoLnZhbHVlLHRoaXMub3B0aW9ucz1ofWVsc2UgdGhpcy5vcHRp'@;
put 'b25zPXt9O3RoaXMub3B0aW9ucy5wYXJhbXN8fCh0aGlzLm9wdGlvbnMucGFyYW1zPXt9KX1hYnNvcmJPcHRpb25zKGMpe2NvbnN0IGE9Yy5wYXJhbXM7aWYoYSl7Y29uc3QgZj10aGlzLm9wdGlvbnMucGFyYW1zO09iamVjdC5rZXlzKGEpLmZvckVhY2goZD0+e251bGw9PWZbZF0mJihmW2Rd'@;
put 'PWFbZF0pfSl9fX1jb25zdCBEUz0idm9pZCIsalo9bmV3IEJaKERTKTtjbGFzcyBvemV7Y29uc3RydWN0b3IoYyxhLGYpe3RoaXMuaWQ9Yyx0aGlzLmhvc3RFbGVtZW50PWEsdGhpcy5fZW5naW5lPWYsdGhpcy5wbGF5ZXJzPVtdLHRoaXMuX3RyaWdnZXJzPW5ldyBNYXAsdGhpcy5fcXVldWU9'@;
put 'W10sdGhpcy5fZWxlbWVudExpc3RlbmVycz1uZXcgTWFwLHRoaXMuX2hvc3RDbGFzc05hbWU9Im5nLXRucy0iK2MsUGYoYSx0aGlzLl9ob3N0Q2xhc3NOYW1lKX1saXN0ZW4oYyxhLGYsZCl7aWYoIXRoaXMuX3RyaWdnZXJzLmhhcyhhKSl0aHJvdyBmdW5jdGlvbiBhamUobCxjKXtyZXR1cm4g'@;
put 'bmV3IElyKDMzMDIsITEpfSgpO2lmKG51bGw9PWZ8fDA9PWYubGVuZ3RoKXRocm93IGZ1bmN0aW9uIGxqZShsKXtyZXR1cm4gbmV3IElyKDMzMDMsITEpfSgpO2lmKCFmdW5jdGlvbiB1emUobCl7cmV0dXJuInN0YXJ0Ij09bHx8ImRvbmUiPT1sfShmKSl0aHJvdyBmdW5jdGlvbiBzamUobCxj'@;
put 'KXtyZXR1cm4gbmV3IElyKDM0MDAsITEpfSgpO2NvbnN0IGg9VDEodGhpcy5fZWxlbWVudExpc3RlbmVycyxjLFtdKSxtPXtuYW1lOmEscGhhc2U6ZixjYWxsYmFjazpkfTtoLnB1c2gobSk7Y29uc3QgXz1UMSh0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LGMsbmV3IE1hcCk7cmV0dXJu'@;
put 'IF8uaGFzKGEpfHwoUGYoYyxDSSksUGYoYyxDSSsiLSIrYSksXy5zZXQoYSxqWikpLCgpPT57dGhpcy5fZW5naW5lLmFmdGVyRmx1c2goKCk9Pntjb25zdCBPPWguaW5kZXhPZihtKTtPPj0wJiZoLnNwbGljZShPLDEpLHRoaXMuX3RyaWdnZXJzLmhhcyhhKXx8Xy5kZWxldGUoYSl9KX19cmVn'@;
put 'aXN0ZXIoYyxhKXtyZXR1cm4hdGhpcy5fdHJpZ2dlcnMuaGFzKGMpJiYodGhpcy5fdHJpZ2dlcnMuc2V0KGMsYSksITApfV9nZXRUcmlnZ2VyKGMpe2NvbnN0IGE9dGhpcy5fdHJpZ2dlcnMuZ2V0KGMpO2lmKCFhKXRocm93IGZ1bmN0aW9uIHVqZShsKXtyZXR1cm4gbmV3IElyKDM0MDEsITEp'@;
put 'fSgpO3JldHVybiBhfXRyaWdnZXIoYyxhLGYsZD0hMCl7Y29uc3QgaD10aGlzLl9nZXRUcmlnZ2VyKGEpLG09bmV3IHpaKHRoaXMuaWQsYSxjKTtsZXQgXz10aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldChjKTtffHwoUGYoYyxDSSksUGYoYyxDSSsiLSIrYSksdGhpcy5fZW5naW5l'@;
put 'LnN0YXRlc0J5RWxlbWVudC5zZXQoYyxfPW5ldyBNYXApKTtsZXQgTz1fLmdldChhKTtjb25zdCBYPW5ldyBCWihmLHRoaXMuaWQpO2lmKCEoZiYmZi5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKSkmJk8mJlguYWJzb3JiT3B0aW9ucyhPLm9wdGlvbnMpLF8uc2V0KGEsWCksT3x8KE89alopLFgu'@;
put 'dmFsdWUhPT1EUyYmTy52YWx1ZT09PVgudmFsdWUpe2lmKCFmdW5jdGlvbiBkemUobCxjKXtjb25zdCBhPU9iamVjdC5rZXlzKGwpLGY9T2JqZWN0LmtleXMoYyk7aWYoYS5sZW5ndGghPWYubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgZD0wO2Q8YS5sZW5ndGg7ZCsrKXtjb25zdCBoPWFbZF07'@;
put 'aWYoIWMuaGFzT3duUHJvcGVydHkoaCl8fGxbaF0hPT1jW2hdKXJldHVybiExfXJldHVybiEwfShPLnBhcmFtcyxYLnBhcmFtcykpe2NvbnN0IFplPVtdLGx0PWgubWF0Y2hTdHlsZXMoTy52YWx1ZSxPLnBhcmFtcyxaZSksZHQ9aC5tYXRjaFN0eWxlcyhYLnZhbHVlLFgucGFyYW1zLFplKTta'@;
put 'ZS5sZW5ndGg/dGhpcy5fZW5naW5lLnJlcG9ydEVycm9yKFplKTp0aGlzLl9lbmdpbmUuYWZ0ZXJGbHVzaCgoKT0+e2g1KGMsbHQpLExoKGMsZHQpfSl9cmV0dXJufWNvbnN0IGJlPVQxKHRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LGMsW10pO2JlLmZvckVhY2goWmU9PntaZS5uYW1l'@;
put 'c3BhY2VJZD09dGhpcy5pZCYmWmUudHJpZ2dlck5hbWU9PWEmJlplLnF1ZXVlZCYmWmUuZGVzdHJveSgpfSk7bGV0IHhlPWgubWF0Y2hUcmFuc2l0aW9uKE8udmFsdWUsWC52YWx1ZSxjLFgucGFyYW1zKSxWZT0hMTtpZigheGUpe2lmKCFkKXJldHVybjt4ZT1oLmZhbGxiYWNrVHJhbnNpdGlv'@;
put 'bixWZT0hMH1yZXR1cm4gdGhpcy5fZW5naW5lLnRvdGFsUXVldWVkUGxheWVycysrLHRoaXMuX3F1ZXVlLnB1c2goe2VsZW1lbnQ6Yyx0cmlnZ2VyTmFtZTphLHRyYW5zaXRpb246eGUsZnJvbVN0YXRlOk8sdG9TdGF0ZTpYLHBsYXllcjptLGlzRmFsbGJhY2tUcmFuc2l0aW9uOlZlfSksVmV8'@;
put 'fChQZihjLGVjZSksbS5vblN0YXJ0KCgpPT57STcoYyxlY2UpfSkpLG0ub25Eb25lKCgpPT57bGV0IFplPXRoaXMucGxheWVycy5pbmRleE9mKG0pO1plPj0wJiZ0aGlzLnBsYXllcnMuc3BsaWNlKFplLDEpO2NvbnN0IGx0PXRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LmdldChjKTtp'@;
put 'ZihsdCl7bGV0IGR0PWx0LmluZGV4T2YobSk7ZHQ+PTAmJmx0LnNwbGljZShkdCwxKX19KSx0aGlzLnBsYXllcnMucHVzaChtKSxiZS5wdXNoKG0pLG19ZGVyZWdpc3RlcihjKXt0aGlzLl90cmlnZ2Vycy5kZWxldGUoYyksdGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5mb3JFYWNoKGE9'@;
put 'PmEuZGVsZXRlKGMpKSx0aGlzLl9lbGVtZW50TGlzdGVuZXJzLmZvckVhY2goKGEsZik9Pnt0aGlzLl9lbGVtZW50TGlzdGVuZXJzLnNldChmLGEuZmlsdGVyKGQ9PmQubmFtZSE9YykpfSl9Y2xlYXJFbGVtZW50Q2FjaGUoYyl7dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5kZWxldGUo'@;
put 'YyksdGhpcy5fZWxlbWVudExpc3RlbmVycy5kZWxldGUoYyk7Y29uc3QgYT10aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudC5nZXQoYyk7YSYmKGEuZm9yRWFjaChmPT5mLmRlc3Ryb3koKSksdGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQuZGVsZXRlKGMpKX1fc2lnbmFsUmVtb3Zh'@;
put 'bEZvcklubmVyVHJpZ2dlcnMoYyxhKXtjb25zdCBmPXRoaXMuX2VuZ2luZS5kcml2ZXIucXVlcnkoYyxTSSwhMCk7Zi5mb3JFYWNoKGQ9PntpZihkW1JkXSlyZXR1cm47Y29uc3QgaD10aGlzLl9lbmdpbmUuZmV0Y2hOYW1lc3BhY2VzQnlFbGVtZW50KGQpO2guc2l6ZT9oLmZvckVhY2gobT0+'@;
put 'bS50cmlnZ2VyTGVhdmVBbmltYXRpb24oZCxhLCExLCEwKSk6dGhpcy5jbGVhckVsZW1lbnRDYWNoZShkKX0pLHRoaXMuX2VuZ2luZS5hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUoKCk9PmYuZm9yRWFjaChkPT50aGlzLmNsZWFyRWxlbWVudENhY2hlKGQpKSl9dHJpZ2dlckxlYXZlQW5pbWF0'@;
put 'aW9uKGMsYSxmLGQpe2NvbnN0IGg9dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5nZXQoYyksbT1uZXcgTWFwO2lmKGgpe2NvbnN0IF89W107aWYoaC5mb3JFYWNoKChPLFgpPT57aWYobS5zZXQoWCxPLnZhbHVlKSx0aGlzLl90cmlnZ2Vycy5oYXMoWCkpe2NvbnN0IGFlPXRoaXMudHJp'@;
put 'Z2dlcihjLFgsRFMsZCk7YWUmJl8ucHVzaChhZSl9fSksXy5sZW5ndGgpcmV0dXJuIHRoaXMuX2VuZ2luZS5tYXJrRWxlbWVudEFzUmVtb3ZlZCh0aGlzLmlkLGMsITAsYSxtKSxmJiZTNChfKS5vbkRvbmUoKCk9PnRoaXMuX2VuZ2luZS5wcm9jZXNzTGVhdmVOb2RlKGMpKSwhMH1yZXR1cm4h'@;
put 'MX1wcmVwYXJlTGVhdmVBbmltYXRpb25MaXN0ZW5lcnMoYyl7Y29uc3QgYT10aGlzLl9lbGVtZW50TGlzdGVuZXJzLmdldChjKSxmPXRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZ2V0KGMpO2lmKGEmJmYpe2NvbnN0IGQ9bmV3IFNldDthLmZvckVhY2goaD0+e2NvbnN0IG09aC5uYW1l'@;
put 'O2lmKGQuaGFzKG0pKXJldHVybjtkLmFkZChtKTtjb25zdCBPPXRoaXMuX3RyaWdnZXJzLmdldChtKS5mYWxsYmFja1RyYW5zaXRpb24sWD1mLmdldChtKXx8alosYWU9bmV3IEJaKERTKSxwZT1uZXcgeloodGhpcy5pZCxtLGMpO3RoaXMuX2VuZ2luZS50b3RhbFF1ZXVlZFBsYXllcnMrKyx0'@;
put 'aGlzLl9xdWV1ZS5wdXNoKHtlbGVtZW50OmMsdHJpZ2dlck5hbWU6bSx0cmFuc2l0aW9uOk8sZnJvbVN0YXRlOlgsdG9TdGF0ZTphZSxwbGF5ZXI6cGUsaXNGYWxsYmFja1RyYW5zaXRpb246ITB9KX0pfX1yZW1vdmVOb2RlKGMsYSl7Y29uc3QgZj10aGlzLl9lbmdpbmU7aWYoYy5jaGlsZEVs'@;
put 'ZW1lbnRDb3VudCYmdGhpcy5fc2lnbmFsUmVtb3ZhbEZvcklubmVyVHJpZ2dlcnMoYyxhKSx0aGlzLnRyaWdnZXJMZWF2ZUFuaW1hdGlvbihjLGEsITApKXJldHVybjtsZXQgZD0hMTtpZihmLnRvdGFsQW5pbWF0aW9ucyl7Y29uc3QgaD1mLnBsYXllcnMubGVuZ3RoP2YucGxheWVyc0J5UXVl'@;
put 'cmllZEVsZW1lbnQuZ2V0KGMpOltdO2lmKGgmJmgubGVuZ3RoKWQ9ITA7ZWxzZXtsZXQgbT1jO2Zvcig7bT1tLnBhcmVudE5vZGU7KWlmKGYuc3RhdGVzQnlFbGVtZW50LmdldChtKSl7ZD0hMDticmVha319fWlmKHRoaXMucHJlcGFyZUxlYXZlQW5pbWF0aW9uTGlzdGVuZXJzKGMpLGQpZi5t'@;
put 'YXJrRWxlbWVudEFzUmVtb3ZlZCh0aGlzLmlkLGMsITEsYSk7ZWxzZXtjb25zdCBoPWNbUmRdOyghaHx8aD09PXRjZSkmJihmLmFmdGVyRmx1c2goKCk9PnRoaXMuY2xlYXJFbGVtZW50Q2FjaGUoYykpLGYuZGVzdHJveUlubmVyQW5pbWF0aW9ucyhjKSxmLl9vblJlbW92YWxDb21wbGV0ZShj'@;
put 'LGEpKX19aW5zZXJ0Tm9kZShjLGEpe1BmKGMsdGhpcy5faG9zdENsYXNzTmFtZSl9ZHJhaW5RdWV1ZWRUcmFuc2l0aW9ucyhjKXtjb25zdCBhPVtdO3JldHVybiB0aGlzLl9xdWV1ZS5mb3JFYWNoKGY9Pntjb25zdCBkPWYucGxheWVyO2lmKGQuZGVzdHJveWVkKXJldHVybjtjb25zdCBoPWYu'@;
put 'ZWxlbWVudCxtPXRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZ2V0KGgpO20mJm0uZm9yRWFjaChfPT57aWYoXy5uYW1lPT1mLnRyaWdnZXJOYW1lKXtjb25zdCBPPU1aKGgsZi50cmlnZ2VyTmFtZSxmLmZyb21TdGF0ZS52YWx1ZSxmLnRvU3RhdGUudmFsdWUpO08uX2RhdGE9YyxDWihmLnBsYXll'@;
put 'cixfLnBoYXNlLE8sXy5jYWxsYmFjayl9fSksZC5tYXJrZWRGb3JEZXN0cm95P3RoaXMuX2VuZ2luZS5hZnRlckZsdXNoKCgpPT57ZC5kZXN0cm95KCl9KTphLnB1c2goZil9KSx0aGlzLl9xdWV1ZT1bXSxhLnNvcnQoKGYsZCk9Pntjb25zdCBoPWYudHJhbnNpdGlvbi5hc3QuZGVwQ291bnQs'@;
put 'bT1kLnRyYW5zaXRpb24uYXN0LmRlcENvdW50O3JldHVybiAwPT1ofHwwPT1tP2gtbTp0aGlzLl9lbmdpbmUuZHJpdmVyLmNvbnRhaW5zRWxlbWVudChmLmVsZW1lbnQsZC5lbGVtZW50KT8xOi0xfSl9ZGVzdHJveShjKXt0aGlzLnBsYXllcnMuZm9yRWFjaChhPT5hLmRlc3Ryb3koKSksdGhp'@;
put 'cy5fc2lnbmFsUmVtb3ZhbEZvcklubmVyVHJpZ2dlcnModGhpcy5ob3N0RWxlbWVudCxjKX19Y2xhc3MgYXple19vblJlbW92YWxDb21wbGV0ZShjLGEpe3RoaXMub25SZW1vdmFsQ29tcGxldGUoYyxhKX1jb25zdHJ1Y3RvcihjLGEsZil7dGhpcy5ib2R5Tm9kZT1jLHRoaXMuZHJpdmVyPWEs'@;
put 'dGhpcy5fbm9ybWFsaXplcj1mLHRoaXMucGxheWVycz1bXSx0aGlzLm5ld0hvc3RFbGVtZW50cz1uZXcgTWFwLHRoaXMucGxheWVyc0J5RWxlbWVudD1uZXcgTWFwLHRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQ9bmV3IE1hcCx0aGlzLnN0YXRlc0J5RWxlbWVudD1uZXcgTWFwLHRoaXMu'@;
put 'ZGlzYWJsZWROb2Rlcz1uZXcgU2V0LHRoaXMudG90YWxBbmltYXRpb25zPTAsdGhpcy50b3RhbFF1ZXVlZFBsYXllcnM9MCx0aGlzLl9uYW1lc3BhY2VMb29rdXA9e30sdGhpcy5fbmFtZXNwYWNlTGlzdD1bXSx0aGlzLl9mbHVzaEZucz1bXSx0aGlzLl93aGVuUXVpZXRGbnM9W10sdGhpcy5u'@;
put 'YW1lc3BhY2VzQnlIb3N0RWxlbWVudD1uZXcgTWFwLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cz1bXSx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHM9W10sdGhpcy5vblJlbW92YWxDb21wbGV0ZT0oZCxoKT0+e319Z2V0IHF1ZXVlZFBsYXllcnMoKXtjb25zdCBjPVtdO3JldHVybiB0'@;
put 'aGlzLl9uYW1lc3BhY2VMaXN0LmZvckVhY2goYT0+e2EucGxheWVycy5mb3JFYWNoKGY9PntmLnF1ZXVlZCYmYy5wdXNoKGYpfSl9KSxjfWNyZWF0ZU5hbWVzcGFjZShjLGEpe2NvbnN0IGY9bmV3IG96ZShjLGEsdGhpcyk7cmV0dXJuIHRoaXMuYm9keU5vZGUmJnRoaXMuZHJpdmVyLmNvbnRh'@;
put 'aW5zRWxlbWVudCh0aGlzLmJvZHlOb2RlLGEpP3RoaXMuX2JhbGFuY2VOYW1lc3BhY2VMaXN0KGYsYSk6KHRoaXMubmV3SG9zdEVsZW1lbnRzLnNldChhLGYpLHRoaXMuY29sbGVjdEVudGVyRWxlbWVudChhKSksdGhpcy5fbmFtZXNwYWNlTG9va3VwW2NdPWZ9X2JhbGFuY2VOYW1lc3BhY2VM'@;
put 'aXN0KGMsYSl7Y29uc3QgZj10aGlzLl9uYW1lc3BhY2VMaXN0LGQ9dGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudDtpZihmLmxlbmd0aC0xPj0wKXtsZXQgbT0hMSxfPXRoaXMuZHJpdmVyLmdldFBhcmVudEVsZW1lbnQoYSk7Zm9yKDtfOyl7Y29uc3QgTz1kLmdldChfKTtpZihPKXtjb25z'@;
put 'dCBYPWYuaW5kZXhPZihPKTtmLnNwbGljZShYKzEsMCxjKSxtPSEwO2JyZWFrfV89dGhpcy5kcml2ZXIuZ2V0UGFyZW50RWxlbWVudChfKX1tfHxmLnVuc2hpZnQoYyl9ZWxzZSBmLnB1c2goYyk7cmV0dXJuIGQuc2V0KGEsYyksY31yZWdpc3RlcihjLGEpe2xldCBmPXRoaXMuX25hbWVzcGFj'@;
put 'ZUxvb2t1cFtjXTtyZXR1cm4gZnx8KGY9dGhpcy5jcmVhdGVOYW1lc3BhY2UoYyxhKSksZn1yZWdpc3RlclRyaWdnZXIoYyxhLGYpe2xldCBkPXRoaXMuX25hbWVzcGFjZUxvb2t1cFtjXTtkJiZkLnJlZ2lzdGVyKGEsZikmJnRoaXMudG90YWxBbmltYXRpb25zKyt9ZGVzdHJveShjLGEpe2Mm'@;
put 'Jih0aGlzLmFmdGVyRmx1c2goKCk9Pnt9KSx0aGlzLmFmdGVyRmx1c2hBbmltYXRpb25zRG9uZSgoKT0+e2NvbnN0IGY9dGhpcy5fZmV0Y2hOYW1lc3BhY2UoYyk7dGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudC5kZWxldGUoZi5ob3N0RWxlbWVudCk7Y29uc3QgZD10aGlzLl9uYW1lc3Bh'@;
put 'Y2VMaXN0LmluZGV4T2YoZik7ZD49MCYmdGhpcy5fbmFtZXNwYWNlTGlzdC5zcGxpY2UoZCwxKSxmLmRlc3Ryb3koYSksZGVsZXRlIHRoaXMuX25hbWVzcGFjZUxvb2t1cFtjXX0pKX1fZmV0Y2hOYW1lc3BhY2UoYyl7cmV0dXJuIHRoaXMuX25hbWVzcGFjZUxvb2t1cFtjXX1mZXRjaE5hbWVz'@;
put 'cGFjZXNCeUVsZW1lbnQoYyl7Y29uc3QgYT1uZXcgU2V0LGY9dGhpcy5zdGF0ZXNCeUVsZW1lbnQuZ2V0KGMpO2lmKGYpZm9yKGxldCBkIG9mIGYudmFsdWVzKCkpaWYoZC5uYW1lc3BhY2VJZCl7Y29uc3QgaD10aGlzLl9mZXRjaE5hbWVzcGFjZShkLm5hbWVzcGFjZUlkKTtoJiZhLmFkZCho'@;
put 'KX1yZXR1cm4gYX10cmlnZ2VyKGMsYSxmLGQpe2lmKElJKGEpKXtjb25zdCBoPXRoaXMuX2ZldGNoTmFtZXNwYWNlKGMpO2lmKGgpcmV0dXJuIGgudHJpZ2dlcihhLGYsZCksITB9cmV0dXJuITF9aW5zZXJ0Tm9kZShjLGEsZixkKXtpZighSUkoYSkpcmV0dXJuO2NvbnN0IGg9YVtSZF07aWYo'@;
put 'aCYmaC5zZXRGb3JSZW1vdmFsKXtoLnNldEZvclJlbW92YWw9ITEsaC5zZXRGb3JNb3ZlPSEwO2NvbnN0IG09dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmluZGV4T2YoYSk7bT49MCYmdGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLnNwbGljZShtLDEpfWlmKGMpe2NvbnN0IG09dGhp'@;
put 'cy5fZmV0Y2hOYW1lc3BhY2UoYyk7bSYmbS5pbnNlcnROb2RlKGEsZil9ZCYmdGhpcy5jb2xsZWN0RW50ZXJFbGVtZW50KGEpfWNvbGxlY3RFbnRlckVsZW1lbnQoYyl7dGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLnB1c2goYyl9bWFya0VsZW1lbnRBc0Rpc2FibGVkKGMsYSl7YT90aGlz'@;
put 'LmRpc2FibGVkTm9kZXMuaGFzKGMpfHwodGhpcy5kaXNhYmxlZE5vZGVzLmFkZChjKSxQZihjLFZaKSk6dGhpcy5kaXNhYmxlZE5vZGVzLmhhcyhjKSYmKHRoaXMuZGlzYWJsZWROb2Rlcy5kZWxldGUoYyksSTcoYyxWWikpfXJlbW92ZU5vZGUoYyxhLGYpe2lmKElJKGEpKXtjb25zdCBkPWM/'@;
put 'dGhpcy5fZmV0Y2hOYW1lc3BhY2UoYyk6bnVsbDtkP2QucmVtb3ZlTm9kZShhLGYpOnRoaXMubWFya0VsZW1lbnRBc1JlbW92ZWQoYyxhLCExLGYpO2NvbnN0IGg9dGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudC5nZXQoYSk7aCYmaC5pZCE9PWMmJmgucmVtb3ZlTm9kZShhLGYpfWVsc2Ug'@;
put 'dGhpcy5fb25SZW1vdmFsQ29tcGxldGUoYSxmKX1tYXJrRWxlbWVudEFzUmVtb3ZlZChjLGEsZixkLGgpe3RoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5wdXNoKGEpLGFbUmRdPXtuYW1lc3BhY2VJZDpjLHNldEZvclJlbW92YWw6ZCxoYXNBbmltYXRpb246ZixyZW1vdmVkQmVmb3JlUXVl'@;
put 'cmllZDohMSxwcmV2aW91c1RyaWdnZXJzVmFsdWVzOmh9fWxpc3RlbihjLGEsZixkLGgpe3JldHVybiBJSShhKT90aGlzLl9mZXRjaE5hbWVzcGFjZShjKS5saXN0ZW4oYSxmLGQsaCk6KCk9Pnt9fV9idWlsZEluc3RydWN0aW9uKGMsYSxmLGQsaCl7cmV0dXJuIGMudHJhbnNpdGlvbi5idWls'@;
put 'ZCh0aGlzLmRyaXZlcixjLmVsZW1lbnQsYy5mcm9tU3RhdGUudmFsdWUsYy50b1N0YXRlLnZhbHVlLGYsZCxjLmZyb21TdGF0ZS5vcHRpb25zLGMudG9TdGF0ZS5vcHRpb25zLGEsaCl9ZGVzdHJveUlubmVyQW5pbWF0aW9ucyhjKXtsZXQgYT10aGlzLmRyaXZlci5xdWVyeShjLFNJLCEwKTth'@;
put 'LmZvckVhY2goZj0+dGhpcy5kZXN0cm95QWN0aXZlQW5pbWF0aW9uc0ZvckVsZW1lbnQoZikpLDAhPXRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuc2l6ZSYmKGE9dGhpcy5kcml2ZXIucXVlcnkoYyxBWiwhMCksYS5mb3JFYWNoKGY9PnRoaXMuZmluaXNoQWN0aXZlUXVlcmllZEFuaW1h'@;
put 'dGlvbk9uRWxlbWVudChmKSkpfWRlc3Ryb3lBY3RpdmVBbmltYXRpb25zRm9yRWxlbWVudChjKXtjb25zdCBhPXRoaXMucGxheWVyc0J5RWxlbWVudC5nZXQoYyk7YSYmYS5mb3JFYWNoKGY9PntmLnF1ZXVlZD9mLm1hcmtlZEZvckRlc3Ryb3k9ITA6Zi5kZXN0cm95KCl9KX1maW5pc2hBY3Rp'@;
put 'dmVRdWVyaWVkQW5pbWF0aW9uT25FbGVtZW50KGMpe2NvbnN0IGE9dGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5nZXQoYyk7YSYmYS5mb3JFYWNoKGY9PmYuZmluaXNoKCkpfXdoZW5SZW5kZXJpbmdEb25lKCl7cmV0dXJuIG5ldyBQcm9taXNlKGM9PntpZih0aGlzLnBsYXllcnMubGVu'@;
put 'Z3RoKXJldHVybiBTNCh0aGlzLnBsYXllcnMpLm9uRG9uZSgoKT0+YygpKTtjKCl9KX1wcm9jZXNzTGVhdmVOb2RlKGMpe2NvbnN0IGE9Y1tSZF07aWYoYSYmYS5zZXRGb3JSZW1vdmFsKXtpZihjW1JkXT10Y2UsYS5uYW1lc3BhY2VJZCl7dGhpcy5kZXN0cm95SW5uZXJBbmltYXRpb25zKGMp'@;
put 'O2NvbnN0IGY9dGhpcy5fZmV0Y2hOYW1lc3BhY2UoYS5uYW1lc3BhY2VJZCk7ZiYmZi5jbGVhckVsZW1lbnRDYWNoZShjKX10aGlzLl9vblJlbW92YWxDb21wbGV0ZShjLGEuc2V0Rm9yUmVtb3ZhbCl9Yy5jbGFzc0xpc3Q/LmNvbnRhaW5zKFZaKSYmdGhpcy5tYXJrRWxlbWVudEFzRGlzYWJs'@;
put 'ZWQoYywhMSksdGhpcy5kcml2ZXIucXVlcnkoYywiLm5nLWFuaW1hdGUtZGlzYWJsZWQiLCEwKS5mb3JFYWNoKGY9Pnt0aGlzLm1hcmtFbGVtZW50QXNEaXNhYmxlZChmLCExKX0pfWZsdXNoKGM9LTEpe2xldCBhPVtdO2lmKHRoaXMubmV3SG9zdEVsZW1lbnRzLnNpemUmJih0aGlzLm5ld0hv'@;
put 'c3RFbGVtZW50cy5mb3JFYWNoKChmLGQpPT50aGlzLl9iYWxhbmNlTmFtZXNwYWNlTGlzdChmLGQpKSx0aGlzLm5ld0hvc3RFbGVtZW50cy5jbGVhcigpKSx0aGlzLnRvdGFsQW5pbWF0aW9ucyYmdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aClmb3IobGV0IGY9MDtmPHRoaXMu'@;
put 'Y29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGg7ZisrKVBmKHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50c1tmXSwibmctc3Rhci1pbnNlcnRlZCIpO2lmKHRoaXMuX25hbWVzcGFjZUxpc3QubGVuZ3RoJiYodGhpcy50b3RhbFF1ZXVlZFBsYXllcnN8fHRoaXMuY29sbGVjdGVkTGVhdmVF'@;
put 'bGVtZW50cy5sZW5ndGgpKXtjb25zdCBmPVtdO3RyeXthPXRoaXMuX2ZsdXNoQW5pbWF0aW9ucyhmLGMpfWZpbmFsbHl7Zm9yKGxldCBkPTA7ZDxmLmxlbmd0aDtkKyspZltkXSgpfX1lbHNlIGZvcihsZXQgZj0wO2Y8dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aDtmKyspdGhp'@;
put 'cy5wcm9jZXNzTGVhdmVOb2RlKHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50c1tmXSk7aWYodGhpcy50b3RhbFF1ZXVlZFBsYXllcnM9MCx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoPTAsdGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aD0wLHRoaXMuX2ZsdXNo'@;
put 'Rm5zLmZvckVhY2goZj0+ZigpKSx0aGlzLl9mbHVzaEZucz1bXSx0aGlzLl93aGVuUXVpZXRGbnMubGVuZ3RoKXtjb25zdCBmPXRoaXMuX3doZW5RdWlldEZuczt0aGlzLl93aGVuUXVpZXRGbnM9W10sYS5sZW5ndGg/UzQoYSkub25Eb25lKCgpPT57Zi5mb3JFYWNoKGQ9PmQoKSl9KTpmLmZv'@;
put 'ckVhY2goZD0+ZCgpKX19cmVwb3J0RXJyb3IoYyl7dGhyb3cgZnVuY3Rpb24gY2plKGwpe3JldHVybiBuZXcgSXIoMzQwMiwhMSl9KCl9X2ZsdXNoQW5pbWF0aW9ucyhjLGEpe2NvbnN0IGY9bmV3IFRJLGQ9W10saD1uZXcgTWFwLG09W10sXz1uZXcgTWFwLE89bmV3IE1hcCxYPW5ldyBNYXAs'@;
put 'YWU9bmV3IFNldDt0aGlzLmRpc2FibGVkTm9kZXMuZm9yRWFjaChWbj0+e2FlLmFkZChWbik7Y29uc3QgY3I9dGhpcy5kcml2ZXIucXVlcnkoVm4sIi5uZy1hbmltYXRlLXF1ZXVlZCIsITApO2ZvcihsZXQgQ3I9MDtDcjxjci5sZW5ndGg7Q3IrKylhZS5hZGQoY3JbQ3JdKX0pO2NvbnN0IHBl'@;
put 'PXRoaXMuYm9keU5vZGUsYmU9QXJyYXkuZnJvbSh0aGlzLnN0YXRlc0J5RWxlbWVudC5rZXlzKCkpLHhlPWljZShiZSx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMpLFZlPW5ldyBNYXA7bGV0IFplPTA7eGUuZm9yRWFjaCgoVm4sY3IpPT57Y29uc3QgQ3I9eForWmUrKztWZS5zZXQoY3Is'@;
put 'Q3IpLFZuLmZvckVhY2goWXI9PlBmKFlyLENyKSl9KTtjb25zdCBsdD1bXSxkdD1uZXcgU2V0LGd0PW5ldyBTZXQ7Zm9yKGxldCBWbj0wO1ZuPHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5sZW5ndGg7Vm4rKyl7Y29uc3QgY3I9dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzW1ZuXSxD'@;
put 'cj1jcltSZF07Q3ImJkNyLnNldEZvclJlbW92YWwmJihsdC5wdXNoKGNyKSxkdC5hZGQoY3IpLENyLmhhc0FuaW1hdGlvbj90aGlzLmRyaXZlci5xdWVyeShjciwiLm5nLXN0YXItaW5zZXJ0ZWQiLCEwKS5mb3JFYWNoKFlyPT5kdC5hZGQoWXIpKTpndC5hZGQoY3IpKX1jb25zdCBqdD1uZXcg'@;
put 'TWFwLHJuPWljZShiZSxBcnJheS5mcm9tKGR0KSk7cm4uZm9yRWFjaCgoVm4sY3IpPT57Y29uc3QgQ3I9d0krWmUrKztqdC5zZXQoY3IsQ3IpLFZuLmZvckVhY2goWXI9PlBmKFlyLENyKSl9KSxjLnB1c2goKCk9Pnt4ZS5mb3JFYWNoKChWbixjcik9Pntjb25zdCBDcj1WZS5nZXQoY3IpO1Zu'@;
put 'LmZvckVhY2goWXI9Pkk3KFlyLENyKSl9KSxybi5mb3JFYWNoKChWbixjcik9Pntjb25zdCBDcj1qdC5nZXQoY3IpO1ZuLmZvckVhY2goWXI9Pkk3KFlyLENyKSl9KSxsdC5mb3JFYWNoKFZuPT57dGhpcy5wcm9jZXNzTGVhdmVOb2RlKFZuKX0pfSk7Y29uc3QgWHQ9W10seW49W107Zm9yKGxl'@;
put 'dCBWbj10aGlzLl9uYW1lc3BhY2VMaXN0Lmxlbmd0aC0xO1ZuPj0wO1ZuLS0pdGhpcy5fbmFtZXNwYWNlTGlzdFtWbl0uZHJhaW5RdWV1ZWRUcmFuc2l0aW9ucyhhKS5mb3JFYWNoKENyPT57Y29uc3QgWXI9Q3IucGxheWVyLFN0PUNyLmVsZW1lbnQ7aWYoWHQucHVzaChZciksdGhpcy5jb2xs'@;
put 'ZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aCl7Y29uc3QgTHI9U3RbUmRdO2lmKExyJiZMci5zZXRGb3JNb3ZlKXtpZihMci5wcmV2aW91c1RyaWdnZXJzVmFsdWVzJiZMci5wcmV2aW91c1RyaWdnZXJzVmFsdWVzLmhhcyhDci50cmlnZ2VyTmFtZSkpe2NvbnN0IE5yPUxyLnByZXZpb3VzVHJp'@;
put 'Z2dlcnNWYWx1ZXMuZ2V0KENyLnRyaWdnZXJOYW1lKSxkaT10aGlzLnN0YXRlc0J5RWxlbWVudC5nZXQoQ3IuZWxlbWVudCk7aWYoZGkmJmRpLmhhcyhDci50cmlnZ2VyTmFtZSkpe2NvbnN0IHFyPWRpLmdldChDci50cmlnZ2VyTmFtZSk7cXIudmFsdWU9TnIsZGkuc2V0KENyLnRyaWdnZXJO'@;
put 'YW1lLHFyKX19cmV0dXJuIHZvaWQgWXIuZGVzdHJveSgpfX1jb25zdCBGdD0hcGV8fCF0aGlzLmRyaXZlci5jb250YWluc0VsZW1lbnQocGUsU3QpLFd0PWp0LmdldChTdCksd249VmUuZ2V0KFN0KSxTbj10aGlzLl9idWlsZEluc3RydWN0aW9uKENyLGYsd24sV3QsRnQpO2lmKFNuLmVycm9y'@;
put 'cyYmU24uZXJyb3JzLmxlbmd0aClyZXR1cm4gdm9pZCB5bi5wdXNoKFNuKTtpZihGdClyZXR1cm4gWXIub25TdGFydCgoKT0+aDUoU3QsU24uZnJvbVN0eWxlcykpLFlyLm9uRGVzdHJveSgoKT0+TGgoU3QsU24udG9TdHlsZXMpKSx2b2lkIGQucHVzaChZcik7aWYoQ3IuaXNGYWxsYmFja1Ry'@;
put 'YW5zaXRpb24pcmV0dXJuIFlyLm9uU3RhcnQoKCk9Pmg1KFN0LFNuLmZyb21TdHlsZXMpKSxZci5vbkRlc3Ryb3koKCk9PkxoKFN0LFNuLnRvU3R5bGVzKSksdm9pZCBkLnB1c2goWXIpO2NvbnN0IGJyPVtdO1NuLnRpbWVsaW5lcy5mb3JFYWNoKExyPT57THIuc3RyZXRjaFN0YXJ0aW5nS2V5'@;
put 'ZnJhbWU9ITAsdGhpcy5kaXNhYmxlZE5vZGVzLmhhcyhMci5lbGVtZW50KXx8YnIucHVzaChMcil9KSxTbi50aW1lbGluZXM9YnIsZi5hcHBlbmQoU3QsU24udGltZWxpbmVzKSxtLnB1c2goe2luc3RydWN0aW9uOlNuLHBsYXllcjpZcixlbGVtZW50OlN0fSksU24ucXVlcmllZEVsZW1lbnRz'@;
put 'LmZvckVhY2goTHI9PlQxKF8sTHIsW10pLnB1c2goWXIpKSxTbi5wcmVTdHlsZVByb3BzLmZvckVhY2goKExyLE5yKT0+e2lmKExyLnNpemUpe2xldCBkaT1PLmdldChOcik7ZGl8fE8uc2V0KE5yLGRpPW5ldyBTZXQpLExyLmZvckVhY2goKHFyLFJpKT0+ZGkuYWRkKFJpKSl9fSksU24ucG9z'@;
put 'dFN0eWxlUHJvcHMuZm9yRWFjaCgoTHIsTnIpPT57bGV0IGRpPVguZ2V0KE5yKTtkaXx8WC5zZXQoTnIsZGk9bmV3IFNldCksTHIuZm9yRWFjaCgocXIsUmkpPT5kaS5hZGQoUmkpKX0pfSk7aWYoeW4ubGVuZ3RoKXtjb25zdCBWbj1bXTt5bi5mb3JFYWNoKGNyPT57Vm4ucHVzaChmdW5jdGlv'@;
put 'biBmamUobCxjKXtyZXR1cm4gbmV3IElyKDM1MDUsITEpfSgpKX0pLFh0LmZvckVhY2goY3I9PmNyLmRlc3Ryb3koKSksdGhpcy5yZXBvcnRFcnJvcihWbil9Y29uc3QgUW49bmV3IE1hcCxPcj1uZXcgTWFwO20uZm9yRWFjaChWbj0+e2NvbnN0IGNyPVZuLmVsZW1lbnQ7Zi5oYXMoY3IpJiYo'@;
put 'T3Iuc2V0KGNyLGNyKSx0aGlzLl9iZWZvcmVBbmltYXRpb25CdWlsZChWbi5wbGF5ZXIubmFtZXNwYWNlSWQsVm4uaW5zdHJ1Y3Rpb24sUW4pKX0pLGQuZm9yRWFjaChWbj0+e2NvbnN0IGNyPVZuLmVsZW1lbnQ7dGhpcy5fZ2V0UHJldmlvdXNQbGF5ZXJzKGNyLCExLFZuLm5hbWVzcGFjZUlk'@;
put 'LFZuLnRyaWdnZXJOYW1lLG51bGwpLmZvckVhY2goWXI9PntUMShRbixjcixbXSkucHVzaChZciksWXIuZGVzdHJveSgpfSl9KTtjb25zdCBWcj1sdC5maWx0ZXIoVm49PmFjZShWbixPLFgpKSxacj1uZXcgTWFwO3JjZShacix0aGlzLmRyaXZlcixndCxYLHEyKS5mb3JFYWNoKFZuPT57YWNl'@;
put 'KFZuLE8sWCkmJlZyLnB1c2goVm4pfSk7Y29uc3Qgc2k9bmV3IE1hcDt4ZS5mb3JFYWNoKChWbixjcik9PntyY2Uoc2ksdGhpcy5kcml2ZXIsbmV3IFNldChWbiksTywiISIpfSksVnIuZm9yRWFjaChWbj0+e2NvbnN0IGNyPVpyLmdldChWbiksQ3I9c2kuZ2V0KFZuKTtaci5zZXQoVm4sbmV3'@;
put 'IE1hcChbLi4uY3I/LmVudHJpZXMoKT8/W10sLi4uQ3I/LmVudHJpZXMoKT8/W11dKSl9KTtjb25zdCBBcj1bXSxFbj1bXSxUcj17fTttLmZvckVhY2goVm49Pntjb25zdHtlbGVtZW50OmNyLHBsYXllcjpDcixpbnN0cnVjdGlvbjpZcn09Vm47aWYoZi5oYXMoY3IpKXtpZihhZS5oYXMoY3Ip'@;
put 'KXJldHVybiBDci5vbkRlc3Ryb3koKCk9PkxoKGNyLFlyLnRvU3R5bGVzKSksQ3IuZGlzYWJsZWQ9ITAsQ3Iub3ZlcnJpZGVUb3RhbFRpbWUoWXIudG90YWxUaW1lKSx2b2lkIGQucHVzaChDcik7bGV0IFN0PVRyO2lmKE9yLnNpemU+MSl7bGV0IFd0PWNyO2NvbnN0IHduPVtdO2Zvcig7V3Q9'@;
put 'V3QucGFyZW50Tm9kZTspe2NvbnN0IFNuPU9yLmdldChXdCk7aWYoU24pe1N0PVNuO2JyZWFrfXduLnB1c2goV3QpfXduLmZvckVhY2goU249Pk9yLnNldChTbixTdCkpfWNvbnN0IEZ0PXRoaXMuX2J1aWxkQW5pbWF0aW9uKENyLm5hbWVzcGFjZUlkLFlyLFFuLGgsc2ksWnIpO2lmKENyLnNl'@;
put 'dFJlYWxQbGF5ZXIoRnQpLFN0PT09VHIpQXIucHVzaChDcik7ZWxzZXtjb25zdCBXdD10aGlzLnBsYXllcnNCeUVsZW1lbnQuZ2V0KFN0KTtXdCYmV3QubGVuZ3RoJiYoQ3IucGFyZW50UGxheWVyPVM0KFd0KSksZC5wdXNoKENyKX19ZWxzZSBoNShjcixZci5mcm9tU3R5bGVzKSxDci5vbkRl'@;
put 'c3Ryb3koKCk9PkxoKGNyLFlyLnRvU3R5bGVzKSksRW4ucHVzaChDciksYWUuaGFzKGNyKSYmZC5wdXNoKENyKX0pLEVuLmZvckVhY2goVm49Pntjb25zdCBjcj1oLmdldChWbi5lbGVtZW50KTtpZihjciYmY3IubGVuZ3RoKXtjb25zdCBDcj1TNChjcik7Vm4uc2V0UmVhbFBsYXllcihDcil9'@;
put 'fSksZC5mb3JFYWNoKFZuPT57Vm4ucGFyZW50UGxheWVyP1ZuLnN5bmNQbGF5ZXJFdmVudHMoVm4ucGFyZW50UGxheWVyKTpWbi5kZXN0cm95KCl9KTtmb3IobGV0IFZuPTA7Vm48bHQubGVuZ3RoO1ZuKyspe2NvbnN0IGNyPWx0W1ZuXSxDcj1jcltSZF07aWYoSTcoY3Isd0kpLENyJiZDci5o'@;
put 'YXNBbmltYXRpb24pY29udGludWU7bGV0IFlyPVtdO2lmKF8uc2l6ZSl7bGV0IEZ0PV8uZ2V0KGNyKTtGdCYmRnQubGVuZ3RoJiZZci5wdXNoKC4uLkZ0KTtsZXQgV3Q9dGhpcy5kcml2ZXIucXVlcnkoY3IsQVosITApO2ZvcihsZXQgd249MDt3bjxXdC5sZW5ndGg7d24rKyl7bGV0IFNuPV8u'@;
put 'Z2V0KFd0W3duXSk7U24mJlNuLmxlbmd0aCYmWXIucHVzaCguLi5Tbil9fWNvbnN0IFN0PVlyLmZpbHRlcihGdD0+IUZ0LmRlc3Ryb3llZCk7U3QubGVuZ3RoP2N6ZSh0aGlzLGNyLFN0KTp0aGlzLnByb2Nlc3NMZWF2ZU5vZGUoY3IpfXJldHVybiBsdC5sZW5ndGg9MCxBci5mb3JFYWNoKFZu'@;
put 'PT57dGhpcy5wbGF5ZXJzLnB1c2goVm4pLFZuLm9uRG9uZSgoKT0+e1ZuLmRlc3Ryb3koKTtjb25zdCBjcj10aGlzLnBsYXllcnMuaW5kZXhPZihWbik7dGhpcy5wbGF5ZXJzLnNwbGljZShjciwxKX0pLFZuLnBsYXkoKX0pLEFyfWFmdGVyRmx1c2goYyl7dGhpcy5fZmx1c2hGbnMucHVzaChj'@;
put 'KX1hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUoYyl7dGhpcy5fd2hlblF1aWV0Rm5zLnB1c2goYyl9X2dldFByZXZpb3VzUGxheWVycyhjLGEsZixkLGgpe2xldCBtPVtdO2lmKGEpe2NvbnN0IF89dGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5nZXQoYyk7XyYmKG09Xyl9ZWxzZXtjb25z'@;
put 'dCBfPXRoaXMucGxheWVyc0J5RWxlbWVudC5nZXQoYyk7aWYoXyl7Y29uc3QgTz0haHx8aD09RFM7Xy5mb3JFYWNoKFg9PntYLnF1ZXVlZHx8IU8mJlgudHJpZ2dlck5hbWUhPWR8fG0ucHVzaChYKX0pfX1yZXR1cm4oZnx8ZCkmJihtPW0uZmlsdGVyKF89PiEoZiYmZiE9Xy5uYW1lc3BhY2VJ'@;
put 'ZHx8ZCYmZCE9Xy50cmlnZ2VyTmFtZSkpKSxtfV9iZWZvcmVBbmltYXRpb25CdWlsZChjLGEsZil7Y29uc3QgaD1hLmVsZW1lbnQsbT1hLmlzUmVtb3ZhbFRyYW5zaXRpb24/dm9pZCAwOmMsXz1hLmlzUmVtb3ZhbFRyYW5zaXRpb24/dm9pZCAwOmEudHJpZ2dlck5hbWU7Zm9yKGNvbnN0IE8g'@;
put 'b2YgYS50aW1lbGluZXMpe2NvbnN0IFg9Ty5lbGVtZW50LGFlPVghPT1oLHBlPVQxKGYsWCxbXSk7dGhpcy5fZ2V0UHJldmlvdXNQbGF5ZXJzKFgsYWUsbSxfLGEudG9TdGF0ZSkuZm9yRWFjaCh4ZT0+e2NvbnN0IFZlPXhlLmdldFJlYWxQbGF5ZXIoKTtWZS5iZWZvcmVEZXN0cm95JiZWZS5i'@;
put 'ZWZvcmVEZXN0cm95KCkseGUuZGVzdHJveSgpLHBlLnB1c2goeGUpfSl9aDUoaCxhLmZyb21TdHlsZXMpfV9idWlsZEFuaW1hdGlvbihjLGEsZixkLGgsbSl7Y29uc3QgXz1hLnRyaWdnZXJOYW1lLE89YS5lbGVtZW50LFg9W10sYWU9bmV3IFNldCxwZT1uZXcgU2V0LGJlPWEudGltZWxpbmVz'@;
put 'Lm1hcChWZT0+e2NvbnN0IFplPVZlLmVsZW1lbnQ7YWUuYWRkKFplKTtjb25zdCBsdD1aZVtSZF07aWYobHQmJmx0LnJlbW92ZWRCZWZvcmVRdWVyaWVkKXJldHVybiBuZXcgakMoVmUuZHVyYXRpb24sVmUuZGVsYXkpO2NvbnN0IGR0PVplIT09TyxndD1mdW5jdGlvbiBmemUobCl7Y29uc3Qg'@;
put 'Yz1bXTtyZXR1cm4gb2NlKGwsYyksY30oKGYuZ2V0KFplKXx8cnplKS5tYXAoUW49PlFuLmdldFJlYWxQbGF5ZXIoKSkpLmZpbHRlcihRbj0+ISFRbi5lbGVtZW50JiZRbi5lbGVtZW50PT09WmUpLGp0PWguZ2V0KFplKSxybj1tLmdldChaZSksWHQ9UHVlKHRoaXMuX25vcm1hbGl6ZXIsVmUu'@;
put 'a2V5ZnJhbWVzLGp0LHJuKSx5bj10aGlzLl9idWlsZFBsYXllcihWZSxYdCxndCk7aWYoVmUuc3ViVGltZWxpbmUmJmQmJnBlLmFkZChaZSksZHQpe2NvbnN0IFFuPW5ldyB6WihjLF8sWmUpO1FuLnNldFJlYWxQbGF5ZXIoeW4pLFgucHVzaChRbil9cmV0dXJuIHlufSk7WC5mb3JFYWNoKFZl'@;
put 'PT57VDEodGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudCxWZS5lbGVtZW50LFtdKS5wdXNoKFZlKSxWZS5vbkRvbmUoKCk9PmZ1bmN0aW9uIGx6ZShsLGMsYSl7bGV0IGY9bC5nZXQoYyk7aWYoZil7aWYoZi5sZW5ndGgpe2NvbnN0IGQ9Zi5pbmRleE9mKGEpO2Yuc3BsaWNlKGQsMSl9MD09'@;
put 'Zi5sZW5ndGgmJmwuZGVsZXRlKGMpfXJldHVybiBmfSh0aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LFZlLmVsZW1lbnQsVmUpKX0pLGFlLmZvckVhY2goVmU9PlBmKFZlLHp1ZSkpO2NvbnN0IHhlPVM0KGJlKTtyZXR1cm4geGUub25EZXN0cm95KCgpPT57YWUuZm9yRWFjaChWZT0+STco'@;
put 'VmUsenVlKSksTGgoTyxhLnRvU3R5bGVzKX0pLHBlLmZvckVhY2goVmU9PntUMShkLFZlLFtdKS5wdXNoKHhlKX0pLHhlfV9idWlsZFBsYXllcihjLGEsZil7cmV0dXJuIGEubGVuZ3RoPjA/dGhpcy5kcml2ZXIuYW5pbWF0ZShjLmVsZW1lbnQsYSxjLmR1cmF0aW9uLGMuZGVsYXksYy5lYXNp'@;
put 'bmcsZik6bmV3IGpDKGMuZHVyYXRpb24sYy5kZWxheSl9fWNsYXNzIHpae2NvbnN0cnVjdG9yKGMsYSxmKXt0aGlzLm5hbWVzcGFjZUlkPWMsdGhpcy50cmlnZ2VyTmFtZT1hLHRoaXMuZWxlbWVudD1mLHRoaXMuX3BsYXllcj1uZXcgakMsdGhpcy5fY29udGFpbnNSZWFsUGxheWVyPSExLHRo'@;
put 'aXMuX3F1ZXVlZENhbGxiYWNrcz1uZXcgTWFwLHRoaXMuZGVzdHJveWVkPSExLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy5tYXJrZWRGb3JEZXN0cm95PSExLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy5xdWV1ZWQ9ITAsdGhpcy50b3RhbFRpbWU9MH1zZXRSZWFsUGxheWVyKGMpe3RoaXMu'@;
put 'X2NvbnRhaW5zUmVhbFBsYXllcnx8KHRoaXMuX3BsYXllcj1jLHRoaXMuX3F1ZXVlZENhbGxiYWNrcy5mb3JFYWNoKChhLGYpPT57YS5mb3JFYWNoKGQ9PkNaKGMsZix2b2lkIDAsZCkpfSksdGhpcy5fcXVldWVkQ2FsbGJhY2tzLmNsZWFyKCksdGhpcy5fY29udGFpbnNSZWFsUGxheWVyPSEw'@;
put 'LHRoaXMub3ZlcnJpZGVUb3RhbFRpbWUoYy50b3RhbFRpbWUpLHRoaXMucXVldWVkPSExKX1nZXRSZWFsUGxheWVyKCl7cmV0dXJuIHRoaXMuX3BsYXllcn1vdmVycmlkZVRvdGFsVGltZShjKXt0aGlzLnRvdGFsVGltZT1jfXN5bmNQbGF5ZXJFdmVudHMoYyl7Y29uc3QgYT10aGlzLl9wbGF5'@;
put 'ZXI7YS50cmlnZ2VyQ2FsbGJhY2smJmMub25TdGFydCgoKT0+YS50cmlnZ2VyQ2FsbGJhY2soInN0YXJ0IikpLGMub25Eb25lKCgpPT50aGlzLmZpbmlzaCgpKSxjLm9uRGVzdHJveSgoKT0+dGhpcy5kZXN0cm95KCkpfV9xdWV1ZUV2ZW50KGMsYSl7VDEodGhpcy5fcXVldWVkQ2FsbGJhY2tz'@;
put 'LGMsW10pLnB1c2goYSl9b25Eb25lKGMpe3RoaXMucXVldWVkJiZ0aGlzLl9xdWV1ZUV2ZW50KCJkb25lIixjKSx0aGlzLl9wbGF5ZXIub25Eb25lKGMpfW9uU3RhcnQoYyl7dGhpcy5xdWV1ZWQmJnRoaXMuX3F1ZXVlRXZlbnQoInN0YXJ0IixjKSx0aGlzLl9wbGF5ZXIub25TdGFydChjKX1v'@;
put 'bkRlc3Ryb3koYyl7dGhpcy5xdWV1ZWQmJnRoaXMuX3F1ZXVlRXZlbnQoImRlc3Ryb3kiLGMpLHRoaXMuX3BsYXllci5vbkRlc3Ryb3koYyl9aW5pdCgpe3RoaXMuX3BsYXllci5pbml0KCl9aGFzU3RhcnRlZCgpe3JldHVybiF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLmhhc1N0YXJ0ZWQo'@;
put 'KX1wbGF5KCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucGxheSgpfXBhdXNlKCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucGF1c2UoKX1yZXN0YXJ0KCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucmVzdGFydCgpfWZpbmlzaCgpe3RoaXMuX3BsYXllci5maW5pc2goKX1k'@;
put 'ZXN0cm95KCl7dGhpcy5kZXN0cm95ZWQ9ITAsdGhpcy5fcGxheWVyLmRlc3Ryb3koKX1yZXNldCgpeyF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLnJlc2V0KCl9c2V0UG9zaXRpb24oYyl7dGhpcy5xdWV1ZWR8fHRoaXMuX3BsYXllci5zZXRQb3NpdGlvbihjKX1nZXRQb3NpdGlvbigpe3Jl'@;
put 'dHVybiB0aGlzLnF1ZXVlZD8wOnRoaXMuX3BsYXllci5nZXRQb3NpdGlvbigpfXRyaWdnZXJDYWxsYmFjayhjKXtjb25zdCBhPXRoaXMuX3BsYXllcjthLnRyaWdnZXJDYWxsYmFjayYmYS50cmlnZ2VyQ2FsbGJhY2soYyl9fWZ1bmN0aW9uIElJKGwpe3JldHVybiBsJiYxPT09bC5ub2RlVHlw'@;
put 'ZX1mdW5jdGlvbiBuY2UobCxjKXtjb25zdCBhPWwuc3R5bGUuZGlzcGxheTtyZXR1cm4gbC5zdHlsZS5kaXNwbGF5PWM/PyJub25lIixhfWZ1bmN0aW9uIHJjZShsLGMsYSxmLGQpe2NvbnN0IGg9W107YS5mb3JFYWNoKE89PmgucHVzaChuY2UoTykpKTtjb25zdCBtPVtdO2YuZm9yRWFjaCgo'@;
put 'TyxYKT0+e2NvbnN0IGFlPW5ldyBNYXA7Ty5mb3JFYWNoKHBlPT57Y29uc3QgYmU9Yy5jb21wdXRlU3R5bGUoWCxwZSxkKTthZS5zZXQocGUsYmUpLCghYmV8fDA9PWJlLmxlbmd0aCkmJihYW1JkXT1pemUsbS5wdXNoKFgpKX0pLGwuc2V0KFgsYWUpfSk7bGV0IF89MDtyZXR1cm4gYS5mb3JF'@;
put 'YWNoKE89Pm5jZShPLGhbXysrXSkpLG19ZnVuY3Rpb24gaWNlKGwsYyl7Y29uc3QgYT1uZXcgTWFwO2lmKGwuZm9yRWFjaChfPT5hLnNldChfLFtdKSksMD09Yy5sZW5ndGgpcmV0dXJuIGE7Y29uc3QgZD1uZXcgU2V0KGMpLGg9bmV3IE1hcDtmdW5jdGlvbiBtKF8pe2lmKCFfKXJldHVybiAx'@;
put 'O2xldCBPPWguZ2V0KF8pO2lmKE8pcmV0dXJuIE87Y29uc3QgWD1fLnBhcmVudE5vZGU7cmV0dXJuIE89YS5oYXMoWCk/WDpkLmhhcyhYKT8xOm0oWCksaC5zZXQoXyxPKSxPfXJldHVybiBjLmZvckVhY2goXz0+e2NvbnN0IE89bShfKTsxIT09TyYmYS5nZXQoTykucHVzaChfKX0pLGF9ZnVu'@;
put 'Y3Rpb24gUGYobCxjKXtsLmNsYXNzTGlzdD8uYWRkKGMpfWZ1bmN0aW9uIEk3KGwsYyl7bC5jbGFzc0xpc3Q/LnJlbW92ZShjKX1mdW5jdGlvbiBjemUobCxjLGEpe1M0KGEpLm9uRG9uZSgoKT0+bC5wcm9jZXNzTGVhdmVOb2RlKGMpKX1mdW5jdGlvbiBvY2UobCxjKXtmb3IobGV0IGE9MDth'@;
put 'PGwubGVuZ3RoO2ErKyl7Y29uc3QgZj1sW2FdO2YgaW5zdGFuY2VvZiBvYWU/b2NlKGYucGxheWVycyxjKTpjLnB1c2goZil9fWZ1bmN0aW9uIGFjZShsLGMsYSl7Y29uc3QgZj1hLmdldChsKTtpZighZilyZXR1cm4hMTtsZXQgZD1jLmdldChsKTtyZXR1cm4gZD9mLmZvckVhY2goaD0+ZC5h'@;
put 'ZGQoaCkpOmMuc2V0KGwsZiksYS5kZWxldGUobCksITB9Y2xhc3MgUkl7Y29uc3RydWN0b3IoYyxhLGYpe3RoaXMuYm9keU5vZGU9Yyx0aGlzLl9kcml2ZXI9YSx0aGlzLl9ub3JtYWxpemVyPWYsdGhpcy5fdHJpZ2dlckNhY2hlPXt9LHRoaXMub25SZW1vdmFsQ29tcGxldGU9KGQsaCk9Pnt9'@;
put 'LHRoaXMuX3RyYW5zaXRpb25FbmdpbmU9bmV3IGF6ZShjLGEsZiksdGhpcy5fdGltZWxpbmVFbmdpbmU9bmV3IEpqZShjLGEsZiksdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5vblJlbW92YWxDb21wbGV0ZT0oZCxoKT0+dGhpcy5vblJlbW92YWxDb21wbGV0ZShkLGgpfXJlZ2lzdGVyVHJpZ2dl'@;
put 'cihjLGEsZixkLGgpe2NvbnN0IG09YysiLSIrZDtsZXQgXz10aGlzLl90cmlnZ2VyQ2FjaGVbbV07aWYoIV8pe2NvbnN0IE89W10sYWU9SVoodGhpcy5fZHJpdmVyLGgsTyxbXSk7aWYoTy5sZW5ndGgpdGhyb3cgZnVuY3Rpb24gZWplKGwsYyl7cmV0dXJuIG5ldyBJcigzNDA0LCExKX0oKTtf'@;
put 'PWZ1bmN0aW9uICRqZShsLGMsYSl7cmV0dXJuIG5ldyBLamUobCxjLGEpfShkLGFlLHRoaXMuX25vcm1hbGl6ZXIpLHRoaXMuX3RyaWdnZXJDYWNoZVttXT1ffXRoaXMuX3RyYW5zaXRpb25FbmdpbmUucmVnaXN0ZXJUcmlnZ2VyKGEsZCxfKX1yZWdpc3RlcihjLGEpe3RoaXMuX3RyYW5zaXRp'@;
put 'b25FbmdpbmUucmVnaXN0ZXIoYyxhKX1kZXN0cm95KGMsYSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5kZXN0cm95KGMsYSl9b25JbnNlcnQoYyxhLGYsZCl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5pbnNlcnROb2RlKGMsYSxmLGQpfW9uUmVtb3ZlKGMsYSxmKXt0aGlzLl90cmFuc2l0aW9u'@;
put 'RW5naW5lLnJlbW92ZU5vZGUoYyxhLGYpfWRpc2FibGVBbmltYXRpb25zKGMsYSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5tYXJrRWxlbWVudEFzRGlzYWJsZWQoYyxhKX1wcm9jZXNzKGMsYSxmLGQpe2lmKCJAIj09Zi5jaGFyQXQoMCkpe2NvbnN0W2gsbV09RnVlKGYpO3RoaXMuX3RpbWVs'@;
put 'aW5lRW5naW5lLmNvbW1hbmQoaCxhLG0sZCl9ZWxzZSB0aGlzLl90cmFuc2l0aW9uRW5naW5lLnRyaWdnZXIoYyxhLGYsZCl9bGlzdGVuKGMsYSxmLGQsaCl7aWYoIkAiPT1mLmNoYXJBdCgwKSl7Y29uc3RbbSxfXT1GdWUoZik7cmV0dXJuIHRoaXMuX3RpbWVsaW5lRW5naW5lLmxpc3Rlbiht'@;
put 'LGEsXyxoKX1yZXR1cm4gdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5saXN0ZW4oYyxhLGYsZCxoKX1mbHVzaChjPS0xKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLmZsdXNoKGMpfWdldCBwbGF5ZXJzKCl7cmV0dXJuWy4uLnRoaXMuX3RyYW5zaXRpb25FbmdpbmUucGxheWVycywuLi50aGlzLl90'@;
put 'aW1lbGluZUVuZ2luZS5wbGF5ZXJzXX13aGVuUmVuZGVyaW5nRG9uZSgpe3JldHVybiB0aGlzLl90cmFuc2l0aW9uRW5naW5lLndoZW5SZW5kZXJpbmdEb25lKCl9YWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKGMpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuYWZ0ZXJGbHVzaEFuaW1hdGlvbnNE'@;
put 'b25lKGMpfX1sZXQgcHplPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmLGQpe3RoaXMuX2VsZW1lbnQ9YSx0aGlzLl9zdGFydFN0eWxlcz1mLHRoaXMuX2VuZFN0eWxlcz1kLHRoaXMuX3N0YXRlPTA7bGV0IGg9bC5pbml0aWFsU3R5bGVzQnlFbGVtZW50LmdldChhKTtofHxsLmluaXRp'@;
put 'YWxTdHlsZXNCeUVsZW1lbnQuc2V0KGEsaD1uZXcgTWFwKSx0aGlzLl9pbml0aWFsU3R5bGVzPWh9c3RhcnQoKXt0aGlzLl9zdGF0ZTwxJiYodGhpcy5fc3RhcnRTdHlsZXMmJkxoKHRoaXMuX2VsZW1lbnQsdGhpcy5fc3RhcnRTdHlsZXMsdGhpcy5faW5pdGlhbFN0eWxlcyksdGhpcy5fc3Rh'@;
put 'dGU9MSl9ZmluaXNoKCl7dGhpcy5zdGFydCgpLHRoaXMuX3N0YXRlPDImJihMaCh0aGlzLl9lbGVtZW50LHRoaXMuX2luaXRpYWxTdHlsZXMpLHRoaXMuX2VuZFN0eWxlcyYmKExoKHRoaXMuX2VsZW1lbnQsdGhpcy5fZW5kU3R5bGVzKSx0aGlzLl9lbmRTdHlsZXM9bnVsbCksdGhpcy5fc3Rh'@;
put 'dGU9MSl9ZGVzdHJveSgpe3RoaXMuZmluaXNoKCksdGhpcy5fc3RhdGU8MyYmKGwuaW5pdGlhbFN0eWxlc0J5RWxlbWVudC5kZWxldGUodGhpcy5fZWxlbWVudCksdGhpcy5fc3RhcnRTdHlsZXMmJihoNSh0aGlzLl9lbGVtZW50LHRoaXMuX3N0YXJ0U3R5bGVzKSx0aGlzLl9lbmRTdHlsZXM9'@;
put 'bnVsbCksdGhpcy5fZW5kU3R5bGVzJiYoaDUodGhpcy5fZWxlbWVudCx0aGlzLl9lbmRTdHlsZXMpLHRoaXMuX2VuZFN0eWxlcz1udWxsKSxMaCh0aGlzLl9lbGVtZW50LHRoaXMuX2luaXRpYWxTdHlsZXMpLHRoaXMuX3N0YXRlPTMpfX1yZXR1cm4gbC5pbml0aWFsU3R5bGVzQnlFbGVtZW50'@;
put 'PW5ldyBXZWFrTWFwLGx9KSgpO2Z1bmN0aW9uIFVaKGwpe2xldCBjPW51bGw7cmV0dXJuIGwuZm9yRWFjaCgoYSxmKT0+eyhmdW5jdGlvbiBtemUobCl7cmV0dXJuImRpc3BsYXkiPT09bHx8InBvc2l0aW9uIj09PWx9KShmKSYmKGM9Y3x8bmV3IE1hcCxjLnNldChmLGEpKX0pLGN9Y2xhc3Mg'@;
put 'bGNle2NvbnN0cnVjdG9yKGMsYSxmLGQpe3RoaXMuZWxlbWVudD1jLHRoaXMua2V5ZnJhbWVzPWEsdGhpcy5vcHRpb25zPWYsdGhpcy5fc3BlY2lhbFN0eWxlcz1kLHRoaXMuX29uRG9uZUZucz1bXSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX29uRGVzdHJveUZucz1bXSx0aGlzLl9pbml0'@;
put 'aWFsaXplZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9zdGFydGVkPSExLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9vcmlnaW5hbE9uRG9uZUZucz1bXSx0aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnM9W10sdGhpcy50aW1lPTAsdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLmN1cnJl'@;
put 'bnRTbmFwc2hvdD1uZXcgTWFwLHRoaXMuX2R1cmF0aW9uPWYuZHVyYXRpb24sdGhpcy5fZGVsYXk9Zi5kZWxheXx8MCx0aGlzLnRpbWU9dGhpcy5fZHVyYXRpb24rdGhpcy5fZGVsYXl9X29uRmluaXNoKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVG'@;
put 'bnMuZm9yRWFjaChjPT5jKCkpLHRoaXMuX29uRG9uZUZucz1bXSl9aW5pdCgpe3RoaXMuX2J1aWxkUGxheWVyKCksdGhpcy5fcHJlcGFyZVBsYXllckJlZm9yZVN0YXJ0KCl9X2J1aWxkUGxheWVyKCl7aWYodGhpcy5faW5pdGlhbGl6ZWQpcmV0dXJuO3RoaXMuX2luaXRpYWxpemVkPSEwO2Nv'@;
put 'bnN0IGM9dGhpcy5rZXlmcmFtZXM7dGhpcy5kb21QbGF5ZXI9dGhpcy5fdHJpZ2dlcldlYkFuaW1hdGlvbih0aGlzLmVsZW1lbnQsYyx0aGlzLm9wdGlvbnMpLHRoaXMuX2ZpbmFsS2V5ZnJhbWU9Yy5sZW5ndGg/Y1tjLmxlbmd0aC0xXTpuZXcgTWFwLHRoaXMuZG9tUGxheWVyLmFkZEV2ZW50'@;
put 'TGlzdGVuZXIoImZpbmlzaCIsKCk9PnRoaXMuX29uRmluaXNoKCkpfV9wcmVwYXJlUGxheWVyQmVmb3JlU3RhcnQoKXt0aGlzLl9kZWxheT90aGlzLl9yZXNldERvbVBsYXllclN0YXRlKCk6dGhpcy5kb21QbGF5ZXIucGF1c2UoKX1fY29udmVydEtleWZyYW1lc1RvT2JqZWN0KGMpe2NvbnN0'@;
put 'IGE9W107cmV0dXJuIGMuZm9yRWFjaChmPT57YS5wdXNoKE9iamVjdC5mcm9tRW50cmllcyhmKSl9KSxhfV90cmlnZ2VyV2ViQW5pbWF0aW9uKGMsYSxmKXtyZXR1cm4gYy5hbmltYXRlKHRoaXMuX2NvbnZlcnRLZXlmcmFtZXNUb09iamVjdChhKSxmKX1vblN0YXJ0KGMpe3RoaXMuX29yaWdp'@;
put 'bmFsT25TdGFydEZucy5wdXNoKGMpLHRoaXMuX29uU3RhcnRGbnMucHVzaChjKX1vbkRvbmUoYyl7dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnMucHVzaChjKSx0aGlzLl9vbkRvbmVGbnMucHVzaChjKX1vbkRlc3Ryb3koYyl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2goYyl9cGxheSgpe3RoaXMu'@;
put 'X2J1aWxkUGxheWVyKCksdGhpcy5oYXNTdGFydGVkKCl8fCh0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2goYz0+YygpKSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITAsdGhpcy5fc3BlY2lhbFN0eWxlcyYmdGhpcy5fc3BlY2lhbFN0eWxlcy5zdGFydCgpKSx0aGlzLmRvbVBs'@;
put 'YXllci5wbGF5KCl9cGF1c2UoKXt0aGlzLmluaXQoKSx0aGlzLmRvbVBsYXllci5wYXVzZSgpfWZpbmlzaCgpe3RoaXMuaW5pdCgpLHRoaXMuX3NwZWNpYWxTdHlsZXMmJnRoaXMuX3NwZWNpYWxTdHlsZXMuZmluaXNoKCksdGhpcy5fb25GaW5pc2goKSx0aGlzLmRvbVBsYXllci5maW5pc2go'@;
put 'KX1yZXNldCgpe3RoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9vblN0YXJ0Rm5zPXRoaXMuX29yaWdpbmFsT25TdGFydEZucyx0aGlzLl9vbkRvbmVGbnM9dGhpcy5fb3JpZ2luYWxP'@;
put 'bkRvbmVGbnN9X3Jlc2V0RG9tUGxheWVyU3RhdGUoKXt0aGlzLmRvbVBsYXllciYmdGhpcy5kb21QbGF5ZXIuY2FuY2VsKCl9cmVzdGFydCgpe3RoaXMucmVzZXQoKSx0aGlzLnBsYXkoKX1oYXNTdGFydGVkKCl7cmV0dXJuIHRoaXMuX3N0YXJ0ZWR9ZGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3ll'@;
put 'ZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9yZXNldERvbVBsYXllclN0YXRlKCksdGhpcy5fb25GaW5pc2goKSx0aGlzLl9zcGVjaWFsU3R5bGVzJiZ0aGlzLl9zcGVjaWFsU3R5bGVzLmRlc3Ryb3koKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaChjPT5jKCkpLHRoaXMuX29uRGVz'@;
put 'dHJveUZucz1bXSl9c2V0UG9zaXRpb24oYyl7dm9pZCAwPT09dGhpcy5kb21QbGF5ZXImJnRoaXMuaW5pdCgpLHRoaXMuZG9tUGxheWVyLmN1cnJlbnRUaW1lPWMqdGhpcy50aW1lfWdldFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuZG9tUGxheWVyLmN1cnJlbnRUaW1lL3RoaXMudGltZX1nZXQg'@;
put 'dG90YWxUaW1lKCl7cmV0dXJuIHRoaXMuX2RlbGF5K3RoaXMuX2R1cmF0aW9ufWJlZm9yZURlc3Ryb3koKXtjb25zdCBjPW5ldyBNYXA7dGhpcy5oYXNTdGFydGVkKCkmJnRoaXMuX2ZpbmFsS2V5ZnJhbWUuZm9yRWFjaCgoZixkKT0+eyJvZmZzZXQiIT09ZCYmYy5zZXQoZCx0aGlzLl9maW5p'@;
put 'c2hlZD9mOld1ZSh0aGlzLmVsZW1lbnQsZCkpfSksdGhpcy5jdXJyZW50U25hcHNob3Q9Y310cmlnZ2VyQ2FsbGJhY2soYyl7Y29uc3QgYT0ic3RhcnQiPT09Yz90aGlzLl9vblN0YXJ0Rm5zOnRoaXMuX29uRG9uZUZuczthLmZvckVhY2goZj0+ZigpKSxhLmxlbmd0aD0wfX1jbGFzcyBnemV7'@;
put 'dmFsaWRhdGVTdHlsZVByb3BlcnR5KGMpe3JldHVybiEwfXZhbGlkYXRlQW5pbWF0YWJsZVN0eWxlUHJvcGVydHkoYyl7cmV0dXJuITB9bWF0Y2hlc0VsZW1lbnQoYyxhKXtyZXR1cm4hMX1jb250YWluc0VsZW1lbnQoYyxhKXtyZXR1cm4gTnVlKGMsYSl9Z2V0UGFyZW50RWxlbWVudChjKXty'@;
put 'ZXR1cm4ga1ooYyl9cXVlcnkoYyxhLGYpe3JldHVybiBWdWUoYyxhLGYpfWNvbXB1dGVTdHlsZShjLGEsZil7cmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGMpW2FdfWFuaW1hdGUoYyxhLGYsZCxoLG09W10pe2NvbnN0IE89e2R1cmF0aW9uOmYsZGVsYXk6ZCxmaWxsOjA9PWQ/ImJv'@;
put 'dGgiOiJmb3J3YXJkcyJ9O2gmJihPLmVhc2luZz1oKTtjb25zdCBYPW5ldyBNYXAsYWU9bS5maWx0ZXIoeGU9PnhlIGluc3RhbmNlb2YgbGNlKTsoZnVuY3Rpb24gU2plKGwsYyl7cmV0dXJuIDA9PT1sfHwwPT09Y30pKGYsZCkmJmFlLmZvckVhY2goeGU9Pnt4ZS5jdXJyZW50U25hcHNob3Qu'@;
put 'Zm9yRWFjaCgoVmUsWmUpPT5YLnNldChaZSxWZSkpfSk7bGV0IHBlPWZ1bmN0aW9uIF9qZShsKXtyZXR1cm4gbC5sZW5ndGg/bFswXWluc3RhbmNlb2YgTWFwP2w6bC5tYXAoYz0+VXVlKGMpKTpbXX0oYSkubWFwKHhlPT5NNCh4ZSkpO3BlPWZ1bmN0aW9uIE1qZShsLGMsYSl7aWYoYS5zaXpl'@;
put 'JiZjLmxlbmd0aCl7bGV0IGY9Y1swXSxkPVtdO2lmKGEuZm9yRWFjaCgoaCxtKT0+e2YuaGFzKG0pfHxkLnB1c2gobSksZi5zZXQobSxoKX0pLGQubGVuZ3RoKWZvcihsZXQgaD0xO2g8Yy5sZW5ndGg7aCsrKXtsZXQgbT1jW2hdO2QuZm9yRWFjaChfPT5tLnNldChfLFd1ZShsLF8pKSl9fXJl'@;
put 'dHVybiBjfShjLHBlLFgpO2NvbnN0IGJlPWZ1bmN0aW9uIGh6ZShsLGMpe2xldCBhPW51bGwsZj1udWxsO3JldHVybiBBcnJheS5pc0FycmF5KGMpJiZjLmxlbmd0aD8oYT1VWihjWzBdKSxjLmxlbmd0aD4xJiYoZj1VWihjW2MubGVuZ3RoLTFdKSkpOmMgaW5zdGFuY2VvZiBNYXAmJihhPVVa'@;
put 'KGMpKSxhfHxmP25ldyBwemUobCxhLGYpOm51bGx9KGMscGUpO3JldHVybiBuZXcgbGNlKGMscGUsTyxiZSl9fWxldCB2emU9KCgpPT57Y2xhc3MgbCBleHRlbmRzIHJhZXtjb25zdHJ1Y3RvcihhLGYpe3N1cGVyKCksdGhpcy5fbmV4dEFuaW1hdGlvbklkPTAsdGhpcy5fcmVuZGVyZXI9YS5j'@;
put 'cmVhdGVSZW5kZXJlcihmLmJvZHkse2lkOiIwIixlbmNhcHN1bGF0aW9uOmp1Lk5vbmUsc3R5bGVzOltdLGRhdGE6e2FuaW1hdGlvbjpbXX19KX1idWlsZChhKXtjb25zdCBmPXRoaXMuX25leHRBbmltYXRpb25JZC50b1N0cmluZygpO3RoaXMuX25leHRBbmltYXRpb25JZCsrO2NvbnN0IGQ9'@;
put 'QXJyYXkuaXNBcnJheShhKT9pYWUoYSk6YTtyZXR1cm4gc2NlKHRoaXMuX3JlbmRlcmVyLG51bGwsZiwicmVnaXN0ZXIiLFtkXSksbmV3IHl6ZShmLHRoaXMuX3JlbmRlcmVyKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkoc3IoSHApLHNyKEZhKSl9'@;
put 'LGwuXHUwMjc1cHJvdj1ocih7dG9rZW46bCxmYWN0b3J5OmwuXHUwMjc1ZmFjfSksbH0pKCk7Y2xhc3MgeXplIGV4dGVuZHMgeVRle2NvbnN0cnVjdG9yKGMsYSl7c3VwZXIoKSx0aGlzLl9pZD1jLHRoaXMuX3JlbmRlcmVyPWF9Y3JlYXRlKGMsYSl7cmV0dXJuIG5ldyBiemUodGhpcy5faWQs'@;
put 'YyxhfHx7fSx0aGlzLl9yZW5kZXJlcil9fWNsYXNzIGJ6ZXtjb25zdHJ1Y3RvcihjLGEsZixkKXt0aGlzLmlkPWMsdGhpcy5lbGVtZW50PWEsdGhpcy5fcmVuZGVyZXI9ZCx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy50b3RhbFRpbWU9MCx0aGlzLl9jb21t'@;
put 'YW5kKCJjcmVhdGUiLGYpfV9saXN0ZW4oYyxhKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIubGlzdGVuKHRoaXMuZWxlbWVudCxgQEAke3RoaXMuaWR9OiR7Y31gLGEpfV9jb21tYW5kKGMsLi4uYSl7cmV0dXJuIHNjZSh0aGlzLl9yZW5kZXJlcix0aGlzLmVsZW1lbnQsdGhpcy5pZCxjLGEpfW9u'@;
put 'RG9uZShjKXt0aGlzLl9saXN0ZW4oImRvbmUiLGMpfW9uU3RhcnQoYyl7dGhpcy5fbGlzdGVuKCJzdGFydCIsYyl9b25EZXN0cm95KGMpe3RoaXMuX2xpc3RlbigiZGVzdHJveSIsYyl9aW5pdCgpe3RoaXMuX2NvbW1hbmQoImluaXQiKX1oYXNTdGFydGVkKCl7cmV0dXJuIHRoaXMuX3N0YXJ0'@;
put 'ZWR9cGxheSgpe3RoaXMuX2NvbW1hbmQoInBsYXkiKSx0aGlzLl9zdGFydGVkPSEwfXBhdXNlKCl7dGhpcy5fY29tbWFuZCgicGF1c2UiKX1yZXN0YXJ0KCl7dGhpcy5fY29tbWFuZCgicmVzdGFydCIpfWZpbmlzaCgpe3RoaXMuX2NvbW1hbmQoImZpbmlzaCIpfWRlc3Ryb3koKXt0aGlzLl9j'@;
put 'b21tYW5kKCJkZXN0cm95Iil9cmVzZXQoKXt0aGlzLl9jb21tYW5kKCJyZXNldCIpLHRoaXMuX3N0YXJ0ZWQ9ITF9c2V0UG9zaXRpb24oYyl7dGhpcy5fY29tbWFuZCgic2V0UG9zaXRpb24iLGMpfWdldFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmVuZ2luZS5wbGF5ZXJzWyt0'@;
put 'aGlzLmlkXT8uZ2V0UG9zaXRpb24oKT8/MH19ZnVuY3Rpb24gc2NlKGwsYyxhLGYsZCl7cmV0dXJuIGwuc2V0UHJvcGVydHkoYyxgQEAke2F9OiR7Zn1gLGQpfWNvbnN0IHVjZT0iQC5kaXNhYmxlZCI7bGV0IF96ZT0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEsZixkKXt0aGlzLmRlbGVn'@;
put 'YXRlPWEsdGhpcy5lbmdpbmU9Zix0aGlzLl96b25lPWQsdGhpcy5fY3VycmVudElkPTAsdGhpcy5fbWljcm90YXNrSWQ9MSx0aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXI9W10sdGhpcy5fcmVuZGVyZXJDYWNoZT1uZXcgTWFwLHRoaXMuX2NkUmVjdXJEZXB0aD0wLGYub25SZW1vdmFs'@;
put 'Q29tcGxldGU9KGgsbSk9Pntjb25zdCBfPW0/LnBhcmVudE5vZGUoaCk7XyYmbS5yZW1vdmVDaGlsZChfLGgpfX1jcmVhdGVSZW5kZXJlcihhLGYpe2NvbnN0IGg9dGhpcy5kZWxlZ2F0ZS5jcmVhdGVSZW5kZXJlcihhLGYpO2lmKCEoYSYmZiYmZi5kYXRhJiZmLmRhdGEuYW5pbWF0aW9uKSl7'@;
put 'bGV0IGFlPXRoaXMuX3JlbmRlcmVyQ2FjaGUuZ2V0KGgpO3JldHVybiBhZXx8KGFlPW5ldyBjY2UoIiIsaCx0aGlzLmVuZ2luZSwoKT0+dGhpcy5fcmVuZGVyZXJDYWNoZS5kZWxldGUoaCkpLHRoaXMuX3JlbmRlcmVyQ2FjaGUuc2V0KGgsYWUpKSxhZX1jb25zdCBtPWYuaWQsXz1mLmlkKyIt'@;
put 'Iit0aGlzLl9jdXJyZW50SWQ7dGhpcy5fY3VycmVudElkKyssdGhpcy5lbmdpbmUucmVnaXN0ZXIoXyxhKTtjb25zdCBPPWFlPT57QXJyYXkuaXNBcnJheShhZSk/YWUuZm9yRWFjaChPKTp0aGlzLmVuZ2luZS5yZWdpc3RlclRyaWdnZXIobSxfLGEsYWUubmFtZSxhZSl9O3JldHVybiBmLmRh'@;
put 'dGEuYW5pbWF0aW9uLmZvckVhY2goTyksbmV3IHd6ZSh0aGlzLF8saCx0aGlzLmVuZ2luZSl9YmVnaW4oKXt0aGlzLl9jZFJlY3VyRGVwdGgrKyx0aGlzLmRlbGVnYXRlLmJlZ2luJiZ0aGlzLmRlbGVnYXRlLmJlZ2luKCl9X3NjaGVkdWxlQ291bnRUYXNrKCl7cXVldWVNaWNyb3Rhc2soKCk9'@;
put 'Pnt0aGlzLl9taWNyb3Rhc2tJZCsrfSl9c2NoZWR1bGVMaXN0ZW5lckNhbGxiYWNrKGEsZixkKXthPj0wJiZhPHRoaXMuX21pY3JvdGFza0lkP3RoaXMuX3pvbmUucnVuKCgpPT5mKGQpKTooMD09dGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyLmxlbmd0aCYmcXVldWVNaWNyb3Rhc2so'@;
put 'KCk9Pnt0aGlzLl96b25lLnJ1bigoKT0+e3RoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlci5mb3JFYWNoKGg9Pntjb25zdFttLF9dPWg7bShfKX0pLHRoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlcj1bXX0pfSksdGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyLnB1c2goW2Ys'@;
put 'ZF0pKX1lbmQoKXt0aGlzLl9jZFJlY3VyRGVwdGgtLSwwPT10aGlzLl9jZFJlY3VyRGVwdGgmJnRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9zY2hlZHVsZUNvdW50VGFzaygpLHRoaXMuZW5naW5lLmZsdXNoKHRoaXMuX21pY3JvdGFza0lkKX0pLHRoaXMuZGVsZWdh'@;
put 'dGUuZW5kJiZ0aGlzLmRlbGVnYXRlLmVuZCgpfXdoZW5SZW5kZXJpbmdEb25lKCl7cmV0dXJuIHRoaXMuZW5naW5lLndoZW5SZW5kZXJpbmdEb25lKCl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHNyKEhwKSxzcihSSSksc3IoVW8pKX0sbC5cdTAy'@;
put 'NzVwcm92PWhyKHt0b2tlbjpsLGZhY3Rvcnk6bC5cdTAyNzVmYWN9KSxsfSkoKTtjbGFzcyBjY2V7Y29uc3RydWN0b3IoYyxhLGYsZCl7dGhpcy5uYW1lc3BhY2VJZD1jLHRoaXMuZGVsZWdhdGU9YSx0aGlzLmVuZ2luZT1mLHRoaXMuX29uRGVzdHJveT1kfWdldCBkYXRhKCl7cmV0dXJuIHRo'@;
put 'aXMuZGVsZWdhdGUuZGF0YX1kZXN0cm95Tm9kZShjKXt0aGlzLmRlbGVnYXRlLmRlc3Ryb3lOb2RlPy4oYyl9ZGVzdHJveSgpe3RoaXMuZW5naW5lLmRlc3Ryb3kodGhpcy5uYW1lc3BhY2VJZCx0aGlzLmRlbGVnYXRlKSx0aGlzLmVuZ2luZS5hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUoKCk9'@;
put 'PntxdWV1ZU1pY3JvdGFzaygoKT0+e3RoaXMuZGVsZWdhdGUuZGVzdHJveSgpfSl9KSx0aGlzLl9vbkRlc3Ryb3k/LigpfWNyZWF0ZUVsZW1lbnQoYyxhKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVFbGVtZW50KGMsYSl9Y3JlYXRlQ29tbWVudChjKXtyZXR1cm4gdGhpcy5kZWxlZ2F0'@;
put 'ZS5jcmVhdGVDb21tZW50KGMpfWNyZWF0ZVRleHQoYyl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlVGV4dChjKX1hcHBlbmRDaGlsZChjLGEpe3RoaXMuZGVsZWdhdGUuYXBwZW5kQ2hpbGQoYyxhKSx0aGlzLmVuZ2luZS5vbkluc2VydCh0aGlzLm5hbWVzcGFjZUlkLGEsYywhMSl9aW5z'@;
put 'ZXJ0QmVmb3JlKGMsYSxmLGQ9ITApe3RoaXMuZGVsZWdhdGUuaW5zZXJ0QmVmb3JlKGMsYSxmKSx0aGlzLmVuZ2luZS5vbkluc2VydCh0aGlzLm5hbWVzcGFjZUlkLGEsYyxkKX1yZW1vdmVDaGlsZChjLGEsZil7dGhpcy5lbmdpbmUub25SZW1vdmUodGhpcy5uYW1lc3BhY2VJZCxhLHRoaXMu'@;
put 'ZGVsZWdhdGUpfXNlbGVjdFJvb3RFbGVtZW50KGMsYSl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuc2VsZWN0Um9vdEVsZW1lbnQoYyxhKX1wYXJlbnROb2RlKGMpe3JldHVybiB0aGlzLmRlbGVnYXRlLnBhcmVudE5vZGUoYyl9bmV4dFNpYmxpbmcoYyl7cmV0dXJuIHRoaXMuZGVsZWdhdGUubmV4'@;
put 'dFNpYmxpbmcoYyl9c2V0QXR0cmlidXRlKGMsYSxmLGQpe3RoaXMuZGVsZWdhdGUuc2V0QXR0cmlidXRlKGMsYSxmLGQpfXJlbW92ZUF0dHJpYnV0ZShjLGEsZil7dGhpcy5kZWxlZ2F0ZS5yZW1vdmVBdHRyaWJ1dGUoYyxhLGYpfWFkZENsYXNzKGMsYSl7dGhpcy5kZWxlZ2F0ZS5hZGRDbGFz'@;
put 'cyhjLGEpfXJlbW92ZUNsYXNzKGMsYSl7dGhpcy5kZWxlZ2F0ZS5yZW1vdmVDbGFzcyhjLGEpfXNldFN0eWxlKGMsYSxmLGQpe3RoaXMuZGVsZWdhdGUuc2V0U3R5bGUoYyxhLGYsZCl9cmVtb3ZlU3R5bGUoYyxhLGYpe3RoaXMuZGVsZWdhdGUucmVtb3ZlU3R5bGUoYyxhLGYpfXNldFByb3Bl'@;
put 'cnR5KGMsYSxmKXsiQCI9PWEuY2hhckF0KDApJiZhPT11Y2U/dGhpcy5kaXNhYmxlQW5pbWF0aW9ucyhjLCEhZik6dGhpcy5kZWxlZ2F0ZS5zZXRQcm9wZXJ0eShjLGEsZil9c2V0VmFsdWUoYyxhKXt0aGlzLmRlbGVnYXRlLnNldFZhbHVlKGMsYSl9bGlzdGVuKGMsYSxmKXtyZXR1cm4gdGhp'@;
put 'cy5kZWxlZ2F0ZS5saXN0ZW4oYyxhLGYpfWRpc2FibGVBbmltYXRpb25zKGMsYSl7dGhpcy5lbmdpbmUuZGlzYWJsZUFuaW1hdGlvbnMoYyxhKX19Y2xhc3Mgd3plIGV4dGVuZHMgY2Nle2NvbnN0cnVjdG9yKGMsYSxmLGQsaCl7c3VwZXIoYSxmLGQsaCksdGhpcy5mYWN0b3J5PWMsdGhpcy5u'@;
put 'YW1lc3BhY2VJZD1hfXNldFByb3BlcnR5KGMsYSxmKXsiQCI9PWEuY2hhckF0KDApPyIuIj09YS5jaGFyQXQoMSkmJmE9PXVjZT90aGlzLmRpc2FibGVBbmltYXRpb25zKGMsZj12b2lkIDA9PT1mfHwhIWYpOnRoaXMuZW5naW5lLnByb2Nlc3ModGhpcy5uYW1lc3BhY2VJZCxjLGEuc2xpY2Uo'@;
put 'MSksZik6dGhpcy5kZWxlZ2F0ZS5zZXRQcm9wZXJ0eShjLGEsZil9bGlzdGVuKGMsYSxmKXtpZigiQCI9PWEuY2hhckF0KDApKXtjb25zdCBkPWZ1bmN0aW9uIEN6ZShsKXtzd2l0Y2gobCl7Y2FzZSJib2R5IjpyZXR1cm4gZG9jdW1lbnQuYm9keTtjYXNlImRvY3VtZW50IjpyZXR1cm4gZG9j'@;
put 'dW1lbnQ7Y2FzZSJ3aW5kb3ciOnJldHVybiB3aW5kb3c7ZGVmYXVsdDpyZXR1cm4gbH19KGMpO2xldCBoPWEuc2xpY2UoMSksbT0iIjtyZXR1cm4iQCIhPWguY2hhckF0KDApJiYoW2gsbV09ZnVuY3Rpb24gU3plKGwpe2NvbnN0IGM9bC5pbmRleE9mKCIuIik7cmV0dXJuW2wuc3Vic3RyaW5n'@;
put 'KDAsYyksbC5zbGljZShjKzEpXX0oaCkpLHRoaXMuZW5naW5lLmxpc3Rlbih0aGlzLm5hbWVzcGFjZUlkLGQsaCxtLF89Pnt0aGlzLmZhY3Rvcnkuc2NoZWR1bGVMaXN0ZW5lckNhbGxiYWNrKF8uX2RhdGF8fC0xLGYsXyl9KX1yZXR1cm4gdGhpcy5kZWxlZ2F0ZS5saXN0ZW4oYyxhLGYpfX1s'@;
put 'ZXQgTXplPSgoKT0+e2NsYXNzIGwgZXh0ZW5kcyBSSXtjb25zdHJ1Y3RvcihhLGYsZCxoKXtzdXBlcihhLmJvZHksZixkKX1uZ09uRGVzdHJveSgpe3RoaXMuZmx1c2goKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkoc3IoRmEpLHNyKEVaKSxzcihI'@;
put 'Wiksc3IoQ2cpKX0sbC5cdTAyNzVwcm92PWhyKHt0b2tlbjpsLGZhY3Rvcnk6bC5cdTAyNzVmYWN9KSxsfSkoKTtjb25zdCBmY2U9W3twcm92aWRlOnJhZSx1c2VDbGFzczp2emV9LHtwcm92aWRlOkhaLHVzZUZhY3Rvcnk6ZnVuY3Rpb24ga3plKCl7cmV0dXJuIG5ldyBaamV9fSx7cHJvdmlk'@;
put 'ZTpSSSx1c2VDbGFzczpNemV9LHtwcm92aWRlOkhwLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gRXplKGwsYyxhKXtyZXR1cm4gbmV3IF96ZShsLGMsYSl9LGRlcHM6W3dqLFJJLFVvXX1dLFpaPVt7cHJvdmlkZTpFWix1c2VGYWN0b3J5OigpPT5uZXcgZ3plfSx7cHJvdmlkZTpSQSx1c2VWYWx1ZToi'@;
put 'QnJvd3NlckFuaW1hdGlvbnMifSwuLi5mY2VdLGRjZT1be3Byb3ZpZGU6RVosdXNlQ2xhc3M6QnVlfSx7cHJvdmlkZTpSQSx1c2VWYWx1ZToiTm9vcEFuaW1hdGlvbnMifSwuLi5mY2VdO2xldCB4emU9KCgpPT57Y2xhc3MgbHtzdGF0aWMgd2l0aENvbmZpZyhhKXtyZXR1cm57bmdNb2R1bGU6'@;
put 'bCxwcm92aWRlcnM6YS5kaXNhYmxlQW5pbWF0aW9ucz9kY2U6Wlp9fX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVtb2Q9RGkoe3R5cGU6bH0pLGwuXHUwMjc1aW5qPXhpKHtwcm92aWRlcnM6WlosaW1wb3J0czpbV25lXX0pLGx9KSgp'@;
put 'O2NvbnN0IEF6ZT1bInNpZGViYXJOYXYiXTtmdW5jdGlvbiBUemUobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJhIiwxOSksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBVdChhKSxadChHZSgzKS5uYXZpZ2F0ZVRvVmlld2VyKCkpfSksWWUoMSwiRGF0YSIpLENlKCl9fWZ1'@;
put 'bmN0aW9uIE96ZShsLGMpezEmbCYmKHllKDAsImEiLDIwKSxZZSgxLCJBUEkgRXhwbG9yZXIiKSxDZSgpKX1mdW5jdGlvbiBEemUobCxjKXsxJmwmJih5ZSgwLCJhIiwyMSksWWUoMSwiTGluZWFnZSIpLENlKCkpfWZ1bmN0aW9uIEl6ZShsLGMpezEmbCYmKHllKDAsImEiLDIyKSxZZSgxLCJN'@;
put 'ZXRhZGF0YSIpLENlKCkpfWZ1bmN0aW9uIFJ6ZShsLGMpezEmbCYmKHllKDAsImEiLDIzKSxZZSgxLCIgVXNlcnMiKSxDZSgpKX1mdW5jdGlvbiBMemUobCxjKXsxJmwmJih5ZSgwLCJhIiwyNCksWWUoMSwiU3VibWl0dGVkIiksQ2UoKSl9ZnVuY3Rpb24gUHplKGwsYyl7MSZsJiYoeWUoMCwi'@;
put 'YSIsMjUpLFllKDEsIlRvIEFwcHJvdmUiKSxDZSgpKX1mdW5jdGlvbiBGemUobCxjKXtpZigxJmwmJih5ZSgwLCJjbHItZHJvcGRvd24tbWVudSIpLHR0KDEsVHplLDIsMCwiYSIsMTIpLHR0KDIsT3plLDIsMCwiYSIsMTMpLHR0KDMsRHplLDIsMCwiYSIsMTQpLHR0KDQsSXplLDIsMCwiYSIs'@;
put 'MTUpLHR0KDUsUnplLDIsMCwiYSIsMTYpLHR0KDYsTHplLDIsMCwiYSIsMTcpLHR0KDcsUHplLDIsMCwiYSIsMTgpLENlKCkpLDImbCl7Y29uc3QgYT1HZSgyKTtTZSgxKSxSZSgibmdJZiIsYS5pc01haW5Sb3V0ZSgidmlldyIpKSxTZSgxKSxSZSgibmdJZiIsYS5pc01haW5Sb3V0ZSgidmll'@;
put 'dyIpJiYiU0FTVklZQSI9PT1hLnNlcnZlclR5cGUpLFNlKDEpLFJlKCJuZ0lmIixhLmlzTWFpblJvdXRlKCJ2aWV3IikmJiJTQVM5Ij09PWEuc2VydmVyVHlwZSksU2UoMSksUmUoIm5nSWYiLGEuaXNNYWluUm91dGUoInZpZXciKSYmIlNBUzkiPT09YS5zZXJ2ZXJUeXBlKSxTZSgxKSxSZSgi'@;
put 'bmdJZiIsYS5pc01haW5Sb3V0ZSgidmlldyIpKSxTZSgxKSxSZSgibmdJZiIsYS5pc01haW5Sb3V0ZSgiYXBwcm92ZSIpKSxTZSgxKSxSZSgibmdJZiIsYS5pc01haW5Sb3V0ZSgiYXBwcm92ZSIpKX19ZnVuY3Rpb24gSHplKGwsYyl7aWYoMSZsJiYoeWUoMCwiZGl2Iiw4KSgxLCJjbHItZHJv'@;
put 'cGRvd24iKSgyLCJidXR0b24iLDkpLFllKDMpLHRuKDQsImNsci1pY29uIiwxMCksQ2UoKSx0dCg1LEZ6ZSw4LDcsImNsci1kcm9wZG93bi1tZW51IiwxMSksQ2UoKSgpKSwyJmwpe2NvbnN0IGE9R2UoKTtTZSgzKSx3cigiICIsYS5nZXRTdWJQYWdlKCksIiAiKX19ZnVuY3Rpb24gTnplKGws'@;
put 'Yyl7MSZsJiZ0bigwLCJjbHItdGFiLWNvbnRlbnQiKX1mdW5jdGlvbiBWemUobCxjKXsxJmwmJnRuKDAsImNsci10YWItY29udGVudCIpfWNvbnN0IEJ6ZT1mdW5jdGlvbigpe3JldHVyblsiL3ZpZXcvdXNlcm5hdi9yb2xlcyJdfTtmdW5jdGlvbiBqemUobCxjKXtpZigxJmwmJih5ZSgwLCJj'@;
put 'bHItdGFiIikoMSwiYnV0dG9uIiwyNykoMiwicCIsMjgpLHRuKDMsImNsci1pY29uIiwzMyksWWUoNCwiIFJvbGVzICIpLENlKCkoKSx0dCg1LFZ6ZSwxLDAsImNsci10YWItY29udGVudCIsMzEpLENlKCkpLDImbCl7Y29uc3QgYT1HZSgyKTtTZSgxKSxSZSgicm91dGVyTGluayIsWGEoMixC'@;
put 'emUpKSxTZSg0KSxSZSgiY2xySWZBY3RpdmUiLGEuaXNNYWluUm91dGUoIi92aWV3L3VzZXJuYXYvcm9sZXMiKSl9fWNvbnN0IHp6ZT1mdW5jdGlvbigpe3JldHVyblsiL3ZpZXcvdXNlcm5hdi91c2VycyJdfSxVemU9ZnVuY3Rpb24oKXtyZXR1cm5bIi92aWV3L3VzZXJuYXYvZ3JvdXBzIl19'@;
put 'O2Z1bmN0aW9uIFp6ZShsLGMpe2lmKDEmbCYmKHllKDAsImNsci10YWJzIiwyNikoMSwiY2xyLXRhYiIpKDIsImJ1dHRvbiIsMjcpKDMsInAiLDI4KSx0big0LCJjbHItaWNvbiIsMjkpLFllKDUsIiBVc2VycyIpLENlKCkoKSx0big2LCJjbHItdGFiLWNvbnRlbnQiKSxDZSgpLHllKDcsImNs'@;
put 'ci10YWIiKSg4LCJidXR0b24iLDI3KSg5LCJwIiwyOCksdG4oMTAsImNsci1pY29uIiwzMCksWWUoMTEsIiBHcm91cHMiKSxDZSgpKCksdHQoMTIsTnplLDEsMCwiY2xyLXRhYi1jb250ZW50IiwzMSksQ2UoKSx0dCgxMyxqemUsNiwzLCJjbHItdGFiIiwzMiksQ2UoKSksMiZsKXtjb25zdCBh'@;
put 'PUdlKCk7U2UoMiksUmUoInJvdXRlckxpbmsiLFhhKDQsenplKSksU2UoNiksUmUoInJvdXRlckxpbmsiLFhhKDUsVXplKSksU2UoNCksUmUoImNscklmQWN0aXZlIixhLmlzTWFpblJvdXRlKCIvdmlldy91c2VybmF2L2dyb3VwcyIpKSxTZSgxKSxSZSgibmdJZiIsIlNBUzkiPT09YS5zZXJ2'@;
put 'ZXJUeXBlKX19ZnVuY3Rpb24gWXplKGwsYyl7MSZsJiYoeWUoMCwicCIsMzQpLFllKDEsIkVkaXQiKSxDZSgpKX1jb25zdCBXemU9WyIqIl07bGV0IGs0PSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmLGQpe3RoaXMuX3JvdXRlcj1hLHRoaXMuZXZlbnRTZXJ2aWNlPWYsdGhpcy5fc2Fz'@;
put 'U2VydmljZT1kLHRoaXMuc2Nyb2xsZWRUb0JvdHRvbT1uZXcgeHIsdGhpcy5zaWRlYmFyT3Blbj0hMCx0aGlzLnNpZGViYXJXaWR0aD1udWxsLHRoaXMuc2lkZWJhck1heFdpZHRoPW51bGwsdGhpcy5yZXNpemluZz0hMSx0aGlzLnNhc2pzQ29uZmlnPW5ldyB2MS5TQVNqc0NvbmZpZyx0aGlz'@;
put 'LnNhc2pzQ29uZmlnPXRoaXMuX3Nhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLnNlcnZlclR5cGU9dGhpcy5fc2FzU2VydmljZS5nZXRTZXJ2ZXJUeXBlKCl9bmdPbkluaXQoKXt0aGlzLmV2ZW50U2VydmljZS5vblNpZGViYXJUb2dnbGUuc3Vic2NyaWJlKGE9Pnt0aGlzLnNpZGVi'@;
put 'YXJPcGVuPWE/YS5vcGVuOiF0aGlzLnNpZGViYXJPcGVuLHRoaXMuZXZlbnRTZXJ2aWNlLmRpc3BhdGNoRXZlbnQoInJlc2l6ZSIpfSl9b25UcmVlU2Nyb2xsKGEpe2xldCBmPWEudGFyZ2V0O2Yuc2Nyb2xsVG9wPj1mLnNjcm9sbEhlaWdodC1mLm9mZnNldEhlaWdodC0xMCYmdGhpcy5zY3Jv'@;
put 'bGxlZFRvQm90dG9tLmVtaXQoKX1pc01haW5Sb3V0ZShhKXtyZXR1cm4gdGhpcy5fcm91dGVyLnVybC5pbmNsdWRlcyhhKX1nZXRTdWJQYWdlKCl7cmV0dXJuIHRoaXMuX3JvdXRlci51cmwuc3BsaXQoIi8iKVsyXX1uYXZpZ2F0ZVRvVmlld2VyKCl7Sm4udmlld2VyLmN1cnJlbnRTZWxlY3Rp'@;
put 'b249IiIsdGhpcy5fcm91dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3L2RhdGEiKX1yZXNpemVTdGFydCgpe3RoaXMucmVzaXppbmc9ITAsZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXS5zdHlsZS5jc3NUZXh0PSJ1c2VyLXNlbGVjdDogbm9uZSJ9cmVzaXplRW5kKCl7'@;
put 'dGhpcy5yZXNpemluZz0hMSxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdLnN0eWxlLmNzc1RleHQ9IiJ9b25Nb3VzZU1vdmUoYSl7aWYodGhpcy5yZXNpemluZyl7dGhpcy5zaWRlYmFyV2lkdGg9YS5jbGllbnRYO2xldCBmPWRvY3VtZW50LmdldEVsZW1lbnRzQnlD'@;
put 'bGFzc05hbWUoIm5hdi10cmVlIilbMF07dGhpcy5zaWRlYmFyV2lkdGgmJnRoaXMuaXNPdmVyZmxvd24oZikmJih0aGlzLnNpZGViYXJNYXhXaWR0aD10aGlzLnNpZGViYXJXaWR0aD49Mzc1P3RoaXMuc2lkZWJhcldpZHRoKzEwOnRoaXMuc2lkZWJhck1heFdpZHRoKX19b25Nb3VzZVVwKGEp'@;
put 'e3RoaXMucmVzaXppbmcmJnRoaXMucmVzaXplRW5kKCl9aXNPdmVyZmxvd24oYSl7cmV0dXJuIGEuc2Nyb2xsV2lkdGg+YS5jbGllbnRXaWR0aH19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkocnQoTGEpLHJ0KFJzKSxydChwbCkpfSxsLlx1MDI3NWNt'@;
put 'cD1rcih7dHlwZTpsLHNlbGVjdG9yczpbWyJhcHAtc2lkZWJhciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxmKXtpZigxJmEmJk5vKEF6ZSw1KSwyJmEpe2xldCBkO3VpKGQ9Y2koKSkmJihmLnNpZGViYXJOYXY9ZC5maXJzdCl9fSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxmKXsxJmEmJkV0'@;
put 'KCJtb3VzZW1vdmUiLGZ1bmN0aW9uKGgpe3JldHVybiBmLm9uTW91c2VNb3ZlKGgpfSwwLEwyKSgibW91c2V1cCIsZnVuY3Rpb24oaCl7cmV0dXJuIGYub25Nb3VzZVVwKGgpfSwhMSxMMil9LG91dHB1dHM6e3Njcm9sbGVkVG9Cb3R0b206InNjcm9sbGVkVG9Cb3R0b20ifSxuZ0NvbnRlbnRT'@;
put 'ZWxlY3RvcnM6V3plLGRlY2xzOjksdmFyczoxMyxjb25zdHM6W1siaWQiLCJzaWRlYmFyTmF2Il0sWyJzaWRlYmFyTmF2IiwiIl0sWyJjbGFzcyIsImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHN1Yi1kcm9wZG93biIsNCwibmdJZiJdLFsiY2xhc3MiLCJwLTEwIiw0LCJuZ0lmIl0s'@;
put 'WyJjbGFzcyIsInBhZ2UtdGl0bGUiLDQsIm5nSWYiXSxbMSwibmF2LWRpdmlkZXIiXSxbMSwibmF2LXRyZWUiLDMsInNjcm9sbCJdLFsxLCJyZXNpemUtaGFuZGxlIiwzLCJtb3VzZWRvd24iXSxbMSwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsInN1Yi1kcm9wZG93biJdLFsi'@;
put 'Y2xyRHJvcGRvd25UcmlnZ2VyIiwiIiwxLCJkcm9wZG93bi10b2dnbGUiLCJidG4iLCJidG4tbGluayJdLFsic2hhcGUiLCJjYXJldCBkb3duIl0sWzQsImNscklmT3BlbiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsMywiY2xpY2siLDQs'@;
put 'Im5nSWYiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy92aXlhLWFwaS1leHBsb3JlciIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDQsIm5nSWYiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy9saW5lYWdlIiwi'@;
put 'cm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsNCwibmdJZiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi92aWV3L21ldGFkYXRhIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsNCwibmdJZiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGlu'@;
put 'ayIsIi92aWV3L3VzZXJuYXYiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiw0LCJuZ0lmIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL2FwcHJvdmUvc3VibWl0dGVkIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsNCwibmdJZiJdLFsiY2xyVmVydGlj'@;
put 'YWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi9hcHByb3ZlL3RvYXBwcm92ZSIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDQsIm5nSWYiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDMsImNsaWNrIl0sWyJjbHJWZXJ0aWNhbE5h'@;
put 'dkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdml5YS1hcGktZXhwbG9yZXIiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3ZpZXcvbGluZWFnZSIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNs'@;
put 'clZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy9tZXRhZGF0YSIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy91c2VybmF2Iiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdLFsi'@;
put 'Y2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi9hcHByb3ZlL3N1Ym1pdHRlZCIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvYXBwcm92ZS90b2FwcHJvdmUiLCJyb3V0ZXJMaW5rQWN0aXZlIiwi'@;
put 'YWN0aXZlIl0sWzEsInAtMTAiXSxbImNsclRhYkxpbmsiLCIiLDEsInVzZXItbmF2LWJ0biIsMywicm91dGVyTGluayJdLFsxLCJ6ZXJvLW1hcmdpbiJdLFsic2hhcGUiLCJ1c2VyIl0sWyJzaGFwZSIsInVzZXJzIl0sWzQsImNscklmQWN0aXZlIl0sWzQsIm5nSWYiXSxbInNoYXBlIiwiYmxv'@;
put 'Y2tzLWdyb3VwIl0sWzEsInBhZ2UtdGl0bGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxmKXsxJmEmJihUaSgpLHllKDAsImNsci12ZXJ0aWNhbC1uYXYiLDAsMSksdHQoMixIemUsNiwxLCJkaXYiLDIpLHR0KDMsWnplLDE0LDYsImNsci10YWJzIiwzKSx0dCg0LFl6ZSwyLDAsInAiLDQpLHRu'@;
put 'KDUsImRpdiIsNSkseWUoNiwiZGl2Iiw2KSxFdCgic2Nyb2xsIixmdW5jdGlvbihoKXtyZXR1cm4gZi5vblRyZWVTY3JvbGwoaCl9KSxEcig3KSxDZSgpLHllKDgsInNwYW4iLDcpLEV0KCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7cmV0dXJuIGYucmVzaXplU3RhcnQoKX0pLENlKCkoKSksMiZh'@;
put 'JiYoV2MoIndpZHRoIixmLnNpZGViYXJXaWR0aCwicHgiKSgibWF4LXdpZHRoIixmLnNpZGViYXJNYXhXaWR0aCwicHgiKSxncigiY2xvc2VkIiwhZi5zaWRlYmFyT3BlbikoInJlc2l6aW5nIixmLnJlc2l6aW5nKSxTZSgyKSxSZSgibmdJZiIsZi5pc01haW5Sb3V0ZSgidmlldyIpKSxTZSgx'@;
put 'KSxSZSgibmdJZiIsZi5pc01haW5Sb3V0ZSgidmlldy91c2VybmF2IikpLFNlKDEpLFJlKCJuZ0lmIixmLmlzTWFpblJvdXRlKCJob21lIikpLFNlKDQpLGdyKCJyZXNpemluZyIsZi5yZXNpemluZykpfSxkZXBlbmRlbmNpZXM6WyRpLFJsLHVTLHhkLHU1LGY1LFQ3LGM1LGw1LEE3LGN1ZSxm'@;
put 'dWUsYTMsbzUsYTUsSTAsVENdLHN0eWxlczpbImNsci12ZXJ0aWNhbC1uYXZbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjI3MnB4O21pbi13aWR0aDoyNzJweDtoZWlnaHQ6MTAwJTttYXgtd2lkdGg6Mzc1cHg7cG9zaXRpb246cmVsYXRpdmU7Ym94LXNoYWRvdzowIDAgNXB4ICMwMDAwMDAx'@;
put 'ZjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmYhaW1wb3J0YW50fWNsci12ZXJ0aWNhbC1uYXZbX25nY29udGVudC0lQ09NUCVdICAgLnN1bi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV17bWluLWhlaWdodDozNnB4fWNsci12ZXJ0aWNhbC1uYXZbX25nY29udGVudC0lQ09NUCVdICAgLm5hdi10'@;
put 'cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTtvdmVyZmxvdy15OmF1dG99Y2xyLXZlcnRpY2FsLW5hdi5jbG9zZWRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi1sZWZ0Oi0yNzJweH1jbHItdmVydGljYWwtbmF2W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yZXNpemUtaGFuZGxl'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDotM3B4O2JvcmRlci1yaWdodDo0cHggc29saWQgIzgwYjQ0MTtjdXJzb3I6Y29sLXJlc2l6ZTtvcGFjaXR5OjA7dHJhbnNpdGlvbjphbGwgLjFzIGVhc2UtaW4tb3V0fWNsci12ZXJ0aWNh'@;
put 'bC1uYXZbX25nY29udGVudC0lQ09NUCVdICAgLnJlc2l6ZS1oYW5kbGVbX25nY29udGVudC0lQ09NUCVdOmhvdmVye29wYWNpdHk6LjV9Y2xyLXZlcnRpY2FsLW5hdltfbmdjb250ZW50LSVDT01QJV0gICAucmVzaXplLWhhbmRsZS5yZXNpemluZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0'@;
put 'eToxfWNsci12ZXJ0aWNhbC1uYXYucmVzaXppbmdbX25nY29udGVudC0lQ09NUCVde3RyYW5zaXRpb246bm9uZSFpbXBvcnRhbnR9Lm5hdi1kaXZpZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtib3JkZXItdG9wOjFweCBzb2xpZCAjZDNkM2QzO21hcmdpbi1ib3R0b206MH0ucGFn'@;
put 'ZS10aXRsZVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjA7Zm9udC1zaXplOjE4cHg7dGV4dC1hbGlnbjpjZW50ZXJ9Lnplcm8tbWFyZ2luW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MH0udXNlci1uYXYtYnRuW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjAgMnB4fSNzaWRlYmFy'@;
put 'TmF2W19uZ2NvbnRlbnQtJUNPTVAlXXt6LWluZGV4OjIwMH1AbWVkaWEgKG1heC13aWR0aDogNzY3cHgpeyNzaWRlYmFyTmF2W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDt0b3A6MH19Il19KSxsfSkoKSxSNz0oKCk9PntjbGFzcyBse3NldCBuZ1Zhcihh'@;
put 'KXt0aGlzLmNvbnRleHQuJGltcGxpY2l0PXRoaXMuY29udGV4dC5uZ1Zhcj1hLHRoaXMuaGFzVmlld3x8KHRoaXMudmNSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGVSZWYsdGhpcy5jb250ZXh0KSx0aGlzLmhhc1ZpZXc9ITApfWNvbnN0cnVjdG9yKGEsZil7dGhpcy50ZW1w'@;
put 'bGF0ZVJlZj1hLHRoaXMudmNSZWY9Zix0aGlzLmNvbnRleHQ9eyRpbXBsaWNpdDpudWxsLG5nVmFyOm51bGx9LHRoaXMuaGFzVmlldz0hMX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkocnQoemwpLHJ0KGZhKSl9LGwuXHUwMjc1ZGlyPVNyKHt0eXBl'@;
put 'Omwsc2VsZWN0b3JzOltbIiIsIm5nVmFyIiwiIl1dLGlucHV0czp7bmdWYXI6Im5nVmFyIn19KSxsfSkoKTtmdW5jdGlvbiBHemUobCxjKXsxJmwmJnRuKDAsImNsci1pY29uIiwxMil9ZnVuY3Rpb24gJHplKGwsYyl7aWYoMSZsKXtjb25zdCBhPVpuKCk7eWUoMCwiY2xyLWljb24iLDEzKSxF'@;
put 'dCgiY2xpY2siLGZ1bmN0aW9uKCl7VXQoYSk7Y29uc3QgZD1HZSgyKTtyZXR1cm4gZC5saWJyYXJpZXNTZWFyY2g9IiIsWnQoZC5saWJyYXJ5T25GaWx0ZXIoKSl9KSxDZSgpfX1mdW5jdGlvbiBLemUobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJjbHItdHJlZS1ub2RlIiw2KSgx'@;
put 'LCJkaXYiLDcpKDIsImlucHV0Iiw4LDkpLEV0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihkKXtyZXR1cm4gVXQoYSksWnQoR2UoKS5saWJyYXJpZXNTZWFyY2g9ZCl9KSgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIFV0KGEpLFp0KEdlKCkubGlicmFyeU9uRmlsdGVyKCkpfSksQ2UoKSx0'@;
put 'dCg0LEd6ZSwxLDAsImNsci1pY29uIiwxMCksdHQoNSwkemUsMSwwLCJjbHItaWNvbiIsMTEpLENlKCkoKX1pZigyJmwpe2NvbnN0IGE9UWkoMyksZj1HZSgpO1NlKDIpLFJlKCJuZ01vZGVsIixmLmxpYnJhcmllc1NlYXJjaCksU2UoMiksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLFNl'@;
put 'KDEpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gcXplKGwsYyl7MSZsJiZ0bigwLCJjbHItaWNvbiIsMTIpfWZ1bmN0aW9uIFh6ZShsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImNsci1pY29uIiwxMyksRXQoImNsaWNrIixmdW5jdGlvbigpe1V0KGEpLEdl'@;
put 'KCk7Y29uc3QgZD1RaSgzKSxoPUdlKDIpLiRpbXBsaWNpdCxtPUdlKCk7cmV0dXJuIGQudmFsdWU9IiIsaC5zZWFyY2hTdHJpbmc9IiIsWnQobS50cmVlT25GaWx0ZXIoaCwidGFibGVzIikpfSksQ2UoKX19ZnVuY3Rpb24gSnplKGwsYyl7aWYoMSZsKXtjb25zdCBhPVpuKCk7eWUoMCwiY2xy'@;
put 'LXRyZWUtbm9kZSIsNikoMSwiZGl2Iiw3KSgyLCJpbnB1dCIsMTgsMTkpLEV0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihkKXtyZXR1cm4gVXQoYSksWnQoR2UoMikuJGltcGxpY2l0LnNlYXJjaFN0cmluZz1kKX0pKCJrZXl1cCIsZnVuY3Rpb24oKXtVdChhKTtjb25zdCBkPUdlKDIpLiRp'@;
put 'bXBsaWNpdDtyZXR1cm4gWnQoR2UoKS50cmVlT25GaWx0ZXIoZCwidGFibGVzIikpfSksQ2UoKSx0dCg0LHF6ZSwxLDAsImNsci1pY29uIiwxMCksdHQoNSxYemUsMSwwLCJjbHItaWNvbiIsMTEpLENlKCkoKX1pZigyJmwpe2NvbnN0IGE9UWkoMyksZj1HZSgyKS4kaW1wbGljaXQ7U2UoMiks'@;
put 'UmUoIm5nTW9kZWwiLGYuc2VhcmNoU3RyaW5nKSxTZSgyKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksU2UoMSksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBRemUobCxjKXsxJmwmJnRuKDAsImNsci1pY29uIiwyNil9ZnVuY3Rpb24gZVVlKGwsYyl7MSZsJiZ0'@;
put 'bigwLCJjbHItaWNvbiIsMjcpfWZ1bmN0aW9uIHRVZShsLGMpezEmbCYmKHllKDAsInNwYW4iKSxZZSgxLCIgVG8gdW5sb2NrIGFsbCB0YWJsZXMsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyAiKSxDZSgpKX1mdW5jdGlvbiBuVWUobCxjKXtpZigxJmwmJih5ZSgwLCJjbHIt'@;
put 'dG9vbHRpcC1jb250ZW50IiwyOCksdHQoMSx0VWUsMiwwLCJzcGFuIiwyOSksQ2UoKSksMiZsKXtjb25zdCBhPUdlKCkubmdWYXI7U2UoMSksUmUoIm5nSWYiLGEpfX1mdW5jdGlvbiByVWUobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJjbHItdG9vbHRpcCIpKDEsImJ1dHRvbiIs'@;
put 'MjEpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPVV0KGEpLm5nVmFyLG09R2UoKS4kaW1wbGljaXQsXz1HZSgyKS4kaW1wbGljaXQsTz1HZSgpO3JldHVybiBadChoPyIiOk8ub25UYWJsZUNsaWNrKG0sXykpfSksV3IoMiwyMiksdHQoMyxRemUsMSwwLCJjbHItaWNvbiIsMjMpLHR0'@;
put 'KDQsZVVlLDEsMCwiY2xyLWljb24iLDI0KSxHcigpLFllKDUpLENlKCksdHQoNixuVWUsMiwxLCJjbHItdG9vbHRpcC1jb250ZW50IiwyNSksQ2UoKX1pZigyJmwpe2NvbnN0IGE9Yy5uZ1ZhcixmPUdlKCkuJGltcGxpY2l0LGQ9R2UoMikuJGltcGxpY2l0LGg9R2UoKTtTZSgxKSxncigiZGMt'@;
put 'bG9ja2VkLWNvbnRyb2wiLGEpKCJ0YWJsZS1hY3RpdmUiLGgubGliVGFiQWN0aXZlKGQuTElCUkFSWVJFRixmKSksU2UoMSksUmUoIm5nU3dpdGNoIixmLmluY2x1ZGVzKCItRkMiKSksU2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsITApLFNlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLCExKSxTZSgx'@;
put 'KSx3cigiICIsZi5yZXBsYWNlKCItRkMiLCIiKSwiICIpfX1mdW5jdGlvbiBpVWUobCxjKXtpZigxJmwmJih5ZSgwLCJjbHItdHJlZS1ub2RlIiksdHQoMSxyVWUsNyw4LCJjbHItdG9vbHRpcCIsMjApLENlKCkpLDImbCl7Y29uc3QgYT1jLmluZGV4LGY9R2UoMyk7U2UoMSksUmUoIm5nVmFy'@;
put 'IixhKzE+Zi5saWNlbmNlU3RhdGUudmFsdWUudGFibGVzX2luX2xpYnJhcnlfbGltaXQpfX1mdW5jdGlvbiBvVWUobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJjbHItdHJlZS1ub2RlIiwxNSksRXQoImNsaWNrIixmdW5jdGlvbihkKXtVdChhKTtjb25zdCBoPUdlKCkuJGltcGxp'@;
put 'Y2l0LG09R2UoKTtyZXR1cm4gbS50cmVlTm9kZUNsaWNrZWQoZCxoKSxadChtLmxpYj1oLkxJQlJBUllSRUYpfSkoImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihkKXtyZXR1cm4gVXQoYSksWnQoR2UoKS4kaW1wbGljaXQuZXhwYW5kZWQ9ZCl9KSx5ZSgxLCJwIiwxNiksRXQoImNsaWNr'@;
put 'IixmdW5jdGlvbigpe1V0KGEpO2NvbnN0IGQ9R2UoKS4kaW1wbGljaXQsaD1HZSgpO3JldHVybiBoLmxpYj1kLkxJQlJBUllSRUYsWnQoaC5saWJyYXJ5T25DbGljayhkLkxJQlJBUllSRUYsZCkpfSksdG4oMiwiY2xyLWljb24iLDE3KSxZZSgzKSxDZSgpLHR0KDQsSnplLDYsMywiY2xyLXRy'@;
put 'ZWUtbm9kZSIsMCksdHQoNSxpVWUsMiwxLCJjbHItdHJlZS1ub2RlIiwxKSxDZSgpfWlmKDImbCl7Y29uc3QgYT1HZSgpLiRpbXBsaWNpdDtncigiY2xyLWV4cGFuZGVkIixhLmV4cGFuZGVkKSxSZSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdUYWJs'@;
put 'ZXMmJiFhLnRhYmxlcyksU2UoMyksd3IoIiAiLGEuTElCUkFSWVJFRiwiICIpLFNlKDEpLFJlKCJuZ0lmIixhLnRhYmxlcyksU2UoMSksUmUoIm5nRm9yT2YiLGEudGFibGVzKX19ZnVuY3Rpb24gYVVlKGwsYyl7aWYoMSZsJiYoV3IoMCksdHQoMSxvVWUsNiw3LCJjbHItdHJlZS1ub2RlIiwx'@;
put 'NCksR3IoKSksMiZsKXtjb25zdCBhPWMuJGltcGxpY2l0O1NlKDEpLFJlKCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiBsVWUobCxjKXsxJmwmJih5ZSgwLCJkaXYiLDMwKSgxLCJkaXYiLDMxKSgyLCJzcGFuIiwzMiksWWUoMywiIExvYWRpbmcuLi4gIiksQ2UoKSgpKCkpfWZ1bmN0aW9u'@;
put 'IHNVZShsLGMpezEmbCYmKHllKDAsImgzIiwzNiksWWUoMSwiIFBsZWFzZSBzZWxlY3QgYSB0YWJsZSAiKSxDZSgpKX1mdW5jdGlvbiB1VWUobCxjKXsxJmwmJih5ZSgwLCJoMyIsMzYpLFllKDEsIiBObyBFZGl0YWJsZSBUYWJsZXMgQ29uZmlndXJlZCAiKSxDZSgpKX1mdW5jdGlvbiBjVWUo'@;
put 'bCxjKXtpZigxJmwmJih5ZSgwLCJkaXYiLDMzKSx0bigxLCJjbHItaWNvbiIsMzQpLHR0KDIsc1VlLDIsMCwiaDMiLDM1KSx0dCgzLHVVZSwyLDAsImgzIiwzNSksQ2UoKSksMiZsKXtjb25zdCBhPUdlKCk7U2UoMiksUmUoIm5nSWYiLChudWxsPT1hLnRyZWVOb2RlTGlicmFyaWVzP251bGw6'@;
put 'YS50cmVlTm9kZUxpYnJhcmllcy5sZW5ndGgpPjApLFNlKDEpLFJlKCJuZ0lmIiwobnVsbD09YS50cmVlTm9kZUxpYnJhcmllcz9udWxsOmEudHJlZU5vZGVMaWJyYXJpZXMubGVuZ3RoKTwxKX19bGV0IGZVZT0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEsZixkLGgsbSxfKXt0aGlzLnJv'@;
put 'dXRlPWEsdGhpcy5yb3V0ZXI9Zix0aGlzLmxpY2VuY2VTZXJ2aWNlPWQsdGhpcy5oZWxwZXJTZXJ2aWNlPWgsdGhpcy5ldmVudFNlcnZpY2U9bSx0aGlzLnNhc1NlcnZpY2U9Xyx0aGlzLnRyZWVOb2RlTGlicmFyaWVzPW51bGwsdGhpcy5saWJyYXJpZXNTZWFyY2g9IiIsdGhpcy5saWI9IiIs'@;
put 'dGhpcy50YWJsZT0iIix0aGlzLmVuY29kaW5nPSJVVEYtOCIsdGhpcy5sb2FkaW5nPSEwLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlfWNvbGxhcHNlTGlicmFyeUl0ZW1zKGEsZil7YS5mb3JFYWNoKGQ9PntkLkxJQlJBUllJRCE9PWYuTElCUkFS'@;
put 'WUlEJiYoZC5leHBhbmRlZD0hMSl9KX10cmVlTm9kZUNsaWNrZWQoYSxmKXsiQ29sbGFwc2UiPT09YS50YXJnZXQudGl0bGUmJnRoaXMuY29sbGFwc2VMaWJyYXJ5SXRlbXModGhpcy5saWJyYXJpZXMsZil9bGlicmFyeU9uQ2xpY2soYSxmKXtmLmV4cGFuZGVkPSFmLmV4cGFuZGVkLGYuZXhw'@;
put 'YW5kZWQmJiF0aGlzLnRhYmxlJiZ0aGlzLnNlbGVjdExpYnJhcnkoYSwhMSxmKSx0aGlzLmNvbGxhcHNlTGlicmFyeUl0ZW1zKHRoaXMubGlicmFyaWVzLGYpfXNlbGVjdExpYnJhcnkoYSxmLGQpe2QubG9hZGluZ1RhYmxlcz0hMDtsZXQgaCxtPVtdO2lmKHRoaXMubGlic0FuZFRhYmxlcyYm'@;
put 'KGg9dGhpcy5saWJzQW5kVGFibGVzW2FdLHRoaXMudGFibGU9dm9pZCAwLCJQbGVhc2Ugc2VsZWN0IGxpYnJhcnkiIT09YSkpe2xldCBfPWguZmlsdGVyKGZ1bmN0aW9uKE8pe3JldHVybi0xPT09bS5pbmRleE9mKE8pJiYobS5wdXNoKE8pLCEwKX0pO3RoaXMudGFibGVzPV8sSm4uZWRpdG9y'@;
put 'LmxpYnJhcmllcz10aGlzLmxpYnJhcmllc31Kbi5lZGl0b3IubGlicmFyeT1hLGZ8fHRoaXMuY2xlYXJHbG9iYWxzRmlsdGVyKCksZC5sb2FkaW5nVGFibGVzPSExLGQuZXhwYW5kZWQ9ITB9c2VsZWN0VGFibGUoYSxmKXt2YXIgZD10aGlzO3JldHVybiB5aShmdW5jdGlvbiooKXtkLmxpYlRh'@;
put 'Yj1kLmxpYisiLiIrZC50YWJsZSxkLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSxKbi5lZGl0b3IudGFibGU9YSxmfHxkLmNsZWFyR2xvYmFsc0ZpbHRlcigpfSkoKX1jbGVhckdsb2JhbHNGaWx0ZXIoKXtKbi5lZGl0b3IuZmlsdGVyLmxpYmRzPSIiLEpuLmVkaXRvci5maWx0ZXIud2hl'@;
put 'cmVDbGF1c2U9IiIsSm4uZWRpdG9yLmZpbHRlci5ncm91cExvZ2ljPSIiLEpuLmVkaXRvci5maWx0ZXIuY2xhdXNlcz1bXSxKbi5lZGl0b3IuZmlsdGVyLnZhbHM9W10sSm4uZWRpdG9yLmZpbHRlci5jb2xzPVtdfWxpYlRhYkFjdGl2ZShhLGYpe3JldHVybiEoIXRoaXMubGlifHwhdGhpcy50'@;
put 'YWJsZSkmJmE9PT10aGlzLmxpYiYmZj09PXRoaXMudGFibGV9dHJlZU9uRmlsdGVyKGEsZil7dGhpcy5oZWxwZXJTZXJ2aWNlLnRyZWVPbkZpbHRlcihhLGYpfWxpYnJhcnlPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy50cmVlTm9kZUxpYnJhcmll'@;
put 'cyx0aGlzLmxpYnJhcmllc1NlYXJjaCwiTElCUkFSWVJFRiIpLEpuLmxpbmVhZ2UubGlicmFyaWVzU2VhcmNoPXRoaXMubGlicmFyaWVzU2VhcmNofW9uVGFibGVDbGljayhhLGYpe3RoaXMudGFibGU9YSx0aGlzLmxpYj1mLkxJQlJBUllSRUYsdGhpcy5zZWxlY3RUYWJsZShhKSx0aGlzLmVk'@;
put 'aXRUYWJsZSgpfWVkaXRUYWJsZSgpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL2VkaXRvci8iK3RoaXMubGliKyIuIit0aGlzLnRhYmxlKX1nZXRMaWJyYXJ5VGFibGVTdGF0ZSgpe2lmKG51bGwhPT1Kbi5lZGl0b3IudHJlZU5vZGVMaWJyYXJpZXMmJih0aGlzLnRyZWVOb2RlTGlicmFy'@;
put 'aWVzPUpuLmVkaXRvci50cmVlTm9kZUxpYnJhcmllcyksIiIhPT1Kbi5lZGl0b3IubGlicmFyeSl7dGhpcy5saWI9Sm4uZWRpdG9yLmxpYnJhcnk7bGV0IGE9bnVsbDt0aGlzLnRyZWVOb2RlTGlicmFyaWVzJiYoYT10aGlzLnRyZWVOb2RlTGlicmFyaWVzLmZpbmQoZj0+Zi5MSUJSQVJZUkVG'@;
put 'PT09dGhpcy5saWIpKSx0aGlzLnNlbGVjdExpYnJhcnkoSm4uZWRpdG9yLmxpYnJhcnksITAsYSl9fWdldEZyb21HbG9iYWxzKCl7dGhpcy5saWJzQW5kVGFibGVzPUpuLmVkaXRvci5saWJzQW5kVGFibGVzLHRoaXMubGlicmFyaWVzPUpuLmVkaXRvci5saWJyYXJpZXMsdGhpcy5nZXRMaWJy'@;
put 'YXJ5VGFibGVTdGF0ZSgpLHRoaXMubG9hZGluZz0hMX1uZ0FmdGVyQ29udGVudEluaXQoKXtKbi5lZGl0b3Iuc3RhcnR1cFNldD90aGlzLmdldEZyb21HbG9iYWxzKCk6dGhpcy5ldmVudFNlcnZpY2Uub25TdGFydHVwRGF0YUxvYWRlZC5zdWJzY3JpYmUoKCk9Pnt0aGlzLmdldEZyb21HbG9i'@;
put 'YWxzKCl9KX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkocnQoTGEpLHJ0KHR1KSxydChiMSkscnQoUHUpLHJ0KFJzKSxydChwbCkpfSxsLlx1MDI3NWNtcD1rcih7dHlwZTpsLHNlbGVjdG9yczpbWyJob21lLWNvbXBvbmVudCJdXSxob3N0QXR0cnM6'@;
put 'WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6OCx2YXJzOjQsY29uc3RzOltbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsxLCJjYXJkLWJsb2NrIl0sWyJjbGFzcyIsInNwaW5uZXItd3JhcHBlci1m'@;
put 'dWxscGFnZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZCIsNCwibmdJZiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiTGlicmFyaWVzIiwibmFtZSIsImlucHV0IiwiYXV0b2Nv'@;
put 'bXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSIsImtleXVwIl0sWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNo'@;
put 'YXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsci1leHBhbmRlZCIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSJd'@;
put 'LFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwicmFjay1zZXJ2ZXIiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJUYWJsZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwi'@;
put 'a2V5dXAiXSxbInNlYXJjaFRyZWVJbnB1dCIsIiJdLFs0LCJuZ1ZhciJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLDEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJdLFszLCJuZ1N3aXRjaCJdLFsic2hhcGUiLCJib2x0Iiw0LCJuZ1N3aXRjaENhc2UiXSxbInNoYXBlIiwidGFibGUi'@;
put 'LDQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiLCJjbHJTaXplIiwibGciLDQsImNscklmT3BlbiJdLFsic2hhcGUiLCJib2x0Il0sWyJzaGFwZSIsInRhYmxlIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCIsImNsclNpemUiLCJsZyJdLFs0LCJu'@;
put 'Z0lmIl0sWzEsInNwaW5uZXItd3JhcHBlci1mdWxscGFnZSJdLFsxLCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJzcGlubmVyIl0sWzEsIm5vLXRhYmxlLXNlbGVjdGVkIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwiNjAiLDEsImlzLWluZm8iLCJpY29uLWRjLWZpbGwiXSxb'@;
put 'ImNsYXNzIiwidGV4dC1jZW50ZXIgY29sb3ItZ3JheSIsNCwibmdJZiJdLFsxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxmKXsxJmEmJih5ZSgwLCJhcHAtc2lkZWJhciIpKDEsImNsci10cmVlIiksdHQoMixLemUsNiwzLCJjbHItdHJlZS1ub2Rl'@;
put 'IiwwKSx0dCgzLGFVZSwyLDEsIm5nLWNvbnRhaW5lciIsMSksQ2UoKSgpLHllKDQsImRpdiIsMikoNSwiZGl2IiwzKSx0dCg2LGxVZSw0LDAsImRpdiIsNCksdHQoNyxjVWUsNCwyLCJkaXYiLDUpLENlKCkoKSksMiZhJiYoU2UoMiksUmUoIm5nSWYiLChudWxsPT1mLnRyZWVOb2RlTGlicmFy'@;
put 'aWVzP251bGw6Zi50cmVlTm9kZUxpYnJhcmllcy5sZW5ndGgpPjApLFNlKDEpLFJlKCJuZ0Zvck9mIixmLnRyZWVOb2RlTGlicmFyaWVzKSxTZSgzKSxSZSgibmdJZiIsZi5sb2FkaW5nKSxTZSgxKSxSZSgibmdJZiIsIWYubG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W2lzLFdhLHphLERkLExm'@;
put 'LGk1LFJsLEpjLHhkLFJmLE1TLEVTLGtTLGs0LFJhLCRpLGtmLENoLFI3XSxzdHlsZXM6WyJjbHItdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwfS5jYXJkLWJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXto'@;
put 'ZWlnaHQ6MTAwJTtwYWRkaW5nOjB9Lm5vLXRhYmxlLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6MTAwJX0gIGNsci1pY29uLmlzLWJsdWUsICAgY2xyLWljb24uaXMtaW5mb3tmaWxsOiM2YTkyMzV9LnNwaW5uZXItd3JhcHBlci1mdWxscGFn'@;
put 'ZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCV9Il19KSxsfSkoKTt2YXIgdTM9VCgxMjA3MCk7Y29uc3QgWVo9ZnVuY3Rpb24gaFVlKGwpe3JldHVybiJzeW1ib2wi'@;
put 'PT10eXBlb2YgbHx8QnYobCkmJiJbb2JqZWN0IFN5bWJvbF0iPT1GdihsKX07dmFyIHBVZT0vXC58XFsoPzpbXltcXV0qfChbIiddKSg/Oig/IVwxKVteXFxdfFxcLikqP1wxKVxdLyxtVWU9L15cdyokLztmdW5jdGlvbiBXWihsLGMpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBsfHxudWxsIT1j'@;
put 'JiYiZnVuY3Rpb24iIT10eXBlb2YgYyl0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBhIGZ1bmN0aW9uIik7dmFyIGE9ZnVuY3Rpb24oKXt2YXIgZj1hcmd1bWVudHMsZD1jP2MuYXBwbHkodGhpcyxmKTpmWzBdLGg9YS5jYWNoZTtpZihoLmhhcyhkKSlyZXR1cm4gaC5nZXQoZCk7dmFy'@;
put 'IG09bC5hcHBseSh0aGlzLGYpO3JldHVybiBhLmNhY2hlPWguc2V0KGQsbSl8fGgsbX07cmV0dXJuIGEuY2FjaGU9bmV3KFdaLkNhY2hlfHxveiksYX1XWi5DYWNoZT1vejtjb25zdCBiVWU9V1o7dmFyIFNVZT0vW14uW1xdXSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/KXwoWyInXSkoKD86KD8h'@;
put 'XDIpW15cXF18XFwuKSo/KVwyKVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwkKSkvZyxNVWU9L1xcKFxcKT8vZyxrVWU9ZnVuY3Rpb24gd1VlKGwpe3ZhciBjPWJVZShsLGZ1bmN0aW9uKGYpe3JldHVybiA1MDA9PT1hLnNpemUmJmEuY2xlYXIoKSxmfSksYT1jLmNhY2hlO3JldHVybiBj'@;
put 'fShmdW5jdGlvbihsKXt2YXIgYz1bXTtyZXR1cm4gNDY9PT1sLmNoYXJDb2RlQXQoMCkmJmMucHVzaCgiIiksbC5yZXBsYWNlKFNVZSxmdW5jdGlvbihhLGYsZCxoKXtjLnB1c2goZD9oLnJlcGxhY2UoTVVlLCIkMSIpOmZ8fGEpfSksY30pO2NvbnN0IEVVZT1rVWU7dmFyIGhjZT1zND9zNC5w'@;
put 'cm90b3R5cGU6dm9pZCAwLHBjZT1oY2U/aGNlLnRvU3RyaW5nOnZvaWQgMDtjb25zdCBPVWU9ZnVuY3Rpb24gbWNlKGwpe2lmKCJzdHJpbmciPT10eXBlb2YgbClyZXR1cm4gbDtpZihqdihsKSlyZXR1cm4gZnVuY3Rpb24geFVlKGwsYyl7Zm9yKHZhciBhPS0xLGY9bnVsbD09bD8wOmwubGVu'@;
put 'Z3RoLGQ9QXJyYXkoZik7KythPGY7KWRbYV09YyhsW2FdLGEsbCk7cmV0dXJuIGR9KGwsbWNlKSsiIjtpZihZWihsKSlyZXR1cm4gcGNlP3BjZS5jYWxsKGwpOiIiO3ZhciBjPWwrIiI7cmV0dXJuIjAiPT1jJiYxL2w9PS0xLzA/Ii0wIjpjfSxMVWU9ZnVuY3Rpb24gUlVlKGwsYyl7cmV0dXJu'@;
put 'IGp2KGwpP2w6ZnVuY3Rpb24gZ1VlKGwsYyl7aWYoanYobCkpcmV0dXJuITE7dmFyIGE9dHlwZW9mIGw7cmV0dXJuISgibnVtYmVyIiE9YSYmInN5bWJvbCIhPWEmJiJib29sZWFuIiE9YSYmbnVsbCE9bCYmIVlaKGwpKXx8bVVlLnRlc3QobCl8fCFwVWUudGVzdChsKXx8bnVsbCE9YyYmbCBp'@;
put 'biBPYmplY3QoYyl9KGwsYyk/W2xdOkVVZShmdW5jdGlvbiBEVWUobCl7cmV0dXJuIG51bGw9PWw/IiI6T1VlKGwpfShsKSl9LEhVZT1mdW5jdGlvbiBGVWUobCl7aWYoInN0cmluZyI9PXR5cGVvZiBsfHxZWihsKSlyZXR1cm4gbDt2YXIgYz1sKyIiO3JldHVybiIwIj09YyYmMS9sPT0tMS8w'@;
put 'PyItMCI6Y30sb3M9ZnVuY3Rpb24gQlVlKGwsYyxhKXt2YXIgZj1udWxsPT1sP3ZvaWQgMDpmdW5jdGlvbiBOVWUobCxjKXtmb3IodmFyIGE9MCxmPShjPUxVZShjLGwpKS5sZW5ndGg7bnVsbCE9bCYmYTxmOylsPWxbSFVlKGNbYSsrXSldO3JldHVybiBhJiZhPT1mP2w6dm9pZCAwfShsLGMp'@;
put 'O3JldHVybiB2b2lkIDA9PT1mP2E6Zn07bGV0IExkPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmLGQpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMuaGVscGVyU2VydmljZT1mLHRoaXMubG9nZ2VyU2VydmljZT1kLHRoaXMucmVzcG9uc2U9bmV3IHdlLHRoaXMuY2hhbmdlZFRhYmxlPW5l'@;
put 'dyB3ZSx0aGlzLmRldGFpbHM9bmV3IHdlLHRoaXMuZGlmZnM9bmV3IHdlLHRoaXMuY29sdW1ucz1uZXcgd2UsdGhpcy52YWx1ZXM9bmV3IHdlLHRoaXMuZmlsdGVyPW5ldyB3ZSx0aGlzLnF1ZXJ5PW5ldyB3ZSx0aGlzLnN1Ym1pdHREZXRhaWw9bmV3IHdlLHRoaXMucmVtb3ZlUXVlcnk9bmV3'@;
put 'IHdlLHRoaXMuc2V0U3VibWl0PW5ldyB3ZSx0aGlzLnNldFN1Ym1pdExpc3Q9bmV3IHdlfWNhbGxTZXJ2aWNlKGEsZixkLGgpe3ZhciBtPXRoaXM7cmV0dXJuIHlpKGZ1bmN0aW9uKigpe20ubGliZHM9aDtsZXQgXz17fTtyZXR1cm4gX1tmXT1bYV0se2RhdGE6eWllbGQgbS5zYXNTZXJ2aWNl'@;
put 'LnJlcXVlc3QoZCxfKSxsaWJkczptLmxpYmRzfX0pKCl9dXBkYXRlVGFibGUoYSxmLGQsaCxtKXt2YXIgXz10aGlzO3JldHVybiB5aShmdW5jdGlvbiooKXtsZXQgTz17anNkYXRhOmZ9O2lmKG0pe2xldCBhZT1fLnBhcnNlRm9ybWF0cyhtKTtPLiRqc2RhdGE9e2Zvcm1hdHM6YWV9fXJldHVy'@;
put 'biBPW2RdPVthXSx5aWVsZCBfLnNhc1NlcnZpY2UucmVxdWVzdChoLE8pfSkoKX1nZXRBcHByb3ZhbHMoYSxmLGQpe3ZhciBoPXRoaXM7cmV0dXJuIHlpKGZ1bmN0aW9uKigpe2xldCBtPXt9O3JldHVybiBtW2ZdPVthXSx5aWVsZCBoLnNhc1NlcnZpY2UucmVxdWVzdChkLG0pfSkoKX1zZW5k'@;
put 'RGV0YWlscyhhLGYsZCl7dmFyIGg9dGhpcztyZXR1cm4geWkoZnVuY3Rpb24qKCl7bGV0IG09T2JqZWN0LmFzc2lnbih7c3ViOiEwfSxhKTtoLnN1Ym1pdHREZXRhaWwubmV4dCh7ZGF0YTpkW2ZdLHZpZXdEYXRhOm19KX0pKCl9Z2V0U3VibWl0dHMoKXt2YXIgYT10aGlzO3JldHVybiB5aShm'@;
put 'dW5jdGlvbiooKXtyZXR1cm4geWllbGQgYS5zYXNTZXJ2aWNlLnJlcXVlc3QoImVkaXRvcnMvZ2V0c3VibWl0cyIsbnVsbCl9KSgpfXZpZXdMaWJzKCl7dmFyIGE9dGhpcztyZXR1cm4geWkoZnVuY3Rpb24qKCl7cmV0dXJuIGEuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvdmlld2xpYnMi'@;
put 'LG51bGwpfSkoKX1yZWZyZXNoTGliSW5mbyhhKXt2YXIgZj10aGlzO3JldHVybiB5aShmdW5jdGlvbiooKXtyZXR1cm4gZi5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9yZWZyZXNobGliaW5mbyIse2xpYjJyZWZyZXNoOlt7bGlicmVmOmF9XX0pfSkoKX12ZXJzaW9uSGlzdG9yeShhKXt2'@;
put 'YXIgZj10aGlzO3JldHVybiB5aShmdW5jdGlvbiooKXtjb25zdCBkPXtpd2FudDpbe0xJQkRTOmF9XX07cmV0dXJuIHlpZWxkIGYuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvZ2V0dmVyc2lvbmhpc3RvcnkiLGQpfSkoKX12aWV3VGFibGVzKGEpe3ZhciBmPXRoaXM7cmV0dXJuIHlpKGZ1'@;
put 'bmN0aW9uKigpe2xldCBkPXtTQVNDb250cm9sVGFibGU6W3tNUExJQjphfV19O3JldHVybiB5aWVsZCBmLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3ZpZXd0YWJsZXMiLGQpfSkoKX12aWV3RGF0YShhLGYpe3ZhciBkPXRoaXM7cmV0dXJuIHlpKGZ1bmN0aW9uKigpe2xldCBoPXtTQVND'@;
put 'b250cm9sVGFibGU6W3tMSUJEUzphLEZJTFRFUl9SSzpmfV19O3JldHVybiB5aWVsZCBkLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3ZpZXdkYXRhIixoKX0pKCl9dmlld0RhdGFTZWFyY2goYSxmPSExLGQsaCl7dmFyIG09dGhpcztyZXR1cm4geWkoZnVuY3Rpb24qKCl7bGV0IE89e1NB'@;
put 'U0NvbnRyb2xUYWJsZTpbe1NFQVJDSFRZUEU6YS5sZW5ndGg+MD9mPyJOVU0iOiJDSEFSIjoiTk9ORSIsU0VBUkNIVkFMOmEsTElCRFM6ZCxGSUxURVJfUks6aH1dfTtyZXR1cm4geWllbGQgbS5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy92aWV3ZGF0YSIsTyl9KSgpfWdldERldGFpbHMo'@;
put 'YSxmLGQpe3ZhciBoPXRoaXM7cmV0dXJuIHlpKGZ1bmN0aW9uKigpe2xldCBtPXt9O3JldHVybiBtW2ZdPVthXSx5aWVsZCBoLnNhc1NlcnZpY2UucmVxdWVzdChkLG0pfSkoKX1zaG93RGlmZnMoYSxmLGQpe3ZhciBoPXRoaXM7cmV0dXJuIHlpKGZ1bmN0aW9uKigpe2xldCBtPXt9O3JldHVy'@;
put 'biBtW2ZdPVthXSx5aWVsZCBoLnNhc1NlcnZpY2UucmVxdWVzdChkLG0se3VzZUNvbXB1dGVBcGk6ITF9KX0pKCl9cmVqZWN0aW5nKGEsZixkKXt2YXIgaD10aGlzO3JldHVybiB5aShmdW5jdGlvbiooKXtsZXQgbT17fTtyZXR1cm4gbVtmXT1bYV0seWllbGQgaC5zYXNTZXJ2aWNlLnJlcXVl'@;
put 'c3QoZCxtLHt1c2VDb21wdXRlQXBpOiExfSl9KSgpfWFwcHJvdmVUYWJsZShhLGYsZCl7dmFyIGg9dGhpcztyZXR1cm4geWkoZnVuY3Rpb24qKCl7bGV0IG09e307cmV0dXJuIG1bZl09W2FdLHlpZWxkIGguc2FzU2VydmljZS5yZXF1ZXN0KGQsbSl9KSgpfWdldEhpc3RvcnkoYSxmLGQpe3Zh'@;
put 'ciBoPXRoaXM7cmV0dXJuIHlpKGZ1bmN0aW9uKigpe2xldCBtPXt9O3JldHVybiBtW2ZdPVthXSx5aWVsZCBoLnNhc1NlcnZpY2UucmVxdWVzdChkLG0pfSkoKX1zZXRRdWVyeVZhcmlhYmxlcyhhLGYpe3RoaXMuY29sdW1ucy5uZXh0KHtkYXRhOntjb2xzOmZ9LGxpYmRzOmF9KX1nZXRDaGFu'@;
put 'Z2VJbmZvKGEpe3ZhciBmPXRoaXM7cmV0dXJuIHlpKGZ1bmN0aW9uKigpe2xldCBoPXtTQVNDb250cm9sVGFibGU6W3tUQUJMRTphfV19O3JldHVybiB5aWVsZCBmLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL2dldGNoYW5nZWluZm8iLGgpfSkoKX1nZXRRdWVyeVZhbHVlcyhhLGYsZCxo'@;
put 'LG0pe3ZhciBfPXRoaXM7cmV0dXJuIHlpKGZ1bmN0aW9uKigpe2xldCBPPXtpd2FudDpbe2xpYmRzOmYsY29sOmEsLi4uaCYme1NUQVJUUk9XOmh9LC4uLm0mJntST1dTOm19fV19O3JldHVybiBkLmxlbmd0aD4wJiYoTy5GSUxURVJRVUVSWT1kKSx5aWVsZCBfLnNhc1NlcnZpY2UucmVxdWVz'@;
put 'dCgicHVibGljL2dldGNvbHZhbHMiLE8pLmNhdGNoKGFlPT57dGhyb3cgYWV9KX0pKCl9c2F2ZVF1ZXJ5KGEsZil7dmFyIGQ9dGhpcztyZXR1cm4geWkoZnVuY3Rpb24qKCl7bGV0IGg9e2l3YW50Olt7ZmlsdGVyX3RhYmxlOmF9XSxmaWx0ZXJxdWVyeTpmfSxtPXlpZWxkIGQuc2FzU2Vydmlj'@;
put 'ZS5yZXF1ZXN0KCJwdWJsaWMvdmFsaWRhdGVmaWx0ZXIiLGgpO3JldHVybiBkLmZpbHRlci5uZXh0KG0pLG19KSgpfW9wZW5UYWJsZShhKXt2YXIgZj10aGlzO3JldHVybiB5aShmdW5jdGlvbiooKXtsZXQgZD17aXdhbnQ6W3t0YWJsZV9pZDphfV19O3JldHVybiB5aWVsZCBmLnNhc1NlcnZp'@;
put 'Y2UucmVxdWVzdCgiYXVkaXRvcnMvZ2V0c3RhZ2V0YWJsZSIsZCl9KSgpfWNoZWNrT3BlcmF0b3IoYSxmLGQpe2xldCBoO3N3aXRjaChhKXtjYXNlIkJFVFdFRU4iOmYgaW5zdGFuY2VvZiBBcnJheSYmKCIiIT09ZlswXSYmIiIhPT1mWzFdP2g9ZlswXSsiIEFORCAiK2ZbMV06IiIhPT1mWzBd'@;
put 'JiYiIj09PWZbMV0/KGZbMV09Ii4iLGg9ZlswXSsiIEFORCAiK2ZbMV0pOiIiPT09ZlswXSYmIiIhPT1mWzFdPyhmWzBdPSIuIixoPWZbMF0rIiBBTkQgIitmWzFdKTooZlswXT0iLiIsZlsxXT0iLiIsaD1mWzBdKyIgQU5EICIrZlsxXSkpO2JyZWFrO2Nhc2UiSU4iOmNhc2UiTk9UIElOIjps'@;
put 'ZXQgXz1bXTtpZih0eXBlb2YgZjwidSIpZm9yKGxldCBPPTA7TzxmLmxlbmd0aDtPKyspITA9PT1mW09dLmNoZWNrZWQmJigiY2hhciI9PT1kPygic3RyaW5nIj09dHlwZW9mIGZbT10udmFsJiYoZltPXS52YWw9ZltPXS52YWwucmVwbGFjZSgiJyIsIicnIikpLF8ucHVzaCgiJyIrZltPXS52'@;
put 'YWwrIiciKSk6KG51bGw9PT1mW09dLnZhbCYmKGZbT10udmFsPSIuIiksXy5wdXNoKGZbT10udmFsKSkpO2Y9IigiK18rIikiO2JyZWFrO2Nhc2UiQ09OVEFJTlMiOmE9Ij8iO2JyZWFrO2Nhc2UiTk9UIEVRVUFMIjphPSJuZSJ9cmV0dXJuIm51bSI9PT1kJiZudWxsPT09ZiYmKGY9Ii4iKSwi'@;
put 'UGxlYXNlIHNlbGVjdCB2YWx1ZSI9PT1mJiYoZj0iIiksLTEhPT1bIj0iLCI+IiwiPCIsIjw9IiwiPj0iLCJuZSJdLmluZGV4T2YoYSkmJiJudW0iPT09ZCYmIiI9PT1mJiYoZj0iLiIpLCJCRVRXRUVOIj09PWE/e3ZhbHVlOmgsb3BlcmF0b3I6YX06e3ZhbHVlOmYsb3BlcmF0b3I6YX19d2hl'@;
put 'cmVDbGF1c2VDcmVhdG9yKGEsZixkKXtsZXQgTyxwZSxoPSIiLFg9IiIsYWU9W107Zm9yKGxldCB4ZT0wO3hlPGEucXVlcnlPYmoubGVuZ3RoO3hlKyspe2xldCBWZT0iIixaZT1hLnF1ZXJ5T2JqW3hlXTtmb3IobGV0IGx0PTA7bHQ8WmUuZWxlbWVudHMubGVuZ3RoO2x0Kyspe2xldCBndCxk'@;
put 'dD1aZS5lbGVtZW50c1tsdF07Tz1sdDxaZS5lbGVtZW50cy5sZW5ndGgtMT9aZS5jbGF1c2VMb2dpYzoiIjtmb3IobGV0IFFuPTA7UW48ZHQudmFsdWVzLmxlbmd0aDtRbisrKXtpZigic3RyaW5nIj09dHlwZW9mIGR0LnZhbHVlJiYibnVtYmVyIj09dHlwZW9mIGR0LnZhbHVlc1tRbl0uZm9y'@;
put 'bWF0dGVkKWR0LnZhbHVlPT09SlNPTi5zdHJpbmdpZnkoZHQudmFsdWVzW1FuXS5mb3JtYXR0ZWQpJiYoZ3Q9ZHQudmFsdWVzW1FuXS51bmZvcm1hdHRlZCk7ZWxzZXtsZXQgVnI9Im51bWJlciIhPXR5cGVvZiBkdC52YWx1ZXNbUW5dLmZvcm1hdHRlZCYmbnVsbCE9PWR0LnZhbHVlc1tRbl0u'@;
put 'Zm9ybWF0dGVkP2R0LnZhbHVlc1tRbl0uZm9ybWF0dGVkLnRyaW0oKTpkdC52YWx1ZXNbUW5dLmZvcm1hdHRlZDtkdC52YWx1ZT09PVZyJiYoZ3Q9ZHQudmFsdWVzW1FuXS51bmZvcm1hdHRlZCl9IlBsZWFzZSBzZWxlY3QgdmFsdWUiPT09ZHQudmFsdWUmJi0xIT09WyI9IiwiPiIsIjwiLCI8'@;
put 'PSIsIj49IiwibmUiXS5pbmRleE9mKGR0Lm9wZXJhdG9yKSYmKGd0PSIiKSwoIkNPTlRBSU5TIj09PWR0Lm9wZXJhdG9yfHwiTElLRSI9PT1kdC5vcGVyYXRvcnx8IkJFR0lOU19XSVRIIj09PWR0Lm9wZXJhdG9yKSYmKGd0PWR0LnZhbHVlKX1pZihndHx8KGd0PWR0LnZhbHVlKSxkdC52YWx1'@;
put 'ZSBpbnN0YW5jZW9mIEFycmF5JiYiQkVUV0VFTiI9PT1kdC5vcGVyYXRvcil7Z3Q9W10sZ3QucHVzaChkdC52YWx1ZVswXSksZ3QucHVzaChkdC52YWx1ZVsxXSk7Zm9yKGxldCBRbj0wO1FuPGR0LnZhbHVlcy5sZW5ndGg7UW4rKylndFswXT09PWR0LnZhbHVlc1tRbl0uZm9ybWF0dGVkJiYo'@;
put 'Z3RbMF09ZHQudmFsdWVzW1FuXS51bmZvcm1hdHRlZCksZ3RbMV09PT1kdC52YWx1ZXNbUW5dLmZvcm1hdHRlZCYmKGd0WzFdPWR0LnZhbHVlc1tRbl0udW5mb3JtYXR0ZWQpfWlmKGR0LnZhbHVlIGluc3RhbmNlb2YgQXJyYXkmJigiSU4iPT09ZHQub3BlcmF0b3J8fCJOT1QgSU4iPT09ZHQu'@;
put 'b3BlcmF0b3IpKXtndD1bXSxndD1kdC52YWx1ZTtmb3IobGV0IFFuPTA7UW48ZHQudmFsdWVzLmxlbmd0aDtRbisrKWd0W1FuXSYmZ3RbUW5dLnZhbD09PWR0LnZhbHVlc1tRbl0uZm9ybWF0dGVkJiYoZ3RbUW5dLnZhbD1kdC52YWx1ZXNbUW5dLnVuZm9ybWF0dGVkKX1sZXQgeW4sanQ9ZHQu'@;
put 'dHlwZSxybj1udWxsPT09ZHQudmFyaWFibGU/IiI6ZHQudmFyaWFibGUsWHQ9bnVsbD09PWR0Lm9wZXJhdG9yPyIiOmR0Lm9wZXJhdG9yO3luPXRoaXMuY2hlY2tPcGVyYXRvcihYdCxndCxqdCkudmFsdWUsInN0cmluZyI9PXR5cGVvZiB5biYmIigiIT09eW5bMF0mJih5bj15bi5yZXBsYWNl'@;
put 'KCInIiwiJyciKSksWHQ9dGhpcy5jaGVja09wZXJhdG9yKFh0LHluLGp0KS5vcGVyYXRvciwiY2hhciI9PT1qdCYmIklOIiE9PVh0JiYiTk9UIElOIiE9PVh0Pyh0eXBlb2YgeW4+InUiJiYoeW49IiIpLHluPSIgJyIreW4rIicgIixWZT1WZSsiICIrcm4rIiAiK1h0K3luK08pOigibnVtIj09'@;
put 'PWp0JiZ0eXBlb2YgeW4+InUiJiYoeW49Ii4iKSx5bj10eXBlb2YgeW4+InUiPyIiOiIgIit5bisiICIsVmU9VmUrIiAiK3JuKyIgIitYdCt5bitPKX1hZS5wdXNoKFZlKX1YPSIiO2ZvcihsZXQgeGU9MDt4ZTxhZS5sZW5ndGg7eGUrKylwZT14ZTxhZS5sZW5ndGgtMT9mOiIiLFg9MT09PWFl'@;
put 'Lmxlbmd0aD9hZVswXTpYKyIgKCIrYWVbeGVdKyIpICIrcGU7cmV0dXJuIGg9WC5zdWJzdHIoMSkuc2xpY2UoMCwtMSksWD0iV0hFUkUiK1grIjsiLHRoaXMucXVlcnkubmV4dCh7d2hlcmVDbGF1c2U6WCxzdHJpbmc6aCxvYmo6YSxsaWJkczpkfSkse3doZXJlQ2xhdXNlOlgsc3RyaW5nOmh9'@;
put 'fWNyZWF0ZUZpbHRlclF1ZXJ5VGFibGUoYSl7Y29uc3QgZj1bXTtyZXR1cm4gYS5maWx0ZXJHcm91cHMuZm9yRWFjaCgoZCxoKT0+e2QuZmlsdGVyQ2xhdXNlcy5mb3JFYWNoKG09PntsZXQgXz0iIjsiQkVUV0VFTiI9PT1tLm9wZXJhdG9yP189YCR7bS52YWx1ZVswXX0gQU5EICR7bS52YWx1'@;
put 'ZVsxXX1gOiJJTiI9PT1tLm9wZXJhdG9yfHwiTk9UIElOIj09PW0ub3BlcmF0b3I/KG0udmFsdWUuZm9yRWFjaChPPT57aWYoTy5jaGVja2VkKXtjb25zdCBYPU8udmFsOyJzdHJpbmciIT10eXBlb2YgWHx8KDAsdTMuaXNTcGVjaWFsTWlzc2luZykoWCkmJiJjaGFyIiE9PW0udHlwZT9fLmxl'@;
put 'bmd0aD4wP18rPWAsJHtYfWA6Xz1gKCR7WH1gOl8ubGVuZ3RoPjA/Xys9YCwnJHtYLnJlcGxhY2UoLycvZywiJyciKX0nYDpfPWAoJyR7WC5yZXBsYWNlKC8nL2csIicnIil9J2B9fSksXy5sZW5ndGg+MCYmKF8rPSIpIikpOiIiPT09bS52YWx1ZT9fPSJjaGFyIj09PW0udHlwZT8iJyAnIjoi'@;
put 'LiI6ImNoYXIiPT09bS50eXBlJiYoXz1gJyR7bS52YWx1ZS5yZXBsYWNlKC8nL2csIicnIil9J2ApLGYucHVzaCh7R1JPVVBfTE9HSUM6YS5ncm91cExvZ2ljLFNVQkdST1VQX0xPR0lDOmQuY2xhdXNlTG9naWN8fCJBTkQiLFNVQkdST1VQX0lEOmgsVkFSSUFCTEVfTk06bS52YXJpYWJsZSxP'@;
put 'UEVSQVRPUl9OTTptLm9wZXJhdG9yLFJBV19WQUxVRTpffHxtLnZhbHVlfSl9KX0pLGZ9aW5pdGlhbGl6ZUdsb2JhbEZpbHRlckNsYXVzZShhLGYpe2NvbnN0IGQ9e3F1ZXJ5T2JqOltdLGNsYXVzZUxvZ2ljOltdLGdyb3VwTG9naWM6b3MoSm4sYSkuZmlsdGVyLnF1ZXJ5WzBdLkdST1VQX0xP'@;
put 'R0lDfTtvcyhKbixhKS5maWx0ZXIuY2xhdXNlcz10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKGQpLG9zKEpuLGEpLmZpbHRlci5ncm91cExvZ2ljPW9zKEpuLGEpLmZpbHRlci5xdWVyeVswXS5HUk9VUF9MT0dJQztsZXQgaD0iIixtPXtlbGVtZW50czpbXX0sXz0wO29zKEpuLGEpLmZp'@;
put 'bHRlci5xdWVyeS5mb3JFYWNoKE89Pntjb25zdCBYPXt9O2ZvcihsZXQgYWU9MDthZTxmLmxlbmd0aDthZSsrKWlmKGZbYWVdLk5BTUU9PT1PLlZBUklBQkxFX05NKXtpZihoPU8uU1VCR1JPVVBfTE9HSUMsWC5kZHR5cGU9ZlthZV0uRERUWVBFLFgudHlwZT1mW2FlXS5UWVBFLFgub3BlcmF0'@;
put 'b3JzPSJudW0iPT09ZlthZV0uVFlQRT9Kbi5vcGVyYXRvcnMubnVtT3BlcmF0b3JzOkpuLm9wZXJhdG9ycy5jaGFyT3BlcmF0b3JzLFgubG9naWM9bnVsbCxYLm9wZXJhdG9yPU8uT1BFUkFUT1JfTk0sWC52YXJpYWJsZT1PLlZBUklBQkxFX05NLCJjaGFyIj09PWZbYWVdLlRZUEUpaWYoIklO'@;
put 'Ij09PU8uT1BFUkFUT1JfTk18fCJOT1QgSU4iPT09Ty5PUEVSQVRPUl9OTSl7Y29uc3QgcGU9W10seGU9Ty5SQVdfVkFMVUUuc2xpY2UoMSwtMSkuc3BsaXQoIicsJyIpOzE9PT14ZS5sZW5ndGg/cGUucHVzaCh7Y2hlY2tlZDohMCx2YWw6eGVbMF0uc2xpY2UoMSwtMSkucmVwbGFjZSgvJycv'@;
put 'ZywiJyIpfSk6eGUuZm9yRWFjaCgoVmUsWmUpPT57cGUucHVzaCgwPT09WmU/e2NoZWNrZWQ6ITAsdmFsOlZlLnNsaWNlKDEpLnJlcGxhY2UoLycnL2csIiciKX06WmU9PT14ZS5sZW5ndGgtMT97Y2hlY2tlZDohMCx2YWw6VmUuc2xpY2UoMCwtMSkucmVwbGFjZSgvJycvZywiJyIpfTp7Y2hl'@;
put 'Y2tlZDohMCx2YWw6VmUucmVwbGFjZSgvJycvZywiJyIpfSl9KSxYLnZhbHVlPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUocGUpfWVsc2UgWC52YWx1ZT1PLlJBV19WQUxVRS5zbGljZSgxLC0xKS5yZXBsYWNlKC8nJy9nLCInIik7ZWxzZSBpZigiSU4iPT09Ty5PUEVSQVRPUl9OTXx8'@;
put 'Ik5PVCBJTiI9PT1PLk9QRVJBVE9SX05NKXtjb25zdCBwZT1bXTtPLlJBV19WQUxVRS5zbGljZSgxLC0xKS5zcGxpdCgiLCIpLmZvckVhY2goKFZlLFplKT0+e3BlLnB1c2goe2NoZWNrZWQ6ITAsdmFsOlZlfSl9KSxYLnZhbHVlPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUocGUpfWVs'@;
put 'c2UgaWYoIkJFVFdFRU4iPT09Ty5PUEVSQVRPUl9OTSl7Y29uc3QgcGU9Ty5SQVdfVkFMVUUuc3BsaXQoIiBBTkQgIik7WC52YWx1ZT1wZX1lbHNlIFgudmFsdWU9Ty5SQVdfVkFMVUU7WC52YWx1ZXM9W10sXz09PU8uU1VCR1JPVVBfSUR8fChvcyhKbixhKS5maWx0ZXIuY2xhdXNlcy5xdWVy'@;
put 'eU9iai5wdXNoKHRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUobSkpLG9zKEpuLGEpLmZpbHRlci5jbGF1c2VzLnF1ZXJ5T2JqW19dLmNsYXVzZUxvZ2ljPWgsb3MoSm4sYSkuZmlsdGVyLmNsYXVzZXMucXVlcnlPYmpbX10uaW52YWxpZENsYXVzZT0hMSxfKyssbS5lbGVtZW50cz1bXSks'@;
put 'bS5lbGVtZW50cy5wdXNoKHRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoWCkpO2JyZWFrfX0pLG0uZWxlbWVudHMubGVuZ3RoPjAmJihvcyhKbixhKS5maWx0ZXIuY2xhdXNlcy5xdWVyeU9iai5wdXNoKHRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUobSkpLG9zKEpuLGEpLmZpbHRl'@;
put 'ci5jbGF1c2VzLnF1ZXJ5T2JqW19dLmNsYXVzZUxvZ2ljPWgsb3MoSm4sYSkuZmlsdGVyLmNsYXVzZXMucXVlcnlPYmpbX10uaW52YWxpZENsYXVzZT0hMSksb3MoSm4sYSkuZmlsdGVyLnF1ZXJ5PVtdfXJlbW92ZUNsYXVzZSgpe3ZhciBhPXRoaXM7cmV0dXJuIHlpKGZ1bmN0aW9uKigpe3Jl'@;
put 'dHVybiBhLnJlbW92ZVF1ZXJ5Lm5leHQoITApLCEwfSkoKX1zcGVjQ29udmVyc2lvbihhKXtsZXQgZj17fSxkPVtdO2lmKGQ9YS5tYXAoZnVuY3Rpb24oaCl7cmV0dXJuIGguTkFNRS50b1VwcGVyQ2FzZSgpfSksYSBpbnN0YW5jZW9mIEFycmF5KWZvcihsZXQgaD0wO2g8ZC5sZW5ndGg7aCsr'@;
put 'KWZbZFtoXV09MT09PWFbaF0uVFlQRT97Y29sVHlwZToibnVtIixjb2xMZW5ndGg6YVtoXS5MRU5HVEh9Ontjb2xUeXBlOiJzdHJpbmciLGNvbExlbmd0aDphW2hdLkxFTkdUSH07cmV0dXJuIGZ9c2V0U3VibWl0UmVhZHkoKXt0aGlzLnNldFN1Ym1pdC5uZXh0KCEwKX1wYXJzZUZvcm1hdHMo'@;
put 'YSl7Y29uc3QgZj17fSxkPWEudmFycztmb3IobGV0IGggb2YgT2JqZWN0LmtleXMoZCkpe2NvbnN0IG09ZFtoXS50eXBlLF89ZFtoXS5sZW5ndGg7Im51bSI9PT1tP2ZbaF09ImJlc3QuIjoiY2hhciI9PT1tJiYoZltoXT1gJGNoYXIke199LmApfXJldHVybiBmfX1yZXR1cm4gbC5cdTAyNzVm'@;
put 'YWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShzcihwbCksc3IoUHUpLHNyKHkxKSl9LGwuXHUwMjc1cHJvdj1ocih7dG9rZW46bCxmYWN0b3J5OmwuXHUwMjc1ZmFjfSksbH0pKCk7ZnVuY3Rpb24galVlKGwsYyl7MSZsJiYoeWUoMCwiZGl2Iiw5KSgxLCJkaXYiLDEwKSx0bigyLCJj'@;
put 'bHItaWNvbiIsMTEpLHllKDMsImgzIiwxMiksWWUoNCwiVGhlcmUgYXJlIG5vIGFwcHJvdmFscyByZW1haW5pbmciKSxDZSgpKCkoKSl9ZnVuY3Rpb24gelVlKGwsYyl7MSZsJiYoeWUoMCwiaDMiLDEzKSxZZSgxLCIgUkVWSUVXICIpLENlKCkpfWZ1bmN0aW9uIFVVZShsLGMpe2lmKDEmbCYm'@;
put 'KHllKDAsInAiLDE0KSxZZSgxLCIgWW91IGhhdmUgIikseWUoMiwic3BhbiIpLFllKDMpLENlKCksWWUoNCwiYXBwcm92YWxzIHJlbWFpbmluZyAiKSxDZSgpKSwyJmwpe2NvbnN0IGE9R2UoKTtTZSgzKSx3cigiIixhLnJlbWFpbmVkLCIgIil9fWZ1bmN0aW9uIFpVZShsLGMpezEmbCYmKHll'@;
put 'KDAsInNwYW4iLDE3KSxZZSgxLCIgTG9hZGluZy4uLiAiKSxDZSgpKX1mdW5jdGlvbiBZVWUobCxjKXsxJmwmJih5ZSgwLCJkaXYiKSgxLCJoMyIpLFllKDIsIkxvYWRpbmcgYXBwcm92YWxzIGxpc3QiKSxDZSgpKCkpfWZ1bmN0aW9uIFdVZShsLGMpe2lmKDEmbCYmKHllKDAsImRpdiIsMTUp'@;
put 'LHR0KDEsWlVlLDIsMCwic3BhbiIsMTYpLHR0KDIsWVVlLDMsMCwiZGl2Iiw4KSxDZSgpKSwyJmwpe2NvbnN0IGE9R2UoKTtTZSgxKSxSZSgibmdJZiIsIWEubG9hZGVkKSxTZSgxKSxSZSgibmdJZiIsIWEubG9hZGVkKX19ZnVuY3Rpb24gR1VlKGwsYyl7MSZsJiZ0bigwLCJjbHItaWNvbiIs'@;
put 'MzgpfWZ1bmN0aW9uICRVZShsLGMpezEmbCYmdG4oMCwiY2xyLXNwaW5uZXIiLDM5KSwyJmwmJlJlKCJjbHJTbWFsbCIsITApfWZ1bmN0aW9uIEtVZShsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImNsci1kZy1yb3ciKSgxLCJjbHItZGctY2VsbCIpLFllKDIpLENlKCkseWUoMywi'@;
put 'Y2xyLWRnLWNlbGwiKSxZZSg0KSxDZSgpLHllKDUsImNsci1kZy1jZWxsIiksWWUoNiksQ2UoKSx5ZSg3LCJjbHItZGctY2VsbCIpLFllKDgpLENlKCkseWUoOSwiY2xyLWRnLWNlbGwiKSgxMCwiZGl2IiwyNikoMTEsImEiLDI3KSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD1VdChh'@;
put 'KS5pbmRleDtyZXR1cm4gWnQoR2UoMikuZ2V0Q2xpY2tlZChoKSl9KSx0bigxMiwiY2xyLWljb24iLDI4KSx5ZSgxMywic3BhbiIsMjkpLFllKDE0LCJHbyB0byByZXZpZXcgcGFnZSBzY3JlZW4iKSxDZSgpKCkseWUoMTUsImEiLDMwKSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgZD1V'@;
put 'dChhKSxoPWQuJGltcGxpY2l0LG09ZC5pbmRleCxfPUdlKDIpO3JldHVybiBadChoLnJlamVjdExvYWRpbmc/IiI6Xy5yZWplY3RpbmcobSkpfSksdHQoMTYsR1VlLDEsMCwiY2xyLWljb24iLDMxKSx0dCgxNywkVWUsMSwxLCJjbHItc3Bpbm5lciIsMzIpLHllKDE4LCJzcGFuIiwyOSksWWUo'@;
put 'MTksIlJlamVjdCIpLENlKCkoKSx5ZSgyMCwiYSIsMzMpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPVV0KGEpLiRpbXBsaWNpdDtyZXR1cm4gWnQoR2UoMikuZ2V0VGFibGUoaC50YWJsZUlkKSl9KSx0bigyMSwiY2xyLWljb24iLDM0KSx5ZSgyMiwic3BhbiIsMjkpLFllKDIzLCJH'@;
put 'byB0byBzdGFnZWQgZGF0YSBzY3JlZW4iKSxDZSgpKCkoKSgpLHllKDI0LCJjbHItZGctY2VsbCIsMzUpKDI1LCJidXR0b24iLDM2KSxFdCgiY2xpY2siLGZ1bmN0aW9uKGQpe2NvbnN0IG09VXQoYSkuJGltcGxpY2l0O3JldHVybiBHZSgyKS5kb3dubG9hZChtLnRhYmxlSWQpLFp0KGQuc3Rv'@;
put 'cFByb3BhZ2F0aW9uKCkpfSksdG4oMjYsImNsci1pY29uIiwzNyksQ2UoKSgpKCl9aWYoMiZsKXtjb25zdCBhPWMuJGltcGxpY2l0O1NlKDIpLGFyKGEuc3VibWl0dGVyKSxTZSgyKSxhcihhLmJhc2VUYWJsZSksU2UoMiksYXIoYS5zdWJtaXR0ZWQpLFNlKDIpLGFyKGEuc3VibWl0UmVhc29u'@;
put 'KSxTZSg4KSxSZSgibmdJZiIsIWEucmVqZWN0TG9hZGluZyksU2UoMSksUmUoIm5nSWYiLGEucmVqZWN0TG9hZGluZyksU2UoOCksUmUoImlkIixhLnRhYmxlSWQpfX1mdW5jdGlvbiBxVWUobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJkaXYiKSgxLCJjbHItZGF0YWdyaWQiLDE4'@;
put 'KSgyLCJjbHItZGctY29sdW1uIiwxOSksWWUoMywiU1VCTUlUVEVSIiksQ2UoKSx5ZSg0LCJjbHItZGctY29sdW1uIiwxOSksWWUoNSwiQkFTRSBUQUJMRSIpLENlKCkseWUoNiwiY2xyLWRnLWNvbHVtbiIsMTkpLFllKDcsIlNVQk1JVFRFRCIpLENlKCkseWUoOCwiY2xyLWRnLWNvbHVtbiIs'@;
put 'MTkpLFllKDksIlNVQk1JVCBSRUFTT04iKSxDZSgpLHllKDEwLCJjbHItZGctY29sdW1uIiksWWUoMTEsIkFDVElPTiIpLENlKCkseWUoMTIsImNsci1kZy1jb2x1bW4iKSxZZSgxMywiRE9XTkxPQUQiKSxDZSgpLHR0KDE0LEtVZSwyNyw3LCJjbHItZGctcm93IiwyMCkseWUoMTUsImNsci1k'@;
put 'Zy1mb290ZXIiLDIxKSgxNiwic3BhbiIpLFllKDE3LCJpdGVtcyBwZXIgcGFnZSIpLENlKCkseWUoMTgsInNlbGVjdCIsMjIpLEV0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihkKXtyZXR1cm4gVXQoYSksWnQoR2UoKS5pdGVtc051bT1kKX0pLHllKDE5LCJvcHRpb24iLDIzKSxZZSgyMCwi'@;
put 'MyIpLENlKCkseWUoMjEsIm9wdGlvbiIsMjMpLFllKDIyLCI1IiksQ2UoKSx5ZSgyMywib3B0aW9uIiwyMyksWWUoMjQsIjEwIiksQ2UoKSx5ZSgyNSwib3B0aW9uIiwyMyksWWUoMjYsIjE1IiksQ2UoKSgpLHllKDI3LCJjbHItZGctcGFnaW5hdGlvbiIsMjQsMjUpLFllKDI5KSxDZSgpKCko'@;
put 'KSgpfWlmKDImbCl7Y29uc3QgYT1RaSgyOCksZj1HZSgpO1NlKDIpLFJlKCJjbHJEZ0ZpZWxkIiwic3VibWl0dGVyIiksU2UoMiksUmUoImNsckRnRmllbGQiLCJiYXNlVGFibGUiKSxTZSgyKSxSZSgiY2xyRGdGaWVsZCIsInN1Ym1pdHRlZCIpLFNlKDIpLFJlKCJjbHJEZ0ZpZWxkIiwic3Vi'@;
put 'bWl0UmVhc29uIiksU2UoNiksUmUoImNsckRnSXRlbXNPZiIsZi5hcHByb3ZlTGlzdCksU2UoNCksUmUoIm5nTW9kZWwiLGYuaXRlbXNOdW0pLFNlKDEpLFJlKCJuZ1ZhbHVlIiwzKSxTZSgyKSxSZSgibmdWYWx1ZSIsNSksU2UoMiksUmUoIm5nVmFsdWUiLDEwKSxTZSgyKSxSZSgibmdWYWx1'@;
put 'ZSIsMTUpLFNlKDIpLFJlKCJjbHJEZ1BhZ2VTaXplIixmLml0ZW1zTnVtKSxTZSgyKSxPMCgiICIsYS5maXJzdEl0ZW0rMSwiIC0gIixhLmxhc3RJdGVtKzEsIiBvZiAiLGEudG90YWxJdGVtcywiIGFwcHJvdmFscyAiKX19Y29uc3QgWFVlPWZ1bmN0aW9uKGwpe3JldHVybntub0JvcmRlcjps'@;
put 'fX07bGV0IGdjZT0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEsZixkLGgsbSl7dGhpcy5zYXNTdG9yZVNlcnZpY2U9YSx0aGlzLmV2ZW50U2VydmljZT1mLHRoaXMucm91dGU9ZCx0aGlzLnNhc1NlcnZpY2U9aCx0aGlzLmNkcj1tLHRoaXMubG9hZGVkPSExLHRoaXMuaXRlbXNOdW09MTB9'@;
put 'Z2V0VGFibGUoYSl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvc3RhZ2UvIithKX1nZXRDbGlja2VkKGEpe3ZvaWQgMCE9PXRoaXMuYXBwcm92ZUxpc3QmJih0aGlzLnRhYmxlSWQ9dGhpcy5hcHByb3ZlTGlzdFthXS50YWJsZUlkLHRoaXMucm91dGUubmF2aWdhdGVCeVVybCgiYXBwcm92'@;
put 'ZS9hcHByb3ZlRGV0LyIrdGhpcy5hcHByb3ZlTGlzdFthXS50YWJsZUlkKSl9cmVqZWN0aW5nKGEpe3ZhciBmPXRoaXM7cmV0dXJuIHlpKGZ1bmN0aW9uKigpe3ZvaWQgMCE9PWYuYXBwcm92ZUxpc3QmJihmLnRhYmxlSWQ9Zi5hcHByb3ZlTGlzdFthXS50YWJsZUlkKTtsZXQgZD17U1RQX0FD'@;
put 'VElPTjoiUkVKRUNUX1RBQkxFIixUQUJMRTpmLnRhYmxlSWQsU1RQX1JFQVNPTjoicXVpY2sgcmVqZWN0aW9uIn07dHJ5eyhmLmFwcHJvdmVMaXN0fHxbXSlbYV0ucmVqZWN0TG9hZGluZz0hMCwoeWllbGQgZi5zYXNTdG9yZVNlcnZpY2UucmVqZWN0aW5nKGQsIkJyb3dzZXJQYXJhbXMiLCJh'@;
put 'cHByb3ZlcnMvcmVqZWN0aW9uIikpLmZyb21zYXNbMF0uUkVTUE9OU0UuaW5jbHVkZXMoIlNVQ0NFU1MiKSYmKChmLmFwcHJvdmVMaXN0fHxbXSlbYV0ucmVqZWN0TG9hZGluZz0hMSxmLmFwcHJvdmVMaXN0Py5zcGxpY2UoYSwxKSxmLnJlbWFpbmVkLS0sZi5jZHIuZGV0ZWN0Q2hhbmdlcygp'@;
put 'KX1jYXRjaChoKXtmLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoImFwcHJvdmVycy9yZWplY3Rpb24iLGgpfX0pKCl9bmdPbkluaXQoKXt2YXIgYT10aGlzO3JldHVybiB5aShmdW5jdGlvbiooKXthLmZldGNoQXBwcm92YWxzKCl9KSgpfWZldGNoQXBwcm92YWxzKCl7dmFyIGE9'@;
put 'dGhpcztyZXR1cm4geWkoZnVuY3Rpb24qKCl7YS5pdGVtc051bT0xMDtsZXQgZj17U1RQX0FDVElPTjoiT1BFTl9BUFBST1ZBTFMifTt0cnl7bGV0IGQ9eWllbGQgYS5zYXNTdG9yZVNlcnZpY2UuZ2V0QXBwcm92YWxzKGYsIkJyb3dzZXJQYXJhbXMiLCJhcHByb3ZlcnMvZ2V0YXBwcm92YWxz'@;
put 'Iik7YS5yZW1haW5lZD1kLmZyb21zYXMubGVuZ3RoO2xldCBoPWQuZnJvbXNhcy5tYXAoZnVuY3Rpb24obSl7cmV0dXJue3RhYmxlSWQ6bS5UQUJMRV9JRCxzdWJtaXR0ZXI6bS5TVUJNSVRURURfQllfTk0sc3VibWl0dGVkOm0uU1VCTUlUVEVEX09OX0RUVE0sYmFzZVRhYmxlOm0uQkFTRV9U'@;
put 'QUJMRSxzdWJtaXRSZWFzb246bS5TVUJNSVRURURfUkVBU09OX1RYVH19KTthLmFwcHJvdmVMaXN0PWgsYS5sb2FkZWQ9ITB9Y2F0Y2goZCl7YS5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJhcHByb3ZlcnMvZ2V0YXBwcm92YWxzIixkKX19KSgpfWRvd25sb2FkKGEpe2xldCBm'@;
put 'PXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLGQ9Zi5zZXJ2ZXJVcmwsaD1mLmFwcExvYyxtPXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7d2luZG93Lm9wZW4oZCttKyIvP19wcm9ncmFtPSIraCsiL3NlcnZpY2VzL2F1ZGl0b3JzL2dldGF1ZGl0ZmlsZSZ0YWJs'@;
put 'ZT0iK2EpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChMZCkscnQoUnMpLHJ0KExhKSxydChwbCkscnQoVWwpKX0sbC5cdTAyNzVjbXA9a3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siYXBwLWFwcHJvdmUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50'@;
put 'LWNvbnRhaW5lciJdLGRlY2xzOjksdmFyczo4LGNvbnN0czpbWzEsImNvbnRlbnQtYXJlYSJdLFsxLCJjYXJkIl0sWyJjbGFzcyIsImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsImNhcmQtaGVhZGVyIiwzLCJuZ0NsYXNzIl0sWyJjbGFzcyIsImNlbnRlciBj'@;
put 'bHItY29sLW1kLTEyIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIGZvbnQtd2VpZ2h0LTcwMCBjb2xvci1kYXJrLWdyYXkiLDQsIm5nSWYiXSxbImNsYXNzIiwiYXBwcm92YWxzLWxpc3Qtd3JhcHBlciIsNCwibmdJZiJdLFsibmctaWYiLCJsb2FkZWQiLDEs'@;
put 'ImNsci1jb2wtbWQtMTIiXSxbNCwibmdJZiJdLFsxLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsImNhcmQtYmxvY2siLCJub2FwcHJvdmFscy1pbmZvLXdyYXBwZXIiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsInNpemUiLCI2MCIsMSwiaXMtaW5mbyIsImlj'@;
put 'b24tZGMtZmlsbCJdLFsxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiXSxbMSwiY2VudGVyIiwiY2xyLWNvbC1tZC0xMiIsInRleHQtY2VudGVyIl0sWzEsInRleHQtY2VudGVyIiwiZm9udC13ZWlnaHQtNzAwIiwiY29sb3ItZGFyay1ncmF5Il0sWzEsImFwcHJvdmFscy1saXN0LXdyYXBw'@;
put 'ZXIiXSxbImNsYXNzIiwic3Bpbm5lciIsNCwibmdJZiJdLFsxLCJzcGlubmVyIl0sWzEsImRhdGFncmlkLWNvbXBhY3QiLCJkYXRhZ3JpZC1jdXN0b20tZm9vdGVyIl0sWzMsImNsckRnRmllbGQiXSxbNCwiY2xyRGdJdGVtcyIsImNsckRnSXRlbXNPZiJdLFsxLCJkLWZsZXgiLCJqdXN0aWZ5'@;
put 'LWNvbnRlbnQtc3RhcnQiXSxbMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXSxbMywibmdWYWx1ZSJdLFsxLCJjZW50ZXIiLDMsImNsckRnUGFnZVNpemUiXSxbInBhZ2luYXRpb24iLCIiXSxbInJvbGUiLCJ0b29sdGlwIiwxLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtYXJvdW5kIl0s'@;
put 'WzEsImNvbHVtbi1jZW50ZXIiLCJsaW5rcyIsInRvb2x0aXAiLCJ0b29sdGlwLW1kIiwidG9vbHRpcC1ib3R0b20tbGVmdCIsImNvbG9yLWdyZWVuIiwzLCJjbGljayJdLFsic2hhcGUiLCJjaGVjayIsInNpemUiLCIyNCJdLFsxLCJ0b29sdGlwLWNvbnRlbnQiXSxbMSwiY29sdW1uLWNlbnRl'@;
put 'ciIsImxpbmtzIiwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwiY29sb3ItcmVkIiwzLCJjbGljayJdLFsic2hhcGUiLCJiYW4iLCJzaXplIiwiMjIiLDQsIm5nSWYiXSxbMywiY2xyU21hbGwiLDQsIm5nSWYiXSxbMSwiY29sdW1uLWNlbnRlciIsImxpbmtz'@;
put 'IiwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwiY29sb3ItYmx1ZSIsMywiY2xpY2siXSxbInNoYXBlIiwiY29kZSIsInNpemUiLCIyOCJdLFsxLCJwLTAiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsImJ0biIsImJ0bi1zdWNjZXNz'@;
put 'IiwzLCJpZCIsImNsaWNrIl0sWyJzaGFwZSIsImRvd25sb2FkIl0sWyJzaGFwZSIsImJhbiIsInNpemUiLCIyMiJdLFszLCJjbHJTbWFsbCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGYpezEmYSYmKHllKDAsImRpdiIsMCkoMSwiZGl2IiwxKSx0dCgyLGpVZSw1LDAsImRpdiIsMikseWUoMywi'@;
put 'ZGl2IiwzKSx0dCg0LHpVZSwyLDAsImgzIiw0KSx0dCg1LFVVZSw1LDEsInAiLDUpLENlKCksdHQoNixXVWUsMywyLCJkaXYiLDYpLHllKDcsImRpdiIsNyksdHQoOCxxVWUsMzAsMTQsImRpdiIsOCksQ2UoKSgpKCkpLDImYSYmKFNlKDIpLFJlKCJuZ0lmIiwwPT09Zi5yZW1haW5lZCksU2Uo'@;
put 'MSksUmUoIm5nQ2xhc3MiLF9oKDYsWFVlLCFmLmxvYWRlZCkpLFNlKDEpLFJlKCJuZ0lmIixmLmxvYWRlZCYmMCE9PWYucmVtYWluZWQpLFNlKDEpLFJlKCJuZ0lmIixmLmxvYWRlZCYmMCE9PWYucmVtYWluZWQpLFNlKDEpLFJlKCJuZ0lmIiwhZi5sb2FkZWQpLFNlKDIpLFJlKCJuZ0lmIixm'@;
put 'LmFwcHJvdmVMaXN0JiYwIT09Zi5yZW1haW5lZCkpfSxkZXBlbmRlbmNpZXM6W3l1LCRpLFMxLE0xLEwwLFdhLHphLFM3LHc0LEpnLGhJLF83LHBJLFFnLGU1LHQ1LGs3LG41LHY3LGI0LGI3LFJsLFJoXSxzdHlsZXM6WyIuY29sdW1uLWNlbnRlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxh'@;
put 'eTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcn0uZGF0YWdyaWRbX25nY29udGVudC0lQ09NUCVdICAgLmRhdGFncmlkLWNvbHVtbltfbmdjb250ZW50LSVDT01QJV0gICAuZGF0YWdyaWQtY29sdW1uLXRpdGxlW19u'@;
put 'Z2NvbnRlbnQtJUNPTVAlXXtvdXRsaW5lOm5vbmUhaW1wb3J0YW50fS5saW5rc1tfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NzAwO2N1cnNvcjpwb2ludGVyfS50b29sdGlwLnRvb2x0aXAtYm90dG9tLWxlZnRbX25nY29udGVudC0lQ09NUCVdID4gLnRvb2x0aXAtY29udGVudFtf'@;
put 'bmdjb250ZW50LSVDT01QJV0sIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC1ib3R0b20tbGVmdFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojMzE0MzUxIWltcG9ydGFudH0udG9vbHRpcC50b29sdGlwLWJvdHRvbS1sZWZ0W19u'@;
put 'Z2NvbnRlbnQtJUNPTVAlXSA+IC50b29sdGlwLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdOmJlZm9yZSwgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWJvdHRvbS1sZWZ0W19uZ2NvbnRlbnQtJUNPTVAlXTpiZWZvcmV7Ym9yZGVyLXJp'@;
put 'Z2h0Oi4yNXJlbSBzb2xpZCAjMzE0MzUxO2JvcmRlci1ib3R0b206LjIwODMzcmVtIHNvbGlkICMzMTQzNTF9Lm5vQm9yZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCB0cmFuc3BhcmVudCFpbXBvcnRhbnR9LmFwcHJvdmFscy1saXN0LXdyYXBwZXJbX25n'@;
put 'Y29udGVudC0lQ09NUCVde2hlaWdodDo3MHZoO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXJ9Lm5vYXBwcm92YWxzLWluZm8td3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1'@;
put 'c3RpZnktY29udGVudDpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6Y2FsYygxMDB2aCAtIDIwMHB4KX0iXX0pLGx9KSgpO2Z1bmN0aW9uIEpVZShsLGMpe2lmKDEmbCYmKHllKDAsInRkIiwxOSksWWUoMSksQ2UoKSksMiZsKXtjb25zdCBh'@;
put 'PUdlKCkuJGltcGxpY2l0LGY9R2UoKTtSZSgicm91dGVyTGluayIsIi9zdGFnZS8iK2YuanNQYXJhbXNbYV0pLFNlKDEpLHdyKCIgIixmLmpzUGFyYW1zW2FdLCIgIil9fWZ1bmN0aW9uIFFVZShsLGMpe2lmKDEmbCYmKHllKDAsInRkIiw0KSxZZSgxKSxDZSgpKSwyJmwpe2NvbnN0IGE9R2Uo'@;
put 'KS4kaW1wbGljaXQsZj1HZSgpO1NlKDEpLHdyKCIgIixmLmpzUGFyYW1zW2FdLCIgIil9fWZ1bmN0aW9uIGVaZShsLGMpe2lmKDEmbCYmKHllKDAsInRyIikoMSwidGQiLDQpLFllKDIpLENlKCksdHQoMyxKVWUsMiwyLCJ0ZCIsMTcpLHR0KDQsUVVlLDIsMSwidGQiLDE4KSxDZSgpKSwyJmwp'@;
put 'e2NvbnN0IGE9Yy4kaW1wbGljaXQ7U2UoMiksYXIoYSksU2UoMSksUmUoIm5nSWYiLGEuaW5jbHVkZXMoIlRBQkxFX0lEIikpLFNlKDEpLFJlKCJuZ0lmIiwhYS5pbmNsdWRlcygiVEFCTEVfSUQiKSl9fWZ1bmN0aW9uIHRaZShsLGMpe2lmKDEmbCYmKHllKDAsInRyIikoMSwidGQiLDQpLFll'@;
put 'KDIpLENlKCkseWUoMywidGQiLDQpLFllKDQpLENlKCkoKSksMiZsKXtjb25zdCBhPWMuJGltcGxpY2l0LGY9R2UoMyk7U2UoMiksYXIoYSksU2UoMiksYXIoZi5zdWJtaXREZXRhaWxzW2FdKX19ZnVuY3Rpb24gblplKGwsYyl7aWYoMSZsJiYoeWUoMCwiY2xyLXRhYi1jb250ZW50IikoMSwi'@;
put 'ZGl2IiwyMikoMiwidGFibGUiLDMpKDMsInRoZWFkIikoNCwidHIiKSg1LCJ0aCIsNCksWWUoNiwiTmFtZSIpLENlKCkseWUoNywidGgiLDQpLFllKDgsIlZhbHVlIiksQ2UoKSgpKCkseWUoOSwidGJvZHkiKSx0dCgxMCx0WmUsNSwyLCJ0ciIsNSksQ2UoKSgpKCkoKSksMiZsKXtjb25zdCBh'@;
put 'PUdlKDIpO1NlKDEwKSxSZSgibmdGb3JPZiIsYS5zdWJtaXRBcnIpfX1mdW5jdGlvbiByWmUobCxjKXtpZigxJmwmJih5ZSgwLCJ0ciIpKDEsInRkIiw0KSxZZSgyKSxDZSgpLHllKDMsInRkIiw0KSxZZSg0KSxDZSgpKCkpLDImbCl7Y29uc3QgYT1jLiRpbXBsaWNpdCxmPUdlKDIpO1NlKDIp'@;
put 'LGFyKGEpLFNlKDIpLGFyKGYuanNQYXJhbXNbYV0pfX1mdW5jdGlvbiBpWmUobCxjKXtpZigxJmwmJih5ZSgwLCJjbHItdGFicyIpKDEsImNsci10YWIiKSgyLCJidXR0b24iLDIwKSxZZSgzLCJTdWJtaXR0ZWQgVGFibGUgRGV0YWlscyIpLENlKCksdHQoNCxuWmUsMTEsMSwiY2xyLXRhYi1j'@;
put 'b250ZW50IiwyMSksQ2UoKSx5ZSg1LCJjbHItdGFiIikoNiwiYnV0dG9uIiwyMCksWWUoNywiQmFzZSBUYWJsZSBEZXRhaWxzIiksQ2UoKSx5ZSg4LCJjbHItdGFiLWNvbnRlbnQiKSg5LCJkaXYiLDIyKSgxMCwidGFibGUiLDMpKDExLCJ0aGVhZCIpKDEyLCJ0ciIpKDEzLCJ0aCIsNCksWWUo'@;
put 'MTQsIk5hbWUiKSxDZSgpLHllKDE1LCJ0aCIsNCksWWUoMTYsIlZhbHVlIiksQ2UoKSgpKCkseWUoMTcsInRib2R5IiksdHQoMTgsclplLDUsMiwidHIiLDUpLENlKCkoKSgpKCkoKSgpKSwyJmwpe2NvbnN0IGE9R2UoKTtTZSg0KSxSZSgiY2xySWZBY3RpdmUiLCEwKSxTZSgxNCksUmUoIm5n'@;
put 'Rm9yT2YiLGEua2V5c0FycmF5KX19ZnVuY3Rpb24gb1plKGwsYyl7MSZsJiYoeWUoMCwicCIsNzQpLFllKDEsIiBUaGVyZSBhcmUgbm8gZGV0YWlscyB0byBzaG93ICIpLENlKCkpfWZ1bmN0aW9uIGFaZShsLGMpe2lmKDEmbCYmKFdyKDApLHllKDEsImRpdiIsNzUpKDIsInNwYW4iKSxZZSgz'@;
put 'LCJUYWJsZSBJZDoiKSxDZSgpLHllKDQsInN0cm9uZyIsNzYpLFllKDUpLENlKCkoKSx5ZSg2LCJkaXYiKSg3LCJzcGFuIiksWWUoOCwiU3VibWl0dGVyOiIpLENlKCkseWUoOSwic3BhbiIsNzcpLFllKDEwKSxDZSgpKCkseWUoMTEsImRpdiIpKDEyLCJzcGFuIiksWWUoMTMsIlN1Ym1pdHRl'@;
put 'ZCBvbjoiKSxDZSgpLHllKDE0LCJzcGFuIiw3NyksWWUoMTUpLENlKCkoKSx5ZSgxNiwiZGl2IikoMTcsInNwYW4iKSxZZSgxOCwiU3VibWl0dGVkIFJlYXNvbjoiKSxDZSgpLHllKDE5LCJzcGFuIiw3NyksWWUoMjApLENlKCkoKSxHcigpKSwyJmwpe2NvbnN0IGE9R2UoNSk7U2UoNCksUmUo'@;
put 'InJvdXRlckxpbmsiLCIvc3RhZ2UvIisobnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5UQUJMRV9JRCkpLFNlKDEpLHdyKCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlRBQkxFX0lELCIgIiksU2UoNSksd3IoIiAiLG51bGw9PWEu'@;
put 'dGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuU1VCTUlUVEVEX0JZX05NLCIgIiksU2UoNSksd3IoIiAiLG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuU1VCTUlUVEVEX09OX0RUVE0sIiAiKSxTZSg1KSx3cigiICIsbnVsbD09YS50YWJsZURldGFpbHM/'@;
put 'bnVsbDphLnRhYmxlRGV0YWlscy5TVUJNSVRURURfUkVBU09OX1RYVCwiICIpfX1mdW5jdGlvbiBsWmUobCxjKXsxJmwmJih5ZSgwLCJzcGFuIiw3OCksdG4oMSwiY2xyLWljb24iLDc5KSxZZSgyLCIgT25seSB0aGUgZmlyc3QgMTAwIGluc2VydHMsIHVwZGF0ZXMgb3IgZGVsZXRlcyBhcmUg'@;
put 'ZGlzcGxheWVkICIpLENlKCkpfWZ1bmN0aW9uIHNaZShsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImRpdiIsNDkpKDEsImRpdiIsNTApKDIsImRpdiIsNTEpLHR0KDMsb1plLDIsMCwicCIsNDUpLHR0KDQsYVplLDIxLDUsIm5nLWNvbnRhaW5lciIsOCksQ2UoKSx5ZSg1LCJkaXYi'@;
put 'LDUyKSg2LCJkaXYiLDUzKSg3LCJkaXYiLDU0KSg4LCJkaXYiLDU1KSg5LCJidXR0b24iLDU2KSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7VXQoYSk7Y29uc3QgZD1HZSg0KTtyZXR1cm4gWnQoZC5nb1RvQmFzZShudWxsPT1kLmpzUGFyYW1zP251bGw6ZC5qc1BhcmFtcy5UQUJMRV9OTSkpfSks'@;
put 'WWUoMTAsIiBHbyB0byBiYXNlIHRhYmxlIHNjcmVlbiAiKSxDZSgpLHllKDExLCJidXR0b24iLDU3KSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7VXQoYSk7Y29uc3QgZD1HZSg0KTtyZXR1cm4gWnQoZC5nZXRUYWJsZShkLnRhYmxlSWQpKX0pLFllKDEyLCIgR28gdG8gZWRpdGVkIHNjcmVlbiAi'@;
put 'KSxDZSgpLHllKDEzLCJidXR0b24iLDU4KSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7VXQoYSk7Y29uc3QgZD1HZSg0KTtyZXR1cm4gWnQoZC5nb0JhY2sobnVsbD09ZC5qc1BhcmFtcz9udWxsOmQuanNQYXJhbXMuVEFCTEVfTk0pKX0pLFllKDE0LCIgR28gYmFjayB0byBlZGl0b3IgIiksQ2Uo'@;
put 'KSgpKCkoKSx5ZSgxNSwiZGl2Iiw1OSkoMTYsImJ1dHRvbiIsNjApLEV0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gVXQoYSksWnQoR2UoNCkuYXBwcm92ZVRhYmxlKCkpfSksWWUoMTcsIiBBQ0NFUFQgIiksQ2UoKSx5ZSgxOCwiYnV0dG9uIiw2MSksRXQoImNsaWNrIixmdW5jdGlvbigp'@;
put 'e3JldHVybiBVdChhKSxadChHZSg0KS5yZWplY3RPcGVuPSEwKX0pLFllKDE5LCIgUkVKRUNUICIpLENlKCkseWUoMjAsImNsci10b2dnbGUtY29udGFpbmVyIiw2MikoMjEsImNsci10b2dnbGUtd3JhcHBlciIpKDIyLCJpbnB1dCIsNjMpLEV0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihk'@;
put 'KXtyZXR1cm4gVXQoYSksWnQoR2UoNCkuZm9ybWF0dGVkVmFsdWVzPWQpfSkoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gVXQoYSksWnQoR2UoNCkuZm9ybWF0dGluZ0NoYW5nZWQoKSl9KSxDZSgpLHllKDIzLCJsYWJlbCIsNjQpLFllKDI0KSxDZSgpKCkoKSgpLHllKDI1LCJkaXYiLDY1'@;
put 'KSx0dCgyNixsWmUsMywwLCJzcGFuIiw2NikseWUoMjcsImRpdiIsMzEpKDI4LCJkaXYiLDY3KSgyOSwic3BhbiIsNjgpLFllKDMwLCIgQ2hhbmdlZCBSb3dzICIpLHllKDMxLCJzcGFuIiw2OSksWWUoMzIpLENlKCkoKSx5ZSgzMywic3BhbiIsNzApLFllKDM0LCIgQWRkZWQgUm93cyAiKSx5'@;
put 'ZSgzNSwic3BhbiIsNzEpLFllKDM2KSxDZSgpKCkseWUoMzcsInNwYW4iLDcyKSxZZSgzOCwiIERlbGV0ZWQgUm93cyAiKSx5ZSgzOSwic3BhbiIsNzMpLFllKDQwKSxDZSgpKCkoKSgpKCkoKSgpKCl9aWYoMiZsKXtjb25zdCBhPUdlKDQpO1NlKDMpLFJlKCJuZ0lmIiwhYS50YWJsZURldGFp'@;
put 'bHMpLFNlKDEpLFJlKCJuZ0lmIixhLnRhYmxlRGV0YWlscyksU2UoMTIpLFJlKCJjbHJMb2FkaW5nIixhLmFjY2VwdExvYWRpbmcpKCJkaXNhYmxlZCIsIWEubG9hZGluZ1RhYmxlfHwiTk8iPT09KG51bGw9PWEucGFyYW1zP251bGw6YS5wYXJhbXMuSVNBUFBST1ZFUil8fGEubm9DaGFuZ2Vz'@;
put 'KSxTZSgyKSxSZSgiZGlzYWJsZWQiLCFhLmxvYWRpbmdUYWJsZXx8Ik5PIj09PShudWxsPT1hLnBhcmFtcz9udWxsOmEucGFyYW1zLklTQVBQUk9WRVIpfHxhLm5vQ2hhbmdlcyksU2UoNCksUmUoIm5nTW9kZWwiLGEuZm9ybWF0dGVkVmFsdWVzKSxTZSgyKSxhcihhLmZvcm1hdHRlZFZhbHVl'@;
put 'cz8iRm9ybWF0dGVkIjoiVW5mb3JtYXR0ZWQiKSxTZSgyKSxSZSgibmdJZiIsYS5kaWZmc0xpbWl0KSxTZSg2KSxhcihhLmxlbnMudXBkYXRlZCksU2UoNCksYXIoYS5sZW5zLm5ldyksU2UoNCksYXIoYS5sZW5zLmRlbGV0ZWQpfX1mdW5jdGlvbiB1WmUobCxjKXsxJmwmJih5ZSgwLCJkaXYi'@;
put 'KSgxLCJoMyIpLFllKDIsIkxvYWRpbmcgdGFibGUiKSxDZSgpKCkpfWZ1bmN0aW9uIGNaZShsLGMpe2lmKDEmbCYmKHllKDAsImRpdiIsODApKDEsInNwYW4iLDgxKSxZZSgyLCIgTG9hZGluZy4uLiAiKSxDZSgpLHR0KDMsdVplLDMsMCwiZGl2Iiw4KSxDZSgpKSwyJmwpe2NvbnN0IGE9R2Uo'@;
put 'NCk7U2UoMyksUmUoIm5nSWYiLCFhLmxvYWRpbmdUYWJsZSl9fWZ1bmN0aW9uIGZaZShsLGMpezEmbCYmKHllKDAsInAiLDc0KSxZZSgxLCIgVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gc2hvdyAiKSxDZSgpKX1mdW5jdGlvbiBkWmUobCxjKXtpZigxJmwmJih5ZSgwLCJ0aCIsNCksWWUoMSks'@;
put 'Q2UoKSksMiZsKXtjb25zdCBhPWMuJGltcGxpY2l0O1NlKDEpLGFyKGEpfX1mdW5jdGlvbiBoWmUobCxjKXtpZigxJmwmJih5ZSgwLCJzcGFuIiw4NiksWWUoMSksQ2UoKSksMiZsKXtjb25zdCBhPUdlKCkuaW5kZXgsZj1HZSgyKS5pbmRleCxkPUdlKDQpO1NlKDEpLHdyKCJPcmlnaW5hbCB2'@;
put 'YWx1ZSBpczogIixkLmFyck9mQ2hhbmdlc1tmXVthXSwiIil9fWNvbnN0IHZjZT1mdW5jdGlvbihsKXtyZXR1cm57ImNoIHRvb2x0aXAgdG9vbHRpcC1tZCB0b29sdGlwLXRvcC1yaWdodCI6bH19O2Z1bmN0aW9uIHBaZShsLGMpe2lmKDEmbCYmKHllKDAsInRkIiw4NCksWWUoMSksdHQoMixo'@;
put 'WmUsMiwxLCJzcGFuIiw4NSksQ2UoKSksMiZsKXtjb25zdCBhPWMuJGltcGxpY2l0LGY9Yy5pbmRleCxkPUdlKDIpLmluZGV4LGg9R2UoNCk7UmUoIm5nQ2xhc3MiLF9oKDMsdmNlLDE9PWguYXJyQ2hhbmdlZFtkXVtmXSYmInVwZGF0ZWQiPT1oLmNoQXJyW2RdKSksU2UoMSksd3IoIiAiLGgu'@;
put 'ZGlmZlRhYmxlLmRhdGFbZF1bYV0sIiAiKSxTZSgxKSxSZSgibmdJZiIsMT09aC5hcnJDaGFuZ2VkW2RdW2ZdJiYidXBkYXRlZCI9PWguY2hBcnJbZF0pfX1mdW5jdGlvbiBtWmUobCxjKXtpZigxJmwmJihXcigwKSx0dCgxLHBaZSwzLDUsInRkIiw4MyksR3IoKSksMiZsKXtjb25zdCBhPUdl'@;
put 'KCkuaW5kZXgsZj1HZSg0KTtTZSgxKSxSZSgibmdGb3JPZiIsZi5yb3dLZXlzW2FdKX19ZnVuY3Rpb24gZ1plKGwsYyl7aWYoMSZsJiYoeWUoMCwidGQiLDQpLFllKDEpLENlKCkpLDImbCl7Y29uc3QgYT1jLiRpbXBsaWNpdCxmPUdlKDIpLmluZGV4LGQ9R2UoNCk7U2UoMSksd3IoIiAiLGQu'@;
put 'ZGlmZlRhYmxlLmRhdGFbZl1bYV0sIiAiKX19ZnVuY3Rpb24gdlplKGwsYyl7aWYoMSZsJiYoV3IoMCksdHQoMSxnWmUsMiwxLCJ0ZCIsNDcpLEdyKCkpLDImbCl7Y29uc3QgYT1HZSgpLmluZGV4LGY9R2UoNCk7U2UoMSksUmUoIm5nRm9yT2YiLGYucm93S2V5c1thXSl9fWNvbnN0IHljZT1m'@;
put 'dW5jdGlvbihsLGMsYSl7cmV0dXJue2FkZGVkUm93OmwsZGVsZXRlZFJvdzpjLHVwZGF0ZWRSb3c6YX19O2Z1bmN0aW9uIHlaZShsLGMpe2lmKDEmbCYmKHllKDAsInRyIiw4MiksdHQoMSxtWmUsMiwxLCJuZy1jb250YWluZXIiLDgpLHR0KDIsdlplLDIsMSwibmctY29udGFpbmVyIiw4KSxD'@;
put 'ZSgpKSwyJmwpe2NvbnN0IGE9Yy5pbmRleCxmPUdlKDQpO1JlKCJuZ0NsYXNzIixuQygzLHljZSwiYWRkZWQiPT1mLmNoQXJyW2FdLCJkZWxldGVkIj09Zi5jaEFyclthXSwidXBkYXRlZCI9PWYuY2hBcnJbYV0pKSxTZSgxKSxSZSgibmdJZiIsInVwZGF0ZWQiPT09Zi5jaEFyclthXSksU2Uo'@;
put 'MSksUmUoIm5nSWYiLCJ1cGRhdGVkIiE9PWYuY2hBcnJbYV0pfX1mdW5jdGlvbiBiWmUobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJkaXYiLDI5KSgxLCJkaXYiLDMwKSgyLCJkaXYiLDMxKSgzLCJkaXYiLDMyKSg0LCJzcGFuIiwzMyksRXQoImNsaWNrIixmdW5jdGlvbigpe3Jl'@;
put 'dHVybiBVdChhKSxadChHZSgzKS5nb1RvQXBwcm92YWxzTGlzdCgpKX0pLHRuKDUsImNsci1pY29uIiwzNCksWWUoNiwiQmFjayB0byBhcHByb3ZhbHMgbGlzdCAiKSxDZSgpKCkseWUoNywiZGl2IiwzNSkoOCwiaDMiLDM2KSxZZSg5KSxDZSgpKCkseWUoMTAsImRpdiIsMzcpKDExLCJhIiwz'@;
put 'OCksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBVdChhKSxadChHZSgzKS5nZXREZXRhaWxzKCkpfSksdG4oMTIsImNsci1pY29uIiwzOSksQ2UoKSgpKCkseWUoMTMsInAiLDQwKSxZZSgxNCksQ2UoKSgpLHllKDE1LCJkaXYiLDQxKSx0dCgxNixzWmUsNDEsMTEsImRpdiIsNDIpLENl'@;
put 'KCksdHQoMTcsY1plLDQsMSwiZGl2Iiw0MykseWUoMTgsImRpdiIsNDQpLHR0KDE5LGZaZSwyLDAsInAiLDQ1KSx5ZSgyMCwidGFibGUiLDMpKDIxLCJ0aGVhZCIpKDIyLCJ0ciIsNDYpLHR0KDIzLGRaZSwyLDEsInRoIiw0NyksQ2UoKSgpLHllKDI0LCJ0Ym9keSIpLHR0KDI1LHlaZSwzLDcs'@;
put 'InRyIiw0OCksQ2UoKSgpKCkoKX1pZigyJmwpe2NvbnN0IGE9R2UoMyk7U2UoOSksd3IoIiAiLG51bGw9PWEuanNQYXJhbXM/bnVsbDphLmpzUGFyYW1zLlRBQkxFX05NLCIgIiksU2UoNSksd3IoIiAiLG51bGw9PWEuanNQYXJhbXM/bnVsbDphLmpzUGFyYW1zLlRBQkxFX0RFU0MsIiAiKSxT'@;
put 'ZSgyKSxSZSgibmdJZiIsYS5sb2FkZWQpLFNlKDEpLFJlKCJuZ0lmIiwhYS5sb2FkaW5nVGFibGUpLFNlKDIpLFJlKCJuZ0lmIixhLmxvYWRpbmdUYWJsZSYmYS5ub0NoYW5nZXMpLFNlKDQpLFJlKCJuZ0Zvck9mIixhLnJvd0hlYWRlciksU2UoMiksUmUoIm5nRm9yT2YiLGEucm93S2V5cyl9'@;
put 'fWZ1bmN0aW9uIF9aZShsLGMpe2lmKDEmbCYmKHllKDAsImRpdiIsMjcpLHR0KDEsYlplLDI2LDcsImRpdiIsMjgpLENlKCkpLDImbCl7Y29uc3QgYT1HZSgyKTtTZSgxKSxSZSgibmdJZiIsYS5sb2FkZWQpfX1mdW5jdGlvbiB3WmUobCxjKXsxJmwmJih5ZSgwLCJzcGFuIiw4MSksWWUoMSwi'@;
put 'IExvYWRpbmcuLi4gIiksQ2UoKSl9ZnVuY3Rpb24gQ1plKGwsYyl7MSZsJiYoeWUoMCwiZGl2IikoMSwiaDMiKSxZZSgyLCJMb2FkaW5nIHByZXZpZXciKSxDZSgpKCkpfWZ1bmN0aW9uIFNaZShsLGMpe2lmKDEmbCYmKHllKDAsImRpdiIsODcpLHR0KDEsd1plLDIsMCwic3BhbiIsODgpLHR0'@;
put 'KDIsQ1plLDMsMCwiZGl2Iiw4KSxDZSgpKSwyJmwpe2NvbnN0IGE9R2UoMik7U2UoMSksUmUoIm5nSWYiLCFhLmxvYWRlZCksU2UoMSksUmUoIm5nSWYiLCFhLmxvYWRlZCl9fWZ1bmN0aW9uIE1aZShsLGMpe2lmKDEmbCYmKHllKDAsImRpdiIsMjMpLHR0KDEsX1plLDIsMSwiZGl2IiwyNCks'@;
put 'eWUoMiwiZGl2IiwyNSksdHQoMyxTWmUsMywyLCJkaXYiLDI2KSxDZSgpKCkpLDImbCl7Y29uc3QgYT1HZSgpO1NlKDEpLFJlKCJuZ0lmIixhLmxvYWRlZCksU2UoMiksUmUoIm5nSWYiLCFhLmxvYWRlZCl9fWZ1bmN0aW9uIGtaZShsLGMpezEmbCYmKHllKDAsInNwYW4iLDc4KSx0bigxLCJj'@;
put 'bHItaWNvbiIsNzkpLFllKDIsIiBPbmx5IHRoZSBmaXJzdCAxMDAgaW5zZXJ0cywgdXBkYXRlcyBvciBkZWxldGVzIGFyZSBkaXNwbGF5ZWQgIiksQ2UoKSl9ZnVuY3Rpb24gRVplKGwsYyl7MSZsJiZ0bigwLCJkaXYiLDQ5KX1mdW5jdGlvbiB4WmUobCxjKXsxJmwmJih5ZSgwLCJkaXYiKSgx'@;
put 'LCJoMyIpLFllKDIsIkxvYWRpbmcgdGFibGUiKSxDZSgpKCkpfWZ1bmN0aW9uIEFaZShsLGMpe2lmKDEmbCYmKHllKDAsImRpdiIsMTAzKSgxLCJzcGFuIiw4MSksWWUoMiwiIExvYWRpbmcuLi4gIiksQ2UoKSx0dCgzLHhaZSwzLDAsImRpdiIsOCksQ2UoKSksMiZsKXtjb25zdCBhPUdlKDQp'@;
put 'O1NlKDMpLFJlKCJuZ0lmIiwhYS5sb2FkaW5nVGFibGUpfX1mdW5jdGlvbiBUWmUobCxjKXtpZigxJmwmJih5ZSgwLCJ0aCIsNCksWWUoMSksQ2UoKSksMiZsKXtjb25zdCBhPWMuJGltcGxpY2l0O1NlKDEpLGFyKGEpfX1mdW5jdGlvbiBPWmUobCxjKXtpZigxJmwmJih5ZSgwLCJzcGFuIiw4'@;
put 'NiksWWUoMSksQ2UoKSksMiZsKXtjb25zdCBhPUdlKCkuaW5kZXgsZj1HZSgyKS5pbmRleCxkPUdlKDQpO1NlKDEpLHdyKCJPcmlnaW5hbCB2YWx1ZSBpczogIixkLmFyck9mQ2hhbmdlc1tmXVthXSwiIil9fWZ1bmN0aW9uIERaZShsLGMpe2lmKDEmbCYmKHllKDAsInRkIiw4NCksWWUoMSks'@;
put 'dHQoMixPWmUsMiwxLCJzcGFuIiw4NSksQ2UoKSksMiZsKXtjb25zdCBhPWMuJGltcGxpY2l0LGY9Yy5pbmRleCxkPUdlKDIpLmluZGV4LGg9R2UoNCk7UmUoIm5nQ2xhc3MiLF9oKDMsdmNlLDE9PWguYXJyQ2hhbmdlZFtkXVtmXSYmInVwZGF0ZWQiPT1oLmNoQXJyW2RdKSksU2UoMSksd3Io'@;
put 'IiAiLGguZGlmZlRhYmxlLmRhdGFbZF1bYV0sIiAiKSxTZSgxKSxSZSgibmdJZiIsMT09aC5hcnJDaGFuZ2VkW2RdW2ZdJiYidXBkYXRlZCI9PWguY2hBcnJbZF0pfX1mdW5jdGlvbiBJWmUobCxjKXtpZigxJmwmJihXcigwKSx0dCgxLERaZSwzLDUsInRkIiw4MyksR3IoKSksMiZsKXtjb25z'@;
put 'dCBhPUdlKCkuaW5kZXgsZj1HZSg0KTtTZSgxKSxSZSgibmdGb3JPZiIsZi5yb3dLZXlzW2FdKX19ZnVuY3Rpb24gUlplKGwsYyl7aWYoMSZsJiYoeWUoMCwidGQiLDQpLFllKDEpLENlKCkpLDImbCl7Y29uc3QgYT1jLiRpbXBsaWNpdCxmPUdlKDIpLmluZGV4LGQ9R2UoNCk7U2UoMSksd3Io'@;
put 'IiAiLGQuZGlmZlRhYmxlLmRhdGFbZl1bYV0sIiAiKX19ZnVuY3Rpb24gTFplKGwsYyl7aWYoMSZsJiYoV3IoMCksdHQoMSxSWmUsMiwxLCJ0ZCIsNDcpLEdyKCkpLDImbCl7Y29uc3QgYT1HZSgpLmluZGV4LGY9R2UoNCk7U2UoMSksUmUoIm5nRm9yT2YiLGYucm93S2V5c1thXSl9fWZ1bmN0'@;
put 'aW9uIFBaZShsLGMpe2lmKDEmbCYmKHllKDAsInRyIiw4MiksdHQoMSxJWmUsMiwxLCJuZy1jb250YWluZXIiLDgpLHR0KDIsTFplLDIsMSwibmctY29udGFpbmVyIiw4KSxDZSgpKSwyJmwpe2NvbnN0IGE9Yy5pbmRleCxmPUdlKDQpO1JlKCJuZ0NsYXNzIixuQygzLHljZSwiYWRkZWQiPT1m'@;
put 'LmNoQXJyW2FdLCJkZWxldGVkIj09Zi5jaEFyclthXSwidXBkYXRlZCI9PWYuY2hBcnJbYV0pKSxTZSgxKSxSZSgibmdJZiIsInVwZGF0ZWQiPT09Zi5jaEFyclthXSksU2UoMSksUmUoIm5nSWYiLCJ1cGRhdGVkIiE9PWYuY2hBcnJbYV0pfX1mdW5jdGlvbiBGWmUobCxjKXtpZigxJmwpe2Nv'@;
put 'bnN0IGE9Wm4oKTt5ZSgwLCJkaXYiLDkzKSgxLCJkaXYiLDk0KSgyLCJkaXYiLDMxKSgzLCJkaXYiLDMyKSg0LCJzcGFuIiw5NSksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBVdChhKSxadChHZSgzKS5nb1RvU3VibWl0TGlzdCgpKX0pLHRuKDUsImNsci1pY29uIiwzNCksWWUoNiwi'@;
put 'QmFjayB0byBzdWJtaXR0ZWQgbGlzdCAiKSxDZSgpKCkseWUoNywiZGl2Iiw5NikoOCwiaDMiLDk3KSxZZSg5KSxDZSgpKCkseWUoMTAsImRpdiIsMzcpKDExLCJhIiwzOCksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBVdChhKSxadChHZSgzKS50YWJsZUZsYWc9ITApfSksdG4oMTIs'@;
put 'ImNsci1pY29uIiwzOSksQ2UoKSgpKCkseWUoMTMsInAiLDk4KSxZZSgxNCksQ2UoKSgpLHllKDE1LCJkaXYiLDUwKSgxNiwiZGl2Iiw1MSkoMTcsImRpdiIsNzUpKDE4LCJzcGFuIiksWWUoMTksIlRhYmxlIElkOiIpLENlKCkseWUoMjAsInN0cm9uZyIsNzYpKDIxLCJzcGFuIiksWWUoMjIp'@;
put 'LENlKCkoKSgpLHllKDIzLCJkaXYiKSgyNCwic3BhbiIpLFllKDI1LCJTdWJtaXR0ZWQgb246IiksQ2UoKSx5ZSgyNiwic3BhbiIsNzcpLFllKDI3KSxDZSgpKCkseWUoMjgsImRpdiIpKDI5LCJzcGFuIiksWWUoMzAsIlN1Ym1pdCBNZXNzYWdlOiIpLENlKCkseWUoMzEsInNwYW4iKSxZZSgz'@;
put 'MiksQ2UoKSgpKCkseWUoMzMsImRpdiIsNTIpKDM0LCJkaXYiLDUzKSgzNSwiZGl2Iiw1NCkoMzYsImRpdiIsNTUpKDM3LCJidXR0b24iLDU2KSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7VXQoYSk7Y29uc3QgZD1HZSgzKTtyZXR1cm4gWnQoZC5nb1RvQmFzZShkLnN1Yk9iai5iYXNlKSl9KSxZ'@;
put 'ZSgzOCwiIEdvIHRvIGJhc2UgdGFibGUgc2NyZWVuICIpLENlKCkseWUoMzksImJ1dHRvbiIsNTcpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtVdChhKTtjb25zdCBkPUdlKDMpO3JldHVybiBadChkLmdldFRhYmxlKGQuc3ViT2JqLnRhYmxlSWQpKX0pLFllKDQwLCIgR28gdG8gZWRpdGVkIHNj'@;
put 'cmVlbiAiKSxDZSgpLHllKDQxLCJidXR0b24iLDU4KSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7VXQoYSk7Y29uc3QgZD1HZSgzKTtyZXR1cm4gWnQoZC5nb0JhY2soZC5zdWJPYmouYmFzZSkpfSksWWUoNDIsIiBHbyBiYWNrIHRvIGVkaXRvciAiKSxDZSgpKCkoKSgpLHllKDQzLCJkaXYiLDY1'@;
put 'KSx0dCg0NCxrWmUsMywwLCJzcGFuIiw2NikseWUoNDUsImRpdiIsMzEpKDQ2LCJkaXYiLDY3KSg0Nywic3BhbiIsNjgpLFllKDQ4LCIgQ2hhbmdlZCBSb3dzICIpLHllKDQ5LCJzcGFuIiw2OSksWWUoNTApLENlKCkoKSx5ZSg1MSwic3BhbiIsNzApLFllKDUyLCIgQWRkZWQgUm93cyAiKSx5'@;
put 'ZSg1Mywic3BhbiIsNzEpLFllKDU0KSxDZSgpKCkseWUoNTUsInNwYW4iLDcyKSxZZSg1NiwiIERlbGV0ZWQgUm93cyAiKSx5ZSg1Nywic3BhbiIsNzMpLFllKDU4KSxDZSgpKCkoKSgpKCkseWUoNTksImRpdiIsNTMpKDYwLCJjbHItdG9nZ2xlLWNvbnRhaW5lciIsOTkpKDYxLCJjbHItdG9n'@;
put 'Z2xlLXdyYXBwZXIiKSg2MiwiaW5wdXQiLDYzKSxFdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oZCl7cmV0dXJuIFV0KGEpLFp0KEdlKDMpLmZvcm1hdHRlZFZhbHVlcz1kKX0pKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIFV0KGEpLFp0KEdlKDMpLmZvcm1hdHRpbmdDaGFuZ2VkKCkp'@;
put 'fSksQ2UoKSx5ZSg2MywibGFiZWwiKSxZZSg2NCksQ2UoKSgpKCkoKSgpKCkseWUoNjUsImRpdiIsMTAwKSx0dCg2NixFWmUsMSwwLCJkaXYiLDQyKSxDZSgpLHR0KDY3LEFaZSw0LDEsImRpdiIsMTAxKSx5ZSg2OCwiZGl2IiwxMDIpKDY5LCJ0YWJsZSIsMykoNzAsInRoZWFkIikoNzEsInRy'@;
put 'Iiw0NiksdHQoNzIsVFplLDIsMSwidGgiLDQ3KSxDZSgpKCkseWUoNzMsInRib2R5IiksdHQoNzQsUFplLDMsNywidHIiLDQ4KSxDZSgpKCkoKSgpfWlmKDImbCl7Y29uc3QgYT1HZSgzKTtTZSg5KSx3cigiICIsYS5zdWJPYmouYmFzZSwiICIpLFNlKDUpLHdyKCIgIixhLnRhYmxlRGVzY3Jp'@;
put 'cHRpb24sIiAiKSxTZSg2KSxSZSgicm91dGVyTGluayIsIi9zdGFnZS8iK2Euc3ViT2JqLnRhYmxlSWQpLFNlKDIpLHdyKCIgIixhLnN1Yk9iai50YWJsZUlkLCIiKSxTZSg1KSx3cigiICIsYS5zdWJPYmouc3VibWl0dGVkLCIgIiksU2UoNSksd3IoIiAiLGEuc3ViT2JqLnN1Ym1pdFJlYXNv'@;
put 'biwiICIpLFNlKDEyKSxSZSgibmdJZiIsYS5kaWZmc0xpbWl0KSxTZSg2KSxhcihhLmxlbnMudXBkYXRlZCksU2UoNCksYXIoYS5sZW5zLm5ldyksU2UoNCksYXIoYS5sZW5zLmRlbGV0ZWQpLFNlKDQpLFJlKCJuZ01vZGVsIixhLmZvcm1hdHRlZFZhbHVlcyksU2UoMiksYXIoYS5mb3JtYXR0'@;
put 'ZWRWYWx1ZXM/IkZvcm1hdHRlZCI6IlVuZm9ybWF0dGVkIiksU2UoMiksUmUoIm5nSWYiLGEubG9hZGVkKSxTZSgxKSxSZSgibmdJZiIsIWEubG9hZGluZ1RhYmxlKSxTZSg1KSxSZSgibmdGb3JPZiIsYS5yb3dIZWFkZXIpLFNlKDIpLFJlKCJuZ0Zvck9mIixhLnJvd0tleXMpfX1mdW5jdGlv'@;
put 'biBIWmUobCxjKXtpZigxJmwmJih5ZSgwLCJkaXYiLDkxKSx0dCgxLEZaZSw3NSwxNiwiZGl2Iiw5MiksQ2UoKSksMiZsKXtjb25zdCBhPUdlKDIpO1NlKDEpLFJlKCJuZ0lmIixhLmxvYWRlZCl9fWZ1bmN0aW9uIE5aZShsLGMpezEmbCYmKHllKDAsImRpdiIpKDEsImgzIiksWWUoMiwiTG9h'@;
put 'ZGluZyBzdWJtaXR0ZWQgdGFibGUiKSxDZSgpKCkpfWZ1bmN0aW9uIFZaZShsLGMpe2lmKDEmbCYmKHllKDAsImRpdiIsMTA0KSgxLCJkaXYiLDEwNSkoMiwic3BhbiIsODEpLFllKDMsIiBMb2FkaW5nLi4uICIpLENlKCksdHQoNCxOWmUsMywwLCJkaXYiLDgpLENlKCkoKSksMiZsKXtjb25z'@;
put 'dCBhPUdlKDIpO1NlKDQpLFJlKCJuZ0lmIiwhYS5sb2FkZWQpfX1mdW5jdGlvbiBCWmUobCxjKXtpZigxJmwmJih5ZSgwLCJkaXYiKSx0dCgxLEhaZSwyLDEsImRpdiIsODkpLHR0KDIsVlplLDUsMSwiZGl2Iiw5MCksQ2UoKSksMiZsKXtjb25zdCBhPUdlKCk7U2UoMSksUmUoIm5nSWYiLGEu'@;
put 'bG9hZGVkKSxTZSgxKSxSZSgibmdJZiIsIWEubG9hZGVkKX19Y29uc3QgalplPWZ1bmN0aW9uKCl7cmV0dXJue3N0YW5kYWxvbmU6ITB9fTtsZXQgYmNlPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmLGQsaCl7dGhpcy5zYXNTdG9yZVNlcnZpY2U9YSx0aGlzLmV2ZW50U2VydmljZT1m'@;
put 'LHRoaXMucm91dGVyPWQsdGhpcy5yb3V0ZT1oLHRoaXMuZGV0YWlsc09wZW49ITEsdGhpcy5yZWplY3RPcGVuPSExLHRoaXMubGVucz17bmV3OjAsdXBkYXRlZDowLGRlbGV0ZWQ6MH0sdGhpcy5sb2FkZWQ9ITEsdGhpcy5sb2FkaW5nVGFibGU9ITEsdGhpcy5zdWJtaXRSZWFzb249IiIsdGhp'@;
put 'cy5pbnN0YW5jZT0iaG90SW5zdGFuY2UiLHRoaXMuYWNjZXB0TG9hZGluZz0hMSx0aGlzLnJlamVjdExvYWRpbmc9ITEsdGhpcy5zdWJtaXR0ZWQ9ITEsdGhpcy50YWJsZUZsYWc9ITEsdGhpcy5yb3dLZXlzPVtdLHRoaXMuY2hBcnI9W10sdGhpcy5zZWNvbmRPcGVuPSExLHRoaXMuZm9ybWF0'@;
put 'dGVkVmFsdWVzPSEwLHRoaXMuY2hhbmdlc0Fycj1bXSx0aGlzLmRpZmZUYWJsZT17ZGF0YTpbXX0sdGhpcy5kaWZmc0xpbWl0PSExLHRoaXMucmVjb3Jkc0xpbWl0PTEwMH1nZXQgbm9DaGFuZ2VzKCl7cmV0dXJuIDA9PT10aGlzLmxlbnMubmV3JiYwPT09dGhpcy5sZW5zLnVwZGF0ZWQmJjA9'@;
put 'PT10aGlzLmxlbnMuZGVsZXRlZH1nb1RvQmFzZShhKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi92aWV3L2RhdGEvIithKX1nb1RvQXBwcm92YWxzTGlzdCgpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL2FwcHJvdmUiKX1nZXRUYWJsZShhKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlV'@;
put 'cmwoIi9zdGFnZS8iK2EpfWdvQmFjayhhKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9lZGl0b3IvIithKX1nb1RvVmlld2VyKCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9kYXRhIil9c2hvd0RldGFpbHNTZWxlY3QoYSl7YS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMudGFi'@;
put 'bGVGbGFnPSF0aGlzLnRhYmxlRmxhZ31nZXREZXRhaWxzKCl7dGhpcy5kZXRhaWxzT3Blbj0hMH1vbkhvdFNlbGVjdGlvbihhKXt0aGlzLmhvdFNlbGVjdGlvbj1hLnNsaWNlKDAsNCl9b25Ib3REZXNlbGVjdCgpe3NldFRpbWVvdXQoKCk9Pnt0aGlzLmhvdFNlbGVjdGlvbj1udWxsfSwxMDAp'@;
put 'fXJlamVjdGluZygpe3ZhciBhPXRoaXM7cmV0dXJuIHlpKGZ1bmN0aW9uKigpe2EucmVqZWN0TG9hZGluZz0hMCxhLnN1Ym1pdFJlYXNvbj1hLnN1Ym1pdFJlYXNvbi5yZXBsYWNlKC9cbi9nLCIuICIpO2xldCBmPXtTVFBfQUNUSU9OOiJSRUpFQ1RfVEFCTEUiLFRBQkxFOmEudGFibGVJZCxT'@;
put 'VFBfUkVBU09OOmEuc3VibWl0UmVhc29ufTt5aWVsZCBhLnNhc1N0b3JlU2VydmljZS5yZWplY3RpbmcoZiwiQnJvd3NlclBhcmFtcyIsImFwcHJvdmVycy9yZWplY3Rpb24iKS50aGVuKGQ9PnthLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9oaXN0b3J5Iil9KS5jYXRjaChkPT57YS5hY2NlcHRM'@;
put 'b2FkaW5nPSExLGEucmVqZWN0TG9hZGluZz0hMX0pfSkoKX1hcHByb3ZlVGFibGUoKXt2YXIgYT10aGlzO3JldHVybiB5aShmdW5jdGlvbiooKXthLmFjY2VwdExvYWRpbmc9ITA7bGV0IGY9e0FDVElPTjoiQVBQUk9WRV9UQUJMRSIsVEFCTEU6YS50YWJsZUlkLERJRkZUSU1FOmEucGFyYW1z'@;
put 'Py5ESUZGVElNRSxMSUJEUzphLnBhcmFtcz8uTElCRFN9O3lpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLmFwcHJvdmVUYWJsZShmLCJTQVNDb250cm9sVGFibGUiLCJhdWRpdG9ycy9wb3N0ZGF0YSIpLnRoZW4oZD0+e2Eucm91dGUubmF2aWdhdGVCeVVybCgiL2hpc3RvcnkiKX0pLmNhdGNoKGQ9'@;
put 'PnthLmFjY2VwdExvYWRpbmc9ITF9KX0pKCl9Z29Ub1N1Ym1pdExpc3QoKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9zdWJtaXR0ZWQiKX1jYWxsQ2hhbmdlc0luZm8oYSl7dmFyIGY9dGhpcztyZXR1cm4geWkoZnVuY3Rpb24qKCl7eWllbGQgZi5zYXNTdG9yZVNlcnZpY2UuZ2V0Q2hh'@;
put 'bmdlSW5mbyhhKS50aGVuKGQ9PntmLnRhYmxlRGV0YWlscz1kLmpzcGFyYW1zWzBdLGYuanNQYXJhbXM9ZC5qc3BhcmFtc1swXTtsZXQgaD1bXTtmb3IoY29uc3QgbSBpbiBmLmpzUGFyYW1zKWYuanNQYXJhbXMuaGFzT3duUHJvcGVydHkobSkmJmgucHVzaChtKTtmLmtleXNBcnJheT1ofSku'@;
put 'Y2F0Y2goZD0+e2YuYWNjZXB0TG9hZGluZz0hMX0pLmZpbmFsbHkoKCk9PntmLmxvYWRlZD0hMH0pfSkoKX1mb3JtYXR0aW5nQ2hhbmdlZCgpe3RoaXMuY2FsY0RpZmYoKX1jYWxjRGlmZigpe2lmKCF0aGlzLnJlc3BvbnNlKXJldHVybjtsZXQgYT10aGlzLnJlc3BvbnNlLm5ldyxmPXRoaXMu'@;
put 'cmVzcG9uc2UudXBkYXRlcyxkPXRoaXMucmVzcG9uc2UuZGVsZXRlZCxoPXRoaXMucmVzcG9uc2Uub3JpZ2luYWxzO3RoaXMuZm9ybWF0dGVkVmFsdWVzJiYoYT10aGlzLnJlc3BvbnNlLmZtdF9uZXcsZj10aGlzLnJlc3BvbnNlLmZtdF91cGRhdGVzLGQ9dGhpcy5yZXNwb25zZS5mbXRfZGVs'@;
put 'ZXRlZCxoPXRoaXMucmVzcG9uc2UuZm10X29yaWdpbmFscyksdGhpcy5vcmlnaW5hbHM9aCx0aGlzLnJvd0tleXM9W107Zm9yKGxldCBndD0wO2d0PGYubGVuZ3RoO2d0Kyspe2xldCBqdD1PYmplY3Qua2V5cyhmW2d0XSk7Zm9yKGxldCBybj0wO3JuPGp0Lmxlbmd0aDtybisrKWZbZ3RdW2p0'@;
put 'W3JuXV0hPT1oW2d0XVtqdFtybl1dJiZ0aGlzLmNoYW5nZXNBcnIucHVzaCh7aW5kOmd0LGZpZWxkOmp0W3JuXSxwcm9wOmZbZ3RdW2p0W3JuXV0sb3JpZ2luYWw6aFtndF1banRbcm5dXX0pfXRoaXMubGVucz17bmV3OnRoaXMucGFyYW1zPy5OVU1fQURERUR8fDAsdXBkYXRlZDp0aGlzLnBh'@;
put 'cmFtcz8uTlVNX1VQREFURUR8fDAsZGVsZXRlZDp0aGlzLnBhcmFtcz8uTlVNX0RFTEVURUR8fDB9O2xldCBYPVtdLGFlPWYuY29uY2F0KGEsZCk7Zm9yKGxldCBndD0wO2d0PHRoaXMucmVzcG9uc2UuY29scy5sZW5ndGg7Z3QrKylYLnB1c2godGhpcy5yZXNwb25zZS5jb2xzW2d0XS5OQU1F'@;
put 'KTtsZXQgcGU9dGhpcy5sZW5zLm5ldz50aGlzLnJlY29yZHNMaW1pdD90aGlzLnJlY29yZHNMaW1pdDp0aGlzLmxlbnMubmV3LGJlPXRoaXMubGVucy51cGRhdGVkPnRoaXMucmVjb3Jkc0xpbWl0P3RoaXMucmVjb3Jkc0xpbWl0OnRoaXMubGVucy51cGRhdGVkO3RoaXMuZGlmZnNMaW1pdD10'@;
put 'aGlzLmxlbnMubmV3PnRoaXMucmVjb3Jkc0xpbWl0fHx0aGlzLmxlbnMudXBkYXRlZD50aGlzLnJlY29yZHNMaW1pdHx8dGhpcy5sZW5zLmRlbGV0ZWQ+dGhpcy5yZWNvcmRzTGltaXQsdGhpcy5hZGRDb3VudD1wZTtsZXQgVmU9W10sWmU9W107Zm9yKGxldCBndD0wO2d0PFgubGVuZ3RoO2d0'@;
put 'KyspWmUucHVzaCh7ZGF0YTpYW2d0XSxyZWFkT25seTohMH0pO3RoaXMuZGlmZlRhYmxlLmRhdGE9YWU7Zm9yKGxldCBndD0wO2d0PGFlLmxlbmd0aDtndCsrKXtsZXQgcm49T2JqZWN0LmtleXMoYWVbZ3RdKTt0aGlzLnJvd0tleXMucHVzaChybil9bGV0IGx0PVtdLGR0PVtdO2ZvcihsZXQg'@;
put 'Z3Q9MDtndDx0aGlzLmRpZmZUYWJsZS5kYXRhLmxlbmd0aDtndCsrKXtpZihndDxiZSYmMCE9PWJlKXtsdC5wdXNoKFtdKSxkdC5wdXNoKFtdKSxWZS5wdXNoKCJ1cGRhdGVkIik7bGV0IGp0PU9iamVjdC5rZXlzKHRoaXMuZGlmZlRhYmxlLmRhdGFbZ3RdKTtmb3IobGV0IHJuPTA7cm48anQu'@;
put 'bGVuZ3RoO3JuKyspe2xldCBYdD1qdFtybl07aFtndF1bWHRdIT09ZltndF1bWHRdPyhsdFtndF0ucHVzaCghMCksZHRbZ3RdLnB1c2goaFtndF1bWHRdKSk6KGx0W2d0XS5wdXNoKCExKSxkdFtndF0ucHVzaChudWxsKSl9dGhpcy5hcnJDaGFuZ2VkPWx0LHRoaXMuYXJyT2ZDaGFuZ2VzPWR0'@;
put 'fWd0Pj1iZSYmZ3Q8YmUrcGUmJlZlLnB1c2goImFkZGVkIiksZ3Q+cGUrYmUtMSYmVmUucHVzaCgiZGVsZXRlZCIpfXRoaXMuY2hBcnI9VmUsdGhpcy5yb3dIZWFkZXI9dGhpcy5yb3dLZXlzWzBdLHRoaXMuZGlmZlRhYmxlLmRhdGE9YWV9bmdBZnRlclZpZXdJbml0KCl7dmFyIGE9dGhpczty'@;
put 'ZXR1cm4geWkoZnVuY3Rpb24qKCl7aWYoYS5fZGV0YWlsc1N1Yj1hLnNhc1N0b3JlU2VydmljZS5zdWJtaXR0RGV0YWlsLnN1YnNjcmliZShmdW5jdGlvbigpe3ZhciBkPXlpKGZ1bmN0aW9uKihoKXthLnN1Yk9iaj1oLnZpZXdEYXRhLGEudGFibGVJZD1oLnZpZXdEYXRhLnRhYmxlSWQsYS5z'@;
put 'dWJtaXR0ZWQ9aC52aWV3RGF0YS5zdWIsYS5zdWJtaXREZXRhaWxzPWguZGF0YSxhLnN1Ym1pdEFycj1bXTtmb3IobGV0IF8gaW4gYS5zdWJtaXREZXRhaWxzKSJzdWIiIT09XyYmYS5zdWJtaXRBcnIucHVzaChfKTtsZXQgbT17QUNUSU9OOiJTSE9XX0RJRkZTIixUQUJMRTphLnRhYmxlSWQs'@;
put 'RElGRlRJTUU6KG5ldyBEYXRlKS50b1VUQ1N0cmluZygpfTthLnNhc1N0b3JlU2VydmljZS5zaG93RGlmZnMobSwiU0FTQ29udHJvbFRhYmxlIiwiYXVkaXRvcnMvcG9zdGRhdGEiKS50aGVuKF89PnthLnBhcmFtcz1fLnBhcmFtc1swXSxhLnJlc3BvbnNlPV8sYS5jYWxjRGlmZigpfSkuY2F0'@;
put 'Y2goXz0+XykuZmluYWxseSgoKT0+e2EubG9hZGluZ1RhYmxlPSEwfSksYS5jYWxsQ2hhbmdlc0luZm8oYS50YWJsZUlkKX0pO3JldHVybiBmdW5jdGlvbihoKXtyZXR1cm4gZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKSx0eXBlb2YgYS5yb3V0ZXIuc25hcHNob3QucGFyYW1zLnRhYmxl'@;
put 'SWQ+InUiKXJldHVybjthLnRhYmxlSWQ9YS5yb3V0ZXIuc25hcHNob3QucGFyYW1zLnRhYmxlSWQ7bGV0IGY9e0FDVElPTjoiU0hPV19ESUZGUyIsVEFCTEU6YS50YWJsZUlkLERJRkZUSU1FOihuZXcgRGF0ZSkudG9VVENTdHJpbmcoKX07YS5zYXNTdG9yZVNlcnZpY2Uuc2hvd0RpZmZzKGYs'@;
put 'IlNBU0NvbnRyb2xUYWJsZSIsImF1ZGl0b3JzL3Bvc3RkYXRhIikudGhlbihkPT57YS5wYXJhbXM9ZC5wYXJhbXNbMF0sYS5yZXNwb25zZT1kLGEuY2FsY0RpZmYoKX0pLmNhdGNoKGQ9PnthLmFjY2VwdExvYWRpbmc9ITF9KS5maW5hbGx5KCgpPT57YS5sb2FkaW5nVGFibGU9ITAsYS5zZXRG'@;
put 'b2N1cygpfSksYS5jYWxsQ2hhbmdlc0luZm8oYS50YWJsZUlkKX0pKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9kZXRhaWxzU3ViJiZ0aGlzLl9kZXRhaWxzU3ViLnVuc3Vic2NyaWJlKCl9c2V0Rm9jdXMoKXtzZXRUaW1lb3V0KCgpPT57bGV0IGE9d2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRC'@;
put 'eUlkKCJhY2NlcHRCdG4iKTthJiZhLmZvY3VzKCl9LDIwMCl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHJ0KExkKSxydChScykscnQodHUpLHJ0KExhKSl9LGwuXHUwMjc1Y21wPWtyKHt0eXBlOmwsc2VsZWN0b3JzOltbImFwcC1hcHByb3ZlLWRl'@;
put 'dGFpbHMiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjQyLHZhcnM6MTIsY29uc3RzOltbMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxPcGVuQ2hhbmdlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwidGFibGUiXSxbMSwibGVmdCJd'@;
put 'LFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbNCwibmdJZiJdLFsxLCJmb3JtLWJsb2NrIl0sWzEsImZvcm0tZ3JvdXAiXSxbImZvciIsImZvcm1GaWVsZHNf'@;
put 'OCJdLFsiaWQiLCJmb3JtRmllbGRzXzgiLCJyb3dzIiwiNSIsMSwidy0xMDAiLDMsIm5nTW9kZWwiLCJuZ01vZGVsT3B0aW9ucyIsImlubmVySFRNTCIsIm5nTW9kZWxDaGFuZ2UiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsidHlwZSIsInN1'@;
put 'Ym1pdCIsMSwiYnRuIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xyTG9hZGluZyIsImNsaWNrIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsiY2xhc3MiLCJjYXJkIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImxlZnQgbGluay1pdCIsMywicm91dGVyTGluayIsNCwibmdJZiJdLFsiY2xhc3MiLCJs'@;
put 'ZWZ0Iiw0LCJuZ0lmIl0sWzEsImxlZnQiLCJsaW5rLWl0IiwzLCJyb3V0ZXJMaW5rIl0sWyJjbHJUYWJMaW5rIiwiIl0sWzQsImNscklmQWN0aXZlIl0sWzEsIm92ZXJmbG93LWF1dG8iXSxbMSwiY2FyZCJdLFsiY2xhc3MiLCJjYXJkLWhlYWRlciBkLWZsZXggZmxleC1jb2x1bW4ganVzdGlm'@;
put 'eS1jb250ZW50LWNlbnRlciIsNCwibmdJZiJdLFsxLCJvdmVyZmxvdy1hdXRvIiwibXItMTIiXSxbImNsYXNzIiwiaC03MHZoIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciIsNCwibmdJZiJdLFsxLCJjYXJkLWhlYWRlciIsImQt'@;
put 'ZmxleCIsImZsZXgtY29sdW1uIiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsiY2xhc3MiLCJjYXJkIiwiY2xhc3MiLCJtdC0wIiw0LCJuZ0lmIl0sWzEsIm10LTAiXSxbMSwiY2FyZC1oZWFkZXIiLCJwLTAiXSxbMSwiY2xyLXJvdyJdLFsxLCJjbHItY29sLW1kLTQiLCJhcHByb3ZhbEJh'@;
put 'Y2siXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLCJtLTAiLDMsImNsaWNrIl0sWyJzaGFwZSIsImNhcmV0IiwiZGlyIiwibGVmdCIsInNpemUiLCIyMCJdLFsxLCJjbHItY29sLW1kLTQiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsIm10LTAiLCJmb250'@;
put 'LXdlaWdodC0zMDAiXSxbMSwiY2xyLWNvbC1tZC00IiwiYXBwcm92YWxJbmZvIl0sWzEsInRvb2x0aXAiLCJ0b29sdGlwLXNtIiwidG9vbHRpcC10b3AtbGVmdCIsMywiY2xpY2siXSxbInNoYXBlIiwiaW5mby1zdGFuZGFyZCIsInNpemUiLCIyOCJdLFsxLCJ0ZXh0LWNlbnRlciIsIm10LTEw'@;
put 'Il0sWzEsImNhcmQtYmxvY2siLCJwLTAiXSxbImNsYXNzIiwiY2FyZC10ZXh0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImgtMjR2aCBkLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbMSwidGFibGVDb250IiwibXQt'@;
put 'MCJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBmb250LXNpemUtMTgiLDQsIm5nSWYiXSxbMSwiZC1mbGV4Il0sWyJjbGFzcyIsImxlZnQiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJkLWZsZXgiLDMsIm5nQ2xhc3MiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjYXJkLXRleHQi'@;
put 'XSxbMSwiY2xyLXJvdyIsImZvbnQtc2l6ZS0xNSJdLFsxLCJjbHItY29sLW1kLTUiXSxbMSwiY2xyLWNvbC1tZC03Il0sWzEsImNhcmQtYmxvY2siLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJtdC0wIl0s'@;
put 'WzEsImNsci1yb3ciLCJjbHItZ2FwLTUiLCJjbHItZ2FwLXNtLTAiXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLCJ0ZXh0LWNlbnRlciIsIm10LTUiLDMsImNsaWNrIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLCJ0ZXh0LWNlbnRlciIsIm10LTUi'@;
put 'LDMsImNsaWNrIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1pbmZvLW91dGxpbmUiLCJ0ZXh0LWNlbnRlciIsIm10LTUiLDMsImNsaWNrIl0sWzEsImNhcmQtYmxvY2siLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiY2xyLWZsZXgtY29sdW1uIiwiY2xyLWdhcC01IiwiY2xy'@;
put 'LWZsZXgtc20tcm93IiwiY2xyLWdhcC1zbS0wIiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsiaWQiLCJhY2NlcHRCdG4iLCJ0eXBlIiwic3VibWl0IiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIsMywiY2xyTG9hZGluZyIsImRpc2FibGVkIiwiY2xpY2siXSxbImlkIiwicmVq'@;
put 'ZWN0QnRuIiwxLCJidG4iLCJidG4tc20iLCJidG4iLCJidG4tZGFuZ2VyIiwibXItMCIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsxLCJtLTAiLCJtbC0yMGkiXSxbInR5cGUiLCJjaGVja2JveCIsImNsclRvZ2dsZSIsIiIsImNoZWNrZWQiLCIiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdl'@;
put 'IiwiY2hhbmdlIl0sWzEsImZvcm1hdHRlZC12YWx1ZXMtdG9nZ2xlIl0sWzEsImNhcmQtYmxvY2siLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwiY2xyLWZsZXgtY29sdW1uIl0sWyJjbGFzcyIsInJvd3Mtbm90aWNlIiw0LCJuZ0lmIl0sWzEsImQtZmxleCIsImNsci1mbGV4'@;
put 'LWNvbHVtbiIsImNsci1nYXAtNSIsImNsci1mbGV4LXNtLXJvdyIsImNsci1nYXAtc20tMCJdLFsxLCJsYWJlbCIsImxhYmVsLXdhcm5pbmciXSxbMSwiYmFkZ2UiLCJiYWRnZS13YXJuaW5nIl0sWzEsImxhYmVsIiwibGFiZWwtc3VjY2VzcyJdLFsxLCJiYWRnZSIsImJhZGdlLXN1Y2Nlc3Mi'@;
put 'XSxbMSwibGFiZWwiLCJsYWJlbC1kYW5nZXIiXSxbMSwiYmFkZ2UiLCJiYWRnZS1kYW5nZXIiXSxbMSwidGV4dC1jZW50ZXIiLCJmb250LXNpemUtMTgiXSxbMSwibXQtMTUiXSxbMSwibGluay1pdCIsMywicm91dGVyTGluayJdLFsxLCJtdC0xMCJdLFsxLCJyb3dzLW5vdGljZSJdLFsic2hh'@;
put 'cGUiLCJleGNsYW1hdGlvbi10cmlhbmdsZSIsMSwibWItNSIsImNvbG9yLW9yYW5nZSJdLFsxLCJoLTI0dmgiLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwic3Bpbm5lciJdLFsxLCJkLWZsZXgiLDMsIm5n'@;
put 'Q2xhc3MiXSxbImNsYXNzIiwibGVmdCIsMywibmdDbGFzcyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImxlZnQiLDMsIm5nQ2xhc3MiXSxbImNsYXNzIiwidG9vbHRpcC1jb250ZW50Iiw0LCJuZ0lmIl0sWzEsInRvb2x0aXAtY29udGVudCJdLFsxLCJoLTcwdmgiLCJkLWZsZXgiLCJqdXN0'@;
put 'aWZ5LWNvbnRlbnQtY2VudGVyIiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbImNsYXNzIiwic3Bpbm5lciIsNCwibmdJZiJdLFsiY2xhc3MiLCJkLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJjYXJkLWJs'@;
put 'b2NrIiw0LCJuZ0lmIl0sWzEsImQtZmxleCIsImZsZXgtY29sdW1uIiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsiY2xhc3MiLCJjYXJkIG0tMCIsNCwibmdJZiJdLFsxLCJjYXJkIiwibS0wIl0sWzEsImNhcmQtaGVhZGVyIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwz'@;
put 'LCJjbGljayJdLFsxLCJjbHItY29sLW1kLTQiXSxbMSwibXQtMCIsImZvbnQtd2VpZ2h0LTMwMCIsInRleHQtY2VudGVyIl0sWzEsIm0tMCIsInRleHQtY2VudGVyIiwiY29sb3ItZGFya2VyLWdyYXkiXSxbMSwibS0wIiwibWwtMjAtaSJdLFsxLCJjYXJkLWJsb2NrIiwicC0wIiwib3ZlcmZs'@;
put 'b3ctYXV0byIsIm1yLTEyIl0sWyJjbGFzcyIsImgtMjV2aCBkLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbMSwidGFibGVDb250Il0sWzEsImgtMjV2aCIsImQtZmxleCIsImZsZXgtY29sdW1uIiwianVzdGlm'@;
put 'eS1jb250ZW50LWNlbnRlciIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJjYXJkLWJsb2NrIl0sWzEsImxvYWRlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGYpezEmYSYmKHllKDAsImNsci1tb2RhbCIsMCksRXQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIGYu'@;
put 'ZGV0YWlsc09wZW49aH0pLHllKDEsImgzIiwxKSxZZSgyLCJBcHByb3ZhbCBEZXRhaWxzIiksQ2UoKSx5ZSgzLCJkaXYiLDIpKDQsInRhYmxlIiwzKSg1LCJ0aGVhZCIpKDYsInRyIikoNywidGgiLDQpLFllKDgsIk5hbWUiKSxDZSgpLHllKDksInRoIiw0KSxZZSgxMCwiVmFsdWUiKSxDZSgp'@;
put 'KCkoKSx5ZSgxMSwidGJvZHkiKSx0dCgxMixlWmUsNSwzLCJ0ciIsNSksQ2UoKSgpKCkseWUoMTMsImRpdiIsNikoMTQsImJ1dHRvbiIsNyksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBmLmRldGFpbHNPcGVuPSExfSksWWUoMTUsIiBPayAiKSxDZSgpKCkoKSx5ZSgxNiwiY2xyLW1v'@;
put 'ZGFsIiwwKSxFdCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gZi50YWJsZUZsYWc9aH0pLHllKDE3LCJoMyIsMSksWWUoMTgsIkFsbCBEZXRhaWxzIiksQ2UoKSx5ZSgxOSwiZGl2IiwyKSx0dCgyMCxpWmUsMTksMiwiY2xyLXRhYnMiLDgpLENlKCkseWUoMjEsImRp'@;
put 'diIsNikoMjIsImJ1dHRvbiIsNyksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBmLnRhYmxlRmxhZz0hMX0pLFllKDIzLCIgT2sgIiksQ2UoKSgpKCkseWUoMjQsImNsci1tb2RhbCIsMCksRXQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIGYucmVqZWN0T3Bl'@;
put 'bj1ofSkseWUoMjUsImgzIiwxKSxZZSgyNiwiUmVhc29uIE1lc3NhZ2UiKSxDZSgpLHllKDI3LCJkaXYiLDIpKDI4LCJmb3JtIikoMjksInNlY3Rpb24iLDkpKDMwLCJkaXYiLDEwKSgzMSwibGFiZWwiLDExKSxZZSgzMiwiUmVhc29uIGZvciByZWplY3Rpbmc/IiksQ2UoKSx5ZSgzMywidGV4'@;
put 'dGFyZWEiLDEyKSxFdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIGYuc3VibWl0UmVhc29uPWh9KSxDZSgpKCkoKSgpKCkseWUoMzQsImRpdiIsNikoMzUsImJ1dHRvbiIsMTMpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZi5yZWplY3RPcGVuPSExfSksWWUoMzYs'@;
put 'IiBDYW5jZWwgIiksQ2UoKSx5ZSgzNywiYnV0dG9uIiwxNCksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBmLnJlamVjdGluZygpfSksWWUoMzgsIiBPSyAiKSxDZSgpKCkoKSx5ZSgzOSwiZGl2IiwxNSksdHQoNDAsTVplLDQsMiwiZGl2IiwxNiksdHQoNDEsQlplLDMsMiwiZGl2Iiw4'@;
put 'KSxDZSgpKSwyJmEmJihSZSgiY2xyTW9kYWxPcGVuIixmLmRldGFpbHNPcGVuKSxTZSgxMiksUmUoIm5nRm9yT2YiLGYua2V5c0FycmF5KSxTZSg0KSxSZSgiY2xyTW9kYWxPcGVuIixmLnRhYmxlRmxhZyksU2UoNCksUmUoIm5nSWYiLGYudGFibGVGbGFnKSxTZSg0KSxSZSgiY2xyTW9kYWxP'@;
put 'cGVuIixmLnJlamVjdE9wZW4pLFNlKDkpLFJlKCJuZ01vZGVsIixmLnN1Ym1pdFJlYXNvbikoIm5nTW9kZWxPcHRpb25zIixYYSgxMSxqWmUpKSgiaW5uZXJIVE1MIixmLnN1Ym1pdFJlYXNvbix2aCksU2UoNCksUmUoImNsckxvYWRpbmciLGYucmVqZWN0TG9hZGluZyksU2UoMyksUmUoIm5n'@;
put 'SWYiLCFmLnN1Ym1pdHRlZCksU2UoMSksUmUoIm5nSWYiLGYuc3VibWl0dGVkKSl9LGRlcGVuZGVuY2llczpbeXUsUmEsJGkscDQsaXMsUjAsV2EsaDQsemEsQ2QsSTAsUmwsTWMsa2MsSmMsdVMsSWgsZWwsQjAsbDcsVjAsdTUsZjUsVDcsYzUsbDUsQTddLHN0eWxlczpbJy5sb2FkZXJbX25n'@;
put 'Y29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2hlaWdodDo3NXZoO2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Lm1vZGFsTGFyZ2VbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjUwcmVtIWltcG9ydGFudH0uYWRkZWRS'@;
put 'b3dbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiKDE0NiwyMDgsMTU0KTtib3JkZXI6MXB4IHNvbGlkIHJnYmEoOSw3NywxMTcsLjIpO2JvcmRlci1yYWRpdXM6NXB4fS5kZWxldGVkUm93W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYigyMzAsMTc5LDE3OSk7Ym9y'@;
put 'ZGVyOjFweCBzb2xpZCByZ2JhKDcwLDcxLDcwLC4yKTtib3JkZXItcmFkaXVzOjVweH0udXBkYXRlZFJvd1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojZmFmZGE4O2JvcmRlcjoxcHggc29saWQgcmdiYSg5LDExNyw5LC4yKTtib3JkZXItcmFkaXVzOjVweH0uY2hbX25nY29udGVu'@;
put 'dC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMSk7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDEwNCwxMDAsMCwuNCk7Ym9yZGVyLXJhZGl1czo1cHh9LmNoW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMjUyLDEzNSwxMjAsLjQpfS50b29sdGlwW19uZ2Nv'@;
put 'bnRlbnQtJUNPTVAlXSAgIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC10b3AtcmlnaHRbX25nY29udGVudC0lQ09NUCVdLCAudG9vbHRpcC50b29sdGlwLXRvcC1yaWdodFtfbmdjb250ZW50LSVDT01QJV0gPiAudG9vbHRpcC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSwgLnRvb2x0aXBb'@;
put 'X25nY29udGVudC0lQ09NUCVdID4gLnRvb2x0aXAtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOi41NDE2N3JlbTtmb250LXdlaWdodDo0MDA7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO2JhY2tncm91bmQ6IzMxNDM1MTtib3JkZXItcmFkaXVzOi4xMjVyZW07Y29sb3I6I2Yw'@;
put 'ZjFlYztsaW5lLWhlaWdodDouNzVyZW07bWFyZ2luOjA7cGFkZGluZzouMzc1cmVtIC41cmVtO3dpZHRoOjIzNXB4O3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OmF1dG8gYXV0byAxMDAlIDEycHg7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowO21hcmdpbi1ib3R0b206LjY2NjY3cmVtfS50'@;
put 'b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC10b3AtcmlnaHRbX25nY29udGVudC0lQ09NUCVdOmJlZm9yZSwgLnRvb2x0aXAudG9vbHRpcC10b3AtcmlnaHRbX25nY29udGVudC0lQ09NUCVdID4gLnRvb2x0aXAtY29udGVudFtfbmdjb250ZW50'@;
put 'LSVDT01QJV06YmVmb3JlLCAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gPiAudG9vbHRpcC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXTpiZWZvcmV7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOi0uMzc1cmVtO2xlZnQ6MDt0b3A6YXV0bztyaWdodDphdXRvO2NvbnRlbnQ6IiI7Ym9y'@;
put 'ZGVyLWxlZnQ6LjI1cmVtIHNvbGlkICMzMTQzNTE7Ym9yZGVyLXRvcDouMjA4MzNyZW0gc29saWQgIzMxNDM1MTtib3JkZXItcmlnaHQ6LjI1cmVtIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1ib3R0b206LjIwODMzcmVtIHNvbGlkIHRyYW5zcGFyZW50fS50YWJsZVtfbmdjb250ZW50LSVD'@;
put 'T01QJV17Ym9yZGVyOjBweCBzb2xpZH0udG9nZ2xlLXN3aXRjaFtfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFt0eXBlPWNoZWNrYm94XVtfbmdjb250ZW50LSVDT01QJV06Y2hlY2tlZCArIGxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXTpiZWZvcmV7Ym9yZGVyLWNvbG9yOiMzMTQzNTE7YmFj'@;
put 'a2dyb3VuZC1jb2xvcjojMzE0MzUxIWltcG9ydGFudDt0cmFuc2l0aW9uOi4xNXMgZWFzZS1pbjt0cmFuc2l0aW9uLXByb3BlcnR5OmJvcmRlci1jb2xvcixiYWNrZ3JvdW5kLWNvbG9yfS50YWJsZUNvbnRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmF1dG87bWFyZ2luOjE1cHggMTBw'@;
put 'eCAxMHB4fS50YWJsZUNvbnRbX25nY29udGVudC0lQ09NUCVdICAgdGRbX25nY29udGVudC0lQ09NUCVde3dvcmQtYnJlYWs6YnJlYWstd29yZH0uYXBwcm92YWxJbmZvW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5hcHByb3ZhbEJh'@;
put 'Y2tbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCl7LmFwcHJvdmFsSW5mb1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50'@;
put 'ZXI7bWFyZ2luLXRvcDoxNXB4fS5hcHByb3ZhbEJhY2tbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21hcmdpbi1ib3R0b206MTVweH0uY2FyZFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDowcmVtIWltcG9ydGFudDttaW4taGVp'@;
put 'Z2h0OmNhbGMoMTAwdmggKyAtMHB4KSFpbXBvcnRhbnR9LnRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRkLmxlZnRbX25nY29udGVudC0lQ09NUCVdLCAudGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGgubGVmdFtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpsZWZ0O3dpZHRo'@;
put 'OjE1MHB4IWltcG9ydGFudDtmbGV4OjB9fS50YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICB0ZC5sZWZ0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLnRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoLmxlZnRbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246bGVmdDtmbGV4OjE7d2lkdGg6'@;
put 'MzAwcHghaW1wb3J0YW50fS50b29sbFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7YmFja2dyb3VuZDojZTZiM2IzO2NvbG9yOiMzMTQzNTE7dG9wOjA7aGVpZ2h0OjM2cHg7d2lkdGg6MTAwJTtsZWZ0OjA7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpj'@;
put 'ZW50ZXI7ZGlzcGxheTpmbGV4fSNhY2NlcHRCdG5bX25nY29udGVudC0lQ09NUCVdLCAjcmVqZWN0QnRuW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxNzVweH0uZm9ybWF0dGVkLXZhbHVlcy10b2dnbGVbX25nY29udGVudC0lQ09NUCVde21pbi13aWR0aDo3NXB4fWNsci1tb2RhbFtfbmdj'@;
put 'b250ZW50LSVDT01QJV0gICAgIC5tb2RhbC1ib2R5LXdyYXBwZXJ7b3ZlcmZsb3c6YXV0b30ucm93cy1ub3RpY2VbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLXJpZ2h0OjEwcHg7Y29sb3I6IzZhNmE2YTtmb250LXNpemU6MTVweH0u'@;
put 'cm93cy1ub3RpY2VbX25nY29udGVudC0lQ09NUCVdICAgY2xyLWljb25bX25nY29udGVudC0lQ09NUCVde21hcmdpbjowfSddfSksbH0pKCkselplPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmKXt0aGlzLnJvdXRlPWEsdGhpcy5yb3V0ZXI9Zn1zdWJtaXR0ZWRUYWJsZVNjcmVlbigp'@;
put 'e3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK3RoaXMuZHNpZCl9YXBwcm92ZVRhYmxlU2NyZWVuKCl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2FwcHJvdmUvYXBwcm92ZURldC8iK3RoaXMuZHNpZCl9dmlld2VyVGFibGVTY3JlZW4oKXt0aGlzLnJvdXRlci5uYXZp'@;
put 'Z2F0ZUJ5VXJsKCIvdmlldy9kYXRhLyIrdGhpcy5saWJkcyl9Z29CYWNrKCl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2VkaXRvci8iK3RoaXMubGliZHMpfW5nT25Jbml0KCl7dmFyIGE9dGhpcztyZXR1cm4geWkoZnVuY3Rpb24qKCl7YS5kc2lkPWEucm91dGUuc25hcHNob3QucGFy'@;
put 'YW1zLmRzaWQsYS5saWJkcz1hLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5saWJkc30pKCl9bmdBZnRlclZpZXdJbml0KCl7c2V0VGltZW91dCgoKT0+e2xldCBhPXdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYXBwcm92YWxCdG4iKTthJiZhLmZvY3VzKCl9LDcwMCl9fXJldHVybiBs'@;
put 'Llx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHJ0KHR1KSxydChMYSkpfSxsLlx1MDI3NWNtcD1rcih7dHlwZTpsLHNlbGVjdG9yczpbWyJhcHAtYWN0aW9ucyJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MTksdmFyczoxLGNvbnN0czpb'@;
put 'WzEsImNvbnRlbnQtYXJlYSJdLFsxLCJjYXJkIl0sWzEsImNhcmQtaGVhZGVyIiwiZC1mbGV4IiwiZmxleC1jb2x1bW4iLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsInRleHQtY2VudGVyIl0sWzEsImNvbG9yLWJsdWUiLCJmb250LXdlaWdodC03MDAiXSxbMSwicm93IiwiZC1mbGV4'@;
put 'IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsIm10LTIwIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwidGV4dC1jZW50ZXIiLDMsImNsaWNrIl0sWyJpZCIsImFwcHJvdmFsQnRuIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwidGV4dC1jZW50ZXIi'@;
put 'LDMsImNsaWNrIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1pbmZvLW91dGxpbmUiLCJ0ZXh0LWNlbnRlciIsMywiY2xpY2siXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxmKXsxJmEmJih5ZSgwLCJkaXYiLDApKDEsImRpdiIsMSkoMiwiZGl2IiwyKSgzLCJoMyIsMyksWWUoNCwiIFlvdSBzdWNj'@;
put 'ZXNmdWxseSBlZGl0ZWQgdGFibGUgIikseWUoNSwic3BhbiIsNCksWWUoNiksQ2UoKSgpLHllKDcsInAiLDMpKDgsImIiKSxZZSg5LCJQbGVhc2UgY2hvb3NlIGZyb20gdGhlIGZvbGxvd2luZyBhY3Rpb25zIiksQ2UoKSgpLHllKDEwLCJkaXYiLDUpKDExLCJidXR0b24iLDYpLEV0KCJjbGlj'@;
put 'ayIsZnVuY3Rpb24oKXtyZXR1cm4gZi5zdWJtaXR0ZWRUYWJsZVNjcmVlbigpfSksWWUoMTIsIiBHbyB0byBzdWJtaXR0ZWQgdGFibGUgc2NyZWVuICIpLENlKCkseWUoMTMsImJ1dHRvbiIsNiksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBmLnZpZXdlclRhYmxlU2NyZWVuKCl9KSxZ'@;
put 'ZSgxNCwiIEdvIHRvIGJhc2UgdGFibGUgc2NyZWVuICIpLENlKCkseWUoMTUsImJ1dHRvbiIsNyksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBmLmFwcHJvdmVUYWJsZVNjcmVlbigpfSksWWUoMTYsIiBHbyB0byBhcHByb3ZhbHMgc2NyZWVuICIpLENlKCkseWUoMTcsImJ1dHRvbiIs'@;
put 'OCksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBmLmdvQmFjaygpfSksWWUoMTgsIiBHbyBiYWNrIHRvIGVkaXRvciAiKSxDZSgpKCkoKSgpKCkpLDImYSYmKFNlKDYpLGFyKGYubGliZHMpKX19KSxsfSkoKTtmdW5jdGlvbiBVWmUobCxjKXsxJmwmJih5ZSgwLCJkaXYiLDEyKSx0bigx'@;
put 'LCJjbHItaWNvbiIsMTMpLHllKDIsImgzIiwxNCksWWUoMywiVGhlcmUgaXMgbm8gaGlzdG9yeSB0byBzaG93IiksQ2UoKSgpKX1mdW5jdGlvbiBaWmUobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJhIiwxNyksRXQoImNsaWNrIixmdW5jdGlvbigpe1V0KGEpO2NvbnN0IGQ9R2Uo'@;
put 'KS4kaW1wbGljaXQsaD1HZSgpO3JldHVybiBadChoLmdldFRhYmxlKGguYXBwcm92ZURhdGFbZF0pKX0pLFllKDEpLENlKCl9aWYoMiZsKXtjb25zdCBhPUdlKCkuJGltcGxpY2l0LGY9R2UoKTtTZSgxKSxhcihmLmFwcHJvdmVEYXRhW2FdKX19ZnVuY3Rpb24gWVplKGwsYyl7aWYoMSZsKXtj'@;
put 'b25zdCBhPVpuKCk7eWUoMCwiZGl2IikoMSwiYSIsMTcpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtVdChhKTtjb25zdCBkPUdlKCkuJGltcGxpY2l0LGg9R2UoKTtyZXR1cm4gWnQoaC5nZXRCYXNlVGFibGUoaC5hcHByb3ZlRGF0YVtkXSkpfSksWWUoMiwiVklFVyIpLENlKCkseWUoMywic3Bh'@;
put 'biIpLFllKDQsIiAvICIpLENlKCkseWUoNSwiYSIsMTcpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtVdChhKTtjb25zdCBkPUdlKCkuJGltcGxpY2l0LGg9R2UoKTtyZXR1cm4gWnQoaC5nZXRFZGl0VGFibGUoaC5hcHByb3ZlRGF0YVtkXSkpfSksWWUoNiwiRURJVCIpLENlKCkoKX19ZnVuY3Rp'@;
put 'b24gV1plKGwsYyl7aWYoMSZsJiYoeWUoMCwic3BhbiIpLFllKDEpLENlKCkpLDImbCl7Y29uc3QgYT1HZSgpLiRpbXBsaWNpdCxmPUdlKCk7U2UoMSksYXIoZi5hcHByb3ZlRGF0YVthXSl9fWZ1bmN0aW9uIEdaZShsLGMpe2lmKDEmbCYmKHllKDAsInRyIikoMSwidGQiLDYpLFllKDIpLENl'@;
put 'KCkseWUoMywidGQiLDYpLHR0KDQsWlplLDIsMSwiYSIsMTUpLHR0KDUsWVplLDcsMCwiZGl2IiwxNiksdHQoNixXWmUsMiwxLCJzcGFuIiwxNiksQ2UoKSgpKSwyJmwpe2NvbnN0IGE9Yy4kaW1wbGljaXQsZj1jLmluZGV4O1NlKDIpLGFyKGEpLFNlKDIpLFJlKCJuZ0lmIixmPDEpLFNlKDEp'@;
put 'LFJlKCJuZ0lmIixmPDImJmY+PTEpLFNlKDEpLFJlKCJuZ0lmIixmPj0yKX19ZnVuY3Rpb24gJFplKGwsYyl7MSZsJiYoeWUoMCwic3BhbiIsMjApLFllKDEsIiBMb2FkaW5nLi4uICIpLENlKCkpfWZ1bmN0aW9uIEtaZShsLGMpezEmbCYmKHllKDAsImRpdiIpKDEsImgzIiksWWUoMiwiTG9h'@;
put 'ZGluZyBoaXN0b3J5IiksQ2UoKSgpKX1mdW5jdGlvbiBxWmUobCxjKXtpZigxJmwmJih5ZSgwLCJkaXYiLDE4KSx0dCgxLCRaZSwyLDAsInNwYW4iLDE5KSx0dCgyLEtaZSwzLDAsImRpdiIsMTYpLENlKCkpLDImbCl7Y29uc3QgYT1HZSgpO1NlKDEpLFJlKCJuZ0lmIiwhYS5sb2FkZWQpLFNl'@;
put 'KDEpLFJlKCJuZ0lmIiwhYS5sb2FkZWQpfX1mdW5jdGlvbiBYWmUobCxjKXsxJmwmJih5ZSgwLCJoMyIsMjgpLFllKDEsIkhJU1RPUlkiKSxDZSgpKX1mdW5jdGlvbiBKWmUobCxjKXtpZigxJmwmJih5ZSgwLCJwIiwyOSksWWUoMSksQ2UoKSksMiZsKXtjb25zdCBhPUdlKDIpO1NlKDEpLHdy'@;
put 'KCIgVG8gdW5sb2NrIG1vcmUgdGhhbiAiLGEubGljZW5jZVN0YXRlLnZhbHVlLmhpc3Rvcnlfcm93c19hbGxvd2VkLCIgcmVjb3JkcywgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvICIpfX1jb25zdCBRWmU9ZnVuY3Rpb24obCxjKXtyZXR1cm57cmVqZWN0ZWQ6bCxhY2NlcHRl'@;
put 'ZDpjfX07ZnVuY3Rpb24gZVllKGwsYyl7aWYoMSZsKXtjb25zdCBhPVpuKCk7eWUoMCwiY2xyLWRnLXJvdyIsMzMpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPVV0KGEpLiRpbXBsaWNpdDtyZXR1cm4gWnQoR2UoMykuZ2V0QXBwckluZGV4KGgpKX0pLHllKDEsImNsci1kZy1jZWxs'@;
put 'IiwzNCkoMiwiYSIsMzUpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPVV0KGEpLiRpbXBsaWNpdDtyZXR1cm4gWnQoR2UoMykuZ2V0QmFzZVRhYmxlKGguYmFzZXRhYmxlKSl9KSxZZSgzKSxDZSgpKCkseWUoNCwiY2xyLWRnLWNlbGwiLDM2KSxZZSg1KSxDZSgpLHllKDYsImNsci1k'@;
put 'Zy1jZWxsIiwzNCksWWUoNyksQ2UoKSx5ZSg4LCJjbHItZGctY2VsbCIsMzQpLFllKDkpLENlKCkseWUoMTAsImNsci1kZy1jZWxsIiwzNCksWWUoMTEpLENlKCkseWUoMTIsImNsci1kZy1jZWxsIiwzNCksWWUoMTMpLENlKCkseWUoMTQsImNsci1kZy1jZWxsIiwzNykoMTUsImJ1dHRvbiIs'@;
put 'MzgpLEV0KCJjbGljayIsZnVuY3Rpb24oZCl7Y29uc3QgbT1VdChhKS4kaW1wbGljaXQ7cmV0dXJuIEdlKDMpLmRvd25sb2FkKG0udGFibGVJZCksWnQoZC5zdG9wUHJvcGFnYXRpb24oKSl9KSx0bigxNiwiY2xyLWljb24iLDM5KSxDZSgpKCkoKX1pZigyJmwpe2NvbnN0IGE9Yy4kaW1wbGlj'@;
put 'aXQ7U2UoMyksYXIoYS5iYXNldGFibGUpLFNlKDEpLFJlKCJuZ0NsYXNzIix3aCg3LFFaZSwiUkVKRUNURUQiPT09YS5zdGF0dXMsIkFQUFJPVkVEIj09PWEuc3RhdHVzKSksU2UoMSksYXIoYS5zdGF0dXMpLFNlKDIpLGFyKGEuc3VibWl0dGVyKSxTZSgyKSxhcihhLnN1Ym1pdHRlZFJlYXNv'@;
put 'biksU2UoMiksYXIoYS5zdWJtaXR0ZWQpLFNlKDIpLGFyKGEucmV2aWV3ZWQpfX1mdW5jdGlvbiB0WWUobCxjKXtpZigxJmwmJih5ZSgwLCJjbHItZGF0YWdyaWQiLDMwKSgxLCJjbHItZGctY29sdW1uIiwzMSksWWUoMiwiQkFTRV9UQUJMRSIpLENlKCkseWUoMywiY2xyLWRnLWNvbHVtbiIs'@;
put 'MzEpLFllKDQsIlNUQVRVUyIpLENlKCkseWUoNSwiY2xyLWRnLWNvbHVtbiIsMzEpLFllKDYsIlNVQk1JVFRFUiIpLENlKCkseWUoNywiY2xyLWRnLWNvbHVtbiIsMzEpLFllKDgsIlNVQk1JVCBSRUFTT04iKSxDZSgpLHllKDksImNsci1kZy1jb2x1bW4iLDMxKSxZZSgxMCwiU1VCTUlUVEVE'@;
put 'IiksQ2UoKSx5ZSgxMSwiY2xyLWRnLWNvbHVtbiIsMzEpLFllKDEyLCJBUFBST1ZFRCAvIFJFSkVDVEVEIiksQ2UoKSx5ZSgxMywiY2xyLWRnLWNvbHVtbiIpLFllKDE0LCJET1dOTE9BRCIpLENlKCksdHQoMTUsZVllLDE3LDEwLCJjbHItZGctcm93IiwzMiksQ2UoKSksMiZsKXtjb25zdCBh'@;
put 'PUdlKDIpO1NlKDEpLFJlKCJjbHJEZ0ZpZWxkIiwiYmFzZXRhYmxlIiksU2UoMiksUmUoImNsckRnRmllbGQiLCJzdGF0dXMiKSxTZSgyKSxSZSgiY2xyRGdGaWVsZCIsInN1Ym1pdHRlciIpLFNlKDIpLFJlKCJjbHJEZ0ZpZWxkIiwic3VibWl0dGVkUmVhc29uIiksU2UoMiksUmUoImNsckRn'@;
put 'RmllbGQiLCJzdWJtaXR0ZWQiKSxTZSgyKSxSZSgiY2xyRGdGaWVsZCIsInJldmlld2VkIiksU2UoNCksUmUoImNsckRnSXRlbXNPZiIsYS5oaXN0b3J5KX19ZnVuY3Rpb24gblllKGwsYyl7aWYoMSZsKXtjb25zdCBhPVpuKCk7eWUoMCwiYnV0dG9uIiw0MCksRXQoImNsaWNrIixmdW5jdGlv'@;
put 'bigpe3JldHVybiBVdChhKSxadChHZSgyKS5sb2FkRGF0YSgpKX0pLFllKDEpLENlKCl9aWYoMiZsKXtjb25zdCBhPUdlKDIpO1JlKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdNb3JlKSxTZSgxKSx3cigiIExvYWQgIixhLnJvd3NMZWZ0VG9Mb2FkLCIgbW9yZSAiKX19ZnVuY3Rpb24gclllKGws'@;
put 'Yyl7aWYoMSZsJiYoeWUoMCwiZGl2IiwyMSkoMSwiZGl2IiwyMiksdHQoMixYWmUsMiwwLCJoMyIsMjMpLHR0KDMsSlplLDIsMSwicCIsMjQpLENlKCksdHQoNCx0WWUsMTYsNywiY2xyLWRhdGFncmlkIiwyNSkseWUoNSwiZGl2IiwyNiksdHQoNixuWWUsMiwyLCJidXR0b24iLDI3KSxDZSgp'@;
put 'KCkpLDImbCl7Y29uc3QgYT1HZSgpO1NlKDIpLFJlKCJuZ0lmIixhLmxvYWRlZCksU2UoMSksUmUoIm5nSWYiLGEubGljZW5jZVN0YXRlLnZhbHVlLmhpc3Rvcnlfcm93c19hbGxvd2VkIT09YS5JbmZpbml0eSksU2UoMSksUmUoIm5nSWYiLGEubG9hZGVkKSxTZSgyKSxSZSgibmdJZiIsYS5s'@;
put 'aWNlbmNlU3RhdGUudmFsdWUuaGlzdG9yeV9yb3dzX2FsbG93ZWQ9PT1hLkluZmluaXR5JiZhLnJvd3NMZWZ0VG9Mb2FkPjApfX1sZXQgaVllPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmLGQsaCxtKXt0aGlzLmxpY2VuY2VTZXJ2aWNlPWEsdGhpcy5zYXNTdG9yZVNlcnZpY2U9Zix0'@;
put 'aGlzLmV2ZW50U2VydmljZT1kLHRoaXMucm91dGVyPWgsdGhpcy5zYXNTZXJ2aWNlPW0sdGhpcy5oaXN0b3J5PVtdLHRoaXMudGFibGVUaXRsZXM9W10sdGhpcy5oaXN0b3J5QXJyPVtdLHRoaXMubG9hZGVkPSExLHRoaXMuaXRlbXNOdW09MTAsdGhpcy5vcGVuTW9kYWw9ITEsdGhpcy5ub0Rh'@;
put 'dGE9ITEsdGhpcy5hcHByb3ZlRGF0YT17fSx0aGlzLnNhc2pzQ29uZmlnPW5ldyB2MS5TQVNqc0NvbmZpZyx0aGlzLmhpc3RQYXJhbXM9e0hJU1Q6MCxTVEFSVFJPVzoxLE5PQlM6LTF9LHRoaXMubG9hZGluZ01vcmU9ITEsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5s'@;
put 'aWNlbmNlU3RhdGUsdGhpcy5JbmZpbml0eT0xLzAsdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKX1nZXRUYWJsZShhKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvc3RhZ2UvIithKX1nZXRCYXNlVGFibGUoYSl7dGhpcy5yb3V0ZXIubmF2aWdh'@;
put 'dGVCeVVybCgiL3ZpZXcvZGF0YS8iK2EpfWdldEVkaXRUYWJsZShhKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZWRpdG9yLyIrYSl9Z2V0QXBwckluZGV4KGEpe2NvbnN0IGY9dGhpcy5oaXN0b3J5QXJyLmZpbmRJbmRleChkPT5kLlRBQkxFX0lEPT09YS50YWJsZUlkKTtmPi0xJiYo'@;
put 'dGhpcy5hcHByb3ZlRGF0YT10aGlzLmhpc3RvcnlBcnJbZl0sdGhpcy5vcGVuTW9kYWw9ITApfWdldCByb3dzTGVmdFRvTG9hZCgpe2NvbnN0IGE9dGhpcy5oaXN0UGFyYW1zLk5PQlMtdGhpcy5oaXN0b3J5Lmxlbmd0aCxmPXRoaXMuaGlzdFBhcmFtcy5ISVNUO3JldHVybiBhPD0wPzA6YT5m'@;
put 'P2Y6YX1kb3dubG9hZChhKXtsZXQgZj10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSxkPWYuc2VydmVyVXJsLGg9Zi5hcHBMb2MsbT10aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO3dpbmRvdy5vcGVuKGQrbSsiLz9fcHJvZ3JhbT0iK2grIi9zZXJ2aWNlcy9hdWRp'@;
put 'dG9ycy9nZXRhdWRpdGZpbGUmdGFibGU9IithKyImX2NvbnRleHRuYW1lPSIrdGhpcy5zYXNqc0NvbmZpZy5jb250ZXh0TmFtZSl9bG9hZERhdGEoKXt2YXIgYT10aGlzO3JldHVybiB5aShmdW5jdGlvbiooKXtsZXQgZj17U1RBUlRST1c6YS5oaXN0UGFyYW1zLkhJU1QrYS5oaXN0UGFyYW1z'@;
put 'LlNUQVJUUk9XfTthLmxvYWRpbmdNb3JlPSEwO3RyeXtsZXQgaCxkPXlpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLmdldEhpc3RvcnkoZiwiQnJvd3NlclBhcmFtcyIsImFwcHJvdmVycy9nZXRoaXN0b3J5Iik7YS5sb2FkaW5nTW9yZT0hMSxhLmhpc3RQYXJhbXM9ZC5oaXN0cGFyYW1zWzBdO2Nv'@;
put 'bnN0IG09ZC5mcm9tc2FzLnNsaWNlKDAsYS5saWNlbmNlU3RhdGUudmFsdWUuaGlzdG9yeV9yb3dzX2FsbG93ZWQpO2lmKG0ubGVuZ3RoPjApe2NvbnN0IF89bTthLmhpc3RvcnlBcnI9bSxoPU9iamVjdC5rZXlzKF9bMF0pLGEudGFibGVUaXRsZXM9aDtsZXQgTz1tLm1hcChmdW5jdGlvbihY'@;
put 'KXtyZXR1cm57dGFibGVJZDpYLlRBQkxFX0lELHN1Ym1pdHRlcjpYLlNVQk1JVFRFUixzdWJtaXR0ZWRSZWFzb246WC5TVUJNSVRURURfUkVBU09OX1RYVCxzdWJtaXR0ZWQ6WC5TVUJNSVRURUQsc3RhdHVzOlguU1RBVFVTLHJldmlld1JlYXNvbjpYLlJFVklFV19SRUFTT05fVFhULHJldmll'@;
put 'd2VyOlguUkVWSUVXRVIscmV2aWV3ZWQ6WC5SRVZJRVdFRCxudW1PZkFwcHJvdmFsczpYLk5VTV9PRl9BUFBST1ZBTFNfUkVRVUlSRUQsYmFzZXRhYmxlOlguQkFTRV9UQUJMRX19KTthLmhpc3RvcnkucHVzaCguLi5PKSxhLmxvYWRlZD0hMH1lbHNlIGEubG9hZGVkPSEwLDA9PT1hLmhpc3Rv'@;
put 'cnkubGVuZ3RoJiYoYS5ub0RhdGE9ITApfWNhdGNoKGQpe2EuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigiYXBwcm92ZXJzL2dldGhpc3RvcnkiLGQpLGEubG9hZGluZ01vcmU9ITF9fSkoKX1uZ09uSW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIHlpKGZ1bmN0aW9uKigpe2EubG9h'@;
put 'ZERhdGEoKX0pKCl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHJ0KGIxKSxydChMZCkscnQoUnMpLHJ0KExhKSxydChwbCkpfSxsLlx1MDI3NWNtcD1rcih7dHlwZTpsLHNlbGVjdG9yczpbWyJhcHAtaGlzdG9yeSJdXSxob3N0QXR0cnM6WzEsImNv'@;
put 'bnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MjAsdmFyczo2LGNvbnN0czpbWzEsImNvbnRlbnQtYXJlYSJdLFsiaWQiLCJub0RhdGFDb250YWluZXIiLCJjbGFzcyIsImNhcmQtYmxvY2sgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVy'@;
put 'Iiw0LCJuZ0lmIl0sWzMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsT3BlbkNoYW5nZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsInRhYmxlIl0sWzEsImxlZnQiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsIm1vZGFsLWZvb3RlciJd'@;
put 'LFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWyJjbGFzcyIsImgtNzB2aCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2FyZCIsNCwibmdJZiJd'@;
put 'LFsiaWQiLCJub0RhdGFDb250YWluZXIiLDEsImNhcmQtYmxvY2siLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsInNpemUiLCI2MCIsMSwiaXMtaW5mbyJdLFsx'@;
put 'LCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiXSxbImNsYXNzIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWzEsImgtNzB2aCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJm'@;
put 'bGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xhc3MiLCJzcGlubmVyIiw0LCJuZ0lmIl0sWzEsInNwaW5uZXIiXSxbMSwiY2FyZCJdLFsxLCJjYXJkLWhlYWRlciJdLFsiY2xhc3MiLCJjZW50ZXIgY2xyLWNvbC1tZC0xMiB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsiY2xh'@;
put 'c3MiLCJ0ZXh0LWNlbnRlciBmb250LXdlaWdodC03MDAgY29sb3ItZGFyay1ncmF5Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImRhdGFncmlkLWhpc3RvcnkgZGF0YWdyaWQtY3VzdG9tLWZvb3RlciIsNCwibmdJZiJdLFsxLCJsb2FkLW1vcmUiLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50'@;
put 'LWNlbnRlciIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbImNsYXNzIiwiYnRuIGJ0bi1zdWNjZXNzIiwzLCJjbHJMb2FkaW5nIiwiY2xpY2siLDQsIm5nSWYiXSxbMSwiY2VudGVyIiwiY2xyLWNvbC1tZC0xMiIsInRleHQtY2VudGVyIl0sWzEsInRleHQtY2VudGVyIiwiZm9udC13ZWln'@;
put 'aHQtNzAwIiwiY29sb3ItZGFyay1ncmF5Il0sWzEsImRhdGFncmlkLWhpc3RvcnkiLCJkYXRhZ3JpZC1jdXN0b20tZm9vdGVyIl0sWzMsImNsckRnRmllbGQiXSxbMywiY2xpY2siLDQsImNsckRnSXRlbXMiLCJjbHJEZ0l0ZW1zT2YiXSxbMywiY2xpY2siXSxbMSwidmVyQ2VudGVyIl0sWzEs'@;
put 'ImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwibS0wIiwzLCJjbGljayJdLFsxLCJ2ZXJDZW50ZXIiLDMsIm5nQ2xhc3MiXSxbMSwidmVyQ2VudGVyIiwicC0wIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJidG4iLCJidG4tc3VjY2VzcyIsMywiY2xpY2siXSxbInNo'@;
put 'YXBlIiwiZG93bmxvYWQiXSxbMSwiYnRuIiwiYnRuLXN1Y2Nlc3MiLDMsImNsckxvYWRpbmciLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGYpezEmYSYmKHllKDAsImRpdiIsMCksdHQoMSxVWmUsNCwwLCJkaXYiLDEpLHllKDIsImNsci1tb2RhbCIsMiksRXQoImNsck1vZGFsT3Bl'@;
put 'bkNoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIGYub3Blbk1vZGFsPWh9KSx5ZSgzLCJoNCIsMyksWWUoNCwiQXBwcm92YWwgZGV0YWlscyIpLENlKCkseWUoNSwiZGl2Iiw0KSg2LCJ0YWJsZSIsNSkoNywidGhlYWQiKSg4LCJ0ciIpKDksInRoIiw2KSxZZSgxMCwiTmFtZSIpLENlKCkseWUo'@;
put 'MTEsInRoIiw2KSxZZSgxMiwiVmFsdWUiKSxDZSgpKCkoKSx5ZSgxMywidGJvZHkiKSx0dCgxNCxHWmUsNyw0LCJ0ciIsNyksQ2UoKSgpKCkseWUoMTUsImRpdiIsOCkoMTYsImJ1dHRvbiIsOSksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBmLm9wZW5Nb2RhbD0hMX0pLFllKDE3LCIg'@;
put 'T0sgIiksQ2UoKSgpKCksdHQoMTgscVplLDMsMiwiZGl2IiwxMCksdHQoMTksclllLDcsNCwiZGl2IiwxMSksQ2UoKSksMiZhJiYoU2UoMSksUmUoIm5nSWYiLGYubm9EYXRhKSxTZSgxKSxSZSgiY2xyTW9kYWxPcGVuIixmLm9wZW5Nb2RhbCkoImNsck1vZGFsU2l6ZSIsInhsIiksU2UoMTIp'@;
put 'LFJlKCJuZ0Zvck9mIixmLnRhYmxlVGl0bGVzKSxTZSg0KSxSZSgibmdJZiIsIWYubG9hZGVkKSxTZSgxKSxSZSgibmdJZiIsIWYubm9EYXRhJiZmLmxvYWRlZCkpfSxkZXBlbmRlbmNpZXM6W3l1LFJhLCRpLFM3LHc0LEpnLF83LFFnLGU1LHQ1LGs3LG41LHY3LGI0LGI3LFJsLE1jLGtjLEpj'@;
put 'LEloXSxzdHlsZXM6WyIucmVqZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmODMxMjY7Zm9udC13ZWlnaHQ6NzAwfS5hY2NlcHRlZFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzNmYzQyNDtmb250LXdlaWdodDo3MDB9LmhzQ2VsbFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxh'@;
put 'eTpmbGV4IWltcG9ydGFudDtmbGV4LWRpcmVjdGlvbjpjb2x1bW4haW1wb3J0YW50O2p1c3RpZnktY29udGVudDpjZW50ZXIhaW1wb3J0YW50O2FsaWduLWl0ZW1zOmNlbnRlciFpbXBvcnRhbnQ7cGFkZGluZzo3cHh9LmJ0Q2VsbFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4IWlt'@;
put 'cG9ydGFudDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyIWltcG9ydGFudH0udmVyQ2VudGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO3dvcmQtYnJlYWs6YnJlYWstYWxsfS5sb2FkLW1vcmVbX25nY29udGVudC0lQ09NUCVdICAgaW5wdXRbX25n'@;
put 'Y29udGVudC0lQ09NUCVde3dpZHRoOjkwcHh9I25vRGF0YUNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OmNhbGMoMTAwdmggLSAyMDBweCl9Il19KSxsfSkoKSxvWWU9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3Rvcigpe31uZ09uSW5pdCgpe319cmV0dXJuIGwuXHUwMjc1ZmFj'@;
put 'PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1Y21wPWtyKHt0eXBlOmwsc2VsZWN0b3JzOltbImFwcC1ub3QtZm91bmQiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjMsdmFyczowLGNvbnN0czpbWzEsImNvbnRlbnQtYXJlYSJdXSx0ZW1w'@;
put 'bGF0ZTpmdW5jdGlvbihhLGYpezEmYSYmKHllKDAsImRpdiIsMCkoMSwicCIpLFllKDIsIjQwNCAtIE5vdCBGb3VuZCIpLENlKCkoKSl9fSksbH0pKCk7ZnVuY3Rpb24gYVllKGwsYyl7MSZsJiYoeWUoMCwiZGl2IiwxMikoMSwiZGl2IiwxMyksdG4oMiwiY2xyLWljb24iLDE0KSx5ZSgzLCJo'@;
put 'MyIsMTUpLFllKDQsIiBZb3UgaGF2ZSBub3Qgc3VibWl0dGVkIGFueSB0YWJsZXMgIiksQ2UoKSgpKCkpfWZ1bmN0aW9uIGxZZShsLGMpezEmbCYmKHllKDAsImgzIiwxNiksWWUoMSwiIFNVQk1JVCBRVUVVRSAiKSxDZSgpKX1mdW5jdGlvbiBzWWUobCxjKXtpZigxJmwmJih5ZSgwLCJwIiwx'@;
put 'NyksWWUoMSwiIFlvdSBoYXZlICIpLHllKDIsInNwYW4iKSxZZSgzKSxDZSgpLFllKDQsInN1Ym1pc3Npb25zIHdhaXRpbmcgdG8gYmUgYXBwcm92ZWQgIiksQ2UoKSksMiZsKXtjb25zdCBhPUdlKDMpO1NlKDMpLHdyKCIiLGEucmVtYWluZWQsIiAiKX19ZnVuY3Rpb24gdVllKGwsYyl7MSZs'@;
put 'JiYoeWUoMCwic3BhbiIsMjApLFllKDEsIiBMb2FkaW5nLi4uICIpLENlKCkpfWZ1bmN0aW9uIGNZZShsLGMpezEmbCYmKHllKDAsImRpdiIpKDEsImgzIiksWWUoMiwiTG9hZGluZyBzdWJtaXR0ZWQgbGlzdCIpLENlKCkoKSl9ZnVuY3Rpb24gZlllKGwsYyl7aWYoMSZsJiYoeWUoMCwiZGl2'@;
put 'IiwxOCksdHQoMSx1WWUsMiwwLCJzcGFuIiwxOSksdHQoMixjWWUsMywwLCJkaXYiLDIpLENlKCkpLDImbCl7Y29uc3QgYT1HZSgzKTtTZSgxKSxSZSgibmdJZiIsIWEubG9hZGVkKSxTZSgxKSxSZSgibmdJZiIsIWEubG9hZGVkKX19ZnVuY3Rpb24gZFllKGwsYyl7aWYoMSZsKXtjb25zdCBh'@;
put 'PVpuKCk7eWUoMCwiY2xyLWRnLXJvdyIsMzApLEV0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPVV0KGEpLiRpbXBsaWNpdDtyZXR1cm4gWnQoR2UoNSkuZ29Ub0RldGFpbHMoaC50YWJsZUlkKSl9KSx5ZSgxLCJjbHItZGctY2VsbCIpLFllKDIpLENlKCkseWUoMywiY2xyLWRnLWNlbGwi'@;
put 'KSxZZSg0KSxDZSgpLHllKDUsImNsci1kZy1jZWxsIiksWWUoNiksQ2UoKSx5ZSg3LCJjbHItZGctY2VsbCIpKDgsImRpdiIsMzEpKDksImEiLDMyKSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD1VdChhKS4kaW1wbGljaXQ7cmV0dXJuIFp0KEdlKDUpLmdvVG9TdGFnZShoLnRhYmxl'@;
put 'SWQpKX0pLHRuKDEwLCJjbHItaWNvbiIsMzMpLHllKDExLCJzcGFuIiwzNCksWWUoMTIsIkdvIHRvIHN0YWdlZCBkYXRhIHNjcmVlbiIpLENlKCkoKSgpKCkseWUoMTMsImNsci1kZy1jZWxsIiwzNSkoMTQsImJ1dHRvbiIsMzYpLEV0KCJjbGljayIsZnVuY3Rpb24oZCl7Y29uc3QgbT1VdChh'@;
put 'KS4kaW1wbGljaXQ7cmV0dXJuIEdlKDUpLmRvd25sb2FkKG0udGFibGVJZCksWnQoZC5zdG9wUHJvcGFnYXRpb24oKSl9KSx0bigxNSwiY2xyLWljb24iLDM3KSxDZSgpKCkoKX1pZigyJmwpe2NvbnN0IGE9Yy4kaW1wbGljaXQ7U2UoMiksYXIoYS5iYXNlKSxTZSgyKSxhcihhLnN1Ym1pdHRl'@;
put 'ZCksU2UoMiksYXIoYS5zdWJtaXRSZWFzb24pfX1mdW5jdGlvbiBoWWUobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJkaXYiKSgxLCJjbHItZGF0YWdyaWQiLDIyKSgyLCJjbHItZGctY29sdW1uIiksWWUoMywiQkFTRSBUQUJMRSIpLENlKCkseWUoNCwiY2xyLWRnLWNvbHVtbiIs'@;
put 'MjMpLFllKDUsIlNVQk1JVFRFRCIpLENlKCkseWUoNiwiY2xyLWRnLWNvbHVtbiIsMjMpLFllKDcsIlNVQk1JVCBSRUFTT04iKSxDZSgpLHllKDgsImNsci1kZy1jb2x1bW4iLDEyKSxZZSg5LCJBQ1RJT04iKSxDZSgpLHllKDEwLCJjbHItZGctY29sdW1uIiwxMiksWWUoMTEsIkRPV05MT0FE'@;
put 'IiksQ2UoKSx0dCgxMixkWWUsMTYsMywiY2xyLWRnLXJvdyIsMjQpLHllKDEzLCJjbHItZGctZm9vdGVyIiwyNSkoMTQsInNwYW4iKSxZZSgxNSwiaXRlbXMgcGVyIHBhZ2UiKSxDZSgpLHllKDE2LCJzZWxlY3QiLDI2KSxFdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oZCl7cmV0dXJuIFV0'@;
put 'KGEpLFp0KEdlKDQpLml0ZW1zTnVtPWQpfSkseWUoMTcsIm9wdGlvbiIsMjcpLFllKDE4LCIzIiksQ2UoKSx5ZSgxOSwib3B0aW9uIiwyNyksWWUoMjAsIjUiKSxDZSgpLHllKDIxLCJvcHRpb24iLDI3KSxZZSgyMiwiMTAiKSxDZSgpLHllKDIzLCJvcHRpb24iLDI3KSxZZSgyNCwiMTUiKSxD'@;
put 'ZSgpKCkseWUoMjUsImNsci1kZy1wYWdpbmF0aW9uIiwyOCwyOSksWWUoMjcpLENlKCkoKSgpKCl9aWYoMiZsKXtjb25zdCBhPVFpKDI2KSxmPUdlKDQpO1NlKDQpLFJlKCJjbHJEZ0ZpZWxkIiwic3VibWl0dGVkIiksU2UoMiksUmUoImNsckRnRmllbGQiLCJzdWJtaXRSZWFzb24iKSxTZSg2'@;
put 'KSxSZSgiY2xyRGdJdGVtc09mIixmLnN1Ym1pdHRlckxpc3QpLFNlKDQpLFJlKCJuZ01vZGVsIixmLml0ZW1zTnVtKSxTZSgxKSxSZSgibmdWYWx1ZSIsMyksU2UoMiksUmUoIm5nVmFsdWUiLDUpLFNlKDIpLFJlKCJuZ1ZhbHVlIiwxMCksU2UoMiksUmUoIm5nVmFsdWUiLDE1KSxTZSgyKSxS'@;
put 'ZSgiY2xyRGdQYWdlU2l6ZSIsZi5pdGVtc051bSksU2UoMiksTzAoIiAiLGEuZmlyc3RJdGVtKzEsIiAtICIsYS5sYXN0SXRlbSsxLCIgb2YgIixhLnRvdGFsSXRlbXMsIiBzdWJtaXNzaW9ucyAiKX19ZnVuY3Rpb24gcFllKGwsYyl7aWYoMSZsJiYoeWUoMCwiZGl2IiwyMSksdHQoMSxoWWUs'@;
put 'MjgsMTIsImRpdiIsMiksQ2UoKSksMiZsKXtjb25zdCBhPUdlKDMpO1NlKDEpLFJlKCJuZ0lmIixhLnN1Ym1pdHRlckxpc3QmJjAhPT1hLnJlbWFpbmVkKX19Y29uc3QgbVllPWZ1bmN0aW9uKGwpe3JldHVybntub0JvcmRlcjpsfX07ZnVuY3Rpb24gZ1llKGwsYyl7aWYoMSZsJiYoeWUoMCwi'@;
put 'ZGl2Iiw1KSx0dCgxLGFZZSw1LDAsImRpdiIsNikseWUoMiwiZGl2Iiw3KSx0dCgzLGxZZSwyLDAsImgzIiw4KSx0dCg0LHNZZSw1LDEsInAiLDkpLENlKCksdHQoNSxmWWUsMywyLCJkaXYiLDEwKSx0dCg2LHBZZSwyLDEsImRpdiIsMTEpLENlKCkpLDImbCl7Y29uc3QgYT1HZSgyKTtTZSgx'@;
put 'KSxSZSgibmdJZiIsMD09PWEucmVtYWluZWQmJmEubG9hZGVkKSxTZSgxKSxSZSgibmdDbGFzcyIsX2goNixtWWUsIWEubG9hZGVkKSksU2UoMSksUmUoIm5nSWYiLDAhPT1hLnJlbWFpbmVkKSxTZSgxKSxSZSgibmdJZiIsYS5sb2FkZWQmJjAhPT1hLnJlbWFpbmVkKSxTZSgxKSxSZSgibmdJ'@;
put 'ZiIsIWEubG9hZGVkKSxTZSgxKSxSZSgibmdJZiIsYS5sb2FkZWQpfX1mdW5jdGlvbiB2WWUobCxjKXtpZigxJmwmJih5ZSgwLCJkaXYiLDMpLHR0KDEsZ1llLDcsOCwiZGl2Iiw0KSxDZSgpKSwyJmwpe2NvbnN0IGE9R2UoKTtTZSgxKSxSZSgibmdJZiIsIWEuc3ViUmVhZHkpfX1mdW5jdGlv'@;
put 'biB5WWUobCxjKXsxJmwmJih5ZSgwLCJkaXYiKSx0bigxLCJhcHAtYXBwcm92ZS1kZXRhaWxzIiksQ2UoKSl9bGV0IEdaPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmLGQsaCxtKXt0aGlzLnNhc1N0b3JlU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWYsdGhpcy5yb3V0ZXI9ZCx0'@;
put 'aGlzLnJvdXRlPWgsdGhpcy5zYXNTZXJ2aWNlPW0sdGhpcy5yZW1haW5lZD0wLHRoaXMubG9hZGVkPSExLHRoaXMuc3ViUmVhZHk9ITEsdGhpcy5kZXRhaWxzT3Blbj0hMX1nb1RvU3RhZ2UoYSl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrYSl9Z29Ub0RldGFpbHMoYSl7'@;
put 'dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3N1Ym1pdHRlZC8iK2EpfWdldERldGFpbHMoYSxmKXt0aGlzLnN1YlJlYWR5PSEwLHNldFRpbWVvdXQoKCk9Pnt0aGlzLnNhc1N0b3JlU2VydmljZS5zZW5kRGV0YWlscyhhLGYsdGhpcy5zdWJtaXREYXRhKX0sMCl9bmdPbkluaXQoKXt2YXIg'@;
put 'YT10aGlzO3JldHVybiB5aShmdW5jdGlvbiooKXtjb25zdCBmPWEucm91dGUuc25hcHNob3QucGFyYW1zLnRhYmxlSWQ7YS5pdGVtc051bT0xMDt0cnl7bGV0IGQ9eWllbGQgYS5zYXNTdG9yZVNlcnZpY2UuZ2V0U3VibWl0dHMoKTtpZihhLnJlbWFpbmVkPWQuZnJvbXNhcy5sZW5ndGgsYS5y'@;
put 'ZW1haW5lZD4wKXthLnN1Ym1pdHRlcj1kLmZyb21zYXNbMF0uU1VCTUlUVEVEX0JZX05NO2xldCBoPWQuZnJvbXNhcy5tYXAoZnVuY3Rpb24obSl7cmV0dXJue3RhYmxlSWQ6bS5UQUJMRV9JRCxiYXNlOm0uQkFTRV9UQUJMRSxzdWJtaXR0ZWQ6bS5TVUJNSVRURURfT05fRFRUTSxzdWJtaXR0'@;
put 'ZXI6bS5TVUJNSVRURURfQllfTk0sc3VibWl0UmVhc29uOm0uU1VCTUlUVEVEX1JFQVNPTl9UWFR9fSk7aWYoYS5zdWJtaXR0ZXJMaXN0PWgsYS5zdWJtaXREYXRhPWQuZnJvbXNhcyx0eXBlb2YgZjwidSIpe2NvbnN0IG09YS5zdWJtaXR0ZXJMaXN0LmZpbmRJbmRleChfPT5fLnRhYmxlSWQ9'@;
put 'PT1mKTttPi0xJiZhLmdldERldGFpbHMoYS5zdWJtaXR0ZXJMaXN0W21dLG0pfX1hLmxvYWRlZD0hMH1jYXRjaChkKXthLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoImVkaXRvcnMvZ2V0c3VibWl0cyIsZCl9fSkoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9yZWFkeVN1Yj10'@;
put 'aGlzLnNhc1N0b3JlU2VydmljZS5zZXRTdWJtaXQuc3Vic2NyaWJlKGE9Pnt0aGlzLnN1YlJlYWR5PWF9KSx0aGlzLl9iYWNrVG9TdWI9dGhpcy5zYXNTdG9yZVNlcnZpY2Uuc2V0U3VibWl0TGlzdC5zdWJzY3JpYmUoYT0+e3RoaXMuc3ViUmVhZHk9IXRoaXMuc3ViUmVhZHksdGhpcy5kZXRh'@;
put 'aWxzT3Blbj0hMX0pfWRvd25sb2FkKGEpe2xldCBmPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLGQ9Zi5zZXJ2ZXJVcmwsaD1mLmFwcExvYyxtPXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7d2luZG93Lm9wZW4oZCttKyIvP19wcm9ncmFtPSIraCsiL3NlcnZp'@;
put 'Y2VzL2F1ZGl0b3JzL2dldGF1ZGl0ZmlsZSZ0YWJsZT0iK2EpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChMZCkscnQoUnMpLHJ0KExhKSxydCh0dSkscnQocGwpKX0sbC5cdTAyNzVjbXA9a3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siYXBwLXN1'@;
put 'Ym1pdHRlciJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbMSwidy0xMDAiXSxbImNsYXNzIiwiY29udGVudC1hcmVhIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwiY29udGVudC1hcmVhIl0sWyJjbGFzcyIsImNhcmQiLDQsIm5n'@;
put 'SWYiXSxbMSwiY2FyZCJdLFsiY2xhc3MiLCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciIsNCwibmdJZiJdLFsxLCJjYXJkLWhlYWRlciIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJjZW50ZXIgY2xyLWNvbC1tZC0xMiB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJ0ZXh0'@;
put 'LWNlbnRlciBmb250LXdlaWdodC03MDAgY29sb3ItZGFyay1ncmF5Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImgtNzB2aCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLWNvbC1tZC0xMiIs'@;
put 'NCwibmdJZiJdLFsxLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsIm5vLXN1Ym1pdHRlZC10YWJsZXMiLCJjYXJkLWJsb2NrIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJzaGFwZSIs'@;
put 'Indhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwiNjAiLDEsImlzLWluZm8iXSxbMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5Il0sWzEsImNlbnRlciIsImNsci1jb2wtbWQtMTIiLCJ0ZXh0LWNlbnRlciJdLFsxLCJ0ZXh0LWNlbnRlciIsImZvbnQtd2VpZ2h0LTcwMCIsImNvbG9yLWRhcmst'@;
put 'Z3JheSJdLFsxLCJoLTcwdmgiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbImNsYXNzIiwic3Bpbm5lciIsNCwibmdJZiJdLFsxLCJzcGlubmVyIl0sWzEsImNsci1jb2wtbWQtMTIiXSxbMSwiZGF0YWdyaWQt'@;
put 'Y29tcGFjdCIsImRhdGFncmlkLWN1c3RvbS1mb290ZXIiXSxbMywiY2xyRGdGaWVsZCJdLFsiY2xhc3MiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siLDQsImNsckRnSXRlbXMiLCJjbHJEZ0l0ZW1zT2YiXSxbMSwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LXN0YXJ0Il0sWzMsIm5nTW9k'@;
put 'ZWwiLCJuZ01vZGVsQ2hhbmdlIl0sWzMsIm5nVmFsdWUiXSxbMSwiY2VudGVyIiwzLCJjbHJEZ1BhZ2VTaXplIl0sWyJwYWdpbmF0aW9uIiwiIl0sWzEsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsicm9sZSIsInRvb2x0aXAiLDEsInJvdyIsImp1c3RpZnktY29udGVudC1hcm91bmQi'@;
put 'XSxbMSwiY29sdW1uLWNlbnRlciIsImxpbmtzIiwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwiY29sb3ItYmx1ZSIsMywiY2xpY2siXSxbInNoYXBlIiwiY29kZSIsInNpemUiLCIyOCJdLFsxLCJ0b29sdGlwLWNvbnRlbnQiXSxbMSwicC0wIiwiZC1mbGV4'@;
put 'IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJidG4iLCJidG4tc3VjY2VzcyIsMywiY2xpY2siXSxbInNoYXBlIiwiZG93bmxvYWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxmKXsxJmEmJih5ZSgwLCJkaXYiLDApLHR0KDEsdlllLDIsMSwiZGl2IiwxKSx0dCgyLHlZZSwyLDAsImRp'@;
put 'diIsMiksQ2UoKSksMiZhJiYoU2UoMSksUmUoIm5nSWYiLCFmLnN1YlJlYWR5KSxTZSgxKSxSZSgibmdJZiIsZi5zdWJSZWFkeSkpfSxkZXBlbmRlbmNpZXM6W3l1LCRpLFMxLE0xLEwwLFdhLHphLFM3LHc0LEpnLGhJLF83LHBJLFFnLGU1LHQ1LGs3LG41LHY3LGI0LGI3LFJsLGJjZV0sc3R5'@;
put 'bGVzOlsiLm5vQm9yZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCB0cmFuc3BhcmVudCFpbXBvcnRhbnR9LnRvb2x0aXAudG9vbHRpcC1ib3R0b20tbGVmdFtfbmdjb250ZW50LSVDT01QJV0gPiAudG9vbHRpcC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAl'@;
put 'XSwgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWJvdHRvbS1sZWZ0W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiMzMTQzNTEhaW1wb3J0YW50fS50b29sdGlwLnRvb2x0aXAtYm90dG9tLWxlZnRbX25nY29udGVudC0lQ09NUCVd'@;
put 'ID4gLnRvb2x0aXAtY29udGVudFtfbmdjb250ZW50LSVDT01QJV06YmVmb3JlLCAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtYm90dG9tLWxlZnRbX25nY29udGVudC0lQ09NUCVdOmJlZm9yZXtib3JkZXItcmlnaHQ6LjI1cmVtIHNvbGlk'@;
put 'ICMzMTQzNTE7Ym9yZGVyLWJvdHRvbTouMjA4MzNyZW0gc29saWQgIzMxNDM1MX0ubm8tc3VibWl0dGVkLXRhYmxlc1tfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OmNhbGMoMTAwdmggLSAyMDBweCl9Il19KSxsfSkoKSxiWWU9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3Rvcigpe31uZ09uSW5p'@;
put 'dCgpe319cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1Y21wPWtyKHt0eXBlOmwsc2VsZWN0b3JzOltbImFwcC1hcHByb3ZlLXJvdXRlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczoxLHZhcnM6MCx0ZW1w'@;
put 'bGF0ZTpmdW5jdGlvbihhLGYpezEmYSYmdG4oMCwicm91dGVyLW91dGxldCIpfSxkZXBlbmRlbmNpZXM6W3h2XX0pLGx9KSgpLF9jZT0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKCl7fWRvd25sb2FkRmlsZShhLGYsZD0idHh0Iil7bGV0IGg9bmV3IEJsb2IoW2FdLHt0eXBlOiJ0ZXh0L3Bs'@;
put 'YWluIn0pO2lmKG5hdmlnYXRvci5hcHBWZXJzaW9uLnRvU3RyaW5nKCkuaW5kZXhPZigiLk5FVCIpPjApd2luZG93Lm5hdmlnYXRvci5tc1NhdmVCbG9iKGgsYCR7Zn0uJHtkfWApO2Vsc2V7bGV0IG09ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO20uaHJlZj0iZGF0YTp0ZXh0L3BsYWlu'@;
put 'LCIrZW5jb2RlVVJJQ29tcG9uZW50KGEpLG0uZG93bmxvYWQ9YCR7Zn0uJHtkfWAsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChtKSxtLmNsaWNrKCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChtKX19cmVhZEZpbGUoYSl7cmV0dXJuIG5ldyBQcm9taXNlKChmLGQpPT57bGV0IGg9bmV3'@;
put 'IEZpbGVSZWFkZXI7aC5vbmxvYWQ9KCk9PntoLnJlc3VsdCYmZihKU09OLnBhcnNlKGgucmVzdWx0LnRvU3RyaW5nKCkpKX0saC5yZWFkQXNUZXh0KGEpfSl9Y2xlYXJVcGxvYWRJbnB1dChhKXthLnRhcmdldC52YWx1ZT0iIn19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy'@;
put 'biBuZXcoYXx8bCl9LGwuXHUwMjc1cHJvdj1ocih7dG9rZW46bCxmYWN0b3J5OmwuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbH0pKCk7ZnVuY3Rpb24gX1llKGwsYyl7MSZsJiYoeWUoMCwiZGl2Iiw2KSgxLCJwIiw3KSxZZSgyLCJQbGVhc2UgbG9nIGluIGZpcnN0IiksQ2UoKSx5'@;
put 'ZSgzLCJsYWJlbCIsOCksWWUoNCwiVXNlcm5hbWUiKSxDZSgpLHllKDUsImRpdiIsOSkoNiwiZGl2IiwxMCksdG4oNywiaW5wdXQiLDExKSxDZSgpKCkseWUoOCwibGFiZWwiLDEyKSxZZSg5LCJQYXNzd29yZCIpLENlKCkseWUoMTAsImRpdiIsOSkoMTEsImRpdiIsMTApLHRuKDEyLCJpbnB1'@;
put 'dCIsMTMpLENlKCkoKSx5ZSgxMywiYnV0dG9uIiwxNCksWWUoMTQsIkxvZyBpbiIpLENlKCkoKSl9ZnVuY3Rpb24gd1llKGwsYyl7aWYoMSZsJiYoeWUoMCwib3B0aW9uIiwzNiksWWUoMSksQ2UoKSksMiZsKXtjb25zdCBhPWMuJGltcGxpY2l0O1JlKCJ2YWx1ZSIsYS5pZCksU2UoMSksd3Io'@;
put 'IiAiLGEubmFtZSwiICIpfX1mdW5jdGlvbiBDWWUobCxjKXtpZigxJmwmJih5ZSgwLCJzcGFuIiksWWUoMSksQ2UoKSksMiZsKXtjb25zdCBhPUdlKCkuJGltcGxpY2l0O1NlKDEpLHdyKCIoICIsYS5hdHRyaWJ1dGVzLnN5c1VzZXJJZCwiICkiKX19ZnVuY3Rpb24gU1llKGwsYyl7aWYoMSZs'@;
put 'JiYoeWUoMCwib3B0aW9uIiwzNiksWWUoMSksdHQoMixDWWUsMiwxLCJzcGFuIiw1KSx3bCgzLCJqc29uIiksQ2UoKSksMiZsKXtjb25zdCBhPWMuJGltcGxpY2l0O1JlKCJ2YWx1ZSIsYS5uYW1lKSxTZSgxKSx3cigiICIsYS5uYW1lLCIgIiksU2UoMSksUmUoIm5nSWYiLCJ7fSIhPUpzKDMs'@;
put 'MyxhLmF0dHJpYnV0ZXMpKX19ZnVuY3Rpb24gTVllKGwsYyl7MSZsJiYoeWUoMCwic3BhbiIpLFllKDEsIkpTT04gU3VibWl0dGVkIFN1Y2Nlc3NmdWxseSIpLENlKCkpfWZ1bmN0aW9uIGtZZShsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImJ1dHRvbiIsMzcpLEV0KCJjbGljayIs'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gVXQoYSksWnQoR2UoMikuZG93bmxvYWRTYXNQcmVjb2RlRmlsZSgpKX0pLHRuKDEsImNsci1pY29uIiwzOCksQ2UoKX19ZnVuY3Rpb24gRVllKGwsYyl7aWYoMSZsKXtjb25zdCBhPVpuKCk7V3IoMCkseWUoMSwicCIsMzkpLFllKDIsIkZpbGUgZXhlY3V0ZSBj'@;
put 'b21wbGV0ZWQiKSxDZSgpLHRuKDMsImhyIikseWUoNCwiZGl2IikoNSwiYnV0dG9uIiw0MCksRXQoImNsaWNrIixmdW5jdGlvbigpe1V0KGEpO2NvbnN0IGQ9R2UoMik7cmV0dXJuIFp0KGQuZG93bmxvYWRGaWxlKGQuam9iTG9nLCJleGVjdXRlLXNjcmlwdC1sb2ciLCJ0eHQiKSl9KSxZZSg2'@;
put 'LCIgRG93bmxvYWQgbG9nICIpLENlKCkoKSxHcigpfX1mdW5jdGlvbiB4WWUobCxjKXtpZigxJmwmJih5ZSgwLCJkaXYiLDQ0KSxZZSgxKSxDZSgpKSwyJmwpe2NvbnN0IGE9R2UoMyk7U2UoMSksd3IoIiAiLGEubWFrZURhdGFSZXNwb25zZSwiICIpfX1mdW5jdGlvbiBBWWUobCxjKXsxJmwm'@;
put 'JihXcigwKSx5ZSgxLCJzcGFuIiwyNSksWWUoMiwiIFZhbGlkYXRpbmcgZGVwbG95Li4uICIpLENlKCkseWUoMywic3BhbiIpLFllKDQsIiBWYWxpZGF0aW5nIGRlcGxveS4uLiAiKSxDZSgpLEdyKCkpfWZ1bmN0aW9uIFRZZShsLGMpezEmbCYmKFdyKDApLHRuKDEsImNsci1pY29uIiw0Niks'@;
put 'eWUoMiwic3BhbiIpLFllKDMsIiBWYWxpZGF0aW9uIGZhaWxlZCAiKSxDZSgpLEdyKCkpfWZ1bmN0aW9uIE9ZZShsLGMpezEmbCYmKFdyKDApLHRuKDEsImNsci1pY29uIiw0NykseWUoMiwic3BhbiIpLFllKDMsIiBWYWxpZGF0aW9uIHN1Y2NlZWRlZCAiKSxDZSgpLEdyKCkpfWZ1bmN0aW9u'@;
put 'IERZZShsLGMpe2lmKDEmbCYmKHllKDAsImRpdiIsNDUpLHR0KDEsQVllLDUsMCwibmctY29udGFpbmVyIiw1KSx0dCgyLFRZZSw0LDAsIm5nLWNvbnRhaW5lciIsNSksdHQoMyxPWWUsNCwwLCJuZy1jb250YWluZXIiLDUpLENlKCkpLDImbCl7Y29uc3QgYT1HZSgzKTtTZSgxKSxSZSgibmdJ'@;
put 'ZiIsYS5pc1ZhbGlkYXRpbmcpLFNlKDEpLFJlKCJuZ0lmIiwhYS5pc1ZhbGlkYXRpbmcmJiJlcnJvciI9PT1hLnZhbGlkYXRpb25TdGF0ZSksU2UoMSksUmUoIm5nSWYiLCFhLmlzVmFsaWRhdGluZyYmInN1Y2Nlc3MiPT09YS52YWxpZGF0aW9uU3RhdGUpfX1mdW5jdGlvbiBJWWUobCxjKXtp'@;
put 'ZigxJmwpe2NvbnN0IGE9Wm4oKTtXcigwKSx5ZSgxLCJwIiwzOSksWWUoMiwiQ3JlYXRlIERhdGFiYXNlIENvbXBsZXRlZCIpLENlKCksdG4oMywiaHIiKSx0dCg0LHhZZSwyLDEsImRpdiIsNDEpLHllKDUsImJ1dHRvbiIsNDIpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gVXQoYSks'@;
put 'WnQoR2UoMikubmF2aWdhdGVUb0hvbWUoKSl9KSxZZSg2LCIgTGV0J3MgZ2V0IHN0YXJ0ZWQgIiksQ2UoKSx5ZSg3LCJidXR0b24iLDQyKSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7VXQoYSk7Y29uc3QgZD1HZSgyKTtyZXR1cm4gWnQoZC5kb3dubG9hZEZpbGUoZC5tYWtlRGF0YVJlc3BvbnNl'@;
put 'LCJjcmVhdGUtZGF0YWJhc2UtbG9nIiwidHh0IikpfSksWWUoOCwiIERvd25sb2FkIGxvZyAiKSxDZSgpLHllKDksImJ1dHRvbiIsNDIpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gVXQoYSksWnQoR2UoMikudmFsaWRhdGVEZXBsb3koKSl9KSxZZSgxMCwiIFZhbGlkYXRlICIpLENl'@;
put 'KCksdHQoMTEsRFllLDQsMywiZGl2Iiw0MyksR3IoKX1pZigyJmwpe2NvbnN0IGE9R2UoMik7U2UoNCksUmUoIm5nSWYiLGEubWFrZURhdGFSZXNwb25zZS5sZW5ndGg+MCksU2UoNyksUmUoIm5nSWYiLCJub25lIiE9PWEudmFsaWRhdGlvblN0YXRlfHxhLmlzVmFsaWRhdGluZyl9fWNvbnN0'@;
put 'ICRaPWZ1bmN0aW9uKCl7cmV0dXJue3N0YW5kYWxvbmU6ITB9fTtmdW5jdGlvbiBSWWUobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTtXcigwKSx5ZSgxLCJmb3JtIikoMiwiZGl2IiwxNSkoMywibGFiZWwiLDE2KSxZZSg0LCJBZG1pbiBncm91cCIpLENlKCkseWUoNSwiZGl2IiwxNykoNiwi'@;
put 'ZGl2IiwxOCkoNywic2VsZWN0IiwxOSksRXQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGQpe3JldHVybiBVdChhKSxadChHZSgpLnNlbGVjdGVkQWRtaW5Hcm91cD1kKX0pLHR0KDgsd1llLDIsMiwib3B0aW9uIiwyMCksQ2UoKSgpKCkoKSx5ZSg5LCJkaXYiLDE1KSgxMCwiZGl2IikoMTEs'@;
put 'ImxhYmVsIiwxNiksWWUoMTIsIkNvbnRleHQiKSxDZSgpLHllKDEzLCJkaXYiLDE3KSgxNCwiZGl2IiwxOCkoMTUsInNlbGVjdCIsMjEpLEV0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihkKXtyZXR1cm4gVXQoYSksWnQoR2UoKS5zZWxlY3RlZENvbnRleHQ9ZCl9KSx0dCgxNixTWWUsNCw1'@;
put 'LCJvcHRpb24iLDIwKSxDZSgpKCkoKSx5ZSgxNywiYnV0dG9uIiwyMiksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBVdChhKSxadChHZSgpLmV4ZWN1dGFibGVDb250ZXh0KCkpfSksdG4oMTgsImNsci1pY29uIiwyMyksQ2UoKSgpLHllKDE5LCJkaXYiLDI0KSgyMCwic3BhbiIsMjUp'@;
put 'LFllKDIxLCIgTG9hZGluZyBjb250ZXh0cy4uLiAiKSxDZSgpLHllKDIyLCJzcGFuIiksWWUoMjMsIiBMb2FkaW5nIGNvbnRleHRzLi4uICIpLENlKCkoKSx5ZSgyNCwibGFiZWwiLDI2KSxZZSgyNSwiREMgTG9jIiksQ2UoKSx5ZSgyNiwiZGl2Iiw5KSgyNywiZGl2IiwxMCkoMjgsImlucHV0'@;
put 'IiwyNyksRXQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGQpe3JldHVybiBVdChhKSxadChHZSgpLmRjUGF0aD1kKX0pKCJmb2N1c291dCIsZnVuY3Rpb24oKXtyZXR1cm4gVXQoYSksWnQoR2UoKS5zYXZlRGNQYXRoKCkpfSksQ2UoKSgpKCkseWUoMjksInAiLDI4KSxZZSgzMCwiIFNlbGVj'@;
put 'dCBKU09OIGZpbGUgdG8gdXBsb2FkIChqc29uIGJ1aWxkIGZpbGUgcHJlbG9hZGVkKTogIiksQ2UoKSx5ZSgzMSwiZGl2IiwyOSkoMzIsImlucHV0IiwzMCksRXQoImNsaWNrIixmdW5jdGlvbihkKXtyZXR1cm4gVXQoYSksWnQoR2UoKS5jbGVhclVwbG9hZElucHV0KGQpKX0pKCJjaGFuZ2Ui'@;
put 'LGZ1bmN0aW9uKGQpe3JldHVybiBVdChhKSxadChHZSgpLm9uSnNvbkZpbGVDaGFuZ2UoZCkpfSksQ2UoKSgpLHllKDMzLCJkaXYiLDMxKSgzNCwiYnV0dG9uIiwzMiksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBVdChhKSxadChHZSgpLmV4ZWN1dGVKc29uKCkpfSksWWUoMzUsIiBT'@;
put 'VUJNSVQgSlNPTiAiKSxDZSgpLHR0KDM2LE1ZZSwyLDAsInNwYW4iLDUpLENlKCkseWUoMzcsInAiLDI4KSxZZSgzOCwiU2VsZWN0IFNBUyBmaWxlIHRvIHVwbG9hZDoiKSxDZSgpLHllKDM5LCJkaXYiLDI5KSg0MCwiaW5wdXQiLDMwKSxFdCgiY2xpY2siLGZ1bmN0aW9uKGQpe3JldHVybiBV'@;
put 'dChhKSxadChHZSgpLmNsZWFyVXBsb2FkSW5wdXQoZCkpfSkoImNoYW5nZSIsZnVuY3Rpb24oZCl7VXQoYSk7Y29uc3QgaD1HZSgpO3JldHVybiBoLm9uU2FzRmlsZUNoYW5nZShkKSxadChoLmRvd25sb2FkRmlsZUJ0bj0hMCl9KSxDZSgpLHR0KDQxLGtZZSwyLDAsImJ1dHRvbiIsMzMpLENl'@;
put 'KCkseWUoNDIsImRpdiIsMzEpKDQzLCJidXR0b24iLDM0KSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFV0KGEpLFp0KEdlKCkuZXhlY3V0ZVNBUygpKX0pLFllKDQ0LCIgU1VCTUlUICIpLENlKCkoKSgpLHR0KDQ1LEVZZSw3LDAsIm5nLWNvbnRhaW5lciIsNSkseWUoNDYsImJ1dHRv'@;
put 'biIsMzUpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gVXQoYSksWnQoR2UoKS5jcmVhdGVEYXRhYmFzZSgpKX0pLFllKDQ3LCIgQ3JlYXRlIERhdGFiYXNlICIpLENlKCksdHQoNDgsSVllLDEyLDIsIm5nLWNvbnRhaW5lciIsNSksQ2UoKSxHcigpfWlmKDImbCl7Y29uc3QgYT1HZSgp'@;
put 'O1NlKDcpLFJlKCJuZ01vZGVsIixhLnNlbGVjdGVkQWRtaW5Hcm91cCkoIm5nTW9kZWxPcHRpb25zIixYYSgxOSwkWikpLFNlKDEpLFJlKCJuZ0Zvck9mIixhLmFkbWluR3JvdXBzKSxTZSgyKSxncigiaGlkZGVuIixhLmNvbnRleHRzTG9hZGluZyksU2UoNSksUmUoIm5nTW9kZWwiLGEuc2Vs'@;
put 'ZWN0ZWRDb250ZXh0KSgibmdNb2RlbE9wdGlvbnMiLFhhKDIwLCRaKSksU2UoMSksUmUoIm5nRm9yT2YiLGEuYWxsQ29udGV4dHMpLFNlKDMpLGdyKCJoaWRkZW4iLCFhLmNvbnRleHRzTG9hZGluZyksU2UoOSksUmUoIm5nTW9kZWwiLGEuZGNQYXRoKSgibmdNb2RlbE9wdGlvbnMiLFhhKDIx'@;
put 'LCRaKSksU2UoNiksUmUoImNsckxvYWRpbmciLGEuaXNTdWJtaXR0aW5nSnNvbiksU2UoMiksUmUoIm5nSWYiLGEuaXNKc29uU3VibWl0dGVkKSxTZSg1KSxSZSgibmdJZiIsYS5kb3dubG9hZEZpbGVCdG4pLFNlKDIpLFJlKCJjbHJMb2FkaW5nIixhLmV4ZWN1dGluZ1NjcmlwdCksU2UoMiks'@;
put 'UmUoIm5nSWYiLGEuam9iTG9nLmxlbmd0aD4wKSxTZSgxKSxSZSgiY2xyTG9hZGluZyIsYS5jcmVhdGVEYXRhYmFzZUxvYWRpbmcpLFNlKDIpLFJlKCJuZ0lmIixhLm1ha2VEYXRhUmVzcG9uc2UubGVuZ3RoPjApfX1sZXQgTFllPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmLGQsaCl7'@;
put 'dGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5ldmVudFNlcnZpY2U9Zix0aGlzLmxvZ2dlclNlcnZpY2U9ZCx0aGlzLmRlcGxveVNlcnZpY2U9aCx0aGlzLnNhc0pzQ29uZmlnPW5ldyB2MS5TQVNqc0NvbmZpZyx0aGlzLm9uTmF2aWdhdGVUb0hvbWU9bmV3IHhyLHRoaXMubmVlZHNMb2dpbj0hMSx0'@;
put 'aGlzLmFkbWluR3JvdXBzPVtdLHRoaXMuYWxsQ29udGV4dHM9W10sdGhpcy5hcHBMb2M9IiIsdGhpcy5kY1BhdGg9IiIsdGhpcy5zZWxlY3RlZEFkbWluR3JvdXA9IiIsdGhpcy5zZWxlY3RlZENvbnRleHQ9IiIsdGhpcy5qb2JMb2c9IiIsdGhpcy5tYWtlRGF0YVJlc3BvbnNlPSIiLHRoaXMu'@;
put 'bGluZXNPZkNvZGU9W10sdGhpcy5maWxlTmFtZT0iIix0aGlzLnByZWxvYWRlZEZpbGU9ITAsdGhpcy5leGVjdXRlU0FTRW5hYmxlZD0hMSx0aGlzLmNvbnRleHRzTG9hZGluZz0hMSx0aGlzLmNyZWF0ZURhdGFiYXNlTG9hZGluZz0hMSx0aGlzLmV4ZWN1dGluZ1NjcmlwdD0hMSx0aGlzLmRv'@;
put 'd25sb2FkRmlsZUJ0bj0hMSx0aGlzLmlzVmFsaWRhdGluZz0hMSx0aGlzLmpzb25GaWxlPW51bGwsdGhpcy5pc1N1Ym1pdHRpbmdKc29uPSExLHRoaXMuaXNKc29uU3VibWl0dGVkPSExLHRoaXMudmFsaWRhdGlvblN0YXRlPSJub25lIn1uZ09uSW5pdCgpe31leGVjdXRhYmxlQ29udGV4dCgp'@;
put 'e3JldHVybiB5aShmdW5jdGlvbiooKXt9KSgpfWNsZWFyVXBsb2FkSW5wdXQoYSl7dGhpcy5kZXBsb3lTZXJ2aWNlLmNsZWFyVXBsb2FkSW5wdXQoYSl9b25TYXNGaWxlQ2hhbmdlKGEpe3RoaXMucHJlbG9hZGVkRmlsZT0hMTtsZXQgZj1hLnRhcmdldC5maWxlc1swXTt0aGlzLmZpbGVOYW1l'@;
put 'PWYubmFtZTtsZXQgZD1uZXcgRmlsZVJlYWRlcjtkLm9ubG9hZD0oKT0+e2QucmVzdWx0JiYodGhpcy5saW5lc09mQ29kZT1kLnJlc3VsdC5zcGxpdCgiXG4iKSx0aGlzLmxpbmVzT2ZDb2RlPXRoaXMubGluZXNPZkNvZGUuZmlsdGVyKGg9PiIiIT09aCYmbnVsbCE9PWgpLHRoaXMuZXhlY3V0'@;
put 'ZVNBU0VuYWJsZWQ9ITAsdGhpcy5hZGRQcmVjb2RlTGluZXMoKSl9LGQucmVhZEFzVGV4dChmKX1vbkpzb25GaWxlQ2hhbmdlKGEpe3ZhciBmPXRoaXM7cmV0dXJuIHlpKGZ1bmN0aW9uKigpe2xldCBkPWEudGFyZ2V0LmZpbGVzWzBdO2YuanNvbkZpbGU9eWllbGQgZi5kZXBsb3lTZXJ2aWNl'@;
put 'LnJlYWRGaWxlKGQpfSkoKX1hZGRQcmVjb2RlTGluZXMoKXt0aGlzLmxpbmVzT2ZDb2RlLnVuc2hpZnQoYCVsZXQgY29udGV4dD0ke3RoaXMuc2VsZWN0ZWRDb250ZXh0fTtgLGAlbGV0IGFwcExvYz0ke3RoaXMuYXBwTG9jfTtgLGAlbGV0IGFkbWluPSR7dGhpcy5zZWxlY3RlZEFkbWluR3Jv'@;
put 'dXB9O2AsYCVsZXQgZGNwYXRoPSR7dGhpcy5kY1BhdGh9O2ApfWRvd25sb2FkU2FzUHJlY29kZUZpbGUoKXtsZXQgYT10aGlzLmxpbmVzT2ZDb2RlLmpvaW4oIlxuIiksZj10aGlzLmZpbGVOYW1lLnNwbGl0KCIuIilbMF07dGhpcy5kb3dubG9hZEZpbGUoYSxmLCJzYXMiKX1kb3dubG9hZEZp'@;
put 'bGUoYSxmLGQ9InR4dCIpe3RoaXMuZGVwbG95U2VydmljZS5kb3dubG9hZEZpbGUoYSxmLGQpfXNhdmVEY1BhdGgoKXtsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiZGVwbG95X2RjX2xvYyIsdGhpcy5kY1BhdGgpfWV4ZWN1dGVKc29uKCl7dmFyIGE9dGhpcztyZXR1cm4geWkoZnVuY3Rpb24qKCl7'@;
put 'YS5pc1N1Ym1pdHRpbmdKc29uPSEwO3RyeXt5aWVsZCBhLnNhc0pzLmRlcGxveVNlcnZpY2VQYWNrKGEuanNvbkZpbGUsYS5kY0FkYXB0ZXJTZXR0aW5ncz8uYXBwTG9jfHwiIix2b2lkIDAsdm9pZCAwLCEwKSxhLmlzSnNvblN1Ym1pdHRlZD0hMH1jYXRjaChmKXtsZXQgZD0iIjtyZXR1cm4g'@;
put 'ZD0ic3RyaW5nIiE9dHlwZW9mIGYubWVzc2FnZT9KU09OLnN0cmluZ2lmeShmKS5yZXBsYWNlKC9cXC9nbSwiIik6Zi5tZXNzYWdlLHZvaWQgYS5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRGVwbG95IGVycm9yIixgRXhjZXB0aW9uOiBcbiAkeyIiIT09ZD9kOmZ9YCl9YS5pc1N1Ym1p'@;
put 'dHRpbmdKc29uPSExfSkoKX1leGVjdXRlU0FTKCl7dmFyIGE9dGhpcztyZXR1cm4geWkoZnVuY3Rpb24qKCl7YS5leGVjdXRpbmdTY3JpcHQ9ITAsYS5qb2JMb2c9IiIsYS5tYWtlRGF0YVJlc3BvbnNlPSIiO3RyeXtsZXQgZj15aWVsZCBhLnNhc0pzLmV4ZWN1dGVTY3JpcHQoe2ZpbGVOYW1l'@;
put 'OmEuZmlsZU5hbWUsbGluZXNPZkNvZGU6YS5saW5lc09mQ29kZSxjb250ZXh0TmFtZTphLnNlbGVjdGVkQ29udGV4dH0pO2EubG9nZ2VyU2VydmljZS5sb2coZiksInN0cmluZyI9PXR5cGVvZiBmLmxvZyYmKGYubG9nPUpTT04ucGFyc2UoZi5sb2cpKSwiZXJyb3IiPT09Zi5qb2JTdGF0dXM/'@;
put 'YWxlcnQoIkVycm9yISIpOmEuam9iTG9nPWYubG9nLml0ZW1zP2YubG9nLml0ZW1zLm1hcChkPT5kLmxpbmUpLmpvaW4oIlxuIik6SlNPTi5zdHJpbmdpZnkoZi5sb2cpLGEuZXhlY3V0aW5nU2NyaXB0PSExfWNhdGNoe2EuZXhlY3V0aW5nU2NyaXB0PSExfX0pKCl9Y3JlYXRlRGF0YWJhc2Uo'@;
put 'YT0hMCl7aWYoYSl7bGV0IGg9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCkuc2VydmVyVXJsKyIvU0FTSm9iRXhlY3V0aW9uLz9fcHJvZ3JhbT0iK3RoaXMuZGNBZGFwdGVyU2V0dGluZ3M/LmFwcExvY3x8Ii9hZG1pbi9tYWtlZGF0YSZBRE1JTj0iK3RoaXMuc2VsZWN0ZWRBZG1p'@;
put 'bkdyb3VwKyImRENQQVRIPSIrdGhpcy5kY1BhdGgrIiZfZGVidWc9MTMxIjt3aW5kb3cub3BlbihoLCJfYmxhbmsiKX1lbHNlIHRoaXMuY3JlYXRlRGF0YWJhc2VMb2FkaW5nPSEwLHRoaXMuc2FzSnMucmVxdWVzdCgic2VydmljZXMvYWRtaW4vbWFrZWRhdGEiLHtmcm9tanM6W3tBRE1JTjp0'@;
put 'aGlzLnNlbGVjdGVkQWRtaW5Hcm91cCxEQ1BBVEg6dGhpcy5kY1BhdGh9XX0se3VzZUNvbXB1dGVBcGk6ITEsY29udGV4dE5hbWU6dGhpcy5zYXNKc0NvbmZpZy5jb250ZXh0TmFtZSxkZWJ1ZzohMH0sKCk9Pnt0aGlzLnNhc1NlcnZpY2Uuc2hvdWxkTG9naW4ubmV4dCghMCl9KS50aGVuKGg9'@;
put 'Pnt0cnl7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPUpTT04uc3RyaW5naWZ5KGgpfWNhdGNoe3RoaXMubWFrZURhdGFSZXNwb25zZT1ofXRoaXMuY3JlYXRlRGF0YWJhc2VMb2FkaW5nPSExfSkuY2F0Y2goaD0+e3RoaXMuY3JlYXRlRGF0YWJhc2VMb2FkaW5nPSExO3RyeXt0aGlzLm1ha2VEYXRh'@;
put 'UmVzcG9uc2U9SlNPTi5zdHJpbmdpZnkoaCl9Y2F0Y2h7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPWh9fSl9bmF2aWdhdGVUb0hvbWUoKXt0aGlzLm9uTmF2aWdhdGVUb0hvbWUuZW1pdCgpfXZhbGlkYXRlRGVwbG95KCl7dGhpcy5pc1ZhbGlkYXRpbmc9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVl'@;
put 'c3QoInB1YmxpYy9zdGFydHVwc2VydmljZSIsbnVsbCkudGhlbihhPT57dGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyhhKSx0aGlzLnZhbGlkYXRpb25TdGF0ZT1hLnNhc2xpYnM/InN1Y2Nlc3MiOiJlcnJvciIsdGhpcy5pc1ZhbGlkYXRpbmc9ITF9KS5jYXRjaChhPT57dGhpcy5pc1ZhbGlkYXRp'@;
put 'bmc9ITEsdGhpcy52YWxpZGF0aW9uU3RhdGU9ImVycm9yIn0pfWRlbGV0ZUtleXMoKXtsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgiZGVwbG95X2RjX2xvYyIpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChwbCkscnQoUnMpLHJ0KHkxKSxydChf'@;
put 'Y2UpKX0sbC5cdTAyNzVjbXA9a3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siYXBwLW1hbnVhbC1kZXBsb3kiXV0saW5wdXRzOntzYXNKczoic2FzSnMiLHNhc0pzQ29uZmlnOiJzYXNKc0NvbmZpZyIsZGNBZGFwdGVyU2V0dGluZ3M6ImRjQWRhcHRlclNldHRpbmdzIn0sb3V0cHV0czp7b25OYXZp'@;
put 'Z2F0ZVRvSG9tZToib25OYXZpZ2F0ZVRvSG9tZSJ9LGRlY2xzOjksdmFyczozLGNvbnN0czpbWzEsImNhcmQtaGVhZGVyIiwicG9zaXRpb24tcmVsYXRpdmUiXSxbMSwiZC1pbmxpbmUtYmxvY2siLCJtbC0xMCIsIm1iLTEwIiwibXQtMCJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIsImNsZWFy'@;
put 'LW1lbW9yeS1idXR0b24iLCJwb3NpdGlvbi1hYnNvbHV0ZSIsMywiY2xpY2siXSxbMSwiY2FyZC1ibG9jayJdLFsiaWQiLCJsb2dpbkZvcm0iLCJjbGFzcyIsImQtbm9uZSIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWyJpZCIsImxvZ2luRm9ybSIsMSwiZC1ub25lIl0sWzEsIm1iLTEwIl0sWyJm'@;
put 'b3IiLCJ1c2VybmFtZSIsMSwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbMSwibWItMTAiLCJjbHItY29udHJvbC1jb250YWluZXIiXSxbMSwiY2xyLWlucHV0LXdyYXBwZXIiXSxbInR5cGUiLCJ0ZXh0IiwiaWQiLCJ1c2VybmFtZSIsMSwiY2xyLWlucHV0Il0sWyJmb3IiLCJwYXNzd29yZCIsMSwi'@;
put 'Y2xyLWNvbnRyb2wtbGFiZWwiXSxbInR5cGUiLCJwYXNzd29yZCIsImlkIiwicGFzc3dvcmQiLDEsImNsci1pbnB1dCJdLFsiaWQiLCJsb2dpbkJ0biIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJkLW5vbmUiXSxbMSwiY2xyLWZvcm0tY29udHJvbCJdLFsiZm9yIiwic2VsZWN0LWZ1bGwiLDEs'@;
put 'ImNsci1jb250cm9sLWxhYmVsIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciJdLFsxLCJjbHItc2VsZWN0LXdyYXBwZXIiXSxbIm5hbWUiLCJzZWxlY3RlZEFkbWluR3JvdXAiLCJpZCIsImFkbWluR3JvdXBzU2VsZWN0IiwxLCJjbHItc2VsZWN0IiwzLCJuZ01vZGVsIiwibmdNb2RlbE9w'@;
put 'dGlvbnMiLCJuZ01vZGVsQ2hhbmdlIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbIm5hbWUiLCJzZWxlY3RlZENvbnRleHQiLDEsImNsci1zZWxlY3QiLDMsIm5nTW9kZWwiLCJuZ01vZGVsT3B0aW9ucyIsIm5nTW9kZWxDaGFuZ2UiXSxbInR5cGUiLCJidXR0b24iLCJpZCIs'@;
put 'ImNvbnRleHRzLWJ0biIsMSwiYnRuIiwiYnRuLWljb24iLDMsImNsaWNrIl0sWyJzaGFwZSIsInBsYXkiXSxbMSwiZC1mbGV4Il0sWzEsInNwaW5uZXIiLCJzcGlubmVyLWlubGluZSIsIm1yLTEwIl0sWyJmb3IiLCJkY2xvYyIsMSwibXQtMjAiLCJjbHItY29udHJvbC1sYWJlbCJdLFsibmFt'@;
put 'ZSIsImRjUGF0aCIsInR5cGUiLCJ0ZXh0IiwiaWQiLCJkY2xvYyIsMSwiY2xyLWlucHV0IiwzLCJuZ01vZGVsIiwibmdNb2RlbE9wdGlvbnMiLCJuZ01vZGVsQ2hhbmdlIiwiZm9jdXNvdXQiXSxbMSwibXQtMTAiXSxbMSwiZC1mbGV4IiwiZmxleC1jb2x1bW4iXSxbInR5cGUiLCJmaWxlIiwz'@;
put 'LCJjbGljayIsImNoYW5nZSJdLFsxLCJtdC0yMCIsImQtZmxleCIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsiaWQiLCIiLDEsIm10LTAiLDMsImNsckxvYWRpbmciLCJjbGljayJdLFsiY2xhc3MiLCJidG4gYnRuLXNtIGJ0bi1pY29uIG1pbi13LTAgdy00MCIsMywiY2xpY2siLDQsIm5nSWYi'@;
put 'XSxbImlkIiwiZGVwbG95IiwxLCJtdC0wIiwzLCJjbHJMb2FkaW5nIiwiY2xpY2siXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJtdC0xMCIsMywiY2xyTG9hZGluZyIsImNsaWNrIl0sWzMsInZhbHVlIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1pY29uIiwibWluLXctMCIsInctNDAiLDMs'@;
put 'ImNsaWNrIl0sWyJzaGFwZSIsImRvd25sb2FkIl0sWzEsIm1iLTAiLCJtdC0xMCJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIsIm10LTAiLCJtci0yMCIsMywiY2xpY2siXSxbImNsYXNzIiwibG9nLXdyYXBwZXIiLDQsIm5nSWYiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJtdC0xNSIsMywi'@;
put 'Y2xpY2siXSxbImNsYXNzIiwidmFsaWRhdGlvbi1iYXIiLDQsIm5nSWYiXSxbMSwibG9nLXdyYXBwZXIiXSxbMSwidmFsaWRhdGlvbi1iYXIiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwxLCJpcy1lcnJvciJdLFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLDEsImlzLXN1Y2Nlc3Mi'@;
put 'XV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxmKXsxJmEmJih5ZSgwLCJkaXYiLDApLFllKDEsIiBDb25maWd1cmF0b3IgIikseWUoMiwicCIsMSksWWUoMyksQ2UoKSx5ZSg0LCJidXR0b24iLDIpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZi5kZWxldGVLZXlzKCl9KSxZZSg1LCIgQ2xl'@;
put 'YXIgbWVtb3J5ICIpLENlKCkoKSx5ZSg2LCJkaXYiLDMpLHR0KDcsX1llLDE1LDAsImRpdiIsNCksdHQoOCxSWWUsNDksMjIsIm5nLWNvbnRhaW5lciIsNSksQ2UoKSksMiZhJiYoU2UoMyksd3IoIkFwcCBMb2NhdGlvbjogIixmLmFwcExvYywiIiksU2UoNCksUmUoIm5nSWYiLGYubmVlZHNM'@;
put 'b2dpbiksU2UoMSksUmUoIm5nSWYiLCFmLm5lZWRzTG9naW4pKX0sZGVwZW5kZW5jaWVzOltSYSwkaSxwNCxTMSxNMSxpcyxMMCxXYSxoNCx6YSxDZCxSbCxKYyxJaCxlbCxNbmVdLHN0eWxlczpbIi5jbGVhci1tZW1vcnktYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtyaWdodDoxMHB4O3Rv'@;
put 'cDoycHh9Il19KSxsfSkoKTtmdW5jdGlvbiBQWWUobCxjKXsxJmwmJihXcigwKSx5ZSgxLCJzcGFuIiwxOSksWWUoMiwiIExvYWRpbmcuLi4gIiksQ2UoKSx5ZSgzLCJwIiksWWUoNCwiRGVwbG95aW5nLi4uIiksQ2UoKSxHcigpKX1mdW5jdGlvbiBGWWUobCxjKXsxJmwmJnRuKDAsImNsci1p'@;
put 'Y29uIiwzMCl9ZnVuY3Rpb24gSFllKGwsYyl7MSZsJiZ0bigwLCJjbHItaWNvbiIsMzEpfWZ1bmN0aW9uIE5ZZShsLGMpezEmbCYmdG4oMCwiY2xyLWljb24iLDMwKX1mdW5jdGlvbiBWWWUobCxjKXsxJmwmJnRuKDAsImNsci1pY29uIiwzMSl9ZnVuY3Rpb24gQlllKGwsYyl7aWYoMSZsJiYo'@;
put 'eWUoMCwiZGl2IiwyMiksdHQoMSxOWWUsMSwwLCJjbHItaWNvbiIsMjMpLHR0KDIsVlllLDEsMCwiY2xyLWljb24iLDI0KSx5ZSgzLCJwIiksWWUoNCwiQ3JlYXRlIGRhdGFiYXNlIiksQ2UoKSgpKSwyJmwpe2NvbnN0IGE9R2UoMyk7U2UoMSksUmUoIm5nSWYiLGEuYXV0b0RlcGxveVN0YXR1'@;
put 'cy5ydW5NYWtlRGF0YSksU2UoMSksUmUoIm5nSWYiLCExPT09YS5hdXRvRGVwbG95U3RhdHVzLnJ1bk1ha2VEYXRhKX19ZnVuY3Rpb24galllKGwsYyl7MSZsJiZ0bigwLCJjbHItaWNvbiIsMzEpfWZ1bmN0aW9uIHpZZShsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO1dyKDApLHllKDEsInAi'@;
put 'LDIwKSxZZSgyLCJEb25lIiksQ2UoKSx0bigzLCJociIsMjEpLHllKDQsImRpdiIsMjIpLHR0KDUsRlllLDEsMCwiY2xyLWljb24iLDIzKSx0dCg2LEhZZSwxLDAsImNsci1pY29uIiwyNCkseWUoNywicCIpLFllKDgsIkRlcGxveSBTQVMgSm9icyIpLENlKCkoKSx0dCg5LEJZZSw1LDIsImRp'@;
put 'diIsMjUpLHRuKDEwLCJociIsMjEpLHllKDExLCJkaXYiLDI2KSgxMiwiYnV0dG9uIiwyNyksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBVdChhKSxadChHZSgyKS5uYXZpZ2F0ZVRvSG9tZSgpKX0pLHR0KDEzLGpZZSwxLDAsImNsci1pY29uIiwyNCksWWUoMTQsIiBMQVVOQ0ggLyBD'@;
put 'T05GSUdVUkUgIiksQ2UoKSx5ZSgxNSwiYnV0dG9uIiwyOCksRXQoImNsaWNrIixmdW5jdGlvbigpe1V0KGEpO2NvbnN0IGQ9R2UoMik7cmV0dXJuIFp0KGQuZG93bmxvYWRGaWxlKGQubWFrZURhdGFSZXNwb25zZSwiY3JlYXRlLWRhdGFiYXNlLWxvZyIsInR4dCIpKX0pLFllKDE2LCIgRG93'@;
put 'bmxvYWQgbG9nICIpLENlKCkoKSx0bigxNywiaHIiLDIxKSx5ZSgxOCwiZGl2IiwyNikoMTksImJ1dHRvbiIsMjkpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtVdChhKTtjb25zdCBkPUdlKDIpO3JldHVybiBkLmF1dG9kZXBsb3lpbmc9ITEsWnQoZC5hdXRvZGVwbG95RG9uZT0hMSl9KSxZZSgy'@;
put 'MCwiIENsb3NlICIpLENlKCkseWUoMjEsImJ1dHRvbiIsMjkpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gVXQoYSksWnQoR2UoMikub3BlblNhc1JlcXVlc3RzTW9kYWwoKSl9KSxZZSgyMiwiIFNBUyBSZXF1ZXN0cyAiKSxDZSgpKCksR3IoKX1pZigyJmwpe2NvbnN0IGE9R2UoMik7'@;
put 'U2UoNSksUmUoIm5nSWYiLGEuYXV0b0RlcGxveVN0YXR1cy5kZXBsb3lTZXJ2aWNlUGFjayksU2UoMSksUmUoIm5nSWYiLCFhLmF1dG9EZXBsb3lTdGF0dXMuZGVwbG95U2VydmljZVBhY2spLFNlKDMpLFJlKCJuZ0lmIixudWxsIT09YS5hdXRvRGVwbG95U3RhdHVzLnJ1bk1ha2VEYXRhKSxT'@;
put 'ZSg0KSxSZSgibmdJZiIsITE9PT1hLmF1dG9EZXBsb3lTdGF0dXMuZGVwbG95U2VydmljZVBhY2t8fCExPT09YS5hdXRvRGVwbG95U3RhdHVzLnJ1bk1ha2VEYXRhKX19ZnVuY3Rpb24gVVllKGwsYyl7aWYoMSZsJiYoeWUoMCwiZGl2IiwxNikoMSwiZGl2IiwxNyksdHQoMixQWWUsNSwwLCJu'@;
put 'Zy1jb250YWluZXIiLDE4KSx0dCgzLHpZZSwyMyw0LCJuZy1jb250YWluZXIiLDE4KSxDZSgpKCkpLDImbCl7Y29uc3QgYT1HZSgpO1NlKDIpLFJlKCJuZ0lmIiwhYS5hdXRvZGVwbG95RG9uZSksU2UoMSksUmUoIm5nSWYiLGEuYXV0b2RlcGxveURvbmUpfX1sZXQgWlllPSgoKT0+e2NsYXNz'@;
put 'IGx7Y29uc3RydWN0b3IoYSxmLGQsaCl7dGhpcy5ldmVudFNlcnZpY2U9YSx0aGlzLmRlcGxveVNlcnZpY2U9Zix0aGlzLnNhc1NlcnZpY2U9ZCx0aGlzLmxvZ2dlclNlcnZpY2U9aCx0aGlzLnNhc0pzQ29uZmlnPW5ldyB2MS5TQVNqc0NvbmZpZyx0aGlzLmFwcExvYz0iIix0aGlzLmRjUGF0'@;
put 'aD0iIix0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cD0iIix0aGlzLm9uTmF2aWdhdGVUb0hvbWU9bmV3IHhyLHRoaXMubWFrZURhdGFSZXNwb25zZT0iIix0aGlzLmpzb25GaWxlPW51bGwsdGhpcy5hdXRvZGVwbG95aW5nPSExLHRoaXMuYXV0b2RlcGxveURvbmU9ITEsdGhpcy5yZWNyZWF0ZURh'@;
put 'dGFiYXNlTW9kYWw9ITEsdGhpcy5pc1N1Ym1pdHRpbmdKc29uPSExLHRoaXMuaXNKc29uU3VibWl0dGVkPSExLHRoaXMucmVjcmVhdGVEYXRhYmFzZT0hMSx0aGlzLmNyZWF0ZURhdGFiYXNlTG9hZGluZz0hMSx0aGlzLmF1dG9EZXBsb3lTdGF0dXM9e2RlcGxveVNlcnZpY2VQYWNrOm51bGws'@;
put 'cnVuTWFrZURhdGE6bnVsbH19bmdPbkluaXQoKXt9ZXhlY3V0ZUpzb24oKXt2YXIgYT10aGlzO3JldHVybiB5aShmdW5jdGlvbiooKXthLmF1dG9kZXBsb3lpbmc9ITAsYS5pc1N1Ym1pdHRpbmdKc29uPSEwO3RyeXt5aWVsZCBhLnNhc0pzLmRlcGxveVNlcnZpY2VQYWNrKGEuanNvbkZpbGUs'@;
put 'YS5kY0FkYXB0ZXJTZXR0aW5ncz8uYXBwTG9jLHZvaWQgMCx2b2lkIDAsITApLGEuYXV0b0RlcGxveVN0YXR1cy5kZXBsb3lTZXJ2aWNlUGFjaz0hMCxhLmlzSnNvblN1Ym1pdHRlZD0hMH1jYXRjaChmKXtsZXQgZD0iIjtyZXR1cm4gZD0ic3RyaW5nIiE9dHlwZW9mIGYubWVzc2FnZT9KU09O'@;
put 'LnN0cmluZ2lmeShmKS5yZXBsYWNlKC9cXC9nbSwiIik6Zi5tZXNzYWdlLGEuYXV0b0RlcGxveVN0YXR1cy5kZXBsb3lTZXJ2aWNlUGFjaz0hMSxhLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJEZXBsb3kgZXJyb3IiLGBFeGNlcHRpb246IFxuICR7IiIhPT1kP2Q6Zn1gKSxhLmF1dG9k'@;
put 'ZXBsb3lpbmc9ITEsdm9pZChhLmF1dG9kZXBsb3lEb25lPSExKX1hLmlzU3VibWl0dGluZ0pzb249ITEsYS5yZWNyZWF0ZURhdGFiYXNlP2EuY3JlYXRlRGF0YWJhc2UoKTphLmF1dG9kZXBsb3lEb25lPSEwfSkoKX1jcmVhdGVEYXRhYmFzZSgpe3RoaXMuc2FzSnMucmVxdWVzdCgic2Vydmlj'@;
put 'ZXMvYWRtaW4vbWFrZWRhdGEiLHtmcm9tanM6W3tBRE1JTjp0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cCxEQ1BBVEg6dGhpcy5kY1BhdGh9XX0se3VzZUNvbXB1dGVBcGk6ITEsY29udGV4dE5hbWU6dGhpcy5zYXNKc0NvbmZpZy5jb250ZXh0TmFtZSxkZWJ1ZzohMH0sKCk9Pnt0aGlzLnNhc1Nl'@;
put 'cnZpY2Uuc2hvdWxkTG9naW4ubmV4dCghMCl9KS50aGVuKGQ9Pnt0aGlzLmF1dG9kZXBsb3lEb25lPSEwO3RyeXt0aGlzLm1ha2VEYXRhUmVzcG9uc2U9SlNPTi5zdHJpbmdpZnkoZCl9Y2F0Y2h7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPWR9dGhpcy5hdXRvRGVwbG95U3RhdHVzLnJ1bk1ha2VE'@;
put 'YXRhPSEhKGQucmVzdWx0JiZkLnJlc3VsdC5sZW5ndGg+MCl9KS5jYXRjaChkPT57dGhpcy5hdXRvRGVwbG95U3RhdHVzLnJ1bk1ha2VEYXRhPSExLHRoaXMuYXV0b2RlcGxveURvbmU9ITA7dHJ5e3RoaXMubWFrZURhdGFSZXNwb25zZT1KU09OLnN0cmluZ2lmeShkKX1jYXRjaHt0aGlzLm1h'@;
put 'a2VEYXRhUmVzcG9uc2U9ZH19KX1kb3dubG9hZEZpbGUoYSxmLGQ9InR4dCIpe3RoaXMuZGVwbG95U2VydmljZS5kb3dubG9hZEZpbGUoYSxmLGQpfW9uSnNvbkZpbGVDaGFuZ2UoYSl7dmFyIGY9dGhpcztyZXR1cm4geWkoZnVuY3Rpb24qKCl7bGV0IGQ9YS50YXJnZXQuZmlsZXNbMF07Zi5q'@;
put 'c29uRmlsZT15aWVsZCBmLmRlcGxveVNlcnZpY2UucmVhZEZpbGUoZCl9KSgpfXJlY3JlYXRlRGF0YWJhc2VDbGlja2VkKGEpeyEwPT09YS50YXJnZXQuY2hlY2tlZCYmKHRoaXMucmVjcmVhdGVEYXRhYmFzZU1vZGFsPSEwKX1jbGVhclVwbG9hZElucHV0KGEpe3RoaXMuZGVwbG95U2Vydmlj'@;
put 'ZS5jbGVhclVwbG9hZElucHV0KGEpfW9wZW5TYXNSZXF1ZXN0c01vZGFsKCl7dGhpcy5ldmVudFNlcnZpY2Uub3BlblJlcXVlc3RzTW9kYWwoKX1uYXZpZ2F0ZVRvSG9tZSgpe3RoaXMub25OYXZpZ2F0ZVRvSG9tZS5lbWl0KCl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1'@;
put 'cm4gbmV3KGF8fGwpKHJ0KFJzKSxydChfY2UpLHJ0KHBsKSxydCh5MSkpfSxsLlx1MDI3NWNtcD1rcih7dHlwZTpsLHNlbGVjdG9yczpbWyJhcHAtYXV0b21hdGljLWRlcGxveSJdXSxpbnB1dHM6e3Nhc0pzOiJzYXNKcyIsc2FzSnNDb25maWc6InNhc0pzQ29uZmlnIixkY0FkYXB0ZXJTZXR0'@;
put 'aW5nczoiZGNBZGFwdGVyU2V0dGluZ3MiLGFwcExvYzoiYXBwTG9jIixkY1BhdGg6ImRjUGF0aCIsc2VsZWN0ZWRBZG1pbkdyb3VwOiJzZWxlY3RlZEFkbWluR3JvdXAifSxvdXRwdXRzOntvbk5hdmlnYXRlVG9Ib21lOiJvbk5hdmlnYXRlVG9Ib21lIn0sZGVjbHM6NDYsdmFyczoxMCxjb25z'@;
put 'dHM6W1siY2xhc3MiLCJhdXRvLWRlcGxveSIsNCwibmdJZiJdLFsxLCJ0ZXh0LWNlbnRlciIsIm15LTE1Il0sWyJmb3IiLCJkY2xvYyIsMSwibXQtMjAiLCJjbHItY29udHJvbC1sYWJlbCJdLFsxLCJtYi0xMCIsImNsci1jb250cm9sLWNvbnRhaW5lciJdLFsxLCJjbHItaW5wdXQtd3JhcHBl'@;
put 'ciJdLFsxLCJtdC0wIl0sWyJjbHJDaGVja2JveCIsIiIsInR5cGUiLCJjaGVja2JveCIsImNoZWNrZWQiLCIiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwiY2xpY2siXSxbMSwiYnRuLWF1dG9kZXBsb3kiLCJidG4iLCJidG4tcHJpbWFyeSIsImQtaW5saW5lLWJsb2NrIiwibXItMTAi'@;
put 'LDMsImRpc2FibGVkIiwiY2xpY2siXSxbMSwiYnRuLWF1dG9kZXBsb3kiLCJidG4iLCJidG4tcHJpbWFyeSIsImQtaW5saW5lLWJsb2NrIiwibXItMTAiLDMsImNsaWNrIl0sWyJ0eXBlIiwiZmlsZSIsImhpZGRlbiIsIiIsMywiY2xpY2siLCJjaGFuZ2UiXSxbInVwbG9hZEpzb25BdXRvIiwi'@;
put 'Il0sWzMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsQ2xvc2FibGUiLCJjbHJNb2RhbE9wZW5DaGFuZ2UiXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJtb2RhbC1mb290ZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5Iiwz'@;
put 'LCJjbGljayJdLFsxLCJhdXRvLWRlcGxveSJdLFsxLCJzcGlubmVyLWJveCJdLFs0LCJuZ0lmIl0sWzEsInNwaW5uZXIiLCJzcGlubmVyLW1kIl0sWzEsIm0tMCIsImFsaWduLXNlbGYtc3RhcnQiXSxbMSwidy0xMDAiXSxbMSwiZGVwbG95LXN0YXR1cy1yb3ciXSxbImNsYXNzIiwiZGVwbG95'@;
put 'LXN1Y2Nlc3MiLCJzaGFwZSIsInN1Y2Nlc3Mtc3RhbmRhcmQiLDQsIm5nSWYiXSxbImNsYXNzIiwiZGVwbG95LWVycm9yIiwic2hhcGUiLCJ0aW1lcy1jaXJjbGUiLDQsIm5nSWYiXSxbImNsYXNzIiwiZGVwbG95LXN0YXR1cy1yb3ciLDQsIm5nSWYiXSxbMSwiYnV0dG9ucyJdLFsxLCJidG4i'@;
put 'LCJidG4tcHJpbWFyeSIsIm10LTE1IiwibXItMCIsMywiY2xpY2siXSxbMSwiYnRuIiwiYnRuLXByaW1hcnktb3V0bGluZSIsIm10LTE1IiwibXItMCIsMywiY2xpY2siXSxbMSwiYnRuIiwiYnRuLXByaW1hcnktb3V0bGluZSIsIm10LTE1IiwibXItMCIsImFsaWduLXNlbGYtZW5kIiwzLCJj'@;
put 'bGljayJdLFsic2hhcGUiLCJzdWNjZXNzLXN0YW5kYXJkIiwxLCJkZXBsb3ktc3VjY2VzcyJdLFsic2hhcGUiLCJ0aW1lcy1jaXJjbGUiLDEsImRlcGxveS1lcnJvciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGYpe2lmKDEmYSl7Y29uc3QgZD1abigpO3R0KDAsVVllLDQsMiwiZGl2IiwwKSx5'@;
put 'ZSgxLCJoNCIsMSksWWUoMiwiVml5YSBEZXBsb3kiKSxDZSgpLHRuKDMsImhyIikseWUoNCwibGFiZWwiLDIpLFllKDUsIkFwcCBMb2MiKSxDZSgpLHllKDYsImRpdiIsMykoNywiZGl2Iiw0KSg4LCJwIiw1KSxZZSg5KSxDZSgpKCkoKSx5ZSgxMCwibGFiZWwiLDIpLFllKDExLCJEQyBMb2Mi'@;
put 'KSxDZSgpLHllKDEyLCJkaXYiLDMpKDEzLCJkaXYiLDQpKDE0LCJwIiw1KSxZZSgxNSksQ2UoKSgpKCkseWUoMTYsImxhYmVsIiwyKSxZZSgxNywiU0FTIEFkbWluIGdyb3VwIiksQ2UoKSx5ZSgxOCwiZGl2IiwzKSgxOSwiZGl2Iiw0KSgyMCwicCIsNSksWWUoMjEpLENlKCkoKSgpLHllKDIy'@;
put 'LCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDIzLCJpbnB1dCIsNiksRXQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKG0pe3JldHVybiBmLnJlY3JlYXRlRGF0YWJhc2U9bX0pKCJjbGljayIsZnVuY3Rpb24obSl7cmV0dXJuIGYucmVjcmVhdGVEYXRhYmFzZUNsaWNrZWQobSl9KSxDZSgpLHll'@;
put 'KDI0LCJsYWJlbCIpLFllKDI1LCJSZWNyZWF0ZSBkYXRhYmFzZSIpLENlKCkoKSx0bigyNiwiaHIiKSx5ZSgyNywiYnV0dG9uIiw3KSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGYuZXhlY3V0ZUpzb24oKX0pLFllKDI4KSxDZSgpLHllKDI5LCJidXR0b24iLDgpLEV0KCJjbGljayIs'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gVXQoZCksWnQoUWkoMzIpLmNsaWNrKCkpfSksWWUoMzAsIiBVcGxvYWQgZGlmZmVyZW50IGZpbGUgdG8gZGVwbG95XG4iKSxDZSgpLHllKDMxLCJpbnB1dCIsOSwxMCksRXQoImNsaWNrIixmdW5jdGlvbihtKXtyZXR1cm4gZi5jbGVhclVwbG9hZElucHV0KG0p'@;
put 'fSkoImNoYW5nZSIsZnVuY3Rpb24obSl7cmV0dXJuIGYub25Kc29uRmlsZUNoYW5nZShtKX0pLENlKCkseWUoMzMsImNsci1tb2RhbCIsMTEpLEV0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKG0pe3JldHVybiBmLnJlY3JlYXRlRGF0YWJhc2VNb2RhbD1tfSkseWUoMzQsImgzIiwx'@;
put 'MiksWWUoMzUsIldhcm5pbmciKSxDZSgpLHllKDM2LCJkaXYiLDEzKSxZZSgzNywiIFRoaXMgYWN0aW9uIHdpbGwgcmVjcmVhdGUgdGhlIGRhdGFiYXNlIChpZiBpdCBleGlzdHMpLiBGb3IgYW4gaW5pdGlhbCBkZXBsb3ltZW50LCB0aGlzIGlzIGV4cGVjdGVkLiBJZiB0aGlzIGlzIGEgcmUt'@;
put 'ZGVwbG95bWVudCwgeW91IHdpbGwgbG9zZSBhbnkgZXhpc3RpbmcgdGFibGVzIGluICIpLHllKDM4LCJzdHJvbmciKSxZZSgzOSksQ2UoKSxZZSg0MCwiLiAiKSxDZSgpLHllKDQxLCJkaXYiLDE0KSg0MiwiYnV0dG9uIiwxNSksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBmLnJlY3Jl'@;
put 'YXRlRGF0YWJhc2VNb2RhbD0hMSxmLnJlY3JlYXRlRGF0YWJhc2U9ITF9KSxZZSg0MywiIENhbmNlbCAiKSxDZSgpLHllKDQ0LCJidXR0b24iLDE1KSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGYucmVjcmVhdGVEYXRhYmFzZU1vZGFsPSExLGYucmVjcmVhdGVEYXRhYmFzZT0hMH0p'@;
put 'LFllKDQ1LCIgT2sgIiksQ2UoKSgpKCl9MiZhJiYoUmUoIm5nSWYiLGYuYXV0b2RlcGxveWluZyksU2UoOSksYXIoZi5hcHBMb2MpLFNlKDYpLGFyKGYuZGNQYXRoKSxTZSg2KSxhcihmLnNlbGVjdGVkQWRtaW5Hcm91cCksU2UoMiksUmUoIm5nTW9kZWwiLGYucmVjcmVhdGVEYXRhYmFzZSks'@;
put 'U2UoNCksUmUoImRpc2FibGVkIiwhZi5qc29uRmlsZSksU2UoMSksd3IoIiBEZXBsb3kgIixmLmpzb25GaWxlPyIiOiIoanNvbiBmaWxlIGlzIG5vdCBhdmFpbGFibGUpIiwiXG4iKSxTZSg1KSxSZSgiY2xyTW9kYWxPcGVuIixmLnJlY3JlYXRlRGF0YWJhc2VNb2RhbCkoImNsck1vZGFsQ2xv'@;
put 'c2FibGUiLCExKSxTZSg2KSxhcihmLmRjUGF0aCkpfSxkZXBlbmRlbmNpZXM6WyRpLFIwLFdhLHphLFJsLE1jLGtjLGVsLEIwLFYwXSxzdHlsZXM6WyIuYXV0by1kZXBsb3lbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1z'@;
put 'OmNlbnRlcjtwb3NpdGlvbjpmaXhlZDtpbnNldDowO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuNCk7ei1pbmRleDoxMDB9LnNwaW5uZXItYm94W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDo0MDBweDtwYWRkaW5nOjIwcHg7Ym9yZGVyLXJhZGl1czozcHg7YmFja2dyb3VuZDojZmZmO2Rpc3Bs'@;
put 'YXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Ym94LXNoYWRvdzoxcHggMXB4IDhweCAjMDAwMDAwODJ9LnNwaW5uZXItYm94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5idXR0b25zW19uZ2NvbnRlbnQtJUNPTVAl'@;
put 'XXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47d2lkdGg6MTAwJX0uZGVwbG95LXN0YXR1cy1yb3dbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fS5kZXBsb3ktc3RhdHVzLXJv'@;
put 'd1tfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDAgMTBweH0uZGVwbG95LXN1Y2Nlc3NbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2ZWNmNDR9LmRlcGxveS1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2U3NGMzY30uZGVwbG95'@;
put 'LXVuZGV0ZXJtaW5hdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojY2FjYWNhfWhyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtib3JkZXItYm90dG9tOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4yNzA1ODgyMzUzKX0iXX0pLGx9KSgpO2Z1bmN0aW9uIFlZZShsLGMpezEmbCYmKHll'@;
put 'KDAsImRpdiIsMTUpLHRuKDEsInByb2dyZXNzIiksQ2UoKSl9ZnVuY3Rpb24gV1llKGwsYyl7aWYoMSZsJiYoeWUoMCwib3B0aW9uIiwxNiksWWUoMSksQ2UoKSksMiZsKXtjb25zdCBhPWMuJGltcGxpY2l0O1JlKCJ2YWx1ZSIsYS5HUk9VUE5BTUUpLFNlKDEpLCR1KCIgIixhLkdST1VQTkFN'@;
put 'RSwiIC0gIixhLkdST1VQREVTQywiICIpfX1sZXQgR1llPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmLGQpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMuc2FzanNTZXJ2aWNlPWYsdGhpcy5sb2NhdGlvbj1kLHRoaXMuc2FzSnNDb25maWc9bmV3IHYxLlNBU2pzQ29uZmlnLHRoaXMub25O'@;
put 'YXZpZ2F0ZVRvSG9tZT1uZXcgeHIsdGhpcy5kY0RpcmVjdG9yeT0iIix0aGlzLmRjQWRtaW5Hcm91cD0iRENERUZBVUxUIix0aGlzLk1FVEFQRVJTT049Im4vYSIsdGhpcy5NRVRBVVNFUj0ibi9hIix0aGlzLlNZU1VTRVJJRD0ibi9hIix0aGlzLlNZU0hPU1ROQU1FPSJuL2EiLHRoaXMuU1lT'@;
put 'VkxPTkc9Im4vYSIsdGhpcy5kY0FkbWluR3JvdXBMaXN0PVtdLHRoaXMubG9hZGluZz0hMSx0aGlzLnNob3dMb2dvdXQ9ITEsdGhpcy50bXBEaXJlY3Rvcmllcz17bGludXg6Ii90bXAvRGF0YUNvbnRyb2xsZXIiLHdpbmRvd3M6IkM6XFxEYXRhQ29udHJvbGxlciJ9fW5nT25Jbml0KCl7dGhp'@;
put 'cy5nZXRVc2VyR3JvdXBzKCksdGhpcy5nZXRTZXJ2ZXJJbmZvKCl9Z2V0U2VydmVySW5mbygpe3RoaXMuc2FzanNTZXJ2aWNlLmdldFNlcnZlckluZm8oKS5zdWJzY3JpYmUoYT0+eyJkZXNrdG9wIiE9PWEubW9kZSYmKHRoaXMuc2hvd0xvZ291dD0hMCl9KX1nZXRVc2VyR3JvdXBzKCl7dGhp'@;
put 'cy5sb2FkaW5nPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJncm91cHNieW1lbWJlciIsbnVsbCkudGhlbihhPT57dGhpcy5NRVRBUEVSU09OPWEuTUZfR0VUVVNFUix0aGlzLlNZU1VTRVJJRD1hLlNZU1VTRVJJRCx0aGlzLlNZU0hPU1ROQU1FPWEuU1lTSE9TVE5B'@;
put 'TUUsdGhpcy5TWVNWTE9ORz1hLlNZU1ZMT05HLHRoaXMuZGNEaXJlY3Rvcnk9dGhpcy50bXBEaXJlY3Rvcmllc1tbIkwiLCJIIiwiQSIsIlMiXS5pbmNsdWRlcyhhLlNZU1NDUEwuc3Vic3RyaW5nKDAsMSkpPyJsaW51eCI6IndpbmRvd3MiXSx0aGlzLmRjQWRtaW5Hcm91cExpc3Q9YS5ncm91'@;
put 'cHMsdGhpcy5kY0FkbWluR3JvdXA9dGhpcy5kY0FkbWluR3JvdXBMaXN0WzBdLkdST1VQTkFNRSx0aGlzLmxvYWRpbmc9ITF9LGE9Pnt0aGlzLmxvYWRpbmc9ITF9KX1tYWtlRGF0YSgpe2xldCBmPXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7Y29uc3QgZD10aGlzLnNhc0pz'@;
put 'Q29uZmlnLmFwcExvYztsZXQgaD10aGlzLnNhc0pzQ29uZmlnLnNlcnZlclVybCxtPXRoaXMuZGNEaXJlY3Rvcnk7dGhpcy5zYXNKc0NvbmZpZy5zZXJ2ZXJUeXBlPT09WHUuRC5TYXNqcz90aGlzLnNhc1NlcnZpY2Uuc2FzanNNYWtlZGF0YUNoZWNraW5nKCkudGhlbihPPT57TyYmKHRoaXMu'@;
put 'bG9jYXRpb24ucmVwbGFjZVN0YXRlKCIvIiksbG9jYXRpb24ucmVsb2FkKCkpfSk6dGhpcy5zYXNKc0NvbmZpZy5zZXJ2ZXJUeXBlPT09WHUuRC5TYXM5JiYoaD0iIixmPXdpbmRvdy5sb2NhdGlvbi5vcmlnaW4rZisiLyIsbT1lbmNvZGVVUklDb21wb25lbnQodGhpcy5kY0RpcmVjdG9yeSkp'@;
put 'LHdpbmRvdy5vcGVuKGAke2h8fCIifSR7Zn0/X3Byb2dyYW09JHtkfS9zZXJ2aWNlcy9hZG1pbi9tYWtlZGF0YSZhZG1pbj0ke3RoaXMuZGNBZG1pbkdyb3VwfSZwYXRoPSR7bX0gYCwiX2JsYW5rIil9bG9nb3V0KCl7dGhpcy5zYXNTZXJ2aWNlLmxvZ291dCgpfX1yZXR1cm4gbC5cdTAyNzVm'@;
put 'YWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChwbCkscnQoTWllKSxydChnZCkpfSxsLlx1MDI3NWNtcD1rcih7dHlwZTpsLHNlbGVjdG9yczpbWyJhcHAtc2FzanMtY29uZmlndXJhdG9yIl1dLGlucHV0czp7c2FzSnM6InNhc0pzIixzYXNKc0NvbmZpZzoic2FzSnNDb25maWci'@;
put 'LGRjQWRhcHRlclNldHRpbmdzOiJkY0FkYXB0ZXJTZXR0aW5ncyJ9LG91dHB1dHM6e29uTmF2aWdhdGVUb0hvbWU6Im9uTmF2aWdhdGVUb0hvbWUifSxkZWNsczo0MSx2YXJzOjksY29uc3RzOltbImNsYXNzIiwidGhpblByb2dyZXNzIHByb2dyZXNTdGF0aWMgcHJvZ3Jlc3MgbG9vcCIsNCwi'@;
put 'bmdJZiJdLFsxLCJ0ZXh0LWNlbnRlciIsIm15LTE1Il0sWzEsImxpZ2h0Il0sWzEsIm0tMCJdLFsxLCJtLTAiLCJtdC0xMCJdLFsxLCJtdC0yMCIsImNsci1jb250cm9sLWxhYmVsIl0sWzEsIm1iLTEwIiwiY2xyLWNvbnRyb2wtY29udGFpbmVyIl0sWzEsImNsci1pbnB1dC13cmFwcGVyIl0s'@;
put 'WyJwbGFjZWhvbGRlciIsIlR5cGUgaW4gZGlyZWN0b3J5IiwxLCJjbHItaW5wdXQiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIl0sWzEsIm1iLTEwIiwibXQtMCIsInctNTB2dyJdLFsiY2xyU2VsZWN0IiwiIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSJdLFszLCJ2YWx1ZSIsNCwi'@;
put 'bmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNsci1mbGV4Il0sWzEsImJ0biIsImJ0bi1zdWNjZXNzIiwibXQtMTUiLCJ0ZXh0LWNlbnRlciIsMywiY2xpY2siXSxbMSwiY2FyZC10ZXh0IiwicGItMTAiXSxbMSwidGhpblByb2dyZXNzIiwicHJvZ3Jlc1N0YXRpYyIsInByb2dyZXNzIiwibG9vcCJd'@;
put 'LFszLCJ2YWx1ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGYpezEmYSYmKHR0KDAsWVllLDIsMCwiZGl2IiwwKSx5ZSgxLCJoNCIsMSksWWUoMiwiU2FzanMgRGVwbG95IiksQ2UoKSx0bigzLCJociIsMikseWUoNCwicCIsMyksWWUoNSwiIFRvIGNvbmZpZ3VyZSBEYXRhIENvbnRyb2xsZXIg'@;
put 'Zm9yIFNBU1x4YTksIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlsczpcbiIpLENlKCkseWUoNiwicCIsNCksWWUoNywiIFBsZWFzZSBzcGVjaWZ5IGEgcGh5c2ljYWwgZGlyZWN0b3J5IGJlbG93LCB0byB3aGljaCB1c2VyICIpLHllKDgsInN0cm9uZyIpLFllKDkpLENlKCks'@;
put 'WWUoMTAsIiBjYW4gd3JpdGUsIG9uIGJlaGFsZiBvZiBEYXRhIENvbnRyb2xsZXI6XG4iKSxDZSgpLHllKDExLCJsYWJlbCIsNSksWWUoMTIsIkRDIERpcmVjdG9yeSIpLENlKCkseWUoMTMsImRpdiIsNikoMTQsImRpdiIsNykoMTUsImlucHV0Iiw4KSxFdCgibmdNb2RlbENoYW5nZSIsZnVu'@;
put 'Y3Rpb24oaCl7cmV0dXJuIGYuZGNEaXJlY3Rvcnk9aH0pLENlKCkoKSgpLHllKDE2LCJwIiw0KSxZZSgxNywiIEJlbG93IGFyZSB0aGUgbGlzdCBvZiBncm91cHMgdG8gd2hpY2ggeW91IGJlbG9uZy4gVGhlIGdyb3VwIHlvdSBzZWxlY3Qgd2lsbCBiZWNvbWUgdGhlIERhdGEgQ29udHJvbGxl'@;
put 'ciBBZG1pbiBHcm91cCwgYW5kIGV2ZXJ5b25lIGluIGl0IHdpbGwgaGF2ZSB1bnJlc3RyaWN0ZWQgYWNjZXNzIHRvIERhdGEgQ29udHJvbGxlci5cbiIpLENlKCkseWUoMTgsImxhYmVsIiw1KSxZZSgxOSwiRGF0YSBDb250cm9sbGVyIEFkbWluIGdyb3VwIiksQ2UoKSx5ZSgyMCwiY2xyLXNl'@;
put 'bGVjdC1jb250YWluZXIiLDkpKDIxLCJzZWxlY3QiLDEwKSxFdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIGYuZGNBZG1pbkdyb3VwPWh9KSx0dCgyMixXWWUsMiwzLCJvcHRpb24iLDExKSxDZSgpKCkseWUoMjMsInAiLDQpLFllKDI0LCIgTm93LCBjcmVhdGUgdGhlIHRh'@;
put 'cmdldCBkaXJlY3RvcnkgYW5kIGRlcGxveSB0aGUgY29udHJvbCBsaWJyYXJ5IHVzaW5nIHRoZSBhZG1pbiBncm91cCBzZWxlY3RlZCBhYm92ZTpcbiIpLENlKCkseWUoMjUsImRpdiIsMTIpKDI2LCJidXR0b24iLDEzKSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGYubWFrZURhdGEo'@;
put 'KX0pLFllKDI3LCIgU1VCTUlUICIpLENlKCkoKSx0bigyOCwiaHIiLDIpLHllKDI5LCJkaXYiLDE0KSgzMCwicCIpLFllKDMxLCJZb3UgYXJlIGNvbm5lY3RlZCB3aXRoIHRoZSBmb2xsb3dpbmcgY3JlZGVudGlhbHM6IiksQ2UoKSx5ZSgzMiwidWwiKSgzMywibGkiKSxZZSgzNCksQ2UoKSx5'@;
put 'ZSgzNSwibGkiKSxZZSgzNiksQ2UoKSx5ZSgzNywibGkiKSxZZSgzOCksQ2UoKSx5ZSgzOSwibGkiKSxZZSg0MCksQ2UoKSgpKCkpLDImYSYmKFJlKCJuZ0lmIixmLmxvYWRpbmcpLFNlKDkpLGFyKGYuU1lTVVNFUklEKSxTZSg2KSxSZSgibmdNb2RlbCIsZi5kY0RpcmVjdG9yeSksU2UoNiks'@;
put 'UmUoIm5nTW9kZWwiLGYuZGNBZG1pbkdyb3VwKSxTZSgxKSxSZSgibmdGb3JPZiIsZi5kY0FkbWluR3JvdXBMaXN0KSxTZSgxMiksd3IoIk1FVEFQRVJTT046ICIsZi5NRVRBUEVSU09OLCIiKSxTZSgyKSx3cigiU1lTVVNFUklEOiAiLGYuU1lTVVNFUklELCIiKSxTZSgyKSx3cigiU1lTSE9T'@;
put 'VE5BTUU6ICIsZi5TWVNIT1NUTkFNRSwiIiksU2UoMiksd3IoIlNZU1ZMT05HOiAiLGYuU1lTVkxPTkcsIiIpKX0sZGVwZW5kZW5jaWVzOltSYSwkaSxTMSxNMSxpcyxMMCxXYSx6YSxlbCxtNyxwN10sc3R5bGVzOlsiLmNsci1jb250cm9sLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17'@;
put 'd2lkdGg6NTB2d30uY2xyLWlucHV0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2xyLWlucHV0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgaW5wdXRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9LnRoaW5Qcm9ncmVzc1tfbmdjb250ZW50LSVDT01QJV17bGVmdDow'@;
put 'O3JpZ2h0OjA7d2lkdGg6dW5zZXQ7aGVpZ2h0OjFweDttYXJnaW4tdG9wOjAhaW1wb3J0YW50fS50aGluUHJvZ3Jlc3NbX25nY29udGVudC0lQ09NUCVdOmFmdGVye3RvcDowfSJdfSksbH0pKCk7ZnVuY3Rpb24gJFllKGwsYyl7aWYoMSZsKXtjb25zdCBhPVpuKCk7eWUoMCwiZGl2Iiw0KSgx'@;
put 'LCJkaXYiLDUpLFllKDIsIlRlcm1zIGFuZCBDb25kaXRpb25zIiksQ2UoKSx5ZSgzLCJkaXYiLDYpKDQsImRpdiIsNykoNSwicCIpLFllKDYsIiBUaGUgRGVtbyB2ZXJzaW9uIG9mIERhdGEgQ29udHJvbGxlciBpcyBmcmVlIGZvciBFVkFMVUFUSU9OIHB1cnBvc2VzIG9ubHkuIEJlZm9yZSBw'@;
put 'cm9jZWVkaW5nIHdpdGggY29uZmlndXJhdGlvbiwgcGxlYXNlIGNvbmZpcm0gdGhhdCB5b3UgaGF2ZSByZWFkLCB1bmRlcnN0b29kLCBhbmQgYWdyZWVkIHRvIHRoZSAiKSx5ZSg3LCJhIiw4KSxZZSg4LCJEYXRhIENvbnRyb2xsZXIgZm9yIFNBU1x4YTkgRXZhbHVhdGlvbiBBZ3JlZW1lbnQi'@;
put 'KSxDZSgpLFllKDksIi4gIiksQ2UoKSgpLHRuKDEwLCJociIsOSkseWUoMTEsImNsci1jaGVja2JveC13cmFwcGVyIikoMTIsImlucHV0IiwxMCksRXQoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gVXQoYSksWnQoR2UoKS50ZXJtc0FncmVlQ2hhbmdlKCkpfSksQ2UoKSx5ZSgxMywibGFi'@;
put 'ZWwiKSxZZSgxNCwiSSBoYXZlIHJlYWQgYW5kIGFncmVlIHRvIHRoZSB0ZXJtcyBvZiB0aGUgIikseWUoMTUsImEiLDgpLFllKDE2LCJEYXRhIENvbnRyb2xsZXIgZm9yIFNBU1x4YTkgRXZhbHVhdGlvbiBBZ3JlZW1lbnQiKSxDZSgpKCkoKSgpKCl9fWZ1bmN0aW9uIEtZZShsLGMpe2lmKDEm'@;
put 'bCl7Y29uc3QgYT1abigpO3llKDAsImRpdiIsMTUpKDEsImFwcC1hdXRvbWF0aWMtZGVwbG95IiwxNiksRXQoIm9uTmF2aWdhdGVUb0hvbWUiLGZ1bmN0aW9uKCl7cmV0dXJuIFV0KGEpLFp0KEdlKDMpLm9uTmF2aWdhdGVUb0hvbWUoKSl9KSxDZSgpKCl9aWYoMiZsKXtjb25zdCBhPUdlKDMp'@;
put 'O1NlKDEpLFJlKCJzYXNKcyIsYS5zYXNKcykoInNhc0pzQ29uZmlnIixhLnNhc0pzQ29uZmlnKSgiZGNBZGFwdGVyU2V0dGluZ3MiLGEuZGNBZGFwdGVyU2V0dGluZ3MpKCJhcHBMb2MiLGEuYXBwTG9jKSgiZGNQYXRoIixhLmRjUGF0aCkoInNlbGVjdGVkQWRtaW5Hcm91cCIsYS5zZWxlY3Rl'@;
put 'ZEFkbWluR3JvdXApfX1mdW5jdGlvbiBxWWUobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJkaXYiLDE3KSgxLCJhcHAtbWFudWFsLWRlcGxveSIsMTgpLEV0KCJvbk5hdmlnYXRlVG9Ib21lIixmdW5jdGlvbigpe3JldHVybiBVdChhKSxadChHZSgzKS5vbk5hdmlnYXRlVG9Ib21l'@;
put 'KCkpfSksQ2UoKSgpfWlmKDImbCl7Y29uc3QgYT1HZSgzKTtTZSgxKSxSZSgic2FzSnMiLGEuc2FzSnMpKCJzYXNKc0NvbmZpZyIsYS5zYXNKc0NvbmZpZykoImRjQWRhcHRlclNldHRpbmdzIixhLmRjQWRhcHRlclNldHRpbmdzKX19ZnVuY3Rpb24gWFllKGwsYyl7aWYoMSZsJiYoV3IoMCks'@;
put 'dHQoMSxLWWUsMiw2LCJkaXYiLDEzKSx0dCgyLHFZZSwyLDMsImRpdiIsMTQpLEdyKCkpLDImbCl7Y29uc3QgYT1HZSgyKTtTZSgxKSxSZSgibmdJZiIsYS5hdXRvZGVwbG95KSxTZSgxKSxSZSgibmdJZiIsIWEuYXV0b2RlcGxveSl9fWZ1bmN0aW9uIEpZZShsLGMpe2lmKDEmbCl7Y29uc3Qg'@;
put 'YT1abigpO1dyKDApLHllKDEsImRpdiIsMTUpKDIsImFwcC1zYXNqcy1jb25maWd1cmF0b3IiLDE4KSxFdCgib25OYXZpZ2F0ZVRvSG9tZSIsZnVuY3Rpb24oKXtyZXR1cm4gVXQoYSksWnQoR2UoMikub25OYXZpZ2F0ZVRvSG9tZSgpKX0pLENlKCkoKSxHcigpfWlmKDImbCl7Y29uc3QgYT1H'@;
put 'ZSgyKTtTZSgyKSxSZSgic2FzSnMiLGEuc2FzSnMpKCJzYXNKc0NvbmZpZyIsYS5zYXNKc0NvbmZpZykoImRjQWRhcHRlclNldHRpbmdzIixhLmRjQWRhcHRlclNldHRpbmdzKX19ZnVuY3Rpb24gUVllKGwsYyl7aWYoMSZsKXtjb25zdCBhPVpuKCk7V3IoMCkseWUoMSwiZGl2IiwxNSkoMiwi'@;
put 'YXBwLXNhc2pzLWNvbmZpZ3VyYXRvciIsMTgpLEV0KCJvbk5hdmlnYXRlVG9Ib21lIixmdW5jdGlvbigpe3JldHVybiBVdChhKSxadChHZSgyKS5vbk5hdmlnYXRlVG9Ib21lKCkpfSksQ2UoKSgpLEdyKCl9aWYoMiZsKXtjb25zdCBhPUdlKDIpO1NlKDIpLFJlKCJzYXNKcyIsYS5zYXNKcyko'@;
put 'InNhc0pzQ29uZmlnIixhLnNhc0pzQ29uZmlnKSgiZGNBZGFwdGVyU2V0dGluZ3MiLGEuZGNBZGFwdGVyU2V0dGluZ3MpfX1mdW5jdGlvbiBlV2UobCxjKXtpZigxJmwmJihXcigwLDExKSx0dCgxLFhZZSwzLDIsIm5nLWNvbnRhaW5lciIsMTIpLHR0KDIsSlllLDMsMywibmctY29udGFpbmVy'@;
put 'IiwxMiksdHQoMyxRWWUsMywzLCJuZy1jb250YWluZXIiLDEyKSxHcigpKSwyJmwpe2NvbnN0IGE9R2UoKTtSZSgibmdTd2l0Y2giLCEwKSxTZSgxKSxSZSgibmdTd2l0Y2hDYXNlIixhLnNhc0pzQ29uZmlnLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzVml5YSksU2UoMSksUmUoIm5n'@;
put 'U3dpdGNoQ2FzZSIsYS5zYXNKc0NvbmZpZy5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhc2pzKSxTZSgxKSxSZSgibmdTd2l0Y2hDYXNlIixhLnNhc0pzQ29uZmlnLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzOSl9fWxldCB3Y2U9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3Rvcihh'@;
put 'LGYsZCxoKXt0aGlzLmFwcFN0b3JlU2VydmljZT1hLHRoaXMuc2FzU2VydmljZT1mLHRoaXMubG9nZ2VyU2VydmljZT1kLHRoaXMucm91dGVyPWgsdGhpcy5zdGVwPTAsdGhpcy5hZG1pbkdyb3Vwcz1bXSx0aGlzLmNsaWVudF9pZD0iIix0aGlzLmNsaWVudF9zZWNyZXQ9IiIsdGhpcy5hcHBM'@;
put 'b2M9IiIsdGhpcy5kY1BhdGg9IiIsdGhpcy5zZWxlY3RlZEFkbWluR3JvdXA9IiIsdGhpcy5hdXRvZGVwbG95PSEwLHRoaXMuanNvbkZpbGU9bnVsbCx0aGlzLnNhc0pzQ29uZmlnPW5ldyB2MS5TQVNqc0NvbmZpZyx0aGlzLlNlcnZlclR5cGU9WHUuRCx0aGlzLmRjQWRhcHRlclNldHRpbmdz'@;
put 'PXRoaXMuYXBwU3RvcmVTZXJ2aWNlLmdldERjQWRhcHRlclNldHRpbmdzKCksdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCJtYW51YWxkZXBsb3kiKSYmKHRoaXMuYXV0b2RlcGxveT0hMSksdGhpcy5zYXNKcz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNJbnN0YW5jZSgpLHRoaXMuc2FzSnND'@;
put 'b25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksdGhpcy5hcHBMb2M9dGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz8uYXBwTG9jfHwiIix0aGlzLmNsaWVudF9pZD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiZGVwbG95X2NsaWVudF9pZCIpfHwiIix0aGlzLmNsaWVudF9zZWNyZXQ9'@;
put 'bG9jYWxTdG9yYWdlLmdldEl0ZW0oImRlcGxveV9zZWNyZXRfa2V5Iil8fCIiLHRoaXMuZGNQYXRoPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJkZXBsb3lfZGNfbG9jIil8fCIifW5nT25Jbml0KCl7dGhpcy5zYXNKc0NvbmZpZy5zZXJ2ZXJUeXBlPT09WHUuRC5TYXNWaXlhJiZmZXRjaCgic2Fz'@;
put 'YnVpbGQvdml5YS5qc29uIikudGhlbihhPT5hLnRleHQoKSkudGhlbihhPT57bGV0IGY9bnVsbDt0cnl7Zj1KU09OLnBhcnNlKGEpfWNhdGNoKGQpe2NvbnNvbGUuZXJyb3IoZCl9ZiYmKHRoaXMuanNvbkZpbGU9Zix0aGlzLmxvZ2dlclNlcnZpY2UubG9nKHRoaXMuanNvbkZpbGUpKX0pLHRo'@;
put 'aXMuc2V0RGVwbG95RGVmYXVsdHMoKX1zZXREZXBsb3lEZWZhdWx0cygpe3RoaXMuZGNQYXRoPXRoaXMuZGNBZGFwdGVyU2V0dGluZ3M/LmRjUGF0aHx8IiIsdGhpcy5zZWxlY3RlZEFkbWluR3JvdXA9dGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz8uYWRtaW5Hcm91cHx8IiIsdGhpcy5zZWxlY3Rl'@;
put 'ZEFkbWluR3JvdXB8fCh0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cD0iU0FTQWRtaW5pc3RyYXRvcnMiKX10ZXJtc0FncmVlQ2hhbmdlKCl7dGhpcy5hdXRvZGVwbG95fHx0aGlzLmdldEFkbWluR3JvdXBzKCksdGhpcy5zdGVwKyt9Z2V0QWRtaW5Hcm91cHMoKXtmZXRjaCh0aGlzLnNhc0pzQ29u'@;
put 'ZmlnLnNlcnZlclVybCsiL2lkZW50aXRpZXMvZ3JvdXBzP3NvcnRCeT1uYW1lJmxpbWl0PTUwMDAiLHtoZWFkZXJzOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24ifX0pLnRoZW4oYT0+YS50ZXh0KCkpLnRoZW4oYT0+e2xldCBmO3RyeXtmPUpTT04ucGFyc2UoYSl9Y2F0Y2goZCl7Y29uc29s'@;
put 'ZS5lcnJvcihkKX1mJiYodGhpcy5hZG1pbkdyb3Vwcz1mLml0ZW1zLHRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwPXRoaXMuYWRtaW5Hcm91cHNbMF0uaWQpfSl9b25OYXZpZ2F0ZVRvSG9tZSgpe3dpbmRvdy5vcGVuKGxvY2F0aW9uLmhyZWYuc3BsaXQoIiMiKVswXSwiX2JsYW5rIil9fXJldHVy'@;
put 'biBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHJ0KEl2KSxydChwbCkscnQoeTEpLHJ0KExhKSl9LGwuXHUwMjc1Y21wPWtyKHt0eXBlOmwsc2VsZWN0b3JzOltbImFwcC1kZXBsb3kiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjQs'@;
put 'dmFyczoyLGNvbnN0czpbWzEsImNvbnRlbnQtYXJlYSIsInBvc2l0aW9uLXJlbGF0aXZlIl0sWzEsImNsci1yb3ciXSxbImlkIiwiVENTIiwiY2xhc3MiLCJjYXJkIiw0LCJuZ0lmIl0sWzMsIm5nU3dpdGNoIiw0LCJuZ0lmIl0sWyJpZCIsIlRDUyIsMSwiY2FyZCJdLFsxLCJjYXJkLWhlYWRl'@;
put 'ciJdLFsxLCJjYXJkLWJsb2NrIl0sWzEsImNhcmQtdGV4dCJdLFsiaHJlZiIsImh0dHBzOi8vZG9jcy5kYXRhY29udHJvbGxlci5pby9ldmFsdWF0aW9uLWxpY2VuY2UtYWdyZWVtZW50IiwidGFyZ2V0IiwiX2JsYW5rIl0sWzEsImxpZ2h0Il0sWyJjbHJDaGVja2JveCIsIiIsInR5cGUiLCJj'@;
put 'aGVja2JveCIsMywiY2hhbmdlIl0sWzMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJhdXRvZGVwbG95LXNlY3Rpb24gY2FyZCIsNCwibmdJZiJdLFsiaWQiLCJtYWluYm9keSIsImNsYXNzIiwiY2FyZCIsNCwibmdJZiJdLFsxLCJhdXRvZGVwbG95LXNlY3Rpb24i'@;
put 'LCJjYXJkIl0sWzMsInNhc0pzIiwic2FzSnNDb25maWciLCJkY0FkYXB0ZXJTZXR0aW5ncyIsImFwcExvYyIsImRjUGF0aCIsInNlbGVjdGVkQWRtaW5Hcm91cCIsIm9uTmF2aWdhdGVUb0hvbWUiXSxbImlkIiwibWFpbmJvZHkiLDEsImNhcmQiXSxbMywic2FzSnMiLCJzYXNKc0NvbmZpZyIs'@;
put 'ImRjQWRhcHRlclNldHRpbmdzIiwib25OYXZpZ2F0ZVRvSG9tZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGYpezEmYSYmKHllKDAsImRpdiIsMCkoMSwiZGl2IiwxKSx0dCgyLCRZZSwxNywwLCJkaXYiLDIpLENlKCksdHQoMyxlV2UsNCw0LCJuZy1jb250YWluZXIiLDMpLENlKCkpLDImYSYm'@;
put 'KFNlKDIpLFJlKCJuZ0lmIiwwPT09Zi5zdGVwKSxTZSgxKSxSZSgibmdJZiIsZi5zdGVwPjApKX0sZGVwZW5kZW5jaWVzOlskaSxrZixDaCxlbCxCMCxWMCxMWWUsWlllLEdZZV0sc3R5bGVzOlsiLmNhcmRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MH0uYnRuW19uZ2NvbnRlbnQt'@;
put 'JUNPTVAlXXttYXJnaW4tdG9wOjEwcHh9LmxvZy13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO2JhY2tncm91bmQ6I2YwZjBmMDtib3JkZXI6MXB4IHNvbGlkICNjOWM5Yzk7cGFkZGluZzoxMHB4O292ZXJmbG93OmF1dG87d2hpdGUtc3BhY2U6cHJlLXdyYXB9I2NvbnRl'@;
put 'eHRzLWJ0bltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzozcHggMCAwO21pbi13aWR0aDozMHB4O21hcmdpbi1sZWZ0OjEwcHg7aGVpZ2h0OjMwcHg7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcn0udmFsaWRhdGlvbi1iYXJb'@;
put 'X25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDttYXJnaW4tdG9wOjIwcHg7YWxpZ24taXRlbXM6Y2VudGVyfS52YWxpZGF0aW9uLWJhcltfbmdjb250ZW50LSVDT01QJV0gICBjbHItaWNvbltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXJpZ2h0OjVweH0uYXV0b2RlcGxveS1zZWN0'@;
put 'aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjAgMTVweH0uYXV0b2RlcGxveS1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbHItY2hlY2tib3gtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHggMH0uYXV0b2RlcGxveS1zZWN0aW9uW19uZ2NvbnRlbnQt'@;
put 'JUNPTVAlXSAgIC5idG4tYXV0b2RlcGxveVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpibG9jazttYXJnaW46MTVweCAwfSJdfSksbH0pKCk7ZnVuY3Rpb24gQ2NlKGwsYyl7KGZ1bmN0aW9uIHRXZShsLGMpe2lmKGMuaGFzKGwpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0'@;
put 'aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShsLGMpLGMuYWRkKGwpfWZ1bmN0aW9uIEtaKGwsYyxhKXtpZighYy5oYXMobCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0'@;
put 'YW5jZSIpO3JldHVybiBhfWZ1bmN0aW9uIElTKGwpe3JldHVybihJUz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10'@;
put 'eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIFUwKGwsYyxhKXtyZXR1cm4oYz1mdW5jdGlvbiByV2UobCl7dmFyIGM9ZnVuY3Rpb24gbldlKGwsYyl7aWYoIm9iamVjdCIhPT1J'@;
put 'UyhsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1JUyhmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3Qg'@;
put 'cmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09SVMoYyk/YzpTdHJpbmcoYyl9KGMpKWluIGw/T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsYyx7dmFsdWU6YSxlbnVtZXJh'@;
put 'YmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmxbY109YSxsfWxldCBFND17YXN5bmM6ITEsYmFzZVVybDpudWxsLGJyZWFrczohMSxleHRlbnNpb25zOm51bGwsZ2ZtOiEwLGhlYWRlcklkczohMCxoZWFkZXJQcmVmaXg6IiIsaGlnaGxpZ2h0Om51bGwsaG9va3M6bnVsbCxs'@;
put 'YW5nUHJlZml4OiJsYW5ndWFnZS0iLG1hbmdsZTohMCxwZWRhbnRpYzohMSxyZW5kZXJlcjpudWxsLHNhbml0aXplOiExLHNhbml0aXplcjpudWxsLHNpbGVudDohMSxzbWFydHlwYW50czohMSx0b2tlbml6ZXI6bnVsbCx3YWxrVG9rZW5zOm51bGwseGh0bWw6ITF9O2Z1bmN0aW9uIFNjZShs'@;
put 'KXtFND1sfWNvbnN0IE1jZT0vWyY8PiInXS8saVdlPW5ldyBSZWdFeHAoTWNlLnNvdXJjZSwiZyIpLGtjZT0vWzw+IiddfCYoPyEoI1xkezEsN318I1tYeF1bYS1mQS1GMC05XXsxLDZ9fFx3Kyk7KS8sb1dlPW5ldyBSZWdFeHAoa2NlLnNvdXJjZSwiZyIpLGFXZT17IiYiOiImYW1wOyIsIjwi'@;
put 'OiImbHQ7IiwiPiI6IiZndDsiLCciJzoiJnF1b3Q7IiwiJyI6IiYjMzk7In0sRWNlPWw9PmFXZVtsXTtmdW5jdGlvbiBFYyhsLGMpe2lmKGMpe2lmKE1jZS50ZXN0KGwpKXJldHVybiBsLnJlcGxhY2UoaVdlLEVjZSl9ZWxzZSBpZihrY2UudGVzdChsKSlyZXR1cm4gbC5yZXBsYWNlKG9XZSxF'@;
put 'Y2UpO3JldHVybiBsfWNvbnN0IGxXZT0vJigjKD86XGQrKXwoPzojeFswLTlBLUZhLWZdKyl8KD86XHcrKSk7Py9naTtmdW5jdGlvbiB4Y2UobCl7cmV0dXJuIGwucmVwbGFjZShsV2UsKGMsYSk9PiJjb2xvbiI9PT0oYT1hLnRvTG93ZXJDYXNlKCkpPyI6IjoiIyI9PT1hLmNoYXJBdCgwKT8i'@;
put 'eCI9PT1hLmNoYXJBdCgxKT9TdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGEuc3Vic3RyaW5nKDIpLDE2KSk6U3RyaW5nLmZyb21DaGFyQ29kZSgrYS5zdWJzdHJpbmcoMSkpOiIiKX1jb25zdCBzV2U9LyhefFteXFtdKVxeL2c7ZnVuY3Rpb24gbWwobCxjKXtsPSJzdHJpbmciPT10eXBl'@;
put 'b2YgbD9sOmwuc291cmNlLGM9Y3x8IiI7Y29uc3QgYT17cmVwbGFjZTooZixkKT0+KGQ9KGQ9ZC5zb3VyY2V8fGQpLnJlcGxhY2Uoc1dlLCIkMSIpLGw9bC5yZXBsYWNlKGYsZCksYSksZ2V0UmVnZXg6KCk9Pm5ldyBSZWdFeHAobCxjKX07cmV0dXJuIGF9Y29uc3QgdVdlPS9bXlx3Ol0vZyxj'@;
put 'V2U9L14kfF5bYS16XVthLXowLTkrLi1dKjp8Xls/I10vaTtmdW5jdGlvbiBBY2UobCxjLGEpe2lmKGwpe2xldCBmO3RyeXtmPWRlY29kZVVSSUNvbXBvbmVudCh4Y2UoYSkpLnJlcGxhY2UodVdlLCIiKS50b0xvd2VyQ2FzZSgpfWNhdGNoe3JldHVybiBudWxsfWlmKDA9PT1mLmluZGV4T2Yo'@;
put 'ImphdmFzY3JpcHQ6Iil8fDA9PT1mLmluZGV4T2YoInZic2NyaXB0OiIpfHwwPT09Zi5pbmRleE9mKCJkYXRhOiIpKXJldHVybiBudWxsfWMmJiFjV2UudGVzdChhKSYmKGE9ZnVuY3Rpb24gcFdlKGwsYyl7UElbIiAiK2xdfHwoUElbIiAiK2xdPWZXZS50ZXN0KGwpP2wrIi8iOkhJKGwsIi8i'@;
put 'LCEwKSk7Y29uc3QgYT0tMT09PShsPVBJWyIgIitsXSkuaW5kZXhPZigiOiIpO3JldHVybiIvLyI9PT1jLnN1YnN0cmluZygwLDIpP2E/YzpsLnJlcGxhY2UoZFdlLCIkMSIpK2M6Ii8iPT09Yy5jaGFyQXQoMCk/YT9jOmwucmVwbGFjZShoV2UsIiQxIikrYzpsK2N9KGMsYSkpO3RyeXthPWVu'@;
put 'Y29kZVVSSShhKS5yZXBsYWNlKC8lMjUvZywiJSIpfWNhdGNoe3JldHVybiBudWxsfXJldHVybiBhfWNvbnN0IFBJPXt9LGZXZT0vXlteOl0rOlwvKlteL10qJC8sZFdlPS9eKFteOl0rOilbXHNcU10qJC8saFdlPS9eKFteOl0rOlwvKlteL10qKVtcc1xTXSokLyxGST17ZXhlYzpmdW5jdGlv'@;
put 'bigpe319O2Z1bmN0aW9uIFRjZShsLGMpe2NvbnN0IGY9bC5yZXBsYWNlKC9cfC9nLChoLG0sXyk9PntsZXQgTz0hMSxYPW07Zm9yKDstLVg+PTAmJiJcXCI9PT1fW1hdOylPPSFPO3JldHVybiBPPyJ8IjoiIHwifSkuc3BsaXQoLyBcfC8pO2xldCBkPTA7aWYoZlswXS50cmltKCl8fGYuc2hp'@;
put 'ZnQoKSxmLmxlbmd0aD4wJiYhZltmLmxlbmd0aC0xXS50cmltKCkmJmYucG9wKCksZi5sZW5ndGg+YylmLnNwbGljZShjKTtlbHNlIGZvcig7Zi5sZW5ndGg8YzspZi5wdXNoKCIiKTtmb3IoO2Q8Zi5sZW5ndGg7ZCsrKWZbZF09ZltkXS50cmltKCkucmVwbGFjZSgvXFxcfC9nLCJ8Iik7cmV0'@;
put 'dXJuIGZ9ZnVuY3Rpb24gSEkobCxjLGEpe2NvbnN0IGY9bC5sZW5ndGg7aWYoMD09PWYpcmV0dXJuIiI7bGV0IGQ9MDtmb3IoO2Q8Zjspe2NvbnN0IGg9bC5jaGFyQXQoZi1kLTEpO2lmKGghPT1jfHxhKXtpZihoPT09Y3x8IWEpYnJlYWs7ZCsrfWVsc2UgZCsrfXJldHVybiBsLnNsaWNlKDAs'@;
put 'Zi1kKX1mdW5jdGlvbiBPY2UobCxjLGEsZil7Y29uc3QgZD1jLmhyZWYsaD1jLnRpdGxlP0VjKGMudGl0bGUpOm51bGwsbT1sWzFdLnJlcGxhY2UoL1xcKFtcW1xdXSkvZywiJDEiKTtpZigiISIhPT1sWzBdLmNoYXJBdCgwKSl7Zi5zdGF0ZS5pbkxpbms9ITA7Y29uc3QgXz17dHlwZToibGlu'@;
put 'ayIscmF3OmEsaHJlZjpkLHRpdGxlOmgsdGV4dDptLHRva2VuczpmLmlubGluZVRva2VucyhtKX07cmV0dXJuIGYuc3RhdGUuaW5MaW5rPSExLF99cmV0dXJue3R5cGU6ImltYWdlIixyYXc6YSxocmVmOmQsdGl0bGU6aCx0ZXh0OkVjKG0pfX1jbGFzcyBOSXtjb25zdHJ1Y3RvcihjKXt0aGlz'@;
put 'Lm9wdGlvbnM9Y3x8RTR9c3BhY2UoYyl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLm5ld2xpbmUuZXhlYyhjKTtpZihhJiZhWzBdLmxlbmd0aD4wKXJldHVybnt0eXBlOiJzcGFjZSIscmF3OmFbMF19fWNvZGUoYyl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLmNvZGUuZXhlYyhjKTtpZihh'@;
put 'KXtjb25zdCBmPWFbMF0ucmVwbGFjZSgvXiB7MSw0fS9nbSwiIik7cmV0dXJue3R5cGU6ImNvZGUiLHJhdzphWzBdLGNvZGVCbG9ja1N0eWxlOiJpbmRlbnRlZCIsdGV4dDp0aGlzLm9wdGlvbnMucGVkYW50aWM/ZjpISShmLCJcbiIpfX19ZmVuY2VzKGMpe2NvbnN0IGE9dGhpcy5ydWxlcy5i'@;
put 'bG9jay5mZW5jZXMuZXhlYyhjKTtpZihhKXtjb25zdCBmPWFbMF0sZD1mdW5jdGlvbiB2V2UobCxjKXtjb25zdCBhPWwubWF0Y2goL14oXHMrKSg/OmBgYCkvKTtpZihudWxsPT09YSlyZXR1cm4gYztjb25zdCBmPWFbMV07cmV0dXJuIGMuc3BsaXQoIlxuIikubWFwKGQ9Pntjb25zdCBoPWQu'@;
put 'bWF0Y2goL15ccysvKTtpZihudWxsPT09aClyZXR1cm4gZDtjb25zdFttXT1oO3JldHVybiBtLmxlbmd0aD49Zi5sZW5ndGg/ZC5zbGljZShmLmxlbmd0aCk6ZH0pLmpvaW4oIlxuIil9KGYsYVszXXx8IiIpO3JldHVybnt0eXBlOiJjb2RlIixyYXc6ZixsYW5nOmFbMl0/YVsyXS50cmltKCku'@;
put 'cmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKTphWzJdLHRleHQ6ZH19fWhlYWRpbmcoYyl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLmhlYWRpbmcuZXhlYyhjKTtpZihhKXtsZXQgZj1hWzJdLnRyaW0oKTtpZigvIyQvLnRlc3QoZikpe2NvbnN0IGQ9SEkoZiwiIyIp'@;
put 'Oyh0aGlzLm9wdGlvbnMucGVkYW50aWN8fCFkfHwvICQvLnRlc3QoZCkpJiYoZj1kLnRyaW0oKSl9cmV0dXJue3R5cGU6ImhlYWRpbmciLHJhdzphWzBdLGRlcHRoOmFbMV0ubGVuZ3RoLHRleHQ6Zix0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUoZil9fX1ocihjKXtjb25zdCBhPXRoaXMucnVs'@;
put 'ZXMuYmxvY2suaHIuZXhlYyhjKTtpZihhKXJldHVybnt0eXBlOiJociIscmF3OmFbMF19fWJsb2NrcXVvdGUoYyl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLmJsb2NrcXVvdGUuZXhlYyhjKTtpZihhKXtjb25zdCBmPWFbMF0ucmVwbGFjZSgvXiAqPlsgXHRdPy9nbSwiIiksZD10aGlzLmxl'@;
put 'eGVyLnN0YXRlLnRvcDt0aGlzLmxleGVyLnN0YXRlLnRvcD0hMDtjb25zdCBoPXRoaXMubGV4ZXIuYmxvY2tUb2tlbnMoZik7cmV0dXJuIHRoaXMubGV4ZXIuc3RhdGUudG9wPWQse3R5cGU6ImJsb2NrcXVvdGUiLHJhdzphWzBdLHRva2VuczpoLHRleHQ6Zn19fWxpc3QoYyl7bGV0IGE9dGhp'@;
put 'cy5ydWxlcy5ibG9jay5saXN0LmV4ZWMoYyk7aWYoYSl7bGV0IGYsZCxoLG0sXyxPLFgsYWUscGUsYmUseGUsVmUsWmU9YVsxXS50cmltKCk7Y29uc3QgbHQ9WmUubGVuZ3RoPjEsZHQ9e3R5cGU6Imxpc3QiLHJhdzoiIixvcmRlcmVkOmx0LHN0YXJ0Omx0PytaZS5zbGljZSgwLC0xKToiIixs'@;
put 'b29zZTohMSxpdGVtczpbXX07WmU9bHQ/YFxcZHsxLDl9XFwke1plLnNsaWNlKC0xKX1gOmBcXCR7WmV9YCx0aGlzLm9wdGlvbnMucGVkYW50aWMmJihaZT1sdD9aZToiWyorLV0iKTtjb25zdCBndD1uZXcgUmVnRXhwKGBeKCB7MCwzfSR7WmV9KSgoPzpbXHQgXVteXFxuXSopPyg/Olxcbnwk'@;
put 'KSlgKTtmb3IoO2MmJihWZT0hMSwoYT1ndC5leGVjKGMpKSYmIXRoaXMucnVsZXMuYmxvY2suaHIudGVzdChjKSk7KXtpZihmPWFbMF0sYz1jLnN1YnN0cmluZyhmLmxlbmd0aCksYWU9YVsyXS5zcGxpdCgiXG4iLDEpWzBdLnJlcGxhY2UoL15cdCsvLHJuPT4iICIucmVwZWF0KDMqcm4ubGVu'@;
put 'Z3RoKSkscGU9Yy5zcGxpdCgiXG4iLDEpWzBdLHRoaXMub3B0aW9ucy5wZWRhbnRpYz8obT0yLHhlPWFlLnRyaW1MZWZ0KCkpOihtPWFbMl0uc2VhcmNoKC9bXiBdLyksbT1tPjQ/MTptLHhlPWFlLnNsaWNlKG0pLG0rPWFbMV0ubGVuZ3RoKSxPPSExLCFhZSYmL14gKiQvLnRlc3QocGUpJiYo'@;
put 'Zis9cGUrIlxuIixjPWMuc3Vic3RyaW5nKHBlLmxlbmd0aCsxKSxWZT0hMCksIVZlKXtjb25zdCBybj1uZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMyxtLTEpfX0oPzpbKistXXxcXGR7MSw5fVsuKV0pKCg/OlsgXHRdW15cXG5dKik/KD86XFxufCQpKWApLFh0PW5ldyBSZWdFeHAoYF4g'@;
put 'ezAsJHtNYXRoLm1pbigzLG0tMSl9fSgoPzotICopezMsfXwoPzpfICopezMsfXwoPzpcXCogKil7Myx9KSg/Olxcbit8JClgKSx5bj1uZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMyxtLTEpfX0oPzpcYFxgXGB8fn5+KWApLFFuPW5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLG0t'@;
put 'MSl9fSNgKTtmb3IoO2MmJihiZT1jLnNwbGl0KCJcbiIsMSlbMF0scGU9YmUsdGhpcy5vcHRpb25zLnBlZGFudGljJiYocGU9cGUucmVwbGFjZSgvXiB7MSw0fSg/PSggezR9KSpbXiBdKS9nLCIgICIpKSwhKHluLnRlc3QocGUpfHxRbi50ZXN0KHBlKXx8cm4udGVzdChwZSl8fFh0LnRlc3Qo'@;
put 'YykpKTspe2lmKHBlLnNlYXJjaCgvW14gXS8pPj1tfHwhcGUudHJpbSgpKXhlKz0iXG4iK3BlLnNsaWNlKG0pO2Vsc2V7aWYoT3x8YWUuc2VhcmNoKC9bXiBdLyk+PTR8fHluLnRlc3QoYWUpfHxRbi50ZXN0KGFlKXx8WHQudGVzdChhZSkpYnJlYWs7eGUrPSJcbiIrcGV9IU8mJiFwZS50cmlt'@;
put 'KCkmJihPPSEwKSxmKz1iZSsiXG4iLGM9Yy5zdWJzdHJpbmcoYmUubGVuZ3RoKzEpLGFlPXBlLnNsaWNlKG0pfX1kdC5sb29zZXx8KFg/ZHQubG9vc2U9ITA6L1xuICpcbiAqJC8udGVzdChmKSYmKFg9ITApKSx0aGlzLm9wdGlvbnMuZ2ZtJiYoZD0vXlxbWyB4WF1cXSAvLmV4ZWMoeGUpLGQm'@;
put 'JihoPSJbIF0gIiE9PWRbMF0seGU9eGUucmVwbGFjZSgvXlxbWyB4WF1cXSArLywiIikpKSxkdC5pdGVtcy5wdXNoKHt0eXBlOiJsaXN0X2l0ZW0iLHJhdzpmLHRhc2s6ISFkLGNoZWNrZWQ6aCxsb29zZTohMSx0ZXh0OnhlfSksZHQucmF3Kz1mfWR0Lml0ZW1zW2R0Lml0ZW1zLmxlbmd0aC0x'@;
put 'XS5yYXc9Zi50cmltUmlnaHQoKSxkdC5pdGVtc1tkdC5pdGVtcy5sZW5ndGgtMV0udGV4dD14ZS50cmltUmlnaHQoKSxkdC5yYXc9ZHQucmF3LnRyaW1SaWdodCgpO2NvbnN0IGp0PWR0Lml0ZW1zLmxlbmd0aDtmb3IoXz0wO188anQ7XysrKWlmKHRoaXMubGV4ZXIuc3RhdGUudG9wPSExLGR0'@;
put 'Lml0ZW1zW19dLnRva2Vucz10aGlzLmxleGVyLmJsb2NrVG9rZW5zKGR0Lml0ZW1zW19dLnRleHQsW10pLCFkdC5sb29zZSl7Y29uc3Qgcm49ZHQuaXRlbXNbX10udG9rZW5zLmZpbHRlcih5bj0+InNwYWNlIj09PXluLnR5cGUpLFh0PXJuLmxlbmd0aD4wJiZybi5zb21lKHluPT4vXG4uKlxu'@;
put 'Ly50ZXN0KHluLnJhdykpO2R0Lmxvb3NlPVh0fWlmKGR0Lmxvb3NlKWZvcihfPTA7XzxqdDtfKyspZHQuaXRlbXNbX10ubG9vc2U9ITA7cmV0dXJuIGR0fX1odG1sKGMpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5odG1sLmV4ZWMoYyk7aWYoYSl7Y29uc3QgZj17dHlwZToiaHRtbCIsYmxv'@;
put 'Y2s6ITAscmF3OmFbMF0scHJlOiF0aGlzLm9wdGlvbnMuc2FuaXRpemVyJiYoInByZSI9PT1hWzFdfHwic2NyaXB0Ij09PWFbMV18fCJzdHlsZSI9PT1hWzFdKSx0ZXh0OmFbMF19O2lmKHRoaXMub3B0aW9ucy5zYW5pdGl6ZSl7Y29uc3QgZD10aGlzLm9wdGlvbnMuc2FuaXRpemVyP3RoaXMu'@;
put 'b3B0aW9ucy5zYW5pdGl6ZXIoYVswXSk6RWMoYVswXSk7Zi50eXBlPSJwYXJhZ3JhcGgiLGYudGV4dD1kLGYudG9rZW5zPXRoaXMubGV4ZXIuaW5saW5lKGQpfXJldHVybiBmfX1kZWYoYyl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLmRlZi5leGVjKGMpO2lmKGEpe2NvbnN0IGY9YVsxXS50'@;
put 'b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xzKy9nLCIgIiksZD1hWzJdP2FbMl0ucmVwbGFjZSgvXjwoLiopPiQvLCIkMSIpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIik6IiIsaD1hWzNdP2FbM10uc3Vic3RyaW5nKDEsYVszXS5sZW5ndGgtMSkucmVwbGFjZSh0aGlz'@;
put 'LnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKTphWzNdO3JldHVybnt0eXBlOiJkZWYiLHRhZzpmLHJhdzphWzBdLGhyZWY6ZCx0aXRsZTpofX19dGFibGUoYyl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLnRhYmxlLmV4ZWMoYyk7aWYoYSl7Y29uc3QgZj17dHlwZToidGFibGUiLGhlYWRl'@;
put 'cjpUY2UoYVsxXSkubWFwKGQ9Pih7dGV4dDpkfSkpLGFsaWduOmFbMl0ucmVwbGFjZSgvXiAqfFx8ICokL2csIiIpLnNwbGl0KC8gKlx8ICovKSxyb3dzOmFbM10mJmFbM10udHJpbSgpP2FbM10ucmVwbGFjZSgvXG5bIFx0XSokLywiIikuc3BsaXQoIlxuIik6W119O2lmKGYuaGVhZGVyLmxl'@;
put 'bmd0aD09PWYuYWxpZ24ubGVuZ3RoKXtmLnJhdz1hWzBdO2xldCBoLG0sXyxPLGQ9Zi5hbGlnbi5sZW5ndGg7Zm9yKGg9MDtoPGQ7aCsrKWYuYWxpZ25baF09L14gKi0rOiAqJC8udGVzdChmLmFsaWduW2hdKT8icmlnaHQiOi9eICo6LSs6ICokLy50ZXN0KGYuYWxpZ25baF0pPyJjZW50ZXIi'@;
put 'Oi9eICo6LSsgKiQvLnRlc3QoZi5hbGlnbltoXSk/ImxlZnQiOm51bGw7Zm9yKGQ9Zi5yb3dzLmxlbmd0aCxoPTA7aDxkO2grKylmLnJvd3NbaF09VGNlKGYucm93c1toXSxmLmhlYWRlci5sZW5ndGgpLm1hcChYPT4oe3RleHQ6WH0pKTtmb3IoZD1mLmhlYWRlci5sZW5ndGgsbT0wO208ZDtt'@;
put 'KyspZi5oZWFkZXJbbV0udG9rZW5zPXRoaXMubGV4ZXIuaW5saW5lKGYuaGVhZGVyW21dLnRleHQpO2ZvcihkPWYucm93cy5sZW5ndGgsbT0wO208ZDttKyspZm9yKE89Zi5yb3dzW21dLF89MDtfPE8ubGVuZ3RoO18rKylPW19dLnRva2Vucz10aGlzLmxleGVyLmlubGluZShPW19dLnRleHQp'@;
put 'O3JldHVybiBmfX19bGhlYWRpbmcoYyl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLmxoZWFkaW5nLmV4ZWMoYyk7aWYoYSlyZXR1cm57dHlwZToiaGVhZGluZyIscmF3OmFbMF0sZGVwdGg6Ij0iPT09YVsyXS5jaGFyQXQoMCk/MToyLHRleHQ6YVsxXSx0b2tlbnM6dGhpcy5sZXhlci5pbmxp'@;
put 'bmUoYVsxXSl9fXBhcmFncmFwaChjKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2sucGFyYWdyYXBoLmV4ZWMoYyk7aWYoYSl7Y29uc3QgZj0iXG4iPT09YVsxXS5jaGFyQXQoYVsxXS5sZW5ndGgtMSk/YVsxXS5zbGljZSgwLC0xKTphWzFdO3JldHVybnt0eXBlOiJwYXJhZ3JhcGgiLHJhdzph'@;
put 'WzBdLHRleHQ6Zix0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUoZil9fX10ZXh0KGMpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay50ZXh0LmV4ZWMoYyk7aWYoYSlyZXR1cm57dHlwZToidGV4dCIscmF3OmFbMF0sdGV4dDphWzBdLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShhWzBdKX19ZXNj'@;
put 'YXBlKGMpe2NvbnN0IGE9dGhpcy5ydWxlcy5pbmxpbmUuZXNjYXBlLmV4ZWMoYyk7aWYoYSlyZXR1cm57dHlwZToiZXNjYXBlIixyYXc6YVswXSx0ZXh0OkVjKGFbMV0pfX10YWcoYyl7Y29uc3QgYT10aGlzLnJ1bGVzLmlubGluZS50YWcuZXhlYyhjKTtpZihhKXJldHVybiF0aGlzLmxleGVy'@;
put 'LnN0YXRlLmluTGluayYmL148YSAvaS50ZXN0KGFbMF0pP3RoaXMubGV4ZXIuc3RhdGUuaW5MaW5rPSEwOnRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rJiYvXjxcL2E+L2kudGVzdChhWzBdKSYmKHRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rPSExKSwhdGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2Nr'@;
put 'JiYvXjwocHJlfGNvZGV8a2JkfHNjcmlwdCkoXHN8PikvaS50ZXN0KGFbMF0pP3RoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jaz0hMDp0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2smJi9ePFwvKHByZXxjb2RlfGtiZHxzY3JpcHQpKFxzfD4pL2kudGVzdChhWzBdKSYmKHRoaXMubGV4ZXIu'@;
put 'c3RhdGUuaW5SYXdCbG9jaz0hMSkse3R5cGU6dGhpcy5vcHRpb25zLnNhbml0aXplPyJ0ZXh0IjoiaHRtbCIscmF3OmFbMF0saW5MaW5rOnRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rLGluUmF3QmxvY2s6dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrLGJsb2NrOiExLHRleHQ6dGhpcy5vcHRp'@;
put 'b25zLnNhbml0aXplP3RoaXMub3B0aW9ucy5zYW5pdGl6ZXI/dGhpcy5vcHRpb25zLnNhbml0aXplcihhWzBdKTpFYyhhWzBdKTphWzBdfX1saW5rKGMpe2NvbnN0IGE9dGhpcy5ydWxlcy5pbmxpbmUubGluay5leGVjKGMpO2lmKGEpe2NvbnN0IGY9YVsyXS50cmltKCk7aWYoIXRoaXMub3B0'@;
put 'aW9ucy5wZWRhbnRpYyYmL148Ly50ZXN0KGYpKXtpZighLz4kLy50ZXN0KGYpKXJldHVybjtjb25zdCBtPUhJKGYuc2xpY2UoMCwtMSksIlxcIik7aWYoKGYubGVuZ3RoLW0ubGVuZ3RoKSUyPT0wKXJldHVybn1lbHNle2NvbnN0IG09ZnVuY3Rpb24gbVdlKGwsYyl7aWYoLTE9PT1sLmluZGV4'@;
put 'T2YoY1sxXSkpcmV0dXJuLTE7Y29uc3QgYT1sLmxlbmd0aDtsZXQgZj0wLGQ9MDtmb3IoO2Q8YTtkKyspaWYoIlxcIj09PWxbZF0pZCsrO2Vsc2UgaWYobFtkXT09PWNbMF0pZisrO2Vsc2UgaWYobFtkXT09PWNbMV0mJihmLS0sZjwwKSlyZXR1cm4gZDtyZXR1cm4tMX0oYVsyXSwiKCkiKTtp'@;
put 'ZihtPi0xKXtjb25zdCBPPSgwPT09YVswXS5pbmRleE9mKCIhIik/NTo0KSthWzFdLmxlbmd0aCttO2FbMl09YVsyXS5zdWJzdHJpbmcoMCxtKSxhWzBdPWFbMF0uc3Vic3RyaW5nKDAsTykudHJpbSgpLGFbM109IiJ9fWxldCBkPWFbMl0saD0iIjtpZih0aGlzLm9wdGlvbnMucGVkYW50aWMp'@;
put 'e2NvbnN0IG09L14oW14nIl0qW15cc10pXHMrKFsnIl0pKC4qKVwyLy5leGVjKGQpO20mJihkPW1bMV0saD1tWzNdKX1lbHNlIGg9YVszXT9hWzNdLnNsaWNlKDEsLTEpOiIiO3JldHVybiBkPWQudHJpbSgpLC9ePC8udGVzdChkKSYmKGQ9dGhpcy5vcHRpb25zLnBlZGFudGljJiYhLz4kLy50'@;
put 'ZXN0KGYpP2Quc2xpY2UoMSk6ZC5zbGljZSgxLC0xKSksT2NlKGEse2hyZWY6ZCYmZC5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpLHRpdGxlOmgmJmgucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKX0sYVswXSx0aGlzLmxleGVyKX19cmVm'@;
put 'bGluayhjLGEpe2xldCBmO2lmKChmPXRoaXMucnVsZXMuaW5saW5lLnJlZmxpbmsuZXhlYyhjKSl8fChmPXRoaXMucnVsZXMuaW5saW5lLm5vbGluay5leGVjKGMpKSl7bGV0IGQ9KGZbMl18fGZbMV0pLnJlcGxhY2UoL1xzKy9nLCIgIik7aWYoZD1hW2QudG9Mb3dlckNhc2UoKV0sIWQpe2Nv'@;
put 'bnN0IGg9ZlswXS5jaGFyQXQoMCk7cmV0dXJue3R5cGU6InRleHQiLHJhdzpoLHRleHQ6aH19cmV0dXJuIE9jZShmLGQsZlswXSx0aGlzLmxleGVyKX19ZW1TdHJvbmcoYyxhLGY9IiIpe2xldCBkPXRoaXMucnVsZXMuaW5saW5lLmVtU3Ryb25nLmxEZWxpbS5leGVjKGMpO2lmKCEoIWR8fGRb'@;
put 'M10mJmYubWF0Y2goL1tccHtMfVxwe059XS91KSkmJighZFsxXSYmIWRbMl18fCFmfHx0aGlzLnJ1bGVzLmlubGluZS5wdW5jdHVhdGlvbi5leGVjKGYpKSl7Y29uc3QgbT1kWzBdLmxlbmd0aC0xO2xldCBfLE8sWD1tLGFlPTA7Y29uc3QgcGU9IioiPT09ZFswXVswXT90aGlzLnJ1bGVzLmlu'@;
put 'bGluZS5lbVN0cm9uZy5yRGVsaW1Bc3Q6dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmcuckRlbGltVW5kO2ZvcihwZS5sYXN0SW5kZXg9MCxhPWEuc2xpY2UoLTEqYy5sZW5ndGgrbSk7bnVsbCE9KGQ9cGUuZXhlYyhhKSk7KXtpZihfPWRbMV18fGRbMl18fGRbM118fGRbNF18fGRbNV18fGRb'@;
put 'Nl0sIV8pY29udGludWU7aWYoTz1fLmxlbmd0aCxkWzNdfHxkWzRdKXtYKz1PO2NvbnRpbnVlfWlmKChkWzVdfHxkWzZdKSYmbSUzJiYhKChtK08pJTMpKXthZSs9Tztjb250aW51ZX1pZihYLT1PLFg+MCljb250aW51ZTtPPU1hdGgubWluKE8sTytYK2FlKTtjb25zdCBiZT1jLnNsaWNlKDAs'@;
put 'bStkLmluZGV4K08rMSk7aWYoTWF0aC5taW4obSxPKSUyKXtjb25zdCBWZT1iZS5zbGljZSgxLC0xKTtyZXR1cm57dHlwZToiZW0iLHJhdzpiZSx0ZXh0OlZlLHRva2Vuczp0aGlzLmxleGVyLmlubGluZVRva2VucyhWZSl9fWNvbnN0IHhlPWJlLnNsaWNlKDIsLTIpO3JldHVybnt0eXBlOiJz'@;
put 'dHJvbmciLHJhdzpiZSx0ZXh0OnhlLHRva2Vuczp0aGlzLmxleGVyLmlubGluZVRva2Vucyh4ZSl9fX19Y29kZXNwYW4oYyl7Y29uc3QgYT10aGlzLnJ1bGVzLmlubGluZS5jb2RlLmV4ZWMoYyk7aWYoYSl7bGV0IGY9YVsyXS5yZXBsYWNlKC9cbi9nLCIgIik7Y29uc3QgZD0vW14gXS8udGVz'@;
put 'dChmKSxoPS9eIC8udGVzdChmKSYmLyAkLy50ZXN0KGYpO3JldHVybiBkJiZoJiYoZj1mLnN1YnN0cmluZygxLGYubGVuZ3RoLTEpKSxmPUVjKGYsITApLHt0eXBlOiJjb2Rlc3BhbiIscmF3OmFbMF0sdGV4dDpmfX19YnIoYyl7Y29uc3QgYT10aGlzLnJ1bGVzLmlubGluZS5ici5leGVjKGMp'@;
put 'O2lmKGEpcmV0dXJue3R5cGU6ImJyIixyYXc6YVswXX19ZGVsKGMpe2NvbnN0IGE9dGhpcy5ydWxlcy5pbmxpbmUuZGVsLmV4ZWMoYyk7aWYoYSlyZXR1cm57dHlwZToiZGVsIixyYXc6YVswXSx0ZXh0OmFbMl0sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lVG9rZW5zKGFbMl0pfX1hdXRvbGlu'@;
put 'ayhjLGEpe2NvbnN0IGY9dGhpcy5ydWxlcy5pbmxpbmUuYXV0b2xpbmsuZXhlYyhjKTtpZihmKXtsZXQgZCxoO3JldHVybiJAIj09PWZbMl0/KGQ9RWModGhpcy5vcHRpb25zLm1hbmdsZT9hKGZbMV0pOmZbMV0pLGg9Im1haWx0bzoiK2QpOihkPUVjKGZbMV0pLGg9ZCkse3R5cGU6Imxpbmsi'@;
put 'LHJhdzpmWzBdLHRleHQ6ZCxocmVmOmgsdG9rZW5zOlt7dHlwZToidGV4dCIscmF3OmQsdGV4dDpkfV19fX11cmwoYyxhKXtsZXQgZjtpZihmPXRoaXMucnVsZXMuaW5saW5lLnVybC5leGVjKGMpKXtsZXQgZCxoO2lmKCJAIj09PWZbMl0pZD1FYyh0aGlzLm9wdGlvbnMubWFuZ2xlP2EoZlsw'@;
put 'XSk6ZlswXSksaD0ibWFpbHRvOiIrZDtlbHNle2xldCBtO2Rve209ZlswXSxmWzBdPXRoaXMucnVsZXMuaW5saW5lLl9iYWNrcGVkYWwuZXhlYyhmWzBdKVswXX13aGlsZShtIT09ZlswXSk7ZD1FYyhmWzBdKSxoPSJ3d3cuIj09PWZbMV0/Imh0dHA6Ly8iK2ZbMF06ZlswXX1yZXR1cm57dHlw'@;
put 'ZToibGluayIscmF3OmZbMF0sdGV4dDpkLGhyZWY6aCx0b2tlbnM6W3t0eXBlOiJ0ZXh0IixyYXc6ZCx0ZXh0OmR9XX19fWlubGluZVRleHQoYyxhKXtjb25zdCBmPXRoaXMucnVsZXMuaW5saW5lLnRleHQuZXhlYyhjKTtpZihmKXtsZXQgZDtyZXR1cm4gZD10aGlzLmxleGVyLnN0YXRlLmlu'@;
put 'UmF3QmxvY2s/dGhpcy5vcHRpb25zLnNhbml0aXplP3RoaXMub3B0aW9ucy5zYW5pdGl6ZXI/dGhpcy5vcHRpb25zLnNhbml0aXplcihmWzBdKTpFYyhmWzBdKTpmWzBdOkVjKHRoaXMub3B0aW9ucy5zbWFydHlwYW50cz9hKGZbMF0pOmZbMF0pLHt0eXBlOiJ0ZXh0IixyYXc6ZlswXSx0ZXh0'@;
put 'OmR9fX19Y29uc3QgTG89e25ld2xpbmU6L14oPzogKig/OlxufCQpKSsvLGNvZGU6L14oIHs0fVteXG5dKyg/OlxuKD86ICooPzpcbnwkKSkqKT8pKy8sZmVuY2VzOi9eIHswLDN9KGB7Myx9KD89W15gXG5dKig/OlxufCQpKXx+ezMsfSkoW15cbl0qKSg/OlxufCQpKD86fChbXHNcU10qPyko'@;
put 'PzpcbnwkKSkoPzogezAsM31cMVt+YF0qICooPz1cbnwkKXwkKS8saHI6L14gezAsM30oKD86LVtcdCBdKil7Myx9fCg/Ol9bIFx0XSopezMsfXwoPzpcKlsgXHRdKil7Myx9KSg/OlxuK3wkKS8saGVhZGluZzovXiB7MCwzfSgjezEsNn0pKD89XHN8JCkoLiopKD86XG4rfCQpLyxibG9ja3F1'@;
put 'b3RlOi9eKCB7MCwzfT4gPyhwYXJhZ3JhcGh8W15cbl0qKSg/OlxufCQpKSsvLGxpc3Q6L14oIHswLDN9YnVsbCkoWyBcdF1bXlxuXSs/KT8oPzpcbnwkKS8saHRtbDoiXiB7MCwzfSg/Ojwoc2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYSlbXFxzPl1bXFxzXFxTXSo/KD86PC9cXDE+W15cXG5d'@;
put 'Klxcbit8JCl8Y29tbWVudFteXFxuXSooXFxuK3wkKXw8XFw/W1xcc1xcU10qPyg/OlxcPz5cXG4qfCQpfDwhW0EtWl1bXFxzXFxTXSo/KD86Plxcbip8JCl8PCFcXFtDREFUQVxcW1tcXHNcXFNdKj8oPzpcXF1cXF0+XFxuKnwkKXw8Lz8odGFnKSg/OiArfFxcbnwvPz4pW1xcc1xcU10qPyg/'@;
put 'Oig/OlxcbiAqKStcXG58JCl8PCg/IXNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpKFthLXpdW1xcdy1dKikoPzphdHRyaWJ1dGUpKj8gKi8/Pig/PVsgXFx0XSooPzpcXG58JCkpW1xcc1xcU10qPyg/Oig/OlxcbiAqKStcXG58JCl8PC8oPyFzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhKVth'@;
put 'LXpdW1xcdy1dKlxccyo+KD89WyBcXHRdKig/OlxcbnwkKSlbXFxzXFxTXSo/KD86KD86XFxuICopK1xcbnwkKSkiLGRlZjovXiB7MCwzfVxbKGxhYmVsKVxdOiAqKD86XG4gKik/KFtePFxzXVteXHNdKnw8Lio/PikoPzooPzogKyg/OlxuICopP3wgKlxuICopKHRpdGxlKSk/ICooPzpcbit8'@;
put 'JCkvLHRhYmxlOkZJLGxoZWFkaW5nOi9eKCg/Oig/IV5idWxsICkufFxuKD8hXG58YnVsbCApKSs/KVxuIHswLDN9KD0rfC0rKSAqKD86XG4rfCQpLyxfcGFyYWdyYXBoOi9eKFteXG5dKyg/OlxuKD8haHJ8aGVhZGluZ3xsaGVhZGluZ3xibG9ja3F1b3RlfGZlbmNlc3xsaXN0fGh0bWx8dGFi'@;
put 'bGV8ICtcbilbXlxuXSspKikvLHRleHQ6L15bXlxuXSsvLF9sYWJlbDovKD8hXHMqXF0pKD86XFwufFteXFtcXVxcXSkrLyxfdGl0bGU6Lyg/OiIoPzpcXCI/fFteIlxcXSkqInwnW14nXG5dKig/OlxuW14nXG5dKykqXG4/J3xcKFteKCldKlwpKS99O0xvLmRlZj1tbChMby5kZWYpLnJlcGxh'@;
put 'Y2UoImxhYmVsIixMby5fbGFiZWwpLnJlcGxhY2UoInRpdGxlIixMby5fdGl0bGUpLmdldFJlZ2V4KCksTG8uYnVsbGV0PS8oPzpbKistXXxcZHsxLDl9Wy4pXSkvLExvLmxpc3RJdGVtU3RhcnQ9bWwoL14oICopKGJ1bGwpICovKS5yZXBsYWNlKCJidWxsIixMby5idWxsZXQpLmdldFJlZ2V4'@;
put 'KCksTG8ubGlzdD1tbChMby5saXN0KS5yZXBsYWNlKC9idWxsL2csTG8uYnVsbGV0KS5yZXBsYWNlKCJociIsIlxcbisoPz1cXDE/KD86KD86LSAqKXszLH18KD86XyAqKXszLH18KD86XFwqICopezMsfSkoPzpcXG4rfCQpKSIpLnJlcGxhY2UoImRlZiIsIlxcbisoPz0iK0xvLmRlZi5zb3Vy'@;
put 'Y2UrIikiKS5nZXRSZWdleCgpLExvLl90YWc9ImFkZHJlc3N8YXJ0aWNsZXxhc2lkZXxiYXNlfGJhc2Vmb250fGJsb2NrcXVvdGV8Ym9keXxjYXB0aW9ufGNlbnRlcnxjb2x8Y29sZ3JvdXB8ZGR8ZGV0YWlsc3xkaWFsb2d8ZGlyfGRpdnxkbHxkdHxmaWVsZHNldHxmaWdjYXB0aW9ufGZpZ3Vy'@;
put 'ZXxmb290ZXJ8Zm9ybXxmcmFtZXxmcmFtZXNldHxoWzEtNl18aGVhZHxoZWFkZXJ8aHJ8aHRtbHxpZnJhbWV8bGVnZW5kfGxpfGxpbmt8bWFpbnxtZW51fG1lbnVpdGVtfG1ldGF8bmF2fG5vZnJhbWVzfG9sfG9wdGdyb3VwfG9wdGlvbnxwfHBhcmFtfHNlY3Rpb258c291cmNlfHN1bW1hcnl8'@;
put 'dGFibGV8dGJvZHl8dGR8dGZvb3R8dGh8dGhlYWR8dGl0bGV8dHJ8dHJhY2t8dWwiLExvLl9jb21tZW50PS88IS0tKD8hLT8+KVtcc1xTXSo/KD86LS0+fCQpLyxMby5odG1sPW1sKExvLmh0bWwsImkiKS5yZXBsYWNlKCJjb21tZW50IixMby5fY29tbWVudCkucmVwbGFjZSgidGFnIixMby5f'@;
put 'dGFnKS5yZXBsYWNlKCJhdHRyaWJ1dGUiLC8gK1thLXpBLVo6X11bXHcuOi1dKig/OiAqPSAqIlteIlxuXSoifCAqPSAqJ1teJ1xuXSonfCAqPSAqW15ccyInPTw+YF0rKT8vKS5nZXRSZWdleCgpLExvLmxoZWFkaW5nPW1sKExvLmxoZWFkaW5nKS5yZXBsYWNlKC9idWxsL2csTG8uYnVsbGV0'@;
put 'KS5nZXRSZWdleCgpLExvLnBhcmFncmFwaD1tbChMby5fcGFyYWdyYXBoKS5yZXBsYWNlKCJociIsTG8uaHIpLnJlcGxhY2UoImhlYWRpbmciLCIgezAsM30jezEsNn0gIikucmVwbGFjZSgifGxoZWFkaW5nIiwiIikucmVwbGFjZSgifHRhYmxlIiwiIikucmVwbGFjZSgiYmxvY2txdW90ZSIs'@;
put 'IiB7MCwzfT4iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFbLildKSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/KD86dGFnKSg/OiArfFxcbnwvPz4pfDwoPzpz'@;
put 'Y3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLExvLl90YWcpLmdldFJlZ2V4KCksTG8uYmxvY2txdW90ZT1tbChMby5ibG9ja3F1b3RlKS5yZXBsYWNlKCJwYXJhZ3JhcGgiLExvLnBhcmFncmFwaCkuZ2V0UmVnZXgoKSxMby5ub3JtYWw9ey4uLkxvfSxMby5n'@;
put 'Zm09ey4uLkxvLm5vcm1hbCx0YWJsZToiXiAqKFteXFxuIF0uKlxcfC4qKVxcbiB7MCwzfSg/OlxcfCAqKT8oOj8tKzo/ICooPzpcXHwgKjo/LSs6PyAqKSopKD86XFx8ICopPyg/OlxcbigoPzooPyEgKlxcbnxocnxoZWFkaW5nfGJsb2NrcXVvdGV8Y29kZXxmZW5jZXN8bGlzdHxodG1sKS4q'@;
put 'KD86XFxufCQpKSopXFxuKnwkKSJ9LExvLmdmbS50YWJsZT1tbChMby5nZm0udGFibGUpLnJlcGxhY2UoImhyIixMby5ocikucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2fSAiKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoImNvZGUiLCIgezR9W15cXG5d'@;
put 'IikucmVwbGFjZSgiZmVuY2VzIiwiIHswLDN9KD86YHszLH0oPz1bXmBcXG5dKlxcbil8fnszLH0pW15cXG5dKlxcbiIpLnJlcGxhY2UoImxpc3QiLCIgezAsM30oPzpbKistXXwxWy4pXSkgIikucmVwbGFjZSgiaHRtbCIsIjwvPyg/OnRhZykoPzogK3xcXG58Lz8+KXw8KD86c2NyaXB0fHBy'@;
put 'ZXxzdHlsZXx0ZXh0YXJlYXwhLS0pIikucmVwbGFjZSgidGFnIixMby5fdGFnKS5nZXRSZWdleCgpLExvLmdmbS5wYXJhZ3JhcGg9bWwoTG8uX3BhcmFncmFwaCkucmVwbGFjZSgiaHIiLExvLmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwiIHswLDN9I3sxLDZ9ICIpLnJlcGxhY2UoInxsaGVhZGlu'@;
put 'ZyIsIiIpLnJlcGxhY2UoInRhYmxlIixMby5nZm0udGFibGUpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgiZmVuY2VzIiwiIHswLDN9KD86YHszLH0oPz1bXmBcXG5dKlxcbil8fnszLH0pW15cXG5dKlxcbiIpLnJlcGxhY2UoImxpc3QiLCIgezAsM30oPzpbKist'@;
put 'XXwxWy4pXSkgIikucmVwbGFjZSgiaHRtbCIsIjwvPyg/OnRhZykoPzogK3xcXG58Lz8+KXw8KD86c2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYXwhLS0pIikucmVwbGFjZSgidGFnIixMby5fdGFnKS5nZXRSZWdleCgpLExvLnBlZGFudGljPXsuLi5Mby5ub3JtYWwsaHRtbDptbCgiXiAqKD86'@;
put 'Y29tbWVudCAqKD86XFxufFxccyokKXw8KHRhZylbXFxzXFxTXSs/PC9cXDE+ICooPzpcXG57Mix9fFxccyokKXw8dGFnKD86XCJbXlwiXSpcInwnW14nXSonfFxcc1teJ1wiLz5cXHNdKikqPy8/PiAqKD86XFxuezIsfXxcXHMqJCkpIikucmVwbGFjZSgiY29tbWVudCIsTG8uX2NvbW1lbnQp'@;
put 'LnJlcGxhY2UoL3RhZy9nLCIoPyEoPzphfGVtfHN0cm9uZ3xzbWFsbHxzfGNpdGV8cXxkZm58YWJicnxkYXRhfHRpbWV8Y29kZXx2YXJ8c2FtcHxrYmR8c3VifHN1cHxpfGJ8dXxtYXJrfHJ1Ynl8cnR8cnB8YmRpfGJkb3xzcGFufGJyfHdicnxpbnN8ZGVsfGltZylcXGIpXFx3Kyg/ITp8W15c'@;
put 'XHdcXHNAXSpAKVxcYiIpLmdldFJlZ2V4KCksZGVmOi9eICpcWyhbXlxdXSspXF06ICo8PyhbXlxzPl0rKT4/KD86ICsoWyIoXVteXG5dK1siKV0pKT8gKig/OlxuK3wkKS8saGVhZGluZzovXigjezEsNn0pKC4qKSg/OlxuK3wkKS8sZmVuY2VzOkZJLGxoZWFkaW5nOi9eKC4rPylcbiB7MCwz'@;
put 'fSg9K3wtKykgKig/OlxuK3wkKS8scGFyYWdyYXBoOm1sKExvLm5vcm1hbC5fcGFyYWdyYXBoKS5yZXBsYWNlKCJociIsTG8uaHIpLnJlcGxhY2UoImhlYWRpbmciLCIgKiN7MSw2fSAqW15cbl0iKS5yZXBsYWNlKCJsaGVhZGluZyIsTG8ubGhlYWRpbmcpLnJlcGxhY2UoImJsb2NrcXVvdGUi'@;
put 'LCIgezAsM30+IikucmVwbGFjZSgifGZlbmNlcyIsIiIpLnJlcGxhY2UoInxsaXN0IiwiIikucmVwbGFjZSgifGh0bWwiLCIiKS5nZXRSZWdleCgpfTtjb25zdCBlbz17ZXNjYXBlOi9eXFwoWyEiIyQlJicoKSorLFwtLi86Ozw9Pj9AXFtcXVxcXl9ge3x9fl0pLyxhdXRvbGluazovXjwoc2No'@;
put 'ZW1lOlteXHNceDAwLVx4MWY8Pl0qfGVtYWlsKT4vLHVybDpGSSx0YWc6Il5jb21tZW50fF48L1thLXpBLVpdW1xcdzotXSpcXHMqPnxePFthLXpBLVpdW1xcdy1dKig/OmF0dHJpYnV0ZSkqP1xccyovPz58XjxcXD9bXFxzXFxTXSo/XFw/PnxePCFbYS16QS1aXStcXHNbXFxzXFxTXSo/Pnxe'@;
put 'PCFcXFtDREFUQVxcW1tcXHNcXFNdKj9cXF1cXF0+IixsaW5rOi9eIT9cWyhsYWJlbClcXVwoXHMqKGhyZWYpKD86XHMrKHRpdGxlKSk/XHMqXCkvLHJlZmxpbms6L14hP1xbKGxhYmVsKVxdXFsocmVmKVxdLyxub2xpbms6L14hP1xbKHJlZilcXSg/OlxbXF0pPy8scmVmbGlua1NlYXJjaDoi'@;
put 'cmVmbGlua3xub2xpbmsoPyFcXCgpIixlbVN0cm9uZzp7bERlbGltOi9eKD86XCorKD86KCg/IVwqKVtwdW5jdF0pfFteXHMqXSkpfF5fKyg/OigoPyFfKVtwdW5jdF0pfChbXlxzX10pKS8sckRlbGltQXN0Oi9eW15fKl0qP19fW15fKl0qP1wqW15fKl0qPyg/PV9fKXxbXipdKyg/PVteKl0p'@;
put 'fCg/IVwqKVtwdW5jdF0oXCorKSg/PVtcc118JCl8W15wdW5jdFxzXShcKispKD8hXCopKD89W3B1bmN0XHNdfCQpfCg/IVwqKVtwdW5jdFxzXShcKispKD89W15wdW5jdFxzXSl8W1xzXShcKispKD8hXCopKD89W3B1bmN0XSl8KD8hXCopW3B1bmN0XShcKispKD8hXCopKD89W3B1bmN0XSl8'@;
put 'W15wdW5jdFxzXShcKispKD89W15wdW5jdFxzXSkvLHJEZWxpbVVuZDovXlteXypdKj9cKlwqW15fKl0qP19bXl8qXSo/KD89XCpcKil8W15fXSsoPz1bXl9dKXwoPyFfKVtwdW5jdF0oXyspKD89W1xzXXwkKXxbXnB1bmN0XHNdKF8rKSg/IV8pKD89W3B1bmN0XHNdfCQpfCg/IV8pW3B1bmN0'@;
put 'XHNdKF8rKSg/PVtecHVuY3Rcc10pfFtcc10oXyspKD8hXykoPz1bcHVuY3RdKXwoPyFfKVtwdW5jdF0oXyspKD8hXykoPz1bcHVuY3RdKS99LGNvZGU6L14oYCspKFteYF18W15gXVtcc1xTXSo/W15gXSlcMSg/IWApLyxicjovXiggezIsfXxcXClcbig/IVxzKiQpLyxkZWw6RkksdGV4dDov'@;
put 'XihgK3xbXmBdKSg/Oig/PSB7Mix9XG4pfFtcc1xTXSo/KD86KD89W1xcPCFcW2AqX118XGJffCQpfFteIF0oPz0gezIsfVxuKSkpLyxwdW5jdHVhdGlvbjovXigoPyFbKl9dKVtcc3B1bmN0dWF0aW9uXSkvfTtmdW5jdGlvbiB5V2UobCl7cmV0dXJuIGwucmVwbGFjZSgvLS0tL2csIlx1MjAx'@;
put 'NCIpLnJlcGxhY2UoLy0tL2csIlx1MjAxMyIpLnJlcGxhY2UoLyhefFstXHUyMDE0LyhcW3siXHNdKScvZywiJDFcdTIwMTgiKS5yZXBsYWNlKC8nL2csIlx1MjAxOSIpLnJlcGxhY2UoLyhefFstXHUyMDE0LyhcW3tcdTIwMThcc10pIi9nLCIkMVx1MjAxYyIpLnJlcGxhY2UoLyIvZywiXHUy'@;
put 'MDFkIikucmVwbGFjZSgvXC57M30vZywiXHUyMDI2Iil9ZnVuY3Rpb24gRGNlKGwpe2xldCBhLGYsYz0iIjtjb25zdCBkPWwubGVuZ3RoO2ZvcihhPTA7YTxkO2ErKylmPWwuY2hhckNvZGVBdChhKSxNYXRoLnJhbmRvbSgpPi41JiYoZj0ieCIrZi50b1N0cmluZygxNikpLGMrPSImIyIrZisi'@;
put 'OyI7cmV0dXJuIGN9ZW8uX3B1bmN0dWF0aW9uPSJcXHB7UH0kKzw9PmBefH4iLGVvLnB1bmN0dWF0aW9uPW1sKGVvLnB1bmN0dWF0aW9uLCJ1IikucmVwbGFjZSgvcHVuY3R1YXRpb24vZyxlby5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksZW8uYmxvY2tTa2lwPS9cW1teW1xdXSo/XF1cKFte'@;
put 'XChcKV0qP1wpfGBbXmBdKj9gfDxbXjw+XSo/Pi9nLGVvLmFueVB1bmN0dWF0aW9uPS9cXFtwdW5jdF0vZyxlby5fZXNjYXBlcz0vXFwoW3B1bmN0XSkvZyxlby5fY29tbWVudD1tbChMby5fY29tbWVudCkucmVwbGFjZSgiKD86LS1ceDNlfCQpIiwiLS1ceDNlIikuZ2V0UmVnZXgoKSxlby5l'@;
put 'bVN0cm9uZy5sRGVsaW09bWwoZW8uZW1TdHJvbmcubERlbGltLCJ1IikucmVwbGFjZSgvcHVuY3QvZyxlby5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksZW8uZW1TdHJvbmcuckRlbGltQXN0PW1sKGVvLmVtU3Ryb25nLnJEZWxpbUFzdCwiZ3UiKS5yZXBsYWNlKC9wdW5jdC9nLGVvLl9wdW5j'@;
put 'dHVhdGlvbikuZ2V0UmVnZXgoKSxlby5lbVN0cm9uZy5yRGVsaW1VbmQ9bWwoZW8uZW1TdHJvbmcuckRlbGltVW5kLCJndSIpLnJlcGxhY2UoL3B1bmN0L2csZW8uX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLGVvLmFueVB1bmN0dWF0aW9uPW1sKGVvLmFueVB1bmN0dWF0aW9uLCJndSIpLnJl'@;
put 'cGxhY2UoL3B1bmN0L2csZW8uX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLGVvLl9lc2NhcGVzPW1sKGVvLl9lc2NhcGVzLCJndSIpLnJlcGxhY2UoL3B1bmN0L2csZW8uX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLGVvLl9zY2hlbWU9L1thLXpBLVpdW2EtekEtWjAtOSsuLV17MSwzMX0vLGVv'@;
put 'Ll9lbWFpbD0vW2EtekEtWjAtOS4hIyQlJicqKy89P15fYHt8fX4tXSsoQClbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcLlthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPykrKD8hWy1fXSkvLGVvLmF1dG9saW5rPW1s'@;
put 'KGVvLmF1dG9saW5rKS5yZXBsYWNlKCJzY2hlbWUiLGVvLl9zY2hlbWUpLnJlcGxhY2UoImVtYWlsIixlby5fZW1haWwpLmdldFJlZ2V4KCksZW8uX2F0dHJpYnV0ZT0vXHMrW2EtekEtWjpfXVtcdy46LV0qKD86XHMqPVxzKiJbXiJdKiJ8XHMqPVxzKidbXiddKid8XHMqPVxzKlteXHMiJz08'@;
put 'PmBdKyk/Lyxlby50YWc9bWwoZW8udGFnKS5yZXBsYWNlKCJjb21tZW50Iixlby5fY29tbWVudCkucmVwbGFjZSgiYXR0cmlidXRlIixlby5fYXR0cmlidXRlKS5nZXRSZWdleCgpLGVvLl9sYWJlbD0vKD86XFsoPzpcXC58W15cW1xdXFxdKSpcXXxcXC58YFteYF0qYHxbXlxbXF1cXGBdKSo/'@;
put 'Lyxlby5faHJlZj0vPCg/OlxcLnxbXlxuPD5cXF0pKz58W15cc1x4MDAtXHgxZl0qLyxlby5fdGl0bGU9LyIoPzpcXCI/fFteIlxcXSkqInwnKD86XFwnP3xbXidcXF0pKid8XCgoPzpcXFwpP3xbXilcXF0pKlwpLyxlby5saW5rPW1sKGVvLmxpbmspLnJlcGxhY2UoImxhYmVsIixlby5fbGFi'@;
put 'ZWwpLnJlcGxhY2UoImhyZWYiLGVvLl9ocmVmKS5yZXBsYWNlKCJ0aXRsZSIsZW8uX3RpdGxlKS5nZXRSZWdleCgpLGVvLnJlZmxpbms9bWwoZW8ucmVmbGluaykucmVwbGFjZSgibGFiZWwiLGVvLl9sYWJlbCkucmVwbGFjZSgicmVmIixMby5fbGFiZWwpLmdldFJlZ2V4KCksZW8ubm9saW5r'@;
put 'PW1sKGVvLm5vbGluaykucmVwbGFjZSgicmVmIixMby5fbGFiZWwpLmdldFJlZ2V4KCksZW8ucmVmbGlua1NlYXJjaD1tbChlby5yZWZsaW5rU2VhcmNoLCJnIikucmVwbGFjZSgicmVmbGluayIsZW8ucmVmbGluaykucmVwbGFjZSgibm9saW5rIixlby5ub2xpbmspLmdldFJlZ2V4KCksZW8u'@;
put 'bm9ybWFsPXsuLi5lb30sZW8ucGVkYW50aWM9ey4uLmVvLm5vcm1hbCxzdHJvbmc6e3N0YXJ0Oi9eX198XCpcKi8sbWlkZGxlOi9eX18oPz1cUykoW1xzXFNdKj9cUylfXyg/IV8pfF5cKlwqKD89XFMpKFtcc1xTXSo/XFMpXCpcKig/IVwqKS8sZW5kQXN0Oi9cKlwqKD8hXCopL2csZW5kVW5k'@;
put 'Oi9fXyg/IV8pL2d9LGVtOntzdGFydDovXl98XCovLG1pZGRsZTovXigpXCooPz1cUykoW1xzXFNdKj9cUylcKig/IVwqKXxeXyg/PVxTKShbXHNcU10qP1xTKV8oPyFfKS8sZW5kQXN0Oi9cKig/IVwqKS9nLGVuZFVuZDovXyg/IV8pL2d9LGxpbms6bWwoL14hP1xbKGxhYmVsKVxdXCgoLio/'@;
put 'KVwpLykucmVwbGFjZSgibGFiZWwiLGVvLl9sYWJlbCkuZ2V0UmVnZXgoKSxyZWZsaW5rOm1sKC9eIT9cWyhsYWJlbClcXVxzKlxbKFteXF1dKilcXS8pLnJlcGxhY2UoImxhYmVsIixlby5fbGFiZWwpLmdldFJlZ2V4KCl9LGVvLmdmbT17Li4uZW8ubm9ybWFsLGVzY2FwZTptbChlby5lc2Nh'@;
put 'cGUpLnJlcGxhY2UoIl0pIiwifnxdKSIpLmdldFJlZ2V4KCksX2V4dGVuZGVkX2VtYWlsOi9bQS1aYS16MC05Ll8rLV0rKEApW2EtekEtWjAtOS1fXSsoPzpcLlthLXpBLVowLTktX10qW2EtekEtWjAtOV0pKyg/IVstX10pLyx1cmw6L14oKD86ZnRwfGh0dHBzPyk6XC9cL3x3d3dcLikoPzpb'@;
put 'YS16QS1aMC05XC1dK1wuPykrW15cczxdKnxeZW1haWwvLF9iYWNrcGVkYWw6Lyg/OltePyEuLDo7Kl8nIn4oKSZdK3xcKFteKV0qXCl8Jig/IVthLXpBLVowLTldKzskKXxbPyEuLDo7Kl8nIn4pXSsoPyEkKSkrLyxkZWw6L14ofn4/KSg/PVteXHN+XSkoW1xzXFNdKj9bXlxzfl0pXDEoPz1b'@;
put 'Xn5dfCQpLyx0ZXh0Oi9eKFtgfl0rfFteYH5dKSg/Oig/PSB7Mix9XG4pfCg/PVthLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dK0ApfFtcc1xTXSo/KD86KD89W1xcPCFcW2Aqfl9dfFxiX3xodHRwcz86XC9cL3xmdHA6XC9cL3x3d3dcLnwkKXxbXiBdKD89IHsyLH1cbil8W15hLXpB'@;
put 'LVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dKD89W2EtekEtWjAtOS4hIyQlJicqK1wvPT9fYHtcfH1+LV0rQCkpKS99LGVvLmdmbS51cmw9bWwoZW8uZ2ZtLnVybCwiaSIpLnJlcGxhY2UoImVtYWlsIixlby5nZm0uX2V4dGVuZGVkX2VtYWlsKS5nZXRSZWdleCgpLGVvLmJyZWFrcz17Li4u'@;
put 'ZW8uZ2ZtLGJyOm1sKGVvLmJyKS5yZXBsYWNlKCJ7Mix9IiwiKiIpLmdldFJlZ2V4KCksdGV4dDptbChlby5nZm0udGV4dCkucmVwbGFjZSgiXFxiXyIsIlxcYl98IHsyLH1cXG4iKS5yZXBsYWNlKC9cezIsXH0vZywiKiIpLmdldFJlZ2V4KCl9O2NsYXNzIFBoe2NvbnN0cnVjdG9yKGMpe3Ro'@;
put 'aXMudG9rZW5zPVtdLHRoaXMudG9rZW5zLmxpbmtzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5vcHRpb25zPWN8fEU0LHRoaXMub3B0aW9ucy50b2tlbml6ZXI9dGhpcy5vcHRpb25zLnRva2VuaXplcnx8bmV3IE5JLHRoaXMudG9rZW5pemVyPXRoaXMub3B0aW9ucy50b2tlbml6ZXIsdGhp'@;
put 'cy50b2tlbml6ZXIub3B0aW9ucz10aGlzLm9wdGlvbnMsdGhpcy50b2tlbml6ZXIubGV4ZXI9dGhpcyx0aGlzLmlubGluZVF1ZXVlPVtdLHRoaXMuc3RhdGU9e2luTGluazohMSxpblJhd0Jsb2NrOiExLHRvcDohMH07Y29uc3QgYT17YmxvY2s6TG8ubm9ybWFsLGlubGluZTplby5ub3JtYWx9'@;
put 'O3RoaXMub3B0aW9ucy5wZWRhbnRpYz8oYS5ibG9jaz1Mby5wZWRhbnRpYyxhLmlubGluZT1lby5wZWRhbnRpYyk6dGhpcy5vcHRpb25zLmdmbSYmKGEuYmxvY2s9TG8uZ2ZtLGEuaW5saW5lPXRoaXMub3B0aW9ucy5icmVha3M/ZW8uYnJlYWtzOmVvLmdmbSksdGhpcy50b2tlbml6ZXIucnVs'@;
put 'ZXM9YX1zdGF0aWMgZ2V0IHJ1bGVzKCl7cmV0dXJue2Jsb2NrOkxvLGlubGluZTplb319c3RhdGljIGxleChjLGEpe3JldHVybiBuZXcgUGgoYSkubGV4KGMpfXN0YXRpYyBsZXhJbmxpbmUoYyxhKXtyZXR1cm4gbmV3IFBoKGEpLmlubGluZVRva2VucyhjKX1sZXgoYyl7bGV0IGE7Zm9yKGM9'@;
put 'Yy5yZXBsYWNlKC9cclxufFxyL2csIlxuIiksdGhpcy5ibG9ja1Rva2VucyhjLHRoaXMudG9rZW5zKTthPXRoaXMuaW5saW5lUXVldWUuc2hpZnQoKTspdGhpcy5pbmxpbmVUb2tlbnMoYS5zcmMsYS50b2tlbnMpO3JldHVybiB0aGlzLnRva2Vuc31ibG9ja1Rva2VucyhjLGE9W10pe2xldCBm'@;
put 'LGQsaCxtO2ZvcihjPXRoaXMub3B0aW9ucy5wZWRhbnRpYz9jLnJlcGxhY2UoL1x0L2csIiAgICAiKS5yZXBsYWNlKC9eICskL2dtLCIiKTpjLnJlcGxhY2UoL14oICopKFx0KykvZ20sKF8sTyxYKT0+TysiICAgICIucmVwZWF0KFgubGVuZ3RoKSk7YzspaWYoISh0aGlzLm9wdGlvbnMuZXh0'@;
put 'ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuYmxvY2smJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLmJsb2NrLnNvbWUoXz0+ISEoZj1fLmNhbGwoe2xleGVyOnRoaXN9LGMsYSkpJiYoYz1jLnN1YnN0cmluZyhmLnJhdy5sZW5ndGgpLGEucHVzaChmKSwhMCkpKSl7aWYoZj10aGlz'@;
put 'LnRva2VuaXplci5zcGFjZShjKSl7Yz1jLnN1YnN0cmluZyhmLnJhdy5sZW5ndGgpLDE9PT1mLnJhdy5sZW5ndGgmJmEubGVuZ3RoPjA/YVthLmxlbmd0aC0xXS5yYXcrPSJcbiI6YS5wdXNoKGYpO2NvbnRpbnVlfWlmKGY9dGhpcy50b2tlbml6ZXIuY29kZShjKSl7Yz1jLnN1YnN0cmluZyhm'@;
put 'LnJhdy5sZW5ndGgpLGQ9YVthLmxlbmd0aC0xXSwhZHx8InBhcmFncmFwaCIhPT1kLnR5cGUmJiJ0ZXh0IiE9PWQudHlwZT9hLnB1c2goZik6KGQucmF3Kz0iXG4iK2YucmF3LGQudGV4dCs9IlxuIitmLnRleHQsdGhpcy5pbmxpbmVRdWV1ZVt0aGlzLmlubGluZVF1ZXVlLmxlbmd0aC0xXS5z'@;
put 'cmM9ZC50ZXh0KTtjb250aW51ZX1pZihmPXRoaXMudG9rZW5pemVyLmZlbmNlcyhjKSl7Yz1jLnN1YnN0cmluZyhmLnJhdy5sZW5ndGgpLGEucHVzaChmKTtjb250aW51ZX1pZihmPXRoaXMudG9rZW5pemVyLmhlYWRpbmcoYykpe2M9Yy5zdWJzdHJpbmcoZi5yYXcubGVuZ3RoKSxhLnB1c2go'@;
put 'Zik7Y29udGludWV9aWYoZj10aGlzLnRva2VuaXplci5ocihjKSl7Yz1jLnN1YnN0cmluZyhmLnJhdy5sZW5ndGgpLGEucHVzaChmKTtjb250aW51ZX1pZihmPXRoaXMudG9rZW5pemVyLmJsb2NrcXVvdGUoYykpe2M9Yy5zdWJzdHJpbmcoZi5yYXcubGVuZ3RoKSxhLnB1c2goZik7Y29udGlu'@;
put 'dWV9aWYoZj10aGlzLnRva2VuaXplci5saXN0KGMpKXtjPWMuc3Vic3RyaW5nKGYucmF3Lmxlbmd0aCksYS5wdXNoKGYpO2NvbnRpbnVlfWlmKGY9dGhpcy50b2tlbml6ZXIuaHRtbChjKSl7Yz1jLnN1YnN0cmluZyhmLnJhdy5sZW5ndGgpLGEucHVzaChmKTtjb250aW51ZX1pZihmPXRoaXMu'@;
put 'dG9rZW5pemVyLmRlZihjKSl7Yz1jLnN1YnN0cmluZyhmLnJhdy5sZW5ndGgpLGQ9YVthLmxlbmd0aC0xXSwhZHx8InBhcmFncmFwaCIhPT1kLnR5cGUmJiJ0ZXh0IiE9PWQudHlwZT90aGlzLnRva2Vucy5saW5rc1tmLnRhZ118fCh0aGlzLnRva2Vucy5saW5rc1tmLnRhZ109e2hyZWY6Zi5o'@;
put 'cmVmLHRpdGxlOmYudGl0bGV9KTooZC5yYXcrPSJcbiIrZi5yYXcsZC50ZXh0Kz0iXG4iK2YucmF3LHRoaXMuaW5saW5lUXVldWVbdGhpcy5pbmxpbmVRdWV1ZS5sZW5ndGgtMV0uc3JjPWQudGV4dCk7Y29udGludWV9aWYoZj10aGlzLnRva2VuaXplci50YWJsZShjKSl7Yz1jLnN1YnN0cmlu'@;
put 'ZyhmLnJhdy5sZW5ndGgpLGEucHVzaChmKTtjb250aW51ZX1pZihmPXRoaXMudG9rZW5pemVyLmxoZWFkaW5nKGMpKXtjPWMuc3Vic3RyaW5nKGYucmF3Lmxlbmd0aCksYS5wdXNoKGYpO2NvbnRpbnVlfWlmKGg9Yyx0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVu'@;
put 'c2lvbnMuc3RhcnRCbG9jayl7bGV0IF89MS8wO2NvbnN0IE89Yy5zbGljZSgxKTtsZXQgWDt0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydEJsb2NrLmZvckVhY2goZnVuY3Rpb24oYWUpe1g9YWUuY2FsbCh7bGV4ZXI6dGhpc30sTyksIm51bWJlciI9PXR5cGVvZiBYJiZYPj0wJiYoXz1N'@;
put 'YXRoLm1pbihfLFgpKX0pLF88MS8wJiZfPj0wJiYoaD1jLnN1YnN0cmluZygwLF8rMSkpfWlmKHRoaXMuc3RhdGUudG9wJiYoZj10aGlzLnRva2VuaXplci5wYXJhZ3JhcGgoaCkpKXtkPWFbYS5sZW5ndGgtMV0sbSYmInBhcmFncmFwaCI9PT1kLnR5cGU/KGQucmF3Kz0iXG4iK2YucmF3LGQu'@;
put 'dGV4dCs9IlxuIitmLnRleHQsdGhpcy5pbmxpbmVRdWV1ZS5wb3AoKSx0aGlzLmlubGluZVF1ZXVlW3RoaXMuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNyYz1kLnRleHQpOmEucHVzaChmKSxtPWgubGVuZ3RoIT09Yy5sZW5ndGgsYz1jLnN1YnN0cmluZyhmLnJhdy5sZW5ndGgpO2NvbnRpbnVl'@;
put 'fWlmKGY9dGhpcy50b2tlbml6ZXIudGV4dChjKSl7Yz1jLnN1YnN0cmluZyhmLnJhdy5sZW5ndGgpLGQ9YVthLmxlbmd0aC0xXSxkJiYidGV4dCI9PT1kLnR5cGU/KGQucmF3Kz0iXG4iK2YucmF3LGQudGV4dCs9IlxuIitmLnRleHQsdGhpcy5pbmxpbmVRdWV1ZS5wb3AoKSx0aGlzLmlubGlu'@;
put 'ZVF1ZXVlW3RoaXMuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNyYz1kLnRleHQpOmEucHVzaChmKTtjb250aW51ZX1pZihjKXtjb25zdCBfPSJJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICIrYy5jaGFyQ29kZUF0KDApO2lmKHRoaXMub3B0aW9ucy5zaWxlbnQpe2NvbnNvbGUuZXJyb3IoXyk7YnJl'@;
put 'YWt9dGhyb3cgbmV3IEVycm9yKF8pfX1yZXR1cm4gdGhpcy5zdGF0ZS50b3A9ITAsYX1pbmxpbmUoYyxhPVtdKXtyZXR1cm4gdGhpcy5pbmxpbmVRdWV1ZS5wdXNoKHtzcmM6Yyx0b2tlbnM6YX0pLGF9aW5saW5lVG9rZW5zKGMsYT1bXSl7bGV0IGYsZCxoLF8sTyxYLG09YztpZih0aGlzLnRv'@;
put 'a2Vucy5saW5rcyl7Y29uc3QgYWU9T2JqZWN0LmtleXModGhpcy50b2tlbnMubGlua3MpO2lmKGFlLmxlbmd0aD4wKWZvcig7bnVsbCE9KF89dGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLnJlZmxpbmtTZWFyY2guZXhlYyhtKSk7KWFlLmluY2x1ZGVzKF9bMF0uc2xpY2UoX1swXS5sYXN0'@;
put 'SW5kZXhPZigiWyIpKzEsLTEpKSYmKG09bS5zbGljZSgwLF8uaW5kZXgpKyJbIisiYSIucmVwZWF0KF9bMF0ubGVuZ3RoLTIpKyJdIittLnNsaWNlKHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5yZWZsaW5rU2VhcmNoLmxhc3RJbmRleCkpfWZvcig7bnVsbCE9KF89dGhpcy50b2tlbml6'@;
put 'ZXIucnVsZXMuaW5saW5lLmJsb2NrU2tpcC5leGVjKG0pKTspbT1tLnNsaWNlKDAsXy5pbmRleCkrIlsiKyJhIi5yZXBlYXQoX1swXS5sZW5ndGgtMikrIl0iK20uc2xpY2UodGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmJsb2NrU2tpcC5sYXN0SW5kZXgpO2Zvcig7bnVsbCE9KF89dGhp'@;
put 'cy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLmV4ZWMobSkpOyltPW0uc2xpY2UoMCxfLmluZGV4KSsiKysiK20uc2xpY2UodGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLmxhc3RJbmRleCk7Zm9yKDtjOylpZihPfHwoWD0iIiksTz0hMSwh'@;
put 'KHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5pbmxpbmUmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLmlubGluZS5zb21lKGFlPT4hIShmPWFlLmNhbGwoe2xleGVyOnRoaXN9LGMsYSkpJiYoYz1jLnN1YnN0cmluZyhmLnJhdy5sZW5ndGgpLGEucHVz'@;
put 'aChmKSwhMCkpKSl7aWYoZj10aGlzLnRva2VuaXplci5lc2NhcGUoYykpe2M9Yy5zdWJzdHJpbmcoZi5yYXcubGVuZ3RoKSxhLnB1c2goZik7Y29udGludWV9aWYoZj10aGlzLnRva2VuaXplci50YWcoYykpe2M9Yy5zdWJzdHJpbmcoZi5yYXcubGVuZ3RoKSxkPWFbYS5sZW5ndGgtMV0sZCYm'@;
put 'InRleHQiPT09Zi50eXBlJiYidGV4dCI9PT1kLnR5cGU/KGQucmF3Kz1mLnJhdyxkLnRleHQrPWYudGV4dCk6YS5wdXNoKGYpO2NvbnRpbnVlfWlmKGY9dGhpcy50b2tlbml6ZXIubGluayhjKSl7Yz1jLnN1YnN0cmluZyhmLnJhdy5sZW5ndGgpLGEucHVzaChmKTtjb250aW51ZX1pZihmPXRo'@;
put 'aXMudG9rZW5pemVyLnJlZmxpbmsoYyx0aGlzLnRva2Vucy5saW5rcykpe2M9Yy5zdWJzdHJpbmcoZi5yYXcubGVuZ3RoKSxkPWFbYS5sZW5ndGgtMV0sZCYmInRleHQiPT09Zi50eXBlJiYidGV4dCI9PT1kLnR5cGU/KGQucmF3Kz1mLnJhdyxkLnRleHQrPWYudGV4dCk6YS5wdXNoKGYpO2Nv'@;
put 'bnRpbnVlfWlmKGY9dGhpcy50b2tlbml6ZXIuZW1TdHJvbmcoYyxtLFgpKXtjPWMuc3Vic3RyaW5nKGYucmF3Lmxlbmd0aCksYS5wdXNoKGYpO2NvbnRpbnVlfWlmKGY9dGhpcy50b2tlbml6ZXIuY29kZXNwYW4oYykpe2M9Yy5zdWJzdHJpbmcoZi5yYXcubGVuZ3RoKSxhLnB1c2goZik7Y29u'@;
put 'dGludWV9aWYoZj10aGlzLnRva2VuaXplci5icihjKSl7Yz1jLnN1YnN0cmluZyhmLnJhdy5sZW5ndGgpLGEucHVzaChmKTtjb250aW51ZX1pZihmPXRoaXMudG9rZW5pemVyLmRlbChjKSl7Yz1jLnN1YnN0cmluZyhmLnJhdy5sZW5ndGgpLGEucHVzaChmKTtjb250aW51ZX1pZihmPXRoaXMu'@;
put 'dG9rZW5pemVyLmF1dG9saW5rKGMsRGNlKSl7Yz1jLnN1YnN0cmluZyhmLnJhdy5sZW5ndGgpLGEucHVzaChmKTtjb250aW51ZX1pZighdGhpcy5zdGF0ZS5pbkxpbmsmJihmPXRoaXMudG9rZW5pemVyLnVybChjLERjZSkpKXtjPWMuc3Vic3RyaW5nKGYucmF3Lmxlbmd0aCksYS5wdXNoKGYp'@;
put 'O2NvbnRpbnVlfWlmKGg9Yyx0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRJbmxpbmUpe2xldCBhZT0xLzA7Y29uc3QgcGU9Yy5zbGljZSgxKTtsZXQgYmU7dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRJbmxpbmUuZm9yRWFjaChmdW5j'@;
put 'dGlvbih4ZSl7YmU9eGUuY2FsbCh7bGV4ZXI6dGhpc30scGUpLCJudW1iZXIiPT10eXBlb2YgYmUmJmJlPj0wJiYoYWU9TWF0aC5taW4oYWUsYmUpKX0pLGFlPDEvMCYmYWU+PTAmJihoPWMuc3Vic3RyaW5nKDAsYWUrMSkpfWlmKGY9dGhpcy50b2tlbml6ZXIuaW5saW5lVGV4dChoLHlXZSkp'@;
put 'e2M9Yy5zdWJzdHJpbmcoZi5yYXcubGVuZ3RoKSwiXyIhPT1mLnJhdy5zbGljZSgtMSkmJihYPWYucmF3LnNsaWNlKC0xKSksTz0hMCxkPWFbYS5sZW5ndGgtMV0sZCYmInRleHQiPT09ZC50eXBlPyhkLnJhdys9Zi5yYXcsZC50ZXh0Kz1mLnRleHQpOmEucHVzaChmKTtjb250aW51ZX1pZihj'@;
put 'KXtjb25zdCBhZT0iSW5maW5pdGUgbG9vcCBvbiBieXRlOiAiK2MuY2hhckNvZGVBdCgwKTtpZih0aGlzLm9wdGlvbnMuc2lsZW50KXtjb25zb2xlLmVycm9yKGFlKTticmVha310aHJvdyBuZXcgRXJyb3IoYWUpfX1yZXR1cm4gYX19Y2xhc3MgVkl7Y29uc3RydWN0b3IoYyl7dGhpcy5vcHRp'@;
put 'b25zPWN8fEU0fWNvZGUoYyxhLGYpe2NvbnN0IGQ9KGF8fCIiKS5tYXRjaCgvXFMqLylbMF07aWYodGhpcy5vcHRpb25zLmhpZ2hsaWdodCl7Y29uc3QgaD10aGlzLm9wdGlvbnMuaGlnaGxpZ2h0KGMsZCk7bnVsbCE9aCYmaCE9PWMmJihmPSEwLGM9aCl9cmV0dXJuIGM9Yy5yZXBsYWNlKC9c'@;
put 'biQvLCIiKSsiXG4iLGQ/JzxwcmU+PGNvZGUgY2xhc3M9IicrdGhpcy5vcHRpb25zLmxhbmdQcmVmaXgrRWMoZCkrJyI+JysoZj9jOkVjKGMsITApKSsiPC9jb2RlPjwvcHJlPlxuIjoiPHByZT48Y29kZT4iKyhmP2M6RWMoYywhMCkpKyI8L2NvZGU+PC9wcmU+XG4ifWJsb2NrcXVvdGUoYyl7'@;
put 'cmV0dXJuYDxibG9ja3F1b3RlPlxuJHtjfTwvYmxvY2txdW90ZT5cbmB9aHRtbChjLGEpe3JldHVybiBjfWhlYWRpbmcoYyxhLGYsZCl7cmV0dXJuIHRoaXMub3B0aW9ucy5oZWFkZXJJZHM/YDxoJHthfSBpZD0iJHt0aGlzLm9wdGlvbnMuaGVhZGVyUHJlZml4K2Quc2x1ZyhmKX0iPiR7Y308'@;
put 'L2gke2F9PlxuYDpgPGgke2F9PiR7Y308L2gke2F9PlxuYH1ocigpe3JldHVybiB0aGlzLm9wdGlvbnMueGh0bWw/Ijxoci8+XG4iOiI8aHI+XG4ifWxpc3QoYyxhLGYpe2NvbnN0IGQ9YT8ib2wiOiJ1bCI7cmV0dXJuIjwiK2QrKGEmJjEhPT1mPycgc3RhcnQ9IicrZisnIic6IiIpKyI+XG4i'@;
put 'K2MrIjwvIitkKyI+XG4ifWxpc3RpdGVtKGMpe3JldHVybmA8bGk+JHtjfTwvbGk+XG5gfWNoZWNrYm94KGMpe3JldHVybiI8aW5wdXQgIisoYz8nY2hlY2tlZD0iIiAnOiIiKSsnZGlzYWJsZWQ9IiIgdHlwZT0iY2hlY2tib3giJysodGhpcy5vcHRpb25zLnhodG1sPyIgLyI6IiIpKyI+ICJ9'@;
put 'cGFyYWdyYXBoKGMpe3JldHVybmA8cD4ke2N9PC9wPlxuYH10YWJsZShjLGEpe3JldHVybiBhJiYoYT1gPHRib2R5PiR7YX08L3Rib2R5PmApLCI8dGFibGU+XG48dGhlYWQ+XG4iK2MrIjwvdGhlYWQ+XG4iK2ErIjwvdGFibGU+XG4ifXRhYmxlcm93KGMpe3JldHVybmA8dHI+XG4ke2N9PC90'@;
put 'cj5cbmB9dGFibGVjZWxsKGMsYSl7Y29uc3QgZj1hLmhlYWRlcj8idGgiOiJ0ZCI7cmV0dXJuKGEuYWxpZ24/YDwke2Z9IGFsaWduPSIke2EuYWxpZ259Ij5gOmA8JHtmfT5gKStjK2A8LyR7Zn0+XG5gfXN0cm9uZyhjKXtyZXR1cm5gPHN0cm9uZz4ke2N9PC9zdHJvbmc+YH1lbShjKXtyZXR1'@;
put 'cm5gPGVtPiR7Y308L2VtPmB9Y29kZXNwYW4oYyl7cmV0dXJuYDxjb2RlPiR7Y308L2NvZGU+YH1icigpe3JldHVybiB0aGlzLm9wdGlvbnMueGh0bWw/Ijxici8+IjoiPGJyPiJ9ZGVsKGMpe3JldHVybmA8ZGVsPiR7Y308L2RlbD5gfWxpbmsoYyxhLGYpe2lmKG51bGw9PT0oYz1BY2UodGhp'@;
put 'cy5vcHRpb25zLnNhbml0aXplLHRoaXMub3B0aW9ucy5iYXNlVXJsLGMpKSlyZXR1cm4gZjtsZXQgZD0nPGEgaHJlZj0iJytjKyciJztyZXR1cm4gYSYmKGQrPScgdGl0bGU9IicrYSsnIicpLGQrPSI+IitmKyI8L2E+IixkfWltYWdlKGMsYSxmKXtpZihudWxsPT09KGM9QWNlKHRoaXMub3B0'@;
put 'aW9ucy5zYW5pdGl6ZSx0aGlzLm9wdGlvbnMuYmFzZVVybCxjKSkpcmV0dXJuIGY7bGV0IGQ9YDxpbWcgc3JjPSIke2N9IiBhbHQ9IiR7Zn0iYDtyZXR1cm4gYSYmKGQrPWAgdGl0bGU9IiR7YX0iYCksZCs9dGhpcy5vcHRpb25zLnhodG1sPyIvPiI6Ij4iLGR9dGV4dChjKXtyZXR1cm4gY319'@;
put 'Y2xhc3MgWFp7c3Ryb25nKGMpe3JldHVybiBjfWVtKGMpe3JldHVybiBjfWNvZGVzcGFuKGMpe3JldHVybiBjfWRlbChjKXtyZXR1cm4gY31odG1sKGMpe3JldHVybiBjfXRleHQoYyl7cmV0dXJuIGN9bGluayhjLGEsZil7cmV0dXJuIiIrZn1pbWFnZShjLGEsZil7cmV0dXJuIiIrZn1icigp'@;
put 'e3JldHVybiIifX1jbGFzcyBKWntjb25zdHJ1Y3Rvcigpe3RoaXMuc2Vlbj17fX1zZXJpYWxpemUoYyl7cmV0dXJuIGMudG9Mb3dlckNhc2UoKS50cmltKCkucmVwbGFjZSgvPFshXC9hLXpdLio/Pi9naSwiIikucmVwbGFjZSgvW1x1MjAwMC1cdTIwNkZcdTJFMDAtXHUyRTdGXFwnISIjJCUm'@;
put 'KCkqKywuLzo7PD0+P0BbXF1eYHt8fX5dL2csIiIpLnJlcGxhY2UoL1xzL2csIi0iKX1nZXROZXh0U2FmZVNsdWcoYyxhKXtsZXQgZj1jLGQ9MDtpZih0aGlzLnNlZW4uaGFzT3duUHJvcGVydHkoZikpe2Q9dGhpcy5zZWVuW2NdO2Rve2QrKyxmPWMrIi0iK2R9d2hpbGUodGhpcy5zZWVuLmhh'@;
put 'c093blByb3BlcnR5KGYpKX1yZXR1cm4gYXx8KHRoaXMuc2VlbltjXT1kLHRoaXMuc2VlbltmXT0wKSxmfXNsdWcoYyxhPXt9KXtjb25zdCBmPXRoaXMuc2VyaWFsaXplKGMpO3JldHVybiB0aGlzLmdldE5leHRTYWZlU2x1ZyhmLGEuZHJ5cnVuKX19Y2xhc3MgRmh7Y29uc3RydWN0b3IoYyl7'@;
put 'dGhpcy5vcHRpb25zPWN8fEU0LHRoaXMub3B0aW9ucy5yZW5kZXJlcj10aGlzLm9wdGlvbnMucmVuZGVyZXJ8fG5ldyBWSSx0aGlzLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcix0aGlzLnJlbmRlcmVyLm9wdGlvbnM9dGhpcy5vcHRpb25zLHRoaXMudGV4dFJlbmRlcmVyPW5ldyBY'@;
put 'Wix0aGlzLnNsdWdnZXI9bmV3IEpafXN0YXRpYyBwYXJzZShjLGEpe3JldHVybiBuZXcgRmgoYSkucGFyc2UoYyl9c3RhdGljIHBhcnNlSW5saW5lKGMsYSl7cmV0dXJuIG5ldyBGaChhKS5wYXJzZUlubGluZShjKX1wYXJzZShjLGE9ITApe2xldCBkLGgsbSxfLE8sWCxhZSxwZSxiZSx4ZSxW'@;
put 'ZSxaZSxsdCxkdCxndCxqdCxybixYdCx5bixmPSIiO2NvbnN0IFFuPWMubGVuZ3RoO2ZvcihkPTA7ZDxRbjtkKyspaWYoeGU9Y1tkXSx0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5k'@;
put 'ZXJlcnNbeGUudHlwZV0mJih5bj10aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbeGUudHlwZV0uY2FsbCh7cGFyc2VyOnRoaXN9LHhlKSwhMSE9PXlufHwhWyJzcGFjZSIsImhyIiwiaGVhZGluZyIsImNvZGUiLCJ0YWJsZSIsImJsb2NrcXVvdGUiLCJsaXN0IiwiaHRtbCIsInBh'@;
put 'cmFncmFwaCIsInRleHQiXS5pbmNsdWRlcyh4ZS50eXBlKSkpZis9eW58fCIiO2Vsc2Ugc3dpdGNoKHhlLnR5cGUpe2Nhc2Uic3BhY2UiOmNvbnRpbnVlO2Nhc2UiaHIiOmYrPXRoaXMucmVuZGVyZXIuaHIoKTtjb250aW51ZTtjYXNlImhlYWRpbmciOmYrPXRoaXMucmVuZGVyZXIuaGVhZGlu'@;
put 'Zyh0aGlzLnBhcnNlSW5saW5lKHhlLnRva2VucykseGUuZGVwdGgseGNlKHRoaXMucGFyc2VJbmxpbmUoeGUudG9rZW5zLHRoaXMudGV4dFJlbmRlcmVyKSksdGhpcy5zbHVnZ2VyKTtjb250aW51ZTtjYXNlImNvZGUiOmYrPXRoaXMucmVuZGVyZXIuY29kZSh4ZS50ZXh0LHhlLmxhbmcseGUu'@;
put 'ZXNjYXBlZCk7Y29udGludWU7Y2FzZSJ0YWJsZSI6Zm9yKHBlPSIiLGFlPSIiLF89eGUuaGVhZGVyLmxlbmd0aCxoPTA7aDxfO2grKylhZSs9dGhpcy5yZW5kZXJlci50YWJsZWNlbGwodGhpcy5wYXJzZUlubGluZSh4ZS5oZWFkZXJbaF0udG9rZW5zKSx7aGVhZGVyOiEwLGFsaWduOnhlLmFs'@;
put 'aWduW2hdfSk7Zm9yKHBlKz10aGlzLnJlbmRlcmVyLnRhYmxlcm93KGFlKSxiZT0iIixfPXhlLnJvd3MubGVuZ3RoLGg9MDtoPF87aCsrKXtmb3IoWD14ZS5yb3dzW2hdLGFlPSIiLE89WC5sZW5ndGgsbT0wO208TzttKyspYWUrPXRoaXMucmVuZGVyZXIudGFibGVjZWxsKHRoaXMucGFyc2VJ'@;
put 'bmxpbmUoWFttXS50b2tlbnMpLHtoZWFkZXI6ITEsYWxpZ246eGUuYWxpZ25bbV19KTtiZSs9dGhpcy5yZW5kZXJlci50YWJsZXJvdyhhZSl9Zis9dGhpcy5yZW5kZXJlci50YWJsZShwZSxiZSk7Y29udGludWU7Y2FzZSJibG9ja3F1b3RlIjpiZT10aGlzLnBhcnNlKHhlLnRva2VucyksZis9'@;
put 'dGhpcy5yZW5kZXJlci5ibG9ja3F1b3RlKGJlKTtjb250aW51ZTtjYXNlImxpc3QiOmZvcihWZT14ZS5vcmRlcmVkLFplPXhlLnN0YXJ0LGx0PXhlLmxvb3NlLF89eGUuaXRlbXMubGVuZ3RoLGJlPSIiLGg9MDtoPF87aCsrKWd0PXhlLml0ZW1zW2hdLGp0PWd0LmNoZWNrZWQscm49Z3QudGFz'@;
put 'ayxkdD0iIixndC50YXNrJiYoWHQ9dGhpcy5yZW5kZXJlci5jaGVja2JveChqdCksbHQ/Z3QudG9rZW5zLmxlbmd0aD4wJiYicGFyYWdyYXBoIj09PWd0LnRva2Vuc1swXS50eXBlPyhndC50b2tlbnNbMF0udGV4dD1YdCsiICIrZ3QudG9rZW5zWzBdLnRleHQsZ3QudG9rZW5zWzBdLnRva2Vu'@;
put 'cyYmZ3QudG9rZW5zWzBdLnRva2Vucy5sZW5ndGg+MCYmInRleHQiPT09Z3QudG9rZW5zWzBdLnRva2Vuc1swXS50eXBlJiYoZ3QudG9rZW5zWzBdLnRva2Vuc1swXS50ZXh0PVh0KyIgIitndC50b2tlbnNbMF0udG9rZW5zWzBdLnRleHQpKTpndC50b2tlbnMudW5zaGlmdCh7dHlwZToidGV4'@;
put 'dCIsdGV4dDpYdH0pOmR0Kz1YdCksZHQrPXRoaXMucGFyc2UoZ3QudG9rZW5zLGx0KSxiZSs9dGhpcy5yZW5kZXJlci5saXN0aXRlbShkdCxybixqdCk7Zis9dGhpcy5yZW5kZXJlci5saXN0KGJlLFZlLFplKTtjb250aW51ZTtjYXNlImh0bWwiOmYrPXRoaXMucmVuZGVyZXIuaHRtbCh4ZS50'@;
put 'ZXh0LHhlLmJsb2NrKTtjb250aW51ZTtjYXNlInBhcmFncmFwaCI6Zis9dGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgodGhpcy5wYXJzZUlubGluZSh4ZS50b2tlbnMpKTtjb250aW51ZTtjYXNlInRleHQiOmZvcihiZT14ZS50b2tlbnM/dGhpcy5wYXJzZUlubGluZSh4ZS50b2tlbnMpOnhlLnRl'@;
put 'eHQ7ZCsxPFFuJiYidGV4dCI9PT1jW2QrMV0udHlwZTspeGU9Y1srK2RdLGJlKz0iXG4iKyh4ZS50b2tlbnM/dGhpcy5wYXJzZUlubGluZSh4ZS50b2tlbnMpOnhlLnRleHQpO2YrPWE/dGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgoYmUpOmJlO2NvbnRpbnVlO2RlZmF1bHQ6e2NvbnN0IE9yPSdU'@;
put 'b2tlbiB3aXRoICInK3hlLnR5cGUrJyIgdHlwZSB3YXMgbm90IGZvdW5kLic7aWYodGhpcy5vcHRpb25zLnNpbGVudClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKE9yKTt0aHJvdyBuZXcgRXJyb3IoT3IpfX1yZXR1cm4gZn1wYXJzZUlubGluZShjLGEpe2E9YXx8dGhpcy5yZW5kZXJlcjts'@;
put 'ZXQgZCxoLG0sZj0iIjtjb25zdCBfPWMubGVuZ3RoO2ZvcihkPTA7ZDxfO2QrKylpZihoPWNbZF0sdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVycyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW2gudHlwZV0mJihtPXRo'@;
put 'aXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1toLnR5cGVdLmNhbGwoe3BhcnNlcjp0aGlzfSxoKSwhMSE9PW18fCFbImVzY2FwZSIsImh0bWwiLCJsaW5rIiwiaW1hZ2UiLCJzdHJvbmciLCJlbSIsImNvZGVzcGFuIiwiYnIiLCJkZWwiLCJ0ZXh0Il0uaW5jbHVkZXMoaC50eXBlKSkp'@;
put 'Zis9bXx8IiI7ZWxzZSBzd2l0Y2goaC50eXBlKXtjYXNlImVzY2FwZSI6Y2FzZSJ0ZXh0IjpmKz1hLnRleHQoaC50ZXh0KTticmVhaztjYXNlImh0bWwiOmYrPWEuaHRtbChoLnRleHQpO2JyZWFrO2Nhc2UibGluayI6Zis9YS5saW5rKGguaHJlZixoLnRpdGxlLHRoaXMucGFyc2VJbmxpbmUo'@;
put 'aC50b2tlbnMsYSkpO2JyZWFrO2Nhc2UiaW1hZ2UiOmYrPWEuaW1hZ2UoaC5ocmVmLGgudGl0bGUsaC50ZXh0KTticmVhaztjYXNlInN0cm9uZyI6Zis9YS5zdHJvbmcodGhpcy5wYXJzZUlubGluZShoLnRva2VucyxhKSk7YnJlYWs7Y2FzZSJlbSI6Zis9YS5lbSh0aGlzLnBhcnNlSW5saW5l'@;
put 'KGgudG9rZW5zLGEpKTticmVhaztjYXNlImNvZGVzcGFuIjpmKz1hLmNvZGVzcGFuKGgudGV4dCk7YnJlYWs7Y2FzZSJiciI6Zis9YS5icigpO2JyZWFrO2Nhc2UiZGVsIjpmKz1hLmRlbCh0aGlzLnBhcnNlSW5saW5lKGgudG9rZW5zLGEpKTticmVhaztkZWZhdWx0Ontjb25zdCBPPSdUb2tl'@;
put 'biB3aXRoICInK2gudHlwZSsnIiB0eXBlIHdhcyBub3QgZm91bmQuJztpZih0aGlzLm9wdGlvbnMuc2lsZW50KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoTyk7dGhyb3cgbmV3IEVycm9yKE8pfX1yZXR1cm4gZn19Y2xhc3MgUlN7Y29uc3RydWN0b3IoYyl7dGhpcy5vcHRpb25zPWN8fEU0'@;
put 'fXByZXByb2Nlc3MoYyl7cmV0dXJuIGN9cG9zdHByb2Nlc3MoYyl7cmV0dXJuIGN9fVUwKFJTLCJwYXNzVGhyb3VnaEhvb2tzIixuZXcgU2V0KFsicHJlcHJvY2VzcyIsInBvc3Rwcm9jZXNzIl0pKTt2YXIgUVo9bmV3IFdlYWtTZXQsSWNlPW5ldyBXZWFrU2V0O2Z1bmN0aW9uIFJjZShsLGMp'@;
put 'e3JldHVybihhLGYsZCk9PnsiZnVuY3Rpb24iPT10eXBlb2YgZiYmKGQ9ZixmPW51bGwpO2NvbnN0IGg9ey4uLmZ9O2Y9ey4uLnRoaXMuZGVmYXVsdHMsLi4uaH07Y29uc3QgbT1LWih0aGlzLEljZSxfV2UpLmNhbGwodGhpcyxmLnNpbGVudCxmLmFzeW5jLGQpO2lmKHR5cGVvZiBhPiJ1Inx8'@;
put 'bnVsbD09PWEpcmV0dXJuIG0obmV3IEVycm9yKCJtYXJrZWQoKTogaW5wdXQgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZCBvciBudWxsIikpO2lmKCJzdHJpbmciIT10eXBlb2YgYSlyZXR1cm4gbShuZXcgRXJyb3IoIm1hcmtlZCgpOiBpbnB1dCBwYXJhbWV0ZXIgaXMgb2YgdHlwZSAiK09iamVj'@;
put 'dC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKSsiLCBzdHJpbmcgZXhwZWN0ZWQiKSk7aWYoZnVuY3Rpb24gZ1dlKGwsYyl7IWx8fGwuc2lsZW50fHwoYyYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogY2FsbGJhY2sgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQg'@;
put 'bm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBSZWFkIG1vcmUgaGVyZTogaHR0cHM6Ly9tYXJrZWQuanMub3JnL3VzaW5nX3BybyNhc3luYyIpLChsLnNhbml0aXplfHxsLnNhbml0aXplcikmJmNvbnNvbGUud2FybigibWFya2VkKCk6IHNhbml0aXplIGFu'@;
put 'ZCBzYW5pdGl6ZXIgcGFyYW1ldGVycyBhcmUgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDAuNy4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBSZWFkIG1vcmUgaGVyZTogaHR0cHM6Ly9tYXJrZWQuanMub3JnLyMvVVNJTkdfQURWQU5D'@;
put 'RUQubWQjb3B0aW9ucyIpLChsLmhpZ2hsaWdodHx8Imxhbmd1YWdlLSIhPT1sLmxhbmdQcmVmaXgpJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBoaWdobGlnaHQgYW5kIGxhbmdQcmVmaXggcGFyYW1ldGVycyBhcmUgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90'@;
put 'IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBJbnN0ZWFkIHVzZSBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtaGlnaGxpZ2h0LiIpLGwubWFuZ2xlJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBtYW5nbGUgcGFyYW1ldGVyIGlzIGVuYWJs'@;
put 'ZWQgYnkgZGVmYXVsdCwgYnV0IGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBUbyBjbGVhciB0aGlzIHdhcm5pbmcsIGluc3RhbGwgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLW1hbmdsZSwg'@;
put 'b3IgZGlzYWJsZSBieSBzZXR0aW5nIGB7bWFuZ2xlOiBmYWxzZX1gLiIpLGwuYmFzZVVybCYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogYmFzZVVybCBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVt'@;
put 'b3ZlZCBpbiB0aGUgZnV0dXJlLiBJbnN0ZWFkIHVzZSBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtYmFzZS11cmwuIiksbC5zbWFydHlwYW50cyYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogc21hcnR5cGFudHMgcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVy'@;
put 'c2lvbiA1LjAuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gSW5zdGVhZCB1c2UgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLXNtYXJ0eXBhbnRzLiIpLGwueGh0bWwmJmNvbnNvbGUud2FybigibWFya2VkKCk6IHho'@;
put 'dG1sIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIEluc3RlYWQgdXNlIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC14aHRtbC4iKSwobC5o'@;
put 'ZWFkZXJJZHN8fGwuaGVhZGVyUHJlZml4KSYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogaGVhZGVySWRzIGFuZCBoZWFkZXJQcmVmaXggcGFyYW1ldGVycyBlbmFibGVkIGJ5IGRlZmF1bHQsIGJ1dCBhcmUgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBhbmQgd2lsbCBiZSByZW1v'@;
put 'dmVkIGluIHRoZSBmdXR1cmUuIFRvIGNsZWFyIHRoaXMgd2FybmluZywgaW5zdGFsbCAgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLWdmbS1oZWFkaW5nLWlkLCBvciBkaXNhYmxlIGJ5IHNldHRpbmcgYHtoZWFkZXJJZHM6IGZhbHNlfWAuIikpfShmLGQpLGYuaG9va3Mm'@;
put 'JihmLmhvb2tzLm9wdGlvbnM9ZiksZCl7Y29uc3QgXz1mLmhpZ2hsaWdodDtsZXQgTzt0cnl7Zi5ob29rcyYmKGE9Zi5ob29rcy5wcmVwcm9jZXNzKGEpKSxPPWwoYSxmKX1jYXRjaChwZSl7cmV0dXJuIG0ocGUpfWNvbnN0IFg9cGU9PntsZXQgYmU7aWYoIXBlKXRyeXtmLndhbGtUb2tlbnMm'@;
put 'JnRoaXMud2Fsa1Rva2VucyhPLGYud2Fsa1Rva2VucyksYmU9YyhPLGYpLGYuaG9va3MmJihiZT1mLmhvb2tzLnBvc3Rwcm9jZXNzKGJlKSl9Y2F0Y2goeGUpe3BlPXhlfXJldHVybiBmLmhpZ2hsaWdodD1fLHBlP20ocGUpOmQobnVsbCxiZSl9O2lmKCFffHxfLmxlbmd0aDwzfHwoZGVsZXRl'@;
put 'IGYuaGlnaGxpZ2h0LCFPLmxlbmd0aCkpcmV0dXJuIFgoKTtsZXQgYWU9MDtyZXR1cm4gdGhpcy53YWxrVG9rZW5zKE8scGU9PnsiY29kZSI9PT1wZS50eXBlJiYoYWUrKyxzZXRUaW1lb3V0KCgpPT57XyhwZS50ZXh0LHBlLmxhbmcsKGJlLHhlKT0+e2lmKGJlKXJldHVybiBYKGJlKTtudWxs'@;
put 'IT14ZSYmeGUhPT1wZS50ZXh0JiYocGUudGV4dD14ZSxwZS5lc2NhcGVkPSEwKSxhZS0tLDA9PT1hZSYmWCgpfSl9LDApKX0pLHZvaWQoMD09PWFlJiZYKCkpfWlmKGYuYXN5bmMpcmV0dXJuIFByb21pc2UucmVzb2x2ZShmLmhvb2tzP2YuaG9va3MucHJlcHJvY2VzcyhhKTphKS50aGVuKF89'@;
put 'PmwoXyxmKSkudGhlbihfPT5mLndhbGtUb2tlbnM/UHJvbWlzZS5hbGwodGhpcy53YWxrVG9rZW5zKF8sZi53YWxrVG9rZW5zKSkudGhlbigoKT0+Xyk6XykudGhlbihfPT5jKF8sZikpLnRoZW4oXz0+Zi5ob29rcz9mLmhvb2tzLnBvc3Rwcm9jZXNzKF8pOl8pLmNhdGNoKG0pO3RyeXtmLmhv'@;
put 'b2tzJiYoYT1mLmhvb2tzLnByZXByb2Nlc3MoYSkpO2NvbnN0IF89bChhLGYpO2Yud2Fsa1Rva2VucyYmdGhpcy53YWxrVG9rZW5zKF8sZi53YWxrVG9rZW5zKTtsZXQgTz1jKF8sZik7cmV0dXJuIGYuaG9va3MmJihPPWYuaG9va3MucG9zdHByb2Nlc3MoTykpLE99Y2F0Y2goXyl7cmV0dXJu'@;
put 'IG0oXyl9fX1mdW5jdGlvbiBfV2UobCxjLGEpe3JldHVybiBmPT57aWYoZi5tZXNzYWdlKz0iXG5QbGVhc2UgcmVwb3J0IHRoaXMgdG8gaHR0cHM6Ly9naXRodWIuY29tL21hcmtlZGpzL21hcmtlZC4iLGwpe2NvbnN0IGQ9IjxwPkFuIGVycm9yIG9jY3VycmVkOjwvcD48cHJlPiIrRWMoZi5t'@;
put 'ZXNzYWdlKyIiLCEwKSsiPC9wcmU+IjtyZXR1cm4gYz9Qcm9taXNlLnJlc29sdmUoZCk6YT92b2lkIGEobnVsbCxkKTpkfWlmKGMpcmV0dXJuIFByb21pc2UucmVqZWN0KGYpO2lmKCFhKXRocm93IGY7YShmKX19Y29uc3QgbTU9bmV3IGNsYXNzIGJXZXtjb25zdHJ1Y3RvciguLi5jKXtDY2Uo'@;
put 'dGhpcyxJY2UpLENjZSh0aGlzLFFaKSxVMCh0aGlzLCJkZWZhdWx0cyIse2FzeW5jOiExLGJhc2VVcmw6bnVsbCxicmVha3M6ITEsZXh0ZW5zaW9uczpudWxsLGdmbTohMCxoZWFkZXJJZHM6ITAsaGVhZGVyUHJlZml4OiIiLGhpZ2hsaWdodDpudWxsLGhvb2tzOm51bGwsbGFuZ1ByZWZpeDoi'@;
put 'bGFuZ3VhZ2UtIixtYW5nbGU6ITAscGVkYW50aWM6ITEscmVuZGVyZXI6bnVsbCxzYW5pdGl6ZTohMSxzYW5pdGl6ZXI6bnVsbCxzaWxlbnQ6ITEsc21hcnR5cGFudHM6ITEsdG9rZW5pemVyOm51bGwsd2Fsa1Rva2VuczpudWxsLHhodG1sOiExfSksVTAodGhpcywib3B0aW9ucyIsdGhpcy5z'@;
put 'ZXRPcHRpb25zKSxVMCh0aGlzLCJwYXJzZSIsS1oodGhpcyxRWixSY2UpLmNhbGwodGhpcyxQaC5sZXgsRmgucGFyc2UpKSxVMCh0aGlzLCJwYXJzZUlubGluZSIsS1oodGhpcyxRWixSY2UpLmNhbGwodGhpcyxQaC5sZXhJbmxpbmUsRmgucGFyc2VJbmxpbmUpKSxVMCh0aGlzLCJQYXJzZXIi'@;
put 'LEZoKSxVMCh0aGlzLCJwYXJzZXIiLEZoLnBhcnNlKSxVMCh0aGlzLCJSZW5kZXJlciIsVkkpLFUwKHRoaXMsIlRleHRSZW5kZXJlciIsWFopLFUwKHRoaXMsIkxleGVyIixQaCksVTAodGhpcywibGV4ZXIiLFBoLmxleCksVTAodGhpcywiVG9rZW5pemVyIixOSSksVTAodGhpcywiU2x1Z2dl'@;
put 'ciIsSlopLFUwKHRoaXMsIkhvb2tzIixSUyksdGhpcy51c2UoLi4uYyl9d2Fsa1Rva2VucyhjLGEpe2xldCBmPVtdO2Zvcihjb25zdCBkIG9mIGMpc3dpdGNoKGY9Zi5jb25jYXQoYS5jYWxsKHRoaXMsZCkpLGQudHlwZSl7Y2FzZSJ0YWJsZSI6Zm9yKGNvbnN0IGggb2YgZC5oZWFkZXIpZj1m'@;
put 'LmNvbmNhdCh0aGlzLndhbGtUb2tlbnMoaC50b2tlbnMsYSkpO2Zvcihjb25zdCBoIG9mIGQucm93cylmb3IoY29uc3QgbSBvZiBoKWY9Zi5jb25jYXQodGhpcy53YWxrVG9rZW5zKG0udG9rZW5zLGEpKTticmVhaztjYXNlImxpc3QiOmY9Zi5jb25jYXQodGhpcy53YWxrVG9rZW5zKGQuaXRl'@;
put 'bXMsYSkpO2JyZWFrO2RlZmF1bHQ6dGhpcy5kZWZhdWx0cy5leHRlbnNpb25zJiZ0aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnMuY2hpbGRUb2tlbnMmJnRoaXMuZGVmYXVsdHMuZXh0ZW5zaW9ucy5jaGlsZFRva2Vuc1tkLnR5cGVdP3RoaXMuZGVmYXVsdHMuZXh0ZW5zaW9ucy5jaGlsZFRva2Vu'@;
put 'c1tkLnR5cGVdLmZvckVhY2goaD0+e2Y9Zi5jb25jYXQodGhpcy53YWxrVG9rZW5zKGRbaF0sYSkpfSk6ZC50b2tlbnMmJihmPWYuY29uY2F0KHRoaXMud2Fsa1Rva2VucyhkLnRva2VucyxhKSkpfXJldHVybiBmfXVzZSguLi5jKXtjb25zdCBhPXRoaXMuZGVmYXVsdHMuZXh0ZW5zaW9uc3x8'@;
put 'e3JlbmRlcmVyczp7fSxjaGlsZFRva2Vuczp7fX07cmV0dXJuIGMuZm9yRWFjaChmPT57Y29uc3QgZD17Li4uZn07aWYoZC5hc3luYz10aGlzLmRlZmF1bHRzLmFzeW5jfHxkLmFzeW5jfHwhMSxmLmV4dGVuc2lvbnMmJihmLmV4dGVuc2lvbnMuZm9yRWFjaChoPT57aWYoIWgubmFtZSl0aHJv'@;
put 'dyBuZXcgRXJyb3IoImV4dGVuc2lvbiBuYW1lIHJlcXVpcmVkIik7aWYoaC5yZW5kZXJlcil7Y29uc3QgbT1hLnJlbmRlcmVyc1toLm5hbWVdO2EucmVuZGVyZXJzW2gubmFtZV09bT9mdW5jdGlvbiguLi5fKXtsZXQgTz1oLnJlbmRlcmVyLmFwcGx5KHRoaXMsXyk7cmV0dXJuITE9PT1PJiYo'@;
put 'Tz1tLmFwcGx5KHRoaXMsXykpLE99OmgucmVuZGVyZXJ9aWYoaC50b2tlbml6ZXIpe2lmKCFoLmxldmVsfHwiYmxvY2siIT09aC5sZXZlbCYmImlubGluZSIhPT1oLmxldmVsKXRocm93IG5ldyBFcnJvcigiZXh0ZW5zaW9uIGxldmVsIG11c3QgYmUgJ2Jsb2NrJyBvciAnaW5saW5lJyIpO2Fb'@;
put 'aC5sZXZlbF0/YVtoLmxldmVsXS51bnNoaWZ0KGgudG9rZW5pemVyKTphW2gubGV2ZWxdPVtoLnRva2VuaXplcl0saC5zdGFydCYmKCJibG9jayI9PT1oLmxldmVsP2Euc3RhcnRCbG9jaz9hLnN0YXJ0QmxvY2sucHVzaChoLnN0YXJ0KTphLnN0YXJ0QmxvY2s9W2guc3RhcnRdOiJpbmxpbmUi'@;
put 'PT09aC5sZXZlbCYmKGEuc3RhcnRJbmxpbmU/YS5zdGFydElubGluZS5wdXNoKGguc3RhcnQpOmEuc3RhcnRJbmxpbmU9W2guc3RhcnRdKSl9aC5jaGlsZFRva2VucyYmKGEuY2hpbGRUb2tlbnNbaC5uYW1lXT1oLmNoaWxkVG9rZW5zKX0pLGQuZXh0ZW5zaW9ucz1hKSxmLnJlbmRlcmVyKXtj'@;
put 'b25zdCBoPXRoaXMuZGVmYXVsdHMucmVuZGVyZXJ8fG5ldyBWSSh0aGlzLmRlZmF1bHRzKTtmb3IoY29uc3QgbSBpbiBmLnJlbmRlcmVyKXtjb25zdCBfPWhbbV07aFttXT0oLi4uTyk9PntsZXQgWD1mLnJlbmRlcmVyW21dLmFwcGx5KGgsTyk7cmV0dXJuITE9PT1YJiYoWD1fLmFwcGx5KGgs'@;
put 'TykpLFh9fWQucmVuZGVyZXI9aH1pZihmLnRva2VuaXplcil7Y29uc3QgaD10aGlzLmRlZmF1bHRzLnRva2VuaXplcnx8bmV3IE5JKHRoaXMuZGVmYXVsdHMpO2Zvcihjb25zdCBtIGluIGYudG9rZW5pemVyKXtjb25zdCBfPWhbbV07aFttXT0oLi4uTyk9PntsZXQgWD1mLnRva2VuaXplcltt'@;
put 'XS5hcHBseShoLE8pO3JldHVybiExPT09WCYmKFg9Xy5hcHBseShoLE8pKSxYfX1kLnRva2VuaXplcj1ofWlmKGYuaG9va3Mpe2NvbnN0IGg9dGhpcy5kZWZhdWx0cy5ob29rc3x8bmV3IFJTO2Zvcihjb25zdCBtIGluIGYuaG9va3Mpe2NvbnN0IF89aFttXTtoW21dPVJTLnBhc3NUaHJvdWdo'@;
put 'SG9va3MuaGFzKG0pP089PntpZih0aGlzLmRlZmF1bHRzLmFzeW5jKXJldHVybiBQcm9taXNlLnJlc29sdmUoZi5ob29rc1ttXS5jYWxsKGgsTykpLnRoZW4oYWU9Pl8uY2FsbChoLGFlKSk7Y29uc3QgWD1mLmhvb2tzW21dLmNhbGwoaCxPKTtyZXR1cm4gXy5jYWxsKGgsWCl9OiguLi5PKT0+'@;
put 'e2xldCBYPWYuaG9va3NbbV0uYXBwbHkoaCxPKTtyZXR1cm4hMT09PVgmJihYPV8uYXBwbHkoaCxPKSksWH19ZC5ob29rcz1ofWlmKGYud2Fsa1Rva2Vucyl7Y29uc3QgaD10aGlzLmRlZmF1bHRzLndhbGtUb2tlbnM7ZC53YWxrVG9rZW5zPWZ1bmN0aW9uKG0pe2xldCBfPVtdO3JldHVybiBf'@;
put 'LnB1c2goZi53YWxrVG9rZW5zLmNhbGwodGhpcyxtKSksaCYmKF89Xy5jb25jYXQoaC5jYWxsKHRoaXMsbSkpKSxffX10aGlzLmRlZmF1bHRzPXsuLi50aGlzLmRlZmF1bHRzLC4uLmR9fSksdGhpc31zZXRPcHRpb25zKGMpe3JldHVybiB0aGlzLmRlZmF1bHRzPXsuLi50aGlzLmRlZmF1bHRz'@;
put 'LC4uLmN9LHRoaXN9fShFNCk7ZnVuY3Rpb24gZ2wobCxjLGEpe3JldHVybiBtNS5wYXJzZShsLGMsYSl9Z2wub3B0aW9ucz1nbC5zZXRPcHRpb25zPWZ1bmN0aW9uKGwpe3JldHVybiBtNS5zZXRPcHRpb25zKGwpLFNjZShnbC5kZWZhdWx0cz1tNS5kZWZhdWx0cyksZ2x9LGdsLmdldERlZmF1'@;
put 'bHRzPWZ1bmN0aW9uIHFaKCl7cmV0dXJue2FzeW5jOiExLGJhc2VVcmw6bnVsbCxicmVha3M6ITEsZXh0ZW5zaW9uczpudWxsLGdmbTohMCxoZWFkZXJJZHM6ITAsaGVhZGVyUHJlZml4OiIiLGhpZ2hsaWdodDpudWxsLGhvb2tzOm51bGwsbGFuZ1ByZWZpeDoibGFuZ3VhZ2UtIixtYW5nbGU6'@;
put 'ITAscGVkYW50aWM6ITEscmVuZGVyZXI6bnVsbCxzYW5pdGl6ZTohMSxzYW5pdGl6ZXI6bnVsbCxzaWxlbnQ6ITEsc21hcnR5cGFudHM6ITEsdG9rZW5pemVyOm51bGwsd2Fsa1Rva2VuczpudWxsLHhodG1sOiExfX0sZ2wuZGVmYXVsdHM9RTQsZ2wudXNlPWZ1bmN0aW9uKC4uLmwpe3JldHVy'@;
put 'biBtNS51c2UoLi4ubCksU2NlKGdsLmRlZmF1bHRzPW01LmRlZmF1bHRzKSxnbH0sZ2wud2Fsa1Rva2Vucz1mdW5jdGlvbihsLGMpe3JldHVybiBtNS53YWxrVG9rZW5zKGwsYyl9LGdsLnBhcnNlSW5saW5lPW01LnBhcnNlSW5saW5lLGdsLlBhcnNlcj1GaCxnbC5wYXJzZXI9RmgucGFyc2Us'@;
put 'Z2wuUmVuZGVyZXI9VkksZ2wuVGV4dFJlbmRlcmVyPVhaLGdsLkxleGVyPVBoLGdsLmxleGVyPVBoLmxleCxnbC5Ub2tlbml6ZXI9TkksZ2wuU2x1Z2dlcj1KWixnbC5Ib29rcz1SUyxnbC5wYXJzZT1nbDtjb25zdCBDV2U9WyJtYXJrZG93bkNhcmQiXTtmdW5jdGlvbiBTV2UobCxjKXsxJmwm'@;
put 'JnRuKDAsImNsci1zcGlubmVyIiw4KX1sZXQgTVdlPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSl7dGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5hZ3JlZUNoZWNrZWQ9ITEsdGhpcy5hZ3JlZUJveExvY2tlZD0hMCx0aGlzLmFncmVlQ2xpY2tlZD0hMSx0aGlzLmV1bGFfbWFya2Rvd249J1xu'@;
put 'TGljZW5jZSBBZ3JlZW1lbnQgZm9yIERhdGEgQ29udHJvbGxlciBmb3IgU0FTXHhhZVxuPT09PT09PT09PT09PT09PT09PT1cblxuQ29weXJpZ2h0IChjKSBCb3dlIElPIEx0ZFxuXG5EYXRhIENvbnRyb2xsZXIgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgYnkgNEdMIEFwcHMsIGEgYnJhbmQg'@;
put 'b3duZWQgYnkgQm93ZSBJTyBMdGQsIGEgVUsgTGltaXRlZCBDb21wYW55IGhlYWRxdWFydGVkIGluIDI5IE9sZGZpZWxkIFJkLCBDdW1icmlhLCByZWdpc3RlcmVkIGF0IENvbXBhbmllcyBIb3VzZSB3aXRoIGNvbXBhbnkgbnVtYmVyIDA4Nzc3MTcxLCBWQVQgbnVtYmVyOiAyMDM5MTQyNDBc'@;
put 'blxuVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3cywgaW5jbHVkaW5nIGludGVybmF0aW9uYWwgdHJlYXRpZXMsIGFuZCBkdWFsLWxpY2Vuc2VkIFx1MjAxMyBkZXBlbmRpbmcgb24gd2hldGhlciB5b3VyIHVzZSBmb3IgY29tbWVyY2lhbCBw'@;
put 'dXJwb3NlcywgbWVhbmluZyBpbnRlbmRlZCBmb3Igb3IgcmVzdWx0aW5nIGluIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgb3Igbm90LlxuXG5JZiB5b3VyIHVzZSBpcyBzdHJpY3RseSBwZXJzb25hbCBvciBzb2xlbHkgZm9yIGV2YWx1YXRpb24gcHVy'@;
put 'cG9zZXMsIG1lYW5pbmcgZm9yIHRoZSBwdXJwb3NlcyBvZiB0ZXN0aW5nIHRoZSBzdWl0YWJpbGl0eSwgcGVyZm9ybWFuY2UsIGFuZCB1c2VmdWxuZXNzIG9mIHRoaXMgc29mdHdhcmUgb3V0c2lkZSB0aGUgcHJvZHVjdGlvbiBlbnZpcm9ubWVudCwgeW91IGFncmVlIHRvIGJlIGJvdW5kIGJ5'@;
put 'IHRoZSB0ZXJtcyBpbmNsdWRlZCBpbiB0aGUgImxpY2VuY2Utbm9uLWNvbW1lcmNpYWwtZGF0YWNvbnRyb2xsZXIubWQiIGZpbGUgYXZhaWxhYmxlIGhlcmU6ICBodHRwczovL2dpdC5kYXRhY29udHJvbGxlci5pby9kYy9kYy9zcmMvYnJhbmNoL21haW4vbGljZW5jZS1ub24tY29tbWVyY2lh'@;
put 'bC1kYXRhY29udHJvbGxlci5tZFxuXG5Zb3VyIHVzZSBvZiB0aGlzIHNvZnR3YXJlIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGluY2x1ZGVkIGluIGFuIGFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnQuXG5cbkluIGFueSBjYXNlLCB5b3UgbXVz'@;
put 'dCBub3QgbWFrZSBhbnkgc3VjaCB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBhcyB0byBkZXZlbG9wIHNvZnR3YXJlIHdoaWNoIG1heSBiZSBjb25zaWRlcmVkIGNvbXBldGl0aXZlIHdpdGggdGhpcyBzb2Z0d2FyZS5cblxuVU5MRVNTIEVYUFJFU1NMWSBBR1JFRUQgT1RIRVJXSVNFLCA0R0wgQVBQ'@;
put 'UyBQUk9WSURFUyBUSElTIFNPRlRXQVJFIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBBTkQgSU4gTk8gRVZFTlQgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgU0hBTEwgNEdMIEFQUFMgQkUgTElBQkxFIFRPIFlP'@;
put 'VSBGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBESVJFQ1QsIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBBUklTSU5HIEZST00gVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhJUyBTT0ZUV0FSRS5cblxu'@;
put 'XG4nfW5nT25Jbml0KCl7Y29uc3QgYT1nbC5zZXRPcHRpb25zKHt9KTt0aGlzLmV1bGFfbWFya2Rvd249YS5wYXJzZSh0aGlzLmV1bGFfbWFya2Rvd24pfW5nQWZ0ZXJWaWV3SW5pdCgpe3NldFRpbWVvdXQoKCk9Pnt0aGlzLm1hcmtkb3duQ2FyZCYmdGhpcy5tYXJrZG93bkNhcmQubmF0aXZl'@;
put 'RWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgic2Nyb2xsIikpfSl9dGVybXNBZ3JlZUNoYW5nZSgpe3RoaXMuYWdyZWVDaGVja2VkJiYodGhpcy5hZ3JlZUJveExvY2tlZD0hMCx0aGlzLmFncmVlQ2xpY2tlZD0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGlj'@;
put 'L3JlZ2lzdGVydXNlciIse1NBU0NvbnRyb2xUYWJsZTpbe0FDQ0VQVEVEOiJ5ZXMifV19KS50aGVuKGY9PntmLnJldHVybiYmZi5yZXR1cm5bMF0mJiJTVUNDRVNTIj09PWYucmV0dXJuWzBdLk1TRyYmbG9jYXRpb24ucmVsb2FkKCl9KS5jYXRjaChmPT5mKS5maW5hbGx5KCgpPT57c2V0VGlt'@;
put 'ZW91dCgoKT0+e3RoaXMuYWdyZWVCb3hMb2NrZWQ9ITEsdGhpcy5hZ3JlZUNsaWNrZWQ9ITEsdGhpcy5hZ3JlZUNoZWNrZWQ9ITF9LDFlMyl9KSl9b25DYXJkQmxvY2tTY3JvbGwoYSl7aWYoIXRoaXMuYWdyZWVDbGlja2VkKXtsZXQgZj1hLnRhcmdldDtmJiYodGhpcy5hZ3JlZUJveExvY2tl'@;
put 'ZD0hKGYuc2Nyb2xsVG9wK2Yub2Zmc2V0SGVpZ2h0Pj1mLnNjcm9sbEhlaWdodC0yMCkpfX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkocnQocGwpKX0sbC5cdTAyNzVjbXA9a3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siYXBwLXRlcm1zIl1dLHZpZXdR'@;
put 'dWVyeTpmdW5jdGlvbihhLGYpe2lmKDEmYSYmTm8oQ1dlLDUpLDImYSl7bGV0IGQ7dWkoZD1jaSgpKSYmKGYubWFya2Rvd25DYXJkPWQuZmlyc3QpfX0sZGVjbHM6MTMsdmFyczo2LGNvbnN0czpbWzEsImNhcmQiXSxbMSwiY2FyZC1oZWFkZXIiXSxbMSwiY2FyZC1ibG9jayIsMywiaW5uZXJI'@;
put 'VE1MIiwic2Nyb2xsIl0sWyJtYXJrZG93bkNhcmQiLCIiXSxbMSwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJhY2NlcHQtY2hlY2tib3giXSxbImNsckNoZWNrYm94IiwiIiwidHlwZSIsImNoZWNrYm94IiwzLCJuZ01vZGVsIiwiZGlzYWJsZWQiLCJuZ01vZGVsQ2hh'@;
put 'bmdlIiwiY2hhbmdlIl0sWyJjbHJJbmxpbmUiLCJzbWFsbCIsNCwibmdJZiJdLFsiY2xySW5saW5lIiwic21hbGwiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxmKXsxJmEmJih5ZSgwLCJkaXYiLDApKDEsImRpdiIsMSksWWUoMiwiIEVuZCBVc2VyIExpY2Vuc2UgQWdyZWVtZW50ICIpLHllKDMs'@;
put 'InAiKSxZZSg0LCIgV2VsY29tZSB0byBEYXRhIENvbnRyb2xsZXIgZm9yIFNBUyEgUGxlYXNlIHJldmlldyBhbmQgYWNjZXB0IGFncmVlbWVudCBiZWxvdyBpbiBvcmRlciB0byBwcm9jZWVkLiAiKSxDZSgpKCkseWUoNSwiZGl2IiwyLDMpLEV0KCJzY3JvbGwiLGZ1bmN0aW9uKGgpe3JldHVy'@;
put 'biBmLm9uQ2FyZEJsb2NrU2Nyb2xsKGgpfSksQ2UoKSx5ZSg3LCJkaXYiLDQpKDgsImNsci1jaGVja2JveC13cmFwcGVyIiw1KSg5LCJpbnB1dCIsNiksRXQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBmLmFncmVlQ2hlY2tlZD1ofSkoImNoYW5nZSIsZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gZi50ZXJtc0FncmVlQ2hhbmdlKCl9KSxDZSgpLHllKDEwLCJsYWJlbCIpLFllKDExLCJJIGhhdmUgcmVhZCBhbmQgYWdyZWUgdG8gdGhlIHRlcm1zIG9mIGFib3ZlLiIpLENlKCkoKSx0dCgxMixTV2UsMSwwLCJjbHItc3Bpbm5lciIsNyksQ2UoKSgpKSwyJmEmJihTZSg1KSxSZSgi'@;
put 'aW5uZXJIVE1MIixmLmV1bGFfbWFya2Rvd24sdmgpLFNlKDMpLGdyKCJkaXNhYmxlZCIsZi5hZ3JlZUJveExvY2tlZCksU2UoMSksUmUoIm5nTW9kZWwiLGYuYWdyZWVDaGVja2VkKSgiZGlzYWJsZWQiLGYuYWdyZWVCb3hMb2NrZWQpLFNlKDMpLFJlKCJuZ0lmIixmLmFncmVlQm94TG9ja2Vk'@;
put 'JiZmLmFncmVlQ2xpY2tlZCkpfSxkZXBlbmRlbmNpZXM6WyRpLFIwLFdhLHphLGVsLEIwLFYwLFJoXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2hlaWdodDoxMDAlO2JhY2tncm91bmQ6I2Y1ZjZmZn0uY2xyLWNoZWNrYm94LXdyYXBwZXIuZGlzYWJsZWRbX25nY29udGVudC0lQ09NUCVd'@;
put 'e29wYWNpdHk6LjV9LmNhcmRbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWFyZ2luLXRvcDowfS5jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jYXJkLWJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjE7b3Zl'@;
put 'cmZsb3c6YXV0bztiYWNrZ3JvdW5kLWNvbG9yOiNmNGY0ZjR9LmFjY2VwdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxMHB4IDE1cHh9Il19KSxsfSkoKSxMY2U9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhKXt0aGlzLmZpbGVPdmVyPW5ldyB4cix0aGlzLmZpbGVE'@;
put 'cm9wPW5ldyB4cix0aGlzLmVsZW1lbnQ9YX1vbkRyb3AoYSl7dGhpcy5fcHJldmVudEFuZFN0b3AoYSk7Y29uc3QgZj1hLmRhdGFUcmFuc2Zlcj8uZmlsZXMsZD1bXTtpZihmKWZvcihsZXQgaD0wO2g8Zi5sZW5ndGg7aCsrKWQucHVzaChmW2hdKTt0aGlzLnVwbG9hZGVyPy5hZGRUb1F1ZXVl'@;
put 'KGQpLHRoaXMuZmlsZU92ZXIuZW1pdCghMSksdGhpcy5maWxlRHJvcC5lbWl0KGQpfW9uRHJhZ092ZXIoYSl7dGhpcy5fcHJldmVudEFuZFN0b3AoYSk7Y29uc3QgZj1hLmRhdGFUcmFuc2ZlcjtpZihmKXtpZigtMT09PWYudHlwZXMuaW5kZXhPZigiRmlsZXMiKSlyZXR1cm47Zi5kcm9wRWZm'@;
put 'ZWN0PSJjb3B5In10aGlzLmZpbGVPdmVyLmVtaXQoITApfW9uRHJhZ0xlYXZlKGEpe3RoaXMuX3ByZXZlbnRBbmRTdG9wKGEpLHRoaXMuZmlsZU92ZXIuZW1pdCghMSl9X3ByZXZlbnRBbmRTdG9wKGEpe2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpfX1yZXR1cm4gbC5c'@;
put 'dTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChWaSkpfSxsLlx1MDI3NWRpcj1Tcih7dHlwZTpsLHNlbGVjdG9yczpbWyIiLCJhcHBGaWxlRHJvcCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxmKXsxJmEmJkV0KCJkcm9wIixmdW5jdGlvbihoKXtyZXR1cm4g'@;
put 'Zi5vbkRyb3AoaCl9KSgiZHJhZ292ZXIiLGZ1bmN0aW9uKGgpe3JldHVybiBmLm9uRHJhZ092ZXIoaCl9KSgiZHJhZ2xlYXZlIixmdW5jdGlvbihoKXtyZXR1cm4gZi5vbkRyYWdMZWF2ZShoKX0pfSxpbnB1dHM6e3VwbG9hZGVyOiJ1cGxvYWRlciJ9LG91dHB1dHM6e2ZpbGVPdmVyOiJmaWxl'@;
put 'T3ZlciIsZmlsZURyb3A6ImZpbGVEcm9wIn19KSxsfSkoKTtmdW5jdGlvbiBrV2UobCxjKXsxJmwmJih5ZSgwLCJwIiwyNyksWWUoMSwiIExpY2VuY2Uga2V5IGlzIGludmFsaWQuIFdlIGNhbid0IHByb3ZpZGUgeW91IG1vcmUgZGV0YWlscyBhdCB0aGUgbW9tZW50ICIpLENlKCkpfWZ1bmN0'@;
put 'aW9uIEVXZShsLGMpe2lmKDEmbCYmdG4oMCwicCIsMjgpLDImbCl7Y29uc3QgYT1HZSgzKTtSZSgiaW5uZXJIVE1MIixhLmxpY2Vuc2VFcnJvcnNbYS5rZXlFcnJvcl0sdmgpfX1mdW5jdGlvbiB4V2UobCxjKXtpZigxJmwmJih5ZSgwLCJwIikoMSwic3Ryb25nIiksWWUoMiwiRGV0YWlsczoi'@;
put 'KSxDZSgpLFllKDMpLENlKCkpLDImbCl7Y29uc3QgYT1HZSgzKTtTZSgzKSx3cigiICIsYS5lcnJvckRldGFpbHMsIiIpfX1mdW5jdGlvbiBBV2UobCxjKXtpZigxJmwmJihXcigwKSx0dCgxLGtXZSwyLDAsInAiLDI1KSx0dCgyLEVXZSwxLDEsInAiLDI2KSx0dCgzLHhXZSw0LDEsInAiLDEp'@;
put 'LEdyKCkpLDImbCl7Y29uc3QgYT1HZSgyKTtTZSgxKSxSZSgibmdJZiIsIWEua2V5RXJyb3IpLFNlKDEpLFJlKCJuZ0lmIixhLmtleUVycm9yKSxTZSgxKSxSZSgibmdJZiIsYS5lcnJvckRldGFpbHMpfX1mdW5jdGlvbiBUV2UobCxjKXsxJmwmJihXcigwKSx5ZSgxLCJwIiwyNyksWWUoMiwi'@;
put 'IFRoZSByZWdpc3RlcmVkIG51bWJlciBvZiB1c2VycyByZWFjaGVkIHRoZSBsaW1pdCBzcGVjaWZpZWQgZm9yIHlvdXIgbGljZW5jZS4gUGxlYXNlIGNvbnRhY3QgIiksdG4oMywiY29udGFjdC1saW5rIiwyOSksWWUoNCwiIG9yIHlvdXIgcmVzZWxsZXIgdG8gYXJyYW5nZSBhZGRpdGlvbmFs'@;
put 'IGxpY2VuY2VzIGZvciB0aGlzIHByb2R1Y3QuICIpLENlKCksR3IoKSl9ZnVuY3Rpb24gT1dlKGwsYyl7MSZsJiYoV3IoMCkseWUoMSwicCIsMjcpLFllKDIsIiBVcGRhdGUgdGhlIGxpY2Vuc2Uga2V5IGJ5IHVwbG9hZGluZyB0aGUgbGljZW5jZSBmaWxlIG9yIGJ5IHBhc3RpbmcgYSBsaWNl'@;
put 'bnNlIGtleSBhbmQgYWN0aXZhdGlvbiBrZXkgaW4gdGhlIGlucHV0cyBiZWxvdy4gIiksQ2UoKSxHcigpKX1mdW5jdGlvbiBEV2UobCxjKXtpZigxJmwmJih5ZSgwLCJzcGFuIiksWWUoMSksQ2UoKSksMiZsKXtjb25zdCBhPWMuJGltcGxpY2l0LGY9Yy5pbmRleCxkPUdlKDIpO2dyKCJtaXNz'@;
put 'a2V5IixkLm1pc3NtYXRjaGVkS2V5JiZkLm1pc3NtYXRjaGVkS2V5PT09YSksU2UoMSksJHUoIiAiLGEsIiIsZj09PShudWxsPT1kLnN5c3NpdGUudmFsdWU/bnVsbDpkLnN5c3NpdGUudmFsdWUubGVuZ3RoKS0xPyIiOiIsIiwiICIpfX1mdW5jdGlvbiBJV2UobCxjKXtpZigxJmwmJih5ZSgw'@;
put 'LCJwIiwzMCkoMSwic3Ryb25nIiksWWUoMiwiQWxsb3dlZCB1c2VyczoiKSxDZSgpLFllKDMpLENlKCkpLDImbCl7Y29uc3QgYT1HZSgyKTtTZSgzKSx3cigiICIsYS5saWNlbnNlS2V5RGF0YS51c2Vyc19hbGxvd2VkLCIgIil9fWZ1bmN0aW9uIFJXZShsLGMpezEmbCYmdG4oMCwiY2xyLXNw'@;
put 'aW5uZXIiLDMxKX1mdW5jdGlvbiBMV2UobCxjKXsxJmwmJih5ZSgwLCJkaXYiKSxZZSgxLCIgRHJvcCAvIEJyb3dzZSBsaWNlbmNlIGZpbGUgIiksQ2UoKSl9ZnVuY3Rpb24gUFdlKGwsYyl7aWYoMSZsJiYoeWUoMCwiZGl2IiksWWUoMSwiIFNlbGVjdGVkIGZpbGU6ICIpLHllKDIsInN0cm9u'@;
put 'ZyIpLFllKDMpLENlKCkoKSksMiZsKXtjb25zdCBhPUdlKDMpO1NlKDMpLGFyKGEubGljZW5jZWZpbGUuZmlsZW5hbWUpfX1mdW5jdGlvbiBGV2UobCxjKXtpZigxJmwmJih5ZSgwLCJkaXYiKSgxLCJzdHJvbmciKSxZZSgyKSxDZSgpKCkpLDImbCl7Y29uc3QgYT1HZSgzKTtTZSgyKSxhcihh'@;
put 'LmxpY2VuY2VGaWxlRXJyb3IpfX1mdW5jdGlvbiBIV2UobCxjKXtpZigxJmwmJihXcigwKSx0dCgxLExXZSwyLDAsImRpdiIsMSksdHQoMixQV2UsNCwxLCJkaXYiLDEpLHR0KDMsRldlLDMsMSwiZGl2IiwxKSxHcigpKSwyJmwpe2NvbnN0IGE9R2UoMik7U2UoMSksUmUoIm5nSWYiLCIiPT09'@;
put 'YS5saWNlbmNlZmlsZS5maWxlbmFtZSksU2UoMSksUmUoIm5nSWYiLCIiIT09YS5saWNlbmNlZmlsZS5maWxlbmFtZSksU2UoMSksUmUoIm5nSWYiLGEubGljZW5jZUZpbGVFcnJvcil9fWZ1bmN0aW9uIE5XZShsLGMpezEmbCYmKHllKDAsImJ1dHRvbiIsMzIpLFllKDEsIiBDb250aW51ZSB3'@;
put 'aXRoIGZyZWUgdGllciAiKSxDZSgpKX1mdW5jdGlvbiBWV2UobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJkaXYiLDIpKDEsImRpdiIsMyksWWUoMiwiTGljZW5jaW5nIiksQ2UoKSx5ZSgzLCJkaXYiLDQpLHR0KDQsQVdlLDQsMywibmctY29udGFpbmVyIiw1KSx0dCg1LFRXZSw1'@;
put 'LDAsIm5nLWNvbnRhaW5lciIsNSksdHQoNixPV2UsMywwLCJuZy1jb250YWluZXIiLDUpLHllKDcsInAiKSg4LCJzdHJvbmciKSxZZSg5LCJTWVNTSVRFOiIpLENlKCksdHQoMTAsRFdlLDIsNCwic3BhbiIsNikseWUoMTEsImEiLDcpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtVdChhKTtjb25z'@;
put 'dCBkPVFpKDEzKSxoPVFpKDE1KSxtPUdlKCk7cmV0dXJuIFp0KG0uY29weVN5c3NpdGUoZCxoLG0uc3lzc2l0ZS52YWx1ZXx8W10pKX0pLHRuKDEyLCJjbHItaWNvbiIsOCw5KSx5ZSgxNCwic3BhbiIsMTAsMTEpLFllKDE2LCJDb3B5IHRvIGNsaXBib2FyZCIpLENlKCkoKSgpLHR0KDE3LElX'@;
put 'ZSw0LDEsInAiLDEyKSx5ZSgxOCwiY2xyLXRhYnMiKSgxOSwiY2xyLXRhYiIpKDIwLCJidXR0b24iLDEzKSxZZSgyMSwiVXBsb2FkIGxpY2VuY2UiKSxDZSgpLHllKDIyLCJjbHItdGFiLWNvbnRlbnQiKSgyMywiaW5wdXQiLDE0LDE1KSxFdCgiY2hhbmdlIixmdW5jdGlvbihkKXtyZXR1cm4g'@;
put 'VXQoYSksWnQoR2UoKS5vbkZpbGVDYXB0dXJlKGQpKX0pLENlKCkseWUoMjUsImRpdiIsMTYpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gVXQoYSksWnQoUWkoMjQpLmNsaWNrKCkpfSkoImZpbGVEcm9wIixmdW5jdGlvbihkKXtyZXR1cm4gVXQoYSksWnQoR2UoKS5vbkZpbGVDYXB0'@;
put 'dXJlKGQsITApKX0pLHR0KDI2LFJXZSwxLDAsImNsci1zcGlubmVyIiwxNyksdHQoMjcsSFdlLDQsMywibmctY29udGFpbmVyIiwxKSxDZSgpKCkoKSx5ZSgyOCwiY2xyLXRhYiIpKDI5LCJidXR0b24iLDEzKSxZZSgzMCwiUGFzdGUgbGljZW5jZSIpLENlKCkseWUoMzEsImNsci10YWItY29u'@;
put 'dGVudCIpKDMyLCJmb3JtIiwxOCkoMzMsInAiKSxZZSgzNCwiTGljZW5jZSBrZXk6IiksQ2UoKSx5ZSgzNSwiZGl2IiwxOSkoMzYsInRleHRhcmVhIiwyMCksRXQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGQpe3JldHVybiBVdChhKSxadChHZSgpLmxpY2VuY2VLZXlWYWx1ZT1kKX0pKCJt'@;
put 'b3VzZWxlYXZlIixmdW5jdGlvbigpe3JldHVybiBVdChhKSxadChHZSgpLnRyaW1LZXlzKCkpfSksQ2UoKSgpKCkseWUoMzcsImZvcm0iLDIxKSgzOCwicCIpLFllKDM5LCJBY3RpdmF0aW9uIGtleToiKSxDZSgpLHllKDQwLCJkaXYiLDE5KSg0MSwidGV4dGFyZWEiLDIyKSxFdCgibmdNb2Rl'@;
put 'bENoYW5nZSIsZnVuY3Rpb24oZCl7cmV0dXJuIFV0KGEpLFp0KEdlKCkuYWN0aXZhdGlvbktleVZhbHVlPWQpfSkoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIFV0KGEpLFp0KEdlKCkudHJpbUtleXMoKSl9KSxDZSgpKCkoKSgpKCkoKSx5ZSg0MiwiYnV0dG9uIiwyMyksRXQoImNs'@;
put 'aWNrIixmdW5jdGlvbigpe3JldHVybiBVdChhKSxadChHZSgpLmFwcGx5S2V5cygpKX0pLFllKDQzLCIgQXBwbHkgbGljZW5jZSBrZXlzICIpLENlKCksdHQoNDQsTldlLDIsMCwiYnV0dG9uIiwyNCksQ2UoKSgpfWlmKDImbCl7Y29uc3QgYT1HZSgpO1NlKDMpLFJlKCJuZ1N3aXRjaCIsYS5h'@;
put 'Y3Rpb24pLFNlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLCJrZXkiKSxTZSgxKSxSZSgibmdTd2l0Y2hDYXNlIiwibGltaXQiKSxTZSgxKSxSZSgibmdTd2l0Y2hDYXNlIiwidXBkYXRlIiksU2UoNCksUmUoIm5nRm9yT2YiLGEuc3lzc2l0ZS52YWx1ZSksU2UoNyksUmUoIm5nSWYiLGEubGljZW5z'@;
put 'ZUtleURhdGEmJmEudXNlckNvdW50TGltaXRhdGlvbiksU2UoOSksUmUoIm5nSWYiLGEubGljZW5jZUZpbGVMb2FkaW5nKSxTZSgxKSxSZSgibmdJZiIsIWEubGljZW5jZUZpbGVMb2FkaW5nKSxTZSg5KSxSZSgibmdNb2RlbCIsYS5saWNlbmNlS2V5VmFsdWUpLFNlKDUpLFJlKCJuZ01vZGVs'@;
put 'IixhLmFjdGl2YXRpb25LZXlWYWx1ZSksU2UoMSksUmUoImNsckxvYWRpbmciLGEuYXBwbHlpbmdLZXlzKSgiZGlzYWJsZWQiLGEuZGlzYWJsZUFwcGx5QnV0dG9uKSxTZSgyKSxSZSgibmdJZiIsYS5pc0FwcEZyZWVUaWVyLnZhbHVlKX19ZnVuY3Rpb24gQldlKGwsYyl7MSZsJiZ0bigwLCJh'@;
put 'cHAtdGVybXMiKX12YXIgUGNlPWZ1bmN0aW9uKGwpe3JldHVybiBsLmtleT0ia2V5IixsLnJlZ2lzdGVyPSJyZWdpc3RlciIsbC5saW1pdD0ibGltaXQiLGwudXBkYXRlPSJ1cGRhdGUiLGx9KFBjZXx8e30pO2xldCBqV2U9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhLGYsZCxoKXt0aGlz'@;
put 'LnJvdXRlPWEsdGhpcy5saWNlbmNlU2VydmljZT1mLHRoaXMuc2FzU2VydmljZT1kLHRoaXMuYXBwU2VydmljZT1oLHRoaXMuYWN0aW9uPW51bGwsdGhpcy5saWNlbnNlRXJyb3JzPXttaXNzaW5nOidMaWNlbmNlIGtleSBpcyBtaXNzaW5nIC0gcGxlYXNlIGNvbnRhY3QgPGEgY2xhc3M9ImNv'@;
put 'bG9yLWdyZWVuIiBocmVmPSJtYWlsdG86IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iPnN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW88L2E+IGFuZCBlbnRlciB2YWxpZCBrZXlzIGJlbG93LicsZXhwaXJlZDonTGljZW5jZSBrZXkgaXMgZXhwaXJlZCAtIHBsZWFzZSBjb250YWN0IDxhIGNs'@;
put 'YXNzPSJjb2xvci1ncmVlbiIgaHJlZj0ibWFpbHRvOiBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIj5zdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvPC9hPiBhbmQgZW50ZXIgdmFsaWQga2V5cyBiZWxvdy4nLGludmFsaWQ6J0xpY2VuY2Uga2V5IGlzIGludmFsaWQgLSBwbGVhc2UgY29udGFj'@;
put 'dCA8YSBjbGFzcz0iY29sb3ItZ3JlZW4iIGhyZWY9Im1haWx0bzogc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyI+c3VwcG9ydEBkYXRhY29udHJvbGxlci5pbzwvYT4gYW5kIGVudGVyIHZhbGlkIGtleXMgYmVsb3cuJyxtaXNzbWF0Y2g6J1lvdXIgU1lTU0lURSAoYmVsb3cpIGlzIG5vdCBm'@;
put 'b3VuZCBpbiB0aGUgbGljZW5jZSBrZXkgLSBwbGVhc2UgY29udGFjdCA8YSBjbGFzcz0iY29sb3ItZ3JlZW4iIGhyZWY9Im1haWx0bzogc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyI+c3VwcG9ydEBkYXRhY29udHJvbGxlci5pbzwvYT4gYW5kIGVudGVyIHZhbGlkIGtleXMgYmVsb3cuJ30s'@;
put 'dGhpcy5saWNlbmNlS2V5VmFsdWU9IiIsdGhpcy5hY3RpdmF0aW9uS2V5VmFsdWU9IiIsdGhpcy5hcHBseWluZ0tleXM9ITEsdGhpcy5zeXNzaXRlPXRoaXMuYXBwU2VydmljZS5zeXNzaXRlLHRoaXMuY3VycmVudExpY2VuY2VLZXk9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlS2V5LHRo'@;
put 'aXMuY3VycmVudEFjdGl2YXRpb25LZXk9dGhpcy5saWNlbmNlU2VydmljZS5hY3RpdmF0aW9uS2V5LHRoaXMuaXNBcHBGcmVlVGllcj10aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwRnJlZVRpZXIsdGhpcy51c2VyQ291bnRMaW1pdGF0aW9uPXRoaXMubGljZW5jZVNlcnZpY2UudXNlckNvdW50'@;
put 'TGltaXRhdGlvbix0aGlzLmxpY2Vuc2VLZXlEYXRhPW51bGwsdGhpcy5pbnB1dFR5cGU9ImZpbGUiLHRoaXMubGljZW5jZUZpbGVMb2FkaW5nPSExLHRoaXMubGljZW5jZWZpbGU9e2ZpbGVuYW1lOiIifX1uZ09uSW5pdCgpe3RoaXMubGljZW5jZUtleVZhbHVlPXRoaXMuY3VycmVudExpY2Vu'@;
put 'Y2VLZXl8fCIiLHRoaXMuYWN0aXZhdGlvbktleVZhbHVlPXRoaXMuY3VycmVudEFjdGl2YXRpb25LZXl8fCIiLHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKGE9Pnt0aGlzLmtleUVycm9yPWEuZXJyb3IsdGhpcy5taXNzbWF0Y2hlZEtleT1hLm1pc3NtYXRjaElkLGEuZGV0YWls'@;
put 'cyYmKHRoaXMuZXJyb3JEZXRhaWxzPWF0b2IoYS5kZXRhaWxzKSl9KSx0aGlzLnJvdXRlLnBhcmFtcy5zdWJzY3JpYmUoYT0+e2xldCBmPWEuYWN0aW9uO2YmJk9iamVjdC52YWx1ZXMoUGNlKS5pbmNsdWRlcyhmKSYmKHRoaXMuYWN0aW9uPWYpfSksdGhpcy5saWNlbnNlS2V5RGF0YT10aGlz'@;
put 'LmxpY2VuY2VTZXJ2aWNlLmdldExpY2Vuc2VLZXlEYXRhKCl9dHJpbUtleXMoKXt0aGlzLmxpY2VuY2VLZXlWYWx1ZT10aGlzLmxpY2VuY2VLZXlWYWx1ZS50cmltKCksdGhpcy5hY3RpdmF0aW9uS2V5VmFsdWU9dGhpcy5hY3RpdmF0aW9uS2V5VmFsdWUudHJpbSgpfWNvcHlTeXNzaXRlKGEs'@;
put 'ZixkKXtjb25zdCBoPWQuam9pbigiXG4iKTtuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChoKS50aGVuKCgpPT57YS5zZXRBdHRyaWJ1dGUoInNoYXBlIiwiY2hlY2siKSxhLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJpcy1zdWNjZXNzIiksZi5pbm5lclRleHQ9IkNvcGllZCEiLHNldFRp'@;
put 'bWVvdXQoKCk9PnthLnNldEF0dHJpYnV0ZSgic2hhcGUiLCJjb3B5IiksYS5yZW1vdmVBdHRyaWJ1dGUoImNsYXNzIiksZi5pbm5lclRleHQ9IkNvcHkgdG8gY2xpcGJvYXJkIn0sMWUzKX0pfWFwcGx5S2V5cygpe3RoaXMuYXBwbHlpbmdLZXlzPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0'@;
put 'KCJhZG1pbi9yZWdpc3RlcmtleSIse2tleXVwbG9hZDpbe0FDVElWQVRJT05fS0VZOnRoaXMuYWN0aXZhdGlvbktleVZhbHVlLExJQ0VOQ0VfS0VZOnRoaXMubGljZW5jZUtleVZhbHVlfV19KS50aGVuKGY9PntmLnJldHVybiYmZi5yZXR1cm5bMF0mJiJTVUNDRVNTIj09PWYucmV0dXJuWzBd'@;
put 'Lk1TRyYmbG9jYXRpb24ucmVwbGFjZShsb2NhdGlvbi5ocmVmLnNwbGl0KCIjIilbMF0pfSkuZmluYWxseSgoKT0+e3RoaXMuYXBwbHlpbmdLZXlzPSExfSl9b25GaWxlQ2FwdHVyZShhLGY9ITEpe2xldCBkPWY/YVswXTphLnRhcmdldC5maWxlc1swXTtpZih0aGlzLmxpY2VuY2VmaWxlLmZp'@;
put 'bGVuYW1lPWQubmFtZSwhZClyZXR1cm47dGhpcy5saWNlbmNlRmlsZUxvYWRpbmc9ITA7Y29uc3QgaD1uZXcgRmlsZVJlYWRlcjtoLm9ubG9hZD1tPT57aWYodGhpcy5saWNlbmNlRmlsZUVycm9yPSJFcnJvciByZWFkaW5nIGZpbGUuIiwhbXx8IW0udGFyZ2V0fHwyIT1tLnRhcmdldC5yZWFk'@;
put 'eVN0YXRlfHxtLnRhcmdldC5lcnJvcnx8IW0udGFyZ2V0LnJlc3VsdClyZXR1cm47dGhpcy5saWNlbmNlRmlsZUxvYWRpbmc9ITEsdGhpcy5saWNlbmNlRmlsZUVycm9yPXZvaWQgMDtjb25zdCBfPW0udGFyZ2V0LnJlc3VsdC50b1N0cmluZygpLnNwbGl0KCJcbiIpO3RoaXMuYWN0aXZhdGlv'@;
put 'bktleVZhbHVlPV9bMV0sdGhpcy5saWNlbmNlS2V5VmFsdWU9X1swXX0saC5yZWFkQXNUZXh0KGQpfXN3aXRjaFR5cGUoYSl7dGhpcy5pbnB1dFR5cGU9YX1nZXQgZGlzYWJsZUFwcGx5QnV0dG9uKCl7cmV0dXJuIHRoaXMubGljZW5jZUtleVZhbHVlLmxlbmd0aDwxfHx0aGlzLmFjdGl2YXRp'@;
put 'b25LZXlWYWx1ZS5sZW5ndGg8MXx8dGhpcy5saWNlbmNlS2V5VmFsdWU9PT10aGlzLmN1cnJlbnRMaWNlbmNlS2V5JiZ0aGlzLmFjdGl2YXRpb25LZXlWYWx1ZT09PXRoaXMuY3VycmVudEFjdGl2YXRpb25LZXl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8'@;
put 'fGwpKHJ0KHR1KSxydChiMSkscnQocGwpLHJ0KHdEKSl9LGwuXHUwMjc1Y21wPWtyKHt0eXBlOmwsc2VsZWN0b3JzOltbImFwcC1saWNlbnNpbmciXV0sZGVjbHM6Mix2YXJzOjIsY29uc3RzOltbImNsYXNzIiwiY2FyZCIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsImNhcmQiXSxbMSwiY2Fy'@;
put 'ZC1oZWFkZXIiXSxbMSwiY2FyZC1ibG9jayIsMywibmdTd2l0Y2giXSxbNCwibmdTd2l0Y2hDYXNlIl0sWzMsIm1pc3NrZXkiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJ0b29sdGlwIiwidG9vbHRpcC1tZCIsInRvb2x0aXAtdG9wLXJpZ2h0IiwzLCJjbGljayJdLFsic2hhcGUiLCJjb3B5'@;
put 'Iiwic2l6ZSIsIjE1IiwxLCJjdXJzb3ItcG9pbnRlciJdLFsiY29weUljb24iLCIiXSxbMSwidG9vbHRpcC1jb250ZW50Il0sWyJjb3B5VG9vbHRpcCIsIiJdLFsiY2xhc3MiLCJtLTAiLDQsIm5nSWYiXSxbImNsclRhYkxpbmsiLCIiXSxbInR5cGUiLCJmaWxlIiwiaGlkZGVuIiwiIiwzLCJj'@;
put 'aGFuZ2UiXSxbImxpY2VuY2VGaWxlIiwiIl0sWyJhcHBGaWxlRHJvcCIsIiIsMSwiZHJvcC1hcmVhIiwzLCJjbGljayIsImZpbGVEcm9wIl0sWyJjbGFzcyIsInNwaW5uZXItc20iLDQsIm5nSWYiXSxbMSwiY2xyLWZvcm0iLCJsaWNlbnNlLWtleS1mb3JtIl0sWzEsImNsci1jb250cm9sLWNv'@;
put 'bnRhaW5lciJdLFsibmFtZSIsImxpY2Vuc2Uta2V5LWFyZWEiLCJwbGFjZWhvbGRlciIsIlBhc3RlIGxpY2VuY2Uga2V5IGhlcmUiLDEsImNsci10ZXh0YXJlYSIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJtb3VzZWxlYXZlIl0sWzEsImNsci1mb3JtIiwiYWN0aXZhdGlvbi1rZXkt'@;
put 'Zm9ybSJdLFsibmFtZSIsImFjdGl2YXRpb24ta2V5LWFyZWEiLCJwbGFjZWhvbGRlciIsIlBhc3RlIGFjdGl2YXRpb24ga2V5IGhlcmUiLDEsImNsci10ZXh0YXJlYSIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJtb3VzZWxlYXZlIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwiYXBw'@;
put 'bHkta2V5cyIsMywiY2xyTG9hZGluZyIsImRpc2FibGVkIiwiY2xpY2siXSxbInJvdXRlckxpbmsiLCIvIiwiY2xhc3MiLCJidG4gYnRuLXNtIGJ0bi1saW5rIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImtleS1lcnJvciIsNCwibmdJZiJdLFsiY2xhc3MiLCJrZXktZXJyb3IiLDMsImlubmVySFRN'@;
put 'TCIsNCwibmdJZiJdLFsxLCJrZXktZXJyb3IiXSxbMSwia2V5LWVycm9yIiwzLCJpbm5lckhUTUwiXSxbImNsYXNzZXMiLCJjb2xvci1ncmVlbiJdLFsxLCJtLTAiXSxbMSwic3Bpbm5lci1zbSJdLFsicm91dGVyTGluayIsIi8iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIl1dLHRlbXBs'@;
put 'YXRlOmZ1bmN0aW9uKGEsZil7MSZhJiYodHQoMCxWV2UsNDUsMTMsImRpdiIsMCksdHQoMSxCV2UsMSwwLCJhcHAtdGVybXMiLDEpKSwyJmEmJihSZSgibmdJZiIsInJlZ2lzdGVyIiE9PWYuYWN0aW9uKSxTZSgxKSxSZSgibmdJZiIsInJlZ2lzdGVyIj09PWYuYWN0aW9uKSl9LGRlcGVuZGVu'@;
put 'Y2llczpbUmEsJGksa2YsQ2gscDQsaXMsV2EsaDQsemEsQ2QsSTAsTVdlLGJJLFJsLEpjLEloLHU1LGY1LFQ3LGM1LGw1LEE3LFJoLExjZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtoZWlnaHQ6Y2FsYygxMDAlIC0gOTZweCk7cGFkZGluZzoyMHB4fS5jYXJkW19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXXttYXJnaW4tdG9wOjB9LmtleS1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1pc3NrZXlbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNlNzRjM2N9LmxpY2Vuc2Uta2V5LWZvcm1bX25nY29udGVudC0lQ09NUCVdLCAuYWN0aXZhdGlvbi1rZXktZm9ybVtf'@;
put 'bmdjb250ZW50LSVDT01QJV17cGFkZGluZzowfS5saWNlbnNlLWtleS1mb3JtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbHItY29udHJvbC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuYWN0aXZhdGlvbi1rZXktZm9ybVtfbmdjb250ZW50LSVDT01QJV0gICAuY2xyLWNvbnRyb2wt'@;
put 'Y29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfS5saWNlbnNlLWtleS1mb3JtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbHItY29udHJvbC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgdGV4dGFyZWFbX25nY29udGVudC0lQ09NUCVdLCAuYWN0aXZhdGlvbi1r'@;
put 'ZXktZm9ybVtfbmdjb250ZW50LSVDT01QJV0gICAuY2xyLWNvbnRyb2wtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRleHRhcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO2hlaWdodDoxNzBweDttYXgtaGVpZ2h0OjE3MHB4O21pbi1oZWlnaHQ6MTcwcHg7cmVzaXpl'@;
put 'Om5vbmV9LmFwcGx5LWtleXNbX25nY29udGVudC0lQ09NUCVde2hlaWdodDo0MHB4O3dpZHRoOjIwMHB4fS5kcm9wLWFyZWFbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjE1cHg7Ym9yZGVy'@;
put 'OjJweCBkYXNoZWQgI2IyYjJiMjtib3JkZXItcmFkaXVzOjRweDtjdXJzb3I6cG9pbnRlcjttYXJnaW46MTBweCAwfWNsci10YWJzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Ym94LXNoYWRvdzpub25lIWltcG9ydGFudH0iXX0pLGx9KSgpLGVZPSgo'@;
put 'KT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmKXt0aGlzLmxpY2VuY2VTZXJ2aWNlPWEsdGhpcy5yb3V0ZXI9Zn1jYW5BY3RpdmF0ZShhLGYpe3JldHVybiEhKHZvaWQgMCE9PWY/LnJvb3QucXVlcnlQYXJhbXMuZm9yY2V8fGY/LnVybC5pbmNsdWRlcygibGljZW5zaW5nL3VwZGF0ZSIpJiZ0'@;
put 'aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkfHxudWxsIT09dGhpcy5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZC52YWx1ZSYmITE9PT10aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkLnZhbHVlKXx8KHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9ob21l'@;
put 'IiksITEpfWNhbkRlYWN0aXZhdGUoYSxmLGQsaCl7cmV0dXJuIShkPy51cmwuaW5jbHVkZXMoImxpY2Vuc2luZy9yZWdpc3RlciIpfHx0aGlzLmxpY2VuY2VTZXJ2aWNlLmFwcExvY2tlZC52YWx1ZSl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHNy'@;
put 'KGIxKSxzcihMYSkpfSxsLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmwsZmFjdG9yeTpsLlx1MDI3NWZhY30pLGx9KSgpO3ZhciByWSxMNyxQUztmdW5jdGlvbiB0WShsKXtyZXR1cm4odFk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/'@;
put 'ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiBCSShsKXtyZXR1'@;
put 'cm4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShsKX1mdW5jdGlvbiBGY2UoKXtyZXR1cm4hIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3R9ZnVuY3Rpb24gSGNlKCl7cmV0dXJuISFkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgidGVzdCIpLnRleHRDb250ZW50fWZ1bmN0'@;
put 'aW9uIE5jZSgpe3JldHVybiEhd2luZG93LmdldENvbXB1dGVkU3R5bGV9ZnVuY3Rpb24gTFMobCl7d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKGwpfWZ1bmN0aW9uIG5ZKCl7cmV0dXJuIm9udG91Y2hzdGFydCJpbiB3aW5kb3d9ZnVuY3Rpb24gaVkoKXtyZXR1cm4gdm9pZCAwPT09clkm'@;
put 'JmZ1bmN0aW9uIHpXZSgpe3ZhciBsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRBQkxFIik7bC5zdHlsZS5ib3JkZXJTcGFjaW5nPSIwIixsLnN0eWxlLmJvcmRlcldpZHRoPSIwIixsLnN0eWxlLnBhZGRpbmc9IjAiO3ZhciBjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRCT0RZIik7bC5h'@;
put 'cHBlbmRDaGlsZChjKSxjLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRSIikpLGMuZmlyc3RDaGlsZC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpKSxjLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZC5pbm5lckhUTUw9Ijx0cj48dGQ+dDxicj50PC90'@;
put 'ZD48L3RyPiI7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiQ0FQVElPTiIpO2EuaW5uZXJIVE1MPSJjPGJyPmM8YnI+Yzxicj5jIixhLnN0eWxlLnBhZGRpbmc9IjAiLGEuc3R5bGUubWFyZ2luPSIwIixsLmluc2VydEJlZm9yZShhLGMpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQo'@;
put 'bCksclk9bC5vZmZzZXRIZWlnaHQ8MipsLmxhc3RDaGlsZC5vZmZzZXRIZWlnaHQsZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsKX0oKSxyWX1mdW5jdGlvbiBWY2UobCl7dmFyIGM9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O3Jl'@;
put 'dHVybiBMN3x8KEw3PSJvYmplY3QiPT09KHR5cGVvZiBJbnRsPiJ1Ij8idW5kZWZpbmVkIjp0WShJbnRsKSk/bmV3IEludGwuQ29sbGF0b3IobCxjKS5jb21wYXJlOiJmdW5jdGlvbiI9PXR5cGVvZiBTdHJpbmcucHJvdG90eXBlLmxvY2FsZUNvbXBhcmU/ZnVuY3Rpb24oZixkKXtyZXR1cm4i'@;
put 'Ii5jb25jYXQoZikubG9jYWxlQ29tcGFyZShkKX06ZnVuY3Rpb24oZixkKXtyZXR1cm4gZj09PWQ/MDpmPmQ/LTE6MX0pfWZ1bmN0aW9uIEJjZSgpe2lmKHZvaWQgMCE9PVBTKXJldHVybiBQUzt0cnl7dmFyIGw9e2dldCBwYXNzaXZlKCl7UFM9ITB9fTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5l'@;
put 'cigidGVzdCIsbCxsKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGVzdCIsbCxsKX1jYXRjaHtQUz0hMX1yZXR1cm4gUFN9ZnVuY3Rpb24gamNlKGwpe2Zvcih2YXIgYz1sLmxlbmd0aCxhPTA7YTxjOylsW2FdPVtsW2FdXSxhKz0xfWZ1bmN0aW9uIG9ZKGwsYyl7Zm9yKHZhciBhPWMu'@;
put 'bGVuZ3RoLGY9MDtmPGE7KWwucHVzaChjW2ZdKSxmKz0xfWZ1bmN0aW9uIEZTKGwpe3ZhciBjPVtdO2lmKCFsfHwwPT09bC5sZW5ndGh8fCFsWzBdfHwwPT09bFswXS5sZW5ndGgpcmV0dXJuIGM7Zm9yKHZhciBhPWwubGVuZ3RoLGY9bFswXS5sZW5ndGgsZD0wO2Q8YTtkKyspZm9yKHZhciBo'@;
put 'PTA7aDxmO2grKyljW2hdfHwoY1toXT1bXSksY1toXVtkXT1sW2RdW2hdO3JldHVybiBjfWZ1bmN0aW9uIFBzKGwsYyxhLGYpe3ZhciBkPS0xLGg9bCxtPWE7QXJyYXkuaXNBcnJheShsKXx8KGg9QXJyYXkuZnJvbShsKSk7dmFyIF89aC5sZW5ndGg7Zm9yKGYmJl8mJihtPWhbZCs9MV0pLGQr'@;
put 'PTE7ZDxfOyltPWMobSxoW2RdLGQsaCksZCs9MTtyZXR1cm4gbX1mdW5jdGlvbiBEMShsLGMpe3ZhciBhPTAsZj1sO0FycmF5LmlzQXJyYXkobCl8fChmPUFycmF5LmZyb20obCkpO2Zvcih2YXIgZD1mLmxlbmd0aCxoPVtdLG09LTE7YTxkOyl7dmFyIF89ZlthXTtjKF8sYSxmKSYmKGhbbSs9'@;
put 'MV09XyksYSs9MX1yZXR1cm4gaH1mdW5jdGlvbiBoYShsLGMpe3ZhciBhPTAsZj1sO0FycmF5LmlzQXJyYXkobCl8fChmPUFycmF5LmZyb20obCkpO2Zvcih2YXIgZD1mLmxlbmd0aCxoPVtdLG09LTE7YTxkOyloW20rPTFdPWMoZlthXSxhLGYpLGErPTE7cmV0dXJuIGh9ZnVuY3Rpb24gUm4o'@;
put 'bCxjKXt2YXIgYT0wLGY9bDtBcnJheS5pc0FycmF5KGwpfHwoZj1BcnJheS5mcm9tKGwpKTtmb3IodmFyIGQ9Zi5sZW5ndGg7YTxkJiYhMSE9PWMoZlthXSxhLGYpOylhKz0xO3JldHVybiBsfWZ1bmN0aW9uIHpjZShsKXtyZXR1cm4gUHMobCxmdW5jdGlvbihjLGEpe3JldHVybiBjK2F9LDAp'@;
put 'fWZ1bmN0aW9uIFVXZShsKXtyZXR1cm4gUHMobCxmdW5jdGlvbihjLGEpe3JldHVybiBjPmE/YzphfSxBcnJheS5pc0FycmF5KGwpP2xbMF06dm9pZCAwKX1mdW5jdGlvbiBaV2UobCl7cmV0dXJuIFBzKGwsZnVuY3Rpb24oYyxhKXtyZXR1cm4gYzxhP2M6YX0sQXJyYXkuaXNBcnJheShsKT9s'@;
put 'WzBdOnZvaWQgMCl9ZnVuY3Rpb24gWVdlKGwpe3JldHVybiBsLmxlbmd0aD96Y2UobCkvbC5sZW5ndGg6MH1mdW5jdGlvbiBVY2UobCl7cmV0dXJuIFBzKGwsZnVuY3Rpb24oYyxhKXtyZXR1cm4gYy5jb25jYXQoQXJyYXkuaXNBcnJheShhKT9VY2UoYSk6YSl9LFtdKX1mdW5jdGlvbiBhWShs'@;
put 'KXt2YXIgYz1bXTtyZXR1cm4gUm4obCxmdW5jdGlvbihhKXstMT09PWMuaW5kZXhPZihhKSYmYy5wdXNoKGEpfSksY31mdW5jdGlvbiBsWSgpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGM9bmV3IEFycmF5KGwpLGE9MDthPGw7YSsrKWNbYV09YXJndW1lbnRzW2FdO3ZhciBmPVtdLmNv'@;
put 'bmNhdChjKSxkPWZbMF0saD1mLnNsaWNlKDEpLG09ZDtyZXR1cm4gUm4oaCxmdW5jdGlvbihfKXttPW0uZmlsdGVyKGZ1bmN0aW9uKE8pe3JldHVybiFfLmluY2x1ZGVzKE8pfSl9KSxtfWZ1bmN0aW9uIFdXZSgpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGM9bmV3IEFycmF5KGwpLGE9'@;
put 'MDthPGw7YSsrKWNbYV09YXJndW1lbnRzW2FdO3ZhciBmPVtdLmNvbmNhdChjKSxkPWZbMF0saD1mLnNsaWNlKDEpLG09ZDtyZXR1cm4gUm4oaCxmdW5jdGlvbihfKXttPW0uZmlsdGVyKGZ1bmN0aW9uKE8pe3JldHVybiBfLmluY2x1ZGVzKE8pfSl9KSxtfWZ1bmN0aW9uIEdXZSgpe2Zvcih2'@;
put 'YXIgbD1hcmd1bWVudHMubGVuZ3RoLGM9bmV3IEFycmF5KGwpLGE9MDthPGw7YSsrKWNbYV09YXJndW1lbnRzW2FdO3ZhciBmPVtdLmNvbmNhdChjKSxkPWZbMF0saD1mLnNsaWNlKDEpLG09bmV3IFNldChkKTtyZXR1cm4gUm4oaCxmdW5jdGlvbihfKXtSbihfLGZ1bmN0aW9uKE8pe20uaGFz'@;
put 'KE8pfHxtLmFkZChPKX0pfSksQXJyYXkuZnJvbShtKX1mdW5jdGlvbiBzWShsKXtyZXR1cm4gbC5zcGxpdChhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06IiAiKX1mdW5jdGlvbiBaY2UobCxjLGEpe3JldHVybiBjPWZ1bmN0aW9uICRXZShs'@;
put 'KXt2YXIgYz1mdW5jdGlvbiBLV2UobCxjKXtpZigib2JqZWN0IiE9PWMzKGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PWMzKGYpKXJldHVybiBm'@;
put 'O3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1jMyhjKT9jOlN0cmluZyhjKX0oYyksYyBpbiBs'@;
put 'P09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLGMse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpsW2NdPWEsbH1mdW5jdGlvbiBjMyhsKXtyZXR1cm4oYzM9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wu'@;
put 'aXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiBQ'@;
put 'NyhsKXt2YXIgYztyZXR1cm4gQXJyYXkuaXNBcnJheShsKT9jPWwubGVuZ3RoP25ldyBBcnJheShsLmxlbmd0aCkuZmlsbChudWxsKTpbXTooYz17fSxtYShsLGZ1bmN0aW9uKGEsZil7Il9fY2hpbGRyZW4iIT09ZiYmKGNbZl09YSYmIm9iamVjdCI9PT1jMyhhKSYmIUFycmF5LmlzQXJyYXko'@;
put 'YSk/UDcoYSk6QXJyYXkuaXNBcnJheShhKT9hLmxlbmd0aCYmIm9iamVjdCI9PT1jMyhhWzBdKSYmIUFycmF5LmlzQXJyYXkoYVswXSk/W1A3KGFbMF0pXTpbXTpudWxsKX0pKSxjfWZ1bmN0aW9uIGYzKGwsYyl7cmV0dXJuIGMucHJvdG90eXBlLmNvbnN0cnVjdG9yPWMsbC5wcm90b3R5cGU9'@;
put 'bmV3IGMsbC5wcm90b3R5cGUuY29uc3RydWN0b3I9bCxsfWZ1bmN0aW9uIHJ1KGwsYyxhKXt2YXIgZj1BcnJheS5pc0FycmF5KGEpO3JldHVybiBtYShjLGZ1bmN0aW9uKGQsaCl7KCExPT09Znx8YS5pbmNsdWRlcyhoKSkmJihsW2hdPWQpfSksbH1mdW5jdGlvbiBIUyhsLGMpe21hKGMsZnVu'@;
put 'Y3Rpb24oYSxmKXtjW2ZdJiYib2JqZWN0Ij09PWMzKGNbZl0pPyhsW2ZdfHwobFtmXT1BcnJheS5pc0FycmF5KGNbZl0pP1tdOiJbb2JqZWN0IERhdGVdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjW2ZdKT9jW2ZdOnt9KSxIUyhsW2ZdLGNbZl0pKTpsW2ZdPWNbZl19KX1m'@;
put 'dW5jdGlvbiB4YyhsKXtyZXR1cm4ib2JqZWN0Ij09PWMzKGwpP0pTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobCkpOmx9ZnVuY3Rpb24gZTAobCl7dmFyIGM9e307cmV0dXJuIG1hKGwsZnVuY3Rpb24oYSxmKXtjW2ZdPWF9KSxjfWZ1bmN0aW9uIFRsKGwpe2wuTUlYSU5TfHwobC5NSVhJTlM9'@;
put 'W10pO2Zvcih2YXIgYz1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGM+MT9jLTE6MCksZj0xO2Y8YztmKyspYVtmLTFdPWFyZ3VtZW50c1tmXTtyZXR1cm4gUm4oYSxmdW5jdGlvbihkKXtsLk1JWElOUy5wdXNoKGQuTUlYSU5fTkFNRSksbWEoZCxmdW5jdGlvbihoLG0pe2lmKHZvaWQg'@;
put 'MCE9PWwucHJvdG90eXBlW21dKXRocm93IG5ldyBFcnJvcigiTWl4aW4gY29uZmxpY3QuIFByb3BlcnR5ICciLmNvbmNhdChtLCInIGFscmVhZHkgZXhpc3QgYW5kIGNhbm5vdCBiZSBvdmVyd3JpdHRlbi4iKSk7dmFyIGFlLHBlLGJlOyJmdW5jdGlvbiI9PXR5cGVvZiBoP2wucHJvdG90eXBl'@;
put 'W21dPWg6T2JqZWN0LmRlZmluZVByb3BlcnR5KGwucHJvdG90eXBlLG0se2dldDooYWU9bSxwZT1oLGJlPSJfIi5jb25jYXQoYWUpLGZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PXRoaXNbYmVdJiYodGhpc1tiZV09KGx0PXBlLChBcnJheS5pc0FycmF5KGx0KXx8cGEobHQpKSYmKGx0PXhj'@;
put 'KGx0KSksbHQpKSx0aGlzW2JlXTt2YXIgbHR9KSxzZXQ6ZnVuY3Rpb24oYWUpe3ZhciBwZT0iXyIuY29uY2F0KGFlKTtyZXR1cm4gZnVuY3Rpb24oYmUpe3RoaXNbcGVdPWJlfX0obSksY29uZmlndXJhYmxlOiEwfSl9KX0pLGx9ZnVuY3Rpb24gakkobCxjKXtyZXR1cm4gSlNPTi5zdHJpbmdp'@;
put 'ZnkobCk9PT1KU09OLnN0cmluZ2lmeShjKX1mdW5jdGlvbiBwYShsKXtyZXR1cm4iW29iamVjdCBPYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsKX1mdW5jdGlvbiBIaChsLGMsYSxmKXtmLnZhbHVlPWEsZi53cml0YWJsZT0hMSE9PWYud3JpdGFibGUsZi5lbnVt'@;
put 'ZXJhYmxlPSExIT09Zi5lbnVtZXJhYmxlLGYuY29uZmlndXJhYmxlPSExIT09Zi5jb25maWd1cmFibGUsT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsYyxmKX1mdW5jdGlvbiBtYShsLGMpe2Zvcih2YXIgYSBpbiBsKWlmKCghbC5oYXNPd25Qcm9wZXJ0eXx8bC5oYXNPd25Qcm9wZXJ0eSYmT2Jq'@;
put 'ZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGwsYSkpJiYhMT09PWMobFthXSxhLGwpKWJyZWFrO3JldHVybiBsfWZ1bmN0aW9uIFljZShsLGMpe3ZhciBhPWMuc3BsaXQoIi4iKSxmPWw7cmV0dXJuIG1hKGEsZnVuY3Rpb24oZCl7aWYodm9pZCAwPT09KGY9ZltkXSkpcmV0dXJu'@;
put 'IGY9dm9pZCAwLCExfSksZn1mdW5jdGlvbiB6SShsLGMsYSl7dmFyIGY9Yy5zcGxpdCgiLiIpLGQ9bDtmLmZvckVhY2goZnVuY3Rpb24oaCxtKXttIT09Zi5sZW5ndGgtMT8oU3MoZCxoKXx8KGRbaF09e30pLGQ9ZFtoXSk6ZFtoXT1hfSl9ZnVuY3Rpb24gVUkobCl7cmV0dXJuIHBhKGwpP2Z1'@;
put 'bmN0aW9uIGEoZil7dmFyIGQ9MDtyZXR1cm4gcGEoZik/bWEoZixmdW5jdGlvbihoLG0peyJfX2NoaWxkcmVuIiE9PW0mJihkKz1hKGgpKX0pOmQrPTEsZH0obCk6MH1mdW5jdGlvbiBnNShsKXt2YXIgYyxhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3Vt'@;
put 'ZW50c1sxXToidmFsdWUiLGY9Il8iLmNvbmNhdChhKSxkPShaY2UoYz17X3RvdWNoZWQ6ITF9LGYsbCksWmNlKGMsImlzVG91Y2hlZCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdG91Y2hlZH0pLGMpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZCxhLHtnZXQ6ZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gdGhpc1tmXX0sc2V0OmZ1bmN0aW9uKG0pe3RoaXMuX3RvdWNoZWQ9ITAsdGhpc1tmXT1tfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGR9ZnVuY3Rpb24gU3MobCxjKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGwsYyl9VCg1Nzk0'@;
put 'MyksVCgyMDY0NyksVCgxODMyMyksVCg1Mzk1MCksVCg1ODI3MiksVCgxMzQwMCksVCgxMzI3OCksVCg1MjMxMyksVCg3MDg2NCksVCg2NDk1MiksVCg5NzA4NyksVCgzMTEyMyksVCgyNDgwKSxUKDgzMDI4KSxUKDQyNzYwKSxUKDEwNDE0KSxUKDM0NzcwKSxUKDY5MTApLFQoNjM5NjcpLFQo'@;
put 'ODM1OTApLFQoNTg1OTQpLFQoNTgzMjQpLFQoOTE5NDUpLFQoOTY2NCksVCgyNjU3KSxUKDg2NDI3KSxUKDMzNTgzKSxUKDMwNTcxKSxUKDE4MTU4KSxUKDI4NzY0KSxUKDQ1MTM1KSxUKDE2ODI1KSxUKDc2NzQ5KSxUKDgzNjIwKSxUKDk2MjUxKSxUKDQwMDYxKSxUKDI0NTY5KSxUKDY0NDE4'@;
put 'KTt2YXIgWjA9ZnVuY3Rpb24oYyl7dmFyIGE9e3ZhbHVlOiExLHRlc3Q6ZnVuY3Rpb24oZixkKXthLnZhbHVlPWMoZixkKX19O3JldHVybiBhfSxJMT17Y2hyb21lOlowKGZ1bmN0aW9uKGwsYyl7cmV0dXJuL0Nocm9tZS8udGVzdChsKSYmL0dvb2dsZS8udGVzdChjKX0pLGNocm9tZVdlYktp'@;
put 'dDpaMChmdW5jdGlvbihsKXtyZXR1cm4vQ3JpT1MvLnRlc3QobCl9KSxlZGdlOlowKGZ1bmN0aW9uKGwpe3JldHVybi9FZGdlLy50ZXN0KGwpfSksZWRnZVdlYktpdDpaMChmdW5jdGlvbihsKXtyZXR1cm4vRWRnaU9TLy50ZXN0KGwpfSksZmlyZWZveDpaMChmdW5jdGlvbihsKXtyZXR1cm4v'@;
put 'RmlyZWZveC8udGVzdChsKX0pLGZpcmVmb3hXZWJLaXQ6WjAoZnVuY3Rpb24obCl7cmV0dXJuL0Z4aU9TLy50ZXN0KGwpfSksaWU6WjAoZnVuY3Rpb24obCl7cmV0dXJuL1RyaWRlbnQvLnRlc3QobCl9KSxpZTk6WjAoZnVuY3Rpb24oKXtyZXR1cm4hIWRvY3VtZW50LmRvY3VtZW50TW9kZX0p'@;
put 'LG1vYmlsZTpaMChmdW5jdGlvbihsKXtyZXR1cm4vQW5kcm9pZHx3ZWJPU3xpUGhvbmV8aVBhZHxpUG9kfEJsYWNrQmVycnl8SUVNb2JpbGV8T3BlcmEgTWluaS9pLnRlc3QobCl9KSxzYWZhcmk6WjAoZnVuY3Rpb24obCxjKXtyZXR1cm4vU2FmYXJpLy50ZXN0KGwpJiYvQXBwbGUgQ29tcHV0'@;
put 'ZXIvLnRlc3QoYyl9KX0sRjc9e21hYzpaMChmdW5jdGlvbihsKXtyZXR1cm4vXk1hYy8udGVzdChsKX0pLHdpbjpaMChmdW5jdGlvbihsKXtyZXR1cm4vXldpbi8udGVzdChsKX0pLGxpbnV4OlowKGZ1bmN0aW9uKGwpe3JldHVybi9eTGludXgvLnRlc3QobCl9KSxpb3M6WjAoZnVuY3Rpb24o'@;
put 'bCl7cmV0dXJuL2lQaG9uZXxpUGFkfGlQb2QvaS50ZXN0KGwpfSl9O2Z1bmN0aW9uIFdjZSgpe3ZhciBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSxjPWwudXNlckFnZW50LGE9dm9pZCAwPT09Yz9uYXZpZ2F0b3IudXNlckFnZW50'@;
put 'OmMsZj1sLnZlbmRvcixkPXZvaWQgMD09PWY/bmF2aWdhdG9yLnZlbmRvcjpmO21hKEkxLGZ1bmN0aW9uKGgpeygwLGgudGVzdCkoYSxkKX0pfWZ1bmN0aW9uIEdjZSgpe3ZhciBjPShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30pLnBs'@;
put 'YXRmb3JtLGE9dm9pZCAwPT09Yz9uYXZpZ2F0b3IucGxhdGZvcm06YzttYShGNyxmdW5jdGlvbihmKXsoMCxmLnRlc3QpKGEpfSl9ZnVuY3Rpb24gdVkoKXtyZXR1cm4gSTEuY2hyb21lLnZhbHVlfWZ1bmN0aW9uICRjZSgpe3JldHVybiBJMS5jaHJvbWVXZWJLaXQudmFsdWV9ZnVuY3Rpb24g'@;
put 'WkkoKXtyZXR1cm4gSTEuZmlyZWZveC52YWx1ZX1mdW5jdGlvbiBLY2UoKXtyZXR1cm4gSTEuZmlyZWZveFdlYktpdC52YWx1ZX1mdW5jdGlvbiBxY2UoKXtyZXR1cm4gSTEuc2FmYXJpLnZhbHVlfWZ1bmN0aW9uIFhjZSgpe3JldHVybiBJMS5lZGdlLnZhbHVlfWZ1bmN0aW9uIHFXZSgpe3Jl'@;
put 'dHVybiBJMS5lZGdlV2ViS2l0LnZhbHVlfWZ1bmN0aW9uIEpjZSgpe3JldHVybiBJMS5pZS52YWx1ZX1mdW5jdGlvbiBRY2UoKXtyZXR1cm4gSTEuaWU5LnZhbHVlfWZ1bmN0aW9uIFhXZSgpe3JldHVybiBJMS5pZS52YWx1ZXx8STEuZWRnZS52YWx1ZX1mdW5jdGlvbiBQZCgpe3JldHVybiBJ'@;
put 'MS5tb2JpbGUudmFsdWV9ZnVuY3Rpb24gY1koKXtyZXR1cm4gRjcuaW9zLnZhbHVlfWZ1bmN0aW9uIGZZKCl7cmV0dXJuKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpuYXZpZ2F0b3IpLm1heFRvdWNoUG9pbnRzPjImJkY3Lm1hYy52YWx1'@;
put 'ZX1mdW5jdGlvbiBkWSgpe3JldHVybiBGNy53aW4udmFsdWV9ZnVuY3Rpb24gWUkoKXtyZXR1cm4gRjcubWFjLnZhbHVlfWZ1bmN0aW9uIEpXZSgpe3JldHVybiBGNy5saW51eC52YWx1ZX1XY2UoKSxHY2UoKTt2YXIgZTBlLHQwZSxuMGUscjBlLGkwZSxvMGUsUVdlPVQoNzA4OTYpO2Z1bmN0'@;
put 'aW9uIE9sKGwpe2Zvcih2YXIgYz1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGM+MT9jLTE6MCksZj0xO2Y8YztmKyspYVtmLTFdPWFyZ3VtZW50c1tmXTtyZXR1cm4gUHMobCxmdW5jdGlvbihoLG0sXyl7cmV0dXJuIGgrbS5yZXBsYWNlKC9ccj9cblxzKi9nLCIiKSsoYVtfXT9hW19d'@;
put 'OiIiKX0sIiIpLnRyaW0oKX1mdW5jdGlvbiBINyhsLGMpe3JldHVybiBjfHwoYz1sLnNsaWNlKDApKSxPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGwse3Jhdzp7dmFsdWU6T2JqZWN0LmZyZWV6ZShjKX19KSl9ZnVuY3Rpb24gaFkobCl7cmV0dXJuKGhZPSJmdW5jdGlv'@;
put 'biI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wu'@;
put 'cHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gTXMobCl7dmFyIGM7c3dpdGNoKGhZKGwpKXtjYXNlInN0cmluZyI6Y2FzZSJudW1iZXIiOmM9IiIuY29uY2F0KGwpO2JyZWFrO2Nhc2Uib2JqZWN0IjpjPW51bGw9PT1sPyIiOmwudG9TdHJpbmcoKTticmVhaztjYXNl'@;
put 'InVuZGVmaW5lZCI6Yz0iIjticmVhaztkZWZhdWx0OmM9bC50b1N0cmluZygpfXJldHVybiBjfWZ1bmN0aW9uIGlvKGwpe3JldHVybiB0eXBlb2YgbDwidSJ9ZnVuY3Rpb24gTGwobCl7cmV0dXJuIHR5cGVvZiBsPiJ1In1mdW5jdGlvbiB3dShsKXtyZXR1cm4gbnVsbD09PWx8fCIiPT09bHx8'@;
put 'TGwobCl9ZnVuY3Rpb24gYTBlKGwpe3JldHVybiJbb2JqZWN0IFJlZ0V4cF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGwpfVQoODI3NTYpLFQoMTY2NjEpLFQoNzgyNDYpO3ZhciBfWSx3WSxDWSxOUz0ibGVuZ3RoIixWUz1mdW5jdGlvbihjKXtyZXR1cm4gcGFyc2VJbnQo'@;
put 'YywxNil9LGwwZT1mdW5jdGlvbihjKXtyZXR1cm4gcGFyc2VJbnQoYywxMCl9LFdJPWZ1bmN0aW9uKGMsYSxmKXtyZXR1cm4gYy5zdWJzdHIoYSxmKX0sQlM9ZnVuY3Rpb24oYyl7cmV0dXJuIGMuY29kZVBvaW50QXQoMCktNjV9LHBZPWZ1bmN0aW9uKGMpe3JldHVybiIiLmNvbmNhdChjKS5y'@;
put 'ZXBsYWNlKC9cLS9nLCIiKX0sZUdlPWZ1bmN0aW9uKGMpe3JldHVybiBWUyhXSShwWShjKSxWUygiMTIiKSxCUygiRiIpKSkvKFZTKFdJKHBZKGMpLEJTKCJCIiksfn4hW11bTlNdKSl8fDkpfSx0R2U9ZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIGxvY2F0aW9uPCJ1IiYmL14oW2EtejAtOVwt'@;
put 'XStcLik/XHg2OFx4NjFceDZFXHg2NFx4NzNceDZGXHg2RVx4NzRceDYxXHg2Mlx4NkNceDY1XHgyRVx4NjNceDZGXHg2RCQvaS50ZXN0KGxvY2F0aW9uLmhvc3QpfSxzMGU9ITEsdTBlPXtpbnZhbGlkOmZ1bmN0aW9uKCl7cmV0dXJuIE9sKGUwZXx8KGUwZT1INyhbIlxuICAgIFRoZSBsaWNl'@;
put 'bnNlIGtleSBmb3IgSGFuZHNvbnRhYmxlIGlzIGludmFsaWQuIFxuICAgIElmIHlvdSBuZWVkIGFueSBoZWxwLCBjb250YWN0IHVzIGF0IHN1cHBvcnRAaGFuZHNvbnRhYmxlLmNvbS4iXSxbIlxuICAgIFRoZSBsaWNlbnNlIGtleSBmb3IgSGFuZHNvbnRhYmxlIGlzIGludmFsaWQuXFx4MjBc'@;
put 'biAgICBJZiB5b3UgbmVlZCBhbnkgaGVscCwgY29udGFjdCB1cyBhdCBzdXBwb3J0QGhhbmRzb250YWJsZS5jb20uIl0pKSl9LGV4cGlyZWQ6ZnVuY3Rpb24oYyl7dmFyIGE9Yy5rZXlWYWxpZGl0eURhdGUsZj1jLmhvdFZlcnNpb247cmV0dXJuIE9sKHQwZXx8KHQwZT1INyhbIlxuICAgIFRo'@;
put 'ZSBsaWNlbnNlIGtleSBmb3IgSGFuZHNvbnRhYmxlIGV4cGlyZWQgb24gIiwiLCBhbmQgaXMgbm90IHZhbGlkIGZvciB0aGUgaW5zdGFsbGVkIFxuICAgIHZlcnNpb24gIiwiLiBSZW5ldyB5b3VyIGxpY2Vuc2Uga2V5IGF0IGhhbmRzb250YWJsZS5jb20gb3IgZG93bmdyYWRlIHRvIGEgdmVy'@;
put 'c2lvbiByZWxlYXNlZCBwcmlvciBcbiAgICB0byAiLCIuIElmIHlvdSBuZWVkIGFueSBoZWxwLCBjb250YWN0IHVzIGF0IHNhbGVzQGhhbmRzb250YWJsZS5jb20uIl0sWyJcbiAgICBUaGUgbGljZW5zZSBrZXkgZm9yIEhhbmRzb250YWJsZSBleHBpcmVkIG9uICIsIiwgYW5kIGlzIG5vdCB2'@;
put 'YWxpZCBmb3IgdGhlIGluc3RhbGxlZFxceDIwXG4gICAgdmVyc2lvbiAiLCIuIFJlbmV3IHlvdXIgbGljZW5zZSBrZXkgYXQgaGFuZHNvbnRhYmxlLmNvbSBvciBkb3duZ3JhZGUgdG8gYSB2ZXJzaW9uIHJlbGVhc2VkIHByaW9yXFx4MjBcbiAgICB0byAiLCIuIElmIHlvdSBuZWVkIGFueSBo'@;
put 'ZWxwLCBjb250YWN0IHVzIGF0IHNhbGVzQGhhbmRzb250YWJsZS5jb20uIl0pKSxhLGYsYSl9LG1pc3Npbmc6ZnVuY3Rpb24oKXtyZXR1cm4gT2wobjBlfHwobjBlPUg3KFsiXG4gICAgVGhlIGxpY2Vuc2Uga2V5IGZvciBIYW5kc29udGFibGUgaXMgbWlzc2luZy4gVXNlIHlvdXIgcHVyY2hh'@;
put 'c2VkIGtleSB0byBhY3RpdmF0ZSB0aGUgcHJvZHVjdC4gXG4gICAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBhY3RpdmF0ZSBIYW5kc29udGFibGUgdG8gdXNlIGZvciBub24tY29tbWVyY2lhbCBwdXJwb3NlcyBieSBcbiAgICBwYXNzaW5nIHRoZSBrZXk6ICdub24tY29tbWVyY2lhbC1hbmQt'@;
put 'ZXZhbHVhdGlvbicuIElmIHlvdSBuZWVkIGFueSBoZWxwLCBjb250YWN0IFxuICAgIHVzIGF0IHN1cHBvcnRAaGFuZHNvbnRhYmxlLmNvbS4iXSxbIlxuICAgIFRoZSBsaWNlbnNlIGtleSBmb3IgSGFuZHNvbnRhYmxlIGlzIG1pc3NpbmcuIFVzZSB5b3VyIHB1cmNoYXNlZCBrZXkgdG8gYWN0'@;
put 'aXZhdGUgdGhlIHByb2R1Y3QuXFx4MjBcbiAgICBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGFjdGl2YXRlIEhhbmRzb250YWJsZSB0byB1c2UgZm9yIG5vbi1jb21tZXJjaWFsIHB1cnBvc2VzIGJ5XFx4MjBcbiAgICBwYXNzaW5nIHRoZSBrZXk6ICdub24tY29tbWVyY2lhbC1hbmQtZXZhbHVh'@;
put 'dGlvbicuIElmIHlvdSBuZWVkIGFueSBoZWxwLCBjb250YWN0XFx4MjBcbiAgICB1cyBhdCBzdXBwb3J0QGhhbmRzb250YWJsZS5jb20uIl0pKSl9LG5vbl9jb21tZXJjaWFsOmZ1bmN0aW9uKCl7cmV0dXJuIiJ9fSxjMGU9e2ludmFsaWQ6ZnVuY3Rpb24oKXtyZXR1cm4gT2wocjBlfHwocjBl'@;
put 'PUg3KFsnXG4gICAgVGhlIGxpY2Vuc2Uga2V5IGZvciBIYW5kc29udGFibGUgaXMgaW52YWxpZC4gXG4gICAgPGEgaHJlZj0iaHR0cHM6Ly9oYW5kc29udGFibGUuY29tL2RvY3MvdHV0b3JpYWwtbGljZW5zZS1rZXkuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPlJlYWQgbW9yZTwvYT4gb24gaG93'@;
put 'IHRvIFxuICAgIGluc3RhbGwgaXQgcHJvcGVybHkgb3IgY29udGFjdCB1cyBhdCA8YSBocmVmPSJtYWlsdG86c3VwcG9ydEBoYW5kc29udGFibGUuY29tIj5zdXBwb3J0QGhhbmRzb250YWJsZS5jb208L2E+LiddLFsnXG4gICAgVGhlIGxpY2Vuc2Uga2V5IGZvciBIYW5kc29udGFibGUgaXMg'@;
put 'aW52YWxpZC5cXHgyMFxuICAgIDxhIGhyZWY9Imh0dHBzOi8vaGFuZHNvbnRhYmxlLmNvbS9kb2NzL3R1dG9yaWFsLWxpY2Vuc2Uta2V5Lmh0bWwiIHRhcmdldD0iX2JsYW5rIj5SZWFkIG1vcmU8L2E+IG9uIGhvdyB0b1xceDIwXG4gICAgaW5zdGFsbCBpdCBwcm9wZXJseSBvciBjb250YWN0'@;
put 'IHVzIGF0IDxhIGhyZWY9Im1haWx0bzpzdXBwb3J0QGhhbmRzb250YWJsZS5jb20iPnN1cHBvcnRAaGFuZHNvbnRhYmxlLmNvbTwvYT4uJ10pKSl9LGV4cGlyZWQ6ZnVuY3Rpb24oYyl7dmFyIGE9Yy5rZXlWYWxpZGl0eURhdGUsZj1jLmhvdFZlcnNpb247cmV0dXJuIE9sKGkwZXx8KGkwZT1I'@;
put 'NyhbIlxuICAgIFRoZSBsaWNlbnNlIGtleSBmb3IgSGFuZHNvbnRhYmxlIGV4cGlyZWQgb24gIiwiLCBhbmQgaXMgbm90IHZhbGlkIGZvciB0aGUgaW5zdGFsbGVkIFxuICAgIHZlcnNpb24gIiwnLiA8YSBocmVmPSJodHRwczovL2hhbmRzb250YWJsZS5jb20vcHJpY2luZyIgdGFyZ2V0PSJf'@;
put 'YmxhbmsiPlJlbmV3PC9hPiB5b3VyIFxuICAgIGxpY2Vuc2Uga2V5IG9yIGRvd25ncmFkZSB0byBhIHZlcnNpb24gcmVsZWFzZWQgcHJpb3IgdG8gJywnLiBJZiB5b3UgbmVlZCBhbnkgXG4gICAgaGVscCwgY29udGFjdCB1cyBhdCA8YSBocmVmPSJtYWlsdG86c2FsZXNAaGFuZHNvbnRhYmxl'@;
put 'LmNvbSI+c2FsZXNAaGFuZHNvbnRhYmxlLmNvbTwvYT4uJ10sWyJcbiAgICBUaGUgbGljZW5zZSBrZXkgZm9yIEhhbmRzb250YWJsZSBleHBpcmVkIG9uICIsIiwgYW5kIGlzIG5vdCB2YWxpZCBmb3IgdGhlIGluc3RhbGxlZFxceDIwXG4gICAgdmVyc2lvbiAiLCcuIDxhIGhyZWY9Imh0dHBz'@;
put 'Oi8vaGFuZHNvbnRhYmxlLmNvbS9wcmljaW5nIiB0YXJnZXQ9Il9ibGFuayI+UmVuZXc8L2E+IHlvdXJcXHgyMFxuICAgIGxpY2Vuc2Uga2V5IG9yIGRvd25ncmFkZSB0byBhIHZlcnNpb24gcmVsZWFzZWQgcHJpb3IgdG8gJywnLiBJZiB5b3UgbmVlZCBhbnlcXHgyMFxuICAgIGhlbHAsIGNv'@;
put 'bnRhY3QgdXMgYXQgPGEgaHJlZj0ibWFpbHRvOnNhbGVzQGhhbmRzb250YWJsZS5jb20iPnNhbGVzQGhhbmRzb250YWJsZS5jb208L2E+LiddKSksYSxmLGEpfSxtaXNzaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIE9sKG8wZXx8KG8wZT1INyhbJ1xuICAgIFRoZSBsaWNlbnNlIGtleSBmb3IgSGFu'@;
put 'ZHNvbnRhYmxlIGlzIG1pc3NpbmcuIFVzZSB5b3VyIHB1cmNoYXNlZCBrZXkgdG8gYWN0aXZhdGUgdGhlIHByb2R1Y3QuIFxuICAgIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gYWN0aXZhdGUgSGFuZHNvbnRhYmxlIHRvIHVzZSBmb3Igbm9uLWNvbW1lcmNpYWwgcHVycG9zZXMgYnkgXG4gICAg'@;
put 'cGFzc2luZyB0aGUga2V5OiBcJ25vbi1jb21tZXJjaWFsLWFuZC1ldmFsdWF0aW9uXCcuIFxuICAgIDxhIGhyZWY9Imh0dHBzOi8vaGFuZHNvbnRhYmxlLmNvbS9kb2NzL3R1dG9yaWFsLWxpY2Vuc2Uta2V5Lmh0bWwiIHRhcmdldD0iX2JsYW5rIj5SZWFkIG1vcmU8L2E+IGFib3V0IGl0IGlu'@;
put 'IFxuICAgIHRoZSBkb2N1bWVudGF0aW9uIG9yIGNvbnRhY3QgdXMgYXQgPGEgaHJlZj0ibWFpbHRvOnN1cHBvcnRAaGFuZHNvbnRhYmxlLmNvbSI+c3VwcG9ydEBoYW5kc29udGFibGUuY29tPC9hPi4nXSxbJ1xuICAgIFRoZSBsaWNlbnNlIGtleSBmb3IgSGFuZHNvbnRhYmxlIGlzIG1pc3Np'@;
put 'bmcuIFVzZSB5b3VyIHB1cmNoYXNlZCBrZXkgdG8gYWN0aXZhdGUgdGhlIHByb2R1Y3QuXFx4MjBcbiAgICBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGFjdGl2YXRlIEhhbmRzb250YWJsZSB0byB1c2UgZm9yIG5vbi1jb21tZXJjaWFsIHB1cnBvc2VzIGJ5XFx4MjBcbiAgICBwYXNzaW5nIHRo'@;
put 'ZSBrZXk6IFwnbm9uLWNvbW1lcmNpYWwtYW5kLWV2YWx1YXRpb25cJy5cXHgyMFxuICAgIDxhIGhyZWY9Imh0dHBzOi8vaGFuZHNvbnRhYmxlLmNvbS9kb2NzL3R1dG9yaWFsLWxpY2Vuc2Uta2V5Lmh0bWwiIHRhcmdldD0iX2JsYW5rIj5SZWFkIG1vcmU8L2E+IGFib3V0IGl0IGluXFx4MjBc'@;
put 'biAgICB0aGUgZG9jdW1lbnRhdGlvbiBvciBjb250YWN0IHVzIGF0IDxhIGhyZWY9Im1haWx0bzpzdXBwb3J0QGhhbmRzb250YWJsZS5jb20iPnN1cHBvcnRAaGFuZHNvbnRhYmxlLmNvbTwvYT4uJ10pKSl9LG5vbl9jb21tZXJjaWFsOmZ1bmN0aW9uKCl7cmV0dXJuIiJ9fTtmdW5jdGlvbiBm'@;
put 'MGUobCxjKXt2YXIgaCxhPSF3dShsKSxmPSJzdHJpbmciPT10eXBlb2YgbCYmIm5vbi1jb21tZXJjaWFsLWFuZC1ldmFsdWF0aW9uIj09PWwudG9Mb3dlckNhc2UoKSxkPSIxMy4wLjAiLG09ImludmFsaWQiLF89ImludmFsaWQiLE89ZnVuY3Rpb24gbkdlKGwpe3ZhciBjPVtdW05TXSxhPWM7'@;
put 'aWYobFtOU10hPT1CUygiWiIpKXJldHVybiExO2Zvcih2YXIgZj0iIixkPSJCPEg0UCsiLnNwbGl0KCIiKSxoPUJTKGQuc2hpZnQoKSk7aDtoPUJTKGQuc2hpZnQoKXx8IkEiKSktLWg8IiJbTlNdP2F8PShsMGUoIiIuY29uY2F0KGwwZShWUyhmKSsoVlMoV0kobCxNYXRoLmFicyhoKSwyKSkr'@;
put 'W10pLnBhZFN0YXJ0KDIsIjAiKSkpKSU5N3x8Mik+PjE6Zj1XSShsLGgsaD8xPT09ZFtOU10/OTo4OjYpO3JldHVybiBhPT09Y30obD1wWShsfHwiIikpO2lmKGF8fGZ8fE8paWYoTyl7dmFyIFg9S28oIjIyLzA2LzIwMjMiLCJERC9NTS9ZWVlZIiksYWU9TWF0aC5mbG9vcihYLnRvRGF0ZSgp'@;
put 'LmdldFRpbWUoKS84NjRlNSkscGU9ZUdlKGwpO2g9S28oODY0ZTUqKHBlKzEpLCJ4IikuZm9ybWF0KCJNTU1NIERELCBZWVlZIiksYWU+cGU/KG09ImV4cGlyZWQiLF89ImV4cGlyZWQiKToobT0idmFsaWQiLF89InZhbGlkIil9ZWxzZSBmPyhtPSJub25fY29tbWVyY2lhbCIsXz0idmFsaWQi'@;
put 'KToobT0iaW52YWxpZCIsXz0iaW52YWxpZCIpO2Vsc2UgbT0ibWlzc2luZyIsXz0ibWlzc2luZyI7aWYodEdlKCkmJihtPSJ2YWxpZCIsXz0idmFsaWQiKSxzMGV8fCJ2YWxpZCI9PT1tfHwodTBlW21dKHtrZXlWYWxpZGl0eURhdGU6aCxob3RWZXJzaW9uOmR9KSYmY29uc29sZVsibm9uX2Nv'@;
put 'bW1lcmNpYWwiPT09bT8iaW5mbyI6Indhcm4iXSh1MGVbbV0oe2tleVZhbGlkaXR5RGF0ZTpoLGhvdFZlcnNpb246ZH0pKSxzMGU9ITApLCJ2YWxpZCIhPT1fJiZjLnBhcmVudE5vZGUmJmMwZVtfXSh7a2V5VmFsaWRpdHlEYXRlOmgsaG90VmVyc2lvbjpkfSkpe3ZhciBWZT1kb2N1bWVudC5j'@;
put 'cmVhdGVFbGVtZW50KCJkaXYiKTtWZS5jbGFzc05hbWU9ImhvdC1kaXNwbGF5LWxpY2Vuc2UtaW5mbyIsVmUuaW5uZXJIVE1MPWMwZVtfXSh7a2V5VmFsaWRpdHlEYXRlOmgsaG90VmVyc2lvbjpkfSksYy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShWZSxjLm5leHRTaWJsaW5nKX19ZnVuY3Rp'@;
put 'b24gQWMobCl7cmV0dXJuIGxbMF0udG9VcHBlckNhc2UoKStsLnN1YnN0cigxKX1mdW5jdGlvbiByR2UoKXtmb3IodmFyIGw9W10sYz1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGMpLGY9MDtmPGM7ZisrKWFbZl09YXJndW1lbnRzW2ZdO2Zvcih2YXIgZD1hLmxlbmd0aDtkOyl7dmFy'@;
put 'IGg9TXMoYVtkLT0xXSkudG9Mb3dlckNhc2UoKTstMT09PWwuaW5kZXhPZihoKSYmbC5wdXNoKGgpfXJldHVybiAxPT09bC5sZW5ndGh9ZnVuY3Rpb24gbVkoKXtmdW5jdGlvbiBsKCl7cmV0dXJuIE1hdGguZmxvb3IoNjU1MzYqKDErTWF0aC5yYW5kb20oKSkpLnRvU3RyaW5nKDE2KS5zdWJz'@;
put 'dHJpbmcoMSl9cmV0dXJuIGwoKStsKCkrbCgpK2woKX1mdW5jdGlvbiBnWShsKXtyZXR1cm4vXihbMC05XVswLTldPyUkKXwoXjEwMCUkKS8udGVzdChsKX1mdW5jdGlvbiB2WShsKXt2YXIgYz1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06'@;
put 'e307cmV0dXJuIiIuY29uY2F0KGwpLnJlcGxhY2UoLyg/OlxcKT9cWyhbXltcXV0rKV0vZyxmdW5jdGlvbihhLGYpe3JldHVybiJcXCI9PT1hLmNoYXJBdCgwKT9hLnN1YnN0cigxLGEubGVuZ3RoLTEpOnZvaWQgMD09PWNbZl0/IiI6Y1tmXX0pfWZ1bmN0aW9uIHlZKGwpe3JldHVybiBHSSgi'@;
put 'Ii5jb25jYXQobCkse0FMTE9XRURfVEFHUzpbXX0pfWZ1bmN0aW9uIEdJKGwsYyl7cmV0dXJuIFFXZS5zYW5pdGl6ZShsLGMpfWZ1bmN0aW9uIGQwZShsKXtyZXR1cm4gZnVuY3Rpb24gbEdlKGwpe2lmKEFycmF5LmlzQXJyYXkobCkpcmV0dXJuIGJZKGwpfShsKXx8ZnVuY3Rpb24gYUdlKGwp'@;
put 'e2lmKHR5cGVvZiBTeW1ib2w8InUiJiZudWxsIT1sW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWxbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbShsKX0obCl8fGZ1bmN0aW9uIG9HZShsLGMpe2lmKGwpe2lmKCJzdHJpbmciPT10eXBlb2YgbClyZXR1cm4gYlkobCxjKTt2YXIgYT1P'@;
put 'YmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobCkuc2xpY2UoOCwtMSk7aWYoIk9iamVjdCI9PT1hJiZsLmNvbnN0cnVjdG9yJiYoYT1sLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09YXx8IlNldCI9PT1hKXJldHVybiBBcnJheS5mcm9tKGwpO2lmKCJBcmd1bWVudHMiPT09YXx8L14o'@;
put 'PzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QoYSkpcmV0dXJuIGJZKGwsYyl9fShsKXx8ZnVuY3Rpb24gaUdlKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0'@;
put 'byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gYlkobCxjKXsobnVsbD09Y3x8Yz5sLmxlbmd0aCkmJihjPWwubGVuZ3RoKTtmb3IodmFyIGE9MCxmPW5ldyBBcnJheShjKTthPGM7YSsr'@;
put 'KWZbYV09bFthXTtyZXR1cm4gZn1mdW5jdGlvbiBoMGUobCl7Zm9yKHZhciBjPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowLGE9LTEsZj1udWxsLGQ9bDtudWxsIT09ZDspe2lmKGE9PT1jKXtmPWQ7YnJlYWt9ZC5ob3N0JiZkLm5vZGVU'@;
put 'eXBlPT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFP2Q9ZC5ob3N0OihhKz0xLGQ9ZC5wYXJlbnROb2RlKX1yZXR1cm4gZn1mdW5jdGlvbiBwMGUobCl7cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihsLnBhcmVudCkmJmwuZnJhbWVFbGVtZW50fWZ1bmN0aW9uIGpTKGwpe3JldHVy'@;
put 'biBwMGUobCkmJmwucGFyZW50fWZ1bmN0aW9uIHNHZShsKXtyZXR1cm4hIU9iamVjdC5nZXRQcm90b3R5cGVPZihsLnBhcmVudCl9ZnVuY3Rpb24geDQobCl7Zm9yKHZhciBjPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXSxhPWFyZ3Vt'@;
put 'ZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwLGY9Tm9kZSxkPWYuRUxFTUVOVF9OT0RFLGg9Zi5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFLG09bDtudWxsIT1tJiZtIT09YTspe3ZhciBPPW0ubm9kZVR5cGU7aWYoTz09PWQmJihjLmluY2x1ZGVzKG0ubm9kZU5hbWUpfHxjLmluY2x1'@;
put 'ZGVzKG0pKSlyZXR1cm4gbTt2YXIgcGU9bS5ob3N0O209cGUmJk89PT1oP3BlOm0ucGFyZW50Tm9kZX1yZXR1cm4gbnVsbH1mdW5jdGlvbiB6UyhsLGMsYSl7Zm9yKHZhciBmPVtdLGQ9bDtkJiYoZD14NChkLGMsYSkpJiYoIWF8fGEuY29udGFpbnMoZCkpOylmLnB1c2goZCksZD1kLmhvc3Qm'@;
put 'JmQubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU/ZC5ob3N0OmQucGFyZW50Tm9kZTt2YXIgaD1mLmxlbmd0aDtyZXR1cm4gaD9mW2gtMV06bnVsbH1mdW5jdGlvbiBBNChsLGMpe3ZhciBhPWwucGFyZW50Tm9kZSxmPVtdO2Zvcigic3RyaW5nIj09dHlwZW9mIGM/Zj1B'@;
put 'cnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChsLmRlZmF1bHRWaWV3P2wucXVlcnlTZWxlY3RvckFsbChjKTpsLm93bmVyRG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChjKSwwKTpmLnB1c2goYyk7bnVsbCE9PWE7KXtpZihmLmluZGV4T2YoYSk+LTEpcmV0dXJuITA7YT1hLnBhcmVudE5vZGV9'@;
put 'cmV0dXJuITF9ZnVuY3Rpb24gbTBlKGwpe3ZhciBjPTAsYT1sO2lmKGEucHJldmlvdXNTaWJsaW5nKWZvcig7YT1hLnByZXZpb3VzU2libGluZzspYys9MTtyZXR1cm4gY31mdW5jdGlvbiBUNChsLGMsYSl7dmFyIGY9YS5wYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5odF9jbG9uZV8i'@;
put 'LmNvbmNhdChsKSk7cmV0dXJuIGY/Zi5jb250YWlucyhjKTpudWxsfWZ1bmN0aW9uICRJKGwpe3JldHVybiBsJiZsLmxlbmd0aD9sLmZpbHRlcihmdW5jdGlvbihjKXtyZXR1cm4hIWN9KTpbXX1pZihGY2UoKSl7dmFyIGcwZT1mdW5jdGlvbihjKXt2YXIgYT1jLmNyZWF0ZUVsZW1lbnQoImRp'@;
put 'diIpO3JldHVybiBhLmNsYXNzTGlzdC5hZGQoInRlc3QiLCJ0ZXN0MiIpLGEuY2xhc3NMaXN0LmNvbnRhaW5zKCJ0ZXN0MiIpfTtfWT1mdW5jdGlvbihjLGEpe3JldHVybiB2b2lkIDAhPT1jLmNsYXNzTGlzdCYmInN0cmluZyI9PXR5cGVvZiBhJiYiIiE9PWEmJmMuY2xhc3NMaXN0LmNvbnRh'@;
put 'aW5zKGEpfSx3WT1mdW5jdGlvbihjLGEpe3ZhciBmPWMub3duZXJEb2N1bWVudCxkPWE7aWYoInN0cmluZyI9PXR5cGVvZiBkJiYoZD1kLnNwbGl0KCIgIikpLChkPSRJKGQpKS5sZW5ndGg+MClpZihnMGUoZikpe3ZhciBoOyhoPWMuY2xhc3NMaXN0KS5hZGQuYXBwbHkoaCxkMGUoZCkpfWVs'@;
put 'c2UgZm9yKHZhciBtPTA7ZFttXTspYy5jbGFzc0xpc3QuYWRkKGRbbV0pLG0rPTF9LENZPWZ1bmN0aW9uKGMsYSl7dmFyIGY9Yy5vd25lckRvY3VtZW50LGQ9YTtpZigic3RyaW5nIj09dHlwZW9mIGQmJihkPWQuc3BsaXQoIiAiKSksKGQ9JEkoZCkpLmxlbmd0aD4wKWlmKGcwZShmKSl7dmFy'@;
put 'IGg7KGg9Yy5jbGFzc0xpc3QpLnJlbW92ZS5hcHBseShoLGQwZShkKSl9ZWxzZSBmb3IodmFyIG09MDtkW21dOyljLmNsYXNzTGlzdC5yZW1vdmUoZFttXSksbSs9MX19ZWxzZXt2YXIgU1k9ZnVuY3Rpb24oYyl7cmV0dXJuIG5ldyBSZWdFeHAoIihcXHN8XikiLmNvbmNhdChjLCIoXFxzfCQp'@;
put 'IikpfTtfWT1mdW5jdGlvbihjLGEpe3JldHVybiB2b2lkIDAhPT1jLmNsYXNzTmFtZSYmU1koYSkudGVzdChjLmNsYXNzTmFtZSl9LHdZPWZ1bmN0aW9uKGMsYSl7dmFyIGY9Yy5jbGFzc05hbWUsZD1hO2lmKCJzdHJpbmciPT10eXBlb2YgZCYmKGQ9ZC5zcGxpdCgiICIpKSxkPSRJKGQpLCIi'@;
put 'PT09ZilmPWQuam9pbigiICIpO2Vsc2UgZm9yKHZhciBoPTA7aDxkLmxlbmd0aDtoKyspZFtoXSYmIVNZKGRbaF0pLnRlc3QoZikmJihmKz0iICIuY29uY2F0KGRbaF0pKTtjLmNsYXNzTmFtZT1mfSxDWT1mdW5jdGlvbihjLGEpe3ZhciBmPTAsZD1jLmNsYXNzTmFtZSxoPWE7Zm9yKCJzdHJp'@;
put 'bmciPT10eXBlb2YgaCYmKGg9aC5zcGxpdCgiICIpKSxoPSRJKGgpO2hbZl07KWQ9ZC5yZXBsYWNlKFNZKGhbZl0pLCIgIikudHJpbSgpLGYrPTE7Yy5jbGFzc05hbWUhPT1kJiYoYy5jbGFzc05hbWU9ZCl9fWZ1bmN0aW9uIFlvKGwsYyl7cmV0dXJuIF9ZKGwsYyl9ZnVuY3Rpb24gZ2kobCxj'@;
put 'KXt3WShsLGMpfWZ1bmN0aW9uIEpvKGwsYyl7Q1kobCxjKX1mdW5jdGlvbiBNWShsKXtpZigzPT09bC5ub2RlVHlwZSlsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobCk7ZWxzZSBpZihbIlRBQkxFIiwiVEhFQUQiLCJUQk9EWSIsIlRGT09UIiwiVFIiXS5pbmRleE9mKGwubm9kZU5hbWUpPi0x'@;
put 'KWZvcih2YXIgYz1sLmNoaWxkTm9kZXMsYT1jLmxlbmd0aC0xO2E+PTA7YS0tKU1ZKGNbYV0pfWZ1bmN0aW9uIEZkKGwpe2Zvcih2YXIgYztjPWwubGFzdENoaWxkOylsLnJlbW92ZUNoaWxkKGMpfXZhciB4WSx2MGU9Lyg8KC4qKT58JiguKik7KS87ZnVuY3Rpb24gdjUobCxjKXt2YXIgYT0h'@;
put 'KGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO3YwZS50ZXN0KGMpP2wuaW5uZXJIVE1MPWE/R0koYyk6YzpPNChsLGMpfWZ1bmN0aW9uIE80KGwsYyl7dmFyIGE9bC5maXJzdENoaWxkO2EmJjM9PT1hLm5vZGVUeXBlJiZudWxsPT09YS5u'@;
put 'ZXh0U2libGluZz9IY2U/YS50ZXh0Q29udGVudD1jOmEuZGF0YT1jOihGZChsKSxsLmFwcGVuZENoaWxkKGwub3duZXJEb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjKSkpfWZ1bmN0aW9uIE43KGwpe2Zvcih2YXIgYz1sLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGE9bDthIT09Yzsp'@;
put 'e2lmKG51bGw9PT1hKXJldHVybiExO2lmKGEubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUpe2lmKGEuaG9zdCl7aWYoYS5ob3N0LmltcGwpcmV0dXJuIE43KGEuaG9zdC5pbXBsKTtpZihhLmhvc3QpcmV0dXJuIE43KGEuaG9zdCk7dGhyb3cgbmV3IEVycm9yKCJMb3N0'@;
put 'IGluIFdlYiBDb21wb25lbnRzIHdvcmxkIil9cmV0dXJuITF9aWYoYS5zdHlsZSYmIm5vbmUiPT09YS5zdHlsZS5kaXNwbGF5KXJldHVybiExO2E9YS5wYXJlbnROb2RlfXJldHVybiEwfWZ1bmN0aW9uIGl1KGwpe3ZhciBoLG0sXyxPLGM9bC5vd25lckRvY3VtZW50LGE9Yy5kZWZhdWx0Vmll'@;
put 'dyxmPWMuZG9jdW1lbnRFbGVtZW50LGQ9bDtpZihpWSgpJiZkLmZpcnN0Q2hpbGQmJiJDQVBUSU9OIj09PWQuZmlyc3RDaGlsZC5ub2RlTmFtZSlyZXR1cm57dG9wOihPPWQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLnRvcCsoYS5wYWdlWU9mZnNldHx8Zi5zY3JvbGxUb3ApLShmLmNsaWVu'@;
put 'dFRvcHx8MCksbGVmdDpPLmxlZnQrKGEucGFnZVhPZmZzZXR8fGYuc2Nyb2xsTGVmdCktKGYuY2xpZW50TGVmdHx8MCl9O2ZvcihoPWQub2Zmc2V0TGVmdCxtPWQub2Zmc2V0VG9wLF89ZDsoZD1kLm9mZnNldFBhcmVudCkmJmQhPT1jLmJvZHk7KWgrPWQub2Zmc2V0TGVmdCxtKz1kLm9mZnNl'@;
put 'dFRvcCxfPWQ7cmV0dXJuIF8mJiJmaXhlZCI9PT1fLnN0eWxlLnBvc2l0aW9uJiYoaCs9YS5wYWdlWE9mZnNldHx8Zi5zY3JvbGxMZWZ0LG0rPWEucGFnZVlPZmZzZXR8fGYuc2Nyb2xsVG9wKSx7bGVmdDpoLHRvcDptfX1mdW5jdGlvbiBWNygpe3ZhciBsPWFyZ3VtZW50cy5sZW5ndGg+MCYm'@;
put 'dm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp3aW5kb3csYz1sLnNjcm9sbFk7cmV0dXJuIHZvaWQgMD09PWMmJihjPWwuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCksY31mdW5jdGlvbiB5NSgpe3ZhciBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09'@;
put 'YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp3aW5kb3csYz1sLnNjcm9sbFg7cmV0dXJuIHZvaWQgMD09PWMmJihjPWwuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQpLGN9ZnVuY3Rpb24gVVMobCl7dmFyIGM9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVu'@;
put 'dHNbMV0/YXJndW1lbnRzWzFdOndpbmRvdztyZXR1cm4gbD09PWM/VjcoYyk6bC5zY3JvbGxUb3B9ZnVuY3Rpb24gS0kobCl7dmFyIGM9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOndpbmRvdztyZXR1cm4gbD09PWM/eTUoYyk6bC5zY3Jv'@;
put 'bGxMZWZ0fWZ1bmN0aW9uIFpTKGwpe3ZhciBjPWwub3duZXJEb2N1bWVudCxhPWM/Yy5kZWZhdWx0Vmlldzp2b2lkIDA7Y3x8KGE9KGM9bC5kb2N1bWVudD9sLmRvY3VtZW50OmwpLmRlZmF1bHRWaWV3KTtmb3IodmFyIGY9WyJhdXRvIiwic2Nyb2xsIl0sZD1OY2UoKSxoPWwucGFyZW50Tm9k'@;
put 'ZTtoJiZoLnN0eWxlJiZjLmJvZHkhPT1oOyl7dmFyIG09aC5zdHlsZSxfPW0ub3ZlcmZsb3csTz1tLm92ZXJmbG93WCxYPW0ub3ZlcmZsb3dZO2lmKFtfLE8sWF0uaW5jbHVkZXMoInNjcm9sbCIpKXJldHVybiBoO2lmKGQpe3ZhciBhZT1hLmdldENvbXB1dGVkU3R5bGUoaCk7aWYoTz1hZS5v'@;
put 'dmVyZmxvd1gsWD1hZS5vdmVyZmxvd1ksZi5pbmNsdWRlcyhfPWFlLm92ZXJmbG93KXx8Zi5pbmNsdWRlcyhPKXx8Zi5pbmNsdWRlcyhYKSlyZXR1cm4gaH1pZihoLmNsaWVudEhlaWdodDw9aC5zY3JvbGxIZWlnaHQrMSYmKGYuaW5jbHVkZXMoWCl8fGYuaW5jbHVkZXMoXykpfHxoLmNsaWVu'@;
put 'dFdpZHRoPD1oLnNjcm9sbFdpZHRoKzEmJihmLmluY2x1ZGVzKE8pfHxmLmluY2x1ZGVzKF8pKSlyZXR1cm4gaDtoPWgucGFyZW50Tm9kZX1yZXR1cm4gYX1mdW5jdGlvbiBiNShsKXtmb3IodmFyIGM9bC5vd25lckRvY3VtZW50LGE9Yy5kZWZhdWx0VmlldyxmPWwucGFyZW50Tm9kZTtmJiZm'@;
put 'LnN0eWxlJiZjLmJvZHkhPT1mOyl7aWYoInZpc2libGUiIT09Zi5zdHlsZS5vdmVyZmxvdyYmIiIhPT1mLnN0eWxlLm92ZXJmbG93KXJldHVybiBmO3ZhciBkPUQ0KGYsYSksaD1bInNjcm9sbCIsImhpZGRlbiIsImF1dG8iXSxtPWQuZ2V0UHJvcGVydHlWYWx1ZSgib3ZlcmZsb3ciKSxfPWQu'@;
put 'Z2V0UHJvcGVydHlWYWx1ZSgib3ZlcmZsb3cteSIpLE89ZC5nZXRQcm9wZXJ0eVZhbHVlKCJvdmVyZmxvdy14Iik7aWYoaC5pbmNsdWRlcyhtKXx8aC5pbmNsdWRlcyhfKXx8aC5pbmNsdWRlcyhPKSlyZXR1cm4gZjtmPWYucGFyZW50Tm9kZX1yZXR1cm4gYX1mdW5jdGlvbiBCNyhsLGMpe3Zh'@;
put 'ciBhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp3aW5kb3c7aWYobCl7aWYobD09PWEpcmV0dXJuIndpZHRoIj09PWM/IiIuY29uY2F0KGEuaW5uZXJXaWR0aCwicHgiKToiaGVpZ2h0Ij09PWM/IiIuY29uY2F0KGEuaW5uZXJIZWlnaHQs'@;
put 'InB4Iik6dm9pZCAwO3ZhciBmPWwuc3R5bGVbY107aWYoIiIhPT1mJiZ2b2lkIDAhPT1mKXJldHVybiBmO3ZhciBkPUQ0KGwsYSk7cmV0dXJuIiIhPT1kW2NdJiZ2b2lkIDAhPT1kW2NdP2RbY106dm9pZCAwfX1mdW5jdGlvbiB1R2UobCxjKXt2YXIgYT1jLnNlbGVjdG9yVGV4dCxmPSExO3Jl'@;
put 'dHVybiBjLnR5cGU9PT1DU1NSdWxlLlNUWUxFX1JVTEUmJmEmJihsLm1zTWF0Y2hlc1NlbGVjdG9yP2Y9bC5tc01hdGNoZXNTZWxlY3RvcihhKTpsLm1hdGNoZXMmJihmPWwubWF0Y2hlcyhhKSkpLGZ9ZnVuY3Rpb24gRDQobCl7dmFyIGM9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1h'@;
put 'cmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOndpbmRvdztyZXR1cm4gbC5jdXJyZW50U3R5bGV8fGMuZ2V0Q29tcHV0ZWRTdHlsZShsKX1mdW5jdGlvbiBTbChsKXtyZXR1cm4gbC5vZmZzZXRXaWR0aH1mdW5jdGlvbiBjcyhsKXtyZXR1cm4gaVkoKSYmbC5maXJzdENoaWxkJiYiQ0FQVElPTiI9'@;
put 'PT1sLmZpcnN0Q2hpbGQubm9kZU5hbWU/bC5vZmZzZXRIZWlnaHQrbC5maXJzdENoaWxkLm9mZnNldEhlaWdodDpsLm9mZnNldEhlaWdodH1mdW5jdGlvbiBkMyhsKXtyZXR1cm4gbC5jbGllbnRIZWlnaHR8fGwuaW5uZXJIZWlnaHR9ZnVuY3Rpb24gWVMobCl7cmV0dXJuIGwuY2xpZW50V2lk'@;
put 'dGh8fGwuaW5uZXJXaWR0aH1mdW5jdGlvbiBjR2UobCxjLGEpe2wuYWRkRXZlbnRMaXN0ZW5lcihjLGEsITEpfWZ1bmN0aW9uIGZHZShsLGMsYSl7bC5yZW1vdmVFdmVudExpc3RlbmVyKGMsYSwhMSl9ZnVuY3Rpb24ga1kobCl7dmFyIGM9bC5vd25lckRvY3VtZW50O2lmKGwuc2VsZWN0aW9u'@;
put 'U3RhcnQpcmV0dXJuIGwuc2VsZWN0aW9uU3RhcnQ7aWYoYy5zZWxlY3Rpb24pe2wuZm9jdXMoKTt2YXIgYT1jLnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpO2lmKG51bGw9PT1hKXJldHVybiAwO3ZhciBmPWwuY3JlYXRlVGV4dFJhbmdlKCksZD1mLmR1cGxpY2F0ZSgpO3JldHVybiBmLm1vdmVU'@;
put 'b0Jvb2ttYXJrKGEuZ2V0Qm9va21hcmsoKSksZC5zZXRFbmRQb2ludCgiRW5kVG9TdGFydCIsZiksZC50ZXh0Lmxlbmd0aH1yZXR1cm4gMH1mdW5jdGlvbiB5MGUobCl7dmFyIGM9bC5vd25lckRvY3VtZW50O2lmKGwuc2VsZWN0aW9uRW5kKXJldHVybiBsLnNlbGVjdGlvbkVuZDtpZihjLnNl'@;
put 'bGVjdGlvbil7dmFyIGE9Yy5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTtyZXR1cm4gbnVsbD09PWE/MDpsLmNyZWF0ZVRleHRSYW5nZSgpLnRleHQuaW5kZXhPZihhLnRleHQpK2EudGV4dC5sZW5ndGh9cmV0dXJuIDB9ZnVuY3Rpb24gYjBlKCl7dmFyIGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2'@;
put 'b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOndpbmRvdyxjPWwuZG9jdW1lbnQsYT0iIjtyZXR1cm4gbC5nZXRTZWxlY3Rpb24/YT1sLmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCk6Yy5zZWxlY3Rpb24mJiJDb250cm9sIiE9PWMuc2VsZWN0aW9uLnR5cGUmJihhPWMuc2VsZWN0'@;
put 'aW9uLmNyZWF0ZVJhbmdlKCkudGV4dCksYX1mdW5jdGlvbiBFWSgpe3ZhciBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp3aW5kb3csYz1sLmRvY3VtZW50O2wuZ2V0U2VsZWN0aW9uP2wuZ2V0U2VsZWN0aW9uKCkuZW1wdHk/bC5nZXRT'@;
put 'ZWxlY3Rpb24oKS5lbXB0eSgpOmwuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzJiZsLmdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpOmMuc2VsZWN0aW9uJiZjLnNlbGVjdGlvbi5lbXB0eSgpfWZ1bmN0aW9uIFdTKGwsYyxhKXtpZih2b2lkIDA9PT1hJiYoYT1jKSxsLnNl'@;
put 'dFNlbGVjdGlvblJhbmdlKXtsLmZvY3VzKCk7dHJ5e2wuc2V0U2VsZWN0aW9uUmFuZ2UoYyxhKX1jYXRjaHt2YXIgZj1sLnBhcmVudE5vZGUsZD1mLnN0eWxlLmRpc3BsYXk7Zi5zdHlsZS5kaXNwbGF5PSJibG9jayIsbC5zZXRTZWxlY3Rpb25SYW5nZShjLGEpLGYuc3R5bGUuZGlzcGxheT1k'@;
put 'fX19ZnVuY3Rpb24gTnUoKXt2YXIgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06ZG9jdW1lbnQ7cmV0dXJuIHZvaWQgMD09PXhZJiYoeFk9ZnVuY3Rpb24gZEdlKCl7dmFyIGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1'@;
put 'bWVudHNbMF0/YXJndW1lbnRzWzBdOmRvY3VtZW50LGM9bC5jcmVhdGVFbGVtZW50KCJkaXYiKTtjLnN0eWxlLmhlaWdodD0iMjAwcHgiLGMuc3R5bGUud2lkdGg9IjEwMCUiO3ZhciBhPWwuY3JlYXRlRWxlbWVudCgiZGl2Iik7YS5zdHlsZS5ib3hTaXppbmc9ImNvbnRlbnQtYm94IixhLnN0'@;
put 'eWxlLmhlaWdodD0iMTUwcHgiLGEuc3R5bGUubGVmdD0iMHB4IixhLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iLGEuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixhLnN0eWxlLnRvcD0iMHB4IixhLnN0eWxlLndpZHRoPSIyMDBweCIsYS5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iLGEuYXBw'@;
put 'ZW5kQ2hpbGQoYyksKGwuYm9keXx8bC5kb2N1bWVudEVsZW1lbnQpLmFwcGVuZENoaWxkKGEpO3ZhciBmPWMub2Zmc2V0V2lkdGg7YS5zdHlsZS5vdmVyZmxvdz0ic2Nyb2xsIjt2YXIgZD1jLm9mZnNldFdpZHRoO3JldHVybiBmPT09ZCYmKGQ9YS5jbGllbnRXaWR0aCksKGwuYm9keXx8bC5k'@;
put 'b2N1bWVudEVsZW1lbnQpLnJlbW92ZUNoaWxkKGEpLGYtZH0obCkpLHhZfWZ1bmN0aW9uIF8wZShsKXtyZXR1cm4gbC5vZmZzZXRXaWR0aCE9PWwuY2xpZW50V2lkdGh9ZnVuY3Rpb24gdzBlKGwpe3JldHVybiBsLm9mZnNldEhlaWdodCE9PWwuY2xpZW50SGVpZ2h0fWZ1bmN0aW9uIHFJKGws'@;
put 'YyxhKXtRY2UoKT8obC5zdHlsZS50b3A9YSxsLnN0eWxlLmxlZnQ9Yyk6cWNlKCk/bC5zdHlsZVsiLXdlYmtpdC10cmFuc2Zvcm0iXT0idHJhbnNsYXRlM2QoIi5jb25jYXQoYywiLCIpLmNvbmNhdChhLCIsMCkiKTpsLnN0eWxlLnRyYW5zZm9ybT0idHJhbnNsYXRlM2QoIi5jb25jYXQoYywi'@;
put 'LCIpLmNvbmNhdChhLCIsMCkiKX1mdW5jdGlvbiBoR2UobCl7dmFyIGM7cmV0dXJuIGwuc3R5bGUudHJhbnNmb3JtJiYiIiE9PShjPWwuc3R5bGUudHJhbnNmb3JtKT9bInRyYW5zZm9ybSIsY106bC5zdHlsZVsiLXdlYmtpdC10cmFuc2Zvcm0iXSYmIiIhPT0oYz1sLnN0eWxlWyItd2Via2l0'@;
put 'LXRyYW5zZm9ybSJdKT9bIi13ZWJraXQtdHJhbnNmb3JtIixjXTotMX1mdW5jdGlvbiBHUyhsKXtsLnN0eWxlLnRyYW5zZm9ybSYmIiIhPT1sLnN0eWxlLnRyYW5zZm9ybT9sLnN0eWxlLnRyYW5zZm9ybT0iIjpsLnN0eWxlWyItd2Via2l0LXRyYW5zZm9ybSJdJiYiIiE9PWwuc3R5bGVbIi13'@;
put 'ZWJraXQtdHJhbnNmb3JtIl0mJihsLnN0eWxlWyItd2Via2l0LXRyYW5zZm9ybSJdPSIiKX1mdW5jdGlvbiAkUyhsKXtyZXR1cm4gbCYmKFsiSU5QVVQiLCJTRUxFQ1QiLCJURVhUQVJFQSJdLmluZGV4T2YobC5ub2RlTmFtZSk+LTF8fCJ0cnVlIj09PWwuY29udGVudEVkaXRhYmxlKX1mdW5j'@;
put 'dGlvbiBYSShsKXtyZXR1cm4gJFMobCkmJiExPT09bC5oYXNBdHRyaWJ1dGUoImRhdGEtaG90LWlucHV0Iil9ZnVuY3Rpb24gQzBlKGwpe1hJKGwub3duZXJEb2N1bWVudC5hY3RpdmVFbGVtZW50KXx8bC5zZWxlY3QoKX1mdW5jdGlvbiBBWShsKXtyZXR1cm4hbC5wYXJlbnROb2RlfWZ1bmN0'@;
put 'aW9uIFMwZShsLGMpe25ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihmdW5jdGlvbihmLGQpe2YuZm9yRWFjaChmdW5jdGlvbihoKXtoLmlzSW50ZXJzZWN0aW5nJiZudWxsIT09bC5vZmZzZXRQYXJlbnQmJihjKCksZC51bm9ic2VydmUobCkpfSl9LHtyb290Omwub3duZXJEb2N1bWVudC5ib2R5'@;
put 'fSkub2JzZXJ2ZShsKX1mdW5jdGlvbiBQbChsKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgbH1mdW5jdGlvbiBNMGUobCl7dmFyIGM9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjIwMCxhPTAsZj17bGFzdENhbGxUaHJvdHRsZWQ6ITB9'@;
put 'LGQ9bnVsbDtyZXR1cm4gZnVuY3Rpb24gaCgpe2Zvcih2YXIgbT10aGlzLF89YXJndW1lbnRzLmxlbmd0aCxPPW5ldyBBcnJheShfKSxYPTA7WDxfO1grKylPW1hdPWFyZ3VtZW50c1tYXTt2YXIgYWU9RGF0ZS5ub3coKSxwZT0hMTtmLmxhc3RDYWxsVGhyb3R0bGVkPSEwLGF8fChhPWFlLHBl'@;
put 'PSEwKTt2YXIgYmU9Yy0oYWUtYSk7cmV0dXJuIHBlPyhmLmxhc3RDYWxsVGhyb3R0bGVkPSExLGwuYXBwbHkodGhpcyxPKSk6KGQmJmNsZWFyVGltZW91dChkKSxkPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtmLmxhc3RDYWxsVGhyb3R0bGVkPSExLGwuYXBwbHkobSxPKSxhPTAsZD12b2lkIDB9'@;
put 'LGJlKSksZn19ZnVuY3Rpb24gcEdlKGwpe3ZhciBhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToxMCxmPU0wZShsLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToyMDApLGQ9YTtmdW5j'@;
put 'dGlvbiBtKCl7Zm9yKHZhciBfPWFyZ3VtZW50cy5sZW5ndGgsTz1uZXcgQXJyYXkoXyksWD0wO1g8XztYKyspT1tYXT1hcmd1bWVudHNbWF07cmV0dXJuIGQ/KGQtPTEsbC5hcHBseSh0aGlzLE8pKTpmLmFwcGx5KHRoaXMsTyl9cmV0dXJuIG0uY2xlYXJIaXRzPWZ1bmN0aW9uIGgoKXtkPWF9'@;
put 'LG19ZnVuY3Rpb24gVFkobCl7dmFyIGYsYz1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MjAwLGE9bnVsbDtyZXR1cm4gZnVuY3Rpb24gZCgpe2Zvcih2YXIgaD10aGlzLG09YXJndW1lbnRzLmxlbmd0aCxfPW5ldyBBcnJheShtKSxPPTA7'@;
put 'TzxtO08rKylfW09dPWFyZ3VtZW50c1tPXTtyZXR1cm4gYSYmY2xlYXJUaW1lb3V0KGEpLGE9c2V0VGltZW91dChmdW5jdGlvbigpe2Y9bC5hcHBseShoLF8pfSxjKSxmfX1mdW5jdGlvbiBtR2UoKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxjPW5ldyBBcnJheShsKSxhPTA7YTxsO2Er'@;
put 'KyljW2FdPWFyZ3VtZW50c1thXTt2YXIgZj1jWzBdLGQ9Yy5zbGljZSgxKTtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIG09YXJndW1lbnRzLmxlbmd0aCxfPW5ldyBBcnJheShtKSxPPTA7TzxtO08rKylfW09dPWFyZ3VtZW50c1tPXTtyZXR1cm4gUHMoZCxmdW5jdGlvbihYLGFlKXtyZXR1'@;
put 'cm4gYWUoWCl9LGYuYXBwbHkodGhpcyxfKSl9fWZ1bmN0aW9uIE9ZKGwpe2Zvcih2YXIgYz1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGM+MT9jLTE6MCksZj0xO2Y8YztmKyspYVtmLTFdPWFyZ3VtZW50c1tmXTtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxl'@;
put 'bmd0aCxtPW5ldyBBcnJheShoKSxfPTA7XzxoO18rKyltW19dPWFyZ3VtZW50c1tfXTtyZXR1cm4gbC5hcHBseSh0aGlzLGEuY29uY2F0KG0pKX19ZnVuY3Rpb24gazBlKGwpe3ZhciBjPWwubGVuZ3RoO3JldHVybiBmdW5jdGlvbiBhKGYpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgaD1h'@;
put 'cmd1bWVudHMubGVuZ3RoLG09bmV3IEFycmF5KGgpLF89MDtfPGg7XysrKW1bX109YXJndW1lbnRzW19dO3ZhciBPPWYuY29uY2F0KG0pO3JldHVybiBPLmxlbmd0aD49Yz9sLmFwcGx5KHRoaXMsTyk6YShPKX19KFtdKX1mdW5jdGlvbiBnR2UobCl7dmFyIGM9bC5sZW5ndGg7cmV0dXJuIGZ1'@;
put 'bmN0aW9uIGEoZil7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsbT1uZXcgQXJyYXkoaCksXz0wO188aDtfKyspbVtfXT1hcmd1bWVudHNbX107dmFyIE89Zi5jb25jYXQobS5yZXZlcnNlKCkpO3JldHVybiBPLmxlbmd0aD49Yz9sLmFwcGx5KHRoaXMsTyk6'@;
put 'YShPKX19KFtdKX1mdW5jdGlvbiBKSShsLGMsYSxmLGQsaCxtLF8pe3JldHVybiBpbyhfKT9sLmNhbGwoYyxhLGYsZCxoLG0sXyk6aW8obSk/bC5jYWxsKGMsYSxmLGQsaCxtKTppbyhoKT9sLmNhbGwoYyxhLGYsZCxoKTppbyhkKT9sLmNhbGwoYyxhLGYsZCk6aW8oZik/bC5jYWxsKGMsYSxm'@;
put 'KTppbyhhKT9sLmNhbGwoYyxhKTpsLmNhbGwoYyl9VCg2NTEyNSk7dmFyIEEwZSxobz17QUxUOjE4LEFSUk9XX0RPV046NDAsQVJST1dfTEVGVDozNyxBUlJPV19SSUdIVDozOSxBUlJPV19VUDozOCxBVURJT19ET1dOOlpJKCk/MTgyOjE3NCxBVURJT19NVVRFOlpJKCk/MTgxOjE3MyxBVURJ'@;
put 'T19VUDpaSSgpPzE4MzoxNzUsQkFDS1NQQUNFOjgsQ0FQU19MT0NLOjIwLENPTU1BOjE4OCxDT01NQU5EX0xFRlQ6OTEsQ09NTUFORF9SSUdIVDo5MyxDT01NQU5EX0ZJUkVGT1g6MjI0LENPTlRST0w6MTcsREVMRVRFOjQ2LEVORDozNSxFTlRFUjoxMyxFU0NBUEU6MjcsRjE6MTEyLEYyOjEx'@;
put 'MyxGMzoxMTQsRjQ6MTE1LEY1OjExNixGNjoxMTcsRjc6MTE4LEY4OjExOSxGOToxMjAsRjEwOjEyMSxGMTE6MTIyLEYxMjoxMjMsRjEzOjEyNCxGMTQ6MTI1LEYxNToxMjYsRjE2OjEyNyxGMTc6MTI4LEYxODoxMjksRjE5OjEzMCxIT01FOjM2LElOU0VSVDo0NSxNRURJQV9ORVhUOjE3NixN'@;
put 'RURJQV9QTEFZX1BBVVNFOjE3OSxNRURJQV9QUkVWOjE3NyxNRURJQV9TVE9QOjE3OCxOVUxMOjAsTlVNX0xPQ0s6MTQ0LFBBR0VfRE9XTjozNCxQQUdFX1VQOjMzLFBBVVNFOjE5LFBFUklPRDoxOTAsU0NST0xMX0xPQ0s6MTQ1LFNISUZUOjE2LFNQQUNFOjMyLFRBQjo5LEE6NjUsQzo2NyxE'@;
put 'OjY4LEY6NzAsTDo3NixPOjc5LFA6ODAsUzo4MyxWOjg2LFg6ODgsWTo4OSxaOjkwfSx2R2U9W2hvLkFMVCxoby5BUlJPV19ET1dOLGhvLkFSUk9XX0xFRlQsaG8uQVJST1dfUklHSFQsaG8uQVJST1dfVVAsaG8uQVVESU9fRE9XTixoby5BVURJT19NVVRFLGhvLkFVRElPX1VQLGhvLkJBQ0tT'@;
put 'UEFDRSxoby5DQVBTX0xPQ0ssaG8uREVMRVRFLGhvLkVORCxoby5FTlRFUixoby5FU0NBUEUsaG8uRjEsaG8uRjIsaG8uRjMsaG8uRjQsaG8uRjUsaG8uRjYsaG8uRjcsaG8uRjgsaG8uRjksaG8uRjEwLGhvLkYxMSxoby5GMTIsaG8uRjEzLGhvLkYxNCxoby5GMTUsaG8uRjE2LGhvLkYxNyxo'@;
put 'by5GMTgsaG8uRjE5LGhvLkhPTUUsaG8uSU5TRVJULGhvLk1FRElBX05FWFQsaG8uTUVESUFfUExBWV9QQVVTRSxoby5NRURJQV9QUkVWLGhvLk1FRElBX1NUT1AsaG8uTlVMTCxoby5OVU1fTE9DSyxoby5QQUdFX0RPV04saG8uUEFHRV9VUCxoby5QQVVTRSxoby5TQ1JPTExfTE9DSyxoby5T'@;
put 'SElGVCxoby5UQUJdO2Z1bmN0aW9uIEUwZShsKXtyZXR1cm4gMzI9PT1sfHxsPj00OCYmbDw9NTd8fGw+PTk2JiZsPD0xMTF8fGw+PTE4NiYmbDw9MTkyfHxsPj0yMTkmJmw8PTIyMnx8bD49MjI2fHxsPj02NSYmbDw9OTB9ZnVuY3Rpb24gRFkobCl7cmV0dXJuIHZHZS5pbmNsdWRlcyhsKX1m'@;
put 'dW5jdGlvbiB5R2UobCl7dmFyIGM9W107cmV0dXJuIFlJKCk/Yy5wdXNoKGhvLkNPTU1BTkRfTEVGVCxoby5DT01NQU5EX1JJR0hULGhvLkNPTU1BTkRfRklSRUZPWCk6Yy5wdXNoKGhvLkNPTlRST0wpLGMuaW5jbHVkZXMobCl9ZnVuY3Rpb24geDBlKGwpe3JldHVybltoby5DT05UUk9MLGhv'@;
put 'LkNPTU1BTkRfTEVGVCxoby5DT01NQU5EX1JJR0hULGhvLkNPTU1BTkRfRklSRUZPWF0uaW5jbHVkZXMobCl9ZnVuY3Rpb24gajcobCxjKXt2YXIgYT1jLnNwbGl0KCJ8IiksZj0hMTtyZXR1cm4gUm4oYSxmdW5jdGlvbihkKXtpZihsPT09aG9bZF0pcmV0dXJuIGY9ITAsITF9KSxmfWZ1bmN0'@;
put 'aW9uIEhkKGwpe2wuaXNJbW1lZGlhdGVQcm9wYWdhdGlvbkVuYWJsZWQ9ITEsbC5jYW5jZWxCdWJibGU9ITB9ZnVuY3Rpb24gXzUobCl7cmV0dXJuITE9PT1sLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25FbmFibGVkfWZ1bmN0aW9uIEk0KGwpe3JldHVybiAyPT09bC5idXR0b259ZnVuY3Rpb24g'@;
put 'UUkobCl7cmV0dXJuIDA9PT1sLmJ1dHRvbn1mdW5jdGlvbiBXbCgpe3ZhciBsO2lvKGNvbnNvbGUpJiYobD1jb25zb2xlKS53YXJuLmFwcGx5KGwsYXJndW1lbnRzKX1mdW5jdGlvbiBJWSgpe3ZhciBsO2lvKGNvbnNvbGUpJiYobD1jb25zb2xlKS5lcnJvci5hcHBseShsLGFyZ3VtZW50cyl9'@;
put 'ZnVuY3Rpb24gS1MobCl7cmV0dXJuKEtTPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMu'@;
put 'Y29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gVDBlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFi'@;
put 'bGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCx3R2UoZi5rZXkpLGYpfX1mdW5jdGlvbiB3R2UobCl7dmFyIGM9ZnVuY3Rpb24gQ0dlKGwsYyl7aWYoIm9iamVjdCIhPT1LUyhsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1i'@;
put 'b2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1LUyhmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigi'@;
put 'c3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09S1MoYyk/YzpTdHJpbmcoYyl9dmFyIHo3PVsiYWZ0ZXJDZWxsTWV0YVJlc2V0IiwiYWZ0ZXJDaGFuZ2UiLCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLCJiZWZvcmVDb250'@;
put 'ZXh0TWVudVNldEl0ZW1zIiwiYWZ0ZXJEcm9wZG93bk1lbnVEZWZhdWx0T3B0aW9ucyIsImJlZm9yZURyb3Bkb3duTWVudVNldEl0ZW1zIiwiYWZ0ZXJDb250ZXh0TWVudUhpZGUiLCJiZWZvcmVDb250ZXh0TWVudVNob3ciLCJhZnRlckNvbnRleHRNZW51U2hvdyIsImFmdGVyQ29weUxpbWl0'@;
put 'IiwiYmVmb3JlQ3JlYXRlQ29sIiwiYWZ0ZXJDb2x1bW5TZXF1ZW5jZUNoYW5nZSIsImFmdGVyQ3JlYXRlQ29sIiwiYmVmb3JlQ3JlYXRlUm93IiwiYWZ0ZXJDcmVhdGVSb3ciLCJhZnRlckRlc2VsZWN0IiwiYWZ0ZXJEZXN0cm95IiwiYWZ0ZXJEb2N1bWVudEtleURvd24iLCJhZnRlckRyYXdT'@;
put 'ZWxlY3Rpb24iLCJiZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lcyIsImFmdGVyR2V0Q2VsbE1ldGEiLCJhZnRlckdldENvbEhlYWRlciIsImFmdGVyR2V0Um93SGVhZGVyIiwiYWZ0ZXJJbml0IiwiYWZ0ZXJMb2FkRGF0YSIsImFmdGVyVXBkYXRlRGF0YSIsImFmdGVyTW9tZW50dW1TY3JvbGwi'@;
put 'LCJhZnRlck9uQ2VsbENvcm5lck1vdXNlRG93biIsImFmdGVyT25DZWxsQ29ybmVyRGJsQ2xpY2siLCJhZnRlck9uQ2VsbE1vdXNlRG93biIsImFmdGVyT25DZWxsTW91c2VVcCIsImFmdGVyT25DZWxsQ29udGV4dE1lbnUiLCJhZnRlck9uQ2VsbE1vdXNlT3ZlciIsImFmdGVyT25DZWxsTW91'@;
put 'c2VPdXQiLCJhZnRlclJlbW92ZUNvbCIsImFmdGVyUmVtb3ZlUm93IiwiYmVmb3JlUmVuZGVyZXIiLCJhZnRlclJlbmRlcmVyIiwiYWZ0ZXJSb3dTZXF1ZW5jZUNoYW5nZSIsImFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5IiwiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IiwiYWZ0ZXJTZWxlY3Rpb24i'@;
put 'LCJhZnRlclNlbGVjdGlvbkJ5UHJvcCIsImFmdGVyU2VsZWN0aW9uRW5kIiwiYWZ0ZXJTZWxlY3Rpb25FbmRCeVByb3AiLCJhZnRlclNldENlbGxNZXRhIiwiYWZ0ZXJSZW1vdmVDZWxsTWV0YSIsImFmdGVyU2V0RGF0YUF0Q2VsbCIsImFmdGVyU2V0RGF0YUF0Um93UHJvcCIsImFmdGVyU2V0'@;
put 'U291cmNlRGF0YUF0Q2VsbCIsImFmdGVyVXBkYXRlU2V0dGluZ3MiLCJhZnRlclZhbGlkYXRlIiwiYmVmb3JlTGFuZ3VhZ2VDaGFuZ2UiLCJhZnRlckxhbmd1YWdlQ2hhbmdlIiwiYmVmb3JlQXV0b2ZpbGwiLCJhZnRlckF1dG9maWxsIiwiYmVmb3JlQ2VsbEFsaWdubWVudCIsImJlZm9yZUNo'@;
put 'YW5nZSIsImJlZm9yZUNoYW5nZVJlbmRlciIsImJlZm9yZURyYXdCb3JkZXJzIiwiYmVmb3JlR2V0Q2VsbE1ldGEiLCJiZWZvcmVSZW1vdmVDZWxsTWV0YSIsImJlZm9yZUluaXQiLCJiZWZvcmVJbml0V2Fsa29udGFibGUiLCJiZWZvcmVMb2FkRGF0YSIsImJlZm9yZVVwZGF0ZURhdGEiLCJi'@;
put 'ZWZvcmVLZXlEb3duIiwiYmVmb3JlT25DZWxsTW91c2VEb3duIiwiYmVmb3JlT25DZWxsTW91c2VVcCIsImJlZm9yZU9uQ2VsbENvbnRleHRNZW51IiwiYmVmb3JlT25DZWxsTW91c2VPdmVyIiwiYmVmb3JlT25DZWxsTW91c2VPdXQiLCJiZWZvcmVSZW1vdmVDb2wiLCJiZWZvcmVSZW1vdmVS'@;
put 'b3ciLCJiZWZvcmVWaWV3UmVuZGVyIiwiYWZ0ZXJWaWV3UmVuZGVyIiwiYmVmb3JlUmVuZGVyIiwiYWZ0ZXJSZW5kZXIiLCJiZWZvcmVTZXRDZWxsTWV0YSIsImJlZm9yZVNldFJhbmdlU3RhcnRPbmx5IiwiYmVmb3JlU2V0UmFuZ2VTdGFydCIsImJlZm9yZVNldFJhbmdlRW5kIiwiYmVmb3Jl'@;
put 'VG91Y2hTY3JvbGwiLCJiZWZvcmVWYWxpZGF0ZSIsImJlZm9yZVZhbHVlUmVuZGVyIiwiY29uc3RydWN0IiwiaW5pdCIsIm1vZGlmeUNvbEhlYWRlciIsIm1vZGlmeUNvbFdpZHRoIiwibW9kaWZ5Um93SGVhZGVyIiwibW9kaWZ5Um93SGVpZ2h0IiwibW9kaWZ5RGF0YSIsIm1vZGlmeVNvdXJj'@;
put 'ZURhdGEiLCJtb2RpZnlSb3dEYXRhIiwibW9kaWZ5R2V0Q2VsbENvb3JkcyIsImJlZm9yZUhpZ2hsaWdodGluZ1Jvd0hlYWRlciIsImJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlciIsInBlcnNpc3RlbnRTdGF0ZUxvYWQiLCJwZXJzaXN0ZW50U3RhdGVSZXNldCIsInBlcnNpc3RlbnRT'@;
put 'dGF0ZVNhdmUiLCJiZWZvcmVDb2x1bW5Tb3J0IiwiYWZ0ZXJDb2x1bW5Tb3J0IiwibW9kaWZ5QXV0b2ZpbGxSYW5nZSIsIm1vZGlmeUNvcHlhYmxlUmFuZ2UiLCJiZWZvcmVDdXQiLCJhZnRlckN1dCIsImJlZm9yZUNvcHkiLCJhZnRlckNvcHkiLCJiZWZvcmVQYXN0ZSIsImFmdGVyUGFzdGUi'@;
put 'LCJiZWZvcmVDb2x1bW5GcmVlemUiLCJhZnRlckNvbHVtbkZyZWV6ZSIsImJlZm9yZUNvbHVtbk1vdmUiLCJhZnRlckNvbHVtbk1vdmUiLCJiZWZvcmVDb2x1bW5VbmZyZWV6ZSIsImFmdGVyQ29sdW1uVW5mcmVlemUiLCJiZWZvcmVSb3dNb3ZlIiwiYWZ0ZXJSb3dNb3ZlIiwiYmVmb3JlQ29s'@;
put 'dW1uUmVzaXplIiwiYWZ0ZXJDb2x1bW5SZXNpemUiLCJiZWZvcmVSb3dSZXNpemUiLCJhZnRlclJvd1Jlc2l6ZSIsImFmdGVyR2V0Q29sdW1uSGVhZGVyUmVuZGVyZXJzIiwiYWZ0ZXJHZXRSb3dIZWFkZXJSZW5kZXJlcnMiLCJiZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGgiLCJiZWZvcmVG'@;
put 'aWx0ZXIiLCJhZnRlckZpbHRlciIsImFmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGUiLCJhZnRlck5hbWVkRXhwcmVzc2lvbkFkZGVkIiwiYWZ0ZXJOYW1lZEV4cHJlc3Npb25SZW1vdmVkIiwiYWZ0ZXJTaGVldEFkZGVkIiwiYWZ0ZXJTaGVldFJlbmFtZWQiLCJhZnRlclNoZWV0UmVtb3ZlZCIs'@;
put 'Im1vZGlmeUNvbHVtbkhlYWRlckhlaWdodCIsIm1vZGlmeUNvbHVtbkhlYWRlclZhbHVlIiwiYmVmb3JlVW5kbyIsImJlZm9yZVVuZG9TdGFja0NoYW5nZSIsImFmdGVyVW5kbyIsImFmdGVyVW5kb1N0YWNrQ2hhbmdlIiwiYmVmb3JlUmVkbyIsImJlZm9yZVJlZG9TdGFja0NoYW5nZSIsImFm'@;
put 'dGVyUmVkbyIsImFmdGVyUmVkb1N0YWNrQ2hhbmdlIiwibW9kaWZ5Um93SGVhZGVyV2lkdGgiLCJtb2RpZnlUcmFuc2Zvcm1TdGFydCIsIm1vZGlmeVRyYW5zZm9ybUVuZCIsImFmdGVyTW9kaWZ5VHJhbnNmb3JtU3RhcnQiLCJhZnRlck1vZGlmeVRyYW5zZm9ybUVuZCIsImFmdGVyVmlld3Bv'@;
put 'cnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGUiLCJhZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlIiwiYWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQiLCJiZWZvcmVIaWRlUm93cyIsImFmdGVySGlkZVJvd3MiLCJiZWZvcmVVbmhpZGVSb3dzIiwiYWZ0ZXJVbmhpZGVSb3dzIiwiYmVm'@;
put 'b3JlSGlkZUNvbHVtbnMiLCJhZnRlckhpZGVDb2x1bW5zIiwiYmVmb3JlVW5oaWRlQ29sdW1ucyIsImFmdGVyVW5oaWRlQ29sdW1ucyIsImJlZm9yZVRyaW1Sb3ciLCJhZnRlclRyaW1Sb3ciLCJiZWZvcmVVbnRyaW1Sb3ciLCJhZnRlclVudHJpbVJvdyIsImJlZm9yZURyb3Bkb3duTWVudVNo'@;
put 'b3ciLCJhZnRlckRyb3Bkb3duTWVudVNob3ciLCJhZnRlckRyb3Bkb3duTWVudUhpZGUiLCJiZWZvcmVBZGRDaGlsZCIsImFmdGVyQWRkQ2hpbGQiLCJiZWZvcmVEZXRhY2hDaGlsZCIsImFmdGVyRGV0YWNoQ2hpbGQiLCJhZnRlckJlZ2luRWRpdGluZyIsImJlZm9yZU1lcmdlQ2VsbHMiLCJh'@;
put 'ZnRlck1lcmdlQ2VsbHMiLCJiZWZvcmVVbm1lcmdlQ2VsbHMiLCJhZnRlclVubWVyZ2VDZWxscyIsImFmdGVyTGlzdGVuIiwiYWZ0ZXJVbmxpc3RlbiIsImFmdGVyUmVmcmVzaERpbWVuc2lvbnMiLCJiZWZvcmVSZWZyZXNoRGltZW5zaW9ucyIsImJlZm9yZUNvbHVtbkNvbGxhcHNlIiwiYWZ0'@;
put 'ZXJDb2x1bW5Db2xsYXBzZSIsImJlZm9yZUNvbHVtbkV4cGFuZCIsImFmdGVyQ29sdW1uRXhwYW5kIiwibW9kaWZ5QXV0b0NvbHVtblNpemVTZWVkIl0sTUdlPU9sKEEwZXx8KEEwZT1mdW5jdGlvbiBTR2UobCxjKXtyZXR1cm4gY3x8KGM9bC5zbGljZSgwKSksT2JqZWN0LmZyZWV6ZShPYmpl'@;
put 'Y3QuZGVmaW5lUHJvcGVydGllcyhsLHtyYXc6e3ZhbHVlOk9iamVjdC5mcmVlemUoYyl9fSkpfShbJ1RoZSBwbHVnaW4gaG9vayAiW2hvb2tOYW1lXSIgd2FzIHJlbW92ZWQgaW4gSGFuZHNvbnRhYmxlIFtyZW1vdmVkSW5WZXJzaW9uXS4gXG4gIFBsZWFzZSBjb25zdWx0IHJlbGVhc2Ugbm90'@;
put 'ZXMgaHR0cHM6Ly9naXRodWIuY29tL2hhbmRzb250YWJsZS9oYW5kc29udGFibGUvcmVsZWFzZXMvdGFnL1tyZW1vdmVkSW5WZXJzaW9uXSB0byBcbiAgbGVhcm4gYWJvdXQgdGhlIG1pZ3JhdGlvbiBwYXRoLiddLFsnVGhlIHBsdWdpbiBob29rICJbaG9va05hbWVdIiB3YXMgcmVtb3ZlZCBp'@;
put 'biBIYW5kc29udGFibGUgW3JlbW92ZWRJblZlcnNpb25dLlxceDIwXG4gIFBsZWFzZSBjb25zdWx0IHJlbGVhc2Ugbm90ZXMgaHR0cHM6Ly9naXRodWIuY29tL2hhbmRzb250YWJsZS9oYW5kc29udGFibGUvcmVsZWFzZXMvdGFnL1tyZW1vdmVkSW5WZXJzaW9uXSB0b1xceDIwXG4gIGxlYXJu'@;
put 'IGFib3V0IHRoZSBtaWdyYXRpb24gcGF0aC4nXSkpKSxSWT1uZXcgTWFwKFtbIm1vZGlmeVJvdyIsIjguMC4wIl0sWyJtb2RpZnlDb2wiLCI4LjAuMCJdLFsidW5tb2RpZnlSb3ciLCI4LjAuMCJdLFsidW5tb2RpZnlDb2wiLCI4LjAuMCJdLFsic2tpcExlbmd0aENhY2hlIiwiOC4wLjAiXSxb'@;
put 'ImhpZGRlbkNvbHVtbiIsIjguMC4wIl0sWyJoaWRkZW5Sb3ciLCI4LjAuMCJdXSksTFk9bmV3IE1hcChbXSksTzBlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbCgpeyhmdW5jdGlvbiBiR2UobCxjKXtpZighKGwgaW5zdGFuY2VvZiBjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBh'@;
put 'IGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsbCksdGhpcy5nbG9iYWxCdWNrZXQ9dGhpcy5jcmVhdGVFbXB0eUJ1Y2tldCgpfXJldHVybiBmdW5jdGlvbiBfR2UobCxjLGEpe2MmJlQwZShsLnByb3RvdHlwZSxjKSxhJiZUMGUobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJv'@;
put 'dG90eXBlIix7d3JpdGFibGU6ITF9KX0obCxbe2tleToiY3JlYXRlRW1wdHlCdWNrZXQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGE9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gUm4oejcsZnVuY3Rpb24oZil7cmV0dXJuIGFbZl09W119KSxhfX0se2tleToiZ2V0QnVja2V0Iix2YWx1ZTpm'@;
put 'dW5jdGlvbigpe3ZhciBhPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO3JldHVybiBhPyhhLnBsdWdpbkhvb2tCdWNrZXR8fChhLnBsdWdpbkhvb2tCdWNrZXQ9dGhpcy5jcmVhdGVFbXB0eUJ1Y2tldCgpKSxhLnBsdWdpbkhvb2tC'@;
put 'dWNrZXQpOnRoaXMuZ2xvYmFsQnVja2V0fX0se2tleToiYWRkIix2YWx1ZTpmdW5jdGlvbihhLGYpe3ZhciBkPXRoaXMsaD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbDtpZihBcnJheS5pc0FycmF5KGYpKVJuKGYsZnVuY3Rpb24o'@;
put 'Tyl7cmV0dXJuIGQuYWRkKGEsTyxoKX0pO2Vsc2V7UlkuaGFzKGEpJiZXbCh2WShNR2Use2hvb2tOYW1lOmEscmVtb3ZlZEluVmVyc2lvbjpSWS5nZXQoYSl9KSksTFkuaGFzKGEpJiZXbChMWS5nZXQoYSkpO3ZhciBtPXRoaXMuZ2V0QnVja2V0KGgpO2lmKHR5cGVvZiBtW2FdPiJ1IiYmKHRo'@;
put 'aXMucmVnaXN0ZXIoYSksbVthXT1bXSksZi5za2lwPSExLC0xPT09bVthXS5pbmRleE9mKGYpKXt2YXIgXz0hMTtmLmluaXRpYWxIb29rJiZSbihtW2FdLGZ1bmN0aW9uKE8sWCl7aWYoTy5pbml0aWFsSG9vaylyZXR1cm4gbVthXVtYXT1mLF89ITAsITF9KSxffHxtW2FdLnB1c2goZil9fXJl'@;
put 'dHVybiB0aGlzfX0se2tleToib25jZSIsdmFsdWU6ZnVuY3Rpb24oYSxmKXt2YXIgZD10aGlzLGg9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOm51bGw7QXJyYXkuaXNBcnJheShmKT9SbihmLGZ1bmN0aW9uKG0pe3JldHVybiBkLm9uY2Uo'@;
put 'YSxtLGgpfSk6KGYucnVuT25jZT0hMCx0aGlzLmFkZChhLGYsaCkpfX0se2tleToicmVtb3ZlIix2YWx1ZTpmdW5jdGlvbihhLGYpe3ZhciBoPXRoaXMuZ2V0QnVja2V0KGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsKTtyZXR1cm4g'@;
put 'dHlwZW9mIGhbYV08InUiJiZoW2FdLmluZGV4T2YoZik+PTAmJihmLnNraXA9ITAsITApfX0se2tleToiaGFzIix2YWx1ZTpmdW5jdGlvbihhKXt2YXIgZD10aGlzLmdldEJ1Y2tldChhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbCk7'@;
put 'cmV0dXJuISh2b2lkIDA9PT1kW2FdfHwhZFthXS5sZW5ndGgpfX0se2tleToicnVuIix2YWx1ZTpmdW5jdGlvbihhLGYsZCxoLG0sXyxPLFgpe3ZhciBhZT10aGlzLmdsb2JhbEJ1Y2tldFtmXSxwZT1hZT9hZS5sZW5ndGg6MCxiZT0wO2lmKHBlKWZvcig7YmU8cGU7KWlmKGFlW2JlXSYmIWFl'@;
put 'W2JlXS5za2lwKXt2YXIgeGU9SkkoYWVbYmVdLGEsZCxoLG0sXyxPLFgpO3ZvaWQgMCE9PXhlJiYoZD14ZSksYWVbYmVdJiZhZVtiZV0ucnVuT25jZSYmdGhpcy5yZW1vdmUoZixhZVtiZV0pLGJlKz0xfWVsc2UgYmUrPTE7dmFyIFZlPXRoaXMuZ2V0QnVja2V0KGEpW2ZdLFplPVZlP1ZlLmxl'@;
put 'bmd0aDowLGx0PTA7aWYoWmUpZm9yKDtsdDxaZTspaWYoVmVbbHRdJiYhVmVbbHRdLnNraXApe3ZhciBkdD1KSShWZVtsdF0sYSxkLGgsbSxfLE8sWCk7dm9pZCAwIT09ZHQmJihkPWR0KSxWZVtsdF0mJlZlW2x0XS5ydW5PbmNlJiZ0aGlzLnJlbW92ZShmLFZlW2x0XSxhKSxsdCs9MX1lbHNl'@;
put 'IGx0Kz0xO3JldHVybiBkfX0se2tleToiZGVzdHJveSIsdmFsdWU6ZnVuY3Rpb24oKXttYSh0aGlzLmdldEJ1Y2tldChhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbCksZnVuY3Rpb24oZixkLGgpe3JldHVybiBoW2RdLmxlbmd0aD0w'@;
put 'fSl9fSx7a2V5OiJyZWdpc3RlciIsdmFsdWU6ZnVuY3Rpb24oYSl7dGhpcy5pc1JlZ2lzdGVyZWQoYSl8fHo3LnB1c2goYSl9fSx7a2V5OiJkZXJlZ2lzdGVyIix2YWx1ZTpmdW5jdGlvbihhKXt0aGlzLmlzUmVnaXN0ZXJlZChhKSYmejcuc3BsaWNlKHo3LmluZGV4T2YoYSksMSl9fSx7a2V5'@;
put 'OiJpc0RlcHJlY2F0ZWQiLHZhbHVlOmZ1bmN0aW9uKGEpe3JldHVybiBMWS5oYXMoYSl8fFJZLmhhcyhhKX19LHtrZXk6ImlzUmVnaXN0ZXJlZCIsdmFsdWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHo3LmluZGV4T2YoYSk+PTB9fSx7a2V5OiJnZXRSZWdpc3RlcmVkIix2YWx1ZTpmdW5jdGlvbigp'@;
put 'e3JldHVybiB6N319XSxbe2tleToiZ2V0U2luZ2xldG9uIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBFR2UoKXtyZXR1cm4ga0dlfSgpfX1dKSxsfSgpLGtHZT1uZXcgTzBlO2NvbnN0IHVvPU8wZTtmdW5jdGlvbiBEMGUobCl7cmV0dXJuIGZ1bmN0aW9uIE9HZShsKXtpZihB'@;
put 'cnJheS5pc0FycmF5KGwpKXJldHVybiBQWShsKX0obCl8fGZ1bmN0aW9uIFRHZShsKXtpZih0eXBlb2YgU3ltYm9sPCJ1IiYmbnVsbCE9bFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1sWyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20obCl9KGwpfHxmdW5jdGlvbiBBR2UobCxjKXtp'@;
put 'ZihsKXtpZigic3RyaW5nIj09dHlwZW9mIGwpcmV0dXJuIFBZKGwsYyk7dmFyIGE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGwpLnNsaWNlKDgsLTEpO2lmKCJPYmplY3QiPT09YSYmbC5jb25zdHJ1Y3RvciYmKGE9bC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PWF8fCJTZXQi'@;
put 'PT09YSlyZXR1cm4gQXJyYXkuZnJvbShsKTtpZigiQXJndW1lbnRzIj09PWF8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KGEpKXJldHVybiBQWShsLGMpfX0obCl8fGZ1bmN0aW9uIHhHZSgpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0'@;
put 'ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIFBZKGwsYyl7KG51bGw9PWN8fGM+bC5sZW5ndGgp'@;
put 'JiYoYz1sLmxlbmd0aCk7Zm9yKHZhciBhPTAsZj1uZXcgQXJyYXkoYyk7YTxjO2ErKylmW2FdPWxbYV07cmV0dXJuIGZ9dmFyIEZZPW5ldyBNYXA7ZnVuY3Rpb24gRmYoKXt2YXIgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06ImNvbW1v'@;
put 'biI7RlkuaGFzKGwpfHxGWS5zZXQobCxuZXcgTWFwKTt2YXIgYz1GWS5nZXQobCk7cmV0dXJue3JlZ2lzdGVyOmZ1bmN0aW9uIGEoXyxPKXtjLnNldChfLE8pfSxnZXRJdGVtOmZ1bmN0aW9uIGYoXyl7cmV0dXJuIGMuZ2V0KF8pfSxoYXNJdGVtOmZ1bmN0aW9uIGQoXyl7cmV0dXJuIGMuaGFz'@;
put 'KF8pfSxnZXROYW1lczpmdW5jdGlvbiBoKCl7cmV0dXJuIEQwZShjLmtleXMoKSl9LGdldFZhbHVlczpmdW5jdGlvbiBtKCl7cmV0dXJuIEQwZShjLnZhbHVlcygpKX19fXZhciBIWT1uZXcgV2Vha01hcCxxUz1GZigiZWRpdG9ycyIpLERHZT1xUy5yZWdpc3RlcixJMGU9cVMuZ2V0SXRlbSxS'@;
put 'MGU9cVMuaGFzSXRlbSxJR2U9cVMuZ2V0TmFtZXM7ZnVuY3Rpb24gUkdlKGwpe3ZhciBjPXt9LGE9bDt0aGlzLmdldENvbnN0cnVjdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIGx9LHRoaXMuZ2V0SW5zdGFuY2U9ZnVuY3Rpb24oZil7cmV0dXJuIGYuZ3VpZCBpbiBjfHwoY1tmLmd1aWRdPW5ldyBh'@;
put 'KGYpKSxjW2YuZ3VpZF19LHVvLmdldFNpbmdsZXRvbigpLmFkZCgiYWZ0ZXJEZXN0cm95IixmdW5jdGlvbigpe2NbdGhpcy5ndWlkXT1udWxsfSl9ZnVuY3Rpb24gTDBlKGwsYyl7dmFyIGE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGwpSFkuZ2V0KGwpfHxZMChudWxsLGwpLGE9SFkuZ2V0KGwp'@;
put 'O2Vsc2V7aWYoInN0cmluZyIhPXR5cGVvZiBsKXRocm93IEVycm9yKCdPbmx5IHN0cmluZ3MgYW5kIGZ1bmN0aW9ucyBjYW4gYmUgcGFzc2VkIGFzICJlZGl0b3IiIHBhcmFtZXRlcicpO2E9STBlKGwpfWlmKCFhKXRocm93IEVycm9yKCdObyBlZGl0b3IgcmVnaXN0ZXJlZCB1bmRlciBuYW1l'@;
put 'ICInLmNvbmNhdChsLCciJykpO3JldHVybiBhLmdldEluc3RhbmNlKGMpfWZ1bmN0aW9uIGVSKGwpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBsKXJldHVybiBsO2lmKCFSMGUobCkpdGhyb3cgRXJyb3IoJ05vIHJlZ2lzdGVyZWQgZWRpdG9yIGZvdW5kIHVuZGVyICInLmNvbmNhdChsLCciIG5h'@;
put 'bWUnKSk7cmV0dXJuIEkwZShsKS5nZXRDb25zdHJ1Y3RvcigpfWZ1bmN0aW9uIFkwKGwsYyl7bCYmInN0cmluZyIhPXR5cGVvZiBsJiYobD0oYz1sKS5FRElUT1JfVFlQRSk7dmFyIGE9bmV3IFJHZShjKTsic3RyaW5nIj09dHlwZW9mIGwmJkRHZShsLGEpLEhZLnNldChjLGEpfWZ1bmN0aW9u'@;
put 'IFhTKGwpe3JldHVybihYUz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVj'@;
put 'dG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIFAwZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2'@;
put 'YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsRkdlKGYua2V5KSxmKX19ZnVuY3Rpb24gRkdlKGwpe3ZhciBjPWZ1bmN0aW9uIEhHZShsLGMpe2lmKCJvYmplY3QiIT09WFMobCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJp'@;
put 'bWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09WFMoZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9'@;
put 'PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PVhTKGMpP2M6U3RyaW5nKGMpfXZhciB0Uj0wLE5HZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGwoKXt2YXIgYz1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNb'@;
put 'MF06bnVsbDsoZnVuY3Rpb24gTEdlKGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLGwpLHRoaXMuY29udGV4dD1jfHx0aGlzLHRoaXMuY29udGV4dC5ldmVudExpc3RlbmVyc3x8'@;
put 'KHRoaXMuY29udGV4dC5ldmVudExpc3RlbmVycz1bXSl9cmV0dXJuIGZ1bmN0aW9uIFBHZShsLGMsYSl7YyYmUDBlKGwucHJvdG90eXBlLGMpLGEmJlAwZShsLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShsLFt7a2V5OiJhZGRFdmVudExp'@;
put 'c3RlbmVyIix2YWx1ZTpmdW5jdGlvbihhLGYsZCl7dmFyIGg9dGhpcyxtPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM107ZnVuY3Rpb24gXyhPKXtkLmNhbGwodGhpcyxmdW5jdGlvbiBWR2UobCl7dmFyIGM9bC5zdG9wSW1tZWRpYXRlUHJv'@;
put 'cGFnYXRpb247cmV0dXJuIGwuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uPWZ1bmN0aW9uKCl7Yy5hcHBseSh0aGlzKSxIZCh0aGlzKX0sbH0oTykpfXJldHVybiJib29sZWFuIiE9dHlwZW9mIG0mJiFCY2UoKSYmKG09ITEpLHRoaXMuY29udGV4dC5ldmVudExpc3RlbmVycy5wdXNoKHtlbGVt'@;
put 'ZW50OmEsZXZlbnQ6ZixjYWxsYmFjazpkLGNhbGxiYWNrUHJveHk6XyxvcHRpb25zOm0sZXZlbnRNYW5hZ2VyOnRoaXN9KSxhLmFkZEV2ZW50TGlzdGVuZXIoZixfLG0pLHRSKz0xLGZ1bmN0aW9uKCl7aC5yZW1vdmVFdmVudExpc3RlbmVyKGEsZixkKX19fSx7a2V5OiJyZW1vdmVFdmVudExp'@;
put 'c3RlbmVyIix2YWx1ZTpmdW5jdGlvbihhLGYsZCl7Zm9yKHZhciBfLGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXSxtPXRoaXMuY29udGV4dC5ldmVudExpc3RlbmVycy5sZW5ndGg7bTspaWYoKF89dGhpcy5jb250ZXh0LmV2ZW50TGlz'@;
put 'dGVuZXJzW20tPTFdKS5ldmVudD09PWYmJl8uZWxlbWVudD09PWEpe2lmKGQmJmQhPT1fLmNhbGxiYWNrfHxoJiZfLmV2ZW50TWFuYWdlciE9PXRoaXMpY29udGludWU7dGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzLnNwbGljZShtLDEpLF8uZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVy'@;
put 'KF8uZXZlbnQsXy5jYWxsYmFja1Byb3h5LF8ub3B0aW9ucyksdFItPTF9fX0se2tleToiY2xlYXJFdmVudHMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGE9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtpZih0aGlzLmNvbnRleHQpZm9yKHZh'@;
put 'ciBmPXRoaXMuY29udGV4dC5ldmVudExpc3RlbmVycy5sZW5ndGg7Zjspe3ZhciBkPXRoaXMuY29udGV4dC5ldmVudExpc3RlbmVyc1tmLT0xXTthJiZkLmV2ZW50TWFuYWdlciE9PXRoaXN8fCh0aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnMuc3BsaWNlKGYsMSksZC5lbGVtZW50LnJlbW92'@;
put 'ZUV2ZW50TGlzdGVuZXIoZC5ldmVudCxkLmNhbGxiYWNrUHJveHksZC5vcHRpb25zKSx0Ui09MSl9fX0se2tleToiY2xlYXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jbGVhckV2ZW50cygpfX0se2tleToiZGVzdHJveSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNsZWFyRXZlbnRzKCksdGhp'@;
put 'cy5jb250ZXh0PW51bGx9fSx7a2V5OiJkZXN0cm95V2l0aE93bkV2ZW50c09ubHkiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jbGVhckV2ZW50cyghMCksdGhpcy5jb250ZXh0PW51bGx9fSx7a2V5OiJmaXJlRXZlbnQiLHZhbHVlOmZ1bmN0aW9uKGEsZil7dmFyIGQ9YS5kb2N1bWVudCxoPWE7'@;
put 'ZHx8KGg9KGQ9YS5vd25lckRvY3VtZW50P2Eub3duZXJEb2N1bWVudDphKS5kZWZhdWx0Vmlldyk7dmFyIF8sbT17YnViYmxlczohMCxjYW5jZWxhYmxlOiJtb3VzZW1vdmUiIT09Zix2aWV3OmgsZGV0YWlsOjAsc2NyZWVuWDowLHNjcmVlblk6MCxjbGllbnRYOjEsY2xpZW50WToxLGN0cmxL'@;
put 'ZXk6ITEsYWx0S2V5OiExLHNoaWZ0S2V5OiExLG1ldGFLZXk6ITEsYnV0dG9uOjAscmVsYXRlZFRhcmdldDp2b2lkIDB9O2QuY3JlYXRlRXZlbnQ/KF89ZC5jcmVhdGVFdmVudCgiTW91c2VFdmVudHMiKSkuaW5pdE1vdXNlRXZlbnQoZixtLmJ1YmJsZXMsbS5jYW5jZWxhYmxlLG0udmlldyxt'@;
put 'LmRldGFpbCxtLnNjcmVlblgsbS5zY3JlZW5ZLG0uY2xpZW50WCxtLmNsaWVudFksbS5jdHJsS2V5LG0uYWx0S2V5LG0uc2hpZnRLZXksbS5tZXRhS2V5LG0uYnV0dG9uLG0ucmVsYXRlZFRhcmdldHx8ZC5ib2R5LnBhcmVudE5vZGUpOl89ZC5jcmVhdGVFdmVudE9iamVjdCgpLGEuZGlzcGF0'@;
put 'Y2hFdmVudD9hLmRpc3BhdGNoRXZlbnQoXyk6YS5maXJlRXZlbnQoIm9uIi5jb25jYXQoZiksXyl9fV0pLGx9KCk7Y29uc3QgZnM9TkdlO2Z1bmN0aW9uIEpTKGwpe3JldHVybihKUz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9m'@;
put 'dW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIEYwZShsLGMpeyhu'@;
put 'dWxsPT1jfHxjPmwubGVuZ3RoKSYmKGM9bC5sZW5ndGgpO2Zvcih2YXIgYT0wLGY9bmV3IEFycmF5KGMpO2E8YzthKyspZlthXT1sW2FdO3JldHVybiBmfWZ1bmN0aW9uIEgwZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1l'@;
put 'cmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsJEdlKGYua2V5KSxmKX19ZnVuY3Rpb24gJEdlKGwpe3ZhciBjPWZ1bmN0aW9uIEtHZShsLGMpe2lmKCJvYmplY3QiIT09SlMobCl8fG51bGw9PT1s'@;
put 'KXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09SlMoZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1p'@;
put 'dGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PUpTKGMpP2M6U3RyaW5nKGMpfXZhciBuUj0iZWRpdG9yTWFuYWdlci5uYXZpZ2F0aW9uIixRUz0iZWRpdG9yTWFuYWdlci5oYW5kbGluZ0VkaXRv'@;
put 'ciIsTlk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKGMsYSxmKXt2YXIgZD10aGlzOyhmdW5jdGlvbiBXR2UobCxjKXtpZighKGwgaW5zdGFuY2VvZiBjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsbCksdGhpcy5pbnN0YW5j'@;
put 'ZT1jLHRoaXMudGFibGVNZXRhPWEsdGhpcy5zZWxlY3Rpb249Zix0aGlzLmV2ZW50TWFuYWdlcj1uZXcgZnMoYyksdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5sb2NrPSExLHRoaXMuYWN0aXZlRWRpdG9yPXZvaWQgMCx0aGlzLmNlbGxQcm9wZXJ0aWVzPXZvaWQgMCx0aGlzLmluc3RhbmNlLmdl'@;
put 'dFNob3J0Y3V0TWFuYWdlcigpLmFkZENvbnRleHQoImVkaXRvciIpLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKSx0aGlzLmluc3RhbmNlLmFkZEhvb2soImFmdGVyRG9jdW1lbnRLZXlEb3duIixmdW5jdGlvbihtKXtyZXR1cm4gZC5vbkFmdGVyRG9jdW1lbnRLZXlEb3duKG0pfSksdGhpcy5l'@;
put 'dmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmluc3RhbmNlLnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsImNvbXBvc2l0aW9uc3RhcnQiLGZ1bmN0aW9uKG0peyFkLmRlc3Ryb3llZCYmZC5pbnN0YW5jZS5pc0xpc3RlbmluZygpJiZkLm9wZW5FZGl0b3IoIiIsbSl9KSx0'@;
put 'aGlzLmluc3RhbmNlLnZpZXcuX3d0LnVwZGF0ZSgib25DZWxsRGJsQ2xpY2siLGZ1bmN0aW9uKG0sXyxPKXtyZXR1cm4gZC5vbkNlbGxEYmxDbGljayhtLF8sTyl9KX1yZXR1cm4gZnVuY3Rpb24gR0dlKGwsYyxhKXtjJiZIMGUobC5wcm90b3R5cGUsYyksYSYmSDBlKGwsYSksT2JqZWN0LmRl'@;
put 'ZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGwsW3trZXk6InJlZ2lzdGVyU2hvcnRjdXRzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMsZj10aGlzLmluc3RhbmNlLmdldFNob3J0Y3V0TWFuYWdlcigpLGQ9Zi5nZXRDb250ZXh0KCJncmlkIiksaD1mLmdl'@;
put 'dENvbnRleHQoImVkaXRvciIpLG09e2dyb3VwOlFTfTtoLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siRW50ZXIiXSxbIkVudGVyIiwiU2hpZnQiXSxbIkVudGVyIiwiQ29udHJvbC9NZXRhIl0sWyJFbnRlciIsIkNvbnRyb2wvTWV0YSIsIlNoaWZ0Il1dLGNhbGxiYWNrOmZ1bmN0aW9uKE8sWCl7'@;
put 'YS5jbG9zZUVkaXRvckFuZFNhdmVDaGFuZ2VzKGYuaXNDdHJsUHJlc3NlZCgpKSxhLm1vdmVTZWxlY3Rpb25BZnRlckVudGVyKFguaW5jbHVkZXMoInNoaWZ0IikpfX0se2tleXM6W1siRXNjYXBlIl0sWyJFc2NhcGUiLCJDb250cm9sL01ldGEiXV0sY2FsbGJhY2s6ZnVuY3Rpb24oKXthLmNs'@;
put 'b3NlRWRpdG9yQW5kUmVzdG9yZU9yaWdpbmFsVmFsdWUoZi5pc0N0cmxQcmVzc2VkKCkpLGEuYWN0aXZlRWRpdG9yLmZvY3VzKCl9fV0sbSksZC5hZGRTaG9ydGN1dHMoW3trZXlzOltbIkYyIl1dLGNhbGxiYWNrOmZ1bmN0aW9uKE8pe2Eub3BlbkVkaXRvcihudWxsLE8sITApfX0se2tleXM6'@;
put 'W1siQmFja3NwYWNlIl0sWyJEZWxldGUiXV0sY2FsbGJhY2s6ZnVuY3Rpb24oKXthLmluc3RhbmNlLmVtcHR5U2VsZWN0ZWRDZWxscygpLGEucHJlcGFyZUVkaXRvcigpfX0se2tleXM6W1siRW50ZXIiXSxbIkVudGVyIiwiU2hpZnQiXV0sY2FsbGJhY2s6ZnVuY3Rpb24oTyxYKXthLmluc3Rh'@;
put 'bmNlLmdldFNldHRpbmdzKCkuZW50ZXJCZWdpbnNFZGl0aW5nP2EuY2VsbFByb3BlcnRpZXMucmVhZE9ubHk/YS5tb3ZlU2VsZWN0aW9uQWZ0ZXJFbnRlcigpOmEub3BlbkVkaXRvcihudWxsLE8sITApOmEubW92ZVNlbGVjdGlvbkFmdGVyRW50ZXIoWC5pbmNsdWRlcygic2hpZnQiKSksSGQo'@;
put 'Tyl9fV0sbSl9fSx7a2V5OiJsb2NrRWRpdG9yIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMubG9jaz0hMH19LHtrZXk6InVubG9ja0VkaXRvciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmxvY2s9ITF9fSx7a2V5OiJkZXN0cm95RWRpdG9yIix2YWx1ZTpmdW5jdGlvbihhKXt0aGlzLmxvY2t8fHRo'@;
put 'aXMuY2xvc2VFZGl0b3IoYSl9fSx7a2V5OiJnZXRBY3RpdmVFZGl0b3IiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWN0aXZlRWRpdG9yfX0se2tleToicHJlcGFyZUVkaXRvciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzO2lmKCF0aGlzLmxvY2spe2lmKHRoaXMuYWN0aXZl'@;
put 'RWRpdG9yJiZ0aGlzLmFjdGl2ZUVkaXRvci5pc1dhaXRpbmcoKSlyZXR1cm4gdm9pZCB0aGlzLmNsb3NlRWRpdG9yKCExLCExLGZ1bmN0aW9uKFplKXtaZSYmYS5wcmVwYXJlRWRpdG9yKCl9KTt2YXIgZj10aGlzLmluc3RhbmNlLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0LGQ9'@;
put 'Zi5yb3csaD1mLmNvbCxtPXRoaXMuaW5zdGFuY2UucnVuSG9va3MoIm1vZGlmeUdldENlbGxDb29yZHMiLGQsaCksXz1kLE89aDtpZihBcnJheS5pc0FycmF5KG0pKXt2YXIgWD1mdW5jdGlvbiBqR2UobCxjKXtyZXR1cm4gZnVuY3Rpb24gWUdlKGwpe2lmKEFycmF5LmlzQXJyYXkobCkpcmV0'@;
put 'dXJuIGx9KGwpfHxmdW5jdGlvbiBaR2UobCxjKXt2YXIgYT1udWxsPT1sP251bGw6dHlwZW9mIFN5bWJvbDwidSImJmxbU3ltYm9sLml0ZXJhdG9yXXx8bFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPWEpe3ZhciBmLGQsaCxtLF89W10sTz0hMCxYPSExO3RyeXtpZihoPShhPWEuY2FsbChsKSku'@;
put 'bmV4dCwwPT09Yyl7aWYoT2JqZWN0KGEpIT09YSlyZXR1cm47Tz0hMX1lbHNlIGZvcig7IShPPShmPWguY2FsbChhKSkuZG9uZSkmJihfLnB1c2goZi52YWx1ZSksXy5sZW5ndGghPT1jKTtPPSEwKTt9Y2F0Y2goYWUpe1g9ITAsZD1hZX1maW5hbGx5e3RyeXtpZighTyYmbnVsbCE9YS5yZXR1'@;
put 'cm4mJihtPWEucmV0dXJuKCksT2JqZWN0KG0pIT09bSkpcmV0dXJufWZpbmFsbHl7aWYoWCl0aHJvdyBkfX1yZXR1cm4gX319KGwsYyl8fGZ1bmN0aW9uIFVHZShsLGMpe2lmKGwpe2lmKCJzdHJpbmciPT10eXBlb2YgbClyZXR1cm4gRjBlKGwsYyk7dmFyIGE9T2JqZWN0LnByb3RvdHlwZS50'@;
put 'b1N0cmluZy5jYWxsKGwpLnNsaWNlKDgsLTEpO2lmKCJPYmplY3QiPT09YSYmbC5jb25zdHJ1Y3RvciYmKGE9bC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PWF8fCJTZXQiPT09YSlyZXR1cm4gQXJyYXkuZnJvbShsKTtpZigiQXJndW1lbnRzIj09PWF8fC9eKD86VWl8SSludCg/Ojh8MTZ8'@;
put 'MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KGEpKXJldHVybiBGMGUobCxjKX19KGwsYyl8fGZ1bmN0aW9uIHpHZSgpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVy'@;
put 'YWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9KG0sMik7Xz1YWzBdLE89WFsxXX10aGlzLmNlbGxQcm9wZXJ0aWVzPXRoaXMuaW5zdGFuY2UuZ2V0Q2VsbE1ldGEoXyxPKTt2YXIgYWU9dGhpcy5pbnN0YW5jZS5yb290'@;
put 'RG9jdW1lbnQuYWN0aXZlRWxlbWVudDtpZihhZSYmWEkoYWUpJiZhZS5ibHVyKCksIXRoaXMuaXNDZWxsRWRpdGFibGUoKSlyZXR1cm4gdm9pZCB0aGlzLmNsZWFyQWN0aXZlRWRpdG9yKCk7dmFyIHBlPXRoaXMuaW5zdGFuY2UuZ2V0Q2VsbChkLGgsITApO2lmKHBlKXt2YXIgYmU9dGhpcy5p'@;
put 'bnN0YW5jZS5nZXRDZWxsRWRpdG9yKHRoaXMuY2VsbFByb3BlcnRpZXMpLHhlPXRoaXMuaW5zdGFuY2UuY29sVG9Qcm9wKE8pLFZlPXRoaXMuaW5zdGFuY2UuZ2V0U291cmNlRGF0YUF0Q2VsbCh0aGlzLmluc3RhbmNlLnRvUGh5c2ljYWxSb3coXyksTyk7dGhpcy5hY3RpdmVFZGl0b3I9TDBl'@;
put 'KGJlLHRoaXMuaW5zdGFuY2UpLHRoaXMuYWN0aXZlRWRpdG9yLnByZXBhcmUoZCxoLHhlLHBlLFZlLHRoaXMuY2VsbFByb3BlcnRpZXMpfX19fSx7a2V5OiJpc0VkaXRvck9wZW5lZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hY3RpdmVFZGl0b3ImJnRoaXMuYWN0aXZlRWRpdG9y'@;
put 'LmlzT3BlbmVkKCl9fSx7a2V5OiJvcGVuRWRpdG9yIix2YWx1ZTpmdW5jdGlvbihhLGYpe3ZhciBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07aWYodGhpcy5pc0NlbGxFZGl0YWJsZSgpKXtpZighdGhpcy5hY3RpdmVFZGl0b3Ipe3Zh'@;
put 'ciBoPXRoaXMuaW5zdGFuY2UuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQsXz1oLmNvbCxPPXRoaXMuaW5zdGFuY2Uucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChoLnJvdyksWD10aGlzLmluc3RhbmNlLmNvbHVtbkluZGV4TWFwcGVyLmdldFJl'@;
put 'bmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoXyk7dGhpcy5pbnN0YW5jZS52aWV3LnNjcm9sbFZpZXdwb3J0KHRoaXMuaW5zdGFuY2UuX2NyZWF0ZUNlbGxDb29yZHMoTyxYKSksdGhpcy5pbnN0YW5jZS52aWV3LnJlbmRlcigpLHRoaXMucHJlcGFyZUVkaXRvcigpfXRoaXMuYWN0aXZlRWRpdG9y'@;
put 'JiYoZCYmdGhpcy5hY3RpdmVFZGl0b3IuZW5hYmxlRnVsbEVkaXRNb2RlKCksdGhpcy5hY3RpdmVFZGl0b3IuYmVnaW5FZGl0aW5nKGEsZikpfWVsc2UgdGhpcy5jbGVhckFjdGl2ZUVkaXRvcigpfX0se2tleToiY2xvc2VFZGl0b3IiLHZhbHVlOmZ1bmN0aW9uKGEsZixkKXt0aGlzLmFjdGl2'@;
put 'ZUVkaXRvcj90aGlzLmFjdGl2ZUVkaXRvci5maW5pc2hFZGl0aW5nKGEsZixkKTpkJiZkKCExKX19LHtrZXk6ImNsb3NlRWRpdG9yQW5kU2F2ZUNoYW5nZXMiLHZhbHVlOmZ1bmN0aW9uKGEpe3RoaXMuY2xvc2VFZGl0b3IoITEsYSl9fSx7a2V5OiJjbG9zZUVkaXRvckFuZFJlc3RvcmVPcmln'@;
put 'aW5hbFZhbHVlIix2YWx1ZTpmdW5jdGlvbihhKXt0aGlzLmNsb3NlRWRpdG9yKCEwLGEpfX0se2tleToiY2xlYXJBY3RpdmVFZGl0b3IiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5hY3RpdmVFZGl0b3I9dm9pZCAwfX0se2tleToiaXNDZWxsRWRpdGFibGUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFy'@;
put 'IGE9dGhpcy5pbnN0YW5jZS5nZXRDZWxsRWRpdG9yKHRoaXMuY2VsbFByb3BlcnRpZXMpLGY9dGhpcy5pbnN0YW5jZS5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodCxoPWYuY29sLG09dGhpcy5pbnN0YW5jZSxPPW0uY29sdW1uSW5kZXhNYXBwZXIsWD1tLnJvd0luZGV4TWFwcGVy'@;
put 'LmlzSGlkZGVuKHRoaXMuaW5zdGFuY2UudG9QaHlzaWNhbFJvdyhmLnJvdykpfHxPLmlzSGlkZGVuKHRoaXMuaW5zdGFuY2UudG9QaHlzaWNhbENvbHVtbihoKSk7cmV0dXJuISh0aGlzLmNlbGxQcm9wZXJ0aWVzLnJlYWRPbmx5fHwhYXx8WCl9fSx7a2V5OiJtb3ZlU2VsZWN0aW9uQWZ0ZXJF'@;
put 'bnRlciIsdmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGY9ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMudGFibGVNZXRhLmVudGVyTW92ZXM/dGhpcy50YWJsZU1ldGEuZW50ZXJNb3ZlcyhldmVudCk6dGhpcy50YWJsZU1ldGEuZW50ZXJNb3ZlczthP3RoaXMuc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0'@;
put 'KC1mLnJvdywtZi5jb2wpOnRoaXMuc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KGYucm93LGYuY29sLCEwKX19LHtrZXk6Im9uQWZ0ZXJEb2N1bWVudEtleURvd24iLHZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBmPXRoaXM7aWYodGhpcy5pbnN0YW5jZS5pc0xpc3RlbmluZygpKXt2YXIgZD1hLmtl'@;
put 'eUNvZGU7aWYodGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZCgpKXt2YXIgaD0oYS5jdHJsS2V5fHxhLm1ldGFLZXkpJiYhYS5hbHRLZXk7dGhpcy5hY3RpdmVFZGl0b3ImJighdGhpcy5hY3RpdmVFZGl0b3J8fHRoaXMuYWN0aXZlRWRpdG9yLmlzV2FpdGluZygpKXx8RFkoZCl8fHgwZShkKXx8'@;
put 'aHx8dGhpcy5pc0VkaXRvck9wZW5lZCgpfHwodGhpcy5pbnN0YW5jZS5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKS5hZGRTaG9ydGN1dHMoW3trZXlzOltbIkFycm93VXAiXV0sY2FsbGJhY2s6ZnVuY3Rpb24oKXtmLmluc3RhbmNlLnNlbGVjdGlvbi50cmFuc2Zv'@;
put 'cm1TdGFydCgtMSwwKX19LHtrZXlzOltbIkFycm93RG93biJdXSxjYWxsYmFjazpmdW5jdGlvbigpe2YuaW5zdGFuY2Uuc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KDEsMCl9fSx7a2V5czpbWyJBcnJvd0xlZnQiXV0sY2FsbGJhY2s6ZnVuY3Rpb24oKXtmLmluc3RhbmNlLnNlbGVjdGlvbi50'@;
put 'cmFuc2Zvcm1TdGFydCgwLC0xKmYuaW5zdGFuY2UuZ2V0RGlyZWN0aW9uRmFjdG9yKCkpfX0se2tleXM6W1siQXJyb3dSaWdodCJdXSxjYWxsYmFjazpmdW5jdGlvbigpe2YuaW5zdGFuY2Uuc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KDAsZi5pbnN0YW5jZS5nZXREaXJlY3Rpb25GYWN0b3Io'@;
put 'KSl9fV0se3J1bk9ubHlJZjpmdW5jdGlvbigpe3JldHVybiBpbyhmLmluc3RhbmNlLmdldFNlbGVjdGVkKCkpfSxncm91cDpuUn0pLHRoaXMub3BlbkVkaXRvcigiIixhKSl9fX19LHtrZXk6Im9uQ2VsbERibENsaWNrIix2YWx1ZTpmdW5jdGlvbihhLGYsZCl7IlREIj09PWQubm9kZU5hbWUm'@;
put 'JnRoaXMub3BlbkVkaXRvcihudWxsLGEsITApfX0se2tleToiZGVzdHJveSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmRlc3Ryb3llZD0hMCx0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCl9fV0pLGx9KCksTjBlPW5ldyBXZWFrTWFwO05ZLmdldEluc3RhbmNlPWZ1bmN0aW9uKGwsYyxhKXt2'@;
put 'YXIgZj1OMGUuZ2V0KGwpO3JldHVybiBmfHwoZj1uZXcgTlkobCxjLGEpLE4wZS5zZXQobCxmKSksZn07Y29uc3QgcUdlPU5ZO2Z1bmN0aW9uIFZZKGwpe3JldHVybiBmdW5jdGlvbiBlJGUobCl7aWYoQXJyYXkuaXNBcnJheShsKSlyZXR1cm4gQlkobCl9KGwpfHxmdW5jdGlvbiBRR2UobCl7'@;
put 'aWYodHlwZW9mIFN5bWJvbDwidSImJm51bGwhPWxbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9bFsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKGwpfShsKXx8ZnVuY3Rpb24gSkdlKGwsYyl7aWYobCl7aWYoInN0cmluZyI9PXR5cGVvZiBsKXJldHVybiBCWShsLGMpO3ZhciBhPU9i'@;
put 'amVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsKS5zbGljZSg4LC0xKTtpZigiT2JqZWN0Ij09PWEmJmwuY29uc3RydWN0b3ImJihhPWwuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1hfHwiU2V0Ij09PWEpcmV0dXJuIEFycmF5LmZyb20obCk7aWYoIkFyZ3VtZW50cyI9PT1hfHwvXig/'@;
put 'OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChhKSlyZXR1cm4gQlkobCxjKX19KGwpfHxmdW5jdGlvbiBYR2UoKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRv'@;
put 'IGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBCWShsLGMpeyhudWxsPT1jfHxjPmwubGVuZ3RoKSYmKGM9bC5sZW5ndGgpO2Zvcih2YXIgYT0wLGY9bmV3IEFycmF5KGMpO2E8YzthKysp'@;
put 'ZlthXT1sW2FdO3JldHVybiBmfVQoOTAyMDIpLFQoMjc2MiksVCg1ODApLFQoNzE3NzIpLFQoMzU4MTApO3ZhciBWMGU9eyImbmJzcDsiOiIgIiwiJmFtcDsiOiImIiwiJmx0OyI6IjwiLCImZ3Q7IjoiPiJ9LHQkZT1uZXcgUmVnRXhwKE9iamVjdC5rZXlzKFYwZSkubWFwKGZ1bmN0aW9uKGwp'@;
put 'e3JldHVybiIoIi5jb25jYXQobCwiKSIpfSkuam9pbigifCIpLCJnaSIpO2Z1bmN0aW9uIGpZKGwpe2Zvcih2YXIgYz1sLmhhc0NvbEhlYWRlcnMoKSxhPWwuaGFzUm93SGVhZGVycygpLGY9W2M/LTE6MCxhPy0xOjAsbC5jb3VudFJvd3MoKS0xLGwuY291bnRDb2xzKCktMV0sZD1sLmdldERh'@;
put 'dGEuYXBwbHkobCxmKSxoPWQubGVuZ3RoLG09aD4wP2RbMF0ubGVuZ3RoOjAsXz1bIjx0YWJsZT4iLCI8L3RhYmxlPiJdLE89Yz9bIjx0aGVhZD4iLCI8L3RoZWFkPiJdOltdLFg9WyI8dGJvZHk+IiwiPC90Ym9keT4iXSxhZT1hPzE6MCxwZT1jPzE6MCxiZT0wO2JlPGg7YmUrPTEpe2Zvcih2'@;
put 'YXIgeGU9YyYmMD09PWJlLFZlPVtdLFplPTA7WmU8bTtaZSs9MSl7dmFyIGx0PSF4ZSYmYSYmMD09PVplLGR0PSIiO2lmKHhlKWR0PSI8dGg+Ii5jb25jYXQobC5nZXRDb2xIZWFkZXIoWmUtYWUpLCI8L3RoPiIpO2Vsc2UgaWYobHQpZHQ9Ijx0aD4iLmNvbmNhdChsLmdldFJvd0hlYWRlcihi'@;
put 'ZS1wZSksIjwvdGg+Iik7ZWxzZXt2YXIgZ3Q9ZFtiZV1bWmVdLGp0PWwuZ2V0Q2VsbE1ldGEoYmUtcGUsWmUtYWUpLFh0PWp0LnJvd3NwYW4seW49anQuY29sc3BhbjtpZighanQuaGlkZGVuKXt2YXIgUW49W107aWYoWHQmJlFuLnB1c2goJ3Jvd3NwYW49IicuY29uY2F0KFh0LCciJykpLHlu'@;
put 'JiZRbi5wdXNoKCdjb2xzcGFuPSInLmNvbmNhdCh5biwnIicpKSx3dShndCkpZHQ9Ijx0ZCAiLmNvbmNhdChRbi5qb2luKCIgIiksIj48L3RkPiIpO2Vsc2V7dmFyIE9yPWd0LnRvU3RyaW5nKCkucmVwbGFjZSgiPCIsIiZsdDsiKS5yZXBsYWNlKCI+IiwiJmd0OyIpLnJlcGxhY2UoLyg8YnIo'@;
put 'XHMqfFwvKT4oXHJcbnxcbik/fFxyXG58XG4pL2csIjxicj5cclxuIikucmVwbGFjZSgvXHgyMC9naSwiJm5ic3A7IikucmVwbGFjZSgvXHQvZ2ksIiYjOTsiKTtkdD0iPHRkICIuY29uY2F0KFFuLmpvaW4oIiAiKSwiPiIpLmNvbmNhdChPciwiPC90ZD4iKX19fVZlLnB1c2goZHQpfXZhciBW'@;
put 'cj1bIjx0cj4iXS5jb25jYXQoVmUsWyI8L3RyPiJdKS5qb2luKCIiKTt4ZT9PLnNwbGljZSgxLDAsVnIpOlguc3BsaWNlKC0xLDAsVnIpfXJldHVybiBfLnNwbGljZSgxLDAsTy5qb2luKCIiKSxYLmpvaW4oIiIpKSxfLmpvaW4oIiIpfWZ1bmN0aW9uIHpZKGwpe2Zvcih2YXIgYz1sLmxlbmd0'@;
put 'aCxhPVsiPHRhYmxlPiJdLGY9MDtmPGM7Zis9MSl7dmFyIGQ9bFtmXSxoPWQubGVuZ3RoLG09W107MD09PWYmJmEucHVzaCgiPHRib2R5PiIpO2Zvcih2YXIgXz0wO188aDtfKz0xKXt2YXIgTz1kW19dLFg9d3UoTyk/IiI6Ty50b1N0cmluZygpLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxh'@;
put 'Y2UoLz4vZywiJmd0OyIpLnJlcGxhY2UoLyg8YnIoXHMqfFwvKT4oXHJcbnxcbik/fFxyXG58XG4pL2csIjxicj5cclxuIikucmVwbGFjZSgvXHgyMHsyLH0vZ2ksZnVuY3Rpb24oYWUpe3JldHVybic8c3BhbiBzdHlsZT0ibXNvLXNwYWNlcnVuOiB5ZXMiPicuY29uY2F0KCImbmJzcDsiLnJl'@;
put 'cGVhdChhZS5sZW5ndGgtMSksIiA8L3NwYW4+Iil9KS5yZXBsYWNlKC9cdC9naSwiJiM5OyIpO20ucHVzaCgiPHRkPiIuY29uY2F0KFgsIjwvdGQ+IikpfWEucHVzaC5hcHBseShhLFsiPHRyPiJdLmNvbmNhdChtLFsiPC90cj4iXSkpLGYrMT09PWMmJmEucHVzaCgiPC90Ym9keT4iKX1yZXR1'@;
put 'cm4gYS5wdXNoKCI8L3RhYmxlPiIpLGEuam9pbigiIil9ZnVuY3Rpb24gQjBlKGwpe3ZhciBjPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpkb2N1bWVudCxhPXt9LGY9Yy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksZD1jLmNyZWF0ZUVs'@;
put 'ZW1lbnQoImRpdiIpO2YuYXBwZW5kQ2hpbGQoZCk7dmFyIGg9bDtpZigic3RyaW5nIj09dHlwZW9mIGgpe3ZhciBtPWgucmVwbGFjZSgvPHRkXGJbXj5dKj8+KFtcc1xTXSo/KTxcL1xzKnRkPi9nLGZ1bmN0aW9uKFd0KXt2YXIgd249V3QubWF0Y2goLzx0ZFxiW14+XSo/Pi9nKVswXSxTbj1X'@;
put 'dC5zdWJzdHJpbmcod24ubGVuZ3RoLFd0Lmxhc3RJbmRleE9mKCI8IikpLnJlcGxhY2UoLyg8KD8hYnIpKFtePl0rKT4pL2dpLCIiKTtyZXR1cm4iIi5jb25jYXQod24pLmNvbmNhdChTbikuY29uY2F0KCI8L3RkPiIpfSk7ZC5pbnNlcnRBZGphY2VudEhUTUwoImFmdGVyYmVnaW4iLCIiLmNv'@;
put 'bmNhdChtKSksaD1kLnF1ZXJ5U2VsZWN0b3IoInRhYmxlIil9aWYoaCYmZnVuY3Rpb24gbiRlKGwpe3JldHVybiJUQUJMRSI9PT0obCYmbC5ub2RlTmFtZXx8IiIpfShoKSl7dmFyIFplLF89ZC5xdWVyeVNlbGVjdG9yKCdtZXRhW25hbWUkPSJlbmVyYXRvciJdJyksTz1udWxsIT09aC5xdWVy'@;
put 'eVNlbGVjdG9yKCJ0Ym9keSB0aCIpLFg9aC5xdWVyeVNlbGVjdG9yKCJ0ciIpLGFlPVg/QXJyYXkuZnJvbShYLmNlbGxzKS5yZWR1Y2UoZnVuY3Rpb24oV3Qsd24pe3JldHVybiBXdCt3bi5jb2xTcGFufSwwKS0oTz8xOjApOjAscGU9aC50Rm9vdCYmQXJyYXkuZnJvbShoLnRGb290LnJvd3Mp'@;
put 'fHxbXSxiZT1bXSx4ZT0hMSxWZT0wO2lmKGgudEhlYWQpe3ZhciBsdD1BcnJheS5mcm9tKGgudEhlYWQucm93cykuZmlsdGVyKGZ1bmN0aW9uKFd0KXt2YXIgd249bnVsbCE9PVd0LnF1ZXJ5U2VsZWN0b3IoInRkIik7cmV0dXJuIHduJiZiZS5wdXNoKFd0KSwhd259KTt4ZT0oVmU9bHQubGVu'@;
put 'Z3RoKT4wLFZlPjE/YS5uZXN0ZWRIZWFkZXJzPUFycmF5LmZyb20obHQpLnJlZHVjZShmdW5jdGlvbihXdCx3bil7dmFyIFNuPUFycmF5LmZyb20od24uY2VsbHMpLnJlZHVjZShmdW5jdGlvbihicixkcixMcil7aWYoTyYmMD09PUxyKXJldHVybiBicjt2YXIgTnI9ZHIuY29sU3BhbixkaT1k'@;
put 'ci5pbm5lckhUTUw7cmV0dXJuIGJyLnB1c2goTnI+MT97bGFiZWw6ZGksY29sc3BhbjpOcn06ZGkpLGJyfSxbXSk7cmV0dXJuIFd0LnB1c2goU24pLFd0fSxbXSk6eGUmJihhLmNvbEhlYWRlcnM9QXJyYXkuZnJvbShsdFswXS5jaGlsZHJlbikucmVkdWNlKGZ1bmN0aW9uKFd0LHduLFNuKXty'@;
put 'ZXR1cm4gTyYmMD09PVNufHxXdC5wdXNoKHduLmlubmVySFRNTCksV3R9LFtdKSl9YmUubGVuZ3RoJiYoYS5maXhlZFJvd3NUb3A9YmUubGVuZ3RoKSxwZS5sZW5ndGgmJihhLmZpeGVkUm93c0JvdHRvbT1wZS5sZW5ndGgpO3ZhciBkdD1bXS5jb25jYXQoYmUsVlkoQXJyYXkuZnJvbShoLnRC'@;
put 'b2RpZXMpLnJlZHVjZShmdW5jdGlvbihXdCx3bil7cmV0dXJuIFd0LnB1c2guYXBwbHkoV3QsVlkoQXJyYXkuZnJvbSh3bi5yb3dzKSkpLFd0fSxbXSkpLFZZKHBlKSk7WmU9ZHQubGVuZ3RoO2Zvcih2YXIgZ3Q9bmV3IEFycmF5KFplKSxqdD0wO2p0PFplO2p0KyspZ3RbanRdPW5ldyBBcnJh'@;
put 'eShhZSk7Zm9yKHZhciBybj1bXSxYdD1bXSx5bj0wO3luPFplO3luKyspZm9yKHZhciBPcj1BcnJheS5mcm9tKGR0W3luXS5jZWxscyksVnI9T3IubGVuZ3RoLFpyPTA7WnI8VnI7WnIrKyl7dmFyIGlyPU9yW1pyXSxzaT1pci5ub2RlTmFtZSxBcj1pci5pbm5lckhUTUwsRW49aXIucm93U3Bh'@;
put 'bixUcj1pci5jb2xTcGFuLFZuPWd0W3luXS5maW5kSW5kZXgoZnVuY3Rpb24oV3Qpe3JldHVybiB2b2lkIDA9PT1XdH0pO2lmKCJURCI9PT1zaSl7aWYoRW4+MXx8VHI+MSl7Zm9yKHZhciBjcj15bjtjcjx5bitFbjtjcisrKWlmKGNyPFplKWZvcih2YXIgQ3I9Vm47Q3I8Vm4rVHI7Q3IrKyln'@;
put 'dFtjcl1bQ3JdPW51bGw7dmFyIFlyPWlyLmdldEF0dHJpYnV0ZSgic3R5bGUiKTtZciYmWXIuaW5jbHVkZXMoIm1zby1pZ25vcmU6Y29sc3BhbiIpfHxybi5wdXNoKHtjb2w6Vm4scm93OnluLHJvd3NwYW46RW4sY29sc3BhbjpUcn0pfXZhciBGdD0iIjtGdD1fJiYvZXhjZWwvZ2kudGVzdChf'@;
put 'LmNvbnRlbnQpP0FyLnJlcGxhY2UoL1tcclxuXVtceDIwXXswLDJ9L2csIiAiKS5yZXBsYWNlKC88YnIoXHMqfFwvKT5bXHJcbl0/W1x4MjBdezAsM30vZ2ltLCJcclxuIik6QXIucmVwbGFjZSgvPGJyKFxzKnxcLyk+W1xyXG5dPy9naW0sIlxyXG4iKSxndFt5bl1bVm5dPUZ0LnJlcGxhY2Uo'@;
put 'dCRlLGZ1bmN0aW9uKFd0KXtyZXR1cm4gVjBlW1d0XX0pfWVsc2UgWHQucHVzaChBcil9cmV0dXJuIHJuLmxlbmd0aCYmKGEubWVyZ2VDZWxscz1ybiksWHQubGVuZ3RoJiYoYS5yb3dIZWFkZXJzPVh0KSxndC5sZW5ndGgmJihhLmRhdGE9Z3QpLGF9fWZ1bmN0aW9uIFVZKGwsYyl7KG51bGw9'@;
put 'PWN8fGM+bC5sZW5ndGgpJiYoYz1sLmxlbmd0aCk7Zm9yKHZhciBhPTAsZj1uZXcgQXJyYXkoYyk7YTxjO2ErKylmW2FdPWxbYV07cmV0dXJuIGZ9ZnVuY3Rpb24gWlkobCl7cmV0dXJuKFpZPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJh'@;
put 'dG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gdDAobCl7'@;
put 'dmFyIGM9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdLGE9WlkobCk7aWYoIm51bWJlciI9PT1hKXJldHVybiFpc05hTihsKSYmaXNGaW5pdGUobCk7aWYoInN0cmluZyI9PT1hKXtpZigwPT09bC5sZW5ndGgpcmV0dXJuITE7aWYoMT09'@;
put 'PWwubGVuZ3RoKXJldHVybi9cZC8udGVzdChsKTt2YXIgZj1BcnJheS5mcm9tKG5ldyBTZXQoWyIuIl0uY29uY2F0KGZ1bmN0aW9uIHIkZShsKXtyZXR1cm4gZnVuY3Rpb24gbCRlKGwpe2lmKEFycmF5LmlzQXJyYXkobCkpcmV0dXJuIFVZKGwpfShsKXx8ZnVuY3Rpb24gYSRlKGwpe2lmKHR5'@;
put 'cGVvZiBTeW1ib2w8InUiJiZudWxsIT1sW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWxbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbShsKX0obCl8fGZ1bmN0aW9uIG8kZShsLGMpe2lmKGwpe2lmKCJzdHJpbmciPT10eXBlb2YgbClyZXR1cm4gVVkobCxjKTt2YXIgYT1PYmplY3Qu'@;
put 'cHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobCkuc2xpY2UoOCwtMSk7aWYoIk9iamVjdCI9PT1hJiZsLmNvbnN0cnVjdG9yJiYoYT1sLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09YXx8IlNldCI9PT1hKXJldHVybiBBcnJheS5mcm9tKGwpO2lmKCJBcmd1bWVudHMiPT09YXx8L14oPzpVaXxJ'@;
put 'KW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QoYSkpcmV0dXJuIFVZKGwsYyl9fShsKXx8ZnVuY3Rpb24gaSRlKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBp'@;
put 'dGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9KGMpKSkpLm1hcChmdW5jdGlvbihkKXtyZXR1cm4iXFwiLmNvbmNhdChkKX0pLmpvaW4oInwiKTtyZXR1cm4gbmV3IFJlZ0V4cCgiXlsrLV0/XFxzKigoKCIuY29u'@;
put 'Y2F0KGYsIik/XFxkKygoIikuY29uY2F0KGYsIilcXGQrKT8oZVsrLV0/XFxkKyk/KXwoMHhbYS1mXFxkXSspKSQiKSwiaSIpLnRlc3QobC50cmltKCkpfXJldHVybiJvYmplY3QiPT09YSYmISghbHx8Im51bWJlciIhPXR5cGVvZiBsLnZhbHVlT2YoKXx8bCBpbnN0YW5jZW9mIERhdGUpfWZ1'@;
put 'bmN0aW9uIGowZShsKXtyZXR1cm4gdDAobCxbIiwiXSl9ZnVuY3Rpb24gX28obCxjLGEpe3ZhciBmPS0xO2ZvcigiZnVuY3Rpb24iPT10eXBlb2YgYz8oYT1jLGM9bCk6Zj1sLTE7KytmPD1jJiYhMSE9PWEoZik7KTt9ZnVuY3Rpb24gclIobCxjLGEpe3ZhciBmPWwrMTtmb3IoImZ1bmN0aW9u'@;
put 'Ij09dHlwZW9mIGMmJihhPWMsYz0wKTstLWY+PWMmJiExIT09YShmKTspO31mdW5jdGlvbiBZWShsLGMpe3JldHVybiBjPXBhcnNlSW50KGMudG9TdHJpbmcoKS5yZXBsYWNlKCIlIiwiIiksMTApLGM9aXNOYU4oYyk/MDpjLHBhcnNlSW50KGwqYy8xMDAsMTApfWZ1bmN0aW9uIHowZShsLGMp'@;
put 'e2lmKGwpe2lmKCJzdHJpbmciPT10eXBlb2YgbClyZXR1cm4gV1kobCxjKTt2YXIgYT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobCkuc2xpY2UoOCwtMSk7aWYoIk9iamVjdCI9PT1hJiZsLmNvbnN0cnVjdG9yJiYoYT1sLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09YXx8IlNl'@;
put 'dCI9PT1hKXJldHVybiBBcnJheS5mcm9tKGwpO2lmKCJBcmd1bWVudHMiPT09YXx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QoYSkpcmV0dXJuIFdZKGwsYyl9fWZ1bmN0aW9uIFdZKGwsYyl7KG51bGw9PWN8fGM+bC5sZW5ndGgpJiYoYz1sLmxlbmd0'@;
put 'aCk7Zm9yKHZhciBhPTAsZj1uZXcgQXJyYXkoYyk7YTxjO2ErKylmW2FdPWxbYV07cmV0dXJuIGZ9dmFyIFUwZT1uZXcgTWFwKFtbImFzYyIsWy0xLDFdXSxbImRlc2MiLFsxLC0xXV1dKSx2JGU9ZnVuY3Rpb24oYyl7cmV0dXJuIlRoZSBwcmlvcml0eSAnIi5jb25jYXQoYywiJyBpcyBhbHJl'@;
put 'YWR5IGRlY2xhcmVkIGluIGEgbWFwLiIpfSx5JGU9ZnVuY3Rpb24oYyl7cmV0dXJuIlRoZSBwcmlvcml0eSAnIi5jb25jYXQoYywiJyBpcyBub3QgYSBudW1iZXIuIil9O2Z1bmN0aW9uIFowZShsLGMpe3JldHVybiBmdW5jdGlvbiBFJGUobCl7aWYoQXJyYXkuaXNBcnJheShsKSlyZXR1cm4g'@;
put 'bH0obCl8fGZ1bmN0aW9uIGskZShsLGMpe3ZhciBhPW51bGw9PWw/bnVsbDp0eXBlb2YgU3ltYm9sPCJ1IiYmbFtTeW1ib2wuaXRlcmF0b3JdfHxsWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9YSl7dmFyIGYsZCxoLG0sXz1bXSxPPSEwLFg9ITE7dHJ5e2lmKGg9KGE9YS5jYWxsKGwpKS5uZXh0'@;
put 'LDA9PT1jKXtpZihPYmplY3QoYSkhPT1hKXJldHVybjtPPSExfWVsc2UgZm9yKDshKE89KGY9aC5jYWxsKGEpKS5kb25lKSYmKF8ucHVzaChmLnZhbHVlKSxfLmxlbmd0aCE9PWMpO089ITApO31jYXRjaChhZSl7WD0hMCxkPWFlfWZpbmFsbHl7dHJ5e2lmKCFPJiZudWxsIT1hLnJldHVybiYm'@;
put 'KG09YS5yZXR1cm4oKSxPYmplY3QobSkhPT1tKSlyZXR1cm59ZmluYWxseXtpZihYKXRocm93IGR9fXJldHVybiBffX0obCxjKXx8WTBlKGwsYyl8fGZ1bmN0aW9uIE0kZSgpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUg'@;
put 'aW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gWTBlKGwsYyl7aWYobCl7aWYoInN0cmluZyI9PXR5cGVvZiBsKXJldHVybiAkWShsLGMpO3ZhciBh'@;
put 'PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsKS5zbGljZSg4LC0xKTtpZigiT2JqZWN0Ij09PWEmJmwuY29uc3RydWN0b3ImJihhPWwuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1hfHwiU2V0Ij09PWEpcmV0dXJuIEFycmF5LmZyb20obCk7aWYoIkFyZ3VtZW50cyI9PT1hfHwv'@;
put 'Xig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChhKSlyZXR1cm4gJFkobCxjKX19ZnVuY3Rpb24gJFkobCxjKXsobnVsbD09Y3x8Yz5sLmxlbmd0aCkmJihjPWwubGVuZ3RoKTtmb3IodmFyIGE9MCxmPW5ldyBBcnJheShjKTthPGM7YSsrKWZbYV09bFthXTty'@;
put 'ZXR1cm4gZn1UKDU0Njc5KTt2YXIgeCRlPWZ1bmN0aW9uKGMpe3JldHVybiJUaGUgaWQgJyIuY29uY2F0KGMsIicgaXMgYWxyZWFkeSBkZWNsYXJlZCBpbiBhIG1hcC4iKX07ZnVuY3Rpb24gaVIoKXt2YXIgYz0oYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJn'@;
put 'dW1lbnRzWzBdOnt9KS5lcnJvcklkRXhpc3RzLGE9bmV3IE1hcDtmdW5jdGlvbiBPKCl7cmV0dXJuIGZ1bmN0aW9uIF8kZShsKXtyZXR1cm4gZnVuY3Rpb24gUyRlKGwpe2lmKEFycmF5LmlzQXJyYXkobCkpcmV0dXJuICRZKGwpfShsKXx8ZnVuY3Rpb24gQyRlKGwpe2lmKHR5cGVvZiBTeW1i'@;
put 'b2w8InUiJiZudWxsIT1sW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWxbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbShsKX0obCl8fFkwZShsKXx8ZnVuY3Rpb24gdyRlKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUg'@;
put 'aW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9KGEpfWZ1bmN0aW9uIFgoYWUpe3JldHVybiBhLmhhcyhhZSl9cmV0dXJuIGM9UGwoYyk/Yzp4JGUse2FkZEl0ZW06'@;
put 'ZnVuY3Rpb24gZihhZSxwZSl7aWYoWChhZSkpdGhyb3cgbmV3IEVycm9yKGMoYWUpKTthLnNldChhZSxwZSl9LGNsZWFyOmZ1bmN0aW9uIGgoKXthLmNsZWFyKCl9LGdldElkOmZ1bmN0aW9uIG0oYWUpe3ZhciBwZT1PKCkuZmluZChmdW5jdGlvbihWZSl7dmFyIFplPVowZShWZSwyKTtyZXR1'@;
put 'cm4gYWU9PT1aZVsxXSYmWmVbMF19KXx8W251bGxdO3JldHVybiBaMGUocGUsMSlbMF19LGdldEl0ZW06ZnVuY3Rpb24gXyhhZSl7cmV0dXJuIGEuZ2V0KGFlKX0sZ2V0SXRlbXM6TyxoYXNJdGVtOlgscmVtb3ZlSXRlbTpmdW5jdGlvbiBkKGFlKXtyZXR1cm4gYS5kZWxldGUoYWUpfX19ZnVu'@;
put 'Y3Rpb24gS1kobCxjKXsobnVsbD09Y3x8Yz5sLmxlbmd0aCkmJihjPWwubGVuZ3RoKTtmb3IodmFyIGE9MCxmPW5ldyBBcnJheShjKTthPGM7YSsrKWZbYV09bFthXTtyZXR1cm4gZn12YXIgUiRlPWZ1bmN0aW9uKGMpe3JldHVybiInIi5jb25jYXQoYywiJyB2YWx1ZSBpcyBhbHJlYWR5IGRl'@;
put 'Y2xhcmVkIGluIGEgdW5pcXVlIHNldC4iKX07ZnVuY3Rpb24gVzBlKGwpe3JldHVybiBmdW5jdGlvbiBqJGUobCl7aWYoQXJyYXkuaXNBcnJheShsKSlyZXR1cm4gcVkobCl9KGwpfHxmdW5jdGlvbiBCJGUobCl7aWYodHlwZW9mIFN5bWJvbDwidSImJm51bGwhPWxbU3ltYm9sLml0ZXJhdG9y'@;
put 'XXx8bnVsbCE9bFsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKGwpfShsKXx8RzBlKGwpfHxmdW5jdGlvbiBWJGUoKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJh'@;
put 'YmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBHMGUobCxjKXtpZihsKXtpZigic3RyaW5nIj09dHlwZW9mIGwpcmV0dXJuIHFZKGwsYyk7dmFyIGE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxs'@;
put 'KGwpLnNsaWNlKDgsLTEpO2lmKCJPYmplY3QiPT09YSYmbC5jb25zdHJ1Y3RvciYmKGE9bC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PWF8fCJTZXQiPT09YSlyZXR1cm4gQXJyYXkuZnJvbShsKTtpZigiQXJndW1lbnRzIj09PWF8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBl'@;
put 'ZCk/QXJyYXkkLy50ZXN0KGEpKXJldHVybiBxWShsLGMpfX1mdW5jdGlvbiBxWShsLGMpeyhudWxsPT1jfHxjPmwubGVuZ3RoKSYmKGM9bC5sZW5ndGgpO2Zvcih2YXIgYT0wLGY9bmV3IEFycmF5KGMpO2E8YzthKyspZlthXT1sW2FdO3JldHVybiBmfXZhciBYWT1mdW5jdGlvbihjKXtyZXR1'@;
put 'cm4nVGhlcmUgaXMgYWxyZWFkeSByZWdpc3RlcmVkICInLmNvbmNhdChjLCciIHBsdWdpbi4nKX0sJDBlPWZ1bmN0aW9uIGIkZSgpe3ZhciBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSxjPWwuZXJyb3JQcmlvcml0eUV4aXN0cyxh'@;
put 'PWwuZXJyb3JQcmlvcml0eU5hTixmPW5ldyBNYXA7cmV0dXJuIGM9UGwoYyk/Yzp2JGUsYT1QbChhKT9hOnkkZSx7YWRkSXRlbTpmdW5jdGlvbiBkKG0sXyl7aWYoIXQwKG0pKXRocm93IG5ldyBFcnJvcihhKG0pKTtpZihmLmhhcyhtKSl0aHJvdyBuZXcgRXJyb3IoYyhtKSk7Zi5zZXQobSxf'@;
put 'KX0sZ2V0SXRlbXM6ZnVuY3Rpb24gaCgpe3ZhciBPPWZ1bmN0aW9uIGQkZShsLGMpe3JldHVybiBmdW5jdGlvbiBtJGUobCl7aWYoQXJyYXkuaXNBcnJheShsKSlyZXR1cm4gbH0obCl8fGZ1bmN0aW9uIHAkZShsLGMpe3ZhciBhPW51bGw9PWw/bnVsbDp0eXBlb2YgU3ltYm9sPCJ1IiYmbFtT'@;
put 'eW1ib2wuaXRlcmF0b3JdfHxsWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9YSl7dmFyIGYsZCxoLG0sXz1bXSxPPSEwLFg9ITE7dHJ5e2lmKGg9KGE9YS5jYWxsKGwpKS5uZXh0LDA9PT1jKXtpZihPYmplY3QoYSkhPT1hKXJldHVybjtPPSExfWVsc2UgZm9yKDshKE89KGY9aC5jYWxsKGEpKS5k'@;
put 'b25lKSYmKF8ucHVzaChmLnZhbHVlKSxfLmxlbmd0aCE9PWMpO089ITApO31jYXRjaChhZSl7WD0hMCxkPWFlfWZpbmFsbHl7dHJ5e2lmKCFPJiZudWxsIT1hLnJldHVybiYmKG09YS5yZXR1cm4oKSxPYmplY3QobSkhPT1tKSlyZXR1cm59ZmluYWxseXtpZihYKXRocm93IGR9fXJldHVybiBf'@;
put 'fX0obCxjKXx8ejBlKGwsYyl8fGZ1bmN0aW9uIGgkZSgpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEg'@;
put 'W1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9KFUwZS5nZXQoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiJhc2MiKXx8VTBlLmdldCgiYXNjIiksMiksWD1PWzBdLGFlPU9bMV07cmV0dXJuIGZ1bmN0aW9uIHMkZShsKXtyZXR1'@;
put 'cm4gZnVuY3Rpb24gZiRlKGwpe2lmKEFycmF5LmlzQXJyYXkobCkpcmV0dXJuIFdZKGwpfShsKXx8ZnVuY3Rpb24gYyRlKGwpe2lmKHR5cGVvZiBTeW1ib2w8InUiJiZudWxsIT1sW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWxbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbShsKX0o'@;
put 'bCl8fHowZShsKXx8ZnVuY3Rpb24gdSRlKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVy'@;
put 'YXRvcl0oKSBtZXRob2QuIil9KCl9KGYpLnNvcnQoZnVuY3Rpb24ocGUsYmUpe3JldHVybiBwZVswXTxiZVswXT9YOmFlfSkubWFwKGZ1bmN0aW9uKHBlKXtyZXR1cm4gcGVbMV19KX19fSh7ZXJyb3JQcmlvcml0eUV4aXN0czpmdW5jdGlvbihjKXtyZXR1cm4nVGhlcmUgaXMgYWxyZWFkeSBy'@;
put 'ZWdpc3RlcmVkIHBsdWdpbiBvbiBwcmlvcml0eSAiJy5jb25jYXQoYywnIi4nKX0sZXJyb3JQcmlvcml0eU5hTjpmdW5jdGlvbihjKXtyZXR1cm4nVGhlIHByaW9yaXR5ICInLmNvbmNhdChjLCciIGlzIG5vdCBhIG51bWJlci4nKX19KSxLMGU9ZnVuY3Rpb24gTCRlKCl7dmFyIGM9KGFyZ3Vt'@;
put 'ZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSkuZXJyb3JJdGVtRXhpc3RzLGE9bmV3IFNldDtyZXR1cm4gYz1QbChjKT9jOlIkZSx7YWRkSXRlbTpmdW5jdGlvbiBmKG0pe2lmKGEuaGFzKG0pKXRocm93IG5ldyBFcnJvcihjKG0pKTthLmFkZCht'@;
put 'KX0sY2xlYXI6ZnVuY3Rpb24gaCgpe2EuY2xlYXIoKX0sZ2V0SXRlbXM6ZnVuY3Rpb24gZCgpe3JldHVybiBmdW5jdGlvbiBBJGUobCl7cmV0dXJuIGZ1bmN0aW9uIEkkZShsKXtpZihBcnJheS5pc0FycmF5KGwpKXJldHVybiBLWShsKX0obCl8fGZ1bmN0aW9uIEQkZShsKXtpZih0eXBlb2Yg'@;
put 'U3ltYm9sPCJ1IiYmbnVsbCE9bFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1sWyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20obCl9KGwpfHxmdW5jdGlvbiBPJGUobCxjKXtpZihsKXtpZigic3RyaW5nIj09dHlwZW9mIGwpcmV0dXJuIEtZKGwsYyk7dmFyIGE9T2JqZWN0LnByb3Rv'@;
put 'dHlwZS50b1N0cmluZy5jYWxsKGwpLnNsaWNlKDgsLTEpO2lmKCJPYmplY3QiPT09YSYmbC5jb25zdHJ1Y3RvciYmKGE9bC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PWF8fCJTZXQiPT09YSlyZXR1cm4gQXJyYXkuZnJvbShsKTtpZigiQXJndW1lbnRzIj09PWF8fC9eKD86VWl8SSludCg/'@;
put 'Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KGEpKXJldHVybiBLWShsLGMpfX0obCl8fGZ1bmN0aW9uIFQkZSgpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFi'@;
put 'bGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfShhKX19fSh7ZXJyb3JJdGVtRXhpc3RzOlhZfSksSlk9aVIoe2Vycm9ySWRFeGlzdHM6WFl9KTtmdW5jdGlvbiBRWSgpe3JldHVybltdLmNvbmNhdChXMGUoJDBlLmdldEl0'@;
put 'ZW1zKCkpLFcwZShLMGUuZ2V0SXRlbXMoKSkpfWZ1bmN0aW9uIGVNKGwpe3ZhciBjPUFjKGwpO3JldHVybiBKWS5nZXRJdGVtKGMpfWZ1bmN0aW9uIFVhKGwsYyxhKXt2YXIgZj1mdW5jdGlvbiBXJGUobCxjLGEpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBsJiYobD0oYz1sKS5QTFVHSU5f'@;
put 'S0VZLGE9Yy5QTFVHSU5fUFJJT1JJVFkpLFtsLGMsYV19KGwsYyxhKSxkPWZ1bmN0aW9uIFAkZShsLGMpe3JldHVybiBmdW5jdGlvbiBOJGUobCl7aWYoQXJyYXkuaXNBcnJheShsKSlyZXR1cm4gbH0obCl8fGZ1bmN0aW9uIEgkZShsLGMpe3ZhciBhPW51bGw9PWw/bnVsbDp0eXBlb2YgU3lt'@;
put 'Ym9sPCJ1IiYmbFtTeW1ib2wuaXRlcmF0b3JdfHxsWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9YSl7dmFyIGYsZCxoLG0sXz1bXSxPPSEwLFg9ITE7dHJ5e2lmKGg9KGE9YS5jYWxsKGwpKS5uZXh0LDA9PT1jKXtpZihPYmplY3QoYSkhPT1hKXJldHVybjtPPSExfWVsc2UgZm9yKDshKE89KGY9'@;
put 'aC5jYWxsKGEpKS5kb25lKSYmKF8ucHVzaChmLnZhbHVlKSxfLmxlbmd0aCE9PWMpO089ITApO31jYXRjaChhZSl7WD0hMCxkPWFlfWZpbmFsbHl7dHJ5e2lmKCFPJiZudWxsIT1hLnJldHVybiYmKG09YS5yZXR1cm4oKSxPYmplY3QobSkhPT1tKSlyZXR1cm59ZmluYWxseXtpZihYKXRocm93'@;
put 'IGR9fXJldHVybiBffX0obCxjKXx8RzBlKGwsYyl8fGZ1bmN0aW9uIEYkZSgpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMg'@;
put 'bXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9KGYsMyk7Yz1kWzFdLGE9ZFsyXSx2b2lkIDA9PT1lTShsPWRbMF0pJiZmdW5jdGlvbiBZJGUobCxjLGEpe3ZhciBmPUFjKGwpO2lmKEpZLmhhc0l0ZW0oZikpdGhyb3cgbmV3IEVycm9yKFhZKGYpKTt2b2lkIDA9'@;
put 'PT1hP0swZS5hZGRJdGVtKGYpOiQwZS5hZGRJdGVtKGEsZiksSlkuYWRkSXRlbShmLGMpfShsLGMsYSl9dmFyIHRNPUZmKCJyZW5kZXJlcnMiKSxHJGU9dE0ucmVnaXN0ZXIsJCRlPXRNLmdldEl0ZW0scTBlPXRNLmhhc0l0ZW0sSyRlPXRNLmdldE5hbWVzO2Z1bmN0aW9uIG9SKGwpe2lmKCJm'@;
put 'dW5jdGlvbiI9PXR5cGVvZiBsKXJldHVybiBsO2lmKCFxMGUobCkpdGhyb3cgRXJyb3IoJ05vIHJlZ2lzdGVyZWQgcmVuZGVyZXIgZm91bmQgdW5kZXIgIicuY29uY2F0KGwsJyIgbmFtZScpKTtyZXR1cm4gJCRlKGwpfWZ1bmN0aW9uIE5oKGwsYyl7InN0cmluZyIhPXR5cGVvZiBsJiYobD0o'@;
put 'Yz1sKS5SRU5ERVJFUl9UWVBFKSxHJGUobCxjKX12YXIgbk09RmYoInZhbGlkYXRvcnMiKSxxJGU9bk0ucmVnaXN0ZXIsWCRlPW5NLmdldEl0ZW0sWDBlPW5NLmhhc0l0ZW0sSiRlPW5NLmdldE5hbWVzO2Z1bmN0aW9uIGVXKGwpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBsKXJldHVybiBsO2lm'@;
put 'KCFYMGUobCkpdGhyb3cgRXJyb3IoJ05vIHJlZ2lzdGVyZWQgdmFsaWRhdG9yIGZvdW5kIHVuZGVyICInLmNvbmNhdChsLCciIG5hbWUnKSk7cmV0dXJuIFgkZShsKX1mdW5jdGlvbiBVNyhsLGMpeyJzdHJpbmciIT10eXBlb2YgbCYmKGw9KGM9bCkuVkFMSURBVE9SX1RZUEUpLHEkZShsLGMp'@;
put 'fWZ1bmN0aW9uIHJNKGwpe3JldHVybihyTT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZj'@;
put 'LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIEowZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJh'@;
put 'YmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsdEtlKGYua2V5KSxmKX19ZnVuY3Rpb24gdEtlKGwpe3ZhciBjPWZ1bmN0aW9uIG5LZShsLGMpe2lmKCJvYmplY3QiIT09ck0obCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3lt'@;
put 'Ym9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09ck0oZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4o'@;
put 'InN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PXJNKGMpP2M6U3RyaW5nKGMpfVQoMTYxNjEpLFQoOTE2ODMpO3ZhciBaNz1uZXcgV2Vha01hcCxyS2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKGMsYSxmLGQsaCxtKXt2YXIgXz1hcmd1'@;
put 'bWVudHMubGVuZ3RoPjYmJnZvaWQgMCE9PWFyZ3VtZW50c1s2XT9hcmd1bWVudHNbNl06bnVsbDsoZnVuY3Rpb24gUSRlKGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLGwpLHRo'@;
put 'aXMud3RTZXR0aW5ncz1mLHRoaXMuZG9tQmluZGluZ3M9YSx0aGlzLnd0VGFibGU9aCx0aGlzLnNlbGVjdGlvbnM9bSx0aGlzLnBhcmVudD1fLHRoaXMuZXZlbnRNYW5hZ2VyPWQsdGhpcy5mYWNhZGVHZXR0ZXI9YyxaNy5zZXQodGhpcyx7c2VsZWN0ZWRDZWxsQmVmb3JlVG91Y2hFbmQ6dm9p'@;
put 'ZCAwLGRibENsaWNrVGltZW91dDpbbnVsbCxudWxsXSxkYmxDbGlja09yaWdpbjpbbnVsbCxudWxsXX0pLHRoaXMucmVnaXN0ZXJFdmVudHMoKX1yZXR1cm4gZnVuY3Rpb24gZUtlKGwsYyxhKXtjJiZKMGUobC5wcm90b3R5cGUsYyksYSYmSjBlKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5'@;
put 'KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGwsW3trZXk6InJlZ2lzdGVyRXZlbnRzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXM7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLnd0VGFibGUuaG9sZGVyLCJjb250ZXh0bWVudSIsZnVuY3Rpb24oaCl7'@;
put 'cmV0dXJuIGEub25Db250ZXh0TWVudShoKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy53dFRhYmxlLlRBQkxFLCJtb3VzZW92ZXIiLGZ1bmN0aW9uKGgpe3JldHVybiBhLm9uTW91c2VPdmVyKGgpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5l'@;
put 'cih0aGlzLnd0VGFibGUuVEFCTEUsIm1vdXNlb3V0IixmdW5jdGlvbihoKXtyZXR1cm4gYS5vbk1vdXNlT3V0KGgpfSk7dmFyIGY9ZnVuY3Rpb24oKXthLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEud3RUYWJsZS5ob2xkZXIsInRvdWNoc3RhcnQiLGZ1bmN0aW9uKG0pe3JldHVy'@;
put 'biBhLm9uVG91Y2hTdGFydChtKX0pLGEuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYS53dFRhYmxlLmhvbGRlciwidG91Y2hlbmQiLGZ1bmN0aW9uKG0pe3JldHVybiBhLm9uVG91Y2hFbmQobSl9KSxhLm1vbWVudHVtU2Nyb2xsaW5nfHwoYS5tb21lbnR1bVNjcm9sbGluZz17fSks'@;
put 'YS5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLnd0VGFibGUuaG9sZGVyLCJzY3JvbGwiLGZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KGEubW9tZW50dW1TY3JvbGxpbmcuX3RpbWVvdXQpLGEubW9tZW50dW1TY3JvbGxpbmcub25nb2luZ3x8YS53dFNldHRpbmdzLmdldFNldHRpbmco'@;
put 'Im9uQmVmb3JlVG91Y2hTY3JvbGwiKSxhLm1vbWVudHVtU2Nyb2xsaW5nLm9uZ29pbmc9ITAsYS5tb21lbnR1bVNjcm9sbGluZy5fdGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YS50b3VjaEFwcGxpZWR8fChhLm1vbWVudHVtU2Nyb2xsaW5nLm9uZ29pbmc9ITEsYS53dFNldHRpbmdz'@;
put 'LmdldFNldHRpbmcoIm9uQWZ0ZXJNb21lbnR1bVNjcm9sbCIpKX0sMjAwKX0pfTtQZCgpP2YoKTooblkoKSYmZigpLGEuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYS53dFRhYmxlLmhvbGRlciwibW91c2V1cCIsZnVuY3Rpb24obSl7cmV0dXJuIGEub25Nb3VzZVVwKG0pfSksYS5l'@;
put 'dmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLnd0VGFibGUuaG9sZGVyLCJtb3VzZWRvd24iLGZ1bmN0aW9uKG0pe3JldHVybiBhLm9uTW91c2VEb3duKG0pfSkpfX0se2tleToic2VsZWN0ZWRDZWxsV2FzVG91Y2hlZCIsdmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGY9WjcuZ2V0KHRoaXMp'@;
put 'LGg9dGhpcy5wYXJlbnRDZWxsKGEpLmNvb3JkcztpZihmLnNlbGVjdGVkQ2VsbEJlZm9yZVRvdWNoRW5kJiZoKXt2YXIgbT1baC5yb3csZi5zZWxlY3RlZENlbGxCZWZvcmVUb3VjaEVuZC5mcm9tLnJvd10sWD1baC5jb2wsZi5zZWxlY3RlZENlbGxCZWZvcmVUb3VjaEVuZC5mcm9tLmNvbF07'@;
put 'cmV0dXJuIG1bMF09PT1tWzFdJiZYWzBdPT09WFsxXX1yZXR1cm4hMX19LHtrZXk6InBhcmVudENlbGwiLHZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBmPXt9LGg9elMoYSxbIlREIiwiVEgiXSx0aGlzLnd0VGFibGUuVEFCTEUpO3JldHVybiBoPyhmLmNvb3Jkcz10aGlzLnd0VGFibGUuZ2V0Q29v'@;
put 'cmRzKGgpLGYuVEQ9aCk6WW8oYSwid3RCb3JkZXIiKSYmWW8oYSwiY3VycmVudCIpPyhmLmNvb3Jkcz10aGlzLnNlbGVjdGlvbnMuZ2V0Q2VsbCgpLmNlbGxSYW5nZS5oaWdobGlnaHQsZi5URD10aGlzLnd0VGFibGUuZ2V0Q2VsbChmLmNvb3JkcykpOllvKGEsInd0Qm9yZGVyIikmJllvKGEs'@;
put 'ImFyZWEiKSYmdGhpcy5zZWxlY3Rpb25zLmNyZWF0ZU9yR2V0QXJlYSgpLmNlbGxSYW5nZSYmKGYuY29vcmRzPXRoaXMuc2VsZWN0aW9ucy5jcmVhdGVPckdldEFyZWEoKS5jZWxsUmFuZ2UudG8sZi5URD10aGlzLnd0VGFibGUuZ2V0Q2VsbChmLmNvb3JkcykpLGZ9fSx7a2V5OiJvbk1vdXNl'@;
put 'RG93biIsdmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGY9WjcuZ2V0KHRoaXMpLGQ9dGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQuYWN0aXZlRWxlbWVudCxoPU9ZKGgwZSxhLnRhcmdldCksbT1hLnRhcmdldDtpZihtIT09ZCYmaCgwKSE9PWQmJmgoMSkhPT1kKXt2YXIgXz10aGlzLnBhcmVu'@;
put 'dENlbGwobSk7WW8obSwiY29ybmVyIik/dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uQ2VsbENvcm5lck1vdXNlRG93biIsYSxtKTpfLlREJiZ0aGlzLnd0U2V0dGluZ3MuaGFzKCJvbkNlbGxNb3VzZURvd24iKSYmdGhpcy5jYWxsTGlzdGVuZXIoIm9uQ2VsbE1vdXNlRG93biIsYSxf'@;
put 'LmNvb3JkcyxfLlREKSwoMD09PWEuYnV0dG9ufHx0aGlzLnRvdWNoQXBwbGllZCkmJl8uVEQmJihmLmRibENsaWNrT3JpZ2luWzBdPV8uVEQsY2xlYXJUaW1lb3V0KGYuZGJsQ2xpY2tUaW1lb3V0WzBdKSxmLmRibENsaWNrVGltZW91dFswXT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Zi5kYmxD'@;
put 'bGlja09yaWdpblswXT1udWxsfSwxZTMpKX19fSx7a2V5OiJvbkNvbnRleHRNZW51Iix2YWx1ZTpmdW5jdGlvbihhKXtpZih0aGlzLnd0U2V0dGluZ3MuaGFzKCJvbkNlbGxDb250ZXh0TWVudSIpKXt2YXIgZj10aGlzLnBhcmVudENlbGwoYS50YXJnZXQpO2YuVEQmJnRoaXMuY2FsbExpc3Rl'@;
put 'bmVyKCJvbkNlbGxDb250ZXh0TWVudSIsYSxmLmNvb3JkcyxmLlREKX19fSx7a2V5OiJvbk1vdXNlT3ZlciIsdmFsdWU6ZnVuY3Rpb24oYSl7aWYodGhpcy53dFNldHRpbmdzLmhhcygib25DZWxsTW91c2VPdmVyIikpe3ZhciBmPXRoaXMud3RUYWJsZS5UQUJMRSxkPXpTKGEudGFyZ2V0LFsi'@;
put 'VEQiLCJUSCJdLGYpLGg9dGhpcy5wYXJlbnR8fHRoaXM7ZCYmZCE9PWgubGFzdE1vdXNlT3ZlciYmQTQoZCxmKSYmKGgubGFzdE1vdXNlT3Zlcj1kLHRoaXMuY2FsbExpc3RlbmVyKCJvbkNlbGxNb3VzZU92ZXIiLGEsdGhpcy53dFRhYmxlLmdldENvb3JkcyhkKSxkKSl9fX0se2tleToib25N'@;
put 'b3VzZU91dCIsdmFsdWU6ZnVuY3Rpb24oYSl7aWYodGhpcy53dFNldHRpbmdzLmhhcygib25DZWxsTW91c2VPdXQiKSl7dmFyIGY9dGhpcy53dFRhYmxlLlRBQkxFLGQ9elMoYS50YXJnZXQsWyJURCIsIlRIIl0sZiksaD16UyhhLnJlbGF0ZWRUYXJnZXQsWyJURCIsIlRIIl0sZiksbT10aGlz'@;
put 'LnBhcmVudHx8dGhpcztkJiZkIT09aCYmQTQoZCxmKSYmKHRoaXMuY2FsbExpc3RlbmVyKCJvbkNlbGxNb3VzZU91dCIsYSx0aGlzLnd0VGFibGUuZ2V0Q29vcmRzKGQpLGQpLG51bGw9PT1oJiYobS5sYXN0TW91c2VPdmVyPW51bGwpKX19fSx7a2V5OiJvbk1vdXNlVXAiLHZhbHVlOmZ1bmN0'@;
put 'aW9uKGEpe3ZhciBmPVo3LmdldCh0aGlzKSxkPXRoaXMucGFyZW50Q2VsbChhLnRhcmdldCk7ZC5URCYmdGhpcy53dFNldHRpbmdzLmhhcygib25DZWxsTW91c2VVcCIpJiZ0aGlzLmNhbGxMaXN0ZW5lcigib25DZWxsTW91c2VVcCIsYSxkLmNvb3JkcyxkLlREKSwoMD09PWEuYnV0dG9ufHx0'@;
put 'aGlzLnRvdWNoQXBwbGllZCkmJihkLlREPT09Zi5kYmxDbGlja09yaWdpblswXSYmZC5URD09PWYuZGJsQ2xpY2tPcmlnaW5bMV0/KFlvKGEudGFyZ2V0LCJjb3JuZXIiKT90aGlzLmNhbGxMaXN0ZW5lcigib25DZWxsQ29ybmVyRGJsQ2xpY2siLGEsZC5jb29yZHMsZC5URCk6dGhpcy5jYWxs'@;
put 'TGlzdGVuZXIoIm9uQ2VsbERibENsaWNrIixhLGQuY29vcmRzLGQuVEQpLGYuZGJsQ2xpY2tPcmlnaW5bMF09bnVsbCxmLmRibENsaWNrT3JpZ2luWzFdPW51bGwpOmQuVEQ9PT1mLmRibENsaWNrT3JpZ2luWzBdJiYoZi5kYmxDbGlja09yaWdpblsxXT1kLlRELGNsZWFyVGltZW91dChmLmRi'@;
put 'bENsaWNrVGltZW91dFsxXSksZi5kYmxDbGlja1RpbWVvdXRbMV09c2V0VGltZW91dChmdW5jdGlvbigpe2YuZGJsQ2xpY2tPcmlnaW5bMV09bnVsbH0sNTAwKSkpfX0se2tleToib25Ub3VjaFN0YXJ0Iix2YWx1ZTpmdW5jdGlvbihhKXtaNy5nZXQodGhpcykuc2VsZWN0ZWRDZWxsQmVmb3Jl'@;
put 'VG91Y2hFbmQ9dGhpcy5zZWxlY3Rpb25zLmdldENlbGwoKS5jZWxsUmFuZ2UsdGhpcy50b3VjaEFwcGxpZWQ9ITAsdGhpcy5vbk1vdXNlRG93bihhKX19LHtrZXk6Im9uVG91Y2hFbmQiLHZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBmLGQ9YS50YXJnZXQsaD1udWxsPT09KGY9dGhpcy5wYXJlbnRD'@;
put 'ZWxsKGQpKXx8dm9pZCAwPT09Zj92b2lkIDA6Zi5jb29yZHMsbT1pbyhoKSYmaC5yb3c+PTAmJmguY29sPj0wO2EuY2FuY2VsYWJsZSYmbSYmdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImlzRGF0YVZpZXdJbnN0YW5jZSIpJiYoY1koKSYmKCRjZSgpfHxLY2UoKSkmJnRoaXMuc2VsZWN0'@;
put 'ZWRDZWxsV2FzVG91Y2hlZChkKSYmIVsiQSIsIkJVVFRPTiIsIklOUFVUIl0uaW5jbHVkZXMoZC50YWdOYW1lKT9hLnByZXZlbnREZWZhdWx0KCk6dGhpcy5zZWxlY3RlZENlbGxXYXNUb3VjaGVkKGQpfHxhLnByZXZlbnREZWZhdWx0KCkpLHRoaXMub25Nb3VzZVVwKGEpLHRoaXMudG91Y2hB'@;
put 'cHBsaWVkPSExfX0se2tleToiY2FsbExpc3RlbmVyIix2YWx1ZTpmdW5jdGlvbihhLGYsZCxoKXt2YXIgbT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZ1B1cmUoYSk7bSYmbShmLGQsaCx0aGlzLmZhY2FkZUdldHRlcigpKX19LHtrZXk6ImRlc3Ryb3kiLHZhbHVlOmZ1bmN0aW9uKCl7dmFy'@;
put 'IGE9WjcuZ2V0KHRoaXMpO2NsZWFyVGltZW91dChhLmRibENsaWNrVGltZW91dFswXSksY2xlYXJUaW1lb3V0KGEuZGJsQ2xpY2tUaW1lb3V0WzFdKSx0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCl9fV0pLGx9KCk7Y29uc3QgUTBlPXJLZTtmdW5jdGlvbiBpTShsKXtyZXR1cm4oaU09ImZ1'@;
put 'bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5'@;
put 'bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiBlMWUobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFi'@;
put 'bGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLGFLZShmLmtleSksZil9fWZ1bmN0aW9uIGFLZShsKXt2YXIgYz1mdW5jdGlvbiBsS2UobCxjKXtpZigib2JqZWN0IiE9PWlNKGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09'@;
put 'YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PWlNKGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShs'@;
put 'KX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1pTShjKT9jOlN0cmluZyhjKX12YXIgc0tlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbChjLGEsZil7KGZ1bmN0aW9uIGlLZShsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xh'@;
put 'c3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyxsKSx0aGlzLm9mZnNldD1jLHRoaXMudG90YWw9YSx0aGlzLmNvdW50VEg9Zn1yZXR1cm4gZnVuY3Rpb24gb0tlKGwsYyxhKXtjJiZlMWUobC5wcm90b3R5cGUsYyksYSYmZTFlKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlw'@;
put 'ZSIse3dyaXRhYmxlOiExfSl9KGwsW3trZXk6Im9mZnNldHRlZCIsdmFsdWU6ZnVuY3Rpb24oYSl7cmV0dXJuIGErdGhpcy5vZmZzZXR9fSx7a2V5OiJ1bk9mZnNldHRlZCIsdmFsdWU6ZnVuY3Rpb24oYSl7cmV0dXJuIGEtdGhpcy5vZmZzZXR9fSx7a2V5OiJyZW5kZXJlZFRvU291cmNlIix2'@;
put 'YWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5vZmZzZXR0ZWQoYSl9fSx7a2V5OiJzb3VyY2VUb1JlbmRlcmVkIix2YWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy51bk9mZnNldHRlZChhKX19LHtrZXk6Im9mZnNldHRlZFRIIix2YWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gYS10aGlz'@;
put 'LmNvdW50VEh9fSx7a2V5OiJ1bk9mZnNldHRlZFRIIix2YWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gYSt0aGlzLmNvdW50VEh9fSx7a2V5OiJ2aXNpYmxlUm93SGVhZGVkQ29sdW1uVG9Tb3VyY2VDb2x1bW4iLHZhbHVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnJlbmRlcmVkVG9Tb3VyY2Uo'@;
put 'dGhpcy5vZmZzZXR0ZWRUSChhKSl9fSx7a2V5OiJzb3VyY2VDb2x1bW5Ub1Zpc2libGVSb3dIZWFkZWRDb2x1bW4iLHZhbHVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnVuT2Zmc2V0dGVkVEgodGhpcy5zb3VyY2VUb1JlbmRlcmVkKGEpKX19XSksbH0oKTtjb25zdCB1S2U9c0tlO2Z1bmN0'@;
put 'aW9uIG9NKGwpe3JldHVybihvTT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0'@;
put 'cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIHQxZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEw'@;
put 'LCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsZEtlKGYua2V5KSxmKX19ZnVuY3Rpb24gZEtlKGwpe3ZhciBjPWZ1bmN0aW9uIGhLZShsLGMpe2lmKCJvYmplY3QiIT09b00obCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRv'@;
put 'UHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09b00oZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmlu'@;
put 'ZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PW9NKGMpP2M6U3RyaW5nKGMpfXZhciBwS2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKGMsYSxmKXsoZnVuY3Rpb24gY0tlKGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVF'@;
put 'cnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLGwpLHRoaXMub2Zmc2V0PWMsdGhpcy50b3RhbD1hLHRoaXMuY291bnRUSD1mfXJldHVybiBmdW5jdGlvbiBmS2UobCxjLGEpe2MmJnQxZShsLnByb3RvdHlwZSxjKSxhJiZ0MWUobCxhKSxPYmplY3QuZGVm'@;
put 'aW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0obCxbe2tleToib2Zmc2V0dGVkIix2YWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gYSt0aGlzLm9mZnNldH19LHtrZXk6InVuT2Zmc2V0dGVkIix2YWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gYS10aGlzLm9mZnNldH19LHtr'@;
put 'ZXk6InJlbmRlcmVkVG9Tb3VyY2UiLHZhbHVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm9mZnNldHRlZChhKX19LHtrZXk6InNvdXJjZVRvUmVuZGVyZWQiLHZhbHVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnVuT2Zmc2V0dGVkKGEpfX0se2tleToib2Zmc2V0dGVkVEgiLHZhbHVlOmZ1'@;
put 'bmN0aW9uKGEpe3JldHVybiBhLXRoaXMuY291bnRUSH19LHtrZXk6InVuT2Zmc2V0dGVkVEgiLHZhbHVlOmZ1bmN0aW9uKGEpe3JldHVybiBhK3RoaXMuY291bnRUSH19LHtrZXk6InZpc2libGVDb2xIZWFkZWRSb3dUb1NvdXJjZVJvdyIsdmFsdWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMu'@;
put 'cmVuZGVyZWRUb1NvdXJjZSh0aGlzLm9mZnNldHRlZFRIKGEpKX19LHtrZXk6InNvdXJjZVJvd1RvVmlzaWJsZUNvbEhlYWRlZFJvdyIsdmFsdWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMudW5PZmZzZXR0ZWRUSCh0aGlzLnNvdXJjZVRvUmVuZGVyZWQoYSkpfX1dKSxsfSgpO2NvbnN0IG1L'@;
put 'ZT1wS2U7ZnVuY3Rpb24gYU0obCl7cmV0dXJuKGFNPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1i'@;
put 'b2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gbjFlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25m'@;
put 'aWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxiS2UoZi5rZXkpLGYpfX1mdW5jdGlvbiBiS2UobCl7dmFyIGM9ZnVuY3Rpb24gX0tlKGwsYyl7aWYoIm9iamVjdCIhPT1hTShsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9'@;
put 'bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1hTShmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJl'@;
put 'dHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09YU0oYyk/YzpTdHJpbmcoYyl9dmFyIHIxZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGwoKXsoZnVuY3Rpb24gdktlKGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3'@;
put 'IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLGwpLHRoaXMuY3VycmVudFNpemU9MCx0aGlzLm5leHRTaXplPTAsdGhpcy5jdXJyZW50T2Zmc2V0PTAsdGhpcy5uZXh0T2Zmc2V0PTB9cmV0dXJuIGZ1bmN0aW9uIHlLZShsLGMsYSl7YyYmbjFl'@;
put 'KGwucHJvdG90eXBlLGMpLGEmJm4xZShsLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShsLFt7a2V5OiJzZXRTaXplIix2YWx1ZTpmdW5jdGlvbihhKXt0aGlzLmN1cnJlbnRTaXplPXRoaXMubmV4dFNpemUsdGhpcy5uZXh0U2l6ZT1hfX0s'@;
put 'e2tleToic2V0T2Zmc2V0Iix2YWx1ZTpmdW5jdGlvbihhKXt0aGlzLmN1cnJlbnRPZmZzZXQ9dGhpcy5uZXh0T2Zmc2V0LHRoaXMubmV4dE9mZnNldD1hfX1dKSxsfSgpO2Z1bmN0aW9uIGxNKGwpe3JldHVybihsTT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9m'@;
put 'IFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1'@;
put 'bmN0aW9uIGkxZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsU0tlKGYua2V5'@;
put 'KSxmKX19ZnVuY3Rpb24gU0tlKGwpe3ZhciBjPWZ1bmN0aW9uIE1LZShsLGMpe2lmKCJvYmplY3QiIT09bE0obCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmpl'@;
put 'Y3QiIT09bE0oZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PWxNKGMpP2M6'@;
put 'U3RyaW5nKGMpfXZhciBrS2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKCl7KGZ1bmN0aW9uIHdLZShsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyxsKSx0aGlzLnNpemU9bmV3IHIx'@;
put 'ZSx0aGlzLndvcmtpbmdTcGFjZT0wLHRoaXMuc2hhcmVkU2l6ZT1udWxsfXJldHVybiBmdW5jdGlvbiBDS2UobCxjLGEpe2MmJmkxZShsLnByb3RvdHlwZSxjKSxhJiZpMWUobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0obCxbe2tleToi'@;
put 'c2V0U2l6ZSIsdmFsdWU6ZnVuY3Rpb24oYSl7dGhpcy5zaXplLnNldFNpemUoYSl9fSx7a2V5OiJzZXRPZmZzZXQiLHZhbHVlOmZ1bmN0aW9uKGEpe3RoaXMuc2l6ZS5zZXRPZmZzZXQoYSl9fSx7a2V5OiJnZXRWaWV3U2l6ZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaXplfX0s'@;
put 'e2tleToiaXNTaGFyZWQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhcmVkU2l6ZSBpbnN0YW5jZW9mIHIxZX19LHtrZXk6ImlzUGxhY2VPbiIsdmFsdWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMud29ya2luZ1NwYWNlPT09YX19LHtrZXk6ImFwcGVuZCIsdmFsdWU6ZnVuY3Rp'@;
put 'b24oYSl7dGhpcy53b3JraW5nU3BhY2U9MSxhLndvcmtpbmdTcGFjZT0yLHRoaXMuc2hhcmVkU2l6ZT1hLmdldFZpZXdTaXplKCl9fSx7a2V5OiJwcmVwZW5kIix2YWx1ZTpmdW5jdGlvbihhKXt0aGlzLndvcmtpbmdTcGFjZT0yLGEud29ya2luZ1NwYWNlPTEsdGhpcy5zaGFyZWRTaXplPWEu'@;
put 'Z2V0Vmlld1NpemUoKX19XSksbH0oKTtmdW5jdGlvbiBzTShsKXtyZXR1cm4oc009ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0'@;
put 'aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiBvMWUobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVt'@;
put 'ZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLEFLZShmLmtleSksZil9fWZ1bmN0aW9uIEFLZShsKXt2YXIgYz1mdW5jdGlvbiBUS2UobCxjKXtpZigib2JqZWN0IiE9PXNNKGwpfHxudWxsPT09'@;
put 'bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PXNNKGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmlt'@;
put 'aXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1zTShjKT9jOlN0cmluZyhjKX12YXIgYTFlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbChjLGEsZil7KGZ1bmN0aW9uIEVLZShsLGMpe2lmKCEobCBp'@;
put 'bnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyxsKSx0aGlzLnJvb3ROb2RlPWMsdGhpcy5ub2Rlc1Bvb2w9YSx0aGlzLnNpemVTZXQ9bmV3IGtLZSx0aGlzLmNoaWxkTm9kZVR5cGU9Zi50b1VwcGVyQ2Fz'@;
put 'ZSgpLHRoaXMudmlzdWFsSW5kZXg9MCx0aGlzLmNvbGxlY3RlZE5vZGVzPVtdfXJldHVybiBmdW5jdGlvbiB4S2UobCxjLGEpe2MmJm8xZShsLnByb3RvdHlwZSxjKSxhJiZvMWUobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0obCxbe2tl'@;
put 'eToic2V0U2l6ZSIsdmFsdWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuc2l6ZVNldC5zZXRTaXplKGEpLHRoaXN9fSx7a2V5OiJzZXRPZmZzZXQiLHZhbHVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnNpemVTZXQuc2V0T2Zmc2V0KGEpLHRoaXN9fSx7a2V5OiJpc1NoYXJlZFZpZXdTZXQi'@;
put 'LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2l6ZVNldC5pc1NoYXJlZCgpfX0se2tleToiZ2V0Tm9kZSIsdmFsdWU6ZnVuY3Rpb24oYSl7cmV0dXJuIGE8dGhpcy5jb2xsZWN0ZWROb2Rlcy5sZW5ndGg/dGhpcy5jb2xsZWN0ZWROb2Rlc1thXTpudWxsfX0se2tleToiZ2V0Q3VycmVu'@;
put 'dE5vZGUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5jb2xsZWN0ZWROb2Rlcy5sZW5ndGg7cmV0dXJuIGE+MD90aGlzLmNvbGxlY3RlZE5vZGVzW2EtMV06bnVsbH19LHtrZXk6ImdldFJlbmRlcmVkQ2hpbGRDb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnJvb3ROb2Rl'@;
put 'LGY9dGhpcy5zaXplU2V0LGQ9MDtpZih0aGlzLmlzU2hhcmVkVmlld1NldCgpKWZvcih2YXIgaD1hLmZpcnN0RWxlbWVudENoaWxkO2g7KXtpZihoLnRhZ05hbWU9PT10aGlzLmNoaWxkTm9kZVR5cGUpZCs9MTtlbHNlIGlmKGYuaXNQbGFjZU9uKDEpKWJyZWFrO2g9aC5uZXh0RWxlbWVudFNp'@;
put 'Ymxpbmd9ZWxzZSBkPWEuY2hpbGRFbGVtZW50Q291bnQ7cmV0dXJuIGR9fSx7a2V5OiJzdGFydCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNvbGxlY3RlZE5vZGVzLmxlbmd0aD0wLHRoaXMudmlzdWFsSW5kZXg9MDtmb3IodmFyIGE9dGhpcy5yb290Tm9kZSxmPXRoaXMuc2l6ZVNldCxkPXRo'@;
put 'aXMuaXNTaGFyZWRWaWV3U2V0KCksbT1mLmdldFZpZXdTaXplKCkubmV4dFNpemUsXz10aGlzLmdldFJlbmRlcmVkQ2hpbGRDb3VudCgpO188bTspe3ZhciBPPXRoaXMubm9kZXNQb29sKCk7IWR8fGQmJmYuaXNQbGFjZU9uKDIpP2EuYXBwZW5kQ2hpbGQoTyk6YS5pbnNlcnRCZWZvcmUoTyxh'@;
put 'LmZpcnN0Q2hpbGQpLF8rPTF9Zm9yKHZhciBYPWQmJmYuaXNQbGFjZU9uKDEpO18+bTspYS5yZW1vdmVDaGlsZChYP2EuZmlyc3RDaGlsZDphLmxhc3RDaGlsZCksXy09MX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnJvb3ROb2RlLGY9dGhpcy5zaXplU2V0'@;
put 'LGQ9dGhpcy52aXN1YWxJbmRleDt0aGlzLmlzU2hhcmVkVmlld1NldCgpJiZmLmlzUGxhY2VPbigyKSYmKGQrPWYuc2hhcmVkU2l6ZS5uZXh0U2l6ZSk7dmFyIGg9YS5jaGlsZE5vZGVzW2RdO2lmKGgudGFnTmFtZSE9PXRoaXMuY2hpbGROb2RlVHlwZSl7dmFyIG09dGhpcy5ub2Rlc1Bvb2wo'@;
put 'KTthLnJlcGxhY2VDaGlsZChtLGgpLGg9bX10aGlzLmNvbGxlY3RlZE5vZGVzLnB1c2goaCksdGhpcy52aXN1YWxJbmRleCs9MX19LHtrZXk6ImVuZCIsdmFsdWU6ZnVuY3Rpb24oKXt9fV0pLGx9KCk7ZnVuY3Rpb24gWTcobCl7cmV0dXJuKFk3PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wm'@;
put 'JiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wi'@;
put 'OnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gbDFlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJv'@;
put 'cGVydHkobCxJS2UoZi5rZXkpLGYpfX1mdW5jdGlvbiBJS2UobCl7dmFyIGM9ZnVuY3Rpb24gUktlKGwsYyl7aWYoIm9iamVjdCIhPT1ZNyhsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJk'@;
put 'ZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1ZNyhmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJz'@;
put 'eW1ib2wiPT09WTcoYyk/YzpTdHJpbmcoYyl9ZnVuY3Rpb24gdFcobCxjKXtyZXR1cm4odFc9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZixkKXtyZXR1cm4gZi5fX3Byb3RvX189ZCxmfSkobCxjKX1mdW5jdGlvbiBzUihsKXty'@;
put 'ZXR1cm4oc1I9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSl9KShsKX12YXIgczFlPWZ1bmN0aW9uKGwpeyFmdW5jdGlvbiBMS2UobCxjKXtpZigi'@;
put 'ZnVuY3Rpb24iIT10eXBlb2YgYyYmbnVsbCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtsLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGMmJmMucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6'@;
put 'bCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksYyYmdFcobCxjKX0oYSxsKTt2YXIgYz1mdW5jdGlvbiBQS2UobCl7dmFyIGM9ZnVuY3Rpb24gTktlKCl7aWYodHlwZW9mIFJlZmxlY3Q+InUi'@;
put 'fHwhUmVmbGVjdC5jb25zdHJ1Y3R8fFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sZnVu'@;
put 'Y3Rpb24oKXt9KSksITB9Y2F0Y2h7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciBkLGY9c1IobCk7aWYoYyl7dmFyIGg9c1IodGhpcykuY29uc3RydWN0b3I7ZD1SZWZsZWN0LmNvbnN0cnVjdChmLGFyZ3VtZW50cyxoKX1lbHNlIGQ9Zi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7'@;
put 'cmV0dXJuIGZ1bmN0aW9uIEZLZShsLGMpe2lmKGMmJigib2JqZWN0Ij09PVk3KGMpfHwiZnVuY3Rpb24iPT10eXBlb2YgYykpcmV0dXJuIGM7aWYodm9pZCAwIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVu'@;
put 'ZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbiBIS2UobCl7aWYodm9pZCAwPT09bCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBsfShsKX0odGhpcyxkKX19KGEpO2Z1bmN0'@;
put 'aW9uIGEoKXtyZXR1cm4gZnVuY3Rpb24gT0tlKGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsYSksYy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIGZ1bmN0aW9uIERLZShs'@;
put 'LGMsYSl7YyYmbDFlKGwucHJvdG90eXBlLGMpLGEmJmwxZShsLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShhLFt7a2V5OiJwcmVwZW5kVmlldyIsdmFsdWU6ZnVuY3Rpb24oZCl7cmV0dXJuIHRoaXMuc2l6ZVNldC5wcmVwZW5kKGQuc2l6'@;
put 'ZVNldCksZC5zaXplU2V0LmFwcGVuZCh0aGlzLnNpemVTZXQpLHRoaXN9fSx7a2V5OiJhcHBlbmRWaWV3Iix2YWx1ZTpmdW5jdGlvbihkKXtyZXR1cm4gdGhpcy5zaXplU2V0LmFwcGVuZChkLnNpemVTZXQpLGQuc2l6ZVNldC5wcmVwZW5kKHRoaXMuc2l6ZVNldCksdGhpc319XSksYX0oYTFl'@;
put 'KTtmdW5jdGlvbiB1TShsKXtyZXR1cm4odU09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYm'@;
put 'Yy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiB1MWUobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3Vy'@;
put 'YWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLGpLZShmLmtleSksZil9fWZ1bmN0aW9uIGpLZShsKXt2YXIgYz1mdW5jdGlvbiB6S2UobCxjKXtpZigib2JqZWN0IiE9PXVNKGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5'@;
put 'bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PXVNKGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJu'@;
put 'KCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT11TShjKT9jOlN0cmluZyhjKX12YXIgVUtlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbChjKXsoZnVuY3Rpb24gVktlKGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5'@;
put 'cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLGwpLHRoaXMubm9kZVR5cGU9Yy50b1VwcGVyQ2FzZSgpfXJldHVybiBmdW5jdGlvbiBCS2UobCxjLGEpe2MmJnUxZShsLnByb3RvdHlwZSxjKSxhJiZ1MWUobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVy'@;
put 'dHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0obCxbe2tleToic2V0Um9vdERvY3VtZW50Iix2YWx1ZTpmdW5jdGlvbihhKXt0aGlzLnJvb3REb2N1bWVudD1hfX0se2tleToib2J0YWluIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVt'@;
put 'ZW50KHRoaXMubm9kZVR5cGUpfX1dKSxsfSgpO2Z1bmN0aW9uIGNNKGwpe3JldHVybihjTT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYi'@;
put 'ZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIGMxZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1m'@;
put 'LmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsV0tlKGYua2V5KSxmKX19ZnVuY3Rpb24gV0tlKGwpe3ZhciBjPWZ1bmN0aW9uIEdLZShsLGMpe2lmKCJvYmplY3QiIT09Y00obCl8fG51'@;
put 'bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09Y00oZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBh'@;
put 'IHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PWNNKGMpP2M6U3RyaW5nKGMpfXZhciBmTT1mdW5jdGlvbigpe2Z1bmN0aW9uIGwoYyxhKXsoZnVuY3Rpb24gWktlKGwsYyl7aWYoIShs'@;
put 'IGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLGwpLHRoaXMubm9kZXNQb29sPSJzdHJpbmciPT10eXBlb2YgYz9uZXcgVUtlKGMpOm51bGwsdGhpcy5ub2RlVHlwZT1jLHRoaXMucm9vdE5vZGU9YSx0'@;
put 'aGlzLnRhYmxlPW51bGwsdGhpcy5yZW5kZXJlZE5vZGVzPTB9cmV0dXJuIGZ1bmN0aW9uIFlLZShsLGMsYSl7YyYmYzFlKGwucHJvdG90eXBlLGMpLGEmJmMxZShsLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShsLFt7a2V5OiJzZXRUYWJs'@;
put 'ZSIsdmFsdWU6ZnVuY3Rpb24oYSl7dGhpcy5ub2Rlc1Bvb2wmJnRoaXMubm9kZXNQb29sLnNldFJvb3REb2N1bWVudChhLnJvb3REb2N1bWVudCksdGhpcy50YWJsZT1hfX0se2tleToiYWRqdXN0Iix2YWx1ZTpmdW5jdGlvbigpe319LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt9'@;
put 'fV0pLGx9KCk7ZnVuY3Rpb24gVzcobCl7cmV0dXJuKFc3PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBT'@;
put 'eW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gZjFlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5j'@;
put 'b25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxxS2UoZi5rZXkpLGYpfX1mdW5jdGlvbiBxS2UobCl7dmFyIGM9ZnVuY3Rpb24gWEtlKGwsYyl7aWYoIm9iamVjdCIhPT1XNyhsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFy'@;
put 'IGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1XNyhmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIp'@;
put 'fXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09VzcoYyk/YzpTdHJpbmcoYyl9ZnVuY3Rpb24gblcobCxjKXtyZXR1cm4oblc9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6'@;
put 'ZnVuY3Rpb24oZixkKXtyZXR1cm4gZi5fX3Byb3RvX189ZCxmfSkobCxjKX1mdW5jdGlvbiB1UihsKXtyZXR1cm4odVI9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJv'@;
put 'dG90eXBlT2YoYSl9KShsKX12YXIgcnFlPWZ1bmN0aW9uKGwpeyFmdW5jdGlvbiBKS2UobCxjKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyYmbnVsbCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTts'@;
put 'LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGMmJmMucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6bCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksYyYmblcobCxjKX0oYSxsKTt2YXIg'@;
put 'Yz1mdW5jdGlvbiBRS2UobCl7dmFyIGM9ZnVuY3Rpb24gbnFlKCl7aWYodHlwZW9mIFJlZmxlY3Q+InUifHwhUmVmbGVjdC5jb25zdHJ1Y3R8fFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9v'@;
put 'bGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sZnVuY3Rpb24oKXt9KSksITB9Y2F0Y2h7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciBkLGY9dVIobCk7aWYoYyl7dmFyIGg9dVIodGhpcykuY29uc3RydWN0b3I7ZD1SZWZs'@;
put 'ZWN0LmNvbnN0cnVjdChmLGFyZ3VtZW50cyxoKX1lbHNlIGQ9Zi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uIGVxZShsLGMpe2lmKGMmJigib2JqZWN0Ij09PVc3KGMpfHwiZnVuY3Rpb24iPT10eXBlb2YgYykpcmV0dXJuIGM7aWYodm9pZCAwIT09Yyl0aHJvdyBuZXcg'@;
put 'VHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbiB0cWUobCl7aWYodm9pZCAwPT09bCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBz'@;
put 'dXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBsfShsKX0odGhpcyxkKX19KGEpO2Z1bmN0aW9uIGEoKXt2YXIgZjtyZXR1cm4gZnVuY3Rpb24gJEtlKGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBh'@;
put 'IGZ1bmN0aW9uIil9KHRoaXMsYSksKGY9Yy5jYWxsKHRoaXMsIlRIIikpLm9yZGVyVmlld3M9bmV3IFdlYWtNYXAsZi5zb3VyY2VSb3dJbmRleD0wLGZ9cmV0dXJuIGZ1bmN0aW9uIEtLZShsLGMsYSl7YyYmZjFlKGwucHJvdG90eXBlLGMpLGEmJmYxZShsLGEpLE9iamVjdC5kZWZpbmVQcm9w'@;
put 'ZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShhLFt7a2V5OiJvYnRhaW5PcmRlclZpZXciLHZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBtLGg9dGhpcztyZXR1cm4gdGhpcy5vcmRlclZpZXdzLmhhcyhkKT9tPXRoaXMub3JkZXJWaWV3cy5nZXQoZCk6KG09bmV3IHMxZShkLGZ1bmN0'@;
put 'aW9uKF8pe3JldHVybiBoLm5vZGVzUG9vbC5vYnRhaW4oaC5zb3VyY2VSb3dJbmRleCxfKX0sdGhpcy5ub2RlVHlwZSksdGhpcy5vcmRlclZpZXdzLnNldChkLG0pKSxtfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZD10aGlzLnRhYmxlLGg9ZC5yb3dzVG9SZW5k'@;
put 'ZXIsbT1kLnJvd0hlYWRlckZ1bmN0aW9ucyxfPWQucm93SGVhZGVyc0NvdW50LE89ZC5yb3dzLFg9ZC5jZWxscyxhZT0wO2FlPGg7YWUrKyl7dmFyIHBlPXRoaXMudGFibGUucmVuZGVyZWRSb3dUb1NvdXJjZShhZSksYmU9Ty5nZXRSZW5kZXJlZE5vZGUoYWUpO3RoaXMuc291cmNlUm93SW5k'@;
put 'ZXg9cGU7dmFyIHhlPXRoaXMub2J0YWluT3JkZXJWaWV3KGJlKSxWZT1YLm9idGFpbk9yZGVyVmlldyhiZSk7eGUuYXBwZW5kVmlldyhWZSkuc2V0U2l6ZShfKS5zZXRPZmZzZXQodGhpcy50YWJsZS5yZW5kZXJlZENvbHVtblRvU291cmNlKDApKS5zdGFydCgpO2Zvcih2YXIgWmU9MDtaZTxf'@;
put 'O1plKyspe3hlLnJlbmRlcigpO3ZhciBsdD14ZS5nZXRDdXJyZW50Tm9kZSgpO2x0LmNsYXNzTmFtZT0iIixsdC5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIiksbVtaZV0ocGUsbHQsWmUpfXhlLmVuZCgpfX19XSksYX0oZk0pO2Z1bmN0aW9uIEc3KGwpe3JldHVybihHNz0iZnVuY3Rpb24iPT10'@;
put 'eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3Rv'@;
put 'dHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIGQxZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2Jq'@;
put 'ZWN0LmRlZmluZVByb3BlcnR5KGwsYXFlKGYua2V5KSxmKX19ZnVuY3Rpb24gYXFlKGwpe3ZhciBjPWZ1bmN0aW9uIGxxZShsLGMpe2lmKCJvYmplY3QiIT09RzcobCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1h'@;
put 'LmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09RzcoZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJp'@;
put 'bmciKTtyZXR1cm4ic3ltYm9sIj09PUc3KGMpP2M6U3RyaW5nKGMpfWZ1bmN0aW9uIHJXKGwsYyl7cmV0dXJuKHJXPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGYsZCl7cmV0dXJuIGYuX19wcm90b19fPWQsZn0pKGwsYyl9ZnVu'@;
put 'Y3Rpb24gY1IobCl7cmV0dXJuKGNSPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGEpe3JldHVybiBhLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpfSkobCl9dmFyIGhxZT1mdW5jdGlvbihsKXshZnVuY3Rpb24g'@;
put 'c3FlKGwsYyl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGMmJm51bGwhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7bC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShjJiZjLnByb3RvdHlwZSx7Y29uc3Ry'@;
put 'dWN0b3I6e3ZhbHVlOmwsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGMmJnJXKGwsYyl9KGEsbCk7dmFyIGM9ZnVuY3Rpb24gdXFlKGwpe3ZhciBjPWZ1bmN0aW9uIGRxZSgpe2lmKHR5cGVv'@;
put 'ZiBSZWZsZWN0PiJ1Inx8IVJlZmxlY3QuY29uc3RydWN0fHxSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChC'@;
put 'b29sZWFuLFtdLGZ1bmN0aW9uKCl7fSkpLCEwfWNhdGNoe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZCxmPWNSKGwpO2lmKGMpe3ZhciBoPWNSKHRoaXMpLmNvbnN0cnVjdG9yO2Q9UmVmbGVjdC5jb25zdHJ1Y3QoZixhcmd1bWVudHMsaCl9ZWxzZSBkPWYuYXBwbHkodGhp'@;
put 'cyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbiBjcWUobCxjKXtpZihjJiYoIm9iamVjdCI9PT1HNyhjKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGMpKXJldHVybiBjO2lmKHZvaWQgMCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJu'@;
put 'IG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24gZnFlKGwpe2lmKHZvaWQgMD09PWwpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gbH0obCl9KHRoaXMs'@;
put 'ZCl9fShhKTtmdW5jdGlvbiBhKGYpe3JldHVybiBmdW5jdGlvbiBpcWUobCxjKXtpZighKGwgaW5zdGFuY2VvZiBjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxhKSxjLmNhbGwodGhpcyxudWxsLGYpfXJldHVybiBmdW5j'@;
put 'dGlvbiBvcWUobCxjLGEpe2MmJmQxZShsLnByb3RvdHlwZSxjKSxhJiZkMWUobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0oYSxbe2tleToiYWRqdXN0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXMudGFibGUsaD1kLmNvbHVtbkhl'@;
put 'YWRlcnNDb3VudCxfPXRoaXMucm9vdE5vZGUuZmlyc3RDaGlsZDtpZihoKXtmb3IodmFyIFg9dGhpcy50YWJsZS5jb2x1bW5zVG9SZW5kZXIrZC5yb3dIZWFkZXJzQ291bnQsYWU9MCxwZT1oO2FlPHBlO2FlKyspe2ZvcigoXz10aGlzLnJvb3ROb2RlLmNoaWxkTm9kZXNbYWVdKXx8KF89dGhp'@;
put 'cy50YWJsZS5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKSx0aGlzLnJvb3ROb2RlLmFwcGVuZENoaWxkKF8pKSx0aGlzLnJlbmRlcmVkTm9kZXM9Xy5jaGlsZE5vZGVzLmxlbmd0aDt0aGlzLnJlbmRlcmVkTm9kZXM8WDspXy5hcHBlbmRDaGlsZCh0aGlzLnRhYmxlLnJvb3REb2N1'@;
put 'bWVudC5jcmVhdGVFbGVtZW50KCJ0aCIpKSx0aGlzLnJlbmRlcmVkTm9kZXMrPTE7Zm9yKDt0aGlzLnJlbmRlcmVkTm9kZXM+WDspXy5yZW1vdmVDaGlsZChfLmxhc3RDaGlsZCksdGhpcy5yZW5kZXJlZE5vZGVzLT0xfXZhciBiZT10aGlzLnJvb3ROb2RlLmNoaWxkTm9kZXMubGVuZ3RoO2lm'@;
put 'KGJlPmgpZm9yKHZhciB4ZT1oO3hlPGJlO3hlKyspdGhpcy5yb290Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnJvb3ROb2RlLmxhc3RDaGlsZCl9ZWxzZSBfJiZGZChfKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGQ9dGhpcy50YWJsZS5jb2x1bW5IZWFkZXJzQ291'@;
put 'bnQsaD0wO2g8ZDtoKz0xKWZvcih2YXIgbT10aGlzLnRhYmxlLF89bS5jb2x1bW5IZWFkZXJGdW5jdGlvbnMsTz1tLmNvbHVtbnNUb1JlbmRlcixYPW0ucm93SGVhZGVyc0NvdW50LGFlPXRoaXMucm9vdE5vZGUuY2hpbGROb2Rlc1toXSxwZT0tMSpYO3BlPE87cGUrPTEpe3ZhciBiZT10aGlz'@;
put 'LnRhYmxlLnJlbmRlcmVkQ29sdW1uVG9Tb3VyY2UocGUpLHhlPWFlLmNoaWxkTm9kZXNbcGUrWF07eGUuY2xhc3NOYW1lPSIiLHhlLnJlbW92ZUF0dHJpYnV0ZSgic3R5bGUiKSxfW2hdKGJlLHhlLGgpfX19XSksYX0oZk0pO2Z1bmN0aW9uICQ3KGwpe3JldHVybigkNz0iZnVuY3Rpb24iPT10'@;
put 'eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3Rv'@;
put 'dHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIGgxZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2Jq'@;
put 'ZWN0LmRlZmluZVByb3BlcnR5KGwsZ3FlKGYua2V5KSxmKX19ZnVuY3Rpb24gZ3FlKGwpe3ZhciBjPWZ1bmN0aW9uIHZxZShsLGMpe2lmKCJvYmplY3QiIT09JDcobCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1h'@;
put 'LmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09JDcoZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJp'@;
put 'bmciKTtyZXR1cm4ic3ltYm9sIj09PSQ3KGMpP2M6U3RyaW5nKGMpfWZ1bmN0aW9uIGlXKGwsYyl7cmV0dXJuKGlXPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGYsZCl7cmV0dXJuIGYuX19wcm90b19fPWQsZn0pKGwsYyl9ZnVu'@;
put 'Y3Rpb24gZlIobCl7cmV0dXJuKGZSPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGEpe3JldHVybiBhLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpfSkobCl9dmFyIHAxZSxTcWU9ZnVuY3Rpb24obCl7IWZ1bmN0'@;
put 'aW9uIHlxZShsLGMpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjJiZudWxsIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2wucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYyYmYy5wcm90b3R5cGUse2Nv'@;
put 'bnN0cnVjdG9yOnt2YWx1ZTpsLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxjJiZpVyhsLGMpfShhLGwpO3ZhciBjPWZ1bmN0aW9uIGJxZShsKXt2YXIgYz1mdW5jdGlvbiBDcWUoKXtpZih0'@;
put 'eXBlb2YgUmVmbGVjdD4idSJ8fCFSZWZsZWN0LmNvbnN0cnVjdHx8UmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1'@;
put 'Y3QoQm9vbGVhbixbXSxmdW5jdGlvbigpe30pKSwhMH1jYXRjaHtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGQsZj1mUihsKTtpZihjKXt2YXIgaD1mUih0aGlzKS5jb25zdHJ1Y3RvcjtkPVJlZmxlY3QuY29uc3RydWN0KGYsYXJndW1lbnRzLGgpfWVsc2UgZD1mLmFwcGx5'@;
put 'KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24gX3FlKGwsYyl7aWYoYyYmKCJvYmplY3QiPT09JDcoYyl8fCJmdW5jdGlvbiI9PXR5cGVvZiBjKSlyZXR1cm4gYztpZih2b2lkIDAhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJl'@;
put 'dHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uIHdxZShsKXtpZih2b2lkIDA9PT1sKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGx9KGwpfSh0'@;
put 'aGlzLGQpfX0oYSk7ZnVuY3Rpb24gYShmKXtyZXR1cm4gZnVuY3Rpb24gcHFlKGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsYSksYy5jYWxsKHRoaXMsbnVsbCxmKX1yZXR1cm4g'@;
put 'ZnVuY3Rpb24gbXFlKGwsYyxhKXtjJiZoMWUobC5wcm90b3R5cGUsYyksYSYmaDFlKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGEsW3trZXk6ImFkanVzdCIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGQ9dGhpcy50YWJsZSxfPWQu'@;
put 'Y29sdW1uc1RvUmVuZGVyK2Qucm93SGVhZGVyc0NvdW50O3RoaXMucmVuZGVyZWROb2RlczxfOyl0aGlzLnJvb3ROb2RlLmFwcGVuZENoaWxkKHRoaXMudGFibGUucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNvbCIpKSx0aGlzLnJlbmRlcmVkTm9kZXMrPTE7Zm9yKDt0aGlzLnJlbmRl'@;
put 'cmVkTm9kZXM+XzspdGhpcy5yb290Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnJvb3ROb2RlLmxhc3RDaGlsZCksdGhpcy5yZW5kZXJlZE5vZGVzLT0xfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuYWRqdXN0KCk7Zm9yKHZhciBkPXRoaXMudGFibGUsaD1kLmNvbHVtbnNU'@;
put 'b1JlbmRlcixtPWQucm93SGVhZGVyc0NvdW50LF89MDtfPG07XysrKXt2YXIgTz10aGlzLnRhYmxlLnJlbmRlcmVkQ29sdW1uVG9Tb3VyY2UoXyksWD10aGlzLnRhYmxlLmNvbHVtblV0aWxzLmdldEhlYWRlcldpZHRoKE8pO3RoaXMucm9vdE5vZGUuY2hpbGROb2Rlc1tfXS5zdHlsZS53aWR0'@;
put 'aD0iIi5jb25jYXQoWCwicHgiKX1mb3IodmFyIGFlPTA7YWU8aDthZSsrKXt2YXIgcGU9dGhpcy50YWJsZS5yZW5kZXJlZENvbHVtblRvU291cmNlKGFlKSxiZT10aGlzLnRhYmxlLmNvbHVtblV0aWxzLmdldFN0cmV0Y2hlZENvbHVtbldpZHRoKHBlKTt0aGlzLnJvb3ROb2RlLmNoaWxkTm9k'@;
put 'ZXNbYWUrbV0uc3R5bGUud2lkdGg9IiIuY29uY2F0KGJlLCJweCIpfXZhciB4ZT10aGlzLnJvb3ROb2RlLmZpcnN0Q2hpbGQ7eGUmJmdpKHhlLCJyb3dIZWFkZXIiKX19XSksYX0oZk0pO2Z1bmN0aW9uIEs3KGwpe3JldHVybihLNz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9s'@;
put 'Ij09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2Yg'@;
put 'Y30pKGwpfWZ1bmN0aW9uIG0xZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGws'@;
put 'eHFlKGYua2V5KSxmKX19ZnVuY3Rpb24geHFlKGwpe3ZhciBjPWZ1bmN0aW9uIEFxZShsLGMpe2lmKCJvYmplY3QiIT09SzcobCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIp'@;
put 'O2lmKCJvYmplY3QiIT09SzcoZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09'@;
put 'PUs3KGMpP2M6U3RyaW5nKGMpfWZ1bmN0aW9uIG9XKGwsYyl7cmV0dXJuKG9XPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGYsZCl7cmV0dXJuIGYuX19wcm90b19fPWQsZn0pKGwsYyl9ZnVuY3Rpb24gZFIobCl7cmV0dXJuKGRS'@;
put 'PU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGEpe3JldHVybiBhLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpfSkobCl9dmFyIGcxZT0hMSxMcWU9ZnVuY3Rpb24obCl7IWZ1bmN0aW9uIFRxZShsLGMpe2lmKCJm'@;
put 'dW5jdGlvbiIhPXR5cGVvZiBjJiZudWxsIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2wucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYyYmYy5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTps'@;
put 'LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxjJiZvVyhsLGMpfShhLGwpO3ZhciBjPWZ1bmN0aW9uIE9xZShsKXt2YXIgYz1mdW5jdGlvbiBScWUoKXtpZih0eXBlb2YgUmVmbGVjdD4idSJ8'@;
put 'fCFSZWZsZWN0LmNvbnN0cnVjdHx8UmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSxmdW5j'@;
put 'dGlvbigpe30pKSwhMH1jYXRjaHtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGQsZj1kUihsKTtpZihjKXt2YXIgaD1kUih0aGlzKS5jb25zdHJ1Y3RvcjtkPVJlZmxlY3QuY29uc3RydWN0KGYsYXJndW1lbnRzLGgpfWVsc2UgZD1mLmFwcGx5KHRoaXMsYXJndW1lbnRzKTty'@;
put 'ZXR1cm4gZnVuY3Rpb24gRHFlKGwsYyl7aWYoYyYmKCJvYmplY3QiPT09SzcoYyl8fCJmdW5jdGlvbiI9PXR5cGVvZiBjKSlyZXR1cm4gYztpZih2b2lkIDAhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5k'@;
put 'ZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uIElxZShsKXtpZih2b2lkIDA9PT1sKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGx9KGwpfSh0aGlzLGQpfX0oYSk7ZnVuY3Rp'@;
put 'b24gYShmKXt2YXIgZDtyZXR1cm4gZnVuY3Rpb24ga3FlKGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsYSksKGQ9Yy5jYWxsKHRoaXMsIlRSIixmKSkub3JkZXJWaWV3PW5ldyBh'@;
put 'MWUoZixmdW5jdGlvbihoKXtyZXR1cm4gZC5ub2Rlc1Bvb2wub2J0YWluKGgpfSxkLm5vZGVUeXBlKSxkfXJldHVybiBmdW5jdGlvbiBFcWUobCxjLGEpe2MmJm0xZShsLnByb3RvdHlwZSxjKSxhJiZtMWUobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFi'@;
put 'bGU6ITF9KX0oYSxbe2tleToiZ2V0UmVuZGVyZWROb2RlIix2YWx1ZTpmdW5jdGlvbihkKXtyZXR1cm4gdGhpcy5vcmRlclZpZXcuZ2V0Tm9kZShkKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLnRhYmxlLnJvd3NUb1JlbmRlcjshZzFlJiZkPjFlMyYmKGcx'@;
put 'ZT0hMCxXbChPbChwMWV8fChwMWU9ZnVuY3Rpb24gTXFlKGwsYyl7cmV0dXJuIGN8fChjPWwuc2xpY2UoMCkpLE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobCx7cmF3Ont2YWx1ZTpPYmplY3QuZnJlZXplKGMpfX0pKX0oWydQZXJmb3JtYW5jZSB0aXA6IEhhbmRzb250'@;
put 'YWJsZSByZW5kZXJlZCBtb3JlIHRoYW4gMTAwMCB2aXNpYmxlIHJvd3MuIENvbnNpZGVyIGxpbWl0aW5nIFxuICAgICAgICB0aGUgbnVtYmVyIG9mIHJlbmRlcmVkIHJvd3MgYnkgc3BlY2lmeWluZyB0aGUgdGFibGUgaGVpZ2h0IGFuZC9vciB0dXJuaW5nIG9mZiB0aGUgInJlbmRlckFsbFJv'@;
put 'd3MiIG9wdGlvbi4nXSxbJ1BlcmZvcm1hbmNlIHRpcDogSGFuZHNvbnRhYmxlIHJlbmRlcmVkIG1vcmUgdGhhbiAxMDAwIHZpc2libGUgcm93cy4gQ29uc2lkZXIgbGltaXRpbmdcXHgyMFxuICAgICAgICB0aGUgbnVtYmVyIG9mIHJlbmRlcmVkIHJvd3MgYnkgc3BlY2lmeWluZyB0aGUgdGFi'@;
put 'bGUgaGVpZ2h0IGFuZC9vciB0dXJuaW5nIG9mZiB0aGUgInJlbmRlckFsbFJvd3MiIG9wdGlvbi4nXSkpKSkpLHRoaXMub3JkZXJWaWV3LnNldFNpemUoZCkuc2V0T2Zmc2V0KHRoaXMudGFibGUucmVuZGVyZWRSb3dUb1NvdXJjZSgwKSkuc3RhcnQoKTtmb3IodmFyIGg9MDtoPGQ7aCsrKXRo'@;
put 'aXMub3JkZXJWaWV3LnJlbmRlcigpO3RoaXMub3JkZXJWaWV3LmVuZCgpfX1dKSxhfShmTSk7ZnVuY3Rpb24gcTcobCl7cmV0dXJuKHE3PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2Yg'@;
put 'Y306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gdjFlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKysp'@;
put 'e3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxIcWUoZi5rZXkpLGYpfX1mdW5jdGlvbiBIcWUobCl7dmFyIGM9ZnVuY3Rpb24gTnFlKGws'@;
put 'Yyl7aWYoIm9iamVjdCIhPT1xNyhsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1xNyhmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJA'@;
put 'QHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09cTcoYyk/YzpTdHJpbmcoYyl9ZnVuY3Rpb24gYVcobCxjKXtyZXR1cm4oYVc9T2JqZWN0'@;
put 'LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZixkKXtyZXR1cm4gZi5fX3Byb3RvX189ZCxmfSkobCxjKX1mdW5jdGlvbiBoUihsKXtyZXR1cm4oaFI9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6'@;
put 'ZnVuY3Rpb24oYSl7cmV0dXJuIGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSl9KShsKX12YXIgWnFlPWZ1bmN0aW9uKGwpeyFmdW5jdGlvbiBWcWUobCxjKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyYmbnVsbCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhw'@;
put 'cmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtsLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGMmJmMucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6bCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInBy'@;
put 'b3RvdHlwZSIse3dyaXRhYmxlOiExfSksYyYmYVcobCxjKX0oYSxsKTt2YXIgYz1mdW5jdGlvbiBCcWUobCl7dmFyIGM9ZnVuY3Rpb24gVXFlKCl7aWYodHlwZW9mIFJlZmxlY3Q+InUifHwhUmVmbGVjdC5jb25zdHJ1Y3R8fFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1'@;
put 'bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sZnVuY3Rpb24oKXt9KSksITB9Y2F0Y2h7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciBkLGY9'@;
put 'aFIobCk7aWYoYyl7dmFyIGg9aFIodGhpcykuY29uc3RydWN0b3I7ZD1SZWZsZWN0LmNvbnN0cnVjdChmLGFyZ3VtZW50cyxoKX1lbHNlIGQ9Zi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uIGpxZShsLGMpe2lmKGMmJigib2JqZWN0Ij09PXE3KGMpfHwiZnVuY3Rpb24i'@;
put 'PT10eXBlb2YgYykpcmV0dXJuIGM7aWYodm9pZCAwIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbiB6cWUobCl7aWYodm9pZCAwPT09bCl0aHJvdyBuZXcgUmVm'@;
put 'ZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBsfShsKX0odGhpcyxkKX19KGEpO2Z1bmN0aW9uIGEoKXt2YXIgZjtyZXR1cm4gZnVuY3Rpb24gUHFlKGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykp'@;
put 'dGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsYSksKGY9Yy5jYWxsKHRoaXMsIlREIikpLm9yZGVyVmlld3M9bmV3IFdlYWtNYXAsZi5zb3VyY2VSb3dJbmRleD0wLGZ9cmV0dXJuIGZ1bmN0aW9uIEZxZShsLGMsYSl7YyYmdjFl'@;
put 'KGwucHJvdG90eXBlLGMpLGEmJnYxZShsLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShhLFt7a2V5OiJvYnRhaW5PcmRlclZpZXciLHZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBtLGg9dGhpcztyZXR1cm4gdGhpcy5vcmRlclZpZXdzLmhhcyhk'@;
put 'KT9tPXRoaXMub3JkZXJWaWV3cy5nZXQoZCk6KG09bmV3IHMxZShkLGZ1bmN0aW9uKF8pe3JldHVybiBoLm5vZGVzUG9vbC5vYnRhaW4oaC5zb3VyY2VSb3dJbmRleCxfKX0sdGhpcy5ub2RlVHlwZSksdGhpcy5vcmRlclZpZXdzLnNldChkLG0pKSxtfX0se2tleToicmVuZGVyIix2YWx1ZTpm'@;
put 'dW5jdGlvbigpe2Zvcih2YXIgZD10aGlzLnRhYmxlLGg9ZC5yb3dzVG9SZW5kZXIsbT1kLmNvbHVtbnNUb1JlbmRlcixfPWQucm93cyxPPWQucm93SGVhZGVycyxYPTA7WDxoO1grKyl7dmFyIGFlPXRoaXMudGFibGUucmVuZGVyZWRSb3dUb1NvdXJjZShYKSxwZT1fLmdldFJlbmRlcmVkTm9k'@;
put 'ZShYKTt0aGlzLnNvdXJjZVJvd0luZGV4PWFlO3ZhciBiZT10aGlzLm9idGFpbk9yZGVyVmlldyhwZSkseGU9Ty5vYnRhaW5PcmRlclZpZXcocGUpO2JlLnByZXBlbmRWaWV3KHhlKS5zZXRTaXplKG0pLnNldE9mZnNldCh0aGlzLnRhYmxlLnJlbmRlcmVkQ29sdW1uVG9Tb3VyY2UoMCkpLnN0'@;
put 'YXJ0KCk7Zm9yKHZhciBWZT0wO1ZlPG07VmUrKyl7YmUucmVuZGVyKCk7dmFyIFplPWJlLmdldEN1cnJlbnROb2RlKCksbHQ9dGhpcy50YWJsZS5yZW5kZXJlZENvbHVtblRvU291cmNlKFZlKTtZbyhaZSwiaGlkZSIpfHwoWmUuY2xhc3NOYW1lPSIiKSxaZS5yZW1vdmVBdHRyaWJ1dGUoInN0'@;
put 'eWxlIiksWmUucmVtb3ZlQXR0cmlidXRlKCJkaXIiKSx0aGlzLnRhYmxlLmNlbGxSZW5kZXJlcihhZSxsdCxaZSl9YmUuZW5kKCl9fX1dKSxhfShmTSk7ZnVuY3Rpb24gZE0obCl7cmV0dXJuKGRNPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0'@;
put 'ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24geTFl'@;
put 'KGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxHcWUoZi5rZXkpLGYpfX1mdW5j'@;
put 'dGlvbiBHcWUobCl7dmFyIGM9ZnVuY3Rpb24gJHFlKGwsYyl7aWYoIm9iamVjdCIhPT1kTShsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1kTShm'@;
put 'KSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09ZE0oYyk/YzpTdHJpbmcoYyl9'@;
put 'dmFyIEtxZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGwoYyl7dmFyIGY9KGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSkuY2VsbFJlbmRlcmVyOyhmdW5jdGlvbiBZcWUobCxjKXtpZighKGwgaW5zdGFuY2VvZiBjKSl0aHJvdyBuZXcgVHlw'@;
put 'ZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsbCksdGhpcy5yb290Tm9kZT1jLHRoaXMucm9vdERvY3VtZW50PXRoaXMucm9vdE5vZGUub3duZXJEb2N1bWVudCx0aGlzLnJvd0hlYWRlcnM9bnVsbCx0aGlzLmNvbHVtbkhlYWRlcnM9bnVsbCx0aGlz'@;
put 'LmNvbEdyb3VwPW51bGwsdGhpcy5yb3dzPW51bGwsdGhpcy5jZWxscz1udWxsLHRoaXMucm93RmlsdGVyPW51bGwsdGhpcy5jb2x1bW5GaWx0ZXI9bnVsbCx0aGlzLnJvd1V0aWxzPW51bGwsdGhpcy5jb2x1bW5VdGlscz1udWxsLHRoaXMucm93c1RvUmVuZGVyPTAsdGhpcy5jb2x1bW5zVG9S'@;
put 'ZW5kZXI9MCx0aGlzLnJvd0hlYWRlckZ1bmN0aW9ucz1bXSx0aGlzLnJvd0hlYWRlcnNDb3VudD0wLHRoaXMuY29sdW1uSGVhZGVyRnVuY3Rpb25zPVtdLHRoaXMuY29sdW1uSGVhZGVyc0NvdW50PTAsdGhpcy5jZWxsUmVuZGVyZXI9Zn1yZXR1cm4gZnVuY3Rpb24gV3FlKGwsYyxhKXtjJiZ5'@;
put 'MWUobC5wcm90b3R5cGUsYyksYSYmeTFlKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGwsW3trZXk6InNldEF4aXNVdGlscyIsdmFsdWU6ZnVuY3Rpb24oYSxmKXt0aGlzLnJvd1V0aWxzPWEsdGhpcy5jb2x1bW5VdGlscz1mfX0se2tl'@;
put 'eToic2V0Vmlld3BvcnRTaXplIix2YWx1ZTpmdW5jdGlvbihhLGYpe3RoaXMucm93c1RvUmVuZGVyPWEsdGhpcy5jb2x1bW5zVG9SZW5kZXI9Zn19LHtrZXk6InNldEZpbHRlcnMiLHZhbHVlOmZ1bmN0aW9uKGEsZil7dGhpcy5yb3dGaWx0ZXI9YSx0aGlzLmNvbHVtbkZpbHRlcj1mfX0se2tl'@;
put 'eToic2V0SGVhZGVyQ29udGVudFJlbmRlcmVycyIsdmFsdWU6ZnVuY3Rpb24oYSxmKXt0aGlzLnJvd0hlYWRlckZ1bmN0aW9ucz1hLHRoaXMucm93SGVhZGVyc0NvdW50PWEubGVuZ3RoLHRoaXMuY29sdW1uSGVhZGVyRnVuY3Rpb25zPWYsdGhpcy5jb2x1bW5IZWFkZXJzQ291bnQ9Zi5sZW5n'@;
put 'dGh9fSx7a2V5OiJzZXRSZW5kZXJlcnMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGE9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LGY9YS5yb3dIZWFkZXJzLGQ9YS5jb2x1bW5IZWFkZXJzLGg9YS5jb2xHcm91cCxtPWEucm93cyxfPWEu'@;
put 'Y2VsbHM7Zi5zZXRUYWJsZSh0aGlzKSxkLnNldFRhYmxlKHRoaXMpLGguc2V0VGFibGUodGhpcyksbS5zZXRUYWJsZSh0aGlzKSxfLnNldFRhYmxlKHRoaXMpLHRoaXMucm93SGVhZGVycz1mLHRoaXMuY29sdW1uSGVhZGVycz1kLHRoaXMuY29sR3JvdXA9aCx0aGlzLnJvd3M9bSx0aGlzLmNl'@;
put 'bGxzPV99fSx7a2V5OiJyZW5kZXJlZFJvd1RvU291cmNlIix2YWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5yb3dGaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShhKX19LHtrZXk6InJlbmRlcmVkQ29sdW1uVG9Tb3VyY2UiLHZhbHVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmNvbHVtbkZp'@;
put 'bHRlci5yZW5kZXJlZFRvU291cmNlKGEpfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY29sR3JvdXAuYWRqdXN0KCksdGhpcy5jb2x1bW5IZWFkZXJzLmFkanVzdCgpLHRoaXMucm93cy5hZGp1c3QoKSx0aGlzLnJvd0hlYWRlcnMuYWRqdXN0KCksdGhpcy5jb2x1bW5I'@;
put 'ZWFkZXJzLnJlbmRlcigpLHRoaXMucm93cy5yZW5kZXIoKSx0aGlzLnJvd0hlYWRlcnMucmVuZGVyKCksdGhpcy5jZWxscy5yZW5kZXIoKSx0aGlzLmNvbHVtblV0aWxzLmNhbGN1bGF0ZVdpZHRocygpLHRoaXMuY29sR3JvdXAucmVuZGVyKCk7Zm9yKHZhciBhPXRoaXMucm93c1RvUmVuZGVy'@;
put 'LGY9dGhpcy5yb3dzLGQ9MDtkPGE7ZCsrKXt2YXIgaD1mLmdldFJlbmRlcmVkTm9kZShkKTtpZihoLmZpcnN0Q2hpbGQpe3ZhciBtPXRoaXMucmVuZGVyZWRSb3dUb1NvdXJjZShkKSxfPXRoaXMucm93VXRpbHMuZ2V0SGVpZ2h0KG0pO2guZmlyc3RDaGlsZC5zdHlsZS5oZWlnaHQ9Xz8iIi5j'@;
put 'b25jYXQoXy0xLCJweCIpOiIifX19fV0pLGx9KCk7ZnVuY3Rpb24gaE0obCl7cmV0dXJuKGhNPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMm'@;
put 'JiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gYjFlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxl'@;
put 'PWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxKcWUoZi5rZXkpLGYpfX1mdW5jdGlvbiBKcWUobCl7dmFyIGM9ZnVuY3Rpb24gUXFlKGwsYyl7aWYoIm9iamVjdCIhPT1oTShsKXx8'@;
put 'bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1oTShmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJu'@;
put 'IGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09aE0oYyk/YzpTdHJpbmcoYyl9dmFyIGVYZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGwoKXt2YXIgYz1hcmd1bWVudHMubGVuZ3RoPjAm'@;
put 'JnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sYT1jLlRBQkxFLGY9Yy5USEVBRCxkPWMuQ09MR1JPVVAsaD1jLlRCT0RZLG09Yy5yb3dVdGlscyxfPWMuY29sdW1uVXRpbHMsTz1jLmNlbGxSZW5kZXJlcjsoZnVuY3Rpb24gcXFlKGwsYyl7aWYoIShsIGluc3RhbmNlb2Yg'@;
put 'YykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLGwpLHRoaXMucmVuZGVyZXI9bmV3IEtxZShhLHtjZWxsUmVuZGVyZXI6T30pLHRoaXMucmVuZGVyZXIuc2V0UmVuZGVyZXJzKHtyb3dIZWFkZXJzOm5ldyBycWUsY29sdW1u'@;
put 'SGVhZGVyczpuZXcgaHFlKGYpLGNvbEdyb3VwOm5ldyBTcWUoZCkscm93czpuZXcgTHFlKGgpLGNlbGxzOm5ldyBacWV9KSx0aGlzLnJlbmRlcmVyLnNldEF4aXNVdGlscyhtLF8pfXJldHVybiBmdW5jdGlvbiBYcWUobCxjLGEpe2MmJmIxZShsLnByb3RvdHlwZSxjKSxhJiZiMWUobCxhKSxP'@;
put 'YmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0obCxbe2tleToic2V0RmlsdGVycyIsdmFsdWU6ZnVuY3Rpb24oYSxmKXtyZXR1cm4gdGhpcy5yZW5kZXJlci5zZXRGaWx0ZXJzKGEsZiksdGhpc319LHtrZXk6InNldFZpZXdwb3J0U2l6ZSIsdmFsdWU6'@;
put 'ZnVuY3Rpb24oYSxmKXtyZXR1cm4gdGhpcy5yZW5kZXJlci5zZXRWaWV3cG9ydFNpemUoYSxmKSx0aGlzfX0se2tleToic2V0SGVhZGVyQ29udGVudFJlbmRlcmVycyIsdmFsdWU6ZnVuY3Rpb24oYSxmKXtyZXR1cm4gdGhpcy5yZW5kZXJlci5zZXRIZWFkZXJDb250ZW50UmVuZGVyZXJzKGEs'@;
put 'ZiksdGhpc319LHtrZXk6ImFkanVzdCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcmVyLmFkanVzdCgpfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucmVuZGVyZXIucmVuZGVyKCl9fV0pLGx9KCk7ZnVuY3Rpb24gcE0obCl7cmV0dXJuKHBNPSJmdW5jdGlvbiI9'@;
put 'PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJv'@;
put 'dG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gXzFlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxP'@;
put 'YmplY3QuZGVmaW5lUHJvcGVydHkobCxyWGUoZi5rZXkpLGYpfX1mdW5jdGlvbiByWGUobCl7dmFyIGM9ZnVuY3Rpb24gaVhlKGwsYyl7aWYoIm9iamVjdCIhPT1wTShsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBm'@;
put 'PWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1wTShmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0'@;
put 'cmluZyIpO3JldHVybiJzeW1ib2wiPT09cE0oYyk/YzpTdHJpbmcoYyl9dmFyIG9YZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGwoYyxhKXsoZnVuY3Rpb24gdFhlKGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1'@;
put 'bmN0aW9uIil9KSh0aGlzLGwpLHRoaXMuZGF0YUFjY2Vzc09iamVjdD1jLHRoaXMud3RTZXR0aW5ncz1hLHRoaXMuaGVhZGVyV2lkdGhzPW5ldyBNYXB9cmV0dXJuIGZ1bmN0aW9uIG5YZShsLGMsYSl7YyYmXzFlKGwucHJvdG90eXBlLGMpLGEmJl8xZShsLGEpLE9iamVjdC5kZWZpbmVQcm9w'@;
put 'ZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShsLFt7a2V5OiJnZXRXaWR0aCIsdmFsdWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5XaWR0aCIsYSl8fHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJkZWZhdWx0Q29sdW1u'@;
put 'V2lkdGgiKX19LHtrZXk6ImdldFN0cmV0Y2hlZENvbHVtbldpZHRoIix2YWx1ZTpmdW5jdGlvbihhKXt2YXIgZj10aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvcixkPXRoaXMuZ2V0V2lkdGgoYSk7aWYoZil7dmFyIGg9Zi5nZXRTdHJldGNo'@;
put 'ZWRDb2x1bW5XaWR0aChhLGQpO2gmJihkPWgpfXJldHVybiBkfX0se2tleToiZ2V0SGVhZGVySGVpZ2h0Iix2YWx1ZTpmdW5jdGlvbihhKXt2YXIgZj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZGVmYXVsdFJvd0hlaWdodCIpLGQ9dGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3Bv'@;
put 'cnQub3ZlcnNpemVkQ29sdW1uSGVhZGVyc1thXTtyZXR1cm4gdm9pZCAwIT09ZCYmKGY9Zj9NYXRoLm1heChmLGQpOmQpLGZ9fSx7a2V5OiJnZXRIZWFkZXJXaWR0aCIsdmFsdWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaGVhZGVyV2lkdGhzLmdldCh0aGlzLmRhdGFBY2Nlc3NPYmplY3Qu'@;
put 'd3RUYWJsZS5jb2x1bW5GaWx0ZXIuc291cmNlVG9SZW5kZXJlZChhKSl9fSx7a2V5OiJjYWxjdWxhdGVXaWR0aHMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy53dFNldHRpbmdzLGY9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LGg9Zi53dFZpZXdwb3J0LG09Zi5jbG9uZVNvdXJjZSxfPW0/'@;
put 'bS53dFRhYmxlLmhvbGRlcjpmLnd0VGFibGUuaG9sZGVyLE89Xy5vZmZzZXRIZWlnaHQ8Xy5zY3JvbGxIZWlnaHQ/TnUoKTowLFg9YS5nZXRTZXR0aW5nKCJyb3dIZWFkZXJXaWR0aCIpO2lmKGguY29sdW1uc1JlbmRlckNhbGN1bGF0b3IucmVmcmVzaFN0cmV0Y2hpbmcoaC5nZXRWaWV3cG9y'@;
put 'dFdpZHRoKCktTyksbnVsbCE9KFg9YS5nZXRTZXR0aW5nKCJvbk1vZGlmeVJvd0hlYWRlcldpZHRoIixYKSkpZm9yKHZhciBhZT1hLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKS5sZW5ndGgscGU9YS5nZXRTZXR0aW5nKCJkZWZhdWx0Q29sdW1uV2lkdGgiKSxiZT0wO2JlPGFlO2JlKyspe3Zh'@;
put 'ciB4ZT1BcnJheS5pc0FycmF5KFgpP1hbYmVdOlg7dGhpcy5oZWFkZXJXaWR0aHMuc2V0KGJlLHhlPXhlPz9wZSl9fX1dKSxsfSgpO2Z1bmN0aW9uIG1NKGwpe3JldHVybihtTT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5j'@;
put 'dGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIHcxZShsLGMpe2Zvcih2'@;
put 'YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsc1hlKGYua2V5KSxmKX19ZnVuY3Rpb24gc1hlKGwp'@;
put 'e3ZhciBjPWZ1bmN0aW9uIHVYZShsLGMpe2lmKCJvYmplY3QiIT09bU0obCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09bU0oZikpcmV0dXJuIGY7'@;
put 'dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PW1NKGMpP2M6U3RyaW5nKGMpfXZhciBjWGU9ZnVu'@;
put 'Y3Rpb24oKXtmdW5jdGlvbiBsKGMsYSl7KGZ1bmN0aW9uIGFYZShsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyxsKSx0aGlzLmRhdGFBY2Nlc3NPYmplY3Q9Yyx0aGlzLnd0U2V0'@;
put 'dGluZ3M9YX1yZXR1cm4gZnVuY3Rpb24gbFhlKGwsYyxhKXtjJiZ3MWUobC5wcm90b3R5cGUsYyksYSYmdzFlKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGwsW3trZXk6ImdldEhlaWdodCIsdmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGY9'@;
put 'dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJvd0hlaWdodCIsYSksZD10aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRSb3dzW2FdO3JldHVybiB2b2lkIDAhPT1kJiYoZj12b2lkIDA9PT1mP2Q6TWF0aC5tYXgoZixkKSksZn19XSksbH0oKSx3NT0idG9wIixW'@;
put 'aD0iYm90dG9tIixDNT0iaW5saW5lX3N0YXJ0IixTNT0idG9wX2lubGluZV9zdGFydF9jb3JuZXIiLFI0PSJib3R0b21faW5saW5lX3N0YXJ0X2Nvcm5lciIsZlhlPVt3NSxWaCxDNSxTNSxSNF0sZFhlPW5ldyBNYXAoW1t3NSwiaHRfY2xvbmVfIi5jb25jYXQodzUpXSxbVmgsImh0X2Nsb25l'@;
put 'XyIuY29uY2F0KFZoKV0sW0M1LCJodF9jbG9uZV8iLmNvbmNhdChDNSwiIGh0X2Nsb25lX2xlZnQiKV0sW1M1LCJodF9jbG9uZV8iLmNvbmNhdChTNSwiIGh0X2Nsb25lX3RvcF9sZWZ0X2Nvcm5lciIpXSxbUjQsImh0X2Nsb25lXyIuY29uY2F0KFI0LCIgaHRfY2xvbmVfYm90dG9tX2xlZnRf'@;
put 'Y29ybmVyIildXSk7ZnVuY3Rpb24gZ00obCl7cmV0dXJuKGdNPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVv'@;
put 'ZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gQzFlKGwsYyl7aWYobCl7aWYoInN0cmluZyI9PXR5cGVvZiBsKXJldHVybiBsVyhsLGMpO3ZhciBhPU9iamVjdC5wcm90b3R5cGUudG9T'@;
put 'dHJpbmcuY2FsbChsKS5zbGljZSg4LC0xKTtpZigiT2JqZWN0Ij09PWEmJmwuY29uc3RydWN0b3ImJihhPWwuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1hfHwiU2V0Ij09PWEpcmV0dXJuIEFycmF5LmZyb20obCk7aWYoIkFyZ3VtZW50cyI9PT1hfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMy'@;
put 'KSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChhKSlyZXR1cm4gbFcobCxjKX19ZnVuY3Rpb24gbFcobCxjKXsobnVsbD09Y3x8Yz5sLmxlbmd0aCkmJihjPWwubGVuZ3RoKTtmb3IodmFyIGE9MCxmPW5ldyBBcnJheShjKTthPGM7YSsrKWZbYV09bFthXTtyZXR1cm4gZn1mdW5jdGlvbiBTMWUo'@;
put 'bCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLE0xZShmLmtleSksZil9fWZ1bmN0'@;
put 'aW9uIEJoKGwsYyxhKXtyZXR1cm4oYz1NMWUoYykpaW4gbD9PYmplY3QuZGVmaW5lUHJvcGVydHkobCxjLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6bFtjXT1hLGx9ZnVuY3Rpb24gTTFlKGwpe3ZhciBjPWZ1bmN0aW9uIFNYZShsLGMpe2lm'@;
put 'KCJvYmplY3QiIT09Z00obCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09Z00oZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1By'@;
put 'aW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PWdNKGMpP2M6U3RyaW5nKGMpfXZhciBNWGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKGMsYSxmLGQs'@;
put 'aCl7dmFyIG09dGhpczsoZnVuY3Rpb24gd1hlKGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLGwpLEJoKHRoaXMsInd0U2V0dGluZ3MiLG51bGwpLEJoKHRoaXMsImRvbUJpbmRp'@;
put 'bmdzIix2b2lkIDApLEJoKHRoaXMsIlRCT0RZIixudWxsKSxCaCh0aGlzLCJUSEVBRCIsbnVsbCksQmgodGhpcywiQ09MR1JPVVAiLG51bGwpLEJoKHRoaXMsImhhc1RhYmxlSGVpZ2h0IiwhMCksQmgodGhpcywiaGFzVGFibGVXaWR0aCIsITApLEJoKHRoaXMsImlzVGFibGVWaXNpYmxlIiwh'@;
put 'MSksQmgodGhpcywidGFibGVPZmZzZXQiLDApLEJoKHRoaXMsImhvbGRlck9mZnNldCIsMCksdGhpcy5kb21CaW5kaW5ncz1mLHRoaXMuaXNNYXN0ZXI9Im1hc3RlciI9PT1oLHRoaXMubmFtZT1oLHRoaXMuZGF0YUFjY2Vzc09iamVjdD1jLHRoaXMuZmFjYWRlR2V0dGVyPWEsdGhpcy53dFNl'@;
put 'dHRpbmdzPWQsdGhpcy5pbnN0YW5jZT10aGlzLmRhdGFBY2Nlc3NPYmplY3Qud290LHRoaXMud290PXRoaXMuZGF0YUFjY2Vzc09iamVjdC53b3QsdGhpcy5UQUJMRT1mLnJvb3RUYWJsZSxNWSh0aGlzLlRBQkxFKSx0aGlzLnNwcmVhZGVyPXRoaXMuY3JlYXRlU3ByZWFkZXIodGhpcy5UQUJM'@;
put 'RSksdGhpcy5oaWRlcj10aGlzLmNyZWF0ZUhpZGVyKHRoaXMuc3ByZWFkZXIpLHRoaXMuaG9sZGVyPXRoaXMuY3JlYXRlSG9sZGVyKHRoaXMuaGlkZXIpLHRoaXMud3RSb290RWxlbWVudD10aGlzLmhvbGRlci5wYXJlbnROb2RlLHRoaXMuaXNNYXN0ZXImJnRoaXMuYWxpZ25PdmVybGF5c1dp'@;
put 'dGhUcmltbWluZ0NvbnRhaW5lcigpLHRoaXMuZml4VGFibGVEb21UcmVlKCksdGhpcy5yb3dGaWx0ZXI9bnVsbCx0aGlzLmNvbHVtbkZpbHRlcj1udWxsLHRoaXMuY29ycmVjdEhlYWRlcldpZHRoPSExO3ZhciBfPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nUHVyZSgicm93SGVhZGVyV2lk'@;
put 'dGgiKTt0aGlzLnd0U2V0dGluZ3MudXBkYXRlKCJyb3dIZWFkZXJXaWR0aCIsZnVuY3Rpb24oKXtyZXR1cm4gbS5fbW9kaWZ5Um93SGVhZGVyV2lkdGgoXyl9KSx0aGlzLnJvd1V0aWxzPW5ldyBjWGUodGhpcy5kYXRhQWNjZXNzT2JqZWN0LHRoaXMud3RTZXR0aW5ncyksdGhpcy5jb2x1bW5V'@;
put 'dGlscz1uZXcgb1hlKHRoaXMuZGF0YUFjY2Vzc09iamVjdCx0aGlzLnd0U2V0dGluZ3MpLHRoaXMudGFibGVSZW5kZXJlcj1uZXcgZVhlKHtUQUJMRTp0aGlzLlRBQkxFLFRIRUFEOnRoaXMuVEhFQUQsQ09MR1JPVVA6dGhpcy5DT0xHUk9VUCxUQk9EWTp0aGlzLlRCT0RZLHJvd1V0aWxzOnRo'@;
put 'aXMucm93VXRpbHMsY29sdW1uVXRpbHM6dGhpcy5jb2x1bW5VdGlscyxjZWxsUmVuZGVyZXI6dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmdQdXJlKCJjZWxsUmVuZGVyZXIiKX0pfXJldHVybiBmdW5jdGlvbiBDWGUobCxjLGEpe2MmJlMxZShsLnByb3RvdHlwZSxjKSxhJiZTMWUobCxhKSxP'@;
put 'YmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0obCxbe2tleToiaXMiLHZhbHVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm5hbWU9PT1hfX0se2tleToiZml4VGFibGVEb21UcmVlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZG9tQmluZGlu'@;
put 'Z3Mucm9vdERvY3VtZW50O3RoaXMuVEJPRFk9dGhpcy5UQUJMRS5xdWVyeVNlbGVjdG9yKCJ0Ym9keSIpLHRoaXMuVEJPRFl8fCh0aGlzLlRCT0RZPWEuY3JlYXRlRWxlbWVudCgidGJvZHkiKSx0aGlzLlRBQkxFLmFwcGVuZENoaWxkKHRoaXMuVEJPRFkpKSx0aGlzLlRIRUFEPXRoaXMuVEFC'@;
put 'TEUucXVlcnlTZWxlY3RvcigidGhlYWQiKSx0aGlzLlRIRUFEfHwodGhpcy5USEVBRD1hLmNyZWF0ZUVsZW1lbnQoInRoZWFkIiksdGhpcy5UQUJMRS5pbnNlcnRCZWZvcmUodGhpcy5USEVBRCx0aGlzLlRCT0RZKSksdGhpcy5DT0xHUk9VUD10aGlzLlRBQkxFLnF1ZXJ5U2VsZWN0b3IoImNv'@;
put 'bGdyb3VwIiksdGhpcy5DT0xHUk9VUHx8KHRoaXMuQ09MR1JPVVA9YS5jcmVhdGVFbGVtZW50KCJjb2xncm91cCIpLHRoaXMuVEFCTEUuaW5zZXJ0QmVmb3JlKHRoaXMuQ09MR1JPVVAsdGhpcy5USEVBRCkpfX0se2tleToiY3JlYXRlU3ByZWFkZXIiLHZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBk'@;
put 'LGY9YS5wYXJlbnROb2RlO3JldHVybighZnx8Zi5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFfHwhWW8oZiwid3RIb2xkZXIiKSkmJigoZD10aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSkuY2xhc3NOYW1lPSJ3dFNwcmVhZGVyIixmJiZmLmlu'@;
put 'c2VydEJlZm9yZShkLGEpLGQuYXBwZW5kQ2hpbGQoYSkpLGQuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIixkfX0se2tleToiY3JlYXRlSGlkZXIiLHZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBkLGY9YS5wYXJlbnROb2RlO3JldHVybighZnx8Zi5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RF'@;
put 'fHwhWW8oZiwid3RIb2xkZXIiKSkmJigoZD10aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSkuY2xhc3NOYW1lPSJ3dEhpZGVyIixmJiZmLmluc2VydEJlZm9yZShkLGEpLGQuYXBwZW5kQ2hpbGQoYSkpLGR9fSx7a2V5OiJjcmVhdGVIb2xkZXIiLHZh'@;
put 'bHVlOmZ1bmN0aW9uKGEpe3ZhciBkLGY9YS5wYXJlbnROb2RlO3JldHVybighZnx8Zi5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFfHwhWW8oZiwid3RIb2xkZXIiKSkmJigoZD10aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSkuc3R5bGUucG9z'@;
put 'aXRpb249InJlbGF0aXZlIixkLmNsYXNzTmFtZT0id3RIb2xkZXIiLGYmJmYuaW5zZXJ0QmVmb3JlKGQsYSksdGhpcy5pc01hc3RlciYmKGQucGFyZW50Tm9kZS5jbGFzc05hbWUrPSJodF9tYXN0ZXIgaGFuZHNvbnRhYmxlIixkLnBhcmVudE5vZGUuc2V0QXR0cmlidXRlKCJkaXIiLHRoaXMu'@;
put 'd3RTZXR0aW5ncy5nZXRTZXR0aW5nUHVyZSgicnRsTW9kZSIpPyJydGwiOiJsdHIiKSksZC5hcHBlbmRDaGlsZChhKSksZH19LHtrZXk6ImRyYXciLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGE9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSxm'@;
put 'PXRoaXMud3RTZXR0aW5ncyxkPXRoaXMuZGF0YUFjY2Vzc09iamVjdCxoPWQud3RPdmVybGF5cyxtPWQud3RWaWV3cG9ydCxfPWYuZ2V0U2V0dGluZygidG90YWxSb3dzIiksTz1mLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLFg9Zi5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIiksYWU9WC5s'@;
put 'ZW5ndGgscGU9Zi5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIiksYmU9cGUubGVuZ3RoLHhlPSExLFZlPWE7aWYodGhpcy5pc01hc3RlciYmKHRoaXMuaG9sZGVyT2Zmc2V0PWl1KHRoaXMuaG9sZGVyKSxWZT1tLmNyZWF0ZVJlbmRlckNhbGN1bGF0b3JzKFZlKSxhZSYmIWYuZ2V0U2V0dGlu'@;
put 'ZygiZml4ZWRDb2x1bW5zU3RhcnQiKSkpe3ZhciBaZT1oLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRTY3JvbGxQb3NpdGlvbigpLGx0PXRoaXMuY29ycmVjdEhlYWRlcldpZHRoO3RoaXMuY29ycmVjdEhlYWRlcldpZHRoPTAhPT1aZSxsdCE9PXRoaXMuY29ycmVjdEhlYWRlcldpZHRoJiYoVmU9'@;
put 'ITEpfWlmKHRoaXMuaXNNYXN0ZXImJih4ZT1oLnVwZGF0ZVN0YXRlT2ZSZW5kZXJpbmcoKSksVmUpdGhpcy5pc01hc3RlciYmbS5jcmVhdGVWaXNpYmxlQ2FsY3VsYXRvcnMoKSxoJiZoLnJlZnJlc2goITApO2Vsc2V7dGhpcy50YWJsZU9mZnNldD10aGlzLmlzTWFzdGVyP2l1KHRoaXMuVEFC'@;
put 'TEUpOnRoaXMuZGF0YUFjY2Vzc09iamVjdC5wYXJlbnRUYWJsZU9mZnNldDt2YXIgZHQ9Xz4wP3RoaXMuZ2V0Rmlyc3RSZW5kZXJlZFJvdygpOjAsZ3Q9Tz4wP3RoaXMuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpOjA7dGhpcy5yb3dGaWx0ZXI9bmV3IG1LZShkdCxfLGJlKSx0aGlzLmNvbHVt'@;
put 'bkZpbHRlcj1uZXcgdUtlKGd0LE8sYWUpO3ZhciBYdCxqdD0hMDtpZih0aGlzLmlzTWFzdGVyKXt0aGlzLmFsaWduT3ZlcmxheXNXaXRoVHJpbW1pbmdDb250YWluZXIoKTt2YXIgcm49e307dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImJlZm9yZURyYXciLCEwLHJuKSxqdD0hMCE9PXJu'@;
put 'LnNraXBSZW5kZXJ9aWYoanQpaWYodGhpcy50YWJsZVJlbmRlcmVyLnNldEhlYWRlckNvbnRlbnRSZW5kZXJlcnMoWCxwZSksKHRoaXMuaXMoVmgpfHx0aGlzLmlzKFI0KSkmJnRoaXMudGFibGVSZW5kZXJlci5zZXRIZWFkZXJDb250ZW50UmVuZGVyZXJzKFgsW10pLHRoaXMucmVzZXRPdmVy'@;
put 'c2l6ZWRSb3dzKCksdGhpcy50YWJsZVJlbmRlcmVyLnNldFZpZXdwb3J0U2l6ZSh0aGlzLmdldFJlbmRlcmVkUm93c0NvdW50KCksdGhpcy5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpKS5zZXRGaWx0ZXJzKHRoaXMucm93RmlsdGVyLHRoaXMuY29sdW1uRmlsdGVyKS5yZW5kZXIoKSx0aGlz'@;
put 'LmlzTWFzdGVyJiYoWHQ9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LndvcmtzcGFjZVdpZHRoLHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0LmNvbnRhaW5lcldpZHRoPW51bGwsdGhpcy5tYXJrT3ZlcnNpemVkQ29sdW1uSGVhZGVycygpKSx0aGlzLmFkanVzdENvbHVtbkhlYWRlckhl'@;
put 'aWdodHMoKSwodGhpcy5pc01hc3Rlcnx8dGhpcy5pcyhWaCkpJiZ0aGlzLm1hcmtPdmVyc2l6ZWRSb3dzKCksdGhpcy5pc01hc3Rlcil7dGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQuY3JlYXRlVmlzaWJsZUNhbGN1bGF0b3JzKCksdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0T3Zl'@;
put 'cmxheXMucmVmcmVzaCghMSksdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0T3ZlcmxheXMuYXBwbHlUb0RPTSgpO3ZhciB5bj1TbCh0aGlzLmhpZGVyKSxRbj1TbCh0aGlzLlRBQkxFKTswIT09eW4mJlFuIT09eW4mJih0aGlzLmNvbHVtblV0aWxzLmNhbGN1bGF0ZVdpZHRocygpLHRoaXMudGFi'@;
put 'bGVSZW5kZXJlci5yZW5kZXJlci5jb2xHcm91cC5yZW5kZXIoKSksWHQhPT10aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5nZXRXb3Jrc3BhY2VXaWR0aCgpJiYodGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQuY29udGFpbmVyV2lkdGg9bnVsbCx0aGlzLmNvbHVtblV0'@;
put 'aWxzLmNhbGN1bGF0ZVdpZHRocygpLHRoaXMudGFibGVSZW5kZXJlci5yZW5kZXJlci5jb2xHcm91cC5yZW5kZXIoKSksdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uRHJhdyIsITApfWVsc2UgdGhpcy5pcyhWaCkmJnRoaXMuZGF0YUFjY2Vzc09iamVjdC5jbG9uZVNvdXJjZS53dE92'@;
put 'ZXJsYXlzLmFkanVzdEVsZW1lbnRzU2l6ZSgpfXZhciBPcj0hMTtyZXR1cm4gdGhpcy5pc01hc3RlciYmKE9yPWgudG9wT3ZlcmxheS5yZXNldEZpeGVkUG9zaXRpb24oKSxoLmJvdHRvbU92ZXJsYXkuY2xvbmUmJihPcj1oLmJvdHRvbU92ZXJsYXkucmVzZXRGaXhlZFBvc2l0aW9uKCl8fE9y'@;
put 'KSxPcj1oLmlubGluZVN0YXJ0T3ZlcmxheS5yZXNldEZpeGVkUG9zaXRpb24oKXx8T3IsaC50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkmJmgudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LnJlc2V0Rml4ZWRQb3NpdGlvbigpLGguYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5'@;
put 'JiZoLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZSYmaC5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkucmVzZXRGaXhlZFBvc2l0aW9uKCkpLE9yPyhoLnJlZnJlc2hBbGwoKSxoLmFkanVzdEVsZW1lbnRzU2l6ZSgpKTp0aGlzLnJlZnJlc2hTZWxlY3Rpb25zKFZl'@;
put 'KSx4ZSYmaC5zeW5jU2Nyb2xsV2l0aE1hc3RlcigpLHRoaXMuZGF0YUFjY2Vzc09iamVjdC5kcmF3bj0hMCx0aGlzfX0se2tleToibWFya0lmT3ZlcnNpemVkQ29sdW1uSGVhZGVyIix2YWx1ZTpmdW5jdGlvbihhKXtmb3IodmFyIG0sXyxPLGY9dGhpcy5jb2x1bW5GaWx0ZXIucmVuZGVyZWRU'@;
put 'b1NvdXJjZShhKSxkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoLGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImRlZmF1bHRSb3dIZWlnaHQiKSxYPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJIZWlnaHQiKXx8'@;
put 'W107ZDspbT10aGlzLmdldENvbHVtbkhlYWRlckhlaWdodChkLT0xKSwoXz10aGlzLmdldENvbHVtbkhlYWRlcihmLGQpKSYmKE89ZDMoXyksKCFtJiZoPE98fG08TykmJih0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzW2RdPU8pLEFycmF5'@;
put 'LmlzQXJyYXkoWCk/bnVsbCE9WFtkXSYmKHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENvbHVtbkhlYWRlcnNbZF09WFtkXSk6aXNOYU4oWCl8fCh0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzW2RdPVgpLHRo'@;
put 'aXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENvbHVtbkhlYWRlcnNbZF08KFhbZF18fFgpJiYodGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkQ29sdW1uSGVhZGVyc1tkXT1YW2RdfHxYKSl9fSx7a2V5OiJhZGp1c3RDb2x1bW5IZWFkZXJI'@;
put 'ZWlnaHRzIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZj10aGlzLlRIRUFELmNoaWxkTm9kZXMsZD10aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzLG09MCxfPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIiku'@;
put 'bGVuZ3RoO208XzttKyspaWYoZFttXSl7aWYoIWZbbV18fDA9PT1mW21dLmNoaWxkTm9kZXMubGVuZ3RoKXJldHVybjtmW21dLmNoaWxkTm9kZXNbMF0uc3R5bGUuaGVpZ2h0PSIiLmNvbmNhdChkW21dLCJweCIpfX19LHtrZXk6InJlc2V0T3ZlcnNpemVkUm93cyIsdmFsdWU6ZnVuY3Rpb24o'@;
put 'KXt2YXIgYT10aGlzLnd0U2V0dGluZ3MsZj10aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydDtpZigodGhpcy5pc01hc3Rlcnx8dGhpcy5pcyhWaCkpJiYhYS5nZXRTZXR0aW5nKCJleHRlcm5hbFJvd0NhbGN1bGF0b3IiKSlmb3IodmFyIGQ9dGhpcy5nZXRSZW5kZXJlZFJvd3NDb3Vu'@;
put 'dCgpLGg9MDtoPGQ7aCsrKXt2YXIgbT10aGlzLnJvd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKGgpO2Yub3ZlcnNpemVkUm93cyYmZi5vdmVyc2l6ZWRSb3dzW21dJiYoZi5vdmVyc2l6ZWRSb3dzW21dPXZvaWQgMCl9fX0se2tleToicmVtb3ZlQ2xhc3NGcm9tQ2VsbHMiLHZhbHVlOmZ1bmN0'@;
put 'aW9uKGEpe2Zvcih2YXIgZj10aGlzLlRBQkxFLnF1ZXJ5U2VsZWN0b3JBbGwoIi4iLmNvbmNhdChhKSksZD0wLGg9Zi5sZW5ndGg7ZDxoO2QrKylKbyhmW2RdLGEpfX0se2tleToicmVmcmVzaFNlbGVjdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBmPXRoaXMud3RTZXR0aW5ncyxkPXRo'@;
put 'aXMuZGF0YUFjY2Vzc09iamVjdC5zZWxlY3Rpb25zO2lmKGQpe3ZhciBoPUFycmF5LmZyb20oZCksbT1oLmxlbmd0aDtpZihhKXtmb3IodmFyIF89W10sTz0wO088bTtPKyspe2Zvcih2YXIgWD1oW09dLnNldHRpbmdzLGFlPVguaGlnaGxpZ2h0SGVhZGVyQ2xhc3NOYW1lLHBlPVguaGlnaGxp'@;
put 'Z2h0Um93Q2xhc3NOYW1lLGJlPVguaGlnaGxpZ2h0Q29sdW1uQ2xhc3NOYW1lLHhlPWhbT10uY2xhc3NOYW1lcyxWZT14ZS5sZW5ndGgsWmU9MDtaZTxWZTtaZSsrKV8uaW5jbHVkZXMoeGVbWmVdKXx8Xy5wdXNoKHhlW1plXSk7YWUmJiFfLmluY2x1ZGVzKGFlKSYmXy5wdXNoKGFlKSxwZSYm'@;
put 'IV8uaW5jbHVkZXMocGUpJiZfLnB1c2gocGUpLGJlJiYhXy5pbmNsdWRlcyhiZSkmJl8ucHVzaChiZSl9dmFyIGx0PWYuZ2V0U2V0dGluZygib25CZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lcyIpO2lmKEFycmF5LmlzQXJyYXkobHQpKWZvcih2YXIgZHQ9MDtkdDxsdC5sZW5ndGg7ZHQrKylf'@;
put 'LnB1c2gobHRbZHRdKTtmb3IodmFyIGd0PV8ubGVuZ3RoLGp0PTA7anQ8Z3Q7anQrKyl0aGlzLnJlbW92ZUNsYXNzRnJvbUNlbGxzKF9banRdKX1mb3IodmFyIHJuPTA7cm48bTtybisrKWhbcm5dLmRyYXcodGhpcy5mYWNhZGVHZXR0ZXIoKSxhKX19fSx7a2V5OiJnZXRDZWxsIix2YWx1ZTpm'@;
put 'dW5jdGlvbihhKXt2YXIgZj1hLnJvdyxkPWEuY29sLGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uTW9kaWZ5R2V0Q2VsbENvb3JkcyIsZixkKTtpZihoJiZBcnJheS5pc0FycmF5KGgpKXt2YXIgbT1mdW5jdGlvbiB2WGUobCxjKXtyZXR1cm4gZnVuY3Rpb24gX1hlKGwpe2lmKEFy'@;
put 'cmF5LmlzQXJyYXkobCkpcmV0dXJuIGx9KGwpfHxmdW5jdGlvbiBiWGUobCxjKXt2YXIgYT1udWxsPT1sP251bGw6dHlwZW9mIFN5bWJvbDwidSImJmxbU3ltYm9sLml0ZXJhdG9yXXx8bFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPWEpe3ZhciBmLGQsaCxtLF89W10sTz0hMCxYPSExO3RyeXtp'@;
put 'ZihoPShhPWEuY2FsbChsKSkubmV4dCwwPT09Yyl7aWYoT2JqZWN0KGEpIT09YSlyZXR1cm47Tz0hMX1lbHNlIGZvcig7IShPPShmPWguY2FsbChhKSkuZG9uZSkmJihfLnB1c2goZi52YWx1ZSksXy5sZW5ndGghPT1jKTtPPSEwKTt9Y2F0Y2goYWUpe1g9ITAsZD1hZX1maW5hbGx5e3RyeXtp'@;
put 'ZighTyYmbnVsbCE9YS5yZXR1cm4mJihtPWEucmV0dXJuKCksT2JqZWN0KG0pIT09bSkpcmV0dXJufWZpbmFsbHl7aWYoWCl0aHJvdyBkfX1yZXR1cm4gX319KGwsYyl8fEMxZShsLGMpfHxmdW5jdGlvbiB5WGUoKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVz'@;
put 'dHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfShoLDIpO2Y9bVswXSxkPW1bMV19aWYodGhpcy5pc1Jvd0JlZm9yZVJlbmRl'@;
put 'cmVkUm93cyhmKSlyZXR1cm4tMTtpZih0aGlzLmlzUm93QWZ0ZXJSZW5kZXJlZFJvd3MoZikpcmV0dXJuLTI7aWYodGhpcy5pc0NvbHVtbkJlZm9yZVJlbmRlcmVkQ29sdW1ucyhkKSlyZXR1cm4tMztpZih0aGlzLmlzQ29sdW1uQWZ0ZXJSZW5kZXJlZENvbHVtbnMoZCkpcmV0dXJuLTQ7dmFy'@;
put 'IF89dGhpcy5nZXRSb3coZik7aWYoIV8mJmY+PTApdGhyb3cgbmV3IEVycm9yKCJUUiB3YXMgZXhwZWN0ZWQgdG8gYmUgcmVuZGVyZWQgYnV0IGlzIG5vdCIpO3ZhciBPPV8uY2hpbGROb2Rlc1t0aGlzLmNvbHVtbkZpbHRlci5zb3VyY2VDb2x1bW5Ub1Zpc2libGVSb3dIZWFkZWRDb2x1bW4o'@;
put 'ZCldO2lmKCFPJiZkPj0wKXRocm93IG5ldyBFcnJvcigiVEQgb3IgVEggd2FzIGV4cGVjdGVkIHRvIGJlIHJlbmRlcmVkIGJ1dCBpcyBub3QiKTtyZXR1cm4gT319LHtrZXk6ImdldFJvdyIsdmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGgsbSxmPW51bGwsZD1udWxsO3JldHVybiBhPDA/KGY9bnVs'@;
put 'bD09PShoPXRoaXMucm93RmlsdGVyKXx8dm9pZCAwPT09aD92b2lkIDA6aC5zb3VyY2VSb3dUb1Zpc2libGVDb2xIZWFkZWRSb3coYSksZD10aGlzLlRIRUFEKTooZj1udWxsPT09KG09dGhpcy5yb3dGaWx0ZXIpfHx2b2lkIDA9PT1tP3ZvaWQgMDptLnNvdXJjZVRvUmVuZGVyZWQoYSksZD10'@;
put 'aGlzLlRCT0RZKSx2b2lkIDAhPT1mJiZ2b2lkIDAhPT1kJiYhKGQuY2hpbGROb2Rlcy5sZW5ndGg8ZisxKSYmZC5jaGlsZE5vZGVzW2ZdfX0se2tleToiZ2V0Q29sdW1uSGVhZGVyIix2YWx1ZTpmdW5jdGlvbihhKXt2YXIgZD10aGlzLlRIRUFELmNoaWxkTm9kZXNbYXJndW1lbnRzLmxlbmd0'@;
put 'aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjBdO3JldHVybiBkPy5jaGlsZE5vZGVzW3RoaXMuY29sdW1uRmlsdGVyLnNvdXJjZUNvbHVtblRvVmlzaWJsZVJvd0hlYWRlZENvbHVtbihhKV19fSx7a2V5OiJnZXRDb2x1bW5IZWFkZXJzIix2YWx1ZTpmdW5jdGlvbihh'@;
put 'KXt2YXIgZj1bXSxkPXRoaXMuY29sdW1uRmlsdGVyLnNvdXJjZUNvbHVtblRvVmlzaWJsZVJvd0hlYWRlZENvbHVtbihhKTtyZXR1cm4gdGhpcy5USEVBRC5jaGlsZE5vZGVzLmZvckVhY2goZnVuY3Rpb24oaCl7dmFyIG09aC5jaGlsZE5vZGVzW2RdO20mJmYucHVzaChtKX0pLGZ9fSx7a2V5'@;
put 'OiJnZXRSb3dIZWFkZXIiLHZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBmPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO2lmKDAhPT10aGlzLmNvbHVtbkZpbHRlci5zb3VyY2VDb2x1bW5Ub1Zpc2libGVSb3dIZWFkZWRDb2x1bW4oMCkmJiEo'@;
put 'Zj49dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKS5sZW5ndGgpKXt2YXIgaD10aGlzLlRCT0RZLmNoaWxkTm9kZXNbdGhpcy5yb3dGaWx0ZXIuc291cmNlVG9SZW5kZXJlZChhKV07cmV0dXJuIGg/LmNoaWxkTm9kZXNbZl19fX0se2tleToiZ2V0Um93SGVhZGVycyIs'@;
put 'dmFsdWU6ZnVuY3Rpb24oYSl7aWYoMD09PXRoaXMuY29sdW1uRmlsdGVyLnNvdXJjZUNvbHVtblRvVmlzaWJsZVJvd0hlYWRlZENvbHVtbigwKSlyZXR1cm5bXTtmb3IodmFyIGY9W10sZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLmxlbmd0aCxoPTA7aDxkO2gr'@;
put 'Kyl7dmFyIG09dGhpcy5UQk9EWS5jaGlsZE5vZGVzW3RoaXMucm93RmlsdGVyLnNvdXJjZVRvUmVuZGVyZWQoYSldLF89bT8uY2hpbGROb2Rlc1toXTtfJiZmLnB1c2goXyl9cmV0dXJuIGZ9fSx7a2V5OiJnZXRDb29yZHMiLHZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBmPWE7aWYoIlREIiE9PWYu'@;
put 'bm9kZU5hbWUmJiJUSCIhPT1mLm5vZGVOYW1lJiYoZj14NChmLFsiVEQiLCJUSCJdKSksbnVsbD09PWYpcmV0dXJuIG51bGw7dmFyIGQ9Zi5wYXJlbnROb2RlLGg9ZC5wYXJlbnROb2RlLG09bTBlKGQpLF89Zi5jZWxsSW5kZXg7cmV0dXJuIFQ0KFM1LGYsdGhpcy53dFJvb3RFbGVtZW50KXx8'@;
put 'VDQodzUsZix0aGlzLnd0Um9vdEVsZW1lbnQpPyJUSEVBRCI9PT1oLm5vZGVOYW1lJiYobS09aC5jaGlsZE5vZGVzLmxlbmd0aCk6bT1UNChSNCxmLHRoaXMud3RSb290RWxlbWVudCl8fFQ0KFZoLGYsdGhpcy53dFJvb3RFbGVtZW50KT90aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90'@;
put 'YWxSb3dzIiktaC5jaGlsZE5vZGVzLmxlbmd0aCttOmg9PT10aGlzLlRIRUFEP3RoaXMucm93RmlsdGVyLnZpc2libGVDb2xIZWFkZWRSb3dUb1NvdXJjZVJvdyhtKTp0aGlzLnJvd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKG0pLF89VDQoUzUsZix0aGlzLnd0Um9vdEVsZW1lbnQpfHxUNChD'@;
put 'NSxmLHRoaXMud3RSb290RWxlbWVudCl8fFQ0KFI0LGYsdGhpcy53dFJvb3RFbGVtZW50KT90aGlzLmNvbHVtbkZpbHRlci5vZmZzZXR0ZWRUSChfKTp0aGlzLmNvbHVtbkZpbHRlci52aXNpYmxlUm93SGVhZGVkQ29sdW1uVG9Tb3VyY2VDb2x1bW4oXyksdGhpcy53b3QuY3JlYXRlQ2VsbENv'@;
put 'b3JkcyhtLF8pfX0se2tleToibWFya092ZXJzaXplZFJvd3MiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJleHRlcm5hbFJvd0NhbGN1bGF0b3IiKSl7dmFyIGgsbSxfLE8sWCxhPXRoaXMuVEJPRFkuY2hpbGROb2Rlcy5sZW5ndGg7aWYoYSp0aGlz'@;
put 'Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZGVmYXVsdFJvd0hlaWdodCIpIT1kMyh0aGlzLlRCT0RZKS0xfHx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIikpZm9yKDthOylfPXRoaXMucm93RmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UoYS09MSksaD10aGlzLmdl'@;
put 'dFJvd0hlaWdodChfKSxtPShYPShPPXRoaXMuZ2V0VHJGb3JSb3coXykpLnF1ZXJ5U2VsZWN0b3IoInRoIikpP2QzKFgpOmQzKE8pLTEsKCFoJiZ0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZGVmYXVsdFJvd0hlaWdodCIpPG18fGg8bSkmJih0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RW'@;
put 'aWV3cG9ydC5vdmVyc2l6ZWRSb3dzW19dPW0rPTEpfX19LHtrZXk6ImdldFRyRm9yUm93Iix2YWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5UQk9EWS5jaGlsZE5vZGVzW3RoaXMucm93RmlsdGVyLnNvdXJjZVRvUmVuZGVyZWQoYSldfX0se2tleToiaXNDb2x1bW5IZWFkZXJSZW5kZXJl'@;
put 'ZCIsdmFsdWU6ZnVuY3Rpb24oYSl7aWYoYT49MClyZXR1cm4hMTt2YXIgZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLmxlbmd0aDtyZXR1cm4gTWF0aC5hYnMoYSk8PWR9fSx7a2V5OiJpc1Jvd0hlYWRlclJlbmRlcmVkIix2YWx1ZTpmdW5jdGlvbihhKXtpZihh'@;
put 'Pj0wKXJldHVybiExO3ZhciBkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoO3JldHVybiBNYXRoLmFicyhhKTw9ZH19LHtrZXk6ImlzUm93QmVmb3JlUmVuZGVyZWRSb3dzIix2YWx1ZTpmdW5jdGlvbihhKXt2YXIgZj10aGlzLmdldEZpcnN0UmVu'@;
put 'ZGVyZWRSb3coKTtyZXR1cm4gYTwwJiZmPD0wPyF0aGlzLmlzUm93SGVhZGVyUmVuZGVyZWQoYSk6YTxmfX0se2tleToiaXNSb3dBZnRlclJlbmRlcmVkUm93cyIsdmFsdWU6ZnVuY3Rpb24oYSl7cmV0dXJuIGE+dGhpcy5nZXRMYXN0UmVuZGVyZWRSb3coKX19LHtrZXk6ImlzQ29sdW1uQmVm'@;
put 'b3JlUmVuZGVyZWRDb2x1bW5zIix2YWx1ZTpmdW5jdGlvbihhKXt2YXIgZj10aGlzLmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKTtyZXR1cm4gYTwwJiZmPD0wPyF0aGlzLmlzQ29sdW1uSGVhZGVyUmVuZGVyZWQoYSk6YTxmfX0se2tleToiaXNDb2x1bW5BZnRlclJlbmRlcmVkQ29sdW1ucyIs'@;
put 'dmFsdWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuY29sdW1uRmlsdGVyJiZhPnRoaXMuZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCl9fSx7a2V5OiJpc0NvbHVtbkFmdGVyVmlld3BvcnQiLHZhbHVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmNvbHVtbkZpbHRlciYmYT50aGlzLmdldExhc3RW'@;
put 'aXNpYmxlQ29sdW1uKCl9fSx7a2V5OiJpc1Jvd0FmdGVyVmlld3BvcnQiLHZhbHVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnJvd0ZpbHRlciYmYT50aGlzLmdldExhc3RWaXNpYmxlUm93KCl9fSx7a2V5OiJpc0NvbHVtbkJlZm9yZVZpZXdwb3J0Iix2YWx1ZTpmdW5jdGlvbihhKXtyZXR1'@;
put 'cm4gdGhpcy5jb2x1bW5GaWx0ZXImJnRoaXMuY29sdW1uRmlsdGVyLnNvdXJjZVRvUmVuZGVyZWQoYSk8MCYmYT49MH19LHtrZXk6ImlzTGFzdFJvd0Z1bGx5VmlzaWJsZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRMYXN0VmlzaWJsZVJvdygpPT09dGhpcy5nZXRMYXN0UmVu'@;
put 'ZGVyZWRSb3coKX19LHtrZXk6ImlzTGFzdENvbHVtbkZ1bGx5VmlzaWJsZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRMYXN0VmlzaWJsZUNvbHVtbigpPT09dGhpcy5nZXRMYXN0UmVuZGVyZWRDb2x1bW4oKX19LHtrZXk6ImFsbFJvd3NJblZpZXdwb3J0Iix2YWx1ZTpmdW5j'@;
put 'dGlvbigpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIik9PT10aGlzLmdldFZpc2libGVSb3dzQ291bnQoKX19LHtrZXk6ImFsbENvbHVtbnNJblZpZXdwb3J0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygi'@;
put 'dG90YWxDb2x1bW5zIik9PT10aGlzLmdldFZpc2libGVDb2x1bW5zQ291bnQoKX19LHtrZXk6ImdldFJvd0hlaWdodCIsdmFsdWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucm93VXRpbHMuZ2V0SGVpZ2h0KGEpfX0se2tleToiZ2V0Q29sdW1uSGVhZGVySGVpZ2h0Iix2YWx1ZTpmdW5jdGlv'@;
put 'bihhKXtyZXR1cm4gdGhpcy5jb2x1bW5VdGlscy5nZXRIZWFkZXJIZWlnaHQoYSl9fSx7a2V5OiJnZXRDb2x1bW5XaWR0aCIsdmFsdWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuY29sdW1uVXRpbHMuZ2V0V2lkdGgoYSl9fSx7a2V5OiJnZXRTdHJldGNoZWRDb2x1bW5XaWR0aCIsdmFsdWU6'@;
put 'ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuY29sdW1uVXRpbHMuZ2V0U3RyZXRjaGVkQ29sdW1uV2lkdGgoYSl9fSx7a2V5OiJoYXNEZWZpbmVkU2l6ZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNUYWJsZUhlaWdodCYmdGhpcy5oYXNUYWJsZVdpZHRofX0se2tleToiZ2V0V2lk'@;
put 'dGgiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIFNsKHRoaXMuVEFCTEUpfX0se2tleToiZ2V0SGVpZ2h0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBjcyh0aGlzLlRBQkxFKX19LHtrZXk6ImdldFRvdGFsV2lkdGgiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGE9U2wodGhpcy5oaWRlcik7cmV0'@;
put 'dXJuIDAhPT1hP2E6dGhpcy5nZXRXaWR0aCgpfX0se2tleToiZ2V0VG90YWxIZWlnaHQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGE9Y3ModGhpcy5oaWRlcik7cmV0dXJuIDAhPT1hP2E6dGhpcy5nZXRIZWlnaHQoKX19LHtrZXk6ImlzVmlzaWJsZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4g'@;
put 'TjcodGhpcy5UQUJMRSl9fSx7a2V5OiJfbW9kaWZ5Um93SGVhZGVyV2lkdGgiLHZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBmPVBsKGEpP2EoKTpudWxsO3JldHVybiBBcnJheS5pc0FycmF5KGYpPyhmPWZ1bmN0aW9uIGhYZShsKXtyZXR1cm4gZnVuY3Rpb24gZ1hlKGwpe2lmKEFycmF5LmlzQXJy'@;
put 'YXkobCkpcmV0dXJuIGxXKGwpfShsKXx8ZnVuY3Rpb24gbVhlKGwpe2lmKHR5cGVvZiBTeW1ib2w8InUiJiZudWxsIT1sW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWxbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbShsKX0obCl8fEMxZShsKXx8ZnVuY3Rpb24gcFhlKCl7dGhyb3cg'@;
put 'bmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9KGYpKVtmLmxlbmd0'@;
put 'aC0xXT10aGlzLl9jb3JyZWN0Um93SGVhZGVyV2lkdGgoZltmLmxlbmd0aC0xXSk6Zj10aGlzLl9jb3JyZWN0Um93SGVhZGVyV2lkdGgoZiksZn19LHtrZXk6Il9jb3JyZWN0Um93SGVhZGVyV2lkdGgiLHZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBmPWE7cmV0dXJuIm51bWJlciIhPXR5cGVvZiBh'@;
put 'JiYoZj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZGVmYXVsdENvbHVtbldpZHRoIikpLHRoaXMuY29ycmVjdEhlYWRlcldpZHRoJiYoZis9MSksZn19XSksbH0oKTtjb25zdCBYNz1NWGU7dmFyIGsxZT17Z2V0Rmlyc3RSZW5kZXJlZFJvdzpmdW5jdGlvbigpe3JldHVybiAwPT09dGhp'@;
put 'cy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpPy0xOjB9LGdldEZpcnN0VmlzaWJsZVJvdzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEZpcnN0UmVuZGVyZWRSb3coKX0sZ2V0TGFzdFJlbmRlcmVkUm93OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0UmVuZGVyZWRSb3dz'@;
put 'Q291bnQoKS0xfSxnZXRMYXN0VmlzaWJsZVJvdzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldExhc3RSZW5kZXJlZFJvdygpfSxnZXRSZW5kZXJlZFJvd3NDb3VudDpmdW5jdGlvbigpe3ZhciBjPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKTtyZXR1cm4gTWF0aC5t'@;
put 'aW4odGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpLGMpfSxnZXRWaXNpYmxlUm93c0NvdW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKX19O0hoKGsxZSwiTUlYSU5fTkFNRSIsInN0aWNreVJvd3NUb3AiLHt3cml0YWJsZToh'@;
put 'MSxlbnVtZXJhYmxlOiExfSk7Y29uc3QgRTFlPWsxZTt2YXIgeDFlPXtnZXRGaXJzdFJlbmRlcmVkQ29sdW1uOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnN0YXJ0Q29sdW1uUmVuZGVyZWQ7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldEZpcnN0VmlzaWJsZUNvbHVt'@;
put 'bjpmdW5jdGlvbigpe3ZhciBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5zdGFydENvbHVtblZpc2libGU7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldExhc3RSZW5kZXJlZENvbHVtbjpmdW5jdGlvbigpe3ZhciBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5lbmRDb2x1bW5SZW5kZXJlZDtyZXR1'@;
put 'cm4gbnVsbD09PWM/LTE6Y30sZ2V0TGFzdFZpc2libGVDb2x1bW46ZnVuY3Rpb24oKXt2YXIgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3QuZW5kQ29sdW1uVmlzaWJsZTtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5k'@;
put 'YXRhQWNjZXNzT2JqZWN0LmNvdW50Q29sdW1uc1JlbmRlcmVkfSxnZXRWaXNpYmxlQ29sdW1uc0NvdW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5jb3VudENvbHVtbnNWaXNpYmxlfX07SGgoeDFlLCJNSVhJTl9OQU1FIiwiY2FsY3VsYXRlZENvbHVtbnMiLHt3'@;
put 'cml0YWJsZTohMSxlbnVtZXJhYmxlOiExfSk7Y29uc3Qgc1c9eDFlO2Z1bmN0aW9uIEo3KGwpe3JldHVybihKNz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMp'@;
put 'e3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIEExZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2Yu'@;
put 'ZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsQVhlKGYua2V5KSxmKX19ZnVuY3Rpb24gQVhlKGwpe3ZhciBjPWZ1bmN0aW9uIFRYZShsLGMpe2lmKCJvYmplY3Qi'@;
put 'IT09SjcobCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09SjcoZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBt'@;
put 'dXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PUo3KGMpP2M6U3RyaW5nKGMpfWZ1bmN0aW9uIHVXKGwsYyl7cmV0dXJuKHVXPU9iamVjdC5zZXRQcm90b3R5cGVP'@;
put 'Zj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGYsZCl7cmV0dXJuIGYuX19wcm90b19fPWQsZn0pKGwsYyl9ZnVuY3Rpb24gcFIobCl7cmV0dXJuKHBSPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGEpe3Jl'@;
put 'dHVybiBhLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpfSkobCl9dmFyIGNXPWZ1bmN0aW9uKGwpeyFmdW5jdGlvbiBEWGUobCxjKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyYmbnVsbCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVp'@;
put 'dGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtsLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGMmJmMucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6bCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRh'@;
put 'YmxlOiExfSksYyYmdVcobCxjKX0oYSxsKTt2YXIgYz1mdW5jdGlvbiBJWGUobCl7dmFyIGM9ZnVuY3Rpb24gUFhlKCl7aWYodHlwZW9mIFJlZmxlY3Q+InUifHwhUmVmbGVjdC5jb25zdHJ1Y3R8fFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9m'@;
put 'IFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sZnVuY3Rpb24oKXt9KSksITB9Y2F0Y2h7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciBkLGY9cFIobCk7aWYoYyl7dmFy'@;
put 'IGg9cFIodGhpcykuY29uc3RydWN0b3I7ZD1SZWZsZWN0LmNvbnN0cnVjdChmLGFyZ3VtZW50cyxoKX1lbHNlIGQ9Zi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uIFJYZShsLGMpe2lmKGMmJigib2JqZWN0Ij09PUo3KGMpfHwiZnVuY3Rpb24iPT10eXBlb2YgYykpcmV0'@;
put 'dXJuIGM7aWYodm9pZCAwIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbiBMWGUobCl7aWYodm9pZCAwPT09bCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRo'@;
put 'aXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBsfShsKX0odGhpcyxkKX19KGEpO2Z1bmN0aW9uIGEoZixkLGgsbSl7cmV0dXJuIGZ1bmN0aW9uIE9YZShsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBl'@;
put 'RXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGEpLGMuY2FsbCh0aGlzLGYsZCxoLG0sdzUpfXJldHVybiBmdW5jdGlvbiB4WGUobCxjLGEpe3JldHVybiBjJiZBMWUobC5wcm90b3R5cGUsYyksYSYmQTFlKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5'@;
put 'KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksbH0oYSl9KFg3KTtUbChjVyxFMWUpLFRsKGNXLHNXKTtjb25zdCBGWGU9Y1c7ZnVuY3Rpb24gdk0obCl7cmV0dXJuKHZNPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0'@;
put 'aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gVDFlKGwsYyl7Zm9yKHZh'@;
put 'ciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxPMWUoZi5rZXkpLGYpfX1mdW5jdGlvbiBmVyhsLGMs'@;
put 'YSl7cmV0dXJuKGM9TzFlKGMpKWluIGw/T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsYyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmxbY109YSxsfWZ1bmN0aW9uIE8xZShsKXt2YXIgYz1mdW5jdGlvbiBWWGUobCxjKXtpZigib2JqZWN0IiE9'@;
put 'PXZNKGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PXZNKGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVz'@;
put 'dCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT12TShjKT9jOlN0cmluZyhjKX12YXIgQlhlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbChjKXsoZnVuY3Rpb24gSFhlKGws'@;
put 'Yyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLGwpLGZXKHRoaXMsImRhdGFBY2Nlc3NPYmplY3QiLHZvaWQgMCksZlcodGhpcywibGFzdFNjcm9sbGVkQ29sdW1uUG9zIiwtMSksZlco'@;
put 'dGhpcywibGFzdFNjcm9sbGVkUm93UG9zIiwtMSksdGhpcy5kYXRhQWNjZXNzT2JqZWN0PWN9cmV0dXJuIGZ1bmN0aW9uIE5YZShsLGMsYSl7YyYmVDFlKGwucHJvdG90eXBlLGMpLGEmJlQxZShsLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0p'@;
put 'fShsLFt7a2V5OiJzY3JvbGxWaWV3cG9ydCIsdmFsdWU6ZnVuY3Rpb24oYSxmLGQsaCxtKXt2YXIgXz10aGlzLnNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGEuY29sLGQsbSksTz10aGlzLnNjcm9sbFZpZXdwb3J0VmVydGljYWxseShhLnJvdyxmLGgpO3JldHVybiBffHxPfX0se2tleToi'@;
put 'c2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkiLHZhbHVlOmZ1bmN0aW9uKGEsZixkKXt2YXIgaD10aGlzLmRhdGFBY2Nlc3NPYmplY3QsXz1oLnRvdGFsQ29sdW1ucztpZighaC5kcmF3bnx8IU51bWJlci5pc0ludGVnZXIoYSl8fGE8MHx8YT5fKXJldHVybiExO3ZhciBPPXRoaXMuZ2V0Rmly'@;
put 'c3RWaXNpYmxlQ29sdW1uKCksWD10aGlzLmdldExhc3RWaXNpYmxlQ29sdW1uKCksYWU9dm9pZCAwPT09ZiYmdm9pZCAwPT09ZCxwZT10aGlzLmRhdGFBY2Nlc3NPYmplY3QseGU9cGUuaW5saW5lU3RhcnRPdmVybGF5O2lmKGFlJiZhPHBlLmZpeGVkQ29sdW1uc1N0YXJ0KXJldHVybiExO3Zh'@;
put 'ciBWZT0hMTtyZXR1cm4tMT09PU8/VmU9eGUuc2Nyb2xsVG8oYSxhZT9hPnRoaXMubGFzdFNjcm9sbGVkQ29sdW1uUG9zOmYpOihhZSYmKGE8T3x8YT5YKXx8IWFlKSYmKFZlPXhlLnNjcm9sbFRvKGEsYWU/YT5YOmYpKSxWZSYmKHRoaXMubGFzdFNjcm9sbGVkQ29sdW1uUG9zPWEpLFZlfX0s'@;
put 'e2tleToic2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5Iix2YWx1ZTpmdW5jdGlvbihhLGYsZCl7dmFyIGg9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LF89aC50b3RhbFJvd3M7aWYoIWguZHJhd258fCFOdW1iZXIuaXNJbnRlZ2VyKGEpfHxhPDB8fGE+XylyZXR1cm4hMTt2YXIgTz10aGlzLmdldEZp'@;
put 'cnN0VmlzaWJsZVJvdygpLFg9dGhpcy5nZXRMYXN0VmlzaWJsZVJvdygpLGFlPXZvaWQgMD09PWYmJnZvaWQgMD09PWQscGU9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LFZlPXBlLnRvcE92ZXJsYXk7aWYoYWUmJihhPHBlLmZpeGVkUm93c1RvcHx8YT5fLXBlLmZpeGVkUm93c0JvdHRvbS0xKSly'@;
put 'ZXR1cm4hMTt2YXIgWmU9ITE7cmV0dXJuLTE9PT1PP1plPVZlLnNjcm9sbFRvKGEsYWU/YT50aGlzLmxhc3RTY3JvbGxlZFJvd1BvczpkKTooYWUmJihhPE98fGE+WCl8fCFhZSkmJihaZT1WZS5zY3JvbGxUbyhhLGFlP2E+WDpkKSksWmUmJih0aGlzLmxhc3RTY3JvbGxlZFJvd1Bvcz1hKSxa'@;
put 'ZX19LHtrZXk6ImdldEZpcnN0VmlzaWJsZVJvdyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmRhdGFBY2Nlc3NPYmplY3QsZj1hLnRvcE92ZXJsYXksZD1hLnd0VGFibGUsaD1hLnd0Vmlld3BvcnQsbT1hLnRvdGFsUm93cyxfPWEuZml4ZWRSb3dzVG9wLE89YS5yb290V2luZG93LFg9'@;
put 'ZC5nZXRGaXJzdFZpc2libGVSb3coKTtpZihmLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09Tyl7dmFyIGFlPWl1KGQud3RSb290RWxlbWVudCkscGU9ZDMoZC5oaWRlciksYmU9ZDMoTykseGU9VVMoTyxPKTtpZihhZS50b3ArcGUtYmU8PXhlKXt2YXIgVmU9aC5nZXRDb2x1bW5IZWFk'@;
put 'ZXJIZWlnaHQoKTtWZSs9Zi5zdW1DZWxsU2l6ZXMoMCxfKTtmb3IodmFyIFplPW07WmU+MDtaZS0tKWlmKFZlKz1mLnN1bUNlbGxTaXplcyhaZS0xLFplKSxhZS50b3ArcGUtVmU8PXhlKXtYPVplO2JyZWFrfX19cmV0dXJuIFh9fSx7a2V5OiJnZXRMYXN0VmlzaWJsZVJvdyIsdmFsdWU6ZnVu'@;
put 'Y3Rpb24oKXt2YXIgYT10aGlzLmRhdGFBY2Nlc3NPYmplY3QsZj1hLnRvcE92ZXJsYXksZD1hLnd0VGFibGUsaD1hLnd0Vmlld3BvcnQsbT1hLnRvdGFsUm93cyxfPWEucm9vdFdpbmRvdyxPPWQuZ2V0TGFzdFZpc2libGVSb3coKTtpZihmLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09'@;
put 'Xyl7dmFyIFg9aXUoZC53dFJvb3RFbGVtZW50KSxhZT1VUyhfLF8pO2lmKFgudG9wPmFlKWZvcih2YXIgcGU9ZDMoXyksYmU9aC5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKSx4ZT0xO3hlPD1tO3hlKyspaWYoYmUrPWYuc3VtQ2VsbFNpemVzKHhlLTEseGUpLFgudG9wK2JlLWFlPj1wZSl7Tz14'@;
put 'ZS0yO2JyZWFrfX1yZXR1cm4gT319LHtrZXk6ImdldEZpcnN0VmlzaWJsZUNvbHVtbiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmRhdGFBY2Nlc3NPYmplY3QsZj1hLmlubGluZVN0YXJ0T3ZlcmxheSxkPWEud3RUYWJsZSxoPWEud3RWaWV3cG9ydCxtPWEudG90YWxDb2x1bW5zLF89'@;
put 'YS5yb290V2luZG93LE89ZC5nZXRGaXJzdFZpc2libGVDb2x1bW4oKTtpZihmLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09Xyl7dmFyIFg9aXUoZC53dFJvb3RFbGVtZW50KSxhZT1ZUyhkLmhpZGVyKSxwZT1ZUyhfKSxiZT1NYXRoLmFicyhLSShfLF8pKTtpZihYLmxlZnQrYWUtcGU8'@;
put 'PWJlKWZvcih2YXIgeGU9aC5nZXRSb3dIZWFkZXJXaWR0aCgpLFZlPW07VmU+MDtWZS0tKWlmKHhlKz1mLnN1bUNlbGxTaXplcyhWZS0xLFZlKSxYLmxlZnQrYWUteGU8PWJlKXtPPVZlO2JyZWFrfX1yZXR1cm4gT319LHtrZXk6ImdldExhc3RWaXNpYmxlQ29sdW1uIix2YWx1ZTpmdW5jdGlv'@;
put 'bigpe3ZhciBhPXRoaXMuZGF0YUFjY2Vzc09iamVjdCxmPWEud3RTZXR0aW5ncyxkPWEuaW5saW5lU3RhcnRPdmVybGF5LGg9YS53dFRhYmxlLG09YS53dFZpZXdwb3J0LF89YS50b3RhbENvbHVtbnMsTz1hLnJvb3RXaW5kb3csWD1oLmdldExhc3RWaXNpYmxlQ29sdW1uKCk7aWYoZC5tYWlu'@;
put 'VGFibGVTY3JvbGxhYmxlRWxlbWVudD09PU8pe3ZhciBwZT1udWxsO2lmKGYuZ2V0U2V0dGluZygicnRsTW9kZSIpKXt2YXIgYmU9aC5UQUJMRS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtwZT1NYXRoLmFicyhiZS5yaWdodC10aGlzLmRhdGFBY2Nlc3NPYmplY3Qucm9vdFdpbmRvdy5kb2N1'@;
put 'bWVudC5kb2N1bWVudEVsZW1lbnQub2Zmc2V0V2lkdGgpfWVsc2UgcGU9aXUoaC53dFJvb3RFbGVtZW50KS5sZWZ0O3ZhciBsdD1NYXRoLmFicyhLSShPLE8pKTtpZihwZT5sdClmb3IodmFyIGR0PVlTKE8pLGd0PW0uZ2V0Um93SGVhZGVyV2lkdGgoKSxqdD0xO2p0PD1fO2p0KyspaWYocGUr'@;
put 'KGd0Kz1kLnN1bUNlbGxTaXplcyhqdC0xLGp0KSktbHQ+PWR0KXtYPWp0LTI7YnJlYWt9fXJldHVybiBYfX1dKSxsfSgpO2NvbnN0IGpYZT1CWGU7ZnVuY3Rpb24geU0obCl7cmV0dXJuKHlNPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJh'@;
put 'dG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gRDFlKGws'@;
put 'Yyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxSMWUoZi5rZXkpLGYpfX1mdW5jdGlv'@;
put 'biBJMWUobCxjLGEpe3JldHVybihjPVIxZShjKSlpbiBsP09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLGMse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpsW2NdPWEsbH1mdW5jdGlvbiBSMWUobCl7dmFyIGM9ZnVuY3Rpb24gV1hlKGwsYyl7aWYo'@;
put 'Im9iamVjdCIhPT15TShsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT15TShmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJp'@;
put 'bWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09eU0oYyk/YzpTdHJpbmcoYyl9ZnVuY3Rpb24gYk0obCxjKXtyZXR1cm4gZnVuY3Rpb24gR1hlKGws'@;
put 'Yyl7cmV0dXJuIGMuZ2V0P2MuZ2V0LmNhbGwobCk6Yy52YWx1ZX0obCxMMWUobCxjLCJnZXQiKSl9ZnVuY3Rpb24gTDFlKGwsYyxhKXtpZighYy5oYXMobCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrYSsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0'@;
put 'dXJuIGMuZ2V0KGwpfXZhciBNNT1uZXcgV2Vha01hcCxxWGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKGMsYSl7dmFyIGY9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTsoZnVuY3Rpb24gelhlKGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykp'@;
put 'dGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLGwpLEkxZSh0aGlzLCJyb3ciLG51bGwpLEkxZSh0aGlzLCJjb2wiLG51bGwpLGZ1bmN0aW9uIFpYZShsLGMsYSl7KGZ1bmN0aW9uIFlYZShsLGMpe2lmKGMuaGFzKGwpKXRocm93'@;
put 'IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShsLGMpLGMuc2V0KGwsYSl9KHRoaXMsTTUse3dyaXRhYmxlOiEwLHZhbHVlOiExfSksZnVuY3Rpb24gJFhlKGwsYyxhKXtyZXR1cm4gZnVuY3Rp'@;
put 'b24gS1hlKGwsYyxhKXtpZihjLnNldCljLnNldC5jYWxsKGwsYSk7ZWxzZXtpZighYy53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7Yy52YWx1ZT1hfX0obCxMMWUobCxjLCJzZXQiKSxhKSxhfSh0aGlzLE01'@;
put 'LGYpLHR5cGVvZiBjPCJ1IiYmdHlwZW9mIGE8InUiJiYodGhpcy5yb3c9Yyx0aGlzLmNvbD1hKX1yZXR1cm4gZnVuY3Rpb24gVVhlKGwsYyxhKXtjJiZEMWUobC5wcm90b3R5cGUsYyksYSYmRDFlKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiEx'@;
put 'fSl9KGwsW3trZXk6ImlzVmFsaWQiLHZhbHVlOmZ1bmN0aW9uKGEpe3JldHVybiEodGhpcy5yb3c8MHx8dGhpcy5jb2w8MHx8dGhpcy5yb3c+PWEuZ2V0U2V0dGluZygidG90YWxSb3dzIil8fHRoaXMuY29sPj1hLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpKX19LHtrZXk6ImlzRXF1YWwi'@;
put 'LHZhbHVlOmZ1bmN0aW9uKGEpe3JldHVybiBhPT09dGhpc3x8dGhpcy5yb3c9PT1hLnJvdyYmdGhpcy5jb2w9PT1hLmNvbH19LHtrZXk6ImlzU291dGhFYXN0T2YiLHZhbHVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnJvdz49YS5yb3cmJihiTSh0aGlzLE01KT90aGlzLmNvbDw9YS5jb2w6'@;
put 'dGhpcy5jb2w+PWEuY29sKX19LHtrZXk6ImlzTm9ydGhXZXN0T2YiLHZhbHVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnJvdzw9YS5yb3cmJihiTSh0aGlzLE01KT90aGlzLmNvbD49YS5jb2w6dGhpcy5jb2w8PWEuY29sKX19LHtrZXk6ImlzU291dGhXZXN0T2YiLHZhbHVlOmZ1bmN0aW9u'@;
put 'KGEpe3JldHVybiB0aGlzLnJvdz49YS5yb3cmJihiTSh0aGlzLE01KT90aGlzLmNvbD49YS5jb2w6dGhpcy5jb2w8PWEuY29sKX19LHtrZXk6ImlzTm9ydGhFYXN0T2YiLHZhbHVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnJvdzw9YS5yb3cmJihiTSh0aGlzLE01KT90aGlzLmNvbDw9YS5j'@;
put 'b2w6dGhpcy5jb2w+PWEuY29sKX19LHtrZXk6Im5vcm1hbGl6ZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb3c9bnVsbD09PXRoaXMucm93P3RoaXMucm93Ok1hdGgubWF4KHRoaXMucm93LDApLHRoaXMuY29sPW51bGw9PT10aGlzLmNvbD90aGlzLmNvbDpNYXRoLm1heCh0aGlz'@;
put 'LmNvbCwwKSx0aGlzfX0se2tleToiY2xvbmUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBsKHRoaXMucm93LHRoaXMuY29sLGJNKHRoaXMsTTUpKX19LHtrZXk6InRvT2JqZWN0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybntyb3c6dGhpcy5yb3csY29sOnRoaXMuY29sfX19XSksbH0o'@;
put 'KTtjb25zdCBtUj1xWGU7ZnVuY3Rpb24gX00obCl7cmV0dXJuKF9NPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5'@;
put 'cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gUDFlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8'@;
put 'ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxGMWUoZi5rZXkpLGYpfX1mdW5jdGlvbiBkVyhsLGMsYSl7cmV0dXJuKGM9RjFlKGMpKWluIGw/T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsYyx7dmFsdWU6YSxl'@;
put 'bnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmxbY109YSxsfWZ1bmN0aW9uIEYxZShsKXt2YXIgYz1mdW5jdGlvbiB0SmUobCxjKXtpZigib2JqZWN0IiE9PV9NKGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9p'@;
put 'ZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PV9NKGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVt'@;
put 'YmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1fTShjKT9jOlN0cmluZyhjKX1mdW5jdGlvbiBqaChsLGMpe3JldHVybiBmdW5jdGlvbiBuSmUobCxjKXtyZXR1cm4gYy5nZXQ/Yy5nZXQuY2FsbChsKTpjLnZhbHVlfShsLEgxZShsLGMsImdldCIpKX1mdW5jdGlvbiBIMWUo'@;
put 'bCxjLGEpe2lmKCFjLmhhcyhsKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIithKyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gYy5nZXQobCl9dmFyIEhmPW5ldyBXZWFrTWFwLG9KZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGwoYyl7dmFyIGE9YXJn'@;
put 'dW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmMsZj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06YyxkPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVu'@;
put 'dHNbM107KGZ1bmN0aW9uIFhYZShsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyxsKSxkVyh0aGlzLCJoaWdobGlnaHQiLG51bGwpLGRXKHRoaXMsImZyb20iLG51bGwpLGRXKHRo'@;
put 'aXMsInRvIixudWxsKSxmdW5jdGlvbiBRWGUobCxjLGEpeyhmdW5jdGlvbiBlSmUobCxjKXtpZihjLmhhcyhsKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkobCxjKSxjLnNldChs'@;
put 'LGEpfSh0aGlzLEhmLHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLHRoaXMuaGlnaGxpZ2h0PWMuY2xvbmUoKS5ub3JtYWxpemUoKSx0aGlzLmZyb209YS5jbG9uZSgpLHRoaXMudG89Zi5jbG9uZSgpLGZ1bmN0aW9uIHJKZShsLGMsYSl7cmV0dXJuIGZ1bmN0aW9uIGlKZShsLGMsYSl7aWYoYy5z'@;
put 'ZXQpYy5zZXQuY2FsbChsLGEpO2Vsc2V7aWYoIWMud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2MudmFsdWU9YX19KGwsSDFlKGwsYywic2V0IiksYSksYX0odGhpcyxIZixkKX1yZXR1cm4gZnVuY3Rpb24g'@;
put 'SlhlKGwsYyxhKXtjJiZQMWUobC5wcm90b3R5cGUsYyksYSYmUDFlKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGwsW3trZXk6InNldEhpZ2hsaWdodCIsdmFsdWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaGlnaGxpZ2h0PWEuY2xv'@;
put 'bmUoKS5ub3JtYWxpemUoKSx0aGlzfX0se2tleToic2V0RnJvbSIsdmFsdWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZnJvbT1hLmNsb25lKCksdGhpc319LHtrZXk6InNldFRvIix2YWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy50bz1hLmNsb25lKCksdGhpc319LHtrZXk6ImlzVmFs'@;
put 'aWQiLHZhbHVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmZyb20uaXNWYWxpZChhKSYmdGhpcy50by5pc1ZhbGlkKGEpfX0se2tleToiaXNTaW5nbGUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZnJvbS5yb3c+PTAmJnRoaXMuZnJvbS5yb3c9PT10aGlzLnRvLnJvdyYmdGhpcy5m'@;
put 'cm9tLmNvbD49MCYmdGhpcy5mcm9tLmNvbD09PXRoaXMudG8uY29sfX0se2tleToiZ2V0T3V0ZXJIZWlnaHQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWF4KHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLU1hdGgubWluKHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpKzF9fSx7'@;
put 'a2V5OiJnZXRPdXRlcldpZHRoIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBNYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKS1NYXRoLm1pbih0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSsxfX0se2tleToiZ2V0SGVpZ2h0Iix2YWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMuZnJv'@;
put 'bS5yb3c8MCYmdGhpcy50by5yb3c8MClyZXR1cm4gMDt2YXIgYT1NYXRoLm1heCh0aGlzLmZyb20ucm93LDApLGY9TWF0aC5tYXgodGhpcy50by5yb3csMCk7cmV0dXJuIE1hdGgubWF4KGEsZiktTWF0aC5taW4oYSxmKSsxfX0se2tleToiZ2V0V2lkdGgiLHZhbHVlOmZ1bmN0aW9uKCl7aWYo'@;
put 'dGhpcy5mcm9tLmNvbDwwJiZ0aGlzLnRvLmNvbDwwKXJldHVybiAwO3ZhciBhPU1hdGgubWF4KHRoaXMuZnJvbS5jb2wsMCksZj1NYXRoLm1heCh0aGlzLnRvLmNvbCwwKTtyZXR1cm4gTWF0aC5tYXgoYSxmKS1NYXRoLm1pbihhLGYpKzF9fSx7a2V5OiJnZXRDZWxsc0NvdW50Iix2YWx1ZTpm'@;
put 'dW5jdGlvbigpe3JldHVybiB0aGlzLmdldFdpZHRoKCkqdGhpcy5nZXRIZWlnaHQoKX19LHtrZXk6ImluY2x1ZGVzIix2YWx1ZTpmdW5jdGlvbihhKXt2YXIgZj1hLnJvdyxkPWEuY29sLGg9dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCksbT10aGlzLmdldE91dGVyQm90dG9tRW5kQ29y'@;
put 'bmVyKCk7cmV0dXJuIGgucm93PD1mJiZtLnJvdz49ZiYmaC5jb2w8PWQmJm0uY29sPj1kfX0se2tleToiaW5jbHVkZXNSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaW5jbHVkZXMoYS5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCkpJiZ0aGlzLmluY2x1ZGVzKGEuZ2V0T3V0'@;
put 'ZXJCb3R0b21FbmRDb3JuZXIoKSl9fSx7a2V5OiJpc0VxdWFsIix2YWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5taW4odGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyk9PT1NYXRoLm1pbihhLmZyb20ucm93LGEudG8ucm93KSYmTWF0aC5tYXgodGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJv'@;
put 'dyk9PT1NYXRoLm1heChhLmZyb20ucm93LGEudG8ucm93KSYmTWF0aC5taW4odGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCk9PT1NYXRoLm1pbihhLmZyb20uY29sLGEudG8uY29sKSYmTWF0aC5tYXgodGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCk9PT1NYXRoLm1heChhLmZyb20uY29sLGEu'@;
put 'dG8uY29sKX19LHtrZXk6Im92ZXJsYXBzIix2YWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5pc1NvdXRoRWFzdE9mKHRoaXMuZ2V0T3V0ZXJUb3BMZWZ0Q29ybmVyKCkpJiZhLmlzTm9ydGhXZXN0T2YodGhpcy5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCkpfX0se2tleToiaXNTb3V0aEVh'@;
put 'c3RPZiIsdmFsdWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZ2V0T3V0ZXJUb3BMZWZ0Q29ybmVyKCkuaXNTb3V0aEVhc3RPZihhKXx8dGhpcy5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCkuaXNTb3V0aEVhc3RPZihhKX19LHtrZXk6ImlzTm9ydGhXZXN0T2YiLHZhbHVlOmZ1bmN0aW9u'@;
put 'KGEpe3JldHVybiB0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpLmlzTm9ydGhXZXN0T2YoYSl8fHRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpLmlzTm9ydGhXZXN0T2YoYSl9fSx7a2V5OiJpc092ZXJsYXBwaW5nSG9yaXpvbnRhbGx5Iix2YWx1ZTpmdW5jdGlvbihhKXtyZXR1'@;
put 'cm4gdGhpcy5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCkuY29sPj1hLmdldE91dGVyVG9wTGVmdENvcm5lcigpLmNvbCYmdGhpcy5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCkuY29sPD1hLmdldE91dGVyVG9wUmlnaHRDb3JuZXIoKS5jb2x8fHRoaXMuZ2V0T3V0ZXJUb3BMZWZ0Q29ybmVyKCku'@;
put 'Y29sPD1hLmdldE91dGVyVG9wUmlnaHRDb3JuZXIoKS5jb2wmJnRoaXMuZ2V0T3V0ZXJUb3BMZWZ0Q29ybmVyKCkuY29sPj1hLmdldE91dGVyVG9wTGVmdENvcm5lcigpLmNvbH19LHtrZXk6ImlzT3ZlcmxhcHBpbmdWZXJ0aWNhbGx5Iix2YWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5n'@;
put 'ZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCkucm93Pj1hLmdldE91dGVyVG9wUmlnaHRDb3JuZXIoKS5yb3cmJnRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpLnJvdzw9YS5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCkucm93fHx0aGlzLmdldE91dGVyVG9wUmlnaHRDb3JuZXIo'@;
put 'KS5yb3c8PWEuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpLnJvdyYmdGhpcy5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCkucm93Pj1hLmdldE91dGVyVG9wUmlnaHRDb3JuZXIoKS5yb3d9fSx7a2V5OiJleHBhbmQiLHZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBmPXRoaXMuZ2V0T3V0ZXJUb3BT'@;
put 'dGFydENvcm5lcigpLGQ9dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpO3JldHVybihhLnJvdzxmLnJvd3x8YS5jb2w8Zi5jb2x8fGEucm93PmQucm93fHxhLmNvbD5kLmNvbCkmJih0aGlzLmZyb209dGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1pbihmLnJvdyxhLnJvdyksTWF0'@;
put 'aC5taW4oZi5jb2wsYS5jb2wpKSx0aGlzLnRvPXRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5tYXgoZC5yb3csYS5yb3cpLE1hdGgubWF4KGQuY29sLGEuY29sKSksITApfX0se2tleToiZXhwYW5kQnlSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oYSl7aWYodGhpcy5pbmNsdWRlc1JhbmdlKGEp'@;
put 'fHwhdGhpcy5vdmVybGFwcyhhKSlyZXR1cm4hMTt2YXIgZj10aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSxkPXRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKSxoPXRoaXMuZ2V0RGlyZWN0aW9uKCksbT1hLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSxfPWEuZ2V0T3V0ZXJCb3R0'@;
put 'b21FbmRDb3JuZXIoKSxPPU1hdGgubWluKGYucm93LG0ucm93KSxYPU1hdGgubWluKGYuY29sLG0uY29sKSxhZT1NYXRoLm1heChkLnJvdyxfLnJvdykscGU9TWF0aC5tYXgoZC5jb2wsXy5jb2wpLGJlPXRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTyxYKSx4ZT10aGlzLl9jcmVhdGVDZWxsQ29v'@;
put 'cmRzKGFlLHBlKTtyZXR1cm4gdGhpcy5mcm9tPWJlLHRoaXMudG89eGUsdGhpcy5zZXREaXJlY3Rpb24oaCksdGhpcy5oaWdobGlnaHQucm93PT09dGhpcy5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCkucm93JiYiTi1TIj09PXRoaXMuZ2V0VmVydGljYWxEaXJlY3Rpb24oKSYmdGhpcy5m'@;
put 'bGlwRGlyZWN0aW9uVmVydGljYWxseSgpLHRoaXMuaGlnaGxpZ2h0LmNvbD09PXRoaXMuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpLmNvbCYmIlctRSI9PT10aGlzLmdldEhvcml6b250YWxEaXJlY3Rpb24oKSYmdGhpcy5mbGlwRGlyZWN0aW9uSG9yaXpvbnRhbGx5KCksITB9fSx7a2V5OiJn'@;
put 'ZXREaXJlY3Rpb24iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZnJvbS5pc05vcnRoV2VzdE9mKHRoaXMudG8pPyJOVy1TRSI6dGhpcy5mcm9tLmlzTm9ydGhFYXN0T2YodGhpcy50byk/Ik5FLVNXIjp0aGlzLmZyb20uaXNTb3V0aEVhc3RPZih0aGlzLnRvKT8iU0UtTlciOnRoaXMu'@;
put 'ZnJvbS5pc1NvdXRoV2VzdE9mKHRoaXMudG8pPyJTVy1ORSI6dm9pZCAwfX0se2tleToic2V0RGlyZWN0aW9uIix2YWx1ZTpmdW5jdGlvbihhKXtzd2l0Y2goYSl7Y2FzZSJOVy1TRSI6dmFyIGY9W3RoaXMuZ2V0T3V0ZXJUb3BMZWZ0Q29ybmVyKCksdGhpcy5nZXRPdXRlckJvdHRvbVJpZ2h0'@;
put 'Q29ybmVyKCldO3RoaXMuZnJvbT1mWzBdLHRoaXMudG89ZlsxXTticmVhaztjYXNlIk5FLVNXIjp2YXIgZD1bdGhpcy5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCksdGhpcy5nZXRPdXRlckJvdHRvbUxlZnRDb3JuZXIoKV07dGhpcy5mcm9tPWRbMF0sdGhpcy50bz1kWzFdO2JyZWFrO2Nhc2Ui'@;
put 'U0UtTlciOnZhciBoPVt0aGlzLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKSx0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpXTt0aGlzLmZyb209aFswXSx0aGlzLnRvPWhbMV07YnJlYWs7Y2FzZSJTVy1ORSI6dmFyIG09W3RoaXMuZ2V0T3V0ZXJCb3R0b21MZWZ0Q29ybmVyKCksdGhp'@;
put 'cy5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCldO3RoaXMuZnJvbT1tWzBdLHRoaXMudG89bVsxXX19fSx7a2V5OiJnZXRWZXJ0aWNhbERpcmVjdGlvbiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bIk5FLVNXIiwiTlctU0UiXS5pbmRleE9mKHRoaXMuZ2V0RGlyZWN0aW9uKCkpPi0xPyJOLVMi'@;
put 'OiJTLU4ifX0se2tleToiZ2V0SG9yaXpvbnRhbERpcmVjdGlvbiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bIk5XLVNFIiwiU1ctTkUiXS5pbmRleE9mKHRoaXMuZ2V0RGlyZWN0aW9uKCkpPi0xPyJXLUUiOiJFLVcifX0se2tleToiZmxpcERpcmVjdGlvblZlcnRpY2FsbHkiLHZhbHVlOmZ1'@;
put 'bmN0aW9uKCl7c3dpdGNoKHRoaXMuZ2V0RGlyZWN0aW9uKCkpe2Nhc2UiTlctU0UiOnRoaXMuc2V0RGlyZWN0aW9uKCJTVy1ORSIpO2JyZWFrO2Nhc2UiTkUtU1ciOnRoaXMuc2V0RGlyZWN0aW9uKCJTRS1OVyIpO2JyZWFrO2Nhc2UiU0UtTlciOnRoaXMuc2V0RGlyZWN0aW9uKCJORS1TVyIp'@;
put 'O2JyZWFrO2Nhc2UiU1ctTkUiOnRoaXMuc2V0RGlyZWN0aW9uKCJOVy1TRSIpfX19LHtrZXk6ImZsaXBEaXJlY3Rpb25Ib3Jpem9udGFsbHkiLHZhbHVlOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZ2V0RGlyZWN0aW9uKCkpe2Nhc2UiTlctU0UiOnRoaXMuc2V0RGlyZWN0aW9uKCJORS1TVyIp'@;
put 'O2JyZWFrO2Nhc2UiTkUtU1ciOnRoaXMuc2V0RGlyZWN0aW9uKCJOVy1TRSIpO2JyZWFrO2Nhc2UiU0UtTlciOnRoaXMuc2V0RGlyZWN0aW9uKCJTVy1ORSIpO2JyZWFrO2Nhc2UiU1ctTkUiOnRoaXMuc2V0RGlyZWN0aW9uKCJTRS1OVyIpfX19LHtrZXk6ImdldFRvcFN0YXJ0Q29ybmVyIix2'@;
put 'YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWluKHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLE1hdGgubWluKHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKS5ub3JtYWxpemUoKX19LHtrZXk6ImdldFRvcExlZnRDb3JuZXIiLHZhbHVlOmZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIGpoKHRoaXMsSGYpP3RoaXMuZ2V0VG9wRW5kQ29ybmVyKCk6dGhpcy5nZXRUb3BTdGFydENvcm5lcigpfX0se2tleToiZ2V0Qm90dG9tRW5kQ29ybmVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWF4KHRoaXMu'@;
put 'ZnJvbS5yb3csdGhpcy50by5yb3cpLE1hdGgubWF4KHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKS5ub3JtYWxpemUoKX19LHtrZXk6ImdldEJvdHRvbVJpZ2h0Q29ybmVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBqaCh0aGlzLEhmKT90aGlzLmdldEJvdHRvbVN0YXJ0Q29ybmVyKCk6'@;
put 'dGhpcy5nZXRCb3R0b21FbmRDb3JuZXIoKX19LHtrZXk6ImdldFRvcEVuZENvcm5lciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1pbih0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8u'@;
put 'Y29sKSkubm9ybWFsaXplKCl9fSx7a2V5OiJnZXRUb3BSaWdodENvcm5lciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gamgodGhpcyxIZik/dGhpcy5nZXRUb3BTdGFydENvcm5lcigpOnRoaXMuZ2V0VG9wRW5kQ29ybmVyKCl9fSx7a2V5OiJnZXRCb3R0b21TdGFydENvcm5lciIsdmFsdWU6'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1pbih0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSkubm9ybWFsaXplKCl9fSx7a2V5OiJnZXRCb3R0b21MZWZ0Q29ybmVyIix2YWx1ZTpmdW5j'@;
put 'dGlvbigpe3JldHVybiBqaCh0aGlzLEhmKT90aGlzLmdldEJvdHRvbUVuZENvcm5lcigpOnRoaXMuZ2V0Qm90dG9tU3RhcnRDb3JuZXIoKX19LHtrZXk6ImdldE91dGVyVG9wU3RhcnRDb3JuZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5t'@;
put 'aW4odGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksTWF0aC5taW4odGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCkpfX0se2tleToiZ2V0T3V0ZXJUb3BMZWZ0Q29ybmVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBqaCh0aGlzLEhmKT90aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCk6dGhp'@;
put 'cy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCl9fSx7a2V5OiJnZXRPdXRlckJvdHRvbUVuZENvcm5lciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1heCh0aGlzLmZyb20uY29s'@;
put 'LHRoaXMudG8uY29sKSl9fSx7a2V5OiJnZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBqaCh0aGlzLEhmKT90aGlzLmdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKTp0aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCl9fSx7a2V5OiJnZXRPdXRl'@;
put 'clRvcEVuZENvcm5lciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1pbih0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSl9fSx7a2V5OiJnZXRPdXRlclRvcFJpZ2h0Q29ybmVy'@;
put 'Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBqaCh0aGlzLEhmKT90aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKTp0aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCl9fSx7a2V5OiJnZXRPdXRlckJvdHRvbVN0YXJ0Q29ybmVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jcmVh'@;
put 'dGVDZWxsQ29vcmRzKE1hdGgubWF4KHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLE1hdGgubWluKHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKX19LHtrZXk6ImdldE91dGVyQm90dG9tTGVmdENvcm5lciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gamgodGhpcyxIZik/dGhpcy5nZXRP'@;
put 'dXRlckJvdHRvbUVuZENvcm5lcigpOnRoaXMuZ2V0T3V0ZXJCb3R0b21TdGFydENvcm5lcigpfX0se2tleToiaXNDb3JuZXIiLHZhbHVlOmZ1bmN0aW9uKGEsZil7cmV0dXJuISEoZiYmZi5pbmNsdWRlcyhhKSYmKHRoaXMuZ2V0T3V0ZXJUb3BMZWZ0Q29ybmVyKCkuaXNFcXVhbCh0aGlzLl9j'@;
put 'cmVhdGVDZWxsQ29vcmRzKGYuZnJvbS5yb3csZi5mcm9tLmNvbCkpfHx0aGlzLmdldE91dGVyVG9wUmlnaHRDb3JuZXIoKS5pc0VxdWFsKHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoZi5mcm9tLnJvdyxmLnRvLmNvbCkpfHx0aGlzLmdldE91dGVyQm90dG9tTGVmdENvcm5lcigpLmlzRXF1YWwo'@;
put 'dGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhmLnRvLnJvdyxmLmZyb20uY29sKSl8fHRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpLmlzRXF1YWwodGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhmLnRvLnJvdyxmLnRvLmNvbCkpKSl8fGEuaXNFcXVhbCh0aGlzLmdldE91dGVyVG9wTGVmdENv'@;
put 'cm5lcigpKXx8YS5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpKXx8YS5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJCb3R0b21MZWZ0Q29ybmVyKCkpfHxhLmlzRXF1YWwodGhpcy5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCkpfX0se2tleToiZ2V0T3Bwb3NpdGVDb3JuZXIi'@;
put 'LHZhbHVlOmZ1bmN0aW9uKGEsZil7aWYoIShhIGluc3RhbmNlb2YgbVIpKXJldHVybiExO2lmKGYpe3ZhciBkPWYuZnJvbSxoPWYudG87aWYoZi5pbmNsdWRlcyhhKSl7aWYodGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCkuaXNFcXVhbCh0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKGQucm93'@;
put 'LGQuY29sKSkpcmV0dXJuIHRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTtpZih0aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCkuaXNFcXVhbCh0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKGQucm93LGguY29sKSkpcmV0dXJuIHRoaXMuZ2V0T3V0ZXJCb3R0b21TdGFydENvcm5lcigpO2lm'@;
put 'KHRoaXMuZ2V0T3V0ZXJCb3R0b21TdGFydENvcm5lcigpLmlzRXF1YWwodGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhoLnJvdyxkLmNvbCkpKXJldHVybiB0aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCk7aWYodGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpLmlzRXF1YWwodGhpcy5fY3Jl'@;
put 'YXRlQ2VsbENvb3JkcyhoLnJvdyxoLmNvbCkpKXJldHVybiB0aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKX19cmV0dXJuIGEuaXNFcXVhbCh0aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCkpP3RoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpOmEuaXNFcXVhbCh0aGlzLmdldE91'@;
put 'dGVyVG9wU3RhcnRDb3JuZXIoKSk/dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpOmEuaXNFcXVhbCh0aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCkpP3RoaXMuZ2V0T3V0ZXJCb3R0b21TdGFydENvcm5lcigpOmEuaXNFcXVhbCh0aGlzLmdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIo'@;
put 'KSk/dGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpOnZvaWQgMH19LHtrZXk6ImdldEJvcmRlcnNTaGFyZWRXaXRoIix2YWx1ZTpmdW5jdGlvbihhKXtpZighdGhpcy5pbmNsdWRlc1JhbmdlKGEpKXJldHVybltdO3ZhciBmX3RvcD1NYXRoLm1pbih0aGlzLmZyb20ucm93LHRoaXMudG8ucm93'@;
put 'KSxmX2JvdHRvbT1NYXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxmX2xlZnQ9TWF0aC5taW4odGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCksZl9yaWdodD1NYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSxkX3RvcD1NYXRoLm1pbihhLmZyb20ucm93LGEudG8u'@;
put 'cm93KSxkX2JvdHRvbT1NYXRoLm1heChhLmZyb20ucm93LGEudG8ucm93KSxkX2xlZnQ9TWF0aC5taW4oYS5mcm9tLmNvbCxhLnRvLmNvbCksZF9yaWdodD1NYXRoLm1heChhLmZyb20uY29sLGEudG8uY29sKSxoPVtdO3JldHVybiBmX3RvcD09PWRfdG9wJiZoLnB1c2goInRvcCIpLGZfcmln'@;
put 'aHQ9PT1kX3JpZ2h0JiZoLnB1c2goInJpZ2h0IiksZl9ib3R0b209PT1kX2JvdHRvbSYmaC5wdXNoKCJib3R0b20iKSxmX2xlZnQ9PT1kX2xlZnQmJmgucHVzaCgibGVmdCIpLGh9fSx7a2V5OiJnZXRJbm5lciIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcy5nZXRPdXRlclRvcFN0'@;
put 'YXJ0Q29ybmVyKCksZj10aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCksZD1bXSxoPWEucm93O2g8PWYucm93O2grKylmb3IodmFyIG09YS5jb2w7bTw9Zi5jb2w7bSsrKSh0aGlzLmZyb20ucm93IT09aHx8dGhpcy5mcm9tLmNvbCE9PW0pJiYodGhpcy50by5yb3chPT1ofHx0aGlzLnRv'@;
put 'LmNvbCE9PW0pJiZkLnB1c2godGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhoLG0pKTtyZXR1cm4gZH19LHtrZXk6ImdldEFsbCIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCksZj10aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCksZD1b'@;
put 'XSxoPWEucm93O2g8PWYucm93O2grKylmb3IodmFyIG09YS5jb2w7bTw9Zi5jb2w7bSsrKWQucHVzaChhLnJvdz09PWgmJmEuY29sPT09bT9hOmYucm93PT09aCYmZi5jb2w9PT1tP2Y6dGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhoLG0pKTtyZXR1cm4gZH19LHtrZXk6ImZvckFsbCIsdmFsdWU6'@;
put 'ZnVuY3Rpb24oYSl7Zm9yKHZhciBmPXRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLGQ9dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpLGg9Zi5yb3c7aDw9ZC5yb3c7aCsrKWZvcih2YXIgbT1mLmNvbDttPD1kLmNvbDttKyspaWYoITE9PT1hKGgsbSkpcmV0dXJufX0se2tleToi'@;
put 'Y2xvbmUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBsKHRoaXMuaGlnaGxpZ2h0LHRoaXMuZnJvbSx0aGlzLnRvLGpoKHRoaXMsSGYpKX19LHtrZXk6InRvT2JqZWN0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybntmcm9tOnRoaXMuZnJvbS50b09iamVjdCgpLHRvOnRoaXMudG8udG9P'@;
put 'YmplY3QoKX19fSx7a2V5OiJfY3JlYXRlQ2VsbENvb3JkcyIsdmFsdWU6ZnVuY3Rpb24oYSxmKXtyZXR1cm4gbmV3IG1SKGEsZixqaCh0aGlzLEhmKSl9fV0pLGx9KCk7Y29uc3QgaFc9b0plO2Z1bmN0aW9uIHdNKGwpe3JldHVybih3TT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3lt'@;
put 'Ym9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBl'@;
put 'b2YgY30pKGwpfWZ1bmN0aW9uIE4xZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5'@;
put 'KGwsVjFlKGYua2V5KSxmKX19ZnVuY3Rpb24gTmQobCxjLGEpe3JldHVybihjPVYxZShjKSlpbiBsP09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLGMse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpsW2NdPWEsbH1mdW5jdGlvbiBWMWUobCl7dmFy'@;
put 'IGM9ZnVuY3Rpb24gc0plKGwsYyl7aWYoIm9iamVjdCIhPT13TShsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT13TShmKSlyZXR1cm4gZjt0aHJv'@;
put 'dyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09d00oYyk/YzpTdHJpbmcoYyl9dmFyIHBXPWZ1bmN0aW9u'@;
put 'KCl7ZnVuY3Rpb24gbChjLGEpeyhmdW5jdGlvbiBhSmUobCxjKXtpZighKGwgaW5zdGFuY2VvZiBjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsbCksTmQodGhpcywid3RUYWJsZSIsdm9pZCAwKSxOZCh0aGlzLCJ3dFNj'@;
put 'cm9sbCIsdm9pZCAwKSxOZCh0aGlzLCJ3dFZpZXdwb3J0Iix2b2lkIDApLE5kKHRoaXMsInd0T3ZlcmxheXMiLHZvaWQgMCksTmQodGhpcywic2VsZWN0aW9ucyIsdm9pZCAwKSxOZCh0aGlzLCJ3dEV2ZW50Iix2b2lkIDApLE5kKHRoaXMsImd1aWQiLCJ3dF8iLmNvbmNhdChtWSgpKSksTmQo'@;
put 'dGhpcywiZHJhd0ludGVycnVwdGVkIiwhMSksTmQodGhpcywiZHJhd24iLCExKSxOZCh0aGlzLCJkb21CaW5kaW5ncyIsdm9pZCAwKSxOZCh0aGlzLCJ3dFNldHRpbmdzIix2b2lkIDApLHRoaXMuZG9tQmluZGluZ3M9e3Jvb3RUYWJsZTpjLHJvb3REb2N1bWVudDpjLm93bmVyRG9jdW1lbnQs'@;
put 'cm9vdFdpbmRvdzpjLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd9LHRoaXMud3RTZXR0aW5ncz1hLHRoaXMud3RTY3JvbGw9bmV3IGpYZSh0aGlzLmNyZWF0ZVNjcm9sbERhbygpKX1yZXR1cm4gZnVuY3Rpb24gbEplKGwsYyxhKXtjJiZOMWUobC5wcm90b3R5cGUsYyksYSYmTjFlKGwsYSks'@;
put 'T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGwsW3trZXk6ImV2ZW50TWFuYWdlciIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmcyh0aGlzKX19LHtrZXk6ImZpbmRPcmlnaW5hbEhlYWRlcnMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGE9W107'@;
put 'aWYodGhpcy53dFRhYmxlLlRIRUFELmNoaWxkTm9kZXMubGVuZ3RoJiZ0aGlzLnd0VGFibGUuVEhFQUQuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzLmxlbmd0aCl7Zm9yKHZhciBmPTAsZD10aGlzLnd0VGFibGUuVEhFQUQuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzLmxlbmd0aDtmPGQ7Zisr'@;
put 'KWEucHVzaCh0aGlzLnd0VGFibGUuVEhFQUQuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzW2ZdLmlubmVySFRNTCk7dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGh8fHRoaXMud3RTZXR0aW5ncy51cGRhdGUoImNvbHVtbkhlYWRlcnMiLFtmdW5jdGlv'@;
put 'bihoLG0pe080KG0sYVtoXSl9XSl9fX0se2tleToiY3JlYXRlQ2VsbENvb3JkcyIsdmFsdWU6ZnVuY3Rpb24oYSxmKXtyZXR1cm4gbmV3IG1SKGEsZix0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicnRsTW9kZSIpKX19LHtrZXk6ImNyZWF0ZUNlbGxSYW5nZSIsdmFsdWU6ZnVuY3Rpb24o'@;
put 'YSxmLGQpe3JldHVybiBuZXcgaFcoYSxmLGQsdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJ0bE1vZGUiKSl9fSx7a2V5OiJkcmF3Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBhPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07cmV0dXJu'@;
put 'IHRoaXMuZHJhd0ludGVycnVwdGVkPSExLGF8fHRoaXMud3RUYWJsZS5pc1Zpc2libGUoKT90aGlzLnd0VGFibGUuZHJhdyhhKTp0aGlzLmRyYXdJbnRlcnJ1cHRlZD0hMCx0aGlzfX0se2tleToiZ2V0Q2VsbCIsdmFsdWU6ZnVuY3Rpb24oYSl7aWYoIShhcmd1bWVudHMubGVuZ3RoPjEmJnZv'@;
put 'aWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdKSlyZXR1cm4gdGhpcy53dFRhYmxlLmdldENlbGwoYSk7dmFyIGQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpLG09dGhpcy53'@;
put 'dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLF89dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iik7aWYoYS5yb3c8aCYmYS5jb2w8XylyZXR1cm4gdGhpcy53dE92ZXJsYXlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9u'@;
put 'ZS53dFRhYmxlLmdldENlbGwoYSk7aWYoYS5yb3c8aClyZXR1cm4gdGhpcy53dE92ZXJsYXlzLnRvcE92ZXJsYXkuY2xvbmUud3RUYWJsZS5nZXRDZWxsKGEpO2lmKGEuY29sPF8mJmEucm93Pj1kLW0pe2lmKHRoaXMud3RPdmVybGF5cy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkm'@;
put 'JnRoaXMud3RPdmVybGF5cy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUpcmV0dXJuIHRoaXMud3RPdmVybGF5cy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUud3RUYWJsZS5nZXRDZWxsKGEpfWVsc2V7aWYoYS5jb2w8XylyZXR1cm4gdGhpcy53dE92'@;
put 'ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5jbG9uZS53dFRhYmxlLmdldENlbGwoYSk7aWYoYS5yb3c8ZCYmYS5yb3c+PWQtbSYmdGhpcy53dE92ZXJsYXlzLmJvdHRvbU92ZXJsYXkmJnRoaXMud3RPdmVybGF5cy5ib3R0b21PdmVybGF5LmNsb25lKXJldHVybiB0aGlzLnd0T3ZlcmxheXMu'@;
put 'Ym90dG9tT3ZlcmxheS5jbG9uZS53dFRhYmxlLmdldENlbGwoYSl9cmV0dXJuIHRoaXMud3RUYWJsZS5nZXRDZWxsKGEpfX0se2tleToic2Nyb2xsVmlld3BvcnQiLHZhbHVlOmZ1bmN0aW9uKGEsZixkLGgsbSl7cmV0dXJuIShhLmNvbDwwfHxhLnJvdzwwKSYmdGhpcy53dFNjcm9sbC5zY3Jv'@;
put 'bGxWaWV3cG9ydChhLGYsZCxoLG0pfX0se2tleToic2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkiLHZhbHVlOmZ1bmN0aW9uKGEsZixkKXtyZXR1cm4hKGE8MCkmJnRoaXMud3RTY3JvbGwuc2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkoYSxmLGQpfX0se2tleToic2Nyb2xsVmlld3BvcnRW'@;
put 'ZXJ0aWNhbGx5Iix2YWx1ZTpmdW5jdGlvbihhLGYsZCl7cmV0dXJuIShhPDApJiZ0aGlzLnd0U2Nyb2xsLnNjcm9sbFZpZXdwb3J0VmVydGljYWxseShhLGYsZCl9fSx7a2V5OiJnZXRWaWV3cG9ydCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy53dFRhYmxlLmdldEZpcnN0VmlzaWJs'@;
put 'ZVJvdygpLHRoaXMud3RUYWJsZS5nZXRGaXJzdFZpc2libGVDb2x1bW4oKSx0aGlzLnd0VGFibGUuZ2V0TGFzdFZpc2libGVSb3coKSx0aGlzLnd0VGFibGUuZ2V0TGFzdFZpc2libGVDb2x1bW4oKV19fSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMud3RPdmVybGF5cy5k'@;
put 'ZXN0cm95KCksdGhpcy53dEV2ZW50LmRlc3Ryb3koKX19LHtrZXk6ImNyZWF0ZVNjcm9sbERhbyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzO3JldHVybntnZXQgZHJhd24oKXtyZXR1cm4gYS5kcmF3bn0sZ2V0IHRvcE92ZXJsYXkoKXtyZXR1cm4gYS53dE92ZXJsYXlzLnRvcE92ZXJs'@;
put 'YXl9LGdldCBpbmxpbmVTdGFydE92ZXJsYXkoKXtyZXR1cm4gYS53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheX0sZ2V0IHd0VGFibGUoKXtyZXR1cm4gYS53dFRhYmxlfSxnZXQgd3RWaWV3cG9ydCgpe3JldHVybiBhLnd0Vmlld3BvcnR9LGdldCB3dFNldHRpbmdzKCl7cmV0dXJuIGEu'@;
put 'd3RTZXR0aW5nc30sZ2V0IHJvb3RXaW5kb3coKXtyZXR1cm4gYS5kb21CaW5kaW5ncy5yb290V2luZG93fSxnZXQgdG90YWxSb3dzKCl7cmV0dXJuIGEud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKX0sZ2V0IHRvdGFsQ29sdW1ucygpe3JldHVybiBhLnd0U2V0dGluZ3MuZ2V0'@;
put 'U2V0dGluZygidG90YWxDb2x1bW5zIil9LGdldCBmaXhlZFJvd3NUb3AoKXtyZXR1cm4gYS53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpfSxnZXQgZml4ZWRSb3dzQm90dG9tKCl7cmV0dXJuIGEud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKX0s'@;
put 'Z2V0IGZpeGVkQ29sdW1uc1N0YXJ0KCl7cmV0dXJuIGEud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpfX19fSx7a2V5OiJnZXRUYWJsZURhbyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzO3JldHVybntnZXQgd290KCl7cmV0dXJuIGF9LGdldCBwYXJlbnRU'@;
put 'YWJsZU9mZnNldCgpe3JldHVybiBhLmNsb25lU291cmNlLnd0VGFibGUudGFibGVPZmZzZXR9LGdldCBjbG9uZVNvdXJjZSgpe3JldHVybiBhLmNsb25lU291cmNlfSxnZXQgd29ya3NwYWNlV2lkdGgoKXtyZXR1cm4gYS53dFZpZXdwb3J0LmdldFdvcmtzcGFjZVdpZHRoKCl9LGdldCB3dFZp'@;
put 'ZXdwb3J0KCl7cmV0dXJuIGEud3RWaWV3cG9ydH0sZ2V0IHd0T3ZlcmxheXMoKXtyZXR1cm4gYS53dE92ZXJsYXlzfSxnZXQgc2VsZWN0aW9ucygpe3JldHVybiBhLnNlbGVjdGlvbnN9LGdldCBkcmF3bigpe3JldHVybiBhLmRyYXdufSxzZXQgZHJhd24oZil7YS5kcmF3bj1mfSxnZXQgd3RU'@;
put 'YWJsZSgpe3JldHVybiBhLnd0VGFibGV9LGdldCBzdGFydENvbHVtblJlbmRlcmVkKCl7cmV0dXJuIGEud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5zdGFydENvbHVtbn0sZ2V0IHN0YXJ0Q29sdW1uVmlzaWJsZSgpe3JldHVybiBhLnd0Vmlld3BvcnQuY29sdW1uc1Zpc2li'@;
put 'bGVDYWxjdWxhdG9yLnN0YXJ0Q29sdW1ufSxnZXQgZW5kQ29sdW1uUmVuZGVyZWQoKXtyZXR1cm4gYS53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLmVuZENvbHVtbn0sZ2V0IGVuZENvbHVtblZpc2libGUoKXtyZXR1cm4gYS53dFZpZXdwb3J0LmNvbHVtbnNWaXNpYmxlQ2Fs'@;
put 'Y3VsYXRvci5lbmRDb2x1bW59LGdldCBjb3VudENvbHVtbnNSZW5kZXJlZCgpe3JldHVybiBhLnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3IuY291bnR9LGdldCBjb3VudENvbHVtbnNWaXNpYmxlKCl7cmV0dXJuIGEud3RWaWV3cG9ydC5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0'@;
put 'b3IuY291bnR9LGdldCBzdGFydFJvd1JlbmRlcmVkKCl7cmV0dXJuIGEud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFJvd30sZ2V0IHN0YXJ0Um93VmlzaWJsZSgpe3JldHVybiBhLnd0Vmlld3BvcnQucm93c1Zpc2libGVDYWxjdWxhdG9yLnN0YXJ0Um93fSxnZXQgZW5k'@;
put 'Um93UmVuZGVyZWQoKXtyZXR1cm4gYS53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLmVuZFJvd30sZ2V0IGVuZFJvd1Zpc2libGUoKXtyZXR1cm4gYS53dFZpZXdwb3J0LnJvd3NWaXNpYmxlQ2FsY3VsYXRvci5lbmRSb3d9LGdldCBjb3VudFJvd3NSZW5kZXJlZCgpe3JldHVybiBh'@;
put 'Lnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3IuY291bnR9LGdldCBjb3VudFJvd3NWaXNpYmxlKCl7cmV0dXJuIGEud3RWaWV3cG9ydC5yb3dzVmlzaWJsZUNhbGN1bGF0b3IuY291bnR9fX19XSksbH0oKTtmdW5jdGlvbiBRNyhsKXtyZXR1cm4oUTc9ImZ1bmN0aW9uIj09dHlwZW9m'@;
put 'IFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/'@;
put 'InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiBCMWUobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5k'@;
put 'ZWZpbmVQcm9wZXJ0eShsLHoxZShmLmtleSksZil9fWZ1bmN0aW9uIG1XKGwsYyl7cmV0dXJuKG1XPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGYsZCl7cmV0dXJuIGYuX19wcm90b19fPWQsZn0pKGwsYyl9ZnVuY3Rpb24gZ1Io'@;
put 'bCl7aWYodm9pZCAwPT09bCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBsfWZ1bmN0aW9uIHZSKGwpe3JldHVybih2Uj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0'@;
put 'LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihhKXtyZXR1cm4gYS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihhKX0pKGwpfWZ1bmN0aW9uIGoxZShsLGMsYSl7cmV0dXJuKGM9ejFlKGMpKWluIGw/T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsYyx7dmFsdWU6YSxlbnVt'@;
put 'ZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmxbY109YSxsfWZ1bmN0aW9uIHoxZShsKXt2YXIgYz1mdW5jdGlvbiBtSmUobCxjKXtpZigib2JqZWN0IiE9PVE3KGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAw'@;
put 'IT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PVE3KGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVy'@;
put 'KShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1RNyhjKT9jOlN0cmluZyhjKX12YXIgZ0plPWZ1bmN0aW9uKGwpeyFmdW5jdGlvbiBmSmUobCxjKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyYmbnVsbCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBt'@;
put 'dXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtsLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGMmJmMucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6bCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIs'@;
put 'e3dyaXRhYmxlOiExfSksYyYmbVcobCxjKX0oYSxsKTt2YXIgYz1mdW5jdGlvbiBkSmUobCl7dmFyIGM9ZnVuY3Rpb24gcEplKCl7aWYodHlwZW9mIFJlZmxlY3Q+InUifHwhUmVmbGVjdC5jb25zdHJ1Y3R8fFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09'@;
put 'dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sZnVuY3Rpb24oKXt9KSksITB9Y2F0Y2h7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciBkLGY9dlIobCk7aWYo'@;
put 'Yyl7dmFyIGg9dlIodGhpcykuY29uc3RydWN0b3I7ZD1SZWZsZWN0LmNvbnN0cnVjdChmLGFyZ3VtZW50cyxoKX1lbHNlIGQ9Zi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uIGhKZShsLGMpe2lmKGMmJigib2JqZWN0Ij09PVE3KGMpfHwiZnVuY3Rpb24iPT10eXBlb2Yg'@;
put 'YykpcmV0dXJuIGM7aWYodm9pZCAwIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBnUihsKX0odGhpcyxkKX19KGEpO2Z1bmN0aW9uIGEoZixkLGgpe3ZhciBtOyhmdW5jdGlv'@;
put 'biBjSmUobCxjKXtpZighKGwgaW5zdGFuY2VvZiBjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsYSksajFlKGdSKG09Yy5jYWxsKHRoaXMsZixkKSksImNsb25lU291cmNlIix2b2lkIDApLGoxZShnUihtKSwiY2xvbmVP'@;
put 'dmVybGF5Iix2b2lkIDApO3ZhciBfPW0ud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmYWNhZGUiLGdSKG0pKTtyZXR1cm4gbS5jbG9uZVNvdXJjZT1oLnNvdXJjZSxtLmNsb25lT3ZlcmxheT1oLm92ZXJsYXksbS53dFRhYmxlPW0uY2xvbmVPdmVybGF5LmNyZWF0ZVRhYmxlKG0uZ2V0VGFibGVE'@;
put 'YW8oKSxfLG0uZG9tQmluZGluZ3MsbS53dFNldHRpbmdzKSxtLnd0Vmlld3BvcnQ9aC52aWV3cG9ydCxtLnNlbGVjdGlvbnM9aC5zZWxlY3Rpb25zLG0ud3RFdmVudD1uZXcgUTBlKF8sbS5kb21CaW5kaW5ncyxtLnd0U2V0dGluZ3MsbS5ldmVudE1hbmFnZXIsbS53dFRhYmxlLG0uc2VsZWN0'@;
put 'aW9ucyxoLmV2ZW50KSxtLmZpbmRPcmlnaW5hbEhlYWRlcnMoKSxtfXJldHVybiBmdW5jdGlvbiB1SmUobCxjLGEpe3JldHVybiBjJiZCMWUobC5wcm90b3R5cGUsYyksYSYmQjFlKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksbH0oYSl9'@;
put 'KHBXKTtmdW5jdGlvbiBDTShsKXtyZXR1cm4oQ009ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJv'@;
put 'bCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiBVMWUobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZp'@;
put 'Z3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLFoxZShmLmtleSksZil9fWZ1bmN0aW9uIFoxZShsKXt2YXIgYz1mdW5jdGlvbiBfSmUobCxjKXtpZigib2JqZWN0IiE9PUNNKGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1s'@;
put 'W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PUNNKGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0'@;
put 'dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1DTShjKT9jOlN0cmluZyhjKX12YXIgU009ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKGMsYSxmLGQsaCl7KGZ1bmN0aW9uIHZKZShsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRo'@;
put 'cm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyxsKSxmdW5jdGlvbiBiSmUobCxjLGEpeyhjPVoxZShjKSlpbiBsP09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLGMse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAs'@;
put 'd3JpdGFibGU6ITB9KTpsW2NdPWF9KHRoaXMsInd0U2V0dGluZ3MiLG51bGwpLEhoKHRoaXMsIndvdCIsYyx7d3JpdGFibGU6ITF9KSx0aGlzLmRvbUJpbmRpbmdzPWgsdGhpcy5mYWNhZGVHZXR0ZXI9YSx0aGlzLnd0U2V0dGluZ3M9ZDt2YXIgbT10aGlzLndvdC53dFRhYmxlLF89bS5UQUJM'@;
put 'RSxPPW0uaGlkZXIsWD1tLnNwcmVhZGVyLGFlPW0uaG9sZGVyLHBlPW0ud3RSb290RWxlbWVudDt0aGlzLmluc3RhbmNlPXRoaXMud290LHRoaXMudHlwZT1mLHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9bnVsbCx0aGlzLlRBQkxFPV8sdGhpcy5oaWRlcj1PLHRoaXMuc3ByZWFk'@;
put 'ZXI9WCx0aGlzLmhvbGRlcj1hZSx0aGlzLnd0Um9vdEVsZW1lbnQ9cGUsdGhpcy50cmltbWluZ0NvbnRhaW5lcj1iNSh0aGlzLmhpZGVyLnBhcmVudE5vZGUucGFyZW50Tm9kZSksdGhpcy51cGRhdGVTdGF0ZU9mUmVuZGVyaW5nKCksdGhpcy5jbG9uZT10aGlzLm1ha2VDbG9uZSgpfXJldHVy'@;
put 'biBmdW5jdGlvbiB5SmUobCxjLGEpe2MmJlUxZShsLnByb3RvdHlwZSxjKSxhJiZVMWUobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0obCxbe2tleToidXBkYXRlU3RhdGVPZlJlbmRlcmluZyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT10'@;
put 'aGlzLm5lZWRGdWxsUmVuZGVyO3RoaXMubmVlZEZ1bGxSZW5kZXI9dGhpcy5zaG91bGRCZVJlbmRlcmVkKCk7dmFyIGY9YSE9PXRoaXMubmVlZEZ1bGxSZW5kZXI7cmV0dXJuIGYmJiF0aGlzLm5lZWRGdWxsUmVuZGVyJiZ0aGlzLnJlc2V0KCksZn19LHtrZXk6InNob3VsZEJlUmVuZGVyZWQi'@;
put 'LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuITB9fSx7a2V5OiJ1cGRhdGVUcmltbWluZ0NvbnRhaW5lciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnRyaW1taW5nQ29udGFpbmVyPWI1KHRoaXMuaGlkZXIucGFyZW50Tm9kZS5wYXJlbnROb2RlKX19LHtrZXk6InVwZGF0ZU1haW5TY3JvbGxhYmxl'@;
put 'RWxlbWVudCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLndvdC53dFRhYmxlO3RoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9ImhpZGRlbiI9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShhLnd0Um9vdEVsZW1lbnQucGFyZW50Tm9kZSku'@;
put 'Z2V0UHJvcGVydHlWYWx1ZSgib3ZlcmZsb3ciKT90aGlzLndvdC53dFRhYmxlLmhvbGRlcjpaUyhhLlRBQkxFKX19LHtrZXk6ImdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uIix2YWx1ZTpmdW5jdGlvbihhLGYsZCl7aWYoITEhPT10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLmNvbnRhaW5zKGEp'@;
put 'KXt2YXIgaD10aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93LG09ZDx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKSxfPWY8dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c1Rv'@;
put 'cCIpLE89Zj49dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSxYPXRoaXMuY2xvbmUud3RUYWJsZS5zcHJlYWRlcixhZT17c3RhcnQ6dGhpcy5nZXRSZWxhdGl2ZVN0YXJ0UG9zaXRpb24o'@;
put 'WCksdG9wOlgub2Zmc2V0VG9wfSxwZT17c3RhcnQ6dGhpcy5nZXRSZWxhdGl2ZVN0YXJ0UG9zaXRpb24oYSksdG9wOmEub2Zmc2V0VG9wfTtyZXR1cm4gaD90aGlzLmdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uV2l0aGluV2luZG93KF8sbSxwZSxhZSk6dGhpcy5nZXRSZWxhdGl2ZUNlbGxQb3Np'@;
put 'dGlvbldpdGhpbkhvbGRlcihfLE8sbSxwZSxhZSl9V2woIlRoZSBwcm92aWRlZCBlbGVtZW50IGlzIG5vdCBhIGNoaWxkIG9mIHRoZSAiLmNvbmNhdCh0aGlzLnR5cGUsIiBvdmVybGF5IikpfX0se2tleToiZ2V0UmVsYXRpdmVTdGFydFBvc2l0aW9uIix2YWx1ZTpmdW5jdGlvbihhKXtyZXR1'@;
put 'cm4gdGhpcy5pc1J0bCgpP2Eub2Zmc2V0UGFyZW50Lm9mZnNldFdpZHRoLWEub2Zmc2V0TGVmdC1hLm9mZnNldFdpZHRoOmEub2Zmc2V0TGVmdH19LHtrZXk6ImdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uV2l0aGluV2luZG93Iix2YWx1ZTpmdW5jdGlvbihhLGYsZCxoKXt2YXIgbT10aGlzLndv'@;
put 'dC53dFRhYmxlLnd0Um9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXz0wLE89MDtpZihmKXt2YXIgWD1tLmxlZnQ7dGhpcy5pc1J0bCgpJiYoWD10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3cuaW5uZXJXaWR0aC0obS5sZWZ0K20ud2lkdGgrTnUoKSkpLF89WDw9MD8tMSpY'@;
put 'OjB9ZWxzZSBfPWguc3RhcnQ7cmV0dXJuIE89YT90aGlzLmNsb25lLnd0VGFibGUuVEFCTEUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLW0udG9wOmgudG9wLHtzdGFydDpkLnN0YXJ0K18sdG9wOmQudG9wK099fX0se2tleToiZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb25XaXRoaW5Ib2xk'@;
put 'ZXIiLHZhbHVlOmZ1bmN0aW9uKGEsZixkLGgsbSl7dmFyIF9faG9yaXpvbnRhbD10aGlzLndvdC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRTY3JvbGxQb3NpdGlvbigpLF9fdmVydGljYWw9dGhpcy53b3Qud3RPdmVybGF5cy50b3BPdmVybGF5LmdldFNjcm9sbFBvc2l0aW9u'@;
put 'KCksTz0wLFg9MDtpZihkfHwoTz1fX2hvcml6b250YWwtbS5zdGFydCksZil7dmFyIGFlPXRoaXMud290Lnd0VGFibGUud3RSb290RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtYPS0xKnRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3Ar'@;
put 'YWUudG9wfWVsc2UgYXx8KFg9X192ZXJ0aWNhbC1tLnRvcCk7cmV0dXJue3N0YXJ0Omguc3RhcnQtTyx0b3A6aC50b3AtWH19fSx7a2V5OiJtYWtlQ2xvbmUiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoLTE9PT1mWGUuaW5kZXhPZih0aGlzLnR5cGUpKXRocm93IG5ldyBFcnJvcignQ2xvbmUgdHlw'@;
put 'ZSAiJy5jb25jYXQodGhpcy50eXBlLCciIGlzIG5vdCBzdXBwb3J0ZWQuJykpO3ZhciBhPXRoaXMud290Lnd0VGFibGUsZj10aGlzLmRvbUJpbmRpbmdzLGQ9Zi5yb290RG9jdW1lbnQsaD1mLnJvb3RXaW5kb3csbT1kLmNyZWF0ZUVsZW1lbnQoIkRJViIpLF89ZC5jcmVhdGVFbGVtZW50KCJU'@;
put 'QUJMRSIpLE89YS53dFJvb3RFbGVtZW50LnBhcmVudE5vZGU7bS5jbGFzc05hbWU9IiIuY29uY2F0KGRYZS5nZXQodGhpcy50eXBlKSwiIGhhbmRzb250YWJsZSIpLG0uc2V0QXR0cmlidXRlKCJkaXIiLHRoaXMuaXNSdGwoKT8icnRsIjoibHRyIiksbS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1'@;
put 'dGUiLG0uc3R5bGUudG9wPTAsbS5zdHlsZS5vdmVyZmxvdz0idmlzaWJsZSIsdGhpcy5pc1J0bCgpP20uc3R5bGUucmlnaHQ9MDptLnN0eWxlLmxlZnQ9MCxfLmNsYXNzTmFtZT1hLlRBQkxFLmNsYXNzTmFtZSxtLmFwcGVuZENoaWxkKF8pLE8uYXBwZW5kQ2hpbGQobSk7dmFyIFg9dGhpcy53'@;
put 'dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO3JldHVybiB0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PSEwPT09WHx8Imhvcml6b250YWwiPT09WCYmdGhpcy50eXBlPT09dzV8fCJ2ZXJ0aWNhbCI9PT1YJiZ0aGlzLnR5cGU9PT1DNT9oOiJoaWRkZW4iPT09'@;
put 'aC5nZXRDb21wdXRlZFN0eWxlKE8pLmdldFByb3BlcnR5VmFsdWUoIm92ZXJmbG93Iik/YS5ob2xkZXI6WlMoYS5UQUJMRSksbmV3IGdKZShfLHRoaXMud3RTZXR0aW5ncyx7c291cmNlOnRoaXMud290LG92ZXJsYXk6dGhpcyx2aWV3cG9ydDp0aGlzLndvdC53dFZpZXdwb3J0LGV2ZW50OnRo'@;
put 'aXMud290Lnd0RXZlbnQsc2VsZWN0aW9uczp0aGlzLndvdC5zZWxlY3Rpb25zfSl9fSx7a2V5OiJyZWZyZXNoIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBhPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0sZj10aGlzLnNob3VsZEJlUmVuZGVy'@;
put 'ZWQoKTt0aGlzLmNsb25lJiYodGhpcy5uZWVkRnVsbFJlbmRlcnx8ZikmJnRoaXMuY2xvbmUuZHJhdyhhKSx0aGlzLm5lZWRGdWxsUmVuZGVyPWZ9fSx7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLmNsb25lKXt2YXIgYT10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyO1Ju'@;
put 'KFthLnN0eWxlLHRoaXMuY2xvbmUud3RUYWJsZS5oaWRlci5zdHlsZSxhLnBhcmVudE5vZGUuc3R5bGVdLGZ1bmN0aW9uKF8pe18ud2lkdGg9IiIsXy5oZWlnaHQ9IiJ9KX19fSx7a2V5OiJpc1J0bCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmco'@;
put 'InJ0bE1vZGUiKX19LHtrZXk6ImRlc3Ryb3kiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jbG9uZS5ldmVudE1hbmFnZXIuZGVzdHJveSgpfX1dKSxsfSgpO2Z1bmN0aW9uIGU5KGwpe3JldHVybihlOT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5p'@;
put 'dGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIHlS'@;
put 'KGwsYyxhKXtyZXR1cm4oeVI9RzFlKCk/UmVmbGVjdC5jb25zdHJ1Y3QuYmluZCgpOmZ1bmN0aW9uKGQsaCxtKXt2YXIgXz1bbnVsbF07Xy5wdXNoLmFwcGx5KF8saCk7dmFyIFg9bmV3KEZ1bmN0aW9uLmJpbmQuYXBwbHkoZCxfKSk7cmV0dXJuIG0mJmJSKFgsbS5wcm90b3R5cGUpLFh9KS5h'@;
put 'cHBseShudWxsLGFyZ3VtZW50cyl9ZnVuY3Rpb24gWTFlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVm'@;
put 'aW5lUHJvcGVydHkobCwkMWUoZi5rZXkpLGYpfX1mdW5jdGlvbiBiUihsLGMpe3JldHVybihiUj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihmLGQpe3JldHVybiBmLl9fcHJvdG9fXz1kLGZ9KShsLGMpfWZ1bmN0aW9uIFcxZShs'@;
put 'KXtpZih2b2lkIDA9PT1sKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGx9ZnVuY3Rpb24gRzFlKCl7aWYodHlwZW9mIFJlZmxlY3Q+InUifHwhUmVmbGVjdC5jb25zdHJ1'@;
put 'Y3R8fFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sZnVuY3Rpb24oKXt9KSksITB9Y2F0'@;
put 'Y2h7cmV0dXJuITF9fWZ1bmN0aW9uIF9SKGwpe3JldHVybihfUj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihhKXtyZXR1cm4gYS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihhKX0pKGwpfWZ1bmN0aW9uICQxZShs'@;
put 'KXt2YXIgYz1mdW5jdGlvbiB4SmUobCxjKXtpZigib2JqZWN0IiE9PWU5KGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PWU5KGYpKXJldHVybiBm'@;
put 'O3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1lOShjKT9jOlN0cmluZyhjKX12YXIgQUplPWZ1'@;
put 'bmN0aW9uKGwpeyFmdW5jdGlvbiBTSmUobCxjKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyYmbnVsbCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtsLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGMm'@;
put 'JmMucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6bCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksYyYmYlIobCxjKX0oYSxsKTt2YXIgYz1mdW5jdGlvbiBNSmUobCl7dmFyIGM9RzFl'@;
put 'KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGQsZj1fUihsKTtpZihjKXt2YXIgaD1fUih0aGlzKS5jb25zdHJ1Y3RvcjtkPVJlZmxlY3QuY29uc3RydWN0KGYsYXJndW1lbnRzLGgpfWVsc2UgZD1mLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24ga0plKGwsYyl7aWYoYyYm'@;
put 'KCJvYmplY3QiPT09ZTkoYyl8fCJmdW5jdGlvbiI9PXR5cGVvZiBjKSlyZXR1cm4gYztpZih2b2lkIDAhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIFcxZShsKX0odGhpcyxk'@;
put 'KX19KGEpO2Z1bmN0aW9uIGEoZixkLGgsbSl7dmFyIF87cmV0dXJuIGZ1bmN0aW9uIHdKZShsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGEpLGZ1bmN0aW9uIEVKZShsLGMsYSl7'@;
put 'KGM9JDFlKGMpKWluIGw/T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsYyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmxbY109YX0oVzFlKF89Yy5jYWxsKHRoaXMsZixkLHc1LGgsbSkpLCJjYWNoZWRGaXhlZFJvd3NUb3AiLC0xKSxfLmNhY2hl'@;
put 'ZEZpeGVkUm93c1RvcD1fLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIiksX31yZXR1cm4gZnVuY3Rpb24gQ0plKGwsYyxhKXtjJiZZMWUobC5wcm90b3R5cGUsYyksYSYmWTFlKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiEx'@;
put 'fSl9KGEsW3trZXk6ImNyZWF0ZVRhYmxlIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLG09MDttPGQ7bSsrKWhbbV09YXJndW1lbnRzW21dO3JldHVybiB5UihGWGUsaCl9fSx7a2V5OiJzaG91bGRCZVJlbmRlcmVkIix2YWx1ZTpm'@;
put 'dW5jdGlvbigpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic2hvdWxkUmVuZGVyVG9wT3ZlcmxheSIpfX0se2tleToicmVzZXRGaXhlZFBvc2l0aW9uIix2YWx1ZTpmdW5jdGlvbigpe2lmKCF0aGlzLm5lZWRGdWxsUmVuZGVyfHwhdGhpcy53b3Qud3RUYWJsZS5ob2xkZXIu'@;
put 'cGFyZW50Tm9kZSlyZXR1cm4hMTt2YXIgZD10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUsaD10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3csbT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93IiksXz0wLE89ITE7aWYodGhpcy50cmltbWlu'@;
put 'Z0NvbnRhaW5lciE9PWh8fG0mJiJ2ZXJ0aWNhbCI9PT1tKV89dGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLEdTKGQpO2Vsc2V7dmFyIGFlPXRoaXMud290Lnd0VGFibGUuaGlkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Tz1NYXRoLmNlaWwoYWUuYm90dG9tKT09PWQub2Zmc2V0SGVpZ2h0'@;
put 'LF89dGhpcy5nZXRPdmVybGF5T2Zmc2V0KCkscUkoZCwiMHB4IiwiIi5jb25jYXQoXywicHgiKSl9dmFyIHhlPXRoaXMuYWRqdXN0SGVhZGVyQm9yZGVyc1Bvc2l0aW9uKF8sTyk7cmV0dXJuIHRoaXMuYWRqdXN0RWxlbWVudHNTaXplKCkseGV9fSx7a2V5OiJzZXRTY3JvbGxQb3NpdGlvbiIs'@;
put 'dmFsdWU6ZnVuY3Rpb24oZCl7dmFyIGg9dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93LG09ITE7cmV0dXJuIHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9PT1oJiZoLnNjcm9sbFkhPT1kPyhoLnNjcm9sbFRvKHk1KGgpLGQpLG09ITApOnRoaXMubWFpblRhYmxlU2Nyb2xsYWJs'@;
put 'ZUVsZW1lbnQuc2Nyb2xsVG9wIT09ZCYmKHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wPWQsbT0hMCksbX19LHtrZXk6Im9uU2Nyb2xsIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvblNjcm9sbEhvcml6b250YWxseSIpfX0s'@;
put 'e2tleToic3VtQ2VsbFNpemVzIix2YWx1ZTpmdW5jdGlvbihkLGgpe2Zvcih2YXIgbT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZGVmYXVsdFJvd0hlaWdodCIpLF89ZCxPPTA7XzxoOyl7dmFyIFg9dGhpcy53b3Qud3RUYWJsZS5nZXRSb3dIZWlnaHQoXyk7Tys9dm9pZCAwPT09WD9t'@;
put 'OlgsXys9MX1yZXR1cm4gT319LHtrZXk6ImFkanVzdEVsZW1lbnRzU2l6ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO3RoaXMudXBkYXRlVHJpbW1pbmdDb250YWluZXIoKSwodGhpcy5uZWVk'@;
put 'RnVsbFJlbmRlcnx8ZCkmJih0aGlzLmFkanVzdFJvb3RFbGVtZW50U2l6ZSgpLHRoaXMuYWRqdXN0Um9vdENoaWxkcmVuU2l6ZSgpKX19LHtrZXk6ImFkanVzdFJvb3RFbGVtZW50U2l6ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLndvdC53dFRhYmxlLGg9dGhpcy5kb21CaW5kaW5n'@;
put 'cyxfPWgucm9vdFdpbmRvdyxPPU51KGgucm9vdERvY3VtZW50KSxhZT10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUuc3R5bGUscGU9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO2lmKHRoaXMudHJpbW1pbmdDb250YWluZXIhPT1ffHwi'@;
put 'aG9yaXpvbnRhbCI9PT1wZSl7dmFyIGJlPXRoaXMud290Lnd0Vmlld3BvcnQuZ2V0V29ya3NwYWNlV2lkdGgoKTt0aGlzLndvdC53dE92ZXJsYXlzLmhhc1Njcm9sbGJhclJpZ2h0JiYoYmUtPU8pLGJlPU1hdGgubWluKGJlLGQud3RSb290RWxlbWVudC5zY3JvbGxXaWR0aCksYWUud2lkdGg9'@;
put 'IiIuY29uY2F0KGJlLCJweCIpfWVsc2UgYWUud2lkdGg9IiI7dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5zdHlsZS53aWR0aD1hZS53aWR0aDt2YXIgeGU9Y3ModGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFKTt0aGlzLndvdC53dFRhYmxlLmhhc0RlZmluZWRTaXplKCl8fCh4ZT0wKSxhZS5o'@;
put 'ZWlnaHQ9IiIuY29uY2F0KHhlLCJweCIpfX0se2tleToiYWRqdXN0Um9vdENoaWxkcmVuU2l6ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZCxoPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIsbT10aGlzLndvdC5zZWxlY3Rpb25zLF89dGhpcy5mYWNhZGVHZXR0ZXIoKSxPPU1hdGguYWJzKG51'@;
put 'bGwhPT0oZD1tPy5nZXRDZWxsKCkuZ2V0Qm9yZGVyKF8pLmNvcm5lckNlbnRlclBvaW50T2Zmc2V0KSYmdm9pZCAwIT09ZD9kOjApO3RoaXMuY2xvbmUud3RUYWJsZS5oaWRlci5zdHlsZS53aWR0aD10aGlzLmhpZGVyLnN0eWxlLndpZHRoLGguc3R5bGUud2lkdGg9aC5wYXJlbnROb2RlLnN0'@;
put 'eWxlLndpZHRoLGguc3R5bGUuaGVpZ2h0PSIiLmNvbmNhdChwYXJzZUludChoLnBhcmVudE5vZGUuc3R5bGUuaGVpZ2h0LDEwKStPLCJweCIpfX0se2tleToiYXBwbHlUb0RPTSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIik7'@;
put 'aWYoIm51bWJlciI9PXR5cGVvZiB0aGlzLndvdC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb24pdGhpcy5zcHJlYWRlci5zdHlsZS50b3A9IiIuY29uY2F0KHRoaXMud290Lnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbiwi'@;
put 'cHgiKTtlbHNle2lmKDAhPT1kKXRocm93IG5ldyBFcnJvcigiSW5jb3JyZWN0IHZhbHVlIG9mIHRoZSByb3dzUmVuZGVyQ2FsY3VsYXRvciIpO3RoaXMuc3ByZWFkZXIuc3R5bGUudG9wPSIwIn10aGlzLnNwcmVhZGVyLnN0eWxlLmJvdHRvbT0iIix0aGlzLm5lZWRGdWxsUmVuZGVyJiZ0aGlz'@;
put 'LnN5bmNPdmVybGF5T2Zmc2V0KCl9fSx7a2V5OiJzeW5jT3ZlcmxheU9mZnNldCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmlzUnRsKCk/InJpZ2h0IjoibGVmdCI7dGhpcy5jbG9uZS53dFRhYmxlLnNwcmVhZGVyLnN0eWxlW2RdPSJudW1iZXIiPT10eXBlb2YgdGhpcy53b3Qud3RW'@;
put 'aWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uPyIiLmNvbmNhdCh0aGlzLndvdC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb24sInB4Iik6IiJ9fSx7a2V5OiJzY3JvbGxUbyIsdmFsdWU6ZnVuY3Rpb24oZCxoKXt2YXIg'@;
put 'bT10aGlzLndvdCxfPXRoaXMud3RTZXR0aW5ncyxYPShtLmNsb25lU291cmNlP20uY2xvbmVTb3VyY2U6bSkud3RUYWJsZS5ob2xkZXIsYWU9dGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpLHBlPTA7aWYoaCYmdGhpcy53b3Qud3RUYWJsZS5nZXRSb3dIZWlnaHQoZCk+dGhpcy53b3Qud3RW'@;
put 'aWV3cG9ydC5nZXRWaWV3cG9ydEhlaWdodCgpJiYoaD0hMSksaCYmWC5vZmZzZXRIZWlnaHQhPT1YLmNsaWVudEhlaWdodCYmKHBlPU51KHRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50KSksaCl7dmFyIFZlPV8uZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIiksWmU9Xy5nZXRTZXR0'@;
put 'aW5nKCJ0b3RhbFJvd3MiKTthZSs9dGhpcy5zdW1DZWxsU2l6ZXMoMCxkKzEpLGFlLT1tLnd0Vmlld3BvcnQuZ2V0Vmlld3BvcnRIZWlnaHQoKS10aGlzLnN1bUNlbGxTaXplcyhaZS1WZSxaZSksYWUrPTF9ZWxzZSBhZSs9dGhpcy5zdW1DZWxsU2l6ZXMoXy5nZXRTZXR0aW5nKCJmaXhlZFJv'@;
put 'd3NUb3AiKSxkKTtyZXR1cm4gdGhpcy5zZXRTY3JvbGxQb3NpdGlvbihhZSs9cGUpfX0se2tleToiZ2V0VGFibGVQYXJlbnRPZmZzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3c/'@;
put 'dGhpcy53b3Qud3RUYWJsZS5ob2xkZXJPZmZzZXQudG9wOjB9fSx7a2V5OiJnZXRTY3JvbGxQb3NpdGlvbiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gVVModGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCx0aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3cpfX0se2tleToiZ2V0T3Zl'@;
put 'cmxheU9mZnNldCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3csaD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93IiksbT0wO2lmKHRoaXMudHJpbW1pbmdDb250YWluZXI9PT1kJiYoIWh8fCJ2ZXJ0aWNhbCIhPT1o'@;
put 'KSl7dmFyIFg9dGhpcy53b3Qud3RUYWJsZS5nZXRUb3RhbEhlaWdodCgpLXRoaXMuY2xvbmUud3RUYWJsZS5nZXRUb3RhbEhlaWdodCgpOyhtPU1hdGgubWF4KHRoaXMuZ2V0U2Nyb2xsUG9zaXRpb24oKS10aGlzLmdldFRhYmxlUGFyZW50T2Zmc2V0KCksMCkpPlgmJihtPTApfXJldHVybiBt'@;
put 'fX0se2tleToiYWRqdXN0SGVhZGVyQm9yZGVyc1Bvc2l0aW9uIix2YWx1ZTpmdW5jdGlvbihkKXt2YXIgaD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLG09dGhpcy53b3Qud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZTt0aGlzLnd0U2V0'@;
put 'dGluZ3MuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIik/Sm8obSwiZW1wdHlDb2x1bW5zIik6Z2kobSwiZW1wdHlDb2x1bW5zIik7dmFyIE89ITE7aWYoIWgpe3ZhciBYPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSxhZT10aGlzLmNhY2hlZEZpeGVkUm93c1Rv'@;
put 'cCE9PVgscGU9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKTtpZigoYWV8fDA9PT1YKSYmcGUubGVuZ3RoPjApe3ZhciBiZT1ZbyhtLCJpbm5lckJvcmRlclRvcCIpO3RoaXMuY2FjaGVkRml4ZWRSb3dzVG9wPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJm'@;
put 'aXhlZFJvd3NUb3AiKSxkfHwwPT09dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpPyhnaShtLCJpbm5lckJvcmRlclRvcCIpLE89IWJlKTooSm8obSwiaW5uZXJCb3JkZXJUb3AiKSxPPWJlKX19cmV0dXJuIE99fV0pLGF9KFNNKSxLMWU9e2dldEZpcnN0UmVuZGVyZWRS'@;
put 'b3c6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiksYT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIiksZj1jLWE7cmV0dXJuIDA9PT1jfHwwPT09YT8tMTpmPDA/MDpmfSxnZXRGaXJzdFZpc2libGVSb3c6'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRGaXJzdFJlbmRlcmVkUm93KCl9LGdldExhc3RSZW5kZXJlZFJvdzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiktMX0sZ2V0TGFzdFZpc2libGVSb3c6ZnVuY3Rpb24oKXtyZXR1cm4gdGhp'@;
put 'cy5nZXRMYXN0UmVuZGVyZWRSb3coKX0sZ2V0UmVuZGVyZWRSb3dzQ291bnQ6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIik7cmV0dXJuIE1hdGgubWluKHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSxj'@;
put 'KX0sZ2V0VmlzaWJsZVJvd3NDb3VudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFJlbmRlcmVkUm93c0NvdW50KCl9fTtIaChLMWUsIk1JWElOX05BTUUiLCJzdGlja3lSb3dzQm90dG9tIix7d3JpdGFibGU6ITEsZW51bWVyYWJsZTohMX0pO2NvbnN0IHExZT1LMWU7ZnVuY3Rpb24gdDko'@;
put 'bCl7cmV0dXJuKHQ5PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9'@;
put 'PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gWDFlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVl'@;
put 'ImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxESmUoZi5rZXkpLGYpfX1mdW5jdGlvbiBESmUobCl7dmFyIGM9ZnVuY3Rpb24gSUplKGwsYyl7aWYoIm9iamVjdCIhPT10OShsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRp'@;
put 'dmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT10OShmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/'@;
put 'U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09dDkoYyk/YzpTdHJpbmcoYyl9ZnVuY3Rpb24gZ1cobCxjKXtyZXR1cm4oZ1c9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZixkKXtyZXR1cm4g'@;
put 'Zi5fX3Byb3RvX189ZCxmfSkobCxjKX1mdW5jdGlvbiB3UihsKXtyZXR1cm4od1I9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSl9KShsKX12YXIg'@;
put 'dlc9ZnVuY3Rpb24obCl7IWZ1bmN0aW9uIExKZShsLGMpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjJiZudWxsIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2wucHJvdG90eXBlPU9iamVjdC5jcmVh'@;
put 'dGUoYyYmYy5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpsLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxjJiZnVyhsLGMpfShhLGwpO3ZhciBjPWZ1bmN0aW9uIFBKZShsKXt2YXIg'@;
put 'Yz1mdW5jdGlvbiBOSmUoKXtpZih0eXBlb2YgUmVmbGVjdD4idSJ8fCFSZWZsZWN0LmNvbnN0cnVjdHx8UmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9m'@;
put 'LmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSxmdW5jdGlvbigpe30pKSwhMH1jYXRjaHtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGQsZj13UihsKTtpZihjKXt2YXIgaD13Uih0aGlzKS5jb25zdHJ1Y3RvcjtkPVJlZmxlY3QuY29uc3RydWN0KGYsYXJndW1l'@;
put 'bnRzLGgpfWVsc2UgZD1mLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24gRkplKGwsYyl7aWYoYyYmKCJvYmplY3QiPT09dDkoYyl8fCJmdW5jdGlvbiI9PXR5cGVvZiBjKSlyZXR1cm4gYztpZih2b2lkIDAhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29u'@;
put 'c3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uIEhKZShsKXtpZih2b2lkIDA9PT1sKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2Fs'@;
put 'bGVkIik7cmV0dXJuIGx9KGwpfSh0aGlzLGQpfX0oYSk7ZnVuY3Rpb24gYShmLGQsaCxtKXtyZXR1cm4gZnVuY3Rpb24gUkplKGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsYSks'@;
put 'Yy5jYWxsKHRoaXMsZixkLGgsbSxWaCl9cmV0dXJuIGZ1bmN0aW9uIE9KZShsLGMsYSl7cmV0dXJuIGMmJlgxZShsLnByb3RvdHlwZSxjKSxhJiZYMWUobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxsfShhKX0oWDcpO1RsKHZXLHExZSks'@;
put 'VGwodlcsc1cpO2NvbnN0IFZKZT12VztmdW5jdGlvbiBuOShsKXtyZXR1cm4objk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0'@;
put 'aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiBDUihsLGMsYSl7cmV0dXJuKENSPWVmZSgpP1JlZmxlY3QuY29uc3RydWN0LmJpbmQoKTpmdW5jdGlvbihkLGgsbSl7'@;
put 'dmFyIF89W251bGxdO18ucHVzaC5hcHBseShfLGgpO3ZhciBYPW5ldyhGdW5jdGlvbi5iaW5kLmFwcGx5KGQsXykpO3JldHVybiBtJiZTUihYLG0ucHJvdG90eXBlKSxYfSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfWZ1bmN0aW9uIEoxZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsr'@;
put 'KXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsdGZlKGYua2V5KSxmKX19ZnVuY3Rpb24gU1IobCxjKXtyZXR1cm4oU1I9T2JqZWN0LnNl'@;
put 'dFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZixkKXtyZXR1cm4gZi5fX3Byb3RvX189ZCxmfSkobCxjKX1mdW5jdGlvbiBRMWUobCl7aWYodm9pZCAwPT09bCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlh'@;
put 'bGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBsfWZ1bmN0aW9uIGVmZSgpe2lmKHR5cGVvZiBSZWZsZWN0PiJ1Inx8IVJlZmxlY3QuY29uc3RydWN0fHxSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSly'@;
put 'ZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLGZ1bmN0aW9uKCl7fSkpLCEwfWNhdGNoe3JldHVybiExfX1mdW5jdGlvbiBNUihsKXtyZXR1cm4oTVI9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVj'@;
put 'dC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSl9KShsKX1mdW5jdGlvbiB0ZmUobCl7dmFyIGM9ZnVuY3Rpb24gV0plKGwsYyl7aWYoIm9iamVjdCIhPT1uOShsKXx8bnVsbD09PWwpcmV0dXJuIGw7'@;
put 'dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1uOShmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVl'@;
put 'LiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09bjkoYyk/YzpTdHJpbmcoYyl9dmFyIEdKZT1mdW5jdGlvbihsKXshZnVuY3Rpb24gekplKGwsYyl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGMmJm51bGwhPT1jKXRo'@;
put 'cm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7bC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShjJiZjLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmwsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0p'@;
put 'LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGMmJlNSKGwsYyl9KGEsbCk7dmFyIGM9ZnVuY3Rpb24gVUplKGwpe3ZhciBjPWVmZSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciBkLGY9TVIobCk7aWYoYyl7dmFyIGg9TVIodGhpcykuY29uc3RydWN0'@;
put 'b3I7ZD1SZWZsZWN0LmNvbnN0cnVjdChmLGFyZ3VtZW50cyxoKX1lbHNlIGQ9Zi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uIFpKZShsLGMpe2lmKGMmJigib2JqZWN0Ij09PW45KGMpfHwiZnVuY3Rpb24iPT10eXBlb2YgYykpcmV0dXJuIGM7aWYodm9pZCAwIT09Yyl0'@;
put 'aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBRMWUobCl9KHRoaXMsZCl9fShhKTtmdW5jdGlvbiBhKGYsZCxoLG0pe3ZhciBfO3JldHVybiBmdW5jdGlvbiBCSmUobCxjKXtpZighKGwg'@;
put 'aW5zdGFuY2VvZiBjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxhKSxmdW5jdGlvbiBZSmUobCxjLGEpeyhjPXRmZShjKSlpbiBsP09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLGMse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxj'@;
put 'b25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpsW2NdPWF9KFExZShfPWMuY2FsbCh0aGlzLGYsZCxWaCxoLG0pKSwiY2FjaGVkRml4ZWRSb3dzQm90dG9tIiwtMSksXy5jYWNoZWRGaXhlZFJvd3NCb3R0b209Xy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLF99'@;
put 'cmV0dXJuIGZ1bmN0aW9uIGpKZShsLGMsYSl7YyYmSjFlKGwucHJvdG90eXBlLGMpLGEmJkoxZShsLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShhLFt7a2V5OiJjcmVhdGVUYWJsZSIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJn'@;
put 'dW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxtPTA7bTxkO20rKyloW21dPWFyZ3VtZW50c1ttXTtyZXR1cm4gQ1IoVkplLGgpfX0se2tleToic2hvdWxkQmVSZW5kZXJlZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRl'@;
put 'ckJvdHRvbU92ZXJsYXkiKX19LHtrZXk6InJlc2V0Rml4ZWRQb3NpdGlvbiIsdmFsdWU6ZnVuY3Rpb24oKXtpZighdGhpcy5uZWVkRnVsbFJlbmRlcnx8IXRoaXMud290Lnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpcmV0dXJuITE7dmFyIGQ9dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93'@;
put 'LGg9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlO2guc3R5bGUudG9wPSIiO3ZhciBtPTAsXz10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7dGhpcy50cmltbWluZ0NvbnRhaW5lciE9PWR8fF8mJiJ2ZXJ0aWNhbCI9PT1fPyhtPXRoaXMu'@;
put 'Z2V0U2Nyb2xsUG9zaXRpb24oKSx0aGlzLnJlcG9zaXRpb25PdmVybGF5KCkpOihtPXRoaXMuZ2V0T3ZlcmxheU9mZnNldCgpLGguc3R5bGUuYm90dG9tPSIiLmNvbmNhdChtLCJweCIpKTt2YXIgTz10aGlzLmFkanVzdEhlYWRlckJvcmRlcnNQb3NpdGlvbihtKTtyZXR1cm4gdGhpcy5hZGp1'@;
put 'c3RFbGVtZW50c1NpemUoKSxPfX0se2tleToicmVwb3NpdGlvbk92ZXJsYXkiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy53b3QsaD1kLnd0VGFibGUsbT1kLnd0Vmlld3BvcnQsXz10aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudCxPPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIu'@;
put 'cGFyZW50Tm9kZSxYPTA7bS5oYXNWZXJ0aWNhbFNjcm9sbCgpfHwoWCs9bS5nZXRXb3Jrc3BhY2VIZWlnaHQoKS1oLmdldFRvdGFsSGVpZ2h0KCkpLG0uaGFzVmVydGljYWxTY3JvbGwoKSYmbS5oYXNIb3Jpem9udGFsU2Nyb2xsKCkmJihYKz1OdShfKSksTy5zdHlsZS5ib3R0b209IiIuY29u'@;
put 'Y2F0KFgsInB4Iil9fSx7a2V5OiJzZXRTY3JvbGxQb3NpdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZCl7dmFyIGg9dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93LG09ITE7cmV0dXJuIHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9PT1oPyhoLnNjcm9sbFRvKHk1KGgpLGQpLG09ITAp'@;
put 'OnRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wIT09ZCYmKHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wPWQsbT0hMCksbX19LHtrZXk6Im9uU2Nyb2xsIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJv'@;
put 'blNjcm9sbEhvcml6b250YWxseSIpfX0se2tleToic3VtQ2VsbFNpemVzIix2YWx1ZTpmdW5jdGlvbihkLGgpe2Zvcih2YXIgbT10aGlzLndvdCxfPW0ud3RUYWJsZSxYPW0ud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJkZWZhdWx0Um93SGVpZ2h0IiksYWU9ZCxwZT0wO2FlPGg7KXt2YXIgYmU9'@;
put 'Xy5nZXRSb3dIZWlnaHQoYWUpO3BlKz12b2lkIDA9PT1iZT9YOmJlLGFlKz0xfXJldHVybiBwZX19LHtrZXk6ImFkanVzdEVsZW1lbnRzU2l6ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO3Ro'@;
put 'aXMudXBkYXRlVHJpbW1pbmdDb250YWluZXIoKSwodGhpcy5uZWVkRnVsbFJlbmRlcnx8ZCkmJih0aGlzLmFkanVzdFJvb3RFbGVtZW50U2l6ZSgpLHRoaXMuYWRqdXN0Um9vdENoaWxkcmVuU2l6ZSgpKX19LHtrZXk6ImFkanVzdFJvb3RFbGVtZW50U2l6ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2'@;
put 'YXIgZD10aGlzLndvdCxoPWQud3RUYWJsZSxtPWQud3RWaWV3cG9ydCxfPXRoaXMuZG9tQmluZGluZ3MsWD1fLnJvb3RXaW5kb3csYWU9TnUoXy5yb290RG9jdW1lbnQpLGJlPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZS5zdHlsZSx4ZT10aGlzLnd0U2V0dGluZ3MuZ2V0'@;
put 'U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7aWYodGhpcy50cmltbWluZ0NvbnRhaW5lciE9PVh8fCJob3Jpem9udGFsIj09PXhlKXt2YXIgVmU9bS5nZXRXb3Jrc3BhY2VXaWR0aCgpO3RoaXMud290Lnd0T3ZlcmxheXMuaGFzU2Nyb2xsYmFyUmlnaHQmJihWZS09YWUpLFZlPU1hdGgubWlu'@;
put 'KFZlLGgud3RSb290RWxlbWVudC5zY3JvbGxXaWR0aCksYmUud2lkdGg9IiIuY29uY2F0KFZlLCJweCIpfWVsc2UgYmUud2lkdGg9IiI7dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5zdHlsZS53aWR0aD1iZS53aWR0aDt2YXIgWmU9Y3ModGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFKTt0aGlz'@;
put 'LndvdC53dFRhYmxlLmhhc0RlZmluZWRTaXplKCl8fChaZT0wKSxiZS5oZWlnaHQ9IiIuY29uY2F0KFplLCJweCIpfX0se2tleToiYWRqdXN0Um9vdENoaWxkcmVuU2l6ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyO3RoaXMuY2xvbmUud3RUYWJs'@;
put 'ZS5oaWRlci5zdHlsZS53aWR0aD10aGlzLmhpZGVyLnN0eWxlLndpZHRoLGQuc3R5bGUud2lkdGg9ZC5wYXJlbnROb2RlLnN0eWxlLndpZHRoLGQuc3R5bGUuaGVpZ2h0PWQucGFyZW50Tm9kZS5zdHlsZS5oZWlnaHR9fSx7a2V5OiJhcHBseVRvRE9NIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBk'@;
put 'PXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKTtpZigibnVtYmVyIj09dHlwZW9mIHRoaXMud290Lnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbil0aGlzLnNwcmVhZGVyLnN0eWxlLnRvcD0iIi5jb25jYXQodGhpcy53b3Qud3RWaWV3'@;
put 'cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uLCJweCIpO2Vsc2V7aWYoMCE9PWQpdGhyb3cgbmV3IEVycm9yKCJJbmNvcnJlY3QgdmFsdWUgb2YgdGhlIHJvd3NSZW5kZXJDYWxjdWxhdG9yIik7dGhpcy5zcHJlYWRlci5zdHlsZS50b3A9IjAifXRoaXMuc3ByZWFkZXIu'@;
put 'c3R5bGUuYm90dG9tPSIiLHRoaXMubmVlZEZ1bGxSZW5kZXImJnRoaXMuc3luY092ZXJsYXlPZmZzZXQoKX19LHtrZXk6InN5bmNPdmVybGF5T2Zmc2V0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXMuaXNSdGwoKT8icmlnaHQiOiJsZWZ0Ijt0aGlzLmNsb25lLnd0VGFibGUuc3ByZWFk'@;
put 'ZXIuc3R5bGVbZF09Im51bWJlciI9PXR5cGVvZiB0aGlzLndvdC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb24/IiIuY29uY2F0KHRoaXMud290Lnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbiwicHgiKToiIn19'@;
put 'LHtrZXk6InNjcm9sbFRvIix2YWx1ZTpmdW5jdGlvbihkLGgpe3ZhciBtPXRoaXMuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKSxPPSh0aGlzLndvdC5jbG9uZVNvdXJjZT90aGlzLndvdC5jbG9uZVNvdXJjZTp0aGlzLndvdCkud3RUYWJsZS5ob2xkZXIsWD0wO2gmJk8ub2Zmc2V0SGVpZ2h0IT09'@;
put 'Ty5jbGllbnRIZWlnaHQmJihYPU51KHRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50KSksaD8obSs9dGhpcy5zdW1DZWxsU2l6ZXMoMCxkKzEpLG0tPXRoaXMud290Lnd0Vmlld3BvcnQuZ2V0Vmlld3BvcnRIZWlnaHQoKSxtKz0xKTptKz10aGlzLnN1bUNlbGxTaXplcyh0aGlzLnd0U2V0'@;
put 'dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIiksZCksdGhpcy5zZXRTY3JvbGxQb3NpdGlvbihtKz1YKX19LHtrZXk6ImdldFRhYmxlUGFyZW50T2Zmc2V0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09dGhpcy5kb21C'@;
put 'aW5kaW5ncy5yb290V2luZG93P3RoaXMud290Lnd0VGFibGUuaG9sZGVyT2Zmc2V0LnRvcDowfX0se2tleToiZ2V0U2Nyb2xsUG9zaXRpb24iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIFVTKHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQsdGhpcy5kb21CaW5kaW5ncy5yb290V2lu'@;
put 'ZG93KX19LHtrZXk6ImdldE92ZXJsYXlPZmZzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93LGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpLG09MDtpZih0aGlzLnRyaW1taW5nQ29udGFpbmVyPT09ZCYm'@;
put 'KCFofHwidmVydGljYWwiIT09aCkpe3ZhciBfPXRoaXMud290Lnd0VGFibGUuZ2V0VG90YWxIZWlnaHQoKSxYPV8tdGhpcy5jbG9uZS53dFRhYmxlLmdldFRvdGFsSGVpZ2h0KCksYWU9dGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDso'@;
put 'bT1NYXRoLm1heCh0aGlzLmdldFRhYmxlUGFyZW50T2Zmc2V0KCktdGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLWFlK18sMCkpPlgmJihtPTApfXJldHVybiBtfX0se2tleToiYWRqdXN0SGVhZGVyQm9yZGVyc1Bvc2l0aW9uIix2YWx1ZTpmdW5jdGlvbihkKXt2YXIgaD10aGlzLnd0U2V0dGlu'@;
put 'Z3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIiksbT10aGlzLmNhY2hlZEZpeGVkUm93c0JvdHRvbSE9PWgsXz10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLE89ITE7aWYoKG18fDA9PT1oKSYmXy5sZW5ndGg+MCl7dmFyIFg9dGhpcy53b3Qud3RUYWJs'@;
put 'ZS5ob2xkZXIucGFyZW50Tm9kZSxhZT1ZbyhYLCJpbm5lckJvcmRlckJvdHRvbSIpO3RoaXMuY2FjaGVkRml4ZWRSb3dzQm90dG9tPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSxkfHwwPT09dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93'@;
put 'cyIpPyhnaShYLCJpbm5lckJvcmRlckJvdHRvbSIpLE89IWFlKTooSm8oWCwiaW5uZXJCb3JkZXJCb3R0b20iKSxPPWFlKX1yZXR1cm4gT319XSksYX0oU00pLG5mZT17Z2V0Rmlyc3RSZW5kZXJlZFJvdzpmdW5jdGlvbigpe3ZhciBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5zdGFydFJvd1Jl'@;
put 'bmRlcmVkO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRGaXJzdFZpc2libGVSb3c6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3RhcnRSb3dWaXNpYmxlO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRMYXN0UmVuZGVyZWRSb3c6ZnVuY3Rpb24oKXt2YXIgYz10aGlz'@;
put 'LmRhdGFBY2Nlc3NPYmplY3QuZW5kUm93UmVuZGVyZWQ7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldExhc3RWaXNpYmxlUm93OmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmVuZFJvd1Zpc2libGU7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldFJlbmRlcmVkUm93c0Nv'@;
put 'dW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5jb3VudFJvd3NSZW5kZXJlZH0sZ2V0VmlzaWJsZVJvd3NDb3VudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3QuY291bnRSb3dzVmlzaWJsZX19O0hoKG5mZSwiTUlYSU5fTkFNRSIsImNh'@;
put 'bGN1bGF0ZWRSb3dzIix7d3JpdGFibGU6ITEsZW51bWVyYWJsZTohMX0pO2NvbnN0IHJmZT1uZmU7dmFyIGlmZT17Z2V0Rmlyc3RSZW5kZXJlZENvbHVtbjpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpPy0xOjB9LGdldEZp'@;
put 'cnN0VmlzaWJsZUNvbHVtbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKX0sZ2V0TGFzdFJlbmRlcmVkQ29sdW1uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKS0xfSxnZXRMYXN0VmlzaWJsZUNvbHVtbjpmdW5j'@;
put 'dGlvbigpe3JldHVybiB0aGlzLmdldExhc3RSZW5kZXJlZENvbHVtbigpfSxnZXRSZW5kZXJlZENvbHVtbnNDb3VudDpmdW5jdGlvbigpe3ZhciBjPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKTtyZXR1cm4gTWF0aC5taW4odGhpcy53dFNldHRpbmdzLmdldFNl'@;
put 'dHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0IiksYyl9LGdldFZpc2libGVDb2x1bW5zQ291bnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpfX07SGgoaWZlLCJNSVhJTl9OQU1FIiwic3RpY2t5Q29sdW1uc1N0YXJ0Iix7d3JpdGFibGU6ITEsZW51bWVy'@;
put 'YWJsZTohMX0pO2NvbnN0IHlXPWlmZTtmdW5jdGlvbiByOShsKXtyZXR1cm4ocjk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0'@;
put 'aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiBvZmUobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVt'@;
put 'ZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLFhKZShmLmtleSksZil9fWZ1bmN0aW9uIFhKZShsKXt2YXIgYz1mdW5jdGlvbiBKSmUobCxjKXtpZigib2JqZWN0IiE9PXI5KGwpfHxudWxsPT09'@;
put 'bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PXI5KGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmlt'@;
put 'aXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1yOShjKT9jOlN0cmluZyhjKX1mdW5jdGlvbiBiVyhsLGMpe3JldHVybihiVz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3Rv'@;
put 'dHlwZU9mLmJpbmQoKTpmdW5jdGlvbihmLGQpe3JldHVybiBmLl9fcHJvdG9fXz1kLGZ9KShsLGMpfWZ1bmN0aW9uIGtSKGwpe3JldHVybihrUj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihhKXtyZXR1cm4gYS5fX3Byb3RvX198'@;
put 'fE9iamVjdC5nZXRQcm90b3R5cGVPZihhKX0pKGwpfXZhciBfVz1mdW5jdGlvbihsKXshZnVuY3Rpb24gZVFlKGwsYyl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGMmJm51bGwhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBh'@;
put 'IGZ1bmN0aW9uIik7bC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShjJiZjLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmwsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGMmJmJXKGws'@;
put 'Yyl9KGEsbCk7dmFyIGM9ZnVuY3Rpb24gdFFlKGwpe3ZhciBjPWZ1bmN0aW9uIGlRZSgpe2lmKHR5cGVvZiBSZWZsZWN0PiJ1Inx8IVJlZmxlY3QuY29uc3RydWN0fHxSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0'@;
put 'cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLGZ1bmN0aW9uKCl7fSkpLCEwfWNhdGNoe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZCxmPWtSKGwpO2lmKGMpe3ZhciBoPWtSKHRoaXMpLmNvbnN0'@;
put 'cnVjdG9yO2Q9UmVmbGVjdC5jb25zdHJ1Y3QoZixhcmd1bWVudHMsaCl9ZWxzZSBkPWYuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbiBuUWUobCxjKXtpZihjJiYoIm9iamVjdCI9PT1yOShjKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGMpKXJldHVybiBjO2lmKHZvaWQgMCE9'@;
put 'PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24gclFlKGwpe2lmKHZvaWQgMD09PWwpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGlu'@;
put 'aXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gbH0obCl9KHRoaXMsZCl9fShhKTtmdW5jdGlvbiBhKGYsZCxoLG0pe3JldHVybiBmdW5jdGlvbiBRSmUobCxjKXtpZighKGwgaW5zdGFuY2VvZiBjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2Fs'@;
put 'bCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxhKSxjLmNhbGwodGhpcyxmLGQsaCxtLEM1KX1yZXR1cm4gZnVuY3Rpb24gcUplKGwsYyxhKXtyZXR1cm4gYyYmb2ZlKGwucHJvdG90eXBlLGMpLGEmJm9mZShsLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3'@;
put 'cml0YWJsZTohMX0pLGx9KGEpfShYNyk7VGwoX1cscmZlKSxUbChfVyx5Vyk7Y29uc3Qgb1FlPV9XO2Z1bmN0aW9uIGk5KGwpe3JldHVybihpOT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlw'@;
put 'ZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIEVSKGwsYyxhKXtyZXR1cm4oRVI9bGZlKCk/UmVmbGVj'@;
put 'dC5jb25zdHJ1Y3QuYmluZCgpOmZ1bmN0aW9uKGQsaCxtKXt2YXIgXz1bbnVsbF07Xy5wdXNoLmFwcGx5KF8saCk7dmFyIFg9bmV3KEZ1bmN0aW9uLmJpbmQuYXBwbHkoZCxfKSk7cmV0dXJuIG0mJnhSKFgsbS5wcm90b3R5cGUpLFh9KS5hcHBseShudWxsLGFyZ3VtZW50cyl9ZnVuY3Rpb24g'@;
put 'YWZlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxzUWUoZi5rZXkpLGYpfX1m'@;
put 'dW5jdGlvbiBzUWUobCl7dmFyIGM9ZnVuY3Rpb24gdVFlKGwsYyl7aWYoIm9iamVjdCIhPT1pOShsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1p'@;
put 'OShmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09aTkoYyk/YzpTdHJpbmco'@;
put 'Yyl9ZnVuY3Rpb24geFIobCxjKXtyZXR1cm4oeFI9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZixkKXtyZXR1cm4gZi5fX3Byb3RvX189ZCxmfSkobCxjKX1mdW5jdGlvbiBsZmUoKXtpZih0eXBlb2YgUmVmbGVjdD4idSJ8fCFS'@;
put 'ZWZsZWN0LmNvbnN0cnVjdHx8UmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSxmdW5jdGlv'@;
put 'bigpe30pKSwhMH1jYXRjaHtyZXR1cm4hMX19ZnVuY3Rpb24gQVIobCl7cmV0dXJuKEFSPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGEpe3JldHVybiBhLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpfSkobCl9'@;
put 'dmFyIHBRZT1mdW5jdGlvbihsKXshZnVuY3Rpb24gY1FlKGwsYyl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGMmJm51bGwhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7bC5wcm90b3R5cGU9T2JqZWN0'@;
put 'LmNyZWF0ZShjJiZjLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmwsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGMmJnhSKGwsYyl9KGEsbCk7dmFyIGM9ZnVuY3Rpb24gZlFlKGwp'@;
put 'e3ZhciBjPWxmZSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciBkLGY9QVIobCk7aWYoYyl7dmFyIGg9QVIodGhpcykuY29uc3RydWN0b3I7ZD1SZWZsZWN0LmNvbnN0cnVjdChmLGFyZ3VtZW50cyxoKX1lbHNlIGQ9Zi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uIGRRZShs'@;
put 'LGMpe2lmKGMmJigib2JqZWN0Ij09PWk5KGMpfHwiZnVuY3Rpb24iPT10eXBlb2YgYykpcmV0dXJuIGM7aWYodm9pZCAwIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5j'@;
put 'dGlvbiBoUWUobCl7aWYodm9pZCAwPT09bCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBsfShsKX0odGhpcyxkKX19KGEpO2Z1bmN0aW9uIGEoZixkLGgsbSl7cmV0dXJu'@;
put 'IGZ1bmN0aW9uIGFRZShsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGEpLGMuY2FsbCh0aGlzLGYsZCxDNSxoLG0pfXJldHVybiBmdW5jdGlvbiBsUWUobCxjLGEpe2MmJmFmZShs'@;
put 'LnByb3RvdHlwZSxjKSxhJiZhZmUobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0oYSxbe2tleToiY3JlYXRlVGFibGUiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksbT0wO208'@;
put 'ZDttKyspaFttXT1hcmd1bWVudHNbbV07cmV0dXJuIEVSKG9RZSxoKX19LHtrZXk6InNob3VsZEJlUmVuZGVyZWQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzaG91bGRSZW5kZXJJbmxpbmVTdGFydE92ZXJsYXkiKX19LHtrZXk6InJlc2V0'@;
put 'Rml4ZWRQb3NpdGlvbiIsdmFsdWU6ZnVuY3Rpb24oKXtpZighdGhpcy5uZWVkRnVsbFJlbmRlcnx8IXRoaXMud290Lnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpcmV0dXJuITE7dmFyIGg9dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93LG09dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5w'@;
put 'YXJlbnROb2RlLF89dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpLE89MDt0aGlzLnRyaW1taW5nQ29udGFpbmVyIT09aHx8XyYmImhvcml6b250YWwiPT09Xz8oTz10aGlzLmdldFNjcm9sbFBvc2l0aW9uKCksR1MobSkpOihPPXRoaXMuZ2V0T3ZlcmxheU9m'@;
put 'ZnNldCgpKih0aGlzLmlzUnRsKCk/LTE6MSkscUkobSwiIi5jb25jYXQoTywicHgiKSwiMHB4IikpO3ZhciBYPXRoaXMuYWRqdXN0SGVhZGVyQm9yZGVyc1Bvc2l0aW9uKE8pO3JldHVybiB0aGlzLmFkanVzdEVsZW1lbnRzU2l6ZSgpLFh9fSx7a2V5OiJzZXRTY3JvbGxQb3NpdGlvbiIsdmFs'@;
put 'dWU6ZnVuY3Rpb24oZCl7dmFyIGg9dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93LG09ITE7cmV0dXJuIHRoaXMuaXNSdGwoKSYmKGQ9LWQpLHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9PT1oJiZoLnNjcm9sbFghPT1kPyhoLnNjcm9sbFRvKGQsVjcoaCkpLG09ITApOnRoaXMu'@;
put 'bWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsTGVmdCE9PWQmJih0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LnNjcm9sbExlZnQ9ZCxtPSEwKSxtfX0se2tleToib25TY3JvbGwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uU2Ny'@;
put 'b2xsVmVydGljYWxseSIpfX0se2tleToic3VtQ2VsbFNpemVzIix2YWx1ZTpmdW5jdGlvbihkLGgpe2Zvcih2YXIgbT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZGVmYXVsdENvbHVtbldpZHRoIiksXz1kLE89MDtfPGg7KU8rPXRoaXMud290Lnd0VGFibGUuZ2V0U3RyZXRjaGVkQ29s'@;
put 'dW1uV2lkdGgoXyl8fG0sXys9MTtyZXR1cm4gT319LHtrZXk6ImFkanVzdEVsZW1lbnRzU2l6ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO3RoaXMudXBkYXRlVHJpbW1pbmdDb250YWluZXIo'@;
put 'KSwodGhpcy5uZWVkRnVsbFJlbmRlcnx8ZCkmJih0aGlzLmFkanVzdFJvb3RFbGVtZW50U2l6ZSgpLHRoaXMuYWRqdXN0Um9vdENoaWxkcmVuU2l6ZSgpKX19LHtrZXk6ImFkanVzdFJvb3RFbGVtZW50U2l6ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLndvdC53dFRhYmxlLGg9dGhp'@;
put 'cy5kb21CaW5kaW5ncyxfPWgucm9vdFdpbmRvdyxPPU51KGgucm9vdERvY3VtZW50KSxhZT10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUuc3R5bGUscGU9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO2lmKHRoaXMudHJpbW1pbmdDb250'@;
put 'YWluZXIhPT1ffHwidmVydGljYWwiPT09cGUpe3ZhciBiZT10aGlzLndvdC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZUhlaWdodCgpO3RoaXMud290Lnd0T3ZlcmxheXMuaGFzU2Nyb2xsYmFyQm90dG9tJiYoYmUtPU8pLGJlPU1hdGgubWluKGJlLGQud3RSb290RWxlbWVudC5zY3JvbGxIZWln'@;
put 'aHQpLGFlLmhlaWdodD0iIi5jb25jYXQoYmUsInB4Iil9ZWxzZSBhZS5oZWlnaHQ9IiI7dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5zdHlsZS5oZWlnaHQ9YWUuaGVpZ2h0O3ZhciB4ZT1TbCh0aGlzLmNsb25lLnd0VGFibGUuVEFCTEUpO2FlLndpZHRoPSIiLmNvbmNhdCh4ZSwicHgiKX19'@;
put 'LHtrZXk6ImFkanVzdFJvb3RDaGlsZHJlblNpemUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQsaD10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLG09dGhpcy53b3Quc2VsZWN0aW9ucyxfPXRoaXMuZmFjYWRlR2V0dGVyKCksTz1NYXRoLmFicyhudWxsIT09KGQ9bT8uZ2V0Q2VsbCgpLmdldEJv'@;
put 'cmRlcihfKS5jb3JuZXJDZW50ZXJQb2ludE9mZnNldCkmJnZvaWQgMCE9PWQ/ZDowKTt0aGlzLmNsb25lLnd0VGFibGUuaGlkZXIuc3R5bGUuaGVpZ2h0PXRoaXMuaGlkZXIuc3R5bGUuaGVpZ2h0LGguc3R5bGUuaGVpZ2h0PWgucGFyZW50Tm9kZS5zdHlsZS5oZWlnaHQsaC5zdHlsZS53aWR0'@;
put 'aD0iIi5jb25jYXQocGFyc2VJbnQoaC5wYXJlbnROb2RlLnN0eWxlLndpZHRoLDEwKStPLCJweCIpfX0se2tleToiYXBwbHlUb0RPTSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIiksaD10aGlzLmlzUnRsKCk/InJpZ2h0'@;
put 'IjoibGVmdCI7aWYoIm51bWJlciI9PXR5cGVvZiB0aGlzLndvdC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb24pdGhpcy5zcHJlYWRlci5zdHlsZVtoXT0iIi5jb25jYXQodGhpcy53b3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5z'@;
put 'dGFydFBvc2l0aW9uLCJweCIpO2Vsc2V7aWYoMCE9PWQpdGhyb3cgbmV3IEVycm9yKCJJbmNvcnJlY3QgdmFsdWUgb2YgdGhlIGNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yIik7dGhpcy5zcHJlYWRlci5zdHlsZVtoXT0iMCJ9dGhpcy5pc1J0bCgpP3RoaXMuc3ByZWFkZXIuc3R5bGUubGVmdD0i'@;
put 'Ijp0aGlzLnNwcmVhZGVyLnN0eWxlLnJpZ2h0PSIiLHRoaXMubmVlZEZ1bGxSZW5kZXImJnRoaXMuc3luY092ZXJsYXlPZmZzZXQoKX19LHtrZXk6InN5bmNPdmVybGF5T2Zmc2V0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY2xvbmUud3RUYWJsZS5zcHJlYWRlci5zdHlsZS50b3A9Im51bWJl'@;
put 'ciI9PXR5cGVvZiB0aGlzLndvdC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb24/IiIuY29uY2F0KHRoaXMud290Lnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbiwicHgiKToiIn19LHtrZXk6InNjcm9sbFRvIix2YWx1ZTpm'@;
put 'dW5jdGlvbihkLGgpe3ZhciBtPXRoaXMuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKSxPPSh0aGlzLndvdC5jbG9uZVNvdXJjZT90aGlzLndvdC5jbG9uZVNvdXJjZTp0aGlzLndvdCkud3RUYWJsZS5ob2xkZXIsWD0wO3JldHVybiBoJiZ0aGlzLndvdC53dFRhYmxlLmdldENvbHVtbldpZHRoKGQp'@;
put 'PnRoaXMud290Lnd0Vmlld3BvcnQuZ2V0Vmlld3BvcnRXaWR0aCgpJiYoaD0hMSksaCYmTy5vZmZzZXRXaWR0aCE9PU8uY2xpZW50V2lkdGgmJihYPU51KHRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50KSksaD8obSs9dGhpcy5zdW1DZWxsU2l6ZXMoMCxkKzEpLG0tPXRoaXMud290Lnd0'@;
put 'Vmlld3BvcnQuZ2V0Vmlld3BvcnRXaWR0aCgpKTptKz10aGlzLnN1bUNlbGxTaXplcyh0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKSxkKSx0aGlzLnNldFNjcm9sbFBvc2l0aW9uKG0rPVgpfX0se2tleToiZ2V0VGFibGVQYXJlbnRPZmZzZXQiLHZhbHVl'@;
put 'OmZ1bmN0aW9uKCl7dmFyIGg9MDtyZXR1cm4hdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpJiZ0aGlzLnRyaW1taW5nQ29udGFpbmVyPT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93JiYoaD10aGlzLndvdC53dFRhYmxlLmhvbGRlck9mZnNldC5sZWZ0'@;
put 'KSxofX0se2tleToiZ2V0U2Nyb2xsUG9zaXRpb24iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguYWJzKEtJKHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQsdGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93KSl9fSx7a2V5OiJnZXRPdmVybGF5T2Zmc2V0Iix2YWx1ZTpmdW5j'@;
put 'dGlvbigpe3ZhciBkPXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdyxoPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKSxtPTA7cmV0dXJuIHRoaXMudHJpbW1pbmdDb250YWluZXIhPT1kfHxoJiYiaG9yaXpvbnRhbCI9PT1ofHwobT10aGlzLmlzUnRsKCk/'@;
put 'TWF0aC5hYnMoTWF0aC5taW4odGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpLXRoaXMuZ2V0U2Nyb2xsUG9zaXRpb24oKSwwKSk6TWF0aC5tYXgodGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLXRoaXMuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKSwwKSk+dGhpcy53b3Qud3RUYWJsZS5nZXRUb3Rh'@;
put 'bFdpZHRoKCktdGhpcy5jbG9uZS53dFRhYmxlLmdldFRvdGFsV2lkdGgoKSYmKG09MCksbX19LHtrZXk6ImFkanVzdEhlYWRlckJvcmRlcnNQb3NpdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZCl7dmFyIGg9dGhpcy53b3Qud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSxtPXRoaXMud3RTZXR0aW5n'@;
put 'cy5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIiksXz10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKTt0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIik/Sm8oaCwiZW1wdHlSb3dzIik6Z2koaCwiZW1wdHlSb3dzIik7dmFyIFg9ITE7aWYo'@;
put 'XyYmIW0ubGVuZ3RoKWdpKGgsImlubmVyQm9yZGVyTGVmdCBpbm5lckJvcmRlcklubGluZVN0YXJ0Iik7ZWxzZSBpZighXyYmbS5sZW5ndGgpe3ZhciBhZT1ZbyhoLCJpbm5lckJvcmRlcklubGluZVN0YXJ0Iik7ZD8oZ2koaCwiaW5uZXJCb3JkZXJMZWZ0IGlubmVyQm9yZGVySW5saW5lU3Rh'@;
put 'cnQiKSxYPSFhZSk6KEpvKGgsImlubmVyQm9yZGVyTGVmdCBpbm5lckJvcmRlcklubGluZVN0YXJ0IiksWD1hZSl9cmV0dXJuIFh9fV0pLGF9KFNNKTtmdW5jdGlvbiBvOShsKXtyZXR1cm4obzk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRl'@;
put 'cmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiBzZmUo'@;
put 'bCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLGdRZShmLmtleSksZil9fWZ1bmN0'@;
put 'aW9uIGdRZShsKXt2YXIgYz1mdW5jdGlvbiB2UWUobCxjKXtpZigib2JqZWN0IiE9PW85KGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PW85KGYp'@;
put 'KXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1vOShjKT9jOlN0cmluZyhjKX1m'@;
put 'dW5jdGlvbiB3VyhsLGMpe3JldHVybih3Vz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihmLGQpe3JldHVybiBmLl9fcHJvdG9fXz1kLGZ9KShsLGMpfWZ1bmN0aW9uIFRSKGwpe3JldHVybihUUj1PYmplY3Quc2V0UHJvdG90eXBl'@;
put 'T2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihhKXtyZXR1cm4gYS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihhKX0pKGwpfXZhciBDVz1mdW5jdGlvbihsKXshZnVuY3Rpb24gYlFlKGwsYyl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGMmJm51bGwhPT1j'@;
put 'KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7bC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShjJiZjLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmwsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEw'@;
put 'fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGMmJndXKGwsYyl9KGEsbCk7dmFyIGM9ZnVuY3Rpb24gX1FlKGwpe3ZhciBjPWZ1bmN0aW9uIFNRZSgpe2lmKHR5cGVvZiBSZWZsZWN0PiJ1Inx8IVJlZmxlY3QuY29uc3RydWN0fHxSZWZsZWN0'@;
put 'LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLGZ1bmN0aW9uKCl7fSkpLCEwfWNhdGNoe3JldHVybiEx'@;
put 'fX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZCxmPVRSKGwpO2lmKGMpe3ZhciBoPVRSKHRoaXMpLmNvbnN0cnVjdG9yO2Q9UmVmbGVjdC5jb25zdHJ1Y3QoZixhcmd1bWVudHMsaCl9ZWxzZSBkPWYuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbiB3UWUobCxjKXtpZihj'@;
put 'JiYoIm9iamVjdCI9PT1vOShjKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGMpKXJldHVybiBjO2lmKHZvaWQgMCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24gQ1Fl'@;
put 'KGwpe2lmKHZvaWQgMD09PWwpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gbH0obCl9KHRoaXMsZCl9fShhKTtmdW5jdGlvbiBhKGYsZCxoLG0pe3JldHVybiBmdW5jdGlv'@;
put 'biB5UWUobCxjKXtpZighKGwgaW5zdGFuY2VvZiBjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxhKSxjLmNhbGwodGhpcyxmLGQsaCxtLFM1KX1yZXR1cm4gZnVuY3Rpb24gbVFlKGwsYyxhKXtyZXR1cm4gYyYmc2ZlKGwu'@;
put 'cHJvdG90eXBlLGMpLGEmJnNmZShsLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGx9KGEpfShYNyk7VGwoQ1csRTFlKSxUbChDVyx5Vyk7Y29uc3QgTVFlPUNXO2Z1bmN0aW9uIGE5KGwpe3JldHVybihhOT0iZnVuY3Rpb24iPT10eXBlb2Yg'@;
put 'U3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8i'@;
put 'c3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIE9SKGwsYyxhKXtyZXR1cm4oT1I9Y2ZlKCk/UmVmbGVjdC5jb25zdHJ1Y3QuYmluZCgpOmZ1bmN0aW9uKGQsaCxtKXt2YXIgXz1bbnVsbF07Xy5wdXNoLmFwcGx5KF8saCk7dmFyIFg9bmV3KEZ1bmN0aW9uLmJpbmQuYXBwbHkoZCxfKSk7'@;
put 'cmV0dXJuIG0mJkRSKFgsbS5wcm90b3R5cGUpLFh9KS5hcHBseShudWxsLGFyZ3VtZW50cyl9ZnVuY3Rpb24gdWZlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVl'@;
put 'ImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxkZmUoZi5rZXkpLGYpfX1mdW5jdGlvbiBEUihsLGMpe3JldHVybihEUj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihmLGQpe3JldHVybiBmLl9f'@;
put 'cHJvdG9fXz1kLGZ9KShsLGMpfWZ1bmN0aW9uIFNXKGwpe2lmKHZvaWQgMD09PWwpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gbH1mdW5jdGlvbiBjZmUoKXtpZih0eXBl'@;
put 'b2YgUmVmbGVjdD4idSJ8fCFSZWZsZWN0LmNvbnN0cnVjdHx8UmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3Qo'@;
put 'Qm9vbGVhbixbXSxmdW5jdGlvbigpe30pKSwhMH1jYXRjaHtyZXR1cm4hMX19ZnVuY3Rpb24gSVIobCl7cmV0dXJuKElSPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGEpe3JldHVybiBhLl9fcHJvdG9fX3x8T2JqZWN0LmdldFBy'@;
put 'b3RvdHlwZU9mKGEpfSkobCl9ZnVuY3Rpb24gZmZlKGwsYyxhKXtyZXR1cm4oYz1kZmUoYykpaW4gbD9PYmplY3QuZGVmaW5lUHJvcGVydHkobCxjLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6bFtjXT1hLGx9ZnVuY3Rpb24gZGZlKGwpe3Zh'@;
put 'ciBjPWZ1bmN0aW9uIE9RZShsLGMpe2lmKCJvYmplY3QiIT09YTkobCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09YTkoZikpcmV0dXJuIGY7dGhy'@;
put 'b3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PWE5KGMpP2M6U3RyaW5nKGMpfXZhciBEUWU9ZnVuY3Rp'@;
put 'b24obCl7IWZ1bmN0aW9uIHhRZShsLGMpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjJiZudWxsIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2wucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYyYmYy5w'@;
put 'cm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpsLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxjJiZEUihsLGMpfShhLGwpO3ZhciBjPWZ1bmN0aW9uIEFRZShsKXt2YXIgYz1jZmUoKTty'@;
put 'ZXR1cm4gZnVuY3Rpb24oKXt2YXIgZCxmPUlSKGwpO2lmKGMpe3ZhciBoPUlSKHRoaXMpLmNvbnN0cnVjdG9yO2Q9UmVmbGVjdC5jb25zdHJ1Y3QoZixhcmd1bWVudHMsaCl9ZWxzZSBkPWYuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbiBUUWUobCxjKXtpZihjJiYoIm9i'@;
put 'amVjdCI9PT1hOShjKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGMpKXJldHVybiBjO2lmKHZvaWQgMCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gU1cobCl9KHRoaXMsZCl9fShh'@;
put 'KTtmdW5jdGlvbiBhKGYsZCxoLG0sXyxPKXt2YXIgWDtyZXR1cm4gZnVuY3Rpb24ga1FlKGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsYSksZmZlKFNXKFg9Yy5jYWxsKHRoaXMs'@;
put 'ZixkLFM1LGgsbSkpLCJ0b3BPdmVybGF5Iix2b2lkIDApLGZmZShTVyhYKSwiaW5saW5lU3RhcnRPdmVybGF5Iix2b2lkIDApLFgudG9wT3ZlcmxheT1fLFguaW5saW5lU3RhcnRPdmVybGF5PU8sWH1yZXR1cm4gZnVuY3Rpb24gRVFlKGwsYyxhKXtjJiZ1ZmUobC5wcm90b3R5cGUsYyksYSYm'@;
put 'dWZlKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGEsW3trZXk6ImNyZWF0ZVRhYmxlIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLG09MDttPGQ7bSsrKWhbbV09YXJndW1l'@;
put 'bnRzW21dO3JldHVybiBPUihNUWUsaCl9fSx7a2V5OiJzaG91bGRCZVJlbmRlcmVkIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic2hvdWxkUmVuZGVyVG9wT3ZlcmxheSIpJiZ0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic2hvdWxkUmVu'@;
put 'ZGVySW5saW5lU3RhcnRPdmVybGF5Iil9fSx7a2V5OiJyZXNldEZpeGVkUG9zaXRpb24iLHZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy51cGRhdGVUcmltbWluZ0NvbnRhaW5lcigpLCF0aGlzLndvdC53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKXJldHVybiExO3ZhciBkPXRoaXMuY2xvbmUu'@;
put 'd3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZTtpZih0aGlzLnRyaW1taW5nQ29udGFpbmVyPT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93KXt2YXIgaD10aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRPdmVybGF5T2Zmc2V0KCkqKHRoaXMuaXNSdGwoKT8tMToxKSxtPXRoaXMudG9wT3Zl'@;
put 'cmxheS5nZXRPdmVybGF5T2Zmc2V0KCk7cUkoZCwiIi5jb25jYXQoaCwicHgiKSwiIi5jb25jYXQobSwicHgiKSl9ZWxzZSBHUyhkKTt2YXIgXz1jcyh0aGlzLmNsb25lLnd0VGFibGUuVEFCTEUpLE89U2wodGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFKTtyZXR1cm4gdGhpcy53b3Qud3RUYWJs'@;
put 'ZS5oYXNEZWZpbmVkU2l6ZSgpfHwoXz0wKSxkLnN0eWxlLmhlaWdodD0iIi5jb25jYXQoXywicHgiKSxkLnN0eWxlLndpZHRoPSIiLmNvbmNhdChPLCJweCIpLCExfX1dKSxhfShTTSk7ZnVuY3Rpb24gbDkobCl7cmV0dXJuKGw5PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wi'@;
put 'PT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBj'@;
put 'fSkobCl9ZnVuY3Rpb24gaGZlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxS'@;
put 'UWUoZi5rZXkpLGYpfX1mdW5jdGlvbiBSUWUobCl7dmFyIGM9ZnVuY3Rpb24gTFFlKGwsYyl7aWYoIm9iamVjdCIhPT1sOShsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7'@;
put 'aWYoIm9iamVjdCIhPT1sOShmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09'@;
put 'bDkoYyk/YzpTdHJpbmcoYyl9ZnVuY3Rpb24gTVcobCxjKXtyZXR1cm4oTVc9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZixkKXtyZXR1cm4gZi5fX3Byb3RvX189ZCxmfSkobCxjKX1mdW5jdGlvbiBSUihsKXtyZXR1cm4oUlI9'@;
put 'T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSl9KShsKX12YXIga1c9ZnVuY3Rpb24obCl7IWZ1bmN0aW9uIEZRZShsLGMpe2lmKCJmdW5jdGlvbiIh'@;
put 'PXR5cGVvZiBjJiZudWxsIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2wucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYyYmYy5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpsLHdyaXRhYmxl'@;
put 'OiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxjJiZNVyhsLGMpfShhLGwpO3ZhciBjPWZ1bmN0aW9uIEhRZShsKXt2YXIgYz1mdW5jdGlvbiBCUWUoKXtpZih0eXBlb2YgUmVmbGVjdD4idSJ8fCFSZWZsZWN0'@;
put 'LmNvbnN0cnVjdHx8UmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSxmdW5jdGlvbigpe30p'@;
put 'KSwhMH1jYXRjaHtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGQsZj1SUihsKTtpZihjKXt2YXIgaD1SUih0aGlzKS5jb25zdHJ1Y3RvcjtkPVJlZmxlY3QuY29uc3RydWN0KGYsYXJndW1lbnRzLGgpfWVsc2UgZD1mLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVu'@;
put 'Y3Rpb24gTlFlKGwsYyl7aWYoYyYmKCJvYmplY3QiPT09bDkoYyl8fCJmdW5jdGlvbiI9PXR5cGVvZiBjKSlyZXR1cm4gYztpZih2b2lkIDAhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7'@;
put 'cmV0dXJuIGZ1bmN0aW9uIFZRZShsKXtpZih2b2lkIDA9PT1sKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGx9KGwpfSh0aGlzLGQpfX0oYSk7ZnVuY3Rpb24gYShmLGQs'@;
put 'aCxtKXtyZXR1cm4gZnVuY3Rpb24gUFFlKGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsYSksYy5jYWxsKHRoaXMsZixkLGgsbSxSNCl9cmV0dXJuIGZ1bmN0aW9uIElRZShsLGMs'@;
put 'YSl7cmV0dXJuIGMmJmhmZShsLnByb3RvdHlwZSxjKSxhJiZoZmUobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxsfShhKX0oWDcpO1RsKGtXLHExZSksVGwoa1cseVcpO2NvbnN0IGpRZT1rVztmdW5jdGlvbiBzOShsKXtyZXR1cm4oczk9'@;
put 'ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9'@;
put 'PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiBMUihsLGMsYSl7cmV0dXJuKExSPW1mZSgpP1JlZmxlY3QuY29uc3RydWN0LmJpbmQoKTpmdW5jdGlvbihkLGgsbSl7dmFyIF89W251bGxdO18ucHVzaC5hcHBseShfLGgpO3ZhciBYPW5ldyhGdW5jdGlv'@;
put 'bi5iaW5kLmFwcGx5KGQsXykpO3JldHVybiBtJiZQUihYLG0ucHJvdG90eXBlKSxYfSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfWZ1bmN0aW9uIHBmZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29u'@;
put 'ZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsWlFlKGYua2V5KSxmKX19ZnVuY3Rpb24gWlFlKGwpe3ZhciBjPWZ1bmN0aW9uIFlRZShsLGMpe2lmKCJvYmplY3QiIT09czkobCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBh'@;
put 'PWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09czkoZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1y'@;
put 'ZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PXM5KGMpP2M6U3RyaW5nKGMpfWZ1bmN0aW9uIFBSKGwsYyl7cmV0dXJuKFBSPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1'@;
put 'bmN0aW9uKGYsZCl7cmV0dXJuIGYuX19wcm90b19fPWQsZn0pKGwsYyl9ZnVuY3Rpb24gbWZlKCl7aWYodHlwZW9mIFJlZmxlY3Q+InUifHwhUmVmbGVjdC5jb25zdHJ1Y3R8fFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVy'@;
put 'biEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sZnVuY3Rpb24oKXt9KSksITB9Y2F0Y2h7cmV0dXJuITF9fWZ1bmN0aW9uIEZSKGwpe3JldHVybihGUj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0Lmdl'@;
put 'dFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihhKXtyZXR1cm4gYS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihhKX0pKGwpfXZhciBxUWU9ZnVuY3Rpb24obCl7IWZ1bmN0aW9uIFdRZShsLGMpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjJiZudWxsIT09Yyl0aHJvdyBuZXcg'@;
put 'VHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2wucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYyYmYy5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpsLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3Qu'@;
put 'ZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxjJiZQUihsLGMpfShhLGwpO3ZhciBjPWZ1bmN0aW9uIEdRZShsKXt2YXIgYz1tZmUoKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZCxmPUZSKGwpO2lmKGMpe3ZhciBoPUZSKHRoaXMpLmNvbnN0cnVjdG9yO2Q9UmVm'@;
put 'bGVjdC5jb25zdHJ1Y3QoZixhcmd1bWVudHMsaCl9ZWxzZSBkPWYuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbiAkUWUobCxjKXtpZihjJiYoIm9iamVjdCI9PT1zOShjKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGMpKXJldHVybiBjO2lmKHZvaWQgMCE9PWMpdGhyb3cgbmV3'@;
put 'IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24gS1FlKGwpe2lmKHZvaWQgMD09PWwpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0g'@;
put 'c3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gbH0obCl9KHRoaXMsZCl9fShhKTtmdW5jdGlvbiBhKGYsZCxoLG0sXyxPKXt2YXIgWDtyZXR1cm4gZnVuY3Rpb24gelFlKGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwg'@;
put 'YSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsYSksKFg9Yy5jYWxsKHRoaXMsZixkLFI0LGgsbSkpLmJvdHRvbU92ZXJsYXk9XyxYLmlubGluZVN0YXJ0T3ZlcmxheT1PLFh9cmV0dXJuIGZ1bmN0aW9uIFVRZShsLGMsYSl7YyYmcGZlKGwucHJvdG90eXBlLGMpLGEmJnBmZShsLGEpLE9i'@;
put 'amVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShhLFt7a2V5OiJjcmVhdGVUYWJsZSIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxtPTA7bTxkO20rKyloW21dPWFyZ3VtZW50c1ttXTtyZXR1'@;
put 'cm4gTFIoalFlLGgpfX0se2tleToic2hvdWxkQmVSZW5kZXJlZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRlckJvdHRvbU92ZXJsYXkiKSYmdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRlcklubGlu'@;
put 'ZVN0YXJ0T3ZlcmxheSIpfX0se2tleToicmVzZXRGaXhlZFBvc2l0aW9uIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXMud290O2lmKHRoaXMudXBkYXRlVHJpbW1pbmdDb250YWluZXIoKSwhZC53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKXJldHVybiExO3ZhciBoPXRoaXMuY2xvbmUu'@;
put 'd3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZTtpZihoLnN0eWxlLnRvcD0iIix0aGlzLnRyaW1taW5nQ29udGFpbmVyPT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93KXt2YXIgbT10aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRPdmVybGF5T2Zmc2V0KCksXz10aGlzLmJvdHRvbU92ZXJs'@;
put 'YXkuZ2V0T3ZlcmxheU9mZnNldCgpO2guc3R5bGVbdGhpcy5pc1J0bCgpPyJyaWdodCI6ImxlZnQiXT0iIi5jb25jYXQobSwicHgiKSxoLnN0eWxlLmJvdHRvbT0iIi5jb25jYXQoXywicHgiKX1lbHNlIEdTKGgpLHRoaXMucmVwb3NpdGlvbk92ZXJsYXkoKTt2YXIgTz1jcyh0aGlzLmNsb25l'@;
put 'Lnd0VGFibGUuVEFCTEUpLFg9U2wodGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFKTtyZXR1cm4gdGhpcy53b3Qud3RUYWJsZS5oYXNEZWZpbmVkU2l6ZSgpfHwoTz0wKSxoLnN0eWxlLmhlaWdodD0iIi5jb25jYXQoTywicHgiKSxoLnN0eWxlLndpZHRoPSIiLmNvbmNhdChYLCJweCIpLCExfX0s'@;
put 'e2tleToicmVwb3NpdGlvbk92ZXJsYXkiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy53b3QsaD1kLnd0VGFibGUsbT1kLnd0Vmlld3BvcnQsXz10aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudCxPPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSxYPTA7bS5oYXNW'@;
put 'ZXJ0aWNhbFNjcm9sbCgpfHwoWCs9bS5nZXRXb3Jrc3BhY2VIZWlnaHQoKS1oLmdldFRvdGFsSGVpZ2h0KCkpLG0uaGFzVmVydGljYWxTY3JvbGwoKSYmbS5oYXNIb3Jpem9udGFsU2Nyb2xsKCkmJihYKz1OdShfKSksTy5zdHlsZS5ib3R0b209IiIuY29uY2F0KFgsInB4Iil9fV0pLGF9KFNN'@;
put 'KTtmdW5jdGlvbiBNTShsKXtyZXR1cm4oTU09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYm'@;
put 'Yy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiBMNChsLGMsYSl7cmV0dXJuKEw0PWZ1bmN0aW9uIFhRZSgpe2lmKHR5cGVvZiBSZWZsZWN0PiJ1Inx8IVJlZmxlY3QuY29uc3RydWN0fHxSZWZsZWN0LmNv'@;
put 'bnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLGZ1bmN0aW9uKCl7fSkpLCEwfWNhdGNoe3JldHVybiExfX0o'@;
put 'KT9SZWZsZWN0LmNvbnN0cnVjdC5iaW5kKCk6ZnVuY3Rpb24oZCxoLG0pe3ZhciBfPVtudWxsXTtfLnB1c2guYXBwbHkoXyxoKTt2YXIgWD1uZXcoRnVuY3Rpb24uYmluZC5hcHBseShkLF8pKTtyZXR1cm4gbSYmRVcoWCxtLnByb3RvdHlwZSksWH0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX1m'@;
put 'dW5jdGlvbiBFVyhsLGMpe3JldHVybihFVz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihmLGQpe3JldHVybiBmLl9fcHJvdG9fXz1kLGZ9KShsLGMpfWZ1bmN0aW9uIGdmZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsr'@;
put 'KXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsdmZlKGYua2V5KSxmKX19ZnVuY3Rpb24gaDMobCxjLGEpe3JldHVybihjPXZmZShjKSlp'@;
put 'biBsP09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLGMse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpsW2NdPWEsbH1mdW5jdGlvbiB2ZmUobCl7dmFyIGM9ZnVuY3Rpb24gZWV0KGwsYyl7aWYoIm9iamVjdCIhPT1NTShsKXx8bnVsbD09PWwpcmV0'@;
put 'dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1NTShmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZl'@;
put 'IHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09TU0oYyk/YzpTdHJpbmcoYyl9dmFyIHRldD1mdW5jdGlvbigpe2Z1bmN0aW9uIGwoYyxhLGYsZCxoLG0pe3ZhciBfPXRoaXM7KGZ1bmN0aW9uIEpRZShs'@;
put 'LGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyxsKSxoMyh0aGlzLCJ3b3QiLG51bGwpLGgzKHRoaXMsInRvcE92ZXJsYXkiLG51bGwpLGgzKHRoaXMsImJvdHRvbU92ZXJsYXkiLG51'@;
put 'bGwpLGgzKHRoaXMsImlubGluZVN0YXJ0T3ZlcmxheSIsbnVsbCksaDModGhpcywidG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5IixudWxsKSxoMyh0aGlzLCJib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkiLG51bGwpLGgzKHRoaXMsImJyb3dzZXJMaW5lSGVpZ2h0Iix2b2lkIDAp'@;
put 'LGgzKHRoaXMsInd0U2V0dGluZ3MiLG51bGwpLGgzKHRoaXMsInJlc2l6ZU9ic2VydmVyIixuZXcgUmVzaXplT2JzZXJ2ZXIoZnVuY3Rpb24oYmUpe0JJKGZ1bmN0aW9uKCl7IUFycmF5LmlzQXJyYXkoYmUpfHwhYmUubGVuZ3RofHxfLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25Db250YWlu'@;
put 'ZXJFbGVtZW50UmVzaXplIil9KX0pKSx0aGlzLndvdD1jLHRoaXMud3RTZXR0aW5ncz1kLHRoaXMuZG9tQmluZGluZ3M9Zix0aGlzLmZhY2FkZUdldHRlcj1hLHRoaXMud3RUYWJsZT1tO3ZhciBPPXRoaXMuZG9tQmluZGluZ3MsWD1PLnJvb3REb2N1bWVudCxhZT1PLnJvb3RXaW5kb3c7dGhp'@;
put 'cy5pbnN0YW5jZT10aGlzLndvdCx0aGlzLmV2ZW50TWFuYWdlcj1oLHRoaXMuc2Nyb2xsYmFyU2l6ZT1OdShYKTt2YXIgcGU9ImhpZGRlbiI9PT1hZS5nZXRDb21wdXRlZFN0eWxlKG0ud3RSb290RWxlbWVudC5wYXJlbnROb2RlKS5nZXRQcm9wZXJ0eVZhbHVlKCJvdmVyZmxvdyIpO3RoaXMu'@;
put 'c2Nyb2xsYWJsZUVsZW1lbnQ9cGU/bS5ob2xkZXI6WlMobS5UQUJMRSksdGhpcy5pbml0T3ZlcmxheXMoKSx0aGlzLmhhc1Njcm9sbGJhckJvdHRvbT0hMSx0aGlzLmhhc1Njcm9sbGJhclJpZ2h0PSExLHRoaXMuZGVzdHJveWVkPSExLHRoaXMua2V5UHJlc3NlZD0hMSx0aGlzLnNwcmVhZGVy'@;
put 'TGFzdFNpemU9e3dpZHRoOm51bGwsaGVpZ2h0Om51bGx9LHRoaXMudmVydGljYWxTY3JvbGxpbmc9ITEsdGhpcy5ob3Jpem9udGFsU2Nyb2xsaW5nPSExLHRoaXMuaW5pdEJyb3dzZXJMaW5lSGVpZ2h0KCksdGhpcy5yZWdpc3Rlckxpc3RlbmVycygpLHRoaXMubGFzdFNjcm9sbFg9YWUuc2Ny'@;
put 'b2xsWCx0aGlzLmxhc3RTY3JvbGxZPWFlLnNjcm9sbFl9cmV0dXJuIGZ1bmN0aW9uIFFRZShsLGMsYSl7YyYmZ2ZlKGwucHJvdG90eXBlLGMpLGEmJmdmZShsLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShsLFt7a2V5OiJnZXRPdmVybGF5'@;
put 'cyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZj1bdGhpcy50b3BPdmVybGF5LHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LHRoaXMuYm90dG9tT3ZlcmxheSx0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheV07cmV0dXJuIGFy'@;
put 'Z3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0mJmYucHVzaCh0aGlzLnd0VGFibGUpLGZ9fSx7a2V5OiJpbml0QnJvd3NlckxpbmVIZWlnaHQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5kb21CaW5kaW5ncyxoPWEucm9vdFdpbmRvdy5n'@;
put 'ZXRDb21wdXRlZFN0eWxlKGEucm9vdERvY3VtZW50LmJvZHkpLG09cGFyc2VJbnQoaC5saW5lSGVpZ2h0LDEwKSxfPTEuMipwYXJzZUludChoLmZvbnRTaXplLDEwKTt0aGlzLmJyb3dzZXJMaW5lSGVpZ2h0PW18fF99fSx7a2V5OiJpbml0T3ZlcmxheXMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFy'@;
put 'IGE9W3RoaXMud290LHRoaXMuZmFjYWRlR2V0dGVyLHRoaXMud3RTZXR0aW5ncyx0aGlzLmRvbUJpbmRpbmdzXTt0aGlzLnRvcE92ZXJsYXk9TDQoQUplLGEpLHRoaXMuYm90dG9tT3ZlcmxheT1MNChHSmUsYSksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXk9TDQocFFlLGEpLHRoaXMudG9wSW5s'@;
put 'aW5lU3RhcnRDb3JuZXJPdmVybGF5PUw0KERRZSxhLmNvbmNhdChbdGhpcy50b3BPdmVybGF5LHRoaXMuaW5saW5lU3RhcnRPdmVybGF5XSkpLHRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5PUw0KHFRZSxhLmNvbmNhdChbdGhpcy5ib3R0b21PdmVybGF5LHRoaXMuaW5saW5l'@;
put 'U3RhcnRPdmVybGF5XSkpfX0se2tleToidXBkYXRlU3RhdGVPZlJlbmRlcmluZyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnRvcE92ZXJsYXkudXBkYXRlU3RhdGVPZlJlbmRlcmluZygpO3JldHVybiBhPXRoaXMuYm90dG9tT3ZlcmxheS51cGRhdGVTdGF0ZU9mUmVuZGVyaW5nKCl8'@;
put 'fGEsYT10aGlzLmlubGluZVN0YXJ0T3ZlcmxheS51cGRhdGVTdGF0ZU9mUmVuZGVyaW5nKCl8fGEsdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkubmVlZEZ1bGxSZW5kZXImJih0aGlzLnRvcE92ZXJsYXkubmVlZEZ1bGxSZW5kZXImJihhPXRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5'@;
put 'LnVwZGF0ZVN0YXRlT2ZSZW5kZXJpbmcoKXx8YSksdGhpcy5ib3R0b21PdmVybGF5Lm5lZWRGdWxsUmVuZGVyJiYoYT10aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS51cGRhdGVTdGF0ZU9mUmVuZGVyaW5nKCl8fGEpKSxhfX0se2tleToicmVmcmVzaEFsbCIsdmFsdWU6ZnVu'@;
put 'Y3Rpb24oKXtpZih0aGlzLndvdC5kcmF3bil7aWYoIXRoaXMud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSlyZXR1cm4gdm9pZCB0aGlzLmRlc3Ryb3koKTt0aGlzLndvdC5kcmF3KCEwKSx0aGlzLnZlcnRpY2FsU2Nyb2xsaW5nJiZ0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5vblNjcm9sbCgp'@;
put 'LHRoaXMuaG9yaXpvbnRhbFNjcm9sbGluZyYmdGhpcy50b3BPdmVybGF5Lm9uU2Nyb2xsKCksdGhpcy52ZXJ0aWNhbFNjcm9sbGluZz0hMSx0aGlzLmhvcml6b250YWxTY3JvbGxpbmc9ITF9fX0se2tleToicmVnaXN0ZXJMaXN0ZW5lcnMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxm'@;
put 'PXRoaXMuZG9tQmluZGluZ3MsZD1mLnJvb3REb2N1bWVudCxoPWYucm9vdFdpbmRvdyxtPXRoaXMudG9wT3ZlcmxheS5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCxfPXRoaXMuaW5saW5lU3RhcnRPdmVybGF5Lm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50O3RoaXMuZXZlbnRNYW5hZ2Vy'@;
put 'LmFkZEV2ZW50TGlzdGVuZXIoZC5kb2N1bWVudEVsZW1lbnQsImtleWRvd24iLGZ1bmN0aW9uKFZlKXtyZXR1cm4gYS5vbktleURvd24oVmUpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihkLmRvY3VtZW50RWxlbWVudCwia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIGEu'@;
put 'b25LZXlVcCgpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihkLCJ2aXNpYmlsaXR5Y2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBhLm9uS2V5VXAoKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobSwic2Nyb2xsIixmdW5jdGlvbihWZSl7cmV0dXJu'@;
put 'IGEub25UYWJsZVNjcm9sbChWZSl9LHtwYXNzaXZlOiEwfSksbSE9PV8mJnRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoXywic2Nyb2xsIixmdW5jdGlvbihWZSl7cmV0dXJuIGEub25UYWJsZVNjcm9sbChWZSl9LHtwYXNzaXZlOiEwfSk7dmFyIHhlLE89aC5kZXZpY2VQaXhl'@;
put 'bFJhdGlvJiZoLmRldmljZVBpeGVsUmF0aW8+MSxYPXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQ9PT1oLGFlPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50V2hlZWwiKSxwZT17cGFzc2l2ZTpYfTsoYWV8fE98fCF1WSgpKSYmdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0'@;
put 'ZW5lcih0aGlzLnd0VGFibGUud3RSb290RWxlbWVudCwid2hlZWwiLGZ1bmN0aW9uKFZlKXtyZXR1cm4gYS5vbkNsb25lV2hlZWwoVmUsYWUpfSxwZSksW3RoaXMudG9wT3ZlcmxheSx0aGlzLmJvdHRvbU92ZXJsYXksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXksdGhpcy50b3BJbmxpbmVTdGFy'@;
put 'dENvcm5lck92ZXJsYXksdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXldLmZvckVhY2goZnVuY3Rpb24oVmUpe1ZlJiZWZS5uZWVkRnVsbFJlbmRlciYmYS5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihWZS5jbG9uZS53dFRhYmxlLmhvbGRlciwid2hlZWwiLGZ1bmN0'@;
put 'aW9uKGx0KXtyZXR1cm4gYS5vbkNsb25lV2hlZWwobHQsYWUpfSxwZSl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGgsInJlc2l6ZSIsZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQoeGUpLHhlPXNldFRpbWVvdXQoZnVuY3Rpb24oKXthLnd0U2V0dGluZ3MuZ2V0U2V0dGlu'@;
put 'Zygib25XaW5kb3dSZXNpemUiKX0sMjAwKX0pLFh8fHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLnd0VGFibGUud3RSb290RWxlbWVudC5wYXJlbnRFbGVtZW50KX19LHtrZXk6ImRlcmVnaXN0ZXJMaXN0ZW5lcnMiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5ldmVudE1hbmFnZXIu'@;
put 'Y2xlYXJFdmVudHMoITApfX0se2tleToib25UYWJsZVNjcm9sbCIsdmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGY9dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93LGQ9dGhpcy5pbmxpbmVTdGFydE92ZXJsYXkubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQsaD10aGlzLnRvcE92ZXJsYXkubWFp'@;
put 'blRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQsbT1hLnRhcmdldDt0aGlzLmtleVByZXNzZWQmJihoIT09ZiYmbSE9PWYmJiFhLnRhcmdldC5jb250YWlucyhoKXx8ZCE9PWYmJm0hPT1mJiYhYS50YXJnZXQuY29udGFpbnMoZCkpfHx0aGlzLnN5bmNTY3JvbGxQb3NpdGlvbnMoYSl9fSx7a2V5OiJv'@;
put 'bkNsb25lV2hlZWwiLHZhbHVlOmZ1bmN0aW9uKGEsZil7dmFyIGQ9dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93LGg9dGhpcy5pbmxpbmVTdGFydE92ZXJsYXkubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQsbT10aGlzLnRvcE92ZXJsYXkubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQs'@;
put 'Xz1hLnRhcmdldCxPPW0hPT1kJiZfIT09ZCYmIV8uY29udGFpbnMobSksWD1oIT09ZCYmXyE9PWQmJiFfLmNvbnRhaW5zKGgpO2lmKCF0aGlzLmtleVByZXNzZWR8fCFPJiYhWCl7dmFyIGFlPXRoaXMudHJhbnNsYXRlTW91c2VXaGVlbFRvU2Nyb2xsKGEpOyhmfHx0aGlzLnNjcm9sbGFibGVF'@;
put 'bGVtZW50IT09ZCYmYWUpJiZhLnByZXZlbnREZWZhdWx0KCl9fX0se2tleToib25LZXlEb3duIix2YWx1ZTpmdW5jdGlvbihhKXt0aGlzLmtleVByZXNzZWQ9ajcoYS5rZXlDb2RlLCJBUlJPV19VUHxBUlJPV19SSUdIVHxBUlJPV19ET1dOfEFSUk9XX0xFRlQiKX19LHtrZXk6Im9uS2V5VXAi'@;
put 'LHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5rZXlQcmVzc2VkPSExfX0se2tleToidHJhbnNsYXRlTW91c2VXaGVlbFRvU2Nyb2xsIix2YWx1ZTpmdW5jdGlvbihhKXt2YXIgZj1pc05hTihhLmRlbHRhWSk/LTEqYS53aGVlbERlbHRhWTphLmRlbHRhWSxkPWlzTmFOKGEuZGVsdGFYKT8tMSphLndo'@;
put 'ZWVsRGVsdGFYOmEuZGVsdGFYOzE9PT1hLmRlbHRhTW9kZSYmKGQrPWQqdGhpcy5icm93c2VyTGluZUhlaWdodCxmKz1mKnRoaXMuYnJvd3NlckxpbmVIZWlnaHQpO3ZhciBoPXRoaXMuc2Nyb2xsVmVydGljYWxseShmKSxtPXRoaXMuc2Nyb2xsSG9yaXpvbnRhbGx5KGQpO3JldHVybiBofHxt'@;
put 'fX0se2tleToic2Nyb2xsVmVydGljYWxseSIsdmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGY9dGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxUb3A7cmV0dXJuIHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wKz1hLGYhPT10aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbFRvcH19'@;
put 'LHtrZXk6InNjcm9sbEhvcml6b250YWxseSIsdmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGY9dGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxMZWZ0O3JldHVybiB0aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbExlZnQrPWEsZiE9PXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsTGVm'@;
put 'dH19LHtrZXk6InN5bmNTY3JvbGxQb3NpdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuZGVzdHJveWVkKXt2YXIgYT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3csZj10aGlzLnRvcE92ZXJsYXkuY2xvbmUud3RUYWJsZS5ob2xkZXIsZD10aGlzLmlubGluZVN0YXJ0T3Zlcmxh'@;
put 'eS5jbG9uZS53dFRhYmxlLmhvbGRlcixoPVt0aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbExlZnQsdGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxUb3BdLG09aFswXSxfPWhbMV07aWYodGhpcy5ob3Jpem9udGFsU2Nyb2xsaW5nPWYuc2Nyb2xsTGVmdCE9PW18fHRoaXMubGFzdFNj'@;
put 'cm9sbFghPT1hLnNjcm9sbFgsdGhpcy52ZXJ0aWNhbFNjcm9sbGluZz1kLnNjcm9sbFRvcCE9PV98fHRoaXMubGFzdFNjcm9sbFkhPT1hLnNjcm9sbFksdGhpcy5sYXN0U2Nyb2xsWD1hLnNjcm9sbFgsdGhpcy5sYXN0U2Nyb2xsWT1hLnNjcm9sbFksdGhpcy5ob3Jpem9udGFsU2Nyb2xsaW5n'@;
put 'KXtmLnNjcm9sbExlZnQ9bTt2YXIgTz10aGlzLmJvdHRvbU92ZXJsYXkubmVlZEZ1bGxSZW5kZXI/dGhpcy5ib3R0b21PdmVybGF5LmNsb25lLnd0VGFibGUuaG9sZGVyOm51bGw7TyYmKE8uc2Nyb2xsTGVmdD1tKX10aGlzLnZlcnRpY2FsU2Nyb2xsaW5nJiYoZC5zY3JvbGxUb3A9XyksdGhp'@;
put 'cy5yZWZyZXNoQWxsKCl9fX0se2tleToic3luY1Njcm9sbFdpdGhNYXN0ZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy50b3BPdmVybGF5Lm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LGY9YS5zY3JvbGxMZWZ0LGQ9YS5zY3JvbGxUb3A7dGhpcy50b3BPdmVybGF5Lm5lZWRGdWxs'@;
put 'UmVuZGVyJiYodGhpcy50b3BPdmVybGF5LmNsb25lLnd0VGFibGUuaG9sZGVyLnNjcm9sbExlZnQ9ZiksdGhpcy5ib3R0b21PdmVybGF5Lm5lZWRGdWxsUmVuZGVyJiYodGhpcy5ib3R0b21PdmVybGF5LmNsb25lLnd0VGFibGUuaG9sZGVyLnNjcm9sbExlZnQ9ZiksdGhpcy5pbmxpbmVTdGFy'@;
put 'dE92ZXJsYXkubmVlZEZ1bGxSZW5kZXImJih0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5jbG9uZS53dFRhYmxlLmhvbGRlci5zY3JvbGxUb3A9ZCl9fSx7a2V5OiJ1cGRhdGVNYWluU2Nyb2xsYWJsZUVsZW1lbnRzIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZGVyZWdpc3Rlckxpc3RlbmVycygp'@;
put 'LHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LnVwZGF0ZU1haW5TY3JvbGxhYmxlRWxlbWVudCgpLHRoaXMudG9wT3ZlcmxheS51cGRhdGVNYWluU2Nyb2xsYWJsZUVsZW1lbnQoKSx0aGlzLmJvdHRvbU92ZXJsYXkubmVlZEZ1bGxSZW5kZXImJnRoaXMuYm90dG9tT3ZlcmxheS51cGRhdGVNYWlu'@;
put 'U2Nyb2xsYWJsZUVsZW1lbnQoKTt2YXIgYT10aGlzLnd0VGFibGU7dGhpcy5zY3JvbGxhYmxlRWxlbWVudD0iaGlkZGVuIj09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGEud3RSb290RWxlbWVudC5wYXJlbnROb2RlKS5nZXRQcm9wZXJ0eVZhbHVlKCJv'@;
put 'dmVyZmxvdyIpP2EuaG9sZGVyOlpTKGEuVEFCTEUpLHRoaXMucmVnaXN0ZXJMaXN0ZW5lcnMoKX19LHtrZXk6ImRlc3Ryb3kiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCksdGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveSgpLHRoaXMudG9wT3Zlcmxh'@;
put 'eS5kZXN0cm95KCksdGhpcy5ib3R0b21PdmVybGF5LmNsb25lJiZ0aGlzLmJvdHRvbU92ZXJsYXkuZGVzdHJveSgpLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LmRlc3Ryb3koKSx0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSYmdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJs'@;
put 'YXkuZGVzdHJveSgpLHRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5JiZ0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZSYmdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkuZGVzdHJveSgpLHRoaXMuZGVzdHJveWVkPSEwfX0se2tleToi'@;
put 'cmVmcmVzaCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO3RoaXMudXBkYXRlTGFzdFNwcmVhZGVyU2l6ZSgpJiZ0aGlzLmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMuYm90dG9tT3ZlcmxheS5j'@;
put 'bG9uZSYmdGhpcy5ib3R0b21PdmVybGF5LnJlZnJlc2goYSksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkucmVmcmVzaChhKSx0aGlzLnRvcE92ZXJsYXkucmVmcmVzaChhKSx0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSYmdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXku'@;
put 'cmVmcmVzaChhKSx0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSYmdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUmJnRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LnJlZnJlc2goYSl9fSx7a2V5OiJ1cGRhdGVMYXN0U3ByZWFkZXJT'@;
put 'aXplIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMud3RUYWJsZS5zcHJlYWRlcixmPWEuY2xpZW50V2lkdGgsZD1hLmNsaWVudEhlaWdodCxoPWYhPT10aGlzLnNwcmVhZGVyTGFzdFNpemUud2lkdGh8fGQhPT10aGlzLnNwcmVhZGVyTGFzdFNpemUuaGVpZ2h0O3JldHVybiBoJiYodGhp'@;
put 'cy5zcHJlYWRlckxhc3RTaXplLndpZHRoPWYsdGhpcy5zcHJlYWRlckxhc3RTaXplLmhlaWdodD1kKSxofX0se2tleToiYWRqdXN0RWxlbWVudHNTaXplIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBhPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNb'@;
put 'MF0sZj10aGlzLndvdC53dFZpZXdwb3J0LGQ9dGhpcy53dFRhYmxlLGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLG09dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLF89Zi5nZXRSb3dIZWFkZXJXaWR0aCgpLE89Zi5nZXRDb2x1bW5I'@;
put 'ZWFkZXJIZWlnaHQoKSxYPWQuaGlkZXIuc3R5bGU7aWYoWC53aWR0aD0iIi5jb25jYXQoXyt0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5zdW1DZWxsU2l6ZXMoMCxoKSwicHgiKSxYLmhlaWdodD0iIi5jb25jYXQoTyt0aGlzLnRvcE92ZXJsYXkuc3VtQ2VsbFNpemVzKDAsbSkrMSwicHgiKSx0'@;
put 'aGlzLnNjcm9sbGJhclNpemU+MCl7dmFyIGFlPWQud3RSb290RWxlbWVudCxwZT1hZS5zY3JvbGxIZWlnaHQsYmU9YWUuc2Nyb2xsV2lkdGgseGU9ZC5ob2xkZXIsWmU9eGUuc2Nyb2xsV2lkdGg7dGhpcy5oYXNTY3JvbGxiYXJSaWdodD1wZTx4ZS5zY3JvbGxIZWlnaHQsdGhpcy5oYXNTY3Jv'@;
put 'bGxiYXJCb3R0b209YmU8WmUsdGhpcy5oYXNTY3JvbGxiYXJSaWdodCYmZC5oaWRlci5zY3JvbGxXaWR0aCt0aGlzLnNjcm9sbGJhclNpemU+YmU/dGhpcy5oYXNTY3JvbGxiYXJCb3R0b209ITA6dGhpcy5oYXNTY3JvbGxiYXJCb3R0b20mJmQuaGlkZXIuc2Nyb2xsSGVpZ2h0K3RoaXMuc2Ny'@;
put 'b2xsYmFyU2l6ZT5wZSYmKHRoaXMuaGFzU2Nyb2xsYmFyUmlnaHQ9ITApfXRoaXMudG9wT3ZlcmxheS5hZGp1c3RFbGVtZW50c1NpemUoYSksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuYWRqdXN0RWxlbWVudHNTaXplKGEpLHRoaXMuYm90dG9tT3ZlcmxheS5hZGp1c3RFbGVtZW50c1NpemUo'@;
put 'YSl9fSx7a2V5OiJhcHBseVRvRE9NIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMud3RUYWJsZS5pc1Zpc2libGUoKSYmKHRoaXMudG9wT3ZlcmxheS5hcHBseVRvRE9NKCksdGhpcy5ib3R0b21PdmVybGF5LmNsb25lJiZ0aGlzLmJvdHRvbU92ZXJsYXkuYXBwbHlUb0RPTSgpLHRoaXMuaW5saW5l'@;
put 'U3RhcnRPdmVybGF5LmFwcGx5VG9ET00oKSl9fSx7a2V5OiJnZXRQYXJlbnRPdmVybGF5Iix2YWx1ZTpmdW5jdGlvbihhKXtpZighYSlyZXR1cm4gbnVsbDt2YXIgZD1udWxsO3JldHVybiBSbihbdGhpcy50b3BPdmVybGF5LHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LHRoaXMuYm90dG9tT3Zl'@;
put 'cmxheSx0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSx0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheV0sZnVuY3Rpb24oaCl7aCYmaC5jbG9uZSYmaC5jbG9uZS53dFRhYmxlLlRBQkxFLmNvbnRhaW5zKGEpJiYoZD1oLmNsb25lKX0pLGR9fSx7a2V5OiJzeW5jT3Zl'@;
put 'cmxheVRhYmxlQ2xhc3NOYW1lcyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnd0VGFibGUuVEFCTEU7Um4oW3RoaXMudG9wT3ZlcmxheSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheSx0aGlzLmJvdHRvbU92ZXJsYXksdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXksdGhpcy5i'@;
put 'b3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXldLGZ1bmN0aW9uKGQpe2QmJihkLmNsb25lLnd0VGFibGUuVEFCTEUuY2xhc3NOYW1lPWEuY2xhc3NOYW1lKX0pfX1dKSxsfSgpO2NvbnN0IG5ldD10ZXQ7ZnVuY3Rpb24ga00obCl7cmV0dXJuKGtNPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1i'@;
put 'b2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1i'@;
put 'b2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24geWZlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5l'@;
put 'UHJvcGVydHkobCxfZmUoZi5rZXkpLGYpfX1mdW5jdGlvbiBiZmUobCxjLGEpe3JldHVybihjPV9mZShjKSlpbiBsP09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLGMse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpsW2NdPWEsbH1mdW5jdGlvbiBf'@;
put 'ZmUobCl7dmFyIGM9ZnVuY3Rpb24gb2V0KGwsYyl7aWYoIm9iamVjdCIhPT1rTShsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1rTShmKSlyZXR1'@;
put 'cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09a00oYyk/YzpTdHJpbmcoYyl9dmFyIGFl'@;
put 'dD1mdW5jdGlvbigpe2Z1bmN0aW9uIGwoYyl7dmFyIGE9dGhpczsoZnVuY3Rpb24gcmV0KGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLGwpLGJmZSh0aGlzLCJzZXR0aW5ncyIs'@;
put 'e30pLGJmZSh0aGlzLCJkZWZhdWx0cyIsT2JqZWN0LmZyZWV6ZSh0aGlzLmdldERlZmF1bHRzKCkpKSxtYSh0aGlzLmRlZmF1bHRzLGZ1bmN0aW9uKGYsZCl7aWYodm9pZCAwIT09Y1tkXSlhLnNldHRpbmdzW2RdPWNbZF07ZWxzZXtpZih2b2lkIDA9PT1mKXRocm93IG5ldyBFcnJvcignQSBy'@;
put 'ZXF1aXJlZCBzZXR0aW5nICInLmNvbmNhdChkLCciIHdhcyBub3QgcHJvdmlkZWQnKSk7YS5zZXR0aW5nc1tkXT1mfX0pfXJldHVybiBmdW5jdGlvbiBpZXQobCxjLGEpe2MmJnlmZShsLnByb3RvdHlwZSxjKSxhJiZ5ZmUobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBl'@;
put 'Iix7d3JpdGFibGU6ITF9KX0obCxbe2tleToiZ2V0RGVmYXVsdHMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcztyZXR1cm57ZmFjYWRlOnZvaWQgMCx0YWJsZTp2b2lkIDAsaXNEYXRhVmlld0luc3RhbmNlOiEwLGV4dGVybmFsUm93Q2FsY3VsYXRvcjohMSxzdHJldGNoSDoibm9uZSIs'@;
put 'Y3VycmVudFJvd0NsYXNzTmFtZTpudWxsLGN1cnJlbnRDb2x1bW5DbGFzc05hbWU6bnVsbCxwcmV2ZW50T3ZlcmZsb3c6ZnVuY3Rpb24oKXtyZXR1cm4hMX0scHJldmVudFdoZWVsOiExLGRhdGE6dm9pZCAwLGZyZWV6ZU92ZXJsYXlzOiExLGZpeGVkQ29sdW1uc1N0YXJ0OjAsZml4ZWRSb3dz'@;
put 'VG9wOjAsZml4ZWRSb3dzQm90dG9tOjAsc2hvdWxkUmVuZGVySW5saW5lU3RhcnRPdmVybGF5OmZ1bmN0aW9uKCl7cmV0dXJuIGEuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKT4wfHxhLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKS5sZW5ndGg+MH0sc2hvdWxkUmVuZGVyVG9wT3Zl'@;
put 'cmxheTpmdW5jdGlvbigpe3JldHVybiBhLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpPjB8fGEuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aD4wfSxzaG91bGRSZW5kZXJCb3R0b21PdmVybGF5OmZ1bmN0aW9uKCl7cmV0dXJuIGEuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90'@;
put 'dG9tIik+MH0sbWluU3BhcmVSb3dzOjAscm93SGVhZGVyczpmdW5jdGlvbigpe3JldHVybltdfSxjb2x1bW5IZWFkZXJzOmZ1bmN0aW9uKCl7cmV0dXJuW119LHRvdGFsUm93czp2b2lkIDAsdG90YWxDb2x1bW5zOnZvaWQgMCxjZWxsUmVuZGVyZXI6ZnVuY3Rpb24oZCxoLG0pe080KG0sYS5n'@;
put 'ZXRTZXR0aW5nKCJkYXRhIixkLGgpPz8iIil9LGNvbHVtbldpZHRoOmZ1bmN0aW9uKCl7fSxyb3dIZWlnaHQ6ZnVuY3Rpb24oKXt9LGRlZmF1bHRSb3dIZWlnaHQ6MjMsZGVmYXVsdENvbHVtbldpZHRoOjUwLHNlbGVjdGlvbnM6bnVsbCxoaWRlQm9yZGVyT25Nb3VzZURvd25PdmVyOiExLHZp'@;
put 'ZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlOm51bGwsdmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGU6bnVsbCxvbkNlbGxNb3VzZURvd246bnVsbCxvbkNlbGxDb250ZXh0TWVudTpudWxsLG9uQ2VsbE1vdXNlT3ZlcjpudWxsLG9uQ2VsbE1vdXNlT3V0Om51bGwsb25DZWxsTW91'@;
put 'c2VVcDpudWxsLG9uQ2VsbERibENsaWNrOm51bGwsb25DZWxsQ29ybmVyTW91c2VEb3duOm51bGwsb25DZWxsQ29ybmVyRGJsQ2xpY2s6bnVsbCxiZWZvcmVEcmF3Om51bGwsb25EcmF3Om51bGwsb25CZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lczpudWxsLG9uQWZ0ZXJEcmF3U2VsZWN0aW9u'@;
put 'Om51bGwsb25CZWZvcmVEcmF3Qm9yZGVyczpudWxsLG9uU2Nyb2xsVmVydGljYWxseTpudWxsLG9uU2Nyb2xsSG9yaXpvbnRhbGx5Om51bGwsb25CZWZvcmVUb3VjaFNjcm9sbDpudWxsLG9uQWZ0ZXJNb21lbnR1bVNjcm9sbDpudWxsLG9uQmVmb3JlU3RyZXRjaGluZ0NvbHVtbldpZHRoOmZ1'@;
put 'bmN0aW9uKGQpe3JldHVybiBkfSxvbk1vZGlmeVJvd0hlYWRlcldpZHRoOm51bGwsb25Nb2RpZnlHZXRDZWxsQ29vcmRzOm51bGwsb25CZWZvcmVIaWdobGlnaHRpbmdSb3dIZWFkZXI6ZnVuY3Rpb24oZCl7cmV0dXJuIGR9LG9uQmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyOmZ1bmN0'@;
put 'aW9uKGQpe3JldHVybiBkfSxvbldpbmRvd1Jlc2l6ZTpudWxsLG9uQ29udGFpbmVyRWxlbWVudFJlc2l6ZTpudWxsLHJlbmRlckFsbFJvd3M6ITEsZ3JvdXBzOiExLHJvd0hlYWRlcldpZHRoOm51bGwsY29sdW1uSGVhZGVySGVpZ2h0Om51bGwsaGVhZGVyQ2xhc3NOYW1lOm51bGwscnRsTW9k'@;
put 'ZTohMX19fSx7a2V5OiJ1cGRhdGUiLHZhbHVlOmZ1bmN0aW9uKGEsZil7dmFyIGQ9dGhpcztyZXR1cm4gdm9pZCAwPT09Zj9tYShhLGZ1bmN0aW9uKGgsbSl7ZC5zZXR0aW5nc1ttXT1ofSk6dGhpcy5zZXR0aW5nc1thXT1mLHRoaXN9fSx7a2V5OiJnZXRTZXR0aW5nIix2YWx1ZTpmdW5jdGlv'@;
put 'bihhLGYsZCxoLG0pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnNldHRpbmdzW2FdP3RoaXMuc2V0dGluZ3NbYV0oZixkLGgsbSk6dm9pZCAwIT09ZiYmQXJyYXkuaXNBcnJheSh0aGlzLnNldHRpbmdzW2FdKT90aGlzLnNldHRpbmdzW2FdW2ZdOnRoaXMuc2V0dGluZ3NbYV19fSx7'@;
put 'a2V5OiJnZXRTZXR0aW5nUHVyZSIsdmFsdWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuc2V0dGluZ3NbYV19fSx7a2V5OiJoYXMiLHZhbHVlOmZ1bmN0aW9uKGEpe3JldHVybiEhdGhpcy5zZXR0aW5nc1thXX19XSksbH0oKTtmdW5jdGlvbiB1OShsKXtyZXR1cm4odTk9ImZ1bmN0aW9uIj09'@;
put 'dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90'@;
put 'b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiB3ZmUobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9i'@;
put 'amVjdC5kZWZpbmVQcm9wZXJ0eShsLGNldChmLmtleSksZil9fWZ1bmN0aW9uIGNldChsKXt2YXIgYz1mdW5jdGlvbiBmZXQobCxjKXtpZigib2JqZWN0IiE9PXU5KGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9'@;
put 'YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PXU5KGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3Ry'@;
put 'aW5nIik7cmV0dXJuInN5bWJvbCI9PT11OShjKT9jOlN0cmluZyhjKX1mdW5jdGlvbiB4VyhsLGMpe3JldHVybih4Vz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihmLGQpe3JldHVybiBmLl9fcHJvdG9fXz1kLGZ9KShsLGMpfWZ1'@;
put 'bmN0aW9uIEhSKGwpe3JldHVybihIUj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihhKXtyZXR1cm4gYS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihhKX0pKGwpfXZhciBBVz1mdW5jdGlvbihsKXshZnVuY3Rpb24g'@;
put 'ZGV0KGwsYyl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGMmJm51bGwhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7bC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShjJiZjLnByb3RvdHlwZSx7Y29uc3Ry'@;
put 'dWN0b3I6e3ZhbHVlOmwsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGMmJnhXKGwsYyl9KGEsbCk7dmFyIGM9ZnVuY3Rpb24gaGV0KGwpe3ZhciBjPWZ1bmN0aW9uIGdldCgpe2lmKHR5cGVv'@;
put 'ZiBSZWZsZWN0PiJ1Inx8IVJlZmxlY3QuY29uc3RydWN0fHxSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChC'@;
put 'b29sZWFuLFtdLGZ1bmN0aW9uKCl7fSkpLCEwfWNhdGNoe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZCxmPUhSKGwpO2lmKGMpe3ZhciBoPUhSKHRoaXMpLmNvbnN0cnVjdG9yO2Q9UmVmbGVjdC5jb25zdHJ1Y3QoZixhcmd1bWVudHMsaCl9ZWxzZSBkPWYuYXBwbHkodGhp'@;
put 'cyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbiBwZXQobCxjKXtpZihjJiYoIm9iamVjdCI9PT11OShjKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGMpKXJldHVybiBjO2lmKHZvaWQgMCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJu'@;
put 'IG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24gbWV0KGwpe2lmKHZvaWQgMD09PWwpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gbH0obCl9KHRoaXMs'@;
put 'ZCl9fShhKTtmdW5jdGlvbiBhKGYsZCxoLG0pe3JldHVybiBmdW5jdGlvbiBzZXQobCxjKXtpZighKGwgaW5zdGFuY2VvZiBjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxhKSxjLmNhbGwodGhpcyxmLGQsaCxtLCJtYXN0'@;
put 'ZXIiKX1yZXR1cm4gZnVuY3Rpb24gdWV0KGwsYyxhKXtjJiZ3ZmUobC5wcm90b3R5cGUsYyksYSYmd2ZlKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGEsW3trZXk6ImFsaWduT3ZlcmxheXNXaXRoVHJpbW1pbmdDb250YWluZXIiLHZh'@;
put 'bHVlOmZ1bmN0aW9uKCl7dmFyIGQ9YjUodGhpcy53dFJvb3RFbGVtZW50KSxoPXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdztpZihkPT09aCl0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iil8fCh0aGlzLmhvbGRlci5zdHlsZS5vdmVyZmxvdz0idmlzaWJs'@;
put 'ZSIsdGhpcy53dFJvb3RFbGVtZW50LnN0eWxlLm92ZXJmbG93PSJ2aXNpYmxlIik7ZWxzZXt2YXIgXz1kLnBhcmVudEVsZW1lbnQsTz1CNyhkLCJoZWlnaHQiLGgpLFg9QjcoZCwib3ZlcmZsb3ciLGgpLGFlPXRoaXMuaG9sZGVyLnN0eWxlLHBlPWQuc2Nyb2xsV2lkdGgsYmU9ZC5zY3JvbGxI'@;
put 'ZWlnaHQseGU9ZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxWZT14ZS53aWR0aCxaZT14ZS5oZWlnaHQ7aWYoXyYmWyJhdXRvIiwiaGlkZGVuIiwic2Nyb2xsIl0uaW5jbHVkZXMoWCkpe3ZhciBkdD1kLmNsb25lTm9kZSghMSk7ZHQuc3R5bGUub3ZlcmZsb3c9ImF1dG8iLGR0LnN0eWxlLnBv'@;
put 'c2l0aW9uPSJhYnNvbHV0ZSIsZC5uZXh0RWxlbWVudFNpYmxpbmc/Xy5pbnNlcnRCZWZvcmUoZHQsZC5uZXh0RWxlbWVudFNpYmxpbmcpOl8uYXBwZW5kQ2hpbGQoZHQpO3ZhciBndD1wYXJzZUludChENChkdCxoKS5oZWlnaHQsMTApO18ucmVtb3ZlQ2hpbGQoZHQpLDA9PT1ndCYmKFplPTAp'@;
put 'fVplPU1hdGgubWluKFplLGJlKSxhZS5oZWlnaHQ9ImF1dG8iPT09Tz8iYXV0byI6IiIuY29uY2F0KFplLCJweCIpLFZlPU1hdGgubWluKFZlLHBlKSxhZS53aWR0aD0iIi5jb25jYXQoVmUsInB4IiksYWUub3ZlcmZsb3c9IiIsdGhpcy5oYXNUYWJsZUhlaWdodD0iYXV0byI9PT1hZS5oZWln'@;
put 'aHR8fFplPjAsdGhpcy5oYXNUYWJsZVdpZHRoPVZlPjB9dGhpcy5pc1RhYmxlVmlzaWJsZT1ONyh0aGlzLlRBQkxFKX19LHtrZXk6Im1hcmtPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXMud3RTZXR0aW5ncyxoPXRoaXMuZGF0YUFjY2Vzc09iamVj'@;
put 'dC53dFZpZXdwb3J0LG09Im1hc3RlciIsTz1kLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGg7aWYoTyYmIWguaGFzT3ZlcnNpemVkQ29sdW1uSGVhZGVyc01hcmtlZFttXSl7Zm9yKHZhciBhZT1kLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKS5sZW5ndGgscGU9dGhpcy5nZXRS'@;
put 'ZW5kZXJlZENvbHVtbnNDb3VudCgpLGJlPTA7YmU8TztiZSsrKWZvcih2YXIgeGU9LTEqYWU7eGU8cGU7eGUrKyl0aGlzLm1hcmtJZk92ZXJzaXplZENvbHVtbkhlYWRlcih4ZSk7aC5oYXNPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzTWFya2VkW21dPSEwfX19XSksYX0oWDcpO1RsKEFXLHJmZSks'@;
put 'VGwoQVcsc1cpO2NvbnN0IHZldD1BVztmdW5jdGlvbiBFTShsKXtyZXR1cm4oRU09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0'@;
put 'aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiBDZmUobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVt'@;
put 'ZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLF9ldChmLmtleSksZil9fWZ1bmN0aW9uIF9ldChsKXt2YXIgYz1mdW5jdGlvbiB3ZXQobCxjKXtpZigib2JqZWN0IiE9PUVNKGwpfHxudWxsPT09'@;
put 'bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PUVNKGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmlt'@;
put 'aXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1FTShjKT9jOlN0cmluZyhjKX12YXIgU2ZlPW5ldyBXZWFrTWFwLENldD1mdW5jdGlvbigpe2Z1bmN0aW9uIGwoKXt2YXIgYz1hcmd1bWVudHMu'@;
put 'bGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sYT1jLnZpZXdwb3J0U2l6ZSxmPWMuc2Nyb2xsT2Zmc2V0LGQ9Yy50b3RhbEl0ZW1zLGg9Yy5pdGVtU2l6ZUZuLG09Yy5vdmVycmlkZUZuLF89Yy5jYWxjdWxhdGlvblR5cGUsTz1jLnNjcm9sbGJhckhlaWdo'@;
put 'dDsoZnVuY3Rpb24geWV0KGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLGwpLFNmZS5zZXQodGhpcyx7dmlld3BvcnRIZWlnaHQ6YSxzY3JvbGxPZmZzZXQ6Zix0b3RhbFJvd3M6'@;
put 'ZCxyb3dIZWlnaHRGbjpoLG92ZXJyaWRlRm46bSxjYWxjdWxhdGlvblR5cGU6Xyxob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0Ok99KSx0aGlzLmNvdW50PTAsdGhpcy5zdGFydFJvdz1udWxsLHRoaXMuZW5kUm93PW51bGwsdGhpcy5zdGFydFBvc2l0aW9uPW51bGwsdGhpcy5pc1Zpc2libGVJ'@;
put 'blRyaW1taW5nQ29udGFpbmVyPSExLHRoaXMuY2FsY3VsYXRlKCl9cmV0dXJuIGZ1bmN0aW9uIGJldChsLGMsYSl7YyYmQ2ZlKGwucHJvdG90eXBlLGMpLGEmJkNmZShsLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShsLFt7a2V5OiJjYWxj'@;
put 'dWxhdGUiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBWZSxhPVNmZS5nZXQodGhpcyksZj1hLmNhbGN1bGF0aW9uVHlwZSxkPWEub3ZlcnJpZGVGbixoPWEucm93SGVpZ2h0Rm4sbT1hLnNjcm9sbE9mZnNldCxfPU1hdGgubWF4KGEuc2Nyb2xsT2Zmc2V0LDApLE89YS50b3RhbFJvd3MsWD1h'@;
put 'LnZpZXdwb3J0SGVpZ2h0LGFlPWEuaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodHx8MCxwZT0wLGJlPSEwLHhlPVtdLFplPTAsbHQ9MCxkdD0wO2R0PE87ZHQrKylpZihWZT1oKGR0KSxpc05hTihWZSkmJihWZT1sLkRFRkFVTFRfSEVJR0hUKSxwZTw9XyYmMiE9PWYmJih0aGlzLnN0YXJ0Um93'@;
put 'PWR0LFplPVZlKSxwZT49XyYmcGUrKDI9PT1mP1ZlOjApPD1fK1gtYWUmJihudWxsPT09dGhpcy5zdGFydFJvdyYmKHRoaXMuc3RhcnRSb3c9ZHQsWmU9VmUpLHRoaXMuZW5kUm93PWR0KSx4ZS5wdXNoKHBlKSxwZSs9VmUsbHQ9VmUsMiE9PWYmJih0aGlzLmVuZFJvdz1kdCkscGU+PV8rWC1h'@;
put 'ZSl7YmU9ITE7YnJlYWt9dmFyIHJuPTI9PT1mPzA6bHQ7aWYodGhpcy5pc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyPSEobStYLWFlPCgyPT09Zj9aZTowKXx8bT54ZS5hdCgtMSkrcm4pLHRoaXMuZW5kUm93PT09Ty0xJiZiZSlmb3IodGhpcy5zdGFydFJvdz10aGlzLmVuZFJvdzt0aGlz'@;
put 'LnN0YXJ0Um93PjA7KXt2YXIgWHQ9eGVbdGhpcy5lbmRSb3ddK1ZlLXhlW3RoaXMuc3RhcnRSb3ctMV07aWYoKFh0PD1YLWFlfHwyIT09ZikmJih0aGlzLnN0YXJ0Um93LT0xKSxYdD49WC1hZSlicmVha30xPT09ZiYmbnVsbCE9PXRoaXMuc3RhcnRSb3cmJmQmJmQodGhpcyksdGhpcy5zdGFy'@;
put 'dFBvc2l0aW9uPXhlW3RoaXMuc3RhcnRSb3ddLHZvaWQgMD09PXRoaXMuc3RhcnRQb3NpdGlvbiYmKHRoaXMuc3RhcnRQb3NpdGlvbj1udWxsKSxPPHRoaXMuZW5kUm93JiYodGhpcy5lbmRSb3c9Ty0xKSxudWxsIT09dGhpcy5zdGFydFJvdyYmKHRoaXMuY291bnQ9dGhpcy5lbmRSb3ctdGhp'@;
put 'cy5zdGFydFJvdysxKX19XSxbe2tleToiREVGQVVMVF9IRUlHSFQiLGdldDpmdW5jdGlvbigpe3JldHVybiAyM319XSksbH0oKTtjb25zdCBNZmU9Q2V0O2Z1bmN0aW9uIHhNKGwpe3JldHVybih4TT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5p'@;
put 'dGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIGtm'@;
put 'ZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsRWV0KGYua2V5KSxmKX19ZnVu'@;
put 'Y3Rpb24gRWV0KGwpe3ZhciBjPWZ1bmN0aW9uIHhldChsLGMpe2lmKCJvYmplY3QiIT09eE0obCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09eE0o'@;
put 'ZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PXhNKGMpP2M6U3RyaW5nKGMp'@;
put 'fXZhciBjOT1uZXcgV2Vha01hcCxBZXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKCl7dmFyIGM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LGE9Yy52aWV3cG9ydFNpemUsZj1jLnNjcm9sbE9mZnNldCxkPWMudG90YWxJdGVtcyxoPWMu'@;
put 'aXRlbVNpemVGbixtPWMub3ZlcnJpZGVGbixfPWMuY2FsY3VsYXRpb25UeXBlLE89Yy5zdHJldGNoTW9kZSxYPWMuc3RyZXRjaGluZ0l0ZW1XaWR0aEZuLGFlPXZvaWQgMD09PVg/ZnVuY3Rpb24oYmUpe3JldHVybiBiZX06WCxwZT1jLmlubGluZVN0YXJ0T2Zmc2V0OyhmdW5jdGlvbiBNZXQo'@;
put 'bCxjKXtpZighKGwgaW5zdGFuY2VvZiBjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsbCksYzkuc2V0KHRoaXMse3ZpZXdwb3J0V2lkdGg6YSxzY3JvbGxPZmZzZXQ6Zix0b3RhbENvbHVtbnM6ZCxjb2x1bW5XaWR0aEZu'@;
put 'Omgsb3ZlcnJpZGVGbjptLGNhbGN1bGF0aW9uVHlwZTpfLHN0cmV0Y2hpbmdDb2x1bW5XaWR0aEZuOmFlLGlubGluZVN0YXJ0T2Zmc2V0OnBlfSksdGhpcy5jb3VudD0wLHRoaXMuc3RhcnRDb2x1bW49bnVsbCx0aGlzLmVuZENvbHVtbj1udWxsLHRoaXMuc3RhcnRQb3NpdGlvbj1udWxsLHRo'@;
put 'aXMuaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lcj0hMSx0aGlzLnN0cmV0Y2hBbGxSYXRpbz0wLHRoaXMuc3RyZXRjaExhc3RXaWR0aD0wLHRoaXMuc3RyZXRjaD1PLHRoaXMudG90YWxUYXJnZXRXaWR0aD0wLHRoaXMubmVlZFZlcmlmeUxhc3RDb2x1bW5XaWR0aD0hMCx0aGlzLnN0cmV0'@;
put 'Y2hBbGxDb2x1bW5zV2lkdGg9W10sdGhpcy5jYWxjdWxhdGUoKX1yZXR1cm4gZnVuY3Rpb24ga2V0KGwsYyxhKXtjJiZrZmUobC5wcm90b3R5cGUsYyksYSYma2ZlKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGwsW3trZXk6ImNhbGN1'@;
put 'bGF0ZSIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGgsYT0wLGY9ITAsZD1bXSxtPTAsXz0wLE89YzkuZ2V0KHRoaXMpLFg9Ty5jYWxjdWxhdGlvblR5cGUsYWU9Ty5vdmVycmlkZUZuLHBlPU8uc2Nyb2xsT2Zmc2V0LGJlPU1hdGgubWF4KE8uc2Nyb2xsT2Zmc2V0LDApLHhlPU8udG90YWxD'@;
put 'b2x1bW5zLFZlPU8udmlld3BvcnRXaWR0aCxaZT1iZT4wP1ZlKzE6VmUsbHQ9MDtsdDx4ZTtsdCsrKWlmKGg9dGhpcy5fZ2V0Q29sdW1uV2lkdGgobHQpLGE8PWJlJiYyIT09WCYmKHRoaXMuc3RhcnRDb2x1bW49bHQsbT1oKSxhPj1iZSYmYSsoMj09PVg/aDowKTw9YmUrWmUmJihudWxsPT10'@;
put 'aGlzLnN0YXJ0Q29sdW1uJiYodGhpcy5zdGFydENvbHVtbj1sdCxtPWgpLHRoaXMuZW5kQ29sdW1uPWx0KSxkLnB1c2goYSksYSs9aCxfPWgsMiE9PVgmJih0aGlzLmVuZENvbHVtbj1sdCksYT49YmUrVmUpe2Y9ITE7YnJlYWt9dmFyIGd0PTI9PT1YPzA6XyxqdD0yPT09WD9tOjA7aWYodGhp'@;
put 'cy5pc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyPSEocGUrVmUtWmU8LTEqTy5pbmxpbmVTdGFydE9mZnNldHx8cGU+ZC5hdCgtMSkrZ3R8fC0xKk8uc2Nyb2xsT2Zmc2V0LU8udmlld3BvcnRXaWR0aD4tMSpqdCksdGhpcy5lbmRDb2x1bW49PT14ZS0xJiZmKWZvcih0aGlzLnN0YXJ0Q29s'@;
put 'dW1uPXRoaXMuZW5kQ29sdW1uO3RoaXMuc3RhcnRDb2x1bW4+MDspe3ZhciBybj1kW3RoaXMuZW5kQ29sdW1uXStoLWRbdGhpcy5zdGFydENvbHVtbi0xXTtpZigocm48PVZlfHwyIT09WCkmJih0aGlzLnN0YXJ0Q29sdW1uLT0xKSxybj5WZSlicmVha30xPT09WCYmbnVsbCE9PXRoaXMuc3Rh'@;
put 'cnRDb2x1bW4mJmFlJiZhZSh0aGlzKSx0aGlzLnN0YXJ0UG9zaXRpb249ZFt0aGlzLnN0YXJ0Q29sdW1uXSx2b2lkIDA9PT10aGlzLnN0YXJ0UG9zaXRpb24mJih0aGlzLnN0YXJ0UG9zaXRpb249bnVsbCkseGU8dGhpcy5lbmRDb2x1bW4mJih0aGlzLmVuZENvbHVtbj14ZS0xKSxudWxsIT09'@;
put 'dGhpcy5zdGFydENvbHVtbiYmKHRoaXMuY291bnQ9dGhpcy5lbmRDb2x1bW4tdGhpcy5zdGFydENvbHVtbisxKX19LHtrZXk6InJlZnJlc2hTdHJldGNoaW5nIix2YWx1ZTpmdW5jdGlvbihhKXtpZigibm9uZSIhPT10aGlzLnN0cmV0Y2gpe3ZhciBmPWE7dGhpcy50b3RhbFRhcmdldFdpZHRo'@;
put 'PWY7Zm9yKHZhciBkPWM5LmdldCh0aGlzKSxoPWQudG90YWxDb2x1bW5zLG09MCxfPTA7XzxoO18rKyl7dmFyIE89dGhpcy5fZ2V0Q29sdW1uV2lkdGgoXyksWD1kLnN0cmV0Y2hpbmdDb2x1bW5XaWR0aEZuKHZvaWQgMCxfKTsibnVtYmVyIj09dHlwZW9mIFg/Zi09WDptKz1PfXZhciBhZT1m'@;
put 'LW07aWYoImFsbCI9PT10aGlzLnN0cmV0Y2gmJmFlPjApdGhpcy5zdHJldGNoQWxsUmF0aW89Zi9tLHRoaXMuc3RyZXRjaEFsbENvbHVtbnNXaWR0aD1bXSx0aGlzLm5lZWRWZXJpZnlMYXN0Q29sdW1uV2lkdGg9ITA7ZWxzZSBpZigibGFzdCI9PT10aGlzLnN0cmV0Y2gmJmYhPT0xLzApe3Zh'@;
put 'ciBwZT10aGlzLl9nZXRDb2x1bW5XaWR0aChoLTEpLGJlPWFlK3BlO3RoaXMuc3RyZXRjaExhc3RXaWR0aD1iZT49MD9iZTpwZX19fX0se2tleToiZ2V0U3RyZXRjaGVkQ29sdW1uV2lkdGgiLHZhbHVlOmZ1bmN0aW9uKGEsZil7dmFyIGQ9bnVsbDtyZXR1cm4iYWxsIj09PXRoaXMuc3RyZXRj'@;
put 'aCYmMCE9PXRoaXMuc3RyZXRjaEFsbFJhdGlvP2Q9dGhpcy5fZ2V0U3RyZXRjaGVkQWxsQ29sdW1uV2lkdGgoYSxmKToibGFzdCI9PT10aGlzLnN0cmV0Y2gmJjAhPT10aGlzLnN0cmV0Y2hMYXN0V2lkdGgmJihkPXRoaXMuX2dldFN0cmV0Y2hlZExhc3RDb2x1bW5XaWR0aChhKSksZH19LHtr'@;
put 'ZXk6Il9nZXRTdHJldGNoZWRBbGxDb2x1bW5XaWR0aCIsdmFsdWU6ZnVuY3Rpb24oYSxmKXt2YXIgZD0wLGg9YzkuZ2V0KHRoaXMpLG09aC50b3RhbENvbHVtbnM7aWYoIXRoaXMuc3RyZXRjaEFsbENvbHVtbnNXaWR0aFthXSl7dmFyIF89TWF0aC5yb3VuZChmKnRoaXMuc3RyZXRjaEFsbFJh'@;
put 'dGlvKSxPPWguc3RyZXRjaGluZ0NvbHVtbldpZHRoRm4oXyxhKTt0aGlzLnN0cmV0Y2hBbGxDb2x1bW5zV2lkdGhbYV09dm9pZCAwPT09Tz9fOmlzTmFOKE8pP3RoaXMuX2dldENvbHVtbldpZHRoKGEpOk99aWYodGhpcy5zdHJldGNoQWxsQ29sdW1uc1dpZHRoLmxlbmd0aD09PW0mJnRoaXMu'@;
put 'bmVlZFZlcmlmeUxhc3RDb2x1bW5XaWR0aCl7dGhpcy5uZWVkVmVyaWZ5TGFzdENvbHVtbldpZHRoPSExO2Zvcih2YXIgWD0wO1g8dGhpcy5zdHJldGNoQWxsQ29sdW1uc1dpZHRoLmxlbmd0aDtYKyspZCs9dGhpcy5zdHJldGNoQWxsQ29sdW1uc1dpZHRoW1hdO2QhPT10aGlzLnRvdGFsVGFy'@;
put 'Z2V0V2lkdGgmJih0aGlzLnN0cmV0Y2hBbGxDb2x1bW5zV2lkdGhbdGhpcy5zdHJldGNoQWxsQ29sdW1uc1dpZHRoLmxlbmd0aC0xXSs9dGhpcy50b3RhbFRhcmdldFdpZHRoLWQpfXJldHVybiB0aGlzLnN0cmV0Y2hBbGxDb2x1bW5zV2lkdGhbYV19fSx7a2V5OiJfZ2V0U3RyZXRjaGVkTGFz'@;
put 'dENvbHVtbldpZHRoIix2YWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gYT09PWM5LmdldCh0aGlzKS50b3RhbENvbHVtbnMtMT90aGlzLnN0cmV0Y2hMYXN0V2lkdGg6bnVsbH19LHtrZXk6Il9nZXRDb2x1bW5XaWR0aCIsdmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGY9YzkuZ2V0KHRoaXMpLmNvbHVt'@;
put 'bldpZHRoRm4oYSk7cmV0dXJuIGlzTmFOKGYpJiYoZj1sLkRFRkFVTFRfV0lEVEgpLGZ9fV0sW3trZXk6IkRFRkFVTFRfV0lEVEgiLGdldDpmdW5jdGlvbigpe3JldHVybiA1MH19XSksbH0oKTtjb25zdCBUVz1BZXQ7ZnVuY3Rpb24gQU0obCl7cmV0dXJuKEFNPSJmdW5jdGlvbiI9PXR5cGVv'@;
put 'ZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBl'@;
put 'PyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gRWZlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3Qu'@;
put 'ZGVmaW5lUHJvcGVydHkobCxEZXQoZi5rZXkpLGYpfX1mdW5jdGlvbiBEZXQobCl7dmFyIGM9ZnVuY3Rpb24gSWV0KGwsYyl7aWYoIm9iamVjdCIhPT1BTShsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2Fs'@;
put 'bChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1BTShmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIp'@;
put 'O3JldHVybiJzeW1ib2wiPT09QU0oYyk/YzpTdHJpbmcoYyl9dmFyIFJldD1mdW5jdGlvbigpe2Z1bmN0aW9uIGwoYyxhLGYsZCxoKXt2YXIgbT10aGlzOyhmdW5jdGlvbiBUZXQobCxjKXtpZighKGwgaW5zdGFuY2VvZiBjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNs'@;
put 'YXNzIGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsbCksdGhpcy5kYXRhQWNjZXNzT2JqZWN0PWMsdGhpcy53b3Q9Yy53b3QsdGhpcy5pbnN0YW5jZT10aGlzLndvdCx0aGlzLmRvbUJpbmRpbmdzPWEsdGhpcy53dFNldHRpbmdzPWYsdGhpcy53dFRhYmxlPWgsdGhpcy5vdmVyc2l6ZWRSb3dzPVtd'@;
put 'LHRoaXMub3ZlcnNpemVkQ29sdW1uSGVhZGVycz1bXSx0aGlzLmhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWQ9e30sdGhpcy5jbGllbnRIZWlnaHQ9MCx0aGlzLmNvbnRhaW5lcldpZHRoPU5hTix0aGlzLnJvd0hlYWRlcldpZHRoPU5hTix0aGlzLnJvd3NWaXNpYmxlQ2FsY3VsYXRv'@;
put 'cj1udWxsLHRoaXMuY29sdW1uc1Zpc2libGVDYWxjdWxhdG9yPW51bGwsdGhpcy5ldmVudE1hbmFnZXI9ZCx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdywicmVzaXplIixmdW5jdGlvbigpe20uY2xpZW50SGVpZ2h0PW0uZ2V0'@;
put 'V29ya3NwYWNlSGVpZ2h0KCl9KX1yZXR1cm4gZnVuY3Rpb24gT2V0KGwsYyxhKXtjJiZFZmUobC5wcm90b3R5cGUsYyksYSYmRWZlKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGwsW3trZXk6ImdldFdvcmtzcGFjZUhlaWdodCIsdmFs'@;
put 'dWU6ZnVuY3Rpb24oKXt2YXIgZj10aGlzLmRhdGFBY2Nlc3NPYmplY3QudG9wT3ZlcmxheVRyaW1taW5nQ29udGFpbmVyO3JldHVybiBmPT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93P3RoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWln'@;
put 'aHQ6Y3MoZik+MCYmZi5jbGllbnRIZWlnaHQ+MD9mLmNsaWVudEhlaWdodDoxLzB9fSx7a2V5OiJnZXRXb3Jrc3BhY2VXaWR0aCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgVmUsWmUsYT10aGlzLnd0U2V0dGluZ3MsZj10aGlzLmRvbUJpbmRpbmdzLGQ9Zi5yb290RG9jdW1lbnQsaD1mLnJvb3RX'@;
put 'aW5kb3csbT10aGlzLmRhdGFBY2Nlc3NPYmplY3QuaW5saW5lU3RhcnRPdmVybGF5VHJpbW1pbmdDb250YWluZXIsXz1kLmRvY3VtZW50RWxlbWVudC5vZmZzZXRXaWR0aCxPPWEuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIiksWD1hLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpLGFl'@;
put 'PWEuZ2V0U2V0dGluZygicnRsTW9kZSIpLHBlPXRoaXMud3RUYWJsZS5UQUJMRS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx4ZT1fLShhZT9wZS5yaWdodC1fOnBlLmxlZnQpO2lmKFgpcmV0dXJuIFNsKHRoaXMud3RUYWJsZS53dFJvb3RFbGVtZW50KTtpZihWZT1hLmdldFNldHRpbmcoImZy'@;
put 'ZWV6ZU92ZXJsYXlzIik/TWF0aC5taW4oeGUsXyk6TWF0aC5taW4odGhpcy5nZXRDb250YWluZXJGaWxsV2lkdGgoKSx4ZSxfKSxtPT09aCYmTz4wJiZ0aGlzLnN1bUNvbHVtbldpZHRocygwLE8tMSk+VmUpcmV0dXJuIGQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO2lmKG0hPT1oJiYo'@;
put 'InNjcm9sbCI9PT0oWmU9QjcodGhpcy5kYXRhQWNjZXNzT2JqZWN0LmlubGluZVN0YXJ0T3ZlcmxheVRyaW1taW5nQ29udGFpbmVyLCJvdmVyZmxvdyIsaCkpfHwiaGlkZGVuIj09PVplfHwiYXV0byI9PT1aZSkpcmV0dXJuIE1hdGgubWF4KFZlLG0uY2xpZW50V2lkdGgpO3ZhciBsdD1hLmdl'@;
put 'dFNldHRpbmcoInN0cmV0Y2hIIik7cmV0dXJuIm5vbmUiIT09bHQmJmx0P1ZlOk1hdGgubWF4KFZlLFNsKHRoaXMud3RUYWJsZS5UQUJMRSkpfX0se2tleToiaGFzVmVydGljYWxTY3JvbGwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud3RUYWJsZS5oaWRlci5vZmZzZXRIZWlnaHQ+'@;
put 'dGhpcy5nZXRXb3Jrc3BhY2VIZWlnaHQoKX19LHtrZXk6Imhhc0hvcml6b250YWxTY3JvbGwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud3RUYWJsZS5oaWRlci5vZmZzZXRXaWR0aD50aGlzLmdldFdvcmtzcGFjZVdpZHRoKCl9fSx7a2V5OiJzdW1Db2x1bW5XaWR0aHMiLHZhbHVl'@;
put 'OmZ1bmN0aW9uKGEsZil7Zm9yKHZhciBkPTAsaD1hO2g8ZjspZCs9dGhpcy53dFRhYmxlLmdldENvbHVtbldpZHRoKGgpLGgrPTE7cmV0dXJuIGR9fSx7a2V5OiJnZXRDb250YWluZXJGaWxsV2lkdGgiLHZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5jb250YWluZXJXaWR0aClyZXR1cm4gdGhp'@;
put 'cy5jb250YWluZXJXaWR0aDt2YXIgYT10aGlzLnd0VGFibGUuaG9sZGVyLGY9dGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Zi5zdHlsZS53aWR0aD0iMTAwJSIsZi5zdHlsZS5oZWlnaHQ9IjFweCIsYS5hcHBlbmRDaGlsZChmKTt2YXIgZD1mLm9m'@;
put 'ZnNldFdpZHRoO3JldHVybiB0aGlzLmNvbnRhaW5lcldpZHRoPWQsYS5yZW1vdmVDaGlsZChmKSxkfX0se2tleToiZ2V0V29ya3NwYWNlT2Zmc2V0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBpdSh0aGlzLnd0VGFibGUuVEFCTEUpfX0se2tleToiZ2V0Q29sdW1uSGVhZGVySGVpZ2h0Iix2'@;
put 'YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aD9pc05hTih0aGlzLmNvbHVtbkhlYWRlckhlaWdodCkmJih0aGlzLmNvbHVtbkhlYWRlckhlaWdodD1jcyh0aGlzLnd0VGFibGUuVEhFQUQpKTp0aGlzLmNvbHVt'@;
put 'bkhlYWRlckhlaWdodD0wLHRoaXMuY29sdW1uSGVhZGVySGVpZ2h0fX0se2tleToiZ2V0Vmlld3BvcnRIZWlnaHQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRXb3Jrc3BhY2VIZWlnaHQoKTtpZihhPT09MS8wKXJldHVybiBhO3ZhciBmPXRoaXMuZ2V0Q29sdW1uSGVhZGVySGVp'@;
put 'Z2h0KCk7cmV0dXJuIGY+MCYmKGEtPWYpLGF9fSx7a2V5OiJnZXRSb3dIZWFkZXJXaWR0aCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVhZGVyV2lkdGgiKSxmPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIik7'@;
put 'aWYoYSl7dGhpcy5yb3dIZWFkZXJXaWR0aD0wO2Zvcih2YXIgZD0wLGg9Zi5sZW5ndGg7ZDxoO2QrKyl0aGlzLnJvd0hlYWRlcldpZHRoKz1hW2RdfHxhfWlmKGlzTmFOKHRoaXMucm93SGVhZGVyV2lkdGgpKWlmKGYubGVuZ3RoKXt2YXIgbT10aGlzLnd0VGFibGUuVEFCTEUucXVlcnlTZWxl'@;
put 'Y3RvcigiVEgiKTt0aGlzLnJvd0hlYWRlcldpZHRoPTA7Zm9yKHZhciBfPTAsTz1mLmxlbmd0aDtfPE87XysrKW0/KHRoaXMucm93SGVhZGVyV2lkdGgrPVNsKG0pLG09bS5uZXh0U2libGluZyk6dGhpcy5yb3dIZWFkZXJXaWR0aCs9NTB9ZWxzZSB0aGlzLnJvd0hlYWRlcldpZHRoPTA7cmV0'@;
put 'dXJuIHRoaXMucm93SGVhZGVyV2lkdGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uTW9kaWZ5Um93SGVhZGVyV2lkdGgiLHRoaXMucm93SGVhZGVyV2lkdGgpfHx0aGlzLnJvd0hlYWRlcldpZHRoLHRoaXMucm93SGVhZGVyV2lkdGh9fSx7a2V5OiJnZXRWaWV3cG9ydFdpZHRoIix2'@;
put 'YWx1ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0V29ya3NwYWNlV2lkdGgoKTtpZihhPT09MS8wKXJldHVybiBhO3ZhciBmPXRoaXMuZ2V0Um93SGVhZGVyV2lkdGgoKTtyZXR1cm4gZj4wP2EtZjphfX0se2tleToiY3JlYXRlUm93c0NhbGN1bGF0b3IiLHZhbHVlOmZ1bmN0aW9uKCl7dmFy'@;
put 'IGgsbSxfLGE9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjEsZj10aGlzLnd0U2V0dGluZ3MsZD10aGlzLnd0VGFibGU7dGhpcy5yb3dIZWFkZXJXaWR0aD1OYU4saD1mLmdldFNldHRpbmcoInJlbmRlckFsbFJvd3MiKSYmMT09PWE/MS8w'@;
put 'OnRoaXMuZ2V0Vmlld3BvcnRIZWlnaHQoKTt2YXIgTz10aGlzLmRhdGFBY2Nlc3NPYmplY3QudG9wU2Nyb2xsUG9zaXRpb24tdGhpcy5kYXRhQWNjZXNzT2JqZWN0LnRvcFBhcmVudE9mZnNldCxYPWYuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIiksYWU9Zi5nZXRTZXR0aW5nKCJmaXhlZFJv'@;
put 'd3NCb3R0b20iKSxwZT1mLmdldFNldHRpbmcoInRvdGFsUm93cyIpO3JldHVybiBYJiZPPj0wJiYoTys9Xz10aGlzLmRhdGFBY2Nlc3NPYmplY3QudG9wT3ZlcmxheS5zdW1DZWxsU2l6ZXMoMCxYKSxoLT1fKSxhZSYmdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmJvdHRvbU92ZXJsYXkuY2xvbmUm'@;
put 'JihoLT1fPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5ib3R0b21PdmVybGF5LnN1bUNlbGxTaXplcyhwZS1hZSxwZSkpLG09ZC5ob2xkZXIuY2xpZW50SGVpZ2h0PT09ZC5ob2xkZXIub2Zmc2V0SGVpZ2h0PzA6TnUodGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQpLG5ldyBNZmUoe3ZpZXdw'@;
put 'b3J0U2l6ZTpoLHNjcm9sbE9mZnNldDpPLHRvdGFsSXRlbXM6Zi5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKSxpdGVtU2l6ZUZuOmZ1bmN0aW9uKHhlKXtyZXR1cm4gZC5nZXRSb3dIZWlnaHQoeGUpfSxvdmVycmlkZUZuOmYuZ2V0U2V0dGluZ1B1cmUoInZpZXdwb3J0Um93Q2FsY3VsYXRvck92'@;
put 'ZXJyaWRlIiksY2FsY3VsYXRpb25UeXBlOmEsc2Nyb2xsYmFySGVpZ2h0Om19KX19LHtrZXk6ImNyZWF0ZUNvbHVtbnNDYWxjdWxhdG9yIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBhPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToxLGY9dGhp'@;
put 'cy53dFNldHRpbmdzLGQ9dGhpcy53dFRhYmxlLGg9dGhpcy5nZXRWaWV3cG9ydFdpZHRoKCksbT1NYXRoLmFicyh0aGlzLmRhdGFBY2Nlc3NPYmplY3QuaW5saW5lU3RhcnRTY3JvbGxQb3NpdGlvbiktdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmlubGluZVN0YXJ0UGFyZW50T2Zmc2V0O3RoaXMu'@;
put 'Y29sdW1uSGVhZGVySGVpZ2h0PU5hTjt2YXIgXz1mLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iik7aWYoXyYmbT49MCl7dmFyIE89dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmlubGluZVN0YXJ0T3ZlcmxheS5zdW1DZWxsU2l6ZXMoMCxfKTttKz1PLGgtPU99cmV0dXJuIGQuaG9sZGVy'@;
put 'LmNsaWVudFdpZHRoIT09ZC5ob2xkZXIub2Zmc2V0V2lkdGgmJihoLT1OdSh0aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudCkpLG5ldyBUVyh7dmlld3BvcnRTaXplOmgsc2Nyb2xsT2Zmc2V0Om0sdG90YWxJdGVtczpmLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLGl0ZW1TaXplRm46'@;
put 'ZnVuY3Rpb24oYWUpe3JldHVybiBkLmdldENvbHVtbldpZHRoKGFlKX0sb3ZlcnJpZGVGbjpmLmdldFNldHRpbmdQdXJlKCJ2aWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZSIpLGNhbGN1bGF0aW9uVHlwZTphLHN0cmV0Y2hNb2RlOmYuZ2V0U2V0dGluZygic3RyZXRjaEgiKSxzdHJl'@;
put 'dGNoaW5nSXRlbVdpZHRoRm46ZnVuY3Rpb24oYWUscGUpe3JldHVybiBmLmdldFNldHRpbmcoIm9uQmVmb3JlU3RyZXRjaGluZ0NvbHVtbldpZHRoIixhZSxwZSl9LGlubGluZVN0YXJ0T2Zmc2V0OnRoaXMuZGF0YUFjY2Vzc09iamVjdC5pbmxpbmVTdGFydFBhcmVudE9mZnNldH0pfX0se2tl'@;
put 'eToiY3JlYXRlUmVuZGVyQ2FsY3VsYXRvcnMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGY9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtpZihmKXt2YXIgZD10aGlzLmNyZWF0ZVJvd3NDYWxjdWxhdG9yKDIpLGg9dGhpcy5jcmVhdGVDb2x1'@;
put 'bW5zQ2FsY3VsYXRvcigyKTt0aGlzLmFyZUFsbFByb3Bvc2VkVmlzaWJsZVJvd3NBbHJlYWR5UmVuZGVyZWQoZCkmJnRoaXMuYXJlQWxsUHJvcG9zZWRWaXNpYmxlQ29sdW1uc0FscmVhZHlSZW5kZXJlZChoKXx8KGY9ITEpfXJldHVybiBmfHwodGhpcy5yb3dzUmVuZGVyQ2FsY3VsYXRvcj10'@;
put 'aGlzLmNyZWF0ZVJvd3NDYWxjdWxhdG9yKDEpLHRoaXMuY29sdW1uc1JlbmRlckNhbGN1bGF0b3I9dGhpcy5jcmVhdGVDb2x1bW5zQ2FsY3VsYXRvcigxKSksdGhpcy5yb3dzVmlzaWJsZUNhbGN1bGF0b3I9bnVsbCx0aGlzLmNvbHVtbnNWaXNpYmxlQ2FsY3VsYXRvcj1udWxsLGZ9fSx7a2V5'@;
put 'OiJjcmVhdGVWaXNpYmxlQ2FsY3VsYXRvcnMiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5yb3dzVmlzaWJsZUNhbGN1bGF0b3I9dGhpcy5jcmVhdGVSb3dzQ2FsY3VsYXRvcigyKSx0aGlzLmNvbHVtbnNWaXNpYmxlQ2FsY3VsYXRvcj10aGlzLmNyZWF0ZUNvbHVtbnNDYWxjdWxhdG9yKDIpfX0s'@;
put 'e2tleToiYXJlQWxsUHJvcG9zZWRWaXNpYmxlUm93c0FscmVhZHlSZW5kZXJlZCIsdmFsdWU6ZnVuY3Rpb24oYSl7aWYoIXRoaXMucm93c1Zpc2libGVDYWxjdWxhdG9yKXJldHVybiExO3ZhciBmPWEuc3RhcnRSb3csZD1hLmVuZFJvdztpZihudWxsPT09ZiYmbnVsbD09PWQpcmV0dXJuIWEu'@;
put 'aXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lcjt2YXIgbT10aGlzLnJvd3NSZW5kZXJDYWxjdWxhdG9yLF89bS5zdGFydFJvdyxPPW0uZW5kUm93O3JldHVybiEoZjxffHxmPT09XyYmZj4wfHxkPk98fGQ9PT1PJiZkPHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKS0x'@;
put 'KX19LHtrZXk6ImFyZUFsbFByb3Bvc2VkVmlzaWJsZUNvbHVtbnNBbHJlYWR5UmVuZGVyZWQiLHZhbHVlOmZ1bmN0aW9uKGEpe2lmKCF0aGlzLmNvbHVtbnNWaXNpYmxlQ2FsY3VsYXRvcilyZXR1cm4hMTt2YXIgZj1hLnN0YXJ0Q29sdW1uLGQ9YS5lbmRDb2x1bW47aWYobnVsbD09PWYmJm51'@;
put 'bGw9PT1kKXJldHVybiFhLmlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXI7dmFyIG09dGhpcy5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvcixfPW0uc3RhcnRDb2x1bW4sTz1tLmVuZENvbHVtbjtyZXR1cm4hKGY8X3x8Zj09PV8mJmY+MHx8ZD5PfHxkPT09TyYmZDx0aGlzLnd0U2V0dGluZ3Mu'@;
put 'Z2V0U2V0dGluZygidG90YWxDb2x1bW5zIiktMSl9fSx7a2V5OiJyZXNldEhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWQiLHZhbHVlOmZ1bmN0aW9uKCl7bWEodGhpcy5oYXNPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzTWFya2VkLGZ1bmN0aW9uKGEsZixkKXtkW2ZdPXZvaWQgMH0pfX1d'@;
put 'KSxsfSgpO2NvbnN0IExldD1SZXQ7ZnVuY3Rpb24gZjkobCl7cmV0dXJuKGY5PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlv'@;
put 'biI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24geGZlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVy'@;
put 'YWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxIZXQoZi5rZXkpLGYpfX1mdW5jdGlvbiBIZXQobCl7dmFyIGM9ZnVuY3Rpb24gTmV0KGwsYyl7aWYoIm9iamVjdCIhPT1mOShsKXx8bnVsbD09PWwp'@;
put 'cmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1mOShmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0'@;
put 'aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09ZjkoYyk/YzpTdHJpbmcoYyl9ZnVuY3Rpb24gT1cobCxjKXtyZXR1cm4oT1c9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5'@;
put 'cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZixkKXtyZXR1cm4gZi5fX3Byb3RvX189ZCxmfSkobCxjKX1mdW5jdGlvbiBEVyhsKXtpZih2b2lkIDA9PT1sKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2Fs'@;
put 'bGVkIik7cmV0dXJuIGx9ZnVuY3Rpb24gTlIobCl7cmV0dXJuKE5SPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGEpe3JldHVybiBhLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpfSkobCl9dmFyIFVldD1mdW5j'@;
put 'dGlvbihsKXshZnVuY3Rpb24gVmV0KGwsYyl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGMmJm51bGwhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7bC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShjJiZj'@;
put 'LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmwsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGMmJk9XKGwsYyl9KGEsbCk7dmFyIGM9ZnVuY3Rpb24gQmV0KGwpe3ZhciBjPWZ1bmN0'@;
put 'aW9uIHpldCgpe2lmKHR5cGVvZiBSZWZsZWN0PiJ1Inx8IVJlZmxlY3QuY29uc3RydWN0fHxSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChS'@;
put 'ZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLGZ1bmN0aW9uKCl7fSkpLCEwfWNhdGNoe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZCxmPU5SKGwpO2lmKGMpe3ZhciBoPU5SKHRoaXMpLmNvbnN0cnVjdG9yO2Q9UmVmbGVjdC5jb25zdHJ1Y3QoZixhcmd1bWVudHMsaCl9'@;
put 'ZWxzZSBkPWYuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbiBqZXQobCxjKXtpZihjJiYoIm9iamVjdCI9PT1mOShjKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGMpKXJldHVybiBjO2lmKHZvaWQgMCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3Rv'@;
put 'cnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gRFcobCl9KHRoaXMsZCl9fShhKTtmdW5jdGlvbiBhKGYsZCl7dmFyIGg7IWZ1bmN0aW9uIFBldChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEg'@;
put 'Y2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGEpO3ZhciBtPShoPWMuY2FsbCh0aGlzLGYsbmV3IGFldChkKSkpLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZmFjYWRlIixEVyhoKSk7cmV0dXJuIGgud3RUYWJsZT1uZXcgdmV0KGguZ2V0VGFibGVEYW8oKSxtLGguZG9tQmluZGluZ3MsaC53'@;
put 'dFNldHRpbmdzKSxoLnd0Vmlld3BvcnQ9bmV3IExldChoLmdldFZpZXdwb3J0RGFvKCksaC5kb21CaW5kaW5ncyxoLnd0U2V0dGluZ3MsaC5ldmVudE1hbmFnZXIsaC53dFRhYmxlKSxoLnNlbGVjdGlvbnM9aC53dFNldHRpbmdzLmdldFNldHRpbmcoInNlbGVjdGlvbnMiKSxoLnd0RXZlbnQ9'@;
put 'bmV3IFEwZShtLGguZG9tQmluZGluZ3MsaC53dFNldHRpbmdzLGguZXZlbnRNYW5hZ2VyLGgud3RUYWJsZSxoLnNlbGVjdGlvbnMpLGgud3RPdmVybGF5cz1uZXcgbmV0KERXKGgpLG0saC5kb21CaW5kaW5ncyxoLnd0U2V0dGluZ3MsaC5ldmVudE1hbmFnZXIsaC53dFRhYmxlKSxoLmV4cG9y'@;
put 'dFNldHRpbmdzQXNDbGFzc05hbWVzKCksaC5maW5kT3JpZ2luYWxIZWFkZXJzKCksaH1yZXR1cm4gZnVuY3Rpb24gRmV0KGwsYyxhKXtjJiZ4ZmUobC5wcm90b3R5cGUsYyksYSYmeGZlKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGEs'@;
put 'W3trZXk6ImV4cG9ydFNldHRpbmdzQXNDbGFzc05hbWVzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXMsbT1bXSxfPVtdO21hKHtyb3dIZWFkZXJzOiJodFJvd0hlYWRlcnMiLGNvbHVtbkhlYWRlcnM6Imh0Q29sdW1uSGVhZGVycyJ9LGZ1bmN0aW9uKE8sWCl7ZC53dFNldHRpbmdzLmdl'@;
put 'dFNldHRpbmcoWCkubGVuZ3RoJiZfLnB1c2goTyksbS5wdXNoKE8pfSksSm8odGhpcy53dFRhYmxlLnd0Um9vdEVsZW1lbnQucGFyZW50Tm9kZSxtKSxnaSh0aGlzLnd0VGFibGUud3RSb290RWxlbWVudC5wYXJlbnROb2RlLF8pfX0se2tleToiZ2V0Vmlld3BvcnREYW8iLHZhbHVlOmZ1bmN0'@;
put 'aW9uKCl7dmFyIGQ9dGhpcztyZXR1cm57Z2V0IHdvdCgpe3JldHVybiBkfSxnZXQgdG9wT3ZlcmxheVRyaW1taW5nQ29udGFpbmVyKCl7cmV0dXJuIGQud3RPdmVybGF5cy50b3BPdmVybGF5LnRyaW1taW5nQ29udGFpbmVyfSxnZXQgaW5saW5lU3RhcnRPdmVybGF5VHJpbW1pbmdDb250YWlu'@;
put 'ZXIoKXtyZXR1cm4gZC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS50cmltbWluZ0NvbnRhaW5lcn0sZ2V0IHRvcFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJuIGQud3RPdmVybGF5cy50b3BPdmVybGF5LmdldFNjcm9sbFBvc2l0aW9uKCl9LGdldCB0b3BQYXJlbnRPZmZzZXQoKXtyZXR1'@;
put 'cm4gZC53dE92ZXJsYXlzLnRvcE92ZXJsYXkuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKX0sZ2V0IGlubGluZVN0YXJ0U2Nyb2xsUG9zaXRpb24oKXtyZXR1cm4gZC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRTY3JvbGxQb3NpdGlvbigpfSxnZXQgaW5saW5lU3RhcnRQYXJlbnRP'@;
put 'ZmZzZXQoKXtyZXR1cm4gZC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRUYWJsZVBhcmVudE9mZnNldCgpfSxnZXQgdG9wT3ZlcmxheSgpe3JldHVybiBkLnd0T3ZlcmxheXMudG9wT3ZlcmxheX0sZ2V0IGlubGluZVN0YXJ0T3ZlcmxheSgpe3JldHVybiBkLnd0T3ZlcmxheXMu'@;
put 'aW5saW5lU3RhcnRPdmVybGF5fSxnZXQgYm90dG9tT3ZlcmxheSgpe3JldHVybiBkLnd0T3ZlcmxheXMuYm90dG9tT3ZlcmxheX19fX1dKSxhfShwVyk7ZnVuY3Rpb24gVE0obCl7cmV0dXJuKFRNPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0'@;
put 'ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gQWZl'@;
put 'KGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxXZXQoZi5rZXkpLGYpfX1mdW5j'@;
put 'dGlvbiBXZXQobCl7dmFyIGM9ZnVuY3Rpb24gR2V0KGwsYyl7aWYoIm9iamVjdCIhPT1UTShsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1UTShm'@;
put 'KSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09VE0oYyk/YzpTdHJpbmcoYyl9'@;
put 'dmFyICRldD1mdW5jdGlvbigpe2Z1bmN0aW9uIGwoYyl7KGZ1bmN0aW9uIFpldChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyxsKSxjIGluc3RhbmNlb2YgcFc/dGhpcy5fd290'@;
put 'PWM6dGhpcy5faW5pdEZyb21TZXR0aW5ncyhjKX1yZXR1cm4gZnVuY3Rpb24gWWV0KGwsYyxhKXtjJiZBZmUobC5wcm90b3R5cGUsYyksYSYmQWZlKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGwsW3trZXk6Il9pbml0RnJvbVNldHRp'@;
put 'bmdzIix2YWx1ZTpmdW5jdGlvbihhKXthLmZhY2FkZT1mdW5jdGlvbihmKXt2YXIgZD1uZXcgbChmKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZH19LHRoaXMuX3dvdD1uZXcgVWV0KGEudGFibGUsYSl9fSx7a2V5OiJndWlkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd290Lmd1'@;
put 'aWR9fSx7a2V5OiJyb290RG9jdW1lbnQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93b3QuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50fX0se2tleToicm9vdFdpbmRvdyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dvdC5kb21CaW5kaW5ncy5yb290V2luZG93fX0se2tleToi'@;
put 'd3RTZXR0aW5ncyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dvdC53dFNldHRpbmdzfX0se2tleToiY2xvbmVTb3VyY2UiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93b3QuY2xvbmVTb3VyY2V9fSx7a2V5OiJjbG9uZU92ZXJsYXkiLGdldDpmdW5jdGlvbigpe3JldHVybiB0'@;
put 'aGlzLl93b3QuY2xvbmVPdmVybGF5fX0se2tleToic2VsZWN0aW9ucyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dvdC5zZWxlY3Rpb25zfX0se2tleToid3RWaWV3cG9ydCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dvdC53dFZpZXdwb3J0fX0se2tleToid3RPdmVybGF5'@;
put 'cyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dvdC53dE92ZXJsYXlzfX0se2tleToid3RUYWJsZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dvdC53dFRhYmxlfX0se2tleToid3RFdmVudCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dvdC53dEV2ZW50fX0se2tl'@;
put 'eToid3RTY3JvbGwiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93b3Qud3RTY3JvbGx9fSx7a2V5OiJkcmF3biIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dvdC5kcmF3bn0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMuX3dvdC5kcmF3bj1hfX0se2tleToiZHJhd0ludGVycnVwdGVk'@;
put 'IixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd290LmRyYXdJbnRlcnJ1cHRlZH0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMuX3dvdC5kcmF3SW50ZXJydXB0ZWQ9YX19LHtrZXk6Imxhc3RNb3VzZU92ZXIiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93b3QubGFzdE1vdXNlT3Zlcn0s'@;
put 'c2V0OmZ1bmN0aW9uKGEpe3RoaXMuX3dvdC5sYXN0TW91c2VPdmVyPWF9fSx7a2V5OiJtb21lbnR1bVNjcm9sbGluZyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dvdC5tb21lbnR1bVNjcm9sbGluZ30sc2V0OmZ1bmN0aW9uKGEpe3RoaXMuX3dvdC5tb21lbnR1bVNjcm9sbGluZz1h'@;
put 'fX0se2tleToidG91Y2hBcHBsaWVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd290LnRvdWNoQXBwbGllZH0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMuX3dvdC50b3VjaEFwcGxpZWQ9YX19LHtrZXk6ImRvbUJpbmRpbmdzIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd290LmRv'@;
put 'bUJpbmRpbmdzfX0se2tleToiZXZlbnRMaXN0ZW5lcnMiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93b3QuZXZlbnRMaXN0ZW5lcnN9LHNldDpmdW5jdGlvbihhKXt0aGlzLl93b3QuZXZlbnRMaXN0ZW5lcnM9YX19LHtrZXk6ImV2ZW50TWFuYWdlciIsZ2V0OmZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIHRoaXMuX3dvdC5ldmVudE1hbmFnZXJ9fSx7a2V5OiJjcmVhdGVDZWxsQ29vcmRzIix2YWx1ZTpmdW5jdGlvbihhLGYpe3JldHVybiB0aGlzLl93b3QuY3JlYXRlQ2VsbENvb3JkcyhhLGYpfX0se2tleToiY3JlYXRlQ2VsbFJhbmdlIix2YWx1ZTpmdW5jdGlvbihhLGYsZCl7cmV0dXJu'@;
put 'IHRoaXMuX3dvdC5jcmVhdGVDZWxsUmFuZ2UoYSxmLGQpfX0se2tleToiZHJhdyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd290LmRyYXcoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSksdGhpc319LHtrZXk6ImdldENlbGwi'@;
put 'LHZhbHVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl93b3QuZ2V0Q2VsbChhLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0pfX0se2tleToic2Nyb2xsVmlld3BvcnQiLHZhbHVlOmZ1bmN0aW9uKGEsZixkLGgsbSl7cmV0dXJuIHRoaXMu'@;
put 'X3dvdC5zY3JvbGxWaWV3cG9ydChhLGYsZCxoLG0pfX0se2tleToic2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkiLHZhbHVlOmZ1bmN0aW9uKGEsZixkKXtyZXR1cm4gdGhpcy5fd290LnNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGEsZixkKX19LHtrZXk6InNjcm9sbFZpZXdwb3J0VmVy'@;
put 'dGljYWxseSIsdmFsdWU6ZnVuY3Rpb24oYSxmLGQpe3JldHVybiB0aGlzLl93b3Quc2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGEsZixkKX19LHtrZXk6ImdldFZpZXdwb3J0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93b3QuZ2V0Vmlld3BvcnQoKX19LHtrZXk6ImdldE92ZXJs'@;
put 'YXlOYW1lIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93b3QuY2xvbmVPdmVybGF5P3RoaXMuX3dvdC5jbG9uZU92ZXJsYXkudHlwZToibWFzdGVyIn19LHtrZXk6ImV4cG9ydFNldHRpbmdzQXNDbGFzc05hbWVzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93b3QuZXhw'@;
put 'b3J0U2V0dGluZ3NBc0NsYXNzTmFtZXMoKX19LHtrZXk6InVwZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oYSxmKXtyZXR1cm4gdGhpcy5fd290Lnd0U2V0dGluZ3MudXBkYXRlKGEsZiksdGhpc319LHtrZXk6ImdldFNldHRpbmciLHZhbHVlOmZ1bmN0aW9uKGEsZixkLGgsbSl7cmV0dXJuIHRoaXMu'@;
put 'X3dvdC53dFNldHRpbmdzLmdldFNldHRpbmcoYSxmLGQsaCxtKX19LHtrZXk6Imhhc1NldHRpbmciLHZhbHVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl93b3Qud3RTZXR0aW5ncy5oYXNTZXR0aW5nKGEpfX0se2tleToiZGVzdHJveSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl93b3QuZGVz'@;
put 'dHJveSgpfX1dKSxsfSgpO2Z1bmN0aW9uIFRmZShsKXt2YXIgYz1sLmlzU2hpZnRLZXksYT1sLmlzTGVmdENsaWNrLGY9bC5pc1JpZ2h0Q2xpY2ssZD1sLmNvb3JkcyxoPWwuc2VsZWN0aW9uLG09bC5jb250cm9sbGVyLF89bC5jZWxsQ29vcmRzRmFjdG9yeSxPPWguaXNTZWxlY3RlZCgpP2gu'@;
put 'Z2V0U2VsZWN0ZWRSYW5nZSgpLmN1cnJlbnQoKTpudWxsLFg9aC5pc1NlbGVjdGVkQnlDb3JuZXIoKSxhZT1oLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpO2lmKGMmJk8pZC5yb3c+PTAmJmQuY29sPj0wJiYhbS5jZWxsP2guc2V0UmFuZ2VFbmQoZCk6KFh8fGFlKSYmZC5yb3c+PTAmJmQuY29s'@;
put 'Pj0wJiYhbS5jZWxsP2guc2V0UmFuZ2VFbmQoXyhkLnJvdyxkLmNvbCkpOlgmJmQucm93PDAmJiFtLmNvbHVtbj9oLnNldFJhbmdlRW5kKF8oTy50by5yb3csZC5jb2wpKTphZSYmZC5jb2w8MCYmIW0ucm93P2guc2V0UmFuZ2VFbmQoXyhkLnJvdyxPLnRvLmNvbCkpOighWCYmIWFlJiZkLmNv'@;
put 'bDwwfHxYJiZkLmNvbDwwKSYmIW0ucm93P2guc2VsZWN0Um93cyhNYXRoLm1heChPLmZyb20ucm93LDApLGQucm93LGQuY29sKTooIVgmJiFhZSYmZC5yb3c8MHx8YWUmJmQucm93PDApJiYhbS5jb2x1bW4mJmguc2VsZWN0Q29sdW1ucyhNYXRoLm1heChPLmZyb20uY29sLDApLGQuY29sLGQu'@;
put 'cm93KTtlbHNle3ZhciBwZT0haC5pbkluU2VsZWN0aW9uKGQpLGJlPWF8fGYmJnBlO2Qucm93PDAmJmQuY29sPj0wJiYhbS5jb2x1bW4/YmUmJmguc2VsZWN0Q29sdW1ucyhkLmNvbCxkLmNvbCxkLnJvdyk6ZC5jb2w8MCYmZC5yb3c+PTAmJiFtLnJvdz9iZSYmaC5zZWxlY3RSb3dzKGQucm93'@;
put 'LGQucm93LGQuY29sKTpkLmNvbD49MCYmZC5yb3c+PTAmJiFtLmNlbGw/YmUmJmguc2V0UmFuZ2VTdGFydChkKTpkLmNvbDwwJiZkLnJvdzwwJiZoLnNlbGVjdEFsbCghMCwhMCl9fXZhciBxZXQ9bmV3IE1hcChbWyJtb3VzZWRvd24iLFRmZV0sWyJtb3VzZW92ZXIiLGZ1bmN0aW9uIEtldChs'@;
put 'KXt2YXIgYT1sLmNvb3JkcyxmPWwuc2VsZWN0aW9uLGQ9bC5jb250cm9sbGVyLGg9bC5jZWxsQ29vcmRzRmFjdG9yeTtpZihsLmlzTGVmdENsaWNrKXt2YXIgbT1mLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpLF89Zi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSxPPWYudGFibGVQcm9wcy5j'@;
put 'b3VudENvbHMoKSxYPWYudGFibGVQcm9wcy5jb3VudFJvd3MoKTtfJiYhZC5jb2x1bW4/Zi5zZXRSYW5nZUVuZChoKFgtMSxhLmNvbCkpOm0mJiFkLnJvdz9mLnNldFJhbmdlRW5kKGgoYS5yb3csTy0xKSk6ZC5jZWxsfHxmLnNldFJhbmdlRW5kKGEpfX1dLFsidG91Y2hzdGFydCIsVGZlXV0p'@;
put 'O2Z1bmN0aW9uIE9mZShsLGMpe3ZhciBhPWMuY29vcmRzLGY9Yy5zZWxlY3Rpb24sZD1jLmNvbnRyb2xsZXIsaD1jLmNlbGxDb29yZHNGYWN0b3J5O3FldC5nZXQobC50eXBlKSh7Y29vcmRzOmEsc2VsZWN0aW9uOmYsY29udHJvbGxlcjpkLGNlbGxDb29yZHNGYWN0b3J5OmgsaXNTaGlmdEtl'@;
put 'eTpsLnNoaWZ0S2V5LGlzTGVmdENsaWNrOlFJKGwpfHwidG91Y2hzdGFydCI9PT1sLnR5cGUsaXNSaWdodENsaWNrOkk0KGwpfSl9dmFyIERmZT1uZXcgV2Vha01hcCxJVz1TeW1ib2woInJvb3RJbnN0YW5jZSIpO2Z1bmN0aW9uIFJXKGwpe3JldHVybiBEZmUuaGFzKGwpfWZ1bmN0aW9uIE9N'@;
put 'KGwpe3JldHVybihPTT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9y'@;
put 'PT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIERNKGwsYyl7cmV0dXJuIGZ1bmN0aW9uIHR0dChsKXtpZihBcnJheS5pc0FycmF5KGwpKXJldHVybiBsfShsKXx8ZnVuY3Rpb24gZXR0KGwsYyl7dmFyIGE9bnVsbD09bD9udWxs'@;
put 'OnR5cGVvZiBTeW1ib2w8InUiJiZsW1N5bWJvbC5pdGVyYXRvcl18fGxbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1hKXt2YXIgZixkLGgsbSxfPVtdLE89ITAsWD0hMTt0cnl7aWYoaD0oYT1hLmNhbGwobCkpLm5leHQsMD09PWMpe2lmKE9iamVjdChhKSE9PWEpcmV0dXJuO089ITF9ZWxzZSBm'@;
put 'b3IoOyEoTz0oZj1oLmNhbGwoYSkpLmRvbmUpJiYoXy5wdXNoKGYudmFsdWUpLF8ubGVuZ3RoIT09Yyk7Tz0hMCk7fWNhdGNoKGFlKXtYPSEwLGQ9YWV9ZmluYWxseXt0cnl7aWYoIU8mJm51bGwhPWEucmV0dXJuJiYobT1hLnJldHVybigpLE9iamVjdChtKSE9PW0pKXJldHVybn1maW5hbGx5'@;
put 'e2lmKFgpdGhyb3cgZH19cmV0dXJuIF99fShsLGMpfHxSZmUobCxjKXx8ZnVuY3Rpb24gUWV0KCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJy'@;
put 'YXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBJZmUobCl7cmV0dXJuIGZ1bmN0aW9uIGl0dChsKXtpZihBcnJheS5pc0FycmF5KGwpKXJldHVybiBMVyhsKX0obCl8fGZ1bmN0aW9uIHJ0dChsKXtpZih0eXBlb2YgU3ltYm9s'@;
put 'PCJ1IiYmbnVsbCE9bFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1sWyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20obCl9KGwpfHxSZmUobCl8fGZ1bmN0aW9uIG50dCgpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGlu'@;
put 'c3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIFJmZShsLGMpe2lmKGwpe2lmKCJzdHJpbmciPT10eXBlb2YgbClyZXR1cm4gTFcobCxjKTt2YXIgYT1P'@;
put 'YmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobCkuc2xpY2UoOCwtMSk7aWYoIk9iamVjdCI9PT1hJiZsLmNvbnN0cnVjdG9yJiYoYT1sLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09YXx8IlNldCI9PT1hKXJldHVybiBBcnJheS5mcm9tKGwpO2lmKCJBcmd1bWVudHMiPT09YXx8L14o'@;
put 'PzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QoYSkpcmV0dXJuIExXKGwsYyl9fWZ1bmN0aW9uIExXKGwsYyl7KG51bGw9PWN8fGM+bC5sZW5ndGgpJiYoYz1sLmxlbmd0aCk7Zm9yKHZhciBhPTAsZj1uZXcgQXJyYXkoYyk7YTxjO2ErKylmW2FdPWxbYV07cmV0'@;
put 'dXJuIGZ9ZnVuY3Rpb24gTGZlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxG'@;
put 'ZmUoZi5rZXkpLGYpfX1mdW5jdGlvbiBQZmUobCxjLGEpeyhmdW5jdGlvbiBsdHQobCxjKXtpZihjLmhhcyhsKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkobCxjKSxjLnNldChs'@;
put 'LGEpfWZ1bmN0aW9uIFA0KGwsYyxhKXtyZXR1cm4oYz1GZmUoYykpaW4gbD9PYmplY3QuZGVmaW5lUHJvcGVydHkobCxjLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6bFtjXT1hLGx9ZnVuY3Rpb24gRmZlKGwpe3ZhciBjPWZ1bmN0aW9uIHN0'@;
put 'dChsLGMpe2lmKCJvYmplY3QiIT09T00obCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09T00oZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJv'@;
put 'cigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PU9NKGMpP2M6U3RyaW5nKGMpfWZ1bmN0aW9uIEhmZShsLGMpe3JldHVybiBmdW5j'@;
put 'dGlvbiB1dHQobCxjKXtyZXR1cm4gYy5nZXQ/Yy5nZXQuY2FsbChsKTpjLnZhbHVlfShsLFZmZShsLGMsImdldCIpKX1mdW5jdGlvbiBOZmUobCxjLGEpe3JldHVybiBmdW5jdGlvbiBjdHQobCxjLGEpe2lmKGMuc2V0KWMuc2V0LmNhbGwobCxhKTtlbHNle2lmKCFjLndyaXRhYmxlKXRocm93'@;
put 'IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtjLnZhbHVlPWF9fShsLFZmZShsLGMsInNldCIpLGEpLGF9ZnVuY3Rpb24gVmZlKGwsYyxhKXtpZighYy5oYXMobCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrYSsi'@;
put 'IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGMuZ2V0KGwpfXZhciBFNT1uZXcgV2Vha01hcCxQVz1uZXcgV2Vha01hcCxGVz1uZXcgV2Vha01hcCxmdHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKGMpeyhmdW5jdGlvbiBvdHQobCxjKXtpZighKGwgaW5zdGFuY2VvZiBj'@;
put 'KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsbCksUDQodGhpcywiaW5zdGFuY2UiLHZvaWQgMCksUDQodGhpcywiZXZlbnRNYW5hZ2VyIix2b2lkIDApLFA0KHRoaXMsInNldHRpbmdzIix2b2lkIDApLFA0KHRoaXMsIlRI'@;
put 'RUFEIix2b2lkIDApLFA0KHRoaXMsIlRCT0RZIix2b2lkIDApLFA0KHRoaXMsIl93dCIsdm9pZCAwKSxQNCh0aGlzLCJhY3RpdmVXdCIsdm9pZCAwKSxQZmUodGhpcyxQVyx7d3JpdGFibGU6ITAsdmFsdWU6MH0pLFBmZSh0aGlzLEZXLHt3cml0YWJsZTohMCx2YWx1ZTowfSksUDQodGhpcywi'@;
put 'cG9zdHBvbmVkQWRqdXN0RWxlbWVudHNTaXplIiwhMSksdGhpcy5pbnN0YW5jZT1jLHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBmcyh0aGlzLmluc3RhbmNlKSx0aGlzLnNldHRpbmdzPXRoaXMuaW5zdGFuY2UuZ2V0U2V0dGluZ3MoKSxFNS5zZXQodGhpcyx7c2VsZWN0aW9uTW91c2VEb3duOiEx'@;
put 'LG1vdXNlRG93bjp2b2lkIDAsdGFibGU6dm9pZCAwLGxhc3RXaWR0aDowLGxhc3RIZWlnaHQ6MH0pLHRoaXMuY3JlYXRlRWxlbWVudHMoKSx0aGlzLnJlZ2lzdGVyRXZlbnRzKCksdGhpcy5pbml0aWFsaXplV2Fsa29udGFibGUoKX1yZXR1cm4gZnVuY3Rpb24gYXR0KGwsYyxhKXtjJiZMZmUo'@;
put 'bC5wcm90b3R5cGUsYyksYSYmTGZlKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGwsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmluc3RhbmNlLmlzUmVuZGVyU3VzcGVuZGVkKCl8fCh0aGlzLmluc3RhbmNlLnJ1'@;
put 'bkhvb2tzKCJiZWZvcmVSZW5kZXIiLHRoaXMuaW5zdGFuY2UuZm9yY2VGdWxsUmVuZGVyKSx0aGlzLnBvc3Rwb25lZEFkanVzdEVsZW1lbnRzU2l6ZSYmKHRoaXMucG9zdHBvbmVkQWRqdXN0RWxlbWVudHNTaXplPSExLHRoaXMuYWRqdXN0RWxlbWVudHNTaXplKCEwKSksdGhpcy5fd3QuZHJh'@;
put 'dyghdGhpcy5pbnN0YW5jZS5mb3JjZUZ1bGxSZW5kZXIpLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyUmVuZGVyIix0aGlzLmluc3RhbmNlLmZvcmNlRnVsbFJlbmRlciksdGhpcy5pbnN0YW5jZS5mb3JjZUZ1bGxSZW5kZXI9ITEsdGhpcy5pbnN0YW5jZS5yZW5kZXJDYWxsPSExKX19'@;
put 'LHtrZXk6ImFkanVzdEVsZW1lbnRzU2l6ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO3RoaXMuaW5zdGFuY2UuaXNSZW5kZXJTdXNwZW5kZWQoKT90aGlzLnBvc3Rwb25lZEFkanVzdEVsZW1l'@;
put 'bnRzU2l6ZT0hMDp0aGlzLl93dC53dE92ZXJsYXlzLmFkanVzdEVsZW1lbnRzU2l6ZShhKX19LHtrZXk6ImdldENlbGxBdENvb3JkcyIsdmFsdWU6ZnVuY3Rpb24oYSxmKXt2YXIgZD10aGlzLl93dC5nZXRDZWxsKGEsZik7cmV0dXJuIGQ8MD9udWxsOmR9fSx7a2V5OiJzY3JvbGxWaWV3cG9y'@;
put 'dCIsdmFsdWU6ZnVuY3Rpb24oYSxmLGQsaCxtKXtyZXR1cm4gdGhpcy5fd3Quc2Nyb2xsVmlld3BvcnQoYSxmLGQsaCxtKX19LHtrZXk6InNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5Iix2YWx1ZTpmdW5jdGlvbihhLGYsZCl7cmV0dXJuIHRoaXMuX3d0LnNjcm9sbFZpZXdwb3J0SG9yaXpv'@;
put 'bnRhbGx5KGEsZixkKX19LHtrZXk6InNjcm9sbFZpZXdwb3J0VmVydGljYWxseSIsdmFsdWU6ZnVuY3Rpb24oYSxmLGQpe3JldHVybiB0aGlzLl93dC5zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkoYSxmLGQpfX0se2tleToiY3JlYXRlRWxlbWVudHMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGE9'@;
put 'RTUuZ2V0KHRoaXMpLGY9dGhpcy5pbnN0YW5jZSxkPWYucm9vdEVsZW1lbnQsaD1mLnJvb3REb2N1bWVudCxtPWQuZ2V0QXR0cmlidXRlKCJzdHlsZSIpO20mJmQuc2V0QXR0cmlidXRlKCJkYXRhLW9yaWdpbmFsc3R5bGUiLG0pLGdpKGQsImhhbmRzb250YWJsZSIpLGEudGFibGU9aC5jcmVh'@;
put 'dGVFbGVtZW50KCJUQUJMRSIpLGdpKGEudGFibGUsImh0Q29yZSIpLHRoaXMuaW5zdGFuY2UuZ2V0U2V0dGluZ3MoKS50YWJsZUNsYXNzTmFtZSYmZ2koYS50YWJsZSx0aGlzLmluc3RhbmNlLmdldFNldHRpbmdzKCkudGFibGVDbGFzc05hbWUpLHRoaXMuVEhFQUQ9aC5jcmVhdGVFbGVtZW50'@;
put 'KCJUSEVBRCIpLGEudGFibGUuYXBwZW5kQ2hpbGQodGhpcy5USEVBRCksdGhpcy5UQk9EWT1oLmNyZWF0ZUVsZW1lbnQoIlRCT0RZIiksYS50YWJsZS5hcHBlbmRDaGlsZCh0aGlzLlRCT0RZKSx0aGlzLmluc3RhbmNlLnRhYmxlPWEudGFibGUsdGhpcy5pbnN0YW5jZS5jb250YWluZXIuaW5z'@;
put 'ZXJ0QmVmb3JlKGEudGFibGUsdGhpcy5pbnN0YW5jZS5jb250YWluZXIuZmlyc3RDaGlsZCl9fSx7a2V5OiJyZWdpc3RlckV2ZW50cyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGY9RTUuZ2V0KHRoaXMpLGQ9dGhpcy5pbnN0YW5jZSxoPWQucm9vdEVsZW1lbnQsbT1kLnJvb3REb2N1'@;
put 'bWVudCxfPWQuc2VsZWN0aW9uLE89bS5kb2N1bWVudEVsZW1lbnQ7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihoLCJtb3VzZWRvd24iLGZ1bmN0aW9uKFgpe2lmKGYuc2VsZWN0aW9uTW91c2VEb3duPSEwLCFhLmlzVGV4dFNlbGVjdGlvbkFsbG93ZWQoWC50YXJnZXQpKXt2'@;
put 'YXIgYWU9YS5pbnN0YW5jZS5yb290V2luZG93O0VZKGFlKSxYLnByZXZlbnREZWZhdWx0KCksYWUuZm9jdXMoKX19KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGgsIm1vdXNldXAiLGZ1bmN0aW9uKCl7Zi5zZWxlY3Rpb25Nb3VzZURvd249ITF9KSx0aGlzLmV2ZW50TWFu'@;
put 'YWdlci5hZGRFdmVudExpc3RlbmVyKGgsIm1vdXNlbW92ZSIsZnVuY3Rpb24oWCl7Zi5zZWxlY3Rpb25Nb3VzZURvd24mJiFhLmlzVGV4dFNlbGVjdGlvbkFsbG93ZWQoWC50YXJnZXQpJiYoYS5zZXR0aW5ncy5mcmFnbWVudFNlbGVjdGlvbiYmRVkoYS5pbnN0YW5jZS5yb290V2luZG93KSxY'@;
put 'LnByZXZlbnREZWZhdWx0KCkpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihPLCJrZXl1cCIsZnVuY3Rpb24oWCl7Xy5pc0luUHJvZ3Jlc3MoKSYmIVguc2hpZnRLZXkmJl8uZmluaXNoKCl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKE8sIm1vdXNl'@;
put 'dXAiLGZ1bmN0aW9uKFgpe18uaXNJblByb2dyZXNzKCkmJlFJKFgpJiZfLmZpbmlzaCgpLGYubW91c2VEb3duPSExLChYSShtLmFjdGl2ZUVsZW1lbnQpfHwhXy5pc1NlbGVjdGVkKCkmJiFfLmlzU2VsZWN0ZWRCeUFueUhlYWRlcigpJiYhaC5jb250YWlucyhYLnRhcmdldCkmJiFJNChYKSkm'@;
put 'JmEuaW5zdGFuY2UudW5saXN0ZW4oKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoTywiY29udGV4dG1lbnUiLGZ1bmN0aW9uKFgpe18uaXNJblByb2dyZXNzKCkmJkk0KFgpJiYoXy5maW5pc2goKSxmLm1vdXNlRG93bj0hMSl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRF'@;
put 'dmVudExpc3RlbmVyKE8sInRvdWNoZW5kIixmdW5jdGlvbigpe18uaXNJblByb2dyZXNzKCkmJl8uZmluaXNoKCksZi5tb3VzZURvd249ITF9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKE8sIm1vdXNlZG93biIsZnVuY3Rpb24oWCl7dmFyIGFlPVgudGFyZ2V0LHBlPVgu'@;
put 'eHx8WC5jbGllbnRYLGJlPVgueXx8WC5jbGllbnRZLHhlPVgudGFyZ2V0O2lmKCFmLm1vdXNlRG93biYmaCYmYS5pbnN0YW5jZS52aWV3KXt2YXIgVmU9YS5pbnN0YW5jZS52aWV3Ll93dC53dFRhYmxlLmhvbGRlcjtpZih4ZT09PVZlKXt2YXIgWmU9TnUobSk7aWYobS5lbGVtZW50RnJvbVBv'@;
put 'aW50KHBlK1plLGJlKSE9PVZlfHxtLmVsZW1lbnRGcm9tUG9pbnQocGUsYmUrWmUpIT09VmUpcmV0dXJufWVsc2UgZm9yKDt4ZSE9PU87KXtpZihudWxsPT09eGUpe2lmKFguaXNUYXJnZXRXZWJDb21wb25lbnQpYnJlYWs7cmV0dXJufWlmKHhlPT09aClyZXR1cm47eGU9eGUucGFyZW50Tm9k'@;
put 'ZX0oImZ1bmN0aW9uIj09dHlwZW9mIGEuc2V0dGluZ3Mub3V0c2lkZUNsaWNrRGVzZWxlY3RzP2Euc2V0dGluZ3Mub3V0c2lkZUNsaWNrRGVzZWxlY3RzKGFlKTphLnNldHRpbmdzLm91dHNpZGVDbGlja0Rlc2VsZWN0cyk/YS5pbnN0YW5jZS5kZXNlbGVjdENlbGwoKTphLmluc3RhbmNlLmRl'@;
put 'c3Ryb3lFZGl0b3IoITEsITEpfX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZi50YWJsZSwic2VsZWN0c3RhcnQiLGZ1bmN0aW9uKFgpe2Euc2V0dGluZ3MuZnJhZ21lbnRTZWxlY3Rpb258fCRTKFgudGFyZ2V0KXx8WC5wcmV2ZW50RGVmYXVsdCgpfSl9fSx7a2V5OiJ0'@;
put 'cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzIix2YWx1ZTpmdW5jdGlvbihhKXt2YXIgZjtyZXR1cm4oZj10aGlzLmluc3RhbmNlKS5fY3JlYXRlQ2VsbENvb3Jkcy5hcHBseShmLElmZSh0aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxJbmRleChhLnJvdyxh'@;
put 'LmNvbCkpKX19LHtrZXk6InRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxJbmRleCIsdmFsdWU6ZnVuY3Rpb24oYSxmKXt2YXIgZD1hPj0wP3RoaXMuaW5zdGFuY2Uucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChhKTphLGg9Zj49MD90aGlzLmluc3Rh'@;
put 'bmNlLmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZik6ZjtyZXR1cm4gbnVsbD09PWQmJihkPWEpLG51bGw9PT1oJiYoaD1mKSxbZCxoXX19LHtrZXk6ImNvdW50UmVuZGVyYWJsZUluZGV4ZXMiLHZhbHVlOmZ1bmN0aW9uKGEsZil7dmFyIGQ9TWF0aC5t'@;
put 'aW4oYS5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpLGYpLGg9YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZC0xLC0xKTtyZXR1cm4gbnVsbD09PWg/MDphLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaCkrMX19LHtrZXk6ImNvdW50UmVuZGVyYWJsZUNvbHVtbnMiLHZhbHVl'@;
put 'OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY291bnRSZW5kZXJhYmxlSW5kZXhlcyh0aGlzLmluc3RhbmNlLmNvbHVtbkluZGV4TWFwcGVyLHRoaXMuc2V0dGluZ3MubWF4Q29scyl9fSx7a2V5OiJjb3VudFJlbmRlcmFibGVSb3dzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvdW50'@;
put 'UmVuZGVyYWJsZUluZGV4ZXModGhpcy5pbnN0YW5jZS5yb3dJbmRleE1hcHBlcix0aGlzLnNldHRpbmdzLm1heFJvd3MpfX0se2tleToiY291bnROb3RIaWRkZW5Sb3dJbmRleGVzIix2YWx1ZTpmdW5jdGlvbihhLGYpe3JldHVybiB0aGlzLmNvdW50Tm90SGlkZGVuSW5kZXhlcyhhLGYsdGhp'@;
put 'cy5pbnN0YW5jZS5yb3dJbmRleE1hcHBlcix0aGlzLmNvdW50UmVuZGVyYWJsZVJvd3MoKSl9fSx7a2V5OiJjb3VudE5vdEhpZGRlbkNvbHVtbkluZGV4ZXMiLHZhbHVlOmZ1bmN0aW9uKGEsZil7cmV0dXJuIHRoaXMuY291bnROb3RIaWRkZW5JbmRleGVzKGEsZix0aGlzLmluc3RhbmNlLmNv'@;
put 'bHVtbkluZGV4TWFwcGVyLHRoaXMuY291bnRSZW5kZXJhYmxlQ29sdW1ucygpKX19LHtrZXk6ImNvdW50Tm90SGlkZGVuSW5kZXhlcyIsdmFsdWU6ZnVuY3Rpb24oYSxmLGQsaCl7aWYoaXNOYU4oYSl8fGE8MClyZXR1cm4gMDt2YXIgbT1kLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhLGYp'@;
put 'LF89ZC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KG0pO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKF8pKXJldHVybiAwO3ZhciBPPTA7cmV0dXJuIGY8MD9PPV8rMTpmPjAmJihPPWgtXyksT319LHtrZXk6ImNvdW50Tm90SGlkZGVuRml4ZWRDb2x1bW5zU3RhcnQiLHZhbHVlOmZ1bmN0aW9u'@;
put 'KCl7dmFyIGE9dGhpcy5pbnN0YW5jZS5jb3VudENvbHMoKSxmPU1hdGgubWluKHBhcnNlSW50KHRoaXMuc2V0dGluZ3MuZml4ZWRDb2x1bW5zU3RhcnQsMTApLGEpLTE7cmV0dXJuIHRoaXMuY291bnROb3RIaWRkZW5Db2x1bW5JbmRleGVzKGYsLTEpfX0se2tleToiY291bnROb3RIaWRkZW5G'@;
put 'aXhlZFJvd3NUb3AiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5pbnN0YW5jZS5jb3VudFJvd3MoKSxmPU1hdGgubWluKHBhcnNlSW50KHRoaXMuc2V0dGluZ3MuZml4ZWRSb3dzVG9wLDEwKSxhKS0xO3JldHVybiB0aGlzLmNvdW50Tm90SGlkZGVuUm93SW5kZXhlcyhmLC0xKX19LHtr'@;
put 'ZXk6ImNvdW50Tm90SGlkZGVuRml4ZWRSb3dzQm90dG9tIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMuaW5zdGFuY2UuY291bnRSb3dzKCksZj1NYXRoLm1heChhLXBhcnNlSW50KHRoaXMuc2V0dGluZ3MuZml4ZWRSb3dzQm90dG9tLDEwKSwwKTtyZXR1cm4gdGhpcy5jb3VudE5vdEhp'@;
put 'ZGRlblJvd0luZGV4ZXMoZiwxKX19LHtrZXk6ImlzTWFpblRhYmxlTm90RnVsbHlDb3ZlcmVkQnlPdmVybGF5cyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmNvdW50Tm90SGlkZGVuRml4ZWRSb3dzVG9wKCkrdGhpcy5jb3VudE5vdEhpZGRlbkZpeGVkUm93c0JvdHRvbSgpLGY9dGhp'@;
put 'cy5jb3VudE5vdEhpZGRlbkZpeGVkQ29sdW1uc1N0YXJ0KCk7cmV0dXJuIHRoaXMuaW5zdGFuY2UuY291bnRSZW5kZXJlZFJvd3MoKT5hJiZ0aGlzLmluc3RhbmNlLmNvdW50UmVuZGVyZWRDb2xzKCk+Zn19LHtrZXk6ImluaXRpYWxpemVXYWxrb250YWJsZSIsdmFsdWU6ZnVuY3Rpb24oKXt2'@;
put 'YXIgYT10aGlzLGY9RTUuZ2V0KHRoaXMpLGQ9e3J0bE1vZGU6dGhpcy5pbnN0YW5jZS5pc1J0bCgpLGV4dGVybmFsUm93Q2FsY3VsYXRvcjp0aGlzLmluc3RhbmNlLmdldFBsdWdpbigiYXV0b1Jvd1NpemUiKSYmdGhpcy5pbnN0YW5jZS5nZXRQbHVnaW4oImF1dG9Sb3dTaXplIikuaXNFbmFi'@;
put 'bGVkKCksdGFibGU6Zi50YWJsZSxpc0RhdGFWaWV3SW5zdGFuY2U6ZnVuY3Rpb24oKXtyZXR1cm4gUlcoYS5pbnN0YW5jZSl9LHByZXZlbnRPdmVyZmxvdzpmdW5jdGlvbigpe3JldHVybiBhLnNldHRpbmdzLnByZXZlbnRPdmVyZmxvd30scHJldmVudFdoZWVsOmZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IGEuc2V0dGluZ3MucHJldmVudFdoZWVsfSxzdHJldGNoSDpmdW5jdGlvbigpe3JldHVybiBhLnNldHRpbmdzLnN0cmV0Y2hIfSxkYXRhOmZ1bmN0aW9uKGFlLHBlKXt2YXIgYmU7cmV0dXJuKGJlPWEuaW5zdGFuY2UpLmdldERhdGFBdENlbGwuYXBwbHkoYmUsSWZlKGEudHJhbnNsYXRlRnJv'@;
put 'bVJlbmRlcmFibGVUb1Zpc3VhbEluZGV4KGFlLHBlKSkpfSx0b3RhbFJvd3M6ZnVuY3Rpb24oKXtyZXR1cm4gYS5jb3VudFJlbmRlcmFibGVSb3dzKCl9LHRvdGFsQ29sdW1uczpmdW5jdGlvbigpe3JldHVybiBhLmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKX0sZml4ZWRDb2x1bW5zU3RhcnQ6'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gYS5jb3VudE5vdEhpZGRlbkZpeGVkQ29sdW1uc1N0YXJ0KCl9LGZpeGVkUm93c1RvcDpmdW5jdGlvbigpe3JldHVybiBhLmNvdW50Tm90SGlkZGVuRml4ZWRSb3dzVG9wKCl9LGZpeGVkUm93c0JvdHRvbTpmdW5jdGlvbigpe3JldHVybiBhLmNvdW50Tm90SGlk'@;
put 'ZGVuRml4ZWRSb3dzQm90dG9tKCl9LHNob3VsZFJlbmRlcklubGluZVN0YXJ0T3ZlcmxheTpmdW5jdGlvbigpe3JldHVybiBhLnNldHRpbmdzLmZpeGVkQ29sdW1uc1N0YXJ0PjB8fGQucm93SGVhZGVycygpLmxlbmd0aD4wfSxzaG91bGRSZW5kZXJUb3BPdmVybGF5OmZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIGEuc2V0dGluZ3MuZml4ZWRSb3dzVG9wPjB8fGQuY29sdW1uSGVhZGVycygpLmxlbmd0aD4wfSxzaG91bGRSZW5kZXJCb3R0b21PdmVybGF5OmZ1bmN0aW9uKCl7cmV0dXJuIGEuc2V0dGluZ3MuZml4ZWRSb3dzQm90dG9tPjB9LG1pblNwYXJlUm93czpmdW5jdGlvbigpe3JldHVybiBh'@;
put 'LnNldHRpbmdzLm1pblNwYXJlUm93c30scmVuZGVyQWxsUm93czp0aGlzLnNldHRpbmdzLnJlbmRlckFsbFJvd3Mscm93SGVhZGVyczpmdW5jdGlvbigpe3ZhciBhZT1bXTtyZXR1cm4gYS5pbnN0YW5jZS5oYXNSb3dIZWFkZXJzKCkmJmFlLnB1c2goZnVuY3Rpb24ocGUsYmUpe3ZhciB4ZT1w'@;
put 'ZT49MD9hLmluc3RhbmNlLnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgocGUpOnBlO2EuYXBwZW5kUm93SGVhZGVyKHhlLGJlKX0pLGEuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyR2V0Um93SGVhZGVyUmVuZGVyZXJzIixhZSksTmZlKGEsRlcsYWUubGVuZ3Ro'@;
put 'KSxhZX0sY29sdW1uSGVhZGVyczpmdW5jdGlvbigpe3ZhciBhZT1bXTtyZXR1cm4gYS5pbnN0YW5jZS5oYXNDb2xIZWFkZXJzKCkmJmFlLnB1c2goZnVuY3Rpb24ocGUsYmUpe3ZhciB4ZT1wZT49MD9hLmluc3RhbmNlLmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxl'@;
put 'SW5kZXgocGUpOnBlO2EuYXBwZW5kQ29sSGVhZGVyKHhlLGJlKX0pLGEuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyR2V0Q29sdW1uSGVhZGVyUmVuZGVyZXJzIixhZSksTmZlKGEsUFcsYWUubGVuZ3RoKSxhZX0sY29sdW1uV2lkdGg6ZnVuY3Rpb24oYWUpe3ZhciBwZT1hLmluc3RhbmNlLmNv'@;
put 'bHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoYWUpO3JldHVybiBhLmluc3RhbmNlLmdldENvbFdpZHRoKG51bGw9PT1wZT9hZTpwZSl9LHJvd0hlaWdodDpmdW5jdGlvbihhZSl7dmFyIHBlPWEuaW5zdGFuY2Uucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJv'@;
put 'bVJlbmRlcmFibGVJbmRleChhZSk7cmV0dXJuIGEuaW5zdGFuY2UuZ2V0Um93SGVpZ2h0KG51bGw9PT1wZT9hZTpwZSl9LGNlbGxSZW5kZXJlcjpmdW5jdGlvbihhZSxwZSxiZSl7dmFyIFZlPURNKGEudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbEluZGV4KGFlLHBlKSwyKSxaZT1W'@;
put 'ZVswXSxsdD1WZVsxXSxkdD1hLmluc3RhbmNlLnJ1bkhvb2tzKCJtb2RpZnlHZXRDZWxsQ29vcmRzIixaZSxsdCksZ3Q9WmUsanQ9bHQ7aWYoQXJyYXkuaXNBcnJheShkdCkpe3ZhciBybj1ETShkdCwyKTtndD1yblswXSxqdD1yblsxXX12YXIgWHQ9YS5pbnN0YW5jZS5nZXRDZWxsTWV0YShn'@;
put 'dCxqdCkseW49YS5pbnN0YW5jZS5jb2xUb1Byb3AoanQpLFFuPWEuaW5zdGFuY2UuZ2V0RGF0YUF0Um93UHJvcChndCx5bik7YS5pbnN0YW5jZS5oYXNIb29rKCJiZWZvcmVWYWx1ZVJlbmRlciIpJiYoUW49YS5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlVmFsdWVSZW5kZXIiLFFuLFh0KSks'@;
put 'YS5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlUmVuZGVyZXIiLGJlLFplLGx0LHluLFFuLFh0KSxhLmluc3RhbmNlLmdldENlbGxSZW5kZXJlcihYdCkoYS5pbnN0YW5jZSxiZSxaZSxsdCx5bixRbixYdCksYS5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJSZW5kZXJlciIsYmUsWmUsbHQseW4s'@;
put 'UW4sWHQpfSxzZWxlY3Rpb25zOnRoaXMuaW5zdGFuY2Uuc2VsZWN0aW9uLmhpZ2hsaWdodCxoaWRlQm9yZGVyT25Nb3VzZURvd25PdmVyOmZ1bmN0aW9uKCl7cmV0dXJuIGEuc2V0dGluZ3MuZnJhZ21lbnRTZWxlY3Rpb259LG9uV2luZG93UmVzaXplOmZ1bmN0aW9uKCl7YS5pbnN0YW5jZSYm'@;
put 'IWEuaW5zdGFuY2UuaXNEZXN0cm95ZWQmJmEuaW5zdGFuY2UucmVmcmVzaERpbWVuc2lvbnMoKX0sb25Db250YWluZXJFbGVtZW50UmVzaXplOmZ1bmN0aW9uKCl7YS5pbnN0YW5jZSYmIWEuaW5zdGFuY2UuaXNEZXN0cm95ZWQmJmEuaW5zdGFuY2UucmVmcmVzaERpbWVuc2lvbnMoKX0sb25D'@;
put 'ZWxsTW91c2VEb3duOmZ1bmN0aW9uKGFlLHBlLGJlLHhlKXt2YXIgVmU9YS50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKHBlKSxaZT17cm93OiExLGNvbHVtbjohMSxjZWxsOiExfTthLmluc3RhbmNlLmxpc3RlbigpLGEuYWN0aXZlV3Q9eGUsZi5tb3VzZURvd249ITAs'@;
put 'YS5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlT25DZWxsTW91c2VEb3duIixhZSxWZSxiZSxaZSksIV81KGFlKSYmKE9mZShhZSx7Y29vcmRzOlZlLHNlbGVjdGlvbjphLmluc3RhbmNlLnNlbGVjdGlvbixjb250cm9sbGVyOlplLGNlbGxDb29yZHNGYWN0b3J5OmZ1bmN0aW9uKGR0LGd0KXty'@;
put 'ZXR1cm4gYS5pbnN0YW5jZS5fY3JlYXRlQ2VsbENvb3JkcyhkdCxndCl9fSksYS5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJPbkNlbGxNb3VzZURvd24iLGFlLFZlLGJlKSxhLmFjdGl2ZVd0PWEuX3d0KX0sb25DZWxsQ29udGV4dE1lbnU6ZnVuY3Rpb24oYWUscGUsYmUseGUpe3ZhciBWZT1h'@;
put 'LnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxDb29yZHMocGUpO2EuYWN0aXZlV3Q9eGUsZi5tb3VzZURvd249ITEsYS5pbnN0YW5jZS5zZWxlY3Rpb24uaXNJblByb2dyZXNzKCkmJmEuaW5zdGFuY2Uuc2VsZWN0aW9uLmZpbmlzaCgpLGEuaW5zdGFuY2UucnVuSG9va3MoImJlZm9y'@;
put 'ZU9uQ2VsbENvbnRleHRNZW51IixhZSxWZSxiZSksIV81KGFlKSYmKGEuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyT25DZWxsQ29udGV4dE1lbnUiLGFlLFZlLGJlKSxhLmFjdGl2ZVd0PWEuX3d0KX0sb25DZWxsTW91c2VPdXQ6ZnVuY3Rpb24oYWUscGUsYmUseGUpe3ZhciBWZT1hLnRyYW5z'@;
put 'bGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxDb29yZHMocGUpO2EuYWN0aXZlV3Q9eGUsYS5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlT25DZWxsTW91c2VPdXQiLGFlLFZlLGJlKSwhXzUoYWUpJiYoYS5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJPbkNlbGxNb3VzZU91dCIsYWUsVmUsYmUp'@;
put 'LGEuYWN0aXZlV3Q9YS5fd3QpfSxvbkNlbGxNb3VzZU92ZXI6ZnVuY3Rpb24oYWUscGUsYmUseGUpe3ZhciBWZT1hLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxDb29yZHMocGUpLFplPXtyb3c6ITEsY29sdW1uOiExLGNlbGw6ITF9O2EuYWN0aXZlV3Q9eGUsYS5pbnN0YW5jZS5y'@;
put 'dW5Ib29rcygiYmVmb3JlT25DZWxsTW91c2VPdmVyIixhZSxWZSxiZSxaZSksIV81KGFlKSYmKGYubW91c2VEb3duJiZPZmUoYWUse2Nvb3JkczpWZSxzZWxlY3Rpb246YS5pbnN0YW5jZS5zZWxlY3Rpb24sY29udHJvbGxlcjpaZSxjZWxsQ29vcmRzRmFjdG9yeTpmdW5jdGlvbihkdCxndCl7'@;
put 'cmV0dXJuIGEuaW5zdGFuY2UuX2NyZWF0ZUNlbGxDb29yZHMoZHQsZ3QpfX0pLGEuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyT25DZWxsTW91c2VPdmVyIixhZSxWZSxiZSksYS5hY3RpdmVXdD1hLl93dCl9LG9uQ2VsbE1vdXNlVXA6ZnVuY3Rpb24oYWUscGUsYmUseGUpe3ZhciBWZT1hLnRy'@;
put 'YW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxDb29yZHMocGUpO2EuYWN0aXZlV3Q9eGUsYS5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlT25DZWxsTW91c2VVcCIsYWUsVmUsYmUpLCFfNShhZSkmJiFhLmluc3RhbmNlLmlzRGVzdHJveWVkJiYoYS5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0'@;
put 'ZXJPbkNlbGxNb3VzZVVwIixhZSxWZSxiZSksYS5hY3RpdmVXdD1hLl93dCl9LG9uQ2VsbENvcm5lck1vdXNlRG93bjpmdW5jdGlvbihhZSl7YWUucHJldmVudERlZmF1bHQoKSxhLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlck9uQ2VsbENvcm5lck1vdXNlRG93biIsYWUpfSxvbkNlbGxDb3Ju'@;
put 'ZXJEYmxDbGljazpmdW5jdGlvbihhZSl7YWUucHJldmVudERlZmF1bHQoKSxhLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlck9uQ2VsbENvcm5lckRibENsaWNrIixhZSl9LGJlZm9yZURyYXc6ZnVuY3Rpb24oYWUscGUpe3JldHVybiBhLmJlZm9yZVJlbmRlcihhZSxwZSl9LG9uRHJhdzpmdW5j'@;
put 'dGlvbihhZSl7cmV0dXJuIGEuYWZ0ZXJSZW5kZXIoYWUpfSxvblNjcm9sbFZlcnRpY2FsbHk6ZnVuY3Rpb24oKXtyZXR1cm4gYS5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5Iil9LG9uU2Nyb2xsSG9yaXpvbnRhbGx5OmZ1bmN0aW9uKCl7cmV0dXJuIGEuaW5zdGFu'@;
put 'Y2UucnVuSG9va3MoImFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5Iil9LG9uQmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXMiKX0sb25CZWZvcmVIaWdobGlnaHRpbmdSb3dIZWFk'@;
put 'ZXI6ZnVuY3Rpb24oYWUscGUsYmUpe3ZhciB4ZT1hLmluc3RhbmNlLnJvd0luZGV4TWFwcGVyLFZlPXhlLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoYWUpLFplPWEuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZUhpZ2hsaWdodGluZ1Jvd0hlYWRlciIsVmUscGUsYmUpO3JldHVybiB4'@;
put 'ZS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHhlLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChaZSwxKSl9LG9uQmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyOmZ1bmN0aW9uKGFlLHBlLGJlKXt2YXIgeGU9YS5pbnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlcixWZT14ZS5nZXRW'@;
put 'aXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGFlKSxaZT1hLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXIiLFZlLHBlLGJlKTtyZXR1cm4geGUuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh4ZS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoWmUs'@;
put 'MSkpfSxvbkFmdGVyRHJhd1NlbGVjdGlvbjpmdW5jdGlvbihhZSxwZSxiZSl7dmFyIHhlLFplPURNKGEudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbEluZGV4KGFlLHBlKSwyKSxsdD1aZVswXSxkdD1aZVsxXSxndD1hLmluc3RhbmNlLnNlbGVjdGlvbi5nZXRTZWxlY3RlZFJhbmdl'@;
put 'KCksanQ9Z3Quc2l6ZSgpO2lmKGp0PjApe3ZhciBYdD1ndC5wZWVrQnlJbmRleCgoYmU/PzApKzEtanQpO3hlPVtYdC5mcm9tLnJvdyxYdC5mcm9tLmNvbCxYdC50by5yb3csWHQudG8uY29sXX1yZXR1cm4gYS5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJEcmF3U2VsZWN0aW9uIixsdCxkdCx4'@;
put 'ZSxiZSl9LG9uQmVmb3JlRHJhd0JvcmRlcnM6ZnVuY3Rpb24oYWUscGUpe3ZhciBiZT1ETShhZSw0KSxWZT1iZVsxXSxaZT1iZVsyXSxsdD1iZVszXSxkdD1bYS5pbnN0YW5jZS5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGJlWzBdKSxhLmluc3RhbmNlLmNv'@;
put 'bHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoVmUpLGEuaW5zdGFuY2Uucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChaZSksYS5pbnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4'@;
put 'KGx0KV07cmV0dXJuIGEuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZURyYXdCb3JkZXJzIixkdCxwZSl9LG9uQmVmb3JlVG91Y2hTY3JvbGw6ZnVuY3Rpb24oKXtyZXR1cm4gYS5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlVG91Y2hTY3JvbGwiKX0sb25BZnRlck1vbWVudHVtU2Nyb2xsOmZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIGEuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyTW9tZW50dW1TY3JvbGwiKX0sb25CZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGg6ZnVuY3Rpb24oYWUscGUpe3ZhciBiZT1hLmluc3RhbmNlLmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxl'@;
put 'SW5kZXgocGUpO3JldHVybiBhLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGgiLGFlLGJlKX0sb25Nb2RpZnlSb3dIZWFkZXJXaWR0aDpmdW5jdGlvbihhZSl7cmV0dXJuIGEuaW5zdGFuY2UucnVuSG9va3MoIm1vZGlmeVJvd0hlYWRlcldpZHRoIixhZSl9'@;
put 'LG9uTW9kaWZ5R2V0Q2VsbENvb3JkczpmdW5jdGlvbihhZSxwZSxiZSl7dmFyIHhlPWEuaW5zdGFuY2Uucm93SW5kZXhNYXBwZXIsVmU9YS5pbnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlcixaZT1wZT49MD9WZS5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHBlKTpwZSxsdD1hZT49MD94'@;
put 'ZS5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGFlKTphZSxkdD1hLmluc3RhbmNlLnJ1bkhvb2tzKCJtb2RpZnlHZXRDZWxsQ29vcmRzIixsdCxaZSxiZSk7aWYoQXJyYXkuaXNBcnJheShkdCkpe3ZhciBndD1ETShkdCw0KSxqdD1ndFswXSxybj1ndFsxXSxYdD1ndFsyXSx5bj1ndFsz'@;
put 'XTtyZXR1cm5banQ+PTA/eGUuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh4ZS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoanQsMSkpOmp0LHJuPj0wP1ZlLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoVmUuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHJuLDEpKTpybixYdD49'@;
put 'MD94ZS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHhlLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChYdCwtMSkpOlh0LHluPj0wP1ZlLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoVmUuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHluLC0xKSk6eW5dfX0sdmlld3BvcnRSb3dD'@;
put 'YWxjdWxhdG9yT3ZlcnJpZGU6ZnVuY3Rpb24oYWUpe3ZhciBwZT1hLnNldHRpbmdzLnZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0O2lmKCJhdXRvIj09PXBlJiZhLnNldHRpbmdzLmZpeGVkUm93c1RvcCYmKHBlPTEwKSxwZT4wfHwiYXV0byI9PT1wZSl7dmFyIGJlPWEuY291bnRSZW5kZXJh'@;
put 'YmxlUm93cygpLHhlPWFlLnN0YXJ0Um93LFZlPWFlLmVuZFJvdztpZigibnVtYmVyIj09dHlwZW9mIHBlKWFlLnN0YXJ0Um93PU1hdGgubWF4KHhlLXBlLDApLGFlLmVuZFJvdz1NYXRoLm1pbihWZStwZSxiZS0xKTtlbHNlIGlmKCJhdXRvIj09PXBlKXt2YXIgWmU9TWF0aC5jZWlsKFZlL2Jl'@;
put 'KjEyKTthZS5zdGFydFJvdz1NYXRoLm1heCh4ZS1aZSwwKSxhZS5lbmRSb3c9TWF0aC5taW4oVmUrWmUsYmUtMSl9fWEuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyVmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGUiLGFlKX0sdmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGU6ZnVu'@;
put 'Y3Rpb24oYWUpe3ZhciBwZT1hLnNldHRpbmdzLnZpZXdwb3J0Q29sdW1uUmVuZGVyaW5nT2Zmc2V0O2lmKCJhdXRvIj09PXBlJiZhLnNldHRpbmdzLmZpeGVkQ29sdW1uc1N0YXJ0JiYocGU9MTApLHBlPjB8fCJhdXRvIj09PXBlKXt2YXIgYmU9YS5jb3VudFJlbmRlcmFibGVDb2x1bW5zKCks'@;
put 'eGU9YWUuc3RhcnRDb2x1bW4sVmU9YWUuZW5kQ29sdW1uO2lmKCJudW1iZXIiPT10eXBlb2YgcGUmJihhZS5zdGFydENvbHVtbj1NYXRoLm1heCh4ZS1wZSwwKSxhZS5lbmRDb2x1bW49TWF0aC5taW4oVmUrcGUsYmUtMSkpLCJhdXRvIj09PXBlKXt2YXIgWmU9TWF0aC5jZWlsKFZlL2JlKjYp'@;
put 'O2FlLnN0YXJ0Q29sdW1uPU1hdGgubWF4KHhlLVplLDApLGFlLmVuZENvbHVtbj1NYXRoLm1pbihWZStaZSxiZS0xKX19YS5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJWaWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZSIsYWUpfSxyb3dIZWFkZXJXaWR0aDpmdW5jdGlvbigpe3JldHVy'@;
put 'biBhLnNldHRpbmdzLnJvd0hlYWRlcldpZHRofSxjb2x1bW5IZWFkZXJIZWlnaHQ6ZnVuY3Rpb24oKXt2YXIgYWU9YS5pbnN0YW5jZS5ydW5Ib29rcygibW9kaWZ5Q29sdW1uSGVhZGVySGVpZ2h0Iik7cmV0dXJuIGEuc2V0dGluZ3MuY29sdW1uSGVhZGVySGVpZ2h0fHxhZX19O3RoaXMuaW5z'@;
put 'dGFuY2UucnVuSG9va3MoImJlZm9yZUluaXRXYWxrb250YWJsZSIsZCksdGhpcy5fd3Q9bmV3ICRldChkKSx0aGlzLmFjdGl2ZVd0PXRoaXMuX3d0O3ZhciBoPXRoaXMuX3d0Lnd0VGFibGUuc3ByZWFkZXIsbT10aGlzLmluc3RhbmNlLnJvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVj'@;
put 'dCgpO3RoaXMuc2V0TGFzdFNpemUobS53aWR0aCxtLmhlaWdodCksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihoLCJtb3VzZWRvd24iLGZ1bmN0aW9uKFgpe1gudGFyZ2V0PT09aCYmMz09PVgud2hpY2gmJlguc3RvcFByb3BhZ2F0aW9uKCl9KSx0aGlzLmV2ZW50TWFuYWdl'@;
put 'ci5hZGRFdmVudExpc3RlbmVyKGgsImNvbnRleHRtZW51IixmdW5jdGlvbihYKXtYLnRhcmdldD09PWgmJjM9PT1YLndoaWNoJiZYLnN0b3BQcm9wYWdhdGlvbigpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmluc3RhbmNlLnJvb3REb2N1bWVudC5kb2N1bWVu'@;
put 'dEVsZW1lbnQsImNsaWNrIixmdW5jdGlvbigpe2Euc2V0dGluZ3Mub2JzZXJ2ZURPTVZpc2liaWxpdHkmJmEuX3d0LmRyYXdJbnRlcnJ1cHRlZCYmKGEuaW5zdGFuY2UuZm9yY2VGdWxsUmVuZGVyPSEwLGEucmVuZGVyKCkpfSl9fSx7a2V5OiJpc1RleHRTZWxlY3Rpb25BbGxvd2VkIix2YWx1'@;
put 'ZTpmdW5jdGlvbihhKXtpZigkUyhhKSlyZXR1cm4hMDt2YXIgZj1BNChhLHRoaXMuaW5zdGFuY2Uudmlldy5fd3Qud3RUYWJsZS5zcHJlYWRlcik7cmV0dXJuISEoITA9PT10aGlzLnNldHRpbmdzLmZyYWdtZW50U2VsZWN0aW9uJiZmfHwiY2VsbCI9PT10aGlzLnNldHRpbmdzLmZyYWdtZW50'@;
put 'U2VsZWN0aW9uJiZ0aGlzLmlzU2VsZWN0ZWRPbmx5Q2VsbCgpJiZmfHwhdGhpcy5zZXR0aW5ncy5mcmFnbWVudFNlbGVjdGlvbiYmdGhpcy5pc0NlbGxFZGl0ZWQoKSYmdGhpcy5pc1NlbGVjdGVkT25seUNlbGwoKSl9fSx7a2V5OiJpc01vdXNlRG93biIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gRTUuZ2V0KHRoaXMpLm1vdXNlRG93bn19LHtrZXk6ImlzU2VsZWN0ZWRPbmx5Q2VsbCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgYSxmO3JldHVybiBudWxsIT09KGE9bnVsbD09PShmPXRoaXMuaW5zdGFuY2UuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWY/dm9pZCAwOmYu'@;
put 'aXNTaW5nbGUoKSkmJnZvaWQgMCE9PWEmJmF9fSx7a2V5OiJpc0NlbGxFZGl0ZWQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5pbnN0YW5jZS5nZXRBY3RpdmVFZGl0b3IoKTtyZXR1cm4gYSYmYS5pc09wZW5lZCgpfX0se2tleToiYmVmb3JlUmVuZGVyIix2YWx1ZTpmdW5jdGlvbihh'@;
put 'LGYpe2EmJnRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZVZpZXdSZW5kZXIiLHRoaXMuaW5zdGFuY2UuZm9yY2VGdWxsUmVuZGVyLGYpfX0se2tleToiYWZ0ZXJSZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKGEpe2EmJnRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyVmlld1JlbmRlciIs'@;
put 'dGhpcy5pbnN0YW5jZS5mb3JjZUZ1bGxSZW5kZXIpfX0se2tleToiYXBwZW5kUm93SGVhZGVyIix2YWx1ZTpmdW5jdGlvbihhLGYpe2lmKGYuZmlyc3RDaGlsZCl7dmFyIGQ9Zi5maXJzdENoaWxkO2lmKCFZbyhkLCJyZWxhdGl2ZSIpKXJldHVybiBGZChmKSx2b2lkIHRoaXMuYXBwZW5kUm93'@;
put 'SGVhZGVyKGEsZik7dGhpcy51cGRhdGVDZWxsSGVhZGVyKGQucXVlcnlTZWxlY3RvcigiLnJvd0hlYWRlciIpLGEsdGhpcy5pbnN0YW5jZS5nZXRSb3dIZWFkZXIpfWVsc2V7dmFyIGg9dGhpcy5pbnN0YW5jZSxtPWgucm9vdERvY3VtZW50LF89aC5nZXRSb3dIZWFkZXIsTz1tLmNyZWF0ZUVs'@;
put 'ZW1lbnQoImRpdiIpLFg9bS5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ty5jbGFzc05hbWU9InJlbGF0aXZlIixYLmNsYXNzTmFtZT0icm93SGVhZGVyIix0aGlzLnVwZGF0ZUNlbGxIZWFkZXIoWCxhLF8pLE8uYXBwZW5kQ2hpbGQoWCksZi5hcHBlbmRDaGlsZChPKX10aGlzLmluc3RhbmNlLnJ1'@;
put 'bkhvb2tzKCJhZnRlckdldFJvd0hlYWRlciIsYSxmKX19LHtrZXk6ImFwcGVuZENvbEhlYWRlciIsdmFsdWU6ZnVuY3Rpb24oYSxmKXt2YXIgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06dGhpcy5pbnN0YW5jZS5nZXRDb2xIZWFkZXIs'@;
put 'aD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106MDtpZihmLmZpcnN0Q2hpbGQpe3ZhciBtPWYuZmlyc3RDaGlsZDtZbyhtLCJyZWxhdGl2ZSIpP3RoaXMudXBkYXRlQ2VsbEhlYWRlcihtLnF1ZXJ5U2VsZWN0b3IoIi5jb2xIZWFkZXIiKSxh'@;
put 'LGQsaCk6KEZkKGYpLHRoaXMuYXBwZW5kQ29sSGVhZGVyKGEsZixkLGgpKX1lbHNle3ZhciBfPXRoaXMuaW5zdGFuY2Uucm9vdERvY3VtZW50LE89Xy5jcmVhdGVFbGVtZW50KCJkaXYiKSxYPV8uY3JlYXRlRWxlbWVudCgic3BhbiIpO08uY2xhc3NOYW1lPSJyZWxhdGl2ZSIsWC5jbGFzc05h'@;
put 'bWU9ImNvbEhlYWRlciIsdGhpcy51cGRhdGVDZWxsSGVhZGVyKFgsYSxkLGgpLE8uYXBwZW5kQ2hpbGQoWCksZi5hcHBlbmRDaGlsZChPKX10aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlckdldENvbEhlYWRlciIsYSxmLGgpfX0se2tleToidXBkYXRlQ2VsbEhlYWRlciIsdmFsdWU6ZnVu'@;
put 'Y3Rpb24oYSxmLGQpe3ZhciBoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTowLG09ZixfPXRoaXMuX3d0Lnd0T3ZlcmxheXMuZ2V0UGFyZW50T3ZlcmxheShhKXx8dGhpcy5fd3Q7YS5wYXJlbnROb2RlJiYoWW8oYSwiY29sSGVhZGVyIik/'@;
put 'bT1fLnd0VGFibGUuY29sdW1uRmlsdGVyLnNvdXJjZVRvUmVuZGVyZWQoZik6WW8oYSwicm93SGVhZGVyIikmJihtPV8ud3RUYWJsZS5yb3dGaWx0ZXIuc291cmNlVG9SZW5kZXJlZChmKSkpLG0+LTE/djUoYSxkKGYsaCkpOihPNChhLFN0cmluZy5mcm9tQ2hhckNvZGUoMTYwKSksZ2koYSwi'@;
put 'Y29ybmVySGVhZGVyIikpfX0se2tleToibWF4aW11bVZpc2libGVFbGVtZW50V2lkdGgiLHZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBkPXRoaXMuX3d0Lnd0Vmlld3BvcnQuZ2V0V29ya3NwYWNlV2lkdGgoKS1hO3JldHVybiBkPjA/ZDowfX0se2tleToibWF4aW11bVZpc2libGVFbGVtZW50SGVp'@;
put 'Z2h0Iix2YWx1ZTpmdW5jdGlvbihhKXt2YXIgZD10aGlzLl93dC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZUhlaWdodCgpLWE7cmV0dXJuIGQ+MD9kOjB9fSx7a2V5OiJzZXRMYXN0U2l6ZSIsdmFsdWU6ZnVuY3Rpb24oYSxmKXt2YXIgZD1FNS5nZXQodGhpcyksaD1bYSxmXTtkLmxhc3RXaWR0'@;
put 'aD1oWzBdLGQubGFzdEhlaWdodD1oWzFdfX0se2tleToiZ2V0TGFzdFNpemUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGE9RTUuZ2V0KHRoaXMpO3JldHVybnt3aWR0aDphLmxhc3RXaWR0aCxoZWlnaHQ6YS5sYXN0SGVpZ2h0fX19LHtrZXk6ImdldEZpcnN0RnVsbHlWaXNpYmxlUm93Iix2YWx1'@;
put 'ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc3RhbmNlLnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5pbnN0YW5jZS52aWV3Ll93dC53dFNjcm9sbC5nZXRGaXJzdFZpc2libGVSb3coKSl9fSx7a2V5OiJnZXRMYXN0RnVsbHlWaXNpYmxlUm93Iix2'@;
put 'YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc3RhbmNlLnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5pbnN0YW5jZS52aWV3Ll93dC53dFNjcm9sbC5nZXRMYXN0VmlzaWJsZVJvdygpKX19LHtrZXk6ImdldEZpcnN0RnVsbHlWaXNpYmxlQ29s'@;
put 'dW1uIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc3RhbmNlLmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5pbnN0YW5jZS52aWV3Ll93dC53dFNjcm9sbC5nZXRGaXJzdFZpc2libGVDb2x1bW4oKSl9fSx7a2V5OiJnZXRMYXN0RnVs'@;
put 'bHlWaXNpYmxlQ29sdW1uIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc3RhbmNlLmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5pbnN0YW5jZS52aWV3Ll93dC53dFNjcm9sbC5nZXRMYXN0VmlzaWJsZUNvbHVtbigpKX19LHtrZXk6'@;
put 'ImdldENvbHVtbkhlYWRlcnNDb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gSGZlKHRoaXMsUFcpfX0se2tleToiZ2V0Um93SGVhZGVyc0NvdW50Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBIZmUodGhpcyxGVyl9fSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMu'@;
put 'X3d0LmRlc3Ryb3koKSx0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCl9fV0pLGx9KCk7Y29uc3QgZHR0PWZ0dDtmdW5jdGlvbiBIVyhsKXtyZXR1cm4oSFc9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0'@;
put 'dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX12YXIgQmZlPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZ'@;
put 'WiIsTlc9QmZlLmxlbmd0aDtmdW5jdGlvbiBWUihsKXtmb3IodmFyIGYsYz1sKzEsYT0iIjtjPjA7KWY9KGMtMSklTlcsYT1TdHJpbmcuZnJvbUNoYXJDb2RlKDY1K2YpK2EsYz1wYXJzZUludCgoYy1mKS9OVywxMCk7cmV0dXJuIGF9ZnVuY3Rpb24gaHR0KGwpe3ZhciBjPTA7aWYobClmb3Io'@;
put 'dmFyIGE9MCxmPWwubGVuZ3RoLTE7YTxsLmxlbmd0aDthKz0xLGYtPTEpYys9TWF0aC5wb3coTlcsZikqKEJmZS5pbmRleE9mKGxbYV0pKzEpO3JldHVybiBjLTF9ZnVuY3Rpb24gcHR0KCl7dmFyIGYsZCxsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3Vt'@;
put 'ZW50c1swXToxMDAsYz1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06NCxhPVtdO2ZvcihmPTA7ZjxsO2YrKyl7dmFyIGg9W107Zm9yKGQ9MDtkPGM7ZCsrKWgucHVzaChWUihkKSsoZisxKSk7YS5wdXNoKGgpfXJldHVybiBhfWZ1bmN0aW9u'@;
put 'IG10dCgpe3ZhciBmLGQsbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MTAwLGM9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjQsYT1bXTtmb3IoZj0wO2Y8bDtmKyspe3ZhciBoPXt9'@;
put 'O2ZvcihkPTA7ZDxjO2QrKyloWyJwcm9wIi5jb25jYXQoZCldPVZSKGQpKyhmKzEpO2EucHVzaChoKX1yZXR1cm4gYX1mdW5jdGlvbiBndHQobCxjKXtmb3IodmFyIGYsYT1bXSxkPTA7ZDxsO2QrKyl7Zj1bXTtmb3IodmFyIGg9MDtoPGM7aCsrKWYucHVzaCgiIik7YS5wdXNoKGYpfXJldHVy'@;
put 'biBhfWZ1bmN0aW9uIFZXKGwpe3ZhciBjPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowLGE9bCxmPVtdO3JldHVybighQXJyYXkuaXNBcnJheShsKXx8IUFycmF5LmlzQXJyYXkobFswXSkpJiYoYT1bbF0pLGEuZm9yRWFjaChmdW5jdGlv'@;
put 'bihkLGgpe0FycmF5LmlzQXJyYXkoZCk/ZC5mb3JFYWNoKGZ1bmN0aW9uKG0sXyl7Zi5wdXNoKFtoK2MsXyxtXSl9KTpPYmplY3Qua2V5cyhkKS5mb3JFYWNoKGZ1bmN0aW9uKG0pe2YucHVzaChbaCtjLG0sZFttXV0pfSl9KSxmfWZ1bmN0aW9uIEJXKGwpe3ZhciBjPTA7cmV0dXJuIEFycmF5'@;
put 'LmlzQXJyYXkobCkmJihsWzBdJiZBcnJheS5pc0FycmF5KGxbMF0pP2M9bFswXS5sZW5ndGg6bFswXSYmcGEobFswXSkmJihjPVVJKGxbMF0pKSksY31mdW5jdGlvbiBqZmUobCl7cmV0dXJuISEoQXJyYXkuaXNBcnJheShsKSYmbC5sZW5ndGgmJmwuZXZlcnkoZnVuY3Rpb24oYyl7cmV0dXJu'@;
put 'IEFycmF5LmlzQXJyYXkoYyl9KSl9ZnVuY3Rpb24gemZlKGwpe3JldHVybiEhKEFycmF5LmlzQXJyYXkobCkmJmwubGVuZ3RoJiZsLmV2ZXJ5KGZ1bmN0aW9uKGMpe3JldHVybiJvYmplY3QiPT09SFcoYykmJiFBcnJheS5pc0FycmF5KGMpJiZudWxsIT09Y30pKX1mdW5jdGlvbiBJTShsKXty'@;
put 'ZXR1cm4oSU09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5'@;
put 'bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiBVZmUobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4g'@;
put 'ZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLGJ0dChmLmtleSksZil9fWZ1bmN0aW9uIGJ0dChsKXt2YXIgYz1mdW5jdGlvbiBfdHQobCxjKXtpZigib2JqZWN0IiE9PUlNKGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07'@;
put 'aWYodm9pZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PUlNKGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJp'@;
put 'bmc6TnVtYmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1JTShjKT9jOlN0cmluZyhjKX12YXIgd3R0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbChjKXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W107KGZ1bmN0'@;
put 'aW9uIHZ0dChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyxsKSx0aGlzLmhvdD1jLHRoaXMuZGF0YT1hLHRoaXMuZGF0YVR5cGU9ImFycmF5Iix0aGlzLmNvbFRvUHJvcD1mdW5j'@;
put 'dGlvbigpe30sdGhpcy5wcm9wVG9Db2w9ZnVuY3Rpb24oKXt9fXJldHVybiBmdW5jdGlvbiB5dHQobCxjLGEpe2MmJlVmZShsLnByb3RvdHlwZSxjKSxhJiZVZmUobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0obCxbe2tleToibW9kaWZ5'@;
put 'Um93RGF0YSIsdmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGY7cmV0dXJuIHRoaXMuaG90Lmhhc0hvb2soIm1vZGlmeVJvd0RhdGEiKSYmKGY9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeVJvd0RhdGEiLGEpKSx2b2lkIDA9PT1mfHxOdW1iZXIuaXNJbnRlZ2VyKGYpP3RoaXMuZGF0YVthXTpmfX0s'@;
put 'e2tleToiZ2V0RGF0YSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhJiYwIT09dGhpcy5kYXRhLmxlbmd0aD90aGlzLmdldEJ5UmFuZ2UobnVsbCxudWxsLGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0pOnRoaXMuZGF0YX19'@;
put 'LHtrZXk6InNldERhdGEiLHZhbHVlOmZ1bmN0aW9uKGEpe3RoaXMuZGF0YT1hfX0se2tleToiZ2V0QXRDb2x1bW4iLHZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBmPXRoaXMsZD1bXTtyZXR1cm4gUm4odGhpcy5kYXRhLGZ1bmN0aW9uKGgsbSl7dmFyIF89Zi5nZXRBdENlbGwobSxhKTtkLnB1c2go'@;
put 'Xyl9KSxkfX0se2tleToiZ2V0QXRSb3ciLHZhbHVlOmZ1bmN0aW9uKGEsZixkKXt2YXIgaD10aGlzLG09YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXSxfPXZvaWQgMD09PWYmJnZvaWQgMD09PWQsTz1udWxsLFg9bnVsbDtpZihPPXRoaXMu'@;
put 'bW9kaWZ5Um93RGF0YShhKSxBcnJheS5pc0FycmF5KE8pKVg9W10sXz9PLmZvckVhY2goZnVuY3Rpb24oYmUseGUpe1hbeGVdPWguZ2V0QXRQaHlzaWNhbENlbGwoYSx4ZSxPKX0pOl9vKGYsZCxmdW5jdGlvbihiZSl7WFtiZS1mXT1oLmdldEF0UGh5c2ljYWxDZWxsKGEsYmUsTyl9KTtlbHNl'@;
put 'IGlmKHBhKE8pfHxQbChPKSlpZihYPW0/W106e30sIV98fG0pe3ZhciBwZT10aGlzLmNvdW50Rmlyc3RSb3dLZXlzKCktMTtfbygwLHBlLGZ1bmN0aW9uKGJlKXt2YXIgeGU9aC5jb2xUb1Byb3AoYmUpO2lmKGJlPj0oZnx8MCkmJmJlPD0oZHx8cGUpJiYhTnVtYmVyLmlzSW50ZWdlcih4ZSkp'@;
put 'e3ZhciBWZT1oLmdldEF0UGh5c2ljYWxDZWxsKGEseGUsTyk7bT9YLnB1c2goVmUpOnpJKFgseGUsVmUpfX0pfWVsc2UgbWEoTyxmdW5jdGlvbihiZSx4ZSl7ekkoWCx4ZSxoLmdldEF0UGh5c2ljYWxDZWxsKGEseGUsTykpfSk7cmV0dXJuIFh9fSx7a2V5OiJzZXRBdENlbGwiLHZhbHVlOmZ1'@;
put 'bmN0aW9uKGEsZixkKXtpZighKGE+PXRoaXMuY291bnRSb3dzKCl8fGY+PXRoaXMuY291bnRGaXJzdFJvd0tleXMoKSkpe2lmKHRoaXMuaG90Lmhhc0hvb2soIm1vZGlmeVNvdXJjZURhdGEiKSl7dmFyIGg9ZzUoZCk7dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeVNvdXJjZURhdGEiLGEsZixo'@;
put 'LCJzZXQiKSxoLmlzVG91Y2hlZCgpJiYoZD1oLnZhbHVlKX1OdW1iZXIuaXNJbnRlZ2VyKGYpP3RoaXMuZGF0YVthXVtmXT1kOnpJKHRoaXMuZGF0YVthXSxmLGQpfX19LHtrZXk6ImdldEF0UGh5c2ljYWxDZWxsIix2YWx1ZTpmdW5jdGlvbihhLGYsZCl7dmFyIGg9bnVsbDtpZihkJiYoaD0i'@;
put 'c3RyaW5nIj09dHlwZW9mIGY/WWNlKGQsZik6ImZ1bmN0aW9uIj09dHlwZW9mIGY/ZihkKTpkW2ZdKSx0aGlzLmhvdC5oYXNIb29rKCJtb2RpZnlTb3VyY2VEYXRhIikpe3ZhciBtPWc1KGgpO3RoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlTb3VyY2VEYXRhIixhLGYsbSwiZ2V0IiksbS5pc1Rv'@;
put 'dWNoZWQoKSYmKGg9bS52YWx1ZSl9cmV0dXJuIGh9fSx7a2V5OiJnZXRBdENlbGwiLHZhbHVlOmZ1bmN0aW9uKGEsZil7dmFyIGQ9dGhpcy5tb2RpZnlSb3dEYXRhKGEpO3JldHVybiB0aGlzLmdldEF0UGh5c2ljYWxDZWxsKGEsdGhpcy5jb2xUb1Byb3AoZiksZCl9fSx7a2V5OiJnZXRCeVJh'@;
put 'bmdlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMsZj1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbCxkPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsLGg9YXJndW1l'@;
put 'bnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxtPSExLF89bnVsbCxPPW51bGwsWD1udWxsLGFlPW51bGw7bnVsbD09PWZ8fG51bGw9PT1kPyhtPSEwLF89MCxYPXRoaXMuY291bnRSb3dzKCktMSk6KF89TWF0aC5taW4oZi5yb3csZC5yb3cpLE89TWF0'@;
put 'aC5taW4oZi5jb2wsZC5jb2wpLFg9TWF0aC5tYXgoZi5yb3csZC5yb3cpLGFlPU1hdGgubWF4KGYuY29sLGQuY29sKSk7dmFyIHBlPVtdO3JldHVybiBfbyhfLFgsZnVuY3Rpb24oYmUpe3BlLnB1c2gobT9hLmdldEF0Um93KGJlLHZvaWQgMCx2b2lkIDAsaCk6YS5nZXRBdFJvdyhiZSxPLGFl'@;
put 'LGgpKX0pLHBlfX0se2tleToiY291bnRSb3dzIix2YWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMuaG90Lmhhc0hvb2soIm1vZGlmeVNvdXJjZUxlbmd0aCIpKXt2YXIgYT10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5U291cmNlTGVuZ3RoIik7aWYoTnVtYmVyLmlzSW50ZWdlcihhKSlyZXR1cm4g'@;
put 'YX1yZXR1cm4gdGhpcy5kYXRhLmxlbmd0aH19LHtrZXk6ImNvdW50Rmlyc3RSb3dLZXlzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBCVyh0aGlzLmRhdGEpfX0se2tleToiZGVzdHJveSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmRhdGE9bnVsbCx0aGlzLmhvdD1udWxsfX1dKSxsfSgpO2Nv'@;
put 'bnN0IEN0dD13dHQ7VCgyMDI3MyksVCg1NDc0MCk7dmFyIFpmZT17X2xvY2FsSG9va3M6T2JqZWN0LmNyZWF0ZShudWxsKSxhZGRMb2NhbEhvb2s6ZnVuY3Rpb24oYyxhKXtyZXR1cm4gdGhpcy5fbG9jYWxIb29rc1tjXXx8KHRoaXMuX2xvY2FsSG9va3NbY109W10pLHRoaXMuX2xvY2FsSG9v'@;
put 'a3NbY10ucHVzaChhKSx0aGlzfSxydW5Mb2NhbEhvb2tzOmZ1bmN0aW9uKGMsYSxmLGQsaCxtLF8pe2lmKHRoaXMuX2xvY2FsSG9va3NbY10pZm9yKHZhciBPPXRoaXMuX2xvY2FsSG9va3NbY10ubGVuZ3RoLFg9MDtYPE87WCsrKUpJKHRoaXMuX2xvY2FsSG9va3NbY11bWF0sdGhpcyxhLGYs'@;
put 'ZCxoLG0sXyl9LGNsZWFyTG9jYWxIb29rczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sb2NhbEhvb2tzPXt9LHRoaXN9fTtIaChaZmUsIk1JWElOX05BTUUiLCJsb2NhbEhvb2tzIix7d3JpdGFibGU6ITEsZW51bWVyYWJsZTohMX0pO2NvbnN0IFcwPVpmZTtmdW5jdGlvbiBSTShsKXtyZXR1'@;
put 'cm4oUk09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJv'@;
put 'bCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiBZZmUobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYm'@;
put 'KGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLEV0dChmLmtleSksZil9fWZ1bmN0aW9uIEV0dChsKXt2YXIgYz1mdW5jdGlvbiB4dHQobCxjKXtpZigib2JqZWN0IiE9PVJNKGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYo'@;
put 'dm9pZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PVJNKGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6'@;
put 'TnVtYmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1STShjKT9jOlN0cmluZyhjKX12YXIgeDU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKCl7dmFyIGM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGw7KGZ1bmN0aW9u'@;
put 'IE10dChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyxsKSx0aGlzLmluZGV4ZWRWYWx1ZXM9W10sdGhpcy5pbml0VmFsdWVPckZuPWN9cmV0dXJuIGZ1bmN0aW9uIGt0dChsLGMs'@;
put 'YSl7YyYmWWZlKGwucHJvdG90eXBlLGMpLGEmJllmZShsLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShsLFt7a2V5OiJnZXRWYWx1ZXMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5kZXhlZFZhbHVlc319LHtrZXk6ImdldFZh'@;
put 'bHVlQXRJbmRleCIsdmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGY9dGhpcy5pbmRleGVkVmFsdWVzO2lmKGE8Zi5sZW5ndGgpcmV0dXJuIGZbYV19fSx7a2V5OiJzZXRWYWx1ZXMiLHZhbHVlOmZ1bmN0aW9uKGEpe3RoaXMuaW5kZXhlZFZhbHVlcz1hLnNsaWNlKCksdGhpcy5ydW5Mb2NhbEhvb2tz'@;
put 'KCJjaGFuZ2UiKX19LHtrZXk6InNldFZhbHVlQXRJbmRleCIsdmFsdWU6ZnVuY3Rpb24oYSxmKXtyZXR1cm4gYTx0aGlzLmluZGV4ZWRWYWx1ZXMubGVuZ3RoJiYodGhpcy5pbmRleGVkVmFsdWVzW2FdPWYsdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiKSwhMCl9fSx7a2V5OiJjbGVhciIs'@;
put 'dmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnNldERlZmF1bHRWYWx1ZXMoKX19LHtrZXk6ImdldExlbmd0aCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRWYWx1ZXMoKS5sZW5ndGh9fSx7a2V5OiJzZXREZWZhdWx0VmFsdWVzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMsZj1h'@;
put 'cmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5pbmRleGVkVmFsdWVzLmxlbmd0aDt0aGlzLmluZGV4ZWRWYWx1ZXMubGVuZ3RoPTAsUGwodGhpcy5pbml0VmFsdWVPckZuKT9fbyhmLTEsZnVuY3Rpb24oZCl7cmV0dXJuIGEuaW5kZXhl'@;
put 'ZFZhbHVlcy5wdXNoKGEuaW5pdFZhbHVlT3JGbihkKSl9KTpfbyhmLTEsZnVuY3Rpb24oKXtyZXR1cm4gYS5pbmRleGVkVmFsdWVzLnB1c2goYS5pbml0VmFsdWVPckZuKX0pLHRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIil9fSx7a2V5OiJpbml0Iix2YWx1ZTpmdW5jdGlvbihhKXtyZXR1'@;
put 'cm4gdGhpcy5zZXREZWZhdWx0VmFsdWVzKGEpLHRoaXMucnVuTG9jYWxIb29rcygiaW5pdCIpLHRoaXN9fSx7a2V5OiJpbnNlcnQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiKX19LHtrZXk6InJlbW92ZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnJ1bkxv'@;
put 'Y2FsSG9va3MoImNoYW5nZSIpfX0se2tleToiZGVzdHJveSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNsZWFyTG9jYWxIb29rcygpLHRoaXMuaW5kZXhlZFZhbHVlcz1udWxsLHRoaXMuaW5pdFZhbHVlT3JGbj1udWxsfX1dKSxsfSgpO2Z1bmN0aW9uIGpXKGwpe3JldHVybiBmdW5jdGlvbiBE'@;
put 'dHQobCl7aWYoQXJyYXkuaXNBcnJheShsKSlyZXR1cm4gelcobCl9KGwpfHxmdW5jdGlvbiBPdHQobCl7aWYodHlwZW9mIFN5bWJvbDwidSImJm51bGwhPWxbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9bFsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKGwpfShsKXx8ZnVuY3Rpb24g'@;
put 'VHR0KGwsYyl7aWYobCl7aWYoInN0cmluZyI9PXR5cGVvZiBsKXJldHVybiB6VyhsLGMpO3ZhciBhPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsKS5zbGljZSg4LC0xKTtpZigiT2JqZWN0Ij09PWEmJmwuY29uc3RydWN0b3ImJihhPWwuY29uc3RydWN0b3IubmFtZSksIk1hcCI9'@;
put 'PT1hfHwiU2V0Ij09PWEpcmV0dXJuIEFycmF5LmZyb20obCk7aWYoIkFyZ3VtZW50cyI9PT1hfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChhKSlyZXR1cm4gelcobCxjKX19KGwpfHxmdW5jdGlvbiBBdHQoKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJ'@;
put 'bnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiB6VyhsLGMpeyhudWxsPT1jfHxj'@;
put 'PmwubGVuZ3RoKSYmKGM9bC5sZW5ndGgpO2Zvcih2YXIgYT0wLGY9bmV3IEFycmF5KGMpO2E8YzthKyspZlthXT1sW2FdO3JldHVybiBmfWZ1bmN0aW9uIFVXKGwsYyxhKXtyZXR1cm5bXS5jb25jYXQoalcobC5zbGljZSgwLGMpKSxqVyhhKSxqVyhsLnNsaWNlKGMpKSl9ZnVuY3Rpb24gTE0o'@;
put 'bCxjKXtyZXR1cm4gRDEobCxmdW5jdGlvbihhKXtyZXR1cm4hMT09PWMuaW5jbHVkZXMoYSl9KX1mdW5jdGlvbiBaVyhsLGMpe3JldHVybiBoYShsLGZ1bmN0aW9uKGEpe3JldHVybiBhLWMuZmlsdGVyKGZ1bmN0aW9uKGYpe3JldHVybiBmPGF9KS5sZW5ndGh9KX1mdW5jdGlvbiBZVyhsLGMp'@;
put 'e3ZhciBhPWNbMF0sZj1jLmxlbmd0aDtyZXR1cm4gaGEobCxmdW5jdGlvbihkKXtyZXR1cm4gZD49YT9kK2Y6ZH0pfWZ1bmN0aW9uIGQ5KGwpe3JldHVybihkOT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXty'@;
put 'ZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIFdmZShsLGMpe2Zvcih2YXIgYT0wO2E8'@;
put 'Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsTHR0KGYua2V5KSxmKX19ZnVuY3Rpb24gTHR0KGwpe3ZhciBjPWZ1'@;
put 'bmN0aW9uIFB0dChsLGMpe2lmKCJvYmplY3QiIT09ZDkobCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09ZDkoZikpcmV0dXJuIGY7dGhyb3cgbmV3'@;
put 'IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PWQ5KGMpP2M6U3RyaW5nKGMpfWZ1bmN0aW9uIFBNKCl7cmV0dXJu'@;
put 'IFBNPXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdC5nZXQ/UmVmbGVjdC5nZXQuYmluZCgpOmZ1bmN0aW9uKGMsYSxmKXt2YXIgZD1mdW5jdGlvbiBGdHQobCxjKXtmb3IoOyFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobCxjKSYmbnVsbCE9PShsPUE1KGwpKTspO3Jl'@;
put 'dHVybiBsfShjLGEpO2lmKGQpe3ZhciBoPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZCxhKTtyZXR1cm4gaC5nZXQ/aC5nZXQuY2FsbChhcmd1bWVudHMubGVuZ3RoPDM/YzpmKTpoLnZhbHVlfX0sUE0uYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIFdXKGwsYyl7cmV0'@;
put 'dXJuKFdXPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGYsZCl7cmV0dXJuIGYuX19wcm90b19fPWQsZn0pKGwsYyl9ZnVuY3Rpb24gQTUobCl7cmV0dXJuKEE1PU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90'@;
put 'eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGEpe3JldHVybiBhLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpfSkobCl9VGwoeDUsVzApO3ZhciBHZmU9ZnVuY3Rpb24obCl7IWZ1bmN0aW9uIEh0dChsLGMpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjJiZudWxsIT09Yyl0aHJvdyBu'@;
put 'ZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2wucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYyYmYy5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpsLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmpl'@;
put 'Y3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxjJiZXVyhsLGMpfShhLGwpO3ZhciBjPWZ1bmN0aW9uIE50dChsKXt2YXIgYz1mdW5jdGlvbiBqdHQoKXtpZih0eXBlb2YgUmVmbGVjdD4idSJ8fCFSZWZsZWN0LmNvbnN0cnVjdHx8UmVmbGVjdC5jb25zdHJ1'@;
put 'Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSxmdW5jdGlvbigpe30pKSwhMH1jYXRjaHtyZXR1cm4hMX19KCk7cmV0'@;
put 'dXJuIGZ1bmN0aW9uKCl7dmFyIGQsZj1BNShsKTtpZihjKXt2YXIgaD1BNSh0aGlzKS5jb25zdHJ1Y3RvcjtkPVJlZmxlY3QuY29uc3RydWN0KGYsYXJndW1lbnRzLGgpfWVsc2UgZD1mLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24gVnR0KGwsYyl7aWYoYyYmKCJvYmpl'@;
put 'Y3QiPT09ZDkoYyl8fCJmdW5jdGlvbiI9PXR5cGVvZiBjKSlyZXR1cm4gYztpZih2b2lkIDAhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uIEJ0dChsKXtpZih2'@;
put 'b2lkIDA9PT1sKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGx9KGwpfSh0aGlzLGQpfX0oYSk7ZnVuY3Rpb24gYSgpe3JldHVybiBmdW5jdGlvbiBJdHQobCxjKXtpZigh'@;
put 'KGwgaW5zdGFuY2VvZiBjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxhKSxjLmNhbGwodGhpcyxmdW5jdGlvbihmKXtyZXR1cm4gZn0pfXJldHVybiBmdW5jdGlvbiBSdHQobCxjLGEpe2MmJldmZShsLnByb3RvdHlwZSxj'@;
put 'KSxhJiZXZmUobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0oYSxbe2tleToiaW5zZXJ0Iix2YWx1ZTpmdW5jdGlvbihkLGgpe3ZhciBtPVlXKHRoaXMuaW5kZXhlZFZhbHVlcyxoKTt0aGlzLmluZGV4ZWRWYWx1ZXM9VVcobSxkLGgpLFBN'@;
put 'KEE1KGEucHJvdG90eXBlKSwiaW5zZXJ0Iix0aGlzKS5jYWxsKHRoaXMsZCxoKX19LHtrZXk6InJlbW92ZSIsdmFsdWU6ZnVuY3Rpb24oZCl7dmFyIGg9TE0odGhpcy5pbmRleGVkVmFsdWVzLGQpO3RoaXMuaW5kZXhlZFZhbHVlcz1aVyhoLGQpLFBNKEE1KGEucHJvdG90eXBlKSwicmVtb3Zl'@;
put 'Iix0aGlzKS5jYWxsKHRoaXMsZCl9fV0pLGF9KHg1KTtmdW5jdGlvbiBHVyhsKXtyZXR1cm4gZnVuY3Rpb24gWXR0KGwpe2lmKEFycmF5LmlzQXJyYXkobCkpcmV0dXJuICRXKGwpfShsKXx8ZnVuY3Rpb24gWnR0KGwpe2lmKHR5cGVvZiBTeW1ib2w8InUiJiZudWxsIT1sW1N5bWJvbC5pdGVy'@;
put 'YXRvcl18fG51bGwhPWxbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbShsKX0obCl8fGZ1bmN0aW9uIFV0dChsLGMpe2lmKGwpe2lmKCJzdHJpbmciPT10eXBlb2YgbClyZXR1cm4gJFcobCxjKTt2YXIgYT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobCkuc2xpY2UoOCwt'@;
put 'MSk7aWYoIk9iamVjdCI9PT1hJiZsLmNvbnN0cnVjdG9yJiYoYT1sLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09YXx8IlNldCI9PT1hKXJldHVybiBBcnJheS5mcm9tKGwpO2lmKCJBcmd1bWVudHMiPT09YXx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRl'@;
put 'c3QoYSkpcmV0dXJuICRXKGwsYyl9fShsKXx8ZnVuY3Rpb24genR0KCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZl'@;
put 'IGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gJFcobCxjKXsobnVsbD09Y3x8Yz5sLmxlbmd0aCkmJihjPWwubGVuZ3RoKTtmb3IodmFyIGE9MCxmPW5ldyBBcnJheShjKTthPGM7YSsrKWZbYV09bFthXTtyZXR1cm4gZn1mdW5jdGlvbiBLVyhsLGMsYSxmKXt2'@;
put 'YXIgZD1hLmxlbmd0aD9hWzBdOnZvaWQgMDtyZXR1cm5bXS5jb25jYXQoR1cobC5zbGljZSgwLGQpKSxHVyhhLm1hcChmdW5jdGlvbihoLG0pe3JldHVybiBQbChmKT9mKGgsbSk6Zn0pKSxHVyh2b2lkIDA9PT1kP1tdOmwuc2xpY2UoZCkpKX1mdW5jdGlvbiBxVyhsLGMpe3JldHVybiBEMShs'@;
put 'LGZ1bmN0aW9uKGEsZil7cmV0dXJuITE9PT1jLmluY2x1ZGVzKGYpfSl9ZnVuY3Rpb24gaDkobCl7cmV0dXJuKGg5PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24o'@;
put 'Yyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gJGZlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07'@;
put 'Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwkdHQoZi5rZXkpLGYpfX1mdW5jdGlvbiAkdHQobCl7dmFyIGM9ZnVuY3Rpb24gS3R0KGwsYyl7aWYoIm9iamVj'@;
put 'dCIhPT1oOShsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1oOShmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZl'@;
put 'IG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09aDkoYyk/YzpTdHJpbmcoYyl9ZnVuY3Rpb24gRk0oKXtyZXR1cm4gRk09dHlwZW9mIFJlZmxlY3Q8InUiJiZS'@;
put 'ZWZsZWN0LmdldD9SZWZsZWN0LmdldC5iaW5kKCk6ZnVuY3Rpb24oYyxhLGYpe3ZhciBkPWZ1bmN0aW9uIHF0dChsLGMpe2Zvcig7IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsLGMpJiZudWxsIT09KGw9VDUobCkpOyk7cmV0dXJuIGx9KGMsYSk7aWYoZCl7dmFyIGg9'@;
put 'T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihkLGEpO3JldHVybiBoLmdldD9oLmdldC5jYWxsKGFyZ3VtZW50cy5sZW5ndGg8Mz9jOmYpOmgudmFsdWV9fSxGTS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gWFcobCxjKXtyZXR1cm4oWFc9T2JqZWN0LnNldFByb3RvdHlw'@;
put 'ZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZixkKXtyZXR1cm4gZi5fX3Byb3RvX189ZCxmfSkobCxjKX1mdW5jdGlvbiBUNShsKXtyZXR1cm4oVDU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oYSl7'@;
put 'cmV0dXJuIGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSl9KShsKX12YXIgRjQ9ZnVuY3Rpb24obCl7IWZ1bmN0aW9uIFh0dChsLGMpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjJiZudWxsIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3Qg'@;
put 'ZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2wucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYyYmYy5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpsLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3Jp'@;
put 'dGFibGU6ITF9KSxjJiZYVyhsLGMpfShhLGwpO3ZhciBjPWZ1bmN0aW9uIEp0dChsKXt2YXIgYz1mdW5jdGlvbiB0bnQoKXtpZih0eXBlb2YgUmVmbGVjdD4idSJ8fCFSZWZsZWN0LmNvbnN0cnVjdHx8UmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBl'@;
put 'b2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSxmdW5jdGlvbigpe30pKSwhMH1jYXRjaHtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGQsZj1UNShsKTtpZihjKXt2'@;
put 'YXIgaD1UNSh0aGlzKS5jb25zdHJ1Y3RvcjtkPVJlZmxlY3QuY29uc3RydWN0KGYsYXJndW1lbnRzLGgpfWVsc2UgZD1mLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24gUXR0KGwsYyl7aWYoYyYmKCJvYmplY3QiPT09aDkoYyl8fCJmdW5jdGlvbiI9PXR5cGVvZiBjKSly'@;
put 'ZXR1cm4gYztpZih2b2lkIDAhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uIGVudChsKXtpZih2b2lkIDA9PT1sKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigi'@;
put 'dGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGx9KGwpfSh0aGlzLGQpfX0oYSk7ZnVuY3Rpb24gYSgpe3JldHVybiBmdW5jdGlvbiBXdHQobCxjKXtpZighKGwgaW5zdGFuY2VvZiBjKSl0aHJvdyBuZXcgVHlwZUVycm9y'@;
put 'KCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxhKSxjLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gZnVuY3Rpb24gR3R0KGwsYyxhKXtjJiYkZmUobC5wcm90b3R5cGUsYyksYSYmJGZlKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlw'@;
put 'ZSIse3dyaXRhYmxlOiExfSl9KGEsW3trZXk6Imluc2VydCIsdmFsdWU6ZnVuY3Rpb24oZCxoKXt0aGlzLmluZGV4ZWRWYWx1ZXM9S1codGhpcy5pbmRleGVkVmFsdWVzLDAsaCx0aGlzLmluaXRWYWx1ZU9yRm4pLEZNKFQ1KGEucHJvdG90eXBlKSwiaW5zZXJ0Iix0aGlzKS5jYWxsKHRoaXMs'@;
put 'ZCxoKX19LHtrZXk6InJlbW92ZSIsdmFsdWU6ZnVuY3Rpb24oZCl7dGhpcy5pbmRleGVkVmFsdWVzPXFXKHRoaXMuaW5kZXhlZFZhbHVlcyxkKSxGTShUNShhLnByb3RvdHlwZSksInJlbW92ZSIsdGhpcykuY2FsbCh0aGlzLGQpfX1dKSxhfSh4NSk7ZnVuY3Rpb24gcDkobCl7cmV0dXJuKHA5'@;
put 'PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMh'@;
put 'PT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gS2ZlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndy'@;
put 'aXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxpbnQoZi5rZXkpLGYpfX1mdW5jdGlvbiBpbnQobCl7dmFyIGM9ZnVuY3Rpb24gb250KGwsYyl7aWYoIm9iamVjdCIhPT1wOShsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQg'@;
put 'MCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1wOShmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJl'@;
put 'cikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09cDkoYyk/YzpTdHJpbmcoYyl9ZnVuY3Rpb24gSlcobCxjKXtyZXR1cm4oSlc9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZixkKXtyZXR1cm4gZi5fX3Byb3RvX189'@;
put 'ZCxmfSkobCxjKX1mdW5jdGlvbiBCUihsKXtyZXR1cm4oQlI9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSl9KShsKX12YXIgalI9ZnVuY3Rpb24o'@;
put 'bCl7IWZ1bmN0aW9uIGFudChsLGMpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjJiZudWxsIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2wucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYyYmYy5wcm90'@;
put 'b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpsLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxjJiZKVyhsLGMpfShhLGwpO3ZhciBjPWZ1bmN0aW9uIGxudChsKXt2YXIgYz1mdW5jdGlvbiBj'@;
put 'bnQoKXtpZih0eXBlb2YgUmVmbGVjdD4idSJ8fCFSZWZsZWN0LmNvbnN0cnVjdHx8UmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVj'@;
put 'dC5jb25zdHJ1Y3QoQm9vbGVhbixbXSxmdW5jdGlvbigpe30pKSwhMH1jYXRjaHtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGQsZj1CUihsKTtpZihjKXt2YXIgaD1CUih0aGlzKS5jb25zdHJ1Y3RvcjtkPVJlZmxlY3QuY29uc3RydWN0KGYsYXJndW1lbnRzLGgpfWVsc2Ug'@;
put 'ZD1mLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24gc250KGwsYyl7aWYoYyYmKCJvYmplY3QiPT09cDkoYyl8fCJmdW5jdGlvbiI9PXR5cGVvZiBjKSlyZXR1cm4gYztpZih2b2lkIDAhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1h'@;
put 'eSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uIHVudChsKXtpZih2b2lkIDA9PT1sKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJu'@;
put 'IGx9KGwpfSh0aGlzLGQpfX0oYSk7ZnVuY3Rpb24gYSgpe3ZhciBmPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07cmV0dXJuIGZ1bmN0aW9uIG5udChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNh'@;
put 'bm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGEpLGMuY2FsbCh0aGlzLGYpfXJldHVybiBmdW5jdGlvbiBybnQobCxjLGEpe2MmJktmZShsLnByb3RvdHlwZSxjKSxhJiZLZmUobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6'@;
put 'ITF9KX0oYSxbe2tleToiZ2V0SGlkZGVuSW5kZXhlcyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gUHModGhpcy5nZXRWYWx1ZXMoKSxmdW5jdGlvbihkLGgsbSl7cmV0dXJuIGgmJmQucHVzaChtKSxkfSxbXSl9fV0pLGF9KEY0KTtmdW5jdGlvbiBtOShsKXtyZXR1cm4obTk9ImZ1bmN0aW9u'@;
put 'Ij09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5w'@;
put 'cm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiBRVyhsLGMpeyhudWxsPT1jfHxjPmwubGVuZ3RoKSYmKGM9bC5sZW5ndGgpO2Zvcih2YXIgYT0wLGY9bmV3IEFycmF5KGMpO2E8YzthKyspZlthXT1sW2FdO3JldHVybiBmfWZ1bmN0aW9uIHFmZShsLGMpe2Zvcih2YXIg'@;
put 'YT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsSmZlKGYua2V5KSxmKX19ZnVuY3Rpb24gcDMoKXtyZXR1'@;
put 'cm4gcDM9dHlwZW9mIFJlZmxlY3Q8InUiJiZSZWZsZWN0LmdldD9SZWZsZWN0LmdldC5iaW5kKCk6ZnVuY3Rpb24oYyxhLGYpe3ZhciBkPWZ1bmN0aW9uIHludChsLGMpe2Zvcig7IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsLGMpJiZudWxsIT09KGw9VmQobCkpOyk7'@;
put 'cmV0dXJuIGx9KGMsYSk7aWYoZCl7dmFyIGg9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihkLGEpO3JldHVybiBoLmdldD9oLmdldC5jYWxsKGFyZ3VtZW50cy5sZW5ndGg8Mz9jOmYpOmgudmFsdWV9fSxwMy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gZUcobCxjKXty'@;
put 'ZXR1cm4oZUc9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZixkKXtyZXR1cm4gZi5fX3Byb3RvX189ZCxmfSkobCxjKX1mdW5jdGlvbiBYZmUobCl7aWYodm9pZCAwPT09bCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMg'@;
put 'aGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBsfWZ1bmN0aW9uIFZkKGwpe3JldHVybihWZD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihhKXtyZXR1cm4gYS5fX3By'@;
put 'b3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihhKX0pKGwpfWZ1bmN0aW9uIEpmZShsKXt2YXIgYz1mdW5jdGlvbiBNbnQobCxjKXtpZigib2JqZWN0IiE9PW05KGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9'@;
put 'YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PW05KGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3Ry'@;
put 'aW5nIik7cmV0dXJuInN5bWJvbCI9PT1tOShjKT9jOlN0cmluZyhjKX12YXIgelI9ZnVuY3Rpb24obCl7IWZ1bmN0aW9uIGJudChsLGMpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjJiZudWxsIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJl'@;
put 'IG51bGwgb3IgYSBmdW5jdGlvbiIpO2wucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYyYmYy5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpsLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9'@;
put 'KSxjJiZlRyhsLGMpfShhLGwpO3ZhciBjPWZ1bmN0aW9uIF9udChsKXt2YXIgYz1mdW5jdGlvbiBDbnQoKXtpZih0eXBlb2YgUmVmbGVjdD4idSJ8fCFSZWZsZWN0LmNvbnN0cnVjdHx8UmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkp'@;
put 'cmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSxmdW5jdGlvbigpe30pKSwhMH1jYXRjaHtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGQsZj1WZChsKTtpZihjKXt2YXIgaD1WZCh0'@;
put 'aGlzKS5jb25zdHJ1Y3RvcjtkPVJlZmxlY3QuY29uc3RydWN0KGYsYXJndW1lbnRzLGgpfWVsc2UgZD1mLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24gd250KGwsYyl7aWYoYyYmKCJvYmplY3QiPT09bTkoYyl8fCJmdW5jdGlvbiI9PXR5cGVvZiBjKSlyZXR1cm4gYztp'@;
put 'Zih2b2lkIDAhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIFhmZShsKX0odGhpcyxkKX19KGEpO2Z1bmN0aW9uIGEoKXt2YXIgZjshZnVuY3Rpb24gZ250KGwsYyl7aWYoIShs'@;
put 'IGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsYSk7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksbT0wO208ZDttKyspaFttXT1hcmd1bWVudHNbbV07cmV0dXJuIGZ1bmN0'@;
put 'aW9uIFNudChsLGMsYSl7KGM9SmZlKGMpKWluIGw/T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsYyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmxbY109YX0oWGZlKGY9Yy5jYWxsLmFwcGx5KGMsW3RoaXNdLmNvbmNhdChoKSkpLCJvcmRlck9m'@;
put 'SW5kZXhlcyIsW10pLGZ9cmV0dXJuIGZ1bmN0aW9uIHZudChsLGMsYSl7YyYmcWZlKGwucHJvdG90eXBlLGMpLGEmJnFmZShsLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShhLFt7a2V5OiJnZXRWYWx1ZXMiLHZhbHVlOmZ1bmN0aW9uKCl7'@;
put 'dmFyIGQ9dGhpcztyZXR1cm4gdGhpcy5vcmRlck9mSW5kZXhlcy5tYXAoZnVuY3Rpb24oaCl7cmV0dXJuIGQuaW5kZXhlZFZhbHVlc1toXX0pfX0se2tleToic2V0VmFsdWVzIix2YWx1ZTpmdW5jdGlvbihkKXt0aGlzLm9yZGVyT2ZJbmRleGVzPWZ1bmN0aW9uIGZudChsKXtyZXR1cm4gZnVu'@;
put 'Y3Rpb24gbW50KGwpe2lmKEFycmF5LmlzQXJyYXkobCkpcmV0dXJuIFFXKGwpfShsKXx8ZnVuY3Rpb24gcG50KGwpe2lmKHR5cGVvZiBTeW1ib2w8InUiJiZudWxsIT1sW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWxbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbShsKX0obCl8fGZ1'@;
put 'bmN0aW9uIGhudChsLGMpe2lmKGwpe2lmKCJzdHJpbmciPT10eXBlb2YgbClyZXR1cm4gUVcobCxjKTt2YXIgYT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobCkuc2xpY2UoOCwtMSk7aWYoIk9iamVjdCI9PT1hJiZsLmNvbnN0cnVjdG9yJiYoYT1sLmNvbnN0cnVjdG9yLm5hbWUp'@;
put 'LCJNYXAiPT09YXx8IlNldCI9PT1hKXJldHVybiBBcnJheS5mcm9tKGwpO2lmKCJBcmd1bWVudHMiPT09YXx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QoYSkpcmV0dXJuIFFXKGwsYyl9fShsKXx8ZnVuY3Rpb24gZG50KCl7dGhyb3cgbmV3IFR5cGVF'@;
put 'cnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9KEFycmF5KGQubGVuZ3RoKS5rZXlz'@;
put 'KCkpLHAzKFZkKGEucHJvdG90eXBlKSwic2V0VmFsdWVzIix0aGlzKS5jYWxsKHRoaXMsZCl9fSx7a2V5OiJzZXRWYWx1ZUF0SW5kZXgiLHZhbHVlOmZ1bmN0aW9uKGQsaCl7dmFyIG09YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnRoaXMu'@;
put 'b3JkZXJPZkluZGV4ZXMubGVuZ3RoO3JldHVybiBkPHRoaXMuaW5kZXhlZFZhbHVlcy5sZW5ndGgmJih0aGlzLmluZGV4ZWRWYWx1ZXNbZF09aCwhMT09PXRoaXMub3JkZXJPZkluZGV4ZXMuaW5jbHVkZXMoZCkmJnRoaXMub3JkZXJPZkluZGV4ZXMuc3BsaWNlKG0sMCxkKSx0aGlzLnJ1bkxv'@;
put 'Y2FsSG9va3MoImNoYW5nZSIpLCEwKX19LHtrZXk6ImNsZWFyVmFsdWUiLHZhbHVlOmZ1bmN0aW9uKGQpe3RoaXMub3JkZXJPZkluZGV4ZXM9TE0odGhpcy5vcmRlck9mSW5kZXhlcyxbZF0pLFBsKHRoaXMuaW5pdFZhbHVlT3JGbik/cDMoVmQoYS5wcm90b3R5cGUpLCJzZXRWYWx1ZUF0SW5k'@;
put 'ZXgiLHRoaXMpLmNhbGwodGhpcyxkLHRoaXMuaW5pdFZhbHVlT3JGbihkKSk6cDMoVmQoYS5wcm90b3R5cGUpLCJzZXRWYWx1ZUF0SW5kZXgiLHRoaXMpLmNhbGwodGhpcyxkLHRoaXMuaW5pdFZhbHVlT3JGbil9fSx7a2V5OiJnZXRMZW5ndGgiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRo'@;
put 'aXMub3JkZXJPZkluZGV4ZXMubGVuZ3RofX0se2tleToic2V0RGVmYXVsdFZhbHVlcyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5pbmRleGVkVmFsdWVzLmxlbmd0aDt0aGlzLm9yZGVy'@;
put 'T2ZJbmRleGVzLmxlbmd0aD0wLHAzKFZkKGEucHJvdG90eXBlKSwic2V0RGVmYXVsdFZhbHVlcyIsdGhpcykuY2FsbCh0aGlzLGQpfX0se2tleToiaW5zZXJ0Iix2YWx1ZTpmdW5jdGlvbihkLGgpe3RoaXMuaW5kZXhlZFZhbHVlcz1LVyh0aGlzLmluZGV4ZWRWYWx1ZXMsMCxoLHRoaXMuaW5p'@;
put 'dFZhbHVlT3JGbiksdGhpcy5vcmRlck9mSW5kZXhlcz1ZVyh0aGlzLm9yZGVyT2ZJbmRleGVzLGgpLHAzKFZkKGEucHJvdG90eXBlKSwiaW5zZXJ0Iix0aGlzKS5jYWxsKHRoaXMsZCxoKX19LHtrZXk6InJlbW92ZSIsdmFsdWU6ZnVuY3Rpb24oZCl7dGhpcy5pbmRleGVkVmFsdWVzPXFXKHRo'@;
put 'aXMuaW5kZXhlZFZhbHVlcyxkKSx0aGlzLm9yZGVyT2ZJbmRleGVzPUxNKHRoaXMub3JkZXJPZkluZGV4ZXMsZCksdGhpcy5vcmRlck9mSW5kZXhlcz1aVyh0aGlzLm9yZGVyT2ZJbmRleGVzLGQpLHAzKFZkKGEucHJvdG90eXBlKSwicmVtb3ZlIix0aGlzKS5jYWxsKHRoaXMsZCl9fSx7a2V5'@;
put 'OiJnZXRFbnRyaWVzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXM7cmV0dXJuIHRoaXMub3JkZXJPZkluZGV4ZXMubWFwKGZ1bmN0aW9uKGgpe3JldHVybltoLGQuZ2V0VmFsdWVBdEluZGV4KGgpXX0pfX1dKSxhfSh4NSk7ZnVuY3Rpb24gZzkobCl7cmV0dXJuKGc5PSJmdW5jdGlvbiI9'@;
put 'PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJv'@;
put 'dG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gUWZlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxP'@;
put 'YmplY3QuZGVmaW5lUHJvcGVydHkobCx4bnQoZi5rZXkpLGYpfX1mdW5jdGlvbiB4bnQobCl7dmFyIGM9ZnVuY3Rpb24gQW50KGwsYyl7aWYoIm9iamVjdCIhPT1nOShsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBm'@;
put 'PWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1nOShmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0'@;
put 'cmluZyIpO3JldHVybiJzeW1ib2wiPT09ZzkoYyk/YzpTdHJpbmcoYyl9ZnVuY3Rpb24gdEcobCxjKXtyZXR1cm4odEc9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZixkKXtyZXR1cm4gZi5fX3Byb3RvX189ZCxmfSkobCxjKX1m'@;
put 'dW5jdGlvbiBVUihsKXtyZXR1cm4oVVI9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSl9KShsKX12YXIgSE09ZnVuY3Rpb24obCl7IWZ1bmN0aW9u'@;
put 'IFRudChsLGMpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjJiZudWxsIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2wucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYyYmYy5wcm90b3R5cGUse2NvbnN0'@;
put 'cnVjdG9yOnt2YWx1ZTpsLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxjJiZ0RyhsLGMpfShhLGwpO3ZhciBjPWZ1bmN0aW9uIE9udChsKXt2YXIgYz1mdW5jdGlvbiBSbnQoKXtpZih0eXBl'@;
put 'b2YgUmVmbGVjdD4idSJ8fCFSZWZsZWN0LmNvbnN0cnVjdHx8UmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3Qo'@;
put 'Qm9vbGVhbixbXSxmdW5jdGlvbigpe30pKSwhMH1jYXRjaHtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGQsZj1VUihsKTtpZihjKXt2YXIgaD1VUih0aGlzKS5jb25zdHJ1Y3RvcjtkPVJlZmxlY3QuY29uc3RydWN0KGYsYXJndW1lbnRzLGgpfWVsc2UgZD1mLmFwcGx5KHRo'@;
put 'aXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24gRG50KGwsYyl7aWYoYyYmKCJvYmplY3QiPT09ZzkoYyl8fCJmdW5jdGlvbiI9PXR5cGVvZiBjKSlyZXR1cm4gYztpZih2b2lkIDAhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVy'@;
put 'biBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uIEludChsKXtpZih2b2lkIDA9PT1sKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGx9KGwpfSh0aGlz'@;
put 'LGQpfX0oYSk7ZnVuY3Rpb24gYSgpe3ZhciBmPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07cmV0dXJuIGZ1bmN0aW9uIGtudChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEg'@;
put 'Y2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGEpLGMuY2FsbCh0aGlzLGYpfXJldHVybiBmdW5jdGlvbiBFbnQobCxjLGEpe2MmJlFmZShsLnByb3RvdHlwZSxjKSxhJiZRZmUobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0oYSxbe2tl'@;
put 'eToiZ2V0VHJpbW1lZEluZGV4ZXMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIFBzKHRoaXMuZ2V0VmFsdWVzKCksZnVuY3Rpb24oZCxoLG0pe3JldHVybiBoJiZkLnB1c2gobSksZH0sW10pfX1dKSxhfShGNCksZWRlPW5ldyBNYXAoW1siaGlkaW5nIixqUl0sWyJpbmRleCIseDVdLFsibGlu'@;
put 'a2VkUGh5c2ljYWxJbmRleFRvVmFsdWUiLHpSXSxbInBoeXNpY2FsSW5kZXhUb1ZhbHVlIixGNF0sWyJ0cmltbWluZyIsSE1dXSk7ZnVuY3Rpb24gTk0obCl7cmV0dXJuKE5NPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0'@;
put 'aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gdGRlKGwsYyl7Zm9yKHZh'@;
put 'ciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxIbnQoZi5rZXkpLGYpfX1mdW5jdGlvbiBIbnQobCl7'@;
put 'dmFyIGM9ZnVuY3Rpb24gTm50KGwsYyl7aWYoIm9iamVjdCIhPT1OTShsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1OTShmKSlyZXR1cm4gZjt0'@;
put 'aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09Tk0oYyk/YzpTdHJpbmcoYyl9dmFyIG5HPTAsckc9'@;
put 'ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKCl7KGZ1bmN0aW9uIFBudChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyxsKSx0aGlzLmNvbGxlY3Rpb249bmV3IE1hcH1yZXR1cm4gZnVu'@;
put 'Y3Rpb24gRm50KGwsYyxhKXtjJiZ0ZGUobC5wcm90b3R5cGUsYyksYSYmdGRlKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGwsW3trZXk6InJlZ2lzdGVyIix2YWx1ZTpmdW5jdGlvbihhLGYpe3ZhciBkPXRoaXM7ITE9PT10aGlzLmNv'@;
put 'bGxlY3Rpb24uaGFzKGEpJiYodGhpcy5jb2xsZWN0aW9uLnNldChhLGYpLGYuYWRkTG9jYWxIb29rKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGQucnVuTG9jYWxIb29rcygiY2hhbmdlIixmKX0pLG5HKz0xKX19LHtrZXk6InVucmVnaXN0ZXIiLHZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBm'@;
put 'PXRoaXMuY29sbGVjdGlvbi5nZXQoYSk7aW8oZikmJihmLmRlc3Ryb3koKSx0aGlzLmNvbGxlY3Rpb24uZGVsZXRlKGEpLHRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIixmKSxuRy09MSl9fSx7a2V5OiJ1bnJlZ2lzdGVyQWxsIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXM7dGhpcy5j'@;
put 'b2xsZWN0aW9uLmZvckVhY2goZnVuY3Rpb24oZixkKXtyZXR1cm4gYS51bnJlZ2lzdGVyKGQpfSksdGhpcy5jb2xsZWN0aW9uLmNsZWFyKCl9fSx7a2V5OiJnZXQiLHZhbHVlOmZ1bmN0aW9uKGEpe3JldHVybiBMbChhKT9BcnJheS5mcm9tKHRoaXMuY29sbGVjdGlvbi52YWx1ZXMoKSk6dGhp'@;
put 'cy5jb2xsZWN0aW9uLmdldChhKX19LHtrZXk6ImdldExlbmd0aCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb2xsZWN0aW9uLnNpemV9fSx7a2V5OiJyZW1vdmVGcm9tRXZlcnkiLHZhbHVlOmZ1bmN0aW9uKGEpe3RoaXMuY29sbGVjdGlvbi5mb3JFYWNoKGZ1bmN0aW9uKGYpe2Yu'@;
put 'cmVtb3ZlKGEpfSl9fSx7a2V5OiJpbnNlcnRUb0V2ZXJ5Iix2YWx1ZTpmdW5jdGlvbihhLGYpe3RoaXMuY29sbGVjdGlvbi5mb3JFYWNoKGZ1bmN0aW9uKGQpe2QuaW5zZXJ0KGEsZil9KX19LHtrZXk6ImluaXRFdmVyeSIsdmFsdWU6ZnVuY3Rpb24oYSl7dGhpcy5jb2xsZWN0aW9uLmZvckVh'@;
put 'Y2goZnVuY3Rpb24oZil7Zi5pbml0KGEpfSl9fV0pLGx9KCk7ZnVuY3Rpb24gdjkobCl7cmV0dXJuKHY5PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0'@;
put 'dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gbmRlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVt'@;
put 'ZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCx6bnQoZi5rZXkpLGYpfX1mdW5jdGlvbiB6bnQobCl7dmFyIGM9ZnVuY3Rpb24gVW50KGwsYyl7aWYoIm9iamVjdCIhPT12'@;
put 'OShsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT12OShmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3Qg'@;
put 'cmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09djkoYyk/YzpTdHJpbmcoYyl9ZnVuY3Rpb24gaUcobCxjKXtyZXR1cm4oaUc9T2JqZWN0LnNldFByb3RvdHlwZU9mP09i'@;
put 'amVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZixkKXtyZXR1cm4gZi5fX3Byb3RvX189ZCxmfSkobCxjKX1mdW5jdGlvbiBaUihsKXtyZXR1cm4oWlI9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oYSl7cmV0dXJu'@;
put 'IGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSl9KShsKX1UbChyRyxXMCk7dmFyIHJkZT1mdW5jdGlvbihsKXshZnVuY3Rpb24gWm50KGwsYyl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGMmJm51bGwhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24g'@;
put 'bXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7bC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShjJiZjLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmwsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUi'@;
put 'LHt3cml0YWJsZTohMX0pLGMmJmlHKGwsYyl9KGEsbCk7dmFyIGM9ZnVuY3Rpb24gWW50KGwpe3ZhciBjPWZ1bmN0aW9uICRudCgpe2lmKHR5cGVvZiBSZWZsZWN0PiJ1Inx8IVJlZmxlY3QuY29uc3RydWN0fHxSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9'@;
put 'PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLGZ1bmN0aW9uKCl7fSkpLCEwfWNhdGNoe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZCxmPVpSKGwpO2lm'@;
put 'KGMpe3ZhciBoPVpSKHRoaXMpLmNvbnN0cnVjdG9yO2Q9UmVmbGVjdC5jb25zdHJ1Y3QoZixhcmd1bWVudHMsaCl9ZWxzZSBkPWYuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbiBXbnQobCxjKXtpZihjJiYoIm9iamVjdCI9PT12OShjKXx8ImZ1bmN0aW9uIj09dHlwZW9m'@;
put 'IGMpKXJldHVybiBjO2lmKHZvaWQgMCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24gR250KGwpe2lmKHZvaWQgMD09PWwpdGhyb3cgbmV3IFJlZmVyZW5jZUVy'@;
put 'cm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gbH0obCl9KHRoaXMsZCl9fShhKTtmdW5jdGlvbiBhKGYsZCl7dmFyIGg7cmV0dXJuIGZ1bmN0aW9uIEJudChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93'@;
put 'IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGEpLChoPWMuY2FsbCh0aGlzKSkubWVyZ2VkVmFsdWVzQ2FjaGU9W10saC5hZ2dyZWdhdGlvbkZ1bmN0aW9uPWYsaC5mYWxsYmFja1ZhbHVlPWQsaH1yZXR1cm4gZnVuY3Rpb24gam50KGws'@;
put 'YyxhKXtjJiZuZGUobC5wcm90b3R5cGUsYyksYSYmbmRlKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGEsW3trZXk6ImdldE1lcmdlZFZhbHVlcyIsdmFsdWU6ZnVuY3Rpb24oKXtpZighMD09PSghKGFyZ3VtZW50cy5sZW5ndGg+MCYm'@;
put 'dm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdKSlyZXR1cm4gdGhpcy5tZXJnZWRWYWx1ZXNDYWNoZTtpZigwPT09dGhpcy5nZXRMZW5ndGgoKSlyZXR1cm5bXTtmb3IodmFyIGg9aGEodGhpcy5nZXQoKSxmdW5jdGlvbihwZSl7cmV0dXJuIHBlLmdldFZhbHVlcygpfSksbT1b'@;
put 'XSxfPWlvKGhbMF0pJiZoWzBdLmxlbmd0aHx8MCxPPTA7TzxfO08rPTEpe2Zvcih2YXIgWD1bXSxhZT0wO2FlPHRoaXMuZ2V0TGVuZ3RoKCk7YWUrPTEpWC5wdXNoKGhbYWVdW09dKTttLnB1c2goWCl9cmV0dXJuIGhhKG0sdGhpcy5hZ2dyZWdhdGlvbkZ1bmN0aW9uKX19LHtrZXk6ImdldE1l'@;
put 'cmdlZFZhbHVlQXRJbmRleCIsdmFsdWU6ZnVuY3Rpb24oZCxoKXt2YXIgbT10aGlzLmdldE1lcmdlZFZhbHVlcyhoKVtkXTtyZXR1cm4gaW8obSk/bTp0aGlzLmZhbGxiYWNrVmFsdWV9fSx7a2V5OiJ1cGRhdGVDYWNoZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLm1lcmdlZFZhbHVlc0NhY2hl'@;
put 'PXRoaXMuZ2V0TWVyZ2VkVmFsdWVzKCExKX19XSksYX0ockcpO2Z1bmN0aW9uIFZNKGwpe3JldHVybihWTT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3Jl'@;
put 'dHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIGlkZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51'@;
put 'bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsWG50KGYua2V5KSxmKX19ZnVuY3Rpb24gWG50KGwpe3ZhciBjPWZ1bmN0aW9uIEpudChsLGMpe2lmKCJvYmplY3QiIT09'@;
put 'Vk0obCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09Vk0oZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0'@;
put 'IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PVZNKGMpP2M6U3RyaW5nKGMpfWZ1bmN0aW9uIG9kZShsLGMsYSl7aWYoIWMuaGFzKGwpKXRocm93IG5ldyBUeXBlRXJy'@;
put 'b3IoImF0dGVtcHRlZCB0byAiK2ErIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBjLmdldChsKX12YXIgb0c9bmV3IFdlYWtNYXAsYWRlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbCgpeyhmdW5jdGlvbiBLbnQobCxjKXtpZighKGwgaW5zdGFuY2VvZiBjKSl0aHJvdyBu'@;
put 'ZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsbCksZnVuY3Rpb24gUW50KGwsYyxhKXsoZnVuY3Rpb24gZXJ0KGwsYyl7aWYoYy5oYXMobCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0'@;
put 'ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGwsYyksYy5zZXQobCxhKX0odGhpcyxvRyx7d3JpdGFibGU6ITAsdmFsdWU6W119KX1yZXR1cm4gZnVuY3Rpb24gcW50KGwsYyxhKXtjJiZpZGUobC5wcm90b3R5cGUsYyksYSYmaWRlKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5'@;
put 'KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGwsW3trZXk6InN1YnNjcmliZSIsdmFsdWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYWRkTG9jYWxIb29rKCJjaGFuZ2UiLGEpLHRoaXMuX3dyaXRlKGZ1bmN0aW9uIHJydChsLGMpe3JldHVybiBmdW5jdGlvbiBpcnQobCxjKXtyZXR1'@;
put 'cm4gYy5nZXQ/Yy5nZXQuY2FsbChsKTpjLnZhbHVlfShsLG9kZShsLGMsImdldCIpKX0odGhpcyxvRykpLHRoaXN9fSx7a2V5OiJ1bnN1YnNjcmliZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ydW5Mb2NhbEhvb2tzKCJ1bnN1YnNjcmliZSIpLHRoaXMuY2xlYXJMb2NhbEhvb2tz'@;
put 'KCksdGhpc319LHtrZXk6Il93cml0ZSIsdmFsdWU6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubGVuZ3RoPjAmJnRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIixhKSx0aGlzfX0se2tleToiX3dyaXRlSW5pdGlhbENoYW5nZXMiLHZhbHVlOmZ1bmN0aW9uKGEpeyFmdW5jdGlvbiB0cnQobCxjLGEp'@;
put 'e3JldHVybiBmdW5jdGlvbiBucnQobCxjLGEpe2lmKGMuc2V0KWMuc2V0LmNhbGwobCxhKTtlbHNle2lmKCFjLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtjLnZhbHVlPWF9fShsLG9kZShsLGMsInNldCIp'@;
put 'LGEpLGF9KHRoaXMsb0csYSl9fV0pLGx9KCk7ZnVuY3Rpb24gbGRlKGwsYyl7Zm9yKHZhciBhPVtdLGY9MCxkPTA7ZjxsLmxlbmd0aCYmZDxjLmxlbmd0aDtmKyssZCsrKWxbZl0hPT1jW2RdJiZhLnB1c2goe29wOiJyZXBsYWNlIixpbmRleDpkLG9sZFZhbHVlOmxbZl0sbmV3VmFsdWU6Y1tk'@;
put 'XX0pO2Zvcig7ZjxjLmxlbmd0aDtmKyspYS5wdXNoKHtvcDoiaW5zZXJ0IixpbmRleDpmLG9sZFZhbHVlOnZvaWQgMCxuZXdWYWx1ZTpjW2ZdfSk7Zm9yKDtkPGwubGVuZ3RoO2QrKylhLnB1c2goe29wOiJyZW1vdmUiLGluZGV4OmQsb2xkVmFsdWU6bFtkXSxuZXdWYWx1ZTp2b2lkIDB9KTty'@;
put 'ZXR1cm4gYX1mdW5jdGlvbiBCTShsKXtyZXR1cm4oQk09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5'@;
put 'bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiBzZGUobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNv'@;
put 'bmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLGxydChmLmtleSksZil9fWZ1bmN0aW9uIGxydChsKXt2YXIgYz1mdW5jdGlvbiBzcnQobCxjKXtpZigib2JqZWN0IiE9PUJNKGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIg'@;
put 'YT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PUJNKGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9'@;
put 'cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1CTShjKT9jOlN0cmluZyhjKX1mdW5jdGlvbiBqTShsLGMsYSl7KGZ1bmN0aW9uIHVydChsLGMpe2lmKGMuaGFzKGwpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBp'@;
put 'bml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShsLGMpLGMuc2V0KGwsYSl9ZnVuY3Rpb24gTmYobCxjKXtyZXR1cm4gZnVuY3Rpb24gY3J0KGwsYyl7cmV0dXJuIGMuZ2V0P2MuZ2V0LmNhbGwobCk6Yy52YWx1ZX0obCx1ZGUobCxjLCJn'@;
put 'ZXQiKSl9ZnVuY3Rpb24gWVIobCxjLGEpe3JldHVybiBmdW5jdGlvbiBmcnQobCxjLGEpe2lmKGMuc2V0KWMuc2V0LmNhbGwobCxhKTtlbHNle2lmKCFjLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtjLnZh'@;
put 'bHVlPWF9fShsLHVkZShsLGMsInNldCIpLGEpLGF9ZnVuY3Rpb24gdWRlKGwsYyxhKXtpZighYy5oYXMobCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrYSsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGMuZ2V0KGwpfVRsKGFkZSxXMCk7dmFy'@;
put 'IFdSPW5ldyBXZWFrTWFwLHpNPW5ldyBXZWFrTWFwLEdSPW5ldyBXZWFrTWFwLCRSPW5ldyBXZWFrTWFwLEtSPW5ldyBXZWFrTWFwLGRydD1mdW5jdGlvbigpe2Z1bmN0aW9uIGwoKXt2YXIgYT0oYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBd'@;
put 'Ont9KS5pbml0aWFsSW5kZXhWYWx1ZTsoZnVuY3Rpb24gb3J0KGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLGwpLGpNKHRoaXMsV1Ise3dyaXRhYmxlOiEwLHZhbHVlOm5ldyBT'@;
put 'ZXR9KSxqTSh0aGlzLHpNLHt3cml0YWJsZTohMCx2YWx1ZTpbXX0pLGpNKHRoaXMsR1Ise3dyaXRhYmxlOiEwLHZhbHVlOltdfSksak0odGhpcywkUix7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSxqTSh0aGlzLEtSLHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLFlSKHRoaXMsS1IsYT8/ITEpfXJl'@;
put 'dHVybiBmdW5jdGlvbiBhcnQobCxjLGEpe2MmJnNkZShsLnByb3RvdHlwZSxjKSxhJiZzZGUobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0obCxbe2tleToiY3JlYXRlT2JzZXJ2ZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxm'@;
put 'PW5ldyBhZGU7cmV0dXJuIE5mKHRoaXMsV1IpLmFkZChmKSxmLmFkZExvY2FsSG9vaygidW5zdWJzY3JpYmUiLGZ1bmN0aW9uKCl7TmYoYSxXUikuZGVsZXRlKGYpfSksZi5fd3JpdGVJbml0aWFsQ2hhbmdlcyhsZGUoTmYodGhpcyx6TSksTmYodGhpcyxHUikpKSxmfX0se2tleToiZW1pdCIs'@;
put 'dmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGY9TmYodGhpcyxHUik7KCFOZih0aGlzLCRSKXx8TmYodGhpcyx6TSkubGVuZ3RoIT09YS5sZW5ndGgpJiYoMD09PWEubGVuZ3RoP2E9bmV3IEFycmF5KGYubGVuZ3RoKS5maWxsKE5mKHRoaXMsS1IpKTpZUih0aGlzLHpNLG5ldyBBcnJheShhLmxlbmd0'@;
put 'aCkuZmlsbChOZih0aGlzLEtSKSkpLE5mKHRoaXMsJFIpfHwoWVIodGhpcywkUiwhMCksZj1OZih0aGlzLHpNKSkpO3ZhciBkPWxkZShmLGEpO05mKHRoaXMsV1IpLmZvckVhY2goZnVuY3Rpb24oaCl7cmV0dXJuIGguX3dyaXRlKGQpfSksWVIodGhpcyxHUixhKX19XSksbH0oKTtmdW5jdGlv'@;
put 'biBVTShsKXtyZXR1cm4oVU09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1'@;
put 'Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiBhRyhsKXtyZXR1cm4gZnVuY3Rpb24gZ3J0KGwpe2lmKEFycmF5LmlzQXJyYXkobCkpcmV0dXJuIGxHKGwpfShsKXx8ZnVuY3Rpb24gbXJ0KGwpe2lmKHR5cGVvZiBTeW1i'@;
put 'b2w8InUiJiZudWxsIT1sW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWxbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbShsKX0obCl8fGZ1bmN0aW9uIHBydChsLGMpe2lmKGwpe2lmKCJzdHJpbmciPT10eXBlb2YgbClyZXR1cm4gbEcobCxjKTt2YXIgYT1PYmplY3QucHJvdG90eXBl'@;
put 'LnRvU3RyaW5nLmNhbGwobCkuc2xpY2UoOCwtMSk7aWYoIk9iamVjdCI9PT1hJiZsLmNvbnN0cnVjdG9yJiYoYT1sLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09YXx8IlNldCI9PT1hKXJldHVybiBBcnJheS5mcm9tKGwpO2lmKCJBcmd1bWVudHMiPT09YXx8L14oPzpVaXxJKW50KD86OHwx'@;
put 'NnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QoYSkpcmV0dXJuIGxHKGwsYyl9fShsKXx8ZnVuY3Rpb24gaHJ0KCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwg'@;
put 'bm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gbEcobCxjKXsobnVsbD09Y3x8Yz5sLmxlbmd0aCkmJihjPWwubGVuZ3RoKTtmb3IodmFyIGE9MCxmPW5ldyBBcnJheShjKTthPGM7YSsrKWZbYV09bFthXTtyZXR1'@;
put 'cm4gZn1mdW5jdGlvbiBjZGUobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLGJy'@;
put 'dChmLmtleSksZil9fWZ1bmN0aW9uIGJydChsKXt2YXIgYz1mdW5jdGlvbiBfcnQobCxjKXtpZigib2JqZWN0IiE9PVVNKGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtp'@;
put 'Zigib2JqZWN0IiE9PVVNKGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1V'@;
put 'TShjKT9jOlN0cmluZyhjKX12YXIgZmRlLHNHPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbCgpe3ZhciBjPXRoaXM7KGZ1bmN0aW9uIHZydChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhp'@;
put 'cyxsKSx0aGlzLmluZGV4ZXNTZXF1ZW5jZT1uZXcgR2ZlLHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbj1uZXcgcmRlKGZ1bmN0aW9uKGEpe3JldHVybiBhLnNvbWUoZnVuY3Rpb24oZil7cmV0dXJuITA9PT1mfSl9LCExKSx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uPW5ldyByZGUoZnVu'@;
put 'Y3Rpb24oYSl7cmV0dXJuIGEuc29tZShmdW5jdGlvbihmKXtyZXR1cm4hMD09PWZ9KX0sITEpLHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uPW5ldyByRyx0aGlzLmhpZGluZ0NoYW5nZXNPYnNlcnZhYmxlPW5ldyBkcnQoe2luaXRpYWxJbmRleFZhbHVlOiExfSksdGhpcy5ub3RUcmltbWVk'@;
put 'SW5kZXhlc0NhY2hlPVtdLHRoaXMubm90SGlkZGVuSW5kZXhlc0NhY2hlPVtdLHRoaXMuaXNCYXRjaGVkPSExLHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2hhbmdlZD0hMSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9dm9pZCAwLHRoaXMudHJpbW1lZEluZGV4ZXNDaGFuZ2VkPSExLHRoaXMuaGlk'@;
put 'ZGVuSW5kZXhlc0NoYW5nZWQ9ITEsdGhpcy5yZW5kZXJhYmxlUGh5c2ljYWxJbmRleGVzQ2FjaGU9W10sdGhpcy5mcm9tUGh5c2ljYWxUb1Zpc3VhbEluZGV4ZXNDYWNoZT1uZXcgTWFwLHRoaXMuZnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXNDYWNoZT1uZXcgTWFwLHRoaXMuaW5kZXhl'@;
put 'c1NlcXVlbmNlLmFkZExvY2FsSG9vaygiY2hhbmdlIixmdW5jdGlvbigpe2MuaW5kZXhlc1NlcXVlbmNlQ2hhbmdlZD0hMCxjLnVwZGF0ZUNhY2hlKCksYy5ydW5Mb2NhbEhvb2tzKCJpbmRleGVzU2VxdWVuY2VDaGFuZ2UiLGMuaW5kZXhlc0NoYW5nZVNvdXJjZSksYy5ydW5Mb2NhbEhvb2tz'@;
put 'KCJjaGFuZ2UiLGMuaW5kZXhlc1NlcXVlbmNlLG51bGwpfSksdGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLmFkZExvY2FsSG9vaygiY2hhbmdlIixmdW5jdGlvbihhKXtjLnRyaW1tZWRJbmRleGVzQ2hhbmdlZD0hMCxjLnVwZGF0ZUNhY2hlKCksYy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2Ui'@;
put 'LGEsYy50cmltbWluZ01hcHNDb2xsZWN0aW9uKX0pLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJjaGFuZ2UiLGZ1bmN0aW9uKGEpe2MuaGlkZGVuSW5kZXhlc0NoYW5nZWQ9ITAsYy51cGRhdGVDYWNoZSgpLGMucnVuTG9jYWxIb29rcygiY2hhbmdlIixhLGMuaGlk'@;
put 'aW5nTWFwc0NvbGxlY3Rpb24pfSksdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJjaGFuZ2UiLGZ1bmN0aW9uKGEpe2MucnVuTG9jYWxIb29rcygiY2hhbmdlIixhLGMudmFyaW91c01hcHNDb2xsZWN0aW9uKX0pfXJldHVybiBmdW5jdGlvbiB5cnQobCxjLGEpe2Mm'@;
put 'JmNkZShsLnByb3RvdHlwZSxjKSxhJiZjZGUobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0obCxbe2tleToic3VzcGVuZE9wZXJhdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5pc0JhdGNoZWQ9ITB9fSx7a2V5OiJyZXN1bWVPcGVy'@;
put 'YXRpb25zIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuaXNCYXRjaGVkPSExLHRoaXMudXBkYXRlQ2FjaGUoKX19LHtrZXk6ImNyZWF0ZUNoYW5nZXNPYnNlcnZlciIsdmFsdWU6ZnVuY3Rpb24oYSl7aWYoImhpZGluZyIhPT1hKXRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgaW5kZXggbWFw'@;
put 'IHR5cGUgIicuY29uY2F0KGEsJyIuJykpO3JldHVybiB0aGlzLmhpZGluZ0NoYW5nZXNPYnNlcnZhYmxlLmNyZWF0ZU9ic2VydmVyKCl9fSx7a2V5OiJjcmVhdGVBbmRSZWdpc3RlckluZGV4TWFwIix2YWx1ZTpmdW5jdGlvbihhLGYsZCl7cmV0dXJuIHRoaXMucmVnaXN0ZXJNYXAoYSxmdW5j'@;
put 'dGlvbiBMbnQobCl7dmFyIGM9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7aWYoIWVkZS5oYXMobCkpdGhyb3cgbmV3IEVycm9yKCdUaGUgcHJvdmlkZWQgbWFwIHR5cGUgKCInLmNvbmNhdChsLCciKSBkb2VzIG5vdCBleGlzdC4n'@;
put 'KSk7cmV0dXJuIG5ldyhlZGUuZ2V0KGwpKShjKX0oZixkKSl9fSx7a2V5OiJyZWdpc3Rlck1hcCIsdmFsdWU6ZnVuY3Rpb24oYSxmKXtpZih0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24uZ2V0KGEpfHx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLmdldChhKXx8dGhpcy52YXJpb3VzTWFw'@;
put 'c0NvbGxlY3Rpb24uZ2V0KGEpKXRocm93IEVycm9yKCdNYXAgd2l0aCBuYW1lICInLmNvbmNhdChhLCciIGhhcyBiZWVuIGFscmVhZHkgcmVnaXN0ZXJlZC4nKSk7ZiBpbnN0YW5jZW9mIEhNP3RoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5yZWdpc3RlcihhLGYpOmYgaW5zdGFuY2VvZiBq'@;
put 'Uj90aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLnJlZ2lzdGVyKGEsZik6dGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24ucmVnaXN0ZXIoYSxmKTt2YXIgZD10aGlzLmdldE51bWJlck9mSW5kZXhlcygpO3JldHVybiBkPjAmJmYuaW5pdChkKSxmfX0se2tleToidW5yZWdpc3Rlck1hcCIsdmFs'@;
put 'dWU6ZnVuY3Rpb24oYSl7dGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLnVucmVnaXN0ZXIoYSksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi51bnJlZ2lzdGVyKGEpLHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLnVucmVnaXN0ZXIoYSl9fSx7a2V5OiJ1bnJlZ2lzdGVyQWxsIix2YWx1'@;
put 'ZTpmdW5jdGlvbigpe3RoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi51bnJlZ2lzdGVyQWxsKCksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi51bnJlZ2lzdGVyQWxsKCksdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24udW5yZWdpc3RlckFsbCgpfX0se2tleToiZ2V0UGh5c2ljYWxGcm9t'@;
put 'VmlzdWFsSW5kZXgiLHZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBmPXRoaXMubm90VHJpbW1lZEluZGV4ZXNDYWNoZVthXTtyZXR1cm4gaW8oZik/ZjpudWxsfX0se2tleToiZ2V0UGh5c2ljYWxGcm9tUmVuZGVyYWJsZUluZGV4Iix2YWx1ZTpmdW5jdGlvbihhKXt2YXIgZj10aGlzLnJlbmRlcmFi'@;
put 'bGVQaHlzaWNhbEluZGV4ZXNDYWNoZVthXTtyZXR1cm4gaW8oZik/ZjpudWxsfX0se2tleToiZ2V0VmlzdWFsRnJvbVBoeXNpY2FsSW5kZXgiLHZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBmPXRoaXMuZnJvbVBoeXNpY2FsVG9WaXN1YWxJbmRleGVzQ2FjaGUuZ2V0KGEpO3JldHVybiBpbyhmKT9m'@;
put 'Om51bGx9fSx7a2V5OiJnZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4Iix2YWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5nZXRWaXN1YWxGcm9tUGh5c2ljYWxJbmRleCh0aGlzLmdldFBoeXNpY2FsRnJvbVJlbmRlcmFibGVJbmRleChhKSl9fSx7a2V5OiJnZXRSZW5kZXJhYmxlRnJv'@;
put 'bVZpc3VhbEluZGV4Iix2YWx1ZTpmdW5jdGlvbihhKXt2YXIgZj10aGlzLmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUuZ2V0KGEpO3JldHVybiBpbyhmKT9mOm51bGx9fSx7a2V5OiJnZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgiLHZhbHVlOmZ1bmN0aW9uKGEsZil7dmFyIGQ9'@;
put 'YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtpZihudWxsPT09dGhpcy5nZXRQaHlzaWNhbEZyb21WaXN1YWxJbmRleChhKSlyZXR1cm4gbnVsbDtpZih0aGlzLmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUuaGFzKGEpKXJl'@;
put 'dHVybiBhO3ZhciBfLG09QXJyYXkuZnJvbSh0aGlzLmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUua2V5cygpKTtyZXR1cm4tMT09PShfPWY+MD9tLmZpbmRJbmRleChmdW5jdGlvbihPKXtyZXR1cm4gTz5hfSk6bS5yZXZlcnNlKCkuZmluZEluZGV4KGZ1bmN0aW9uKE8pe3Jl'@;
put 'dHVybiBPPGF9KSk/ZD90aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhLC1mLCExKTpudWxsOm1bX119fSx7a2V5OiJpbml0VG9MZW5ndGgiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGE9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRo'@;
put 'aXMuZ2V0TnVtYmVyT2ZJbmRleGVzKCk7dGhpcy5ub3RUcmltbWVkSW5kZXhlc0NhY2hlPWFHKG5ldyBBcnJheShhKS5rZXlzKCkpLHRoaXMubm90SGlkZGVuSW5kZXhlc0NhY2hlPWFHKG5ldyBBcnJheShhKS5rZXlzKCkpLHRoaXMuc3VzcGVuZE9wZXJhdGlvbnMoKSx0aGlzLmluZGV4ZXND'@;
put 'aGFuZ2VTb3VyY2U9ImluaXQiLHRoaXMuaW5kZXhlc1NlcXVlbmNlLmluaXQoYSksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPXZvaWQgMCx0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24uaW5pdEV2ZXJ5KGEpLHRoaXMucmVzdW1lT3BlcmF0aW9ucygpLHRoaXMuc3VzcGVuZE9wZXJhdGlv'@;
put 'bnMoKSx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLmluaXRFdmVyeShhKSx0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbi5pbml0RXZlcnkoYSksdGhpcy5yZXN1bWVPcGVyYXRpb25zKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJpbml0Iil9fSx7a2V5OiJmaXRUb0xlbmd0aCIsdmFsdWU6ZnVu'@;
put 'Y3Rpb24oYSl7dmFyIGY9dGhpcy5nZXROdW1iZXJPZkluZGV4ZXMoKTtpZihhPGYpe3ZhciBkPWFHKEFycmF5KHRoaXMuZ2V0TnVtYmVyT2ZJbmRleGVzKCktYSkua2V5cygpKS5tYXAoZnVuY3Rpb24oaCl7cmV0dXJuIGgrYX0pO3RoaXMucmVtb3ZlSW5kZXhlcyhkKX1lbHNlIHRoaXMuaW5z'@;
put 'ZXJ0SW5kZXhlcyhmLGEtZil9fSx7a2V5OiJnZXRJbmRleGVzU2VxdWVuY2UiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5kZXhlc1NlcXVlbmNlLmdldFZhbHVlcygpfX0se2tleToic2V0SW5kZXhlc1NlcXVlbmNlIix2YWx1ZTpmdW5jdGlvbihhKXt2b2lkIDA9PT10aGlzLmlu'@;
put 'ZGV4ZXNDaGFuZ2VTb3VyY2UmJih0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9InVwZGF0ZSIpLHRoaXMuaW5kZXhlc1NlcXVlbmNlLnNldFZhbHVlcyhhKSwidXBkYXRlIj09PXRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZSYmKHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT12b2lkIDApfX0se2tl'@;
put 'eToiZ2V0Tm90VHJpbW1lZEluZGV4ZXMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcztyZXR1cm4hMD09PSghKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdKT90aGlzLm5vdFRyaW1tZWRJbmRleGVzQ2FjaGU6dGhpcy5nZXRJbmRl'@;
put 'eGVzU2VxdWVuY2UoKS5maWx0ZXIoZnVuY3Rpb24oaCl7cmV0dXJuITE9PT1hLmlzVHJpbW1lZChoKX0pfX0se2tleToiZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0Tm90VHJpbW1lZEluZGV4ZXMoKS5sZW5ndGh9fSx7a2V5OiJn'@;
put 'ZXROb3RIaWRkZW5JbmRleGVzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXM7cmV0dXJuITA9PT0oIShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXSk/dGhpcy5ub3RIaWRkZW5JbmRleGVzQ2FjaGU6dGhpcy5nZXRJbmRleGVzU2Vx'@;
put 'dWVuY2UoKS5maWx0ZXIoZnVuY3Rpb24oaCl7cmV0dXJuITE9PT1hLmlzSGlkZGVuKGgpfSl9fSx7a2V5OiJnZXROb3RIaWRkZW5JbmRleGVzTGVuZ3RoIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldE5vdEhpZGRlbkluZGV4ZXMoKS5sZW5ndGh9fSx7a2V5OiJnZXRSZW5kZXJh'@;
put 'YmxlSW5kZXhlcyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzO3JldHVybiEwPT09KCEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0pP3RoaXMucmVuZGVyYWJsZVBoeXNpY2FsSW5kZXhlc0NhY2hlOnRoaXMuZ2V0Tm90VHJpbW1l'@;
put 'ZEluZGV4ZXMoKS5maWx0ZXIoZnVuY3Rpb24oaCl7cmV0dXJuITE9PT1hLmlzSGlkZGVuKGgpfSl9fSx7a2V5OiJnZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSZW5kZXJhYmxlSW5kZXhlcygpLmxlbmd0aH19LHtrZXk6ImdldE51'@;
put 'bWJlck9mSW5kZXhlcyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRJbmRleGVzU2VxdWVuY2UoKS5sZW5ndGh9fSx7a2V5OiJtb3ZlSW5kZXhlcyIsdmFsdWU6ZnVuY3Rpb24oYSxmKXt2YXIgZD10aGlzOyJudW1iZXIiPT10eXBlb2YgYSYmKGE9W2FdKTt2YXIgaD1oYShhLGZ1'@;
put 'bmN0aW9uKHBlKXtyZXR1cm4gZC5nZXRQaHlzaWNhbEZyb21WaXN1YWxJbmRleChwZSl9KSxtPXRoaXMuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKSxfPWEubGVuZ3RoLE89TE0odGhpcy5nZXRJbmRleGVzU2VxdWVuY2UoKSxoKSxYPW0tXztpZihmK188bSl7dmFyIGFlPU8uZmlsdGVy'@;
put 'KGZ1bmN0aW9uKHBlKXtyZXR1cm4hMT09PWQuaXNUcmltbWVkKHBlKX0pW2ZdO1g9Ty5pbmRleE9mKGFlKX10aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9Im1vdmUiLHRoaXMuc2V0SW5kZXhlc1NlcXVlbmNlKFVXKE8sWCxoKSksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPXZvaWQgMH19LHtr'@;
put 'ZXk6ImlzVHJpbW1lZCIsdmFsdWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5nZXRNZXJnZWRWYWx1ZUF0SW5kZXgoYSl9fSx7a2V5OiJpc0hpZGRlbiIsdmFsdWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24uZ2V0'@;
put 'TWVyZ2VkVmFsdWVBdEluZGV4KGEpfX0se2tleToiaW5zZXJ0SW5kZXhlcyIsdmFsdWU6ZnVuY3Rpb24oYSxmKXt2YXIgZD10aGlzLmdldE5vdFRyaW1tZWRJbmRleGVzKClbYV0saD1pbyhkKT9kOnRoaXMuZ2V0TnVtYmVyT2ZJbmRleGVzKCksbT10aGlzLmdldEluZGV4ZXNTZXF1ZW5jZSgp'@;
put 'LmluY2x1ZGVzKGQpP3RoaXMuZ2V0SW5kZXhlc1NlcXVlbmNlKCkuaW5kZXhPZihkKTp0aGlzLmdldE51bWJlck9mSW5kZXhlcygpLF89aGEobmV3IEFycmF5KGYpLmZpbGwoaCksZnVuY3Rpb24oTyxYKXtyZXR1cm4gTytYfSk7dGhpcy5zdXNwZW5kT3BlcmF0aW9ucygpLHRoaXMuaW5kZXhl'@;
put 'c0NoYW5nZVNvdXJjZT0iaW5zZXJ0Iix0aGlzLmluZGV4ZXNTZXF1ZW5jZS5pbnNlcnQobSxfKSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9dm9pZCAwLHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5pbnNlcnRUb0V2ZXJ5KG0sXyksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5pbnNl'@;
put 'cnRUb0V2ZXJ5KG0sXyksdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24uaW5zZXJ0VG9FdmVyeShtLF8pLHRoaXMucmVzdW1lT3BlcmF0aW9ucygpfX0se2tleToicmVtb3ZlSW5kZXhlcyIsdmFsdWU6ZnVuY3Rpb24oYSl7dGhpcy5zdXNwZW5kT3BlcmF0aW9ucygpLHRoaXMuaW5kZXhlc0No'@;
put 'YW5nZVNvdXJjZT0icmVtb3ZlIix0aGlzLmluZGV4ZXNTZXF1ZW5jZS5yZW1vdmUoYSksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPXZvaWQgMCx0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24ucmVtb3ZlRnJvbUV2ZXJ5KGEpLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24ucmVtb3ZlRnJv'@;
put 'bUV2ZXJ5KGEpLHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLnJlbW92ZUZyb21FdmVyeShhKSx0aGlzLnJlc3VtZU9wZXJhdGlvbnMoKX19LHtrZXk6InVwZGF0ZUNhY2hlIix2YWx1ZTpmdW5jdGlvbigpeyghMD09PShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1sw'@;
put 'XSYmYXJndW1lbnRzWzBdKXx8ITE9PT10aGlzLmlzQmF0Y2hlZCYmITA9PT0odGhpcy5pbmRleGVzU2VxdWVuY2VDaGFuZ2VkfHx0aGlzLnRyaW1tZWRJbmRleGVzQ2hhbmdlZHx8dGhpcy5oaWRkZW5JbmRleGVzQ2hhbmdlZCkpJiYodGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLnVwZGF0'@;
put 'ZUNhY2hlKCksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi51cGRhdGVDYWNoZSgpLHRoaXMubm90VHJpbW1lZEluZGV4ZXNDYWNoZT10aGlzLmdldE5vdFRyaW1tZWRJbmRleGVzKCExKSx0aGlzLm5vdEhpZGRlbkluZGV4ZXNDYWNoZT10aGlzLmdldE5vdEhpZGRlbkluZGV4ZXMoITEpLHRo'@;
put 'aXMucmVuZGVyYWJsZVBoeXNpY2FsSW5kZXhlc0NhY2hlPXRoaXMuZ2V0UmVuZGVyYWJsZUluZGV4ZXMoITEpLHRoaXMuY2FjaGVGcm9tUGh5c2ljYWxUb1Zpc3VhbEluZGV4ZXMoKSx0aGlzLmNhY2hlRnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXMoKSx0aGlzLmhpZGRlbkluZGV4ZXND'@;
put 'aGFuZ2VkJiZ0aGlzLmhpZGluZ0NoYW5nZXNPYnNlcnZhYmxlLmVtaXQodGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5nZXRNZXJnZWRWYWx1ZXMoKSksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjYWNoZVVwZGF0ZWQiLHtpbmRleGVzU2VxdWVuY2VDaGFuZ2VkOnRoaXMuaW5kZXhlc1NlcXVlbmNl'@;
put 'Q2hhbmdlZCx0cmltbWVkSW5kZXhlc0NoYW5nZWQ6dGhpcy50cmltbWVkSW5kZXhlc0NoYW5nZWQsaGlkZGVuSW5kZXhlc0NoYW5nZWQ6dGhpcy5oaWRkZW5JbmRleGVzQ2hhbmdlZH0pLHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2hhbmdlZD0hMSx0aGlzLnRyaW1tZWRJbmRleGVzQ2hhbmdlZD0h'@;
put 'MSx0aGlzLmhpZGRlbkluZGV4ZXNDaGFuZ2VkPSExKX19LHtrZXk6ImNhY2hlRnJvbVBoeXNpY2FsVG9WaXN1YWxJbmRleGVzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKTt0aGlzLmZyb21QaHlzaWNhbFRvVmlzdWFsSW5kZXhlc0Nh'@;
put 'Y2hlLmNsZWFyKCk7Zm9yKHZhciBmPTA7ZjxhO2YrPTEpe3ZhciBkPXRoaXMuZ2V0UGh5c2ljYWxGcm9tVmlzdWFsSW5kZXgoZik7dGhpcy5mcm9tUGh5c2ljYWxUb1Zpc3VhbEluZGV4ZXNDYWNoZS5zZXQoZCxmKX19fSx7a2V5OiJjYWNoZUZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVz'@;
put 'Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0UmVuZGVyYWJsZUluZGV4ZXNMZW5ndGgoKTt0aGlzLmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUuY2xlYXIoKTtmb3IodmFyIGY9MDtmPGE7Zis9MSl7dmFyIGQ9dGhpcy5nZXRQaHlzaWNhbEZyb21SZW5kZXJhYmxl'@;
put 'SW5kZXgoZiksaD10aGlzLmdldFZpc3VhbEZyb21QaHlzaWNhbEluZGV4KGQpO3RoaXMuZnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXNDYWNoZS5zZXQoaCxmKX19fV0pLGx9KCk7ZnVuY3Rpb24gZGRlKGwpe3ZhciBhPS9eKFthLXpBLVpdezJ9KS0oW2EtekEtWl17Mn0pJC8uZXhlYyhs'@;
put 'KTtyZXR1cm4gYT8iIi5jb25jYXQoYVsxXS50b0xvd2VyQ2FzZSgpLCItIikuY29uY2F0KGFbMl0udG9VcHBlckNhc2UoKSk6bH1mdW5jdGlvbiBoZGUobCl7aW8obCkmJklZKE9sKGZkZXx8KGZkZT1mdW5jdGlvbiB3cnQobCxjKXtyZXR1cm4gY3x8KGM9bC5zbGljZSgwKSksT2JqZWN0LmZy'@;
put 'ZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhsLHtyYXc6e3ZhbHVlOk9iamVjdC5mcmVlemUoYyl9fSkpfShbJ0xhbmd1YWdlIHdpdGggY29kZSAiJywnIiB3YXMgbm90IGZvdW5kLiBZb3Ugc2hvdWxkIHJlZ2lzdGVyIHBhcnRpY3VsYXIgbGFuZ3VhZ2UgXG4gICAgYmVmb3JlIHVzaW5n'@;
put 'IGl0LiBSZWFkIG1vcmUgYWJvdXQgdGhpcyBpc3N1ZSBhdDogaHR0cHM6Ly9kb2NzLmhhbmRzb250YWJsZS5jb20vaTE4bi9taXNzaW5nLWxhbmd1YWdlLWNvZGUuJ10sWydMYW5ndWFnZSB3aXRoIGNvZGUgIicsJyIgd2FzIG5vdCBmb3VuZC4gWW91IHNob3VsZCByZWdpc3RlciBwYXJ0aWN1'@;
put 'bGFyIGxhbmd1YWdlXFx4MjBcbiAgICBiZWZvcmUgdXNpbmcgaXQuIFJlYWQgbW9yZSBhYm91dCB0aGlzIGlzc3VlIGF0OiBodHRwczovL2RvY3MuaGFuZHNvbnRhYmxlLmNvbS9pMThuL21pc3NpbmctbGFuZ3VhZ2UtY29kZS4nXSkpLGwpKX1UbChzRyxXMCk7dmFyIHBkZT1GZigicGhyYXNl'@;
put 'Rm9ybWF0dGVycyIpLE1ydD1wZGUucmVnaXN0ZXIsa3J0PXBkZS5nZXRWYWx1ZXM7IWZ1bmN0aW9uIEVydChsLGMpe01ydChsLGMpfSgicGx1cmFsaXplIixmdW5jdGlvbiBTcnQobCxjKXtyZXR1cm4gQXJyYXkuaXNBcnJheShsKSYmTnVtYmVyLmlzSW50ZWdlcihjKT9sW2NdOmx9KTt2YXIg'@;
put 'WmksbWRlPSJDb250ZXh0TWVudTppdGVtcyIsaWE9bWRlLHVHPSIiLmNvbmNhdChpYSwiLm5vSXRlbXMiKSxjRz0iIi5jb25jYXQoaWEsIi5pbnNlcnRSb3dBYm92ZSIpLGZHPSIiLmNvbmNhdChpYSwiLmluc2VydFJvd0JlbG93IiksZEc9IiIuY29uY2F0KGlhLCIuaW5zZXJ0Q29sdW1uT25U'@;
put 'aGVMZWZ0IiksaEc9IiIuY29uY2F0KGlhLCIuaW5zZXJ0Q29sdW1uT25UaGVSaWdodCIpLHBHPSIiLmNvbmNhdChpYSwiLnJlbW92ZVJvdyIpLG1HPSIiLmNvbmNhdChpYSwiLnJlbW92ZUNvbHVtbiIpLGdHPSIiLmNvbmNhdChpYSwiLnVuZG8iKSx2Rz0iIi5jb25jYXQoaWEsIi5yZWRvIiks'@;
put 'eUc9IiIuY29uY2F0KGlhLCIucmVhZE9ubHkiKSxiRz0iIi5jb25jYXQoaWEsIi5jbGVhckNvbHVtbiIpLF9HPSIiLmNvbmNhdChpYSwiLmNvcHkiKSx3Rz0iIi5jb25jYXQoaWEsIi5jb3B5V2l0aEhlYWRlcnMiKSxDRz0iIi5jb25jYXQoaWEsIi5jb3B5V2l0aEdyb3VwSGVhZGVycyIpLFNH'@;
put 'PSIiLmNvbmNhdChpYSwiLmNvcHlIZWFkZXJzT25seSIpLE1HPSIiLmNvbmNhdChpYSwiLmN1dCIpLGtHPSIiLmNvbmNhdChpYSwiLmZyZWV6ZUNvbHVtbiIpLEVHPSIiLmNvbmNhdChpYSwiLnVuZnJlZXplQ29sdW1uIikseEc9IiIuY29uY2F0KGlhLCIubWVyZ2VDZWxscyIpLEFHPSIiLmNv'@;
put 'bmNhdChpYSwiLnVubWVyZ2VDZWxscyIpLFRHPSIiLmNvbmNhdChpYSwiLmFkZENvbW1lbnQiKSxPRz0iIi5jb25jYXQoaWEsIi5lZGl0Q29tbWVudCIpLERHPSIiLmNvbmNhdChpYSwiLnJlbW92ZUNvbW1lbnQiKSxJRz0iIi5jb25jYXQoaWEsIi5yZWFkT25seUNvbW1lbnQiKSxSRz0iIi5j'@;
put 'b25jYXQoaWEsIi5hbGlnbiIpLExHPSIiLmNvbmNhdChpYSwiLmFsaWduLmxlZnQiKSxQRz0iIi5jb25jYXQoaWEsIi5hbGlnbi5jZW50ZXIiKSxGRz0iIi5jb25jYXQoaWEsIi5hbGlnbi5yaWdodCIpLEhHPSIiLmNvbmNhdChpYSwiLmFsaWduLmp1c3RpZnkiKSxORz0iIi5jb25jYXQoaWEs'@;
put 'Ii5hbGlnbi50b3AiKSxWRz0iIi5jb25jYXQoaWEsIi5hbGlnbi5taWRkbGUiKSxCRz0iIi5jb25jYXQoaWEsIi5hbGlnbi5ib3R0b20iKSxqRz0iIi5jb25jYXQoaWEsIi5ib3JkZXJzIiksekc9IiIuY29uY2F0KGlhLCIuYm9yZGVycy50b3AiKSxVRz0iIi5jb25jYXQoaWEsIi5ib3JkZXJz'@;
put 'LnJpZ2h0IiksWkc9IiIuY29uY2F0KGlhLCIuYm9yZGVycy5ib3R0b20iKSxZRz0iIi5jb25jYXQoaWEsIi5ib3JkZXJzLmxlZnQiKSxXRz0iIi5jb25jYXQoaWEsIi5ib3JkZXJzLnJlbW92ZSIpLEdHPSIiLmNvbmNhdChpYSwiLm5lc3RlZEhlYWRlcnMuaW5zZXJ0Q2hpbGRSb3ciKSwkRz0i'@;
put 'Ii5jb25jYXQoaWEsIi5uZXN0ZWRIZWFkZXJzLmRldGFjaEZyb21QYXJlbnQiKSxLRz0iIi5jb25jYXQoaWEsIi5oaWRlQ29sdW1uIikscUc9IiIuY29uY2F0KGlhLCIuc2hvd0NvbHVtbiIpLFhHPSIiLmNvbmNhdChpYSwiLmhpZGVSb3ciKSxKRz0iIi5jb25jYXQoaWEsIi5zaG93Um93Iiks'@;
put 'bjA9IkZpbHRlcnM6Iixrcz0iIi5jb25jYXQobjAsImNvbmRpdGlvbnMiKSxxUj0iIi5jb25jYXQoa3MsIi5ub25lIiksUUc9IiIuY29uY2F0KGtzLCIuaXNFbXB0eSIpLGUkPSIiLmNvbmNhdChrcywiLmlzTm90RW1wdHkiKSx0JD0iIi5jb25jYXQoa3MsIi5pc0VxdWFsVG8iKSxuJD0iIi5j'@;
put 'b25jYXQoa3MsIi5pc05vdEVxdWFsVG8iKSxyJD0iIi5jb25jYXQoa3MsIi5iZWdpbnNXaXRoIiksaSQ9IiIuY29uY2F0KGtzLCIuZW5kc1dpdGgiKSxvJD0iIi5jb25jYXQoa3MsIi5jb250YWlucyIpLGEkPSIiLmNvbmNhdChrcywiLmRvZXNOb3RDb250YWluIiksQXJ0PSIiLmNvbmNhdChr'@;
put 'cywiLmJ5VmFsdWUiKSxsJD0iIi5jb25jYXQoa3MsIi5ncmVhdGVyVGhhbiIpLHMkPSIiLmNvbmNhdChrcywiLmdyZWF0ZXJUaGFuT3JFcXVhbFRvIiksdSQ9IiIuY29uY2F0KGtzLCIubGVzc1RoYW4iKSxjJD0iIi5jb25jYXQoa3MsIi5sZXNzVGhhbk9yRXF1YWxUbyIpLGYkPSIiLmNvbmNh'@;
put 'dChrcywiLmlzQmV0d2VlbiIpLGQkPSIiLmNvbmNhdChrcywiLmlzTm90QmV0d2VlbiIpLGgkPSIiLmNvbmNhdChrcywiLmFmdGVyIikscCQ9IiIuY29uY2F0KGtzLCIuYmVmb3JlIiksbSQ9IiIuY29uY2F0KGtzLCIudG9kYXkiKSxnJD0iIi5jb25jYXQoa3MsIi50b21vcnJvdyIpLHYkPSIi'@;
put 'LmNvbmNhdChrcywiLnllc3RlcmRheSIpLHkkPSIiLmNvbmNhdChuMCwibGFiZWxzLmZpbHRlckJ5Q29uZGl0aW9uIiksYiQ9IiIuY29uY2F0KG4wLCJsYWJlbHMuZmlsdGVyQnlWYWx1ZSIpLF8kPSIiLmNvbmNhdChuMCwibGFiZWxzLmNvbmp1bmN0aW9uIiksWFI9IiIuY29uY2F0KG4wLCJs'@;
put 'YWJlbHMuZGlzanVuY3Rpb24iKSxKUj0iIi5jb25jYXQobjAsInZhbHVlcy5ibGFua0NlbGxzIiksdyQ9IiIuY29uY2F0KG4wLCJidXR0b25zLnNlbGVjdEFsbCIpLEMkPSIiLmNvbmNhdChuMCwiYnV0dG9ucy5jbGVhciIpLFMkPSIiLmNvbmNhdChuMCwiYnV0dG9ucy5vayIpLE0kPSIiLmNv'@;
put 'bmNhdChuMCwiYnV0dG9ucy5jYW5jZWwiKSxrJD0iIi5jb25jYXQobjAsImJ1dHRvbnMucGxhY2Vob2xkZXIuc2VhcmNoIiksRSQ9IiIuY29uY2F0KG4wLCJidXR0b25zLnBsYWNlaG9sZGVyLnZhbHVlIikseCQ9IiIuY29uY2F0KG4wLCJidXR0b25zLnBsYWNlaG9sZGVyLnNlY29uZFZhbHVl'@;
put 'Iik7ZnVuY3Rpb24gWk0obCl7cmV0dXJuKFpNPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wm'@;
put 'JmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gS2kobCxjLGEpe3JldHVybiBjPWZ1bmN0aW9uIFRydChsKXt2YXIgYz1mdW5jdGlvbiBPcnQobCxjKXtpZigib2JqZWN0IiE9PVpNKGwpfHxudWxsPT09'@;
put 'bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PVpNKGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmlt'@;
put 'aXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1aTShjKT9jOlN0cmluZyhjKX0oYyksYyBpbiBsP09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLGMse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25m'@;
put 'aWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpsW2NdPWEsbH1jb25zdCBnZGU9KEtpKFppPXtsYW5ndWFnZUNvZGU6ImVuLVVTIn0sdUcsIk5vIGF2YWlsYWJsZSBvcHRpb25zIiksS2koWmksY0csIkluc2VydCByb3cgYWJvdmUiKSxLaShaaSxmRywiSW5zZXJ0IHJvdyBiZWxvdyIpLEtpKFpp'@;
put 'LGRHLCJJbnNlcnQgY29sdW1uIGxlZnQiKSxLaShaaSxoRywiSW5zZXJ0IGNvbHVtbiByaWdodCIpLEtpKFppLHBHLFsiUmVtb3ZlIHJvdyIsIlJlbW92ZSByb3dzIl0pLEtpKFppLG1HLFsiUmVtb3ZlIGNvbHVtbiIsIlJlbW92ZSBjb2x1bW5zIl0pLEtpKFppLGdHLCJVbmRvIiksS2koWmks'@;
put 'dkcsIlJlZG8iKSxLaShaaSx5RywiUmVhZCBvbmx5IiksS2koWmksYkcsIkNsZWFyIGNvbHVtbiIpLEtpKFppLFJHLCJBbGlnbm1lbnQiKSxLaShaaSxMRywiTGVmdCIpLEtpKFppLFBHLCJDZW50ZXIiKSxLaShaaSxGRywiUmlnaHQiKSxLaShaaSxIRywiSnVzdGlmeSIpLEtpKFppLE5HLCJU'@;
put 'b3AiKSxLaShaaSxWRywiTWlkZGxlIiksS2koWmksQkcsIkJvdHRvbSIpLEtpKFppLGtHLCJGcmVlemUgY29sdW1uIiksS2koWmksRUcsIlVuZnJlZXplIGNvbHVtbiIpLEtpKFppLGpHLCJCb3JkZXJzIiksS2koWmksekcsIlRvcCIpLEtpKFppLFVHLCJSaWdodCIpLEtpKFppLFpHLCJCb3R0'@;
put 'b20iKSxLaShaaSxZRywiTGVmdCIpLEtpKFppLFdHLCJSZW1vdmUgYm9yZGVyKHMpIiksS2koWmksVEcsIkFkZCBjb21tZW50IiksS2koWmksT0csIkVkaXQgY29tbWVudCIpLEtpKFppLERHLCJEZWxldGUgY29tbWVudCIpLEtpKFppLElHLCJSZWFkLW9ubHkgY29tbWVudCIpLEtpKFppLHhH'@;
put 'LCJNZXJnZSBjZWxscyIpLEtpKFppLEFHLCJVbm1lcmdlIGNlbGxzIiksS2koWmksX0csIkNvcHkiKSxLaShaaSx3RyxbIkNvcHkgd2l0aCBoZWFkZXIiLCJDb3B5IHdpdGggaGVhZGVycyJdKSxLaShaaSxDRyxbIkNvcHkgd2l0aCBncm91cCBoZWFkZXIiLCJDb3B5IHdpdGggZ3JvdXAgaGVh'@;
put 'ZGVycyJdKSxLaShaaSxTRyxbIkNvcHkgaGVhZGVyIG9ubHkiLCJDb3B5IGhlYWRlcnMgb25seSJdKSxLaShaaSxNRywiQ3V0IiksS2koWmksR0csIkluc2VydCBjaGlsZCByb3ciKSxLaShaaSwkRywiRGV0YWNoIGZyb20gcGFyZW50IiksS2koWmksS0csWyJIaWRlIGNvbHVtbiIsIkhpZGUg'@;
put 'Y29sdW1ucyJdKSxLaShaaSxxRyxbIlNob3cgY29sdW1uIiwiU2hvdyBjb2x1bW5zIl0pLEtpKFppLFhHLFsiSGlkZSByb3ciLCJIaWRlIHJvd3MiXSksS2koWmksSkcsWyJTaG93IHJvdyIsIlNob3cgcm93cyJdKSxLaShaaSxxUiwiTm9uZSIpLEtpKFppLFFHLCJJcyBlbXB0eSIpLEtpKFpp'@;
put 'LGUkLCJJcyBub3QgZW1wdHkiKSxLaShaaSx0JCwiSXMgZXF1YWwgdG8iKSxLaShaaSxuJCwiSXMgbm90IGVxdWFsIHRvIiksS2koWmksciQsIkJlZ2lucyB3aXRoIiksS2koWmksaSQsIkVuZHMgd2l0aCIpLEtpKFppLG8kLCJDb250YWlucyIpLEtpKFppLGEkLCJEb2VzIG5vdCBjb250YWlu'@;
put 'IiksS2koWmksbCQsIkdyZWF0ZXIgdGhhbiIpLEtpKFppLHMkLCJHcmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8iKSxLaShaaSx1JCwiTGVzcyB0aGFuIiksS2koWmksYyQsIkxlc3MgdGhhbiBvciBlcXVhbCB0byIpLEtpKFppLGYkLCJJcyBiZXR3ZWVuIiksS2koWmksZCQsIklzIG5vdCBiZXR3'@;
put 'ZWVuIiksS2koWmksaCQsIkFmdGVyIiksS2koWmkscCQsIkJlZm9yZSIpLEtpKFppLG0kLCJUb2RheSIpLEtpKFppLGckLCJUb21vcnJvdyIpLEtpKFppLHYkLCJZZXN0ZXJkYXkiKSxLaShaaSxKUiwiQmxhbmsgY2VsbHMiKSxLaShaaSx5JCwiRmlsdGVyIGJ5IGNvbmRpdGlvbiIpLEtpKFpp'@;
put 'LGIkLCJGaWx0ZXIgYnkgdmFsdWUiKSxLaShaaSxfJCwiQW5kIiksS2koWmksWFIsIk9yIiksS2koWmksdyQsIlNlbGVjdCBhbGwiKSxLaShaaSxDJCwiQ2xlYXIiKSxLaShaaSxTJCwiT0siKSxLaShaaSxNJCwiQ2FuY2VsIiksS2koWmksayQsIlNlYXJjaCIpLEtpKFppLEUkLCJWYWx1ZSIp'@;
put 'LEtpKFppLHgkLCJTZWNvbmQgdmFsdWUiKSxaaSk7dmFyIEEkPWdkZS5sYW5ndWFnZUNvZGUsUVI9RmYoImxhbmd1YWdlc0RpY3Rpb25hcmllcyIpLElydD1RUi5yZWdpc3Rlcix2ZGU9UVIuZ2V0SXRlbSxScnQ9UVIuaGFzSXRlbSxMcnQ9UVIuZ2V0VmFsdWVzO2Z1bmN0aW9uIHlkZShsLGMp'@;
put 'e3ZhciBhPWwsZj1jO3JldHVybiBwYShsKSYmKGE9KGY9bCkubGFuZ3VhZ2VDb2RlKSxmdW5jdGlvbiBQcnQobCxjKXtsIT09QSQmJmZ1bmN0aW9uIENydChsLGMpe21hKGMsZnVuY3Rpb24oYSxmKXtMbChsW2ZdKSYmKGxbZl09YSl9KX0oYyx2ZGUoQSQpKX0oYSxmKSxJcnQoYSx4YyhmKSks'@;
put 'eGMoZil9ZnVuY3Rpb24gYmRlKGwpe3JldHVybiBUJChsKT94Yyh2ZGUobCkpOm51bGx9ZnVuY3Rpb24gVCQobCl7cmV0dXJuIFJydChsKX1mdW5jdGlvbiBfZGUobCxjLGEpe3ZhciBmPWJkZShsKTtpZihudWxsPT09ZilyZXR1cm4gbnVsbDt2YXIgZD1mW2NdO2lmKExsKGQpKXJldHVybiBu'@;
put 'dWxsO3ZhciBoPWZ1bmN0aW9uIEhydChsLGMpe3ZhciBhPWw7cmV0dXJuIFJuKGZ1bmN0aW9uIHhydCgpe3JldHVybiBrcnQoKX0oKSxmdW5jdGlvbihmKXthPWYobCxjKX0pLGF9KGQsYSk7cmV0dXJuIEFycmF5LmlzQXJyYXkoaCk/aFswXTpofXlkZShnZGUpLFQoNTU2MTUpO3ZhciBlTD0i'@;
put 'YWN0aXZlLWhlYWRlciIsdEw9ImFyZWEiLFlNPSJjZWxsIixPJD0iZmlsbCIsV009ImhlYWRlciIsRCQ9ImN1c3RvbS1zZWxlY3Rpb24iO2Z1bmN0aW9uIEdNKGwpe3JldHVybihHTT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9m'@;
put 'dW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIEkkKGwsYyl7cmV0'@;
put 'dXJuIGZ1bmN0aW9uIHpydChsKXtpZihBcnJheS5pc0FycmF5KGwpKXJldHVybiBsfShsKXx8ZnVuY3Rpb24ganJ0KGwsYyl7dmFyIGE9bnVsbD09bD9udWxsOnR5cGVvZiBTeW1ib2w8InUiJiZsW1N5bWJvbC5pdGVyYXRvcl18fGxbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1hKXt2YXIgZixk'@;
put 'LGgsbSxfPVtdLE89ITAsWD0hMTt0cnl7aWYoaD0oYT1hLmNhbGwobCkpLm5leHQsMD09PWMpe2lmKE9iamVjdChhKSE9PWEpcmV0dXJuO089ITF9ZWxzZSBmb3IoOyEoTz0oZj1oLmNhbGwoYSkpLmRvbmUpJiYoXy5wdXNoKGYudmFsdWUpLF8ubGVuZ3RoIT09Yyk7Tz0hMCk7fWNhdGNoKGFl'@;
put 'KXtYPSEwLGQ9YWV9ZmluYWxseXt0cnl7aWYoIU8mJm51bGwhPWEucmV0dXJuJiYobT1hLnJldHVybigpLE9iamVjdChtKSE9PW0pKXJldHVybn1maW5hbGx5e2lmKFgpdGhyb3cgZH19cmV0dXJuIF99fShsLGMpfHxmdW5jdGlvbiBCcnQobCxjKXtpZihsKXtpZigic3RyaW5nIj09dHlwZW9m'@;
put 'IGwpcmV0dXJuIHdkZShsLGMpO3ZhciBhPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsKS5zbGljZSg4LC0xKTtpZigiT2JqZWN0Ij09PWEmJmwuY29uc3RydWN0b3ImJihhPWwuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1hfHwiU2V0Ij09PWEpcmV0dXJuIEFycmF5LmZyb20o'@;
put 'bCk7aWYoIkFyZ3VtZW50cyI9PT1hfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChhKSlyZXR1cm4gd2RlKGwsYyl9fShsLGMpfHxmdW5jdGlvbiBWcnQoKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUg'@;
put 'bm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIHdkZShsLGMpeyhudWxsPT1jfHxjPmwubGVuZ3RoKSYmKGM9bC5sZW5ndGgp'@;
put 'O2Zvcih2YXIgYT0wLGY9bmV3IEFycmF5KGMpO2E8YzthKyspZlthXT1sW2FdO3JldHVybiBmfWZ1bmN0aW9uIENkZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1'@;
put 'ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsWXJ0KGYua2V5KSxmKX19ZnVuY3Rpb24gWXJ0KGwpe3ZhciBjPWZ1bmN0aW9uIFdydChsLGMpe2lmKCJvYmplY3QiIT09R00obCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0'@;
put 'aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09R00oZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1j'@;
put 'P1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PUdNKGMpP2M6U3RyaW5nKGMpfVQoODM4NTcpO3ZhciBHcnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKGMsYSl7KGZ1bmN0aW9uIFVydChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBl'@;
put 'RXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyxsKSxhJiYodGhpcy5ldmVudE1hbmFnZXI9Yy5ldmVudE1hbmFnZXIsdGhpcy5pbnN0YW5jZT1jLHRoaXMud290PWMsdGhpcy5zZXR0aW5ncz1hLHRoaXMubW91c2VEb3duPSExLHRoaXMubWFpbj1udWxs'@;
put 'LHRoaXMudG9wPW51bGwsdGhpcy5ib3R0b209bnVsbCx0aGlzLnN0YXJ0PW51bGwsdGhpcy5lbmQ9bnVsbCx0aGlzLnRvcFN0eWxlPW51bGwsdGhpcy5ib3R0b21TdHlsZT1udWxsLHRoaXMuc3RhcnRTdHlsZT1udWxsLHRoaXMuZW5kU3R5bGU9bnVsbCx0aGlzLmNvcm5lckRlZmF1bHRTdHls'@;
put 'ZT17d2lkdGg6IjZweCIsaGVpZ2h0OiI2cHgiLGJvcmRlcldpZHRoOiIxcHgiLGJvcmRlclN0eWxlOiJzb2xpZCIsYm9yZGVyQ29sb3I6IiNGRkYifSx0aGlzLmNvcm5lckNlbnRlclBvaW50T2Zmc2V0PS1wYXJzZUludCh0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS53aWR0aCwxMCkvMix0aGlz'@;
put 'LmNvcm5lcj1udWxsLHRoaXMuY29ybmVyU3R5bGU9bnVsbCx0aGlzLmNyZWF0ZUJvcmRlcnMoYSksdGhpcy5yZWdpc3Rlckxpc3RlbmVycygpKX1yZXR1cm4gZnVuY3Rpb24gWnJ0KGwsYyxhKXtjJiZDZGUobC5wcm90b3R5cGUsYyksYSYmQ2RlKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5'@;
put 'KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGwsW3trZXk6InJlZ2lzdGVyTGlzdGVuZXJzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMsZj10aGlzLndvdC5yb290RG9jdW1lbnQuYm9keTt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGYsIm1vdXNlZG93biIs'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gYS5vbk1vdXNlRG93bigpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihmLCJtb3VzZXVwIixmdW5jdGlvbigpe3JldHVybiBhLm9uTW91c2VVcCgpfSk7Zm9yKHZhciBkPWZ1bmN0aW9uKE8pe2EuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlz'@;
put 'dGVuZXIoYS5tYWluLmNoaWxkTm9kZXNbT10sIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKGFlKXtyZXR1cm4gYS5vbk1vdXNlRW50ZXIoYWUsYS5tYWluLmNoaWxkTm9kZXNbT10pfSl9LGg9MCxtPXRoaXMubWFpbi5jaGlsZE5vZGVzLmxlbmd0aDtoPG07aCsrKWQoaCl9fSx7a2V5OiJvbk1vdXNl'@;
put 'RG93biIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLm1vdXNlRG93bj0hMH19LHtrZXk6Im9uTW91c2VVcCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLm1vdXNlRG93bj0hMX19LHtrZXk6Im9uTW91c2VFbnRlciIsdmFsdWU6ZnVuY3Rpb24oYSxmKXtpZih0aGlzLm1vdXNlRG93biYmdGhpcy53b3Qu'@;
put 'Z2V0U2V0dGluZygiaGlkZUJvcmRlck9uTW91c2VEb3duT3ZlciIpKXthLnByZXZlbnREZWZhdWx0KCksSGQoYSk7dmFyIGQ9dGhpcyxoPXRoaXMud290LnJvb3REb2N1bWVudC5ib2R5LG09Zi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtmLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuZXZl'@;
put 'bnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoaCwibW91c2Vtb3ZlIixmdW5jdGlvbiBPKFgpeyhmdW5jdGlvbiBfKFgpe2lmKFguY2xpZW50WTxNYXRoLmZsb29yKG0udG9wKXx8WC5jbGllbnRZPk1hdGguY2VpbChtLnRvcCttLmhlaWdodCl8fFguY2xpZW50WDxNYXRoLmZsb29yKG0ubGVm'@;
put 'dCl8fFguY2xpZW50WD5NYXRoLmNlaWwobS5sZWZ0K20ud2lkdGgpKXJldHVybiEwfSkoWCkmJihkLmV2ZW50TWFuYWdlci5yZW1vdmVFdmVudExpc3RlbmVyKGgsIm1vdXNlbW92ZSIsTyksZi5zdHlsZS5kaXNwbGF5PSJibG9jayIpfSl9fX0se2tleToiY3JlYXRlQm9yZGVycyIsdmFsdWU6'@;
put 'ZnVuY3Rpb24oYSl7dmFyIGY9dGhpcy53b3Qucm9vdERvY3VtZW50O3RoaXMubWFpbj1mLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3ZhciBkPVsidG9wIiwic3RhcnQiLCJib3R0b20iLCJlbmQiLCJjb3JuZXIiXSxoPXRoaXMubWFpbi5zdHlsZTtoLnBvc2l0aW9uPSJhYnNvbHV0ZSIsaC50b3A9'@;
put 'MCxoLmxlZnQ9MDtmb3IodmFyIG09MDttPDU7bSsrKXt2YXIgXz1kW21dLE89Zi5jcmVhdGVFbGVtZW50KCJkaXYiKTtPLmNsYXNzTmFtZT0id3RCb3JkZXIgIi5jb25jYXQodGhpcy5zZXR0aW5ncy5jbGFzc05hbWV8fCIiKSx0aGlzLnNldHRpbmdzW19dJiZ0aGlzLnNldHRpbmdzW19dLmhp'@;
put 'ZGUmJihPLmNsYXNzTmFtZSs9IiBoaWRkZW4iKSwoaD1PLnN0eWxlKS5iYWNrZ3JvdW5kQ29sb3I9dGhpcy5zZXR0aW5nc1tfXSYmdGhpcy5zZXR0aW5nc1tfXS5jb2xvcj90aGlzLnNldHRpbmdzW19dLmNvbG9yOmEuYm9yZGVyLmNvbG9yLGguaGVpZ2h0PSIiLmNvbmNhdCh0aGlzLnNldHRp'@;
put 'bmdzW19dJiZ0aGlzLnNldHRpbmdzW19dLndpZHRoP3RoaXMuc2V0dGluZ3NbX10ud2lkdGg6YS5ib3JkZXIud2lkdGgsInB4IiksaC53aWR0aD0iIi5jb25jYXQodGhpcy5zZXR0aW5nc1tfXSYmdGhpcy5zZXR0aW5nc1tfXS53aWR0aD90aGlzLnNldHRpbmdzW19dLndpZHRoOmEuYm9yZGVy'@;
put 'LndpZHRoLCJweCIpLHRoaXMubWFpbi5hcHBlbmRDaGlsZChPKX10aGlzLnRvcD10aGlzLm1haW4uY2hpbGROb2Rlc1swXSx0aGlzLnN0YXJ0PXRoaXMubWFpbi5jaGlsZE5vZGVzWzFdLHRoaXMuYm90dG9tPXRoaXMubWFpbi5jaGlsZE5vZGVzWzJdLHRoaXMuZW5kPXRoaXMubWFpbi5jaGls'@;
put 'ZE5vZGVzWzNdLHRoaXMudG9wU3R5bGU9dGhpcy50b3Auc3R5bGUsdGhpcy5zdGFydFN0eWxlPXRoaXMuc3RhcnQuc3R5bGUsdGhpcy5ib3R0b21TdHlsZT10aGlzLmJvdHRvbS5zdHlsZSx0aGlzLmVuZFN0eWxlPXRoaXMuZW5kLnN0eWxlLHRoaXMuY29ybmVyPXRoaXMubWFpbi5jaGlsZE5v'@;
put 'ZGVzWzRdLHRoaXMuY29ybmVyLmNsYXNzTmFtZSs9IiBjb3JuZXIiLHRoaXMuY29ybmVyU3R5bGU9dGhpcy5jb3JuZXIuc3R5bGUsdGhpcy5jb3JuZXJTdHlsZS53aWR0aD10aGlzLmNvcm5lckRlZmF1bHRTdHlsZS53aWR0aCx0aGlzLmNvcm5lclN0eWxlLmhlaWdodD10aGlzLmNvcm5lckRl'@;
put 'ZmF1bHRTdHlsZS5oZWlnaHQsdGhpcy5jb3JuZXJTdHlsZS5ib3JkZXI9W3RoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlcldpZHRoLHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlclN0eWxlLHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlckNvbG9yXS5qb2luKCIgIiksUGQo'@;
put 'KSYmdGhpcy5jcmVhdGVNdWx0aXBsZVNlbGVjdG9ySGFuZGxlcygpLHRoaXMuZGlzYXBwZWFyKCk7dmFyIFg9dGhpcy53b3Qud3RUYWJsZSxhZT1YLmJvcmRlcnNIb2xkZXI7YWV8fCgoYWU9Zi5jcmVhdGVFbGVtZW50KCJkaXYiKSkuY2xhc3NOYW1lPSJodEJvcmRlcnMiLFguYm9yZGVyc0hv'@;
put 'bGRlcj1hZSxYLnNwcmVhZGVyLmFwcGVuZENoaWxkKGFlKSksYWUuYXBwZW5kQ2hpbGQodGhpcy5tYWluKX19LHtrZXk6ImNyZWF0ZU11bHRpcGxlU2VsZWN0b3JIYW5kbGVzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMsZj10aGlzLndvdC5yb290RG9jdW1lbnQ7dGhpcy5zZWxlY3Rp'@;
put 'b25IYW5kbGVzPXt0b3A6Zi5jcmVhdGVFbGVtZW50KCJESVYiKSx0b3BIaXRBcmVhOmYuY3JlYXRlRWxlbWVudCgiRElWIiksYm90dG9tOmYuY3JlYXRlRWxlbWVudCgiRElWIiksYm90dG9tSGl0QXJlYTpmLmNyZWF0ZUVsZW1lbnQoIkRJViIpfSx0aGlzLnNlbGVjdGlvbkhhbmRsZXMudG9w'@;
put 'LmNsYXNzTmFtZT0idG9wU2VsZWN0aW9uSGFuZGxlIHRvcExlZnRTZWxlY3Rpb25IYW5kbGUiLHRoaXMuc2VsZWN0aW9uSGFuZGxlcy50b3BIaXRBcmVhLmNsYXNzTmFtZT0idG9wU2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEgdG9wTGVmdFNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIix0aGlzLnNl'@;
put 'bGVjdGlvbkhhbmRsZXMuYm90dG9tLmNsYXNzTmFtZT0iYm90dG9tU2VsZWN0aW9uSGFuZGxlIGJvdHRvbVJpZ2h0U2VsZWN0aW9uSGFuZGxlIix0aGlzLnNlbGVjdGlvbkhhbmRsZXMuYm90dG9tSGl0QXJlYS5jbGFzc05hbWU9ImJvdHRvbVNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIGJvdHRv'@;
put 'bVJpZ2h0U2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEiLHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXM9e3RvcDp0aGlzLnNlbGVjdGlvbkhhbmRsZXMudG9wLnN0eWxlLHRvcEhpdEFyZWE6dGhpcy5zZWxlY3Rpb25IYW5kbGVzLnRvcEhpdEFyZWEuc3R5bGUsYm90dG9tOnRoaXMuc2VsZWN0'@;
put 'aW9uSGFuZGxlcy5ib3R0b20uc3R5bGUsYm90dG9tSGl0QXJlYTp0aGlzLnNlbGVjdGlvbkhhbmRsZXMuYm90dG9tSGl0QXJlYS5zdHlsZX0sbWEoe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaGVpZ2h0OiIiLmNvbmNhdCg0MCwicHgiKSx3aWR0aDoiIi5jb25jYXQoNDAsInB4IiksImJvcmRlci1y'@;
put 'YWRpdXMiOiIiLmNvbmNhdChwYXJzZUludCg0MC8xLjUsMTApLCJweCIpfSxmdW5jdGlvbihPLFgpe2Euc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMuYm90dG9tSGl0QXJlYVtYXT1PLGEuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMudG9wSGl0QXJlYVtYXT1PfSksbWEoe3Bvc2l0aW9uOiJhYnNv'@;
put 'bHV0ZSIsaGVpZ2h0OiIiLmNvbmNhdCgxMCwicHgiKSx3aWR0aDoiIi5jb25jYXQoMTAsInB4IiksImJvcmRlci1yYWRpdXMiOiIiLmNvbmNhdChwYXJzZUludCgxMC8xLjUsMTApLCJweCIpLGJhY2tncm91bmQ6IiNGNUY1RkYiLGJvcmRlcjoiMXB4IHNvbGlkICM0Mjg1YzgifSxmdW5jdGlv'@;
put 'bihPLFgpe2Euc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMuYm90dG9tW1hdPU8sYS5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy50b3BbWF09T30pLHRoaXMubWFpbi5hcHBlbmRDaGlsZCh0aGlzLnNlbGVjdGlvbkhhbmRsZXMudG9wKSx0aGlzLm1haW4uYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3Rp'@;
put 'b25IYW5kbGVzLmJvdHRvbSksdGhpcy5tYWluLmFwcGVuZENoaWxkKHRoaXMuc2VsZWN0aW9uSGFuZGxlcy50b3BIaXRBcmVhKSx0aGlzLm1haW4uYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3Rpb25IYW5kbGVzLmJvdHRvbUhpdEFyZWEpfX0se2tleToiaXNQYXJ0UmFuZ2UiLHZhbHVlOmZ1bmN0'@;
put 'aW9uKGEsZil7dmFyIGQ9dGhpcy53b3Quc2VsZWN0aW9ucy5jcmVhdGVPckdldEFyZWEoKTtyZXR1cm4hKCFkLmNlbGxSYW5nZXx8YT09PWQuY2VsbFJhbmdlLnRvLnJvdyYmZj09PWQuY2VsbFJhbmdlLnRvLmNvbCl9fSx7a2V5OiJ1cGRhdGVNdWx0aXBsZVNlbGVjdGlvbkhhbmRsZXNQb3Np'@;
put 'dGlvbiIsdmFsdWU6ZnVuY3Rpb24oYSxmLGQsaCxtLF8pe3ZhciBYPXRoaXMud290Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicnRsTW9kZSIpPyJyaWdodCI6ImxlZnQiLGFlPXRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMscGU9YWUudG9wLGJlPWFlLnRvcEhpdEFyZWEseGU9YWUuYm90'@;
put 'dG9tLFZlPWFlLmJvdHRvbUhpdEFyZWEsWmU9cGFyc2VJbnQocGUuYm9yZGVyV2lkdGgsMTApLGx0PXBhcnNlSW50KHBlLndpZHRoLDEwKSxkdD1wYXJzZUludChiZS53aWR0aCwxMCksZ3Q9dGhpcy53b3Qud3RUYWJsZS5nZXRXaWR0aCgpLGp0PXRoaXMud290Lnd0VGFibGUuZ2V0SGVpZ2h0'@;
put 'KCk7cGUudG9wPSIiLmNvbmNhdChwYXJzZUludChkLWx0LTEsMTApLCJweCIpLHBlW1hdPSIiLmNvbmNhdChwYXJzZUludChoLWx0LTEsMTApLCJweCIpLGJlLnRvcD0iIi5jb25jYXQocGFyc2VJbnQoZC1kdC80KjMsMTApLCJweCIpLGJlW1hdPSIiLmNvbmNhdChwYXJzZUludChoLWR0LzQq'@;
put 'MywxMCksInB4Iik7dmFyIHJuPU1hdGgubWluKHBhcnNlSW50KGgrbSwxMCksZ3QtbHQtMipaZSksWHQ9TWF0aC5taW4ocGFyc2VJbnQoaCttLWR0LzQsMTApLGd0LWR0LTIqWmUpO3hlW1hdPSIiLmNvbmNhdChybiwicHgiKSxWZVtYXT0iIi5jb25jYXQoWHQsInB4Iik7dmFyIHluPU1hdGgu'@;
put 'bWluKHBhcnNlSW50KGQrXywxMCksanQtbHQtMipaZSksUW49TWF0aC5taW4ocGFyc2VJbnQoZCtfLWR0LzQsMTApLGp0LWR0LTIqWmUpO3hlLnRvcD0iIi5jb25jYXQoeW4sInB4IiksVmUudG9wPSIiLmNvbmNhdChRbiwicHgiKSx0aGlzLnNldHRpbmdzLmJvcmRlci5jb3JuZXJWaXNpYmxl'@;
put 'JiZ0aGlzLnNldHRpbmdzLmJvcmRlci5jb3JuZXJWaXNpYmxlKCk/KHBlLmRpc3BsYXk9ImJsb2NrIixiZS5kaXNwbGF5PSJibG9jayIsdGhpcy5pc1BhcnRSYW5nZShhLGYpPyh4ZS5kaXNwbGF5PSJub25lIixWZS5kaXNwbGF5PSJub25lIik6KHhlLmRpc3BsYXk9ImJsb2NrIixWZS5kaXNw'@;
put 'bGF5PSJibG9jayIpKToocGUuZGlzcGxheT0ibm9uZSIseGUuZGlzcGxheT0ibm9uZSIsYmUuZGlzcGxheT0ibm9uZSIsVmUuZGlzcGxheT0ibm9uZSIpLGE9PT10aGlzLndvdC53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpfHxmPT09dGhpcy53b3Qud3RTZXR0aW5ncy5n'@;
put 'ZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpPyhwZS56SW5kZXg9Ijk5OTkiLGJlLnpJbmRleD0iOTk5OSIpOihwZS56SW5kZXg9IiIsYmUuekluZGV4PSIiKX19LHtrZXk6ImFwcGVhciIsdmFsdWU6ZnVuY3Rpb24oYSl7aWYoIXRoaXMuZGlzYWJsZWQpe2Zvcih2YXIgXyxPLFgsYWUs'@;
put 'cGUsYmUsZj10aGlzLndvdCxkPWYud3RUYWJsZSxoPWYucm9vdERvY3VtZW50LG09Zi5yb290V2luZG93LHhlPWQuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKSxWZT0wO1ZlPHhlO1ZlKz0xKXt2YXIgWmU9ZC5yb3dGaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShWZSk7aWYoWmU+PWFbMF0mJlplPD1h'@;
put 'WzJdKXtfPVplLHBlPWFbMF07YnJlYWt9fWZvcih2YXIgbHQ9eGUtMTtsdD49MDtsdC09MSl7dmFyIGR0PWQucm93RmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UobHQpO2lmKGR0Pj1hWzBdJiZkdDw9YVsyXSl7Tz1kdDticmVha319Zm9yKHZhciBndD1kLmdldFJlbmRlcmVkQ29sdW1uc0NvdW50'@;
put 'KCksanQ9MDtqdDxndDtqdCs9MSl7dmFyIHJuPWQuY29sdW1uRmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UoanQpO2lmKHJuPj1hWzFdJiZybjw9YVszXSl7WD1ybixiZT1hWzFdO2JyZWFrfX1mb3IodmFyIFh0PWd0LTE7WHQ+PTA7WHQtPTEpe3ZhciB5bj1kLmNvbHVtbkZpbHRlci5yZW5kZXJl'@;
put 'ZFRvU291cmNlKFh0KTtpZih5bj49YVsxXSYmeW48PWFbM10pe2FlPXluO2JyZWFrfX1pZih2b2lkIDA9PT1ffHx2b2lkIDA9PT1YKXJldHVybiB2b2lkIHRoaXMuZGlzYXBwZWFyKCk7dmFyIFFuPWQuZ2V0Q2VsbCh0aGlzLndvdC5jcmVhdGVDZWxsQ29vcmRzKF8sWCkpLE9yPV8hPT1PfHxY'@;
put 'IT09YWUsVnI9T3I/ZC5nZXRDZWxsKHRoaXMud290LmNyZWF0ZUNlbGxDb29yZHMoTyxhZSkpOlFuLFpyPWl1KFFuKSxpcj1Pcj9pdShWcik6WnIsc2k9aXUoZC5UQUJMRSksQXI9U2woZC5UQUJMRSksRW49WnIudG9wLFRyPVpyLmxlZnQsVm49dGhpcy53b3Qud3RTZXR0aW5ncy5nZXRTZXR0'@;
put 'aW5nKCJydGxNb2RlIiksY3I9MCxDcj0wO2lmKFZuKXt2YXIgWXI9U2woUW4pO0NyPVRyK1lyLWlyLmxlZnQsY3I9bS5pbm5lcldpZHRoLVRyLVlyLShtLmlubmVyV2lkdGgtc2kubGVmdC1BciktMX1lbHNlIENyPWlyLmxlZnQrU2woVnIpLVRyLGNyPVRyLXNpLmxlZnQtMTtpZih0aGlzLmlz'@;
put 'RW50aXJlQ29sdW1uU2VsZWN0ZWQoXyxPKSl7dmFyIEZ0PXRoaXMuZ2V0RGltZW5zaW9uc0Zyb21IZWFkZXIoImNvbHVtbnMiLFgsYWUscGUsc2kpLFd0PW51bGw7aWYoRnQpe3ZhciB3bj1JJChGdCwzKTtXdD13blswXSxjcj13blsxXSxDcj13blsyXX1XdCYmKFFuPVd0KX12YXIgU249RW4t'@;
put 'c2kudG9wLTEsYnI9aXIudG9wK2NzKFZyKS1FbjtpZih0aGlzLmlzRW50aXJlUm93U2VsZWN0ZWQoWCxhZSkpe3ZhciBkcj10aGlzLmdldERpbWVuc2lvbnNGcm9tSGVhZGVyKCJyb3dzIixfLE8sYmUsc2kpLExyPW51bGw7aWYoZHIpe3ZhciBOcj1JJChkciwzKTtMcj1OclswXSxTbj1Oclsx'@;
put 'XSxicj1OclsyXX1MciYmKFFuPUxyKX12YXIgZGk9RDQoUW4sbSk7cGFyc2VJbnQoZGkuYm9yZGVyVG9wV2lkdGgsMTApPjAmJihTbis9MSxicj1icj4wP2JyLTE6MCkscGFyc2VJbnQoZGlbVm4/ImJvcmRlclJpZ2h0V2lkdGgiOiJib3JkZXJMZWZ0V2lkdGgiXSwxMCk+MCYmKGNyKz0xLENy'@;
put 'PUNyPjA/Q3ItMTowKTt2YXIgcXI9Vm4/InJpZ2h0IjoibGVmdCI7dGhpcy50b3BTdHlsZS50b3A9IiIuY29uY2F0KFNuLCJweCIpLHRoaXMudG9wU3R5bGVbcXJdPSIiLmNvbmNhdChjciwicHgiKSx0aGlzLnRvcFN0eWxlLndpZHRoPSIiLmNvbmNhdChDciwicHgiKSx0aGlzLnRvcFN0eWxl'@;
put 'LmRpc3BsYXk9ImJsb2NrIix0aGlzLnN0YXJ0U3R5bGUudG9wPSIiLmNvbmNhdChTbiwicHgiKSx0aGlzLnN0YXJ0U3R5bGVbcXJdPSIiLmNvbmNhdChjciwicHgiKSx0aGlzLnN0YXJ0U3R5bGUuaGVpZ2h0PSIiLmNvbmNhdChiciwicHgiKSx0aGlzLnN0YXJ0U3R5bGUuZGlzcGxheT0iYmxv'@;
put 'Y2siO3ZhciBSaT1NYXRoLmZsb29yKHRoaXMuc2V0dGluZ3MuYm9yZGVyLndpZHRoLzIpO3RoaXMuYm90dG9tU3R5bGUudG9wPSIiLmNvbmNhdChTbitici1SaSwicHgiKSx0aGlzLmJvdHRvbVN0eWxlW3FyXT0iIi5jb25jYXQoY3IsInB4IiksdGhpcy5ib3R0b21TdHlsZS53aWR0aD0iIi5j'@;
put 'b25jYXQoQ3IsInB4IiksdGhpcy5ib3R0b21TdHlsZS5kaXNwbGF5PSJibG9jayIsdGhpcy5lbmRTdHlsZS50b3A9IiIuY29uY2F0KFNuLCJweCIpLHRoaXMuZW5kU3R5bGVbcXJdPSIiLmNvbmNhdChjcitDci1SaSwicHgiKSx0aGlzLmVuZFN0eWxlLmhlaWdodD0iIi5jb25jYXQoYnIrMSwi'@;
put 'cHgiKSx0aGlzLmVuZFN0eWxlLmRpc3BsYXk9ImJsb2NrIjt2YXIgRG89dGhpcy5zZXR0aW5ncy5ib3JkZXIuY29ybmVyVmlzaWJsZTtEbz0iZnVuY3Rpb24iPT10eXBlb2YgRG8/RG8odGhpcy5zZXR0aW5ncy5sYXllckxldmVsKTpEbzt2YXIgb2E9dGhpcy53b3QuZ2V0U2V0dGluZygib25N'@;
put 'b2RpZnlHZXRDZWxsQ29vcmRzIixPLGFlKSxrbz1PLHFpPWFlO2lmKG9hJiZBcnJheS5pc0FycmF5KG9hKSl7dmFyIHh0PUkkKG9hLDQpO2tvPXh0WzJdLHFpPXh0WzNdfWlmKFBkKCl8fCFEb3x8dGhpcy5pc1BhcnRSYW5nZShrbyxxaSkpdGhpcy5jb3JuZXJTdHlsZS5kaXNwbGF5PSJub25l'@;
put 'IjtlbHNle3RoaXMuY29ybmVyU3R5bGUudG9wPSIiLmNvbmNhdChTbiticit0aGlzLmNvcm5lckNlbnRlclBvaW50T2Zmc2V0LTEsInB4IiksdGhpcy5jb3JuZXJTdHlsZVtxcl09IiIuY29uY2F0KGNyK0NyK3RoaXMuY29ybmVyQ2VudGVyUG9pbnRPZmZzZXQtMSwicHgiKSx0aGlzLmNvcm5l'@;
put 'clN0eWxlLmJvcmRlclJpZ2h0V2lkdGg9dGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuYm9yZGVyV2lkdGgsdGhpcy5jb3JuZXJTdHlsZS53aWR0aD10aGlzLmNvcm5lckRlZmF1bHRTdHlsZS53aWR0aCx0aGlzLmNvcm5lclN0eWxlLmRpc3BsYXk9Im5vbmUiO3ZhciBMaT1iNShkLlRBQkxFKSxa'@;
put 'YT1MaT09PW07WmEmJihMaT1oLmRvY3VtZW50RWxlbWVudCk7dmFyIGRzPXBhcnNlSW50KHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLndpZHRoLDEwKS8yLHZsPXBhcnNlSW50KHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmhlaWdodCwxMCkvMjtpZihhZT09PXRoaXMud290LmdldFNldHRpbmco'@;
put 'InRvdGFsQ29sdW1ucyIpLTEpe3ZhciBocz1aYT9Wci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0OlZyLm9mZnNldExlZnQ7KFZuP2hzLXBhcnNlSW50KHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLndpZHRoLDEwKS8yPDA6aHMrU2woVnIpK3BhcnNlSW50KHRoaXMuY29ybmVyRGVmYXVs'@;
put 'dFN0eWxlLndpZHRoLDEwKS8yPj1ZUyhMaSkpJiYodGhpcy5jb3JuZXJTdHlsZVtxcl09IiIuY29uY2F0KE1hdGguZmxvb3IoY3IrQ3IrdGhpcy5jb3JuZXJDZW50ZXJQb2ludE9mZnNldC1kcyksInB4IiksdGhpcy5jb3JuZXJTdHlsZVtWbj8iYm9yZGVyTGVmdFdpZHRoIjoiYm9yZGVyUmln'@;
put 'aHRXaWR0aCJdPTApfU89PT10aGlzLndvdC5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKS0xJiYoWmE/VnIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wOlZyLm9mZnNldFRvcCkrY3MoVnIpK3BhcnNlSW50KHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmhlaWdodCwxMCkvMj49ZDMoTGkpJiYo'@;
put 'dGhpcy5jb3JuZXJTdHlsZS50b3A9IiIuY29uY2F0KE1hdGguZmxvb3IoU24rYnIrdGhpcy5jb3JuZXJDZW50ZXJQb2ludE9mZnNldC12bCksInB4IiksdGhpcy5jb3JuZXJTdHlsZS5ib3JkZXJCb3R0b21XaWR0aD0wKSx0aGlzLmNvcm5lclN0eWxlLmRpc3BsYXk9ImJsb2NrIn1QZCgpJiZ0'@;
put 'aGlzLnVwZGF0ZU11bHRpcGxlU2VsZWN0aW9uSGFuZGxlc1Bvc2l0aW9uKE8sYWUsU24sY3IsQ3IsYnIpfX19LHtrZXk6ImlzRW50aXJlQ29sdW1uU2VsZWN0ZWQiLHZhbHVlOmZ1bmN0aW9uKGEsZil7cmV0dXJuIGE9PT10aGlzLndvdC53dFRhYmxlLmdldEZpcnN0UmVuZGVyZWRSb3coKSYm'@;
put 'Zj09PXRoaXMud290Lnd0VGFibGUuZ2V0TGFzdFJlbmRlcmVkUm93KCl9fSx7a2V5OiJpc0VudGlyZVJvd1NlbGVjdGVkIix2YWx1ZTpmdW5jdGlvbihhLGYpe3JldHVybiBhPT09dGhpcy53b3Qud3RUYWJsZS5nZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCkmJmY9PT10aGlzLndvdC53dFRhYmxl'@;
put 'LmdldExhc3RSZW5kZXJlZENvbHVtbigpfX0se2tleToiZ2V0RGltZW5zaW9uc0Zyb21IZWFkZXIiLHZhbHVlOmZ1bmN0aW9uKGEsZixkLGgsbSl7dmFyIF89dGhpcy53b3Qud3RUYWJsZSxPPV8ud3RSb290RWxlbWVudC5wYXJlbnROb2RlLFg9bnVsbCxhZT1udWxsLHBlPW51bGwsYmU9bnVs'@;
put 'bCx4ZT1udWxsLFZlPW51bGwsWmU9bnVsbCxsdD1udWxsO3N3aXRjaChhKXtjYXNlInJvd3MiOlg9ZnVuY3Rpb24oKXtyZXR1cm4gXy5nZXRSb3dIZWFkZXIuYXBwbHkoXyxhcmd1bWVudHMpfSxhZT1mdW5jdGlvbigpe3JldHVybiBjcy5hcHBseSh2b2lkIDAsYXJndW1lbnRzKX0scGU9Imh0'@;
put 'X19zZWxlY3Rpb24tLXJvd3MiLFZlPSJ0b3AiO2JyZWFrO2Nhc2UiY29sdW1ucyI6WD1mdW5jdGlvbigpe3JldHVybiBfLmdldENvbHVtbkhlYWRlci5hcHBseShfLGFyZ3VtZW50cyl9LGFlPWZ1bmN0aW9uKCl7cmV0dXJuIFNsLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpfSxwZT0iaHRfX3Nl'@;
put 'bGVjdGlvbi0tY29sdW1ucyIsVmU9ImxlZnQifWlmKE8uY2xhc3NMaXN0LmNvbnRhaW5zKHBlKSl7dmFyIGR0PXRoaXMud290LmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGg7aWYoWmU9WChmLGR0LWgpLGx0PVgoZCxkdC1oKSwhWmV8fCFsdClyZXR1cm4hMTt2YXIgZ3Q9aXUo'@;
put 'WmUpLGp0PWl1KGx0KTtyZXR1cm4gWmUmJmx0JiYoYmU9Z3RbVmVdLW1bVmVdLTEseGU9anRbVmVdK2FlKGx0KS1ndFtWZV0pLFtaZSxiZSx4ZV19cmV0dXJuITF9fSx7a2V5OiJjaGFuZ2VCb3JkZXJTdHlsZSIsdmFsdWU6ZnVuY3Rpb24oYSxmKXt2YXIgZD10aGlzW2FdLnN0eWxlLGg9Zlth'@;
put 'XTshaHx8aC5oaWRlP2dpKHRoaXNbYV0sImhpZGRlbiIpOihZbyh0aGlzW2FdLCJoaWRkZW4iKSYmSm8odGhpc1thXSwiaGlkZGVuIiksZC5iYWNrZ3JvdW5kQ29sb3I9aC5jb2xvciwoInRvcCI9PT1hfHwiYm90dG9tIj09PWEpJiYoZC5oZWlnaHQ9IiIuY29uY2F0KGgud2lkdGgsInB4Iikp'@;
put 'LCgic3RhcnQiPT09YXx8ImVuZCI9PT1hKSYmKGQud2lkdGg9IiIuY29uY2F0KGgud2lkdGgsInB4IikpKX19LHtrZXk6ImNoYW5nZUJvcmRlclRvRGVmYXVsdFN0eWxlIix2YWx1ZTpmdW5jdGlvbihhKXt2YXIgZD10aGlzW2FdLnN0eWxlO2QuYmFja2dyb3VuZENvbG9yPSIjMDAwIixkLndp'@;
put 'ZHRoPSIiLmNvbmNhdCgxLCJweCIpLGQuaGVpZ2h0PSIiLmNvbmNhdCgxLCJweCIpfX0se2tleToidG9nZ2xlSGlkZGVuQ2xhc3MiLHZhbHVlOmZ1bmN0aW9uKGEsZil7dGhpcy5jaGFuZ2VCb3JkZXJUb0RlZmF1bHRTdHlsZShhKSxmP2dpKHRoaXNbYV0sImhpZGRlbiIpOkpvKHRoaXNbYV0s'@;
put 'ImhpZGRlbiIpfX0se2tleToiZGlzYXBwZWFyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMudG9wU3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5ib3R0b21TdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLnN0YXJ0U3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5lbmRTdHlsZS5kaXNwbGF5PSJub25l'@;
put 'Iix0aGlzLmNvcm5lclN0eWxlLmRpc3BsYXk9Im5vbmUiLFBkKCkmJih0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLnRvcC5kaXNwbGF5PSJub25lIix0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLnRvcEhpdEFyZWEuZGlzcGxheT0ibm9uZSIsdGhpcy5zZWxlY3Rpb25IYW5kbGVz'@;
put 'LnN0eWxlcy5ib3R0b20uZGlzcGxheT0ibm9uZSIsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy5ib3R0b21IaXRBcmVhLmRpc3BsYXk9Im5vbmUiKX19LHtrZXk6ImRlc3Ryb3kiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveVdpdGhPd25FdmVudHNPbmx5'@;
put 'KCksdGhpcy5tYWluLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5tYWluKX19XSksbH0oKTtjb25zdCAkcnQ9R3J0O2Z1bmN0aW9uIFNkZShsLGMpeyhudWxsPT1jfHxjPmwubGVuZ3RoKSYmKGM9bC5sZW5ndGgpO2Zvcih2YXIgYT0wLGY9bmV3IEFycmF5KGMpO2E8YzthKyspZlthXT1s'@;
put 'W2FdO3JldHVybiBmfWZ1bmN0aW9uIHk5KGwpe3JldHVybih5OT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBl'@;
put 'b2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIE1kZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCEx'@;
put 'LGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsbml0KGYua2V5KSxmKX19ZnVuY3Rpb24gbml0KGwpe3ZhciBjPWZ1bmN0aW9uIHJpdChsLGMpe2lmKCJvYmplY3QiIT09eTkobCl8fG51bGw9PT1sKXJldHVybiBs'@;
put 'O3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09eTkoZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1'@;
put 'ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PXk5KGMpP2M6U3RyaW5nKGMpfXZhciBpaXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKGMsYSl7KGZ1bmN0aW9uIGVpdChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMp'@;
put 'KXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyxsKSx0aGlzLnNldHRpbmdzPWMsdGhpcy5jZWxsUmFuZ2U9YXx8bnVsbCx0aGlzLmluc3RhbmNlQm9yZGVycz17fSx0aGlzLmNsYXNzTmFtZXM9W3RoaXMuc2V0dGluZ3MuY2xh'@;
put 'c3NOYW1lXSx0aGlzLmNsYXNzTmFtZUdlbmVyYXRvcj10aGlzLmxpbmVhckNsYXNzTmFtZUdlbmVyYXRvcih0aGlzLnNldHRpbmdzLmNsYXNzTmFtZSx0aGlzLnNldHRpbmdzLmxheWVyTGV2ZWwpfXJldHVybiBmdW5jdGlvbiB0aXQobCxjLGEpe2MmJk1kZShsLnByb3RvdHlwZSxjKSxhJiZN'@;
put 'ZGUobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0obCxbe2tleToiZ2V0Qm9yZGVyIix2YWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5pbnN0YW5jZUJvcmRlcnNbYS5ndWlkXXx8KHRoaXMuaW5zdGFuY2VCb3JkZXJzW2EuZ3VpZF09'@;
put 'bmV3ICRydChhLHRoaXMuc2V0dGluZ3MpKSx0aGlzLmluc3RhbmNlQm9yZGVyc1thLmd1aWRdfX0se2tleToiaXNFbXB0eSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09PXRoaXMuY2VsbFJhbmdlfX0se2tleToiYWRkIix2YWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5pc0Vt'@;
put 'cHR5KCk/dGhpcy5jZWxsUmFuZ2U9dGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsUmFuZ2UoYSk6dGhpcy5jZWxsUmFuZ2UuZXhwYW5kKGEpLHRoaXN9fSx7a2V5OiJyZXBsYWNlIix2YWx1ZTpmdW5jdGlvbihhLGYpe2lmKCF0aGlzLmlzRW1wdHkoKSl7aWYodGhpcy5jZWxsUmFuZ2UuZnJvbS5p'@;
put 'c0VxdWFsKGEpKXJldHVybiB0aGlzLmNlbGxSYW5nZS5mcm9tPWYsITA7aWYodGhpcy5jZWxsUmFuZ2UudG8uaXNFcXVhbChhKSlyZXR1cm4gdGhpcy5jZWxsUmFuZ2UudG89ZiwhMH1yZXR1cm4hMX19LHtrZXk6ImNsZWFyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNlbGxSYW5n'@;
put 'ZT1udWxsLHRoaXN9fSx7a2V5OiJnZXRDb3JuZXJzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMuY2VsbFJhbmdlLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSxmPXRoaXMuY2VsbFJhbmdlLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCk7cmV0dXJuW2Eucm93LGEuY29sLGYucm93LGYu'@;
put 'Y29sXX19LHtrZXk6ImFkZENsYXNzQXRDb29yZHMiLHZhbHVlOmZ1bmN0aW9uKGEsZixkLGgpe3ZhciBtPWFyZ3VtZW50cy5sZW5ndGg+NCYmdm9pZCAwIT09YXJndW1lbnRzWzRdJiZhcmd1bWVudHNbNF0sXz1hLnd0VGFibGUuZ2V0Q2VsbCh0aGlzLnNldHRpbmdzLmNyZWF0ZUNlbGxDb29y'@;
put 'ZHMoZixkKSk7aWYoIm9iamVjdCI9PT15OShfKSl7dmFyIE89aDttJiYoTz10aGlzLmNsYXNzTmFtZUdlbmVyYXRvcihfKSx0aGlzLmNsYXNzTmFtZXMuaW5jbHVkZXMoTyl8fHRoaXMuY2xhc3NOYW1lcy5wdXNoKE8pKSxnaShfLE8pfXJldHVybiB0aGlzfX0se2tleToibGluZWFyQ2xhc3NO'@;
put 'YW1lR2VuZXJhdG9yIix2YWx1ZTpmdW5jdGlvbihhLGYpe3JldHVybiBmdW5jdGlvbiBkKGgpe3ZhciBtPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTotMTtpZigwPT09Znx8MD09PW0pcmV0dXJuIGE7dmFyIF89bT49MD9tOmYsTz1hO2lm'@;
put 'KFlvKGgsMD09KF8tPTEpP2E6IiIuY29uY2F0KGEsIi0iKS5jb25jYXQoXykpKXt2YXIgYWU9XysxO089IiIuY29uY2F0KGEsIi0iKS5jb25jYXQoYWUpfWVsc2UgTz1kKGgsXyk7cmV0dXJuIE99fX0se2tleToiZHJhdyIsdmFsdWU6ZnVuY3Rpb24oYSl7aWYodGhpcy5pc0VtcHR5KCkpdGhp'@;
put 'cy5zZXR0aW5ncy5ib3JkZXImJnRoaXMuZ2V0Qm9yZGVyKGEpLmRpc2FwcGVhcigpO2Vsc2V7dmFyIGY9YS53dFRhYmxlLmdldFJlbmRlcmVkUm93c0NvdW50KCksZD1hLnd0VGFibGUuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKSxoPXRoaXMuZ2V0Q29ybmVycygpLG09ZnVuY3Rpb24gS3J0'@;
put 'KGwsYyl7cmV0dXJuIGZ1bmN0aW9uIFFydChsKXtpZihBcnJheS5pc0FycmF5KGwpKXJldHVybiBsfShsKXx8ZnVuY3Rpb24gSnJ0KGwsYyl7dmFyIGE9bnVsbD09bD9udWxsOnR5cGVvZiBTeW1ib2w8InUiJiZsW1N5bWJvbC5pdGVyYXRvcl18fGxbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1h'@;
put 'KXt2YXIgZixkLGgsbSxfPVtdLE89ITAsWD0hMTt0cnl7aWYoaD0oYT1hLmNhbGwobCkpLm5leHQsMD09PWMpe2lmKE9iamVjdChhKSE9PWEpcmV0dXJuO089ITF9ZWxzZSBmb3IoOyEoTz0oZj1oLmNhbGwoYSkpLmRvbmUpJiYoXy5wdXNoKGYudmFsdWUpLF8ubGVuZ3RoIT09Yyk7Tz0hMCk7'@;
put 'fWNhdGNoKGFlKXtYPSEwLGQ9YWV9ZmluYWxseXt0cnl7aWYoIU8mJm51bGwhPWEucmV0dXJuJiYobT1hLnJldHVybigpLE9iamVjdChtKSE9PW0pKXJldHVybn1maW5hbGx5e2lmKFgpdGhyb3cgZH19cmV0dXJuIF99fShsLGMpfHxmdW5jdGlvbiBYcnQobCxjKXtpZihsKXtpZigic3RyaW5n'@;
put 'Ij09dHlwZW9mIGwpcmV0dXJuIFNkZShsLGMpO3ZhciBhPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsKS5zbGljZSg4LC0xKTtpZigiT2JqZWN0Ij09PWEmJmwuY29uc3RydWN0b3ImJihhPWwuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1hfHwiU2V0Ij09PWEpcmV0dXJuIEFy'@;
put 'cmF5LmZyb20obCk7aWYoIkFyZ3VtZW50cyI9PT1hfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChhKSlyZXR1cm4gU2RlKGwsYyl9fShsLGMpfHxmdW5jdGlvbiBxcnQoKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVz'@;
put 'dHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfShoLDQpLF89bVswXSxPPW1bMV0sWD1tWzJdLGFlPW1bM10scGU9dGhpcy5z'@;
put 'ZXR0aW5ncyxiZT1wZS5oaWdobGlnaHRIZWFkZXJDbGFzc05hbWUseGU9cGUuaGlnaGxpZ2h0Q29sdW1uQ2xhc3NOYW1lLFZlPXBlLmhpZ2hsaWdodFJvd0NsYXNzTmFtZSxaZT1wZS5oaWdobGlnaHRPbmx5Q2xvc2VzdEhlYWRlcixsdD1wZS5zZWxlY3Rpb25UeXBlLGR0PXZvaWQgMD09PWx0'@;
put 'fHxbImFjdGl2ZS1oZWFkZXIiLCJoZWFkZXIiXS5pbmNsdWRlcyhsdCk7aWYoZHQmJm51bGwhPT1PJiZudWxsIT09YWUpZm9yKHZhciBndD0wLGp0PTA7anQ8ZDtqdCs9MSl7dmFyIHJuPWEud3RUYWJsZS5jb2x1bW5GaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShqdCk7aWYocm4+PU8mJnJuPD1h'@;
put 'ZSl7dmFyIFh0PWEud3RUYWJsZS5nZXRDb2x1bW5IZWFkZXJzKHJuKSx5bj1YdC5sZW5ndGgtMTtaZSYmWHQubGVuZ3RoPjEmJihYdD1bWHRbeW5dXSk7Zm9yKHZhciBRbj0wO1FuPFh0Lmxlbmd0aDtRbis9MSl7dmFyIE9yPVtdLFZyPVh0W1FuXTtiZSYmT3IucHVzaChiZSkseGUmJk9yLnB1'@;
put 'c2goeGUpO3ZhciBacj1hLmdldFNldHRpbmcoIm9uQmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyIixybixRbj1aZT95bjpRbix7c2VsZWN0aW9uVHlwZTpsdCxjb2x1bW5DdXJzb3I6Z3Qsc2VsZWN0aW9uV2lkdGg6YWUtTysxLGNsYXNzTmFtZXM6T3J9KTtaciE9PXJuJiYoVnI9YS53'@;
put 'dFRhYmxlLmdldENvbHVtbkhlYWRlcihacixRbikpLGdpKFZyLE9yKX1ndCs9MX19aWYobnVsbCE9PV8mJm51bGwhPT1YKWZvcih2YXIgaXI9MCxzaT0wO3NpPGY7c2krPTEpe3ZhciBBcj1hLnd0VGFibGUucm93RmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2Uoc2kpO2lmKGR0JiZBcj49XyYmQXI8'@;
put 'PVgpe3ZhciBFbj1hLnd0VGFibGUuZ2V0Um93SGVhZGVycyhBciksVHI9RW4ubGVuZ3RoLTE7WmUmJkVuLmxlbmd0aD4xJiYoRW49W0VuW1RyXV0pO2Zvcih2YXIgVm49MDtWbjxFbi5sZW5ndGg7Vm4rPTEpe3ZhciBjcj1bXSxDcj1FbltWbl07YmUmJmNyLnB1c2goYmUpLFZlJiZjci5wdXNo'@;
put 'KFZlKTt2YXIgWXI9YS5nZXRTZXR0aW5nKCJvbkJlZm9yZUhpZ2hsaWdodGluZ1Jvd0hlYWRlciIsQXIsVm49WmU/VHI6Vm4se3NlbGVjdGlvblR5cGU6bHQscm93Q3Vyc29yOmlyLHNlbGVjdGlvbkhlaWdodDpYLV8rMSxjbGFzc05hbWVzOmNyfSk7WXIhPT1BciYmKENyPWEud3RUYWJsZS5n'@;
put 'ZXRSb3dIZWFkZXIoWXIsVm4pKSxnaShDcixjcil9aXIrPTF9aWYobnVsbCE9PU8mJm51bGwhPT1hZSlmb3IodmFyIFN0PTA7U3Q8ZDtTdCs9MSl7dmFyIEZ0PWEud3RUYWJsZS5jb2x1bW5GaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShTdCk7QXI+PV8mJkFyPD1YJiZGdD49TyYmRnQ8PWFlP3Ro'@;
put 'aXMuc2V0dGluZ3MuY2xhc3NOYW1lJiZ0aGlzLmFkZENsYXNzQXRDb29yZHMoYSxBcixGdCx0aGlzLnNldHRpbmdzLmNsYXNzTmFtZSx0aGlzLnNldHRpbmdzLm1hcmtJbnRlcnNlY3Rpb25zKTpBcj49XyYmQXI8PVg/VmUmJnRoaXMuYWRkQ2xhc3NBdENvb3JkcyhhLEFyLEZ0LFZlKTpGdD49'@;
put 'TyYmRnQ8PWFlJiZ4ZSYmdGhpcy5hZGRDbGFzc0F0Q29vcmRzKGEsQXIsRnQseGUpO3ZhciBXdD1hLmdldFNldHRpbmcoIm9uQWZ0ZXJEcmF3U2VsZWN0aW9uIixBcixGdCx0aGlzLnNldHRpbmdzLmxheWVyTGV2ZWwpOyJzdHJpbmciPT10eXBlb2YgV3QmJnRoaXMuYWRkQ2xhc3NBdENvb3Jk'@;
put 'cyhhLEFyLEZ0LFd0KX19YS5nZXRTZXR0aW5nKCJvbkJlZm9yZURyYXdCb3JkZXJzIixoLHRoaXMuc2V0dGluZ3MuY2xhc3NOYW1lKSx0aGlzLnNldHRpbmdzLmJvcmRlciYmdGhpcy5nZXRCb3JkZXIoYSkuYXBwZWFyKGgpfX19LHtrZXk6ImRlc3Ryb3kiLHZhbHVlOmZ1bmN0aW9uKCl7T2Jq'@;
put 'ZWN0LnZhbHVlcyh0aGlzLmluc3RhbmNlQm9yZGVycykuZm9yRWFjaChmdW5jdGlvbihhKXtyZXR1cm4gYS5kZXN0cm95KCl9KX19XSksbH0oKTtmdW5jdGlvbiBiOShsKXtyZXR1cm4oYjk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0'@;
put 'b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiBrZGUobCxj'@;
put 'KXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLHhkZShmLmtleSksZil9fWZ1bmN0aW9u'@;
put 'IG5MKCl7cmV0dXJuIG5MPXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdC5nZXQ/UmVmbGVjdC5nZXQuYmluZCgpOmZ1bmN0aW9uKGMsYSxmKXt2YXIgZD1mdW5jdGlvbiBzaXQobCxjKXtmb3IoOyFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobCxjKSYmbnVsbCE9PShs'@;
put 'PV85KGwpKTspO3JldHVybiBsfShjLGEpO2lmKGQpe3ZhciBoPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZCxhKTtyZXR1cm4gaC5nZXQ/aC5nZXQuY2FsbChhcmd1bWVudHMubGVuZ3RoPDM/YzpmKTpoLnZhbHVlfX0sbkwuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9u'@;
put 'IFIkKGwsYyl7cmV0dXJuKFIkPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGYsZCl7cmV0dXJuIGYuX19wcm90b19fPWQsZn0pKGwsYyl9ZnVuY3Rpb24gRWRlKGwpe2lmKHZvaWQgMD09PWwpdGhyb3cgbmV3IFJlZmVyZW5jZUVy'@;
put 'cm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gbH1mdW5jdGlvbiBfOShsKXtyZXR1cm4oXzk9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oYSl7cmV0'@;
put 'dXJuIGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSl9KShsKX1mdW5jdGlvbiB4ZGUobCl7dmFyIGM9ZnVuY3Rpb24gcGl0KGwsYyl7aWYoIm9iamVjdCIhPT1iOShsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9'@;
put 'PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1iOShmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlciko'@;
put 'bCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09YjkoYyk/YzpTdHJpbmcoYyl9dmFyIG1pdD1mdW5jdGlvbihsKXshZnVuY3Rpb24gdWl0KGwsYyl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGMmJm51bGwhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVz'@;
put 'dCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7bC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShjJiZjLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmwsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3'@;
put 'cml0YWJsZTohMX0pLGMmJlIkKGwsYyl9KGEsbCk7dmFyIGM9ZnVuY3Rpb24gY2l0KGwpe3ZhciBjPWZ1bmN0aW9uIGRpdCgpe2lmKHR5cGVvZiBSZWZsZWN0PiJ1Inx8IVJlZmxlY3QuY29uc3RydWN0fHxSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5'@;
put 'cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLGZ1bmN0aW9uKCl7fSkpLCEwfWNhdGNoe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZCxmPV85KGwpO2lmKGMp'@;
put 'e3ZhciBoPV85KHRoaXMpLmNvbnN0cnVjdG9yO2Q9UmVmbGVjdC5jb25zdHJ1Y3QoZixhcmd1bWVudHMsaCl9ZWxzZSBkPWYuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbiBmaXQobCxjKXtpZihjJiYoIm9iamVjdCI9PT1iOShjKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGMp'@;
put 'KXJldHVybiBjO2lmKHZvaWQgMCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gRWRlKGwpfSh0aGlzLGQpfX0oYSk7ZnVuY3Rpb24gYShmLGQpe3ZhciBoO3JldHVybiBmdW5j'@;
put 'dGlvbiBhaXQobCxjKXtpZighKGwgaW5zdGFuY2VvZiBjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxhKSxmdW5jdGlvbiBoaXQobCxjLGEpeyhjPXhkZShjKSlpbiBsP09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLGMse3Zh'@;
put 'bHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpsW2NdPWF9KEVkZShoPWMuY2FsbCh0aGlzLGYsbnVsbCkpLCJ2aXN1YWxDZWxsUmFuZ2UiLG51bGwpLGgudmlzdWFsQ2VsbFJhbmdlPWR8fG51bGwsaC5jb21taXQoKSxofXJldHVybiBmdW5jdGlvbiBs'@;
put 'aXQobCxjLGEpe2MmJmtkZShsLnByb3RvdHlwZSxjKSxhJiZrZGUobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0oYSxbe2tleToiYWRkIix2YWx1ZTpmdW5jdGlvbihkKXtyZXR1cm4gbnVsbD09PXRoaXMudmlzdWFsQ2VsbFJhbmdlP3Ro'@;
put 'aXMudmlzdWFsQ2VsbFJhbmdlPXRoaXMuc2V0dGluZ3MuY3JlYXRlQ2VsbFJhbmdlKGQpOnRoaXMudmlzdWFsQ2VsbFJhbmdlLmV4cGFuZChkKSx0aGlzfX0se2tleToiY2xlYXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlzdWFsQ2VsbFJhbmdlPW51bGwsbkwoXzkoYS5wcm90'@;
put 'b3R5cGUpLCJjbGVhciIsdGhpcykuY2FsbCh0aGlzKX19LHtrZXk6InRyaW1Ub1Zpc2libGVDZWxsc1JhbmdlT25seSIsdmFsdWU6ZnVuY3Rpb24oZCl7dmFyIGg9ZC5mcm9tLG09ZC50byxfPXRoaXMuZ2V0TmVhcmVzdE5vdEhpZGRlbkNvb3JkcyhoLDEpLE89dGhpcy5nZXROZWFyZXN0Tm90'@;
put 'SGlkZGVuQ29vcmRzKG0sLTEpO2lmKG51bGw9PT1ffHxudWxsPT09TylyZXR1cm4gbnVsbDtpZihfLnJvdz5PLnJvd3x8Xy5jb2w+Ty5jb2wpe2lmKCJoZWFkZXIiIT09dGhpcy5zZXR0aW5ncy50eXBlJiYiYWN0aXZlLWhlYWRlciIhPT10aGlzLnNldHRpbmdzLnR5cGUpcmV0dXJuIG51bGw7'@;
put 'Xz1oLE89bX1yZXR1cm4gdGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsUmFuZ2UoXyxfLE8pfX0se2tleToiZ2V0TmVhcmVzdE5vdEhpZGRlbkNvb3JkcyIsdmFsdWU6ZnVuY3Rpb24oZCxoKXt2YXIgbT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNb'@;
put 'Ml06aCxfPXRoaXMuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHRoaXMuc2V0dGluZ3Mucm93SW5kZXhNYXBwZXIoKSxkLnJvdyxoKTtpZihudWxsPT09XylyZXR1cm4gbnVsbDt2YXIgTz10aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh0aGlzLnNldHRpbmdzLmNvbHVtbkluZGV4TWFw'@;
put 'cGVyKCksZC5jb2wsbSk7cmV0dXJuIG51bGw9PT1PP251bGw6dGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsQ29vcmRzKF8sTyl9fSx7a2V5OiJnZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgiLHZhbHVlOmZ1bmN0aW9uKGQsaCxtKXtpZihoPDApcmV0dXJuIGg7dmFyIF89ZC5nZXROZWFyZXN0Tm90'@;
put 'SGlkZGVuSW5kZXgoaCxtKTtyZXR1cm4iaGVhZGVyIiE9PXRoaXMuc2V0dGluZ3MudHlwZSYmImFjdGl2ZS1oZWFkZXIiIT09dGhpcy5zZXR0aW5ncy50eXBlfHxudWxsIT09Xz9fOi0xfX0se2tleToiY29tbWl0Iix2YWx1ZTpmdW5jdGlvbigpe2lmKG51bGw9PT10aGlzLnZpc3VhbENlbGxS'@;
put 'YW5nZSlyZXR1cm4gdGhpczt2YXIgZD10aGlzLnRyaW1Ub1Zpc2libGVDZWxsc1JhbmdlT25seSh0aGlzLnZpc3VhbENlbGxSYW5nZSk7cmV0dXJuIHRoaXMuY2VsbFJhbmdlPW51bGw9PT1kP251bGw6dGhpcy5jcmVhdGVSZW5kZXJhYmxlQ2VsbFJhbmdlKGQuZnJvbSxkLnRvKSx0aGlzfX0s'@;
put 'e2tleToic3luY1dpdGgiLHZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBoPSJOLVMiPT09ZC5nZXRWZXJ0aWNhbERpcmVjdGlvbigpPzE6LTEsbT0iVy1FIj09PWQuZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpPzE6LTEsXz10aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5Db29yZHMoZC5mcm9tLmNsb25l'@;
put 'KCkubm9ybWFsaXplKCksaCxtKTtpZihudWxsIT09XyYmZC5vdmVybGFwcyhfKSl7aWYobnVsbD09PXRoaXMuY2VsbFJhbmdlKXt2YXIgTz10aGlzLnNldHRpbmdzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhfKTt0aGlzLmNlbGxSYW5nZT10aGlzLnNldHRpbmdzLmNyZWF0ZUNlbGxSYW5n'@;
put 'ZShPKX1yZXR1cm4gZC5zZXRIaWdobGlnaHQoXyksdGhpc31yZXR1cm4gZC5zZXRIaWdobGlnaHQoZC5mcm9tKSx0aGlzfX0se2tleToiZ2V0Q29ybmVycyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmNlbGxSYW5nZSxoPWQuZnJvbSxtPWQudG8sXz1udWxsPT09aC5yb3d8fG51bGw9'@;
put 'PT1tLnJvdyxPPW51bGw9PT1oLmNvbHx8bnVsbD09PW0uY29sLFg9dGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsQ29vcmRzKF8/bnVsbDpNYXRoLm1pbihoLnJvdyxtLnJvdyksTz9udWxsOk1hdGgubWluKGguY29sLG0uY29sKSksYWU9dGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsQ29vcmRzKF8/'@;
put 'bnVsbDpNYXRoLm1heChoLnJvdyxtLnJvdyksTz9udWxsOk1hdGgubWF4KGguY29sLG0uY29sKSk7cmV0dXJuW1gucm93LFguY29sLGFlLnJvdyxhZS5jb2xdfX0se2tleToiZ2V0VmlzdWFsQ29ybmVycyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLnNldHRpbmdzLnJlbmRlcmFibGVU'@;
put 'b1Zpc3VhbENvb3Jkcyh0aGlzLmNlbGxSYW5nZS5nZXRUb3BTdGFydENvcm5lcigpKSxoPXRoaXMuc2V0dGluZ3MucmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKHRoaXMuY2VsbFJhbmdlLmdldEJvdHRvbUVuZENvcm5lcigpKTtyZXR1cm5bZC5yb3csZC5jb2wsaC5yb3csaC5jb2xdfX0se2tl'@;
put 'eToiY3JlYXRlUmVuZGVyYWJsZUNlbGxSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZCxoKXt2YXIgbT10aGlzLnNldHRpbmdzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhkKSxfPXRoaXMuc2V0dGluZ3MudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGgpO3JldHVybiB0aGlzLnNldHRpbmdzLmNy'@;
put 'ZWF0ZUNlbGxSYW5nZShtLG0sXyl9fV0pLGF9KGlpdCk7Y29uc3Qgdzk9bWl0O2Z1bmN0aW9uICRNKGwpe3JldHVybigkTT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0'@;
put 'aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfXZhciBnaXQ9WyJhY3RpdmVIZWFkZXJDbGFzc05hbWUiXTtmdW5jdGlvbiBBZGUobCxjKXt2'@;
put 'YXIgYT1PYmplY3Qua2V5cyhsKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgZj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGwpO2MmJihmPWYuZmlsdGVyKGZ1bmN0aW9uKGQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGwsZCkuZW51'@;
put 'bWVyYWJsZX0pKSxhLnB1c2guYXBwbHkoYSxmKX1yZXR1cm4gYX1mdW5jdGlvbiBUZGUobCl7Zm9yKHZhciBjPTE7Yzxhcmd1bWVudHMubGVuZ3RoO2MrKyl7dmFyIGE9bnVsbCE9YXJndW1lbnRzW2NdP2FyZ3VtZW50c1tjXTp7fTtjJTI/QWRlKE9iamVjdChhKSwhMCkuZm9yRWFjaChmdW5j'@;
put 'dGlvbihmKXt2aXQobCxmLGFbZl0pfSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhhKSk6QWRlKE9iamVjdChhKSkuZm9yRWFjaChmdW5jdGlvbihmKXtPYmplY3QuZGVm'@;
put 'aW5lUHJvcGVydHkobCxmLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYSxmKSl9KX1yZXR1cm4gbH1mdW5jdGlvbiB2aXQobCxjLGEpe3JldHVybiBjPWZ1bmN0aW9uIHlpdChsKXt2YXIgYz1mdW5jdGlvbiBiaXQobCxjKXtpZigib2JqZWN0IiE9PSRNKGwpfHxudWxsPT09bCly'@;
put 'ZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PSRNKGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRp'@;
put 'dmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT0kTShjKT9jOlN0cmluZyhjKX0oYyksYyBpbiBsP09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLGMse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1'@;
put 'cmFibGU6ITAsd3JpdGFibGU6ITB9KTpsW2NdPWEsbH1mdW5jdGlvbiBLTShsKXtyZXR1cm4oS009ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4g'@;
put 'YyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX12YXIgTWl0PVsibGF5ZXJMZXZlbCIsImFyZWFDb3JuZXJWaXNpYmxlIl07ZnVuY3Rpb24gT2RlKGwsYyl7dmFyIGE9'@;
put 'T2JqZWN0LmtleXMobCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGY9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhsKTtjJiYoZj1mLmZpbHRlcihmdW5jdGlvbihkKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihsLGQpLmVudW1lcmFi'@;
put 'bGV9KSksYS5wdXNoLmFwcGx5KGEsZil9cmV0dXJuIGF9ZnVuY3Rpb24gRGRlKGwpe2Zvcih2YXIgYz0xO2M8YXJndW1lbnRzLmxlbmd0aDtjKyspe3ZhciBhPW51bGwhPWFyZ3VtZW50c1tjXT9hcmd1bWVudHNbY106e307YyUyP09kZShPYmplY3QoYSksITApLmZvckVhY2goZnVuY3Rpb24o'@;
put 'Zil7a2l0KGwsZixhW2ZdKX0pOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGwsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoYSkpOk9kZShPYmplY3QoYSkpLmZvckVhY2goZnVuY3Rpb24oZil7T2JqZWN0LmRlZmluZVBy'@;
put 'b3BlcnR5KGwsZixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGEsZikpfSl9cmV0dXJuIGx9ZnVuY3Rpb24ga2l0KGwsYyxhKXtyZXR1cm4gYz1mdW5jdGlvbiBFaXQobCl7dmFyIGM9ZnVuY3Rpb24geGl0KGwsYyl7aWYoIm9iamVjdCIhPT1LTShsKXx8bnVsbD09PWwpcmV0dXJu'@;
put 'IGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1LTShmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZh'@;
put 'bHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09S00oYyk/YzpTdHJpbmcoYyl9KGMpLGMgaW4gbD9PYmplY3QuZGVmaW5lUHJvcGVydHkobCxjLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxl'@;
put 'OiEwLHdyaXRhYmxlOiEwfSk6bFtjXT1hLGx9ZnVuY3Rpb24gcU0obCl7cmV0dXJuKHFNPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJm'@;
put 'dW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9dmFyIElpdD1bImNlbGxDb3JuZXJWaXNpYmxlIl07ZnVuY3Rpb24gSWRlKGwsYyl7dmFyIGE9T2JqZWN0LmtleXMobCk7aWYo'@;
put 'T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGY9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhsKTtjJiYoZj1mLmZpbHRlcihmdW5jdGlvbihkKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihsLGQpLmVudW1lcmFibGV9KSksYS5wdXNoLmFwcGx5'@;
put 'KGEsZil9cmV0dXJuIGF9ZnVuY3Rpb24gUmRlKGwpe2Zvcih2YXIgYz0xO2M8YXJndW1lbnRzLmxlbmd0aDtjKyspe3ZhciBhPW51bGwhPWFyZ3VtZW50c1tjXT9hcmd1bWVudHNbY106e307YyUyP0lkZShPYmplY3QoYSksITApLmZvckVhY2goZnVuY3Rpb24oZil7Uml0KGwsZixhW2ZdKX0p'@;
put 'Ok9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGwsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoYSkpOklkZShPYmplY3QoYSkpLmZvckVhY2goZnVuY3Rpb24oZil7T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsZixPYmplY3Qu'@;
put 'Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGEsZikpfSl9cmV0dXJuIGx9ZnVuY3Rpb24gUml0KGwsYyxhKXtyZXR1cm4gYz1mdW5jdGlvbiBMaXQobCl7dmFyIGM9ZnVuY3Rpb24gUGl0KGwsYyl7aWYoIm9iamVjdCIhPT1xTShsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wu'@;
put 'dG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1xTShmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3Ry'@;
put 'aW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09cU0oYyk/YzpTdHJpbmcoYyl9KGMpLGMgaW4gbD9PYmplY3QuZGVmaW5lUHJvcGVydHkobCxjLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6'@;
put 'bFtjXT1hLGx9ZnVuY3Rpb24gWE0obCl7cmV0dXJuKFhNPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBT'@;
put 'eW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9dmFyIEJpdD1bImJvcmRlciIsInZpc3VhbENlbGxSYW5nZSJdO2Z1bmN0aW9uIExkZShsLGMpe3ZhciBhPU9iamVjdC5rZXlzKGwpO2lmKE9iamVjdC5nZXRP'@;
put 'd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBmPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMobCk7YyYmKGY9Zi5maWx0ZXIoZnVuY3Rpb24oZCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobCxkKS5lbnVtZXJhYmxlfSkpLGEucHVzaC5hcHBseShhLGYpfXJldHVy'@;
put 'biBhfWZ1bmN0aW9uIEwkKGwpe2Zvcih2YXIgYz0xO2M8YXJndW1lbnRzLmxlbmd0aDtjKyspe3ZhciBhPW51bGwhPWFyZ3VtZW50c1tjXT9hcmd1bWVudHNbY106e307YyUyP0xkZShPYmplY3QoYSksITApLmZvckVhY2goZnVuY3Rpb24oZil7aml0KGwsZixhW2ZdKX0pOk9iamVjdC5nZXRP'@;
put 'd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGwsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoYSkpOkxkZShPYmplY3QoYSkpLmZvckVhY2goZnVuY3Rpb24oZil7T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsZixPYmplY3QuZ2V0T3duUHJvcGVy'@;
put 'dHlEZXNjcmlwdG9yKGEsZikpfSl9cmV0dXJuIGx9ZnVuY3Rpb24gaml0KGwsYyxhKXtyZXR1cm4gYz1mdW5jdGlvbiB6aXQobCl7dmFyIGM9ZnVuY3Rpb24gVWl0KGwsYyl7aWYoIm9iamVjdCIhPT1YTShsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVd'@;
put 'O2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1YTShmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3Ry'@;
put 'aW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09WE0oYyk/YzpTdHJpbmcoYyl9KGMpLGMgaW4gbD9PYmplY3QuZGVmaW5lUHJvcGVydHkobCxjLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6bFtjXT1hLGx9ZnVu'@;
put 'Y3Rpb24gSk0obCl7cmV0dXJuKEpNPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29u'@;
put 'c3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gUGRlKGwsYyl7dmFyIGE9T2JqZWN0LmtleXMobCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGY9T2JqZWN0LmdldE93blByb3BlcnR5U3lt'@;
put 'Ym9scyhsKTtjJiYoZj1mLmZpbHRlcihmdW5jdGlvbihkKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihsLGQpLmVudW1lcmFibGV9KSksYS5wdXNoLmFwcGx5KGEsZil9cmV0dXJuIGF9ZnVuY3Rpb24gRmRlKGwpe2Zvcih2YXIgYz0xO2M8YXJndW1lbnRzLmxlbmd0'@;
put 'aDtjKyspe3ZhciBhPW51bGwhPWFyZ3VtZW50c1tjXT9hcmd1bWVudHNbY106e307YyUyP1BkZShPYmplY3QoYSksITApLmZvckVhY2goZnVuY3Rpb24oZil7JGl0KGwsZixhW2ZdKX0pOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGws'@;
put 'T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoYSkpOlBkZShPYmplY3QoYSkpLmZvckVhY2goZnVuY3Rpb24oZil7T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsZixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGEsZikpfSl9cmV0dXJuIGx9ZnVuY3Rpb24gJGl0KGwsYyxh'@;
put 'KXtyZXR1cm4gYz1mdW5jdGlvbiBLaXQobCl7dmFyIGM9ZnVuY3Rpb24gcWl0KGwsYyl7aWYoIm9iamVjdCIhPT1KTShsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYo'@;
put 'Im9iamVjdCIhPT1KTShmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09Sk0o'@;
put 'Yyk/YzpTdHJpbmcoYyl9KGMpLGMgaW4gbD9PYmplY3QuZGVmaW5lUHJvcGVydHkobCxjLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6bFtjXT1hLGx9VCgzMzQ3MCk7ZnVuY3Rpb24gUU0obCl7cmV0dXJuKFFNPSJmdW5jdGlvbiI9PXR5cGVv'@;
put 'ZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBl'@;
put 'PyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9dmFyIGVvdD1bImhlYWRlckNsYXNzTmFtZSIsInJvd0NsYXNzTmFtZSIsImNvbHVtbkNsYXNzTmFtZSJdO2Z1bmN0aW9uIEhkZShsLGMpe3ZhciBhPU9iamVjdC5rZXlzKGwpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBmPU9i'@;
put 'amVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMobCk7YyYmKGY9Zi5maWx0ZXIoZnVuY3Rpb24oZCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobCxkKS5lbnVtZXJhYmxlfSkpLGEucHVzaC5hcHBseShhLGYpfXJldHVybiBhfWZ1bmN0aW9uIE5kZShsKXtmb3IodmFy'@;
put 'IGM9MTtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKXt2YXIgYT1udWxsIT1hcmd1bWVudHNbY10/YXJndW1lbnRzW2NdOnt9O2MlMj9IZGUoT2JqZWN0KGEpLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe3RvdChsLGYsYVtmXSl9KTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmpl'@;
put 'Y3QuZGVmaW5lUHJvcGVydGllcyhsLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGEpKTpIZGUoT2JqZWN0KGEpKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLGYsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihhLGYpKX0pfXJldHVy'@;
put 'biBsfWZ1bmN0aW9uIHRvdChsLGMsYSl7cmV0dXJuIGM9ZnVuY3Rpb24gbm90KGwpe3ZhciBjPWZ1bmN0aW9uIHJvdChsLGMpe2lmKCJvYmplY3QiIT09UU0obCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNh'@;
put 'bGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09UU0oZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmci'@;
put 'KTtyZXR1cm4ic3ltYm9sIj09PVFNKGMpP2M6U3RyaW5nKGMpfShjKSxjIGluIGw/T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsYyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmxbY109YSxsfWZ1bmN0aW9uIGVrKGwpe3JldHVybihlaz0iZnVu'@;
put 'Y3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3lt'@;
put 'Ym9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIFZkZShsLGMpe3ZhciBhPU9iamVjdC5rZXlzKGwpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBmPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMobCk7YyYmKGY9Zi5maWx0ZXIoZnVu'@;
put 'Y3Rpb24oZCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobCxkKS5lbnVtZXJhYmxlfSkpLGEucHVzaC5hcHBseShhLGYpfXJldHVybiBhfWZ1bmN0aW9uIHVvdChsLGMsYSl7cmV0dXJuIGM9ZnVuY3Rpb24gY290KGwpe3ZhciBjPWZ1bmN0aW9uIGZvdChsLGMpe2lm'@;
put 'KCJvYmplY3QiIT09ZWsobCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09ZWsoZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1By'@;
put 'aW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PWVrKGMpP2M6U3RyaW5nKGMpfShjKSxjIGluIGw/T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsYyx7'@;
put 'dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmxbY109YSxsfXZhciBCZGU9RmYoImhpZ2hsaWdodC90eXBlcyIpLEM5PUJkZS5yZWdpc3Rlcixkb3Q9QmRlLmdldEl0ZW07ZnVuY3Rpb24gUzkobCxjKXtyZXR1cm4gZG90KGwpKGZ1bmN0aW9uIHNv'@;
put 'dChsKXtmb3IodmFyIGM9MTtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKXt2YXIgYT1udWxsIT1hcmd1bWVudHNbY10/YXJndW1lbnRzW2NdOnt9O2MlMj9WZGUoT2JqZWN0KGEpLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe3VvdChsLGYsYVtmXSl9KTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNj'@;
put 'cmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhsLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGEpKTpWZGUoT2JqZWN0KGEpKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLGYsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihh'@;
put 'LGYpKX0pfXJldHVybiBsfSh7dHlwZTpsfSxjKSl9ZnVuY3Rpb24gdGsobCl7cmV0dXJuKHRrPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMm'@;
put 'JiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gSDQobCl7cmV0dXJuIGZ1bmN0aW9uIGdvdChsKXtpZihBcnJheS5pc0FycmF5KGwpKXJldHVybiBQJChs'@;
put 'KX0obCl8fGZ1bmN0aW9uIG1vdChsKXtpZih0eXBlb2YgU3ltYm9sPCJ1IiYmbnVsbCE9bFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1sWyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20obCl9KGwpfHxmdW5jdGlvbiBwb3QobCxjKXtpZihsKXtpZigic3RyaW5nIj09dHlwZW9mIGwp'@;
put 'cmV0dXJuIFAkKGwsYyk7dmFyIGE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGwpLnNsaWNlKDgsLTEpO2lmKCJPYmplY3QiPT09YSYmbC5jb25zdHJ1Y3RvciYmKGE9bC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PWF8fCJTZXQiPT09YSlyZXR1cm4gQXJyYXkuZnJvbShsKTtp'@;
put 'ZigiQXJndW1lbnRzIj09PWF8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KGEpKXJldHVybiBQJChsLGMpfX0obCl8fGZ1bmN0aW9uIGhvdCgpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxl'@;
put 'IGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIFAkKGwsYyl7KG51bGw9PWN8fGM+bC5sZW5ndGgpJiYoYz1sLmxlbmd0aCk7Zm9yKHZhciBhPTAs'@;
put 'Zj1uZXcgQXJyYXkoYyk7YTxjO2ErKylmW2FdPWxbYV07cmV0dXJuIGZ9ZnVuY3Rpb24gamRlKGwsYyl7dmFyIGE9T2JqZWN0LmtleXMobCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGY9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhsKTtjJiYoZj1mLmZpbHRl'@;
put 'cihmdW5jdGlvbihkKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihsLGQpLmVudW1lcmFibGV9KSksYS5wdXNoLmFwcGx5KGEsZil9cmV0dXJuIGF9ZnVuY3Rpb24gbmsobCl7Zm9yKHZhciBjPTE7Yzxhcmd1bWVudHMubGVuZ3RoO2MrKyl7dmFyIGE9bnVsbCE9YXJn'@;
put 'dW1lbnRzW2NdP2FyZ3VtZW50c1tjXTp7fTtjJTI/amRlKE9iamVjdChhKSwhMCkuZm9yRWFjaChmdW5jdGlvbihmKXt2b3QobCxmLGFbZl0pfSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobCxPYmplY3QuZ2V0T3duUHJvcGVydHlE'@;
put 'ZXNjcmlwdG9ycyhhKSk6amRlKE9iamVjdChhKSkuZm9yRWFjaChmdW5jdGlvbihmKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobCxmLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYSxmKSl9KX1yZXR1cm4gbH1mdW5jdGlvbiB2b3QobCxjLGEpe3JldHVybihjPVVkZShjKSlpbiBs'@;
put 'P09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLGMse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpsW2NdPWEsbH1mdW5jdGlvbiB6ZGUobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVt'@;
put 'ZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLFVkZShmLmtleSksZil9fWZ1bmN0aW9uIFVkZShsKXt2YXIgYz1mdW5jdGlvbiBfb3QobCxjKXtpZigib2JqZWN0IiE9PXRrKGwpfHxudWxsPT09'@;
put 'bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PXRrKGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmlt'@;
put 'aXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT10ayhjKT9jOlN0cmluZyhjKX1DOShlTCxmdW5jdGlvbiBDaXQobCl7dmFyIGM9bC5hY3RpdmVIZWFkZXJDbGFzc05hbWUsYT1mdW5jdGlvbiBf'@;
put 'aXQobCxjKXtpZihudWxsPT1sKXJldHVybnt9O3ZhciBmLGQsYT1mdW5jdGlvbiB3aXQobCxjKXtpZihudWxsPT1sKXJldHVybnt9O3ZhciBkLGgsYT17fSxmPU9iamVjdC5rZXlzKGwpO2ZvcihoPTA7aDxmLmxlbmd0aDtoKyspIShjLmluZGV4T2YoZD1mW2hdKT49MCkmJihhW2RdPWxbZF0p'@;
put 'O3JldHVybiBhfShsLGMpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBoPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMobCk7Zm9yKGQ9MDtkPGgubGVuZ3RoO2QrKykhKGMuaW5kZXhPZihmPWhbZF0pPj0wKSYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51'@;
put 'bWVyYWJsZS5jYWxsKGwsZikmJihhW2ZdPWxbZl0pfXJldHVybiBhfShsLGdpdCk7cmV0dXJuIG5ldyB3OShUZGUoVGRlKHtoaWdobGlnaHRIZWFkZXJDbGFzc05hbWU6Y30sYSkse30se3NlbGVjdGlvblR5cGU6ZUx9KSl9KSxDOSh0TCxmdW5jdGlvbiBPaXQobCl7dmFyIGM9bC5sYXllckxl'@;
put 'dmVsLGE9bC5hcmVhQ29ybmVyVmlzaWJsZSxmPWZ1bmN0aW9uIEFpdChsLGMpe2lmKG51bGw9PWwpcmV0dXJue307dmFyIGYsZCxhPWZ1bmN0aW9uIFRpdChsLGMpe2lmKG51bGw9PWwpcmV0dXJue307dmFyIGQsaCxhPXt9LGY9T2JqZWN0LmtleXMobCk7Zm9yKGg9MDtoPGYubGVuZ3RoO2gr'@;
put 'KykhKGMuaW5kZXhPZihkPWZbaF0pPj0wKSYmKGFbZF09bFtkXSk7cmV0dXJuIGF9KGwsYyk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGg9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhsKTtmb3IoZD0wO2Q8aC5sZW5ndGg7ZCsrKSEoYy5pbmRleE9mKGY9aFtk'@;
put 'XSk+PTApJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwobCxmKSYmKGFbZl09bFtmXSl9cmV0dXJuIGF9KGwsTWl0KTtyZXR1cm4gbmV3IHc5KERkZShEZGUoe2NsYXNzTmFtZToiYXJlYSIsbWFya0ludGVyc2VjdGlvbnM6ITAsbGF5ZXJMZXZlbDpNYXRoLm1p'@;
put 'bihjLDcpLGJvcmRlcjp7d2lkdGg6MSxjb2xvcjoiIzRiODlmZiIsY29ybmVyVmlzaWJsZTphfX0sZikse30se3NlbGVjdGlvblR5cGU6dEx9KSl9KSxDOShZTSxmdW5jdGlvbiBOaXQobCl7dmFyIGM9bC5jZWxsQ29ybmVyVmlzaWJsZSxhPWZ1bmN0aW9uIEZpdChsLGMpe2lmKG51bGw9PWwp'@;
put 'cmV0dXJue307dmFyIGYsZCxhPWZ1bmN0aW9uIEhpdChsLGMpe2lmKG51bGw9PWwpcmV0dXJue307dmFyIGQsaCxhPXt9LGY9T2JqZWN0LmtleXMobCk7Zm9yKGg9MDtoPGYubGVuZ3RoO2grKykhKGMuaW5kZXhPZihkPWZbaF0pPj0wKSYmKGFbZF09bFtkXSk7cmV0dXJuIGF9KGwsYyk7aWYo'@;
put 'T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGg9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhsKTtmb3IoZD0wO2Q8aC5sZW5ndGg7ZCsrKSEoYy5pbmRleE9mKGY9aFtkXSk+PTApJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwobCxmKSYm'@;
put 'KGFbZl09bFtmXSl9cmV0dXJuIGF9KGwsSWl0KTtyZXR1cm4gbmV3IHc5KFJkZShSZGUoe2NsYXNzTmFtZToiY3VycmVudCIsYm9yZGVyOnt3aWR0aDoyLGNvbG9yOiIjNGI4OWZmIixjb3JuZXJWaXNpYmxlOmN9fSxhKSx7fSx7c2VsZWN0aW9uVHlwZTpZTX0pKX0pLEM5KEQkLGZ1bmN0aW9u'@;
put 'IFdpdChsKXt2YXIgYz1sLmJvcmRlcixhPWwudmlzdWFsQ2VsbFJhbmdlLGY9ZnVuY3Rpb24gWml0KGwsYyl7aWYobnVsbD09bClyZXR1cm57fTt2YXIgZixkLGE9ZnVuY3Rpb24gWWl0KGwsYyl7aWYobnVsbD09bClyZXR1cm57fTt2YXIgZCxoLGE9e30sZj1PYmplY3Qua2V5cyhsKTtmb3Io'@;
put 'aD0wO2g8Zi5sZW5ndGg7aCsrKSEoYy5pbmRleE9mKGQ9ZltoXSk+PTApJiYoYVtkXT1sW2RdKTtyZXR1cm4gYX0obCxjKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgaD1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGwpO2ZvcihkPTA7ZDxoLmxlbmd0aDtkKysp'@;
put 'IShjLmluZGV4T2YoZj1oW2RdKT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChsLGYpJiYoYVtmXT1sW2ZdKX1yZXR1cm4gYX0obCxCaXQpO3JldHVybiBuZXcgdzkoTCQoTCQoTCQoe30sYyksZikse30se3NlbGVjdGlvblR5cGU6RCR9KSxhKX0pLEM5'@;
put 'KE8kLGZ1bmN0aW9uIEppdChsKXt2YXIgYz1PYmplY3QuYXNzaWduKHt9LChmdW5jdGlvbiBYaXQobCl7aWYobnVsbD09bCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgZGVzdHJ1Y3R1cmUgIitsKX0obCksbCkpO3JldHVybiBuZXcgdzkoRmRlKEZkZSh7Y2xhc3NOYW1lOiJmaWxsIixi'@;
put 'b3JkZXI6e3dpZHRoOjEsY29sb3I6IiNmZjAwMDAifX0sYykse30se3NlbGVjdGlvblR5cGU6TyR9KSl9KSxDOShXTSxmdW5jdGlvbiBhb3QobCl7dmFyIGM9bC5oZWFkZXJDbGFzc05hbWUsYT1sLnJvd0NsYXNzTmFtZSxmPWwuY29sdW1uQ2xhc3NOYW1lLGQ9ZnVuY3Rpb24gaW90KGwsYyl7'@;
put 'aWYobnVsbD09bClyZXR1cm57fTt2YXIgZixkLGE9ZnVuY3Rpb24gb290KGwsYyl7aWYobnVsbD09bClyZXR1cm57fTt2YXIgZCxoLGE9e30sZj1PYmplY3Qua2V5cyhsKTtmb3IoaD0wO2g8Zi5sZW5ndGg7aCsrKSEoYy5pbmRleE9mKGQ9ZltoXSk+PTApJiYoYVtkXT1sW2RdKTtyZXR1cm4g'@;
put 'YX0obCxjKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgaD1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGwpO2ZvcihkPTA7ZDxoLmxlbmd0aDtkKyspIShjLmluZGV4T2YoZj1oW2RdKT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUu'@;
put 'Y2FsbChsLGYpJiYoYVtmXT1sW2ZdKX1yZXR1cm4gYX0obCxlb3QpO3JldHVybiBuZXcgdzkoTmRlKE5kZSh7Y2xhc3NOYW1lOiJoaWdobGlnaHQiLGhpZ2hsaWdodEhlYWRlckNsYXNzTmFtZTpjLGhpZ2hsaWdodFJvd0NsYXNzTmFtZTphLGhpZ2hsaWdodENvbHVtbkNsYXNzTmFtZTpmfSxk'@;
put 'KSx7fSx7aGlnaGxpZ2h0T25seUNsb3Nlc3RIZWFkZXI6ITAsc2VsZWN0aW9uVHlwZTpXTX0pKX0pO3ZhciB3b3Q9ZnVuY3Rpb24obCl7ZnVuY3Rpb24gYyhhKXsoZnVuY3Rpb24geW90KGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwg'@;
put 'YSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLGMpLHRoaXMub3B0aW9ucz1hLHRoaXMubGF5ZXJMZXZlbD0wLHRoaXMuY2VsbD1TOShZTSxhKSx0aGlzLmZpbGw9UzkoTyQsYSksdGhpcy5hcmVhcz1uZXcgTWFwLHRoaXMuaGVhZGVycz1uZXcgTWFwLHRoaXMuYWN0aXZlSGVhZGVycz1u'@;
put 'ZXcgTWFwLHRoaXMuY3VzdG9tU2VsZWN0aW9ucz1bXX1yZXR1cm4gZnVuY3Rpb24gYm90KGwsYyxhKXtjJiZ6ZGUobC5wcm90b3R5cGUsYyksYSYmemRlKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGMsW3trZXk6ImlzRW5hYmxlZEZv'@;
put 'ciIsdmFsdWU6ZnVuY3Rpb24oZixkKXt2YXIgaD1mO2Y9PT1ZTSYmKGg9ImN1cnJlbnQiKTt2YXIgbT10aGlzLm9wdGlvbnMuZGlzYWJsZWRDZWxsU2VsZWN0aW9uKGQucm93LGQuY29sKTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG0mJihtPVttXSksITE9PT1tfHxBcnJheS5pc0FycmF5KG0p'@;
put 'JiYhbS5pbmNsdWRlcyhoKX19LHtrZXk6InVzZUxheWVyTGV2ZWwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGF5ZXJMZXZlbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MCx0aGlzfX0se2tleToiZ2V0Q2VsbCIsdmFsdWU6'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jZWxsfX0se2tleToiZ2V0RmlsbCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsfX0se2tleToiY3JlYXRlT3JHZXRBcmVhIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkLGY9dGhpcy5sYXllckxldmVsO3JldHVybiB0aGlzLmFyZWFzLmhh'@;
put 'cyhmKT9kPXRoaXMuYXJlYXMuZ2V0KGYpOihkPVM5KHRMLG5rKHtsYXllckxldmVsOmZ9LHRoaXMub3B0aW9ucykpLHRoaXMuYXJlYXMuc2V0KGYsZCkpLGR9fSx7a2V5OiJnZXRBcmVhcyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gSDQodGhpcy5hcmVhcy52YWx1ZXMoKSl9fSx7a2V5OiJj'@;
put 'cmVhdGVPckdldEhlYWRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZCxmPXRoaXMubGF5ZXJMZXZlbDtyZXR1cm4gdGhpcy5oZWFkZXJzLmhhcyhmKT9kPXRoaXMuaGVhZGVycy5nZXQoZik6KGQ9UzkoV00sbmsoe30sdGhpcy5vcHRpb25zKSksdGhpcy5oZWFkZXJzLnNldChmLGQpKSxkfX0s'@;
put 'e2tleToiZ2V0SGVhZGVycyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gSDQodGhpcy5oZWFkZXJzLnZhbHVlcygpKX19LHtrZXk6ImNyZWF0ZU9yR2V0QWN0aXZlSGVhZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkLGY9dGhpcy5sYXllckxldmVsO3JldHVybiB0aGlzLmFjdGl2ZUhlYWRl'@;
put 'cnMuaGFzKGYpP2Q9dGhpcy5hY3RpdmVIZWFkZXJzLmdldChmKTooZD1TOShlTCxuayh7fSx0aGlzLm9wdGlvbnMpKSx0aGlzLmFjdGl2ZUhlYWRlcnMuc2V0KGYsZCkpLGR9fSx7a2V5OiJnZXRBY3RpdmVIZWFkZXJzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBINCh0aGlzLmFjdGl2ZUhl'@;
put 'YWRlcnMudmFsdWVzKCkpfX0se2tleToiZ2V0Q3VzdG9tU2VsZWN0aW9ucyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gSDQodGhpcy5jdXN0b21TZWxlY3Rpb25zLnZhbHVlcygpKX19LHtrZXk6ImFkZEN1c3RvbVNlbGVjdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZil7dGhpcy5jdXN0b21TZWxl'@;
put 'Y3Rpb25zLnB1c2goUzkoRCQsbmsobmsoe30sdGhpcy5vcHRpb25zKSxmKSkpfX0se2tleToiY2xlYXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jZWxsLmNsZWFyKCksdGhpcy5maWxsLmNsZWFyKCksUm4odGhpcy5hcmVhcy52YWx1ZXMoKSxmdW5jdGlvbihmKXtmLmNsZWFyKCl9KSxSbih0'@;
put 'aGlzLmhlYWRlcnMudmFsdWVzKCksZnVuY3Rpb24oZil7Zi5jbGVhcigpfSksUm4odGhpcy5hY3RpdmVIZWFkZXJzLnZhbHVlcygpLGZ1bmN0aW9uKGYpe2YuY2xlYXIoKX0pfX0se2tleTpTeW1ib2wuaXRlcmF0b3IsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy5jZWxsLHRoaXMuZmls'@;
put 'bF0uY29uY2F0KEg0KHRoaXMuYXJlYXMudmFsdWVzKCkpLEg0KHRoaXMuaGVhZGVycy52YWx1ZXMoKSksSDQodGhpcy5hY3RpdmVIZWFkZXJzLnZhbHVlcygpKSxINCh0aGlzLmN1c3RvbVNlbGVjdGlvbnMpKVtTeW1ib2wuaXRlcmF0b3JdKCl9fV0pLGN9KCk7Y29uc3QgQ290PXdvdDtmdW5j'@;
put 'dGlvbiByayhsKXtyZXR1cm4ocms9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25z'@;
put 'dHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiBaZGUobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0h'@;
put 'MCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLGtvdChmLmtleSksZil9fWZ1bmN0aW9uIGtvdChsKXt2YXIgYz1mdW5jdGlvbiBFb3QobCxjKXtpZigib2JqZWN0IiE9PXJrKGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50'@;
put 'b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PXJrKGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJp'@;
put 'bmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1yayhjKT9jOlN0cmluZyhjKX12YXIgeG90PWZ1bmN0aW9uKGwpe2Z1bmN0aW9uIGMoYSl7KGZ1bmN0aW9uIFNvdChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJy'@;
put 'b3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyxjKSx0aGlzLnJhbmdlcz1bXSx0aGlzLmNyZWF0ZUNlbGxSYW5nZT1hfXJldHVybiBmdW5jdGlvbiBNb3QobCxjLGEpe2MmJlpkZShsLnByb3RvdHlwZSxjKSxhJiZaZGUobCxhKSxPYmplY3QuZGVmaW5lUHJv'@;
put 'cGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0oYyxbe2tleToiaXNFbXB0eSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuc2l6ZSgpfX0se2tleToic2V0Iix2YWx1ZTpmdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5jbGVhcigpLHRoaXMucmFuZ2VzLnB1c2godGhp'@;
put 'cy5jcmVhdGVDZWxsUmFuZ2UoZikpLHRoaXN9fSx7a2V5OiJhZGQiLHZhbHVlOmZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLnJhbmdlcy5wdXNoKHRoaXMuY3JlYXRlQ2VsbFJhbmdlKGYpKSx0aGlzfX0se2tleToicG9wIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJhbmdlcy5wb3Ao'@;
put 'KSx0aGlzfX0se2tleToiY3VycmVudCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wZWVrQnlJbmRleCgwKX19LHtrZXk6InByZXZpb3VzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBlZWtCeUluZGV4KC0xKX19LHtrZXk6ImluY2x1ZGVzIix2YWx1ZTpmdW5jdGlvbihm'@;
put 'KXtyZXR1cm4gdGhpcy5yYW5nZXMuc29tZShmdW5jdGlvbihkKXtyZXR1cm4gZC5pbmNsdWRlcyhmKX0pfX0se2tleToiY2xlYXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmFuZ2VzLmxlbmd0aD0wLHRoaXN9fSx7a2V5OiJzaXplIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0'@;
put 'aGlzLnJhbmdlcy5sZW5ndGh9fSx7a2V5OiJwZWVrQnlJbmRleCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgaCxmPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTowLGQ9dGhpcy5zaXplKCkrZi0xO3JldHVybiBkPj0wJiYoaD10aGlzLnJhbmdl'@;
put 'c1tkXSksaH19LHtrZXk6U3ltYm9sLml0ZXJhdG9yLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmFuZ2VzW1N5bWJvbC5pdGVyYXRvcl0oKX19XSksY30oKTtjb25zdCBBb3Q9eG90O2Z1bmN0aW9uIGlrKGwpe3JldHVybihpaz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3lt'@;
put 'Ym9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBl'@;
put 'b2YgY30pKGwpfWZ1bmN0aW9uIFlkZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5'@;
put 'KGwsRG90KGYua2V5KSxmKX19ZnVuY3Rpb24gRG90KGwpe3ZhciBjPWZ1bmN0aW9uIElvdChsLGMpe2lmKCJvYmplY3QiIT09aWsobCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVs'@;
put 'dCIpO2lmKCJvYmplY3QiIT09aWsoZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9s'@;
put 'Ij09PWlrKGMpP2M6U3RyaW5nKGMpfXZhciBXZGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKGMsYSl7KGZ1bmN0aW9uIFRvdChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyxsKSx0'@;
put 'aGlzLnJhbmdlPWMsdGhpcy5vcHRpb25zPWF9cmV0dXJuIGZ1bmN0aW9uIE9vdChsLGMsYSl7YyYmWWRlKGwucHJvdG90eXBlLGMpLGEmJllkZShsLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShsLFt7a2V5OiJ0cmFuc2Zvcm1TdGFydCIs'@;
put 'dmFsdWU6ZnVuY3Rpb24oYSxmKXt2YXIgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdLGg9dGhpcy5vcHRpb25zLmNyZWF0ZUNlbGxDb29yZHMoYSxmKSxtPXRoaXMucmFuZ2UuY3VycmVudCgpLmhpZ2hsaWdodCxfPXRoaXMub3B0aW9u'@;
put 'cy52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMobSksTz1fLnJvdyxYPV8uY29sLGFlPW0scGU9MCxiZT0wO2lmKHRoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlVHJhbnNmb3JtU3RhcnQiLGgpLG51bGwhPT1PJiZudWxsIT09WCl7dmFyIHhlPXRoaXMub3B0aW9ucy5jb3VudFJvd3MoKSxWZT10'@;
put 'aGlzLm9wdGlvbnMuY291bnRDb2xzKCksWmU9dGhpcy5vcHRpb25zLmZpeGVkUm93c0JvdHRvbSgpLGx0PXRoaXMub3B0aW9ucy5taW5TcGFyZVJvd3MoKSxkdD10aGlzLm9wdGlvbnMubWluU3BhcmVDb2xzKCksZ3Q9dGhpcy5vcHRpb25zLmF1dG9XcmFwUm93KCksanQ9dGhpcy5vcHRpb25z'@;
put 'LmF1dG9XcmFwQ29sKCk7TythPnhlLTE/ZCYmbHQ+MCYmIShaZSYmTz49eGUtWmUtMSk/KHRoaXMucnVuTG9jYWxIb29rcygiaW5zZXJ0Um93UmVxdWlyZSIseGUpLHhlPXRoaXMub3B0aW9ucy5jb3VudFJvd3MoKSk6anQmJihoLnJvdz0xLXhlLGguY29sPVgraC5jb2w9PT1WZS0xPzEtVmU6'@;
put 'MSk6anQmJk8raC5yb3c8MCYmWCtoLmNvbD49MCYmKGgucm93PXhlLTEsaC5jb2w9WCtoLmNvbD09PTA/VmUtMTotMSksWCtoLmNvbD5WZS0xP2QmJmR0PjA/KHRoaXMucnVuTG9jYWxIb29rcygiaW5zZXJ0Q29sUmVxdWlyZSIsVmUpLFZlPXRoaXMub3B0aW9ucy5jb3VudENvbHMoKSk6Z3Qm'@;
put 'JihoLnJvdz1PK2gucm93PT09eGUtMT8xLXhlOjEsaC5jb2w9MS1WZSk6Z3QmJlgraC5jb2w8MCYmTytoLnJvdz49MCYmKGgucm93PU8raC5yb3c9PT0wP3hlLTE6LTEsaC5jb2w9VmUtMSk7dmFyIHJuPXRoaXMub3B0aW9ucy5jcmVhdGVDZWxsQ29vcmRzKE8raC5yb3csWCtoLmNvbCk7cGU9'@;
put 'MCxiZT0wLHJuLnJvdzwwPyhwZT0tMSxybi5yb3c9MCk6cm4ucm93PjAmJnJuLnJvdz49eGUmJihwZT0xLHJuLnJvdz14ZS0xKSxybi5jb2w8MD8oYmU9LTEscm4uY29sPTApOnJuLmNvbD4wJiZybi5jb2w+PVZlJiYoYmU9MSxybi5jb2w9VmUtMSksYWU9dGhpcy5vcHRpb25zLnJlbmRlcmFi'@;
put 'bGVUb1Zpc3VhbENvb3Jkcyhybil9cmV0dXJuIHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJUcmFuc2Zvcm1TdGFydCIsYWUscGUsYmUpLGFlfX0se2tleToidHJhbnNmb3JtRW5kIix2YWx1ZTpmdW5jdGlvbihhLGYpe3ZhciBkPXRoaXMub3B0aW9ucy5jcmVhdGVDZWxsQ29vcmRzKGEsZiks'@;
put 'aD10aGlzLnJhbmdlLmN1cnJlbnQoKSxtPWgudG8sXz0wLE89MDt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVRyYW5zZm9ybUVuZCIsZCk7dmFyIFg9dGhpcy5vcHRpb25zLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhoLmhpZ2hsaWdodCk7aWYobnVsbCE9PVgucm93JiZudWxsIT09WC5j'@;
put 'b2wpe3ZhciBiZT10aGlzLm9wdGlvbnMuY291bnRSb3dzKCkseGU9dGhpcy5vcHRpb25zLmNvdW50Q29scygpLFZlPXRoaXMub3B0aW9ucy52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMoaC50byksZHQ9dGhpcy5vcHRpb25zLmNyZWF0ZUNlbGxDb29yZHMoVmUucm93K2Qucm93LFZlLmNvbCtk'@;
put 'LmNvbCk7Xz0wLE89MCxkdC5yb3c8MD8oXz0tMSxkdC5yb3c9MCk6ZHQucm93PjAmJmR0LnJvdz49YmUmJihfPTEsZHQucm93PWJlLTEpLGR0LmNvbDwwPyhPPS0xLGR0LmNvbD0wKTpkdC5jb2w+MCYmZHQuY29sPj14ZSYmKE89MSxkdC5jb2w9eGUtMSksbT10aGlzLm9wdGlvbnMucmVuZGVy'@;
put 'YWJsZVRvVmlzdWFsQ29vcmRzKGR0KX1yZXR1cm4gdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclRyYW5zZm9ybUVuZCIsbSxfLE8pLG19fV0pLGx9KCk7VGwoV2RlLFcwKTtjb25zdCBSb3Q9V2RlO2Z1bmN0aW9uIEdkZShsLGMpe3JldHVybiBmdW5jdGlvbiBIb3QobCl7aWYoQXJyYXkuaXNB'@;
put 'cnJheShsKSlyZXR1cm4gbH0obCl8fGZ1bmN0aW9uIEZvdChsLGMpe3ZhciBhPW51bGw9PWw/bnVsbDp0eXBlb2YgU3ltYm9sPCJ1IiYmbFtTeW1ib2wuaXRlcmF0b3JdfHxsWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9YSl7dmFyIGYsZCxoLG0sXz1bXSxPPSEwLFg9ITE7dHJ5e2lmKGg9KGE9'@;
put 'YS5jYWxsKGwpKS5uZXh0LDA9PT1jKXtpZihPYmplY3QoYSkhPT1hKXJldHVybjtPPSExfWVsc2UgZm9yKDshKE89KGY9aC5jYWxsKGEpKS5kb25lKSYmKF8ucHVzaChmLnZhbHVlKSxfLmxlbmd0aCE9PWMpO089ITApO31jYXRjaChhZSl7WD0hMCxkPWFlfWZpbmFsbHl7dHJ5e2lmKCFPJiZu'@;
put 'dWxsIT1hLnJldHVybiYmKG09YS5yZXR1cm4oKSxPYmplY3QobSkhPT1tKSlyZXR1cm59ZmluYWxseXtpZihYKXRocm93IGR9fXJldHVybiBffX0obCxjKXx8ZnVuY3Rpb24gUG90KGwsYyl7aWYobCl7aWYoInN0cmluZyI9PXR5cGVvZiBsKXJldHVybiAkZGUobCxjKTt2YXIgYT1PYmplY3Qu'@;
put 'cHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobCkuc2xpY2UoOCwtMSk7aWYoIk9iamVjdCI9PT1hJiZsLmNvbnN0cnVjdG9yJiYoYT1sLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09YXx8IlNldCI9PT1hKXJldHVybiBBcnJheS5mcm9tKGwpO2lmKCJBcmd1bWVudHMiPT09YXx8L14oPzpVaXxJ'@;
put 'KW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QoYSkpcmV0dXJuICRkZShsLGMpfX0obCxjKXx8ZnVuY3Rpb24gTG90KCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVy'@;
put 'IHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiAkZGUobCxjKXsobnVsbD09Y3x8Yz5sLmxlbmd0aCkmJihjPWwubGVuZ3RoKTtmb3IodmFyIGE9MCxmPW5ldyBBcnJheShjKTthPGM7'@;
put 'YSsrKWZbYV09bFthXTtyZXR1cm4gZn1mdW5jdGlvbiBGJChsKXtyZXR1cm4oRiQ9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0'@;
put 'aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX12YXIgWGRlLE5vdD1bMywyXSxWb3Q9W1sibnVtYmVyIl0sWyJudW1iZXIiLCJzdHJpbmciXSxbIm51bWJlciIsInVuZGVmaW5lZCJd'@;
put 'LFsibnVtYmVyIiwic3RyaW5nIiwidW5kZWZpbmVkIl1dLE4kPVN5bWJvbCgicm9vdCIpLHFkZT1TeW1ib2woImNoaWxkIik7ZnVuY3Rpb24gTTkobCl7dmFyIGM9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOk4kO2lmKGMhPT1OJCYmYyE9'@;
put 'PXFkZSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdXNlZCBpbnRlcm5hbGx5IG9ubHkgYW5kIGNhbm5vdCBiZSBvdmVyd3JpdHRlbi4iKTt2YXIgYT1BcnJheS5pc0FycmF5KGwpLGY9Yz09PU4kLGQ9MDtpZihhKXt2YXIgaD1sWzBdOzA9PT1sLmxlbmd0aD9kPTE6'@;
put 'ZiYmaCBpbnN0YW5jZW9mIGhXP2Q9MzpmJiZBcnJheS5pc0FycmF5KGgpP2Q9TTkoaCxxZGUpOmwubGVuZ3RoPj0yJiZsLmxlbmd0aDw9NCYmIWwuc29tZShmdW5jdGlvbihfLE8pe3JldHVybiFWb3RbT10uaW5jbHVkZXMoRiQoXykpfSkmJihkPTIpfXJldHVybiBkfWZ1bmN0aW9uIG9rKGwp'@;
put 'e3ZhciBjPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxhPWMua2VlcERpcmVjdGlvbixmPXZvaWQgMCE9PWEmJmEsZD1jLnByb3BUb0NvbDtpZighTm90LmluY2x1ZGVzKGwpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgc2Vs'@;
put 'ZWN0aW9uIHJhbmdlcyBzY2hlbWEgdHlwZSB3YXMgcHJvdmlkZWQuIik7cmV0dXJuIGZ1bmN0aW9uKGgpe3ZhciBtPTM9PT1sLF89bT9oLmZyb20ucm93OmhbMF0sTz1tP2guZnJvbS5jb2w6aFsxXSxYPW0/aC50by5yb3c6aFsyXSxhZT1tP2gudG8uY29sOmhbM107aWYoImZ1bmN0aW9uIj09'@;
put 'dHlwZW9mIGQmJigic3RyaW5nIj09dHlwZW9mIE8mJihPPWQoTykpLCJzdHJpbmciPT10eXBlb2YgYWUmJihhZT1kKGFlKSkpLExsKFgpJiYoWD1fKSxMbChhZSkmJihhZT1PKSwhZil7dmFyIHBlPV8sYmU9Tyx4ZT1YLFZlPWFlO189TWF0aC5taW4ocGUseGUpLE89TWF0aC5taW4oYmUsVmUp'@;
put 'LFg9TWF0aC5tYXgocGUseGUpLGFlPU1hdGgubWF4KGJlLFZlKX1yZXR1cm5bXyxPLFgsYWVdfX1mdW5jdGlvbiBONChsKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGwmJmw+PTAmJmw8KGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxLzAp'@;
put 'fWZ1bmN0aW9uIGFrKGwpe3JldHVybihhaz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZj'@;
put 'LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIEpkZShsLGMpe3JldHVybiBmdW5jdGlvbiBZb3QobCl7aWYoQXJyYXkuaXNBcnJheShsKSlyZXR1cm4gbH0obCl8fGZ1bmN0aW9uIFpvdChsLGMpe3ZhciBh'@;
put 'PW51bGw9PWw/bnVsbDp0eXBlb2YgU3ltYm9sPCJ1IiYmbFtTeW1ib2wuaXRlcmF0b3JdfHxsWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9YSl7dmFyIGYsZCxoLG0sXz1bXSxPPSEwLFg9ITE7dHJ5e2lmKGg9KGE9YS5jYWxsKGwpKS5uZXh0LDA9PT1jKXtpZihPYmplY3QoYSkhPT1hKXJldHVy'@;
put 'bjtPPSExfWVsc2UgZm9yKDshKE89KGY9aC5jYWxsKGEpKS5kb25lKSYmKF8ucHVzaChmLnZhbHVlKSxfLmxlbmd0aCE9PWMpO089ITApO31jYXRjaChhZSl7WD0hMCxkPWFlfWZpbmFsbHl7dHJ5e2lmKCFPJiZudWxsIT1hLnJldHVybiYmKG09YS5yZXR1cm4oKSxPYmplY3QobSkhPT1tKSly'@;
put 'ZXR1cm59ZmluYWxseXtpZihYKXRocm93IGR9fXJldHVybiBffX0obCxjKXx8ZnVuY3Rpb24gVW90KGwsYyl7aWYobCl7aWYoInN0cmluZyI9PXR5cGVvZiBsKXJldHVybiBRZGUobCxjKTt2YXIgYT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobCkuc2xpY2UoOCwtMSk7aWYoIk9i'@;
put 'amVjdCI9PT1hJiZsLmNvbnN0cnVjdG9yJiYoYT1sLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09YXx8IlNldCI9PT1hKXJldHVybiBBcnJheS5mcm9tKGwpO2lmKCJBcmd1bWVudHMiPT09YXx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QoYSkpcmV0'@;
put 'dXJuIFFkZShsLGMpfX0obCxjKXx8ZnVuY3Rpb24gem90KCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUg'@;
put 'YSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBRZGUobCxjKXsobnVsbD09Y3x8Yz5sLmxlbmd0aCkmJihjPWwubGVuZ3RoKTtmb3IodmFyIGE9MCxmPW5ldyBBcnJheShjKTthPGM7YSsrKWZbYV09bFthXTtyZXR1cm4gZn1mdW5jdGlvbiBlaGUobCxjKXtmb3Io'@;
put 'dmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLEtvdChmLmtleSksZil9fWZ1bmN0aW9uIEtvdChs'@;
put 'KXt2YXIgYz1mdW5jdGlvbiBxb3QobCxjKXtpZigib2JqZWN0IiE9PWFrKGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PWFrKGYpKXJldHVybiBm'@;
put 'O3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1hayhjKT9jOlN0cmluZyhjKX12YXIgdGhlPWZ1'@;
put 'bmN0aW9uKCl7ZnVuY3Rpb24gbChjLGEpe3ZhciBmPXRoaXM7KGZ1bmN0aW9uIEdvdChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyxsKSx0aGlzLnNldHRpbmdzPWMsdGhpcy50'@;
put 'YWJsZVByb3BzPWEsdGhpcy5pblByb2dyZXNzPSExLHRoaXMuc2VsZWN0ZWRCeUNvcm5lcj0hMSx0aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXI9bmV3IFNldCx0aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXI9bmV3IFNldCx0aGlzLnNlbGVjdGVkUmFuZ2U9bmV3IEFvdChmdW5jdGlvbihkLGgs'@;
put 'bSl7cmV0dXJuIGYudGFibGVQcm9wcy5jcmVhdGVDZWxsUmFuZ2UoZCxoLG0pfSksdGhpcy5oaWdobGlnaHQ9bmV3IENvdCh7aGVhZGVyQ2xhc3NOYW1lOmMuY3VycmVudEhlYWRlckNsYXNzTmFtZSxhY3RpdmVIZWFkZXJDbGFzc05hbWU6Yy5hY3RpdmVIZWFkZXJDbGFzc05hbWUscm93Q2xh'@;
put 'c3NOYW1lOmMuY3VycmVudFJvd0NsYXNzTmFtZSxjb2x1bW5DbGFzc05hbWU6Yy5jdXJyZW50Q29sQ2xhc3NOYW1lLGRpc2FibGVkQ2VsbFNlbGVjdGlvbjpmdW5jdGlvbihoLG0pe3JldHVybiBmLnRhYmxlUHJvcHMuaXNEaXNhYmxlZENlbGxTZWxlY3Rpb24oaCxtKX0sY2VsbENvcm5lclZp'@;
put 'c2libGU6ZnVuY3Rpb24oKXtyZXR1cm4gZi5pc0NlbGxDb3JuZXJWaXNpYmxlLmFwcGx5KGYsYXJndW1lbnRzKX0sYXJlYUNvcm5lclZpc2libGU6ZnVuY3Rpb24oKXtyZXR1cm4gZi5pc0FyZWFDb3JuZXJWaXNpYmxlLmFwcGx5KGYsYXJndW1lbnRzKX0sdmlzdWFsVG9SZW5kZXJhYmxlQ29v'@;
put 'cmRzOmZ1bmN0aW9uKGgpe3JldHVybiBmLnRhYmxlUHJvcHMudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGgpfSxyZW5kZXJhYmxlVG9WaXN1YWxDb29yZHM6ZnVuY3Rpb24oaCl7cmV0dXJuIGYudGFibGVQcm9wcy5yZW5kZXJhYmxlVG9WaXN1YWxDb29yZHMoaCl9LGNyZWF0ZUNlbGxDb29y'@;
put 'ZHM6ZnVuY3Rpb24oaCxtKXtyZXR1cm4gZi50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoaCxtKX0sY3JlYXRlQ2VsbFJhbmdlOmZ1bmN0aW9uKGgsbSxfKXtyZXR1cm4gZi50YWJsZVByb3BzLmNyZWF0ZUNlbGxSYW5nZShoLG0sXyl9LHJvd0luZGV4TWFwcGVyOmZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIGYudGFibGVQcm9wcy5yb3dJbmRleE1hcHBlcigpfSxjb2x1bW5JbmRleE1hcHBlcjpmdW5jdGlvbigpe3JldHVybiBmLnRhYmxlUHJvcHMuY29sdW1uSW5kZXhNYXBwZXIoKX19KSx0aGlzLnRyYW5zZm9ybWF0aW9uPW5ldyBSb3QodGhpcy5zZWxlY3RlZFJhbmdlLHtjb3VudFJvd3M6'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gZi50YWJsZVByb3BzLmNvdW50Um93c1RyYW5zbGF0ZWQoKX0sY291bnRDb2xzOmZ1bmN0aW9uKCl7cmV0dXJuIGYudGFibGVQcm9wcy5jb3VudENvbHNUcmFuc2xhdGVkKCl9LHZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkczpmdW5jdGlvbihoKXtyZXR1cm4gZi50'@;
put 'YWJsZVByb3BzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhoKX0scmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzOmZ1bmN0aW9uKGgpe3JldHVybiBmLnRhYmxlUHJvcHMucmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKGgpfSxjcmVhdGVDZWxsQ29vcmRzOmZ1bmN0aW9uKGgsbSl7cmV0dXJuIGYu'@;
put 'dGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGgsbSl9LGZpeGVkUm93c0JvdHRvbTpmdW5jdGlvbigpe3JldHVybiBjLmZpeGVkUm93c0JvdHRvbX0sbWluU3BhcmVSb3dzOmZ1bmN0aW9uKCl7cmV0dXJuIGMubWluU3BhcmVSb3dzfSxtaW5TcGFyZUNvbHM6ZnVuY3Rpb24oKXtyZXR1cm4g'@;
put 'Yy5taW5TcGFyZUNvbHN9LGF1dG9XcmFwUm93OmZ1bmN0aW9uKCl7cmV0dXJuIGMuYXV0b1dyYXBSb3d9LGF1dG9XcmFwQ29sOmZ1bmN0aW9uKCl7cmV0dXJuIGMuYXV0b1dyYXBDb2x9fSksdGhpcy50cmFuc2Zvcm1hdGlvbi5hZGRMb2NhbEhvb2soImJlZm9yZVRyYW5zZm9ybVN0YXJ0Iixm'@;
put 'dW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLG09MDttPGQ7bSsrKWhbbV09YXJndW1lbnRzW21dO3JldHVybiBmLnJ1bkxvY2FsSG9va3MuYXBwbHkoZixbImJlZm9yZU1vZGlmeVRyYW5zZm9ybVN0YXJ0Il0uY29uY2F0KGgpKX0pLHRoaXMudHJh'@;
put 'bnNmb3JtYXRpb24uYWRkTG9jYWxIb29rKCJhZnRlclRyYW5zZm9ybVN0YXJ0IixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLG09MDttPGQ7bSsrKWhbbV09YXJndW1lbnRzW21dO3JldHVybiBmLnJ1bkxvY2FsSG9va3MuYXBwbHkoZixbImFm'@;
put 'dGVyTW9kaWZ5VHJhbnNmb3JtU3RhcnQiXS5jb25jYXQoaCkpfSksdGhpcy50cmFuc2Zvcm1hdGlvbi5hZGRMb2NhbEhvb2soImJlZm9yZVRyYW5zZm9ybUVuZCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxtPTA7bTxkO20rKyloW21dPWFy'@;
put 'Z3VtZW50c1ttXTtyZXR1cm4gZi5ydW5Mb2NhbEhvb2tzLmFwcGx5KGYsWyJiZWZvcmVNb2RpZnlUcmFuc2Zvcm1FbmQiXS5jb25jYXQoaCkpfSksdGhpcy50cmFuc2Zvcm1hdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyVHJhbnNmb3JtRW5kIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVu'@;
put 'dHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLG09MDttPGQ7bSsrKWhbbV09YXJndW1lbnRzW21dO3JldHVybiBmLnJ1bkxvY2FsSG9va3MuYXBwbHkoZixbImFmdGVyTW9kaWZ5VHJhbnNmb3JtRW5kIl0uY29uY2F0KGgpKX0pLHRoaXMudHJhbnNmb3JtYXRpb24uYWRkTG9jYWxIb29rKCJpbnNl'@;
put 'cnRSb3dSZXF1aXJlIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLG09MDttPGQ7bSsrKWhbbV09YXJndW1lbnRzW21dO3JldHVybiBmLnJ1bkxvY2FsSG9va3MuYXBwbHkoZixbImluc2VydFJvd1JlcXVpcmUiXS5jb25jYXQoaCkpfSksdGhp'@;
put 'cy50cmFuc2Zvcm1hdGlvbi5hZGRMb2NhbEhvb2soImluc2VydENvbFJlcXVpcmUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksbT0wO208ZDttKyspaFttXT1hcmd1bWVudHNbbV07cmV0dXJuIGYucnVuTG9jYWxIb29rcy5hcHBseShmLFsi'@;
put 'aW5zZXJ0Q29sUmVxdWlyZSJdLmNvbmNhdChoKSl9KX1yZXR1cm4gZnVuY3Rpb24gJG90KGwsYyxhKXtjJiZlaGUobC5wcm90b3R5cGUsYyksYSYmZWhlKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGwsW3trZXk6ImdldFNlbGVjdGVk'@;
put 'UmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsZWN0ZWRSYW5nZX19LHtrZXk6ImJlZ2luIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuaW5Qcm9ncmVzcz0hMH19LHtrZXk6ImZpbmlzaCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyU2VsZWN0'@;
put 'aW9uRmluaXNoZWQiLEFycmF5LmZyb20odGhpcy5zZWxlY3RlZFJhbmdlKSksdGhpcy5pblByb2dyZXNzPSExfX0se2tleToiaXNJblByb2dyZXNzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmluUHJvZ3Jlc3N9fSx7a2V5OiJzZXRSYW5nZVN0YXJ0Iix2YWx1ZTpmdW5jdGlvbihh'@;
put 'LGYpe3ZhciBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0saD0ibXVsdGlwbGUiPT09dGhpcy5zZXR0aW5ncy5zZWxlY3Rpb25Nb2RlLG09TGwoZik/dGhpcy50YWJsZVByb3BzLmdldFNob3J0Y3V0TWFuYWdlcigpLmlzQ3RybFByZXNz'@;
put 'ZWQoKTpmLF89YS5yb3c8MCxPPWEuY29sPDAsWD1fJiZPLGFlPWEuY2xvbmUoKTt0aGlzLnNlbGVjdGVkQnlDb3JuZXI9WCx0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVNldFJhbmdlU3RhcnQiLmNvbmNhdChkPyJPbmx5IjoiIiksYWUpLCghaHx8aCYmIW0mJkxsKGYpKSYmdGhpcy5zZWxl'@;
put 'Y3RlZFJhbmdlLmNsZWFyKCksdGhpcy5zZWxlY3RlZFJhbmdlLmFkZChhZSksMD09PXRoaXMuZ2V0TGF5ZXJMZXZlbCgpJiYodGhpcy5zZWxlY3RlZEJ5Um93SGVhZGVyLmNsZWFyKCksdGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLmNsZWFyKCkpLCFYJiZPJiZ0aGlzLnNlbGVjdGVkQnlS'@;
put 'b3dIZWFkZXIuYWRkKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSwhWCYmXyYmdGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLmFkZCh0aGlzLmdldExheWVyTGV2ZWwoKSksZHx8dGhpcy5zZXRSYW5nZUVuZChhKX19LHtrZXk6InNldFJhbmdlU3RhcnRPbmx5Iix2YWx1ZTpmdW5jdGlvbihhLGYp'@;
put 'e3RoaXMuc2V0UmFuZ2VTdGFydChhLGYsITApfX0se2tleToic2V0UmFuZ2VFbmQiLHZhbHVlOmZ1bmN0aW9uKGEpe2lmKCF0aGlzLnNlbGVjdGVkUmFuZ2UuaXNFbXB0eSgpKXt2YXIgZj1hLmNsb25lKCk7dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVTZXRSYW5nZUVuZCIsZiksdGhpcy5i'@;
put 'ZWdpbigpO3ZhciBkPXRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCk7InNpbmdsZSIhPT10aGlzLnNldHRpbmdzLnNlbGVjdGlvbk1vZGUmJmQuc2V0VG8odGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoZi5yb3csZi5jb2wpKSx0aGlzLmhpZ2hsaWdodC5nZXRDZWxsKCkuY2xl'@;
put 'YXIoKSx0aGlzLmhpZ2hsaWdodC5pc0VuYWJsZWRGb3IoWU0sZC5oaWdobGlnaHQpJiZ0aGlzLmhpZ2hsaWdodC5nZXRDZWxsKCkuYWRkKHRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCkuaGlnaGxpZ2h0KS5jb21taXQoKS5zeW5jV2l0aChkKTt2YXIgaD10aGlzLmdldExheWVyTGV2ZWwo'@;
put 'KTtoPHRoaXMuaGlnaGxpZ2h0LmxheWVyTGV2ZWwmJihSbih0aGlzLmhpZ2hsaWdodC5nZXRBcmVhcygpLGZ1bmN0aW9uKFplKXtaZS5jbGVhcigpfSksUm4odGhpcy5oaWdobGlnaHQuZ2V0SGVhZGVycygpLGZ1bmN0aW9uKFplKXtaZS5jbGVhcigpfSksUm4odGhpcy5oaWdobGlnaHQuZ2V0'@;
put 'QWN0aXZlSGVhZGVycygpLGZ1bmN0aW9uKFplKXtaZS5jbGVhcigpfSkpLHRoaXMuaGlnaGxpZ2h0LnVzZUxheWVyTGV2ZWwoaCk7dmFyIG09dGhpcy5oaWdobGlnaHQuY3JlYXRlT3JHZXRBcmVhKCksXz10aGlzLmhpZ2hsaWdodC5jcmVhdGVPckdldEhlYWRlcigpLE89dGhpcy5oaWdobGln'@;
put 'aHQuY3JlYXRlT3JHZXRBY3RpdmVIZWFkZXIoKTtpZihtLmNsZWFyKCksXy5jbGVhcigpLE8uY2xlYXIoKSx0aGlzLmhpZ2hsaWdodC5pc0VuYWJsZWRGb3IodEwsZC5oaWdobGlnaHQpJiYodGhpcy5pc011bHRpcGxlKCl8fGg+PTEpJiYobS5hZGQoZC5mcm9tKS5hZGQoZC50bykuY29tbWl0'@;
put 'KCksMT09PWgpKXt2YXIgWD10aGlzLnNlbGVjdGVkUmFuZ2UucHJldmlvdXMoKTt0aGlzLmhpZ2hsaWdodC51c2VMYXllckxldmVsKGgtMSkuY3JlYXRlT3JHZXRBcmVhKCkuYWRkKFguZnJvbSkuY29tbWl0KCkuc3luY1dpdGgoWCksdGhpcy5oaWdobGlnaHQudXNlTGF5ZXJMZXZlbChoKX1p'@;
put 'Zih0aGlzLmhpZ2hsaWdodC5pc0VuYWJsZWRGb3IoV00sZC5oaWdobGlnaHQpKXt2YXIgYWU9MD09PXRoaXMudGFibGVQcm9wcy5jb3VudFJvd3NUcmFuc2xhdGVkKCkscGU9MD09PXRoaXMudGFibGVQcm9wcy5jb3VudENvbHNUcmFuc2xhdGVkKCksYmU9ZDsoYWV8fHBlKSYmKGJlPWQuY2xv'@;
put 'bmUoKSksYWUmJihiZS5mcm9tLnJvdz0tMSkscGUmJihiZS5mcm9tLmNvbD0tMSksInNpbmdsZSI9PT10aGlzLnNldHRpbmdzLnNlbGVjdGlvbk1vZGU/KHRoaXMuaXNTZWxlY3RlZEJ5QW55SGVhZGVyKCkmJmJlLmZyb20ubm9ybWFsaXplKCksXy5hZGQoYmUuZnJvbSkuY29tbWl0KCkpOl8u'@;
put 'YWRkKGJlLmZyb20pLmFkZChiZS50bykuY29tbWl0KCksdGhpcy5pc0VudGlyZVJvd1NlbGVjdGVkKCkmJnRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKT09PWQuZ2V0V2lkdGgoKSYmTy5hZGQodGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoZC5mcm9tLnJvdywtMSkpLmFkZCh0'@;
put 'aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhkLnRvLnJvdywtMSkpLmNvbW1pdCgpLHRoaXMuaXNFbnRpcmVDb2x1bW5TZWxlY3RlZCgpJiZ0aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzKCk9PT1kLmdldEhlaWdodCgpJiZPLmFkZCh0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENv'@;
put 'b3JkcygtMSxkLmZyb20uY29sKSkuYWRkKHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKC0xLGQudG8uY29sKSkuY29tbWl0KCl9dGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclNldFJhbmdlRW5kIixhKX19fSx7a2V5OiJpc011bHRpcGxlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBh'@;
put 'PWc1KCF0aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpLmlzU2luZ2xlKCkpO3JldHVybiB0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVySXNNdWx0aXBsZVNlbGVjdGlvbiIsYSksYS52YWx1ZX19LHtrZXk6InRyYW5zZm9ybVN0YXJ0Iix2YWx1ZTpmdW5jdGlvbihhLGYpe3RoaXMuc2V0UmFu'@;
put 'Z2VTdGFydCh0aGlzLnRyYW5zZm9ybWF0aW9uLnRyYW5zZm9ybVN0YXJ0KGEsZixhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdKSl9fSx7a2V5OiJ0cmFuc2Zvcm1FbmQiLHZhbHVlOmZ1bmN0aW9uKGEsZil7dGhpcy5zZXRSYW5nZUVuZCh0'@;
put 'aGlzLnRyYW5zZm9ybWF0aW9uLnRyYW5zZm9ybUVuZChhLGYpKX19LHtrZXk6ImdldExheWVyTGV2ZWwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsZWN0ZWRSYW5nZS5zaXplKCktMX19LHtrZXk6ImlzU2VsZWN0ZWQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuc2Vs'@;
put 'ZWN0ZWRSYW5nZS5pc0VtcHR5KCl9fSx7a2V5OiJpc1NlbGVjdGVkQnlSb3dIZWFkZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGE9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuZ2V0TGF5ZXJMZXZlbCgpO3JldHVybiF0aGlzLmlz'@;
put 'U2VsZWN0ZWRCeUNvcm5lcihhKSYmdGhpcy5pc0VudGlyZVJvd1NlbGVjdGVkKGEpfX0se2tleToiaXNFbnRpcmVSb3dTZWxlY3RlZCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5nZXRM'@;
put 'YXllckxldmVsKCk7cmV0dXJuLTE9PT1hP3RoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlci5zaXplPjA6dGhpcy5zZWxlY3RlZEJ5Um93SGVhZGVyLmhhcyhhKX19LHtrZXk6ImlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjAm'@;
put 'JnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5nZXRMYXllckxldmVsKCk7cmV0dXJuIXRoaXMuaXNTZWxlY3RlZEJ5Q29ybmVyKCkmJnRoaXMuaXNFbnRpcmVDb2x1bW5TZWxlY3RlZChhKX19LHtrZXk6ImlzRW50aXJlQ29sdW1uU2VsZWN0ZWQiLHZhbHVlOmZ1bmN0'@;
put 'aW9uKCl7dmFyIGE9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuZ2V0TGF5ZXJMZXZlbCgpO3JldHVybi0xPT09YT90aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIuc2l6ZT4wOnRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5o'@;
put 'YXMoYSl9fSx7a2V5OiJpc1NlbGVjdGVkQnlBbnlIZWFkZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKC0xKXx8dGhpcy5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoLTEpfHx0aGlzLmlzU2VsZWN0ZWRCeUNvcm5lcigpfX0se2tleToiaXNT'@;
put 'ZWxlY3RlZEJ5Q29ybmVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGVkQnlDb3JuZXJ9fSx7a2V5OiJpbkluU2VsZWN0aW9uIix2YWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5zZWxlY3RlZFJhbmdlLmluY2x1ZGVzKGEpfX0se2tleToiaXNDZWxsQ29ybmVyVmlz'@;
put 'aWJsZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXR0aW5ncy5maWxsSGFuZGxlJiYhdGhpcy50YWJsZVByb3BzLmlzRWRpdG9yT3BlbmVkKCkmJiF0aGlzLmlzTXVsdGlwbGUoKX19LHtrZXk6ImlzQXJlYUNvcm5lclZpc2libGUiLHZhbHVlOmZ1bmN0aW9uKGEpe3JldHVybigh'@;
put 'TnVtYmVyLmlzSW50ZWdlcihhKXx8YT09PXRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSYmdGhpcy5zZXR0aW5ncy5maWxsSGFuZGxlJiYhdGhpcy50YWJsZVByb3BzLmlzRWRpdG9yT3BlbmVkKCkmJnRoaXMuaXNNdWx0aXBsZSgpfX0se2tleToiY2xlYXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5z'@;
put 'ZWxlY3RlZFJhbmdlLmNsZWFyKCksdGhpcy5oaWdobGlnaHQuY2xlYXIoKX19LHtrZXk6ImRlc2VsZWN0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuaXNTZWxlY3RlZCgpJiYodGhpcy5pblByb2dyZXNzPSExLHRoaXMuY2xlYXIoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyRGVzZWxlY3Qi'@;
put 'KSl9fSx7a2V5OiJzZWxlY3RBbGwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGE9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSxmPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0sZD10aGlz'@;
put 'LnRhYmxlUHJvcHMuY291bnRSb3dzKCksaD10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzKCk7aWYoYXx8Znx8MCE9PWQmJjAhPT1oKXt2YXIgbT10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhmPy0xOjAsYT8tMTowKSxfPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRz'@;
put 'KGQtMSxoLTEpO3RoaXMuY2xlYXIoKSx0aGlzLnNldFJhbmdlU3RhcnRPbmx5KG0pLHRoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpLHRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpLHRoaXMuc2V0UmFu'@;
put 'Z2VFbmQoXyksdGhpcy5maW5pc2goKX19fSx7a2V5OiJzZWxlY3RDZWxscyIsdmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGY9dGhpcyxkPU05KGEpO2lmKDE9PT1kKXJldHVybiExO2lmKDA9PT1kKXRocm93IG5ldyBFcnJvcihPbChYZGV8fChYZGU9ZnVuY3Rpb24gV290KGwsYyl7cmV0dXJuIGN8'@;
put 'fChjPWwuc2xpY2UoMCkpLE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobCx7cmF3Ont2YWx1ZTpPYmplY3QuZnJlZXplKGMpfX0pKX0oWyJVbnN1cHBvcnRlZCBmb3JtYXQgb2YgdGhlIHNlbGVjdGlvbiByYW5nZXMgd2FzIHBhc3NlZC4gVG8gc2VsZWN0IGNlbGxzIHBh'@;
put 'c3MgXG4gICAgICAgIHRoZSBjb29yZGluYXRlcyBhcyBhbiBhcnJheSBvZiBhcnJheXMgKFtbcm93U3RhcnQsIGNvbHVtblN0YXJ0L2NvbHVtblByb3BTdGFydCwgcm93RW5kLCBcbiAgICAgICAgY29sdW1uRW5kL2NvbHVtblByb3BFbmRdXSkgb3IgYXMgYW4gYXJyYXkgb2YgQ2VsbFJhbmdl'@;
put 'IG9iamVjdHMuIl0sWyJVbnN1cHBvcnRlZCBmb3JtYXQgb2YgdGhlIHNlbGVjdGlvbiByYW5nZXMgd2FzIHBhc3NlZC4gVG8gc2VsZWN0IGNlbGxzIHBhc3NcXHgyMFxuICAgICAgICB0aGUgY29vcmRpbmF0ZXMgYXMgYW4gYXJyYXkgb2YgYXJyYXlzIChbW3Jvd1N0YXJ0LCBjb2x1bW5TdGFy'@;
put 'dC9jb2x1bW5Qcm9wU3RhcnQsIHJvd0VuZCxcXHgyMFxuICAgICAgICBjb2x1bW5FbmQvY29sdW1uUHJvcEVuZF1dKSBvciBhcyBhbiBhcnJheSBvZiBDZWxsUmFuZ2Ugb2JqZWN0cy4iXSkpKSk7dmFyIGg9b2soZCx7cHJvcFRvQ29sOmZ1bmN0aW9uKGFlKXtyZXR1cm4gZi50YWJsZVByb3Bz'@;
put 'LnByb3BUb0NvbChhZSl9LGtlZXBEaXJlY3Rpb246ITB9KSxtPXRoaXMudGFibGVQcm9wcy5jb3VudFJvd3MoKSxfPXRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKSxPPSFhLnNvbWUoZnVuY3Rpb24oWCl7dmFyIHBlPUpkZShoKFgpLDQpLHhlPXBlWzFdLFZlPXBlWzJdLFplPXBlWzNdO3Jl'@;
put 'dHVybiEoTjQocGVbMF0sbSkmJk40KHhlLF8pJiZONChWZSxtKSYmTjQoWmUsXykpfSk7cmV0dXJuIE8mJih0aGlzLmNsZWFyKCksUm4oYSxmdW5jdGlvbihYKXt2YXIgcGU9SmRlKGgoWCksNCksVmU9cGVbMl0sWmU9cGVbM107Zi5zZXRSYW5nZVN0YXJ0T25seShmLnRhYmxlUHJvcHMuY3Jl'@;
put 'YXRlQ2VsbENvb3JkcyhwZVswXSxwZVsxXSksITEpLGYuc2V0UmFuZ2VFbmQoZi50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoVmUsWmUpKSxmLmZpbmlzaCgpfSkpLE99fSx7a2V5OiJzZWxlY3RDb2x1bW5zIix2YWx1ZTpmdW5jdGlvbihhKXt2YXIgZj1hcmd1bWVudHMubGVuZ3RoPjEm'@;
put 'JnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YSxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTotMSxoPSJzdHJpbmciPT10eXBlb2YgYT90aGlzLnRhYmxlUHJvcHMucHJvcFRvQ29sKGEpOmEsbT0ic3RyaW5nIj09dHlw'@;
put 'ZW9mIGY/dGhpcy50YWJsZVByb3BzLnByb3BUb0NvbChmKTpmLF89dGhpcy50YWJsZVByb3BzLmNvdW50Q29scygpLE89dGhpcy50YWJsZVByb3BzLmNvdW50Um93cygpLFg9TjQoaCxfKSYmTjQobSxfKTtyZXR1cm4gWCYmKHRoaXMuc2V0UmFuZ2VTdGFydE9ubHkodGhpcy50YWJsZVByb3Bz'@;
put 'LmNyZWF0ZUNlbGxDb29yZHMoZCxoKSksdGhpcy5zZXRSYW5nZUVuZCh0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhPLTEsbSkpLHRoaXMuZmluaXNoKCkpLFh9fSx7a2V5OiJzZWxlY3RSb3dzIix2YWx1ZTpmdW5jdGlvbihhKXt2YXIgZj1hcmd1bWVudHMubGVuZ3RoPjEmJnZv'@;
put 'aWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YSxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTotMSxoPXRoaXMudGFibGVQcm9wcy5jb3VudFJvd3MoKSxtPXRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKSxfPU40KGEsaCkm'@;
put 'Jk40KGYsaCk7cmV0dXJuIF8mJih0aGlzLnNldFJhbmdlU3RhcnRPbmx5KHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGEsZCkpLHRoaXMuc2V0UmFuZ2VFbmQodGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoZixtLTEpKSx0aGlzLmZpbmlzaCgpKSxffX0se2tleToi'@;
put 'cmVmcmVzaCIsdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLmhpZ2hsaWdodC5nZXRDdXN0b21TZWxlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbihYKXtYLmNvbW1pdCgpfSksdGhpcy5pc1NlbGVjdGVkKCkpe3ZhciBmPXRoaXMuaGlnaGxpZ2h0LmdldENlbGwoKSxkPXRoaXMuZ2V0TGF5ZXJM'@;
put 'ZXZlbCgpO2YuY29tbWl0KCkuc3luY1dpdGgodGhpcy5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKSk7Zm9yKHZhciBoPTA7aDx0aGlzLnNlbGVjdGVkUmFuZ2Uuc2l6ZSgpO2grPTEpe3RoaXMuaGlnaGxpZ2h0LnVzZUxheWVyTGV2ZWwoaCk7dmFyIG09dGhpcy5oaWdobGlnaHQuY3JlYXRlT3JH'@;
put 'ZXRBcmVhKCksXz10aGlzLmhpZ2hsaWdodC5jcmVhdGVPckdldEhlYWRlcigpLE89dGhpcy5oaWdobGlnaHQuY3JlYXRlT3JHZXRBY3RpdmVIZWFkZXIoKTttLmNvbW1pdCgpLF8uY29tbWl0KCksTy5jb21taXQoKX10aGlzLmhpZ2hsaWdodC51c2VMYXllckxldmVsKGQpfX19XSksbH0oKTtU'@;
put 'bCh0aGUsVzApO2NvbnN0IFhvdD10aGU7dmFyIGxrPUZmKCJjZWxsVHlwZXMiKSxKb3Q9bGsucmVnaXN0ZXIsUW90PWxrLmdldEl0ZW0sbmhlPWxrLmhhc0l0ZW0sZWF0PWxrLmdldE5hbWVzO2Z1bmN0aW9uIFYkKGwpe2lmKCFuaGUobCkpdGhyb3cgRXJyb3IoJ1lvdSBkZWNsYXJlZCBjZWxs'@;
put 'IHR5cGUgIicuY29uY2F0KGwsJyIgYXMgYSBzdHJpbmcgdGhhdCBpcyBub3QgbWFwcGVkIHRvIGEga25vd24gb2JqZWN0LlxuICAgICAgICAgICAgICAgICBDZWxsIHR5cGUgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYSBzdHJpbmcgbWFwcGVkIHRvIGFuIG9iamVjdCByZWdpc3RlcmVkIGJ5XG4g'@;
put 'ICAgICAgICAgICAgICAgICJIYW5kc29udGFibGUuY2VsbFR5cGVzLnJlZ2lzdGVyQ2VsbFR5cGUiIG1ldGhvZCcpKTtyZXR1cm4gUW90KGwpfWZ1bmN0aW9uIEJkKGwsYyl7InN0cmluZyIhPXR5cGVvZiBsJiYobD0oYz1sKS5DRUxMX1RZUEUpO3ZhciBmPWMuZWRpdG9yLGQ9Yy5yZW5kZXJl'@;
put 'cixoPWMudmFsaWRhdG9yO2YmJlkwKGwsZiksZCYmTmgobCxkKSxoJiZVNyhsLGgpLEpvdChsLGMpfWZ1bmN0aW9uIG9MKGwsYyl7dmFyIGE9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOmwsZj0ic3RyaW5nIj09dHlwZW9mIGMudHlwZT9W'@;
put 'JChjLnR5cGUpOmMudHlwZTtpZihsLl9hdXRvbWF0aWNhbGx5QXNzaWduZWRNZXRhUHJvcHMmJm1hKGMsZnVuY3Rpb24oaCxtKXtsLl9hdXRvbWF0aWNhbGx5QXNzaWduZWRNZXRhUHJvcHMuZGVsZXRlKG0pfSkscGEoZikpe2E9PT1sJiYhbC5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVBy'@;
put 'b3BzJiYobC5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzPW5ldyBTZXQpO3ZhciBkPXt9O21hKGYsZnVuY3Rpb24oaCxtKXt2YXIgXzsoZnVuY3Rpb24gdGF0KGwsYyl7dmFyIGE7cmV0dXJuIkNFTExfVFlQRSIhPT1sJiYoKG51bGw9PT0oYT1jLl9hdXRvbWF0aWNhbGx5QXNzaWdu'@;
put 'ZWRNZXRhUHJvcHMpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmhhcyhsKSl8fCFTcyhjLGwpKX0pKG0sYSkmJihkW21dPWgsbnVsbD09PShfPWwuX2F1dG9tYXRpY2FsbHlBc3NpZ25lZE1ldGFQcm9wcyl8fHZvaWQgMD09PV98fF8uYWRkKG0pKX0pLHJ1KGwsZCl9fWZ1bmN0aW9uIGFMKGwpe3Jl'@;
put 'dHVybiBOdW1iZXIuaXNJbnRlZ2VyKGwpJiZsPj0wfWZ1bmN0aW9uIGxMKGwsYyl7aWYoIWwoKSl0aHJvdyBuZXcgRXJyb3IoIkFzc2VydGlvbiBmYWlsZWQ6ICIuY29uY2F0KGMpKX1mdW5jdGlvbiBzTChsKXtyZXR1cm4gbnVsbD09bH1mdW5jdGlvbiBCJChsKXtyZXR1cm4oQiQ9ImZ1bmN0'@;
put 'aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJv'@;
put 'bC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1jb25zdCByaGU9ZnVuY3Rpb24oKXtyZXR1cm57X2F1dG9tYXRpY2FsbHlBc3NpZ25lZE1ldGFQcm9wczp2b2lkIDAsYWN0aXZlSGVhZGVyQ2xhc3NOYW1lOiJodF9fYWN0aXZlX2hpZ2hsaWdodCIsYWxsb3dFbXB0eTohMCxhbGxv'@;
put 'd0h0bWw6ITEsYWxsb3dJbnNlcnRDb2x1bW46ITAsYWxsb3dJbnNlcnRSb3c6ITAsYWxsb3dJbnZhbGlkOiEwLGFsbG93UmVtb3ZlQ29sdW1uOiEwLGFsbG93UmVtb3ZlUm93OiEwLGF1dG9Db2x1bW5TaXplOnZvaWQgMCxhdXRvUm93U2l6ZTp2b2lkIDAsYXV0b1dyYXBDb2w6ITEsYXV0b1dy'@;
put 'YXBSb3c6ITEsYmluZFJvd3NXaXRoSGVhZGVyczp2b2lkIDAsY2VsbDpbXSxjZWxsczp2b2lkIDAsY2hlY2tlZFRlbXBsYXRlOnZvaWQgMCxjbGFzc05hbWU6dm9pZCAwLGNvbEhlYWRlcnM6bnVsbCxjb2xsYXBzaWJsZUNvbHVtbnM6dm9pZCAwLGNvbHVtbkhlYWRlckhlaWdodDp2b2lkIDAs'@;
put 'Y29sdW1uczp2b2lkIDAsY29sdW1uU29ydGluZzp2b2lkIDAsY29sdW1uU3VtbWFyeTp2b2lkIDAsY29sV2lkdGhzOnZvaWQgMCxjb21tZW50ZWRDZWxsQ2xhc3NOYW1lOiJodENvbW1lbnRDZWxsIixjb21tZW50czohMSxjb250ZXh0TWVudTp2b2lkIDAsY29weWFibGU6ITAsY29weVBhc3Rl'@;
put 'OiEwLGNvcnJlY3RGb3JtYXQ6ITEsY3VycmVudENvbENsYXNzTmFtZTp2b2lkIDAsY3VycmVudEhlYWRlckNsYXNzTmFtZToiaHRfX2hpZ2hsaWdodCIsY3VycmVudFJvd0NsYXNzTmFtZTp2b2lkIDAsY3VzdG9tQm9yZGVyczohMSxkYXRhOnZvaWQgMCxkYXRhU2NoZW1hOnZvaWQgMCxkYXRl'@;
put 'Rm9ybWF0OiJERC9NTS9ZWVlZIixkYXRlUGlja2VyQ29uZmlnOnZvaWQgMCxkZWZhdWx0RGF0ZTp2b2lkIDAsZGlzYWJsZVZpc3VhbFNlbGVjdGlvbjohMSxkcmFnVG9TY3JvbGw6ITAsZHJvcGRvd25NZW51OnZvaWQgMCxlZGl0b3I6dm9pZCAwLGVudGVyQmVnaW5zRWRpdGluZzohMCxlbnRl'@;
put 'ck1vdmVzOntjb2w6MCxyb3c6MX0sZmlsbEhhbmRsZTp7YXV0b0luc2VydFJvdzohMX0sZmlsdGVyOiEwLGZpbHRlcmluZ0Nhc2VTZW5zaXRpdmU6ITEsZmlsdGVyczp2b2lkIDAsZml4ZWRDb2x1bW5zTGVmdDowLGZpeGVkQ29sdW1uc1N0YXJ0OjAsZml4ZWRSb3dzQm90dG9tOjAsZml4ZWRS'@;
put 'b3dzVG9wOjAsZm9ybXVsYXM6dm9pZCAwLGZyYWdtZW50U2VsZWN0aW9uOiExLGhlaWdodDp2b2lkIDAsaGlkZGVuQ29sdW1uczp2b2lkIDAsaGlkZGVuUm93czp2b2lkIDAsaW52YWxpZENlbGxDbGFzc05hbWU6Imh0SW52YWxpZCIsaXNFbXB0eUNvbDpmdW5jdGlvbihjKXt2YXIgYSxmO2Zv'@;
put 'cihhPTAsZj10aGlzLmNvdW50Um93cygpO2E8ZjthKyspaWYoITE9PT13dSh0aGlzLmdldERhdGFBdENlbGwoYSxjKSkpcmV0dXJuITE7cmV0dXJuITB9LGlzRW1wdHlSb3c6ZnVuY3Rpb24oYyl7dmFyIGEsZixkLGg7Zm9yKGE9MCxmPXRoaXMuY291bnRDb2xzKCk7YTxmO2ErKylpZighMT09'@;
put 'PXd1KGQ9dGhpcy5nZXREYXRhQXRDZWxsKGMsYSkpKXJldHVybiJvYmplY3QiPT09QiQoZCkmJihoPXRoaXMuZ2V0Q2VsbE1ldGEoYyxhKSxqSSh0aGlzLmdldFNjaGVtYSgpW2gucHJvcF0sZCkpO3JldHVybiEwfSxsYWJlbDp2b2lkIDAsbGFuZ3VhZ2U6ImVuLVVTIixsYXlvdXREaXJlY3Rp'@;
put 'b246ImluaGVyaXQiLGxpY2Vuc2VLZXk6dm9pZCAwLGxvY2FsZToiZW4tVVMiLG1hbnVhbENvbHVtbkZyZWV6ZTp2b2lkIDAsbWFudWFsQ29sdW1uTW92ZTp2b2lkIDAsbWFudWFsQ29sdW1uUmVzaXplOnZvaWQgMCxtYW51YWxSb3dNb3ZlOnZvaWQgMCxtYW51YWxSb3dSZXNpemU6dm9pZCAw'@;
put 'LG1heENvbHM6MS8wLG1heFJvd3M6MS8wLG1lcmdlQ2VsbHM6ITEsbWluQ29sczowLG1pblJvd3M6MCxtaW5TcGFyZUNvbHM6MCxtaW5TcGFyZVJvd3M6MCxtdWx0aUNvbHVtblNvcnRpbmc6dm9pZCAwLG5lc3RlZEhlYWRlcnM6dm9pZCAwLG5lc3RlZFJvd3M6dm9pZCAwLG5vV29yZFdyYXBD'@;
put 'bGFzc05hbWU6Imh0Tm9XcmFwIixudW1lcmljRm9ybWF0OnZvaWQgMCxvYnNlcnZlRE9NVmlzaWJpbGl0eTohMCxvdXRzaWRlQ2xpY2tEZXNlbGVjdHM6ITAscGVyc2lzdGVudFN0YXRlOnZvaWQgMCxwbGFjZWhvbGRlcjp2b2lkIDAscGxhY2Vob2xkZXJDZWxsQ2xhc3NOYW1lOiJodFBsYWNl'@;
put 'aG9sZGVyIixwcmV2ZW50T3ZlcmZsb3c6ITEscHJldmVudFdoZWVsOiExLHJlYWRPbmx5OiExLHJlYWRPbmx5Q2VsbENsYXNzTmFtZToiaHREaW1tZWQiLHJlbmRlckFsbFJvd3M6dm9pZCAwLHJlbmRlcmVyOnZvaWQgMCxyb3dIZWFkZXJzOnZvaWQgMCxyb3dIZWFkZXJXaWR0aDp2b2lkIDAs'@;
put 'cm93SGVpZ2h0czp2b2lkIDAsc2VhcmNoOiExLHNlbGVjdGlvbk1vZGU6Im11bHRpcGxlIixzZWxlY3RPcHRpb25zOnZvaWQgMCxza2lwQ29sdW1uT25QYXN0ZTohMSxza2lwUm93T25QYXN0ZTohMSxzb3J0QnlSZWxldmFuY2U6ITAsc291cmNlOnZvaWQgMCxzdGFydENvbHM6NSxzdGFydFJv'@;
put 'd3M6NSxzdHJldGNoSDoibm9uZSIsc3RyaWN0OnZvaWQgMCx0YWJsZUNsYXNzTmFtZTp2b2lkIDAsdGFiTW92ZXM6e3JvdzowLGNvbDoxfSx0aXRsZTp2b2lkIDAsdHJpbURyb3Bkb3duOiEwLHRyaW1Sb3dzOnZvaWQgMCx0cmltV2hpdGVzcGFjZTohMCx0eXBlOiJ0ZXh0Iix1bmNoZWNrZWRU'@;
put 'ZW1wbGF0ZTp2b2lkIDAsdW5kbzp2b2lkIDAsdmFsaWRhdG9yOnZvaWQgMCx2aWV3cG9ydENvbHVtblJlbmRlcmluZ09mZnNldDoiYXV0byIsdmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQ6ImF1dG8iLHZpc2libGVSb3dzOjEwLHdpZHRoOnZvaWQgMCx3b3JkV3JhcDohMH19O2Z1bmN0aW9u'@;
put 'IHNrKGwpe3JldHVybihzaz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVj'@;
put 'dG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIGloZShsLGMpe3ZhciBhPU9iamVjdC5rZXlzKGwpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBmPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMo'@;
put 'bCk7YyYmKGY9Zi5maWx0ZXIoZnVuY3Rpb24oZCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobCxkKS5lbnVtZXJhYmxlfSkpLGEucHVzaC5hcHBseShhLGYpfXJldHVybiBhfWZ1bmN0aW9uIG9oZShsKXtmb3IodmFyIGM9MTtjPGFyZ3VtZW50cy5sZW5ndGg7Yysr'@;
put 'KXt2YXIgYT1udWxsIT1hcmd1bWVudHNbY10/YXJndW1lbnRzW2NdOnt9O2MlMj9paGUoT2JqZWN0KGEpLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe3JhdChsLGYsYVtmXSl9KTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhsLE9iamVj'@;
put 'dC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGEpKTppaGUoT2JqZWN0KGEpKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLGYsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihhLGYpKX0pfXJldHVybiBsfWZ1bmN0aW9uIHJhdChsLGMsYSl7cmV0'@;
put 'dXJuKGM9c2hlKGMpKWluIGw/T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsYyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmxbY109YSxsfWZ1bmN0aW9uIGFoZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2Yu'@;
put 'ZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsc2hlKGYua2V5KSxmKX19ZnVuY3Rpb24gbGhlKGwsYyxhKXtyZXR1cm4gYyYmYWhlKGwucHJvdG90eXBlLGMpLGEm'@;
put 'JmFoZShsLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGx9ZnVuY3Rpb24gc2hlKGwpe3ZhciBjPWZ1bmN0aW9uIGlhdChsLGMpe2lmKCJvYmplY3QiIT09c2sobCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0'@;
put 'aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09c2soZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1j'@;
put 'P1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PXNrKGMpP2M6U3RyaW5nKGMpfWZ1bmN0aW9uIHVoZShsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfXZh'@;
put 'ciBhYXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKGMpe3VoZSh0aGlzLGwpLHRoaXMubWV0YUN0b3I9ZnVuY3Rpb24gb2F0KCl7cmV0dXJuIGxoZShmdW5jdGlvbiBsKCl7dWhlKHRoaXMsbCl9KX0oKSx0aGlzLm1ldGE9dGhpcy5tZXRhQ3Rvci5wcm90b3R5cGUscnUodGhpcy5tZXRhLHJoZSgp'@;
put 'KSx0aGlzLm1ldGEuaW5zdGFuY2U9Y31yZXR1cm4gbGhlKGwsW3trZXk6ImdldE1ldGFDb25zdHJ1Y3RvciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXRhQ3Rvcn19LHtrZXk6ImdldE1ldGEiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWV0YX19LHtrZXk6InVwZGF0'@;
put 'ZU1ldGEiLHZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBmO3J1KHRoaXMubWV0YSxhKSxvTCh0aGlzLm1ldGEsb2hlKG9oZSh7fSxhKSx7fSx7dHlwZTpudWxsIT09KGY9YS50eXBlKSYmdm9pZCAwIT09Zj9mOnRoaXMubWV0YS50eXBlfSksYSl9fV0pLGx9KCk7ZnVuY3Rpb24gdWsobCl7cmV0dXJu'@;
put 'KHVrPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wm'@;
put 'JmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gY2hlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihm'@;
put 'LndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCx1YXQoZi5rZXkpLGYpfX1mdW5jdGlvbiB1YXQobCl7dmFyIGM9ZnVuY3Rpb24gY2F0KGwsYyl7aWYoIm9iamVjdCIhPT11ayhsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZv'@;
put 'aWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT11ayhmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51'@;
put 'bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09dWsoYyk/YzpTdHJpbmcoYyl9dmFyIGZhdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGwoYyl7IWZ1bmN0aW9uIGxhdChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEg'@;
put 'Y2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGwpO3ZhciBhPWMuZ2V0TWV0YUNvbnN0cnVjdG9yKCk7dGhpcy5tZXRhPW5ldyBhfXJldHVybiBmdW5jdGlvbiBzYXQobCxjLGEpe2MmJmNoZShsLnByb3RvdHlwZSxjKSxhJiZjaGUobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJv'@;
put 'dG90eXBlIix7d3JpdGFibGU6ITF9KX0obCxbe2tleToiZ2V0TWV0YSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXRhfX0se2tleToidXBkYXRlTWV0YSIsdmFsdWU6ZnVuY3Rpb24oYSl7cnUodGhpcy5tZXRhLGEpLG9MKHRoaXMubWV0YSxhLGEpfX1dKSxsfSgpO2Z1bmN0aW9u'@;
put 'IGNrKGwpe3JldHVybihjaz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVj'@;
put 'dG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIGZoZShsKXtyZXR1cm4gZnVuY3Rpb24gbWF0KGwpe2lmKEFycmF5LmlzQXJyYXkobCkpcmV0dXJuIGokKGwpfShsKXx8ZnVuY3Rpb24gcGF0KGwpe2lmKHR5cGVvZiBTeW1i'@;
put 'b2w8InUiJiZudWxsIT1sW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWxbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbShsKX0obCl8fGZ1bmN0aW9uIGhhdChsLGMpe2lmKGwpe2lmKCJzdHJpbmciPT10eXBlb2YgbClyZXR1cm4gaiQobCxjKTt2YXIgYT1PYmplY3QucHJvdG90eXBl'@;
put 'LnRvU3RyaW5nLmNhbGwobCkuc2xpY2UoOCwtMSk7aWYoIk9iamVjdCI9PT1hJiZsLmNvbnN0cnVjdG9yJiYoYT1sLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09YXx8IlNldCI9PT1hKXJldHVybiBBcnJheS5mcm9tKGwpO2lmKCJBcmd1bWVudHMiPT09YXx8L14oPzpVaXxJKW50KD86OHwx'@;
put 'NnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QoYSkpcmV0dXJuIGokKGwsYyl9fShsKXx8ZnVuY3Rpb24gZGF0KCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwg'@;
put 'bm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gaiQobCxjKXsobnVsbD09Y3x8Yz5sLmxlbmd0aCkmJihjPWwubGVuZ3RoKTtmb3IodmFyIGE9MCxmPW5ldyBBcnJheShjKTthPGM7YSsrKWZbYV09bFthXTtyZXR1'@;
put 'cm4gZn1mdW5jdGlvbiBkaGUobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLHlh'@;
put 'dChmLmtleSksZil9fWZ1bmN0aW9uIHlhdChsKXt2YXIgYz1mdW5jdGlvbiBiYXQobCxjKXtpZigib2JqZWN0IiE9PWNrKGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtp'@;
put 'Zigib2JqZWN0IiE9PWNrKGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1j'@;
put 'ayhjKT9jOlN0cmluZyhjKX12YXIgeiQ9ZnVuY3Rpb24obCl7ZnVuY3Rpb24gYyhhKXsoZnVuY3Rpb24gZ2F0KGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLGMpLHRoaXMudmFs'@;
put 'dWVGYWN0b3J5PWEsdGhpcy5kYXRhPVtdLHRoaXMuaW5kZXg9W10sdGhpcy5ob2xlcz1uZXcgU2V0fXJldHVybiBmdW5jdGlvbiB2YXQobCxjLGEpe2MmJmRoZShsLnByb3RvdHlwZSxjKSxhJiZkaGUobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6'@;
put 'ITF9KX0oYyxbe2tleToib2J0YWluIix2YWx1ZTpmdW5jdGlvbihmKXtsTChmdW5jdGlvbigpe3JldHVybiBhTChmKX0sIkV4cGVjdGluZyBhbiB1bnNpZ25lZCBudW1iZXIuIik7dmFyIGgsZD10aGlzLl9nZXRTdG9yYWdlSW5kZXhCeUtleShmKTtpZihkPj0wKXZvaWQgMD09PShoPXRoaXMu'@;
put 'ZGF0YVtkXSkmJihoPXRoaXMudmFsdWVGYWN0b3J5KGYpLHRoaXMuZGF0YVtkXT1oKTtlbHNlIGlmKGg9dGhpcy52YWx1ZUZhY3RvcnkoZiksdGhpcy5ob2xlcy5zaXplPjApe3ZhciBtPXRoaXMuaG9sZXMudmFsdWVzKCkubmV4dCgpLnZhbHVlO3RoaXMuaG9sZXMuZGVsZXRlKG0pLHRoaXMu'@;
put 'ZGF0YVttXT1oLHRoaXMuaW5kZXhbZl09bX1lbHNlIHRoaXMuZGF0YS5wdXNoKGgpLHRoaXMuaW5kZXhbZl09dGhpcy5kYXRhLmxlbmd0aC0xO3JldHVybiBofX0se2tleToiaW5zZXJ0Iix2YWx1ZTpmdW5jdGlvbihmKXt2YXIgZD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3Vt'@;
put 'ZW50c1sxXT9hcmd1bWVudHNbMV06MTtsTChmdW5jdGlvbigpe3JldHVybiBhTChmKXx8c0woZil9LCJFeHBlY3RpbmcgYW4gdW5zaWduZWQgbnVtYmVyIG9yIG51bGwvdW5kZWZpbmVkIGFyZ3VtZW50LiIpO2Zvcih2YXIgaD1bXSxtPXRoaXMuZGF0YS5sZW5ndGgsXz0wO188ZDtfKyspaC5w'@;
put 'dXNoKG0rXyksdGhpcy5kYXRhLnB1c2godm9pZCAwKTt2YXIgTz1zTChmKT90aGlzLmluZGV4Lmxlbmd0aDpmO3RoaXMuaW5kZXg9W10uY29uY2F0KGZoZSh0aGlzLmluZGV4LnNsaWNlKDAsTykpLGgsZmhlKHRoaXMuaW5kZXguc2xpY2UoTykpKX19LHtrZXk6InJlbW92ZSIsdmFsdWU6ZnVu'@;
put 'Y3Rpb24oZil7dmFyIGQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjE7bEwoZnVuY3Rpb24oKXtyZXR1cm4gYUwoZil8fHNMKGYpfSwiRXhwZWN0aW5nIGFuIHVuc2lnbmVkIG51bWJlciBvciBudWxsL3VuZGVmaW5lZCBhcmd1bWVudC4i'@;
put 'KTtmb3IodmFyIGg9dGhpcy5pbmRleC5zcGxpY2Uoc0woZik/dGhpcy5pbmRleC5sZW5ndGgtZDpmLGQpLG09MDttPGgubGVuZ3RoO20rKyl7dmFyIF89aFttXTsibnVtYmVyIj09dHlwZW9mIF8mJnRoaXMuaG9sZXMuYWRkKF8pfX19LHtrZXk6InNpemUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIHRoaXMuZGF0YS5sZW5ndGgtdGhpcy5ob2xlcy5zaXplfX0se2tleToidmFsdWVzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBmPXRoaXM7cmV0dXJuIEQxKHRoaXMuZGF0YSxmdW5jdGlvbihkLGgpe3JldHVybiFmLmhvbGVzLmhhcyhoKX0pW1N5bWJvbC5pdGVyYXRvcl0oKX19LHtrZXk6'@;
put 'ImVudHJpZXMiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBmPVtdLGQ9MDtkPHRoaXMuZGF0YS5sZW5ndGg7ZCsrKXt2YXIgaD10aGlzLl9nZXRLZXlCeVN0b3JhZ2VJbmRleChkKTstMSE9PWgmJmYucHVzaChbaCx0aGlzLmRhdGFbZF1dKX12YXIgbT0wO3JldHVybntuZXh0OmZ1bmN0aW9u'@;
put 'KCl7aWYobTxmLmxlbmd0aCl7dmFyIE89ZlttXTtyZXR1cm4gbSs9MSx7dmFsdWU6Tyxkb25lOiExfX1yZXR1cm57ZG9uZTohMH19fX19LHtrZXk6ImNsZWFyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZGF0YT1bXSx0aGlzLmluZGV4PVtdLHRoaXMuaG9sZXMuY2xlYXIoKX19LHtrZXk6Il9n'@;
put 'ZXRTdG9yYWdlSW5kZXhCeUtleSIsdmFsdWU6ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMuaW5kZXgubGVuZ3RoPmY/dGhpcy5pbmRleFtmXTotMX19LHtrZXk6Il9nZXRLZXlCeVN0b3JhZ2VJbmRleCIsdmFsdWU6ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMuaW5kZXguaW5kZXhPZihmKX19LHtr'@;
put 'ZXk6U3ltYm9sLml0ZXJhdG9yLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW50cmllcygpfX1dKSxjfSgpO2Z1bmN0aW9uIGZrKGwpe3JldHVybihmaz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXty'@;
put 'ZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIGhoZShsLGMpe2Zvcih2YXIgYT0wO2E8'@;
put 'Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsQ2F0KGYua2V5KSxmKX19ZnVuY3Rpb24gQ2F0KGwpe3ZhciBjPWZ1'@;
put 'bmN0aW9uIFNhdChsLGMpe2lmKCJvYmplY3QiIT09ZmsobCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09ZmsoZikpcmV0dXJuIGY7dGhyb3cgbmV3'@;
put 'IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PWZrKGMpP2M6U3RyaW5nKGMpfXZhciBNYXQ9WyJkYXRhIiwid2lk'@;
put 'dGgiXSxrYXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKGMpe3ZhciBhPXRoaXM7KGZ1bmN0aW9uIF9hdChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyxsKSx0aGlzLmdsb2JhbE1l'@;
put 'dGE9Yyx0aGlzLm1ldGFzPW5ldyB6JChmdW5jdGlvbigpe3JldHVybiBhLl9jcmVhdGVNZXRhKCl9KX1yZXR1cm4gZnVuY3Rpb24gd2F0KGwsYyxhKXtjJiZoaGUobC5wcm90b3R5cGUsYyksYSYmaGhlKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxl'@;
put 'OiExfSl9KGwsW3trZXk6InVwZGF0ZU1ldGEiLHZhbHVlOmZ1bmN0aW9uKGEsZil7dmFyIGQ9dGhpcy5nZXRNZXRhKGEpO3J1KGQsZiksb0woZCxmKX19LHtrZXk6ImNyZWF0ZUNvbHVtbiIsdmFsdWU6ZnVuY3Rpb24oYSxmKXt0aGlzLm1ldGFzLmluc2VydChhLGYpfX0se2tleToicmVtb3Zl'@;
put 'Q29sdW1uIix2YWx1ZTpmdW5jdGlvbihhLGYpe3RoaXMubWV0YXMucmVtb3ZlKGEsZil9fSx7a2V5OiJnZXRNZXRhIix2YWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5tZXRhcy5vYnRhaW4oYSl9fSx7a2V5OiJnZXRNZXRhQ29uc3RydWN0b3IiLHZhbHVlOmZ1bmN0aW9uKGEpe3JldHVy'@;
put 'biB0aGlzLm1ldGFzLm9idGFpbihhKS5jb25zdHJ1Y3Rvcn19LHtrZXk6ImNsZWFyQ2FjaGUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5tZXRhcy5jbGVhcigpfX0se2tleToiX2NyZWF0ZU1ldGEiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIG5hdChsKXt2YXIgYz1hcmd1bWVu'@;
put 'dHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W107ZnVuY3Rpb24gYSgpe31mMyhhLGwpO2Zvcih2YXIgZj0wO2Y8Yy5sZW5ndGg7ZisrKWEucHJvdG90eXBlW2NbZl1dPXZvaWQgMDtyZXR1cm4gYX0odGhpcy5nbG9iYWxNZXRhLmdldE1ldGFDb25zdHJ1'@;
put 'Y3RvcigpLE1hdCkucHJvdG90eXBlfX1dKSxsfSgpO2Z1bmN0aW9uIGRrKGwpe3JldHVybihkaz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBj'@;
put 'JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIEVhdChsKXtyZXR1cm4gZnVuY3Rpb24gT2F0KGwpe2lmKEFycmF5LmlzQXJyYXkobCkpcmV0dXJuIFUk'@;
put 'KGwpfShsKXx8ZnVuY3Rpb24gVGF0KGwpe2lmKHR5cGVvZiBTeW1ib2w8InUiJiZudWxsIT1sW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWxbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbShsKX0obCl8fGZ1bmN0aW9uIEFhdChsLGMpe2lmKGwpe2lmKCJzdHJpbmciPT10eXBlb2Yg'@;
put 'bClyZXR1cm4gVSQobCxjKTt2YXIgYT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobCkuc2xpY2UoOCwtMSk7aWYoIk9iamVjdCI9PT1hJiZsLmNvbnN0cnVjdG9yJiYoYT1sLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09YXx8IlNldCI9PT1hKXJldHVybiBBcnJheS5mcm9tKGwp'@;
put 'O2lmKCJBcmd1bWVudHMiPT09YXx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QoYSkpcmV0dXJuIFUkKGwsYyl9fShsKXx8ZnVuY3Rpb24geGF0KCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFi'@;
put 'bGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gVSQobCxjKXsobnVsbD09Y3x8Yz5sLmxlbmd0aCkmJihjPWwubGVuZ3RoKTtmb3IodmFyIGE9'@;
put 'MCxmPW5ldyBBcnJheShjKTthPGM7YSsrKWZbYV09bFthXTtyZXR1cm4gZn1mdW5jdGlvbiBwaGUobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYu'@;
put 'd3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLFJhdChmLmtleSksZil9fWZ1bmN0aW9uIFJhdChsKXt2YXIgYz1mdW5jdGlvbiBMYXQobCxjKXtpZigib2JqZWN0IiE9PWRrKGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9p'@;
put 'ZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PWRrKGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVt'@;
put 'YmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1kayhjKT9jOlN0cmluZyhjKX12YXIgUGF0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbChjKXt2YXIgYT10aGlzOyhmdW5jdGlvbiBEYXQobCxjKXtpZighKGwgaW5zdGFuY2VvZiBjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5u'@;
put 'b3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsbCksdGhpcy5jb2x1bW5NZXRhPWMsdGhpcy5tZXRhcz1uZXcgeiQoZnVuY3Rpb24oKXtyZXR1cm4gYS5fY3JlYXRlUm93KCl9KX1yZXR1cm4gZnVuY3Rpb24gSWF0KGwsYyxhKXtjJiZwaGUobC5wcm90b3R5cGUsYyksYSYm'@;
put 'cGhlKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGwsW3trZXk6InVwZGF0ZU1ldGEiLHZhbHVlOmZ1bmN0aW9uKGEsZixkKXt2YXIgaD10aGlzLmdldE1ldGEoYSxmKTtydShoLGQpLG9MKGgsZCl9fSx7a2V5OiJjcmVhdGVSb3ciLHZh'@;
put 'bHVlOmZ1bmN0aW9uKGEsZil7dGhpcy5tZXRhcy5pbnNlcnQoYSxmKX19LHtrZXk6ImNyZWF0ZUNvbHVtbiIsdmFsdWU6ZnVuY3Rpb24oYSxmKXtmb3IodmFyIGQ9MDtkPHRoaXMubWV0YXMuc2l6ZSgpO2QrKyl0aGlzLm1ldGFzLm9idGFpbihkKS5pbnNlcnQoYSxmKX19LHtrZXk6InJlbW92'@;
put 'ZVJvdyIsdmFsdWU6ZnVuY3Rpb24oYSxmKXt0aGlzLm1ldGFzLnJlbW92ZShhLGYpfX0se2tleToicmVtb3ZlQ29sdW1uIix2YWx1ZTpmdW5jdGlvbihhLGYpe2Zvcih2YXIgZD0wO2Q8dGhpcy5tZXRhcy5zaXplKCk7ZCsrKXRoaXMubWV0YXMub2J0YWluKGQpLnJlbW92ZShhLGYpfX0se2tl'@;
put 'eToiZ2V0TWV0YSIsdmFsdWU6ZnVuY3Rpb24oYSxmLGQpe3ZhciBoPXRoaXMubWV0YXMub2J0YWluKGEpLm9idGFpbihmKTtyZXR1cm4gdm9pZCAwPT09ZD9oOmhbZF19fSx7a2V5OiJzZXRNZXRhIix2YWx1ZTpmdW5jdGlvbihhLGYsZCxoKXt2YXIgbSxfPXRoaXMubWV0YXMub2J0YWluKGEp'@;
put 'Lm9idGFpbihmKTtudWxsPT09KG09Xy5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzKXx8dm9pZCAwPT09bXx8bS5kZWxldGUoZCksX1tkXT1ofX0se2tleToicmVtb3ZlTWV0YSIsdmFsdWU6ZnVuY3Rpb24oYSxmLGQpe2RlbGV0ZSB0aGlzLm1ldGFzLm9idGFpbihhKS5vYnRhaW4o'@;
put 'ZilbZF19fSx7a2V5OiJnZXRNZXRhcyIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGE9W10sZj1BcnJheS5mcm9tKHRoaXMubWV0YXMudmFsdWVzKCkpLGQ9MDtkPGYubGVuZ3RoO2QrKylhLnB1c2guYXBwbHkoYSxFYXQoZltkXS52YWx1ZXMoKSkpO3JldHVybiBhfX0se2tleToiZ2V0TWV0'@;
put 'YXNBdFJvdyIsdmFsdWU6ZnVuY3Rpb24oYSl7bEwoZnVuY3Rpb24oKXtyZXR1cm4gYUwoYSl9LCJFeHBlY3RpbmcgYW4gdW5zaWduZWQgbnVtYmVyLiIpO3ZhciBmPW5ldyBNYXAodGhpcy5tZXRhcyk7cmV0dXJuIGYuaGFzKGEpP0FycmF5LmZyb20oZi5nZXQoYSkudmFsdWVzKCkpOltdfX0s'@;
put 'e2tleToiY2xlYXJDYWNoZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLm1ldGFzLmNsZWFyKCl9fSx7a2V5OiJfY3JlYXRlUm93Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXM7cmV0dXJuIG5ldyB6JChmdW5jdGlvbihmKXtyZXR1cm4gYS5fY3JlYXRlTWV0YShmKX0pfX0se2tleToiX2Ny'@;
put 'ZWF0ZU1ldGEiLHZhbHVlOmZ1bmN0aW9uKGEpe3JldHVybiBuZXcodGhpcy5jb2x1bW5NZXRhLmdldE1ldGFDb25zdHJ1Y3RvcihhKSl9fV0pLGx9KCk7ZnVuY3Rpb24gaGsobCl7cmV0dXJuKGhrPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0'@;
put 'ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gbWhl'@;
put 'KGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxOYXQoZi5rZXkpLGYpfX1mdW5j'@;
put 'dGlvbiBOYXQobCl7dmFyIGM9ZnVuY3Rpb24gVmF0KGwsYyl7aWYoIm9iamVjdCIhPT1oayhsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1oayhm'@;
put 'KSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09aGsoYyk/YzpTdHJpbmcoYyl9'@;
put 'dmFyIGdoZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGwoYyl7dmFyIGE9dGhpcyxmPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpbXTso'@;
put 'ZnVuY3Rpb24gRmF0KGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLGwpLHRoaXMuaG90PWMsdGhpcy5nbG9iYWxNZXRhPW5ldyBhYXQoYyksdGhpcy50YWJsZU1ldGE9bmV3IGZh'@;
put 'dCh0aGlzLmdsb2JhbE1ldGEpLHRoaXMuY29sdW1uTWV0YT1uZXcga2F0KHRoaXMuZ2xvYmFsTWV0YSksdGhpcy5jZWxsTWV0YT1uZXcgUGF0KHRoaXMuY29sdW1uTWV0YSksZC5mb3JFYWNoKGZ1bmN0aW9uKGgpe3JldHVybiBuZXcgaChhKX0pLHRoaXMuZ2xvYmFsTWV0YS51cGRhdGVNZXRh'@;
put 'KGYpfXJldHVybiBmdW5jdGlvbiBIYXQobCxjLGEpe2MmJm1oZShsLnByb3RvdHlwZSxjKSxhJiZtaGUobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0obCxbe2tleToiZ2V0R2xvYmFsTWV0YSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4g'@;
put 'dGhpcy5nbG9iYWxNZXRhLmdldE1ldGEoKX19LHtrZXk6InVwZGF0ZUdsb2JhbE1ldGEiLHZhbHVlOmZ1bmN0aW9uKGEpe3RoaXMuZ2xvYmFsTWV0YS51cGRhdGVNZXRhKGEpfX0se2tleToiZ2V0VGFibGVNZXRhIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRhYmxlTWV0YS5nZXRN'@;
put 'ZXRhKCl9fSx7a2V5OiJ1cGRhdGVUYWJsZU1ldGEiLHZhbHVlOmZ1bmN0aW9uKGEpe3RoaXMudGFibGVNZXRhLnVwZGF0ZU1ldGEoYSl9fSx7a2V5OiJnZXRDb2x1bW5NZXRhIix2YWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5jb2x1bW5NZXRhLmdldE1ldGEoYSl9fSx7a2V5OiJ1cGRh'@;
put 'dGVDb2x1bW5NZXRhIix2YWx1ZTpmdW5jdGlvbihhLGYpe3RoaXMuY29sdW1uTWV0YS51cGRhdGVNZXRhKGEsZil9fSx7a2V5OiJnZXRDZWxsTWV0YSIsdmFsdWU6ZnVuY3Rpb24oYSxmLGQpe3ZhciBoPWQudmlzdWFsUm93LG09ZC52aXN1YWxDb2x1bW4sXz10aGlzLmNlbGxNZXRhLmdldE1l'@;
put 'dGEoYSxmKTtyZXR1cm4gXy52aXN1YWxSb3c9aCxfLnZpc3VhbENvbD1tLF8ucm93PWEsXy5jb2w9Zix0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyR2V0Q2VsbE1ldGEiLF8pLF99fSx7a2V5OiJnZXRDZWxsTWV0YUtleVZhbHVlIix2YWx1ZTpmdW5jdGlvbihhLGYsZCl7aWYoInN0cmluZyIh'@;
put 'PXR5cGVvZiBkKXRocm93IG5ldyBFcnJvcigiVGhlIHBhc3NlZCBjZWxsIG1ldGEgb2JqZWN0IGtleSBpcyBub3QgYSBzdHJpbmciKTtyZXR1cm4gdGhpcy5jZWxsTWV0YS5nZXRNZXRhKGEsZixkKX19LHtrZXk6InNldENlbGxNZXRhIix2YWx1ZTpmdW5jdGlvbihhLGYsZCxoKXt0aGlzLmNl'@;
put 'bGxNZXRhLnNldE1ldGEoYSxmLGQsaCl9fSx7a2V5OiJ1cGRhdGVDZWxsTWV0YSIsdmFsdWU6ZnVuY3Rpb24oYSxmLGQpe3RoaXMuY2VsbE1ldGEudXBkYXRlTWV0YShhLGYsZCl9fSx7a2V5OiJyZW1vdmVDZWxsTWV0YSIsdmFsdWU6ZnVuY3Rpb24oYSxmLGQpe3RoaXMuY2VsbE1ldGEucmVt'@;
put 'b3ZlTWV0YShhLGYsZCl9fSx7a2V5OiJnZXRDZWxsc01ldGEiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2VsbE1ldGEuZ2V0TWV0YXMoKX19LHtrZXk6ImdldENlbGxzTWV0YUF0Um93Iix2YWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5jZWxsTWV0YS5nZXRNZXRhc0F0Um93'@;
put 'KGEpfX0se2tleToiY3JlYXRlUm93Iix2YWx1ZTpmdW5jdGlvbihhKXt0aGlzLmNlbGxNZXRhLmNyZWF0ZVJvdyhhLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxKX19LHtrZXk6InJlbW92ZVJvdyIsdmFsdWU6ZnVuY3Rpb24oYSl7dGhp'@;
put 'cy5jZWxsTWV0YS5yZW1vdmVSb3coYSxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSl9fSx7a2V5OiJjcmVhdGVDb2x1bW4iLHZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBmPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRz'@;
put 'WzFdP2FyZ3VtZW50c1sxXToxO3RoaXMuY2VsbE1ldGEuY3JlYXRlQ29sdW1uKGEsZiksdGhpcy5jb2x1bW5NZXRhLmNyZWF0ZUNvbHVtbihhLGYpfX0se2tleToicmVtb3ZlQ29sdW1uIix2YWx1ZTpmdW5jdGlvbihhKXt2YXIgZj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3Vt'@;
put 'ZW50c1sxXT9hcmd1bWVudHNbMV06MTt0aGlzLmNlbGxNZXRhLnJlbW92ZUNvbHVtbihhLGYpLHRoaXMuY29sdW1uTWV0YS5yZW1vdmVDb2x1bW4oYSxmKX19LHtrZXk6ImNsZWFyQ2VsbHNDYWNoZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNlbGxNZXRhLmNsZWFyQ2FjaGUoKX19LHtrZXk6'@;
put 'ImNsZWFyQ2FjaGUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jZWxsTWV0YS5jbGVhckNhY2hlKCksdGhpcy5jb2x1bW5NZXRhLmNsZWFyQ2FjaGUoKX19XSksbH0oKTtmdW5jdGlvbiBwayhsKXtyZXR1cm4ocGs9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBT'@;
put 'eW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5j'@;
put 'dGlvbiB2aGUobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLHphdChmLmtleSks'@;
put 'Zil9fWZ1bmN0aW9uIHphdChsKXt2YXIgYz1mdW5jdGlvbiBVYXQobCxjKXtpZigib2JqZWN0IiE9PXBrKGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0'@;
put 'IiE9PXBrKGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1wayhjKT9jOlN0'@;
put 'cmluZyhjKX1UbChnaGUsVzApO3ZhciBaYXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKGMpe3ZhciBhPXRoaXM7KGZ1bmN0aW9uIEJhdChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhp'@;
put 'cyxsKSx0aGlzLm1ldGFNYW5hZ2VyPWMsdGhpcy5tZXRhU3luY01lbW89bmV3IE1hcCxjLmFkZExvY2FsSG9vaygiYWZ0ZXJHZXRDZWxsTWV0YSIsZnVuY3Rpb24oZil7cmV0dXJuIGEuZXh0ZW5kQ2VsbE1ldGEoZil9KSx1by5nZXRTaW5nbGV0b24oKS5hZGQoImJlZm9yZVJlbmRlciIsZnVu'@;
put 'Y3Rpb24oZil7ZiYmYS5tZXRhU3luY01lbW8uY2xlYXIoKX0sdGhpcy5tZXRhTWFuYWdlci5ob3QpfXJldHVybiBmdW5jdGlvbiBqYXQobCxjLGEpe2MmJnZoZShsLnByb3RvdHlwZSxjKSxhJiZ2aGUobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6'@;
put 'ITF9KX0obCxbe2tleToiZXh0ZW5kQ2VsbE1ldGEiLHZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBmLGQ9YS5yb3csaD1hLmNvbDtpZihudWxsPT09KGY9dGhpcy5tZXRhU3luY01lbW8uZ2V0KGQpKXx8dm9pZCAwPT09Znx8IWYuaGFzKGgpKXt2YXIgbT1hLnZpc3VhbFJvdyxfPWEudmlzdWFsQ29s'@;
put 'LE89dGhpcy5tZXRhTWFuYWdlci5ob3QsWD1PLmNvbFRvUHJvcChfKTthLnByb3A9WCxPLnJ1bkhvb2tzKCJiZWZvcmVHZXRDZWxsTWV0YSIsbSxfLGEpO3ZhciBhZT1TcyhhLCJ0eXBlIik/YS50eXBlOm51bGwscGU9UGwoYS5jZWxscyk/YS5jZWxscyhkLGgsWCk6bnVsbDtpZihhZSlpZihw'@;
put 'ZSl7dmFyIGJlO3BlLnR5cGU9bnVsbCE9PShiZT1wZS50eXBlKSYmdm9pZCAwIT09YmU/YmU6YWV9ZWxzZSBwZT17dHlwZTphZX07cGUmJnRoaXMubWV0YU1hbmFnZXIudXBkYXRlQ2VsbE1ldGEoZCxoLHBlKSxPLnJ1bkhvb2tzKCJhZnRlckdldENlbGxNZXRhIixtLF8sYSksdGhpcy5tZXRh'@;
put 'U3luY01lbW8uaGFzKGQpfHx0aGlzLm1ldGFTeW5jTWVtby5zZXQoZCxuZXcgU2V0KSx0aGlzLm1ldGFTeW5jTWVtby5nZXQoZCkuYWRkKGgpfX19XSksbH0oKTtmdW5jdGlvbiBtayhsKXtyZXR1cm4obWs9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1i'@;
put 'b2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlv'@;
put 'biB5aGUobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLEdhdChmLmtleSksZil9'@;
put 'fWZ1bmN0aW9uIEdhdChsKXt2YXIgYz1mdW5jdGlvbiAkYXQobCxjKXtpZigib2JqZWN0IiE9PW1rKGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9'@;
put 'PW1rKGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1tayhjKT9jOlN0cmlu'@;
put 'ZyhjKX12YXIgS2F0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbChjKXsoZnVuY3Rpb24gWWF0KGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLGwpLHRoaXMubWV0YU1hbmFnZXI9Yyx0'@;
put 'aGlzLnVzYWdlVHJhY2tlcj1uZXcgU2V0LHRoaXMucHJvcERlc2NyaXB0b3JzPW5ldyBNYXAoW1siZml4ZWRDb2x1bW5zTGVmdCIse3RhcmdldDoiZml4ZWRDb2x1bW5zU3RhcnQiLG9uQ2hhbmdlOmZ1bmN0aW9uKGYpe2lmKHRoaXMubWV0YU1hbmFnZXIuaG90LmlzUnRsKCkmJiJmaXhlZENv'@;
put 'bHVtbnNMZWZ0Ij09PWYpdGhyb3cgbmV3IEVycm9yKCJUaGUgYGZpeGVkQ29sdW1uc0xlZnRgIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIFJUTC4gUGxlYXNlIHVzZSBvcHRpb24gYGZpeGVkQ29sdW1uc1N0YXJ0YC4iKTtpZih0aGlzLnVzYWdlVHJhY2tlci5oYXMoImZpeGVkQ29sdW1uc0xlZnQi'@;
put 'KSYmdGhpcy51c2FnZVRyYWNrZXIuaGFzKCJmaXhlZENvbHVtbnNTdGFydCIpKXRocm93IG5ldyBFcnJvcigiVGhlIGBmaXhlZENvbHVtbnNMZWZ0YCBhbmQgYGZpeGVkQ29sdW1uc1N0YXJ0YCBzaG91bGQgbm90IGJlIHVzZWQgdG9nZXRoZXIuIFBsZWFzZSB1c2Ugb25seSB0aGUgb3B0aW9u'@;
put 'IGBmaXhlZENvbHVtbnNTdGFydGAuIil9fV0sWyJsYXlvdXREaXJlY3Rpb24iLHtvbkNoYW5nZTpmdW5jdGlvbihmLGQsaCl7aWYoIWgpdGhyb3cgbmV3IEVycm9yKCJUaGUgYCIuY29uY2F0KGYsImAgb3B0aW9uIGNhbiBub3QgYmUgdXBkYXRlZCBhZnRlciB0aGUgSGFuZHNvbnRhYmxlIGlz'@;
put 'IGluaXRpYWxpemVkLiIpKX19XV0pLHRoaXMuZXh0ZW5kTWV0YVByb3BzKCl9cmV0dXJuIGZ1bmN0aW9uIFdhdChsLGMsYSl7YyYmeWhlKGwucHJvdG90eXBlLGMpLGEmJnloZShsLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShsLFt7a2V5'@;
put 'OiJleHRlbmRNZXRhUHJvcHMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpczt0aGlzLnByb3BEZXNjcmlwdG9ycy5mb3JFYWNoKGZ1bmN0aW9uKGYsZCl7dmFyIGg9Zi50YXJnZXQsbT1mLm9uQ2hhbmdlLF89dm9pZCAwPT09bT9mdW5jdGlvbigpe306bSxPPSJzdHJpbmciPT10eXBlb2Yg'@;
put 'aCxYPU8/aDpkLGFlPSJfIi5jb25jYXQoWCk7YS5tZXRhTWFuYWdlci5nbG9iYWxNZXRhLm1ldGFbYWVdPWEubWV0YU1hbmFnZXIuZ2xvYmFsTWV0YS5tZXRhW1hdLGEuaW5zdGFsbFByb3BXYXRjaGVyKGQsYWUsXyksTyYmYS5pbnN0YWxsUHJvcFdhdGNoZXIoaCxhZSxfKX0pfX0se2tleToi'@;
put 'aW5zdGFsbFByb3BXYXRjaGVyIix2YWx1ZTpmdW5jdGlvbihhLGYsZCl7dmFyIGg9dGhpcztPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5tZXRhTWFuYWdlci5nbG9iYWxNZXRhLm1ldGEsYSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbZl19LHNldDpmdW5jdGlvbihfKXt2YXIgTz0h'@;
put 'aC51c2FnZVRyYWNrZXIuaGFzKGEpO2gudXNhZ2VUcmFja2VyLmFkZChhKSxkLmNhbGwoaCxhLF8sTyksdGhpc1tmXT1ffSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pfX1dKSxsfSgpLGJoZT0oVCg4NTczNSksL14oXHJcbnxcblxyfFxyfFxuKS8pLHFhdD0vXlteXHRcclxuXSsv'@;
put 'LF9oZT0vXlx0LztmdW5jdGlvbiBnayhsKXt2YXIgYyxhLGYsZCxtLGg9IiI7Zm9yKGM9MCxhPWwubGVuZ3RoO2M8YTtjKz0xKXtmb3IoZD1sW2NdLmxlbmd0aCxmPTA7ZjxkO2YrPTEpZj4wJiYoaCs9Ilx0IiksInN0cmluZyI9PXR5cGVvZihtPWxbY11bZl0pP20uaW5kZXhPZigiXG4iKT4t'@;
put 'MT9oKz0nIicuY29uY2F0KG0ucmVwbGFjZSgvIi9nLCciIicpLCciJyk6aCs9bTpoKz1udWxsPT1tPyIiOm07YyE9PWEtMSYmKGgrPSJcbiIpfXJldHVybiBofWZ1bmN0aW9uIFokKGwpe3JldHVybiBmdW5jdGlvbiB0bHQobCl7aWYoQXJyYXkuaXNBcnJheShsKSlyZXR1cm4gWSQobCl9KGwp'@;
put 'fHxmdW5jdGlvbiBlbHQobCl7aWYodHlwZW9mIFN5bWJvbDwidSImJm51bGwhPWxbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9bFsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKGwpfShsKXx8ZnVuY3Rpb24gUWF0KGwsYyl7aWYobCl7aWYoInN0cmluZyI9PXR5cGVvZiBsKXJldHVy'@;
put 'biBZJChsLGMpO3ZhciBhPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsKS5zbGljZSg4LC0xKTtpZigiT2JqZWN0Ij09PWEmJmwuY29uc3RydWN0b3ImJihhPWwuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1hfHwiU2V0Ij09PWEpcmV0dXJuIEFycmF5LmZyb20obCk7aWYoIkFy'@;
put 'Z3VtZW50cyI9PT1hfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChhKSlyZXR1cm4gWSQobCxjKX19KGwpfHxmdW5jdGlvbiBKYXQoKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0'@;
put 'YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBZJChsLGMpeyhudWxsPT1jfHxjPmwubGVuZ3RoKSYmKGM9bC5sZW5ndGgpO2Zvcih2YXIgYT0wLGY9bmV3'@;
put 'IEFycmF5KGMpO2E8YzthKyspZlthXT1sW2FdO3JldHVybiBmfWZ1bmN0aW9uIGs5KGwpe3JldHVybihrOT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3Jl'@;
put 'dHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIHdoZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51'@;
put 'bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsaWx0KGYua2V5KSxmKX19ZnVuY3Rpb24gaWx0KGwpe3ZhciBjPWZ1bmN0aW9uIG9sdChsLGMpe2lmKCJvYmplY3QiIT09'@;
put 'azkobCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09azkoZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0'@;
put 'IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PWs5KGMpP2M6U3RyaW5nKGMpfXZhciBhbHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKGMsYSxmKXsoZnVuY3Rpb24gbmx0'@;
put 'KGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLGwpLHRoaXMuaW5zdGFuY2U9Yyx0aGlzLm1ldGFNYW5hZ2VyPWYsdGhpcy50YWJsZU1ldGE9Zi5nZXRUYWJsZU1ldGEoKSx0aGlz'@;
put 'LmRhdGFTb3VyY2U9YSx0aGlzLmR1Y2tTY2hlbWE9dGhpcy5jcmVhdGVEdWNrU2NoZW1hKCksdGhpcy5jb2xUb1Byb3BDYWNoZT12b2lkIDAsdGhpcy5wcm9wVG9Db2xDYWNoZT12b2lkIDAsdGhpcy5jcmVhdGVNYXAoKX1yZXR1cm4gZnVuY3Rpb24gcmx0KGwsYyxhKXtjJiZ3aGUobC5wcm90'@;
put 'b3R5cGUsYyksYSYmd2hlKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGwsW3trZXk6ImNyZWF0ZU1hcCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldFNjaGVtYSgpO2lmKHR5cGVvZiBhPiJ1Iil0aHJvdyBuZXcgRXJyb3Io'@;
put 'InRyeWluZyB0byBjcmVhdGUgYGNvbHVtbnNgIGRlZmluaXRpb24gYnV0IHlvdSBkaWRuJ3QgcHJvdmlkZSBgc2NoZW1hYCBub3IgYGRhdGFgIik7dmFyIGQsZj10aGlzLnRhYmxlTWV0YS5jb2x1bW5zO2lmKHRoaXMuY29sVG9Qcm9wQ2FjaGU9W10sdGhpcy5wcm9wVG9Db2xDYWNoZT1uZXcg'@;
put 'TWFwLGYpe3ZhciBoPTAsbT0wLF89ITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGYpe3ZhciBPPVVJKGEpO2g9Tz4wP086dGhpcy5jb3VudEZpcnN0Um93S2V5cygpLF89ITB9ZWxzZSBoPU1hdGgubWluKHRoaXMudGFibGVNZXRhLm1heENvbHMsZi5sZW5ndGgpO2ZvcihkPTA7ZDxoO2QrKyl7'@;
put 'dmFyIGFlPV8/ZihkKTpmW2RdO2lmKHBhKGFlKSl7aWYodHlwZW9mIGFlLmRhdGE8InUiKXt2YXIgcGU9Xz9tOmQ7dGhpcy5jb2xUb1Byb3BDYWNoZVtwZV09YWUuZGF0YSx0aGlzLnByb3BUb0NvbENhY2hlLnNldChhZS5kYXRhLHBlKX1tKz0xfX19ZWxzZSB0aGlzLnJlY3Vyc2l2ZUR1Y2tD'@;
put 'b2x1bW5zKGEpfX0se2tleToiY291bnRGaXJzdFJvd0tleXMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIEJXKHRoaXMuZGF0YVNvdXJjZSl9fSx7a2V5OiJyZWN1cnNpdmVEdWNrQ29sdW1ucyIsdmFsdWU6ZnVuY3Rpb24oYSxmLGQpe3ZhciBPLGg9dGhpcyxtPWYsXz1kO3JldHVybiB0eXBl'@;
put 'b2YgbT4idSImJihtPTAsXz0iIiksIm9iamVjdCI9PT1rOShhKSYmIUFycmF5LmlzQXJyYXkoYSkmJm1hKGEsZnVuY3Rpb24oWCxhZSl7bnVsbD09PVg/KGguY29sVG9Qcm9wQ2FjaGUucHVzaChPPV8rYWUpLGgucHJvcFRvQ29sQ2FjaGUuc2V0KE8sbSksbSs9MSk6bT1oLnJlY3Vyc2l2ZUR1'@;
put 'Y2tDb2x1bW5zKFgsbSwiIi5jb25jYXQoYWUsIi4iKSl9KSxtfX0se2tleToiY29sVG9Qcm9wIix2YWx1ZTpmdW5jdGlvbihhKXtpZighMT09PU51bWJlci5pc0ludGVnZXIoYSkpcmV0dXJuIGE7dmFyIGY9dGhpcy5pbnN0YW5jZS50b1BoeXNpY2FsQ29sdW1uKGEpO3JldHVybiBudWxsPT09'@;
put 'Zj9hOnRoaXMuY29sVG9Qcm9wQ2FjaGUmJmlvKHRoaXMuY29sVG9Qcm9wQ2FjaGVbZl0pP3RoaXMuY29sVG9Qcm9wQ2FjaGVbZl06Zn19LHtrZXk6InByb3BUb0NvbCIsdmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGY9dGhpcy5wcm9wVG9Db2xDYWNoZS5nZXQoYSk7aWYoaW8oZikpcmV0dXJuIHRo'@;
put 'aXMuaW5zdGFuY2UudG9WaXN1YWxDb2x1bW4oZik7dmFyIGQ9dGhpcy5pbnN0YW5jZS50b1Zpc3VhbENvbHVtbihhKTtyZXR1cm4gbnVsbD09PWQ/YTpkfX0se2tleToiZ2V0U2NoZW1hIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMudGFibGVNZXRhLmRhdGFTY2hlbWE7cmV0dXJuIGE/'@;
put 'ImZ1bmN0aW9uIj09dHlwZW9mIGE/YSgpOmE6dGhpcy5kdWNrU2NoZW1hfX0se2tleToiY3JlYXRlRHVja1NjaGVtYSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhU291cmNlJiZ0aGlzLmRhdGFTb3VyY2VbMF0/UDcodGhpcy5kYXRhU291cmNlWzBdKTp7fX19LHtrZXk6InJl'@;
put 'ZnJlc2hEdWNrU2NoZW1hIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZHVja1NjaGVtYT10aGlzLmNyZWF0ZUR1Y2tTY2hlbWEoKX19LHtrZXk6ImNyZWF0ZVJvdyIsdmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGY9dGhpcyxkPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFd'@;
put 'P2FyZ3VtZW50c1sxXToxLGg9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9LG09aC5zb3VyY2UsXz1oLm1vZGUsTz12b2lkIDA9PT1fPyJhYm92ZSI6XyxYPXRoaXMuaW5zdGFuY2UuY291bnRTb3VyY2VSb3dzKCksYWU9WCxwZT0wLGJl'@;
put 'PWE7aWYoKCJudW1iZXIiIT10eXBlb2YgYmV8fGJlPj1YKSYmKGJlPVgpLGJlPHRoaXMuaW5zdGFuY2UuY291bnRSb3dzKCkmJihhZT10aGlzLmluc3RhbmNlLnRvUGh5c2ljYWxSb3coYmUpKSwhMT09PXRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZUNyZWF0ZVJvdyIsYmUsZCxtKXx8'@;
put 'bnVsbD09PWFlKXJldHVybntkZWx0YTowfTtmb3IodmFyIFZlPXRoaXMudGFibGVNZXRhLm1heFJvd3MsWmU9dGhpcy5nZXRTY2hlbWEoKS5sZW5ndGgsbHQ9W10sZHQ9ZnVuY3Rpb24oKXt2YXIgcm49bnVsbDsiYXJyYXkiPT09Zi5pbnN0YW5jZS5kYXRhVHlwZT9mLnRhYmxlTWV0YS5kYXRh'@;
put 'U2NoZW1hP3JuPXhjKGYuZ2V0U2NoZW1hKCkpOihybj1bXSxfbyhaZS0xLGZ1bmN0aW9uKCl7cmV0dXJuIHJuLnB1c2gobnVsbCl9KSk6ImZ1bmN0aW9uIj09PWYuaW5zdGFuY2UuZGF0YVR5cGU/cm49Zi50YWJsZU1ldGEuZGF0YVNjaGVtYShiZStwZSk6SFMocm49e30sZi5nZXRTY2hlbWEo'@;
put 'KSksbHQucHVzaChybikscGUrPTF9O3BlPGQmJlgrcGU8VmU7KWR0KCk7dGhpcy5pbnN0YW5jZS5yb3dJbmRleE1hcHBlci5pbnNlcnRJbmRleGVzKGJlLHBlKSwiYmVsb3ciPT09TyYmKGFlPU1hdGgubWluKGFlKzEsWCkpLHRoaXMuc3BsaWNlRGF0YShhZSwwLGx0KTt2YXIgZ3Q9dGhpcy5p'@;
put 'bnN0YW5jZS50b1Zpc3VhbFJvdyhhZSk7cmV0dXJuIHRoaXMuaW5zdGFuY2UuY291bnRTb3VyY2VSb3dzKCk9PT1sdC5sZW5ndGgmJnRoaXMuaW5zdGFuY2UuY29sdW1uSW5kZXhNYXBwZXIuaW5pdFRvTGVuZ3RoKHRoaXMuaW5zdGFuY2UuZ2V0SW5pdGlhbENvbHVtbkNvdW50KCkpLHBlPjAm'@;
put 'JihudWxsPT1hP3RoaXMubWV0YU1hbmFnZXIuY3JlYXRlUm93KG51bGwscGUpOiJhdXRvIiE9PW0mJnRoaXMubWV0YU1hbmFnZXIuY3JlYXRlUm93KGFlLGQpKSx0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlckNyZWF0ZVJvdyIsZ3QscGUsbSksdGhpcy5pbnN0YW5jZS5mb3JjZUZ1bGxS'@;
put 'ZW5kZXI9ITAse2RlbHRhOnBlLHN0YXJ0UGh5c2ljYWxJbmRleDphZX19fSx7a2V5OiJjcmVhdGVDb2wiLHZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBmPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2'@;
put 'b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9LGg9ZC5zb3VyY2UsbT1kLm1vZGUsXz12b2lkIDA9PT1tPyJzdGFydCI6bTtpZighdGhpcy5pbnN0YW5jZS5pc0NvbHVtbk1vZGlmaWNhdGlvbkFsbG93ZWQoKSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjcmVhdGUgbmV3IGNv'@;
put 'bHVtbi4gV2hlbiBkYXRhIHNvdXJjZSBpbiBhbiBvYmplY3QsIHlvdSBjYW4gb25seSBoYXZlIGFzIG11Y2ggY29sdW1ucyBhcyBkZWZpbmVkIGluIGZpcnN0IGRhdGEgcm93LCBkYXRhIHNjaGVtYSBvciBpbiB0aGUgJ2NvbHVtbnMnIHNldHRpbmcuSWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0'@;
put 'byBhZGQgbmV3IGNvbHVtbnMsIHlvdSBoYXZlIHRvIHVzZSBhcnJheSBkYXRhc291cmNlLiIpO3ZhciBPPXRoaXMuZGF0YVNvdXJjZSxYPXRoaXMudGFibGVNZXRhLm1heENvbHMsYWU9dGhpcy5pbnN0YW5jZS5jb3VudFNvdXJjZUNvbHMoKSxwZT1hO2lmKCgibnVtYmVyIiE9dHlwZW9mIHBl'@;
put 'fHxwZT49YWUpJiYocGU9YWUpLCExPT09dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlQ3JlYXRlQ29sIixwZSxmLGgpKXJldHVybntkZWx0YTowfTt2YXIgeGU9YWU7cGU8dGhpcy5pbnN0YW5jZS5jb3VudENvbHMoKSYmKHhlPXRoaXMuaW5zdGFuY2UudG9QaHlzaWNhbENvbHVtbihw'@;
put 'ZSkpO3ZhciBWZT10aGlzLmluc3RhbmNlLmNvdW50U291cmNlUm93cygpLFplPXRoaXMuaW5zdGFuY2UuY291bnRDb2xzKCksbHQ9MCxkdD14ZTsiZW5kIj09PV8mJihkdD1NYXRoLm1pbihkdCsxLGFlKSk7Zm9yKHZhciBndD1kdDtsdDxmJiZaZTxYOyl7aWYoIm51bWJlciIhPXR5cGVvZiBw'@;
put 'ZXx8cGU+PVplKWlmKFZlPjApZm9yKHZhciBqdD0wO2p0PFZlO2p0Kz0xKXR5cGVvZiBPW2p0XT4idSImJihPW2p0XT1bXSksT1tqdF0ucHVzaChudWxsKTtlbHNlIE8ucHVzaChbbnVsbF0pO2Vsc2UgZm9yKHZhciBybj0wO3JuPFZlO3JuKyspT1tybl0uc3BsaWNlKGR0LDAsbnVsbCk7bHQr'@;
put 'PTEsZHQrPTEsWmUrPTF9dGhpcy5pbnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlci5pbnNlcnRJbmRleGVzKHBlLGx0KSxsdD4wJiYobnVsbD09YT90aGlzLm1ldGFNYW5hZ2VyLmNyZWF0ZUNvbHVtbihudWxsLGx0KToiYXV0byIhPT1oJiZ0aGlzLm1ldGFNYW5hZ2VyLmNyZWF0ZUNvbHVtbihn'@;
put 'dCxmKSk7dmFyIFh0PXRoaXMuaW5zdGFuY2UudG9WaXN1YWxDb2x1bW4oZ3QpO3JldHVybiB0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlckNyZWF0ZUNvbCIsWHQsbHQsaCksdGhpcy5pbnN0YW5jZS5mb3JjZUZ1bGxSZW5kZXI9ITAsdGhpcy5yZWZyZXNoRHVja1NjaGVtYSgpLHtkZWx0'@;
put 'YTpsdCxzdGFydFBoeXNpY2FsSW5kZXg6Z3R9fX0se2tleToicmVtb3ZlUm93Iix2YWx1ZTpmdW5jdGlvbihhKXt2YXIgZj10aGlzLGQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjEsaD1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRz'@;
put 'WzJdOnZvaWQgMCxtPU51bWJlci5pc0ludGVnZXIoYSk/YTotZCxfPXRoaXMudmlzdWFsUm93c1RvUGh5c2ljYWwobSxkKSxPPXRoaXMuaW5zdGFuY2UuY291bnRTb3VyY2VSb3dzKCk7aWYoITE9PT10aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVSZW1vdmVSb3ciLG09KE8rbSklTyxf'@;
put 'Lmxlbmd0aCxfLGgpKXJldHVybiExO3ZhciBhZT1fLmxlbmd0aDtpZih0aGlzLmZpbHRlckRhdGEobSxhZSxfKSxtPHRoaXMuaW5zdGFuY2UuY291bnRSb3dzKCkpe3RoaXMuaW5zdGFuY2Uucm93SW5kZXhNYXBwZXIucmVtb3ZlSW5kZXhlcyhfKTt2YXIgcGU9aW8odGhpcy50YWJsZU1ldGEu'@;
put 'Y29sdW1ucyl8fGlvKHRoaXMudGFibGVNZXRhLmRhdGFTY2hlbWEpOzA9PT10aGlzLmluc3RhbmNlLnJvd0luZGV4TWFwcGVyLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCkmJiExPT09cGUmJnRoaXMuaW5zdGFuY2UuY29sdW1uSW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKFtd'@;
put 'KX1yZXR1cm4gXy5zbGljZSgwKS5zb3J0KGZ1bmN0aW9uKHhlLFZlKXtyZXR1cm4gVmUteGV9KS5mb3JFYWNoKGZ1bmN0aW9uKHhlKXtmLm1ldGFNYW5hZ2VyLnJlbW92ZVJvdyh4ZSwxKX0pLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyUmVtb3ZlUm93IixtLGFlLF8saCksdGhpcy5p'@;
put 'bnN0YW5jZS5mb3JjZUZ1bGxSZW5kZXI9ITAsITB9fSx7a2V5OiJyZW1vdmVDb2wiLHZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBmPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxLGQ9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2'@;
put 'b2lkIDA7aWYoIm9iamVjdCI9PT10aGlzLmluc3RhbmNlLmRhdGFUeXBlfHx0aGlzLnRhYmxlTWV0YS5jb2x1bW5zKXRocm93IG5ldyBFcnJvcigiY2Fubm90IHJlbW92ZSBjb2x1bW4gd2l0aCBvYmplY3QgZGF0YSBzb3VyY2Ugb3IgY29sdW1ucyBvcHRpb24gc3BlY2lmaWVkIik7dmFyIGg9'@;
put 'Im51bWJlciIhPXR5cGVvZiBhPy1mOmE7aD0odGhpcy5pbnN0YW5jZS5jb3VudENvbHMoKStoKSV0aGlzLmluc3RhbmNlLmNvdW50Q29scygpO3ZhciBtPXRoaXMudmlzdWFsQ29sdW1uc1RvUGh5c2ljYWwoaCxmKSxfPW0uc2xpY2UoMCkuc29ydChmdW5jdGlvbihndCxqdCl7cmV0dXJuIGp0'@;
put 'LWd0fSk7aWYoITE9PT10aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVSZW1vdmVDb2wiLGgsZixtLGQpKXJldHVybiExO2Zvcih2YXIgWD0hMCxhZT1fLmxlbmd0aCxwZT10aGlzLmRhdGFTb3VyY2UsYmU9MDtiZTxhZTtiZSsrKVgmJm1bMF0hPT1tW2JlXS1iZSYmKFg9ITEpO2lmKFgp'@;
put 'Zm9yKHZhciB4ZT0wLFZlPXRoaXMuaW5zdGFuY2UuY291bnRTb3VyY2VSb3dzKCk7eGU8VmU7eGUrKylwZVt4ZV0uc3BsaWNlKG1bMF0sZiksMD09PXhlJiZ0aGlzLm1ldGFNYW5hZ2VyLnJlbW92ZUNvbHVtbihtWzBdLGYpO2Vsc2UgZm9yKHZhciBaZT0wLGx0PXRoaXMuaW5zdGFuY2UuY291'@;
put 'bnRTb3VyY2VSb3dzKCk7WmU8bHQ7WmUrKylmb3IodmFyIGR0PTA7ZHQ8YWU7ZHQrKylwZVtaZV0uc3BsaWNlKF9bZHRdLDEpLDA9PT1aZSYmdGhpcy5tZXRhTWFuYWdlci5yZW1vdmVDb2x1bW4oX1tkdF0sMSk7cmV0dXJuIGg8dGhpcy5pbnN0YW5jZS5jb3VudENvbHMoKSYmKHRoaXMuaW5z'@;
put 'dGFuY2UuY29sdW1uSW5kZXhNYXBwZXIucmVtb3ZlSW5kZXhlcyhtKSwwPT09dGhpcy5pbnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlci5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpJiZ0aGlzLmluc3RhbmNlLnJvd0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZShbXSkpLHRoaXMu'@;
put 'aW5zdGFuY2UucnVuSG9va3MoImFmdGVyUmVtb3ZlQ29sIixoLGYsbSxkKSx0aGlzLmluc3RhbmNlLmZvcmNlRnVsbFJlbmRlcj0hMCx0aGlzLnJlZnJlc2hEdWNrU2NoZW1hKCksITB9fSx7a2V5OiJzcGxpY2VDb2wiLHZhbHVlOmZ1bmN0aW9uKGEsZixkKXtmb3IodmFyIGg9dGhpcy5pbnN0'@;
put 'YW5jZS5nZXREYXRhQXRDb2woYSksbT1oLnNsaWNlKGYsZitkKSxfPWguc2xpY2UoZitkKSxPPWFyZ3VtZW50cy5sZW5ndGgsWD1uZXcgQXJyYXkoTz4zP08tMzowKSxhZT0zO2FlPE87YWUrKylYW2FlLTNdPWFyZ3VtZW50c1thZV07b1koWCxfKTtmb3IodmFyIHBlPTA7cGU8ZDspWC5wdXNo'@;
put 'KG51bGwpLHBlKz0xO3JldHVybiBqY2UoWCksdGhpcy5pbnN0YW5jZS5wb3B1bGF0ZUZyb21BcnJheShmLGEsWCxudWxsLG51bGwsInNwbGljZUNvbCIpLG19fSx7a2V5OiJzcGxpY2VSb3ciLHZhbHVlOmZ1bmN0aW9uKGEsZixkKXtmb3IodmFyIGg9dGhpcy5pbnN0YW5jZS5nZXRTb3VyY2VE'@;
put 'YXRhQXRSb3coYSksbT1oLnNsaWNlKGYsZitkKSxfPWguc2xpY2UoZitkKSxPPWFyZ3VtZW50cy5sZW5ndGgsWD1uZXcgQXJyYXkoTz4zP08tMzowKSxhZT0zO2FlPE87YWUrKylYW2FlLTNdPWFyZ3VtZW50c1thZV07b1koWCxfKTtmb3IodmFyIHBlPTA7cGU8ZDspWC5wdXNoKG51bGwpLHBl'@;
put 'Kz0xO3JldHVybiB0aGlzLmluc3RhbmNlLnBvcHVsYXRlRnJvbUFycmF5KGEsZixbWF0sbnVsbCxudWxsLCJzcGxpY2VSb3ciKSxtfX0se2tleToic3BsaWNlRGF0YSIsdmFsdWU6ZnVuY3Rpb24oYSxmLGQpe3ZhciBoPXRoaXM7aWYoITEhPT10aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZv'@;
put 'cmVEYXRhU3BsaWNlIixhLGYsZCkpe3ZhciBfPVtdLmNvbmNhdChaJCh0aGlzLmRhdGFTb3VyY2Uuc2xpY2UoMCxhKSksWiQoZCksWiQodGhpcy5kYXRhU291cmNlLnNsaWNlKGEpKSk7dGhpcy5kYXRhU291cmNlLmxlbmd0aD0wLF8uZm9yRWFjaChmdW5jdGlvbihPKXtyZXR1cm4gaC5kYXRh'@;
put 'U291cmNlLnB1c2goTyl9KX19fSx7a2V5OiJmaWx0ZXJEYXRhIix2YWx1ZTpmdW5jdGlvbihhLGYsZCl7dmFyIGg9dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiZmlsdGVyRGF0YSIsYSxmLGQpOyExPT09QXJyYXkuaXNBcnJheShoKSYmKGg9dGhpcy5kYXRhU291cmNlLmZpbHRlcihmdW5jdGlv'@;
put 'bihtLF8pe3JldHVybi0xPT09ZC5pbmRleE9mKF8pfSkpLHRoaXMuZGF0YVNvdXJjZS5sZW5ndGg9MCxBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0aGlzLmRhdGFTb3VyY2UsaCl9fSx7a2V5OiJnZXQiLHZhbHVlOmZ1bmN0aW9uKGEsZil7dmFyIGQ9dGhpcy5pbnN0YW5jZS50b1BoeXNp'@;
put 'Y2FsUm93KGEpLGg9dGhpcy5kYXRhU291cmNlW2RdLG09dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygibW9kaWZ5Um93RGF0YSIsZCksXz1udWxsO2lmKChoPWlzTmFOKG0pP206aCkmJmguaGFzT3duUHJvcGVydHkmJlNzKGgsZikpXz1oW2ZdO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBmJiZm'@;
put 'LmluZGV4T2YoIi4iKT4tMSl7dmFyIE89Zi5zcGxpdCgiLiIpLFg9aDtpZighWClyZXR1cm4gbnVsbDtmb3IodmFyIGFlPTAscGU9Ty5sZW5ndGg7YWU8cGU7YWUrKylpZih0eXBlb2YoWD1YW09bYWVdXSk+InUiKXJldHVybiBudWxsO189WH1lbHNlImZ1bmN0aW9uIj09dHlwZW9mIGYmJihf'@;
put 'PWYodGhpcy5kYXRhU291cmNlLnNsaWNlKGQsZCsxKVswXSkpO2lmKHRoaXMuaW5zdGFuY2UuaGFzSG9vaygibW9kaWZ5RGF0YSIpKXt2YXIgYmU9ZzUoXyk7dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygibW9kaWZ5RGF0YSIsZCx0aGlzLnByb3BUb0NvbChmKSxiZSwiZ2V0IiksYmUuaXNUb3Vj'@;
put 'aGVkKCkmJihfPWJlLnZhbHVlKX1yZXR1cm4gX319LHtrZXk6ImdldENvcHlhYmxlIix2YWx1ZTpmdW5jdGlvbihhLGYpe3JldHVybiB0aGlzLmluc3RhbmNlLmdldENlbGxNZXRhKGEsdGhpcy5wcm9wVG9Db2woZikpLmNvcHlhYmxlP3RoaXMuZ2V0KGEsZik6IiJ9fSx7a2V5OiJzZXQiLHZh'@;
put 'bHVlOmZ1bmN0aW9uKGEsZixkKXt2YXIgaD10aGlzLmluc3RhbmNlLnRvUGh5c2ljYWxSb3coYSksbT1kLF89dGhpcy5kYXRhU291cmNlW2hdLE89dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygibW9kaWZ5Um93RGF0YSIsaCk7aWYoXz1pc05hTihPKT9POl8sdGhpcy5pbnN0YW5jZS5oYXNIb29r'@;
put 'KCJtb2RpZnlEYXRhIikpe3ZhciBYPWc1KG0pO3RoaXMuaW5zdGFuY2UucnVuSG9va3MoIm1vZGlmeURhdGEiLGgsdGhpcy5wcm9wVG9Db2woZiksWCwic2V0IiksWC5pc1RvdWNoZWQoKSYmKG09WC52YWx1ZSl9aWYoXyYmXy5oYXNPd25Qcm9wZXJ0eSYmU3MoXyxmKSlfW2ZdPW07ZWxzZSBp'@;
put 'Zigic3RyaW5nIj09dHlwZW9mIGYmJmYuaW5kZXhPZigiLiIpPi0xKXt2YXIgeGUsYWU9Zi5zcGxpdCgiLiIpLHBlPV8sYmU9MDtmb3IoYmU9MCx4ZT1hZS5sZW5ndGgtMTtiZTx4ZTtiZSsrKXR5cGVvZiBwZVthZVtiZV1dPiJ1IiYmKHBlW2FlW2JlXV09e30pLHBlPXBlW2FlW2JlXV07cGVb'@;
put 'YWVbYmVdXT1tfWVsc2UiZnVuY3Rpb24iPT10eXBlb2YgZj9mKHRoaXMuZGF0YVNvdXJjZS5zbGljZShoLGgrMSlbMF0sbSk6X1tmXT1tfX0se2tleToidmlzdWFsUm93c1RvUGh5c2ljYWwiLHZhbHVlOmZ1bmN0aW9uKGEsZil7Zm9yKHZhciBPLGQ9dGhpcy5pbnN0YW5jZS5jb3VudFNvdXJj'@;
put 'ZVJvd3MoKSxoPVtdLG09KGQrYSklZCxfPWY7bTxkJiZfOylPPXRoaXMuaW5zdGFuY2UudG9QaHlzaWNhbFJvdyhtKSxoLnB1c2goTyksXy09MSxtKz0xO3JldHVybiBofX0se2tleToidmlzdWFsQ29sdW1uc1RvUGh5c2ljYWwiLHZhbHVlOmZ1bmN0aW9uKGEsZil7Zm9yKHZhciBkPXRoaXMu'@;
put 'aW5zdGFuY2UuY291bnRDb2xzKCksaD1bXSxtPShkK2EpJWQsXz1mO208ZCYmXzspe3ZhciBPPXRoaXMuaW5zdGFuY2UudG9QaHlzaWNhbENvbHVtbihtKTtoLnB1c2goTyksXy09MSxtKz0xfXJldHVybiBofX0se2tleToiY2xlYXIiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPTA7YTx0'@;
put 'aGlzLmluc3RhbmNlLmNvdW50U291cmNlUm93cygpO2ErKylmb3IodmFyIGY9MDtmPHRoaXMuaW5zdGFuY2UuY291bnRDb2xzKCk7ZisrKXRoaXMuc2V0KGEsdGhpcy5jb2xUb1Byb3AoZiksIiIpfX0se2tleToiZ2V0TGVuZ3RoIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBmLGE9dGhpcy50YWJs'@;
put 'ZU1ldGEubWF4Um93cztmPWE8MHx8MD09PWE/MDphfHwxLzA7dmFyIGQ9dGhpcy5pbnN0YW5jZS5yb3dJbmRleE1hcHBlci5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpO3JldHVybiBNYXRoLm1pbihkLGYpfX0se2tleToiZ2V0QWxsIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBhPXtyb3c6'@;
put 'MCxjb2w6MH0sZj17cm93Ok1hdGgubWF4KHRoaXMuaW5zdGFuY2UuY291bnRSb3dzKCktMSwwKSxjb2w6TWF0aC5tYXgodGhpcy5pbnN0YW5jZS5jb3VudENvbHMoKS0xLDApfTtyZXR1cm4gYS5yb3ctZi5yb3chPTB8fHRoaXMuaW5zdGFuY2UuY291bnRTb3VyY2VSb3dzKCk/dGhpcy5nZXRS'@;
put 'YW5nZShhLGYsbC5ERVNUSU5BVElPTl9SRU5ERVJFUik6W119fSx7a2V5OiJjb3VudENhY2hlZENvbHVtbnMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29sVG9Qcm9wQ2FjaGUubGVuZ3RofX0se2tleToiZ2V0UmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGEsZixkKXt2YXIgbSxfLE8s'@;
put 'aD1bXSxYPXRoaXMudGFibGVNZXRhLm1heFJvd3MsYWU9dGhpcy50YWJsZU1ldGEubWF4Q29scztpZigwPT09WHx8MD09PWFlKXJldHVybltdO3ZhciBwZT1kPT09bC5ERVNUSU5BVElPTl9DTElQQk9BUkRfR0VORVJBVE9SP3RoaXMuZ2V0Q29weWFibGU6dGhpcy5nZXQsYmU9TWF0aC5taW4o'@;
put 'TWF0aC5tYXgoWC0xLDApLE1hdGgubWF4KGEucm93LGYucm93KSkseGU9TWF0aC5taW4oTWF0aC5tYXgoYWUtMSwwKSxNYXRoLm1heChhLmNvbCxmLmNvbCkpO2ZvcihtPU1hdGgubWluKGEucm93LGYucm93KTttPD1iZTttKyspe089W107dmFyIFZlPW0+PTA/dGhpcy5pbnN0YW5jZS50b1Bo'@;
put 'eXNpY2FsUm93KG0pOm07Zm9yKF89TWF0aC5taW4oYS5jb2wsZi5jb2wpO188PXhlJiZudWxsIT09VmU7XysrKU8ucHVzaChwZS5jYWxsKHRoaXMsbSx0aGlzLmNvbFRvUHJvcChfKSkpO251bGwhPT1WZSYmaC5wdXNoKE8pfXJldHVybiBofX0se2tleToiZ2V0VGV4dCIsdmFsdWU6ZnVuY3Rp'@;
put 'b24oYSxmKXtyZXR1cm4gZ2sodGhpcy5nZXRSYW5nZShhLGYsbC5ERVNUSU5BVElPTl9SRU5ERVJFUikpfX0se2tleToiZ2V0Q29weWFibGVUZXh0Iix2YWx1ZTpmdW5jdGlvbihhLGYpe3JldHVybiBnayh0aGlzLmdldFJhbmdlKGEsZixsLkRFU1RJTkFUSU9OX0NMSVBCT0FSRF9HRU5FUkFU'@;
put 'T1IpKX19LHtrZXk6ImRlc3Ryb3kiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5pbnN0YW5jZT1udWxsLHRoaXMubWV0YU1hbmFnZXI9bnVsbCx0aGlzLmRhdGFTb3VyY2U9bnVsbCx0aGlzLmR1Y2tTY2hlbWE9bnVsbCx0aGlzLmNvbFRvUHJvcENhY2hlLmxlbmd0aD0wLHRoaXMucHJvcFRvQ29s'@;
put 'Q2FjaGUuY2xlYXIoKSx0aGlzLnByb3BUb0NvbENhY2hlPXZvaWQgMH19XSxbe2tleToiREVTVElOQVRJT05fUkVOREVSRVIiLGdldDpmdW5jdGlvbigpe3JldHVybiAxfX0se2tleToiREVTVElOQVRJT05fQ0xJUEJPQVJEX0dFTkVSQVRPUiIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDJ9fV0p'@;
put 'LGx9KCk7Y29uc3QgbGx0PWFsdDtmdW5jdGlvbiB1TChsKXtyZXR1cm4odUw9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9u'@;
put 'Ij09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiBDaGUobCxjLGEsZil7dmFyIGQ9Zi5ob3RJbnN0YW5jZSxoPWYuZGF0YU1hcCxtPWYuZGF0YVNvdXJjZSxfPWYuaW50ZXJu'@;
put 'YWxTb3VyY2UsTz1mLnNvdXJjZSxYPWYubWV0YU1hbmFnZXIsYWU9Zi5maXJzdFJ1bixwZT1BYyhfKSxiZT1kLmdldFNldHRpbmdzKCk7ZC5kYXRhVHlwZT1BcnJheS5pc0FycmF5KGJlLmRhdGFTY2hlbWEpPyJhcnJheSI6UGwoYmUuZGF0YVNjaGVtYSk/ImZ1bmN0aW9uIjoib2JqZWN0Iixo'@;
put 'JiZoLmRlc3Ryb3koKSxsPWQucnVuSG9va3MoImJlZm9yZSIuY29uY2F0KHBlKSxsLGFlLE8pO3ZhciB4ZT1uZXcgbGx0KGQsbCxYKTtpZihjKHhlKSwib2JqZWN0Ij09PXVMKGwpJiZudWxsIT09bClsLnB1c2gmJmwuc3BsaWNlfHwobD1bbF0pO2Vsc2V7aWYobnVsbCE9PWwpdGhyb3cgbmV3'@;
put 'IEVycm9yKCIiLmNvbmNhdChfLCIgb25seSBhY2NlcHRzIGFycmF5IG9mIG9iamVjdHMgb3IgYXJyYXkgb2YgYXJyYXlzICgiKS5jb25jYXQodUwobCksIiBnaXZlbikiKSk7dmFyIFZlPXhlLmdldFNjaGVtYSgpO2w9W107dmFyIFplLGR0LGx0PTA7Zm9yKGx0PTAsZHQ9YmUuc3RhcnRSb3dz'@;
put 'O2x0PGR0O2x0KyspaWYoIm9iamVjdCIhPT1kLmRhdGFUeXBlJiYiZnVuY3Rpb24iIT09ZC5kYXRhVHlwZXx8IWJlLmRhdGFTY2hlbWEpaWYoImFycmF5Ij09PWQuZGF0YVR5cGUpWmU9eGMoVmVbMF0pLGwucHVzaChaZSk7ZWxzZXtaZT1bXTtmb3IodmFyIGd0PTAsanQ9YmUuc3RhcnRDb2xz'@;
put 'O2d0PGp0O2d0KyspWmUucHVzaChudWxsKTtsLnB1c2goWmUpfWVsc2UgWmU9eGMoVmUpLGwucHVzaChaZSl9QXJyYXkuaXNBcnJheShsWzBdKSYmKGQuZGF0YVR5cGU9ImFycmF5IiksYmUuZGF0YT1sLHhlLmRhdGFTb3VyY2U9bCxtLmRhdGE9bCxtLmRhdGFUeXBlPWQuZGF0YVR5cGUsbS5j'@;
put 'b2xUb1Byb3A9eGUuY29sVG9Qcm9wLmJpbmQoeGUpLG0ucHJvcFRvQ29sPXhlLnByb3BUb0NvbC5iaW5kKHhlKSxtLmNvdW50Q2FjaGVkQ29sdW1ucz14ZS5jb3VudENhY2hlZENvbHVtbnMuYmluZCh4ZSksYSh4ZSksZC5ydW5Ib29rcygiYWZ0ZXIiLmNvbmNhdChwZSksbCxhZSxPKSxhZXx8'@;
put 'KGQucnVuSG9va3MoImFmdGVyQ2hhbmdlIixudWxsLF8pLGQucmVuZGVyKCkpfXZhciBraGUsU2hlPW5ldyBNYXAoW1siICIsInNwYWNlIl0sWyJzcGFjZWJhciIsInNwYWNlIl0sWyJzY3JvbGwiLCJzY3JvbGxsb2NrIl0sWyJkZWwiLCJkZWxldGUiXSxbImVzYyIsImVzY2FwZSJdLFsibWVk'@;
put 'aWFuZXh0dHJhY2siLCJtZWRpYXRyYWNrbmV4dCJdLFsibWVkaWFwcmV2aW91c3RyYWNrIiwibWVkaWF0cmFja3ByZXZpb3VzIl0sWyJ2b2x1bWV1cCIsImF1ZGlvdm9sdW1ldXAiXSxbInZvbHVtZWRvd24iLCJhdWRpb3ZvbHVtZWRvd24iXSxbInZvbHVtZW11dGUiLCJhdWRpb3ZvbHVtZW11'@;
put 'dGUiXSxbIm11bHRpcGx5IiwiKiJdLFsiYWRkIiwiKyJdLFsiZGl2aWRlIiwiLyJdLFsic3VidHJhY3QiLCItIl0sWyJsZWZ0IiwiYXJyb3dsZWZ0Il0sWyJyaWdodCIsImFycm93cmlnaHQiXSxbInVwIiwiYXJyb3d1cCJdLFsiZG93biIsImFycm93ZG93biJdXSksY0w9ZnVuY3Rpb24oYyl7'@;
put 'cmV0dXJuIGMubWFwKGZ1bmN0aW9uKGEpe3ZhciBmPWEudG9Mb3dlckNhc2UoKTtyZXR1cm4gU2hlLmhhcyhmKT9TaGUuZ2V0KGYpOmZ9KS5zb3J0KCkuam9pbigiKyIpfSxNaGU9ZnVuY3Rpb24oYyl7cmV0dXJuIGMudG9Mb3dlckNhc2UoKX07ZnVuY3Rpb24gRWhlKGwsYyl7aWYobCl7aWYo'@;
put 'InN0cmluZyI9PXR5cGVvZiBsKXJldHVybiBXJChsLGMpO3ZhciBhPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsKS5zbGljZSg4LC0xKTtpZigiT2JqZWN0Ij09PWEmJmwuY29uc3RydWN0b3ImJihhPWwuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1hfHwiU2V0Ij09PWEpcmV0'@;
put 'dXJuIEFycmF5LmZyb20obCk7aWYoIkFyZ3VtZW50cyI9PT1hfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChhKSlyZXR1cm4gVyQobCxjKX19ZnVuY3Rpb24gVyQobCxjKXsobnVsbD09Y3x8Yz5sLmxlbmd0aCkmJihjPWwubGVuZ3RoKTtmb3IodmFy'@;
put 'IGE9MCxmPW5ldyBBcnJheShjKTthPGM7YSsrKWZbYV09bFthXTtyZXR1cm4gZn12YXIgeWx0PWZ1bmN0aW9uKGMpe3ZhciBhPWlSKHtlcnJvcklkRXhpc3RzOmZ1bmN0aW9uKGFlKXtyZXR1cm4nVGhlICInLmNvbmNhdChhZSwnIiBzaG9ydGN1dCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgaW4g'@;
put 'dGhlICInKS5jb25jYXQoYywnIiBjb250ZXh0LicpfX0pLGY9ZnVuY3Rpb24oKXt2YXIgYWU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHBlPWFlLmtleXMsYmU9YWUuY2FsbGJhY2sseGU9YWUuZ3JvdXAsVmU9YWUucnVuT25seUlm'@;
put 'LFplPXZvaWQgMD09PVZlP2Z1bmN0aW9uKCl7cmV0dXJuITB9OlZlLGx0PWFlLmNhcHR1cmVDdHJsLGR0PXZvaWQgMCE9PWx0JiZsdCxndD1hZS5wcmV2ZW50RGVmYXVsdCxqdD12b2lkIDA9PT1ndHx8Z3Qscm49YWUuc3RvcFByb3BhZ2F0aW9uLFh0PXZvaWQgMCE9PXJuJiZybix5bj1hZS5y'@;
put 'ZWxhdGl2ZVRvR3JvdXAsUW49YWUucG9zaXRpb247aWYoTGwoeGUpKXRocm93IG5ldyBFcnJvcigiWW91IG5lZWQgdG8gZGVmaW5lIHRoZSBzaG9ydGN1dCdzIGdyb3VwLiIpO2lmKCExPT09UGwoYmUpKXRocm93IG5ldyBFcnJvcigiVGhlIHNob3J0Y3V0J3MgY2FsbGJhY2sgbmVlZHMgdG8g'@;
put 'YmUgYSBmdW5jdGlvbi4iKTtpZighMT09PUFycmF5LmlzQXJyYXkocGUpKXRocm93IG5ldyBFcnJvcihPbChraGV8fChraGU9ZnVuY3Rpb24gdmx0KGwsYyl7cmV0dXJuIGN8fChjPWwuc2xpY2UoMCkpLE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobCx7cmF3Ont2YWx1'@;
put 'ZTpPYmplY3QuZnJlZXplKGMpfX0pKX0oWyJQYXNzIHRoZSBzaG9ydGN1dCdzIGtleXMgYXMgYW4gYXJyYXkgb2YgYXJyYXlzLCBcbiAgICAgIHVzaW5nIHRoZSBLZXlib2FyZEV2ZW50LmtleSBwcm9wZXJ0aWVzOiBcbiAgICAgIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVT'@;
put 'L2RvY3MvV2ViL0FQSS9LZXlib2FyZEV2ZW50L2tleS9LZXlfVmFsdWVzLiJdLFsiUGFzcyB0aGUgc2hvcnRjdXRcXCdzIGtleXMgYXMgYW4gYXJyYXkgb2YgYXJyYXlzLFxceDIwXG4gICAgICB1c2luZyB0aGUgS2V5Ym9hcmRFdmVudC5rZXkgcHJvcGVydGllczpcXHgyMFxuICAgICAgaHR0'@;
put 'cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0tleWJvYXJkRXZlbnQva2V5L0tleV9WYWx1ZXMuIl0pKSkpO3ZhciBPcj17Y2FsbGJhY2s6YmUsZ3JvdXA6eGUscnVuT25seUlmOlplLGNhcHR1cmVDdHJsOmR0LHByZXZlbnREZWZhdWx0Omp0LHN0b3BQcm9w'@;
put 'YWdhdGlvbjpYdH07aWYoaW8oeW4pKXt2YXIgVnI9W3luLFFuXTtPci5yZWxhdGl2ZVRvR3JvdXA9VnJbMF0sT3IucG9zaXRpb249VnJbMV19cGUuZm9yRWFjaChmdW5jdGlvbihacil7dmFyIGlyPWNMKFpyKTtpZihhLmhhc0l0ZW0oaXIpKXt2YXIgQXI9YS5nZXRJdGVtKGlyKSxFbj1Bci5m'@;
put 'aW5kSW5kZXgoZnVuY3Rpb24oVHIpe3JldHVybiBUci5ncm91cD09PXlufSk7LTEhPT1Fbj8iYmVmb3JlIj09PVFuP0VuLT0xOkVuKz0xOkVuPUFyLmxlbmd0aCxBci5zcGxpY2UoRW4sMCxPcil9ZWxzZSBhLmFkZEl0ZW0oaXIsW09yXSl9KX0saD1mdW5jdGlvbihhZSl7dmFyIHBlPWNMKGFl'@;
put 'KTthLnJlbW92ZUl0ZW0ocGUpfTtyZXR1cm57YWRkU2hvcnRjdXQ6ZixhZGRTaG9ydGN1dHM6ZnVuY3Rpb24oYWUpe3ZhciBwZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307YWUuZm9yRWFjaChmdW5jdGlvbihiZSl7bWEocGUsZnVu'@;
put 'Y3Rpb24oeGUsVmUpeyExPT09T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGJlLFZlKSYmKGJlW1ZlXT1wZVtWZV0pfSksZihiZSl9KX0sZ2V0U2hvcnRjdXRzOmZ1bmN0aW9uKGFlKXt2YXIgcGU9Y0woYWUpLGJlPWEuZ2V0SXRlbShwZSk7cmV0dXJuIGlvKGJlKT9iZS5z'@;
put 'bGljZSgpOltdfSxoYXNTaG9ydGN1dDpmdW5jdGlvbihhZSl7dmFyIHBlPWNMKGFlKTtyZXR1cm4gYS5oYXNJdGVtKHBlKX0scmVtb3ZlU2hvcnRjdXRzQnlLZXlzOmgscmVtb3ZlU2hvcnRjdXRzQnlHcm91cDpmdW5jdGlvbihhZSl7YS5nZXRJdGVtcygpLmZvckVhY2goZnVuY3Rpb24oYmUp'@;
put 'e3ZhciB4ZT1mdW5jdGlvbiBobHQobCxjKXtyZXR1cm4gZnVuY3Rpb24gZ2x0KGwpe2lmKEFycmF5LmlzQXJyYXkobCkpcmV0dXJuIGx9KGwpfHxmdW5jdGlvbiBtbHQobCxjKXt2YXIgYT1udWxsPT1sP251bGw6dHlwZW9mIFN5bWJvbDwidSImJmxbU3ltYm9sLml0ZXJhdG9yXXx8bFsiQEBp'@;
put 'dGVyYXRvciJdO2lmKG51bGwhPWEpe3ZhciBmLGQsaCxtLF89W10sTz0hMCxYPSExO3RyeXtpZihoPShhPWEuY2FsbChsKSkubmV4dCwwPT09Yyl7aWYoT2JqZWN0KGEpIT09YSlyZXR1cm47Tz0hMX1lbHNlIGZvcig7IShPPShmPWguY2FsbChhKSkuZG9uZSkmJihfLnB1c2goZi52YWx1ZSks'@;
put 'Xy5sZW5ndGghPT1jKTtPPSEwKTt9Y2F0Y2goYWUpe1g9ITAsZD1hZX1maW5hbGx5e3RyeXtpZighTyYmbnVsbCE9YS5yZXR1cm4mJihtPWEucmV0dXJuKCksT2JqZWN0KG0pIT09bSkpcmV0dXJufWZpbmFsbHl7aWYoWCl0aHJvdyBkfX1yZXR1cm4gX319KGwsYyl8fEVoZShsLGMpfHxmdW5j'@;
put 'dGlvbiBwbHQoKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0'@;
put 'aG9kLiIpfSgpfShiZSwyKSxWZT14ZVswXSxaZT14ZVsxXSxsdD1aZS5maWx0ZXIoZnVuY3Rpb24oZHQpe3JldHVybiBkdC5ncm91cCE9PWFlfSk7MD09PWx0Lmxlbmd0aD9oKGZ1bmN0aW9uKGMpe3JldHVybiBjLnNwbGl0KCIrIil9KFZlKSk6KFplLmxlbmd0aD0wLFplLnB1c2guYXBwbHko'@;
put 'WmUsZnVuY3Rpb24gdWx0KGwpe3JldHVybiBmdW5jdGlvbiBkbHQobCl7aWYoQXJyYXkuaXNBcnJheShsKSlyZXR1cm4gVyQobCl9KGwpfHxmdW5jdGlvbiBmbHQobCl7aWYodHlwZW9mIFN5bWJvbDwidSImJm51bGwhPWxbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9bFsiQEBpdGVyYXRvciJd'@;
put 'KXJldHVybiBBcnJheS5mcm9tKGwpfShsKXx8RWhlKGwpfHxmdW5jdGlvbiBjbHQoKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBt'@;
put 'dXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX0obHQpKSl9KX19fSxfbHQ9WyJtZXRhIiwiYWx0Iiwic2hpZnQiLCJjb250cm9sIl0sdms9ZnVuY3Rpb24gYmx0KCl7dmFyIGw9bmV3IFNldDtyZXR1cm57cHJlc3M6ZnVuY3Rpb24oYSl7bC5hZGQoYSl9LHJlbGVh'@;
put 'c2U6ZnVuY3Rpb24oYSl7bC5kZWxldGUoYSl9LHJlbGVhc2VBbGw6ZnVuY3Rpb24oKXtsLmNsZWFyKCl9LGlzUHJlc3NlZDpmdW5jdGlvbihhKXtyZXR1cm4gbC5oYXMoYSl9fX0oKSxDbHQ9ZnVuY3Rpb24oYyl7dmFyIGE9Yy5vd25lcldpbmRvdyxmPWMuaGFuZGxlRXZlbnQsZD1jLmJlZm9y'@;
put 'ZUtleURvd24saD1jLmFmdGVyS2V5RG93bixtPWlSKHtlcnJvcklkRXhpc3RzOmZ1bmN0aW9uKFplKXtyZXR1cm4nVGhlICInLmNvbmNhdChaZSwnIiBjb250ZXh0IG5hbWUgaXMgYWxyZWFkeSByZWdpc3RlcmVkLicpfX0pLF89ImdyaWQiLFg9ZnVuY3Rpb24oKXtyZXR1cm4gX30sYWU9ZnVu'@;
put 'Y3Rpb24oWmUpe3JldHVybiBtLmdldEl0ZW0oWmUpfSxiZT0hMSx4ZT1mdW5jdGlvbiB3bHQobCxjLGEsZixkKXt2YXIgaD1mdW5jdGlvbih4ZSl7cmV0dXJuIF9sdC5pbmNsdWRlcyh4ZSl9LG09ZnVuY3Rpb24oeGUpe3ZhciBWZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3Vt'@;
put 'ZW50c1sxXSYmYXJndW1lbnRzWzFdLFplPVtdO3JldHVybiB4ZS5hbHRLZXkmJlplLnB1c2goImFsdCIpLFZlJiYoeGUuY3RybEtleXx8eGUubWV0YUtleSk/WmUucHVzaCgiY29udHJvbC9tZXRhIik6KHhlLmN0cmxLZXkmJlplLnB1c2goImNvbnRyb2wiKSx4ZS5tZXRhS2V5JiZaZS5wdXNo'@;
put 'KCJtZXRhIikpLHhlLnNoaWZ0S2V5JiZaZS5wdXNoKCJzaGlmdCIpLFplfSxfPWZ1bmN0aW9uKHhlKXtpZighMSE9PWMoeGUpKXt2YXIgVmU9YSh4ZSk7aWYoMjI5IT09eGUua2V5Q29kZSYmITEhPT1WZSYmIV81KHhlKSl7dmFyIFplPU1oZSh4ZS5rZXkpLGx0PVtdO2goWmUpP3ZrLnByZXNz'@;
put 'KFplKTpsdD1tKHhlKTt2YXIgZHQ9W1plXS5jb25jYXQobHQpOyFkKHhlLGR0KSYmKFlJKCkmJmx0LmluY2x1ZGVzKCJtZXRhIil8fCFZSSgpJiZsdC5pbmNsdWRlcygiY29udHJvbCIpKSYmZCh4ZSxbWmVdLmNvbmNhdChtKHhlLCEwKSkpLGYoeGUpfX19LE89ZnVuY3Rpb24oeGUpe2lmKCEx'@;
put 'IT09Yyh4ZSkpe3ZhciBWZT1NaGUoeGUua2V5KTshMSE9PWgoVmUpJiZ2ay5yZWxlYXNlKFZlKX19LFg9ZnVuY3Rpb24oKXt2ay5yZWxlYXNlQWxsKCl9O3JldHVybnttb3VudDpmdW5jdGlvbigpe2Zvcih2YXIgeGU9bDt4ZTspeGUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFkZEV2ZW50'@;
put 'TGlzdGVuZXIoImtleWRvd24iLF8pLHhlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsTykseGUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLFgpLHhlPWpTKHhlKX0sdW5tb3VudDpmdW5jdGlvbigpe2Zv'@;
put 'cih2YXIgeGU9bDt4ZTspeGUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLF8pLHhlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsTykseGUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnJl'@;
put 'bW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLFgpLHhlPWpTKHhlKX0saXNQcmVzc2VkOmZ1bmN0aW9uKHhlKXtyZXR1cm4gdmsuaXNQcmVzc2VkKHhlKX0scmVsZWFzZVByZXNzZWRLZXlzOmZ1bmN0aW9uKCl7cmV0dXJuIHZrLnJlbGVhc2VBbGwoKX19fShhLGYsZCxoLGZ1bmN0aW9uKFZlLFpl'@;
put 'KXt2YXIgbHQ9YWUoWCgpKSxkdD0hMTtpZighbHQuaGFzU2hvcnRjdXQoWmUpKXJldHVybiBkdDtmb3IodmFyIGd0PWx0LmdldFNob3J0Y3V0cyhaZSksanQ9MDtqdDxndC5sZW5ndGg7anQrKyl7dmFyIHJuPWd0W2p0XSxYdD1ybi5jYWxsYmFjayxRbj1ybi5wcmV2ZW50RGVmYXVsdCxPcj1y'@;
put 'bi5zdG9wUHJvcGFnYXRpb24sVnI9cm4uY2FwdHVyZUN0cmw7aWYoITEhPT0oMCxybi5ydW5Pbmx5SWYpKFZlKSYmKGJlPVZyLGR0PSExPT09WHQoVmUsWmUpLGJlPSExLFFuJiZWZS5wcmV2ZW50RGVmYXVsdCgpLE9yJiZWZS5zdG9wUHJvcGFnYXRpb24oKSxkdCkpYnJlYWt9cmV0dXJuIGR0'@;
put 'fSk7cmV0dXJuIHhlLm1vdW50KCkse2FkZENvbnRleHQ6ZnVuY3Rpb24oWmUpe3ZhciBsdD15bHQoWmUpO3JldHVybiBtLmFkZEl0ZW0oWmUsbHQpLGx0fSxnZXRBY3RpdmVDb250ZXh0TmFtZTpYLGdldENvbnRleHQ6YWUsc2V0QWN0aXZlQ29udGV4dE5hbWU6ZnVuY3Rpb24oWmUpe189WmV9'@;
put 'LGlzQ3RybFByZXNzZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hYmUmJih4ZS5pc1ByZXNzZWQoImNvbnRyb2wiKXx8eGUuaXNQcmVzc2VkKCJtZXRhIikpfSxyZWxlYXNlUHJlc3NlZEtleXM6ZnVuY3Rpb24oKXtyZXR1cm4geGUucmVsZWFzZVByZXNzZWRLZXlzKCl9LGRlc3Ryb3k6ZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4geGUudW5tb3VudCgpfX19O2Z1bmN0aW9uIEcwKGwpe3JldHVybihHMD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVu'@;
put 'Y3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIHpoKGwsYyl7cmV0dXJuIGZ1bmN0aW9uIGtsdChsKXtpZihBcnJheS5pc0FycmF5KGwpKXJldHVybiBsfShsKXx8'@;
put 'ZnVuY3Rpb24gTWx0KGwsYyl7dmFyIGE9bnVsbD09bD9udWxsOnR5cGVvZiBTeW1ib2w8InUiJiZsW1N5bWJvbC5pdGVyYXRvcl18fGxbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1hKXt2YXIgZixkLGgsbSxfPVtdLE89ITAsWD0hMTt0cnl7aWYoaD0oYT1hLmNhbGwobCkpLm5leHQsMD09PWMp'@;
put 'e2lmKE9iamVjdChhKSE9PWEpcmV0dXJuO089ITF9ZWxzZSBmb3IoOyEoTz0oZj1oLmNhbGwoYSkpLmRvbmUpJiYoXy5wdXNoKGYudmFsdWUpLF8ubGVuZ3RoIT09Yyk7Tz0hMCk7fWNhdGNoKGFlKXtYPSEwLGQ9YWV9ZmluYWxseXt0cnl7aWYoIU8mJm51bGwhPWEucmV0dXJuJiYobT1hLnJl'@;
put 'dHVybigpLE9iamVjdChtKSE9PW0pKXJldHVybn1maW5hbGx5e2lmKFgpdGhyb3cgZH19cmV0dXJuIF99fShsLGMpfHx4aGUobCxjKXx8ZnVuY3Rpb24gU2x0KCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5j'@;
put 'ZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBFOShsKXtyZXR1cm4gZnVuY3Rpb24gQWx0KGwpe2lmKEFycmF5LmlzQXJyYXkobCkpcmV0dXJuIEckKGwpfShs'@;
put 'KXx8ZnVuY3Rpb24geGx0KGwpe2lmKHR5cGVvZiBTeW1ib2w8InUiJiZudWxsIT1sW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWxbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbShsKX0obCl8fHhoZShsKXx8ZnVuY3Rpb24gRWx0KCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxp'@;
put 'ZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24geGhlKGwsYyl7aWYobCl7aWYoInN0cmlu'@;
put 'ZyI9PXR5cGVvZiBsKXJldHVybiBHJChsLGMpO3ZhciBhPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsKS5zbGljZSg4LC0xKTtpZigiT2JqZWN0Ij09PWEmJmwuY29uc3RydWN0b3ImJihhPWwuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1hfHwiU2V0Ij09PWEpcmV0dXJuIEFy'@;
put 'cmF5LmZyb20obCk7aWYoIkFyZ3VtZW50cyI9PT1hfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChhKSlyZXR1cm4gRyQobCxjKX19ZnVuY3Rpb24gRyQobCxjKXsobnVsbD09Y3x8Yz5sLmxlbmd0aCkmJihjPWwubGVuZ3RoKTtmb3IodmFyIGE9MCxm'@;
put 'PW5ldyBBcnJheShjKTthPGM7YSsrKWZbYV09bFthXTtyZXR1cm4gZn12YXIgVGx0PSJncmlkRGVmYXVsdCIsJCQ9bnVsbDtmdW5jdGlvbiBLJChsLGMpe3ZhciBhLE8sWCxhZSxwZSxmPXRoaXMsZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRz'@;
put 'WzJdLGg9ITEsbT10aGlzLF89bmV3IGZzKG0pLGJlPSEwOyhmdW5jdGlvbiBKZXQobCl7cmV0dXJuIGw9PT1JV30pKGQpJiZmdW5jdGlvbiBYZXQobCl7RGZlLnNldChsLCEwKX0odGhpcyksdGhpcy5yb290RWxlbWVudD1sLHRoaXMucm9vdERvY3VtZW50PWwub3duZXJEb2N1bWVudCx0aGlz'@;
put 'LnJvb3RXaW5kb3c9dGhpcy5yb290RG9jdW1lbnQuZGVmYXVsdFZpZXcsdGhpcy5pc0Rlc3Ryb3llZD0hMSx0aGlzLnJlbmRlclN1c3BlbmRlZENvdW50ZXI9MCx0aGlzLmV4ZWN1dGlvblN1c3BlbmRlZENvdW50ZXI9MDt2YXIgeGU9bnVsbCE9PShhPWM/LmxheW91dERpcmVjdGlvbikmJnZv'@;
put 'aWQgMCE9PWE/YToiaW5oZXJpdCIsVmU9WyJydGwiLCJsdHIiXS5pbmNsdWRlcyh4ZSk/eGU6dGhpcy5yb290V2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5yb290RWxlbWVudCkuZGlyZWN0aW9uO3RoaXMucm9vdEVsZW1lbnQuc2V0QXR0cmlidXRlKCJkaXIiLFZlKSx0aGlzLmlzUnRs'@;
put 'PWZ1bmN0aW9uKCl7cmV0dXJuInJ0bCI9PT1WZX0sdGhpcy5pc0x0cj1mdW5jdGlvbigpe3JldHVybiFtLmlzUnRsKCl9LHRoaXMuZ2V0RGlyZWN0aW9uRmFjdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIG0uaXNMdHIoKT8xOi0xfSxjLmxhbmd1YWdlPWZ1bmN0aW9uIE5ydChsKXt2YXIgYz1kZGUo'@;
put 'bCk7cmV0dXJuIFQkKGMpfHwoYz1BJCxoZGUobCkpLGN9KGMubGFuZ3VhZ2UpO3ZhciBaZT1uZXcgZ2hlKG0sYyxbWmF0LEthdF0pLGx0PVplLmdldFRhYmxlTWV0YSgpLGR0PVplLmdldEdsb2JhbE1ldGEoKSxndD1pUigpO3RoaXMuY29udGFpbmVyPXRoaXMucm9vdERvY3VtZW50LmNyZWF0'@;
put 'ZUVsZW1lbnQoImRpdiIpLHRoaXMucmVuZGVyQ2FsbD0hMSxsLmluc2VydEJlZm9yZSh0aGlzLmNvbnRhaW5lcixsLmZpcnN0Q2hpbGQpLFJXKHRoaXMpJiZmMGUoYy5saWNlbnNlS2V5LGwpLHRoaXMuZ3VpZD0iaHRfIi5jb25jYXQobVkoKSksdGhpcy5jb2x1bW5JbmRleE1hcHBlcj1uZXcg'@;
put 'c0csdGhpcy5yb3dJbmRleE1hcHBlcj1uZXcgc0csdGhpcy5jb2x1bW5JbmRleE1hcHBlci5hZGRMb2NhbEhvb2soImluZGV4ZXNTZXF1ZW5jZUNoYW5nZSIsZnVuY3Rpb24oU3Qpe20ucnVuSG9va3MoImFmdGVyQ29sdW1uU2VxdWVuY2VDaGFuZ2UiLFN0KX0pLHRoaXMucm93SW5kZXhNYXBw'@;
put 'ZXIuYWRkTG9jYWxIb29rKCJpbmRleGVzU2VxdWVuY2VDaGFuZ2UiLGZ1bmN0aW9uKFN0KXttLnJ1bkhvb2tzKCJhZnRlclJvd1NlcXVlbmNlQ2hhbmdlIixTdCl9KSxYPW5ldyBDdHQobSksKCF0aGlzLnJvb3RFbGVtZW50LmlkfHwiaHRfIj09PXRoaXMucm9vdEVsZW1lbnQuaWQuc3Vic3Ry'@;
put 'aW5nKDAsMykpJiYodGhpcy5yb290RWxlbWVudC5pZD10aGlzLmd1aWQpO3ZhciBqdD1mdW5jdGlvbihGdCl7dmFyIFd0PUZ0LnJvdyx3bj1GdC5jb2w7cmV0dXJuIG0uX2NyZWF0ZUNlbGxDb29yZHMoV3Q+PTA/bS5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4'@;
put 'KFd0KTpXdCx3bj49MD9tLmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgod24pOnduKX0sWHQ9bmV3IFhvdChsdCx7cm93SW5kZXhNYXBwZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbS5yb3dJbmRleE1hcHBlcn0sY29sdW1uSW5kZXhNYXBwZXI6ZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4gbS5jb2x1bW5JbmRleE1hcHBlcn0sY291bnRDb2xzOmZ1bmN0aW9uKCl7cmV0dXJuIG0uY291bnRDb2xzKCl9LGNvdW50Um93czpmdW5jdGlvbigpe3JldHVybiBtLmNvdW50Um93cygpfSxwcm9wVG9Db2w6ZnVuY3Rpb24oRnQpe3JldHVybiBPLnByb3BUb0NvbChGdCl9LGlz'@;
put 'RWRpdG9yT3BlbmVkOmZ1bmN0aW9uKCl7cmV0dXJuISFtLmdldEFjdGl2ZUVkaXRvcigpJiZtLmdldEFjdGl2ZUVkaXRvcigpLmlzT3BlbmVkKCl9LGNvdW50Q29sc1RyYW5zbGF0ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKX0sY291bnRSb3dz'@;
put 'VHJhbnNsYXRlZDpmdW5jdGlvbigpe3JldHVybiBmLnZpZXcuY291bnRSZW5kZXJhYmxlUm93cygpfSxnZXRTaG9ydGN1dE1hbmFnZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbS5nZXRTaG9ydGN1dE1hbmFnZXIoKX0sY3JlYXRlQ2VsbENvb3JkczpmdW5jdGlvbihGdCxXdCl7cmV0dXJuIG0uX2Ny'@;
put 'ZWF0ZUNlbGxDb29yZHMoRnQsV3QpfSxjcmVhdGVDZWxsUmFuZ2U6ZnVuY3Rpb24oRnQsV3Qsd24pe3JldHVybiBtLl9jcmVhdGVDZWxsUmFuZ2UoRnQsV3Qsd24pfSx2aXN1YWxUb1JlbmRlcmFibGVDb29yZHM6anQscmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzOmZ1bmN0aW9uKEZ0KXt2YXIg'@;
put 'V3Q9RnQucm93LHduPUZ0LmNvbDtyZXR1cm4gbS5fY3JlYXRlQ2VsbENvb3JkcyhXdD49MD9tLnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoV3QpOld0LHduPj0wP20uY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh3bik6'@;
put 'd24pfSxpc0Rpc2FibGVkQ2VsbFNlbGVjdGlvbjpmdW5jdGlvbihGdCxXdCl7cmV0dXJuIG0uZ2V0Q2VsbE1ldGEoRnQsV3QpLmRpc2FibGVWaXN1YWxTZWxlY3Rpb259fSk7dGhpcy5zZWxlY3Rpb249WHQ7dmFyIHluPWZ1bmN0aW9uKEZ0KXtGdC5oaWRkZW5JbmRleGVzQ2hhbmdlZCYmZi5z'@;
put 'ZWxlY3Rpb24ucmVmcmVzaCgpfTtmdW5jdGlvbiBRbihTdCl7dmFyIEZ0PWRkZShTdCk7VCQoRnQpPyhtLnJ1bkhvb2tzKCJiZWZvcmVMYW5ndWFnZUNoYW5nZSIsRnQpLGR0Lmxhbmd1YWdlPUZ0LG0ucnVuSG9va3MoImFmdGVyTGFuZ3VhZ2VDaGFuZ2UiLEZ0KSk6aGRlKFN0KX1mdW5jdGlv'@;
put 'biBPcihTdCxGdCl7dmFyIFd0PSJjbGFzc05hbWUiPT09U3Q/bS5yb290RWxlbWVudDptLnRhYmxlO2lmKGJlKWdpKFd0LEZ0KTtlbHNle3ZhciB3bj1bXSxTbj1bXTtkdFtTdF0mJih3bj1BcnJheS5pc0FycmF5KGR0W1N0XSk/ZHRbU3RdOnNZKGR0W1N0XSkpLEZ0JiYoU249QXJyYXkuaXNB'@;
put 'cnJheShGdCk/RnQ6c1koRnQpKTt2YXIgYnI9bFkod24sU24pLGRyPWxZKFNuLHduKTtici5sZW5ndGgmJkpvKFd0LGJyKSxkci5sZW5ndGgmJmdpKFd0LGRyKX1kdFtTdF09RnR9ZnVuY3Rpb24gVnIoKXt2YXIgU3Q9ITE7cmV0dXJue3ZhbGlkYXRvcnNJblF1ZXVlOjAsdmFsaWQ6ITAsYWRk'@;
put 'VmFsaWRhdG9yVG9RdWV1ZTpmdW5jdGlvbigpe3RoaXMudmFsaWRhdG9yc0luUXVldWUrPTEsU3Q9ITF9LHJlbW92ZVZhbGlkYXRvckZvcm1RdWV1ZTpmdW5jdGlvbigpe3RoaXMudmFsaWRhdG9yc0luUXVldWU9dGhpcy52YWxpZGF0b3JzSW5RdWV1ZS0xPDA/MDp0aGlzLnZhbGlkYXRvcnNJ'@;
put 'blF1ZXVlLTEsdGhpcy5jaGVja0lmUXVldWVJc0VtcHR5KCl9LG9uUXVldWVFbXB0eTpmdW5jdGlvbigpe30sY2hlY2tJZlF1ZXVlSXNFbXB0eTpmdW5jdGlvbigpezA9PT10aGlzLnZhbGlkYXRvcnNJblF1ZXVlJiYhMT09PVN0JiYoU3Q9ITAsdGhpcy5vblF1ZXVlRW1wdHkodGhpcy52YWxp'@;
put 'ZCkpfX19ZnVuY3Rpb24gWnIoU3Qpe3ZhciBGdD1TdC5yZXBsYWNlKCIsIiwiLiIpO3JldHVybiExPT09aXNOYU4ocGFyc2VGbG9hdChGdCkpP3BhcnNlRmxvYXQoRnQpOlN0fWZ1bmN0aW9uIGlyKFN0LEZ0LFd0KXtpZihTdC5sZW5ndGgpe3ZhciB3bj1tLmdldEFjdGl2ZUVkaXRvcigpLFNu'@;
put 'PW5ldyBWcixicj0hMDtTbi5vblF1ZXVlRW1wdHk9ZnVuY3Rpb24ob2Epe3duJiZiciYmd24uY2FuY2VsQ2hhbmdlcygpLFd0KG9hKX07Zm9yKHZhciBkcj1TdC5sZW5ndGgtMTtkcj49MDtkci0tKXt2YXIgTHI9emgoU3RbZHJdLDQpLE5yPUxyWzBdLHFyPUxyWzNdLFJpPU8ucHJvcFRvQ29s'@;
put 'KExyWzFdKSxEbz1tLmdldENlbGxNZXRhKE5yLFJpKTsibnVtZXJpYyI9PT1Eby50eXBlJiYic3RyaW5nIj09dHlwZW9mIHFyJiZqMGUocXIpJiYoU3RbZHJdWzNdPVpyKHFyKSksbS5nZXRDZWxsVmFsaWRhdG9yKERvKSYmKFNuLmFkZFZhbGlkYXRvclRvUXVldWUoKSxtLnZhbGlkYXRlQ2Vs'@;
put 'bChTdFtkcl1bM10sRG8sZnVuY3Rpb24ob2Esa28pe3JldHVybiBmdW5jdGlvbihxaSl7aWYoImJvb2xlYW4iIT10eXBlb2YgcWkpdGhyb3cgbmV3IEVycm9yKCJWYWxpZGF0aW9uIGVycm9yOiByZXN1bHQgaXMgbm90IGJvb2xlYW4iKTtpZighMT09PXFpJiYhMT09PWtvLmFsbG93SW52YWxp'@;
put 'ZCl7YnI9ITEsU3Quc3BsaWNlKG9hLDEpLGtvLnZhbGlkPSEwO3ZhciB4dD1tLmdldENlbGwoa28udmlzdWFsUm93LGtvLnZpc3VhbENvbCk7bnVsbCE9PXh0JiZKbyh4dCxsdC5pbnZhbGlkQ2VsbENsYXNzTmFtZSl9U24ucmVtb3ZlVmFsaWRhdG9yRm9ybVF1ZXVlKCl9fShkcixEbyksRnQp'@;
put 'KX1Tbi5jaGVja0lmUXVldWVJc0VtcHR5KCl9fWZ1bmN0aW9uIHNpKFN0LEZ0KXt2YXIgV3Q9U3QubGVuZ3RoLTE7aWYoIShXdDwwKSl7Zm9yKDtXdD49MDtXdC0tKXt2YXIgd249ITE7aWYobnVsbCE9PVN0W1d0XSl7aWYobnVsbCE9U3RbV3RdWzJdfHxudWxsIT1TdFtXdF1bM10pe2lmKGx0'@;
put 'LmFsbG93SW5zZXJ0Um93KWZvcig7U3RbV3RdWzBdPm0uY291bnRSb3dzKCktMTspaWYoMD09PU8uY3JlYXRlUm93KHZvaWQgMCx2b2lkIDAse3NvdXJjZTpGdH0pLmRlbHRhKXt3bj0hMDticmVha31pZigiYXJyYXkiPT09bS5kYXRhVHlwZSYmKCFsdC5jb2x1bW5zfHwwPT09bHQuY29sdW1u'@;
put 'cy5sZW5ndGgpJiZsdC5hbGxvd0luc2VydENvbHVtbilmb3IoO08ucHJvcFRvQ29sKFN0W1d0XVsxXSk+bS5jb3VudENvbHMoKS0xOylpZigwPT09Ty5jcmVhdGVDb2wodm9pZCAwLHZvaWQgMCx7c291cmNlOkZ0fSkuZGVsdGEpe3duPSEwO2JyZWFrfXdufHxPLnNldChTdFtXdF1bMF0sU3Rb'@;
put 'V3RdWzFdLFN0W1d0XVszXSl9fWVsc2UgU3Quc3BsaWNlKFd0LDEpfW0uZm9yY2VGdWxsUmVuZGVyPSEwLGFlLmFkanVzdFJvd3NBbmRDb2xzKCksbS5ydW5Ib29rcygiYmVmb3JlQ2hhbmdlUmVuZGVyIixTdCxGdCkscGUubG9ja0VkaXRvcigpLG0uX3JlZnJlc2hCb3JkZXJzKG51bGwpLHBl'@;
put 'LnVubG9ja0VkaXRvcigpLG0udmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSxtLnJ1bkhvb2tzKCJhZnRlckNoYW5nZSIsU3QsRnR8fCJlZGl0Iik7dmFyIE5yPW0uZ2V0QWN0aXZlRWRpdG9yKCk7TnImJmlvKE5yLnJlZnJlc2hWYWx1ZSkmJk5yLnJlZnJlc2hWYWx1ZSgpfX1mdW5jdGlvbiBB'@;
put 'cihTdCxGdCxXdCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoU3QpP1N0OltbU3QsRnQsV3RdXX1mdW5jdGlvbiBFbihTdCxGdCl7dmFyIFd0PW0uZ2V0QWN0aXZlRWRpdG9yKCksd249bS5ydW5Ib29rcygiYmVmb3JlQ2hhbmdlIixTdCxGdHx8ImVkaXQiKSxTbj1TdC5maWx0ZXIoZnVuY3Rpb24o'@;
put 'YnIpe3JldHVybiBudWxsIT09YnJ9KTtyZXR1cm4hMT09PXdufHwwPT09U24ubGVuZ3RoPyhXdCYmV3QuY2FuY2VsQ2hhbmdlcygpLFtdKTpTbn10aGlzLmNvbHVtbkluZGV4TWFwcGVyLmFkZExvY2FsSG9vaygiY2FjaGVVcGRhdGVkIix5biksdGhpcy5yb3dJbmRleE1hcHBlci5hZGRMb2Nh'@;
put 'bEhvb2soImNhY2hlVXBkYXRlZCIseW4pLHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9vaygiYmVmb3JlU2V0UmFuZ2VTdGFydCIsZnVuY3Rpb24oU3Qpe2YucnVuSG9va3MoImJlZm9yZVNldFJhbmdlU3RhcnQiLFN0KX0pLHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9vaygiYmVmb3JlU2V0'@;
put 'UmFuZ2VTdGFydE9ubHkiLGZ1bmN0aW9uKFN0KXtmLnJ1bkhvb2tzKCJiZWZvcmVTZXRSYW5nZVN0YXJ0T25seSIsU3QpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJiZWZvcmVTZXRSYW5nZUVuZCIsZnVuY3Rpb24oU3Qpe2YucnVuSG9va3MoImJlZm9yZVNldFJhbmdlRW5kIixT'@;
put 'dCksU3Qucm93PDAmJihTdC5yb3c9Zi52aWV3Ll93dC53dFRhYmxlLmdldEZpcnN0VmlzaWJsZVJvdygpKSxTdC5jb2w8MCYmKFN0LmNvbD1mLnZpZXcuX3d0Lnd0VGFibGUuZ2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCkpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJhZnRlclNldFJh'@;
put 'bmdlRW5kIixmdW5jdGlvbihTdCl7dmFyIEZ0PWc1KCExKSxXdD1mLnNlbGVjdGlvbi5nZXRTZWxlY3RlZFJhbmdlKCksd249V3QuY3VycmVudCgpLFNuPXduLmZyb20sYnI9d24udG8sZHI9V3Quc2l6ZSgpLTE7Zi5ydW5Ib29rcygiYWZ0ZXJTZWxlY3Rpb24iLFNuLnJvdyxTbi5jb2wsYnIu'@;
put 'cm93LGJyLmNvbCxGdCxkciksZi5ydW5Ib29rcygiYWZ0ZXJTZWxlY3Rpb25CeVByb3AiLFNuLnJvdyxtLmNvbFRvUHJvcChTbi5jb2wpLGJyLnJvdyxtLmNvbFRvUHJvcChici5jb2wpLEZ0LGRyKTt2YXIgTHI9Zi5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5QW55SGVhZGVyKCksTnI9Zi5zZWxl'@;
put 'Y3Rpb24uc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCksZGk9ITA7aCYmKGRpPSExKSxGdC5pc1RvdWNoZWQoKSYmKGRpPSFGdC52YWx1ZSk7dmFyIHFyPWYuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpLFJpPWYuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpOyEx'@;
put 'IT09ZGkmJihMcj9xcj9mLnZpZXcuc2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KG0ucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChTdC5yb3cpKTpSaSYmZi52aWV3LnNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KG0uY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVu'@;
put 'ZGVyYWJsZUZyb21WaXN1YWxJbmRleChTdC5jb2wpKTpOciYmIWYuc2VsZWN0aW9uLmlzTXVsdGlwbGUoKT9mLnZpZXcuc2Nyb2xsVmlld3BvcnQoanQoTnIuZnJvbSkpOmYudmlldy5zY3JvbGxWaWV3cG9ydChqdChTdCkpKSxxciYmUmk/Z2koZi5yb290RWxlbWVudCxbImh0X19zZWxlY3Rp'@;
put 'b24tLXJvd3MiLCJodF9fc2VsZWN0aW9uLS1jb2x1bW5zIl0pOnFyPyhKbyhmLnJvb3RFbGVtZW50LCJodF9fc2VsZWN0aW9uLS1jb2x1bW5zIiksZ2koZi5yb290RWxlbWVudCwiaHRfX3NlbGVjdGlvbi0tcm93cyIpKTpSaT8oSm8oZi5yb290RWxlbWVudCwiaHRfX3NlbGVjdGlvbi0tcm93'@;
put 'cyIpLGdpKGYucm9vdEVsZW1lbnQsImh0X19zZWxlY3Rpb24tLWNvbHVtbnMiKSk6Sm8oZi5yb290RWxlbWVudCxbImh0X19zZWxlY3Rpb24tLXJvd3MiLCJodF9fc2VsZWN0aW9uLS1jb2x1bW5zIl0pLGYuX3JlZnJlc2hCb3JkZXJzKG51bGwpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxI'@;
put 'b29rKCJhZnRlclNlbGVjdGlvbkZpbmlzaGVkIixmdW5jdGlvbihTdCl7dmFyIEZ0PVN0Lmxlbmd0aC0xLFd0PVN0W0Z0XSx3bj1XdC5mcm9tLFNuPVd0LnRvO2YucnVuSG9va3MoImFmdGVyU2VsZWN0aW9uRW5kIix3bi5yb3csd24uY29sLFNuLnJvdyxTbi5jb2wsRnQpLGYucnVuSG9va3Mo'@;
put 'ImFmdGVyU2VsZWN0aW9uRW5kQnlQcm9wIix3bi5yb3csbS5jb2xUb1Byb3Aod24uY29sKSxTbi5yb3csbS5jb2xUb1Byb3AoU24uY29sKSxGdCl9KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVySXNNdWx0aXBsZVNlbGVjdGlvbiIsZnVuY3Rpb24oU3Qpe3ZhciBGdD1mLnJ1'@;
put 'bkhvb2tzKCJhZnRlcklzTXVsdGlwbGVTZWxlY3Rpb24iLFN0LnZhbHVlKTtTdC52YWx1ZSYmKFN0LnZhbHVlPUZ0KX0pLHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9vaygiYmVmb3JlTW9kaWZ5VHJhbnNmb3JtU3RhcnQiLGZ1bmN0aW9uKFN0KXtmLnJ1bkhvb2tzKCJtb2RpZnlUcmFuc2Zv'@;
put 'cm1TdGFydCIsU3QpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJhZnRlck1vZGlmeVRyYW5zZm9ybVN0YXJ0IixmdW5jdGlvbihTdCxGdCxXdCl7Zi5ydW5Ib29rcygiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1TdGFydCIsU3QsRnQsV3QpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxI'@;
put 'b29rKCJiZWZvcmVNb2RpZnlUcmFuc2Zvcm1FbmQiLGZ1bmN0aW9uKFN0KXtmLnJ1bkhvb2tzKCJtb2RpZnlUcmFuc2Zvcm1FbmQiLFN0KX0pLHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9vaygiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1FbmQiLGZ1bmN0aW9uKFN0LEZ0LFd0KXtmLnJ1bkhvb2tz'@;
put 'KCJhZnRlck1vZGlmeVRyYW5zZm9ybUVuZCIsU3QsRnQsV3QpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJhZnRlckRlc2VsZWN0IixmdW5jdGlvbigpe3BlLmRlc3Ryb3lFZGl0b3IoKSxmLl9yZWZyZXNoQm9yZGVycygpLEpvKGYucm9vdEVsZW1lbnQsWyJodF9fc2VsZWN0aW9u'@;
put 'LS1yb3dzIiwiaHRfX3NlbGVjdGlvbi0tY29sdW1ucyJdKSxmLnJ1bkhvb2tzKCJhZnRlckRlc2VsZWN0Iil9KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImluc2VydFJvd1JlcXVpcmUiLGZ1bmN0aW9uKFN0KXtmLmFsdGVyKCJpbnNlcnRfcm93X2Fib3ZlIixTdCwxLCJhdXRvIil9'@;
put 'KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImluc2VydENvbFJlcXVpcmUiLGZ1bmN0aW9uKFN0KXtmLmFsdGVyKCJpbnNlcnRfY29sX3N0YXJ0IixTdCwxLCJhdXRvIil9KSxhZT17YWx0ZXI6ZnVuY3Rpb24oRnQsV3Qpe3ZhciB3bixTbixicj1hcmd1bWVudHMubGVuZ3RoPjImJnZv'@;
put 'aWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MSxkcj1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMCxMcj1hcmd1bWVudHMubGVuZ3RoPjQ/YXJndW1lbnRzWzRdOnZvaWQgMCxOcj1mdW5jdGlvbihwcyl7aWYoMD09PXBzLmxlbmd0aClyZXR1cm5bXTt2YXIg'@;
put 'dWw9RTkocHMpO3JldHVybiB1bC5zb3J0KGZ1bmN0aW9uKFRzLEdsKXt2YXIgbHM9emgoVHMsMSlbMF0sVnM9emgoR2wsMSlbMF07cmV0dXJuIGxzPT09VnM/MDpscz5Wcz8xOi0xfSksUHModWwsZnVuY3Rpb24oVHMsR2wpe3ZhciBOcz16aChHbCwyKSxscz1Oc1swXSxTdT1Oc1sxXSxWcz1U'@;
put 'c1tUcy5sZW5ndGgtMV0sVzE9emgoVnMsMiksc209VzFbMF0rVzFbMV07aWYobHM8PXNtKXt2YXIgJGQ9TWF0aC5tYXgoU3UtKHNtLWxzKSwwKTtWc1sxXSs9JGR9ZWxzZSBUcy5wdXNoKFtscyxTdV0pO3JldHVybiBUc30sW3VsWzBdXSl9O3N3aXRjaChGdCl7Y2FzZSJpbnNlcnRfcm93X2Jl'@;
put 'bG93IjpjYXNlImluc2VydF9yb3dfYWJvdmUiOnZhciBkaT1tLmNvdW50U291cmNlUm93cygpO2lmKGx0Lm1heFJvd3M9PT1kaSlyZXR1cm47dmFyIHFyPSJpbnNlcnRfcm93X2JlbG93Ij09PUZ0PyJiZWxvdyI6ImFib3ZlIjtXdD1udWxsIT09KHduPVd0KSYmdm9pZCAwIT09d24/d246ImJl'@;
put 'bG93Ij09PXFyP2RpOjA7dmFyIFJpPU8uY3JlYXRlUm93KFd0LGJyLHtzb3VyY2U6ZHIsbW9kZTpxcn0pLERvPVJpLmRlbHRhLG9hPVJpLnN0YXJ0UGh5c2ljYWxJbmRleDtpZihEbyl7dmFyIGtvPVh0LnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpLHFpPWtvPy5mcm9tLHh0PXFpPy5yb3csTGk9'@;
put 'bS50b1Zpc3VhbFJvdyhvYSk7aWYoWHQuaXNTZWxlY3RlZEJ5Q29ybmVyKCkpbS5zZWxlY3RBbGwoKTtlbHNlIGlmKGlvKHh0KSYmeHQ+PUxpKXt2YXIgWmE9a28udG8sZHM9WmEucm93LHZsPVphLmNvbCxocz1xaS5jb2w7WHQuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkmJihocz0tMSksWHQu'@;
put 'Z2V0U2VsZWN0ZWRSYW5nZSgpLnBvcCgpLFh0LnNldFJhbmdlU3RhcnRPbmx5KG0uX2NyZWF0ZUNlbGxDb29yZHMoeHQrRG8saHMpLCEwKSxYdC5zZXRSYW5nZUVuZChtLl9jcmVhdGVDZWxsQ29vcmRzKGRzK0RvLHZsKSl9ZWxzZSBtLl9yZWZyZXNoQm9yZGVycygpfWJyZWFrO2Nhc2UiaW5z'@;
put 'ZXJ0X2NvbF9zdGFydCI6Y2FzZSJpbnNlcnRfY29sX2VuZCI6dmFyIEhzPSJpbnNlcnRfY29sX2VuZCI9PT1GdD8iZW5kIjoic3RhcnQiO1d0PW51bGwhPT0oU249V3QpJiZ2b2lkIDAhPT1Tbj9TbjoiZW5kIj09PUhzP20uY291bnRTb3VyY2VDb2xzKCk6MDt2YXIgYzA9Ty5jcmVhdGVDb2wo'@;
put 'V3QsYnIse3NvdXJjZTpkcixtb2RlOkhzfSksRGM9YzAuZGVsdGEsc3U9YzAuc3RhcnRQaHlzaWNhbEluZGV4O2lmKERjKXtpZihBcnJheS5pc0FycmF5KGx0LmNvbEhlYWRlcnMpKXt2YXIgQjE9W20udG9WaXN1YWxDb2x1bW4oc3UpLDBdO0IxLmxlbmd0aCs9RGMsQXJyYXkucHJvdG90eXBl'@;
put 'LnNwbGljZS5hcHBseShsdC5jb2xIZWFkZXJzLEIxKX12YXIgajE9WHQuc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCksSWM9ajE/LmZyb20sdGM9SWM/LmNvbCxSYz1tLnRvVmlzdWFsQ29sdW1uKHN1KTtpZihYdC5pc1NlbGVjdGVkQnlDb3JuZXIoKSltLnNlbGVjdEFsbCgpO2Vsc2UgaWYoaW8o'@;
put 'dGMpJiZ0Yz49UmMpe3ZhciB6MT1qMS50byxVMT16MS5yb3csWjE9ejEuY29sLEdkPUljLnJvdztYdC5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSYmKEdkPS0xKSxYdC5nZXRTZWxlY3RlZFJhbmdlKCkucG9wKCksWHQuc2V0UmFuZ2VTdGFydE9ubHkobS5fY3JlYXRlQ2VsbENvb3JkcyhH'@;
put 'ZCx0YytEYyksITApLFh0LnNldFJhbmdlRW5kKG0uX2NyZWF0ZUNlbGxDb29yZHMoVTEsWjErRGMpKX1lbHNlIG0uX3JlZnJlc2hCb3JkZXJzKCl9YnJlYWs7Y2FzZSJyZW1vdmVfcm93Ijp2YXIgemY9ZnVuY3Rpb24ocHMpe3ZhciB1bD0wO1JuKHBzLGZ1bmN0aW9uKHEwKXt2YXIgVHM9emgo'@;
put 'cTAsMiksR2w9VHNbMF0sTnM9VHNbMV0sbHM9d3UoR2wpP20uY291bnRSb3dzKCktMTpNYXRoLm1heChHbC11bCwwKTtpZihOdW1iZXIuaXNJbnRlZ2VyKEdsKSYmKEdsPU1hdGgubWF4KEdsLXVsLDApKSxPLnJlbW92ZVJvdyhHbCxOcyxkcikpe3ZhciBWcz1tLmNvdW50Um93cygpLFcxPWx0'@;
put 'LmZpeGVkUm93c1RvcDtXMT49bHMrMSYmKGx0LmZpeGVkUm93c1RvcC09TWF0aC5taW4oTnMsVzEtbHMpKTt2YXIgWDM9bHQuZml4ZWRSb3dzQm90dG9tO1gzJiZscz49VnMtWDMmJihsdC5maXhlZFJvd3NCb3R0b20tPU1hdGgubWluKE5zLFgzKSksdWwrPU5zfX0pfTtBcnJheS5pc0FycmF5'@;
put 'KFd0KT96ZihOcihXdCkpOnpmKFtbV3QsYnJdXSksYWUuYWRqdXN0Um93c0FuZENvbHMoKSxtLl9yZWZyZXNoQm9yZGVycygpO2JyZWFrO2Nhc2UicmVtb3ZlX2NvbCI6dmFyIGhjPWZ1bmN0aW9uKHBzKXt2YXIgdWw9MDtSbihwcyxmdW5jdGlvbihxMCl7dmFyIFRzPXpoKHEwLDIpLEdsPVRz'@;
put 'WzBdLE5zPVRzWzFdLGxzPXd1KEdsKT9tLmNvdW50Q29scygpLTE6TWF0aC5tYXgoR2wtdWwsMCksU3U9bS50b1BoeXNpY2FsQ29sdW1uKGxzKTtpZihOdW1iZXIuaXNJbnRlZ2VyKEdsKSYmKEdsPU1hdGgubWF4KEdsLXVsLDApKSxPLnJlbW92ZUNvbChHbCxOcyxkcikpe3ZhciBXMT1sdC5m'@;
put 'aXhlZENvbHVtbnNTdGFydDtXMT49bHMrMSYmKGx0LmZpeGVkQ29sdW1uc1N0YXJ0LT1NYXRoLm1pbihOcyxXMS1scykpLEFycmF5LmlzQXJyYXkobHQuY29sSGVhZGVycykmJih0eXBlb2YgU3U+InUiJiYoU3U9LTEpLGx0LmNvbEhlYWRlcnMuc3BsaWNlKFN1LE5zKSksdWwrPU5zfX0pfTtB'@;
put 'cnJheS5pc0FycmF5KFd0KT9oYyhOcihXdCkpOmhjKFtbV3QsYnJdXSksYWUuYWRqdXN0Um93c0FuZENvbHMoKSxtLl9yZWZyZXNoQm9yZGVycygpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCdUaGVyZSBpcyBubyBzdWNoIGFjdGlvbiAiJy5jb25jYXQoRnQsJyInKSl9THJ8fGFl'@;
put 'LmFkanVzdFJvd3NBbmRDb2xzKCl9LGFkanVzdFJvd3NBbmRDb2xzOmZ1bmN0aW9uKCl7dmFyIGRpLEZ0PWx0Lm1pblJvd3MsV3Q9bHQubWluU3BhcmVSb3dzLHduPWx0Lm1pbkNvbHMsU249bHQubWluU3BhcmVDb2xzO2lmKDA9PT1tLmNvdW50Um93cygpJiYwPT09bS5jb3VudENvbHMoKSYm'@;
put 'WHQuZGVzZWxlY3QoKSxGdCl7dmFyIGJyPW0uY291bnRSb3dzKCk7YnI8RnQmJk8uY3JlYXRlUm93KGJyLEZ0LWJyLHtzb3VyY2U6ImF1dG8ifSl9aWYoV3Qpe3ZhciBkcj1tLmNvdW50RW1wdHlSb3dzKCEwKTtpZihkcjxXdCl7dmFyIE5yPU1hdGgubWluKFd0LWRyLGx0Lm1heFJvd3MtbS5j'@;
put 'b3VudFNvdXJjZVJvd3MoKSk7Ty5jcmVhdGVSb3cobS5jb3VudFJvd3MoKSxOcix7c291cmNlOiJhdXRvIn0pfX0od258fFNuKSYmKGRpPW0uY291bnRFbXB0eUNvbHMoITApKTt2YXIgcXI9bS5jb3VudENvbHMoKTtpZih3biYmIWx0LmNvbHVtbnMmJnFyPHduKXt2YXIgUmk9d24tcXI7ZGkr'@;
put 'PVJpLE8uY3JlYXRlQ29sKHFyLFJpLHtzb3VyY2U6ImF1dG8ifSl9aWYoU24mJiFsdC5jb2x1bW5zJiYiYXJyYXkiPT09bS5kYXRhVHlwZSYmZGk8U24pe3FyPW0uY291bnRDb2xzKCk7dmFyIG9hPU1hdGgubWluKFNuLWRpLGx0Lm1heENvbHMtcXIpO08uY3JlYXRlQ29sKHFyLG9hLHtzb3Vy'@;
put 'Y2U6ImF1dG8ifSl9aWYoWHQuaXNTZWxlY3RlZCgpKXt2YXIga289bS5jb3VudFJvd3MoKSxxaT1tLmNvdW50Q29scygpO1JuKFh0LnNlbGVjdGVkUmFuZ2UsZnVuY3Rpb24oeHQpe3ZhciBMaT0hMSxaYT14dC5mcm9tLnJvdyxkcz14dC5mcm9tLmNvbCx2bD14dC50by5yb3csaHM9eHQudG8u'@;
put 'Y29sO1phPmtvLTE/KExpPSEwLHZsPihaYT1rby0xKSYmKHZsPVphKSk6dmw+a28tMSYmKExpPSEwLFphPih2bD1rby0xKSYmKFphPXZsKSksZHM+cWktMT8oTGk9ITAsaHM+KGRzPXFpLTEpJiYoaHM9ZHMpKTpocz5xaS0xJiYoTGk9ITAsZHM+KGhzPXFpLTEpJiYoZHM9aHMpKSxMaSYmbS5z'@;
put 'ZWxlY3RDZWxsKFphLGRzLHZsLGhzKX0pfW0udmlldyYmbS52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpfSxwb3B1bGF0ZUZyb21BcnJheTpmdW5jdGlvbihGdCxXdCx3bixTbixicil7dmFyIGRyLExyLE5yLGRpLHFyPVtdLFJpPXt9LERvPVtdLG9hPUZ0LnJvdyxrbz1GdC5jb2w7aWYoMD09'@;
put 'PShMcj1XdC5sZW5ndGgpKXJldHVybiExO3ZhciBxaT0wLHh0PTA7c3dpdGNoKHBhKHduKSYmKHFpPXduLmNvbC1rbysxLHh0PXduLnJvdy1vYSsxKSxicil7Y2FzZSJzaGlmdF9kb3duIjp2YXIgTGk9RlMoV3QpLFphPUxpLmxlbmd0aCxkcz1NYXRoLm1heChaYSxxaSksdmw9bS5nZXREYXRh'@;
put 'KCkuc2xpY2Uob2EpLGhzPUZTKHZsKS5zbGljZShrbyxrbytkcyk7Zm9yKE5yPTA7TnI8ZHM7TnIrPTEpaWYoTnI8WmEpe2Zvcihkcj0wLExyPUxpW05yXS5sZW5ndGg7ZHI8eHQtTHI7ZHIrPTEpTGlbTnJdLnB1c2goTGlbTnJdW2RyJUxyXSk7RG8ucHVzaChMaVtOcl0uY29uY2F0KE5yPGhz'@;
put 'Lmxlbmd0aD9oc1tOcl06bmV3IEFycmF5KHZsLmxlbmd0aCkuZmlsbChudWxsKSkpfWVsc2UgRG8ucHVzaChMaVtOciVaYV0uY29uY2F0KGhzW05yXSkpO20ucG9wdWxhdGVGcm9tQXJyYXkob2Esa28sRlMoRG8pKTticmVhaztjYXNlInNoaWZ0X3JpZ2h0Ijp2YXIgSHM9V3QubGVuZ3RoLGMw'@;
put 'PU1hdGgubWF4KEhzLHh0KSxEYz1tLmdldERhdGEoKS5zbGljZShvYSkubWFwKGZ1bmN0aW9uKEdsKXtyZXR1cm4gR2wuc2xpY2Uoa28pfSk7Zm9yKGRyPTA7ZHI8YzA7ZHIrPTEpaWYoZHI8SHMpe2ZvcihOcj0wLGRpPVd0W2RyXS5sZW5ndGg7TnI8cWktZGk7TnIrPTEpV3RbZHJdLnB1c2go'@;
put 'V3RbZHJdW05yJWRpXSk7dmFyIEIxO2lmKGRyPERjLmxlbmd0aClmb3IodmFyIHN1PTA7c3U8RGNbZHJdLmxlbmd0aDtzdSs9MSlXdFtkcl0ucHVzaChEY1tkcl1bc3VdKTtlbHNlKEIxPVd0W2RyXSkucHVzaC5hcHBseShCMSxFOShuZXcgQXJyYXkoRGNbMF0ubGVuZ3RoKS5maWxsKG51bGwp'@;
put 'KSl9ZWxzZSBXdC5wdXNoKFd0W2RyJUxyXS5zbGljZSgwLGMwKS5jb25jYXQoRGNbZHJdKSk7bS5wb3B1bGF0ZUZyb21BcnJheShvYSxrbyxXdCk7YnJlYWs7ZGVmYXVsdDpSaS5yb3c9RnQucm93LFJpLmNvbD1GdC5jb2w7dmFyIFJjLGoxPTAsSWM9MCx0Yz0hMCx6MT1mdW5jdGlvbihOcyl7'@;
put 'dmFyIGxzPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsLFN1PVd0W05zJVd0Lmxlbmd0aF07cmV0dXJuIG51bGwhPT1scz9TdVtscyVTdS5sZW5ndGhdOlN1fSxVMT1XdC5sZW5ndGgsWjE9d24/d24ucm93LUZ0LnJvdysxOjA7Zm9y'@;
put 'KExyPXduP1oxOk1hdGgubWF4KFUxLFoxKSxkcj0wO2RyPExyJiYhKHduJiZSaS5yb3c+d24ucm93JiZaMT5VMXx8IWx0LmFsbG93SW5zZXJ0Um93JiZSaS5yb3c+bS5jb3VudFJvd3MoKS0xfHxSaS5yb3c+PWx0Lm1heFJvd3MpO2RyKyspe3ZhciBHZD1kci1qMSx6Zj16MShHZCkubGVuZ3Ro'@;
put 'LGhjPXduP3duLmNvbC1GdC5jb2wrMTowO2lmKGRpPXduP2hjOk1hdGgubWF4KHpmLGhjKSxSaS5jb2w9RnQuY29sLFJjPW0uZ2V0Q2VsbE1ldGEoUmkucm93LFJpLmNvbCksIkNvcHlQYXN0ZS5wYXN0ZSIhPT1TbiYmIkF1dG9maWxsLmZpbGwiIT09U258fCFSYy5za2lwUm93T25QYXN0ZSl7'@;
put 'Zm9yKEljPTAsTnI9MDtOcjxkaSYmISh3biYmUmkuY29sPnduLmNvbCYmaGM+emZ8fCFsdC5hbGxvd0luc2VydENvbHVtbiYmUmkuY29sPm0uY291bnRDb2xzKCktMXx8UmkuY29sPj1sdC5tYXhDb2xzKTtOcisrKWlmKFJjPW0uZ2V0Q2VsbE1ldGEoUmkucm93LFJpLmNvbCksIkNvcHlQYXN0'@;
put 'ZS5wYXN0ZSIhPT1TbiYmIkF1dG9maWxsLmZpbGwiIT09U258fCFSYy5za2lwQ29sdW1uT25QYXN0ZSlpZihSYy5yZWFkT25seSYmIlVuZG9SZWRvLnVuZG8iIT09U24pUmkuY29sKz0xO2Vsc2V7dmFyIHBzPXoxKEdkLE5yLUljKSx1bD1tLmdldERhdGFBdENlbGwoUmkucm93LFJpLmNvbCk7'@;
put 'aWYobnVsbCE9PXBzJiYib2JqZWN0Ij09PUcwKHBzKSlpZihBcnJheS5pc0FycmF5KHBzKSYmbnVsbD09PXVsJiYodWw9W10pLG51bGw9PT11bHx8Im9iamVjdCIhPT1HMCh1bCkpdGM9ITE7ZWxzZXt2YXIgcTA9UDcoQXJyYXkuaXNBcnJheSh1bCk/dWw6dWxbMF18fHVsKSxUcz1QNyhBcnJh'@;
put 'eS5pc0FycmF5KHBzKT9wczpwc1swXXx8cHMpO2pJKHEwLFRzKXx8QXJyYXkuaXNBcnJheShxMCkmJkFycmF5LmlzQXJyYXkoVHMpP3BzPXhjKHBzKTp0Yz0hMX1lbHNlIG51bGwhPT11bCYmIm9iamVjdCI9PT1HMCh1bCkmJih0Yz0hMSk7dGMmJnFyLnB1c2goW1JpLnJvdyxSaS5jb2wscHNd'@;
put 'KSx0Yz0hMCxSaS5jb2wrPTF9ZWxzZSBJYys9MSxSaS5jb2wrPTEsZGkrPTE7Umkucm93Kz0xfWVsc2UgajErPTEsUmkucm93Kz0xLExyKz0xfW0uc2V0RGF0YUF0Q2VsbChxcixudWxsLG51bGwsU258fCJwb3B1bGF0ZUZyb21BcnJheSIpfX19LHRoaXMuaW5pdD1mdW5jdGlvbigpe1guc2V0'@;
put 'RGF0YShsdC5kYXRhKSxtLnJ1bkhvb2tzKCJiZWZvcmVJbml0IiksKFBkKCl8fGZZKCkpJiZnaShtLnJvb3RFbGVtZW50LCJtb2JpbGUiKSx0aGlzLnVwZGF0ZVNldHRpbmdzKGx0LCEwKSx0aGlzLnZpZXc9bmV3IGR0dCh0aGlzKSxwZT1xR2UuZ2V0SW5zdGFuY2UobSxsdCxYdCksbS5ydW5I'@;
put 'b29rcygiaW5pdCIpLHRoaXMuZm9yY2VGdWxsUmVuZGVyPSEwLHRoaXMudmlldy5yZW5kZXIoKSxiZSYmbnVsbD09PW0ucm9vdEVsZW1lbnQub2Zmc2V0UGFyZW50JiZTMGUobS5yb290RWxlbWVudCxmdW5jdGlvbigpe20udmlldy5fd3Qud3RPdmVybGF5cy51cGRhdGVMYXN0U3ByZWFkZXJT'@;
put 'aXplKCksbS5yZW5kZXIoKSxtLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCl9KSwib2JqZWN0Ij09PUcwKGJlKSYmKG0ucnVuSG9va3MoImFmdGVyQ2hhbmdlIixiZVswXSxiZVsxXSksYmU9ITEpLG0ucnVuSG9va3MoImFmdGVySW5pdCIpfSx0aGlzLl9jcmVhdGVDZWxsQ29vcmRzPWZ1bmN0'@;
put 'aW9uKFN0LEZ0KXtyZXR1cm4gbS52aWV3Ll93dC5jcmVhdGVDZWxsQ29vcmRzKFN0LEZ0KX0sdGhpcy5fY3JlYXRlQ2VsbFJhbmdlPWZ1bmN0aW9uKFN0LEZ0LFd0KXtyZXR1cm4gbS52aWV3Ll93dC5jcmVhdGVDZWxsUmFuZ2UoU3QsRnQsV3QpfSx0aGlzLnZhbGlkYXRlQ2VsbD1mdW5jdGlv'@;
put 'bihTdCxGdCxXdCx3bil7dmFyIGRyLFNuPW0uZ2V0Q2VsbFZhbGlkYXRvcihGdCk7ZnVuY3Rpb24gYnIoZHIpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiYhYXJndW1lbnRzWzFdfHwhMD09PUZ0LmhpZGRlbilXdChkcik7ZWxzZXt2YXIgTnI9RnQudmlz'@;
put 'dWFsQ29sLGRpPUZ0LnZpc3VhbFJvdyxxcj1tLmdldENlbGwoZGksTnIsITApO2lmKHFyJiYiVEgiIT09cXIubm9kZU5hbWUpe3ZhciBSaT1tLnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZGkpLERvPW0uY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJs'@;
put 'ZUZyb21WaXN1YWxJbmRleChOcik7bS52aWV3Ll93dC5nZXRTZXR0aW5nKCJjZWxsUmVuZGVyZXIiLFJpLERvLHFyKX1XdChkcil9fWEwZShTbikmJihkcj1TbixTbj1mdW5jdGlvbihMcixOcil7TnIoZHIudGVzdChMcikpfSksUGwoU24pPyhTdD1tLnJ1bkhvb2tzKCJiZWZvcmVWYWxpZGF0'@;
put 'ZSIsU3QsRnQudmlzdWFsUm93LEZ0LnByb3Asd24pLG0uX3JlZ2lzdGVySW1tZWRpYXRlKGZ1bmN0aW9uKCl7U24uY2FsbChGdCxTdCxmdW5jdGlvbihkcil7bSYmKGRyPW0ucnVuSG9va3MoImFmdGVyVmFsaWRhdGUiLGRyLFN0LEZ0LnZpc3VhbFJvdyxGdC5wcm9wLHduKSxGdC52YWxpZD1k'@;
put 'cixicihkciksbS5ydW5Ib29rcygicG9zdEFmdGVyVmFsaWRhdGUiLGRyLFN0LEZ0LnZpc3VhbFJvdyxGdC5wcm9wLHduKSl9KX0pKTptLl9yZWdpc3RlckltbWVkaWF0ZShmdW5jdGlvbigpe0Z0LnZhbGlkPSEwLGJyKEZ0LnZhbGlkLCExKX0pfSx0aGlzLnNldERhdGFBdENlbGw9ZnVuY3Rp'@;
put 'b24oU3QsRnQsV3Qsd24pe3ZhciBMcixOcixkaSxTbj1BcihTdCxGdCxXdCksYnI9W10sZHI9d247Zm9yKExyPTAsTnI9U24ubGVuZ3RoO0xyPE5yO0xyKyspe2lmKCJvYmplY3QiIT09RzAoU25bTHJdKSl0aHJvdyBuZXcgRXJyb3IoIk1ldGhvZCBgc2V0RGF0YUF0Q2VsbGAgYWNjZXB0cyBy'@;
put 'b3cgbnVtYmVyIG9yIGNoYW5nZXMgYXJyYXkgb2YgYXJyYXlzIGFzIGl0cyBmaXJzdCBwYXJhbWV0ZXIiKTtpZigibnVtYmVyIiE9dHlwZW9mIFNuW0xyXVsxXSl0aHJvdyBuZXcgRXJyb3IoIk1ldGhvZCBgc2V0RGF0YUF0Q2VsbGAgYWNjZXB0cyByb3cgYW5kIGNvbHVtbiBudW1iZXIgYXMg'@;
put 'aXRzIHBhcmFtZXRlcnMuIElmIHlvdSB3YW50IHRvIHVzZSBvYmplY3QgcHJvcGVydHkgbmFtZSwgdXNlIG1ldGhvZCBgc2V0RGF0YUF0Um93UHJvcGAiKTtkaT1TbltMcl1bMV0+PXRoaXMuY291bnRDb2xzKCk/U25bTHJdWzFdOk8uY29sVG9Qcm9wKFNuW0xyXVsxXSksYnIucHVzaChbU25b'@;
put 'THJdWzBdLGRpLFguZ2V0QXRDZWxsKHRoaXMudG9QaHlzaWNhbFJvdyhTbltMcl1bMF0pLFNuW0xyXVsxXSksU25bTHJdWzJdXSl9IWRyJiYib2JqZWN0Ij09PUcwKFN0KSYmKGRyPUZ0KTt2YXIgcXI9RW4oYnIsd24pO20ucnVuSG9va3MoImFmdGVyU2V0RGF0YUF0Q2VsbCIscXIsZHIpLGly'@;
put 'KHFyLGRyLGZ1bmN0aW9uKCl7c2kocXIsZHIpfSl9LHRoaXMuc2V0RGF0YUF0Um93UHJvcD1mdW5jdGlvbihTdCxGdCxXdCx3bil7dmFyIExyLE5yLFNuPUFyKFN0LEZ0LFd0KSxicj1bXSxkcj13bjtmb3IoTHI9MCxOcj1Tbi5sZW5ndGg7THI8TnI7THIrKylici5wdXNoKFtTbltMcl1bMF0s'@;
put 'U25bTHJdWzFdLFguZ2V0QXRDZWxsKHRoaXMudG9QaHlzaWNhbFJvdyhTbltMcl1bMF0pLFNuW0xyXVsxXSksU25bTHJdWzJdXSk7IWRyJiYib2JqZWN0Ij09PUcwKFN0KSYmKGRyPUZ0KTt2YXIgZGk9RW4oYnIsd24pO20ucnVuSG9va3MoImFmdGVyU2V0RGF0YUF0Um93UHJvcCIsZGksZHIp'@;
put 'LGlyKGRpLGRyLGZ1bmN0aW9uKCl7c2koZGksZHIpfSl9LHRoaXMubGlzdGVuPWZ1bmN0aW9uKCl7bSYmIW0uaXNMaXN0ZW5pbmcoKSYmKCQkPW0uZ3VpZCxtLnJ1bkhvb2tzKCJhZnRlckxpc3RlbiIpKX0sdGhpcy51bmxpc3Rlbj1mdW5jdGlvbigpe3RoaXMuaXNMaXN0ZW5pbmcoKSYmKCQk'@;
put 'PW51bGwsbS5ydW5Ib29rcygiYWZ0ZXJVbmxpc3RlbiIpKX0sdGhpcy5pc0xpc3RlbmluZz1mdW5jdGlvbigpe3JldHVybiAkJD09PW0uZ3VpZH0sdGhpcy5kZXN0cm95RWRpdG9yPWZ1bmN0aW9uKCl7bS5fcmVmcmVzaEJvcmRlcnMoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1'@;
put 'bWVudHNbMF0mJmFyZ3VtZW50c1swXSwhKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdKX0sdGhpcy5wb3B1bGF0ZUZyb21BcnJheT1mdW5jdGlvbihTdCxGdCxXdCx3bixTbixicixkcil7aWYoIm9iamVjdCIhPT1HMChXdCl8fCJvYmpl'@;
put 'Y3QiIT09RzAoV3RbMF0pKXRocm93IG5ldyBFcnJvcigicG9wdWxhdGVGcm9tQXJyYXkgcGFyYW1ldGVyIGBpbnB1dGAgbXVzdCBiZSBhbiBhcnJheSBvZiBhcnJheXMiKTt2YXIgTHI9Im51bWJlciI9PXR5cGVvZiB3bj9tLl9jcmVhdGVDZWxsQ29vcmRzKHduLFNuKTpudWxsO3JldHVybiBh'@;
put 'ZS5wb3B1bGF0ZUZyb21BcnJheShtLl9jcmVhdGVDZWxsQ29vcmRzKFN0LEZ0KSxXdCxMcixicixkcil9LHRoaXMuc3BsaWNlQ29sPWZ1bmN0aW9uKFN0LEZ0LFd0KXtmb3IodmFyIHduLFNuPWFyZ3VtZW50cy5sZW5ndGgsYnI9bmV3IEFycmF5KFNuPjM/U24tMzowKSxkcj0zO2RyPFNuO2Ry'@;
put 'KyspYnJbZHItM109YXJndW1lbnRzW2RyXTtyZXR1cm4od249Tykuc3BsaWNlQ29sLmFwcGx5KHduLFtTdCxGdCxXdF0uY29uY2F0KGJyKSl9LHRoaXMuc3BsaWNlUm93PWZ1bmN0aW9uKFN0LEZ0LFd0KXtmb3IodmFyIHduLFNuPWFyZ3VtZW50cy5sZW5ndGgsYnI9bmV3IEFycmF5KFNuPjM/'@;
put 'U24tMzowKSxkcj0zO2RyPFNuO2RyKyspYnJbZHItM109YXJndW1lbnRzW2RyXTtyZXR1cm4od249Tykuc3BsaWNlUm93LmFwcGx5KHduLFtTdCxGdCxXdF0uY29uY2F0KGJyKSl9LHRoaXMuZ2V0U2VsZWN0ZWQ9ZnVuY3Rpb24oKXtpZihYdC5pc1NlbGVjdGVkKCkpcmV0dXJuIGhhKFh0Lmdl'@;
put 'dFNlbGVjdGVkUmFuZ2UoKSxmdW5jdGlvbihTdCl7dmFyIEZ0PVN0LmZyb20sV3Q9U3QudG87cmV0dXJuW0Z0LnJvdyxGdC5jb2wsV3Qucm93LFd0LmNvbF19KX0sdGhpcy5nZXRTZWxlY3RlZExhc3Q9ZnVuY3Rpb24oKXt2YXIgRnQsU3Q9dGhpcy5nZXRTZWxlY3RlZCgpO3JldHVybiBTdCYm'@;
put 'U3QubGVuZ3RoPjAmJihGdD1TdFtTdC5sZW5ndGgtMV0pLEZ0fSx0aGlzLmdldFNlbGVjdGVkUmFuZ2U9ZnVuY3Rpb24oKXtpZihYdC5pc1NlbGVjdGVkKCkpcmV0dXJuIEFycmF5LmZyb20oWHQuZ2V0U2VsZWN0ZWRSYW5nZSgpKX0sdGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdD1mdW5jdGlv'@;
put 'bigpe3ZhciBGdCxTdD10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKTtyZXR1cm4gU3QmJlN0Lmxlbmd0aD4wJiYoRnQ9U3RbU3QubGVuZ3RoLTFdKSxGdH0sdGhpcy5lbXB0eVNlbGVjdGVkQ2VsbHM9ZnVuY3Rpb24oU3Qpe3ZhciBGdD10aGlzO2lmKFh0LmlzU2VsZWN0ZWQoKSYmMCE9PXRoaXMu'@;
put 'Y291bnRSb3dzKCkmJjAhPT10aGlzLmNvdW50Q29scygpKXt2YXIgV3Q9W107Um4oWHQuZ2V0U2VsZWN0ZWRSYW5nZSgpLGZ1bmN0aW9uKHduKXt2YXIgU249d24uZ2V0VG9wU3RhcnRDb3JuZXIoKSxicj13bi5nZXRCb3R0b21FbmRDb3JuZXIoKTtfbyhTbi5yb3csYnIucm93LGZ1bmN0aW9u'@;
put 'KGRyKXtfbyhTbi5jb2wsYnIuY29sLGZ1bmN0aW9uKExyKXtGdC5nZXRDZWxsTWV0YShkcixMcikucmVhZE9ubHl8fFd0LnB1c2goW2RyLExyLG51bGxdKX0pfSl9KSxXdC5sZW5ndGg+MCYmdGhpcy5zZXREYXRhQXRDZWxsKFd0LFN0KX19LHRoaXMuaXNSZW5kZXJTdXNwZW5kZWQ9ZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gdGhpcy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyPjB9LHRoaXMuc3VzcGVuZFJlbmRlcj1mdW5jdGlvbigpe3RoaXMucmVuZGVyU3VzcGVuZGVkQ291bnRlcis9MX0sdGhpcy5yZXN1bWVSZW5kZXI9ZnVuY3Rpb24oKXt2YXIgU3Q9dGhpcy5yZW5kZXJTdXNwZW5kZWRDb3Vu'@;
put 'dGVyLTE7dGhpcy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyPU1hdGgubWF4KFN0LDApLCF0aGlzLmlzUmVuZGVyU3VzcGVuZGVkKCkmJlN0PT09dGhpcy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyJiYodGhpcy5yZW5kZXJDYWxsP3RoaXMucmVuZGVyKCk6dGhpcy5fcmVmcmVzaEJvcmRlcnMobnVs'@;
put 'bCkpfSx0aGlzLnJlbmRlcj1mdW5jdGlvbigpe3RoaXMudmlldyYmKHRoaXMucmVuZGVyQ2FsbD0hMCx0aGlzLmZvcmNlRnVsbFJlbmRlcj0hMCx0aGlzLmlzUmVuZGVyU3VzcGVuZGVkKCl8fChwZS5sb2NrRWRpdG9yKCksdGhpcy5fcmVmcmVzaEJvcmRlcnMobnVsbCkscGUudW5sb2NrRWRp'@;
put 'dG9yKCkpKX0sdGhpcy5iYXRjaFJlbmRlcj1mdW5jdGlvbihTdCl7dGhpcy5zdXNwZW5kUmVuZGVyKCk7dmFyIEZ0PVN0KCk7cmV0dXJuIHRoaXMucmVzdW1lUmVuZGVyKCksRnR9LHRoaXMuaXNFeGVjdXRpb25TdXNwZW5kZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5leGVjdXRpb25TdXNw'@;
put 'ZW5kZWRDb3VudGVyPjB9LHRoaXMuc3VzcGVuZEV4ZWN1dGlvbj1mdW5jdGlvbigpe3RoaXMuZXhlY3V0aW9uU3VzcGVuZGVkQ291bnRlcis9MSx0aGlzLmNvbHVtbkluZGV4TWFwcGVyLnN1c3BlbmRPcGVyYXRpb25zKCksdGhpcy5yb3dJbmRleE1hcHBlci5zdXNwZW5kT3BlcmF0aW9ucygp'@;
put 'fSx0aGlzLnJlc3VtZUV4ZWN1dGlvbj1mdW5jdGlvbigpe3ZhciBTdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLEZ0PXRoaXMuZXhlY3V0aW9uU3VzcGVuZGVkQ291bnRlci0xO3RoaXMuZXhlY3V0aW9uU3VzcGVuZGVkQ291bnRlcj1N'@;
put 'YXRoLm1heChGdCwwKSwoIXRoaXMuaXNFeGVjdXRpb25TdXNwZW5kZWQoKSYmRnQ9PT10aGlzLmV4ZWN1dGlvblN1c3BlbmRlZENvdW50ZXJ8fFN0KSYmKHRoaXMuY29sdW1uSW5kZXhNYXBwZXIucmVzdW1lT3BlcmF0aW9ucygpLHRoaXMucm93SW5kZXhNYXBwZXIucmVzdW1lT3BlcmF0aW9u'@;
put 'cygpKX0sdGhpcy5iYXRjaEV4ZWN1dGlvbj1mdW5jdGlvbihTdCl7dmFyIEZ0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07dGhpcy5zdXNwZW5kRXhlY3V0aW9uKCk7dmFyIFd0PVN0KCk7cmV0dXJuIHRoaXMucmVzdW1lRXhlY3V0aW9u'@;
put 'KEZ0KSxXdH0sdGhpcy5iYXRjaD1mdW5jdGlvbihTdCl7dGhpcy5zdXNwZW5kUmVuZGVyKCksdGhpcy5zdXNwZW5kRXhlY3V0aW9uKCk7dmFyIEZ0PVN0KCk7cmV0dXJuIHRoaXMucmVzdW1lRXhlY3V0aW9uKCksdGhpcy5yZXN1bWVSZW5kZXIoKSxGdH0sdGhpcy5yZWZyZXNoRGltZW5zaW9u'@;
put 'cz1mdW5jdGlvbigpe2lmKG0udmlldyl7dmFyIFN0PW0udmlldy5nZXRMYXN0U2l6ZSgpLEZ0PVN0LndpZHRoLFd0PVN0LmhlaWdodCx3bj1tLnJvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFNuPXduLndpZHRoLGJyPXduLmhlaWdodCxkcj1TbiE9PUZ0fHxiciE9PVd0OyEx'@;
put 'PT09bS5ydW5Ib29rcygiYmVmb3JlUmVmcmVzaERpbWVuc2lvbnMiLHt3aWR0aDpGdCxoZWlnaHQ6V3R9LHt3aWR0aDpTbixoZWlnaHQ6YnJ9LGRyKXx8KChkcnx8bS52aWV3Ll93dC53dE92ZXJsYXlzLnNjcm9sbGFibGVFbGVtZW50PT09bS5yb290V2luZG93KSYmKG0udmlldy5zZXRMYXN0'@;
put 'U2l6ZShTbixiciksbS5yZW5kZXIoKSksbS5ydW5Ib29rcygiYWZ0ZXJSZWZyZXNoRGltZW5zaW9ucyIse3dpZHRoOkZ0LGhlaWdodDpXdH0se3dpZHRoOlNuLGhlaWdodDpicn0sZHIpKX19LHRoaXMudXBkYXRlRGF0YT1mdW5jdGlvbihTdCxGdCl7dmFyIFd0PXRoaXM7Q2hlKFN0LGZ1bmN0'@;
put 'aW9uKHduKXtPPXdufSxmdW5jdGlvbih3bil7Tz13bixtLmNvbHVtbkluZGV4TWFwcGVyLmZpdFRvTGVuZ3RoKFd0LmdldEluaXRpYWxDb2x1bW5Db3VudCgpKSxtLnJvd0luZGV4TWFwcGVyLmZpdFRvTGVuZ3RoKFd0LmNvdW50U291cmNlUm93cygpKSxhZS5hZGp1c3RSb3dzQW5kQ29scygp'@;
put 'fSx7aG90SW5zdGFuY2U6bSxkYXRhTWFwOk8sZGF0YVNvdXJjZTpYLGludGVybmFsU291cmNlOiJ1cGRhdGVEYXRhIixzb3VyY2U6RnQsbWV0YU1hbmFnZXI6WmUsZmlyc3RSdW46YmV9KX0sdGhpcy5sb2FkRGF0YT1mdW5jdGlvbihTdCxGdCl7Q2hlKFN0LGZ1bmN0aW9uKFd0KXtPPVd0fSxm'@;
put 'dW5jdGlvbigpe1plLmNsZWFyQ2VsbHNDYWNoZSgpLG0uaW5pdEluZGV4TWFwcGVycygpLGFlLmFkanVzdFJvd3NBbmRDb2xzKCksYmUmJihiZT1bbnVsbCwibG9hZERhdGEiXSl9LHtob3RJbnN0YW5jZTptLGRhdGFNYXA6TyxkYXRhU291cmNlOlgsaW50ZXJuYWxTb3VyY2U6ImxvYWREYXRh'@;
put 'Iixzb3VyY2U6RnQsbWV0YU1hbmFnZXI6WmUsZmlyc3RSdW46YmV9KX0sdGhpcy5nZXRJbml0aWFsQ29sdW1uQ291bnQ9ZnVuY3Rpb24oKXt2YXIgU3Q9bHQuY29sdW1ucyxGdD0wO2lmKEFycmF5LmlzQXJyYXkoU3QpKUZ0PVN0Lmxlbmd0aDtlbHNlIGlmKFBsKFN0KSlpZigiYXJyYXkiPT09'@;
put 'bS5kYXRhVHlwZSlmb3IodmFyIFd0PXRoaXMuY291bnRTb3VyY2VDb2xzKCksd249MDt3bjxXdDt3bis9MSlTdCh3bikmJihGdCs9MSk7ZWxzZSgib2JqZWN0Ij09PW0uZGF0YVR5cGV8fCJmdW5jdGlvbiI9PT1tLmRhdGFUeXBlKSYmKEZ0PU8uY29sVG9Qcm9wQ2FjaGUubGVuZ3RoKTtlbHNl'@;
put 'IGlmKGlvKGx0LmRhdGFTY2hlbWEpKXt2YXIgU249Ty5nZXRTY2hlbWEoKTtGdD1BcnJheS5pc0FycmF5KFNuKT9Tbi5sZW5ndGg6VUkoU24pfWVsc2UgRnQ9dGhpcy5jb3VudFNvdXJjZUNvbHMoKTtyZXR1cm4gRnR9LHRoaXMuaW5pdEluZGV4TWFwcGVycz1mdW5jdGlvbigpe3RoaXMuY29s'@;
put 'dW1uSW5kZXhNYXBwZXIuaW5pdFRvTGVuZ3RoKHRoaXMuZ2V0SW5pdGlhbENvbHVtbkNvdW50KCkpLHRoaXMucm93SW5kZXhNYXBwZXIuaW5pdFRvTGVuZ3RoKHRoaXMuY291bnRTb3VyY2VSb3dzKCkpfSx0aGlzLmdldERhdGE9ZnVuY3Rpb24oU3QsRnQsV3Qsd24pe3JldHVybiBMbChTdCk/'@;
put 'Ty5nZXRBbGwoKTpPLmdldFJhbmdlKG0uX2NyZWF0ZUNlbGxDb29yZHMoU3QsRnQpLG0uX2NyZWF0ZUNlbGxDb29yZHMoV3Qsd24pLE8uREVTVElOQVRJT05fUkVOREVSRVIpfSx0aGlzLmdldENvcHlhYmxlVGV4dD1mdW5jdGlvbihTdCxGdCxXdCx3bil7cmV0dXJuIE8uZ2V0Q29weWFibGVU'@;
put 'ZXh0KG0uX2NyZWF0ZUNlbGxDb29yZHMoU3QsRnQpLG0uX2NyZWF0ZUNlbGxDb29yZHMoV3Qsd24pKX0sdGhpcy5nZXRDb3B5YWJsZURhdGE9ZnVuY3Rpb24oU3QsRnQpe3JldHVybiBPLmdldENvcHlhYmxlKFN0LE8uY29sVG9Qcm9wKEZ0KSl9LHRoaXMuZ2V0U2NoZW1hPWZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIE8uZ2V0U2NoZW1hKCl9LHRoaXMudXBkYXRlU2V0dGluZ3M9ZnVuY3Rpb24oU3Qpe3ZhciBTbixicixGdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLFd0PShiZT9tLmxvYWREYXRhOm0udXBkYXRlRGF0YSkuYmluZCh0aGlz'@;
put 'KSx3bj0hMTtpZihpbyhTdC5yb3dzKSl0aHJvdyBuZXcgRXJyb3IoJ1RoZSAicm93cyIgc2V0dGluZyBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiBEbyB5b3UgbWVhbiBzdGFydFJvd3MsIG1pblJvd3Mgb3IgbWF4Um93cz8nKTtpZihpbyhTdC5jb2xzKSl0aHJvdyBuZXcgRXJyb3IoJ1RoZSAi'@;
put 'Y29scyIgc2V0dGluZyBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiBEbyB5b3UgbWVhbiBzdGFydENvbHMsIG1pbkNvbHMgb3IgbWF4Q29scz8nKTtpZihpbyhTdC5nYW50dENoYXJ0KSl0aHJvdyBuZXcgRXJyb3IoJ1NpbmNlIDguMC4wIHRoZSAiZ2FudHRDaGFydCIgc2V0dGluZyBpcyBubyBs'@;
put 'b25nZXIgc3VwcG9ydGVkLicpO2ZvcihTbiBpbiBTdCkiZGF0YSI9PT1Tbnx8KCJsYW5ndWFnZSI9PT1Tbj9RbihTdC5sYW5ndWFnZSk6ImNsYXNzTmFtZSI9PT1Tbj9PcigiY2xhc3NOYW1lIixTdC5jbGFzc05hbWUpOiJ0YWJsZUNsYXNzTmFtZSI9PT1TbiYmbS50YWJsZT8oT3IoInRhYmxl'@;
put 'Q2xhc3NOYW1lIixTdC50YWJsZUNsYXNzTmFtZSksbS52aWV3Ll93dC53dE92ZXJsYXlzLnN5bmNPdmVybGF5VGFibGVDbGFzc05hbWVzKCkpOnVvLmdldFNpbmdsZXRvbigpLmlzUmVnaXN0ZXJlZChTbil8fHVvLmdldFNpbmdsZXRvbigpLmlzRGVwcmVjYXRlZChTbik/KFBsKFN0W1NuXSl8'@;
put 'fEFycmF5LmlzQXJyYXkoU3RbU25dKSkmJihTdFtTbl0uaW5pdGlhbEhvb2s9ITAsbS5hZGRIb29rKFNuLFN0W1NuXSkpOiFGdCYmU3MoU3QsU24pJiYoZHRbU25dPVN0W1NuXSkpO3ZvaWQgMD09PVN0LmRhdGEmJnZvaWQgMD09PWx0LmRhdGE/V3QobnVsbCwidXBkYXRlU2V0dGluZ3MiKTp2'@;
put 'b2lkIDAhPT1TdC5kYXRhP1d0KFN0LmRhdGEsInVwZGF0ZVNldHRpbmdzIik6dm9pZCAwIT09U3QuY29sdW1ucyYmKE8uY3JlYXRlTWFwKCksbS5pbml0SW5kZXhNYXBwZXJzKCkpO3ZhciBkcj1tLmNvdW50Q29scygpLExyPWx0LmNvbHVtbnM7aWYoTHImJlBsKExyKSYmKHduPSEwKSwodm9p'@;
put 'ZCAwIT09U3QuY2VsbHx8dm9pZCAwIT09U3QuY2VsbHN8fHZvaWQgMCE9PVN0LmNvbHVtbnMpJiZaZS5jbGVhckNhY2hlKCksZHI+MClmb3IoU249MCxicj0wO1NuPGRyO1NuKyspe2lmKExyKXt2YXIgTnI9d24/THIoU24pOkxyW2JyXTtOciYmWmUudXBkYXRlQ29sdW1uTWV0YShicixOcil9'@;
put 'YnIrPTF9aW8oU3QuY2VsbCkmJm1hKFN0LmNlbGwsZnVuY3Rpb24oa28pe20uc2V0Q2VsbE1ldGFPYmplY3Qoa28ucm93LGtvLmNvbCxrbyl9KSxtLnJ1bkhvb2tzKCJhZnRlckNlbGxNZXRhUmVzZXQiKTt2YXIgZGk9bS5yb290RWxlbWVudC5zdHlsZS5oZWlnaHQ7IiIhPT1kaSYmKGRpPXBh'@;
put 'cnNlSW50KG0ucm9vdEVsZW1lbnQuc3R5bGUuaGVpZ2h0LDEwKSk7dmFyIHFyPVN0LmhlaWdodDtpZihQbChxcikmJihxcj1xcigpKSxGdCYmbS5yb290RWxlbWVudC5nZXRBdHRyaWJ1dGUoInN0eWxlIikmJm0ucm9vdEVsZW1lbnQuc2V0QXR0cmlidXRlKCJkYXRhLWluaXRpYWxzdHlsZSIs'@;
put 'bS5yb290RWxlbWVudC5nZXRBdHRyaWJ1dGUoInN0eWxlIikpLG51bGw9PT1xcil7dmFyIERvPW0ucm9vdEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJkYXRhLWluaXRpYWxzdHlsZSIpO0RvJiYoRG8uaW5kZXhPZigiaGVpZ2h0Iik+LTF8fERvLmluZGV4T2YoIm92ZXJmbG93Iik+LTEpP20ucm9v'@;
put 'dEVsZW1lbnQuc2V0QXR0cmlidXRlKCJzdHlsZSIsRG8pOihtLnJvb3RFbGVtZW50LnN0eWxlLmhlaWdodD0iIixtLnJvb3RFbGVtZW50LnN0eWxlLm92ZXJmbG93PSIiKX1lbHNlIHZvaWQgMCE9PXFyJiYobS5yb290RWxlbWVudC5zdHlsZS5oZWlnaHQ9aXNOYU4ocXIpPyIiLmNvbmNhdChx'@;
put 'cik6IiIuY29uY2F0KHFyLCJweCIpLG0ucm9vdEVsZW1lbnQuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIpO2lmKHR5cGVvZiBTdC53aWR0aDwidSIpe3ZhciBvYT1TdC53aWR0aDtQbChvYSkmJihvYT1vYSgpKSxtLnJvb3RFbGVtZW50LnN0eWxlLndpZHRoPWlzTmFOKG9hKT8iIi5jb25jYXQo'@;
put 'b2EpOiIiLmNvbmNhdChvYSwicHgiKX1GdHx8KG0udmlldyYmKG0udmlldy5fd3Qud3RWaWV3cG9ydC5yZXNldEhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWQoKSxtLnZpZXcuX3d0LmV4cG9ydFNldHRpbmdzQXNDbGFzc05hbWVzKCkpLG0ucnVuSG9va3MoImFmdGVyVXBkYXRlU2V0'@;
put 'dGluZ3MiLFN0KSksYWUuYWRqdXN0Um93c0FuZENvbHMoKSxtLnZpZXcmJiFiZSYmKG0uZm9yY2VGdWxsUmVuZGVyPSEwLHBlLmxvY2tFZGl0b3IoKSxtLl9yZWZyZXNoQm9yZGVycyhudWxsKSxtLnZpZXcuX3d0Lnd0T3ZlcmxheXMuYWRqdXN0RWxlbWVudHNTaXplKCkscGUudW5sb2NrRWRp'@;
put 'dG9yKCkpLCFGdCYmbS52aWV3JiYoIiI9PT1kaXx8IiI9PT1xcnx8dm9pZCAwPT09cXIpJiZkaSE9PXFyJiZtLnZpZXcuX3d0Lnd0T3ZlcmxheXMudXBkYXRlTWFpblNjcm9sbGFibGVFbGVtZW50cygpfSx0aGlzLmdldFZhbHVlPWZ1bmN0aW9uKCl7dmFyIFN0PW0uZ2V0U2VsZWN0ZWRMYXN0'@;
put 'KCk7aWYobHQuZ2V0VmFsdWUpe2lmKFBsKGx0LmdldFZhbHVlKSlyZXR1cm4gbHQuZ2V0VmFsdWUuY2FsbChtKTtpZihTdClyZXR1cm4gbS5nZXREYXRhKClbU3RbMF1bMF1dW2x0LmdldFZhbHVlXX1lbHNlIGlmKFN0KXJldHVybiBtLmdldERhdGFBdENlbGwoU3RbMF0sU3RbMV0pfSx0aGlz'@;
put 'LmdldFNldHRpbmdzPWZ1bmN0aW9uKCl7cmV0dXJuIGx0fSx0aGlzLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RBbGwoKSx0aGlzLmVtcHR5U2VsZWN0ZWRDZWxscygpfSx0aGlzLmFsdGVyPWZ1bmN0aW9uKFN0LEZ0LFd0LHduLFNuKXthZS5hbHRlcihTdCxGdCxXdCx3bixTbil9LHRo'@;
put 'aXMuZ2V0Q2VsbD1mdW5jdGlvbihTdCxGdCl7dmFyIFd0PWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0sd249RnQsU249U3Q7aWYoRnQ+PTApe2lmKHRoaXMuY29sdW1uSW5kZXhNYXBwZXIuaXNIaWRkZW4odGhpcy50b1BoeXNpY2FsQ29s'@;
put 'dW1uKEZ0KSkpcmV0dXJuIG51bGw7d249dGhpcy5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KEZ0KX1pZihTdD49MCl7aWYodGhpcy5yb3dJbmRleE1hcHBlci5pc0hpZGRlbih0aGlzLnRvUGh5c2ljYWxSb3coU3QpKSlyZXR1cm4gbnVsbDtTbj10aGlz'@;
put 'LnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoU3QpfXJldHVybiBudWxsPT09U258fG51bGw9PT13bj9udWxsOm0udmlldy5nZXRDZWxsQXRDb29yZHMobS5fY3JlYXRlQ2VsbENvb3JkcyhTbix3biksV3QpfSx0aGlzLmdldENvb3Jkcz1mdW5jdGlvbihTdCl7'@;
put 'dmFyIEZ0PXRoaXMudmlldy5fd3Qud3RUYWJsZS5nZXRDb29yZHMoU3QpO2lmKG51bGw9PT1GdClyZXR1cm4gbnVsbDt2YXIgV3Q9RnQucm93LHduPUZ0LmNvbCxTbj1XdCxicj13bjtyZXR1cm4gV3Q+PTAmJihTbj10aGlzLnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxl'@;
put 'SW5kZXgoV3QpKSx3bj49MCYmKGJyPXRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh3bikpLG0uX2NyZWF0ZUNlbGxDb29yZHMoU24sYnIpfSx0aGlzLmNvbFRvUHJvcD1mdW5jdGlvbihTdCl7cmV0dXJuIE8uY29sVG9Qcm9wKFN0KX0sdGhpcy5w'@;
put 'cm9wVG9Db2w9ZnVuY3Rpb24oU3Qpe3JldHVybiBPLnByb3BUb0NvbChTdCl9LHRoaXMudG9WaXN1YWxSb3c9ZnVuY3Rpb24oU3Qpe3JldHVybiBmLnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21QaHlzaWNhbEluZGV4KFN0KX0sdGhpcy50b1Zpc3VhbENvbHVtbj1mdW5jdGlvbihTdCl7'@;
put 'cmV0dXJuIGYuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVBoeXNpY2FsSW5kZXgoU3QpfSx0aGlzLnRvUGh5c2ljYWxSb3c9ZnVuY3Rpb24oU3Qpe3JldHVybiBmLnJvd0luZGV4TWFwcGVyLmdldFBoeXNpY2FsRnJvbVZpc3VhbEluZGV4KFN0KX0sdGhpcy50b1BoeXNpY2FsQ29s'@;
put 'dW1uPWZ1bmN0aW9uKFN0KXtyZXR1cm4gZi5jb2x1bW5JbmRleE1hcHBlci5nZXRQaHlzaWNhbEZyb21WaXN1YWxJbmRleChTdCl9LHRoaXMuZ2V0RGF0YUF0Q2VsbD1mdW5jdGlvbihTdCxGdCl7cmV0dXJuIE8uZ2V0KFN0LE8uY29sVG9Qcm9wKEZ0KSl9LHRoaXMuZ2V0RGF0YUF0Um93UHJv'@;
put 'cD1mdW5jdGlvbihTdCxGdCl7cmV0dXJuIE8uZ2V0KFN0LEZ0KX0sdGhpcy5nZXREYXRhQXRDb2w9ZnVuY3Rpb24oU3Qpe2Zvcih2YXIgRnQ9W10sV3Q9Ty5nZXRSYW5nZShtLl9jcmVhdGVDZWxsQ29vcmRzKDAsU3QpLG0uX2NyZWF0ZUNlbGxDb29yZHMobHQuZGF0YS5sZW5ndGgtMSxTdCks'@;
put 'Ty5ERVNUSU5BVElPTl9SRU5ERVJFUiksd249MDt3bjxXdC5sZW5ndGg7d24rPTEpZm9yKHZhciBTbj0wO1NuPFd0W3duXS5sZW5ndGg7U24rPTEpRnQucHVzaChXdFt3bl1bU25dKTtyZXR1cm4gRnR9LHRoaXMuZ2V0RGF0YUF0UHJvcD1mdW5jdGlvbihTdCl7Zm9yKHZhciBGdD1bXSxXdD1P'@;
put 'LmdldFJhbmdlKG0uX2NyZWF0ZUNlbGxDb29yZHMoMCxPLnByb3BUb0NvbChTdCkpLG0uX2NyZWF0ZUNlbGxDb29yZHMobHQuZGF0YS5sZW5ndGgtMSxPLnByb3BUb0NvbChTdCkpLE8uREVTVElOQVRJT05fUkVOREVSRVIpLHduPTA7d248V3QubGVuZ3RoO3duKz0xKWZvcih2YXIgU249MDtT'@;
put 'bjxXdFt3bl0ubGVuZ3RoO1NuKz0xKUZ0LnB1c2goV3Rbd25dW1NuXSk7cmV0dXJuIEZ0fSx0aGlzLmdldFNvdXJjZURhdGE9ZnVuY3Rpb24oU3QsRnQsV3Qsd24pe3JldHVybiB2b2lkIDA9PT1TdD9YLmdldERhdGEoKTpYLmdldEJ5UmFuZ2UobS5fY3JlYXRlQ2VsbENvb3JkcyhTdCxGdCks'@;
put 'bS5fY3JlYXRlQ2VsbENvb3JkcyhXdCx3bikpfSx0aGlzLmdldFNvdXJjZURhdGFBcnJheT1mdW5jdGlvbihTdCxGdCxXdCx3bil7cmV0dXJuIHZvaWQgMD09PVN0P1guZ2V0RGF0YSghMCk6WC5nZXRCeVJhbmdlKG0uX2NyZWF0ZUNlbGxDb29yZHMoU3QsRnQpLG0uX2NyZWF0ZUNlbGxDb29y'@;
put 'ZHMoV3Qsd24pLCEwKX0sdGhpcy5nZXRTb3VyY2VEYXRhQXRDb2w9ZnVuY3Rpb24oU3Qpe3JldHVybiBYLmdldEF0Q29sdW1uKFN0KX0sdGhpcy5zZXRTb3VyY2VEYXRhQXRDZWxsPWZ1bmN0aW9uKFN0LEZ0LFd0LHduKXt2YXIgU249QXIoU3QsRnQsV3QpLGJyPXRoaXMuaGFzSG9vaygiYWZ0'@;
put 'ZXJTZXRTb3VyY2VEYXRhQXRDZWxsIiksZHI9W107YnImJlJuKFNuLGZ1bmN0aW9uKE5yKXt2YXIgZGk9emgoTnIsMykscXI9ZGlbMF0sUmk9ZGlbMV0sRG89ZGlbMl07ZHIucHVzaChbcXIsUmksWC5nZXRBdENlbGwocXIsUmkpLERvXSl9KSxSbihTbixmdW5jdGlvbihOcil7dmFyIGRpPXpo'@;
put 'KE5yLDMpO1guc2V0QXRDZWxsKGRpWzBdLGRpWzFdLGRpWzJdKX0pLGJyJiZ0aGlzLnJ1bkhvb2tzKCJhZnRlclNldFNvdXJjZURhdGFBdENlbGwiLGRyLHduKSx0aGlzLnJlbmRlcigpO3ZhciBMcj1tLmdldEFjdGl2ZUVkaXRvcigpO0xyJiZpbyhMci5yZWZyZXNoVmFsdWUpJiZMci5yZWZy'@;
put 'ZXNoVmFsdWUoKX0sdGhpcy5nZXRTb3VyY2VEYXRhQXRSb3c9ZnVuY3Rpb24oU3Qpe3JldHVybiBYLmdldEF0Um93KFN0KX0sdGhpcy5nZXRTb3VyY2VEYXRhQXRDZWxsPWZ1bmN0aW9uKFN0LEZ0KXtyZXR1cm4gWC5nZXRBdENlbGwoU3QsRnQpfSx0aGlzLmdldERhdGFBdFJvdz1mdW5jdGlv'@;
put 'bihTdCl7cmV0dXJuIE8uZ2V0UmFuZ2UobS5fY3JlYXRlQ2VsbENvb3JkcyhTdCwwKSxtLl9jcmVhdGVDZWxsQ29vcmRzKFN0LHRoaXMuY291bnRDb2xzKCktMSksTy5ERVNUSU5BVElPTl9SRU5ERVJFUilbMF18fFtdfSx0aGlzLmdldERhdGFUeXBlPWZ1bmN0aW9uKFN0LEZ0LFd0LHduKXt2'@;
put 'YXIgU249dGhpcyxicj12b2lkIDA9PT1TdD9bMCwwLHRoaXMuY291bnRSb3dzKCksdGhpcy5jb3VudENvbHMoKV06W1N0LEZ0LFd0LHduXSxkcj1iclswXSxMcj1iclsxXSxOcj1iclsyXSxkaT1iclszXSxxcj1udWxsLFJpPW51bGw7dm9pZCAwPT09TnImJihOcj1kciksdm9pZCAwPT09ZGkm'@;
put 'JihkaT1Mcik7dmFyIERvPSJtaXhlZCI7cmV0dXJuIF9vKE1hdGgubWF4KE1hdGgubWluKGRyLE5yKSwwKSxNYXRoLm1heChkcixOciksZnVuY3Rpb24ob2Epe3ZhciBrbz0hMDtyZXR1cm4gX28oTWF0aC5tYXgoTWF0aC5taW4oTHIsZGkpLDApLE1hdGgubWF4KExyLGRpKSxmdW5jdGlvbihx'@;
put 'aSl7dmFyIHh0PVNuLmdldENlbGxNZXRhKG9hLHFpKTtyZXR1cm4gUmk9eHQudHlwZSxxcj9rbz1xcj09PVJpOnFyPVJpLGtvfSksRG89a28/Umk6Im1peGVkIixrb30pLERvfSx0aGlzLnJlbW92ZUNlbGxNZXRhPWZ1bmN0aW9uKFN0LEZ0LFd0KXt2YXIgd249W3RoaXMudG9QaHlzaWNhbFJv'@;
put 'dyhTdCksdGhpcy50b1BoeXNpY2FsQ29sdW1uKEZ0KV0sU249d25bMF0sYnI9d25bMV0sZHI9WmUuZ2V0Q2VsbE1ldGFLZXlWYWx1ZShTbixicixXdCk7ITEhPT1tLnJ1bkhvb2tzKCJiZWZvcmVSZW1vdmVDZWxsTWV0YSIsU3QsRnQsV3QsZHIpJiYoWmUucmVtb3ZlQ2VsbE1ldGEoU24sYnIs'@;
put 'V3QpLG0ucnVuSG9va3MoImFmdGVyUmVtb3ZlQ2VsbE1ldGEiLFN0LEZ0LFd0LGRyKSksZHI9bnVsbH0sdGhpcy5zcGxpY2VDZWxsc01ldGE9ZnVuY3Rpb24oU3Qpe2Zvcih2YXIgRnQ9dGhpcyxXdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNb'@;
put 'MV06MCx3bj1hcmd1bWVudHMubGVuZ3RoLFNuPW5ldyBBcnJheSh3bj4yP3duLTI6MCksYnI9Mjticjx3bjticisrKVNuW2JyLTJdPWFyZ3VtZW50c1ticl07aWYoU24ubGVuZ3RoPjAmJiFBcnJheS5pc0FycmF5KFNuWzBdKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSAzcmQgYXJndW1lbnQgKGNl'@;
put 'bGxNZXRhUm93cykgaGFzIHRvIGJlIHBhc3NlZCBhcyBhbiBhcnJheSBvZiBjZWxsIG1ldGEgb2JqZWN0cyBhcnJheS4iKTtXdD4wJiZaZS5yZW1vdmVSb3codGhpcy50b1BoeXNpY2FsUm93KFN0KSxXdCksU24ubGVuZ3RoPjAmJlJuKFNuLnJldmVyc2UoKSxmdW5jdGlvbihkcil7WmUuY3Jl'@;
put 'YXRlUm93KEZ0LnRvUGh5c2ljYWxSb3coU3QpKSxSbihkcixmdW5jdGlvbihMcixOcil7cmV0dXJuIEZ0LnNldENlbGxNZXRhT2JqZWN0KFN0LE5yLExyKX0pfSksbS5yZW5kZXIoKX0sdGhpcy5zZXRDZWxsTWV0YU9iamVjdD1mdW5jdGlvbihTdCxGdCxXdCl7dmFyIHduPXRoaXM7Im9iamVj'@;
put 'dCI9PT1HMChXdCkmJm1hKFd0LGZ1bmN0aW9uKFNuLGJyKXt3bi5zZXRDZWxsTWV0YShTdCxGdCxicixTbil9KX0sdGhpcy5zZXRDZWxsTWV0YT1mdW5jdGlvbihTdCxGdCxXdCx3bil7aWYoITEhPT1tLnJ1bkhvb2tzKCJiZWZvcmVTZXRDZWxsTWV0YSIsU3QsRnQsV3Qsd24pKXt2YXIgYnI9'@;
put 'U3QsZHI9RnQ7U3Q8dGhpcy5jb3VudFJvd3MoKSYmKGJyPXRoaXMudG9QaHlzaWNhbFJvdyhTdCkpLEZ0PHRoaXMuY291bnRDb2xzKCkmJihkcj10aGlzLnRvUGh5c2ljYWxDb2x1bW4oRnQpKSxaZS5zZXRDZWxsTWV0YShicixkcixXdCx3biksbS5ydW5Ib29rcygiYWZ0ZXJTZXRDZWxsTWV0'@;
put 'YSIsU3QsRnQsV3Qsd24pfX0sdGhpcy5nZXRDZWxsc01ldGE9ZnVuY3Rpb24oKXtyZXR1cm4gWmUuZ2V0Q2VsbHNNZXRhKCl9LHRoaXMuZ2V0Q2VsbE1ldGE9ZnVuY3Rpb24oU3QsRnQpe3ZhciBXdD10aGlzLnRvUGh5c2ljYWxSb3coU3QpLHduPXRoaXMudG9QaHlzaWNhbENvbHVtbihGdCk7'@;
put 'cmV0dXJuIG51bGw9PT1XdCYmKFd0PVN0KSxudWxsPT09d24mJih3bj1GdCksWmUuZ2V0Q2VsbE1ldGEoV3Qsd24se3Zpc3VhbFJvdzpTdCx2aXN1YWxDb2x1bW46RnR9KX0sdGhpcy5nZXRDZWxsTWV0YUF0Um93PWZ1bmN0aW9uKFN0KXtyZXR1cm4gWmUuZ2V0Q2VsbHNNZXRhQXRSb3coU3Qp'@;
put 'fSx0aGlzLmlzQ29sdW1uTW9kaWZpY2F0aW9uQWxsb3dlZD1mdW5jdGlvbigpe3JldHVybiEoIm9iamVjdCI9PT1tLmRhdGFUeXBlfHxsdC5jb2x1bW5zKX0sdGhpcy5nZXRDZWxsUmVuZGVyZXI9ZnVuY3Rpb24oU3QsRnQpe3ZhciBXdD0ibnVtYmVyIj09dHlwZW9mIFN0P20uZ2V0Q2VsbE1l'@;
put 'dGEoU3QsRnQpLnJlbmRlcmVyOlN0LnJlbmRlcmVyO3JldHVybiJzdHJpbmciPT10eXBlb2YgV3Q/b1IoV3QpOkxsKFd0KT9vUigidGV4dCIpOld0fSx0aGlzLmdldENlbGxFZGl0b3I9ZnVuY3Rpb24oU3QsRnQpe3ZhciBXdD0ibnVtYmVyIj09dHlwZW9mIFN0P20uZ2V0Q2VsbE1ldGEoU3Qs'@;
put 'RnQpLmVkaXRvcjpTdC5lZGl0b3I7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBXdD9lUihXdCk6TGwoV3QpP2VSKCJ0ZXh0Iik6V3R9LHRoaXMuZ2V0Q2VsbFZhbGlkYXRvcj1mdW5jdGlvbihTdCxGdCl7dmFyIFd0PSJudW1iZXIiPT10eXBlb2YgU3Q/bS5nZXRDZWxsTWV0YShTdCxGdCkudmFs'@;
put 'aWRhdG9yOlN0LnZhbGlkYXRvcjtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIFd0P2VXKFd0KTpXdH0sdGhpcy52YWxpZGF0ZUNlbGxzPWZ1bmN0aW9uKFN0KXt0aGlzLl92YWxpZGF0ZUNlbGxzKFN0KX0sdGhpcy52YWxpZGF0ZVJvd3M9ZnVuY3Rpb24oU3QsRnQpe2lmKCFBcnJheS5pc0FycmF5'@;
put 'KFN0KSl0aHJvdyBuZXcgRXJyb3IoInZhbGlkYXRlUm93cyBwYXJhbWV0ZXIgYHJvd3NgIG11c3QgYmUgYW4gYXJyYXkiKTt0aGlzLl92YWxpZGF0ZUNlbGxzKEZ0LFN0KX0sdGhpcy52YWxpZGF0ZUNvbHVtbnM9ZnVuY3Rpb24oU3QsRnQpe2lmKCFBcnJheS5pc0FycmF5KFN0KSl0aHJvdyBu'@;
put 'ZXcgRXJyb3IoInZhbGlkYXRlQ29sdW1ucyBwYXJhbWV0ZXIgYGNvbHVtbnNgIG11c3QgYmUgYW4gYXJyYXkiKTt0aGlzLl92YWxpZGF0ZUNlbGxzKEZ0LHZvaWQgMCxTdCl9LHRoaXMuX3ZhbGlkYXRlQ2VsbHM9ZnVuY3Rpb24oU3QsRnQsV3Qpe3ZhciB3bj1uZXcgVnI7U3QmJih3bi5vblF1'@;
put 'ZXVlRW1wdHk9U3QpO2Zvcih2YXIgU249bS5jb3VudFJvd3MoKS0xO1NuPj0wOylpZih2b2lkIDA9PT1GdHx8LTEhPT1GdC5pbmRleE9mKFNuKSl7Zm9yKHZhciBicj1tLmNvdW50Q29scygpLTE7YnI+PTA7KXZvaWQgMD09PVd0fHwtMSE9PVd0LmluZGV4T2YoYnIpPyh3bi5hZGRWYWxpZGF0'@;
put 'b3JUb1F1ZXVlKCksbS52YWxpZGF0ZUNlbGwobS5nZXREYXRhQXRDZWxsKFNuLGJyKSxtLmdldENlbGxNZXRhKFNuLGJyKSxmdW5jdGlvbihkcil7aWYoImJvb2xlYW4iIT10eXBlb2YgZHIpdGhyb3cgbmV3IEVycm9yKCJWYWxpZGF0aW9uIGVycm9yOiByZXN1bHQgaXMgbm90IGJvb2xlYW4i'@;
put 'KTshMT09PWRyJiYod24udmFsaWQ9ITEpLHduLnJlbW92ZVZhbGlkYXRvckZvcm1RdWV1ZSgpfSwidmFsaWRhdGVDZWxscyIpLGJyLT0xKTpici09MTtTbi09MX1lbHNlIFNuLT0xO3duLmNoZWNrSWZRdWV1ZUlzRW1wdHkoKX0sdGhpcy5nZXRSb3dIZWFkZXI9ZnVuY3Rpb24oU3Qpe3ZhciBG'@;
put 'dD1sdC5yb3dIZWFkZXJzLFd0PVN0O3JldHVybiB2b2lkIDAhPT1XdCYmKFd0PW0ucnVuSG9va3MoIm1vZGlmeVJvd0hlYWRlciIsV3QpKSx2b2lkIDA9PT1XdD8oRnQ9W10sX28obS5jb3VudFJvd3MoKS0xLGZ1bmN0aW9uKHduKXtGdC5wdXNoKG0uZ2V0Um93SGVhZGVyKHduKSl9KSk6QXJy'@;
put 'YXkuaXNBcnJheShGdCkmJnZvaWQgMCE9PUZ0W1d0XT9GdD1GdFtXdF06UGwoRnQpP0Z0PUZ0KFd0KTpGdCYmInN0cmluZyIhPXR5cGVvZiBGdCYmIm51bWJlciIhPXR5cGVvZiBGdCYmKEZ0PVd0KzEpLEZ0fSx0aGlzLmhhc1Jvd0hlYWRlcnM9ZnVuY3Rpb24oKXtyZXR1cm4hIWx0LnJvd0hl'@;
put 'YWRlcnN9LHRoaXMuaGFzQ29sSGVhZGVycz1mdW5jdGlvbigpe2lmKG51bGwhPWx0LmNvbEhlYWRlcnMpcmV0dXJuISFsdC5jb2xIZWFkZXJzO2Zvcih2YXIgU3Q9MCxGdD1tLmNvdW50Q29scygpO1N0PEZ0O1N0KyspaWYobS5nZXRDb2xIZWFkZXIoU3QpKXJldHVybiEwO3JldHVybiExfSx0'@;
put 'aGlzLmdldENvbEhlYWRlcj1mdW5jdGlvbihTdCl7dmFyIEZ0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTotMSxXdD1tLnJ1bkhvb2tzKCJtb2RpZnlDb2xIZWFkZXIiLFN0KTtpZih2b2lkIDA9PT1XdCl7Zm9yKHZhciB3bj1bXSxTbj1t'@;
put 'LmNvdW50Q29scygpLGJyPTA7YnI8U247YnIrKyl3bi5wdXNoKG0uZ2V0Q29sSGVhZGVyKGJyKSk7cmV0dXJuIHdufXZhciBkcj1sdC5jb2xIZWFkZXJzLE5yPW0udG9QaHlzaWNhbENvbHVtbihXdCksZGk9ZnVuY3Rpb24oUmkpe2Zvcih2YXIgRG89W10sb2E9bS5jb3VudENvbHMoKSxrbz0w'@;
put 'O2tvPG9hO2tvKyspUGwobHQuY29sdW1ucykmJmx0LmNvbHVtbnMoa28pJiZEby5wdXNoKGtvKTtyZXR1cm4gRG9bUmldfShOcik7cmV0dXJuITE9PT1sdC5jb2xIZWFkZXJzP2RyPW51bGw6bHQuY29sdW1ucyYmUGwobHQuY29sdW1ucykmJmx0LmNvbHVtbnMoZGkpJiZsdC5jb2x1bW5zKGRp'@;
put 'KS50aXRsZT9kcj1sdC5jb2x1bW5zKGRpKS50aXRsZTpsdC5jb2x1bW5zJiZsdC5jb2x1bW5zW05yXSYmbHQuY29sdW1uc1tOcl0udGl0bGU/ZHI9bHQuY29sdW1uc1tOcl0udGl0bGU6QXJyYXkuaXNBcnJheShsdC5jb2xIZWFkZXJzKSYmdm9pZCAwIT09bHQuY29sSGVhZGVyc1tOcl0/ZHI9'@;
put 'bHQuY29sSGVhZGVyc1tOcl06UGwobHQuY29sSGVhZGVycyk/ZHI9bHQuY29sSGVhZGVycyhOcik6bHQuY29sSGVhZGVycyYmInN0cmluZyIhPXR5cGVvZiBsdC5jb2xIZWFkZXJzJiYibnVtYmVyIiE9dHlwZW9mIGx0LmNvbEhlYWRlcnMmJihkcj1WUihXdCkpLG0ucnVuSG9va3MoIm1vZGlm'@;
put 'eUNvbHVtbkhlYWRlclZhbHVlIixkcixTdCxGdCl9LHRoaXMuX2dldENvbFdpZHRoRnJvbVNldHRpbmdzPWZ1bmN0aW9uKFN0KXt2YXIgRnQ7aWYoU3Q+PTAmJihGdD1tLmdldENlbGxNZXRhKDAsU3QpLndpZHRoKSwodm9pZCAwPT09RnR8fEZ0PT09bHQud2lkdGgpJiYoRnQ9bHQuY29sV2lk'@;
put 'dGhzKSxudWxsIT1GdCl7c3dpdGNoKEcwKEZ0KSl7Y2FzZSJvYmplY3QiOkZ0PUZ0W1N0XTticmVhaztjYXNlImZ1bmN0aW9uIjpGdD1GdChTdCl9InN0cmluZyI9PXR5cGVvZiBGdCYmKEZ0PXBhcnNlSW50KEZ0LDEwKSl9cmV0dXJuIEZ0fSx0aGlzLmdldENvbFdpZHRoPWZ1bmN0aW9uKFN0'@;
put 'KXt2YXIgRnQ9bS5fZ2V0Q29sV2lkdGhGcm9tU2V0dGluZ3MoU3QpO3JldHVybiB2b2lkIDA9PT0oRnQ9bS5ydW5Ib29rcygibW9kaWZ5Q29sV2lkdGgiLEZ0LFN0KSkmJihGdD1UVy5ERUZBVUxUX1dJRFRIKSxGdH0sdGhpcy5fZ2V0Um93SGVpZ2h0RnJvbVNldHRpbmdzPWZ1bmN0aW9uKFN0'@;
put 'KXt2YXIgRnQ9bHQucm93SGVpZ2h0cztpZihudWxsIT1GdCl7c3dpdGNoKEcwKEZ0KSl7Y2FzZSJvYmplY3QiOkZ0PUZ0W1N0XTticmVhaztjYXNlImZ1bmN0aW9uIjpGdD1GdChTdCl9InN0cmluZyI9PXR5cGVvZiBGdCYmKEZ0PXBhcnNlSW50KEZ0LDEwKSl9cmV0dXJuIEZ0fSx0aGlzLmdl'@;
put 'dFJvd0hlaWdodD1mdW5jdGlvbihTdCl7dmFyIEZ0PW0uX2dldFJvd0hlaWdodEZyb21TZXR0aW5ncyhTdCk7cmV0dXJuIG0ucnVuSG9va3MoIm1vZGlmeVJvd0hlaWdodCIsRnQsU3QpfSx0aGlzLmNvdW50U291cmNlUm93cz1mdW5jdGlvbigpe3JldHVybiBYLmNvdW50Um93cygpfSx0aGlz'@;
put 'LmNvdW50U291cmNlQ29scz1mdW5jdGlvbigpe3JldHVybiBYLmNvdW50Rmlyc3RSb3dLZXlzKCl9LHRoaXMuY291bnRSb3dzPWZ1bmN0aW9uKCl7cmV0dXJuIE8uZ2V0TGVuZ3RoKCl9LHRoaXMuY291bnRDb2xzPWZ1bmN0aW9uKCl7dmFyIFN0PWx0Lm1heENvbHMsRnQ9dGhpcy5jb2x1bW5J'@;
put 'bmRleE1hcHBlci5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpO3JldHVybiBNYXRoLm1pbihTdCxGdCl9LHRoaXMuY291bnRSZW5kZXJlZFJvd3M9ZnVuY3Rpb24oKXtyZXR1cm4gbS52aWV3Ll93dC5kcmF3bj9tLnZpZXcuX3d0Lnd0VGFibGUuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKTot'@;
put 'MX0sdGhpcy5jb3VudFZpc2libGVSb3dzPWZ1bmN0aW9uKCl7cmV0dXJuIG0udmlldy5fd3QuZHJhd24/bS52aWV3Ll93dC53dFRhYmxlLmdldFZpc2libGVSb3dzQ291bnQoKTotMX0sdGhpcy5jb3VudFJlbmRlcmVkQ29scz1mdW5jdGlvbigpe3JldHVybiBtLnZpZXcuX3d0LmRyYXduP20u'@;
put 'dmlldy5fd3Qud3RUYWJsZS5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpOi0xfSx0aGlzLmNvdW50VmlzaWJsZUNvbHM9ZnVuY3Rpb24oKXtyZXR1cm4gbS52aWV3Ll93dC5kcmF3bj9tLnZpZXcuX3d0Lnd0VGFibGUuZ2V0VmlzaWJsZUNvbHVtbnNDb3VudCgpOi0xfSx0aGlzLmNvdW50RW1w'@;
put 'dHlSb3dzPWZ1bmN0aW9uKCl7dmFyIFN0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0sRnQ9MDtyZXR1cm4gclIobS5jb3VudFJvd3MoKS0xLGZ1bmN0aW9uKFd0KXtpZihtLmlzRW1wdHlSb3coV3QpKUZ0Kz0xO2Vsc2UgaWYoITA9PT1T'@;
put 'dClyZXR1cm4hMX0pLEZ0fSx0aGlzLmNvdW50RW1wdHlDb2xzPWZ1bmN0aW9uKCl7dmFyIFN0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0sRnQ9MDtyZXR1cm4gclIobS5jb3VudENvbHMoKS0xLGZ1bmN0aW9uKFd0KXtpZihtLmlzRW1w'@;
put 'dHlDb2woV3QpKUZ0Kz0xO2Vsc2UgaWYoITA9PT1TdClyZXR1cm4hMX0pLEZ0fSx0aGlzLmlzRW1wdHlSb3c9ZnVuY3Rpb24oU3Qpe3JldHVybiBsdC5pc0VtcHR5Um93LmNhbGwobSxTdCl9LHRoaXMuaXNFbXB0eUNvbD1mdW5jdGlvbihTdCl7cmV0dXJuIGx0LmlzRW1wdHlDb2wuY2FsbCht'@;
put 'LFN0KX0sdGhpcy5zZWxlY3RDZWxsPWZ1bmN0aW9uKFN0LEZ0LFd0LHduKXt2YXIgU249IShhcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XSl8fGFyZ3VtZW50c1s0XSxicj0hKGFyZ3VtZW50cy5sZW5ndGg+NSYmdm9pZCAwIT09YXJndW1lbnRzWzVdKXx8YXJndW1l'@;
put 'bnRzWzVdO3JldHVybiFMbChTdCkmJiFMbChGdCkmJnRoaXMuc2VsZWN0Q2VsbHMoW1tTdCxGdCxXdCx3bl1dLFNuLGJyKX0sdGhpcy5zZWxlY3RDZWxscz1mdW5jdGlvbigpe3ZhciBXdD0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJd'@;
put 'OyExPT09KCEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0pJiYoaD0hMCk7dmFyIHduPVh0LnNlbGVjdENlbGxzKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbW11dKTtyZXR1cm4g'@;
put 'd24mJld0JiZtLmxpc3RlbigpLGg9ITEsd259LHRoaXMuc2VsZWN0Q29sdW1ucz1mdW5jdGlvbihTdCl7cmV0dXJuIFh0LnNlbGVjdENvbHVtbnMoU3QsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOlN0KX0sdGhpcy5zZWxlY3RSb3dzPWZ1'@;
put 'bmN0aW9uKFN0KXtyZXR1cm4gWHQuc2VsZWN0Um93cyhTdCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06U3QpfSx0aGlzLmRlc2VsZWN0Q2VsbD1mdW5jdGlvbigpe1h0LmRlc2VsZWN0KCl9LHRoaXMuc2VsZWN0QWxsPWZ1bmN0aW9uKCl7'@;
put 'dmFyIFN0PSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0sRnQ9U3QmJnRoaXMuaGFzUm93SGVhZGVycygpLFd0PVN0JiZ0aGlzLmhhc0NvbEhlYWRlcnMoKTtoPSEwLFh0LnNlbGVjdEFsbChGdCxXdCksaD0hMX07dmFyIFRyPWZ1bmN0'@;
put 'aW9uKEZ0LFd0KXtyZXR1cm4gRnQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KFd0LDEsITApfTt0aGlzLnNjcm9sbFZpZXdwb3J0VG89ZnVuY3Rpb24oU3QsRnQpe3ZhciBXdD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdLHduPWFyZ3Vt'@;
put 'ZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM10sYnI9IVd0LGRyPSF3bixMcj1TdCxOcj1GdDtpZighKGFyZ3VtZW50cy5sZW5ndGg+NCYmdm9pZCAwIT09YXJndW1lbnRzWzRdKXx8YXJndW1lbnRzWzRdKXt2YXIgZGk9TnVtYmVyLmlzSW50ZWdlcihT'@;
put 'dCkscXI9TnVtYmVyLmlzSW50ZWdlcihGdCksUmk9ZGk/VHIodGhpcy5yb3dJbmRleE1hcHBlcixTdCk6dm9pZCAwLERvPXFyP1RyKHRoaXMuY29sdW1uSW5kZXhNYXBwZXIsRnQpOnZvaWQgMDtpZihudWxsPT09Uml8fG51bGw9PT1EbylyZXR1cm4hMTtMcj1kaT9tLnJvd0luZGV4TWFwcGVy'@;
put 'LmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoUmkpOnZvaWQgMCxOcj1xcj9tLmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoRG8pOnZvaWQgMH12YXIgb2E9TnVtYmVyLmlzSW50ZWdlcihMciksa289TnVtYmVyLmlzSW50ZWdlcihOcik7cmV0dXJu'@;
put 'IG9hJiZrbz9tLnZpZXcuc2Nyb2xsVmlld3BvcnQobS5fY3JlYXRlQ2VsbENvb3JkcyhMcixOciksYnIsd24sV3QsZHIpOm9hJiYhMT09PWtvP20udmlldy5zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkoTHIsYnIsV3QpOiEoIWtvfHwhMSE9PW9hKSYmbS52aWV3LnNjcm9sbFZpZXdwb3J0SG9y'@;
put 'aXpvbnRhbGx5KE5yLHduLGRyKX0sdGhpcy5kZXN0cm95PWZ1bmN0aW9uKCl7aWYobS5fY2xlYXJUaW1lb3V0cygpLG0uX2NsZWFySW1tZWRpYXRlcygpLG0udmlldyYmbS52aWV3LmRlc3Ryb3koKSxYJiZYLmRlc3Ryb3koKSxYPW51bGwsdGhpcy5nZXRTaG9ydGN1dE1hbmFnZXIoKS5kZXN0'@;
put 'cm95KCksWmUuY2xlYXJDYWNoZSgpLFJXKG0pKXt2YXIgU3Q9dGhpcy5yb290RG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmhvdC1kaXNwbGF5LWxpY2Vuc2UtaW5mbyIpO1N0JiZTdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKFN0KX1GZChtLnJvb3RFbGVtZW50KSxfLmRlc3Ryb3koKSxwZSYm'@;
put 'cGUuZGVzdHJveSgpLG0uYmF0Y2hFeGVjdXRpb24oZnVuY3Rpb24oKXttLnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJBbGwoKSxtLmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJBbGwoKSxndC5nZXRJdGVtcygpLmZvckVhY2goZnVuY3Rpb24oRnQpe3poKEZ0LDIpWzFdLmRlc3Ryb3ko'@;
put 'KX0pLGd0LmNsZWFyKCksbS5ydW5Ib29rcygiYWZ0ZXJEZXN0cm95Iil9LCEwKSx1by5nZXRTaW5nbGV0b24oKS5kZXN0cm95KG0pLG1hKG0sZnVuY3Rpb24oRnQsV3Qsd24pe1BsKEZ0KT93bltXdF09ZnVuY3Rpb24gVm4oU3Qpe3JldHVybiBmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcign'@;
put 'VGhlICInLmNvbmNhdChTdCwnIiBtZXRob2QgY2Fubm90IGJlIGNhbGxlZCBiZWNhdXNlIHRoaXMgSGFuZHNvbnRhYmxlIGluc3RhbmNlIGhhcyBiZWVuIGRlc3Ryb3llZCcpKX19KFd0KToiZ3VpZCIhPT1XdCYmKHduW1d0XT1udWxsKX0pLG0uaXNEZXN0cm95ZWQ9ITAsTyYmTy5kZXN0cm95'@;
put 'KCksTz1udWxsLGFlPW51bGwsWHQ9bnVsbCxwZT1udWxsLG09bnVsbH0sdGhpcy5nZXRBY3RpdmVFZGl0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gcGUuZ2V0QWN0aXZlRWRpdG9yKCl9LHRoaXMuZ2V0UGx1Z2luPWZ1bmN0aW9uKFN0KXt2YXIgRnQ9QWMoU3QpO3JldHVybiJVbmRvUmVkbyI9PT1G'@;
put 'dD90aGlzLnVuZG9SZWRvOmd0LmdldEl0ZW0oRnQpfSx0aGlzLmdldFBsdWdpbk5hbWU9ZnVuY3Rpb24oU3Qpe3JldHVybiBTdD09PXRoaXMudW5kb1JlZG8/dGhpcy51bmRvUmVkby5jb25zdHJ1Y3Rvci5QTFVHSU5fS0VZOmd0LmdldElkKFN0KX0sdGhpcy5nZXRJbnN0YW5jZT1mdW5jdGlv'@;
put 'bigpe3JldHVybiBtfSx0aGlzLmFkZEhvb2s9ZnVuY3Rpb24oU3QsRnQpe3VvLmdldFNpbmdsZXRvbigpLmFkZChTdCxGdCxtKX0sdGhpcy5oYXNIb29rPWZ1bmN0aW9uKFN0KXtyZXR1cm4gdW8uZ2V0U2luZ2xldG9uKCkuaGFzKFN0LG0pfHx1by5nZXRTaW5nbGV0b24oKS5oYXMoU3QpfSx0'@;
put 'aGlzLmFkZEhvb2tPbmNlPWZ1bmN0aW9uKFN0LEZ0KXt1by5nZXRTaW5nbGV0b24oKS5vbmNlKFN0LEZ0LG0pfSx0aGlzLnJlbW92ZUhvb2s9ZnVuY3Rpb24oU3QsRnQpe3VvLmdldFNpbmdsZXRvbigpLnJlbW92ZShTdCxGdCxtKX0sdGhpcy5ydW5Ib29rcz1mdW5jdGlvbihTdCxGdCxXdCx3'@;
put 'bixTbixicixkcil7cmV0dXJuIHVvLmdldFNpbmdsZXRvbigpLnJ1bihtLFN0LEZ0LFd0LHduLFNuLGJyLGRyKX0sdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlPWZ1bmN0aW9uKFN0LEZ0KXtyZXR1cm4gX2RlKGx0Lmxhbmd1YWdlLFN0LEZ0KX0sdGhpcy50b0hUTUw9ZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4galkoZil9LHRoaXMudG9UYWJsZUVsZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgU3Q9Zi5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIFN0Lmluc2VydEFkamFjZW50SFRNTCgiYWZ0ZXJiZWdpbiIsalkoZikpLFN0LmZpcnN0RWxlbWVudENoaWxkfSx0aGlzLnRpbWVv'@;
put 'dXRzPVtdLHRoaXMuX3JlZ2lzdGVyVGltZW91dD1mdW5jdGlvbihTdCl7dmFyIFd0PVN0OyJmdW5jdGlvbiI9PXR5cGVvZiBXdCYmKFd0PXNldFRpbWVvdXQoV3QsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjApKSx0aGlzLnRpbWVvdXRz'@;
put 'LnB1c2goV3QpfSx0aGlzLl9jbGVhclRpbWVvdXRzPWZ1bmN0aW9uKCl7Um4odGhpcy50aW1lb3V0cyxmdW5jdGlvbihTdCl7Y2xlYXJUaW1lb3V0KFN0KX0pfSx0aGlzLmltbWVkaWF0ZXM9W10sdGhpcy5fcmVnaXN0ZXJJbW1lZGlhdGU9ZnVuY3Rpb24oU3Qpe3RoaXMuaW1tZWRpYXRlcy5w'@;
put 'dXNoKHNldEltbWVkaWF0ZShTdCkpfSx0aGlzLl9jbGVhckltbWVkaWF0ZXM9ZnVuY3Rpb24oKXtSbih0aGlzLmltbWVkaWF0ZXMsZnVuY3Rpb24oU3Qpe2NsZWFySW1tZWRpYXRlKFN0KX0pfSx0aGlzLl9yZWZyZXNoQm9yZGVycz1mdW5jdGlvbigpe3ZhciBGdD0hKGFyZ3VtZW50cy5sZW5n'@;
put 'dGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdO3BlLmRlc3Ryb3lFZGl0b3IoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSksbS52aWV3LnJlbmRlcigpLEZ0JiZYdC5pc1NlbGVjdGVkKCkmJnBlLnByZXBhcmVF'@;
put 'ZGl0b3IoKX0sdGhpcy5pc1J0bD1mdW5jdGlvbigpe3JldHVybiJydGwiPT09bS5yb290V2luZG93LmdldENvbXB1dGVkU3R5bGUobS5yb290RWxlbWVudCkuZGlyZWN0aW9ufSx0aGlzLmlzTHRyPWZ1bmN0aW9uKCl7cmV0dXJuIW0uaXNSdGwoKX0sdGhpcy5nZXREaXJlY3Rpb25GYWN0b3I9'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gbS5pc0x0cigpPzE6LTF9O3ZhciBjcj1DbHQoe2hhbmRsZUV2ZW50OmZ1bmN0aW9uKEZ0KXtyZXR1cm4gbS5pc0xpc3RlbmluZygpJiZ2b2lkIDAhPT1GdD8ua2V5fSxiZWZvcmVLZXlEb3duOmZ1bmN0aW9uKEZ0KXtyZXR1cm4gZi5ydW5Ib29rcygiYmVmb3Jl'@;
put 'S2V5RG93biIsRnQpfSxhZnRlcktleURvd246ZnVuY3Rpb24oRnQpe2YuaXNEZXN0cm95ZWR8fG0ucnVuSG9va3MoImFmdGVyRG9jdW1lbnRLZXlEb3duIixGdCl9LG93bmVyV2luZG93OnRoaXMucm9vdFdpbmRvd30pO3RoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VEb3duIixmdW5j'@;
put 'dGlvbihTdCl7ITE9PT1TdC5jdHJsS2V5JiYhMT09PVN0Lm1ldGFLZXkmJmNyLnJlbGVhc2VQcmVzc2VkS2V5cygpfSksdGhpcy5nZXRTaG9ydGN1dE1hbmFnZXI9ZnVuY3Rpb24oKXtyZXR1cm4gY3J9O3ZhciBDcj1jci5hZGRDb250ZXh0KCJncmlkIiksWXI9e3J1bk9ubHlJZjpmdW5jdGlv'@;
put 'bigpe3JldHVybiBpbyhtLmdldFNlbGVjdGVkKCkpJiZtLmNvdW50UmVuZGVyZWRSb3dzKCk+MCYmbS5jb3VudFJlbmRlcmVkQ29scygpPjB9LGdyb3VwOlRsdH07Y3Iuc2V0QWN0aXZlQ29udGV4dE5hbWUoImdyaWQiKSxDci5hZGRTaG9ydGN1dHMoW3trZXlzOltbIkNvbnRyb2wvTWV0YSIs'@;
put 'IkEiXV0sY2FsbGJhY2s6ZnVuY3Rpb24oKXttLnNlbGVjdEFsbCgpfX0se2tleXM6W1siQ29udHJvbC9NZXRhIiwiRW50ZXIiXV0sY2FsbGJhY2s6ZnVuY3Rpb24oKXtmb3IodmFyIEZ0PW0uZ2V0U2VsZWN0ZWRSYW5nZSgpLFd0PUZ0W0Z0Lmxlbmd0aC0xXS5oaWdobGlnaHQsd249V3Qucm93'@;
put 'LFNuPVd0LmNvbCxicj1tLmdldERhdGFBdENlbGwod24sU24pLGRyPW5ldyBNYXAsTHI9MDtMcjxGdC5sZW5ndGg7THIrKylGdFtMcl0uZm9yQWxsKGZ1bmN0aW9uKE5yLGRpKXtOcj49MCYmZGk+PTAmJihOciE9PXdufHxkaSE9PVNuKSYmKG0uZ2V0Q2VsbE1ldGEoTnIsZGkpLnJlYWRPbmx5'@;
put 'fHxkci5zZXQoIiIuY29uY2F0KE5yLCJ4IikuY29uY2F0KGRpKSxbTnIsZGksYnJdKSl9KTttLnNldERhdGFBdENlbGwoQXJyYXkuZnJvbShkci52YWx1ZXMoKSkpfSxydW5Pbmx5SWY6ZnVuY3Rpb24oKXtyZXR1cm4gbS5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmdldENlbGxzQ291bnQoKT4x'@;
put 'fX0se2tleXM6W1siQXJyb3dVcCJdXSxjYWxsYmFjazpmdW5jdGlvbigpe1h0LnRyYW5zZm9ybVN0YXJ0KC0xLDApfX0se2tleXM6W1siQXJyb3dVcCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazpmdW5jdGlvbigpe1h0LnNldFJhbmdlU3RhcnQobS5fY3JlYXRl'@;
put 'Q2VsbENvb3JkcyhtLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCgwLDEpLG0uZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQuY29sKSl9fSx7a2V5czpbWyJBcnJvd1VwIiwiU2hpZnQiXV0sY2FsbGJhY2s6ZnVuY3Rpb24oKXtYdC50cmFuc2Zvcm1FbmQo'@;
put 'LTEsMCl9fSx7a2V5czpbWyJBcnJvd1VwIiwiU2hpZnQiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6ZnVuY3Rpb24oKXt2YXIgRnQ9bS5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLFd0PUZ0LmZyb20sd249RnQudG8sU249bS5yb3dJbmRleE1hcHBlci5nZXROZWFy'@;
put 'ZXN0Tm90SGlkZGVuSW5kZXgoMCwxKTtYdC5zZXRSYW5nZVN0YXJ0KFd0LmNsb25lKCkpLFh0LnNldFJhbmdlRW5kKG0uX2NyZWF0ZUNlbGxDb29yZHMoU24sd24uY29sKSl9LHJ1bk9ubHlJZjpmdW5jdGlvbigpe3JldHVybiEobS5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl8fG0u'@;
put 'c2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpKX19LHtrZXlzOltbIkFycm93RG93biJdXSxjYWxsYmFjazpmdW5jdGlvbigpe1h0LnRyYW5zZm9ybVN0YXJ0KDEsMCl9fSx7a2V5czpbWyJBcnJvd0Rvd24iLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJh'@;
put 'Y2s6ZnVuY3Rpb24oKXtYdC5zZXRSYW5nZVN0YXJ0KG0uX2NyZWF0ZUNlbGxDb29yZHMobS5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobS5jb3VudFJvd3MoKS0xLC0xKSxtLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0LmNvbCkpfX0se2tleXM6W1si'@;
put 'QXJyb3dEb3duIiwiU2hpZnQiXV0sY2FsbGJhY2s6ZnVuY3Rpb24oKXtYdC50cmFuc2Zvcm1FbmQoMSwwKX19LHtrZXlzOltbIkFycm93RG93biIsIlNoaWZ0IiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIEZ0PW0uZ2V0U2VsZWN0ZWRS'@;
put 'YW5nZUxhc3QoKSxXdD1GdC5mcm9tLHduPUZ0LnRvLFNuPW0ucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KG0uY291bnRSb3dzKCktMSwtMSk7WHQuc2V0UmFuZ2VTdGFydChXdC5jbG9uZSgpKSxYdC5zZXRSYW5nZUVuZChtLl9jcmVhdGVDZWxsQ29vcmRzKFNuLHdu'@;
put 'LmNvbCkpfSxydW5Pbmx5SWY6ZnVuY3Rpb24oKXtyZXR1cm4hKG0uc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfHxtLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSl9fSx7a2V5czpbWyJBcnJvd0xlZnQiXV0sY2FsbGJhY2s6ZnVuY3Rpb24oKXtYdC50cmFuc2Zv'@;
put 'cm1TdGFydCgwLC0xKm0uZ2V0RGlyZWN0aW9uRmFjdG9yKCkpfX0se2tleXM6W1siQXJyb3dMZWZ0IiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIEZ0LFd0PW0uZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQucm93LHduPShG'@;
put 'dD1tLmNvbHVtbkluZGV4TWFwcGVyKS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXguYXBwbHkoRnQsRTkobS5pc1J0bCgpP1ttLmNvdW50Q29scygpLTEsLTFdOlswLDFdKSk7WHQuc2V0UmFuZ2VTdGFydChtLl9jcmVhdGVDZWxsQ29vcmRzKFd0LHduKSl9fSx7a2V5czpbWyJBcnJvd0xlZnQi'@;
put 'LCJTaGlmdCJdXSxjYWxsYmFjazpmdW5jdGlvbigpe1h0LnRyYW5zZm9ybUVuZCgwLC0xKm0uZ2V0RGlyZWN0aW9uRmFjdG9yKCkpfX0se2tleXM6W1siQXJyb3dMZWZ0IiwiU2hpZnQiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6ZnVuY3Rpb24oKXt2YXIgRnQs'@;
put 'V3Q9bS5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLHduPVd0LmZyb20sU249V3QudG8sYnI9KEZ0PW0uY29sdW1uSW5kZXhNYXBwZXIpLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleC5hcHBseShGdCxFOShtLmlzUnRsKCk/W20uY291bnRDb2xzKCktMSwtMV06WzAsMV0pKTtYdC5zZXRSYW5nZVN0'@;
put 'YXJ0KHduLmNsb25lKCkpLFh0LnNldFJhbmdlRW5kKG0uX2NyZWF0ZUNlbGxDb29yZHMoU24ucm93LGJyKSl9LHJ1bk9ubHlJZjpmdW5jdGlvbigpe3JldHVybiEobS5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl8fG0uc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpKX19'@;
put 'LHtrZXlzOltbIkFycm93UmlnaHQiXV0sY2FsbGJhY2s6ZnVuY3Rpb24oKXtYdC50cmFuc2Zvcm1TdGFydCgwLG0uZ2V0RGlyZWN0aW9uRmFjdG9yKCkpfX0se2tleXM6W1siQXJyb3dSaWdodCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazpmdW5jdGlvbigpe3Zh'@;
put 'ciBGdCxXdD1tLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0LnJvdyx3bj0oRnQ9bS5jb2x1bW5JbmRleE1hcHBlcikuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4LmFwcGx5KEZ0LEU5KG0uaXNSdGwoKT9bMCwxXTpbbS5jb3VudENvbHMoKS0xLC0xXSkpO1h0LnNldFJhbmdlU3Rh'@;
put 'cnQobS5fY3JlYXRlQ2VsbENvb3JkcyhXdCx3bikpfX0se2tleXM6W1siQXJyb3dSaWdodCIsIlNoaWZ0Il1dLGNhbGxiYWNrOmZ1bmN0aW9uKCl7WHQudHJhbnNmb3JtRW5kKDAsbS5nZXREaXJlY3Rpb25GYWN0b3IoKSl9fSx7a2V5czpbWyJBcnJvd1JpZ2h0IiwiU2hpZnQiLCJDb250cm9s'@;
put 'L01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6ZnVuY3Rpb24oKXt2YXIgRnQsV3Q9bS5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLHduPVd0LmZyb20sU249V3QudG8sYnI9KEZ0PW0uY29sdW1uSW5kZXhNYXBwZXIpLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleC5hcHBseShGdCxFOSht'@;
put 'LmlzUnRsKCk/WzAsMV06W20uY291bnRDb2xzKCktMSwtMV0pKTtYdC5zZXRSYW5nZVN0YXJ0KHduLmNsb25lKCkpLFh0LnNldFJhbmdlRW5kKG0uX2NyZWF0ZUNlbGxDb29yZHMoU24ucm93LGJyKSl9LHJ1bk9ubHlJZjpmdW5jdGlvbigpe3JldHVybiEobS5zZWxlY3Rpb24uaXNTZWxlY3Rl'@;
put 'ZEJ5Q29ybmVyKCl8fG0uc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpKX19LHtrZXlzOltbIkhvbWUiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6ZnVuY3Rpb24oKXt2YXIgRnQ9cGFyc2VJbnQobS5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0LDEwKSxXdD1tLmdl'@;
put 'dFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0LnJvdyx3bj1tLmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChGdCwxKTtYdC5zZXRSYW5nZVN0YXJ0KG0uX2NyZWF0ZUNlbGxDb29yZHMoV3Qsd24pKX0scnVuT25seUlmOmZ1bmN0aW9uKCl7cmV0dXJuIG0u'@;
put 'dmlldy5pc01haW5UYWJsZU5vdEZ1bGx5Q292ZXJlZEJ5T3ZlcmxheXMoKX19LHtrZXlzOltbIkhvbWUiLCJTaGlmdCJdXSxjYWxsYmFjazpmdW5jdGlvbigpe1h0LnNldFJhbmdlRW5kKG0uX2NyZWF0ZUNlbGxDb29yZHMoWHQuc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCkuZnJvbS5yb3csbS5j'@;
put 'b2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoMCwxKSkpfX0se2tleXM6W1siSG9tZSIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazpmdW5jdGlvbigpe3ZhciBGdD1wYXJzZUludChtLmdldFNldHRpbmdzKCkuZml4ZWRSb3dzVG9wLDEw'@;
put 'KSxXdD1wYXJzZUludChtLmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQsMTApLHduPW0ucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KEZ0LDEpLFNuPW0uY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KFd0LDEpO1h0LnNldFJh'@;
put 'bmdlU3RhcnQobS5fY3JlYXRlQ2VsbENvb3Jkcyh3bixTbikpfSxydW5Pbmx5SWY6ZnVuY3Rpb24oKXtyZXR1cm4gbS52aWV3LmlzTWFpblRhYmxlTm90RnVsbHlDb3ZlcmVkQnlPdmVybGF5cygpfX0se2tleXM6W1siRW5kIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOmZ1bmN0aW9uKCl7'@;
put 'WHQuc2V0UmFuZ2VTdGFydChtLl9jcmVhdGVDZWxsQ29vcmRzKG0uZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQucm93LG0uY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KG0uY291bnRDb2xzKCktMSwtMSkpKX0scnVuT25seUlmOmZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIG0udmlldy5pc01haW5UYWJsZU5vdEZ1bGx5Q292ZXJlZEJ5T3ZlcmxheXMoKX19LHtrZXlzOltbIkVuZCIsIlNoaWZ0Il1dLGNhbGxiYWNrOmZ1bmN0aW9uKCl7WHQuc2V0UmFuZ2VFbmQobS5fY3JlYXRlQ2VsbENvb3JkcyhYdC5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKS5mcm9t'@;
put 'LnJvdyxtLmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChtLmNvdW50Q29scygpLTEsLTEpKSl9fSx7a2V5czpbWyJFbmQiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6ZnVuY3Rpb24oKXt2YXIgRnQ9cGFyc2VJbnQobS5nZXRTZXR0'@;
put 'aW5ncygpLmZpeGVkUm93c0JvdHRvbSwxMCksV3Q9bS5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobS5jb3VudFJvd3MoKS1GdC0xLC0xKSx3bj1tLmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChtLmNvdW50Q29scygpLTEsLTEpO1h0'@;
put 'LnNldFJhbmdlU3RhcnQobS5fY3JlYXRlQ2VsbENvb3JkcyhXdCx3bikpfSxydW5Pbmx5SWY6ZnVuY3Rpb24oKXtyZXR1cm4gbS52aWV3LmlzTWFpblRhYmxlTm90RnVsbHlDb3ZlcmVkQnlPdmVybGF5cygpfX0se2tleXM6W1siUGFnZVVwIl1dLGNhbGxiYWNrOmZ1bmN0aW9uKCl7WHQudHJh'@;
put 'bnNmb3JtU3RhcnQoLW0uY291bnRWaXNpYmxlUm93cygpLDApfX0se2tleXM6W1siUGFnZVVwIiwiU2hpZnQiXV0sY2FsbGJhY2s6ZnVuY3Rpb24oKXt2YXIgV3Q9bS5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLnRvLHduPU1hdGgubWF4KFd0LnJvdy1tLmNvdW50VmlzaWJsZVJvd3MoKSwwKSxT'@;
put 'bj1tLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh3biwxKTtpZihudWxsIT09U24pe3ZhciBicj1tLl9jcmVhdGVDZWxsQ29vcmRzKFNuLFd0LmNvbCksZHI9V3Qucm93LW0udmlldy5nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdygpLExyPU1hdGgubWF4KGJyLnJvdy1k'@;
put 'ciwwKTtYdC5zZXRSYW5nZUVuZChiciksbS5zY3JvbGxWaWV3cG9ydFRvKExyKX19fSx7a2V5czpbWyJQYWdlRG93biJdXSxjYWxsYmFjazpmdW5jdGlvbigpe1h0LnRyYW5zZm9ybVN0YXJ0KG0uY291bnRWaXNpYmxlUm93cygpLDApfX0se2tleXM6W1siUGFnZURvd24iLCJTaGlmdCJdXSxj'@;
put 'YWxsYmFjazpmdW5jdGlvbigpe3ZhciBXdD1tLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkudG8sd249TWF0aC5taW4oV3Qucm93K20uY291bnRWaXNpYmxlUm93cygpLG0uY291bnRSb3dzKCktMSksU249bS5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgod24sLTEpO2lm'@;
put 'KG51bGwhPT1Tbil7dmFyIGJyPW0uX2NyZWF0ZUNlbGxDb29yZHMoU24sV3QuY29sKSxkcj1XdC5yb3ctbS52aWV3LmdldEZpcnN0RnVsbHlWaXNpYmxlUm93KCksTHI9TWF0aC5taW4oYnIucm93LWRyLG0uY291bnRSb3dzKCktMSk7WHQuc2V0UmFuZ2VFbmQoYnIpLG0uc2Nyb2xsVmlld3Bv'@;
put 'cnRUbyhMcil9fX0se2tleXM6W1siVGFiIl1dLGNhbGxiYWNrOmZ1bmN0aW9uKEZ0KXt2YXIgV3Q9ImZ1bmN0aW9uIj09dHlwZW9mIGx0LnRhYk1vdmVzP2x0LnRhYk1vdmVzKEZ0KTpsdC50YWJNb3ZlcztYdC50cmFuc2Zvcm1TdGFydChXdC5yb3csV3QuY29sLCEwKX19LHtrZXlzOltbIlNo'@;
put 'aWZ0IiwiVGFiIl1dLGNhbGxiYWNrOmZ1bmN0aW9uKEZ0KXt2YXIgV3Q9ImZ1bmN0aW9uIj09dHlwZW9mIGx0LnRhYk1vdmVzP2x0LnRhYk1vdmVzKEZ0KTpsdC50YWJNb3ZlcztYdC50cmFuc2Zvcm1TdGFydCgtV3Qucm93LC1XdC5jb2wpfX1dLFlyKSxRWSgpLmZvckVhY2goZnVuY3Rpb24o'@;
put 'U3Qpe3ZhciBGdD1lTShTdCk7Z3QuYWRkSXRlbShTdCxuZXcgRnQoZikpfSksdW8uZ2V0U2luZ2xldG9uKCkucnVuKG0sImNvbnN0cnVjdCIpfXZhciBBaGU9e19ob29rc1N0b3JhZ2U6T2JqZWN0LmNyZWF0ZShudWxsKSxhZGRIb29rOmZ1bmN0aW9uKGMsYSl7cmV0dXJuIHRoaXMuX2hvb2tz'@;
put 'U3RvcmFnZVtjXXx8KHRoaXMuX2hvb2tzU3RvcmFnZVtjXT1bXSksdGhpcy5ob3QuYWRkSG9vayhjLGEpLHRoaXMuX2hvb2tzU3RvcmFnZVtjXS5wdXNoKGEpLHRoaXN9LHJlbW92ZUhvb2tzQnlLZXk6ZnVuY3Rpb24oYyl7dmFyIGE9dGhpcztSbih0aGlzLl9ob29rc1N0b3JhZ2VbY118fFtd'@;
put 'LGZ1bmN0aW9uKGYpe2EuaG90LnJlbW92ZUhvb2soYyxmKX0pfSxjbGVhckhvb2tzOmZ1bmN0aW9uKCl7dmFyIGM9dGhpczttYSh0aGlzLl9ob29rc1N0b3JhZ2UsZnVuY3Rpb24oYSxmKXtyZXR1cm4gYy5yZW1vdmVIb29rc0J5S2V5KGYpfSksdGhpcy5faG9va3NTdG9yYWdlPXt9fX07SGgo'@;
put 'QWhlLCJNSVhJTl9OQU1FIiwiaG9va3NSZWZSZWdpc3RlcmVyIix7d3JpdGFibGU6ITEsZW51bWVyYWJsZTohMX0pO2NvbnN0IERsdD1BaGU7ZnVuY3Rpb24geDkobCl7cmV0dXJuKHg5PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9y'@;
put 'P2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gVGhlKGwsYyl7'@;
put 'KG51bGw9PWN8fGM+bC5sZW5ndGgpJiYoYz1sLmxlbmd0aCk7Zm9yKHZhciBhPTAsZj1uZXcgQXJyYXkoYyk7YTxjO2ErKylmW2FdPWxbYV07cmV0dXJuIGZ9ZnVuY3Rpb24gcSQobCxjKXtyZXR1cm4ocSQ9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5k'@;
put 'KCk6ZnVuY3Rpb24oZixkKXtyZXR1cm4gZi5fX3Byb3RvX189ZCxmfSkobCxjKX1mdW5jdGlvbiBmTChsKXtyZXR1cm4oZkw9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuX19wcm90b19ffHxPYmplY3QuZ2V0'@;
put 'UHJvdG90eXBlT2YoYSl9KShsKX1mdW5jdGlvbiBPaGUobCxjKXtpZighKGwgaW5zdGFuY2VvZiBjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBEaGUobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFy'@;
put 'IGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLHpsdChmLmtleSksZil9fWZ1bmN0aW9uIEloZShsLGMsYSl7cmV0dXJuIGMmJkRoZShsLnByb3Rv'@;
put 'dHlwZSxjKSxhJiZEaGUobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxsfWZ1bmN0aW9uIHpsdChsKXt2YXIgYz1mdW5jdGlvbiBVbHQobCxjKXtpZigib2JqZWN0IiE9PXg5KGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJv'@;
put 'bC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PXg5KGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJz'@;
put 'dHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT14OShjKT9jOlN0cmluZyhjKX12YXIgUXU9T2JqZWN0LmZyZWV6ZSh7VklSR0lOOiJTVEFURV9WSVJHSU4iLEVESVRJTkc6IlNUQVRFX0VESVRJTkciLFdBSVRJTkc6IlNUQVRFX1dBSVRJ'@;
put 'TkciLEZJTklTSEVEOiJTVEFURV9GSU5JU0hFRCJ9KSxYJD0iYmFzZUVkaXRvciIsQTk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKGMpe09oZSh0aGlzLGwpLHRoaXMuaG90PWMsdGhpcy5pbnN0YW5jZT1jLHRoaXMuc3RhdGU9UXUuVklSR0lOLHRoaXMuX29wZW5lZD0hMSx0aGlzLl9mdWxsRWRp'@;
put 'dE1vZGU9ITEsdGhpcy5fY2xvc2VDYWxsYmFjaz1udWxsLHRoaXMuVEQ9bnVsbCx0aGlzLnJvdz1udWxsLHRoaXMuY29sPW51bGwsdGhpcy5wcm9wPW51bGwsdGhpcy5vcmlnaW5hbFZhbHVlPW51bGwsdGhpcy5jZWxsUHJvcGVydGllcz1udWxsLHRoaXMuaW5pdCgpfXJldHVybiBJaGUobCxb'@;
put 'e2tleToiX2ZpcmVDYWxsYmFja3MiLHZhbHVlOmZ1bmN0aW9uKGEpe3RoaXMuX2Nsb3NlQ2FsbGJhY2smJih0aGlzLl9jbG9zZUNhbGxiYWNrKGEpLHRoaXMuX2Nsb3NlQ2FsbGJhY2s9bnVsbCl9fSx7a2V5OiJpbml0Iix2YWx1ZTpmdW5jdGlvbigpe319LHtrZXk6ImdldFZhbHVlIix2YWx1'@;
put 'ZTpmdW5jdGlvbigpe3Rocm93IEVycm9yKCJFZGl0b3IgZ2V0VmFsdWUoKSBtZXRob2QgdW5pbXBsZW1lbnRlZCIpfX0se2tleToic2V0VmFsdWUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoIkVkaXRvciBzZXRWYWx1ZSgpIG1ldGhvZCB1bmltcGxlbWVudGVkIil9fSx7a2V5OiJv'@;
put 'cGVuIix2YWx1ZTpmdW5jdGlvbigpe3Rocm93IEVycm9yKCJFZGl0b3Igb3BlbigpIG1ldGhvZCB1bmltcGxlbWVudGVkIil9fSx7a2V5OiJjbG9zZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiRWRpdG9yIGNsb3NlKCkgbWV0aG9kIHVuaW1wbGVtZW50ZWQiKX19LHtrZXk6InBy'@;
put 'ZXBhcmUiLHZhbHVlOmZ1bmN0aW9uKGEsZixkLGgsbSxfKXt0aGlzLlREPWgsdGhpcy5yb3c9YSx0aGlzLmNvbD1mLHRoaXMucHJvcD1kLHRoaXMub3JpZ2luYWxWYWx1ZT1tLHRoaXMuY2VsbFByb3BlcnRpZXM9Xyx0aGlzLnN0YXRlPVF1LlZJUkdJTn19LHtrZXk6ImV4dGVuZCIsdmFsdWU6'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oYSl7IWZ1bmN0aW9uIEhsdChsLGMpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjJiZudWxsIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2wucHJvdG90'@;
put 'eXBlPU9iamVjdC5jcmVhdGUoYyYmYy5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpsLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxjJiZxJChsLGMpfShkLGEpO3ZhciBmPWZ1bmN0'@;
put 'aW9uIE5sdChsKXt2YXIgYz1mdW5jdGlvbiBqbHQoKXtpZih0eXBlb2YgUmVmbGVjdD4idSJ8fCFSZWZsZWN0LmNvbnN0cnVjdHx8UmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnBy'@;
put 'b3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSxmdW5jdGlvbigpe30pKSwhMH1jYXRjaHtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGQsZj1mTChsKTtpZihjKXt2YXIgaD1mTCh0aGlzKS5jb25zdHJ1Y3RvcjtkPVJlZmxlY3QuY29u'@;
put 'c3RydWN0KGYsYXJndW1lbnRzLGgpfWVsc2UgZD1mLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24gVmx0KGwsYyl7aWYoYyYmKCJvYmplY3QiPT09eDkoYyl8fCJmdW5jdGlvbiI9PXR5cGVvZiBjKSlyZXR1cm4gYztpZih2b2lkIDAhPT1jKXRocm93IG5ldyBUeXBlRXJy'@;
put 'b3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uIEJsdChsKXtpZih2b2lkIDA9PT1sKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkg'@;
put 'aGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGx9KGwpfSh0aGlzLGQpfX0oZCk7ZnVuY3Rpb24gZCgpe3JldHVybiBPaGUodGhpcyxkKSxmLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gSWhlKGQpfSh0aGlzLmNvbnN0cnVjdG9yKX19LHtrZXk6InNhdmVWYWx1ZSIsdmFsdWU6ZnVu'@;
put 'Y3Rpb24oYSxmKXt2YXIgaCxtLF8sTyxkPXRoaXM7aWYoZil7dmFyIFg9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KCk7aD1NYXRoLm1heChNYXRoLm1pbihYWzBdLFhbMl0pLDApLG09TWF0aC5tYXgoTWF0aC5taW4oWFsxXSxYWzNdKSwwKSxfPU1hdGgubWF4KFhbMF0sWFsyXSksTz1NYXRo'@;
put 'Lm1heChYWzFdLFhbM10pfWVsc2V7dmFyIGFlPVt0aGlzLnJvdyx0aGlzLmNvbCxudWxsLG51bGxdO2g9YWVbMF0sbT1hZVsxXSxfPWFlWzJdLE89YWVbM119dmFyIHBlPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlHZXRDZWxsQ29vcmRzIixoLG0pO2lmKEFycmF5LmlzQXJyYXkocGUpKXt2'@;
put 'YXIgYmU9ZnVuY3Rpb24gSWx0KGwsYyl7cmV0dXJuIGZ1bmN0aW9uIEZsdChsKXtpZihBcnJheS5pc0FycmF5KGwpKXJldHVybiBsfShsKXx8ZnVuY3Rpb24gUGx0KGwsYyl7dmFyIGE9bnVsbD09bD9udWxsOnR5cGVvZiBTeW1ib2w8InUiJiZsW1N5bWJvbC5pdGVyYXRvcl18fGxbIkBAaXRl'@;
put 'cmF0b3IiXTtpZihudWxsIT1hKXt2YXIgZixkLGgsbSxfPVtdLE89ITAsWD0hMTt0cnl7aWYoaD0oYT1hLmNhbGwobCkpLm5leHQsMD09PWMpe2lmKE9iamVjdChhKSE9PWEpcmV0dXJuO089ITF9ZWxzZSBmb3IoOyEoTz0oZj1oLmNhbGwoYSkpLmRvbmUpJiYoXy5wdXNoKGYudmFsdWUpLF8u'@;
put 'bGVuZ3RoIT09Yyk7Tz0hMCk7fWNhdGNoKGFlKXtYPSEwLGQ9YWV9ZmluYWxseXt0cnl7aWYoIU8mJm51bGwhPWEucmV0dXJuJiYobT1hLnJldHVybigpLE9iamVjdChtKSE9PW0pKXJldHVybn1maW5hbGx5e2lmKFgpdGhyb3cgZH19cmV0dXJuIF99fShsLGMpfHxmdW5jdGlvbiBMbHQobCxj'@;
put 'KXtpZihsKXtpZigic3RyaW5nIj09dHlwZW9mIGwpcmV0dXJuIFRoZShsLGMpO3ZhciBhPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsKS5zbGljZSg4LC0xKTtpZigiT2JqZWN0Ij09PWEmJmwuY29uc3RydWN0b3ImJihhPWwuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1hfHwi'@;
put 'U2V0Ij09PWEpcmV0dXJuIEFycmF5LmZyb20obCk7aWYoIkFyZ3VtZW50cyI9PT1hfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChhKSlyZXR1cm4gVGhlKGwsYyl9fShsLGMpfHxmdW5jdGlvbiBSbHQoKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZh'@;
put 'bGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfShwZSwyKTtoPWJlWzBdLG09YmVbMV19dmFy'@;
put 'IFZlPXRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpLFplPXtydW5Pbmx5SWY6ZnVuY3Rpb24oKXtyZXR1cm4gaW8oZC5ob3QuZ2V0U2VsZWN0ZWQoKSl9LGdyb3VwOlgkfTt0aGlzLmlzSW5GdWxsRWRpdE1vZGUoKSYmVmUuYWRkU2hvcnRjdXRzKFt7'@;
put 'a2V5czpbWyJBcnJvd1VwIl1dLGNhbGxiYWNrOmZ1bmN0aW9uKCl7ZC5ob3Quc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KC0xLDApfX0se2tleXM6W1siQXJyb3dEb3duIl1dLGNhbGxiYWNrOmZ1bmN0aW9uKCl7ZC5ob3Quc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KDEsMCl9fSx7a2V5czpb'@;
put 'WyJBcnJvd0xlZnQiXV0sY2FsbGJhY2s6ZnVuY3Rpb24oKXtkLmhvdC5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoMCwtMSpkLmhvdC5nZXREaXJlY3Rpb25GYWN0b3IoKSl9fSx7a2V5czpbWyJBcnJvd1JpZ2h0Il1dLGNhbGxiYWNrOmZ1bmN0aW9uKCl7ZC5ob3Quc2VsZWN0aW9uLnRyYW5z'@;
put 'Zm9ybVN0YXJ0KDAsZC5ob3QuZ2V0RGlyZWN0aW9uRmFjdG9yKCkpfX1dLFplKSx0aGlzLmhvdC5wb3B1bGF0ZUZyb21BcnJheShoLG0sYSxfLE8sImVkaXQiKX19LHtrZXk6ImJlZ2luRWRpdGluZyIsdmFsdWU6ZnVuY3Rpb24oYSxmKXtpZih0aGlzLnN0YXRlPT09UXUuVklSR0lOKXt2YXIg'@;
put 'ZD10aGlzLmhvdCxoPWQucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh0aGlzLnJvdyksbT1kLmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodGhpcy5jb2wpO2lmKGQudmlldy5zY3JvbGxWaWV3cG9ydChkLl9jcmVhdGVD'@;
put 'ZWxsQ29vcmRzKGgsbSkpLHRoaXMuc3RhdGU9UXUuRURJVElORyx0aGlzLmlzSW5GdWxsRWRpdE1vZGUoKSl7dmFyIF89InN0cmluZyI9PXR5cGVvZiBhP2E6TXModGhpcy5vcmlnaW5hbFZhbHVlKTt0aGlzLnNldFZhbHVlKF8pfXRoaXMub3BlbihmKSx0aGlzLl9vcGVuZWQ9ITAsdGhpcy5m'@;
put 'b2N1cygpLGQudmlldy5yZW5kZXIoKSxkLnJ1bkhvb2tzKCJhZnRlckJlZ2luRWRpdGluZyIsdGhpcy5yb3csdGhpcy5jb2wpfX19LHtrZXk6ImZpbmlzaEVkaXRpbmciLHZhbHVlOmZ1bmN0aW9uKGEsZixkKXt2YXIgbSxoPXRoaXM7aWYoZCl7dmFyIF89dGhpcy5fY2xvc2VDYWxsYmFjazt0'@;
put 'aGlzLl9jbG9zZUNhbGxiYWNrPWZ1bmN0aW9uKHBlKXtfJiZfKHBlKSxkKHBlKSxoLmhvdC52aWV3LnJlbmRlcigpfX1pZighdGhpcy5pc1dhaXRpbmcoKSl7dmFyIFg9dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIik7aWYoWC5yZW1vdmVTaG9ydGN1'@;
put 'dHNCeUdyb3VwKFgkKSxYLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoblIpLHRoaXMuc3RhdGU9PT1RdS5WSVJHSU4pcmV0dXJuIHZvaWQgdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dChmdW5jdGlvbigpe2guX2ZpcmVDYWxsYmFja3MoITApfSk7aWYodGhpcy5zdGF0ZT09PVF1LkVESVRJTkcp'@;
put 'e2lmKGEpcmV0dXJuIHRoaXMuY2FuY2VsQ2hhbmdlcygpLHZvaWQgdGhpcy5ob3Qudmlldy5yZW5kZXIoKTt2YXIgYWU9dGhpcy5nZXRWYWx1ZSgpO209dGhpcy5jZWxsUHJvcGVydGllcy50cmltV2hpdGVzcGFjZT9bWyJzdHJpbmciPT10eXBlb2YgYWU/U3RyaW5nLnByb3RvdHlwZS50cmlt'@;
put 'LmNhbGwoYWV8fCIiKTphZV1dOltbYWVdXSx0aGlzLnN0YXRlPVF1LldBSVRJTkcsdGhpcy5zYXZlVmFsdWUobSxmKSx0aGlzLmhvdC5nZXRDZWxsVmFsaWRhdG9yKHRoaXMuY2VsbFByb3BlcnRpZXMpP3RoaXMuaG90LmFkZEhvb2tPbmNlKCJwb3N0QWZ0ZXJWYWxpZGF0ZSIsZnVuY3Rpb24o'@;
put 'cGUpe2guc3RhdGU9UXUuRklOSVNIRUQsaC5kaXNjYXJkRWRpdG9yKHBlKX0pOih0aGlzLnN0YXRlPVF1LkZJTklTSEVELHRoaXMuZGlzY2FyZEVkaXRvcighMCkpfX19fSx7a2V5OiJjYW5jZWxDaGFuZ2VzIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc3RhdGU9UXUuRklOSVNIRUQsdGhpcy5k'@;
put 'aXNjYXJkRWRpdG9yKCl9fSx7a2V5OiJkaXNjYXJkRWRpdG9yIix2YWx1ZTpmdW5jdGlvbihhKXt0aGlzLnN0YXRlPT09UXUuRklOSVNIRUQmJighMT09PWEmJiEwIT09dGhpcy5jZWxsUHJvcGVydGllcy5hbGxvd0ludmFsaWQ/KHRoaXMuaG90LnNlbGVjdENlbGwodGhpcy5yb3csdGhpcy5j'@;
put 'b2wpLHRoaXMuZm9jdXMoKSx0aGlzLnN0YXRlPVF1LkVESVRJTkcsdGhpcy5fZmlyZUNhbGxiYWNrcyghMSkpOih0aGlzLmNsb3NlKCksdGhpcy5fb3BlbmVkPSExLHRoaXMuX2Z1bGxFZGl0TW9kZT0hMSx0aGlzLnN0YXRlPVF1LlZJUkdJTix0aGlzLl9maXJlQ2FsbGJhY2tzKCEwKSx0aGlz'@;
put 'LmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5zZXRBY3RpdmVDb250ZXh0TmFtZSgiZ3JpZCIpKSl9fSx7a2V5OiJlbmFibGVGdWxsRWRpdE1vZGUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fZnVsbEVkaXRNb2RlPSEwfX0se2tleToiaXNJbkZ1bGxFZGl0TW9kZSIsdmFsdWU6ZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4gdGhpcy5fZnVsbEVkaXRNb2RlfX0se2tleToiaXNPcGVuZWQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29wZW5lZH19LHtrZXk6ImlzV2FpdGluZyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGF0ZT09PVF1LldBSVRJTkd9fSx7a2V5OiJnZXRFZGl0'@;
put 'ZWRDZWxsUmVjdCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgYSxmPXRoaXMuZ2V0RWRpdGVkQ2VsbCgpO2lmKGYpe3ZhciBkPXRoaXMuaG90LnZpZXcuX3d0LGg9ZC53dE92ZXJsYXlzLG09ZC53dFZpZXdwb3J0LF89dGhpcy5ob3Qucm9vdFdpbmRvdyxPPWl1KGYpLFg9U2woZiksYWU9aXUodGhp'@;
put 'cy5ob3Qucm9vdEVsZW1lbnQpLHBlPVNsKHRoaXMuaG90LnJvb3RFbGVtZW50KSxiZT1oLnRvcE92ZXJsYXkuaG9sZGVyLHhlPWguaW5saW5lU3RhcnRPdmVybGF5LmhvbGRlcixWZT1iZSE9PV8/YmUuc2Nyb2xsVG9wOjAsWmU9eGUhPT1fP3hlLnNjcm9sbExlZnQ6MCxsdD1fLmlubmVyV2lk'@;
put 'dGgtYWUubGVmdC1wZSxndD0obnVsbCE9PShhPWguZ2V0UGFyZW50T3ZlcmxheShmKSkmJnZvaWQgMCE9PWE/YTp0aGlzLmhvdC52aWV3Ll93dCkud3RUYWJsZSxqdD1ndC5uYW1lLHJuPVsibWFzdGVyIiwiaW5saW5lX3N0YXJ0Il0uaW5jbHVkZXMoanQpP1ZlOjAsWHQ9WyJtYXN0ZXIiLCJ0'@;
put 'b3AiLCJib3R0b20iXS5pbmNsdWRlcyhqdCk/WmU6MCxRbj1PLnRvcC1hZS50b3AtKE8udG9wPT09YWUudG9wPzA6MSktcm4sT3I9MDtPcj10aGlzLmhvdC5pc1J0bCgpP18uaW5uZXJXaWR0aC1PLmxlZnQtWC1sdC0xK1h0Ok8ubGVmdC1hZS5sZWZ0LTEtWHQsWyJ0b3AiLCJ0b3BfaW5saW5l'@;
put 'X3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKGp0KSYmKFFuKz1oLnRvcE92ZXJsYXkuZ2V0T3ZlcmxheU9mZnNldCgpKSxbImlubGluZV9zdGFydCIsInRvcF9pbmxpbmVfc3RhcnRfY29ybmVyIl0uaW5jbHVkZXMoanQpJiYoT3IrPU1hdGguYWJzKGguaW5saW5lU3RhcnRPdmVybGF5LmdldE92'@;
put 'ZXJsYXlPZmZzZXQoKSkpO3ZhciBWcj10aGlzLmhvdC5oYXNDb2xIZWFkZXJzKCksWnI9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh0aGlzLnJvdyksaXI9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1'@;
put 'YWxJbmRleCh0aGlzLmNvbCksQXI9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUluZGV4ZXNMZW5ndGgoKS10aGlzLmhvdC52aWV3Ll93dC5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKTsoVnImJlpyPD0wfHxacj09PUFyKSYmKFFuKz0xKSxpcjw9MCYmKE9yKz0x'@;
put 'KTt2YXIgRW49bS5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uLFRyPW0uY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbixWbj1NYXRoLmFicyhoLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRTY3JvbGxQb3NpdGlvbigpKSxjcj1oLnRvcE92ZXJsYXkuZ2V0U2Ny'@;
put 'b2xsUG9zaXRpb24oKSxDcj1OdSh0aGlzLmhvdC5yb290RG9jdW1lbnQpLFlyPWYub2Zmc2V0VG9wK0VuLWNyLFN0PTA7aWYodGhpcy5ob3QuaXNSdGwoKSl7dmFyIEZ0PWYub2Zmc2V0TGVmdDtTdD1GdD49MD9ndC5nZXRXaWR0aCgpLWYub2Zmc2V0TGVmdDpNYXRoLmFicyhGdCksU3QrPVRy'@;
put 'LVZuLVh9ZWxzZSBTdD1mLm9mZnNldExlZnQrVHItVm47dmFyIFd0PUQ0KHRoaXMuVEQsdGhpcy5ob3Qucm9vdFdpbmRvdyksd249dGhpcy5ob3QuaXNSdGwoKT8iYm9yZGVyUmlnaHRXaWR0aCI6ImJvcmRlckxlZnRXaWR0aCIsU249cGFyc2VJbnQoV3Rbd25dLDEwKT4wPzA6MSxicj1wYXJz'@;
put 'ZUludChXdC5ib3JkZXJUb3BXaWR0aCwxMCk+MD8wOjEsZHI9U2woZikrU24sTHI9Y3MoZikrYnIsTnI9XzBlKGJlKT9DcjowLGRpPXcwZSh4ZSk/Q3I6MCxxcj10aGlzLmhvdC52aWV3Lm1heGltdW1WaXNpYmxlRWxlbWVudFdpZHRoKFN0KS1OcitTbjtyZXR1cm57dG9wOlFuLHN0YXJ0Ok9y'@;
put 'LGhlaWdodDpMcixtYXhIZWlnaHQ6TWF0aC5tYXgodGhpcy5ob3Qudmlldy5tYXhpbXVtVmlzaWJsZUVsZW1lbnRIZWlnaHQoWXIpLWRpK2JyLDIzKSx3aWR0aDpkcixtYXhXaWR0aDpxcn19fX0se2tleToiZ2V0RWRpdGVkQ2VsbHNMYXllckNsYXNzIix2YWx1ZTpmdW5jdGlvbigpe3N3aXRj'@;
put 'aCh0aGlzLmNoZWNrRWRpdG9yU2VjdGlvbigpKXtjYXNlImlubGluZS1zdGFydCI6cmV0dXJuImh0X2Nsb25lX2xlZnQgaHRfY2xvbmVfaW5saW5lX3N0YXJ0IjtjYXNlImJvdHRvbSI6cmV0dXJuImh0X2Nsb25lX2JvdHRvbSI7Y2FzZSJib3R0b20taW5saW5lLXN0YXJ0LWNvcm5lciI6cmV0'@;
put 'dXJuImh0X2Nsb25lX2JvdHRvbV9sZWZ0X2Nvcm5lciBodF9jbG9uZV9ib3R0b21faW5saW5lX3N0YXJ0X2Nvcm5lciI7Y2FzZSJ0b3AiOnJldHVybiJodF9jbG9uZV90b3AiO2Nhc2UidG9wLWlubGluZS1zdGFydC1jb3JuZXIiOnJldHVybiJodF9jbG9uZV90b3BfbGVmdF9jb3JuZXIgaHRf'@;
put 'Y2xvbmVfdG9wX2lubGluZV9zdGFydF9jb3JuZXIiO2RlZmF1bHQ6cmV0dXJuImh0X2Nsb25lX21hc3RlciJ9fX0se2tleToiZ2V0RWRpdGVkQ2VsbCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ob3QuZ2V0Q2VsbCh0aGlzLnJvdyx0aGlzLmNvbCwhMCl9fSx7a2V5OiJjaGVja0Vk'@;
put 'aXRvclNlY3Rpb24iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5ob3QuY291bnRSb3dzKCksZj0iIjtyZXR1cm4gdGhpcy5yb3c8dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NUb3A/Zj10aGlzLmNvbDx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0'@;
put 'PyJ0b3AtaW5saW5lLXN0YXJ0LWNvcm5lciI6InRvcCI6dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NCb3R0b20mJnRoaXMucm93Pj1hLXRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRSb3dzQm90dG9tP2Y9dGhpcy5jb2w8dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENv'@;
put 'bHVtbnNTdGFydD8iYm90dG9tLWlubGluZS1zdGFydC1jb3JuZXIiOiJib3R0b20iOnRoaXMuY29sPHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQmJihmPSJpbmxpbmUtc3RhcnQiKSxmfX1dLFt7a2V5OiJFRElUT1JfVFlQRSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'ImJhc2UifX1dKSxsfSgpO2Z1bmN0aW9uIFlsdCgpe3ZhciBjLGw9e21pbkhlaWdodDoyMDAsbWF4SGVpZ2h0OjMwMCxtaW5XaWR0aDoxMDAsbWF4V2lkdGg6MzAwfSxhPWRvY3VtZW50LmJvZHksZj1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIiksZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50'@;
put 'KCJTUEFOIiksaD1mdW5jdGlvbih4ZSxWZSxaZSl7eGUuYWRkRXZlbnRMaXN0ZW5lcihWZSxaZSwhMSl9LG09ZnVuY3Rpb24oeGUsVmUsWmUpe3hlLnJlbW92ZUV2ZW50TGlzdGVuZXIoVmUsWmUsITEpfSxfPWZ1bmN0aW9uKHhlKXt2YXIgVmUsWmU7eGU/L15bYS16QS1aIFwuLFxcXC9cfDAt'@;
put 'OV0kLy50ZXN0KHhlKXx8KHhlPSIuIik6eGU9IiIsdm9pZCAwIT09Zi50ZXh0Q29udGVudD9mLnRleHRDb250ZW50PWMudmFsdWUreGU6Zi5kYXRhPWMudmFsdWUreGUsZC5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGQuc3R5bGUuZm9udFNpemU9cGUoYykuZm9udFNpemUsZC5zdHlsZS5m'@;
put 'b250RmFtaWx5PXBlKGMpLmZvbnRGYW1pbHksZC5zdHlsZS53aGl0ZVNwYWNlPSJwcmUiLGEuYXBwZW5kQ2hpbGQoZCksVmU9ZC5jbGllbnRXaWR0aCsyLGEucmVtb3ZlQ2hpbGQoZCksYy5zdHlsZS5oZWlnaHQ9bC5taW5IZWlnaHQrInB4IixjLnN0eWxlLndpZHRoPWwubWluV2lkdGg+VmU/'@;
put 'bC5taW5XaWR0aCsicHgiOlZlPmwubWF4V2lkdGg/bC5tYXhXaWR0aCsicHgiOlZlKyJweCIsbC5taW5IZWlnaHQ+KFplPWMuc2Nyb2xsSGVpZ2h0P2Muc2Nyb2xsSGVpZ2h0LTE6MCk/Yy5zdHlsZS5oZWlnaHQ9bC5taW5IZWlnaHQrInB4IjpsLm1heEhlaWdodDxaZT8oYy5zdHlsZS5oZWln'@;
put 'aHQ9bC5tYXhIZWlnaHQrInB4IixjLnN0eWxlLm92ZXJmbG93WT0idmlzaWJsZSIpOmMuc3R5bGUuaGVpZ2h0PVplKyJweCJ9LE89ZnVuY3Rpb24oKXt3aW5kb3cuc2V0VGltZW91dChfLDApfTtmdW5jdGlvbiBwZShiZSl7cmV0dXJuIGJlLmN1cnJlbnRTdHlsZXx8ZG9jdW1lbnQuZGVmYXVs'@;
put 'dFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShiZSl9cmV0dXJue2luaXQ6ZnVuY3Rpb24oeGUsVmUsWmUpeyFmdW5jdGlvbih4ZSxWZSxaZSl7Yz14ZSxmdW5jdGlvbih4ZSl7aWYoeGUmJnhlLm1pbkhlaWdodClpZigiaW5oZXJpdCI9PXhlLm1pbkhlaWdodClsLm1pbkhlaWdodD1jLmNsaWVudEhl'@;
put 'aWdodDtlbHNle3ZhciBWZT1wYXJzZUludCh4ZS5taW5IZWlnaHQpO2lzTmFOKFZlKXx8KGwubWluSGVpZ2h0PVZlKX1pZih4ZSYmeGUubWF4SGVpZ2h0KWlmKCJpbmhlcml0Ij09eGUubWF4SGVpZ2h0KWwubWF4SGVpZ2h0PWMuY2xpZW50SGVpZ2h0O2Vsc2V7dmFyIFplPXBhcnNlSW50KHhl'@;
put 'Lm1heEhlaWdodCk7aXNOYU4oWmUpfHwobC5tYXhIZWlnaHQ9WmUpfWlmKHhlJiZ4ZS5taW5XaWR0aClpZigiaW5oZXJpdCI9PXhlLm1pbldpZHRoKWwubWluV2lkdGg9Yy5jbGllbnRXaWR0aDtlbHNle3ZhciBsdD1wYXJzZUludCh4ZS5taW5XaWR0aCk7aXNOYU4obHQpfHwobC5taW5XaWR0'@;
put 'aD1sdCl9aWYoeGUmJnhlLm1heFdpZHRoKWlmKCJpbmhlcml0Ij09eGUubWF4V2lkdGgpbC5tYXhXaWR0aD1jLmNsaWVudFdpZHRoO2Vsc2V7dmFyIGR0PXBhcnNlSW50KHhlLm1heFdpZHRoKTtpc05hTihkdCl8fChsLm1heFdpZHRoPWR0KX1kLmZpcnN0Q2hpbGR8fChkLmNsYXNzTmFtZT0i'@;
put 'YXV0b1Jlc2l6ZSIsZC5zdHlsZS5kaXNwbGF5PSJpbmxpbmUtYmxvY2siLGQuYXBwZW5kQ2hpbGQoZikpfShWZSksIlRFWFRBUkVBIj09Yy5ub2RlTmFtZSYmKGMuc3R5bGUucmVzaXplPSJub25lIixjLnN0eWxlLm92ZXJmbG93WT0iIixjLnN0eWxlLmhlaWdodD1sLm1pbkhlaWdodCsicHgi'@;
put 'LGMuc3R5bGUubWluV2lkdGg9bC5taW5XaWR0aCsicHgiLGMuc3R5bGUubWF4V2lkdGg9bC5tYXhXaWR0aCsicHgiLGMuc3R5bGUub3ZlcmZsb3dZPSJoaWRkZW4iKSxaZSYmKGgoYywiY2hhbmdlIixfKSxoKGMsImN1dCIsTyksaChjLCJwYXN0ZSIsTyksaChjLCJkcm9wIixPKSxoKGMsImtl'@;
put 'eWRvd24iLE8pLGgoYywiZm9jdXMiLF8pLGgoYywiY29tcG9zaXRpb25zdGFydCIsTyksaChjLCJjb21wb3NpdGlvbnVwZGF0ZSIsTyksaChjLCJjb21wb3NpdGlvbmVuZCIsTykpLF8oKX0oeGUsVmUsWmUpfSx1bk9ic2VydmU6ZnVuY3Rpb24oKXttKGMsImNoYW5nZSIsXyksbShjLCJjdXQi'@;
put 'LE8pLG0oYywicGFzdGUiLE8pLG0oYywiZHJvcCIsTyksbShjLCJrZXlkb3duIixPKSxtKGMsImZvY3VzIixfKSxtKGMsImNvbXBvc2l0aW9uc3RhcnQiLE8pLG0oYywiY29tcG9zaXRpb251cGRhdGUiLE8pLG0oYywiY29tcG9zaXRpb25lbmQiLE8pfSxyZXNpemU6X319ZnVuY3Rpb24gUmhl'@;
put 'KGwsYyl7Zm9yKHZhciBhPWtZKGMpLGY9Yy52YWx1ZS5zcGxpdCgiXG4iKSxkPWEsaD0wLG09MDttPGYubGVuZ3RoO20rKyl7MCE9PW0mJihoKz1mW20tMV0ubGVuZ3RoKzEpO3ZhciBPPWgrZlttXS5sZW5ndGg7aWYoImhvbWUiPT09bD9kPWg6ImVuZCI9PT1sJiYoZD1PKSxhPD1PKWJyZWFr'@;
put 'fVdTKGMsZCl9ZnVuY3Rpb24gVDkobCl7cmV0dXJuKFQ5PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBT'@;
put 'eW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gTGhlKGwsYyl7cmV0dXJuIGZ1bmN0aW9uIEtsdChsKXtpZihBcnJheS5pc0FycmF5KGwpKXJldHVybiBsfShsKXx8ZnVuY3Rpb24gJGx0KGws'@;
put 'Yyl7dmFyIGE9bnVsbD09bD9udWxsOnR5cGVvZiBTeW1ib2w8InUiJiZsW1N5bWJvbC5pdGVyYXRvcl18fGxbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1hKXt2YXIgZixkLGgsbSxfPVtdLE89ITAsWD0hMTt0cnl7aWYoaD0oYT1hLmNhbGwobCkpLm5leHQsMD09PWMpe2lmKE9iamVjdChhKSE9'@;
put 'PWEpcmV0dXJuO089ITF9ZWxzZSBmb3IoOyEoTz0oZj1oLmNhbGwoYSkpLmRvbmUpJiYoXy5wdXNoKGYudmFsdWUpLF8ubGVuZ3RoIT09Yyk7Tz0hMCk7fWNhdGNoKGFlKXtYPSEwLGQ9YWV9ZmluYWxseXt0cnl7aWYoIU8mJm51bGwhPWEucmV0dXJuJiYobT1hLnJldHVybigpLE9iamVjdCht'@;
put 'KSE9PW0pKXJldHVybn1maW5hbGx5e2lmKFgpdGhyb3cgZH19cmV0dXJuIF99fShsLGMpfHxmdW5jdGlvbiBHbHQobCxjKXtpZihsKXtpZigic3RyaW5nIj09dHlwZW9mIGwpcmV0dXJuIFBoZShsLGMpO3ZhciBhPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsKS5zbGljZSg4LC0x'@;
put 'KTtpZigiT2JqZWN0Ij09PWEmJmwuY29uc3RydWN0b3ImJihhPWwuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1hfHwiU2V0Ij09PWEpcmV0dXJuIEFycmF5LmZyb20obCk7aWYoIkFyZ3VtZW50cyI9PT1hfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVz'@;
put 'dChhKSlyZXR1cm4gUGhlKGwsYyl9fShsLGMpfHxmdW5jdGlvbiBXbHQoKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11'@;
put 'c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIFBoZShsLGMpeyhudWxsPT1jfHxjPmwubGVuZ3RoKSYmKGM9bC5sZW5ndGgpO2Zvcih2YXIgYT0wLGY9bmV3IEFycmF5KGMpO2E8YzthKyspZlthXT1sW2FdO3JldHVybiBmfWZ1bmN0aW9uIEZoZShs'@;
put 'LGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsSmx0KGYua2V5KSxmKX19ZnVuY3Rp'@;
put 'b24gSmx0KGwpe3ZhciBjPWZ1bmN0aW9uIFFsdChsLGMpe2lmKCJvYmplY3QiIT09VDkobCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09VDkoZikp'@;
put 'cmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PVQ5KGMpP2M6U3RyaW5nKGMpfWZ1'@;
put 'bmN0aW9uIHlrKCl7cmV0dXJuIHlrPXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdC5nZXQ/UmVmbGVjdC5nZXQuYmluZCgpOmZ1bmN0aW9uKGMsYSxmKXt2YXIgZD1mdW5jdGlvbiBlc3QobCxjKXtmb3IoOyFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobCxjKSYmbnVs'@;
put 'bCE9PShsPU81KGwpKTspO3JldHVybiBsfShjLGEpO2lmKGQpe3ZhciBoPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZCxhKTtyZXR1cm4gaC5nZXQ/aC5nZXQuY2FsbChhcmd1bWVudHMubGVuZ3RoPDM/YzpmKTpoLnZhbHVlfX0seWsuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1'@;
put 'bmN0aW9uIEokKGwsYyl7cmV0dXJuKEokPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGYsZCl7cmV0dXJuIGYuX19wcm90b19fPWQsZn0pKGwsYyl9ZnVuY3Rpb24gSGhlKGwpe2lmKHZvaWQgMD09PWwpdGhyb3cgbmV3IFJlZmVy'@;
put 'ZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gbH1mdW5jdGlvbiBPNShsKXtyZXR1cm4oTzU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24o'@;
put 'YSl7cmV0dXJuIGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSl9KShsKX1UbChBOSxEbHQpO3ZhciBkTD0iaHRfZWRpdG9yX2hpZGRlbiIsTmhlPSJ0ZXh0RWRpdG9yIixENT1mdW5jdGlvbihsKXshZnVuY3Rpb24gdHN0KGwsYyl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGMm'@;
put 'Jm51bGwhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7bC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShjJiZjLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmwsd3JpdGFibGU6ITAsY29uZmln'@;
put 'dXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGMmJkokKGwsYyl9KGEsbCk7dmFyIGM9ZnVuY3Rpb24gbnN0KGwpe3ZhciBjPWZ1bmN0aW9uIGlzdCgpe2lmKHR5cGVvZiBSZWZsZWN0PiJ1Inx8IVJlZmxlY3QuY29uc3RydWN0'@;
put 'fHxSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLGZ1bmN0aW9uKCl7fSkpLCEwfWNhdGNo'@;
put 'e3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZCxmPU81KGwpO2lmKGMpe3ZhciBoPU81KHRoaXMpLmNvbnN0cnVjdG9yO2Q9UmVmbGVjdC5jb25zdHJ1Y3QoZixhcmd1bWVudHMsaCl9ZWxzZSBkPWYuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbiByc3Qo'@;
put 'bCxjKXtpZihjJiYoIm9iamVjdCI9PT1UOShjKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGMpKXJldHVybiBjO2lmKHZvaWQgMCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gSGhl'@;
put 'KGwpfSh0aGlzLGQpfX0oYSk7ZnVuY3Rpb24gYShmKXt2YXIgZDtyZXR1cm4gZnVuY3Rpb24gcWx0KGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsYSksKGQ9Yy5jYWxsKHRoaXMs'@;
put 'ZikpLmV2ZW50TWFuYWdlcj1uZXcgZnMoSGhlKGQpKSxkLmF1dG9SZXNpemU9WWx0KCksZC5URVhUQVJFQT12b2lkIDAsZC50ZXh0YXJlYVN0eWxlPXZvaWQgMCxkLlRFWFRBUkVBX1BBUkVOVD12b2lkIDAsZC50ZXh0YXJlYVBhcmVudFN0eWxlPXZvaWQgMCxkLmxheWVyQ2xhc3M9dm9pZCAw'@;
put 'LGQuY3JlYXRlRWxlbWVudHMoKSxkLmJpbmRFdmVudHMoKSxkLmhvdC5hZGRIb29rT25jZSgiYWZ0ZXJEZXN0cm95IixmdW5jdGlvbigpe3JldHVybiBkLmRlc3Ryb3koKX0pLGR9cmV0dXJuIGZ1bmN0aW9uIFhsdChsLGMsYSl7YyYmRmhlKGwucHJvdG90eXBlLGMpLGEmJkZoZShsLGEpLE9i'@;
put 'amVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShhLFt7a2V5OiJnZXRWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5URVhUQVJFQS52YWx1ZX19LHtrZXk6InNldFZhbHVlIix2YWx1ZTpmdW5jdGlvbihkKXt0aGlzLlRFWFRBUkVBLnZh'@;
put 'bHVlPWR9fSx7a2V5OiJvcGVuIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXM7dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpLHRoaXMuc2hvd0VkaXRhYmxlRWxlbWVudCgpLHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLnNldEFjdGl2ZUNvbnRleHROYW1lKCJlZGl0b3IiKSx0aGlz'@;
put 'LmFkZEhvb2soImFmdGVyRG9jdW1lbnRLZXlEb3duIixmdW5jdGlvbihtKXtyZXR1cm4gZC5vbkFmdGVyRG9jdW1lbnRLZXlEb3duKG0pfSksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpfX0se2tleToiY2xvc2UiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5hdXRvUmVzaXplLnVuT2JzZXJ2ZSgp'@;
put 'LHRoaXMuaG90LnJvb3REb2N1bWVudC5hY3RpdmVFbGVtZW50PT09dGhpcy5URVhUQVJFQSYmdGhpcy5ob3QubGlzdGVuKCksdGhpcy5oaWRlRWRpdGFibGVFbGVtZW50KCksdGhpcy51bnJlZ2lzdGVyU2hvcnRjdXRzKCksdGhpcy5yZW1vdmVIb29rc0J5S2V5KCJhZnRlckRvY3VtZW50S2V5'@;
put 'RG93biIpfX0se2tleToicHJlcGFyZSIsdmFsdWU6ZnVuY3Rpb24oZCxoLG0sXyxPLFgpe3ZhciBhZT10aGlzLnN0YXRlO2lmKHlrKE81KGEucHJvdG90eXBlKSwicHJlcGFyZSIsdGhpcykuY2FsbCh0aGlzLGQsaCxtLF8sTyxYKSwhWC5yZWFkT25seSl7dGhpcy5yZWZyZXNoRGltZW5zaW9u'@;
put 'cyghMCk7dmFyIGJlPVguZnJhZ21lbnRTZWxlY3Rpb247WC5hbGxvd0ludmFsaWQmJih0aGlzLlRFWFRBUkVBLnZhbHVlPSIiKSxhZSE9PVF1LkZJTklTSEVEJiZ0aGlzLmhpZGVFZGl0YWJsZUVsZW1lbnQoKSwhYmUmJiFQZCgpJiZ0aGlzLmZvY3VzKCl9fX0se2tleToiYmVnaW5FZGl0aW5n'@;
put 'Iix2YWx1ZTpmdW5jdGlvbihkLGgpe3RoaXMuc3RhdGU9PT1RdS5WSVJHSU4mJih0aGlzLlRFWFRBUkVBLnZhbHVlPSIiLHlrKE81KGEucHJvdG90eXBlKSwiYmVnaW5FZGl0aW5nIix0aGlzKS5jYWxsKHRoaXMsZCxoKSl9fSx7a2V5OiJmb2N1cyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLlRF'@;
put 'WFRBUkVBLnNlbGVjdCgpLFdTKHRoaXMuVEVYVEFSRUEsdGhpcy5URVhUQVJFQS52YWx1ZS5sZW5ndGgpfX0se2tleToiY3JlYXRlRWxlbWVudHMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5ob3Qucm9vdERvY3VtZW50O3RoaXMuVEVYVEFSRUE9ZC5jcmVhdGVFbGVtZW50KCJURVhU'@;
put 'QVJFQSIpLHRoaXMuVEVYVEFSRUEuc2V0QXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIsIiIpLHRoaXMuVEVYVEFSRUEudGFiSW5kZXg9LTEsZ2kodGhpcy5URVhUQVJFQSwiaGFuZHNvbnRhYmxlSW5wdXQiKSx0aGlzLnRleHRhcmVhU3R5bGU9dGhpcy5URVhUQVJFQS5zdHlsZSx0aGlzLnRl'@;
put 'eHRhcmVhU3R5bGUud2lkdGg9MCx0aGlzLnRleHRhcmVhU3R5bGUuaGVpZ2h0PTAsdGhpcy50ZXh0YXJlYVN0eWxlLm92ZXJmbG93WT0idmlzaWJsZSIsdGhpcy5URVhUQVJFQV9QQVJFTlQ9ZC5jcmVhdGVFbGVtZW50KCJESVYiKSxnaSh0aGlzLlRFWFRBUkVBX1BBUkVOVCwiaGFuZHNvbnRh'@;
put 'YmxlSW5wdXRIb2xkZXIiKSxZbyh0aGlzLlRFWFRBUkVBX1BBUkVOVCx0aGlzLmxheWVyQ2xhc3MpJiZKbyh0aGlzLlRFWFRBUkVBX1BBUkVOVCx0aGlzLmxheWVyQ2xhc3MpLGdpKHRoaXMuVEVYVEFSRUFfUEFSRU5ULGRMKSx0aGlzLnRleHRhcmVhUGFyZW50U3R5bGU9dGhpcy5URVhUQVJF'@;
put 'QV9QQVJFTlQuc3R5bGUsdGhpcy5URVhUQVJFQV9QQVJFTlQuYXBwZW5kQ2hpbGQodGhpcy5URVhUQVJFQSksdGhpcy5ob3Qucm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5URVhUQVJFQV9QQVJFTlQpfX0se2tleToiaGlkZUVkaXRhYmxlRWxlbWVudCIsdmFsdWU6ZnVuY3Rpb24oKXso'@;
put 'SmNlKCl8fFhjZSgpKSYmKHRoaXMudGV4dGFyZWFTdHlsZS50ZXh0SW5kZW50PSItOTk5OTlweCIpLHRoaXMudGV4dGFyZWFTdHlsZS5vdmVyZmxvd1k9InZpc2libGUiLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZS5vcGFjaXR5PSIwIix0aGlzLnRleHRhcmVhUGFyZW50U3R5bGUuaGVpZ2h0'@;
put 'PSIxcHgiLEpvKHRoaXMuVEVYVEFSRUFfUEFSRU5ULHRoaXMubGF5ZXJDbGFzcyksZ2kodGhpcy5URVhUQVJFQV9QQVJFTlQsZEwpfX0se2tleToic2hvd0VkaXRhYmxlRWxlbWVudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnRleHRhcmVhUGFyZW50U3R5bGUuaGVpZ2h0PSIiLHRoaXMudGV4'@;
put 'dGFyZWFQYXJlbnRTdHlsZS5vdmVyZmxvdz0iIix0aGlzLnRleHRhcmVhUGFyZW50U3R5bGUucG9zaXRpb249IiIsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlW3RoaXMuaG90LmlzUnRsKCk/ImxlZnQiOiJyaWdodCJdPSJhdXRvIix0aGlzLnRleHRhcmVhUGFyZW50U3R5bGUub3BhY2l0eT0i'@;
put 'MSIsdGhpcy50ZXh0YXJlYVN0eWxlLnRleHRJbmRlbnQ9IiIsdGhpcy50ZXh0YXJlYVN0eWxlLm92ZXJmbG93WT0iaGlkZGVuIjt2YXIgZD10aGlzLlRFWFRBUkVBX1BBUkVOVC5jaGlsZE5vZGVzLGg9ITE7X28oZC5sZW5ndGgtMSxmdW5jdGlvbihtKXtpZihZbyhkW21dLCJoYW5kc29udGFi'@;
put 'bGVFZGl0b3IiKSlyZXR1cm4gaD0hMCwhMX0pLFlvKHRoaXMuVEVYVEFSRUFfUEFSRU5ULGRMKSYmSm8odGhpcy5URVhUQVJFQV9QQVJFTlQsZEwpLGg/KHRoaXMubGF5ZXJDbGFzcz0iaHRfZWRpdG9yX3Zpc2libGUiLGdpKHRoaXMuVEVYVEFSRUFfUEFSRU5ULHRoaXMubGF5ZXJDbGFzcykp'@;
put 'Oih0aGlzLmxheWVyQ2xhc3M9dGhpcy5nZXRFZGl0ZWRDZWxsc0xheWVyQ2xhc3MoKSxnaSh0aGlzLlRFWFRBUkVBX1BBUkVOVCx0aGlzLmxheWVyQ2xhc3MpKX19LHtrZXk6InJlZnJlc2hWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmhvdC50b1BoeXNpY2FsUm93KHRoaXMu'@;
put 'cm93KSxoPXRoaXMuaG90LmdldFNvdXJjZURhdGFBdENlbGwoZCx0aGlzLmNvbCk7dGhpcy5vcmlnaW5hbFZhbHVlPWgsdGhpcy5zZXRWYWx1ZShoKSx0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCl9fSx7a2V5OiJyZWZyZXNoRGltZW5zaW9ucyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD1hcmd1'@;
put 'bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2lmKHRoaXMuc3RhdGU9PT1RdS5FRElUSU5HfHxkKXtpZih0aGlzLlREPXRoaXMuZ2V0RWRpdGVkQ2VsbCgpLCF0aGlzLlREKXJldHVybiB2b2lkKGR8fHRoaXMuY2xvc2UoKSk7dmFyIGg9dGhpcy5n'@;
put 'ZXRFZGl0ZWRDZWxsUmVjdCgpLF89aC5zdGFydCxPPWgud2lkdGgsWD1oLm1heFdpZHRoLGFlPWguaGVpZ2h0LHBlPWgubWF4SGVpZ2h0O3RoaXMudGV4dGFyZWFQYXJlbnRTdHlsZS50b3A9IiIuY29uY2F0KGgudG9wLCJweCIpLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZVt0aGlzLmhvdC5p'@;
put 'c1J0bCgpPyJyaWdodCI6ImxlZnQiXT0iIi5jb25jYXQoXywicHgiKSx0aGlzLnNob3dFZGl0YWJsZUVsZW1lbnQoKTt2YXIgYmU9RDQodGhpcy5URCx0aGlzLmhvdC5yb290V2luZG93KTt0aGlzLlRFWFRBUkVBLnN0eWxlLmZvbnRTaXplPWJlLmZvbnRTaXplLHRoaXMuVEVYVEFSRUEuc3R5'@;
put 'bGUuZm9udEZhbWlseT1iZS5mb250RmFtaWx5LHRoaXMuVEVYVEFSRUEuc3R5bGUuYmFja2dyb3VuZENvbG9yPXRoaXMuVEQuc3R5bGUuYmFja2dyb3VuZENvbG9yO3ZhciB4ZT1ENCh0aGlzLlRFWFRBUkVBKSxWZT1wYXJzZUludCh4ZS5wYWRkaW5nTGVmdCwxMCkrcGFyc2VJbnQoeGUucGFk'@;
put 'ZGluZ1JpZ2h0LDEwKSxaZT1wYXJzZUludCh4ZS5wYWRkaW5nVG9wLDEwKStwYXJzZUludCh4ZS5wYWRkaW5nQm90dG9tLDEwKSxkdD1hZS1aZSxndD1YLVZlLGp0PXBlLVplO3RoaXMuYXV0b1Jlc2l6ZS5pbml0KHRoaXMuVEVYVEFSRUEse21pbldpZHRoOk1hdGgubWluKE8tVmUsZ3QpLG1p'@;
put 'bkhlaWdodDpNYXRoLm1pbihkdCxqdCksbWF4V2lkdGg6Z3QsbWF4SGVpZ2h0Omp0fSwhMCl9fX0se2tleToiYmluZEV2ZW50cyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzO3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5URVhUQVJFQSwiY3V0IixmdW5jdGlv'@;
put 'bihoKXtyZXR1cm4gaC5zdG9wUHJvcGFnYXRpb24oKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5URVhUQVJFQSwicGFzdGUiLGZ1bmN0aW9uKGgpe3JldHVybiBoLnN0b3BQcm9wYWdhdGlvbigpfSksY1koKSYmdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRM'@;
put 'aXN0ZW5lcih0aGlzLlRFWFRBUkVBLCJmb2N1c291dCIsZnVuY3Rpb24oKXtyZXR1cm4gZC5maW5pc2hFZGl0aW5nKCExKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHkiLGZ1bmN0aW9uKCl7cmV0dXJuIGQucmVmcmVzaERpbWVuc2lvbnMoKX0pLHRoaXMuYWRkSG9v'@;
put 'aygiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IixmdW5jdGlvbigpe3JldHVybiBkLnJlZnJlc2hEaW1lbnNpb25zKCl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ29sdW1uUmVzaXplIixmdW5jdGlvbigpe2QucmVmcmVzaERpbWVuc2lvbnMoKSxkLmZvY3VzKCl9KSx0aGlzLmFkZEhvb2soImFmdGVy'@;
put 'Um93UmVzaXplIixmdW5jdGlvbigpe2QucmVmcmVzaERpbWVuc2lvbnMoKSxkLmZvY3VzKCl9KX19LHtrZXk6ImFsbG93S2V5RXZlbnRQcm9wYWdhdGlvbiIsdmFsdWU6ZnVuY3Rpb24oKXt9fSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZXZlbnRNYW5hZ2VyLmRlc3Ry'@;
put 'b3koKSx0aGlzLmNsZWFySG9va3MoKX19LHtrZXk6InJlZ2lzdGVyU2hvcnRjdXRzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXMsbT10aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKSxPPWZ1bmN0aW9uKCl7ZC5ob3Qucm9vdERvY3VtZW50LmV4'@;
put 'ZWNDb21tYW5kKCJpbnNlcnRUZXh0IiwhMSwiXG4iKX07bS5hZGRTaG9ydGN1dHMoW3trZXlzOltbIlRhYiJdXSxjYWxsYmFjazpmdW5jdGlvbihhZSl7dmFyIHBlPWQuaG90LmdldFNldHRpbmdzKCksYmU9ImZ1bmN0aW9uIj09dHlwZW9mIHBlLnRhYk1vdmVzP3BlLnRhYk1vdmVzKGFlKTpw'@;
put 'ZS50YWJNb3ZlcztkLmhvdC5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoYmUucm93LGJlLmNvbCwhMCl9fSx7a2V5czpbWyJTaGlmdCIsIlRhYiJdXSxjYWxsYmFjazpmdW5jdGlvbihhZSl7dmFyIHBlPWQuaG90LmdldFNldHRpbmdzKCksYmU9ImZ1bmN0aW9uIj09dHlwZW9mIHBlLnRhYk1v'@;
put 'dmVzP3BlLnRhYk1vdmVzKGFlKTpwZS50YWJNb3ZlcztkLmhvdC5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoLWJlLnJvdywtYmUuY29sKX19LHtrZXlzOltbIkNvbnRyb2wiLCJFbnRlciJdXSxjYWxsYmFjazpmdW5jdGlvbigpe3JldHVybiBPKCksITF9LHJ1bk9ubHlJZjpmdW5jdGlvbihh'@;
put 'ZSl7cmV0dXJuIWQuaG90LnNlbGVjdGlvbi5pc011bHRpcGxlKCkmJiFhZS5hbHRLZXl9LHJlbGF0aXZlVG9Hcm91cDpRUyxwb3NpdGlvbjoiYmVmb3JlIn0se2tleXM6W1siTWV0YSIsIkVudGVyIl1dLGNhbGxiYWNrOmZ1bmN0aW9uKCl7cmV0dXJuIE8oKSwhMX0scnVuT25seUlmOmZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIWQuaG90LnNlbGVjdGlvbi5pc011bHRpcGxlKCl9LHJlbGF0aXZlVG9Hcm91cDpRUyxwb3NpdGlvbjoiYmVmb3JlIn0se2tleXM6W1siQWx0IiwiRW50ZXIiXV0sY2FsbGJhY2s6ZnVuY3Rpb24oKXtyZXR1cm4gTygpLCExfSxyZWxhdGl2ZVRvR3JvdXA6UVMscG9zaXRp'@;
put 'b246ImJlZm9yZSJ9LHtrZXlzOltbIlBhZ2VVcCJdXSxjYWxsYmFjazpmdW5jdGlvbigpe2QuaG90LnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCgtZC5ob3QuY291bnRWaXNpYmxlUm93cygpLDApfX0se2tleXM6W1siUGFnZURvd24iXV0sY2FsbGJhY2s6ZnVuY3Rpb24oKXtkLmhvdC5zZWxl'@;
put 'Y3Rpb24udHJhbnNmb3JtU3RhcnQoZC5ob3QuY291bnRWaXNpYmxlUm93cygpLDApfX0se2tleXM6W1siSG9tZSJdXSxjYWxsYmFjazpmdW5jdGlvbihhZSxwZSl7UmhlKExoZShwZSwxKVswXSxkLlRFWFRBUkVBKX19LHtrZXlzOltbIkVuZCJdXSxjYWxsYmFjazpmdW5jdGlvbihhZSxwZSl7'@;
put 'UmhlKExoZShwZSwxKVswXSxkLlRFWFRBUkVBKX19LHtrZXlzOltbIkNvbnRyb2wvTWV0YSIsIloiXV0scHJldmVudERlZmF1bHQ6ITEsY2FsbGJhY2s6ZnVuY3Rpb24oKXtkLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KGZ1bmN0aW9uKCl7ZC5hdXRvUmVzaXplLnJlc2l6ZSgpfSwxMCl9fSx7a2V5'@;
put 'czpbWyJDb250cm9sL01ldGEiLCJTaGlmdCIsIloiXV0scHJldmVudERlZmF1bHQ6ITEsY2FsbGJhY2s6ZnVuY3Rpb24oKXtkLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KGZ1bmN0aW9uKCl7ZC5hdXRvUmVzaXplLnJlc2l6ZSgpfSwxMCl9fV0se3J1bk9ubHlJZjpmdW5jdGlvbigpe3JldHVybiBp'@;
put 'byhkLmhvdC5nZXRTZWxlY3RlZCgpKX0sZ3JvdXA6TmhlfSl9fSx7a2V5OiJ1bnJlZ2lzdGVyU2hvcnRjdXRzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBoPXRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpO2gucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChu'@;
put 'UiksaC5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKE5oZSksaC5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKFgkKX19LHtrZXk6Im9uQWZ0ZXJEb2N1bWVudEtleURvd24iLHZhbHVlOmZ1bmN0aW9uKGQpey0xPT09W2hvLkFSUk9XX1VQLGhvLkFSUk9XX1JJR0hULGhvLkFSUk9XX0RPV04saG8uQVJS'@;
put 'T1dfTEVGVF0uaW5kZXhPZihkLmtleUNvZGUpJiZ0aGlzLmF1dG9SZXNpemUucmVzaXplKFN0cmluZy5mcm9tQ2hhckNvZGUoZC5rZXlDb2RlKSl9fV0sW3trZXk6IkVESVRPUl9UWVBFIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4idGV4dCJ9fV0pLGF9KEE5KTtmdW5jdGlvbiBiayhsLGMsYSxm'@;
put 'LGQsaCxtKXt2YXIgXz1bXSxPPVtdO20uY2xhc3NOYW1lJiZnaShjLG0uY2xhc3NOYW1lKSxtLnJlYWRPbmx5JiZfLnB1c2gobS5yZWFkT25seUNlbGxDbGFzc05hbWUpLCExPT09bS52YWxpZCYmbS5pbnZhbGlkQ2VsbENsYXNzTmFtZT9fLnB1c2gobS5pbnZhbGlkQ2VsbENsYXNzTmFtZSk6'@;
put 'Ty5wdXNoKG0uaW52YWxpZENlbGxDbGFzc05hbWUpLCExPT09bS53b3JkV3JhcCYmbS5ub1dvcmRXcmFwQ2xhc3NOYW1lJiZfLnB1c2gobS5ub1dvcmRXcmFwQ2xhc3NOYW1lKSwhaCYmbS5wbGFjZWhvbGRlciYmXy5wdXNoKG0ucGxhY2Vob2xkZXJDZWxsQ2xhc3NOYW1lKSxKbyhjLE8pLGdp'@;
put 'KGMsXyl9ZnVuY3Rpb24gVjQobCxjLGEsZixkLGgsbSl7YmsuYXBwbHkodGhpcyxbbCxjLGEsZixkLGgsbV0pO3ZhciBfPWg7aWYoIV8mJm0ucGxhY2Vob2xkZXImJihfPW0ucGxhY2Vob2xkZXIpLF89TXMoXyksbS50cmltV2hpdGVzcGFjZSYmKF89Xy50cmltKCkpLG0ucmVuZGVyZXJUZW1w'@;
put 'bGF0ZSl7RmQoYyk7dmFyIE89bC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEVNUExBVEUiKTtPLnNldEF0dHJpYnV0ZSgiYmluZCIsInt7fX0iKSxPLmlubmVySFRNTD1tLnJlbmRlcmVyVGVtcGxhdGUsSFRNTFRlbXBsYXRlRWxlbWVudC5kZWNvcmF0ZShPKSxPLm1vZGVsPWwuZ2V0'@;
put 'U291cmNlRGF0YUF0Um93KGEpLGMuYXBwZW5kQ2hpbGQoTyl9ZWxzZSBPNChjLF8pfWJrLlJFTkRFUkVSX1RZUEU9ImJhc2UiLFY0LlJFTkRFUkVSX1RZUEU9InRleHQiO3ZhciBWaGU9e0NFTExfVFlQRToidGV4dCIsZWRpdG9yOkQ1LHJlbmRlcmVyOlY0fTtmdW5jdGlvbiBqZChsLGMpe3Zh'@;
put 'ciBhPW5ldyBLJChsLGN8fHt9LElXKTtyZXR1cm4gYS5pbml0KCksYX1CZChWaGUpLGpkLmVkaXRvcnM9e0Jhc2VFZGl0b3I6QTl9LGpkLkNvcmU9ZnVuY3Rpb24obCl7cmV0dXJuIG5ldyBLJChsLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sx'@;
put 'XTp7fSxJVyl9LGpkLkRlZmF1bHRTZXR0aW5ncz1yaGUoKSxqZC5ob29rcz11by5nZXRTaW5nbGV0b24oKSxqZC5DZWxsQ29vcmRzPW1SLGpkLkNlbGxSYW5nZT1oVyxqZC5wYWNrYWdlTmFtZT0iaGFuZHNvbnRhYmxlIixqZC5idWlsZERhdGU9IjIyLzA2LzIwMjMgMTI6NTE6MDgiLGpkLnZl'@;
put 'cnNpb249IjEzLjAuMCIsamQubGFuZ3VhZ2VzPXtkaWN0aW9uYXJ5S2V5czpqLGdldExhbmd1YWdlRGljdGlvbmFyeTpiZGUsZ2V0TGFuZ3VhZ2VzRGljdGlvbmFyaWVzOmZ1bmN0aW9uIEZydCgpe3JldHVybiBMcnQoKX0scmVnaXN0ZXJMYW5ndWFnZURpY3Rpb25hcnk6eWRlLGdldFRyYW5z'@;
put 'bGF0ZWRQaHJhc2U6X2RlfTtjb25zdCBfYT1qZCxjc3Q9WyJjb250YWluZXIiXSxRJD1uZXcgTWFwLEJoZT0iVGhlIEhhbmRzb250YWJsZSBpbnN0YW5jZSBib3VuZCB0byB0aGlzIGNvbXBvbmVudCB3YXMgZGVzdHJveWVkIGFuZCBjYW5ub3QgYmUgdXNlZCBwcm9wZXJseS4iO2xldCBJNT0o'@;
put 'KCk9PntjbGFzcyBse2dldEluc3RhbmNlKGEpe2NvbnN0IGY9USQuZ2V0KGEpO3JldHVybiBmLmlzRGVzdHJveWVkPyhjb25zb2xlLndhcm4oQmhlKSxudWxsKTpmfXJlZ2lzdGVySW5zdGFuY2UoYSxmKXtyZXR1cm4gUSQuc2V0KGEsZil9cmVtb3ZlSW5zdGFuY2UoYSl7cmV0dXJuIFEkLmRl'@;
put 'bGV0ZShhKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1cHJvdj1ocih7dG9rZW46bCxmYWN0b3J5OmwuXHUwMjc1ZmFjfSksbH0pKCk7Y29uc3QgZnN0PU9iamVjdC5rZXlzKF9hLkRlZmF1bHRTZXR0aW5ncyksamhlPV9hLmhvb2tz'@;
put 'LmdldFJlZ2lzdGVyZWQoKTtsZXQgemhlPSgoKT0+e2NsYXNzIGx7bWVyZ2VTZXR0aW5ncyhhKXtjb25zdCBmPSJzZXR0aW5ncyJpbiBhJiYib2JqZWN0Ij09dHlwZW9mIGEuc2V0dGluZ3MsZD1mP2Euc2V0dGluZ3M6e307cmV0dXJuIGpoZS5jb25jYXQoZnN0KS5mb3JFYWNoKG09Pntjb25z'@;
put 'dCBfPWpoZS5pbmRleE9mKG0pPi0xO2xldCBPO2YmJl8mJihPPWEuc2V0dGluZ3NbbV0pLHZvaWQgMCE9PWFbbV0mJihPPWFbbV0pLHZvaWQgMCE9PU8mJihkW21dPSJuZ1pvbmUiaW4gYSYmImZ1bmN0aW9uIj09dHlwZW9mIE8mJl8/ZnVuY3Rpb24oLi4uWCl7cmV0dXJuIGEubmdab25lLnJ1'@;
put 'bigoKT0+Ty5hcHBseSh0aGlzLFgpKX06Tyl9KSxkfXByZXBhcmVDaGFuZ2VzKGEpe2NvbnN0IGY9e307cmV0dXJuIE9iamVjdC5rZXlzKGEpLmZvckVhY2goaD0+e2EuaGFzT3duUHJvcGVydHkoaCkmJihmW2hdPWFbaF0uY3VycmVudFZhbHVlKX0pLGZ9fXJldHVybiBsLlx1MDI3NWZhYz1m'@;
put 'dW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmwsZmFjdG9yeTpsLlx1MDI3NWZhY30pLGx9KSgpLGhMPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmLGQpe3RoaXMuX2hvdFRhYmxlUmVnaXN0ZXJlcj1hLHRoaXMuX2hvdFNldHRpbmdzUmVz'@;
put 'b2x2ZXI9Zix0aGlzLm5nWm9uZT1kLHRoaXMuX19ob3RJbnN0YW5jZT1udWxsLHRoaXMuY29sdW1uc0NvbXBvbmVudHM9W10sdGhpcy5ob3RJZD0iIn1nZXQgaG90SW5zdGFuY2UoKXtyZXR1cm4hdGhpcy5fX2hvdEluc3RhbmNlfHx0aGlzLl9faG90SW5zdGFuY2UmJiF0aGlzLl9faG90SW5z'@;
put 'dGFuY2UuaXNEZXN0cm95ZWQ/dGhpcy5fX2hvdEluc3RhbmNlOih0aGlzLl9ob3RUYWJsZVJlZ2lzdGVyZXIucmVtb3ZlSW5zdGFuY2UodGhpcy5ob3RJZCksY29uc29sZS53YXJuKEJoZSksbnVsbCl9c2V0IGhvdEluc3RhbmNlKGEpe3RoaXMuX19ob3RJbnN0YW5jZT1hfW5nQWZ0ZXJWaWV3'@;
put 'SW5pdCgpe2NvbnN0IGE9dGhpcy5faG90U2V0dGluZ3NSZXNvbHZlci5tZXJnZVNldHRpbmdzKHRoaXMpO2lmKHRoaXMuY29sdW1uc0NvbXBvbmVudHMubGVuZ3RoPjApe2NvbnN0IGY9W107dGhpcy5jb2x1bW5zQ29tcG9uZW50cy5mb3JFYWNoKGQ9PntmLnB1c2godGhpcy5faG90U2V0dGlu'@;
put 'Z3NSZXNvbHZlci5tZXJnZVNldHRpbmdzKGQpKX0pLGEuY29sdW1ucz1mfXRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5ob3RJbnN0YW5jZT1uZXcgX2EuQ29yZSh0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LGEpLHRoaXMuaG90SWQmJnRoaXMuX2hvdFRhYmxl'@;
put 'UmVnaXN0ZXJlci5yZWdpc3Rlckluc3RhbmNlKHRoaXMuaG90SWQsdGhpcy5ob3RJbnN0YW5jZSksdGhpcy5ob3RJbnN0YW5jZS5pbml0KCl9KX1uZ09uQ2hhbmdlcyhhKXtpZihudWxsPT09dGhpcy5ob3RJbnN0YW5jZSlyZXR1cm47Y29uc3QgZj10aGlzLl9ob3RTZXR0aW5nc1Jlc29sdmVy'@;
put 'LnByZXBhcmVDaGFuZ2VzKGEpO3RoaXMudXBkYXRlSG90VGFibGUoZil9bmdPbkRlc3Ryb3koKXt0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuaG90SW5zdGFuY2UmJnRoaXMuaG90SW5zdGFuY2UuZGVzdHJveSgpfSksdGhpcy5ob3RJZCYmdGhpcy5faG90VGFibGVS'@;
put 'ZWdpc3RlcmVyLnJlbW92ZUluc3RhbmNlKHRoaXMuaG90SWQpfXVwZGF0ZUhvdFRhYmxlKGEpe3RoaXMuaG90SW5zdGFuY2UmJnRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5ob3RJbnN0YW5jZS51cGRhdGVTZXR0aW5ncyhhLCExKX0pfW9uQWZ0ZXJDb2x1bW5zQ2hh'@;
put 'bmdlKCl7aWYodm9pZCAwIT09dGhpcy5jb2x1bW5zQ29tcG9uZW50cyYmdGhpcy5jb2x1bW5zQ29tcG9uZW50cy5sZW5ndGg+MCl7Y29uc3QgYT1bXTt0aGlzLmNvbHVtbnNDb21wb25lbnRzLmZvckVhY2goZD0+e2EucHVzaCh0aGlzLl9ob3RTZXR0aW5nc1Jlc29sdmVyLm1lcmdlU2V0dGlu'@;
put 'Z3MoZCkpfSksdGhpcy51cGRhdGVIb3RUYWJsZSh7Y29sdW1uczphfSl9fW9uQWZ0ZXJDb2x1bW5zTnVtYmVyQ2hhbmdlKCl7Y29uc3QgYT1bXTt0aGlzLmNvbHVtbnNDb21wb25lbnRzLmxlbmd0aD4wJiZ0aGlzLmNvbHVtbnNDb21wb25lbnRzLmZvckVhY2goZj0+e2EucHVzaCh0aGlzLl9o'@;
put 'b3RTZXR0aW5nc1Jlc29sdmVyLm1lcmdlU2V0dGluZ3MoZikpfSksdGhpcy51cGRhdGVIb3RUYWJsZSh7Y29sdW1uczphfSl9YWRkQ29sdW1uKGEpe3RoaXMuY29sdW1uc0NvbXBvbmVudHMucHVzaChhKSx0aGlzLm9uQWZ0ZXJDb2x1bW5zTnVtYmVyQ2hhbmdlKCl9cmVtb3ZlQ29sdW1uKGEp'@;
put 'e2NvbnN0IGY9dGhpcy5jb2x1bW5zQ29tcG9uZW50cy5pbmRleE9mKGEpO3RoaXMuY29sdW1uc0NvbXBvbmVudHMuc3BsaWNlKGYsMSksdGhpcy5vbkFmdGVyQ29sdW1uc051bWJlckNoYW5nZSgpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChJ'@;
put 'NSkscnQoemhlKSxydChVbykpfSxsLlx1MDI3NWNtcD1rcih7dHlwZTpsLHNlbGVjdG9yczpbWyJob3QtdGFibGUiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZil7aWYoMSZhJiZObyhjc3QsNSksMiZhKXtsZXQgZDt1aShkPWNpKCkpJiYoZi5jb250YWluZXI9ZC5maXJzdCl9fSxpbnB1dHM6'@;
put 'e3NldHRpbmdzOiJzZXR0aW5ncyIsaG90SWQ6ImhvdElkIixhY3RpdmVIZWFkZXJDbGFzc05hbWU6ImFjdGl2ZUhlYWRlckNsYXNzTmFtZSIsYWxsb3dFbXB0eToiYWxsb3dFbXB0eSIsYWxsb3dIdG1sOiJhbGxvd0h0bWwiLGFsbG93SW5zZXJ0Q29sdW1uOiJhbGxvd0luc2VydENvbHVtbiIs'@;
put 'YWxsb3dJbnNlcnRSb3c6ImFsbG93SW5zZXJ0Um93IixhbGxvd0ludmFsaWQ6ImFsbG93SW52YWxpZCIsYWxsb3dSZW1vdmVDb2x1bW46ImFsbG93UmVtb3ZlQ29sdW1uIixhbGxvd1JlbW92ZVJvdzoiYWxsb3dSZW1vdmVSb3ciLGF1dG9Db2x1bW5TaXplOiJhdXRvQ29sdW1uU2l6ZSIsYXV0'@;
put 'b1Jvd1NpemU6ImF1dG9Sb3dTaXplIixhdXRvV3JhcENvbDoiYXV0b1dyYXBDb2wiLGF1dG9XcmFwUm93OiJhdXRvV3JhcFJvdyIsYmluZFJvd3NXaXRoSGVhZGVyczoiYmluZFJvd3NXaXRoSGVhZGVycyIsY2VsbDoiY2VsbCIsY2VsbHM6ImNlbGxzIixjaGVja2VkVGVtcGxhdGU6ImNoZWNr'@;
put 'ZWRUZW1wbGF0ZSIsY2xhc3NOYW1lOiJjbGFzc05hbWUiLGNvbEhlYWRlcnM6ImNvbEhlYWRlcnMiLGNvbGxhcHNpYmxlQ29sdW1uczoiY29sbGFwc2libGVDb2x1bW5zIixjb2x1bW5IZWFkZXJIZWlnaHQ6ImNvbHVtbkhlYWRlckhlaWdodCIsY29sdW1uczoiY29sdW1ucyIsY29sdW1uU29y'@;
put 'dGluZzoiY29sdW1uU29ydGluZyIsY29sdW1uU3VtbWFyeToiY29sdW1uU3VtbWFyeSIsY29sV2lkdGhzOiJjb2xXaWR0aHMiLGNvbW1lbnRlZENlbGxDbGFzc05hbWU6ImNvbW1lbnRlZENlbGxDbGFzc05hbWUiLGNvbW1lbnRzOiJjb21tZW50cyIsY29udGV4dE1lbnU6ImNvbnRleHRNZW51'@;
put 'Iixjb3B5YWJsZToiY29weWFibGUiLGNvcHlQYXN0ZToiY29weVBhc3RlIixjb3JyZWN0Rm9ybWF0OiJjb3JyZWN0Rm9ybWF0IixjdXJyZW50Q29sQ2xhc3NOYW1lOiJjdXJyZW50Q29sQ2xhc3NOYW1lIixjdXJyZW50SGVhZGVyQ2xhc3NOYW1lOiJjdXJyZW50SGVhZGVyQ2xhc3NOYW1lIixj'@;
put 'dXJyZW50Um93Q2xhc3NOYW1lOiJjdXJyZW50Um93Q2xhc3NOYW1lIixjdXN0b21Cb3JkZXJzOiJjdXN0b21Cb3JkZXJzIixkYXRhOiJkYXRhIixkYXRhU2NoZW1hOiJkYXRhU2NoZW1hIixkYXRlRm9ybWF0OiJkYXRlRm9ybWF0IixkYXRlUGlja2VyQ29uZmlnOiJkYXRlUGlja2VyQ29uZmln'@;
put 'IixkZWZhdWx0RGF0ZToiZGVmYXVsdERhdGUiLGRpc2FibGVWaXN1YWxTZWxlY3Rpb246ImRpc2FibGVWaXN1YWxTZWxlY3Rpb24iLGRyYWdUb1Njcm9sbDoiZHJhZ1RvU2Nyb2xsIixkcm9wZG93bk1lbnU6ImRyb3Bkb3duTWVudSIsZWRpdG9yOiJlZGl0b3IiLGVudGVyQmVnaW5zRWRpdGlu'@;
put 'ZzoiZW50ZXJCZWdpbnNFZGl0aW5nIixlbnRlck1vdmVzOiJlbnRlck1vdmVzIixmaWxsSGFuZGxlOiJmaWxsSGFuZGxlIixmaWx0ZXI6ImZpbHRlciIsZmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZToiZmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSIsZmlsdGVyczoiZmlsdGVycyIsZml4ZWRDb2x1bW5z'@;
put 'TGVmdDoiZml4ZWRDb2x1bW5zTGVmdCIsZml4ZWRDb2x1bW5zU3RhcnQ6ImZpeGVkQ29sdW1uc1N0YXJ0IixmaXhlZFJvd3NCb3R0b206ImZpeGVkUm93c0JvdHRvbSIsZml4ZWRSb3dzVG9wOiJmaXhlZFJvd3NUb3AiLGZvcm11bGFzOiJmb3JtdWxhcyIsZnJhZ21lbnRTZWxlY3Rpb246ImZy'@;
put 'YWdtZW50U2VsZWN0aW9uIixoZWlnaHQ6ImhlaWdodCIsaGlkZGVuQ29sdW1uczoiaGlkZGVuQ29sdW1ucyIsaGlkZGVuUm93czoiaGlkZGVuUm93cyIsaW52YWxpZENlbGxDbGFzc05hbWU6ImludmFsaWRDZWxsQ2xhc3NOYW1lIixsYWJlbDoibGFiZWwiLGxhbmd1YWdlOiJsYW5ndWFnZSIs'@;
put 'bGF5b3V0RGlyZWN0aW9uOiJsYXlvdXREaXJlY3Rpb24iLGxpY2Vuc2VLZXk6ImxpY2Vuc2VLZXkiLGxvY2FsZToibG9jYWxlIixtYW51YWxDb2x1bW5GcmVlemU6Im1hbnVhbENvbHVtbkZyZWV6ZSIsbWFudWFsQ29sdW1uTW92ZToibWFudWFsQ29sdW1uTW92ZSIsbWFudWFsQ29sdW1uUmVz'@;
put 'aXplOiJtYW51YWxDb2x1bW5SZXNpemUiLG1hbnVhbFJvd01vdmU6Im1hbnVhbFJvd01vdmUiLG1hbnVhbFJvd1Jlc2l6ZToibWFudWFsUm93UmVzaXplIixtYXhDb2xzOiJtYXhDb2xzIixtYXhSb3dzOiJtYXhSb3dzIixtZXJnZUNlbGxzOiJtZXJnZUNlbGxzIixtaW5Db2xzOiJtaW5Db2xz'@;
put 'IixtaW5Sb3dzOiJtaW5Sb3dzIixtaW5TcGFyZUNvbHM6Im1pblNwYXJlQ29scyIsbWluU3BhcmVSb3dzOiJtaW5TcGFyZVJvd3MiLG11bHRpQ29sdW1uU29ydGluZzoibXVsdGlDb2x1bW5Tb3J0aW5nIixuZXN0ZWRIZWFkZXJzOiJuZXN0ZWRIZWFkZXJzIixuZXN0ZWRSb3dzOiJuZXN0ZWRS'@;
put 'b3dzIixub1dvcmRXcmFwQ2xhc3NOYW1lOiJub1dvcmRXcmFwQ2xhc3NOYW1lIixudW1lcmljRm9ybWF0OiJudW1lcmljRm9ybWF0IixvYnNlcnZlRE9NVmlzaWJpbGl0eToib2JzZXJ2ZURPTVZpc2liaWxpdHkiLG91dHNpZGVDbGlja0Rlc2VsZWN0czoib3V0c2lkZUNsaWNrRGVzZWxlY3Rz'@;
put 'IixwZXJzaXN0ZW50U3RhdGU6InBlcnNpc3RlbnRTdGF0ZSIscGxhY2Vob2xkZXI6InBsYWNlaG9sZGVyIixwbGFjZWhvbGRlckNlbGxDbGFzc05hbWU6InBsYWNlaG9sZGVyQ2VsbENsYXNzTmFtZSIscHJldmVudE92ZXJmbG93OiJwcmV2ZW50T3ZlcmZsb3ciLHByZXZlbnRXaGVlbDoicHJl'@;
put 'dmVudFdoZWVsIixyZWFkT25seToicmVhZE9ubHkiLHJlYWRPbmx5Q2VsbENsYXNzTmFtZToicmVhZE9ubHlDZWxsQ2xhc3NOYW1lIixyZW5kZXJBbGxSb3dzOiJyZW5kZXJBbGxSb3dzIixyZW5kZXJlcjoicmVuZGVyZXIiLHJvd0hlYWRlcnM6InJvd0hlYWRlcnMiLHJvd0hlYWRlcldpZHRo'@;
put 'OiJyb3dIZWFkZXJXaWR0aCIscm93SGVpZ2h0czoicm93SGVpZ2h0cyIsc2VhcmNoOiJzZWFyY2giLHNlbGVjdGlvbk1vZGU6InNlbGVjdGlvbk1vZGUiLHNlbGVjdE9wdGlvbnM6InNlbGVjdE9wdGlvbnMiLHNraXBDb2x1bW5PblBhc3RlOiJza2lwQ29sdW1uT25QYXN0ZSIsc2tpcFJvd09u'@;
put 'UGFzdGU6InNraXBSb3dPblBhc3RlIixzb3J0QnlSZWxldmFuY2U6InNvcnRCeVJlbGV2YW5jZSIsc291cmNlOiJzb3VyY2UiLHN0YXJ0Q29sczoic3RhcnRDb2xzIixzdGFydFJvd3M6InN0YXJ0Um93cyIsc3RyZXRjaEg6InN0cmV0Y2hIIixzdHJpY3Q6InN0cmljdCIsdGFibGVDbGFzc05h'@;
put 'bWU6InRhYmxlQ2xhc3NOYW1lIix0YWJNb3ZlczoidGFiTW92ZXMiLHRpdGxlOiJ0aXRsZSIsdHJpbURyb3Bkb3duOiJ0cmltRHJvcGRvd24iLHRyaW1Sb3dzOiJ0cmltUm93cyIsdHJpbVdoaXRlc3BhY2U6InRyaW1XaGl0ZXNwYWNlIix0eXBlOiJ0eXBlIix1bmNoZWNrZWRUZW1wbGF0ZToi'@;
put 'dW5jaGVja2VkVGVtcGxhdGUiLHVuZG86InVuZG8iLHZhbGlkYXRvcjoidmFsaWRhdG9yIix2aWV3cG9ydENvbHVtblJlbmRlcmluZ09mZnNldDoidmlld3BvcnRDb2x1bW5SZW5kZXJpbmdPZmZzZXQiLHZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0OiJ2aWV3cG9ydFJvd1JlbmRlcmluZ09m'@;
put 'ZnNldCIsdmlzaWJsZVJvd3M6InZpc2libGVSb3dzIix3aWR0aDoid2lkdGgiLHdvcmRXcmFwOiJ3b3JkV3JhcCIsYWZ0ZXJBZGRDaGlsZDoiYWZ0ZXJBZGRDaGlsZCIsYWZ0ZXJBdXRvZmlsbDoiYWZ0ZXJBdXRvZmlsbCIsYWZ0ZXJCZWdpbkVkaXRpbmc6ImFmdGVyQmVnaW5FZGl0aW5nIixh'@;
put 'ZnRlckNlbGxNZXRhUmVzZXQ6ImFmdGVyQ2VsbE1ldGFSZXNldCIsYWZ0ZXJDaGFuZ2U6ImFmdGVyQ2hhbmdlIixhZnRlckNoYW5nZXNPYnNlcnZlZDoiYWZ0ZXJDaGFuZ2VzT2JzZXJ2ZWQiLGFmdGVyQ29sdW1uQ29sbGFwc2U6ImFmdGVyQ29sdW1uQ29sbGFwc2UiLGFmdGVyQ29sdW1uRXhw'@;
put 'YW5kOiJhZnRlckNvbHVtbkV4cGFuZCIsYWZ0ZXJDb2x1bW5GcmVlemU6ImFmdGVyQ29sdW1uRnJlZXplIixhZnRlckNvbHVtbk1vdmU6ImFmdGVyQ29sdW1uTW92ZSIsYWZ0ZXJDb2x1bW5SZXNpemU6ImFmdGVyQ29sdW1uUmVzaXplIixhZnRlckNvbHVtblNlcXVlbmNlQ2hhbmdlOiJhZnRl'@;
put 'ckNvbHVtblNlcXVlbmNlQ2hhbmdlIixhZnRlckNvbHVtblNvcnQ6ImFmdGVyQ29sdW1uU29ydCIsYWZ0ZXJDb2x1bW5VbmZyZWV6ZToiYWZ0ZXJDb2x1bW5VbmZyZWV6ZSIsYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zOiJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLGFm'@;
put 'dGVyQ29udGV4dE1lbnVIaWRlOiJhZnRlckNvbnRleHRNZW51SGlkZSIsYWZ0ZXJDb250ZXh0TWVudVNob3c6ImFmdGVyQ29udGV4dE1lbnVTaG93IixhZnRlckNvcHk6ImFmdGVyQ29weSIsYWZ0ZXJDb3B5TGltaXQ6ImFmdGVyQ29weUxpbWl0IixhZnRlckNyZWF0ZUNvbDoiYWZ0ZXJDcmVh'@;
put 'dGVDb2wiLGFmdGVyQ3JlYXRlUm93OiJhZnRlckNyZWF0ZVJvdyIsYWZ0ZXJDdXQ6ImFmdGVyQ3V0IixhZnRlckRlc2VsZWN0OiJhZnRlckRlc2VsZWN0IixhZnRlckRlc3Ryb3k6ImFmdGVyRGVzdHJveSIsYWZ0ZXJEZXRhY2hDaGlsZDoiYWZ0ZXJEZXRhY2hDaGlsZCIsYWZ0ZXJEb2N1bWVu'@;
put 'dEtleURvd246ImFmdGVyRG9jdW1lbnRLZXlEb3duIixhZnRlckRyYXdTZWxlY3Rpb246ImFmdGVyRHJhd1NlbGVjdGlvbiIsYWZ0ZXJEcm9wZG93bk1lbnVEZWZhdWx0T3B0aW9uczoiYWZ0ZXJEcm9wZG93bk1lbnVEZWZhdWx0T3B0aW9ucyIsYWZ0ZXJEcm9wZG93bk1lbnVIaWRlOiJhZnRl'@;
put 'ckRyb3Bkb3duTWVudUhpZGUiLGFmdGVyRHJvcGRvd25NZW51U2hvdzoiYWZ0ZXJEcm9wZG93bk1lbnVTaG93IixhZnRlckZpbHRlcjoiYWZ0ZXJGaWx0ZXIiLGFmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGU6ImFmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGUiLGFmdGVyR2V0Q2VsbE1ldGE6ImFm'@;
put 'dGVyR2V0Q2VsbE1ldGEiLGFmdGVyR2V0Q29sSGVhZGVyOiJhZnRlckdldENvbEhlYWRlciIsYWZ0ZXJHZXRDb2x1bW5IZWFkZXJSZW5kZXJlcnM6ImFmdGVyR2V0Q29sdW1uSGVhZGVyUmVuZGVyZXJzIixhZnRlckdldFJvd0hlYWRlcjoiYWZ0ZXJHZXRSb3dIZWFkZXIiLGFmdGVyR2V0Um93'@;
put 'SGVhZGVyUmVuZGVyZXJzOiJhZnRlckdldFJvd0hlYWRlclJlbmRlcmVycyIsYWZ0ZXJIaWRlQ29sdW1uczoiYWZ0ZXJIaWRlQ29sdW1ucyIsYWZ0ZXJIaWRlUm93czoiYWZ0ZXJIaWRlUm93cyIsYWZ0ZXJJbml0OiJhZnRlckluaXQiLGFmdGVyTGFuZ3VhZ2VDaGFuZ2U6ImFmdGVyTGFuZ3Vh'@;
put 'Z2VDaGFuZ2UiLGFmdGVyTGlzdGVuOiJhZnRlckxpc3RlbiIsYWZ0ZXJMb2FkRGF0YToiYWZ0ZXJMb2FkRGF0YSIsYWZ0ZXJNZXJnZUNlbGxzOiJhZnRlck1lcmdlQ2VsbHMiLGFmdGVyTW9kaWZ5VHJhbnNmb3JtRW5kOiJhZnRlck1vZGlmeVRyYW5zZm9ybUVuZCIsYWZ0ZXJNb2RpZnlUcmFu'@;
put 'c2Zvcm1TdGFydDoiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1TdGFydCIsYWZ0ZXJNb21lbnR1bVNjcm9sbDoiYWZ0ZXJNb21lbnR1bVNjcm9sbCIsYWZ0ZXJOYW1lZEV4cHJlc3Npb25BZGRlZDoiYWZ0ZXJOYW1lZEV4cHJlc3Npb25BZGRlZCIsYWZ0ZXJOYW1lZEV4cHJlc3Npb25SZW1vdmVkOiJh'@;
put 'ZnRlck5hbWVkRXhwcmVzc2lvblJlbW92ZWQiLGFmdGVyT25DZWxsQ29udGV4dE1lbnU6ImFmdGVyT25DZWxsQ29udGV4dE1lbnUiLGFmdGVyT25DZWxsQ29ybmVyRGJsQ2xpY2s6ImFmdGVyT25DZWxsQ29ybmVyRGJsQ2xpY2siLGFmdGVyT25DZWxsQ29ybmVyTW91c2VEb3duOiJhZnRlck9u'@;
put 'Q2VsbENvcm5lck1vdXNlRG93biIsYWZ0ZXJPbkNlbGxNb3VzZURvd246ImFmdGVyT25DZWxsTW91c2VEb3duIixhZnRlck9uQ2VsbE1vdXNlT3V0OiJhZnRlck9uQ2VsbE1vdXNlT3V0IixhZnRlck9uQ2VsbE1vdXNlT3ZlcjoiYWZ0ZXJPbkNlbGxNb3VzZU92ZXIiLGFmdGVyT25DZWxsTW91'@;
put 'c2VVcDoiYWZ0ZXJPbkNlbGxNb3VzZVVwIixhZnRlclBhc3RlOiJhZnRlclBhc3RlIixhZnRlclBsdWdpbnNJbml0aWFsaXplZDoiYWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQiLGFmdGVyUmVkbzoiYWZ0ZXJSZWRvIixhZnRlclJlZG9TdGFja0NoYW5nZToiYWZ0ZXJSZWRvU3RhY2tDaGFuZ2Ui'@;
put 'LGFmdGVyUmVmcmVzaERpbWVuc2lvbnM6ImFmdGVyUmVmcmVzaERpbWVuc2lvbnMiLGFmdGVyUmVtb3ZlQ2VsbE1ldGE6ImFmdGVyUmVtb3ZlQ2VsbE1ldGEiLGFmdGVyUmVtb3ZlQ29sOiJhZnRlclJlbW92ZUNvbCIsYWZ0ZXJSZW1vdmVSb3c6ImFmdGVyUmVtb3ZlUm93IixhZnRlclJlbmRl'@;
put 'cjoiYWZ0ZXJSZW5kZXIiLGFmdGVyUmVuZGVyZXI6ImFmdGVyUmVuZGVyZXIiLGFmdGVyUm93TW92ZToiYWZ0ZXJSb3dNb3ZlIixhZnRlclJvd1Jlc2l6ZToiYWZ0ZXJSb3dSZXNpemUiLGFmdGVyUm93U2VxdWVuY2VDaGFuZ2U6ImFmdGVyUm93U2VxdWVuY2VDaGFuZ2UiLGFmdGVyU2Nyb2xs'@;
put 'SG9yaXpvbnRhbGx5OiJhZnRlclNjcm9sbEhvcml6b250YWxseSIsYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5OiJhZnRlclNjcm9sbFZlcnRpY2FsbHkiLGFmdGVyU2VsZWN0aW9uOiJhZnRlclNlbGVjdGlvbiIsYWZ0ZXJTZWxlY3Rpb25CeVByb3A6ImFmdGVyU2VsZWN0aW9uQnlQcm9wIixhZnRl'@;
put 'clNlbGVjdGlvbkVuZDoiYWZ0ZXJTZWxlY3Rpb25FbmQiLGFmdGVyU2VsZWN0aW9uRW5kQnlQcm9wOiJhZnRlclNlbGVjdGlvbkVuZEJ5UHJvcCIsYWZ0ZXJTZXRDZWxsTWV0YToiYWZ0ZXJTZXRDZWxsTWV0YSIsYWZ0ZXJTZXREYXRhQXRDZWxsOiJhZnRlclNldERhdGFBdENlbGwiLGFmdGVy'@;
put 'U2V0RGF0YUF0Um93UHJvcDoiYWZ0ZXJTZXREYXRhQXRSb3dQcm9wIixhZnRlclNldFNvdXJjZURhdGFBdENlbGw6ImFmdGVyU2V0U291cmNlRGF0YUF0Q2VsbCIsYWZ0ZXJTaGVldEFkZGVkOiJhZnRlclNoZWV0QWRkZWQiLGFmdGVyU2hlZXRSZW5hbWVkOiJhZnRlclNoZWV0UmVuYW1lZCIs'@;
put 'YWZ0ZXJTaGVldFJlbW92ZWQ6ImFmdGVyU2hlZXRSZW1vdmVkIixhZnRlclRyaW1Sb3c6ImFmdGVyVHJpbVJvdyIsYWZ0ZXJVbmRvOiJhZnRlclVuZG8iLGFmdGVyVW5kb1N0YWNrQ2hhbmdlOiJhZnRlclVuZG9TdGFja0NoYW5nZSIsYWZ0ZXJVbmhpZGVDb2x1bW5zOiJhZnRlclVuaGlkZUNv'@;
put 'bHVtbnMiLGFmdGVyVW5oaWRlUm93czoiYWZ0ZXJVbmhpZGVSb3dzIixhZnRlclVubGlzdGVuOiJhZnRlclVubGlzdGVuIixhZnRlclVubWVyZ2VDZWxsczoiYWZ0ZXJVbm1lcmdlQ2VsbHMiLGFmdGVyVW50cmltUm93OiJhZnRlclVudHJpbVJvdyIsYWZ0ZXJVcGRhdGVEYXRhOiJhZnRlclVw'@;
put 'ZGF0ZURhdGEiLGFmdGVyVXBkYXRlU2V0dGluZ3M6ImFmdGVyVXBkYXRlU2V0dGluZ3MiLGFmdGVyVmFsaWRhdGU6ImFmdGVyVmFsaWRhdGUiLGFmdGVyVmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGU6ImFmdGVyVmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGUiLGFmdGVy'@;
put 'Vmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGU6ImFmdGVyVmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGUiLGFmdGVyVmlld1JlbmRlcjoiYWZ0ZXJWaWV3UmVuZGVyIixiZWZvcmVBZGRDaGlsZDoiYmVmb3JlQWRkQ2hpbGQiLGJlZm9yZUF1dG9maWxsOiJiZWZvcmVBdXRvZmlsbCIs'@;
put 'YmVmb3JlQ2VsbEFsaWdubWVudDoiYmVmb3JlQ2VsbEFsaWdubWVudCIsYmVmb3JlQ2hhbmdlOiJiZWZvcmVDaGFuZ2UiLGJlZm9yZUNoYW5nZVJlbmRlcjoiYmVmb3JlQ2hhbmdlUmVuZGVyIixiZWZvcmVDb2x1bW5Db2xsYXBzZToiYmVmb3JlQ29sdW1uQ29sbGFwc2UiLGJlZm9yZUNvbHVt'@;
put 'bkV4cGFuZDoiYmVmb3JlQ29sdW1uRXhwYW5kIixiZWZvcmVDb2x1bW5GcmVlemU6ImJlZm9yZUNvbHVtbkZyZWV6ZSIsYmVmb3JlQ29sdW1uTW92ZToiYmVmb3JlQ29sdW1uTW92ZSIsYmVmb3JlQ29sdW1uUmVzaXplOiJiZWZvcmVDb2x1bW5SZXNpemUiLGJlZm9yZUNvbHVtblNvcnQ6ImJl'@;
put 'Zm9yZUNvbHVtblNvcnQiLGJlZm9yZUNvbHVtblVuZnJlZXplOiJiZWZvcmVDb2x1bW5VbmZyZWV6ZSIsYmVmb3JlQ29udGV4dE1lbnVTZXRJdGVtczoiYmVmb3JlQ29udGV4dE1lbnVTZXRJdGVtcyIsYmVmb3JlQ29udGV4dE1lbnVTaG93OiJiZWZvcmVDb250ZXh0TWVudVNob3ciLGJlZm9y'@;
put 'ZUNvcHk6ImJlZm9yZUNvcHkiLGJlZm9yZUNyZWF0ZUNvbDoiYmVmb3JlQ3JlYXRlQ29sIixiZWZvcmVDcmVhdGVSb3c6ImJlZm9yZUNyZWF0ZVJvdyIsYmVmb3JlQ3V0OiJiZWZvcmVDdXQiLGJlZm9yZURldGFjaENoaWxkOiJiZWZvcmVEZXRhY2hDaGlsZCIsYmVmb3JlRHJhd0JvcmRlcnM6'@;
put 'ImJlZm9yZURyYXdCb3JkZXJzIixiZWZvcmVEcm9wZG93bk1lbnVTZXRJdGVtczoiYmVmb3JlRHJvcGRvd25NZW51U2V0SXRlbXMiLGJlZm9yZURyb3Bkb3duTWVudVNob3c6ImJlZm9yZURyb3Bkb3duTWVudVNob3ciLGJlZm9yZUZpbHRlcjoiYmVmb3JlRmlsdGVyIixiZWZvcmVHZXRDZWxs'@;
put 'TWV0YToiYmVmb3JlR2V0Q2VsbE1ldGEiLGJlZm9yZUhpZGVDb2x1bW5zOiJiZWZvcmVIaWRlQ29sdW1ucyIsYmVmb3JlSGlkZVJvd3M6ImJlZm9yZUhpZGVSb3dzIixiZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXI6ImJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlciIsYmVmb3Jl'@;
put 'SGlnaGxpZ2h0aW5nUm93SGVhZGVyOiJiZWZvcmVIaWdobGlnaHRpbmdSb3dIZWFkZXIiLGJlZm9yZUluaXQ6ImJlZm9yZUluaXQiLGJlZm9yZUluaXRXYWxrb250YWJsZToiYmVmb3JlSW5pdFdhbGtvbnRhYmxlIixiZWZvcmVLZXlEb3duOiJiZWZvcmVLZXlEb3duIixiZWZvcmVMYW5ndWFn'@;
put 'ZUNoYW5nZToiYmVmb3JlTGFuZ3VhZ2VDaGFuZ2UiLGJlZm9yZUxvYWREYXRhOiJiZWZvcmVMb2FkRGF0YSIsYmVmb3JlTWVyZ2VDZWxsczoiYmVmb3JlTWVyZ2VDZWxscyIsYmVmb3JlT25DZWxsQ29udGV4dE1lbnU6ImJlZm9yZU9uQ2VsbENvbnRleHRNZW51IixiZWZvcmVPbkNlbGxNb3Vz'@;
put 'ZURvd246ImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsYmVmb3JlT25DZWxsTW91c2VPdXQ6ImJlZm9yZU9uQ2VsbE1vdXNlT3V0IixiZWZvcmVPbkNlbGxNb3VzZU92ZXI6ImJlZm9yZU9uQ2VsbE1vdXNlT3ZlciIsYmVmb3JlT25DZWxsTW91c2VVcDoiYmVmb3JlT25DZWxsTW91c2VVcCIsYmVm'@;
put 'b3JlUGFzdGU6ImJlZm9yZVBhc3RlIixiZWZvcmVSZWRvOiJiZWZvcmVSZWRvIixiZWZvcmVSZWRvU3RhY2tDaGFuZ2U6ImJlZm9yZVJlZG9TdGFja0NoYW5nZSIsYmVmb3JlUmVmcmVzaERpbWVuc2lvbnM6ImJlZm9yZVJlZnJlc2hEaW1lbnNpb25zIixiZWZvcmVSZW1vdmVDZWxsQ2xhc3NO'@;
put 'YW1lczoiYmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXMiLGJlZm9yZVJlbW92ZUNlbGxNZXRhOiJiZWZvcmVSZW1vdmVDZWxsTWV0YSIsYmVmb3JlUmVtb3ZlQ29sOiJiZWZvcmVSZW1vdmVDb2wiLGJlZm9yZVJlbW92ZVJvdzoiYmVmb3JlUmVtb3ZlUm93IixiZWZvcmVSZW5kZXI6ImJlZm9y'@;
put 'ZVJlbmRlciIsYmVmb3JlUmVuZGVyZXI6ImJlZm9yZVJlbmRlcmVyIixiZWZvcmVSb3dNb3ZlOiJiZWZvcmVSb3dNb3ZlIixiZWZvcmVSb3dSZXNpemU6ImJlZm9yZVJvd1Jlc2l6ZSIsYmVmb3JlU2V0Q2VsbE1ldGE6ImJlZm9yZVNldENlbGxNZXRhIixiZWZvcmVTZXRSYW5nZUVuZDoiYmVm'@;
put 'b3JlU2V0UmFuZ2VFbmQiLGJlZm9yZVNldFJhbmdlU3RhcnQ6ImJlZm9yZVNldFJhbmdlU3RhcnQiLGJlZm9yZVNldFJhbmdlU3RhcnRPbmx5OiJiZWZvcmVTZXRSYW5nZVN0YXJ0T25seSIsYmVmb3JlU3RyZXRjaGluZ0NvbHVtbldpZHRoOiJiZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGgi'@;
put 'LGJlZm9yZVRvdWNoU2Nyb2xsOiJiZWZvcmVUb3VjaFNjcm9sbCIsYmVmb3JlVHJpbVJvdzoiYmVmb3JlVHJpbVJvdyIsYmVmb3JlVW5kbzoiYmVmb3JlVW5kbyIsYmVmb3JlVW5kb1N0YWNrQ2hhbmdlOiJiZWZvcmVVbmRvU3RhY2tDaGFuZ2UiLGJlZm9yZVVuaGlkZUNvbHVtbnM6ImJlZm9y'@;
put 'ZVVuaGlkZUNvbHVtbnMiLGJlZm9yZVVuaGlkZVJvd3M6ImJlZm9yZVVuaGlkZVJvd3MiLGJlZm9yZVVubWVyZ2VDZWxsczoiYmVmb3JlVW5tZXJnZUNlbGxzIixiZWZvcmVVbnRyaW1Sb3c6ImJlZm9yZVVudHJpbVJvdyIsYmVmb3JlVXBkYXRlRGF0YToiYmVmb3JlVXBkYXRlRGF0YSIsYmVm'@;
put 'b3JlVmFsaWRhdGU6ImJlZm9yZVZhbGlkYXRlIixiZWZvcmVWYWx1ZVJlbmRlcjoiYmVmb3JlVmFsdWVSZW5kZXIiLGJlZm9yZVZpZXdSZW5kZXI6ImJlZm9yZVZpZXdSZW5kZXIiLGNvbnN0cnVjdDoiY29uc3RydWN0Iixpbml0OiJpbml0Iixtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQ6Im1v'@;
put 'ZGlmeUF1dG9Db2x1bW5TaXplU2VlZCIsbW9kaWZ5QXV0b2ZpbGxSYW5nZToibW9kaWZ5QXV0b2ZpbGxSYW5nZSIsbW9kaWZ5Q29sSGVhZGVyOiJtb2RpZnlDb2xIZWFkZXIiLG1vZGlmeUNvbHVtbkhlYWRlckhlaWdodDoibW9kaWZ5Q29sdW1uSGVhZGVySGVpZ2h0Iixtb2RpZnlDb2x1bW5I'@;
put 'ZWFkZXJWYWx1ZToibW9kaWZ5Q29sdW1uSGVhZGVyVmFsdWUiLG1vZGlmeUNvbFdpZHRoOiJtb2RpZnlDb2xXaWR0aCIsbW9kaWZ5Q29weWFibGVSYW5nZToibW9kaWZ5Q29weWFibGVSYW5nZSIsbW9kaWZ5RGF0YToibW9kaWZ5RGF0YSIsbW9kaWZ5R2V0Q2VsbENvb3JkczoibW9kaWZ5R2V0'@;
put 'Q2VsbENvb3JkcyIsbW9kaWZ5Um93RGF0YToibW9kaWZ5Um93RGF0YSIsbW9kaWZ5Um93SGVhZGVyOiJtb2RpZnlSb3dIZWFkZXIiLG1vZGlmeVJvd0hlYWRlcldpZHRoOiJtb2RpZnlSb3dIZWFkZXJXaWR0aCIsbW9kaWZ5Um93SGVpZ2h0OiJtb2RpZnlSb3dIZWlnaHQiLG1vZGlmeVNvdXJj'@;
put 'ZURhdGE6Im1vZGlmeVNvdXJjZURhdGEiLG1vZGlmeVRyYW5zZm9ybUVuZDoibW9kaWZ5VHJhbnNmb3JtRW5kIixtb2RpZnlUcmFuc2Zvcm1TdGFydDoibW9kaWZ5VHJhbnNmb3JtU3RhcnQiLHBlcnNpc3RlbnRTdGF0ZUxvYWQ6InBlcnNpc3RlbnRTdGF0ZUxvYWQiLHBlcnNpc3RlbnRTdGF0'@;
put 'ZVJlc2V0OiJwZXJzaXN0ZW50U3RhdGVSZXNldCIscGVyc2lzdGVudFN0YXRlU2F2ZToicGVyc2lzdGVudFN0YXRlU2F2ZSJ9LGZlYXR1cmVzOltyaShbSTUsemhlXSksYmxdLGRlY2xzOjIsdmFyczoxLGNvbnN0czpbWzMsImlkIl0sWyJjb250YWluZXIiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rp'@;
put 'b24oYSxmKXsxJmEmJnRuKDAsImRpdiIsMCwxKSwyJmEmJlJlKCJpZCIsZi5ob3RJZCl9LGVuY2Fwc3VsYXRpb246Mn0pLGx9KSgpLHBMPSgoKT0+e2NsYXNzIGx7c3RhdGljIGZvclJvb3QoKXtyZXR1cm57bmdNb2R1bGU6bCxwcm92aWRlcnM6W0k1XX19fXJldHVybiBsLnZlcnNpb249IjEz'@;
put 'LjAuMCIsbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVtb2Q9RGkoe3R5cGU6bH0pLGwuXHUwMjc1aW5qPXhpKHt9KSxsfSkoKTtmdW5jdGlvbiBkc3QobCxjKXsxJmwmJih5ZSgwLCJzcGFuIiw2KSxZZSgxLCIgTG9hZGluZy4uLiAiKSxDZSgpKX1m'@;
put 'dW5jdGlvbiBoc3QobCxjKXsxJmwmJih5ZSgwLCJkaXYiKSgxLCJoMyIpLFllKDIsIkxvYWRpbmcgc3VibWl0dGVkIHRhYmxlIiksQ2UoKSgpKX1mdW5jdGlvbiBwc3QobCxjKXtpZigxJmwmJih5ZSgwLCJkaXYiLDQpLHR0KDEsZHN0LDIsMCwic3BhbiIsNSksdHQoMixoc3QsMywwLCJkaXYi'@;
put 'LDMpLENlKCkpLDImbCl7Y29uc3QgYT1HZSgpO1NlKDEpLFJlKCJuZ0lmIiwhYS5sb2FkZWQpLFNlKDEpLFJlKCJuZ0lmIiwhYS5sb2FkZWQpfX1jb25zdCBtc3Q9ZnVuY3Rpb24obCxjKXtyZXR1cm57cmVqZWN0ZWQ6bCxhY2NlcHRlZDpjfX07ZnVuY3Rpb24gZ3N0KGwsYyl7aWYoMSZsKXtj'@;
put 'b25zdCBhPVpuKCk7eWUoMCwiZGl2IikoMSwiZGl2Iiw3KSgyLCJkaXYiLDgpKDMsImg0Iiw5KSxZZSg0LCJTdGFnZWQgRGF0YSIpLENlKCkoKSgpLHllKDUsImRpdiIsMTApKDYsImRpdiIsMTEpKDcsImRpdiIsMTIpKDgsImRpdiIsOCksWWUoOSwiQmFzaWMgU3VibWl0dGVkIERldGFpbHMi'@;
put 'KSxDZSgpKCkseWUoMTAsImRpdiIpKDExLCJzcGFuIiksWWUoMTIsIlRhYmxlIElkOiIpLENlKCkseWUoMTMsInN0cm9uZyIpKDE0LCJzcGFuIiksWWUoMTUpLENlKCkoKSgpLHllKDE2LCJkaXYiKSgxNywic3BhbiIpLFllKDE4LCJCYXNlIFRhYmxlOiIpLENlKCkseWUoMTksImEiLDEzKSxF'@;
put 'dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFV0KGEpLFp0KEdlKCkudmlld2VyVGFibGVTY3JlZW4oKSl9KSxZZSgyMCksQ2UoKSgpLHllKDIxLCJkaXYiKSgyMiwic3BhbiIpLFllKDIzLCJTdWJtaXQgRGF0ZToiKSxDZSgpLHllKDI0LCJzcGFuIiwxNCksWWUoMjUpLENlKCkoKSx5ZSgy'@;
put 'NiwiZGl2IikoMjcsInNwYW4iKSxZZSgyOCwiUmV2aWV3IFN0YXR1czoiKSxDZSgpLHllKDI5LCJzcGFuIiwxNSksWWUoMzApLENlKCkoKSgpLHllKDMxLCJkaXYiLDE2KSgzMiwiZGl2IiwxMikoMzMsImRpdiIsOCksWWUoMzQsIkFjdGlvbnMiKSxDZSgpKCkseWUoMzUsImRpdiIsMTcpKDM2'@;
put 'LCJkaXYiLDE4KSgzNywiYnV0dG9uIiwxOSksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBVdChhKSxadChHZSgpLnZpZXdlclRhYmxlU2NyZWVuKCkpfSksWWUoMzgsIiBHbyB0byBiYXNlIHRhYmxlIHNjcmVlbiAiKSxDZSgpLHllKDM5LCJidXR0b24iLDIwKSxFdCgiY2xpY2siLGZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIFV0KGEpLFp0KEdlKCkuYXBwcm92ZVRhYmxlU2NyZWVuKCkpfSksWWUoNDAsIiBHbyB0byBhcHByb3ZhbHMgc2NyZWVuICIpLENlKCkseWUoNDEsImJ1dHRvbiIsMjEpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gVXQoYSksWnQoR2UoKS5nb0JhY2soKSl9'@;
put 'KSxZZSg0MiwiIEdvIGJhY2sgdG8gZWRpdG9yICIpLENlKCkseWUoNDMsImJ1dHRvbiIsMjIpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtVdChhKTtjb25zdCBkPUdlKCk7cmV0dXJuIFp0KGQuZG93bmxvYWQobnVsbD09ZC50YWJsZURldGFpbHM/bnVsbDpkLnRhYmxlRGV0YWlscy5UQUJMRV9J'@;
put 'RCkpfSksdG4oNDQsImNsci1pY29uIiwyMyksQ2UoKSgpKCkoKSgpLHllKDQ1LCJkaXYiLDI0KSx0big0NiwiaG90LXRhYmxlIiwyNSksQ2UoKSx0big0NywiZGl2IiwyNiksQ2UoKX1pZigyJmwpe2NvbnN0IGE9R2UoKTtTZSgxNSksd3IoIiAiLG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6'@;
put 'YS50YWJsZURldGFpbHMuVEFCTEVfSUQsIiIpLFNlKDUpLHdyKCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLkJBU0VfVEFCTEUsIiAiKSxTZSg1KSx3cigiICIsbnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5TVUJNSVRURURfT05f'@;
put 'RFRUTSwiICIpLFNlKDQpLFJlKCJuZ0NsYXNzIix3aCgxMyxtc3QsIlJFSkVDVEVEIj09PShudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlJFVklFV19TVEFUVVNfSUQpLCJBUFBST1ZFRCI9PT0obnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWls'@;
put 'cy5SRVZJRVdfU1RBVFVTX0lEKSkpLFNlKDEpLHdyKCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlJFVklFV19TVEFUVVNfSUQsIiAiKSxTZSg5KSxSZSgiZGlzYWJsZWQiLCJBUFBST1ZFRCI9PT0obnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxl'@;
put 'RGV0YWlscy5SRVZJRVdfU1RBVFVTX0lEKXx8IlJFSkVDVEVEIj09PShudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlJFVklFV19TVEFUVVNfSUQpKSxTZSg3KSxSZSgiZGF0YSIsYS5ob3RUYWJsZS5kYXRhKSgiY29sSGVhZGVycyIsYS5ob3RUYWJsZS5jb2xIZWFk'@;
put 'ZXJzKSgiY29sdW1ucyIsYS5ob3RUYWJsZS5jb2x1bW5zKSgibWF4Um93cyIsYS5ob3RUYWJsZS5tYXhSb3dzKSgiaGVpZ2h0IixhLmhvdFRhYmxlLmhlaWdodCkoImxpY2Vuc2VLZXkiLGEuaG90VGFibGUubGljZW5zZUtleSkoImNlbGxzIixhLmhvdFRhYmxlLmNlbGxzKX19Y29uc3QgdnN0'@;
put 'PVt7cGF0aDoiOnRhYmxlSWQiLGNvbXBvbmVudDooKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEsZixkLGgsbSxfKXt0aGlzLmxpY2VuY2VTZXJ2aWNlPWEsdGhpcy5zYXNTdG9yZVNlcnZpY2U9Zix0aGlzLmV2ZW50U2VydmljZT1kLHRoaXMucm91dGU9aCx0aGlzLnJvdXRlcj1tLHRoaXMu'@;
put 'c2FzU2VydmljZT1fLHRoaXMubG9hZGVkPSExLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMuaG90VGFibGU9e2RhdGE6W10sY29sSGVhZGVyczpbXSxjb2x1bW5zOltdLGhlaWdodDo1MDAsc2V0dGluZ3M6e30sbGljZW5zZUtleTp2b2lk'@;
put 'IDAsbWF4Um93czp0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdGFnZV9yb3dzX2FsbG93ZWR8fDEvMH19c3VibWl0dGVkVGFibGVTY3JlZW4oKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK3RoaXMudGFibGVfaWQpfWFwcHJvdmVUYWJsZVNjcmVlbigpe3RoaXMucm91dGUu'@;
put 'bmF2aWdhdGVCeVVybCgiL2FwcHJvdmUvYXBwcm92ZURldC8iK3RoaXMudGFibGVfaWQpfXZpZXdlclRhYmxlU2NyZWVuKCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9kYXRhLyIrdGhpcy50YWJsZURldGFpbHMuQkFTRV9UQUJMRSl9Z29CYWNrKCl7dGhpcy5yb3V0ZS5uYXZp'@;
put 'Z2F0ZUJ5VXJsKCIvZWRpdG9yLyIrdGhpcy50YWJsZURldGFpbHMuQkFTRV9UQUJMRSl9ZG93bmxvYWQoYSl7bGV0IGY9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksZD1mLnNlcnZlclVybCxoPWYuYXBwTG9jLG09dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3'@;
put 'aW5kb3cub3BlbihkK20rIi8/X3Byb2dyYW09IitoKyIvc2VydmljZXMvYXVkaXRvcnMvZ2V0YXVkaXRmaWxlJnRhYmxlPSIrYSl9bmdPbkluaXQoKXt2YXIgYT10aGlzO3JldHVybiB5aShmdW5jdGlvbiooKXtpZihhLmxpY2VuY2VTZXJ2aWNlLmhvdF9saWNlbnNlX2tleS5zdWJzY3JpYmUo'@;
put 'Zj0+e2EuaG90VGFibGUubGljZW5zZUtleT1mfSksdHlwZW9mIGEucm91dGVyLnNuYXBzaG90LnBhcmFtcy50YWJsZUlkPCJ1Iil7YS50YWJsZV9pZD1hLnJvdXRlci5zbmFwc2hvdC5wYXJhbXMudGFibGVJZDt0cnl7bGV0IGY9eWllbGQgYS5zYXNTdG9yZVNlcnZpY2UuZ2V0Q2hhbmdlSW5m'@;
put 'byhhLnRhYmxlX2lkKTtpZighZnx8IWYuanNwYXJhbXMpdGhyb3cgbmV3IEVycm9yKCJqc3BhcmFtcyBwcm9wZXJ0eSBpcyBtaXNzaW5nIGZyb20gcmVzcG9uc2UuIik7YS50YWJsZURldGFpbHM9Zi5qc3BhcmFtc1swXX1jYXRjaChmKXtsZXQgZD17fTtmLk1FU1NBR0U/ZD1mOmQuTUVTU0FH'@;
put 'RT1mLGEuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigicHVibGljL2dldGNoYW5nZWluZm8iLGQpfXRyeXtsZXQgZj15aWVsZCBhLnNhc1N0b3JlU2VydmljZS5vcGVuVGFibGUoYS50YWJsZV9pZCk7aWYoIWZ8fCFmLnN0YWdldGFibGUpdGhyb3cgbmV3IEVycm9yKCJTdGFnZXRh'@;
put 'YmxlIHByb3BlcnR5IGlzIG1pc3NpbmcgZnJvbSByZXNwb25zZS4iKTtsZXQgZD1mLnN0YWdldGFibGVbMF0saD1bXSxtPVtdO2ZvcihsZXQgTyBpbiBkKWQmJmgucHVzaChPKTtmb3IobGV0IE89MDtPPGgubGVuZ3RoO08rKyltLnB1c2goe2RhdGE6aFtPXX0pO2xldCBfPWZ1bmN0aW9uKCl7'@;
put 'cmV0dXJue3JlYWRPbmx5OiEwfX07YS5ob3RUYWJsZS5kYXRhPWYuc3RhZ2V0YWJsZSxhLmhvdFRhYmxlLmNvbEhlYWRlcnM9aCxhLmhvdFRhYmxlLmNvbHVtbnM9bSxhLmhvdFRhYmxlLmNlbGxzPV8sYS5sb2FkZWQ9ITAsYS5zZXRGb2N1cygpfWNhdGNoKGYpe2xldCBkPXt9O2YuTUVTU0FH'@;
put 'RXx8KGQuTUVTU0FHRT1mKSxhLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoImF1ZGl0b3JzL2dldHN0YWdldGFibGUiLGQpLGEubG9hZGVkPSExfX19KSgpfXNldEZvY3VzKCl7c2V0VGltZW91dCgoKT0+e2xldCBhPXdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYXBw'@;
put 'cm92YWwtYnRuIik7YSYmYS5mb2N1cygpfSwyMDApfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChiMSkscnQoTGQpLHJ0KFJzKSxydChMYSkscnQodHUpLHJ0KHBsKSl9LGwuXHUwMjc1Y21wPWtyKHt0eXBlOmwsc2VsZWN0b3JzOltbImFwcC1z'@;
put 'dGFnZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6NCx2YXJzOjIsY29uc3RzOltbMSwiY29udGVudC1hcmVhIl0sWzEsImNsci1jb2wtbWQtMTIiLCJjYXJkIl0sWyJjbGFzcyIsImgtODB2aCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LWNv'@;
put 'bHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJoLTgwdmgiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbImNsYXNzIiwic3Bpbm5lciIsNCwibmdJZiJdLFsxLCJzcGlu'@;
put 'bmVyIl0sWyJuZy1pZiIsImxvYWRlZCIsMSwiY2FyZC1oZWFkZXIiXSxbMSwiY2FyZC10aXRsZSIsInRleHQtY2VudGVyIl0sWzEsIm10LTAiXSxbIm5nLWlmIiwibG9hZGVkIiwxLCJjbHItcm93Il0sWzEsImNhcmQtYmxvY2siLCJjbHItY29sLW1kLTYiXSxbMSwiY2FyZC1oZWFkZXIiLCJw'@;
put 'eS01Il0sWzEsImJhc2VUYWJsZUxpbmsiLDMsImNsaWNrIl0sWzEsIm10LTEwIl0sWzEsIm10LTEwIiwzLCJuZ0NsYXNzIl0sWzEsImNsci1jb2wtbWQtNiIsImNhcmQtYmxvY2siXSxbMSwibXQtMjAiXSxbMSwicm93Il0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwidGV4dC1j'@;
put 'ZW50ZXIiLCJtdC0yMCIsMywiY2xpY2siXSxbImlkIiwiYXBwcm92YWwtYnRuIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwidGV4dC1jZW50ZXIiLCJtdC0yMCIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsxLCJidG4iLCJidG4tc20iLCJidG4taW5mby1vdXRsaW5l'@;
put 'IiwidGV4dC1jZW50ZXIiLCJtdC0yMCIsMywiY2xpY2siXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLCJ0ZXh0LWNlbnRlciIsIm10LTIwIiwibWluLXctMCIsMywiY2xpY2siXSxbInNoYXBlIiwiZG93bmxvYWQiXSxbMSwiY2FyZC1ibG9jayJdLFsiaG90SWQiLCJob3RJbnN0'@;
put 'YW5jZSIsImlkIiwiaG90VGFibGUiLCJzdHJldGNoSCIsImFsbCIsMywiZGF0YSIsImNvbEhlYWRlcnMiLCJjb2x1bW5zIiwibWF4Um93cyIsImhlaWdodCIsImxpY2Vuc2VLZXkiLCJjZWxscyJdLFsxLCJjYXJkLWZvb3RlciIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXV0s'@;
put 'dGVtcGxhdGU6ZnVuY3Rpb24oYSxmKXsxJmEmJih5ZSgwLCJkaXYiLDApKDEsImRpdiIsMSksdHQoMixwc3QsMywyLCJkaXYiLDIpLHR0KDMsZ3N0LDQ4LDE2LCJkaXYiLDMpLENlKCkoKSksMiZhJiYoU2UoMiksUmUoIm5nSWYiLCFmLmxvYWRlZCksU2UoMSksUmUoIm5nSWYiLGYubG9hZGVk'@;
put 'KSl9LGRlcGVuZGVuY2llczpbeXUsJGksUmwsaExdLHN0eWxlczpbIi5yZWplY3RlZFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2Y4MzEyNjtmb250LXdlaWdodDo3MDB9LmFjY2VwdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojM2ZjNDI0O2ZvbnQtd2VpZ2h0OjcwMH0uYmFzZVRh'@;
put 'YmxlTGlua1tfbmdjb250ZW50LSVDT01QJV17Y3Vyc29yOnBvaW50ZXI7bWFyZ2luLXRvcDoxMHB4O2NvbG9yOiMwMDdjYmJ9Il19KSxsfSkoKX1dO2xldCB5c3Q9KCgpPT57Y2xhc3MgbHt9cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1'@;
put 'bW9kPURpKHt0eXBlOmx9KSxsLlx1MDI3NWluaj14aSh7aW1wb3J0czpbYm8sSWQsbzQuZm9yQ2hpbGQodnN0KSxwTC5mb3JSb290KCldfSksbH0pKCk7ZnVuY3Rpb24gTzkobCl7cmV0dXJuKE85PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0'@;
put 'ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gVWhl'@;
put 'KGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCx3c3QoZi5rZXkpLGYpfX1mdW5j'@;
put 'dGlvbiB3c3QobCl7dmFyIGM9ZnVuY3Rpb24gQ3N0KGwsYyl7aWYoIm9iamVjdCIhPT1POShsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1POShm'@;
put 'KSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09TzkoYyk/YzpTdHJpbmcoYyl9'@;
put 'ZnVuY3Rpb24gemQoKXtyZXR1cm4gemQ9dHlwZW9mIFJlZmxlY3Q8InUiJiZSZWZsZWN0LmdldD9SZWZsZWN0LmdldC5iaW5kKCk6ZnVuY3Rpb24oYyxhLGYpe3ZhciBkPWZ1bmN0aW9uIFNzdChsLGMpe2Zvcig7IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsLGMpJiZu'@;
put 'dWxsIT09KGw9UjEobCkpOyk7cmV0dXJuIGx9KGMsYSk7aWYoZCl7dmFyIGg9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihkLGEpO3JldHVybiBoLmdldD9oLmdldC5jYWxsKGFyZ3VtZW50cy5sZW5ndGg8Mz9jOmYpOmgudmFsdWV9fSx6ZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9'@;
put 'ZnVuY3Rpb24gZUsobCxjKXtyZXR1cm4oZUs9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZixkKXtyZXR1cm4gZi5fX3Byb3RvX189ZCxmfSkobCxjKX1mdW5jdGlvbiBSMShsKXtyZXR1cm4oUjE9T2JqZWN0LnNldFByb3RvdHlw'@;
put 'ZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSl9KShsKX12YXIgWmhlPSJoYW5kc29udGFibGVFZGl0b3IiLHRLPWZ1bmN0aW9uKGwpeyFmdW5jdGlvbiBNc3QobCxjKXtpZigiZnVu'@;
put 'Y3Rpb24iIT10eXBlb2YgYyYmbnVsbCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtsLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGMmJmMucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6bCx3'@;
put 'cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksYyYmZUsobCxjKX0oYSxsKTt2YXIgYz1mdW5jdGlvbiBrc3QobCl7dmFyIGM9ZnVuY3Rpb24gQXN0KCl7aWYodHlwZW9mIFJlZmxlY3Q+InUifHwh'@;
put 'UmVmbGVjdC5jb25zdHJ1Y3R8fFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sZnVuY3Rp'@;
put 'b24oKXt9KSksITB9Y2F0Y2h7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciBkLGY9UjEobCk7aWYoYyl7dmFyIGg9UjEodGhpcykuY29uc3RydWN0b3I7ZD1SZWZsZWN0LmNvbnN0cnVjdChmLGFyZ3VtZW50cyxoKX1lbHNlIGQ9Zi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0'@;
put 'dXJuIGZ1bmN0aW9uIEVzdChsLGMpe2lmKGMmJigib2JqZWN0Ij09PU85KGMpfHwiZnVuY3Rpb24iPT10eXBlb2YgYykpcmV0dXJuIGM7aWYodm9pZCAwIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVm'@;
put 'aW5lZCIpO3JldHVybiBmdW5jdGlvbiB4c3QobCl7aWYodm9pZCAwPT09bCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBsfShsKX0odGhpcyxkKX19KGEpO2Z1bmN0aW9u'@;
put 'IGEoKXtyZXR1cm4gZnVuY3Rpb24gYnN0KGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsYSksYy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIGZ1bmN0aW9uIF9zdChsLGMs'@;
put 'YSl7YyYmVWhlKGwucHJvdG90eXBlLGMpLGEmJlVoZShsLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShhLFt7a2V5OiJvcGVuIix2YWx1ZTpmdW5jdGlvbigpe3pkKFIxKGEucHJvdG90eXBlKSwib3BlbiIsdGhpcykuY2FsbCh0aGlzKSx0'@;
put 'aGlzLmh0RWRpdG9yJiZ0aGlzLmh0RWRpdG9yLmRlc3Ryb3koKSwibm9uZSI9PT10aGlzLmh0Q29udGFpbmVyLnN0eWxlLmRpc3BsYXkmJih0aGlzLmh0Q29udGFpbmVyLnN0eWxlLmRpc3BsYXk9IiIpLHRoaXMuaHRFZGl0b3I9bmV3IHRoaXMuaG90LmNvbnN0cnVjdG9yKHRoaXMuaHRDb250'@;
put 'YWluZXIsdGhpcy5odE9wdGlvbnMpLHRoaXMuaHRFZGl0b3IuaW5pdCgpLHRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQuc3R5bGUuZGlzcGxheT0iIix0aGlzLmNlbGxQcm9wZXJ0aWVzLnN0cmljdD90aGlzLmh0RWRpdG9yLnNlbGVjdENlbGwoMCwwKTp0aGlzLmh0RWRpdG9yLmRlc2VsZWN0'@;
put 'Q2VsbCgpLFdTKHRoaXMuVEVYVEFSRUEsMCx0aGlzLlRFWFRBUkVBLnZhbHVlLmxlbmd0aCksdGhpcy5yZWZyZXNoRGltZW5zaW9ucygpfX0se2tleToiY2xvc2UiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5odEVkaXRvciYmKHRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQuc3R5bGUuZGlzcGxh'@;
put 'eT0ibm9uZSIpLHRoaXMucmVtb3ZlSG9va3NCeUtleSgiYmVmb3JlS2V5RG93biIpLHpkKFIxKGEucHJvdG90eXBlKSwiY2xvc2UiLHRoaXMpLmNhbGwodGhpcyl9fSx7a2V5OiJwcmVwYXJlIix2YWx1ZTpmdW5jdGlvbihkLGgsbSxfLE8sWCl7emQoUjEoYS5wcm90b3R5cGUpLCJwcmVwYXJl'@;
put 'Iix0aGlzKS5jYWxsKHRoaXMsZCxoLG0sXyxPLFgpO3ZhciBhZT10aGlzLHBlPXtzdGFydFJvd3M6MCxzdGFydENvbHM6MCxtaW5Sb3dzOjAsbWluQ29sczowLGNsYXNzTmFtZToibGlzdGJveCIsY29weVBhc3RlOiExLGF1dG9Db2x1bW5TaXplOiExLGF1dG9Sb3dTaXplOiExLHJlYWRPbmx5'@;
put 'OiEwLGZpbGxIYW5kbGU6ITEsYXV0b1dyYXBDb2w6ITEsYXV0b1dyYXBSb3c6ITEsYWZ0ZXJPbkNlbGxNb3VzZURvd246ZnVuY3Rpb24oeGUsVmUpe3ZhciBaZT10aGlzLmdldFNvdXJjZURhdGEoVmUucm93LFZlLmNvbCk7dm9pZCAwIT09WmUmJmFlLnNldFZhbHVlKFplKSxhZS5pbnN0YW5j'@;
put 'ZS5kZXN0cm95RWRpdG9yKCl9LHByZXZlbnRXaGVlbDohMCxsYXlvdXREaXJlY3Rpb246dGhpcy5ob3QuaXNSdGwoKT8icnRsIjoibHRyIn07dGhpcy5jZWxsUHJvcGVydGllcy5oYW5kc29udGFibGUmJnJ1KHBlLFguaGFuZHNvbnRhYmxlKSx0aGlzLmh0T3B0aW9ucz1wZX19LHtrZXk6ImJl'@;
put 'Z2luRWRpdGluZyIsdmFsdWU6ZnVuY3Rpb24oZCxoKXt2YXIgbT10aGlzLmhvdC5nZXRTZXR0aW5ncygpLm9uQmVnaW5FZGl0aW5nO20mJiExPT09bSgpfHx6ZChSMShhLnByb3RvdHlwZSksImJlZ2luRWRpdGluZyIsdGhpcykuY2FsbCh0aGlzLGQsaCl9fSx7a2V5OiJjcmVhdGVFbGVtZW50'@;
put 'cyIsdmFsdWU6ZnVuY3Rpb24oKXt6ZChSMShhLnByb3RvdHlwZSksImNyZWF0ZUVsZW1lbnRzIix0aGlzKS5jYWxsKHRoaXMpO3ZhciBkPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKTtkLmNsYXNzTmFtZT0iaGFuZHNvbnRhYmxlRWRpdG9yIix0aGlzLlRFWFRB'@;
put 'UkVBX1BBUkVOVC5hcHBlbmRDaGlsZChkKSx0aGlzLmh0Q29udGFpbmVyPWQsdGhpcy5hc3NpZ25Ib29rcygpfX0se2tleToiZmluaXNoRWRpdGluZyIsdmFsdWU6ZnVuY3Rpb24oZCxoLG0pe2lmKHRoaXMuaHRFZGl0b3ImJnRoaXMuaHRFZGl0b3IuaXNMaXN0ZW5pbmcoKSYmdGhpcy5ob3Qu'@;
put 'bGlzdGVuKCksdGhpcy5odEVkaXRvciYmdGhpcy5odEVkaXRvci5nZXRTZWxlY3RlZExhc3QoKSl7dmFyIF89dGhpcy5odEVkaXRvci5nZXRJbnN0YW5jZSgpLmdldFZhbHVlKCk7dm9pZCAwIT09XyYmdGhpcy5zZXRWYWx1ZShfKX16ZChSMShhLnByb3RvdHlwZSksImZpbmlzaEVkaXRpbmci'@;
put 'LHRoaXMpLmNhbGwodGhpcyxkLGgsbSl9fSx7a2V5OiJhc3NpZ25Ib29rcyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzO3RoaXMuaG90LmFkZEhvb2soImFmdGVyRGVzdHJveSIsZnVuY3Rpb24oKXtkLmh0RWRpdG9yJiZkLmh0RWRpdG9yLmRlc3Ryb3koKX0pfX0se2tleToicmVnaXN0'@;
put 'ZXJTaG9ydGN1dHMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcyxtPXRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpO3pkKFIxKGEucHJvdG90eXBlKSwicmVnaXN0ZXJTaG9ydGN1dHMiLHRoaXMpLmNhbGwodGhpcyk7dmFyIE89ZnVuY3Rpb24o'@;
put 'YWUscGUpe3ZhciBiZT1kLmh0RWRpdG9yLmdldEluc3RhbmNlKCk7aWYodm9pZCAwIT09YWUmJihhZTwwfHxiZS5mbGlwcGVkJiZhZT5iZS5jb3VudFJvd3MoKS0xP2JlLmRlc2VsZWN0Q2VsbCgpOmJlLnNlbGVjdENlbGwoYWUsMCksYmUuZ2V0RGF0YSgpLmxlbmd0aCkpcmV0dXJuIHBlLnBy'@;
put 'ZXZlbnREZWZhdWx0KCksSGQocGUpLGQuaG90Lmxpc3RlbigpLGQuVEVYVEFSRUEuZm9jdXMoKSwhMX07bS5hZGRTaG9ydGN1dHMoW3trZXlzOltbIkFycm93VXAiXV0sY2FsbGJhY2s6ZnVuY3Rpb24oYWUpe3ZhciBiZSx4ZSxwZT1kLmh0RWRpdG9yLmdldEluc3RhbmNlKCk7cmV0dXJuIXBl'@;
put 'LmdldFNlbGVjdGVkTGFzdCgpJiZwZS5mbGlwcGVkP2JlPXBlLmNvdW50Um93cygpLTE6cGUuZ2V0U2VsZWN0ZWRMYXN0KCkmJihwZS5mbGlwcGVkPyh4ZT1wZS5nZXRTZWxlY3RlZExhc3QoKVswXSxiZT1NYXRoLm1heCgwLHhlLTEpKTpiZT0oeGU9cGUuZ2V0U2VsZWN0ZWRMYXN0KClbMF0p'@;
put 'LTEpLE8oYmUsYWUpfSxwcmV2ZW50RGVmYXVsdDohMX0se2tleXM6W1siQXJyb3dEb3duIl1dLGNhbGxiYWNrOmZ1bmN0aW9uKGFlKXt2YXIgYmUseGUscGU9ZC5odEVkaXRvci5nZXRJbnN0YW5jZSgpO2lmKHBlLmdldFNlbGVjdGVkTGFzdCgpfHxwZS5mbGlwcGVkKXtpZihwZS5nZXRTZWxl'@;
put 'Y3RlZExhc3QoKSlpZihwZS5mbGlwcGVkKWJlPXBlLmdldFNlbGVjdGVkTGFzdCgpWzBdKzE7ZWxzZSBpZighcGUuZmxpcHBlZCl7dmFyIFZlPXBlLmNvdW50Um93cygpLTE7eGU9cGUuZ2V0U2VsZWN0ZWRMYXN0KClbMF0sYmU9TWF0aC5taW4oVmUseGUrMSl9fWVsc2UgYmU9MDtyZXR1cm4g'@;
put 'TyhiZSxhZSl9LHByZXZlbnREZWZhdWx0OiExfV0se2dyb3VwOlpoZSxyZWxhdGl2ZVRvR3JvdXA6blIscG9zaXRpb246ImJlZm9yZSJ9KX19LHtrZXk6InVucmVnaXN0ZXJTaG9ydGN1dHMiLHZhbHVlOmZ1bmN0aW9uKCl7emQoUjEoYS5wcm90b3R5cGUpLCJ1bnJlZ2lzdGVyU2hvcnRjdXRz'@;
put 'Iix0aGlzKS5jYWxsKHRoaXMpLHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoWmhlKX19XSxbe2tleToiRURJVE9SX1RZUEUiLGdldDpmdW5jdGlvbigpe3JldHVybiJoYW5kc29udGFibGUifX1dKSxhfShE'@;
put 'NSk7ZnVuY3Rpb24gRDkobCl7cmV0dXJuKEQ5PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wm'@;
put 'JmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gWWhlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1'@;
put 'cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxXaGUoZi5rZXkpLGYpfX1mdW5jdGlvbiBSNSgpe3JldHVybiBSNT10eXBlb2YgUmVmbGVjdDwidSImJlJlZmxlY3QuZ2V0P1JlZmxlY3QuZ2V0LmJpbmQoKTpmdW5jdGlvbihjLGEs'@;
put 'Zil7dmFyIGQ9ZnVuY3Rpb24gSXN0KGwsYyl7Zm9yKDshT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGwsYykmJm51bGwhPT0obD1tMyhsKSk7KTtyZXR1cm4gbH0oYyxhKTtpZihkKXt2YXIgaD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGQsYSk7cmV0dXJu'@;
put 'IGguZ2V0P2guZ2V0LmNhbGwoYXJndW1lbnRzLmxlbmd0aDwzP2M6Zik6aC52YWx1ZX19LFI1LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBuSyhsLGMpe3JldHVybihuSz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihm'@;
put 'LGQpe3JldHVybiBmLl9fcHJvdG9fXz1kLGZ9KShsLGMpfWZ1bmN0aW9uIHJLKGwpe2lmKHZvaWQgMD09PWwpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gbH1mdW5jdGlv'@;
put 'biBtMyhsKXtyZXR1cm4obTM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSl9KShsKX1mdW5jdGlvbiBXaGUobCl7dmFyIGM9ZnVuY3Rpb24gTnN0'@;
put 'KGwsYyl7aWYoIm9iamVjdCIhPT1EOShsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1EOShmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9y'@;
put 'KCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09RDkoYyk/YzpTdHJpbmcoYyl9dmFyIGlLPW5ldyBXZWFrTWFwLG9LPWZ1bmN0aW9u'@;
put 'KGwpeyFmdW5jdGlvbiBSc3QobCxjKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyYmbnVsbCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtsLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGMmJmMucHJv'@;
put 'dG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6bCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksYyYmbksobCxjKX0oYSxsKTt2YXIgYz1mdW5jdGlvbiBMc3QobCl7dmFyIGM9ZnVuY3Rpb24g'@;
put 'RnN0KCl7aWYodHlwZW9mIFJlZmxlY3Q+InUifHwhUmVmbGVjdC5jb25zdHJ1Y3R8fFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxl'@;
put 'Y3QuY29uc3RydWN0KEJvb2xlYW4sW10sZnVuY3Rpb24oKXt9KSksITB9Y2F0Y2h7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciBkLGY9bTMobCk7aWYoYyl7dmFyIGg9bTModGhpcykuY29uc3RydWN0b3I7ZD1SZWZsZWN0LmNvbnN0cnVjdChmLGFyZ3VtZW50cyxoKX1lbHNl'@;
put 'IGQ9Zi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uIFBzdChsLGMpe2lmKGMmJigib2JqZWN0Ij09PUQ5KGMpfHwiZnVuY3Rpb24iPT10eXBlb2YgYykpcmV0dXJuIGM7aWYodm9pZCAwIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBt'@;
put 'YXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBySyhsKX0odGhpcyxkKX19KGEpO2Z1bmN0aW9uIGEoZil7dmFyIGQ7cmV0dXJuIGZ1bmN0aW9uIE9zdChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEg'@;
put 'Y2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGEpLGZ1bmN0aW9uIEhzdChsLGMsYSl7KGM9V2hlKGMpKWluIGw/T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsYyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmxbY109YX0ocksoZD1jLmNhbGwo'@;
put 'dGhpcyxmKSksInNvcnRCeVJlbGV2YW5jZSIsZnVuY3Rpb24oaCxtLF8pe3ZhciB4ZSxWZSxaZSxPPVtdLFg9W10sYWU9aC5sZW5ndGgscGU9bS5sZW5ndGg7aWYoMD09PWFlKXtmb3IoVmU9MDtWZTxwZTtWZSsrKVgucHVzaChWZSk7cmV0dXJuIFh9Zm9yKFZlPTA7VmU8cGU7VmUrKyl7aWYo'@;
put 'eGU9eVkoTXMobVtWZV0pKSxfKVplPXhlLmluZGV4T2YoaCk7ZWxzZXt2YXIgbHQ9dGhpcy5jZWxsUHJvcGVydGllcy5sb2NhbGU7WmU9eGUudG9Mb2NhbGVMb3dlckNhc2UobHQpLmluZGV4T2YoaC50b0xvY2FsZUxvd2VyQ2FzZShsdCkpfS0xIT09WmUmJk8ucHVzaCh7YmFzZUluZGV4OlZl'@;
put 'LGluZGV4OlplLGNoYXJzTGVmdDp4ZS5sZW5ndGgtWmUtYWUsdmFsdWU6eGV9KX1mb3IoTy5zb3J0KGZ1bmN0aW9uKGR0LGd0KXtpZigtMT09PWd0LmluZGV4KXJldHVybi0xO2lmKC0xPT09ZHQuaW5kZXgpcmV0dXJuIDE7aWYoZHQuaW5kZXg8Z3QuaW5kZXgpcmV0dXJuLTE7aWYoZ3QuaW5k'@;
put 'ZXg8ZHQuaW5kZXgpcmV0dXJuIDE7aWYoZHQuaW5kZXg9PT1ndC5pbmRleCl7aWYoZHQuY2hhcnNMZWZ0PGd0LmNoYXJzTGVmdClyZXR1cm4tMTtpZihkdC5jaGFyc0xlZnQ+Z3QuY2hhcnNMZWZ0KXJldHVybiAxfXJldHVybiAwfSksVmU9MCxwZT1PLmxlbmd0aDtWZTxwZTtWZSsrKVgucHVz'@;
put 'aChPW1ZlXS5iYXNlSW5kZXgpO3JldHVybiBYfSksZC5xdWVyeT1udWxsLGQuc3RyaXBwZWRDaG9pY2VzPVtdLGQucmF3Q2hvaWNlcz1bXSxpSy5zZXQocksoZCkse3NraXBPbmU6ITEsaXNNYWNPUzpkLmhvdC5yb290V2luZG93Lm5hdmlnYXRvci5wbGF0Zm9ybS5pbmRleE9mKCJNYWMiKT4t'@;
put 'MX0pLGR9cmV0dXJuIGZ1bmN0aW9uIERzdChsLGMsYSl7YyYmWWhlKGwucHJvdG90eXBlLGMpLGEmJlloZShsLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShhLFt7a2V5OiJnZXRWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlz'@;
put 'LGg9dGhpcy5yYXdDaG9pY2VzLmZpbmQoZnVuY3Rpb24obSl7cmV0dXJuIGQuc3RyaXBWYWx1ZUlmTmVlZGVkKG0pPT09ZC5URVhUQVJFQS52YWx1ZX0pO3JldHVybiBpbyhoKT9oOnRoaXMuVEVYVEFSRUEudmFsdWV9fSx7a2V5OiJjcmVhdGVFbGVtZW50cyIsdmFsdWU6ZnVuY3Rpb24oKXtS'@;
put 'NShtMyhhLnByb3RvdHlwZSksImNyZWF0ZUVsZW1lbnRzIix0aGlzKS5jYWxsKHRoaXMpLGdpKHRoaXMuaHRDb250YWluZXIsImF1dG9jb21wbGV0ZUVkaXRvciIpLGdpKHRoaXMuaHRDb250YWluZXIsLTE9PT10aGlzLmhvdC5yb290V2luZG93Lm5hdmlnYXRvci5wbGF0Zm9ybS5pbmRleE9m'@;
put 'KCJNYWMiKT8iIjoiaHRNYWNTY3JvbGwiKX19LHtrZXk6Im9wZW4iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcyxoPWlLLmdldCh0aGlzKTtSNShtMyhhLnByb3RvdHlwZSksIm9wZW4iLHRoaXMpLmNhbGwodGhpcyk7dmFyIG09dGhpcy5odEVkaXRvci5nZXRJbnN0YW5jZSgpLF89dm9p'@;
put 'ZCAwPT09dGhpcy5jZWxsUHJvcGVydGllcy50cmltRHJvcGRvd258fHRoaXMuY2VsbFByb3BlcnRpZXMudHJpbURyb3Bkb3duO3RoaXMuc2hvd0VkaXRhYmxlRWxlbWVudCgpLHRoaXMuZm9jdXMoKTt2YXIgTz1OdSgpOzA9PT1PJiZoLmlzTWFjT1MmJihPKz0xNSksdGhpcy5hZGRIb29rKCJi'@;
put 'ZWZvcmVLZXlEb3duIixmdW5jdGlvbihYKXtyZXR1cm4gZC5vbkJlZm9yZUtleURvd24oWCl9KSxtLnVwZGF0ZVNldHRpbmdzKHtjb2xXaWR0aHM6Xz9bU2wodGhpcy5URVhUQVJFQSktMl06dm9pZCAwLHdpZHRoOl8/U2wodGhpcy5URVhUQVJFQSkrTzp2b2lkIDAscmVuZGVyZXI6ZnVuY3Rp'@;
put 'b24oYWUscGUsYmUseGUsVmUsWmUsbHQpe1Y0KGFlLHBlLGJlLHhlLFZlLFplLGx0KTt2YXIgUW4sT3IsZHQ9ZC5jZWxsUHJvcGVydGllcyxndD1kdC5maWx0ZXJpbmdDYXNlU2Vuc2l0aXZlLGp0PWR0LmFsbG93SHRtbCxybj1kdC5sb2NhbGUsWHQ9ZC5xdWVyeSx5bj1NcyhaZSk7eW4mJiFq'@;
put 'dCYmLTEhPT0oUW49ITA9PT1ndD95bi5pbmRleE9mKFh0KTp5bi50b0xvY2FsZUxvd2VyQ2FzZShybikuaW5kZXhPZihYdC50b0xvY2FsZUxvd2VyQ2FzZShybikpKSYmKE9yPXluLnN1YnN0cihRbixYdC5sZW5ndGgpLHluPXluLnJlcGxhY2UoT3IsIjxzdHJvbmc+Ii5jb25jYXQoT3IsIjwv'@;
put 'c3Ryb25nPiIpKSkscGUuaW5uZXJIVE1MPXlufSxhdXRvQ29sdW1uU2l6ZTohMH0pLGguc2tpcE9uZSYmKGguc2tpcE9uZT0hMSksdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dChmdW5jdGlvbigpe2QucXVlcnlDaG9pY2VzKGQuVEVYVEFSRUEudmFsdWUpfSl9fSx7a2V5OiJjbG9zZSIsdmFs'@;
put 'dWU6ZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUhvb2tzQnlLZXkoImJlZm9yZUtleURvd24iKSxSNShtMyhhLnByb3RvdHlwZSksImNsb3NlIix0aGlzKS5jYWxsKHRoaXMpfX0se2tleToiZGlzY2FyZEVkaXRvciIsdmFsdWU6ZnVuY3Rpb24oZCl7UjUobTMoYS5wcm90b3R5cGUpLCJkaXNjYXJk'@;
put 'RWRpdG9yIix0aGlzKS5jYWxsKHRoaXMsZCksdGhpcy5ob3Qudmlldy5yZW5kZXIoKX19LHtrZXk6InF1ZXJ5Q2hvaWNlcyIsdmFsdWU6ZnVuY3Rpb24oZCl7dmFyIGg9dGhpcyxtPXRoaXMuY2VsbFByb3BlcnRpZXMuc291cmNlO3RoaXMucXVlcnk9ZCwiZnVuY3Rpb24iPT10eXBlb2YgbT9t'@;
put 'LmNhbGwodGhpcy5jZWxsUHJvcGVydGllcyxkLGZ1bmN0aW9uKF8pe2gucmF3Q2hvaWNlcz1fLGgudXBkYXRlQ2hvaWNlc0xpc3QoaC5zdHJpcFZhbHVlc0lmTmVlZGVkKF8pKX0pOkFycmF5LmlzQXJyYXkobSk/KHRoaXMucmF3Q2hvaWNlcz1tLHRoaXMudXBkYXRlQ2hvaWNlc0xpc3QodGhp'@;
put 'cy5zdHJpcFZhbHVlc0lmTmVlZGVkKG0pKSk6dGhpcy51cGRhdGVDaG9pY2VzTGlzdChbXSl9fSx7a2V5OiJ1cGRhdGVDaG9pY2VzTGlzdCIsdmFsdWU6ZnVuY3Rpb24oZCl7dmFyIGg9a1kodGhpcy5URVhUQVJFQSksbT15MGUodGhpcy5URVhUQVJFQSksXz10aGlzLmNlbGxQcm9wZXJ0aWVz'@;
put 'LnNvcnRCeVJlbGV2YW5jZSxPPXRoaXMuY2VsbFByb3BlcnRpZXMuZmlsdGVyLFg9bnVsbCxhZT1udWxsLHBlPWQ7XyYmKFg9dGhpcy5zb3J0QnlSZWxldmFuY2UodGhpcy5zdHJpcFZhbHVlSWZOZWVkZWQodGhpcy5nZXRWYWx1ZSgpKSxwZSx0aGlzLmNlbGxQcm9wZXJ0aWVzLmZpbHRlcmlu'@;
put 'Z0Nhc2VTZW5zaXRpdmUpKTt2YXIgYmU9QXJyYXkuaXNBcnJheShYKT9YLmxlbmd0aDowO2lmKCExPT09TyliZSYmKGFlPVhbMF0pO2Vsc2V7Zm9yKHZhciB4ZT1bXSxWZT0wLFplPXBlLmxlbmd0aDtWZTxaZSYmIShfJiZiZTw9VmUpO1ZlKyspeGUucHVzaChiZT9wZVtYW1ZlXV06cGVbVmVd'@;
put 'KTthZT0wLHBlPXhlfXRoaXMuc3RyaXBwZWRDaG9pY2VzPXBlLHRoaXMuaHRFZGl0b3IubG9hZERhdGEoRlMoW3BlXSkpLHRoaXMudXBkYXRlRHJvcGRvd25IZWlnaHQoKSx0aGlzLmZsaXBEcm9wZG93bklmTmVlZGVkKCksITA9PT10aGlzLmNlbGxQcm9wZXJ0aWVzLnN0cmljdCYmdGhpcy5o'@;
put 'aWdobGlnaHRCZXN0TWF0Y2hpbmdDaG9pY2UoYWUpLHRoaXMuaG90Lmxpc3RlbigpLFdTKHRoaXMuVEVYVEFSRUEsaCxoPT09bT92b2lkIDA6bSl9fSx7a2V5OiJmbGlwRHJvcGRvd25JZk5lZWRlZCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD1iNSh0aGlzLmhvdC52aWV3Ll93dC53dFRhYmxl'@;
put 'LlRBQkxFKSxoPWQ9PT10aGlzLmhvdC5yb290V2luZG93LG09dGhpcy5jZWxsUHJvcGVydGllcy5wcmV2ZW50T3ZlcmZsb3c7aWYoaHx8IWgmJihtfHwiaG9yaXpvbnRhbCI9PT1tKSlyZXR1cm4hMTt2YXIgXz1pdSh0aGlzLlRFWFRBUkVBKSxPPWNzKHRoaXMuVEVYVEFSRUEpLFg9dGhpcy5n'@;
put 'ZXREcm9wZG93bkhlaWdodCgpLGFlPWQuc2Nyb2xsVG9wLHBlPWNzKHRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuVEhFQUQpLGJlPWl1KGQpLHhlPV8udG9wLWJlLnRvcC1wZSthZSxWZT1kLnNjcm9sbEhlaWdodC14ZS1wZS1PLFplPVg+VmUmJnhlPlZlO3JldHVybiBaZT90aGlzLmZsaXBE'@;
put 'cm9wZG93bihYKTp0aGlzLnVuZmxpcERyb3Bkb3duKCksdGhpcy5saW1pdERyb3Bkb3duSWZOZWVkZWQoWmU/eGU6VmUsWCksWmV9fSx7a2V5OiJsaW1pdERyb3Bkb3duSWZOZWVkZWQiLHZhbHVlOmZ1bmN0aW9uKGQsaCl7aWYoaD5kKXt2YXIgWCxtPTAsXz0wLE89MDtkb3ttKz1PPXRoaXMu'@;
put 'aHRFZGl0b3IuZ2V0Um93SGVpZ2h0KF8pfHx0aGlzLmh0RWRpdG9yLnZpZXcuX3d0LmdldFNldHRpbmcoImRlZmF1bHRSb3dIZWlnaHQiKSxfKz0xfXdoaWxlKG08ZCk7WD1tLU8sdGhpcy5odEVkaXRvci5mbGlwcGVkJiYodGhpcy5odEVkaXRvci5yb290RWxlbWVudC5zdHlsZS50b3A9IiIu'@;
put 'Y29uY2F0KHBhcnNlSW50KHRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQuc3R5bGUudG9wLDEwKStoLVgsInB4IikpLHRoaXMuc2V0RHJvcGRvd25IZWlnaHQobS1PKX19fSx7a2V5OiJmbGlwRHJvcGRvd24iLHZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBoPXRoaXMuaHRFZGl0b3Iucm9vdEVsZW1l'@;
put 'bnQuc3R5bGU7aC5wb3NpdGlvbj0iYWJzb2x1dGUiLGgudG9wPSIiLmNvbmNhdCgtZCwicHgiKSx0aGlzLmh0RWRpdG9yLmZsaXBwZWQ9ITB9fSx7a2V5OiJ1bmZsaXBEcm9wZG93biIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlO2QucG9z'@;
put 'aXRpb249ImFic29sdXRlIixkLnRvcD0iIix0aGlzLmh0RWRpdG9yLmZsaXBwZWQ9dm9pZCAwfX0se2tleToidXBkYXRlRHJvcGRvd25IZWlnaHQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5odEVkaXRvci5nZXRDb2xXaWR0aCgwKStOdSh0aGlzLmhvdC5yb290RG9jdW1lbnQpKzIs'@;
put 'aD10aGlzLmNlbGxQcm9wZXJ0aWVzLnRyaW1Ecm9wZG93bjt0aGlzLmh0RWRpdG9yLnVwZGF0ZVNldHRpbmdzKHtoZWlnaHQ6dGhpcy5nZXREcm9wZG93bkhlaWdodCgpLHdpZHRoOmg/dm9pZCAwOmR9KSx0aGlzLmh0RWRpdG9yLnZpZXcuX3d0Lnd0VGFibGUuYWxpZ25PdmVybGF5c1dpdGhU'@;
put 'cmltbWluZ0NvbnRhaW5lcigpfX0se2tleToic2V0RHJvcGRvd25IZWlnaHQiLHZhbHVlOmZ1bmN0aW9uKGQpe3RoaXMuaHRFZGl0b3IudXBkYXRlU2V0dGluZ3Moe2hlaWdodDpkfSl9fSx7a2V5OiJoaWdobGlnaHRCZXN0TWF0Y2hpbmdDaG9pY2UiLHZhbHVlOmZ1bmN0aW9uKGQpeyJudW1i'@;
put 'ZXIiPT10eXBlb2YgZD90aGlzLmh0RWRpdG9yLnNlbGVjdENlbGwoZCwwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLCExKTp0aGlzLmh0RWRpdG9yLmRlc2VsZWN0Q2VsbCgpfX0se2tleToiZ2V0RHJvcGRvd25IZWlnaHQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5odEVkaXRvci5nZXRJ'@;
put 'bnN0YW5jZSgpLmdldFJvd0hlaWdodCgwKXx8MjMsaD10aGlzLmNlbGxQcm9wZXJ0aWVzLnZpc2libGVSb3dzO3JldHVybiB0aGlzLnN0cmlwcGVkQ2hvaWNlcy5sZW5ndGg+PWg/aCpkOnRoaXMuc3RyaXBwZWRDaG9pY2VzLmxlbmd0aCpkKzh9fSx7a2V5OiJzdHJpcFZhbHVlSWZOZWVkZWQi'@;
put 'LHZhbHVlOmZ1bmN0aW9uKGQpe3JldHVybiB0aGlzLnN0cmlwVmFsdWVzSWZOZWVkZWQoW2RdKVswXX19LHtrZXk6InN0cmlwVmFsdWVzSWZOZWVkZWQiLHZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBoPXRoaXMuY2VsbFByb3BlcnRpZXMuYWxsb3dIdG1sLG09aGEoZCxmdW5jdGlvbihPKXtyZXR1'@;
put 'cm4gTXMoTyl9KTtyZXR1cm4gaGEobSxmdW5jdGlvbihPKXtyZXR1cm4gaD9POnlZKE8pfSl9fSx7a2V5OiJhbGxvd0tleUV2ZW50UHJvcGFnYXRpb24iLHZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBoPXRoaXMuaHRFZGl0b3IuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxtX3Jvdz1oP2guZnJvbS5y'@;
put 'b3c6LTEsXz0hMTtyZXR1cm4gZD09PWhvLkFSUk9XX0RPV04mJm1fcm93PjAmJm1fcm93PHRoaXMuaHRFZGl0b3IuY291bnRSb3dzKCktMSYmKF89ITApLGQ9PT1oby5BUlJPV19VUCYmbV9yb3c+LTEmJihfPSEwKSxffX0se2tleToib25CZWZvcmVLZXlEb3duIix2YWx1ZTpmdW5jdGlvbihk'@;
put 'KXt2YXIgaD10aGlzLG09aUsuZ2V0KHRoaXMpO2lmKG0uc2tpcE9uZT0hMSxFMGUoZC5rZXlDb2RlKXx8ZC5rZXlDb2RlPT09aG8uQkFDS1NQQUNFfHxkLmtleUNvZGU9PT1oby5ERUxFVEV8fGQua2V5Q29kZT09PWhvLklOU0VSVCl7dmFyIF89MTA7aWYoZC5rZXlDb2RlPT09aG8uQyYmKGQu'@;
put 'Y3RybEtleXx8ZC5tZXRhS2V5KSlyZXR1cm47dGhpcy5pc09wZW5lZCgpfHwoXys9MTApLHRoaXMuaHRFZGl0b3ImJnRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoZnVuY3Rpb24oKXtoLnF1ZXJ5Q2hvaWNlcyhoLlRFWFRBUkVBLnZhbHVlKSxtLnNraXBPbmU9ITB9LF8pfX19XSxbe2tleToi'@;
put 'RURJVE9SX1RZUEUiLGdldDpmdW5jdGlvbigpe3JldHVybiJhdXRvY29tcGxldGUifX1dKSxhfSh0Syk7ZnVuY3Rpb24gSTkobCl7cmV0dXJuKEk5PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0'@;
put 'eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gR2hlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0'@;
put 'aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCx6c3QoZi5rZXkpLGYpfX1mdW5jdGlvbiB6c3QobCl7dmFyIGM9ZnVuY3Rpb24g'@;
put 'VXN0KGwsYyl7aWYoIm9iamVjdCIhPT1JOShsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1JOShmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVy'@;
put 'cm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09STkoYyk/YzpTdHJpbmcoYyl9ZnVuY3Rpb24gYUsobCxjKXtyZXR1cm4oYUs9'@;
put 'T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZixkKXtyZXR1cm4gZi5fX3Byb3RvX189ZCxmfSkobCxjKX1mdW5jdGlvbiBtTChsKXtyZXR1cm4obUw9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5i'@;
put 'aW5kKCk6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSl9KShsKX12YXIgJGhlPWZ1bmN0aW9uKGwpeyFmdW5jdGlvbiBac3QobCxjKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyYmbnVsbCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3Vw'@;
put 'ZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtsLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGMmJmMucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6bCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5'@;
put 'KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksYyYmYUsobCxjKX0oYSxsKTt2YXIgYz1mdW5jdGlvbiBZc3QobCl7dmFyIGM9ZnVuY3Rpb24gJHN0KCl7aWYodHlwZW9mIFJlZmxlY3Q+InUifHwhUmVmbGVjdC5jb25zdHJ1Y3R8fFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7'@;
put 'aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sZnVuY3Rpb24oKXt9KSksITB9Y2F0Y2h7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3Zh'@;
put 'ciBkLGY9bUwobCk7aWYoYyl7dmFyIGg9bUwodGhpcykuY29uc3RydWN0b3I7ZD1SZWZsZWN0LmNvbnN0cnVjdChmLGFyZ3VtZW50cyxoKX1lbHNlIGQ9Zi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uIFdzdChsLGMpe2lmKGMmJigib2JqZWN0Ij09PUk5KGMpfHwiZnVu'@;
put 'Y3Rpb24iPT10eXBlb2YgYykpcmV0dXJuIGM7aWYodm9pZCAwIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbiBHc3QobCl7aWYodm9pZCAwPT09bCl0aHJvdyBu'@;
put 'ZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBsfShsKX0odGhpcyxkKX19KGEpO2Z1bmN0aW9uIGEoKXtyZXR1cm4gZnVuY3Rpb24gQnN0KGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykp'@;
put 'dGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsYSksYy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIGZ1bmN0aW9uIGpzdChsLGMsYSl7YyYmR2hlKGwucHJvdG90eXBlLGMpLGEmJkdoZShsLGEpLE9iamVjdC5kZWZpbmVQ'@;
put 'cm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShhLFt7a2V5OiJiZWdpbkVkaXRpbmciLHZhbHVlOmZ1bmN0aW9uKGQsaCl7aWYoaCYmIm1vdXNldXAiPT09aC50eXBlKXt2YXIgbT10aGlzLlRELnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9ImNoZWNrYm94Il0nKTtZbyht'@;
put 'LCJodEJhZFZhbHVlIil8fG0uY2xpY2soKX19fSx7a2V5OiJmaW5pc2hFZGl0aW5nIix2YWx1ZTpmdW5jdGlvbigpe319LHtrZXk6ImluaXQiLHZhbHVlOmZ1bmN0aW9uKCl7fX0se2tleToib3BlbiIsdmFsdWU6ZnVuY3Rpb24oKXt9fSx7a2V5OiJjbG9zZSIsdmFsdWU6ZnVuY3Rpb24oKXt9'@;
put 'fSx7a2V5OiJnZXRWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24oKXt9fSx7a2V5OiJzZXRWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24oKXt9fSx7a2V5OiJmb2N1cyIsdmFsdWU6ZnVuY3Rpb24oKXt9fV0sW3trZXk6IkVESVRPUl9UWVBFIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4iY2hlY2tib3gifX1dKSxh'@;
put 'fShBOSksS2hlPVQoMTc0ODApO2Z1bmN0aW9uIFI5KGwpe3JldHVybihSOT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24i'@;
put 'PT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIHFoZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFi'@;
put 'bGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsSnN0KGYua2V5KSxmKX19ZnVuY3Rpb24gSnN0KGwpe3ZhciBjPWZ1bmN0aW9uIFFzdChsLGMpe2lmKCJvYmplY3QiIT09UjkobCl8fG51bGw9PT1sKXJl'@;
put 'dHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09UjkoZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2'@;
put 'ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PVI5KGMpP2M6U3RyaW5nKGMpfWZ1bmN0aW9uIGczKCl7cmV0dXJuIGczPXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdC5nZXQ/UmVmbGVjdC5nZXQu'@;
put 'YmluZCgpOmZ1bmN0aW9uKGMsYSxmKXt2YXIgZD1mdW5jdGlvbiBldXQobCxjKXtmb3IoOyFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobCxjKSYmbnVsbCE9PShsPVVkKGwpKTspO3JldHVybiBsfShjLGEpO2lmKGQpe3ZhciBoPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURl'@;
put 'c2NyaXB0b3IoZCxhKTtyZXR1cm4gaC5nZXQ/aC5nZXQuY2FsbChhcmd1bWVudHMubGVuZ3RoPDM/YzpmKTpoLnZhbHVlfX0sZzMuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIGxLKGwsYyl7cmV0dXJuKGxLPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBl'@;
put 'T2YuYmluZCgpOmZ1bmN0aW9uKGYsZCl7cmV0dXJuIGYuX19wcm90b19fPWQsZn0pKGwsYyl9ZnVuY3Rpb24gVWQobCl7cmV0dXJuKFVkPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGEpe3JldHVybiBhLl9fcHJvdG9fX3x8T2Jq'@;
put 'ZWN0LmdldFByb3RvdHlwZU9mKGEpfSkobCl9dmFyIFhoZT0iZGF0ZSIsSmhlPSJkYXRlRWRpdG9yIixRaGU9ZnVuY3Rpb24obCl7IWZ1bmN0aW9uIHR1dChsLGMpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjJiZudWxsIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9u'@;
put 'IG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2wucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYyYmYy5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpsLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBl'@;
put 'Iix7d3JpdGFibGU6ITF9KSxjJiZsSyhsLGMpfShhLGwpO3ZhciBjPWZ1bmN0aW9uIG51dChsKXt2YXIgYz1mdW5jdGlvbiBvdXQoKXtpZih0eXBlb2YgUmVmbGVjdD4idSJ8fCFSZWZsZWN0LmNvbnN0cnVjdHx8UmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24i'@;
put 'PT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSxmdW5jdGlvbigpe30pKSwhMH1jYXRjaHtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGQsZj1VZChsKTtp'@;
put 'ZihjKXt2YXIgaD1VZCh0aGlzKS5jb25zdHJ1Y3RvcjtkPVJlZmxlY3QuY29uc3RydWN0KGYsYXJndW1lbnRzLGgpfWVsc2UgZD1mLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24gcnV0KGwsYyl7aWYoYyYmKCJvYmplY3QiPT09UjkoYyl8fCJmdW5jdGlvbiI9PXR5cGVv'@;
put 'ZiBjKSlyZXR1cm4gYztpZih2b2lkIDAhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uIGl1dChsKXtpZih2b2lkIDA9PT1sKXRocm93IG5ldyBSZWZlcmVuY2VF'@;
put 'cnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGx9KGwpfSh0aGlzLGQpfX0oYSk7ZnVuY3Rpb24gYShmKXt2YXIgZDtyZXR1cm4gZnVuY3Rpb24gcXN0KGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cg'@;
put 'bmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsYSksKGQ9Yy5jYWxsKHRoaXMsZikpLmRlZmF1bHREYXRlRm9ybWF0PSJERC9NTS9ZWVlZIixkLmlzQ2VsbEVkaXRlZD0hMSxkLnBhcmVudERlc3Ryb3llZD0hMSxkLiRkYXRlUGlja2VyPW51'@;
put 'bGwsZH1yZXR1cm4gZnVuY3Rpb24gWHN0KGwsYyxhKXtjJiZxaGUobC5wcm90b3R5cGUsYyksYSYmcWhlKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGEsW3trZXk6ImluaXQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcztpZigi'@;
put 'ZnVuY3Rpb24iIT10eXBlb2YgS28pdGhyb3cgbmV3IEVycm9yKCJZb3UgbmVlZCB0byBpbmNsdWRlIG1vbWVudC5qcyB0byB5b3VyIHByb2plY3QuIik7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIEtoZSl0aHJvdyBuZXcgRXJyb3IoIllvdSBuZWVkIHRvIGluY2x1ZGUgUGlrYWRheSB0byB5b3Vy'@;
put 'IHByb2plY3QuIik7ZzMoVWQoYS5wcm90b3R5cGUpLCJpbml0Iix0aGlzKS5jYWxsKHRoaXMpLHRoaXMuaW5zdGFuY2UuYWRkSG9vaygiYWZ0ZXJEZXN0cm95IixmdW5jdGlvbigpe2QucGFyZW50RGVzdHJveWVkPSEwLGQuZGVzdHJveUVsZW1lbnRzKCl9KX19LHtrZXk6ImNyZWF0ZUVsZW1l'@;
put 'bnRzIix2YWx1ZTpmdW5jdGlvbigpe2czKFVkKGEucHJvdG90eXBlKSwiY3JlYXRlRWxlbWVudHMiLHRoaXMpLmNhbGwodGhpcyksdGhpcy5kYXRlUGlja2VyPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSx0aGlzLmRhdGVQaWNrZXJTdHlsZT10aGlzLmRhdGVQ'@;
put 'aWNrZXIuc3R5bGUsdGhpcy5kYXRlUGlja2VyU3R5bGUucG9zaXRpb249ImFic29sdXRlIix0aGlzLmRhdGVQaWNrZXJTdHlsZS50b3A9MCx0aGlzLmRhdGVQaWNrZXJTdHlsZS5sZWZ0PTAsdGhpcy5kYXRlUGlja2VyU3R5bGUuekluZGV4PTk5OTksdGhpcy5kYXRlUGlja2VyLnNldEF0dHJp'@;
put 'YnV0ZSgiZGlyIix0aGlzLmhvdC5pc1J0bCgpPyJydGwiOiJsdHIiKSxnaSh0aGlzLmRhdGVQaWNrZXIsImh0RGF0ZXBpY2tlckhvbGRlciIpLHRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuZGF0ZVBpY2tlciksbmV3IGZzKHRoaXMpLmFkZEV2ZW50TGlzdGVu'@;
put 'ZXIodGhpcy5kYXRlUGlja2VyLCJtb3VzZWRvd24iLGZ1bmN0aW9uKGgpe3JldHVybiBoLnN0b3BQcm9wYWdhdGlvbigpfSl9fSx7a2V5OiJkZXN0cm95RWxlbWVudHMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5kYXRlUGlja2VyLnBhcmVudE5vZGU7dGhpcy4kZGF0ZVBpY2tlciYm'@;
put 'dGhpcy4kZGF0ZVBpY2tlci5kZXN0cm95KCksZCYmZC5yZW1vdmVDaGlsZCh0aGlzLmRhdGVQaWNrZXIpfX0se2tleToicHJlcGFyZSIsdmFsdWU6ZnVuY3Rpb24oZCxoLG0sXyxPLFgpe2czKFVkKGEucHJvdG90eXBlKSwicHJlcGFyZSIsdGhpcykuY2FsbCh0aGlzLGQsaCxtLF8sTyxYKX19'@;
put 'LHtrZXk6Im9wZW4iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGwsbT10aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKTtnMyhVZChhLnByb3RvdHlw'@;
put 'ZSksIm9wZW4iLHRoaXMpLmNhbGwodGhpcyksdGhpcy5zaG93RGF0ZXBpY2tlcihkKSxtLmFkZFNob3J0Y3V0KHtrZXlzOltbIkVudGVyIl1dLGNhbGxiYWNrOmZ1bmN0aW9uKE8pe08uc3RvcFByb3BhZ2F0aW9uKCl9LGdyb3VwOkpoZX0pfX0se2tleToiY2xvc2UiLHZhbHVlOmZ1bmN0aW9u'@;
put 'KCl7dmFyIGQsaD10aGlzO3RoaXMuX29wZW5lZD0hMSxudWxsIT09KGQ9dGhpcy4kZGF0ZVBpY2tlcikmJnZvaWQgMCE9PWQmJmQuZGVzdHJveSYmdGhpcy4kZGF0ZVBpY2tlci5kZXN0cm95KCksdGhpcy5pbnN0YW5jZS5fcmVnaXN0ZXJUaW1lb3V0KGZ1bmN0aW9uKCl7aC5pbnN0YW5jZS5f'@;
put 'cmVmcmVzaEJvcmRlcnMoKX0pLHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoSmhlKSxnMyhVZChhLnByb3RvdHlwZSksImNsb3NlIix0aGlzKS5jYWxsKHRoaXMpfX0se2tleToiZmluaXNoRWRpdGluZyIs'@;
put 'dmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLGg9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtpZihkKXt2YXIgbT10aGlzLm9yaWdpbmFsVmFs'@;
put 'dWU7dm9pZCAwIT09bSYmdGhpcy5zZXRWYWx1ZShtKX1nMyhVZChhLnByb3RvdHlwZSksImZpbmlzaEVkaXRpbmciLHRoaXMpLmNhbGwodGhpcyxkLGgpfX0se2tleToic2hvd0RhdGVwaWNrZXIiLHZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBYLGg9dGhpcy5URC5nZXRCb3VuZGluZ0NsaWVudFJl'@;
put 'Y3QoKSxtPXRoaXMuY2VsbFByb3BlcnRpZXMuZGF0ZUZvcm1hdHx8dGhpcy5kZWZhdWx0RGF0ZUZvcm1hdCxfPXRoaXMuaW5zdGFuY2Uudmlldy5pc01vdXNlRG93bigpLE89ISFkJiZEWShkLmtleUNvZGUpO3RoaXMuZGF0ZVBpY2tlci5zdHlsZS5kaXNwbGF5PSJibG9jayIsdGhpcy4kZGF0'@;
put 'ZVBpY2tlcj1uZXcgS2hlKHRoaXMuZ2V0RGF0ZVBpY2tlckNvbmZpZygpKSx0aGlzLiRkYXRlUGlja2VyLl9vbklucHV0Rm9jdXM9ZnVuY3Rpb24oKXt9LHRoaXMuZGF0ZVBpY2tlclN0eWxlLnRvcD0iIi5jb25jYXQodGhpcy5ob3Qucm9vdFdpbmRvdy5wYWdlWU9mZnNldCtoLnRvcCtjcyh0'@;
put 'aGlzLlREKSwicHgiKTt2YXIgYWU7YWU9dGhpcy5ob3QuaXNSdGwoKT9oLnJpZ2h0LVNsKHRoaXMuZGF0ZVBpY2tlcik6aC5sZWZ0LHRoaXMuZGF0ZVBpY2tlclN0eWxlLmxlZnQ9IiIuY29uY2F0KGFlLCJweCIpLHRoaXMub3JpZ2luYWxWYWx1ZT8oS28oWD10aGlzLm9yaWdpbmFsVmFsdWUs'@;
put 'bSwhMCkuaXNWYWxpZCgpJiZ0aGlzLiRkYXRlUGlja2VyLnNldE1vbWVudChLbyhYLG0pLCEwKSx0aGlzLmdldFZhbHVlKCkhPT10aGlzLm9yaWdpbmFsVmFsdWUmJnRoaXMuc2V0VmFsdWUodGhpcy5vcmlnaW5hbFZhbHVlKSwhTyYmIV8mJnRoaXMuc2V0VmFsdWUoIiIpKTp0aGlzLmNlbGxQ'@;
put 'cm9wZXJ0aWVzLmRlZmF1bHREYXRlPyhLbyhYPXRoaXMuY2VsbFByb3BlcnRpZXMuZGVmYXVsdERhdGUsbSwhMCkuaXNWYWxpZCgpJiZ0aGlzLiRkYXRlUGlja2VyLnNldE1vbWVudChLbyhYLG0pLCEwKSwhTyYmIV8mJnRoaXMuc2V0VmFsdWUoIiIpKTp0aGlzLiRkYXRlUGlja2VyLmdvdG9U'@;
put 'b2RheSgpfX0se2tleToiaGlkZURhdGVwaWNrZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5kYXRlUGlja2VyU3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy4kZGF0ZVBpY2tlci5oaWRlKCl9fSx7a2V5OiJnZXREYXRlUGlja2VyQ29uZmlnIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXMs'@;
put 'aD10aGlzLlRFWFRBUkVBLG09e307dGhpcy5jZWxsUHJvcGVydGllcyYmdGhpcy5jZWxsUHJvcGVydGllcy5kYXRlUGlja2VyQ29uZmlnJiZIUyhtLHRoaXMuY2VsbFByb3BlcnRpZXMuZGF0ZVBpY2tlckNvbmZpZyk7dmFyIF89bS5vblNlbGVjdCxPPW0ub25DbG9zZTtyZXR1cm4gbS5maWVs'@;
put 'ZD1oLG0udHJpZ2dlcj1oLG0uY29udGFpbmVyPXRoaXMuZGF0ZVBpY2tlcixtLmJvdW5kPSExLG0uZm9ybWF0PW0uZm9ybWF0fHx0aGlzLmRlZmF1bHREYXRlRm9ybWF0LG0ucmVwb3NpdGlvbj1tLnJlcG9zaXRpb258fCExLG0uaXNSVEw9ITEsbS5vblNlbGVjdD1mdW5jdGlvbihYKXt2YXIg'@;
put 'YWU9WDtpc05hTihhZS5nZXRUaW1lKCkpfHwoYWU9S28oYWUpLmZvcm1hdChkLmNlbGxQcm9wZXJ0aWVzLmRhdGVGb3JtYXR8fGQuZGVmYXVsdERhdGVGb3JtYXQpKSxkLnNldFZhbHVlKGFlKSxkLmhpZGVEYXRlcGlja2VyKCksXyYmXygpfSxtLm9uQ2xvc2U9ZnVuY3Rpb24oKXtkLnBhcmVu'@;
put 'dERlc3Ryb3llZHx8ZC5maW5pc2hFZGl0aW5nKCExKSxPJiZPKCl9LG19fV0sW3trZXk6IkVESVRPUl9UWVBFIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gWGhlfX1dKSxhfShENSk7ZnVuY3Rpb24gTDkobCl7cmV0dXJuKEw5PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10'@;
put 'eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSko'@;
put 'bCl9ZnVuY3Rpb24gZTJlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxzdXQo'@;
put 'Zi5rZXkpLGYpfX1mdW5jdGlvbiBzdXQobCl7dmFyIGM9ZnVuY3Rpb24gdXV0KGwsYyl7aWYoIm9iamVjdCIhPT1MOShsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYo'@;
put 'Im9iamVjdCIhPT1MOShmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09TDko'@;
put 'Yyk/YzpTdHJpbmcoYyl9ZnVuY3Rpb24gZ0woKXtyZXR1cm4gZ0w9dHlwZW9mIFJlZmxlY3Q8InUiJiZSZWZsZWN0LmdldD9SZWZsZWN0LmdldC5iaW5kKCk6ZnVuY3Rpb24oYyxhLGYpe3ZhciBkPWZ1bmN0aW9uIGN1dChsLGMpe2Zvcig7IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVy'@;
put 'dHkuY2FsbChsLGMpJiZudWxsIT09KGw9UDkobCkpOyk7cmV0dXJuIGx9KGMsYSk7aWYoZCl7dmFyIGg9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihkLGEpO3JldHVybiBoLmdldD9oLmdldC5jYWxsKGFyZ3VtZW50cy5sZW5ndGg8Mz9jOmYpOmgudmFsdWV9fSxnTC5hcHBseSh0'@;
put 'aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gc0sobCxjKXtyZXR1cm4oc0s9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZixkKXtyZXR1cm4gZi5fX3Byb3RvX189ZCxmfSkobCxjKX1mdW5jdGlvbiBQOShsKXtyZXR1cm4oUDk9T2Jq'@;
put 'ZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSl9KShsKX12YXIgdUs9ZnVuY3Rpb24obCl7IWZ1bmN0aW9uIGZ1dChsLGMpe2lmKCJmdW5jdGlvbiIhPXR5'@;
put 'cGVvZiBjJiZudWxsIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2wucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYyYmYy5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpsLHdyaXRhYmxlOiEw'@;
put 'LGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxjJiZzSyhsLGMpfShhLGwpO3ZhciBjPWZ1bmN0aW9uIGR1dChsKXt2YXIgYz1mdW5jdGlvbiBtdXQoKXtpZih0eXBlb2YgUmVmbGVjdD4idSJ8fCFSZWZsZWN0LmNv'@;
put 'bnN0cnVjdHx8UmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSxmdW5jdGlvbigpe30pKSwh'@;
put 'MH1jYXRjaHtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGQsZj1QOShsKTtpZihjKXt2YXIgaD1QOSh0aGlzKS5jb25zdHJ1Y3RvcjtkPVJlZmxlY3QuY29uc3RydWN0KGYsYXJndW1lbnRzLGgpfWVsc2UgZD1mLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rp'@;
put 'b24gaHV0KGwsYyl7aWYoYyYmKCJvYmplY3QiPT09TDkoYyl8fCJmdW5jdGlvbiI9PXR5cGVvZiBjKSlyZXR1cm4gYztpZih2b2lkIDAhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0'@;
put 'dXJuIGZ1bmN0aW9uIHB1dChsKXtpZih2b2lkIDA9PT1sKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGx9KGwpfSh0aGlzLGQpfX0oYSk7ZnVuY3Rpb24gYSgpe3JldHVy'@;
put 'biBmdW5jdGlvbiBhdXQobCxjKXtpZighKGwgaW5zdGFuY2VvZiBjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxhKSxjLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gZnVuY3Rpb24gbHV0KGwsYyxhKXtjJiZlMmUo'@;
put 'bC5wcm90b3R5cGUsYyksYSYmZTJlKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGEsW3trZXk6InByZXBhcmUiLHZhbHVlOmZ1bmN0aW9uKGQsaCxtLF8sTyxYKXtnTChQOShhLnByb3RvdHlwZSksInByZXBhcmUiLHRoaXMpLmNhbGwo'@;
put 'dGhpcyxkLGgsbSxfLE8sWCksdGhpcy5jZWxsUHJvcGVydGllcy5maWx0ZXI9ITEsdGhpcy5jZWxsUHJvcGVydGllcy5zdHJpY3Q9ITB9fV0sW3trZXk6IkVESVRPUl9UWVBFIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4iZHJvcGRvd24ifX1dKSxhfShvSyk7ZnVuY3Rpb24gRjkobCl7cmV0dXJu'@;
put 'KEY5PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wm'@;
put 'JmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gdDJlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihm'@;
put 'LndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxidXQoZi5rZXkpLGYpfX1mdW5jdGlvbiBidXQobCl7dmFyIGM9ZnVuY3Rpb24gX3V0KGwsYyl7aWYoIm9iamVjdCIhPT1GOShsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZv'@;
put 'aWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1GOShmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51'@;
put 'bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09RjkoYyk/YzpTdHJpbmcoYyl9ZnVuY3Rpb24gY0sobCxjKXtyZXR1cm4oY0s9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZixkKXtyZXR1cm4gZi5fX3Byb3Rv'@;
put 'X189ZCxmfSkobCxjKX1mdW5jdGlvbiB2TChsKXtyZXR1cm4odkw9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSl9KShsKX11by5nZXRTaW5nbGV0'@;
put 'b24oKS5hZGQoImJlZm9yZVZhbGlkYXRlIixmdW5jdGlvbihsLGMsYSl7dmFyIGY9dGhpcy5nZXRDZWxsTWV0YShjLHRoaXMucHJvcFRvQ29sKGEpKTtmLmVkaXRvcj09PXVLJiZ2b2lkIDA9PT1mLnN0cmljdCYmKGYuZmlsdGVyPSExLGYuc3RyaWN0PSEwKX0pO3ZhciBuMmU9ZnVuY3Rpb24o'@;
put 'bCl7IWZ1bmN0aW9uIHd1dChsLGMpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjJiZudWxsIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2wucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYyYmYy5wcm90'@;
put 'b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpsLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxjJiZjSyhsLGMpfShhLGwpO3ZhciBjPWZ1bmN0aW9uIEN1dChsKXt2YXIgYz1mdW5jdGlvbiBr'@;
put 'dXQoKXtpZih0eXBlb2YgUmVmbGVjdD4idSJ8fCFSZWZsZWN0LmNvbnN0cnVjdHx8UmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVj'@;
put 'dC5jb25zdHJ1Y3QoQm9vbGVhbixbXSxmdW5jdGlvbigpe30pKSwhMH1jYXRjaHtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGQsZj12TChsKTtpZihjKXt2YXIgaD12TCh0aGlzKS5jb25zdHJ1Y3RvcjtkPVJlZmxlY3QuY29uc3RydWN0KGYsYXJndW1lbnRzLGgpfWVsc2Ug'@;
put 'ZD1mLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24gU3V0KGwsYyl7aWYoYyYmKCJvYmplY3QiPT09RjkoYyl8fCJmdW5jdGlvbiI9PXR5cGVvZiBjKSlyZXR1cm4gYztpZih2b2lkIDAhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1h'@;
put 'eSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uIE11dChsKXtpZih2b2lkIDA9PT1sKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJu'@;
put 'IGx9KGwpfSh0aGlzLGQpfX0oYSk7ZnVuY3Rpb24gYSgpe3JldHVybiBmdW5jdGlvbiB2dXQobCxjKXtpZighKGwgaW5zdGFuY2VvZiBjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxhKSxjLmFwcGx5KHRoaXMsYXJndW1l'@;
put 'bnRzKX1yZXR1cm4gZnVuY3Rpb24geXV0KGwsYyxhKXtjJiZ0MmUobC5wcm90b3R5cGUsYyksYSYmdDJlKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGEsbnVsbCxbe2tleToiRURJVE9SX1RZUEUiLGdldDpmdW5jdGlvbigpe3JldHVy'@;
put 'biJudW1lcmljIn19XSksYX0oRDUpO2Z1bmN0aW9uIEg5KGwpe3JldHVybihIOT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rp'@;
put 'b24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIHIyZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1l'@;
put 'cmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsVHV0KGYua2V5KSxmKX19ZnVuY3Rpb24gVHV0KGwpe3ZhciBjPWZ1bmN0aW9uIE91dChsLGMpe2lmKCJvYmplY3QiIT09SDkobCl8fG51bGw9PT1s'@;
put 'KXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09SDkoZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1p'@;
put 'dGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PUg5KGMpP2M6U3RyaW5nKGMpfWZ1bmN0aW9uIHlMKCl7cmV0dXJuIHlMPXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdC5nZXQ/UmVmbGVjdC5n'@;
put 'ZXQuYmluZCgpOmZ1bmN0aW9uKGMsYSxmKXt2YXIgZD1mdW5jdGlvbiBEdXQobCxjKXtmb3IoOyFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobCxjKSYmbnVsbCE9PShsPU45KGwpKTspO3JldHVybiBsfShjLGEpO2lmKGQpe3ZhciBoPU9iamVjdC5nZXRPd25Qcm9wZXJ0'@;
put 'eURlc2NyaXB0b3IoZCxhKTtyZXR1cm4gaC5nZXQ/aC5nZXQuY2FsbChhcmd1bWVudHMubGVuZ3RoPDM/YzpmKTpoLnZhbHVlfX0seUwuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIGZLKGwsYyl7cmV0dXJuKGZLPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90'@;
put 'eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGYsZCl7cmV0dXJuIGYuX19wcm90b19fPWQsZn0pKGwsYyl9ZnVuY3Rpb24gTjkobCl7cmV0dXJuKE45PU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGEpe3JldHVybiBhLl9fcHJvdG9fX3x8'@;
put 'T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpfSkobCl9dmFyIGkyZT1mdW5jdGlvbihsKXshZnVuY3Rpb24gSXV0KGwsYyl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGMmJm51bGwhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBh'@;
put 'IGZ1bmN0aW9uIik7bC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShjJiZjLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmwsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGMmJmZLKGws'@;
put 'Yyl9KGEsbCk7dmFyIGM9ZnVuY3Rpb24gUnV0KGwpe3ZhciBjPWZ1bmN0aW9uIEZ1dCgpe2lmKHR5cGVvZiBSZWZsZWN0PiJ1Inx8IVJlZmxlY3QuY29uc3RydWN0fHxSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0'@;
put 'cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLGZ1bmN0aW9uKCl7fSkpLCEwfWNhdGNoe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZCxmPU45KGwpO2lmKGMpe3ZhciBoPU45KHRoaXMpLmNvbnN0'@;
put 'cnVjdG9yO2Q9UmVmbGVjdC5jb25zdHJ1Y3QoZixhcmd1bWVudHMsaCl9ZWxzZSBkPWYuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbiBMdXQobCxjKXtpZihjJiYoIm9iamVjdCI9PT1IOShjKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGMpKXJldHVybiBjO2lmKHZvaWQgMCE9'@;
put 'PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24gUHV0KGwpe2lmKHZvaWQgMD09PWwpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGlu'@;
put 'aXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gbH0obCl9KHRoaXMsZCl9fShhKTtmdW5jdGlvbiBhKCl7cmV0dXJuIGZ1bmN0aW9uIHh1dChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xh'@;
put 'c3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGEpLGMuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBmdW5jdGlvbiBBdXQobCxjLGEpe2MmJnIyZShsLnByb3RvdHlwZSxjKSxhJiZyMmUobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0o'@;
put 'YSxbe2tleToiY3JlYXRlRWxlbWVudHMiLHZhbHVlOmZ1bmN0aW9uKCl7eUwoTjkoYS5wcm90b3R5cGUpLCJjcmVhdGVFbGVtZW50cyIsdGhpcykuY2FsbCh0aGlzKSx0aGlzLlRFWFRBUkVBPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLHRoaXMuVEVYVEFS'@;
put 'RUEuc2V0QXR0cmlidXRlKCJ0eXBlIiwicGFzc3dvcmQiKSx0aGlzLlRFWFRBUkVBLnNldEF0dHJpYnV0ZSgiZGF0YS1ob3QtaW5wdXQiLCIiKSx0aGlzLlRFWFRBUkVBLmNsYXNzTmFtZT0iaGFuZHNvbnRhYmxlSW5wdXQiLHRoaXMudGV4dGFyZWFTdHlsZT10aGlzLlRFWFRBUkVBLnN0eWxl'@;
put 'LHRoaXMudGV4dGFyZWFTdHlsZS53aWR0aD0wLHRoaXMudGV4dGFyZWFTdHlsZS5oZWlnaHQ9MCxGZCh0aGlzLlRFWFRBUkVBX1BBUkVOVCksdGhpcy5URVhUQVJFQV9QQVJFTlQuYXBwZW5kQ2hpbGQodGhpcy5URVhUQVJFQSl9fV0sW3trZXk6IkVESVRPUl9UWVBFIixnZXQ6ZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4icGFzc3dvcmQifX1dKSxhfShENSk7ZnVuY3Rpb24gTDUobCl7cmV0dXJuKEw1PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMm'@;
put 'JiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gbzJlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxl'@;
put 'PWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxCdXQoZi5rZXkpLGYpfX1mdW5jdGlvbiBCdXQobCl7dmFyIGM9ZnVuY3Rpb24ganV0KGwsYyl7aWYoIm9iamVjdCIhPT1MNShsKXx8'@;
put 'bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1MNShmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJu'@;
put 'IGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09TDUoYyk/YzpTdHJpbmcoYyl9ZnVuY3Rpb24gYkwoKXtyZXR1cm4gYkw9dHlwZW9mIFJlZmxlY3Q8InUiJiZSZWZsZWN0LmdldD9S'@;
put 'ZWZsZWN0LmdldC5iaW5kKCk6ZnVuY3Rpb24oYyxhLGYpe3ZhciBkPWZ1bmN0aW9uIHp1dChsLGMpe2Zvcig7IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsLGMpJiZudWxsIT09KGw9VjkobCkpOyk7cmV0dXJuIGx9KGMsYSk7aWYoZCl7dmFyIGg9T2JqZWN0LmdldE93'@;
put 'blByb3BlcnR5RGVzY3JpcHRvcihkLGEpO3JldHVybiBoLmdldD9oLmdldC5jYWxsKGFyZ3VtZW50cy5sZW5ndGg8Mz9jOmYpOmgudmFsdWV9fSxiTC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gZEsobCxjKXtyZXR1cm4oZEs9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5z'@;
put 'ZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZixkKXtyZXR1cm4gZi5fX3Byb3RvX189ZCxmfSkobCxjKX1mdW5jdGlvbiBWOShsKXtyZXR1cm4oVjk9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuX19w'@;
put 'cm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSl9KShsKX12YXIgaEs9Imh0X2VkaXRvcl92aXNpYmxlIixhMmU9InNlbGVjdEVkaXRvciIsS3V0PWZ1bmN0aW9uKGwpeyFmdW5jdGlvbiBVdXQobCxjKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyYmbnVsbCE9PWMpdGhyb3cgbmV3IFR5'@;
put 'cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtsLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGMmJmMucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6bCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRl'@;
put 'ZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksYyYmZEsobCxjKX0oYSxsKTt2YXIgYz1mdW5jdGlvbiBadXQobCl7dmFyIGM9ZnVuY3Rpb24gR3V0KCl7aWYodHlwZW9mIFJlZmxlY3Q+InUifHwhUmVmbGVjdC5jb25zdHJ1Y3R8fFJlZmxlY3QuY29uc3RydWN0LnNo'@;
put 'YW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sZnVuY3Rpb24oKXt9KSksITB9Y2F0Y2h7cmV0dXJuITF9fSgpO3JldHVybiBm'@;
put 'dW5jdGlvbigpe3ZhciBkLGY9VjkobCk7aWYoYyl7dmFyIGg9VjkodGhpcykuY29uc3RydWN0b3I7ZD1SZWZsZWN0LmNvbnN0cnVjdChmLGFyZ3VtZW50cyxoKX1lbHNlIGQ9Zi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uIFl1dChsLGMpe2lmKGMmJigib2JqZWN0Ij09'@;
put 'PUw1KGMpfHwiZnVuY3Rpb24iPT10eXBlb2YgYykpcmV0dXJuIGM7aWYodm9pZCAwIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbiBXdXQobCl7aWYodm9pZCAw'@;
put 'PT09bCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBsfShsKX0odGhpcyxkKX19KGEpO2Z1bmN0aW9uIGEoKXtyZXR1cm4gZnVuY3Rpb24gTnV0KGwsYyl7aWYoIShsIGlu'@;
put 'c3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsYSksYy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIGZ1bmN0aW9uIFZ1dChsLGMsYSl7YyYmbzJlKGwucHJvdG90eXBlLGMpLGEmJm8yZShsLGEpLE9i'@;
put 'amVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShhLFt7a2V5OiJpbml0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc2VsZWN0PXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJTRUxFQ1QiKSxnaSh0aGlzLnNlbGVjdCwiaHRTZWxlY3RF'@;
put 'ZGl0b3IiKSx0aGlzLnNlbGVjdC5zdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLmhvdC5yb290RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnNlbGVjdCksdGhpcy5yZWdpc3Rlckhvb2tzKCl9fSx7a2V5OiJnZXRWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3QudmFs'@;
put 'dWV9fSx7a2V5OiJzZXRWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24oZCl7dGhpcy5zZWxlY3QudmFsdWU9ZH19LHtrZXk6Im9wZW4iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fb3BlbmVkPSEwLHRoaXMucmVmcmVzaERpbWVuc2lvbnMoKSx0aGlzLnNlbGVjdC5zdHlsZS5kaXNwbGF5PSIiLHRoaXMu'@;
put 'aG90LmdldFNob3J0Y3V0TWFuYWdlcigpLnNldEFjdGl2ZUNvbnRleHROYW1lKCJlZGl0b3IiKSx0aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCl9fSx7a2V5OiJjbG9zZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9vcGVuZWQ9ITEsdGhpcy5zZWxlY3Quc3R5bGUuZGlzcGxheT0ibm9uZSIsWW8o'@;
put 'dGhpcy5zZWxlY3QsaEspJiZKbyh0aGlzLnNlbGVjdCxoSyksdGhpcy51bnJlZ2lzdGVyU2hvcnRjdXRzKCksdGhpcy5jbGVhckhvb2tzKCl9fSx7a2V5OiJmb2N1cyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdC5mb2N1cygpfX0se2tleToicmVnaXN0ZXJIb29rcyIsdmFsdWU6ZnVu'@;
put 'Y3Rpb24oKXt2YXIgZD10aGlzO3RoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHkiLGZ1bmN0aW9uKCl7cmV0dXJuIGQucmVmcmVzaERpbWVuc2lvbnMoKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IixmdW5jdGlvbigpe3JldHVybiBkLnJlZnJlc2hE'@;
put 'aW1lbnNpb25zKCl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ29sdW1uUmVzaXplIixmdW5jdGlvbigpe3JldHVybiBkLnJlZnJlc2hEaW1lbnNpb25zKCl9KSx0aGlzLmFkZEhvb2soImFmdGVyUm93UmVzaXplIixmdW5jdGlvbigpe3JldHVybiBkLnJlZnJlc2hEaW1lbnNpb25zKCl9KX19LHtr'@;
put 'ZXk6InByZXBhcmUiLHZhbHVlOmZ1bmN0aW9uKGQsaCxtLF8sTyxYKXt2YXIgYWU9dGhpcztiTChWOShhLnByb3RvdHlwZSksInByZXBhcmUiLHRoaXMpLmNhbGwodGhpcyxkLGgsbSxfLE8sWCk7dmFyIGJlLHBlPXRoaXMuY2VsbFByb3BlcnRpZXMuc2VsZWN0T3B0aW9ucztiZT10aGlzLnBy'@;
put 'ZXBhcmVPcHRpb25zKCJmdW5jdGlvbiI9PXR5cGVvZiBwZT9wZSh0aGlzLnJvdyx0aGlzLmNvbCx0aGlzLnByb3ApOnBlKSxGZCh0aGlzLnNlbGVjdCksbWEoYmUsZnVuY3Rpb24oeGUsVmUpe3ZhciBaZT1hZS5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIk9QVElPTiIpO1plLnZh'@;
put 'bHVlPVZlLHY1KFplLHhlKSxhZS5zZWxlY3QuYXBwZW5kQ2hpbGQoWmUpfSl9fSx7a2V5OiJwcmVwYXJlT3B0aW9ucyIsdmFsdWU6ZnVuY3Rpb24oZCl7dmFyIGg9e307aWYoQXJyYXkuaXNBcnJheShkKSlmb3IodmFyIG09MCxfPWQubGVuZ3RoO208XzttKyspaFtkW21dXT1kW21dO2Vsc2Ui'@;
put 'b2JqZWN0Ij09PUw1KGQpJiYoaD1kKTtyZXR1cm4gaH19LHtrZXk6InJlZnJlc2hWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXRDZWxsKHRoaXMucm93LHRoaXMucHJvcCk7dGhpcy5vcmlnaW5hbFZhbHVlPWQsdGhpcy5zZXRWYWx1ZShkKSx0'@;
put 'aGlzLnJlZnJlc2hEaW1lbnNpb25zKCl9fSx7a2V5OiJyZWZyZXNoRGltZW5zaW9ucyIsdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLnN0YXRlPT09UXUuRURJVElORyl7aWYodGhpcy5URD10aGlzLmdldEVkaXRlZENlbGwoKSwhdGhpcy5URClyZXR1cm4gdm9pZCB0aGlzLmNsb3NlKCk7dmFy'@;
put 'IGQ9dGhpcy5nZXRFZGl0ZWRDZWxsUmVjdCgpLGg9ZC50b3AsbT1kLnN0YXJ0LF89ZC53aWR0aCxYPXRoaXMuc2VsZWN0LnN0eWxlO1guaGVpZ2h0PSIiLmNvbmNhdChkLmhlaWdodCwicHgiKSxYLndpZHRoPSIiLmNvbmNhdChfLCJweCIpLFgudG9wPSIiLmNvbmNhdChoLCJweCIpLFhbdGhp'@;
put 'cy5ob3QuaXNSdGwoKT8icmlnaHQiOiJsZWZ0Il09IiIuY29uY2F0KG0sInB4IiksWC5tYXJnaW49IjBweCIsZ2kodGhpcy5zZWxlY3QsaEspfX19LHtrZXk6InJlZ2lzdGVyU2hvcnRjdXRzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXMsbT10aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFn'@;
put 'ZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKSxfPXtncm91cDphMmV9OyExIT09dGhpcy5pc0luRnVsbEVkaXRNb2RlKCkmJm0uYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJBcnJvd1VwIl1dLGNhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIFg9ZC5zZWxlY3Quc2VsZWN0ZWRJbmRleC0xO1g+PTAmJihk'@;
put 'LnNlbGVjdFtYXS5zZWxlY3RlZD0hMCl9fSx7a2V5czpbWyJBcnJvd0Rvd24iXV0sY2FsbGJhY2s6ZnVuY3Rpb24oKXt2YXIgWD1kLnNlbGVjdC5zZWxlY3RlZEluZGV4KzE7WDw9ZC5zZWxlY3QubGVuZ3RoLTEmJihkLnNlbGVjdFtYXS5zZWxlY3RlZD0hMCl9fV0sXyl9fSx7a2V5OiJ1bnJl'@;
put 'Z2lzdGVyU2hvcnRjdXRzIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoYTJlKX19XSxbe2tleToiRURJVE9SX1RZUEUiLGdldDpmdW5jdGlvbigpe3JldHVybiJzZWxlY3Qi'@;
put 'fX1dKSxhfShBOSk7ZnVuY3Rpb24gQjkobCl7cmV0dXJuKEI5PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVv'@;
put 'ZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gbDJlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEs'@;
put 'Zi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxKdXQoZi5rZXkpLGYpfX1mdW5jdGlvbiBKdXQobCl7dmFyIGM9ZnVuY3Rpb24gUXV0KGwsYyl7aWYoIm9iamVjdCIhPT1COShsKXx8bnVsbD09PWwpcmV0dXJuIGw7'@;
put 'dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1COShmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVl'@;
put 'LiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09QjkoYyk/YzpTdHJpbmcoYyl9ZnVuY3Rpb24gX0woKXtyZXR1cm4gX0w9dHlwZW9mIFJlZmxlY3Q8InUiJiZSZWZsZWN0LmdldD9SZWZsZWN0LmdldC5iaW5kKCk6'@;
put 'ZnVuY3Rpb24oYyxhLGYpe3ZhciBkPWZ1bmN0aW9uIGVjdChsLGMpe2Zvcig7IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsLGMpJiZudWxsIT09KGw9ajkobCkpOyk7cmV0dXJuIGx9KGMsYSk7aWYoZCl7dmFyIGg9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRv'@;
put 'cihkLGEpO3JldHVybiBoLmdldD9oLmdldC5jYWxsKGFyZ3VtZW50cy5sZW5ndGg8Mz9jOmYpOmgudmFsdWV9fSxfTC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gcEsobCxjKXtyZXR1cm4ocEs9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5k'@;
put 'KCk6ZnVuY3Rpb24oZixkKXtyZXR1cm4gZi5fX3Byb3RvX189ZCxmfSkobCxjKX1mdW5jdGlvbiBqOShsKXtyZXR1cm4oajk9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuX19wcm90b19ffHxPYmplY3QuZ2V0'@;
put 'UHJvdG90eXBlT2YoYSl9KShsKX12YXIgczJlPWZ1bmN0aW9uKGwpeyFmdW5jdGlvbiB0Y3QobCxjKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyYmbnVsbCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24i'@;
put 'KTtsLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGMmJmMucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6bCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksYyYmcEsobCxjKX0oYSxsKTt2'@;
put 'YXIgYz1mdW5jdGlvbiBuY3QobCl7dmFyIGM9ZnVuY3Rpb24gb2N0KCl7aWYodHlwZW9mIFJlZmxlY3Q+InUifHwhUmVmbGVjdC5jb25zdHJ1Y3R8fFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4g'@;
put 'Qm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sZnVuY3Rpb24oKXt9KSksITB9Y2F0Y2h7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciBkLGY9ajkobCk7aWYoYyl7dmFyIGg9ajkodGhpcykuY29uc3RydWN0b3I7ZD1S'@;
put 'ZWZsZWN0LmNvbnN0cnVjdChmLGFyZ3VtZW50cyxoKX1lbHNlIGQ9Zi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uIHJjdChsLGMpe2lmKGMmJigib2JqZWN0Ij09PUI5KGMpfHwiZnVuY3Rpb24iPT10eXBlb2YgYykpcmV0dXJuIGM7aWYodm9pZCAwIT09Yyl0aHJvdyBu'@;
put 'ZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbiBpY3QobCl7aWYodm9pZCAwPT09bCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQg'@;
put 'LSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBsfShsKX0odGhpcyxkKX19KGEpO2Z1bmN0aW9uIGEoKXtyZXR1cm4gZnVuY3Rpb24gcXV0KGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1'@;
put 'bmN0aW9uIil9KHRoaXMsYSksYy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIGZ1bmN0aW9uIFh1dChsLGMsYSl7YyYmbDJlKGwucHJvdG90eXBlLGMpLGEmJmwyZShsLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShhLFt7a2V5OiJw'@;
put 'cmVwYXJlIix2YWx1ZTpmdW5jdGlvbihkLGgsbSxfLE8sWCl7X0woajkoYS5wcm90b3R5cGUpLCJwcmVwYXJlIix0aGlzKS5jYWxsKHRoaXMsZCxoLG0sXyxPLFgpLHRoaXMuVEVYVEFSRUEuZGlyPSJsdHIifX1dLFt7a2V5OiJFRElUT1JfVFlQRSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuInRp'@;
put 'bWUifX1dKSxhfShENSk7ZnVuY3Rpb24gbUsobCxjLGEsZixkLGgsbSl7YmsuYXBwbHkodGhpcyxbbCxjLGEsZixkLGgsbV0pLHY1KGMsaD8/IiIsITEpfWZ1bmN0aW9uIHo5KGwsYyxhLGYsZCxoLG0pe3ZhciBfPWwucm9vdERvY3VtZW50LE89bS5hbGxvd0h0bWw/bUs6VjQsWD1fLmNyZWF0'@;
put 'ZUVsZW1lbnQoIkRJViIpO2lmKFguY2xhc3NOYW1lPSJodEF1dG9jb21wbGV0ZUFycm93IixYLmFwcGVuZENoaWxkKF8uY3JlYXRlVGV4dE5vZGUoU3RyaW5nLmZyb21DaGFyQ29kZSg5NjYwKSkpLE8uYXBwbHkodGhpcyxbbCxjLGEsZixkLGgsbV0pLGMuZmlyc3RDaGlsZHx8Yy5hcHBlbmRD'@;
put 'aGlsZChfLmNyZWF0ZVRleHROb2RlKFN0cmluZy5mcm9tQ2hhckNvZGUoMTYwKSkpLGMuaW5zZXJ0QmVmb3JlKFgsYy5maXJzdENoaWxkKSxnaShjLCJodEF1dG9jb21wbGV0ZSIpLCFsLmFjQXJyb3dMaXN0ZW5lcil7dmFyIGFlPW5ldyBmcyhsKTtsLmFjQXJyb3dMaXN0ZW5lcj1mdW5jdGlv'@;
put 'bihwZSl7WW8ocGUudGFyZ2V0LCJodEF1dG9jb21wbGV0ZUFycm93IikmJmwudmlldy5fd3QuZ2V0U2V0dGluZygib25DZWxsRGJsQ2xpY2siLG51bGwsbC5fY3JlYXRlQ2VsbENvb3JkcyhhLGYpLGMpfSxhZS5hZGRFdmVudExpc3RlbmVyKGwucm9vdEVsZW1lbnQsIm1vdXNlZG93biIsbC5h'@;
put 'Y0Fycm93TGlzdGVuZXIpLGwuYWRkSG9va09uY2UoImFmdGVyRGVzdHJveSIsZnVuY3Rpb24oKXthZS5kZXN0cm95KCl9KX19bUsuUkVOREVSRVJfVFlQRT0iaHRtbCIsejkuUkVOREVSRVJfVFlQRT0iYXV0b2NvbXBsZXRlIjt2YXIgdTJlPW5ldyBXZWFrTWFwLGMyZT1uZXcgV2Vha01hcCxj'@;
put 'Y3Q9Imh0QmFkVmFsdWUiLFU5PSJkYXRhLXJvdyIsWjk9ImRhdGEtY29sIixmY3Q9ImNoZWNrYm94UmVuZGVyZXIiO2Z1bmN0aW9uIGdLKGwsYyxhLGYsZCxoLG0pe3ZhciBfPWwucm9vdERvY3VtZW50O2JrLmFwcGx5KHRoaXMsW2wsYyxhLGYsZCxoLG1dKSxmdW5jdGlvbiBkY3QobCl7dmFy'@;
put 'IGM9YzJlLmdldChsKTtpZighYyl7dmFyIGE9bC5yb290RWxlbWVudDsoYz1uZXcgZnMobCkpLmFkZEV2ZW50TGlzdGVuZXIoYSwiY2xpY2siLGZ1bmN0aW9uKGYpe3JldHVybiBmdW5jdGlvbiBnY3QobCxjKXt2YXIgYT1sLnRhcmdldDtpZih2SyhhKSYmYS5oYXNBdHRyaWJ1dGUoVTkpJiZh'@;
put 'Lmhhc0F0dHJpYnV0ZShaOSkpe3ZhciBmPXBhcnNlSW50KGEuZ2V0QXR0cmlidXRlKFU5KSwxMCksZD1wYXJzZUludChhLmdldEF0dHJpYnV0ZShaOSksMTApO2MuZ2V0Q2VsbE1ldGEoZixkKS5yZWFkT25seSYmbC5wcmV2ZW50RGVmYXVsdCgpfX0oZixsKX0pLGMuYWRkRXZlbnRMaXN0ZW5l'@;
put 'cihhLCJtb3VzZXVwIixmdW5jdGlvbihmKXtyZXR1cm4gZnVuY3Rpb24gbWN0KGwsYyl7dmFyIGE9bC50YXJnZXQ7dksoYSkmJighYS5oYXNBdHRyaWJ1dGUoVTkpfHwhYS5oYXNBdHRyaWJ1dGUoWjkpfHxzZXRUaW1lb3V0KGMubGlzdGVuLDEwKSl9KGYsbCl9KSxjLmFkZEV2ZW50TGlzdGVu'@;
put 'ZXIoYSwiY2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZnVuY3Rpb24gdmN0KGwsYyl7dmFyIGE9bC50YXJnZXQ7aWYodksoYSkmJmEuaGFzQXR0cmlidXRlKFU5KSYmYS5oYXNBdHRyaWJ1dGUoWjkpKXt2YXIgZj1wYXJzZUludChhLmdldEF0dHJpYnV0ZShVOSksMTApLGQ9cGFyc2VJbnQo'@;
put 'YS5nZXRBdHRyaWJ1dGUoWjkpLDEwKSxoPWMuZ2V0Q2VsbE1ldGEoZixkKTtoLnJlYWRPbmx5fHxjLnNldERhdGFBdENlbGwoZixkLGwudGFyZ2V0LmNoZWNrZWQ/dm9pZCAwPT09aC51bmNoZWNrZWRUZW1wbGF0ZXx8aC5jaGVja2VkVGVtcGxhdGU6dm9pZCAwIT09aC51bmNoZWNrZWRUZW1w'@;
put 'bGF0ZSYmaC51bmNoZWNrZWRUZW1wbGF0ZSl9fShmLGwpfSksYzJlLnNldChsLGMpfX0obCk7dmFyIE89ZnVuY3Rpb24gaGN0KGwpe3ZhciBjPWwuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtyZXR1cm4gYy5jbGFzc05hbWU9Imh0Q2hlY2tib3hSZW5kZXJlcklucHV0IixjLnR5cGU9ImNoZWNr'@;
put 'Ym94IixjLnNldEF0dHJpYnV0ZSgiYXV0b2NvbXBsZXRlIiwib2ZmIiksYy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSxjLmNsb25lTm9kZSghMSl9KF8pLFg9bS5sYWJlbCxhZT0hMTtpZih0eXBlb2YgbS5jaGVja2VkVGVtcGxhdGU+InUiJiYobS5jaGVja2VkVGVtcGxhdGU9ITAp'@;
put 'LHR5cGVvZiBtLnVuY2hlY2tlZFRlbXBsYXRlPiJ1IiYmKG0udW5jaGVja2VkVGVtcGxhdGU9ITEpLEZkKGMpLGg9PT1tLmNoZWNrZWRUZW1wbGF0ZXx8TXMoaCkudG9Mb2NhbGVMb3dlckNhc2UobS5sb2NhbGUpPT09TXMobS5jaGVja2VkVGVtcGxhdGUpLnRvTG9jYWxlTG93ZXJDYXNlKG0u'@;
put 'bG9jYWxlKT9PLmNoZWNrZWQ9ITA6aD09PW0udW5jaGVja2VkVGVtcGxhdGV8fE1zKGgpLnRvTG9jYWxlTG93ZXJDYXNlKG0ubG9jYWxlKT09PU1zKG0udW5jaGVja2VkVGVtcGxhdGUpLnRvTG9jYWxlTG93ZXJDYXNlKG0ubG9jYWxlKT9PLmNoZWNrZWQ9ITE6d3UoaCk/Z2koTywibm9WYWx1'@;
put 'ZSIpOihPLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGdpKE8sY2N0KSxhZT0hMCksTy5zZXRBdHRyaWJ1dGUoVTksYSksTy5zZXRBdHRyaWJ1dGUoWjksZiksIWFlJiZYKXt2YXIgcGU9IiI7aWYoWC52YWx1ZSlwZT0iZnVuY3Rpb24iPT10eXBlb2YgWC52YWx1ZT9YLnZhbHVlLmNhbGwodGhpcyxh'@;
put 'LGYsZCxoKTpYLnZhbHVlO2Vsc2UgaWYoWC5wcm9wZXJ0eSl7dmFyIGJlPWwuZ2V0RGF0YUF0Um93UHJvcChhLFgucHJvcGVydHkpO3BlPW51bGwhPT1iZT9iZToiIn12YXIgeGU9ZnVuY3Rpb24gcGN0KGwsYyxhKXt2YXIgZj1sLmNyZWF0ZUVsZW1lbnQoImxhYmVsIik7cmV0dXJuIGYuY2xh'@;
put 'c3NOYW1lPSJodENoZWNrYm94UmVuZGVyZXJMYWJlbCAiLmNvbmNhdChhPyJmdWxsV2lkdGgiOiIiKSxmLmFwcGVuZENoaWxkKGwuY3JlYXRlVGV4dE5vZGUoYykpLGYuY2xvbmVOb2RlKCEwKX0oXyxwZSwhMCE9PVguc2VwYXJhdGVkKTsiYmVmb3JlIj09PVgucG9zaXRpb24/WC5zZXBhcmF0'@;
put 'ZWQ/KGMuYXBwZW5kQ2hpbGQoeGUpLGMuYXBwZW5kQ2hpbGQoTykpOih4ZS5hcHBlbmRDaGlsZChPKSxPPXhlKTooIVgucG9zaXRpb258fCJhZnRlciI9PT1YLnBvc2l0aW9uKSYmKFguc2VwYXJhdGVkPyhjLmFwcGVuZENoaWxkKE8pLGMuYXBwZW5kQ2hpbGQoeGUpKTooeGUuaW5zZXJ0QmVm'@;
put 'b3JlKE8seGUuZmlyc3RDaGlsZCksTz14ZSkpfWZ1bmN0aW9uIFplKCl7dmFyIGR0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0sZ3Q9bC5nZXRTZWxlY3RlZFJhbmdlKCk7aWYoZ3QpZm9yKHZhciBqdD0wO2p0PGd0Lmxlbmd0aDtqdCsr'@;
put 'KXtmb3IodmFyIHJuPWd0W2p0XS5nZXRUb3BTdGFydENvcm5lcigpLFh0PXJuLnJvdyx5bj1ybi5jb2wsUW49Z3RbanRdLmdldEJvdHRvbUVuZENvcm5lcigpLE9yPVFuLnJvdyxWcj1Rbi5jb2wsWnI9W10saXI9WHQ7aXI8PU9yO2lyKz0xKWZvcih2YXIgc2k9eW47c2k8PVZyO3NpKz0xKXt2'@;
put 'YXIgQXI9bC5nZXRDZWxsTWV0YShpcixzaSk7aWYoImNoZWNrYm94IiE9PUFyLnR5cGUpcmV0dXJuO2lmKCEwIT09QXIucmVhZE9ubHkpe3R5cGVvZiBBci5jaGVja2VkVGVtcGxhdGU+InUiJiYoQXIuY2hlY2tlZFRlbXBsYXRlPSEwKSx0eXBlb2YgQXIudW5jaGVja2VkVGVtcGxhdGU+InUi'@;
put 'JiYoQXIudW5jaGVja2VkVGVtcGxhdGU9ITEpO3ZhciBFbj1sLmdldERhdGFBdENlbGwoaXIsc2kpOyExPT09ZHQ/W0FyLmNoZWNrZWRUZW1wbGF0ZSxBci5jaGVja2VkVGVtcGxhdGUudG9TdHJpbmcoKV0uaW5jbHVkZXMoRW4pP1pyLnB1c2goW2lyLHNpLEFyLnVuY2hlY2tlZFRlbXBsYXRl'@;
put 'XSk6W0FyLnVuY2hlY2tlZFRlbXBsYXRlLEFyLnVuY2hlY2tlZFRlbXBsYXRlLnRvU3RyaW5nKCksbnVsbCx2b2lkIDBdLmluY2x1ZGVzKEVuKSYmWnIucHVzaChbaXIsc2ksQXIuY2hlY2tlZFRlbXBsYXRlXSk6WnIucHVzaChbaXIsc2ksQXIudW5jaGVja2VkVGVtcGxhdGVdKX19WnIubGVu'@;
put 'Z3RoPjAmJmwuc2V0RGF0YUF0Q2VsbChacil9fWZ1bmN0aW9uIGx0KCl7dmFyIGR0PWwuZ2V0U2VsZWN0ZWRSYW5nZSgpO2lmKGR0KXtmb3IodmFyIGd0PTA7Z3Q8ZHQubGVuZ3RoO2d0KyspZm9yKHZhciBqdD1kdFtndF0uZ2V0VG9wU3RhcnRDb3JuZXIoKSxybj1kdFtndF0uZ2V0Qm90dG9t'@;
put 'RW5kQ29ybmVyKCksWHQ9anQucm93O1h0PD1ybi5yb3c7WHQrKylmb3IodmFyIHluPWp0LmNvbDt5bjw9cm4uY29sO3luKyspe3ZhciBRbj1sLmdldENlbGxNZXRhKFh0LHluKTtpZigiY2hlY2tib3giIT09UW4udHlwZSlyZXR1cm4hMTt2YXIgT3I9bC5nZXRDZWxsKFh0LHluKTtpZihudWxs'@;
put 'PT1PcilyZXR1cm4hMDtpZihPci5xdWVyeVNlbGVjdG9yQWxsKCJpbnB1dFt0eXBlPWNoZWNrYm94XSIpLmxlbmd0aD4wJiYhUW4ucmVhZE9ubHkpcmV0dXJuITB9cmV0dXJuITF9fSghWHx8WCYmIVguc2VwYXJhdGVkKSYmYy5hcHBlbmRDaGlsZChPKSxhZSYmYy5hcHBlbmRDaGlsZChfLmNy'@;
put 'ZWF0ZVRleHROb2RlKCIjYmFkLXZhbHVlIyIpKSx1MmUuaGFzKGwpfHwodTJlLnNldChsLCEwKSxmdW5jdGlvbiBWZSgpe2wuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNob3J0Y3V0cyhbe2tleXM6W1sic3BhY2UiXV0sY2FsbGJhY2s6ZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gWmUoKSwhbHQoKX19LHtrZXlzOltbImVudGVyIl1dLGNhbGxiYWNrOmZ1bmN0aW9uKCl7cmV0dXJuIFplKCksIWx0KCl9LHJ1bk9ubHlJZjpmdW5jdGlvbigpe3JldHVybiBsLmdldFNldHRpbmdzKCkuZW50ZXJCZWdpbnNFZGl0aW5nfX0se2tleXM6W1siZGVsZXRlIl0sWyJiYWNr'@;
put 'c3BhY2UiXV0sY2FsbGJhY2s6ZnVuY3Rpb24oKXtyZXR1cm4gWmUoITApLCFsdCgpfSxyZWxhdGl2ZVRvR3JvdXA6UVMscG9zaXRpb246ImJlZm9yZSJ9XSx7Z3JvdXA6ZmN0fSl9KCkpfWZ1bmN0aW9uIHZLKGwpe3JldHVybiJJTlBVVCI9PT1sLnRhZ05hbWUmJiJjaGVja2JveCI9PT1sLmdl'@;
put 'dEF0dHJpYnV0ZSgidHlwZSIpfXVvLmdldFNpbmdsZXRvbigpLmFkZCgibW9kaWZ5QXV0b0NvbHVtblNpemVTZWVkIixmdW5jdGlvbihsLGMsYSl7dmFyIGY9Yy5sYWJlbCxoPWMucm93O2lmKCJjaGVja2JveCI9PT1jLnR5cGUpe2lmKGYpe3ZhciBPPWYudmFsdWUsWD1mLnByb3BlcnR5LGFl'@;
put 'PWE7aWYoTylhZT0iZnVuY3Rpb24iPT10eXBlb2YgTz9PKGgsYy5jb2x1bW4sYy5wcm9wLGEpOk87ZWxzZSBpZihYKXt2YXIgcGU9dGhpcy5nZXREYXRhQXRSb3dQcm9wKGgsWCk7YWU9bnVsbCE9PXBlP3BlOmF9bD1hZX1yZXR1cm4gbH19KSxnSy5SRU5ERVJFUl9UWVBFPSJjaGVja2JveCI7'@;
put 'dmFyIFA1PVQoNDU5OTYpO2Z1bmN0aW9uIHlLKGwsYyxhLGYsZCxoLG0pe3ZhciBfPWg7aWYodDAoXykpe3ZhciBPPW0ubnVtZXJpY0Zvcm1hdCxYPU8mJk8uY3VsdHVyZXx8Ii0iLGFlPU8mJk8ucGF0dGVybixwZT1tLmNsYXNzTmFtZXx8IiIsYmU9cGUubGVuZ3RoP3BlLnNwbGl0KCIgIik6'@;
put 'W107aWYodHlwZW9mIFg8InUiJiYhUDUubGFuZ3VhZ2VzKClbWF0pe3ZhciB4ZT1YLnJlcGxhY2UoIi0iLCIiKSxWZT1QNS5hbGxMYW5ndWFnZXM/UDUuYWxsTGFuZ3VhZ2VzW1hdOlA1W3hlXTtWZSYmUDUucmVnaXN0ZXJMYW5ndWFnZShWZSl9UDUuc2V0TGFuZ3VhZ2UoWCksXz1QNShfKS5m'@;
put 'b3JtYXQoYWV8fCIwIiksYmUuaW5kZXhPZigiaHRMZWZ0Iik8MCYmYmUuaW5kZXhPZigiaHRDZW50ZXIiKTwwJiZiZS5pbmRleE9mKCJodFJpZ2h0Iik8MCYmYmUuaW5kZXhPZigiaHRKdXN0aWZ5Iik8MCYmYmUucHVzaCgiaHRSaWdodCIpLGJlLmluZGV4T2YoImh0TnVtZXJpYyIpPDAmJmJl'@;
put 'LnB1c2goImh0TnVtZXJpYyIpLG0uY2xhc3NOYW1lPWJlLmpvaW4oIiAiKSxjLmRpcj0ibHRyIn1WNChsLGMsYSxmLGQsXyxtKX1mdW5jdGlvbiBiSyhsLGMsYSxmLGQsaCxtKXtWNC5hcHBseSh0aGlzLFtsLGMsYSxmLGQsaCxtXSk7dmFyIE89bS5oYXNoU3ltYm9sfHwiKiIsWD0iIjtfbygo'@;
put 'bS5oYXNoTGVuZ3RofHxjLmlubmVySFRNTC5sZW5ndGgpLTEsZnVuY3Rpb24oKXtYKz1PfSksdjUoYyxYKX1mdW5jdGlvbiBfSyhsLGMsYSxmLGQsaCxtKXtWNC5hcHBseSh0aGlzLFtsLGMsYSxmLGQsaCxtXSksYy5kaXI9Imx0ciJ9ZnVuY3Rpb24gX2sobCxjKXt2YXIgYT1sO251bGw9PWEm'@;
put 'JihhPSIiKSx0aGlzLmFsbG93RW1wdHkmJiIiPT09YT9jKCEwKTp0aGlzLnN0cmljdCYmdGhpcy5zb3VyY2U/ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuc291cmNlP3RoaXMuc291cmNlKGEsZDJlKGEsYykpOmQyZShhLGMpKHRoaXMuc291cmNlKTpjKCEwKX1mdW5jdGlvbiBkMmUobCxjKXt2'@;
put 'YXIgYT1sO3JldHVybiBmdW5jdGlvbihmKXtmb3IodmFyIGQ9ITEsaD0wLG09Zi5sZW5ndGg7aDxtO2grKylpZihhPT09ZltoXSl7ZD0hMDticmVha31jKGQpfX1mdW5jdGlvbiBoMmUobCl7dmFyIGM9bmV3IERhdGUobCk7cmV0dXJuIGlzTmFOKG5ldyBEYXRlKCIiLmNvbmNhdChsLCJUMDA6'@;
put 'MDAiKSkuZ2V0RGF0ZSgpKT9jOm5ldyBEYXRlKGMuZ2V0VGltZSgpKzZlNCpjLmdldFRpbWV6b25lT2Zmc2V0KCkpfWZ1bmN0aW9uIHdMKGwsYyl7dmFyIGE9TDBlKFhoZSx0aGlzLmluc3RhbmNlKSxmPWwsZD0hMDtudWxsPT1mJiYoZj0iIik7dmFyIGg9S28oZix0aGlzLmRhdGVGb3JtYXR8'@;
put 'fGEuZGVmYXVsdERhdGVGb3JtYXQsITApLmlzVmFsaWQoKSxtPUtvKG5ldyBEYXRlKGYpKS5pc1ZhbGlkKCl8fGg7aWYodGhpcy5hbGxvd0VtcHR5JiYiIj09PWYmJihtPSEwLGg9ITApLG18fChkPSExKSwhbSYmaCYmKGQ9ITApLG0mJiFoKWlmKCEwPT09dGhpcy5jb3JyZWN0Rm9ybWF0KXt2'@;
put 'YXIgXz1mdW5jdGlvbiBNY3QobCxjKXt2YXIgYT1LbyhoMmUobCkpLGY9S28obCxjKSxkPWwuc2VhcmNoKC9bQS16XS9nKT4tMTtyZXR1cm4oYS5pc1ZhbGlkKCkmJmEuZm9ybWF0KCJ4Iik9PT1mLmZvcm1hdCgieCIpfHwhZi5pc1ZhbGlkKCl8fGQ/YTpmKS5mb3JtYXQoYyl9KGYsdGhpcy5k'@;
put 'YXRlRm9ybWF0KSxPPXRoaXMuaW5zdGFuY2UudG9WaXN1YWxSb3codGhpcy5yb3cpLFg9dGhpcy5pbnN0YW5jZS50b1Zpc3VhbENvbHVtbih0aGlzLmNvbCk7dGhpcy5pbnN0YW5jZS5zZXREYXRhQXRDZWxsKE8sWCxfLCJkYXRlVmFsaWRhdG9yIiksZD0hMH1lbHNlIGQ9ITE7YyhkKX1mdW5j'@;
put 'dGlvbiB3SyhsLGMpe3ZhciBhPWw7bnVsbD09YSYmKGE9IiIpLGMoISghdGhpcy5hbGxvd0VtcHR5fHwiIiE9PWEpfHwiIiE9PWEmJnQwKGwpKX15Sy5SRU5ERVJFUl9UWVBFPSJudW1lcmljIixiSy5SRU5ERVJFUl9UWVBFPSJwYXNzd29yZCIsX0suUkVOREVSRVJfVFlQRT0idGltZSIsX2su'@;
put 'VkFMSURBVE9SX1RZUEU9ImF1dG9jb21wbGV0ZSIsVCg3Nzk0KSx3TC5WQUxJREFUT1JfVFlQRT0iZGF0ZSIsd0suVkFMSURBVE9SX1RZUEU9Im51bWVyaWMiO3ZhciBFY3Q9WyJZWVlZLU1NLUREVEhIOm1tOnNzLlNTU1oiLCJYIiwieCJdO2Z1bmN0aW9uIENMKGwsYyl7dmFyIGE9dGhpcy50'@;
put 'aW1lRm9ybWF0fHwiaDptbTpzcyBhIixmPSEwLGQ9bDtudWxsPT09ZCYmKGQ9IiIpLGQ9L15cZHszLH0kLy50ZXN0KGQpP3BhcnNlSW50KGQsMTApOmQ7dmFyIGg9L15cZHsxLDJ9JC8udGVzdChkKTtoJiYoZCs9IjowMCIpO3ZhciBtPUtvKGQsRWN0LCEwKS5pc1ZhbGlkKCk/S28oZCk6S28o'@;
put 'ZCxhKSxfPW0uaXNWYWxpZCgpLE89S28oZCxhLCEwKS5pc1ZhbGlkKCkmJiFoO2lmKHRoaXMuYWxsb3dFbXB0eSYmIiI9PT1kJiYoXz0hMCxPPSEwKSxffHwoZj0hMSksIV8mJk8mJihmPSEwKSxfJiYhTylpZighMD09PXRoaXMuY29ycmVjdEZvcm1hdCl7dmFyIFg9bS5mb3JtYXQoYSksYWU9'@;
put 'dGhpcy5pbnN0YW5jZS50b1Zpc3VhbFJvdyh0aGlzLnJvdykscGU9dGhpcy5pbnN0YW5jZS50b1Zpc3VhbENvbHVtbih0aGlzLmNvbCk7dGhpcy5pbnN0YW5jZS5zZXREYXRhQXRDZWxsKGFlLHBlLFgsInRpbWVWYWxpZGF0b3IiKSxmPSEwfWVsc2UgZj0hMTtjKGYpfUNMLlZBTElEQVRPUl9U'@;
put 'WVBFPSJ0aW1lIjt2YXIgT2N0PXtDRUxMX1RZUEU6ImF1dG9jb21wbGV0ZSIsZWRpdG9yOm9LLHJlbmRlcmVyOno5LHZhbGlkYXRvcjpfa30sSWN0PXtDRUxMX1RZUEU6ImNoZWNrYm94IixlZGl0b3I6JGhlLHJlbmRlcmVyOmdLfSxMY3Q9e0NFTExfVFlQRToiZGF0ZSIsZWRpdG9yOlFoZSxy'@;
put 'ZW5kZXJlcjp6OSx2YWxpZGF0b3I6d0x9LEZjdD17Q0VMTF9UWVBFOiJkcm9wZG93biIsZWRpdG9yOnVLLHJlbmRlcmVyOno5LHZhbGlkYXRvcjpfa30sTmN0PXtDRUxMX1RZUEU6ImhhbmRzb250YWJsZSIsZWRpdG9yOnRLLHJlbmRlcmVyOno5fSxCY3Q9e0NFTExfVFlQRToibnVtZXJpYyIs'@;
put 'ZWRpdG9yOm4yZSxyZW5kZXJlcjp5Syx2YWxpZGF0b3I6d0ssZGF0YVR5cGU6Im51bWJlciJ9LHpjdD17Q0VMTF9UWVBFOiJwYXNzd29yZCIsZWRpdG9yOmkyZSxyZW5kZXJlcjpiSyxjb3B5YWJsZTohMX0sWmN0PXtDRUxMX1RZUEU6InRpbWUiLGVkaXRvcjpzMmUscmVuZGVyZXI6X0ssdmFs'@;
put 'aWRhdG9yOkNMfTtmdW5jdGlvbiB3ayhsKXtyZXR1cm4od2s9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9m'@;
put 'IFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiBwMmUobCxjKXsobnVsbD09Y3x8Yz5sLmxlbmd0aCkmJihjPWwubGVuZ3RoKTtmb3IodmFyIGE9MCxmPW5ldyBBcnJheShjKTthPGM7YSsr'@;
put 'KWZbYV09bFthXTtyZXR1cm4gZn1mdW5jdGlvbiBtMmUobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZp'@;
put 'bmVQcm9wZXJ0eShsLFFjdChmLmtleSksZil9fWZ1bmN0aW9uIFFjdChsKXt2YXIgYz1mdW5jdGlvbiBlMHQobCxjKXtpZigib2JqZWN0IiE9PXdrKGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9YS5jYWxsKGws'@;
put 'Y3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PXdrKGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3RyaW5nIik7cmV0'@;
put 'dXJuInN5bWJvbCI9PT13ayhjKT9jOlN0cmluZyhjKX1UKDM4MTgzKTt2YXIgZzJlPW5ldyBNYXAoW1sicGx1Z2luIixmdW5jdGlvbiBaJGUobCl7cmV0dXJuISFlTShsKX1dLFsiY2VsbC10eXBlIixuaGVdLFsiZWRpdG9yIixSMGVdLFsicmVuZGVyZXIiLHEwZV0sWyJ2YWxpZGF0b3IiLFgw'@;
put 'ZV1dKSxGNT1uZXcgV2Vha01hcCxDSz1bXSxVaD1udWxsLHYyZT1uZXcgV2Vha1NldCxHYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGwoYyl7dmFyIGE9dGhpczsoZnVuY3Rpb24gWGN0KGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBj'@;
put 'bGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLGwpLGZ1bmN0aW9uIHQwdChsLGMpeyhmdW5jdGlvbiBuMHQobCxjKXtpZihjLmhhcyhsKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIp'@;
put 'fSkobCxjKSxjLmFkZChsKX0odGhpcyx2MmUpLEhoKHRoaXMsImhvdCIsYyx7d3JpdGFibGU6ITF9KSxGNS5zZXQodGhpcyx7aG9va3M6e319KSxVaD1udWxsLHRoaXMucGx1Z2luTmFtZT1udWxsLHRoaXMucGx1Z2luc0luaXRpYWxpemVkQ2FsbGJhY2tzPVtdLHRoaXMuaXNQbHVnaW5zUmVh'@;
put 'ZHk9ITEsdGhpcy5lbmFibGVkPSExLHRoaXMuaW5pdGlhbGl6ZWQ9ITEsdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGEub25BZnRlclBsdWdpbnNJbml0aWFsaXplZCgpfSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJVcGRhdGVT'@;
put 'ZXR0aW5ncyIsZnVuY3Rpb24oZil7cmV0dXJuIGEub25VcGRhdGVTZXR0aW5ncyhmKX0pLHRoaXMuaG90LmFkZEhvb2soImJlZm9yZUluaXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGEuaW5pdCgpfSl9cmV0dXJuIGZ1bmN0aW9uIEpjdChsLGMsYSl7YyYmbTJlKGwucHJvdG90eXBlLGMpLGEmJm0y'@;
put 'ZShsLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShsLFt7a2V5OiJpbml0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXM7dGhpcy5wbHVnaW5OYW1lPXRoaXMuaG90LmdldFBsdWdpbk5hbWUodGhpcyk7dmFyIGY9dGhpcy5jb25zdHJ1'@;
put 'Y3Rvci5QTFVHSU5fREVQUyxkPUFycmF5LmlzQXJyYXkoZik/ZjpbXTtpZihkLmxlbmd0aD4wKXt2YXIgaD1bXTtpZihkLmZvckVhY2goZnVuY3Rpb24oWCl7dmFyIHBlPWZ1bmN0aW9uIFdjdChsLGMpe3JldHVybiBmdW5jdGlvbiBxY3QobCl7aWYoQXJyYXkuaXNBcnJheShsKSlyZXR1cm4g'@;
put 'bH0obCl8fGZ1bmN0aW9uIEtjdChsLGMpe3ZhciBhPW51bGw9PWw/bnVsbDp0eXBlb2YgU3ltYm9sPCJ1IiYmbFtTeW1ib2wuaXRlcmF0b3JdfHxsWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9YSl7dmFyIGYsZCxoLG0sXz1bXSxPPSEwLFg9ITE7dHJ5e2lmKGg9KGE9YS5jYWxsKGwpKS5uZXh0'@;
put 'LDA9PT1jKXtpZihPYmplY3QoYSkhPT1hKXJldHVybjtPPSExfWVsc2UgZm9yKDshKE89KGY9aC5jYWxsKGEpKS5kb25lKSYmKF8ucHVzaChmLnZhbHVlKSxfLmxlbmd0aCE9PWMpO089ITApO31jYXRjaChhZSl7WD0hMCxkPWFlfWZpbmFsbHl7dHJ5e2lmKCFPJiZudWxsIT1hLnJldHVybiYm'@;
put 'KG09YS5yZXR1cm4oKSxPYmplY3QobSkhPT1tKSlyZXR1cm59ZmluYWxseXtpZihYKXRocm93IGR9fXJldHVybiBffX0obCxjKXx8ZnVuY3Rpb24gJGN0KGwsYyl7aWYobCl7aWYoInN0cmluZyI9PXR5cGVvZiBsKXJldHVybiBwMmUobCxjKTt2YXIgYT1PYmplY3QucHJvdG90eXBlLnRvU3Ry'@;
put 'aW5nLmNhbGwobCkuc2xpY2UoOCwtMSk7aWYoIk9iamVjdCI9PT1hJiZsLmNvbnN0cnVjdG9yJiYoYT1sLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09YXx8IlNldCI9PT1hKXJldHVybiBBcnJheS5mcm9tKGwpO2lmKCJBcmd1bWVudHMiPT09YXx8L14oPzpVaXxJKW50KD86OHwxNnwzMiko'@;
put 'PzpDbGFtcGVkKT9BcnJheSQvLnRlc3QoYSkpcmV0dXJuIHAyZShsLGMpfX0obCxjKXx8ZnVuY3Rpb24gR2N0KCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxl'@;
put 'LCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX0oWC5zcGxpdCgiOiIpLDIpLGJlPXBlWzBdLHhlPXBlWzFdO2lmKCFnMmUuaGFzKGJlKSl0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gcGx1Z2luIGRlcGVuZGVuY3kgdHlwZSAi'@;
put 'Jy5jb25jYXQoYmUsJyIgd2FzIGZvdW5kLicpKTtnMmUuZ2V0KGJlKSh4ZSl8fGgucHVzaCgiIC0gIi5jb25jYXQoeGUsIiAoIikuY29uY2F0KGJlLCIpIikpfSksaC5sZW5ndGg+MCl7dmFyIG09WyJUaGUgIi5jb25jYXQodGhpcy5wbHVnaW5OYW1lLCIgcGx1Z2luIHJlcXVpcmVzIHRoZSBm'@;
put 'b2xsb3dpbmcgbW9kdWxlczpcbiIpLCIiLmNvbmNhdChoLmpvaW4oIlxuIiksIlxuIildLmpvaW4oIiIpO0NLLnB1c2gobSl9fWlmKFVofHwoVWg9UVkoKSksVWguaW5kZXhPZigiVW5kb1JlZG8iKT49MCYmVWguc3BsaWNlKFVoLmluZGV4T2YoIlVuZG9SZWRvIiksMSksVWguaW5kZXhPZih0'@;
put 'aGlzLnBsdWdpbk5hbWUpPj0wJiZVaC5zcGxpY2UoVWguaW5kZXhPZih0aGlzLnBsdWdpbk5hbWUpLDEpLHRoaXMuaG90LmFkZEhvb2tPbmNlKCJhZnRlclBsdWdpbnNJbml0aWFsaXplZCIsZnVuY3Rpb24oKXthLmlzRW5hYmxlZCYmYS5pc0VuYWJsZWQoKSYmYS5lbmFibGVQbHVnaW4oKX0p'@;
put 'LDA9PT1VaC5sZW5ndGgpe2lmKENLLmxlbmd0aD4wKXt2YXIgTz1bIiIuY29uY2F0KENLLmpvaW4oIlxuIiksIlxuIiksIllvdSBoYXZlIHRvIGltcG9ydCBhbmQgcmVnaXN0ZXIgdGhlbSBtYW51YWxseS4iXS5qb2luKCIiKTt0aHJvdyBuZXcgRXJyb3IoTyl9dGhpcy5ob3QucnVuSG9va3Mo'@;
put 'ImFmdGVyUGx1Z2luc0luaXRpYWxpemVkIil9dGhpcy5pbml0aWFsaXplZD0hMH19LHtrZXk6ImVuYWJsZVBsdWdpbiIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmVuYWJsZWQ9ITB9fSx7a2V5OiJkaXNhYmxlUGx1Z2luIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZXZlbnRNYW5hZ2VyJiZ0aGlz'@;
put 'LmV2ZW50TWFuYWdlci5jbGVhcigpLHRoaXMuY2xlYXJIb29rcygpLHRoaXMuZW5hYmxlZD0hMX19LHtrZXk6ImFkZEhvb2siLHZhbHVlOmZ1bmN0aW9uKGEsZil7RjUuZ2V0KHRoaXMpLmhvb2tzW2FdPUY1LmdldCh0aGlzKS5ob29rc1thXXx8W107dmFyIGQ9RjUuZ2V0KHRoaXMpLmhvb2tz'@;
put 'W2FdO3RoaXMuaG90LmFkZEhvb2soYSxmKSxkLnB1c2goZiksRjUuZ2V0KHRoaXMpLmhvb2tzW2FdPWR9fSx7a2V5OiJyZW1vdmVIb29rcyIsdmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGY9dGhpcztSbihGNS5nZXQodGhpcykuaG9va3NbYV18fFtdLGZ1bmN0aW9uKGQpe2YuaG90LnJlbW92ZUhv'@;
put 'b2soYSxkKX0pfX0se2tleToiY2xlYXJIb29rcyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGY9RjUuZ2V0KHRoaXMpLmhvb2tzO21hKGYsZnVuY3Rpb24oZCxoKXtyZXR1cm4gYS5yZW1vdmVIb29rcyhoKX0pLGYubGVuZ3RoPTB9fSx7a2V5OiJjYWxsT25QbHVnaW5zUmVhZHkiLHZh'@;
put 'bHVlOmZ1bmN0aW9uKGEpe3RoaXMuaXNQbHVnaW5zUmVhZHk/YSgpOnRoaXMucGx1Z2luc0luaXRpYWxpemVkQ2FsbGJhY2tzLnB1c2goYSl9fSx7a2V5OiJvbkFmdGVyUGx1Z2luc0luaXRpYWxpemVkIix2YWx1ZTpmdW5jdGlvbigpe1JuKHRoaXMucGx1Z2luc0luaXRpYWxpemVkQ2FsbGJh'@;
put 'Y2tzLGZ1bmN0aW9uKGEpe3JldHVybiBhKCl9KSx0aGlzLnBsdWdpbnNJbml0aWFsaXplZENhbGxiYWNrcy5sZW5ndGg9MCx0aGlzLmlzUGx1Z2luc1JlYWR5PSEwfX0se2tleToib25VcGRhdGVTZXR0aW5ncyIsdmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGY9ZnVuY3Rpb24gcjB0KGwsYyxhKXtp'@;
put 'ZighYy5oYXMobCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBhfSh0aGlzLHYyZSxvMHQpLmNhbGwodGhpcyxhKTt0aGlzLmlzRW5hYmxlZCYmKHRoaXMuZW5hYmxlZCYmIXRoaXMuaXNFbmFibGVk'@;
put 'KCkmJnRoaXMuZGlzYWJsZVBsdWdpbigpLCF0aGlzLmVuYWJsZWQmJnRoaXMuaXNFbmFibGVkKCkmJnRoaXMuZW5hYmxlUGx1Z2luKCksdGhpcy5lbmFibGVkJiZ0aGlzLmlzRW5hYmxlZCgpJiZmJiZ0aGlzLnVwZGF0ZVBsdWdpbihhKSl9fSx7a2V5OiJ1cGRhdGVQbHVnaW4iLHZhbHVlOmZ1'@;
put 'bmN0aW9uKCl7fX0se2tleToiZGVzdHJveSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzO3RoaXMuZXZlbnRNYW5hZ2VyJiZ0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCksdGhpcy5jbGVhckhvb2tzKCksbWEodGhpcyxmdW5jdGlvbihmLGQpeyJob3QiIT09ZCYmKGFbZF09bnVsbCl9'@;
put 'KSxkZWxldGUgdGhpcy50LGRlbGV0ZSB0aGlzLmhvdH19XSxbe2tleToiUExVR0lOX0tFWSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuImJhc2UifX0se2tleToiU0VUVElOR19LRVlTIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy5QTFVHSU5fS0VZXX19XSksbH0oKTtmdW5jdGlvbiBvMHQo'@;
put 'bCl7aWYoIWwpcmV0dXJuITE7dmFyIGM9dGhpcy5jb25zdHJ1Y3Rvci5TRVRUSU5HX0tFWVM7aWYoImJvb2xlYW4iPT10eXBlb2YgYylyZXR1cm4gYztmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKylpZih2b2lkIDAhPT1sW2NbYV1dKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIENrKGwp'@;
put 'e3JldHVybihDaz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09'@;
put 'U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIHkyZShsLGMpeyhudWxsPT1jfHxjPmwubGVuZ3RoKSYmKGM9bC5sZW5ndGgpO2Zvcih2YXIgYT0wLGY9bmV3IEFycmF5KGMpO2E8YzthKyspZlthXT1sW2FdO3JldHVybiBmfWZ1bmN0'@;
put 'aW9uIGIyZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsaDB0KGYua2V5KSxm'@;
put 'KX19ZnVuY3Rpb24gaDB0KGwpe3ZhciBjPWZ1bmN0aW9uIHAwdChsLGMpe2lmKCJvYmplY3QiIT09Q2sobCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3Qi'@;
put 'IT09Q2soZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PUNrKGMpP2M6U3Ry'@;
put 'aW5nKGMpfXZhciBtMHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKGMpeyhmdW5jdGlvbiBmMHQobCxjKXtpZighKGwgaW5zdGFuY2VvZiBjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsbCksdGhpcy5ob3Q9Yyx0aGlzLmNv'@;
put 'bnRhaW5lcj1udWxsLHRoaXMuaW5qZWN0ZWQ9ITEsdGhpcy5yb3dzPVtdLHRoaXMuY29sdW1ucz1bXSx0aGlzLnNhbXBsZXM9bnVsbCx0aGlzLnNldHRpbmdzPXt1c2VIZWFkZXJzOiEwfX1yZXR1cm4gZnVuY3Rpb24gZDB0KGwsYyxhKXtjJiZiMmUobC5wcm90b3R5cGUsYyksYSYmYjJlKGws'@;
put 'YSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGwsW3trZXk6ImFkZFJvdyIsdmFsdWU6ZnVuY3Rpb24oYSxmKXtpZih0aGlzLmNvbHVtbnMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiRG9lc24ndCBzdXBwb3J0IG11bHRpLWRpbWVuc2lvbmFs'@;
put 'IHRhYmxlIik7dGhpcy5yb3dzLmxlbmd0aHx8KHRoaXMuY29udGFpbmVyPXRoaXMuY3JlYXRlQ29udGFpbmVyKHRoaXMuaG90LnJvb3RFbGVtZW50LmNsYXNzTmFtZSkpO3ZhciBkPXtyb3c6YX07dGhpcy5yb3dzLnB1c2goZCksdGhpcy5zYW1wbGVzPWYsdGhpcy50YWJsZT10aGlzLmNyZWF0'@;
put 'ZVRhYmxlKHRoaXMuaG90LnRhYmxlLmNsYXNzTmFtZSksdGhpcy50YWJsZS5jb2xHcm91cC5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUNvbEdyb3Vwc0NvbCgpKSx0aGlzLnRhYmxlLnRyLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlUm93KGEpKSx0aGlzLmNvbnRhaW5lci5jb250YWluZXIuYXBw'@;
put 'ZW5kQ2hpbGQodGhpcy50YWJsZS5mcmFnbWVudCksZC50YWJsZT10aGlzLnRhYmxlLnRhYmxlfX0se2tleToiYWRkQ29sdW1uSGVhZGVyc1JvdyIsdmFsdWU6ZnVuY3Rpb24oYSl7aWYobnVsbCE9dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKDApKXt2YXIgZD17cm93Oi0xfTt0aGlzLnJvd3MucHVz'@;
put 'aChkKSx0aGlzLmNvbnRhaW5lcj10aGlzLmNyZWF0ZUNvbnRhaW5lcih0aGlzLmhvdC5yb290RWxlbWVudC5jbGFzc05hbWUpLHRoaXMuc2FtcGxlcz1hLHRoaXMudGFibGU9dGhpcy5jcmVhdGVUYWJsZSh0aGlzLmhvdC50YWJsZS5jbGFzc05hbWUpLHRoaXMudGFibGUuY29sR3JvdXAuYXBw'@;
put 'ZW5kQ2hpbGQodGhpcy5jcmVhdGVDb2xHcm91cHNDb2woKSksdGhpcy5hcHBlbmRDb2x1bW5IZWFkZXJzUm93KCksdGhpcy5jb250YWluZXIuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMudGFibGUuZnJhZ21lbnQpLGQudGFibGU9dGhpcy50YWJsZS50YWJsZX19fSx7a2V5OiJhZGRDb2x1'@;
put 'bW4iLHZhbHVlOmZ1bmN0aW9uKGEsZil7aWYodGhpcy5yb3dzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkRvZXNuJ3Qgc3VwcG9ydCBtdWx0aS1kaW1lbnNpb25hbCB0YWJsZSIpO3RoaXMuY29sdW1ucy5sZW5ndGh8fCh0aGlzLmNvbnRhaW5lcj10aGlzLmNyZWF0ZUNvbnRhaW5lcih0aGlz'@;
put 'LmhvdC5yb290RWxlbWVudC5jbGFzc05hbWUpKTt2YXIgZD17Y29sOmF9O3RoaXMuY29sdW1ucy5wdXNoKGQpLHRoaXMuc2FtcGxlcz1mLHRoaXMudGFibGU9dGhpcy5jcmVhdGVUYWJsZSh0aGlzLmhvdC50YWJsZS5jbGFzc05hbWUpLHRoaXMuZ2V0U2V0dGluZygidXNlSGVhZGVycyIpJiZu'@;
put 'dWxsIT09dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKGEpJiZ0aGlzLmhvdC52aWV3LmFwcGVuZENvbEhlYWRlcihhLHRoaXMudGFibGUudGgpLHRoaXMudGFibGUudEJvZHkuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVDb2woYSkpLHRoaXMuY29udGFpbmVyLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0'@;
put 'aGlzLnRhYmxlLmZyYWdtZW50KSxkLnRhYmxlPXRoaXMudGFibGUudGFibGV9fSx7a2V5OiJnZXRIZWlnaHRzIix2YWx1ZTpmdW5jdGlvbihhKXt0aGlzLmluamVjdGVkfHx0aGlzLmluamVjdFRhYmxlKCksUm4odGhpcy5yb3dzLGZ1bmN0aW9uKGYpe2EoZi5yb3csY3MoZi50YWJsZSktMSl9'@;
put 'KX19LHtrZXk6ImdldFdpZHRocyIsdmFsdWU6ZnVuY3Rpb24oYSl7dGhpcy5pbmplY3RlZHx8dGhpcy5pbmplY3RUYWJsZSgpLFJuKHRoaXMuY29sdW1ucyxmdW5jdGlvbihmKXt2YXIgZD1mLnRhYmxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2EoZi5jb2wsTWF0aC5jZWlsKGQud2lkdGgp'@;
put 'KX0pfX0se2tleToic2V0U2V0dGluZ3MiLHZhbHVlOmZ1bmN0aW9uKGEpe3RoaXMuc2V0dGluZ3M9YX19LHtrZXk6InNldFNldHRpbmciLHZhbHVlOmZ1bmN0aW9uKGEsZil7dGhpcy5zZXR0aW5nc3x8KHRoaXMuc2V0dGluZ3M9e30pLHRoaXMuc2V0dGluZ3NbYV09Zn19LHtrZXk6ImdldFNl'@;
put 'dHRpbmdzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNldHRpbmdzfX0se2tleToiZ2V0U2V0dGluZyIsdmFsdWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuc2V0dGluZ3M/dGhpcy5zZXR0aW5nc1thXTpudWxsfX0se2tleToiY3JlYXRlQ29sR3JvdXBzQ29sIix2YWx1ZTpmdW5j'@;
put 'dGlvbigpe3ZhciBhPXRoaXMsZj10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO3JldHVybiB0aGlzLmhvdC5oYXNSb3dIZWFkZXJzKCkmJmYuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVDb2xFbGVtZW50KC0xKSksdGhpcy5zYW1wbGVzLmZvckVhY2goZnVu'@;
put 'Y3Rpb24oZCl7Um4oZC5zdHJpbmdzLGZ1bmN0aW9uKGgpe2YuYXBwZW5kQ2hpbGQoYS5jcmVhdGVDb2xFbGVtZW50KGguY29sKSl9KX0pLGZ9fSx7a2V5OiJjcmVhdGVSb3ciLHZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBmPXRoaXMsZD10aGlzLmhvdC5yb290RG9jdW1lbnQsaD1kLmNyZWF0ZURv'@;
put 'Y3VtZW50RnJhZ21lbnQoKSxtPWQuY3JlYXRlRWxlbWVudCgidGgiKTtyZXR1cm4gdGhpcy5ob3QuaGFzUm93SGVhZGVycygpJiYodGhpcy5ob3Qudmlldy5hcHBlbmRSb3dIZWFkZXIoYSxtKSxoLmFwcGVuZENoaWxkKG0pKSx0aGlzLnNhbXBsZXMuZm9yRWFjaChmdW5jdGlvbihfKXtSbihf'@;
put 'LnN0cmluZ3MsZnVuY3Rpb24oTyl7dmFyIFg9Ty5jb2wsYWU9Zi5ob3QuZ2V0Q2VsbE1ldGEoYSxYKTthZS5jb2w9WCxhZS5yb3c9YTt2YXIgcGU9Zi5ob3QuZ2V0Q2VsbFJlbmRlcmVyKGFlKSxiZT1kLmNyZWF0ZUVsZW1lbnQoInRkIik7YmUuc2V0QXR0cmlidXRlKCJnaG9zdC10YWJsZSIs'@;
put 'MSkscGUoZi5ob3QsYmUsYSxYLGYuaG90LmNvbFRvUHJvcChYKSxPLnZhbHVlLGFlKSxoLmFwcGVuZENoaWxkKGJlKX0pfSksaH19LHtrZXk6ImFwcGVuZENvbHVtbkhlYWRlcnNSb3ciLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxmPXRoaXMuaG90LnJvb3REb2N1bWVudCxkPWYuY3Jl'@;
put 'YXRlRG9jdW1lbnRGcmFnbWVudCgpLGg9W107aWYodGhpcy5ob3QuaGFzUm93SGVhZGVycygpKXt2YXIgbT1mLmNyZWF0ZUVsZW1lbnQoInRoIik7aC5wdXNoKFstMSxtXSksZC5hcHBlbmRDaGlsZChtKX10aGlzLnNhbXBsZXMuZm9yRWFjaChmdW5jdGlvbihfKXtSbihfLnN0cmluZ3MsZnVu'@;
put 'Y3Rpb24oTyl7dmFyIFg9Ty5jb2wsYWU9Zi5jcmVhdGVFbGVtZW50KCJ0aCIpO2gucHVzaChbWCxhZV0pLGQuYXBwZW5kQ2hpbGQoYWUpfSl9KSx0aGlzLnRhYmxlLnRIZWFkLmFwcGVuZENoaWxkKGQpLFJuKGgsZnVuY3Rpb24oXyl7dmFyIE89ZnVuY3Rpb24gYTB0KGwsYyl7cmV0dXJuIGZ1'@;
put 'bmN0aW9uIGMwdChsKXtpZihBcnJheS5pc0FycmF5KGwpKXJldHVybiBsfShsKXx8ZnVuY3Rpb24gdTB0KGwsYyl7dmFyIGE9bnVsbD09bD9udWxsOnR5cGVvZiBTeW1ib2w8InUiJiZsW1N5bWJvbC5pdGVyYXRvcl18fGxbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1hKXt2YXIgZixkLGgsbSxf'@;
put 'PVtdLE89ITAsWD0hMTt0cnl7aWYoaD0oYT1hLmNhbGwobCkpLm5leHQsMD09PWMpe2lmKE9iamVjdChhKSE9PWEpcmV0dXJuO089ITF9ZWxzZSBmb3IoOyEoTz0oZj1oLmNhbGwoYSkpLmRvbmUpJiYoXy5wdXNoKGYudmFsdWUpLF8ubGVuZ3RoIT09Yyk7Tz0hMCk7fWNhdGNoKGFlKXtYPSEw'@;
put 'LGQ9YWV9ZmluYWxseXt0cnl7aWYoIU8mJm51bGwhPWEucmV0dXJuJiYobT1hLnJldHVybigpLE9iamVjdChtKSE9PW0pKXJldHVybn1maW5hbGx5e2lmKFgpdGhyb3cgZH19cmV0dXJuIF99fShsLGMpfHxmdW5jdGlvbiBzMHQobCxjKXtpZihsKXtpZigic3RyaW5nIj09dHlwZW9mIGwpcmV0'@;
put 'dXJuIHkyZShsLGMpO3ZhciBhPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsKS5zbGljZSg4LC0xKTtpZigiT2JqZWN0Ij09PWEmJmwuY29uc3RydWN0b3ImJihhPWwuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1hfHwiU2V0Ij09PWEpcmV0dXJuIEFycmF5LmZyb20obCk7aWYo'@;
put 'IkFyZ3VtZW50cyI9PT1hfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChhKSlyZXR1cm4geTJlKGwsYyl9fShsLGMpfHxmdW5jdGlvbiBsMHQoKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0'@;
put 'ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfShfLDIpO2EuaG90LnZpZXcuYXBwZW5kQ29sSGVhZGVyKE9bMF0sT1sxXSl9KX19LHtrZXk6ImNyZWF0'@;
put 'ZUNvbCIsdmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGY9dGhpcyxkPXRoaXMuaG90LnJvb3REb2N1bWVudCxoPWQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO3JldHVybiB0aGlzLnNhbXBsZXMuZm9yRWFjaChmdW5jdGlvbihtKXtSbihtLnN0cmluZ3MsZnVuY3Rpb24oXyl7dmFyIE89Xy5yb3cs'@;
put 'WD1mLmhvdC5nZXRDZWxsTWV0YShPLGEpO1guY29sPWEsWC5yb3c9Tzt2YXIgYWU9Zi5ob3QuZ2V0Q2VsbFJlbmRlcmVyKFgpLHBlPWQuY3JlYXRlRWxlbWVudCgidGQiKSxiZT1kLmNyZWF0ZUVsZW1lbnQoInRyIik7cGUuc2V0QXR0cmlidXRlKCJnaG9zdC10YWJsZSIsMSksYWUoZi5ob3Qs'@;
put 'cGUsTyxhLGYuaG90LmNvbFRvUHJvcChhKSxfLnZhbHVlLFgpLGJlLmFwcGVuZENoaWxkKHBlKSxoLmFwcGVuZENoaWxkKGJlKX0pfSksaH19LHtrZXk6ImNsZWFuIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucm93cy5sZW5ndGg9MCx0aGlzLnJvd3NbLTFdPXZvaWQgMCx0aGlzLmNvbHVtbnMu'@;
put 'bGVuZ3RoPTAsdGhpcy5zYW1wbGVzJiZ0aGlzLnNhbXBsZXMuY2xlYXIoKSx0aGlzLnNhbXBsZXM9bnVsbCx0aGlzLnJlbW92ZVRhYmxlKCl9fSx7a2V5OiJpbmplY3RUYWJsZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmluamVjdGVkfHwoKChhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9'@;
put 'PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbCl8fHRoaXMuaG90LnJvb3RFbGVtZW50KS5hcHBlbmRDaGlsZCh0aGlzLmNvbnRhaW5lci5mcmFnbWVudCksdGhpcy5pbmplY3RlZD0hMCl9fSx7a2V5OiJyZW1vdmVUYWJsZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmluamVjdGVkJiZ0'@;
put 'aGlzLmNvbnRhaW5lci5jb250YWluZXIucGFyZW50Tm9kZSYmKHRoaXMuY29udGFpbmVyLmNvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuY29udGFpbmVyLmNvbnRhaW5lciksdGhpcy5jb250YWluZXI9bnVsbCx0aGlzLmluamVjdGVkPSExKX19LHtrZXk6ImNyZWF0ZUNv'@;
put 'bEVsZW1lbnQiLHZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBmPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjb2wiKTtyZXR1cm4gZi5zdHlsZS53aWR0aD0iIi5jb25jYXQodGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZS5nZXRTdHJldGNoZWRDb2x1bW5XaWR0aChhKSwicHgi'@;
put 'KSxmfX0se2tleToiY3JlYXRlVGFibGUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGE9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiIiLGY9dGhpcy5ob3Qucm9vdERvY3VtZW50LGQ9Zi5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksaD1mLmNy'@;
put 'ZWF0ZUVsZW1lbnQoInRhYmxlIiksbT1mLmNyZWF0ZUVsZW1lbnQoInRoZWFkIiksXz1mLmNyZWF0ZUVsZW1lbnQoInRib2R5IiksTz1mLmNyZWF0ZUVsZW1lbnQoImNvbGdyb3VwIiksWD1mLmNyZWF0ZUVsZW1lbnQoInRyIiksYWU9Zi5jcmVhdGVFbGVtZW50KCJ0aCIpO3JldHVybiB0aGlz'@;
put 'LmlzVmVydGljYWwoKSYmaC5hcHBlbmRDaGlsZChPKSx0aGlzLmlzSG9yaXpvbnRhbCgpJiYoWC5hcHBlbmRDaGlsZChhZSksbS5hcHBlbmRDaGlsZChYKSxoLnN0eWxlLnRhYmxlTGF5b3V0PSJhdXRvIixoLnN0eWxlLndpZHRoPSJhdXRvIiksaC5hcHBlbmRDaGlsZChtKSx0aGlzLmlzVmVy'@;
put 'dGljYWwoKSYmXy5hcHBlbmRDaGlsZChYKSxoLmFwcGVuZENoaWxkKF8pLGdpKGgsYSksZC5hcHBlbmRDaGlsZChoKSx7ZnJhZ21lbnQ6ZCx0YWJsZTpoLHRIZWFkOm0sdEJvZHk6Xyxjb2xHcm91cDpPLHRyOlgsdGg6YWV9fX0se2tleToiY3JlYXRlQ29udGFpbmVyIix2YWx1ZTpmdW5jdGlv'@;
put 'bigpe3ZhciBhPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToiIixmPXRoaXMuaG90LnJvb3REb2N1bWVudCxkPWYuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGg9Zi5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gZ2koaCwiaHRHaG9z'@;
put 'dFRhYmxlIGh0QXV0b1NpemUgIi5jb25jYXQoYS50cmltKCkpKSxkLmFwcGVuZENoaWxkKGgpLHtmcmFnbWVudDpkLGNvbnRhaW5lcjpofX19LHtrZXk6ImlzVmVydGljYWwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuISghdGhpcy5yb3dzLmxlbmd0aHx8dGhpcy5jb2x1bW5zLmxlbmd0aCl9'@;
put 'fSx7a2V5OiJpc0hvcml6b250YWwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuISghdGhpcy5jb2x1bW5zLmxlbmd0aHx8dGhpcy5yb3dzLmxlbmd0aCl9fV0pLGx9KCk7Y29uc3QgU0s9bTB0O2Z1bmN0aW9uIFNrKGwpe3JldHVybihTaz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3lt'@;
put 'Ym9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBl'@;
put 'b2YgY30pKGwpfWZ1bmN0aW9uIF8yZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5'@;
put 'KGwsdzJlKGYua2V5KSxmKX19ZnVuY3Rpb24gdzJlKGwpe3ZhciBjPWZ1bmN0aW9uIGIwdChsLGMpe2lmKCJvYmplY3QiIT09U2sobCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVs'@;
put 'dCIpO2lmKCJvYmplY3QiIT09U2soZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9s'@;
put 'Ij09PVNrKGMpP2M6U3RyaW5nKGMpfXZhciBfMHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKGMpeyhmdW5jdGlvbiB2MHQobCxjKXtpZighKGwgaW5zdGFuY2VvZiBjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsbCksdGhp'@;
put 'cy5zYW1wbGVzPW51bGwsdGhpcy5kYXRhRmFjdG9yeT1jLHRoaXMuY3VzdG9tU2FtcGxlQ291bnQ9bnVsbCx0aGlzLmFsbG93RHVwbGljYXRlcz0hMX1yZXR1cm4gZnVuY3Rpb24geTB0KGwsYyxhKXtjJiZfMmUobC5wcm90b3R5cGUsYyksYSYmXzJlKGwsYSksT2JqZWN0LmRlZmluZVByb3Bl'@;
put 'cnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGwsW3trZXk6ImdldFNhbXBsZUNvdW50Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmN1c3RvbVNhbXBsZUNvdW50P3RoaXMuY3VzdG9tU2FtcGxlQ291bnQ6bC5TQU1QTEVfQ09VTlR9fSx7a2V5OiJzZXRTYW1wbGVDb3Vu'@;
put 'dCIsdmFsdWU6ZnVuY3Rpb24oYSl7dGhpcy5jdXN0b21TYW1wbGVDb3VudD1hfX0se2tleToic2V0QWxsb3dEdXBsaWNhdGVzIix2YWx1ZTpmdW5jdGlvbihhKXt0aGlzLmFsbG93RHVwbGljYXRlcz1hfX0se2tleToiZ2VuZXJhdGVSb3dTYW1wbGVzIix2YWx1ZTpmdW5jdGlvbihhLGYpe3Jl'@;
put 'dHVybiB0aGlzLmdlbmVyYXRlU2FtcGxlcygicm93IixmLGEpfX0se2tleToiZ2VuZXJhdGVDb2x1bW5TYW1wbGVzIix2YWx1ZTpmdW5jdGlvbihhLGYpe3JldHVybiB0aGlzLmdlbmVyYXRlU2FtcGxlcygiY29sIixmLGEpfX0se2tleToiZ2VuZXJhdGVTYW1wbGVzIix2YWx1ZTpmdW5jdGlv'@;
put 'bihhLGYsZCl7dmFyIGg9dGhpcyxtPW5ldyBNYXAsXz0ibnVtYmVyIj09dHlwZW9mIGQ/e2Zyb206ZCx0bzpkfTpkO3JldHVybiBfbyhfLmZyb20sXy50byxmdW5jdGlvbihhZSl7dmFyIHBlPWguZ2VuZXJhdGVTYW1wbGUoYSxmLGFlKTttLnNldChhZSxwZSl9KSxtfX0se2tleToiZ2VuZXJh'@;
put 'dGVTYW1wbGUiLHZhbHVlOmZ1bmN0aW9uKGEsZixkKXt2YXIgaD10aGlzO2lmKCJyb3ciIT09YSYmImNvbCIhPT1hKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgc2FtcGxlIHR5cGUiKTt2YXIgbT1uZXcgTWFwLF89InJvdyI9PT1hPyJjb2wiOiJyb3ciLE89W107cmV0dXJuIF9vKGYu'@;
put 'ZnJvbSxmLnRvLGZ1bmN0aW9uKFgpe3ZhciBWZSxhZT0icm93Ij09PWE/aC5kYXRhRmFjdG9yeShkLFgpOmguZGF0YUZhY3RvcnkoWCxkKSxwZT1hZS52YWx1ZSxiZT1hZS5idW5kbGVTZWVkLHhlPSJzdHJpbmciPT10eXBlb2YgYmUmJmJlLmxlbmd0aD4wO1ZlPXhlP2JlOnBhKHBlKT8iIi5j'@;
put 'b25jYXQoT2JqZWN0LmtleXMocGUpLmxlbmd0aCk6QXJyYXkuaXNBcnJheShwZSk/IiIuY29uY2F0KHBlLmxlbmd0aCk6IiIuY29uY2F0KE1zKHBlKS5sZW5ndGgpLG0uaGFzKFZlKXx8bS5zZXQoVmUse25lZWRlZDpoLmdldFNhbXBsZUNvdW50KCksc3RyaW5nczpbXX0pO3ZhciBaZT1tLmdl'@;
put 'dChWZSk7WmUubmVlZGVkJiYoIShPLmluZGV4T2YocGUpPi0xKXx8aC5hbGxvd0R1cGxpY2F0ZXN8fHhlKSYmKFplLnN0cmluZ3MucHVzaChmdW5jdGlvbiBnMHQobCxjLGEpe3JldHVybihjPXcyZShjKSlpbiBsP09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLGMse3ZhbHVlOmEsZW51bWVyYWJs'@;
put 'ZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpsW2NdPWEsbH0oe3ZhbHVlOnBlfSxfLFgpKSxPLnB1c2gocGUpLFplLm5lZWRlZC09MSl9KSxtfX1dLFt7a2V5OiJTQU1QTEVfQ09VTlQiLGdldDpmdW5jdGlvbigpe3JldHVybiAzfX1dKSxsfSgpO2NvbnN0IEMyZT1fMHQ7ZnVu'@;
put 'Y3Rpb24gWTkobCl7cmV0dXJuKFk5PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29u'@;
put 'c3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gUzJlKGwsYyl7cmV0dXJuIGZ1bmN0aW9uIE0wdChsKXtpZihBcnJheS5pc0FycmF5KGwpKXJldHVybiBsfShsKXx8ZnVuY3Rpb24gUzB0KGwsYyl7dmFyIGE9bnVs'@;
put 'bD09bD9udWxsOnR5cGVvZiBTeW1ib2w8InUiJiZsW1N5bWJvbC5pdGVyYXRvcl18fGxbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1hKXt2YXIgZixkLGgsbSxfPVtdLE89ITAsWD0hMTt0cnl7aWYoaD0oYT1hLmNhbGwobCkpLm5leHQsMD09PWMpe2lmKE9iamVjdChhKSE9PWEpcmV0dXJuO089'@;
put 'ITF9ZWxzZSBmb3IoOyEoTz0oZj1oLmNhbGwoYSkpLmRvbmUpJiYoXy5wdXNoKGYudmFsdWUpLF8ubGVuZ3RoIT09Yyk7Tz0hMCk7fWNhdGNoKGFlKXtYPSEwLGQ9YWV9ZmluYWxseXt0cnl7aWYoIU8mJm51bGwhPWEucmV0dXJuJiYobT1hLnJldHVybigpLE9iamVjdChtKSE9PW0pKXJldHVy'@;
put 'bn1maW5hbGx5e2lmKFgpdGhyb3cgZH19cmV0dXJuIF99fShsLGMpfHxmdW5jdGlvbiBDMHQobCxjKXtpZihsKXtpZigic3RyaW5nIj09dHlwZW9mIGwpcmV0dXJuIE0yZShsLGMpO3ZhciBhPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsKS5zbGljZSg4LC0xKTtpZigiT2JqZWN0'@;
put 'Ij09PWEmJmwuY29uc3RydWN0b3ImJihhPWwuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1hfHwiU2V0Ij09PWEpcmV0dXJuIEFycmF5LmZyb20obCk7aWYoIkFyZ3VtZW50cyI9PT1hfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChhKSlyZXR1cm4g'@;
put 'TTJlKGwsYyl9fShsLGMpfHxmdW5jdGlvbiB3MHQoKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtT'@;
put 'eW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIE0yZShsLGMpeyhudWxsPT1jfHxjPmwubGVuZ3RoKSYmKGM9bC5sZW5ndGgpO2Zvcih2YXIgYT0wLGY9bmV3IEFycmF5KGMpO2E8YzthKyspZlthXT1sW2FdO3JldHVybiBmfWZ1bmN0aW9uIGsyZShsLGMpe2Zvcih2YXIg'@;
put 'YT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwseDB0KGYua2V5KSxmKX19ZnVuY3Rpb24geDB0KGwpe3Zh'@;
put 'ciBjPWZ1bmN0aW9uIEEwdChsLGMpe2lmKCJvYmplY3QiIT09WTkobCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09WTkoZikpcmV0dXJuIGY7dGhy'@;
put 'b3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PVk5KGMpP2M6U3RyaW5nKGMpfWZ1bmN0aW9uIEg1KCl7'@;
put 'cmV0dXJuIEg1PXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdC5nZXQ/UmVmbGVjdC5nZXQuYmluZCgpOmZ1bmN0aW9uKGMsYSxmKXt2YXIgZD1mdW5jdGlvbiBUMHQobCxjKXtmb3IoOyFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobCxjKSYmbnVsbCE9PShsPXYzKGwp'@;
put 'KTspO3JldHVybiBsfShjLGEpO2lmKGQpe3ZhciBoPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZCxhKTtyZXR1cm4gaC5nZXQ/aC5nZXQuY2FsbChhcmd1bWVudHMubGVuZ3RoPDM/YzpmKTpoLnZhbHVlfX0sSDUuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIE1LKGws'@;
put 'Yyl7cmV0dXJuKE1LPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGYsZCl7cmV0dXJuIGYuX19wcm90b19fPWQsZn0pKGwsYyl9ZnVuY3Rpb24gRTJlKGwpe2lmKHZvaWQgMD09PWwpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0'@;
put 'aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gbH1mdW5jdGlvbiB2MyhsKXtyZXR1cm4odjM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oYSl7cmV0dXJuIGEu'@;
put 'X19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSl9KShsKX11by5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigibW9kaWZ5QXV0b0NvbHVtblNpemVTZWVkIik7dmFyIE1rPSJhdXRvQ29sdW1uU2l6ZSIsa0s9bmV3IFdlYWtNYXAsRjB0PWZ1bmN0aW9uKGwpeyFmdW5jdGlvbiBPMHQo'@;
put 'bCxjKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyYmbnVsbCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtsLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGMmJmMucHJvdG90eXBlLHtjb25zdHJ1Y3Rv'@;
put 'cjp7dmFsdWU6bCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksYyYmTUsobCxjKX0oYSxsKTt2YXIgYz1mdW5jdGlvbiBEMHQobCl7dmFyIGM9ZnVuY3Rpb24gUjB0KCl7aWYodHlwZW9mIFJl'@;
put 'ZmxlY3Q+InUifHwhUmVmbGVjdC5jb25zdHJ1Y3R8fFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xl'@;
put 'YW4sW10sZnVuY3Rpb24oKXt9KSksITB9Y2F0Y2h7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciBkLGY9djMobCk7aWYoYyl7dmFyIGg9djModGhpcykuY29uc3RydWN0b3I7ZD1SZWZsZWN0LmNvbnN0cnVjdChmLGFyZ3VtZW50cyxoKX1lbHNlIGQ9Zi5hcHBseSh0aGlzLGFy'@;
put 'Z3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uIEkwdChsLGMpe2lmKGMmJigib2JqZWN0Ij09PVk5KGMpfHwiZnVuY3Rpb24iPT10eXBlb2YgYykpcmV0dXJuIGM7aWYodm9pZCAwIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2Jq'@;
put 'ZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBFMmUobCl9KHRoaXMsZCl9fShhKTtmdW5jdGlvbiBhKGYpe3ZhciBkO3JldHVybiBmdW5jdGlvbiBrMHQobCxjKXtpZighKGwgaW5zdGFuY2VvZiBjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rp'@;
put 'b24iKX0odGhpcyxhKSxkPWMuY2FsbCh0aGlzLGYpLGtLLnNldChFMmUoZCkse2NhY2hlZENvbHVtbkhlYWRlcnM6W119KSxkLmdob3N0VGFibGU9bmV3IFNLKGQuaG90KSxkLnNhbXBsZXNHZW5lcmF0b3I9bmV3IEMyZShmdW5jdGlvbihoLG0pe3ZhciBfPWQuaG90LmdldENlbGxNZXRhKGgs'@;
put 'bSksTz0iIjtfLnNwYW5uZWR8fChPPWQuaG90LmdldERhdGFBdENlbGwoaCxtKSk7dmFyIFg9IiI7cmV0dXJuIGQuaG90Lmhhc0hvb2soIm1vZGlmeUF1dG9Db2x1bW5TaXplU2VlZCIpJiYoWD1kLmhvdC5ydW5Ib29rcygibW9kaWZ5QXV0b0NvbHVtblNpemVTZWVkIixYLF8sTykpLHt2YWx1'@;
put 'ZTpPLGJ1bmRsZVNlZWQ6WH19KSxkLmZpcnN0Q2FsY3VsYXRpb249ITAsZC5pblByb2dyZXNzPSExLGQubWVhc3VyZWRDb2x1bW5zPTAsZC5jb2x1bW5XaWR0aHNNYXA9bmV3IEY0LGQuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKCJhdXRvQ29sdW1uU2l6ZSIsZC5jb2x1bW5X'@;
put 'aWR0aHNNYXApLGQuYWRkSG9vaygiYmVmb3JlQ29sdW1uUmVzaXplIixmdW5jdGlvbihoLG0sXyl7cmV0dXJuIGQub25CZWZvcmVDb2x1bW5SZXNpemUoaCxtLF8pfSksZH1yZXR1cm4gZnVuY3Rpb24gRTB0KGwsYyxhKXtjJiZrMmUobC5wcm90b3R5cGUsYyksYSYmazJlKGwsYSksT2JqZWN0'@;
put 'LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGEsW3trZXk6ImlzRW5hYmxlZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hMSE9PXRoaXMuaG90LmdldFNldHRpbmdzKClbTWtdJiYhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5jb2xXaWR0aHN9fSx7a2V5OiJl'@;
put 'bmFibGVQbHVnaW4iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcztpZighdGhpcy5lbmFibGVkKXt2YXIgaD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW01rXTtoJiZudWxsIT1oLnVzZUhlYWRlcnMmJnRoaXMuZ2hvc3RUYWJsZS5zZXRTZXR0aW5nKCJ1c2VIZWFkZXJzIixoLnVzZUhlYWRl'@;
put 'cnMpLHRoaXMuc2V0U2FtcGxpbmdPcHRpb25zKCksdGhpcy5hZGRIb29rKCJhZnRlckxvYWREYXRhIixmdW5jdGlvbigpe3JldHVybiBkLm9uQWZ0ZXJMb2FkRGF0YS5hcHBseShkLGFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUNoYW5nZVJlbmRlciIsZnVuY3Rpb24obSl7cmV0'@;
put 'dXJuIGQub25CZWZvcmVDaGFuZ2UobSl9KSx0aGlzLmFkZEhvb2soImFmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGUiLGZ1bmN0aW9uKG0pe3JldHVybiBkLm9uQWZ0ZXJGb3JtdWxhc1ZhbHVlc1VwZGF0ZShtKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlVmlld1JlbmRlciIsZnVuY3Rpb24obSl7'@;
put 'cmV0dXJuIGQub25CZWZvcmVWaWV3UmVuZGVyKG0pfSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb2xXaWR0aCIsZnVuY3Rpb24obSxfKXtyZXR1cm4gZC5nZXRDb2x1bW5XaWR0aChfLG0pfSksdGhpcy5hZGRIb29rKCJhZnRlckluaXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25BZnRlckluaXQo'@;
put 'KX0pLEg1KHYzKGEucHJvdG90eXBlKSwiZW5hYmxlUGx1Z2luIix0aGlzKS5jYWxsKHRoaXMpfX19LHtrZXk6InVwZGF0ZVBsdWdpbiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmZpbmRDb2x1bW5zV2hlcmVIZWFkZXJXYXNDaGFuZ2VkKCk7ZC5sZW5ndGgmJih0aGlzLmNsZWFyQ2Fj'@;
put 'aGUoZCksdGhpcy5jYWxjdWxhdGVWaXNpYmxlQ29sdW1uc1dpZHRoKCkpLEg1KHYzKGEucHJvdG90eXBlKSwidXBkYXRlUGx1Z2luIix0aGlzKS5jYWxsKHRoaXMpfX0se2tleToiZGlzYWJsZVBsdWdpbiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzO0g1KHYzKGEucHJvdG90eXBlKSwi'@;
put 'ZGlzYWJsZVBsdWdpbiIsdGhpcykuY2FsbCh0aGlzKSx0aGlzLmFkZEhvb2soImJlZm9yZUNvbHVtblJlc2l6ZSIsZnVuY3Rpb24oaCxtLF8pe3JldHVybiBkLm9uQmVmb3JlQ29sdW1uUmVzaXplKGgsbSxfKX0pfX0se2tleToiY2FsY3VsYXRlVmlzaWJsZUNvbHVtbnNXaWR0aCIsdmFsdWU6'@;
put 'ZnVuY3Rpb24oKXtpZih0aGlzLmhvdC5jb3VudFJvd3MoKSl7dmFyIGg9dGhpcy5ob3QucmVuZGVyQ2FsbCxtPXRoaXMuZ2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCksXz10aGlzLmdldExhc3RWaXNpYmxlQ29sdW1uKCk7LTE9PT1tfHwtMT09PV98fHRoaXMuY2FsY3VsYXRlQ29sdW1uc1dpZHRo'@;
put 'KHtmcm9tOm0sdG86X30sdm9pZCAwLGgpfX19LHtrZXk6ImNhbGN1bGF0ZUNvbHVtbnNXaWR0aCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLGg9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOntmcm9tOjAsdG86dGhpcy5ob3QuY291'@;
put 'bnRDb2xzKCktMX0sbT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudFJvd3MoKS0xfSxfPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0sTz0i'@;
put 'bnVtYmVyIj09dHlwZW9mIGg/e2Zyb206aCx0bzpofTpoLFg9Im51bWJlciI9PXR5cGVvZiBtP3tmcm9tOm0sdG86bX06bTtfbyhPLmZyb20sTy50byxmdW5jdGlvbihhZSl7dmFyIHBlPWQuaG90LnRvUGh5c2ljYWxDb2x1bW4oYWUpO251bGw9PT1wZSYmKHBlPWFlKSwoX3x8bnVsbD09PWQu'@;
put 'Y29sdW1uV2lkdGhzTWFwLmdldFZhbHVlQXRJbmRleChwZSkmJiFkLmhvdC5fZ2V0Q29sV2lkdGhGcm9tU2V0dGluZ3MocGUpKSYmUm4oZC5zYW1wbGVzR2VuZXJhdG9yLmdlbmVyYXRlQ29sdW1uU2FtcGxlcyhhZSxYKSxmdW5jdGlvbih4ZSl7dmFyIFZlPVMyZSh4ZSwyKTtyZXR1cm4gZC5n'@;
put 'aG9zdFRhYmxlLmFkZENvbHVtbihWZVswXSxWZVsxXSl9KX0pLHRoaXMuZ2hvc3RUYWJsZS5jb2x1bW5zLmxlbmd0aCYmKHRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKGZ1bmN0aW9uKCl7ZC5naG9zdFRhYmxlLmdldFdpZHRocyhmdW5jdGlvbihhZSxwZSl7dmFyIGJlPWQuaG90LnRvUGh5c2lj'@;
put 'YWxDb2x1bW4oYWUpO2QuY29sdW1uV2lkdGhzTWFwLnNldFZhbHVlQXRJbmRleChiZSxwZSl9KX0sITApLHRoaXMubWVhc3VyZWRDb2x1bW5zPU8udG8rMSx0aGlzLmdob3N0VGFibGUuY2xlYW4oKSl9fSx7a2V5OiJjYWxjdWxhdGVBbGxDb2x1bW5zV2lkdGgiLHZhbHVlOmZ1bmN0aW9uKCl7'@;
put 'dmFyIGQ9dGhpcyxoPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7ZnJvbTowLHRvOnRoaXMuaG90LmNvdW50Um93cygpLTF9LG09MCxfPXRoaXMuaG90LmNvdW50Q29scygpLTEsTz1udWxsO3RoaXMuaW5Qcm9ncmVzcz0hMDt2YXIgYWU9'@;
put 'dGhpcy5nZXRTeW5jQ2FsY3VsYXRpb25MaW1pdCgpO3RoaXMuZmlyc3RDYWxjdWxhdGlvbiYmYWU+PTAmJih0aGlzLmNhbGN1bGF0ZUNvbHVtbnNXaWR0aCh7ZnJvbTowLHRvOmFlfSxoKSx0aGlzLmZpcnN0Q2FsY3VsYXRpb249ITEsbT1hZSsxKSxtPF8/ZnVuY3Rpb24gcGUoKXtpZighZC5o'@;
put 'b3QpcmV0dXJuIExTKE8pLHZvaWQoZC5pblByb2dyZXNzPSExKTtkLmNhbGN1bGF0ZUNvbHVtbnNXaWR0aCh7ZnJvbTptLHRvOk1hdGgubWluKG0rYS5DQUxDVUxBVElPTl9TVEVQLF8pfSxoKSwobT1tK2EuQ0FMQ1VMQVRJT05fU1RFUCsxKTxfP089QkkocGUpOihMUyhPKSxkLmluUHJvZ3Jl'@;
put 'c3M9ITEsZC5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSl9KCk6dGhpcy5pblByb2dyZXNzPSExfX0se2tleToic2V0U2FtcGxpbmdPcHRpb25zIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXMuaG90LmdldFNldHRpbmdzKClbTWtdLGg9ZCYmU3MoZCwic2FtcGxpbmdSYXRpbyIp'@;
put 'P2Quc2FtcGxpbmdSYXRpbzp2b2lkIDAsbT1kJiZTcyhkLCJhbGxvd1NhbXBsZUR1cGxpY2F0ZXMiKT9kLmFsbG93U2FtcGxlRHVwbGljYXRlczp2b2lkIDA7aCYmIWlzTmFOKGgpJiZ0aGlzLnNhbXBsZXNHZW5lcmF0b3Iuc2V0U2FtcGxlQ291bnQocGFyc2VJbnQoaCwxMCkpLG0mJnRoaXMu'@;
put 'c2FtcGxlc0dlbmVyYXRvci5zZXRBbGxvd0R1cGxpY2F0ZXMobSl9fSx7a2V5OiJyZWNhbGN1bGF0ZUFsbENvbHVtbnNXaWR0aCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmhvdC52aWV3JiZ0aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLmlzVmlzaWJsZSgpJiYodGhpcy5jbGVhckNhY2hlKCks'@;
put 'dGhpcy5jYWxjdWxhdGVBbGxDb2x1bW5zV2lkdGgoKSl9fSx7a2V5OiJnZXRTeW5jQ2FsY3VsYXRpb25MaW1pdCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW01rXSxoPWEuU1lOQ19DQUxDVUxBVElPTl9MSU1JVCxtPXRoaXMuaG90LmNvdW50Q29scygp'@;
put 'LTE7cmV0dXJuIHBhKGQpJiYoZ1koaD1kLnN5bmNMaW1pdCk/aD1ZWShtLGgpOmg+Pj0wKSxNYXRoLm1pbihoLG0pfX0se2tleToiZ2V0Q29sdW1uV2lkdGgiLHZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBtPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1'@;
put 'bWVudHNbMl0sXz1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dm9pZCAwO3JldHVybiB2b2lkIDA9PT1fJiYoXz10aGlzLmNvbHVtbldpZHRoc01hcC5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihkKSksbSYm'@;
put 'Im51bWJlciI9PXR5cGVvZiBfJiYoXz1NYXRoLm1heChfLFRXLkRFRkFVTFRfV0lEVEgpKSksX319LHtrZXk6ImdldEZpcnN0VmlzaWJsZUNvbHVtbiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmhvdC52aWV3Ll93dDtpZihkLnd0Vmlld3BvcnQuY29sdW1uc1Zpc2libGVDYWxjdWxh'@;
put 'dG9yKXt2YXIgaD1kLnd0VGFibGUuZ2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCk7aWYoLTEhPT1oKXJldHVybiB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGgpfWlmKGQud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvcil7dmFy'@;
put 'IG09ZC53dFRhYmxlLmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKTtpZigtMSE9PW0pcmV0dXJuIHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgobSl9cmV0dXJuLTF9fSx7a2V5OiJnZXRMYXN0VmlzaWJsZUNvbHVtbiIsdmFsdWU6ZnVuY3Rp'@;
put 'b24oKXt2YXIgZD10aGlzLmhvdC52aWV3Ll93dDtpZihkLnd0Vmlld3BvcnQuY29sdW1uc1Zpc2libGVDYWxjdWxhdG9yKXt2YXIgaD1kLnd0VGFibGUuZ2V0TGFzdFZpc2libGVDb2x1bW4oKTtpZigtMSE9PWgpcmV0dXJuIHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZy'@;
put 'b21SZW5kZXJhYmxlSW5kZXgoaCl9aWYoZC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yKXt2YXIgbT1kLnd0VGFibGUuZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCk7aWYoLTEhPT1tKXJldHVybiB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVy'@;
put 'YWJsZUluZGV4KG0pfXJldHVybi0xfX0se2tleToiZmluZENvbHVtbnNXaGVyZUhlYWRlcldhc0NoYW5nZWQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKCksbT1rSy5nZXQodGhpcykuY2FjaGVkQ29sdW1uSGVhZGVycztyZXR1cm4gUHMoZCxmdW5jdGlv'@;
put 'bihPLFgsYWUpe3ZhciBwZT1tLmxlbmd0aDtyZXR1cm4ocGUtMTxhZXx8bVthZV0hPT1YKSYmTy5wdXNoKGFlKSxwZS0xPGFlP20ucHVzaChYKTptW2FlXT1YLE99LFtdKX19LHtrZXk6ImNsZWFyQ2FjaGUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcyxoPWFyZ3VtZW50cy5sZW5ndGg+'@;
put 'MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbXTtoLmxlbmd0aD90aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbihmdW5jdGlvbigpe1JuKGgsZnVuY3Rpb24obSl7ZC5jb2x1bW5XaWR0aHNNYXAuc2V0VmFsdWVBdEluZGV4KG0sbnVsbCl9KX0sITApOnRoaXMuY29sdW1uV2lk'@;
put 'dGhzTWFwLmNsZWFyKCl9fSx7a2V5OiJpc05lZWRSZWNhbGN1bGF0ZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hIUQxKHRoaXMuY29sdW1uV2lkdGhzTWFwLmdldFZhbHVlcygpLnNsaWNlKDAsdGhpcy5tZWFzdXJlZENvbHVtbnMpLGZ1bmN0aW9uKGQpe3JldHVybiBudWxsPT09ZH0pLmxl'@;
put 'bmd0aH19LHtrZXk6Im9uQmVmb3JlVmlld1JlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNhbGN1bGF0ZVZpc2libGVDb2x1bW5zV2lkdGgoKSx0aGlzLmlzTmVlZFJlY2FsY3VsYXRlKCkmJiF0aGlzLmluUHJvZ3Jlc3MmJnRoaXMuY2FsY3VsYXRlQWxsQ29sdW1uc1dpZHRoKCl9fSx7'@;
put 'a2V5OiJvbkFmdGVyTG9hZERhdGEiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpczt0aGlzLmhvdC52aWV3P3RoaXMucmVjYWxjdWxhdGVBbGxDb2x1bW5zV2lkdGgoKTpzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZC5ob3QmJmQucmVjYWxjdWxhdGVBbGxDb2x1bW5zV2lkdGgoKX0sMCl9fSx7'@;
put 'a2V5OiJvbkJlZm9yZUNoYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZCl7dmFyIGg9dGhpcyxtPWhhKGQsZnVuY3Rpb24oXyl7dmFyIE89UzJlKF8sMik7cmV0dXJuIGguaG90LnRvUGh5c2ljYWxDb2x1bW4oaC5ob3QucHJvcFRvQ29sKE9bMV0pKX0pO3RoaXMuY2xlYXJDYWNoZShBcnJheS5mcm9t'@;
put 'KG5ldyBTZXQobSkpKX19LHtrZXk6Im9uQmVmb3JlQ29sdW1uUmVzaXplIix2YWx1ZTpmdW5jdGlvbihkLGgsbSl7dmFyIF89ZDtyZXR1cm4gbSYmKHRoaXMuY2FsY3VsYXRlQ29sdW1uc1dpZHRoKGgsdm9pZCAwLCEwKSxfPXRoaXMuZ2V0Q29sdW1uV2lkdGgoaCx2b2lkIDAsITEpKSxffX0s'@;
put 'e2tleToib25BZnRlckluaXQiLHZhbHVlOmZ1bmN0aW9uKCl7a0suZ2V0KHRoaXMpLmNhY2hlZENvbHVtbkhlYWRlcnM9dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKCl9fSx7a2V5OiJvbkFmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGUiLHZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBtPWhhKEQxKGQsZnVu'@;
put 'Y3Rpb24oXyl7dmFyIE87cmV0dXJuIGlvKG51bGw9PT0oTz1fLmFkZHJlc3MpfHx2b2lkIDA9PT1PP3ZvaWQgMDpPLmNvbCl9KSxmdW5jdGlvbihfKXtyZXR1cm4gXy5hZGRyZXNzLmNvbH0pO3RoaXMuY2xlYXJDYWNoZShBcnJheS5mcm9tKG5ldyBTZXQobSkpKX19LHtrZXk6ImRlc3Ryb3ki'@;
put 'LHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5naG9zdFRhYmxlLmNsZWFuKCksSDUodjMoYS5wcm90b3R5cGUpLCJkZXN0cm95Iix0aGlzKS5jYWxsKHRoaXMpfX1dLFt7a2V5OiJQTFVHSU5fS0VZIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTWt9fSx7a2V5OiJQTFVHSU5fUFJJT1JJVFkiLGdldDpm'@;
put 'dW5jdGlvbigpe3JldHVybiAxMH19LHtrZXk6IlNFVFRJTkdfS0VZUyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuITB9fSx7a2V5OiJDQUxDVUxBVElPTl9TVEVQIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gNTB9fSx7a2V5OiJTWU5DX0NBTENVTEFUSU9OX0xJTUlUIixnZXQ6ZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gNTB9fV0pLGF9KEdhKSxONT17aG9yaXpvbnRhbDoiaG9yaXpvbnRhbCIsdmVydGljYWw6InZlcnRpY2FsIn07ZnVuY3Rpb24gVzkobCl7cmV0dXJuKFc5PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMp'@;
put 'e3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24geDJlKGwsYyl7aWYobCl7aWYoInN0'@;
put 'cmluZyI9PXR5cGVvZiBsKXJldHVybiBFSyhsLGMpO3ZhciBhPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsKS5zbGljZSg4LC0xKTtpZigiT2JqZWN0Ij09PWEmJmwuY29uc3RydWN0b3ImJihhPWwuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1hfHwiU2V0Ij09PWEpcmV0dXJu'@;
put 'IEFycmF5LmZyb20obCk7aWYoIkFyZ3VtZW50cyI9PT1hfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChhKSlyZXR1cm4gRUsobCxjKX19ZnVuY3Rpb24gRUsobCxjKXsobnVsbD09Y3x8Yz5sLmxlbmd0aCkmJihjPWwubGVuZ3RoKTtmb3IodmFyIGE9'@;
put 'MCxmPW5ldyBBcnJheShjKTthPGM7YSsrKWZbYV09bFthXTtyZXR1cm4gZn1mdW5jdGlvbiBBMmUobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYu'@;
put 'd3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLEswdChmLmtleSksZil9fWZ1bmN0aW9uIEswdChsKXt2YXIgYz1mdW5jdGlvbiBxMHQobCxjKXtpZigib2JqZWN0IiE9PVc5KGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9p'@;
put 'ZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PVc5KGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVt'@;
put 'YmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1XOShjKT9jOlN0cmluZyhjKX1mdW5jdGlvbiBWNSgpe3JldHVybiBWNT10eXBlb2YgUmVmbGVjdDwidSImJlJlZmxlY3QuZ2V0P1JlZmxlY3QuZ2V0LmJpbmQoKTpmdW5jdGlvbihjLGEsZil7dmFyIGQ9ZnVuY3Rpb24gWDB0'@;
put 'KGwsYyl7Zm9yKDshT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGwsYykmJm51bGwhPT0obD15MyhsKSk7KTtyZXR1cm4gbH0oYyxhKTtpZihkKXt2YXIgaD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGQsYSk7cmV0dXJuIGguZ2V0P2guZ2V0LmNhbGwoYXJn'@;
put 'dW1lbnRzLmxlbmd0aDwzP2M6Zik6aC52YWx1ZX19LFY1LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiB4SyhsLGMpe3JldHVybih4Sz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihmLGQpe3JldHVybiBmLl9fcHJvdG9f'@;
put 'Xz1kLGZ9KShsLGMpfWZ1bmN0aW9uIFQyZShsKXtpZih2b2lkIDA9PT1sKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGx9ZnVuY3Rpb24geTMobCl7cmV0dXJuKHkzPU9i'@;
put 'amVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGEpe3JldHVybiBhLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpfSkobCl9dW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoIm1vZGlmeUF1dG9maWxsUmFuZ2UiKSx1by5n'@;
put 'ZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQXV0b2ZpbGwiKSx1by5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJBdXRvZmlsbCIpO3ZhciBPMmU9ImF1dG9maWxsIixyMXQ9WyJmaWxsSGFuZGxlIl0sYTF0PWZ1bmN0aW9uKGwpeyFmdW5jdGlvbiBKMHQobCxjKXtpZigiZnVu'@;
put 'Y3Rpb24iIT10eXBlb2YgYyYmbnVsbCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtsLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGMmJmMucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6bCx3'@;
put 'cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksYyYmeEsobCxjKX0oYSxsKTt2YXIgYz1mdW5jdGlvbiBRMHQobCl7dmFyIGM9ZnVuY3Rpb24gdDF0KCl7aWYodHlwZW9mIFJlZmxlY3Q+InUifHwh'@;
put 'UmVmbGVjdC5jb25zdHJ1Y3R8fFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sZnVuY3Rp'@;
put 'b24oKXt9KSksITB9Y2F0Y2h7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciBkLGY9eTMobCk7aWYoYyl7dmFyIGg9eTModGhpcykuY29uc3RydWN0b3I7ZD1SZWZsZWN0LmNvbnN0cnVjdChmLGFyZ3VtZW50cyxoKX1lbHNlIGQ9Zi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0'@;
put 'dXJuIGZ1bmN0aW9uIGUxdChsLGMpe2lmKGMmJigib2JqZWN0Ij09PVc5KGMpfHwiZnVuY3Rpb24iPT10eXBlb2YgYykpcmV0dXJuIGM7aWYodm9pZCAwIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVm'@;
put 'aW5lZCIpO3JldHVybiBUMmUobCl9KHRoaXMsZCl9fShhKTtmdW5jdGlvbiBhKGYpe3ZhciBkO3JldHVybiBmdW5jdGlvbiBHMHQobCxjKXtpZighKGwgaW5zdGFuY2VvZiBjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxh'@;
put 'KSwoZD1jLmNhbGwodGhpcyxmKSkuZXZlbnRNYW5hZ2VyPW5ldyBmcyhUMmUoZCkpLGQuYWRkaW5nU3RhcnRlZD0hMSxkLm1vdXNlRG93bk9uQ2VsbENvcm5lcj0hMSxkLm1vdXNlRHJhZ091dHNpZGU9ITEsZC5oYW5kbGVEcmFnZ2VkQ2VsbHM9MCxkLmRpcmVjdGlvbnM9W10sZC5hdXRvSW5z'@;
put 'ZXJ0Um93PSExLGR9cmV0dXJuIGZ1bmN0aW9uICQwdChsLGMsYSl7YyYmQTJlKGwucHJvdG90eXBlLGMpLGEmJkEyZShsLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShhLFt7a2V5OiJpc0VuYWJsZWQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIHRoaXMuaG90LmdldFNldHRpbmdzKCkuZmlsbEhhbmRsZX19LHtrZXk6ImVuYWJsZVBsdWdpbiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzO3RoaXMuZW5hYmxlZHx8KHRoaXMubWFwU2V0dGluZ3MoKSx0aGlzLnJlZ2lzdGVyRXZlbnRzKCksdGhpcy5hZGRIb29rKCJhZnRlck9u'@;
put 'Q2VsbENvcm5lck1vdXNlRG93biIsZnVuY3Rpb24oaCl7cmV0dXJuIGQub25BZnRlckNlbGxDb3JuZXJNb3VzZURvd24oaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyT25DZWxsQ29ybmVyRGJsQ2xpY2siLGZ1bmN0aW9uKGgpe3JldHVybiBkLm9uQ2VsbENvcm5lckRibENsaWNrKGgpfSksdGhp'@;
put 'cy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLGZ1bmN0aW9uKGgsbSl7cmV0dXJuIGQub25CZWZvcmVDZWxsTW91c2VPdmVyKG0pfSksVjUoeTMoYS5wcm90b3R5cGUpLCJlbmFibGVQbHVnaW4iLHRoaXMpLmNhbGwodGhpcykpfX0se2tleToidXBkYXRlUGx1Z2luIix2YWx1ZTpm'@;
put 'dW5jdGlvbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksVjUoeTMoYS5wcm90b3R5cGUpLCJ1cGRhdGVQbHVnaW4iLHRoaXMpLmNhbGwodGhpcyl9fSx7a2V5OiJkaXNhYmxlUGx1Z2luIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY2xlYXJNYXBwZWRTZXR0aW5n'@;
put 'cygpLFY1KHkzKGEucHJvdG90eXBlKSwiZGlzYWJsZVBsdWdpbiIsdGhpcykuY2FsbCh0aGlzKX19LHtrZXk6ImdldFNlbGVjdGlvbkRhdGEiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcyxoPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksbT1oLmdldFRvcFN0YXJ0Q29ybmVy'@;
put 'KCksXz1tLnJvdyxPPW0uY29sLFg9aC5nZXRCb3R0b21FbmRDb3JuZXIoKSxiZT10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5Q29weWFibGVSYW5nZSIsW3tzdGFydFJvdzpfLHN0YXJ0Q29sOk8sZW5kUm93Olgucm93LGVuZENvbDpYLmNvbH1dKSx4ZT1bXSxWZT1bXSxaZT1bXTtyZXR1cm4g'@;
put 'Um4oYmUsZnVuY3Rpb24obHQpe2Zvcih2YXIgZHQ9bHQuc3RhcnRSb3c7ZHQ8PWx0LmVuZFJvdztkdCs9MSktMT09PXhlLmluZGV4T2YoZHQpJiZ4ZS5wdXNoKGR0KTtmb3IodmFyIGd0PWx0LnN0YXJ0Q29sO2d0PD1sdC5lbmRDb2w7Z3QrPTEpLTE9PT1WZS5pbmRleE9mKGd0KSYmVmUucHVz'@;
put 'aChndCl9KSxSbih4ZSxmdW5jdGlvbihsdCl7dmFyIGR0PVtdO1JuKFZlLGZ1bmN0aW9uKGd0KXtkdC5wdXNoKGQuaG90LmdldENvcHlhYmxlRGF0YShsdCxndCkpfSksWmUucHVzaChkdCl9KSxaZX19LHtrZXk6ImZpbGxJbiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzO2lmKHRoaXMu'@;
put 'aG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0RmlsbCgpLmlzRW1wdHkoKSlyZXR1cm4hMTt2YXIgbT1mdW5jdGlvbiBVMHQobCxjKXtyZXR1cm4gZnVuY3Rpb24gVzB0KGwpe2lmKEFycmF5LmlzQXJyYXkobCkpcmV0dXJuIGx9KGwpfHxmdW5jdGlvbiBZMHQobCxjKXt2YXIgYT1udWxsPT1s'@;
put 'P251bGw6dHlwZW9mIFN5bWJvbDwidSImJmxbU3ltYm9sLml0ZXJhdG9yXXx8bFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPWEpe3ZhciBmLGQsaCxtLF89W10sTz0hMCxYPSExO3RyeXtpZihoPShhPWEuY2FsbChsKSkubmV4dCwwPT09Yyl7aWYoT2JqZWN0KGEpIT09YSlyZXR1cm47Tz0hMX1l'@;
put 'bHNlIGZvcig7IShPPShmPWguY2FsbChhKSkuZG9uZSkmJihfLnB1c2goZi52YWx1ZSksXy5sZW5ndGghPT1jKTtPPSEwKTt9Y2F0Y2goYWUpe1g9ITAsZD1hZX1maW5hbGx5e3RyeXtpZighTyYmbnVsbCE9YS5yZXR1cm4mJihtPWEucmV0dXJuKCksT2JqZWN0KG0pIT09bSkpcmV0dXJufWZp'@;
put 'bmFsbHl7aWYoWCl0aHJvdyBkfX1yZXR1cm4gX319KGwsYyl8fHgyZShsLGMpfHxmdW5jdGlvbiBaMHQoKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5v'@;
put 'bi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfSh0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5nZXRWaXN1YWxDb3JuZXJzKCksNCksXz1tWzBdLE89bVsxXSxYPW1bMl0sYWU9bVszXSxwZT10aGlzLmhvdC5n'@;
put 'ZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGJlPXBlLmdldFRvcFN0YXJ0Q29ybmVyKCkseGU9cGUuZ2V0Qm90dG9tRW5kQ29ybmVyKCk7dGhpcy5yZXNldFNlbGVjdGlvbk9mRHJhZ2dlZEFyZWEoKTt2YXIgVmU9W2JlLnJvdyxiZS5jb2wseGUucm93LHhlLmNvbF0sWmU9dGhpcy5ob3QucnVuSG9v'@;
put 'a3MoIm1vZGlmeUF1dG9maWxsUmFuZ2UiLFtNYXRoLm1pbihiZS5yb3csXyksTWF0aC5taW4oYmUuY29sLE8pLE1hdGgubWF4KHhlLnJvdyxYKSxNYXRoLm1heCh4ZS5jb2wsYWUpXSxWZSksbHQ9ZnVuY3Rpb24gSDB0KGwsYyxhKXt2YXIgZixkLGg7cmV0dXJuIGNbMF09PT1sWzBdJiZjWzFd'@;
put 'PGxbMV0/KGg9ImxlZnQiLGY9YShjWzBdLGNbMV0pLGQ9YShjWzJdLGxbMV0tMSkpOmNbMl09PT1sWzJdJiZjWzBdPT09bFswXSYmY1szXT5sWzNdPyhoPSJyaWdodCIsZj1hKGNbMF0sbFszXSsxKSxkPWEoY1syXSxjWzNdKSk6Y1swXTxsWzBdJiZjWzFdPT09bFsxXT8oaD0idXAiLGY9YShj'@;
put 'WzBdLGNbMV0pLGQ9YShsWzBdLTEsY1szXSkpOmNbMl0+bFsyXSYmY1sxXT09PWxbMV0mJihoPSJkb3duIixmPWEobFsyXSsxLGNbMV0pLGQ9YShjWzJdLGNbM10pKSxmJiZmLm5vcm1hbGl6ZSgpLGQmJmQubm9ybWFsaXplKCkse2RpcmVjdGlvbk9mRHJhZzpoLHN0YXJ0T2ZEcmFnQ29vcmRz'@;
put 'OmYsZW5kT2ZEcmFnQ29vcmRzOmR9fShWZSxaZSxmdW5jdGlvbihjcixDcil7cmV0dXJuIGQuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGNyLENyKX0pLGR0PWx0LmRpcmVjdGlvbk9mRHJhZyxndD1sdC5zdGFydE9mRHJhZ0Nvb3JkcyxqdD1sdC5lbmRPZkRyYWdDb29yZHM7aWYoZ3QmJmd0LnJv'@;
put 'dz4tMSYmZ3QuY29sPi0xKXt2YXIgcm49dGhpcy5nZXRTZWxlY3Rpb25EYXRhKCksWHQ9cGUuY2xvbmUoKSx5bj10aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKGd0LGd0LGp0KSxRbj10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQXV0b2ZpbGwiLHJuLFh0LHluLGR0KTtpZighMT09PVFuKXJl'@;
put 'dHVybiB0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5jbGVhcigpLHRoaXMuaG90LnJlbmRlcigpLCExO3ZhciBPcj1RbixWcj1RbjtpZihbInVwIiwibGVmdCJdLmluZGV4T2YoZHQpPi0xJiYoMSE9PVZyLmxlbmd0aHx8MCE9PVZyWzBdLmxlbmd0aCkpaWYoT3I9W10s'@;
put 'InVwIj09PWR0KWZvcih2YXIgWnI9anQucm93LWd0LnJvdysxLGlyPVpyJVZyLmxlbmd0aCxzaT0wO3NpPFpyO3NpKyspT3IucHVzaChWclsoc2krKFZyLmxlbmd0aC1pcikpJVZyLmxlbmd0aF0pO2Vsc2UgZm9yKHZhciBBcj1qdC5jb2wtZ3QuY29sKzEsRW49QXIlVnJbMF0ubGVuZ3RoLFRy'@;
put 'PTA7VHI8VnIubGVuZ3RoO1RyKyspe09yLnB1c2goW10pO2Zvcih2YXIgVm49MDtWbjxBcjtWbisrKU9yW1RyXS5wdXNoKFZyW1RyXVsoVm4rKFZyW1RyXS5sZW5ndGgtRW4pKSVWcltUcl0ubGVuZ3RoXSl9dGhpcy5ob3QucG9wdWxhdGVGcm9tQXJyYXkoZ3Qucm93LGd0LmNvbCxPcixqdC5y'@;
put 'b3csanQuY29sLCIiLmNvbmNhdCh0aGlzLnBsdWdpbk5hbWUsIi5maWxsIiksbnVsbCksdGhpcy5zZXRTZWxlY3Rpb24oWmUpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckF1dG9maWxsIixPcixYdCx5bixkdCksdGhpcy5ob3QucmVuZGVyKCl9ZWxzZSB0aGlzLmhvdC5fcmVmcmVzaEJvcmRl'@;
put 'cnMoKTtyZXR1cm4hMH19LHtrZXk6InJlZHVjZVNlbGVjdGlvbkFyZWFJZk5lZWRlZCIsdmFsdWU6ZnVuY3Rpb24oZCl7cmV0dXJuIGQucm93PDAmJihkLnJvdz0wKSxkLmNvbDwwJiYoZC5jb2w9MCksZH19LHtrZXk6ImdldENvb3Jkc09mRHJhZ0FuZERyb3BCb3JkZXJzIix2YWx1ZTpmdW5j'@;
put 'dGlvbihkKXt2YXIgaD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLG09aC5nZXRCb3R0b21FbmRDb3JuZXIoKSxfPWQ7aWYodGhpcy5kaXJlY3Rpb25zLmluY2x1ZGVzKE41LnZlcnRpY2FsKSYmdGhpcy5kaXJlY3Rpb25zLmluY2x1ZGVzKE41Lmhvcml6b250YWwpKXt2YXIgTz1o'@;
put 'LmdldFRvcFN0YXJ0Q29ybmVyKCk7KG0uY29sPD1kLmNvbHx8Ty5jb2w+PWQuY29sKSYmKF89dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobS5yb3csZC5jb2wpKSwobS5yb3c8ZC5yb3d8fE8ucm93PmQucm93KSYmKF89dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZC5yb3csbS5jb2wp'@;
put 'KX1lbHNlIGlmKHRoaXMuZGlyZWN0aW9ucy5pbmNsdWRlcyhONS52ZXJ0aWNhbCkpXz10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhkLnJvdyxtLmNvbCk7ZWxzZXtpZighdGhpcy5kaXJlY3Rpb25zLmluY2x1ZGVzKE41Lmhvcml6b250YWwpKXJldHVybjtfPXRoaXMuaG90Ll9jcmVhdGVD'@;
put 'ZWxsQ29vcmRzKG0ucm93LGQuY29sKX1yZXR1cm4gdGhpcy5yZWR1Y2VTZWxlY3Rpb25BcmVhSWZOZWVkZWQoXyl9fSx7a2V5OiJzaG93Qm9yZGVyIix2YWx1ZTpmdW5jdGlvbihkKXt2YXIgaD10aGlzLmdldENvb3Jkc09mRHJhZ0FuZERyb3BCb3JkZXJzKGQpO2gmJnRoaXMucmVkcmF3Qm9y'@;
put 'ZGVycyhoKX19LHtrZXk6ImFkZFJvdyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzO3RoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoZnVuY3Rpb24oKXtkLmhvdC5hbHRlcigiaW5zZXJ0X3Jvd19iZWxvdyIsdm9pZCAwLDEsIiIuY29uY2F0KGQucGx1Z2luTmFtZSwiLmZpbGwiKSksZC5h'@;
put 'ZGRpbmdTdGFydGVkPSExfSwyMDApfX0se2tleToiYWRkTmV3Um93SWZOZWVkZWQiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0RmlsbCgpLmlzRW1wdHkoKSYmITE9PT10aGlzLmFkZGluZ1N0YXJ0ZWQmJnRoaXMuYXV0b0luc2VydFJvdyl7'@;
put 'dmFyIGQ9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KCksaD10aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5nZXRWaXN1YWxDb3JuZXJzKCksbT10aGlzLmhvdC5jb3VudFJvd3MoKTtkWzJdPG0tMSYmaFsyXT09PW0tMSYmKHRoaXMuYWRkaW5nU3RhcnRlZD0hMCx0aGlz'@;
put 'LmFkZFJvdygpKX19fSx7a2V5OiJnZXRJbmRleE9mTGFzdEFkamFjZW50RmlsbGVkSW5Sb3ciLHZhbHVlOmZ1bmN0aW9uKGQpe2Zvcih2YXIgXyxoPXRoaXMuaG90LmdldERhdGEoKSxtPXRoaXMuaG90LmNvdW50Um93cygpLE89ZFsyXSsxO088bTtPKyspe2Zvcih2YXIgWD1kWzFdO1g8PWRb'@;
put 'M107WCsrKWlmKGhbT11bWF0pcmV0dXJuLTE7KGhbT11bZFsxXS0xXXx8aFtPXVtkWzNdKzFdKSYmKF89Tyl9cmV0dXJuIF99fSx7a2V5OiJhZGRTZWxlY3Rpb25Gcm9tU3RhcnRBcmVhVG9TcGVjaWZpY1Jvd0luZGV4Iix2YWx1ZTpmdW5jdGlvbihkLGgpe3RoaXMuaG90LnNlbGVjdGlvbi5o'@;
put 'aWdobGlnaHQuZ2V0RmlsbCgpLmNsZWFyKCkuYWRkKHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGRbMF0sZFsxXSkpLmFkZCh0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhoLGRbM10pKS5jb21taXQoKX19LHtrZXk6InNldFNlbGVjdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZCl7dmFyIGg7'@;
put 'KGg9dGhpcy5ob3QpLnNlbGVjdENlbGwuYXBwbHkoaCxmdW5jdGlvbiBWMHQobCl7cmV0dXJuIGZ1bmN0aW9uIHowdChsKXtpZihBcnJheS5pc0FycmF5KGwpKXJldHVybiBFSyhsKX0obCl8fGZ1bmN0aW9uIGowdChsKXtpZih0eXBlb2YgU3ltYm9sPCJ1IiYmbnVsbCE9bFtTeW1ib2wuaXRl'@;
put 'cmF0b3JdfHxudWxsIT1sWyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20obCl9KGwpfHx4MmUobCl8fGZ1bmN0aW9uIEIwdCgpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUg'@;
put 'aXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfShoYShkLGZ1bmN0aW9uKG0pe3JldHVybiBNYXRoLm1heChtLDApfSkpLmNvbmNhdChbITEsITFdKSl9fSx7a2V5OiJzZWxlY3RBZGphY2VudCIsdmFsdWU6ZnVu'@;
put 'Y3Rpb24oKXt2YXIgZD10aGlzLmhvdC5nZXRTZWxlY3RlZExhc3QoKSxoPXRoaXMuZ2V0SW5kZXhPZkxhc3RBZGphY2VudEZpbGxlZEluUm93KGQpO3JldHVybi0xIT09aCYmdm9pZCAwIT09aCYmKHRoaXMuYWRkU2VsZWN0aW9uRnJvbVN0YXJ0QXJlYVRvU3BlY2lmaWNSb3dJbmRleChkLGgp'@;
put 'LCEwKX19LHtrZXk6InJlc2V0U2VsZWN0aW9uT2ZEcmFnZ2VkQXJlYSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmhhbmRsZURyYWdnZWRDZWxscz0wLHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0RmlsbCgpLmNsZWFyKCl9fSx7a2V5OiJyZWRyYXdCb3JkZXJzIix2YWx1ZTpmdW5j'@;
put 'dGlvbihkKXt0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5jbGVhcigpLmFkZCh0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmZyb20pLmFkZCh0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLnRvKS5hZGQoZCkuY29tbWl0KCksdGhpcy5ob3Qudmll'@;
put 'dy5yZW5kZXIoKX19LHtrZXk6ImdldElmTW91c2VXYXNEcmFnZ2VkT3V0c2lkZSIsdmFsdWU6ZnVuY3Rpb24oZCl7dmFyIGg9dGhpcy5ob3Qucm9vdERvY3VtZW50LmRvY3VtZW50RWxlbWVudCxtPWl1KHRoaXMuaG90LnRhYmxlKS50b3AtKHRoaXMuaG90LnJvb3RXaW5kb3cucGFnZVlPZmZz'@;
put 'ZXR8fGguc2Nyb2xsVG9wKStjcyh0aGlzLmhvdC50YWJsZSksXz1pdSh0aGlzLmhvdC50YWJsZSkubGVmdC0odGhpcy5ob3Qucm9vdFdpbmRvdy5wYWdlWE9mZnNldHx8aC5zY3JvbGxMZWZ0KStTbCh0aGlzLmhvdC50YWJsZSk7cmV0dXJuIGQuY2xpZW50WT5tJiZkLmNsaWVudFg8PV99fSx7'@;
put 'a2V5OiJyZWdpc3RlckV2ZW50cyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLGg9dGhpcy5ob3Qucm9vdERvY3VtZW50LmRvY3VtZW50RWxlbWVudDt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGgsIm1vdXNldXAiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Nb3VzZVVw'@;
put 'KCl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGgsIm1vdXNlbW92ZSIsZnVuY3Rpb24obSl7cmV0dXJuIGQub25Nb3VzZU1vdmUobSl9KX19LHtrZXk6Im9uQ2VsbENvcm5lckRibENsaWNrIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc2VsZWN0QWRqYWNlbnQoKSYmdGhp'@;
put 'cy5maWxsSW4oKX19LHtrZXk6Im9uQWZ0ZXJDZWxsQ29ybmVyTW91c2VEb3duIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuaGFuZGxlRHJhZ2dlZENlbGxzPTEsdGhpcy5tb3VzZURvd25PbkNlbGxDb3JuZXI9ITB9fSx7a2V5OiJvbkJlZm9yZUNlbGxNb3VzZU92ZXIiLHZhbHVlOmZ1bmN0aW9u'@;
put 'KGQpe3RoaXMubW91c2VEb3duT25DZWxsQ29ybmVyJiYhdGhpcy5ob3Qudmlldy5pc01vdXNlRG93bigpJiZ0aGlzLmhhbmRsZURyYWdnZWRDZWxscyYmKHRoaXMuaGFuZGxlRHJhZ2dlZENlbGxzKz0xLHRoaXMuc2hvd0JvcmRlcihkKSx0aGlzLmFkZE5ld1Jvd0lmTmVlZGVkKCkpfX0se2tl'@;
put 'eToib25Nb3VzZVVwIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuaGFuZGxlRHJhZ2dlZENlbGxzJiYodGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHM+MSYmdGhpcy5maWxsSW4oKSx0aGlzLmhhbmRsZURyYWdnZWRDZWxscz0wLHRoaXMubW91c2VEb3duT25DZWxsQ29ybmVyPSExKX19LHtrZXk6Im9u'@;
put 'TW91c2VNb3ZlIix2YWx1ZTpmdW5jdGlvbihkKXt2YXIgaD10aGlzLmdldElmTW91c2VXYXNEcmFnZ2VkT3V0c2lkZShkKTshMT09PXRoaXMuYWRkaW5nU3RhcnRlZCYmdGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHM+MCYmaD8odGhpcy5tb3VzZURyYWdPdXRzaWRlPSEwLHRoaXMuYWRkaW5nU3Rh'@;
put 'cnRlZD0hMCk6dGhpcy5tb3VzZURyYWdPdXRzaWRlPSExLHRoaXMubW91c2VEcmFnT3V0c2lkZSYmdGhpcy5hdXRvSW5zZXJ0Um93JiZ0aGlzLmFkZFJvdygpfX0se2tleToiY2xlYXJNYXBwZWRTZXR0aW5ncyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmRpcmVjdGlvbnMubGVuZ3RoPTAsdGhp'@;
put 'cy5hdXRvSW5zZXJ0Um93PSExfX0se2tleToibWFwU2V0dGluZ3MiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9ZnVuY3Rpb24gTjB0KGwpe3ZhciBjPXt9O3JldHVybiEwPT09bD8oYy5kaXJlY3Rpb25zPU9iamVjdC5rZXlzKE41KSxjLmF1dG9JbnNlcnRSb3c9ITApOnBhKGwpPyhjLmF1dG9J'@;
put 'bnNlcnRSb3c9ISFpbyhsLmF1dG9JbnNlcnRSb3cpJiZsLmRpcmVjdGlvbiE9PU41Lmhvcml6b250YWwmJmwuYXV0b0luc2VydFJvdyxjLmRpcmVjdGlvbnM9aW8obC5kaXJlY3Rpb24pP1tsLmRpcmVjdGlvbl06T2JqZWN0LmtleXMoTjUpKToic3RyaW5nIj09dHlwZW9mIGw/KGMuZGlyZWN0'@;
put 'aW9ucz1bbF0sYy5hdXRvSW5zZXJ0Um93PSEwKTooYy5kaXJlY3Rpb25zPVtdLGMuYXV0b0luc2VydFJvdz0hMSksY30odGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maWxsSGFuZGxlKTt0aGlzLmRpcmVjdGlvbnM9ZC5kaXJlY3Rpb25zLHRoaXMuYXV0b0luc2VydFJvdz1kLmF1dG9JbnNlcnRS'@;
put 'b3d9fSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbigpe1Y1KHkzKGEucHJvdG90eXBlKSwiZGVzdHJveSIsdGhpcykuY2FsbCh0aGlzKX19XSxbe2tleToiUExVR0lOX0tFWSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE8yZX19LHtrZXk6IlBMVUdJTl9QUklPUklUWSIsZ2V0OmZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIDIwfX0se2tleToiU0VUVElOR19LRVlTIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5bTzJlXS5jb25jYXQocjF0KX19XSksYX0oR2EpO2Z1bmN0aW9uIEc5KGwpe3JldHVybihHOT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5p'@;
put 'dGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIEQy'@;
put 'ZShsLGMpeyhudWxsPT1jfHxjPmwubGVuZ3RoKSYmKGM9bC5sZW5ndGgpO2Zvcih2YXIgYT0wLGY9bmV3IEFycmF5KGMpO2E8YzthKyspZlthXT1sW2FdO3JldHVybiBmfWZ1bmN0aW9uIEkyZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJs'@;
put 'ZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwscDF0KGYua2V5KSxmKX19ZnVuY3Rpb24gcDF0KGwpe3ZhciBjPWZ1bmN0aW9uIG0xdChsLGMpe2lmKCJvYmplY3QiIT09RzkobCl8'@;
put 'fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09RzkoZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVy'@;
put 'biBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PUc5KGMpP2M6U3RyaW5nKGMpfWZ1bmN0aW9uICQ5KCl7cmV0dXJuICQ5PXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdC5nZXQ/'@;
put 'UmVmbGVjdC5nZXQuYmluZCgpOmZ1bmN0aW9uKGMsYSxmKXt2YXIgZD1mdW5jdGlvbiBnMXQobCxjKXtmb3IoOyFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobCxjKSYmbnVsbCE9PShsPUI0KGwpKTspO3JldHVybiBsfShjLGEpO2lmKGQpe3ZhciBoPU9iamVjdC5nZXRP'@;
put 'd25Qcm9wZXJ0eURlc2NyaXB0b3IoZCxhKTtyZXR1cm4gaC5nZXQ/aC5nZXQuY2FsbChhcmd1bWVudHMubGVuZ3RoPDM/YzpmKTpoLnZhbHVlfX0sJDkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIEFLKGwsYyl7cmV0dXJuKEFLPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Qu'@;
put 'c2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGYsZCl7cmV0dXJuIGYuX19wcm90b19fPWQsZn0pKGwsYyl9ZnVuY3Rpb24gQjQobCl7cmV0dXJuKEI0PU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGEpe3JldHVybiBhLl9f'@;
put 'cHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpfSkobCl9dmFyIFNMPSJhdXRvUm93U2l6ZSIsTTF0PWZ1bmN0aW9uKGwpeyFmdW5jdGlvbiB2MXQobCxjKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyYmbnVsbCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lv'@;
put 'biBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtsLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGMmJmMucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6bCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlw'@;
put 'ZSIse3dyaXRhYmxlOiExfSksYyYmQUsobCxjKX0oYSxsKTt2YXIgYz1mdW5jdGlvbiB5MXQobCl7dmFyIGM9ZnVuY3Rpb24gdzF0KCl7aWYodHlwZW9mIFJlZmxlY3Q+InUifHwhUmVmbGVjdC5jb25zdHJ1Y3R8fFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9u'@;
put 'Ij09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sZnVuY3Rpb24oKXt9KSksITB9Y2F0Y2h7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciBkLGY9QjQobCk7'@;
put 'aWYoYyl7dmFyIGg9QjQodGhpcykuY29uc3RydWN0b3I7ZD1SZWZsZWN0LmNvbnN0cnVjdChmLGFyZ3VtZW50cyxoKX1lbHNlIGQ9Zi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uIGIxdChsLGMpe2lmKGMmJigib2JqZWN0Ij09PUc5KGMpfHwiZnVuY3Rpb24iPT10eXBl'@;
put 'b2YgYykpcmV0dXJuIGM7aWYodm9pZCAwIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbiBfMXQobCl7aWYodm9pZCAwPT09bCl0aHJvdyBuZXcgUmVmZXJlbmNl'@;
put 'RXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBsfShsKX0odGhpcyxkKX19KGEpO2Z1bmN0aW9uIGEoZil7dmFyIGQ7cmV0dXJuIGZ1bmN0aW9uIGQxdChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93'@;
put 'IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGEpLChkPWMuY2FsbCh0aGlzLGYpKS5yb3dIZWlnaHRzTWFwPXZvaWQgMCxkLmhlYWRlckhlaWdodD1udWxsLGQuZ2hvc3RUYWJsZT1uZXcgU0soZC5ob3QpLGQuc2FtcGxlc0dlbmVyYXRv'@;
put 'cj1uZXcgQzJlKGZ1bmN0aW9uKGgsbSl7dmFyIF87cmV0dXJuIGg+PTA/Xz1kLmhvdC5nZXREYXRhQXRDZWxsKGgsbSk6LTE9PT1oJiYoXz1kLmhvdC5nZXRDb2xIZWFkZXIobSkpLHt2YWx1ZTpffX0pLGQuZmlyc3RDYWxjdWxhdGlvbj0hMCxkLmluUHJvZ3Jlc3M9ITEsZC5tZWFzdXJlZFJv'@;
put 'd3M9MCxkLnJvd0hlaWdodHNNYXA9bmV3IEY0LGQuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKCJhdXRvUm93U2l6ZSIsZC5yb3dIZWlnaHRzTWFwKSxkLmFkZEhvb2soImJlZm9yZVJvd1Jlc2l6ZSIsZnVuY3Rpb24oaCxtLF8pe3JldHVybiBkLm9uQmVmb3JlUm93UmVzaXplKGgs'@;
put 'bSxfKX0pLGR9cmV0dXJuIGZ1bmN0aW9uIGgxdChsLGMsYSl7YyYmSTJlKGwucHJvdG90eXBlLGMpLGEmJkkyZShsLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShhLFt7a2V5OiJpc0VuYWJsZWQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9'@;
put 'dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtTTF07cmV0dXJuITA9PT1kfHxwYShkKX19LHtrZXk6ImVuYWJsZVBsdWdpbiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzO3RoaXMuZW5hYmxlZHx8KHRoaXMuc2V0U2FtcGxpbmdPcHRpb25zKCksdGhpcy5hZGRIb29rKCJhZnRlckxvYWREYXRh'@;
put 'IixmdW5jdGlvbigpe3JldHVybiBkLm9uQWZ0ZXJMb2FkRGF0YS5hcHBseShkLGFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUNoYW5nZVJlbmRlciIsZnVuY3Rpb24oaCl7cmV0dXJuIGQub25CZWZvcmVDaGFuZ2UoaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUNvbHVtblJlc2l6'@;
put 'ZSIsZnVuY3Rpb24oKXtyZXR1cm4gZC5yZWNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQoKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlVmlld1JlbmRlciIsZnVuY3Rpb24oaCl7cmV0dXJuIGQub25CZWZvcmVWaWV3UmVuZGVyKGgpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlSb3dIZWlnaHQiLGZ1bmN0'@;
put 'aW9uKGgsbSl7cmV0dXJuIGQuZ2V0Um93SGVpZ2h0KG0saCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvbHVtbkhlYWRlckhlaWdodCIsZnVuY3Rpb24oKXtyZXR1cm4gZC5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKX0pLCQ5KEI0KGEucHJvdG90eXBlKSwiZW5hYmxlUGx1Z2luIix0aGlzKS5j'@;
put 'YWxsKHRoaXMpKX19LHtrZXk6ImRpc2FibGVQbHVnaW4iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpczt0aGlzLmhlYWRlckhlaWdodD1udWxsLCQ5KEI0KGEucHJvdG90eXBlKSwiZGlzYWJsZVBsdWdpbiIsdGhpcykuY2FsbCh0aGlzKSx0aGlzLmFkZEhvb2soImJlZm9yZVJvd1Jlc2l6'@;
put 'ZSIsZnVuY3Rpb24oaCxtLF8pe3JldHVybiBkLm9uQmVmb3JlUm93UmVzaXplKGgsbSxfKX0pfX0se2tleToiY2FsY3VsYXRlUm93c0hlaWdodCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLGg9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRz'@;
put 'WzBdOntmcm9tOjAsdG86dGhpcy5ob3QuY291bnRSb3dzKCktMX0sbT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudENvbHMoKS0xfSxfPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJn'@;
put 'dW1lbnRzWzJdJiZhcmd1bWVudHNbMl0sTz0ibnVtYmVyIj09dHlwZW9mIGg/e2Zyb206aCx0bzpofTpoLFg9Im51bWJlciI9PXR5cGVvZiBtP3tmcm9tOm0sdG86bX06bTtpZihudWxsIT09dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKDApKXt2YXIgYWU9dGhpcy5zYW1wbGVzR2VuZXJhdG9yLmdl'@;
put 'bmVyYXRlUm93U2FtcGxlcygtMSxYKTt0aGlzLmdob3N0VGFibGUuYWRkQ29sdW1uSGVhZGVyc1JvdyhhZS5nZXQoLTEpKX1fbyhPLmZyb20sTy50byxmdW5jdGlvbihwZSl7KF98fG51bGw9PT1kLnJvd0hlaWdodHNNYXAuZ2V0VmFsdWVBdEluZGV4KHBlKSkmJlJuKGQuc2FtcGxlc0dlbmVy'@;
put 'YXRvci5nZW5lcmF0ZVJvd1NhbXBsZXMocGUsWCksZnVuY3Rpb24oeGUpe3ZhciBWZT1mdW5jdGlvbiBsMXQobCxjKXtyZXR1cm4gZnVuY3Rpb24gZjF0KGwpe2lmKEFycmF5LmlzQXJyYXkobCkpcmV0dXJuIGx9KGwpfHxmdW5jdGlvbiBjMXQobCxjKXt2YXIgYT1udWxsPT1sP251bGw6dHlw'@;
put 'ZW9mIFN5bWJvbDwidSImJmxbU3ltYm9sLml0ZXJhdG9yXXx8bFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPWEpe3ZhciBmLGQsaCxtLF89W10sTz0hMCxYPSExO3RyeXtpZihoPShhPWEuY2FsbChsKSkubmV4dCwwPT09Yyl7aWYoT2JqZWN0KGEpIT09YSlyZXR1cm47Tz0hMX1lbHNlIGZvcig7'@;
put 'IShPPShmPWguY2FsbChhKSkuZG9uZSkmJihfLnB1c2goZi52YWx1ZSksXy5sZW5ndGghPT1jKTtPPSEwKTt9Y2F0Y2goYWUpe1g9ITAsZD1hZX1maW5hbGx5e3RyeXtpZighTyYmbnVsbCE9YS5yZXR1cm4mJihtPWEucmV0dXJuKCksT2JqZWN0KG0pIT09bSkpcmV0dXJufWZpbmFsbHl7aWYo'@;
put 'WCl0aHJvdyBkfX1yZXR1cm4gX319KGwsYyl8fGZ1bmN0aW9uIHUxdChsLGMpe2lmKGwpe2lmKCJzdHJpbmciPT10eXBlb2YgbClyZXR1cm4gRDJlKGwsYyk7dmFyIGE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGwpLnNsaWNlKDgsLTEpO2lmKCJPYmplY3QiPT09YSYmbC5jb25z'@;
put 'dHJ1Y3RvciYmKGE9bC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PWF8fCJTZXQiPT09YSlyZXR1cm4gQXJyYXkuZnJvbShsKTtpZigiQXJndW1lbnRzIj09PWF8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KGEpKXJldHVybiBEMmUobCxjKX19KGws'@;
put 'Yyl8fGZ1bmN0aW9uIHMxdCgpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRv'@;
put 'cl0oKSBtZXRob2QuIil9KCl9KHhlLDIpO3JldHVybiBkLmdob3N0VGFibGUuYWRkUm93KFZlWzBdLFZlWzFdKX0pfSksdGhpcy5naG9zdFRhYmxlLnJvd3MubGVuZ3RoJiYodGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oZnVuY3Rpb24oKXtkLmdob3N0VGFibGUuZ2V0SGVpZ2h0cyhmdW5jdGlv'@;
put 'bihwZSxiZSl7cGU8MD9kLmhlYWRlckhlaWdodD1iZTpkLnJvd0hlaWdodHNNYXAuc2V0VmFsdWVBdEluZGV4KGQuaG90LnRvUGh5c2ljYWxSb3cocGUpLGJlKX0pfSwhMCksdGhpcy5tZWFzdXJlZFJvd3M9Ty50bysxLHRoaXMuZ2hvc3RUYWJsZS5jbGVhbigpKX19LHtrZXk6ImNhbGN1bGF0'@;
put 'ZUFsbFJvd3NIZWlnaHQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcyxoPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7ZnJvbTowLHRvOnRoaXMuaG90LmNvdW50Q29scygpLTF9LG09MCxfPXRoaXMuaG90LmNvdW50Um93cygpLTEs'@;
put 'Tz1udWxsO3RoaXMuaW5Qcm9ncmVzcz0hMDt2YXIgYWU9dGhpcy5nZXRTeW5jQ2FsY3VsYXRpb25MaW1pdCgpO3RoaXMuZmlyc3RDYWxjdWxhdGlvbiYmYWU+PTAmJih0aGlzLmNhbGN1bGF0ZVJvd3NIZWlnaHQoe2Zyb206MCx0bzphZX0saCksdGhpcy5maXJzdENhbGN1bGF0aW9uPSExLG09'@;
put 'YWUrMSksbTxfP2Z1bmN0aW9uIHBlKCl7aWYoIWQuaG90KXJldHVybiBMUyhPKSx2b2lkKGQuaW5Qcm9ncmVzcz0hMSk7ZC5jYWxjdWxhdGVSb3dzSGVpZ2h0KHtmcm9tOm0sdG86TWF0aC5taW4obSthLkNBTENVTEFUSU9OX1NURVAsXyl9LGgpLChtPW0rYS5DQUxDVUxBVElPTl9TVEVQKzEp'@;
put 'PF8/Tz1CSShwZSk6KExTKE8pLGQuaW5Qcm9ncmVzcz0hMSxkLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSghMCksZC5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkubmVlZEZ1bGxSZW5kZXImJmQuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMuaW5saW5lU3Rh'@;
put 'cnRPdmVybGF5LmNsb25lLmRyYXcoKSl9KCk6KHRoaXMuaW5Qcm9ncmVzcz0hMSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSghMSkpfX0se2tleToic2V0U2FtcGxpbmdPcHRpb25zIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXMuaG90LmdldFNldHRpbmdzKClbU0xdLGg9'@;
put 'ZCYmU3MoZCwic2FtcGxpbmdSYXRpbyIpP2Quc2FtcGxpbmdSYXRpbzp2b2lkIDAsbT1kJiZTcyhkLCJhbGxvd1NhbXBsZUR1cGxpY2F0ZXMiKT9kLmFsbG93U2FtcGxlRHVwbGljYXRlczp2b2lkIDA7aCYmIWlzTmFOKGgpJiZ0aGlzLnNhbXBsZXNHZW5lcmF0b3Iuc2V0U2FtcGxlQ291bnQo'@;
put 'cGFyc2VJbnQoaCwxMCkpLG0mJnRoaXMuc2FtcGxlc0dlbmVyYXRvci5zZXRBbGxvd0R1cGxpY2F0ZXMobSl9fSx7a2V5OiJyZWNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQiLHZhbHVlOmZ1bmN0aW9uKCl7TjcodGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZS5UQUJMRSkmJih0aGlzLmNsZWFyQ2Fj'@;
put 'aGUoKSx0aGlzLmNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQoKSl9fSx7a2V5OiJnZXRTeW5jQ2FsY3VsYXRpb25MaW1pdCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW1NMXSxoPWEuU1lOQ19DQUxDVUxBVElPTl9MSU1JVCxtPXRoaXMuaG90LmNvdW50Um93'@;
put 'cygpLTE7cmV0dXJuIHBhKGQpJiYoZ1koaD1kLnN5bmNMaW1pdCk/aD1ZWShtLGgpOmg+Pj0wKSxNYXRoLm1pbihoLG0pfX0se2tleToiZ2V0Um93SGVpZ2h0Iix2YWx1ZTpmdW5jdGlvbihkKXt2YXIgaD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVu'@;
put 'dHNbMV06dm9pZCAwLG09ZDwwP3RoaXMuaGVhZGVySGVpZ2h0OnRoaXMucm93SGVpZ2h0c01hcC5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbFJvdyhkKSksXz1oO3JldHVybiBudWxsIT09bSYmbT4oaHx8MCkmJihfPW0pLF99fSx7a2V5OiJnZXRDb2x1bW5IZWFkZXJIZWln'@;
put 'aHQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGVhZGVySGVpZ2h0fX0se2tleToiZ2V0Rmlyc3RWaXNpYmxlUm93Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXMuaG90LnZpZXcuX3d0O3JldHVybiBkLnd0Vmlld3BvcnQucm93c1Zpc2libGVDYWxjdWxhdG9yP2Qud3RUYWJs'@;
put 'ZS5nZXRGaXJzdFZpc2libGVSb3coKTpkLnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3I/ZC53dFRhYmxlLmdldEZpcnN0UmVuZGVyZWRSb3coKTotMX19LHtrZXk6ImdldExhc3RWaXNpYmxlUm93Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXMuaG90LnZpZXcuX3d0O3JldHVy'@;
put 'biBkLnd0Vmlld3BvcnQucm93c1Zpc2libGVDYWxjdWxhdG9yP2Qud3RUYWJsZS5nZXRMYXN0VmlzaWJsZVJvdygpOmQud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvcj9kLnd0VGFibGUuZ2V0TGFzdFJlbmRlcmVkUm93KCk6LTF9fSx7a2V5OiJjbGVhckNhY2hlIix2YWx1ZTpmdW5j'@;
put 'dGlvbigpe3RoaXMuaGVhZGVySGVpZ2h0PW51bGwsdGhpcy5yb3dIZWlnaHRzTWFwLmluaXQoKX19LHtrZXk6ImNsZWFyQ2FjaGVCeVJhbmdlIix2YWx1ZTpmdW5jdGlvbihkKXt2YXIgaD10aGlzLG09Im51bWJlciI9PXR5cGVvZiBkP3tmcm9tOmQsdG86ZH06ZCxfPW0uZnJvbSxPPW0udG87'@;
put 'dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oZnVuY3Rpb24oKXtfbyhNYXRoLm1pbihfLE8pLE1hdGgubWF4KF8sTyksZnVuY3Rpb24oWCl7aC5yb3dIZWlnaHRzTWFwLnNldFZhbHVlQXRJbmRleChYLG51bGwpfSl9LCEwKX19LHtrZXk6ImlzTmVlZFJlY2FsY3VsYXRlIix2YWx1ZTpmdW5jdGlv'@;
put 'bigpe3JldHVybiEhRDEodGhpcy5yb3dIZWlnaHRzTWFwLmdldFZhbHVlcygpLnNsaWNlKDAsdGhpcy5tZWFzdXJlZFJvd3MpLGZ1bmN0aW9uKGQpe3JldHVybiBudWxsPT09ZH0pLmxlbmd0aH19LHtrZXk6Im9uQmVmb3JlVmlld1JlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlz'@;
put 'LmhvdC5yZW5kZXJDYWxsLGg9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NCb3R0b20sbT10aGlzLmdldEZpcnN0VmlzaWJsZVJvdygpLF89dGhpcy5nZXRMYXN0VmlzaWJsZVJvdygpO2lmKC0xIT09bSYmLTEhPT1fKXtpZih0aGlzLmNhbGN1bGF0ZVJvd3NIZWlnaHQoe2Zyb206'@;
put 'bSx0bzpffSx2b2lkIDAsZCksaCl7dmFyIE89dGhpcy5ob3QuY291bnRSb3dzKCktMTt0aGlzLmNhbGN1bGF0ZVJvd3NIZWlnaHQoe2Zyb206Ty1oLHRvOk99KX10aGlzLmlzTmVlZFJlY2FsY3VsYXRlKCkmJiF0aGlzLmluUHJvZ3Jlc3MmJnRoaXMuY2FsY3VsYXRlQWxsUm93c0hlaWdodCgp'@;
put 'fX19LHtrZXk6Im9uQmVmb3JlUm93TW92ZSIsdmFsdWU6ZnVuY3Rpb24oZCxoKXt0aGlzLmNsZWFyQ2FjaGVCeVJhbmdlKHtmcm9tOmQsdG86aH0pLHRoaXMuY2FsY3VsYXRlQWxsUm93c0hlaWdodCgpfX0se2tleToib25CZWZvcmVSb3dSZXNpemUiLHZhbHVlOmZ1bmN0aW9uKGQsaCxtKXt2'@;
put 'YXIgXz1kO3JldHVybiBtJiYodGhpcy5jYWxjdWxhdGVSb3dzSGVpZ2h0KGgsdm9pZCAwLCEwKSxfPXRoaXMuZ2V0Um93SGVpZ2h0KGgpKSxffX0se2tleToib25BZnRlckxvYWREYXRhIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXM7dGhpcy5ob3Qudmlldz90aGlzLnJlY2FsY3VsYXRl'@;
put 'QWxsUm93c0hlaWdodCgpOnNldFRpbWVvdXQoZnVuY3Rpb24oKXtkLmhvdCYmZC5yZWNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQoKX0sMCl9fSx7a2V5OiJvbkJlZm9yZUNoYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZCl7dmFyIGg9bnVsbDsxPT09ZC5sZW5ndGg/aD1kWzBdWzBdOmQubGVuZ3RoPjEm'@;
put 'JihoPXtmcm9tOmRbMF1bMF0sdG86ZFtkLmxlbmd0aC0xXVswXX0pLG51bGwhPT1oJiZ0aGlzLmNsZWFyQ2FjaGVCeVJhbmdlKGgpfX0se2tleToiZGVzdHJveSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmdob3N0VGFibGUuY2xlYW4oKSwkOShCNChhLnByb3RvdHlwZSksImRlc3Ryb3kiLHRo'@;
put 'aXMpLmNhbGwodGhpcyl9fV0sW3trZXk6IlBMVUdJTl9LRVkiLGdldDpmdW5jdGlvbigpe3JldHVybiBTTH19LHtrZXk6IlBMVUdJTl9QUklPUklUWSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDQwfX0se2tleToiU0VUVElOR19LRVlTIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hMH19LHtrZXk6'@;
put 'IkNBTENVTEFUSU9OX1NURVAiLGdldDpmdW5jdGlvbigpe3JldHVybiA1MH19LHtrZXk6IlNZTkNfQ0FMQ1VMQVRJT05fTElNSVQiLGdldDpmdW5jdGlvbigpe3JldHVybiA1MDB9fV0pLGF9KEdhKSxSMmU9bmV3IE1hcChbWyJpbmRleGVzU2VxdWVuY2UiLHtnZXRMaXN0V2l0aEluc2VydGVk'@;
put 'SXRlbXM6VVcsZ2V0TGlzdFdpdGhSZW1vdmVkSXRlbXM6TE19XSxbInBoeXNpY2FsbHlJbmRleGVkIix7Z2V0TGlzdFdpdGhJbnNlcnRlZEl0ZW1zOktXLGdldExpc3RXaXRoUmVtb3ZlZEl0ZW1zOnFXfV1dKSxMMmU9ZnVuY3Rpb24oYyl7aWYoITE9PT1SMmUuaGFzKGMpKXRocm93IG5ldyBF'@;
put 'cnJvcigiQWx0ZXIgc3RyYXRlZ3kgd2l0aCBJRCAnIi5jb25jYXQoYywiJyBkb2VzIG5vdCBleGlzdC4iKSk7cmV0dXJuIFIyZS5nZXQoYyl9O2Z1bmN0aW9uIEs5KGwpe3JldHVybihLOT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRv'@;
put 'cj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIFAyZShsLGMp'@;
put 'e2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwseDF0KGYua2V5KSxmKX19ZnVuY3Rpb24g'@;
put 'eDF0KGwpe3ZhciBjPWZ1bmN0aW9uIEExdChsLGMpe2lmKCJvYmplY3QiIT09SzkobCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09SzkoZikpcmV0'@;
put 'dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PUs5KGMpP2M6U3RyaW5nKGMpfWZ1bmN0'@;
put 'aW9uIGtrKCl7cmV0dXJuIGtrPXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdC5nZXQ/UmVmbGVjdC5nZXQuYmluZCgpOmZ1bmN0aW9uKGMsYSxmKXt2YXIgZD1mdW5jdGlvbiBUMXQobCxjKXtmb3IoOyFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobCxjKSYmbnVsbCE9'@;
put 'PShsPUI1KGwpKTspO3JldHVybiBsfShjLGEpO2lmKGQpe3ZhciBoPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZCxhKTtyZXR1cm4gaC5nZXQ/aC5nZXQuY2FsbChhcmd1bWVudHMubGVuZ3RoPDM/YzpmKTpoLnZhbHVlfX0sa2suYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0'@;
put 'aW9uIFRLKGwsYyl7cmV0dXJuKFRLPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGYsZCl7cmV0dXJuIGYuX19wcm90b19fPWQsZn0pKGwsYyl9ZnVuY3Rpb24gQjUobCl7cmV0dXJuKEI1PU9iamVjdC5zZXRQcm90b3R5cGVPZj9P'@;
put 'YmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGEpe3JldHVybiBhLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpfSkobCl9dmFyIEYyZT1MMmUoInBoeXNpY2FsbHlJbmRleGVkIiksUDF0PUYyZS5nZXRMaXN0V2l0aEluc2VydGVkSXRlbXMsRjF0PUYyZS5n'@;
put 'ZXRMaXN0V2l0aFJlbW92ZWRJdGVtcyxIMXQ9ZnVuY3Rpb24obCl7IWZ1bmN0aW9uIE8xdChsLGMpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjJiZudWxsIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIp'@;
put 'O2wucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYyYmYy5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpsLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxjJiZUSyhsLGMpfShhLGwpO3Zh'@;
put 'ciBjPWZ1bmN0aW9uIEQxdChsKXt2YXIgYz1mdW5jdGlvbiBMMXQoKXtpZih0eXBlb2YgUmVmbGVjdD4idSJ8fCFSZWZsZWN0LmNvbnN0cnVjdHx8UmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBC'@;
put 'b29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSxmdW5jdGlvbigpe30pKSwhMH1jYXRjaHtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGQsZj1CNShsKTtpZihjKXt2YXIgaD1CNSh0aGlzKS5jb25zdHJ1Y3RvcjtkPVJl'@;
put 'ZmxlY3QuY29uc3RydWN0KGYsYXJndW1lbnRzLGgpfWVsc2UgZD1mLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24gSTF0KGwsYyl7aWYoYyYmKCJvYmplY3QiPT09SzkoYyl8fCJmdW5jdGlvbiI9PXR5cGVvZiBjKSlyZXR1cm4gYztpZih2b2lkIDAhPT1jKXRocm93IG5l'@;
put 'dyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uIFIxdChsKXtpZih2b2lkIDA9PT1sKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAt'@;
put 'IHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGx9KGwpfSh0aGlzLGQpfX0oYSk7ZnVuY3Rpb24gYSgpe3JldHVybiBmdW5jdGlvbiBrMXQobCxjKXtpZighKGwgaW5zdGFuY2VvZiBjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVu'@;
put 'Y3Rpb24iKX0odGhpcyxhKSxjLmNhbGwodGhpcyxmdW5jdGlvbihmKXtyZXR1cm4gZn0pfXJldHVybiBmdW5jdGlvbiBFMXQobCxjLGEpe2MmJlAyZShsLnByb3RvdHlwZSxjKSxhJiZQMmUobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0o'@;
put 'YSxbe2tleToiaW5zZXJ0Iix2YWx1ZTpmdW5jdGlvbihkLGgpe3ZhciBtPVlXKHRoaXMuaW5kZXhlZFZhbHVlcyxoKTt0aGlzLmluZGV4ZWRWYWx1ZXM9UDF0KG0sZCxoLHRoaXMuaW5pdFZhbHVlT3JGbiksa2soQjUoYS5wcm90b3R5cGUpLCJpbnNlcnQiLHRoaXMpLmNhbGwodGhpcyxkLGgp'@;
put 'fX0se2tleToicmVtb3ZlIix2YWx1ZTpmdW5jdGlvbihkKXt2YXIgaD1GMXQodGhpcy5pbmRleGVkVmFsdWVzLGQpO3RoaXMuaW5kZXhlZFZhbHVlcz1aVyhoLGQpLGtrKEI1KGEucHJvdG90eXBlKSwicmVtb3ZlIix0aGlzKS5jYWxsKHRoaXMsZCl9fV0pLGF9KHg1KTtjb25zdCBOMXQ9SDF0'@;
put 'O2Z1bmN0aW9uIHE5KGwpe3JldHVybihxOT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZj'@;
put 'LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIE9LKGwsYyl7KG51bGw9PWN8fGM+bC5sZW5ndGgpJiYoYz1sLmxlbmd0aCk7Zm9yKHZhciBhPTAsZj1uZXcgQXJyYXkoYyk7YTxjO2ErKylmW2FdPWxbYV07'@;
put 'cmV0dXJuIGZ9ZnVuY3Rpb24gSDJlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHko'@;
put 'bCxXMXQoZi5rZXkpLGYpfX1mdW5jdGlvbiBXMXQobCl7dmFyIGM9ZnVuY3Rpb24gRzF0KGwsYyl7aWYoIm9iamVjdCIhPT1xOShsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0'@;
put 'Iik7aWYoIm9iamVjdCIhPT1xOShmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wi'@;
put 'PT09cTkoYyk/YzpTdHJpbmcoYyl9ZnVuY3Rpb24gRWsoKXtyZXR1cm4gRWs9dHlwZW9mIFJlZmxlY3Q8InUiJiZSZWZsZWN0LmdldD9SZWZsZWN0LmdldC5iaW5kKCk6ZnVuY3Rpb24oYyxhLGYpe3ZhciBkPWZ1bmN0aW9uICQxdChsLGMpe2Zvcig7IU9iamVjdC5wcm90b3R5cGUuaGFzT3du'@;
put 'UHJvcGVydHkuY2FsbChsLGMpJiZudWxsIT09KGw9ajUobCkpOyk7cmV0dXJuIGx9KGMsYSk7aWYoZCl7dmFyIGg9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihkLGEpO3JldHVybiBoLmdldD9oLmdldC5jYWxsKGFyZ3VtZW50cy5sZW5ndGg8Mz9jOmYpOmgudmFsdWV9fSxFay5h'@;
put 'cHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gREsobCxjKXtyZXR1cm4oREs9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZixkKXtyZXR1cm4gZi5fX3Byb3RvX189ZCxmfSkobCxjKX1mdW5jdGlvbiBqNShsKXtyZXR1cm4o'@;
put 'ajU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSl9KShsKX12YXIgTjJlPUwyZSgicGh5c2ljYWxseUluZGV4ZWQiKSxlZnQ9TjJlLmdldExpc3RX'@;
put 'aXRoSW5zZXJ0ZWRJdGVtcyx0ZnQ9TjJlLmdldExpc3RXaXRoUmVtb3ZlZEl0ZW1zLG5mdD1mdW5jdGlvbihsKXshZnVuY3Rpb24gSzF0KGwsYyl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGMmJm51bGwhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRo'@;
put 'ZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7bC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShjJiZjLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmwsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJs'@;
put 'ZTohMX0pLGMmJkRLKGwsYyl9KGEsbCk7dmFyIGM9ZnVuY3Rpb24gcTF0KGwpe3ZhciBjPWZ1bmN0aW9uIFExdCgpe2lmKHR5cGVvZiBSZWZsZWN0PiJ1Inx8IVJlZmxlY3QuY29uc3RydWN0fHxSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQ'@;
put 'cm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLGZ1bmN0aW9uKCl7fSkpLCEwfWNhdGNoe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZCxmPWo1KGwpO2lmKGMpe3ZhciBo'@;
put 'PWo1KHRoaXMpLmNvbnN0cnVjdG9yO2Q9UmVmbGVjdC5jb25zdHJ1Y3QoZixhcmd1bWVudHMsaCl9ZWxzZSBkPWYuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbiBYMXQobCxjKXtpZihjJiYoIm9iamVjdCI9PT1xOShjKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGMpKXJldHVy'@;
put 'biBjO2lmKHZvaWQgMCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24gSjF0KGwpe2lmKHZvaWQgMD09PWwpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlz'@;
put 'IGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gbH0obCl9KHRoaXMsZCl9fShhKTtmdW5jdGlvbiBhKCl7cmV0dXJuIGZ1bmN0aW9uIFoxdChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNh'@;
put 'bm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGEpLGMuY2FsbCh0aGlzLGZ1bmN0aW9uKGYpe3JldHVybiBmfSl9cmV0dXJuIGZ1bmN0aW9uIFkxdChsLGMsYSl7YyYmSDJlKGwucHJvdG90eXBlLGMpLGEmJkgyZShsLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJw'@;
put 'cm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShhLFt7a2V5OiJpbnNlcnQiLHZhbHVlOmZ1bmN0aW9uKGQsaCl7dmFyIG09dGhpczt0aGlzLmluZGV4ZWRWYWx1ZXM9ZWZ0KHRoaXMuaW5kZXhlZFZhbHVlcyxkLGgsZnVuY3Rpb24oXyxPKXtyZXR1cm4gbS5nZXROZXh0VmFsdWUoTyl9KSxFayhq'@;
put 'NShhLnByb3RvdHlwZSksImluc2VydCIsdGhpcykuY2FsbCh0aGlzLGQsaCl9fSx7a2V5OiJyZW1vdmUiLHZhbHVlOmZ1bmN0aW9uKGQpe3RoaXMuaW5kZXhlZFZhbHVlcz10ZnQodGhpcy5pbmRleGVkVmFsdWVzLGQpLEVrKGo1KGEucHJvdG90eXBlKSwicmVtb3ZlIix0aGlzKS5jYWxsKHRo'@;
put 'aXMsZCl9fSx7a2V5OiJnZXROZXh0VmFsdWUiLHZhbHVlOmZ1bmN0aW9uKGQpe3JldHVybiBNYXRoLm1heC5hcHBseShNYXRoLGZ1bmN0aW9uIFYxdChsKXtyZXR1cm4gZnVuY3Rpb24gVTF0KGwpe2lmKEFycmF5LmlzQXJyYXkobCkpcmV0dXJuIE9LKGwpfShsKXx8ZnVuY3Rpb24gejF0KGwp'@;
put 'e2lmKHR5cGVvZiBTeW1ib2w8InUiJiZudWxsIT1sW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWxbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbShsKX0obCl8fGZ1bmN0aW9uIGoxdChsLGMpe2lmKGwpe2lmKCJzdHJpbmciPT10eXBlb2YgbClyZXR1cm4gT0sobCxjKTt2YXIgYT1P'@;
put 'YmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobCkuc2xpY2UoOCwtMSk7aWYoIk9iamVjdCI9PT1hJiZsLmNvbnN0cnVjdG9yJiYoYT1sLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09YXx8IlNldCI9PT1hKXJldHVybiBBcnJheS5mcm9tKGwpO2lmKCJBcmd1bWVudHMiPT09YXx8L14o'@;
put 'PzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QoYSkpcmV0dXJuIE9LKGwsYyl9fShsKXx8ZnVuY3Rpb24gQjF0KCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0'@;
put 'byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9KHRoaXMuZ2V0VmFsdWVzKCkpKSsxK2R9fV0pLGF9KHg1KTtmdW5jdGlvbiBYOShsKXtyZXR1cm4oWDk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYm'@;
put 'InN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6'@;
put 'dHlwZW9mIGN9KShsKX1mdW5jdGlvbiBWMmUobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9w'@;
put 'ZXJ0eShsLGFmdChmLmtleSksZil9fWZ1bmN0aW9uIGFmdChsKXt2YXIgYz1mdW5jdGlvbiBsZnQobCxjKXtpZigib2JqZWN0IiE9PVg5KGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRl'@;
put 'ZmF1bHQiKTtpZigib2JqZWN0IiE9PVg5KGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5'@;
put 'bWJvbCI9PT1YOShjKT9jOlN0cmluZyhjKX1mdW5jdGlvbiBKOSgpe3JldHVybiBKOT10eXBlb2YgUmVmbGVjdDwidSImJlJlZmxlY3QuZ2V0P1JlZmxlY3QuZ2V0LmJpbmQoKTpmdW5jdGlvbihjLGEsZil7dmFyIGQ9ZnVuY3Rpb24gc2Z0KGwsYyl7Zm9yKDshT2JqZWN0LnByb3RvdHlwZS5o'@;
put 'YXNPd25Qcm9wZXJ0eS5jYWxsKGwsYykmJm51bGwhPT0obD1qNChsKSk7KTtyZXR1cm4gbH0oYyxhKTtpZihkKXt2YXIgaD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGQsYSk7cmV0dXJuIGguZ2V0P2guZ2V0LmNhbGwoYXJndW1lbnRzLmxlbmd0aDwzP2M6Zik6aC52YWx1ZX19'@;
put 'LEo5LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBJSyhsLGMpe3JldHVybihJSz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihmLGQpe3JldHVybiBmLl9fcHJvdG9fXz1kLGZ9KShsLGMpfWZ1bmN0aW9uIGo0KGwpe3Jl'@;
put 'dHVybihqND1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihhKXtyZXR1cm4gYS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihhKX0pKGwpfXZhciBSSz0iYmluZFJvd3NXaXRoSGVhZGVycyIsZ2Z0PW5ldyBNYXAoW1si'@;
put 'bG9vc2UiLE4xdF0sWyJzdHJpY3QiLG5mdF1dKSx2ZnQ9ZnVuY3Rpb24obCl7IWZ1bmN0aW9uIHVmdChsLGMpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjJiZudWxsIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5j'@;
put 'dGlvbiIpO2wucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYyYmYy5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpsLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxjJiZJSyhsLGMpfShh'@;
put 'LGwpO3ZhciBjPWZ1bmN0aW9uIGNmdChsKXt2YXIgYz1mdW5jdGlvbiBoZnQoKXtpZih0eXBlb2YgUmVmbGVjdD4idSJ8fCFSZWZsZWN0LmNvbnN0cnVjdHx8UmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3Jl'@;
put 'dHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSxmdW5jdGlvbigpe30pKSwhMH1jYXRjaHtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGQsZj1qNChsKTtpZihjKXt2YXIgaD1qNCh0aGlzKS5jb25zdHJ1Y3Rv'@;
put 'cjtkPVJlZmxlY3QuY29uc3RydWN0KGYsYXJndW1lbnRzLGgpfWVsc2UgZD1mLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24gZmZ0KGwsYyl7aWYoYyYmKCJvYmplY3QiPT09WDkoYyl8fCJmdW5jdGlvbiI9PXR5cGVvZiBjKSlyZXR1cm4gYztpZih2b2lkIDAhPT1jKXRo'@;
put 'cm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uIGRmdChsKXtpZih2b2lkIDA9PT1sKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFs'@;
put 'aXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGx9KGwpfSh0aGlzLGQpfX0oYSk7ZnVuY3Rpb24gYShmKXt2YXIgZDtyZXR1cm4gZnVuY3Rpb24gaWZ0KGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBj'@;
put 'bGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsYSksKGQ9Yy5jYWxsKHRoaXMsZikpLmhlYWRlckluZGV4ZXM9bnVsbCxkfXJldHVybiBmdW5jdGlvbiBvZnQobCxjLGEpe2MmJlYyZShsLnByb3RvdHlwZSxjKSxhJiZWMmUobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBl'@;
put 'Iix7d3JpdGFibGU6ITF9KX0oYSxbe2tleToiaXNFbmFibGVkIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtSS119fSx7a2V5OiJlbmFibGVQbHVnaW4iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcztpZighdGhpcy5lbmFibGVkKXt2YXIgaD10'@;
put 'aGlzLmhvdC5nZXRTZXR0aW5ncygpW1JLXTsic3RyaW5nIiE9dHlwZW9mIGgmJihoPSJsb29zZSIpO3ZhciBtPWdmdC5nZXQoaCk7dGhpcy5oZWFkZXJJbmRleGVzPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKCJiaW5kUm93c1dpdGhIZWFkZXJzIixuZXcgbSksdGhpcy5h'@;
put 'ZGRIb29rKCJtb2RpZnlSb3dIZWFkZXIiLGZ1bmN0aW9uKF8pe3JldHVybiBkLm9uTW9kaWZ5Um93SGVhZGVyKF8pfSksSjkoajQoYS5wcm90b3R5cGUpLCJlbmFibGVQbHVnaW4iLHRoaXMpLmNhbGwodGhpcyl9fX0se2tleToiZGlzYWJsZVBsdWdpbiIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlz'@;
put 'LmhvdC5yb3dJbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKCJiaW5kUm93c1dpdGhIZWFkZXJzIiksSjkoajQoYS5wcm90b3R5cGUpLCJkaXNhYmxlUGx1Z2luIix0aGlzKS5jYWxsKHRoaXMpfX0se2tleToib25Nb2RpZnlSb3dIZWFkZXIiLHZhbHVlOmZ1bmN0aW9uKGQpe3JldHVybiB0aGlz'@;
put 'LmhlYWRlckluZGV4ZXMuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxSb3coZCkpfX0se2tleToiZGVzdHJveSIsdmFsdWU6ZnVuY3Rpb24oKXtKOShqNChhLnByb3RvdHlwZSksImRlc3Ryb3kiLHRoaXMpLmNhbGwodGhpcyl9fV0sW3trZXk6IlBMVUdJTl9LRVkiLGdldDpm'@;
put 'dW5jdGlvbigpe3JldHVybiBSS319LHtrZXk6IlBMVUdJTl9QUklPUklUWSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDIxMH19XSksYX0oR2EpO2Z1bmN0aW9uIFE5KGwpe3JldHVybihROT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRv'@;
put 'cj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIEIyZShsKXty'@;
put 'ZXR1cm4gZnVuY3Rpb24gd2Z0KGwpe2lmKEFycmF5LmlzQXJyYXkobCkpcmV0dXJuIExLKGwpfShsKXx8ZnVuY3Rpb24gX2Z0KGwpe2lmKHR5cGVvZiBTeW1ib2w8InUiJiZudWxsIT1sW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWxbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbShs'@;
put 'KX0obCl8fGZ1bmN0aW9uIGJmdChsLGMpe2lmKGwpe2lmKCJzdHJpbmciPT10eXBlb2YgbClyZXR1cm4gTEsobCxjKTt2YXIgYT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobCkuc2xpY2UoOCwtMSk7aWYoIk9iamVjdCI9PT1hJiZsLmNvbnN0cnVjdG9yJiYoYT1sLmNvbnN0cnVj'@;
put 'dG9yLm5hbWUpLCJNYXAiPT09YXx8IlNldCI9PT1hKXJldHVybiBBcnJheS5mcm9tKGwpO2lmKCJBcmd1bWVudHMiPT09YXx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QoYSkpcmV0dXJuIExLKGwsYyl9fShsKXx8ZnVuY3Rpb24geWZ0KCl7dGhyb3cg'@;
put 'bmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gTEso'@;
put 'bCxjKXsobnVsbD09Y3x8Yz5sLmxlbmd0aCkmJihjPWwubGVuZ3RoKTtmb3IodmFyIGE9MCxmPW5ldyBBcnJheShjKTthPGM7YSsrKWZbYV09bFthXTtyZXR1cm4gZn1mdW5jdGlvbiBqMmUobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9'@;
put 'Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLHoyZShmLmtleSksZil9fWZ1bmN0aW9uIHo1KCl7cmV0dXJuIHo1PXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdC5nZXQ/UmVmbGVj'@;
put 'dC5nZXQuYmluZCgpOmZ1bmN0aW9uKGMsYSxmKXt2YXIgZD1mdW5jdGlvbiBNZnQobCxjKXtmb3IoOyFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobCxjKSYmbnVsbCE9PShsPWIzKGwpKTspO3JldHVybiBsfShjLGEpO2lmKGQpe3ZhciBoPU9iamVjdC5nZXRPd25Qcm9w'@;
put 'ZXJ0eURlc2NyaXB0b3IoZCxhKTtyZXR1cm4gaC5nZXQ/aC5nZXQuY2FsbChhcmd1bWVudHMubGVuZ3RoPDM/YzpmKTpoLnZhbHVlfX0sejUuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIFBLKGwsYyl7cmV0dXJuKFBLPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJv'@;
put 'dG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGYsZCl7cmV0dXJuIGYuX19wcm90b19fPWQsZn0pKGwsYyl9ZnVuY3Rpb24gZXkobCl7aWYodm9pZCAwPT09bCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVu'@;
put 'IGNhbGxlZCIpO3JldHVybiBsfWZ1bmN0aW9uIGIzKGwpe3JldHVybihiMz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihhKXtyZXR1cm4gYS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihhKX0pKGwpfWZ1bmN0aW9u'@;
put 'IEZLKGwsYyxhKXtyZXR1cm4oYz16MmUoYykpaW4gbD9PYmplY3QuZGVmaW5lUHJvcGVydHkobCxjLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6bFtjXT1hLGx9ZnVuY3Rpb24gejJlKGwpe3ZhciBjPWZ1bmN0aW9uIERmdChsLGMpe2lmKCJv'@;
put 'YmplY3QiIT09UTkobCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09UTkoZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1p'@;
put 'dGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PVE5KGMpP2M6U3RyaW5nKGMpfWZ1bmN0aW9uIFUyZShsLGMpe3JldHVybiBmdW5jdGlvbiBJZnQobCxj'@;
put 'KXtyZXR1cm4gYy5nZXQ/Yy5nZXQuY2FsbChsKTpjLnZhbHVlfShsLFoyZShsLGMsImdldCIpKX1mdW5jdGlvbiBISyhsLGMsYSl7cmV0dXJuIGZ1bmN0aW9uIFJmdChsLGMsYSl7aWYoYy5zZXQpYy5zZXQuY2FsbChsLGEpO2Vsc2V7aWYoIWMud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJv'@;
put 'cigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2MudmFsdWU9YX19KGwsWjJlKGwsYywic2V0IiksYSksYX1mdW5jdGlvbiBaMmUobCxjLGEpe2lmKCFjLmhhcyhsKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIithKyIgcHJpdmF0ZSBmaWVs'@;
put 'ZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gYy5nZXQobCl9dmFyIE5LPSJjb2xsYXBzaWJsZUNvbHVtbnMiLFBmdD1bIm5lc3RlZEhlYWRlcnMiXSx0eT0iY29sbGFwc2libGVJbmRpY2F0b3IiLFkyZT1uZXcgTWFwKFtbImNvbGxhcHNlIix7aGlkZUNvbHVtbjohMCxiZWZvcmVIb29rOiJi'@;
put 'ZWZvcmVDb2x1bW5Db2xsYXBzZSIsYWZ0ZXJIb29rOiJhZnRlckNvbHVtbkNvbGxhcHNlIn1dLFsiZXhwYW5kIix7aGlkZUNvbHVtbjohMSxiZWZvcmVIb29rOiJiZWZvcmVDb2x1bW5FeHBhbmQiLGFmdGVySG9vazoiYWZ0ZXJDb2x1bW5FeHBhbmQifV1dKSxueT1uZXcgV2Vha01hcCxGZnQ9'@;
put 'ZnVuY3Rpb24obCl7IWZ1bmN0aW9uIGtmdChsLGMpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjJiZudWxsIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2wucHJvdG90eXBlPU9iamVjdC5jcmVhdGUo'@;
put 'YyYmYy5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpsLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxjJiZQSyhsLGMpfShhLGwpO3ZhciBjPWZ1bmN0aW9uIEVmdChsKXt2YXIgYz1m'@;
put 'dW5jdGlvbiBBZnQoKXtpZih0eXBlb2YgUmVmbGVjdD4idSJ8fCFSZWZsZWN0LmNvbnN0cnVjdHx8UmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNh'@;
put 'bGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSxmdW5jdGlvbigpe30pKSwhMH1jYXRjaHtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGQsZj1iMyhsKTtpZihjKXt2YXIgaD1iMyh0aGlzKS5jb25zdHJ1Y3RvcjtkPVJlZmxlY3QuY29uc3RydWN0KGYsYXJndW1lbnRz'@;
put 'LGgpfWVsc2UgZD1mLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24geGZ0KGwsYyl7aWYoYyYmKCJvYmplY3QiPT09UTkoYyl8fCJmdW5jdGlvbiI9PXR5cGVvZiBjKSlyZXR1cm4gYztpZih2b2lkIDAhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3Ry'@;
put 'dWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGV5KGwpfSh0aGlzLGQpfX0oYSk7ZnVuY3Rpb24gYSgpe3ZhciBmOyFmdW5jdGlvbiBDZnQobCxjKXtpZighKGwgaW5zdGFuY2VvZiBjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBh'@;
put 'IGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxhKTtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxtPTA7bTxkO20rKyloW21dPWFyZ3VtZW50c1ttXTtyZXR1cm4gRksoZXkoZj1jLmNhbGwuYXBwbHkoYyxbdGhpc10uY29uY2F0KGgpKSksIm5lc3RlZEhlYWRl'@;
put 'cnNQbHVnaW4iLG51bGwpLEZLKGV5KGYpLCJldmVudE1hbmFnZXIiLG5ldyBmcyhleShmKSkpLEZLKGV5KGYpLCJoZWFkZXJTdGF0ZU1hbmFnZXIiLG51bGwpLGZ1bmN0aW9uIFRmdChsLGMsYSl7KGZ1bmN0aW9uIE9mdChsLGMpe2lmKGMuaGFzKGwpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNh'@;
put 'bm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShsLGMpLGMuc2V0KGwsYSl9KGV5KGYpLG55LHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksZn1yZXR1cm4gZnVuY3Rpb24gU2Z0KGwsYyxhKXtjJiZqMmUobC5wcm90b3R5cGUs'@;
put 'YyksYSYmajJlKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGEsW3trZXk6ImlzRW5hYmxlZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbTktdfX0se2tleToiZW5hYmxlUGx1Z2luIix2YWx1'@;
put 'ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5uZXN0ZWRIZWFkZXJzfHxXbCgiWW91IG5lZWQgdG8gY29uZmlndXJlIHRoZSBOZXN0ZWQgSGVhZGVycyBwbHVnaW4gaW4gb3JkZXIgdG8gdXNlIGNvbGxhcHNpYmxlIGhlYWRlcnMu'@;
put 'IiksSEsodGhpcyxueSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5jcmVhdGVBbmRSZWdpc3RlckluZGV4TWFwKHRoaXMucGx1Z2luTmFtZSwiaGlkaW5nIikpLHRoaXMubmVzdGVkSGVhZGVyc1BsdWdpbj10aGlzLmhvdC5nZXRQbHVnaW4oIm5lc3RlZEhlYWRlcnMiKSx0aGlzLmhlYWRl'@;
put 'clN0YXRlTWFuYWdlcj10aGlzLm5lc3RlZEhlYWRlcnNQbHVnaW4uZ2V0U3RhdGVNYW5hZ2VyKCksdGhpcy5hZGRIb29rKCJpbml0IixmdW5jdGlvbigpe3JldHVybiBkLm9uSW5pdCgpfSksdGhpcy5hZGRIb29rKCJhZnRlckxvYWREYXRhIixmdW5jdGlvbigpe3JldHVybiBkLm9uQWZ0ZXJM'@;
put 'b2FkRGF0YS5hcHBseShkLGFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Q29sSGVhZGVyIixmdW5jdGlvbigpe3JldHVybiBkLm9uQWZ0ZXJHZXRDb2xIZWFkZXIuYXBwbHkoZCxhcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGZ1bmN0'@;
put 'aW9uKF8sTyxYKXtyZXR1cm4gZC5vbkJlZm9yZU9uQ2VsbE1vdXNlRG93bihfLE8sWCl9KSx6NShiMyhhLnByb3RvdHlwZSksImVuYWJsZVBsdWdpbiIsdGhpcykuY2FsbCh0aGlzKSx0aGlzLnVwZGF0ZVBsdWdpbigpKX19LHtrZXk6InVwZGF0ZVBsdWdpbiIsdmFsdWU6ZnVuY3Rpb24oKXtp'@;
put 'Zih0aGlzLmhvdC52aWV3KXtpZighdGhpcy5uZXN0ZWRIZWFkZXJzUGx1Z2luLmRldGVjdGVkT3ZlcmxhcHBlZEhlYWRlcnMpe3ZhciBoPXRoaXMuaG90LmdldFNldHRpbmdzKCkuY29sbGFwc2libGVDb2x1bW5zOyJib29sZWFuIj09dHlwZW9mIGg/dGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIu'@;
put 'bWFwU3RhdGUoZnVuY3Rpb24obSl7cmV0dXJue2NvbGxhcHNpYmxlOm0ub3JpZ0NvbHNwYW4+MX19KTpBcnJheS5pc0FycmF5KGgpJiYodGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIubWFwU3RhdGUoZnVuY3Rpb24oKXtyZXR1cm57Y29sbGFwc2libGU6ITF9fSksdGhpcy5oZWFkZXJTdGF0ZU1h'@;
put 'bmFnZXIubWVyZ2VTdGF0ZVdpdGgoaCkpfXo1KGIzKGEucHJvdG90eXBlKSwidXBkYXRlUGx1Z2luIix0aGlzKS5jYWxsKHRoaXMpfX19LHtrZXk6ImRpc2FibGVQbHVnaW4iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnBs'@;
put 'dWdpbk5hbWUpLEhLKHRoaXMsbnksbnVsbCksdGhpcy5uZXN0ZWRIZWFkZXJzUGx1Z2luPW51bGwsdGhpcy5jbGVhckJ1dHRvbnMoKSx6NShiMyhhLnByb3RvdHlwZSksImRpc2FibGVQbHVnaW4iLHRoaXMpLmNhbGwodGhpcyl9fSx7a2V5OiJjbGVhckJ1dHRvbnMiLHZhbHVlOmZ1bmN0aW9u'@;
put 'KCl7aWYodGhpcy5ob3Qudmlldyl7dmFyIGQ9dGhpcy5ob3Qudmlldy5fd3QuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aCxoPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuVEhFQUQsbT10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLnRvcE92ZXJsYXkuY2xvbmUud3RU'@;
put 'YWJsZS5USEVBRCxfPXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5P3RoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lLnd0VGFibGUuVEhFQUQ6bnVsbCxPPWZ1bmN0aW9uKGFl'@;
put 'KXthZSYmYWUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhZSl9O19vKDAsZC0xLGZ1bmN0aW9uKFgpe3ZhciBhZT1oLmNoaWxkTm9kZXNbWF0scGU9bS5jaGlsZE5vZGVzW1hdLGJlPV8/Xy5jaGlsZE5vZGVzW1hdOm51bGw7X28oMCxhZS5jaGlsZE5vZGVzLmxlbmd0aC0xLGZ1bmN0aW9uKHhl'@;
put 'KXt2YXIgVmU9YWUuY2hpbGROb2Rlc1t4ZV0ucXVlcnlTZWxlY3RvcigiLiIuY29uY2F0KHR5KSk7TyhWZSkscGUmJnBlLmNoaWxkTm9kZXNbeGVdJiYoVmU9cGUuY2hpbGROb2Rlc1t4ZV0ucXVlcnlTZWxlY3RvcigiLiIuY29uY2F0KHR5KSksTyhWZSkpLF8mJmJlJiZiZS5jaGlsZE5vZGVz'@;
put 'W3hlXSYmKFZlPWJlLmNoaWxkTm9kZXNbeGVdLnF1ZXJ5U2VsZWN0b3IoIi4iLmNvbmNhdCh0eSkpLE8oVmUpKX0pfSl9fX0se2tleToiZXhwYW5kU2VjdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZCl7dGhpcy50b2dnbGVDb2xsYXBzaWJsZVNlY3Rpb24oW2RdLCJleHBhbmQiKX19LHtrZXk6ImNv'@;
put 'bGxhcHNlU2VjdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZCl7dGhpcy50b2dnbGVDb2xsYXBzaWJsZVNlY3Rpb24oW2RdLCJjb2xsYXBzZSIpfX0se2tleToidG9nZ2xlQWxsQ29sbGFwc2libGVTZWN0aW9ucyIsdmFsdWU6ZnVuY3Rpb24oZCl7dmFyIGg9dGhpcyxtPXRoaXMuaGVhZGVyU3RhdGVN'@;
put 'YW5hZ2VyLm1hcE5vZGVzKGZ1bmN0aW9uKF8pe3ZhciBwZT1fLmNvbHVtbkluZGV4LGJlPV8uaXNDb2xsYXBzZWQ7aWYoITA9PT1fLmNvbGxhcHNpYmxlJiZfLm9yaWdDb2xzcGFuPjEmJihiZSYmImV4cGFuZCI9PT1kfHwhYmUmJiJjb2xsYXBzZSI9PT1kKSlyZXR1cm57cm93OmguaGVhZGVy'@;
put 'U3RhdGVNYW5hZ2VyLmxldmVsVG9Sb3dDb29yZHMoXy5oZWFkZXJMZXZlbCksY29sOnBlfX0pO3RoaXMudG9nZ2xlQ29sbGFwc2libGVTZWN0aW9uKG0sZCl9fSx7a2V5OiJjb2xsYXBzZUFsbCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnRvZ2dsZUFsbENvbGxhcHNpYmxlU2VjdGlvbnMoImNv'@;
put 'bGxhcHNlIil9fSx7a2V5OiJleHBhbmRBbGwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy50b2dnbGVBbGxDb2xsYXBzaWJsZVNlY3Rpb25zKCJleHBhbmQiKX19LHtrZXk6InRvZ2dsZUNvbGxhcHNpYmxlU2VjdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZCxoKXt2YXIgbT10aGlzO2lmKCFZMmUuaGFz'@;
put 'KGgpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgYWN0aW9uIGlzIHBhc3NlZCAoIi5jb25jYXQoaCwiKS4iKSk7aWYoQXJyYXkuaXNBcnJheShkKSl7dmFyIF89RDEoZCxmdW5jdGlvbihsdCl7cmV0dXJuIGx0LnJvdzwwfSksTz1fLmxlbmd0aD4wO1JuKF8sZnVuY3Rpb24obHQpe3Zh'@;
put 'ciBkdCxybj1udWxsIT09KGR0PW0uaGVhZGVyU3RhdGVNYW5hZ2VyLmdldEhlYWRlclNldHRpbmdzKGx0LnJvdyxsdC5jb2wpKSYmdm9pZCAwIT09ZHQ/ZHQ6e30seW49cm4uaXNDb2xsYXBzZWQ7aWYoIXJuLmNvbGxhcHNpYmxlfHx5biYmImNvbGxhcHNlIj09PWh8fCF5biYmImV4cGFuZCI9'@;
put 'PT1oKXJldHVybiBPPSExLCExfSk7dmFyIFg9W10sYWU9W107TyYmUm4oXyxmdW5jdGlvbihsdCl7dmFyIGp0PW0uaGVhZGVyU3RhdGVNYW5hZ2VyLnRyaWdnZXJOb2RlTW9kaWZpY2F0aW9uKGgsbHQucm93LGx0LmNvbCkseW49anQucm9sbGJhY2tNb2RpZmljYXRpb247anQuY29sc3BhbkNv'@;
put 'bXBlbnNhdGlvbj4wJiYoYWUucHVzaC5hcHBseShhZSxCMmUoanQuYWZmZWN0ZWRDb2x1bW5zKSksWC5wdXNoKHluKSl9KTt2YXIgcGU9dGhpcy5nZXRDb2xsYXBzZWRDb2x1bW5zKCksYmU9W107ImNvbGxhcHNlIj09PWg/YmU9YVkoW10uY29uY2F0KEIyZShwZSksYWUpKToiZXhwYW5kIj09'@;
put 'PWgmJihiZT1EMShwZSxmdW5jdGlvbihsdCl7cmV0dXJuIWFlLmluY2x1ZGVzKGx0KX0pKTt2YXIgeGU9WTJlLmdldChoKTtpZighMT09PXRoaXMuaG90LnJ1bkhvb2tzKHhlLmJlZm9yZUhvb2sscGUsYmUsTykpcmV0dXJuIHZvaWQgUm4oWCxmdW5jdGlvbihsdCl7bHQoKX0pO3RoaXMuaG90'@;
put 'LmJhdGNoRXhlY3V0aW9uKGZ1bmN0aW9uKCl7Um4oYWUsZnVuY3Rpb24obHQpe1UyZShtLG55KS5zZXRWYWx1ZUF0SW5kZXgobS5ob3QudG9QaHlzaWNhbENvbHVtbihsdCkseGUuaGlkZUNvbHVtbil9KX0sITApO3ZhciBaZT10aGlzLmdldENvbGxhcHNlZENvbHVtbnMoKS5sZW5ndGghPT1w'@;
put 'ZS5sZW5ndGg7dGhpcy5ob3QucnVuSG9va3MoeGUuYWZ0ZXJIb29rLHBlLGJlLE8sWmUpLHRoaXMuaG90LnJlbmRlcigpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCEwKX19fSx7a2V5OiJnZXRDb2xsYXBzZWRDb2x1bW5zIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBVMmUo'@;
put 'dGhpcyxueSkuZ2V0SGlkZGVuSW5kZXhlcygpfX0se2tleToib25BZnRlckdldENvbEhlYWRlciIsdmFsdWU6ZnVuY3Rpb24oZCxoLG0pe3ZhciBfLFZlLE89bnVsbCE9PShfPXRoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyLmdldEhlYWRlclNldHRpbmdzKG0sZCkpJiZ2b2lkIDAhPT1fP186e30s'@;
put 'cGU9Ty5pc0NvbGxhcHNlZCxiZT1PLmNvbGxhcHNpYmxlJiZPLm9yaWdDb2xzcGFuPjEmJmQ+PXRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQseGU9aC5xdWVyeVNlbGVjdG9yKCIuIi5jb25jYXQodHkpKTtiZT8oeGV8fChnaSh4ZT10aGlzLmhvdC5yb290RG9jdW1l'@;
put 'bnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdHkpLGgucXVlcnlTZWxlY3RvcigiZGl2OmZpcnN0LWNoaWxkIikuYXBwZW5kQ2hpbGQoeGUpKSxKbyh4ZSxbImNvbGxhcHNlZCIsImV4cGFuZGVkIl0pLHBlPyhnaSh4ZSwiY29sbGFwc2VkIiksTzQoeGUsIisiKSk6KGdpKHhlLCJleHBhbmRlZCIp'@;
put 'LE80KHhlLCItIikpKTpudWxsPT09KFZlPXhlKXx8dm9pZCAwPT09VmV8fFZlLnJlbW92ZSgpfX0se2tleToib25CZWZvcmVPbkNlbGxNb3VzZURvd24iLHZhbHVlOmZ1bmN0aW9uKGQsaCl7WW8oZC50YXJnZXQsdHkpJiYoWW8oZC50YXJnZXQsImV4cGFuZGVkIik/KHRoaXMuZXZlbnRNYW5h'@;
put 'Z2VyLmZpcmVFdmVudChkLnRhcmdldCwibW91c2V1cCIpLHRoaXMudG9nZ2xlQ29sbGFwc2libGVTZWN0aW9uKFtoXSwiY29sbGFwc2UiKSk6WW8oZC50YXJnZXQsImNvbGxhcHNlZCIpJiYodGhpcy5ldmVudE1hbmFnZXIuZmlyZUV2ZW50KGQudGFyZ2V0LCJtb3VzZXVwIiksdGhpcy50b2dn'@;
put 'bGVDb2xsYXBzaWJsZVNlY3Rpb24oW2hdLCJleHBhbmQiKSksSGQoZCkpfX0se2tleToib25Jbml0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMudXBkYXRlUGx1Z2luKCl9fSx7a2V5OiJvbkFmdGVyTG9hZERhdGEiLHZhbHVlOmZ1bmN0aW9uKGQsaCl7aHx8dGhpcy51cGRhdGVQbHVnaW4oKX19'@;
put 'LHtrZXk6ImRlc3Ryb3kiLHZhbHVlOmZ1bmN0aW9uKCl7SEsodGhpcyxueSxudWxsKSx6NShiMyhhLnByb3RvdHlwZSksImRlc3Ryb3kiLHRoaXMpLmNhbGwodGhpcyl9fV0sW3trZXk6IlBMVUdJTl9LRVkiLGdldDpmdW5jdGlvbigpe3JldHVybiBOS319LHtrZXk6IlBMVUdJTl9QUklPUklU'@;
put 'WSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDI5MH19LHtrZXk6IlBMVUdJTl9ERVBTIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5bInBsdWdpbjpOZXN0ZWRIZWFkZXJzIl19fSx7a2V5OiJTRVRUSU5HX0tFWVMiLGdldDpmdW5jdGlvbigpe3JldHVybltOS10uY29uY2F0KFBmdCl9fV0pLGF9KEdh'@;
put 'KTtmdW5jdGlvbiB4ayhsKXtyZXR1cm4oeGs9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYm'@;
put 'Yy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiBXMmUobCxjKXt2YXIgYT1PYmplY3Qua2V5cyhsKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgZj1PYmplY3QuZ2V0T3duUHJvcGVy'@;
put 'dHlTeW1ib2xzKGwpO2MmJihmPWYuZmlsdGVyKGZ1bmN0aW9uKGQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGwsZCkuZW51bWVyYWJsZX0pKSxhLnB1c2guYXBwbHkoYSxmKX1yZXR1cm4gYX1mdW5jdGlvbiBOZnQobCxjLGEpe3JldHVybihjPXEyZShjKSlpbiBs'@;
put 'P09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLGMse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpsW2NdPWEsbH1mdW5jdGlvbiBHMmUobCxjKXtyZXR1cm4gZnVuY3Rpb24gemZ0KGwpe2lmKEFycmF5LmlzQXJyYXkobCkpcmV0dXJuIGx9KGwpfHxm'@;
put 'dW5jdGlvbiBqZnQobCxjKXt2YXIgYT1udWxsPT1sP251bGw6dHlwZW9mIFN5bWJvbDwidSImJmxbU3ltYm9sLml0ZXJhdG9yXXx8bFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPWEpe3ZhciBmLGQsaCxtLF89W10sTz0hMCxYPSExO3RyeXtpZihoPShhPWEuY2FsbChsKSkubmV4dCwwPT09Yyl7'@;
put 'aWYoT2JqZWN0KGEpIT09YSlyZXR1cm47Tz0hMX1lbHNlIGZvcig7IShPPShmPWguY2FsbChhKSkuZG9uZSkmJihfLnB1c2goZi52YWx1ZSksXy5sZW5ndGghPT1jKTtPPSEwKTt9Y2F0Y2goYWUpe1g9ITAsZD1hZX1maW5hbGx5e3RyeXtpZighTyYmbnVsbCE9YS5yZXR1cm4mJihtPWEucmV0'@;
put 'dXJuKCksT2JqZWN0KG0pIT09bSkpcmV0dXJufWZpbmFsbHl7aWYoWCl0aHJvdyBkfX1yZXR1cm4gX319KGwsYyl8fGZ1bmN0aW9uIEJmdChsLGMpe2lmKGwpe2lmKCJzdHJpbmciPT10eXBlb2YgbClyZXR1cm4gJDJlKGwsYyk7dmFyIGE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxs'@;
put 'KGwpLnNsaWNlKDgsLTEpO2lmKCJPYmplY3QiPT09YSYmbC5jb25zdHJ1Y3RvciYmKGE9bC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PWF8fCJTZXQiPT09YSlyZXR1cm4gQXJyYXkuZnJvbShsKTtpZigiQXJndW1lbnRzIj09PWF8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBl'@;
put 'ZCk/QXJyYXkkLy50ZXN0KGEpKXJldHVybiAkMmUobCxjKX19KGwsYyl8fGZ1bmN0aW9uIFZmdCgpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFy'@;
put 'cmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gJDJlKGwsYyl7KG51bGw9PWN8fGM+bC5sZW5ndGgpJiYoYz1sLmxlbmd0aCk7Zm9yKHZhciBhPTAsZj1uZXcgQXJyYXkoYyk7YTxjO2ErKylmW2FdPWxbYV07cmV0dXJuIGZ9'@;
put 'ZnVuY3Rpb24gSzJlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxxMmUoZi5r'@;
put 'ZXkpLGYpfX1mdW5jdGlvbiBxMmUobCl7dmFyIGM9ZnVuY3Rpb24gWWZ0KGwsYyl7aWYoIm9iamVjdCIhPT14ayhsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9i'@;
put 'amVjdCIhPT14ayhmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09eGsoYyk/'@;
put 'YzpTdHJpbmcoYyl9dmFyIFdmdD1bInNvcnRFbXB0eUNlbGxzIiwiaW5kaWNhdG9yIiwiaGVhZGVyQWN0aW9uIiwiY29tcGFyZUZ1bmN0aW9uRmFjdG9yeSJdLHFmdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGwoYyxhKXsoZnVuY3Rpb24gVWZ0KGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhy'@;
put 'b3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLGwpLHRoaXMuaG90PWMsdGhpcy5zb3J0aW5nU3RhdGVzPW5ldyB6Uix0aGlzLnNvcnRFbXB0eUNlbGxzPSExLHRoaXMuaW5kaWNhdG9yPSEwLHRoaXMuaGVhZGVyQWN0aW9uPSEwLHRo'@;
put 'aXMuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeT12b2lkIDAsdGhpcy5tYXBOYW1lPWEsdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAoYSx0aGlzLnNvcnRpbmdTdGF0ZXMpfXJldHVybiBmdW5jdGlvbiBaZnQobCxjLGEpe2MmJksyZShsLnByb3RvdHlwZSxjKSxhJiZLMmUo'@;
put 'bCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0obCxbe2tleToidXBkYXRlQWxsQ29sdW1uc1Byb3BlcnRpZXMiLHZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBmPXRoaXM7cGEoYSkmJm1hKGEsZnVuY3Rpb24oZCxoKXtXZnQuaW5jbHVkZXMoaCkm'@;
put 'JihmW2hdPWQpfSl9fSx7a2V5OiJnZXRBbGxDb2x1bW5zUHJvcGVydGllcyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT17c29ydEVtcHR5Q2VsbHM6dGhpcy5zb3J0RW1wdHlDZWxscyxpbmRpY2F0b3I6dGhpcy5pbmRpY2F0b3IsaGVhZGVyQWN0aW9uOnRoaXMuaGVhZGVyQWN0aW9ufTtyZXR1'@;
put 'cm4iZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5jb21wYXJlRnVuY3Rpb25GYWN0b3J5JiYoYS5jb21wYXJlRnVuY3Rpb25GYWN0b3J5PXRoaXMuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeSksYX19LHtrZXk6ImdldFNvcnRPcmRlck9mQ29sdW1uIix2YWx1ZTpmdW5jdGlvbihhKXt2YXIgZjtyZXR1'@;
put 'cm4gbnVsbD09PShmPXRoaXMuc29ydGluZ1N0YXRlcy5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihhKSkpfHx2b2lkIDA9PT1mP3ZvaWQgMDpmLnNvcnRPcmRlcn19LHtrZXk6ImdldEluZGV4T2ZDb2x1bW5JblNvcnRRdWV1ZSIsdmFsdWU6ZnVuY3Rpb24oYSl7'@;
put 'cmV0dXJuIGE9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihhKSx0aGlzLnNvcnRpbmdTdGF0ZXMuZ2V0RW50cmllcygpLmZpbmRJbmRleChmdW5jdGlvbihmKXtyZXR1cm4gRzJlKGYsMSlbMF09PT1hfSl9fSx7a2V5OiJnZXROdW1iZXJPZlNvcnRlZENvbHVtbnMiLHZhbHVlOmZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIHRoaXMuc29ydGluZ1N0YXRlcy5nZXRMZW5ndGgoKX19LHtrZXk6ImlzTGlzdE9mU29ydGVkQ29sdW1uc0VtcHR5Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5nZXROdW1iZXJPZlNvcnRlZENvbHVtbnMoKX19LHtrZXk6ImlzQ29sdW1uU29ydGVkIix2YWx1'@;
put 'ZTpmdW5jdGlvbihhKXtyZXR1cm4gcGEodGhpcy5zb3J0aW5nU3RhdGVzLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGEpKSl9fSx7a2V5OiJnZXRTb3J0U3RhdGVzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXM7cmV0dXJuIG51bGw9PT10aGlzLnNvcnRp'@;
put 'bmdTdGF0ZXM/W106dGhpcy5zb3J0aW5nU3RhdGVzLmdldEVudHJpZXMoKS5tYXAoZnVuY3Rpb24oZCl7dmFyIGg9RzJlKGQsMiksXz1oWzFdO3JldHVybiBmdW5jdGlvbiBIZnQobCl7Zm9yKHZhciBjPTE7Yzxhcmd1bWVudHMubGVuZ3RoO2MrKyl7dmFyIGE9bnVsbCE9YXJndW1lbnRzW2Nd'@;
put 'P2FyZ3VtZW50c1tjXTp7fTtjJTI/VzJlKE9iamVjdChhKSwhMCkuZm9yRWFjaChmdW5jdGlvbihmKXtOZnQobCxmLGFbZl0pfSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y'@;
put 'cyhhKSk6VzJlKE9iamVjdChhKSkuZm9yRWFjaChmdW5jdGlvbihmKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobCxmLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYSxmKSl9KX1yZXR1cm4gbH0oe2NvbHVtbjphLmhvdC50b1Zpc3VhbENvbHVtbihoWzBdKX0sXyl9KX19LHtrZXk6'@;
put 'ImdldENvbHVtblNvcnRTdGF0ZSIsdmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGY9dGhpcy5nZXRTb3J0T3JkZXJPZkNvbHVtbihhKTtpZihpbyhmKSlyZXR1cm57Y29sdW1uOmEsc29ydE9yZGVyOmZ9fX0se2tleToic2V0U29ydFN0YXRlcyIsdmFsdWU6ZnVuY3Rpb24oYSl7dGhpcy5zb3J0aW5n'@;
put 'U3RhdGVzLmNsZWFyKCk7Zm9yKHZhciBmPTA7ZjxhLmxlbmd0aDtmKz0xKXRoaXMuc29ydGluZ1N0YXRlcy5zZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihhW2ZdLmNvbHVtbikse3NvcnRPcmRlcjphW2ZdLnNvcnRPcmRlcn0pfX0se2tleToiZGVzdHJveSIsdmFs'@;
put 'dWU6ZnVuY3Rpb24oKXt0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMubWFwTmFtZSksdGhpcy5zb3J0aW5nU3RhdGVzPW51bGx9fV0pLGx9KCksTUw9ImFzYyIsa0w9ImRlc2MiO2Z1bmN0aW9uIFgyZShsKXtpZihsIT09a0wpcmV0dXJuIGw9PT1NTD9rTDpN'@;
put 'TH1mdW5jdGlvbiBKMmUobCl7cmV0dXJuIGwucXVlcnlTZWxlY3RvcigiLiIuY29uY2F0KCJjb2xIZWFkZXIiKSl9ZnVuY3Rpb24gUTJlKGwsYyl7aWYobDwwfHwhYy5wYXJlbnROb2RlKXJldHVybiExO3ZhciBhPWMucGFyZW50Tm9kZS5wYXJlbnROb2RlLmNoaWxkTm9kZXM7cmV0dXJuLTE9'@;
put 'PUFycmF5LmZyb20oYSkuaW5kZXhPZihjLnBhcmVudE5vZGUpLWEubGVuZ3RofWZ1bmN0aW9uIFZLKGwsYyxhKXtyZXR1cm4tMT09PWwmJmM+PTAmJiExPT09STQoYSl9dmFyIGUzZT0iaW5kaWNhdG9yRGlzYWJsZWQiLHQzZT0iY29sdW1uU29ydGluZyIsbjNlPSJzb3J0QWN0aW9uIixyM2U9'@;
put 'bmV3IE1hcChbW01MLCJhc2NlbmRpbmciXSxba0wsImRlc2NlbmRpbmciXV0pO2Z1bmN0aW9uIG5kdChsLGMsYSxmKXt2YXIgZD1bdDNlXTtpZihmJiZkLnB1c2gobjNlKSwhMT09PWEpcmV0dXJuIGQucHVzaChlM2UpLGQ7dmFyIGg9bC5nZXRTb3J0T3JkZXJPZkNvbHVtbihjKTtyZXR1cm4g'@;
put 'aW8oaCkmJmQucHVzaChyM2UuZ2V0KGgpKSxkfWZ1bmN0aW9uIGkzZShsLGMsYSl7dmFyIGY9Yy5sb2NhbGU7cmV0dXJuIGZ1bmN0aW9uKGQsaCl7dmFyIG09YS5zb3J0RW1wdHlDZWxscztyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGQmJihkPWQudG9Mb2NhbGVMb3dlckNhc2UoZikpLCJzdHJp'@;
put 'bmciPT10eXBlb2YgaCYmKGg9aC50b0xvY2FsZUxvd2VyQ2FzZShmKSksZD09PWg/MDp3dShkKT93dShoKT8wOm0mJiJhc2MiPT09bD8tMToxOnd1KGgpP20mJiJhc2MiPT09bD8xOi0xOmlzTmFOKGQpJiYhaXNOYU4oaCk/ImFzYyI9PT1sPzE6LTE6IWlzTmFOKGQpJiZpc05hTihoKXx8KGlz'@;
put 'TmFOKGQpfHxpc05hTihoKXx8KGQ9cGFyc2VGbG9hdChkKSxoPXBhcnNlRmxvYXQoaCkpLGQ8aCk/ImFzYyI9PT1sPy0xOjE6ZD5oPyJhc2MiPT09bD8xOi0xOjB9fXZhciBCSz1GZigic29ydGluZy5jb21wYXJlRnVuY3Rpb25GYWN0b3J5IiksRUw9QksucmVnaXN0ZXIsYTNlPUJLLmdldEl0'@;
put 'ZW0sZmR0PUJLLmhhc0l0ZW0sbDNlPUZmKCJzb3J0aW5nLm1haW5Tb3J0Q29tcGFyYXRvciIpLHMzZT1sM2UucmVnaXN0ZXIsZGR0PWwzZS5nZXRJdGVtO2Z1bmN0aW9uIHUzZShsKXtyZXR1cm4gZmR0KGwpP2EzZShsKTphM2UoImRlZmF1bHQiKX1mdW5jdGlvbiBjM2UobCl7cmV0dXJuIGZ1'@;
put 'bmN0aW9uIGdkdChsKXtpZihBcnJheS5pc0FycmF5KGwpKXJldHVybiBsfShsKXx8ZnVuY3Rpb24gbWR0KGwpe2lmKHR5cGVvZiBTeW1ib2w8InUiJiZudWxsIT1sW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWxbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbShsKX0obCl8fGZ1bmN0'@;
put 'aW9uIHBkdChsLGMpe2lmKGwpe2lmKCJzdHJpbmciPT10eXBlb2YgbClyZXR1cm4gZjNlKGwsYyk7dmFyIGE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGwpLnNsaWNlKDgsLTEpO2lmKCJPYmplY3QiPT09YSYmbC5jb25zdHJ1Y3RvciYmKGE9bC5jb25zdHJ1Y3Rvci5uYW1lKSwi'@;
put 'TWFwIj09PWF8fCJTZXQiPT09YSlyZXR1cm4gQXJyYXkuZnJvbShsKTtpZigiQXJndW1lbnRzIj09PWF8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KGEpKXJldHVybiBmM2UobCxjKX19KGwpfHxmdW5jdGlvbiBoZHQoKXt0aHJvdyBuZXcgVHlwZUVy'@;
put 'cm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIGYzZShsLGMp'@;
put 'eyhudWxsPT1jfHxjPmwubGVuZ3RoKSYmKGM9bC5sZW5ndGgpO2Zvcih2YXIgYT0wLGY9bmV3IEFycmF5KGMpO2E8YzthKyspZlthXT1sW2FdO3JldHVybiBmfWZ1bmN0aW9uIHJ5KGwpe3JldHVybihyeT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJv'@;
put 'bC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfUVMKCJudW1l'@;
put 'cmljIixmdW5jdGlvbiBvZHQobCxjLGEpe3JldHVybiBmdW5jdGlvbihmLGQpe3ZhciBoPXBhcnNlRmxvYXQoZiksbT1wYXJzZUZsb2F0KGQpLF89YS5zb3J0RW1wdHlDZWxscztpZihoPT09bXx8aXNOYU4oaCkmJmlzTmFOKG0pKXJldHVybiAwO2lmKF8pe2lmKHd1KGYpKXJldHVybiJhc2Mi'@;
put 'PT09bD8tMToxO2lmKHd1KGQpKXJldHVybiJhc2MiPT09bD8xOi0xfXJldHVybiBpc05hTihoKT8xOmlzTmFOKG0pPy0xOmg8bT8iYXNjIj09PWw/LTE6MTpoPm0/ImFzYyI9PT1sPzE6LTE6MH19KSxFTCgiY2hlY2tib3giLGZ1bmN0aW9uIGxkdChsLGMsYSl7dmFyIGY9Yy5jaGVja2VkVGVt'@;
put 'cGxhdGUsZD1jLnVuY2hlY2tlZFRlbXBsYXRlLGg9YS5zb3J0RW1wdHlDZWxscztyZXR1cm4gZnVuY3Rpb24obSxfKXt2YXIgTz13dShtKSxYPXd1KF8pLGFlPU8/ZDptLHBlPVg/ZDpfLGJlPWFlPT09ZHx8YWU9PT1mLHhlPXBlPT09ZHx8cGU9PT1mO2lmKCExPT09aCl7aWYoTyYmITE9PT1Y'@;
put 'KXJldHVybiAxO2lmKCExPT09TyYmWClyZXR1cm4tMX1yZXR1cm4hMT09PWJlJiZ4ZT8iYXNjIj09PWw/LTE6MTpiZSYmITE9PT14ZT8iYXNjIj09PWw/MTotMTohMT09PWJlJiYhMT09PXhlP2kzZShsLGMsYSkobSxfKTphZT09PWQmJnBlPT09Zj8iYXNjIj09PWw/LTE6MTphZT09PWYmJnBl'@;
put 'PT09ZD8iYXNjIj09PWw/MTotMTowfX0pLEVMKCJkYXRlIixmdW5jdGlvbiB1ZHQobCxjLGEpe3JldHVybiBmdW5jdGlvbihmLGQpe3ZhciBoPWEuc29ydEVtcHR5Q2VsbHM7aWYoZj09PWQpcmV0dXJuIDA7aWYod3UoZikpcmV0dXJuIHd1KGQpPzA6aCYmImFzYyI9PT1sPy0xOjE7aWYod3Uo'@;
put 'ZCkpcmV0dXJuIGgmJiJhc2MiPT09bD8xOi0xO3ZhciBtPWMuZGF0ZUZvcm1hdCxfPUtvKGYsbSksTz1LbyhkLG0pO3JldHVybiBfLmlzVmFsaWQoKT9PLmlzVmFsaWQoKT9PLmlzQWZ0ZXIoXyk/ImFzYyI9PT1sPy0xOjE6Ty5pc0JlZm9yZShfKT8iYXNjIj09PWw/MTotMTowOi0xOjF9fSks'@;
put 'RUwoImRlZmF1bHQiLGkzZSk7dmFyIHlkdD1bImNvbHVtbiJdLGJkdD1bImNvbHVtbiJdO2Z1bmN0aW9uIGl5KGwpe3JldHVybiBmdW5jdGlvbiBTZHQobCl7aWYoQXJyYXkuaXNBcnJheShsKSlyZXR1cm4gaksobCl9KGwpfHxmdW5jdGlvbiBDZHQobCl7aWYodHlwZW9mIFN5bWJvbDwidSIm'@;
put 'Jm51bGwhPWxbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9bFsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKGwpfShsKXx8ZnVuY3Rpb24gd2R0KGwsYyl7aWYobCl7aWYoInN0cmluZyI9PXR5cGVvZiBsKXJldHVybiBqSyhsLGMpO3ZhciBhPU9iamVjdC5wcm90b3R5cGUudG9TdHJp'@;
put 'bmcuY2FsbChsKS5zbGljZSg4LC0xKTtpZigiT2JqZWN0Ij09PWEmJmwuY29uc3RydWN0b3ImJihhPWwuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1hfHwiU2V0Ij09PWEpcmV0dXJuIEFycmF5LmZyb20obCk7aWYoIkFyZ3VtZW50cyI9PT1hfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/'@;
put 'OkNsYW1wZWQpP0FycmF5JC8udGVzdChhKSlyZXR1cm4gaksobCxjKX19KGwpfHxmdW5jdGlvbiBfZHQoKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJy'@;
put 'YXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBqSyhsLGMpeyhudWxsPT1jfHxjPmwubGVuZ3RoKSYmKGM9bC5sZW5ndGgpO2Zvcih2YXIgYT0wLGY9bmV3IEFycmF5KGMpO2E8YzthKyspZlthXT1sW2FdO3JldHVybiBmfWZ1'@;
put 'bmN0aW9uIGQzZShsLGMpe3ZhciBhPU9iamVjdC5rZXlzKGwpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBmPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMobCk7YyYmKGY9Zi5maWx0ZXIoZnVuY3Rpb24oZCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURl'@;
put 'c2NyaXB0b3IobCxkKS5lbnVtZXJhYmxlfSkpLGEucHVzaC5hcHBseShhLGYpfXJldHVybiBhfWZ1bmN0aW9uIGgzZShsKXtmb3IodmFyIGM9MTtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKXt2YXIgYT1udWxsIT1hcmd1bWVudHNbY10/YXJndW1lbnRzW2NdOnt9O2MlMj9kM2UoT2JqZWN0KGEp'@;
put 'LCEwKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe01kdChsLGYsYVtmXSl9KTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhsLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGEpKTpkM2UoT2JqZWN0KGEpKS5mb3JFYWNoKGZ1bmN0'@;
put 'aW9uKGYpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLGYsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihhLGYpKX0pfXJldHVybiBsfWZ1bmN0aW9uIE1kdChsLGMsYSl7cmV0dXJuKGM9ZzNlKGMpKWluIGw/T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsYyx7dmFsdWU6YSxlbnVtZXJh'@;
put 'YmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmxbY109YSxsfWZ1bmN0aW9uIHAzZShsLGMpe2lmKG51bGw9PWwpcmV0dXJue307dmFyIGYsZCxhPWZ1bmN0aW9uIGtkdChsLGMpe2lmKG51bGw9PWwpcmV0dXJue307dmFyIGQsaCxhPXt9LGY9T2JqZWN0LmtleXMobCk7Zm9y'@;
put 'KGg9MDtoPGYubGVuZ3RoO2grKykhKGMuaW5kZXhPZihkPWZbaF0pPj0wKSYmKGFbZF09bFtkXSk7cmV0dXJuIGF9KGwsYyk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGg9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhsKTtmb3IoZD0wO2Q8aC5sZW5ndGg7ZCsr'@;
put 'KSEoYy5pbmRleE9mKGY9aFtkXSk+PTApJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwobCxmKSYmKGFbZl09bFtmXSl9cmV0dXJuIGF9ZnVuY3Rpb24gbTNlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxl'@;
put 'PWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxnM2UoZi5rZXkpLGYpfX1mdW5jdGlvbiBnM2UobCl7dmFyIGM9ZnVuY3Rpb24gQWR0KGwsYyl7aWYoIm9iamVjdCIhPT1yeShsKXx8'@;
put 'bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1yeShmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJu'@;
put 'IGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09cnkoYyk/YzpTdHJpbmcoYyl9ZnVuY3Rpb24gVTUoKXtyZXR1cm4gVTU9dHlwZW9mIFJlZmxlY3Q8InUiJiZSZWZsZWN0LmdldD9S'@;
put 'ZWZsZWN0LmdldC5iaW5kKCk6ZnVuY3Rpb24oYyxhLGYpe3ZhciBkPWZ1bmN0aW9uIFRkdChsLGMpe2Zvcig7IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsLGMpJiZudWxsIT09KGw9XzMobCkpOyk7cmV0dXJuIGx9KGMsYSk7aWYoZCl7dmFyIGg9T2JqZWN0LmdldE93'@;
put 'blByb3BlcnR5RGVzY3JpcHRvcihkLGEpO3JldHVybiBoLmdldD9oLmdldC5jYWxsKGFyZ3VtZW50cy5sZW5ndGg8Mz9jOmYpOmgudmFsdWV9fSxVNS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24geksobCxjKXtyZXR1cm4oeks9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5z'@;
put 'ZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZixkKXtyZXR1cm4gZi5fX3Byb3RvX189ZCxmfSkobCxjKX1mdW5jdGlvbiBfMyhsKXtyZXR1cm4oXzM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuX19w'@;
put 'cm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSl9KShsKX12YXIgVUs9ImNvbHVtblNvcnRpbmciO3MzZShVSyxmdW5jdGlvbiB2ZHQobCxjKXtyZXR1cm4gZnVuY3Rpb24oYSxmKXt2YXIgYWUscGUsYmUseGUsVmUsaD1jM2UoYSkuc2xpY2UoMSksXz1jM2UoZikuc2xpY2UoMSk7cmV0'@;
put 'dXJuIGFlPWxbMF0sYmU9aFswXSx4ZT1fWzBdLCgoVmU9KHBlPWNbMF0pLmNvbHVtblNvcnRpbmcpLmNvbXBhcmVGdW5jdGlvbkZhY3Rvcnk/VmUuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeTp1M2UocGUudHlwZSkpKGFlLHBlLFZlKShiZSx4ZSl9fSksdW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0'@;
put 'ZXIoImJlZm9yZUNvbHVtblNvcnQiKSx1by5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb2x1bW5Tb3J0Iik7dmFyIHkzZT1mdW5jdGlvbihsKXshZnVuY3Rpb24gT2R0KGwsYyl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGMmJm51bGwhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1'@;
put 'cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7bC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShjJiZjLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmwsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0'@;
put 'eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGMmJnpLKGwsYyl9KGEsbCk7dmFyIGM9ZnVuY3Rpb24gRGR0KGwpe3ZhciBjPWZ1bmN0aW9uIExkdCgpe2lmKHR5cGVvZiBSZWZsZWN0PiJ1Inx8IVJlZmxlY3QuY29uc3RydWN0fHxSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiEx'@;
put 'O2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLGZ1bmN0aW9uKCl7fSkpLCEwfWNhdGNoe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2'@;
put 'YXIgZCxmPV8zKGwpO2lmKGMpe3ZhciBoPV8zKHRoaXMpLmNvbnN0cnVjdG9yO2Q9UmVmbGVjdC5jb25zdHJ1Y3QoZixhcmd1bWVudHMsaCl9ZWxzZSBkPWYuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbiBJZHQobCxjKXtpZihjJiYoIm9iamVjdCI9PT1yeShjKXx8ImZ1'@;
put 'bmN0aW9uIj09dHlwZW9mIGMpKXJldHVybiBjO2lmKHZvaWQgMCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24gUmR0KGwpe2lmKHZvaWQgMD09PWwpdGhyb3cg'@;
put 'bmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gbH0obCl9KHRoaXMsZCl9fShhKTtmdW5jdGlvbiBhKGYpe3ZhciBkO3JldHVybiBmdW5jdGlvbiBFZHQobCxjKXtpZighKGwgaW5zdGFu'@;
put 'Y2VvZiBjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxhKSwoZD1jLmNhbGwodGhpcyxmKSkuY29sdW1uU3RhdGVzTWFuYWdlcj1udWxsLGQuY29sdW1uTWV0YUNhY2hlPW51bGwsZC5wbHVnaW5LZXk9VUssZC5pbmRleGVz'@;
put 'U2VxdWVuY2VDYWNoZT1udWxsLGR9cmV0dXJuIGZ1bmN0aW9uIHhkdChsLGMsYSl7YyYmbTNlKGwucHJvdG90eXBlLGMpLGEmJm0zZShsLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShhLFt7a2V5OiJpc0VuYWJsZWQiLHZhbHVlOmZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3RoaXMucGx1Z2luS2V5XX19LHtrZXk6ImVuYWJsZVBsdWdpbiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzO3RoaXMuZW5hYmxlZHx8KHRoaXMuY29sdW1uU3RhdGVzTWFuYWdlcj1uZXcgcWZ0KHRoaXMuaG90LCIiLmNv'@;
put 'bmNhdCh0aGlzLnBsdWdpbktleSwiLnNvcnRpbmdTdGF0ZXMiKSksdGhpcy5jb2x1bW5NZXRhQ2FjaGU9bmV3IEY0KGZ1bmN0aW9uKGgpe3ZhciBtPWQuaG90LnRvVmlzdWFsQ29sdW1uKGgpO3JldHVybiBudWxsPT09bSYmKG09aCksZC5nZXRNZXJnZWRQbHVnaW5TZXR0aW5ncyhtKX0pLHRo'@;
put 'aXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKCIiLmNvbmNhdCh0aGlzLnBsdWdpbktleSwiLmNvbHVtbk1ldGEiKSx0aGlzLmNvbHVtbk1ldGFDYWNoZSksdGhpcy5hZGRIb29rKCJhZnRlckdldENvbEhlYWRlciIsZnVuY3Rpb24oaCxtKXtyZXR1cm4gZC5vbkFmdGVyR2V0'@;
put 'Q29sSGVhZGVyKGgsbSl9KSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkJlZm9yZU9uQ2VsbE1vdXNlRG93bi5hcHBseShkLGFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyT25DZWxsTW91c2VEb3duIixmdW5jdGlvbiho'@;
put 'LG0pe3JldHVybiBkLm9uQWZ0ZXJPbkNlbGxNb3VzZURvd24oaCxtKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJJbml0IixmdW5jdGlvbigpe3JldHVybiBkLmxvYWRPclNvcnRCeVNldHRpbmdzKCl9KSx0aGlzLmFkZEhvb2soImFmdGVyTG9hZERhdGEiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25B'@;
put 'ZnRlckxvYWREYXRhLmFwcGx5KGQsYXJndW1lbnRzKX0pLHRoaXMuaG90LnZpZXcmJnRoaXMubG9hZE9yU29ydEJ5U2V0dGluZ3MoKSxVNShfMyhhLnByb3RvdHlwZSksImVuYWJsZVBsdWdpbiIsdGhpcykuY2FsbCh0aGlzKSl9fSx7a2V5OiJkaXNhYmxlUGx1Z2luIix2YWx1ZTpmdW5jdGlv'@;
put 'bigpe3ZhciBkPXRoaXMsaD1mdW5jdGlvbihfLE8pe3ZhciBYPUoyZShPKTshMT09PVEyZShfLE8pfHxudWxsPT09WHx8ZC51cGRhdGVIZWFkZXJDbGFzc2VzKFgpfTt0aGlzLmhvdC5hZGRIb29rKCJhZnRlckdldENvbEhlYWRlciIsaCksdGhpcy5ob3QuYWRkSG9va09uY2UoImFmdGVyVmll'@;
put 'd1JlbmRlciIsZnVuY3Rpb24oKXtkLmhvdC5yZW1vdmVIb29rKCJhZnRlckdldENvbEhlYWRlciIsaCl9KSx0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbihmdW5jdGlvbigpe251bGwhPT1kLmluZGV4ZXNTZXF1ZW5jZUNhY2hlJiYoZC5ob3Qucm93SW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVl'@;
put 'bmNlKGQuaW5kZXhlc1NlcXVlbmNlQ2FjaGUuZ2V0VmFsdWVzKCkpLGQuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAoZC5wbHVnaW5LZXkpKX0sITApLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAoIiIuY29uY2F0KHRoaXMucGx1Z2luS2V5LCIuY29s'@;
put 'dW1uTWV0YSIpKSx0aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZGVzdHJveSgpLHRoaXMuY29sdW1uTWV0YUNhY2hlPW51bGwsdGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyPW51bGwsVTUoXzMoYS5wcm90b3R5cGUpLCJkaXNhYmxlUGx1Z2luIix0aGlzKS5jYWxsKHRoaXMpfX0se2tleToic29y'@;
put 'dCIsdmFsdWU6ZnVuY3Rpb24oZCl7dmFyIGg9dGhpcy5nZXRTb3J0Q29uZmlnKCksbT10aGlzLmdldE5vcm1hbGl6ZWRTb3J0Q29uZmlncyhkKSxfPXRoaXMuYXJlVmFsaWRTb3J0Q29uZmlncyhtKTshMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb2x1bW5Tb3J0IixoLG0sXykmJigw'@;
put 'PT09aC5sZW5ndGgmJm51bGw9PT10aGlzLmluZGV4ZXNTZXF1ZW5jZUNhY2hlJiYodGhpcy5pbmRleGVzU2VxdWVuY2VDYWNoZT10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbktleSxuZXcgR2ZlKSx0aGlzLmluZGV4ZXNTZXF1ZW5jZUNhY2hlLnNldFZh'@;
put 'bHVlcyh0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKSkpLF8mJih0aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuc2V0U29ydFN0YXRlcyhtKSx0aGlzLnNvcnRCeVByZXNldFNvcnRTdGF0ZXMobSksdGhpcy5zYXZlQWxsU29ydFNldHRpbmdzKG0pKSx0aGlzLmhv'@;
put 'dC5ydW5Ib29rcygiYWZ0ZXJDb2x1bW5Tb3J0IixoLF8/bTpoLF8pLF8mJih0aGlzLmhvdC5yZW5kZXIoKSx0aGlzLmhvdC5mb3JjZUZ1bGxSZW5kZXI9ITEsdGhpcy5ob3Qudmlldy5yZW5kZXIoKSkpfX0se2tleToiY2xlYXJTb3J0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc29ydChbXSl9'@;
put 'fSx7a2V5OiJpc1NvcnRlZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbmFibGVkJiYhdGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmlzTGlzdE9mU29ydGVkQ29sdW1uc0VtcHR5KCl9fSx7a2V5OiJnZXRTb3J0Q29uZmlnIix2YWx1ZTpmdW5jdGlvbihkKXtyZXR1cm4gaW8oZCk/'@;
put 'dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmdldENvbHVtblNvcnRTdGF0ZShkKTp0aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZ2V0U29ydFN0YXRlcygpfX0se2tleToic2V0U29ydENvbmZpZyIsdmFsdWU6ZnVuY3Rpb24oZCl7dmFyIGg9dGhpcy5nZXROb3JtYWxpemVkU29ydENvbmZpZ3Mo'@;
put 'ZCk7dGhpcy5hcmVWYWxpZFNvcnRDb25maWdzKGgpJiZ0aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuc2V0U29ydFN0YXRlcyhoKX19LHtrZXk6ImdldE5vcm1hbGl6ZWRTb3J0Q29uZmlncyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3Vt'@;
put 'ZW50c1swXT9hcmd1bWVudHNbMF06W107cmV0dXJuIEFycmF5LmlzQXJyYXkoZCk/ZC5zbGljZSgwLDEpOltkXX19LHtrZXk6ImFyZVZhbGlkU29ydENvbmZpZ3MiLHZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBoPXRoaXMuaG90LmNvdW50Q29scygpO3JldHVybiBmdW5jdGlvbiBRZnQobCl7aWYo'@;
put 'bC5zb21lKGZ1bmN0aW9uKGEpe3JldHVybiExPT09ZnVuY3Rpb24gSmZ0KGwpe2lmKCExPT09cGEobCkpcmV0dXJuITE7dmFyIGE9bC5zb3J0T3JkZXI7cmV0dXJuIE51bWJlci5pc0ludGVnZXIobC5jb2x1bW4pJiZbTUwsa0xdLmluY2x1ZGVzKGEpfShhKX0pKXJldHVybiExO3ZhciBjPWwu'@;
put 'bWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLmNvbHVtbn0pO3JldHVybiBuZXcgU2V0KGMpLnNpemU9PT1jLmxlbmd0aH0oZCkmJmQuZXZlcnkoZnVuY3Rpb24obSl7dmFyIF89bS5jb2x1bW47cmV0dXJuIF88PWgmJl8+PTB9KX19LHtrZXk6InNhdmVBbGxTb3J0U2V0dGluZ3MiLHZhbHVlOmZ1'@;
put 'bmN0aW9uKGQpe3ZhciBoPXRoaXMsbT10aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZ2V0QWxsQ29sdW1uc1Byb3BlcnRpZXMoKTttLmluaXRpYWxDb25maWc9aGEoZCxmdW5jdGlvbihYKXt2YXIgYWU9WC5jb2x1bW4scGU9cDNlKFgseWR0KTtyZXR1cm4gaDNlKHtjb2x1bW46aC5ob3QudG9Q'@;
put 'aHlzaWNhbENvbHVtbihhZSl9LHBlKX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJwZXJzaXN0ZW50U3RhdGVTYXZlIiwiY29sdW1uU29ydGluZyIsbSl9fSx7a2V5OiJnZXRBbGxTYXZlZFNvcnRTZXR0aW5ncyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLGg9e307dGhpcy5ob3QucnVuSG9v'@;
put 'a3MoInBlcnNpc3RlbnRTdGF0ZUxvYWQiLCJjb2x1bW5Tb3J0aW5nIixoKTt2YXIgbT1oLnZhbHVlO3JldHVybiBpbyhtKSYmQXJyYXkuaXNBcnJheShtLmluaXRpYWxDb25maWcpJiYobS5pbml0aWFsQ29uZmlnPWhhKG0uaW5pdGlhbENvbmZpZyxmdW5jdGlvbihYKXt2YXIgYWU9WC5jb2x1'@;
put 'bW4scGU9cDNlKFgsYmR0KTtyZXR1cm4gaDNlKHtjb2x1bW46ZC5ob3QudG9WaXN1YWxDb2x1bW4oYWUpfSxwZSl9KSksbX19LHtrZXk6ImdldENvbHVtbk5leHRDb25maWciLHZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBoPXRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5nZXRTb3J0T3JkZXJPZkNv'@;
put 'bHVtbihkKTtpZihpbyhoKSl7dmFyIG09WDJlKGgpO3JldHVybiBpbyhtKT97Y29sdW1uOmQsc29ydE9yZGVyOm19OnZvaWQgMH12YXIgXz10aGlzLmhvdC5jb3VudENvbHMoKTtpZihOdW1iZXIuaXNJbnRlZ2VyKGQpJiZkPj0wJiZkPF8pcmV0dXJue2NvbHVtbjpkLHNvcnRPcmRlcjpYMmUo'@;
put 'KX19fSx7a2V5OiJnZXROZXh0U29ydENvbmZpZyIsdmFsdWU6ZnVuY3Rpb24oZCl7dmFyIGg9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJhcHBlbmQiLG09dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmdldEluZGV4T2ZDb2x1bW5JblNv'@;
put 'cnRRdWV1ZShkKSxfPS0xIT09bSxPPXRoaXMuZ2V0U29ydENvbmZpZygpLFg9dGhpcy5nZXRDb2x1bW5OZXh0Q29uZmlnKGQpO2lmKF8pe2lmKExsKFgpKXJldHVybltdLmNvbmNhdChpeShPLnNsaWNlKDAsbSkpLGl5KE8uc2xpY2UobSsxKSkpO2lmKCJhcHBlbmQiPT09aClyZXR1cm5bXS5j'@;
put 'b25jYXQoaXkoTy5zbGljZSgwLG0pKSxpeShPLnNsaWNlKG0rMSkpLFtYXSk7aWYoInJlcGxhY2UiPT09aClyZXR1cm5bXS5jb25jYXQoaXkoTy5zbGljZSgwLG0pKSxbWF0saXkoTy5zbGljZShtKzEpKSl9cmV0dXJuIGlvKFgpP08uY29uY2F0KFgpOk99fSx7a2V5OiJnZXRQbHVnaW5Db2x1'@;
put 'bW5Db25maWciLHZhbHVlOmZ1bmN0aW9uKGQpe2lmKHBhKGQpKXt2YXIgaD1kW3RoaXMucGx1Z2luS2V5XTtpZihwYShoKSlyZXR1cm4gaH1yZXR1cm57fX19LHtrZXk6ImdldE1lcmdlZFBsdWdpblNldHRpbmdzIix2YWx1ZTpmdW5jdGlvbihkKXt2YXIgaD10aGlzLmhvdC5nZXRTZXR0aW5n'@;
put 'cygpW3RoaXMucGx1Z2luS2V5XSxtPXRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5nZXRBbGxDb2x1bW5zUHJvcGVydGllcygpLF89dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoMCxkKSxPPU9iamVjdC5nZXRQcm90b3R5cGVPZihfKTtyZXR1cm4gQXJyYXkuaXNBcnJheShPLmNvbHVtbnMpP09iamVj'@;
put 'dC5hc3NpZ24obSxoLHRoaXMuZ2V0UGx1Z2luQ29sdW1uQ29uZmlnKE8uY29sdW1uc1tkXSkpOlBsKE8uY29sdW1ucyk/T2JqZWN0LmFzc2lnbihtLGgsdGhpcy5nZXRQbHVnaW5Db2x1bW5Db25maWcoTy5jb2x1bW5zKGQpKSk6T2JqZWN0LmFzc2lnbihtLGgpfX0se2tleToiZ2V0Rmlyc3RD'@;
put 'ZWxsU2V0dGluZ3MiLHZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBoPXRoaXMuaG90LmdldENlbGxNZXRhKDAsZCksbT1PYmplY3QuY3JlYXRlKGgpO3JldHVybiBtW3RoaXMucGx1Z2luS2V5XT10aGlzLmNvbHVtbk1ldGFDYWNoZS5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENv'@;
put 'bHVtbihkKSksbX19LHtrZXk6ImdldE51bWJlck9mUm93c1RvU29ydCIsdmFsdWU6ZnVuY3Rpb24oZCl7dmFyIGg9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTtyZXR1cm4gaC5tYXhSb3dzPD1kP2gubWF4Um93czpkLWgubWluU3BhcmVSb3dzfX0se2tleToic29ydEJ5UHJlc2V0U29ydFN0YXRl'@;
put 'cyIsdmFsdWU6ZnVuY3Rpb24oZCl7dmFyIGg9dGhpcztpZigwIT09ZC5sZW5ndGgpe2Zvcih2YXIgbT1bXSxfPXRoaXMuaG90LmNvdW50Um93cygpLE89ZnVuY3Rpb24obHQpe3JldHVybiBoYShkLGZ1bmN0aW9uKGR0KXtyZXR1cm4gaC5ob3QuZ2V0RGF0YUF0Q2VsbChsdCxkdC5jb2x1bW4p'@;
put 'fSl9LFg9MDtYPHRoaXMuZ2V0TnVtYmVyT2ZSb3dzVG9Tb3J0KF8pO1grPTEpbS5wdXNoKFt0aGlzLmhvdC50b1BoeXNpY2FsUm93KFgpXS5jb25jYXQoTyhYKSkpO3ZhciBhZT1oYShtLGZ1bmN0aW9uKFplKXtyZXR1cm4gWmVbMF19KTshZnVuY3Rpb24gaWR0KGwsYyl7Zm9yKHZhciBhPWRk'@;
put 'dChjKSxmPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoZj4yP2YtMjowKSxoPTI7aDxmO2grKylkW2gtMl09YXJndW1lbnRzW2hdO2wuc29ydChhLmFwcGx5KHZvaWQgMCxkKSl9KG0sdGhpcy5wbHVnaW5LZXksaGEoZCxmdW5jdGlvbihaZSl7cmV0dXJuIFplLnNvcnRPcmRlcn0pLGhh'@;
put 'KGQsZnVuY3Rpb24oWmUpe3JldHVybiBoLmdldEZpcnN0Q2VsbFNldHRpbmdzKFplLmNvbHVtbil9KSk7Zm9yKHZhciBwZT1tLmxlbmd0aDtwZTxfO3BlKz0xKW0ucHVzaChbcGVdLmNvbmNhdChPKHBlKSkpO3ZhciBiZT1oYShtLGZ1bmN0aW9uKFplKXtyZXR1cm4gWmVbMF19KSx4ZT1uZXcg'@;
put 'TWFwKGhhKGFlLGZ1bmN0aW9uKFplLGx0KXtyZXR1cm5bWmUsYmVbbHRdXX0pKSxWZT1oYSh0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKSxmdW5jdGlvbihaZSl7cmV0dXJuIHhlLmhhcyhaZSk/eGUuZ2V0KFplKTpaZX0pO3RoaXMuaG90LnJvd0luZGV4TWFw'@;
put 'cGVyLnNldEluZGV4ZXNTZXF1ZW5jZShWZSl9ZWxzZSB0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5zZXRJbmRleGVzU2VxdWVuY2UodGhpcy5pbmRleGVzU2VxdWVuY2VDYWNoZS5nZXRWYWx1ZXMoKSl9fSx7a2V5OiJsb2FkT3JTb3J0QnlTZXR0aW5ncyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIg'@;
put 'ZD10aGlzLmdldEFsbFNhdmVkU29ydFNldHRpbmdzKCk7aWYocGEoZCkpdGhpcy5zb3J0QnlTZXR0aW5ncyhkKTtlbHNle3ZhciBoPXRoaXMuaG90LmdldFNldHRpbmdzKClbdGhpcy5wbHVnaW5LZXldO3RoaXMuc29ydEJ5U2V0dGluZ3MoaCl9fX0se2tleToic29ydEJ5U2V0dGluZ3MiLHZh'@;
put 'bHVlOmZ1bmN0aW9uKGQpe2lmKHBhKGQpKXt0aGlzLmNvbHVtblN0YXRlc01hbmFnZXIudXBkYXRlQWxsQ29sdW1uc1Byb3BlcnRpZXMoZCk7dmFyIGg9ZC5pbml0aWFsQ29uZmlnOyhBcnJheS5pc0FycmF5KGgpfHxwYShoKSkmJnRoaXMuc29ydChoKX1lbHNlIHRoaXMuaG90LnJlbmRlcigp'@;
put 'fX0se2tleToib25BZnRlckdldENvbEhlYWRlciIsdmFsdWU6ZnVuY3Rpb24oZCxoKXt2YXIgbT1KMmUoaCk7aWYoITEhPT1RMmUoZCxoKSYmbnVsbCE9PW0pe3ZhciBfPXRoaXMuZ2V0Rmlyc3RDZWxsU2V0dGluZ3MoZClbdGhpcy5wbHVnaW5LZXldO3RoaXMudXBkYXRlSGVhZGVyQ2xhc3Nl'@;
put 'cyhtLHRoaXMuY29sdW1uU3RhdGVzTWFuYWdlcixkLF8uaW5kaWNhdG9yLF8uaGVhZGVyQWN0aW9uKX19fSx7a2V5OiJ1cGRhdGVIZWFkZXJDbGFzc2VzIix2YWx1ZTpmdW5jdGlvbihkKXtpZihKbyhkLGZ1bmN0aW9uIHJkdCgpe3JldHVybiBBcnJheS5mcm9tKHIzZS52YWx1ZXMoKSkuY29u'@;
put 'Y2F0KG4zZSxlM2UsdDNlKX0oKSksITEhPT10aGlzLmVuYWJsZWQpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLG09bmV3IEFycmF5KGg+MT9oLTE6MCksXz0xO188aDtfKyspbVtfLTFdPWFyZ3VtZW50c1tfXTtnaShkLG5kdC5hcHBseSh2b2lkIDAsbSkpfX19LHtrZXk6Im9uVXBkYXRl'@;
put 'U2V0dGluZ3MiLHZhbHVlOmZ1bmN0aW9uKGQpe1U1KF8zKGEucHJvdG90eXBlKSwib25VcGRhdGVTZXR0aW5ncyIsdGhpcykuY2FsbCh0aGlzKSxudWxsIT09dGhpcy5jb2x1bW5NZXRhQ2FjaGUmJnRoaXMuY29sdW1uTWV0YUNhY2hlLmluaXQodGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIu'@;
put 'Z2V0TnVtYmVyT2ZJbmRleGVzKCkpLGlvKGRbdGhpcy5wbHVnaW5LZXldKSYmdGhpcy5zb3J0QnlTZXR0aW5ncyhkW3RoaXMucGx1Z2luS2V5XSl9fSx7a2V5OiJvbkFmdGVyTG9hZERhdGEiLHZhbHVlOmZ1bmN0aW9uKGQpeyEwPT09ZCYmdGhpcy5ob3QudmlldyYmdGhpcy5sb2FkT3JTb3J0'@;
put 'QnlTZXR0aW5ncygpfX0se2tleToid2FzQ2xpY2thYmxlSGVhZGVyQ2xpY2tlZCIsdmFsdWU6ZnVuY3Rpb24oZCxoKXtyZXR1cm4gdGhpcy5nZXRGaXJzdENlbGxTZXR0aW5ncyhoKVt0aGlzLnBsdWdpbktleV0uaGVhZGVyQWN0aW9uJiYiU1BBTiI9PT1kLnRhcmdldC5ub2RlTmFtZX19LHtr'@;
put 'ZXk6Im9uQmVmb3JlT25DZWxsTW91c2VEb3duIix2YWx1ZTpmdW5jdGlvbihkLGgsbSxfKXshMSE9PVZLKGgucm93LGguY29sLGQpJiZ0aGlzLndhc0NsaWNrYWJsZUhlYWRlckNsaWNrZWQoZCxoLmNvbCkmJnRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmlzQ3RybFByZXNzZWQoKSYm'@;
put 'KF8uY29sdW1uPSEwKX19LHtrZXk6Im9uQWZ0ZXJPbkNlbGxNb3VzZURvd24iLHZhbHVlOmZ1bmN0aW9uKGQsaCl7ITEhPT1WSyhoLnJvdyxoLmNvbCxkKSYmdGhpcy53YXNDbGlja2FibGVIZWFkZXJDbGlja2VkKGQsaC5jb2wpJiYodGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuaXND'@;
put 'dHJsUHJlc3NlZCgpJiYodGhpcy5ob3QuZGVzZWxlY3RDZWxsKCksdGhpcy5ob3Quc2VsZWN0Q29sdW1ucyhoLmNvbCkpLHRoaXMuc29ydCh0aGlzLmdldENvbHVtbk5leHRDb25maWcoaC5jb2wpKSl9fSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkO251bGw9PT0oZD10'@;
put 'aGlzLmNvbHVtblN0YXRlc01hbmFnZXIpfHx2b2lkIDA9PT1kfHxkLmRlc3Ryb3koKSxVNShfMyhhLnByb3RvdHlwZSksImRlc3Ryb3kiLHRoaXMpLmNhbGwodGhpcyl9fV0sW3trZXk6IlBMVUdJTl9LRVkiLGdldDpmdW5jdGlvbigpe3JldHVybiBVS319LHtrZXk6IlBMVUdJTl9QUklPUklU'@;
put 'WSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDUwfX1dKSxhfShHYSk7ZnVuY3Rpb24gQWsobCl7cmV0dXJuKEFrPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7'@;
put 'cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gYjNlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5l'@;
put 'bnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxWZHQoZi5rZXkpLGYpfX1mdW5jdGlvbiBWZHQobCl7dmFyIGM9ZnVuY3Rpb24gQmR0KGwsYyl7aWYoIm9iamVjdCIh'@;
put 'PT1BayhsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1BayhmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11'@;
put 'c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09QWsoYyk/YzpTdHJpbmcoYyl9VCg0MjE0MCk7dmFyIGpkdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGwoYyxhKXsoZnVu'@;
put 'Y3Rpb24gSGR0KGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLGwpLHRoaXMucGx1Z2luPWMsdGhpcy5ob3Q9dGhpcy5wbHVnaW4uaG90LHRoaXMuZW5kcG9pbnRzPVtdLHRoaXMu'@;
put 'c2V0dGluZ3M9YSx0aGlzLnNldHRpbmdzVHlwZT0iYXJyYXkiLHRoaXMuY3VycmVudEVuZHBvaW50PW51bGwsdGhpcy5jZWxsc1RvU2V0Q2FjaGU9W119cmV0dXJuIGZ1bmN0aW9uIE5kdChsLGMsYSl7YyYmYjNlKGwucHJvdG90eXBlLGMpLGEmJmIzZShsLGEpLE9iamVjdC5kZWZpbmVQcm9w'@;
put 'ZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShsLFt7a2V5OiJnZXRFbmRwb2ludCIsdmFsdWU6ZnVuY3Rpb24oYSl7cmV0dXJuImZ1bmN0aW9uIj09PXRoaXMuc2V0dGluZ3NUeXBlP3RoaXMuZmlsbE1pc3NpbmdFbmRwb2ludERhdGEodGhpcy5zZXR0aW5ncylbYV06dGhpcy5l'@;
put 'bmRwb2ludHNbYV19fSx7a2V5OiJnZXRBbGxFbmRwb2ludHMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09PXRoaXMuc2V0dGluZ3NUeXBlP3RoaXMuZmlsbE1pc3NpbmdFbmRwb2ludERhdGEodGhpcy5zZXR0aW5ncyk6dGhpcy5lbmRwb2ludHN9fSx7a2V5OiJmaWxsTWlz'@;
put 'c2luZ0VuZHBvaW50RGF0YSIsdmFsdWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucGFyc2VTZXR0aW5ncyhhLmNhbGwodGhpcykpfX0se2tleToicGFyc2VTZXR0aW5ncyIsdmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGY9dGhpcyxkPVtdLGg9YTtpZihofHwiZnVuY3Rpb24iIT10eXBlb2YgdGhp'@;
put 'cy5zZXR0aW5ncylyZXR1cm4gaHx8KGg9dGhpcy5zZXR0aW5ncyksUm4oaCxmdW5jdGlvbihtKXt2YXIgXz17fTtmLmFzc2lnblNldHRpbmcobSxfLCJyYW5nZXMiLFtbMCxmLmhvdC5jb3VudFJvd3MoKS0xXV0pLGYuYXNzaWduU2V0dGluZyhtLF8sInJldmVyc2VkUm93Q29vcmRzIiwhMSks'@;
put 'Zi5hc3NpZ25TZXR0aW5nKG0sXywiZGVzdGluYXRpb25Sb3ciLG5ldyBFcnJvcigiXG4gICAgICAgIFlvdSBtdXN0IHByb3ZpZGUgYSBkZXN0aW5hdGlvbiByb3cgZm9yIHRoZSBDb2x1bW4gU3VtbWFyeSBwbHVnaW4gaW4gb3JkZXIgdG8gd29yayBwcm9wZXJseSFcbiAgICAgICIpKSxmLmFz'@;
put 'c2lnblNldHRpbmcobSxfLCJkZXN0aW5hdGlvbkNvbHVtbiIsbmV3IEVycm9yKCJcbiAgICAgICAgWW91IG11c3QgcHJvdmlkZSBhIGRlc3RpbmF0aW9uIGNvbHVtbiBmb3IgdGhlIENvbHVtbiBTdW1tYXJ5IHBsdWdpbiBpbiBvcmRlciB0byB3b3JrIHByb3Blcmx5IVxuICAgICAgIikpLGYu'@;
put 'YXNzaWduU2V0dGluZyhtLF8sInNvdXJjZUNvbHVtbiIsbS5kZXN0aW5hdGlvbkNvbHVtbiksZi5hc3NpZ25TZXR0aW5nKG0sXywidHlwZSIsInN1bSIpLGYuYXNzaWduU2V0dGluZyhtLF8sImZvcmNlTnVtZXJpYyIsITEpLGYuYXNzaWduU2V0dGluZyhtLF8sInN1cHByZXNzRGF0YVR5cGVF'@;
put 'cnJvcnMiLCEwKSxmLmFzc2lnblNldHRpbmcobSxfLCJzdXBwcmVzc0RhdGFUeXBlRXJyb3JzIiwhMCksZi5hc3NpZ25TZXR0aW5nKG0sXywiY3VzdG9tRnVuY3Rpb24iLG51bGwpLGYuYXNzaWduU2V0dGluZyhtLF8sInJlYWRPbmx5IiwhMCksZi5hc3NpZ25TZXR0aW5nKG0sXywicm91bmRG'@;
put 'bG9hdCIsITEpLGQucHVzaChfKX0pLGQ7dGhpcy5zZXR0aW5nc1R5cGU9ImZ1bmN0aW9uIn19LHtrZXk6ImFzc2lnblNldHRpbmciLHZhbHVlOmZ1bmN0aW9uKGEsZixkLGgpe2lmKCJyYW5nZXMiIT09ZHx8dm9pZCAwIT09YVtkXSl7aWYoInJhbmdlcyIhPT1kfHwwIT09YVtkXS5sZW5ndGgp'@;
put 'aWYodm9pZCAwPT09YVtkXSl7aWYoaCBpbnN0YW5jZW9mIEVycm9yKXRocm93IGg7ZltkXT1ofWVsc2UgZltkXT0iZGVzdGluYXRpb25Sb3ciPT09ZCYmZi5yZXZlcnNlZFJvd0Nvb3Jkcz90aGlzLmhvdC5jb3VudFJvd3MoKS1hW2RdLTE6YVtkXX1lbHNlIGZbZF09aH19LHtrZXk6InJlc2V0'@;
put 'U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uIix2YWx1ZTpmdW5jdGlvbihhLGYsZCl7aWYoImZ1bmN0aW9uIj09PXRoaXMuc2V0dGluZ3NUeXBlKXt2YXIgaD1hLmluZGV4T2YoInJvdyIpPi0xPyJyb3ciOiJjb2wiLG09dGhpcy5nZXRBbGxFbmRwb2ludHMoKTtSbihtLGZ1bmN0aW9u'@;
put 'KF8peyJyb3ciPT09aCYmXy5kZXN0aW5hdGlvblJvdz49ZiYmKCJpbnNlcnRfcm93Ij09PWE/Xy5hbHRlclJvd09mZnNldD1kOiJyZW1vdmVfcm93Ij09PWEmJihfLmFsdGVyUm93T2Zmc2V0PS0xKmQpKSwiY29sIj09PWgmJl8uZGVzdGluYXRpb25Db2x1bW4+PWYmJigiaW5zZXJ0X2NvbCI9'@;
put 'PT1hP18uYWx0ZXJDb2x1bW5PZmZzZXQ9ZDoicmVtb3ZlX2NvbCI9PT1hJiYoXy5hbHRlckNvbHVtbk9mZnNldD0tMSpkKSl9KSx0aGlzLnJlc2V0QWxsRW5kcG9pbnRzKG0sITEpfX19LHtrZXk6InJlc2V0U2V0dXBBZnRlclN0cnVjdHVyZUFsdGVyYXRpb24iLHZhbHVlOmZ1bmN0aW9uKGEs'@;
put 'ZixkLGgsbSl7dmFyIF89dGhpcyxPPSEoYXJndW1lbnRzLmxlbmd0aD41JiZ2b2lkIDAhPT1hcmd1bWVudHNbNV0pfHxhcmd1bWVudHNbNV07aWYoImZ1bmN0aW9uIiE9PXRoaXMuc2V0dGluZ3NUeXBlKXt2YXIgYWU9YS5pbmRleE9mKCJyb3ciKT4tMT8icm93IjoiY29sIixwZT1hLmluZGV4'@;
put 'T2YoInJlbW92ZSIpPi0xPy0xOjEsYmU9dGhpcy5nZXRBbGxFbmRwb2ludHMoKSx4ZT0wPT09YS5pbmRleE9mKCJtb3ZlX3JvdyIpLFZlPWY7Um4oYmUsZnVuY3Rpb24oWmUpeyJyb3ciPT09YWUmJlplLmRlc3RpbmF0aW9uUm93Pj1WZSYmKFplLmFsdGVyUm93T2Zmc2V0PXBlKmQpLCJjb2wi'@;
put 'PT09YWUmJlplLmRlc3RpbmF0aW9uQ29sdW1uPj1WZSYmKFplLmFsdGVyQ29sdW1uT2Zmc2V0PXBlKmQpfSksdGhpcy5yZXNldEFsbEVuZHBvaW50cyhiZSwheGUpLFJuKGJlLHhlP2Z1bmN0aW9uKFplKXtfLmV4dGVuZEVuZHBvaW50UmFuZ2VzKFplLFZlLGhbMF0saC5sZW5ndGgpLF8ucmVj'@;
put 'cmVhdGVQaHlzaWNhbFJhbmdlcyhaZSksXy5jbGVhck9mZnNldEluZm9ybWF0aW9uKFplKX06ZnVuY3Rpb24oWmUpe18uc2hpZnRFbmRwb2ludENvb3JkaW5hdGVzKFplLFZlKX0pLE8mJnRoaXMucmVmcmVzaEFsbEVuZHBvaW50cygpfWVsc2UgdGhpcy5ob3QuYWRkSG9va09uY2UoImJlZm9y'@;
put 'ZVZpZXdSZW5kZXIiLGZ1bmN0aW9uIFplKCl7cmV0dXJuIF8uaG90LnJlbW92ZUhvb2soImJlZm9yZVZpZXdSZW5kZXIiLFplKSxfLnJlZnJlc2hBbGxFbmRwb2ludHMoKX0pfX0se2tleToiY2xlYXJPZmZzZXRJbmZvcm1hdGlvbiIsdmFsdWU6ZnVuY3Rpb24oYSl7YS5hbHRlclJvd09mZnNl'@;
put 'dD12b2lkIDAsYS5hbHRlckNvbHVtbk9mZnNldD12b2lkIDB9fSx7a2V5OiJleHRlbmRFbmRwb2ludFJhbmdlcyIsdmFsdWU6ZnVuY3Rpb24oYSxmLGQsaCl7Um4oYS5yYW5nZXMsZnVuY3Rpb24obSl7bVsxXSYmKGY+PW1bMF0mJmY8PW1bMV0/ZD5tWzFdP21bMV0rPWg6ZDxtWzBdJiYobVsw'@;
put 'XS09aCk6ZD49bVswXSYmZDw9bVsxXSYmKG1bMV0tPWgsZjw9bVswXSYmKG1bMF0rPTEsbVsxXSs9MSkpKX0pfX0se2tleToicmVjcmVhdGVQaHlzaWNhbFJhbmdlcyIsdmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGY9dGhpcyxoPVtdLG09W107Um4oYS5yYW5nZXMsZnVuY3Rpb24oXyl7dmFyIE89'@;
put 'W107aWYoX1sxXSlmb3IodmFyIFg9X1swXTtYPD1fWzFdO1grKylPLnB1c2goZi5ob3QudG9QaHlzaWNhbFJvdyhYKSk7ZWxzZSBPLnB1c2goZi5ob3QudG9QaHlzaWNhbFJvdyhfWzBdKSk7bS5wdXNoKE8pfSksUm4obSxmdW5jdGlvbihfKXt2YXIgTz1bXTtSbihfLGZ1bmN0aW9uKFgsYWUp'@;
put 'ezA9PT1hZT9PLnB1c2goWCk6X1thZV0hPT1fW2FlLTFdKzEmJihPLnB1c2goX1thZS0xXSksaC5wdXNoKE8pLChPPVtdKS5wdXNoKFgpKSxhZT09PV8ubGVuZ3RoLTEmJihPLnB1c2goWCksaC5wdXNoKE8pKX0pfSksYS5yYW5nZXM9aH19LHtrZXk6InNoaWZ0RW5kcG9pbnRDb29yZGluYXRl'@;
put 'cyIsdmFsdWU6ZnVuY3Rpb24oYSxmKXthLmFsdGVyUm93T2Zmc2V0JiYwIT09YS5hbHRlclJvd09mZnNldD8oYS5kZXN0aW5hdGlvblJvdys9YS5hbHRlclJvd09mZnNldHx8MCxSbihhLnJhbmdlcyxmdW5jdGlvbihkKXtSbihkLGZ1bmN0aW9uKGgsbSl7aD49ZiYmKGRbbV0rPWEuYWx0ZXJS'@;
put 'b3dPZmZzZXR8fDApfSl9KSk6YS5hbHRlckNvbHVtbk9mZnNldCYmMCE9PWEuYWx0ZXJDb2x1bW5PZmZzZXQmJihhLmRlc3RpbmF0aW9uQ29sdW1uKz1hLmFsdGVyQ29sdW1uT2Zmc2V0fHwwLGEuc291cmNlQ29sdW1uKz1hLmFsdGVyQ29sdW1uT2Zmc2V0fHwwKX19LHtrZXk6InJlc2V0QWxs'@;
put 'RW5kcG9pbnRzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMsZj1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5nZXRBbGxFbmRwb2ludHMoKSxkPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0p'@;
put 'fHxhcmd1bWVudHNbMV07Zi5zb21lKGZ1bmN0aW9uKG0pe3ZhciBPPW0uYWx0ZXJDb2x1bW5PZmZzZXR8fDA7cmV0dXJuIG0uZGVzdGluYXRpb25Sb3crKG0uYWx0ZXJSb3dPZmZzZXR8fDApPj1hLmhvdC5jb3VudFJvd3MoKXx8bS5kZXN0aW5hdGlvbkNvbHVtbitPPj1hLmhvdC5jb3VudENv'@;
put 'bHMoKX0pfHwodGhpcy5jZWxsc1RvU2V0Q2FjaGU9W10sUm4oZixmdW5jdGlvbihtKXthLnJlc2V0RW5kcG9pbnRWYWx1ZShtLGQpfSksdGhpcy5ob3Quc2V0RGF0YUF0Q2VsbCh0aGlzLmNlbGxzVG9TZXRDYWNoZSwiQ29sdW1uU3VtbWFyeS5yZXNldCIpLHRoaXMuY2VsbHNUb1NldENhY2hl'@;
put 'PVtdKX19LHtrZXk6InJlZnJlc2hBbGxFbmRwb2ludHMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpczt0aGlzLmNlbGxzVG9TZXRDYWNoZT1bXSxSbih0aGlzLmdldEFsbEVuZHBvaW50cygpLGZ1bmN0aW9uKGYpe2EuY3VycmVudEVuZHBvaW50PWYsYS5wbHVnaW4uY2FsY3VsYXRlKGYp'@;
put 'LGEuc2V0RW5kcG9pbnRWYWx1ZShmLCJpbml0Iil9KSx0aGlzLmN1cnJlbnRFbmRwb2ludD1udWxsLHRoaXMuaG90LnNldERhdGFBdENlbGwodGhpcy5jZWxsc1RvU2V0Q2FjaGUsIkNvbHVtblN1bW1hcnkucmVzZXQiKSx0aGlzLmNlbGxzVG9TZXRDYWNoZT1bXX19LHtrZXk6InJlZnJlc2hD'@;
put 'aGFuZ2VkRW5kcG9pbnRzIix2YWx1ZTpmdW5jdGlvbihhKXt2YXIgZj10aGlzLGQ9W107dGhpcy5jZWxsc1RvU2V0Q2FjaGU9W10sUm4oYSxmdW5jdGlvbihoLG0sXyl7IiIuY29uY2F0KGhbMl18fCIiKSE9PSIiLmNvbmNhdChoWzNdKSYmUm4oZi5nZXRBbGxFbmRwb2ludHMoKSxmdW5jdGlv'@;
put 'bihPLFgpe2YuaG90LnByb3BUb0NvbChfW21dWzFdKT09PU8uc291cmNlQ29sdW1uJiYtMT09PWQuaW5kZXhPZihYKSYmZC5wdXNoKFgpfSl9KSxSbihkLGZ1bmN0aW9uKGgpe2YucmVmcmVzaEVuZHBvaW50KGYuZ2V0RW5kcG9pbnQoaCkpfSksdGhpcy5ob3Quc2V0RGF0YUF0Q2VsbCh0aGlz'@;
put 'LmNlbGxzVG9TZXRDYWNoZSwiQ29sdW1uU3VtbWFyeS5yZXNldCIpLHRoaXMuY2VsbHNUb1NldENhY2hlPVtdfX0se2tleToicmVmcmVzaEVuZHBvaW50Iix2YWx1ZTpmdW5jdGlvbihhKXt0aGlzLmN1cnJlbnRFbmRwb2ludD1hLHRoaXMucGx1Z2luLmNhbGN1bGF0ZShhKSx0aGlzLnNldEVu'@;
put 'ZHBvaW50VmFsdWUoYSksdGhpcy5jdXJyZW50RW5kcG9pbnQ9bnVsbH19LHtrZXk6InJlc2V0RW5kcG9pbnRWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGY9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxoPWEuYWx0ZXJDb2x1'@;
put 'bW5PZmZzZXR8fDA7dGhpcy5jZWxsc1RvU2V0Q2FjaGUucHVzaChbdGhpcy5ob3QudG9WaXN1YWxSb3coYS5kZXN0aW5hdGlvblJvdysoZiYmYS5hbHRlclJvd09mZnNldHx8MCkpLHRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGEuZGVzdGluYXRpb25Db2x1bW4rKGY/aDowKSksIiJdKX19LHtr'@;
put 'ZXk6InNldEVuZHBvaW50VmFsdWUiLHZhbHVlOmZ1bmN0aW9uKGEsZil7dmFyIGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxoPXRoaXMuaG90LnRvVmlzdWFsUm93KGEuZGVzdGluYXRpb25Sb3cpO2lmKGEuZGVzdGluYXRpb25Sb3c+'@;
put 'PXRoaXMuaG90LmNvdW50Um93cygpfHxhLmRlc3RpbmF0aW9uQ29sdW1uPj10aGlzLmhvdC5jb3VudENvbHMoKSl0aGlzLnRocm93T3V0T2ZCb3VuZHNXYXJuaW5nKCk7ZWxzZXt2YXIgbT10aGlzLmhvdC50b1Zpc3VhbFJvdyhhLmRlc3RpbmF0aW9uUm93KTtpZihudWxsIT09bSl7dmFyIF89'@;
put 'dGhpcy5ob3QuZ2V0Q2VsbE1ldGEobSxhLmRlc3RpbmF0aW9uQ29sdW1uKTsoImluaXQiPT09Znx8Xy5yZWFkT25seSE9PWEucmVhZE9ubHkpJiYoXy5yZWFkT25seT1hLnJlYWRPbmx5LF8uY2xhc3NOYW1lPSJjb2x1bW5TdW1tYXJ5UmVzdWx0Iil9YS5yb3VuZEZsb2F0JiYhaXNOYU4oYS5y'@;
put 'ZXN1bHQpJiYoYS5yZXN1bHQ9YS5yZXN1bHQudG9GaXhlZChhLnJvdW5kRmxvYXQpKSxkP3RoaXMuaG90LnNldERhdGFBdENlbGwoaCxhLmRlc3RpbmF0aW9uQ29sdW1uLGEucmVzdWx0LCJDb2x1bW5TdW1tYXJ5LnNldCIpOnRoaXMuY2VsbHNUb1NldENhY2hlLnB1c2goW2gsYS5kZXN0aW5h'@;
put 'dGlvbkNvbHVtbixhLnJlc3VsdF0pLGEuYWx0ZXJSb3dPZmZzZXQ9dm9pZCAwLGEuYWx0ZXJDb2x1bW5PZmZzZXQ9dm9pZCAwfX19LHtrZXk6InRocm93T3V0T2ZCb3VuZHNXYXJuaW5nIix2YWx1ZTpmdW5jdGlvbigpe1dsKCJPbmUgb2YgdGhlIENvbHVtbiBTdW1tYXJ5IHBsdWdpbnMnIGRl'@;
put 'c3RpbmF0aW9uIHBvaW50cyB5b3UgcHJvdmlkZWQgaXMgYmV5b25kIHRoZSB0YWJsZSBib3VuZGFyaWVzISIpfX1dKSxsfSgpO2NvbnN0IHpkdD1qZHQ7ZnVuY3Rpb24gWksobCl7cmV0dXJuIG51bGw9PWx8fGlzTmFOKGwpfWZ1bmN0aW9uIG95KGwpe3JldHVybihveT0iZnVuY3Rpb24iPT10'@;
put 'eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3Rv'@;
put 'dHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfXZhciBfM2U7ZnVuY3Rpb24gdzNlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxl'@;
put 'PSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxXZHQoZi5rZXkpLGYpfX1mdW5jdGlvbiBXZHQobCl7dmFyIGM9ZnVuY3Rpb24gR2R0KGwsYyl7aWYoIm9iamVjdCIhPT1veShsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEp'@;
put 'e3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1veShmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9'@;
put 'KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09b3koYyk/YzpTdHJpbmcoYyl9ZnVuY3Rpb24geEwoKXtyZXR1cm4geEw9dHlwZW9mIFJlZmxlY3Q8InUiJiZSZWZsZWN0LmdldD9SZWZsZWN0LmdldC5iaW5kKCk6ZnVuY3Rpb24oYyxhLGYpe3ZhciBkPWZ1bmN0aW9uICRkdChsLGMpe2Zv'@;
put 'cig7IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsLGMpJiZudWxsIT09KGw9YXkobCkpOyk7cmV0dXJuIGx9KGMsYSk7aWYoZCl7dmFyIGg9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihkLGEpO3JldHVybiBoLmdldD9oLmdldC5jYWxsKGFyZ3VtZW50cy5s'@;
put 'ZW5ndGg8Mz9jOmYpOmgudmFsdWV9fSx4TC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gWUsobCxjKXtyZXR1cm4oWUs9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZixkKXtyZXR1cm4gZi5fX3Byb3RvX189ZCxmfSko'@;
put 'bCxjKX1mdW5jdGlvbiBheShsKXtyZXR1cm4oYXk9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSl9KShsKX12YXIgV0s9ImNvbHVtblN1bW1hcnki'@;
put 'LHRodD1mdW5jdGlvbihsKXshZnVuY3Rpb24gS2R0KGwsYyl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGMmJm51bGwhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7bC5wcm90b3R5cGU9T2JqZWN0LmNy'@;
put 'ZWF0ZShjJiZjLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmwsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGMmJllLKGwsYyl9KGEsbCk7dmFyIGM9ZnVuY3Rpb24gcWR0KGwpe3Zh'@;
put 'ciBjPWZ1bmN0aW9uIFFkdCgpe2lmKHR5cGVvZiBSZWZsZWN0PiJ1Inx8IVJlZmxlY3QuY29uc3RydWN0fHxSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVl'@;
put 'T2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLGZ1bmN0aW9uKCl7fSkpLCEwfWNhdGNoe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZCxmPWF5KGwpO2lmKGMpe3ZhciBoPWF5KHRoaXMpLmNvbnN0cnVjdG9yO2Q9UmVmbGVjdC5jb25zdHJ1Y3QoZixhcmd1'@;
put 'bWVudHMsaCl9ZWxzZSBkPWYuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbiBYZHQobCxjKXtpZihjJiYoIm9iamVjdCI9PT1veShjKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGMpKXJldHVybiBjO2lmKHZvaWQgMCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBj'@;
put 'b25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24gSmR0KGwpe2lmKHZvaWQgMD09PWwpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBj'@;
put 'YWxsZWQiKTtyZXR1cm4gbH0obCl9KHRoaXMsZCl9fShhKTtmdW5jdGlvbiBhKGYpe3ZhciBkO3JldHVybiBmdW5jdGlvbiBaZHQobCxjKXtpZighKGwgaW5zdGFuY2VvZiBjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxh'@;
put 'KSwoZD1jLmNhbGwodGhpcyxmKSkuZW5kcG9pbnRzPW51bGwsZH1yZXR1cm4gZnVuY3Rpb24gWWR0KGwsYyxhKXtjJiZ3M2UobC5wcm90b3R5cGUsYyksYSYmdzNlKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGEsW3trZXk6ImlzRW5h'@;
put 'YmxlZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbV0tdfX0se2tleToiZW5hYmxlUGx1Z2luIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5zZXR0aW5ncz10aGlzLmhvdC5nZXRTZXR0aW5ncygpW1dLXSx0'@;
put 'aGlzLmVuZHBvaW50cz1uZXcgemR0KHRoaXMsdGhpcy5zZXR0aW5ncyksdGhpcy5hZGRIb29rKCJhZnRlckluaXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25BZnRlckluaXQuYXBwbHkoZCxhcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlckNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4g'@;
put 'ZC5vbkFmdGVyQ2hhbmdlLmFwcGx5KGQsYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQ3JlYXRlUm93IixmdW5jdGlvbihoLG0sXyl7cmV0dXJuIGQuZW5kcG9pbnRzLnJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJpbnNlcnRfcm93IixoLG0sbnVsbCxfKX0p'@;
put 'LHRoaXMuYWRkSG9vaygiYmVmb3JlQ3JlYXRlQ29sIixmdW5jdGlvbihoLG0sXyl7cmV0dXJuIGQuZW5kcG9pbnRzLnJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJpbnNlcnRfY29sIixoLG0sbnVsbCxfKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVtb3ZlUm93IixmdW5j'@;
put 'dGlvbigpe2Zvcih2YXIgaCxtPWFyZ3VtZW50cy5sZW5ndGgsXz1uZXcgQXJyYXkobSksTz0wO088bTtPKyspX1tPXT1hcmd1bWVudHNbT107cmV0dXJuKGg9ZC5lbmRwb2ludHMpLnJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uLmFwcGx5KGgsWyJyZW1vdmVfcm93Il0uY29u'@;
put 'Y2F0KF8pKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVtb3ZlQ29sIixmdW5jdGlvbigpe2Zvcih2YXIgaCxtPWFyZ3VtZW50cy5sZW5ndGgsXz1uZXcgQXJyYXkobSksTz0wO088bTtPKyspX1tPXT1hcmd1bWVudHNbT107cmV0dXJuKGg9ZC5lbmRwb2ludHMpLnJlc2V0U2V0dXBCZWZvcmVT'@;
put 'dHJ1Y3R1cmVBbHRlcmF0aW9uLmFwcGx5KGgsWyJyZW1vdmVfY29sIl0uY29uY2F0KF8pKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDcmVhdGVSb3ciLGZ1bmN0aW9uKGgsbSxfKXtyZXR1cm4gZC5lbmRwb2ludHMucmVzZXRTZXR1cEFmdGVyU3RydWN0dXJlQWx0ZXJhdGlvbigiaW5zZXJ0X3Jv'@;
put 'dyIsaCxtLG51bGwsXyl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ3JlYXRlQ29sIixmdW5jdGlvbihoLG0sXyl7cmV0dXJuIGQuZW5kcG9pbnRzLnJlc2V0U2V0dXBBZnRlclN0cnVjdHVyZUFsdGVyYXRpb24oImluc2VydF9jb2wiLGgsbSxudWxsLF8pfSksdGhpcy5hZGRIb29rKCJhZnRlclJl'@;
put 'bW92ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIGgsbT1hcmd1bWVudHMubGVuZ3RoLF89bmV3IEFycmF5KG0pLE89MDtPPG07TysrKV9bT109YXJndW1lbnRzW09dO3JldHVybihoPWQuZW5kcG9pbnRzKS5yZXNldFNldHVwQWZ0ZXJTdHJ1Y3R1cmVBbHRlcmF0aW9uLmFwcGx5KGgsWyJyZW1v'@;
put 'dmVfcm93Il0uY29uY2F0KF8pKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW1vdmVDb2wiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoLG09YXJndW1lbnRzLmxlbmd0aCxfPW5ldyBBcnJheShtKSxPPTA7TzxtO08rKylfW09dPWFyZ3VtZW50c1tPXTtyZXR1cm4oaD1kLmVuZHBvaW50cykucmVzZXRT'@;
put 'ZXR1cEFmdGVyU3RydWN0dXJlQWx0ZXJhdGlvbi5hcHBseShoLFsicmVtb3ZlX2NvbCJdLmNvbmNhdChfKSl9KSx0aGlzLmFkZEhvb2soImFmdGVyUm93TW92ZSIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkFmdGVyUm93TW92ZS5hcHBseShkLGFyZ3VtZW50cyl9KSx4TChheShhLnByb3RvdHlw'@;
put 'ZSksImVuYWJsZVBsdWdpbiIsdGhpcykuY2FsbCh0aGlzKSl9fSx7a2V5OiJkaXNhYmxlUGx1Z2luIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZW5kcG9pbnRzPW51bGwsdGhpcy5zZXR0aW5ncz1udWxsLHRoaXMuY3VycmVudEVuZHBvaW50PW51bGx9fSx7a2V5OiJjYWxjdWxhdGUiLHZhbHVl'@;
put 'OmZ1bmN0aW9uKGQpe3N3aXRjaChkLnR5cGUudG9Mb3dlckNhc2UoKSl7Y2FzZSJzdW0iOmQucmVzdWx0PXRoaXMuY2FsY3VsYXRlU3VtKGQpO2JyZWFrO2Nhc2UibWluIjpjYXNlIm1heCI6ZC5yZXN1bHQ9dGhpcy5jYWxjdWxhdGVNaW5NYXgoZCxkLnR5cGUpO2JyZWFrO2Nhc2UiY291bnQi'@;
put 'OmQucmVzdWx0PXRoaXMuY291bnRFbnRyaWVzKGQpO2JyZWFrO2Nhc2UiYXZlcmFnZSI6ZC5yZXN1bHQ9dGhpcy5jYWxjdWxhdGVBdmVyYWdlKGQpO2JyZWFrO2Nhc2UiY3VzdG9tIjpkLnJlc3VsdD1kLmN1c3RvbUZ1bmN0aW9uLmNhbGwodGhpcyxkKX19fSx7a2V5OiJjYWxjdWxhdGVTdW0i'@;
put 'LHZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBoPXRoaXMsbT0wO3JldHVybiBtYShkLnJhbmdlcyxmdW5jdGlvbihfKXttKz1oLmdldFBhcnRpYWxTdW0oXyxkLnNvdXJjZUNvbHVtbil9KSxtfX0se2tleToiZ2V0UGFydGlhbFN1bSIsdmFsdWU6ZnVuY3Rpb24oZCxoKXt2YXIgbT0wLF89ZFsxXXx8'@;
put 'ZFswXSxPPW51bGwsWD0wO2Rve2lmKG51bGwhPT0oTz1aSyhPPXRoaXMuZ2V0Q2VsbFZhbHVlKF8saCkpP251bGw6Tykpe3ZhciBhZT0oIiIuY29uY2F0KE8pLnNwbGl0KCIuIilbMV18fFtdKS5sZW5ndGh8fDE7YWU+WCYmKFg9YWUpfW0rPU98fDAsXy09MX13aGlsZShfPj1kWzBdKTtyZXR1'@;
put 'cm4gTWF0aC5yb3VuZChtKk1hdGgucG93KDEwLFgpKS9NYXRoLnBvdygxMCxYKX19LHtrZXk6ImNhbGN1bGF0ZU1pbk1heCIsdmFsdWU6ZnVuY3Rpb24oZCxoKXt2YXIgbT10aGlzLF89bnVsbDtyZXR1cm4gbWEoZC5yYW5nZXMsZnVuY3Rpb24oTyl7dmFyIFg9bS5nZXRQYXJ0aWFsTWluTWF4'@;
put 'KE8sZC5zb3VyY2VDb2x1bW4saCk7aWYobnVsbD09PV8mJm51bGwhPT1YJiYoXz1YKSxudWxsIT09WClzd2l0Y2goaCl7Y2FzZSJtaW4iOl89TWF0aC5taW4oXyxYKTticmVhaztjYXNlIm1heCI6Xz1NYXRoLm1heChfLFgpfX0pLG51bGw9PT1fPyJOb3QgZW5vdWdoIGRhdGEiOl99fSx7a2V5'@;
put 'OiJnZXRQYXJ0aWFsTWluTWF4Iix2YWx1ZTpmdW5jdGlvbihkLGgsbSl7dmFyIFgsXz1udWxsLE89ZFsxXXx8ZFswXTtkb3tpZihYPVpLKFg9dGhpcy5nZXRDZWxsVmFsdWUoTyxoKSk/bnVsbDpYLG51bGw9PT1fKV89WDtlbHNlIGlmKG51bGwhPT1YKXN3aXRjaChtKXtjYXNlIm1pbiI6Xz1N'@;
put 'YXRoLm1pbihfLFgpO2JyZWFrO2Nhc2UibWF4IjpfPU1hdGgubWF4KF8sWCl9Ty09MX13aGlsZShPPj1kWzBdKTtyZXR1cm4gX319LHtrZXk6ImNvdW50RW1wdHkiLHZhbHVlOmZ1bmN0aW9uKGQsaCl7dmFyIG0sXz0wLE89ZFsxXXx8ZFswXTtkb3tudWxsPT09KG09WksobT10aGlzLmdldENl'@;
put 'bGxWYWx1ZShPLGgpKT9udWxsOm0pJiYoXys9MSksTy09MX13aGlsZShPPj1kWzBdKTtyZXR1cm4gX319LHtrZXk6ImNvdW50RW50cmllcyIsdmFsdWU6ZnVuY3Rpb24oZCl7dmFyIGg9dGhpcyxtPTA7cmV0dXJuIG1hKGQucmFuZ2VzLGZ1bmN0aW9uKE8pe3ZhciBYPXZvaWQgMD09PU9bMV0/'@;
put 'MTpPWzFdLU9bMF0rMSxhZT1oLmNvdW50RW1wdHkoTyxkLnNvdXJjZUNvbHVtbik7bSs9WCxtLT1hZX0pLG19fSx7a2V5OiJjYWxjdWxhdGVBdmVyYWdlIix2YWx1ZTpmdW5jdGlvbihkKXtyZXR1cm4gdGhpcy5jYWxjdWxhdGVTdW0oZCkvdGhpcy5jb3VudEVudHJpZXMoZCl9fSx7a2V5OiJn'@;
put 'ZXRDZWxsVmFsdWUiLHZhbHVlOmZ1bmN0aW9uKGQsaCl7dmFyIG09dGhpcy5ob3QudG9WaXN1YWxSb3coZCksXz10aGlzLmhvdC50b1Zpc3VhbENvbHVtbihoKSxPPXRoaXMuaG90LmdldFNvdXJjZURhdGFBdENlbGwoZCxoKSxYPSIiO2lmKG51bGwhPT1tJiZudWxsIT09XyYmKFg9dGhpcy5o'@;
put 'b3QuZ2V0Q2VsbE1ldGEobSxfKS5jbGFzc05hbWV8fCIiKSxYLmluZGV4T2YoImNvbHVtblN1bW1hcnlSZXN1bHQiKT4tMSlyZXR1cm4gbnVsbDtpZih0aGlzLmVuZHBvaW50cy5jdXJyZW50RW5kcG9pbnQuZm9yY2VOdW1lcmljJiYoInN0cmluZyI9PXR5cGVvZiBPJiYoTz1PLnJlcGxhY2Uo'@;
put 'LywvLCIuIikpLE89cGFyc2VGbG9hdChPKSksaXNOYU4oTykmJiF0aGlzLmVuZHBvaW50cy5jdXJyZW50RW5kcG9pbnQuc3VwcHJlc3NEYXRhVHlwZUVycm9ycyl0aHJvdyBuZXcgRXJyb3IoT2woXzNlfHwoXzNlPWZ1bmN0aW9uIFVkdChsLGMpe3JldHVybiBjfHwoYz1sLnNsaWNlKDApKSxP'@;
put 'YmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGwse3Jhdzp7dmFsdWU6T2JqZWN0LmZyZWV6ZShjKX19KSl9KFsiQ29sdW1uU3VtbWFyeSBwbHVnaW46IGNlbGwgYXQgKCIsIiwgIiwiKSBpcyBub3QgaW4gYSBcbiAgICAgICAgICBudW1lcmljIGZvcm1hdC4gQ2Fubm90IGRv'@;
put 'IHRoZSBjYWxjdWxhdGlvbi4iXSxbIkNvbHVtblN1bW1hcnkgcGx1Z2luOiBjZWxsIGF0ICgiLCIsICIsIikgaXMgbm90IGluIGFcXHgyMFxuICAgICAgICAgIG51bWVyaWMgZm9ybWF0LiBDYW5ub3QgZG8gdGhlIGNhbGN1bGF0aW9uLiJdKSksZCxoKSk7cmV0dXJuIE99fSx7a2V5OiJvbkFm'@;
put 'dGVySW5pdCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmVuZHBvaW50cy5lbmRwb2ludHM9dGhpcy5lbmRwb2ludHMucGFyc2VTZXR0aW5ncygpLHRoaXMuZW5kcG9pbnRzLnJlZnJlc2hBbGxFbmRwb2ludHMoITApfX0se2tleToib25BZnRlckNoYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZCxoKXtk'@;
put 'JiYiQ29sdW1uU3VtbWFyeS5yZXNldCIhPT1oJiYiQ29sdW1uU3VtbWFyeS5zZXQiIT09aCYmImxvYWREYXRhIiE9PWgmJnRoaXMuZW5kcG9pbnRzLnJlZnJlc2hDaGFuZ2VkRW5kcG9pbnRzKGQpfX0se2tleToib25BZnRlclJvd01vdmUiLHZhbHVlOmZ1bmN0aW9uKGQsaCl7dGhpcy5lbmRw'@;
put 'b2ludHMucmVzZXRTZXR1cEJlZm9yZVN0cnVjdHVyZUFsdGVyYXRpb24oIm1vdmVfcm93IixkWzBdLGQubGVuZ3RoLGQsdGhpcy5wbHVnaW5OYW1lKSx0aGlzLmVuZHBvaW50cy5yZXNldFNldHVwQWZ0ZXJTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJtb3ZlX3JvdyIsaCxkLmxlbmd0aCxkLHRoaXMu'@;
put 'cGx1Z2luTmFtZSl9fV0sW3trZXk6IlBMVUdJTl9LRVkiLGdldDpmdW5jdGlvbigpe3JldHVybiBXS319LHtrZXk6IlBMVUdJTl9QUklPUklUWSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDIyMH19XSksYX0oR2EpO2Z1bmN0aW9uIFRrKGwpe3JldHVybihUaz0iZnVuY3Rpb24iPT10eXBlb2Yg'@;
put 'U3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8i'@;
put 'c3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIEMzZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRl'@;
put 'ZmluZVByb3BlcnR5KGwsaWh0KGYua2V5KSxmKX19ZnVuY3Rpb24gaWh0KGwpe3ZhciBjPWZ1bmN0aW9uIG9odChsLGMpe2lmKCJvYmplY3QiIT09VGsobCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwo'@;
put 'bCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09VGsoZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTty'@;
put 'ZXR1cm4ic3ltYm9sIj09PVRrKGMpP2M6U3RyaW5nKGMpfXZhciBhaHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKGMsYSl7KGZ1bmN0aW9uIG5odChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIp'@;
put 'fSkodGhpcyxsKSx0aGlzLnJvb3REb2N1bWVudD1jLHRoaXMuaXNSdGw9YSx0aGlzLmNvbnRhaW5lcj1udWxsLHRoaXMuZWRpdG9yPXRoaXMuY3JlYXRlRWRpdG9yKCksdGhpcy5lZGl0b3JTdHlsZT10aGlzLmVkaXRvci5zdHlsZSx0aGlzLmhpZGRlbj0hMCx0aGlzLmhpZGUoKX1yZXR1cm4g'@;
put 'ZnVuY3Rpb24gcmh0KGwsYyxhKXtjJiZDM2UobC5wcm90b3R5cGUsYyksYSYmQzNlKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGwsW3trZXk6InNldFBvc2l0aW9uIix2YWx1ZTpmdW5jdGlvbihhLGYpe3RoaXMuZWRpdG9yU3R5bGUu'@;
put 'bGVmdD0iIi5jb25jYXQoYSwicHgiKSx0aGlzLmVkaXRvclN0eWxlLnRvcD0iIi5jb25jYXQoZiwicHgiKX19LHtrZXk6InNldFNpemUiLHZhbHVlOmZ1bmN0aW9uKGEsZil7aWYoYSYmZil7dmFyIGQ9dGhpcy5nZXRJbnB1dEVsZW1lbnQoKTtkLnN0eWxlLndpZHRoPSIiLmNvbmNhdChhLCJw'@;
put 'eCIpLGQuc3R5bGUuaGVpZ2h0PSIiLmNvbmNhdChmLCJweCIpfX19LHtrZXk6ImdldFNpemUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue3dpZHRoOlNsKHRoaXMuZ2V0SW5wdXRFbGVtZW50KCkpLGhlaWdodDpjcyh0aGlzLmdldElucHV0RWxlbWVudCgpKX19fSx7a2V5OiJyZXNldFNpemUi'@;
put 'LHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRJbnB1dEVsZW1lbnQoKTthLnN0eWxlLndpZHRoPSIiLGEuc3R5bGUuaGVpZ2h0PSIifX0se2tleToic2V0UmVhZE9ubHlTdGF0ZSIsdmFsdWU6ZnVuY3Rpb24oYSl7dGhpcy5nZXRJbnB1dEVsZW1lbnQoKS5yZWFkT25seT1hfX0se2tl'@;
put 'eToic2hvdyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmVkaXRvclN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLmhpZGRlbj0hMX19LHtrZXk6ImhpZGUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5oaWRkZW58fCh0aGlzLmVkaXRvclN0eWxlLmRpc3BsYXk9Im5vbmUiKSx0aGlzLmhpZGRlbj0h'@;
put 'MH19LHtrZXk6ImlzVmlzaWJsZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4iYmxvY2siPT09dGhpcy5lZGl0b3JTdHlsZS5kaXNwbGF5fX0se2tleToic2V0VmFsdWUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGY9KGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2Fy'@;
put 'Z3VtZW50c1swXToiIil8fCIiO3RoaXMuZ2V0SW5wdXRFbGVtZW50KCkudmFsdWU9Zn19LHtrZXk6ImdldFZhbHVlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldElucHV0RWxlbWVudCgpLnZhbHVlfX0se2tleToiaXNGb2N1c2VkIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0'@;
put 'aGlzLnJvb3REb2N1bWVudC5hY3RpdmVFbGVtZW50PT09dGhpcy5nZXRJbnB1dEVsZW1lbnQoKX19LHtrZXk6ImZvY3VzIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZ2V0SW5wdXRFbGVtZW50KCkuZm9jdXMoKX19LHtrZXk6ImNyZWF0ZUVkaXRvciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT10'@;
put 'aGlzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxmPXRoaXMucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRleHRhcmVhIik7cmV0dXJuIGEuc3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5jb250YWluZXI9dGhpcy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2'@;
put 'IiksdGhpcy5jb250YWluZXIuc2V0QXR0cmlidXRlKCJkaXIiLHRoaXMuaXNSdGw/InJ0bCI6Imx0ciIpLGdpKHRoaXMuY29udGFpbmVyLGwuQ0xBU1NfRURJVE9SX0NPTlRBSU5FUiksdGhpcy5yb290RG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLmNvbnRhaW5lciksZ2koYSxsLkNM'@;
put 'QVNTX0VESVRPUiksZ2koZixsLkNMQVNTX0lOUFVUKSxhLmFwcGVuZENoaWxkKGYpLHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKGEpLGF9fSx7a2V5OiJnZXRJbnB1dEVsZW1lbnQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRpdG9yLnF1ZXJ5U2VsZWN0b3IoIi4iLmNvbmNh'@;
put 'dChsLkNMQVNTX0lOUFVUKSl9fSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMuY29udGFpbmVyP3RoaXMuY29udGFpbmVyLnBhcmVudE5vZGU6bnVsbDt0aGlzLmVkaXRvci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZWRpdG9yKSx0aGlzLmVkaXRvcj1u'@;
put 'dWxsLHRoaXMuZWRpdG9yU3R5bGU9bnVsbCxhJiZhLnJlbW92ZUNoaWxkKHRoaXMuY29udGFpbmVyKX19XSxbe2tleToiQ0xBU1NfRURJVE9SX0NPTlRBSU5FUiIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuImh0Q29tbWVudHNDb250YWluZXIifX0se2tleToiQ0xBU1NfRURJVE9SIixnZXQ6ZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4iaHRDb21tZW50cyJ9fSx7a2V5OiJDTEFTU19JTlBVVCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuImh0Q29tbWVudFRleHRBcmVhIn19LHtrZXk6IkNMQVNTX0NFTEwiLGdldDpmdW5jdGlvbigpe3JldHVybiJodENvbW1lbnRDZWxsIn19XSksbH0oKTtjb25zdCBsaHQ9'@;
put 'YWh0O3ZhciBiYT0iLS0tLS0tLS0tIjtmdW5jdGlvbiBBTChsKXtyZXR1cm4gWW8obCwiaHRTZXBhcmF0b3IiKX1mdW5jdGlvbiBUTChsKXtyZXR1cm4gWW8obCwiaHREaXNhYmxlZCIpfWZ1bmN0aW9uIE9MKGwpe3JldHVybiBZbyhsLCJodFNlbGVjdGlvbkRpc2FibGVkIil9ZnVuY3Rpb24g'@;
put 'WjUobCl7dmFyIGM9bC5nZXRTZWxlY3RlZCgpO3JldHVybiFjfHxjWzBdPDA/bnVsbDpjfWZ1bmN0aW9uIFk1KGwsYyl7dmFyIGE9e307cmV0dXJuIFJuKGwsZnVuY3Rpb24oZil7Zi5mb3JBbGwoZnVuY3Rpb24oZCxoKXtkPj0wJiZoPj0wJiYoYVtkXXx8KGFbZF09W10pLGFbZF1baF09Yyhk'@;
put 'LGgpKX0pfSksYX1mdW5jdGlvbiB6NChsLGMsYSxmLGQpe1JuKGwsZnVuY3Rpb24oaCl7aC5mb3JBbGwoZnVuY3Rpb24obSxfKXttPj0wJiZfPj0wJiZmdW5jdGlvbiBoaHQobCxjLGEsZixkLGgpe3ZhciBtPWQobCxjKSxfPWY7bS5jbGFzc05hbWUmJihfPSJ2ZXJ0aWNhbCI9PT1hP2Z1bmN0'@;
put 'aW9uIGZodChsLGMpe2lmKC0xIT09bC5pbmRleE9mKGMpKXJldHVybiBsO3ZhciBhPWwucmVwbGFjZSgiaHRUb3AiLCIiKS5yZXBsYWNlKCJodE1pZGRsZSIsIiIpLnJlcGxhY2UoImh0Qm90dG9tIiwiIikucmVwbGFjZSgiICAiLCIiKTtyZXR1cm4iIi5jb25jYXQoYSwiICIpLmNvbmNhdChj'@;
put 'KX0obS5jbGFzc05hbWUsZik6ZnVuY3Rpb24gZGh0KGwsYyl7aWYoLTEhPT1sLmluZGV4T2YoYykpcmV0dXJuIGw7dmFyIGE9bC5yZXBsYWNlKCJodExlZnQiLCIiKS5yZXBsYWNlKCJodENlbnRlciIsIiIpLnJlcGxhY2UoImh0UmlnaHQiLCIiKS5yZXBsYWNlKCJodEp1c3RpZnkiLCIiKS5y'@;
put 'ZXBsYWNlKCIgICIsIiIpO3JldHVybiIiLmNvbmNhdChhLCIgIikuY29uY2F0KGMpfShtLmNsYXNzTmFtZSxmKSksaChsLGMsImNsYXNzTmFtZSIsXyl9KG0sXyxjLGEsZixkKX0pfSl9ZnVuY3Rpb24gWWgobCxjKXt2YXIgYT0hMTtyZXR1cm4gQXJyYXkuaXNBcnJheShsKSYmUm4obCxmdW5j'@;
put 'dGlvbihmKXtyZXR1cm4gZi5mb3JBbGwoZnVuY3Rpb24oZCxoKXtpZihkPj0wJiZoPj0wJiZjKGQsaCkpcmV0dXJuIGE9ITAsITF9KSxhfSksYX1mdW5jdGlvbiB3MyhsKXtyZXR1cm4nPHNwYW4gY2xhc3M9InNlbGVjdGVkIj4nLmNvbmNhdChTdHJpbmcuZnJvbUNoYXJDb2RlKDEwMDAzKSwi'@;
put 'PC9zcGFuPiIpLmNvbmNhdChsKX1mdW5jdGlvbiBTM2UobCxjKXtmb3IodmFyIGE9bC5zbGljZSgwKTswPGEubGVuZ3RoJiZhWzBdLm5hbWU9PT1jOylhLnNoaWZ0KCk7cmV0dXJuIGF9ZnVuY3Rpb24gT2sobCl7cmV0dXJuKE9rPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wi'@;
put 'PT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBj'@;
put 'fSkobCl9ZnVuY3Rpb24gTTNlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxf'@;
put 'aHQoZi5rZXkpLGYpfX1mdW5jdGlvbiBfaHQobCl7dmFyIGM9ZnVuY3Rpb24gd2h0KGwsYyl7aWYoIm9iamVjdCIhPT1PayhsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7'@;
put 'aWYoIm9iamVjdCIhPT1PayhmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09'@;
put 'T2soYyk/YzpTdHJpbmcoYyl9dmFyIGszZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGwoYyl7KGZ1bmN0aW9uIHlodChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyxsKSx0aGlzLndh'@;
put 'c0xhc3RBY3Rpb25TaG93PSEwLHRoaXMuc2hvd0RlYm91bmNlZD1udWxsLHRoaXMuaGlkaW5nVGltZXI9bnVsbCx0aGlzLnVwZGF0ZURlbGF5KGMpfXJldHVybiBmdW5jdGlvbiBiaHQobCxjLGEpe2MmJk0zZShsLnByb3RvdHlwZSxjKSxhJiZNM2UobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVy'@;
put 'dHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0obCxbe2tleToiaGlkZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzO3RoaXMud2FzTGFzdEFjdGlvblNob3c9ITEsdGhpcy5oaWRpbmdUaW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ITE9PT1hLndhc0xhc3RBY3Rpb25TaG93'@;
put 'JiZhLnJ1bkxvY2FsSG9va3MoImhpZGUiKX0sMjUwKX19LHtrZXk6InNob3ciLHZhbHVlOmZ1bmN0aW9uKGEpe3RoaXMud2FzTGFzdEFjdGlvblNob3c9ITAsdGhpcy5zaG93RGVib3VuY2VkKGEpfX0se2tleToiY2FuY2VsSGlkaW5nIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMud2FzTGFzdEFj'@;
put 'dGlvblNob3c9ITAsY2xlYXJUaW1lb3V0KHRoaXMuaGlkaW5nVGltZXIpLHRoaXMuaGlkaW5nVGltZXI9bnVsbH19LHtrZXk6InVwZGF0ZURlbGF5Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXM7dGhpcy5zaG93RGVib3VuY2VkPVRZKGZ1bmN0aW9uKGQpe2Eud2FzTGFzdEFjdGlvblNo'@;
put 'b3cmJmEucnVuTG9jYWxIb29rcygic2hvdyIsZC5mcm9tLnJvdyxkLmZyb20uY29sKX0sYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjI1MCl9fSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY2xlYXJMb2NhbEhvb2tz'@;
put 'KCl9fV0pLGx9KCk7VGwoazNlLFcwKTtjb25zdCBNaHQ9azNlO2Z1bmN0aW9uIGx5KGwpe3JldHVybihseT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3Jl'@;
put 'dHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIEdLKGwsYyxhKXtyZXR1cm4oYz14M2UoYykpaW4gbD9PYmplY3QuZGVmaW5lUHJvcGVydHko'@;
put 'bCxjLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6bFtjXT1hLGx9ZnVuY3Rpb24gRTNlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFi'@;
put 'bGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCx4M2UoZi5rZXkpLGYpfX1mdW5jdGlvbiB4M2UobCl7dmFyIGM9ZnVuY3Rpb24geGh0KGwsYyl7aWYoIm9iamVjdCIhPT1seShsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1i'@;
put 'b2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1seShmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigi'@;
put 'c3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09bHkoYyk/YzpTdHJpbmcoYyl9ZnVuY3Rpb24gVzUoKXtyZXR1cm4gVzU9dHlwZW9mIFJlZmxlY3Q8InUiJiZSZWZsZWN0LmdldD9SZWZsZWN0LmdldC5iaW5kKCk6ZnVuY3Rpb24oYyxh'@;
put 'LGYpe3ZhciBkPWZ1bmN0aW9uIEFodChsLGMpe2Zvcig7IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsLGMpJiZudWxsIT09KGw9QzMobCkpOyk7cmV0dXJuIGx9KGMsYSk7aWYoZCl7dmFyIGg9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihkLGEpO3JldHVy'@;
put 'biBoLmdldD9oLmdldC5jYWxsKGFyZ3VtZW50cy5sZW5ndGg8Mz9jOmYpOmgudmFsdWV9fSxXNS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gJEsobCxjKXtyZXR1cm4oJEs9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24o'@;
put 'ZixkKXtyZXR1cm4gZi5fX3Byb3RvX189ZCxmfSkobCxjKX1mdW5jdGlvbiBBM2UobCl7aWYodm9pZCAwPT09bCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBsfWZ1bmN0'@;
put 'aW9uIEMzKGwpe3JldHVybihDMz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihhKXtyZXR1cm4gYS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihhKX0pKGwpfXZhciBLSz0iY29tbWVudHMiLERMPW5ldyBXZWFrTWFw'@;
put 'LFdoPSJjb21tZW50IixzeT0idmFsdWUiLElMPSJyZWFkT25seSIsTGh0PWZ1bmN0aW9uKGwpeyFmdW5jdGlvbiBUaHQobCxjKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyYmbnVsbCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxs'@;
put 'IG9yIGEgZnVuY3Rpb24iKTtsLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGMmJmMucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6bCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksYyYm'@;
put 'JEsobCxjKX0oYSxsKTt2YXIgYz1mdW5jdGlvbiBPaHQobCl7dmFyIGM9ZnVuY3Rpb24gSWh0KCl7aWYodHlwZW9mIFJlZmxlY3Q+InUifHwhUmVmbGVjdC5jb25zdHJ1Y3R8fFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVy'@;
put 'biEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sZnVuY3Rpb24oKXt9KSksITB9Y2F0Y2h7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciBkLGY9QzMobCk7aWYoYyl7dmFyIGg9QzModGhpcyku'@;
put 'Y29uc3RydWN0b3I7ZD1SZWZsZWN0LmNvbnN0cnVjdChmLGFyZ3VtZW50cyxoKX1lbHNlIGQ9Zi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uIERodChsLGMpe2lmKGMmJigib2JqZWN0Ij09PWx5KGMpfHwiZnVuY3Rpb24iPT10eXBlb2YgYykpcmV0dXJuIGM7aWYodm9p'@;
put 'ZCAwIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBBM2UobCl9KHRoaXMsZCl9fShhKTtmdW5jdGlvbiBhKGYpe3ZhciBkO3JldHVybiBmdW5jdGlvbiBraHQobCxjKXtpZigh'@;
put 'KGwgaW5zdGFuY2VvZiBjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxhKSwoZD1jLmNhbGwodGhpcyxmKSkuZWRpdG9yPW51bGwsZC5kaXNwbGF5U3dpdGNoPW51bGwsZC5ldmVudE1hbmFnZXI9bnVsbCxkLnJhbmdlPXt9'@;
put 'LGQucHJldmVudEVkaXRvckF1dG9Td2l0Y2g9ITEsREwuc2V0KEEzZShkKSx7dGVtcEVkaXRvckRpbWVuc2lvbnM6e30sY2VsbEJlbG93Q3Vyc29yOm51bGx9KSxkfXJldHVybiBmdW5jdGlvbiBFaHQobCxjLGEpe2MmJkUzZShsLnByb3RvdHlwZSxjKSxhJiZFM2UobCxhKSxPYmplY3QuZGVm'@;
put 'aW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0oYSxbe2tleToiaXNFbmFibGVkIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtLS119fSx7a2V5OiJlbmFibGVQbHVnaW4iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpczt0'@;
put 'aGlzLmVuYWJsZWR8fCh0aGlzLmVkaXRvcnx8KHRoaXMuZWRpdG9yPW5ldyBsaHQodGhpcy5ob3Qucm9vdERvY3VtZW50LHRoaXMuaG90LmlzUnRsKCkpKSx0aGlzLmV2ZW50TWFuYWdlcnx8KHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBmcyh0aGlzKSksdGhpcy5kaXNwbGF5U3dpdGNofHwodGhp'@;
put 'cy5kaXNwbGF5U3dpdGNoPW5ldyBNaHQodGhpcy5nZXREaXNwbGF5RGVsYXlTZXR0aW5nKCkpKSx0aGlzLmFkZEhvb2soImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsZnVuY3Rpb24oaCl7cmV0dXJuIGQuYWRkVG9Db250ZXh0TWVudShoKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJS'@;
put 'ZW5kZXJlciIsZnVuY3Rpb24oaCxtLF8sTyxYLGFlKXtyZXR1cm4gZC5vbkFmdGVyUmVuZGVyZXIoaCxhZSl9KSx0aGlzLmFkZEhvb2soImFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5IixmdW5jdGlvbigpe3JldHVybiBkLmhpZGUoKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxWZXJ0aWNh'@;
put 'bGx5IixmdW5jdGlvbigpe3JldHVybiBkLmhpZGUoKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJCZWdpbkVkaXRpbmciLGZ1bmN0aW9uKCl7cmV0dXJuIGQuaGlkZSgpfSksdGhpcy5kaXNwbGF5U3dpdGNoLmFkZExvY2FsSG9vaygiaGlkZSIsZnVuY3Rpb24oKXtyZXR1cm4gZC5oaWRlKCl9KSx0'@;
put 'aGlzLmRpc3BsYXlTd2l0Y2guYWRkTG9jYWxIb29rKCJzaG93IixmdW5jdGlvbihoLG0pe3JldHVybiBkLnNob3dBdENlbGwoaCxtKX0pLHRoaXMucmVnaXN0ZXJMaXN0ZW5lcnMoKSxXNShDMyhhLnByb3RvdHlwZSksImVuYWJsZVBsdWdpbiIsdGhpcykuY2FsbCh0aGlzKSl9fSx7a2V5OiJ1'@;
put 'cGRhdGVQbHVnaW4iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxXNShDMyhhLnByb3RvdHlwZSksInVwZGF0ZVBsdWdpbiIsdGhpcykuY2FsbCh0aGlzKSx0aGlzLmRpc3BsYXlTd2l0Y2gudXBkYXRlRGVsYXkodGhpcy5nZXREaXNw'@;
put 'bGF5RGVsYXlTZXR0aW5nKCkpfX0se2tleToiZGlzYWJsZVBsdWdpbiIsdmFsdWU6ZnVuY3Rpb24oKXtXNShDMyhhLnByb3RvdHlwZSksImRpc2FibGVQbHVnaW4iLHRoaXMpLmNhbGwodGhpcyl9fSx7a2V5OiJyZWdpc3Rlckxpc3RlbmVycyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlz'@;
put 'LGg9dGhpcy5ob3Qucm9vdERvY3VtZW50O3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoaCwibW91c2VvdmVyIixmdW5jdGlvbihtKXtyZXR1cm4gZC5vbk1vdXNlT3ZlcihtKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoaCwibW91c2Vkb3duIixmdW5j'@;
put 'dGlvbihtKXtyZXR1cm4gZC5vbk1vdXNlRG93bihtKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoaCwibW91c2V1cCIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbk1vdXNlVXAoKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5lZGl0b3IuZ2V0'@;
put 'SW5wdXRFbGVtZW50KCksImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25FZGl0b3JCbHVyKCl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuZWRpdG9yLmdldElucHV0RWxlbWVudCgpLCJtb3VzZWRvd24iLGZ1bmN0aW9uKG0pe3JldHVybiBkLm9uRWRpdG9y'@;
put 'TW91c2VEb3duKG0pfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmVkaXRvci5nZXRJbnB1dEVsZW1lbnQoKSwibW91c2V1cCIsZnVuY3Rpb24obSl7cmV0dXJuIGQub25FZGl0b3JNb3VzZVVwKG0pfSl9fSx7a2V5OiJzZXRSYW5nZSIsdmFsdWU6ZnVuY3Rpb24o'@;
put 'ZCl7dGhpcy5yYW5nZT1kfX0se2tleToiY2xlYXJSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnJhbmdlPXt9fX0se2tleToidGFyZ2V0SXNDZWxsV2l0aENvbW1lbnQiLHZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBoPXg0KGQudGFyZ2V0LCJURCIsIlRCT0RZIik7cmV0dXJuISEoaCYmWW8o'@;
put 'aCwiaHRDb21tZW50Q2VsbCIpJiZ4NChoLFt0aGlzLmhvdC5yb290RWxlbWVudF0pKX19LHtrZXk6InRhcmdldElzQ29tbWVudFRleHRBcmVhIix2YWx1ZTpmdW5jdGlvbihkKXtyZXR1cm4gdGhpcy5lZGl0b3IuZ2V0SW5wdXRFbGVtZW50KCk9PT1kLnRhcmdldH19LHtrZXk6InNldENvbW1l'@;
put 'bnQiLHZhbHVlOmZ1bmN0aW9uKGQpe2lmKCF0aGlzLnJhbmdlLmZyb20pdGhyb3cgbmV3IEVycm9yKCdCZWZvcmUgdXNpbmcgdGhpcyBtZXRob2QsIGZpcnN0IHNldCBjZWxsIHJhbmdlIChob3QuZ2V0UGx1Z2luKCJjb21tZW50Iikuc2V0UmFuZ2UoKSknKTt2YXIgaD10aGlzLmVkaXRvci5n'@;
put 'ZXRWYWx1ZSgpLG09IiI7bnVsbCE9ZD9tPWQ6bnVsbCE9aCYmKG09aCksdGhpcy51cGRhdGVDb21tZW50TWV0YSh0aGlzLnJhbmdlLmZyb20ucm93LHRoaXMucmFuZ2UuZnJvbS5jb2wsR0soe30sc3ksbSkpLHRoaXMuaG90LnJlbmRlcigpfX0se2tleToic2V0Q29tbWVudEF0Q2VsbCIsdmFs'@;
put 'dWU6ZnVuY3Rpb24oZCxoLG0pe3RoaXMuc2V0UmFuZ2Uoe2Zyb206dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZCxoKX0pLHRoaXMuc2V0Q29tbWVudChtKX19LHtrZXk6InJlbW92ZUNvbW1lbnQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9IShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQg'@;
put 'MCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXTtpZighdGhpcy5yYW5nZS5mcm9tKXRocm93IG5ldyBFcnJvcignQmVmb3JlIHVzaW5nIHRoaXMgbWV0aG9kLCBmaXJzdCBzZXQgY2VsbCByYW5nZSAoaG90LmdldFBsdWdpbigiY29tbWVudCIpLnNldFJhbmdlKCkpJyk7dGhpcy5ob3Qu'@;
put 'c2V0Q2VsbE1ldGEodGhpcy5yYW5nZS5mcm9tLnJvdyx0aGlzLnJhbmdlLmZyb20uY29sLFdoKSxkJiZ0aGlzLmhvdC5yZW5kZXIoKSx0aGlzLmhpZGUoKX19LHtrZXk6InJlbW92ZUNvbW1lbnRBdENlbGwiLHZhbHVlOmZ1bmN0aW9uKGQsaCl7dmFyIG09IShhcmd1bWVudHMubGVuZ3RoPjIm'@;
put 'JnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTt0aGlzLnNldFJhbmdlKHtmcm9tOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGQsaCl9KSx0aGlzLnJlbW92ZUNvbW1lbnQobSl9fSx7a2V5OiJnZXRDb21tZW50Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdl'@;
put 'dENvbW1lbnRNZXRhKHRoaXMucmFuZ2UuZnJvbS5yb3csdGhpcy5yYW5nZS5mcm9tLmNvbCxzeSl9fSx7a2V5OiJnZXRDb21tZW50QXRDZWxsIix2YWx1ZTpmdW5jdGlvbihkLGgpe3JldHVybiB0aGlzLmdldENvbW1lbnRNZXRhKGQsaCxzeSl9fSx7a2V5OiJzaG93Iix2YWx1ZTpmdW5jdGlv'@;
put 'bigpe2lmKCF0aGlzLnJhbmdlLmZyb20pdGhyb3cgbmV3IEVycm9yKCdCZWZvcmUgdXNpbmcgdGhpcyBtZXRob2QsIGZpcnN0IHNldCBjZWxsIHJhbmdlIChob3QuZ2V0UGx1Z2luKCJjb21tZW50Iikuc2V0UmFuZ2UoKSknKTt2YXIgZD10aGlzLnJhbmdlLmZyb20saD1kLnJvdyxtPWQuY29s'@;
put 'O2lmKGg8MHx8aD50aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKS0xfHxtPDB8fG0+dGhpcy5ob3QuY291bnRTb3VyY2VDb2xzKCktMSlyZXR1cm4hMTt2YXIgXz10aGlzLmhvdC5nZXRDZWxsTWV0YSh0aGlzLnJhbmdlLmZyb20ucm93LHRoaXMucmFuZ2UuZnJvbS5jb2wpO3JldHVybiB0aGlz'@;
put 'LmVkaXRvci5zZXRWYWx1ZShfW1doXT9fW1doXVtzeV06IiIpLHRoaXMuZWRpdG9yLnNob3coKSx0aGlzLnJlZnJlc2hFZGl0b3IoITApLCEwfX0se2tleToic2hvd0F0Q2VsbCIsdmFsdWU6ZnVuY3Rpb24oZCxoKXtyZXR1cm4gdGhpcy5zZXRSYW5nZSh7ZnJvbTp0aGlzLmhvdC5fY3JlYXRl'@;
put 'Q2VsbENvb3JkcyhkLGgpfSksdGhpcy5zaG93KCl9fSx7a2V5OiJoaWRlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZWRpdG9yLmhpZGUoKX19LHtrZXk6InJlZnJlc2hFZGl0b3IiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQsaDtpZihhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3Vt'@;
put 'ZW50c1swXSYmYXJndW1lbnRzWzBdfHx0aGlzLnJhbmdlLmZyb20mJnRoaXMuZWRpdG9yLmlzVmlzaWJsZSgpKXt2YXIgXz10aGlzLmhvdCxPPV8ucm93SW5kZXhNYXBwZXIsWD1fLmNvbHVtbkluZGV4TWFwcGVyLGFlPXRoaXMucmFuZ2UuZnJvbSxwZT1hZS5yb3csYmU9YWUuY29sLHhlPU8u'@;
put 'Z2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChwZSksVmU9WC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGJlKSxaZT1udWxsPT09eGU7dGhpcy5lZGl0b3Iuc2V0UG9zaXRpb24oMCwwKSxudWxsPT09eGUmJih4ZT1PLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoTy5nZXRO'@;
put 'ZWFyZXN0Tm90SGlkZGVuSW5kZXgocGUsLTEpKSksbnVsbD09PVZlJiYoVmU9WC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KFguZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGJlLC0xKSkpO3ZhciBsdD1udWxsPT09eGUsZHQ9bnVsbD09PVZlO3hlPW51bGwhPT0oZD14ZSkmJnZvaWQg'@;
put 'MCE9PWQ/ZDowLFZlPW51bGwhPT0oaD1WZSkmJnZvaWQgMCE9PWg/aDowO3ZhciBndD10aGlzLmhvdCxqdD1ndC5yb290V2luZG93LHJuPWd0LnZpZXcuX3d0LFh0PXJuLnd0VGFibGUseW49cm4uZ2V0Q2VsbCh7cm93OnhlLGNvbDpWZX0sITApLFFuPXRoaXMuZ2V0Q29tbWVudE1ldGEocGUs'@;
put 'YmUsInN0eWxlIik7UW4/dGhpcy5lZGl0b3Iuc2V0U2l6ZShRbi53aWR0aCxRbi5oZWlnaHQpOnRoaXMuZWRpdG9yLnJlc2V0U2l6ZSgpO3ZhciBPcj1kdD8wOlh0LmdldFN0cmV0Y2hlZENvbHVtbldpZHRoKFZlKSxWcj1aZSYmIWx0P2NzKHluKTowLFpyPXluLmdldEJvdW5kaW5nQ2xpZW50'@;
put 'UmVjdCgpLGlyPVpyLmxlZnQsc2k9WnIudG9wLEFyPVpyLndpZHRoLEVuPVpyLmhlaWdodCxUcj10aGlzLmVkaXRvci5nZXRTaXplKCksVm49VHIud2lkdGgsY3I9VHIuaGVpZ2h0LENyPXRoaXMuaG90LnJvb3RXaW5kb3csWXI9Q3IuaW5uZXJXaWR0aCxTdD1Dci5pbm5lckhlaWdodCxGdD10'@;
put 'aGlzLmhvdC5yb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFd0PWlyK2p0LnNjcm9sbFgrT3Isd249c2kranQuc2Nyb2xsWStWcjt0aGlzLmhvdC5pc1J0bCgpJiYoV3QtPVZuK09yKSx0aGlzLmhvdC5pc0x0cigpJiZpcitBcitWbj5Zcj9XdD1pcitqdC5zY3JvbGxYLVZuLTE6dGhpcy5o'@;
put 'b3QuaXNSdGwoKSYmV3Q8LShGdC5zY3JvbGxXaWR0aC1GdC5jbGllbnRXaWR0aCkmJihXdD1pcitqdC5zY3JvbGxYK09yKzEpLHNpK2NyPlN0JiYod24tPWNyLUVuKzEpLHRoaXMuZWRpdG9yLnNldFBvc2l0aW9uKFd0LHduKSx0aGlzLmVkaXRvci5zZXRSZWFkT25seVN0YXRlKHRoaXMuZ2V0'@;
put 'Q29tbWVudE1ldGEocGUsYmUsSUwpKX19fSx7a2V5OiJjaGVja1NlbGVjdGlvbkNvbW1lbnRzQ29uc2lzdGVuY3kiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighZClyZXR1cm4hMTt2YXIgaD0hMSxtPWQuZ2V0VG9wU3RhcnRDb3Ju'@;
put 'ZXIoKTtyZXR1cm4gdGhpcy5nZXRDb21tZW50TWV0YShtLnJvdyxtLmNvbCxzeSkmJihoPSEwKSxofX0se2tleToidXBkYXRlQ29tbWVudE1ldGEiLHZhbHVlOmZ1bmN0aW9uKGQsaCxtKXt2YXIgTyxfPXRoaXMuaG90LmdldENlbGxNZXRhKGQsaClbV2hdO18/SFMoTz14YyhfKSxtKTpPPW0s'@;
put 'dGhpcy5ob3Quc2V0Q2VsbE1ldGEoZCxoLFdoLE8pfX0se2tleToiZ2V0Q29tbWVudE1ldGEiLHZhbHVlOmZ1bmN0aW9uKGQsaCxtKXt2YXIgXz10aGlzLmhvdC5nZXRDZWxsTWV0YShkLGgpO2lmKF9bV2hdKXJldHVybiBfW1doXVttXX19LHtrZXk6Im9uTW91c2VEb3duIix2YWx1ZTpmdW5j'@;
put 'dGlvbihkKXtpZih0aGlzLmhvdC52aWV3JiZ0aGlzLmhvdC52aWV3Ll93dCYmIXRoaXMucHJldmVudEVkaXRvckF1dG9Td2l0Y2gmJiF0aGlzLnRhcmdldElzQ29tbWVudFRleHRBcmVhKGQpKXt2YXIgaD14NChkLnRhcmdldCwiVEQiLCJUQk9EWSIpLG09bnVsbDtoJiYobT10aGlzLmhvdC5n'@;
put 'ZXRDb29yZHMoaCkpLCghaHx8dGhpcy5yYW5nZS5mcm9tJiZtJiYodGhpcy5yYW5nZS5mcm9tLnJvdyE9PW0ucm93fHx0aGlzLnJhbmdlLmZyb20uY29sIT09bS5jb2wpKSYmdGhpcy5oaWRlKCl9fX0se2tleToib25Nb3VzZU92ZXIiLHZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBoPURMLmdldCh0'@;
put 'aGlzKSxtPXRoaXMuaG90LnJvb3REb2N1bWVudDtpZighKHRoaXMucHJldmVudEVkaXRvckF1dG9Td2l0Y2h8fHRoaXMuZWRpdG9yLmlzRm9jdXNlZCgpfHxZbyhkLnRhcmdldCwid3RCb3JkZXIiKXx8aC5jZWxsQmVsb3dDdXJzb3I9PT1kLnRhcmdldCkmJnRoaXMuZWRpdG9yKWlmKGguY2Vs'@;
put 'bEJlbG93Q3Vyc29yPW0uZWxlbWVudEZyb21Qb2ludChkLmNsaWVudFgsZC5jbGllbnRZKSx0aGlzLnRhcmdldElzQ2VsbFdpdGhDb21tZW50KGQpKXt2YXIgXz10aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKHRoaXMuaG90LmdldENvb3JkcyhkLnRhcmdldCkpO3RoaXMuZGlzcGxheVN3aXRj'@;
put 'aC5zaG93KF8pfWVsc2UgQTQoZC50YXJnZXQsbSkmJiF0aGlzLnRhcmdldElzQ29tbWVudFRleHRBcmVhKGQpJiZ0aGlzLmRpc3BsYXlTd2l0Y2guaGlkZSgpfX0se2tleToib25Nb3VzZVVwIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucHJldmVudEVkaXRvckF1dG9Td2l0Y2g9ITF9fSx7a2V5'@;
put 'OiJvbkFmdGVyUmVuZGVyZXIiLHZhbHVlOmZ1bmN0aW9uKGQsaCl7aFtXaF0mJmhbV2hdW3N5XSYmZ2koZCxoLmNvbW1lbnRlZENlbGxDbGFzc05hbWUpfX0se2tleToib25FZGl0b3JCbHVyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc2V0Q29tbWVudCgpfX0se2tleToib25FZGl0b3JNb3Vz'@;
put 'ZURvd24iLHZhbHVlOmZ1bmN0aW9uKGQpe0RMLmdldCh0aGlzKS50ZW1wRWRpdG9yRGltZW5zaW9ucz17d2lkdGg6U2woZC50YXJnZXQpLGhlaWdodDpjcyhkLnRhcmdldCl9fX0se2tleToib25FZGl0b3JNb3VzZVVwIix2YWx1ZTpmdW5jdGlvbihkKXt2YXIgaD1ETC5nZXQodGhpcyksbT1T'@;
put 'bChkLnRhcmdldCksXz1jcyhkLnRhcmdldCk7KG0hPT1oLnRlbXBFZGl0b3JEaW1lbnNpb25zLndpZHRoKzF8fF8hPT1oLnRlbXBFZGl0b3JEaW1lbnNpb25zLmhlaWdodCsyKSYmdGhpcy51cGRhdGVDb21tZW50TWV0YSh0aGlzLnJhbmdlLmZyb20ucm93LHRoaXMucmFuZ2UuZnJvbS5jb2ws'@;
put 'R0soe30sInN0eWxlIix7d2lkdGg6bSxoZWlnaHQ6X30pKX19LHtrZXk6Im9uQ29udGV4dE1lbnVBZGRDb21tZW50Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7dGhpcy5wcmV2ZW50RWRpdG9yQXV0b1N3aXRjaD0hMCx0aGlzLmRpc3Bs'@;
put 'YXlTd2l0Y2guY2FuY2VsSGlkaW5nKCksdGhpcy5zZXRSYW5nZSh7ZnJvbTpkLmhpZ2hsaWdodH0pLHRoaXMuc2hvdygpLHRoaXMuaG90LmRlc2VsZWN0Q2VsbCgpLHRoaXMuZWRpdG9yLmZvY3VzKCl9fSx7a2V5OiJvbkNvbnRleHRNZW51UmVtb3ZlQ29tbWVudCIsdmFsdWU6ZnVuY3Rpb24o'@;
put 'KXt2YXIgZD10aGlzLGg9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTt0aGlzLnByZXZlbnRFZGl0b3JBdXRvU3dpdGNoPSEwLGguZm9yQWxsKGZ1bmN0aW9uKG0sXyl7bT49MCYmXz49MCYmZC5yZW1vdmVDb21tZW50QXRDZWxsKG0sXywhMSl9KSx0aGlzLmhvdC5yZW5kZXIoKX19'@;
put 'LHtrZXk6Im9uQ29udGV4dE1lbnVNYWtlUmVhZE9ubHkiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcyxoPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7dGhpcy5wcmV2ZW50RWRpdG9yQXV0b1N3aXRjaD0hMCxoLmZvckFsbChmdW5jdGlvbihtLF8pe2lmKG0+PTAmJl8+PTAp'@;
put 'e3ZhciBPPSEhZC5nZXRDb21tZW50TWV0YShtLF8sSUwpO2QudXBkYXRlQ29tbWVudE1ldGEobSxfLEdLKHt9LElMLCFPKSl9fSl9fSx7a2V5OiJhZGRUb0NvbnRleHRNZW51Iix2YWx1ZTpmdW5jdGlvbihkKXt2YXIgaD10aGlzLG09ZnVuY3Rpb24oKXtyZXR1cm4gaC5ob3Qucm93SW5kZXhN'@;
put 'YXBwZXIuZ2V0UmVuZGVyYWJsZUluZGV4ZXNMZW5ndGgoKT4wJiZoLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCgpPjB9O2QuaXRlbXMucHVzaCh7bmFtZToiLS0tLS0tLS0tIn0se2tleToiY29tbWVudHNBZGRFZGl0IixuYW1lOmZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIGguY2hlY2tTZWxlY3Rpb25Db21tZW50c0NvbnNpc3RlbmN5KCk/aC5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShPRyk6aC5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShURyl9LGNhbGxiYWNrOmZ1bmN0aW9uKCl7cmV0dXJuIGgub25Db250ZXh0TWVudUFkZENvbW1lbnQoKX0sZGlz'@;
put 'YWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hbSgpfHwhKGguaG90LmdldFNlbGVjdGVkTGFzdCgpJiYhaC5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpKX19LHtrZXk6ImNvbW1lbnRzUmVtb3ZlIixuYW1lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFz'@;
put 'ZShERyl9LGNhbGxiYWNrOmZ1bmN0aW9uKCl7cmV0dXJuIGgub25Db250ZXh0TWVudVJlbW92ZUNvbW1lbnQoKX0sZGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hbSgpfHwhKGguaG90LmdldFNlbGVjdGVkTGFzdCgpJiYhaC5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpKX19'@;
put 'LHtrZXk6ImNvbW1lbnRzUmVhZE9ubHkiLG5hbWU6ZnVuY3Rpb24oKXt2YXIgTz10aGlzLFg9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKElHKTtyZXR1cm4gWWgodGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGZ1bmN0aW9uKHBlLGJlKXt2YXIgeGU9Ty5nZXRDZWxsTWV0YShwZSxiZSlb'@;
put 'V2hdO2lmKHhlJiYoeGU9eGVbSUxdKSx4ZSlyZXR1cm4hMH0pJiYoWD13MyhYKSksWH0sY2FsbGJhY2s6ZnVuY3Rpb24oKXtyZXR1cm4gaC5vbkNvbnRleHRNZW51TWFrZVJlYWRPbmx5KCl9LGRpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIW0oKXx8IShoLmhvdC5nZXRTZWxlY3RlZExhc3Qo'@;
put 'KSYmIWguaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSYmaC5jaGVja1NlbGVjdGlvbkNvbW1lbnRzQ29uc2lzdGVuY3koKSl9fSl9fSx7a2V5OiJnZXREaXNwbGF5RGVsYXlTZXR0aW5nIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXMuaG90LmdldFNldHRpbmdzKClbS0td'@;
put 'O2lmKHBhKGQpKXJldHVybiBkLmRpc3BsYXlEZWxheX19LHtrZXk6ImRlc3Ryb3kiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5lZGl0b3ImJnRoaXMuZWRpdG9yLmRlc3Ryb3koKSx0aGlzLmRpc3BsYXlTd2l0Y2gmJnRoaXMuZGlzcGxheVN3aXRjaC5kZXN0cm95KCksVzUoQzMoYS5wcm90b3R5'@;
put 'cGUpLCJkZXN0cm95Iix0aGlzKS5jYWxsKHRoaXMpfX1dLFt7a2V5OiJQTFVHSU5fS0VZIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gS0t9fSx7a2V5OiJQTFVHSU5fUFJJT1JJVFkiLGdldDpmdW5jdGlvbigpe3JldHVybiA2MH19XSksYX0oR2EpO2Z1bmN0aW9uIERrKGwpe3JldHVybihEaz0i'@;
put 'ZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09'@;
put 'U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIE8zZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0'@;
put 'YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsSGh0KGYua2V5KSxmKX19ZnVuY3Rpb24gSGh0KGwpe3ZhciBjPWZ1bmN0aW9uIE5odChsLGMpe2lmKCJvYmplY3QiIT09RGsobCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAh'@;
put 'PT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09RGsoZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIp'@;
put 'KGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PURrKGMpP2M6U3RyaW5nKGMpfXZhciBWaHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKGMpeyhmdW5jdGlvbiBQaHQobCxjKXtpZighKGwgaW5zdGFuY2VvZiBjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNz'@;
put 'IGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsbCksdGhpcy5ob3Q9Yyx0aGlzLmNvbW1hbmRzPXt9LHRoaXMuY29tbW9uQ2FsbGJhY2s9bnVsbH1yZXR1cm4gZnVuY3Rpb24gRmh0KGwsYyxhKXtjJiZPM2UobC5wcm90b3R5cGUsYyksYSYmTzNlKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGws'@;
put 'InByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGwsW3trZXk6InJlZ2lzdGVyQ29tbWFuZCIsdmFsdWU6ZnVuY3Rpb24oYSxmKXt0aGlzLmNvbW1hbmRzW2FdPWZ9fSx7a2V5OiJzZXRDb21tb25DYWxsYmFjayIsdmFsdWU6ZnVuY3Rpb24oYSl7dGhpcy5jb21tb25DYWxsYmFjaz1hfX0se2tl'@;
put 'eToiZXhlY3V0ZSIsdmFsdWU6ZnVuY3Rpb24oYSl7Zm9yKHZhciBmPXRoaXMsZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQ+MT9kLTE6MCksbT0xO208ZDttKyspaFttLTFdPWFyZ3VtZW50c1ttXTt2YXIgXz1hLnNwbGl0KCI6IiksTz1fWzBdLFg9Mj09PV8ubGVuZ3RoP19bMV06'@;
put 'bnVsbCxhZT10aGlzLmNvbW1hbmRzW09dO2lmKCFhZSl0aHJvdyBuZXcgRXJyb3IoIk1lbnUgY29tbWFuZCAnIi5jb25jYXQoTywiJyBub3QgZXhpc3RzLiIpKTtpZihYJiZhZS5zdWJtZW51JiYoYWU9ZnVuY3Rpb24gQmh0KGwsYyl7dmFyIGE7cmV0dXJuIFJuKGMsZnVuY3Rpb24oZil7dmFy'@;
put 'IGQ9Zi5rZXk/Zi5rZXkuc3BsaXQoIjoiKTpudWxsO2lmKEFycmF5LmlzQXJyYXkoZCkmJmRbMV09PT1sKXJldHVybiBhPWYsITF9KSxhfShYLGFlLnN1Ym1lbnUuaXRlbXMpKSwhMCE9PWFlLmRpc2FibGVkJiYoImZ1bmN0aW9uIiE9dHlwZW9mIGFlLmRpc2FibGVkfHwhMCE9PWFlLmRpc2Fi'@;
put 'bGVkLmNhbGwodGhpcy5ob3QpKSYmIVNzKGFlLCJzdWJtZW51Iikpe3ZhciBwZT1bXTsiZnVuY3Rpb24iPT10eXBlb2YgYWUuY2FsbGJhY2smJnBlLnB1c2goYWUuY2FsbGJhY2spLCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLmNvbW1vbkNhbGxiYWNrJiZwZS5wdXNoKHRoaXMuY29tbW9uQ2Fs'@;
put 'bGJhY2spLGgudW5zaGlmdChfLmpvaW4oIjoiKSksUm4ocGUsZnVuY3Rpb24oYmUpe3JldHVybiBiZS5hcHBseShmLmhvdCxoKX0pfX19XSksbH0oKTtjb25zdCBEM2U9Vmh0O3ZhciBWZj0iYWxpZ25tZW50IixSTD0iY2xlYXJfY29sdW1uIixJaz0iY29sX2xlZnQiLFJrPSJjb2xfcmlnaHQi'@;
put 'LExrPSJtYWtlX3JlYWRfb25seSIsTEw9InJlZG8iO2Z1bmN0aW9uIEkzZShsLGMpeyhudWxsPT1jfHxjPmwubGVuZ3RoKSYmKGM9bC5sZW5ndGgpO2Zvcih2YXIgYT0wLGY9bmV3IEFycmF5KGMpO2E8YzthKyspZlthXT1sW2FdO3JldHVybiBmfXZhciBQaz0icmVtb3ZlX2NvbCI7ZnVuY3Rp'@;
put 'b24gUjNlKGwsYyl7KG51bGw9PWN8fGM+bC5sZW5ndGgpJiYoYz1sLmxlbmd0aCk7Zm9yKHZhciBhPTAsZj1uZXcgQXJyYXkoYyk7YTxjO2ErKylmW2FdPWxbYV07cmV0dXJuIGZ9dmFyIHIwLFBMPSJyZW1vdmVfcm93IixGTD0icm93X2Fib3ZlIixITD0icm93X2JlbG93IixGaz0ibm9faXRl'@;
put 'bXMiLE5MPSJ1bmRvIjtmdW5jdGlvbiBIayhsKXtyZXR1cm4oSGs9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlw'@;
put 'ZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiBMMShsLGMsYSl7cmV0dXJuIGM9ZnVuY3Rpb24gdTJ0KGwpe3ZhciBjPWZ1bmN0aW9uIGMydChsLGMpe2lmKCJvYmplY3QiIT09SGso'@;
put 'bCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09SGsoZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJl'@;
put 'dHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PUhrKGMpP2M6U3RyaW5nKGMpfShjKSxjIGluIGw/T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsYyx7dmFsdWU6YSxlbnVtZXJh'@;
put 'YmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmxbY109YSxsfXZhciBMM2U9W0ZMLEhMLElrLFJrLFJMLFBMLFBrLE5MLExMLExrLFZmLGJhLEZrXSxQM2U9KEwxKHIwPXt9LGJhLGZ1bmN0aW9uIHNodCgpe3JldHVybntuYW1lOmJhfX0pLEwxKHIwLEZrLGZ1bmN0aW9uIGwy'@;
put 'dCgpe3JldHVybntrZXk6RmssbmFtZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UodUcpfSxkaXNhYmxlZDohMCxpc0NvbW1hbmQ6ITF9fSksTDEocjAsRkwsZnVuY3Rpb24gbzJ0KCl7cmV0dXJue2tleTpGTCxuYW1lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu'@;
put 'Z2V0VHJhbnNsYXRlZFBocmFzZShjRyl9LGNhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmdldFRvcExlZnRDb3JuZXIoKTt0aGlzLmFsdGVyKCJpbnNlcnRfcm93X2Fib3ZlIixjLnJvdywxLCJDb250ZXh0TWVudS5yb3dBYm92ZSIpfSxkaXNh'@;
put 'YmxlZDpmdW5jdGlvbigpe3JldHVybiFaNSh0aGlzKXx8KHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpPzA9PT10aGlzLmNvdW50Um93cygpOnRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHx0aGlzLmNvdW50Um93cygpPj10aGlzLmdldFNldHRp'@;
put 'bmdzKCkubWF4Um93cyl9LGhpZGRlbjpmdW5jdGlvbigpe3JldHVybiF0aGlzLmdldFNldHRpbmdzKCkuYWxsb3dJbnNlcnRSb3d9fX0pLEwxKHIwLEhMLGZ1bmN0aW9uIGEydCgpe3JldHVybntrZXk6SEwsbmFtZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2Uo'@;
put 'ZkcpfSxjYWxsYmFjazpmdW5jdGlvbigpe3ZhciBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5nZXRCb3R0b21SaWdodENvcm5lcigpO3RoaXMuYWx0ZXIoImluc2VydF9yb3dfYmVsb3ciLGMucm93LDEsIkNvbnRleHRNZW51LnJvd0JlbG93Iil9LGRpc2FibGVkOmZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIVo1KHRoaXMpfHwhdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCkmJih0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKXx8dGhpcy5jb3VudFJvd3MoKT49dGhpcy5nZXRTZXR0aW5ncygpLm1heFJvd3MpfSxoaWRkZW46ZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4hdGhpcy5nZXRTZXR0aW5ncygpLmFsbG93SW5zZXJ0Um93fX19KSxMMShyMCxJayxmdW5jdGlvbiBVaHQoKXtyZXR1cm57a2V5OklrLG5hbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGRHKX0sY2FsbGJhY2s6ZnVuY3Rpb24oKXt2YXIgYz10aGlz'@;
put 'LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuZ2V0VG9wTGVmdENvcm5lcigpLGE9dGhpcy5pc1J0bCgpPyJpbnNlcnRfY29sX2VuZCI6Imluc2VydF9jb2xfc3RhcnQiO3RoaXMuYWx0ZXIoYSxjLmNvbCwxLCJDb250ZXh0TWVudS5jb2x1bW5MZWZ0Iil9LGRpc2FibGVkOmZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIXRoaXMuaXNDb2x1bW5Nb2RpZmljYXRpb25BbGxvd2VkKCl8fCFaNSh0aGlzKXx8KHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpPzA9PT10aGlzLmNvdW50Q29scygpOnRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpfHx0aGlzLmNvdW50Q29scygp'@;
put 'Pj10aGlzLmdldFNldHRpbmdzKCkubWF4Q29scyl9LGhpZGRlbjpmdW5jdGlvbigpe3JldHVybiF0aGlzLmdldFNldHRpbmdzKCkuYWxsb3dJbnNlcnRDb2x1bW59fX0pLEwxKHIwLFJrLGZ1bmN0aW9uIFpodCgpe3JldHVybntrZXk6UmssbmFtZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdl'@;
put 'dFRyYW5zbGF0ZWRQaHJhc2UoaEcpfSxjYWxsYmFjazpmdW5jdGlvbigpe3ZhciBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5nZXRUb3BSaWdodENvcm5lcigpLGE9dGhpcy5pc1J0bCgpPyJpbnNlcnRfY29sX3N0YXJ0IjoiaW5zZXJ0X2NvbF9lbmQiO3RoaXMuYWx0ZXIoYSxjLmNv'@;
put 'bCwxLCJDb250ZXh0TWVudS5jb2x1bW5SaWdodCIpfSxkaXNhYmxlZDpmdW5jdGlvbigpe3JldHVybiF0aGlzLmlzQ29sdW1uTW9kaWZpY2F0aW9uQWxsb3dlZCgpfHwhWjUodGhpcyl8fCF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSYmKHRoaXMuc2VsZWN0aW9uLmlzU2Vs'@;
put 'ZWN0ZWRCeVJvd0hlYWRlcigpfHx0aGlzLmNvdW50Q29scygpPj10aGlzLmdldFNldHRpbmdzKCkubWF4Q29scyl9LGhpZGRlbjpmdW5jdGlvbigpe3JldHVybiF0aGlzLmdldFNldHRpbmdzKCkuYWxsb3dJbnNlcnRDb2x1bW59fX0pLEwxKHIwLFJMLGZ1bmN0aW9uIHpodCgpe3JldHVybntr'@;
put 'ZXk6UkwsbmFtZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoYkcpfSxjYWxsYmFjazpmdW5jdGlvbihjLGEpe3ZhciBmPWFbMF0uc3RhcnQuY29sLGQ9YVswXS5lbmQuY29sO3RoaXMuY291bnRSb3dzKCkmJnRoaXMucG9wdWxhdGVGcm9tQXJyYXkoMCxmLFtb'@;
put 'bnVsbF1dLE1hdGgubWF4KGFbMF0uc3RhcnQucm93LGFbMF0uZW5kLnJvdyksZCwiQ29udGV4dE1lbnUuY2xlYXJDb2x1bW4iKX0sZGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hWjUodGhpcyl8fCF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKX19fSksTDEocjAs'@;
put 'UEwsZnVuY3Rpb24gaTJ0KCl7cmV0dXJue2tleTpQTCxuYW1lOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5nZXRTZWxlY3RlZCgpLGE9MDtpZihjKWlmKGMubGVuZ3RoPjEpYT0xO2Vsc2V7dmFyIGY9ZnVuY3Rpb24gUWh0KGwsYyl7cmV0dXJuIGZ1bmN0aW9uIHIydChsKXtpZihBcnJheS5pc0Fy'@;
put 'cmF5KGwpKXJldHVybiBsfShsKXx8ZnVuY3Rpb24gbjJ0KGwsYyl7dmFyIGE9bnVsbD09bD9udWxsOnR5cGVvZiBTeW1ib2w8InUiJiZsW1N5bWJvbC5pdGVyYXRvcl18fGxbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1hKXt2YXIgZixkLGgsbSxfPVtdLE89ITAsWD0hMTt0cnl7aWYoaD0oYT1h'@;
put 'LmNhbGwobCkpLm5leHQsMD09PWMpe2lmKE9iamVjdChhKSE9PWEpcmV0dXJuO089ITF9ZWxzZSBmb3IoOyEoTz0oZj1oLmNhbGwoYSkpLmRvbmUpJiYoXy5wdXNoKGYudmFsdWUpLF8ubGVuZ3RoIT09Yyk7Tz0hMCk7fWNhdGNoKGFlKXtYPSEwLGQ9YWV9ZmluYWxseXt0cnl7aWYoIU8mJm51'@;
put 'bGwhPWEucmV0dXJuJiYobT1hLnJldHVybigpLE9iamVjdChtKSE9PW0pKXJldHVybn1maW5hbGx5e2lmKFgpdGhyb3cgZH19cmV0dXJuIF99fShsLGMpfHxmdW5jdGlvbiB0MnQobCxjKXtpZihsKXtpZigic3RyaW5nIj09dHlwZW9mIGwpcmV0dXJuIFIzZShsLGMpO3ZhciBhPU9iamVjdC5w'@;
put 'cm90b3R5cGUudG9TdHJpbmcuY2FsbChsKS5zbGljZSg4LC0xKTtpZigiT2JqZWN0Ij09PWEmJmwuY29uc3RydWN0b3ImJihhPWwuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1hfHwiU2V0Ij09PWEpcmV0dXJuIEFycmF5LmZyb20obCk7aWYoIkFyZ3VtZW50cyI9PT1hfHwvXig/OlVpfEkp'@;
put 'bnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChhKSlyZXR1cm4gUjNlKGwsYyl9fShsLGMpfHxmdW5jdGlvbiBlMnQoKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIg'@;
put 'dG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfShjWzBdLDMpO2ZbMF0tZlsyXSE9MCYmKGE9MSl9cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShwRyxhKX0sY2FsbGJhY2s6ZnVuY3Rpb24o'@;
put 'KXt0aGlzLmFsdGVyKCJyZW1vdmVfcm93IixmdW5jdGlvbiBqb3QobCl7dmFyIGM9TTkobCk7aWYoMD09PWN8fDE9PT1jKXJldHVybltdO3ZhciBhPW9rKGMpLGY9bmV3IFNldDtyZXR1cm4gUm4obCxmdW5jdGlvbihtKXt2YXIgTz1HZGUoYShtKSwzKSxhZT1PWzJdLHBlPU1hdGgubWF4KE9b'@;
put 'MF0sMCk7Um4oQXJyYXkuZnJvbShuZXcgQXJyYXkoYWUtcGUrMSksZnVuY3Rpb24oeGUsVmUpe3JldHVybiBwZStWZX0pLGZ1bmN0aW9uKHhlKXtmLmhhcyh4ZSl8fGYuYWRkKHhlKX0pfSksUHMoQXJyYXkuZnJvbShmKS5zb3J0KGZ1bmN0aW9uKG0sXyl7cmV0dXJuIG0tX30pLGZ1bmN0aW9u'@;
put 'KG0sXyxPLFgpe3JldHVybiAwIT09TyYmXz09PVhbTy0xXSsxP21bbS5sZW5ndGgtMV1bMV0rPTE6bS5wdXNoKFtfLDFdKSxtfSxbXSl9KHRoaXMuZ2V0U2VsZWN0ZWQoKSksMSwiQ29udGV4dE1lbnUucmVtb3ZlUm93Iil9LGRpc2FibGVkOmZ1bmN0aW9uKCl7aWYoIVo1KHRoaXMpKXJldHVy'@;
put 'biEwO3ZhciBhPXRoaXMuY291bnRSb3dzKCk7cmV0dXJuIHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpPzA9PT1hOnRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHwwPT09YX0saGlkZGVuOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZ2V0U2V0dGlu'@;
put 'Z3MoKS5hbGxvd1JlbW92ZVJvd319fSksTDEocjAsUGssZnVuY3Rpb24gSmh0KCl7cmV0dXJue2tleTpQayxuYW1lOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5nZXRTZWxlY3RlZCgpLGE9MDtpZihjKWlmKGMubGVuZ3RoPjEpYT0xO2Vsc2V7dmFyIGY9ZnVuY3Rpb24gR2h0KGwsYyl7cmV0dXJu'@;
put 'IGZ1bmN0aW9uIFhodChsKXtpZihBcnJheS5pc0FycmF5KGwpKXJldHVybiBsfShsKXx8ZnVuY3Rpb24gcWh0KGwsYyl7dmFyIGE9bnVsbD09bD9udWxsOnR5cGVvZiBTeW1ib2w8InUiJiZsW1N5bWJvbC5pdGVyYXRvcl18fGxbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1hKXt2YXIgZixkLGgs'@;
put 'bSxfPVtdLE89ITAsWD0hMTt0cnl7aWYoaD0oYT1hLmNhbGwobCkpLm5leHQsMD09PWMpe2lmKE9iamVjdChhKSE9PWEpcmV0dXJuO089ITF9ZWxzZSBmb3IoOyEoTz0oZj1oLmNhbGwoYSkpLmRvbmUpJiYoXy5wdXNoKGYudmFsdWUpLF8ubGVuZ3RoIT09Yyk7Tz0hMCk7fWNhdGNoKGFlKXtY'@;
put 'PSEwLGQ9YWV9ZmluYWxseXt0cnl7aWYoIU8mJm51bGwhPWEucmV0dXJuJiYobT1hLnJldHVybigpLE9iamVjdChtKSE9PW0pKXJldHVybn1maW5hbGx5e2lmKFgpdGhyb3cgZH19cmV0dXJuIF99fShsLGMpfHxmdW5jdGlvbiBLaHQobCxjKXtpZihsKXtpZigic3RyaW5nIj09dHlwZW9mIGwp'@;
put 'cmV0dXJuIEkzZShsLGMpO3ZhciBhPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsKS5zbGljZSg4LC0xKTtpZigiT2JqZWN0Ij09PWEmJmwuY29uc3RydWN0b3ImJihhPWwuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1hfHwiU2V0Ij09PWEpcmV0dXJuIEFycmF5LmZyb20obCk7'@;
put 'aWYoIkFyZ3VtZW50cyI9PT1hfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChhKSlyZXR1cm4gSTNlKGwsYyl9fShsLGMpfHxmdW5jdGlvbiAkaHQoKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9u'@;
put 'LWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfShjWzBdLDQpO2ZbMV0tZlszXSE9MCYmKGE9MSl9cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBo'@;
put 'cmFzZShtRyxhKX0sY2FsbGJhY2s6ZnVuY3Rpb24oKXt0aGlzLmFsdGVyKCJyZW1vdmVfY29sIixmdW5jdGlvbiBCb3QobCl7dmFyIGM9TTkobCk7aWYoMD09PWN8fDE9PT1jKXJldHVybltdO3ZhciBhPW9rKGMpLGY9bmV3IFNldDtyZXR1cm4gUm4obCxmdW5jdGlvbihtKXt2YXIgTz1HZGUo'@;
put 'YShtKSw0KSxhZT1PWzNdLHBlPU1hdGgubWF4KE9bMV0sMCk7Um4oQXJyYXkuZnJvbShuZXcgQXJyYXkoYWUtcGUrMSksZnVuY3Rpb24oeGUsVmUpe3JldHVybiBwZStWZX0pLGZ1bmN0aW9uKHhlKXtmLmhhcyh4ZSl8fGYuYWRkKHhlKX0pfSksUHMoQXJyYXkuZnJvbShmKS5zb3J0KGZ1bmN0'@;
put 'aW9uKG0sXyl7cmV0dXJuIG0tX30pLGZ1bmN0aW9uKG0sXyxPLFgpe3JldHVybiAwIT09TyYmXz09PVhbTy0xXSsxP21bbS5sZW5ndGgtMV1bMV0rPTE6bS5wdXNoKFtfLDFdKSxtfSxbXSl9KHRoaXMuZ2V0U2VsZWN0ZWQoKSksbnVsbCwiQ29udGV4dE1lbnUucmVtb3ZlQ29sdW1uIil9LGRp'@;
put 'c2FibGVkOmZ1bmN0aW9uKCl7aWYoIXRoaXMuaXNDb2x1bW5Nb2RpZmljYXRpb25BbGxvd2VkKCkpcmV0dXJuITA7aWYoIVo1KHRoaXMpKXJldHVybiEwO3ZhciBhPXRoaXMuY291bnRDb2xzKCk7cmV0dXJuIHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpPzA9PT1hOnRoaXMu'@;
put 'c2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpfHwwPT09YX0saGlkZGVuOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZ2V0U2V0dGluZ3MoKS5hbGxvd1JlbW92ZUNvbHVtbn19fSksTDEocjAsTkwsZnVuY3Rpb24gczJ0KCl7cmV0dXJue2tleTpOTCxuYW1lOmZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShnRyl9LGNhbGxiYWNrOmZ1bmN0aW9uKCl7dGhpcy51bmRvKCl9LGhpZGRlbjpmdW5jdGlvbigpe3ZhciBjPXRoaXMuZ2V0UGx1Z2luKCJ1bmRvUmVkbyIpO3JldHVybiFjfHwhYy5pc0VuYWJsZWQoKX0sZGlzYWJsZWQ6ZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4hdGhpcy5nZXRQbHVnaW4oInVuZG9SZWRvIikuaXNVbmRvQXZhaWxhYmxlKCl9fX0pLEwxKHIwLExMLGZ1bmN0aW9uIFdodCgpe3JldHVybntrZXk6TEwsbmFtZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UodkcpfSxjYWxsYmFjazpmdW5jdGlvbigp'@;
put 'e3RoaXMucmVkbygpfSxoaWRkZW46ZnVuY3Rpb24oKXt2YXIgYz10aGlzLmdldFBsdWdpbigidW5kb1JlZG8iKTtyZXR1cm4hY3x8IWMuaXNFbmFibGVkKCl9LGRpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZ2V0UGx1Z2luKCJ1bmRvUmVkbyIpLmlzUmVkb0F2YWlsYWJsZSgpfX19'@;
put 'KSxMMShyMCxMayxmdW5jdGlvbiBZaHQoKXtyZXR1cm57a2V5OkxrLG5hbWU6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLGE9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHlHKTtyZXR1cm4gWWgodGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksZnVuY3Rpb24oZCxoKXtyZXR1cm4gYy5nZXRDZWxsTWV0'@;
put 'YShkLGgpLnJlYWRPbmx5fSkmJihhPXczKGEpKSxhfSxjYWxsYmFjazpmdW5jdGlvbigpe3ZhciBjPXRoaXMsYT10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSxmPVloKGEsZnVuY3Rpb24oZCxoKXtyZXR1cm4gYy5nZXRDZWxsTWV0YShkLGgpLnJlYWRPbmx5fSk7Um4oYSxmdW5jdGlvbihkKXtk'@;
put 'LmZvckFsbChmdW5jdGlvbihoLG0pe2g+PTAmJm0+PTAmJmMuc2V0Q2VsbE1ldGEoaCxtLCJyZWFkT25seSIsIWYpfSl9KSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDpmdW5jdGlvbigpe3JldHVybiEoIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpJiYwIT09dGhpcy5jb3Vu'@;
put 'dFJvd3MoKSYmMCE9PXRoaXMuY291bnRDb2xzKCkmJnRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpJiYwIT09dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCkubGVuZ3RoKX19fSksTDEocjAsVmYsZnVuY3Rpb24gamh0KCl7cmV0dXJue2tleTpWZixuYW1lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0'@;
put 'VHJhbnNsYXRlZFBocmFzZShSRyl9LGRpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmNvdW50Um93cygpfHwwPT09dGhpcy5jb3VudENvbHMoKXx8ISh0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSYmIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpKX0sc3VibWVu'@;
put 'dTp7aXRlbXM6W3trZXk6IiIuY29uY2F0KFZmLCI6bGVmdCIpLG5hbWU6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLGE9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKExHKTtyZXR1cm4gWWgodGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksZnVuY3Rpb24oZCxoKXt2YXIgbT1jLmdldENlbGxNZXRhKGQs'@;
put 'aCkuY2xhc3NOYW1lO2lmKG0mJi0xIT09bS5pbmRleE9mKCJodExlZnQiKSlyZXR1cm4hMH0pJiYoYT13MyhhKSksYX0sY2FsbGJhY2s6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLGE9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksZj1ZNShhLGZ1bmN0aW9uKG0sXyl7cmV0dXJuIGMuZ2V0Q2VsbE1l'@;
put 'dGEobSxfKS5jbGFzc05hbWV9KSxkPSJob3Jpem9udGFsIixoPSJodExlZnQiO3RoaXMucnVuSG9va3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLGYsYSxkLGgpLHo0KGEsZCxoLGZ1bmN0aW9uKG0sXyl7cmV0dXJuIGMuZ2V0Q2VsbE1ldGEobSxfKX0sZnVuY3Rpb24obSxfLE8sWCl7cmV0dXJu'@;
put 'IGMuc2V0Q2VsbE1ldGEobSxfLE8sWCl9KSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX0se2tleToiIi5jb25jYXQoVmYsIjpjZW50ZXIiKSxuYW1lOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcyxhPXRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShQRyk7cmV0dXJuIFloKHRoaXMuZ2V0U2VsZWN0'@;
put 'ZWRSYW5nZSgpLGZ1bmN0aW9uKGQsaCl7dmFyIG09Yy5nZXRDZWxsTWV0YShkLGgpLmNsYXNzTmFtZTtpZihtJiYtMSE9PW0uaW5kZXhPZigiaHRDZW50ZXIiKSlyZXR1cm4hMH0pJiYoYT13MyhhKSksYX0sY2FsbGJhY2s6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLGE9dGhpcy5nZXRTZWxlY3Rl'@;
put 'ZFJhbmdlKCksZj1ZNShhLGZ1bmN0aW9uKG0sXyl7cmV0dXJuIGMuZ2V0Q2VsbE1ldGEobSxfKS5jbGFzc05hbWV9KSxkPSJob3Jpem9udGFsIixoPSJodENlbnRlciI7dGhpcy5ydW5Ib29rcygiYmVmb3JlQ2VsbEFsaWdubWVudCIsZixhLGQsaCksejQoYSxkLGgsZnVuY3Rpb24obSxfKXty'@;
put 'ZXR1cm4gYy5nZXRDZWxsTWV0YShtLF8pfSxmdW5jdGlvbihtLF8sTyxYKXtyZXR1cm4gYy5zZXRDZWxsTWV0YShtLF8sTyxYKX0pLHRoaXMucmVuZGVyKCl9LGRpc2FibGVkOiExfSx7a2V5OiIiLmNvbmNhdChWZiwiOnJpZ2h0IiksbmFtZTpmdW5jdGlvbigpe3ZhciBjPXRoaXMsYT10aGlz'@;
put 'LmdldFRyYW5zbGF0ZWRQaHJhc2UoRkcpO3JldHVybiBZaCh0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSxmdW5jdGlvbihkLGgpe3ZhciBtPWMuZ2V0Q2VsbE1ldGEoZCxoKS5jbGFzc05hbWU7aWYobSYmLTEhPT1tLmluZGV4T2YoImh0UmlnaHQiKSlyZXR1cm4hMH0pJiYoYT13MyhhKSksYX0s'@;
put 'Y2FsbGJhY2s6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLGE9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksZj1ZNShhLGZ1bmN0aW9uKG0sXyl7cmV0dXJuIGMuZ2V0Q2VsbE1ldGEobSxfKS5jbGFzc05hbWV9KSxkPSJob3Jpem9udGFsIixoPSJodFJpZ2h0Ijt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVD'@;
put 'ZWxsQWxpZ25tZW50IixmLGEsZCxoKSx6NChhLGQsaCxmdW5jdGlvbihtLF8pe3JldHVybiBjLmdldENlbGxNZXRhKG0sXyl9LGZ1bmN0aW9uKG0sXyxPLFgpe3JldHVybiBjLnNldENlbGxNZXRhKG0sXyxPLFgpfSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITF9LHtrZXk6IiIuY29uY2F0'@;
put 'KFZmLCI6anVzdGlmeSIpLG5hbWU6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLGE9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKEhHKTtyZXR1cm4gWWgodGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksZnVuY3Rpb24oZCxoKXt2YXIgbT1jLmdldENlbGxNZXRhKGQsaCkuY2xhc3NOYW1lO2lmKG0mJi0x'@;
put 'IT09bS5pbmRleE9mKCJodEp1c3RpZnkiKSlyZXR1cm4hMH0pJiYoYT13MyhhKSksYX0sY2FsbGJhY2s6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLGE9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksZj1ZNShhLGZ1bmN0aW9uKG0sXyl7cmV0dXJuIGMuZ2V0Q2VsbE1ldGEobSxfKS5jbGFzc05hbWV9'@;
put 'KSxkPSJob3Jpem9udGFsIixoPSJodEp1c3RpZnkiO3RoaXMucnVuSG9va3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLGYsYSxkLGgpLHo0KGEsZCxoLGZ1bmN0aW9uKG0sXyl7cmV0dXJuIGMuZ2V0Q2VsbE1ldGEobSxfKX0sZnVuY3Rpb24obSxfLE8sWCl7cmV0dXJuIGMuc2V0Q2VsbE1ldGEo'@;
put 'bSxfLE8sWCl9KSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX0se25hbWU6YmF9LHtrZXk6IiIuY29uY2F0KFZmLCI6dG9wIiksbmFtZTpmdW5jdGlvbigpe3ZhciBjPXRoaXMsYT10aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoTkcpO3JldHVybiBZaCh0aGlzLmdldFNlbGVjdGVkUmFuZ2Uo'@;
put 'KSxmdW5jdGlvbihkLGgpe3ZhciBtPWMuZ2V0Q2VsbE1ldGEoZCxoKS5jbGFzc05hbWU7aWYobSYmLTEhPT1tLmluZGV4T2YoImh0VG9wIikpcmV0dXJuITB9KSYmKGE9dzMoYSkpLGF9LGNhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcyxhPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGY9'@;
put 'WTUoYSxmdW5jdGlvbihtLF8pe3JldHVybiBjLmdldENlbGxNZXRhKG0sXykuY2xhc3NOYW1lfSksZD0idmVydGljYWwiLGg9Imh0VG9wIjt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50IixmLGEsZCxoKSx6NChhLGQsaCxmdW5jdGlvbihtLF8pe3JldHVybiBjLmdldENlbGxN'@;
put 'ZXRhKG0sXyl9LGZ1bmN0aW9uKG0sXyxPLFgpe3JldHVybiBjLnNldENlbGxNZXRhKG0sXyxPLFgpfSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITF9LHtrZXk6IiIuY29uY2F0KFZmLCI6bWlkZGxlIiksbmFtZTpmdW5jdGlvbigpe3ZhciBjPXRoaXMsYT10aGlzLmdldFRyYW5zbGF0ZWRQ'@;
put 'aHJhc2UoVkcpO3JldHVybiBZaCh0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSxmdW5jdGlvbihkLGgpe3ZhciBtPWMuZ2V0Q2VsbE1ldGEoZCxoKS5jbGFzc05hbWU7aWYobSYmLTEhPT1tLmluZGV4T2YoImh0TWlkZGxlIikpcmV0dXJuITB9KSYmKGE9dzMoYSkpLGF9LGNhbGxiYWNrOmZ1bmN0'@;
put 'aW9uKCl7dmFyIGM9dGhpcyxhPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGY9WTUoYSxmdW5jdGlvbihtLF8pe3JldHVybiBjLmdldENlbGxNZXRhKG0sXykuY2xhc3NOYW1lfSksZD0idmVydGljYWwiLGg9Imh0TWlkZGxlIjt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50Iixm'@;
put 'LGEsZCxoKSx6NChhLGQsaCxmdW5jdGlvbihtLF8pe3JldHVybiBjLmdldENlbGxNZXRhKG0sXyl9LGZ1bmN0aW9uKG0sXyxPLFgpe3JldHVybiBjLnNldENlbGxNZXRhKG0sXyxPLFgpfSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITF9LHtrZXk6IiIuY29uY2F0KFZmLCI6Ym90dG9tIiks'@;
put 'bmFtZTpmdW5jdGlvbigpe3ZhciBjPXRoaXMsYT10aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoQkcpO3JldHVybiBZaCh0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSxmdW5jdGlvbihkLGgpe3ZhciBtPWMuZ2V0Q2VsbE1ldGEoZCxoKS5jbGFzc05hbWU7aWYobSYmLTEhPT1tLmluZGV4T2YoImh0'@;
put 'Qm90dG9tIikpcmV0dXJuITB9KSYmKGE9dzMoYSkpLGF9LGNhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcyxhPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGY9WTUoYSxmdW5jdGlvbihtLF8pe3JldHVybiBjLmdldENlbGxNZXRhKG0sXykuY2xhc3NOYW1lfSksZD0idmVydGljYWwiLGg9'@;
put 'Imh0Qm90dG9tIjt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50IixmLGEsZCxoKSx6NChhLGQsaCxmdW5jdGlvbihtLF8pe3JldHVybiBjLmdldENlbGxNZXRhKG0sXyl9LGZ1bmN0aW9uKG0sXyxPLFgpe3JldHVybiBjLnNldENlbGxNZXRhKG0sXyxPLFgpfSksdGhpcy5yZW5k'@;
put 'ZXIoKX0sZGlzYWJsZWQ6ITF9XX19fSkscjApO2Z1bmN0aW9uIEYzZSgpe3ZhciBsPXt9O3JldHVybiBtYShQM2UsZnVuY3Rpb24oYyxhKXtsW2FdPWMoKX0pLGx9ZnVuY3Rpb24gTmsobCl7cmV0dXJuKE5rPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3lt'@;
put 'Ym9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rp'@;
put 'b24gSDNlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxoMnQoZi5rZXkpLGYp'@;
put 'fX1mdW5jdGlvbiBoMnQobCl7dmFyIGM9ZnVuY3Rpb24gcDJ0KGwsYyl7aWYoIm9iamVjdCIhPT1OayhsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIh'@;
put 'PT1OayhmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09TmsoYyk/YzpTdHJp'@;
put 'bmcoYyl9dmFyIG0ydD1mdW5jdGlvbigpe2Z1bmN0aW9uIGwoYyl7dmFyIGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7KGZ1bmN0aW9uIGYydChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3Io'@;
put 'IkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyxsKSx0aGlzLmhvdD1jLHRoaXMucHJlZGVmaW5lZEl0ZW1zPUYzZSgpLHRoaXMuZGVmYXVsdE9yZGVyUGF0dGVybj1hfXJldHVybiBmdW5jdGlvbiBkMnQobCxjLGEpe2MmJkgzZShsLnByb3RvdHlwZSxjKSxhJiZI'@;
put 'M2UobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0obCxbe2tleToic2V0UHJlZGVmaW5lZEl0ZW1zIix2YWx1ZTpmdW5jdGlvbihhKXt2YXIgZj10aGlzLGQ9e307dGhpcy5kZWZhdWx0T3JkZXJQYXR0ZXJuLmxlbmd0aD0wLG1hKGEsZnVu'@;
put 'Y3Rpb24oaCxtKXt2YXIgXz0iIjtoLm5hbWU9PT1iYT8oZFtiYV09aCxfPWJhKTppc05hTihwYXJzZUludChtLDEwKSk/KGgua2V5PXZvaWQgMD09PWgua2V5P206aC5rZXksZFttXT1oLF89aC5rZXkpOihkW2gua2V5XT1oLF89aC5rZXkpLGYuZGVmYXVsdE9yZGVyUGF0dGVybi5wdXNoKF8p'@;
put 'fSksdGhpcy5wcmVkZWZpbmVkSXRlbXM9ZH19LHtrZXk6ImdldEl0ZW1zIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBnMnQoKXt2YXIgYz1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10sYT1hcmd1bWVudHMubGVuZ3Ro'@;
put 'PjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e30sZj1bXSxkPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO3JldHVybiBkJiZkLml0ZW1zP2Q9ZC5pdGVtczpBcnJheS5pc0FycmF5KGQpfHwoZD1jKSxwYShk'@;
put 'KT9tYShkLGZ1bmN0aW9uKGgsbSl7dmFyIF89YVsic3RyaW5nIj09dHlwZW9mIGg/aDptXTtffHwoXz1oKSxwYShoKT9ydShfLGgpOiJzdHJpbmciPT10eXBlb2YgXyYmKF89e25hbWU6X30pLHZvaWQgMD09PV8ua2V5JiYoXy5rZXk9bSksZi5wdXNoKF8pfSk6Um4oZCxmdW5jdGlvbihoLG0p'@;
put 'e3ZhciBfPWFbaF07IV8mJkwzZS5pbmRleE9mKGgpPj0wfHwoX3x8KF89e25hbWU6aCxrZXk6IiIuY29uY2F0KG0pfSkscGEoaCkmJnJ1KF8saCksdm9pZCAwPT09Xy5rZXkmJihfLmtleT1tKSxmLnB1c2goXykpfSksZn0oYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNb'@;
put 'MF0/YXJndW1lbnRzWzBdOm51bGwsdGhpcy5kZWZhdWx0T3JkZXJQYXR0ZXJuLHRoaXMucHJlZGVmaW5lZEl0ZW1zKX19XSksbH0oKTtjb25zdCBOM2U9bTJ0O2Z1bmN0aW9uIFZrKGwpe3JldHVybihWaz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJv'@;
put 'bC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9u'@;
put 'IFYzZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsYjJ0KGYua2V5KSxmKX19'@;
put 'ZnVuY3Rpb24gYjJ0KGwpe3ZhciBjPWZ1bmN0aW9uIF8ydChsLGMpe2lmKCJvYmplY3QiIT09VmsobCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09'@;
put 'VmsoZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PVZrKGMpP2M6U3RyaW5n'@;
put 'KGMpfXZhciB3MnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKGMsYSl7IWZ1bmN0aW9uIHYydChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGwpO3ZhciBoLG0sXyxPLFgsYWUsZj1W'@;
put 'NyhhKSxkPXk1KGEpO3RoaXMucm9vdFdpbmRvdz1hLHRoaXMudHlwZT10aGlzLmdldFNvdXJjZVR5cGUoYyksImxpdGVyYWwiPT09dGhpcy50eXBlPyhoPXBhcnNlSW50KGMudG9wLDEwKSxfPXBhcnNlSW50KGMubGVmdCwxMCksWD1jLmhlaWdodHx8MCxhZT1jLndpZHRofHwwLG09aCxPPV8s'@;
put 'aCs9ZixfKz1kKToiZXZlbnQiPT09dGhpcy50eXBlJiYoaD1wYXJzZUludChjLnBhZ2VZLDEwKSxfPXBhcnNlSW50KGMucGFnZVgsMTApLFg9Yy50YXJnZXQuY2xpZW50SGVpZ2h0LGFlPWMudGFyZ2V0LmNsaWVudFdpZHRoLG09aC1mLE89Xy1kKSx0aGlzLnRvcD1oLHRoaXMudG9wUmVsYXRp'@;
put 'dmU9bSx0aGlzLmxlZnQ9Xyx0aGlzLmxlZnRSZWxhdGl2ZT1PLHRoaXMuc2Nyb2xsVG9wPWYsdGhpcy5zY3JvbGxMZWZ0PWQsdGhpcy5jZWxsSGVpZ2h0PVgsdGhpcy5jZWxsV2lkdGg9YWV9cmV0dXJuIGZ1bmN0aW9uIHkydChsLGMsYSl7YyYmVjNlKGwucHJvdG90eXBlLGMpLGEmJlYzZShs'@;
put 'LGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShsLFt7a2V5OiJnZXRTb3VyY2VUeXBlIix2YWx1ZTpmdW5jdGlvbihhKXt2YXIgZj0ibGl0ZXJhbCI7cmV0dXJuIGEgaW5zdGFuY2VvZiBFdmVudCYmKGY9ImV2ZW50IiksZn19LHtrZXk6ImZp'@;
put 'dHNBYm92ZSIsdmFsdWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMudG9wUmVsYXRpdmU+PWEub2Zmc2V0SGVpZ2h0fX0se2tleToiZml0c0JlbG93Iix2YWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy50b3BSZWxhdGl2ZSthLm9mZnNldEhlaWdodDw9KGFyZ3VtZW50cy5sZW5ndGg+MSYm'@;
put 'dm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp0aGlzLnJvb3RXaW5kb3cuaW5uZXJIZWlnaHQpfX0se2tleToiZml0c09uUmlnaHQiLHZhbHVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmxlZnRSZWxhdGl2ZSt0aGlzLmNlbGxXaWR0aCthLm9mZnNldFdpZHRoPD0oYXJndW1l'@;
put 'bnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnRoaXMucm9vdFdpbmRvdy5pbm5lcldpZHRoKX19LHtrZXk6ImZpdHNPbkxlZnQiLHZhbHVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmxlZnRSZWxhdGl2ZT49YS5vZmZzZXRXaWR0aH19XSksbH0oKTtj'@;
put 'b25zdCBDMnQ9dzJ0O2Z1bmN0aW9uIEJrKGwpe3JldHVybihCaz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBl'@;
put 'b2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIEIzZShsLGMpe3ZhciBhPU9iamVjdC5rZXlzKGwpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBmPU9iamVjdC5n'@;
put 'ZXRPd25Qcm9wZXJ0eVN5bWJvbHMobCk7YyYmKGY9Zi5maWx0ZXIoZnVuY3Rpb24oZCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobCxkKS5lbnVtZXJhYmxlfSkpLGEucHVzaC5hcHBseShhLGYpfXJldHVybiBhfWZ1bmN0aW9uIGozZShsKXtmb3IodmFyIGM9MTtj'@;
put 'PGFyZ3VtZW50cy5sZW5ndGg7YysrKXt2YXIgYT1udWxsIT1hcmd1bWVudHNbY10/YXJndW1lbnRzW2NdOnt9O2MlMj9CM2UoT2JqZWN0KGEpLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe1MydChsLGYsYVtmXSl9KTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVm'@;
put 'aW5lUHJvcGVydGllcyhsLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGEpKTpCM2UoT2JqZWN0KGEpKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLGYsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihhLGYpKX0pfXJldHVybiBsfWZ1'@;
put 'bmN0aW9uIFMydChsLGMsYSl7cmV0dXJuKGM9VTNlKGMpKWluIGw/T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsYyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmxbY109YSxsfWZ1bmN0aW9uIHozZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5n'@;
put 'dGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsVTNlKGYua2V5KSxmKX19ZnVuY3Rpb24gVTNlKGwpe3ZhciBjPWZ1bmN0aW9u'@;
put 'IEUydChsLGMpe2lmKCJvYmplY3QiIT09QmsobCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09QmsoZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVF'@;
put 'cnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PUJrKGMpP2M6U3RyaW5nKGMpfXZhciBXM2U9ZnVuY3Rpb24oKXtmdW5jdGlv'@;
put 'biBsKGMsYSl7KGZ1bmN0aW9uIE0ydChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyxsKSx0aGlzLmhvdD1jLHRoaXMub3B0aW9ucz1hfHx7cGFyZW50Om51bGwsbmFtZTpudWxs'@;
put 'LGNsYXNzTmFtZToiIixrZWVwSW5WaWV3cG9ydDohMCxzdGFuZGFsb25lOiExLG1pbldpZHRoOjIxNSxjb250YWluZXI6dGhpcy5ob3Qucm9vdERvY3VtZW50LmRvY3VtZW50RWxlbWVudH0sdGhpcy5ldmVudE1hbmFnZXI9bmV3IGZzKHRoaXMpLHRoaXMuY29udGFpbmVyPXRoaXMuY3JlYXRl'@;
put 'Q29udGFpbmVyKHRoaXMub3B0aW9ucy5uYW1lKSx0aGlzLmhvdE1lbnU9bnVsbCx0aGlzLmhvdFN1Yk1lbnVzPXt9LHRoaXMucGFyZW50TWVudT10aGlzLm9wdGlvbnMucGFyZW50fHxudWxsLHRoaXMubWVudUl0ZW1zPW51bGwsdGhpcy5vcmlnT3V0c2lkZUNsaWNrRGVzZWxlY3RzPW51bGws'@;
put 'dGhpcy5rZXlFdmVudD0hMSx0aGlzLm9mZnNldD17YWJvdmU6MCxiZWxvdzowLGxlZnQ6MCxyaWdodDowfSx0aGlzLl9hZnRlclNjcm9sbENhbGxiYWNrPW51bGwsdGhpcy5yZWdpc3RlckV2ZW50cygpfXJldHVybiBmdW5jdGlvbiBrMnQobCxjLGEpe2MmJnozZShsLnByb3RvdHlwZSxjKSxh'@;
put 'JiZ6M2UobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0obCxbe2tleToicmVnaXN0ZXJFdmVudHMiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMsZj10aGlzLmhvdC5yb290V2luZG93O2Y7KXRoaXMuZXZlbnRNYW5hZ2VyLmFk'@;
put 'ZEV2ZW50TGlzdGVuZXIoZi5kb2N1bWVudCwibW91c2Vkb3duIixmdW5jdGlvbihkKXtyZXR1cm4gYS5vbkRvY3VtZW50TW91c2VEb3duKGQpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihmLmRvY3VtZW50LCJjb250ZXh0bWVudSIsZnVuY3Rpb24oZCl7cmV0dXJuIGEu'@;
put 'b25Eb2N1bWVudENvbnRleHRNZW51KGQpfSksZj1qUyhmKX19LHtrZXk6InNldE1lbnVJdGVtcyIsdmFsdWU6ZnVuY3Rpb24oYSl7dGhpcy5tZW51SXRlbXM9YX19LHtrZXk6ImdldFNlbGVjdGVkSXRlbSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNTZWxlY3RlZEl0ZW0oKT90'@;
put 'aGlzLmhvdE1lbnUuZ2V0U291cmNlRGF0YUF0Um93KHRoaXMuaG90TWVudS5nZXRTZWxlY3RlZExhc3QoKVswXSk6bnVsbH19LHtrZXk6Imhhc1NlbGVjdGVkSXRlbSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLmhvdE1lbnUuZ2V0U2VsZWN0ZWRMYXN0KCkp'@;
put 'fX0se2tleToic2V0T2Zmc2V0Iix2YWx1ZTpmdW5jdGlvbihhKXt0aGlzLm9mZnNldFthXT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MH19LHtrZXk6ImlzU3ViTWVudSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PXRoaXMu'@;
put 'cGFyZW50TWVudX19LHtrZXk6Im9wZW4iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpczt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZU9wZW4iKSx0aGlzLmNvbnRhaW5lci5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIiksdGhpcy5jb250YWluZXIuc3R5bGUuZGlzcGxheT0iYmxvY2siO3Zh'@;
put 'ciBmPVRZKGZ1bmN0aW9uKHhlKXtyZXR1cm4gYS5vcGVuU3ViTWVudSh4ZSl9LDMwMCksZD10aGlzLm9wdGlvbnMubWluV2lkdGh8fDIxNSxoPSExLG09RDEodGhpcy5tZW51SXRlbXMsZnVuY3Rpb24oeGUpe3JldHVybiB4ZS5rZXk9PT1GayYmKGg9ITApLGZ1bmN0aW9uIHBodChsLGMpe3Jl'@;
put 'dHVybiFsLmhpZGRlbnx8ISgiZnVuY3Rpb24iPT10eXBlb2YgbC5oaWRkZW4mJmwuaGlkZGVuLmNhbGwoYykpfSh4ZSxhLmhvdCl9KTtpZihtLmxlbmd0aDwxJiYhaCltLnB1c2goRjNlKClbRmtdKTtlbHNlIGlmKDA9PT1tLmxlbmd0aClyZXR1cm47bT1mdW5jdGlvbiB2aHQobCl7dmFyIGM9'@;
put 'YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmJhLGE9bC5zbGljZSgwKTtyZXR1cm4gYT1mdW5jdGlvbiBtaHQobCxjKXt2YXIgYT1sLnNsaWNlKDApO3JldHVybiBhLnJldmVyc2UoKSwoYT1TM2UoYSxjKSkucmV2ZXJzZSgpLGF9KGE9UzNl'@;
put 'KGEsYyksYyksYT1mdW5jdGlvbiBnaHQobCl7dmFyIGM9W107cmV0dXJuIFJuKGwsZnVuY3Rpb24oYSxmKXtmPjA/Y1tjLmxlbmd0aC0xXS5uYW1lIT09YS5uYW1lJiZjLnB1c2goYSk6Yy5wdXNoKGEpfSksY30oYSksYX0obSxiYSk7dmFyIF89ITEsTz17ZGF0YTptLGNvbEhlYWRlcnM6ITEs'@;
put 'YXV0b0NvbHVtblNpemU6ITAsYXV0b1dyYXBSb3c6ITEsbW9kaWZ5Q29sV2lkdGg6ZnVuY3Rpb24oVmUpe3JldHVybiBpbyhWZSkmJlZlPGQ/ZDpWZX0sYXV0b1Jvd1NpemU6ITEscmVhZE9ubHk6ITAsZWRpdG9yOiExLGNvcHlQYXN0ZTohMSxtYXhDb2xzOjEsY29sdW1uczpbe2RhdGE6Im5h'@;
put 'bWUiLHJlbmRlcmVyOmZ1bmN0aW9uKFZlLFplLGx0LGR0LGd0LGp0KXtyZXR1cm4gYS5tZW51SXRlbVJlbmRlcmVyKFZlLFplLGx0LGR0LGd0LGp0KX19XSxyZW5kZXJBbGxSb3dzOiEwLGZyYWdtZW50U2VsZWN0aW9uOiExLG91dHNpZGVDbGlja0Rlc2VsZWN0czohMSxkaXNhYmxlVmlzdWFs'@;
put 'U2VsZWN0aW9uOiJhcmVhIixsYXlvdXREaXJlY3Rpb246dGhpcy5ob3QuaXNSdGwoKT8icnRsIjoibHRyIixhZnRlck9uQ2VsbE1vdXNlT3ZlcjpmdW5jdGlvbihWZSxaZSl7YS5pc0FsbFN1Yk1lbnVzQ2xvc2VkKCk/ZihaZS5yb3cpOmEub3BlblN1Yk1lbnUoWmUucm93KX0scm93SGVpZ2h0'@;
put 'czpmdW5jdGlvbihWZSl7cmV0dXJuIG1bVmVdLm5hbWU9PT1iYT8xOjIzfSxhZnRlck9uQ2VsbENvbnRleHRNZW51OmZ1bmN0aW9uKFZlKXtWZS5wcmV2ZW50RGVmYXVsdCgpLGRZKCkmJl8mJmEuaGFzU2VsZWN0ZWRJdGVtKCkmJmEuY2xvc2UoITApfSxiZWZvcmVPbkNlbGxNb3VzZVVwOmZ1'@;
put 'bmN0aW9uKFZlKXthLmhhc1NlbGVjdGVkSXRlbSgpJiYoXz0hYS5pc0NvbW1hbmRQYXNzaXZlKGEuZ2V0U2VsZWN0ZWRJdGVtKCkpLGEuZXhlY3V0ZUNvbW1hbmQoVmUpKX0sYWZ0ZXJPbkNlbGxNb3VzZVVwOmZ1bmN0aW9uKFZlKXsoIWRZKCl8fCFJNChWZSkpJiZfJiZhLmhhc1NlbGVjdGVk'@;
put 'SXRlbSgpJiYoUGQoKXx8ZlkoKT9zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIGEuY2xvc2UoITApfSwzMjUpOmEuY2xvc2UoITApKX0sYWZ0ZXJVbmxpc3RlbjpmdW5jdGlvbigpeyFhLmhhc1NlbGVjdGVkSXRlbSgpJiZhLmlzT3BlbmVkKCkmJmEuaG90TWVudS5saXN0ZW4oKX19O3Ro'@;
put 'aXMub3JpZ091dHNpZGVDbGlja0Rlc2VsZWN0cz10aGlzLmhvdC5nZXRTZXR0aW5ncygpLm91dHNpZGVDbGlja0Rlc2VsZWN0cyx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLm91dHNpZGVDbGlja0Rlc2VsZWN0cz0hMSx0aGlzLmhvdE1lbnU9bmV3IEskKHRoaXMuY29udGFpbmVyLE8pLHRoaXMu'@;
put 'aG90TWVudS5hZGRIb29rKCJhZnRlckluaXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGEub25BZnRlckluaXQoKX0pLHRoaXMuaG90TWVudS5hZGRIb29rKCJhZnRlclNlbGVjdGlvbiIsZnVuY3Rpb24oKXtyZXR1cm4gYS5vbkFmdGVyU2VsZWN0aW9uLmFwcGx5KGEsYXJndW1lbnRzKX0pLHRoaXMu'@;
put 'aG90TWVudS5pbml0KCksdGhpcy5ob3RNZW51Lmxpc3RlbigpO3ZhciBYPXRoaXMuaG90TWVudS5nZXRTaG9ydGN1dE1hbmFnZXIoKSxhZT1YLmFkZENvbnRleHQoIm1lbnUiKSxiZT1qM2UoajNlKHt9LHtncm91cDoibWVudSJ9KSx7fSx7cnVuT25seUlmOmZ1bmN0aW9uKFZlKXtyZXR1cm4h'@;
put 'MT09PSRTKFZlLnRhcmdldCl8fCExPT09YS5jb250YWluZXIuY29udGFpbnMoVmUudGFyZ2V0KX19KTtYLnNldEFjdGl2ZUNvbnRleHROYW1lKCJtZW51IiksYWUuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJFc2NhcGUiXV0sY2FsbGJhY2s6ZnVuY3Rpb24oKXthLmtleUV2ZW50PSEwLGEuY2xv'@;
put 'c2UoKSxhLmtleUV2ZW50PSExfX0se2tleXM6W1siQXJyb3dEb3duIl1dLGNhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIFZlPWEuaG90TWVudS5nZXRTZWxlY3RlZExhc3QoKTthLmtleUV2ZW50PSEwLFZlP2Euc2VsZWN0TmV4dENlbGwoVmVbMF0sVmVbMV0pOmEuc2VsZWN0Rmlyc3RDZWxsKCks'@;
put 'YS5rZXlFdmVudD0hMX19LHtrZXlzOltbIkFycm93VXAiXV0sY2FsbGJhY2s6ZnVuY3Rpb24oKXt2YXIgVmU9YS5ob3RNZW51LmdldFNlbGVjdGVkTGFzdCgpO2Eua2V5RXZlbnQ9ITAsVmU/YS5zZWxlY3RQcmV2Q2VsbChWZVswXSxWZVsxXSk6YS5zZWxlY3RMYXN0Q2VsbCgpLGEua2V5RXZl'@;
put 'bnQ9ITF9fSx7a2V5czpbWyJBcnJvd1JpZ2h0Il1dLGNhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIFZlPWEuaG90TWVudS5nZXRTZWxlY3RlZExhc3QoKTtpZihhLmtleUV2ZW50PSEwLFZlKXt2YXIgWmU9YS5vcGVuU3ViTWVudShWZVswXSk7WmUmJlplLnNlbGVjdEZpcnN0Q2VsbCgpfWEua2V5'@;
put 'RXZlbnQ9ITF9fSx7a2V5czpbWyJBcnJvd0xlZnQiXV0sY2FsbGJhY2s6ZnVuY3Rpb24oKXt2YXIgVmU9YS5ob3RNZW51LmdldFNlbGVjdGVkTGFzdCgpO2Eua2V5RXZlbnQ9ITAsVmUmJmEuaXNTdWJNZW51KCkmJihhLmNsb3NlKCksYS5wYXJlbnRNZW51JiZhLnBhcmVudE1lbnUuaG90TWVu'@;
put 'dS5saXN0ZW4oKSksYS5rZXlFdmVudD0hMX19LHtrZXlzOltbIkVudGVyIl1dLGNhbGxiYWNrOmZ1bmN0aW9uKFZlKXt2YXIgWmU9YS5ob3RNZW51LmdldFNlbGVjdGVkTGFzdCgpO2Eua2V5RXZlbnQ9ITAsYS5ob3RNZW51LmdldFNvdXJjZURhdGFBdFJvdyhaZVswXSkuc3VibWVudXx8KGEu'@;
put 'ZXhlY3V0ZUNvbW1hbmQoVmUpLGEuY2xvc2UoITApKSxhLmtleUV2ZW50PSExfX0se2tleXM6W1siUGFnZVVwIl1dLGNhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIFZlPWEuaG90TWVudS5nZXRTZWxlY3RlZExhc3QoKTthLmtleUV2ZW50PSEwLFZlP2EuaG90TWVudS5zZWxlY3Rpb24udHJhbnNm'@;
put 'b3JtU3RhcnQoLWEuaG90TWVudS5jb3VudFZpc2libGVSb3dzKCksMCk6YS5zZWxlY3RGaXJzdENlbGwoKSxhLmtleUV2ZW50PSExfX0se2tleXM6W1siUGFnZURvd24iXV0sY2FsbGJhY2s6ZnVuY3Rpb24oKXt2YXIgVmU9YS5ob3RNZW51LmdldFNlbGVjdGVkTGFzdCgpO2Eua2V5RXZlbnQ9'@;
put 'ITAsVmU/YS5ob3RNZW51LnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydChhLmhvdE1lbnUuY291bnRWaXNpYmxlUm93cygpLDApOmEuc2VsZWN0TGFzdENlbGwoKSxhLmtleUV2ZW50PSExfX1dLGJlKSx0aGlzLmJsb2NrTWFpblRhYmxlQ2FsbGJhY2tzKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJh'@;
put 'ZnRlck9wZW4iKX19LHtrZXk6ImNsb3NlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBhPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07dGhpcy5pc09wZW5lZCgpJiYoYSYmdGhpcy5wYXJlbnRNZW51P3RoaXMucGFyZW50TWVudS5jbG9zZSgp'@;
put 'Oih0aGlzLmNsb3NlQWxsU3ViTWVudXMoKSx0aGlzLmNvbnRhaW5lci5zdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLnJlbGVhc2VNYWluVGFibGVDYWxsYmFja3MoKSx0aGlzLmhvdE1lbnUuZGVzdHJveSgpLHRoaXMuaG90TWVudT1udWxsLHRoaXMuaG90LmdldFNldHRpbmdzKCkub3V0c2lk'@;
put 'ZUNsaWNrRGVzZWxlY3RzPXRoaXMub3JpZ091dHNpZGVDbGlja0Rlc2VsZWN0cyx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyQ2xvc2UiKSx0aGlzLnBhcmVudE1lbnUmJnRoaXMucGFyZW50TWVudS5ob3RNZW51Lmxpc3RlbigpKSl9fSx7a2V5OiJvcGVuU3ViTWVudSIsdmFsdWU6ZnVuY3Rp'@;
put 'b24oYSl7aWYoIXRoaXMuaG90TWVudSlyZXR1cm4hMTt2YXIgZj10aGlzLmhvdE1lbnUuZ2V0Q2VsbChhLDApO2lmKHRoaXMuY2xvc2VBbGxTdWJNZW51cygpLCFmfHwhZnVuY3Rpb24gY2h0KGwpe3JldHVybiBZbyhsLCJodFN1Ym1lbnUiKX0oZikpcmV0dXJuITE7dmFyIGQ9dGhpcy5ob3RN'@;
put 'ZW51LmdldFNvdXJjZURhdGFBdFJvdyhhKSxoPW5ldyBsKHRoaXMuaG90LHtwYXJlbnQ6dGhpcyxuYW1lOmQubmFtZSxjbGFzc05hbWU6dGhpcy5vcHRpb25zLmNsYXNzTmFtZSxrZWVwSW5WaWV3cG9ydDohMCxjb250YWluZXI6dGhpcy5vcHRpb25zLmNvbnRhaW5lcn0pO3JldHVybiBoLnNl'@;
put 'dE1lbnVJdGVtcyhkLnN1Ym1lbnUuaXRlbXMpLGgub3BlbigpLGguc2V0UG9zaXRpb24oZi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksdGhpcy5ob3RTdWJNZW51c1tkLmtleV09aCxofX0se2tleToiY2xvc2VTdWJNZW51Iix2YWx1ZTpmdW5jdGlvbihhKXt2YXIgZj10aGlzLmhvdE1lbnUu'@;
put 'Z2V0U291cmNlRGF0YUF0Um93KGEpLGQ9dGhpcy5ob3RTdWJNZW51c1tmLmtleV07ZCYmKGQuZGVzdHJveSgpLGRlbGV0ZSB0aGlzLmhvdFN1Yk1lbnVzW2Yua2V5XSl9fSx7a2V5OiJjbG9zZUFsbFN1Yk1lbnVzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXM7Um4odGhpcy5ob3RNZW51'@;
put 'LmdldERhdGEoKSxmdW5jdGlvbihmLGQpe3JldHVybiBhLmNsb3NlU3ViTWVudShkKX0pfX0se2tleToiaXNBbGxTdWJNZW51c0Nsb3NlZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PU9iamVjdC5rZXlzKHRoaXMuaG90U3ViTWVudXMpLmxlbmd0aH19LHtrZXk6ImRlc3Ryb3kiLHZh'@;
put 'bHVlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5jb250YWluZXIucGFyZW50Tm9kZTt0aGlzLmNsZWFyTG9jYWxIb29rcygpLHRoaXMuY2xvc2UoKSx0aGlzLnBhcmVudE1lbnU9bnVsbCx0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCksYSYmYS5yZW1vdmVDaGlsZCh0aGlzLmNvbnRhaW5lcil9'@;
put 'fSx7a2V5OiJpc09wZW5lZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PXRoaXMuaG90TWVudX19LHtrZXk6ImV4ZWN1dGVDb21tYW5kIix2YWx1ZTpmdW5jdGlvbihhKXtpZih0aGlzLmlzT3BlbmVkKCkmJnRoaXMuaGFzU2VsZWN0ZWRJdGVtKCkpe3ZhciBmPXRoaXMuZ2V0U2Vs'@;
put 'ZWN0ZWRJdGVtKCk7aWYodGhpcy5ydW5Mb2NhbEhvb2tzKCJzZWxlY3QiLGYsYSksIXRoaXMuaXNDb21tYW5kUGFzc2l2ZShmKSl7dmFyIGQ9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZSgpLGg9ZD9mdW5jdGlvbiB1aHQobCl7cmV0dXJuIGhhKGwsZnVuY3Rpb24oYyl7cmV0dXJue3N0YXJ0'@;
put 'OmMuZ2V0VG9wU3RhcnRDb3JuZXIoKSxlbmQ6Yy5nZXRCb3R0b21FbmRDb3JuZXIoKX19KX0oZCk6W107dGhpcy5ydW5Mb2NhbEhvb2tzKCJleGVjdXRlQ29tbWFuZCIsZi5rZXksaCxhKSx0aGlzLmlzU3ViTWVudSgpJiZ0aGlzLnBhcmVudE1lbnUucnVuTG9jYWxIb29rcygiZXhlY3V0ZUNv'@;
put 'bW1hbmQiLGYua2V5LGgsYSl9fX19LHtrZXk6ImlzQ29tbWFuZFBhc3NpdmUiLHZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBmPWEuaXNDb21tYW5kLGQ9YS5uYW1lLGg9YS5kaXNhYmxlZCxtPWEuc3VibWVudSxfPSEwPT09aHx8ImZ1bmN0aW9uIj09dHlwZW9mIGgmJiEwPT09aC5jYWxsKHRoaXMu'@;
put 'aG90KTtyZXR1cm4hMT09PWZ8fGQ9PT1iYXx8ITA9PT1ffHxtfX0se2tleToic2V0UG9zaXRpb24iLHZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBmPW5ldyBDMnQoYSx0aGlzLmNvbnRhaW5lci5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KTt0aGlzLm9wdGlvbnMua2VlcEluVmlld3BvcnQ/KGYu'@;
put 'Zml0c0JlbG93KHRoaXMuY29udGFpbmVyKT90aGlzLnNldFBvc2l0aW9uQmVsb3dDdXJzb3IoZik6Zi5maXRzQWJvdmUodGhpcy5jb250YWluZXIpP3RoaXMuc2V0UG9zaXRpb25BYm92ZUN1cnNvcihmKTp0aGlzLnNldFBvc2l0aW9uQmVsb3dDdXJzb3IoZiksdGhpcy5ob3QuaXNMdHIoKT90'@;
put 'aGlzLnNldEhvcml6b250YWxQb3NpdGlvbkZvckx0cihmKTp0aGlzLnNldEhvcml6b250YWxQb3NpdGlvbkZvclJ0bChmKSk6KHRoaXMuc2V0UG9zaXRpb25CZWxvd0N1cnNvcihmKSx0aGlzLnNldFBvc2l0aW9uT25SaWdodE9mQ3Vyc29yKGYpKX19LHtrZXk6InNldEhvcml6b250YWxQb3Np'@;
put 'dGlvbkZvclJ0bCIsdmFsdWU6ZnVuY3Rpb24oYSl7YS5maXRzT25MZWZ0KHRoaXMuY29udGFpbmVyKT90aGlzLnNldFBvc2l0aW9uT25MZWZ0T2ZDdXJzb3IoYSk6dGhpcy5zZXRQb3NpdGlvbk9uUmlnaHRPZkN1cnNvcihhKX19LHtrZXk6InNldEhvcml6b250YWxQb3NpdGlvbkZvckx0ciIs'@;
put 'dmFsdWU6ZnVuY3Rpb24oYSl7YS5maXRzT25SaWdodCh0aGlzLmNvbnRhaW5lcik/dGhpcy5zZXRQb3NpdGlvbk9uUmlnaHRPZkN1cnNvcihhKTp0aGlzLnNldFBvc2l0aW9uT25MZWZ0T2ZDdXJzb3IoYSl9fSx7a2V5OiJzZXRQb3NpdGlvbkFib3ZlQ3Vyc29yIix2YWx1ZTpmdW5jdGlvbihh'@;
put 'KXt2YXIgZj10aGlzLm9mZnNldC5hYm92ZSthLnRvcC10aGlzLmNvbnRhaW5lci5vZmZzZXRIZWlnaHQ7dGhpcy5pc1N1Yk1lbnUoKSYmKGY9YS50b3ArYS5jZWxsSGVpZ2h0LXRoaXMuY29udGFpbmVyLm9mZnNldEhlaWdodCszKSx0aGlzLmNvbnRhaW5lci5zdHlsZS50b3A9IiIuY29uY2F0'@;
put 'KGYsInB4Iil9fSx7a2V5OiJzZXRQb3NpdGlvbkJlbG93Q3Vyc29yIix2YWx1ZTpmdW5jdGlvbihhKXt2YXIgZj10aGlzLm9mZnNldC5iZWxvdythLnRvcCsxO3RoaXMuaXNTdWJNZW51KCkmJihmPWEudG9wLTEpLHRoaXMuY29udGFpbmVyLnN0eWxlLnRvcD0iIi5jb25jYXQoZiwicHgiKX19'@;
put 'LHtrZXk6InNldFBvc2l0aW9uT25SaWdodE9mQ3Vyc29yIix2YWx1ZTpmdW5jdGlvbihhKXt2YXIgZj1hLmxlZnQ7aWYodGhpcy5pc1N1Yk1lbnUoKSl7dmFyIGQ9dGhpcy5wYXJlbnRNZW51LmNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtmKz1hLmNlbGxXaWR0aCtkLnJpZ2h0'@;
put 'LShhLmxlZnQrYS5jZWxsV2lkdGgpfWVsc2UgZis9dGhpcy5vZmZzZXQucmlnaHQ7dGhpcy5jb250YWluZXIuc3R5bGUubGVmdD0iIi5jb25jYXQoZiwicHgiKX19LHtrZXk6InNldFBvc2l0aW9uT25MZWZ0T2ZDdXJzb3IiLHZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBmPXRoaXMub2Zmc2V0Lmxl'@;
put 'ZnQrYS5sZWZ0LXRoaXMuY29udGFpbmVyLm9mZnNldFdpZHRoO2lmKHRoaXMuaXNTdWJNZW51KCkpe3ZhciBkPXRoaXMucGFyZW50TWVudS5jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Zi09YS5sZWZ0LWQubGVmdH10aGlzLmNvbnRhaW5lci5zdHlsZS5sZWZ0PSIiLmNvbmNh'@;
put 'dChmLCJweCIpfX0se2tleToic2VsZWN0Rmlyc3RDZWxsIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMuaG90TWVudS5nZXRDZWxsKDAsMCk7QUwoYSl8fFRMKGEpfHxPTChhKT90aGlzLnNlbGVjdE5leHRDZWxsKDAsMCk6dGhpcy5ob3RNZW51LnNlbGVjdENlbGwoMCwwKX19LHtrZXk6'@;
put 'InNlbGVjdExhc3RDZWxsIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMuaG90TWVudS5jb3VudFJvd3MoKS0xLGY9dGhpcy5ob3RNZW51LmdldENlbGwoYSwwKTtBTChmKXx8VEwoZil8fE9MKGYpP3RoaXMuc2VsZWN0UHJldkNlbGwoYSwwKToodGhpcy5ob3RNZW51LnNlbGVjdENlbGwo'@;
put 'YSwwLHZvaWQgMCx2b2lkIDAsITEpLHRoaXMuaG90TWVudS5zY3JvbGxWaWV3cG9ydFRvKGEsMCwhMCwhMSkpfX0se2tleToic2VsZWN0TmV4dENlbGwiLHZhbHVlOmZ1bmN0aW9uKGEsZil7dmFyIGQ9YSsxLGg9ZDx0aGlzLmhvdE1lbnUuY291bnRSb3dzKCk/dGhpcy5ob3RNZW51LmdldENl'@;
put 'bGwoZCxmKTpudWxsO2gmJihBTChoKXx8VEwoaCl8fE9MKGgpP3RoaXMuc2VsZWN0TmV4dENlbGwoZCxmKTp0aGlzLmhvdE1lbnUuc2VsZWN0Q2VsbChkLGYpKX19LHtrZXk6InNlbGVjdFByZXZDZWxsIix2YWx1ZTpmdW5jdGlvbihhLGYpe3ZhciBkPWEtMSxoPWQ+PTA/dGhpcy5ob3RNZW51'@;
put 'LmdldENlbGwoZCxmKTpudWxsO2gmJihBTChoKXx8VEwoaCl8fE9MKGgpP3RoaXMuc2VsZWN0UHJldkNlbGwoZCxmKTp0aGlzLmhvdE1lbnUuc2VsZWN0Q2VsbChkLGYpKX19LHtrZXk6Im1lbnVJdGVtUmVuZGVyZXIiLHZhbHVlOmZ1bmN0aW9uKGEsZixkLGgsbSxfKXt2YXIgZHQsTz10aGlz'@;
put 'LFg9YS5nZXRTb3VyY2VEYXRhQXRSb3coZCksYWU9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLFZlPWZ1bmN0aW9uKGR0KXtyZXR1cm4gZHQuZGlzYWJsZVNlbGVjdGlvbn0sWmU9XzsiZnVuY3Rpb24iPT10eXBlb2YgWmUmJihaZT1aZS5jYWxsKHRoaXMuaG90'@;
put 'KSksRmQoZiksZ2koYWUsImh0SXRlbVdyYXBwZXIiKSxmLmFwcGVuZENoaWxkKGFlKSxkdD1YLG5ldyBSZWdFeHAoYmEsImkiKS50ZXN0KGR0Lm5hbWUpP2dpKGYsImh0U2VwYXJhdG9yIik6ImZ1bmN0aW9uIj09dHlwZW9mIFgucmVuZGVyZXI/KGdpKGYsImh0Q3VzdG9tTWVudVJlbmRlcmVy'@;
put 'IiksZi5hcHBlbmRDaGlsZChYLnJlbmRlcmVyKGEsYWUsZCxoLG0sWmUpKSk6djUoYWUsWmUpLGZ1bmN0aW9uKGR0KXtyZXR1cm4hMD09PWR0LmRpc2FibGVkfHwiZnVuY3Rpb24iPT10eXBlb2YgZHQuZGlzYWJsZWQmJiEwPT09ZHQuZGlzYWJsZWQuY2FsbChPLmhvdCl9KFgpPyhnaShmLCJo'@;
put 'dERpc2FibGVkIiksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihmLCJtb3VzZWVudGVyIixmdW5jdGlvbigpe3JldHVybiBhLmRlc2VsZWN0Q2VsbCgpfSkpOlZlKFgpPyhnaShmLCJodFNlbGVjdGlvbkRpc2FibGVkIiksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0'@;
put 'ZW5lcihmLCJtb3VzZWVudGVyIixmdW5jdGlvbigpe3JldHVybiBhLmRlc2VsZWN0Q2VsbCgpfSkpOmZ1bmN0aW9uKGR0KXtyZXR1cm4gU3MoZHQsInN1Ym1lbnUiKX0oWCk/KGdpKGYsImh0U3VibWVudSIpLFZlKFgpP3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZiwibW91'@;
put 'c2VlbnRlciIsZnVuY3Rpb24oKXtyZXR1cm4gYS5kZXNlbGVjdENlbGwoKX0pOnRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZiwibW91c2VlbnRlciIsZnVuY3Rpb24oKXtyZXR1cm4gYS5zZWxlY3RDZWxsKGQsaCx2b2lkIDAsdm9pZCAwLCExLCExKX0pKTooSm8oZixbImh0'@;
put 'U3VibWVudSIsImh0RGlzYWJsZWQiXSksVmUoWCk/dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihmLCJtb3VzZWVudGVyIixmdW5jdGlvbigpe3JldHVybiBhLmRlc2VsZWN0Q2VsbCgpfSk6dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihmLCJtb3VzZWVudGVy'@;
put 'IixmdW5jdGlvbigpe3JldHVybiBhLnNlbGVjdENlbGwoZCxoLHZvaWQgMCx2b2lkIDAsITEsITEpfSkpfX0se2tleToiY3JlYXRlQ29udGFpbmVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBoLGY9dGhpcy5vcHRpb25zLmNvbnRhaW5lci5vd25lckRvY3VtZW50LGQ9YXJndW1lbnRzLmxlbmd0'@;
put 'aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGw7cmV0dXJuIGQmJihQbChkKSYmKGQ9bnVsbD09PShkPWQuY2FsbCh0aGlzLmhvdCkpfHxMbChkKT8iIjpkLnRvU3RyaW5nKCkpLGQ9ZC5yZXBsYWNlKC9bXkEtejAtOV0vZywiXyIpLGQ9IiIuY29uY2F0KHRoaXMu'@;
put 'b3B0aW9ucy5jbGFzc05hbWUsIlN1Yl8iKS5jb25jYXQoZCksaD1mLnF1ZXJ5U2VsZWN0b3IoIi4iLmNvbmNhdCh0aGlzLm9wdGlvbnMuY2xhc3NOYW1lLCIuIikuY29uY2F0KGQpKSksaHx8KGdpKGg9Zi5jcmVhdGVFbGVtZW50KCJkaXYiKSwiaHRNZW51ICIuY29uY2F0KHRoaXMub3B0aW9u'@;
put 'cy5jbGFzc05hbWUpKSxkJiZnaShoLGQpLHRoaXMub3B0aW9ucy5jb250YWluZXIuYXBwZW5kQ2hpbGQoaCkpLGh9fSx7a2V5OiJibG9ja01haW5UYWJsZUNhbGxiYWNrcyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9hZnRlclNjcm9sbENhbGxiYWNrPWZ1bmN0aW9uKCl7fSx0aGlzLmhvdC5h'@;
put 'ZGRIb29rKCJhZnRlclNjcm9sbFZlcnRpY2FsbHkiLHRoaXMuX2FmdGVyU2Nyb2xsQ2FsbGJhY2spLHRoaXMuaG90LmFkZEhvb2soImFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5Iix0aGlzLl9hZnRlclNjcm9sbENhbGxiYWNrKX19LHtrZXk6InJlbGVhc2VNYWluVGFibGVDYWxsYmFja3MiLHZh'@;
put 'bHVlOmZ1bmN0aW9uKCl7dGhpcy5fYWZ0ZXJTY3JvbGxDYWxsYmFjayYmKHRoaXMuaG90LnJlbW92ZUhvb2soImFmdGVyU2Nyb2xsVmVydGljYWxseSIsdGhpcy5fYWZ0ZXJTY3JvbGxDYWxsYmFjayksdGhpcy5ob3QucmVtb3ZlSG9vaygiYWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHkiLHRoaXMu'@;
put 'X2FmdGVyU2Nyb2xsQ2FsbGJhY2spLHRoaXMuX2FmdGVyU2Nyb2xsQ2FsbGJhY2s9bnVsbCl9fSx7a2V5OiJvbkFmdGVySW5pdCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmhvdE1lbnUudmlldy5fd3Qud3RUYWJsZSxmPXRoaXMuaG90TWVudS5nZXRTZXR0aW5ncygpLmRhdGEsZD1h'@;
put 'LmhpZGVyLnN0eWxlLGg9YS5ob2xkZXIuc3R5bGUsbT1wYXJzZUludChkLndpZHRoLDEwKSxfPVBzKGYsZnVuY3Rpb24oTyxYKXtyZXR1cm4gTysoWC5uYW1lPT09YmE/MToyNil9LDApO2gud2lkdGg9IiIuY29uY2F0KG0rMywicHgiKSxoLmhlaWdodD0iIi5jb25jYXQoXyszLCJweCIpLGQu'@;
put 'aGVpZ2h0PWguaGVpZ2h0fX0se2tleToib25BZnRlclNlbGVjdGlvbiIsdmFsdWU6ZnVuY3Rpb24oYSxmLGQsaCxtKXshMT09PXRoaXMua2V5RXZlbnQmJihtLnZhbHVlPSEwKX19LHtrZXk6Im9uRG9jdW1lbnRNb3VzZURvd24iLHZhbHVlOmZ1bmN0aW9uKGEpe3RoaXMuaXNPcGVuZWQoKSYm'@;
put 'KHRoaXMub3B0aW9ucy5zdGFuZGFsb25lJiZ0aGlzLmhvdE1lbnUmJiFBNChhLnRhcmdldCx0aGlzLmhvdE1lbnUucm9vdEVsZW1lbnQpfHwodGhpcy5pc0FsbFN1Yk1lbnVzQ2xvc2VkKCl8fHRoaXMuaXNTdWJNZW51KCkpJiYhQTQoYS50YXJnZXQsIi5odE1lbnUiKSkmJnRoaXMuY2xvc2Uo'@;
put 'ITApfX0se2tleToib25Eb2N1bWVudENvbnRleHRNZW51Iix2YWx1ZTpmdW5jdGlvbihhKXt0aGlzLmlzT3BlbmVkKCkmJllvKGEudGFyZ2V0LCJodENvcmUiKSYmQTQoYS50YXJnZXQsdGhpcy5ob3RNZW51LnJvb3RFbGVtZW50KSYmYS5wcmV2ZW50RGVmYXVsdCgpfX1dKSxsfSgpO1RsKFcz'@;
put 'ZSxXMCk7Y29uc3QgcUs9VzNlO2Z1bmN0aW9uIHV5KGwpe3JldHVybih1eT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24i'@;
put 'PT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIEczZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFi'@;
put 'bGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsTzJ0KGYua2V5KSxmKX19ZnVuY3Rpb24gTzJ0KGwpe3ZhciBjPWZ1bmN0aW9uIEQydChsLGMpe2lmKCJvYmplY3QiIT09dXkobCl8fG51bGw9PT1sKXJl'@;
put 'dHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09dXkoZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2'@;
put 'ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PXV5KGMpP2M6U3RyaW5nKGMpfWZ1bmN0aW9uIEc1KCl7cmV0dXJuIEc1PXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdC5nZXQ/UmVmbGVjdC5nZXQu'@;
put 'YmluZCgpOmZ1bmN0aW9uKGMsYSxmKXt2YXIgZD1mdW5jdGlvbiBJMnQobCxjKXtmb3IoOyFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobCxjKSYmbnVsbCE9PShsPVMzKGwpKTspO3JldHVybiBsfShjLGEpO2lmKGQpe3ZhciBoPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURl'@;
put 'c2NyaXB0b3IoZCxhKTtyZXR1cm4gaC5nZXQ/aC5nZXQuY2FsbChhcmd1bWVudHMubGVuZ3RoPDM/YzpmKTpoLnZhbHVlfX0sRzUuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIFhLKGwsYyl7cmV0dXJuKFhLPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBl'@;
put 'T2YuYmluZCgpOmZ1bmN0aW9uKGYsZCl7cmV0dXJuIGYuX19wcm90b19fPWQsZn0pKGwsYyl9ZnVuY3Rpb24gJDNlKGwpe2lmKHZvaWQgMD09PWwpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxs'@;
put 'ZWQiKTtyZXR1cm4gbH1mdW5jdGlvbiBTMyhsKXtyZXR1cm4oUzM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSl9KShsKX12YXIgVkw9ImNvbnRl'@;
put 'eHRNZW51Ijt1by5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIiksdW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUNvbnRleHRNZW51U2hvdyIpLHVvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbnRleHRNZW51'@;
put 'U2hvdyIpLHVvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbnRleHRNZW51SGlkZSIpLHVvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbnRleHRNZW51RXhlY3V0ZSIpO3ZhciBLM2U9ZnVuY3Rpb24obCl7IWZ1bmN0aW9uIFIydChsLGMpe2lmKCJmdW5jdGlvbiIh'@;
put 'PXR5cGVvZiBjJiZudWxsIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2wucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYyYmYy5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpsLHdyaXRhYmxl'@;
put 'OiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxjJiZYSyhsLGMpfShhLGwpO3ZhciBjPWZ1bmN0aW9uIEwydChsKXt2YXIgYz1mdW5jdGlvbiBGMnQoKXtpZih0eXBlb2YgUmVmbGVjdD4idSJ8fCFSZWZsZWN0'@;
put 'LmNvbnN0cnVjdHx8UmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSxmdW5jdGlvbigpe30p'@;
put 'KSwhMH1jYXRjaHtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGQsZj1TMyhsKTtpZihjKXt2YXIgaD1TMyh0aGlzKS5jb25zdHJ1Y3RvcjtkPVJlZmxlY3QuY29uc3RydWN0KGYsYXJndW1lbnRzLGgpfWVsc2UgZD1mLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVu'@;
put 'Y3Rpb24gUDJ0KGwsYyl7aWYoYyYmKCJvYmplY3QiPT09dXkoYyl8fCJmdW5jdGlvbiI9PXR5cGVvZiBjKSlyZXR1cm4gYztpZih2b2lkIDAhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7'@;
put 'cmV0dXJuICQzZShsKX0odGhpcyxkKX19KGEpO2Z1bmN0aW9uIGEoZil7dmFyIGQ7cmV0dXJuIGZ1bmN0aW9uIEEydChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGEpLChkPWMu'@;
put 'Y2FsbCh0aGlzLGYpKS5ldmVudE1hbmFnZXI9bmV3IGZzKCQzZShkKSksZC5jb21tYW5kRXhlY3V0b3I9bmV3IEQzZShkLmhvdCksZC5pdGVtc0ZhY3Rvcnk9bnVsbCxkLm1lbnU9bnVsbCxkfXJldHVybiBmdW5jdGlvbiBUMnQobCxjLGEpe2MmJkczZShsLnByb3RvdHlwZSxjKSxhJiZHM2Uo'@;
put 'bCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0oYSxbe2tleToiaXNFbmFibGVkIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtWTF19fSx7a2V5OiJlbmFibGVQbHVnaW4iLHZhbHVlOmZ1bmN0aW9u'@;
put 'KCl7dmFyIGQ9dGhpcztpZighdGhpcy5lbmFibGVkKXt2YXIgaD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW1ZMXTsiZnVuY3Rpb24iPT10eXBlb2YgaC5jYWxsYmFjayYmdGhpcy5jb21tYW5kRXhlY3V0b3Iuc2V0Q29tbW9uQ2FsbGJhY2soaC5jYWxsYmFjayksdGhpcy5tZW51PW5ldyBxSyh0'@;
put 'aGlzLmhvdCx7Y2xhc3NOYW1lOiJodENvbnRleHRNZW51IixrZWVwSW5WaWV3cG9ydDohMCxjb250YWluZXI6aC51aUNvbnRhaW5lcnx8dGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHl9KSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJiZWZvcmVPcGVuIixmdW5jdGlvbigpe3JldHVybiBkLm9u'@;
put 'TWVudUJlZm9yZU9wZW4oKX0pLHRoaXMubWVudS5hZGRMb2NhbEhvb2soImFmdGVyT3BlbiIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbk1lbnVBZnRlck9wZW4oKX0pLHRoaXMubWVudS5hZGRMb2NhbEhvb2soImFmdGVyQ2xvc2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25NZW51QWZ0ZXJDbG9z'@;
put 'ZSgpfSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiZXhlY3V0ZUNvbW1hbmQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBtLF89YXJndW1lbnRzLmxlbmd0aCxPPW5ldyBBcnJheShfKSxYPTA7WDxfO1grKylPW1hdPWFyZ3VtZW50c1tYXTtyZXR1cm4obT1kLmV4ZWN1dGVDb21tYW5kKS5jYWxsLmFw'@;
put 'cGx5KG0sW2RdLmNvbmNhdChPKSl9KSx0aGlzLmFkZEhvb2soImFmdGVyT25DZWxsQ29udGV4dE1lbnUiLGZ1bmN0aW9uKG0pe3JldHVybiBkLm9uQWZ0ZXJPbkNlbGxDb250ZXh0TWVudShtKX0pLEc1KFMzKGEucHJvdG90eXBlKSwiZW5hYmxlUGx1Z2luIix0aGlzKS5jYWxsKHRoaXMpfX19'@;
put 'LHtrZXk6InVwZGF0ZVBsdWdpbiIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLEc1KFMzKGEucHJvdG90eXBlKSwidXBkYXRlUGx1Z2luIix0aGlzKS5jYWxsKHRoaXMpfX0se2tleToiZGlzYWJsZVBsdWdpbiIsdmFsdWU6ZnVuY3Rp'@;
put 'b24oKXt0aGlzLmNsb3NlKCksdGhpcy5tZW51JiYodGhpcy5tZW51LmRlc3Ryb3koKSx0aGlzLm1lbnU9bnVsbCksRzUoUzMoYS5wcm90b3R5cGUpLCJkaXNhYmxlUGx1Z2luIix0aGlzKS5jYWxsKHRoaXMpfX0se2tleToib3BlbiIsdmFsdWU6ZnVuY3Rpb24oZCl7aWYodGhpcy5tZW51JiYo'@;
put 'dGhpcy5wcmVwYXJlTWVudUl0ZW1zKCksdGhpcy5tZW51Lm9wZW4oKSx0aGlzLm1lbnUuaXNPcGVuZWQoKSkpe3ZhciBoPTAsbT0wO2lmKHRoaXMuaG90LnJvb3REb2N1bWVudCE9PXRoaXMubWVudS5jb250YWluZXIub3duZXJEb2N1bWVudCl7dmFyIE89dGhpcy5ob3Qucm9vdFdpbmRvdy5m'@;
put 'cmFtZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYWU9Ty5sZWZ0O2g9Ty50b3AtVjcoZC52aWV3KSxtPWFlLXk1KGQudmlldyl9ZWxzZSBoPS0xKlY3KHRoaXMubWVudS5ob3RNZW51LnJvb3RXaW5kb3cpLG09LTEqeTUodGhpcy5tZW51LmhvdE1lbnUucm9vdFdpbmRvdyk7dGhp'@;
put 'cy5tZW51LnNldFBvc2l0aW9uKHt0b3A6cGFyc2VJbnQoZC5wYWdlWSwxMCkraCxsZWZ0OnBhcnNlSW50KGQucGFnZVgsMTApK219KX19fSx7a2V5OiJjbG9zZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLm1lbnUmJih0aGlzLm1lbnUuY2xvc2UoKSx0aGlzLml0ZW1zRmFjdG9yeT1udWxsKX19'@;
put 'LHtrZXk6ImV4ZWN1dGVDb21tYW5kIix2YWx1ZTpmdW5jdGlvbihkKXt2YXIgaDtudWxsPT09dGhpcy5pdGVtc0ZhY3RvcnkmJnRoaXMucHJlcGFyZU1lbnVJdGVtcygpO2Zvcih2YXIgbT1hcmd1bWVudHMubGVuZ3RoLF89bmV3IEFycmF5KG0+MT9tLTE6MCksTz0xO088bTtPKyspX1tPLTFd'@;
put 'PWFyZ3VtZW50c1tPXTsoaD10aGlzLmNvbW1hbmRFeGVjdXRvcikuZXhlY3V0ZS5hcHBseShoLFtkXS5jb25jYXQoXykpfX0se2tleToicHJlcGFyZU1lbnVJdGVtcyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzO3RoaXMuaXRlbXNGYWN0b3J5PW5ldyBOM2UodGhpcy5ob3QsYS5ERUZB'@;
put 'VUxUX0lURU1TKTt2YXIgaD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW1ZMXSxtPXtpdGVtczp0aGlzLml0ZW1zRmFjdG9yeS5nZXRJdGVtcyhoKX07dGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsbSksdGhpcy5pdGVtc0ZhY3Rvcnkuc2V0UHJlZGVm'@;
put 'aW5lZEl0ZW1zKG0uaXRlbXMpO3ZhciBfPXRoaXMuaXRlbXNGYWN0b3J5LmdldEl0ZW1zKGgpO3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb250ZXh0TWVudVNldEl0ZW1zIixfKSx0aGlzLm1lbnUuc2V0TWVudUl0ZW1zKF8pLFJuKF8sZnVuY3Rpb24oTyl7cmV0dXJuIGQuY29tbWFuZEV4'@;
put 'ZWN1dG9yLnJlZ2lzdGVyQ29tbWFuZChPLmtleSxPKX0pfX0se2tleToib25BZnRlck9uQ2VsbENvbnRleHRNZW51Iix2YWx1ZTpmdW5jdGlvbihkKXt2YXIgaD10aGlzLmhvdC5nZXRTZXR0aW5ncygpLG09aC5yb3dIZWFkZXJzLF89aC5jb2xIZWFkZXJzLFg9ZC50YXJnZXQ7dGhpcy5jbG9z'@;
put 'ZSgpLCFZbyhYLCJoYW5kc29udGFibGVJbnB1dCIpJiYoZC5wcmV2ZW50RGVmYXVsdCgpLGQuc3RvcFByb3BhZ2F0aW9uKCksKG18fF98fGZ1bmN0aW9uIE8oYWUpe3JldHVybiJURCI9PT1hZS5ub2RlTmFtZXx8IlREIj09PWFlLnBhcmVudE5vZGUubm9kZU5hbWV9KFgpfHxZbyhYLCJjdXJy'@;
put 'ZW50IikmJllvKFgsInd0Qm9yZGVyIikpJiZ0aGlzLm9wZW4oZCkpfX0se2tleToib25NZW51QmVmb3JlT3BlbiIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29udGV4dE1lbnVTaG93Iix0aGlzKX19LHtrZXk6Im9uTWVudUFmdGVyT3BlbiIsdmFsdWU6ZnVu'@;
put 'Y3Rpb24oKXt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb250ZXh0TWVudVNob3ciLHRoaXMpfX0se2tleToib25NZW51QWZ0ZXJDbG9zZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmhvdC5saXN0ZW4oKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb250ZXh0TWVudUhpZGUiLHRoaXMpfX0s'@;
put 'e2tleToiZGVzdHJveSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNsb3NlKCksdGhpcy5tZW51JiZ0aGlzLm1lbnUuZGVzdHJveSgpLEc1KFMzKGEucHJvdG90eXBlKSwiZGVzdHJveSIsdGhpcykuY2FsbCh0aGlzKX19XSxbe2tleToiUExVR0lOX0tFWSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IFZMfX0se2tleToiUExVR0lOX1BSSU9SSVRZIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gNzB9fSx7a2V5OiJQTFVHSU5fREVQUyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuWyJwbHVnaW46QXV0b0NvbHVtblNpemUiXX19LHtrZXk6IkRFRkFVTFRfSVRFTVMiLGdldDpmdW5jdGlvbigpe3JldHVy'@;
put 'bltGTCxITCxiYSxJayxSayxiYSxQTCxQayxiYSxOTCxMTCxiYSxMayxiYSxWZl19fV0pLGF9KEdhKTtmdW5jdGlvbiBqayhsKXtyZXR1cm4oams9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5'@;
put 'cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiBxM2UobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3Ro'@;
put 'O2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLFkydChmLmtleSksZil9fWZ1bmN0aW9uIFkydChsKXt2YXIgYz1mdW5jdGlvbiBX'@;
put 'MnQobCxjKXtpZigib2JqZWN0IiE9PWprKGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PWprKGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJy'@;
put 'b3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1qayhjKT9jOlN0cmluZyhjKX1LM2UuU0VQQVJBVE9SPXtuYW1lOmJhfTt2YXIg'@;
put 'RzJ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbCgpeyhmdW5jdGlvbiBVMnQobCxjKXtpZighKGwgaW5zdGFuY2VvZiBjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsbCksdGhpcy5kYXRhPXt9fXJldHVybiBmdW5jdGlvbiBa'@;
put 'MnQobCxjLGEpe2MmJnEzZShsLnByb3RvdHlwZSxjKSxhJiZxM2UobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0obCxbe2tleToic2V0RGF0YSIsdmFsdWU6ZnVuY3Rpb24oYSxmKXt0aGlzLmRhdGFbYV09Zn19LHtrZXk6ImdldERhdGEi'@;
put 'LHZhbHVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmRhdGFbYV18fHZvaWQgMH19XSksbH0oKTtmdW5jdGlvbiB6ayhsKXtyZXR1cm4oems9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVv'@;
put 'ZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiBYM2UobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2Er'@;
put 'Kyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLEsydChmLmtleSksZil9fWZ1bmN0aW9uICQydChsLGMsYSl7cmV0dXJuIGMmJlgzZShs'@;
put 'LnByb3RvdHlwZSxjKSxhJiZYM2UobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxsfWZ1bmN0aW9uIEsydChsKXt2YXIgYz1mdW5jdGlvbiBxMnQobCxjKXtpZigib2JqZWN0IiE9PXprKGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1s'@;
put 'W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PXprKGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0'@;
put 'dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT16ayhjKT9jOlN0cmluZyhjKX12YXIgSjJ0PSQydChmdW5jdGlvbiBsKCl7KGZ1bmN0aW9uIFgydChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJy'@;
put 'b3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyxsKSx0aGlzLmNsaXBib2FyZERhdGE9bmV3IEcydH0pO2Z1bmN0aW9uIFVrKGwpe3JldHVybihVaz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9m'@;
put 'dW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIEozZShsLGMpe2Zv'@;
put 'cih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsdDN0KGYua2V5KSxmKX19ZnVuY3Rpb24gdDN0'@;
put 'KGwpe3ZhciBjPWZ1bmN0aW9uIG4zdChsLGMpe2lmKCJvYmplY3QiIT09VWsobCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09VWsoZikpcmV0dXJu'@;
put 'IGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PVVrKGMpP2M6U3RyaW5nKGMpfXZhciBKSz1m'@;
put 'dW5jdGlvbigpe2Z1bmN0aW9uIGwoYyl7KGZ1bmN0aW9uIFEydChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyxsKSx0aGlzLnJvb3REb2N1bWVudD1jLmRlZmF1bHRWaWV3P2M6'@;
put 'Yy5vd25lckRvY3VtZW50LHRoaXMubWFpbkVsZW1lbnQ9bnVsbCx0aGlzLmV2ZW50TWFuYWdlcj1uZXcgZnModGhpcyksdGhpcy5saXN0ZW5lcnNDb3VudD1uZXcgV2Vha1NldCx0aGlzLmNvbnRhaW5lcj1jfXJldHVybiBmdW5jdGlvbiBlM3QobCxjLGEpe2MmJkozZShsLnByb3RvdHlwZSxj'@;
put 'KSxhJiZKM2UobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0obCxbe2tleToidXNlU2Vjb25kYXJ5RWxlbWVudCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT1mdW5jdGlvbiBvM3QobCl7dmFyIGM9akwuZ2V0KGwpO2lmKGMpcmV0dXJuIGMu'@;
put 'cGFyZW50RWxlbWVudHx8bC5hcHBlbmRDaGlsZChjKSxjO3ZhciBmPShsLmRlZmF1bHRWaWV3P2w6bC5vd25lckRvY3VtZW50KS5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpO3JldHVybiBqTC5zZXQobCxmKSxmLnNldEF0dHJpYnV0ZSgiZGF0YS1ob3QtaW5wdXQiLCIiKSxmLmNsYXNzTmFt'@;
put 'ZT0iSGFuZHNvbnRhYmxlQ29weVBhc3RlIixmLnRhYkluZGV4PS0xLGYuYXV0b2NvbXBsZXRlPSJvZmYiLGYud3JhcD0iaGFyZCIsZi52YWx1ZT0iICIsbC5hcHBlbmRDaGlsZChmKSxmfSh0aGlzLmNvbnRhaW5lcik7dGhpcy5saXN0ZW5lcnNDb3VudC5oYXMoYSl8fCh0aGlzLmxpc3RlbmVy'@;
put 'c0NvdW50LmFkZChhKSxRM2UodGhpcy5ldmVudE1hbmFnZXIsYSx0aGlzKSksdGhpcy5tYWluRWxlbWVudD1hfX0se2tleToic2V0Rm9jdXNhYmxlRWxlbWVudCIsdmFsdWU6ZnVuY3Rpb24oYSl7dGhpcy5saXN0ZW5lcnNDb3VudC5oYXMoYSl8fCh0aGlzLmxpc3RlbmVyc0NvdW50LmFkZChh'@;
put 'KSxRM2UodGhpcy5ldmVudE1hbmFnZXIsYSx0aGlzKSksdGhpcy5tYWluRWxlbWVudD1hfX0se2tleToiZ2V0Rm9jdXNhYmxlRWxlbWVudCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYWluRWxlbWVudH19LHtrZXk6ImZvY3VzIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMubWFpbkVs'@;
put 'ZW1lbnQudmFsdWU9IiAiLFBkKCl8fEMwZSh0aGlzLm1haW5FbGVtZW50KX19XSksbH0oKTtUbChKSyxXMCk7dmFyIEJMPW5ldyBXZWFrTWFwLFFLPWZ1bmN0aW9uKGMsYSl7cmV0dXJuIGZ1bmN0aW9uKGYpe3JldHVybiBhLnJ1bkxvY2FsSG9va3MoYyxmKX19O2Z1bmN0aW9uIFEzZShsLGMs'@;
put 'YSl7bC5hZGRFdmVudExpc3RlbmVyKGMsImNvcHkiLFFLKCJjb3B5IixhKSksbC5hZGRFdmVudExpc3RlbmVyKGMsImN1dCIsUUsoImN1dCIsYSkpLGwuYWRkRXZlbnRMaXN0ZW5lcihjLCJwYXN0ZSIsUUsoInBhc3RlIixhKSl9dmFyIGpMPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIGVwZShsKXtp'@;
put 'ZihsIGluc3RhbmNlb2YgSkspe3ZhciBjPUJMLmdldChsLmNvbnRhaW5lcik7aWYoKGM9aXNOYU4oYyk/MDpjKT4wJiYoYy09MSksZnVuY3Rpb24gaTN0KGwpe2wuZXZlbnRNYW5hZ2VyLmNsZWFyKCl9KGwpLGM8PTApe2M9MDt2YXIgYT1qTC5nZXQobC5jb250YWluZXIpO2EmJmEucGFyZW50'@;
put 'Tm9kZSYmKGEucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhKSxqTC5kZWxldGUobC5jb250YWluZXIpKSxsLm1haW5FbGVtZW50PW51bGx9Qkwuc2V0KGwuY29udGFpbmVyLGMpfX1mdW5jdGlvbiBaayhsKXtyZXR1cm4oWms9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5'@;
put 'cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShs'@;
put 'KX1mdW5jdGlvbiB0cGUobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLHMzdChm'@;
put 'LmtleSksZil9fWZ1bmN0aW9uIHMzdChsKXt2YXIgYz1mdW5jdGlvbiB1M3QobCxjKXtpZigib2JqZWN0IiE9PVprKGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigi'@;
put 'b2JqZWN0IiE9PVprKGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1aayhj'@;
put 'KT9jOlN0cmluZyhjKX1mdW5jdGlvbiBucGUobCxjKXtycGUobCxjKSxjLmFkZChsKX1mdW5jdGlvbiBjeShsLGMsYSl7cnBlKGwsYyksYy5zZXQobCxhKX1mdW5jdGlvbiBycGUobCxjKXtpZihjLmhhcyhsKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2Ft'@;
put 'ZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIHpMKGwsYyxhKXtpZighYy5oYXMobCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBhfWZ1bmN0aW9uIG8wKGws'@;
put 'Yyl7cmV0dXJuIGZ1bmN0aW9uIGMzdChsLGMpe3JldHVybiBjLmdldD9jLmdldC5jYWxsKGwpOmMudmFsdWV9KGwsaXBlKGwsYywiZ2V0IikpfWZ1bmN0aW9uIGZ5KGwsYyxhKXtyZXR1cm4gZnVuY3Rpb24gZjN0KGwsYyxhKXtpZihjLnNldCljLnNldC5jYWxsKGwsYSk7ZWxzZXtpZighYy53'@;
put 'cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7Yy52YWx1ZT1hfX0obCxpcGUobCxjLCJzZXQiKSxhKSxhfWZ1bmN0aW9uIGlwZShsLGMsYSl7aWYoIWMuaGFzKGwpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVt'@;
put 'cHRlZCB0byAiK2ErIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBjLmdldChsKX12YXIgVTQ9bmV3IFdlYWtNYXAsZXE9bmV3IFdlYWtNYXAsWWs9bmV3IFdlYWtNYXAsdHE9bmV3IFdlYWtNYXAsbnE9bmV3IFdlYWtNYXAsV2s9bmV3IFdlYWtNYXAsVUw9bmV3IFdl'@;
put 'YWtTZXQsb3BlPW5ldyBXZWFrU2V0LGQzdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGwoYyl7dmFyIGE9Yy5jb3VudFJvd3MsZj1jLmNvdW50Q29sdW1ucyxkPWMucm93c0xpbWl0LGg9Yy5jb2x1bW5zTGltaXQsbT1jLmNvdW50Q29sdW1uSGVhZGVyczsoZnVuY3Rpb24gYTN0KGwsYyl7aWYoIShs'@;
put 'IGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLGwpLG5wZSh0aGlzLG9wZSksbnBlKHRoaXMsVUwpLGN5KHRoaXMsVTQse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLGN5KHRoaXMsZXEse3dyaXRh'@;
put 'YmxlOiEwLHZhbHVlOnZvaWQgMH0pLGN5KHRoaXMsWWsse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLGN5KHRoaXMsdHEse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLGN5KHRoaXMsbnEse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLGN5KHRoaXMsV2sse3dyaXRhYmxlOiEwLHZh'@;
put 'bHVlOnZvaWQgMH0pLGZ5KHRoaXMsZXEsYSksZnkodGhpcyxZayxmKSxmeSh0aGlzLHRxLGQpLGZ5KHRoaXMsbnEsaCksZnkodGhpcyxXayxtKX1yZXR1cm4gZnVuY3Rpb24gbDN0KGwsYyxhKXtjJiZ0cGUobC5wcm90b3R5cGUsYyksYSYmdHBlKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5'@;
put 'KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGwsW3trZXk6InNldFNlbGVjdGVkUmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGEpe2Z5KHRoaXMsVTQsYSl9fSx7a2V5OiJnZXRDZWxsc1JhbmdlIix2YWx1ZTpmdW5jdGlvbigpe2lmKDA9PT1vMCh0aGlzLGVxKS5jYWxsKHRoaXMpfHwwPT09'@;
put 'bzAodGhpcyxZaykuY2FsbCh0aGlzKSlyZXR1cm4gbnVsbDt2YXIgYT1vMCh0aGlzLFU0KS5nZXRUb3BTdGFydENvcm5lcigpLGY9YS5yb3csZD1hLmNvbCxoPW8wKHRoaXMsVTQpLmdldEJvdHRvbUVuZENvcm5lcigpLG09aC5yb3csXz1oLmNvbCxPPXpMKHRoaXMsb3BlLGgzdCkuY2FsbCh0'@;
put 'aGlzLGYsbSksWD16TCh0aGlzLFVMLHJxKS5jYWxsKHRoaXMsZCxfKTtyZXR1cm57aXNSYW5nZVRyaW1tZWQ6bSE9PU98fF8hPT1YLHN0YXJ0Um93OmYsc3RhcnRDb2w6ZCxlbmRSb3c6TyxlbmRDb2w6WH19fSx7a2V5OiJnZXRNb3N0Qm90dG9tQ29sdW1uSGVhZGVyc1JhbmdlIix2YWx1ZTpm'@;
put 'dW5jdGlvbigpe2lmKDA9PT1vMCh0aGlzLFlrKS5jYWxsKHRoaXMpfHwwPT09bzAodGhpcyxXaykuY2FsbCh0aGlzKSlyZXR1cm4gbnVsbDt2YXIgZj1vMCh0aGlzLFU0KS5nZXRUb3BTdGFydENvcm5lcigpLmNvbCxoPW8wKHRoaXMsVTQpLmdldEJvdHRvbUVuZENvcm5lcigpLmNvbCxtPXpM'@;
put 'KHRoaXMsVUwscnEpLmNhbGwodGhpcyxmLGgpO3JldHVybntpc1JhbmdlVHJpbW1lZDpoIT09bSxzdGFydFJvdzotMSxzdGFydENvbDpmLGVuZFJvdzotMSxlbmRDb2w6bX19fSx7a2V5OiJnZXRBbGxDb2x1bW5IZWFkZXJzUmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoMD09PW8wKHRoaXMs'@;
put 'WWspLmNhbGwodGhpcyl8fDA9PT1vMCh0aGlzLFdrKS5jYWxsKHRoaXMpKXJldHVybiBudWxsO3ZhciBmPW8wKHRoaXMsVTQpLmdldFRvcFN0YXJ0Q29ybmVyKCkuY29sLGg9bzAodGhpcyxVNCkuZ2V0Qm90dG9tRW5kQ29ybmVyKCkuY29sLG09ekwodGhpcyxVTCxycSkuY2FsbCh0aGlzLGYs'@;
put 'aCk7cmV0dXJue2lzUmFuZ2VUcmltbWVkOmghPT1tLHN0YXJ0Um93Oi1vMCh0aGlzLFdrKS5jYWxsKHRoaXMpLHN0YXJ0Q29sOmYsZW5kUm93Oi0xLGVuZENvbDptfX19XSksbH0oKTtmdW5jdGlvbiBycShsLGMpe3JldHVybiBNYXRoLm1pbihjLE1hdGgubWF4KGwrbzAodGhpcyxucSkuY2Fs'@;
put 'bCh0aGlzKS0xLGwpKX1mdW5jdGlvbiBoM3QobCxjKXtyZXR1cm4gTWF0aC5taW4oYyxNYXRoLm1heChsK28wKHRoaXMsdHEpLmNhbGwodGhpcyktMSxsKSl9ZnVuY3Rpb24gYXBlKGwpe3ZhciBjPVtdLGE9W107cmV0dXJuIFJuKGwsZnVuY3Rpb24oZil7X28oTWF0aC5taW4oZi5zdGFydFJv'@;
put 'dyxmLmVuZFJvdyksTWF0aC5tYXgoZi5zdGFydFJvdyxmLmVuZFJvdyksZnVuY3Rpb24oTyl7LTE9PT1jLmluZGV4T2YoTykmJmMucHVzaChPKX0pLF9vKE1hdGgubWluKGYuc3RhcnRDb2wsZi5lbmRDb2wpLE1hdGgubWF4KGYuc3RhcnRDb2wsZi5lbmRDb2wpLGZ1bmN0aW9uKE8pey0xPT09'@;
put 'YS5pbmRleE9mKE8pJiZhLnB1c2goTyl9KX0pLHtyb3dzOmMsY29sdW1uczphfX1mdW5jdGlvbiBscGUobCxjKXsobnVsbD09Y3x8Yz5sLmxlbmd0aCkmJihjPWwubGVuZ3RoKTtmb3IodmFyIGE9MCxmPW5ldyBBcnJheShjKTthPGM7YSsrKWZbYV09bFthXTtyZXR1cm4gZn1mdW5jdGlvbiAk'@;
put 'NShsKXtyZXR1cm4oJDU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rv'@;
put 'cj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiBzcGUobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFs'@;
put 'dWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLGNwZShmLmtleSksZil9fWZ1bmN0aW9uIEs1KCl7cmV0dXJuIEs1PXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdC5nZXQ/UmVmbGVjdC5nZXQuYmluZCgpOmZ1bmN0aW9uKGMsYSxmKXt2YXIgZD1mdW5j'@;
put 'dGlvbiB3M3QobCxjKXtmb3IoOyFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobCxjKSYmbnVsbCE9PShsPU0zKGwpKTspO3JldHVybiBsfShjLGEpO2lmKGQpe3ZhciBoPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZCxhKTtyZXR1cm4gaC5nZXQ/aC5nZXQu'@;
put 'Y2FsbChhcmd1bWVudHMubGVuZ3RoPDM/YzpmKTpoLnZhbHVlfX0sSzUuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIGlxKGwsYyl7cmV0dXJuKGlxPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGYsZCl7cmV0dXJuIGYu'@;
put 'X19wcm90b19fPWQsZn0pKGwsYyl9ZnVuY3Rpb24gYTAobCl7aWYodm9pZCAwPT09bCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBsfWZ1bmN0aW9uIE0zKGwpe3JldHVy'@;
put 'bihNMz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihhKXtyZXR1cm4gYS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihhKX0pKGwpfWZ1bmN0aW9uIHE1KGwsYyxhKXt1cGUobCxjKSxjLnNldChsLGEpfWZ1bmN0aW9u'@;
put 'IHVwZShsLGMpe2lmKGMuaGFzKGwpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gZHkobCxjLGEpe3JldHVybihjPWNwZShjKSlpbiBsP09iamVjdC5kZWZpbmVQcm9w'@;
put 'ZXJ0eShsLGMse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpsW2NdPWEsbH1mdW5jdGlvbiBjcGUobCl7dmFyIGM9ZnVuY3Rpb24geDN0KGwsYyl7aWYoIm9iamVjdCIhPT0kNShsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wu'@;
put 'dG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT0kNShmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3Ry'@;
put 'aW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09JDUoYyk/YzpTdHJpbmcoYyl9ZnVuY3Rpb24gUDEobCxjKXtyZXR1cm4gZnVuY3Rpb24gVDN0KGwsYyl7cmV0dXJuIGMuZ2V0P2MuZ2V0LmNhbGwobCk6Yy52YWx1ZX0obCxmcGUobCxjLCJn'@;
put 'ZXQiKSl9ZnVuY3Rpb24gazMobCxjLGEpe3JldHVybiBmdW5jdGlvbiBPM3QobCxjLGEpe2lmKGMuc2V0KWMuc2V0LmNhbGwobCxhKTtlbHNle2lmKCFjLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtjLnZh'@;
put 'bHVlPWF9fShsLGZwZShsLGMsInNldCIpLGEpLGF9ZnVuY3Rpb24gZnBlKGwsYyxhKXtpZighYy5oYXMobCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrYSsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGMuZ2V0KGwpfXVvLmdldFNpbmdsZXRv'@;
put 'bigpLnJlZ2lzdGVyKCJhZnRlckNvcHlMaW1pdCIpLHVvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJtb2RpZnlDb3B5YWJsZVJhbmdlIiksdW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUN1dCIpLHVvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckN1dCIpLHVvLmdl'@;
put 'dFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVQYXN0ZSIpLHVvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclBhc3RlIiksdW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUNvcHkiKSx1by5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb3B5Iik7dmFyIFpM'@;
put 'PSJjb3B5UGFzdGUiLEkzdD1bImZyYWdtZW50U2VsZWN0aW9uIl0sZHBlPVsnPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJIYW5kc29udGFibGUiLz4nLCc8c3R5bGUgdHlwZT0idGV4dC9jc3MiPnRke3doaXRlLXNwYWNlOm5vcm1hbH1icnttc28tZGF0YS1wbGFjZW1lbnQ6c2Ft'@;
put 'ZS1jZWxsfTwvc3R5bGU+J10uam9pbigiIiksb3E9bmV3IFdlYWtNYXAsYXE9bmV3IFdlYWtNYXAsbHE9bmV3IFdlYWtNYXAsaHk9bmV3IFdlYWtNYXAsWUw9bmV3IFdlYWtNYXAsV0w9bmV3IFdlYWtNYXAscHk9bmV3IFdlYWtNYXAsaHBlPW5ldyBXZWFrU2V0LFIzdD1mdW5jdGlvbihsKXsh'@;
put 'ZnVuY3Rpb24gQzN0KGwsYyl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGMmJm51bGwhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7bC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShjJiZjLnByb3RvdHlw'@;
put 'ZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmwsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGMmJmlxKGwsYyl9KGEsbCk7dmFyIGM9ZnVuY3Rpb24gUzN0KGwpe3ZhciBjPWZ1bmN0aW9uIGszdCgp'@;
put 'e2lmKHR5cGVvZiBSZWZsZWN0PiJ1Inx8IVJlZmxlY3QuY29uc3RydWN0fHxSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNv'@;
put 'bnN0cnVjdChCb29sZWFuLFtdLGZ1bmN0aW9uKCl7fSkpLCEwfWNhdGNoe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZCxmPU0zKGwpO2lmKGMpe3ZhciBoPU0zKHRoaXMpLmNvbnN0cnVjdG9yO2Q9UmVmbGVjdC5jb25zdHJ1Y3QoZixhcmd1bWVudHMsaCl9ZWxzZSBkPWYu'@;
put 'YXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbiBNM3QobCxjKXtpZihjJiYoIm9iamVjdCI9PT0kNShjKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGMpKXJldHVybiBjO2lmKHZvaWQgMCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9u'@;
put 'bHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gYTAobCl9KHRoaXMsZCl9fShhKTtmdW5jdGlvbiBhKCl7dmFyIGY7IWZ1bmN0aW9uIGIzdChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBm'@;
put 'dW5jdGlvbiIpfSh0aGlzLGEpO2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLG09MDttPGQ7bSsrKWhbbV09YXJndW1lbnRzW21dO3JldHVybiBmdW5jdGlvbiBFM3QobCxjKXt1cGUobCxjKSxjLmFkZChsKX0oYTAoZj1jLmNhbGwuYXBwbHkoYyxbdGhpc10uY29u'@;
put 'Y2F0KGgpKSksaHBlKSxkeShhMChmKSwiY29sdW1uc0xpbWl0IiwxLzApLGR5KGEwKGYpLCJyb3dzTGltaXQiLDEvMCksZHkoYTAoZiksInBhc3RlTW9kZSIsIm92ZXJ3cml0ZSIpLGR5KGEwKGYpLCJ1aUNvbnRhaW5lciIsZi5ob3Qucm9vdERvY3VtZW50LmJvZHkpLHE1KGEwKGYpLG9xLHt3'@;
put 'cml0YWJsZTohMCx2YWx1ZTohMX0pLHE1KGEwKGYpLGFxLHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLHE1KGEwKGYpLGxxLHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLHE1KGEwKGYpLGh5LHt3cml0YWJsZTohMCx2YWx1ZToiY2VsbHMtb25seSJ9KSxxNShhMChmKSxZTCx7d3JpdGFibGU6ITAs'@;
put 'dmFsdWU6ITF9KSxxNShhMChmKSxXTCx7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSxxNShhMChmKSxweSx7d3JpdGFibGU6ITAsdmFsdWU6bmV3IGQzdCh7Y291bnRSb3dzOmZ1bmN0aW9uKCl7cmV0dXJuIGYuaG90LmNvdW50Um93cygpfSxjb3VudENvbHVtbnM6ZnVuY3Rpb24oKXtyZXR1cm4g'@;
put 'Zi5ob3QuY291bnRDb2xzKCl9LHJvd3NMaW1pdDpmdW5jdGlvbigpe3JldHVybiBmLnJvd3NMaW1pdH0sY29sdW1uc0xpbWl0OmZ1bmN0aW9uKCl7cmV0dXJuIGYuY29sdW1uc0xpbWl0fSxjb3VudENvbHVtbkhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gZi5ob3Qudmlldy5nZXRDb2x1bW5I'@;
put 'ZWFkZXJzQ291bnQoKX19KX0pLGR5KGEwKGYpLCJjb3B5YWJsZVJhbmdlcyIsW10pLGR5KGEwKGYpLCJmb2N1c2FibGVFbGVtZW50Iix2b2lkIDApLGZ9cmV0dXJuIGZ1bmN0aW9uIF8zdChsLGMsYSl7YyYmc3BlKGwucHJvdG90eXBlLGMpLGEmJnNwZShsLGEpLE9iamVjdC5kZWZpbmVQcm9w'@;
put 'ZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShhLFt7a2V5OiJpc0VuYWJsZWQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1pMXX19LHtrZXk6ImVuYWJsZVBsdWdpbiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzO2lmKCF0aGlz'@;
put 'LmVuYWJsZWQpe3ZhciBfLE8sbT10aGlzLmhvdC5nZXRTZXR0aW5ncygpW1pMXTsib2JqZWN0Ij09PSQ1KG0pJiYodGhpcy5wYXN0ZU1vZGU9bnVsbCE9PShfPW0ucGFzdGVNb2RlKSYmdm9pZCAwIT09Xz9fOnRoaXMucGFzdGVNb2RlLHRoaXMucm93c0xpbWl0PWlzTmFOKG0ucm93c0xpbWl0'@;
put 'KT90aGlzLnJvd3NMaW1pdDptLnJvd3NMaW1pdCx0aGlzLmNvbHVtbnNMaW1pdD1pc05hTihtLmNvbHVtbnNMaW1pdCk/dGhpcy5jb2x1bW5zTGltaXQ6bS5jb2x1bW5zTGltaXQsazModGhpcyxvcSwhIW0uY29weUNvbHVtbkhlYWRlcnMpLGszKHRoaXMsYXEsISFtLmNvcHlDb2x1bW5Hcm91'@;
put 'cEhlYWRlcnMpLGszKHRoaXMsbHEsISFtLmNvcHlDb2x1bW5IZWFkZXJzT25seSksdGhpcy51aUNvbnRhaW5lcj1udWxsIT09KE89bS51aUNvbnRhaW5lcikmJnZvaWQgMCE9PU8/Tzp0aGlzLnVpQ29udGFpbmVyKSx0aGlzLmFkZEhvb2soImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9u'@;
put 'cyIsZnVuY3Rpb24oWCl7cmV0dXJuIGQub25BZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMoWCl9KSx0aGlzLmFkZEhvb2soImFmdGVyT25DZWxsTW91c2VVcCIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkFmdGVyT25DZWxsTW91c2VVcCgpfSksdGhpcy5hZGRIb29rKCJhZnRlclNlbGVj'@;
put 'dGlvbkVuZCIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkFmdGVyU2VsZWN0aW9uRW5kKCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUtleURvd24iLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25CZWZvcmVLZXlEb3duKCl9KSx0aGlzLmZvY3VzYWJsZUVsZW1lbnQ9ZnVuY3Rpb24gcjN0KGwpe3ZhciBj'@;
put 'PW5ldyBKSyhsKSxhPUJMLmdldChsKTtyZXR1cm4gYT1pc05hTihhKT8wOmEsQkwuc2V0KGwsYSsxKSxjfSh0aGlzLnVpQ29udGFpbmVyKSx0aGlzLmZvY3VzYWJsZUVsZW1lbnQuYWRkTG9jYWxIb29rKCJjb3B5IixmdW5jdGlvbihYKXtyZXR1cm4gZC5vbkNvcHkoWCl9KS5hZGRMb2NhbEhv'@;
put 'b2soImN1dCIsZnVuY3Rpb24oWCl7cmV0dXJuIGQub25DdXQoWCl9KS5hZGRMb2NhbEhvb2soInBhc3RlIixmdW5jdGlvbihYKXtyZXR1cm4gZC5vblBhc3RlKFgpfSksSzUoTTMoYS5wcm90b3R5cGUpLCJlbmFibGVQbHVnaW4iLHRoaXMpLmNhbGwodGhpcyl9fX0se2tleToidXBkYXRlUGx1'@;
put 'Z2luIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksdGhpcy5nZXRPckNyZWF0ZUZvY3VzYWJsZUVsZW1lbnQoKSxLNShNMyhhLnByb3RvdHlwZSksInVwZGF0ZVBsdWdpbiIsdGhpcykuY2FsbCh0aGlzKX19LHtrZXk6ImRpc2FibGVQ'@;
put 'bHVnaW4iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5mb2N1c2FibGVFbGVtZW50JiZlcGUodGhpcy5mb2N1c2FibGVFbGVtZW50KSxLNShNMyhhLnByb3RvdHlwZSksImRpc2FibGVQbHVnaW4iLHRoaXMpLmNhbGwodGhpcyl9fSx7a2V5OiJjb3B5Iix2YWx1ZTpmdW5jdGlvbigpe2szKHRoaXMs'@;
put 'aHksYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiJjZWxscy1vbmx5IiksazModGhpcyxZTCwhMCksdGhpcy5nZXRPckNyZWF0ZUZvY3VzYWJsZUVsZW1lbnQoKSx0aGlzLmZvY3VzYWJsZUVsZW1lbnQuZm9jdXMoKSx0aGlzLmhvdC5yb290'@;
put 'RG9jdW1lbnQuZXhlY0NvbW1hbmQoImNvcHkiKX19LHtrZXk6ImNvcHlDZWxsc09ubHkiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jb3B5KCJjZWxscy1vbmx5Iil9fSx7a2V5OiJjb3B5Q29sdW1uSGVhZGVyc09ubHkiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jb3B5KCJjb2x1bW4taGVhZGVy'@;
put 'cy1vbmx5Iil9fSx7a2V5OiJjb3B5V2l0aEFsbENvbHVtbkhlYWRlcnMiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jb3B5KCJ3aXRoLWNvbHVtbi1ncm91cC1oZWFkZXJzIil9fSx7a2V5OiJjb3B5V2l0aENvbHVtbkhlYWRlcnMiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jb3B5KCJ3aXRoLWNv'@;
put 'bHVtbi1oZWFkZXJzIil9fSx7a2V5OiJjdXQiLHZhbHVlOmZ1bmN0aW9uKCl7azModGhpcyxXTCwhMCksdGhpcy5nZXRPckNyZWF0ZUZvY3VzYWJsZUVsZW1lbnQoKSx0aGlzLmZvY3VzYWJsZUVsZW1lbnQuZm9jdXMoKSx0aGlzLmhvdC5yb290RG9jdW1lbnQuZXhlY0NvbW1hbmQoImN1dCIp'@;
put 'fX0se2tleToiZ2V0UmFuZ2VkQ29weWFibGVEYXRhIix2YWx1ZTpmdW5jdGlvbihkKXtyZXR1cm4gZ2sodGhpcy5nZXRSYW5nZWREYXRhKGQpKX19LHtrZXk6ImdldFJhbmdlZERhdGEiLHZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBoPXRoaXMsbT1bXSxfPWFwZShkKSxYPV8uY29sdW1ucztyZXR1'@;
put 'cm4gUm4oXy5yb3dzLGZ1bmN0aW9uKGFlKXt2YXIgcGU9W107Um4oWCxmdW5jdGlvbihiZSl7cGUucHVzaChhZTwwP2guaG90LmdldENvbEhlYWRlcihiZSxhZSk6aC5ob3QuZ2V0Q29weWFibGVEYXRhKGFlLGJlKSl9KSxtLnB1c2gocGUpfSksbX19LHtrZXk6InBhc3RlIix2YWx1ZTpmdW5j'@;
put 'dGlvbigpe3ZhciBkPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToiIixoPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpkO2lmKGR8fGgpe3ZhciBtPW5ldyBKMnQ7ZCYmbS5jbGlwYm9h'@;
put 'cmREYXRhLnNldERhdGEoInRleHQvcGxhaW4iLGQpLGgmJm0uY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJ0ZXh0L2h0bWwiLGgpLHRoaXMuZ2V0T3JDcmVhdGVGb2N1c2FibGVFbGVtZW50KCksdGhpcy5vblBhc3RlKG0pfX19LHtrZXk6InNldENvcHlhYmxlVGV4dCIsdmFsdWU6ZnVuY3Rpb24o'@;
put 'KXt2YXIgZD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKGQpe1AxKHRoaXMscHkpLnNldFNlbGVjdGVkUmFuZ2UoZCk7dmFyIGg9bmV3IE1hcChbWyJoZWFkZXJzIixudWxsXSxbImNlbGxzIixudWxsXV0pOyJjb2x1bW4taGVhZGVycy1vbmx5Ij09PVAxKHRoaXMsaHkpP2gu'@;
put 'c2V0KCJoZWFkZXJzIixQMSh0aGlzLHB5KS5nZXRNb3N0Qm90dG9tQ29sdW1uSGVhZGVyc1JhbmdlKCkpOigid2l0aC1jb2x1bW4taGVhZGVycyI9PT1QMSh0aGlzLGh5KT9oLnNldCgiaGVhZGVycyIsUDEodGhpcyxweSkuZ2V0TW9zdEJvdHRvbUNvbHVtbkhlYWRlcnNSYW5nZSgpKToid2l0'@;
put 'aC1jb2x1bW4tZ3JvdXAtaGVhZGVycyI9PT1QMSh0aGlzLGh5KSYmaC5zZXQoImhlYWRlcnMiLFAxKHRoaXMscHkpLmdldEFsbENvbHVtbkhlYWRlcnNSYW5nZSgpKSxoLnNldCgiY2VsbHMiLFAxKHRoaXMscHkpLmdldENlbGxzUmFuZ2UoKSkpLHRoaXMuY29weWFibGVSYW5nZXM9QXJyYXku'@;
put 'ZnJvbShoLnZhbHVlcygpKS5maWx0ZXIoZnVuY3Rpb24ocGUpe3JldHVybiBudWxsIT09cGV9KS5tYXAoZnVuY3Rpb24ocGUpe3JldHVybntzdGFydFJvdzpwZS5zdGFydFJvdyxzdGFydENvbDpwZS5zdGFydENvbCxlbmRSb3c6cGUuZW5kUm93LGVuZENvbDpwZS5lbmRDb2x9fSksdGhpcy5j'@;
put 'b3B5YWJsZVJhbmdlcz10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5Q29weWFibGVSYW5nZSIsdGhpcy5jb3B5YWJsZVJhbmdlcyk7dmFyIG09aC5nZXQoImNlbGxzIik7bnVsbCE9PW0mJm0uaXNSYW5nZVRyaW1tZWQmJnRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvcHlMaW1pdCIsbS5lbmRS'@;
put 'b3ctbS5zdGFydFJvdysxLG0uZW5kQ29sLW0uc3RhcnRDb2wrMSx0aGlzLnJvd3NMaW1pdCx0aGlzLmNvbHVtbnNMaW1pdCl9fX0se2tleToiZ2V0T3JDcmVhdGVGb2N1c2FibGVFbGVtZW50Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkLGg9bnVsbD09PShkPXRoaXMuaG90LmdldEFjdGl2ZUVk'@;
put 'aXRvcigpKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5URVhUQVJFQTtoP3RoaXMuZm9jdXNhYmxlRWxlbWVudC5zZXRGb2N1c2FibGVFbGVtZW50KGgpOnRoaXMuZm9jdXNhYmxlRWxlbWVudC51c2VTZWNvbmRhcnlFbGVtZW50KCl9fSx7a2V5OiJpc0VkaXRvck9wZW5lZCIsdmFsdWU6ZnVuY3Rp'@;
put 'b24oKXt2YXIgZDtyZXR1cm4gbnVsbD09PShkPXRoaXMuaG90LmdldEFjdGl2ZUVkaXRvcigpKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5pc09wZW5lZCgpfX0se2tleToicG9wdWxhdGVWYWx1ZXMiLHZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBoPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09'@;
put 'YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKGQubGVuZ3RoKXtmb3IodmFyIG09ZC5sZW5ndGgsXz1kWzBdLmxlbmd0aCxPPVtdLFg9aC5nZXRUb3BTdGFydENvcm5lcigpLGFlPVgucm93LHBlPVguY29sLGJlPWguZ2V0Qm90dG9t'@;
put 'RW5kQ29ybmVyKCkseGU9YmUucm93LFZlPWJlLmNvbCxaZT1hZSxsdD1wZSxkdD1hZSxndD1wZTtPLmxlbmd0aDxtfHxaZTw9eGU7KXt2YXIganQ9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoWmUscGUpLFh0PWp0LnZpc3VhbFJvdztpZihaZT1YdCsxLCEwIT09anQuc2tpcFJvd09uUGFzdGUpe2R0'@;
put 'PVh0LGx0PXBlO2Zvcih2YXIgeW49W10sUW49Ty5sZW5ndGglbTt5bi5sZW5ndGg8X3x8bHQ8PVZlOyl7dmFyIE9yPXRoaXMuaG90LmdldENlbGxNZXRhKGFlLGx0KSxacj1Pci52aXN1YWxDb2w7bHQ9WnIrMSwhMCE9PU9yLnNraXBDb2x1bW5PblBhc3RlJiYoZ3Q9WnIseW4ucHVzaChkW1Fu'@;
put 'XVt5bi5sZW5ndGglX10pKX1PLnB1c2goeW4pfX1yZXR1cm4gdGhpcy5ob3QucG9wdWxhdGVGcm9tQXJyYXkoYWUscGUsTyx2b2lkIDAsdm9pZCAwLCJDb3B5UGFzdGUucGFzdGUiLHRoaXMucGFzdGVNb2RlKSxbYWUscGUsZHQsZ3RdfX19LHtrZXk6Im9uQ29weSIsdmFsdWU6ZnVuY3Rpb24o'@;
put 'ZCl7aWYoKHRoaXMuaG90LmlzTGlzdGVuaW5nKCl8fFAxKHRoaXMsWUwpKSYmIXRoaXMuaXNFZGl0b3JPcGVuZWQoKSl7dGhpcy5zZXRDb3B5YWJsZVRleHQoKSxrMyh0aGlzLFlMLCExKTt2YXIgaD10aGlzLmdldFJhbmdlZERhdGEodGhpcy5jb3B5YWJsZVJhbmdlcyksbT1mdW5jdGlvbiBB'@;
put 'M3QobCxjLGEpe2lmKCFjLmhhcyhsKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGF9KHRoaXMsaHBlLEwzdCkuY2FsbCh0aGlzLHRoaXMuY29weWFibGVSYW5nZXMpO2lmKHRoaXMuaG90LnJ1bkhv'@;
put 'b2tzKCJiZWZvcmVDb3B5IixoLHRoaXMuY29weWFibGVSYW5nZXMsbSkpe3ZhciBPPWdrKGgpO2lmKGQmJmQuY2xpcGJvYXJkRGF0YSl7dmFyIFg9elkoaCk7ZC5jbGlwYm9hcmREYXRhLnNldERhdGEoInRleHQvcGxhaW4iLE8pLGQuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJ0ZXh0L2h0bWwi'@;
put 'LFtkcGUsWF0uam9pbigiIikpfWVsc2UgdHlwZW9mIENsaXBib2FyZEV2ZW50PiJ1IiYmdGhpcy5ob3Qucm9vdFdpbmRvdy5jbGlwYm9hcmREYXRhLnNldERhdGEoIlRleHQiLE8pO3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvcHkiLGgsdGhpcy5jb3B5YWJsZVJhbmdlcyxtKX1rMyh0aGlz'@;
put 'LGh5LCJjZWxscy1vbmx5IiksZC5wcmV2ZW50RGVmYXVsdCgpfX19LHtrZXk6Im9uQ3V0Iix2YWx1ZTpmdW5jdGlvbihkKXtpZigodGhpcy5ob3QuaXNMaXN0ZW5pbmcoKXx8UDEodGhpcyxXTCkpJiYhdGhpcy5pc0VkaXRvck9wZW5lZCgpKXt0aGlzLnNldENvcHlhYmxlVGV4dCgpLGszKHRo'@;
put 'aXMsV0wsITEpO3ZhciBoPXRoaXMuZ2V0UmFuZ2VkRGF0YSh0aGlzLmNvcHlhYmxlUmFuZ2VzKTtpZih0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ3V0IixoLHRoaXMuY29weWFibGVSYW5nZXMpKXt2YXIgXz1nayhoKTtpZihkJiZkLmNsaXBib2FyZERhdGEpe3ZhciBPPXpZKGgpO2QuY2xp'@;
put 'cGJvYXJkRGF0YS5zZXREYXRhKCJ0ZXh0L3BsYWluIixfKSxkLmNsaXBib2FyZERhdGEuc2V0RGF0YSgidGV4dC9odG1sIixbZHBlLE9dLmpvaW4oIiIpKX1lbHNlIHR5cGVvZiBDbGlwYm9hcmRFdmVudD4idSImJnRoaXMuaG90LnJvb3RXaW5kb3cuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJU'@;
put 'ZXh0IixfKTt0aGlzLmhvdC5lbXB0eVNlbGVjdGVkQ2VsbHMoIkNvcHlQYXN0ZS5jdXQiKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDdXQiLGgsdGhpcy5jb3B5YWJsZVJhbmdlcyl9ZC5wcmV2ZW50RGVmYXVsdCgpfX19LHtrZXk6Im9uUGFzdGUiLHZhbHVlOmZ1bmN0aW9uKGQpe2lmKHRo'@;
put 'aXMuaG90LmlzTGlzdGVuaW5nKCkmJiF0aGlzLmlzRWRpdG9yT3BlbmVkKCkpe3ZhciBoO2lmKGQmJmQucHJldmVudERlZmF1bHQmJmQucHJldmVudERlZmF1bHQoKSxkJiZ0eXBlb2YgZC5jbGlwYm9hcmREYXRhPCJ1Iil7dmFyIG09R0koZC5jbGlwYm9hcmREYXRhLmdldERhdGEoInRleHQv'@;
put 'aHRtbCIpLHtBRERfVEFHUzpbIm1ldGEiXSxBRERfQVRUUjpbImNvbnRlbnQiXSxGT1JDRV9CT0RZOiEwfSk7aD1tJiYvKDx0YWJsZSl8KDxUQUJMRSkvZy50ZXN0KG0pP0IwZShtLHRoaXMuaG90LnJvb3REb2N1bWVudCkuZGF0YTpkLmNsaXBib2FyZERhdGEuZ2V0RGF0YSgidGV4dC9wbGFp'@;
put 'biIpfWVsc2UgdHlwZW9mIENsaXBib2FyZEV2ZW50PiJ1IiYmdHlwZW9mIHRoaXMuaG90LnJvb3RXaW5kb3cuY2xpcGJvYXJkRGF0YTwidSImJihoPXRoaXMuaG90LnJvb3RXaW5kb3cuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCJUZXh0IikpO2lmKCJzdHJpbmciPT10eXBlb2YgaCYmKGg9ZnVu'@;
put 'Y3Rpb24gWGF0KGwpe3ZhciBjPVtbIiJdXTtpZigwPT09bC5sZW5ndGgpcmV0dXJuIGM7Zm9yKHZhciBkLGE9MCxmPTA7bC5sZW5ndGg+MCYmZCE9PWwubGVuZ3RoOylpZihkPWwubGVuZ3RoLGwubWF0Y2goX2hlKSlsPWwucmVwbGFjZShfaGUsIiIpLGNbZl1bYSs9MV09IiI7ZWxzZSBpZihs'@;
put 'Lm1hdGNoKGJoZSkpbD1sLnJlcGxhY2UoYmhlLCIiKSxhPTAsY1tmKz0xXT1bIiJdO2Vsc2V7dmFyIGg9IiI7aWYobC5zdGFydHNXaXRoKCciJykpe2Zvcih2YXIgbT0wLF89ITA7Xzspe3ZhciBPPWwuc2xpY2UoMCwxKTsnIic9PT1PJiYobSs9MSksaCs9TywoMD09PShsPWwuc2xpY2UoMSkp'@;
put 'Lmxlbmd0aHx8bC5tYXRjaCgvXltcdFxyXG5dLykmJm0lMj09MCkmJihfPSExKX1oPWgucmVwbGFjZSgvXiIvLCIiKS5yZXBsYWNlKC8iJC8sIiIpLnJlcGxhY2UoL1siXSovZyxmdW5jdGlvbihhZSl7cmV0dXJuIG5ldyBBcnJheShNYXRoLmZsb29yKGFlLmxlbmd0aC8yKSkuZmlsbCgnIicp'@;
put 'LmpvaW4oIiIpfSl9ZWxzZXt2YXIgWD1sLm1hdGNoKHFhdCk7bD1sLnNsaWNlKChoPVg/WFswXToiIikubGVuZ3RoKX1jW2ZdW2FdPWh9cmV0dXJuIGN9KGgpKSwoIWh8fDAhPT1oLmxlbmd0aCkmJiExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVBhc3RlIixoLHRoaXMuY29weWFibGVS'@;
put 'YW5nZXMpKXt2YXIgWD1mdW5jdGlvbiBwM3QobCxjKXtyZXR1cm4gZnVuY3Rpb24geTN0KGwpe2lmKEFycmF5LmlzQXJyYXkobCkpcmV0dXJuIGx9KGwpfHxmdW5jdGlvbiB2M3QobCxjKXt2YXIgYT1udWxsPT1sP251bGw6dHlwZW9mIFN5bWJvbDwidSImJmxbU3ltYm9sLml0ZXJhdG9yXXx8'@;
put 'bFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPWEpe3ZhciBmLGQsaCxtLF89W10sTz0hMCxYPSExO3RyeXtpZihoPShhPWEuY2FsbChsKSkubmV4dCwwPT09Yyl7aWYoT2JqZWN0KGEpIT09YSlyZXR1cm47Tz0hMX1lbHNlIGZvcig7IShPPShmPWguY2FsbChhKSkuZG9uZSkmJihfLnB1c2goZi52'@;
put 'YWx1ZSksXy5sZW5ndGghPT1jKTtPPSEwKTt9Y2F0Y2goYWUpe1g9ITAsZD1hZX1maW5hbGx5e3RyeXtpZighTyYmbnVsbCE9YS5yZXR1cm4mJihtPWEucmV0dXJuKCksT2JqZWN0KG0pIT09bSkpcmV0dXJufWZpbmFsbHl7aWYoWCl0aHJvdyBkfX1yZXR1cm4gX319KGwsYyl8fGZ1bmN0aW9u'@;
put 'IGczdChsLGMpe2lmKGwpe2lmKCJzdHJpbmciPT10eXBlb2YgbClyZXR1cm4gbHBlKGwsYyk7dmFyIGE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGwpLnNsaWNlKDgsLTEpO2lmKCJPYmplY3QiPT09YSYmbC5jb25zdHJ1Y3RvciYmKGE9bC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFw'@;
put 'Ij09PWF8fCJTZXQiPT09YSlyZXR1cm4gQXJyYXkuZnJvbShsKTtpZigiQXJndW1lbnRzIj09PWF8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KGEpKXJldHVybiBscGUobCxjKX19KGwsYyl8fGZ1bmN0aW9uIG0zdCgpe3Rocm93IG5ldyBUeXBlRXJy'@;
put 'b3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9KHRoaXMucG9wdWxhdGVWYWx1'@;
put 'ZXMoaCksNCksYmU9WFsyXSx4ZT1YWzNdO3RoaXMuaG90LnNlbGVjdENlbGwoWFswXSxYWzFdLE1hdGgubWluKHRoaXMuaG90LmNvdW50Um93cygpLTEsYmUpLE1hdGgubWluKHRoaXMuaG90LmNvdW50Q29scygpLTEseGUpKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJQYXN0ZSIsaCx0aGlz'@;
put 'LmNvcHlhYmxlUmFuZ2VzKX19fX0se2tleToib25BZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKGQpe2QuaXRlbXMucHVzaCh7bmFtZToiLS0tLS0tLS0tIn0sZnVuY3Rpb24gTjJ0KGwpe3JldHVybntrZXk6ImNvcHkiLG5hbWU6ZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKF9HKX0sY2FsbGJhY2s6ZnVuY3Rpb24oKXtsLmNvcHlDZWxsc09ubHkoKX0sZGlzYWJsZWQ6ZnVuY3Rpb24oKXtpZigwPT09dGhpcy5jb3VudFJvd3MoKXx8MD09PXRoaXMuY291bnRDb2xzKCkpcmV0dXJuITA7dmFyIGE9dGhpcy5nZXRTZWxl'@;
put 'Y3RlZCgpO3JldHVybiFhfHxhLmxlbmd0aD4xfSxoaWRkZW46ITF9fSh0aGlzKSksUDEodGhpcyxvcSkmJmQuaXRlbXMucHVzaChmdW5jdGlvbiBqMnQobCl7cmV0dXJue2tleToiY29weV93aXRoX2NvbHVtbl9oZWFkZXJzIixuYW1lOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRTZWxlY3Rl'@;
put 'ZFJhbmdlTGFzdCgpLGY9YT9NYXRoLm1pbihhLmdldFdpZHRoKCktMSwxKTowO3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2Uod0csZil9LGNhbGxiYWNrOmZ1bmN0aW9uKCl7bC5jb3B5V2l0aENvbHVtbkhlYWRlcnMoKX0sZGlzYWJsZWQ6ZnVuY3Rpb24oKXtpZighdGhpcy5oYXND'@;
put 'b2xIZWFkZXJzKCkpcmV0dXJuITA7dmFyIGE9dGhpcy5nZXRTZWxlY3RlZCgpO3JldHVybiFhfHxhLmxlbmd0aD4xfSxoaWRkZW46ITF9fSh0aGlzKSksUDEodGhpcyxhcSkmJmQuaXRlbXMucHVzaChmdW5jdGlvbiBCMnQobCl7cmV0dXJue2tleToiY29weV93aXRoX2NvbHVtbl9ncm91cF9o'@;
put 'ZWFkZXJzIixuYW1lOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGY9YT9NYXRoLm1pbihhLmdldFdpZHRoKCktMSwxKTowO3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoQ0csZil9LGNhbGxiYWNrOmZ1bmN0aW9uKCl7bC5jb3B5V2l0aEFsbENv'@;
put 'bHVtbkhlYWRlcnMoKX0sZGlzYWJsZWQ6ZnVuY3Rpb24oKXtpZighdGhpcy5oYXNDb2xIZWFkZXJzKCl8fCF0aGlzLmdldFNldHRpbmdzKCkubmVzdGVkSGVhZGVycylyZXR1cm4hMDt2YXIgYT10aGlzLmdldFNlbGVjdGVkKCk7cmV0dXJuIWF8fGEubGVuZ3RoPjF9LGhpZGRlbjohMX19KHRo'@;
put 'aXMpKSxQMSh0aGlzLGxxKSYmZC5pdGVtcy5wdXNoKGZ1bmN0aW9uIFYydChsKXtyZXR1cm57a2V5OiJjb3B5X2NvbHVtbl9oZWFkZXJzX29ubHkiLG5hbWU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksZj1hP01hdGgubWluKGEuZ2V0V2lkdGgoKS0xLDEp'@;
put 'OjA7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShTRyxmKX0sY2FsbGJhY2s6ZnVuY3Rpb24oKXtsLmNvcHlDb2x1bW5IZWFkZXJzT25seSgpfSxkaXNhYmxlZDpmdW5jdGlvbigpe2lmKCF0aGlzLmhhc0NvbEhlYWRlcnMoKSlyZXR1cm4hMDt2YXIgYT10aGlzLmdldFNlbGVjdGVk'@;
put 'KCk7cmV0dXJuIWF8fGEubGVuZ3RoPjF9LGhpZGRlbjohMX19KHRoaXMpKSxkLml0ZW1zLnB1c2goZnVuY3Rpb24gejJ0KGwpe3JldHVybntrZXk6ImN1dCIsbmFtZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoTUcpfSxjYWxsYmFjazpmdW5jdGlvbigpe2wu'@;
put 'Y3V0KCl9LGRpc2FibGVkOmZ1bmN0aW9uKCl7aWYoMD09PXRoaXMuY291bnRSb3dzKCl8fDA9PT10aGlzLmNvdW50Q29scygpKXJldHVybiEwO3ZhciBhPXRoaXMuZ2V0U2VsZWN0ZWQoKTtyZXR1cm4hYXx8YS5sZW5ndGg+MX0saGlkZGVuOiExfX0odGhpcykpfX0se2tleToib25BZnRlck9u'@;
put 'Q2VsbE1vdXNlVXAiLHZhbHVlOmZ1bmN0aW9uKCl7IXRoaXMuaG90LmlzTGlzdGVuaW5nKCl8fHRoaXMuaXNFZGl0b3JPcGVuZWQoKXx8dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5mcmFnbWVudFNlbGVjdGlvbnx8KHRoaXMuZ2V0T3JDcmVhdGVGb2N1c2FibGVFbGVtZW50KCksdGhpcy5mb2N1'@;
put 'c2FibGVFbGVtZW50LmZvY3VzKCkpfX0se2tleToib25BZnRlclNlbGVjdGlvbkVuZCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmlzRWRpdG9yT3BlbmVkKCl8fCh0aGlzLmdldE9yQ3JlYXRlRm9jdXNhYmxlRWxlbWVudCgpLCghdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5mcmFnbWVudFNlbGVj'@;
put 'dGlvbnx8dGhpcy5mb2N1c2FibGVFbGVtZW50LmdldEZvY3VzYWJsZUVsZW1lbnQoKT09PXRoaXMuaG90LnJvb3REb2N1bWVudC5hY3RpdmVFbGVtZW50fHwhYjBlKCkpJiYodGhpcy5zZXRDb3B5YWJsZVRleHQoKSx0aGlzLmZvY3VzYWJsZUVsZW1lbnQuZm9jdXMoKSkpfX0se2tleToib25C'@;
put 'ZWZvcmVLZXlEb3duIix2YWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMuaG90LmlzTGlzdGVuaW5nKCkmJiF0aGlzLmlzRWRpdG9yT3BlbmVkKCkpe3ZhciBkPXRoaXMuaG90LnJvb3REb2N1bWVudC5hY3RpdmVFbGVtZW50LGg9dGhpcy5ob3QuZ2V0QWN0aXZlRWRpdG9yKCk7IWh8fGQhPT10aGlz'@;
put 'LmZvY3VzYWJsZUVsZW1lbnQuZ2V0Rm9jdXNhYmxlRWxlbWVudCgpJiZkIT09aC5zZWxlY3R8fCh0aGlzLmdldE9yQ3JlYXRlRm9jdXNhYmxlRWxlbWVudCgpLHRoaXMuZm9jdXNhYmxlRWxlbWVudC5mb2N1cygpKX19fSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZm9j'@;
put 'dXNhYmxlRWxlbWVudCYmKGVwZSh0aGlzLmZvY3VzYWJsZUVsZW1lbnQpLHRoaXMuZm9jdXNhYmxlRWxlbWVudD1udWxsKSxLNShNMyhhLnByb3RvdHlwZSksImRlc3Ryb3kiLHRoaXMpLmNhbGwodGhpcyl9fV0sW3trZXk6IlBMVUdJTl9LRVkiLGdldDpmdW5jdGlvbigpe3JldHVybiBaTH19'@;
put 'LHtrZXk6IlNFVFRJTkdfS0VZUyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuW1pMXS5jb25jYXQoSTN0KX19LHtrZXk6IlBMVUdJTl9QUklPUklUWSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDgwfX1dKSxhfShHYSk7ZnVuY3Rpb24gTDN0KGwpe2Zvcih2YXIgYT1hcGUobCkucm93cyxmPTAsZD0w'@;
put 'O2Q8YS5sZW5ndGgmJiEoYVtkXT49MCk7ZCsrKWYrPTE7cmV0dXJue2NvbHVtbkhlYWRlcnNDb3VudDpmfX1mdW5jdGlvbiBwcGUobCxjKXtyZXR1cm4iYm9yZGVyX3JvdyIuY29uY2F0KGwsImNvbCIpLmNvbmNhdChjKX1mdW5jdGlvbiBzcShsKXt2YXIgYyxhO3JldHVybihpbyhsLnN0YXJ0'@;
put 'KXx8aW8obC5sZWZ0KSkmJihsLnN0YXJ0PW51bGwhPT0oYz1sLnN0YXJ0KSYmdm9pZCAwIT09Yz9jOmwubGVmdCksKGlvKGwuZW5kKXx8aW8obC5yaWdodCkpJiYobC5lbmQ9bnVsbCE9PShhPWwuZW5kKSYmdm9pZCAwIT09YT9hOmwucmlnaHQpLGRlbGV0ZSBsLmxlZnQsZGVsZXRlIGwucmln'@;
put 'aHQsbH1mdW5jdGlvbiAkayhsKXtyZXR1cm4gaW8obC5zdGFydCkmJihsLmxlZnQ9bC5zdGFydCksaW8obC5lbmQpJiYobC5yaWdodD1sLmVuZCksbH1mdW5jdGlvbiB1cShsLGMpe3JldHVybntpZDpwcGUobCxjKSxib3JkZXI6e3dpZHRoOjEsY29sb3I6IiMwMDAiLGNvcm5lclZpc2libGU6'@;
put 'ITF9LHJvdzpsLGNvbDpjLHRvcDp7aGlkZTohMH0sYm90dG9tOntoaWRlOiEwfSxzdGFydDp7aGlkZTohMH0sZW5kOntoaWRlOiEwfX19ZnVuY3Rpb24geDMobCxjKXt2YXIgYT0hMTtyZXR1cm4gUm4obC5nZXRTZWxlY3RlZFJhbmdlKCksZnVuY3Rpb24oZil7Zi5mb3JBbGwoZnVuY3Rpb24o'@;
put 'ZCxoKXtpZighKGQ8MHx8aDwwKSl7dmFyIG09bC5nZXRDZWxsTWV0YShkLGgpLmJvcmRlcnM7aWYobSl7aWYoIWMpcmV0dXJuIGE9ITAsITE7aWYoIVNzKG1bY10sImhpZGUiKXx8ITE9PT1tW2NdLmhpZGUpcmV0dXJuIGE9ITAsITF9fX0pfSksYX1mdW5jdGlvbiBHTChsKXtyZXR1cm4nPHNw'@;
put 'YW4gY2xhc3M9InNlbGVjdGVkIj4nLmNvbmNhdChTdHJpbmcuZnJvbUNoYXJDb2RlKDEwMDAzKSwiPC9zcGFuPiIpLmNvbmNhdChsKX12YXIgVjN0PW5ldyBNYXAoW1sibGVmdCIsInN0YXJ0Il0sWyJyaWdodCIsImVuZCJdXSk7ZnVuY3Rpb24gajN0KGwpe3JldHVybntrZXk6ImJvcmRlcnM6'@;
put 'dG9wIixuYW1lOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHpHKTtyZXR1cm4geDModGhpcywidG9wIikmJihhPUdMKGEpKSxhfSxjYWxsYmFjazpmdW5jdGlvbihhLGYpe3ZhciBkPXgzKHRoaXMsInRvcCIpO2wucHJlcGFyZUJvcmRlcihmLCJ0b3AiLGQpfX19'@;
put 'ZnVuY3Rpb24gejN0KGwpe3ZhciBjPWwuaG90LmlzUnRsKCk/InN0YXJ0IjoiZW5kIjtyZXR1cm57a2V5OiJib3JkZXJzOnJpZ2h0IixuYW1lOmZ1bmN0aW9uKCl7dmFyIGY9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFVHKTtyZXR1cm4geDModGhpcyxjKSYmKGY9R0woZikpLGZ9LGNhbGxi'@;
put 'YWNrOmZ1bmN0aW9uKGYsZCl7dmFyIGg9eDModGhpcyxjKTtsLnByZXBhcmVCb3JkZXIoZCxjLGgpfX19ZnVuY3Rpb24gVTN0KGwpe3JldHVybntrZXk6ImJvcmRlcnM6Ym90dG9tIixuYW1lOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFpHKTtyZXR1cm4geDMo'@;
put 'dGhpcywiYm90dG9tIikmJihhPUdMKGEpKSxhfSxjYWxsYmFjazpmdW5jdGlvbihhLGYpe3ZhciBkPXgzKHRoaXMsImJvdHRvbSIpO2wucHJlcGFyZUJvcmRlcihmLCJib3R0b20iLGQpfX19ZnVuY3Rpb24gWjN0KGwpe3ZhciBjPWwuaG90LmlzUnRsKCk/ImVuZCI6InN0YXJ0IjtyZXR1cm57'@;
put 'a2V5OiJib3JkZXJzOmxlZnQiLG5hbWU6ZnVuY3Rpb24oKXt2YXIgZj10aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoWUcpO3JldHVybiB4Myh0aGlzLGMpJiYoZj1HTChmKSksZn0sY2FsbGJhY2s6ZnVuY3Rpb24oZixkKXt2YXIgaD14Myh0aGlzLGMpO2wucHJlcGFyZUJvcmRlcihkLGMsaCl9'@;
put 'fX1mdW5jdGlvbiBZM3QobCl7cmV0dXJue2tleToiYm9yZGVyczpub19ib3JkZXJzIixuYW1lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShXRyl9LGNhbGxiYWNrOmZ1bmN0aW9uKGEsZil7bC5wcmVwYXJlQm9yZGVyKGYsIm5vQm9yZGVycyIpfSxkaXNhYmxl'@;
put 'ZDpmdW5jdGlvbigpe3JldHVybiF4Myh0aGlzKX19fWZ1bmN0aW9uIG15KGwpe3JldHVybihteT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBj'@;
put 'JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIG1wZShsLGMpe3JldHVybiBmdW5jdGlvbiBLM3QobCl7aWYoQXJyYXkuaXNBcnJheShsKSlyZXR1cm4g'@;
put 'bH0obCl8fGZ1bmN0aW9uICQzdChsLGMpe3ZhciBhPW51bGw9PWw/bnVsbDp0eXBlb2YgU3ltYm9sPCJ1IiYmbFtTeW1ib2wuaXRlcmF0b3JdfHxsWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9YSl7dmFyIGYsZCxoLG0sXz1bXSxPPSEwLFg9ITE7dHJ5e2lmKGg9KGE9YS5jYWxsKGwpKS5uZXh0'@;
put 'LDA9PT1jKXtpZihPYmplY3QoYSkhPT1hKXJldHVybjtPPSExfWVsc2UgZm9yKDshKE89KGY9aC5jYWxsKGEpKS5kb25lKSYmKF8ucHVzaChmLnZhbHVlKSxfLmxlbmd0aCE9PWMpO089ITApO31jYXRjaChhZSl7WD0hMCxkPWFlfWZpbmFsbHl7dHJ5e2lmKCFPJiZudWxsIT1hLnJldHVybiYm'@;
put 'KG09YS5yZXR1cm4oKSxPYmplY3QobSkhPT1tKSlyZXR1cm59ZmluYWxseXtpZihYKXRocm93IGR9fXJldHVybiBffX0obCxjKXx8ZnVuY3Rpb24gRzN0KGwsYyl7aWYobCl7aWYoInN0cmluZyI9PXR5cGVvZiBsKXJldHVybiBncGUobCxjKTt2YXIgYT1PYmplY3QucHJvdG90eXBlLnRvU3Ry'@;
put 'aW5nLmNhbGwobCkuc2xpY2UoOCwtMSk7aWYoIk9iamVjdCI9PT1hJiZsLmNvbnN0cnVjdG9yJiYoYT1sLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09YXx8IlNldCI9PT1hKXJldHVybiBBcnJheS5mcm9tKGwpO2lmKCJBcmd1bWVudHMiPT09YXx8L14oPzpVaXxJKW50KD86OHwxNnwzMiko'@;
put 'PzpDbGFtcGVkKT9BcnJheSQvLnRlc3QoYSkpcmV0dXJuIGdwZShsLGMpfX0obCxjKXx8ZnVuY3Rpb24gVzN0KCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxl'@;
put 'LCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBncGUobCxjKXsobnVsbD09Y3x8Yz5sLmxlbmd0aCkmJihjPWwubGVuZ3RoKTtmb3IodmFyIGE9MCxmPW5ldyBBcnJheShjKTthPGM7YSsrKWZbYV09bFthXTty'@;
put 'ZXR1cm4gZn1mdW5jdGlvbiB2cGUobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShs'@;
put 'LGJwZShmLmtleSksZil9fWZ1bmN0aW9uIFg1KCl7cmV0dXJuIFg1PXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdC5nZXQ/UmVmbGVjdC5nZXQuYmluZCgpOmZ1bmN0aW9uKGMsYSxmKXt2YXIgZD1mdW5jdGlvbiBKM3QobCxjKXtmb3IoOyFPYmplY3QucHJvdG90eXBlLmhhc093blByb3Bl'@;
put 'cnR5LmNhbGwobCxjKSYmbnVsbCE9PShsPUEzKGwpKTspO3JldHVybiBsfShjLGEpO2lmKGQpe3ZhciBoPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZCxhKTtyZXR1cm4gaC5nZXQ/aC5nZXQuY2FsbChhcmd1bWVudHMubGVuZ3RoPDM/YzpmKTpoLnZhbHVlfX0sWDUuYXBwbHko'@;
put 'dGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIGNxKGwsYyl7cmV0dXJuKGNxPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGYsZCl7cmV0dXJuIGYuX19wcm90b19fPWQsZn0pKGwsYyl9ZnVuY3Rpb24geXBlKGwpe2lmKHZvaWQgMD09'@;
put 'PWwpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gbH1mdW5jdGlvbiBBMyhsKXtyZXR1cm4oQTM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVP'@;
put 'Zi5iaW5kKCk6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSl9KShsKX1mdW5jdGlvbiBicGUobCl7dmFyIGM9ZnVuY3Rpb24gaXB0KGwsYyl7aWYoIm9iamVjdCIhPT1teShsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wu'@;
put 'dG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1teShmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3Ry'@;
put 'aW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09bXkoYyk/YzpTdHJpbmcoYyl9dmFyICRMPSJjdXN0b21Cb3JkZXJzIixhcHQ9ZnVuY3Rpb24obCl7IWZ1bmN0aW9uIFEzdChsLGMpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjJiZudWxsIT09'@;
put 'Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2wucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYyYmYy5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpsLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZToh'@;
put 'MH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxjJiZjcShsLGMpfShhLGwpO3ZhciBjPWZ1bmN0aW9uIGVwdChsKXt2YXIgYz1mdW5jdGlvbiBucHQoKXtpZih0eXBlb2YgUmVmbGVjdD4idSJ8fCFSZWZsZWN0LmNvbnN0cnVjdHx8UmVmbGVj'@;
put 'dC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSxmdW5jdGlvbigpe30pKSwhMH1jYXRjaHtyZXR1cm4h'@;
put 'MX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGQsZj1BMyhsKTtpZihjKXt2YXIgaD1BMyh0aGlzKS5jb25zdHJ1Y3RvcjtkPVJlZmxlY3QuY29uc3RydWN0KGYsYXJndW1lbnRzLGgpfWVsc2UgZD1mLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24gdHB0KGwsYyl7aWYo'@;
put 'YyYmKCJvYmplY3QiPT09bXkoYyl8fCJmdW5jdGlvbiI9PXR5cGVvZiBjKSlyZXR1cm4gYztpZih2b2lkIDAhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIHlwZShsKX0odGhp'@;
put 'cyxkKX19KGEpO2Z1bmN0aW9uIGEoKXt2YXIgZjshZnVuY3Rpb24gcTN0KGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsYSk7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1u'@;
put 'ZXcgQXJyYXkoZCksbT0wO208ZDttKyspaFttXT1hcmd1bWVudHNbbV07cmV0dXJuIGZ1bmN0aW9uIHJwdChsLGMsYSl7KGM9YnBlKGMpKWluIGw/T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsYyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmxb'@;
put 'Y109YX0oeXBlKGY9Yy5jYWxsLmFwcGx5KGMsW3RoaXNdLmNvbmNhdChoKSkpLCJzYXZlZEJvcmRlcnMiLFtdKSxmfXJldHVybiBmdW5jdGlvbiBYM3QobCxjLGEpe2MmJnZwZShsLnByb3RvdHlwZSxjKSxhJiZ2cGUobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7'@;
put 'd3JpdGFibGU6ITF9KX0oYSxbe2tleToiaXNFbmFibGVkIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVskTF19fSx7a2V5OiJlbmFibGVQbHVnaW4iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpczt0aGlzLmVuYWJsZWR8fCh0aGlzLmFkZEhvb2so'@;
put 'ImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsZnVuY3Rpb24oaCl7cmV0dXJuIGQub25BZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMoaCl9KSx0aGlzLmFkZEhvb2soImluaXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25BZnRlckluaXQoKX0pLFg1KEEzKGEucHJvdG90eXBl'@;
put 'KSwiZW5hYmxlUGx1Z2luIix0aGlzKS5jYWxsKHRoaXMpKX19LHtrZXk6ImRpc2FibGVQbHVnaW4iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5oaWRlQm9yZGVycygpLFg1KEEzKGEucHJvdG90eXBlKSwiZGlzYWJsZVBsdWdpbiIsdGhpcykuY2FsbCh0aGlzKX19LHtrZXk6InVwZGF0ZVBsdWdp'@;
put 'biIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHRoaXMuY2hhbmdlQm9yZGVyU2V0dGluZ3MoKSxYNShBMyhhLnByb3RvdHlwZSksInVwZGF0ZVBsdWdpbiIsdGhpcykuY2FsbCh0aGlzKX19LHtrZXk6InNldEJvcmRlcnMiLHZhbHVl'@;
put 'OmZ1bmN0aW9uKGQsaCl7dmFyIG09dGhpcyxfPVsidG9wIiwiYm90dG9tIiwic3RhcnQiLCJlbmQiXSxPPW51bGw7aCYmKHRoaXMuY2hlY2tTZXR0aW5nc0NvaGVzaW9uKFtoXSksXz1PYmplY3Qua2V5cyhoKSxPPXNxKGgpKTt2YXIgYWU9b2soTTkoZCkpO1JuKGQsZnVuY3Rpb24ocGUpe2Zv'@;
put 'cih2YXIgeGU9bXBlKGFlKHBlKSw0KSxaZT14ZVsxXSxsdD14ZVsyXSxkdD14ZVszXSxndD1mdW5jdGlvbihYdCl7Zm9yKHZhciB5bj1mdW5jdGlvbihWcil7Um4oXyxmdW5jdGlvbihacil7bS5wcmVwYXJlQm9yZGVyRnJvbUN1c3RvbUFkZGVkKFh0LFZyLE8sZnVuY3Rpb24gQjN0KGwpe3Zh'@;
put 'ciBjO3JldHVybiBudWxsIT09KGM9VjN0LmdldChsKSkmJnZvaWQgMCE9PWM/YzpsfShacikpfSl9LFFuPVplO1FuPD1kdDtRbis9MSl5bihRbil9LGp0PXhlWzBdO2p0PD1sdDtqdCs9MSlndChqdCl9KSx0aGlzLmhvdC52aWV3LnJlbmRlcigpfX0se2tleToiZ2V0Qm9yZGVycyIsdmFsdWU6'@;
put 'ZnVuY3Rpb24oZCl7dmFyIGg9dGhpcztpZighQXJyYXkuaXNBcnJheShkKSlyZXR1cm4gdGhpcy5zYXZlZEJvcmRlcnM7dmFyIF89b2soTTkoZCkpLE89W107cmV0dXJuIFJuKGQsZnVuY3Rpb24oWCl7Zm9yKHZhciBwZT1tcGUoXyhYKSw0KSx4ZT1wZVsxXSxWZT1wZVsyXSxaZT1wZVszXSxs'@;
put 'dD1mdW5jdGlvbihqdCl7Zm9yKHZhciBybj1mdW5jdGlvbihRbil7Um4oaC5zYXZlZEJvcmRlcnMsZnVuY3Rpb24oT3Ipe09yLnJvdz09PWp0JiZPci5jb2w9PT1RbiYmTy5wdXNoKCRrKE9yKSl9KX0sWHQ9eGU7WHQ8PVplO1h0Kz0xKXJuKFh0KX0sZHQ9cGVbMF07ZHQ8PVZlO2R0Kz0xKWx0'@;
put 'KGR0KX0pLE99fSx7a2V5OiJjbGVhckJvcmRlcnMiLHZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBoPXRoaXM7ZD90aGlzLnNldEJvcmRlcnMoZCk6KFJuKHRoaXMuc2F2ZWRCb3JkZXJzLGZ1bmN0aW9uKG0pe2guY2xlYXJCb3JkZXJzRnJvbVNlbGVjdGlvblNldHRpbmdzKG0uaWQpLGguY2xlYXJO'@;
put 'dWxsQ2VsbFJhbmdlKCksaC5ob3QucmVtb3ZlQ2VsbE1ldGEobS5yb3csbS5jb2wsImJvcmRlcnMiKX0pLHRoaXMuc2F2ZWRCb3JkZXJzLmxlbmd0aD0wKX19LHtrZXk6Imluc2VydEJvcmRlckludG9TZXR0aW5ncyIsdmFsdWU6ZnVuY3Rpb24oZCxoKXt0aGlzLmNoZWNrU2F2ZWRCb3JkZXJz'@;
put 'KGQpfHx0aGlzLnNhdmVkQm9yZGVycy5wdXNoKGQpO3ZhciBfPXRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UodGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZC5yb3csZC5jb2wpKTt0aGlzLmNoZWNrQ3VzdG9tU2VsZWN0aW9ucyhkLF8saCl8fHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGln'@;
put 'aHQuYWRkQ3VzdG9tU2VsZWN0aW9uKHtib3JkZXI6ZCx2aXN1YWxDZWxsUmFuZ2U6X30pfX0se2tleToicHJlcGFyZUJvcmRlckZyb21DdXN0b21BZGRlZCIsdmFsdWU6ZnVuY3Rpb24oZCxoLG0sXyl7dmFyIE89dGhpcy5ob3QuY291bnRSb3dzKCksWD10aGlzLmhvdC5jb3VudENvbHMoKTtp'@;
put 'ZighKGQ+PU98fGg+PVgpKXt2YXIgYWU9dXEoZCxoKTttJiYoYWU9ZnVuY3Rpb24gRjN0KGwsYyl7cmV0dXJuIFNzKGMsImJvcmRlciIpJiZjLmJvcmRlciYmKGwuYm9yZGVyPWMuYm9yZGVyKSxTcyhjLCJ0b3AiKSYmaW8oYy50b3ApJiYoYy50b3A/KHBhKGMudG9wKXx8KGMudG9wPXt3aWR0'@;
put 'aDoxLGNvbG9yOiIjMDAwIn0pLGwudG9wPWMudG9wKTooYy50b3A9e2hpZGU6ITB9LGwudG9wPWMudG9wKSksU3MoYywiYm90dG9tIikmJmlvKGMuYm90dG9tKSYmKGMuYm90dG9tPyhwYShjLmJvdHRvbSl8fChjLmJvdHRvbT17d2lkdGg6MSxjb2xvcjoiIzAwMCJ9KSxsLmJvdHRvbT1jLmJv'@;
put 'dHRvbSk6KGMuYm90dG9tPXtoaWRlOiEwfSxsLmJvdHRvbT1jLmJvdHRvbSkpLFNzKGMsInN0YXJ0IikmJmlvKGMuc3RhcnQpJiYoYy5zdGFydD8ocGEoYy5zdGFydCl8fChjLnN0YXJ0PXt3aWR0aDoxLGNvbG9yOiIjMDAwIn0pLGwuc3RhcnQ9Yy5zdGFydCk6KGMuc3RhcnQ9e2hpZGU6ITB9'@;
put 'LGwuc3RhcnQ9Yy5zdGFydCkpLFNzKGMsImVuZCIpJiZpbyhjLmVuZCkmJihjLmVuZD8ocGEoYy5lbmQpfHwoYy5lbmQ9e3dpZHRoOjEsY29sb3I6IiMwMDAifSksbC5lbmQ9Yy5lbmQpOihjLmVuZD17aGlkZTohMH0sbC5lbmQ9Yy5lbmQpKSxsfShhZSxtKSxSbih0aGlzLmhvdC5zZWxlY3Rp'@;
put 'b24uaGlnaGxpZ2h0LmN1c3RvbVNlbGVjdGlvbnMsZnVuY3Rpb24ocGUpe2lmKGFlLmlkPT09cGUuc2V0dGluZ3MuaWQpcmV0dXJuIE9iamVjdC5hc3NpZ24ocGUuc2V0dGluZ3MsbSksYWUuaWQ9cGUuc2V0dGluZ3MuaWQsYWUudG9wPXBlLnNldHRpbmdzLnRvcCxhZS5ib3R0b209cGUuc2V0'@;
put 'dGluZ3MuYm90dG9tLGFlLnN0YXJ0PXBlLnNldHRpbmdzLnN0YXJ0LGFlLmVuZD1wZS5zZXR0aW5ncy5lbmQsITF9KSksdGhpcy5ob3Quc2V0Q2VsbE1ldGEoZCxoLCJib3JkZXJzIiwkayhhZSkpLHRoaXMuaW5zZXJ0Qm9yZGVySW50b1NldHRpbmdzKGFlLF8pfX19LHtrZXk6InByZXBhcmVC'@;
put 'b3JkZXJGcm9tQ3VzdG9tQWRkZWRSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZCxoKXt2YXIgbT10aGlzLF89TWF0aC5taW4oZC50by5yb3csdGhpcy5ob3QuY291bnRSb3dzKCktMSksTz1NYXRoLm1pbihkLnRvLmNvbCx0aGlzLmhvdC5jb3VudENvbHMoKS0xKTtfbyhkLmZyb20ucm93LF8sZnVu'@;
put 'Y3Rpb24oWCl7X28oZC5mcm9tLmNvbCxPLGZ1bmN0aW9uKGFlKXt2YXIgcGU9dXEoWCxhZSksYmU9MDtYPT09ZC5mcm9tLnJvdyYmU3MoaCwidG9wIikmJihiZSs9MSxwZS50b3A9aC50b3ApLFg9PT1kLnRvLnJvdyYmU3MoaCwiYm90dG9tIikmJihiZSs9MSxwZS5ib3R0b209aC5ib3R0b20p'@;
put 'LGFlPT09ZC5mcm9tLmNvbCYmU3MoaCwic3RhcnQiKSYmKGJlKz0xLHBlLnN0YXJ0PWguc3RhcnQpLGFlPT09ZC50by5jb2wmJlNzKGgsImVuZCIpJiYoYmUrPTEscGUuZW5kPWguZW5kKSxiZT4wJiYobS5ob3Quc2V0Q2VsbE1ldGEoWCxhZSwiYm9yZGVycyIsJGsocGUpKSxtLmluc2VydEJv'@;
put 'cmRlckludG9TZXR0aW5ncyhwZSkpfSl9KX19LHtrZXk6InJlbW92ZUFsbEJvcmRlcnMiLHZhbHVlOmZ1bmN0aW9uKGQsaCl7dmFyIG09cHBlKGQsaCk7dGhpcy5zcGxpY2VCb3JkZXIobSksdGhpcy5jbGVhckJvcmRlcnNGcm9tU2VsZWN0aW9uU2V0dGluZ3MobSksdGhpcy5jbGVhck51bGxD'@;
put 'ZWxsUmFuZ2UoKSx0aGlzLmhvdC5yZW1vdmVDZWxsTWV0YShkLGgsImJvcmRlcnMiKX19LHtrZXk6InNldEJvcmRlciIsdmFsdWU6ZnVuY3Rpb24oZCxoLG0sXyl7dmFyIE89dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoZCxoKS5ib3JkZXJzO089TyYmdm9pZCAwIT09Ty5ib3JkZXI/c3EoTyk6dXEo'@;
put 'ZCxoKSxfPyhPW21dPXtoaWRlOiEwfSw0PT09dGhpcy5jb3VudEhpZGUoTyk/dGhpcy5yZW1vdmVBbGxCb3JkZXJzKGQsaCk6KHRoaXMuY2hlY2tDdXN0b21TZWxlY3Rpb25zRnJvbUNvbnRleHRNZW51KE8sbSxfKXx8dGhpcy5pbnNlcnRCb3JkZXJJbnRvU2V0dGluZ3MoTyksdGhpcy5ob3Qu'@;
put 'c2V0Q2VsbE1ldGEoZCxoLCJib3JkZXJzIiwkayhPKSkpKTooT1ttXT17d2lkdGg6MSxjb2xvcjoiIzAwMCJ9LHRoaXMuY2hlY2tDdXN0b21TZWxlY3Rpb25zRnJvbUNvbnRleHRNZW51KE8sbSxfKXx8dGhpcy5pbnNlcnRCb3JkZXJJbnRvU2V0dGluZ3MoTyksdGhpcy5ob3Quc2V0Q2VsbE1l'@;
put 'dGEoZCxoLCJib3JkZXJzIiwkayhPKSkpfX0se2tleToicHJlcGFyZUJvcmRlciIsdmFsdWU6ZnVuY3Rpb24oZCxoLG0pe3ZhciBfPXRoaXM7Um4oZCxmdW5jdGlvbihPKXt2YXIgWD1PLnN0YXJ0LGFlPU8uZW5kO2lmKFgucm93PT09YWUucm93JiZYLmNvbD09PWFlLmNvbCkibm9Cb3JkZXJz'@;
put 'Ij09PWg/Xy5yZW1vdmVBbGxCb3JkZXJzKFgucm93LFguY29sKTpfLnNldEJvcmRlcihYLnJvdyxYLmNvbCxoLG0pO2Vsc2Ugc3dpdGNoKGgpe2Nhc2Uibm9Cb3JkZXJzIjpfbyhYLmNvbCxhZS5jb2wsZnVuY3Rpb24ocGUpe19vKFgucm93LGFlLnJvdyxmdW5jdGlvbihiZSl7Xy5yZW1vdmVB'@;
put 'bGxCb3JkZXJzKGJlLHBlKX0pfSk7YnJlYWs7Y2FzZSJ0b3AiOl9vKFguY29sLGFlLmNvbCxmdW5jdGlvbihwZSl7Xy5zZXRCb3JkZXIoWC5yb3cscGUsaCxtKX0pO2JyZWFrO2Nhc2UiYm90dG9tIjpfbyhYLmNvbCxhZS5jb2wsZnVuY3Rpb24ocGUpe18uc2V0Qm9yZGVyKGFlLnJvdyxwZSxo'@;
put 'LG0pfSk7YnJlYWs7Y2FzZSJzdGFydCI6X28oWC5yb3csYWUucm93LGZ1bmN0aW9uKHBlKXtfLnNldEJvcmRlcihwZSxYLmNvbCxoLG0pfSk7YnJlYWs7Y2FzZSJlbmQiOl9vKFgucm93LGFlLnJvdyxmdW5jdGlvbihwZSl7Xy5zZXRCb3JkZXIocGUsYWUuY29sLGgsbSl9KX19KX19LHtrZXk6'@;
put 'ImNyZWF0ZUN1c3RvbUJvcmRlcnMiLHZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBoPXRoaXM7Um4oZCxmdW5jdGlvbihtKXt2YXIgXz1zcShtKTttLnJhbmdlP2gucHJlcGFyZUJvcmRlckZyb21DdXN0b21BZGRlZFJhbmdlKG0ucmFuZ2UsXyk6aC5wcmVwYXJlQm9yZGVyRnJvbUN1c3RvbUFkZGVk'@;
put 'KG0ucm93LG0uY29sLF8pfSl9fSx7a2V5OiJjb3VudEhpZGUiLHZhbHVlOmZ1bmN0aW9uKGQpe3JldHVybiBQcyhbZC50b3AsZC5ib3R0b20sZC5zdGFydCxkLmVuZF0sZnVuY3Rpb24oYWUscGUpe3ZhciBiZT1hZTtyZXR1cm4gcGUmJnBlLmhpZGUmJihiZSs9MSksYmV9LDApfX0se2tleToi'@;
put 'Y2xlYXJCb3JkZXJzRnJvbVNlbGVjdGlvblNldHRpbmdzIix2YWx1ZTpmdW5jdGlvbihkKXt2YXIgaD1oYSh0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmN1c3RvbVNlbGVjdGlvbnMsZnVuY3Rpb24obSl7cmV0dXJuIG0uc2V0dGluZ3MuaWR9KS5pbmRleE9mKGQpO2g+LTEmJnRoaXMu'@;
put 'aG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9uc1toXS5jbGVhcigpfX0se2tleToiY2xlYXJOdWxsQ2VsbFJhbmdlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXM7Um4odGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zLGZ1bmN0aW9u'@;
put 'KGgsbSl7aWYobnVsbD09PWguY2VsbFJhbmdlKXJldHVybiBkLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmN1c3RvbVNlbGVjdGlvbnNbbV0uZGVzdHJveSgpLGQuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucy5zcGxpY2UobSwxKSwhMX0pfX0se2tleToiaGlkZUJv'@;
put 'cmRlcnMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcztSbih0aGlzLnNhdmVkQm9yZGVycyxmdW5jdGlvbihoKXtkLmNsZWFyQm9yZGVyc0Zyb21TZWxlY3Rpb25TZXR0aW5ncyhoLmlkKSxkLmNsZWFyTnVsbENlbGxSYW5nZSgpfSl9fSx7a2V5OiJzcGxpY2VCb3JkZXIiLHZhbHVlOmZ1'@;
put 'bmN0aW9uKGQpe3ZhciBoPWhhKHRoaXMuc2F2ZWRCb3JkZXJzLGZ1bmN0aW9uKG0pe3JldHVybiBtLmlkfSkuaW5kZXhPZihkKTtoPi0xJiZ0aGlzLnNhdmVkQm9yZGVycy5zcGxpY2UoaCwxKX19LHtrZXk6ImNoZWNrU2F2ZWRCb3JkZXJzIix2YWx1ZTpmdW5jdGlvbihkKXt2YXIgaD10aGlz'@;
put 'LG09ITE7cmV0dXJuIDQ9PT10aGlzLmNvdW50SGlkZShkKT8odGhpcy5zcGxpY2VCb3JkZXIoZC5pZCksbT0hMCk6Um4odGhpcy5zYXZlZEJvcmRlcnMsZnVuY3Rpb24oTyxYKXtpZihkLmlkPT09Ty5pZClyZXR1cm4gaC5zYXZlZEJvcmRlcnNbWF09ZCxtPSEwLCExfSksbX19LHtrZXk6ImNo'@;
put 'ZWNrQ3VzdG9tU2VsZWN0aW9uc0Zyb21Db250ZXh0TWVudSIsdmFsdWU6ZnVuY3Rpb24oZCxoLG0pe3ZhciBfPSExO3JldHVybiBSbih0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmN1c3RvbVNlbGVjdGlvbnMsZnVuY3Rpb24oTyl7aWYoZC5pZD09PU8uc2V0dGluZ3MuaWQpcmV0dXJu'@;
put 'IG1hKE8uaW5zdGFuY2VCb3JkZXJzLGZ1bmN0aW9uKFgpe1gudG9nZ2xlSGlkZGVuQ2xhc3MoaCxtKX0pLF89ITAsITF9KSxffX0se2tleToiY2hlY2tDdXN0b21TZWxlY3Rpb25zIix2YWx1ZTpmdW5jdGlvbihkLGgsbSl7dmFyIF89dGhpcy5jb3VudEhpZGUoZCksTz0hMTtyZXR1cm4gND09'@;
put 'PV8/KHRoaXMucmVtb3ZlQWxsQm9yZGVycyhkLnJvdyxkLmNvbCksTz0hMCk6Um4odGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zLGZ1bmN0aW9uKFgpe2lmKGQuaWQ9PT1YLnNldHRpbmdzLmlkKXJldHVybiBYLnZpc3VhbENlbGxSYW5nZT1oLFguY29tbWl0'@;
put 'KCksbSYmbWEoWC5pbnN0YW5jZUJvcmRlcnMsZnVuY3Rpb24oYWUpe2FlLmNoYW5nZUJvcmRlclN0eWxlKG0sZCl9KSxPPSEwLCExfSksT319LHtrZXk6ImNoYW5nZUJvcmRlclNldHRpbmdzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXMuaG90LmdldFNldHRpbmdzKClbJExdO2lmKEFy'@;
put 'cmF5LmlzQXJyYXkoZCkpe3ZhciBoPXhjKGQpO3RoaXMuY2hlY2tTZXR0aW5nc0NvaGVzaW9uKGgpLGgubGVuZ3RofHwodGhpcy5zYXZlZEJvcmRlcnM9aCksdGhpcy5jcmVhdGVDdXN0b21Cb3JkZXJzKGgpfWVsc2Ugdm9pZCAwIT09ZCYmdGhpcy5jcmVhdGVDdXN0b21Cb3JkZXJzKHRoaXMu'@;
put 'c2F2ZWRCb3JkZXJzKX19LHtrZXk6ImNoZWNrU2V0dGluZ3NDb2hlc2lvbiIsdmFsdWU6ZnVuY3Rpb24oZCl7dmFyIGg9ZnVuY3Rpb24gSDN0KGwpe3JldHVybiBsLnNvbWUoZnVuY3Rpb24oYyl7cmV0dXJuIGlvKGMubGVmdCl8fGlvKGMucmlnaHQpfSl9KGQpLG09ZnVuY3Rpb24gTjN0KGwp'@;
put 'e3JldHVybiBsLnNvbWUoZnVuY3Rpb24oYyl7cmV0dXJuIGlvKGMuc3RhcnQpfHxpbyhjLmVuZCl9KX0oZCk7aWYoaCYmbSl0aHJvdyBuZXcgRXJyb3IoJ1RoZSAibGVmdCIvInJpZ2h0IiBhbmQgInN0YXJ0Ii8iZW5kIiBvcHRpb25zIHNob3VsZCBub3QgYmUgdXNlZCB0b2dldGhlci4gUGxl'@;
put 'YXNlIHVzZSBvbmx5IHRoZSBvcHRpb24gInN0YXJ0Ii8iZW5kIi4nKTtpZih0aGlzLmhvdC5pc1J0bCgpJiZoKXRocm93IG5ldyBFcnJvcignVGhlICJsZWZ0Ii8icmlnaHQiIHByb3BlcnRpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIFJUTC4gUGxlYXNlIHVzZSBvcHRpb24gInN0YXJ0Ii8i'@;
put 'ZW5kIi4nKX19LHtrZXk6Im9uQWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIix2YWx1ZTpmdW5jdGlvbihkKXt0aGlzLmhvdC5nZXRTZXR0aW5ncygpWyRMXSYmZC5pdGVtcy5wdXNoKHtuYW1lOiItLS0tLS0tLS0ifSx7a2V5OiJib3JkZXJzIixuYW1lOmZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShqRyl9LGRpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfSxzdWJtZW51OntpdGVtczpbajN0KHRoaXMpLHozdCh0aGlzKSxVM3QodGhpcyksWjN0KHRoaXMpLFkzdCh0aGlzKV19fSl9'@;
put 'fSx7a2V5OiJvbkFmdGVySW5pdCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNoYW5nZUJvcmRlclNldHRpbmdzKCl9fSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbigpe1g1KEEzKGEucHJvdG90eXBlKSwiZGVzdHJveSIsdGhpcykuY2FsbCh0aGlzKX19XSxbe2tleToiUExVR0lOX0tF'@;
put 'WSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuICRMfX0se2tleToiUExVR0lOX1BSSU9SSVRZIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gOTB9fV0pLGF9KEdhKTtmdW5jdGlvbiBneShsKXtyZXR1cm4oZ3k9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wu'@;
put 'aXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiBf'@;
put 'cGUobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLHVwdChmLmtleSksZil9fWZ1'@;
put 'bmN0aW9uIHVwdChsKXt2YXIgYz1mdW5jdGlvbiBjcHQobCxjKXtpZigib2JqZWN0IiE9PWd5KGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PWd5'@;
put 'KGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1neShjKT9jOlN0cmluZyhj'@;
put 'KX1mdW5jdGlvbiBKNSgpe3JldHVybiBKNT10eXBlb2YgUmVmbGVjdDwidSImJlJlZmxlY3QuZ2V0P1JlZmxlY3QuZ2V0LmJpbmQoKTpmdW5jdGlvbihjLGEsZil7dmFyIGQ9ZnVuY3Rpb24gZnB0KGwsYyl7Zm9yKDshT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGwsYykm'@;
put 'Jm51bGwhPT0obD1UMyhsKSk7KTtyZXR1cm4gbH0oYyxhKTtpZihkKXt2YXIgaD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGQsYSk7cmV0dXJuIGguZ2V0P2guZ2V0LmNhbGwoYXJndW1lbnRzLmxlbmd0aDwzP2M6Zik6aC52YWx1ZX19LEo1LmFwcGx5KHRoaXMsYXJndW1lbnRz'@;
put 'KX1mdW5jdGlvbiBmcShsLGMpe3JldHVybihmcT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihmLGQpe3JldHVybiBmLl9fcHJvdG9fXz1kLGZ9KShsLGMpfWZ1bmN0aW9uIHdwZShsKXtpZih2b2lkIDA9PT1sKXRocm93IG5ldyBS'@;
put 'ZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGx9ZnVuY3Rpb24gVDMobCl7cmV0dXJuKFQzPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0'@;
put 'aW9uKGEpe3JldHVybiBhLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpfSkobCl9dmFyIENwZT0iZHJhZ1RvU2Nyb2xsIix2cHQ9ZnVuY3Rpb24obCl7IWZ1bmN0aW9uIGRwdChsLGMpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjJiZudWxsIT09Yyl0aHJvdyBuZXcgVHlwZUVy'@;
put 'cm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2wucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYyYmYy5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpsLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5l'@;
put 'UHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxjJiZmcShsLGMpfShhLGwpO3ZhciBjPWZ1bmN0aW9uIGhwdChsKXt2YXIgYz1mdW5jdGlvbiBtcHQoKXtpZih0eXBlb2YgUmVmbGVjdD4idSJ8fCFSZWZsZWN0LmNvbnN0cnVjdHx8UmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSly'@;
put 'ZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSxmdW5jdGlvbigpe30pKSwhMH1jYXRjaHtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0'@;
put 'aW9uKCl7dmFyIGQsZj1UMyhsKTtpZihjKXt2YXIgaD1UMyh0aGlzKS5jb25zdHJ1Y3RvcjtkPVJlZmxlY3QuY29uc3RydWN0KGYsYXJndW1lbnRzLGgpfWVsc2UgZD1mLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24gcHB0KGwsYyl7aWYoYyYmKCJvYmplY3QiPT09Z3ko'@;
put 'Yyl8fCJmdW5jdGlvbiI9PXR5cGVvZiBjKSlyZXR1cm4gYztpZih2b2lkIDAhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIHdwZShsKX0odGhpcyxkKX19KGEpO2Z1bmN0aW9u'@;
put 'IGEoZil7dmFyIGQ7cmV0dXJuIGZ1bmN0aW9uIGxwdChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGEpLChkPWMuY2FsbCh0aGlzLGYpKS5ldmVudE1hbmFnZXI9bmV3IGZzKHdw'@;
put 'ZShkKSksZC5ib3VuZGFyaWVzPW51bGwsZC5jYWxsYmFjaz1udWxsLGQubGlzdGVuaW5nPSExLGR9cmV0dXJuIGZ1bmN0aW9uIHNwdChsLGMsYSl7YyYmX3BlKGwucHJvdG90eXBlLGMpLGEmJl9wZShsLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZToh'@;
put 'MX0pfShhLFt7a2V5OiJpc0VuYWJsZWQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0NwZV19fSx7a2V5OiJlbmFibGVQbHVnaW4iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpczt0aGlzLmVuYWJsZWR8fCh0aGlzLmFkZEhvb2soImFmdGVyT25D'@;
put 'ZWxsTW91c2VEb3duIixmdW5jdGlvbihoKXtyZXR1cm4gZC5zZXR1cExpc3RlbmluZyhoKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJPbkNlbGxDb3JuZXJNb3VzZURvd24iLGZ1bmN0aW9uKGgpe3JldHVybiBkLnNldHVwTGlzdGVuaW5nKGgpfSksdGhpcy5yZWdpc3RlckV2ZW50cygpLEo1KFQz'@;
put 'KGEucHJvdG90eXBlKSwiZW5hYmxlUGx1Z2luIix0aGlzKS5jYWxsKHRoaXMpKX19LHtrZXk6InVwZGF0ZVBsdWdpbiIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLEo1KFQzKGEucHJvdG90eXBlKSwidXBkYXRlUGx1Z2luIix0aGlz'@;
put 'KS5jYWxsKHRoaXMpfX0se2tleToiZGlzYWJsZVBsdWdpbiIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnVucmVnaXN0ZXJFdmVudHMoKSxKNShUMyhhLnByb3RvdHlwZSksImRpc2FibGVQbHVnaW4iLHRoaXMpLmNhbGwodGhpcyl9fSx7a2V5OiJzZXRCb3VuZGFyaWVzIix2YWx1ZTpmdW5jdGlv'@;
put 'bihkKXt0aGlzLmJvdW5kYXJpZXM9ZH19LHtrZXk6InNldENhbGxiYWNrIix2YWx1ZTpmdW5jdGlvbihkKXt0aGlzLmNhbGxiYWNrPWR9fSx7a2V5OiJjaGVjayIsdmFsdWU6ZnVuY3Rpb24oZCxoKXt2YXIgbT0wLF89MDtoPHRoaXMuYm91bmRhcmllcy50b3A/Xz1oLXRoaXMuYm91bmRhcmll'@;
put 'cy50b3A6aD50aGlzLmJvdW5kYXJpZXMuYm90dG9tJiYoXz1oLXRoaXMuYm91bmRhcmllcy5ib3R0b20pLGQ8dGhpcy5ib3VuZGFyaWVzLmxlZnQ/bT1kLXRoaXMuYm91bmRhcmllcy5sZWZ0OmQ+dGhpcy5ib3VuZGFyaWVzLnJpZ2h0JiYobT1kLXRoaXMuYm91bmRhcmllcy5yaWdodCksdGhp'@;
put 'cy5jYWxsYmFjayhtLF8pfX0se2tleToibGlzdGVuIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMubGlzdGVuaW5nPSEwfX0se2tleToidW5saXN0ZW4iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5saXN0ZW5pbmc9ITF9fSx7a2V5OiJpc0xpc3RlbmluZyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4g'@;
put 'dGhpcy5saXN0ZW5pbmd9fSx7a2V5OiJyZWdpc3RlckV2ZW50cyIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGQ9dGhpcyxtPXRoaXMuaG90LnJvb3RXaW5kb3c7bTspdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihtLmRvY3VtZW50LCJjb250ZXh0bWVudSIsZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4gZC51bmxpc3RlbigpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihtLmRvY3VtZW50LCJtb3VzZXVwIixmdW5jdGlvbigpe3JldHVybiBkLnVubGlzdGVuKCl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKG0uZG9jdW1lbnQsIm1vdXNl'@;
put 'bW92ZSIsZnVuY3Rpb24oXyl7cmV0dXJuIGQub25Nb3VzZU1vdmUoXyl9KSxtPWpTKG0pfX0se2tleToidW5yZWdpc3RlckV2ZW50cyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmV2ZW50TWFuYWdlci5jbGVhcigpfX0se2tleToic2V0dXBMaXN0ZW5pbmciLHZhbHVlOmZ1bmN0aW9uKGQpe2lm'@;
put 'KCFJNChkKSl7dmFyIGg9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZS5ob2xkZXI7aCE9PXRoaXMuaG90LnJvb3RXaW5kb3cmJih0aGlzLnNldEJvdW5kYXJpZXMoaC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksdGhpcy5zZXRDYWxsYmFjayhmdW5jdGlvbihtLF8pe208MD9oLnNjcm9sbExl'@;
put 'ZnQtPTUwOm0+MCYmKGguc2Nyb2xsTGVmdCs9NTApLF88MD9oLnNjcm9sbFRvcC09MjA6Xz4wJiYoaC5zY3JvbGxUb3ArPTIwKX0pLHRoaXMubGlzdGVuKCkpfX19LHtrZXk6Im9uTW91c2VNb3ZlIix2YWx1ZTpmdW5jdGlvbihkKXt0aGlzLmlzTGlzdGVuaW5nKCkmJnRoaXMuY2hlY2soZC5j'@;
put 'bGllbnRYLGQuY2xpZW50WSl9fSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbigpe0o1KFQzKGEucHJvdG90eXBlKSwiZGVzdHJveSIsdGhpcykuY2FsbCh0aGlzKX19XSxbe2tleToiUExVR0lOX0tFWSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIENwZX19LHtrZXk6IlBMVUdJTl9QUklP'@;
put 'UklUWSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDEwMH19XSksYX0oR2EpO2Z1bmN0aW9uIHZ5KGwpe3JldHVybih2eT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9u'@;
put 'KGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIFNwZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2Fd'@;
put 'O2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsX3B0KGYua2V5KSxmKX19ZnVuY3Rpb24gX3B0KGwpe3ZhciBjPWZ1bmN0aW9uIHdwdChsLGMpe2lmKCJvYmpl'@;
put 'Y3QiIT09dnkobCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09dnkoZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2'@;
put 'ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PXZ5KGMpP2M6U3RyaW5nKGMpfWZ1bmN0aW9uIFE1KCl7cmV0dXJuIFE1PXR5cGVvZiBSZWZsZWN0PCJ1IiYm'@;
put 'UmVmbGVjdC5nZXQ/UmVmbGVjdC5nZXQuYmluZCgpOmZ1bmN0aW9uKGMsYSxmKXt2YXIgZD1mdW5jdGlvbiBDcHQobCxjKXtmb3IoOyFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobCxjKSYmbnVsbCE9PShsPU8zKGwpKTspO3JldHVybiBsfShjLGEpO2lmKGQpe3ZhciBo'@;
put 'PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZCxhKTtyZXR1cm4gaC5nZXQ/aC5nZXQuY2FsbChhcmd1bWVudHMubGVuZ3RoPDM/YzpmKTpoLnZhbHVlfX0sUTUuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIGRxKGwsYyl7cmV0dXJuKGRxPU9iamVjdC5zZXRQcm90b3R5'@;
put 'cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGYsZCl7cmV0dXJuIGYuX19wcm90b19fPWQsZn0pKGwsYyl9ZnVuY3Rpb24gTXBlKGwpe2lmKHZvaWQgMD09PWwpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0g'@;
put 'c3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gbH1mdW5jdGlvbiBPMyhsKXtyZXR1cm4oTzM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBl'@;
put 'T2YoYSl9KShsKX11by5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJEcm9wZG93bk1lbnVEZWZhdWx0T3B0aW9ucyIpLHVvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVEcm9wZG93bk1lbnVTaG93IiksdW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyRHJvcGRv'@;
put 'd25NZW51U2hvdyIpLHVvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckRyb3Bkb3duTWVudUhpZGUiKSx1by5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJEcm9wZG93bk1lbnVFeGVjdXRlIik7dmFyIGhxPSJkcm9wZG93bk1lbnUiLHBxPSJjaGFuZ2VUeXBlIixrcGU9ZnVu'@;
put 'Y3Rpb24obCl7IWZ1bmN0aW9uIFNwdChsLGMpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjJiZudWxsIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2wucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYyYm'@;
put 'Yy5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpsLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxjJiZkcShsLGMpfShhLGwpO3ZhciBjPWZ1bmN0aW9uIE1wdChsKXt2YXIgYz1mdW5j'@;
put 'dGlvbiBFcHQoKXtpZih0eXBlb2YgUmVmbGVjdD4idSJ8fCFSZWZsZWN0LmNvbnN0cnVjdHx8UmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwo'@;
put 'UmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSxmdW5jdGlvbigpe30pKSwhMH1jYXRjaHtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGQsZj1PMyhsKTtpZihjKXt2YXIgaD1PMyh0aGlzKS5jb25zdHJ1Y3RvcjtkPVJlZmxlY3QuY29uc3RydWN0KGYsYXJndW1lbnRzLGgp'@;
put 'fWVsc2UgZD1mLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24ga3B0KGwsYyl7aWYoYyYmKCJvYmplY3QiPT09dnkoYyl8fCJmdW5jdGlvbiI9PXR5cGVvZiBjKSlyZXR1cm4gYztpZih2b2lkIDAhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0'@;
put 'b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIE1wZShsKX0odGhpcyxkKX19KGEpO2Z1bmN0aW9uIGEoZil7dmFyIGQ7cmV0dXJuIGZ1bmN0aW9uIHlwdChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBj'@;
put 'YWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGEpLChkPWMuY2FsbCh0aGlzLGYpKS5ldmVudE1hbmFnZXI9bmV3IGZzKE1wZShkKSksZC5jb21tYW5kRXhlY3V0b3I9bmV3IEQzZShkLmhvdCksZC5pdGVtc0ZhY3Rvcnk9bnVsbCxkLm1lbnU9bnVsbCxkLmhvdC5hZGRIb29rKCJh'@;
put 'ZnRlckdldENvbEhlYWRlciIsZnVuY3Rpb24oaCxtKXtyZXR1cm4gZC5vbkFmdGVyR2V0Q29sSGVhZGVyKGgsbSl9KSxkfXJldHVybiBmdW5jdGlvbiBicHQobCxjLGEpe2MmJlNwZShsLnByb3RvdHlwZSxjKSxhJiZTcGUobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBl'@;
put 'Iix7d3JpdGFibGU6ITF9KX0oYSxbe2tleToiaXNFbmFibGVkIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhvdC5nZXRTZXR0aW5ncygpW2hxXX19LHtrZXk6ImVuYWJsZVBsdWdpbiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzO2lmKCF0aGlzLmVuYWJsZWQpe3RoaXMuaXRl'@;
put 'bXNGYWN0b3J5PW5ldyBOM2UodGhpcy5ob3QsYS5ERUZBVUxUX0lURU1TKTt2YXIgaD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW2hxXSxtPXtpdGVtczp0aGlzLml0ZW1zRmFjdG9yeS5nZXRJdGVtcyhoKX07dGhpcy5yZWdpc3RlckV2ZW50cygpLCJmdW5jdGlvbiI9PXR5cGVvZiBoLmNhbGxi'@;
put 'YWNrJiZ0aGlzLmNvbW1hbmRFeGVjdXRvci5zZXRDb21tb25DYWxsYmFjayhoLmNhbGxiYWNrKSxRNShPMyhhLnByb3RvdHlwZSksImVuYWJsZVBsdWdpbiIsdGhpcykuY2FsbCh0aGlzKSx0aGlzLmNhbGxPblBsdWdpbnNSZWFkeShmdW5jdGlvbigpe2QuaG90LnJ1bkhvb2tzKCJhZnRlckRy'@;
put 'b3Bkb3duTWVudURlZmF1bHRPcHRpb25zIixtKSxkLml0ZW1zRmFjdG9yeS5zZXRQcmVkZWZpbmVkSXRlbXMobS5pdGVtcyk7dmFyIF89ZC5pdGVtc0ZhY3RvcnkuZ2V0SXRlbXMoaCk7ZC5tZW51JiZkLm1lbnUuZGVzdHJveSgpLGQubWVudT1uZXcgcUsoZC5ob3Qse2NsYXNzTmFtZToiaHRE'@;
put 'cm9wZG93bk1lbnUiLGtlZXBJblZpZXdwb3J0OiEwLGNvbnRhaW5lcjpoLnVpQ29udGFpbmVyfHxkLmhvdC5yb290RG9jdW1lbnQuYm9keX0pLGQuaG90LnJ1bkhvb2tzKCJiZWZvcmVEcm9wZG93bk1lbnVTZXRJdGVtcyIsXyksZC5tZW51LnNldE1lbnVJdGVtcyhfKSxkLm1lbnUuYWRkTG9j'@;
put 'YWxIb29rKCJiZWZvcmVPcGVuIixmdW5jdGlvbigpe3JldHVybiBkLm9uTWVudUJlZm9yZU9wZW4oKX0pLGQubWVudS5hZGRMb2NhbEhvb2soImFmdGVyT3BlbiIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbk1lbnVBZnRlck9wZW4oKX0pLGQubWVudS5hZGRMb2NhbEhvb2soImFmdGVyQ2xvc2Ui'@;
put 'LGZ1bmN0aW9uKCl7cmV0dXJuIGQub25NZW51QWZ0ZXJDbG9zZSgpfSksZC5tZW51LmFkZExvY2FsSG9vaygiZXhlY3V0ZUNvbW1hbmQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBPLFg9YXJndW1lbnRzLmxlbmd0aCxhZT1uZXcgQXJyYXkoWCkscGU9MDtwZTxYO3BlKyspYWVbcGVdPWFyZ3VtZW50'@;
put 'c1twZV07cmV0dXJuKE89ZC5leGVjdXRlQ29tbWFuZCkuY2FsbC5hcHBseShPLFtkXS5jb25jYXQoYWUpKX0pLFJuKF8sZnVuY3Rpb24oTyl7cmV0dXJuIGQuY29tbWFuZEV4ZWN1dG9yLnJlZ2lzdGVyQ29tbWFuZChPLmtleSxPKX0pfSl9fX0se2tleToidXBkYXRlUGx1Z2luIix2YWx1ZTpm'@;
put 'dW5jdGlvbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksUTUoTzMoYS5wcm90b3R5cGUpLCJ1cGRhdGVQbHVnaW4iLHRoaXMpLmNhbGwodGhpcyl9fSx7a2V5OiJkaXNhYmxlUGx1Z2luIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY2xvc2UoKSx0aGlzLm1lbnUm'@;
put 'JnRoaXMubWVudS5kZXN0cm95KCksUTUoTzMoYS5wcm90b3R5cGUpLCJkaXNhYmxlUGx1Z2luIix0aGlzKS5jYWxsKHRoaXMpfX0se2tleToicmVnaXN0ZXJFdmVudHMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpczt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMu'@;
put 'aG90LnJvb3RFbGVtZW50LCJjbGljayIsZnVuY3Rpb24oaCl7cmV0dXJuIGQub25UYWJsZUNsaWNrKGgpfSl9fSx7a2V5OiJvcGVuIix2YWx1ZTpmdW5jdGlvbihkKXt0aGlzLm1lbnUmJih0aGlzLm1lbnUub3BlbigpLGQud2lkdGgmJnRoaXMubWVudS5zZXRPZmZzZXQoImxlZnQiLGQud2lk'@;
put 'dGgpLHRoaXMubWVudS5zZXRQb3NpdGlvbihkKSl9fSx7a2V5OiJjbG9zZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLm1lbnUmJnRoaXMubWVudS5jbG9zZSgpfX0se2tleToiZXhlY3V0ZUNvbW1hbmQiLHZhbHVlOmZ1bmN0aW9uKGQpe2Zvcih2YXIgaCxtPWFyZ3VtZW50cy5sZW5ndGgsXz1u'@;
put 'ZXcgQXJyYXkobT4xP20tMTowKSxPPTE7TzxtO08rKylfW08tMV09YXJndW1lbnRzW09dOyhoPXRoaXMuY29tbWFuZEV4ZWN1dG9yKS5leGVjdXRlLmFwcGx5KGgsW2RdLmNvbmNhdChfKSl9fSx7a2V5OiJzZXRMaXN0ZW5pbmciLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9IShhcmd1bWVudHMu'@;
put 'bGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXTt0aGlzLm1lbnUuaXNPcGVuZWQoKSYmKGQ/dGhpcy5tZW51LmhvdE1lbnUubGlzdGVuKCk6dGhpcy5tZW51LmhvdE1lbnUudW5saXN0ZW4oKSl9fSx7a2V5OiJvblRhYmxlQ2xpY2siLHZhbHVlOmZ1bmN0aW9u'@;
put 'KGQpe2lmKGQuc3RvcFByb3BhZ2F0aW9uKCksWW8oZC50YXJnZXQscHEpJiYhdGhpcy5tZW51LmlzT3BlbmVkKCkpe3ZhciBoPTAsbT0wO2lmKHRoaXMuaG90LnJvb3REb2N1bWVudCE9PXRoaXMubWVudS5jb250YWluZXIub3duZXJEb2N1bWVudCl7dmFyIE89dGhpcy5ob3Qucm9vdFdpbmRv'@;
put 'dy5mcmFtZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aD1PLnRvcCxtPU8ubGVmdH12YXIgcGU9ZC50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5vcGVuKHtsZWZ0OnBlLmxlZnQrbSx0b3A6cGUudG9wK2QudGFyZ2V0Lm9mZnNldEhlaWdodCszK2gsd2lkdGg6'@;
put 'cGUud2lkdGgsaGVpZ2h0OnBlLmhlaWdodH0pfX19LHtrZXk6Im9uQWZ0ZXJHZXRDb2xIZWFkZXIiLHZhbHVlOmZ1bmN0aW9uKGQsaCl7dmFyIG09aC5wYXJlbnROb2RlO2lmKG0pe3ZhciBfPW0ucGFyZW50Tm9kZS5jaGlsZE5vZGVzLE89QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChf'@;
put 'LG0pO2lmKCEoZDwwfHxPIT09Xy5sZW5ndGgtMSkpe3ZhciBYPWgucXVlcnlTZWxlY3RvcigiLiIuY29uY2F0KHBxKSk7aWYoIXRoaXMuZW5hYmxlZHx8IVgpe2lmKCF0aGlzLmVuYWJsZWQpcmV0dXJuIHZvaWQoWCYmWC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKFgpKTt2YXIgYWU9dGhpcy5o'@;
put 'b3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpO2FlLmNsYXNzTmFtZT1wcSxhZS50eXBlPSJidXR0b24iLGFlLm9uY2xpY2s9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5maXJzdENoaWxkLmluc2VydEJlZm9yZShhZSxoLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZCl9fX19fSx7'@;
put 'a2V5OiJvbk1lbnVCZWZvcmVPcGVuIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVEcm9wZG93bk1lbnVTaG93Iix0aGlzKX19LHtrZXk6Im9uTWVudUFmdGVyT3BlbiIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJEcm9wZG93bk1l'@;
put 'bnVTaG93Iix0aGlzKX19LHtrZXk6Im9uTWVudUFmdGVyQ2xvc2UiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5ob3QubGlzdGVuKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyRHJvcGRvd25NZW51SGlkZSIsdGhpcyl9fSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY2xv'@;
put 'c2UoKSx0aGlzLm1lbnUmJnRoaXMubWVudS5kZXN0cm95KCksUTUoTzMoYS5wcm90b3R5cGUpLCJkZXN0cm95Iix0aGlzKS5jYWxsKHRoaXMpfX1dLFt7a2V5OiJQTFVHSU5fS0VZIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaHF9fSx7a2V5OiJQTFVHSU5fUFJJT1JJVFkiLGdldDpmdW5jdGlv'@;
put 'bigpe3JldHVybiAyMzB9fSx7a2V5OiJQTFVHSU5fREVQUyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuWyJwbHVnaW46QXV0b0NvbHVtblNpemUiXX19LHtrZXk6IkRFRkFVTFRfSVRFTVMiLGdldDpmdW5jdGlvbigpe3JldHVybltJayxSayxiYSxQayxiYSxSTCxiYSxMayxiYSxWZl19fV0pLGF9'@;
put 'KEdhKTtmdW5jdGlvbiBLayhsKXtyZXR1cm4oS2s9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJv'@;
put 'bCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiBFcGUobCxjKXsobnVsbD09Y3x8Yz5sLmxlbmd0aCkmJihjPWwubGVuZ3RoKTtmb3IodmFyIGE9MCxmPW5ldyBBcnJheShjKTthPGM7YSsrKWZbYV09'@;
put 'bFthXTtyZXR1cm4gZn1mdW5jdGlvbiB4cGUobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9w'@;
put 'ZXJ0eShsLFBwdChmLmtleSksZil9fWZ1bmN0aW9uIFBwdChsKXt2YXIgYz1mdW5jdGlvbiBGcHQobCxjKXtpZigib2JqZWN0IiE9PUtrKGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRl'@;
put 'ZmF1bHQiKTtpZigib2JqZWN0IiE9PUtrKGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5'@;
put 'bWJvbCI9PT1LayhjKT9jOlN0cmluZyhjKX1rcGUuU0VQQVJBVE9SPXtuYW1lOmJhfTt2YXIgSHB0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbChjKXsoZnVuY3Rpb24gUnB0KGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBh'@;
put 'cyBhIGZ1bmN0aW9uIil9KSh0aGlzLGwpLHRoaXMuaG90PWMsdGhpcy5vcHRpb25zPXt9fXJldHVybiBmdW5jdGlvbiBMcHQobCxjLGEpe2MmJnhwZShsLnByb3RvdHlwZSxjKSxhJiZ4cGUobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0o'@;
put 'bCxbe2tleToic2V0T3B0aW9ucyIsdmFsdWU6ZnVuY3Rpb24oYSl7dGhpcy5vcHRpb25zPWF9fSx7a2V5OiJnZXREYXRhIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMsZj10aGlzLl9nZXREYXRhUmFuZ2UoKSxoPWYuc3RhcnRDb2wsXz1mLmVuZENvbCxPPXRoaXMub3B0aW9ucyxYPVtd'@;
put 'O3JldHVybiBfbyhmLnN0YXJ0Um93LGYuZW5kUm93LGZ1bmN0aW9uKGFlKXt2YXIgcGU9W107IU8uZXhwb3J0SGlkZGVuUm93cyYmYS5faXNIaWRkZW5Sb3coYWUpfHwoX28oaCxfLGZ1bmN0aW9uKGJlKXshTy5leHBvcnRIaWRkZW5Db2x1bW5zJiZhLl9pc0hpZGRlbkNvbHVtbihiZSl8fHBl'@;
put 'LnB1c2goYS5ob3QuZ2V0RGF0YUF0Q2VsbChhZSxiZSkpfSksWC5wdXNoKHBlKSl9KSxYfX0se2tleToiZ2V0Um93SGVhZGVycyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGY9W107aWYodGhpcy5vcHRpb25zLnJvd0hlYWRlcnMpe3ZhciBkPXRoaXMuX2dldERhdGFSYW5nZSgpLGg9'@;
put 'ZC5zdGFydFJvdyxtPWQuZW5kUm93LF89dGhpcy5ob3QuZ2V0Um93SGVhZGVyKCk7X28oaCxtLGZ1bmN0aW9uKE8peyFhLm9wdGlvbnMuZXhwb3J0SGlkZGVuUm93cyYmYS5faXNIaWRkZW5Sb3coTyl8fGYucHVzaChfW09dKX0pfXJldHVybiBmfX0se2tleToiZ2V0Q29sdW1uSGVhZGVycyIs'@;
put 'dmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGY9W107aWYodGhpcy5vcHRpb25zLmNvbHVtbkhlYWRlcnMpe3ZhciBkPXRoaXMuX2dldERhdGFSYW5nZSgpLGg9ZC5zdGFydENvbCxtPWQuZW5kQ29sLF89dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKCk7X28oaCxtLGZ1bmN0aW9uKE8peyFhLm9w'@;
put 'dGlvbnMuZXhwb3J0SGlkZGVuQ29sdW1ucyYmYS5faXNIaWRkZW5Db2x1bW4oTyl8fGYucHVzaChfW09dKX0pfXJldHVybiBmfX0se2tleToiX2dldERhdGFSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmhvdC5jb3VudENvbHMoKS0xLGY9dGhpcy5ob3QuY291bnRSb3dzKCkt'@;
put 'MSxkPWZ1bmN0aW9uIEFwdChsLGMpe3JldHVybiBmdW5jdGlvbiBJcHQobCl7aWYoQXJyYXkuaXNBcnJheShsKSlyZXR1cm4gbH0obCl8fGZ1bmN0aW9uIERwdChsLGMpe3ZhciBhPW51bGw9PWw/bnVsbDp0eXBlb2YgU3ltYm9sPCJ1IiYmbFtTeW1ib2wuaXRlcmF0b3JdfHxsWyJAQGl0ZXJh'@;
put 'dG9yIl07aWYobnVsbCE9YSl7dmFyIGYsZCxoLG0sXz1bXSxPPSEwLFg9ITE7dHJ5e2lmKGg9KGE9YS5jYWxsKGwpKS5uZXh0LDA9PT1jKXtpZihPYmplY3QoYSkhPT1hKXJldHVybjtPPSExfWVsc2UgZm9yKDshKE89KGY9aC5jYWxsKGEpKS5kb25lKSYmKF8ucHVzaChmLnZhbHVlKSxfLmxl'@;
put 'bmd0aCE9PWMpO089ITApO31jYXRjaChhZSl7WD0hMCxkPWFlfWZpbmFsbHl7dHJ5e2lmKCFPJiZudWxsIT1hLnJldHVybiYmKG09YS5yZXR1cm4oKSxPYmplY3QobSkhPT1tKSlyZXR1cm59ZmluYWxseXtpZihYKXRocm93IGR9fXJldHVybiBffX0obCxjKXx8ZnVuY3Rpb24gT3B0KGwsYyl7'@;
put 'aWYobCl7aWYoInN0cmluZyI9PXR5cGVvZiBsKXJldHVybiBFcGUobCxjKTt2YXIgYT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobCkuc2xpY2UoOCwtMSk7aWYoIk9iamVjdCI9PT1hJiZsLmNvbnN0cnVjdG9yJiYoYT1sLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09YXx8IlNl'@;
put 'dCI9PT1hKXJldHVybiBBcnJheS5mcm9tKGwpO2lmKCJBcmd1bWVudHMiPT09YXx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QoYSkpcmV0dXJuIEVwZShsLGMpfX0obCxjKXx8ZnVuY3Rpb24gVHB0KCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxp'@;
put 'ZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX0odGhpcy5vcHRpb25zLnJhbmdlLDQpLGg9ZFsw'@;
put 'XSxtPXZvaWQgMD09PWg/MDpoLF89ZFsxXSxPPXZvaWQgMD09PV8/MDpfLFg9ZFsyXSxhZT12b2lkIDA9PT1YP2Y6WCxwZT1kWzNdLGJlPXZvaWQgMD09PXBlP2E6cGU7cmV0dXJue3N0YXJ0Um93Om09TWF0aC5tYXgobSwwKSxzdGFydENvbDpPPU1hdGgubWF4KE8sMCksZW5kUm93OmFlPU1h'@;
put 'dGgubWluKGFlLGYpLGVuZENvbDpiZT1NYXRoLm1pbihiZSxhKX19fSx7a2V5OiJfaXNIaWRkZW5Sb3ciLHZhbHVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5pc0hpZGRlbih0aGlzLmhvdC50b1BoeXNpY2FsUm93KGEpKX19LHtrZXk6Il9pc0hpZGRlbkNv'@;
put 'bHVtbiIsdmFsdWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmlzSGlkZGVuKHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oYSkpfX1dKSxsfSgpO2NvbnN0IE5wdD1IcHQ7ZnVuY3Rpb24gcWsobCl7cmV0dXJuKHFrPSJmdW5jdGlvbiI9PXR5cGVvZiBT'@;
put 'eW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJz'@;
put 'eW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gQXBlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVm'@;
put 'aW5lUHJvcGVydHkobCxqcHQoZi5rZXkpLGYpfX1mdW5jdGlvbiBqcHQobCl7dmFyIGM9ZnVuY3Rpb24genB0KGwsYyl7aWYoIm9iamVjdCIhPT1xayhsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChs'@;
put 'LGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1xayhmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3Jl'@;
put 'dHVybiJzeW1ib2wiPT09cWsoYyk/YzpTdHJpbmcoYyl9dmFyIFVwdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGwoYyxhKXsoZnVuY3Rpb24gVnB0KGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9'@;
put 'KSh0aGlzLGwpLHRoaXMuZGF0YVByb3ZpZGVyPWMsdGhpcy5vcHRpb25zPXRoaXMuX21lcmdlT3B0aW9ucyhhKSx0aGlzLmRhdGFQcm92aWRlci5zZXRPcHRpb25zKHRoaXMub3B0aW9ucyl9cmV0dXJuIGZ1bmN0aW9uIEJwdChsLGMsYSl7YyYmQXBlKGwucHJvdG90eXBlLGMpLGEmJkFwZShs'@;
put 'LGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShsLFt7a2V5OiJfbWVyZ2VPcHRpb25zIix2YWx1ZTpmdW5jdGlvbihhKXt2YXIgZj1lMCh0aGlzLmNvbnN0cnVjdG9yLkRFRkFVTFRfT1BUSU9OUyksZD1uZXcgRGF0ZTtyZXR1cm4gZj1ydShl'@;
put 'MChsLkRFRkFVTFRfT1BUSU9OUyksZiksKGY9cnUoZixhKSkuZmlsZW5hbWU9dlkoZi5maWxlbmFtZSx7WVlZWTpkLmdldEZ1bGxZZWFyKCksTU06IiIuY29uY2F0KGQuZ2V0TW9udGgoKSsxKS5wYWRTdGFydCgyLCIwIiksREQ6IiIuY29uY2F0KGQuZ2V0RGF0ZSgpKS5wYWRTdGFydCgyLCIw'@;
put 'Iil9KSxmfX1dLFt7a2V5OiJERUZBVUxUX09QVElPTlMiLGdldDpmdW5jdGlvbigpe3JldHVybnttaW1lVHlwZToidGV4dC9wbGFpbiIsZmlsZUV4dGVuc2lvbjoidHh0IixmaWxlbmFtZToiSGFuZHNvbnRhYmxlIFtZWVlZXS1bTU1dLVtERF0iLGVuY29kaW5nOiJ1dGYtOCIsYm9tOiExLGNv'@;
put 'bHVtbkhlYWRlcnM6ITEscm93SGVhZGVyczohMSxleHBvcnRIaWRkZW5Db2x1bW5zOiExLGV4cG9ydEhpZGRlblJvd3M6ITEscmFuZ2U6W119fX1dKSxsfSgpO2NvbnN0IFpwdD1VcHQ7ZnVuY3Rpb24geXkobCl7cmV0dXJuKHl5PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wi'@;
put 'PT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBj'@;
put 'fSkobCl9ZnVuY3Rpb24gVHBlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxH'@;
put 'cHQoZi5rZXkpLGYpfX1mdW5jdGlvbiBHcHQobCl7dmFyIGM9ZnVuY3Rpb24gJHB0KGwsYyl7aWYoIm9iamVjdCIhPT15eShsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7'@;
put 'aWYoIm9iamVjdCIhPT15eShmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09'@;
put 'eXkoYyk/YzpTdHJpbmcoYyl9ZnVuY3Rpb24gbXEobCxjKXtyZXR1cm4obXE9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZixkKXtyZXR1cm4gZi5fX3Byb3RvX189ZCxmfSkobCxjKX1mdW5jdGlvbiBLTChsKXtyZXR1cm4oS0w9'@;
put 'T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSl9KShsKX12YXIgZTR0PVN0cmluZy5mcm9tQ2hhckNvZGUoMTMpLHQ0dD1TdHJpbmcuZnJvbUNoYXJD'@;
put 'b2RlKDM0KSxuNHQ9U3RyaW5nLmZyb21DaGFyQ29kZSgxMCkscjR0PWZ1bmN0aW9uKGwpeyFmdW5jdGlvbiBLcHQobCxjKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyYmbnVsbCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9y'@;
put 'IGEgZnVuY3Rpb24iKTtsLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGMmJmMucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6bCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksYyYmbXEo'@;
put 'bCxjKX0oYSxsKTt2YXIgYz1mdW5jdGlvbiBxcHQobCl7dmFyIGM9ZnVuY3Rpb24gUXB0KCl7aWYodHlwZW9mIFJlZmxlY3Q+InUifHwhUmVmbGVjdC5jb25zdHJ1Y3R8fFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEw'@;
put 'O3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sZnVuY3Rpb24oKXt9KSksITB9Y2F0Y2h7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciBkLGY9S0wobCk7aWYoYyl7dmFyIGg9S0wodGhpcykuY29u'@;
put 'c3RydWN0b3I7ZD1SZWZsZWN0LmNvbnN0cnVjdChmLGFyZ3VtZW50cyxoKX1lbHNlIGQ9Zi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uIFhwdChsLGMpe2lmKGMmJigib2JqZWN0Ij09PXl5KGMpfHwiZnVuY3Rpb24iPT10eXBlb2YgYykpcmV0dXJuIGM7aWYodm9pZCAw'@;
put 'IT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbiBKcHQobCl7aWYodm9pZCAwPT09bCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4g'@;
put 'aW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBsfShsKX0odGhpcyxkKX19KGEpO2Z1bmN0aW9uIGEoKXtyZXR1cm4gZnVuY3Rpb24gWXB0KGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBj'@;
put 'bGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsYSksYy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIGZ1bmN0aW9uIFdwdChsLGMsYSl7YyYmVHBlKGwucHJvdG90eXBlLGMpLGEmJlRwZShsLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0p'@;
put 'fShhLFt7a2V5OiJleHBvcnQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcyxoPXRoaXMub3B0aW9ucyxtPXRoaXMuZGF0YVByb3ZpZGVyLmdldERhdGEoKSxfPXRoaXMuZGF0YVByb3ZpZGVyLmdldENvbHVtbkhlYWRlcnMoKSxPPV8ubGVuZ3RoPjAsWD10aGlzLmRhdGFQcm92aWRlci5n'@;
put 'ZXRSb3dIZWFkZXJzKCksYWU9WC5sZW5ndGg+MCxwZT1oLmJvbT9TdHJpbmcuZnJvbUNoYXJDb2RlKDY1Mjc5KToiIjtyZXR1cm4gTyYmKF89aGEoXyxmdW5jdGlvbihiZSl7cmV0dXJuIGQuX2VzY2FwZUNlbGwoYmUsITApfSksYWUmJihwZSs9aC5jb2x1bW5EZWxpbWl0ZXIpLHBlKz1fLmpv'@;
put 'aW4oaC5jb2x1bW5EZWxpbWl0ZXIpLHBlKz1oLnJvd0RlbGltaXRlciksUm4obSxmdW5jdGlvbihiZSx4ZSl7eGU+MCYmKHBlKz1oLnJvd0RlbGltaXRlciksYWUmJihwZSs9ZC5fZXNjYXBlQ2VsbChYW3hlXSkraC5jb2x1bW5EZWxpbWl0ZXIpLHBlKz1iZS5tYXAoZnVuY3Rpb24oVmUpe3Jl'@;
put 'dHVybiBkLl9lc2NhcGVDZWxsKFZlKX0pLmpvaW4oaC5jb2x1bW5EZWxpbWl0ZXIpfSkscGV9fSx7a2V5OiJfZXNjYXBlQ2VsbCIsdmFsdWU6ZnVuY3Rpb24oZCl7dmFyIGg9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSxtPU1zKGQpO3Jl'@;
put 'dHVybiIiIT09bSYmKGh8fG0uaW5kZXhPZihlNHQpPj0wfHxtLmluZGV4T2YodDR0KT49MHx8bS5pbmRleE9mKG40dCk+PTB8fG0uaW5kZXhPZih0aGlzLm9wdGlvbnMuY29sdW1uRGVsaW1pdGVyKT49MCkmJihtPW0ucmVwbGFjZShuZXcgUmVnRXhwKCciJywiZyIpLCciIicpLG09JyInLmNv'@;
put 'bmNhdChtLCciJykpLG19fV0sW3trZXk6IkRFRkFVTFRfT1BUSU9OUyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJue21pbWVUeXBlOiJ0ZXh0L2NzdiIsZmlsZUV4dGVuc2lvbjoiY3N2Iixib206ITAsY29sdW1uRGVsaW1pdGVyOiIsIixyb3dEZWxpbWl0ZXI6IlxyXG4ifX19XSksYX0oWnB0KTtm'@;
put 'dW5jdGlvbiBYayhsKXtyZXR1cm4oWGs9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5j'@;
put 'b25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX12YXIgZ3E9ZnVuY3Rpb24gbzR0KGwsYyxhKXtyZXR1cm4gYz1mdW5jdGlvbiBhNHQobCl7dmFyIGM9ZnVuY3Rpb24gbDR0KGwsYyl7aWYoIm9iamVjdCIhPT1YayhsKXx8bnVs'@;
put 'bD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1YayhmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEg'@;
put 'cHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09WGsoYyk/YzpTdHJpbmcoYyl9KGMpLGMgaW4gbD9PYmplY3QuZGVmaW5lUHJvcGVydHkobCxjLHt2YWx1ZTphLGVudW1lcmFibGU6ITAs'@;
put 'Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6bFtjXT1hLGx9KHt9LCJjc3YiLHI0dCk7ZnVuY3Rpb24gYnkobCl7cmV0dXJuKGJ5PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2Yg'@;
put 'Y306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gT3BlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKysp'@;
put 'e3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxkNHQoZi5rZXkpLGYpfX1mdW5jdGlvbiBkNHQobCl7dmFyIGM9ZnVuY3Rpb24gaDR0KGws'@;
put 'Yyl7aWYoIm9iamVjdCIhPT1ieShsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1ieShmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJA'@;
put 'QHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09YnkoYyk/YzpTdHJpbmcoYyl9ZnVuY3Rpb24gdnEobCxjKXtyZXR1cm4odnE9T2JqZWN0'@;
put 'LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZixkKXtyZXR1cm4gZi5fX3Byb3RvX189ZCxmfSkobCxjKX1mdW5jdGlvbiBxTChsKXtyZXR1cm4ocUw9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6'@;
put 'ZnVuY3Rpb24oYSl7cmV0dXJuIGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSl9KShsKX12YXIgdzR0PWZ1bmN0aW9uKGwpeyFmdW5jdGlvbiBwNHQobCxjKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyYmbnVsbCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhw'@;
put 'cmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtsLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGMmJmMucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6bCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInBy'@;
put 'b3RvdHlwZSIse3dyaXRhYmxlOiExfSksYyYmdnEobCxjKX0oYSxsKTt2YXIgYz1mdW5jdGlvbiBtNHQobCl7dmFyIGM9ZnVuY3Rpb24geTR0KCl7aWYodHlwZW9mIFJlZmxlY3Q+InUifHwhUmVmbGVjdC5jb25zdHJ1Y3R8fFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1'@;
put 'bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sZnVuY3Rpb24oKXt9KSksITB9Y2F0Y2h7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciBkLGY9'@;
put 'cUwobCk7aWYoYyl7dmFyIGg9cUwodGhpcykuY29uc3RydWN0b3I7ZD1SZWZsZWN0LmNvbnN0cnVjdChmLGFyZ3VtZW50cyxoKX1lbHNlIGQ9Zi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uIGc0dChsLGMpe2lmKGMmJigib2JqZWN0Ij09PWJ5KGMpfHwiZnVuY3Rpb24i'@;
put 'PT10eXBlb2YgYykpcmV0dXJuIGM7aWYodm9pZCAwIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbiB2NHQobCl7aWYodm9pZCAwPT09bCl0aHJvdyBuZXcgUmVm'@;
put 'ZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBsfShsKX0odGhpcyxkKX19KGEpO2Z1bmN0aW9uIGEoKXtyZXR1cm4gZnVuY3Rpb24gYzR0KGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cg'@;
put 'bmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsYSksYy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIGZ1bmN0aW9uIGY0dChsLGMsYSl7YyYmT3BlKGwucHJvdG90eXBlLGMpLGEmJk9wZShsLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0'@;
put 'eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShhLFt7a2V5OiJpc0VuYWJsZWQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuITB9fSx7a2V5OiJleHBvcnRBc1N0cmluZyIsdmFsdWU6ZnVuY3Rpb24oZCl7cmV0dXJuIHRoaXMuX2NyZWF0ZVR5cGVGb3JtYXR0ZXIoZCxhcmd1bWVudHMu'@;
put 'bGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30pLmV4cG9ydCgpfX0se2tleToiZXhwb3J0QXNCbG9iIix2YWx1ZTpmdW5jdGlvbihkKXtyZXR1cm4gdGhpcy5fY3JlYXRlQmxvYih0aGlzLl9jcmVhdGVUeXBlRm9ybWF0dGVyKGQsYXJndW1lbnRzLmxlbmd0'@;
put 'aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9KSl9fSx7a2V5OiJkb3dubG9hZEZpbGUiLHZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBtPXRoaXMuaG90LF89bS5yb290RG9jdW1lbnQsTz1tLnJvb3RXaW5kb3csWD10aGlzLl9jcmVhdGVUeXBlRm9ybWF0dGVyKGQsYXJn'@;
put 'dW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9KSxhZT10aGlzLl9jcmVhdGVCbG9iKFgpLHBlPU8uVVJMfHxPLndlYmtpdFVSTCxiZT1fLmNyZWF0ZUVsZW1lbnQoImEiKSx4ZT0iIi5jb25jYXQoWC5vcHRpb25zLmZpbGVuYW1lLCIuIikuY29u'@;
put 'Y2F0KFgub3B0aW9ucy5maWxlRXh0ZW5zaW9uKTtpZih2b2lkIDAhPT1iZS5kb3dubG9hZCl7dmFyIFZlPXBlLmNyZWF0ZU9iamVjdFVSTChhZSk7YmUuc3R5bGUuZGlzcGxheT0ibm9uZSIsYmUuc2V0QXR0cmlidXRlKCJocmVmIixWZSksYmUuc2V0QXR0cmlidXRlKCJkb3dubG9hZCIseGUp'@;
put 'LF8uYm9keS5hcHBlbmRDaGlsZChiZSksYmUuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgiY2xpY2siKSksXy5ib2R5LnJlbW92ZUNoaWxkKGJlKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cGUucmV2b2tlT2JqZWN0VVJMKFZlKX0sMTAwKX1lbHNlIG5hdmlnYXRvci5tc1NhdmVPck9w'@;
put 'ZW5CbG9iJiZuYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYihhZSx4ZSl9fSx7a2V5OiJfY3JlYXRlVHlwZUZvcm1hdHRlciIsdmFsdWU6ZnVuY3Rpb24oZCl7dmFyIGg9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2lmKCFncVtkXSl0'@;
put 'aHJvdyBuZXcgRXJyb3IoJ0V4cG9ydCBmb3JtYXQgdHlwZSAiJy5jb25jYXQoZCwnIiBpcyBub3Qgc3VwcG9ydGVkLicpKTtyZXR1cm4gZnVuY3Rpb24gdTR0KGwsYyxhKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZ3FbbF0/bmV3IGdxW2xdKGMsYSk6bnVsbH0oZCxuZXcgTnB0KHRoaXMu'@;
put 'aG90KSxoKX19LHtrZXk6Il9jcmVhdGVCbG9iIix2YWx1ZTpmdW5jdGlvbihkKXt2YXIgaD1udWxsO3JldHVybiB0eXBlb2YgQmxvYjwidSImJihoPW5ldyBCbG9iKFtkLmV4cG9ydCgpXSx7dHlwZToiIi5jb25jYXQoZC5vcHRpb25zLm1pbWVUeXBlLCI7Y2hhcnNldD0iKS5jb25jYXQoZC5v'@;
put 'cHRpb25zLmVuY29kaW5nKX0pKSxofX1dLFt7a2V5OiJQTFVHSU5fS0VZIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4iZXhwb3J0RmlsZSJ9fSx7a2V5OiJQTFVHSU5fUFJJT1JJVFkiLGdldDpmdW5jdGlvbigpe3JldHVybiAyNDB9fV0pLGF9KEdhKTtmdW5jdGlvbiBKayhsKXtyZXR1cm4oSms9'@;
put 'ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9'@;
put 'PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiBEcGUobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3Jp'@;
put 'dGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLE00dChmLmtleSksZil9fWZ1bmN0aW9uIE00dChsKXt2YXIgYz1mdW5jdGlvbiBrNHQobCxjKXtpZigib2JqZWN0IiE9PUprKGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAw'@;
put 'IT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PUprKGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVy'@;
put 'KShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1KayhjKT9jOlN0cmluZyhjKX12YXIgSXBlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbChjLGEpe3ZhciBmPWEuaWQsZD1hLnN0YXRlbGVzcyxoPXZvaWQgMD09PWR8fGQ7KGZ1bmN0aW9uIEM0dChsLGMpe2lmKCEobCBpbnN0YW5jZW9m'@;
put 'IGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyxsKSx0aGlzLmhvdD1jLHRoaXMuaWQ9Zix0aGlzLmVsZW1lbnRzPVtdLHRoaXMuaGlkZGVuPSExLHRoaXMuc3RhdGVJZD0iRmlsdGVycy5jb21wb25lbnQuIi5jb25jYXQo'@;
put 'dGhpcy5pZCksdGhpcy5zdGF0ZT1oP251bGw6dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAodGhpcy5zdGF0ZUlkLG5ldyB6Uil9cmV0dXJuIGZ1bmN0aW9uIFM0dChsLGMsYSl7YyYmRHBlKGwucHJvdG90eXBlLGMpLGEmJkRwZShsLGEpLE9iamVjdC5kZWZpbmVQcm9w'@;
put 'ZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShsLFt7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXtSbih0aGlzLmVsZW1lbnRzLGZ1bmN0aW9uKGEpe3JldHVybiBhLnJlc2V0KCl9KX19LHtrZXk6ImhpZGUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5oaWRkZW49ITB9fSx7'@;
put 'a2V5OiJzaG93Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuaGlkZGVuPSExfX0se2tleToiaXNIaWRkZW4iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PT10aGlzLmhvdHx8dGhpcy5oaWRkZW59fSx7a2V5OiJyZXN0b3JlU3RhdGUiLHZhbHVlOmZ1bmN0aW9uKGEpe3RoaXMuc3RhdGUm'@;
put 'JnRoaXMuc2V0U3RhdGUodGhpcy5zdGF0ZS5nZXRWYWx1ZUF0SW5kZXgoYSkpfX0se2tleToic2V0U3RhdGUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJUaGUgc3RhdGUgc2V0dGluZyBsb2dpYyBpcyBub3QgaW1wbGVtZW50ZWQiKX19LHtrZXk6InNhdmVTdGF0ZSIsdmFs'@;
put 'dWU6ZnVuY3Rpb24oYSl7dGhpcy5zdGF0ZSYmdGhpcy5zdGF0ZS5zZXRWYWx1ZUF0SW5kZXgoYSx0aGlzLmdldFN0YXRlKCkpfX0se2tleToiZ2V0U3RhdGUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJUaGUgc3RhdGUgZ2F0aGVyaW5nIGxvZ2ljIGlzIG5vdCBpbXBsZW1l'@;
put 'bnRlZCIpfX0se2tleToiZGVzdHJveSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMuc3RhdGVJZCksdGhpcy5jbGVhckxvY2FsSG9va3MoKSxSbih0aGlzLmVsZW1lbnRzLGZ1bmN0aW9uKGEpe3JldHVybiBhLmRlc3Ryb3ko'@;
put 'KX0pLHRoaXMuc3RhdGU9bnVsbCx0aGlzLmVsZW1lbnRzPW51bGwsdGhpcy5ob3Q9bnVsbH19XSksbH0oKTtUbChJcGUsVzApO2NvbnN0IFhMPUlwZTt2YXIgUWs9e307ZnVuY3Rpb24gWjQobCxjKXtpZighUWtbbF0pdGhyb3cgRXJyb3IoJ0ZpbHRlciBjb25kaXRpb24gIicuY29uY2F0KGws'@;
put 'JyIgZG9lcyBub3QgZXhpc3QuJykpO3ZhciBhPVFrW2xdLGY9YS5jb25kaXRpb24sZD1hLmRlc2NyaXB0b3IsaD1jO3JldHVybiBkLmlucHV0VmFsdWVzRGVjb3JhdG9yJiYoaD1kLmlucHV0VmFsdWVzRGVjb3JhdG9yKGgpKSxmdW5jdGlvbihtKXtyZXR1cm4gZi5hcHBseShtLm1ldGEuaW5z'@;
put 'dGFuY2UsW10uY29uY2F0KFttXSxbaF0pKX19ZnVuY3Rpb24gZTYobCl7aWYoIVFrW2xdKXRocm93IEVycm9yKCdGaWx0ZXIgY29uZGl0aW9uICInLmNvbmNhdChsLCciIGRvZXMgbm90IGV4aXN0LicpKTtyZXR1cm4gUWtbbF0uZGVzY3JpcHRvcn1mdW5jdGlvbiBvdShsLGMsYSl7YS5rZXk9'@;
put 'bCxRa1tsXT17Y29uZGl0aW9uOmMsZGVzY3JpcHRvcjphfX12YXIgZWM9Im5vbmUiO291KGVjLGZ1bmN0aW9uIEU0dCgpe3JldHVybiEwfSx7bmFtZTpxUixpbnB1dHNDb3VudDowLHNob3dPcGVyYXRvcnM6ITF9KTt2YXIgZUU9ImVtcHR5IjtvdShlRSxmdW5jdGlvbiB4NHQobCl7cmV0dXJu'@;
put 'IHd1KGwudmFsdWUpfSx7bmFtZTpRRyxpbnB1dHNDb3VudDowLHNob3dPcGVyYXRvcnM6ITB9KTt2YXIgSkw9Im5vdF9lbXB0eSI7ZnVuY3Rpb24gUnBlKGwsYyl7KG51bGw9PWN8fGM+bC5sZW5ndGgpJiYoYz1sLmxlbmd0aCk7Zm9yKHZhciBhPTAsZj1uZXcgQXJyYXkoYyk7YTxjO2ErKylm'@;
put 'W2FdPWxbYV07cmV0dXJuIGZ9b3UoSkwsZnVuY3Rpb24gQTR0KGwsYyl7cmV0dXJuIVo0KGVFLGMpKGwpfSx7bmFtZTplJCxpbnB1dHNDb3VudDowLHNob3dPcGVyYXRvcnM6ITB9KTt2YXIgdEU9ImVxIjtvdSh0RSxmdW5jdGlvbiBMNHQobCxjKXt2YXIgZj1mdW5jdGlvbiBUNHQobCxjKXty'@;
put 'ZXR1cm4gZnVuY3Rpb24gUjR0KGwpe2lmKEFycmF5LmlzQXJyYXkobCkpcmV0dXJuIGx9KGwpfHxmdW5jdGlvbiBJNHQobCxjKXt2YXIgYT1udWxsPT1sP251bGw6dHlwZW9mIFN5bWJvbDwidSImJmxbU3ltYm9sLml0ZXJhdG9yXXx8bFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPWEpe3ZhciBm'@;
put 'LGQsaCxtLF89W10sTz0hMCxYPSExO3RyeXtpZihoPShhPWEuY2FsbChsKSkubmV4dCwwPT09Yyl7aWYoT2JqZWN0KGEpIT09YSlyZXR1cm47Tz0hMX1lbHNlIGZvcig7IShPPShmPWguY2FsbChhKSkuZG9uZSkmJihfLnB1c2goZi52YWx1ZSksXy5sZW5ndGghPT1jKTtPPSEwKTt9Y2F0Y2go'@;
put 'YWUpe1g9ITAsZD1hZX1maW5hbGx5e3RyeXtpZighTyYmbnVsbCE9YS5yZXR1cm4mJihtPWEucmV0dXJuKCksT2JqZWN0KG0pIT09bSkpcmV0dXJufWZpbmFsbHl7aWYoWCl0aHJvdyBkfX1yZXR1cm4gX319KGwsYyl8fGZ1bmN0aW9uIEQ0dChsLGMpe2lmKGwpe2lmKCJzdHJpbmciPT10eXBl'@;
put 'b2YgbClyZXR1cm4gUnBlKGwsYyk7dmFyIGE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGwpLnNsaWNlKDgsLTEpO2lmKCJPYmplY3QiPT09YSYmbC5jb25zdHJ1Y3RvciYmKGE9bC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PWF8fCJTZXQiPT09YSlyZXR1cm4gQXJyYXkuZnJv'@;
put 'bShsKTtpZigiQXJndW1lbnRzIj09PWF8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KGEpKXJldHVybiBScGUobCxjKX19KGwsYyl8fGZ1bmN0aW9uIE80dCgpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVy'@;
put 'ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9KGMsMSlbMF07cmV0dXJuIE1zKGwudmFsdWUpLnRvTG9jYWxlTG93ZXJDYXNlKGwubWV0'@;
put 'YS5sb2NhbGUpPT09TXMoZil9LHtuYW1lOnQkLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO3ZhciBRTD0ibmVxIjtmdW5jdGlvbiBMcGUobCxjKXsobnVsbD09Y3x8Yz5sLmxlbmd0aCkmJihjPWwubGVuZ3RoKTtmb3IodmFyIGE9MCxmPW5ldyBBcnJheShjKTthPGM7YSsrKWZb'@;
put 'YV09bFthXTtyZXR1cm4gZn1mdW5jdGlvbiBGcGUobCxjKXsobnVsbD09Y3x8Yz5sLmxlbmd0aCkmJihjPWwubGVuZ3RoKTtmb3IodmFyIGE9MCxmPW5ldyBBcnJheShjKTthPGM7YSsrKWZbYV09bFthXTtyZXR1cm4gZn1mdW5jdGlvbiBOcGUobCxjKXsobnVsbD09Y3x8Yz5sLmxlbmd0aCkm'@;
put 'JihjPWwubGVuZ3RoKTtmb3IodmFyIGE9MCxmPW5ldyBBcnJheShjKTthPGM7YSsrKWZbYV09bFthXTtyZXR1cm4gZn1mdW5jdGlvbiBCcGUobCxjKXsobnVsbD09Y3x8Yz5sLmxlbmd0aCkmJihjPWwubGVuZ3RoKTtmb3IodmFyIGE9MCxmPW5ldyBBcnJheShjKTthPGM7YSsrKWZbYV09bFth'@;
put 'XTtyZXR1cm4gZn1mdW5jdGlvbiB6cGUobCxjKXsobnVsbD09Y3x8Yz5sLmxlbmd0aCkmJihjPWwubGVuZ3RoKTtmb3IodmFyIGE9MCxmPW5ldyBBcnJheShjKTthPGM7YSsrKWZbYV09bFthXTtyZXR1cm4gZn1vdShRTCxmdW5jdGlvbiBQNHQobCxjKXtyZXR1cm4hWjQodEUsYykobCl9LHtu'@;
put 'YW1lOm4kLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pLG91KCJndCIsZnVuY3Rpb24gajR0KGwsYyl7dmFyIGQ9ZnVuY3Rpb24gRjR0KGwsYyl7cmV0dXJuIGZ1bmN0aW9uIEI0dChsKXtpZihBcnJheS5pc0FycmF5KGwpKXJldHVybiBsfShsKXx8ZnVuY3Rpb24gVjR0KGwsYyl7'@;
put 'dmFyIGE9bnVsbD09bD9udWxsOnR5cGVvZiBTeW1ib2w8InUiJiZsW1N5bWJvbC5pdGVyYXRvcl18fGxbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1hKXt2YXIgZixkLGgsbSxfPVtdLE89ITAsWD0hMTt0cnl7aWYoaD0oYT1hLmNhbGwobCkpLm5leHQsMD09PWMpe2lmKE9iamVjdChhKSE9PWEp'@;
put 'cmV0dXJuO089ITF9ZWxzZSBmb3IoOyEoTz0oZj1oLmNhbGwoYSkpLmRvbmUpJiYoXy5wdXNoKGYudmFsdWUpLF8ubGVuZ3RoIT09Yyk7Tz0hMCk7fWNhdGNoKGFlKXtYPSEwLGQ9YWV9ZmluYWxseXt0cnl7aWYoIU8mJm51bGwhPWEucmV0dXJuJiYobT1hLnJldHVybigpLE9iamVjdChtKSE9'@;
put 'PW0pKXJldHVybn1maW5hbGx5e2lmKFgpdGhyb3cgZH19cmV0dXJuIF99fShsLGMpfHxmdW5jdGlvbiBONHQobCxjKXtpZihsKXtpZigic3RyaW5nIj09dHlwZW9mIGwpcmV0dXJuIExwZShsLGMpO3ZhciBhPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsKS5zbGljZSg4LC0xKTtp'@;
put 'ZigiT2JqZWN0Ij09PWEmJmwuY29uc3RydWN0b3ImJihhPWwuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1hfHwiU2V0Ij09PWEpcmV0dXJuIEFycmF5LmZyb20obCk7aWYoIkFyZ3VtZW50cyI9PT1hfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChh'@;
put 'KSlyZXR1cm4gTHBlKGwsYyl9fShsLGMpfHxmdW5jdGlvbiBINHQoKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3Qg'@;
put 'aGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfShjLDEpWzBdO3JldHVybiJudW1lcmljIj09PWwubWV0YS50eXBlJiYoZD1wYXJzZUZsb2F0KGQsMTApKSxsLnZhbHVlPmR9LHtuYW1lOmwkLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pLG91KCJndGUiLGZ1'@;
put 'bmN0aW9uIEc0dChsLGMpe3ZhciBkPWZ1bmN0aW9uIHo0dChsLGMpe3JldHVybiBmdW5jdGlvbiBXNHQobCl7aWYoQXJyYXkuaXNBcnJheShsKSlyZXR1cm4gbH0obCl8fGZ1bmN0aW9uIFk0dChsLGMpe3ZhciBhPW51bGw9PWw/bnVsbDp0eXBlb2YgU3ltYm9sPCJ1IiYmbFtTeW1ib2wuaXRl'@;
put 'cmF0b3JdfHxsWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9YSl7dmFyIGYsZCxoLG0sXz1bXSxPPSEwLFg9ITE7dHJ5e2lmKGg9KGE9YS5jYWxsKGwpKS5uZXh0LDA9PT1jKXtpZihPYmplY3QoYSkhPT1hKXJldHVybjtPPSExfWVsc2UgZm9yKDshKE89KGY9aC5jYWxsKGEpKS5kb25lKSYmKF8u'@;
put 'cHVzaChmLnZhbHVlKSxfLmxlbmd0aCE9PWMpO089ITApO31jYXRjaChhZSl7WD0hMCxkPWFlfWZpbmFsbHl7dHJ5e2lmKCFPJiZudWxsIT1hLnJldHVybiYmKG09YS5yZXR1cm4oKSxPYmplY3QobSkhPT1tKSlyZXR1cm59ZmluYWxseXtpZihYKXRocm93IGR9fXJldHVybiBffX0obCxjKXx8'@;
put 'ZnVuY3Rpb24gWjR0KGwsYyl7aWYobCl7aWYoInN0cmluZyI9PXR5cGVvZiBsKXJldHVybiBGcGUobCxjKTt2YXIgYT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobCkuc2xpY2UoOCwtMSk7aWYoIk9iamVjdCI9PT1hJiZsLmNvbnN0cnVjdG9yJiYoYT1sLmNvbnN0cnVjdG9yLm5h'@;
put 'bWUpLCJNYXAiPT09YXx8IlNldCI9PT1hKXJldHVybiBBcnJheS5mcm9tKGwpO2lmKCJBcmd1bWVudHMiPT09YXx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QoYSkpcmV0dXJuIEZwZShsLGMpfX0obCxjKXx8ZnVuY3Rpb24gVTR0KCl7dGhyb3cgbmV3'@;
put 'IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX0oYywxKVswXTty'@;
put 'ZXR1cm4ibnVtZXJpYyI9PT1sLm1ldGEudHlwZSYmKGQ9cGFyc2VGbG9hdChkLDEwKSksbC52YWx1ZT49ZH0se25hbWU6cyQsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSksb3UoImx0IixmdW5jdGlvbiBRNHQobCxjKXt2YXIgZD1mdW5jdGlvbiAkNHQobCxjKXtyZXR1cm4gZnVu'@;
put 'Y3Rpb24gSjR0KGwpe2lmKEFycmF5LmlzQXJyYXkobCkpcmV0dXJuIGx9KGwpfHxmdW5jdGlvbiBYNHQobCxjKXt2YXIgYT1udWxsPT1sP251bGw6dHlwZW9mIFN5bWJvbDwidSImJmxbU3ltYm9sLml0ZXJhdG9yXXx8bFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPWEpe3ZhciBmLGQsaCxtLF89'@;
put 'W10sTz0hMCxYPSExO3RyeXtpZihoPShhPWEuY2FsbChsKSkubmV4dCwwPT09Yyl7aWYoT2JqZWN0KGEpIT09YSlyZXR1cm47Tz0hMX1lbHNlIGZvcig7IShPPShmPWguY2FsbChhKSkuZG9uZSkmJihfLnB1c2goZi52YWx1ZSksXy5sZW5ndGghPT1jKTtPPSEwKTt9Y2F0Y2goYWUpe1g9ITAs'@;
put 'ZD1hZX1maW5hbGx5e3RyeXtpZighTyYmbnVsbCE9YS5yZXR1cm4mJihtPWEucmV0dXJuKCksT2JqZWN0KG0pIT09bSkpcmV0dXJufWZpbmFsbHl7aWYoWCl0aHJvdyBkfX1yZXR1cm4gX319KGwsYyl8fGZ1bmN0aW9uIHE0dChsLGMpe2lmKGwpe2lmKCJzdHJpbmciPT10eXBlb2YgbClyZXR1'@;
put 'cm4gTnBlKGwsYyk7dmFyIGE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGwpLnNsaWNlKDgsLTEpO2lmKCJPYmplY3QiPT09YSYmbC5jb25zdHJ1Y3RvciYmKGE9bC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PWF8fCJTZXQiPT09YSlyZXR1cm4gQXJyYXkuZnJvbShsKTtpZigi'@;
put 'QXJndW1lbnRzIj09PWF8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KGEpKXJldHVybiBOcGUobCxjKX19KGwsYyl8fGZ1bmN0aW9uIEs0dCgpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRl'@;
put 'cmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9KGMsMSlbMF07cmV0dXJuIm51bWVyaWMiPT09bC5tZXRhLnR5cGUmJihkPXBhcnNlRmxvYXQoZCwxMCkp'@;
put 'LGwudmFsdWU8ZH0se25hbWU6dSQsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSksb3UoImx0ZSIsZnVuY3Rpb24gb210KGwsYyl7dmFyIGQ9ZnVuY3Rpb24gZW10KGwsYyl7cmV0dXJuIGZ1bmN0aW9uIGltdChsKXtpZihBcnJheS5pc0FycmF5KGwpKXJldHVybiBsfShsKXx8ZnVu'@;
put 'Y3Rpb24gcm10KGwsYyl7dmFyIGE9bnVsbD09bD9udWxsOnR5cGVvZiBTeW1ib2w8InUiJiZsW1N5bWJvbC5pdGVyYXRvcl18fGxbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1hKXt2YXIgZixkLGgsbSxfPVtdLE89ITAsWD0hMTt0cnl7aWYoaD0oYT1hLmNhbGwobCkpLm5leHQsMD09PWMpe2lm'@;
put 'KE9iamVjdChhKSE9PWEpcmV0dXJuO089ITF9ZWxzZSBmb3IoOyEoTz0oZj1oLmNhbGwoYSkpLmRvbmUpJiYoXy5wdXNoKGYudmFsdWUpLF8ubGVuZ3RoIT09Yyk7Tz0hMCk7fWNhdGNoKGFlKXtYPSEwLGQ9YWV9ZmluYWxseXt0cnl7aWYoIU8mJm51bGwhPWEucmV0dXJuJiYobT1hLnJldHVy'@;
put 'bigpLE9iamVjdChtKSE9PW0pKXJldHVybn1maW5hbGx5e2lmKFgpdGhyb3cgZH19cmV0dXJuIF99fShsLGMpfHxmdW5jdGlvbiBubXQobCxjKXtpZihsKXtpZigic3RyaW5nIj09dHlwZW9mIGwpcmV0dXJuIEJwZShsLGMpO3ZhciBhPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChs'@;
put 'KS5zbGljZSg4LC0xKTtpZigiT2JqZWN0Ij09PWEmJmwuY29uc3RydWN0b3ImJihhPWwuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1hfHwiU2V0Ij09PWEpcmV0dXJuIEFycmF5LmZyb20obCk7aWYoIkFyZ3VtZW50cyI9PT1hfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQp'@;
put 'P0FycmF5JC8udGVzdChhKSlyZXR1cm4gQnBlKGwsYyl9fShsLGMpfHxmdW5jdGlvbiB0bXQoKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJh'@;
put 'eSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfShjLDEpWzBdO3JldHVybiJudW1lcmljIj09PWwubWV0YS50eXBlJiYoZD1wYXJzZUZsb2F0KGQsMTApKSxsLnZhbHVlPD1kfSx7bmFtZTpjJCxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6'@;
put 'ITB9KTt2YXIgeXE9ImRhdGVfYWZ0ZXIiO2Z1bmN0aW9uIFVwZShsLGMpeyhudWxsPT1jfHxjPmwubGVuZ3RoKSYmKGM9bC5sZW5ndGgpO2Zvcih2YXIgYT0wLGY9bmV3IEFycmF5KGMpO2E8YzthKyspZlthXT1sW2FdO3JldHVybiBmfW91KHlxLGZ1bmN0aW9uIGZtdChsLGMpe3ZhciBmPWZ1'@;
put 'bmN0aW9uIGFtdChsLGMpe3JldHVybiBmdW5jdGlvbiBjbXQobCl7aWYoQXJyYXkuaXNBcnJheShsKSlyZXR1cm4gbH0obCl8fGZ1bmN0aW9uIHVtdChsLGMpe3ZhciBhPW51bGw9PWw/bnVsbDp0eXBlb2YgU3ltYm9sPCJ1IiYmbFtTeW1ib2wuaXRlcmF0b3JdfHxsWyJAQGl0ZXJhdG9yIl07'@;
put 'aWYobnVsbCE9YSl7dmFyIGYsZCxoLG0sXz1bXSxPPSEwLFg9ITE7dHJ5e2lmKGg9KGE9YS5jYWxsKGwpKS5uZXh0LDA9PT1jKXtpZihPYmplY3QoYSkhPT1hKXJldHVybjtPPSExfWVsc2UgZm9yKDshKE89KGY9aC5jYWxsKGEpKS5kb25lKSYmKF8ucHVzaChmLnZhbHVlKSxfLmxlbmd0aCE9'@;
put 'PWMpO089ITApO31jYXRjaChhZSl7WD0hMCxkPWFlfWZpbmFsbHl7dHJ5e2lmKCFPJiZudWxsIT1hLnJldHVybiYmKG09YS5yZXR1cm4oKSxPYmplY3QobSkhPT1tKSlyZXR1cm59ZmluYWxseXtpZihYKXRocm93IGR9fXJldHVybiBffX0obCxjKXx8ZnVuY3Rpb24gc210KGwsYyl7aWYobCl7'@;
put 'aWYoInN0cmluZyI9PXR5cGVvZiBsKXJldHVybiB6cGUobCxjKTt2YXIgYT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobCkuc2xpY2UoOCwtMSk7aWYoIk9iamVjdCI9PT1hJiZsLmNvbnN0cnVjdG9yJiYoYT1sLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09YXx8IlNldCI9PT1h'@;
put 'KXJldHVybiBBcnJheS5mcm9tKGwpO2lmKCJBcmd1bWVudHMiPT09YXx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QoYSkpcmV0dXJuIHpwZShsLGMpfX0obCxjKXx8ZnVuY3Rpb24gbG10KCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRl'@;
put 'bXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX0oYywxKVswXSxkPUtvKGwudmFsdWUsbC5tZXRhLmRhdGVG'@;
put 'b3JtYXQpLGg9S28oZixsLm1ldGEuZGF0ZUZvcm1hdCk7cmV0dXJuISghZC5pc1ZhbGlkKCl8fCFoLmlzVmFsaWQoKSkmJmQuZGlmZihoKT49MH0se25hbWU6aCQsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSk7dmFyIGJxPSJkYXRlX2JlZm9yZSI7ZnVuY3Rpb24gWnBlKGwsYyl7'@;
put 'KG51bGw9PWN8fGM+bC5sZW5ndGgpJiYoYz1sLmxlbmd0aCk7Zm9yKHZhciBhPTAsZj1uZXcgQXJyYXkoYyk7YTxjO2ErKylmW2FdPWxbYV07cmV0dXJuIGZ9b3UoYnEsZnVuY3Rpb24gdm10KGwsYyl7dmFyIGY9ZnVuY3Rpb24gZG10KGwsYyl7cmV0dXJuIGZ1bmN0aW9uIGdtdChsKXtpZihB'@;
put 'cnJheS5pc0FycmF5KGwpKXJldHVybiBsfShsKXx8ZnVuY3Rpb24gbW10KGwsYyl7dmFyIGE9bnVsbD09bD9udWxsOnR5cGVvZiBTeW1ib2w8InUiJiZsW1N5bWJvbC5pdGVyYXRvcl18fGxbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1hKXt2YXIgZixkLGgsbSxfPVtdLE89ITAsWD0hMTt0cnl7'@;
put 'aWYoaD0oYT1hLmNhbGwobCkpLm5leHQsMD09PWMpe2lmKE9iamVjdChhKSE9PWEpcmV0dXJuO089ITF9ZWxzZSBmb3IoOyEoTz0oZj1oLmNhbGwoYSkpLmRvbmUpJiYoXy5wdXNoKGYudmFsdWUpLF8ubGVuZ3RoIT09Yyk7Tz0hMCk7fWNhdGNoKGFlKXtYPSEwLGQ9YWV9ZmluYWxseXt0cnl7'@;
put 'aWYoIU8mJm51bGwhPWEucmV0dXJuJiYobT1hLnJldHVybigpLE9iamVjdChtKSE9PW0pKXJldHVybn1maW5hbGx5e2lmKFgpdGhyb3cgZH19cmV0dXJuIF99fShsLGMpfHxmdW5jdGlvbiBwbXQobCxjKXtpZihsKXtpZigic3RyaW5nIj09dHlwZW9mIGwpcmV0dXJuIFVwZShsLGMpO3ZhciBh'@;
put 'PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsKS5zbGljZSg4LC0xKTtpZigiT2JqZWN0Ij09PWEmJmwuY29uc3RydWN0b3ImJihhPWwuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1hfHwiU2V0Ij09PWEpcmV0dXJuIEFycmF5LmZyb20obCk7aWYoIkFyZ3VtZW50cyI9PT1hfHwv'@;
put 'Xig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChhKSlyZXR1cm4gVXBlKGwsYyl9fShsLGMpfHxmdW5jdGlvbiBobXQoKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxu'@;
put 'SW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfShjLDEpWzBdLGQ9S28obC52YWx1ZSxsLm1ldGEuZGF0ZUZvcm1hdCksaD1LbyhmLGwubWV0YS5kYXRlRm9ybWF0KTtyZXR1cm4hKCFk'@;
put 'LmlzVmFsaWQoKXx8IWguaXNWYWxpZCgpKSYmZC5kaWZmKGgpPD0wfSx7bmFtZTpwJCxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KTt2YXIgZVA9ImJldHdlZW4iO291KGVQLGZ1bmN0aW9uIFNtdChsLGMpe3ZhciBhPWZ1bmN0aW9uIHltdChsLGMpe3JldHVybiBmdW5jdGlvbiBD'@;
put 'bXQobCl7aWYoQXJyYXkuaXNBcnJheShsKSlyZXR1cm4gbH0obCl8fGZ1bmN0aW9uIHdtdChsLGMpe3ZhciBhPW51bGw9PWw/bnVsbDp0eXBlb2YgU3ltYm9sPCJ1IiYmbFtTeW1ib2wuaXRlcmF0b3JdfHxsWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9YSl7dmFyIGYsZCxoLG0sXz1bXSxPPSEw'@;
put 'LFg9ITE7dHJ5e2lmKGg9KGE9YS5jYWxsKGwpKS5uZXh0LDA9PT1jKXtpZihPYmplY3QoYSkhPT1hKXJldHVybjtPPSExfWVsc2UgZm9yKDshKE89KGY9aC5jYWxsKGEpKS5kb25lKSYmKF8ucHVzaChmLnZhbHVlKSxfLmxlbmd0aCE9PWMpO089ITApO31jYXRjaChhZSl7WD0hMCxkPWFlfWZp'@;
put 'bmFsbHl7dHJ5e2lmKCFPJiZudWxsIT1hLnJldHVybiYmKG09YS5yZXR1cm4oKSxPYmplY3QobSkhPT1tKSlyZXR1cm59ZmluYWxseXtpZihYKXRocm93IGR9fXJldHVybiBffX0obCxjKXx8ZnVuY3Rpb24gX210KGwsYyl7aWYobCl7aWYoInN0cmluZyI9PXR5cGVvZiBsKXJldHVybiBacGUo'@;
put 'bCxjKTt2YXIgYT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobCkuc2xpY2UoOCwtMSk7aWYoIk9iamVjdCI9PT1hJiZsLmNvbnN0cnVjdG9yJiYoYT1sLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09YXx8IlNldCI9PT1hKXJldHVybiBBcnJheS5mcm9tKGwpO2lmKCJBcmd1bWVu'@;
put 'dHMiPT09YXx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QoYSkpcmV0dXJuIFpwZShsLGMpfX0obCxjKXx8ZnVuY3Rpb24gYm10KCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBp'@;
put 'bnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX0oYywyKSxoPWFbMF0sbT1hWzFdO2lmKCJudW1lcmljIj09PWwubWV0YS50eXBlKXt2YXIgXz1wYXJzZUZsb2F0KGgs'@;
put 'MTApLE89cGFyc2VGbG9hdChtLDEwKTtoPU1hdGgubWluKF8sTyksbT1NYXRoLm1heChfLE8pfWVsc2UgaWYoImRhdGUiPT09bC5tZXRhLnR5cGUpe3ZhciBYPVo0KGJxLFttXSksYWU9WjQoeXEsW2hdKTtyZXR1cm4gWChsKSYmYWUobCl9cmV0dXJuIGwudmFsdWU+PWgmJmwudmFsdWU8PW19'@;
put 'LHtuYW1lOmYkLGlucHV0c0NvdW50OjIsc2hvd09wZXJhdG9yczohMH0pO3ZhciBZcGU9Im5vdF9iZXR3ZWVuIjtmdW5jdGlvbiBXcGUobCxjKXsobnVsbD09Y3x8Yz5sLmxlbmd0aCkmJihjPWwubGVuZ3RoKTtmb3IodmFyIGE9MCxmPW5ldyBBcnJheShjKTthPGM7YSsrKWZbYV09bFthXTty'@;
put 'ZXR1cm4gZn1vdShZcGUsZnVuY3Rpb24gTW10KGwsYyl7cmV0dXJuIVo0KGVQLGMpKGwpfSx7bmFtZTpkJCxpbnB1dHNDb3VudDoyLHNob3dPcGVyYXRvcnM6ITB9KTt2YXIgR3BlPSJiZWdpbnNfd2l0aCI7ZnVuY3Rpb24gJHBlKGwsYyl7KG51bGw9PWN8fGM+bC5sZW5ndGgpJiYoYz1sLmxl'@;
put 'bmd0aCk7Zm9yKHZhciBhPTAsZj1uZXcgQXJyYXkoYyk7YTxjO2ErKylmW2FdPWxbYV07cmV0dXJuIGZ9ZnVuY3Rpb24gcXBlKGwsYyl7KG51bGw9PWN8fGM+bC5sZW5ndGgpJiYoYz1sLmxlbmd0aCk7Zm9yKHZhciBhPTAsZj1uZXcgQXJyYXkoYyk7YTxjO2ErKylmW2FdPWxbYV07cmV0dXJu'@;
put 'IGZ9b3UoR3BlLGZ1bmN0aW9uIE9tdChsLGMpe3ZhciBmPWZ1bmN0aW9uIGttdChsLGMpe3JldHVybiBmdW5jdGlvbiBUbXQobCl7aWYoQXJyYXkuaXNBcnJheShsKSlyZXR1cm4gbH0obCl8fGZ1bmN0aW9uIEFtdChsLGMpe3ZhciBhPW51bGw9PWw/bnVsbDp0eXBlb2YgU3ltYm9sPCJ1IiYm'@;
put 'bFtTeW1ib2wuaXRlcmF0b3JdfHxsWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9YSl7dmFyIGYsZCxoLG0sXz1bXSxPPSEwLFg9ITE7dHJ5e2lmKGg9KGE9YS5jYWxsKGwpKS5uZXh0LDA9PT1jKXtpZihPYmplY3QoYSkhPT1hKXJldHVybjtPPSExfWVsc2UgZm9yKDshKE89KGY9aC5jYWxsKGEp'@;
put 'KS5kb25lKSYmKF8ucHVzaChmLnZhbHVlKSxfLmxlbmd0aCE9PWMpO089ITApO31jYXRjaChhZSl7WD0hMCxkPWFlfWZpbmFsbHl7dHJ5e2lmKCFPJiZudWxsIT1hLnJldHVybiYmKG09YS5yZXR1cm4oKSxPYmplY3QobSkhPT1tKSlyZXR1cm59ZmluYWxseXtpZihYKXRocm93IGR9fXJldHVy'@;
put 'biBffX0obCxjKXx8ZnVuY3Rpb24geG10KGwsYyl7aWYobCl7aWYoInN0cmluZyI9PXR5cGVvZiBsKXJldHVybiBXcGUobCxjKTt2YXIgYT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobCkuc2xpY2UoOCwtMSk7aWYoIk9iamVjdCI9PT1hJiZsLmNvbnN0cnVjdG9yJiYoYT1sLmNv'@;
put 'bnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09YXx8IlNldCI9PT1hKXJldHVybiBBcnJheS5mcm9tKGwpO2lmKCJBcmd1bWVudHMiPT09YXx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QoYSkpcmV0dXJuIFdwZShsLGMpfX0obCxjKXx8ZnVuY3Rpb24gRW10'@;
put 'KCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0o'@;
put 'KX0oYywxKVswXTtyZXR1cm4gTXMobC52YWx1ZSkudG9Mb2NhbGVMb3dlckNhc2UobC5tZXRhLmxvY2FsZSkuc3RhcnRzV2l0aChNcyhmKSl9LHtuYW1lOnIkLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pLFQoMzc0OTkpLG91KCJlbmRzX3dpdGgiLGZ1bmN0aW9uIEZtdChsLGMp'@;
put 'e3ZhciBmPWZ1bmN0aW9uIERtdChsLGMpe3JldHVybiBmdW5jdGlvbiBQbXQobCl7aWYoQXJyYXkuaXNBcnJheShsKSlyZXR1cm4gbH0obCl8fGZ1bmN0aW9uIExtdChsLGMpe3ZhciBhPW51bGw9PWw/bnVsbDp0eXBlb2YgU3ltYm9sPCJ1IiYmbFtTeW1ib2wuaXRlcmF0b3JdfHxsWyJAQGl0'@;
put 'ZXJhdG9yIl07aWYobnVsbCE9YSl7dmFyIGYsZCxoLG0sXz1bXSxPPSEwLFg9ITE7dHJ5e2lmKGg9KGE9YS5jYWxsKGwpKS5uZXh0LDA9PT1jKXtpZihPYmplY3QoYSkhPT1hKXJldHVybjtPPSExfWVsc2UgZm9yKDshKE89KGY9aC5jYWxsKGEpKS5kb25lKSYmKF8ucHVzaChmLnZhbHVlKSxf'@;
put 'Lmxlbmd0aCE9PWMpO089ITApO31jYXRjaChhZSl7WD0hMCxkPWFlfWZpbmFsbHl7dHJ5e2lmKCFPJiZudWxsIT1hLnJldHVybiYmKG09YS5yZXR1cm4oKSxPYmplY3QobSkhPT1tKSlyZXR1cm59ZmluYWxseXtpZihYKXRocm93IGR9fXJldHVybiBffX0obCxjKXx8ZnVuY3Rpb24gUm10KGws'@;
put 'Yyl7aWYobCl7aWYoInN0cmluZyI9PXR5cGVvZiBsKXJldHVybiAkcGUobCxjKTt2YXIgYT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobCkuc2xpY2UoOCwtMSk7aWYoIk9iamVjdCI9PT1hJiZsLmNvbnN0cnVjdG9yJiYoYT1sLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09YXx8'@;
put 'IlNldCI9PT1hKXJldHVybiBBcnJheS5mcm9tKGwpO2lmKCJBcmd1bWVudHMiPT09YXx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QoYSkpcmV0dXJuICRwZShsLGMpfX0obCxjKXx8ZnVuY3Rpb24gSW10KCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52'@;
put 'YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX0oYywxKVswXTtyZXR1cm4gTXMobC52YWx1'@;
put 'ZSkudG9Mb2NhbGVMb3dlckNhc2UobC5tZXRhLmxvY2FsZSkuZW5kc1dpdGgoTXMoZikpfSx7bmFtZTppJCxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KTt2YXIgX3E9ImNvbnRhaW5zIjtvdShfcSxmdW5jdGlvbiB6bXQobCxjKXt2YXIgZj1mdW5jdGlvbiBIbXQobCxjKXtyZXR1'@;
put 'cm4gZnVuY3Rpb24gam10KGwpe2lmKEFycmF5LmlzQXJyYXkobCkpcmV0dXJuIGx9KGwpfHxmdW5jdGlvbiBCbXQobCxjKXt2YXIgYT1udWxsPT1sP251bGw6dHlwZW9mIFN5bWJvbDwidSImJmxbU3ltYm9sLml0ZXJhdG9yXXx8bFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPWEpe3ZhciBmLGQs'@;
put 'aCxtLF89W10sTz0hMCxYPSExO3RyeXtpZihoPShhPWEuY2FsbChsKSkubmV4dCwwPT09Yyl7aWYoT2JqZWN0KGEpIT09YSlyZXR1cm47Tz0hMX1lbHNlIGZvcig7IShPPShmPWguY2FsbChhKSkuZG9uZSkmJihfLnB1c2goZi52YWx1ZSksXy5sZW5ndGghPT1jKTtPPSEwKTt9Y2F0Y2goYWUp'@;
put 'e1g9ITAsZD1hZX1maW5hbGx5e3RyeXtpZighTyYmbnVsbCE9YS5yZXR1cm4mJihtPWEucmV0dXJuKCksT2JqZWN0KG0pIT09bSkpcmV0dXJufWZpbmFsbHl7aWYoWCl0aHJvdyBkfX1yZXR1cm4gX319KGwsYyl8fGZ1bmN0aW9uIFZtdChsLGMpe2lmKGwpe2lmKCJzdHJpbmciPT10eXBlb2Yg'@;
put 'bClyZXR1cm4gcXBlKGwsYyk7dmFyIGE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGwpLnNsaWNlKDgsLTEpO2lmKCJPYmplY3QiPT09YSYmbC5jb25zdHJ1Y3RvciYmKGE9bC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PWF8fCJTZXQiPT09YSlyZXR1cm4gQXJyYXkuZnJvbShs'@;
put 'KTtpZigiQXJndW1lbnRzIj09PWF8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KGEpKXJldHVybiBxcGUobCxjKX19KGwsYyl8fGZ1bmN0aW9uIE5tdCgpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBu'@;
put 'b24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9KGMsMSlbMF07cmV0dXJuIE1zKGwudmFsdWUpLnRvTG9jYWxlTG93ZXJDYXNlKGwubWV0YS5s'@;
put 'b2NhbGUpLmluZGV4T2YoTXMoZikpPj0wfSx7bmFtZTpvJCxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KTt2YXIgWHBlPSJub3RfY29udGFpbnMiO291KFhwZSxmdW5jdGlvbiBVbXQobCxjKXtyZXR1cm4hWjQoX3EsYykobCl9LHtuYW1lOmEkLGlucHV0c0NvdW50OjEsc2hvd09w'@;
put 'ZXJhdG9yczohMH0pO3ZhciBKcGU9ImRhdGVfdG9tb3Jyb3ciO291KEpwZSxmdW5jdGlvbiBabXQobCl7dmFyIGM9S28obC52YWx1ZSxsLm1ldGEuZGF0ZUZvcm1hdCk7cmV0dXJuISFjLmlzVmFsaWQoKSYmYy5pc1NhbWUoS28oKS5zdWJ0cmFjdCgtMSwiZGF5cyIpLnN0YXJ0T2YoImRheSIp'@;
put 'LCJkIil9LHtuYW1lOmckLGlucHV0c0NvdW50OjB9KTt2YXIgUXBlPSJkYXRlX3RvZGF5IjtvdShRcGUsZnVuY3Rpb24gWW10KGwpe3ZhciBjPUtvKGwudmFsdWUsbC5tZXRhLmRhdGVGb3JtYXQpO3JldHVybiEhYy5pc1ZhbGlkKCkmJmMuaXNTYW1lKEtvKCkuc3RhcnRPZigiZGF5IiksImQi'@;
put 'KX0se25hbWU6bSQsaW5wdXRzQ291bnQ6MH0pO3ZhciByRSxlNGU9ImRhdGVfeWVzdGVyZGF5IjtmdW5jdGlvbiBuRShsKXtyZXR1cm4obkU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVv'@;
put 'ZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiB3cShsLGMsYSl7cmV0dXJuIGM9ZnVuY3Rpb24gR210KGwp'@;
put 'e3ZhciBjPWZ1bmN0aW9uICRtdChsLGMpe2lmKCJvYmplY3QiIT09bkUobCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09bkUoZikpcmV0dXJuIGY7'@;
put 'dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PW5FKGMpP2M6U3RyaW5nKGMpfShjKSxjIGluIGw/'@;
put 'T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsYyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmxbY109YSxsfW91KGU0ZSxmdW5jdGlvbiBXbXQobCl7dmFyIGM9S28obC52YWx1ZSxsLm1ldGEuZGF0ZUZvcm1hdCk7cmV0dXJuISFjLmlzVmFsaWQo'@;
put 'KSYmYy5pc1NhbWUoS28oKS5zdWJ0cmFjdCgxLCJkYXlzIikuc3RhcnRPZigiZGF5IiksImQiKX0se25hbWU6diQsaW5wdXRzQ291bnQ6MH0pO3ZhciBuNGU9KHdxKHJFPXt9LCJudW1lcmljIixbZWMsYmEsZUUsSkwsYmEsdEUsUUwsYmEsImd0IiwiZ3RlIiwibHQiLCJsdGUiLGVQLFlwZV0p'@;
put 'LHdxKHJFLCJ0ZXh0IixbZWMsYmEsZUUsSkwsYmEsdEUsUUwsYmEsR3BlLCJlbmRzX3dpdGgiLGJhLF9xLFhwZV0pLHdxKHJFLCJkYXRlIixbZWMsYmEsZUUsSkwsYmEsdEUsUUwsYmEsYnEseXEsZVAsYmEsSnBlLFFwZSxlNGVdKSxyRSk7ZnVuY3Rpb24gaUUobCl7cmV0dXJuKGlFPSJmdW5j'@;
put 'dGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1i'@;
put 'b2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gcjRlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxl'@;
put 'PSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxlZ3QoZi5rZXkpLGYpfX1mdW5jdGlvbiBlZ3QobCl7dmFyIGM9ZnVuY3Rpb24gdGd0KGwsYyl7aWYoIm9iamVjdCIhPT1pRShsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEp'@;
put 'e3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1pRShmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9'@;
put 'KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09aUUoYyk/YzpTdHJpbmcoYyl9dmFyIENxPSJidWlsdCIsU3E9ImJ1aWxkaW5nIixpNGU9WyJjbGljayIsImlucHV0Iiwia2V5ZG93biIsImtleXByZXNzIiwia2V5dXAiLCJmb2N1cyIsImJsdXIiLCJjaGFuZ2UiXSxvNGU9ZnVuY3Rpb24o'@;
put 'KXtmdW5jdGlvbiBsKGMsYSl7KGZ1bmN0aW9uIEptdChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyxsKSx0aGlzLmhvdD1jLHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBmcyh0aGlz'@;
put 'KSx0aGlzLm9wdGlvbnM9cnUobC5ERUZBVUxUUyxhKSx0aGlzLl9lbGVtZW50PXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KHRoaXMub3B0aW9ucy53cmFwSXQ/ImRpdiI6dGhpcy5vcHRpb25zLnRhZ05hbWUpLHRoaXMuYnVpbGRTdGF0ZT1udWxsfXJldHVybiBmdW5jdGlv'@;
put 'biBRbXQobCxjLGEpe2MmJnI0ZShsLnByb3RvdHlwZSxjKSxhJiZyNGUobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0obCxbe2tleToic2V0VmFsdWUiLHZhbHVlOmZ1bmN0aW9uKGEpe3RoaXMub3B0aW9ucy52YWx1ZT1hLHRoaXMudXBk'@;
put 'YXRlKCl9fSx7a2V5OiJnZXRWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLnZhbHVlfX0se2tleToiZWxlbWVudCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYnVpbGRTdGF0ZT09PVNxP3RoaXMuX2VsZW1lbnQ6dGhpcy5idWlsZFN0YXRlPT09Q3E/KHRo'@;
put 'aXMudXBkYXRlKCksdGhpcy5fZWxlbWVudCk6KHRoaXMuYnVpbGRTdGF0ZT1TcSx0aGlzLmJ1aWxkKCksdGhpcy5idWlsZFN0YXRlPUNxLHRoaXMuX2VsZW1lbnQpfX0se2tleToiaXNCdWlsdCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5idWlsZFN0YXRlPT09Q3F9fSx7a2V5OiJ0'@;
put 'cmFuc2xhdGVJZlBvc3NpYmxlIix2YWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGEmJmEuc3RhcnRzV2l0aChuMCk/dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShhKTphfX0se2tleToiYnVpbGQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxmPWZ1bmN0'@;
put 'aW9uKG0sXyl7YS5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihtLF8sZnVuY3Rpb24oTyl7cmV0dXJuIGEucnVuTG9jYWxIb29rcyhfLE8sYSl9KX07aWYodGhpcy5idWlsZFN0YXRlfHwodGhpcy5idWlsZFN0YXRlPVNxKSx0aGlzLm9wdGlvbnMuY2xhc3NOYW1lJiZnaSh0aGlzLl9l'@;
put 'bGVtZW50LHRoaXMub3B0aW9ucy5jbGFzc05hbWUpLHRoaXMub3B0aW9ucy5jaGlsZHJlbi5sZW5ndGgpUm4odGhpcy5vcHRpb25zLmNoaWxkcmVuLGZ1bmN0aW9uKGgpe3JldHVybiBhLl9lbGVtZW50LmFwcGVuZENoaWxkKGguZWxlbWVudCl9KTtlbHNlIGlmKHRoaXMub3B0aW9ucy53cmFw'@;
put 'SXQpe3ZhciBkPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KHRoaXMub3B0aW9ucy50YWdOYW1lKTttYSh0aGlzLm9wdGlvbnMsZnVuY3Rpb24oaCxtKXt2b2lkIDAhPT1kW21dJiYiY2xhc3NOYW1lIiE9PW0mJiJ0YWdOYW1lIiE9PW0mJiJjaGlsZHJlbiIhPT1tJiYoZFtt'@;
put 'XT1hLnRyYW5zbGF0ZUlmUG9zc2libGUoaCkpfSksdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChkKSxSbihpNGUsZnVuY3Rpb24oaCl7cmV0dXJuIGYoZCxoKX0pfWVsc2UgUm4oaTRlLGZ1bmN0aW9uKGgpe3JldHVybiBmKGEuX2VsZW1lbnQsaCl9KX19LHtrZXk6InVwZGF0ZSIsdmFsdWU6'@;
put 'ZnVuY3Rpb24oKXt9fSx7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMudmFsdWU9IiIsdGhpcy51cGRhdGUoKX19LHtrZXk6InNob3ciLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnN0eWxlLmRpc3BsYXk9IiJ9fSx7a2V5OiJoaWRlIix2YWx1ZTpmdW5j'@;
put 'dGlvbigpe3RoaXMuZWxlbWVudC5zdHlsZS5kaXNwbGF5PSJub25lIn19LHtrZXk6ImZvY3VzIix2YWx1ZTpmdW5jdGlvbigpe319LHtrZXk6ImRlc3Ryb3kiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveSgpLHRoaXMuZXZlbnRNYW5hZ2VyPW51bGwsdGhpcy5o'@;
put 'b3Q9bnVsbCx0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUmJnRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9lbGVtZW50KSx0aGlzLl9lbGVtZW50PW51bGx9fV0sW3trZXk6IkRFRkFVTFRTIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZTAoe2NsYXNzTmFtZToiIix2'@;
put 'YWx1ZToiIix0YWdOYW1lOiJkaXYiLGNoaWxkcmVuOltdLHdyYXBJdDohMH0pfX1dKSxsfSgpO1RsKG80ZSxXMCk7Y29uc3QgWTQ9bzRlO2Z1bmN0aW9uIF95KGwpe3JldHVybihfeT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9m'@;
put 'dW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIGE0ZShsLGMpe2Zv'@;
put 'cih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsaWd0KGYua2V5KSxmKX19ZnVuY3Rpb24gaWd0'@;
put 'KGwpe3ZhciBjPWZ1bmN0aW9uIG9ndChsLGMpe2lmKCJvYmplY3QiIT09X3kobCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09X3koZikpcmV0dXJu'@;
put 'IGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PV95KGMpP2M6U3RyaW5nKGMpfWZ1bmN0aW9u'@;
put 'IHRQKCl7cmV0dXJuIHRQPXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdC5nZXQ/UmVmbGVjdC5nZXQuYmluZCgpOmZ1bmN0aW9uKGMsYSxmKXt2YXIgZD1mdW5jdGlvbiBhZ3QobCxjKXtmb3IoOyFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobCxjKSYmbnVsbCE9PShs'@;
put 'PXd5KGwpKTspO3JldHVybiBsfShjLGEpO2lmKGQpe3ZhciBoPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZCxhKTtyZXR1cm4gaC5nZXQ/aC5nZXQuY2FsbChhcmd1bWVudHMubGVuZ3RoPDM/YzpmKTpoLnZhbHVlfX0sdFAuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9u'@;
put 'IE1xKGwsYyl7cmV0dXJuKE1xPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGYsZCl7cmV0dXJuIGYuX19wcm90b19fPWQsZn0pKGwsYyl9ZnVuY3Rpb24gbDRlKGwpe2lmKHZvaWQgMD09PWwpdGhyb3cgbmV3IFJlZmVyZW5jZUVy'@;
put 'cm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gbH1mdW5jdGlvbiB3eShsKXtyZXR1cm4od3k9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oYSl7cmV0'@;
put 'dXJuIGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSl9KShsKX12YXIgblA9bmV3IFdlYWtNYXAsZmd0PWZ1bmN0aW9uKGwpeyFmdW5jdGlvbiBsZ3QobCxjKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyYmbnVsbCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhw'@;
put 'cmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtsLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGMmJmMucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6bCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInBy'@;
put 'b3RvdHlwZSIse3dyaXRhYmxlOiExfSksYyYmTXEobCxjKX0oYSxsKTt2YXIgYz1mdW5jdGlvbiBzZ3QobCl7dmFyIGM9ZnVuY3Rpb24gY2d0KCl7aWYodHlwZW9mIFJlZmxlY3Q+InUifHwhUmVmbGVjdC5jb25zdHJ1Y3R8fFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1'@;
put 'bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sZnVuY3Rpb24oKXt9KSksITB9Y2F0Y2h7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciBkLGY9'@;
put 'd3kobCk7aWYoYyl7dmFyIGg9d3kodGhpcykuY29uc3RydWN0b3I7ZD1SZWZsZWN0LmNvbnN0cnVjdChmLGFyZ3VtZW50cyxoKX1lbHNlIGQ9Zi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uIHVndChsLGMpe2lmKGMmJigib2JqZWN0Ij09PV95KGMpfHwiZnVuY3Rpb24i'@;
put 'PT10eXBlb2YgYykpcmV0dXJuIGM7aWYodm9pZCAwIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBsNGUobCl9KHRoaXMsZCl9fShhKTtmdW5jdGlvbiBhKGYsZCl7dmFyIGg7'@;
put 'cmV0dXJuIGZ1bmN0aW9uIG5ndChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGEpLGg9Yy5jYWxsKHRoaXMsZixydShhLkRFRkFVTFRTLGQpKSxuUC5zZXQobDRlKGgpLHt9KSxo'@;
put 'LnJlZ2lzdGVySG9va3MoKSxofXJldHVybiBmdW5jdGlvbiByZ3QobCxjLGEpe2MmJmE0ZShsLnByb3RvdHlwZSxjKSxhJiZhNGUobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0oYSxbe2tleToicmVnaXN0ZXJIb29rcyIsdmFsdWU6ZnVu'@;
put 'Y3Rpb24oKXt2YXIgZD10aGlzO3RoaXMuYWRkTG9jYWxIb29rKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkNsaWNrKCl9KSx0aGlzLmFkZExvY2FsSG9vaygia2V5dXAiLGZ1bmN0aW9uKGgpe3JldHVybiBkLm9uS2V5dXAoaCl9KX19LHtrZXk6ImJ1aWxkIix2YWx1ZTpmdW5jdGlv'@;
put 'bigpe3RQKHd5KGEucHJvdG90eXBlKSwiYnVpbGQiLHRoaXMpLmNhbGwodGhpcyk7dmFyIGQ9blAuZ2V0KHRoaXMpLGg9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2QuaW5wdXQ9dGhpcy5fZWxlbWVudC5maXJzdENoaWxkLGdpKHRoaXMuX2VsZW1lbnQsImh0'@;
put 'VUlJbnB1dCIpLGdpKGgsImh0VUlJbnB1dEljb24iKSx0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGgpLHRoaXMudXBkYXRlKCl9fSx7a2V5OiJ1cGRhdGUiLHZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5pc0J1aWx0KCkpe3ZhciBkPW5QLmdldCh0aGlzKS5pbnB1dDtkLnR5cGU9dGhpcy5v'@;
put 'cHRpb25zLnR5cGUsZC5wbGFjZWhvbGRlcj10aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUodGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyKSxkLnZhbHVlPXRoaXMudHJhbnNsYXRlSWZQb3NzaWJsZSh0aGlzLm9wdGlvbnMudmFsdWUpfX19LHtrZXk6ImZvY3VzIix2YWx1ZTpmdW5jdGlvbigpe3Ro'@;
put 'aXMuaXNCdWlsdCgpJiZuUC5nZXQodGhpcykuaW5wdXQuZm9jdXMoKX19LHtrZXk6Im9uQ2xpY2siLHZhbHVlOmZ1bmN0aW9uKCl7fX0se2tleToib25LZXl1cCIsdmFsdWU6ZnVuY3Rpb24oZCl7dGhpcy5vcHRpb25zLnZhbHVlPWQudGFyZ2V0LnZhbHVlfX1dLFt7a2V5OiJERUZBVUxUUyIs'@;
put 'Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUwKHtwbGFjZWhvbGRlcjoiIix0eXBlOiJ0ZXh0Iix0YWdOYW1lOiJpbnB1dCJ9KX19XSksYX0oWTQpO2NvbnN0IEN5PWZndDtmdW5jdGlvbiBTeShsKXtyZXR1cm4oU3k9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBT'@;
put 'eW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5j'@;
put 'dGlvbiBzNGUobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLHBndChmLmtleSks'@;
put 'Zil9fWZ1bmN0aW9uIHBndChsKXt2YXIgYz1mdW5jdGlvbiBtZ3QobCxjKXtpZigib2JqZWN0IiE9PVN5KGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0'@;
put 'IiE9PVN5KGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1TeShjKT9jOlN0'@;
put 'cmluZyhjKX1mdW5jdGlvbiBNeSgpe3JldHVybiBNeT10eXBlb2YgUmVmbGVjdDwidSImJlJlZmxlY3QuZ2V0P1JlZmxlY3QuZ2V0LmJpbmQoKTpmdW5jdGlvbihjLGEsZil7dmFyIGQ9ZnVuY3Rpb24gZ2d0KGwsYyl7Zm9yKDshT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxs'@;
put 'KGwsYykmJm51bGwhPT0obD1XNChsKSk7KTtyZXR1cm4gbH0oYyxhKTtpZihkKXt2YXIgaD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGQsYSk7cmV0dXJuIGguZ2V0P2guZ2V0LmNhbGwoYXJndW1lbnRzLmxlbmd0aDwzP2M6Zik6aC52YWx1ZX19LE15LmFwcGx5KHRoaXMsYXJn'@;
put 'dW1lbnRzKX1mdW5jdGlvbiBrcShsLGMpe3JldHVybihrcT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihmLGQpe3JldHVybiBmLl9fcHJvdG9fXz1kLGZ9KShsLGMpfWZ1bmN0aW9uIHU0ZShsKXtpZih2b2lkIDA9PT1sKXRocm93'@;
put 'IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGx9ZnVuY3Rpb24gVzQobCl7cmV0dXJuKFc0PU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgp'@;
put 'OmZ1bmN0aW9uKGEpe3JldHVybiBhLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpfSkobCl9dmFyIHJQPW5ldyBXZWFrTWFwLHdndD1mdW5jdGlvbihsKXshZnVuY3Rpb24gdmd0KGwsYyl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGMmJm51bGwhPT1jKXRocm93IG5ldyBUeXBl'@;
put 'RXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7bC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShjJiZjLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmwsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZp'@;
put 'bmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGMmJmtxKGwsYyl9KGEsbCk7dmFyIGM9ZnVuY3Rpb24geWd0KGwpe3ZhciBjPWZ1bmN0aW9uIF9ndCgpe2lmKHR5cGVvZiBSZWZsZWN0PiJ1Inx8IVJlZmxlY3QuY29uc3RydWN0fHxSZWZsZWN0LmNvbnN0cnVjdC5zaGFt'@;
put 'KXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLGZ1bmN0aW9uKCl7fSkpLCEwfWNhdGNoe3JldHVybiExfX0oKTtyZXR1cm4gZnVu'@;
put 'Y3Rpb24oKXt2YXIgZCxmPVc0KGwpO2lmKGMpe3ZhciBoPVc0KHRoaXMpLmNvbnN0cnVjdG9yO2Q9UmVmbGVjdC5jb25zdHJ1Y3QoZixhcmd1bWVudHMsaCl9ZWxzZSBkPWYuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbiBiZ3QobCxjKXtpZihjJiYoIm9iamVjdCI9PT1T'@;
put 'eShjKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGMpKXJldHVybiBjO2lmKHZvaWQgMCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gdTRlKGwpfSh0aGlzLGQpfX0oYSk7ZnVuY3Rp'@;
put 'b24gYShmLGQpe3ZhciBoO3JldHVybiBmdW5jdGlvbiBkZ3QobCxjKXtpZighKGwgaW5zdGFuY2VvZiBjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxhKSxoPWMuY2FsbCh0aGlzLGYscnUoYS5ERUZBVUxUUyxkKSksclAu'@;
put 'c2V0KHU0ZShoKSx7fSksaC5tZW51PW51bGwsaC5pdGVtcz1bXSxoLnJlZ2lzdGVySG9va3MoKSxofXJldHVybiBmdW5jdGlvbiBoZ3QobCxjLGEpe2MmJnM0ZShsLnByb3RvdHlwZSxjKSxhJiZzNGUobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6'@;
put 'ITF9KX0oYSxbe2tleToicmVnaXN0ZXJIb29rcyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzO3RoaXMuYWRkTG9jYWxIb29rKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkNsaWNrKCl9KX19LHtrZXk6InNldEl0ZW1zIix2YWx1ZTpmdW5jdGlvbihkKXt0aGlzLml0ZW1zPXRo'@;
put 'aXMudHJhbnNsYXRlTmFtZXMoZCksdGhpcy5tZW51JiZ0aGlzLm1lbnUuc2V0TWVudUl0ZW1zKHRoaXMuaXRlbXMpfX0se2tleToidHJhbnNsYXRlTmFtZXMiLHZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBoPXRoaXM7cmV0dXJuIFJuKGQsZnVuY3Rpb24obSl7bS5uYW1lPWgudHJhbnNsYXRlSWZQ'@;
put 'b3NzaWJsZShtLm5hbWUpfSksZH19LHtrZXk6ImJ1aWxkIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXM7TXkoVzQoYS5wcm90b3R5cGUpLCJidWlsZCIsdGhpcykuY2FsbCh0aGlzKSx0aGlzLm1lbnU9bmV3IHFLKHRoaXMuaG90LHtjbGFzc05hbWU6Imh0U2VsZWN0VUkgaHRGaWx0ZXJz'@;
put 'Q29uZGl0aW9uc01lbnUiLGtlZXBJblZpZXdwb3J0OiExLHN0YW5kYWxvbmU6ITAsY29udGFpbmVyOnRoaXMub3B0aW9ucy5tZW51Q29udGFpbmVyfSksdGhpcy5tZW51LnNldE1lbnVJdGVtcyh0aGlzLml0ZW1zKTt2YXIgaD1uZXcgWTQodGhpcy5ob3Qse2NsYXNzTmFtZToiaHRVSVNlbGVj'@;
put 'dENhcHRpb24ifSksbT1uZXcgWTQodGhpcy5ob3Qse2NsYXNzTmFtZToiaHRVSVNlbGVjdERyb3Bkb3duIn0pLF89clAuZ2V0KHRoaXMpO18uY2FwdGlvbj1oLF8uY2FwdGlvbkVsZW1lbnQ9aC5lbGVtZW50LF8uZHJvcGRvd249bSxSbihbaCxtXSxmdW5jdGlvbihPKXtyZXR1cm4gZC5fZWxl'@;
put 'bWVudC5hcHBlbmRDaGlsZChPLmVsZW1lbnQpfSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygic2VsZWN0IixmdW5jdGlvbihPKXtyZXR1cm4gZC5vbk1lbnVTZWxlY3QoTyl9KSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJhZnRlckNsb3NlIixmdW5jdGlvbigpe3JldHVybiBkLm9uTWVudUNs'@;
put 'b3NlZCgpfSksdGhpcy51cGRhdGUoKX19LHtrZXk6InVwZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZDt0aGlzLmlzQnVpbHQoKSYmKGQ9dGhpcy5vcHRpb25zLnZhbHVlP3RoaXMub3B0aW9ucy52YWx1ZS5uYW1lOnRoaXMubWVudS5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShxUiksclAu'@;
put 'Z2V0KHRoaXMpLmNhcHRpb25FbGVtZW50LnRleHRDb250ZW50PWQsTXkoVzQoYS5wcm90b3R5cGUpLCJ1cGRhdGUiLHRoaXMpLmNhbGwodGhpcykpfX0se2tleToib3Blbk9wdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgp'@;
put 'O3RoaXMubWVudSYmKHRoaXMubWVudS5vcGVuKCksdGhpcy5tZW51LnNldFBvc2l0aW9uKHtsZWZ0OnRoaXMuaG90LmlzTHRyKCk/ZC5sZWZ0LTU6ZC5sZWZ0LTMxLHRvcDpkLnRvcC0xLHdpZHRoOmQud2lkdGgsaGVpZ2h0OmQuaGVpZ2h0fSkpfX0se2tleToiY2xvc2VPcHRpb25zIix2YWx1'@;
put 'ZTpmdW5jdGlvbigpe3RoaXMubWVudSYmdGhpcy5tZW51LmNsb3NlKCl9fSx7a2V5OiJvbk1lbnVTZWxlY3QiLHZhbHVlOmZ1bmN0aW9uKGQpe2QubmFtZSE9PWJhJiYodGhpcy5vcHRpb25zLnZhbHVlPWQsdGhpcy51cGRhdGUoKSx0aGlzLnJ1bkxvY2FsSG9va3MoInNlbGVjdCIsdGhpcy5v'@;
put 'cHRpb25zLnZhbHVlKSl9fSx7a2V5OiJvbk1lbnVDbG9zZWQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlckNsb3NlIil9fSx7a2V5OiJvbkNsaWNrIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMub3Blbk9wdGlvbnMoKX19LHtrZXk6ImRlc3Ryb3kiLHZhbHVlOmZ1'@;
put 'bmN0aW9uKCl7dGhpcy5tZW51JiYodGhpcy5tZW51LmRlc3Ryb3koKSx0aGlzLm1lbnU9bnVsbCk7dmFyIGQ9clAuZ2V0KHRoaXMpLGg9ZC5jYXB0aW9uLG09ZC5kcm9wZG93bjtoJiZoLmRlc3Ryb3koKSxtJiZtLmRlc3Ryb3koKSxNeShXNChhLnByb3RvdHlwZSksImRlc3Ryb3kiLHRoaXMp'@;
put 'LmNhbGwodGhpcyl9fV0sW3trZXk6IkRFRkFVTFRTIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZTAoe2NsYXNzTmFtZToiaHRVSVNlbGVjdCIsd3JhcEl0OiExfSl9fV0pLGF9KFk0KTtjb25zdCBjNGU9d2d0O2Z1bmN0aW9uIGt5KGwpe3JldHVybihreT0iZnVuY3Rpb24iPT10eXBlb2YgU3lt'@;
put 'Ym9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3lt'@;
put 'Ym9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIGY0ZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmlu'@;
put 'ZVByb3BlcnR5KGwsTWd0KGYua2V5KSxmKX19ZnVuY3Rpb24gTWd0KGwpe3ZhciBjPWZ1bmN0aW9uIGtndChsLGMpe2lmKCJvYmplY3QiIT09a3kobCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxj'@;
put 'fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09a3koZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1'@;
put 'cm4ic3ltYm9sIj09PWt5KGMpP2M6U3RyaW5nKGMpfWZ1bmN0aW9uIGlQKCl7cmV0dXJuIGlQPXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdC5nZXQ/UmVmbGVjdC5nZXQuYmluZCgpOmZ1bmN0aW9uKGMsYSxmKXt2YXIgZD1mdW5jdGlvbiBFZ3QobCxjKXtmb3IoOyFPYmplY3QucHJvdG90'@;
put 'eXBlLmhhc093blByb3BlcnR5LmNhbGwobCxjKSYmbnVsbCE9PShsPUV5KGwpKTspO3JldHVybiBsfShjLGEpO2lmKGQpe3ZhciBoPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZCxhKTtyZXR1cm4gaC5nZXQ/aC5nZXQuY2FsbChhcmd1bWVudHMubGVuZ3RoPDM/YzpmKTpoLnZh'@;
put 'bHVlfX0saVAuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIEVxKGwsYyl7cmV0dXJuKEVxPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGYsZCl7cmV0dXJuIGYuX19wcm90b19fPWQsZn0pKGwsYyl9ZnVuY3Rpb24gRXko'@;
put 'bCl7cmV0dXJuKEV5PU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGEpe3JldHVybiBhLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpfSkobCl9dmFyIElndD1mdW5jdGlvbihsKXshZnVuY3Rpb24geGd0KGwsYyl7'@;
put 'aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGMmJm51bGwhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7bC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShjJiZjLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3Zh'@;
put 'bHVlOmwsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGMmJkVxKGwsYyl9KGEsbCk7dmFyIGM9ZnVuY3Rpb24gQWd0KGwpe3ZhciBjPWZ1bmN0aW9uIERndCgpe2lmKHR5cGVvZiBSZWZsZWN0'@;
put 'PiJ1Inx8IVJlZmxlY3QuY29uc3RydWN0fHxSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtd'@;
put 'LGZ1bmN0aW9uKCl7fSkpLCEwfWNhdGNoe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZCxmPUV5KGwpO2lmKGMpe3ZhciBoPUV5KHRoaXMpLmNvbnN0cnVjdG9yO2Q9UmVmbGVjdC5jb25zdHJ1Y3QoZixhcmd1bWVudHMsaCl9ZWxzZSBkPWYuYXBwbHkodGhpcyxhcmd1bWVu'@;
put 'dHMpO3JldHVybiBmdW5jdGlvbiBUZ3QobCxjKXtpZihjJiYoIm9iamVjdCI9PT1reShjKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGMpKXJldHVybiBjO2lmKHZvaWQgMCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBv'@;
put 'ciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24gT2d0KGwpe2lmKHZvaWQgMD09PWwpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gbH0obCl9KHRoaXMsZCl9fShhKTtm'@;
put 'dW5jdGlvbiBhKGYsZCl7dmFyIGg7cmV0dXJuIGZ1bmN0aW9uIENndChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGEpLChoPWMuY2FsbCh0aGlzLGYse2lkOmQuaWQsc3RhdGVs'@;
put 'ZXNzOiExfSkpLm5hbWU9ZC5uYW1lLGguYWRkU2VwYXJhdG9yPWQuYWRkU2VwYXJhdG9yLGguZWxlbWVudHMucHVzaChuZXcgYzRlKGguaG90LHttZW51Q29udGFpbmVyOmQubWVudUNvbnRhaW5lcn0pKSxoLmVsZW1lbnRzLnB1c2gobmV3IEN5KGguaG90LHtwbGFjZWhvbGRlcjpFJH0pKSxo'@;
put 'LmVsZW1lbnRzLnB1c2gobmV3IEN5KGguaG90LHtwbGFjZWhvbGRlcjp4JH0pKSxoLnJlZ2lzdGVySG9va3MoKSxofXJldHVybiBmdW5jdGlvbiBTZ3QobCxjLGEpe2MmJmY0ZShsLnByb3RvdHlwZSxjKSxhJiZmNGUobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7'@;
put 'd3JpdGFibGU6ITF9KX0oYSxbe2tleToicmVnaXN0ZXJIb29rcyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzO3RoaXMuZ2V0U2VsZWN0RWxlbWVudCgpLmFkZExvY2FsSG9vaygic2VsZWN0IixmdW5jdGlvbihoKXtyZXR1cm4gZC5vbkNvbmRpdGlvblNlbGVjdChoKX0pLHRoaXMuZ2V0'@;
put 'U2VsZWN0RWxlbWVudCgpLmFkZExvY2FsSG9vaygiYWZ0ZXJDbG9zZSIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vblNlbGVjdFVJQ2xvc2VkKCl9KSxSbih0aGlzLmdldElucHV0RWxlbWVudHMoKSxmdW5jdGlvbihoKXtoLmFkZExvY2FsSG9vaygia2V5ZG93biIsZnVuY3Rpb24obSl7cmV0dXJu'@;
put 'IGQub25JbnB1dEtleURvd24obSl9KX0pfX0se2tleToic2V0U3RhdGUiLHZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBoPXRoaXM7aWYodGhpcy5yZXNldCgpLGQpe3ZhciBtPWUwKGQuY29tbWFuZCk7bS5uYW1lLnN0YXJ0c1dpdGgoa3MpJiYobS5uYW1lPXRoaXMuaG90LmdldFRyYW5zbGF0ZWRQ'@;
put 'aHJhc2UobS5uYW1lKSksdGhpcy5nZXRTZWxlY3RFbGVtZW50KCkuc2V0VmFsdWUobSksUm4oZC5hcmdzLGZ1bmN0aW9uKF8sTyl7aWYoTz5tLmlucHV0c0NvdW50LTEpcmV0dXJuITE7dmFyIFg9aC5nZXRJbnB1dEVsZW1lbnQoTyk7WC5zZXRWYWx1ZShfKSxYW20uaW5wdXRzQ291bnQ+Tz8i'@;
put 'c2hvdyI6ImhpZGUiXSgpLE98fHNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gWC5mb2N1cygpfSwxMCl9KX19fSx7a2V5OiJnZXRTdGF0ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmdldFNlbGVjdEVsZW1lbnQoKS5nZXRWYWx1ZSgpfHxlNihlYyksaD1bXTtyZXR1cm4gUm4o'@;
put 'dGhpcy5nZXRJbnB1dEVsZW1lbnRzKCksZnVuY3Rpb24obSxfKXtkLmlucHV0c0NvdW50Pl8mJmgucHVzaChtLmdldFZhbHVlKCkpfSkse2NvbW1hbmQ6ZCxhcmdzOmh9fX0se2tleToidXBkYXRlU3RhdGUiLHZhbHVlOmZ1bmN0aW9uKGQsaCl7dmFyIG09ZTYoZD9kLm5hbWU6ZWMpO3RoaXMu'@;
put 'c3RhdGUuc2V0VmFsdWVBdEluZGV4KGgse2NvbW1hbmQ6bSxhcmdzOmQ/ZC5hcmdzOltdfSksZHx8Um4odGhpcy5nZXRJbnB1dEVsZW1lbnRzKCksZnVuY3Rpb24oXyl7cmV0dXJuIF8uc2V0VmFsdWUobnVsbCl9KX19LHtrZXk6ImdldFNlbGVjdEVsZW1lbnQiLHZhbHVlOmZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIHRoaXMuZWxlbWVudHMuZmlsdGVyKGZ1bmN0aW9uKGQpe3JldHVybiBkIGluc3RhbmNlb2YgYzRlfSlbMF19fSx7a2V5OiJnZXRJbnB1dEVsZW1lbnQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1l'@;
put 'bnRzWzBdOjA7cmV0dXJuIHRoaXMuZ2V0SW5wdXRFbGVtZW50cygpW2RdfX0se2tleToiZ2V0SW5wdXRFbGVtZW50cyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50cy5maWx0ZXIoZnVuY3Rpb24oZCl7cmV0dXJuIGQgaW5zdGFuY2VvZiBDeX0pfX0se2tleToiZ2V0TWVu'@;
put 'dUl0ZW1EZXNjcmlwdG9yIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXM7cmV0dXJue2tleTp0aGlzLmlkLG5hbWU6dGhpcy5uYW1lLGlzQ29tbWFuZDohMSxkaXNhYmxlU2VsZWN0aW9uOiEwLGhpZGRlbjpmdW5jdGlvbigpe3JldHVybiBkLmlzSGlkZGVuKCl9LHJlbmRlcmVyOmZ1bmN0'@;
put 'aW9uKG0sXyxPLFgsYWUscGUpe2dpKF8ucGFyZW50Tm9kZSwiaHRGaWx0ZXJzTWVudUNvbmRpdGlvbiIpLGQuYWRkU2VwYXJhdG9yJiZnaShfLnBhcmVudE5vZGUsImJvcmRlciIpO3ZhciBiZT1kLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIGdpKGJlLCJo'@;
put 'dEZpbHRlcnNNZW51TGFiZWwiKSxiZS50ZXh0Q29udGVudD1wZSxfLmFwcGVuZENoaWxkKGJlKSxfLnBhcmVudE5vZGUuaGFzQXR0cmlidXRlKCJnaG9zdC10YWJsZSIpfHxSbihkLmVsZW1lbnRzLGZ1bmN0aW9uKHhlKXtyZXR1cm4gXy5hcHBlbmRDaGlsZCh4ZS5lbGVtZW50KX0pLF99fX19'@;
put 'LHtrZXk6InJlc2V0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXMuaG90LmdldFBsdWdpbigiZmlsdGVycyIpLmdldFNlbGVjdGVkQ29sdW1uKCksaD1bZTYoZWMpXTtpZihudWxsIT09ZCl7dmFyIG09ZC52aXN1YWxJbmRleDtoPWZ1bmN0aW9uIFhtdChsKXt2YXIgYz1bXSxhPWw7cmV0'@;
put 'dXJuIG40ZVthXXx8KGE9InRleHQiKSxSbihuNGVbYV0sZnVuY3Rpb24oZil7dmFyIGQ7ZD1mPT09YmE/e25hbWU6YmF9OmUwKGU2KGYpKSxjLnB1c2goZCl9KSxjfSh0aGlzLmhvdC5nZXREYXRhVHlwZSgwLG0sdGhpcy5ob3QuY291bnRSb3dzKCksbSkpfVJuKHRoaXMuZ2V0SW5wdXRFbGVt'@;
put 'ZW50cygpLGZ1bmN0aW9uKF8pe3JldHVybiBfLmhpZGUoKX0pLHRoaXMuZ2V0U2VsZWN0RWxlbWVudCgpLnNldEl0ZW1zKGgpLGlQKEV5KGEucHJvdG90eXBlKSwicmVzZXQiLHRoaXMpLmNhbGwodGhpcyksdGhpcy5nZXRTZWxlY3RFbGVtZW50KCkuc2V0VmFsdWUoaFswXSl9fSx7a2V5OiJv'@;
put 'bkNvbmRpdGlvblNlbGVjdCIsdmFsdWU6ZnVuY3Rpb24oZCl7Um4odGhpcy5nZXRJbnB1dEVsZW1lbnRzKCksZnVuY3Rpb24oaCxtKXtoW2QuaW5wdXRzQ291bnQ+bT8ic2hvdyI6ImhpZGUiXSgpLDA9PT1tJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIGguZm9jdXMoKX0sMTApfSks'@;
put 'dGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiLGQpfX0se2tleToib25TZWxlY3RVSUNsb3NlZCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyQ2xvc2UiKX19LHtrZXk6Im9uSW5wdXRLZXlEb3duIix2YWx1ZTpmdW5jdGlvbihkKXtqNyhkLmtleUNvZGUsIkVO'@;
put 'VEVSIik/KHRoaXMucnVuTG9jYWxIb29rcygiYWNjZXB0IiksSGQoZCkpOmo3KGQua2V5Q29kZSwiRVNDQVBFIikmJih0aGlzLnJ1bkxvY2FsSG9va3MoImNhbmNlbCIpLEhkKGQpKX19XSksYX0oWEwpO2NvbnN0IHhxPUlndDt2YXIgb0U9e307ZnVuY3Rpb24gTGd0KGwpe3JldHVybiBvRVts'@;
put 'XS5uYW1lfWZ1bmN0aW9uIEFxKGwsYyxhKXtvRVtsXT17bmFtZTpjLGZ1bmM6YX19dmFyIEc0PSJjb25qdW5jdGlvbiI7QXEoRzQsXyQsZnVuY3Rpb24gRmd0KGwsYyl7cmV0dXJuIGwuZXZlcnkoZnVuY3Rpb24oYSl7cmV0dXJuIGEuZnVuYyhjKX0pfSk7dmFyIG9QPSJkaXNqdW5jdGlvbiI7'@;
put 'QXEob1AsWFIsZnVuY3Rpb24gTmd0KGwsYyl7cmV0dXJuIGwuc29tZShmdW5jdGlvbihhKXtyZXR1cm4gYS5mdW5jKGMpfSl9KTt2YXIgVHE9ImRpc2p1bmN0aW9uV2l0aEV4dHJhQ29uZGl0aW9uIjtmdW5jdGlvbiB4eShsKXtyZXR1cm4oeHk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYm'@;
put 'InN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6'@;
put 'dHlwZW9mIGN9KShsKX1mdW5jdGlvbiBkNGUobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9w'@;
put 'ZXJ0eShsLFVndChmLmtleSksZil9fWZ1bmN0aW9uIFVndChsKXt2YXIgYz1mdW5jdGlvbiBaZ3QobCxjKXtpZigib2JqZWN0IiE9PXh5KGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRl'@;
put 'ZmF1bHQiKTtpZigib2JqZWN0IiE9PXh5KGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5'@;
put 'bWJvbCI9PT14eShjKT9jOlN0cmluZyhjKX1mdW5jdGlvbiBhUCgpe3JldHVybiBhUD10eXBlb2YgUmVmbGVjdDwidSImJlJlZmxlY3QuZ2V0P1JlZmxlY3QuZ2V0LmJpbmQoKTpmdW5jdGlvbihjLGEsZil7dmFyIGQ9ZnVuY3Rpb24gWWd0KGwsYyl7Zm9yKDshT2JqZWN0LnByb3RvdHlwZS5o'@;
put 'YXNPd25Qcm9wZXJ0eS5jYWxsKGwsYykmJm51bGwhPT0obD1BeShsKSk7KTtyZXR1cm4gbH0oYyxhKTtpZihkKXt2YXIgaD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGQsYSk7cmV0dXJuIGguZ2V0P2guZ2V0LmNhbGwoYXJndW1lbnRzLmxlbmd0aDwzP2M6Zik6aC52YWx1ZX19'@;
put 'LGFQLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBPcShsLGMpe3JldHVybihPcT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihmLGQpe3JldHVybiBmLl9fcHJvdG9fXz1kLGZ9KShsLGMpfWZ1bmN0aW9uIGg0ZShsKXtp'@;
put 'Zih2b2lkIDA9PT1sKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGx9ZnVuY3Rpb24gQXkobCl7cmV0dXJuKEF5PU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0'@;
put 'UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGEpe3JldHVybiBhLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpfSkobCl9QXEoVHEsWFIsZnVuY3Rpb24gQmd0KGwsYyl7aWYobC5sZW5ndGg8Myl0aHJvdyBFcnJvcigiT3BlcmF0aW9uIGRvZXNuJ3Qgd29yayBvbiBsZXNz'@;
put 'IHRoZW4gdGhyZWUgY29uZGl0aW9ucy4iKTtyZXR1cm4gbC5zbGljZSgwLGwubGVuZ3RoLTEpLnNvbWUoZnVuY3Rpb24oYSl7cmV0dXJuIGEuZnVuYyhjKX0pJiZsW2wubGVuZ3RoLTFdLmZ1bmMoYyl9KTt2YXIgbFA9bmV3IFdlYWtNYXAscWd0PWZ1bmN0aW9uKGwpeyFmdW5jdGlvbiBXZ3Qo'@;
put 'bCxjKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyYmbnVsbCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtsLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGMmJmMucHJvdG90eXBlLHtjb25zdHJ1Y3Rv'@;
put 'cjp7dmFsdWU6bCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksYyYmT3EobCxjKX0oYSxsKTt2YXIgYz1mdW5jdGlvbiBHZ3QobCl7dmFyIGM9ZnVuY3Rpb24gS2d0KCl7aWYodHlwZW9mIFJl'@;
put 'ZmxlY3Q+InUifHwhUmVmbGVjdC5jb25zdHJ1Y3R8fFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xl'@;
put 'YW4sW10sZnVuY3Rpb24oKXt9KSksITB9Y2F0Y2h7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciBkLGY9QXkobCk7aWYoYyl7dmFyIGg9QXkodGhpcykuY29uc3RydWN0b3I7ZD1SZWZsZWN0LmNvbnN0cnVjdChmLGFyZ3VtZW50cyxoKX1lbHNlIGQ9Zi5hcHBseSh0aGlzLGFy'@;
put 'Z3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uICRndChsLGMpe2lmKGMmJigib2JqZWN0Ij09PXh5KGMpfHwiZnVuY3Rpb24iPT10eXBlb2YgYykpcmV0dXJuIGM7aWYodm9pZCAwIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2Jq'@;
put 'ZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBoNGUobCl9KHRoaXMsZCl9fShhKTtmdW5jdGlvbiBhKGYsZCl7dmFyIGg7cmV0dXJuIGZ1bmN0aW9uIGpndChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5j'@;
put 'dGlvbiIpfSh0aGlzLGEpLGg9Yy5jYWxsKHRoaXMsZixydShhLkRFRkFVTFRTLGQpKSxsUC5zZXQoaDRlKGgpLHt9KSxofXJldHVybiBmdW5jdGlvbiB6Z3QobCxjLGEpe2MmJmQ0ZShsLnByb3RvdHlwZSxjKSxhJiZkNGUobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBl'@;
put 'Iix7d3JpdGFibGU6ITF9KX0oYSxbe2tleToiYnVpbGQiLHZhbHVlOmZ1bmN0aW9uKCl7YVAoQXkoYS5wcm90b3R5cGUpLCJidWlsZCIsdGhpcykuY2FsbCh0aGlzKTt2YXIgZD1sUC5nZXQodGhpcyk7ZC5pbnB1dD10aGlzLl9lbGVtZW50LmZpcnN0Q2hpbGQ7dmFyIGg9dGhpcy5ob3Qucm9v'@;
put 'dERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxhYmVsIik7aC50ZXh0Q29udGVudD10aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUodGhpcy5vcHRpb25zLmxhYmVsLnRleHRDb250ZW50KSxoLmh0bWxGb3I9dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKHRoaXMub3B0aW9ucy5sYWJlbC5odG1sRm9y'@;
put 'KSxkLmxhYmVsPWgsdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChoKSx0aGlzLnVwZGF0ZSgpfX0se2tleToidXBkYXRlIix2YWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMuaXNCdWlsdCgpKXt2YXIgZD1sUC5nZXQodGhpcyk7ZC5pbnB1dC5jaGVja2VkPXRoaXMub3B0aW9ucy5jaGVja2VkLGQu'@;
put 'bGFiZWwudGV4dENvbnRlbnQ9dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKHRoaXMub3B0aW9ucy5sYWJlbC50ZXh0Q29udGVudCl9fX0se2tleToiaXNDaGVja2VkIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuY2hlY2tlZH19LHtrZXk6InNldENoZWNrZWQiLHZhbHVl'@;
put 'OmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLmNoZWNrZWQ9IShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXSx0aGlzLnVwZGF0ZSgpfX0se2tleToiZm9jdXMiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5pc0J1aWx0KCkmJmxQLmdldCh0aGlz'@;
put 'KS5pbnB1dC5mb2N1cygpfX1dLFt7a2V5OiJERUZBVUxUUyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUwKHt0eXBlOiJyYWRpbyIsdGFnTmFtZToiaW5wdXQiLGNsYXNzTmFtZToiaHRVSVJhZGlvIixsYWJlbDp7fX0pfX1dKSxhfShZNCk7Y29uc3QgcDRlPXFndDtmdW5jdGlvbiBUeShsKXty'@;
put 'ZXR1cm4oVHk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5'@;
put 'bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX12YXIgbTRlO2Z1bmN0aW9uIGc0ZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2'@;
put 'YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsZTV0KGYua2V5KSxmKX19ZnVuY3Rpb24gZTV0KGwpe3ZhciBjPWZ1bmN0aW9uIHQ1dChsLGMpe2lmKCJvYmplY3QiIT09VHkobCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJp'@;
put 'bWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09VHkoZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9'@;
put 'PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PVR5KGMpP2M6U3RyaW5nKGMpfWZ1bmN0aW9uIERxKGwsYyl7cmV0dXJuKERxPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGYsZCl7cmV0'@;
put 'dXJuIGYuX19wcm90b19fPWQsZn0pKGwsYyl9ZnVuY3Rpb24gc1AobCl7cmV0dXJuKHNQPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGEpe3JldHVybiBhLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpfSkobCl9'@;
put 'dmFyIGw1dD1mdW5jdGlvbihsKXshZnVuY3Rpb24gbjV0KGwsYyl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGMmJm51bGwhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7bC5wcm90b3R5cGU9T2JqZWN0'@;
put 'LmNyZWF0ZShjJiZjLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmwsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGMmJkRxKGwsYyl9KGEsbCk7dmFyIGM9ZnVuY3Rpb24gcjV0KGwp'@;
put 'e3ZhciBjPWZ1bmN0aW9uIGE1dCgpe2lmKHR5cGVvZiBSZWZsZWN0PiJ1Inx8IVJlZmxlY3QuY29uc3RydWN0fHxSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZh'@;
put 'bHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLGZ1bmN0aW9uKCl7fSkpLCEwfWNhdGNoe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZCxmPXNQKGwpO2lmKGMpe3ZhciBoPXNQKHRoaXMpLmNvbnN0cnVjdG9yO2Q9UmVmbGVjdC5jb25zdHJ1Y3QoZixh'@;
put 'cmd1bWVudHMsaCl9ZWxzZSBkPWYuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbiBpNXQobCxjKXtpZihjJiYoIm9iamVjdCI9PT1UeShjKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGMpKXJldHVybiBjO2lmKHZvaWQgMCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZl'@;
put 'ZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24gbzV0KGwpe2lmKHZvaWQgMD09PWwpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVl'@;
put 'biBjYWxsZWQiKTtyZXR1cm4gbH0obCl9KHRoaXMsZCl9fShhKTtmdW5jdGlvbiBhKGYsZCl7dmFyIGg7cmV0dXJuIGZ1bmN0aW9uIEpndChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0'@;
put 'aGlzLGEpLChoPWMuY2FsbCh0aGlzLGYse2lkOmQuaWQsc3RhdGVsZXNzOiExfSkpLm5hbWU9ZC5uYW1lLGguYnVpbGRPcGVyYXRvcnNFbGVtZW50KCksaH1yZXR1cm4gZnVuY3Rpb24gUWd0KGwsYyxhKXtjJiZnNGUobC5wcm90b3R5cGUsYyksYSYmZzRlKGwsYSksT2JqZWN0LmRlZmluZVBy'@;
put 'b3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGEsW3trZXk6ImdldE1lbnVJdGVtRGVzY3JpcHRvciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzO3JldHVybntrZXk6dGhpcy5pZCxuYW1lOnRoaXMubmFtZSxpc0NvbW1hbmQ6ITEsZGlzYWJsZVNlbGVjdGlvbjohMCxo'@;
put 'aWRkZW46ZnVuY3Rpb24oKXtyZXR1cm4gZC5pc0hpZGRlbigpfSxyZW5kZXJlcjpmdW5jdGlvbihtLF8pe3JldHVybiBnaShfLnBhcmVudE5vZGUsImh0RmlsdGVyc01lbnVPcGVyYXRvcnMiKSxfLnBhcmVudE5vZGUuaGFzQXR0cmlidXRlKCJnaG9zdC10YWJsZSIpfHxSbihkLmVsZW1lbnRz'@;
put 'LGZ1bmN0aW9uKE8pe3JldHVybiBfLmFwcGVuZENoaWxkKE8uZWxlbWVudCl9KSxffX19fSx7a2V5OiJidWlsZE9wZXJhdG9yc0VsZW1lbnQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcyxoPVtHNCxvUF07Um4oaCxmdW5jdGlvbihtKXt2YXIgXz1uZXcgcDRlKGQuaG90LHtuYW1lOiJv'@;
put 'cGVyYXRvciIsbGFiZWw6e2h0bWxGb3I6bSx0ZXh0Q29udGVudDpMZ3QobSl9LHZhbHVlOm0sY2hlY2tlZDptPT09aFswXSxpZDptfSk7Xy5hZGRMb2NhbEhvb2soImNoYW5nZSIsZnVuY3Rpb24oTyl7cmV0dXJuIGQub25SYWRpb0lucHV0Q2hhbmdlKE8pfSksZC5lbGVtZW50cy5wdXNoKF8p'@;
put 'fSl9fSx7a2V5OiJzZXRDaGVja2VkIix2YWx1ZTpmdW5jdGlvbihkKXtpZih0aGlzLmVsZW1lbnRzLmxlbmd0aDxkKXRocm93IEVycm9yKE9sKG00ZXx8KG00ZT1mdW5jdGlvbiBYZ3QobCxjKXtyZXR1cm4gY3x8KGM9bC5zbGljZSgwKSksT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJv'@;
put 'cGVydGllcyhsLHtyYXc6e3ZhbHVlOk9iamVjdC5mcmVlemUoYyl9fSkpfShbIlJhZGlvIGJ1dHRvbiB3aXRoIGluZGV4ICIsIiBkb2Vzbid0IGV4aXN0LiJdKSksZCkpO1JuKHRoaXMuZWxlbWVudHMsZnVuY3Rpb24oaCxtKXtoLnNldENoZWNrZWQobT09PWQpfSl9fSx7a2V5OiJnZXRBY3Rp'@;
put 'dmVPcGVyYXRpb25JZCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmVsZW1lbnRzLmZpbmQoZnVuY3Rpb24oaCl7cmV0dXJuIGggaW5zdGFuY2VvZiBwNGUmJmguaXNDaGVja2VkKCl9KTtyZXR1cm4gZD9kLmdldFZhbHVlKCk6RzR9fSx7a2V5OiJnZXRTdGF0ZSIsdmFsdWU6ZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gdGhpcy5nZXRBY3RpdmVPcGVyYXRpb25JZCgpfX0se2tleToic2V0U3RhdGUiLHZhbHVlOmZ1bmN0aW9uKGQpe3RoaXMucmVzZXQoKSxkJiZ0aGlzLmdldEFjdGl2ZU9wZXJhdGlvbklkKCkhPT1kJiZSbih0aGlzLmVsZW1lbnRzLGZ1bmN0aW9uKGgpe2guc2V0Q2hlY2tl'@;
put 'ZChoLmdldFZhbHVlKCk9PT1kKX0pfX0se2tleToidXBkYXRlU3RhdGUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIG09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOkc0O209PT1UcSYmKG09b1ApLHRoaXMuc3RhdGUuc2V0VmFsdWVBdEluZGV4'@;
put 'KGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLG0pfX0se2tleToicmVzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5zZXRDaGVja2VkKDApfX0se2tleToib25SYWRpb0lucHV0Q2hhbmdlIix2YWx1ZTpmdW5jdGlvbihkKXt0aGlzLnNldFN0YXRlKGQudGFyZ2V0LnZh'@;
put 'bHVlKX19XSksYX0oWEwpO2NvbnN0IHM1dD1sNXQ7ZnVuY3Rpb24gYzV0KGwsYyl7dmFyIGE9bDtyZXR1cm4iIj09PWEmJihhPSIoIi5jb25jYXQoYywiKSIpKSxhfVZjZSgpO3ZhciBJcT1uZXcgU2V0KFsxXSkuaGFzKDEpLGY1dD1JcSYmImZ1bmN0aW9uIj09dHlwZW9mIEFycmF5LmZyb207'@;
put 'ZnVuY3Rpb24gYUUobCl7dmFyIGM9bDtyZXR1cm4gSXEmJihjPW5ldyBTZXQoYykpLGZ1bmN0aW9uKGEpe3JldHVybiBJcT9jLmhhcyhhKTohIX5jLmluZGV4T2YoYSl9fWZ1bmN0aW9uIHk0ZShsKXtyZXR1cm4gbD8/IiJ9ZnVuY3Rpb24gUnEobCl7dmFyIGM9bDtyZXR1cm4oYz1mNXQ/QXJy'@;
put 'YXkuZnJvbShuZXcgU2V0KGMpKTphWShjKSkuc29ydChmdW5jdGlvbihhLGYpe3JldHVybiJudW1iZXIiPT10eXBlb2YgYSYmIm51bWJlciI9PXR5cGVvZiBmP2EtZjphPT09Zj8wOmE+Zj8xOi0xfSl9ZnVuY3Rpb24gYjRlKGwsYyxhLGYpe3ZhciBtLGQ9W10saD1sPT09YztyZXR1cm4gaHx8'@;
put 'KG09YUUoYykpLFJuKGwsZnVuY3Rpb24oXyl7dmFyIE89ITE7KGh8fG0oXykpJiYoTz0hMCk7dmFyIFg9e2NoZWNrZWQ6Tyx2YWx1ZTpfLHZpc3VhbFZhbHVlOmM1dChfLGEpfTtmJiZmKFgpLGQucHVzaChYKX0pLGR9ZnVuY3Rpb24gT3kobCl7cmV0dXJuKE95PSJmdW5jdGlvbiI9PXR5cGVv'@;
put 'ZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBl'@;
put 'PyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gXzRlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3Qu'@;
put 'ZGVmaW5lUHJvcGVydHkobCxwNXQoZi5rZXkpLGYpfX1mdW5jdGlvbiBwNXQobCl7dmFyIGM9ZnVuY3Rpb24gbTV0KGwsYyl7aWYoIm9iamVjdCIhPT1PeShsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2Fs'@;
put 'bChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1PeShmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIp'@;
put 'O3JldHVybiJzeW1ib2wiPT09T3koYyk/YzpTdHJpbmcoYyl9ZnVuY3Rpb24gdVAoKXtyZXR1cm4gdVA9dHlwZW9mIFJlZmxlY3Q8InUiJiZSZWZsZWN0LmdldD9SZWZsZWN0LmdldC5iaW5kKCk6ZnVuY3Rpb24oYyxhLGYpe3ZhciBkPWZ1bmN0aW9uIGc1dChsLGMpe2Zvcig7IU9iamVjdC5w'@;
put 'cm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsLGMpJiZudWxsIT09KGw9RHkobCkpOyk7cmV0dXJuIGx9KGMsYSk7aWYoZCl7dmFyIGg9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihkLGEpO3JldHVybiBoLmdldD9oLmdldC5jYWxsKGFyZ3VtZW50cy5sZW5ndGg8Mz9jOmYp'@;
put 'OmgudmFsdWV9fSx1UC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gTHEobCxjKXtyZXR1cm4oTHE9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZixkKXtyZXR1cm4gZi5fX3Byb3RvX189ZCxmfSkobCxjKX1mdW5jdGlv'@;
put 'biB3NGUobCl7aWYodm9pZCAwPT09bCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBsfWZ1bmN0aW9uIER5KGwpe3JldHVybihEeT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/'@;
put 'T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihhKXtyZXR1cm4gYS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihhKX0pKGwpfVQoNDkyOTUpO3ZhciBQcT1uZXcgV2Vha01hcCx3NXQ9ZnVuY3Rpb24obCl7IWZ1bmN0aW9uIHY1dChsLGMpe2lmKCJmdW5jdGlv'@;
put 'biIhPXR5cGVvZiBjJiZudWxsIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2wucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYyYmYy5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpsLHdyaXRh'@;
put 'YmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxjJiZMcShsLGMpfShhLGwpO3ZhciBjPWZ1bmN0aW9uIHk1dChsKXt2YXIgYz1mdW5jdGlvbiBfNXQoKXtpZih0eXBlb2YgUmVmbGVjdD4idSJ8fCFSZWZs'@;
put 'ZWN0LmNvbnN0cnVjdHx8UmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSxmdW5jdGlvbigp'@;
put 'e30pKSwhMH1jYXRjaHtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGQsZj1EeShsKTtpZihjKXt2YXIgaD1EeSh0aGlzKS5jb25zdHJ1Y3RvcjtkPVJlZmxlY3QuY29uc3RydWN0KGYsYXJndW1lbnRzLGgpfWVsc2UgZD1mLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4g'@;
put 'ZnVuY3Rpb24gYjV0KGwsYyl7aWYoYyYmKCJvYmplY3QiPT09T3koYyl8fCJmdW5jdGlvbiI9PXR5cGVvZiBjKSlyZXR1cm4gYztpZih2b2lkIDAhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVk'@;
put 'Iik7cmV0dXJuIHc0ZShsKX0odGhpcyxkKX19KGEpO2Z1bmN0aW9uIGEoZixkKXt2YXIgaDtyZXR1cm4gZnVuY3Rpb24gZDV0KGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsYSks'@;
put 'aD1jLmNhbGwodGhpcyxmLHJ1KGEuREVGQVVMVFMsZCkpLFBxLnNldCh3NGUoaCkse30pLGh9cmV0dXJuIGZ1bmN0aW9uIGg1dChsLGMsYSl7YyYmXzRlKGwucHJvdG90eXBlLGMpLGEmJl80ZShsLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0p'@;
put 'fShhLFt7a2V5OiJidWlsZCIsdmFsdWU6ZnVuY3Rpb24oKXt1UChEeShhLnByb3RvdHlwZSksImJ1aWxkIix0aGlzKS5jYWxsKHRoaXMpLFBxLmdldCh0aGlzKS5saW5rPXRoaXMuX2VsZW1lbnQuZmlyc3RDaGlsZH19LHtrZXk6InVwZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmlzQnVp'@;
put 'bHQoKSYmKFBxLmdldCh0aGlzKS5saW5rLnRleHRDb250ZW50PXRoaXMudHJhbnNsYXRlSWZQb3NzaWJsZSh0aGlzLm9wdGlvbnMudGV4dENvbnRlbnQpKX19XSxbe2tleToiREVGQVVMVFMiLGdldDpmdW5jdGlvbigpe3JldHVybiBlMCh7aHJlZjoiIyIsdGFnTmFtZToiYSJ9KX19XSksYX0o'@;
put 'WTQpO2NvbnN0IEM0ZT13NXQ7ZnVuY3Rpb24gSXkobCl7cmV0dXJuKEl5PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9'@;
put 'PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gUzRlKGwpe3JldHVybiBmdW5jdGlvbiBrNXQobCl7aWYoQXJyYXkuaXNBcnJheShsKSlyZXR1cm4gRnEobCl9KGwpfHxmdW5j'@;
put 'dGlvbiBNNXQobCl7aWYodHlwZW9mIFN5bWJvbDwidSImJm51bGwhPWxbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9bFsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKGwpfShsKXx8ZnVuY3Rpb24gUzV0KGwsYyl7aWYobCl7aWYoInN0cmluZyI9PXR5cGVvZiBsKXJldHVybiBGcShs'@;
put 'LGMpO3ZhciBhPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsKS5zbGljZSg4LC0xKTtpZigiT2JqZWN0Ij09PWEmJmwuY29uc3RydWN0b3ImJihhPWwuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1hfHwiU2V0Ij09PWEpcmV0dXJuIEFycmF5LmZyb20obCk7aWYoIkFyZ3VtZW50'@;
put 'cyI9PT1hfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChhKSlyZXR1cm4gRnEobCxjKX19KGwpfHxmdW5jdGlvbiBDNXQoKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5c'@;
put 'bkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBGcShsLGMpeyhudWxsPT1jfHxjPmwubGVuZ3RoKSYmKGM9bC5sZW5ndGgpO2Zvcih2YXIgYT0wLGY9bmV3IEFycmF5'@;
put 'KGMpO2E8YzthKyspZlthXT1sW2FdO3JldHVybiBmfWZ1bmN0aW9uIE00ZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCks'@;
put 'T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsQTV0KGYua2V5KSxmKX19ZnVuY3Rpb24gQTV0KGwpe3ZhciBjPWZ1bmN0aW9uIFQ1dChsLGMpe2lmKCJvYmplY3QiIT09SXkobCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIg'@;
put 'Zj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09SXkoZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJz'@;
put 'dHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PUl5KGMpP2M6U3RyaW5nKGMpfWZ1bmN0aW9uIFJ5KCl7cmV0dXJuIFJ5PXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdC5nZXQ/UmVmbGVjdC5nZXQuYmluZCgpOmZ1bmN0aW9uKGMsYSxmKXt2YXIgZD1mdW5jdGlvbiBPNXQobCxjKXtmb3IoOyFP'@;
put 'YmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobCxjKSYmbnVsbCE9PShsPSQ0KGwpKTspO3JldHVybiBsfShjLGEpO2lmKGQpe3ZhciBoPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZCxhKTtyZXR1cm4gaC5nZXQ/aC5nZXQuY2FsbChhcmd1bWVudHMubGVuZ3Ro'@;
put 'PDM/YzpmKTpoLnZhbHVlfX0sUnkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIEhxKGwsYyl7cmV0dXJuKEhxPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGYsZCl7cmV0dXJuIGYuX19wcm90b19fPWQsZn0pKGwsYyl9'@;
put 'ZnVuY3Rpb24gazRlKGwpe2lmKHZvaWQgMD09PWwpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gbH1mdW5jdGlvbiAkNChsKXtyZXR1cm4oJDQ9T2JqZWN0LnNldFByb3Rv'@;
put 'dHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSl9KShsKX12YXIgUDV0PW5ldyBXZWFrTWFwLEg1dD1mdW5jdGlvbihsKXshZnVuY3Rpb24gRDV0KGwsYyl7aWYoImZ1bmN0aW9u'@;
put 'IiE9dHlwZW9mIGMmJm51bGwhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7bC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShjJiZjLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmwsd3JpdGFi'@;
put 'bGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGMmJkhxKGwsYyl9KGEsbCk7dmFyIGM9ZnVuY3Rpb24gSTV0KGwpe3ZhciBjPWZ1bmN0aW9uIEw1dCgpe2lmKHR5cGVvZiBSZWZsZWN0PiJ1Inx8IVJlZmxl'@;
put 'Y3QuY29uc3RydWN0fHxSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLGZ1bmN0aW9uKCl7'@;
put 'fSkpLCEwfWNhdGNoe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZCxmPSQ0KGwpO2lmKGMpe3ZhciBoPSQ0KHRoaXMpLmNvbnN0cnVjdG9yO2Q9UmVmbGVjdC5jb25zdHJ1Y3QoZixhcmd1bWVudHMsaCl9ZWxzZSBkPWYuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBm'@;
put 'dW5jdGlvbiBSNXQobCxjKXtpZihjJiYoIm9iamVjdCI9PT1JeShjKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGMpKXJldHVybiBjO2lmKHZvaWQgMCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQi'@;
put 'KTtyZXR1cm4gazRlKGwpfSh0aGlzLGQpfX0oYSk7ZnVuY3Rpb24gYShmLGQpe3ZhciBoO3JldHVybiBmdW5jdGlvbiBFNXQobCxjKXtpZighKGwgaW5zdGFuY2VvZiBjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxhKSxo'@;
put 'PWMuY2FsbCh0aGlzLGYscnUoYS5ERUZBVUxUUyxkKSksUDV0LnNldChrNGUoaCkse30pLGguc2VhcmNoSW5wdXQ9bmV3IEN5KGguaG90LHtwbGFjZWhvbGRlcjprJCxjbGFzc05hbWU6Imh0VUlNdWx0aXBsZVNlbGVjdFNlYXJjaCJ9KSxoLnNlbGVjdEFsbFVJPW5ldyBDNGUoaC5ob3Qse3Rl'@;
put 'eHRDb250ZW50OnckLGNsYXNzTmFtZToiaHRVSVNlbGVjdEFsbCJ9KSxoLmNsZWFyQWxsVUk9bmV3IEM0ZShoLmhvdCx7dGV4dENvbnRlbnQ6QyQsY2xhc3NOYW1lOiJodFVJQ2xlYXJBbGwifSksaC5pdGVtcz1bXSxoLml0ZW1zQm94PW51bGwsaC5yZWdpc3Rlckhvb2tzKCksaH1yZXR1cm4g'@;
put 'ZnVuY3Rpb24geDV0KGwsYyxhKXtjJiZNNGUobC5wcm90b3R5cGUsYyksYSYmTTRlKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGEsW3trZXk6InJlZ2lzdGVySG9va3MiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpczt0aGlzLnNl'@;
put 'YXJjaElucHV0LmFkZExvY2FsSG9vaygia2V5ZG93biIsZnVuY3Rpb24oaCl7cmV0dXJuIGQub25JbnB1dEtleURvd24oaCl9KSx0aGlzLnNlYXJjaElucHV0LmFkZExvY2FsSG9vaygiaW5wdXQiLGZ1bmN0aW9uKGgpe3JldHVybiBkLm9uSW5wdXQoaCl9KSx0aGlzLnNlbGVjdEFsbFVJLmFk'@;
put 'ZExvY2FsSG9vaygiY2xpY2siLGZ1bmN0aW9uKGgpe3JldHVybiBkLm9uU2VsZWN0QWxsQ2xpY2soaCl9KSx0aGlzLmNsZWFyQWxsVUkuYWRkTG9jYWxIb29rKCJjbGljayIsZnVuY3Rpb24oaCl7cmV0dXJuIGQub25DbGVhckFsbENsaWNrKGgpfSl9fSx7a2V5OiJzZXRJdGVtcyIsdmFsdWU6'@;
put 'ZnVuY3Rpb24oZCl7dGhpcy5pdGVtcz1kLHRoaXMuaXRlbXNCb3gmJnRoaXMuaXRlbXNCb3gubG9hZERhdGEodGhpcy5pdGVtcyl9fSx7a2V5OiJzZXRMb2NhbGUiLHZhbHVlOmZ1bmN0aW9uKGQpe3RoaXMubG9jYWxlPWR9fSx7a2V5OiJnZXRMb2NhbGUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIHRoaXMubG9jYWxlfX0se2tleToiZ2V0SXRlbXMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIFM0ZSh0aGlzLml0ZW1zKX19LHtrZXk6ImdldFZhbHVlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBWNXQobCl7dmFyIGM9W107cmV0dXJuIFJuKGwsZnVuY3Rpb24oYSl7'@;
put 'YS5jaGVja2VkJiZjLnB1c2goYS52YWx1ZSl9KSxjfSh0aGlzLml0ZW1zKX19LHtrZXk6ImlzU2VsZWN0ZWRBbGxWYWx1ZXMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlbXMubGVuZ3RoPT09dGhpcy5nZXRWYWx1ZSgpLmxlbmd0aH19LHtrZXk6ImJ1aWxkIix2YWx1ZTpmdW5j'@;
put 'dGlvbigpe3ZhciBkPXRoaXM7UnkoJDQoYS5wcm90b3R5cGUpLCJidWlsZCIsdGhpcykuY2FsbCh0aGlzKTt2YXIgaD10aGlzLmhvdC5yb290RG9jdW1lbnQsbT1oLmNyZWF0ZUVsZW1lbnQoImRpdiIpLF89bmV3IFk0KHRoaXMuaG90LHtjbGFzc05hbWU6Imh0VUlTZWxlY3Rpb25Db250cm9s'@;
put 'cyIsY2hpbGRyZW46W3RoaXMuc2VsZWN0QWxsVUksdGhpcy5jbGVhckFsbFVJXX0pO3RoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5zZWFyY2hJbnB1dC5lbGVtZW50KSx0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKF8uZWxlbWVudCksdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZCht'@;
put 'KTt2YXIgTz1mdW5jdGlvbihhZSl7ZC5fZWxlbWVudCYmKGQuaXRlbXNCb3gmJmQuaXRlbXNCb3guZGVzdHJveSgpLGdpKGFlLCJodFVJTXVsdGlwbGVTZWxlY3RIb3QiKSxkLml0ZW1zQm94PW5ldyBkLmhvdC5jb25zdHJ1Y3RvcihhZSx7ZGF0YTpkLml0ZW1zLGNvbHVtbnM6W3tkYXRhOiJj'@;
put 'aGVja2VkIix0eXBlOiJjaGVja2JveCIsbGFiZWw6e3Byb3BlcnR5OiJ2aXN1YWxWYWx1ZSIscG9zaXRpb246ImFmdGVyIn19XSxiZWZvcmVSZW5kZXJlcjpmdW5jdGlvbihWZSxaZSxsdCxkdCxndCxqdCl7VmUudGl0bGU9anQuaW5zdGFuY2UuZ2V0RGF0YUF0Um93UHJvcChaZSxqdC5sYWJl'@;
put 'bC5wcm9wZXJ0eSl9LG1heENvbHM6MSxhdXRvV3JhcENvbDohMCxoZWlnaHQ6MTEwLGNvbFdpZHRoczpmdW5jdGlvbigpe3JldHVybiBkLml0ZW1zQm94LmNvbnRhaW5lci5zY3JvbGxXaWR0aC1OdShoKX0sY29weVBhc3RlOiExLGRpc2FibGVWaXN1YWxTZWxlY3Rpb246ImFyZWEiLGZpbGxI'@;
put 'YW5kbGU6ITEsZnJhZ21lbnRTZWxlY3Rpb246ImNlbGwiLHRhYk1vdmVzOntyb3c6MSxjb2w6MH0sbGF5b3V0RGlyZWN0aW9uOmQuaG90LmlzUnRsKCk/InJ0bCI6Imx0ciJ9KSxkLml0ZW1zQm94LmluaXQoKSxkLml0ZW1zQm94LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdy'@;
put 'aWQiKS5hZGRTaG9ydGN1dCh7a2V5czpbWyJFc2NhcGUiXV0sY2FsbGJhY2s6ZnVuY3Rpb24oVmUpe2QucnVuTG9jYWxIb29rcygia2V5ZG93biIsVmUsZCl9LGdyb3VwOiJtdWx0aXBsZVNlbGVjdC5pdGVtQm94In0pKX07TyhtKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIE8obSl9'@;
put 'LDEwMCl9fSx7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnNlYXJjaElucHV0LnJlc2V0KCksdGhpcy5zZWxlY3RBbGxVSS5yZXNldCgpLHRoaXMuY2xlYXJBbGxVSS5yZXNldCgpfX0se2tleToidXBkYXRlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuaXNCdWlsdCgpJiYodGhp'@;
put 'cy5pdGVtc0JveC5sb2FkRGF0YShmdW5jdGlvbiBONXQobCxjKXt2YXIgYT1hRShjKTtyZXR1cm4gaGEobCxmdW5jdGlvbihmKXtyZXR1cm4gZi5jaGVja2VkPWEoZi52YWx1ZSksZn0pfSh0aGlzLml0ZW1zLHRoaXMub3B0aW9ucy52YWx1ZSkpLFJ5KCQ0KGEucHJvdG90eXBlKSwidXBkYXRl'@;
put 'Iix0aGlzKS5jYWxsKHRoaXMpKX19LHtrZXk6ImRlc3Ryb3kiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5pdGVtc0JveCYmdGhpcy5pdGVtc0JveC5kZXN0cm95KCksdGhpcy5zZWFyY2hJbnB1dC5kZXN0cm95KCksdGhpcy5jbGVhckFsbFVJLmRlc3Ryb3koKSx0aGlzLnNlbGVjdEFsbFVJLmRl'@;
put 'c3Ryb3koKSx0aGlzLnNlYXJjaElucHV0PW51bGwsdGhpcy5jbGVhckFsbFVJPW51bGwsdGhpcy5zZWxlY3RBbGxVST1udWxsLHRoaXMuaXRlbXNCb3g9bnVsbCx0aGlzLml0ZW1zPW51bGwsUnkoJDQoYS5wcm90b3R5cGUpLCJkZXN0cm95Iix0aGlzKS5jYWxsKHRoaXMpfX0se2tleToib25J'@;
put 'bnB1dCIsdmFsdWU6ZnVuY3Rpb24oZCl7dmFyIF8saD10aGlzLG09ZC50YXJnZXQudmFsdWUudG9Mb2NhbGVMb3dlckNhc2UodGhpcy5nZXRMb2NhbGUoKSk7Xz0iIj09PW0/UzRlKHRoaXMuaXRlbXMpOkQxKHRoaXMuaXRlbXMsZnVuY3Rpb24oTyl7cmV0dXJuIiIuY29uY2F0KE8udmFsdWUp'@;
put 'LnRvTG9jYWxlTG93ZXJDYXNlKGguZ2V0TG9jYWxlKCkpLmluZGV4T2YobSk+PTB9KSx0aGlzLml0ZW1zQm94LmxvYWREYXRhKF8pfX0se2tleToib25JbnB1dEtleURvd24iLHZhbHVlOmZ1bmN0aW9uKGQpe3RoaXMucnVuTG9jYWxIb29rcygia2V5ZG93biIsZCx0aGlzKSxPWShqNyxkLmtl'@;
put 'eUNvZGUpKCJBUlJPV19ET1dOfFRBQiIpJiYhdGhpcy5pdGVtc0JveC5pc0xpc3RlbmluZygpJiYoSGQoZCksdGhpcy5pdGVtc0JveC5saXN0ZW4oKSx0aGlzLml0ZW1zQm94LnNlbGVjdENlbGwoMCwwKSl9fSx7a2V5OiJvblNlbGVjdEFsbENsaWNrIix2YWx1ZTpmdW5jdGlvbihkKXt2YXIg'@;
put 'aD1bXTtkLnByZXZlbnREZWZhdWx0KCksUm4odGhpcy5pdGVtc0JveC5nZXRTb3VyY2VEYXRhKCksZnVuY3Rpb24obSxfKXttLmNoZWNrZWQ9ITAsaC5wdXNoKFZXKG0sXylbMF0pfSksdGhpcy5pdGVtc0JveC5zZXRTb3VyY2VEYXRhQXRDZWxsKGgpfX0se2tleToib25DbGVhckFsbENsaWNr'@;
put 'Iix2YWx1ZTpmdW5jdGlvbihkKXt2YXIgaD1bXTtkLnByZXZlbnREZWZhdWx0KCksUm4odGhpcy5pdGVtc0JveC5nZXRTb3VyY2VEYXRhKCksZnVuY3Rpb24obSxfKXttLmNoZWNrZWQ9ITEsaC5wdXNoKFZXKG0sXylbMF0pfSksdGhpcy5pdGVtc0JveC5zZXRTb3VyY2VEYXRhQXRDZWxsKGgp'@;
put 'fX1dLFt7a2V5OiJERUZBVUxUUyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUwKHtjbGFzc05hbWU6Imh0VUlNdWx0aXBsZVNlbGVjdCIsdmFsdWU6W119KX19XSksYX0oWTQpO2NvbnN0IEU0ZT1INXQ7ZnVuY3Rpb24geDRlKGwsYyl7cmV0dXJuIGZ1bmN0aW9uIFU1dChsKXtpZihBcnJheS5p'@;
put 'c0FycmF5KGwpKXJldHVybiBsfShsKXx8ZnVuY3Rpb24gejV0KGwsYyl7dmFyIGE9bnVsbD09bD9udWxsOnR5cGVvZiBTeW1ib2w8InUiJiZsW1N5bWJvbC5pdGVyYXRvcl18fGxbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1hKXt2YXIgZixkLGgsbSxfPVtdLE89ITAsWD0hMTt0cnl7aWYoaD0o'@;
put 'YT1hLmNhbGwobCkpLm5leHQsMD09PWMpe2lmKE9iamVjdChhKSE9PWEpcmV0dXJuO089ITF9ZWxzZSBmb3IoOyEoTz0oZj1oLmNhbGwoYSkpLmRvbmUpJiYoXy5wdXNoKGYudmFsdWUpLF8ubGVuZ3RoIT09Yyk7Tz0hMCk7fWNhdGNoKGFlKXtYPSEwLGQ9YWV9ZmluYWxseXt0cnl7aWYoIU8m'@;
put 'Jm51bGwhPWEucmV0dXJuJiYobT1hLnJldHVybigpLE9iamVjdChtKSE9PW0pKXJldHVybn1maW5hbGx5e2lmKFgpdGhyb3cgZH19cmV0dXJuIF99fShsLGMpfHxmdW5jdGlvbiBqNXQobCxjKXtpZihsKXtpZigic3RyaW5nIj09dHlwZW9mIGwpcmV0dXJuIEE0ZShsLGMpO3ZhciBhPU9iamVj'@;
put 'dC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsKS5zbGljZSg4LC0xKTtpZigiT2JqZWN0Ij09PWEmJmwuY29uc3RydWN0b3ImJihhPWwuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1hfHwiU2V0Ij09PWEpcmV0dXJuIEFycmF5LmZyb20obCk7aWYoIkFyZ3VtZW50cyI9PT1hfHwvXig/OlVp'@;
put 'fEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChhKSlyZXR1cm4gQTRlKGwsYyl9fShsLGMpfHxmdW5jdGlvbiBCNXQoKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3Jk'@;
put 'ZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIEE0ZShsLGMpeyhudWxsPT1jfHxjPmwubGVuZ3RoKSYmKGM9bC5sZW5ndGgpO2Zvcih2YXIgYT0wLGY9bmV3IEFycmF5KGMpO2E8'@;
put 'YzthKyspZlthXT1sW2FdO3JldHVybiBmfXZhciB0Nj0iYnlfdmFsdWUiO2Z1bmN0aW9uIEx5KGwpe3JldHVybihMeT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9u'@;
put 'KGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIFQ0ZShsLGMpeyhudWxsPT1jfHxjPmwubGVuZ3RoKSYmKGM9bC5sZW5ndGgpO2Zv'@;
put 'cih2YXIgYT0wLGY9bmV3IEFycmF5KGMpO2E8YzthKyspZlthXT1sW2FdO3JldHVybiBmfWZ1bmN0aW9uIE80ZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJp'@;
put 'biBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsSjV0KGYua2V5KSxmKX19ZnVuY3Rpb24gSjV0KGwpe3ZhciBjPWZ1bmN0aW9uIFE1dChsLGMpe2lmKCJvYmplY3QiIT09THkobCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZl'@;
put 'XTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09THkoZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0'@;
put 'cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PUx5KGMpP2M6U3RyaW5nKGMpfWZ1bmN0aW9uIGNQKCl7cmV0dXJuIGNQPXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdC5nZXQ/UmVmbGVjdC5nZXQuYmluZCgpOmZ1bmN0aW9uKGMsYSxmKXt2YXIgZD1mdW5j'@;
put 'dGlvbiBlNnQobCxjKXtmb3IoOyFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobCxjKSYmbnVsbCE9PShsPVB5KGwpKTspO3JldHVybiBsfShjLGEpO2lmKGQpe3ZhciBoPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZCxhKTtyZXR1cm4gaC5nZXQ/aC5nZXQu'@;
put 'Y2FsbChhcmd1bWVudHMubGVuZ3RoPDM/YzpmKTpoLnZhbHVlfX0sY1AuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIE5xKGwsYyl7cmV0dXJuKE5xPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGYsZCl7cmV0dXJuIGYu'@;
put 'X19wcm90b19fPWQsZn0pKGwsYyl9ZnVuY3Rpb24gUHkobCl7cmV0dXJuKFB5PU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGEpe3JldHVybiBhLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpfSkobCl9b3UodDYs'@;
put 'ZnVuY3Rpb24gWjV0KGwsYyl7cmV0dXJuKDAseDRlKGMsMSlbMF0pKGwudmFsdWUpfSx7bmFtZToiQnkgdmFsdWUiLGlucHV0c0NvdW50OjAsaW5wdXRWYWx1ZXNEZWNvcmF0b3I6ZnVuY3Rpb24oYyl7cmV0dXJuW2FFKHg0ZShjLDEpWzBdKV19LHNob3dPcGVyYXRvcnM6ITF9KTt2YXIgYTZ0'@;
put 'PWZ1bmN0aW9uKGwpeyFmdW5jdGlvbiB0NnQobCxjKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyYmbnVsbCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtsLnByb3RvdHlwZT1PYmplY3QuY3JlYXRl'@;
put 'KGMmJmMucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6bCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksYyYmTnEobCxjKX0oYSxsKTt2YXIgYz1mdW5jdGlvbiBuNnQobCl7dmFyIGM9'@;
put 'ZnVuY3Rpb24gbzZ0KCl7aWYodHlwZW9mIFJlZmxlY3Q+InUifHwhUmVmbGVjdC5jb25zdHJ1Y3R8fFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5j'@;
put 'YWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sZnVuY3Rpb24oKXt9KSksITB9Y2F0Y2h7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciBkLGY9UHkobCk7aWYoYyl7dmFyIGg9UHkodGhpcykuY29uc3RydWN0b3I7ZD1SZWZsZWN0LmNvbnN0cnVjdChmLGFyZ3VtZW50'@;
put 'cyxoKX1lbHNlIGQ9Zi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uIHI2dChsLGMpe2lmKGMmJigib2JqZWN0Ij09PUx5KGMpfHwiZnVuY3Rpb24iPT10eXBlb2YgYykpcmV0dXJuIGM7aWYodm9pZCAwIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0'@;
put 'cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbiBpNnQobCl7aWYodm9pZCAwPT09bCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxl'@;
put 'ZCIpO3JldHVybiBsfShsKX0odGhpcyxkKX19KGEpO2Z1bmN0aW9uIGEoZixkKXt2YXIgaDtyZXR1cm4gZnVuY3Rpb24gcTV0KGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsYSks'@;
put 'KGg9Yy5jYWxsKHRoaXMsZix7aWQ6ZC5pZCxzdGF0ZWxlc3M6ITF9KSkubmFtZT1kLm5hbWUsaC5lbGVtZW50cy5wdXNoKG5ldyBFNGUoaC5ob3QpKSxoLnJlZ2lzdGVySG9va3MoKSxofXJldHVybiBmdW5jdGlvbiBYNXQobCxjLGEpe2MmJk80ZShsLnByb3RvdHlwZSxjKSxhJiZPNGUobCxh'@;
put 'KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0oYSxbe2tleToicmVnaXN0ZXJIb29rcyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzO3RoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCkuYWRkTG9jYWxIb29rKCJrZXlkb3duIixmdW5j'@;
put 'dGlvbihoKXtyZXR1cm4gZC5vbklucHV0S2V5RG93bihoKX0pfX0se2tleToic2V0U3RhdGUiLHZhbHVlOmZ1bmN0aW9uKGQpe2lmKHRoaXMucmVzZXQoKSxkJiZkLmNvbW1hbmQua2V5PT09dDYpe3ZhciBoPXRoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCk7aC5zZXRJdGVtcyhkLml0'@;
put 'ZW1zU25hcHNob3QpLGguc2V0VmFsdWUoZC5hcmdzWzBdKSxoLnNldExvY2FsZShkLmxvY2FsZSl9fX0se2tleToiZ2V0U3RhdGUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKSxoPWQuZ2V0SXRlbXMoKTtyZXR1cm57Y29tbWFuZDp7a2V5'@;
put 'OmQuaXNTZWxlY3RlZEFsbFZhbHVlcygpfHwhaC5sZW5ndGg/ZWM6dDZ9LGFyZ3M6W2QuZ2V0VmFsdWUoKV0saXRlbXNTbmFwc2hvdDpofX19LHtrZXk6InVwZGF0ZVN0YXRlIix2YWx1ZTpmdW5jdGlvbihkKXt2YXIgaD10aGlzLG09ZnVuY3Rpb24oTyxYLGFlLHBlLGJlKXt2YXIgWmU9ZnVu'@;
put 'Y3Rpb24gWTV0KGwsYyl7cmV0dXJuIGZ1bmN0aW9uIEs1dChsKXtpZihBcnJheS5pc0FycmF5KGwpKXJldHVybiBsfShsKXx8ZnVuY3Rpb24gJDV0KGwsYyl7dmFyIGE9bnVsbD09bD9udWxsOnR5cGVvZiBTeW1ib2w8InUiJiZsW1N5bWJvbC5pdGVyYXRvcl18fGxbIkBAaXRlcmF0b3IiXTtp'@;
put 'ZihudWxsIT1hKXt2YXIgZixkLGgsbSxfPVtdLE89ITAsWD0hMTt0cnl7aWYoaD0oYT1hLmNhbGwobCkpLm5leHQsMD09PWMpe2lmKE9iamVjdChhKSE9PWEpcmV0dXJuO089ITF9ZWxzZSBmb3IoOyEoTz0oZj1oLmNhbGwoYSkpLmRvbmUpJiYoXy5wdXNoKGYudmFsdWUpLF8ubGVuZ3RoIT09'@;
put 'Yyk7Tz0hMCk7fWNhdGNoKGFlKXtYPSEwLGQ9YWV9ZmluYWxseXt0cnl7aWYoIU8mJm51bGwhPWEucmV0dXJuJiYobT1hLnJldHVybigpLE9iamVjdChtKSE9PW0pKXJldHVybn1maW5hbGx5e2lmKFgpdGhyb3cgZH19cmV0dXJuIF99fShsLGMpfHxmdW5jdGlvbiBHNXQobCxjKXtpZihsKXtp'@;
put 'Zigic3RyaW5nIj09dHlwZW9mIGwpcmV0dXJuIFQ0ZShsLGMpO3ZhciBhPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsKS5zbGljZSg4LC0xKTtpZigiT2JqZWN0Ij09PWEmJmwuY29uc3RydWN0b3ImJihhPWwuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1hfHwiU2V0Ij09PWEp'@;
put 'cmV0dXJuIEFycmF5LmZyb20obCk7aWYoIkFyZ3VtZW50cyI9PT1hfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChhKSlyZXR1cm4gVDRlKGwsYyl9fShsLGMpfHxmdW5jdGlvbiBXNXQoKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVt'@;
put 'cHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfShEMShYLGZ1bmN0aW9uKHluKXtyZXR1cm4geW4ubmFtZT09'@;
put 'PXQ2fSksMSlbMF0sbHQ9e30sZHQ9aC5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShKUik7aWYoWmUpe3ZhciBndD1ScShoYShwZShPLGJlKSxmdW5jdGlvbih5bil7cmV0dXJuIHluLnZhbHVlfSkpO2FlJiYoWmUuYXJnc1swXT1hZSk7dmFyIGp0PVtdLHJuPWI0ZShndCxaZS5hcmdzWzBdLGR0'@;
put 'LGZ1bmN0aW9uKHluKXt5bi5jaGVja2VkJiZqdC5wdXNoKHluLnZhbHVlKX0pO2x0LmxvY2FsZT1oLmhvdC5nZXRDZWxsTWV0YSgwLGQuZWRpdGVkQ29uZGl0aW9uU3RhY2suY29sdW1uKS5sb2NhbGUsbHQuYXJncz1banRdLGx0LmNvbW1hbmQ9ZTYodDYpLGx0Lml0ZW1zU25hcHNob3Q9cm59'@;
put 'ZWxzZSBsdC5hcmdzPVtdLGx0LmNvbW1hbmQ9ZTYoZWMpO2guc3RhdGUuc2V0VmFsdWVBdEluZGV4KE8sbHQpfTttKGQuZWRpdGVkQ29uZGl0aW9uU3RhY2suY29sdW1uLGQuZWRpdGVkQ29uZGl0aW9uU3RhY2suY29uZGl0aW9ucyxkLmNvbmRpdGlvbkFyZ3NDaGFuZ2UsZC5maWx0ZXJlZFJv'@;
put 'd3NGYWN0b3J5KSxkLmRlcGVuZGVudENvbmRpdGlvblN0YWNrcy5sZW5ndGgmJm0oZC5kZXBlbmRlbnRDb25kaXRpb25TdGFja3NbMF0uY29sdW1uLGQuZGVwZW5kZW50Q29uZGl0aW9uU3RhY2tzWzBdLmNvbmRpdGlvbnMsZC5jb25kaXRpb25BcmdzQ2hhbmdlLGQuZmlsdGVyZWRSb3dzRmFj'@;
put 'dG9yeSxkLmVkaXRlZENvbmRpdGlvblN0YWNrKX19LHtrZXk6ImdldE11bHRpcGxlU2VsZWN0RWxlbWVudCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50cy5maWx0ZXIoZnVuY3Rpb24oZCl7cmV0dXJuIGQgaW5zdGFuY2VvZiBFNGV9KVswXX19LHtrZXk6ImdldE1lbnVJ'@;
put 'dGVtRGVzY3JpcHRvciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzO3JldHVybntrZXk6dGhpcy5pZCxuYW1lOnRoaXMubmFtZSxpc0NvbW1hbmQ6ITEsZGlzYWJsZVNlbGVjdGlvbjohMCxoaWRkZW46ZnVuY3Rpb24oKXtyZXR1cm4gZC5pc0hpZGRlbigpfSxyZW5kZXJlcjpmdW5jdGlv'@;
put 'bihtLF8sTyxYLGFlLHBlKXtnaShfLnBhcmVudE5vZGUsImh0RmlsdGVyc01lbnVWYWx1ZSIpO3ZhciBiZT1kLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIGdpKGJlLCJodEZpbHRlcnNNZW51TGFiZWwiKSxiZS50ZXh0Q29udGVudD1wZSxfLmFwcGVuZENo'@;
put 'aWxkKGJlKSxfLnBhcmVudE5vZGUuaGFzQXR0cmlidXRlKCJnaG9zdC10YWJsZSIpfHxSbihkLmVsZW1lbnRzLGZ1bmN0aW9uKHhlKXtyZXR1cm4gXy5hcHBlbmRDaGlsZCh4ZS5lbGVtZW50KX0pLF99fX19LHtrZXk6InJlc2V0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXMuaG90Lmdl'@;
put 'dFRyYW5zbGF0ZWRQaHJhc2UoSlIpLGg9UnEodGhpcy5fZ2V0Q29sdW1uVmlzaWJsZVZhbHVlcygpKSxtPWI0ZShoLGgsZCk7dGhpcy5nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKS5zZXRJdGVtcyhtKSxjUChQeShhLnByb3RvdHlwZSksInJlc2V0Iix0aGlzKS5jYWxsKHRoaXMpLHRoaXMu'@;
put 'Z2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCkuc2V0VmFsdWUoaCk7dmFyIF89dGhpcy5ob3QuZ2V0UGx1Z2luKCJmaWx0ZXJzIikuZ2V0U2VsZWN0ZWRDb2x1bW4oKTtudWxsIT09XyYmdGhpcy5nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKS5zZXRMb2NhbGUodGhpcy5ob3QuZ2V0Q2VsbE1l'@;
put 'dGEoMCxfLnZpc3VhbEluZGV4KS5sb2NhbGUpfX0se2tleToib25JbnB1dEtleURvd24iLHZhbHVlOmZ1bmN0aW9uKGQpe2o3KGQua2V5Q29kZSwiRVNDQVBFIikmJih0aGlzLnJ1bkxvY2FsSG9va3MoImNhbmNlbCIpLEhkKGQpKX19LHtrZXk6Il9nZXRDb2x1bW5WaXNpYmxlVmFsdWVzIix2'@;
put 'YWx1ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXMuaG90LmdldFBsdWdpbigiZmlsdGVycyIpLmdldFNlbGVjdGVkQ29sdW1uKCk7cmV0dXJuIG51bGw9PT1kP1tdOmhhKHRoaXMuaG90LmdldERhdGFBdENvbChkLnZpc3VhbEluZGV4KSxmdW5jdGlvbihoKXtyZXR1cm4geTRlKGgpfSl9fV0pLGF9'@;
put 'KFhMKTtjb25zdCBsNnQ9YTZ0O2Z1bmN0aW9uIEZ5KGwpe3JldHVybihGeT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24i'@;
put 'PT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIEQ0ZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFi'@;
put 'bGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsYzZ0KGYua2V5KSxmKX19ZnVuY3Rpb24gYzZ0KGwpe3ZhciBjPWZ1bmN0aW9uIGY2dChsLGMpe2lmKCJvYmplY3QiIT09RnkobCl8fG51bGw9PT1sKXJl'@;
put 'dHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09RnkoZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2'@;
put 'ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PUZ5KGMpP2M6U3RyaW5nKGMpfWZ1bmN0aW9uIFZxKGwsYyl7cmV0dXJuKFZxPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBl'@;
put 'T2YuYmluZCgpOmZ1bmN0aW9uKGYsZCl7cmV0dXJuIGYuX19wcm90b19fPWQsZn0pKGwsYyl9ZnVuY3Rpb24gZlAobCl7cmV0dXJuKGZQPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGEpe3JldHVybiBhLl9fcHJvdG9fX3x8T2Jq'@;
put 'ZWN0LmdldFByb3RvdHlwZU9mKGEpfSkobCl9dmFyIHY2dD1mdW5jdGlvbihsKXshZnVuY3Rpb24gZDZ0KGwsYyl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGMmJm51bGwhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1'@;
put 'bmN0aW9uIik7bC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShjJiZjLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmwsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGMmJlZxKGwsYyl9'@;
put 'KGEsbCk7dmFyIGM9ZnVuY3Rpb24gaDZ0KGwpe3ZhciBjPWZ1bmN0aW9uIGc2dCgpe2lmKHR5cGVvZiBSZWZsZWN0PiJ1Inx8IVJlZmxlY3QuY29uc3RydWN0fHxSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7'@;
put 'cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLGZ1bmN0aW9uKCl7fSkpLCEwfWNhdGNoe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZCxmPWZQKGwpO2lmKGMpe3ZhciBoPWZQKHRoaXMpLmNvbnN0cnVj'@;
put 'dG9yO2Q9UmVmbGVjdC5jb25zdHJ1Y3QoZixhcmd1bWVudHMsaCl9ZWxzZSBkPWYuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbiBwNnQobCxjKXtpZihjJiYoIm9iamVjdCI9PT1GeShjKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGMpKXJldHVybiBjO2lmKHZvaWQgMCE9PWMp'@;
put 'dGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24gbTZ0KGwpe2lmKHZvaWQgMD09PWwpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRp'@;
put 'YWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gbH0obCl9KHRoaXMsZCl9fShhKTtmdW5jdGlvbiBhKGYsZCl7dmFyIGg7cmV0dXJuIGZ1bmN0aW9uIHM2dChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxs'@;
put 'IGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGEpLChoPWMuY2FsbCh0aGlzLGYse2lkOmQuaWQsc3RhdGVsZXNzOiEwfSkpLm5hbWU9ZC5uYW1lLGguZWxlbWVudHMucHVzaChuZXcgQ3koaC5ob3Qse3R5cGU6ImJ1dHRvbiIsdmFsdWU6UyQsY2xhc3NOYW1lOiJodFVJQnV0dG9uIGh0'@;
put 'VUlCdXR0b25PSyIsaWRlbnRpZmllcjphLkJVVFRPTl9PS30pKSxoLmVsZW1lbnRzLnB1c2gobmV3IEN5KGguaG90LHt0eXBlOiJidXR0b24iLHZhbHVlOk0kLGNsYXNzTmFtZToiaHRVSUJ1dHRvbiBodFVJQnV0dG9uQ2FuY2VsIixpZGVudGlmaWVyOmEuQlVUVE9OX0NBTkNFTH0pKSxoLnJl'@;
put 'Z2lzdGVySG9va3MoKSxofXJldHVybiBmdW5jdGlvbiB1NnQobCxjLGEpe2MmJkQ0ZShsLnByb3RvdHlwZSxjKSxhJiZENGUobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0oYSxbe2tleToicmVnaXN0ZXJIb29rcyIsdmFsdWU6ZnVuY3Rp'@;
put 'b24oKXt2YXIgZD10aGlzO1JuKHRoaXMuZWxlbWVudHMsZnVuY3Rpb24oaCl7aC5hZGRMb2NhbEhvb2soImNsaWNrIixmdW5jdGlvbihtLF8pe3JldHVybiBkLm9uQnV0dG9uQ2xpY2sobSxfKX0pfSl9fSx7a2V5OiJnZXRNZW51SXRlbURlc2NyaXB0b3IiLHZhbHVlOmZ1bmN0aW9uKCl7dmFy'@;
put 'IGQ9dGhpcztyZXR1cm57a2V5OnRoaXMuaWQsbmFtZTp0aGlzLm5hbWUsaXNDb21tYW5kOiExLGRpc2FibGVTZWxlY3Rpb246ITAsaGlkZGVuOmZ1bmN0aW9uKCl7cmV0dXJuIGQuaXNIaWRkZW4oKX0scmVuZGVyZXI6ZnVuY3Rpb24obSxfKXtyZXR1cm4gZ2koXy5wYXJlbnROb2RlLCJodEZp'@;
put 'bHRlcnNNZW51QWN0aW9uQmFyIiksXy5wYXJlbnROb2RlLmhhc0F0dHJpYnV0ZSgiZ2hvc3QtdGFibGUiKXx8Um4oZC5lbGVtZW50cyxmdW5jdGlvbihPKXtyZXR1cm4gXy5hcHBlbmRDaGlsZChPLmVsZW1lbnQpfSksX319fX0se2tleToiYWNjZXB0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMu'@;
put 'cnVuTG9jYWxIb29rcygiYWNjZXB0Iil9fSx7a2V5OiJjYW5jZWwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJjYW5jZWwiKX19LHtrZXk6Im9uQnV0dG9uQ2xpY2siLHZhbHVlOmZ1bmN0aW9uKGQsaCl7aC5vcHRpb25zLmlkZW50aWZpZXI9PT1hLkJVVFRPTl9PSz90'@;
put 'aGlzLmFjY2VwdCgpOnRoaXMuY2FuY2VsKCl9fV0sW3trZXk6IkJVVFRPTl9PSyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIm9rIn19LHtrZXk6IkJVVFRPTl9DQU5DRUwiLGdldDpmdW5jdGlvbigpe3JldHVybiJjYW5jZWwifX1dKSxhfShYTCk7Y29uc3QgeTZ0PXY2dDtmdW5jdGlvbiBsRShs'@;
put 'KXtyZXR1cm4obEU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09'@;
put 'PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX12YXIgSTRlLFI0ZTtmdW5jdGlvbiBMNGUobCxjKXtyZXR1cm4gZnVuY3Rpb24gQzZ0KGwpe2lmKEFycmF5LmlzQXJyYXkobCkpcmV0dXJuIGx9KGwpfHxmdW5jdGlvbiB3NnQobCxjKXt2YXIgYT1u'@;
put 'dWxsPT1sP251bGw6dHlwZW9mIFN5bWJvbDwidSImJmxbU3ltYm9sLml0ZXJhdG9yXXx8bFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPWEpe3ZhciBmLGQsaCxtLF89W10sTz0hMCxYPSExO3RyeXtpZihoPShhPWEuY2FsbChsKSkubmV4dCwwPT09Yyl7aWYoT2JqZWN0KGEpIT09YSlyZXR1cm47'@;
put 'Tz0hMX1lbHNlIGZvcig7IShPPShmPWguY2FsbChhKSkuZG9uZSkmJihfLnB1c2goZi52YWx1ZSksXy5sZW5ndGghPT1jKTtPPSEwKTt9Y2F0Y2goYWUpe1g9ITAsZD1hZX1maW5hbGx5e3RyeXtpZighTyYmbnVsbCE9YS5yZXR1cm4mJihtPWEucmV0dXJuKCksT2JqZWN0KG0pIT09bSkpcmV0'@;
put 'dXJufWZpbmFsbHl7aWYoWCl0aHJvdyBkfX1yZXR1cm4gX319KGwsYyl8fGZ1bmN0aW9uIF82dChsLGMpe2lmKGwpe2lmKCJzdHJpbmciPT10eXBlb2YgbClyZXR1cm4gUDRlKGwsYyk7dmFyIGE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGwpLnNsaWNlKDgsLTEpO2lmKCJPYmpl'@;
put 'Y3QiPT09YSYmbC5jb25zdHJ1Y3RvciYmKGE9bC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PWF8fCJTZXQiPT09YSlyZXR1cm4gQXJyYXkuZnJvbShsKTtpZigiQXJndW1lbnRzIj09PWF8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KGEpKXJldHVy'@;
put 'biBQNGUobCxjKX19KGwsYyl8fGZ1bmN0aW9uIGI2dCgpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEg'@;
put 'W1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gUDRlKGwsYyl7KG51bGw9PWN8fGM+bC5sZW5ndGgpJiYoYz1sLmxlbmd0aCk7Zm9yKHZhciBhPTAsZj1uZXcgQXJyYXkoYyk7YTxjO2ErKylmW2FdPWxbYV07cmV0dXJuIGZ9ZnVuY3Rpb24gRjRlKGwsYyl7cmV0dXJu'@;
put 'IGN8fChjPWwuc2xpY2UoMCkpLE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobCx7cmF3Ont2YWx1ZTpPYmplY3QuZnJlZXplKGMpfX0pKX1mdW5jdGlvbiBINGUobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5l'@;
put 'bnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLGs2dChmLmtleSksZil9fWZ1bmN0aW9uIGs2dChsKXt2YXIgYz1mdW5jdGlvbiBFNnQobCxjKXtpZigib2JqZWN0IiE9PWxFKGwpfHxudWxs'@;
put 'PT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PWxFKGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBw'@;
put 'cmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1sRShjKT9jOlN0cmluZyhjKX12YXIgTjRlPSJDb25kaXRpb25Db2xsZWN0aW9uLmZpbHRlcmluZ1N0YXRlcyIsVjRlPWZ1bmN0aW9uKCl7'@;
put 'ZnVuY3Rpb24gbChjKXt2YXIgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdOyhmdW5jdGlvbiBTNnQobCxjKXtpZighKGwgaW5zdGFuY2VvZiBjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEg'@;
put 'ZnVuY3Rpb24iKX0pKHRoaXMsbCksdGhpcy5ob3Q9Yyx0aGlzLmlzTWFwUmVnaXN0cmFibGU9YSx0aGlzLmZpbHRlcmluZ1N0YXRlcz1uZXcgelIsITA9PT10aGlzLmlzTWFwUmVnaXN0cmFibGU/dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAoTjRlLHRoaXMuZmlsdGVy'@;
put 'aW5nU3RhdGVzKTp0aGlzLmZpbHRlcmluZ1N0YXRlcy5pbml0KHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE51bWJlck9mSW5kZXhlcygpKX1yZXR1cm4gZnVuY3Rpb24gTTZ0KGwsYyxhKXtjJiZINGUobC5wcm90b3R5cGUsYyksYSYmSDRlKGwsYSksT2JqZWN0LmRlZmluZVByb3Bl'@;
put 'cnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGwsW3trZXk6ImlzRW1wdHkiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmdldEZpbHRlcmVkQ29sdW1ucygpLmxlbmd0aH19LHtrZXk6ImlzTWF0Y2giLHZhbHVlOmZ1bmN0aW9uKGEsZil7dmFyIGQsaD10aGlzLmZp'@;
put 'bHRlcmluZ1N0YXRlcy5nZXRWYWx1ZUF0SW5kZXgoZiksbT1udWxsIT09KGQ9aD8uY29uZGl0aW9ucykmJnZvaWQgMCE9PWQ/ZDpbXSxfPWg/Lm9wZXJhdGlvbjtyZXR1cm4gdGhpcy5pc01hdGNoSW5Db25kaXRpb25zKG0sYSxfKX19LHtrZXk6ImlzTWF0Y2hJbkNvbmRpdGlvbnMiLHZhbHVl'@;
put 'OmZ1bmN0aW9uKGEsZil7cmV0dXJuIWEubGVuZ3RofHxmdW5jdGlvbiBSZ3QobCl7aWYoIW9FW2xdKXRocm93IEVycm9yKCdPcGVyYXRpb24gd2l0aCBpZCAiJy5jb25jYXQobCwnIiBkb2VzIG5vdCBleGlzdC4nKSk7dmFyIGM9b0VbbF0uZnVuYztyZXR1cm4gZnVuY3Rpb24oYSxmKXtyZXR1'@;
put 'cm4gYyhhLGYpfX0oYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOkc0KShhLGYpfX0se2tleToiYWRkQ29uZGl0aW9uIix2YWx1ZTpmdW5jdGlvbihhLGYpe3ZhciBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJd'@;
put 'P2FyZ3VtZW50c1syXTpHNCxoPWFyZ3VtZW50cy5sZW5ndGg+Mz9hcmd1bWVudHNbM106dm9pZCAwLG09dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoMCxhKS5sb2NhbGUsXz1oYShmLmFyZ3MsZnVuY3Rpb24ocGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgcGU/cGUudG9Mb2NhbGVMb3dlckNhc2Uo'@;
put 'bSk6cGV9KSxPPWYubmFtZXx8Zi5jb21tYW5kLmtleTt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZUFkZCIsYSk7dmFyIFg9dGhpcy5nZXRPcGVyYXRpb24oYSk7aWYoWCl7aWYoWCE9PWQpdGhyb3cgRXJyb3IoT2woSTRlfHwoSTRlPUY0ZShbIlRoZSBjb2x1bW4gb2YgaW5kZXggIiwiIGhh'@;
put 'cyBiZWVuIGFscmVhZHkgYXBwbGllZCB3aXRoIGEgYCIsImAgXG4gICAgICAgIGZpbHRlciBvcGVyYXRpb24uIFVzZSBgcmVtb3ZlQ29uZGl0aW9uc2AgdG8gY2xlYXIgdGhlIGN1cnJlbnQgY29uZGl0aW9ucyBhbmQgdGhlbiBhZGQgbmV3IG9uZXMuIFxuICAgICAgICBNaW5kIHRoYXQgeW91'@;
put 'IGNhbm5vdCBtaXggZGlmZmVyZW50IHR5cGVzIG9mIG9wZXJhdGlvbnMgKGZvciBpbnN0YW5jZSwgaWYgeW91IHVzZSBgY29uanVuY3Rpb25gLCBcbiAgICAgICAgdXNlIGl0IGNvbnNlcXVlbnRseSBmb3IgYSBwYXJ0aWN1bGFyIGNvbHVtbikuIl0sWyJUaGUgY29sdW1uIG9mIGluZGV4ICIs'@;
put 'IiBoYXMgYmVlbiBhbHJlYWR5IGFwcGxpZWQgd2l0aCBhIFxcYCIsIlxcYFxceDIwXG4gICAgICAgIGZpbHRlciBvcGVyYXRpb24uIFVzZSBcXGByZW1vdmVDb25kaXRpb25zXFxgIHRvIGNsZWFyIHRoZSBjdXJyZW50IGNvbmRpdGlvbnMgYW5kIHRoZW4gYWRkIG5ldyBvbmVzLlxceDIwXG4g'@;
put 'ICAgICAgIE1pbmQgdGhhdCB5b3UgY2Fubm90IG1peCBkaWZmZXJlbnQgdHlwZXMgb2Ygb3BlcmF0aW9ucyAoZm9yIGluc3RhbmNlLCBpZiB5b3UgdXNlIFxcYGNvbmp1bmN0aW9uXFxgLFxceDIwXG4gICAgICAgIHVzZSBpdCBjb25zZXF1ZW50bHkgZm9yIGEgcGFydGljdWxhciBjb2x1bW4p'@;
put 'LiJdKSksYSxYKSl9ZWxzZSBpZihMbChvRVtkXSkpdGhyb3cgbmV3IEVycm9yKE9sKFI0ZXx8KFI0ZT1GNGUoWyJVbmV4cGVjdGVkIG9wZXJhdGlvbiBuYW1lZCBgIiwiYC4gUG9zc2libGUgb25lcyBhcmUgXG4gICAgICAgIGBkaXNqdW5jdGlvbmAgYW5kIGBjb25qdW5jdGlvbmAuIl0sWyJV'@;
put 'bmV4cGVjdGVkIG9wZXJhdGlvbiBuYW1lZCBcXGAiLCJcXGAuIFBvc3NpYmxlIG9uZXMgYXJlXFx4MjBcbiAgICAgICAgXFxgZGlzanVuY3Rpb25cXGAgYW5kIFxcYGNvbmp1bmN0aW9uXFxgLiJdKSksZCkpO3ZhciBhZT10aGlzLmdldENvbmRpdGlvbnMoYSk7MD09PWFlLmxlbmd0aD90aGlz'@;
put 'LmZpbHRlcmluZ1N0YXRlcy5zZXRWYWx1ZUF0SW5kZXgoYSx7b3BlcmF0aW9uOmQsY29uZGl0aW9uczpbe25hbWU6TyxhcmdzOl8sZnVuYzpaNChPLF8pfV19LGgpOmFlLnB1c2goe25hbWU6TyxhcmdzOl8sZnVuYzpaNChPLF8pfSksdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlckFkZCIsYSl9'@;
put 'fSx7a2V5OiJnZXRDb25kaXRpb25zIix2YWx1ZTpmdW5jdGlvbihhKXt2YXIgZixkO3JldHVybiBudWxsIT09KGY9bnVsbD09PShkPXRoaXMuZmlsdGVyaW5nU3RhdGVzLmdldFZhbHVlQXRJbmRleChhKSl8fHZvaWQgMD09PWQ/dm9pZCAwOmQuY29uZGl0aW9ucykmJnZvaWQgMCE9PWY/Zjpb'@;
put 'XX19LHtrZXk6ImdldE9wZXJhdGlvbiIsdmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGY7cmV0dXJuIG51bGw9PT0oZj10aGlzLmZpbHRlcmluZ1N0YXRlcy5nZXRWYWx1ZUF0SW5kZXgoYSkpfHx2b2lkIDA9PT1mP3ZvaWQgMDpmLm9wZXJhdGlvbn19LHtrZXk6ImdldEZpbHRlcmVkQ29sdW1ucyIs'@;
put 'dmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWx0ZXJpbmdTdGF0ZXMuZ2V0RW50cmllcygpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gTDRlKGEsMSlbMF19KX19LHtrZXk6ImdldENvbHVtblN0YWNrUG9zaXRpb24iLHZhbHVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmdldEZpbHRl'@;
put 'cmVkQ29sdW1ucygpLmluZGV4T2YoYSl9fSx7a2V5OiJleHBvcnRBbGxDb25kaXRpb25zIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBQcyh0aGlzLmZpbHRlcmluZ1N0YXRlcy5nZXRFbnRyaWVzKCksZnVuY3Rpb24oYSxmKXt2YXIgZD1MNGUoZiwyKSxtPWRbMV07cmV0dXJuIGEucHVzaCh7'@;
put 'Y29sdW1uOmRbMF0sb3BlcmF0aW9uOm0ub3BlcmF0aW9uLGNvbmRpdGlvbnM6aGEobS5jb25kaXRpb25zLGZ1bmN0aW9uKFgpe3JldHVybntuYW1lOlgubmFtZSxhcmdzOlguYXJnc319KX0pLGF9LFtdKX19LHtrZXk6ImltcG9ydEFsbENvbmRpdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKGEpe3Zh'@;
put 'ciBmPXRoaXM7dGhpcy5jbGVhbigpLFJuKGEsZnVuY3Rpb24oZCl7Um4oZC5jb25kaXRpb25zLGZ1bmN0aW9uKGgpe3JldHVybiBmLmFkZENvbmRpdGlvbihkLmNvbHVtbixoKX0pfSl9fSx7a2V5OiJyZW1vdmVDb25kaXRpb25zIix2YWx1ZTpmdW5jdGlvbihhKXt0aGlzLnJ1bkxvY2FsSG9v'@;
put 'a3MoImJlZm9yZVJlbW92ZSIsYSksdGhpcy5maWx0ZXJpbmdTdGF0ZXMuY2xlYXJWYWx1ZShhKSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyUmVtb3ZlIixhKX19LHtrZXk6ImNsZWFuIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlQ2xlYW4iKSx0aGlzLmZp'@;
put 'bHRlcmluZ1N0YXRlcy5jbGVhcigpLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJDbGVhbiIpfX0se2tleToiaGFzQ29uZGl0aW9ucyIsdmFsdWU6ZnVuY3Rpb24oYSxmKXt2YXIgZD10aGlzLmdldENvbmRpdGlvbnMoYSk7cmV0dXJuIGY/ZC5zb21lKGZ1bmN0aW9uKGgpe3JldHVybiBoLm5h'@;
put 'bWU9PT1mfSk6ZC5sZW5ndGg+MH19LHtrZXk6ImRlc3Ryb3kiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5pc01hcFJlZ2lzdHJhYmxlJiZ0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKE40ZSksdGhpcy5maWx0ZXJpbmdTdGF0ZXM9bnVsbCx0aGlzLmNsZWFyTG9jYWxI'@;
put 'b29rcygpfX1dKSxsfSgpO1RsKFY0ZSxXMCk7Y29uc3QgQjRlPVY0ZTtmdW5jdGlvbiBzRShsKXtyZXR1cm4oc0U9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihj'@;
put 'KXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiBqNGUobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtm'@;
put 'LmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLFQ2dChmLmtleSksZil9fWZ1bmN0aW9uIFQ2dChsKXt2YXIgYz1mdW5jdGlvbiBPNnQobCxjKXtpZigib2JqZWN0'@;
put 'IiE9PXNFKGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PXNFKGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUg'@;
put 'bXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1zRShjKT9jOlN0cmluZyhjKX12YXIgRDZ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbChjKXt2YXIgYT1hcmd1bWVu'@;
put 'dHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06ZnVuY3Rpb24oKXtyZXR1cm5bXX07KGZ1bmN0aW9uIHg2dChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIp'@;
put 'fSkodGhpcyxsKSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb249Yyx0aGlzLmNvbHVtbkRhdGFGYWN0b3J5PWF9cmV0dXJuIGZ1bmN0aW9uIEE2dChsLGMsYSl7YyYmajRlKGwucHJvdG90eXBlLGMpLGEmJmo0ZShsLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0'@;
put 'YWJsZTohMX0pfShsLFt7a2V5OiJmaWx0ZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxmPVtdO3JldHVybiBSbih0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0RmlsdGVyZWRDb2x1bW5zKCksZnVuY3Rpb24oZCxoKXt2YXIgbT1hLmNvbHVtbkRhdGFGYWN0b3J5KGQpO2gmJiht'@;
put 'PWEuX2dldEludGVyc2VjdERhdGEobSxmKSksZj1hLmZpbHRlckJ5Q29sdW1uKGQsbSl9KSxmfX0se2tleToiZmlsdGVyQnlDb2x1bW4iLHZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBmPXRoaXMsaD1bXTtyZXR1cm4gUm4oYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/'@;
put 'YXJndW1lbnRzWzFdOltdLGZ1bmN0aW9uKG0pe3ZvaWQgMCE9PW0mJmYuY29uZGl0aW9uQ29sbGVjdGlvbi5pc01hdGNoKG0sYSkmJmgucHVzaChtKX0pLGh9fSx7a2V5OiJfZ2V0SW50ZXJzZWN0RGF0YSIsdmFsdWU6ZnVuY3Rpb24oYSxmKXt2YXIgZD1bXTtyZXR1cm4gUm4oZixmdW5jdGlv'@;
put 'bihoKXt2YXIgbT1oLm1ldGEudmlzdWFsUm93O3ZvaWQgMCE9PWFbbV0mJihkW21dPWFbbV0pfSksZH19XSksbH0oKTtjb25zdCB6NGU9RDZ0O2Z1bmN0aW9uIHVFKGwpe3JldHVybih1RT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRv'@;
put 'cj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIFU0ZShsLGMp'@;
put 'e2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsTDZ0KGYua2V5KSxmKX19ZnVuY3Rpb24g'@;
put 'TDZ0KGwpe3ZhciBjPWZ1bmN0aW9uIFA2dChsLGMpe2lmKCJvYmplY3QiIT09dUUobCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09dUUoZikpcmV0'@;
put 'dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PXVFKGMpP2M6U3RyaW5nKGMpfXZhciBa'@;
put 'NGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKGMsYSl7dmFyIGY9dGhpcyxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpmdW5jdGlvbigpe3JldHVybltdfTsoZnVuY3Rpb24gSTZ0KGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cg'@;
put 'bmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLGwpLHRoaXMuaG90PWMsdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uPWEsdGhpcy5jb2x1bW5EYXRhRmFjdG9yeT1kLHRoaXMuY2hhbmdlcz1bXSx0aGlzLmdyb3VwaW5nPSExLHRoaXMubGF0'@;
put 'ZXN0RWRpdGVkQ29sdW1uUG9zaXRpb249LTEsdGhpcy5sYXRlc3RPcmRlclN0YWNrPVtdLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRMb2NhbEhvb2soImJlZm9yZVJlbW92ZSIsZnVuY3Rpb24oaCl7cmV0dXJuIGYuX29uQ29uZGl0aW9uQmVmb3JlTW9kaWZ5KGgpfSksdGhpcy5jb25k'@;
put 'aXRpb25Db2xsZWN0aW9uLmFkZExvY2FsSG9vaygiYWZ0ZXJSZW1vdmUiLGZ1bmN0aW9uKGgpe3JldHVybiBmLnVwZGF0ZVN0YXRlc0F0Q29sdW1uKGgpfSksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZExvY2FsSG9vaygiYWZ0ZXJBZGQiLGZ1bmN0aW9uKGgpe3JldHVybiBmLnVwZGF0'@;
put 'ZVN0YXRlc0F0Q29sdW1uKGgpfSksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZExvY2FsSG9vaygiYmVmb3JlQ2xlYW4iLGZ1bmN0aW9uKCl7cmV0dXJuIGYuX29uQ29uZGl0aW9uQmVmb3JlQ2xlYW4oKX0pLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVy'@;
put 'Q2xlYW4iLGZ1bmN0aW9uKCl7cmV0dXJuIGYuX29uQ29uZGl0aW9uQWZ0ZXJDbGVhbigpfSl9cmV0dXJuIGZ1bmN0aW9uIFI2dChsLGMsYSl7YyYmVTRlKGwucHJvdG90eXBlLGMpLGEmJlU0ZShsLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0p'@;
put 'fShsLFt7a2V5OiJncm91cENoYW5nZXMiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5ncm91cGluZz0hMH19LHtrZXk6ImZsdXNoIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXM7dGhpcy5ncm91cGluZz0hMSxSbih0aGlzLmNoYW5nZXMsZnVuY3Rpb24oZil7YS51cGRhdGVTdGF0ZXNBdENv'@;
put 'bHVtbihmKX0pLHRoaXMuY2hhbmdlcy5sZW5ndGg9MH19LHtrZXk6Il9vbkNvbmRpdGlvbkJlZm9yZU1vZGlmeSIsdmFsdWU6ZnVuY3Rpb24oYSl7dGhpcy5sYXRlc3RFZGl0ZWRDb2x1bW5Qb3NpdGlvbj10aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0Q29sdW1uU3RhY2tQb3NpdGlvbihh'@;
put 'KX19LHtrZXk6InVwZGF0ZVN0YXRlc0F0Q29sdW1uIix2YWx1ZTpmdW5jdGlvbihhLGYpe3ZhciBkPXRoaXM7aWYodGhpcy5ncm91cGluZyktMT09PXRoaXMuY2hhbmdlcy5pbmRleE9mKGEpJiZ0aGlzLmNoYW5nZXMucHVzaChhKTtlbHNle3ZhciBoPXRoaXMuY29uZGl0aW9uQ29sbGVjdGlv'@;
put 'bi5leHBvcnRBbGxDb25kaXRpb25zKCksbT10aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0Q29sdW1uU3RhY2tQb3NpdGlvbihhKTstMT09PW0mJihtPXRoaXMubGF0ZXN0RWRpdGVkQ29sdW1uUG9zaXRpb24pO3ZhciBfPWguc2xpY2UoMCxtKSxPPWguc2xpY2UobSk7Ty5sZW5ndGgmJk9b'@;
put 'MF0uY29sdW1uPT09YSYmTy5zaGlmdCgpO3ZhciBYPWswZShmdW5jdGlvbihwZSxiZSl7dmFyIHhlPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpbXSxWZT1uZXcgQjRlKGQuaG90LCExKSxaZT1bXS5jb25jYXQocGUseGUpO1ZlLmltcG9y'@;
put 'dEFsbENvbmRpdGlvbnMoWmUpO3ZhciBsdD1kLmNvbHVtbkRhdGFGYWN0b3J5KGJlKSxndD1hRShoYShWZS5pc0VtcHR5KCk/bHQ6bmV3IHo0ZShWZSxmdW5jdGlvbihqdCl7cmV0dXJuIGQuY29sdW1uRGF0YUZhY3RvcnkoanQpfSkuZmlsdGVyKCksZnVuY3Rpb24oanQpe3JldHVybiBqdC5t'@;
put 'ZXRhLnZpc3VhbFJvd30pKTtyZXR1cm4gVmUuZGVzdHJveSgpLEQxKGx0LGZ1bmN0aW9uKGp0KXtyZXR1cm4gZ3QoanQubWV0YS52aXN1YWxSb3cpfSl9KShfKSxhZT1bXS5jb25jYXQodGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmdldENvbmRpdGlvbnMoYSkpO3RoaXMucnVuTG9jYWxIb29r'@;
put 'cygidXBkYXRlIix7ZWRpdGVkQ29uZGl0aW9uU3RhY2s6e2NvbHVtbjphLGNvbmRpdGlvbnM6YWV9LGRlcGVuZGVudENvbmRpdGlvblN0YWNrczpPLGZpbHRlcmVkUm93c0ZhY3Rvcnk6WCxjb25kaXRpb25BcmdzQ2hhbmdlOmZ9KX19fSx7a2V5OiJfb25Db25kaXRpb25CZWZvcmVDbGVhbiIs'@;
put 'dmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmxhdGVzdE9yZGVyU3RhY2s9dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmdldEZpbHRlcmVkQ29sdW1ucygpfX0se2tleToiX29uQ29uZGl0aW9uQWZ0ZXJDbGVhbiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzO1JuKHRoaXMubGF0ZXN0T3JkZXJT'@;
put 'dGFjayxmdW5jdGlvbihmKXthLnVwZGF0ZVN0YXRlc0F0Q29sdW1uKGYpfSl9fSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXM7dGhpcy5jbGVhckxvY2FsSG9va3MoKSxtYSh0aGlzLGZ1bmN0aW9uKGYsZCl7YVtkXT1udWxsfSl9fV0pLGx9KCk7VGwoWjRlLFcw'@;
put 'KTtjb25zdCBGNnQ9WjRlO2Z1bmN0aW9uIEh5KGwpe3JldHVybihIeT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10'@;
put 'eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfXZhciBZNGU7ZnVuY3Rpb24gVzRlKGwsYyl7KG51bGw9PWN8fGM+bC5sZW5ndGgpJiYoYz1sLmxlbmd0aCk7Zm9yKHZhciBhPTAsZj1uZXcgQXJy'@;
put 'YXkoYyk7YTxjO2ErKylmW2FdPWxbYV07cmV0dXJuIGZ9ZnVuY3Rpb24gRzRlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEw'@;
put 'KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxZNnQoZi5rZXkpLGYpfX1mdW5jdGlvbiBZNnQobCl7dmFyIGM9ZnVuY3Rpb24gVzZ0KGwsYyl7aWYoIm9iamVjdCIhPT1IeShsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3Zh'@;
put 'ciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1IeShmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGws'@;
put 'InN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09SHkoYyk/YzpTdHJpbmcoYyl9ZnVuY3Rpb24gTnkoKXtyZXR1cm4gTnk9dHlwZW9mIFJlZmxlY3Q8InUiJiZSZWZsZWN0LmdldD9SZWZsZWN0LmdldC5iaW5kKCk6ZnVuY3Rpb24oYyxhLGYpe3ZhciBkPWZ1bmN0aW9uIEc2dChsLGMpe2Zvcig7'@;
put 'IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsLGMpJiZudWxsIT09KGw9SzQobCkpOyk7cmV0dXJuIGx9KGMsYSk7aWYoZCl7dmFyIGg9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihkLGEpO3JldHVybiBoLmdldD9oLmdldC5jYWxsKGFyZ3VtZW50cy5sZW5n'@;
put 'dGg8Mz9jOmYpOmgudmFsdWV9fSxOeS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gQnEobCxjKXtyZXR1cm4oQnE9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZixkKXtyZXR1cm4gZi5fX3Byb3RvX189ZCxmfSkobCxj'@;
put 'KX1mdW5jdGlvbiAkNGUobCl7aWYodm9pZCAwPT09bCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBsfWZ1bmN0aW9uIEs0KGwpe3JldHVybihLND1PYmplY3Quc2V0UHJv'@;
put 'dG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihhKXtyZXR1cm4gYS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihhKX0pKGwpfXZhciBRNnQ9ZnVuY3Rpb24obCl7IWZ1bmN0aW9uICQ2dChsLGMpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjJiZu'@;
put 'dWxsIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2wucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYyYmYy5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpsLHdyaXRhYmxlOiEwLGNvbmZpZ3Vy'@;
put 'YWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxjJiZCcShsLGMpfShhLGwpO3ZhciBjPWZ1bmN0aW9uIEs2dChsKXt2YXIgYz1mdW5jdGlvbiBYNnQoKXtpZih0eXBlb2YgUmVmbGVjdD4idSJ8fCFSZWZsZWN0LmNvbnN0cnVjdHx8'@;
put 'UmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSxmdW5jdGlvbigpe30pKSwhMH1jYXRjaHty'@;
put 'ZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGQsZj1LNChsKTtpZihjKXt2YXIgaD1LNCh0aGlzKS5jb25zdHJ1Y3RvcjtkPVJlZmxlY3QuY29uc3RydWN0KGYsYXJndW1lbnRzLGgpfWVsc2UgZD1mLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24gcTZ0KGws'@;
put 'Yyl7aWYoYyYmKCJvYmplY3QiPT09SHkoYyl8fCJmdW5jdGlvbiI9PXR5cGVvZiBjKSlyZXR1cm4gYztpZih2b2lkIDAhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuICQ0ZShs'@;
put 'KX0odGhpcyxkKX19KGEpO2Z1bmN0aW9uIGEoZil7dmFyIGQ7cmV0dXJuIGZ1bmN0aW9uIFU2dChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGEpLChkPWMuY2FsbCh0aGlzLGYp'@;
put 'KS5ldmVudE1hbmFnZXI9bmV3IGZzKCQ0ZShkKSksZC5kcm9wZG93bk1lbnVQbHVnaW49bnVsbCxkLmNvbmRpdGlvbkNvbGxlY3Rpb249bnVsbCxkLmNvbmRpdGlvblVwZGF0ZU9ic2VydmVyPW51bGwsZC5jb21wb25lbnRzPW5ldyBNYXAoW1siZmlsdGVyX2J5X2NvbmRpdGlvbiIsbnVsbF0s'@;
put 'WyJmaWx0ZXJfb3BlcmF0b3JzIixudWxsXSxbImZpbHRlcl9ieV9jb25kaXRpb24yIixudWxsXSxbImZpbHRlcl9ieV92YWx1ZSIsbnVsbF0sWyJmaWx0ZXJfYWN0aW9uX2JhciIsbnVsbF1dKSxkLmZpbHRlcnNSb3dzTWFwPW51bGwsZC5ob3QuYWRkSG9vaygiYWZ0ZXJHZXRDb2xIZWFkZXIi'@;
put 'LGZ1bmN0aW9uKGgsbSl7cmV0dXJuIGQub25BZnRlckdldENvbEhlYWRlcihoLG0pfSksZH1yZXR1cm4gZnVuY3Rpb24gWjZ0KGwsYyxhKXtjJiZHNGUobC5wcm90b3R5cGUsYyksYSYmRzRlKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9'@;
put 'KGEsW3trZXk6ImlzRW5hYmxlZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKCkuZmlsdGVyc319LHtrZXk6ImVuYWJsZVBsdWdpbiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzO2lmKCF0aGlzLmVuYWJsZWQpe3RoaXMuZmlsdGVyc1Jvd3NNYXA9'@;
put 'dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lLG5ldyBITSksdGhpcy5kcm9wZG93bk1lbnVQbHVnaW49dGhpcy5ob3QuZ2V0UGx1Z2luKCJkcm9wZG93bk1lbnUiKTt2YXIgaD10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmRyb3Bkb3duTWVudSxtPWgm'@;
put 'JmgudWlDb250YWluZXJ8fHRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5LF89ZnVuY3Rpb24oeGUpe3JldHVybiB4ZS5hZGRMb2NhbEhvb2soImFjY2VwdCIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkFjdGlvbkJhclN1Ym1pdCgiYWNjZXB0Iil9KSx4ZS5hZGRMb2NhbEhvb2soImNhbmNlbCIs'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkFjdGlvbkJhclN1Ym1pdCgiY2FuY2VsIil9KSx4ZS5hZGRMb2NhbEhvb2soImNoYW5nZSIsZnVuY3Rpb24oVmUpe3JldHVybiBkLm9uQ29tcG9uZW50Q2hhbmdlKHhlLFZlKX0pLHhlfTtpZighdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2Nv'@;
put 'bmRpdGlvbiIpKXt2YXIgYWU9bmV3IHhxKHRoaXMuaG90LHtpZDoiZmlsdGVyX2J5X2NvbmRpdGlvbiIsbmFtZTpmdW5jdGlvbigpe3JldHVybiIiLmNvbmNhdChkLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKHkkKSwiOiIpfSxhZGRTZXBhcmF0b3I6ITEsbWVudUNvbnRhaW5lcjptfSk7YWUu'@;
put 'YWRkTG9jYWxIb29rKCJhZnRlckNsb3NlIixmdW5jdGlvbigpe3JldHVybiBkLm9uU2VsZWN0VUlDbG9zZWQoKX0pLHRoaXMuY29tcG9uZW50cy5zZXQoImZpbHRlcl9ieV9jb25kaXRpb24iLF8oYWUpKX1pZih0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfb3BlcmF0b3JzIil8fHRoaXMu'@;
put 'Y29tcG9uZW50cy5zZXQoImZpbHRlcl9vcGVyYXRvcnMiLG5ldyBzNXQodGhpcy5ob3Qse2lkOiJmaWx0ZXJfb3BlcmF0b3JzIixuYW1lOiJPcGVyYXRvcnMifSkpLCF0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uMiIpKXt2YXIgcGU9bmV3IHhxKHRoaXMuaG90LHtp'@;
put 'ZDoiZmlsdGVyX2J5X2NvbmRpdGlvbjIiLG5hbWU6IiIsYWRkU2VwYXJhdG9yOiEwLG1lbnVDb250YWluZXI6bX0pO3BlLmFkZExvY2FsSG9vaygiYWZ0ZXJDbG9zZSIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vblNlbGVjdFVJQ2xvc2VkKCl9KSx0aGlzLmNvbXBvbmVudHMuc2V0KCJmaWx0ZXJf'@;
put 'YnlfY29uZGl0aW9uMiIsXyhwZSkpfXRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV92YWx1ZSIpfHx0aGlzLmNvbXBvbmVudHMuc2V0KCJmaWx0ZXJfYnlfdmFsdWUiLF8obmV3IGw2dCh0aGlzLmhvdCx7aWQ6ImZpbHRlcl9ieV92YWx1ZSIsbmFtZTpmdW5jdGlvbigpe3JldHVybiIi'@;
put 'LmNvbmNhdChkLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKGIkKSwiOiIpfX0pKSksdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2FjdGlvbl9iYXIiKXx8dGhpcy5jb21wb25lbnRzLnNldCgiZmlsdGVyX2FjdGlvbl9iYXIiLF8obmV3IHk2dCh0aGlzLmhvdCx7aWQ6ImZpbHRlcl9hY3Rp'@;
put 'b25fYmFyIixuYW1lOiJBY3Rpb24gYmFyIn0pKSksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9ufHwodGhpcy5jb25kaXRpb25Db2xsZWN0aW9uPW5ldyBCNGUodGhpcy5ob3QpKSx0aGlzLmNvbmRpdGlvblVwZGF0ZU9ic2VydmVyfHwodGhpcy5jb25kaXRpb25VcGRhdGVPYnNlcnZlcj1uZXcg'@;
put 'RjZ0KHRoaXMuaG90LHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbixmdW5jdGlvbihiZSl7cmV0dXJuIGQuZ2V0RGF0YU1hcEF0Q29sdW1uKGJlKX0pLHRoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXIuYWRkTG9jYWxIb29rKCJ1cGRhdGUiLGZ1bmN0aW9uKGJlKXtyZXR1cm4gZC51cGRhdGVD'@;
put 'b21wb25lbnRzKGJlKX0pKSx0aGlzLmNvbXBvbmVudHMuZm9yRWFjaChmdW5jdGlvbihiZSl7cmV0dXJuIGJlLnNob3coKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlRHJvcGRvd25NZW51U2V0SXRlbXMiLGZ1bmN0aW9uKGJlKXtyZXR1cm4gZC5vbkJlZm9yZURyb3Bkb3duTWVudVNldEl0ZW1z'@;
put 'KGJlKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJEcm9wZG93bk1lbnVEZWZhdWx0T3B0aW9ucyIsZnVuY3Rpb24oYmUpe3JldHVybiBkLm9uQWZ0ZXJEcm9wZG93bk1lbnVEZWZhdWx0T3B0aW9ucyhiZSl9KSx0aGlzLmFkZEhvb2soImFmdGVyRHJvcGRvd25NZW51U2hvdyIsZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gZC5vbkFmdGVyRHJvcGRvd25NZW51U2hvdygpfSksdGhpcy5hZGRIb29rKCJhZnRlckRyb3Bkb3duTWVudUhpZGUiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25BZnRlckRyb3Bkb3duTWVudUhpZGUoKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDaGFuZ2UiLGZ1bmN0aW9uKGJlKXtyZXR1'@;
put 'cm4gZC5vbkFmdGVyQ2hhbmdlKGJlKX0pLHRoaXMuaG90LmdldFNldHRpbmdzKCkuZHJvcGRvd25NZW51JiZ0aGlzLmRyb3Bkb3duTWVudVBsdWdpbiYmKHRoaXMuZHJvcGRvd25NZW51UGx1Z2luLmRpc2FibGVQbHVnaW4oKSx0aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5lbmFibGVQbHVnaW4o'@;
put 'KSksTnkoSzQoYS5wcm90b3R5cGUpLCJlbmFibGVQbHVnaW4iLHRoaXMpLmNhbGwodGhpcyl9fX0se2tleToiZGlzYWJsZVBsdWdpbiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgaCxkPXRoaXM7dGhpcy5lbmFibGVkJiYobnVsbCE9PShoPXRoaXMuZHJvcGRvd25NZW51UGx1Z2luKSYmdm9pZCAw'@;
put 'IT09aCYmaC5lbmFibGVkJiZ0aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5tZW51LmNsZWFyTG9jYWxIb29rcygpLHRoaXMuY29tcG9uZW50cy5mb3JFYWNoKGZ1bmN0aW9uKG0sXyl7bS5kZXN0cm95KCksZC5jb21wb25lbnRzLnNldChfLG51bGwpfSksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9u'@;
put 'LmRlc3Ryb3koKSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb249bnVsbCx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSkpLE55KEs0KGEucHJvdG90eXBlKSwiZGlzYWJsZVBsdWdpbiIsdGhpcykuY2FsbCh0aGlzKX19LHtrZXk6ImFkZENvbmRp'@;
put 'dGlvbiIsdmFsdWU6ZnVuY3Rpb24oZCxoLG0pe3ZhciBfPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTpHNCxPPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oZCk7dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZENvbmRpdGlvbihPLHtj'@;
put 'b21tYW5kOntrZXk6aH0sYXJnczptfSxfKX19LHtrZXk6InJlbW92ZUNvbmRpdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBoPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oZCk7dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLnJlbW92ZUNvbmRpdGlvbnMoaCl9fSx7a2V5OiJjbGVhckNv'@;
put 'bmRpdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKGQpe2lmKHZvaWQgMD09PWQpdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmNsZWFuKCk7ZWxzZXt2YXIgaD10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGQpO3RoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5yZW1vdmVDb25kaXRpb25zKGgpfX19LHtr'@;
put 'ZXk6ImZpbHRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLGg9dGhpcy5fY3JlYXRlRGF0YUZpbHRlcigpLG09IXRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5pc0VtcHR5KCksXz1bXSxPPXRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5leHBvcnRBbGxDb25kaXRpb25zKCk7aWYoITEh'@;
put 'PT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlRmlsdGVyIixPKSlpZihtKXt2YXIgYWU9W107dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oZnVuY3Rpb24oKXtkLmZpbHRlcnNSb3dzTWFwLmNsZWFyKCk7dmFyIHBlPWFFKF89aGEoaC5maWx0ZXIoKSxmdW5jdGlvbihiZSl7cmV0dXJuIGJlLm1l'@;
put 'dGEudmlzdWFsUm93fSkpO19vKGQuaG90LmNvdW50U291cmNlUm93cygpLTEsZnVuY3Rpb24oYmUpe3BlKGJlKXx8YWUucHVzaChiZSl9KSxSbihhZSxmdW5jdGlvbihiZSl7ZC5maWx0ZXJzUm93c01hcC5zZXRWYWx1ZUF0SW5kZXgoYmUsITApfSl9LCEwKSxfLmxlbmd0aHx8dGhpcy5ob3Qu'@;
put 'ZGVzZWxlY3RDZWxsKCl9ZWxzZSB0aGlzLmZpbHRlcnNSb3dzTWFwLmNsZWFyKCk7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyRmlsdGVyIixPKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSghMCksdGhpcy5ob3QucmVuZGVyKCksdGhpcy5jbGVhckNvbHVtblNlbGVjdGlvbigp'@;
put 'fX0se2tleToiZ2V0U2VsZWN0ZWRDb2x1bW4iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQsaD1udWxsPT09KGQ9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWQ/dm9pZCAwOmQuaGlnaGxpZ2h0O3JldHVybiBoP3t2aXN1YWxJbmRleDpoLmNvbCxwaHlzaWNhbElu'@;
put 'ZGV4OnRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oaC5jb2wpfTpudWxsfX0se2tleToiY2xlYXJDb2x1bW5TZWxlY3Rpb24iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5nZXRTZWxlY3RlZENvbHVtbigpO251bGwhPT1kJiZ0aGlzLmhvdC5zZWxlY3RDZWxsKDAsZC52aXN1YWxJbmRl'@;
put 'eCl9fSx7a2V5OiJnZXREYXRhTWFwQXRDb2x1bW4iLHZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBoPXRoaXMsbT10aGlzLmhvdC50b1Zpc3VhbENvbHVtbihkKSxfPVtdO3JldHVybiBSbih0aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXRDb2wobSksZnVuY3Rpb24oTyxYKXt2YXIgYWUscGU9aC5ob3Qu'@;
put 'Z2V0Q2VsbE1ldGEoWCxtKSxiZT1wZS5yb3cseGU9cGUuY29sLFZlPXBlLnZpc3VhbENvbCxaZT1wZS52aXN1YWxSb3csbHQ9cGUudHlwZSxkdD1wZS5pbnN0YW5jZSxndD1wZS5kYXRlRm9ybWF0LGp0PXBlLmxvY2FsZSxybj1udWxsIT09KGFlPWguaG90LmdldERhdGFBdENlbGwoaC5ob3Qu'@;
put 'dG9WaXN1YWxSb3coWCksbSkpJiZ2b2lkIDAhPT1hZT9hZTpPO18ucHVzaCh7bWV0YTp7cm93OmJlLGNvbDp4ZSx2aXN1YWxDb2w6VmUsdmlzdWFsUm93OlplLHR5cGU6bHQsaW5zdGFuY2U6ZHQsZGF0ZUZvcm1hdDpndCxsb2NhbGU6anR9LHZhbHVlOnk0ZShybil9KX0pLF99fSx7a2V5OiJv'@;
put 'bkFmdGVyQ2hhbmdlIix2YWx1ZTpmdW5jdGlvbihkKXt2YXIgaD10aGlzO2QmJlJuKGQsZnVuY3Rpb24obSl7dmFyIF89ZnVuY3Rpb24gTjZ0KGwsYyl7cmV0dXJuIGZ1bmN0aW9uIHo2dChsKXtpZihBcnJheS5pc0FycmF5KGwpKXJldHVybiBsfShsKXx8ZnVuY3Rpb24gajZ0KGwsYyl7dmFy'@;
put 'IGE9bnVsbD09bD9udWxsOnR5cGVvZiBTeW1ib2w8InUiJiZsW1N5bWJvbC5pdGVyYXRvcl18fGxbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1hKXt2YXIgZixkLGgsbSxfPVtdLE89ITAsWD0hMTt0cnl7aWYoaD0oYT1hLmNhbGwobCkpLm5leHQsMD09PWMpe2lmKE9iamVjdChhKSE9PWEpcmV0'@;
put 'dXJuO089ITF9ZWxzZSBmb3IoOyEoTz0oZj1oLmNhbGwoYSkpLmRvbmUpJiYoXy5wdXNoKGYudmFsdWUpLF8ubGVuZ3RoIT09Yyk7Tz0hMCk7fWNhdGNoKGFlKXtYPSEwLGQ9YWV9ZmluYWxseXt0cnl7aWYoIU8mJm51bGwhPWEucmV0dXJuJiYobT1hLnJldHVybigpLE9iamVjdChtKSE9PW0p'@;
put 'KXJldHVybn1maW5hbGx5e2lmKFgpdGhyb3cgZH19cmV0dXJuIF99fShsLGMpfHxmdW5jdGlvbiBCNnQobCxjKXtpZihsKXtpZigic3RyaW5nIj09dHlwZW9mIGwpcmV0dXJuIFc0ZShsLGMpO3ZhciBhPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsKS5zbGljZSg4LC0xKTtpZigi'@;
put 'T2JqZWN0Ij09PWEmJmwuY29uc3RydWN0b3ImJihhPWwuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1hfHwiU2V0Ij09PWEpcmV0dXJuIEFycmF5LmZyb20obCk7aWYoIkFyZ3VtZW50cyI9PT1hfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChhKSly'@;
put 'ZXR1cm4gVzRlKGwsYyl9fShsLGMpfHxmdW5jdGlvbiBWNnQoKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2'@;
put 'ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfShtLDIpLFg9aC5ob3QucHJvcFRvQ29sKF9bMV0pO2guY29uZGl0aW9uQ29sbGVjdGlvbi5oYXNDb25kaXRpb25zKFgpJiZoLnVwZGF0ZVZhbHVlQ29tcG9uZW50Q29uZGl0aW9uKFgpfSl9fSx7a2V5OiJ1cGRhdGVWYWx1ZUNv'@;
put 'bXBvbmVudENvbmRpdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZCl7dmFyIG09UnEodGhpcy5ob3QuZ2V0RGF0YUF0Q29sKGQpKTt0aGlzLmNvbmRpdGlvblVwZGF0ZU9ic2VydmVyLnVwZGF0ZVN0YXRlc0F0Q29sdW1uKGQsbSl9fSx7a2V5OiJyZXN0b3JlQ29tcG9uZW50cyIsdmFsdWU6ZnVuY3Rp'@;
put 'b24oZCl7dmFyIGgsbT1udWxsPT09KGg9dGhpcy5nZXRTZWxlY3RlZENvbHVtbigpKXx8dm9pZCAwPT09aD92b2lkIDA6aC5waHlzaWNhbEluZGV4O2QuZm9yRWFjaChmdW5jdGlvbihfKXtfLmlzSGlkZGVuKCl8fF8ucmVzdG9yZVN0YXRlKG0pfSksdGhpcy51cGRhdGVEZXBlbmRlbnRDb21w'@;
put 'b25lbnRzVmlzaWJpbGl0eSgpfX0se2tleToib25BZnRlckRyb3Bkb3duTWVudVNob3ciLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5yZXN0b3JlQ29tcG9uZW50cyhBcnJheS5mcm9tKHRoaXMuY29tcG9uZW50cy52YWx1ZXMoKSkpfX0se2tleToib25BZnRlckRyb3Bkb3duTWVudUhpZGUiLHZh'@;
put 'bHVlOmZ1bmN0aW9uKCl7dGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbiIpLmdldFNlbGVjdEVsZW1lbnQoKS5jbG9zZU9wdGlvbnMoKSx0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uMiIpLmdldFNlbGVjdEVsZW1lbnQoKS5jbG9zZU9wdGlv'@;
put 'bnMoKX19LHtrZXk6Im9uQmVmb3JlRHJvcGRvd25NZW51U2V0SXRlbXMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpczt0aGlzLmRyb3Bkb3duTWVudVBsdWdpbiYmdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4ubWVudS5hZGRMb2NhbEhvb2soImFmdGVyT3BlbiIsZnVuY3Rpb24oKXtkLmRy'@;
put 'b3Bkb3duTWVudVBsdWdpbi5tZW51LmhvdE1lbnUudXBkYXRlU2V0dGluZ3Moe2hpZGRlblJvd3M6ITB9KX0pfX0se2tleToib25BZnRlckRyb3Bkb3duTWVudURlZmF1bHRPcHRpb25zIix2YWx1ZTpmdW5jdGlvbihkKXtkLml0ZW1zLnB1c2goe25hbWU6YmF9KSx0aGlzLmNvbXBvbmVudHMu'@;
put 'Zm9yRWFjaChmdW5jdGlvbihoKXtkLml0ZW1zLnB1c2goaC5nZXRNZW51SXRlbURlc2NyaXB0b3IoKSl9KX19LHtrZXk6ImdldE9wZXJhdGlvbkJhc2VkT25Bcmd1bWVudHMiLHZhbHVlOmZ1bmN0aW9uKGQsaCxtLF8pe3ZhciBPPWQ7cmV0dXJuIE89PT1vUCYmaC5jb21tYW5kLmtleSE9PWVj'@;
put 'JiZtLmNvbW1hbmQua2V5IT09ZWMmJl8uY29tbWFuZC5rZXkhPT1lYz9PPVRxOl8uY29tbWFuZC5rZXkhPT1lYyYmKGguY29tbWFuZC5rZXk9PT1lY3x8bS5jb21tYW5kLmtleT09PWVjKSYmKE89RzQpLE99fSx7a2V5OiJvbkFjdGlvbkJhclN1Ym1pdCIsdmFsdWU6ZnVuY3Rpb24oZCl7dmFy'@;
put 'IGg7aWYoImFjY2VwdCI9PT1kKXt2YXIgXyxtPXRoaXMuZ2V0U2VsZWN0ZWRDb2x1bW4oKTtpZihudWxsPT09bSlyZXR1cm4gdm9pZChudWxsPT09KF89dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4pfHx2b2lkIDA9PT1ffHxfLmNsb3NlKCkpO3ZhciBPPW0ucGh5c2ljYWxJbmRleCxYPXRoaXMu'@;
put 'Y29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24iKS5nZXRTdGF0ZSgpLGFlPXRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24yIikuZ2V0U3RhdGUoKSxwZT10aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfdmFsdWUiKS5nZXRTdGF0ZSgpLGJlPXRo'@;
put 'aXMuZ2V0T3BlcmF0aW9uQmFzZWRPbkFyZ3VtZW50cyh0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfb3BlcmF0b3JzIikuZ2V0QWN0aXZlT3BlcmF0aW9uSWQoKSxYLGFlLHBlKTt0aGlzLmNvbmRpdGlvblVwZGF0ZU9ic2VydmVyLmdyb3VwQ2hhbmdlcygpO3ZhciB4ZT10aGlzLmNvbmRp'@;
put 'dGlvbkNvbGxlY3Rpb24uZ2V0Q29sdW1uU3RhY2tQb3NpdGlvbihPKTstMT09PXhlJiYoeGU9dm9pZCAwKSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24ucmVtb3ZlQ29uZGl0aW9ucyhPKSxYLmNvbW1hbmQua2V5IT09ZWMmJih0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkQ29uZGl0aW9u'@;
put 'KE8sWCxiZSx4ZSksYWUuY29tbWFuZC5rZXkhPT1lYyYmdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZENvbmRpdGlvbihPLGFlLGJlLHhlKSkscGUuY29tbWFuZC5rZXkhPT1lYyYmdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZENvbmRpdGlvbihPLHBlLGJlLHhlKSx0aGlzLmNvbmRp'@;
put 'dGlvblVwZGF0ZU9ic2VydmVyLmZsdXNoKCksdGhpcy5jb21wb25lbnRzLmZvckVhY2goZnVuY3Rpb24oVmUpe3JldHVybiBWZS5zYXZlU3RhdGUoTyl9KSx0aGlzLmZpbHRlcnNSb3dzTWFwLmNsZWFyKCksdGhpcy5maWx0ZXIoKX1udWxsPT09KGg9dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4p'@;
put 'fHx2b2lkIDA9PT1ofHxoLmNsb3NlKCl9fSx7a2V5OiJvbkNvbXBvbmVudENoYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZCxoKXt0aGlzLnVwZGF0ZURlcGVuZGVudENvbXBvbmVudHNWaXNpYmlsaXR5KCksZC5jb25zdHJ1Y3Rvcj09PXhxJiYhaC5pbnB1dHNDb3VudCYmdGhpcy5zZXRMaXN0ZW5p'@;
put 'bmdEcm9wZG93bk1lbnUoKX19LHtrZXk6Im9uU2VsZWN0VUlDbG9zZWQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5zZXRMaXN0ZW5pbmdEcm9wZG93bk1lbnUoKX19LHtrZXk6InNldExpc3RlbmluZ0Ryb3Bkb3duTWVudSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmRyb3Bkb3duTWVudVBsdWdp'@;
put 'biYmdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4uc2V0TGlzdGVuaW5nKCl9fSx7a2V5OiJ1cGRhdGVEZXBlbmRlbnRDb21wb25lbnRzVmlzaWJpbGl0eSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgbT10aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uIikuZ2V0U3RhdGUoKS5j'@;
put 'b21tYW5kLF89W3RoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24yIiksdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX29wZXJhdG9ycyIpXTttLnNob3dPcGVyYXRvcnM/dGhpcy5zaG93Q29tcG9uZW50cy5hcHBseSh0aGlzLF8pOnRoaXMuaGlkZUNvbXBvbmVudHMu'@;
put 'YXBwbHkodGhpcyxfKX19LHtrZXk6Im9uQWZ0ZXJHZXRDb2xIZWFkZXIiLHZhbHVlOmZ1bmN0aW9uKGQsaCl7dmFyIG09dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihkKTt0aGlzLmVuYWJsZWQmJnRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5oYXNDb25kaXRpb25zKG0pP2dpKGgsImh0Rmls'@;
put 'dGVyc0FjdGl2ZSIpOkpvKGgsImh0RmlsdGVyc0FjdGl2ZSIpfX0se2tleToiX2NyZWF0ZURhdGFGaWx0ZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcztyZXR1cm4gbmV3IHo0ZShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhp'@;
put 'cy5jb25kaXRpb25Db2xsZWN0aW9uLGZ1bmN0aW9uKG0pe3JldHVybiBkLmdldERhdGFNYXBBdENvbHVtbihtKX0pfX0se2tleToidXBkYXRlQ29tcG9uZW50cyIsdmFsdWU6ZnVuY3Rpb24oZCl7dmFyIGg7aWYobnVsbCE9PShoPXRoaXMuZHJvcGRvd25NZW51UGx1Z2luKSYmdm9pZCAwIT09'@;
put 'aCYmaC5lbmFibGVkKXt2YXIgbT1kLmVkaXRlZENvbmRpdGlvblN0YWNrLF89bS5jb25kaXRpb25zLE89bS5jb2x1bW4sWD1fLmZpbHRlcihmdW5jdGlvbihiZSl7cmV0dXJuIGJlLm5hbWU9PT10Nn0pLGFlPV8uZmlsdGVyKGZ1bmN0aW9uKGJlKXtyZXR1cm4gYmUubmFtZSE9PXQ2fSk7aWYo'@;
put 'WC5sZW5ndGg+PTJ8fGFlLmxlbmd0aD49MylXbChPbChZNGV8fChZNGU9ZnVuY3Rpb24gSDZ0KGwsYyl7cmV0dXJuIGN8fChjPWwuc2xpY2UoMCkpLE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobCx7cmF3Ont2YWx1ZTpPYmplY3QuZnJlZXplKGMpfX0pKX0oWyJUaGUg'@;
put 'ZmlsdGVyIGNvbmRpdGlvbnMgaGF2ZSBiZWVuIGFwcGxpZWQgcHJvcGVybHksIGJ1dCBjb3VsZG5cdTIwMTl0IGJlIGRpc3BsYXllZCB2aXN1YWxseS4gXG4gICAgICAgIFRoZSBvdmVyYWxsIGFtb3VudCBvZiBjb25kaXRpb25zIGV4Y2VlZCB0aGUgY2FwYWJpbGl0eSBvZiB0aGUgZHJvcGRv'@;
put 'd24gbWVudS4gXG4gICAgICAgIEZvciBtb3JlIGRldGFpbHMgc2VlIHRoZSBkb2N1bWVudGF0aW9uLiJdLFsiVGhlIGZpbHRlciBjb25kaXRpb25zIGhhdmUgYmVlbiBhcHBsaWVkIHByb3Blcmx5LCBidXQgY291bGRuXHUyMDE5dCBiZSBkaXNwbGF5ZWQgdmlzdWFsbHkuXFx4MjBcbiAgICAg'@;
put 'ICAgVGhlIG92ZXJhbGwgYW1vdW50IG9mIGNvbmRpdGlvbnMgZXhjZWVkIHRoZSBjYXBhYmlsaXR5IG9mIHRoZSBkcm9wZG93biBtZW51LlxceDIwXG4gICAgICAgIEZvciBtb3JlIGRldGFpbHMgc2VlIHRoZSBkb2N1bWVudGF0aW9uLiJdKSkpKTtlbHNle3ZhciBwZT10aGlzLmNvbmRpdGlv'@;
put 'bkNvbGxlY3Rpb24uZ2V0T3BlcmF0aW9uKE8pO3RoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24iKS51cGRhdGVTdGF0ZShhZVswXSxPKSx0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uMiIpLnVwZGF0ZVN0YXRlKGFlWzFdLE8pLHRoaXMuY29t'@;
put 'cG9uZW50cy5nZXQoImZpbHRlcl9vcGVyYXRvcnMiKS51cGRhdGVTdGF0ZShwZSxPKSx0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfdmFsdWUiKS51cGRhdGVTdGF0ZShkKX19fX0se2tleToiZ2V0SW5kZXhlc09mQ29tcG9uZW50cyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD1bXTtp'@;
put 'ZighdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4pcmV0dXJuIGQ7Zm9yKHZhciBoPXRoaXMuZHJvcGRvd25NZW51UGx1Z2luLm1lbnUsbT1hcmd1bWVudHMubGVuZ3RoLF89bmV3IEFycmF5KG0pLE89MDtPPG07TysrKV9bT109YXJndW1lbnRzW09dO3JldHVybiBSbihfLGZ1bmN0aW9uKFgpe1Ju'@;
put 'KGgubWVudUl0ZW1zLGZ1bmN0aW9uKGFlLHBlKXthZS5rZXk9PT1YLmdldE1lbnVJdGVtRGVzY3JpcHRvcigpLmtleSYmZC5wdXNoKHBlKX0pfSksZH19LHtrZXk6ImNoYW5nZUNvbXBvbmVudHNWaXNpYmlsaXR5Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkPSEoYXJndW1lbnRzLmxlbmd0aD4w'@;
put 'JiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF07aWYodGhpcy5kcm9wZG93bk1lbnVQbHVnaW4pe2Zvcih2YXIgbT10aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5tZW51LmhvdE1lbnUsXz1tLmdldFBsdWdpbigiaGlkZGVuUm93cyIpLE89YXJndW1lbnRzLmxlbmd0aCxYPW5l'@;
put 'dyBBcnJheShPPjE/Ty0xOjApLGFlPTE7YWU8TzthZSsrKVhbYWUtMV09YXJndW1lbnRzW2FlXTt2YXIgcGU9dGhpcy5nZXRJbmRleGVzT2ZDb21wb25lbnRzLmFwcGx5KHRoaXMsWCk7ZD9fLnNob3dSb3dzKHBlKTpfLmhpZGVSb3dzKHBlKSxtLnJlbmRlcigpfX19LHtrZXk6ImhpZGVDb21w'@;
put 'b25lbnRzIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLG09MDttPGQ7bSsrKWhbbV09YXJndW1lbnRzW21dO3RoaXMuY2hhbmdlQ29tcG9uZW50c1Zpc2liaWxpdHkuYXBwbHkodGhpcyxbITFdLmNvbmNhdChoKSl9fSx7a2V5OiJz'@;
put 'aG93Q29tcG9uZW50cyIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxtPTA7bTxkO20rKyloW21dPWFyZ3VtZW50c1ttXTt0aGlzLmNoYW5nZUNvbXBvbmVudHNWaXNpYmlsaXR5LmFwcGx5KHRoaXMsWyEwXS5jb25jYXQoaCkpfX0s'@;
put 'e2tleToiZGVzdHJveSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzO3RoaXMuZW5hYmxlZCYmKHRoaXMuY29tcG9uZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGgsbSl7bnVsbCE9PWgmJihoLmRlc3Ryb3koKSxkLmNvbXBvbmVudHMuc2V0KG0sbnVsbCkpfSksdGhpcy5jb25kaXRpb25Db2xs'@;
put 'ZWN0aW9uLmRlc3Ryb3koKSx0aGlzLmNvbmRpdGlvblVwZGF0ZU9ic2VydmVyLmRlc3Ryb3koKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSkpLE55KEs0KGEucHJvdG90eXBlKSwiZGVzdHJveSIsdGhpcykuY2FsbCh0aGlzKX19XSxbe2tl'@;
put 'eToiUExVR0lOX0tFWSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuImZpbHRlcnMifX0se2tleToiUExVR0lOX1BSSU9SSVRZIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMjUwfX0se2tleToiUExVR0lOX0RFUFMiLGdldDpmdW5jdGlvbigpe3JldHVyblsicGx1Z2luOkRyb3Bkb3duTWVudSIsInBs'@;
put 'dWdpbjpIaWRkZW5Sb3dzIiwiY2VsbC10eXBlOmNoZWNrYm94Il19fV0pLGF9KEdhKTtmdW5jdGlvbiBjRShsKXtyZXR1cm4oY0U9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpm'@;
put 'dW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiBxNGUobCxjKXt2YXIgYT1PYmplY3Qua2V5cyhsKTtpZihPYmplY3Qu'@;
put 'Z2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgZj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGwpO2MmJihmPWYuZmlsdGVyKGZ1bmN0aW9uKGQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGwsZCkuZW51bWVyYWJsZX0pKSxhLnB1c2guYXBwbHkoYSxmKX1y'@;
put 'ZXR1cm4gYX1mdW5jdGlvbiBmRShsKXtmb3IodmFyIGM9MTtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKXt2YXIgYT1udWxsIT1hcmd1bWVudHNbY10/YXJndW1lbnRzW2NdOnt9O2MlMj9xNGUoT2JqZWN0KGEpLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe2U4dChsLGYsYVtmXSl9KTpPYmplY3Qu'@;
put 'Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhsLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGEpKTpxNGUoT2JqZWN0KGEpKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLGYsT2JqZWN0LmdldE93blBy'@;
put 'b3BlcnR5RGVzY3JpcHRvcihhLGYpKX0pfXJldHVybiBsfWZ1bmN0aW9uIGU4dChsLGMsYSl7cmV0dXJuIGM9ZnVuY3Rpb24gdDh0KGwpe3ZhciBjPWZ1bmN0aW9uIG44dChsLGMpe2lmKCJvYmplY3QiIT09Y0UobCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0'@;
put 'aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09Y0UoZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1j'@;
put 'P1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PWNFKGMpP2M6U3RyaW5nKGMpfShjKSxjIGluIGw/T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsYyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmxbY109YSxs'@;
put 'fXZhciBlbWUsWDRlPSJpbnRlcm5hbC11c2UtaW4taGFuZHNvbnRhYmxlIixqcT17bGljZW5zZUtleTpYNGUsdXNlQXJyYXlBcml0aG1ldGljOiEwLHVzZUNvbHVtbkluZGV4OiExLHVzZVN0YXRzOiExLGV2YWx1YXRlTnVsbFRvWmVybzohMCxwcmVjaXNpb25FcHNpbG9uOjFlLTEzLHByZWNp'@;
put 'c2lvblJvdW5kaW5nOjE0LHNtYXJ0Um91bmRpbmc6ITAsbGVhcFllYXIxOTAwOiExLG51bGxEYXRlOnt5ZWFyOjE4OTksbW9udGg6MTIsZGF5OjMwfSxudWxsWWVhcjozMCxkYXRlRm9ybWF0czpbIkREL01NL1lZWVkiLCJERC9NTS9ZWSJdLHRpbWVGb3JtYXRzOlsiaGg6bW0iLCJoaDptbTpz'@;
put 'cy5zc3MiXSxtYXRjaFdob2xlQ2VsbDohMCx1c2VSZWd1bGFyRXhwcmVzc2lvbnM6ITEsdXNlV2lsZGNhcmRzOiEwLGZ1bmN0aW9uQXJnU2VwYXJhdG9yOiIsIix0aG91c2FuZFNlcGFyYXRvcjoiIixkZWNpbWFsU2VwYXJhdG9yOiIuIixsYW5ndWFnZToiZW5HQiJ9O2Z1bmN0aW9uIEo0ZShs'@;
put 'KXt2YXIgYyxhO3JldHVybnttYXhDb2x1bW5zOmwubWF4Q29sdW1ucyxtYXhSb3dzOmwubWF4Um93cyxsYW5ndWFnZTpudWxsPT09KGM9bFtPY10pfHx2b2lkIDA9PT1jfHxudWxsPT09KGE9Yy5sYW5ndWFnZSl8fHZvaWQgMD09PWE/dm9pZCAwOmEubGFuZ0NvZGV9fWZ1bmN0aW9uIFE0ZShs'@;
put 'KXtyZXR1cm4gT2JqZWN0LmtleXMobCkucmVkdWNlKGZ1bmN0aW9uKGMsYSl7cmV0dXJuImh5cGVyZm9ybXVsYSIhPT1hJiYoY1thXT1sW2FdKSxjfSx7fSl9ZnVuY3Rpb24genEobCl7cmV0dXJuKHpxPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9s'@;
put 'Lml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24g'@;
put 'ZFAoKXt2YXIgbD0iZW5naW5lX3JlbGF0aW9uc2hpcCIsYz1GZihPYyk7cmV0dXJuIGMuaGFzSXRlbShsKXx8Yy5yZWdpc3RlcihsLG5ldyBNYXApLGMuZ2V0SXRlbShsKX1mdW5jdGlvbiBVcSgpe3ZhciBsPSJzaGFyZWRfZW5naW5lX3VzYWdlIixjPUZmKE9jKTtyZXR1cm4gYy5oYXNJdGVt'@;
put 'KGwpfHxjLnJlZ2lzdGVyKGwsbmV3IE1hcCksYy5nZXRJdGVtKGwpfWZ1bmN0aW9uIHRtZShsKXt2YXIgYyxhPWRQKCksZj0wPT09YS5zaXplP1tdOkFycmF5LmZyb20obnVsbCE9PShjPWEuZ2V0KGwpKSYmdm9pZCAwIT09Yz9jOltdKTtyZXR1cm4gbmV3IE1hcChmLm1hcChmdW5jdGlvbihk'@;
put 'KXtyZXR1cm5bZC5nZXRQbHVnaW4oImZvcm11bGFzIikuc2hlZXRJZCxkXX0pKX1mdW5jdGlvbiBubWUobCxjKXtpZihsKXt2YXIgYT1kUCgpLGY9YS5nZXQobCksZD1VcSgpLGg9ZC5nZXQobCk7ZiYmZi5pbmNsdWRlcyhjKSYmKGYuc3BsaWNlKGYuaW5kZXhPZihjKSwxKSwwPT09Zi5sZW5n'@;
put 'dGgmJmEuZGVsZXRlKGwpKSxoJiZoLmluY2x1ZGVzKGMuZ3VpZCkmJihoLnNwbGljZShoLmluZGV4T2YoYy5ndWlkKSwxKSwwPT09aC5sZW5ndGgmJihkLmRlbGV0ZShsKSxsLmRlc3Ryb3koKSkpfX12YXIgcm1lPSJERC9NTS9ZWVlZIjtmdW5jdGlvbiBpbWUobCl7cmV0dXJuInN0cmluZyI9'@;
put 'PXR5cGVvZiBsJiYiJyI9PT1sLmNoYXJBdCgwKSYmIj0iPT09bC5jaGFyQXQoMSl9ZnVuY3Rpb24gWnEobCxjKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGwmJiJkYXRlIj09PWN9ZnVuY3Rpb24gb21lKGwsYyl7cmV0dXJuIEtvKGwsYywhMCkuaXNWYWxpZCgpfWZ1bmN0aW9uIGFtZShsLGMp'@;
put 'e3JldHVybiBLbyhsLGMsITApLmZvcm1hdChybWUpfWZ1bmN0aW9uIG04dChsLGMpe3JldHVybiBLbyhsLHJtZSwhMCkuZm9ybWF0KGMpfWZ1bmN0aW9uIGxtZShsLGMpe3ZhciBmPW5ldyBEYXRlKERhdGUuVVRDKDAsMCxsKy0xKSk7cmV0dXJuIEtvKGYpLmZvcm1hdChjKX1mdW5jdGlvbiBk'@;
put 'RShsKXtyZXR1cm4oZEU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rv'@;
put 'cj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiBzbWUobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFs'@;
put 'dWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLHk4dChmLmtleSksZil9fWZ1bmN0aW9uIHk4dChsKXt2YXIgYz1mdW5jdGlvbiBiOHQobCxjKXtpZigib2JqZWN0IiE9PWRFKGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1p'@;
put 'dGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PWRFKGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09'@;
put 'Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1kRShjKT9jOlN0cmluZyhjKX1mdW5jdGlvbiBuNihsLGMsYSl7KGZ1bmN0aW9uIF84dChsLGMpe2lmKGMuaGFzKGwpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1l'@;
put 'IHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShsLGMpLGMuc2V0KGwsYSl9ZnVuY3Rpb24gYXMobCxjKXtyZXR1cm4gZnVuY3Rpb24gdzh0KGwsYyl7cmV0dXJuIGMuZ2V0P2MuZ2V0LmNhbGwobCk6Yy52YWx1ZX0obCx1bWUobCxjLCJnZXQiKSl9ZnVuY3Rpb24gcTQo'@;
put 'bCxjLGEpe3JldHVybiBmdW5jdGlvbiBDOHQobCxjLGEpe2lmKGMuc2V0KWMuc2V0LmNhbGwobCxhKTtlbHNle2lmKCFjLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtjLnZhbHVlPWF9fShsLHVtZShsLGMs'@;
put 'InNldCIpLGEpLGF9ZnVuY3Rpb24gdW1lKGwsYyxhKXtpZighYy5oYXMobCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrYSsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGMuZ2V0KGwpfXZhciBoRT1uZXcgV2Vha01hcCxYND1uZXcgV2Vha01h'@;
put 'cCxGMT1uZXcgV2Vha01hcCxoUD1uZXcgV2Vha01hcCxZcT1uZXcgV2Vha01hcCxXcT1uZXcgV2Vha01hcCxwUD1uZXcgV2Vha01hcCxTOHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKGMsYSxmKXsoZnVuY3Rpb24gZzh0KGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVF'@;
put 'cnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLGwpLG42KHRoaXMsaEUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLG42KHRoaXMsWDQse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLG42KHRoaXMsRjEse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQg'@;
put 'MH0pLG42KHRoaXMsaFAse3dyaXRhYmxlOiEwLHZhbHVlOltdfSksbjYodGhpcyxZcSx7d3JpdGFibGU6ITAsdmFsdWU6W119KSxuNih0aGlzLFdxLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxuNih0aGlzLHBQLHt3cml0YWJsZTohMCx2YWx1ZTpbXX0pLHE0KHRoaXMsaEUsYykscTQo'@;
put 'dGhpcyxYNCxhKSxxNCh0aGlzLEYxLGYpfXJldHVybiBmdW5jdGlvbiB2OHQobCxjLGEpe2MmJnNtZShsLnByb3RvdHlwZSxjKSxhJiZzbWUobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0obCxbe2tleToic2V0UmVtb3ZlZEhmSW5kZXhl'@;
put 'cyIsdmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGY9dGhpcztyZXR1cm4gcTQodGhpcyxwUCxhLm1hcChmdW5jdGlvbihkKXt2YXIgaD1hcyhmLFg0KS5nZXRWaXN1YWxGcm9tUGh5c2ljYWxJbmRleChkKTtyZXR1cm4gZi5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGgpfSkpLGFzKHRoaXMscFAp'@;
put 'fX0se2tleToiZ2V0UmVtb3ZlZEhmSW5kZXhlcyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gYXModGhpcyxwUCl9fSx7a2V5OiJnZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4Iix2YWx1ZTpmdW5jdGlvbihhKXt2YXIgZj1hcyh0aGlzLFg0KS5nZXRJbmRleGVzU2VxdWVuY2UoKSxkPWFzKHRo'@;
put 'aXMsWDQpLmdldE5vdFRyaW1tZWRJbmRleGVzKCk7cmV0dXJuIGYuaW5kZXhPZihkW2FdKX19LHtrZXk6InN5bmNNb3ZlcyIsdmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGY9dGhpcyxoPSJtb3ZlIi5jb25jYXQoQWMoYXModGhpcyxoRSkpLCJzIik7YXModGhpcyxGMSkuZ2V0RW5naW5lKCkuYmF0'@;
put 'Y2goZnVuY3Rpb24oKXthLmZvckVhY2goZnVuY3Rpb24obSl7bS5mcm9tIT09bS50byYmbS5mcm9tKzEhPT1tLnRvJiZhcyhmLEYxKS5nZXRFbmdpbmUoKVtoXShhcyhmLEYxKS5nZXRTaGVldElkKCksbS5mcm9tLDEsbS50byl9KX0pfX0se2tleToic3RvcmVNb3Zlc0luZm9ybWF0aW9uIix2'@;
put 'YWx1ZTpmdW5jdGlvbihhLGYsZCl7dmFyIGg9dGhpczshMSE9PWQmJihxNCh0aGlzLFlxLGEubWFwKGZ1bmN0aW9uKG0pe3JldHVybiBoLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgobSl9KSkscTQodGhpcyxXcSx0aGlzLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoZikpKX19LHtrZXk6'@;
put 'ImdldE1vdmVMaW5lIix2YWx1ZTpmdW5jdGlvbihhLGYpe3ZhciBtLGQ9YXModGhpcyxYNCkuZ2V0TnVtYmVyT2ZJbmRleGVzKCksaD1BcnJheS5mcm9tKEFycmF5KGQpLmtleXMoKSkuZmlsdGVyKGZ1bmN0aW9uKF8pe3JldHVybiExPT09YS5pbmNsdWRlcyhfKX0pO3JldHVybiAwPT09Zj9u'@;
put 'dWxsIT09KG09aFtmXSkmJnZvaWQgMCE9PW0/bTowOmhbZi0xXSsxfX0se2tleToiZ2V0SW5pdGlhbGx5Q2FsY3VsYXRlZE1vdmVzIix2YWx1ZTpmdW5jdGlvbihhLGYpe3ZhciBkPXRoaXMuZ2V0TW92ZUxpbmUoYSxmKSxoPVtdO3JldHVybiBhLmZvckVhY2goZnVuY3Rpb24obSl7dmFyIF89'@;
put 'e2Zyb206bSx0bzpkfTtoLmZvckVhY2goZnVuY3Rpb24oTyl7Ty5mcm9tPl8uZnJvbSYmTy50bzw9Xy5mcm9tJiZPLmZyb20+Ty50byYmKF8uZnJvbSs9MSl9KSxfLmZyb20+PWQmJihkKz0xKSxoLnB1c2goXyl9KSxofX0se2tleToiYWRqdXN0ZWRDYWxjdWxhdGVkTW92ZXMiLHZhbHVlOmZ1'@;
put 'bmN0aW9uKGEpe3JldHVybiBhLmZvckVhY2goZnVuY3Rpb24oZixkKXthLnNsaWNlKGQrMSkuZm9yRWFjaChmdW5jdGlvbihtKXttLmZyb20+Zi5mcm9tJiZtLmZyb208bS50byYmKG0uZnJvbS09MSl9KX0pLGF9fSx7a2V5OiJjYWxjdWxhdGVBbmRTeW5jTW92ZXMiLHZhbHVlOmZ1bmN0aW9u'@;
put 'KGEsZil7dmFyIGQ9dGhpcztpZighYXModGhpcyxGMSkuaXNQZXJmb3JtaW5nVW5kb1JlZG8oKSYmITEhPT1hJiYhMSE9PWYpe3ZhciBoPXRoaXMuYWRqdXN0ZWRDYWxjdWxhdGVkTW92ZXModGhpcy5nZXRJbml0aWFsbHlDYWxjdWxhdGVkTW92ZXMoYXModGhpcyxZcSksYXModGhpcyxXcSkp'@;
put 'KTtudWxsPT09YXModGhpcyxGMSkuZ2V0U2hlZXRJZCgpP2FzKHRoaXMsRjEpLmdldFBvc3Rwb25lQWN0aW9uKGZ1bmN0aW9uKCl7cmV0dXJuIGQuc3luY01vdmVzKGgpfSk6dGhpcy5zeW5jTW92ZXMoaCl9fX0se2tleToiZ2V0SW5kZXhlc0NoYW5nZVN5bmNNZXRob2QiLHZhbHVlOmZ1bmN0'@;
put 'aW9uKCl7dmFyIGE9dGhpcyxmPSJzZXQiLmNvbmNhdChBYyhhcyh0aGlzLGhFKSksIk9yZGVyIik7cmV0dXJuIGZ1bmN0aW9uKGQpe2lmKCFhcyhhLEYxKS5pc1BlcmZvcm1pbmdVbmRvUmVkbygpKXt2YXIgaD1hcyhhLFg0KS5nZXRJbmRleGVzU2VxdWVuY2UoKTtpZigidXBkYXRlIj09PWQp'@;
put 'e3ZhciBPLG09YXMoYSxoUCkubWFwKGZ1bmN0aW9uKHBlKXtyZXR1cm4gaC5pbmRleE9mKHBlKX0pLF89YXMoYSxGMSkuZ2V0RW5naW5lKCkuZ2V0U2hlZXREaW1lbnNpb25zKGFzKGEsRjEpLmdldFNoZWV0SWQoKSk7Tz0icm93Ij09PWFzKGEsaEUpP18uaGVpZ2h0Ol8ud2lkdGg7Zm9yKHZh'@;
put 'ciBhZT1tLmxlbmd0aDthZTxPO2FlKz0xKW0ucHVzaChhZSk7YXMoYSxGMSkuZ2V0RW5naW5lKClbZl0oYXMoYSxGMSkuZ2V0U2hlZXRJZCgpLG0pfXE0KGEsaFAsaCl9fX19LHtrZXk6ImluaXQiLHZhbHVlOmZ1bmN0aW9uKCl7cTQodGhpcyxoUCxhcyh0aGlzLFg0KS5nZXRJbmRleGVzU2Vx'@;
put 'dWVuY2UoKSl9fV0pLGx9KCk7Y29uc3QgY21lPVM4dDtmdW5jdGlvbiBwRShsKXtyZXR1cm4ocEU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4g'@;
put 'YyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiBmbWUobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFi'@;
put 'bGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLEU4dChmLmtleSksZil9fWZ1bmN0aW9uIEU4dChsKXt2YXIgYz1mdW5jdGlvbiB4OHQobCxjKXtpZigib2JqZWN0IiE9PXBFKGwp'@;
put 'fHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PXBFKGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1'@;
put 'cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1wRShjKT9jOlN0cmluZyhjKX1mdW5jdGlvbiByNihsLGMsYSl7KGZ1bmN0aW9uIEE4dChsLGMpe2lmKGMuaGFzKGwpKXRocm93'@;
put 'IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShsLGMpLGMuc2V0KGwsYSl9ZnVuY3Rpb24gRDMobCxjKXtyZXR1cm4gZnVuY3Rpb24gVDh0KGwsYyl7cmV0dXJuIGMuZ2V0P2MuZ2V0LmNhbGwo'@;
put 'bCk6Yy52YWx1ZX0obCxkbWUobCxjLCJnZXQiKSl9ZnVuY3Rpb24gbzYobCxjLGEpe3JldHVybiBmdW5jdGlvbiBPOHQobCxjLGEpe2lmKGMuc2V0KWMuc2V0LmNhbGwobCxhKTtlbHNle2lmKCFjLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBv'@;
put 'bmx5IHByaXZhdGUgZmllbGQiKTtjLnZhbHVlPWF9fShsLGRtZShsLGMsInNldCIpLGEpLGF9ZnVuY3Rpb24gZG1lKGwsYyxhKXtpZighYy5oYXMobCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrYSsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJu'@;
put 'IGMuZ2V0KGwpfXZhciBtUD1uZXcgV2Vha01hcCxnUD1uZXcgV2Vha01hcCxHcT1uZXcgV2Vha01hcCwkcT1uZXcgV2Vha01hcCxLcT1uZXcgV2Vha01hcCxxcT1uZXcgV2Vha01hcCxYcT1uZXcgV2Vha01hcCxEOHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKGMsYSxmKXsoZnVuY3Rpb24gTTh0'@;
put 'KGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLGwpLHI2KHRoaXMsbVAse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLHI2KHRoaXMsZ1Ase3dyaXRhYmxlOiEwLHZhbHVlOnZv'@;
put 'aWQgMH0pLHI2KHRoaXMsR3Ese3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLHI2KHRoaXMsJHEse3dyaXRhYmxlOiEwLHZhbHVlOiExfSkscjYodGhpcyxLcSx7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSxyNih0aGlzLHFxLHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSkscjYodGhpcyxYcSx7'@;
put 'd3JpdGFibGU6ITAsdmFsdWU6bnVsbH0pLG82KHRoaXMsbVAsbmV3IGNtZSgicm93IixjLHRoaXMpKSxvNih0aGlzLGdQLG5ldyBjbWUoImNvbHVtbiIsYSx0aGlzKSksbzYodGhpcyxHcSxmKX1yZXR1cm4gZnVuY3Rpb24gazh0KGwsYyxhKXtjJiZmbWUobC5wcm90b3R5cGUsYyksYSYmZm1l'@;
put 'KGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGwsW3trZXk6ImdldEZvckF4aXMiLHZhbHVlOmZ1bmN0aW9uKGEpe3JldHVybiBEMyh0aGlzLCJyb3ciPT09YT9tUDpnUCl9fSx7a2V5OiJzZXRQZXJmb3JtVW5kbyIsdmFsdWU6ZnVuY3Rp'@;
put 'b24oYSl7bzYodGhpcywkcSxhKX19LHtrZXk6InNldFBlcmZvcm1SZWRvIix2YWx1ZTpmdW5jdGlvbihhKXtvNih0aGlzLEtxLGEpfX0se2tleToiaXNQZXJmb3JtaW5nVW5kb1JlZG8iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIEQzKHRoaXMsJHEpfHxEMyh0aGlzLEtxKX19LHtrZXk6Imdl'@;
put 'dFNoZWV0SWQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIEQzKHRoaXMsWHEpfX0se2tleToiZ2V0RW5naW5lIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBEMyh0aGlzLHFxKX19LHtrZXk6ImdldFBvc3Rwb25lQWN0aW9uIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBEMyh0aGlzLEdxKX19'@;
put 'LHtrZXk6InNldHVwU3luY0VuZHBvaW50Iix2YWx1ZTpmdW5jdGlvbihhLGYpe282KHRoaXMscXEsYSksbzYodGhpcyxYcSxmKSxEMyh0aGlzLG1QKS5pbml0KCksRDModGhpcyxnUCkuaW5pdCgpfX1dKSxsfSgpO2NvbnN0IEk4dD1EOHQ7ZnVuY3Rpb24gSjQobCl7cmV0dXJuKEo0PSJmdW5j'@;
put 'dGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1i'@;
put 'b2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gVnkobCxjKXtyZXR1cm4gZnVuY3Rpb24gVjh0KGwpe2lmKEFycmF5LmlzQXJyYXkobCkpcmV0dXJuIGx9KGwpfHxmdW5jdGlvbiBOOHQobCxjKXt2YXIgYT1udWxsPT1sP251bGw6dHlwZW9mIFN5bWJvbDwidSIm'@;
put 'JmxbU3ltYm9sLml0ZXJhdG9yXXx8bFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPWEpe3ZhciBmLGQsaCxtLF89W10sTz0hMCxYPSExO3RyeXtpZihoPShhPWEuY2FsbChsKSkubmV4dCwwPT09Yyl7aWYoT2JqZWN0KGEpIT09YSlyZXR1cm47Tz0hMX1lbHNlIGZvcig7IShPPShmPWguY2FsbChh'@;
put 'KSkuZG9uZSkmJihfLnB1c2goZi52YWx1ZSksXy5sZW5ndGghPT1jKTtPPSEwKTt9Y2F0Y2goYWUpe1g9ITAsZD1hZX1maW5hbGx5e3RyeXtpZighTyYmbnVsbCE9YS5yZXR1cm4mJihtPWEucmV0dXJuKCksT2JqZWN0KG0pIT09bSkpcmV0dXJufWZpbmFsbHl7aWYoWCl0aHJvdyBkfX1yZXR1'@;
put 'cm4gX319KGwsYyl8fGhtZShsLGMpfHxmdW5jdGlvbiBIOHQoKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2'@;
put 'ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIGhtZShsLGMpe2lmKGwpe2lmKCJzdHJpbmciPT10eXBlb2YgbClyZXR1cm4gSnEobCxjKTt2YXIgYT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobCkuc2xpY2UoOCwtMSk7aWYoIk9iamVjdCI9PT1h'@;
put 'JiZsLmNvbnN0cnVjdG9yJiYoYT1sLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09YXx8IlNldCI9PT1hKXJldHVybiBBcnJheS5mcm9tKGwpO2lmKCJBcmd1bWVudHMiPT09YXx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QoYSkpcmV0dXJuIEpxKGws'@;
put 'Yyl9fWZ1bmN0aW9uIEpxKGwsYyl7KG51bGw9PWN8fGM+bC5sZW5ndGgpJiYoYz1sLmxlbmd0aCk7Zm9yKHZhciBhPTAsZj1uZXcgQXJyYXkoYyk7YTxjO2ErKylmW2FdPWxbYV07cmV0dXJuIGZ9ZnVuY3Rpb24gcG1lKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNb'@;
put 'YV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxtbWUoZi5rZXkpLGYpfX1mdW5jdGlvbiBhNigpe3JldHVybiBhNj10eXBlb2YgUmVmbGVjdDwidSImJlJl'@;
put 'ZmxlY3QuZ2V0P1JlZmxlY3QuZ2V0LmJpbmQoKTpmdW5jdGlvbihjLGEsZil7dmFyIGQ9ZnVuY3Rpb24gejh0KGwsYyl7Zm9yKDshT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGwsYykmJm51bGwhPT0obD1JMyhsKSk7KTtyZXR1cm4gbH0oYyxhKTtpZihkKXt2YXIgaD1P'@;
put 'YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGQsYSk7cmV0dXJuIGguZ2V0P2guZ2V0LmNhbGwoYXJndW1lbnRzLmxlbmd0aDwzP2M6Zik6aC52YWx1ZX19LGE2LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBRcShsLGMpe3JldHVybihRcT1PYmplY3Quc2V0UHJvdG90eXBl'@;
put 'T2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihmLGQpe3JldHVybiBmLl9fcHJvdG9fXz1kLGZ9KShsLGMpfWZ1bmN0aW9uIEdoKGwpe2lmKHZvaWQgMD09PWwpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3Vw'@;
put 'ZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gbH1mdW5jdGlvbiBJMyhsKXtyZXR1cm4oSTM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2Yo'@;
put 'YSl9KShsKX1mdW5jdGlvbiBCeShsLGMsYSl7cmV0dXJuKGM9bW1lKGMpKWluIGw/T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsYyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmxbY109YSxsfWZ1bmN0aW9uIG1tZShsKXt2YXIgYz1mdW5jdGlv'@;
put 'biBHOHQobCxjKXtpZigib2JqZWN0IiE9PUo0KGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PUo0KGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBl'@;
put 'RXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1KNChjKT9jOlN0cmluZyhjKX1mdW5jdGlvbiBlWChsLGMsYSl7KGZ1bmN0'@;
put 'aW9uICQ4dChsLGMpe2lmKGMuaGFzKGwpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShsLGMpLGMuc2V0KGwsYSl9ZnVuY3Rpb24gUTQobCxjLGEpe3JldHVybiBmdW5jdGlvbiBL'@;
put 'OHQobCxjLGEpe2lmKGMuc2V0KWMuc2V0LmNhbGwobCxhKTtlbHNle2lmKCFjLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtjLnZhbHVlPWF9fShsLGdtZShsLGMsInNldCIpLGEpLGF9ZnVuY3Rpb24ganko'@;
put 'bCxjKXtyZXR1cm4gZnVuY3Rpb24gcTh0KGwsYyl7cmV0dXJuIGMuZ2V0P2MuZ2V0LmNhbGwobCk6Yy52YWx1ZX0obCxnbWUobCxjLCJnZXQiKSl9ZnVuY3Rpb24gZ21lKGwsYyxhKXtpZighYy5oYXMobCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrYSsiIHByaXZhdGUg'@;
put 'ZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGMuZ2V0KGwpfXZhciBPYz0iZm9ybXVsYXMiLFg4dD1bIm1heFJvd3MiLCJtYXhDb2x1bW5zIiwibGFuZ3VhZ2UiXTt1by5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJOYW1lZEV4cHJlc3Npb25BZGRlZCIpLHVvLmdldFNpbmds'@;
put 'ZXRvbigpLnJlZ2lzdGVyKCJhZnRlck5hbWVkRXhwcmVzc2lvblJlbW92ZWQiKSx1by5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJTaGVldEFkZGVkIiksdW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyU2hlZXRSZW1vdmVkIiksdW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0'@;
put 'ZXIoImFmdGVyU2hlZXRSZW5hbWVkIiksdW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGUiKTt2YXIgenk9ZnVuY3Rpb24oYyl7cmV0dXJuIlVuZG9SZWRvLnVuZG8iPT09Y3x8IlVuZG9SZWRvLnJlZG8iPT09Y3x8ImF1dG8iPT09Y30sUjM9bmV3'@;
put 'IFdlYWtNYXAsdFg9bmV3IFdlYWtNYXAsbUU9bmV3IFdlYWtNYXAsUTh0PWZ1bmN0aW9uKGwpeyFmdW5jdGlvbiBVOHQobCxjKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyYmbnVsbCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxs'@;
put 'IG9yIGEgZnVuY3Rpb24iKTtsLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGMmJmMucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6bCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksYyYm'@;
put 'UXEobCxjKX0oYSxsKTt2YXIgYz1mdW5jdGlvbiBaOHQobCl7dmFyIGM9ZnVuY3Rpb24gVzh0KCl7aWYodHlwZW9mIFJlZmxlY3Q+InUifHwhUmVmbGVjdC5jb25zdHJ1Y3R8fFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVy'@;
put 'biEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sZnVuY3Rpb24oKXt9KSksITB9Y2F0Y2h7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciBkLGY9STMobCk7aWYoYyl7dmFyIGg9STModGhpcyku'@;
put 'Y29uc3RydWN0b3I7ZD1SZWZsZWN0LmNvbnN0cnVjdChmLGFyZ3VtZW50cyxoKX1lbHNlIGQ9Zi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uIFk4dChsLGMpe2lmKGMmJigib2JqZWN0Ij09PUo0KGMpfHwiZnVuY3Rpb24iPT10eXBlb2YgYykpcmV0dXJuIGM7aWYodm9p'@;
put 'ZCAwIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBHaChsKX0odGhpcyxkKX19KGEpO2Z1bmN0aW9uIGEoKXt2YXIgZjshZnVuY3Rpb24gQjh0KGwsYyl7aWYoIShsIGluc3Rh'@;
put 'bmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsYSk7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksbT0wO208ZDttKyspaFttXT1hcmd1bWVudHNbbV07cmV0dXJuIGVYKEdoKGY9Yy5j'@;
put 'YWxsLmFwcGx5KGMsW3RoaXNdLmNvbmNhdChoKSkpLFIzLHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLGVYKEdoKGYpLHRYLHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLGVYKEdoKGYpLG1FLHt3cml0YWJsZTohMCx2YWx1ZTpbWyJ2YWx1ZXNVcGRhdGVkIixmdW5jdGlvbigpe3ZhciBfO3JldHVy'@;
put 'bihfPWYpLm9uRW5naW5lVmFsdWVzVXBkYXRlZC5hcHBseShfLGFyZ3VtZW50cyl9XSxbIm5hbWVkRXhwcmVzc2lvbkFkZGVkIixmdW5jdGlvbigpe3ZhciBfO3JldHVybihfPWYpLm9uRW5naW5lTmFtZWRFeHByZXNzaW9uc0FkZGVkLmFwcGx5KF8sYXJndW1lbnRzKX1dLFsibmFtZWRFeHBy'@;
put 'ZXNzaW9uUmVtb3ZlZCIsZnVuY3Rpb24oKXt2YXIgXztyZXR1cm4oXz1mKS5vbkVuZ2luZU5hbWVkRXhwcmVzc2lvbnNSZW1vdmVkLmFwcGx5KF8sYXJndW1lbnRzKX1dLFsic2hlZXRBZGRlZCIsZnVuY3Rpb24oKXt2YXIgXztyZXR1cm4oXz1mKS5vbkVuZ2luZVNoZWV0QWRkZWQuYXBwbHko'@;
put 'Xyxhcmd1bWVudHMpfV0sWyJzaGVldFJlbmFtZWQiLGZ1bmN0aW9uKCl7dmFyIF87cmV0dXJuKF89Zikub25FbmdpbmVTaGVldFJlbmFtZWQuYXBwbHkoXyxhcmd1bWVudHMpfV0sWyJzaGVldFJlbW92ZWQiLGZ1bmN0aW9uKCl7dmFyIF87cmV0dXJuKF89Zikub25FbmdpbmVTaGVldFJlbW92'@;
put 'ZWQuYXBwbHkoXyxhcmd1bWVudHMpfV1dfSksQnkoR2goZiksInN0YXRpY1JlZ2lzdGVyIixGZigiZm9ybXVsYXMiKSksQnkoR2goZiksImVuZ2luZSIsbnVsbCksQnkoR2goZiksInNoZWV0TmFtZSIsbnVsbCksQnkoR2goZiksImluZGV4U3luY2VyIixudWxsKSxCeShHaChmKSwicm93QXhp'@;
put 'c1N5bmNlciIsbnVsbCksQnkoR2goZiksImNvbHVtbkF4aXNTeW5jZXIiLG51bGwpLGZ9cmV0dXJuIGZ1bmN0aW9uIGo4dChsLGMsYSl7YyYmcG1lKGwucHJvdG90eXBlLGMpLGEmJnBtZShsLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShh'@;
put 'LFt7a2V5OiJzaGVldElkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09PXRoaXMuc2hlZXROYW1lP251bGw6dGhpcy5lbmdpbmUuZ2V0U2hlZXRJZCh0aGlzLnNoZWV0TmFtZSl9fSx7a2V5OiJpc0VuYWJsZWQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0'@;
put 'aW5ncygpW09jXX19LHtrZXk6ImVuYWJsZVBsdWdpbiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZCxoPXRoaXM7aWYoIXRoaXMuZW5hYmxlZCl7aWYodGhpcy5lbmdpbmU9bnVsbCE9PShkPWZ1bmN0aW9uIGw4dChsKXt2YXIgZCxjPWwuZ2V0U2V0dGluZ3MoKSxhPWNbT2NdLGY9YT8uZW5naW5l'@;
put 'O2lmKCEwPT09YXx8TGwoZikpcmV0dXJuIG51bGw7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGYuaHlwZXJmb3JtdWxhfHwiZnVuY3Rpb24iPT10eXBlb2YgZilyZXR1cm4gZnVuY3Rpb24gczh0KGwsYyxhKXt2YXIgZj1jW09jXSxkPWZ1bmN0aW9uIHI4dChsKXt2YXIgYyxhPWxbT2NdLGY9UTRl'@;
put 'KG51bGwhPWEmJm51bGwhPT0oYz1hLmVuZ2luZSkmJnZvaWQgMCE9PWMmJmMuaHlwZXJmb3JtdWxhP2EuZW5naW5lOnt9KSxkPUo0ZShsKTtyZXR1cm4gZkUoZkUoZkUoe30sanEpLGYpLGQpfShjKSxoPWRQKCksbT1VcSgpOyhmdW5jdGlvbiB1OHQobCxjKXtjJiZjLmZvckVhY2goZnVuY3Rp'@;
put 'b24oYSl7dmFyIGY9YS5uYW1lLGQ9YS5wbHVnaW4saD1hLnRyYW5zbGF0aW9uczt0cnl7bC5yZWdpc3RlckZ1bmN0aW9uKGYsZCxoKX1jYXRjaChtKXtXbChtLm1lc3NhZ2UpfX0pfSkobCxmLmZ1bmN0aW9ucyksZnVuY3Rpb24gYzh0KGwsYyl7aWYoYyl7dmFyIGE9Yy5sYW5nQ29kZTt0cnl7'@;
put 'bC5yZWdpc3Rlckxhbmd1YWdlKGEsYyl9Y2F0Y2goZil7V2woZi5tZXNzYWdlKX19fShsLGYubGFuZ3VhZ2UpO3ZhciBfPWwuYnVpbGRFbXB0eShkKTtyZXR1cm4gaC5zZXQoXyxbYV0pLG0uc2V0KF8sW2EuZ3VpZF0pLGZ1bmN0aW9uIGY4dChsLGMpe2MmJihsLnN1c3BlbmRFdmFsdWF0aW9u'@;
put 'KCksYy5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBmPWEubmFtZSxkPWEuZXhwcmVzc2lvbixoPWEuc2NvcGUsbT1hLm9wdGlvbnM7dHJ5e2wuYWRkTmFtZWRFeHByZXNzaW9uKGYsZCxoLG0pfWNhdGNoKF8pe1dsKF8ubWVzc2FnZSl9fSksbC5yZXN1bWVFdmFsdWF0aW9uKCkpfShfLGYubmFt'@;
put 'ZWRFeHByZXNzaW9ucyksXy5vbigic2hlZXRBZGRlZCIsZnVuY3Rpb24oKXtfLnJlYnVpbGRBbmRSZWNhbGN1bGF0ZSgpfSksXy5vbigic2hlZXRSZW1vdmVkIixmdW5jdGlvbigpe18ucmVidWlsZEFuZFJlY2FsY3VsYXRlKCl9KSxffShudWxsIT09KGQ9Zi5oeXBlcmZvcm11bGEpJiZ2b2lk'@;
put 'IDAhPT1kP2Q6ZixjLGwpO2lmKCJvYmplY3QiPT09enEoZikmJkxsKGYuaHlwZXJmb3JtdWxhKSl7dmFyIGg9ZFAoKSxtPVVxKCkuZ2V0KGYpO3JldHVybiBoLmhhcyhmKXx8aC5zZXQoZixbXSksaC5nZXQoZikucHVzaChsKSxtJiZtLnB1c2gobC5ndWlkKSxmLmdldENvbmZpZygpLmxpY2Vu'@;
put 'c2VLZXl8fGYudXBkYXRlQ29uZmlnKHtsaWNlbnNlS2V5Olg0ZX0pLChmLmdldENvbmZpZygpLmxlYXBZZWFyMTkwMCE9PWpxLmxlYXBZZWFyMTkwMHx8ITE9PT1qSShmLmdldENvbmZpZygpLm51bGxEYXRlLGpxLm51bGxEYXRlKSkmJldsKE9sKGVtZXx8KGVtZT1mdW5jdGlvbiBhOHQobCxj'@;
put 'KXtyZXR1cm4gY3x8KGM9bC5zbGljZSgwKSksT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhsLHtyYXc6e3ZhbHVlOk9iamVjdC5mcmVlemUoYyl9fSkpfShbIklmIHlvdSB1c2UgSHlwZXJGb3JtdWxhIHdpdGggSGFuZHNvbnRhYmxlLCBrZWVwIHRoZSBkZWZhdWx0IGBs'@;
put 'ZWFwWWVhcjE5MDBgIGFuZCBgbnVsbERhdGVgIFxuICAgICAgc2V0dGluZ3MuIE90aGVyd2lzZSwgSHlwZXJGb3JtdWxhJ3MgZGF0ZXMgbWF5IG5vdCBzeW5jIGNvcnJlY3RseSB3aXRoIEhhbmRzb250YWJsZSdzIGRhdGVzLiJdLFsiSWYgeW91IHVzZSBIeXBlckZvcm11bGEgd2l0aCBIYW5k'@;
put 'c29udGFibGUsIGtlZXAgdGhlIGRlZmF1bHQgXFxgbGVhcFllYXIxOTAwXFxgIGFuZCBcXGBudWxsRGF0ZVxcYCBcbiAgICAgIHNldHRpbmdzLiBPdGhlcndpc2UsIEh5cGVyRm9ybXVsYSdzIGRhdGVzIG1heSBub3Qgc3luYyBjb3JyZWN0bHkgd2l0aCBIYW5kc29udGFibGUncyBkYXRlcy4i'@;
put 'XSkpKSksZn1yZXR1cm4gbnVsbH0odGhpcy5ob3QpKSYmdm9pZCAwIT09ZD9kOnRoaXMuZW5naW5lLCF0aGlzLmVuZ2luZSlyZXR1cm4gdm9pZCBXbCgiTWlzc2luZyB0aGUgcmVxdWlyZWQgYGVuZ2luZWAga2V5IGluIHRoZSBGb3JtdWxhcyBzZXR0aW5ncy4gUGxlYXNlIGZpbGwgaXQgd2l0'@;
put 'aCBlaXRoZXIgYW4gZW5naW5lIGNsYXNzIG9yIGFuIGVuZ2luZSBpbnN0YW5jZS4iKTtpZihudWxsIT09dGhpcy5zaGVldE5hbWUmJiF0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdCh0aGlzLnNoZWV0TmFtZSkpe3ZhciBtPXRoaXMuYWRkU2hlZXQodGhpcy5zaGVldE5hbWUsdGhpcy5ob3Qu'@;
put 'Z2V0U291cmNlRGF0YUFycmF5KCkpOyExIT09bSYmKHRoaXMuc2hlZXROYW1lPW0pfXRoaXMuYWRkSG9vaygiYmVmb3JlTG9hZERhdGEiLGZ1bmN0aW9uKCl7cmV0dXJuIGgub25CZWZvcmVMb2FkRGF0YS5hcHBseShoLGFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyTG9hZERhdGEi'@;
put 'LGZ1bmN0aW9uKCl7cmV0dXJuIGgub25BZnRlckxvYWREYXRhLmFwcGx5KGgsYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlVXBkYXRlRGF0YSIsZnVuY3Rpb24oKXtyZXR1cm4gaC5vbkJlZm9yZUxvYWREYXRhLmFwcGx5KGgsYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0'@;
put 'ZXJVcGRhdGVEYXRhIixmdW5jdGlvbigpe3JldHVybiBoLm9uQWZ0ZXJMb2FkRGF0YS5hcHBseShoLGFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeURhdGEiLGZ1bmN0aW9uKCl7cmV0dXJuIGgub25Nb2RpZnlEYXRhLmFwcGx5KGgsYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygi'@;
put 'bW9kaWZ5U291cmNlRGF0YSIsZnVuY3Rpb24oKXtyZXR1cm4gaC5vbk1vZGlmeVNvdXJjZURhdGEuYXBwbHkoaCxhcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVWYWxpZGF0ZSIsZnVuY3Rpb24oKXtyZXR1cm4gaC5vbkJlZm9yZVZhbGlkYXRlLmFwcGx5KGgsYXJndW1lbnRzKX0p'@;
put 'LHRoaXMuYWRkSG9vaygiYWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxsIixmdW5jdGlvbigpe3JldHVybiBoLm9uQWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxsLmFwcGx5KGgsYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJTZXREYXRhQXRDZWxsIixmdW5jdGlvbigpe3JldHVybiBoLm9u'@;
put 'QWZ0ZXJTZXREYXRhQXRDZWxsLmFwcGx5KGgsYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJTZXREYXRhQXRSb3dQcm9wIixmdW5jdGlvbigpe3JldHVybiBoLm9uQWZ0ZXJTZXREYXRhQXRDZWxsLmFwcGx5KGgsYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQ3JlYXRl'@;
put 'Um93IixmdW5jdGlvbigpe3JldHVybiBoLm9uQmVmb3JlQ3JlYXRlUm93LmFwcGx5KGgsYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQ3JlYXRlQ29sIixmdW5jdGlvbigpe3JldHVybiBoLm9uQmVmb3JlQ3JlYXRlQ29sLmFwcGx5KGgsYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9v'@;
put 'aygiYWZ0ZXJDcmVhdGVSb3ciLGZ1bmN0aW9uKCl7cmV0dXJuIGgub25BZnRlckNyZWF0ZVJvdy5hcHBseShoLGFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ3JlYXRlQ29sIixmdW5jdGlvbigpe3JldHVybiBoLm9uQWZ0ZXJDcmVhdGVDb2wuYXBwbHkoaCxhcmd1bWVudHMpfSks'@;
put 'dGhpcy5hZGRIb29rKCJiZWZvcmVSZW1vdmVSb3ciLGZ1bmN0aW9uKCl7cmV0dXJuIGgub25CZWZvcmVSZW1vdmVSb3cuYXBwbHkoaCxhcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW1vdmVDb2wiLGZ1bmN0aW9uKCl7cmV0dXJuIGgub25CZWZvcmVSZW1vdmVDb2wuYXBwbHko'@;
put 'aCxhcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZVJvdyIsZnVuY3Rpb24oKXtyZXR1cm4gaC5vbkFmdGVyUmVtb3ZlUm93LmFwcGx5KGgsYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW1vdmVDb2wiLGZ1bmN0aW9uKCl7cmV0dXJuIGgub25BZnRlclJlbW92'@;
put 'ZUNvbC5hcHBseShoLGFyZ3VtZW50cyl9KSx0aGlzLmluZGV4U3luY2VyPW5ldyBJOHQodGhpcy5ob3Qucm93SW5kZXhNYXBwZXIsdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsZnVuY3Rpb24oXyl7aC5ob3QuYWRkSG9va09uY2UoImluaXQiLGZ1bmN0aW9uKCl7XygpfSl9KSx0aGlzLnJv'@;
put 'd0F4aXNTeW5jZXI9dGhpcy5pbmRleFN5bmNlci5nZXRGb3JBeGlzKCJyb3ciKSx0aGlzLmNvbHVtbkF4aXNTeW5jZXI9dGhpcy5pbmRleFN5bmNlci5nZXRGb3JBeGlzKCJjb2x1bW4iKSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlclJvd1NlcXVlbmNlQ2hhbmdlIix0aGlzLnJvd0F4aXNTeW5j'@;
put 'ZXIuZ2V0SW5kZXhlc0NoYW5nZVN5bmNNZXRob2QoKSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJDb2x1bW5TZXF1ZW5jZUNoYW5nZSIsdGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEluZGV4ZXNDaGFuZ2VTeW5jTWV0aG9kKCkpLHRoaXMuaG90LmFkZEhvb2soImJlZm9yZVJvd01vdmUiLGZ1'@;
put 'bmN0aW9uKF8sTyxYLGFlKXtoLnJvd0F4aXNTeW5jZXIuc3RvcmVNb3Zlc0luZm9ybWF0aW9uKF8sTyxhZSl9KSx0aGlzLmhvdC5hZGRIb29rKCJiZWZvcmVDb2x1bW5Nb3ZlIixmdW5jdGlvbihfLE8sWCxhZSl7aC5jb2x1bW5BeGlzU3luY2VyLnN0b3JlTW92ZXNJbmZvcm1hdGlvbihfLE8s'@;
put 'YWUpfSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJSb3dNb3ZlIixmdW5jdGlvbihfLE8sWCxhZSxwZSl7aC5yb3dBeGlzU3luY2VyLmNhbGN1bGF0ZUFuZFN5bmNNb3ZlcyhhZSxwZSl9KSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlckNvbHVtbk1vdmUiLGZ1bmN0aW9uKF8sTyxYLGFlLHBlKXto'@;
put 'LmNvbHVtbkF4aXNTeW5jZXIuY2FsY3VsYXRlQW5kU3luY01vdmVzKGFlLHBlKX0pLHRoaXMuaG90LmFkZEhvb2soImJlZm9yZUNvbHVtbkZyZWV6ZSIsZnVuY3Rpb24oXyxPKXtoLmNvbHVtbkF4aXNTeW5jZXIuc3RvcmVNb3Zlc0luZm9ybWF0aW9uKFtfXSxoLmhvdC5nZXRTZXR0aW5ncygp'@;
put 'LmZpeGVkQ29sdW1uc1N0YXJ0LE8pfSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJDb2x1bW5GcmVlemUiLGZ1bmN0aW9uKF8sTyl7aC5jb2x1bW5BeGlzU3luY2VyLmNhbGN1bGF0ZUFuZFN5bmNNb3ZlcyhPLE8pfSksdGhpcy5ob3QuYWRkSG9vaygiYmVmb3JlQ29sdW1uVW5mcmVlemUiLGZ1'@;
put 'bmN0aW9uKF8sTyl7aC5jb2x1bW5BeGlzU3luY2VyLnN0b3JlTW92ZXNJbmZvcm1hdGlvbihbX10saC5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydC0xLE8pfSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJDb2x1bW5VbmZyZWV6ZSIsZnVuY3Rpb24oXyxPKXtoLmNvbHVtbkF4'@;
put 'aXNTeW5jZXIuY2FsY3VsYXRlQW5kU3luY01vdmVzKE8sTyl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ2VsbE1ldGFSZXNldCIsZnVuY3Rpb24oKXtyZXR1cm4gaC5vbkFmdGVyQ2VsbE1ldGFSZXNldC5hcHBseShoLGFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVVuZG8iLGZ1bmN0'@;
put 'aW9uKCl7aC5pbmRleFN5bmNlci5zZXRQZXJmb3JtVW5kbyghMCksaC5lbmdpbmUudW5kbygpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZWRvIixmdW5jdGlvbigpe2guaW5kZXhTeW5jZXIuc2V0UGVyZm9ybVJlZG8oITApLGguZW5naW5lLnJlZG8oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJV'@;
put 'bmRvIixmdW5jdGlvbigpe2guaW5kZXhTeW5jZXIuc2V0UGVyZm9ybVVuZG8oITEpfSksdGhpcy5hZGRIb29rKCJhZnRlclVuZG8iLGZ1bmN0aW9uKCl7aC5pbmRleFN5bmNlci5zZXRQZXJmb3JtUmVkbyghMSl9KSx0aGlzLmFkZEhvb2soImFmdGVyRGV0YWNoQ2hpbGQiLGZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIGgub25BZnRlckRldGFjaENoaWxkLmFwcGx5KGgsYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQXV0b2ZpbGwiLGZ1bmN0aW9uKCl7cmV0dXJuIGgub25CZWZvcmVBdXRvZmlsbC5hcHBseShoLGFyZ3VtZW50cyl9KSxqeSh0aGlzLG1FKS5mb3JFYWNoKGZ1bmN0aW9u'@;
put 'KF8pe3ZhciBPPVZ5KF8sMik7cmV0dXJuIGguZW5naW5lLm9uKE9bMF0sT1sxXSl9KSxhNihJMyhhLnByb3RvdHlwZSksImVuYWJsZVBsdWdpbiIsdGhpcykuY2FsbCh0aGlzKX19fSx7a2V5OiJkaXNhYmxlUGx1Z2luIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXM7ankodGhpcyxtRSku'@;
put 'Zm9yRWFjaChmdW5jdGlvbihoKXt2YXIgbT1WeShoLDIpO3JldHVybiBkLmVuZ2luZS5vZmYobVswXSxtWzFdKX0pLG5tZSh0aGlzLmVuZ2luZSx0aGlzLmhvdCksdGhpcy5lbmdpbmU9bnVsbCxhNihJMyhhLnByb3RvdHlwZSksImRpc2FibGVQbHVnaW4iLHRoaXMpLmNhbGwodGhpcyl9fSx7'@;
put 'a2V5OiJ1cGRhdGVQbHVnaW4iLHZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBoPWZ1bmN0aW9uIGk4dChsKXt2YXIgYyxhPWxbT2NdLGY9UTRlKG51bGwhPWEmJm51bGwhPT0oYz1hLmVuZ2luZSkmJnZvaWQgMCE9PWMmJmMuaHlwZXJmb3JtdWxhP2EuZW5naW5lOnt9KSxkPUo0ZShsKTtyZXR1cm4g'@;
put 'ZkUoZkUoe30sZiksZCl9KHRoaXMuaG90LmdldFNldHRpbmdzKCkpOyhmdW5jdGlvbiBvOHQobCxjKXtyZXR1cm4gT2JqZWN0LmtleXMoYykuc29tZShmdW5jdGlvbihhKXtyZXR1cm4gdm9pZCAwIT09Y1thXSYmY1thXSE9PWxbYV19KX0pKHRoaXMuZW5naW5lLmdldENvbmZpZygpLGgpJiZ0'@;
put 'aGlzLmVuZ2luZS51cGRhdGVDb25maWcoaCk7dmFyIG09dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtPY107aWYoaW8obSkmJmlvKG0uc2hlZXROYW1lKSYmbS5zaGVldE5hbWUhPT10aGlzLnNoZWV0TmFtZSYmdGhpcy5zd2l0Y2hTaGVldChtLnNoZWV0TmFtZSksIWQuZGF0YSYmbnVsbD09PXRo'@;
put 'aXMuc2hlZXROYW1lKXt2YXIgXz10aGlzLmhvdC5nZXRTZXR0aW5ncygpW09jXS5zaGVldE5hbWU7XyYmdGhpcy5lbmdpbmUuZG9lc1NoZWV0RXhpc3QoXyk/dGhpcy5zd2l0Y2hTaGVldCh0aGlzLnNoZWV0TmFtZSk6dGhpcy5zaGVldE5hbWU9dGhpcy5hZGRTaGVldChfPz92b2lkIDAsdGhp'@;
put 'cy5ob3QuZ2V0U291cmNlRGF0YUFycmF5KCkpfWE2KEkzKGEucHJvdG90eXBlKSwidXBkYXRlUGx1Z2luIix0aGlzKS5jYWxsKHRoaXMsZCl9fSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXM7ankodGhpcyxtRSkuZm9yRWFjaChmdW5jdGlvbihoKXt2YXIgbSxf'@;
put 'PVZ5KGgsMik7cmV0dXJuIG51bGw9PT0obT1kLmVuZ2luZSl8fHZvaWQgMD09PW0/dm9pZCAwOm0ub2ZmKF9bMF0sX1sxXSl9KSxRNCh0aGlzLG1FLG51bGwpLG5tZSh0aGlzLmVuZ2luZSx0aGlzLmhvdCksdGhpcy5lbmdpbmU9bnVsbCxhNihJMyhhLnByb3RvdHlwZSksImRlc3Ryb3kiLHRo'@;
put 'aXMpLmNhbGwodGhpcyl9fSx7a2V5OiJhZGRTaGVldCIsdmFsdWU6ZnVuY3Rpb24oZCxoKXtpZihpbyhoKSYmIWpmZShoKSlyZXR1cm4gV2woIlRoZSBwcm92aWRlZCBkYXRhIHNob3VsZCBiZSBhbiBhcnJheSBvZiBhcnJheXMuIiksITE7aWYobnVsbCE9ZCYmdGhpcy5lbmdpbmUuZG9lc1No'@;
put 'ZWV0RXhpc3QoZCkpcmV0dXJuIFdsKCJTaGVldCB3aXRoIHRoZSBwcm92aWRlZCBuYW1lIGFscmVhZHkgZXhpc3RzLiIpLCExO3RyeXt2YXIgbT10aGlzLmVuZ2luZS5hZGRTaGVldChkPz92b2lkIDApO3JldHVybiBoJiZ0aGlzLmVuZ2luZS5zZXRTaGVldENvbnRlbnQodGhpcy5lbmdpbmUu'@;
put 'Z2V0U2hlZXRJZChtKSxoKSxtfWNhdGNoKF8pe3JldHVybiBXbChfLm1lc3NhZ2UpLCExfX19LHtrZXk6InN3aXRjaFNoZWV0Iix2YWx1ZTpmdW5jdGlvbihkKXtpZih0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdChkKSl7dGhpcy5zaGVldE5hbWU9ZDt2YXIgaD10aGlzLmVuZ2luZS5nZXRT'@;
put 'aGVldFNlcmlhbGl6ZWQodGhpcy5zaGVldElkKTtoLmxlbmd0aD4wJiZ0aGlzLmhvdC5sb2FkRGF0YShoLCIiLmNvbmNhdChBYyhPYyksIi5zd2l0Y2hTaGVldCIpKX1lbHNlIElZKCJUaGUgc2hlZXQgbmFtZWQgYCIuY29uY2F0KGQsImAgZG9lcyBub3QgZXhpc3QsIHN3aXRjaCBhYm9ydGVk'@;
put 'LiIpKX19LHtrZXk6ImdldENlbGxUeXBlIix2YWx1ZTpmdW5jdGlvbihkLGgpe3ZhciBtPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp0aGlzLnNoZWV0SWQsXz10aGlzLmhvdC50b1BoeXNpY2FsUm93KGQpLE89dGhpcy5ob3QudG9QaHlz'@;
put 'aWNhbENvbHVtbihoKTtyZXR1cm4gbnVsbCE9PV8mJm51bGwhPT1PP3RoaXMuZW5naW5lLmdldENlbGxUeXBlKHtzaGVldDptLHJvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChkKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9t'@;
put 'VmlzdWFsSW5kZXgoaCl9KToiRU1QVFkifX0se2tleToiaXNGb3JtdWxhQ2VsbFR5cGUiLHZhbHVlOmZ1bmN0aW9uKGQsaCl7cmV0dXJuIHRoaXMuZW5naW5lLmRvZXNDZWxsSGF2ZUZvcm11bGEoe3NoZWV0OmFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3Vt'@;
put 'ZW50c1syXTp0aGlzLnNoZWV0SWQscm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGQpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChoKX0pfX0se2tleToicmVuZGVyRGVwZW5kZW50U2hlZXRzIix2YWx1'@;
put 'ZTpmdW5jdGlvbihkKXt2YXIgaD10aGlzLG09YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSxfPW5ldyBTZXQ7ZC5mb3JFYWNoKGZ1bmN0aW9uKE8pe3ZhciBYLGFlPW51bGw9PU98fG51bGw9PT0oWD1PLmFkZHJlc3MpfHx2b2lkIDA9PT1Y'@;
put 'P3ZvaWQgMDpYLnNoZWV0O3ZvaWQgMCE9PWFlJiYoXy5oYXMoYWUpfHxfLmFkZChhZSkpfSksdG1lKHRoaXMuZW5naW5lKS5mb3JFYWNoKGZ1bmN0aW9uKE8sWCl7dmFyIGFlOyhtfHxYIT09aC5zaGVldElkKSYmXy5oYXMoWCkmJihPLnJlbmRlcigpLG51bGw9PT0oYWU9Ty52aWV3KXx8dm9p'@;
put 'ZCAwPT09YWV8fGFlLmFkanVzdEVsZW1lbnRzU2l6ZSgpKX0pfX0se2tleToidmFsaWRhdGVEZXBlbmRlbnRDZWxscyIsdmFsdWU6ZnVuY3Rpb24oZCl7dmFyIGg9dGhpcyxfPWZ1bmN0aW9uKGFlKXt2YXIgcGUsYmU9bnVsbCE9PShwZT1hZT8uYWRkcmVzcykmJnZvaWQgMCE9PXBlP3BlOnt9'@;
put 'LHhlPWJlLnJvdyxWZT1iZS5jb2wsWmU9YmUuc2hlZXQ7cmV0dXJuIGlvKFplKT8iIi5jb25jYXQoWmUsIjoiKS5jb25jYXQoeGUsIngiKS5jb25jYXQoVmUpOiIifSxPPW5ldyBTZXQoKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXSku'@;
put 'bWFwKGZ1bmN0aW9uKFgpe3JldHVybiBfKFgpfSkpO2QuZm9yRWFjaChmdW5jdGlvbihYKXt2YXIgYWUscGUsYmU9bnVsbCE9PShhZT1YLmFkZHJlc3MpJiZ2b2lkIDAhPT1hZT9hZTp7fSx4ZT1iZS5yb3csVmU9YmUuY29sO2lmKCEoITE9PT1pbyh4ZSl8fCExPT09aW8oVmUpfHx4ZT49aC5o'@;
put 'b3QuY291bnRSb3dzKCl8fFZlPj1oLmhvdC5jb3VudENvbHMoKSkpe3ZhciBaZT1udWxsPT1YfHxudWxsPT09KHBlPVguYWRkcmVzcyl8fHZvaWQgMD09PXBlP3ZvaWQgMDpwZS5zaGVldCxsdD1fKFgpO2lmKHZvaWQgMCE9PVplJiYhTy5oYXMobHQpKXt2YXIgZHQ9dG1lKGguZW5naW5lKS5n'@;
put 'ZXQoWmUpO2lmKCFkdClyZXR1cm47ZHQudmFsaWRhdGVDZWxsKGR0LmdldERhdGFBdENlbGwoeGUsVmUpLGR0LmdldENlbGxNZXRhKHhlLFZlKSxmdW5jdGlvbigpe30pfX19KX19LHtrZXk6InN5bmNDaGFuZ2VXaXRoRW5naW5lIix2YWx1ZTpmdW5jdGlvbihkLGgsbSl7dmFyIF89e3Jvdzp0'@;
put 'aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChkKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoaCksc2hlZXQ6dGhpcy5zaGVldElkfTtpZih0aGlzLmVuZ2luZS5pc0l0UG9zc2libGVUb1NldENlbGxDb250ZW50'@;
put 'cyhfKSl7dmFyIE89dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoZCxoKTtyZXR1cm4gWnEobSxPLnR5cGUpJiYob21lKG0sTy5kYXRlRm9ybWF0KT9tPWFtZShtLE8uZGF0ZUZvcm1hdCk6ITE9PT1mdW5jdGlvbiBwOHQobCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBsJiZsLnN0YXJ0c1dpdGgoIj0i'@;
put 'KX0obSkmJihtPSInIi5jb25jYXQobSkpKSx0aGlzLmVuZ2luZS5zZXRDZWxsQ29udGVudHMoXyxtKX1XbCgiTm90IHBvc3NpYmxlIHRvIHNldCBjZWxsIGRhdGEgYXQgIi5jb25jYXQoSlNPTi5zdHJpbmdpZnkoXykpKX19LHtrZXk6Im9uQmVmb3JlVmFsaWRhdGUiLHZhbHVlOmZ1bmN0aW9u'@;
put 'KGQsaCxtKXt2YXIgXz10aGlzLmhvdC5wcm9wVG9Db2wobSk7aWYodGhpcy5pc0Zvcm11bGFDZWxsVHlwZShoLF8pKXt2YXIgTz17cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGgpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZy'@;
put 'b21WaXN1YWxJbmRleChfKSxzaGVldDp0aGlzLnNoZWV0SWR9LFg9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoaCxfKSxhZT10aGlzLmVuZ2luZS5nZXRDZWxsVmFsdWUoTyk7cmV0dXJuImRhdGUiPT09WC50eXBlJiZ0MChhZSkmJihhZT1sbWUoYWUsWC5kYXRlRm9ybWF0KSksIm9iamVjdCI9PT1K'@;
put 'NChhZSkmJm51bGwhPT1hZT9hZS52YWx1ZTphZX1yZXR1cm4gZH19LHtrZXk6Im9uQmVmb3JlQXV0b2ZpbGwiLHZhbHVlOmZ1bmN0aW9uKGQsaCxtKXt2YXIgXz1oLmdldFRvcFN0YXJ0Q29ybmVyKCksTz1fLnJvdyxYPV8uY29sLGFlPWguZ2V0Qm90dG9tRW5kQ29ybmVyKCkscGU9YWUucm93'@;
put 'LGJlPWFlLmNvbCx4ZT1tLmdldFRvcFN0YXJ0Q29ybmVyKCksVmU9eGUucm93LFplPXhlLmNvbCxsdD1tLmdldEJvdHRvbUVuZENvcm5lcigpLGR0PWx0LnJvdyxndD1sdC5jb2wsanQ9e3N0YXJ0Ontyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoTyks'@;
put 'Y29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KFgpLHNoZWV0OnRoaXMuc2hlZXRJZH0sZW5kOntyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgocGUpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJ'@;
put 'bmRleEZyb21WaXN1YWxJbmRleChiZSksc2hlZXQ6dGhpcy5zaGVldElkfX0scm49e3N0YXJ0Ontyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoVmUpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChaZSks'@;
put 'c2hlZXQ6dGhpcy5zaGVldElkfSxlbmQ6e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChkdCksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGd0KSxzaGVldDp0aGlzLnNoZWV0SWR9fTtpZighMT09PXRo'@;
put 'aXMuZW5naW5lLmlzSXRQb3NzaWJsZVRvU2V0Q2VsbENvbnRlbnRzKHJuKSlyZXR1cm4hMTtmb3IodmFyIFh0PXRoaXMuZW5naW5lLmdldEZpbGxSYW5nZURhdGEoanQscm4pLHluPWp0LnN0YXJ0LFZyPWp0LmVuZCxzaT1Wci5yb3cteW4ucm93KzEsQXI9VnIuY29sLXluLmNvbCsxLEVuPTA7'@;
put 'RW48WHQubGVuZ3RoO0VuKz0xKWZvcih2YXIgVHI9MDtUcjxYdFtFbl0ubGVuZ3RoO1RyKz0xKXt2YXIgVm49WHRbRW5dW1RyXSxjcj1FbiVzaSxDcj1UciVBcixZcj10aGlzLmhvdC5nZXRDZWxsTWV0YShjcixDcik7WnEoVm4sWXIudHlwZSkmJihWbi5zdGFydHNXaXRoKCInIik/WHRbRW5d'@;
put 'W1RyXT1Wbi5zbGljZSgxKTohMT09PXRoaXMuaXNGb3JtdWxhQ2VsbFR5cGUoY3IsQ3IsdGhpcy5zaGVldElkKSYmKFh0W0VuXVtUcl09bTh0KFZuLFlyLmRhdGVGb3JtYXQpKSl9cmV0dXJuIFh0fX0se2tleToib25CZWZvcmVMb2FkRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZCxoKXsoYXJndW1l'@;
put 'bnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOiIiKS5pbmNsdWRlcyhBYyhPYykpfHxRNCh0aGlzLHRYLExsKHRoaXMuaG90LmdldFNldHRpbmdzKCkuZGF0YSkpfX0se2tleToib25BZnRlckNlbGxNZXRhUmVzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFy'@;
put 'IGQ9dGhpcyxoPXRoaXMuaG90LmdldFNvdXJjZURhdGFBcnJheSgpLG09ITE7aC5mb3JFYWNoKGZ1bmN0aW9uKF8sTyl7Xy5mb3JFYWNoKGZ1bmN0aW9uKFgsYWUpe3ZhciBwZT1kLmhvdC5nZXRDZWxsTWV0YShPLGFlKSxiZT1wZS5kYXRlRm9ybWF0O1pxKFgscGUudHlwZSkmJihtPSEwLG9t'@;
put 'ZShYLGJlKT9oW09dW2FlXT1hbWUoWCxiZSk6ITE9PT1kLmlzRm9ybXVsYUNlbGxUeXBlKE8sYWUpJiYoaFtPXVthZV09IiciLmNvbmNhdChYKSkpfSl9KSwhMD09PW0mJihRNCh0aGlzLFIzLCEwKSx0aGlzLmVuZ2luZS5zZXRTaGVldENvbnRlbnQodGhpcy5zaGVldElkLGgpLFE0KHRoaXMs'@;
put 'UjMsITEpKX19LHtrZXk6Im9uQWZ0ZXJMb2FkRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZCxoKXtpZighKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToiIikuaW5jbHVkZXMoQWMoT2MpKSlpZih0aGlzLnNoZWV0TmFtZT1mdW5jdGlvbiBkOHQo'@;
put 'bCxjKXtyZXR1cm4oTGwoYyl8fCFsLmRvZXNTaGVldEV4aXN0KGMpKSYmKGM9bC5hZGRTaGVldChjKSksY30odGhpcy5lbmdpbmUsdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtPY10uc2hlZXROYW1lKSxqeSh0aGlzLHRYKSl0aGlzLnN3aXRjaFNoZWV0KHRoaXMuc2hlZXROYW1lKTtlbHNle3Zh'@;
put 'ciBfPXRoaXMuaG90LmdldFNvdXJjZURhdGFBcnJheSgpO2lmKHRoaXMuZW5naW5lLmlzSXRQb3NzaWJsZVRvUmVwbGFjZVNoZWV0Q29udGVudCh0aGlzLnNoZWV0SWQsXykpe1E0KHRoaXMsUjMsITApO3ZhciBPPXRoaXMuZW5naW5lLnNldFNoZWV0Q29udGVudCh0aGlzLnNoZWV0SWQsXyk7'@;
put 'dGhpcy5pbmRleFN5bmNlci5zZXR1cFN5bmNFbmRwb2ludCh0aGlzLmVuZ2luZSx0aGlzLnNoZWV0SWQpLHRoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKE8pLFE0KHRoaXMsUjMsITEpfX19fSx7a2V5OiJvbk1vZGlmeURhdGEiLHZhbHVlOmZ1bmN0aW9uKGQsaCxtLF8pe2lmKCJnZXQiPT09'@;
put 'XyYmIWp5KHRoaXMsUjMpJiZudWxsIT09dGhpcy5zaGVldE5hbWUmJnRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KHRoaXMuc2hlZXROYW1lKSl7dmFyIE89dGhpcy5ob3QudG9WaXN1YWxSb3coZCk7aWYobnVsbCE9PU8mJm51bGwhPT1oKXtpZighdGhpcy5pc0Zvcm11bGFDZWxsVHlwZShP'@;
put 'LGgpJiYiQVJSQVkiIT09dGhpcy5nZXRDZWxsVHlwZShPLGgpKXJldHVybiB2b2lkKGltZShtLnZhbHVlKSYmKG0udmFsdWU9ZnVuY3Rpb24gaDh0KGwpe3JldHVybiBpbWUobCk/bC5zdWJzdHIoMSk6bH0obS52YWx1ZSkpKTt2YXIgcGU9e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJ'@;
put 'bmRleEZyb21WaXN1YWxJbmRleChPKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoaCksc2hlZXQ6dGhpcy5zaGVldElkfSxiZT10aGlzLmVuZ2luZS5nZXRDZWxsVmFsdWUocGUpLHhlPXRoaXMuaG90LmdldENlbGxNZXRhKE8saCk7ImRhdGUi'@;
put 'PT09eGUudHlwZSYmdDAoYmUpJiYoYmU9bG1lKGJlLHhlLmRhdGVGb3JtYXQpKTt2YXIgVmU9Im9iamVjdCI9PT1KNChiZSkmJm51bGwhPT1iZT9iZS52YWx1ZTpiZTttLnZhbHVlPVZlfX19fSx7a2V5OiJvbk1vZGlmeVNvdXJjZURhdGEiLHZhbHVlOmZ1bmN0aW9uKGQsaCxtLF8pe2lmKCJn'@;
put 'ZXQiPT09XyYmIWp5KHRoaXMsUjMpJiZudWxsIT09dGhpcy5zaGVldE5hbWUmJnRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KHRoaXMuc2hlZXROYW1lKSl7dmFyIE89dGhpcy5ob3QudG9WaXN1YWxSb3coZCksWD10aGlzLmhvdC5wcm9wVG9Db2woaCk7aWYobnVsbCE9PU8mJm51bGwhPT1Y'@;
put 'KXtpZighdGhpcy5pc0Zvcm11bGFDZWxsVHlwZShPLFgpJiYiQVJSQVkiIT09dGhpcy5nZXRDZWxsVHlwZShPLFgpKXJldHVybjt2YXIgYmU9dGhpcy5lbmdpbmUuZ2V0U2hlZXREaW1lbnNpb25zKHRoaXMuZW5naW5lLmdldFNoZWV0SWQodGhpcy5zaGVldE5hbWUpKTtpZigwIT09YmUud2lk'@;
put 'dGh8fDAhPT1iZS5oZWlnaHQpe3ZhciB4ZT17cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KE8pLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChYKSxzaGVldDp0aGlzLnNoZWV0SWR9O20udmFsdWU9dGhp'@;
put 'cy5lbmdpbmUuZ2V0Q2VsbFNlcmlhbGl6ZWQoeGUpfX19fX0se2tleToib25BZnRlclNldERhdGFBdENlbGwiLHZhbHVlOmZ1bmN0aW9uKGQsaCl7dmFyIG09dGhpcztpZighenkoaCkpe3ZhciBfPVtdLE89W10sWD10aGlzLmVuZ2luZS5iYXRjaChmdW5jdGlvbigpe2QuZm9yRWFjaChmdW5j'@;
put 'dGlvbihhZSl7dmFyIHBlPVZ5KGFlLDQpLGJlPXBlWzBdLFZlPXBlWzNdLFplPW0uaG90LnByb3BUb0NvbChwZVsxXSksbHQ9bS5ob3QudG9QaHlzaWNhbFJvdyhiZSksZHQ9bS5ob3QudG9QaHlzaWNhbENvbHVtbihaZSksZ3Q9e3JvdzptLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21W'@;
put 'aXN1YWxJbmRleChiZSksY29sOm0uY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KFplKSxzaGVldDptLnNoZWV0SWR9O251bGwhPT1sdCYmbnVsbCE9PWR0P20uc3luY0NoYW5nZVdpdGhFbmdpbmUoYmUsWmUsVmUpOl8ucHVzaChbYmUsWmUsVmVdKSxPLnB1c2go'@;
put 'e2FkZHJlc3M6Z3R9KX0pfSk7Xy5sZW5ndGgmJnRoaXMuaG90LmFkZEhvb2tPbmNlKCJhZnRlckNoYW5nZSIsZnVuY3Rpb24oKXt2YXIgYWU9bS5lbmdpbmUuYmF0Y2goZnVuY3Rpb24oKXtfLmZvckVhY2goZnVuY3Rpb24ocGUpe3ZhciBiZT1WeShwZSwzKTttLnN5bmNDaGFuZ2VXaXRoRW5n'@;
put 'aW5lKGJlWzBdLGJlWzFdLGJlWzJdKX0pfSk7bS5yZW5kZXJEZXBlbmRlbnRTaGVldHMoYWUsITApfSksdGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMoWCksdGhpcy52YWxpZGF0ZURlcGVuZGVudENlbGxzKFgsTyl9fX0se2tleToib25BZnRlclNldFNvdXJjZURhdGFBdENlbGwiLHZhbHVl'@;
put 'OmZ1bmN0aW9uKGQsaCl7dmFyIG09dGhpcztpZighenkoaCkpe3ZhciBfPVtdLE89W107ZC5mb3JFYWNoKGZ1bmN0aW9uKFgpe3ZhciBhZT1WeShYLDQpLHBlPWFlWzBdLHhlPWFlWzNdLFZlPW0uaG90LnByb3BUb0NvbChhZVsxXSk7aWYodDAoVmUpKXt2YXIgWmU9e3JvdzptLnJvd0F4aXNT'@;
put 'eW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChwZSksY29sOm0uY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KFZlKSxzaGVldDptLnNoZWV0SWR9O2lmKCFtLmVuZ2luZS5pc0l0UG9zc2libGVUb1NldENlbGxDb250ZW50cyhaZSkpcmV0dXJuIHZvaWQg'@;
put 'V2woIk5vdCBwb3NzaWJsZSB0byBzZXQgc291cmNlIGNlbGwgZGF0YSBhdCAiLmNvbmNhdChKU09OLnN0cmluZ2lmeShaZSkpKTtPLnB1c2goe2FkZHJlc3M6WmV9KSxfLnB1c2guYXBwbHkoXyxmdW5jdGlvbiBSOHQobCl7cmV0dXJuIGZ1bmN0aW9uIEY4dChsKXtpZihBcnJheS5pc0FycmF5'@;
put 'KGwpKXJldHVybiBKcShsKX0obCl8fGZ1bmN0aW9uIFA4dChsKXtpZih0eXBlb2YgU3ltYm9sPCJ1IiYmbnVsbCE9bFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1sWyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20obCl9KGwpfHxobWUobCl8fGZ1bmN0aW9uIEw4dCgpe3Rocm93IG5l'@;
put 'dyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfShtLmVuZ2luZS5zZXRD'@;
put 'ZWxsQ29udGVudHMoWmUseGUpKSl9fSksdGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMoXyksdGhpcy52YWxpZGF0ZURlcGVuZGVudENlbGxzKF8sTyl9fX0se2tleToib25CZWZvcmVDcmVhdGVSb3ciLHZhbHVlOmZ1bmN0aW9uKGQsaCl7dmFyIG09dGhpcy5yb3dBeGlzU3luY2VyLmdldEhm'@;
put 'SW5kZXhGcm9tVmlzdWFsSW5kZXgoZCk7aWYoZD49dGhpcy5ob3QuY291bnRSb3dzKCkmJihtPWQpLG51bGw9PT10aGlzLnNoZWV0SWR8fCF0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdCh0aGlzLnNoZWV0TmFtZSl8fCF0aGlzLmVuZ2luZS5pc0l0UG9zc2libGVUb0FkZFJvd3ModGhpcy5z'@;
put 'aGVldElkLFttLGhdKSlyZXR1cm4hMX19LHtrZXk6Im9uQmVmb3JlQ3JlYXRlQ29sIix2YWx1ZTpmdW5jdGlvbihkLGgpe3ZhciBtPXRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGQpO2lmKGQ+PXRoaXMuaG90LmNvdW50Q29scygpJiYobT1kKSxudWxs'@;
put 'PT09dGhpcy5zaGVldElkfHwhdGhpcy5lbmdpbmUuZG9lc1NoZWV0RXhpc3QodGhpcy5zaGVldE5hbWUpfHwhdGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9BZGRDb2x1bW5zKHRoaXMuc2hlZXRJZCxbbSxoXSkpcmV0dXJuITF9fSx7a2V5OiJvbkJlZm9yZVJlbW92ZVJvdyIsdmFsdWU6ZnVu'@;
put 'Y3Rpb24oZCxoLG0pe3ZhciBfPXRoaXM7cmV0dXJuITEhPT10aGlzLnJvd0F4aXNTeW5jZXIuc2V0UmVtb3ZlZEhmSW5kZXhlcyhtKS5ldmVyeShmdW5jdGlvbihhZSl7cmV0dXJuIF8uZW5naW5lLmlzSXRQb3NzaWJsZVRvUmVtb3ZlUm93cyhfLnNoZWV0SWQsW2FlLDFdKX0pJiZ2b2lkIDB9'@;
put 'fSx7a2V5OiJvbkJlZm9yZVJlbW92ZUNvbCIsdmFsdWU6ZnVuY3Rpb24oZCxoLG0pe3ZhciBfPXRoaXM7cmV0dXJuITEhPT10aGlzLmNvbHVtbkF4aXNTeW5jZXIuc2V0UmVtb3ZlZEhmSW5kZXhlcyhtKS5ldmVyeShmdW5jdGlvbihhZSl7cmV0dXJuIF8uZW5naW5lLmlzSXRQb3NzaWJsZVRv'@;
put 'UmVtb3ZlQ29sdW1ucyhfLnNoZWV0SWQsW2FlLDFdKX0pJiZ2b2lkIDB9fSx7a2V5OiJvbkFmdGVyQ3JlYXRlUm93Iix2YWx1ZTpmdW5jdGlvbihkLGgsbSl7aWYoIXp5KG0pKXt2YXIgXz10aGlzLmVuZ2luZS5hZGRSb3dzKHRoaXMuc2hlZXRJZCxbdGhpcy5yb3dBeGlzU3luY2VyLmdldEhm'@;
put 'SW5kZXhGcm9tVmlzdWFsSW5kZXgoZCksaF0pO3RoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKF8pfX19LHtrZXk6Im9uQWZ0ZXJDcmVhdGVDb2wiLHZhbHVlOmZ1bmN0aW9uKGQsaCxtKXtpZighenkobSkpe3ZhciBfPXRoaXMuZW5naW5lLmFkZENvbHVtbnModGhpcy5zaGVldElkLFt0aGlz'@;
put 'LmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChkKSxoXSk7dGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMoXyl9fX0se2tleToib25BZnRlclJlbW92ZVJvdyIsdmFsdWU6ZnVuY3Rpb24oZCxoLG0sXyl7dmFyIE89dGhpcztpZighenkoXykpe3ZhciBYPXRoaXMu'@;
put 'cm93QXhpc1N5bmNlci5nZXRSZW1vdmVkSGZJbmRleGVzKCkuc29ydCgpLnJldmVyc2UoKSxhZT10aGlzLmVuZ2luZS5iYXRjaChmdW5jdGlvbigpe1guZm9yRWFjaChmdW5jdGlvbihwZSl7Ty5lbmdpbmUucmVtb3ZlUm93cyhPLnNoZWV0SWQsW3BlLDFdKX0pfSk7dGhpcy5yZW5kZXJEZXBl'@;
put 'bmRlbnRTaGVldHMoYWUpfX19LHtrZXk6Im9uQWZ0ZXJSZW1vdmVDb2wiLHZhbHVlOmZ1bmN0aW9uKGQsaCxtLF8pe3ZhciBPPXRoaXM7aWYoIXp5KF8pKXt2YXIgWD10aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0UmVtb3ZlZEhmSW5kZXhlcygpLnNvcnQoKS5yZXZlcnNlKCksYWU9dGhpcy5l'@;
put 'bmdpbmUuYmF0Y2goZnVuY3Rpb24oKXtYLmZvckVhY2goZnVuY3Rpb24ocGUpe08uZW5naW5lLnJlbW92ZUNvbHVtbnMoTy5zaGVldElkLFtwZSwxXSl9KX0pO3RoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKGFlKX19fSx7a2V5OiJvbkFmdGVyRGV0YWNoQ2hpbGQiLHZhbHVlOmZ1bmN0aW9u'@;
put 'KGQsaCxtKXt2YXIgXyxPPXRoaXM7UTQodGhpcyxSMywhMCk7dmFyIFg9dGhpcy5ob3QuZ2V0U291cmNlRGF0YUFycmF5KG0sMCxtKygobnVsbD09PShfPWguX19jaGlsZHJlbil8fHZvaWQgMD09PV8/dm9pZCAwOl8ubGVuZ3RoKXx8MCksdGhpcy5ob3QuY291bnRTb3VyY2VDb2xzKCkpO1E0'@;
put 'KHRoaXMsUjMsITEpLFguZm9yRWFjaChmdW5jdGlvbihhZSxwZSl7YWUuZm9yRWFjaChmdW5jdGlvbihiZSx4ZSl7Ty5lbmdpbmUuc2V0Q2VsbENvbnRlbnRzKHtjb2w6eGUscm93Om0rcGUsc2hlZXQ6Ty5zaGVldElkfSxbW2JlXV0pfSl9KX19LHtrZXk6Im9uRW5naW5lVmFsdWVzVXBkYXRl'@;
put 'ZCIsdmFsdWU6ZnVuY3Rpb24oZCl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGUiLGQpfX0se2tleToib25FbmdpbmVOYW1lZEV4cHJlc3Npb25zQWRkZWQiLHZhbHVlOmZ1bmN0aW9uKGQsaCl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyTmFtZWRFeHByZXNz'@;
put 'aW9uQWRkZWQiLGQsaCl9fSx7a2V5OiJvbkVuZ2luZU5hbWVkRXhwcmVzc2lvbnNSZW1vdmVkIix2YWx1ZTpmdW5jdGlvbihkLGgpe3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck5hbWVkRXhwcmVzc2lvblJlbW92ZWQiLGQsaCl9fSx7a2V5OiJvbkVuZ2luZVNoZWV0QWRkZWQiLHZhbHVlOmZ1'@;
put 'bmN0aW9uKGQpe3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclNoZWV0QWRkZWQiLGQpfX0se2tleToib25FbmdpbmVTaGVldFJlbmFtZWQiLHZhbHVlOmZ1bmN0aW9uKGQsaCl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyU2hlZXRSZW5hbWVkIixkLGgpfX0se2tleToib25FbmdpbmVTaGVldFJl'@;
put 'bW92ZWQiLHZhbHVlOmZ1bmN0aW9uKGQsaCl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyU2hlZXRSZW1vdmVkIixkLGgpfX1dLFt7a2V5OiJQTFVHSU5fS0VZIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gT2N9fSx7a2V5OiJQTFVHSU5fUFJJT1JJVFkiLGdldDpmdW5jdGlvbigpe3JldHVybiAy'@;
put 'NjB9fSx7a2V5OiJTRVRUSU5HX0tFWVMiLGdldDpmdW5jdGlvbigpe3JldHVybltPY10uY29uY2F0KFg4dCl9fV0pLGF9KEdhKTtmdW5jdGlvbiB2bWUobCxjKXsobnVsbD09Y3x8Yz5sLmxlbmd0aCkmJihjPWwubGVuZ3RoKTtmb3IodmFyIGE9MCxmPW5ldyBBcnJheShjKTthPGM7YSsrKWZb'@;
put 'YV09bFthXTtyZXR1cm4gZn1mdW5jdGlvbiB2UChsKXtyZXR1cm4gZnVuY3Rpb24gdXZ0KGwpe2lmKEFycmF5LmlzQXJyYXkobCkpcmV0dXJuIG5YKGwpfShsKXx8ZnVuY3Rpb24gc3Z0KGwpe2lmKHR5cGVvZiBTeW1ib2w8InUiJiZudWxsIT1sW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWxb'@;
put 'IkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbShsKX0obCl8fGZ1bmN0aW9uIGx2dChsLGMpe2lmKGwpe2lmKCJzdHJpbmciPT10eXBlb2YgbClyZXR1cm4gblgobCxjKTt2YXIgYT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobCkuc2xpY2UoOCwtMSk7aWYoIk9iamVjdCI9'@;
put 'PT1hJiZsLmNvbnN0cnVjdG9yJiYoYT1sLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09YXx8IlNldCI9PT1hKXJldHVybiBBcnJheS5mcm9tKGwpO2lmKCJBcmd1bWVudHMiPT09YXx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QoYSkpcmV0dXJuIG5Y'@;
put 'KGwsYyl9fShsKXx8ZnVuY3Rpb24gYXZ0KCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVy'@;
put 'YXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gblgobCxjKXsobnVsbD09Y3x8Yz5sLmxlbmd0aCkmJihjPWwubGVuZ3RoKTtmb3IodmFyIGE9MCxmPW5ldyBBcnJheShjKTthPGM7YSsrKWZbYV09bFthXTtyZXR1cm4gZn1mdW5jdGlvbiBVeShsKXtyZXR1cm4oVXk9ImZ1bmN0aW9uIj09'@;
put 'dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90'@;
put 'b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiB5bWUobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9i'@;
put 'amVjdC5kZWZpbmVQcm9wZXJ0eShsLGh2dChmLmtleSksZil9fWZ1bmN0aW9uIGh2dChsKXt2YXIgYz1mdW5jdGlvbiBwdnQobCxjKXtpZigib2JqZWN0IiE9PVV5KGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9'@;
put 'YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PVV5KGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3Ry'@;
put 'aW5nIik7cmV0dXJuInN5bWJvbCI9PT1VeShjKT9jOlN0cmluZyhjKX1mdW5jdGlvbiBsNigpe3JldHVybiBsNj10eXBlb2YgUmVmbGVjdDwidSImJlJlZmxlY3QuZ2V0P1JlZmxlY3QuZ2V0LmJpbmQoKTpmdW5jdGlvbihjLGEsZil7dmFyIGQ9ZnVuY3Rpb24gbXZ0KGwsYyl7Zm9yKDshT2Jq'@;
put 'ZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGwsYykmJm51bGwhPT0obD1MMyhsKSk7KTtyZXR1cm4gbH0oYyxhKTtpZihkKXt2YXIgaD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGQsYSk7cmV0dXJuIGguZ2V0P2guZ2V0LmNhbGwoYXJndW1lbnRzLmxlbmd0aDwz'@;
put 'P2M6Zik6aC52YWx1ZX19LGw2LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiByWChsLGMpe3JldHVybihyWD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihmLGQpe3JldHVybiBmLl9fcHJvdG9fXz1kLGZ9KShsLGMpfWZ1'@;
put 'bmN0aW9uIGlYKGwpe2lmKHZvaWQgMD09PWwpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gbH1mdW5jdGlvbiBMMyhsKXtyZXR1cm4oTDM9T2JqZWN0LnNldFByb3RvdHlw'@;
put 'ZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSl9KShsKX1mdW5jdGlvbiBibWUobCxjLGEpeyhmdW5jdGlvbiBfdnQobCxjKXtpZihjLmhhcyhsKSl0aHJvdyBuZXcgVHlwZUVycm9y'@;
put 'KCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkobCxjKSxjLnNldChsLGEpfWZ1bmN0aW9uIEgxKGwsYyl7cmV0dXJuIGZ1bmN0aW9uIHd2dChsLGMpe3JldHVybiBjLmdldD9jLmdldC5jYWxsKGwpOmMudmFsdWV9KGws'@;
put 'X21lKGwsYywiZ2V0IikpfWZ1bmN0aW9uIGdFKGwsYyxhKXtyZXR1cm4gZnVuY3Rpb24gQ3Z0KGwsYyxhKXtpZihjLnNldCljLnNldC5jYWxsKGwsYSk7ZWxzZXtpZighYy53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZp'@;
put 'ZWxkIik7Yy52YWx1ZT1hfX0obCxfbWUobCxjLCJzZXQiKSxhKSxhfWZ1bmN0aW9uIF9tZShsLGMsYSl7aWYoIWMuaGFzKGwpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK2ErIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBjLmdldChsKX11by5n'@;
put 'ZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlSGlkZUNvbHVtbnMiKSx1by5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJIaWRlQ29sdW1ucyIpLHVvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVVbmhpZGVDb2x1bW5zIiksdW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0'@;
put 'ZXIoImFmdGVyVW5oaWRlQ29sdW1ucyIpO3ZhciBvWD0iaGlkZGVuQ29sdW1ucyIsJGg9bmV3IFdlYWtNYXAsS2g9bmV3IFdlYWtNYXAsTXZ0PWZ1bmN0aW9uKGwpeyFmdW5jdGlvbiBndnQobCxjKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyYmbnVsbCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJv'@;
put 'cigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtsLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGMmJmMucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6bCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVBy'@;
put 'b3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksYyYmclgobCxjKX0oYSxsKTt2YXIgYz1mdW5jdGlvbiB2dnQobCl7dmFyIGM9ZnVuY3Rpb24gYnZ0KCl7aWYodHlwZW9mIFJlZmxlY3Q+InUifHwhUmVmbGVjdC5jb25zdHJ1Y3R8fFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0'@;
put 'dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sZnVuY3Rpb24oKXt9KSksITB9Y2F0Y2h7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlv'@;
put 'bigpe3ZhciBkLGY9TDMobCk7aWYoYyl7dmFyIGg9TDModGhpcykuY29uc3RydWN0b3I7ZD1SZWZsZWN0LmNvbnN0cnVjdChmLGFyZ3VtZW50cyxoKX1lbHNlIGQ9Zi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uIHl2dChsLGMpe2lmKGMmJigib2JqZWN0Ij09PVV5KGMp'@;
put 'fHwiZnVuY3Rpb24iPT10eXBlb2YgYykpcmV0dXJuIGM7aWYodm9pZCAwIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBpWChsKX0odGhpcyxkKX19KGEpO2Z1bmN0aW9uIGEo'@;
put 'KXt2YXIgZjshZnVuY3Rpb24gZnZ0KGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsYSk7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksbT0wO208ZDtt'@;
put 'KyspaFttXT1hcmd1bWVudHNbbV07cmV0dXJuIGJtZShpWChmPWMuY2FsbC5hcHBseShjLFt0aGlzXS5jb25jYXQoaCkpKSwkaCx7d3JpdGFibGU6ITAsdmFsdWU6e319KSxibWUoaVgoZiksS2gse3dyaXRhYmxlOiEwLHZhbHVlOm51bGx9KSxmfXJldHVybiBmdW5jdGlvbiBkdnQobCxjLGEp'@;
put 'e2MmJnltZShsLnByb3RvdHlwZSxjKSxhJiZ5bWUobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0oYSxbe2tleToiaXNFbmFibGVkIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtvWF19fSx7a2V5'@;
put 'OiJlbmFibGVQbHVnaW4iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcztpZighdGhpcy5lbmFibGVkKXt2YXIgaD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW29YXTtwYShoKSYmKGdFKHRoaXMsJGgsaCksTGwoaC5jb3B5UGFzdGVFbmFibGVkKSYmKGguY29weVBhc3RlRW5hYmxlZD0hMCkp'@;
put 'LGdFKHRoaXMsS2gsbmV3IGpSKSxIMSh0aGlzLEtoKS5hZGRMb2NhbEhvb2soImluaXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25NYXBJbml0KCl9KSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUsSDEodGhpcyxLaCkpLHRoaXMuYWRkSG9v'@;
put 'aygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixmdW5jdGlvbigpe3JldHVybiBkLm9uQWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zLmFwcGx5KGQsYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRDZWxsTWV0YSIsZnVuY3Rpb24obSxfLE8pe3JldHVybiBk'@;
put 'Lm9uQWZ0ZXJHZXRDZWxsTWV0YShtLF8sTyl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvbFdpZHRoIixmdW5jdGlvbihtLF8pe3JldHVybiBkLm9uTW9kaWZ5Q29sV2lkdGgobSxfKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRDb2xIZWFkZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25BZnRl'@;
put 'ckdldENvbEhlYWRlci5hcHBseShkLGFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvcHlhYmxlUmFuZ2UiLGZ1bmN0aW9uKG0pe3JldHVybiBkLm9uTW9kaWZ5Q29weWFibGVSYW5nZShtKX0pLGw2KEwzKGEucHJvdG90eXBlKSwiZW5hYmxlUGx1Z2luIix0aGlzKS5jYWxsKHRo'@;
put 'aXMpfX19LHtrZXk6InVwZGF0ZVBsdWdpbiIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLGw2KEwzKGEucHJvdG90eXBlKSwidXBkYXRlUGx1Z2luIix0aGlzKS5jYWxsKHRoaXMpfX0se2tleToiZGlzYWJsZVBsdWdpbiIsdmFsdWU6'@;
put 'ZnVuY3Rpb24oKXt0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSksZ0UodGhpcywkaCx7fSksbDYoTDMoYS5wcm90b3R5cGUpLCJkaXNhYmxlUGx1Z2luIix0aGlzKS5jYWxsKHRoaXMpLHRoaXMucmVzZXRDZWxsc01ldGEoKX19LHtrZXk6'@;
put 'InNob3dDb2x1bW5zIix2YWx1ZTpmdW5jdGlvbihkKXt2YXIgaD10aGlzLG09dGhpcy5nZXRIaWRkZW5Db2x1bW5zKCksXz10aGlzLmlzVmFsaWRDb25maWcoZCksTz1tLFg9SDEodGhpcyxLaCkuZ2V0VmFsdWVzKCkuc2xpY2UoKSxhZT1kLmxlbmd0aD4wO18mJmFlJiYoUm4oZC5tYXAoZnVu'@;
put 'Y3Rpb24oeGUpe3JldHVybiBoLmhvdC50b1BoeXNpY2FsQ29sdW1uKHhlKX0pLGZ1bmN0aW9uKHhlKXtYW3hlXT0hMX0pLE89UHMoWCxmdW5jdGlvbih4ZSxWZSxaZSl7cmV0dXJuIFZlJiZ4ZS5wdXNoKGguaG90LnRvVmlzdWFsQ29sdW1uKFplKSkseGV9LFtdKSksITEhPT10aGlzLmhvdC5y'@;
put 'dW5Ib29rcygiYmVmb3JlVW5oaWRlQ29sdW1ucyIsbSxPLF8mJmFlKSYmKF8mJmFlJiZIMSh0aGlzLEtoKS5zZXRWYWx1ZXMoWCksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJVbmhpZGVDb2x1bW5zIixtLE8sXyYmYWUsXyYmTy5s'@;
put 'ZW5ndGg8bS5sZW5ndGgpKX19LHtrZXk6InNob3dDb2x1bW4iLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksbT0wO208ZDttKyspaFttXT1hcmd1bWVudHNbbV07dGhpcy5zaG93Q29sdW1ucyhoKX19LHtrZXk6ImhpZGVDb2x1bW5z'@;
put 'Iix2YWx1ZTpmdW5jdGlvbihkKXt2YXIgaD10aGlzLG09dGhpcy5nZXRIaWRkZW5Db2x1bW5zKCksXz10aGlzLmlzVmFsaWRDb25maWcoZCksTz1tO18mJihPPUFycmF5LmZyb20obmV3IFNldChtLmNvbmNhdChkKSkpKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVIaWRlQ29sdW1u'@;
put 'cyIsbSxPLF8pJiYoXyYmdGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oZnVuY3Rpb24oKXtSbihkLGZ1bmN0aW9uKGFlKXtIMShoLEtoKS5zZXRWYWx1ZUF0SW5kZXgoaC5ob3QudG9QaHlzaWNhbENvbHVtbihhZSksITApfSl9LCEwKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJIaWRlQ29sdW1u'@;
put 'cyIsbSxPLF8sXyYmTy5sZW5ndGg+bS5sZW5ndGgpKX19LHtrZXk6ImhpZGVDb2x1bW4iLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksbT0wO208ZDttKyspaFttXT1hcmd1bWVudHNbbV07dGhpcy5oaWRlQ29sdW1ucyhoKX19LHtr'@;
put 'ZXk6ImdldEhpZGRlbkNvbHVtbnMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcztyZXR1cm4gaGEoSDEodGhpcyxLaCkuZ2V0SGlkZGVuSW5kZXhlcygpLGZ1bmN0aW9uKGgpe3JldHVybiBkLmhvdC50b1Zpc3VhbENvbHVtbihoKX0pfX0se2tleToiaXNIaWRkZW4iLHZhbHVlOmZ1bmN0'@;
put 'aW9uKGQpe3JldHVybiBIMSh0aGlzLEtoKS5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihkKSl8fCExfX0se2tleToiaXNWYWxpZENvbmZpZyIsdmFsdWU6ZnVuY3Rpb24oZCl7dmFyIGg9dGhpcy5ob3QuY291bnRDb2xzKCk7cmV0dXJuISEoQXJyYXkuaXNBcnJh'@;
put 'eShkKSYmZC5sZW5ndGg+MCkmJmQuZXZlcnkoZnVuY3Rpb24obSl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIobSkmJm0+PTAmJm08aH0pfX0se2tleToicmVzZXRDZWxsc01ldGEiLHZhbHVlOmZ1bmN0aW9uKCl7Um4odGhpcy5ob3QuZ2V0Q2VsbHNNZXRhKCksZnVuY3Rpb24oZCl7ZCYmKGQu'@;
put 'c2tpcENvbHVtbk9uUGFzdGU9ITEpfSl9fSx7a2V5OiJvbk1vZGlmeUNvbFdpZHRoIix2YWx1ZTpmdW5jdGlvbihkLGgpe3JldHVybiB0aGlzLmlzSGlkZGVuKGgpPzA6SDEodGhpcywkaCkuaW5kaWNhdG9ycyYmKHRoaXMuaXNIaWRkZW4oaCsxKXx8dGhpcy5pc0hpZGRlbihoLTEpKSYmIm51'@;
put 'bWJlciI9PXR5cGVvZiBkJiZ0aGlzLmhvdC5oYXNDb2xIZWFkZXJzKCk/ZCsxNTp2b2lkIDB9fSx7a2V5OiJvbkFmdGVyR2V0Q2VsbE1ldGEiLHZhbHVlOmZ1bmN0aW9uKGQsaCxtKXtpZighMT09PUgxKHRoaXMsJGgpLmNvcHlQYXN0ZUVuYWJsZWQmJnRoaXMuaXNIaWRkZW4oaCkmJihtLnNr'@;
put 'aXBDb2x1bW5PblBhc3RlPSEwKSx0aGlzLmlzSGlkZGVuKGgtMSkpbS5jbGFzc05hbWU9bS5jbGFzc05hbWV8fCIiLC0xPT09bS5jbGFzc05hbWUuaW5kZXhPZigiYWZ0ZXJIaWRkZW5Db2x1bW4iKSYmKG0uY2xhc3NOYW1lKz0iIGFmdGVySGlkZGVuQ29sdW1uIik7ZWxzZSBpZihtLmNsYXNz'@;
put 'TmFtZSl7dmFyIF89bS5jbGFzc05hbWUuc3BsaXQoIiAiKTtpZihfLmxlbmd0aD4wKXt2YXIgTz1fLmluZGV4T2YoImFmdGVySGlkZGVuQ29sdW1uIik7Tz4tMSYmXy5zcGxpY2UoTywxKSxtLmNsYXNzTmFtZT1fLmpvaW4oIiAiKX19fX0se2tleToib25Nb2RpZnlDb3B5YWJsZVJhbmdlIix2'@;
put 'YWx1ZTpmdW5jdGlvbihkKXt2YXIgaD10aGlzO2lmKEgxKHRoaXMsJGgpLmNvcHlQYXN0ZUVuYWJsZWQpcmV0dXJuIGQ7dmFyIG09W10sXz1mdW5jdGlvbihYLGFlLHBlLGJlKXttLnB1c2goe3N0YXJ0Um93OlgsZW5kUm93OmFlLHN0YXJ0Q29sOnBlLGVuZENvbDpiZX0pfTtyZXR1cm4gUm4o'@;
put 'ZCxmdW5jdGlvbihPKXt2YXIgWD0hMCxhZT0wO19vKE8uc3RhcnRDb2wsTy5lbmRDb2wsZnVuY3Rpb24ocGUpe2guaXNIaWRkZW4ocGUpPyhYfHxfKE8uc3RhcnRSb3csTy5lbmRSb3csYWUscGUtMSksWD0hMCk6KFgmJihhZT1wZSkscGU9PT1PLmVuZENvbCYmXyhPLnN0YXJ0Um93LE8uZW5k'@;
put 'Um93LGFlLHBlKSxYPSExKX0pfSksbX19LHtrZXk6Im9uQWZ0ZXJHZXRDb2xIZWFkZXIiLHZhbHVlOmZ1bmN0aW9uKGQsaCl7aWYoSDEodGhpcywkaCkuaW5kaWNhdG9ycyYmIShkPDApKXt2YXIgbT1bXTtkPj0xJiZ0aGlzLmlzSGlkZGVuKGQtMSkmJm0ucHVzaCgiYWZ0ZXJIaWRkZW5Db2x1'@;
put 'bW4iKSxkPHRoaXMuaG90LmNvdW50Q29scygpLTEmJnRoaXMuaXNIaWRkZW4oZCsxKSYmbS5wdXNoKCJiZWZvcmVIaWRkZW5Db2x1bW4iKSxnaShoLG0pfX19LHtrZXk6Im9uQWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIix2YWx1ZTpmdW5jdGlvbihkKXtkLml0ZW1zLnB1c2goe25h'@;
put 'bWU6YmF9LGZ1bmN0aW9uIG92dChsKXtyZXR1cm57a2V5OiJoaWRkZW5fY29sdW1uc19oaWRlIixuYW1lOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRTZWxlY3RlZExhc3QoKSxmPTA7aWYoQXJyYXkuaXNBcnJheShhKSl7dmFyIGQ9ZnVuY3Rpb24gZXZ0KGwsYyl7cmV0dXJuIGZ1bmN0aW9u'@;
put 'IGl2dChsKXtpZihBcnJheS5pc0FycmF5KGwpKXJldHVybiBsfShsKXx8ZnVuY3Rpb24gcnZ0KGwsYyl7dmFyIGE9bnVsbD09bD9udWxsOnR5cGVvZiBTeW1ib2w8InUiJiZsW1N5bWJvbC5pdGVyYXRvcl18fGxbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1hKXt2YXIgZixkLGgsbSxfPVtdLE89'@;
put 'ITAsWD0hMTt0cnl7aWYoaD0oYT1hLmNhbGwobCkpLm5leHQsMD09PWMpe2lmKE9iamVjdChhKSE9PWEpcmV0dXJuO089ITF9ZWxzZSBmb3IoOyEoTz0oZj1oLmNhbGwoYSkpLmRvbmUpJiYoXy5wdXNoKGYudmFsdWUpLF8ubGVuZ3RoIT09Yyk7Tz0hMCk7fWNhdGNoKGFlKXtYPSEwLGQ9YWV9'@;
put 'ZmluYWxseXt0cnl7aWYoIU8mJm51bGwhPWEucmV0dXJuJiYobT1hLnJldHVybigpLE9iamVjdChtKSE9PW0pKXJldHVybn1maW5hbGx5e2lmKFgpdGhyb3cgZH19cmV0dXJuIF99fShsLGMpfHxmdW5jdGlvbiBudnQobCxjKXtpZihsKXtpZigic3RyaW5nIj09dHlwZW9mIGwpcmV0dXJuIHZt'@;
put 'ZShsLGMpO3ZhciBhPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsKS5zbGljZSg4LC0xKTtpZigiT2JqZWN0Ij09PWEmJmwuY29uc3RydWN0b3ImJihhPWwuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1hfHwiU2V0Ij09PWEpcmV0dXJuIEFycmF5LmZyb20obCk7aWYoIkFyZ3Vt'@;
put 'ZW50cyI9PT1hfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChhKSlyZXR1cm4gdm1lKGwsYyl9fShsLGMpfHxmdW5jdGlvbiB0dnQoKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxl'@;
put 'IGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfShhLDQpO2RbMV0tZFszXSE9MCYmKGY9MSl9cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShLRyxmKX0s'@;
put 'Y2FsbGJhY2s6ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGY9YS5mcm9tLGQ9YS50byxoPU1hdGgubWF4KE1hdGgubWluKGYuY29sLGQuY29sKSwwKSxtPU1hdGgubWF4KGYuY29sLGQuY29sKSxfPVtdLE89aDtPPD1tO08rPTEpXy5wdXNoKE8pO2wu'@;
put 'aGlkZUNvbHVtbnMoXyk7dmFyIGFlPXRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KF9bXy5sZW5ndGgtMV0sMSwhMCk7TnVtYmVyLmlzSW50ZWdlcihhZSkmJmFlPj0wP3RoaXMuc2VsZWN0Q29sdW1ucyhhZSk6dGhpcy5kZXNlbGVjdENlbGwoKSx0aGlz'@;
put 'LnJlbmRlcigpLHRoaXMudmlldy5hZGp1c3RFbGVtZW50c1NpemUoITApfSxkaXNhYmxlZDohMSxoaWRkZW46ZnVuY3Rpb24oKXtyZXR1cm4hKHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHx0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSl9fX0o'@;
put 'dGhpcyksZnVuY3Rpb24gY3Z0KGwpe3ZhciBjPVtdO3JldHVybntrZXk6ImhpZGRlbl9jb2x1bW5zX3Nob3ciLG5hbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHFHLGMubGVuZ3RoPjE/MTowKX0sY2FsbGJhY2s6ZnVuY3Rpb24oKXt2YXIgZixkO2lmKDAh'@;
put 'PT1jLmxlbmd0aCl7dmFyIGg9Y1swXSxtPWNbYy5sZW5ndGgtMV07aD1udWxsIT09KGY9dGhpcy5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoaC0xLC0xKSkmJnZvaWQgMCE9PWY/ZjowLG09bnVsbCE9PShkPXRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVh'@;
put 'cmVzdE5vdEhpZGRlbkluZGV4KG0rMSwxKSkmJnZvaWQgMCE9PWQ/ZDp0aGlzLmNvdW50Q29scygpLTEsbC5zaG93Q29sdW1ucyhjKSx0aGlzLnJlbmRlcigpLHRoaXMudmlldy5hZGp1c3RFbGVtZW50c1NpemUoITApLG0taCsxPT09dGhpcy5jb3VudENvbHMoKXx8dGhpcy5zZWxlY3RDb2x1'@;
put 'bW5zKGgsbSl9fSxkaXNhYmxlZDohMSxoaWRkZW46ZnVuY3Rpb24oKXt2YXIgZj10aGlzLGQ9aGEobC5nZXRIaWRkZW5Db2x1bW5zKCksZnVuY3Rpb24oZ3Qpe3JldHVybiBmLnRvUGh5c2ljYWxDb2x1bW4oZ3QpfSk7aWYoIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRl'@;
put 'cigpJiYhdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl8fGQubGVuZ3RoPDEpcmV0dXJuITA7Yy5sZW5ndGg9MDt2YXIgaD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksbT1oLmdldFRvcFN0YXJ0Q29ybmVyKCkuY29sLF89aC5nZXRCb3R0b21FbmRDb3JuZXIoKS5jb2ws'@;
put 'Tz10aGlzLmNvbHVtbkluZGV4TWFwcGVyLFg9Ty5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KG0pLGFlPU8uZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChfKSxwZT1PLmdldE5vdFRyaW1tZWRJbmRleGVzKCksYmU9W107aWYobSE9PV8pe2lmKF8tbSsxPmFlLVgrMSl7dmFyIFpl'@;
put 'PXBlLnNsaWNlKG0sXysxKTtiZS5wdXNoLmFwcGx5KGJlLHZQKFplLmZpbHRlcihmdW5jdGlvbihndCl7cmV0dXJuIGQuaW5jbHVkZXMoZ3QpfSkpKX19ZWxzZSBpZigwPT09WCYmWDxtKWJlLnB1c2guYXBwbHkoYmUsdlAocGUuc2xpY2UoMCxtKSkpO2Vsc2UgaWYobnVsbD09PVgpYmUucHVz'@;
put 'aC5hcHBseShiZSx2UChwZS5zbGljZSgwLHRoaXMuY291bnRDb2xzKCkpKSk7ZWxzZXt2YXIgbHQ9dGhpcy5jb3VudENvbHMoKS0xO2FlPT09Ty5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KE8uZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGx0LC0xKSkmJmx0Pl8mJmJlLnB1c2guYXBw'@;
put 'bHkoYmUsdlAocGUuc2xpY2UoXysxKSkpfXJldHVybiBSbihiZSxmdW5jdGlvbihndCl7Yy5wdXNoKGYudG9WaXN1YWxDb2x1bW4oZ3QpKX0pLDA9PT1jLmxlbmd0aH19fSh0aGlzKSl9fSx7a2V5OiJvbk1hcEluaXQiLHZhbHVlOmZ1bmN0aW9uKCl7QXJyYXkuaXNBcnJheShIMSh0aGlzLCRo'@;
put 'KS5jb2x1bW5zKSYmdGhpcy5oaWRlQ29sdW1ucyhIMSh0aGlzLCRoKS5jb2x1bW5zKX19LHtrZXk6ImRlc3Ryb3kiLHZhbHVlOmZ1bmN0aW9uKCl7Z0UodGhpcywkaCxudWxsKSxnRSh0aGlzLEtoLG51bGwpLGw2KEwzKGEucHJvdG90eXBlKSwiZGVzdHJveSIsdGhpcykuY2FsbCh0aGlzKX19'@;
put 'XSxbe2tleToiUExVR0lOX0tFWSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG9YfX0se2tleToiUExVR0lOX1BSSU9SSVRZIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMzEwfX1dKSxhfShHYSk7ZnVuY3Rpb24gd21lKGwsYyl7KG51bGw9PWN8fGM+bC5sZW5ndGgpJiYoYz1sLmxlbmd0aCk7Zm9y'@;
put 'KHZhciBhPTAsZj1uZXcgQXJyYXkoYyk7YTxjO2ErKylmW2FdPWxbYV07cmV0dXJuIGZ9ZnVuY3Rpb24geVAobCl7cmV0dXJuIGZ1bmN0aW9uIEx2dChsKXtpZihBcnJheS5pc0FycmF5KGwpKXJldHVybiBhWChsKX0obCl8fGZ1bmN0aW9uIFJ2dChsKXtpZih0eXBlb2YgU3ltYm9sPCJ1IiYm'@;
put 'bnVsbCE9bFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1sWyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20obCl9KGwpfHxmdW5jdGlvbiBJdnQobCxjKXtpZihsKXtpZigic3RyaW5nIj09dHlwZW9mIGwpcmV0dXJuIGFYKGwsYyk7dmFyIGE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmlu'@;
put 'Zy5jYWxsKGwpLnNsaWNlKDgsLTEpO2lmKCJPYmplY3QiPT09YSYmbC5jb25zdHJ1Y3RvciYmKGE9bC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PWF8fCJTZXQiPT09YSlyZXR1cm4gQXJyYXkuZnJvbShsKTtpZigiQXJndW1lbnRzIj09PWF8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86'@;
put 'Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KGEpKXJldHVybiBhWChsLGMpfX0obCl8fGZ1bmN0aW9uIER2dCgpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJh'@;
put 'eSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIGFYKGwsYyl7KG51bGw9PWN8fGM+bC5sZW5ndGgpJiYoYz1sLmxlbmd0aCk7Zm9yKHZhciBhPTAsZj1uZXcgQXJyYXkoYyk7YTxjO2ErKylmW2FdPWxbYV07cmV0dXJuIGZ9ZnVu'@;
put 'Y3Rpb24gWnkobCl7cmV0dXJuKFp5PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29u'@;
put 'c3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gQ21lKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9'@;
put 'ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxOdnQoZi5rZXkpLGYpfX1mdW5jdGlvbiBOdnQobCl7dmFyIGM9ZnVuY3Rpb24gVnZ0KGwsYyl7aWYoIm9iamVjdCIhPT1aeShsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wu'@;
put 'dG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1aeShmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3Ry'@;
put 'aW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09WnkoYyk/YzpTdHJpbmcoYyl9ZnVuY3Rpb24gczYoKXtyZXR1cm4gczY9dHlwZW9mIFJlZmxlY3Q8InUiJiZSZWZsZWN0LmdldD9SZWZsZWN0LmdldC5iaW5kKCk6ZnVuY3Rpb24oYyxhLGYp'@;
put 'e3ZhciBkPWZ1bmN0aW9uIEJ2dChsLGMpe2Zvcig7IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsLGMpJiZudWxsIT09KGw9UDMobCkpOyk7cmV0dXJuIGx9KGMsYSk7aWYoZCl7dmFyIGg9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihkLGEpO3JldHVybiBo'@;
put 'LmdldD9oLmdldC5jYWxsKGFyZ3VtZW50cy5sZW5ndGg8Mz9jOmYpOmgudmFsdWV9fSxzNi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gbFgobCxjKXtyZXR1cm4obFg9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZixk'@;
put 'KXtyZXR1cm4gZi5fX3Byb3RvX189ZCxmfSkobCxjKX1mdW5jdGlvbiBzWChsKXtpZih2b2lkIDA9PT1sKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGx9ZnVuY3Rpb24g'@;
put 'UDMobCl7cmV0dXJuKFAzPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGEpe3JldHVybiBhLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpfSkobCl9ZnVuY3Rpb24gU21lKGwsYyxhKXsoZnVuY3Rpb24gWXZ0KGws'@;
put 'Yyl7aWYoYy5oYXMobCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGwsYyksYy5zZXQobCxhKX1mdW5jdGlvbiBCZihsLGMpe3JldHVybiBmdW5jdGlvbiBXdnQobCxjKXtyZXR1'@;
put 'cm4gYy5nZXQ/Yy5nZXQuY2FsbChsKTpjLnZhbHVlfShsLE1tZShsLGMsImdldCIpKX1mdW5jdGlvbiB2RShsLGMsYSl7cmV0dXJuIGZ1bmN0aW9uIEd2dChsLGMsYSl7aWYoYy5zZXQpYy5zZXQuY2FsbChsLGEpO2Vsc2V7aWYoIWMud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0'@;
put 'ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2MudmFsdWU9YX19KGwsTW1lKGwsYywic2V0IiksYSksYX1mdW5jdGlvbiBNbWUobCxjLGEpe2lmKCFjLmhhcyhsKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIithKyIgcHJpdmF0ZSBmaWVsZCBvbiBu'@;
put 'b24taW5zdGFuY2UiKTtyZXR1cm4gYy5nZXQobCl9dW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUhpZGVSb3dzIiksdW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVySGlkZVJvd3MiKSx1by5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlVW5oaWRlUm93cyIp'@;
put 'LHVvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclVuaGlkZVJvd3MiKTt2YXIgdVg9ImhpZGRlblJvd3MiLEYzPW5ldyBXZWFrTWFwLHFoPW5ldyBXZWFrTWFwLEt2dD1mdW5jdGlvbihsKXshZnVuY3Rpb24ganZ0KGwsYyl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGMmJm51bGwhPT1j'@;
put 'KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7bC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShjJiZjLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmwsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEw'@;
put 'fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGMmJmxYKGwsYyl9KGEsbCk7dmFyIGM9ZnVuY3Rpb24genZ0KGwpe3ZhciBjPWZ1bmN0aW9uIFp2dCgpe2lmKHR5cGVvZiBSZWZsZWN0PiJ1Inx8IVJlZmxlY3QuY29uc3RydWN0fHxSZWZsZWN0'@;
put 'LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLGZ1bmN0aW9uKCl7fSkpLCEwfWNhdGNoe3JldHVybiEx'@;
put 'fX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZCxmPVAzKGwpO2lmKGMpe3ZhciBoPVAzKHRoaXMpLmNvbnN0cnVjdG9yO2Q9UmVmbGVjdC5jb25zdHJ1Y3QoZixhcmd1bWVudHMsaCl9ZWxzZSBkPWYuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbiBVdnQobCxjKXtpZihj'@;
put 'JiYoIm9iamVjdCI9PT1aeShjKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGMpKXJldHVybiBjO2lmKHZvaWQgMCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gc1gobCl9KHRoaXMs'@;
put 'ZCl9fShhKTtmdW5jdGlvbiBhKCl7dmFyIGY7IWZ1bmN0aW9uIEZ2dChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGEpO2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3'@;
put 'IEFycmF5KGQpLG09MDttPGQ7bSsrKWhbbV09YXJndW1lbnRzW21dO3JldHVybiBTbWUoc1goZj1jLmNhbGwuYXBwbHkoYyxbdGhpc10uY29uY2F0KGgpKSksRjMse3dyaXRhYmxlOiEwLHZhbHVlOnt9fSksU21lKHNYKGYpLHFoLHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksZn1yZXR1cm4g'@;
put 'ZnVuY3Rpb24gSHZ0KGwsYyxhKXtjJiZDbWUobC5wcm90b3R5cGUsYyksYSYmQ21lKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGEsW3trZXk6ImlzRW5hYmxlZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuaG90LmdldFNl'@;
put 'dHRpbmdzKClbdVhdfX0se2tleToiZW5hYmxlUGx1Z2luIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXM7aWYoIXRoaXMuZW5hYmxlZCl7dmFyIGg9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt1WF07cGEoaCkmJih2RSh0aGlzLEYzLGgpLExsKGguY29weVBhc3RlRW5hYmxlZCkmJihoLmNv'@;
put 'cHlQYXN0ZUVuYWJsZWQ9ITApKSx2RSh0aGlzLHFoLG5ldyBqUiksQmYodGhpcyxxaCkuYWRkTG9jYWxIb29rKCJpbml0IixmdW5jdGlvbigpe3JldHVybiBkLm9uTWFwSW5pdCgpfSksdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lLEJmKHRoaXMs'@;
put 'cWgpKSx0aGlzLmFkZEhvb2soImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucy5hcHBseShkLGFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Q2VsbE1ldGEiLGZ1bmN0aW9u'@;
put 'KG0sXyxPKXtyZXR1cm4gZC5vbkFmdGVyR2V0Q2VsbE1ldGEobSxfLE8pfSksdGhpcy5hZGRIb29rKCJtb2RpZnlSb3dIZWlnaHQiLGZ1bmN0aW9uKG0sXyl7cmV0dXJuIGQub25Nb2RpZnlSb3dIZWlnaHQobSxfKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRSb3dIZWFkZXIiLGZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIGQub25BZnRlckdldFJvd0hlYWRlci5hcHBseShkLGFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvcHlhYmxlUmFuZ2UiLGZ1bmN0aW9uKG0pe3JldHVybiBkLm9uTW9kaWZ5Q29weWFibGVSYW5nZShtKX0pLHM2KFAzKGEucHJvdG90eXBlKSwiZW5hYmxlUGx1'@;
put 'Z2luIix0aGlzKS5jYWxsKHRoaXMpfX19LHtrZXk6InVwZGF0ZVBsdWdpbiIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHM2KFAzKGEucHJvdG90eXBlKSwidXBkYXRlUGx1Z2luIix0aGlzKS5jYWxsKHRoaXMpfX0se2tleToiZGlz'@;
put 'YWJsZVBsdWdpbiIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmhvdC5yb3dJbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSksdkUodGhpcyxGMyx7fSksczYoUDMoYS5wcm90b3R5cGUpLCJkaXNhYmxlUGx1Z2luIix0aGlzKS5jYWxsKHRoaXMpLHRoaXMucmVzZXRDZWxs'@;
put 'c01ldGEoKX19LHtrZXk6InNob3dSb3dzIix2YWx1ZTpmdW5jdGlvbihkKXt2YXIgaD10aGlzLG09dGhpcy5nZXRIaWRkZW5Sb3dzKCksXz10aGlzLmlzVmFsaWRDb25maWcoZCksTz1tLFg9QmYodGhpcyxxaCkuZ2V0VmFsdWVzKCkuc2xpY2UoKSxhZT1kLmxlbmd0aD4wO18mJmFlJiYoUm4o'@;
put 'ZC5tYXAoZnVuY3Rpb24oeGUpe3JldHVybiBoLmhvdC50b1BoeXNpY2FsUm93KHhlKX0pLGZ1bmN0aW9uKHhlKXtYW3hlXT0hMX0pLE89UHMoWCxmdW5jdGlvbih4ZSxWZSxaZSl7cmV0dXJuIFZlJiZ4ZS5wdXNoKGguaG90LnRvVmlzdWFsUm93KFplKSkseGV9LFtdKSksITEhPT10aGlzLmhv'@;
put 'dC5ydW5Ib29rcygiYmVmb3JlVW5oaWRlUm93cyIsbSxPLF8mJmFlKSYmKF8mJmFlJiZCZih0aGlzLHFoKS5zZXRWYWx1ZXMoWCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVW5oaWRlUm93cyIsbSxPLF8mJmFlLF8mJk8ubGVuZ3RoPG0ubGVuZ3RoKSl9fSx7a2V5OiJzaG93Um93Iix2YWx1'@;
put 'ZTpmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLG09MDttPGQ7bSsrKWhbbV09YXJndW1lbnRzW21dO3RoaXMuc2hvd1Jvd3MoaCl9fSx7a2V5OiJoaWRlUm93cyIsdmFsdWU6ZnVuY3Rpb24oZCl7dmFyIGg9dGhpcyxtPXRoaXMuZ2V0SGlkZGVu'@;
put 'Um93cygpLF89dGhpcy5pc1ZhbGlkQ29uZmlnKGQpLE89bTtfJiYoTz1BcnJheS5mcm9tKG5ldyBTZXQobS5jb25jYXQoZCkpKSksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlSGlkZVJvd3MiLG0sTyxfKSYmKF8mJnRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKGZ1bmN0aW9uKCl7Um4o'@;
put 'ZCxmdW5jdGlvbihhZSl7QmYoaCxxaCkuc2V0VmFsdWVBdEluZGV4KGguaG90LnRvUGh5c2ljYWxSb3coYWUpLCEwKX0pfSwhMCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVySGlkZVJvd3MiLG0sTyxfLF8mJk8ubGVuZ3RoPm0ubGVuZ3RoKSl9fSx7a2V5OiJoaWRlUm93Iix2YWx1ZTpmdW5j'@;
put 'dGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLG09MDttPGQ7bSsrKWhbbV09YXJndW1lbnRzW21dO3RoaXMuaGlkZVJvd3MoaCl9fSx7a2V5OiJnZXRIaWRkZW5Sb3dzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXM7cmV0dXJuIGhhKEJmKHRoaXMs'@;
put 'cWgpLmdldEhpZGRlbkluZGV4ZXMoKSxmdW5jdGlvbihoKXtyZXR1cm4gZC5ob3QudG9WaXN1YWxSb3coaCl9KX19LHtrZXk6ImlzSGlkZGVuIix2YWx1ZTpmdW5jdGlvbihkKXtyZXR1cm4gQmYodGhpcyxxaCkuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxSb3coZCkpfHwh'@;
put 'MX19LHtrZXk6ImlzVmFsaWRDb25maWciLHZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBoPXRoaXMuaG90LmNvdW50Um93cygpO3JldHVybiEhKEFycmF5LmlzQXJyYXkoZCkmJmQubGVuZ3RoPjApJiZkLmV2ZXJ5KGZ1bmN0aW9uKG0pe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKG0pJiZtPj0wJiZt'@;
put 'PGh9KX19LHtrZXk6InJlc2V0Q2VsbHNNZXRhIix2YWx1ZTpmdW5jdGlvbigpe1JuKHRoaXMuaG90LmdldENlbGxzTWV0YSgpLGZ1bmN0aW9uKGQpe2QmJihkLnNraXBSb3dPblBhc3RlPSExKX0pfX0se2tleToib25Nb2RpZnlSb3dIZWlnaHQiLHZhbHVlOmZ1bmN0aW9uKGQsaCl7cmV0dXJu'@;
put 'IHRoaXMuaXNIaWRkZW4oaCk/MDpkfX0se2tleToib25BZnRlckdldENlbGxNZXRhIix2YWx1ZTpmdW5jdGlvbihkLGgsbSl7aWYoITE9PT1CZih0aGlzLEYzKS5jb3B5UGFzdGVFbmFibGVkJiZ0aGlzLmlzSGlkZGVuKGQpJiYobS5za2lwUm93T25QYXN0ZT0hMCksdGhpcy5pc0hpZGRlbihk'@;
put 'LTEpKW0uY2xhc3NOYW1lPW0uY2xhc3NOYW1lfHwiIiwtMT09PW0uY2xhc3NOYW1lLmluZGV4T2YoImFmdGVySGlkZGVuUm93IikmJihtLmNsYXNzTmFtZSs9IiBhZnRlckhpZGRlblJvdyIpO2Vsc2UgaWYobS5jbGFzc05hbWUpe3ZhciBfPW0uY2xhc3NOYW1lLnNwbGl0KCIgIik7aWYoXy5s'@;
put 'ZW5ndGg+MCl7dmFyIE89Xy5pbmRleE9mKCJhZnRlckhpZGRlblJvdyIpO08+LTEmJl8uc3BsaWNlKE8sMSksbS5jbGFzc05hbWU9Xy5qb2luKCIgIil9fX19LHtrZXk6Im9uTW9kaWZ5Q29weWFibGVSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZCl7dmFyIGg9dGhpcztpZihCZih0aGlzLEYzKS5j'@;
put 'b3B5UGFzdGVFbmFibGVkKXJldHVybiBkO3ZhciBtPVtdLF89ZnVuY3Rpb24oWCxhZSxwZSxiZSl7bS5wdXNoKHtzdGFydFJvdzpYLGVuZFJvdzphZSxzdGFydENvbDpwZSxlbmRDb2w6YmV9KX07cmV0dXJuIFJuKGQsZnVuY3Rpb24oTyl7dmFyIFg9ITAsYWU9MDtfbyhPLnN0YXJ0Um93LE8u'@;
put 'ZW5kUm93LGZ1bmN0aW9uKHBlKXtoLmlzSGlkZGVuKHBlKT8oWHx8XyhhZSxwZS0xLE8uc3RhcnRDb2wsTy5lbmRDb2wpLFg9ITApOihYJiYoYWU9cGUpLHBlPT09Ty5lbmRSb3cmJl8oYWUscGUsTy5zdGFydENvbCxPLmVuZENvbCksWD0hMSl9KX0pLG19fSx7a2V5OiJvbkFmdGVyR2V0Um93'@;
put 'SGVhZGVyIix2YWx1ZTpmdW5jdGlvbihkLGgpe2lmKEJmKHRoaXMsRjMpLmluZGljYXRvcnMmJiEoZDwwKSl7dmFyIG09W107ZD49MSYmdGhpcy5pc0hpZGRlbihkLTEpJiZtLnB1c2goImFmdGVySGlkZGVuUm93IiksZDx0aGlzLmhvdC5jb3VudFJvd3MoKS0xJiZ0aGlzLmlzSGlkZGVuKGQr'@;
put 'MSkmJm0ucHVzaCgiYmVmb3JlSGlkZGVuUm93IiksZ2koaCxtKX19fSx7a2V5OiJvbkFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsdmFsdWU6ZnVuY3Rpb24oZCl7ZC5pdGVtcy5wdXNoKHtuYW1lOmJhfSxmdW5jdGlvbiBPdnQobCl7cmV0dXJue2tleToiaGlkZGVuX3Jvd3NfaGlk'@;
put 'ZSIsbmFtZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0U2VsZWN0ZWRMYXN0KCksZj0wO2lmKEFycmF5LmlzQXJyYXkoYSkpe3ZhciBkPWZ1bmN0aW9uIGt2dChsLGMpe3JldHVybiBmdW5jdGlvbiBUdnQobCl7aWYoQXJyYXkuaXNBcnJheShsKSlyZXR1cm4gbH0obCl8fGZ1bmN0aW9uIEF2'@;
put 'dChsLGMpe3ZhciBhPW51bGw9PWw/bnVsbDp0eXBlb2YgU3ltYm9sPCJ1IiYmbFtTeW1ib2wuaXRlcmF0b3JdfHxsWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9YSl7dmFyIGYsZCxoLG0sXz1bXSxPPSEwLFg9ITE7dHJ5e2lmKGg9KGE9YS5jYWxsKGwpKS5uZXh0LDA9PT1jKXtpZihPYmplY3Qo'@;
put 'YSkhPT1hKXJldHVybjtPPSExfWVsc2UgZm9yKDshKE89KGY9aC5jYWxsKGEpKS5kb25lKSYmKF8ucHVzaChmLnZhbHVlKSxfLmxlbmd0aCE9PWMpO089ITApO31jYXRjaChhZSl7WD0hMCxkPWFlfWZpbmFsbHl7dHJ5e2lmKCFPJiZudWxsIT1hLnJldHVybiYmKG09YS5yZXR1cm4oKSxPYmpl'@;
put 'Y3QobSkhPT1tKSlyZXR1cm59ZmluYWxseXtpZihYKXRocm93IGR9fXJldHVybiBffX0obCxjKXx8ZnVuY3Rpb24geHZ0KGwsYyl7aWYobCl7aWYoInN0cmluZyI9PXR5cGVvZiBsKXJldHVybiB3bWUobCxjKTt2YXIgYT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobCkuc2xpY2Uo'@;
put 'OCwtMSk7aWYoIk9iamVjdCI9PT1hJiZsLmNvbnN0cnVjdG9yJiYoYT1sLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09YXx8IlNldCI9PT1hKXJldHVybiBBcnJheS5mcm9tKGwpO2lmKCJBcmd1bWVudHMiPT09YXx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQv'@;
put 'LnRlc3QoYSkpcmV0dXJuIHdtZShsLGMpfX0obCxjKXx8ZnVuY3Rpb24gRXZ0KCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0'@;
put 'cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX0oYSwzKTtkWzBdLWRbMl0hPTAmJihmPTEpfXJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoWEcsZil9LGNhbGxiYWNrOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxh'@;
put 'c3QoKSxmPWEuZnJvbSxkPWEudG8saD1NYXRoLm1heChNYXRoLm1pbihmLnJvdyxkLnJvdyksMCksbT1NYXRoLm1heChmLnJvdyxkLnJvdyksXz1bXSxPPWg7Tzw9bTtPKz0xKV8ucHVzaChPKTtsLmhpZGVSb3dzKF8pO3ZhciBhZT10aGlzLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RI'@;
put 'aWRkZW5JbmRleChfW18ubGVuZ3RoLTFdLDEsITApO051bWJlci5pc0ludGVnZXIoYWUpJiZhZT49MD90aGlzLnNlbGVjdFJvd3MoYWUpOnRoaXMuZGVzZWxlY3RDZWxsKCksdGhpcy5yZW5kZXIoKSx0aGlzLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCEwKX0sZGlzYWJsZWQ6ITEsaGlkZGVu'@;
put 'OmZ1bmN0aW9uKCl7cmV0dXJuISh0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKXx8dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCkpfX19KHRoaXMpLGZ1bmN0aW9uIFB2dChsKXt2YXIgYz1bXTtyZXR1cm57a2V5OiJoaWRkZW5fcm93c19zaG93IixuYW1l'@;
put 'OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShKRyxjLmxlbmd0aD4xPzE6MCl9LGNhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGYsZDtpZigwIT09Yy5sZW5ndGgpe3ZhciBoPWNbMF0sbT1jW2MubGVuZ3RoLTFdO2g9bnVsbCE9PShmPXRoaXMucm93SW5kZXhNYXBw'@;
put 'ZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGgtMSwtMSkpJiZ2b2lkIDAhPT1mP2Y6MCxtPW51bGwhPT0oZD10aGlzLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChtKzEsMSkpJiZ2b2lkIDAhPT1kP2Q6dGhpcy5jb3VudFJvd3MoKS0xLGwuc2hvd1Jvd3MoYyks'@;
put 'dGhpcy5yZW5kZXIoKSx0aGlzLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCEwKSxtLWgrMT09PXRoaXMuY291bnRSb3dzKCl8fHRoaXMuc2VsZWN0Um93cyhoLG0pfX0sZGlzYWJsZWQ6ITEsaGlkZGVuOmZ1bmN0aW9uKCl7dmFyIGY9dGhpcyxkPWhhKGwuZ2V0SGlkZGVuUm93cygpLGZ1bmN0'@;
put 'aW9uKGd0KXtyZXR1cm4gZi50b1BoeXNpY2FsUm93KGd0KX0pO2lmKCF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSYmIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfHxkLmxlbmd0aDwxKXJldHVybiEwO2MubGVuZ3RoPTA7dmFyIGg9dGhpcy5nZXRT'@;
put 'ZWxlY3RlZFJhbmdlTGFzdCgpLG09aC5nZXRUb3BTdGFydENvcm5lcigpLnJvdyxfPWguZ2V0Qm90dG9tRW5kQ29ybmVyKCkucm93LE89dGhpcy5yb3dJbmRleE1hcHBlcixYPU8uZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChtKSxhZT1PLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5k'@;
put 'ZXgoXykscGU9Ty5nZXROb3RUcmltbWVkSW5kZXhlcygpLGJlPVtdO2lmKG0hPT1fKXtpZihfLW0rMT5hZS1YKzEpe3ZhciBaZT1wZS5zbGljZShtLF8rMSk7YmUucHVzaC5hcHBseShiZSx5UChaZS5maWx0ZXIoZnVuY3Rpb24oZ3Qpe3JldHVybiBkLmluY2x1ZGVzKGd0KX0pKSl9fWVsc2Ug'@;
put 'aWYoMD09PVgmJlg8bSliZS5wdXNoLmFwcGx5KGJlLHlQKHBlLnNsaWNlKDAsbSkpKTtlbHNlIGlmKG51bGw9PT1YKWJlLnB1c2guYXBwbHkoYmUseVAocGUuc2xpY2UoMCx0aGlzLmNvdW50Um93cygpKSkpO2Vsc2V7dmFyIGx0PXRoaXMuY291bnRSb3dzKCktMTthZT09PU8uZ2V0UmVuZGVy'@;
put 'YWJsZUZyb21WaXN1YWxJbmRleChPLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChsdCwtMSkpJiZsdD5fJiZiZS5wdXNoLmFwcGx5KGJlLHlQKHBlLnNsaWNlKF8rMSkpKX1yZXR1cm4gUm4oYmUsZnVuY3Rpb24oZ3Qpe2MucHVzaChmLnRvVmlzdWFsUm93KGd0KSl9KSwwPT09Yy5sZW5ndGh9'@;
put 'fX0odGhpcykpfX0se2tleToib25NYXBJbml0Iix2YWx1ZTpmdW5jdGlvbigpe0FycmF5LmlzQXJyYXkoQmYodGhpcyxGMykucm93cykmJnRoaXMuaGlkZVJvd3MoQmYodGhpcyxGMykucm93cyl9fSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbigpe3ZFKHRoaXMsRjMsbnVsbCksdkUo'@;
put 'dGhpcyxxaCxudWxsKSxzNihQMyhhLnByb3RvdHlwZSksImRlc3Ryb3kiLHRoaXMpLmNhbGwodGhpcyl9fV0sW3trZXk6IlBMVUdJTl9LRVkiLGdldDpmdW5jdGlvbigpe3JldHVybiB1WH19LHtrZXk6IlBMVUdJTl9QUklPUklUWSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDMyMH19XSksYX0o'@;
put 'R2EpO2Z1bmN0aW9uIGttZShsLGMpeyhudWxsPT1jfHxjPmwubGVuZ3RoKSYmKGM9bC5sZW5ndGgpO2Zvcih2YXIgYT0wLGY9bmV3IEFycmF5KGMpO2E8YzthKyspZlthXT1sW2FdO3JldHVybiBmfWZ1bmN0aW9uIEVtZShsLGMpeyhudWxsPT1jfHxjPmwubGVuZ3RoKSYmKGM9bC5sZW5ndGgp'@;
put 'O2Zvcih2YXIgYT0wLGY9bmV3IEFycmF5KGMpO2E8YzthKyspZlthXT1sW2FdO3JldHVybiBmfWZ1bmN0aW9uIFl5KGwpe3JldHVybihZeT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9m'@;
put 'IGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIHhtZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsr'@;
put 'KXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsYzd0KGYua2V5KSxmKX19ZnVuY3Rpb24gYzd0KGwpe3ZhciBjPWZ1bmN0aW9uIGY3dChs'@;
put 'LGMpe2lmKCJvYmplY3QiIT09WXkobCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09WXkoZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigi'@;
put 'QEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PVl5KGMpP2M6U3RyaW5nKGMpfWZ1bmN0aW9uIFd5KCl7cmV0dXJuIFd5PXR5cGVvZiBS'@;
put 'ZWZsZWN0PCJ1IiYmUmVmbGVjdC5nZXQ/UmVmbGVjdC5nZXQuYmluZCgpOmZ1bmN0aW9uKGMsYSxmKXt2YXIgZD1mdW5jdGlvbiBkN3QobCxjKXtmb3IoOyFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobCxjKSYmbnVsbCE9PShsPWVtKGwpKTspO3JldHVybiBsfShjLGEp'@;
put 'O2lmKGQpe3ZhciBoPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZCxhKTtyZXR1cm4gaC5nZXQ/aC5nZXQuY2FsbChhcmd1bWVudHMubGVuZ3RoPDM/YzpmKTpoLnZhbHVlfX0sV3kuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIGNYKGwsYyl7cmV0dXJuKGNYPU9iamVj'@;
put 'dC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGYsZCl7cmV0dXJuIGYuX19wcm90b19fPWQsZn0pKGwsYyl9ZnVuY3Rpb24gQW1lKGwpe2lmKHZvaWQgMD09PWwpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGlu'@;
put 'aXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gbH1mdW5jdGlvbiBlbShsKXtyZXR1cm4oZW09T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuX19wcm90b19ffHxPYmplY3Qu'@;
put 'Z2V0UHJvdG90eXBlT2YoYSl9KShsKX11by5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQ29sdW1uRnJlZXplIiksdW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29sdW1uRnJlZXplIiksdW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUNvbHVtblVuZnJl'@;
put 'ZXplIiksdW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29sdW1uVW5mcmVlemUiKTt2YXIgVG1lPSJtYW51YWxDb2x1bW5GcmVlemUiLHlFPW5ldyBXZWFrTWFwLHk3dD1mdW5jdGlvbihsKXshZnVuY3Rpb24gaDd0KGwsYyl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGMmJm51bGwh'@;
put 'PT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7bC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShjJiZjLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmwsd3JpdGFibGU6ITAsY29uZmlndXJhYmxl'@;
put 'OiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGMmJmNYKGwsYyl9KGEsbCk7dmFyIGM9ZnVuY3Rpb24gcDd0KGwpe3ZhciBjPWZ1bmN0aW9uIGc3dCgpe2lmKHR5cGVvZiBSZWZsZWN0PiJ1Inx8IVJlZmxlY3QuY29uc3RydWN0fHxSZWZs'@;
put 'ZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLGZ1bmN0aW9uKCl7fSkpLCEwfWNhdGNoe3JldHVy'@;
put 'biExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZCxmPWVtKGwpO2lmKGMpe3ZhciBoPWVtKHRoaXMpLmNvbnN0cnVjdG9yO2Q9UmVmbGVjdC5jb25zdHJ1Y3QoZixhcmd1bWVudHMsaCl9ZWxzZSBkPWYuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbiBtN3QobCxjKXtp'@;
put 'ZihjJiYoIm9iamVjdCI9PT1ZeShjKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGMpKXJldHVybiBjO2lmKHZvaWQgMCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gQW1lKGwpfSh0'@;
put 'aGlzLGQpfX0oYSk7ZnVuY3Rpb24gYShmKXt2YXIgZDtyZXR1cm4gZnVuY3Rpb24gczd0KGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsYSksZD1jLmNhbGwodGhpcyxmKSx5RS5z'@;
put 'ZXQoQW1lKGQpLHthZnRlckZpcnN0VXNlOiExfSksZH1yZXR1cm4gZnVuY3Rpb24gdTd0KGwsYyxhKXtjJiZ4bWUobC5wcm90b3R5cGUsYyksYSYmeG1lKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGEsW3trZXk6ImlzRW5hYmxlZCIs'@;
put 'dmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbVG1lXX19LHtrZXk6ImVuYWJsZVBsdWdpbiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzO3RoaXMuZW5hYmxlZHx8KHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixm'@;
put 'dW5jdGlvbihoKXtyZXR1cm4gZC5hZGRDb250ZXh0TWVudUVudHJ5KGgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVDb2x1bW5Nb3ZlIixmdW5jdGlvbihoLG0pe3JldHVybiBkLm9uQmVmb3JlQ29sdW1uTW92ZShoLG0pfSksV3koZW0oYS5wcm90b3R5cGUpLCJlbmFibGVQbHVnaW4iLHRoaXMp'@;
put 'LmNhbGwodGhpcykpfX0se2tleToiZGlzYWJsZVBsdWdpbiIsdmFsdWU6ZnVuY3Rpb24oKXt5RS5nZXQodGhpcykuYWZ0ZXJGaXJzdFVzZT0hMSxXeShlbShhLnByb3RvdHlwZSksImRpc2FibGVQbHVnaW4iLHRoaXMpLmNhbGwodGhpcyl9fSx7a2V5OiJ1cGRhdGVQbHVnaW4iLHZhbHVlOmZ1'@;
put 'bmN0aW9uKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxXeShlbShhLnByb3RvdHlwZSksInVwZGF0ZVBsdWdpbiIsdGhpcykuY2FsbCh0aGlzKX19LHtrZXk6ImZyZWV6ZUNvbHVtbiIsdmFsdWU6ZnVuY3Rpb24oZCl7dmFyIGg9eUUuZ2V0KHRoaXMpLG09dGhp'@;
put 'cy5ob3QuZ2V0U2V0dGluZ3MoKSxfPW0uZml4ZWRDb2x1bW5zU3RhcnQ8dGhpcy5ob3QuY291bnRDb2xzKCkmJmQ+bS5maXhlZENvbHVtbnNTdGFydC0xO2guYWZ0ZXJGaXJzdFVzZXx8KGguYWZ0ZXJGaXJzdFVzZT0hMCksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29sdW1uRnJl'@;
put 'ZXplIixkLF8pJiYoXyYmKHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLm1vdmVJbmRleGVzKGQsbS5maXhlZENvbHVtbnNTdGFydCksbS5fZml4ZWRDb2x1bW5zU3RhcnQrPTEpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvbHVtbkZyZWV6ZSIsZCxfKSl9fSx7a2V5OiJ1bmZyZWV6ZUNv'@;
put 'bHVtbiIsdmFsdWU6ZnVuY3Rpb24oZCl7dmFyIGg9eUUuZ2V0KHRoaXMpLG09dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSxfPW0uZml4ZWRDb2x1bW5zU3RhcnQ+MCYmZDw9bS5maXhlZENvbHVtbnNTdGFydC0xO2guYWZ0ZXJGaXJzdFVzZXx8KGguYWZ0ZXJGaXJzdFVzZT0hMCksITEhPT10aGlz'@;
put 'LmhvdC5ydW5Ib29rcygiYmVmb3JlQ29sdW1uVW5mcmVlemUiLGQsXykmJihfJiYobS5fZml4ZWRDb2x1bW5zU3RhcnQtPTEsdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIubW92ZUluZGV4ZXMoZCxtLmZpeGVkQ29sdW1uc1N0YXJ0KSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29sdW1u'@;
put 'VW5mcmVlemUiLGQsXykpfX0se2tleToiYWRkQ29udGV4dE1lbnVFbnRyeSIsdmFsdWU6ZnVuY3Rpb24oZCl7ZC5pdGVtcy5wdXNoKHtuYW1lOiItLS0tLS0tLS0ifSxmdW5jdGlvbiB0N3QobCl7cmV0dXJue2tleToiZnJlZXplX2NvbHVtbiIsbmFtZTpmdW5jdGlvbigpe3JldHVybiB0aGlz'@;
put 'LmdldFRyYW5zbGF0ZWRQaHJhc2Uoa0cpfSxjYWxsYmFjazpmdW5jdGlvbihhLGYpe3ZhciBkPWZ1bmN0aW9uIHF2dChsLGMpe3JldHVybiBmdW5jdGlvbiBlN3QobCl7aWYoQXJyYXkuaXNBcnJheShsKSlyZXR1cm4gbH0obCl8fGZ1bmN0aW9uIFF2dChsLGMpe3ZhciBhPW51bGw9PWw/bnVs'@;
put 'bDp0eXBlb2YgU3ltYm9sPCJ1IiYmbFtTeW1ib2wuaXRlcmF0b3JdfHxsWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9YSl7dmFyIGYsZCxoLG0sXz1bXSxPPSEwLFg9ITE7dHJ5e2lmKGg9KGE9YS5jYWxsKGwpKS5uZXh0LDA9PT1jKXtpZihPYmplY3QoYSkhPT1hKXJldHVybjtPPSExfWVsc2Ug'@;
put 'Zm9yKDshKE89KGY9aC5jYWxsKGEpKS5kb25lKSYmKF8ucHVzaChmLnZhbHVlKSxfLmxlbmd0aCE9PWMpO089ITApO31jYXRjaChhZSl7WD0hMCxkPWFlfWZpbmFsbHl7dHJ5e2lmKCFPJiZudWxsIT1hLnJldHVybiYmKG09YS5yZXR1cm4oKSxPYmplY3QobSkhPT1tKSlyZXR1cm59ZmluYWxs'@;
put 'eXtpZihYKXRocm93IGR9fXJldHVybiBffX0obCxjKXx8ZnVuY3Rpb24gSnZ0KGwsYyl7aWYobCl7aWYoInN0cmluZyI9PXR5cGVvZiBsKXJldHVybiBrbWUobCxjKTt2YXIgYT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobCkuc2xpY2UoOCwtMSk7aWYoIk9iamVjdCI9PT1hJiZs'@;
put 'LmNvbnN0cnVjdG9yJiYoYT1sLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09YXx8IlNldCI9PT1hKXJldHVybiBBcnJheS5mcm9tKGwpO2lmKCJBcmd1bWVudHMiPT09YXx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QoYSkpcmV0dXJuIGttZShsLGMp'@;
put 'fX0obCxjKXx8ZnVuY3Rpb24gWHZ0KCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0'@;
put 'ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX0oZiwxKTtsLmZyZWV6ZUNvbHVtbihkWzBdLnN0YXJ0LmNvbCksdGhpcy5yZW5kZXIoKSx0aGlzLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCEwKX0saGlkZGVuOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksZj0hMTtyZXR1'@;
put 'cm4odm9pZCAwPT09YXx8YS5sZW5ndGg+MXx8YVswXS5mcm9tLmNvbCE9PWFbMF0udG8uY29sfHxhWzBdLmZyb20uY29sPD10aGlzLmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQtMSkmJihmPSEwKSxmfX19KHRoaXMpLGZ1bmN0aW9uIGw3dChsKXtyZXR1cm57a2V5OiJ1bmZyZWV6'@;
put 'ZV9jb2x1bW4iLG5hbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKEVHKX0sY2FsbGJhY2s6ZnVuY3Rpb24oYSxmKXt2YXIgZD1mdW5jdGlvbiBuN3QobCxjKXtyZXR1cm4gZnVuY3Rpb24gYTd0KGwpe2lmKEFycmF5LmlzQXJyYXkobCkpcmV0dXJuIGx9KGwp'@;
put 'fHxmdW5jdGlvbiBvN3QobCxjKXt2YXIgYT1udWxsPT1sP251bGw6dHlwZW9mIFN5bWJvbDwidSImJmxbU3ltYm9sLml0ZXJhdG9yXXx8bFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPWEpe3ZhciBmLGQsaCxtLF89W10sTz0hMCxYPSExO3RyeXtpZihoPShhPWEuY2FsbChsKSkubmV4dCwwPT09'@;
put 'Yyl7aWYoT2JqZWN0KGEpIT09YSlyZXR1cm47Tz0hMX1lbHNlIGZvcig7IShPPShmPWguY2FsbChhKSkuZG9uZSkmJihfLnB1c2goZi52YWx1ZSksXy5sZW5ndGghPT1jKTtPPSEwKTt9Y2F0Y2goYWUpe1g9ITAsZD1hZX1maW5hbGx5e3RyeXtpZighTyYmbnVsbCE9YS5yZXR1cm4mJihtPWEu'@;
put 'cmV0dXJuKCksT2JqZWN0KG0pIT09bSkpcmV0dXJufWZpbmFsbHl7aWYoWCl0aHJvdyBkfX1yZXR1cm4gX319KGwsYyl8fGZ1bmN0aW9uIGk3dChsLGMpe2lmKGwpe2lmKCJzdHJpbmciPT10eXBlb2YgbClyZXR1cm4gRW1lKGwsYyk7dmFyIGE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5j'@;
put 'YWxsKGwpLnNsaWNlKDgsLTEpO2lmKCJPYmplY3QiPT09YSYmbC5jb25zdHJ1Y3RvciYmKGE9bC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PWF8fCJTZXQiPT09YSlyZXR1cm4gQXJyYXkuZnJvbShsKTtpZigiQXJndW1lbnRzIj09PWF8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xh'@;
put 'bXBlZCk/QXJyYXkkLy50ZXN0KGEpKXJldHVybiBFbWUobCxjKX19KGwsYyl8fGZ1bmN0aW9uIHI3dCgpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9u'@;
put 'LWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9KGYsMSk7bC51bmZyZWV6ZUNvbHVtbihkWzBdLnN0YXJ0LmNvbCksdGhpcy5yZW5kZXIoKSx0aGlzLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCEwKX0saGlkZGVuOmZ1bmN0aW9uKCl7'@;
put 'dmFyIGE9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksZj0hMTtyZXR1cm4odm9pZCAwPT09YXx8YS5sZW5ndGg+MXx8YVswXS5mcm9tLmNvbCE9PWFbMF0udG8uY29sfHxhWzBdLmZyb20uY29sPj10aGlzLmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQpJiYoZj0hMCksZn19fSh0aGlz'@;
put 'KSl9fSx7a2V5OiJvbkJlZm9yZUNvbHVtbk1vdmUiLHZhbHVlOmZ1bmN0aW9uKGQsaCl7aWYoeUUuZ2V0KHRoaXMpLmFmdGVyRmlyc3RVc2Upe3ZhciBfPXRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQ7aWYoaDxffHxkLnNvbWUoZnVuY3Rpb24oTyl7cmV0dXJuIE88'@;
put 'X30pKXJldHVybiExfX19XSxbe2tleToiUExVR0lOX0tFWSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFRtZX19LHtrZXk6IlBMVUdJTl9QUklPUklUWSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDExMH19XSksYX0oR2EpO2Z1bmN0aW9uIGJFKGwpe3JldHVybihiRT0iZnVuY3Rpb24iPT10eXBl'@;
put 'b2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlw'@;
put 'ZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIE9tZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0'@;
put 'LmRlZmluZVByb3BlcnR5KGwsdzd0KGYua2V5KSxmKX19ZnVuY3Rpb24gdzd0KGwpe3ZhciBjPWZ1bmN0aW9uIEM3dChsLGMpe2lmKCJvYmplY3QiIT09YkUobCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNh'@;
put 'bGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09YkUoZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmci'@;
put 'KTtyZXR1cm4ic3ltYm9sIj09PWJFKGMpP2M6U3RyaW5nKGMpfXZhciBHeT0icHgiLFM3dD1mdW5jdGlvbigpe2Z1bmN0aW9uIGwoYyl7KGZ1bmN0aW9uIGI3dChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBm'@;
put 'dW5jdGlvbiIpfSkodGhpcyxsKSx0aGlzLmhvdD1jLHRoaXMuX2VsZW1lbnQ9bnVsbCx0aGlzLnN0YXRlPTAsdGhpcy5pbmxpbmVQcm9wZXJ0eT1jLmlzUnRsKCk/InJpZ2h0IjoibGVmdCJ9cmV0dXJuIGZ1bmN0aW9uIF83dChsLGMsYSl7YyYmT21lKGwucHJvdG90eXBlLGMpLGEmJk9tZShs'@;
put 'LGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShsLFt7a2V5OiJhcHBlbmRUbyIsdmFsdWU6ZnVuY3Rpb24oYSl7YS5hcHBlbmRDaGlsZCh0aGlzLl9lbGVtZW50KSx0aGlzLnN0YXRlPTJ9fSx7a2V5OiJidWlsZCIsdmFsdWU6ZnVuY3Rpb24o'@;
put 'KXswPT09dGhpcy5zdGF0ZSYmKHRoaXMuX2VsZW1lbnQ9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuc3RhdGU9MSl9fSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuaXNBcHBlbmRlZCgpJiZ0aGlzLl9lbGVtZW50LnBhcmVudEVs'@;
put 'ZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5fZWxlbWVudCksdGhpcy5fZWxlbWVudD1udWxsLHRoaXMuc3RhdGU9MH19LHtrZXk6ImlzQXBwZW5kZWQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIDI9PT10aGlzLnN0YXRlfX0se2tleToiaXNCdWlsdCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4g'@;
put 'dGhpcy5zdGF0ZT49MX19LHtrZXk6InNldFBvc2l0aW9uIix2YWx1ZTpmdW5jdGlvbihhLGYpe3QwKGEpJiYodGhpcy5fZWxlbWVudC5zdHlsZS50b3A9YStHeSksdDAoZikmJih0aGlzLl9lbGVtZW50LnN0eWxlW3RoaXMuaW5saW5lUHJvcGVydHldPWYrR3kpfX0se2tleToiZ2V0UG9zaXRp'@;
put 'b24iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fZWxlbWVudC5zdHlsZTtyZXR1cm57dG9wOmEudG9wP3BhcnNlSW50KGEudG9wLDEwKTowLHN0YXJ0OmFbdGhpcy5pbmxpbmVQcm9wZXJ0eV0/cGFyc2VJbnQoYVt0aGlzLmlubGluZVByb3BlcnR5XSwxMCk6MH19fSx7a2V5OiJzZXRT'@;
put 'aXplIix2YWx1ZTpmdW5jdGlvbihhLGYpe3QwKGEpJiYodGhpcy5fZWxlbWVudC5zdHlsZS53aWR0aD1hK0d5KSx0MChmKSYmKHRoaXMuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0PWYrR3kpfX0se2tleToiZ2V0U2l6ZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57d2lkdGg6dGhpcy5fZWxlbWVu'@;
put 'dC5zdHlsZS53aWR0aD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLndpZHRoLDEwKTowLGhlaWdodDp0aGlzLl9lbGVtZW50LnN0eWxlLmhlaWdodD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLmhlaWdodCwxMCk6MH19fSx7a2V5OiJzZXRPZmZzZXQiLHZhbHVlOmZ1bmN0aW9u'@;
put 'KGEsZil7dDAoYSkmJih0aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpblRvcD1hK0d5KSx0MChmKSYmKHRoaXMuX2VsZW1lbnQuc3R5bGVbIm1hcmdpbiIuY29uY2F0KEFjKHRoaXMuaW5saW5lUHJvcGVydHkpKV09ZitHeSl9fSx7a2V5OiJnZXRPZmZzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFy'@;
put 'IGE9dGhpcy5fZWxlbWVudC5zdHlsZSxmPSJtYXJnaW4iLmNvbmNhdChBYyh0aGlzLmlubGluZVByb3BlcnR5KSk7cmV0dXJue3RvcDphLm1hcmdpblRvcD9wYXJzZUludChhLm1hcmdpblRvcCwxMCk6MCxzdGFydDphW2ZdP3BhcnNlSW50KGFbZl0sMTApOjB9fX1dKSxsfSgpO2NvbnN0IFJt'@;
put 'ZT1TN3Q7ZnVuY3Rpb24gJHkobCl7cmV0dXJuKCR5PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1i'@;
put 'b2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gTG1lKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25m'@;
put 'aWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxFN3QoZi5rZXkpLGYpfX1mdW5jdGlvbiBFN3QobCl7dmFyIGM9ZnVuY3Rpb24geDd0KGwsYyl7aWYoIm9iamVjdCIhPT0keShsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9'@;
put 'bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT0keShmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJl'@;
put 'dHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09JHkoYyk/YzpTdHJpbmcoYyl9ZnVuY3Rpb24gYlAoKXtyZXR1cm4gYlA9dHlwZW9mIFJlZmxlY3Q8InUiJiZSZWZsZWN0LmdldD9SZWZsZWN0LmdldC5iaW5kKCk6ZnVuY3Rp'@;
put 'b24oYyxhLGYpe3ZhciBkPWZ1bmN0aW9uIEE3dChsLGMpe2Zvcig7IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsLGMpJiZudWxsIT09KGw9S3kobCkpOyk7cmV0dXJuIGx9KGMsYSk7aWYoZCl7dmFyIGg9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihkLGEp'@;
put 'O3JldHVybiBoLmdldD9oLmdldC5jYWxsKGFyZ3VtZW50cy5sZW5ndGg8Mz9jOmYpOmgudmFsdWV9fSxiUC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gZFgobCxjKXtyZXR1cm4oZFg9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVu'@;
put 'Y3Rpb24oZixkKXtyZXR1cm4gZi5fX3Byb3RvX189ZCxmfSkobCxjKX1mdW5jdGlvbiBLeShsKXtyZXR1cm4oS3k9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90'@;
put 'eXBlT2YoYSl9KShsKX12YXIgUDd0PWZ1bmN0aW9uKGwpeyFmdW5jdGlvbiBUN3QobCxjKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyYmbnVsbCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtsLnBy'@;
put 'b3RvdHlwZT1PYmplY3QuY3JlYXRlKGMmJmMucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6bCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksYyYmZFgobCxjKX0oYSxsKTt2YXIgYz1m'@;
put 'dW5jdGlvbiBPN3QobCl7dmFyIGM9ZnVuY3Rpb24gUjd0KCl7aWYodHlwZW9mIFJlZmxlY3Q+InUifHwhUmVmbGVjdC5jb25zdHJ1Y3R8fFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVh'@;
put 'bi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sZnVuY3Rpb24oKXt9KSksITB9Y2F0Y2h7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciBkLGY9S3kobCk7aWYoYyl7dmFyIGg9S3kodGhpcykuY29uc3RydWN0b3I7ZD1SZWZsZWN0'@;
put 'LmNvbnN0cnVjdChmLGFyZ3VtZW50cyxoKX1lbHNlIGQ9Zi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uIEQ3dChsLGMpe2lmKGMmJigib2JqZWN0Ij09PSR5KGMpfHwiZnVuY3Rpb24iPT10eXBlb2YgYykpcmV0dXJuIGM7aWYodm9pZCAwIT09Yyl0aHJvdyBuZXcgVHlw'@;
put 'ZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbiBJN3QobCl7aWYodm9pZCAwPT09bCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBl'@;
put 'cigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBsfShsKX0odGhpcyxkKX19KGEpO2Z1bmN0aW9uIGEoKXtyZXR1cm4gZnVuY3Rpb24gTTd0KGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9u'@;
put 'Iil9KHRoaXMsYSksYy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIGZ1bmN0aW9uIGs3dChsLGMsYSl7YyYmTG1lKGwucHJvdG90eXBlLGMpLGEmJkxtZShsLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShhLFt7a2V5OiJidWlsZCIs'@;
put 'dmFsdWU6ZnVuY3Rpb24oKXtiUChLeShhLnByb3RvdHlwZSksImJ1aWxkIix0aGlzKS5jYWxsKHRoaXMpLGdpKHRoaXMuX2VsZW1lbnQsImh0X19tYW51YWxDb2x1bW5Nb3ZlLS1iYWNrbGlnaHQiKX19XSksYX0oUm1lKTtjb25zdCBGN3Q9UDd0O2Z1bmN0aW9uIHF5KGwpe3JldHVybihxeT0i'@;
put 'ZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09'@;
put 'U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIFBtZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0'@;
put 'YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsVjd0KGYua2V5KSxmKX19ZnVuY3Rpb24gVjd0KGwpe3ZhciBjPWZ1bmN0aW9uIEI3dChsLGMpe2lmKCJvYmplY3QiIT09cXkobCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAh'@;
put 'PT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09cXkoZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIp'@;
put 'KGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PXF5KGMpP2M6U3RyaW5nKGMpfWZ1bmN0aW9uIF9QKCl7cmV0dXJuIF9QPXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdC5nZXQ/UmVmbGVjdC5nZXQuYmluZCgpOmZ1bmN0aW9uKGMsYSxmKXt2YXIgZD1mdW5jdGlvbiBqN3QobCxj'@;
put 'KXtmb3IoOyFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobCxjKSYmbnVsbCE9PShsPVh5KGwpKTspO3JldHVybiBsfShjLGEpO2lmKGQpe3ZhciBoPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZCxhKTtyZXR1cm4gaC5nZXQ/aC5nZXQuY2FsbChhcmd1bWVu'@;
put 'dHMubGVuZ3RoPDM/YzpmKTpoLnZhbHVlfX0sX1AuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIGhYKGwsYyl7cmV0dXJuKGhYPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGYsZCl7cmV0dXJuIGYuX19wcm90b19fPWQs'@;
put 'Zn0pKGwsYyl9ZnVuY3Rpb24gWHkobCl7cmV0dXJuKFh5PU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGEpe3JldHVybiBhLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpfSkobCl9dmFyICQ3dD1mdW5jdGlvbihs'@;
put 'KXshZnVuY3Rpb24gejd0KGwsYyl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGMmJm51bGwhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7bC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShjJiZjLnByb3Rv'@;
put 'dHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmwsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGMmJmhYKGwsYyl9KGEsbCk7dmFyIGM9ZnVuY3Rpb24gVTd0KGwpe3ZhciBjPWZ1bmN0aW9uIFc3'@;
put 'dCgpe2lmKHR5cGVvZiBSZWZsZWN0PiJ1Inx8IVJlZmxlY3QuY29uc3RydWN0fHxSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0'@;
put 'LmNvbnN0cnVjdChCb29sZWFuLFtdLGZ1bmN0aW9uKCl7fSkpLCEwfWNhdGNoe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZCxmPVh5KGwpO2lmKGMpe3ZhciBoPVh5KHRoaXMpLmNvbnN0cnVjdG9yO2Q9UmVmbGVjdC5jb25zdHJ1Y3QoZixhcmd1bWVudHMsaCl9ZWxzZSBk'@;
put 'PWYuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbiBaN3QobCxjKXtpZihjJiYoIm9iamVjdCI9PT1xeShjKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGMpKXJldHVybiBjO2lmKHZvaWQgMCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5'@;
put 'IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24gWTd0KGwpe2lmKHZvaWQgMD09PWwpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4g'@;
put 'bH0obCl9KHRoaXMsZCl9fShhKTtmdW5jdGlvbiBhKCl7cmV0dXJuIGZ1bmN0aW9uIEg3dChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGEpLGMuYXBwbHkodGhpcyxhcmd1bWVu'@;
put 'dHMpfXJldHVybiBmdW5jdGlvbiBON3QobCxjLGEpe2MmJlBtZShsLnByb3RvdHlwZSxjKSxhJiZQbWUobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0oYSxbe2tleToiYnVpbGQiLHZhbHVlOmZ1bmN0aW9uKCl7X1AoWHkoYS5wcm90b3R5'@;
put 'cGUpLCJidWlsZCIsdGhpcykuY2FsbCh0aGlzKSxnaSh0aGlzLl9lbGVtZW50LCJodF9fbWFudWFsQ29sdW1uTW92ZS0tZ3VpZGVsaW5lIil9fV0pLGF9KFJtZSk7Y29uc3QgSzd0PSQ3dDtmdW5jdGlvbiBKeShsKXtyZXR1cm4oSnk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJv'@;
put 'bCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9m'@;
put 'IGN9KShsKX1mdW5jdGlvbiBGbWUobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShs'@;
put 'LEo3dChmLmtleSksZil9fWZ1bmN0aW9uIEo3dChsKXt2YXIgYz1mdW5jdGlvbiBRN3QobCxjKXtpZigib2JqZWN0IiE9PUp5KGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQi'@;
put 'KTtpZigib2JqZWN0IiE9PUp5KGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9'@;
put 'PT1KeShjKT9jOlN0cmluZyhjKX1mdW5jdGlvbiB1Nigpe3JldHVybiB1Nj10eXBlb2YgUmVmbGVjdDwidSImJlJlZmxlY3QuZ2V0P1JlZmxlY3QuZ2V0LmJpbmQoKTpmdW5jdGlvbihjLGEsZil7dmFyIGQ9ZnVuY3Rpb24gZTl0KGwsYyl7Zm9yKDshT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Q'@;
put 'cm9wZXJ0eS5jYWxsKGwsYykmJm51bGwhPT0obD1IMyhsKSk7KTtyZXR1cm4gbH0oYyxhKTtpZihkKXt2YXIgaD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGQsYSk7cmV0dXJuIGguZ2V0P2guZ2V0LmNhbGwoYXJndW1lbnRzLmxlbmd0aDwzP2M6Zik6aC52YWx1ZX19LHU2LmFw'@;
put 'cGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBwWChsLGMpe3JldHVybihwWD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihmLGQpe3JldHVybiBmLl9fcHJvdG9fXz1kLGZ9KShsLGMpfWZ1bmN0aW9uIG1YKGwpe2lmKHZvaWQg'@;
put 'MD09PWwpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gbH1mdW5jdGlvbiBIMyhsKXtyZXR1cm4oSDM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5'@;
put 'cGVPZi5iaW5kKCk6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSl9KShsKX11by5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQ29sdW1uTW92ZSIpLHVvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbHVtbk1vdmUi'@;
put 'KTt2YXIgZ1g9Im1hbnVhbENvbHVtbk1vdmUiLHRtPW5ldyBXZWFrTWFwLEhtZT0iaHRfX21hbnVhbENvbHVtbk1vdmUiLHdQPSJzaG93LXVpIix2WD0ib24tbW92aW5nLS1jb2x1bW5zIix5WD0iYWZ0ZXItc2VsZWN0aW9uLS1jb2x1bW5zIixhOXQ9ZnVuY3Rpb24obCl7IWZ1bmN0aW9uIHQ5'@;
put 'dChsLGMpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjJiZudWxsIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2wucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYyYmYy5wcm90b3R5cGUse2NvbnN0cnVj'@;
put 'dG9yOnt2YWx1ZTpsLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxjJiZwWChsLGMpfShhLGwpO3ZhciBjPWZ1bmN0aW9uIG45dChsKXt2YXIgYz1mdW5jdGlvbiBpOXQoKXtpZih0eXBlb2Yg'@;
put 'UmVmbGVjdD4idSJ8fCFSZWZsZWN0LmNvbnN0cnVjdHx8UmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9v'@;
put 'bGVhbixbXSxmdW5jdGlvbigpe30pKSwhMH1jYXRjaHtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGQsZj1IMyhsKTtpZihjKXt2YXIgaD1IMyh0aGlzKS5jb25zdHJ1Y3RvcjtkPVJlZmxlY3QuY29uc3RydWN0KGYsYXJndW1lbnRzLGgpfWVsc2UgZD1mLmFwcGx5KHRoaXMs'@;
put 'YXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24gcjl0KGwsYyl7aWYoYyYmKCJvYmplY3QiPT09SnkoYyl8fCJmdW5jdGlvbiI9PXR5cGVvZiBjKSlyZXR1cm4gYztpZih2b2lkIDAhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBv'@;
put 'YmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIG1YKGwpfSh0aGlzLGQpfX0oYSk7ZnVuY3Rpb24gYShmKXt2YXIgZDtyZXR1cm4gZnVuY3Rpb24gcTd0KGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0'@;
put 'aW9uIil9KHRoaXMsYSksZD1jLmNhbGwodGhpcyxmKSx0bS5zZXQobVgoZCkse2NvbHVtbnNUb01vdmU6W10sY291bnRDb2xzOjAsZml4ZWRDb2x1bW5zOjAscHJlc3NlZDp2b2lkIDAsdGFyZ2V0OntldmVudFBhZ2VYOnZvaWQgMCxjb29yZHM6dm9pZCAwLFREOnZvaWQgMCxjb2w6dm9pZCAw'@;
put 'fSxjYWNoZWREcm9wSW5kZXg6dm9pZCAwfSksZC5ldmVudE1hbmFnZXI9bmV3IGZzKG1YKGQpKSxkLmJhY2tsaWdodD1uZXcgRjd0KGYpLGQuZ3VpZGVsaW5lPW5ldyBLN3QoZiksZH1yZXR1cm4gZnVuY3Rpb24gWDd0KGwsYyxhKXtjJiZGbWUobC5wcm90b3R5cGUsYyksYSYmRm1lKGwsYSks'@;
put 'T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGEsW3trZXk6ImlzRW5hYmxlZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbZ1hdfX0se2tleToiZW5hYmxlUGx1Z2luIix2YWx1ZTpmdW5jdGlvbigpe3Zh'@;
put 'ciBkPXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25CZWZvcmVPbkNlbGxNb3VzZURvd24uYXBwbHkoZCxhcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLGZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIGQub25CZWZvcmVPbkNlbGxNb3VzZU92ZXIuYXBwbHkoZCxhcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlclNjcm9sbFZlcnRpY2FsbHkiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25BZnRlclNjcm9sbFZlcnRpY2FsbHkoKX0pLHRoaXMuYWRkSG9vaygiYWZ0'@;
put 'ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkFmdGVyTG9hZERhdGEuYXBwbHkoZCxhcmd1bWVudHMpfSksdGhpcy5idWlsZFBsdWdpblVJKCksdGhpcy5yZWdpc3RlckV2ZW50cygpLGdpKHRoaXMuaG90LnJvb3RFbGVtZW50LEhtZSksdTYoSDMoYS5wcm90b3R5cGUpLCJlbmFi'@;
put 'bGVQbHVnaW4iLHRoaXMpLmNhbGwodGhpcykpfX0se2tleToidXBkYXRlUGx1Z2luIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksdGhpcy5tb3ZlQnlTZXR0aW5nc09yTG9hZCgpLHU2KEgzKGEucHJvdG90eXBlKSwidXBkYXRlUGx1'@;
put 'Z2luIix0aGlzKS5jYWxsKHRoaXMpfX0se2tleToiZGlzYWJsZVBsdWdpbiIsdmFsdWU6ZnVuY3Rpb24oKXtKbyh0aGlzLmhvdC5yb290RWxlbWVudCxIbWUpLHRoaXMudW5yZWdpc3RlckV2ZW50cygpLHRoaXMuYmFja2xpZ2h0LmRlc3Ryb3koKSx0aGlzLmd1aWRlbGluZS5kZXN0cm95KCks'@;
put 'dTYoSDMoYS5wcm90b3R5cGUpLCJkaXNhYmxlUGx1Z2luIix0aGlzKS5jYWxsKHRoaXMpfX0se2tleToibW92ZUNvbHVtbiIsdmFsdWU6ZnVuY3Rpb24oZCxoKXtyZXR1cm4gdGhpcy5tb3ZlQ29sdW1ucyhbZF0saCl9fSx7a2V5OiJtb3ZlQ29sdW1ucyIsdmFsdWU6ZnVuY3Rpb24oZCxoKXt2'@;
put 'YXIgbT10bS5nZXQodGhpcyksXz1tLmNhY2hlZERyb3BJbmRleCxPPXRoaXMuaXNNb3ZlUG9zc2libGUoZCxoKSxYPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb2x1bW5Nb3ZlIixkLGgsXyxPKTtpZihtLmNhY2hlZERyb3BJbmRleD12b2lkIDAsITEhPT1YKXtPJiZ0aGlzLmhvdC5jb2x1'@;
put 'bW5JbmRleE1hcHBlci5tb3ZlSW5kZXhlcyhkLGgpO3ZhciBhZT1PJiZ0aGlzLmlzQ29sdW1uT3JkZXJDaGFuZ2VkKGQsaCk7cmV0dXJuIHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvbHVtbk1vdmUiLGQsaCxfLE8sYWUpLGFlfX19LHtrZXk6ImRyYWdDb2x1bW4iLHZhbHVlOmZ1bmN0aW9u'@;
put 'KGQsaCl7cmV0dXJuIHRoaXMuZHJhZ0NvbHVtbnMoW2RdLGgpfX0se2tleToiZHJhZ0NvbHVtbnMiLHZhbHVlOmZ1bmN0aW9uKGQsaCl7dmFyIG09dGhpcy5jb3VudEZpbmFsSW5kZXgoZCxoKTtyZXR1cm4gdG0uZ2V0KHRoaXMpLmNhY2hlZERyb3BJbmRleD1oLHRoaXMubW92ZUNvbHVtbnMo'@;
put 'ZCxtKX19LHtrZXk6ImlzTW92ZVBvc3NpYmxlIix2YWx1ZTpmdW5jdGlvbihkLGgpe3ZhciBtPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCksXz1kLmxlbmd0aCtoPm0sTz1oPDAsWD1kLnNvbWUoZnVuY3Rpb24ocGUpe3JldHVybiBwZTww'@;
put 'fSksYWU9ZC5zb21lKGZ1bmN0aW9uKHBlKXtyZXR1cm4gcGU+PW19KTtyZXR1cm4hKF98fE98fFh8fGFlKX19LHtrZXk6ImlzQ29sdW1uT3JkZXJDaGFuZ2VkIix2YWx1ZTpmdW5jdGlvbihkLGgpe3JldHVybiBkLnNvbWUoZnVuY3Rpb24obSxfKXtyZXR1cm4gbS1fIT09aH0pfX0se2tleToi'@;
put 'Y291bnRGaW5hbEluZGV4Iix2YWx1ZTpmdW5jdGlvbihkLGgpe3ZhciBtPVBzKGQsZnVuY3Rpb24oXyxPKXtyZXR1cm4gTzxoJiYoXys9MSksX30sMCk7cmV0dXJuIGgtbX19LHtrZXk6ImdldENvbHVtbnNXaWR0aCIsdmFsdWU6ZnVuY3Rpb24oZCxoKXtmb3IodmFyIG09dGhpcy5ob3QuY29s'@;
put 'dW1uSW5kZXhNYXBwZXIsXz0wLE89ZDtPPD1oO08rPTEpe3ZhciBYPW0uZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChPKTtPPDA/Xys9dGhpcy5ob3Qudmlldy5fd3Qud3RWaWV3cG9ydC5nZXRSb3dIZWFkZXJXaWR0aCgpfHwwOm51bGwhPT1YJiYoXys9dGhpcy5ob3Qudmlldy5fd3Qu'@;
put 'd3RUYWJsZS5nZXRTdHJldGNoZWRDb2x1bW5XaWR0aChYKXx8MCl9cmV0dXJuIF99fSx7a2V5OiJtb3ZlQnlTZXR0aW5nc09yTG9hZCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW2dYXTtpZihBcnJheS5pc0FycmF5KGQpKXRoaXMubW92ZUNvbHVtbnMo'@;
put 'ZCwwKTtlbHNlIGlmKHZvaWQgMCE9PWQpe3ZhciBoPXRoaXMucGVyc2lzdGVudFN0YXRlTG9hZCgpO2gubGVuZ3RoJiZ0aGlzLm1vdmVDb2x1bW5zKGgsMCl9fX0se2tleToiaXNGaXhlZENvbHVtbnNTdGFydCIsdmFsdWU6ZnVuY3Rpb24oZCl7cmV0dXJuIGQ8dGhpcy5ob3QuZ2V0U2V0dGlu'@;
put 'Z3MoKS5maXhlZENvbHVtbnNTdGFydH19LHtrZXk6InBlcnNpc3RlbnRTdGF0ZVNhdmUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZVNhdmUiLCJtYW51YWxDb2x1bW5Nb3ZlIix0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRJbmRleGVz'@;
put 'U2VxdWVuY2UoKSl9fSx7a2V5OiJwZXJzaXN0ZW50U3RhdGVMb2FkIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkPXt9O3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlTG9hZCIsIm1hbnVhbENvbHVtbk1vdmUiLGQpLGQudmFsdWU/ZC52YWx1ZTpbXX19LHtrZXk6InBy'@;
put 'ZXBhcmVDb2x1bW5zVG9Nb3ZpbmciLHZhbHVlOmZ1bmN0aW9uKGQsaCl7dmFyIG09W107cmV0dXJuIF9vKGQsaCxmdW5jdGlvbihfKXttLnB1c2goXyl9KSxtfX0se2tleToicmVmcmVzaFBvc2l0aW9ucyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10bS5nZXQodGhpcyksaD10aGlzLmhvdC52'@;
put 'aWV3LmdldEZpcnN0RnVsbHlWaXNpYmxlQ29sdW1uKCk7dGhpcy5pc0ZpeGVkQ29sdW1uc1N0YXJ0KGQuaG92ZXJlZENvbHVtbikmJmg+MCYmdGhpcy5ob3Quc2Nyb2xsVmlld3BvcnRUbyh2b2lkIDAsdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4'@;
put 'KGgtMSwtMSkpO3ZhciBtPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUsXz10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLnNjcm9sbGFibGVFbGVtZW50LE89Im51bWJlciI9PXR5cGVvZiBfLnNjcm9sbFg/Xy5zY3JvbGxYOl8uc2Nyb2xsTGVmdCxYPXRoaXMuaG90LnZpZXcuVEhFQUQu'@;
put 'b2Zmc2V0TGVmdCt0aGlzLmdldENvbHVtbnNXaWR0aCgwLGQuaG92ZXJlZENvbHVtbi0xKSxhZT1tLmhpZGVyLm9mZnNldFdpZHRoLHBlPW0uVEJPRFkub2Zmc2V0TGVmdCxiZT10aGlzLmJhY2tsaWdodC5nZXRPZmZzZXQoKS5zdGFydCx4ZT10aGlzLmJhY2tsaWdodC5nZXRTaXplKCkud2lk'@;
put 'dGgsVmU9MCxaZT0wO2lmKHRoaXMuaG90LmlzUnRsKCkpe3ZhciBsdD10aGlzLmhvdC5yb290V2luZG93LGR0PVNsKHRoaXMuaG90LnJvb3RFbGVtZW50KTtaZT1sdC5pbm5lcldpZHRoLWQudGFyZ2V0LmV2ZW50UGFnZVgtKGx0LmlubmVyV2lkdGgtZC5yb290RWxlbWVudE9mZnNldC1kdCkt'@;
put 'KHZvaWQgMD09PV8uc2Nyb2xsWD9POjApfWVsc2UgWmU9ZC50YXJnZXQuZXZlbnRQYWdlWC0oZC5yb290RWxlbWVudE9mZnNldC0odm9pZCAwPT09Xy5zY3JvbGxYP086MCkpO2QuaGFzUm93SGVhZGVycyYmKFZlPXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVy'@;
put 'bGF5LmNsb25lLnd0VGFibGUuZ2V0Q29sdW1uSGVhZGVyKC0xKS5vZmZzZXRXaWR0aCksdGhpcy5pc0ZpeGVkQ29sdW1uc1N0YXJ0KGQuaG92ZXJlZENvbHVtbikmJihYKz1PKSxYKz1WZSxkLmhvdmVyZWRDb2x1bW48MD9kLnRhcmdldC5jb2w9ZC5maXhlZENvbHVtbnNTdGFydD4wPzA6aD4w'@;
put 'P2gtMTpoOmQudGFyZ2V0LlRELm9mZnNldFdpZHRoLzIrWDw9WmU/KGQudGFyZ2V0LmNvbD0oZC5ob3ZlcmVkQ29sdW1uPj1kLmNvdW50Q29scz9kLmNvdW50Q29scy0xOmQuaG92ZXJlZENvbHVtbikrMSxYKz1kLnRhcmdldC5URC5vZmZzZXRXaWR0aCk6ZC50YXJnZXQuY29sPWQuaG92ZXJl'@;
put 'ZENvbHVtbjt2YXIgcm49WmUsWHQ9WDtaZSt4ZStiZT49YWU/cm49YWUteGUtYmU6WmUrYmU8cGUrVmUmJihybj1wZStWZStNYXRoLmFicyhiZSkpLFg+PWFlLTE/WHQ9YWUtMTowPT09WHQ/WHQ9MTp2b2lkIDAhPT1fLnNjcm9sbFgmJmQuaG92ZXJlZENvbHVtbjxkLmZpeGVkQ29sdW1uc1N0'@;
put 'YXJ0JiYoWHQtPWQucm9vdEVsZW1lbnRPZmZzZXQ8PV8uc2Nyb2xsWD9kLnJvb3RFbGVtZW50T2Zmc2V0OjApLHRoaXMuYmFja2xpZ2h0LnNldFBvc2l0aW9uKG51bGwscm4pLHRoaXMuZ3VpZGVsaW5lLnNldFBvc2l0aW9uKG51bGwsWHQpfX0se2tleToicmVnaXN0ZXJFdmVudHMiLHZhbHVl'@;
put 'OmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcyxoPXRoaXMuaG90LnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihoLCJtb3VzZW1vdmUiLGZ1bmN0aW9uKG0pe3JldHVybiBkLm9uTW91c2VNb3ZlKG0pfSksdGhpcy5ldmVudE1hbmFn'@;
put 'ZXIuYWRkRXZlbnRMaXN0ZW5lcihoLCJtb3VzZXVwIixmdW5jdGlvbigpe3JldHVybiBkLm9uTW91c2VVcCgpfSl9fSx7a2V5OiJ1bnJlZ2lzdGVyRXZlbnRzIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZXZlbnRNYW5hZ2VyLmNsZWFyKCl9fSx7a2V5OiJvbkJlZm9yZU9uQ2VsbE1vdXNlRG93'@;
put 'biIsdmFsdWU6ZnVuY3Rpb24oZCxoLG0sXyl7dmFyIE89dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZSxYPXRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSxhZT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLHBlPXRtLmdldCh0aGlzKSxiZT1Zbyhk'@;
put 'LnRhcmdldCwic29ydEFjdGlvbiIpO2lmKCFhZXx8IVh8fHBlLnByZXNzZWR8fDAhPT1kLmJ1dHRvbnx8YmUpcmV0dXJuIHBlLnByZXNzZWQ9ITEscGUuY29sdW1uc1RvTW92ZS5sZW5ndGg9MCx2b2lkIEpvKHRoaXMuaG90LnJvb3RFbGVtZW50LFt2WCx3UF0pO3ZhciB4ZT10aGlzLmd1aWRl'@;
put 'bGluZS5pc0J1aWx0KCkmJiF0aGlzLmd1aWRlbGluZS5pc0FwcGVuZGVkKCksVmU9dGhpcy5iYWNrbGlnaHQuaXNCdWlsdCgpJiYhdGhpcy5iYWNrbGlnaHQuaXNBcHBlbmRlZCgpO3hlJiZWZSYmKHRoaXMuZ3VpZGVsaW5lLmFwcGVuZFRvKE8uaGlkZXIpLHRoaXMuYmFja2xpZ2h0LmFwcGVu'@;
put 'ZFRvKE8uaGlkZXIpKTt2YXIgWmU9YWUuZnJvbSxsdD1hZS50byxkdD1NYXRoLm1pbihaZS5jb2wsbHQuY29sKSxndD1NYXRoLm1heChaZS5jb2wsbHQuY29sKTtpZihoLnJvdzwwJiZoLmNvbD49ZHQmJmguY29sPD1ndCl7Xy5jb2x1bW49ITAscGUucHJlc3NlZD0hMCxwZS50YXJnZXQuZXZl'@;
put 'bnRQYWdlWD1kLnBhZ2VYLHBlLnRhcmdldC5ldmVudE9mZnNldFg9ZC5vZmZzZXRYLHBlLmhvdmVyZWRDb2x1bW49aC5jb2wscGUudGFyZ2V0LlREPW0scGUudGFyZ2V0LmNvbD1oLmNvbCxwZS5jb2x1bW5zVG9Nb3ZlPXRoaXMucHJlcGFyZUNvbHVtbnNUb01vdmluZyhkdCxndCkscGUuaGFz'@;
put 'Um93SGVhZGVycz0hIXRoaXMuaG90LmdldFNldHRpbmdzKCkucm93SGVhZGVycyxwZS5jb3VudENvbHM9dGhpcy5ob3QuY291bnRDb2xzKCkscGUuZml4ZWRDb2x1bW5zU3RhcnQ9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydCxwZS5yb290RWxlbWVudE9mZnNldD1p'@;
put 'dSh0aGlzLmhvdC5yb290RWxlbWVudCkubGVmdDt2YXIganQ9cGUuaGFzUm93SGVhZGVycz8tMTowLHJuPU8uaG9sZGVyLnNjcm9sbFRvcCtPLmdldENvbHVtbkhlYWRlckhlaWdodCgwKSsxLFh0PWguY29sPHBlLmZpeGVkQ29sdW1uc1N0YXJ0LHluPU1hdGguYWJzKHRoaXMuaG90LnZpZXcu'@;
put 'X3d0Lnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LmdldFNjcm9sbFBvc2l0aW9uKCkpLFFuPU1hdGguYWJzKGQub2Zmc2V0WC0odGhpcy5ob3QuaXNSdGwoKT9kLnRhcmdldC5vZmZzZXRXaWR0aDowKSksT3I9dGhpcy5nZXRDb2x1bW5zV2lkdGgoZHQsaC5jb2wtMSkrUW4sVnI9dGhp'@;
put 'cy5nZXRDb2x1bW5zV2lkdGgoanQsZHQtMSkrKFh0P3luOjApK09yO3RoaXMuYmFja2xpZ2h0LnNldFBvc2l0aW9uKHJuLFZyKSx0aGlzLmJhY2tsaWdodC5zZXRTaXplKHRoaXMuZ2V0Q29sdW1uc1dpZHRoKGR0LGd0KSxPLmhpZGVyLm9mZnNldEhlaWdodC1ybiksdGhpcy5iYWNrbGlnaHQu'@;
put 'c2V0T2Zmc2V0KG51bGwsLU9yKSxnaSh0aGlzLmhvdC5yb290RWxlbWVudCx2WCl9ZWxzZSBKbyh0aGlzLmhvdC5yb290RWxlbWVudCx5WCkscGUucHJlc3NlZD0hMSxwZS5jb2x1bW5zVG9Nb3ZlLmxlbmd0aD0wfX0se2tleToib25Nb3VzZU1vdmUiLHZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBo'@;
put 'PXRtLmdldCh0aGlzKTtpZihoLnByZXNzZWQpe2lmKGQudGFyZ2V0PT09dGhpcy5iYWNrbGlnaHQuZWxlbWVudCl7dmFyIG09dGhpcy5iYWNrbGlnaHQuZ2V0U2l6ZSgpLndpZHRoO3RoaXMuYmFja2xpZ2h0LnNldFNpemUoMCksc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuYmFja2xpZ2h0'@;
put 'LnNldFBvc2l0aW9uKG0pfSl9aC50YXJnZXQuZXZlbnRQYWdlWD1kLnBhZ2VYLHRoaXMucmVmcmVzaFBvc2l0aW9ucygpfX19LHtrZXk6Im9uQmVmb3JlT25DZWxsTW91c2VPdmVyIix2YWx1ZTpmdW5jdGlvbihkLGgsbSxfKXt2YXIgTz10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgp'@;
put 'LFg9dG0uZ2V0KHRoaXMpOyFPfHwhWC5wcmVzc2VkfHwoWC5jb2x1bW5zVG9Nb3ZlLmluZGV4T2YoaC5jb2wpPi0xP0pvKHRoaXMuaG90LnJvb3RFbGVtZW50LHdQKTpnaSh0aGlzLmhvdC5yb290RWxlbWVudCx3UCksXy5yb3c9ITAsXy5jb2x1bW49ITAsXy5jZWxsPSEwLFguaG92ZXJlZENv'@;
put 'bHVtbj1oLmNvbCxYLnRhcmdldC5URD1tKX19LHtrZXk6Im9uTW91c2VVcCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10bS5nZXQodGhpcyksaD1kLnRhcmdldC5jb2wsbT1kLmNvbHVtbnNUb01vdmUubGVuZ3RoO2lmKGQuaG92ZXJlZENvbHVtbj12b2lkIDAsZC5wcmVzc2VkPSExLGQuYmFj'@;
put 'a2xpZ2h0V2lkdGg9MCxKbyh0aGlzLmhvdC5yb290RWxlbWVudCxbdlgsd1AseVhdKSx0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkmJmdpKHRoaXMuaG90LnJvb3RFbGVtZW50LHlYKSwhKG08MXx8dm9pZCAwPT09aCkpe3ZhciBPPXRoaXMuaG90LnRvUGh5'@;
put 'c2ljYWxDb2x1bW4oZC5jb2x1bW5zVG9Nb3ZlWzBdKSxYPXRoaXMuZHJhZ0NvbHVtbnMoZC5jb2x1bW5zVG9Nb3ZlLGgpO2lmKGQuY29sdW1uc1RvTW92ZS5sZW5ndGg9MCwhMD09PVgpe3RoaXMucGVyc2lzdGVudFN0YXRlU2F2ZSgpLHRoaXMuaG90LnJlbmRlcigpLHRoaXMuaG90LnZpZXcu'@;
put 'YWRqdXN0RWxlbWVudHNTaXplKCEwKTt2YXIgYWU9dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4oTyk7dGhpcy5ob3Quc2VsZWN0Q29sdW1ucyhhZSxhZSttLTEpfX19fSx7a2V5OiJvbkFmdGVyU2Nyb2xsVmVydGljYWxseSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmhvdC52aWV3Ll93'@;
put 'dC53dFRhYmxlLF89ZC5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoMCkrMStkLmhvbGRlci5zY3JvbGxUb3A7dGhpcy5iYWNrbGlnaHQuc2V0UG9zaXRpb24oXyksdGhpcy5iYWNrbGlnaHQuc2V0U2l6ZShudWxsLGQuaGlkZXIub2Zmc2V0SGVpZ2h0LV8pfX0se2tleToiYnVpbGRQbHVnaW5VSSIs'@;
put 'dmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmJhY2tsaWdodC5idWlsZCgpLHRoaXMuZ3VpZGVsaW5lLmJ1aWxkKCl9fSx7a2V5OiJvbkFmdGVyTG9hZERhdGEiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5tb3ZlQnlTZXR0aW5nc09yTG9hZCgpfX0se2tleToiZGVzdHJveSIsdmFsdWU6ZnVuY3Rpb24o'@;
put 'KXt0aGlzLmJhY2tsaWdodC5kZXN0cm95KCksdGhpcy5ndWlkZWxpbmUuZGVzdHJveSgpLHU2KEgzKGEucHJvdG90eXBlKSwiZGVzdHJveSIsdGhpcykuY2FsbCh0aGlzKX19XSxbe2tleToiUExVR0lOX0tFWSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGdYfX0se2tleToiUExVR0lOX1BSSU9S'@;
put 'SVRZIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMTIwfX1dKSxhfShHYSk7ZnVuY3Rpb24gUXkobCl7cmV0dXJuKFF5PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24o'@;
put 'Yyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gTm1lKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07'@;
put 'Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCx1OXQoZi5rZXkpLGYpfX1mdW5jdGlvbiB1OXQobCl7dmFyIGM9ZnVuY3Rpb24gYzl0KGwsYyl7aWYoIm9iamVj'@;
put 'dCIhPT1ReShsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1ReShmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZl'@;
put 'IG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09UXkoYyk/YzpTdHJpbmcoYyl9ZnVuY3Rpb24gYzYoKXtyZXR1cm4gYzY9dHlwZW9mIFJlZmxlY3Q8InUiJiZS'@;
put 'ZWZsZWN0LmdldD9SZWZsZWN0LmdldC5iaW5kKCk6ZnVuY3Rpb24oYyxhLGYpe3ZhciBkPWZ1bmN0aW9uIGY5dChsLGMpe2Zvcig7IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsLGMpJiZudWxsIT09KGw9TjMobCkpOyk7cmV0dXJuIGx9KGMsYSk7aWYoZCl7dmFyIGg9'@;
put 'T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihkLGEpO3JldHVybiBoLmdldD9oLmdldC5jYWxsKGFyZ3VtZW50cy5sZW5ndGg8Mz9jOmYpOmgudmFsdWV9fSxjNi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gYlgobCxjKXtyZXR1cm4oYlg9T2JqZWN0LnNldFByb3RvdHlw'@;
put 'ZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZixkKXtyZXR1cm4gZi5fX3Byb3RvX189ZCxmfSkobCxjKX1mdW5jdGlvbiBfWChsKXtpZih2b2lkIDA9PT1sKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1'@;
put 'cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGx9ZnVuY3Rpb24gTjMobCl7cmV0dXJuKE4zPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGEpe3JldHVybiBhLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9m'@;
put 'KGEpfSkobCl9dmFyIENQPSJtYW51YWxDb2x1bW5SZXNpemUiLFZtZT0ibWFudWFsQ29sdW1uV2lkdGhzIix3WD1uZXcgV2Vha01hcCx2OXQ9ZnVuY3Rpb24obCl7IWZ1bmN0aW9uIGQ5dChsLGMpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjJiZudWxsIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9y'@;
put 'KCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2wucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYyYmYy5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpsLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJv'@;
put 'cGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxjJiZiWChsLGMpfShhLGwpO3ZhciBjPWZ1bmN0aW9uIGg5dChsKXt2YXIgYz1mdW5jdGlvbiBtOXQoKXtpZih0eXBlb2YgUmVmbGVjdD4idSJ8fCFSZWZsZWN0LmNvbnN0cnVjdHx8UmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1'@;
put 'cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSxmdW5jdGlvbigpe30pKSwhMH1jYXRjaHtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9u'@;
put 'KCl7dmFyIGQsZj1OMyhsKTtpZihjKXt2YXIgaD1OMyh0aGlzKS5jb25zdHJ1Y3RvcjtkPVJlZmxlY3QuY29uc3RydWN0KGYsYXJndW1lbnRzLGgpfWVsc2UgZD1mLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24gcDl0KGwsYyl7aWYoYyYmKCJvYmplY3QiPT09UXkoYyl8'@;
put 'fCJmdW5jdGlvbiI9PXR5cGVvZiBjKSlyZXR1cm4gYztpZih2b2lkIDAhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIF9YKGwpfSh0aGlzLGQpfX0oYSk7ZnVuY3Rpb24gYShm'@;
put 'KXt2YXIgZDshZnVuY3Rpb24gbDl0KGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsYSk7dmFyIGg9KGQ9Yy5jYWxsKHRoaXMsZikpLmhvdC5yb290RG9jdW1lbnQ7cmV0dXJuIGQu'@;
put 'Y3VycmVudFRIPW51bGwsZC5jdXJyZW50Q29sPW51bGwsZC5zZWxlY3RlZENvbHM9W10sZC5jdXJyZW50V2lkdGg9bnVsbCxkLm5ld1NpemU9bnVsbCxkLnN0YXJ0WT1udWxsLGQuc3RhcnRXaWR0aD1udWxsLGQuc3RhcnRPZmZzZXQ9bnVsbCxkLmhhbmRsZT1oLmNyZWF0ZUVsZW1lbnQoIkRJ'@;
put 'ViIpLGQuZ3VpZGU9aC5jcmVhdGVFbGVtZW50KCJESVYiKSxkLmV2ZW50TWFuYWdlcj1uZXcgZnMoX1goZCkpLGQucHJlc3NlZD1udWxsLGQuZGJsY2xpY2s9MCxkLmF1dG9yZXNpemVUaW1lb3V0PW51bGwsZC5jb2x1bW5XaWR0aHNNYXA9dm9pZCAwLHdYLnNldChfWChkKSx7Y29uZmlnOnZv'@;
put 'aWQgMH0pLGdpKGQuaGFuZGxlLCJtYW51YWxDb2x1bW5SZXNpemVyIiksZ2koZC5ndWlkZSwibWFudWFsQ29sdW1uUmVzaXplckd1aWRlIiksZH1yZXR1cm4gZnVuY3Rpb24gczl0KGwsYyxhKXtjJiZObWUobC5wcm90b3R5cGUsYyksYSYmTm1lKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5'@;
put 'KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGEsW3trZXk6ImlubGluZURpciIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaG90LmlzUnRsKCk/InJpZ2h0IjoibGVmdCJ9fSx7a2V5OiJpc0VuYWJsZWQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaG90LmdldFNldHRp'@;
put 'bmdzKClbQ1BdfX0se2tleToiZW5hYmxlUGx1Z2luIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5jb2x1bW5XaWR0aHNNYXA9bmV3IEY0LHRoaXMuY29sdW1uV2lkdGhzTWFwLmFkZExvY2FsSG9vaygiaW5pdCIsZnVuY3Rpb24oKXtyZXR1cm4gZC5v'@;
put 'bk1hcEluaXQoKX0pLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSx0aGlzLmNvbHVtbldpZHRoc01hcCksdGhpcy5hZGRIb29rKCJtb2RpZnlDb2xXaWR0aCIsZnVuY3Rpb24oaCxtKXtyZXR1cm4gZC5vbk1vZGlmeUNvbFdpZHRoKGgsbSl9'@;
put 'KSx0aGlzLmFkZEhvb2soImJlZm9yZVN0cmV0Y2hpbmdDb2x1bW5XaWR0aCIsZnVuY3Rpb24oaCxtKXtyZXR1cm4gZC5vbkJlZm9yZVN0cmV0Y2hpbmdDb2x1bW5XaWR0aChoLG0pfSksdGhpcy5hZGRIb29rKCJiZWZvcmVDb2x1bW5SZXNpemUiLGZ1bmN0aW9uKGgsbSxfKXtyZXR1cm4gZC5v'@;
put 'bkJlZm9yZUNvbHVtblJlc2l6ZShoLG0sXyl9KSx0aGlzLmJpbmRFdmVudHMoKSxjNihOMyhhLnByb3RvdHlwZSksImVuYWJsZVBsdWdpbiIsdGhpcykuY2FsbCh0aGlzKSl9fSx7a2V5OiJ1cGRhdGVQbHVnaW4iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5l'@;
put 'bmFibGVQbHVnaW4oKSxjNihOMyhhLnByb3RvdHlwZSksInVwZGF0ZVBsdWdpbiIsdGhpcykuY2FsbCh0aGlzKX19LHtrZXk6ImRpc2FibGVQbHVnaW4iLHZhbHVlOmZ1bmN0aW9uKCl7d1guZ2V0KHRoaXMpLmNvbmZpZz10aGlzLmNvbHVtbldpZHRoc01hcC5nZXRWYWx1ZXMoKSx0aGlzLmhv'@;
put 'dC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSksYzYoTjMoYS5wcm90b3R5cGUpLCJkaXNhYmxlUGx1Z2luIix0aGlzKS5jYWxsKHRoaXMpfX0se2tleToic2F2ZU1hbnVhbENvbHVtbldpZHRocyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmhvdC5ydW5I'@;
put 'b29rcygicGVyc2lzdGVudFN0YXRlU2F2ZSIsVm1lLHRoaXMuY29sdW1uV2lkdGhzTWFwLmdldFZhbHVlcygpKX19LHtrZXk6ImxvYWRNYW51YWxDb2x1bW5XaWR0aHMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9e307cmV0dXJuIHRoaXMuaG90LnJ1bkhvb2tzKCJwZXJzaXN0ZW50U3RhdGVM'@;
put 'b2FkIixWbWUsZCksZC52YWx1ZX19LHtrZXk6InNldE1hbnVhbFNpemUiLHZhbHVlOmZ1bmN0aW9uKGQsaCl7dmFyIG09TWF0aC5tYXgoaCwyMCksXz10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGQpO3JldHVybiB0aGlzLmNvbHVtbldpZHRoc01hcC5zZXRWYWx1ZUF0SW5kZXgoXyxtKSxt'@;
put 'fX0se2tleToiY2xlYXJNYW51YWxTaXplIix2YWx1ZTpmdW5jdGlvbihkKXt2YXIgaD10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGQpO3RoaXMuY29sdW1uV2lkdGhzTWFwLnNldFZhbHVlQXRJbmRleChoLG51bGwpfX0se2tleToib25NYXBJbml0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBk'@;
put 'PXRoaXMsaD13WC5nZXQodGhpcyksbT10aGlzLmhvdC5nZXRTZXR0aW5ncygpW0NQXSxfPXRoaXMubG9hZE1hbnVhbENvbHVtbldpZHRocygpO3R5cGVvZiBfPCJ1Ij90aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbihmdW5jdGlvbigpe18uZm9yRWFjaChmdW5jdGlvbihPLFgpe2QuY29sdW1uV2lk'@;
put 'dGhzTWFwLnNldFZhbHVlQXRJbmRleChYLE8pfSl9LCEwKTpBcnJheS5pc0FycmF5KG0pPyh0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbihmdW5jdGlvbigpe20uZm9yRWFjaChmdW5jdGlvbihPLFgpe2QuY29sdW1uV2lkdGhzTWFwLnNldFZhbHVlQXRJbmRleChYLE8pfSl9LCEwKSxoLmNvbmZp'@;
put 'Zz1tKTohMD09PW0mJkFycmF5LmlzQXJyYXkoaC5jb25maWcpJiZ0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbihmdW5jdGlvbigpe2guY29uZmlnLmZvckVhY2goZnVuY3Rpb24oTyxYKXtkLmNvbHVtbldpZHRoc01hcC5zZXRWYWx1ZUF0SW5kZXgoWCxPKX0pfSwhMCl9fSx7a2V5OiJzZXR1cEhh'@;
put 'bmRsZVBvc2l0aW9uIix2YWx1ZTpmdW5jdGlvbihkKXt2YXIgaD10aGlzO2lmKGQucGFyZW50Tm9kZSl7dGhpcy5jdXJyZW50VEg9ZDt2YXIgbT10aGlzLmhvdC52aWV3Ll93dCxfPW0ud3RUYWJsZS5nZXRDb29yZHModGhpcy5jdXJyZW50VEgpLE89Xy5jb2w7aWYoIShPPDApKXt2YXIgYmUs'@;
put 'WD1jcyh0aGlzLmN1cnJlbnRUSCksYWU9dGhpcy5jdXJyZW50VEguZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7TzxtLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0IikmJihiZT1tLnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmdldFJlbGF0aXZlQ2VsbFBvc2l0'@;
put 'aW9uKHRoaXMuY3VycmVudFRILF8ucm93LF8uY29sKSksYmV8fChiZT1tLnd0T3ZlcmxheXMudG9wT3ZlcmxheS5nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbih0aGlzLmN1cnJlbnRUSCxfLnJvdyxfLmNvbCkpLHRoaXMuY3VycmVudENvbD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRW'@;
put 'aXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KE8pLHRoaXMuc2VsZWN0ZWRDb2xzPVtdO3ZhciB4ZT10aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl8fHRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKTt0aGlzLmhvdC5zZWxlY3Rpb24uaXNT'@;
put 'ZWxlY3RlZCgpJiZ4ZSYmUm4odGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZSgpLGZ1bmN0aW9uKFplKXtfbyhaZS5nZXRUb3BTdGFydENvcm5lcigpLmNvbCxaZS5nZXRCb3R0b21FbmRDb3JuZXIoKS5jb2wsZnVuY3Rpb24oZ3Qpe2guc2VsZWN0ZWRDb2xzLmluY2x1ZGVzKGd0KXx8aC5zZWxl'@;
put 'Y3RlZENvbHMucHVzaChndCl9KX0pLHRoaXMuc2VsZWN0ZWRDb2xzLmluY2x1ZGVzKHRoaXMuY3VycmVudENvbCl8fCh0aGlzLnNlbGVjdGVkQ29scz1bdGhpcy5jdXJyZW50Q29sXSksdGhpcy5zdGFydE9mZnNldD1iZS5zdGFydC02LHRoaXMuc3RhcnRXaWR0aD1wYXJzZUludChhZS53aWR0'@;
put 'aCwxMCksdGhpcy5oYW5kbGUuc3R5bGUudG9wPSIiLmNvbmNhdChiZS50b3AsInB4IiksdGhpcy5oYW5kbGUuc3R5bGVbdGhpcy5pbmxpbmVEaXJdPSIiLmNvbmNhdCh0aGlzLnN0YXJ0T2Zmc2V0K3RoaXMuc3RhcnRXaWR0aCwicHgiKSx0aGlzLmhhbmRsZS5zdHlsZS5oZWlnaHQ9IiIuY29u'@;
put 'Y2F0KFgsInB4IiksdGhpcy5ob3Qucm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5oYW5kbGUpfX19fSx7a2V5OiJyZWZyZXNoSGFuZGxlUG9zaXRpb24iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5oYW5kbGUuc3R5bGVbdGhpcy5pbmxpbmVEaXJdPSIiLmNvbmNhdCh0aGlzLnN0YXJ0T2Zm'@;
put 'c2V0K3RoaXMuY3VycmVudFdpZHRoLCJweCIpfX0se2tleToic2V0dXBHdWlkZVBvc2l0aW9uIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkPXBhcnNlSW50KGNzKHRoaXMuaGFuZGxlKSwxMCksaD1wYXJzZUludCh0aGlzLmhhbmRsZS5zdHlsZS50b3AsMTApK2QsbT1wYXJzZUludCh0aGlzLmhv'@;
put 'dC52aWV3Lm1heGltdW1WaXNpYmxlRWxlbWVudEhlaWdodCgwKSwxMCk7Z2kodGhpcy5oYW5kbGUsImFjdGl2ZSIpLGdpKHRoaXMuZ3VpZGUsImFjdGl2ZSIpLHRoaXMuZ3VpZGUuc3R5bGUudG9wPSIiLmNvbmNhdChoLCJweCIpLHRoaXMucmVmcmVzaEd1aWRlUG9zaXRpb24oKSx0aGlzLmd1'@;
put 'aWRlLnN0eWxlLmhlaWdodD0iIi5jb25jYXQobS1kLCJweCIpLHRoaXMuaG90LnJvb3RFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZ3VpZGUpfX0se2tleToicmVmcmVzaEd1aWRlUG9zaXRpb24iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5ndWlkZS5zdHlsZVt0aGlzLmlubGluZURpcl09dGhp'@;
put 'cy5oYW5kbGUuc3R5bGVbdGhpcy5pbmxpbmVEaXJdfX0se2tleToiaGlkZUhhbmRsZUFuZEd1aWRlIix2YWx1ZTpmdW5jdGlvbigpe0pvKHRoaXMuaGFuZGxlLCJhY3RpdmUiKSxKbyh0aGlzLmd1aWRlLCJhY3RpdmUiKX19LHtrZXk6ImNoZWNrSWZDb2x1bW5IZWFkZXIiLHZhbHVlOmZ1bmN0'@;
put 'aW9uKGQpe3JldHVybiEheDQoZCxbIlRIRUFEIl0sdGhpcy5ob3Qucm9vdEVsZW1lbnQpfX0se2tleToiZ2V0Q2xvc2VzdFRIUGFyZW50Iix2YWx1ZTpmdW5jdGlvbihkKXtyZXR1cm4iVEFCTEUiIT09ZC50YWdOYW1lPyJUSCI9PT1kLnRhZ05hbWU/ZDp0aGlzLmdldENsb3Nlc3RUSFBhcmVu'@;
put 'dChkLnBhcmVudE5vZGUpOm51bGx9fSx7a2V5OiJvbk1vdXNlT3ZlciIsdmFsdWU6ZnVuY3Rpb24oZCl7aWYoIUFZKGQudGFyZ2V0KSYmdGhpcy5jaGVja0lmQ29sdW1uSGVhZGVyKGQudGFyZ2V0KSl7dmFyIGg9dGhpcy5nZXRDbG9zZXN0VEhQYXJlbnQoZC50YXJnZXQpO2lmKCFoKXJldHVy'@;
put 'bjt2YXIgbT1oLmdldEF0dHJpYnV0ZSgiY29sc3BhbiIpO2gmJihudWxsPT09bXx8IjEiPT09bSkmJih0aGlzLnByZXNzZWR8fHRoaXMuc2V0dXBIYW5kbGVQb3NpdGlvbihoKSl9fX0se2tleToiYWZ0ZXJNb3VzZURvd25UaW1lb3V0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXMsaD1m'@;
put 'dW5jdGlvbigpe2QuaG90LmZvcmNlRnVsbFJlbmRlcj0hMCxkLmhvdC52aWV3LnJlbmRlcigpLGQuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCEwKX0sbT1mdW5jdGlvbihYLGFlKXt2YXIgcGU9ZC5ob3QucnVuSG9va3MoImJlZm9yZUNvbHVtblJlc2l6ZSIsZC5uZXdTaXplLFgsITAp'@;
put 'O3ZvaWQgMCE9PXBlJiYoZC5uZXdTaXplPXBlKSwiYWxsIj09PWQuaG90LmdldFNldHRpbmdzKCkuc3RyZXRjaEg/ZC5jbGVhck1hbnVhbFNpemUoWCk6ZC5zZXRNYW51YWxTaXplKFgsZC5uZXdTaXplKSxkLnNhdmVNYW51YWxDb2x1bW5XaWR0aHMoKSxkLmhvdC5ydW5Ib29rcygiYWZ0ZXJD'@;
put 'b2x1bW5SZXNpemUiLGQubmV3U2l6ZSxYLCEwKSxhZSYmaCgpfTt0aGlzLmRibGNsaWNrPj0yJiYodGhpcy5zZWxlY3RlZENvbHMubGVuZ3RoPjE/KFJuKHRoaXMuc2VsZWN0ZWRDb2xzLGZ1bmN0aW9uKE8pe20oTyl9KSxoKCkpOlJuKHRoaXMuc2VsZWN0ZWRDb2xzLGZ1bmN0aW9uKE8pe20o'@;
put 'TywhMCl9KSksdGhpcy5kYmxjbGljaz0wLHRoaXMuYXV0b3Jlc2l6ZVRpbWVvdXQ9bnVsbH19LHtrZXk6Im9uTW91c2VEb3duIix2YWx1ZTpmdW5jdGlvbihkKXt2YXIgaD10aGlzO1lvKGQudGFyZ2V0LCJtYW51YWxDb2x1bW5SZXNpemVyIikmJih0aGlzLnNldHVwSGFuZGxlUG9zaXRpb24o'@;
put 'dGhpcy5jdXJyZW50VEgpLHRoaXMuc2V0dXBHdWlkZVBvc2l0aW9uKCksdGhpcy5wcmVzc2VkPSEwLG51bGw9PT10aGlzLmF1dG9yZXNpemVUaW1lb3V0JiYodGhpcy5hdXRvcmVzaXplVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIGguYWZ0ZXJNb3VzZURvd25UaW1lb3V0'@;
put 'KCl9LDUwMCksdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCh0aGlzLmF1dG9yZXNpemVUaW1lb3V0KSksdGhpcy5kYmxjbGljays9MSx0aGlzLnN0YXJ0WD1kLnBhZ2VYLHRoaXMubmV3U2l6ZT10aGlzLnN0YXJ0V2lkdGgpfX0se2tleToib25Nb3VzZU1vdmUiLHZhbHVlOmZ1bmN0aW9uKGQp'@;
put 'e3ZhciBoPXRoaXM7aWYodGhpcy5wcmVzc2VkKXt2YXIgbT0oZC5wYWdlWC10aGlzLnN0YXJ0WCkqdGhpcy5ob3QuZ2V0RGlyZWN0aW9uRmFjdG9yKCk7dGhpcy5jdXJyZW50V2lkdGg9dGhpcy5zdGFydFdpZHRoK20sUm4odGhpcy5zZWxlY3RlZENvbHMsZnVuY3Rpb24oXyl7aC5uZXdTaXpl'@;
put 'PWguc2V0TWFudWFsU2l6ZShfLGguY3VycmVudFdpZHRoKX0pLHRoaXMucmVmcmVzaEhhbmRsZVBvc2l0aW9uKCksdGhpcy5yZWZyZXNoR3VpZGVQb3NpdGlvbigpfX19LHtrZXk6Im9uTW91c2VVcCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLGg9ZnVuY3Rpb24oKXtkLmhvdC5mb3Jj'@;
put 'ZUZ1bGxSZW5kZXI9ITAsZC5ob3Qudmlldy5yZW5kZXIoKSxkLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSghMCl9LG09ZnVuY3Rpb24oWCxhZSl7ZC5ob3QucnVuSG9va3MoImJlZm9yZUNvbHVtblJlc2l6ZSIsZC5uZXdTaXplLFgsITEpLGFlJiZoKCksZC5zYXZlTWFudWFsQ29sdW1u'@;
put 'V2lkdGhzKCksZC5ob3QucnVuSG9va3MoImFmdGVyQ29sdW1uUmVzaXplIixkLm5ld1NpemUsWCwhMSl9O3RoaXMucHJlc3NlZCYmKHRoaXMuaGlkZUhhbmRsZUFuZEd1aWRlKCksdGhpcy5wcmVzc2VkPSExLHRoaXMubmV3U2l6ZSE9PXRoaXMuc3RhcnRXaWR0aCYmKHRoaXMuc2VsZWN0ZWRD'@;
put 'b2xzLmxlbmd0aD4xPyhSbih0aGlzLnNlbGVjdGVkQ29scyxmdW5jdGlvbihPKXttKE8pfSksaCgpKTpSbih0aGlzLnNlbGVjdGVkQ29scyxmdW5jdGlvbihPKXttKE8sITApfSkpLHRoaXMuc2V0dXBIYW5kbGVQb3NpdGlvbih0aGlzLmN1cnJlbnRUSCkpfX0se2tleToiYmluZEV2ZW50cyIs'@;
put 'dmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLGg9dGhpcy5ob3QsbT1oLnJvb3RXaW5kb3csXz1oLnJvb3RFbGVtZW50O3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoXywibW91c2VvdmVyIixmdW5jdGlvbihPKXtyZXR1cm4gZC5vbk1vdXNlT3ZlcihPKX0pLHRoaXMuZXZl'@;
put 'bnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoXywibW91c2Vkb3duIixmdW5jdGlvbihPKXtyZXR1cm4gZC5vbk1vdXNlRG93bihPKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobSwibW91c2Vtb3ZlIixmdW5jdGlvbihPKXtyZXR1cm4gZC5vbk1vdXNlTW92ZShPKX0p'@;
put 'LHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobSwibW91c2V1cCIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbk1vdXNlVXAoKX0pfX0se2tleToib25Nb2RpZnlDb2xXaWR0aCIsdmFsdWU6ZnVuY3Rpb24oZCxoKXt2YXIgbT1kO2lmKHRoaXMuZW5hYmxlZCl7dmFyIF89dGhpcy5o'@;
put 'b3QudG9QaHlzaWNhbENvbHVtbihoKSxPPXRoaXMuY29sdW1uV2lkdGhzTWFwLmdldFZhbHVlQXRJbmRleChfKTt0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0NQXSYmTyYmKG09Tyl9cmV0dXJuIG19fSx7a2V5OiJvbkJlZm9yZVN0cmV0Y2hpbmdDb2x1bW5XaWR0aCIsdmFsdWU6ZnVuY3Rpb24o'@;
put 'ZCxoKXt2YXIgbT10aGlzLmNvbHVtbldpZHRoc01hcC5nZXRWYWx1ZUF0SW5kZXgoaCk7cmV0dXJuIG51bGw9PT1tJiYobT1kKSxtfX0se2tleToib25CZWZvcmVDb2x1bW5SZXNpemUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5ob3Qudmlldy5fd3Qud3RWaWV3cG9ydC5yZXNldEhhc092ZXJz'@;
put 'aXplZENvbHVtbkhlYWRlcnNNYXJrZWQoKX19LHtrZXk6ImRlc3Ryb3kiLHZhbHVlOmZ1bmN0aW9uKCl7YzYoTjMoYS5wcm90b3R5cGUpLCJkZXN0cm95Iix0aGlzKS5jYWxsKHRoaXMpfX1dLFt7a2V5OiJQTFVHSU5fS0VZIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQ1B9fSx7a2V5OiJQTFVH'@;
put 'SU5fUFJJT1JJVFkiLGdldDpmdW5jdGlvbigpe3JldHVybiAxMzB9fV0pLGF9KEdhKTtmdW5jdGlvbiBfRShsKXtyZXR1cm4oX0U9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpm'@;
put 'dW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiBCbWUobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFy'@;
put 'IGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLF85dChmLmtleSksZil9fWZ1bmN0aW9uIF85dChsKXt2YXIgYz1mdW5jdGlvbiB3OXQobCxjKXtp'@;
put 'Zigib2JqZWN0IiE9PV9FKGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PV9FKGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9Q'@;
put 'cmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1fRShjKT9jOlN0cmluZyhjKX12YXIgZWI9InB4IixDOXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBs'@;
put 'KGMpeyhmdW5jdGlvbiB5OXQobCxjKXtpZighKGwgaW5zdGFuY2VvZiBjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsbCksdGhpcy5ob3Q9Yyx0aGlzLl9lbGVtZW50PW51bGwsdGhpcy5zdGF0ZT0wfXJldHVybiBmdW5j'@;
put 'dGlvbiBiOXQobCxjLGEpe2MmJkJtZShsLnByb3RvdHlwZSxjKSxhJiZCbWUobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0obCxbe2tleToiYXBwZW5kVG8iLHZhbHVlOmZ1bmN0aW9uKGEpe2EuYXBwZW5kQ2hpbGQodGhpcy5fZWxlbWVu'@;
put 'dCksdGhpcy5zdGF0ZT0yfX0se2tleToiYnVpbGQiLHZhbHVlOmZ1bmN0aW9uKCl7MD09PXRoaXMuc3RhdGUmJih0aGlzLl9lbGVtZW50PXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLnN0YXRlPTEpfX0se2tleToiZGVzdHJveSIsdmFsdWU6ZnVuY3Rp'@;
put 'b24oKXt0aGlzLmlzQXBwZW5kZWQoKSYmdGhpcy5fZWxlbWVudC5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuX2VsZW1lbnQpLHRoaXMuX2VsZW1lbnQ9bnVsbCx0aGlzLnN0YXRlPTB9fSx7a2V5OiJpc0FwcGVuZGVkIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiAyPT09dGhpcy5z'@;
put 'dGF0ZX19LHtrZXk6ImlzQnVpbHQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhdGU+PTF9fSx7a2V5OiJzZXRQb3NpdGlvbiIsdmFsdWU6ZnVuY3Rpb24oYSxmKXt2b2lkIDAhPT1hJiYodGhpcy5fZWxlbWVudC5zdHlsZS50b3A9YStlYiksdm9pZCAwIT09ZiYmKHRoaXMuX2Vs'@;
put 'ZW1lbnQuc3R5bGUubGVmdD1mK2ViKX19LHtrZXk6ImdldFBvc2l0aW9uIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybnt0b3A6dGhpcy5fZWxlbWVudC5zdHlsZS50b3A/cGFyc2VJbnQodGhpcy5fZWxlbWVudC5zdHlsZS50b3AsMTApOjAsbGVmdDp0aGlzLl9lbGVtZW50LnN0eWxlLmxlZnQ/'@;
put 'cGFyc2VJbnQodGhpcy5fZWxlbWVudC5zdHlsZS5sZWZ0LDEwKTowfX19LHtrZXk6InNldFNpemUiLHZhbHVlOmZ1bmN0aW9uKGEsZil7YSYmKHRoaXMuX2VsZW1lbnQuc3R5bGUud2lkdGg9YStlYiksZiYmKHRoaXMuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0PWYrZWIpfX0se2tleToiZ2V0U2l6'@;
put 'ZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57d2lkdGg6dGhpcy5fZWxlbWVudC5zdHlsZS53aWR0aD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLndpZHRoLDEwKTowLGhlaWdodDp0aGlzLl9lbGVtZW50LnN0eWxlLmhlaWdodD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLmhl'@;
put 'aWdodCwxMCk6MH19fSx7a2V5OiJzZXRPZmZzZXQiLHZhbHVlOmZ1bmN0aW9uKGEsZil7YSYmKHRoaXMuX2VsZW1lbnQuc3R5bGUubWFyZ2luVG9wPWErZWIpLGYmJih0aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpbkxlZnQ9ZitlYil9fSx7a2V5OiJnZXRPZmZzZXQiLHZhbHVlOmZ1bmN0aW9u'@;
put 'KCl7cmV0dXJue3RvcDp0aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpblRvcD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpblRvcCwxMCk6MCxsZWZ0OnRoaXMuX2VsZW1lbnQuc3R5bGUubWFyZ2luTGVmdD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpbkxlZnQs'@;
put 'MTApOjB9fX1dKSxsfSgpO2NvbnN0IFVtZT1DOXQ7ZnVuY3Rpb24gdGIobCl7cmV0dXJuKHRiPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMm'@;
put 'JiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gWm1lKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxl'@;
put 'PWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxrOXQoZi5rZXkpLGYpfX1mdW5jdGlvbiBrOXQobCl7dmFyIGM9ZnVuY3Rpb24gRTl0KGwsYyl7aWYoIm9iamVjdCIhPT10YihsKXx8'@;
put 'bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT10YihmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJu'@;
put 'IGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09dGIoYyk/YzpTdHJpbmcoYyl9ZnVuY3Rpb24gU1AoKXtyZXR1cm4gU1A9dHlwZW9mIFJlZmxlY3Q8InUiJiZSZWZsZWN0LmdldD9S'@;
put 'ZWZsZWN0LmdldC5iaW5kKCk6ZnVuY3Rpb24oYyxhLGYpe3ZhciBkPWZ1bmN0aW9uIHg5dChsLGMpe2Zvcig7IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsLGMpJiZudWxsIT09KGw9bmIobCkpOyk7cmV0dXJuIGx9KGMsYSk7aWYoZCl7dmFyIGg9T2JqZWN0LmdldE93'@;
put 'blByb3BlcnR5RGVzY3JpcHRvcihkLGEpO3JldHVybiBoLmdldD9oLmdldC5jYWxsKGFyZ3VtZW50cy5sZW5ndGg8Mz9jOmYpOmgudmFsdWV9fSxTUC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gU1gobCxjKXtyZXR1cm4oU1g9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5z'@;
put 'ZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZixkKXtyZXR1cm4gZi5fX3Byb3RvX189ZCxmfSkobCxjKX1mdW5jdGlvbiBuYihsKXtyZXR1cm4obmI9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuX19w'@;
put 'cm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSl9KShsKX12YXIgTDl0PWZ1bmN0aW9uKGwpeyFmdW5jdGlvbiBBOXQobCxjKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyYmbnVsbCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBu'@;
put 'dWxsIG9yIGEgZnVuY3Rpb24iKTtsLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGMmJmMucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6bCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSks'@;
put 'YyYmU1gobCxjKX0oYSxsKTt2YXIgYz1mdW5jdGlvbiBUOXQobCl7dmFyIGM9ZnVuY3Rpb24gSTl0KCl7aWYodHlwZW9mIFJlZmxlY3Q+InUifHwhUmVmbGVjdC5jb25zdHJ1Y3R8fFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJl'@;
put 'dHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sZnVuY3Rpb24oKXt9KSksITB9Y2F0Y2h7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciBkLGY9bmIobCk7aWYoYyl7dmFyIGg9bmIodGhp'@;
put 'cykuY29uc3RydWN0b3I7ZD1SZWZsZWN0LmNvbnN0cnVjdChmLGFyZ3VtZW50cyxoKX1lbHNlIGQ9Zi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uIE85dChsLGMpe2lmKGMmJigib2JqZWN0Ij09PXRiKGMpfHwiZnVuY3Rpb24iPT10eXBlb2YgYykpcmV0dXJuIGM7aWYo'@;
put 'dm9pZCAwIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbiBEOXQobCl7aWYodm9pZCAwPT09bCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0'@;
put 'IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBsfShsKX0odGhpcyxkKX19KGEpO2Z1bmN0aW9uIGEoKXtyZXR1cm4gZnVuY3Rpb24gUzl0KGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNh'@;
put 'bGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsYSksYy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIGZ1bmN0aW9uIE05dChsLGMsYSl7YyYmWm1lKGwucHJvdG90eXBlLGMpLGEmJlptZShsLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJs'@;
put 'ZTohMX0pfShhLFt7a2V5OiJidWlsZCIsdmFsdWU6ZnVuY3Rpb24oKXtTUChuYihhLnByb3RvdHlwZSksImJ1aWxkIix0aGlzKS5jYWxsKHRoaXMpLGdpKHRoaXMuX2VsZW1lbnQsImh0X19tYW51YWxSb3dNb3ZlLS1iYWNrbGlnaHQiKX19XSksYX0oVW1lKTtjb25zdCBQOXQ9TDl0O2Z1bmN0'@;
put 'aW9uIHJiKGwpe3JldHVybihyYj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0'@;
put 'cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIFltZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEw'@;
put 'LCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsTjl0KGYua2V5KSxmKX19ZnVuY3Rpb24gTjl0KGwpe3ZhciBjPWZ1bmN0aW9uIFY5dChsLGMpe2lmKCJvYmplY3QiIT09cmIobCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRv'@;
put 'UHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09cmIoZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmlu'@;
put 'ZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PXJiKGMpP2M6U3RyaW5nKGMpfWZ1bmN0aW9uIE1QKCl7cmV0dXJuIE1QPXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdC5nZXQ/UmVmbGVjdC5nZXQuYmluZCgpOmZ1bmN0aW9uKGMsYSxmKXt2'@;
put 'YXIgZD1mdW5jdGlvbiBCOXQobCxjKXtmb3IoOyFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobCxjKSYmbnVsbCE9PShsPWliKGwpKTspO3JldHVybiBsfShjLGEpO2lmKGQpe3ZhciBoPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZCxhKTtyZXR1cm4gaC5n'@;
put 'ZXQ/aC5nZXQuY2FsbChhcmd1bWVudHMubGVuZ3RoPDM/YzpmKTpoLnZhbHVlfX0sTVAuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIE1YKGwsYyl7cmV0dXJuKE1YPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGYsZCl7'@;
put 'cmV0dXJuIGYuX19wcm90b19fPWQsZn0pKGwsYyl9ZnVuY3Rpb24gaWIobCl7cmV0dXJuKGliPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGEpe3JldHVybiBhLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpfSko'@;
put 'bCl9dmFyIEc5dD1mdW5jdGlvbihsKXshZnVuY3Rpb24gajl0KGwsYyl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGMmJm51bGwhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7bC5wcm90b3R5cGU9T2Jq'@;
put 'ZWN0LmNyZWF0ZShjJiZjLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmwsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGMmJk1YKGwsYyl9KGEsbCk7dmFyIGM9ZnVuY3Rpb24gejl0'@;
put 'KGwpe3ZhciBjPWZ1bmN0aW9uIFk5dCgpe2lmKHR5cGVvZiBSZWZsZWN0PiJ1Inx8IVJlZmxlY3QuY29uc3RydWN0fHxSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBl'@;
put 'LnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLGZ1bmN0aW9uKCl7fSkpLCEwfWNhdGNoe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZCxmPWliKGwpO2lmKGMpe3ZhciBoPWliKHRoaXMpLmNvbnN0cnVjdG9yO2Q9UmVmbGVjdC5jb25zdHJ1Y3Qo'@;
put 'Zixhcmd1bWVudHMsaCl9ZWxzZSBkPWYuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbiBVOXQobCxjKXtpZihjJiYoIm9iamVjdCI9PT1yYihjKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGMpKXJldHVybiBjO2lmKHZvaWQgMCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVy'@;
put 'aXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24gWjl0KGwpe2lmKHZvaWQgMD09PWwpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3Qg'@;
put 'YmVlbiBjYWxsZWQiKTtyZXR1cm4gbH0obCl9KHRoaXMsZCl9fShhKTtmdW5jdGlvbiBhKCl7cmV0dXJuIGZ1bmN0aW9uIEY5dChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGEp'@;
put 'LGMuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBmdW5jdGlvbiBIOXQobCxjLGEpe2MmJlltZShsLnByb3RvdHlwZSxjKSxhJiZZbWUobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0oYSxbe2tleToiYnVpbGQiLHZhbHVlOmZ1bmN0'@;
put 'aW9uKCl7TVAoaWIoYS5wcm90b3R5cGUpLCJidWlsZCIsdGhpcykuY2FsbCh0aGlzKSxnaSh0aGlzLl9lbGVtZW50LCJodF9fbWFudWFsUm93TW92ZS0tZ3VpZGVsaW5lIil9fV0pLGF9KFVtZSk7Y29uc3QgJDl0PUc5dDtmdW5jdGlvbiBvYihsKXtyZXR1cm4ob2I9ImZ1bmN0aW9uIj09dHlw'@;
put 'ZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5'@;
put 'cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiBXbWUobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVj'@;
put 'dC5kZWZpbmVQcm9wZXJ0eShsLFg5dChmLmtleSksZil9fWZ1bmN0aW9uIFg5dChsKXt2YXIgYz1mdW5jdGlvbiBKOXQobCxjKXtpZigib2JqZWN0IiE9PW9iKGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9YS5j'@;
put 'YWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PW9iKGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3RyaW5n'@;
put 'Iik7cmV0dXJuInN5bWJvbCI9PT1vYihjKT9jOlN0cmluZyhjKX1mdW5jdGlvbiBmNigpe3JldHVybiBmNj10eXBlb2YgUmVmbGVjdDwidSImJlJlZmxlY3QuZ2V0P1JlZmxlY3QuZ2V0LmJpbmQoKTpmdW5jdGlvbihjLGEsZil7dmFyIGQ9ZnVuY3Rpb24gUTl0KGwsYyl7Zm9yKDshT2JqZWN0'@;
put 'LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGwsYykmJm51bGwhPT0obD1WMyhsKSk7KTtyZXR1cm4gbH0oYyxhKTtpZihkKXt2YXIgaD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGQsYSk7cmV0dXJuIGguZ2V0P2guZ2V0LmNhbGwoYXJndW1lbnRzLmxlbmd0aDwzP2M6'@;
put 'Zik6aC52YWx1ZX19LGY2LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBrWChsLGMpe3JldHVybihrWD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihmLGQpe3JldHVybiBmLl9fcHJvdG9fXz1kLGZ9KShsLGMpfWZ1bmN0'@;
put 'aW9uIEVYKGwpe2lmKHZvaWQgMD09PWwpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gbH1mdW5jdGlvbiBWMyhsKXtyZXR1cm4oVjM9T2JqZWN0LnNldFByb3RvdHlwZU9m'@;
put 'P09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSl9KShsKX11by5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlUm93TW92ZSIpLHVvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJh'@;
put 'ZnRlclJvd01vdmUiKTt2YXIgeFg9Im1hbnVhbFJvd01vdmUiLG5tPW5ldyBXZWFrTWFwLEdtZT0iaHRfX21hbnVhbFJvd01vdmUiLGtQPSJzaG93LXVpIixBWD0ib24tbW92aW5nLS1yb3dzIixUWD0iYWZ0ZXItc2VsZWN0aW9uLS1yb3dzIixveXQ9ZnVuY3Rpb24obCl7IWZ1bmN0aW9uIGV5'@;
put 'dChsLGMpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjJiZudWxsIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2wucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYyYmYy5wcm90b3R5cGUse2NvbnN0cnVj'@;
put 'dG9yOnt2YWx1ZTpsLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxjJiZrWChsLGMpfShhLGwpO3ZhciBjPWZ1bmN0aW9uIHR5dChsKXt2YXIgYz1mdW5jdGlvbiByeXQoKXtpZih0eXBlb2Yg'@;
put 'UmVmbGVjdD4idSJ8fCFSZWZsZWN0LmNvbnN0cnVjdHx8UmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9v'@;
put 'bGVhbixbXSxmdW5jdGlvbigpe30pKSwhMH1jYXRjaHtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGQsZj1WMyhsKTtpZihjKXt2YXIgaD1WMyh0aGlzKS5jb25zdHJ1Y3RvcjtkPVJlZmxlY3QuY29uc3RydWN0KGYsYXJndW1lbnRzLGgpfWVsc2UgZD1mLmFwcGx5KHRoaXMs'@;
put 'YXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24gbnl0KGwsYyl7aWYoYyYmKCJvYmplY3QiPT09b2IoYyl8fCJmdW5jdGlvbiI9PXR5cGVvZiBjKSlyZXR1cm4gYztpZih2b2lkIDAhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBv'@;
put 'YmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIEVYKGwpfSh0aGlzLGQpfX0oYSk7ZnVuY3Rpb24gYShmKXt2YXIgZDtyZXR1cm4gZnVuY3Rpb24gSzl0KGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0'@;
put 'aW9uIil9KHRoaXMsYSksZD1jLmNhbGwodGhpcyxmKSxubS5zZXQoRVgoZCkse3Jvd3NUb01vdmU6W10scHJlc3NlZDp2b2lkIDAsdGFyZ2V0OntldmVudFBhZ2VZOnZvaWQgMCxjb29yZHM6dm9pZCAwLFREOnZvaWQgMCxyb3c6dm9pZCAwfSxjYWNoZWREcm9wSW5kZXg6dm9pZCAwfSksZC5l'@;
put 'dmVudE1hbmFnZXI9bmV3IGZzKEVYKGQpKSxkLmJhY2tsaWdodD1uZXcgUDl0KGYpLGQuZ3VpZGVsaW5lPW5ldyAkOXQoZiksZH1yZXR1cm4gZnVuY3Rpb24gcTl0KGwsYyxhKXtjJiZXbWUobC5wcm90b3R5cGUsYyksYSYmV21lKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3Rv'@;
put 'dHlwZSIse3dyaXRhYmxlOiExfSl9KGEsW3trZXk6ImlzRW5hYmxlZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbeFhdfX0se2tleToiZW5hYmxlUGx1Z2luIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5h'@;
put 'ZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25CZWZvcmVPbkNlbGxNb3VzZURvd24uYXBwbHkoZCxhcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25CZWZvcmVPbkNl'@;
put 'bGxNb3VzZU92ZXIuYXBwbHkoZCxhcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlclNjcm9sbEhvcml6b250YWxseSIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5KCl9KSx0aGlzLmFkZEhvb2soImFmdGVyTG9hZERhdGEiLGZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIGQub25BZnRlckxvYWREYXRhLmFwcGx5KGQsYXJndW1lbnRzKX0pLHRoaXMuYnVpbGRQbHVnaW5VSSgpLHRoaXMucmVnaXN0ZXJFdmVudHMoKSxnaSh0aGlzLmhvdC5yb290RWxlbWVudCxHbWUpLGY2KFYzKGEucHJvdG90eXBlKSwiZW5hYmxlUGx1Z2luIix0aGlzKS5jYWxsKHRoaXMp'@;
put 'KX19LHtrZXk6InVwZGF0ZVBsdWdpbiIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHRoaXMubW92ZUJ5U2V0dGluZ3NPckxvYWQoKSxmNihWMyhhLnByb3RvdHlwZSksInVwZGF0ZVBsdWdpbiIsdGhpcykuY2FsbCh0aGlzKX19LHtr'@;
put 'ZXk6ImRpc2FibGVQbHVnaW4iLHZhbHVlOmZ1bmN0aW9uKCl7Sm8odGhpcy5ob3Qucm9vdEVsZW1lbnQsR21lKSx0aGlzLnVucmVnaXN0ZXJFdmVudHMoKSx0aGlzLmJhY2tsaWdodC5kZXN0cm95KCksdGhpcy5ndWlkZWxpbmUuZGVzdHJveSgpLGY2KFYzKGEucHJvdG90eXBlKSwiZGlzYWJs'@;
put 'ZVBsdWdpbiIsdGhpcykuY2FsbCh0aGlzKX19LHtrZXk6Im1vdmVSb3ciLHZhbHVlOmZ1bmN0aW9uKGQsaCl7cmV0dXJuIHRoaXMubW92ZVJvd3MoW2RdLGgpfX0se2tleToibW92ZVJvd3MiLHZhbHVlOmZ1bmN0aW9uKGQsaCl7dmFyIG09bm0uZ2V0KHRoaXMpLF89bS5jYWNoZWREcm9wSW5k'@;
put 'ZXgsTz10aGlzLmlzTW92ZVBvc3NpYmxlKGQsaCksWD10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUm93TW92ZSIsZCxoLF8sTyk7aWYobS5jYWNoZWREcm9wSW5kZXg9dm9pZCAwLCExIT09WCl7TyYmdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIubW92ZUluZGV4ZXMoZCxoKTt2YXIgYWU9TyYm'@;
put 'dGhpcy5pc1Jvd09yZGVyQ2hhbmdlZChkLGgpO3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSb3dNb3ZlIixkLGgsXyxPLGFlKSxhZX19fSx7a2V5OiJkcmFnUm93Iix2YWx1ZTpmdW5jdGlvbihkLGgpe3JldHVybiB0aGlzLmRyYWdSb3dzKFtkXSxoKX19LHtrZXk6ImRyYWdSb3dz'@;
put 'Iix2YWx1ZTpmdW5jdGlvbihkLGgpe3ZhciBtPXRoaXMuY291bnRGaW5hbEluZGV4KGQsaCk7cmV0dXJuIG5tLmdldCh0aGlzKS5jYWNoZWREcm9wSW5kZXg9aCx0aGlzLm1vdmVSb3dzKGQsbSl9fSx7a2V5OiJpc01vdmVQb3NzaWJsZSIsdmFsdWU6ZnVuY3Rpb24oZCxoKXt2YXIgbT10aGlz'@;
put 'LmhvdC5yb3dJbmRleE1hcHBlci5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpLF89ZC5sZW5ndGgraD5tLE89aDwwLFg9ZC5zb21lKGZ1bmN0aW9uKHBlKXtyZXR1cm4gcGU8MH0pLGFlPWQuc29tZShmdW5jdGlvbihwZSl7cmV0dXJuIHBlPj1tfSk7cmV0dXJuIShffHxPfHxYfHxhZSl9'@;
put 'fSx7a2V5OiJpc1Jvd09yZGVyQ2hhbmdlZCIsdmFsdWU6ZnVuY3Rpb24oZCxoKXtyZXR1cm4gZC5zb21lKGZ1bmN0aW9uKG0sXyl7cmV0dXJuIG0tXyE9PWh9KX19LHtrZXk6ImNvdW50RmluYWxJbmRleCIsdmFsdWU6ZnVuY3Rpb24oZCxoKXt2YXIgbT1QcyhkLGZ1bmN0aW9uKF8sTyl7cmV0'@;
put 'dXJuIE88aCYmKF8rPTEpLF99LDApO3JldHVybiBoLW19fSx7a2V5OiJnZXRSb3dzSGVpZ2h0Iix2YWx1ZTpmdW5jdGlvbihkLGgpe2Zvcih2YXIgbT10aGlzLmhvdC5yb3dJbmRleE1hcHBlcixfPTAsTz1kO088PWg7TysrKXt2YXIgWD1tLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgo'@;
put 'Tyk7bnVsbCE9PVgmJihfKz10aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLmdldFJvd0hlaWdodChYKXx8MjMpfXJldHVybiBffX0se2tleToibW92ZUJ5U2V0dGluZ3NPckxvYWQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt4WF07aWYoQXJyYXkuaXNB'@;
put 'cnJheShkKSl0aGlzLm1vdmVSb3dzKGQsMCk7ZWxzZSBpZih2b2lkIDAhPT1kKXt2YXIgaD10aGlzLnBlcnNpc3RlbnRTdGF0ZUxvYWQoKTtoLmxlbmd0aCYmdGhpcy5tb3ZlUm93cyhoLDApfX19LHtrZXk6ImlzRml4ZWRSb3dUb3AiLHZhbHVlOmZ1bmN0aW9uKGQpe3JldHVybiBkPHRoaXMu'@;
put 'aG90LmdldFNldHRpbmdzKCkuZml4ZWRSb3dzVG9wfX0se2tleToiaXNGaXhlZFJvd0JvdHRvbSIsdmFsdWU6ZnVuY3Rpb24oZCl7cmV0dXJuIGQ+dGhpcy5ob3QuY291bnRSb3dzKCktMS10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkUm93c0JvdHRvbX19LHtrZXk6InBlcnNpc3RlbnRT'@;
put 'dGF0ZVNhdmUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZVNhdmUiLCJtYW51YWxSb3dNb3ZlIix0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKSl9fSx7a2V5OiJwZXJzaXN0ZW50U3RhdGVMb2FkIix2YWx1ZTpm'@;
put 'dW5jdGlvbigpe3ZhciBkPXt9O3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlTG9hZCIsIm1hbnVhbFJvd01vdmUiLGQpLGQudmFsdWU/ZC52YWx1ZTpbXX19LHtrZXk6InByZXBhcmVSb3dzVG9Nb3ZpbmciLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5ob3Qu'@;
put 'Z2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxoPVtdO2lmKCFkKXJldHVybiBoO3ZhciBtPWQuZnJvbSxfPWQudG87cmV0dXJuIF9vKE1hdGgubWluKG0ucm93LF8ucm93KSxNYXRoLm1heChtLnJvdyxfLnJvdyksZnVuY3Rpb24oYWUpe2gucHVzaChhZSl9KSxofX0se2tleToicmVmcmVzaFBvc2l0'@;
put 'aW9ucyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD1ubS5nZXQodGhpcyksaD1kLnRhcmdldC5jb29yZHMsbT10aGlzLmhvdC52aWV3LmdldEZpcnN0RnVsbHlWaXNpYmxlUm93KCksXz10aGlzLmhvdC52aWV3LmdldExhc3RGdWxseVZpc2libGVSb3coKSxPPXRoaXMuaG90LmNvdW50Um93cygp'@;
put 'O3RoaXMuaXNGaXhlZFJvd1RvcChoLnJvdykmJm0+MCYmdGhpcy5ob3Quc2Nyb2xsVmlld3BvcnRUbyh0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobS0xLC0xKSksdGhpcy5pc0ZpeGVkUm93Qm90dG9tKGgucm93KSYmXzxPJiZ0aGlzLmhvdC5zY3Jv'@;
put 'bGxWaWV3cG9ydFRvKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChfKzEsMSksdm9pZCAwLCEwKTt2YXIgWD10aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLGFlPWQudGFyZ2V0LlRELHBlPXRoaXMuaG90LnJvb3RFbGVtZW50LGJlPWl1KHBlKSx4ZT1i'@;
put 'NShwZSksZHQ9ZC50YXJnZXQuZXZlbnRQYWdlWS0oYmUudG9wLSh0aGlzLmhvdC5yb290V2luZG93PT09eGU/eGUuc2Nyb2xsWTp4ZS5zY3JvbGxUb3ApKStYLmhvbGRlci5zY3JvbGxUb3AsZ3Q9WC5oaWRlci5vZmZzZXRIZWlnaHQsanQ9WC5UQk9EWS5vZmZzZXRUb3Ascm49dGhpcy5iYWNr'@;
put 'bGlnaHQuZ2V0T2Zmc2V0KCkudG9wLFh0PXRoaXMuYmFja2xpZ2h0LmdldFNpemUoKS5oZWlnaHQseW49YWUub2Zmc2V0SGVpZ2h0LzIsUW49YWUub2Zmc2V0SGVpZ2h0LE9yPXRoaXMuaG90LnZpZXcuVEhFQUQub2Zmc2V0SGVpZ2h0K3RoaXMuZ2V0Um93c0hlaWdodCgwLGgucm93LTEpLFZy'@;
put 'PWR0Pj1Pcit5bjt0aGlzLmlzRml4ZWRSb3dUb3AoaC5yb3cpJiYoT3IrPVguaG9sZGVyLnNjcm9sbFRvcCksaC5yb3c8MD9kLnRhcmdldC5yb3c9bT4wP20tMTptOlZyPyhkLnRhcmdldC5yb3c9aC5yb3crMSxPcis9MD09PWgucm93P1FuLTE6UW4pOmQudGFyZ2V0LnJvdz1oLnJvdzt2YXIg'@;
put 'WnI9ZHQsaXI9T3I7ZHQrWHQrcm4+PWd0P1pyPWd0LVh0LXJuOmR0K3JuPGp0JiYoWnI9anQrTWF0aC5hYnMocm4pKSxPcj49Z3QtMSYmKGlyPWd0LTEpLHRoaXMuYmFja2xpZ2h0LnNldFBvc2l0aW9uKFpyKSx0aGlzLmd1aWRlbGluZS5zZXRQb3NpdGlvbihpcil9fSx7a2V5OiJyZWdpc3Rl'@;
put 'ckV2ZW50cyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLGg9dGhpcy5ob3Qucm9vdERvY3VtZW50LmRvY3VtZW50RWxlbWVudDt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGgsIm1vdXNlbW92ZSIsZnVuY3Rpb24obSl7cmV0dXJuIGQub25Nb3VzZU1vdmUobSl9KSx0'@;
put 'aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGgsIm1vdXNldXAiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Nb3VzZVVwKCl9KX19LHtrZXk6InVucmVnaXN0ZXJFdmVudHMiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5ldmVudE1hbmFnZXIuY2xlYXIoKX19LHtrZXk6Im9uQmVmb3Jl'@;
put 'T25DZWxsTW91c2VEb3duIix2YWx1ZTpmdW5jdGlvbihkLGgsbSxfKXt2YXIgTz10aGlzLmhvdC52aWV3Ll93dCxYPU8ud3RUYWJsZSxhZT1PLnd0Vmlld3BvcnQscGU9dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpLGJlPXRoaXMuaG90LmdldFNlbGVjdGVkUmFu'@;
put 'Z2VMYXN0KCkseGU9bm0uZ2V0KHRoaXMpO2lmKCFiZXx8IXBlfHx4ZS5wcmVzc2VkfHwwIT09ZC5idXR0b24pcmV0dXJuIHhlLnByZXNzZWQ9ITEseGUucm93c1RvTW92ZS5sZW5ndGg9MCx2b2lkIEpvKHRoaXMuaG90LnJvb3RFbGVtZW50LFtBWCxrUF0pO3ZhciBWZT10aGlzLmd1aWRlbGlu'@;
put 'ZS5pc0J1aWx0KCkmJiF0aGlzLmd1aWRlbGluZS5pc0FwcGVuZGVkKCksWmU9dGhpcy5iYWNrbGlnaHQuaXNCdWlsdCgpJiYhdGhpcy5iYWNrbGlnaHQuaXNBcHBlbmRlZCgpO1ZlJiZaZSYmKHRoaXMuZ3VpZGVsaW5lLmFwcGVuZFRvKFguaGlkZXIpLHRoaXMuYmFja2xpZ2h0LmFwcGVuZFRv'@;
put 'KFguaGlkZXIpKTt2YXIgbHQ9YmUuZnJvbSxkdD1iZS50byxndD1NYXRoLm1pbihsdC5yb3csZHQucm93KSxqdD1NYXRoLm1heChsdC5yb3csZHQucm93KTtpZihoLmNvbDwwJiZoLnJvdz49Z3QmJmgucm93PD1qdCl7Xy5yb3c9ITAseGUucHJlc3NlZD0hMCx4ZS50YXJnZXQuZXZlbnRQYWdl'@;
put 'WT1kLnBhZ2VZLHhlLnRhcmdldC5jb29yZHM9aCx4ZS50YXJnZXQuVEQ9bSx4ZS5yb3dzVG9Nb3ZlPXRoaXMucHJlcGFyZVJvd3NUb01vdmluZygpO3ZhciBybj1YLmhvbGRlci5zY3JvbGxMZWZ0K2FlLmdldFJvd0hlYWRlcldpZHRoKCk7dGhpcy5iYWNrbGlnaHQuc2V0UG9zaXRpb24obnVs'@;
put 'bCxybiksdGhpcy5iYWNrbGlnaHQuc2V0U2l6ZShYLmhpZGVyLm9mZnNldFdpZHRoLXJuLHRoaXMuZ2V0Um93c0hlaWdodChndCxqdCkpLHRoaXMuYmFja2xpZ2h0LnNldE9mZnNldCgtMSoodGhpcy5nZXRSb3dzSGVpZ2h0KGd0LGgucm93LTEpK2Qub2Zmc2V0WSksbnVsbCksZ2kodGhpcy5o'@;
put 'b3Qucm9vdEVsZW1lbnQsQVgpLHRoaXMucmVmcmVzaFBvc2l0aW9ucygpfWVsc2UgSm8odGhpcy5ob3Qucm9vdEVsZW1lbnQsVFgpLHhlLnByZXNzZWQ9ITEseGUucm93c1RvTW92ZS5sZW5ndGg9MH19LHtrZXk6Im9uTW91c2VNb3ZlIix2YWx1ZTpmdW5jdGlvbihkKXt2YXIgaD1ubS5nZXQo'@;
put 'dGhpcyk7aWYoaC5wcmVzc2VkKXtpZihkLnRhcmdldD09PXRoaXMuYmFja2xpZ2h0LmVsZW1lbnQpe3ZhciBtPXRoaXMuYmFja2xpZ2h0LmdldFNpemUoKS5oZWlnaHQ7dGhpcy5iYWNrbGlnaHQuc2V0U2l6ZShudWxsLDApLHNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmJhY2tsaWdodC5z'@;
put 'ZXRQb3NpdGlvbihudWxsLG0pfSl9aC50YXJnZXQuZXZlbnRQYWdlWT1kLnBhZ2VZLHRoaXMucmVmcmVzaFBvc2l0aW9ucygpfX19LHtrZXk6Im9uQmVmb3JlT25DZWxsTW91c2VPdmVyIix2YWx1ZTpmdW5jdGlvbihkLGgsbSxfKXt2YXIgTz10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFz'@;
put 'dCgpLFg9bm0uZ2V0KHRoaXMpOyFPfHwhWC5wcmVzc2VkfHwoWC5yb3dzVG9Nb3ZlLmluZGV4T2YoaC5yb3cpPi0xP0pvKHRoaXMuaG90LnJvb3RFbGVtZW50LGtQKTpnaSh0aGlzLmhvdC5yb290RWxlbWVudCxrUCksXy5yb3c9ITAsXy5jb2x1bW49ITAsXy5jZWxsPSEwLFgudGFyZ2V0LmNv'@;
put 'b3Jkcz1oLFgudGFyZ2V0LlREPW0pfX0se2tleToib25Nb3VzZVVwIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkPW5tLmdldCh0aGlzKSxoPWQudGFyZ2V0LnJvdyxtPWQucm93c1RvTW92ZS5sZW5ndGg7aWYoZC5wcmVzc2VkPSExLGQuYmFja2xpZ2h0SGVpZ2h0PTAsSm8odGhpcy5ob3Qucm9v'@;
put 'dEVsZW1lbnQsW0FYLGtQLFRYXSksdGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpJiZnaSh0aGlzLmhvdC5yb290RWxlbWVudCxUWCksIShtPDF8fHZvaWQgMD09PWgpKXt2YXIgTz10aGlzLmhvdC50b1BoeXNpY2FsUm93KGQucm93c1RvTW92ZVswXSksWD10aGlz'@;
put 'LmRyYWdSb3dzKGQucm93c1RvTW92ZSxoKTtpZihkLnJvd3NUb01vdmUubGVuZ3RoPTAsITA9PT1YKXt0aGlzLnBlcnNpc3RlbnRTdGF0ZVNhdmUoKSx0aGlzLmhvdC5yZW5kZXIoKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSghMCk7dmFyIGFlPXRoaXMuaG90LnRvVmlzdWFs'@;
put 'Um93KE8pO3RoaXMuaG90LnNlbGVjdFJvd3MoYWUsYWUrbS0xKX19fX0se2tleToib25BZnRlclNjcm9sbEhvcml6b250YWxseSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLF89dGhpcy5ob3Qudmlldy5fd3Qud3RWaWV3cG9ydC5nZXRSb3dIZWFk'@;
put 'ZXJXaWR0aCgpK2QuaG9sZGVyLnNjcm9sbExlZnQ7dGhpcy5iYWNrbGlnaHQuc2V0UG9zaXRpb24obnVsbCxfKSx0aGlzLmJhY2tsaWdodC5zZXRTaXplKGQuaGlkZXIub2Zmc2V0V2lkdGgtXyl9fSx7a2V5OiJidWlsZFBsdWdpblVJIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuYmFja2xpZ2h0'@;
put 'LmJ1aWxkKCksdGhpcy5ndWlkZWxpbmUuYnVpbGQoKX19LHtrZXk6Im9uQWZ0ZXJMb2FkRGF0YSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLm1vdmVCeVNldHRpbmdzT3JMb2FkKCl9fSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuYmFja2xpZ2h0LmRlc3Ryb3koKSx0aGlz'@;
put 'Lmd1aWRlbGluZS5kZXN0cm95KCksZjYoVjMoYS5wcm90b3R5cGUpLCJkZXN0cm95Iix0aGlzKS5jYWxsKHRoaXMpfX1dLFt7a2V5OiJQTFVHSU5fS0VZIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4geFh9fSx7a2V5OiJQTFVHSU5fUFJJT1JJVFkiLGdldDpmdW5jdGlvbigpe3JldHVybiAxNDB9'@;
put 'fV0pLGF9KEdhKTtmdW5jdGlvbiBhYihsKXtyZXR1cm4oYWI9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9m'@;
put 'IFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiAkbWUobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxm'@;
put 'LmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLHN5dChmLmtleSksZil9fWZ1bmN0aW9uIHN5dChsKXt2YXIgYz1mdW5jdGlvbiB1eXQobCxjKXtpZigib2JqZWN0IiE9PWFiKGwpfHxudWxsPT09bClyZXR1cm4gbDt2'@;
put 'YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PWFiKGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUu'@;
put 'Iil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1hYihjKT9jOlN0cmluZyhjKX1mdW5jdGlvbiBkNigpe3JldHVybiBkNj10eXBlb2YgUmVmbGVjdDwidSImJlJlZmxlY3QuZ2V0P1JlZmxlY3QuZ2V0LmJpbmQoKTpm'@;
put 'dW5jdGlvbihjLGEsZil7dmFyIGQ9ZnVuY3Rpb24gY3l0KGwsYyl7Zm9yKDshT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGwsYykmJm51bGwhPT0obD1CMyhsKSk7KTtyZXR1cm4gbH0oYyxhKTtpZihkKXt2YXIgaD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y'@;
put 'KGQsYSk7cmV0dXJuIGguZ2V0P2guZ2V0LmNhbGwoYXJndW1lbnRzLmxlbmd0aDwzP2M6Zik6aC52YWx1ZX19LGQ2LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBPWChsLGMpe3JldHVybihPWD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQo'@;
put 'KTpmdW5jdGlvbihmLGQpe3JldHVybiBmLl9fcHJvdG9fXz1kLGZ9KShsLGMpfWZ1bmN0aW9uIERYKGwpe2lmKHZvaWQgMD09PWwpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1'@;
put 'cm4gbH1mdW5jdGlvbiBCMyhsKXtyZXR1cm4oQjM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSl9KShsKX12YXIgcW1lLFhtZSxKbWUsUW1lLEVQ'@;
put 'PSJtYW51YWxSb3dSZXNpemUiLEttZT0ibWFudWFsUm93SGVpZ2h0cyIsSVg9bmV3IFdlYWtNYXAsZ3l0PWZ1bmN0aW9uKGwpeyFmdW5jdGlvbiBmeXQobCxjKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyYmbnVsbCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBt'@;
put 'dXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtsLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGMmJmMucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6bCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIs'@;
put 'e3dyaXRhYmxlOiExfSksYyYmT1gobCxjKX0oYSxsKTt2YXIgYz1mdW5jdGlvbiBkeXQobCl7dmFyIGM9ZnVuY3Rpb24gcHl0KCl7aWYodHlwZW9mIFJlZmxlY3Q+InUifHwhUmVmbGVjdC5jb25zdHJ1Y3R8fFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09'@;
put 'dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sZnVuY3Rpb24oKXt9KSksITB9Y2F0Y2h7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciBkLGY9QjMobCk7aWYo'@;
put 'Yyl7dmFyIGg9QjModGhpcykuY29uc3RydWN0b3I7ZD1SZWZsZWN0LmNvbnN0cnVjdChmLGFyZ3VtZW50cyxoKX1lbHNlIGQ9Zi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uIGh5dChsLGMpe2lmKGMmJigib2JqZWN0Ij09PWFiKGMpfHwiZnVuY3Rpb24iPT10eXBlb2Yg'@;
put 'YykpcmV0dXJuIGM7aWYodm9pZCAwIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBEWChsKX0odGhpcyxkKX19KGEpO2Z1bmN0aW9uIGEoZil7dmFyIGQ7IWZ1bmN0aW9uIGF5'@;
put 'dChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGEpO3ZhciBoPShkPWMuY2FsbCh0aGlzLGYpKS5ob3Qucm9vdERvY3VtZW50O3JldHVybiBkLmN1cnJlbnRUSD1udWxsLGQuY3Vy'@;
put 'cmVudFJvdz1udWxsLGQuc2VsZWN0ZWRSb3dzPVtdLGQuY3VycmVudEhlaWdodD1udWxsLGQubmV3U2l6ZT1udWxsLGQuc3RhcnRZPW51bGwsZC5zdGFydEhlaWdodD1udWxsLGQuc3RhcnRPZmZzZXQ9bnVsbCxkLmhhbmRsZT1oLmNyZWF0ZUVsZW1lbnQoIkRJViIpLGQuZ3VpZGU9aC5jcmVh'@;
put 'dGVFbGVtZW50KCJESVYiKSxkLmV2ZW50TWFuYWdlcj1uZXcgZnMoRFgoZCkpLGQucHJlc3NlZD1udWxsLGQuZGJsY2xpY2s9MCxkLmF1dG9yZXNpemVUaW1lb3V0PW51bGwsZC5yb3dIZWlnaHRzTWFwPXZvaWQgMCxJWC5zZXQoRFgoZCkse2NvbmZpZzp2b2lkIDB9KSxnaShkLmhhbmRsZSwi'@;
put 'bWFudWFsUm93UmVzaXplciIpLGdpKGQuZ3VpZGUsIm1hbnVhbFJvd1Jlc2l6ZXJHdWlkZSIpLGR9cmV0dXJuIGZ1bmN0aW9uIGx5dChsLGMsYSl7YyYmJG1lKGwucHJvdG90eXBlLGMpLGEmJiRtZShsLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZToh'@;
put 'MX0pfShhLFt7a2V5OiJpbmxpbmVEaXIiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhvdC5pc1J0bCgpPyJyaWdodCI6ImxlZnQifX0se2tleToiaXNFbmFibGVkIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0VQXX19LHtrZXk6ImVuYWJsZVBs'@;
put 'dWdpbiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzO3RoaXMuZW5hYmxlZHx8KHRoaXMucm93SGVpZ2h0c01hcD1uZXcgRjQsdGhpcy5yb3dIZWlnaHRzTWFwLmFkZExvY2FsSG9vaygiaW5pdCIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbk1hcEluaXQoKX0pLHRoaXMuaG90LnJvd0luZGV4'@;
put 'TWFwcGVyLnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSx0aGlzLnJvd0hlaWdodHNNYXApLHRoaXMuYWRkSG9vaygibW9kaWZ5Um93SGVpZ2h0IixmdW5jdGlvbihoLG0pe3JldHVybiBkLm9uTW9kaWZ5Um93SGVpZ2h0KGgsbSl9KSx0aGlzLmJpbmRFdmVudHMoKSxkNihCMyhhLnByb3Rv'@;
put 'dHlwZSksImVuYWJsZVBsdWdpbiIsdGhpcykuY2FsbCh0aGlzKSl9fSx7a2V5OiJ1cGRhdGVQbHVnaW4iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxkNihCMyhhLnByb3RvdHlwZSksInVwZGF0ZVBsdWdpbiIsdGhpcykuY2FsbCh0'@;
put 'aGlzKX19LHtrZXk6ImRpc2FibGVQbHVnaW4iLHZhbHVlOmZ1bmN0aW9uKCl7SVguZ2V0KHRoaXMpLmNvbmZpZz10aGlzLnJvd0hlaWdodHNNYXAuZ2V0VmFsdWVzKCksdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUpLGQ2KEIzKGEucHJvdG90'@;
put 'eXBlKSwiZGlzYWJsZVBsdWdpbiIsdGhpcykuY2FsbCh0aGlzKX19LHtrZXk6InNhdmVNYW51YWxSb3dIZWlnaHRzIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuaG90LnJ1bkhvb2tzKCJwZXJzaXN0ZW50U3RhdGVTYXZlIixLbWUsdGhpcy5yb3dIZWlnaHRzTWFwLmdldFZhbHVlcygpKX19LHtr'@;
put 'ZXk6ImxvYWRNYW51YWxSb3dIZWlnaHRzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkPXt9O3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlTG9hZCIsS21lLGQpLGQudmFsdWV9fSx7a2V5OiJzZXRNYW51YWxTaXplIix2YWx1ZTpmdW5jdGlvbihkLGgpe3ZhciBtPXRo'@;
put 'aXMuaG90LnRvUGh5c2ljYWxSb3coZCksXz1NYXRoLm1heChoLE1mZS5ERUZBVUxUX0hFSUdIVCk7cmV0dXJuIHRoaXMucm93SGVpZ2h0c01hcC5zZXRWYWx1ZUF0SW5kZXgobSxfKSxffX0se2tleToic2V0dXBIYW5kbGVQb3NpdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZCl7dmFyIGg9dGhpczt0'@;
put 'aGlzLmN1cnJlbnRUSD1kO3ZhciBtPXRoaXMuaG90LnZpZXcsXz1tLl93dCxPPV8ud3RUYWJsZS5nZXRDb29yZHModGhpcy5jdXJyZW50VEgpLFg9Ty5yb3c7aWYoIShYPDApKXt2YXIgVmUsYWU9U2wodGhpcy5jdXJyZW50VEgpLHBlPXRoaXMuY3VycmVudFRILmdldEJvdW5kaW5nQ2xpZW50'@;
put 'UmVjdCgpLGJlPVg8Xy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSx4ZT1YPj1tLmNvdW50Tm90SGlkZGVuUm93SW5kZXhlcygwLDEpLV8uZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIik7YmU/VmU9Xy53dE92ZXJsYXlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5nZXRSZWxh'@;
put 'dGl2ZUNlbGxQb3NpdGlvbih0aGlzLmN1cnJlbnRUSCxPLnJvdyxPLmNvbCk6eGUmJihWZT1fLnd0T3ZlcmxheXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uKHRoaXMuY3VycmVudFRILE8ucm93LE8uY29sKSksVmV8fChWZT1fLnd0T3Zl'@;
put 'cmxheXMuaW5saW5lU3RhcnRPdmVybGF5LmdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uKHRoaXMuY3VycmVudFRILE8ucm93LE8uY29sKSksdGhpcy5jdXJyZW50Um93PXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoWCksdGhpcy5zZWxlY3RlZFJv'@;
put 'd3M9W107dmFyIFplPXRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpO3RoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkKCkmJlplJiZSbih0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlKCks'@;
put 'ZnVuY3Rpb24oZHQpe19vKGR0LmdldFRvcFN0YXJ0Q29ybmVyKCkucm93LGR0LmdldEJvdHRvbVN0YXJ0Q29ybmVyKCkucm93LGZ1bmN0aW9uKHJuKXtoLnNlbGVjdGVkUm93cy5pbmNsdWRlcyhybil8fGguc2VsZWN0ZWRSb3dzLnB1c2gocm4pfSl9KSx0aGlzLnNlbGVjdGVkUm93cy5pbmNs'@;
put 'dWRlcyh0aGlzLmN1cnJlbnRSb3cpfHwodGhpcy5zZWxlY3RlZFJvd3M9W3RoaXMuY3VycmVudFJvd10pLHRoaXMuc3RhcnRPZmZzZXQ9VmUudG9wLTYsdGhpcy5zdGFydEhlaWdodD1wYXJzZUludChwZS5oZWlnaHQsMTApLHRoaXMuaGFuZGxlLnN0eWxlLnRvcD0iIi5jb25jYXQodGhpcy5z'@;
put 'dGFydE9mZnNldCt0aGlzLnN0YXJ0SGVpZ2h0LCJweCIpLHRoaXMuaGFuZGxlLnN0eWxlW3RoaXMuaW5saW5lRGlyXT0iIi5jb25jYXQoVmUuc3RhcnQsInB4IiksdGhpcy5oYW5kbGUuc3R5bGUud2lkdGg9IiIuY29uY2F0KGFlLCJweCIpLHRoaXMuaG90LnJvb3RFbGVtZW50LmFwcGVuZENo'@;
put 'aWxkKHRoaXMuaGFuZGxlKX19fSx7a2V5OiJyZWZyZXNoSGFuZGxlUG9zaXRpb24iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5oYW5kbGUuc3R5bGUudG9wPSIiLmNvbmNhdCh0aGlzLnN0YXJ0T2Zmc2V0K3RoaXMuY3VycmVudEhlaWdodCwicHgiKX19LHtrZXk6InNldHVwR3VpZGVQb3NpdGlv'@;
put 'biIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD1wYXJzZUludChTbCh0aGlzLmhhbmRsZSksMTApLGg9cGFyc2VJbnQodGhpcy5oYW5kbGUuc3R5bGVbdGhpcy5pbmxpbmVEaXJdLDEwKStkLG09cGFyc2VJbnQodGhpcy5ob3Qudmlldy5tYXhpbXVtVmlzaWJsZUVsZW1lbnRXaWR0aCgwKSwxMCk7'@;
put 'Z2kodGhpcy5oYW5kbGUsImFjdGl2ZSIpLGdpKHRoaXMuZ3VpZGUsImFjdGl2ZSIpLHRoaXMuZ3VpZGUuc3R5bGUudG9wPXRoaXMuaGFuZGxlLnN0eWxlLnRvcCx0aGlzLmd1aWRlLnN0eWxlW3RoaXMuaW5saW5lRGlyXT0iIi5jb25jYXQoaCwicHgiKSx0aGlzLmd1aWRlLnN0eWxlLndpZHRo'@;
put 'PSIiLmNvbmNhdChtLWQsInB4IiksdGhpcy5ob3Qucm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5ndWlkZSl9fSx7a2V5OiJyZWZyZXNoR3VpZGVQb3NpdGlvbiIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmd1aWRlLnN0eWxlLnRvcD10aGlzLmhhbmRsZS5zdHlsZS50b3B9fSx7a2V5OiJo'@;
put 'aWRlSGFuZGxlQW5kR3VpZGUiLHZhbHVlOmZ1bmN0aW9uKCl7Sm8odGhpcy5oYW5kbGUsImFjdGl2ZSIpLEpvKHRoaXMuZ3VpZGUsImFjdGl2ZSIpfX0se2tleToiY2hlY2tJZlJvd0hlYWRlciIsdmFsdWU6ZnVuY3Rpb24oZCl7dmFyIGgsbTtyZXR1cm4geDQoZCxbIlRIIl0sdGhpcy5ob3Qu'@;
put 'cm9vdEVsZW1lbnQpJiYiVEJPRFkiPT09KG51bGw9PT0oaD1kLnBhcmVudE5vZGUpfHx2b2lkIDA9PT1ofHxudWxsPT09KG09aC5wYXJlbnROb2RlKXx8dm9pZCAwPT09bT92b2lkIDA6bS50YWdOYW1lKX19LHtrZXk6ImdldENsb3Nlc3RUSFBhcmVudCIsdmFsdWU6ZnVuY3Rpb24oZCl7cmV0'@;
put 'dXJuIlRBQkxFIiE9PWQudGFnTmFtZT8iVEgiPT09ZC50YWdOYW1lP2Q6dGhpcy5nZXRDbG9zZXN0VEhQYXJlbnQoZC5wYXJlbnROb2RlKTpudWxsfX0se2tleToiZ2V0QWN0dWFsUm93SGVpZ2h0Iix2YWx1ZTpmdW5jdGlvbihkKXt2YXIgaD10aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLmdl'@;
put 'dFJvd0hlaWdodChkKTtyZXR1cm4gdm9pZCAwIT09aCYmdGhpcy5uZXdTaXplPGg/aDp0aGlzLm5ld1NpemV9fSx7a2V5OiJvbk1vdXNlT3ZlciIsdmFsdWU6ZnVuY3Rpb24oZCl7aWYoIUFZKGQudGFyZ2V0KSYmdGhpcy5jaGVja0lmUm93SGVhZGVyKGQudGFyZ2V0KSl7dmFyIGg9dGhpcy5n'@;
put 'ZXRDbG9zZXN0VEhQYXJlbnQoZC50YXJnZXQpO2gmJih0aGlzLnByZXNzZWR8fHRoaXMuc2V0dXBIYW5kbGVQb3NpdGlvbihoKSl9fX0se2tleToiYWZ0ZXJNb3VzZURvd25UaW1lb3V0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXMsaD1mdW5jdGlvbigpe2QuaG90LmZvcmNlRnVsbFJl'@;
put 'bmRlcj0hMCxkLmhvdC52aWV3LnJlbmRlcigpLGQuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCEwKX0sbT1mdW5jdGlvbihYLGFlKXt2YXIgcGU9ZC5ob3QucnVuSG9va3MoImJlZm9yZVJvd1Jlc2l6ZSIsZC5nZXRBY3R1YWxSb3dIZWlnaHQoWCksWCwhMCk7dm9pZCAwIT09cGUmJihk'@;
put 'Lm5ld1NpemU9cGUpLGQuc2V0TWFudWFsU2l6ZShYLGQubmV3U2l6ZSksZC5ob3QucnVuSG9va3MoImFmdGVyUm93UmVzaXplIixkLmdldEFjdHVhbFJvd0hlaWdodChYKSxYLCEwKSxhZSYmaCgpfTt0aGlzLmRibGNsaWNrPj0yJiYodGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoPjE/KFJuKHRo'@;
put 'aXMuc2VsZWN0ZWRSb3dzLGZ1bmN0aW9uKE8pe20oTyl9KSxoKCkpOlJuKHRoaXMuc2VsZWN0ZWRSb3dzLGZ1bmN0aW9uKE8pe20oTywhMCl9KSksdGhpcy5kYmxjbGljaz0wLHRoaXMuYXV0b3Jlc2l6ZVRpbWVvdXQ9bnVsbH19LHtrZXk6Im9uTW91c2VEb3duIix2YWx1ZTpmdW5jdGlvbihk'@;
put 'KXt2YXIgaD10aGlzO1lvKGQudGFyZ2V0LCJtYW51YWxSb3dSZXNpemVyIikmJih0aGlzLnNldHVwSGFuZGxlUG9zaXRpb24odGhpcy5jdXJyZW50VEgpLHRoaXMuc2V0dXBHdWlkZVBvc2l0aW9uKCksdGhpcy5wcmVzc2VkPSEwLG51bGw9PT10aGlzLmF1dG9yZXNpemVUaW1lb3V0JiYodGhp'@;
put 'cy5hdXRvcmVzaXplVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIGguYWZ0ZXJNb3VzZURvd25UaW1lb3V0KCl9LDUwMCksdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCh0aGlzLmF1dG9yZXNpemVUaW1lb3V0KSksdGhpcy5kYmxjbGljays9MSx0aGlzLnN0YXJ0WT1kLnBh'@;
put 'Z2VZLHRoaXMubmV3U2l6ZT10aGlzLnN0YXJ0SGVpZ2h0KX19LHtrZXk6Im9uTW91c2VNb3ZlIix2YWx1ZTpmdW5jdGlvbihkKXt2YXIgaD10aGlzO3RoaXMucHJlc3NlZCYmKHRoaXMuY3VycmVudEhlaWdodD10aGlzLnN0YXJ0SGVpZ2h0KyhkLnBhZ2VZLXRoaXMuc3RhcnRZKSxSbih0aGlz'@;
put 'LnNlbGVjdGVkUm93cyxmdW5jdGlvbihtKXtoLm5ld1NpemU9aC5zZXRNYW51YWxTaXplKG0saC5jdXJyZW50SGVpZ2h0KX0pLHRoaXMucmVmcmVzaEhhbmRsZVBvc2l0aW9uKCksdGhpcy5yZWZyZXNoR3VpZGVQb3NpdGlvbigpKX19LHtrZXk6Im9uTW91c2VVcCIsdmFsdWU6ZnVuY3Rpb24o'@;
put 'KXt2YXIgZD10aGlzLGg9ZnVuY3Rpb24oKXtkLmhvdC5mb3JjZUZ1bGxSZW5kZXI9ITAsZC5ob3Qudmlldy5yZW5kZXIoKSxkLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSghMCl9LG09ZnVuY3Rpb24oWCxhZSl7ZC5ob3QucnVuSG9va3MoImJlZm9yZVJvd1Jlc2l6ZSIsZC5nZXRBY3R1'@;
put 'YWxSb3dIZWlnaHQoWCksWCwhMSksYWUmJmgoKSxkLnNhdmVNYW51YWxSb3dIZWlnaHRzKCksZC5ob3QucnVuSG9va3MoImFmdGVyUm93UmVzaXplIixkLmdldEFjdHVhbFJvd0hlaWdodChYKSxYLCExKX07dGhpcy5wcmVzc2VkJiYodGhpcy5oaWRlSGFuZGxlQW5kR3VpZGUoKSx0aGlzLnBy'@;
put 'ZXNzZWQ9ITEsdGhpcy5uZXdTaXplIT09dGhpcy5zdGFydEhlaWdodCYmKHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aD4xPyhSbih0aGlzLnNlbGVjdGVkUm93cyxmdW5jdGlvbihPKXttKE8pfSksaCgpKTpSbih0aGlzLnNlbGVjdGVkUm93cyxmdW5jdGlvbihPKXttKE8sITApfSkpLHRoaXMu'@;
put 'c2V0dXBIYW5kbGVQb3NpdGlvbih0aGlzLmN1cnJlbnRUSCkpfX0se2tleToiYmluZEV2ZW50cyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLGg9dGhpcy5ob3QsbT1oLnJvb3RFbGVtZW50LF89aC5yb290V2luZG93O3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobSwi'@;
put 'bW91c2VvdmVyIixmdW5jdGlvbihPKXtyZXR1cm4gZC5vbk1vdXNlT3ZlcihPKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobSwibW91c2Vkb3duIixmdW5jdGlvbihPKXtyZXR1cm4gZC5vbk1vdXNlRG93bihPKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlz'@;
put 'dGVuZXIoXywibW91c2Vtb3ZlIixmdW5jdGlvbihPKXtyZXR1cm4gZC5vbk1vdXNlTW92ZShPKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoXywibW91c2V1cCIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbk1vdXNlVXAoKX0pfX0se2tleToib25Nb2RpZnlSb3dIZWlnaHQi'@;
put 'LHZhbHVlOmZ1bmN0aW9uKGQsaCl7dmFyIG09ZDtpZih0aGlzLmVuYWJsZWQpe3ZhciBfPXRoaXMuaG90LnRvUGh5c2ljYWxSb3coaCksTz10aGlzLnJvd0hlaWdodHNNYXAuZ2V0VmFsdWVBdEluZGV4KF8pO3RoaXMuaG90LmdldFNldHRpbmdzKClbRVBdJiZPJiYobT1PKX1yZXR1cm4gbX19'@;
put 'LHtrZXk6Im9uTWFwSW5pdCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLGg9SVguZ2V0KHRoaXMpLG09dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtFUF0sXz10aGlzLmxvYWRNYW51YWxSb3dIZWlnaHRzKCk7dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oZnVuY3Rpb24oKXt0eXBlb2YgXzwi'@;
put 'dSI/Xy5mb3JFYWNoKGZ1bmN0aW9uKE8sWCl7ZC5yb3dIZWlnaHRzTWFwLnNldFZhbHVlQXRJbmRleChYLE8pfSk6QXJyYXkuaXNBcnJheShtKT8obS5mb3JFYWNoKGZ1bmN0aW9uKE8sWCl7ZC5yb3dIZWlnaHRzTWFwLnNldFZhbHVlQXRJbmRleChYLE8pfSksaC5jb25maWc9bSk6ITA9PT1t'@;
put 'JiZBcnJheS5pc0FycmF5KGguY29uZmlnKSYmaC5jb25maWcuZm9yRWFjaChmdW5jdGlvbihPLFgpe2Qucm93SGVpZ2h0c01hcC5zZXRWYWx1ZUF0SW5kZXgoWCxPKX0pfSwhMCl9fSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbigpe2Q2KEIzKGEucHJvdG90eXBlKSwiZGVzdHJveSIs'@;
put 'dGhpcykuY2FsbCh0aGlzKX19XSxbe2tleToiUExVR0lOX0tFWSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEVQfX0se2tleToiUExVR0lOX1BSSU9SSVRZIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMzB9fV0pLGF9KEdhKTtmdW5jdGlvbiB3RShsKXtyZXR1cm4od0U9ImZ1bmN0aW9uIj09dHlw'@;
put 'ZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5'@;
put 'cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiB4UChsLGMpe3JldHVybiBjfHwoYz1sLnNsaWNlKDApKSxPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGwse3Jhdzp7dmFsdWU6T2JqZWN0LmZyZWV6ZShjKX19KSl9ZnVuY3Rpb24gZWdlKGwsYyl7Zm9yKHZh'@;
put 'ciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxieXQoZi5rZXkpLGYpfX1mdW5jdGlvbiBieXQobCl7'@;
put 'dmFyIGM9ZnVuY3Rpb24gX3l0KGwsYyl7aWYoIm9iamVjdCIhPT13RShsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT13RShmKSlyZXR1cm4gZjt0'@;
put 'aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09d0UoYyk/YzpTdHJpbmcoYyl9dmFyIHd5dD1mdW5j'@;
put 'dGlvbigpe2Z1bmN0aW9uIGwoYyxhLGYsZCxoLG0peyhmdW5jdGlvbiB2eXQobCxjKXtpZighKGwgaW5zdGFuY2VvZiBjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsbCksdGhpcy5yb3c9Yyx0aGlzLmNvbD1hLHRoaXMu'@;
put 'cm93c3Bhbj1mLHRoaXMuY29sc3Bhbj1kLHRoaXMucmVtb3ZlZD0hMSx0aGlzLmNlbGxDb29yZHNGYWN0b3J5PWgsdGhpcy5jZWxsUmFuZ2VGYWN0b3J5PW19cmV0dXJuIGZ1bmN0aW9uIHl5dChsLGMsYSl7YyYmZWdlKGwucHJvdG90eXBlLGMpLGEmJmVnZShsLGEpLE9iamVjdC5kZWZpbmVQ'@;
put 'cm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShsLFt7a2V5OiJub3JtYWxpemUiLHZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBmPWEuY291bnRSb3dzKCksZD1hLmNvdW50Q29scygpO3RoaXMucm93PDA/dGhpcy5yb3c9MDp0aGlzLnJvdz5mLTEmJih0aGlzLnJvdz1mLTEpLHRo'@;
put 'aXMuY29sPDA/dGhpcy5jb2w9MDp0aGlzLmNvbD5kLTEmJih0aGlzLmNvbD1kLTEpLHRoaXMucm93K3RoaXMucm93c3Bhbj5mLTEmJih0aGlzLnJvd3NwYW49Zi10aGlzLnJvdyksdGhpcy5jb2wrdGhpcy5jb2xzcGFuPmQtMSYmKHRoaXMuY29sc3Bhbj1kLXRoaXMuY29sKX19LHtrZXk6Imlu'@;
put 'Y2x1ZGVzIix2YWx1ZTpmdW5jdGlvbihhLGYpe3JldHVybiB0aGlzLnJvdzw9YSYmdGhpcy5jb2w8PWYmJnRoaXMucm93K3RoaXMucm93c3Bhbi0xPj1hJiZ0aGlzLmNvbCt0aGlzLmNvbHNwYW4tMT49Zn19LHtrZXk6ImluY2x1ZGVzSG9yaXpvbnRhbGx5Iix2YWx1ZTpmdW5jdGlvbihhKXty'@;
put 'ZXR1cm4gdGhpcy5jb2w8PWEmJnRoaXMuY29sK3RoaXMuY29sc3Bhbi0xPj1hfX0se2tleToiaW5jbHVkZXNWZXJ0aWNhbGx5Iix2YWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5yb3c8PWEmJnRoaXMucm93K3RoaXMucm93c3Bhbi0xPj1hfX0se2tleToic2hpZnQiLHZhbHVlOmZ1bmN0'@;
put 'aW9uKGEsZil7dmFyIGQ9YVswXXx8YVsxXSxoPWYrTWF0aC5hYnMoYVswXXx8YVsxXSktMSxtPWFbMF0/ImNvbHNwYW4iOiJyb3dzcGFuIixfPWFbMF0/ImNvbCI6InJvdyIsTz1NYXRoLm1pbihmLGgpLFg9TWF0aC5tYXgoZixoKSxhZT10aGlzW19dLHBlPXRoaXNbX10rdGhpc1ttXS0xO2lm'@;
put 'KGFlPj1mJiYodGhpc1tfXSs9ZCksZD4wKWY8PXBlJiZmPmFlJiYodGhpc1ttXSs9ZCk7ZWxzZSBpZihkPDApe2lmKE88PWFlJiZYPj1wZSlyZXR1cm4gdGhpcy5yZW1vdmVkPSEwLCExO2lmKGFlPj1PJiZhZTw9WCl7dmFyIGJlPVgtYWUrMSx4ZT1NYXRoLmFicyhkKS1iZTt0aGlzW19dLT14'@;
put 'ZStkLHRoaXNbbV0tPWJlfWVsc2UgYWU8PU8mJnBlPj1YP3RoaXNbbV0rPWQ6YWU8PU8mJnBlPj1PJiZwZTxYJiYodGhpc1ttXS09cGUtTysxKX1yZXR1cm4hMH19LHtrZXk6ImlzRmFydGhlciIsdmFsdWU6ZnVuY3Rpb24oYSxmKXtyZXR1cm4hYXx8KCJkb3duIj09PWY/YS5yb3crYS5yb3dz'@;
put 'cGFuLTE8dGhpcy5yb3crdGhpcy5yb3dzcGFuLTE6InVwIj09PWY/YS5yb3c+dGhpcy5yb3c6InJpZ2h0Ij09PWY/YS5jb2wrYS5jb2xzcGFuLTE8dGhpcy5jb2wrdGhpcy5jb2xzcGFuLTE6ImxlZnQiPT09Zj9hLmNvbD50aGlzLmNvbDpudWxsKX19LHtrZXk6ImdldExhc3RSb3ciLHZhbHVl'@;
put 'OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm93K3RoaXMucm93c3Bhbi0xfX0se2tleToiZ2V0TGFzdENvbHVtbiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb2wrdGhpcy5jb2xzcGFuLTF9fSx7a2V5OiJnZXRSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jZWxs'@;
put 'UmFuZ2VGYWN0b3J5KHRoaXMuY2VsbENvb3Jkc0ZhY3RvcnkodGhpcy5yb3csdGhpcy5jb2wpLHRoaXMuY2VsbENvb3Jkc0ZhY3RvcnkodGhpcy5yb3csdGhpcy5jb2wpLHRoaXMuY2VsbENvb3Jkc0ZhY3RvcnkodGhpcy5nZXRMYXN0Um93KCksdGhpcy5nZXRMYXN0Q29sdW1uKCkpKX19XSxb'@;
put 'e2tleToiTkVHQVRJVkVfVkFMVUVTX1dBUk5JTkciLHZhbHVlOmZ1bmN0aW9uKGEpe3JldHVybiBPbChxbWV8fChxbWU9eFAoWyJUaGUgbWVyZ2VkIGNlbGwgZGVjbGFyZWQgd2l0aCB7cm93OiAiLCIsIGNvbDogIiwiLCBcbiAgICAgIHJvd3NwYW46ICIsIiwgY29sc3BhbjogIiwifSBjb250'@;
put 'YWlucyBuZWdhdGl2ZSB2YWx1ZXMsIHdoaWNoIGlzIFxuICAgICAgbm90IHN1cHBvcnRlZC4gSXQgd2lsbCBub3QgYmUgYWRkZWQgdG8gdGhlIGNvbGxlY3Rpb24uIl0sWyJUaGUgbWVyZ2VkIGNlbGwgZGVjbGFyZWQgd2l0aCB7cm93OiAiLCIsIGNvbDogIiwiLFxceDIwXG4gICAgICByb3dz'@;
put 'cGFuOiAiLCIsIGNvbHNwYW46ICIsIn0gY29udGFpbnMgbmVnYXRpdmUgdmFsdWVzLCB3aGljaCBpc1xceDIwXG4gICAgICBub3Qgc3VwcG9ydGVkLiBJdCB3aWxsIG5vdCBiZSBhZGRlZCB0byB0aGUgY29sbGVjdGlvbi4iXSkpLGEucm93LGEuY29sLGEucm93c3BhbixhLmNvbHNwYW4pfX0s'@;
put 'e2tleToiSVNfT1VUX09GX0JPVU5EU19XQVJOSU5HIix2YWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gT2woWG1lfHwoWG1lPXhQKFsiVGhlIG1lcmdlZCBjZWxsIGRlY2xhcmVkIGF0IFsiLCIsICIsIl0gaXMgcG9zaXRpb25lZCBcbiAgICAgIChvciBwb3NpdGlvbmVkIHBhcnRpYWxseSkgb3V0'@;
put 'c2lkZSBvZiB0aGUgdGFibGUgcmFuZ2UuIEl0IHdhcyBub3QgYWRkZWQgdG8gdGhlIHRhYmxlLCBwbGVhc2UgZml4IHlvdXIgc2V0dXAuIl0sWyJUaGUgbWVyZ2VkIGNlbGwgZGVjbGFyZWQgYXQgWyIsIiwgIiwiXSBpcyBwb3NpdGlvbmVkXFx4MjBcbiAgICAgIChvciBwb3NpdGlvbmVkIHBh'@;
put 'cnRpYWxseSkgb3V0c2lkZSBvZiB0aGUgdGFibGUgcmFuZ2UuIEl0IHdhcyBub3QgYWRkZWQgdG8gdGhlIHRhYmxlLCBwbGVhc2UgZml4IHlvdXIgc2V0dXAuIl0pKSxhLnJvdyxhLmNvbCl9fSx7a2V5OiJJU19TSU5HTEVfQ0VMTCIsdmFsdWU6ZnVuY3Rpb24oYSl7cmV0dXJuIE9sKEptZXx8'@;
put 'KEptZT14UChbIlRoZSBtZXJnZWQgY2VsbCBkZWNsYXJlZCBhdCBbIiwiLCAiLCddIGhhcyBib3RoICJyb3dzcGFuIiBcbiAgICAgIGFuZCAiY29sc3BhbiIgZGVjbGFyZWQgYXMgIjEiLCB3aGljaCBtYWtlcyBpdCBhIHNpbmdsZSBjZWxsLiBJdCBjYW5ub3QgYmUgYWRkZWQgdG8gdGhlIGNv'@;
put 'bGxlY3Rpb24uJ10sWyJUaGUgbWVyZ2VkIGNlbGwgZGVjbGFyZWQgYXQgWyIsIiwgIiwnXSBoYXMgYm90aCAicm93c3BhbiJcXHgyMFxuICAgICAgYW5kICJjb2xzcGFuIiBkZWNsYXJlZCBhcyAiMSIsIHdoaWNoIG1ha2VzIGl0IGEgc2luZ2xlIGNlbGwuIEl0IGNhbm5vdCBiZSBhZGRlZCB0'@;
put 'byB0aGUgY29sbGVjdGlvbi4nXSkpLGEucm93LGEuY29sKX19LHtrZXk6IlpFUk9fU1BBTl9XQVJOSU5HIix2YWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gT2woUW1lfHwoUW1lPXhQKFsiVGhlIG1lcmdlZCBjZWxsIGRlY2xhcmVkIGF0IFsiLCIsICIsJ10gaGFzICJyb3dzcGFuIiBcbiAgICAg'@;
put 'IG9yICJjb2xzcGFuIiBkZWNsYXJlZCBhcyAiMCIsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQuIEl0IGNhbm5vdCBiZSBhZGRlZCB0byB0aGUgY29sbGVjdGlvbi4nXSxbIlRoZSBtZXJnZWQgY2VsbCBkZWNsYXJlZCBhdCBbIiwiLCAiLCddIGhhcyAicm93c3BhbiJcXHgyMFxuICAgICAgb3Ig'@;
put 'ImNvbHNwYW4iIGRlY2xhcmVkIGFzICIwIiwgd2hpY2ggaXMgbm90IHN1cHBvcnRlZC4gSXQgY2Fubm90IGJlIGFkZGVkIHRvIHRoZSBjb2xsZWN0aW9uLiddKSksYS5yb3csYS5jb2wpfX0se2tleToiY29udGFpbnNOZWdhdGl2ZVZhbHVlcyIsdmFsdWU6ZnVuY3Rpb24oYSl7cmV0dXJuIGEu'@;
put 'cm93PDB8fGEuY29sPDB8fGEucm93c3BhbjwwfHxhLmNvbHNwYW48MH19LHtrZXk6ImlzU2luZ2xlQ2VsbCIsdmFsdWU6ZnVuY3Rpb24oYSl7cmV0dXJuIDE9PT1hLmNvbHNwYW4mJjE9PT1hLnJvd3NwYW59fSx7a2V5OiJjb250YWluc1plcm9TcGFuIix2YWx1ZTpmdW5jdGlvbihhKXtyZXR1'@;
put 'cm4gMD09PWEuY29sc3Bhbnx8MD09PWEucm93c3Bhbn19LHtrZXk6ImlzT3V0T2ZCb3VuZHMiLHZhbHVlOmZ1bmN0aW9uKGEsZixkKXtyZXR1cm4gYS5yb3c8MHx8YS5jb2w8MHx8YS5yb3c+PWZ8fGEucm93K2Eucm93c3Bhbi0xPj1mfHxhLmNvbD49ZHx8YS5jb2wrYS5jb2xzcGFuLTE+PWR9'@;
put 'fV0pLGx9KCk7Y29uc3QgWGg9d3l0O2Z1bmN0aW9uIFJYKGwsYyxhLGYpe2M/Yy5yb3c9PT1hJiZjLmNvbD09PWY/KGwuc2V0QXR0cmlidXRlKCJyb3dzcGFuIixjLnJvd3NwYW4udG9TdHJpbmcoKSksbC5zZXRBdHRyaWJ1dGUoImNvbHNwYW4iLGMuY29sc3Bhbi50b1N0cmluZygpKSk6KGwu'@;
put 'cmVtb3ZlQXR0cmlidXRlKCJyb3dzcGFuIiksbC5yZW1vdmVBdHRyaWJ1dGUoImNvbHNwYW4iKSxsLnN0eWxlLmRpc3BsYXk9Im5vbmUiKToobC5yZW1vdmVBdHRyaWJ1dGUoInJvd3NwYW4iKSxsLnJlbW92ZUF0dHJpYnV0ZSgiY29sc3BhbiIpLGwuc3R5bGUuZGlzcGxheT0iIil9ZnVuY3Rp'@;
put 'b24gQ0UobCl7cmV0dXJuKENFPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3Ry'@;
put 'dWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9dmFyIHRnZTtmdW5jdGlvbiBuZ2UobCl7cmV0dXJuIGZ1bmN0aW9uIEV5dChsKXtpZihBcnJheS5pc0FycmF5KGwpKXJldHVybiBMWChsKX0obCl8fGZ1bmN0aW9uIGt5dChsKXtpZih0'@;
put 'eXBlb2YgU3ltYm9sPCJ1IiYmbnVsbCE9bFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1sWyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20obCl9KGwpfHxmdW5jdGlvbiBNeXQobCxjKXtpZihsKXtpZigic3RyaW5nIj09dHlwZW9mIGwpcmV0dXJuIExYKGwsYyk7dmFyIGE9T2JqZWN0'@;
put 'LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGwpLnNsaWNlKDgsLTEpO2lmKCJPYmplY3QiPT09YSYmbC5jb25zdHJ1Y3RvciYmKGE9bC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PWF8fCJTZXQiPT09YSlyZXR1cm4gQXJyYXkuZnJvbShsKTtpZigiQXJndW1lbnRzIj09PWF8fC9eKD86VWl8'@;
put 'SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KGEpKXJldHVybiBMWChsLGMpfX0obCl8fGZ1bmN0aW9uIFN5dCgpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUg'@;
put 'aXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIExYKGwsYyl7KG51bGw9PWN8fGM+bC5sZW5ndGgpJiYoYz1sLmxlbmd0aCk7Zm9yKHZhciBhPTAsZj1uZXcgQXJyYXkoYyk7YTxjO2ErKylmW2Fd'@;
put 'PWxbYV07cmV0dXJuIGZ9ZnVuY3Rpb24gcmdlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJv'@;
put 'cGVydHkobCxUeXQoZi5rZXkpLGYpfX1mdW5jdGlvbiBUeXQobCl7dmFyIGM9ZnVuY3Rpb24gT3l0KGwsYyl7aWYoIm9iamVjdCIhPT1DRShsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJk'@;
put 'ZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1DRShmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJz'@;
put 'eW1ib2wiPT09Q0UoYyk/YzpTdHJpbmcoYyl9dmFyIER5dD1mdW5jdGlvbigpe2Z1bmN0aW9uIGwoYyl7KGZ1bmN0aW9uIHh5dChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyxs'@;
put 'KSx0aGlzLnBsdWdpbj1jLHRoaXMubWVyZ2VkQ2VsbHM9W10sdGhpcy5ob3Q9Yy5ob3R9cmV0dXJuIGZ1bmN0aW9uIEF5dChsLGMsYSl7YyYmcmdlKGwucHJvdG90eXBlLGMpLGEmJnJnZShsLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShs'@;
put 'LFt7a2V5OiJnZXQiLHZhbHVlOmZ1bmN0aW9uKGEsZil7dmFyIGg9ITE7cmV0dXJuIFJuKHRoaXMubWVyZ2VkQ2VsbHMsZnVuY3Rpb24obSl7cmV0dXJuIShtLnJvdzw9YSYmbS5yb3crbS5yb3dzcGFuLTE+PWEmJm0uY29sPD1mJiZtLmNvbCttLmNvbHNwYW4tMT49ZiYmKGg9bSwxKSl9KSxo'@;
put 'fX0se2tleToiZ2V0QnlSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGQ9ITE7cmV0dXJuIFJuKHRoaXMubWVyZ2VkQ2VsbHMsZnVuY3Rpb24oaCl7cmV0dXJuIShoLnJvdzw9YS5mcm9tLnJvdyYmaC5yb3craC5yb3dzcGFuLTE+PWEudG8ucm93JiZoLmNvbDw9YS5mcm9tLmNvbCYmaC5j'@;
put 'b2wraC5jb2xzcGFuLTE+PWEudG8uY29sKXx8KGQ9aCl9KSxkfX0se2tleToiZ2V0V2l0aGluUmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBmPXRoaXMsZD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLGg9dGhpcy5tZXJnZWRDZWxs'@;
put 'cyxtPVtdLF89YTtpZighXy5pbmNsdWRlc1JhbmdlKXt2YXIgTz10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhfLmZyb20ucm93LF8uZnJvbS5jb2wpLFg9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoXy50by5yb3csXy50by5jb2wpO189dGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZShP'@;
put 'LE8sWCl9cmV0dXJuIFJuKGgsZnVuY3Rpb24oYWUpe3ZhciBwZT1mLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhZS5yb3csYWUuY29sKSxiZT1mLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhZS5yb3crYWUucm93c3Bhbi0xLGFlLmNvbCthZS5jb2xzcGFuLTEpLHhlPWYuaG90Ll9jcmVhdGVDZWxs'@;
put 'UmFuZ2UocGUscGUsYmUpO2Q/Xy5vdmVybGFwcyh4ZSkmJm0ucHVzaChhZSk6Xy5pbmNsdWRlc1JhbmdlKHhlKSYmbS5wdXNoKGFlKX0pLCEhbS5sZW5ndGgmJm19fSx7a2V5OiJhZGQiLHZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBmPXRoaXMubWVyZ2VkQ2VsbHMsZD1hLnJvdyxoPWEuY29sLE89'@;
put 'bmV3IFhoKGQsaCxhLnJvd3NwYW4sYS5jb2xzcGFuLHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzLHRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UpLFg9dGhpcy5nZXQoZCxoKSxhZT10aGlzLmlzT3ZlcmxhcHBpbmcoTyk7cmV0dXJuIFh8fGFlPyhXbChsLklTX09WRVJMQVBQSU5HX1dBUk5J'@;
put 'TkcoTykpLCExKToodGhpcy5ob3QmJk8ubm9ybWFsaXplKHRoaXMuaG90KSxmLnB1c2goTyksTyl9fSx7a2V5OiJyZW1vdmUiLHZhbHVlOmZ1bmN0aW9uKGEsZil7dmFyIGQ9dGhpcy5tZXJnZWRDZWxscyxoPXRoaXMuZ2V0KGEsZiksbT1oP3RoaXMubWVyZ2VkQ2VsbHMuaW5kZXhPZihoKTot'@;
put 'MTtyZXR1cm4hKCFofHwtMT09PW0pJiYoZC5zcGxpY2UobSwxKSxoKX19LHtrZXk6ImNsZWFyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMsZD1bXSxoPVtdO1JuKHRoaXMubWVyZ2VkQ2VsbHMsZnVuY3Rpb24obSl7dmFyIF89YS5ob3QuZ2V0Q2VsbChtLnJvdyxtLmNvbCk7XyYmZC5w'@;
put 'dXNoKFtfLGEuZ2V0KG0ucm93LG0uY29sKSxtLnJvdyxtLmNvbF0pfSksdGhpcy5tZXJnZWRDZWxscy5sZW5ndGg9MCxSbihkLGZ1bmN0aW9uKG0sXyl7X28oMCxtLnJvd3NwYW4tMSxmdW5jdGlvbihPKXtfbygwLG0uY29sc3Bhbi0xLGZ1bmN0aW9uKFgpe2lmKDAhPT1YfHwwIT09Tyl7dmFy'@;
put 'IGFlPWEuaG90LmdldENlbGwobS5yb3crTyxtLmNvbCtYKTthZSYmaC5wdXNoKFthZSxudWxsLG51bGwsbnVsbF0pfX0pfSksZFtfXVsxXT1udWxsfSksUm4oZCxmdW5jdGlvbihtKXtSWC5hcHBseSh2b2lkIDAsbmdlKG0pKX0pLFJuKGgsZnVuY3Rpb24obSl7UlguYXBwbHkodm9pZCAwLG5n'@;
put 'ZShtKSl9KX19LHtrZXk6ImlzT3ZlcmxhcHBpbmciLHZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBmPXRoaXMsZD10aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKDAsMCksdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYS5yb3csYS5jb2wpLHRoaXMu'@;
put 'aG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEucm93K2Eucm93c3Bhbi0xLGEuY29sK2EuY29sc3Bhbi0xKSksaD0hMTtyZXR1cm4gUm4odGhpcy5tZXJnZWRDZWxscyxmdW5jdGlvbihtKXtyZXR1cm4hZi5ob3QuX2NyZWF0ZUNlbGxSYW5nZShmLmhvdC5fY3JlYXRlQ2VsbENvb3JkcygwLDApLGYu'@;
put 'aG90Ll9jcmVhdGVDZWxsQ29vcmRzKG0ucm93LG0uY29sKSxmLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhtLnJvdyttLnJvd3NwYW4tMSxtLmNvbCttLmNvbHNwYW4tMSkpLm92ZXJsYXBzKGQpfHwoaD0hMCwhMSl9KSxofX0se2tleToiaXNGaXJzdFJlbmRlcmFibGVNZXJnZWRDZWxsIix2YWx1'@;
put 'ZTpmdW5jdGlvbihhLGYpe3ZhciBkPXRoaXMuZ2V0KGEsZik7cmV0dXJuIGQmJnRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChkLnJvdywxKT09PWEmJnRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChkLmNv'@;
put 'bCwxKT09PWZ9fSx7a2V5OiJnZXRGaXJzdFJlbmRlcmFibGVDb29yZHMiLHZhbHVlOmZ1bmN0aW9uKGEsZil7dmFyIGQ9dGhpcy5nZXQoYSxmKTtpZighZHx8dGhpcy5pc0ZpcnN0UmVuZGVyYWJsZU1lcmdlZENlbGwoYSxmKSlyZXR1cm4gdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYSxm'@;
put 'KTt2YXIgaD10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZC5yb3csMSksbT10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZC5jb2wsMSk7cmV0dXJuIHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGgs'@;
put 'bSl9fSx7a2V5OiJzaGlmdENvbGxlY3Rpb25zIix2YWx1ZTpmdW5jdGlvbihhLGYsZCl7dmFyIGg9dGhpcyxtPVswLDBdO3N3aXRjaChhKXtjYXNlInJpZ2h0IjptWzBdKz1kO2JyZWFrO2Nhc2UibGVmdCI6bVswXS09ZDticmVhaztjYXNlImRvd24iOm1bMV0rPWQ7YnJlYWs7Y2FzZSJ1cCI6'@;
put 'bVsxXS09ZH1Sbih0aGlzLm1lcmdlZENlbGxzLGZ1bmN0aW9uKF8pe18uc2hpZnQobSxmKX0pLHJSKHRoaXMubWVyZ2VkQ2VsbHMubGVuZ3RoLTEsMCxmdW5jdGlvbihfKXt2YXIgTz1oLm1lcmdlZENlbGxzW19dO08mJk8ucmVtb3ZlZCYmaC5tZXJnZWRDZWxscy5zcGxpY2UoaC5tZXJnZWRD'@;
put 'ZWxscy5pbmRleE9mKE8pLDEpfSl9fV0sW3trZXk6IklTX09WRVJMQVBQSU5HX1dBUk5JTkciLHZhbHVlOmZ1bmN0aW9uKGEpe3JldHVybiBPbCh0Z2V8fCh0Z2U9ZnVuY3Rpb24gQ3l0KGwsYyl7cmV0dXJuIGN8fChjPWwuc2xpY2UoMCkpLE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVBy'@;
put 'b3BlcnRpZXMobCx7cmF3Ont2YWx1ZTpPYmplY3QuZnJlZXplKGMpfX0pKX0oWyJUaGUgbWVyZ2VkIGNlbGwgZGVjbGFyZWQgYXQgWyIsIiwgIiwiXSwgb3ZlcmxhcHMgXG4gICAgICB3aXRoIHRoZSBvdGhlciBkZWNsYXJlZCBtZXJnZWQgY2VsbC4gVGhlIG92ZXJsYXBwaW5nIG1lcmdlZCBj'@;
put 'ZWxsIHdhcyBub3QgYWRkZWQgdG8gdGhlIHRhYmxlLCBwbGVhc2UgXG4gICAgICBmaXggeW91ciBzZXR1cC4iXSxbIlRoZSBtZXJnZWQgY2VsbCBkZWNsYXJlZCBhdCBbIiwiLCAiLCJdLCBvdmVybGFwc1xceDIwXG4gICAgICB3aXRoIHRoZSBvdGhlciBkZWNsYXJlZCBtZXJnZWQgY2VsbC4g'@;
put 'VGhlIG92ZXJsYXBwaW5nIG1lcmdlZCBjZWxsIHdhcyBub3QgYWRkZWQgdG8gdGhlIHRhYmxlLCBwbGVhc2VcXHgyMFxuICAgICAgZml4IHlvdXIgc2V0dXAuIl0pKSxhLnJvdyxhLmNvbCl9fV0pLGx9KCk7Y29uc3QgSXl0PUR5dDtmdW5jdGlvbiBTRShsKXtyZXR1cm4oU0U9ImZ1bmN0aW9u'@;
put 'Ij09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5w'@;
put 'cm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiBoNihsLGMpe3JldHVybiBmdW5jdGlvbiBGeXQobCl7aWYoQXJyYXkuaXNBcnJheShsKSlyZXR1cm4gbH0obCl8fGZ1bmN0aW9uIFB5dChsLGMpe3ZhciBhPW51bGw9PWw/bnVsbDp0eXBlb2YgU3ltYm9sPCJ1IiYmbFtT'@;
put 'eW1ib2wuaXRlcmF0b3JdfHxsWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9YSl7dmFyIGYsZCxoLG0sXz1bXSxPPSEwLFg9ITE7dHJ5e2lmKGg9KGE9YS5jYWxsKGwpKS5uZXh0LDA9PT1jKXtpZihPYmplY3QoYSkhPT1hKXJldHVybjtPPSExfWVsc2UgZm9yKDshKE89KGY9aC5jYWxsKGEpKS5k'@;
put 'b25lKSYmKF8ucHVzaChmLnZhbHVlKSxfLmxlbmd0aCE9PWMpO089ITApO31jYXRjaChhZSl7WD0hMCxkPWFlfWZpbmFsbHl7dHJ5e2lmKCFPJiZudWxsIT1hLnJldHVybiYmKG09YS5yZXR1cm4oKSxPYmplY3QobSkhPT1tKSlyZXR1cm59ZmluYWxseXtpZihYKXRocm93IGR9fXJldHVybiBf'@;
put 'fX0obCxjKXx8ZnVuY3Rpb24gTHl0KGwsYyl7aWYobCl7aWYoInN0cmluZyI9PXR5cGVvZiBsKXJldHVybiBpZ2UobCxjKTt2YXIgYT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobCkuc2xpY2UoOCwtMSk7aWYoIk9iamVjdCI9PT1hJiZsLmNvbnN0cnVjdG9yJiYoYT1sLmNvbnN0'@;
put 'cnVjdG9yLm5hbWUpLCJNYXAiPT09YXx8IlNldCI9PT1hKXJldHVybiBBcnJheS5mcm9tKGwpO2lmKCJBcmd1bWVudHMiPT09YXx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QoYSkpcmV0dXJuIGlnZShsLGMpfX0obCxjKXx8ZnVuY3Rpb24gUnl0KCl7'@;
put 'dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1m'@;
put 'dW5jdGlvbiBpZ2UobCxjKXsobnVsbD09Y3x8Yz5sLmxlbmd0aCkmJihjPWwubGVuZ3RoKTtmb3IodmFyIGE9MCxmPW5ldyBBcnJheShjKTthPGM7YSsrKWZbYV09bFthXTtyZXR1cm4gZn1mdW5jdGlvbiBvZ2UobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtm'@;
put 'LmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLFZ5dChmLmtleSksZil9fWZ1bmN0aW9uIFZ5dChsKXt2YXIgYz1mdW5jdGlvbiBCeXQobCxjKXtpZigib2JqZWN0'@;
put 'IiE9PVNFKGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PVNFKGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUg'@;
put 'bXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1TRShjKT9jOlN0cmluZyhjKX12YXIganl0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbChjKXsoZnVuY3Rpb24gSHl0'@;
put 'KGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLGwpLHRoaXMucGx1Z2luPWMsdGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb249dGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0'@;
put 'aW9uLHRoaXMuY3VycmVudEZpbGxEYXRhPW51bGx9cmV0dXJuIGZ1bmN0aW9uIE55dChsLGMsYSl7YyYmb2dlKGwucHJvdG90eXBlLGMpLGEmJm9nZShsLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShsLFt7a2V5OiJjb3JyZWN0U2VsZWN0'@;
put 'aW9uQXJlYVNpemUiLHZhbHVlOmZ1bmN0aW9uKGEpe2lmKGFbMF09PT1hWzJdJiZhWzFdPT09YVszXSl7dmFyIGY9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGFbMF0sYVsxXSk7ZiYmKGFbMl09YVswXStmLnJvd3NwYW4tMSxhWzNdPWFbMV0rZi5jb2xzcGFuLTEpfX19LHtrZXk6'@;
put 'ImdldERpcmVjdGlvbiIsdmFsdWU6ZnVuY3Rpb24oYSxmKXtyZXR1cm4gZlswXT09PWFbMF0mJmZbMV09PT1hWzFdJiZmWzNdPT09YVszXT8iZG93biI6ZlsyXT09PWFbMl0mJmZbMV09PT1hWzFdJiZmWzNdPT09YVszXT8idXAiOmZbMV09PT1hWzFdJiZmWzJdPT09YVsyXT8icmlnaHQiOiJs'@;
put 'ZWZ0In19LHtrZXk6InNuYXBEcmFnQXJlYSIsdmFsdWU6ZnVuY3Rpb24oYSxmLGQsaCl7dmFyIG09Zi5zbGljZSgwKSxfPXRoaXMuZ2V0QXV0b2ZpbGxTaXplKGEsZixkKSxPPWg2KGEsNCksWD1PWzBdLGFlPU9bMV0scGU9T1syXSxiZT1PWzNdLFZlPVsidXAiLCJkb3duIl0uaW5kZXhPZihk'@;
put 'KT4tMT9wZS1YKzE6YmUtYWUrMSxsdD1fLU1hdGguZmxvb3IoXy9WZSkqVmUsZHQ9dGhpcy5nZXRGYXJ0aGVzdENvbGxlY3Rpb24oYSxmLGQsaCk7aWYoZHQpaWYoImRvd24iPT09ZCl7dmFyIGd0PWR0LnJvdytkdC5yb3dzcGFuLVgtbHQ7bVsyXStndD49dGhpcy5wbHVnaW4uaG90LmNvdW50'@;
put 'Um93cygpP21bMl0tPWx0Om1bMl0rPWx0P2d0OjB9ZWxzZSBpZigicmlnaHQiPT09ZCl7dmFyIHJuPWR0LmNvbCtkdC5jb2xzcGFuLWFlLWx0O21bM10rcm4+PXRoaXMucGx1Z2luLmhvdC5jb3VudENvbHMoKT9tWzNdLT1sdDptWzNdKz1sdD9ybjowfWVsc2UgaWYoInVwIj09PWQpe3ZhciB5'@;
put 'bj1wZS1sdC1kdC5yb3crMTttWzBdK3luPDA/bVswXSs9bHQ6bVswXS09bHQ/eW46MH1lbHNlIGlmKCJsZWZ0Ij09PWQpe3ZhciBPcj1iZS1sdC1kdC5jb2wrMTttWzFdK09yPDA/bVsxXSs9bHQ6bVsxXS09bHQ/T3I6MH1yZXR1cm4gdGhpcy51cGRhdGVDdXJyZW50RmlsbENhY2hlKHtiYXNl'@;
put 'QXJlYTphLGRyYWdEaXJlY3Rpb246ZCxmb3VuZE1lcmdlZENlbGxzOmgsZmlsbFNpemU6XyxkcmFnQXJlYTptLGN5Y2xlTGVuZ3RoOlZlfSksbX19LHtrZXk6InVwZGF0ZUN1cnJlbnRGaWxsQ2FjaGUiLHZhbHVlOmZ1bmN0aW9uKGEpe3RoaXMuY3VycmVudEZpbGxEYXRhfHwodGhpcy5jdXJy'@;
put 'ZW50RmlsbERhdGE9e30pLHJ1KHRoaXMuY3VycmVudEZpbGxEYXRhLGEpfX0se2tleToiZ2V0QXV0b2ZpbGxTaXplIix2YWx1ZTpmdW5jdGlvbihhLGYsZCl7dmFyIGg9aDYoYSw0KSxtPWhbMF0sXz1oWzFdLE89aFsyXSxYPWhbM10sYWU9aDYoZiw0KSxwZT1hZVswXSxiZT1hZVsxXSx4ZT1h'@;
put 'ZVsyXSxWZT1hZVszXTtzd2l0Y2goZCl7Y2FzZSJ1cCI6cmV0dXJuIG0tcGU7Y2FzZSJkb3duIjpyZXR1cm4geGUtTztjYXNlImxlZnQiOnJldHVybiBfLWJlO2Nhc2UicmlnaHQiOnJldHVybiBWZS1YO2RlZmF1bHQ6cmV0dXJuIG51bGx9fX0se2tleToiZ2V0RHJhZ0FyZWEiLHZhbHVlOmZ1'@;
put 'bmN0aW9uKGEsZixkKXt2YXIgaD1oNihhLDQpLG09aFswXSxfPWhbMV0sTz1oWzJdLFg9aFszXSxhZT1oNihmLDQpLHBlPWFlWzBdLGJlPWFlWzFdLHhlPWFlWzJdLFZlPWFlWzNdO3N3aXRjaChkKXtjYXNlInVwIjpyZXR1cm5bcGUsYmUsbS0xLFhdO2Nhc2UiZG93biI6cmV0dXJuW08rMSxf'@;
put 'LHhlLFhdO2Nhc2UibGVmdCI6cmV0dXJuW3BlLGJlLE8sXy0xXTtjYXNlInJpZ2h0IjpyZXR1cm5bbSxYKzEseGUsVmVdO2RlZmF1bHQ6cmV0dXJuIG51bGx9fX0se2tleToiZ2V0RmFydGhlc3RDb2xsZWN0aW9uIix2YWx1ZTpmdW5jdGlvbihhLGYsZCxoKXt2YXIgbT1oNihhLDQpLF89bVsw'@;
put 'XSxPPW1bMV0sWD1tWzJdLGFlPW1bM10scGU9WyJ1cCIsImRvd24iXS5pbmRleE9mKGQpPi0xLGJlPXBlP1g6YWUseGU9cGU/XzpPLFZlPXRoaXMuZ2V0QXV0b2ZpbGxTaXplKGEsZixkKSxaZT1wZT9YLV8rMTphZS1PKzEsZHQ9VmUtTWF0aC5mbG9vcihWZS9aZSkqWmUsZ3Q9bnVsbCxqdD1u'@;
put 'dWxsLHJuPW51bGw7c3dpdGNoKGQpe2Nhc2UidXAiOmd0PSJpbmNsdWRlc1ZlcnRpY2FsbHkiLHJuPWJlLWR0KzE7YnJlYWs7Y2FzZSJsZWZ0IjpndD0iaW5jbHVkZXNIb3Jpem9udGFsbHkiLHJuPWJlLWR0KzE7YnJlYWs7Y2FzZSJkb3duIjpndD0iaW5jbHVkZXNWZXJ0aWNhbGx5Iixybj14'@;
put 'ZStkdC0xO2JyZWFrO2Nhc2UicmlnaHQiOmd0PSJpbmNsdWRlc0hvcml6b250YWxseSIscm49eGUrZHQtMX1yZXR1cm4gUm4oaCxmdW5jdGlvbihYdCl7WHRbZ3RdKHJuKSYmWHQuaXNGYXJ0aGVyKGp0LGQpJiYoanQ9WHQpfSksanR9fSx7a2V5OiJyZWNyZWF0ZUFmdGVyRGF0YVBvcHVsYXRp'@;
put 'b24iLHZhbHVlOmZ1bmN0aW9uKGEpe2lmKHRoaXMuY3VycmVudEZpbGxEYXRhKXt2YXIgZj10aGlzLmdldFJhbmdlRnJvbUNoYW5nZXMoYSksZD10aGlzLmN1cnJlbnRGaWxsRGF0YS5mb3VuZE1lcmdlZENlbGxzLGg9dGhpcy5jdXJyZW50RmlsbERhdGEuZHJhZ0RpcmVjdGlvbixtPWZ1bmN0'@;
put 'aW9uKGJlLHhlKXtzd2l0Y2goaCl7Y2FzZSJ1cCI6cmV0dXJuIGJlLnJvdy14ZT49Zi5mcm9tLnJvdztjYXNlImRvd24iOnJldHVybiBiZS5yb3crYmUucm93c3Bhbi0xK3hlPD1mLnRvLnJvdztjYXNlImxlZnQiOnJldHVybiBiZS5jb2wteGU+PWYuZnJvbS5jb2x1bW47Y2FzZSJyaWdodCI6'@;
put 'cmV0dXJuIGJlLmNvbCtiZS5jb2xzcGFuLTEreGU8PWYudG8uY29sdW1uO2RlZmF1bHQ6cmV0dXJuIG51bGx9fSxfPTAsTz1udWxsLFg9MTtkb3tmb3IodmFyIGFlPTA7YWU8ZC5sZW5ndGg7YWUrPTEpe2lmKG0oTz1kW2FlXSxfPVgqdGhpcy5jdXJyZW50RmlsbERhdGEuY3ljbGVMZW5ndGgp'@;
put 'KXN3aXRjaChoKXtjYXNlInVwIjp0aGlzLnBsdWdpbi5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uYWRkKHtyb3c6Ty5yb3ctXyxyb3dzcGFuOk8ucm93c3Bhbixjb2w6Ty5jb2wsY29sc3BhbjpPLmNvbHNwYW59KTticmVhaztjYXNlImRvd24iOnRoaXMucGx1Z2luLm1lcmdlZENlbGxzQ29sbGVj'@;
put 'dGlvbi5hZGQoe3JvdzpPLnJvdytfLHJvd3NwYW46Ty5yb3dzcGFuLGNvbDpPLmNvbCxjb2xzcGFuOk8uY29sc3Bhbn0pO2JyZWFrO2Nhc2UibGVmdCI6dGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmFkZCh7cm93Ok8ucm93LHJvd3NwYW46Ty5yb3dzcGFuLGNvbDpPLmNvbC1f'@;
put 'LGNvbHNwYW46Ty5jb2xzcGFufSk7YnJlYWs7Y2FzZSJyaWdodCI6dGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmFkZCh7cm93Ok8ucm93LHJvd3NwYW46Ty5yb3dzcGFuLGNvbDpPLmNvbCtfLGNvbHNwYW46Ty5jb2xzcGFufSl9YWU9PT1kLmxlbmd0aC0xJiYoWCs9MSl9fXdo'@;
put 'aWxlKG0oTyxfKSk7dGhpcy5jdXJyZW50RmlsbERhdGE9bnVsbCx0aGlzLnBsdWdpbi5ob3QucmVuZGVyKCksZC5sZW5ndGg+MCYmdGhpcy5wbHVnaW4uaWZDaHJvbWVGb3JjZVJlcGFpbnQoKX19fSx7a2V5OiJnZXRSYW5nZUZyb21DaGFuZ2VzIix2YWx1ZTpmdW5jdGlvbihhKXt2YXIgZj10'@;
put 'aGlzLGQ9e21pbjpudWxsLG1heDpudWxsfSxoPXttaW46bnVsbCxtYXg6bnVsbH07cmV0dXJuIFJuKGEsZnVuY3Rpb24obSl7dmFyIF89bVswXSxPPWYucGx1Z2luLmhvdC5wcm9wVG9Db2wobVsxXSk7KG51bGw9PT1kLm1pbnx8XzxkLm1pbikmJihkLm1pbj1fKSwobnVsbD09PWQubWF4fHxf'@;
put 'PmQubWF4KSYmKGQubWF4PV8pLChudWxsPT09aC5taW58fE88aC5taW4pJiYoaC5taW49TyksKG51bGw9PT1oLm1heHx8Tz5oLm1heCkmJihoLm1heD1PKX0pLHtmcm9tOntyb3c6ZC5taW4sY29sdW1uOmgubWlufSx0bzp7cm93OmQubWF4LGNvbHVtbjpoLm1heH19fX0se2tleToiZHJhZ0Fy'@;
put 'ZWFPdmVybGFwc0NvbGxlY3Rpb25zIix2YWx1ZTpmdW5jdGlvbihhLGYsZCl7dmFyIG09aDYodGhpcy5nZXREcmFnQXJlYShhLGYsZCksNCksWD1tWzJdLGFlPW1bM10scGU9dGhpcy5wbHVnaW4uaG90Ll9jcmVhdGVDZWxsQ29vcmRzKG1bMF0sbVsxXSksYmU9dGhpcy5wbHVnaW4uaG90Ll9j'@;
put 'cmVhdGVDZWxsQ29vcmRzKFgsYWUpLHhlPXRoaXMucGx1Z2luLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKHBlLHBlLGJlKTtyZXR1cm4hIXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldFdpdGhpblJhbmdlKHhlLCEwKX19XSksbH0oKTtjb25zdCB6eXQ9anl0O2Z1bmN0aW9uIE1FKGwpe3Jl'@;
put 'dHVybihNRT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3lt'@;
put 'Ym9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIGFnZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBm'@;
put 'JiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsWXl0KGYua2V5KSxmKX19ZnVuY3Rpb24gWXl0KGwpe3ZhciBjPWZ1bmN0aW9uIFd5dChsLGMpe2lmKCJvYmplY3QiIT09TUUobCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtp'@;
put 'Zih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09TUUoZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmlu'@;
put 'ZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PU1FKGMpP2M6U3RyaW5nKGMpfXZhciBHeXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKGMpeyhmdW5jdGlvbiBVeXQobCxjKXtpZighKGwgaW5zdGFuY2VvZiBjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2Fs'@;
put 'bCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsbCksdGhpcy5wbHVnaW49Yyx0aGlzLmhvdD1jLmhvdCx0aGlzLmZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lPSJmdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbCJ9cmV0dXJuIGZ1bmN0aW9uIFp5dChsLGMsYSl7YyYmYWdlKGwu'@;
put 'cHJvdG90eXBlLGMpLGEmJmFnZShsLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShsLFt7a2V5OiJzbmFwRGVsdGEiLHZhbHVlOmZ1bmN0aW9uKGEsZixkKXt2YXIgaD1mLnRvLF89aC5jb2wrYS5jb2w7YS5yb3c/dGhpcy5qdW1wT3Zlck1l'@;
put 'cmdlZENlbGwoYSxkLGgucm93K2Eucm93KTphLmNvbCYmdGhpcy5qdW1wT3Zlck1lcmdlZENlbGwoYSxkLF8pfX0se2tleToianVtcE92ZXJNZXJnZWRDZWxsIix2YWx1ZTpmdW5jdGlvbihhLGYsZCl7dmFyIGg9YS5yb3d8fGEuY29sLG09bnVsbCxfPW51bGwsTz1udWxsO2Eucm93PyhtPWYu'@;
put 'aW5jbHVkZXNWZXJ0aWNhbGx5KGQpLF89Zi5yb3csTz1mLmdldExhc3RSb3coKSk6YS5jb2wmJihtPWYuaW5jbHVkZXNIb3Jpem9udGFsbHkoZCksXz1mLmNvbCxPPWYuZ2V0TGFzdENvbHVtbigpKSwwIT09aCYmKGg+MD9tJiZkIT09XyYmKGgrPU8tZCsxKTptJiZkIT09TyYmKGgtPWQtXysx'@;
put 'KSxhLnJvdz9hLnJvdz1oOmEuY29sJiYoYS5jb2w9aCkpfX0se2tleToiZ2V0VXBkYXRlZFNlbGVjdGlvblJhbmdlIix2YWx1ZTpmdW5jdGlvbihhLGYpe3JldHVybiB0aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKGEuaGlnaGxpZ2h0LGEuZnJvbSx0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jk'@;
put 'cyhhLnRvLnJvdytmLnJvdyxhLnRvLmNvbCtmLmNvbCkpfX0se2tleToiZ2V0U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lIix2YWx1ZTpmdW5jdGlvbihhLGYsZCxoKXt2YXIgbT1NYXRoLm1pbihkWzBdLGRbMl0pLF89TWF0aC5taW4oZFsxXSxkWzNdKSxPPU1hdGgubWF4KGRbMF0sZFsy'@;
put 'XSksWD1NYXRoLm1heChkWzFdLGRbM10pO2lmKHZvaWQgMCE9PWgmJnRoaXMucGx1Z2luLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5pc0ZpcnN0UmVuZGVyYWJsZU1lcmdlZENlbGwoYSxmKSl7dmFyIHBlPXRoaXMucGx1Z2luLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoYSxmKTtpZihwZSl7'@;
put 'dmFyIGJlPXBlLmdldExhc3RSb3coKSx4ZT1wZS5nZXRMYXN0Q29sdW1uKCk7aWYobTw9cGUucm93JiZfPD1wZS5jb2wmJk8+PWJlJiZYPj14ZSlyZXR1cm4iIi5jb25jYXQodGhpcy5mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZSwiLSIpLmNvbmNhdChoKTtpZih0aGlzLnBsdWdp'@;
put 'bi5zZWxlY3Rpb25DYWxjdWxhdGlvbnMuaXNNZXJnZUNlbGxGdWxseVNlbGVjdGVkKHBlLHRoaXMucGx1Z2luLmhvdC5nZXRTZWxlY3RlZFJhbmdlKCkpKXJldHVybiIiLmNvbmNhdCh0aGlzLmZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lLCItbXVsdGlwbGUiKX19fX0se2tleToi'@;
put 'aXNNZXJnZUNlbGxGdWxseVNlbGVjdGVkIix2YWx1ZTpmdW5jdGlvbihhLGYpe3ZhciBkPVtdO2lmKCFmfHwhYSlyZXR1cm4hMTtmb3IodmFyIGg9MDtoPGEucm93c3BhbjtoKz0xKWZvcih2YXIgbT0wO208YS5jb2xzcGFuO20rPTEpZC5wdXNoKHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRz'@;
put 'KGEucm93K2gsYS5jb2wrbSkpO2Zvcih2YXIgXz0wO188ZC5sZW5ndGg7Xys9MSl7Zm9yKHZhciBPPVtdLFg9MDtYPGYubGVuZ3RoO1grPTEpT1tYXT1mW1hdLmluY2x1ZGVzKGRbX10pO2lmKCFPLmluY2x1ZGVzKCEwKSlyZXR1cm4hMX1yZXR1cm4hMH19LHtrZXk6ImdldFNlbGVjdGVkTWVy'@;
put 'Z2VkQ2VsbENsYXNzTmFtZVRvUmVtb3ZlIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgYT1bXSxmPTA7Zjw9NztmKz0xKWEucHVzaCgiIi5jb25jYXQodGhpcy5mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZSwiLSIpLmNvbmNhdChmKSk7cmV0dXJuIGEucHVzaCgiIi5jb25jYXQo'@;
put 'dGhpcy5mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZSwiLW11bHRpcGxlIikpLGF9fV0pLGx9KCk7Y29uc3QgJHl0PUd5dDtmdW5jdGlvbiBsYihsKXtyZXR1cm4obGI9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVu'@;
put 'Y3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiBsZ2UobCxjKXtpZihs'@;
put 'KXtpZigic3RyaW5nIj09dHlwZW9mIGwpcmV0dXJuIFBYKGwsYyk7dmFyIGE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGwpLnNsaWNlKDgsLTEpO2lmKCJPYmplY3QiPT09YSYmbC5jb25zdHJ1Y3RvciYmKGE9bC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PWF8fCJTZXQiPT09'@;
put 'YSlyZXR1cm4gQXJyYXkuZnJvbShsKTtpZigiQXJndW1lbnRzIj09PWF8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KGEpKXJldHVybiBQWChsLGMpfX1mdW5jdGlvbiBQWChsLGMpeyhudWxsPT1jfHxjPmwubGVuZ3RoKSYmKGM9bC5sZW5ndGgpO2Zv'@;
put 'cih2YXIgYT0wLGY9bmV3IEFycmF5KGMpO2E8YzthKyspZlthXT1sW2FdO3JldHVybiBmfWZ1bmN0aW9uIHNnZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJp'@;
put 'biBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsYWJ0KGYua2V5KSxmKX19ZnVuY3Rpb24gYWJ0KGwpe3ZhciBjPWZ1bmN0aW9uIGxidChsLGMpe2lmKCJvYmplY3QiIT09bGIobCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZl'@;
put 'XTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09bGIoZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0'@;
put 'cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PWxiKGMpP2M6U3RyaW5nKGMpfWZ1bmN0aW9uIHNiKCl7cmV0dXJuIHNiPXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdC5nZXQ/UmVmbGVjdC5nZXQuYmluZCgpOmZ1bmN0aW9uKGMsYSxmKXt2YXIgZD1mdW5j'@;
put 'dGlvbiBzYnQobCxjKXtmb3IoOyFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobCxjKSYmbnVsbCE9PShsPXJtKGwpKTspO3JldHVybiBsfShjLGEpO2lmKGQpe3ZhciBoPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZCxhKTtyZXR1cm4gaC5nZXQ/aC5nZXQu'@;
put 'Y2FsbChhcmd1bWVudHMubGVuZ3RoPDM/YzpmKTpoLnZhbHVlfX0sc2IuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIEZYKGwsYyl7cmV0dXJuKEZYPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGYsZCl7cmV0dXJuIGYu'@;
put 'X19wcm90b19fPWQsZn0pKGwsYyl9ZnVuY3Rpb24gdWdlKGwpe2lmKHZvaWQgMD09PWwpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gbH1mdW5jdGlvbiBybShsKXtyZXR1'@;
put 'cm4ocm09T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSl9KShsKX11by5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlTWVyZ2VDZWxscyIp'@;
put 'LHVvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlck1lcmdlQ2VsbHMiKSx1by5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlVW5tZXJnZUNlbGxzIiksdW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyVW5tZXJnZUNlbGxzIik7dmFyIHBnZSxrRT0ibWVyZ2VDZWxs'@;
put 'cyIsY2dlPW5ldyBXZWFrTWFwLGZnZT1rRSxwYnQ9ZnVuY3Rpb24obCl7IWZ1bmN0aW9uIHVidChsLGMpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjJiZudWxsIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlv'@;
put 'biIpO2wucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYyYmYy5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpsLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxjJiZGWChsLGMpfShhLGwp'@;
put 'O3ZhciBjPWZ1bmN0aW9uIGNidChsKXt2YXIgYz1mdW5jdGlvbiBkYnQoKXtpZih0eXBlb2YgUmVmbGVjdD4idSJ8fCFSZWZsZWN0LmNvbnN0cnVjdHx8UmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVy'@;
put 'biBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSxmdW5jdGlvbigpe30pKSwhMH1jYXRjaHtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGQsZj1ybShsKTtpZihjKXt2YXIgaD1ybSh0aGlzKS5jb25zdHJ1Y3Rvcjtk'@;
put 'PVJlZmxlY3QuY29uc3RydWN0KGYsYXJndW1lbnRzLGgpfWVsc2UgZD1mLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24gZmJ0KGwsYyl7aWYoYyYmKCJvYmplY3QiPT09bGIoYyl8fCJmdW5jdGlvbiI9PXR5cGVvZiBjKSlyZXR1cm4gYztpZih2b2lkIDAhPT1jKXRocm93'@;
put 'IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIHVnZShsKX0odGhpcyxkKX19KGEpO2Z1bmN0aW9uIGEoZil7dmFyIGQ7cmV0dXJuIGZ1bmN0aW9uIGlidChsLGMpe2lmKCEobCBpbnN0YW5jZW9m'@;
put 'IGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGEpLGQ9Yy5jYWxsKHRoaXMsZiksY2dlLnNldCh1Z2UoZCkse2xhc3REZXNpcmVkQ29vcmRzOm51bGx9KSxkLm1lcmdlZENlbGxzQ29sbGVjdGlvbj1udWxsLGQuYXV0b2Zp'@;
put 'bGxDYWxjdWxhdGlvbnM9bnVsbCxkLnNlbGVjdGlvbkNhbGN1bGF0aW9ucz1udWxsLGR9cmV0dXJuIGZ1bmN0aW9uIG9idChsLGMsYSl7YyYmc2dlKGwucHJvdG90eXBlLGMpLGEmJnNnZShsLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShh'@;
put 'LFt7a2V5OiJpc0VuYWJsZWQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW2tFXX19LHtrZXk6ImVuYWJsZVBsdWdpbiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzO3RoaXMuZW5hYmxlZHx8KHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uPW5l'@;
put 'dyBJeXQodGhpcyksdGhpcy5hdXRvZmlsbENhbGN1bGF0aW9ucz1uZXcgenl0KHRoaXMpLHRoaXMuc2VsZWN0aW9uQ2FsY3VsYXRpb25zPW5ldyAkeXQodGhpcyksdGhpcy5hZGRIb29rKCJhZnRlckluaXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25BZnRlckluaXQuYXBwbHkoZCxhcmd1bWVu'@;
put 'dHMpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlUcmFuc2Zvcm1TdGFydCIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbk1vZGlmeVRyYW5zZm9ybVN0YXJ0LmFwcGx5KGQsYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1TdGFydCIsZnVuY3Rpb24oKXtyZXR1cm4g'@;
put 'ZC5vbkFmdGVyTW9kaWZ5VHJhbnNmb3JtU3RhcnQuYXBwbHkoZCxhcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlUcmFuc2Zvcm1FbmQiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Nb2RpZnlUcmFuc2Zvcm1FbmQuYXBwbHkoZCxhcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJtb2Rp'@;
put 'ZnlHZXRDZWxsQ29vcmRzIixmdW5jdGlvbigpe3JldHVybiBkLm9uTW9kaWZ5R2V0Q2VsbENvb3Jkcy5hcHBseShkLGFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVNldFJhbmdlU3RhcnQiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25CZWZvcmVTZXRSYW5nZVN0YXJ0LmFwcGx5KGQs'@;
put 'YXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlU2V0UmFuZ2VTdGFydE9ubHkiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25CZWZvcmVTZXRSYW5nZVN0YXJ0LmFwcGx5KGQsYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlU2V0UmFuZ2VFbmQiLGZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IGQub25CZWZvcmVTZXRSYW5nZUVuZC5hcHBseShkLGFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVySXNNdWx0aXBsZVNlbGVjdGlvbiIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkFmdGVySXNNdWx0aXBsZVNlbGVjdGlvbi5hcHBseShkLGFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2so'@;
put 'ImFmdGVyUmVuZGVyZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25BZnRlclJlbmRlcmVyLmFwcGx5KGQsYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixmdW5jdGlvbigpe3JldHVybiBkLmFkZE1lcmdlQWN0aW9uc1RvQ29udGV4dE1l'@;
put 'bnUuYXBwbHkoZCxhcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlckdldENlbGxNZXRhIixmdW5jdGlvbigpe3JldHVybiBkLm9uQWZ0ZXJHZXRDZWxsTWV0YS5hcHBseShkLGFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyVmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGUi'@;
put 'LGZ1bmN0aW9uKCl7cmV0dXJuIGQub25BZnRlclZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlLmFwcGx5KGQsYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJWaWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZSIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkFmdGVyVmlld3Bv'@;
put 'cnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGUuYXBwbHkoZCxhcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlBdXRvZmlsbFJhbmdlIixmdW5jdGlvbigpe3JldHVybiBkLm9uTW9kaWZ5QXV0b2ZpbGxSYW5nZS5hcHBseShkLGFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVy'@;
put 'Q3JlYXRlQ29sIixmdW5jdGlvbigpe3JldHVybiBkLm9uQWZ0ZXJDcmVhdGVDb2wuYXBwbHkoZCxhcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZUNvbCIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkFmdGVyUmVtb3ZlQ29sLmFwcGx5KGQsYXJndW1lbnRzKX0pLHRoaXMuYWRk'@;
put 'SG9vaygiYWZ0ZXJDcmVhdGVSb3ciLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25BZnRlckNyZWF0ZVJvdy5hcHBseShkLGFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyUmVtb3ZlUm93IixmdW5jdGlvbigpe3JldHVybiBkLm9uQWZ0ZXJSZW1vdmVSb3cuYXBwbHkoZCxhcmd1bWVudHMp'@;
put 'fSksdGhpcy5hZGRIb29rKCJhZnRlckNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkFmdGVyQ2hhbmdlLmFwcGx5KGQsYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlRHJhd0JvcmRlcnMiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25CZWZvcmVEcmF3QXJlYUJvcmRlcnMuYXBw'@;
put 'bHkoZCxhcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlckRyYXdTZWxlY3Rpb24iLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25BZnRlckRyYXdTZWxlY3Rpb24uYXBwbHkoZCxhcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lcyIsZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4gZC5vbkJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzLmFwcGx5KGQsYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlVW5kb1N0YWNrQ2hhbmdlIixmdW5jdGlvbihoLG0pe2lmKCJNZXJnZUNlbGxzIj09PW0pcmV0dXJuITF9KSx0aGlzLnJlZ2lzdGVyU2hvcnRjdXRz'@;
put 'KCksc2Iocm0oYS5wcm90b3R5cGUpLCJlbmFibGVQbHVnaW4iLHRoaXMpLmNhbGwodGhpcykpfX0se2tleToiZGlzYWJsZVBsdWdpbiIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNsZWFyQ29sbGVjdGlvbnMoKSx0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSx0aGlzLmhvdC5yZW5kZXIoKSxz'@;
put 'YihybShhLnByb3RvdHlwZSksImRpc2FibGVQbHVnaW4iLHRoaXMpLmNhbGwodGhpcyl9fSx7a2V5OiJ1cGRhdGVQbHVnaW4iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtrRV07dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSx0'@;
put 'aGlzLmdlbmVyYXRlRnJvbVNldHRpbmdzKGQpLHNiKHJtKGEucHJvdG90eXBlKSwidXBkYXRlUGx1Z2luIix0aGlzKS5jYWxsKHRoaXMpfX0se2tleToiaWZDaHJvbWVGb3JjZVJlcGFpbnQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcztpZih1WSgpKXt2YXIgaD1bXSxtPVtdO3RoaXMu'@;
put 'bWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLm1lcmdlZENlbGxzLmZvckVhY2goZnVuY3Rpb24oXyl7Zm9yKHZhciBPPV8ucm93LFg9Xy5yb3dzcGFuLGFlPU8rMTthZTxPK1g7YWUrKyltLnB1c2goYWUpfSksKG09ZnVuY3Rpb24gZWJ0KGwpe3JldHVybiBmdW5jdGlvbiByYnQobCl7aWYoQXJyYXku'@;
put 'aXNBcnJheShsKSlyZXR1cm4gUFgobCl9KGwpfHxmdW5jdGlvbiBuYnQobCl7aWYodHlwZW9mIFN5bWJvbDwidSImJm51bGwhPWxbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9bFsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKGwpfShsKXx8bGdlKGwpfHxmdW5jdGlvbiB0YnQoKXt0'@;
put 'aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX0obmV3IFNl'@;
put 'dChtKSkpLmZvckVhY2goZnVuY3Rpb24oXyl7dmFyIE89ZC5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChfKTtkLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLmdldE92ZXJsYXlzKCEwKS5tYXAoZnVuY3Rpb24oWCl7cmV0dXJuIm1hc3RlciI9PT1YPy5u'@;
put 'YW1lP1g6WC5jbG9uZS53dFRhYmxlfSkuZm9yRWFjaChmdW5jdGlvbihYKXt2YXIgYWU9WC5nZXRSb3coTyk7YWUmJihhZS5zdHlsZS5iYWNrZ3JvdW5kPUI3KGFlLCJiYWNrZ3JvdW5kQ29sb3IiKS5yZXBsYWNlKCIpIiwiLCAwLjk5KSIpLGgucHVzaChhZSkpfSl9KSx0aGlzLmhvdC5fcmVn'@;
put 'aXN0ZXJUaW1lb3V0KGZ1bmN0aW9uKCl7aC5mb3JFYWNoKGZ1bmN0aW9uKF8pe18uc3R5bGUuYmFja2dyb3VuZD1CNyhfLCJiYWNrZ3JvdW5kQ29sb3IiKS5yZXBsYWNlKCIsIDAuOTkpIiwiKSIpfSl9LDEpfX19LHtrZXk6InZhbGlkYXRlU2V0dGluZyIsdmFsdWU6ZnVuY3Rpb24oZCl7dmFy'@;
put 'IGg9ITA7cmV0dXJuISFkJiYoWGguY29udGFpbnNOZWdhdGl2ZVZhbHVlcyhkKT8oV2woWGguTkVHQVRJVkVfVkFMVUVTX1dBUk5JTkcoZCkpLGg9ITEpOlhoLmlzT3V0T2ZCb3VuZHMoZCx0aGlzLmhvdC5jb3VudFJvd3MoKSx0aGlzLmhvdC5jb3VudENvbHMoKSk/KFdsKFhoLklTX09VVF9P'@;
put 'Rl9CT1VORFNfV0FSTklORyhkKSksaD0hMSk6WGguaXNTaW5nbGVDZWxsKGQpPyhXbChYaC5JU19TSU5HTEVfQ0VMTChkKSksaD0hMSk6WGguY29udGFpbnNaZXJvU3BhbihkKSYmKFdsKFhoLlpFUk9fU1BBTl9XQVJOSU5HKGQpKSxoPSExKSxoKX19LHtrZXk6ImdlbmVyYXRlRnJvbVNldHRp'@;
put 'bmdzIix2YWx1ZTpmdW5jdGlvbihkKXt2YXIgaD10aGlzO2lmKEFycmF5LmlzQXJyYXkoZCkpe3ZhciBtPVtdO2lmKFJuKGQsZnVuY3Rpb24oXyl7aWYoaC52YWxpZGF0ZVNldHRpbmcoXykpe3ZhciBPPWguaG90Ll9jcmVhdGVDZWxsQ29vcmRzKF8ucm93LF8uY29sKSxYPWguaG90Ll9jcmVh'@;
put 'dGVDZWxsQ29vcmRzKF8ucm93K18ucm93c3Bhbi0xLF8uY29sK18uY29sc3Bhbi0xKSxhZT1oLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKE8sTyxYKTtoLm1lcmdlUmFuZ2UoYWUsITAsITApLF9vKF8ucm93LF8ucm93K18ucm93c3Bhbi0xLGZ1bmN0aW9uKHBlKXtfbyhfLmNvbCxfLmNvbCtfLmNv'@;
put 'bHNwYW4tMSxmdW5jdGlvbihiZSl7cGU9PT1fLnJvdyYmYmU9PT1fLmNvbHx8bS5wdXNoKFtwZSxiZSxudWxsXSl9KX0pfX0pLDA9PT1tLmxlbmd0aClyZXR1cm47dGhpcy5ob3Quc2V0RGF0YUF0Q2VsbChtKX19fSx7a2V5OiJjbGVhckNvbGxlY3Rpb25zIix2YWx1ZTpmdW5jdGlvbigpe3Ro'@;
put 'aXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmNsZWFyKCl9fSx7a2V5OiJjYW5NZXJnZVJhbmdlIix2YWx1ZTpmdW5jdGlvbihkKXtyZXR1cm4hIShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdKXx8dGhpcy52YWxpZGF0ZVNldHRpbmcoZCl9'@;
put 'fSx7a2V5OiJ0b2dnbGVNZXJnZU9uU2VsZWN0aW9uIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoZCl7ZC5zZXREaXJlY3Rpb24odGhpcy5ob3QuaXNSdGwoKT8iTkUtU1ciOiJOVy1TRSIpO3ZhciBoPWQuZnJvbSxtPWQudG87dGhp'@;
put 'cy50b2dnbGVNZXJnZShkKSx0aGlzLmhvdC5zZWxlY3RDZWxsKGgucm93LGguY29sLG0ucm93LG0uY29sLCExKX19fSx7a2V5OiJtZXJnZVNlbGVjdGlvbiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNb'@;
put 'MF06dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZihkKXtkLnNldERpcmVjdGlvbih0aGlzLmhvdC5pc1J0bCgpPyJORS1TVyI6Ik5XLVNFIik7dmFyIGg9ZC5mcm9tLG09ZC50bzt0aGlzLnVubWVyZ2VSYW5nZShkLCEwKSx0aGlzLm1lcmdlUmFuZ2UoZCksdGhpcy5ob3Quc2Vs'@;
put 'ZWN0Q2VsbChoLnJvdyxoLmNvbCxtLnJvdyxtLmNvbCwhMSl9fX0se2tleToidW5tZXJnZVNlbGVjdGlvbiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5n'@;
put 'ZUxhc3QoKTtpZihkKXt2YXIgaD1kLmZyb20sbT1kLnRvO3RoaXMudW5tZXJnZVJhbmdlKGQsITApLHRoaXMuaG90LnNlbGVjdENlbGwoaC5yb3csaC5jb2wsbS5yb3csbS5jb2wsITEpfX19LHtrZXk6Im1lcmdlUmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBoPXRoaXMsbT1hcmd1bWVu'@;
put 'dHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLF89YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxPPWQuZ2V0VG9wU3RhcnRDb3JuZXIoKSxYPWQuZ2V0Qm90dG9tRW5kQ29ybmVyKCksYWU9e3JvdzpP'@;
put 'LnJvdyxjb2w6Ty5jb2wscm93c3BhbjpYLnJvdy1PLnJvdysxLGNvbHNwYW46WC5jb2wtTy5jb2wrMX0scGU9W10sYmU9bnVsbDtyZXR1cm4hIXRoaXMuY2FuTWVyZ2VSYW5nZShhZSxtKSYmKHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVNZXJnZUNlbGxzIixkLG0pLF9vKDAsYWUucm93c3Bh'@;
put 'bi0xLGZ1bmN0aW9uKFZlKXtfbygwLGFlLmNvbHNwYW4tMSxmdW5jdGlvbihaZSl7dmFyIGx0PW51bGw7cGVbVmVdfHwocGVbVmVdPVtdKSwwPT09VmUmJjA9PT1aZT9sdD1oLmhvdC5nZXRTb3VyY2VEYXRhQXRDZWxsKGguaG90LnRvUGh5c2ljYWxSb3coYWUucm93KSxoLmhvdC50b1BoeXNp'@;
put 'Y2FsQ29sdW1uKGFlLmNvbCkpOmguaG90LnNldENlbGxNZXRhKGFlLnJvdytWZSxhZS5jb2wrWmUsImhpZGRlbiIsITApLHBlW1ZlXVtaZV09bHR9KX0pLHRoaXMuaG90LnNldENlbGxNZXRhKGFlLnJvdyxhZS5jb2wsInNwYW5uZWQiLCEwKSwhdGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24u'@;
put 'YWRkKGFlKXx8KF8/YmU9W2FlLnJvdyxhZS5jb2wscGVdOnRoaXMuaG90LnBvcHVsYXRlRnJvbUFycmF5KGFlLnJvdyxhZS5jb2wscGUsdm9pZCAwLHZvaWQgMCx0aGlzLnBsdWdpbk5hbWUpLG18fHRoaXMuaWZDaHJvbWVGb3JjZVJlcGFpbnQoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJN'@;
put 'ZXJnZUNlbGxzIixkLGFlLG0pLGJlKSl9fSx7a2V5OiJ1bm1lcmdlUmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBoPXRoaXMsbT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLF89dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0'@;
put 'V2l0aGluUmFuZ2UoZCk7XyYmKHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVVbm1lcmdlQ2VsbHMiLGQsbSksUm4oXyxmdW5jdGlvbihPKXtoLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5yZW1vdmUoTy5yb3csTy5jb2wpLF9vKDAsTy5yb3dzcGFuLTEsZnVuY3Rpb24oWCl7X28oMCxPLmNvbHNw'@;
put 'YW4tMSxmdW5jdGlvbihhZSl7aC5ob3QucmVtb3ZlQ2VsbE1ldGEoTy5yb3crWCxPLmNvbCthZSwiaGlkZGVuIil9KX0pLGguaG90LnJlbW92ZUNlbGxNZXRhKE8ucm93LE8uY29sLCJzcGFubmVkIil9KSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJVbm1lcmdlQ2VsbHMiLGQsbSksdGhpcy5o'@;
put 'b3QucmVuZGVyKCkpfX0se2tleToidG9nZ2xlTWVyZ2UiLHZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBoPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChkLmZyb20ucm93LGQuZnJvbS5jb2wpO2gucm93PT09ZC5mcm9tLnJvdyYmaC5jb2w9PT1kLmZyb20uY29sJiZoLnJvdytoLnJvd3Nw'@;
put 'YW4tMT09PWQudG8ucm93JiZoLmNvbCtoLmNvbHNwYW4tMT09PWQudG8uY29sP3RoaXMudW5tZXJnZVJhbmdlKGQpOnRoaXMubWVyZ2VTZWxlY3Rpb24oZCl9fSx7a2V5OiJtZXJnZSIsdmFsdWU6ZnVuY3Rpb24oZCxoLG0sXyl7dmFyIE89dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZCxo'@;
put 'KSxYPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKG0sXyk7dGhpcy5tZXJnZVJhbmdlKHRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UoTyxPLFgpKX19LHtrZXk6InVubWVyZ2UiLHZhbHVlOmZ1bmN0aW9uKGQsaCxtLF8pe3ZhciBPPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGQsaCks'@;
put 'WD10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhtLF8pO3RoaXMudW5tZXJnZVJhbmdlKHRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UoTyxPLFgpKX19LHtrZXk6Im9uQWZ0ZXJJbml0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZ2VuZXJhdGVGcm9tU2V0dGluZ3ModGhpcy5ob3QuZ2V0U2V0'@;
put 'dGluZ3MoKVtrRV0pLHRoaXMuaG90LnJlbmRlcigpfX0se2tleToicmVnaXN0ZXJTaG9ydGN1dHMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpczt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikuYWRkU2hvcnRjdXQoe2tleXM6W1siQ29udHJvbCIs'@;
put 'Im0iXV0sY2FsbGJhY2s6ZnVuY3Rpb24oKXtkLnRvZ2dsZU1lcmdlKGQuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpLGQuaG90LnJlbmRlcigpfSxydW5Pbmx5SWY6ZnVuY3Rpb24oTyl7cmV0dXJuIU8uYWx0S2V5fSxncm91cDpmZ2V9KX19LHtrZXk6InVucmVnaXN0ZXJTaG9ydGN1dHMi'@;
put 'LHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoZmdlKX19LHtrZXk6Im9uQWZ0ZXJJc011bHRpcGxlU2VsZWN0aW9uIix2YWx1ZTpmdW5jdGlvbihkKXtpZihkKWZvcih2YXIgaD10'@;
put 'aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5tZXJnZWRDZWxscyxtPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksXz0wO188aC5sZW5ndGg7Xys9MSlpZihtLmZyb20ucm93PT09aFtfXS5yb3cmJm0uZnJvbS5jb2w9PT1oW19dLmNvbCYmbS50by5yb3c9PT1oW19dLnJvdytoW19d'@;
put 'LnJvd3NwYW4tMSYmbS50by5jb2w9PT1oW19dLmNvbCtoW19dLmNvbHNwYW4tMSlyZXR1cm4hMTtyZXR1cm4gZH19LHtrZXk6Im9uTW9kaWZ5VHJhbnNmb3JtU3RhcnQiLHZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBPLGg9Y2dlLmdldCh0aGlzKSxtPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VM'@;
put 'YXN0KCksXz17cm93OmQucm93LGNvbDpkLmNvbH0sWD10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhtLmhpZ2hsaWdodC5yb3csbS5oaWdobGlnaHQuY29sKSxhZT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoWC5yb3csWC5jb2wpO2lmKGgubGFzdERlc2lyZWRDb29yZHN8fCho'@;
put 'Lmxhc3REZXNpcmVkQ29vcmRzPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKG51bGwsbnVsbCkpLGFlKXt2YXIgcGU9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYWUucm93LGFlLmNvbCksYmU9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYWUucm93K2FlLnJvd3NwYW4tMSxhZS5j'@;
put 'b2wrYWUuY29sc3Bhbi0xKTt0aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKHBlLHBlLGJlKS5pbmNsdWRlcyhoLmxhc3REZXNpcmVkQ29vcmRzKXx8KGgubGFzdERlc2lyZWRDb29yZHM9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobnVsbCxudWxsKSksXy5yb3c9aC5sYXN0RGVzaXJlZENv'@;
put 'b3Jkcy5yb3c/aC5sYXN0RGVzaXJlZENvb3Jkcy5yb3ctWC5yb3c6Xy5yb3csXy5jb2w9aC5sYXN0RGVzaXJlZENvb3Jkcy5jb2w/aC5sYXN0RGVzaXJlZENvb3Jkcy5jb2wtWC5jb2w6Xy5jb2wsZC5yb3c+MD9fLnJvdz1hZS5yb3crYWUucm93c3Bhbi0xLVgucm93K2Qucm93OmQucm93PDAm'@;
put 'JihfLnJvdz1YLnJvdy1hZS5yb3crZC5yb3cpLGQuY29sPjA/Xy5jb2w9YWUuY29sK2FlLmNvbHNwYW4tMS1YLmNvbCtkLmNvbDpkLmNvbDwwJiYoXy5jb2w9WC5jb2wtYWUuY29sK2QuY29sKX1PPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKG0uaGlnaGxpZ2h0LnJvdytfLnJvdyxtLmhp'@;
put 'Z2hsaWdodC5jb2wrXy5jb2wpO3ZhciBWZT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoTy5yb3csTy5jb2wpO2lmKFZlKXt2YXIgWmU9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0Rmlyc3RSZW5kZXJhYmxlQ29vcmRzKFZlLnJvdyxWZS5jb2wpO2gubGFzdERlc2lyZWRD'@;
put 'b29yZHM9TyxfPXtyb3c6WmUucm93LVgucm93LGNvbDpaZS5jb2wtWC5jb2x9fTAhPT1fLnJvdyYmKGQucm93PV8ucm93KSwwIT09Xy5jb2wmJihkLmNvbD1fLmNvbCl9fSx7a2V5OiJvbk1vZGlmeVRyYW5zZm9ybUVuZCIsdmFsdWU6ZnVuY3Rpb24oZCl7dmFyIGg9dGhpcyxtPXRoaXMuaG90'@;
put 'LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksXz1lMChkKSxPPXRoaXMuc2VsZWN0aW9uQ2FsY3VsYXRpb25zLmdldFVwZGF0ZWRTZWxlY3Rpb25SYW5nZShtLGQpLFg9ZTAoXyksYWU9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0V2l0aGluUmFuZ2UoTywhMCk7ZG97WD1lMChfKSx0aGlz'@;
put 'LnNlbGVjdGlvbkNhbGN1bGF0aW9ucy5nZXRVcGRhdGVkU2VsZWN0aW9uUmFuZ2UobSxfKSxSbihhZSxmdW5jdGlvbihwZSl7aC5zZWxlY3Rpb25DYWxjdWxhdGlvbnMuc25hcERlbHRhKF8sbSxwZSl9KX13aGlsZShfLnJvdyE9PVgucm93fHxfLmNvbCE9PVguY29sKTtkLnJvdz1fLnJvdyxk'@;
put 'LmNvbD1fLmNvbH19LHtrZXk6Im9uTW9kaWZ5R2V0Q2VsbENvb3JkcyIsdmFsdWU6ZnVuY3Rpb24oZCxoKXtpZighKGQ8MHx8aDwwKSl7dmFyIG09dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGQsaCk7aWYobSl7dmFyIF89bS5yb3csTz1tLmNvbDtyZXR1cm5bXyxPLF8rbS5yb3dz'@;
put 'cGFuLTEsTyttLmNvbHNwYW4tMV19fX19LHtrZXk6ImFkZE1lcmdlQWN0aW9uc1RvQ29udGV4dE1lbnUiLHZhbHVlOmZ1bmN0aW9uKGQpe2QuaXRlbXMucHVzaCh7bmFtZToiLS0tLS0tLS0tIn0sZnVuY3Rpb24gS3l0KGwpe3JldHVybntrZXk6Im1lcmdlQ2VsbHMiLG5hbWU6ZnVuY3Rpb24o'@;
put 'KXt2YXIgYT10aGlzLmdldFNlbGVjdGVkTGFzdCgpO2lmKGEpe3ZhciBmPWwubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChhWzBdLGFbMV0pO2lmKGYucm93PT09YVswXSYmZi5jb2w9PT1hWzFdJiZmLnJvdytmLnJvd3NwYW4tMT09PWFbMl0mJmYuY29sK2YuY29sc3Bhbi0xPT09YVszXSly'@;
put 'ZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKEFHKX1yZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHhHKX0sY2FsbGJhY2s6ZnVuY3Rpb24oKXtsLnRvZ2dsZU1lcmdlT25TZWxlY3Rpb24oKX0sZGlzYWJsZWQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldFNlbGVjdGVkTGFz'@;
put 'dCgpO3JldHVybiFhfHxYaC5pc1NpbmdsZUNlbGwoe3JvdzphWzBdLGNvbDphWzFdLHJvd3NwYW46YVsyXS1hWzBdKzEsY29sc3BhbjphWzNdLWFbMV0rMX0pfHx0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKX0saGlkZGVuOiExfX0odGhpcykpfX0se2tleToib25BZnRlclJl'@;
put 'bmRlcmVyIix2YWx1ZTpmdW5jdGlvbihkLGgsbSl7dmFyIF89dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGgsbSksTz1wYShfKT9lMChfKTp2b2lkIDA7aWYocGEoTykpe3ZhciBYPXRoaXMuaG90LGFlPVgucm93SW5kZXhNYXBwZXIscGU9WC5jb2x1bW5JbmRleE1hcHBlcixkdD1m'@;
put 'dW5jdGlvbiBxeXQobCxjKXtyZXR1cm4gZnVuY3Rpb24gUXl0KGwpe2lmKEFycmF5LmlzQXJyYXkobCkpcmV0dXJuIGx9KGwpfHxmdW5jdGlvbiBKeXQobCxjKXt2YXIgYT1udWxsPT1sP251bGw6dHlwZW9mIFN5bWJvbDwidSImJmxbU3ltYm9sLml0ZXJhdG9yXXx8bFsiQEBpdGVyYXRvciJd'@;
put 'O2lmKG51bGwhPWEpe3ZhciBmLGQsaCxtLF89W10sTz0hMCxYPSExO3RyeXtpZihoPShhPWEuY2FsbChsKSkubmV4dCwwPT09Yyl7aWYoT2JqZWN0KGEpIT09YSlyZXR1cm47Tz0hMX1lbHNlIGZvcig7IShPPShmPWguY2FsbChhKSkuZG9uZSkmJihfLnB1c2goZi52YWx1ZSksXy5sZW5ndGgh'@;
put 'PT1jKTtPPSEwKTt9Y2F0Y2goYWUpe1g9ITAsZD1hZX1maW5hbGx5e3RyeXtpZighTyYmbnVsbCE9YS5yZXR1cm4mJihtPWEucmV0dXJuKCksT2JqZWN0KG0pIT09bSkpcmV0dXJufWZpbmFsbHl7aWYoWCl0aHJvdyBkfX1yZXR1cm4gX319KGwsYyl8fGxnZShsLGMpfHxmdW5jdGlvbiBYeXQo'@;
put 'KXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgp'@;
put 'fSh0aGlzLnRyYW5zbGF0ZU1lcmdlZENlbGxUb1JlbmRlcmFibGUoTy5yb3csTy5yb3dzcGFuLE8uY29sLE8uY29sc3BhbiksMiksanQ9ZHRbMV0seW49ZHRbMF0tYWUuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChoKSsxLFFuPWp0LXBlLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5k'@;
put 'ZXgobSkrMTtPLnJvdz1hZS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoTy5yb3csMSksTy5jb2w9cGUuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KE8uY29sLDEpLE8ucm93c3Bhbj1NYXRoLm1pbihPLnJvd3NwYW4seW4pLE8uY29sc3Bhbj1NYXRoLm1pbihPLmNvbHNwYW4sUW4pfVJYKGQs'@;
put 'TyxoLG0pfX0se2tleToib25CZWZvcmVTZXRSYW5nZVN0YXJ0Iix2YWx1ZTpmdW5jdGlvbihkKXtpZih0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5pc0ZpcnN0UmVuZGVyYWJsZU1lcmdlZENlbGwoZC5yb3csZC5jb2wpKXt2YXIgaD10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQo'@;
put 'ZC5yb3csZC5jb2wpLG09W2gucm93LGguY29sXTtkLnJvdz1tWzBdLGQuY29sPW1bMV19fX0se2tleToib25CZWZvcmVTZXRSYW5nZUVuZCIsdmFsdWU6ZnVuY3Rpb24oZCl7dmFyIGg9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtoLmhpZ2hsaWdodD10aGlzLmhvdC5fY3JlYXRl'@;
put 'Q2VsbENvb3JkcyhoLmhpZ2hsaWdodC5yb3csaC5oaWdobGlnaHQuY29sKSxoLnRvPWQ7dmFyIG09ITE7aWYoIXRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSYmIXRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSlkb3ttPSExO2Zv'@;
put 'cih2YXIgXz0wO188dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ubWVyZ2VkQ2VsbHMubGVuZ3RoO18rPTEpe3ZhciBYPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLm1lcmdlZENlbGxzW19dLmdldFJhbmdlKCk7aC5leHBhbmRCeVJhbmdlKFgpJiYoZC5yb3c9aC50by5yb3csZC5jb2w9'@;
put 'aC50by5jb2wsbT0hMCl9fXdoaWxlKG0pfX0se2tleToib25BZnRlckdldENlbGxNZXRhIix2YWx1ZTpmdW5jdGlvbihkLGgsbSl7dmFyIF89dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGQsaCk7XyYmKF8ucm93IT09ZHx8Xy5jb2whPT1oP20uY29weWFibGU9ITE6KG0ucm93c3Bh'@;
put 'bj1fLnJvd3NwYW4sbS5jb2xzcGFuPV8uY29sc3BhbikpfX0se2tleToib25BZnRlclZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlIix2YWx1ZTpmdW5jdGlvbihkKXt2YXIgaD10aGlzLmhvdC5jb3VudENvbHMoKTt0aGlzLm1vZGlmeVZpZXdwb3J0Um93U3RhcnQoZCxoKSx0aGlzLm1v'@;
put 'ZGlmeVZpZXdwb3J0Um93RW5kKGQsaCl9fSx7a2V5OiJtb2RpZnlWaWV3cG9ydFJvd1N0YXJ0Iix2YWx1ZTpmdW5jdGlvbihkLGgpe2Zvcih2YXIgbT10aGlzLmhvdC5yb3dJbmRleE1hcHBlcixfPW0uZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChkLnN0YXJ0Um93KSxPPTA7TzxoO08r'@;
put 'PTEpe3ZhciBYPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChfLE8pO2lmKHBhKFgpKXt2YXIgYWU9bS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KG0uZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KFgucm93LDEpKTtpZihhZTxkLnN0YXJ0Um93KXJldHVybiBkLnN0YXJ0Um93'@;
put 'PWFlLHZvaWQgdGhpcy5tb2RpZnlWaWV3cG9ydFJvd1N0YXJ0KGQsaCl9fX19LHtrZXk6Im1vZGlmeVZpZXdwb3J0Um93RW5kIix2YWx1ZTpmdW5jdGlvbihkLGgpe2Zvcih2YXIgbT10aGlzLmhvdC5yb3dJbmRleE1hcHBlcixfPW0uZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChkLmVu'@;
put 'ZFJvdyksTz0wO088aDtPKz0xKXt2YXIgWD10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoXyxPKTtpZihwYShYKSl7dmFyIHBlPW0uZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChtLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChYLnJvdytYLnJvd3NwYW4tMSwtMSkpO2lmKHBl'@;
put 'PmQuZW5kUm93KXJldHVybiBkLmVuZFJvdz1wZSx2b2lkIHRoaXMubW9kaWZ5Vmlld3BvcnRSb3dFbmQoZCxoKX19fX0se2tleToib25BZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlIix2YWx1ZTpmdW5jdGlvbihkKXt2YXIgaD10aGlzLmhvdC5jb3VudFJvd3MoKTt0aGlz'@;
put 'Lm1vZGlmeVZpZXdwb3J0Q29sdW1uU3RhcnQoZCxoKSx0aGlzLm1vZGlmeVZpZXdwb3J0Q29sdW1uRW5kKGQsaCl9fSx7a2V5OiJtb2RpZnlWaWV3cG9ydENvbHVtblN0YXJ0Iix2YWx1ZTpmdW5jdGlvbihkLGgpe2Zvcih2YXIgbT10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcixfPW0uZ2V0'@;
put 'VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChkLnN0YXJ0Q29sdW1uKSxPPTA7TzxoO08rPTEpe3ZhciBYPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChPLF8pO2lmKHBhKFgpKXt2YXIgYWU9bS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KG0uZ2V0TmVhcmVzdE5vdEhpZGRl'@;
put 'bkluZGV4KFguY29sLDEpKTtpZihhZTxkLnN0YXJ0Q29sdW1uKXJldHVybiBkLnN0YXJ0Q29sdW1uPWFlLHZvaWQgdGhpcy5tb2RpZnlWaWV3cG9ydENvbHVtblN0YXJ0KGQsaCl9fX19LHtrZXk6Im1vZGlmeVZpZXdwb3J0Q29sdW1uRW5kIix2YWx1ZTpmdW5jdGlvbihkLGgpe2Zvcih2YXIg'@;
put 'bT10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcixfPW0uZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChkLmVuZENvbHVtbiksTz0wO088aDtPKz0xKXt2YXIgWD10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoTyxfKTtpZihwYShYKSl7dmFyIHBlPW0uZ2V0UmVuZGVyYWJsZUZy'@;
put 'b21WaXN1YWxJbmRleChtLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChYLmNvbCtYLmNvbHNwYW4tMSwtMSkpO2lmKHBlPmQuZW5kQ29sdW1uKXJldHVybiBkLmVuZENvbHVtbj1wZSx2b2lkIHRoaXMubW9kaWZ5Vmlld3BvcnRDb2x1bW5FbmQoZCxoKX19fX0se2tleToidHJhbnNsYXRlTWVy'@;
put 'Z2VkQ2VsbFRvUmVuZGVyYWJsZSIsdmFsdWU6ZnVuY3Rpb24oZCxoLG0sXyl7dmFyIHBlLGJlLE89dGhpcy5ob3QsWD1PLnJvd0luZGV4TWFwcGVyLGFlPU8uY29sdW1uSW5kZXhNYXBwZXI7cmV0dXJuIHBlPTA9PT1oP1guZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGQsMSk6WC5nZXROZWFy'@;
put 'ZXN0Tm90SGlkZGVuSW5kZXgoZCtoLTEsLTEpLGJlPTA9PT1fP2FlLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChtLDEpOmFlLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChtK18tMSwtMSksW2Q+PTA/WC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHBlKTpkLG0+PTA/YWUuZ2V0UmVu'@;
put 'ZGVyYWJsZUZyb21WaXN1YWxJbmRleChiZSk6bV19fSx7a2V5OiJvbk1vZGlmeUF1dG9maWxsUmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGQsaCl7dGhpcy5hdXRvZmlsbENhbGN1bGF0aW9ucy5jb3JyZWN0U2VsZWN0aW9uQXJlYVNpemUoaCk7dmFyIG09dGhpcy5hdXRvZmlsbENhbGN1bGF0aW9u'@;
put 'cy5nZXREaXJlY3Rpb24oaCxkKSxfPWQ7aWYodGhpcy5hdXRvZmlsbENhbGN1bGF0aW9ucy5kcmFnQXJlYU92ZXJsYXBzQ29sbGVjdGlvbnMoaCxfLG0pKXJldHVybiBoO3ZhciBPPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldFdpdGhpblJhbmdlKHtmcm9tOntyb3c6aFswXSxjb2w6'@;
put 'aFsxXX0sdG86e3JvdzpoWzJdLGNvbDpoWzNdfX0pO3JldHVybiBPJiYoXz10aGlzLmF1dG9maWxsQ2FsY3VsYXRpb25zLnNuYXBEcmFnQXJlYShoLF8sbSxPKSksX319LHtrZXk6Im9uQWZ0ZXJDcmVhdGVDb2wiLHZhbHVlOmZ1bmN0aW9uKGQsaCl7dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rp'@;
put 'b24uc2hpZnRDb2xsZWN0aW9ucygicmlnaHQiLGQsaCl9fSx7a2V5OiJvbkFmdGVyUmVtb3ZlQ29sIix2YWx1ZTpmdW5jdGlvbihkLGgpe3RoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLnNoaWZ0Q29sbGVjdGlvbnMoImxlZnQiLGQsaCl9fSx7a2V5OiJvbkFmdGVyQ3JlYXRlUm93Iix2YWx1'@;
put 'ZTpmdW5jdGlvbihkLGgsbSl7ImF1dG8iIT09bSYmdGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uc2hpZnRDb2xsZWN0aW9ucygiZG93biIsZCxoKX19LHtrZXk6Im9uQWZ0ZXJSZW1vdmVSb3ciLHZhbHVlOmZ1bmN0aW9uKGQsaCl7dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uc2hpZnRD'@;
put 'b2xsZWN0aW9ucygidXAiLGQsaCl9fSx7a2V5OiJvbkFmdGVyQ2hhbmdlIix2YWx1ZTpmdW5jdGlvbihkLGgpeyJBdXRvZmlsbC5maWxsIj09PWgmJnRoaXMuYXV0b2ZpbGxDYWxjdWxhdGlvbnMucmVjcmVhdGVBZnRlckRhdGFQb3B1bGF0aW9uKGQpfX0se2tleToib25CZWZvcmVEcmF3QXJl'@;
put 'YUJvcmRlcnMiLHZhbHVlOmZ1bmN0aW9uKGQsaCl7aWYoaCYmImFyZWEiPT09aCl7dmFyIG09dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtSbih0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRXaXRoaW5SYW5nZShtKSxmdW5jdGlvbihPKXttLmdldEJvdHRvbUVuZENvcm5l'@;
put 'cigpLnJvdz09PU8uZ2V0TGFzdFJvdygpJiZtLmdldEJvdHRvbUVuZENvcm5lcigpLmNvbD09PU8uZ2V0TGFzdENvbHVtbigpJiYoZFsyXT1PLnJvdyxkWzNdPU8uY29sKX0pfX19LHtrZXk6Im9uQWZ0ZXJNb2RpZnlUcmFuc2Zvcm1TdGFydCIsdmFsdWU6ZnVuY3Rpb24oZCxoLG0pe2lmKHRo'@;
put 'aXMuZW5hYmxlZCl7dmFyIF89dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGQucm93LGQuY29sKTtpZihfKXt2YXIgTz1oPjAsWD1oPDAsYWU9bTwwLHBlPW0+MCxiZT1fLnJvdytfLnJvd3NwYW4tMT09dGhpcy5ob3QuY291bnRSb3dzKCktMSx4ZT0wPT09Xy5yb3csVmU9Xy5jb2wr'@;
put 'Xy5jb2xzcGFuLTE9PXRoaXMuaG90LmNvdW50Q29scygpLTE7KE8mJmJlfHxYJiZ4ZXx8cGUmJlZlfHxhZSYmMD09PV8uY29sKSYmKGQucm93PV8ucm93LGQuY29sPV8uY29sKX19fX0se2tleToib25BZnRlckRyYXdTZWxlY3Rpb24iLHZhbHVlOmZ1bmN0aW9uKGQsaCxtLF8pe2lmKG0pcmV0'@;
put 'dXJuIHRoaXMuc2VsZWN0aW9uQ2FsY3VsYXRpb25zLmdldFNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZShkLGgsbSxfKX19LHtrZXk6Im9uQmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uQ2FsY3VsYXRpb25zLmdldFNl'@;
put 'bGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZVRvUmVtb3ZlKCl9fV0sW3trZXk6IlBMVUdJTl9LRVkiLGdldDpmdW5jdGlvbigpe3JldHVybiBrRX19LHtrZXk6IlBMVUdJTl9QUklPUklUWSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDE1MH19XSksYX0oR2EpO2Z1bmN0aW9uIGRnZShsKXtyZXR1'@;
put 'cm4gZnVuY3Rpb24geWJ0KGwpe2lmKEFycmF5LmlzQXJyYXkobCkpcmV0dXJuIGx9KGwpfHxmdW5jdGlvbiB2YnQobCl7aWYodHlwZW9mIFN5bWJvbDwidSImJm51bGwhPWxbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9bFsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKGwpfShsKXx8'@;
put 'ZnVuY3Rpb24gZ2J0KGwsYyl7aWYobCl7aWYoInN0cmluZyI9PXR5cGVvZiBsKXJldHVybiBoZ2UobCxjKTt2YXIgYT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobCkuc2xpY2UoOCwtMSk7aWYoIk9iamVjdCI9PT1hJiZsLmNvbnN0cnVjdG9yJiYoYT1sLmNvbnN0cnVjdG9yLm5h'@;
put 'bWUpLCJNYXAiPT09YXx8IlNldCI9PT1hKXJldHVybiBBcnJheS5mcm9tKGwpO2lmKCJBcmd1bWVudHMiPT09YXx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QoYSkpcmV0dXJuIGhnZShsLGMpfX0obCl8fGZ1bmN0aW9uIG1idCgpe3Rocm93IG5ldyBU'@;
put 'eXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gaGdl'@;
put 'KGwsYyl7KG51bGw9PWN8fGM+bC5sZW5ndGgpJiYoYz1sLmxlbmd0aCk7Zm9yKHZhciBhPTAsZj1uZXcgQXJyYXkoYyk7YTxjO2ErKylmW2FdPWxbYV07cmV0dXJuIGZ9ZnVuY3Rpb24gbWdlKCl7V2woT2wocGdlfHwocGdlPWZ1bmN0aW9uIF9idChsLGMpe3JldHVybiBjfHwoYz1sLnNsaWNl'@;
put 'KDApKSxPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGwse3Jhdzp7dmFsdWU6T2JqZWN0LmZyZWV6ZShjKX19KSl9KFsiUGx1Z2lucyBgY29sdW1uU29ydGluZ2AgYW5kIGBtdWx0aUNvbHVtblNvcnRpbmdgIHNob3VsZCBub3QgYmUgZW5hYmxlZCBzaW11bHRhbmVvdXNs'@;
put 'eS4gXG4gICAgT25seSBgbXVsdGlDb2x1bW5Tb3J0aW5nYCB3aWxsIHdvcmsuIl0sWyJQbHVnaW5zIFxcYGNvbHVtblNvcnRpbmdcXGAgYW5kIFxcYG11bHRpQ29sdW1uU29ydGluZ1xcYCBzaG91bGQgbm90IGJlIGVuYWJsZWQgc2ltdWx0YW5lb3VzbHkuIFxuICAgIE9ubHkgXFxgbXVsdGlD'@;
put 'b2x1bW5Tb3J0aW5nXFxgIHdpbGwgd29yay4iXSkpKSl9ZnVuY3Rpb24gd2J0KGwsYyxhKXt2YXIgZj1bXTtyZXR1cm4hMT09PWF8fGwuaXNDb2x1bW5Tb3J0ZWQoYykmJmwuZ2V0TnVtYmVyT2ZTb3J0ZWRDb2x1bW5zKCk+MSYmZi5wdXNoKCIiLmNvbmNhdCgic29ydCIsIi0iKS5jb25jYXQo'@;
put 'bC5nZXRJbmRleE9mQ29sdW1uSW5Tb3J0UXVldWUoYykrMSkpLGZ9ZnVuY3Rpb24gdWIobCl7cmV0dXJuKHViPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7'@;
put 'cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gdmdlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5l'@;
put 'bnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxrYnQoZi5rZXkpLGYpfX1mdW5jdGlvbiBrYnQobCl7dmFyIGM9ZnVuY3Rpb24gRWJ0KGwsYyl7aWYoIm9iamVjdCIh'@;
put 'PT11YihsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT11YihmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11'@;
put 'c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09dWIoYyk/YzpTdHJpbmcoYyl9ZnVuY3Rpb24gTjEoKXtyZXR1cm4gTjE9dHlwZW9mIFJlZmxlY3Q8InUiJiZSZWZs'@;
put 'ZWN0LmdldD9SZWZsZWN0LmdldC5iaW5kKCk6ZnVuY3Rpb24oYyxhLGYpe3ZhciBkPWZ1bmN0aW9uIHhidChsLGMpe2Zvcig7IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsLGMpJiZudWxsIT09KGw9bDAobCkpOyk7cmV0dXJuIGx9KGMsYSk7aWYoZCl7dmFyIGg9T2Jq'@;
put 'ZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihkLGEpO3JldHVybiBoLmdldD9oLmdldC5jYWxsKGFyZ3VtZW50cy5sZW5ndGg8Mz9jOmYpOmgudmFsdWV9fSxOMS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gSFgobCxjKXtyZXR1cm4oSFg9T2JqZWN0LnNldFByb3RvdHlwZU9m'@;
put 'P09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZixkKXtyZXR1cm4gZi5fX3Byb3RvX189ZCxmfSkobCxjKX1mdW5jdGlvbiBsMChsKXtyZXR1cm4obDA9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oYSl7cmV0'@;
put 'dXJuIGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSl9KShsKX12YXIgTlg9Im11bHRpQ29sdW1uU29ydGluZyIseWdlPSJjb2x1bW5Tb3J0aW5nIjtzM2UoTlgsZnVuY3Rpb24gYmJ0KGwsYyl7cmV0dXJuIGZ1bmN0aW9uKGEsZil7dmFyIGg9ZGdlKGEpLnNsaWNlKDEpLF89'@;
put 'ZGdlKGYpLnNsaWNlKDEpO3JldHVybiBmdW5jdGlvbiBPKFgpe3ZhciBhZT1sW1hdLHBlPWNbWF0sYmU9aFtYXSx4ZT1fW1hdLFZlPXBlLm11bHRpQ29sdW1uU29ydGluZyxsdD0oVmUuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeT9WZS5jb21wYXJlRnVuY3Rpb25GYWN0b3J5OnUzZShwZS50eXBl'@;
put 'KSkoYWUscGUsVmUpKGJlLHhlKTtpZigwPT09bHQpe3ZhciBkdD1YKzE7aWYodHlwZW9mIGNbZHRdPCJ1IilyZXR1cm4gTyhkdCl9cmV0dXJuIGx0fSgwKX19KTt2YXIgUGJ0PWZ1bmN0aW9uKGwpeyFmdW5jdGlvbiBBYnQobCxjKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyYmbnVsbCE9PWMp'@;
put 'dGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtsLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGMmJmMucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6bCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9'@;
put 'fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksYyYmSFgobCxjKX0oYSxsKTt2YXIgYz1mdW5jdGlvbiBUYnQobCl7dmFyIGM9ZnVuY3Rpb24gSWJ0KCl7aWYodHlwZW9mIFJlZmxlY3Q+InUifHwhUmVmbGVjdC5jb25zdHJ1Y3R8fFJlZmxlY3Qu'@;
put 'Y29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sZnVuY3Rpb24oKXt9KSksITB9Y2F0Y2h7cmV0dXJuITF9'@;
put 'fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciBkLGY9bDAobCk7aWYoYyl7dmFyIGg9bDAodGhpcykuY29uc3RydWN0b3I7ZD1SZWZsZWN0LmNvbnN0cnVjdChmLGFyZ3VtZW50cyxoKX1lbHNlIGQ9Zi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uIE9idChsLGMpe2lmKGMm'@;
put 'Jigib2JqZWN0Ij09PXViKGMpfHwiZnVuY3Rpb24iPT10eXBlb2YgYykpcmV0dXJuIGM7aWYodm9pZCAwIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbiBEYnQo'@;
put 'bCl7aWYodm9pZCAwPT09bCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBsfShsKX0odGhpcyxkKX19KGEpO2Z1bmN0aW9uIGEoZil7dmFyIGQ7cmV0dXJuIGZ1bmN0aW9u'@;
put 'IFNidChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGEpLChkPWMuY2FsbCh0aGlzLGYpKS5wbHVnaW5LZXk9TlgsZH1yZXR1cm4gZnVuY3Rpb24gTWJ0KGwsYyxhKXtjJiZ2Z2Uo'@;
put 'bC5wcm90b3R5cGUsYyksYSYmdmdlKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGEsW3trZXk6ImlzRW5hYmxlZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gTjEobDAoYS5wcm90b3R5cGUpLCJpc0VuYWJsZWQiLHRoaXMpLmNhbGwo'@;
put 'dGhpcyl9fSx7a2V5OiJlbmFibGVQbHVnaW4iLHZhbHVlOmZ1bmN0aW9uKCl7IXRoaXMuZW5hYmxlZCYmdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt0aGlzLnBsdWdpbktleV0mJnRoaXMuaG90LmdldFNldHRpbmdzKClbeWdlXSYmbWdlKCksTjEobDAoYS5wcm90b3R5cGUpLCJlbmFibGVQbHVn'@;
put 'aW4iLHRoaXMpLmNhbGwodGhpcyl9fSx7a2V5OiJkaXNhYmxlUGx1Z2luIix2YWx1ZTpmdW5jdGlvbigpe04xKGwwKGEucHJvdG90eXBlKSwiZGlzYWJsZVBsdWdpbiIsdGhpcykuY2FsbCh0aGlzKX19LHtrZXk6InNvcnQiLHZhbHVlOmZ1bmN0aW9uKGQpe04xKGwwKGEucHJvdG90eXBlKSwi'@;
put 'c29ydCIsdGhpcykuY2FsbCh0aGlzLGQpfX0se2tleToiY2xlYXJTb3J0Iix2YWx1ZTpmdW5jdGlvbigpe04xKGwwKGEucHJvdG90eXBlKSwiY2xlYXJTb3J0Iix0aGlzKS5jYWxsKHRoaXMpfX0se2tleToiaXNTb3J0ZWQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIE4xKGwwKGEucHJvdG90'@;
put 'eXBlKSwiaXNTb3J0ZWQiLHRoaXMpLmNhbGwodGhpcyl9fSx7a2V5OiJnZXRTb3J0Q29uZmlnIix2YWx1ZTpmdW5jdGlvbihkKXtyZXR1cm4gTjEobDAoYS5wcm90b3R5cGUpLCJnZXRTb3J0Q29uZmlnIix0aGlzKS5jYWxsKHRoaXMsZCl9fSx7a2V5OiJzZXRTb3J0Q29uZmlnIix2YWx1ZTpm'@;
put 'dW5jdGlvbihkKXtOMShsMChhLnByb3RvdHlwZSksInNldFNvcnRDb25maWciLHRoaXMpLmNhbGwodGhpcyxkKX19LHtrZXk6ImdldE5vcm1hbGl6ZWRTb3J0Q29uZmlncyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9h'@;
put 'cmd1bWVudHNbMF06W107cmV0dXJuIEFycmF5LmlzQXJyYXkoZCk/ZDpbZF19fSx7a2V5OiJ1cGRhdGVIZWFkZXJDbGFzc2VzIix2YWx1ZTpmdW5jdGlvbihkKXtmb3IodmFyIGgsbT1hcmd1bWVudHMubGVuZ3RoLF89bmV3IEFycmF5KG0+MT9tLTE6MCksTz0xO088bTtPKyspX1tPLTFdPWFy'@;
put 'Z3VtZW50c1tPXTsoaD1OMShsMChhLnByb3RvdHlwZSksInVwZGF0ZUhlYWRlckNsYXNzZXMiLHRoaXMpKS5jYWxsLmFwcGx5KGgsW3RoaXMsZF0uY29uY2F0KF8pKSxKbyhkLGZ1bmN0aW9uIENidChsKXt2YXIgYz1sLmNsYXNzTmFtZS5zcGxpdCgiICIpLGE9bmV3IFJlZ0V4cCgiXiIuY29u'@;
put 'Y2F0KCJzb3J0IiwiLVswLTldezEsMn0kIikpO3JldHVybiBjLmZpbHRlcihmdW5jdGlvbihmKXtyZXR1cm4gYS50ZXN0KGYpfSl9KGQpKSwhMSE9PXRoaXMuZW5hYmxlZCYmZ2koZCx3YnQuYXBwbHkodm9pZCAwLF8pKX19LHtrZXk6Im9uVXBkYXRlU2V0dGluZ3MiLHZhbHVlOmZ1bmN0aW9u'@;
put 'KGQpe3RoaXMuaG90LmdldFNldHRpbmdzKClbdGhpcy5wbHVnaW5LZXldJiZ0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3lnZV0mJm1nZSgpLE4xKGwwKGEucHJvdG90eXBlKSwib25VcGRhdGVTZXR0aW5ncyIsdGhpcykuY2FsbCh0aGlzLGQpfX0se2tleToib25BZnRlck9uQ2VsbE1vdXNlRG93'@;
put 'biIsdmFsdWU6ZnVuY3Rpb24oZCxoKXshMSE9PVZLKGgucm93LGguY29sLGQpJiZ0aGlzLndhc0NsaWNrYWJsZUhlYWRlckNsaWNrZWQoZCxoLmNvbCkmJih0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5pc0N0cmxQcmVzc2VkKCk/KHRoaXMuaG90LmRlc2VsZWN0Q2VsbCgpLHRoaXMu'@;
put 'aG90LnNlbGVjdENvbHVtbnMoaC5jb2wpLHRoaXMuc29ydCh0aGlzLmdldE5leHRTb3J0Q29uZmlnKGguY29sLCJhcHBlbmQiKSkpOnRoaXMuc29ydCh0aGlzLmdldENvbHVtbk5leHRDb25maWcoaC5jb2wpKSl9fV0sW3trZXk6IlBMVUdJTl9LRVkiLGdldDpmdW5jdGlvbigpe3JldHVybiBO'@;
put 'WH19LHtrZXk6IlBMVUdJTl9QUklPUklUWSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDE3MH19XSksYX0oeTNlKTtmdW5jdGlvbiBjYihsKXtyZXR1cm4oY2I9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0'@;
put 'dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiBiZ2UobCxjKXtmb3IodmFyIGE9MDthPGMu'@;
put 'bGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLE5idChmLmtleSksZil9fWZ1bmN0aW9uIE5idChsKXt2YXIgYz1mdW5j'@;
put 'dGlvbiBWYnQobCxjKXtpZigib2JqZWN0IiE9PWNiKGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PWNiKGYpKXJldHVybiBmO3Rocm93IG5ldyBU'@;
put 'eXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1jYihjKT9jOlN0cmluZyhjKX1mdW5jdGlvbiBBUCgpe3JldHVybiBB'@;
put 'UD10eXBlb2YgUmVmbGVjdDwidSImJlJlZmxlY3QuZ2V0P1JlZmxlY3QuZ2V0LmJpbmQoKTpmdW5jdGlvbihjLGEsZil7dmFyIGQ9ZnVuY3Rpb24gQmJ0KGwsYyl7Zm9yKDshT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGwsYykmJm51bGwhPT0obD1mYihsKSk7KTtyZXR1'@;
put 'cm4gbH0oYyxhKTtpZihkKXt2YXIgaD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGQsYSk7cmV0dXJuIGguZ2V0P2guZ2V0LmNhbGwoYXJndW1lbnRzLmxlbmd0aDwzP2M6Zik6aC52YWx1ZX19LEFQLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBWWChsLGMpe3JldHVy'@;
put 'bihWWD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihmLGQpe3JldHVybiBmLl9fcHJvdG9fXz1kLGZ9KShsLGMpfWZ1bmN0aW9uIGZiKGwpe3JldHVybihmYj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlw'@;
put 'ZU9mLmJpbmQoKTpmdW5jdGlvbihhKXtyZXR1cm4gYS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihhKX0pKGwpfXZhciAkYnQ9ZnVuY3Rpb24obCl7IWZ1bmN0aW9uIGpidChsLGMpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjJiZudWxsIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9y'@;
put 'KCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2wucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYyYmYy5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpsLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJv'@;
put 'cGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxjJiZWWChsLGMpfShhLGwpO3ZhciBjPWZ1bmN0aW9uIHpidChsKXt2YXIgYz1mdW5jdGlvbiBZYnQoKXtpZih0eXBlb2YgUmVmbGVjdD4idSJ8fCFSZWZsZWN0LmNvbnN0cnVjdHx8UmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1'@;
put 'cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSxmdW5jdGlvbigpe30pKSwhMH1jYXRjaHtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9u'@;
put 'KCl7dmFyIGQsZj1mYihsKTtpZihjKXt2YXIgaD1mYih0aGlzKS5jb25zdHJ1Y3RvcjtkPVJlZmxlY3QuY29uc3RydWN0KGYsYXJndW1lbnRzLGgpfWVsc2UgZD1mLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24gVWJ0KGwsYyl7aWYoYyYmKCJvYmplY3QiPT09Y2IoYyl8'@;
put 'fCJmdW5jdGlvbiI9PXR5cGVvZiBjKSlyZXR1cm4gYztpZih2b2lkIDAhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uIFpidChsKXtpZih2b2lkIDA9PT1sKXRo'@;
put 'cm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGx9KGwpfSh0aGlzLGQpfX0oYSk7ZnVuY3Rpb24gYShmKXt2YXIgZDtyZXR1cm4gZnVuY3Rpb24gRmJ0KGwsYyl7aWYoIShsIGlu'@;
put 'c3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsYSksKGQ9Yy5jYWxsKHRoaXMsZikpLmRyYWdnZWQ9W10sZC5ldmVudE1hbmFnZXI9bnVsbCxkLmxhc3RTZXRDZWxsPW51bGwsZH1yZXR1cm4gZnVuY3Rpb24g'@;
put 'SGJ0KGwsYyxhKXtjJiZiZ2UobC5wcm90b3R5cGUsYyksYSYmYmdlKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGEsW3trZXk6ImlzRW5hYmxlZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gUGQoKX19LHtrZXk6ImVuYWJsZVBsdWdp'@;
put 'biIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLmV2ZW50TWFuYWdlcnx8KHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBmcyh0aGlzKSksdGhpcy5yZWdpc3Rlckxpc3RlbmVycygpLEFQKGZiKGEucHJvdG90eXBlKSwiZW5hYmxlUGx1Z2luIix0aGlzKS5jYWxsKHRoaXMpKX19'@;
put 'LHtrZXk6InJlZ2lzdGVyTGlzdGVuZXJzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXMsaD10aGlzLG09dGhpcy5ob3Qucm9vdEVsZW1lbnQ7ZnVuY3Rpb24gXyhPKXtpZigxPT09aC5kcmFnZ2VkLmxlbmd0aClyZXR1cm4gaC5kcmFnZ2VkLnNwbGljZSgwLGguZHJhZ2dlZC5sZW5ndGgp'@;
put 'LCEwO3ZhciBYPWguZHJhZ2dlZC5pbmRleE9mKE8pO2lmKC0xPT09WClyZXR1cm4hMTswPT09WD9oLmRyYWdnZWQ9aC5kcmFnZ2VkLnNsaWNlKDAsMSk6MT09PVgmJihoLmRyYWdnZWQ9aC5kcmFnZ2VkLnNsaWNlKC0xKSl9dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihtLCJ0'@;
put 'b3VjaHN0YXJ0IixmdW5jdGlvbihPKXt2YXIgWDtyZXR1cm4gWW8oTy50YXJnZXQsInRvcFNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIik/KFg9aC5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxoLmRyYWdnZWQucHVzaCgidG9wIiksaC50b3VjaFN0YXJ0UmFuZ2U9e3dpZHRoOlguZ2V0V2lk'@;
put 'dGgoKSxoZWlnaHQ6WC5nZXRIZWlnaHQoKSxkaXJlY3Rpb246WC5nZXREaXJlY3Rpb24oKX0sTy5wcmV2ZW50RGVmYXVsdCgpLCExKTpZbyhPLnRhcmdldCwiYm90dG9tU2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEiKT8oWD1oLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGguZHJhZ2dlZC5w'@;
put 'dXNoKCJib3R0b20iKSxoLnRvdWNoU3RhcnRSYW5nZT17d2lkdGg6WC5nZXRXaWR0aCgpLGhlaWdodDpYLmdldEhlaWdodCgpLGRpcmVjdGlvbjpYLmdldERpcmVjdGlvbigpfSxPLnByZXZlbnREZWZhdWx0KCksITEpOnZvaWQgMH0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVu'@;
put 'ZXIobSwidG91Y2hlbmQiLGZ1bmN0aW9uKE8pe3JldHVybiBZbyhPLnRhcmdldCwidG9wU2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEiKT8oXy5jYWxsKGgsInRvcCIpLGgudG91Y2hTdGFydFJhbmdlPXZvaWQgMCxPLnByZXZlbnREZWZhdWx0KCksITEpOllvKE8udGFyZ2V0LCJib3R0b21TZWxl'@;
put 'Y3Rpb25IYW5kbGUtSGl0QXJlYSIpPyhfLmNhbGwoaCwiYm90dG9tIiksaC50b3VjaFN0YXJ0UmFuZ2U9dm9pZCAwLE8ucHJldmVudERlZmF1bHQoKSwhMSk6dm9pZCAwfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihtLCJ0b3VjaG1vdmUiLGZ1bmN0aW9uKE8pe3ZhciBh'@;
put 'ZSxwZSxiZSx4ZSxWZSxaZTtpZigwIT09aC5kcmFnZ2VkLmxlbmd0aCl7dmFyIGx0PWQuaG90LnJvb3REb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KE8udG91Y2hlc1swXS5jbGllbnRYLE8udG91Y2hlc1swXS5jbGllbnRZKTshbHR8fGx0PT09aC5sYXN0U2V0Q2VsbHx8KCgiVEQiPT09bHQu'@;
put 'bm9kZU5hbWV8fCJUSCI9PT1sdC5ub2RlTmFtZSkmJigtMT09PShhZT1oLmhvdC5nZXRDb29yZHMobHQpKS5jb2wmJihhZS5jb2w9MCksYmU9KHBlPWguaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpLmdldFdpZHRoKCkseGU9cGUuZ2V0SGVpZ2h0KCksVmU9cGUuZ2V0RGlyZWN0aW9uKCks'@;
put 'MT09PWJlJiYxPT09eGUmJmguaG90LnNlbGVjdGlvbi5zZXRSYW5nZUVuZChhZSksbnVsbCE9PShaZT1oLmdldEN1cnJlbnRSYW5nZUNvb3JkcyhwZSxhZSxoLnRvdWNoU3RhcnRSYW5nZS5kaXJlY3Rpb24sVmUsaC5kcmFnZ2VkWzBdKSkuc3RhcnQmJmguaG90LnNlbGVjdGlvbi5zZXRSYW5n'@;
put 'ZVN0YXJ0KFplLnN0YXJ0KSxoLmhvdC5zZWxlY3Rpb24uc2V0UmFuZ2VFbmQoWmUuZW5kKSxoLmxhc3RTZXRDZWxsPWx0KSxPLnByZXZlbnREZWZhdWx0KCkpfX0pfX0se2tleToiZ2V0Q3VycmVudFJhbmdlQ29vcmRzIix2YWx1ZTpmdW5jdGlvbihkLGgsbSxfLE8pe3ZhciBYPWQuZ2V0VG9w'@;
put 'U3RhcnRDb3JuZXIoKSxhZT1kLmdldEJvdHRvbUVuZENvcm5lcigpLHBlPWQuZ2V0Qm90dG9tU3RhcnRDb3JuZXIoKSxiZT1kLmdldFRvcEVuZENvcm5lcigpLHhlPXtzdGFydDpudWxsLGVuZDpudWxsfTtzd2l0Y2gobSl7Y2FzZSJORS1TVyI6c3dpdGNoKF8pe2Nhc2UiTkUtU1ciOmNhc2Ui'@;
put 'TlctU0UiOnhlPSJ0b3AiPT09Tz97c3RhcnQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoaC5yb3csZC5oaWdobGlnaHQuY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMocGUucm93LGguY29sKX06e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGQuaGlnaGxp'@;
put 'Z2h0LnJvdyxoLmNvbCksZW5kOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGgucm93LFguY29sKX07YnJlYWs7Y2FzZSJTRS1OVyI6ImJvdHRvbSI9PT1PJiYoeGU9e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGFlLnJvdyxoLmNvbCksZW5kOnRoaXMuaG90Ll9jcmVhdGVD'@;
put 'ZWxsQ29vcmRzKGgucm93LFguY29sKX0pfWJyZWFrO2Nhc2UiTlctU0UiOnN3aXRjaChfKXtjYXNlIk5FLVNXIjoidG9wIj09PU8/eGU9e3N0YXJ0OmgsZW5kOnBlfTp4ZS5lbmQ9aDticmVhaztjYXNlIk5XLVNFIjoidG9wIj09PU8/eGU9e3N0YXJ0OmgsZW5kOmFlfTp4ZS5lbmQ9aDticmVh'@;
put 'aztjYXNlIlNFLU5XIjoidG9wIj09PU8/eGU9e3N0YXJ0OmgsZW5kOlh9OnhlLmVuZD1oO2JyZWFrO2Nhc2UiU1ctTkUiOiJ0b3AiPT09Tz94ZT17c3RhcnQ6aCxlbmQ6YmV9OnhlLmVuZD1ofWJyZWFrO2Nhc2UiU1ctTkUiOnN3aXRjaChfKXtjYXNlIk5XLVNFIjp4ZT0iYm90dG9tIj09PU8/'@;
put 'e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGgucm93LFguY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMocGUucm93LGguY29sKX06e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKFgucm93LGguY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxD'@;
put 'b29yZHMoaC5yb3csYWUuY29sKX07YnJlYWs7Y2FzZSJTVy1ORSI6eGU9InRvcCI9PT1PP3tzdGFydDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhkLmhpZ2hsaWdodC5yb3csaC5jb2wpLGVuZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhoLnJvdyxhZS5jb2wpfTp7c3RhcnQ6dGhp'@;
put 'cy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoaC5yb3csWC5jb2wpLGVuZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhYLnJvdyxoLmNvbCl9O2JyZWFrO2Nhc2UiU0UtTlciOiJib3R0b20iPT09Tz94ZT17c3RhcnQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoaC5yb3csYmUuY29sKSxl'@;
put 'bmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoWC5yb3csaC5jb2wpfToidG9wIj09PU8mJih4ZT17c3RhcnQ6cGUsZW5kOmh9KX1icmVhaztjYXNlIlNFLU5XIjpzd2l0Y2goXyl7Y2FzZSJOVy1TRSI6Y2FzZSJORS1TVyI6Y2FzZSJTVy1ORSI6InRvcCI9PT1PJiYoeGUuZW5kPWgpO2Jy'@;
put 'ZWFrO2Nhc2UiU0UtTlciOiJ0b3AiPT09Tz94ZS5lbmQ9aDp4ZT17c3RhcnQ6aCxlbmQ6WH19fXJldHVybiB4ZX19LHtrZXk6ImlzRHJhZ2dlZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kcmFnZ2VkLmxlbmd0aD4wfX1dLFt7a2V5OiJQTFVHSU5fS0VZIixnZXQ6ZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4ibXVsdGlwbGVTZWxlY3Rpb25IYW5kbGVzIn19LHtrZXk6IlBMVUdJTl9QUklPUklUWSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDE2MH19XSksYX0oR2EpO2Z1bmN0aW9uIEJYKCl7dmFyIGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1l'@;
put 'bnRzWzBdOnt9LGM9bC5sYWJlbCxmPWwuY29sc3BhbixoPWwub3JpZ0NvbHNwYW4sXz1sLmNvbGxhcHNpYmxlLFg9bC5jcm9zc0hpZGRlbkNvbHVtbnMscGU9bC5pc0NvbGxhcHNlZCx4ZT1sLmlzSGlkZGVuLFplPWwuaXNSb290LGR0PWwuaXNQbGFjZWhvbGRlcjtyZXR1cm57bGFiZWw6dm9p'@;
put 'ZCAwPT09Yz8iIjpjLGNvbHNwYW46dm9pZCAwPT09Zj8xOmYsb3JpZ0NvbHNwYW46dm9pZCAwPT09aD8xOmgsY29sbGFwc2libGU6dm9pZCAwIT09XyYmXyxpc0NvbGxhcHNlZDp2b2lkIDAhPT1wZSYmcGUsY3Jvc3NIaWRkZW5Db2x1bW5zOnZvaWQgMD09PVg/W106WCxpc0hpZGRlbjp2b2lk'@;
put 'IDAhPT14ZSYmeGUsaXNSb290OnZvaWQgMCE9PVplJiZaZSxpc1BsYWNlaG9sZGVyOnZvaWQgMCE9PWR0JiZkdH19ZnVuY3Rpb24gd2dlKGwpe3JldHVybiBmdW5jdGlvbiBKYnQobCl7aWYoQXJyYXkuaXNBcnJheShsKSlyZXR1cm4galgobCl9KGwpfHxmdW5jdGlvbiBYYnQobCl7aWYodHlw'@;
put 'ZW9mIFN5bWJvbDwidSImJm51bGwhPWxbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9bFsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKGwpfShsKXx8ZnVuY3Rpb24gcWJ0KGwsYyl7aWYobCl7aWYoInN0cmluZyI9PXR5cGVvZiBsKXJldHVybiBqWChsLGMpO3ZhciBhPU9iamVjdC5w'@;
put 'cm90b3R5cGUudG9TdHJpbmcuY2FsbChsKS5zbGljZSg4LC0xKTtpZigiT2JqZWN0Ij09PWEmJmwuY29uc3RydWN0b3ImJihhPWwuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1hfHwiU2V0Ij09PWEpcmV0dXJuIEFycmF5LmZyb20obCk7aWYoIkFyZ3VtZW50cyI9PT1hfHwvXig/OlVpfEkp'@;
put 'bnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChhKSlyZXR1cm4galgobCxjKX19KGwpfHxmdW5jdGlvbiBLYnQoKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0'@;
put 'ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBqWChsLGMpeyhudWxsPT1jfHxjPmwubGVuZ3RoKSYmKGM9bC5sZW5ndGgpO2Zvcih2YXIgYT0wLGY9bmV3IEFycmF5KGMpO2E8YzthKyspZlthXT1s'@;
put 'W2FdO3JldHVybiBmfWZ1bmN0aW9uIEVFKGwpe3JldHVybihFRT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBl'@;
put 'b2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfXZhciBlX3Q9WyJyb3ciLCJjb2wiXTtmdW5jdGlvbiBDZ2UobCxjKXt2YXIgYT1PYmplY3Qua2V5cyhsKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlT'@;
put 'eW1ib2xzKXt2YXIgZj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGwpO2MmJihmPWYuZmlsdGVyKGZ1bmN0aW9uKGQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGwsZCkuZW51bWVyYWJsZX0pKSxhLnB1c2guYXBwbHkoYSxmKX1yZXR1cm4gYX1mdW5jdGlv'@;
put 'biBuX3QobCxjLGEpe3JldHVybihjPU1nZShjKSlpbiBsP09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLGMse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpsW2NdPWEsbH1mdW5jdGlvbiBTZ2UobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2Er'@;
put 'Kyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLE1nZShmLmtleSksZil9fWZ1bmN0aW9uIE1nZShsKXt2YXIgYz1mdW5jdGlvbiBsX3Qo'@;
put 'bCxjKXtpZigib2JqZWN0IiE9PUVFKGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PUVFKGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3Io'@;
put 'IkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1FRShjKT9jOlN0cmluZyhjKX1mdW5jdGlvbiB6WChsLGMsYSl7KGZ1bmN0aW9uIHNf'@;
put 'dChsLGMpe2lmKGMuaGFzKGwpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShsLGMpLGMuc2V0KGwsYSl9ZnVuY3Rpb24gWmQobCxjKXtyZXR1cm4gZnVuY3Rpb24gdV90KGwsYyl7'@;
put 'cmV0dXJuIGMuZ2V0P2MuZ2V0LmNhbGwobCk6Yy52YWx1ZX0obCxrZ2UobCxjLCJnZXQiKSl9ZnVuY3Rpb24geEUobCxjLGEpe3JldHVybiBmdW5jdGlvbiBjX3QobCxjLGEpe2lmKGMuc2V0KWMuc2V0LmNhbGwobCxhKTtlbHNle2lmKCFjLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3Io'@;
put 'ImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtjLnZhbHVlPWF9fShsLGtnZShsLGMsInNldCIpLGEpLGF9ZnVuY3Rpb24ga2dlKGwsYyxhKXtpZighYy5oYXMobCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrYSsiIHByaXZhdGUgZmllbGQg'@;
put 'b24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGMuZ2V0KGwpfXZhciBFZ2U9WyJsYWJlbCIsImNvbGxhcHNpYmxlIl0sajM9bmV3IFdlYWtNYXAscDY9bmV3IFdlYWtNYXAsVVg9bmV3IFdlYWtNYXAsZl90PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbCgpeyhmdW5jdGlvbiBvX3QobCxjKXtpZighKGwg'@;
put 'aW5zdGFuY2VvZiBjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsbCkselgodGhpcyxqMyx7d3JpdGFibGU6ITAsdmFsdWU6W119KSx6WCh0aGlzLHA2LHt3cml0YWJsZTohMCx2YWx1ZTowfSkselgodGhpcyxVWCx7d3Jp'@;
put 'dGFibGU6ITAsdmFsdWU6MS8wfSl9cmV0dXJuIGZ1bmN0aW9uIGFfdChsLGMsYSl7YyYmU2dlKGwucHJvdG90eXBlLGMpLGEmJlNnZShsLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShsLFt7a2V5OiJzZXRDb2x1bW5zTGltaXQiLHZhbHVl'@;
put 'OmZ1bmN0aW9uKGEpe3hFKHRoaXMsVVgsYSl9fSx7a2V5OiJzZXREYXRhIix2YWx1ZTpmdW5jdGlvbigpe3hFKHRoaXMsajMsZnVuY3Rpb24gUWJ0KGwpe3ZhciBjPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxLzAsYT1bXTtpZigwPT09'@;
put 'YylyZXR1cm4gYTtSbihsLGZ1bmN0aW9uKGQpe3ZhciBoPVtdLG09MDthLnB1c2goaCksUm4oZCxmdW5jdGlvbihfKXt2YXIgTz1CWCgpO2lmKHBhKF8pKXt2YXIgYWU9Xy5jb2xzcGFuO08ubGFiZWw9TXMoXy5sYWJlbCksIm51bWJlciI9PXR5cGVvZiBhZSYmYWU+MSYmKE8uY29sc3Bhbj1h'@;
put 'ZSxPLm9yaWdDb2xzcGFuPWFlKX1lbHNlIE8ubGFiZWw9TXMoXyk7dmFyIHBlPSExO2lmKChtKz1PLm9yaWdDb2xzcGFuKT49YyYmKE8uY29sc3Bhbj1PLm9yaWdDb2xzcGFuLShtLWMpLE8ub3JpZ0NvbHNwYW49Ty5jb2xzcGFuLHBlPSEwKSxoLnB1c2goTyksTy5jb2xzcGFuPjEpZm9yKHZh'@;
put 'ciBiZT0wO2JlPE8uY29sc3Bhbi0xO2JlKyspaC5wdXNoKHtsYWJlbDoiIixpc1BsYWNlaG9sZGVyOiEwfSk7cmV0dXJuIXBlfSl9KTt2YXIgZj1NYXRoLm1heC5hcHBseShNYXRoLHdnZShoYShhLGZ1bmN0aW9uKGQpe3JldHVybiBkLmxlbmd0aH0pKSk7cmV0dXJuIFJuKGEsZnVuY3Rpb24o'@;
put 'ZCl7aWYoZC5sZW5ndGg8Zil7dmFyIGg9aGEobmV3IEFycmF5KGYtZC5sZW5ndGgpLGZ1bmN0aW9uKCl7cmV0dXJuIEJYKCl9KTtkLnNwbGljZS5hcHBseShkLFtkLmxlbmd0aCwwXS5jb25jYXQod2dlKGgpKSl9fSksYX0oYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNb'@;
put 'MF0/YXJndW1lbnRzWzBdOltdLFpkKHRoaXMsVVgpKSkseEUodGhpcyxwNixaZCh0aGlzLGozKS5sZW5ndGgpfX0se2tleToiZ2V0RGF0YSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gWmQodGhpcyxqMyl9fSx7a2V5OiJtZXJnZVdpdGgiLHZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBmPXRoaXM7'@;
put 'Um4oYSxmdW5jdGlvbihkKXt2YXIgaD1kLnJvdyxtPWQuY29sLF89ZnVuY3Rpb24gcl90KGwsYyl7aWYobnVsbD09bClyZXR1cm57fTt2YXIgZixkLGE9ZnVuY3Rpb24gaV90KGwsYyl7aWYobnVsbD09bClyZXR1cm57fTt2YXIgZCxoLGE9e30sZj1PYmplY3Qua2V5cyhsKTtmb3IoaD0wO2g8'@;
put 'Zi5sZW5ndGg7aCsrKSEoYy5pbmRleE9mKGQ9ZltoXSk+PTApJiYoYVtkXT1sW2RdKTtyZXR1cm4gYX0obCxjKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgaD1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGwpO2ZvcihkPTA7ZDxoLmxlbmd0aDtkKyspIShjLmlu'@;
put 'ZGV4T2YoZj1oW2RdKT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChsLGYpJiYoYVtmXT1sW2ZdKX1yZXR1cm4gYX0oZCxlX3QpLE89Zi5nZXRIZWFkZXJTZXR0aW5ncyhoLG0pO251bGwhPT1PJiZydShPLF8sRWdlKX0pfX0se2tleToibWFwIix2YWx1'@;
put 'ZTpmdW5jdGlvbihhKXtSbihaZCh0aGlzLGozKSxmdW5jdGlvbihmKXtSbihmLGZ1bmN0aW9uKGQpe3ZhciBoPWEoZnVuY3Rpb24gdF90KGwpe2Zvcih2YXIgYz0xO2M8YXJndW1lbnRzLmxlbmd0aDtjKyspe3ZhciBhPW51bGwhPWFyZ3VtZW50c1tjXT9hcmd1bWVudHNbY106e307YyUyP0Nn'@;
put 'ZShPYmplY3QoYSksITApLmZvckVhY2goZnVuY3Rpb24oZil7bl90KGwsZixhW2ZdKX0pOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGwsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoYSkpOkNnZShPYmplY3QoYSkpLmZv'@;
put 'ckVhY2goZnVuY3Rpb24oZil7T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsZixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGEsZikpfSl9cmV0dXJuIGx9KHt9LGQpKTtwYShoKSYmcnUoZCxoLEVnZSl9KX0pfX0se2tleToiZ2V0SGVhZGVyU2V0dGluZ3MiLHZhbHVlOmZ1bmN0aW9u'@;
put 'KGEsZil7dmFyIGQ7aWYoYT49WmQodGhpcyxwNil8fGE8MClyZXR1cm4gbnVsbDt2YXIgaD1aZCh0aGlzLGozKVthXTtyZXR1cm4gZj49aC5sZW5ndGg/bnVsbDpudWxsIT09KGQ9aFtmXSkmJnZvaWQgMCE9PWQ/ZDpudWxsfX0se2tleToiZ2V0SGVhZGVyc1NldHRpbmdzIix2YWx1ZTpmdW5j'@;
put 'dGlvbihhLGYpe3ZhciBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToxLGg9W107aWYoYT49WmQodGhpcyxwNil8fGE8MClyZXR1cm4gaDtmb3IodmFyIG09WmQodGhpcyxqMylbYV0sXz0wLE89ZjtPPG0ubGVuZ3RoO08rKyl7dmFyIFg9'@;
put 'bVtPXTtpZihYLmlzUGxhY2Vob2xkZXIpdGhyb3cgbmV3IEVycm9yKCJUaGUgZmlyc3QgY29sdW1uIHNldHRpbmdzIGNhbm5vdCBvdmVybGFwIHRoZSBvdGhlciBoZWFkZXIgbGF5ZXJzIik7aWYoXys9WC5jb2xzcGFuLGgucHVzaChYKSxYLmNvbHNwYW4+MSYmKE8rPVguY29sc3Bhbi0xKSxf'@;
put 'PT09ZClicmVhaztpZihfPmQpdGhyb3cgbmV3IEVycm9yKCJUaGUgbGFzdCBjb2x1bW4gc2V0dGluZ3MgY2Fubm90IG92ZXJsYXAgdGhlIG90aGVyIGhlYWRlciBsYXllcnMiKX1yZXR1cm4gaH19LHtrZXk6ImdldExheWVyc0NvdW50Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBaZCh0aGlz'@;
put 'LHA2KX19LHtrZXk6ImdldENvbHVtbnNDb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gWmQodGhpcyxwNik+MD9aZCh0aGlzLGozKVswXS5sZW5ndGg6MH19LHtrZXk6ImNsZWFyIix2YWx1ZTpmdW5jdGlvbigpe3hFKHRoaXMsajMsW10pLHhFKHRoaXMscDYsMCl9fV0pLGx9KCk7ZnVu'@;
put 'Y3Rpb24gQUUobCl7cmV0dXJuKEFFPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29u'@;
put 'c3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24geGdlKGwsYyl7dmFyIGE9T2JqZWN0LmtleXMobCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGY9T2JqZWN0LmdldE93blByb3BlcnR5U3lt'@;
put 'Ym9scyhsKTtjJiYoZj1mLmZpbHRlcihmdW5jdGlvbihkKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihsLGQpLmVudW1lcmFibGV9KSksYS5wdXNoLmFwcGx5KGEsZil9cmV0dXJuIGF9ZnVuY3Rpb24gQWdlKGwpe2Zvcih2YXIgYz0xO2M8YXJndW1lbnRzLmxlbmd0'@;
put 'aDtjKyspe3ZhciBhPW51bGwhPWFyZ3VtZW50c1tjXT9hcmd1bWVudHNbY106e307YyUyP3hnZShPYmplY3QoYSksITApLmZvckVhY2goZnVuY3Rpb24oZil7VFAobCxmLGFbZl0pfSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobCxP'@;
put 'YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhhKSk6eGdlKE9iamVjdChhKSkuZm9yRWFjaChmdW5jdGlvbihmKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobCxmLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYSxmKSl9KX1yZXR1cm4gbH1mdW5jdGlvbiBUZ2UobCxjKXtm'@;
put 'b3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLE9nZShmLmtleSksZil9fWZ1bmN0aW9uIFRQ'@;
put 'KGwsYyxhKXtyZXR1cm4oYz1PZ2UoYykpaW4gbD9PYmplY3QuZGVmaW5lUHJvcGVydHkobCxjLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6bFtjXT1hLGx9ZnVuY3Rpb24gT2dlKGwpe3ZhciBjPWZ1bmN0aW9uIHBfdChsLGMpe2lmKCJvYmpl'@;
put 'Y3QiIT09QUUobCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09QUUoZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2'@;
put 'ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PUFFKGMpP2M6U3RyaW5nKGMpfWZ1bmN0aW9uIFpYKGwsYyl7KG51bGw9PWN8fGM+bC5sZW5ndGgpJiYoYz1s'@;
put 'Lmxlbmd0aCk7Zm9yKHZhciBhPTAsZj1uZXcgQXJyYXkoYyk7YTxjO2ErKylmW2FdPWxbYV07cmV0dXJuIGZ9dmFyIExnZT1uZXcgTWFwKFtbIkRGLXByZS1vcmRlciIsZnVuY3Rpb24gRGdlKGwsYyl7Zm9yKHZhciBhPWwuY2FsbChjLHRoaXMpLGY9MDtmPHRoaXMuY2hpbGRzLmxlbmd0aDtm'@;
put 'Kyspe2lmKCExPT09YSlyZXR1cm4hMTthPURnZS5jYWxsKHRoaXMuY2hpbGRzW2ZdLGwsYyl9cmV0dXJuIGF9XSxbIkRGLXBvc3Qtb3JkZXIiLGZ1bmN0aW9uIElnZShsLGMpe2Zvcih2YXIgYT0wO2E8dGhpcy5jaGlsZHMubGVuZ3RoO2ErKylpZighMT09PUlnZS5jYWxsKHRoaXMuY2hpbGRz'@;
put 'W2FdLGwsYykpcmV0dXJuITE7cmV0dXJuIGwuY2FsbChjLHRoaXMpfV0sWyJCRiIsZnVuY3Rpb24gQ190KGwsYyl7dmFyIGE9W3RoaXNdOyFmdW5jdGlvbiBmKCl7aWYoMCE9PWEubGVuZ3RoKXt2YXIgZD1hLnNoaWZ0KCk7YS5wdXNoLmFwcGx5KGEsZnVuY3Rpb24gbV90KGwpe3JldHVybiBm'@;
put 'dW5jdGlvbiBiX3QobCl7aWYoQXJyYXkuaXNBcnJheShsKSlyZXR1cm4gWlgobCl9KGwpfHxmdW5jdGlvbiB5X3QobCl7aWYodHlwZW9mIFN5bWJvbDwidSImJm51bGwhPWxbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9bFsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKGwpfShsKXx8'@;
put 'ZnVuY3Rpb24gdl90KGwsYyl7aWYobCl7aWYoInN0cmluZyI9PXR5cGVvZiBsKXJldHVybiBaWChsLGMpO3ZhciBhPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsKS5zbGljZSg4LC0xKTtpZigiT2JqZWN0Ij09PWEmJmwuY29uc3RydWN0b3ImJihhPWwuY29uc3RydWN0b3IubmFt'@;
put 'ZSksIk1hcCI9PT1hfHwiU2V0Ij09PWEpcmV0dXJuIEFycmF5LmZyb20obCk7aWYoIkFyZ3VtZW50cyI9PT1hfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChhKSlyZXR1cm4gWlgobCxjKX19KGwpfHxmdW5jdGlvbiBnX3QoKXt0aHJvdyBuZXcgVHlw'@;
put 'ZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX0oZC5jaGlsZHMpKSwhMSE9PWwu'@;
put 'Y2FsbChjLGQpJiZmKCl9fSgpfV1dKSxQZ2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKGMpeyhmdW5jdGlvbiBkX3QobCxjKXtpZighKGwgaW5zdGFuY2VvZiBjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsbCksVFAodGhp'@;
put 'cywiZGF0YSIse30pLFRQKHRoaXMsInBhcmVudCIsbnVsbCksVFAodGhpcywiY2hpbGRzIixbXSksdGhpcy5kYXRhPWN9cmV0dXJuIGZ1bmN0aW9uIGhfdChsLGMsYSl7YyYmVGdlKGwucHJvdG90eXBlLGMpLGEmJlRnZShsLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUi'@;
put 'LHt3cml0YWJsZTohMX0pfShsLFt7a2V5OiJhZGRDaGlsZCIsdmFsdWU6ZnVuY3Rpb24oYSl7YS5wYXJlbnQ9dGhpcyx0aGlzLmNoaWxkcy5wdXNoKGEpfX0se2tleToiY2xvbmVUcmVlIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFy'@;
put 'Z3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcyxmPW5ldyBsKEFnZSh7fSxhLmRhdGEpKSxkPTA7ZDxhLmNoaWxkcy5sZW5ndGg7ZCsrKWYuYWRkQ2hpbGQodGhpcy5jbG9uZVRyZWUoYS5jaGlsZHNbZF0pKTtyZXR1cm4gZn19LHtrZXk6InJlcGxhY2VUcmVlV2l0aCIsdmFsdWU6ZnVuY3Rp'@;
put 'b24oYSl7dGhpcy5kYXRhPUFnZSh7fSxhLmRhdGEpLHRoaXMuY2hpbGRzPVtdO2Zvcih2YXIgZj0wO2Y8YS5jaGlsZHMubGVuZ3RoO2YrKyl0aGlzLmFkZENoaWxkKGEuY2hpbGRzW2ZdKX19LHtrZXk6IndhbGtEb3duIix2YWx1ZTpmdW5jdGlvbihhKXt2YXIgZj1hcmd1bWVudHMubGVuZ3Ro'@;
put 'PjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06IkJGIjtpZighTGdlLmhhcyhmKSl0aHJvdyBuZXcgRXJyb3IoJ1RyYXZlcnNhbCBzdHJhdGVneSAiJy5jb25jYXQoZiwnIiBkb2VzIG5vdCBleGlzdCcpKTtMZ2UuZ2V0KGYpLmNhbGwodGhpcyxhLHRoaXMpfX0se2tleToi'@;
put 'd2Fsa1VwIix2YWx1ZTpmdW5jdGlvbihhKXt2YXIgZj10aGlzOyFmdW5jdGlvbiBoKG0peyExIT09YS5jYWxsKGYsbSkmJm51bGwhPT1tLnBhcmVudCYmaChtLnBhcmVudCl9KHRoaXMpfX1dKSxsfSgpO2Z1bmN0aW9uIFRFKGwpe3JldHVybihURT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9s'@;
put 'JiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9s'@;
put 'Ijp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIEZnZShsLGMpe3ZhciBhPU9iamVjdC5rZXlzKGwpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBmPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMobCk7YyYmKGY9Zi5maWx0ZXIoZnVuY3Rpb24oZCl7cmV0dXJuIE9iamVj'@;
put 'dC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobCxkKS5lbnVtZXJhYmxlfSkpLGEucHVzaC5hcHBseShhLGYpfXJldHVybiBhfWZ1bmN0aW9uIEhnZShsKXtmb3IodmFyIGM9MTtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKXt2YXIgYT1udWxsIT1hcmd1bWVudHNbY10/YXJndW1lbnRzW2NdOnt9'@;
put 'O2MlMj9GZ2UoT2JqZWN0KGEpLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe01fdChsLGYsYVtmXSl9KTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhsLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGEpKTpGZ2UoT2JqZWN0'@;
put 'KGEpKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLGYsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihhLGYpKX0pfXJldHVybiBsfWZ1bmN0aW9uIE1fdChsLGMsYSl7cmV0dXJuKGM9QmdlKGMpKWluIGw/T2JqZWN0LmRlZmluZVByb3BlcnR5KGws'@;
put 'Yyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmxbY109YSxsfWZ1bmN0aW9uIE5nZShsLGMpeyhudWxsPT1jfHxjPmwubGVuZ3RoKSYmKGM9bC5sZW5ndGgpO2Zvcih2YXIgYT0wLGY9bmV3IEFycmF5KGMpO2E8YzthKyspZlthXT1sW2FdO3Jl'@;
put 'dHVybiBmfWZ1bmN0aW9uIFZnZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGws'@;
put 'QmdlKGYua2V5KSxmKX19ZnVuY3Rpb24gQmdlKGwpe3ZhciBjPWZ1bmN0aW9uIElfdChsLGMpe2lmKCJvYmplY3QiIT09VEUobCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIp'@;
put 'O2lmKCJvYmplY3QiIT09VEUoZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09'@;
put 'PVRFKGMpP2M6U3RyaW5nKGMpfWZ1bmN0aW9uIFlYKGwsYyxhKXsoZnVuY3Rpb24gUl90KGwsYyl7aWYoYy5oYXMobCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGwsYyksYy5z'@;
put 'ZXQobCxhKX1mdW5jdGlvbiBzMChsLGMpe3JldHVybiBmdW5jdGlvbiBMX3QobCxjKXtyZXR1cm4gYy5nZXQ/Yy5nZXQuY2FsbChsKTpjLnZhbHVlfShsLGpnZShsLGMsImdldCIpKX1mdW5jdGlvbiBqZ2UobCxjLGEpe2lmKCFjLmhhcyhsKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0'@;
put 'ZWQgdG8gIithKyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gYy5nZXQobCl9dmFyIFVnZSxaZ2UsZGI9bmV3IFdlYWtNYXAsbTY9bmV3IFdlYWtNYXAsaGI9bmV3IFdlYWtNYXAsSF90PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbChjKXsoZnVuY3Rpb24gT190KGwsYyl7'@;
put 'aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLGwpLFlYKHRoaXMsZGIse3dyaXRhYmxlOiEwLHZhbHVlOm5ldyBNYXB9KSxZWCh0aGlzLG02LHt3cml0YWJsZTohMCx2YWx1ZTpuZXcgTWFw'@;
put 'fSksWVgodGhpcyxoYix7d3JpdGFibGU6ITAsdmFsdWU6bnVsbH0pLGZ1bmN0aW9uIFBfdChsLGMsYSl7cmV0dXJuIGZ1bmN0aW9uIEZfdChsLGMsYSl7aWYoYy5zZXQpYy5zZXQuY2FsbChsLGEpO2Vsc2V7aWYoIWMud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRv'@;
put 'IHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2MudmFsdWU9YX19KGwsamdlKGwsYywic2V0IiksYSksYX0odGhpcyxoYixjKX1yZXR1cm4gZnVuY3Rpb24gRF90KGwsYyxhKXtjJiZWZ2UobC5wcm90b3R5cGUsYyksYSYmVmdlKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInBy'@;
put 'b3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGwsW3trZXk6ImdldFJvb3RzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBBcnJheS5mcm9tKHMwKHRoaXMsZGIpLnZhbHVlcygpKX19LHtrZXk6ImdldFJvb3RCeUNvbHVtbiIsdmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGY7cmV0dXJuIHMwKHRoaXMs'@;
put 'bTYpLmhhcyhhKSYmKGY9czAodGhpcyxkYikuZ2V0KHMwKHRoaXMsbTYpLmdldChhKSkpLGZ9fSx7a2V5OiJnZXROb2RlIix2YWx1ZTpmdW5jdGlvbihhLGYpe3ZhciBkPXRoaXMuZ2V0Um9vdEJ5Q29sdW1uKGYpO2lmKGQpe3ZhciBfLGg9Zi1zMCh0aGlzLG02KS5nZXQoZiksbT0wO3JldHVy'@;
put 'biBkLndhbGtEb3duKGZ1bmN0aW9uKE8pe3ZhciBYPU8uZGF0YSxhZT1YLm9yaWdDb2xzcGFuO2lmKGE9PT1YLmhlYWRlckxldmVsKXtpZihoPj1tJiZoPD1tK2FlLTEpcmV0dXJuKF89TykuZGF0YS5pc1Jvb3Q9Zj09PV8uZGF0YS5jb2x1bW5JbmRleCwhMTttKz1hZX19KSxffX19LHtrZXk6'@;
put 'InJlYnVpbGRUcmVlSW5kZXgiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxmPTA7czAodGhpcyxtNikuY2xlYXIoKSxSbihzMCh0aGlzLGRiKSxmdW5jdGlvbihkKXtmb3IodmFyIG09ZnVuY3Rpb24ga190KGwsYyl7cmV0dXJuIGZ1bmN0aW9uIFRfdChsKXtpZihBcnJheS5pc0FycmF5'@;
put 'KGwpKXJldHVybiBsfShsKXx8ZnVuY3Rpb24gQV90KGwsYyl7dmFyIGE9bnVsbD09bD9udWxsOnR5cGVvZiBTeW1ib2w8InUiJiZsW1N5bWJvbC5pdGVyYXRvcl18fGxbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1hKXt2YXIgZixkLGgsbSxfPVtdLE89ITAsWD0hMTt0cnl7aWYoaD0oYT1hLmNh'@;
put 'bGwobCkpLm5leHQsMD09PWMpe2lmKE9iamVjdChhKSE9PWEpcmV0dXJuO089ITF9ZWxzZSBmb3IoOyEoTz0oZj1oLmNhbGwoYSkpLmRvbmUpJiYoXy5wdXNoKGYudmFsdWUpLF8ubGVuZ3RoIT09Yyk7Tz0hMCk7fWNhdGNoKGFlKXtYPSEwLGQ9YWV9ZmluYWxseXt0cnl7aWYoIU8mJm51bGwh'@;
put 'PWEucmV0dXJuJiYobT1hLnJldHVybigpLE9iamVjdChtKSE9PW0pKXJldHVybn1maW5hbGx5e2lmKFgpdGhyb3cgZH19cmV0dXJuIF99fShsLGMpfHxmdW5jdGlvbiB4X3QobCxjKXtpZihsKXtpZigic3RyaW5nIj09dHlwZW9mIGwpcmV0dXJuIE5nZShsLGMpO3ZhciBhPU9iamVjdC5wcm90'@;
put 'b3R5cGUudG9TdHJpbmcuY2FsbChsKS5zbGljZSg4LC0xKTtpZigiT2JqZWN0Ij09PWEmJmwuY29uc3RydWN0b3ImJihhPWwuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1hfHwiU2V0Ij09PWEpcmV0dXJuIEFycmF5LmZyb20obCk7aWYoIkFyZ3VtZW50cyI9PT1hfHwvXig/OlVpfEkpbnQo'@;
put 'Pzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChhKSlyZXR1cm4gTmdlKGwsYyl9fShsLGMpfHxmdW5jdGlvbiBFX3QoKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8g'@;
put 'YmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfShkLDIpWzFdLmRhdGEuY29sc3BhbixfPWY7XzxmK207XysrKXMwKGEsbTYpLnNldChfLGYpO2YrPW19KX19LHtrZXk6ImJ1aWxkVHJlZSIsdmFsdWU6ZnVu'@;
put 'Y3Rpb24oKXt0aGlzLmNsZWFyKCk7Zm9yKHZhciBhPXMwKHRoaXMsaGIpLmdldENvbHVtbnNDb3VudCgpLGY9MDtmPGE7KXt2YXIgZD1zMCh0aGlzLGhiKS5nZXRIZWFkZXJTZXR0aW5ncygwLGYpLGg9bmV3IFBnZTtzMCh0aGlzLGRiKS5zZXQoZixoKSx0aGlzLmJ1aWxkTGVhdmVzKGgsZiww'@;
put 'LGQub3JpZ0NvbHNwYW4pLGYrPWQub3JpZ0NvbHNwYW59dGhpcy5yZWJ1aWxkVHJlZUluZGV4KCl9fSx7a2V5OiJidWlsZExlYXZlcyIsdmFsdWU6ZnVuY3Rpb24oYSxmLGQpe3ZhciBoPXRoaXMsbT1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNb'@;
put 'M106MSxfPXMwKHRoaXMsaGIpLmdldEhlYWRlcnNTZXR0aW5ncyhkLGYsbSk7ZCs9MSxSbihfLGZ1bmN0aW9uKE8pe3ZhciBhZSxYPUhnZShIZ2Uoe30sTykse30se2hlYWRlckxldmVsOmQtMSxjb2x1bW5JbmRleDpmfSk7MT09PWQ/KGEuZGF0YT1YLGFlPWEpOihhZT1uZXcgUGdlKFgpLGEu'@;
put 'YWRkQ2hpbGQoYWUpKSxkPHMwKGgsaGIpLmdldExheWVyc0NvdW50KCkmJmguYnVpbGRMZWF2ZXMoYWUsZixkLE8ub3JpZ0NvbHNwYW4pLGYrPU8ub3JpZ0NvbHNwYW59KX19LHtrZXk6ImNsZWFyIix2YWx1ZTpmdW5jdGlvbigpe3MwKHRoaXMsZGIpLmNsZWFyKCksczAodGhpcyxtNikuY2xl'@;
put 'YXIoKX19XSksbH0oKTtmdW5jdGlvbiB6Z2UobCxjKXtsLndhbGtEb3duKGZ1bmN0aW9uKGEpe3ZhciBmPWEuZGF0YSxkPWEuY2hpbGRzO2lmKCFmLmlzSGlkZGVuJiYoYyhmLmNvbHVtbkluZGV4KSwwPT09ZC5sZW5ndGgpKWZvcih2YXIgaD0xO2g8Zi5jb2xzcGFuO2grKyljKGYuY29sdW1u'@;
put 'SW5kZXgraCl9KX1mdW5jdGlvbiBPUChsLGMpe3ZhciBhPWwuY2hpbGRzO2lmKDAhPT1hLmxlbmd0aClyZXR1cm4gYVswXS5kYXRhW2NdfWZ1bmN0aW9uIERQKGwpe3JldHVybiBPUChsLCJvcmlnQ29sc3BhbiIpPT09bC5kYXRhLm9yaWdDb2xzcGFufWZ1bmN0aW9uIFdYKGwpe3ZhciBjPWwu'@;
put 'ZGF0YSxhPWwuY2hpbGRzO2lmKCFjLmlzQ29sbGFwc2VkfHxjLmlzSGlkZGVufHxjLm9yaWdDb2xzcGFuPD0xKXJldHVybntyb2xsYmFja01vZGlmaWNhdGlvbjpmdW5jdGlvbigpe30sYWZmZWN0ZWRDb2x1bW5zOltdLGNvbHNwYW5Db21wZW5zYXRpb246MH07aWYoRFAobCkpcmV0dXJuIFdY'@;
put 'KGFbMF0pO2MuaXNDb2xsYXBzZWQ9ITE7dmFyIGQ9YS5zbGljZSgxKSxoPW5ldyBTZXQsbT0wO2lmKGQubGVuZ3RoPjApUm4oZCxmdW5jdGlvbihwZSl7cGUucmVwbGFjZVRyZWVXaXRoKHBlLmRhdGEuY2xvbmVkVHJlZSkscGUuZGF0YS5jbG9uZWRUcmVlPW51bGwsbSs9cGUuZGF0YS5jb2xz'@;
put 'cGFuLHpnZShwZSxmdW5jdGlvbih4ZSl7aC5hZGQoeGUpfSl9KTtlbHNle3ZhciBPPWMub3JpZ0NvbHNwYW4sWD1jLmNvbHVtbkluZGV4O209Ty1jLmNvbHNwYW47Zm9yKHZhciBhZT0xO2FlPE87YWUrKyloLmFkZChYK2FlKX1yZXR1cm4gbC53YWxrVXAoZnVuY3Rpb24ocGUpe3ZhciBiZT1w'@;
put 'ZS5kYXRhO2JlLmNvbHNwYW4rPW0sYmUuY29sc3Bhbj49YmUub3JpZ0NvbHNwYW4/KGJlLmNvbHNwYW49YmUub3JpZ0NvbHNwYW4sYmUuaXNDb2xsYXBzZWQ9ITEpOkRQKHBlKSYmKGJlLmlzQ29sbGFwc2VkPU9QKHBlLCJpc0NvbGxhcHNlZCIpKX0pLHtyb2xsYmFja01vZGlmaWNhdGlvbjpm'@;
put 'dW5jdGlvbigpe3JldHVybiBHWChsKX0sYWZmZWN0ZWRDb2x1bW5zOkFycmF5LmZyb20oaCksY29sc3BhbkNvbXBlbnNhdGlvbjptfX1mdW5jdGlvbiBHWChsKXt2YXIgYyxhPWwuZGF0YSxmPWwuY2hpbGRzO2lmKGEuaXNDb2xsYXBzZWR8fGEuaXNIaWRkZW58fGEub3JpZ0NvbHNwYW48PTEp'@;
put 'cmV0dXJue3JvbGxiYWNrTW9kaWZpY2F0aW9uOmZ1bmN0aW9uKCl7fSxhZmZlY3RlZENvbHVtbnM6W10sY29sc3BhbkNvbXBlbnNhdGlvbjowfTtpZihEUChsKSlyZXR1cm4gR1goZlswXSk7YS5pc0NvbGxhcHNlZD0hMDt2YXIgaD1mLnNsaWNlKDEpLG09bmV3IFNldDtpZihoLmxlbmd0aD4w'@;
put 'KVJuKGgsZnVuY3Rpb24oYmUpe3pnZShiZSxmdW5jdGlvbih4ZSl7bS5hZGQoeGUpfSksYmUuZGF0YS5jbG9uZWRUcmVlPWJlLmNsb25lVHJlZSgpLGJlLndhbGtEb3duKGZ1bmN0aW9uKHhlKXt4ZS5kYXRhLmlzSGlkZGVuPSEwfSl9KTtlbHNlIGZvcih2YXIgXz1hLm9yaWdDb2xzcGFuLE89'@;
put 'YS5jb2x1bW5JbmRleCxYPTE7WDxfO1grKyltLmFkZChPK1gpO3ZhciBwZT1hLmNvbHNwYW4tKG51bGwhPT0oYz1PUChsLCJjb2xzcGFuIikpJiZ2b2lkIDAhPT1jP2M6MSk7cmV0dXJuIGwud2Fsa1VwKGZ1bmN0aW9uKGJlKXt2YXIgeGU9YmUuZGF0YTt4ZS5jb2xzcGFuLT1wZSx4ZS5jb2xz'@;
put 'cGFuPD0xPyh4ZS5jb2xzcGFuPTEseGUuaXNDb2xsYXBzZWQ9ITApOkRQKGJlKSYmKHhlLmlzQ29sbGFwc2VkPU9QKGJlLCJpc0NvbGxhcHNlZCIpKX0pLHtyb2xsYmFja01vZGlmaWNhdGlvbjpmdW5jdGlvbigpe3JldHVybiBXWChsKX0sYWZmZWN0ZWRDb2x1bW5zOkFycmF5LmZyb20obSks'@;
put 'Y29sc3BhbkNvbXBlbnNhdGlvbjpwZX19dmFyIFlnZT1uZXcgTWFwKFtbImNvbGxhcHNlIixHWF0sWyJleHBhbmQiLFdYXSxbImhpZGUtY29sdW1uIixmdW5jdGlvbiBWX3QobCxjKXtpZighTnVtYmVyLmlzSW50ZWdlcihjKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBwYXNzZWQgZ3JpZENvbHVt'@;
put 'bkluZGV4IGFyZ3VtZW50IGhhcyBpbnZhbGlkIHR5cGUuIik7aWYobC5jaGlsZHMubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKE9sKFVnZXx8KFVnZT1mdW5jdGlvbiBOX3QobCxjKXtyZXR1cm4gY3x8KGM9bC5zbGljZSgwKSksT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGll'@;
put 'cyhsLHtyYXc6e3ZhbHVlOk9iamVjdC5mcmVlemUoYyl9fSkpfShbIlRoZSBwYXNzZWQgbm9kZSBpcyBub3QgdGhlIGxhc3Qgbm9kZSBvbiB0aGUgdHJlZS4gT25seSBmb3IgXG50aGUgbGFzdCBub2RlLCB0aGUgaGlkZSBjb2x1bW4gbW9kaWZpY2F0aW9uIGNhbiBiZSBhcHBsaWVkLiJdLFsi'@;
put 'VGhlIHBhc3NlZCBub2RlIGlzIG5vdCB0aGUgbGFzdCBub2RlIG9uIHRoZSB0cmVlLiBPbmx5IGZvclxceDIwXG50aGUgbGFzdCBub2RlLCB0aGUgaGlkZSBjb2x1bW4gbW9kaWZpY2F0aW9uIGNhbiBiZSBhcHBsaWVkLiJdKSkpKTtpZighbC5kYXRhLmNyb3NzSGlkZGVuQ29sdW1ucy5pbmNs'@;
put 'dWRlcyhjKSl7dmFyIGY9ITE7bC53YWxrVXAoZnVuY3Rpb24oZCl7aWYoZC5kYXRhLmNvbGxhcHNpYmxlKXJldHVybiBmPSEwLCExfSksIWYmJmwud2Fsa1VwKGZ1bmN0aW9uKGQpe3ZhciBoPWQuZGF0YTtoLmNyb3NzSGlkZGVuQ29sdW1ucy5wdXNoKGMpLGguY29sc3Bhbj4xP2guY29sc3Bh'@;
put 'bi09MTpoLmlzSGlkZGVuPSEwfSl9fV0sWyJzaG93LWNvbHVtbiIsZnVuY3Rpb24gal90KGwsYyl7aWYoIU51bWJlci5pc0ludGVnZXIoYykpdGhyb3cgbmV3IEVycm9yKCJUaGUgcGFzc2VkIGdyaWRDb2x1bW5JbmRleCBhcmd1bWVudCBoYXMgaW52YWxpZCB0eXBlLiIpO2lmKGwuY2hpbGRz'@;
put 'Lmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcihPbChaZ2V8fChaZ2U9ZnVuY3Rpb24gQl90KGwsYyl7cmV0dXJuIGN8fChjPWwuc2xpY2UoMCkpLE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobCx7cmF3Ont2YWx1ZTpPYmplY3QuZnJlZXplKGMpfX0pKX0oWyJUaGUgcGFz'@;
put 'c2VkIG5vZGUgaXMgbm90IHRoZSBsYXN0IG5vZGUgb24gdGhlIHRyZWUuIE9ubHkgZm9yIFxudGhlIGxhc3Qgbm9kZSwgdGhlIHNob3cgY29sdW1uIG1vZGlmaWNhdGlvbiBjYW4gYmUgYXBwbGllZC4iXSxbIlRoZSBwYXNzZWQgbm9kZSBpcyBub3QgdGhlIGxhc3Qgbm9kZSBvbiB0aGUgdHJl'@;
put 'ZS4gT25seSBmb3JcXHgyMFxudGhlIGxhc3Qgbm9kZSwgdGhlIHNob3cgY29sdW1uIG1vZGlmaWNhdGlvbiBjYW4gYmUgYXBwbGllZC4iXSkpKSk7aWYobC5kYXRhLmNyb3NzSGlkZGVuQ29sdW1ucy5pbmNsdWRlcyhjKSl7dmFyIGY9ITE7bC53YWxrVXAoZnVuY3Rpb24oZCl7aWYoZC5kYXRh'@;
put 'LmNvbGxhcHNpYmxlKXJldHVybiBmPSEwLCExfSksIWYmJmwud2Fsa1VwKGZ1bmN0aW9uKGQpe3ZhciBoPWQuZGF0YTtoLmNyb3NzSGlkZGVuQ29sdW1ucy5zcGxpY2UoaC5jcm9zc0hpZGRlbkNvbHVtbnMuaW5kZXhPZihjKSwxKSwhaC5pc0hpZGRlbiYmaC5jb2xzcGFuPGgub3JpZ0NvbHNw'@;
put 'YW4mJihoLmNvbHNwYW4rPTEpLGguaXNIaWRkZW49ITF9KX19XV0pLFVfdD1bImNyb3NzSGlkZGVuQ29sdW1ucyJdO2Z1bmN0aW9uIElQKGwpe3ZhciBjPVtdO3JldHVybiBSbihsLGZ1bmN0aW9uKGEpe2Eud2Fsa0Rvd24oZnVuY3Rpb24oZil7Zm9yKHZhciBkPWYuZGF0YSxoPWQub3JpZ0Nv'@;
put 'bHNwYW4sbT1kLmNvbHVtbkluZGV4LE89ZC5jcm9zc0hpZGRlbkNvbHVtbnMsWD1mdW5jdGlvbiBHX3QobCxjKXt2YXIgYTtyZXR1cm4gQXJyYXkuaXNBcnJheShsW2NdKT9hPWxbY106bFtjXT1hPVtdLGF9KGMsZC5oZWFkZXJMZXZlbCksYWU9ITEscGU9bTtwZTxtK2g7cGUrKylpZihPLmlu'@;
put 'Y2x1ZGVzKHBlKXx8YWUpWC5wdXNoKHtsYWJlbDoiIixpc1BsYWNlaG9sZGVyOiEwfSk7ZWxzZXt2YXIgeGU9V190KGQpO3hlLmlzUm9vdD0hMCxYLnB1c2goeGUpLGFlPSEwfX0pfSksY31mdW5jdGlvbiBXX3QobCl7cmV0dXJuIGZ1bmN0aW9uIFpfdChsLGMpe2lmKG51bGw9PWwpcmV0dXJu'@;
put 'e307dmFyIGYsZCxhPWZ1bmN0aW9uIFlfdChsLGMpe2lmKG51bGw9PWwpcmV0dXJue307dmFyIGQsaCxhPXt9LGY9T2JqZWN0LmtleXMobCk7Zm9yKGg9MDtoPGYubGVuZ3RoO2grKykhKGMuaW5kZXhPZihkPWZbaF0pPj0wKSYmKGFbZF09bFtkXSk7cmV0dXJuIGF9KGwsYyk7aWYoT2JqZWN0'@;
put 'LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGg9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhsKTtmb3IoZD0wO2Q8aC5sZW5ndGg7ZCsrKSEoYy5pbmRleE9mKGY9aFtkXSk+PTApJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwobCxmKSYmKGFbZl09'@;
put 'bFtmXSl9cmV0dXJuIGF9KEJYKGwpLFVfdCl9ZnVuY3Rpb24gT0UobCl7cmV0dXJuKE9FPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJm'@;
put 'dW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9dmFyICRfdD1bInJvdyJdO2Z1bmN0aW9uIFdnZShsLGMpe3ZhciBhPU9iamVjdC5rZXlzKGwpO2lmKE9iamVjdC5nZXRPd25Q'@;
put 'cm9wZXJ0eVN5bWJvbHMpe3ZhciBmPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMobCk7YyYmKGY9Zi5maWx0ZXIoZnVuY3Rpb24oZCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobCxkKS5lbnVtZXJhYmxlfSkpLGEucHVzaC5hcHBseShhLGYpfXJldHVybiBh'@;
put 'fWZ1bmN0aW9uIEdnZShsKXtmb3IodmFyIGM9MTtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKXt2YXIgYT1udWxsIT1hcmd1bWVudHNbY10/YXJndW1lbnRzW2NdOnt9O2MlMj9XZ2UoT2JqZWN0KGEpLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe0tfdChsLGYsYVtmXSl9KTpPYmplY3QuZ2V0T3du'@;
put 'UHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhsLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGEpKTpXZ2UoT2JqZWN0KGEpKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLGYsT2JqZWN0LmdldE93blByb3BlcnR5'@;
put 'RGVzY3JpcHRvcihhLGYpKX0pfXJldHVybiBsfWZ1bmN0aW9uIEtfdChsLGMsYSl7cmV0dXJuKGM9S2dlKGMpKWluIGw/T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsYyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmxbY109YSxsfWZ1bmN0aW9u'@;
put 'ICRnZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsS2dlKGYua2V5KSxmKX19'@;
put 'ZnVuY3Rpb24gS2dlKGwpe3ZhciBjPWZ1bmN0aW9uIGV3dChsLGMpe2lmKCJvYmplY3QiIT09T0UobCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09'@;
put 'T0UoZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PU9FKGMpP2M6U3RyaW5n'@;
put 'KGMpfWZ1bmN0aW9uICRYKGwsYyxhKXsoZnVuY3Rpb24gdHd0KGwsYyl7aWYoYy5oYXMobCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGwsYyksYy5zZXQobCxhKX1mdW5jdGlv'@;
put 'biBERShsLGMsYSl7cmV0dXJuIGZ1bmN0aW9uIG53dChsLGMsYSl7aWYoYy5zZXQpYy5zZXQuY2FsbChsLGEpO2Vsc2V7aWYoIWMud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2MudmFsdWU9YX19KGwscWdl'@;
put 'KGwsYywic2V0IiksYSksYX1mdW5jdGlvbiBGcyhsLGMpe3JldHVybiBmdW5jdGlvbiByd3QobCxjKXtyZXR1cm4gYy5nZXQ/Yy5nZXQuY2FsbChsKTpjLnZhbHVlfShsLHFnZShsLGMsImdldCIpKX1mdW5jdGlvbiBxZ2UobCxjLGEpe2lmKCFjLmhhcyhsKSl0aHJvdyBuZXcgVHlwZUVycm9y'@;
put 'KCJhdHRlbXB0ZWQgdG8gIithKyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gYy5nZXQobCl9dmFyIEpoPW5ldyBXZWFrTWFwLFYxPW5ldyBXZWFrTWFwLGc2PW5ldyBXZWFrTWFwLGl3dD1mdW5jdGlvbigpe2Z1bmN0aW9uIGwoKXsoZnVuY3Rpb24gSl90KGwsYyl7'@;
put 'aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLGwpLCRYKHRoaXMsSmgse3dyaXRhYmxlOiEwLHZhbHVlOm5ldyBmX3R9KSwkWCh0aGlzLFYxLHt3cml0YWJsZTohMCx2YWx1ZTpuZXcgSF90'@;
put 'KEZzKHRoaXMsSmgpKX0pLCRYKHRoaXMsZzYse3dyaXRhYmxlOiEwLHZhbHVlOltbXV19KX1yZXR1cm4gZnVuY3Rpb24gUV90KGwsYyxhKXtjJiYkZ2UobC5wcm90b3R5cGUsYyksYSYmJGdlKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9'@;
put 'KGwsW3trZXk6InNldFN0YXRlIix2YWx1ZTpmdW5jdGlvbihhKXtGcyh0aGlzLEpoKS5zZXREYXRhKGEpO3ZhciBmPSExO3RyeXtGcyh0aGlzLFYxKS5idWlsZFRyZWUoKX1jYXRjaHtGcyh0aGlzLFYxKS5jbGVhcigpLEZzKHRoaXMsSmgpLmNsZWFyKCksZj0hMH1yZXR1cm4gREUodGhpcyxn'@;
put 'NixJUChGcyh0aGlzLFYxKS5nZXRSb290cygpKSksZn19LHtrZXk6InNldENvbHVtbnNMaW1pdCIsdmFsdWU6ZnVuY3Rpb24oYSl7RnModGhpcyxKaCkuc2V0Q29sdW1uc0xpbWl0KGEpfX0se2tleToibWVyZ2VTdGF0ZVdpdGgiLHZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBmPXRoaXMsZD1oYShh'@;
put 'LGZ1bmN0aW9uKGgpe3ZhciBtPWgucm93LF89ZnVuY3Rpb24gcV90KGwsYyl7aWYobnVsbD09bClyZXR1cm57fTt2YXIgZixkLGE9ZnVuY3Rpb24gWF90KGwsYyl7aWYobnVsbD09bClyZXR1cm57fTt2YXIgZCxoLGE9e30sZj1PYmplY3Qua2V5cyhsKTtmb3IoaD0wO2g8Zi5sZW5ndGg7aCsr'@;
put 'KSEoYy5pbmRleE9mKGQ9ZltoXSk+PTApJiYoYVtkXT1sW2RdKTtyZXR1cm4gYX0obCxjKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgaD1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGwpO2ZvcihkPTA7ZDxoLmxlbmd0aDtkKyspIShjLmluZGV4T2YoZj1oW2Rd'@;
put 'KT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChsLGYpJiYoYVtmXT1sW2ZdKX1yZXR1cm4gYX0oaCwkX3QpO3JldHVybiBHZ2Uoe3JvdzptPDA/Zi5yb3dDb29yZHNUb0xldmVsKG0pOm19LF8pfSk7RnModGhpcyxKaCkubWVyZ2VXaXRoKGQpLEZzKHRo'@;
put 'aXMsVjEpLmJ1aWxkVHJlZSgpLERFKHRoaXMsZzYsSVAoRnModGhpcyxWMSkuZ2V0Um9vdHMoKSkpfX0se2tleToibWFwU3RhdGUiLHZhbHVlOmZ1bmN0aW9uKGEpe0ZzKHRoaXMsSmgpLm1hcChhKSxGcyh0aGlzLFYxKS5idWlsZFRyZWUoKSxERSh0aGlzLGc2LElQKEZzKHRoaXMsVjEpLmdl'@;
put 'dFJvb3RzKCkpKX19LHtrZXk6Im1hcE5vZGVzIix2YWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gUHMoRnModGhpcyxWMSkuZ2V0Um9vdHMoKSxmdW5jdGlvbihmLGQpe3JldHVybiBkLndhbGtEb3duKGZ1bmN0aW9uKGgpe3ZhciBtPWEoaC5kYXRhKTt2b2lkIDAhPT1tJiZmLnB1c2gobSl9KSxm'@;
put 'fSxbXSl9fSx7a2V5OiJ0cmlnZ2VyTm9kZU1vZGlmaWNhdGlvbiIsdmFsdWU6ZnVuY3Rpb24oYSxmLGQpe2Y8MCYmKGY9dGhpcy5yb3dDb29yZHNUb0xldmVsKGYpKTt2YXIgbSxoPUZzKHRoaXMsVjEpLmdldE5vZGUoZixkKTtyZXR1cm4gaCYmKG09ZnVuY3Rpb24gel90KGwsYyxhKXtpZigh'@;
put 'WWdlLmhhcyhsKSl0aHJvdyBuZXcgRXJyb3IoJ1RoZSBub2RlIG1vZGlmaWVyIGFjdGlvbiAoIicuY29uY2F0KGwsJyIpIGRvZXMgbm90IGV4aXN0LicpKTtyZXR1cm4gWWdlLmdldChsKShjLGEpfShhLGgsZCksREUodGhpcyxnNixJUChGcyh0aGlzLFYxKS5nZXRSb290cygpKSkpLG19fSx7'@;
put 'a2V5OiJ0cmlnZ2VyQ29sdW1uTW9kaWZpY2F0aW9uIix2YWx1ZTpmdW5jdGlvbihhLGYpe3JldHVybiB0aGlzLnRyaWdnZXJOb2RlTW9kaWZpY2F0aW9uKGEsLTEsZil9fSx7a2V5OiJyb3dDb29yZHNUb0xldmVsIix2YWx1ZTpmdW5jdGlvbihhKXtpZihhPj0wKXJldHVybiBudWxsO3ZhciBm'@;
put 'PWErTWF0aC5tYXgodGhpcy5nZXRMYXllcnNDb3VudCgpLDEpO3JldHVybiBmPDA/bnVsbDpmfX0se2tleToibGV2ZWxUb1Jvd0Nvb3JkcyIsdmFsdWU6ZnVuY3Rpb24oYSl7aWYoYTwwKXJldHVybiBudWxsO3ZhciBmPWEtTWF0aC5tYXgodGhpcy5nZXRMYXllcnNDb3VudCgpLDEpO3JldHVy'@;
put 'biBmPj0wP251bGw6Zn19LHtrZXk6ImdldEhlYWRlclNldHRpbmdzIix2YWx1ZTpmdW5jdGlvbihhLGYpe3ZhciBkLGg7cmV0dXJuIGE8MCYmKGE9dGhpcy5yb3dDb29yZHNUb0xldmVsKGEpKSxudWxsPT09YXx8YT49dGhpcy5nZXRMYXllcnNDb3VudCgpP251bGw6bnVsbCE9PShkPW51bGw9'@;
put 'PT0oaD1Gcyh0aGlzLGc2KVthXSl8fHZvaWQgMD09PWg/dm9pZCAwOmhbZl0pJiZ2b2lkIDAhPT1kP2Q6bnVsbH19LHtrZXk6ImdldEhlYWRlclRyZWVOb2RlRGF0YSIsdmFsdWU6ZnVuY3Rpb24oYSxmKXtpZihhPDAmJihhPXRoaXMucm93Q29vcmRzVG9MZXZlbChhKSksbnVsbD09PWF8fGE+'@;
put 'PXRoaXMuZ2V0TGF5ZXJzQ291bnQoKSlyZXR1cm4gbnVsbDt2YXIgZD1Gcyh0aGlzLFYxKS5nZXROb2RlKGEsZik7cmV0dXJuIGQ/R2dlKHt9LGQuZGF0YSk6bnVsbH19LHtrZXk6ImZpbmRMZWZ0TW9zdENvbHVtbkluZGV4Iix2YWx1ZTpmdW5jdGlvbihhLGYpe3ZhciBkO2lmKChudWxsIT09'@;
put 'KGQ9dGhpcy5nZXRIZWFkZXJTZXR0aW5ncyhhLGYpKSYmdm9pZCAwIT09ZD9kOntpc1Jvb3Q6ITB9KS5pc1Jvb3QpcmV0dXJuIGY7Zm9yKHZhciBfPWYtMTtfPj0wOyl7dmFyIE87aWYoKG51bGwhPT0oTz10aGlzLmdldEhlYWRlclNldHRpbmdzKGEsXykpJiZ2b2lkIDAhPT1PP086e2lzUm9v'@;
put 'dDohMH0pLmlzUm9vdClicmVhaztfLT0xfXJldHVybiBffX0se2tleToiZ2V0TGF5ZXJzQ291bnQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIEZzKHRoaXMsSmgpLmdldExheWVyc0NvdW50KCl9fSx7a2V5OiJnZXRDb2x1bW5zQ291bnQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIEZzKHRo'@;
put 'aXMsSmgpLmdldENvbHVtbnNDb3VudCgpfX0se2tleToiY2xlYXIiLHZhbHVlOmZ1bmN0aW9uKCl7REUodGhpcyxnNixbXSksRnModGhpcyxKaCkuY2xlYXIoKSxGcyh0aGlzLFYxKS5jbGVhcigpfX1dKSxsfSgpO2Z1bmN0aW9uIElFKGwpe3JldHVybihJRT0iZnVuY3Rpb24iPT10eXBlb2Yg'@;
put 'U3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8i'@;
put 'c3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIFhnZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRl'@;
put 'ZmluZVByb3BlcnR5KGwsSmdlKGYua2V5KSxmKX19ZnVuY3Rpb24gUkUobCxjLGEpe3JldHVybihjPUpnZShjKSlpbiBsP09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLGMse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpsW2NdPWEsbH1mdW5jdGlv'@;
put 'biBKZ2UobCl7dmFyIGM9ZnVuY3Rpb24gbHd0KGwsYyl7aWYoIm9iamVjdCIhPT1JRShsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1JRShmKSly'@;
put 'ZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09SUUoYyk/YzpTdHJpbmcoYyl9dmFy'@;
put 'IHN3dD1mdW5jdGlvbigpe2Z1bmN0aW9uIGwoYyxhKXsoZnVuY3Rpb24gb3d0KGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLGwpLFJFKHRoaXMsImhvdCIsdm9pZCAwKSxSRSh0'@;
put 'aGlzLCJuZXN0ZWRIZWFkZXJTZXR0aW5nc0dldHRlciIsdm9pZCAwKSxSRSh0aGlzLCJsYXllcnNDb3VudCIsMCksUkUodGhpcywiY29udGFpbmVyIix2b2lkIDApLFJFKHRoaXMsIndpZHRoc01hcCIsdm9pZCAwKSx0aGlzLmhvdD1jLHRoaXMubmVzdGVkSGVhZGVyU2V0dGluZ3NHZXR0ZXI9'@;
put 'YSx0aGlzLndpZHRoc01hcD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5jcmVhdGVBbmRSZWdpc3RlckluZGV4TWFwKCJuZXN0ZWRIZWFkZXJzLndpZHRoc01hcCIsInBoeXNpY2FsSW5kZXhUb1ZhbHVlIil9cmV0dXJuIGZ1bmN0aW9uIGF3dChsLGMsYSl7YyYmWGdlKGwucHJvdG90eXBl'@;
put 'LGMpLGEmJlhnZShsLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShsLFt7a2V5OiJzZXRMYXllcnNDb3VudCIsdmFsdWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubGF5ZXJzQ291bnQ9YSx0aGlzfX0se2tleToiZ2V0V2lkdGgiLHZhbHVl'@;
put 'OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLndpZHRoc01hcC5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihhKSl9fSx7a2V5OiJidWlsZFdpZHRoc01hcCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNvbnRhaW5lcj10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRl'@;
put 'RWxlbWVudCgiZGl2IiksdGhpcy5jb250YWluZXIuY2xhc3NMaXN0LmFkZCgiaGFuZHNvbnRhYmxlIiwiaHRHaG9zdFRhYmxlIiwiaHRBdXRvU2l6ZSIpLHRoaXMuX2J1aWxkR2hvc3RUYWJsZSh0aGlzLmNvbnRhaW5lciksdGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQo'@;
put 'dGhpcy5jb250YWluZXIpO3ZhciBhPXRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoInRyOmxhc3Qtb2YtdHlwZSB0aCIpLGY9YS5sZW5ndGg7dGhpcy53aWR0aHNNYXAuY2xlYXIoKTtmb3IodmFyIGQ9MDtkPGY7ZCsrKXt2YXIgaD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5n'@;
put 'ZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGQpLG09dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihoKTt0aGlzLndpZHRoc01hcC5zZXRWYWx1ZUF0SW5kZXgobSxhW2RdLm9mZnNldFdpZHRoKX10aGlzLmNvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuY29udGFpbmVy'@;
put 'KSx0aGlzLmNvbnRhaW5lcj1udWxsfX0se2tleToiX2J1aWxkR2hvc3RUYWJsZSIsdmFsdWU6ZnVuY3Rpb24oYSl7Zm9yKHZhciBmPXRoaXMuaG90LGQ9Zi5yb290RG9jdW1lbnQsaD1mLmNvbHVtbkluZGV4TWFwcGVyLG09ZC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksXz1kLmNyZWF0ZUVs'@;
put 'ZW1lbnQoInRhYmxlIiksTz0hIXRoaXMuaG90LmdldFNldHRpbmdzKCkuZHJvcGRvd25NZW51LFg9aC5nZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCgpLGFlPTA7YWU8dGhpcy5sYXllcnNDb3VudDthZSsrKXtmb3IodmFyIHBlPWQuY3JlYXRlRWxlbWVudCgidHIiKSxiZT0wO2JlPFg7YmUr'@;
put 'Kyl7dmFyIHhlPWguZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChiZSk7bnVsbD09PXhlJiYoeGU9YmUpO3ZhciBWZT1kLmNyZWF0ZUVsZW1lbnQoInRoIiksWmU9dGhpcy5uZXN0ZWRIZWFkZXJTZXR0aW5nc0dldHRlcihhZSx4ZSk7aWYoWmUmJighWmUuaXNQbGFjZWhvbGRlcnx8WmUu'@;
put 'aXNIaWRkZW4pKXt2YXIgbHQ9WmUubGFiZWw7TyYmKGx0Kz0nPGJ1dHRvbiBjbGFzcz0iY2hhbmdlVHlwZSI+PC9idXR0b24+JyksdjUoVmUsbHQpLFZlLmNvbFNwYW49WmUuY29sc3BhbixwZS5hcHBlbmRDaGlsZChWZSl9fV8uYXBwZW5kQ2hpbGQocGUpfW0uYXBwZW5kQ2hpbGQoXyksYS5h'@;
put 'cHBlbmRDaGlsZChtKX19LHtrZXk6ImNsZWFyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMud2lkdGhzTWFwLmNsZWFyKCksdGhpcy5jb250YWluZXI9bnVsbH19XSksbH0oKTtjb25zdCB1d3Q9c3d0O2Z1bmN0aW9uIHBiKGwpe3JldHVybihwYj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYi'@;
put 'c3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0'@;
put 'eXBlb2YgY30pKGwpfXZhciBRZ2UsZTVlO2Z1bmN0aW9uIHQ1ZShsLGMpe3JldHVybiBjfHwoYz1sLnNsaWNlKDApKSxPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGwse3Jhdzp7dmFsdWU6T2JqZWN0LmZyZWV6ZShjKX19KSl9ZnVuY3Rpb24gbjVlKGwsYyl7Zm9yKHZh'@;
put 'ciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxpNWUoZi5rZXkpLGYpfX1mdW5jdGlvbiB2Nigpe3Jl'@;
put 'dHVybiB2Nj10eXBlb2YgUmVmbGVjdDwidSImJlJlZmxlY3QuZ2V0P1JlZmxlY3QuZ2V0LmJpbmQoKTpmdW5jdGlvbihjLGEsZil7dmFyIGQ9ZnVuY3Rpb24gZHd0KGwsYyl7Zm9yKDshT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGwsYykmJm51bGwhPT0obD16MyhsKSk7'@;
put 'KTtyZXR1cm4gbH0oYyxhKTtpZihkKXt2YXIgaD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGQsYSk7cmV0dXJuIGguZ2V0P2guZ2V0LmNhbGwoYXJndW1lbnRzLmxlbmd0aDwzP2M6Zik6aC52YWx1ZX19LHY2LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBLWChsLGMp'@;
put 'e3JldHVybihLWD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihmLGQpe3JldHVybiBmLl9fcHJvdG9fXz1kLGZ9KShsLGMpfWZ1bmN0aW9uIExFKGwpe2lmKHZvaWQgMD09PWwpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlz'@;
put 'IGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gbH1mdW5jdGlvbiB6MyhsKXtyZXR1cm4oejM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuX19w'@;
put 'cm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSl9KShsKX1mdW5jdGlvbiByNWUobCxjLGEpe3JldHVybihjPWk1ZShjKSlpbiBsP09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLGMse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpsW2NdPWEs'@;
put 'bH1mdW5jdGlvbiBpNWUobCl7dmFyIGM9ZnVuY3Rpb24gdnd0KGwsYyl7aWYoIm9iamVjdCIhPT1wYihsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIh'@;
put 'PT1wYihmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09cGIoYyk/YzpTdHJp'@;
put 'bmcoYyl9ZnVuY3Rpb24gbzVlKGwsYyxhKXsoZnVuY3Rpb24geXd0KGwsYyl7aWYoYy5oYXMobCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGwsYyksYy5zZXQobCxhKX1mdW5j'@;
put 'dGlvbiBSUChsLGMsYSl7cmV0dXJuIGZ1bmN0aW9uIGJ3dChsLGMsYSl7aWYoYy5zZXQpYy5zZXQuY2FsbChsLGEpO2Vsc2V7aWYoIWMud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2MudmFsdWU9YX19KGws'@;
put 'YTVlKGwsYywic2V0IiksYSksYX1mdW5jdGlvbiBBcyhsLGMpe3JldHVybiBmdW5jdGlvbiBfd3QobCxjKXtyZXR1cm4gYy5nZXQ/Yy5nZXQuY2FsbChsKTpjLnZhbHVlfShsLGE1ZShsLGMsImdldCIpKX1mdW5jdGlvbiBhNWUobCxjLGEpe2lmKCFjLmhhcyhsKSl0aHJvdyBuZXcgVHlwZUVy'@;
put 'cm9yKCJhdHRlbXB0ZWQgdG8gIithKyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gYy5nZXQobCl9dmFyIGw1ZT0ibmVzdGVkSGVhZGVycyIsYXU9bmV3IFdlYWtNYXAsaW09bmV3IFdlYWtNYXAsQ3d0PWZ1bmN0aW9uKGwpeyFmdW5jdGlvbiBod3QobCxjKXtpZigi'@;
put 'ZnVuY3Rpb24iIT10eXBlb2YgYyYmbnVsbCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtsLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGMmJmMucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6'@;
put 'bCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksYyYmS1gobCxjKX0oYSxsKTt2YXIgYz1mdW5jdGlvbiBwd3QobCl7dmFyIGM9ZnVuY3Rpb24gZ3d0KCl7aWYodHlwZW9mIFJlZmxlY3Q+InUi'@;
put 'fHwhUmVmbGVjdC5jb25zdHJ1Y3R8fFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sZnVu'@;
put 'Y3Rpb24oKXt9KSksITB9Y2F0Y2h7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciBkLGY9ejMobCk7aWYoYyl7dmFyIGg9ejModGhpcykuY29uc3RydWN0b3I7ZD1SZWZsZWN0LmNvbnN0cnVjdChmLGFyZ3VtZW50cyxoKX1lbHNlIGQ9Zi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7'@;
put 'cmV0dXJuIGZ1bmN0aW9uIG13dChsLGMpe2lmKGMmJigib2JqZWN0Ij09PXBiKGMpfHwiZnVuY3Rpb24iPT10eXBlb2YgYykpcmV0dXJuIGM7aWYodm9pZCAwIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVu'@;
put 'ZGVmaW5lZCIpO3JldHVybiBMRShsKX0odGhpcyxkKX19KGEpO2Z1bmN0aW9uIGEoKXt2YXIgZjshZnVuY3Rpb24gY3d0KGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsYSk7Zm9y'@;
put 'KHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksbT0wO208ZDttKyspaFttXT1hcmd1bWVudHNbbV07cmV0dXJuIG81ZShMRShmPWMuY2FsbC5hcHBseShjLFt0aGlzXS5jb25jYXQoaCkpKSxhdSx7d3JpdGFibGU6ITAsdmFsdWU6bmV3IGl3dH0pLG81ZShMRShmKSxpbSx7'@;
put 'd3JpdGFibGU6ITAsdmFsdWU6bnVsbH0pLHI1ZShMRShmKSwiZ2hvc3RUYWJsZSIsbmV3IHV3dChmLmhvdCxmdW5jdGlvbihfLE8pe3JldHVybiBmLmdldEhlYWRlclNldHRpbmdzKF8sTyl9KSkscjVlKExFKGYpLCJkZXRlY3RlZE92ZXJsYXBwZWRIZWFkZXJzIiwhMSksZn1yZXR1cm4gZnVu'@;
put 'Y3Rpb24gZnd0KGwsYyxhKXtjJiZuNWUobC5wcm90b3R5cGUsYyksYSYmbjVlKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGEsW3trZXk6ImlzRW5hYmxlZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRp'@;
put 'bmdzKClbbDVlXX19LHtrZXk6ImVuYWJsZVBsdWdpbiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzO2lmKCF0aGlzLmVuYWJsZWQpe3ZhciBtPXRoaXMuaG90LmdldFNldHRpbmdzKCkubmVzdGVkSGVhZGVyczsoIUFycmF5LmlzQXJyYXkobSl8fCFBcnJheS5pc0FycmF5KG1bMF0pKSYm'@;
put 'V2woT2woUWdlfHwoUWdlPXQ1ZShbIllvdXIgTmVzdGVkIEhlYWRlcnMgcGx1Z2luIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZC4gVGhlIHNldHRpbmdzIGhhcyB0byBiZSBcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NlZCBhcyBhbiBhcnJheSBvZiBhcnJheXMgZS5xLiBbWydBMScs'@;
put 'IHsgbGFiZWw6ICdBMicsIGNvbHNwYW46IDIgfV1dIl0sWyJZb3VyIE5lc3RlZCBIZWFkZXJzIHBsdWdpbiBjb25maWd1cmF0aW9uIGlzIGludmFsaWQuIFRoZSBzZXR0aW5ncyBoYXMgdG8gYmVcXHgyMFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFzc2VkIGFzIGFuIGFycmF5IG9mIGFy'@;
put 'cmF5cyBlLnEuIFtbJ0ExJywgeyBsYWJlbDogJ0EyJywgY29sc3BhbjogMiB9XV0iXSkpKSksdGhpcy5hZGRIb29rKCJpbml0IixmdW5jdGlvbigpe3JldHVybiBkLm9uSW5pdCgpfSksdGhpcy5hZGRIb29rKCJhZnRlckxvYWREYXRhIixmdW5jdGlvbigpe3JldHVybiBkLm9uQWZ0ZXJMb2Fk'@;
put 'RGF0YS5hcHBseShkLGFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkJlZm9yZU9uQ2VsbE1vdXNlRG93bi5hcHBseShkLGFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyT25DZWxsTW91c2VEb3duIixm'@;
put 'dW5jdGlvbigpe3JldHVybiBkLm9uQWZ0ZXJPbkNlbGxNb3VzZURvd24uYXBwbHkoZCxhcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25CZWZvcmVPbkNlbGxNb3VzZU92ZXIuYXBwbHkoZCxhcmd1bWVudHMpfSks'@;
put 'dGhpcy5hZGRIb29rKCJhZnRlckdldENvbHVtbkhlYWRlclJlbmRlcmVycyIsZnVuY3Rpb24oXyl7cmV0dXJuIGQub25BZnRlckdldENvbHVtbkhlYWRlclJlbmRlcmVycyhfKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5Q29sV2lkdGgiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Nb2RpZnlDb2xX'@;
put 'aWR0aC5hcHBseShkLGFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvbHVtbkhlYWRlclZhbHVlIixmdW5jdGlvbigpe3JldHVybiBkLm9uTW9kaWZ5Q29sdW1uSGVhZGVyVmFsdWUuYXBwbHkoZCxhcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVIaWdobGlnaHRpbmdD'@;
put 'b2x1bW5IZWFkZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25CZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXIuYXBwbHkoZCxhcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVDb3B5IixmdW5jdGlvbigpe3JldHVybiBkLm9uQmVmb3JlQ29weS5hcHBseShkLGFyZ3VtZW50cyl9'@;
put 'KSx0aGlzLmFkZEhvb2soImFmdGVyVmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGUiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25BZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlLmFwcGx5KGQsYXJndW1lbnRzKX0pLHY2KHozKGEucHJvdG90eXBlKSwiZW5hYmxlUGx1'@;
put 'Z2luIix0aGlzKS5jYWxsKHRoaXMpLHRoaXMudXBkYXRlUGx1Z2luKCl9fX0se2tleToidXBkYXRlUGx1Z2luIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXM7aWYodGhpcy5ob3Qudmlldyl7dmFyIG09dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5uZXN0ZWRIZWFkZXJzO0FzKHRoaXMsYXUp'@;
put 'LnNldENvbHVtbnNMaW1pdCh0aGlzLmhvdC5jb3VudENvbHMoKSksQXJyYXkuaXNBcnJheShtKSYmKHRoaXMuZGV0ZWN0ZWRPdmVybGFwcGVkSGVhZGVycz1Bcyh0aGlzLGF1KS5zZXRTdGF0ZShtKSksdGhpcy5kZXRlY3RlZE92ZXJsYXBwZWRIZWFkZXJzJiZXbChPbChlNWV8fChlNWU9dDVl'@;
put 'KFsiWW91ciBOZXN0ZWQgSGVhZGVycyBwbHVnaW4gc2V0dXAgY29udGFpbnMgb3ZlcmxhcHBpbmcgaGVhZGVycy4gVGhpcyBraW5kIG9mIGNvbmZpZ3VyYXRpb24gXG4gICAgICAgICAgICAgICAgICAgICAgICBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZC4iXSxbIllvdXIgTmVzdGVkIEhl'@;
put 'YWRlcnMgcGx1Z2luIHNldHVwIGNvbnRhaW5zIG92ZXJsYXBwaW5nIGhlYWRlcnMuIFRoaXMga2luZCBvZiBjb25maWd1cmF0aW9uXFx4MjBcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLiJdKSkpKSx0aGlzLmVuYWJsZWQmJnRoaXMuaG90LmNv'@;
put 'bHVtbkluZGV4TWFwcGVyLmhpZGluZ01hcHNDb2xsZWN0aW9uLmdldE1lcmdlZFZhbHVlcygpLmZvckVhY2goZnVuY3Rpb24oXyxPKXt2YXIgWD0hMD09PV8/ImhpZGUtY29sdW1uIjoic2hvdy1jb2x1bW4iO0FzKGQsYXUpLnRyaWdnZXJDb2x1bW5Nb2RpZmljYXRpb24oWCxPKX0pLCFBcyh0'@;
put 'aGlzLGltKSYmdGhpcy5lbmFibGVkJiZSUCh0aGlzLGltLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmNyZWF0ZUNoYW5nZXNPYnNlcnZlcigiaGlkaW5nIikuc3Vic2NyaWJlKGZ1bmN0aW9uKF8pe18uZm9yRWFjaChmdW5jdGlvbihPKXt2YXIgYWU9Ty5pbmRleDtpZigicmVwbGFjZSI9'@;
put 'PT1PLm9wKXt2YXIgYmU9ITA9PT1PLm5ld1ZhbHVlPyJoaWRlLWNvbHVtbiI6InNob3ctY29sdW1uIjtBcyhkLGF1KS50cmlnZ2VyQ29sdW1uTW9kaWZpY2F0aW9uKGJlLGFlKX19KSxkLmdob3N0VGFibGUuYnVpbGRXaWR0aHNNYXAoKX0pKSx0aGlzLmdob3N0VGFibGUuc2V0TGF5ZXJzQ291'@;
put 'bnQodGhpcy5nZXRMYXllcnNDb3VudCgpKS5idWlsZFdpZHRoc01hcCgpLHY2KHozKGEucHJvdG90eXBlKSwidXBkYXRlUGx1Z2luIix0aGlzKS5jYWxsKHRoaXMpfX19LHtrZXk6ImRpc2FibGVQbHVnaW4iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jbGVhckNvbHNwYW5zKCksQXModGhpcyxh'@;
put 'dSkuY2xlYXIoKSxBcyh0aGlzLGltKS51bnN1YnNjcmliZSgpLFJQKHRoaXMsaW0sbnVsbCksdGhpcy5naG9zdFRhYmxlLmNsZWFyKCksdjYoejMoYS5wcm90b3R5cGUpLCJkaXNhYmxlUGx1Z2luIix0aGlzKS5jYWxsKHRoaXMpfX0se2tleToiZ2V0U3RhdGVNYW5hZ2VyIix2YWx1ZTpmdW5j'@;
put 'dGlvbigpe3JldHVybiBBcyh0aGlzLGF1KX19LHtrZXk6ImdldExheWVyc0NvdW50Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBBcyh0aGlzLGF1KS5nZXRMYXllcnNDb3VudCgpfX0se2tleToiZ2V0SGVhZGVyU2V0dGluZ3MiLHZhbHVlOmZ1bmN0aW9uKGQsaCl7cmV0dXJuIEFzKHRoaXMs'@;
put 'YXUpLmdldEhlYWRlclNldHRpbmdzKGQsaCl9fSx7a2V5OiJjbGVhckNvbHNwYW5zIix2YWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMuaG90LnZpZXcpZm9yKHZhciBkPXRoaXMuaG90LnZpZXcuX3d0LGg9ZC5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoLG09ZC53dFRhYmxlLlRI'@;
put 'RUFELF89ZC53dE92ZXJsYXlzLnRvcE92ZXJsYXkuY2xvbmUud3RUYWJsZS5USEVBRCxPPWQud3RPdmVybGF5cy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXk/ZC53dE92ZXJsYXlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZS53dFRhYmxlLlRIRUFEOm51bGwsWD0wO1g8'@;
put 'aDtYKyspe3ZhciBhZT1tLmNoaWxkTm9kZXNbWF07aWYoIWFlKWJyZWFrO2Zvcih2YXIgcGU9Xy5jaGlsZE5vZGVzW1hdLGJlPU8/Ty5jaGlsZE5vZGVzW1hdOm51bGwseGU9MCxWZT1hZS5jaGlsZE5vZGVzLmxlbmd0aDt4ZTxWZTt4ZSsrKWFlLmNoaWxkTm9kZXNbeGVdLnJlbW92ZUF0dHJp'@;
put 'YnV0ZSgiY29sc3BhbiIpLEpvKGFlLmNoaWxkTm9kZXNbeGVdLCJoaWRkZW5IZWFkZXIiKSxwZSYmcGUuY2hpbGROb2Rlc1t4ZV0mJihwZS5jaGlsZE5vZGVzW3hlXS5yZW1vdmVBdHRyaWJ1dGUoImNvbHNwYW4iKSxKbyhwZS5jaGlsZE5vZGVzW3hlXSwiaGlkZGVuSGVhZGVyIikpLE8mJmJl'@;
put 'JiZiZS5jaGlsZE5vZGVzW3hlXSYmKGJlLmNoaWxkTm9kZXNbeGVdLnJlbW92ZUF0dHJpYnV0ZSgiY29sc3BhbiIpLEpvKGJlLmNoaWxkTm9kZXNbeGVdLCJoaWRkZW5IZWFkZXIiKSl9fX0se2tleToiaGVhZGVyUmVuZGVyZXJGYWN0b3J5Iix2YWx1ZTpmdW5jdGlvbihkKXt2YXIgaD10aGlz'@;
put 'LG09dGhpcy5ob3Qudmlldy5fd3QuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKTtyZXR1cm4gZnVuY3Rpb24oXyxPKXt2YXIgWCxhZT1oLmhvdCxiZT1hZS52aWV3LHhlPWFlLmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoXyk7bnVsbD09PXhl'@;
put 'JiYoeGU9XyksTy5yZW1vdmVBdHRyaWJ1dGUoImNvbHNwYW4iKSxKbyhPLCJoaWRkZW5IZWFkZXIiKTt2YXIgVmU9bnVsbCE9PShYPUFzKGgsYXUpLmdldEhlYWRlclNldHRpbmdzKGQseGUpKSYmdm9pZCAwIT09WD9YOntsYWJlbDoiIn0sWmU9VmUuY29sc3BhbjtpZihWZS5pc1BsYWNlaG9s'@;
put 'ZGVyfHxWZS5pc0hpZGRlbilnaShPLCJoaWRkZW5IZWFkZXIiKTtlbHNlIGlmKFplPjEpe3ZhciBndCxqdCxybj1iZS5fd3Qud3RPdmVybGF5cyxYdD1udWxsPT09KGd0PXJuLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSl8fHZvaWQgMD09PWd0P3ZvaWQgMDpndC5jbG9uZS53dFRhYmxl'@;
put 'LlRIRUFELmNvbnRhaW5zKE8pLHluPW51bGw9PT0oanQ9cm4uaW5saW5lU3RhcnRPdmVybGF5KXx8dm9pZCAwPT09anQ/dm9pZCAwOmp0LmNsb25lLnd0VGFibGUuVEhFQUQuY29udGFpbnMoTyksUW49WHR8fHluP01hdGgubWluKFplLG0tXyk6WmU7UW4+MSYmTy5zZXRBdHRyaWJ1dGUoImNv'@;
put 'bHNwYW4iLFFuKX1oLmhvdC52aWV3LmFwcGVuZENvbEhlYWRlcih4ZSxPLGZ1bmN0aW9uKCl7cmV0dXJuIGguZ2V0Q29sdW1uSGVhZGVyVmFsdWUuYXBwbHkoaCxhcmd1bWVudHMpfSxkKX19fSx7a2V5OiJnZXRDb2x1bW5IZWFkZXJWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24oZCxoKXt2YXIgbSxf'@;
put 'PW51bGwhPT0obT1Bcyh0aGlzLGF1KS5nZXRIZWFkZXJTZXR0aW5ncyhoLGQpKSYmdm9pZCAwIT09bT9tOnt9O3JldHVybiBfLmlzUGxhY2Vob2xkZXJ8fF8uaXNIaWRkZW4/IiI6dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKGQsaCl9fSx7a2V5OiJvbkJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhl'@;
put 'YWRlciIsdmFsdWU6ZnVuY3Rpb24oZCxoLG0pe3ZhciBfPUFzKHRoaXMsYXUpLmdldEhlYWRlclRyZWVOb2RlRGF0YShoLGQpO2lmKCFfKXJldHVybiBkO3ZhciBPPW0uY2xhc3NOYW1lcyxYPW0uY29sdW1uQ3Vyc29yLGFlPW0uc2VsZWN0aW9uVHlwZSxwZT1tLnNlbGVjdGlvbldpZHRoLGJl'@;
put 'PUFzKHRoaXMsYXUpLmdldEhlYWRlclNldHRpbmdzKGgsZCkseGU9YmUuaXNSb290O2lmKGFlPT09V00pe2lmKCF4ZSlyZXR1cm4gXy5jb2x1bW5JbmRleH1lbHNlIGFlPT09ZUwmJihiZS5jb2xzcGFuPnBlLVh8fCF4ZSkmJihPLmxlbmd0aD0wKTtyZXR1cm4gZH19LHtrZXk6Im9uQmVmb3Jl'@;
put 'Q29weSIsdmFsdWU6ZnVuY3Rpb24oZCxoLG0pe2lmKDAhPT1tLmNvbHVtbkhlYWRlcnNDb3VudClmb3IodmFyIE89MDtPPGgubGVuZ3RoO08rKyl7dmFyIFg9aFtPXSxhZT1YLnN0YXJ0Um93LHBlPVguc3RhcnRDb2wsYmU9WC5lbmRSb3cseGU9WC5lbmRDb2wsVmU9YmUtYWUrMTtpZihhZT49'@;
put 'MHx8MT09cGUteGUrMSlicmVhaztmb3IodmFyIGx0PXBlO2x0PD14ZTtsdCsrKWZvcih2YXIgZHQ9YWU7ZHQ8PWJlO2R0Kyspe3ZhciBndCxqdD1WZStkdCxybj1sdC1wZTswIT09cm4mJiExPT09KG51bGw9PT0oZ3Q9QXModGhpcyxhdSkuZ2V0SGVhZGVyVHJlZU5vZGVEYXRhKGR0LGx0KSl8'@;
put 'fHZvaWQgMD09PWd0P3ZvaWQgMDpndC5pc1Jvb3QpJiYoZFtqdF1bcm5dPSIiKX19fX0se2tleToib25CZWZvcmVPbkNlbGxNb3VzZURvd24iLHZhbHVlOmZ1bmN0aW9uKGQsaCxtLF8pe3RoaXMuX2dldEhlYWRlclRyZWVOb2RlRGF0YUJ5Q29vcmRzKGgpJiYoXy5jb2x1bW49ITApfX0se2tl'@;
put 'eToib25BZnRlck9uQ2VsbE1vdXNlRG93biIsdmFsdWU6ZnVuY3Rpb24oZCxoKXt2YXIgbT10aGlzLl9nZXRIZWFkZXJUcmVlTm9kZURhdGFCeUNvb3JkcyhoKTtpZihtKXt2YXIgXz10aGlzLmhvdC5zZWxlY3Rpb24sTz1fLmlzU2VsZWN0ZWQoKT9fLmdldFNlbGVjdGVkUmFuZ2UoKS5jdXJy'@;
put 'ZW50KCk6bnVsbCxYPVtdLGFlPW0uY29sdW1uSW5kZXgscGU9bS5vcmlnQ29sc3BhbixiZT0hXy5pbkluU2VsZWN0aW9uKGgpO2Quc2hpZnRLZXkmJk8/aC5jb2w8Ty5mcm9tLmNvbD9YLnB1c2goTy5nZXRUb3BFbmRDb3JuZXIoKS5jb2wsYWUsaC5yb3cpOlgucHVzaChoLmNvbD5PLmZyb20u'@;
put 'Y29sP08uZ2V0VG9wU3RhcnRDb3JuZXIoKS5jb2w6YWUsYWUrcGUtMSxoLnJvdyk6KFFJKGQpfHxJNChkKSYmYmUpJiZYLnB1c2goYWUsYWUrcGUtMSxoLnJvdyksXy5zZWxlY3RDb2x1bW5zLmFwcGx5KF8sWCl9fX0se2tleToib25CZWZvcmVPbkNlbGxNb3VzZU92ZXIiLHZhbHVlOmZ1bmN0'@;
put 'aW9uKGQsaCxtLF8pe3ZhciBPO2lmKHRoaXMuaG90LnZpZXcuaXNNb3VzZURvd24oKSl7dmFyIFg9dGhpcy5fZ2V0SGVhZGVyVHJlZU5vZGVEYXRhQnlDb29yZHMoaCk7aWYoWCl7dmFyIGFlPVguY29sdW1uSW5kZXgscGU9WC5vcmlnQ29sc3BhbixiZT10aGlzLmhvdC5nZXRTZWxlY3RlZFJh'@;
put 'bmdlTGFzdCgpLHhlPWJlLmdldFRvcFN0YXJ0Q29ybmVyKCksVmU9YmUuZ2V0Qm90dG9tRW5kQ29ybmVyKCksWmU9YmUuZnJvbTtfLmNvbHVtbj0hMCxfLmNlbGw9ITA7dmFyIGx0PVtdO2guY29sPFplLmNvbD9sdC5wdXNoKFZlLmNvbCxhZSk6bHQucHVzaChoLmNvbD5aZS5jb2w/eGUuY29s'@;
put 'OmFlLGFlK3BlLTEpLChPPXRoaXMuaG90KS5zZWxlY3RDb2x1bW5zLmFwcGx5KE8sbHQpfX19fSx7a2V5OiJvbkFmdGVyR2V0Q29sdW1uSGVhZGVyUmVuZGVyZXJzIix2YWx1ZTpmdW5jdGlvbihkKXtkLmxlbmd0aD0wO2Zvcih2YXIgaD0wO2g8QXModGhpcyxhdSkuZ2V0TGF5ZXJzQ291bnQo'@;
put 'KTtoKyspZC5wdXNoKHRoaXMuaGVhZGVyUmVuZGVyZXJGYWN0b3J5KGgpKX19LHtrZXk6Im9uQWZ0ZXJWaWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZSIsdmFsdWU6ZnVuY3Rpb24oZCl7Zm9yKHZhciBoPUFzKHRoaXMsYXUpLmdldExheWVyc0NvdW50KCksbT1kLnN0YXJ0Q29sdW1u'@;
put 'LF89ISFoLE89MDtPPGg7TysrKXt2YXIgWD1Bcyh0aGlzLGF1KS5maW5kTGVmdE1vc3RDb2x1bW5JbmRleChPLGQuc3RhcnRDb2x1bW4pLGFlPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoWCk7aWYoWD49MCYmKF89ITEpLHQwKGFlKSYm'@;
put 'YWU8ZC5zdGFydENvbHVtbil7bT1hZTticmVha319ZC5zdGFydENvbHVtbj1fP0FzKHRoaXMsYXUpLmdldEhlYWRlclRyZWVOb2RlRGF0YSgwLG0pLmNvbHVtbkluZGV4Om19fSx7a2V5OiJvbk1vZGlmeUNvbFdpZHRoIix2YWx1ZTpmdW5jdGlvbihkLGgpe3ZhciBtPXRoaXMuZ2hvc3RUYWJs'@;
put 'ZS5nZXRXaWR0aChoKTtyZXR1cm4gZD5tP2Q6bX19LHtrZXk6Im9uTW9kaWZ5Q29sdW1uSGVhZGVyVmFsdWUiLHZhbHVlOmZ1bmN0aW9uKGQsaCxtKXt2YXIgXztyZXR1cm4obnVsbCE9PShfPUFzKHRoaXMsYXUpLmdldEhlYWRlclRyZWVOb2RlRGF0YShtLGgpKSYmdm9pZCAwIT09Xz9fOnts'@;
put 'YWJlbDoiIn0pLmxhYmVsfX0se2tleToib25Jbml0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMudXBkYXRlUGx1Z2luKCl9fSx7a2V5OiJvbkFmdGVyTG9hZERhdGEiLHZhbHVlOmZ1bmN0aW9uKGQsaCl7aHx8dGhpcy51cGRhdGVQbHVnaW4oKX19LHtrZXk6ImRlc3Ryb3kiLHZhbHVlOmZ1bmN0'@;
put 'aW9uKCl7UlAodGhpcyxhdSxudWxsKSxudWxsIT09QXModGhpcyxpbSkmJihBcyh0aGlzLGltKS51bnN1YnNjcmliZSgpLFJQKHRoaXMsaW0sbnVsbCkpLHY2KHozKGEucHJvdG90eXBlKSwiZGVzdHJveSIsdGhpcykuY2FsbCh0aGlzKX19LHtrZXk6Il9nZXRIZWFkZXJUcmVlTm9kZURhdGFC'@;
put 'eUNvb3JkcyIsdmFsdWU6ZnVuY3Rpb24oZCl7aWYoIShkLnJvdz49MHx8ZC5jb2w8MCkpcmV0dXJuIEFzKHRoaXMsYXUpLmdldEhlYWRlclRyZWVOb2RlRGF0YShkLnJvdyxkLmNvbCl9fV0sW3trZXk6IlBMVUdJTl9LRVkiLGdldDpmdW5jdGlvbigpe3JldHVybiBsNWV9fSx7a2V5OiJQTFVH'@;
put 'SU5fUFJJT1JJVFkiLGdldDpmdW5jdGlvbigpe3JldHVybiAyODB9fV0pLGF9KEdhKTtmdW5jdGlvbiBzNWUobCl7cmV0dXJuIGZ1bmN0aW9uIEV3dChsKXtpZihBcnJheS5pc0FycmF5KGwpKXJldHVybiBxWChsKX0obCl8fGZ1bmN0aW9uIGt3dChsKXtpZih0eXBlb2YgU3ltYm9sPCJ1IiYm'@;
put 'bnVsbCE9bFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1sWyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20obCl9KGwpfHxmdW5jdGlvbiBNd3QobCxjKXtpZihsKXtpZigic3RyaW5nIj09dHlwZW9mIGwpcmV0dXJuIHFYKGwsYyk7dmFyIGE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmlu'@;
put 'Zy5jYWxsKGwpLnNsaWNlKDgsLTEpO2lmKCJPYmplY3QiPT09YSYmbC5jb25zdHJ1Y3RvciYmKGE9bC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PWF8fCJTZXQiPT09YSlyZXR1cm4gQXJyYXkuZnJvbShsKTtpZigiQXJndW1lbnRzIj09PWF8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86'@;
put 'Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KGEpKXJldHVybiBxWChsLGMpfX0obCl8fGZ1bmN0aW9uIFN3dCgpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJh'@;
put 'eSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIHFYKGwsYyl7KG51bGw9PWN8fGM+bC5sZW5ndGgpJiYoYz1sLmxlbmd0aCk7Zm9yKHZhciBhPTAsZj1uZXcgQXJyYXkoYyk7YTxjO2ErKylmW2FdPWxbYV07cmV0dXJuIGZ9ZnVu'@;
put 'Y3Rpb24gbWIobCl7cmV0dXJuKG1iPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29u'@;
put 'c3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gdTVlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9'@;
put 'ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxUd3QoZi5rZXkpLGYpfX1mdW5jdGlvbiBUd3QobCl7dmFyIGM9ZnVuY3Rpb24gT3d0KGwsYyl7aWYoIm9iamVjdCIhPT1tYihsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wu'@;
put 'dG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1tYihmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3Ry'@;
put 'aW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09bWIoYyk/YzpTdHJpbmcoYyl9dmFyIER3dD1mdW5jdGlvbigpe2Z1bmN0aW9uIGwoYyxhKXsoZnVuY3Rpb24geHd0KGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVF'@;
put 'cnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLGwpLHRoaXMuaG90PWEsdGhpcy5kYXRhPW51bGwsdGhpcy5wbHVnaW49Yyx0aGlzLnBhcmVudFJlZmVyZW5jZT1uZXcgV2Vha01hcCx0aGlzLmNhY2hlPXtsZXZlbHM6W10sbGV2ZWxDb3VudDowLHJvd3M6'@;
put 'W10sbm9kZUluZm86bmV3IFdlYWtNYXB9fXJldHVybiBmdW5jdGlvbiBBd3QobCxjLGEpe2MmJnU1ZShsLnByb3RvdHlwZSxjKSxhJiZ1NWUobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0obCxbe2tleToic2V0RGF0YSIsdmFsdWU6ZnVu'@;
put 'Y3Rpb24oYSl7dGhpcy5kYXRhPWF9fSx7a2V5OiJnZXREYXRhIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGF9fSx7a2V5OiJnZXRSYXdTb3VyY2VEYXRhIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBhO3JldHVybiB0aGlzLnBsdWdpbi5kaXNhYmxlQ29yZUFQSU1vZGlmaWVycygp'@;
put 'LGE9dGhpcy5ob3QuZ2V0U291cmNlRGF0YSgpLHRoaXMucGx1Z2luLmVuYWJsZUNvcmVBUElNb2RpZmllcnMoKSxhfX0se2tleToidXBkYXRlV2l0aERhdGEiLHZhbHVlOmZ1bmN0aW9uKGEpe3RoaXMuc2V0RGF0YShhKSx0aGlzLnJld3JpdGVDYWNoZSgpfX0se2tleToicmV3cml0ZUNhY2hl'@;
put 'Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXM7dGhpcy5jYWNoZT17bGV2ZWxzOltdLGxldmVsQ291bnQ6MCxyb3dzOltdLG5vZGVJbmZvOm5ldyBXZWFrTWFwfSxfbygwLHRoaXMuZGF0YS5sZW5ndGgtMSxmdW5jdGlvbihmKXthLmNhY2hlTm9kZShhLmRhdGFbZl0sMCxudWxsKX0pfX0s'@;
put 'e2tleToiY2FjaGVOb2RlIix2YWx1ZTpmdW5jdGlvbihhLGYsZCl7dmFyIGg9dGhpczt0aGlzLmNhY2hlLmxldmVsc1tmXXx8KHRoaXMuY2FjaGUubGV2ZWxzW2ZdPVtdLHRoaXMuY2FjaGUubGV2ZWxDb3VudCs9MSksdGhpcy5jYWNoZS5sZXZlbHNbZl0ucHVzaChhKSx0aGlzLmNhY2hlLnJv'@;
put 'd3MucHVzaChhKSx0aGlzLmNhY2hlLm5vZGVJbmZvLnNldChhLHtwYXJlbnQ6ZCxyb3c6dGhpcy5jYWNoZS5yb3dzLmxlbmd0aC0xLGxldmVsOmZ9KSx0aGlzLmhhc0NoaWxkcmVuKGEpJiZSbihhLl9fY2hpbGRyZW4sZnVuY3Rpb24obSl7aC5jYWNoZU5vZGUobSxmKzEsYSl9KX19LHtrZXk6'@;
put 'ImdldERhdGFPYmplY3QiLHZhbHVlOmZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hP251bGw6dGhpcy5jYWNoZS5yb3dzW2FdfX0se2tleToicmVhZFRyZWVOb2RlcyIsdmFsdWU6ZnVuY3Rpb24oYSxmLGQsaCl7dmFyIG09dGhpcyxfPSExLE89ZjtpZihpc05hTihPKSYmTy5lbmQpcmV0dXJu'@;
put 'IE87dmFyIFg9YTtyZXR1cm4gWHx8KFg9e19fY2hpbGRyZW46dGhpcy5kYXRhfSxfPSEwLE8tPTEpLG51bGwhPWQmJk89PT1kP3tyZXN1bHQ6WCxlbmQ6ITB9Om51bGwhPWgmJlg9PT1oP3tyZXN1bHQ6TyxlbmQ6ITB9OihPKz0xLFguX19jaGlsZHJlbiYmUm4oWC5fX2NoaWxkcmVuLGZ1bmN0'@;
put 'aW9uKGFlKXtpZihtLnBhcmVudFJlZmVyZW5jZS5zZXQoYWUsXz9udWxsOlgpLE89bS5yZWFkVHJlZU5vZGVzKGFlLE8sZCxoKSxpc05hTihPKSYmTy5lbmQpcmV0dXJuITF9KSxPKX19LHtrZXk6Im1vY2tQYXJlbnQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5tb2NrTm9kZSgpO3Jl'@;
put 'dHVybiBhLl9fY2hpbGRyZW49dGhpcy5kYXRhLGF9fSx7a2V5OiJtb2NrTm9kZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT17fTtyZXR1cm4gbWEodGhpcy5kYXRhWzBdLGZ1bmN0aW9uKGYsZCl7YVtkXT1udWxsfSksYX19LHtrZXk6ImdldFJvd0luZGV4Iix2YWx1ZTpmdW5jdGlvbihhKXty'@;
put 'ZXR1cm4gbnVsbD09YT9udWxsOnRoaXMuY2FjaGUubm9kZUluZm8uZ2V0KGEpLnJvd319LHtrZXk6ImdldFJvd0luZGV4V2l0aGluUGFyZW50Iix2YWx1ZTpmdW5jdGlvbihhKXt2YXIgZjtmPWlzTmFOKGEpP2E6dGhpcy5nZXREYXRhT2JqZWN0KGEpO3ZhciBkPXRoaXMuZ2V0Um93UGFyZW50'@;
put 'KGEpO3JldHVybiBudWxsPT1kP3RoaXMuZGF0YS5pbmRleE9mKGYpOmQuX19jaGlsZHJlbi5pbmRleE9mKGYpfX0se2tleToiY291bnRBbGxSb3dzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvdW50Q2hpbGRyZW4oe19fY2hpbGRyZW46dGhpcy5kYXRhfSl9fSx7a2V5OiJjb3Vu'@;
put 'dENoaWxkcmVuIix2YWx1ZTpmdW5jdGlvbihhKXt2YXIgZj10aGlzLGQ9MCxoPWE7cmV0dXJuIGlzTmFOKGgpfHwoaD10aGlzLmdldERhdGFPYmplY3QoaCkpLGgmJmguX19jaGlsZHJlbj8oUm4oaC5fX2NoaWxkcmVuLGZ1bmN0aW9uKG0pe2QrPTEsbS5fX2NoaWxkcmVuJiYoZCs9Zi5jb3Vu'@;
put 'dENoaWxkcmVuKG0pKX0pLGQpOjB9fSx7a2V5OiJnZXRSb3dQYXJlbnQiLHZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBmO3JldHVybiBmPWlzTmFOKGEpP2E6dGhpcy5nZXREYXRhT2JqZWN0KGEpLHRoaXMuZ2V0Um93T2JqZWN0UGFyZW50KGYpfX0se2tleToiZ2V0Um93T2JqZWN0UGFyZW50Iix2'@;
put 'YWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gYSYmIm9iamVjdCI9PT1tYihhKT90aGlzLmNhY2hlLm5vZGVJbmZvLmdldChhKS5wYXJlbnQ6bnVsbH19LHtrZXk6ImdldFJvd0xldmVsIix2YWx1ZTpmdW5jdGlvbihhKXt2YXIgZjtyZXR1cm4oZj1pc05hTihhKT9hOnRoaXMuZ2V0RGF0YU9iamVj'@;
put 'dChhKSk/dGhpcy5nZXRSb3dPYmplY3RMZXZlbChmKTpudWxsfX0se2tleToiZ2V0Um93T2JqZWN0TGV2ZWwiLHZhbHVlOmZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hP251bGw6dGhpcy5jYWNoZS5ub2RlSW5mby5nZXQoYSkubGV2ZWx9fSx7a2V5OiJoYXNDaGlsZHJlbiIsdmFsdWU6ZnVu'@;
put 'Y3Rpb24oYSl7dmFyIGY9YTtyZXR1cm4gaXNOYU4oZil8fChmPXRoaXMuZ2V0RGF0YU9iamVjdChmKSksISghZi5fX2NoaWxkcmVufHwhZi5fX2NoaWxkcmVuLmxlbmd0aCl9fSx7a2V5OiJpc0NoaWxkIix2YWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9PXRoaXMuZ2V0Um93UGFyZW50'@;
put 'KGEpfX0se2tleToiZ2V0Q2hpbGQiLHZhbHVlOmZ1bmN0aW9uKGEsZil7dmFyIGQ7cmV0dXJuKG51bGw9PT0oZD1hLl9fY2hpbGRyZW4pfHx2b2lkIDA9PT1kP3ZvaWQgMDpkW2ZdKXx8bnVsbH19LHtrZXk6ImlzUm93SGlnaGVzdExldmVsIix2YWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4hdGhp'@;
put 'cy5pc0NoaWxkKGEpfX0se2tleToiaXNQYXJlbnQiLHZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBmLGQ9YTtyZXR1cm4gaXNOYU4oZCl8fChkPXRoaXMuZ2V0RGF0YU9iamVjdChkKSksZCYmISFkLl9fY2hpbGRyZW4mJjAhPT0obnVsbD09PShmPWQuX19jaGlsZHJlbil8fHZvaWQgMD09PWY/dm9p'@;
put 'ZCAwOmYubGVuZ3RoKX19LHtrZXk6ImFkZENoaWxkIix2YWx1ZTpmdW5jdGlvbihhLGYpe3ZhciBkPWY7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUFkZENoaWxkIixhLGQpO3ZhciBoPW51bGw7YSYmKGg9dGhpcy5nZXRSb3dJbmRleChhKSksdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNy'@;
put 'ZWF0ZVJvdyIsaCt0aGlzLmNvdW50Q2hpbGRyZW4oYSkrMSwxKTt2YXIgbT1hO2F8fChtPXRoaXMubW9ja1BhcmVudCgpKSxtLl9fY2hpbGRyZW58fChtLl9fY2hpbGRyZW49W10pLGR8fChkPXRoaXMubW9ja05vZGUoKSksbS5fX2NoaWxkcmVuLnB1c2goZCksdGhpcy5yZXdyaXRlQ2FjaGUo'@;
put 'KTt2YXIgXz10aGlzLmdldFJvd0luZGV4KGQpO3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLmluc2VydEluZGV4ZXMoXywxKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDcmVhdGVSb3ciLF8sMSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQWRkQ2hpbGQiLGEsZCl9fSx7a2V5OiJhZGRDaGls'@;
put 'ZEF0SW5kZXgiLHZhbHVlOmZ1bmN0aW9uKGEsZixkKXt2YXIgbSxoPWQ7aWYoaHx8KGg9dGhpcy5tb2NrTm9kZSgpKSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQWRkQ2hpbGQiLGEsaCxmKSxhKXt2YXIgTz10aGlzLmdldFJvd0luZGV4KGEpK2YrMTt0aGlzLmhvdC5ydW5Ib29rcygiYmVm'@;
put 'b3JlQ3JlYXRlUm93IixPLDEpLGEuX19jaGlsZHJlbi5zcGxpY2UoZixudWxsLGgpLHRoaXMucmV3cml0ZUNhY2hlKCksdGhpcy5wbHVnaW4uZGlzYWJsZUNvcmVBUElNb2RpZmllcnMoKSx0aGlzLmhvdC5zZXRTb3VyY2VEYXRhQXRDZWxsKHRoaXMuZ2V0Um93SW5kZXhXaXRoaW5QYXJlbnQo'@;
put 'YSksIl9fY2hpbGRyZW4iLGEuX19jaGlsZHJlbiwiTmVzdGVkUm93cy5hZGRDaGlsZEF0SW5kZXgiKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5pbnNlcnRJbmRleGVzKE8sMSksdGhpcy5wbHVnaW4uZW5hYmxlQ29yZUFQSU1vZGlmaWVycygpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNy'@;
put 'ZWF0ZVJvdyIsTywxKSxtPU99ZWxzZSB0aGlzLnBsdWdpbi5kaXNhYmxlQ29yZUFQSU1vZGlmaWVycygpLHRoaXMuaG90LmFsdGVyKCJpbnNlcnRfcm93X2Fib3ZlIixmLDEsIk5lc3RlZFJvd3MuYWRkQ2hpbGRBdEluZGV4IiksdGhpcy5wbHVnaW4uZW5hYmxlQ29yZUFQSU1vZGlmaWVycygp'@;
put 'LG09dGhpcy5nZXRSb3dJbmRleCh0aGlzLmRhdGFbZl0pO2g9dGhpcy5nZXREYXRhT2JqZWN0KG0pLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckFkZENoaWxkIixhLGgsZil9fSx7a2V5OiJhZGRTaWJsaW5nIix2YWx1ZTpmdW5jdGlvbihhKXt2YXIgZj1hcmd1bWVudHMubGVuZ3RoPjEmJnZv'@;
put 'aWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06ImJlbG93IixkPXRoaXMudHJhbnNsYXRlVHJpbW1lZFJvdyhhKSxoPXRoaXMuZ2V0Um93UGFyZW50KGQpLG09dGhpcy5nZXRSb3dJbmRleFdpdGhpblBhcmVudChkKTtzd2l0Y2goZil7Y2FzZSJiZWxvdyI6dGhpcy5hZGRDaGlsZEF0'@;
put 'SW5kZXgoaCxtKzEsbnVsbCk7YnJlYWs7Y2FzZSJhYm92ZSI6dGhpcy5hZGRDaGlsZEF0SW5kZXgoaCxtLG51bGwpfX19LHtrZXk6ImRldGFjaEZyb21QYXJlbnQiLHZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBmPXRoaXMsZD0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRz'@;
put 'WzFdKXx8YXJndW1lbnRzWzFdLGg9bnVsbCxtPVtdO0FycmF5LmlzQXJyYXkoYSk/KF9vKGFbMF0sYVsyXSxmdW5jdGlvbihkdCl7dmFyIGd0PWYudHJhbnNsYXRlVHJpbW1lZFJvdyhkdCk7bS5wdXNoKGYuZ2V0RGF0YU9iamVjdChndCkpfSksX28oMCxtLmxlbmd0aC0yLGZ1bmN0aW9uKGR0'@;
put 'KXtmLmRldGFjaEZyb21QYXJlbnQobVtkdF0sITEpfSksaD1tW20ubGVuZ3RoLTFdKTpoPWE7dmFyIF89dGhpcy5nZXRSb3dJbmRleChoKSxPPXRoaXMuY291bnRDaGlsZHJlbihoKSxYPXRoaXMuZ2V0Um93SW5kZXhXaXRoaW5QYXJlbnQoaCksYWU9dGhpcy5nZXRSb3dQYXJlbnQoaCkscGU9'@;
put 'dGhpcy5nZXRSb3dQYXJlbnQoYWUpLGJlPXRoaXMuZ2V0Um93SW5kZXgocGUpLHhlPW51bGw7aWYodGhpcy5ob3QucnVuSG9va3MoImJlZm9yZURldGFjaENoaWxkIixhZSxoKSxudWxsIT1YKXt2YXIgVmU9QXJyYXkuZnJvbShuZXcgQXJyYXkoXytPKzEpLmtleXMoKSkuc3BsaWNlKC0xKihP'@;
put 'KzEpKTtpZih0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUmVtb3ZlUm93IixfLE8rMSxWZSx0aGlzLnBsdWdpbi5wbHVnaW5OYW1lKSxhZS5fX2NoaWxkcmVuLnNwbGljZShYLDEpLHRoaXMucmV3cml0ZUNhY2hlKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUmVtb3ZlUm93IixfLE8rMSxW'@;
put 'ZSx0aGlzLnBsdWdpbi5wbHVnaW5OYW1lKSxwZSl7eGU9YmUrdGhpcy5jb3VudENoaWxkcmVuKHBlKTt2YXIgWmU9dGhpcy5nZXRDaGlsZChwZSx0aGlzLmNvdW50Q2hpbGRyZW4ocGUpLTEpLGx0PXRoaXMuZ2V0Um93SW5kZXgoWmUpO3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDcmVhdGVS'@;
put 'b3ciLGx0KzEsTysxLHRoaXMucGx1Z2luLnBsdWdpbk5hbWUpLHBlLl9fY2hpbGRyZW4ucHVzaChoKX1lbHNlIHhlPXRoaXMuaG90LmNvdW50Um93cygpKzEsdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNyZWF0ZVJvdyIseGUtMixPKzEsdGhpcy5wbHVnaW4ucGx1Z2luTmFtZSksdGhpcy5k'@;
put 'YXRhLnB1c2goaCl9dGhpcy5yZXdyaXRlQ2FjaGUoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDcmVhdGVSb3ciLHhlLTIsTysxLHRoaXMucGx1Z2luLnBsdWdpbk5hbWUpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckRldGFjaENoaWxkIixhZSxoLHRoaXMuZ2V0Um93SW5kZXgoaCkpLGQm'@;
put 'JnRoaXMuaG90LnJlbmRlcigpfX0se2tleToiZmlsdGVyRGF0YSIsdmFsdWU6ZnVuY3Rpb24oYSxmLGQpe3ZhciBoPXRoaXMsbT1bXTtSbihkLGZ1bmN0aW9uKF8pe20ucHVzaChoLmdldERhdGFPYmplY3QoXykpfSksUm4obSxmdW5jdGlvbihfKXt2YXIgTz1oLmdldFJvd0luZGV4V2l0aGlu'@;
put 'UGFyZW50KF8pLFg9aC5nZXRSb3dQYXJlbnQoXyk7bnVsbD09PVg/aC5kYXRhLnNwbGljZShPLDEpOlguX19jaGlsZHJlbi5zcGxpY2UoTywxKX0pLHRoaXMucmV3cml0ZUNhY2hlKCl9fSx7a2V5OiJzcGxpY2VEYXRhIix2YWx1ZTpmdW5jdGlvbihhLGYsZCl7dmFyIGg9dGhpcy5nZXREYXRh'@;
put 'T2JqZWN0KGEtMSksbT1udWxsLF89YTtpZihoJiZoLl9fY2hpbGRyZW4mJjA9PT1oLl9fY2hpbGRyZW4ubGVuZ3RoPyhtPWgsXz0wKTphPHRoaXMuY291bnRBbGxSb3dzKCkmJihtPXRoaXMuZ2V0Um93UGFyZW50KGEpLF89dGhpcy5nZXRSb3dJbmRleFdpdGhpblBhcmVudChhKSksbSlpZihk'@;
put 'KXt2YXIgTzsoTz1tLl9fY2hpbGRyZW4pLnNwbGljZS5hcHBseShPLFtfLGZdLmNvbmNhdChzNWUoZCkpKX1lbHNlIG0uX19jaGlsZHJlbi5zcGxpY2UoXyxmKTtlbHNlIGlmKGQpe3ZhciBYOyhYPXRoaXMuZGF0YSkuc3BsaWNlLmFwcGx5KFgsW18sZl0uY29uY2F0KHM1ZShkKSkpfWVsc2Ug'@;
put 'dGhpcy5kYXRhLnNwbGljZShfLGYpO3RoaXMucmV3cml0ZUNhY2hlKCl9fSx7a2V5OiJzeW5jUm93V2l0aFJhd1NvdXJjZSIsdmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGY9YSxkPW51bGw7ZG97bnVsbCE9PShkPXRoaXMuZ2V0Um93UGFyZW50KGQpKSYmKGY9ZCl9d2hpbGUobnVsbCE9PWQpO3Ro'@;
put 'aXMucGx1Z2luLmRpc2FibGVDb3JlQVBJTW9kaWZpZXJzKCksdGhpcy5ob3Quc2V0U291cmNlRGF0YUF0Q2VsbCh0aGlzLmdldFJvd0luZGV4KGYpLCJfX2NoaWxkcmVuIixmLl9fY2hpbGRyZW4sIk5lc3RlZFJvd3Muc3luY1Jvd1dpdGhSYXdTb3VyY2UiKSx0aGlzLnBsdWdpbi5lbmFibGVD'@;
put 'b3JlQVBJTW9kaWZpZXJzKCl9fSx7a2V5OiJtb3ZlUm93Iix2YWx1ZTpmdW5jdGlvbihhLGYsZCxoKXt2YXIgbT1mPT09dGhpcy5ob3QuY291bnRSb3dzKCksXz10aGlzLmdldFJvd1BhcmVudChhKSxPPXRoaXMuZ2V0Um93SW5kZXhXaXRoaW5QYXJlbnQoYSksWD1fLl9fY2hpbGRyZW4uc2xp'@;
put 'Y2UoTyxPKzEpLGFlPWE+ZixwZT10aGlzLmdldFJvd1BhcmVudChtP2YtMTpmKTtudWxsPT1wZSYmKHBlPXRoaXMuZ2V0Um93UGFyZW50KGYtMSkpLG51bGw9PXBlJiYocGU9dGhpcy5nZXREYXRhT2JqZWN0KGYtMSkpLHBlP3BlLl9fY2hpbGRyZW58fChwZS5fX2NoaWxkcmVuPVtdKToocGU9'@;
put 'dGhpcy5nZXREYXRhT2JqZWN0KGYpKS5fX2NoaWxkcmVuPVtdO3ZhciBiZT1tfHxkfHxoP3BlLl9fY2hpbGRyZW4ubGVuZ3RoOnRoaXMuZ2V0Um93SW5kZXhXaXRoaW5QYXJlbnQoZikseGU9Xz09PXBlO3BlLl9fY2hpbGRyZW4uc3BsaWNlKGJlLDAsWFswXSksXy5fX2NoaWxkcmVuLnNwbGlj'@;
put 'ZShPKyhhZSYmeGU/MTowKSwxKSx0aGlzLnN5bmNSb3dXaXRoUmF3U291cmNlKF8pLHhlfHx0aGlzLnN5bmNSb3dXaXRoUmF3U291cmNlKHBlKX19LHtrZXk6InRyYW5zbGF0ZVRyaW1tZWRSb3ciLHZhbHVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnBsdWdpbi5jb2xsYXBzaW5nVUk/dGhp'@;
put 'cy5wbHVnaW4uY29sbGFwc2luZ1VJLnRyYW5zbGF0ZVRyaW1tZWRSb3coYSk6YX19LHtrZXk6InVudHJhbnNsYXRlVHJpbW1lZFJvdyIsdmFsdWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucGx1Z2luLmNvbGxhcHNpbmdVST90aGlzLnBsdWdpbi5jb2xsYXBzaW5nVUkudW50cmFuc2xhdGVU'@;
put 'cmltbWVkUm93KGEpOmF9fV0pLGx9KCk7Y29uc3QgSXd0PUR3dDtmdW5jdGlvbiBQRShsKXtyZXR1cm4oUEU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXty'@;
put 'ZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiBjNWUobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVu'@;
put 'dW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLEx3dChmLmtleSksZil9fWZ1bmN0aW9uIFJ3dChsLGMsYSl7cmV0dXJuIGMmJmM1ZShsLnByb3RvdHlwZSxjKSxhJiZj'@;
put 'NWUobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxsfWZ1bmN0aW9uIEx3dChsKXt2YXIgYz1mdW5jdGlvbiBQd3QobCxjKXtpZigib2JqZWN0IiE9PVBFKGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2'@;
put 'ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PVBFKGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9T'@;
put 'dHJpbmc6TnVtYmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1QRShjKT9jOlN0cmluZyhjKX12YXIgSHd0PVJ3dChmdW5jdGlvbiBsKGMsYSl7KGZ1bmN0aW9uIEZ3dChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxs'@;
put 'IGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyxsKSx0aGlzLmhvdD1hLHRoaXMucGx1Z2luPWN9KTtjb25zdCBYWD1Id3Q7ZnVuY3Rpb24gZ2IobCl7cmV0dXJuKGdiPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0'@;
put 'aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gZjVlKGwsYyl7Zm9yKHZh'@;
put 'ciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxCd3QoZi5rZXkpLGYpfX1mdW5jdGlvbiBCd3QobCl7'@;
put 'dmFyIGM9ZnVuY3Rpb24gand0KGwsYyl7aWYoIm9iamVjdCIhPT1nYihsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1nYihmKSlyZXR1cm4gZjt0'@;
put 'aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09Z2IoYyk/YzpTdHJpbmcoYyl9ZnVuY3Rpb24gSlgo'@;
put 'bCxjKXtyZXR1cm4oSlg9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZixkKXtyZXR1cm4gZi5fX3Byb3RvX189ZCxmfSkobCxjKX1mdW5jdGlvbiBMUChsKXtyZXR1cm4oTFA9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5n'@;
put 'ZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSl9KShsKX12YXIgR3d0PWZ1bmN0aW9uKGwpeyFmdW5jdGlvbiB6d3QobCxjKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyYmbnVsbCE9PWMpdGhyb3cgbmV3'@;
put 'IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtsLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGMmJmMucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6bCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0'@;
put 'LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksYyYmSlgobCxjKX0oYSxsKTt2YXIgYz1mdW5jdGlvbiBVd3QobCl7dmFyIGM9ZnVuY3Rpb24gV3d0KCl7aWYodHlwZW9mIFJlZmxlY3Q+InUifHwhUmVmbGVjdC5jb25zdHJ1Y3R8fFJlZmxlY3QuY29uc3RydWN0'@;
put 'LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sZnVuY3Rpb24oKXt9KSksITB9Y2F0Y2h7cmV0dXJuITF9fSgpO3JldHVy'@;
put 'biBmdW5jdGlvbigpe3ZhciBkLGY9TFAobCk7aWYoYyl7dmFyIGg9TFAodGhpcykuY29uc3RydWN0b3I7ZD1SZWZsZWN0LmNvbnN0cnVjdChmLGFyZ3VtZW50cyxoKX1lbHNlIGQ9Zi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uIFp3dChsLGMpe2lmKGMmJigib2JqZWN0'@;
put 'Ij09PWdiKGMpfHwiZnVuY3Rpb24iPT10eXBlb2YgYykpcmV0dXJuIGM7aWYodm9pZCAwIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbiBZd3QobCl7aWYodm9p'@;
put 'ZCAwPT09bCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBsfShsKX0odGhpcyxkKX19KGEpO2Z1bmN0aW9uIGEoZixkKXt2YXIgaDtyZXR1cm4gZnVuY3Rpb24gTnd0KGws'@;
put 'Yyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsYSksKGg9Yy5jYWxsKHRoaXMsZixkKSkuZGF0YU1hbmFnZXI9aC5wbHVnaW4uZGF0YU1hbmFnZXIsaC5jb2xsYXBzaW5nVUk9aC5wbHVn'@;
put 'aW4uY29sbGFwc2luZ1VJLGgucm93SGVhZGVyV2lkdGhDYWNoZT1udWxsLGh9cmV0dXJuIGZ1bmN0aW9uIFZ3dChsLGMsYSl7YyYmZjVlKGwucHJvdG90eXBlLGMpLGEmJmY1ZShsLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShhLFt7a2V5'@;
put 'OiJhcHBlbmRMZXZlbEluZGljYXRvcnMiLHZhbHVlOmZ1bmN0aW9uKGQsaCl7dmFyIG09dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhkKSxfPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93TGV2ZWwobSksTz10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QobSksWD1oLmdldEVsZW1lbnRzQnlU'@;
put 'YWdOYW1lKCJESVYiKVswXSxhZT1YLnF1ZXJ5U2VsZWN0b3IoInNwYW4ucm93SGVhZGVyIik7aWYoUm4oWC5xdWVyeVNlbGVjdG9yQWxsKCdbY2xhc3NePSJodF9uZXN0aW5nIl0nKSxmdW5jdGlvbihaZSl7WmUmJlgucmVtb3ZlQ2hpbGQoWmUpfSksZ2koaCxhLkNTU19DTEFTU0VTLmluZGlj'@;
put 'YXRvckNvbnRhaW5lciksXyl7dmFyIGJlPXRoaXMuaG90LnJvb3REb2N1bWVudCx4ZT1hZS5jbG9uZU5vZGUoITApO1guaW5uZXJIVE1MPSIiLF9vKDAsXy0xLGZ1bmN0aW9uKCl7dmFyIFplPWJlLmNyZWF0ZUVsZW1lbnQoIlNQQU4iKTtnaShaZSxhLkNTU19DTEFTU0VTLmVtcHR5SW5kaWNh'@;
put 'dG9yKSxYLmFwcGVuZENoaWxkKFplKX0pLFguYXBwZW5kQ2hpbGQoeGUpfWlmKHRoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4oTykpe3ZhciBWZT10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIik7Z2koaCxhLkNTU19DTEFTU0VTLnBhcmVudCksdGhpcy5jb2xs'@;
put 'YXBzaW5nVUkuYXJlQ2hpbGRyZW5Db2xsYXBzZWQobSk/Z2koVmUsIiIuY29uY2F0KGEuQ1NTX0NMQVNTRVMuYnV0dG9uLCIgIikuY29uY2F0KGEuQ1NTX0NMQVNTRVMuZXhwYW5kQnV0dG9uKSk6Z2koVmUsIiIuY29uY2F0KGEuQ1NTX0NMQVNTRVMuYnV0dG9uLCIgIikuY29uY2F0KGEuQ1NT'@;
put 'X0NMQVNTRVMuY29sbGFwc2VCdXR0b24pKSxYLmFwcGVuZENoaWxkKFZlKX19fSx7a2V5OiJ1cGRhdGVSb3dIZWFkZXJXaWR0aCIsdmFsdWU6ZnVuY3Rpb24oZCl7dmFyIGg9ZDtofHwoaD10aGlzLmRhdGFNYW5hZ2VyLmNhY2hlLmxldmVsQ291bnQpLHRoaXMucm93SGVhZGVyV2lkdGhDYWNo'@;
put 'ZT1NYXRoLm1heCg1MCwxMSsxMCpoKzI1KSx0aGlzLmhvdC5yZW5kZXIoKX19XSxbe2tleToiQ1NTX0NMQVNTRVMiLGdldDpmdW5jdGlvbigpe3JldHVybntpbmRpY2F0b3JDb250YWluZXI6Imh0X25lc3RpbmdMZXZlbHMiLHBhcmVudDoiaHRfbmVzdGluZ1BhcmVudCIsaW5kaWNhdG9yOiJo'@;
put 'dF9uZXN0aW5nTGV2ZWwiLGVtcHR5SW5kaWNhdG9yOiJodF9uZXN0aW5nTGV2ZWxfZW1wdHkiLGJ1dHRvbjoiaHRfbmVzdGluZ0J1dHRvbiIsZXhwYW5kQnV0dG9uOiJodF9uZXN0aW5nRXhwYW5kIixjb2xsYXBzZUJ1dHRvbjoiaHRfbmVzdGluZ0NvbGxhcHNlIn19fV0pLGF9KFhYKTtjb25z'@;
put 'dCBkNWU9R3d0O2Z1bmN0aW9uIHZiKGwpe3JldHVybih2Yj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2Yg'@;
put 'U3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIGg1ZShsKXtyZXR1cm4gZnVuY3Rpb24gWHd0KGwpe2lmKEFycmF5LmlzQXJyYXkobCkpcmV0dXJuIFFYKGwpfShsKXx8ZnVuY3Rpb24gcXd0'@;
put 'KGwpe2lmKHR5cGVvZiBTeW1ib2w8InUiJiZudWxsIT1sW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWxbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbShsKX0obCl8fGZ1bmN0aW9uIEt3dChsLGMpe2lmKGwpe2lmKCJzdHJpbmciPT10eXBlb2YgbClyZXR1cm4gUVgobCxjKTt2YXIg'@;
put 'YT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobCkuc2xpY2UoOCwtMSk7aWYoIk9iamVjdCI9PT1hJiZsLmNvbnN0cnVjdG9yJiYoYT1sLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09YXx8IlNldCI9PT1hKXJldHVybiBBcnJheS5mcm9tKGwpO2lmKCJBcmd1bWVudHMiPT09YXx8'@;
put 'L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QoYSkpcmV0dXJuIFFYKGwsYyl9fShsKXx8ZnVuY3Rpb24gJHd0KCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRl'@;
put 'ciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gUVgobCxjKXsobnVsbD09Y3x8Yz5sLmxlbmd0aCkmJihjPWwubGVuZ3RoKTtmb3IodmFyIGE9MCxmPW5ldyBBcnJheShjKTthPGM7'@;
put 'YSsrKWZbYV09bFthXTtyZXR1cm4gZn1mdW5jdGlvbiBwNWUobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5k'@;
put 'ZWZpbmVQcm9wZXJ0eShsLGVDdChmLmtleSksZil9fWZ1bmN0aW9uIGVDdChsKXt2YXIgYz1mdW5jdGlvbiB0Q3QobCxjKXtpZigib2JqZWN0IiE9PXZiKGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9YS5jYWxs'@;
put 'KGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PXZiKGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3RyaW5nIik7'@;
put 'cmV0dXJuInN5bWJvbCI9PT12YihjKT9jOlN0cmluZyhjKX1mdW5jdGlvbiBlSihsLGMpe3JldHVybihlSj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihmLGQpe3JldHVybiBmLl9fcHJvdG9fXz1kLGZ9KShsLGMpfWZ1bmN0aW9u'@;
put 'IFBQKGwpe3JldHVybihQUD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihhKXtyZXR1cm4gYS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihhKX0pKGwpfXZhciBsQ3Q9ZnVuY3Rpb24obCl7IWZ1bmN0aW9uIG5DdChs'@;
put 'LGMpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjJiZudWxsIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2wucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYyYmYy5wcm90b3R5cGUse2NvbnN0cnVjdG9y'@;
put 'Ont2YWx1ZTpsLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxjJiZlSihsLGMpfShhLGwpO3ZhciBjPWZ1bmN0aW9uIHJDdChsKXt2YXIgYz1mdW5jdGlvbiBhQ3QoKXtpZih0eXBlb2YgUmVm'@;
put 'bGVjdD4idSJ8fCFSZWZsZWN0LmNvbnN0cnVjdHx8UmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVh'@;
put 'bixbXSxmdW5jdGlvbigpe30pKSwhMH1jYXRjaHtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGQsZj1QUChsKTtpZihjKXt2YXIgaD1QUCh0aGlzKS5jb25zdHJ1Y3RvcjtkPVJlZmxlY3QuY29uc3RydWN0KGYsYXJndW1lbnRzLGgpfWVsc2UgZD1mLmFwcGx5KHRoaXMsYXJn'@;
put 'dW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24gaUN0KGwsYyl7aWYoYyYmKCJvYmplY3QiPT09dmIoYyl8fCJmdW5jdGlvbiI9PXR5cGVvZiBjKSlyZXR1cm4gYztpZih2b2lkIDAhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmpl'@;
put 'Y3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uIG9DdChsKXtpZih2b2lkIDA9PT1sKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGx9KGwpfSh0aGlzLGQpfX0o'@;
put 'YSk7ZnVuY3Rpb24gYShmLGQpe3ZhciBoO3JldHVybiBmdW5jdGlvbiBKd3QobCxjKXtpZighKGwgaW5zdGFuY2VvZiBjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxhKSwoaD1jLmNhbGwodGhpcyxmLGQpKS5kYXRhTWFu'@;
put 'YWdlcj1oLnBsdWdpbi5kYXRhTWFuYWdlcixoLmNvbGxhcHNlZFJvd3M9W10saC5jb2xsYXBzZWRSb3dzU3Rhc2g9e3N0YXNoOmZ1bmN0aW9uKCl7dmFyIF89YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtoLmxhc3RDb2xsYXBzZWRSb3dz'@;
put 'PWguY29sbGFwc2VkUm93cy5zbGljZSgwKSxoLmV4cGFuZE11bHRpcGxlQ2hpbGRyZW4oaC5sYXN0Q29sbGFwc2VkUm93cyxfKX0sc2hpZnRTdGFzaDpmdW5jdGlvbihfLE8pe3ZhciBYPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToxO251'@;
put 'bGw9PU8mJihPPTEvMCksUm4oaC5sYXN0Q29sbGFwc2VkUm93cyxmdW5jdGlvbihhZSxwZSl7YWU+PV8mJmFlPE8mJihoLmxhc3RDb2xsYXBzZWRSb3dzW3BlXT1hZStYKX0pfSxhcHBseVN0YXNoOmZ1bmN0aW9uKCl7aC5jb2xsYXBzZU11bHRpcGxlQ2hpbGRyZW4oaC5sYXN0Q29sbGFwc2Vk'@;
put 'Um93cywhKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdKSxoLmxhc3RDb2xsYXBzZWRSb3dzPXZvaWQgMH0sdHJpbVN0YXNoOmZ1bmN0aW9uKF8sTyl7X28oXyxfK08tMSxmdW5jdGlvbihYKXt2YXIgYWU9aC5sYXN0Q29sbGFwc2VkUm93'@;
put 'cy5pbmRleE9mKFgpO2FlPi0xJiZoLmxhc3RDb2xsYXBzZWRSb3dzLnNwbGljZShhZSwxKX0pfX0saH1yZXR1cm4gZnVuY3Rpb24gUXd0KGwsYyxhKXtjJiZwNWUobC5wcm90b3R5cGUsYyksYSYmcDVlKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxl'@;
put 'OiExfSl9KGEsW3trZXk6ImNvbGxhcHNlQ2hpbGRyZW4iLHZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBwZSxoPXRoaXMsbT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLF89IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3Vt'@;
put 'ZW50c1syXSl8fGFyZ3VtZW50c1syXSxPPVtdLFg9bnVsbCxhZT1udWxsO3JldHVybiBpc05hTihkKT9hZT10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KFg9ZCk6KFg9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhT2JqZWN0KGQpLGFlPWQpLHRoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRy'@;
put 'ZW4oWCkmJlJuKFguX19jaGlsZHJlbixmdW5jdGlvbihiZSl7Ty5wdXNoKGguZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoYmUpKX0pLHBlPXRoaXMuY29sbGFwc2VSb3dzKE8sITAsITEpLF8mJnRoaXMudHJpbVJvd3MocGUpLG0mJnRoaXMucmVuZGVyQW5kQWRqdXN0KCksLTE9PT10aGlzLmNv'@;
put 'bGxhcHNlZFJvd3MuaW5kZXhPZihhZSkmJnRoaXMuY29sbGFwc2VkUm93cy5wdXNoKGFlKSxwZX19LHtrZXk6ImNvbGxhcHNlTXVsdGlwbGVDaGlsZHJlbiIsdmFsdWU6ZnVuY3Rpb24oZCl7dmFyIGg9dGhpcyxtPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0p'@;
put 'fHxhcmd1bWVudHNbMV0sXz0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdLE89W107Um4oZCxmdW5jdGlvbihYKXtPLnB1c2guYXBwbHkoTyxoNWUoaC5jb2xsYXBzZUNoaWxkcmVuKFgsITEsITEpKSl9KSxfJiZ0aGlzLnRyaW1Sb3dz'@;
put 'KE8pLG0mJnRoaXMucmVuZGVyQW5kQWRqdXN0KCl9fSx7a2V5OiJjb2xsYXBzZVJvdyIsdmFsdWU6ZnVuY3Rpb24oZCl7dGhpcy5jb2xsYXBzZVJvd3MoW2RdLCEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0pfX0se2tleToiY29sbGFw'@;
put 'c2VSb3dzIix2YWx1ZTpmdW5jdGlvbihkKXt2YXIgaD10aGlzLG09IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxfPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0sTz1bXTtyZXR1'@;
put 'cm4gUm4oZCxmdW5jdGlvbihYKXtPLnB1c2goWCksbSYmaC5jb2xsYXBzZUNoaWxkUm93cyhYLE8pfSksXyYmdGhpcy50cmltUm93cyhPKSxPfX0se2tleToiY29sbGFwc2VDaGlsZFJvd3MiLHZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBoPXRoaXMsbT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQg'@;
put 'MCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10sTz1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdO3RoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4oZCkmJlJuKHRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChkKS5fX2No'@;
put 'aWxkcmVuLGZ1bmN0aW9uKGFlKXt2YXIgcGU9aC5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChhZSk7bS5wdXNoKHBlKSxoLmNvbGxhcHNlQ2hpbGRSb3dzKHBlLG0pfSksTyYmdGhpcy50cmltUm93cyhtKX19LHtrZXk6ImV4cGFuZFJvdyIsdmFsdWU6ZnVuY3Rpb24oZCl7dGhpcy5leHBhbmRS'@;
put 'b3dzKFtkXSwhKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdKX19LHtrZXk6ImV4cGFuZFJvd3MiLHZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBoPXRoaXMsbT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8'@;
put 'YXJndW1lbnRzWzFdLF89YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxPPVtdO3JldHVybiBSbihkLGZ1bmN0aW9uKFgpe08ucHVzaChYKSxtJiZoLmV4cGFuZENoaWxkUm93cyhYLE8pfSksXyYmdGhpcy51bnRyaW1Sb3dzKE8pLE99fSx7'@;
put 'a2V5OiJleHBhbmRDaGlsZFJvd3MiLHZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBoPXRoaXMsbT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10sTz1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRz'@;
put 'WzNdO3RoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4oZCkmJlJuKHRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChkKS5fX2NoaWxkcmVuLGZ1bmN0aW9uKGFlKXtpZighaC5pc0FueVBhcmVudENvbGxhcHNlZChhZSkpe3ZhciBwZT1oLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KGFl'@;
put 'KTttLnB1c2gocGUpLGguZXhwYW5kQ2hpbGRSb3dzKHBlLG0pfX0pLE8mJnRoaXMudW50cmltUm93cyhtKX19LHtrZXk6ImV4cGFuZENoaWxkcmVuIix2YWx1ZTpmdW5jdGlvbihkKXt2YXIgcGUsaD10aGlzLG09IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8'@;
put 'fGFyZ3VtZW50c1sxXSxfPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl0sTz1bXSxYPW51bGwsYWU9bnVsbDtyZXR1cm4gaXNOYU4oZCk/KFg9ZCxhZT10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KGQpKTooWD10aGlzLmRhdGFN'@;
put 'YW5hZ2VyLmdldERhdGFPYmplY3QoZCksYWU9ZCksdGhpcy5jb2xsYXBzZWRSb3dzLnNwbGljZSh0aGlzLmNvbGxhcHNlZFJvd3MuaW5kZXhPZihhZSksMSksdGhpcy5kYXRhTWFuYWdlci5oYXNDaGlsZHJlbihYKSYmUm4oWC5fX2NoaWxkcmVuLGZ1bmN0aW9uKGJlKXt2YXIgeGU9aC5kYXRh'@;
put 'TWFuYWdlci5nZXRSb3dJbmRleChiZSk7Ty5wdXNoKHhlKX0pLHBlPXRoaXMuZXhwYW5kUm93cyhPLCEwLCExKSxfJiZ0aGlzLnVudHJpbVJvd3MocGUpLG0mJnRoaXMucmVuZGVyQW5kQWRqdXN0KCkscGV9fSx7a2V5OiJleHBhbmRNdWx0aXBsZUNoaWxkcmVuIix2YWx1ZTpmdW5jdGlvbihk'@;
put 'KXt2YXIgaD10aGlzLG09IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxfPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl0sTz1bXTtSbihkLGZ1bmN0aW9uKFgpe08ucHVzaC5h'@;
put 'cHBseShPLGg1ZShoLmV4cGFuZENoaWxkcmVuKFgsITEsITEpKSl9KSxfJiZ0aGlzLnVudHJpbVJvd3MoTyksbSYmdGhpcy5yZW5kZXJBbmRBZGp1c3QoKX19LHtrZXk6ImNvbGxhcHNlQWxsIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXMsaD10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGEo'@;
put 'KSxtPVtdO1JuKGgsZnVuY3Rpb24oXyl7ZC5kYXRhTWFuYWdlci5oYXNDaGlsZHJlbihfKSYmbS5wdXNoKF8pfSksdGhpcy5jb2xsYXBzZU11bHRpcGxlQ2hpbGRyZW4obSksdGhpcy5yZW5kZXJBbmRBZGp1c3QoKX19LHtrZXk6ImV4cGFuZEFsbCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10'@;
put 'aGlzLGg9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhKCksbT1bXTtSbihoLGZ1bmN0aW9uKF8pe2QuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4oXykmJm0ucHVzaChfKX0pLHRoaXMuZXhwYW5kTXVsdGlwbGVDaGlsZHJlbihtKSx0aGlzLnJlbmRlckFuZEFkanVzdCgpfX0se2tleToidHJpbVJv'@;
put 'd3MiLHZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBoPXRoaXM7dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oZnVuY3Rpb24oKXtSbihkLGZ1bmN0aW9uKG0pe2gucGx1Z2luLmNvbGxhcHNlZFJvd3NNYXAuc2V0VmFsdWVBdEluZGV4KG0sITApfSl9LCEwKX19LHtrZXk6InVudHJpbVJvd3MiLHZhbHVl'@;
put 'OmZ1bmN0aW9uKGQpe3ZhciBoPXRoaXM7dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oZnVuY3Rpb24oKXtSbihkLGZ1bmN0aW9uKG0pe2gucGx1Z2luLmNvbGxhcHNlZFJvd3NNYXAuc2V0VmFsdWVBdEluZGV4KG0sITEpfSl9LCEwKX19LHtrZXk6ImFyZUNoaWxkcmVuQ29sbGFwc2VkIix2YWx1'@;
put 'ZTpmdW5jdGlvbihkKXt2YXIgaD10aGlzLG09aXNOYU4oZCk/ZDp0aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QoZCksXz0hMDtyZXR1cm4gbnVsbD09PW0mJihtPXtfX2NoaWxkcmVuOnRoaXMuZGF0YU1hbmFnZXIuZGF0YX0pLHRoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4obSkm'@;
put 'JlJuKG0uX19jaGlsZHJlbixmdW5jdGlvbihPKXt2YXIgWD1oLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KE8pO2lmKCFoLnBsdWdpbi5jb2xsYXBzZWRSb3dzTWFwLmdldFZhbHVlQXRJbmRleChYKSlyZXR1cm4gXz0hMSwhMX0pLF99fSx7a2V5OiJpc0FueVBhcmVudENvbGxhcHNlZCIsdmFs'@;
put 'dWU6ZnVuY3Rpb24oZCl7Zm9yKHZhciBoPWQ7bnVsbCE9PWg7KXtoPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93UGFyZW50KGgpO3ZhciBtPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoaCk7aWYodGhpcy5jb2xsYXBzZWRSb3dzLmluZGV4T2YobSk+LTEpcmV0dXJuITB9cmV0dXJuITF9'@;
put 'fSx7a2V5OiJ0b2dnbGVTdGF0ZSIsdmFsdWU6ZnVuY3Rpb24oZCxoKXtpZighKGguY29sPj0wKSl7dmFyIG09dGhpcy50cmFuc2xhdGVUcmltbWVkUm93KGgucm93KTtZbyhkLnRhcmdldCxkNWUuQ1NTX0NMQVNTRVMuYnV0dG9uKSYmKHRoaXMuYXJlQ2hpbGRyZW5Db2xsYXBzZWQobSk/dGhp'@;
put 'cy5leHBhbmRDaGlsZHJlbihtKTp0aGlzLmNvbGxhcHNlQ2hpbGRyZW4obSksSGQoZCkpfX19LHtrZXk6InRyYW5zbGF0ZVRyaW1tZWRSb3ciLHZhbHVlOmZ1bmN0aW9uKGQpe3JldHVybiB0aGlzLmhvdC50b1BoeXNpY2FsUm93KGQpfX0se2tleToidW50cmFuc2xhdGVUcmltbWVkUm93Iix2'@;
put 'YWx1ZTpmdW5jdGlvbihkKXtyZXR1cm4gdGhpcy5ob3QudG9WaXN1YWxSb3coZCl9fSx7a2V5OiJyZW5kZXJBbmRBZGp1c3QiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5ob3QucmVuZGVyKCksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKX19XSksYX0oWFgpO2NvbnN0IHNDdD1s'@;
put 'Q3Q7ZnVuY3Rpb24geWIobCl7cmV0dXJuKHliPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wm'@;
put 'JmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24gbTVlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1'@;
put 'cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxmQ3QoZi5rZXkpLGYpfX1mdW5jdGlvbiBmQ3QobCl7dmFyIGM9ZnVuY3Rpb24gZEN0KGwsYyl7aWYoIm9iamVjdCIhPT15YihsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtT'@;
put 'eW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT15YihmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVy'@;
put 'bigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09eWIoYyk/YzpTdHJpbmcoYyl9ZnVuY3Rpb24gdEoobCxjKXtyZXR1cm4odEo9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rp'@;
put 'b24oZixkKXtyZXR1cm4gZi5fX3Byb3RvX189ZCxmfSkobCxjKX1mdW5jdGlvbiBnNWUobCl7aWYodm9pZCAwPT09bCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBsfWZ1'@;
put 'bmN0aW9uIEZQKGwpe3JldHVybihGUD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihhKXtyZXR1cm4gYS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihhKX0pKGwpfXZhciB2NWU9bmV3IFdlYWtNYXAsdkN0PWZ1bmN0'@;
put 'aW9uKGwpeyFmdW5jdGlvbiBoQ3QobCxjKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyYmbnVsbCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtsLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGMmJmMu'@;
put 'cHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6bCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksYyYmdEoobCxjKX0oYSxsKTt2YXIgYz1mdW5jdGlvbiBwQ3QobCl7dmFyIGM9ZnVuY3Rp'@;
put 'b24gZ0N0KCl7aWYodHlwZW9mIFJlZmxlY3Q+InUifHwhUmVmbGVjdC5jb25zdHJ1Y3R8fFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJl'@;
put 'ZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sZnVuY3Rpb24oKXt9KSksITB9Y2F0Y2h7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciBkLGY9RlAobCk7aWYoYyl7dmFyIGg9RlAodGhpcykuY29uc3RydWN0b3I7ZD1SZWZsZWN0LmNvbnN0cnVjdChmLGFyZ3VtZW50cyxoKX1l'@;
put 'bHNlIGQ9Zi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uIG1DdChsLGMpe2lmKGMmJigib2JqZWN0Ij09PXliKGMpfHwiZnVuY3Rpb24iPT10eXBlb2YgYykpcmV0dXJuIGM7aWYodm9pZCAwIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9y'@;
put 'cyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBnNWUobCl9KHRoaXMsZCl9fShhKTtmdW5jdGlvbiBhKGYsZCl7dmFyIGg7cmV0dXJuIGZ1bmN0aW9uIHVDdChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBj'@;
put 'YWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGEpLGg9Yy5jYWxsKHRoaXMsZixkKSx2NWUuc2V0KGc1ZShoKSx7cm93X2Fib3ZlOmZ1bmN0aW9uKF8sTyl7aC5kYXRhTWFuYWdlci5hZGRTaWJsaW5nKE9bTy5sZW5ndGgtMV0uc3RhcnQucm93LCJhYm92ZSIpfSxyb3dfYmVsb3c6'@;
put 'ZnVuY3Rpb24oXyxPKXtoLmRhdGFNYW5hZ2VyLmFkZFNpYmxpbmcoT1tPLmxlbmd0aC0xXS5zdGFydC5yb3csImJlbG93Iil9fSksaC5kYXRhTWFuYWdlcj1oLnBsdWdpbi5kYXRhTWFuYWdlcixofXJldHVybiBmdW5jdGlvbiBjQ3QobCxjLGEpe2MmJm01ZShsLnByb3RvdHlwZSxjKSxhJiZt'@;
put 'NWUobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0oYSxbe2tleToiYXBwZW5kT3B0aW9ucyIsdmFsdWU6ZnVuY3Rpb24oZCl7dmFyIGg9dGhpcyxtPVt7a2V5OiJhZGRfY2hpbGQiLG5hbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRU'@;
put 'cmFuc2xhdGVkUGhyYXNlKEdHKX0sY2FsbGJhY2s6ZnVuY3Rpb24oKXt2YXIgTz1oLmRhdGFNYW5hZ2VyLnRyYW5zbGF0ZVRyaW1tZWRSb3coaC5ob3QuZ2V0U2VsZWN0ZWRMYXN0KClbMF0pLFg9aC5kYXRhTWFuYWdlci5nZXREYXRhT2JqZWN0KE8pO2guZGF0YU1hbmFnZXIuYWRkQ2hpbGQo'@;
put 'WCl9LGRpc2FibGVkOmZ1bmN0aW9uKCl7dmFyIE89aC5ob3QuZ2V0U2VsZWN0ZWRMYXN0KCk7cmV0dXJuIU98fE9bMF08MHx8aC5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHxoLmhvdC5jb3VudFJvd3MoKT49aC5ob3QuZ2V0U2V0dGluZ3MoKS5tYXhSb3dzfX0s'@;
put 'e2tleToiZGV0YWNoX2Zyb21fcGFyZW50IixuYW1lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZSgkRyl9LGNhbGxiYWNrOmZ1bmN0aW9uKCl7aC5kYXRhTWFuYWdlci5kZXRhY2hGcm9tUGFyZW50KGguaG90LmdldFNlbGVjdGVkTGFzdCgpKX0sZGlzYWJsZWQ6'@;
put 'ZnVuY3Rpb24oKXt2YXIgTz1oLmhvdC5nZXRTZWxlY3RlZExhc3QoKSxYPWguZGF0YU1hbmFnZXIudHJhbnNsYXRlVHJpbW1lZFJvdyhPWzBdKTtyZXR1cm4haC5kYXRhTWFuYWdlci5nZXRSb3dQYXJlbnQoWCl8fCFPfHxPWzBdPDB8fGguaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1'@;
put 'bW5IZWFkZXIoKXx8aC5ob3QuY291bnRSb3dzKCk+PWguaG90LmdldFNldHRpbmdzKCkubWF4Um93c319LHtuYW1lOiItLS0tLS0tLS0ifV07cmV0dXJuIF9vKDAsZC5pdGVtcy5sZW5ndGgtMSxmdW5jdGlvbihfKXtpZigwPT09XylyZXR1cm4gUm4obSxmdW5jdGlvbihPLFgpe2QuaXRlbXMu'@;
put 'c3BsaWNlKF8rWCwwLE8pfSksITF9KSx0aGlzLm1vZGlmeVJvd0luc2VydGluZ09wdGlvbnMoZCl9fSx7a2V5OiJtb2RpZnlSb3dJbnNlcnRpbmdPcHRpb25zIix2YWx1ZTpmdW5jdGlvbihkKXt2YXIgaD12NWUuZ2V0KHRoaXMpO3JldHVybiBfbygwLGQuaXRlbXMubGVuZ3RoLTEsZnVuY3Rp'@;
put 'b24obSl7dmFyIF89aFtkLml0ZW1zW21dLmtleV07bnVsbCE9XyYmKGQuaXRlbXNbbV0uY2FsbGJhY2s9Xyl9KSxkfX1dKSxhfShYWCk7Y29uc3QgeUN0PXZDdDtmdW5jdGlvbiBGRShsKXtyZXR1cm4oRkU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1i'@;
put 'b2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX12YXIgeTVl'@;
put 'O2Z1bmN0aW9uIGI1ZShsKXtyZXR1cm4gZnVuY3Rpb24gQ0N0KGwpe2lmKEFycmF5LmlzQXJyYXkobCkpcmV0dXJuIG5KKGwpfShsKXx8ZnVuY3Rpb24gd0N0KGwpe2lmKHR5cGVvZiBTeW1ib2w8InUiJiZudWxsIT1sW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWxbIkBAaXRlcmF0b3IiXSly'@;
put 'ZXR1cm4gQXJyYXkuZnJvbShsKX0obCl8fGZ1bmN0aW9uIF9DdChsLGMpe2lmKGwpe2lmKCJzdHJpbmciPT10eXBlb2YgbClyZXR1cm4gbkoobCxjKTt2YXIgYT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobCkuc2xpY2UoOCwtMSk7aWYoIk9iamVjdCI9PT1hJiZsLmNvbnN0cnVj'@;
put 'dG9yJiYoYT1sLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09YXx8IlNldCI9PT1hKXJldHVybiBBcnJheS5mcm9tKGwpO2lmKCJBcmd1bWVudHMiPT09YXx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QoYSkpcmV0dXJuIG5KKGwsYyl9fShsKXx8ZnVu'@;
put 'Y3Rpb24gYkN0KCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2Qu'@;
put 'Iil9KCl9ZnVuY3Rpb24gbkoobCxjKXsobnVsbD09Y3x8Yz5sLmxlbmd0aCkmJihjPWwubGVuZ3RoKTtmb3IodmFyIGE9MCxmPW5ldyBBcnJheShjKTthPGM7YSsrKWZbYV09bFthXTtyZXR1cm4gZn1mdW5jdGlvbiBfNWUobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9'@;
put 'Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLEVDdChmLmtleSksZil9fWZ1bmN0aW9uIEVDdChsKXt2YXIgYz1mdW5jdGlvbiB4Q3QobCxjKXtpZigi'@;
put 'b2JqZWN0IiE9PUZFKGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PUZFKGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9Qcmlt'@;
put 'aXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1GRShjKT9jOlN0cmluZyhjKX12YXIgQUN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbChjKXsoZnVuY3Rp'@;
put 'b24gTUN0KGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLGwpLHRoaXMucGx1Z2luPWMsdGhpcy5ob3Q9Yy5ob3QsdGhpcy5kYXRhTWFuYWdlcj1jLmRhdGFNYW5hZ2VyLHRoaXMu'@;
put 'Y29sbGFwc2luZ1VJPWMuY29sbGFwc2luZ1VJfXJldHVybiBmdW5jdGlvbiBrQ3QobCxjLGEpe2MmJl81ZShsLnByb3RvdHlwZSxjKSxhJiZfNWUobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0obCxbe2tleToib25CZWZvcmVSb3dNb3Zl'@;
put 'Iix2YWx1ZTpmdW5jdGlvbihhLGYsZCxoKXt2YXIgbT10aGlzO2lmKHRoaXMuZGlzcGxheUFQSUNvbXBhdGliaWxpdHlXYXJuaW5nKHtyb3dzOmEsZmluYWxJbmRleDpmLGRyb3BJbmRleDpkLG1vdmVQb3NzaWJsZTpofSkpcmV0dXJuITE7dGhpcy5tb3ZlZFRvQ29sbGFwc2VkPSExO3ZhciBP'@;
put 'PWQ9PT10aGlzLmhvdC5jb3VudFJvd3MoKSxYPU8/dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCk6dGhpcy5kYXRhTWFuYWdlci50cmFuc2xhdGVUcmltbWVkUm93KGQpLGFlPSEwLHBlPWEubWFwKGZ1bmN0aW9uKGx0KXtpZighYWUpcmV0dXJuITE7dmFyIGR0PW0uZGF0YU1hbmFnZXIudHJh'@;
put 'bnNsYXRlVHJpbW1lZFJvdyhsdCk7cmV0dXJuIGFlPW0uc2hvdWxkQWxsb3dNb3ZpbmcoZHQsWCksZHR9KSxiZT0tMT09PXBlLmluZGV4T2YoWCk7aWYoIWFlfHwhYmUpcmV0dXJuITE7dmFyIHhlPXRoaXMuZ2V0QmFzZVBhcmVudChwZSksVmU9dGhpcy5nZXRUYXJnZXRQYXJlbnQoTyxYKSxa'@;
put 'ZT14ZT09PVZlO3JldHVybiB0aGlzLm1vdmVkVG9Db2xsYXBzZWQ9dGhpcy5jb2xsYXBzaW5nVUkuYXJlQ2hpbGRyZW5Db2xsYXBzZWQoVmUpLHRoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zdGFzaCgpLHRoaXMuc2hpZnRDb2xsYXBzaWJsZVBhcmVudHNMb2NhdGlvbnMo'@;
put 'cGUsWCxaZSksdGhpcy5tb3ZlUm93cyhwZSxYLFZlKSx0aGlzLmRhdGFNYW5hZ2VyLnJld3JpdGVDYWNoZSgpLHRoaXMubW92ZUNlbGxzTWV0YShwZSxYKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guYXBwbHlTdGFzaCghMSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVy'@;
put 'Um93TW92ZSIsYSxmLGQsaCxoJiZ0aGlzLmlzUm93T3JkZXJDaGFuZ2VkKGEsZikpLHRoaXMuaG90LnJlbmRlcigpLHRoaXMuc2VsZWN0Q2VsbHMoYSxkKSwhMX19LHtrZXk6ImRpc3BsYXlBUElDb21wYXRpYmlsaXR5V2FybmluZyIsdmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGY9YS5yb3dzLGQ9'@;
put 'YS5maW5hbEluZGV4LGg9YS5kcm9wSW5kZXgsbT1hLm1vdmVQb3NzaWJsZSxfPSExO3JldHVybiBMbChoKSYmKFdsKE9sKHk1ZXx8KHk1ZT1mdW5jdGlvbiBTQ3QobCxjKXtyZXR1cm4gY3x8KGM9bC5zbGljZSgwKSksT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhsLHty'@;
put 'YXc6e3ZhbHVlOk9iamVjdC5mcmVlemUoYyl9fSkpfShbIlNpbmNlIHZlcnNpb24gOC4wLjAgb2YgdGhlIEhhbmRzb250YWJsZSB0aGUgJ21vdmVSb3dzJyBtZXRob2QgaXNuJ3QgdXNlZCBmb3IgbW92aW5nIHJvd3MgXG4gICAgICB3aGVuIHRoZSBOZXN0ZWRSb3dzIHBsdWdpbiBpcyBlbmFi'@;
put 'bGVkLiBQbGVhc2UgdXNlIHRoZSAnZHJhZ1Jvd3MnIG1ldGhvZCBpbnN0ZWFkLiJdLFsiU2luY2UgdmVyc2lvbiA4LjAuMCBvZiB0aGUgSGFuZHNvbnRhYmxlIHRoZSAnbW92ZVJvd3MnIG1ldGhvZCBpc24ndCB1c2VkIGZvciBtb3Zpbmcgcm93c1xceDIwXG4gICAgICB3aGVuIHRoZSBOZXN0'@;
put 'ZWRSb3dzIHBsdWdpbiBpcyBlbmFibGVkLiBQbGVhc2UgdXNlIHRoZSAnZHJhZ1Jvd3MnIG1ldGhvZCBpbnN0ZWFkLiJdKSkpKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSb3dNb3ZlIixmLGQsaCxtLCExKSxfPSEwKSxffX0se2tleToic2hvdWxkQWxsb3dNb3ZpbmciLHZhbHVlOmZ1bmN0'@;
put 'aW9uKGEsZil7cmV0dXJuISh0aGlzLmRhdGFNYW5hZ2VyLmlzUGFyZW50KGEpfHx0aGlzLmRhdGFNYW5hZ2VyLmlzUm93SGlnaGVzdExldmVsKGEpfHxhPT09Znx8MD09PWYpfX0se2tleToiZ2V0QmFzZVBhcmVudCIsdmFsdWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZGF0YU1hbmFnZXIu'@;
put 'Z2V0Um93UGFyZW50KGFbMF0pfX0se2tleToiZ2V0VGFyZ2V0UGFyZW50Iix2YWx1ZTpmdW5jdGlvbihhLGYpe3ZhciBkPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93UGFyZW50KGE/Zi0xOmYpO3JldHVybiBudWxsPT1kJiYoZD10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd1BhcmVudChmLTEpKSxk'@;
put 'fX0se2tleToic2hpZnRDb2xsYXBzaWJsZVBhcmVudHNMb2NhdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKGEsZixkKXtkfHwoTWF0aC5tYXguYXBwbHkoTWF0aCxiNWUoYSkpPD1mP3RoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zaGlmdFN0YXNoKGFbMF0sZiwtMSphLmxlbmd0'@;
put 'aCk6dGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnNoaWZ0U3Rhc2goZixhWzBdLGEubGVuZ3RoKSl9fSx7a2V5OiJtb3ZlUm93cyIsdmFsdWU6ZnVuY3Rpb24oYSxmLGQpe3ZhciBoPXRoaXMsbT1mPT09dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChkKSt0aGlzLmRh'@;
put 'dGFNYW5hZ2VyLmNvdW50Q2hpbGRyZW4oZCkrMTt0aGlzLmhvdC5iYXRjaFJlbmRlcihmdW5jdGlvbigpe2EuZm9yRWFjaChmdW5jdGlvbihfKXtoLmRhdGFNYW5hZ2VyLm1vdmVSb3coXyxmLGgubW92ZWRUb0NvbGxhcHNlZCxtKX0pfSl9fSx7a2V5OiJtb3ZlQ2VsbHNNZXRhIix2YWx1ZTpm'@;
put 'dW5jdGlvbihhLGYpe3ZhciBoLGQ9dGhpcyxtPVtdLF89TWF0aC5tYXguYXBwbHkoTWF0aCxiNWUoYSkpPGY7YS5mb3JFYWNoKGZ1bmN0aW9uKE8pe20ucHVzaChkLmhvdC5nZXRDZWxsTWV0YUF0Um93KE8pKX0pLHRoaXMuaG90LnNwbGljZUNlbGxzTWV0YShhWzBdLGEubGVuZ3RoKSwoaD10'@;
put 'aGlzLmhvdCkuc3BsaWNlQ2VsbHNNZXRhLmFwcGx5KGgsW2YtKF8/bS5sZW5ndGg6MCksMF0uY29uY2F0KG0pKX19LHtrZXk6InNlbGVjdENlbGxzIix2YWx1ZTpmdW5jdGlvbihhLGYpe3ZhciBPLGQ9YS5sZW5ndGgsaD0wLG09MCxfPW51bGw7aWYodGhpcy5tb3ZlZFRvQ29sbGFwc2VkKXt2'@;
put 'YXIgWDtYPXRoaXMuZGF0YU1hbmFnZXIudHJhbnNsYXRlVHJpbW1lZFJvdyhhW2QtMV08Zj9mLWQ6Zik7dmFyIGFlPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93UGFyZW50KG51bGw9PT1YP3RoaXMuaG90LmNvdW50U291cmNlUm93cygpLTE6WC0xKSxwZT10aGlzLmRhdGFNYW5hZ2VyLmdldFJv'@;
put 'd0luZGV4KGFlKTttPWg9dGhpcy5kYXRhTWFuYWdlci51bnRyYW5zbGF0ZVRyaW1tZWRSb3cocGUpfWVsc2UgYVtkLTFdPGY/aD0obT1mLTEpLWQrMTptPShoPWYpK2QtMTtfPXRoaXMuaG90LnNlbGVjdGlvbixPPXRoaXMuaG90LmNvdW50Q29scygpLTEsXy5zZXRSYW5nZVN0YXJ0KHRoaXMu'@;
put 'aG90Ll9jcmVhdGVDZWxsQ29vcmRzKGgsMCkpLF8uc2V0UmFuZ2VFbmQodGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobSxPKSwhMCl9fSx7a2V5OiJpc1Jvd09yZGVyQ2hhbmdlZCIsdmFsdWU6ZnVuY3Rpb24oYSxmKXtyZXR1cm4gYS5zb21lKGZ1bmN0aW9uKGQsaCl7cmV0dXJuIGQtaCE9'@;
put 'PWZ9KX19XSksbH0oKTtmdW5jdGlvbiBiYihsKXtyZXR1cm4oYmI9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlw'@;
put 'ZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiBySihsLGMpeyhudWxsPT1jfHxjPmwubGVuZ3RoKSYmKGM9bC5sZW5ndGgpO2Zvcih2YXIgYT0wLGY9bmV3IEFycmF5KGMpO2E8Yzth'@;
put 'KyspZlthXT1sW2FdO3JldHVybiBmfWZ1bmN0aW9uIHc1ZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRl'@;
put 'ZmluZVByb3BlcnR5KGwsRkN0KGYua2V5KSxmKX19ZnVuY3Rpb24gRkN0KGwpe3ZhciBjPWZ1bmN0aW9uIEhDdChsLGMpe2lmKCJvYmplY3QiIT09YmIobCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwo'@;
put 'bCxjfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09YmIoZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTty'@;
put 'ZXR1cm4ic3ltYm9sIj09PWJiKGMpP2M6U3RyaW5nKGMpfWZ1bmN0aW9uIHk2KCl7cmV0dXJuIHk2PXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdC5nZXQ/UmVmbGVjdC5nZXQuYmluZCgpOmZ1bmN0aW9uKGMsYSxmKXt2YXIgZD1mdW5jdGlvbiBOQ3QobCxjKXtmb3IoOyFPYmplY3QucHJv'@;
put 'dG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobCxjKSYmbnVsbCE9PShsPVUzKGwpKTspO3JldHVybiBsfShjLGEpO2lmKGQpe3ZhciBoPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZCxhKTtyZXR1cm4gaC5nZXQ/aC5nZXQuY2FsbChhcmd1bWVudHMubGVuZ3RoPDM/YzpmKTpo'@;
put 'LnZhbHVlfX0seTYuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIGlKKGwsYyl7cmV0dXJuKGlKPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGYsZCl7cmV0dXJuIGYuX19wcm90b19fPWQsZn0pKGwsYyl9ZnVuY3Rpb24g'@;
put 'QzVlKGwpe2lmKHZvaWQgMD09PWwpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gbH1mdW5jdGlvbiBVMyhsKXtyZXR1cm4oVTM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09i'@;
put 'amVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSl9KShsKX12YXIgb0o9Im5lc3RlZFJvd3MiLFozPW5ldyBXZWFrTWFwLFlDdD1mdW5jdGlvbihsKXshZnVuY3Rpb24gVkN0KGwsYyl7aWYoImZ1'@;
put 'bmN0aW9uIiE9dHlwZW9mIGMmJm51bGwhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7bC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShjJiZjLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmws'@;
put 'd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGMmJmlKKGwsYyl9KGEsbCk7dmFyIGM9ZnVuY3Rpb24gQkN0KGwpe3ZhciBjPWZ1bmN0aW9uIHpDdCgpe2lmKHR5cGVvZiBSZWZsZWN0PiJ1Inx8'@;
put 'IVJlZmxlY3QuY29uc3RydWN0fHxSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLGZ1bmN0'@;
put 'aW9uKCl7fSkpLCEwfWNhdGNoe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZCxmPVUzKGwpO2lmKGMpe3ZhciBoPVUzKHRoaXMpLmNvbnN0cnVjdG9yO2Q9UmVmbGVjdC5jb25zdHJ1Y3QoZixhcmd1bWVudHMsaCl9ZWxzZSBkPWYuYXBwbHkodGhpcyxhcmd1bWVudHMpO3Jl'@;
put 'dHVybiBmdW5jdGlvbiBqQ3QobCxjKXtpZihjJiYoIm9iamVjdCI9PT1iYihjKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGMpKXJldHVybiBjO2lmKHZvaWQgMCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRl'@;
put 'ZmluZWQiKTtyZXR1cm4gQzVlKGwpfSh0aGlzLGQpfX0oYSk7ZnVuY3Rpb24gYShmKXt2YXIgZDtyZXR1cm4gZnVuY3Rpb24gTEN0KGwsYyl7aWYoIShsIGluc3RhbmNlb2YgYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMs'@;
put 'YSksKGQ9Yy5jYWxsKHRoaXMsZikpLmRhdGFNYW5hZ2VyPW51bGwsZC5oZWFkZXJzVUk9bnVsbCxkLmNvbGxhcHNlZFJvd3NNYXA9bnVsbCxaMy5zZXQoQzVlKGQpLHttb3ZlZFRvQ29sbGFwc2VkOiExLHNraXBSZW5kZXI6bnVsbCxza2lwQ29yZUFQSU1vZGlmaWVyczohMX0pLGR9cmV0dXJu'@;
put 'IGZ1bmN0aW9uIFBDdChsLGMsYSl7YyYmdzVlKGwucHJvdG90eXBlLGMpLGEmJnc1ZShsLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShhLFt7a2V5OiJpc0VuYWJsZWQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRT'@;
put 'ZXR0aW5ncygpW29KXX19LHtrZXk6ImVuYWJsZVBsdWdpbiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzO3RoaXMuZW5hYmxlZHx8KHRoaXMuY29sbGFwc2VkUm93c01hcD10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCgibmVzdGVkUm93cyIsbmV3IEhNKSx0aGlzLmRh'@;
put 'dGFNYW5hZ2VyPW5ldyBJd3QodGhpcyx0aGlzLmhvdCksdGhpcy5jb2xsYXBzaW5nVUk9bmV3IHNDdCh0aGlzLHRoaXMuaG90KSx0aGlzLmhlYWRlcnNVST1uZXcgZDVlKHRoaXMsdGhpcy5ob3QpLHRoaXMuY29udGV4dE1lbnVVST1uZXcgeUN0KHRoaXMsdGhpcy5ob3QpLHRoaXMucm93TW92'@;
put 'ZUNvbnRyb2xsZXI9bmV3IEFDdCh0aGlzKSx0aGlzLmFkZEhvb2soImFmdGVySW5pdCIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkFmdGVySW5pdC5hcHBseShkLGFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVZpZXdSZW5kZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25CZWZvcmVW'@;
put 'aWV3UmVuZGVyLmFwcGx5KGQsYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5Um93RGF0YSIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbk1vZGlmeVJvd0RhdGEuYXBwbHkoZCxhcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlTb3VyY2VMZW5ndGgiLGZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIGQub25Nb2RpZnlTb3VyY2VMZW5ndGguYXBwbHkoZCxhcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVEYXRhU3BsaWNlIixmdW5jdGlvbigpe3JldHVybiBkLm9uQmVmb3JlRGF0YVNwbGljZS5hcHBseShkLGFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImZpbHRlckRhdGEi'@;
put 'LGZ1bmN0aW9uKCl7cmV0dXJuIGQub25GaWx0ZXJEYXRhLmFwcGx5KGQsYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixmdW5jdGlvbigpe3JldHVybiBkLm9uQWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zLmFwcGx5KGQsYXJn'@;
put 'dW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRSb3dIZWFkZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25BZnRlckdldFJvd0hlYWRlci5hcHBseShkLGFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkJl'@;
put 'Zm9yZU9uQ2VsbE1vdXNlRG93bi5hcHBseShkLGFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbW92ZVJvdyIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkJlZm9yZVJlbW92ZVJvdy5hcHBseShkLGFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyUmVtb3ZlUm93IixmdW5j'@;
put 'dGlvbigpe3JldHVybiBkLm9uQWZ0ZXJSZW1vdmVSb3cuYXBwbHkoZCxhcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVBZGRDaGlsZCIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkJlZm9yZUFkZENoaWxkLmFwcGx5KGQsYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJBZGRD'@;
put 'aGlsZCIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkFmdGVyQWRkQ2hpbGQuYXBwbHkoZCxhcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVEZXRhY2hDaGlsZCIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkJlZm9yZURldGFjaENoaWxkLmFwcGx5KGQsYXJndW1lbnRzKX0pLHRoaXMuYWRk'@;
put 'SG9vaygiYWZ0ZXJEZXRhY2hDaGlsZCIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkFmdGVyRGV0YWNoQ2hpbGQuYXBwbHkoZCxhcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlSb3dIZWFkZXJXaWR0aCIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbk1vZGlmeVJvd0hlYWRlcldpZHRoLmFw'@;
put 'cGx5KGQsYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDcmVhdGVSb3ciLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25BZnRlckNyZWF0ZVJvdy5hcHBseShkLGFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVJvd01vdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25CZWZvcmVS'@;
put 'b3dNb3ZlLmFwcGx5KGQsYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlTG9hZERhdGEiLGZ1bmN0aW9uKGgpe3JldHVybiBkLm9uQmVmb3JlTG9hZERhdGEoaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVVwZGF0ZURhdGEiLGZ1bmN0aW9uKGgpe3JldHVybiBkLm9uQmVmb3JlTG9h'@;
put 'ZERhdGEoaCl9KSx5NihVMyhhLnByb3RvdHlwZSksImVuYWJsZVBsdWdpbiIsdGhpcykuY2FsbCh0aGlzKSl9fSx7a2V5OiJkaXNhYmxlUGx1Z2luIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAoIm5lc3RlZFJvd3MiKSx5NihVMyhhLnBy'@;
put 'b3RvdHlwZSksImRpc2FibGVQbHVnaW4iLHRoaXMpLmNhbGwodGhpcyl9fSx7a2V5OiJ1cGRhdGVQbHVnaW4iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCk7dmFyIGQ9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhKCk7dGhpcy5lbmFibGVQbHVnaW4oKSx0aGlzLmRhdGFN'@;
put 'YW5hZ2VyLnVwZGF0ZVdpdGhEYXRhKGQpLHk2KFUzKGEucHJvdG90eXBlKSwidXBkYXRlUGx1Z2luIix0aGlzKS5jYWxsKHRoaXMpfX0se2tleToib25CZWZvcmVSb3dNb3ZlIix2YWx1ZTpmdW5jdGlvbihkLGgsbSxfKXtyZXR1cm4gdGhpcy5yb3dNb3ZlQ29udHJvbGxlci5vbkJlZm9yZVJv'@;
put 'd01vdmUoZCxoLG0sXyl9fSx7a2V5OiJkaXNhYmxlQ29yZUFQSU1vZGlmaWVycyIsdmFsdWU6ZnVuY3Rpb24oKXtaMy5nZXQodGhpcykuc2tpcENvcmVBUElNb2RpZmllcnM9ITB9fSx7a2V5OiJlbmFibGVDb3JlQVBJTW9kaWZpZXJzIix2YWx1ZTpmdW5jdGlvbigpe1ozLmdldCh0aGlzKS5z'@;
put 'a2lwQ29yZUFQSU1vZGlmaWVycz0hMX19LHtrZXk6Im9uQmVmb3JlT25DZWxsTW91c2VEb3duIix2YWx1ZTpmdW5jdGlvbihkLGgsbSl7dGhpcy5jb2xsYXBzaW5nVUkudG9nZ2xlU3RhdGUoZCxoLG0pfX0se2tleToib25Nb2RpZnlSb3dEYXRhIix2YWx1ZTpmdW5jdGlvbihkKXtpZighWjMu'@;
put 'Z2V0KHRoaXMpLnNraXBDb3JlQVBJTW9kaWZpZXJzKXJldHVybiB0aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QoZCl9fSx7a2V5OiJvbk1vZGlmeVNvdXJjZUxlbmd0aCIsdmFsdWU6ZnVuY3Rpb24oKXtpZighWjMuZ2V0KHRoaXMpLnNraXBDb3JlQVBJTW9kaWZpZXJzKXJldHVybiB0'@;
put 'aGlzLmRhdGFNYW5hZ2VyLmNvdW50QWxsUm93cygpfX0se2tleToib25CZWZvcmVEYXRhU3BsaWNlIix2YWx1ZTpmdW5jdGlvbihkLGgsbSl7cmV0dXJuISghWjMuZ2V0KHRoaXMpLnNraXBDb3JlQVBJTW9kaWZpZXJzJiYhdGhpcy5kYXRhTWFuYWdlci5pc1Jvd0hpZ2hlc3RMZXZlbChkKSYm'@;
put 'KHRoaXMuZGF0YU1hbmFnZXIuc3BsaWNlRGF0YShkLGgsbSksMSkpfX0se2tleToib25GaWx0ZXJEYXRhIix2YWx1ZTpmdW5jdGlvbihkLGgsbSl7dmFyIF89WjMuZ2V0KHRoaXMpO3JldHVybiB0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc3Rhc2goKSx0aGlzLmNvbGxh'@;
put 'cHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2gudHJpbVN0YXNoKG1bMF0saCksdGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnNoaWZ0U3Rhc2gobVswXSxudWxsLC0xKmgpLHRoaXMuZGF0YU1hbmFnZXIuZmlsdGVyRGF0YShkLGgsbSksXy5za2lwUmVuZGVyPSEwLHRoaXMu'@;
put 'ZGF0YU1hbmFnZXIuZ2V0RGF0YSgpLnNsaWNlKCl9fSx7a2V5OiJvbkFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsdmFsdWU6ZnVuY3Rpb24oZCl7cmV0dXJuIHRoaXMuY29udGV4dE1lbnVVSS5hcHBlbmRPcHRpb25zKGQpfX0se2tleToib25BZnRlckdldFJvd0hlYWRlciIsdmFs'@;
put 'dWU6ZnVuY3Rpb24oZCxoKXt0aGlzLmhlYWRlcnNVSS5hcHBlbmRMZXZlbEluZGljYXRvcnMoZCxoKX19LHtrZXk6Im9uTW9kaWZ5Um93SGVhZGVyV2lkdGgiLHZhbHVlOmZ1bmN0aW9uKGQpe3JldHVybiB0aGlzLmhlYWRlcnNVSS5yb3dIZWFkZXJXaWR0aENhY2hlfHxkfX0se2tleToib25B'@;
put 'ZnRlclJlbW92ZVJvdyIsdmFsdWU6ZnVuY3Rpb24oZCxoLG0sXyl7dmFyIE89dGhpcztpZihfIT09dGhpcy5wbHVnaW5OYW1lKXt2YXIgWD1aMy5nZXQodGhpcyk7c2V0VGltZW91dChmdW5jdGlvbigpe1guc2tpcFJlbmRlcj1udWxsLE8uaGVhZGVyc1VJLnVwZGF0ZVJvd0hlYWRlcldpZHRo'@;
put 'KCksTy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLmFwcGx5U3Rhc2goKX0sMCl9fX0se2tleToib25CZWZvcmVSZW1vdmVSb3ciLHZhbHVlOmZ1bmN0aW9uKGQsaCxtKXt2YXIgXz10aGlzLE89QXJyYXkuZnJvbShtLnJlZHVjZShmdW5jdGlvbihYLGFlKXtpZihfLmRhdGFNYW5h'@;
put 'Z2VyLmlzUGFyZW50KGFlKSl7dmFyIHBlPV8uZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChhZSkuX19jaGlsZHJlbjtyZXR1cm4gWC5hZGQoYWUpLEFycmF5LmlzQXJyYXkocGUpJiZwZS5mb3JFYWNoKGZ1bmN0aW9uKGJlKXtyZXR1cm4gWC5hZGQoXy5kYXRhTWFuYWdlci5nZXRSb3dJbmRl'@;
put 'eChiZSkpfSksWH1yZXR1cm4gWC5hZGQoYWUpfSxuZXcgU2V0KSk7bS5sZW5ndGg9MCxtLnB1c2guYXBwbHkobSxPKX19LHtrZXk6Im9uQmVmb3JlQWRkQ2hpbGQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnN0YXNoKCl9fSx7a2V5OiJv'@;
put 'bkFmdGVyQWRkQ2hpbGQiLHZhbHVlOmZ1bmN0aW9uKGQsaCl7dGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnNoaWZ0U3Rhc2godGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChoKSksdGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLmFwcGx5U3Rhc2go'@;
put 'KSx0aGlzLmhlYWRlcnNVSS51cGRhdGVSb3dIZWFkZXJXaWR0aCgpfX0se2tleToib25CZWZvcmVEZXRhY2hDaGlsZCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc3Rhc2goKX19LHtrZXk6Im9uQWZ0ZXJEZXRhY2hDaGlsZCIsdmFsdWU6'@;
put 'ZnVuY3Rpb24oZCxoLG0pe3RoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zaGlmdFN0YXNoKG0sbnVsbCwtMSksdGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLmFwcGx5U3Rhc2goKSx0aGlzLmhlYWRlcnNVSS51cGRhdGVSb3dIZWFkZXJXaWR0aCgpfX0s'@;
put 'e2tleToib25BZnRlckNyZWF0ZVJvdyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmRhdGFNYW5hZ2VyLnJld3JpdGVDYWNoZSgpfX0se2tleToib25BZnRlckluaXQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9TWF0aC5tYXguYXBwbHkoTWF0aCxmdW5jdGlvbiBUQ3QobCl7cmV0dXJuIGZ1bmN0'@;
put 'aW9uIFJDdChsKXtpZihBcnJheS5pc0FycmF5KGwpKXJldHVybiBySihsKX0obCl8fGZ1bmN0aW9uIElDdChsKXtpZih0eXBlb2YgU3ltYm9sPCJ1IiYmbnVsbCE9bFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1sWyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20obCl9KGwpfHxmdW5j'@;
put 'dGlvbiBEQ3QobCxjKXtpZihsKXtpZigic3RyaW5nIj09dHlwZW9mIGwpcmV0dXJuIHJKKGwsYyk7dmFyIGE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGwpLnNsaWNlKDgsLTEpO2lmKCJPYmplY3QiPT09YSYmbC5jb25zdHJ1Y3RvciYmKGE9bC5jb25zdHJ1Y3Rvci5uYW1lKSwi'@;
put 'TWFwIj09PWF8fCJTZXQiPT09YSlyZXR1cm4gQXJyYXkuZnJvbShsKTtpZigiQXJndW1lbnRzIj09PWF8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KGEpKXJldHVybiBySihsLGMpfX0obCl8fGZ1bmN0aW9uIE9DdCgpe3Rocm93IG5ldyBUeXBlRXJy'@;
put 'b3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfSh0aGlzLmRhdGFNYW5hZ2VyLmNhY2hl'@;
put 'LmxldmVscykpO2Q+MCYmdGhpcy5oZWFkZXJzVUkudXBkYXRlUm93SGVhZGVyV2lkdGgoZCl9fSx7a2V5OiJvbkJlZm9yZVZpZXdSZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKGQsaCl7WjMuZ2V0KHRoaXMpLnNraXBSZW5kZXImJihoLnNraXBSZW5kZXI9ITApfX0se2tleToiZGVzdHJveSIsdmFs'@;
put 'dWU6ZnVuY3Rpb24oKXt5NihVMyhhLnByb3RvdHlwZSksImRlc3Ryb3kiLHRoaXMpLmNhbGwodGhpcyl9fSx7a2V5OiJvbkJlZm9yZUxvYWREYXRhIix2YWx1ZTpmdW5jdGlvbihkKXtpZighemZlKGQpKXJldHVybiBJWSgiVGhlIE5lc3RlZCBSb3dzIHBsdWdpbiByZXF1aXJlcyBhbiBBcnJh'@;
put 'eSBvZiBPYmplY3RzIGFzIGEgZGF0YXNldCB0byBiZSBwcm92aWRlZC4gVGhlIHBsdWdpbiBoYXMgYmVlbiBkaXNhYmxlZC4iKSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpW29KXT0hMSx2b2lkIHRoaXMuZGlzYWJsZVBsdWdpbigpO3RoaXMuZGF0YU1hbmFnZXIuc2V0RGF0YShkKSx0aGlzLmRh'@;
put 'dGFNYW5hZ2VyLnJld3JpdGVDYWNoZSgpfX1dLFt7a2V5OiJQTFVHSU5fS0VZIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gb0p9fSx7a2V5OiJQTFVHSU5fUFJJT1JJVFkiLGdldDpmdW5jdGlvbigpe3JldHVybiAzMDB9fV0pLGF9KEdhKTtmdW5jdGlvbiBIRShsKXtyZXR1cm4oSEU9ImZ1bmN0'@;
put 'aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJv'@;
put 'bC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiBTNWUobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9'@;
put 'ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCRDdChmLmtleSksZil9fWZ1bmN0aW9uICRDdChsKXt2YXIgYz1mdW5jdGlvbiBLQ3QobCxjKXtpZigib2JqZWN0IiE9PUhFKGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7'@;
put 'dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PUhFKGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0o'@;
put 'bCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1IRShjKT9jOlN0cmluZyhjKX12YXIgcUN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbChjKXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06d2luZG93OyhmdW5jdGlvbiBXQ3QobCxj'@;
put 'KXtpZighKGwgaW5zdGFuY2VvZiBjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsbCksdGhpcy5yb290V2luZG93PWEsdGhpcy5wcmVmaXg9Yyx0aGlzLnNhdmVkS2V5cz1bXSx0aGlzLmxvYWRTYXZlZEtleXMoKX1yZXR1'@;
put 'cm4gZnVuY3Rpb24gR0N0KGwsYyxhKXtjJiZTNWUobC5wcm90b3R5cGUsYyksYSYmUzVlKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGwsW3trZXk6InNhdmVWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24oYSxmKXt0aGlzLnJvb3RXaW5kb3cu'@;
put 'bG9jYWxTdG9yYWdlLnNldEl0ZW0oIiIuY29uY2F0KHRoaXMucHJlZml4LCJfIikuY29uY2F0KGEpLEpTT04uc3RyaW5naWZ5KGYpKSwtMT09PXRoaXMuc2F2ZWRLZXlzLmluZGV4T2YoYSkmJih0aGlzLnNhdmVkS2V5cy5wdXNoKGEpLHRoaXMuc2F2ZVNhdmVkS2V5cygpKX19LHtrZXk6Imxv'@;
put 'YWRWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24oYSxmKXt2YXIgZD10eXBlb2YgYT4idSI/ZjphLGg9dGhpcy5yb290V2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCIiLmNvbmNhdCh0aGlzLnByZWZpeCwiXyIpLmNvbmNhdChkKSk7cmV0dXJuIG51bGw9PT1oP3ZvaWQgMDpKU09OLnBhcnNlKGgp'@;
put 'fX0se2tleToicmVzZXQiLHZhbHVlOmZ1bmN0aW9uKGEpe3RoaXMucm9vdFdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgiIi5jb25jYXQodGhpcy5wcmVmaXgsIl8iKS5jb25jYXQoYSkpfX0se2tleToicmVzZXRBbGwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcztSbih0aGlz'@;
put 'LnNhdmVkS2V5cyxmdW5jdGlvbihmLGQpe2Eucm9vdFdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgiIi5jb25jYXQoYS5wcmVmaXgsIl8iKS5jb25jYXQoYS5zYXZlZEtleXNbZF0pKX0pLHRoaXMuY2xlYXJTYXZlZEtleXMoKX19LHtrZXk6ImxvYWRTYXZlZEtleXMiLHZhbHVlOmZ1'@;
put 'bmN0aW9uKCl7dmFyIGE9dGhpcy5yb290V2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCIiLmNvbmNhdCh0aGlzLnByZWZpeCwiX19wZXJzaXN0ZW50U3RhdGVLZXlzIikpLGY9InN0cmluZyI9PXR5cGVvZiBhP0pTT04ucGFyc2UoYSk6dm9pZCAwO3RoaXMuc2F2ZWRLZXlzPWZ8fFtdfX0s'@;
put 'e2tleToic2F2ZVNhdmVkS2V5cyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnJvb3RXaW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oIiIuY29uY2F0KHRoaXMucHJlZml4LCJfX3BlcnNpc3RlbnRTdGF0ZUtleXMiKSxKU09OLnN0cmluZ2lmeSh0aGlzLnNhdmVkS2V5cykpfX0se2tleToiY2xl'@;
put 'YXJTYXZlZEtleXMiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5zYXZlZEtleXMubGVuZ3RoPTAsdGhpcy5zYXZlU2F2ZWRLZXlzKCl9fV0pLGx9KCk7Y29uc3QgWEN0PXFDdDtmdW5jdGlvbiBfYihsKXtyZXR1cm4oX2I9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVv'@;
put 'ZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1m'@;
put 'dW5jdGlvbiBNNWUobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLGVTdChmLmtl'@;
put 'eSksZil9fWZ1bmN0aW9uIGVTdChsKXt2YXIgYz1mdW5jdGlvbiB0U3QobCxjKXtpZigib2JqZWN0IiE9PV9iKGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2Jq'@;
put 'ZWN0IiE9PV9iKGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9TdHJpbmc6TnVtYmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1fYihjKT9j'@;
put 'OlN0cmluZyhjKX1mdW5jdGlvbiBiNigpe3JldHVybiBiNj10eXBlb2YgUmVmbGVjdDwidSImJlJlZmxlY3QuZ2V0P1JlZmxlY3QuZ2V0LmJpbmQoKTpmdW5jdGlvbihjLGEsZil7dmFyIGQ9ZnVuY3Rpb24gblN0KGwsYyl7Zm9yKDshT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5j'@;
put 'YWxsKGwsYykmJm51bGwhPT0obD1ZMyhsKSk7KTtyZXR1cm4gbH0oYyxhKTtpZihkKXt2YXIgaD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGQsYSk7cmV0dXJuIGguZ2V0P2guZ2V0LmNhbGwoYXJndW1lbnRzLmxlbmd0aDwzP2M6Zik6aC52YWx1ZX19LGI2LmFwcGx5KHRoaXMs'@;
put 'YXJndW1lbnRzKX1mdW5jdGlvbiBhSihsLGMpe3JldHVybihhSj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihmLGQpe3JldHVybiBmLl9fcHJvdG9fXz1kLGZ9KShsLGMpfWZ1bmN0aW9uIFkzKGwpe3JldHVybihZMz1PYmplY3Qu'@;
put 'c2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihhKXtyZXR1cm4gYS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihhKX0pKGwpfXVvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJwZXJzaXN0ZW50U3RhdGVTYXZlIiksdW8uZ2V0U2lu'@;
put 'Z2xldG9uKCkucmVnaXN0ZXIoInBlcnNpc3RlbnRTdGF0ZUxvYWQiKSx1by5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigicGVyc2lzdGVudFN0YXRlUmVzZXQiKTt2YXIgazVlPSJwZXJzaXN0ZW50U3RhdGUiLHVTdD1mdW5jdGlvbihsKXshZnVuY3Rpb24gclN0KGwsYyl7aWYoImZ1bmN0aW9u'@;
put 'IiE9dHlwZW9mIGMmJm51bGwhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7bC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShjJiZjLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmwsd3JpdGFi'@;
put 'bGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGMmJmFKKGwsYyl9KGEsbCk7dmFyIGM9ZnVuY3Rpb24gaVN0KGwpe3ZhciBjPWZ1bmN0aW9uIGxTdCgpe2lmKHR5cGVvZiBSZWZsZWN0PiJ1Inx8IVJlZmxl'@;
put 'Y3QuY29uc3RydWN0fHxSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLGZ1bmN0aW9uKCl7'@;
put 'fSkpLCEwfWNhdGNoe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZCxmPVkzKGwpO2lmKGMpe3ZhciBoPVkzKHRoaXMpLmNvbnN0cnVjdG9yO2Q9UmVmbGVjdC5jb25zdHJ1Y3QoZixhcmd1bWVudHMsaCl9ZWxzZSBkPWYuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBm'@;
put 'dW5jdGlvbiBvU3QobCxjKXtpZihjJiYoIm9iamVjdCI9PT1fYihjKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGMpKXJldHVybiBjO2lmKHZvaWQgMCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQi'@;
put 'KTtyZXR1cm4gZnVuY3Rpb24gYVN0KGwpe2lmKHZvaWQgMD09PWwpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gbH0obCl9KHRoaXMsZCl9fShhKTtmdW5jdGlvbiBhKGYp'@;
put 'e3ZhciBkO3JldHVybiBmdW5jdGlvbiBKQ3QobCxjKXtpZighKGwgaW5zdGFuY2VvZiBjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxhKSwoZD1jLmNhbGwodGhpcyxmKSkuc3RvcmFnZT12b2lkIDAsZH1yZXR1cm4gZnVu'@;
put 'Y3Rpb24gUUN0KGwsYyxhKXtjJiZNNWUobC5wcm90b3R5cGUsYyksYSYmTTVlKGwsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KGEsW3trZXk6ImlzRW5hYmxlZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRp'@;
put 'bmdzKClbazVlXX19LHtrZXk6ImVuYWJsZVBsdWdpbiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzO3RoaXMuZW5hYmxlZHx8KHRoaXMuc3RvcmFnZXx8KHRoaXMuc3RvcmFnZT1uZXcgWEN0KHRoaXMuaG90LnJvb3RFbGVtZW50LmlkLHRoaXMuaG90LnJvb3RXaW5kb3cpKSx0aGlzLmFk'@;
put 'ZEhvb2soInBlcnNpc3RlbnRTdGF0ZVNhdmUiLGZ1bmN0aW9uKGgsbSl7cmV0dXJuIGQuc2F2ZVZhbHVlKGgsbSl9KSx0aGlzLmFkZEhvb2soInBlcnNpc3RlbnRTdGF0ZUxvYWQiLGZ1bmN0aW9uKGgsbSl7cmV0dXJuIGQubG9hZFZhbHVlKGgsbSl9KSx0aGlzLmFkZEhvb2soInBlcnNpc3Rl'@;
put 'bnRTdGF0ZVJlc2V0IixmdW5jdGlvbigpe3JldHVybiBkLnJlc2V0VmFsdWUoKX0pLGI2KFkzKGEucHJvdG90eXBlKSwiZW5hYmxlUGx1Z2luIix0aGlzKS5jYWxsKHRoaXMpKX19LHtrZXk6ImRpc2FibGVQbHVnaW4iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5zdG9yYWdlPXZvaWQgMCxiNihZ'@;
put 'MyhhLnByb3RvdHlwZSksImRpc2FibGVQbHVnaW4iLHRoaXMpLmNhbGwodGhpcyl9fSx7a2V5OiJ1cGRhdGVQbHVnaW4iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxiNihZMyhhLnByb3RvdHlwZSksInVwZGF0ZVBsdWdpbiIsdGhp'@;
put 'cykuY2FsbCh0aGlzKX19LHtrZXk6ImxvYWRWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24oZCxoKXtoLnZhbHVlPXRoaXMuc3RvcmFnZS5sb2FkVmFsdWUoZCl9fSx7a2V5OiJzYXZlVmFsdWUiLHZhbHVlOmZ1bmN0aW9uKGQsaCl7dGhpcy5zdG9yYWdlLnNhdmVWYWx1ZShkLGgpfX0se2tleToicmVz'@;
put 'ZXRWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24oZCl7dHlwZW9mIGQ+InUiP3RoaXMuc3RvcmFnZS5yZXNldEFsbCgpOnRoaXMuc3RvcmFnZS5yZXNldChkKX19LHtrZXk6ImRlc3Ryb3kiLHZhbHVlOmZ1bmN0aW9uKCl7YjYoWTMoYS5wcm90b3R5cGUpLCJkZXN0cm95Iix0aGlzKS5jYWxsKHRoaXMp'@;
put 'fX1dLFt7a2V5OiJQTFVHSU5fS0VZIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gazVlfX0se2tleToiUExVR0lOX1BSSU9SSVRZIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMH19XSksYX0oR2EpO2Z1bmN0aW9uIHdiKGwpe3JldHVybih3Yj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3lt'@;
put 'Ym9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9mIGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBl'@;
put 'b2YgY30pKGwpfWZ1bmN0aW9uIGxKKGwsYyl7KG51bGw9PWN8fGM+bC5sZW5ndGgpJiYoYz1sLmxlbmd0aCk7Zm9yKHZhciBhPTAsZj1uZXcgQXJyYXkoYyk7YTxjO2ErKylmW2FdPWxbYV07cmV0dXJuIGZ9ZnVuY3Rpb24gRTVlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3Zh'@;
put 'ciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCx2U3QoZi5rZXkpLGYpfX1mdW5jdGlvbiB2U3QobCl7dmFyIGM9ZnVuY3Rpb24geVN0KGwsYyl7'@;
put 'aWYoIm9iamVjdCIhPT13YihsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT13YihmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRv'@;
put 'UHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09d2IoYyk/YzpTdHJpbmcoYyl9ZnVuY3Rpb24gXzYoKXtyZXR1cm4gXzY9dHlwZW9mIFJlZmxl'@;
put 'Y3Q8InUiJiZSZWZsZWN0LmdldD9SZWZsZWN0LmdldC5iaW5kKCk6ZnVuY3Rpb24oYyxhLGYpe3ZhciBkPWZ1bmN0aW9uIGJTdChsLGMpe2Zvcig7IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsLGMpJiZudWxsIT09KGw9VzMobCkpOyk7cmV0dXJuIGx9KGMsYSk7aWYo'@;
put 'ZCl7dmFyIGg9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihkLGEpO3JldHVybiBoLmdldD9oLmdldC5jYWxsKGFyZ3VtZW50cy5sZW5ndGg8Mz9jOmYpOmgudmFsdWV9fSxfNi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gc0oobCxjKXtyZXR1cm4oc0o9T2JqZWN0LnNl'@;
put 'dFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZixkKXtyZXR1cm4gZi5fX3Byb3RvX189ZCxmfSkobCxjKX1mdW5jdGlvbiBXMyhsKXtyZXR1cm4oVzM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVu'@;
put 'Y3Rpb24oYSl7cmV0dXJuIGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSl9KShsKX12YXIgdUo9InNlYXJjaCIseFN0PWZ1bmN0aW9uKGMsYSxmLGQsaCl7Yy5nZXRDZWxsTWV0YShhLGYpLmlzU2VhcmNoUmVzdWx0PWh9LEFTdD1mdW5jdGlvbihjLGEsZil7cmV0dXJuIShM'@;
put 'bChjKXx8bnVsbD09PWN8fCFjLnRvTG9jYWxlTG93ZXJDYXNlfHwwPT09Yy5sZW5ndGh8fExsKGEpfHxudWxsPT09YSkmJi0xIT09YS50b1N0cmluZygpLnRvTG9jYWxlTG93ZXJDYXNlKGYubG9jYWxlKS5pbmRleE9mKGMudG9Mb2NhbGVMb3dlckNhc2UoZi5sb2NhbGUpKX0sVFN0PWZ1bmN0'@;
put 'aW9uKGwpeyFmdW5jdGlvbiBfU3QobCxjKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyYmbnVsbCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtsLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGMmJmMu'@;
put 'cHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6bCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksYyYmc0oobCxjKX0oYSxsKTt2YXIgYz1mdW5jdGlvbiB3U3QobCl7dmFyIGM9ZnVuY3Rp'@;
put 'b24gTVN0KCl7aWYodHlwZW9mIFJlZmxlY3Q+InUifHwhUmVmbGVjdC5jb25zdHJ1Y3R8fFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJl'@;
put 'ZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sZnVuY3Rpb24oKXt9KSksITB9Y2F0Y2h7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciBkLGY9VzMobCk7aWYoYyl7dmFyIGg9VzModGhpcykuY29uc3RydWN0b3I7ZD1SZWZsZWN0LmNvbnN0cnVjdChmLGFyZ3VtZW50cyxoKX1l'@;
put 'bHNlIGQ9Zi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uIENTdChsLGMpe2lmKGMmJigib2JqZWN0Ij09PXdiKGMpfHwiZnVuY3Rpb24iPT10eXBlb2YgYykpcmV0dXJuIGM7aWYodm9pZCAwIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9y'@;
put 'cyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbiBTU3QobCl7aWYodm9pZCAwPT09bCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3Jl'@;
put 'dHVybiBsfShsKX0odGhpcyxkKX19KGEpO2Z1bmN0aW9uIGEoZil7dmFyIGQ7cmV0dXJuIGZ1bmN0aW9uIG1TdChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGEpLChkPWMuY2Fs'@;
put 'bCh0aGlzLGYpKS5jYWxsYmFjaz14U3QsZC5xdWVyeU1ldGhvZD1BU3QsZC5zZWFyY2hSZXN1bHRDbGFzcz0iaHRTZWFyY2hSZXN1bHQiLGR9cmV0dXJuIGZ1bmN0aW9uIGdTdChsLGMsYSl7YyYmRTVlKGwucHJvdG90eXBlLGMpLGEmJkU1ZShsLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShs'@;
put 'LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShhLFt7a2V5OiJpc0VuYWJsZWQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaG90LmdldFNldHRpbmdzKClbdUpdfX0se2tleToiZW5hYmxlUGx1Z2luIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXM7aWYoIXRoaXMuZW5hYmxl'@;
put 'ZCl7dmFyIGg9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt1Sl07dGhpcy51cGRhdGVQbHVnaW5TZXR0aW5ncyhoKSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbmRlcmVyIixmdW5jdGlvbigpe3JldHVybiBkLm9uQmVmb3JlUmVuZGVyZXIuYXBwbHkoZCxhcmd1bWVudHMpfSksXzYoVzMoYS5wcm90'@;
put 'b3R5cGUpLCJlbmFibGVQbHVnaW4iLHRoaXMpLmNhbGwodGhpcyl9fX0se2tleToiZGlzYWJsZVBsdWdpbiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLGg9ZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkJlZm9yZVJlbmRlcmVyLmFwcGx5KGQsYXJndW1lbnRzKX07dGhpcy5ob3QuYWRkSG9v'@;
put 'aygiYmVmb3JlUmVuZGVyZXIiLGgpLHRoaXMuaG90LmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGZ1bmN0aW9uKCl7ZC5ob3QucmVtb3ZlSG9vaygiYmVmb3JlUmVuZGVyZXIiLGgpfSksXzYoVzMoYS5wcm90b3R5cGUpLCJkaXNhYmxlUGx1Z2luIix0aGlzKS5jYWxsKHRoaXMpfX0s'@;
put 'e2tleToidXBkYXRlUGx1Z2luIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksXzYoVzMoYS5wcm90b3R5cGUpLCJ1cGRhdGVQbHVnaW4iLHRoaXMpLmNhbGwodGhpcyl9fSx7a2V5OiJxdWVyeSIsdmFsdWU6ZnVuY3Rpb24oZCl7dmFy'@;
put 'IGg9dGhpcyxtPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp0aGlzLmdldENhbGxiYWNrKCksXz1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06dGhpcy5nZXRRdWVyeU1ldGhvZCgpLE89'@;
put 'dGhpcy5ob3QuY291bnRSb3dzKCksWD10aGlzLmhvdC5jb3VudENvbHMoKSxhZT1bXSxwZT10aGlzLmhvdDtyZXR1cm4gX28oMCxPLTEsZnVuY3Rpb24oYmUpe19vKDAsWC0xLGZ1bmN0aW9uKHhlKXt2YXIgVmU9aC5ob3QuZ2V0RGF0YUF0Q2VsbChiZSx4ZSksWmU9aC5ob3QuZ2V0Q2VsbE1l'@;
put 'dGEoYmUseGUpLGx0PVplLnNlYXJjaC5jYWxsYmFja3x8bSxndD0oWmUuc2VhcmNoLnF1ZXJ5TWV0aG9kfHxfKShkLFZlLFplKTtndCYmYWUucHVzaCh7cm93OmJlLGNvbDp4ZSxkYXRhOlZlfSksbHQmJmx0KHBlLGJlLHhlLFZlLGd0KX0pfSksYWV9fSx7a2V5OiJnZXRDYWxsYmFjayIsdmFs'@;
put 'dWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYWxsYmFja319LHtrZXk6InNldENhbGxiYWNrIix2YWx1ZTpmdW5jdGlvbihkKXt0aGlzLmNhbGxiYWNrPWR9fSx7a2V5OiJnZXRRdWVyeU1ldGhvZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeU1ldGhvZH19LHtrZXk6InNl'@;
put 'dFF1ZXJ5TWV0aG9kIix2YWx1ZTpmdW5jdGlvbihkKXt0aGlzLnF1ZXJ5TWV0aG9kPWR9fSx7a2V5OiJnZXRTZWFyY2hSZXN1bHRDbGFzcyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWFyY2hSZXN1bHRDbGFzc319LHtrZXk6InNldFNlYXJjaFJlc3VsdENsYXNzIix2YWx1ZTpm'@;
put 'dW5jdGlvbihkKXt0aGlzLnNlYXJjaFJlc3VsdENsYXNzPWR9fSx7a2V5OiJ1cGRhdGVQbHVnaW5TZXR0aW5ncyIsdmFsdWU6ZnVuY3Rpb24oZCl7cGEoZCkmJihkLnNlYXJjaFJlc3VsdENsYXNzJiZ0aGlzLnNldFNlYXJjaFJlc3VsdENsYXNzKGQuc2VhcmNoUmVzdWx0Q2xhc3MpLGQucXVl'@;
put 'cnlNZXRob2QmJnRoaXMuc2V0UXVlcnlNZXRob2QoZC5xdWVyeU1ldGhvZCksZC5jYWxsYmFjayYmdGhpcy5zZXRDYWxsYmFjayhkLmNhbGxiYWNrKSl9fSx7a2V5OiJvbkJlZm9yZVJlbmRlcmVyIix2YWx1ZTpmdW5jdGlvbihkLGgsbSxfLE8sWCl7dmFyIGJlLGFlPVguY2xhc3NOYW1lfHxb'@;
put 'XSxwZT1bXTsic3RyaW5nIj09dHlwZW9mIGFlP3BlPWFlLnNwbGl0KCIgIik6KGJlPXBlKS5wdXNoLmFwcGx5KGJlLGZ1bmN0aW9uIGNTdChsKXtyZXR1cm4gZnVuY3Rpb24gcFN0KGwpe2lmKEFycmF5LmlzQXJyYXkobCkpcmV0dXJuIGxKKGwpfShsKXx8ZnVuY3Rpb24gaFN0KGwpe2lmKHR5'@;
put 'cGVvZiBTeW1ib2w8InUiJiZudWxsIT1sW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWxbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbShsKX0obCl8fGZ1bmN0aW9uIGRTdChsLGMpe2lmKGwpe2lmKCJzdHJpbmciPT10eXBlb2YgbClyZXR1cm4gbEoobCxjKTt2YXIgYT1PYmplY3Qu'@;
put 'cHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobCkuc2xpY2UoOCwtMSk7aWYoIk9iamVjdCI9PT1hJiZsLmNvbnN0cnVjdG9yJiYoYT1sLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09YXx8IlNldCI9PT1hKXJldHVybiBBcnJheS5mcm9tKGwpO2lmKCJBcmd1bWVudHMiPT09YXx8L14oPzpVaXxJ'@;
put 'KW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QoYSkpcmV0dXJuIGxKKGwsYyl9fShsKXx8ZnVuY3Rpb24gZlN0KCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBp'@;
put 'dGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9KGFlKSksdGhpcy5pc0VuYWJsZWQoKSYmWC5pc1NlYXJjaFJlc3VsdD9wZS5pbmNsdWRlcyh0aGlzLnNlYXJjaFJlc3VsdENsYXNzKXx8cGUucHVzaCgiIi5jb25j'@;
put 'YXQodGhpcy5zZWFyY2hSZXN1bHRDbGFzcykpOnBlLmluY2x1ZGVzKHRoaXMuc2VhcmNoUmVzdWx0Q2xhc3MpJiZwZS5zcGxpY2UocGUuaW5kZXhPZih0aGlzLnNlYXJjaFJlc3VsdENsYXNzKSwxKSxYLmNsYXNzTmFtZT1wZS5qb2luKCIgIil9fSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5j'@;
put 'dGlvbigpe182KFczKGEucHJvdG90eXBlKSwiZGVzdHJveSIsdGhpcykuY2FsbCh0aGlzKX19XSxbe2tleToiUExVR0lOX0tFWSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHVKfX0se2tleToiUExVR0lOX1BSSU9SSVRZIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMTkwfX1dKSxhfShHYSk7ZnVu'@;
put 'Y3Rpb24gQ2IobCl7cmV0dXJuKENiPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmMuY29u'@;
put 'c3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSkobCl9ZnVuY3Rpb24geDVlKGwsYyl7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBmPWNbYV07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9'@;
put 'ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxJU3QoZi5rZXkpLGYpfX1mdW5jdGlvbiBJU3QobCl7dmFyIGM9ZnVuY3Rpb24gUlN0KGwsYyl7aWYoIm9iamVjdCIhPT1DYihsKXx8bnVsbD09PWwpcmV0dXJuIGw7dmFyIGE9bFtTeW1ib2wu'@;
put 'dG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBmPWEuY2FsbChsLGN8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1DYihmKSlyZXR1cm4gZjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3Ry'@;
put 'aW5nIj09PWM/U3RyaW5nOk51bWJlcikobCl9KGwsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09Q2IoYyk/YzpTdHJpbmcoYyl9ZnVuY3Rpb24gU2IoKXtyZXR1cm4gU2I9dHlwZW9mIFJlZmxlY3Q8InUiJiZSZWZsZWN0LmdldD9SZWZsZWN0LmdldC5iaW5kKCk6ZnVuY3Rpb24oYyxhLGYp'@;
put 'e3ZhciBkPWZ1bmN0aW9uIExTdChsLGMpe2Zvcig7IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsLGMpJiZudWxsIT09KGw9b20obCkpOyk7cmV0dXJuIGx9KGMsYSk7aWYoZCl7dmFyIGg9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihkLGEpO3JldHVybiBo'@;
put 'LmdldD9oLmdldC5jYWxsKGFyZ3VtZW50cy5sZW5ndGg8Mz9jOmYpOmgudmFsdWV9fSxTYi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gY0oobCxjKXtyZXR1cm4oY0o9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZixk'@;
put 'KXtyZXR1cm4gZi5fX3Byb3RvX189ZCxmfSkobCxjKX1mdW5jdGlvbiBvbShsKXtyZXR1cm4ob209T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSl9'@;
put 'KShsKX12YXIgelN0PWZ1bmN0aW9uKGwpeyFmdW5jdGlvbiBQU3QobCxjKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyYmbnVsbCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtsLnByb3RvdHlwZT1P'@;
put 'YmplY3QuY3JlYXRlKGMmJmMucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6bCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksYyYmY0oobCxjKX0oYSxsKTt2YXIgYz1mdW5jdGlvbiBG'@;
put 'U3QobCl7dmFyIGM9ZnVuY3Rpb24gVlN0KCl7aWYodHlwZW9mIFJlZmxlY3Q+InUifHwhUmVmbGVjdC5jb25zdHJ1Y3R8fFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5'@;
put 'cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sZnVuY3Rpb24oKXt9KSksITB9Y2F0Y2h7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciBkLGY9b20obCk7aWYoYyl7dmFyIGg9b20odGhpcykuY29uc3RydWN0b3I7ZD1SZWZsZWN0LmNvbnN0cnVj'@;
put 'dChmLGFyZ3VtZW50cyxoKX1lbHNlIGQ9Zi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uIEhTdChsLGMpe2lmKGMmJigib2JqZWN0Ij09PUNiKGMpfHwiZnVuY3Rpb24iPT10eXBlb2YgYykpcmV0dXJuIGM7aWYodm9pZCAwIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJE'@;
put 'ZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbiBOU3QobCl7aWYodm9pZCAwPT09bCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24n'@;
put 'dCBiZWVuIGNhbGxlZCIpO3JldHVybiBsfShsKX0odGhpcyxkKX19KGEpO2Z1bmN0aW9uIGEoZil7dmFyIGQ7cmV0dXJuIGZ1bmN0aW9uIE9TdChsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIp'@;
put 'fSh0aGlzLGEpLChkPWMuY2FsbCh0aGlzLGYpKS5zY3JvbGxiYXJzPVtdLGQuY2xvbmVzPVtdLGQubG9ja2VkQ29sbGVjdGlvbj0hMSxkLmZyZWV6ZU92ZXJsYXlzPSExLGR9cmV0dXJuIGZ1bmN0aW9uIERTdChsLGMsYSl7YyYmeDVlKGwucHJvdG90eXBlLGMpLGEmJng1ZShsLGEpLE9iamVj'@;
put 'dC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShhLFt7a2V5OiJpc0VuYWJsZWQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG5ZKCl9fSx7a2V5OiJlbmFibGVQbHVnaW4iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpczt0aGlzLmVuYWJsZWR8fCh0aGlz'@;
put 'LmFkZEhvb2soImFmdGVyVmlld1JlbmRlciIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkFmdGVyVmlld1JlbmRlcigpfSksdGhpcy5yZWdpc3RlckV2ZW50cygpLFNiKG9tKGEucHJvdG90eXBlKSwiZW5hYmxlUGx1Z2luIix0aGlzKS5jYWxsKHRoaXMpKX19LHtrZXk6InVwZGF0ZVBsdWdpbiIs'@;
put 'dmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmxvY2tlZENvbGxlY3Rpb249ITEsU2Iob20oYS5wcm90b3R5cGUpLCJ1cGRhdGVQbHVnaW4iLHRoaXMpLmNhbGwodGhpcyl9fSx7a2V5OiJkaXNhYmxlUGx1Z2luIix2YWx1ZTpmdW5jdGlvbigpe1NiKG9tKGEucHJvdG90eXBlKSwiZGlzYWJsZVBsdWdp'@;
put 'biIsdGhpcykuY2FsbCh0aGlzKX19LHtrZXk6InJlZ2lzdGVyRXZlbnRzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXM7dGhpcy5hZGRIb29rKCJiZWZvcmVUb3VjaFNjcm9sbCIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkJlZm9yZVRvdWNoU2Nyb2xsKCl9KSx0aGlzLmFkZEhvb2soImFm'@;
put 'dGVyTW9tZW50dW1TY3JvbGwiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25BZnRlck1vbWVudHVtU2Nyb2xsKCl9KX19LHtrZXk6Im9uQWZ0ZXJWaWV3UmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe2lmKCF0aGlzLmxvY2tlZENvbGxlY3Rpb24pe3ZhciBkPXRoaXMuaG90LnZpZXcuX3d0Lnd0T3Zl'@;
put 'cmxheXMsaD1kLnRvcE92ZXJsYXksbT1kLmJvdHRvbU92ZXJsYXksXz1kLmlubGluZVN0YXJ0T3ZlcmxheSxPPWQudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LFg9ZC5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXk7dGhpcy5sb2NrZWRDb2xsZWN0aW9uPSEwLHRoaXMuc2Nyb2xs'@;
put 'YmFycy5sZW5ndGg9MCx0aGlzLnNjcm9sbGJhcnMucHVzaChoKSxtLmNsb25lJiZ0aGlzLnNjcm9sbGJhcnMucHVzaChtKSx0aGlzLnNjcm9sbGJhcnMucHVzaChfKSxPJiZ0aGlzLnNjcm9sbGJhcnMucHVzaChPKSxYJiZYLmNsb25lJiZ0aGlzLnNjcm9sbGJhcnMucHVzaChYKSx0aGlzLmNs'@;
put 'b25lcz1bXSxoLm5lZWRGdWxsUmVuZGVyJiZ0aGlzLmNsb25lcy5wdXNoKGguY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSksbS5uZWVkRnVsbFJlbmRlciYmdGhpcy5jbG9uZXMucHVzaChtLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpLF8ubmVlZEZ1bGxSZW5kZXIm'@;
put 'JnRoaXMuY2xvbmVzLnB1c2goXy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKSxPJiZ0aGlzLmNsb25lcy5wdXNoKE8uY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSksWCYmWC5jbG9uZSYmdGhpcy5jbG9uZXMucHVzaChYLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVu'@;
put 'dE5vZGUpfX19LHtrZXk6Im9uQmVmb3JlVG91Y2hTY3JvbGwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5mcmVlemVPdmVybGF5cz0hMCxSbih0aGlzLmNsb25lcyxmdW5jdGlvbihkKXtnaShkLCJoaWRlLXR3ZWVuIil9KX19LHtrZXk6Im9uQWZ0ZXJNb21lbnR1bVNjcm9sbCIsdmFsdWU6ZnVu'@;
put 'Y3Rpb24oKXt2YXIgZD10aGlzO3RoaXMuZnJlZXplT3ZlcmxheXM9ITEsUm4odGhpcy5jbG9uZXMsZnVuY3Rpb24oaCl7Sm8oaCwiaGlkZS10d2VlbiIpLGdpKGgsInNob3ctdHdlZW4iKX0pLHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoZnVuY3Rpb24oKXtSbihkLmNsb25lcyxmdW5jdGlv'@;
put 'bihoKXtKbyhoLCJzaG93LXR3ZWVuIil9KX0sNDAwKSxSbih0aGlzLnNjcm9sbGJhcnMsZnVuY3Rpb24oaCl7aC5yZWZyZXNoKCksaC5yZXNldEZpeGVkUG9zaXRpb24oKX0pLHRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMuc3luY1Njcm9sbFdpdGhNYXN0ZXIoKX19XSxbe2tleToiUExV'@;
put 'R0lOX0tFWSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuInRvdWNoU2Nyb2xsIn19LHtrZXk6IlBMVUdJTl9QUklPUklUWSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDIwMH19LHtrZXk6IlNFVFRJTkdfS0VZUyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuITB9fV0pLGF9KEdhKTtmdW5jdGlvbiBNYihs'@;
put 'KXtyZXR1cm4oTWI9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYyl7cmV0dXJuIHR5cGVvZiBjfTpmdW5jdGlvbihjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYy5jb25zdHJ1Y3Rvcj09'@;
put 'PVN5bWJvbCYmYyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGN9KShsKX1mdW5jdGlvbiBBNWUobCxjKXtmb3IodmFyIGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIGY9Y1thXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUi'@;
put 'aW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLFlTdChmLmtleSksZil9fWZ1bmN0aW9uIFlTdChsKXt2YXIgYz1mdW5jdGlvbiBXU3QobCxjKXtpZigib2JqZWN0IiE9PU1iKGwpfHxudWxsPT09bClyZXR1cm4gbDt2YXIgYT1sW1N5bWJvbC50b1ByaW1pdGl2'@;
put 'ZV07aWYodm9pZCAwIT09YSl7dmFyIGY9YS5jYWxsKGwsY3x8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PU1iKGYpKXJldHVybiBmO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Yz9T'@;
put 'dHJpbmc6TnVtYmVyKShsKX0obCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1NYihjKT9jOlN0cmluZyhjKX1mdW5jdGlvbiB3Nigpe3JldHVybiB3Nj10eXBlb2YgUmVmbGVjdDwidSImJlJlZmxlY3QuZ2V0P1JlZmxlY3QuZ2V0LmJpbmQoKTpmdW5jdGlvbihjLGEsZil7dmFyIGQ9ZnVu'@;
put 'Y3Rpb24gR1N0KGwsYyl7Zm9yKDshT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGwsYykmJm51bGwhPT0obD1HMyhsKSk7KTtyZXR1cm4gbH0oYyxhKTtpZihkKXt2YXIgaD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGQsYSk7cmV0dXJuIGguZ2V0P2guZ2V0'@;
put 'LmNhbGwoYXJndW1lbnRzLmxlbmd0aDwzP2M6Zik6aC52YWx1ZX19LHc2LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBmSihsLGMpe3JldHVybihmSj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihmLGQpe3JldHVybiBm'@;
put 'Ll9fcHJvdG9fXz1kLGZ9KShsLGMpfWZ1bmN0aW9uIEczKGwpe3JldHVybihHMz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihhKXtyZXR1cm4gYS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihhKX0pKGwpfXZhciBI'@;
put 'UD0idHJpbVJvd3MiLGVNdD1mdW5jdGlvbihsKXshZnVuY3Rpb24gJFN0KGwsYyl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGMmJm51bGwhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7bC5wcm90b3R5'@;
put 'cGU9T2JqZWN0LmNyZWF0ZShjJiZjLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmwsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGMmJmZKKGwsYyl9KGEsbCk7dmFyIGM9ZnVuY3Rp'@;
put 'b24gS1N0KGwpe3ZhciBjPWZ1bmN0aW9uIEpTdCgpe2lmKHR5cGVvZiBSZWZsZWN0PiJ1Inx8IVJlZmxlY3QuY29uc3RydWN0fHxSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJv'@;
put 'dG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLGZ1bmN0aW9uKCl7fSkpLCEwfWNhdGNoe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZCxmPUczKGwpO2lmKGMpe3ZhciBoPUczKHRoaXMpLmNvbnN0cnVjdG9yO2Q9UmVmbGVjdC5jb25z'@;
put 'dHJ1Y3QoZixhcmd1bWVudHMsaCl9ZWxzZSBkPWYuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbiBxU3QobCxjKXtpZihjJiYoIm9iamVjdCI9PT1NYihjKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGMpKXJldHVybiBjO2lmKHZvaWQgMCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJv'@;
put 'cigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24gWFN0KGwpe2lmKHZvaWQgMD09PWwpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBo'@;
put 'YXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gbH0obCl9KHRoaXMsZCl9fShhKTtmdW5jdGlvbiBhKGYpe3ZhciBkO3JldHVybiBmdW5jdGlvbiBVU3QobCxjKXtpZighKGwgaW5zdGFuY2VvZiBjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rp'@;
put 'b24iKX0odGhpcyxhKSwoZD1jLmNhbGwodGhpcyxmKSkudHJpbW1lZFJvd3NNYXA9bnVsbCxkfXJldHVybiBmdW5jdGlvbiBaU3QobCxjLGEpe2MmJkE1ZShsLnByb3RvdHlwZSxjKSxhJiZBNWUobCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9'@;
put 'KX0oYSxbe2tleToiaXNFbmFibGVkIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtIUF19fSx7a2V5OiJlbmFibGVQbHVnaW4iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpczt0aGlzLmVuYWJsZWR8fCh0aGlzLnRyaW1tZWRSb3dzTWFwPXRoaXMu'@;
put 'aG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKCJ0cmltUm93cyIsbmV3IEhNKSx0aGlzLnRyaW1tZWRSb3dzTWFwLmFkZExvY2FsSG9vaygiaW5pdCIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbk1hcEluaXQoKX0pLHc2KEczKGEucHJvdG90eXBlKSwiZW5hYmxlUGx1Z2luIix0aGlzKS5j'@;
put 'YWxsKHRoaXMpKX19LHtrZXk6InVwZGF0ZVBsdWdpbiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLGg9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtIUF07QXJyYXkuaXNBcnJheShoKSYmdGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oZnVuY3Rpb24oKXtkLnRyaW1tZWRSb3dzTWFwLmNsZWFy'@;
put 'KCksUm4oaCxmdW5jdGlvbihtKXtkLnRyaW1tZWRSb3dzTWFwLnNldFZhbHVlQXRJbmRleChtLCEwKX0pfSwhMCksdzYoRzMoYS5wcm90b3R5cGUpLCJ1cGRhdGVQbHVnaW4iLHRoaXMpLmNhbGwodGhpcyl9fSx7a2V5OiJkaXNhYmxlUGx1Z2luIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuaG90'@;
put 'LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAoInRyaW1Sb3dzIiksdzYoRzMoYS5wcm90b3R5cGUpLCJkaXNhYmxlUGx1Z2luIix0aGlzKS5jYWxsKHRoaXMpfX0se2tleToiZ2V0VHJpbW1lZFJvd3MiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJpbW1lZFJvd3NNYXAuZ2V0'@;
put 'VHJpbW1lZEluZGV4ZXMoKX19LHtrZXk6InRyaW1Sb3dzIix2YWx1ZTpmdW5jdGlvbihkKXt2YXIgaD10aGlzLG09dGhpcy5nZXRUcmltbWVkUm93cygpLF89dGhpcy5pc1ZhbGlkQ29uZmlnKGQpLE89bTtfJiYoTz1BcnJheS5mcm9tKG5ldyBTZXQobS5jb25jYXQoZCkpKSksITEhPT10aGlz'@;
put 'LmhvdC5ydW5Ib29rcygiYmVmb3JlVHJpbVJvdyIsbSxPLF8pJiYoXyYmdGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oZnVuY3Rpb24oKXtSbihkLGZ1bmN0aW9uKGFlKXtoLnRyaW1tZWRSb3dzTWFwLnNldFZhbHVlQXRJbmRleChhZSwhMCl9KX0sITApLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRl'@;
put 'clRyaW1Sb3ciLG0sTyxfLF8mJk8ubGVuZ3RoPm0ubGVuZ3RoKSl9fSx7a2V5OiJ0cmltUm93Iix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLG09MDttPGQ7bSsrKWhbbV09YXJndW1lbnRzW21dO3RoaXMudHJpbVJvd3MoaCl9fSx7'@;
put 'a2V5OiJ1bnRyaW1Sb3dzIix2YWx1ZTpmdW5jdGlvbihkKXt2YXIgaD10aGlzLmdldFRyaW1tZWRSb3dzKCksbT10aGlzLmlzVmFsaWRDb25maWcoZCksXz1oLE89dGhpcy50cmltbWVkUm93c01hcC5nZXRWYWx1ZXMoKS5zbGljZSgpLFg9ZC5sZW5ndGg+MDttJiZYJiYoUm4oZCxmdW5jdGlv'@;
put 'bihwZSl7T1twZV09ITF9KSxfPVBzKE8sZnVuY3Rpb24ocGUsYmUseGUpe3JldHVybiBiZSYmcGUucHVzaCh4ZSkscGV9LFtdKSksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVW50cmltUm93IixoLF8sbSYmWCkmJihtJiZYJiZ0aGlzLnRyaW1tZWRSb3dzTWFwLnNldFZhbHVlcyhP'@;
put 'KSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJVbnRyaW1Sb3ciLGgsXyxtJiZYLG0mJl8ubGVuZ3RoPGgubGVuZ3RoKSl9fSx7a2V5OiJ1bnRyaW1Sb3ciLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksbT0wO208ZDttKyspaFttXT1h'@;
put 'cmd1bWVudHNbbV07dGhpcy51bnRyaW1Sb3dzKGgpfX0se2tleToiaXNUcmltbWVkIix2YWx1ZTpmdW5jdGlvbihkKXtyZXR1cm4gdGhpcy50cmltbWVkUm93c01hcC5nZXRWYWx1ZUF0SW5kZXgoZCl8fCExfX0se2tleToidW50cmltQWxsIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMudW50cmlt'@;
put 'Um93cyh0aGlzLmdldFRyaW1tZWRSb3dzKCkpfX0se2tleToiaXNWYWxpZENvbmZpZyIsdmFsdWU6ZnVuY3Rpb24oZCl7dmFyIGg9dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCk7cmV0dXJuIGQuZXZlcnkoZnVuY3Rpb24obSl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIobSkmJm0+PTAmJm08'@;
put 'aH0pfX0se2tleToib25NYXBJbml0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXMsaD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW0hQXTtBcnJheS5pc0FycmF5KGgpJiZ0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbihmdW5jdGlvbigpe1JuKGgsZnVuY3Rpb24obSl7ZC50cmltbWVkUm93c01h'@;
put 'cC5zZXRWYWx1ZUF0SW5kZXgobSwhMCl9KX0sITApfX0se2tleToiZGVzdHJveSIsdmFsdWU6ZnVuY3Rpb24oKXt3NihHMyhhLnByb3RvdHlwZSksImRlc3Ryb3kiLHRoaXMpLmNhbGwodGhpcyl9fV0sW3trZXk6IlBMVUdJTl9LRVkiLGdldDpmdW5jdGlvbigpe3JldHVybiBIUH19LHtrZXk6'@;
put 'IlBMVUdJTl9QUklPUklUWSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDMzMH19XSksYX0oR2EpO2Z1bmN0aW9uIGtiKGwpe3JldHVybihrYj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihjKXtyZXR1cm4gdHlwZW9m'@;
put 'IGN9OmZ1bmN0aW9uKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZjIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY30pKGwpfWZ1bmN0aW9uIFQ1ZShsLGMpe2lmKCEobCBpbnN0YW5jZW9mIGMpKXRocm93'@;
put 'IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIE81ZShsLGMpe2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZj1jW2FdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJp'@;
put 'biBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsdE10KGYua2V5KSxmKX19ZnVuY3Rpb24gRDVlKGwsYyxhKXtyZXR1cm4gYyYmTzVlKGwucHJvdG90eXBlLGMpLGEmJk81ZShsLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJwcm90b3R5cGUiLHt3cml0YWJs'@;
put 'ZTohMX0pLGx9ZnVuY3Rpb24gdE10KGwpe3ZhciBjPWZ1bmN0aW9uIG5NdChsLGMpe2lmKCJvYmplY3QiIT09a2IobCl8fG51bGw9PT1sKXJldHVybiBsO3ZhciBhPWxbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZj1hLmNhbGwobCxjfHwiZGVmYXVsdCIpO2lmKCJv'@;
put 'YmplY3QiIT09a2IoZikpcmV0dXJuIGY7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1jP1N0cmluZzpOdW1iZXIpKGwpfShsLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PWtiKGMp'@;
put 'P2M6U3RyaW5nKGMpfWZ1bmN0aW9uIEk1ZShsLGMpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjJiZudWxsIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2wucHJvdG90eXBlPU9iamVjdC5jcmVhdGUo'@;
put 'YyYmYy5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpsLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxjJiZkSihsLGMpfWZ1bmN0aW9uIGRKKGwsYyl7cmV0dXJuKGRKPU9iamVjdC5z'@;
put 'ZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGYsZCl7cmV0dXJuIGYuX19wcm90b19fPWQsZn0pKGwsYyl9ZnVuY3Rpb24gUjVlKGwpe3ZhciBjPWZ1bmN0aW9uIG9NdCgpe2lmKHR5cGVvZiBSZWZsZWN0PiJ1Inx8IVJlZmxlY3QuY29uc3RydWN0'@;
put 'fHxSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLGZ1bmN0aW9uKCl7fSkpLCEwfWNhdGNo'@;
put 'e3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZCxmPU5QKGwpO2lmKGMpe3ZhciBoPU5QKHRoaXMpLmNvbnN0cnVjdG9yO2Q9UmVmbGVjdC5jb25zdHJ1Y3QoZixhcmd1bWVudHMsaCl9ZWxzZSBkPWYuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbiByTXQo'@;
put 'bCxjKXtpZihjJiYoIm9iamVjdCI9PT1rYihjKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGMpKXJldHVybiBjO2lmKHZvaWQgMCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVu'@;
put 'Y3Rpb24gaU10KGwpe2lmKHZvaWQgMD09PWwpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gbH0obCl9KHRoaXMsZCl9fWZ1bmN0aW9uIE5QKGwpe3JldHVybihOUD1PYmpl'@;
put 'Y3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihhKXtyZXR1cm4gYS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihhKX0pKGwpfWZ1bmN0aW9uIEw1ZShsLGMpe3JldHVybiBmdW5jdGlvbiBkTXQobCl7aWYoQXJyYXkuaXNBcnJh'@;
put 'eShsKSlyZXR1cm4gbH0obCl8fGZ1bmN0aW9uIGZNdChsLGMpe3ZhciBhPW51bGw9PWw/bnVsbDp0eXBlb2YgU3ltYm9sPCJ1IiYmbFtTeW1ib2wuaXRlcmF0b3JdfHxsWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9YSl7dmFyIGYsZCxoLG0sXz1bXSxPPSEwLFg9ITE7dHJ5e2lmKGg9KGE9YS5j'@;
put 'YWxsKGwpKS5uZXh0LDA9PT1jKXtpZihPYmplY3QoYSkhPT1hKXJldHVybjtPPSExfWVsc2UgZm9yKDshKE89KGY9aC5jYWxsKGEpKS5kb25lKSYmKF8ucHVzaChmLnZhbHVlKSxfLmxlbmd0aCE9PWMpO089ITApO31jYXRjaChhZSl7WD0hMCxkPWFlfWZpbmFsbHl7dHJ5e2lmKCFPJiZudWxs'@;
put 'IT1hLnJldHVybiYmKG09YS5yZXR1cm4oKSxPYmplY3QobSkhPT1tKSlyZXR1cm59ZmluYWxseXtpZihYKXRocm93IGR9fXJldHVybiBffX0obCxjKXx8UDVlKGwsYyl8fGZ1bmN0aW9uIGNNdCgpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBu'@;
put 'b24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gUDVlKGwsYyl7aWYobCl7aWYoInN0cmluZyI9PXR5cGVvZiBsKXJldHVybiBo'@;
put 'SihsLGMpO3ZhciBhPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsKS5zbGljZSg4LC0xKTtpZigiT2JqZWN0Ij09PWEmJmwuY29uc3RydWN0b3ImJihhPWwuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1hfHwiU2V0Ij09PWEpcmV0dXJuIEFycmF5LmZyb20obCk7aWYoIkFyZ3Vt'@;
put 'ZW50cyI9PT1hfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChhKSlyZXR1cm4gaEoobCxjKX19ZnVuY3Rpb24gaEoobCxjKXsobnVsbD09Y3x8Yz5sLmxlbmd0aCkmJihjPWwubGVuZ3RoKTtmb3IodmFyIGE9MCxmPW5ldyBBcnJheShjKTthPGM7YSsr'@;
put 'KWZbYV09bFthXTtyZXR1cm4gZn1mdW5jdGlvbiBvbyhsKXt2YXIgYz10aGlzO3RoaXMuaW5zdGFuY2U9bCx0aGlzLmRvbmVBY3Rpb25zPVtdLHRoaXMudW5kb25lQWN0aW9ucz1bXSx0aGlzLmlnbm9yZU5ld0FjdGlvbnM9ITEsdGhpcy5lbmFibGVkPSExLGwuYWRkSG9vaygiYWZ0ZXJDaGFu'@;
put 'Z2UiLGZ1bmN0aW9uKGEsZil7dmFyIGQ9dGhpcyxoPWEmJmEubGVuZ3RoO2gmJmEuZmluZChmdW5jdGlvbihPKXt2YXIgWD1MNWUoTyw0KTtyZXR1cm4gWFsyXSE9PVhbM119KSYmYy5kb25lKGZ1bmN0aW9uKCl7dmFyIFg9YS5yZWR1Y2UoZnVuY3Rpb24ocGUsYmUpe3JldHVybiBwZS5wdXNo'@;
put 'KGZ1bmN0aW9uIGFNdChsKXtyZXR1cm4gZnVuY3Rpb24gdU10KGwpe2lmKEFycmF5LmlzQXJyYXkobCkpcmV0dXJuIGhKKGwpfShsKXx8ZnVuY3Rpb24gc010KGwpe2lmKHR5cGVvZiBTeW1ib2w8InUiJiZudWxsIT1sW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWxbIkBAaXRlcmF0b3IiXSly'@;
put 'ZXR1cm4gQXJyYXkuZnJvbShsKX0obCl8fFA1ZShsKXx8ZnVuY3Rpb24gbE10KCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVz'@;
put 'dCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9KGJlKSkscGV9LFtdKTtSbihYLGZ1bmN0aW9uKHBlKXtwZVsxXT1sLnByb3BUb0NvbChwZVsxXSl9KTt2YXIgYWU9aD4xP2QuZ2V0U2VsZWN0ZWQoKTpbW1hbMF1bMF0sWFswXVsxXV1dO3JldHVybiBuZXcgb28uQ2hh'@;
put 'bmdlQWN0aW9uKFgsYWUpfSxmKX0pLGwuYWRkSG9vaygiYWZ0ZXJDcmVhdGVSb3ciLGZ1bmN0aW9uKGEsZixkKXtjLmRvbmUoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG9vLkNyZWF0ZVJvd0FjdGlvbihhLGYpfSxkKX0pLGwuYWRkSG9vaygiYmVmb3JlUmVtb3ZlUm93IixmdW5jdGlvbihhLGYs'@;
put 'ZCxoKXtjLmRvbmUoZnVuY3Rpb24oKXt2YXIgTz1sLnRvUGh5c2ljYWxSb3coYSksWD14YyhjLmluc3RhbmNlLmdldFNvdXJjZURhdGEoTywwLE8rZi0xLGMuaW5zdGFuY2UuY291bnRTb3VyY2VDb2xzKCktMSkpO3JldHVybiBuZXcgb28uUmVtb3ZlUm93QWN0aW9uKE8sWCxsLmdldFNldHRp'@;
put 'bmdzKCkuZml4ZWRSb3dzQm90dG9tLGwuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NUb3AsbC5yb3dJbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKSl9LGgpfSksbC5hZGRIb29rKCJhZnRlckNyZWF0ZUNvbCIsZnVuY3Rpb24oYSxmLGQpe2MuZG9uZShmdW5jdGlvbigpe3JldHVybiBu'@;
put 'ZXcgb28uQ3JlYXRlQ29sdW1uQWN0aW9uKGEsZil9LGQpfSksbC5hZGRIb29rKCJiZWZvcmVSZW1vdmVDb2wiLGZ1bmN0aW9uKGEsZixkLGgpe2MuZG9uZShmdW5jdGlvbigpe3ZhciBPPWMuaW5zdGFuY2UuZ2V0U291cmNlRGF0YUFycmF5KCksWD0oYy5pbnN0YW5jZS5jb3VudENvbHMoKSth'@;
put 'KSVjLmluc3RhbmNlLmNvdW50Q29scygpLGFlPVtdLHBlPVtdLGJlPVtdO19vKE8ubGVuZ3RoLTEsZnVuY3Rpb24oWmUpe3ZhciBsdD1bXSxkdD1PW1plXTtfbyhYLFgrKGYtMSksZnVuY3Rpb24oZ3Qpe2x0LnB1c2goZHRbbC50b1BoeXNpY2FsQ29sdW1uKGd0KV0pfSksYWUucHVzaChsdCl9'@;
put 'KSxfbyhmLTEsZnVuY3Rpb24oWmUpe2JlLnB1c2gobC50b1BoeXNpY2FsQ29sdW1uKFgrWmUpKX0pLEFycmF5LmlzQXJyYXkobC5nZXRTZXR0aW5ncygpLmNvbEhlYWRlcnMpJiZfbyhmLTEsZnVuY3Rpb24oWmUpe3BlLnB1c2gobC5nZXRTZXR0aW5ncygpLmNvbEhlYWRlcnNbbC50b1BoeXNp'@;
put 'Y2FsQ29sdW1uKFgrWmUpXXx8bnVsbCl9KTt2YXIgeGU9bC5jb2x1bW5JbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKSxWZT1sLnJvd0luZGV4TWFwcGVyLmdldEluZGV4ZXNTZXF1ZW5jZSgpO3JldHVybiBuZXcgb28uUmVtb3ZlQ29sdW1uQWN0aW9uKFgsYmUsYWUscGUseGUsVmUs'@;
put 'bC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0KX0saCl9KSxsLmFkZEhvb2soImJlZm9yZUNlbGxBbGlnbm1lbnQiLGZ1bmN0aW9uKGEsZixkLGgpe2MuZG9uZShmdW5jdGlvbigpe3JldHVybiBuZXcgb28uQ2VsbEFsaWdubWVudEFjdGlvbihhLGYsZCxoKX0pfSksbC5hZGRIb29r'@;
put 'KCJiZWZvcmVGaWx0ZXIiLGZ1bmN0aW9uKGEpe2MuZG9uZShmdW5jdGlvbigpe3JldHVybiBuZXcgb28uRmlsdGVyc0FjdGlvbihhKX0pfSksbC5hZGRIb29rKCJiZWZvcmVSb3dNb3ZlIixmdW5jdGlvbihhLGYpeyExIT09YSYmYy5kb25lKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBvby5Sb3dN'@;
put 'b3ZlQWN0aW9uKGEsZil9KX0pLGwuYWRkSG9vaygiYmVmb3JlTWVyZ2VDZWxscyIsZnVuY3Rpb24oYSxmKXtmfHxjLmRvbmUoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG9vLk1lcmdlQ2VsbHNBY3Rpb24obCxhKX0pfSksbC5hZGRIb29rKCJhZnRlclVubWVyZ2VDZWxscyIsZnVuY3Rpb24oYSxm'@;
put 'KXtmfHxjLmRvbmUoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG9vLlVubWVyZ2VDZWxsc0FjdGlvbihsLGEpfSl9KSxsLmFkZEhvb2soImFmdGVySW5pdCIsZnVuY3Rpb24oKXtjLmluaXQoKX0pfW9vLnByb3RvdHlwZS5kb25lPWZ1bmN0aW9uKGwsYyl7aWYoIXRoaXMuaWdub3JlTmV3QWN0aW9u'@;
put 'cyYmIlVuZG9SZWRvLnVuZG8iIT09YyYmIlVuZG9SZWRvLnJlZG8iIT09YyYmImF1dG8iIT09Yyl7dmFyIGY9dGhpcy5kb25lQWN0aW9ucy5zbGljZSgpO2lmKCExIT09dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlVW5kb1N0YWNrQ2hhbmdlIixmLGMpKXt2YXIgaD1sKCksbT10aGlz'@;
put 'LnVuZG9uZUFjdGlvbnMuc2xpY2UoKTt0aGlzLmRvbmVBY3Rpb25zLnB1c2goaCksdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJVbmRvU3RhY2tDaGFuZ2UiLGYsdGhpcy5kb25lQWN0aW9ucy5zbGljZSgpKSx0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVSZWRvU3RhY2tDaGFu'@;
put 'Z2UiLG0pLHRoaXMudW5kb25lQWN0aW9ucy5sZW5ndGg9MCx0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlclJlZG9TdGFja0NoYW5nZSIsbSx0aGlzLnVuZG9uZUFjdGlvbnMuc2xpY2UoKSl9fX0sb28ucHJvdG90eXBlLnVuZG89ZnVuY3Rpb24oKXtpZih0aGlzLmlzVW5kb0F2YWlsYWJs'@;
put 'ZSgpKXt2YXIgbD10aGlzLmRvbmVBY3Rpb25zLnNsaWNlKCk7dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlVW5kb1N0YWNrQ2hhbmdlIixsKTt2YXIgYz10aGlzLmRvbmVBY3Rpb25zLnBvcCgpO3RoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyVW5kb1N0YWNrQ2hhbmdlIixsLHRo'@;
put 'aXMuZG9uZUFjdGlvbnMuc2xpY2UoKSk7dmFyIGE9eGMoYyk7aWYoITE9PT10aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVVbmRvIixhKSlyZXR1cm47dGhpcy5pZ25vcmVOZXdBY3Rpb25zPSEwO3ZhciBkPXRoaXMsaD10aGlzLnVuZG9uZUFjdGlvbnMuc2xpY2UoKTt0aGlzLmluc3Rh'@;
put 'bmNlLnJ1bkhvb2tzKCJiZWZvcmVSZWRvU3RhY2tDaGFuZ2UiLGgpLGMudW5kbyh0aGlzLmluc3RhbmNlLGZ1bmN0aW9uKCl7ZC5pZ25vcmVOZXdBY3Rpb25zPSExLGQudW5kb25lQWN0aW9ucy5wdXNoKGMpfSksdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJSZWRvU3RhY2tDaGFuZ2Ui'@;
put 'LGgsdGhpcy51bmRvbmVBY3Rpb25zLnNsaWNlKCkpLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyVW5kbyIsYSl9fSxvby5wcm90b3R5cGUucmVkbz1mdW5jdGlvbigpe2lmKHRoaXMuaXNSZWRvQXZhaWxhYmxlKCkpe3ZhciBsPXRoaXMudW5kb25lQWN0aW9ucy5zbGljZSgpO3RoaXMu'@;
put 'aW5zdGFuY2UucnVuSG9va3MoImJlZm9yZVJlZG9TdGFja0NoYW5nZSIsbCk7dmFyIGM9dGhpcy51bmRvbmVBY3Rpb25zLnBvcCgpO3RoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyUmVkb1N0YWNrQ2hhbmdlIixsLHRoaXMudW5kb25lQWN0aW9ucy5zbGljZSgpKTt2YXIgYT14YyhjKTtp'@;
put 'ZighMT09PXRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZVJlZG8iLGEpKXJldHVybjt0aGlzLmlnbm9yZU5ld0FjdGlvbnM9ITA7dmFyIGQ9dGhpcyxoPXRoaXMuZG9uZUFjdGlvbnMuc2xpY2UoKTt0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVVbmRvU3RhY2tDaGFuZ2UiLGgp'@;
put 'LGMucmVkbyh0aGlzLmluc3RhbmNlLGZ1bmN0aW9uKCl7ZC5pZ25vcmVOZXdBY3Rpb25zPSExLGQuZG9uZUFjdGlvbnMucHVzaChjKX0pLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyVW5kb1N0YWNrQ2hhbmdlIixoLHRoaXMuZG9uZUFjdGlvbnMuc2xpY2UoKSksdGhpcy5pbnN0YW5j'@;
put 'ZS5ydW5Ib29rcygiYWZ0ZXJSZWRvIixhKX19LG9vLnByb3RvdHlwZS5pc1VuZG9BdmFpbGFibGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb25lQWN0aW9ucy5sZW5ndGg+MH0sb28ucHJvdG90eXBlLmlzUmVkb0F2YWlsYWJsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnVuZG9uZUFjdGlv'@;
put 'bnMubGVuZ3RoPjB9LG9vLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuZG9uZUFjdGlvbnMubGVuZ3RoPTAsdGhpcy51bmRvbmVBY3Rpb25zLmxlbmd0aD0wfSxvby5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5hYmxlZH0sb28ucHJvdG90eXBl'@;
put 'LmVuYWJsZT1mdW5jdGlvbigpe2lmKCF0aGlzLmlzRW5hYmxlZCgpKXt2YXIgbD10aGlzLmluc3RhbmNlO3RoaXMuZW5hYmxlZD0hMCxmdW5jdGlvbiBnTXQobCl7bC51bmRvPWZ1bmN0aW9uKCl7cmV0dXJuIGwudW5kb1JlZG8udW5kbygpfSxsLnJlZG89ZnVuY3Rpb24oKXtyZXR1cm4gbC51'@;
put 'bmRvUmVkby5yZWRvKCl9LGwuaXNVbmRvQXZhaWxhYmxlPWZ1bmN0aW9uKCl7cmV0dXJuIGwudW5kb1JlZG8uaXNVbmRvQXZhaWxhYmxlKCl9LGwuaXNSZWRvQXZhaWxhYmxlPWZ1bmN0aW9uKCl7cmV0dXJuIGwudW5kb1JlZG8uaXNSZWRvQXZhaWxhYmxlKCl9LGwuY2xlYXJVbmRvPWZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIGwudW5kb1JlZG8uY2xlYXIoKX19KGwpLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKSxsLmFkZEhvb2soImFmdGVyQ2hhbmdlIixINWUpfX0sb28ucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXtpZih0aGlzLmlzRW5hYmxlZCgpKXt2YXIgbD10aGlzLmluc3RhbmNl'@;
put 'O3RoaXMuZW5hYmxlZD0hMSxmdW5jdGlvbiB2TXQobCl7ZGVsZXRlIGwudW5kbyxkZWxldGUgbC5yZWRvLGRlbGV0ZSBsLmlzVW5kb0F2YWlsYWJsZSxkZWxldGUgbC5pc1JlZG9BdmFpbGFibGUsZGVsZXRlIGwuY2xlYXJVbmRvfShsKSx0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSxsLnJl'@;
put 'bW92ZUhvb2soImFmdGVyQ2hhbmdlIixINWUpfX0sb28ucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCksdGhpcy5pbnN0YW5jZT1udWxsLHRoaXMuZG9uZUFjdGlvbnM9bnVsbCx0aGlzLnVuZG9uZUFjdGlvbnM9bnVsbH0sKG9vLkFjdGlvbj1mdW5jdGlvbigpe30p'@;
put 'LnByb3RvdHlwZS51bmRvPWZ1bmN0aW9uKCl7fSxvby5BY3Rpb24ucHJvdG90eXBlLnJlZG89ZnVuY3Rpb24oKXt9LG9vLkNoYW5nZUFjdGlvbj1mdW5jdGlvbihsLGMpe3RoaXMuY2hhbmdlcz1sLHRoaXMuc2VsZWN0ZWQ9Yyx0aGlzLmFjdGlvblR5cGU9ImNoYW5nZSJ9LGYzKG9vLkNoYW5n'@;
put 'ZUFjdGlvbixvby5BY3Rpb24pLG9vLkNoYW5nZUFjdGlvbi5wcm90b3R5cGUudW5kbz1mdW5jdGlvbihsLGMpe2Zvcih2YXIgYT14Yyh0aGlzLmNoYW5nZXMpLGY9bC5jb3VudEVtcHR5Um93cyghMCksZD1sLmNvdW50RW1wdHlDb2xzKCEwKSxoPTAsbT1hLmxlbmd0aDtoPG07aCsrKWFbaF0u'@;
put 'c3BsaWNlKDMsMSk7bC5hZGRIb29rT25jZSgiYWZ0ZXJDaGFuZ2UiLGMpLGwuc2V0RGF0YUF0Q2VsbChhLG51bGwsbnVsbCwiVW5kb1JlZG8udW5kbyIpO2Zvcih2YXIgXz0wLE89YS5sZW5ndGg7XzxPO18rKyl7dmFyIFg9TDVlKGFbX10sMiksYWU9WFswXSxwZT1YWzFdO2wuZ2V0U2V0dGlu'@;
put 'Z3MoKS5taW5TcGFyZVJvd3MmJmFlKzErbC5nZXRTZXR0aW5ncygpLm1pblNwYXJlUm93cz09PWwuY291bnRSb3dzKCkmJmY9PT1sLmdldFNldHRpbmdzKCkubWluU3BhcmVSb3dzJiYobC5hbHRlcigicmVtb3ZlX3JvdyIscGFyc2VJbnQoYWUrMSwxMCksbC5nZXRTZXR0aW5ncygpLm1pblNw'@;
put 'YXJlUm93cyksbC51bmRvUmVkby5kb25lQWN0aW9ucy5wb3AoKSksbC5nZXRTZXR0aW5ncygpLm1pblNwYXJlQ29scyYmcGUrMStsLmdldFNldHRpbmdzKCkubWluU3BhcmVDb2xzPT09bC5jb3VudENvbHMoKSYmZD09PWwuZ2V0U2V0dGluZ3MoKS5taW5TcGFyZUNvbHMmJihsLmFsdGVyKCJy'@;
put 'ZW1vdmVfY29sIixwYXJzZUludChwZSsxLDEwKSxsLmdldFNldHRpbmdzKCkubWluU3BhcmVDb2xzKSxsLnVuZG9SZWRvLmRvbmVBY3Rpb25zLnBvcCgpKX1sLnNlbGVjdENlbGxzKHRoaXMuc2VsZWN0ZWQsITEsITEpfSxvby5DaGFuZ2VBY3Rpb24ucHJvdG90eXBlLnJlZG89ZnVuY3Rpb24o'@;
put 'bCxjKXtmb3IodmFyIGE9eGModGhpcy5jaGFuZ2VzKSxmPTAsZD1hLmxlbmd0aDtmPGQ7ZisrKWFbZl0uc3BsaWNlKDIsMSk7bC5hZGRIb29rT25jZSgiYWZ0ZXJDaGFuZ2UiLGMpLGwuc2V0RGF0YUF0Q2VsbChhLG51bGwsbnVsbCwiVW5kb1JlZG8ucmVkbyIpLHRoaXMuc2VsZWN0ZWQmJmwu'@;
put 'c2VsZWN0Q2VsbHModGhpcy5zZWxlY3RlZCwhMSwhMSl9LG9vLkNyZWF0ZVJvd0FjdGlvbj1mdW5jdGlvbihsLGMpe3RoaXMuaW5kZXg9bCx0aGlzLmFtb3VudD1jLHRoaXMuYWN0aW9uVHlwZT0iaW5zZXJ0X3JvdyJ9LGYzKG9vLkNyZWF0ZVJvd0FjdGlvbixvby5BY3Rpb24pLG9vLkNyZWF0'@;
put 'ZVJvd0FjdGlvbi5wcm90b3R5cGUudW5kbz1mdW5jdGlvbihsLGMpe3ZhciBhPWwuY291bnRSb3dzKCksZj1sLmdldFNldHRpbmdzKCkubWluU3BhcmVSb3dzO3RoaXMuaW5kZXg+PWEmJnRoaXMuaW5kZXgtZjxhJiYodGhpcy5pbmRleC09ZiksbC5hZGRIb29rT25jZSgiYWZ0ZXJSZW1vdmVS'@;
put 'b3ciLGMpLGwuYWx0ZXIoInJlbW92ZV9yb3ciLHRoaXMuaW5kZXgsdGhpcy5hbW91bnQsIlVuZG9SZWRvLnVuZG8iKX0sb28uQ3JlYXRlUm93QWN0aW9uLnByb3RvdHlwZS5yZWRvPWZ1bmN0aW9uKGwsYyl7bC5hZGRIb29rT25jZSgiYWZ0ZXJDcmVhdGVSb3ciLGMpLGwuYWx0ZXIoImluc2Vy'@;
put 'dF9yb3dfYWJvdmUiLHRoaXMuaW5kZXgsdGhpcy5hbW91bnQsIlVuZG9SZWRvLnJlZG8iKX0sb28uUmVtb3ZlUm93QWN0aW9uPWZ1bmN0aW9uKGwsYyxhLGYsZCl7dGhpcy5pbmRleD1sLHRoaXMuZGF0YT1jLHRoaXMuYWN0aW9uVHlwZT0icmVtb3ZlX3JvdyIsdGhpcy5maXhlZFJvd3NCb3R0'@;
put 'b209YSx0aGlzLmZpeGVkUm93c1RvcD1mLHRoaXMucm93SW5kZXhlc1NlcXVlbmNlPWR9LGYzKG9vLlJlbW92ZVJvd0FjdGlvbixvby5BY3Rpb24pLG9vLlJlbW92ZVJvd0FjdGlvbi5wcm90b3R5cGUudW5kbz1mdW5jdGlvbihsLGMpe3ZhciBhPXRoaXMsZj1sLmdldFNldHRpbmdzKCksZD1b'@;
put 'XTtmLmZpeGVkUm93c0JvdHRvbT10aGlzLmZpeGVkUm93c0JvdHRvbSxmLmZpeGVkUm93c1RvcD10aGlzLmZpeGVkUm93c1RvcCx0aGlzLmRhdGEuZm9yRWFjaChmdW5jdGlvbihoLG0pe09iamVjdC5rZXlzKGgpLmZvckVhY2goZnVuY3Rpb24oXyl7dmFyIE89cGFyc2VJbnQoXywxMCk7ZC5w'@;
put 'dXNoKFthLmluZGV4K20saXNOYU4oTyk/XzpPLGhbX11dKX0pfSksbC5hbHRlcigiaW5zZXJ0X3Jvd19hYm92ZSIsdGhpcy5pbmRleCx0aGlzLmRhdGEubGVuZ3RoLCJVbmRvUmVkby51bmRvIiksbC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixjKSxsLnNldFNvdXJjZURhdGFBdENl'@;
put 'bGwoZCxudWxsLG51bGwsIlVuZG9SZWRvLnVuZG8iKSxsLnJvd0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZSh0aGlzLnJvd0luZGV4ZXNTZXF1ZW5jZSl9LG9vLlJlbW92ZVJvd0FjdGlvbi5wcm90b3R5cGUucmVkbz1mdW5jdGlvbihsLGMpe2wuYWRkSG9va09uY2UoImFmdGVyUmVt'@;
put 'b3ZlUm93IixjKSxsLmFsdGVyKCJyZW1vdmVfcm93Iix0aGlzLmluZGV4LHRoaXMuZGF0YS5sZW5ndGgsIlVuZG9SZWRvLnJlZG8iKX0sb28uQ3JlYXRlQ29sdW1uQWN0aW9uPWZ1bmN0aW9uKGwsYyl7dGhpcy5pbmRleD1sLHRoaXMuYW1vdW50PWMsdGhpcy5hY3Rpb25UeXBlPSJpbnNlcnRf'@;
put 'Y29sIn0sZjMob28uQ3JlYXRlQ29sdW1uQWN0aW9uLG9vLkFjdGlvbiksb28uQ3JlYXRlQ29sdW1uQWN0aW9uLnByb3RvdHlwZS51bmRvPWZ1bmN0aW9uKGwsYyl7bC5hZGRIb29rT25jZSgiYWZ0ZXJSZW1vdmVDb2wiLGMpLGwuYWx0ZXIoInJlbW92ZV9jb2wiLHRoaXMuaW5kZXgsdGhpcy5h'@;
put 'bW91bnQsIlVuZG9SZWRvLnVuZG8iKX0sb28uQ3JlYXRlQ29sdW1uQWN0aW9uLnByb3RvdHlwZS5yZWRvPWZ1bmN0aW9uKGwsYyl7bC5hZGRIb29rT25jZSgiYWZ0ZXJDcmVhdGVDb2wiLGMpLGwuYWx0ZXIoImluc2VydF9jb2xfc3RhcnQiLHRoaXMuaW5kZXgsdGhpcy5hbW91bnQsIlVuZG9S'@;
put 'ZWRvLnJlZG8iKX0sb28uUmVtb3ZlQ29sdW1uQWN0aW9uPWZ1bmN0aW9uKGwsYyxhLGYsZCxoLG0pe3RoaXMuaW5kZXg9bCx0aGlzLmluZGV4ZXM9Yyx0aGlzLmRhdGE9YSx0aGlzLmFtb3VudD10aGlzLmRhdGFbMF0ubGVuZ3RoLHRoaXMuaGVhZGVycz1mLHRoaXMuY29sdW1uUG9zaXRpb25z'@;
put 'PWQuc2xpY2UoMCksdGhpcy5yb3dQb3NpdGlvbnM9aC5zbGljZSgwKSx0aGlzLmFjdGlvblR5cGU9InJlbW92ZV9jb2wiLHRoaXMuZml4ZWRDb2x1bW5zU3RhcnQ9bX0sZjMob28uUmVtb3ZlQ29sdW1uQWN0aW9uLG9vLkFjdGlvbiksb28uUmVtb3ZlQ29sdW1uQWN0aW9uLnByb3RvdHlwZS51'@;
put 'bmRvPWZ1bmN0aW9uKGwsYyl7dmFyIGE9dGhpcztsLmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQ9dGhpcy5maXhlZENvbHVtbnNTdGFydDtmb3IodmFyIGQ9dGhpcy5pbmRleGVzLnNsaWNlKDApLnNvcnQoKSxoPWZ1bmN0aW9uKGJlLHhlLFZlKXtyZXR1cm4gVmVbYS5pbmRleGVz'@;
put 'LmluZGV4T2YoZFt4ZV0pXX0sbT10aGlzLmRhdGEubGVuZ3RoLF89W10sTz0wO088bTtPKyspXy5wdXNoKGhhKHRoaXMuZGF0YVtPXSxoKSk7dmFyIFg9aGEodGhpcy5oZWFkZXJzLGgpLGFlPVtdO2wuYWx0ZXIoImluc2VydF9jb2xfc3RhcnQiLHRoaXMuaW5kZXhlc1swXSx0aGlzLmluZGV4'@;
put 'ZXMubGVuZ3RoLCJVbmRvUmVkby51bmRvIiksUm4obC5nZXRTb3VyY2VEYXRhQXJyYXkoKSxmdW5jdGlvbihwZSxiZSl7Um4oZCxmdW5jdGlvbih4ZSxWZSl7cGVbeGVdPV9bYmVdW1ZlXSxhZS5wdXNoKFtiZSx4ZSxwZVt4ZV1dKX0pfSksbC5zZXRTb3VyY2VEYXRhQXRDZWxsKGFlLHZvaWQg'@;
put 'MCx2b2lkIDAsIlVuZG9SZWRvLnVuZG8iKSx0eXBlb2YgdGhpcy5oZWFkZXJzPCJ1IiYmUm4oWCxmdW5jdGlvbihwZSxiZSl7bC5nZXRTZXR0aW5ncygpLmNvbEhlYWRlcnNbZFtiZV1dPXBlfSksbC5iYXRjaEV4ZWN1dGlvbihmdW5jdGlvbigpe2wucm93SW5kZXhNYXBwZXIuc2V0SW5kZXhl'@;
put 'c1NlcXVlbmNlKGEucm93UG9zaXRpb25zKSxsLmNvbHVtbkluZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZShhLmNvbHVtblBvc2l0aW9ucyl9LCEwKSxsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGMpLGwucmVuZGVyKCl9LG9vLlJlbW92ZUNvbHVtbkFjdGlvbi5wcm90b3R5'@;
put 'cGUucmVkbz1mdW5jdGlvbihsLGMpe2wuYWRkSG9va09uY2UoImFmdGVyUmVtb3ZlQ29sIixjKSxsLmFsdGVyKCJyZW1vdmVfY29sIix0aGlzLmluZGV4LHRoaXMuYW1vdW50LCJVbmRvUmVkby5yZWRvIil9LG9vLkNlbGxBbGlnbm1lbnRBY3Rpb249ZnVuY3Rpb24obCxjLGEsZil7dGhpcy5z'@;
put 'dGF0ZUJlZm9yZT1sLHRoaXMucmFuZ2U9Yyx0aGlzLnR5cGU9YSx0aGlzLmFsaWdubWVudD1mfSxvby5DZWxsQWxpZ25tZW50QWN0aW9uLnByb3RvdHlwZS51bmRvPWZ1bmN0aW9uKGwsYyl7dmFyIGE9dGhpcztSbih0aGlzLnJhbmdlLGZ1bmN0aW9uKGYpe2YuZm9yQWxsKGZ1bmN0aW9uKGQs'@;
put 'aCl7ZD49MCYmaD49MCYmbC5zZXRDZWxsTWV0YShkLGgsImNsYXNzTmFtZSIsYS5zdGF0ZUJlZm9yZVtkXVtoXXx8IiBodExlZnQiKX0pfSksbC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixjKSxsLnJlbmRlcigpfSxvby5DZWxsQWxpZ25tZW50QWN0aW9uLnByb3RvdHlwZS5yZWRv'@;
put 'PWZ1bmN0aW9uKGwsYyl7ejQodGhpcy5yYW5nZSx0aGlzLnR5cGUsdGhpcy5hbGlnbm1lbnQsZnVuY3Rpb24oYSxmKXtyZXR1cm4gbC5nZXRDZWxsTWV0YShhLGYpfSxmdW5jdGlvbihhLGYsZCxoKXtyZXR1cm4gbC5zZXRDZWxsTWV0YShhLGYsZCxoKX0pLGwuYWRkSG9va09uY2UoImFmdGVy'@;
put 'Vmlld1JlbmRlciIsYyksbC5yZW5kZXIoKX0sb28uRmlsdGVyc0FjdGlvbj1mdW5jdGlvbihsKXt0aGlzLmNvbmRpdGlvbnNTdGFjaz1sLHRoaXMuYWN0aW9uVHlwZT0iZmlsdGVyIn0sZjMob28uRmlsdGVyc0FjdGlvbixvby5BY3Rpb24pLG9vLkZpbHRlcnNBY3Rpb24ucHJvdG90eXBlLnVu'@;
put 'ZG89ZnVuY3Rpb24obCxjKXt2YXIgYT1sLmdldFBsdWdpbigiZmlsdGVycyIpO2wuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYyksYS5jb25kaXRpb25Db2xsZWN0aW9uLmltcG9ydEFsbENvbmRpdGlvbnModGhpcy5jb25kaXRpb25zU3RhY2suc2xpY2UoMCx0aGlzLmNvbmRpdGlv'@;
put 'bnNTdGFjay5sZW5ndGgtMSkpLGEuZmlsdGVyKCl9LG9vLkZpbHRlcnNBY3Rpb24ucHJvdG90eXBlLnJlZG89ZnVuY3Rpb24obCxjKXt2YXIgYT1sLmdldFBsdWdpbigiZmlsdGVycyIpO2wuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYyksYS5jb25kaXRpb25Db2xsZWN0aW9uLmlt'@;
put 'cG9ydEFsbENvbmRpdGlvbnModGhpcy5jb25kaXRpb25zU3RhY2spLGEuZmlsdGVyKCl9O3ZhciBwTXQ9ZnVuY3Rpb24obCl7STVlKGEsbCk7dmFyIGM9UjVlKGEpO2Z1bmN0aW9uIGEoZixkKXt2YXIgaDtUNWUodGhpcyxhKSwoaD1jLmNhbGwodGhpcykpLmNlbGxSYW5nZT1kO3ZhciBtPWgu'@;
put 'Y2VsbFJhbmdlLmdldFRvcFN0YXJ0Q29ybmVyKCksXz1oLmNlbGxSYW5nZS5nZXRCb3R0b21FbmRDb3JuZXIoKTtyZXR1cm4gaC5yYW5nZURhdGE9Zi5nZXREYXRhKG0ucm93LG0uY29sLF8ucm93LF8uY29sKSxofXJldHVybiBENWUoYSxbe2tleToidW5kbyIsdmFsdWU6ZnVuY3Rpb24oZCxo'@;
put 'KXt2YXIgbT1kLmdldFBsdWdpbigibWVyZ2VDZWxscyIpO2QuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsaCksbS51bm1lcmdlUmFuZ2UodGhpcy5jZWxsUmFuZ2UsITApO3ZhciBfPXRoaXMuY2VsbFJhbmdlLmdldFRvcFN0YXJ0Q29ybmVyKCk7ZC5wb3B1bGF0ZUZyb21BcnJheShf'@;
put 'LnJvdyxfLmNvbCx0aGlzLnJhbmdlRGF0YSx2b2lkIDAsdm9pZCAwLCJNZXJnZUNlbGxzIil9fSx7a2V5OiJyZWRvIix2YWx1ZTpmdW5jdGlvbihkLGgpe3ZhciBtPWQuZ2V0UGx1Z2luKCJtZXJnZUNlbGxzIik7ZC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixoKSxtLm1lcmdlUmFu'@;
put 'Z2UodGhpcy5jZWxsUmFuZ2UpfX1dKSxhfShvby5BY3Rpb24pO29vLk1lcmdlQ2VsbHNBY3Rpb249cE10O3ZhciBtTXQ9ZnVuY3Rpb24obCl7STVlKGEsbCk7dmFyIGM9UjVlKGEpO2Z1bmN0aW9uIGEoZixkKXt2YXIgaDtyZXR1cm4gVDVlKHRoaXMsYSksKGg9Yy5jYWxsKHRoaXMpKS5jZWxs'@;
put 'UmFuZ2U9ZCxofXJldHVybiBENWUoYSxbe2tleToidW5kbyIsdmFsdWU6ZnVuY3Rpb24oZCxoKXt2YXIgbT1kLmdldFBsdWdpbigibWVyZ2VDZWxscyIpO2QuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsaCksbS5tZXJnZVJhbmdlKHRoaXMuY2VsbFJhbmdlLCEwKX19LHtrZXk6InJl'@;
put 'ZG8iLHZhbHVlOmZ1bmN0aW9uKGQsaCl7dmFyIG09ZC5nZXRQbHVnaW4oIm1lcmdlQ2VsbHMiKTtkLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGgpLG0udW5tZXJnZVJhbmdlKHRoaXMuY2VsbFJhbmdlLCEwKSxkLnJlbmRlcigpfX1dKSxhfShvby5BY3Rpb24pO2Z1bmN0aW9uIEg1'@;
put 'ZShsLGMpe2lmKCJsb2FkRGF0YSI9PT1jKXJldHVybiB0aGlzLnVuZG9SZWRvLmNsZWFyKCl9b28uVW5tZXJnZUNlbGxzQWN0aW9uPW1NdCxvby5Sb3dNb3ZlQWN0aW9uPWZ1bmN0aW9uKGwsYyl7dGhpcy5yb3dzPWwuc2xpY2UoKSx0aGlzLmZpbmFsSW5kZXg9Yyx0aGlzLmFjdGlvblR5cGU9'@;
put 'InJvd19tb3ZlIn0sZjMob28uUm93TW92ZUFjdGlvbixvby5BY3Rpb24pLG9vLlJvd01vdmVBY3Rpb24ucHJvdG90eXBlLnVuZG89ZnVuY3Rpb24obCxjKXt2YXIgYT10aGlzLGY9bC5nZXRQbHVnaW4oIm1hbnVhbFJvd01vdmUiKSxkPVtdLmNvbmNhdCh0aGlzLnJvd3MpLGg9ZC5maWx0ZXIo'@;
put 'ZnVuY3Rpb24oYWUpe3JldHVybiBhZT5hLmZpbmFsSW5kZXh9KSxtPWQuZmlsdGVyKGZ1bmN0aW9uKGFlKXtyZXR1cm4gYWU8PWEuZmluYWxJbmRleH0pLF89aC5zb3J0KGZ1bmN0aW9uKGFlLHBlKXtyZXR1cm4gcGUtYWV9KS5jb25jYXQobS5zb3J0KGZ1bmN0aW9uKGFlLHBlKXtyZXR1cm4g'@;
put 'YWUtcGV9KSk7bC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixjKTtmb3IodmFyIE89MDtPPF8ubGVuZ3RoO08rPTEpe3ZhciBYPWwudG9WaXN1YWxSb3coX1tPXSk7Zi5tb3ZlUm93KFgsX1tPXSl9bC5yZW5kZXIoKSxsLmRlc2VsZWN0Q2VsbCgpLGwuc2VsZWN0Um93cyh0aGlzLnJv'@;
put 'd3NbMF0sdGhpcy5yb3dzWzBdK3RoaXMucm93cy5sZW5ndGgtMSl9LG9vLlJvd01vdmVBY3Rpb24ucHJvdG90eXBlLnJlZG89ZnVuY3Rpb24obCxjKXt2YXIgYT1sLmdldFBsdWdpbigibWFudWFsUm93TW92ZSIpO2wuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYyksYS5tb3ZlUm93'@;
put 'cyh0aGlzLnJvd3Muc2xpY2UoKSx0aGlzLmZpbmFsSW5kZXgpLGwucmVuZGVyKCksbC5kZXNlbGVjdENlbGwoKSxsLnNlbGVjdFJvd3ModGhpcy5maW5hbEluZGV4LHRoaXMuZmluYWxJbmRleCt0aGlzLnJvd3MubGVuZ3RoLTEpfSxvby5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3ZhciBs'@;
put 'PXRoaXMuaW5zdGFuY2UuZ2V0U2V0dGluZ3MoKS51bmRvLGM9dHlwZW9mIGw+InUifHxsO3RoaXMuaW5zdGFuY2UudW5kb1JlZG98fCh0aGlzLmluc3RhbmNlLnVuZG9SZWRvPXRoaXMpLGM/dGhpcy5pbnN0YW5jZS51bmRvUmVkby5lbmFibGUoKTp0aGlzLmluc3RhbmNlLnVuZG9SZWRvLmRp'@;
put 'c2FibGUoKX0sb28ucHJvdG90eXBlLnJlZ2lzdGVyU2hvcnRjdXRzPWZ1bmN0aW9uKCl7dmFyIGw9dGhpczt0aGlzLmluc3RhbmNlLmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dHMoW3trZXlzOltbIkNvbnRyb2wvTWV0YSIsInoiXV0sY2FsbGJh'@;
put 'Y2s6ZnVuY3Rpb24oKXtsLnVuZG8oKX19LHtrZXlzOltbIkNvbnRyb2wvTWV0YSIsInkiXSxbIkNvbnRyb2wvTWV0YSIsIlNoaWZ0IiwieiJdXSxjYWxsYmFjazpmdW5jdGlvbigpe2wucmVkbygpfX1dLHtydW5Pbmx5SWY6ZnVuY3Rpb24obSl7cmV0dXJuIW0uYWx0S2V5fSxncm91cDoidW5k'@;
put 'b1JlZG8ifSl9LG9vLnByb3RvdHlwZS51bnJlZ2lzdGVyU2hvcnRjdXRzPWZ1bmN0aW9uKCl7dGhpcy5pbnN0YW5jZS5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cCgidW5kb1JlZG8iKX07dmFyIE5FPXVvLmdldFNpbmdsZXRv'@;
put 'bigpO05FLmFkZCgiYWZ0ZXJVcGRhdGVTZXR0aW5ncyIsZnVuY3Rpb24oKXt2YXIgbDtudWxsPT09KGw9dGhpcy5nZXRQbHVnaW4oInVuZG9SZWRvIikpfHx2b2lkIDA9PT1sfHxsLmluaXQoKX0pLE5FLnJlZ2lzdGVyKCJiZWZvcmVVbmRvIiksTkUucmVnaXN0ZXIoImFmdGVyVW5kbyIpLE5F'@;
put 'LnJlZ2lzdGVyKCJiZWZvcmVSZWRvIiksTkUucmVnaXN0ZXIoImFmdGVyUmVkbyIpLG9vLlBMVUdJTl9LRVk9InVuZG9SZWRvIixvby5TRVRUSU5HX0tFWVM9ITA7Y29uc3QgeU10PW9vO2Z1bmN0aW9uIE41ZSgpeyhmdW5jdGlvbiBsY3QoKXtZMChBOSksWTAob0spLFkwKCRoZSksWTAoUWhl'@;
put 'KSxZMCh1SyksWTAodEspLFkwKG4yZSksWTAoaTJlKSxZMChLdXQpLFkwKEQ1KSxZMChzMmUpfSkoKSxmdW5jdGlvbiB3Y3QoKXtOaCh6OSksTmgoYmspLE5oKGdLKSxOaChtSyksTmgoeUspLE5oKGJLKSxOaChWNCksTmgoX0spfSgpLGZ1bmN0aW9uIEFjdCgpe1U3KF9rKSxVNyh3TCksVTco'@;
put 'd0spLFU3KENMKX0oKSxmdW5jdGlvbiBZY3QoKXtCZChPY3QpLEJkKEljdCksQmQoTGN0KSxCZChGY3QpLEJkKE5jdCksQmQoQmN0KSxCZCh6Y3QpLEJkKFZoZSksQmQoWmN0KX0oKSxmdW5jdGlvbiBiTXQoKXtVYShGMHQpLFVhKGExdCksVWEoTTF0KSxVYSh2ZnQpLFVhKEZmdCksVWEoeTNl'@;
put 'KSxVYSh0aHQpLFVhKExodCksVWEoSzNlKSxVYShSM3QpLFVhKGFwdCksVWEodnB0KSxVYShrcGUpLFVhKHc0dCksVWEoUTZ0KSxVYShROHQpLFVhKE12dCksVWEoS3Z0KSxVYSh5N3QpLFVhKGE5dCksVWEodjl0KSxVYShveXQpLFVhKGd5dCksVWEocGJ0KSxVYShQYnQpLFVhKCRidCksVWEo'@;
put 'Q3d0KSxVYShZQ3QpLFVhKHVTdCksVWEoVFN0KSxVYSh6U3QpLFVhKGVNdCksVWEoeU10KX0oKX1sZXQgJDM9KCgpPT57Y2xhc3MgbHt9cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1bW9kPURpKHt0eXBlOmx9KSxsLlx1MDI3NWluaj14'@;
put 'aSh7aW1wb3J0czpbYm9dfSksbH0pKCksVlA9KCgpPT57Y2xhc3MgbHtuZ09uSW5pdCgpe319cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1bW9kPURpKHt0eXBlOmx9KSxsLlx1MDI3NWluaj14aSh7cHJvdmlkZXJzOltYaixKal0saW1w'@;
put 'b3J0czpbYm8sZGMsbzQsSWQsJDNdfSksbH0pKCksVkU9KCgpPT57Y2xhc3MgbHt9cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1bW9kPURpKHt0eXBlOmx9KSxsLlx1MDI3NWluaj14aSh7aW1wb3J0czpbYm9dfSksbH0pKCksVjVlPSgo'@;
put 'KT0+e2NsYXNzIGx7fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NW1vZD1EaSh7dHlwZTpsfSksbC5cdTAyNzVpbmo9eGkoe2ltcG9ydHM6W2JvLElkLGJvLGRjXX0pLGx9KSgpLEJFPSgoKT0+e2NsYXNzIGx7fXJldHVybiBsLlx1MDI3'@;
put 'NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NW1vZD1EaSh7dHlwZTpsfSksbC5cdTAyNzVpbmo9eGkoe2ltcG9ydHM6W2JvLGRjLElkLG80LFZQLFZFLCQzLFY1ZV19KSxsfSkoKTt2YXIgcEosbUosZ0osdkoseUosQzY9VCg4MzQxNyk7Y2xhc3MgX010e2NvbnN0'@;
put 'cnVjdG9yKCl7dGhpcy5xdWV1ZT1bXX1hZGRUb1F1ZXVlKGMpe3RoaXMucXVldWUucHVzaCguLi5jKX19VCg0Mzk5KSxONWUoKSxmdW5jdGlvbiB3TXQobCl7dmFyIGM9ISh0eXBlb2Ygd2luZG93PiJ1IikmJndpbmRvdy5qUXVlcnk7YyYmKGMuZm4uaGFuZHNvbnRhYmxlPWZ1bmN0aW9uKGEp'@;
put 'e3ZhciBtLGY9dGhpcy5maXJzdCgpLGQ9Zi5kYXRhKCJoYW5kc29udGFibGUiKTtpZigic3RyaW5nIiE9dHlwZW9mIGEpe3ZhciBoPWF8fHt9O3JldHVybiBkP2QudXBkYXRlU2V0dGluZ3MoaCk6KGQ9bmV3IGwuQ29yZShmWzBdLGgpLGYuZGF0YSgiaGFuZHNvbnRhYmxlIixkKSxkLmluaXQo'@;
put 'KSksZn1pZihkKXtpZighKHR5cGVvZiBkW2FdPCJ1IikpdGhyb3cgbmV3IEVycm9yKCJIYW5kc29udGFibGUgZG8gbm90IHByb3ZpZGUgYWN0aW9uOiAiLmNvbmNhdChhKSk7Zm9yKHZhciBfLE89YXJndW1lbnRzLmxlbmd0aCxYPW5ldyBBcnJheShPPjE/Ty0xOjApLGFlPTE7YWU8TzthZSsr'@;
put 'KVhbYWUtMV09YXJndW1lbnRzW2FlXTttPShfPWRbYV0pLmNhbGwuYXBwbHkoXyxbZF0uY29uY2F0KFgpKSwiZGVzdHJveSI9PT1hJiZmLnJlbW92ZURhdGEoKX1yZXR1cm4gbX0pfShfYSksX2EuX19HaG9zdFRhYmxlPVNLLF9hLl9nZXRMaXN0ZW5lcnNDb3VudGVyPWZ1bmN0aW9uIEJHZSgp'@;
put 'e3JldHVybiB0Un0sX2EuX2dldFJlZ2lzdGVyZWRNYXBzQ291bnRlcj1mdW5jdGlvbiBWbnQoKXtyZXR1cm4gbkd9LF9hLkV2ZW50TWFuYWdlcj1mczt2YXIgQ010PVtrLGhlLHosVixzZSxLLEgsRSx2LEIsSixSXSxTTXQ9W0wsSV07X2EuaGVscGVyPXt9LF9hLmRvbT17fSxSbihDTXQsZnVu'@;
put 'Y3Rpb24obCl7Um4oT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobCksZnVuY3Rpb24oYyl7Il8iIT09Yy5jaGFyQXQoMCkmJihfYS5oZWxwZXJbY109bFtjXSl9KX0pLFJuKFNNdCxmdW5jdGlvbihsKXtSbihPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhsKSxmdW5jdGlvbihjKXsiXyIh'@;
put 'PT1jLmNoYXJBdCgwKSYmKF9hLmRvbVtjXT1sW2NdKX0pfSksX2EuY2VsbFR5cGVzPW51bGwhPT0ocEo9X2EuY2VsbFR5cGVzKSYmdm9pZCAwIT09cEo/cEo6e30sUm4oZWF0KCksZnVuY3Rpb24obCl7X2EuY2VsbFR5cGVzW2xdPVYkKGwpfSksX2EuY2VsbFR5cGVzLnJlZ2lzdGVyQ2VsbFR5'@;
put 'cGU9QmQsX2EuY2VsbFR5cGVzLmdldENlbGxUeXBlPVYkLF9hLmVkaXRvcnM9bnVsbCE9PShtSj1fYS5lZGl0b3JzKSYmdm9pZCAwIT09bUo/bUo6e30sUm4oSUdlKCksZnVuY3Rpb24obCl7X2EuZWRpdG9yc1siIi5jb25jYXQoQWMobCksIkVkaXRvciIpXT1lUihsKX0pLF9hLmVkaXRvcnMu'@;
put 'cmVnaXN0ZXJFZGl0b3I9WTAsX2EuZWRpdG9ycy5nZXRFZGl0b3I9ZVIsX2EucmVuZGVyZXJzPW51bGwhPT0oZ0o9X2EucmVuZGVyZXJzKSYmdm9pZCAwIT09Z0o/Z0o6e30sUm4oSyRlKCksZnVuY3Rpb24obCl7dmFyIGM9b1IobCk7ImJhc2UiPT09bCYmKF9hLnJlbmRlcmVycy5jZWxsRGVj'@;
put 'b3JhdG9yPWMpLF9hLnJlbmRlcmVyc1siIi5jb25jYXQoQWMobCksIlJlbmRlcmVyIildPWN9KSxfYS5yZW5kZXJlcnMucmVnaXN0ZXJSZW5kZXJlcj1OaCxfYS5yZW5kZXJlcnMuZ2V0UmVuZGVyZXI9b1IsX2EudmFsaWRhdG9ycz1udWxsIT09KHZKPV9hLnZhbGlkYXRvcnMpJiZ2b2lkIDAh'@;
put 'PT12Sj92Sjp7fSxSbihKJGUoKSxmdW5jdGlvbihsKXtfYS52YWxpZGF0b3JzWyIiLmNvbmNhdChBYyhsKSwiVmFsaWRhdG9yIildPWVXKGwpfSksX2EudmFsaWRhdG9ycy5yZWdpc3RlclZhbGlkYXRvcj1VNyxfYS52YWxpZGF0b3JzLmdldFZhbGlkYXRvcj1lVyxfYS5wbHVnaW5zPW51bGwh'@;
put 'PT0oeUo9X2EucGx1Z2lucykmJnZvaWQgMCE9PXlKP3lKOnt9LFJuKFFZKCksZnVuY3Rpb24obCl7X2EucGx1Z2luc1tsXT1lTShsKX0pLF9hLnBsdWdpbnNbIiIuY29uY2F0KEFjKEdhLlBMVUdJTl9LRVkpLCJQbHVnaW4iKV09R2EsX2EucGx1Z2lucy5yZWdpc3RlclBsdWdpbj1VYSxfYS5w'@;
put 'bHVnaW5zLmdldFBsdWdpbj1lTTtjb25zdCBNTXQ9X2EsYko9KGwsYyxhKT0+e2ZvcihsZXQgZiBvZiBsKXtjb25zdCBkPWMuZmluZChtPT5tLmRhdGE9PT1mLk5BTUUpLGg9YS52YXJzW2YuTkFNRV07aCYmKGYuVFlQRT1bIkRBVEUiLCJEQVRFVElNRSIsIlRJTUUiXS5pbmNsdWRlcyhmLkRE'@;
put 'VFlQRSk/Im51bSI6aC50eXBlKSxkJiZmLkRFU0MmJihkLmRlc2M9Zi5ERVNDKSxkJiZoLmxlbmd0aCYmKGQubGVuZ3RoPXBhcnNlSW50KGgubGVuZ3RoKSksZCYmZi5DTFNfUlVMRSYmKGQuY2xzUnVsZT1mLkNMU19SVUxFKX1yZXR1cm4gY307ZnVuY3Rpb24gX0oobCxjKXtpZihudWxsPT1s'@;
put 'fHwhaXNOYU4obCkmJmlzRmluaXRlKGwpKXJldHVybiBjJiZjKCEwKSwhMDtjb25zdCBhPSgwLHUzLmlzU3BlY2lhbE1pc3NpbmcpKGwpO3JldHVybiBjJiZjKGEpLGF9Y29uc3QgQjVlPXtDQVNFOihsLGMpPT57c3dpdGNoKGMpe2Nhc2UiVVBDQVNFIjpyZXR1cm4hIVt2b2lkIDAsbnVsbF0u'@;
put 'aW5jbHVkZXMobCl8fCJzdHJpbmciPT10eXBlb2YgbCYmbC50b1N0cmluZygpPT09bC50b1N0cmluZygpLnRvVXBwZXJDYXNlKCk7Y2FzZSJMT1dDQVNFIjpyZXR1cm4hIVt2b2lkIDAsbnVsbF0uaW5jbHVkZXMobCl8fCJzdHJpbmciPT10eXBlb2YgbCYmbC50b1N0cmluZygpPT09bC50b1N0'@;
put 'cmluZygpLnRvTG93ZXJDYXNlKCl9cmV0dXJuITB9LE1JTlZBTDoobCxjKT0+e2NvbnN0IGE9X0oobCksZj1wYXJzZUZsb2F0KGwpO3JldHVybighYXx8IWlzTmFOKGYpKSYmZj49TnVtYmVyKGMudG9TdHJpbmcoKSl9LE1BWFZBTDoobCxjKT0+e2NvbnN0IGE9X0oobCksZj1wYXJzZUZsb2F0'@;
put 'KGwpO3JldHVybiEoIWF8fCFpc05hTihmKSl8fGY8PU51bWJlcihjLnRvU3RyaW5nKCkpfSxOT1ROVUxMOihsLGMpPT5udWxsIT1sJiZsLnRvU3RyaW5nKCkubGVuZ3RoPjB9O2NsYXNzIEFNdHtjb25zdHJ1Y3RvcihjLGEsZixkLGgsbSl7dGhpcy5ydWxlcz1bXSx0aGlzLmRxcnVsZXM9W10s'@;
put 'dGhpcy5kcWRhdGE9W10sdGhpcy5oaWRkZW5Db2x1bW5zPVtdLHRoaXMucHJpbWFyeUtleXM9W10sdGhpcy5leGVjdXRlSG90VmFsaWRhdG9yPShfLE8sWCk9Pntjb25zdCBhZT17Li4uXyx2YWxpZGF0b3I6dm9pZCAwLGNvcnJlY3RGb3JtYXQ6ITEscm93OjAsY29sOjAsaW5zdGFuY2U6bmV3'@;
put 'IE1NdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx7fSksdmlzdWFsUm93OjAsdmlzdWFsQ29sOjAscHJvcDowfTtudWxsPT1PJiYoTz0iIiksXyYmXy52YWxpZGF0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiBfLnZhbGlkYXRvcj9fLnZhbGlkYXRvci5jYWxsKGFlLE8scGU9PntYJiZY'@;
put 'KHBlKX0pOlgmJlgoITEpfSx0aGlzLnNhc3BhcmFtcz1jLHRoaXMuaG90SW5zdGFuY2U9bSx0aGlzLnJ1bGVzPShsPT57dHJ5e3JldHVybiBKU09OLnBhcnNlKGBbJHtsfV1gKX1jYXRjaHtyZXR1cm5bXX19KShjLkNPTFRZUEUpLHRoaXMucnVsZXM9YkooZix0aGlzLnJ1bGVzLGEpLHRoaXMu'@;
put 'ZHFydWxlcz1kLHRoaXMuZHFkYXRhPWgsdGhpcy5wcmltYXJ5S2V5cz1jLlBLLnNwbGl0KCIgIiksdGhpcy51cGRhdGVEcURhdGEoKSx0aGlzLnNldHVwVmFsaWRhdGlvbnMoKX1nZXRSdWxlcygpe3JldHVybiB0aGlzLnJ1bGVzfWdldFJ1bGUoYyl7Y29uc3QgYT10aGlzLmdldFJ1bGVJbmRl'@;
put 'eChjKTtyZXR1cm4gdGhpcy5ydWxlc1thXX1nZXRIaWRkZW5Db2x1bW5zKCl7cmV0dXJuIHRoaXMuaGlkZGVuQ29sdW1uc311cGRhdGVSdWxlKGMsYSl7bGV0IGY9dGhpcy5nZXRSdWxlSW5kZXgoYyk7dGhpcy5ydWxlc1tmXT17Li4udGhpcy5ydWxlc1tmXSwuLi5hfX1yZW1vdmVSdWxlKGMp'@;
put 'e2NvbnN0IGE9dGhpcy5nZXRSdWxlSW5kZXgoYyk7dGhpcy5ydWxlcy5zcGxpY2UoYSwxKX1nZXREcURldGFpbHMoYyl7cmV0dXJuIGM/dGhpcy5kcXJ1bGVzLmZpbHRlcihhPT5hLkJBU0VfQ09MPT09Yyk6dGhpcy5kcXJ1bGVzfWlzRHFDb2woYyl7cmV0dXJuISF0aGlzLmRxcnVsZXMuZmlu'@;
put 'ZChhPT5hLkJBU0VfQ09MPT09Yyl9aGFzRHFSdWxlcyhjLGEsZj0hMSl7cmV0dXJuIGY/dGhpcy5kcXJ1bGVzLmZpbHRlcihkPT5kLkJBU0VfQ09MPT09YyYmYS5pbmNsdWRlcyhkLlJVTEVfVFlQRSkpLmxlbmd0aD09PWEubGVuZ3RoOiEhdGhpcy5kcXJ1bGVzLmZpbmQoZD0+ZC5CQVNFX0NP'@;
put 'TD09PWMmJmEuaW5jbHVkZXMoZC5SVUxFX1RZUEUpKX1nZXREcURyb3Bkb3duU291cmNlKGMpe2xldCBhPVtdO3JldHVybiB0aGlzLmRxcnVsZXMuZm9yRWFjaChmPT57Zi5CQVNFX0NPTC50b1N0cmluZygpPT09Yy5kYXRhJiZjLmRhdGEudG9TdHJpbmcoKSYmWyJIQVJEU0VMRUNUIiwiU09G'@;
put 'VFNFTEVDVCIsIkhBUkRTRUxFQ1RfSE9PSyIsIlNPRlRTRUxFQ1RfSE9PSyJdLmluY2x1ZGVzKGYuUlVMRV9UWVBFLnRvU3RyaW5nKCkpJiZ0aGlzLmRxZGF0YS5maWx0ZXIoZD0+ZC5CQVNFX0NPTD09PWYuQkFTRV9DT0wpLmZvckVhY2goZD0+e2EucHVzaChjLnR5cGUmJiJudW1lcmljIj09'@;
put 'PWMudHlwZT9OdW1iZXIoZC5SVUxFX0RBVEEpOmQuUlVMRV9EQVRBKX0pfSksYX11cGRhdGVEcURhdGEoKXt0aGlzLmRxZGF0YS5sZW5ndGg+MCYmKGw9Pntjb25zdCBjPVtdO3JldHVybiB0aGlzLmRxZGF0YS5mb3JFYWNoKGE9PntjLmluY2x1ZGVzKGEuQkFTRV9DT0wpfHxjLnB1c2goYS5C'@;
put 'QVNFX0NPTCl9KSxjfSkoKS5mb3JFYWNoKGE9PntsZXQgZj0hMTt0aGlzLmRxcnVsZXMubGVuZ3RoPjAmJnRoaXMuZHFydWxlcy5mb3JFYWNoKGQ9PntkLkJBU0VfQ09MPT09YSYmKCJTT0ZUU0VMRUNUIj09PWQuUlVMRV9UWVBFfHwiSEFSRFNFTEVDVCI9PT1kLlJVTEVfVFlQRSkmJihmPSEw'@;
put 'KX0pLGZ8fHRoaXMuZHFydWxlcy5wdXNoKHtCQVNFX0NPTDphLFJVTEVfVFlQRToiU09GVFNFTEVDVCIsUlVMRV9WQUxVRTphLFg6MX0pfSl9c2V0dXBWYWxpZGF0aW9ucygpe2ZvcihsZXQgYz0wO2M8dGhpcy5ydWxlcy5sZW5ndGg7YysrKXtjb25zdCBhPXRoaXMucnVsZXNbY10uZGF0YXx8'@;
put 'IiI7aWYoIl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyIhPT1hKXtpZih0aGlzLmlzRHFDb2woYSkpe2xldCBkPXRoaXMuZ2V0RHFEcm9wZG93blNvdXJjZSh0aGlzLnJ1bGVzW2NdKTtkLmxlbmd0aD4wJiYodGhpcy5ydWxlc1tjXS5zb3VyY2U9ZCx0aGlzLnJ1bGVzW2NdLnR5cGU9'@;
put 'ImF1dG9jb21wbGV0ZSIsdGhpcy5ydWxlc1tjXS5maWx0ZXI9ITEpLHRoaXMuaGFzRHFSdWxlcyhhLFsiU09GVFNFTEVDVCJdKSYmKHRoaXMucnVsZXNbY10uc3RyaWN0PSExKSx0aGlzLmhhc0RxUnVsZXMoYSxbIkhBUkRTRUxFQ1QiXSkmJih0aGlzLnJ1bGVzW2NdLnN0cmljdD0hMCksdGhp'@;
put 'cy5oYXNEcVJ1bGVzKGEsWyJTT0ZUU0VMRUNUX0hPT0siXSkmJih0aGlzLnJ1bGVzW2NdLnN0cmljdD0hMSksdGhpcy5oYXNEcVJ1bGVzKGEsWyJIQVJEU0VMRUNUX0hPT0siXSkmJih0aGlzLnJ1bGVzW2NdLnN0cmljdD0hMCksdGhpcy5oYXNEcVJ1bGVzKGEsWyJOT1ROVUxMIl0pJiYodGhp'@;
put 'cy5ydWxlc1tjXS5hbGxvd0VtcHR5PSExKX0idHJ1ZSI9PT10aGlzLnJ1bGVzW2NdLmNvcnJlY3RGb3JtYXQmJih0aGlzLnJ1bGVzW2NdLmNvcnJlY3RGb3JtYXQ9ITApLHRoaXMuc2V0RGVmYXVsdFZhbGlkYXRvcih0aGlzLGMpLHRoaXMuc2V0Q29sdW1uTGV2ZWxTZWN1cml0eShjKX19dGhp'@;
put 'cy5zYXNwYXJhbXM/LkNMU19GTEFHJiZ0aGlzLmhpZGRlbkNvbHVtbnMucHVzaCgwKX1zZXREZWZhdWx0VmFsaWRhdG9yKGMsYSl7dGhpcy5ydWxlc1thXS52YWxpZGF0b3I9ZnVuY3Rpb24oZixkKXtjb25zdCBoPWMucnVsZXNbYV0uZGF0YT8udG9TdHJpbmcoKSxtPWMucnVsZXNbYV0udHlw'@;
put 'ZXx8IiI7bGV0IF89bnVsbDtyZXR1cm4iYXV0b2NvbXBsZXRlIiE9PXRoaXMuZWRpdG9yfHwoYy5nZXRIYW5kc29udGFibGVWYWxpZGF0b3IoImF1dG9jb21wbGV0ZSIpLmNhbGwodGhpcyxmLE89PntfPU99KSxfKT8oYy5nZXRIYW5kc29udGFibGVWYWxpZGF0b3IobSkuY2FsbCh0aGlzLGYs'@;
put 'Tz0+e189T30pLF8/Yy5sZW5ndGhDaGVjayhmLGMucnVsZXNbYV0ubGVuZ3RoLG0pP2MuaXNEcUNvbChofHwiIikmJiEoKGwsYyk9Pntmb3IobGV0IGEgb2YgbClpZihCNWVbYS5SVUxFX1RZUEVdJiYhQjVlW2EuUlVMRV9UWVBFXShjLGEuUlVMRV9WQUxVRSkpcmV0dXJuIGNvbnNvbGUud2Fy'@;
put 'bihgRFEgSW52YWxpZCBSZWFzb246ICR7YS5SVUxFX1RZUEV9XG5WYWx1ZTogJHtjfSlcblJ1bGUgVmFsdWU6ICR7YS5SVUxFX1ZBTFVFLmxlbmd0aD4wJiYiICIhPT1hLlJVTEVfVkFMVUU/YS5SVUxFX1ZBTFVFOiJOb3QgZGVmaW5lZCJ9YCksITE7cmV0dXJuITB9KShjLmdldERxRGV0YWls'@;
put 'cyhofHwiIiksZik/KGNvbnNvbGUud2FybihgRFEgVmFsaWRhdGlvbiAtIGludmFsaWQgKFZhbHVlOiAke2Z9KWApLHZvaWQgZCghMSkpOnZvaWQgZCghMCk6KGNvbnNvbGUud2FybihgTGVuZ3RoIFZhbGlkYXRpb24gLSBpbnZhbGlkIChWYWx1ZTogJHtmfSlgKSx2b2lkIGQoITEpKTooY29u'@;
put 'c29sZS53YXJuKGBIT1QgTmF0aXZlIFZhbGlkYXRpb24gLSBpbnZhbGlkIChWYWx1ZTogJHtmfSlgKSx2b2lkIGQoITEpKSk6KGNvbnNvbGUud2FybihgSE9UIE5hdGl2ZSBWYWxpZGF0aW9uIChhdXRvY29tcGxldGUpIC0gaW52YWxpZCAoVmFsdWU6ICR7Zn0pYCksdm9pZCBkKCExKSl9fWxl'@;
put 'bmd0aENoZWNrKGMsYSxmKXtpZigoMCx1My5pc1NwZWNpYWxNaXNzaW5nKShjKXx8bnVsbD09Y3x8bnVsbD09YSlyZXR1cm4hMDtpZigibnVtZXJpYyI9PT1mKXtpZig4PT09YSlyZXR1cm4hMDtpZihhPDN8fGE+OHx8IU51bWJlci5pc0ludGVnZXIoYSkpcmV0dXJuIGNvbnNvbGUud2Fybigi'@;
put 'aW52YWxpZCBsZW5ndGggZnJvbSBTQVMsIHJ1bGUgbGVuZ3RoIGNhbiBvbmx5IGJlIGFuIGludGVnZXIgYmV0d2VlbiAzLTgiKSwhMTtjb25zdCBkPU51bWJlcihjKT09PWMmJmMlMSE9MDtpZihhPDgmJmQpcmV0dXJuIGNvbnNvbGUud2FybigicmVkdWNlZCBsZW5ndGggbnVtZXJpY3MgY2Fu'@;
put 'bm90IGNvbnRhaW4gZGVjaW1hbHMgZWxzZSBwcmVjaXNpb24gd2lsbCBiZSBhZmZlY3RlZCIpLCExO3N3aXRjaChhKXtjYXNlIDM6cmV0dXJuIGM8PTgxOTI7Y2FzZSA0OnJldHVybiBjPD0yMDk3MTUyO2Nhc2UgNTpyZXR1cm4gYzw9NTM2ODcwOTEyO2Nhc2UgNjpyZXR1cm4gYzw9MTM3NDM4'@;
put 'OTUzNDcyO2Nhc2UgNzpyZXR1cm4gYzw9MzUxODQzNzIwODg4MzJ9fXJldHVybiBjLnRvU3RyaW5nKCkubGVuZ3RoPD1hfWdldEhhbmRzb250YWJsZVZhbGlkYXRvcihjKXtzd2l0Y2goYyl7Y2FzZSJhdXRvY29tcGxldGUiOnJldHVybiBfaztjYXNlIm51bWVyaWMiOnJldHVybiBfSjtjYXNl'@;
put 'ImRhdGUiOnJldHVybiB3TDtjYXNlInRpbWUiOnJldHVybiBDTDtkZWZhdWx0OnJldHVybihhLGYpPT5mP2YoITApOm51bGx9fWdldFJ1bGVJbmRleChjKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGM/Yzp0aGlzLnJ1bGVzLmZpbmRJbmRleChhPT5hLmRhdGE9PT1jKX1zZXRDb2x1bW5MZXZl'@;
put 'bFNlY3VyaXR5KGMpe2lmKCF0aGlzLnNhc3BhcmFtcz8uQ0xTX0ZMQUcpcmV0dXJuO2NvbnN0IGE9dGhpcy5ydWxlc1tjXTtpZih0aGlzLnByaW1hcnlLZXlzLmluY2x1ZGVzKGEuZGF0YSkmJihhLmNsc1J1bGU9IlJFQUQiKSwiSElERSI9PT1hLmNsc1J1bGUmJnRoaXMuaGlkZGVuQ29sdW1u'@;
put 'cy5wdXNoKGMpLCJSRUFEIj09PWEuY2xzUnVsZSYmKGEucmVhZE9ubHk9ITApLCJFRElUIj09PWEuY2xzUnVsZSl7YS5yZWFkT25seT0hMTtjb25zdCBmPXRoaXMuaGlkZGVuQ29sdW1ucy5pbmRleE9mKGMpO3RoaXMuaGlkZGVuQ29sdW1ucy5zcGxpY2UoZiwxKX19fWNvbnN0IEJQPXtudW1l'@;
put 'cmljOjAsZGVmYXVsdDoiIn0sVE10PShsLGMpPT5sPyJhdXRvY29tcGxldGUiPT09bD9jJiZjLnNvdXJjZT9jLnNvdXJjZVswXTpbXTpCUC5oYXNPd25Qcm9wZXJ0eShsKT9CUFtsXTpCUC5kZWZhdWx0OkJQLmRlZmF1bHQsajVlPWw9PntsZXQgYz0oIjAiK2wuZ2V0VVRDSG91cnMoKSkuc2xp'@;
put 'Y2UoLTIpKyI6IjtyZXR1cm4gYz1jKygiMCIrbC5nZXRVVENNaW51dGVzKCkpLnNsaWNlKC0yKSsiOiIsYys9KCIwIitsLmdldFVUQ1NlY29uZHMoKSkuc2xpY2UoLTIpLGN9LHdKPWw9PmwuZ2V0RnVsbFllYXIoKSsiLSIrKCIwIisobC5nZXRNb250aCgpKzEpKS5zbGljZSgtMikrIi0iKygi'@;
put 'MCIrbC5nZXREYXRlKCkpLnNsaWNlKC0yKSxDSj1sPT5uZXcgRGF0ZShNYXRoLnJvdW5kKDg2NDAwKihsLTI1NTY5KSoxZTMpKSxJTXQ9KGwsYyk9Pntjb25zdCBhPVtdLGY9W107cmV0dXJuIGMuZm9yRWFjaChkPT57LTE9PT1sLmluZGV4T2YoZCk/YS5wdXNoKGQpOmYucHVzaChkKX0pLFth'@;
put 'LGZdfSxSTXQ9KGwsYyxhLGYsZCxoLG0pPT4oYy5pbm5lckhUTUw9YCR7aD9oLnRvU3RyaW5nKCk6IiJ9IDxjbHItaWNvbiBzaGFwZT0iZXhjbGFtYXRpb24tY2lyY2xlIiBzdGF0dXM9Indhcm5pbmciPjwvY2xyLWljb24+YCxjKSxTSj0obCxjLGEsZixkLGgsbSk9PihjLmlubmVySFRNTD1o'@;
put 'fHwiIixjKSxMTXQ9KGwsYyxhLGYsZCxoLG0pPT4oYy5pbm5lckhUTUw9YCR7aD9oLnRvU3RyaW5nKCk6IiJ9IDxzcGFuIGNsYXNzPSJzcGlubmVyIHNwaW5uZXItc20gdmVydGljYWwtYWxpZ24tbWlkZGxlIj48L3NwYW4+YCxjKSxNSj1sPT4hIS9eLXswLDF9XGQrJC8udGVzdChsKSx6NWU9'@;
put 'bD0+ISEvXlxkK1wuXGQrJC8udGVzdChsKTtmdW5jdGlvbiBhbShsKXtyZXR1cm4gbnVsbCE9bCYmImZhbHNlIiE9YCR7bH1gfWZ1bmN0aW9uIFU1ZShsLGM9MCl7cmV0dXJuIGZ1bmN0aW9uIFBNdChsKXtyZXR1cm4haXNOYU4ocGFyc2VGbG9hdChsKSkmJiFpc05hTihOdW1iZXIobCkpfShs'@;
put 'KT9OdW1iZXIobCk6Y31mdW5jdGlvbiAkMChsKXtyZXR1cm4gbCBpbnN0YW5jZW9mIFZpP2wubmF0aXZlRWxlbWVudDpsfWNvbnN0IGpFPXtzY2hlZHVsZShsKXtsZXQgYz1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUsYT1jYW5jZWxBbmltYXRpb25GcmFtZTtjb25zdHtkZWxlZ2F0ZTpmfT1qRTtm'@;
put 'JiYoYz1mLnJlcXVlc3RBbmltYXRpb25GcmFtZSxhPWYuY2FuY2VsQW5pbWF0aW9uRnJhbWUpO2NvbnN0IGQ9YyhoPT57YT12b2lkIDAsbChoKX0pO3JldHVybiBuZXcgdGUoKCk9PmE/LihkKSl9LHJlcXVlc3RBbmltYXRpb25GcmFtZSguLi5sKXtjb25zdHtkZWxlZ2F0ZTpjfT1qRTtyZXR1'@;
put 'cm4oYz8ucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUpKC4uLmwpfSxjYW5jZWxBbmltYXRpb25GcmFtZSguLi5sKXtjb25zdHtkZWxlZ2F0ZTpjfT1qRTtyZXR1cm4oYz8uY2FuY2VsQW5pbWF0aW9uRnJhbWV8fGNhbmNlbEFuaW1hdGlvbkZyYW1lKSguLi5s'@;
put 'KX0sZGVsZWdhdGU6dm9pZCAwfSxaNWU9bmV3IGNsYXNzIE5NdCBleHRlbmRzIE96e2ZsdXNoKGMpe3RoaXMuX2FjdGl2ZT0hMDtjb25zdCBhPXRoaXMuX3NjaGVkdWxlZDt0aGlzLl9zY2hlZHVsZWQ9dm9pZCAwO2NvbnN0e2FjdGlvbnM6Zn09dGhpcztsZXQgZDtjPWN8fGYuc2hpZnQoKTtk'@;
put 'b3tpZihkPWMuZXhlY3V0ZShjLnN0YXRlLGMuZGVsYXkpKWJyZWFrfXdoaWxlKChjPWZbMF0pJiZjLmlkPT09YSYmZi5zaGlmdCgpKTtpZih0aGlzLl9hY3RpdmU9ITEsZCl7Zm9yKDsoYz1mWzBdKSYmYy5pZD09PWEmJmYuc2hpZnQoKTspYy51bnN1YnNjcmliZSgpO3Rocm93IGR9fX0oY2xh'@;
put 'c3MgSE10IGV4dGVuZHMgQXp7Y29uc3RydWN0b3IoYyxhKXtzdXBlcihjLGEpLHRoaXMuc2NoZWR1bGVyPWMsdGhpcy53b3JrPWF9cmVxdWVzdEFzeW5jSWQoYyxhLGY9MCl7cmV0dXJuIG51bGwhPT1mJiZmPjA/c3VwZXIucmVxdWVzdEFzeW5jSWQoYyxhLGYpOihjLmFjdGlvbnMucHVzaCh0'@;
put 'aGlzKSxjLl9zY2hlZHVsZWR8fChjLl9zY2hlZHVsZWQ9akUucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT5jLmZsdXNoKHZvaWQgMCkpKSl9cmVjeWNsZUFzeW5jSWQoYyxhLGY9MCl7dmFyIGQ7aWYobnVsbCE9Zj9mPjA6dGhpcy5kZWxheT4wKXJldHVybiBzdXBlci5yZWN5Y2xlQXN5bmNJ'@;
put 'ZChjLGEsZik7Y29uc3R7YWN0aW9uczpofT1jO251bGwhPWEmJihudWxsPT09KGQ9aFtoLmxlbmd0aC0xXSl8fHZvaWQgMD09PWQ/dm9pZCAwOmQuaWQpIT09YSYmKGpFLmNhbmNlbEFuaW1hdGlvbkZyYW1lKGEpLGMuX3NjaGVkdWxlZD12b2lkIDApfX0pO2xldCBrSixWTXQ9MTtjb25zdCBq'@;
put 'UD17fTtmdW5jdGlvbiBZNWUobCl7cmV0dXJuIGwgaW4galAmJihkZWxldGUgalBbbF0sITApfWNvbnN0IEJNdD17c2V0SW1tZWRpYXRlKGwpe2NvbnN0IGM9Vk10Kys7cmV0dXJuIGpQW2NdPSEwLGtKfHwoa0o9UHJvbWlzZS5yZXNvbHZlKCkpLGtKLnRoZW4oKCk9Plk1ZShjKSYmbCgpKSxj'@;
put 'fSxjbGVhckltbWVkaWF0ZShsKXtZNWUobCl9fSx7c2V0SW1tZWRpYXRlOmpNdCxjbGVhckltbWVkaWF0ZTp6TXR9PUJNdCx6UD17c2V0SW1tZWRpYXRlKC4uLmwpe2NvbnN0e2RlbGVnYXRlOmN9PXpQO3JldHVybihjPy5zZXRJbW1lZGlhdGV8fGpNdCkoLi4ubCl9LGNsZWFySW1tZWRpYXRl'@;
put 'KGwpe2NvbnN0e2RlbGVnYXRlOmN9PXpQO3JldHVybihjPy5jbGVhckltbWVkaWF0ZXx8ek10KShsKX0sZGVsZWdhdGU6dm9pZCAwfTtuZXcgY2xhc3MgWk10IGV4dGVuZHMgT3p7Zmx1c2goYyl7dGhpcy5fYWN0aXZlPSEwO2NvbnN0IGE9dGhpcy5fc2NoZWR1bGVkO3RoaXMuX3NjaGVkdWxl'@;
put 'ZD12b2lkIDA7Y29uc3R7YWN0aW9uczpmfT10aGlzO2xldCBkO2M9Y3x8Zi5zaGlmdCgpO2Rve2lmKGQ9Yy5leGVjdXRlKGMuc3RhdGUsYy5kZWxheSkpYnJlYWt9d2hpbGUoKGM9ZlswXSkmJmMuaWQ9PT1hJiZmLnNoaWZ0KCkpO2lmKHRoaXMuX2FjdGl2ZT0hMSxkKXtmb3IoOyhjPWZbMF0p'@;
put 'JiZjLmlkPT09YSYmZi5zaGlmdCgpOyljLnVuc3Vic2NyaWJlKCk7dGhyb3cgZH19fShjbGFzcyBVTXQgZXh0ZW5kcyBBentjb25zdHJ1Y3RvcihjLGEpe3N1cGVyKGMsYSksdGhpcy5zY2hlZHVsZXI9Yyx0aGlzLndvcms9YX1yZXF1ZXN0QXN5bmNJZChjLGEsZj0wKXtyZXR1cm4gbnVsbCE9'@;
put 'PWYmJmY+MD9zdXBlci5yZXF1ZXN0QXN5bmNJZChjLGEsZik6KGMuYWN0aW9ucy5wdXNoKHRoaXMpLGMuX3NjaGVkdWxlZHx8KGMuX3NjaGVkdWxlZD16UC5zZXRJbW1lZGlhdGUoYy5mbHVzaC5iaW5kKGMsdm9pZCAwKSkpKX1yZWN5Y2xlQXN5bmNJZChjLGEsZj0wKXt2YXIgZDtpZihudWxs'@;
put 'IT1mP2Y+MDp0aGlzLmRlbGF5PjApcmV0dXJuIHN1cGVyLnJlY3ljbGVBc3luY0lkKGMsYSxmKTtjb25zdHthY3Rpb25zOmh9PWM7bnVsbCE9YSYmKG51bGw9PT0oZD1oW2gubGVuZ3RoLTFdKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5pZCkhPT1hJiYoelAuY2xlYXJJbW1lZGlhdGUoYSksYy5f'@;
put 'c2NoZWR1bGVkPT09YSYmKGMuX3NjaGVkdWxlZD12b2lkIDApKX19KTtmdW5jdGlvbiBXNWUobCxjPUJDKXtyZXR1cm4gZnVuY3Rpb24gV010KGwpe3JldHVybiBudCgoYyxhKT0+e2xldCBmPSExLGQ9bnVsbCxoPW51bGwsbT0hMTtjb25zdCBfPSgpPT57aWYoaD8udW5zdWJzY3JpYmUoKSxo'@;
put 'PW51bGwsZil7Zj0hMTtjb25zdCBYPWQ7ZD1udWxsLGEubmV4dChYKX1tJiZhLmNvbXBsZXRlKCl9LE89KCk9PntoPW51bGwsbSYmYS5jb21wbGV0ZSgpfTtjLnN1YnNjcmliZShxZShhLFg9PntmPSEwLGQ9WCxofHxKcihsKFgpKS5zdWJzY3JpYmUoaD1xZShhLF8sTykpfSwoKT0+e209ITAs'@;
put 'KCFmfHwhaHx8aC5jbG9zZWQpJiZhLmNvbXBsZXRlKCl9KSl9KX0oKCk9PkR6KGwsYykpfWxldCBFSjt0cnl7RUo9dHlwZW9mIEludGw8InUiJiZJbnRsLnY4QnJlYWtJdGVyYXRvcn1jYXRjaHtFSj0hMX1sZXQgekUseEosRzVlPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSl7dGhpcy5f'@;
put 'cGxhdGZvcm1JZD1hLHRoaXMuaXNCcm93c2VyPXRoaXMuX3BsYXRmb3JtSWQ/SGEodGhpcy5fcGxhdGZvcm1JZCk6Im9iamVjdCI9PXR5cGVvZiBkb2N1bWVudCYmISFkb2N1bWVudCx0aGlzLkVER0U9dGhpcy5pc0Jyb3dzZXImJi8oZWRnZSkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQp'@;
put 'LHRoaXMuVFJJREVOVD10aGlzLmlzQnJvd3NlciYmLyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLkJMSU5LPXRoaXMuaXNCcm93c2VyJiYhKCF3aW5kb3cuY2hyb21lJiYhRUopJiZ0eXBlb2YgQ1NTPCJ1IiYmIXRoaXMuRURHRSYmIXRoaXMuVFJJREVO'@;
put 'VCx0aGlzLldFQktJVD10aGlzLmlzQnJvd3NlciYmL0FwcGxlV2ViS2l0L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXRoaXMuQkxJTksmJiF0aGlzLkVER0UmJiF0aGlzLlRSSURFTlQsdGhpcy5JT1M9dGhpcy5pc0Jyb3dzZXImJi9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmln'@;
put 'YXRvci51c2VyQWdlbnQpJiYhKCJNU1N0cmVhbSJpbiB3aW5kb3cpLHRoaXMuRklSRUZPWD10aGlzLmlzQnJvd3NlciYmLyhmaXJlZm94fG1pbmVmaWVsZCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHRoaXMuQU5EUk9JRD10aGlzLmlzQnJvd3NlciYmL2FuZHJvaWQvaS50ZXN0KG5h'@;
put 'dmlnYXRvci51c2VyQWdlbnQpJiYhdGhpcy5UUklERU5ULHRoaXMuU0FGQVJJPXRoaXMuaXNCcm93c2VyJiYvc2FmYXJpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmdGhpcy5XRUJLSVR9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHNyKHFh'@;
put 'KSl9LGwuXHUwMjc1cHJvdj1ocih7dG9rZW46bCxmYWN0b3J5OmwuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbH0pKCk7ZnVuY3Rpb24gVUUobCl7cmV0dXJuIGZ1bmN0aW9uIEdNdCgpe2lmKG51bGw9PXpFJiZ0eXBlb2Ygd2luZG93PCJ1Iil0cnl7d2luZG93LmFkZEV2ZW50TGlz'@;
put 'dGVuZXIoInRlc3QiLG51bGwsT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJwYXNzaXZlIix7Z2V0OigpPT56RT0hMH0pKX1maW5hbGx5e3pFPXpFfHwhMX1yZXR1cm4gekV9KCk/bDohIWwuY2FwdHVyZX1mdW5jdGlvbiBLNWUobCl7aWYoZnVuY3Rpb24gJE10KCl7aWYobnVsbD09eEope2Nv'@;
put 'bnN0IGw9dHlwZW9mIGRvY3VtZW50PCJ1Ij9kb2N1bWVudC5oZWFkOm51bGw7eEo9ISghbHx8IWwuY3JlYXRlU2hhZG93Um9vdCYmIWwuYXR0YWNoU2hhZG93KX1yZXR1cm4geEp9KCkpe2NvbnN0IGM9bC5nZXRSb290Tm9kZT9sLmdldFJvb3ROb2RlKCk6bnVsbDtpZih0eXBlb2YgU2hhZG93'@;
put 'Um9vdDwidSImJlNoYWRvd1Jvb3QmJmMgaW5zdGFuY2VvZiBTaGFkb3dSb290KXJldHVybiBjfXJldHVybiBudWxsfWZ1bmN0aW9uIFpQKGwpe3JldHVybiBsLmNvbXBvc2VkUGF0aD9sLmNvbXBvc2VkUGF0aCgpWzBdOmwudGFyZ2V0fWxldCBxTXQ9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3Rv'@;
put 'cihhLGYsZCl7dGhpcy5fbmdab25lPWEsdGhpcy5fcGxhdGZvcm09Zix0aGlzLl9zY3JvbGxlZD1uZXcgd2UsdGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fc2Nyb2xsZWRDb3VudD0wLHRoaXMuc2Nyb2xsQ29udGFpbmVycz1uZXcgTWFwLHRoaXMuX2RvY3VtZW50PWR9cmVn'@;
put 'aXN0ZXIoYSl7dGhpcy5zY3JvbGxDb250YWluZXJzLmhhcyhhKXx8dGhpcy5zY3JvbGxDb250YWluZXJzLnNldChhLGEuZWxlbWVudFNjcm9sbGVkKCkuc3Vic2NyaWJlKCgpPT50aGlzLl9zY3JvbGxlZC5uZXh0KGEpKSl9ZGVyZWdpc3RlcihhKXtjb25zdCBmPXRoaXMuc2Nyb2xsQ29udGFp'@;
put 'bmVycy5nZXQoYSk7ZiYmKGYudW5zdWJzY3JpYmUoKSx0aGlzLnNjcm9sbENvbnRhaW5lcnMuZGVsZXRlKGEpKX1zY3JvbGxlZChhPTIwKXtyZXR1cm4gdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyP25ldyBCZShmPT57dGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9ufHx0aGlzLl9hZGRHbG9iYWxM'@;
put 'aXN0ZW5lcigpO2NvbnN0IGQ9YT4wP3RoaXMuX3Njcm9sbGVkLnBpcGUoVzVlKGEpKS5zdWJzY3JpYmUoZik6dGhpcy5fc2Nyb2xsZWQuc3Vic2NyaWJlKGYpO3JldHVybiB0aGlzLl9zY3JvbGxlZENvdW50KyssKCk9PntkLnVuc3Vic2NyaWJlKCksdGhpcy5fc2Nyb2xsZWRDb3VudC0tLHRo'@;
put 'aXMuX3Njcm9sbGVkQ291bnR8fHRoaXMuX3JlbW92ZUdsb2JhbExpc3RlbmVyKCl9fSk6R2koKX1uZ09uRGVzdHJveSgpe3RoaXMuX3JlbW92ZUdsb2JhbExpc3RlbmVyKCksdGhpcy5zY3JvbGxDb250YWluZXJzLmZvckVhY2goKGEsZik9PnRoaXMuZGVyZWdpc3RlcihmKSksdGhpcy5fc2Ny'@;
put 'b2xsZWQuY29tcGxldGUoKX1hbmNlc3RvclNjcm9sbGVkKGEsZil7Y29uc3QgZD10aGlzLmdldEFuY2VzdG9yU2Nyb2xsQ29udGFpbmVycyhhKTtyZXR1cm4gdGhpcy5zY3JvbGxlZChmKS5waXBlKElsKGg9PiFofHxkLmluZGV4T2YoaCk+LTEpKX1nZXRBbmNlc3RvclNjcm9sbENvbnRhaW5l'@;
put 'cnMoYSl7Y29uc3QgZj1bXTtyZXR1cm4gdGhpcy5zY3JvbGxDb250YWluZXJzLmZvckVhY2goKGQsaCk9Pnt0aGlzLl9zY3JvbGxhYmxlQ29udGFpbnNFbGVtZW50KGgsYSkmJmYucHVzaChoKX0pLGZ9X2dldFdpbmRvdygpe3JldHVybiB0aGlzLl9kb2N1bWVudC5kZWZhdWx0Vmlld3x8d2lu'@;
put 'ZG93fV9zY3JvbGxhYmxlQ29udGFpbnNFbGVtZW50KGEsZil7bGV0IGQ9JDAoZiksaD1hLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50O2Rve2lmKGQ9PWgpcmV0dXJuITB9d2hpbGUoZD1kLnBhcmVudEVsZW1lbnQpO3JldHVybiExfV9hZGRHbG9iYWxMaXN0ZW5lcigpe3RoaXMuX2ds'@;
put 'b2JhbFN1YnNjcmlwdGlvbj10aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PndkKHRoaXMuX2dldFdpbmRvdygpLmRvY3VtZW50LCJzY3JvbGwiKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3Njcm9sbGVkLm5leHQoKSkpfV9yZW1vdmVHbG9iYWxMaXN0ZW5lcigpe3RoaXMuX2dsb2Jh'@;
put 'bFN1YnNjcmlwdGlvbiYmKHRoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbj1udWxsKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkoc3IoVW8pLHNyKEc1ZSksc3IoRmEsOCkpfSxsLlx1'@;
put 'MDI3NXByb3Y9aHIoe3Rva2VuOmwsZmFjdG9yeTpsLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGx9KSgpLEpNdD0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEsZixkKXt0aGlzLl9wbGF0Zm9ybT1hLHRoaXMuX2NoYW5nZT1uZXcgd2UsdGhpcy5fY2hhbmdlTGlzdGVuZXI9aD0+'@;
put 'e3RoaXMuX2NoYW5nZS5uZXh0KGgpfSx0aGlzLl9kb2N1bWVudD1kLGYucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntpZihhLmlzQnJvd3Nlcil7Y29uc3QgaD10aGlzLl9nZXRXaW5kb3coKTtoLmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5fY2hhbmdlTGlzdGVuZXIpLGguYWRkRXZl'@;
put 'bnRMaXN0ZW5lcigib3JpZW50YXRpb25jaGFuZ2UiLHRoaXMuX2NoYW5nZUxpc3RlbmVyKX10aGlzLmNoYW5nZSgpLnN1YnNjcmliZSgoKT0+dGhpcy5fdmlld3BvcnRTaXplPW51bGwpfSl9bmdPbkRlc3Ryb3koKXtpZih0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpe2NvbnN0IGE9dGhpcy5f'@;
put 'Z2V0V2luZG93KCk7YS5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMuX2NoYW5nZUxpc3RlbmVyKSxhLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm9yaWVudGF0aW9uY2hhbmdlIix0aGlzLl9jaGFuZ2VMaXN0ZW5lcil9dGhpcy5fY2hhbmdlLmNvbXBsZXRlKCl9Z2V0Vmlld3BvcnRT'@;
put 'aXplKCl7dGhpcy5fdmlld3BvcnRTaXplfHx0aGlzLl91cGRhdGVWaWV3cG9ydFNpemUoKTtjb25zdCBhPXt3aWR0aDp0aGlzLl92aWV3cG9ydFNpemUud2lkdGgsaGVpZ2h0OnRoaXMuX3ZpZXdwb3J0U2l6ZS5oZWlnaHR9O3JldHVybiB0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXJ8fCh0aGlz'@;
put 'Ll92aWV3cG9ydFNpemU9bnVsbCksYX1nZXRWaWV3cG9ydFJlY3QoKXtjb25zdCBhPXRoaXMuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpLHt3aWR0aDpmLGhlaWdodDpkfT10aGlzLmdldFZpZXdwb3J0U2l6ZSgpO3JldHVybnt0b3A6YS50b3AsbGVmdDphLmxlZnQsYm90dG9tOmEudG9w'@;
put 'K2QscmlnaHQ6YS5sZWZ0K2YsaGVpZ2h0OmQsd2lkdGg6Zn19Z2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpe2lmKCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJue3RvcDowLGxlZnQ6MH07Y29uc3QgYT10aGlzLl9kb2N1bWVudCxmPXRoaXMuX2dldFdpbmRvdygpLGQ9YS5kb2N1'@;
put 'bWVudEVsZW1lbnQsaD1kLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt0b3A6LWgudG9wfHxhLmJvZHkuc2Nyb2xsVG9wfHxmLnNjcm9sbFl8fGQuc2Nyb2xsVG9wfHwwLGxlZnQ6LWgubGVmdHx8YS5ib2R5LnNjcm9sbExlZnR8fGYuc2Nyb2xsWHx8ZC5zY3JvbGxMZWZ0fHwwfX1j'@;
put 'aGFuZ2UoYT0yMCl7cmV0dXJuIGE+MD90aGlzLl9jaGFuZ2UucGlwZShXNWUoYSkpOnRoaXMuX2NoYW5nZX1fZ2V0V2luZG93KCl7cmV0dXJuIHRoaXMuX2RvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3d9X3VwZGF0ZVZpZXdwb3J0U2l6ZSgpe2NvbnN0IGE9dGhpcy5fZ2V0V2luZG93KCk7'@;
put 'dGhpcy5fdmlld3BvcnRTaXplPXRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcj97d2lkdGg6YS5pbm5lcldpZHRoLGhlaWdodDphLmlubmVySGVpZ2h0fTp7d2lkdGg6MCxoZWlnaHQ6MH19fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHNyKEc1ZSksc3Io'@;
put 'VW8pLHNyKEZhLDgpKX0sbC5cdTAyNzVwcm92PWhyKHt0b2tlbjpsLGZhY3Rvcnk6bC5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxsfSkoKSxRTXQ9KCgpPT57Y2xhc3MgbHt9cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1bW9k'@;
put 'PURpKHt0eXBlOmx9KSxsLlx1MDI3NWluaj14aSh7fSksbH0pKCk7Y29uc3QgZ2t0PW5ldyBNaSgiY2RrLWRpci1kb2MiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uIHZrdCgpe3JldHVybiBIaShGYSl9fSkseWt0PS9eKGFyfGNrYnxkdnxoZXxpd3xmYXxucW98cHN8c2R8'@;
put 'dWd8dXJ8eWl8LipbLV9dKEFkbG18QXJhYnxIZWJyfE5rb298Um9oZ3xUaGFhKSkoPyEuKlstX10oTGF0bnxDeXJsKSgkfC18XykpKCR8LXxfKS9pO2xldCBRNWU9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhKXt0aGlzLnZhbHVlPSJsdHIiLHRoaXMuY2hhbmdlPW5ldyB4cixhJiYodGhp'@;
put 'cy52YWx1ZT1mdW5jdGlvbiBia3QobCl7Y29uc3QgYz1sPy50b0xvd2VyQ2FzZSgpfHwiIjtyZXR1cm4iYXV0byI9PT1jJiZ0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yPy5sYW5ndWFnZT95a3QudGVzdChuYXZpZ2F0b3IubGFuZ3VhZ2UpPyJydGwiOiJsdHIiOiJydGwiPT09Yz8i'@;
put 'cnRsIjoibHRyIn0oKGEuYm9keT9hLmJvZHkuZGlyOm51bGwpfHwoYS5kb2N1bWVudEVsZW1lbnQ/YS5kb2N1bWVudEVsZW1lbnQuZGlyOm51bGwpfHwibHRyIikpfW5nT25EZXN0cm95KCl7dGhpcy5jaGFuZ2UuY29tcGxldGUoKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3Jl'@;
put 'dHVybiBuZXcoYXx8bCkoc3IoZ2t0LDgpKX0sbC5cdTAyNzVwcm92PWhyKHt0b2tlbjpsLGZhY3Rvcnk6bC5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxsfSkoKTtmdW5jdGlvbiBBSihsLGMsYSl7Zm9yKGxldCBmIGluIGMpaWYoYy5oYXNPd25Qcm9wZXJ0eShmKSl7Y29uc3QgZD1j'@;
put 'W2ZdO2Q/bC5zZXRQcm9wZXJ0eShmLGQsYT8uaGFzKGYpPyJpbXBvcnRhbnQiOiIiKTpsLnJlbW92ZVByb3BlcnR5KGYpfXJldHVybiBsfWZ1bmN0aW9uIHhiKGwsYyl7Y29uc3QgYT1jPyIiOiJub25lIjtBSihsLnN0eWxlLHsidG91Y2gtYWN0aW9uIjpjPyIiOiJub25lIiwiLXdlYmtpdC11'@;
put 'c2VyLWRyYWciOmM/IiI6Im5vbmUiLCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiOmM/IiI6InRyYW5zcGFyZW50IiwidXNlci1zZWxlY3QiOmEsIi1tcy11c2VyLXNlbGVjdCI6YSwiLXdlYmtpdC11c2VyLXNlbGVjdCI6YSwiLW1vei11c2VyLXNlbGVjdCI6YX0pfWZ1bmN0aW9uIGU2'@;
put 'ZShsLGMsYSl7QUoobC5zdHlsZSx7cG9zaXRpb246Yz8iIjoiZml4ZWQiLHRvcDpjPyIiOiIwIixvcGFjaXR5OmM/IiI6IjAiLGxlZnQ6Yz8iIjoiLTk5OWVtIn0sYSl9ZnVuY3Rpb24gWVAobCxjKXtyZXR1cm4gYyYmIm5vbmUiIT1jP2wrIiAiK2M6bH1mdW5jdGlvbiB0NmUobCl7Y29uc3Qg'@;
put 'Yz1sLnRvTG93ZXJDYXNlKCkuaW5kZXhPZigibXMiKT4tMT8xOjFlMztyZXR1cm4gcGFyc2VGbG9hdChsKSpjfWZ1bmN0aW9uIFRKKGwsYyl7cmV0dXJuIGwuZ2V0UHJvcGVydHlWYWx1ZShjKS5zcGxpdCgiLCIpLm1hcChmPT5mLnRyaW0oKSl9ZnVuY3Rpb24gT0oobCl7Y29uc3QgYz1sLmdl'@;
put 'dEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt0b3A6Yy50b3AscmlnaHQ6Yy5yaWdodCxib3R0b206Yy5ib3R0b20sbGVmdDpjLmxlZnQsd2lkdGg6Yy53aWR0aCxoZWlnaHQ6Yy5oZWlnaHQseDpjLngseTpjLnl9fWZ1bmN0aW9uIERKKGwsYyxhKXtjb25zdHt0b3A6Zixib3R0b206ZCxs'@;
put 'ZWZ0OmgscmlnaHQ6bX09bDtyZXR1cm4gYT49ZiYmYTw9ZCYmYz49aCYmYzw9bX1mdW5jdGlvbiBaRShsLGMsYSl7bC50b3ArPWMsbC5ib3R0b209bC50b3ArbC5oZWlnaHQsbC5sZWZ0Kz1hLGwucmlnaHQ9bC5sZWZ0K2wud2lkdGh9ZnVuY3Rpb24gbjZlKGwsYyxhLGYpe2NvbnN0e3RvcDpk'@;
put 'LHJpZ2h0OmgsYm90dG9tOm0sbGVmdDpfLHdpZHRoOk8saGVpZ2h0Olh9PWwsYWU9TypjLHBlPVgqYztyZXR1cm4gZj5kLXBlJiZmPG0rcGUmJmE+Xy1hZSYmYTxoK2FlfWNsYXNzIHI2ZXtjb25zdHJ1Y3RvcihjKXt0aGlzLl9kb2N1bWVudD1jLHRoaXMucG9zaXRpb25zPW5ldyBNYXB9Y2xl'@;
put 'YXIoKXt0aGlzLnBvc2l0aW9ucy5jbGVhcigpfWNhY2hlKGMpe3RoaXMuY2xlYXIoKSx0aGlzLnBvc2l0aW9ucy5zZXQodGhpcy5fZG9jdW1lbnQse3Njcm9sbFBvc2l0aW9uOnRoaXMuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpfSksYy5mb3JFYWNoKGE9Pnt0aGlzLnBvc2l0aW9ucy5z'@;
put 'ZXQoYSx7c2Nyb2xsUG9zaXRpb246e3RvcDphLnNjcm9sbFRvcCxsZWZ0OmEuc2Nyb2xsTGVmdH0sY2xpZW50UmVjdDpPSihhKX0pfSl9aGFuZGxlU2Nyb2xsKGMpe2NvbnN0IGE9WlAoYyksZj10aGlzLnBvc2l0aW9ucy5nZXQoYSk7aWYoIWYpcmV0dXJuIG51bGw7Y29uc3QgZD1mLnNjcm9s'@;
put 'bFBvc2l0aW9uO2xldCBoLG07aWYoYT09PXRoaXMuX2RvY3VtZW50KXtjb25zdCBYPXRoaXMuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpO2g9WC50b3AsbT1YLmxlZnR9ZWxzZSBoPWEuc2Nyb2xsVG9wLG09YS5zY3JvbGxMZWZ0O2NvbnN0IF89ZC50b3AtaCxPPWQubGVmdC1tO3JldHVy'@;
put 'biB0aGlzLnBvc2l0aW9ucy5mb3JFYWNoKChYLGFlKT0+e1guY2xpZW50UmVjdCYmYSE9PWFlJiZhLmNvbnRhaW5zKGFlKSYmWkUoWC5jbGllbnRSZWN0LF8sTyl9KSxkLnRvcD1oLGQubGVmdD1tLHt0b3A6XyxsZWZ0Ok99fWdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKXtyZXR1cm57dG9w'@;
put 'OndpbmRvdy5zY3JvbGxZLGxlZnQ6d2luZG93LnNjcm9sbFh9fX1mdW5jdGlvbiBpNmUobCl7Y29uc3QgYz1sLmNsb25lTm9kZSghMCksYT1jLnF1ZXJ5U2VsZWN0b3JBbGwoIltpZF0iKSxmPWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtjLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKTtmb3IobGV0'@;
put 'IGQ9MDtkPGEubGVuZ3RoO2QrKylhW2RdLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKTtyZXR1cm4iY2FudmFzIj09PWY/bDZlKGwsYyk6KCJpbnB1dCI9PT1mfHwic2VsZWN0Ij09PWZ8fCJ0ZXh0YXJlYSI9PT1mKSYmYTZlKGwsYyksbzZlKCJjYW52YXMiLGwsYyxsNmUpLG82ZSgiaW5wdXQsIHRl'@;
put 'eHRhcmVhLCBzZWxlY3QiLGwsYyxhNmUpLGN9ZnVuY3Rpb24gbzZlKGwsYyxhLGYpe2NvbnN0IGQ9Yy5xdWVyeVNlbGVjdG9yQWxsKGwpO2lmKGQubGVuZ3RoKXtjb25zdCBoPWEucXVlcnlTZWxlY3RvckFsbChsKTtmb3IobGV0IG09MDttPGQubGVuZ3RoO20rKylmKGRbbV0saFttXSl9fWxl'@;
put 'dCB3a3Q9MDtmdW5jdGlvbiBhNmUobCxjKXsiZmlsZSIhPT1jLnR5cGUmJihjLnZhbHVlPWwudmFsdWUpLCJyYWRpbyI9PT1jLnR5cGUmJmMubmFtZSYmKGMubmFtZT1gbWF0LWNsb25lLSR7Yy5uYW1lfS0ke3drdCsrfWApfWZ1bmN0aW9uIGw2ZShsLGMpe2NvbnN0IGE9Yy5nZXRDb250ZXh0'@;
put 'KCIyZCIpO2lmKGEpdHJ5e2EuZHJhd0ltYWdlKGwsMCwwKX1jYXRjaHt9fWNvbnN0IHM2ZT1VRSh7cGFzc2l2ZTohMH0pLFdQPVVFKHtwYXNzaXZlOiExfSksSUo9bmV3IFNldChbInBvc2l0aW9uIl0pO2NsYXNzIFNrdHtnZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR8fCEo'@;
put 'IXRoaXMuX2Ryb3BDb250YWluZXJ8fCF0aGlzLl9kcm9wQ29udGFpbmVyLmRpc2FibGVkKX1zZXQgZGlzYWJsZWQoYyl7Y29uc3QgYT1hbShjKTthIT09dGhpcy5fZGlzYWJsZWQmJih0aGlzLl9kaXNhYmxlZD1hLHRoaXMuX3RvZ2dsZU5hdGl2ZURyYWdJbnRlcmFjdGlvbnMoKSx0aGlzLl9o'@;
put 'YW5kbGVzLmZvckVhY2goZj0+eGIoZixhKSkpfWNvbnN0cnVjdG9yKGMsYSxmLGQsaCxtKXt0aGlzLl9jb25maWc9YSx0aGlzLl9kb2N1bWVudD1mLHRoaXMuX25nWm9uZT1kLHRoaXMuX3ZpZXdwb3J0UnVsZXI9aCx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5PW0sdGhpcy5fcGFzc2l2ZVRyYW5z'@;
put 'Zm9ybT17eDowLHk6MH0sdGhpcy5fYWN0aXZlVHJhbnNmb3JtPXt4OjAseTowfSx0aGlzLl9oYXNTdGFydGVkRHJhZ2dpbmc9ITEsdGhpcy5fbW92ZUV2ZW50cz1uZXcgd2UsdGhpcy5fcG9pbnRlck1vdmVTdWJzY3JpcHRpb249dGUuRU1QVFksdGhpcy5fcG9pbnRlclVwU3Vic2NyaXB0aW9u'@;
put 'PXRlLkVNUFRZLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj10ZS5FTVBUWSx0aGlzLl9yZXNpemVTdWJzY3JpcHRpb249dGUuRU1QVFksdGhpcy5fYm91bmRhcnlFbGVtZW50PW51bGwsdGhpcy5fbmF0aXZlSW50ZXJhY3Rpb25zRW5hYmxlZD0hMCx0aGlzLl9oYW5kbGVzPVtdLHRoaXMuX2Rp'@;
put 'c2FibGVkSGFuZGxlcz1uZXcgU2V0LHRoaXMuX2RpcmVjdGlvbj0ibHRyIix0aGlzLmRyYWdTdGFydERlbGF5PTAsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5iZWZvcmVTdGFydGVkPW5ldyB3ZSx0aGlzLnN0YXJ0ZWQ9bmV3IHdlLHRoaXMucmVsZWFzZWQ9bmV3IHdlLHRoaXMuZW5kZWQ9bmV3'@;
put 'IHdlLHRoaXMuZW50ZXJlZD1uZXcgd2UsdGhpcy5leGl0ZWQ9bmV3IHdlLHRoaXMuZHJvcHBlZD1uZXcgd2UsdGhpcy5tb3ZlZD10aGlzLl9tb3ZlRXZlbnRzLHRoaXMuX3BvaW50ZXJEb3duPV89PntpZih0aGlzLmJlZm9yZVN0YXJ0ZWQubmV4dCgpLHRoaXMuX2hhbmRsZXMubGVuZ3RoKXtj'@;
put 'b25zdCBPPXRoaXMuX2dldFRhcmdldEhhbmRsZShfKTtPJiYhdGhpcy5fZGlzYWJsZWRIYW5kbGVzLmhhcyhPKSYmIXRoaXMuZGlzYWJsZWQmJnRoaXMuX2luaXRpYWxpemVEcmFnU2VxdWVuY2UoTyxfKX1lbHNlIHRoaXMuZGlzYWJsZWR8fHRoaXMuX2luaXRpYWxpemVEcmFnU2VxdWVuY2Uo'@;
put 'dGhpcy5fcm9vdEVsZW1lbnQsXyl9LHRoaXMuX3BvaW50ZXJNb3ZlPV89Pntjb25zdCBPPXRoaXMuX2dldFBvaW50ZXJQb3NpdGlvbk9uUGFnZShfKTtpZighdGhpcy5faGFzU3RhcnRlZERyYWdnaW5nKXtpZihNYXRoLmFicyhPLngtdGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueCkrTWF0'@;
put 'aC5hYnMoTy55LXRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLnkpPj10aGlzLl9jb25maWcuZHJhZ1N0YXJ0VGhyZXNob2xkKXtjb25zdCB4ZT1EYXRlLm5vdygpPj10aGlzLl9kcmFnU3RhcnRUaW1lK3RoaXMuX2dldERyYWdTdGFydERlbGF5KF8pLFZlPXRoaXMuX2Ryb3BDb250YWluZXI7'@;
put 'aWYoIXhlKXJldHVybiB2b2lkIHRoaXMuX2VuZERyYWdTZXF1ZW5jZShfKTsoIVZlfHwhVmUuaXNEcmFnZ2luZygpJiYhVmUuaXNSZWNlaXZpbmcoKSkmJihfLnByZXZlbnREZWZhdWx0KCksdGhpcy5faGFzU3RhcnRlZERyYWdnaW5nPSEwLHRoaXMuX25nWm9uZS5ydW4oKCk9PnRoaXMuX3N0'@;
put 'YXJ0RHJhZ1NlcXVlbmNlKF8pKSl9cmV0dXJufV8ucHJldmVudERlZmF1bHQoKTtjb25zdCBYPXRoaXMuX2dldENvbnN0cmFpbmVkUG9pbnRlclBvc2l0aW9uKE8pO2lmKHRoaXMuX2hhc01vdmVkPSEwLHRoaXMuX2xhc3RLbm93blBvaW50ZXJQb3NpdGlvbj1PLHRoaXMuX3VwZGF0ZVBvaW50'@;
put 'ZXJEaXJlY3Rpb25EZWx0YShYKSx0aGlzLl9kcm9wQ29udGFpbmVyKXRoaXMuX3VwZGF0ZUFjdGl2ZURyb3BDb250YWluZXIoWCxPKTtlbHNle2NvbnN0IGFlPXRoaXMuY29uc3RyYWluUG9zaXRpb24/dGhpcy5faW5pdGlhbENsaWVudFJlY3Q6dGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2Us'@;
put 'cGU9dGhpcy5fYWN0aXZlVHJhbnNmb3JtO3BlLng9WC54LWFlLngrdGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS54LHBlLnk9WC55LWFlLnkrdGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS55LHRoaXMuX2FwcGx5Um9vdEVsZW1lbnRUcmFuc2Zvcm0ocGUueCxwZS55KX10aGlzLl9tb3ZlRXZlbnRzLm9i'@;
put 'c2VydmVycy5sZW5ndGgmJnRoaXMuX25nWm9uZS5ydW4oKCk9Pnt0aGlzLl9tb3ZlRXZlbnRzLm5leHQoe3NvdXJjZTp0aGlzLHBvaW50ZXJQb3NpdGlvbjpYLGV2ZW50Ol8sZGlzdGFuY2U6dGhpcy5fZ2V0RHJhZ0Rpc3RhbmNlKFgpLGRlbHRhOnRoaXMuX3BvaW50ZXJEaXJlY3Rpb25EZWx0'@;
put 'YX0pfSl9LHRoaXMuX3BvaW50ZXJVcD1fPT57dGhpcy5fZW5kRHJhZ1NlcXVlbmNlKF8pfSx0aGlzLl9uYXRpdmVEcmFnU3RhcnQ9Xz0+e2lmKHRoaXMuX2hhbmRsZXMubGVuZ3RoKXtjb25zdCBPPXRoaXMuX2dldFRhcmdldEhhbmRsZShfKTtPJiYhdGhpcy5fZGlzYWJsZWRIYW5kbGVzLmhh'@;
put 'cyhPKSYmIXRoaXMuZGlzYWJsZWQmJl8ucHJldmVudERlZmF1bHQoKX1lbHNlIHRoaXMuZGlzYWJsZWR8fF8ucHJldmVudERlZmF1bHQoKX0sdGhpcy53aXRoUm9vdEVsZW1lbnQoYykud2l0aFBhcmVudChhLnBhcmVudERyYWdSZWZ8fG51bGwpLHRoaXMuX3BhcmVudFBvc2l0aW9ucz1uZXcg'@;
put 'cjZlKGYpLG0ucmVnaXN0ZXJEcmFnSXRlbSh0aGlzKX1nZXRQbGFjZWhvbGRlckVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXJ9Z2V0Um9vdEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fcm9vdEVsZW1lbnR9Z2V0VmlzaWJsZUVsZW1lbnQoKXtyZXR1cm4gdGhpcy5pc0RyYWdnaW5n'@;
put 'KCk/dGhpcy5nZXRQbGFjZWhvbGRlckVsZW1lbnQoKTp0aGlzLmdldFJvb3RFbGVtZW50KCl9d2l0aEhhbmRsZXMoYyl7dGhpcy5faGFuZGxlcz1jLm1hcChmPT4kMChmKSksdGhpcy5faGFuZGxlcy5mb3JFYWNoKGY9PnhiKGYsdGhpcy5kaXNhYmxlZCkpLHRoaXMuX3RvZ2dsZU5hdGl2ZURy'@;
put 'YWdJbnRlcmFjdGlvbnMoKTtjb25zdCBhPW5ldyBTZXQ7cmV0dXJuIHRoaXMuX2Rpc2FibGVkSGFuZGxlcy5mb3JFYWNoKGY9Pnt0aGlzLl9oYW5kbGVzLmluZGV4T2YoZik+LTEmJmEuYWRkKGYpfSksdGhpcy5fZGlzYWJsZWRIYW5kbGVzPWEsdGhpc313aXRoUHJldmlld1RlbXBsYXRlKGMp'@;
put 'e3JldHVybiB0aGlzLl9wcmV2aWV3VGVtcGxhdGU9Yyx0aGlzfXdpdGhQbGFjZWhvbGRlclRlbXBsYXRlKGMpe3JldHVybiB0aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlPWMsdGhpc313aXRoUm9vdEVsZW1lbnQoYyl7Y29uc3QgYT0kMChjKTtyZXR1cm4gYSE9PXRoaXMuX3Jvb3RFbGVtZW50'@;
put 'JiYodGhpcy5fcm9vdEVsZW1lbnQmJnRoaXMuX3JlbW92ZVJvb3RFbGVtZW50TGlzdGVuZXJzKHRoaXMuX3Jvb3RFbGVtZW50KSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PnthLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5fcG9pbnRlckRvd24sV1ApLGEu'@;
put 'YWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5fcG9pbnRlckRvd24sczZlKSxhLmFkZEV2ZW50TGlzdGVuZXIoImRyYWdzdGFydCIsdGhpcy5fbmF0aXZlRHJhZ1N0YXJ0LFdQKX0pLHRoaXMuX2luaXRpYWxUcmFuc2Zvcm09dm9pZCAwLHRoaXMuX3Jvb3RFbGVtZW50PWEpLHR5'@;
put 'cGVvZiBTVkdFbGVtZW50PCJ1IiYmdGhpcy5fcm9vdEVsZW1lbnQgaW5zdGFuY2VvZiBTVkdFbGVtZW50JiYodGhpcy5fb3duZXJTVkdFbGVtZW50PXRoaXMuX3Jvb3RFbGVtZW50Lm93bmVyU1ZHRWxlbWVudCksdGhpc313aXRoQm91bmRhcnlFbGVtZW50KGMpe3JldHVybiB0aGlzLl9ib3Vu'@;
put 'ZGFyeUVsZW1lbnQ9Yz8kMChjKTpudWxsLHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLGMmJih0aGlzLl9yZXNpemVTdWJzY3JpcHRpb249dGhpcy5fdmlld3BvcnRSdWxlci5jaGFuZ2UoMTApLnN1YnNjcmliZSgoKT0+dGhpcy5fY29udGFpbkluc2lkZUJvdW5kYXJ5'@;
put 'T25SZXNpemUoKSkpLHRoaXN9d2l0aFBhcmVudChjKXtyZXR1cm4gdGhpcy5fcGFyZW50RHJhZ1JlZj1jLHRoaXN9ZGlzcG9zZSgpe3RoaXMuX3JlbW92ZVJvb3RFbGVtZW50TGlzdGVuZXJzKHRoaXMuX3Jvb3RFbGVtZW50KSx0aGlzLmlzRHJhZ2dpbmcoKSYmdGhpcy5fcm9vdEVsZW1lbnQ/'@;
put 'LnJlbW92ZSgpLHRoaXMuX2FuY2hvcj8ucmVtb3ZlKCksdGhpcy5fZGVzdHJveVByZXZpZXcoKSx0aGlzLl9kZXN0cm95UGxhY2Vob2xkZXIoKSx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnJlbW92ZURyYWdJdGVtKHRoaXMpLHRoaXMuX3JlbW92ZVN1YnNjcmlwdGlvbnMoKSx0aGlzLmJlZm9y'@;
put 'ZVN0YXJ0ZWQuY29tcGxldGUoKSx0aGlzLnN0YXJ0ZWQuY29tcGxldGUoKSx0aGlzLnJlbGVhc2VkLmNvbXBsZXRlKCksdGhpcy5lbmRlZC5jb21wbGV0ZSgpLHRoaXMuZW50ZXJlZC5jb21wbGV0ZSgpLHRoaXMuZXhpdGVkLmNvbXBsZXRlKCksdGhpcy5kcm9wcGVkLmNvbXBsZXRlKCksdGhp'@;
put 'cy5fbW92ZUV2ZW50cy5jb21wbGV0ZSgpLHRoaXMuX2hhbmRsZXM9W10sdGhpcy5fZGlzYWJsZWRIYW5kbGVzLmNsZWFyKCksdGhpcy5fZHJvcENvbnRhaW5lcj12b2lkIDAsdGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fcGFyZW50UG9zaXRpb25zLmNsZWFy'@;
put 'KCksdGhpcy5fYm91bmRhcnlFbGVtZW50PXRoaXMuX3Jvb3RFbGVtZW50PXRoaXMuX293bmVyU1ZHRWxlbWVudD10aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlPXRoaXMuX3ByZXZpZXdUZW1wbGF0ZT10aGlzLl9hbmNob3I9dGhpcy5fcGFyZW50RHJhZ1JlZj1udWxsfWlzRHJhZ2dpbmcoKXty'@;
put 'ZXR1cm4gdGhpcy5faGFzU3RhcnRlZERyYWdnaW5nJiZ0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LmlzRHJhZ2dpbmcodGhpcyl9cmVzZXQoKXt0aGlzLl9yb290RWxlbWVudC5zdHlsZS50cmFuc2Zvcm09dGhpcy5faW5pdGlhbFRyYW5zZm9ybXx8IiIsdGhpcy5fYWN0aXZlVHJhbnNmb3JtPXt4'@;
put 'OjAseTowfSx0aGlzLl9wYXNzaXZlVHJhbnNmb3JtPXt4OjAseTowfX1kaXNhYmxlSGFuZGxlKGMpeyF0aGlzLl9kaXNhYmxlZEhhbmRsZXMuaGFzKGMpJiZ0aGlzLl9oYW5kbGVzLmluZGV4T2YoYyk+LTEmJih0aGlzLl9kaXNhYmxlZEhhbmRsZXMuYWRkKGMpLHhiKGMsITApKX1lbmFibGVI'@;
put 'YW5kbGUoYyl7dGhpcy5fZGlzYWJsZWRIYW5kbGVzLmhhcyhjKSYmKHRoaXMuX2Rpc2FibGVkSGFuZGxlcy5kZWxldGUoYykseGIoYyx0aGlzLmRpc2FibGVkKSl9d2l0aERpcmVjdGlvbihjKXtyZXR1cm4gdGhpcy5fZGlyZWN0aW9uPWMsdGhpc31fd2l0aERyb3BDb250YWluZXIoYyl7dGhp'@;
put 'cy5fZHJvcENvbnRhaW5lcj1jfWdldEZyZWVEcmFnUG9zaXRpb24oKXtjb25zdCBjPXRoaXMuaXNEcmFnZ2luZygpP3RoaXMuX2FjdGl2ZVRyYW5zZm9ybTp0aGlzLl9wYXNzaXZlVHJhbnNmb3JtO3JldHVybnt4OmMueCx5OmMueX19c2V0RnJlZURyYWdQb3NpdGlvbihjKXtyZXR1cm4gdGhp'@;
put 'cy5fYWN0aXZlVHJhbnNmb3JtPXt4OjAseTowfSx0aGlzLl9wYXNzaXZlVHJhbnNmb3JtLng9Yy54LHRoaXMuX3Bhc3NpdmVUcmFuc2Zvcm0ueT1jLnksdGhpcy5fZHJvcENvbnRhaW5lcnx8dGhpcy5fYXBwbHlSb290RWxlbWVudFRyYW5zZm9ybShjLngsYy55KSx0aGlzfXdpdGhQcmV2aWV3'@;
put 'Q29udGFpbmVyKGMpe3JldHVybiB0aGlzLl9wcmV2aWV3Q29udGFpbmVyPWMsdGhpc31fc29ydEZyb21MYXN0UG9pbnRlclBvc2l0aW9uKCl7Y29uc3QgYz10aGlzLl9sYXN0S25vd25Qb2ludGVyUG9zaXRpb247YyYmdGhpcy5fZHJvcENvbnRhaW5lciYmdGhpcy5fdXBkYXRlQWN0aXZlRHJv'@;
put 'cENvbnRhaW5lcih0aGlzLl9nZXRDb25zdHJhaW5lZFBvaW50ZXJQb3NpdGlvbihjKSxjKX1fcmVtb3ZlU3Vic2NyaXB0aW9ucygpe3RoaXMuX3BvaW50ZXJNb3ZlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fcG9pbnRlclVwU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhp'@;
put 'cy5fc2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9X2Rlc3Ryb3lQcmV2aWV3KCl7dGhpcy5fcHJldmlldz8ucmVtb3ZlKCksdGhpcy5fcHJldmlld1JlZj8uZGVzdHJveSgpLHRoaXMuX3ByZXZpZXc9dGhpcy5fcHJldmlld1JlZj1udWxsfV9kZXN0cm95UGxhY2Vob2xkZXIoKXt0'@;
put 'aGlzLl9wbGFjZWhvbGRlcj8ucmVtb3ZlKCksdGhpcy5fcGxhY2Vob2xkZXJSZWY/LmRlc3Ryb3koKSx0aGlzLl9wbGFjZWhvbGRlcj10aGlzLl9wbGFjZWhvbGRlclJlZj1udWxsfV9lbmREcmFnU2VxdWVuY2UoYyl7aWYodGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5pc0RyYWdnaW5nKHRoaXMp'@;
put 'JiYodGhpcy5fcmVtb3ZlU3Vic2NyaXB0aW9ucygpLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuc3RvcERyYWdnaW5nKHRoaXMpLHRoaXMuX3RvZ2dsZU5hdGl2ZURyYWdJbnRlcmFjdGlvbnMoKSx0aGlzLl9oYW5kbGVzJiYodGhpcy5fcm9vdEVsZW1lbnQuc3R5bGUud2Via2l0VGFwSGlnaGxp'@;
put 'Z2h0Q29sb3I9dGhpcy5fcm9vdEVsZW1lbnRUYXBIaWdobGlnaHQpLHRoaXMuX2hhc1N0YXJ0ZWREcmFnZ2luZykpaWYodGhpcy5yZWxlYXNlZC5uZXh0KHtzb3VyY2U6dGhpcyxldmVudDpjfSksdGhpcy5fZHJvcENvbnRhaW5lcil0aGlzLl9kcm9wQ29udGFpbmVyLl9zdG9wU2Nyb2xsaW5n'@;
put 'KCksdGhpcy5fYW5pbWF0ZVByZXZpZXdUb1BsYWNlaG9sZGVyKCkudGhlbigoKT0+e3RoaXMuX2NsZWFudXBEcmFnQXJ0aWZhY3RzKGMpLHRoaXMuX2NsZWFudXBDYWNoZWREaW1lbnNpb25zKCksdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5zdG9wRHJhZ2dpbmcodGhpcyl9KTtlbHNle3RoaXMu'@;
put 'X3Bhc3NpdmVUcmFuc2Zvcm0ueD10aGlzLl9hY3RpdmVUcmFuc2Zvcm0ueDtjb25zdCBhPXRoaXMuX2dldFBvaW50ZXJQb3NpdGlvbk9uUGFnZShjKTt0aGlzLl9wYXNzaXZlVHJhbnNmb3JtLnk9dGhpcy5fYWN0aXZlVHJhbnNmb3JtLnksdGhpcy5fbmdab25lLnJ1bigoKT0+e3RoaXMuZW5k'@;
put 'ZWQubmV4dCh7c291cmNlOnRoaXMsZGlzdGFuY2U6dGhpcy5fZ2V0RHJhZ0Rpc3RhbmNlKGEpLGRyb3BQb2ludDphLGV2ZW50OmN9KX0pLHRoaXMuX2NsZWFudXBDYWNoZWREaW1lbnNpb25zKCksdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5zdG9wRHJhZ2dpbmcodGhpcyl9fV9zdGFydERyYWdT'@;
put 'ZXF1ZW5jZShjKXtZRShjKSYmKHRoaXMuX2xhc3RUb3VjaEV2ZW50VGltZT1EYXRlLm5vdygpKSx0aGlzLl90b2dnbGVOYXRpdmVEcmFnSW50ZXJhY3Rpb25zKCk7Y29uc3QgYT10aGlzLl9kcm9wQ29udGFpbmVyO2lmKGEpe2NvbnN0IGY9dGhpcy5fcm9vdEVsZW1lbnQsZD1mLnBhcmVudE5v'@;
put 'ZGUsaD10aGlzLl9wbGFjZWhvbGRlcj10aGlzLl9jcmVhdGVQbGFjZWhvbGRlckVsZW1lbnQoKSxtPXRoaXMuX2FuY2hvcj10aGlzLl9hbmNob3J8fHRoaXMuX2RvY3VtZW50LmNyZWF0ZUNvbW1lbnQoIiIpLF89dGhpcy5fZ2V0U2hhZG93Um9vdCgpO2QuaW5zZXJ0QmVmb3JlKG0sZiksdGhp'@;
put 'cy5faW5pdGlhbFRyYW5zZm9ybT1mLnN0eWxlLnRyYW5zZm9ybXx8IiIsdGhpcy5fcHJldmlldz10aGlzLl9jcmVhdGVQcmV2aWV3RWxlbWVudCgpLGU2ZShmLCExLElKKSx0aGlzLl9kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGQucmVwbGFjZUNoaWxkKGgsZikpLHRoaXMuX2dldFByZXZp'@;
put 'ZXdJbnNlcnRpb25Qb2ludChkLF8pLmFwcGVuZENoaWxkKHRoaXMuX3ByZXZpZXcpLHRoaXMuc3RhcnRlZC5uZXh0KHtzb3VyY2U6dGhpcyxldmVudDpjfSksYS5zdGFydCgpLHRoaXMuX2luaXRpYWxDb250YWluZXI9YSx0aGlzLl9pbml0aWFsSW5kZXg9YS5nZXRJdGVtSW5kZXgodGhpcyl9'@;
put 'ZWxzZSB0aGlzLnN0YXJ0ZWQubmV4dCh7c291cmNlOnRoaXMsZXZlbnQ6Y30pLHRoaXMuX2luaXRpYWxDb250YWluZXI9dGhpcy5faW5pdGlhbEluZGV4PXZvaWQgMDt0aGlzLl9wYXJlbnRQb3NpdGlvbnMuY2FjaGUoYT9hLmdldFNjcm9sbGFibGVQYXJlbnRzKCk6W10pfV9pbml0aWFsaXpl'@;
put 'RHJhZ1NlcXVlbmNlKGMsYSl7dGhpcy5fcGFyZW50RHJhZ1JlZiYmYS5zdG9wUHJvcGFnYXRpb24oKTtjb25zdCBmPXRoaXMuaXNEcmFnZ2luZygpLGQ9WUUoYSksaD0hZCYmMCE9PWEuYnV0dG9uLG09dGhpcy5fcm9vdEVsZW1lbnQsXz1aUChhKSxPPSFkJiZ0aGlzLl9sYXN0VG91Y2hFdmVu'@;
put 'dFRpbWUmJnRoaXMuX2xhc3RUb3VjaEV2ZW50VGltZSs4MDA+RGF0ZS5ub3coKSxYPWQ/ZnVuY3Rpb24gaGt0KGwpe2NvbnN0IGM9bC50b3VjaGVzJiZsLnRvdWNoZXNbMF18fGwuY2hhbmdlZFRvdWNoZXMmJmwuY2hhbmdlZFRvdWNoZXNbMF07cmV0dXJuISghY3x8LTEhPT1jLmlkZW50aWZp'@;
put 'ZXJ8fG51bGwhPWMucmFkaXVzWCYmMSE9PWMucmFkaXVzWHx8bnVsbCE9Yy5yYWRpdXNZJiYxIT09Yy5yYWRpdXNZKX0oYSk6ZnVuY3Rpb24gZGt0KGwpe3JldHVybiAwPT09bC5idXR0b25zfHwwPT09bC5vZmZzZXRYJiYwPT09bC5vZmZzZXRZfShhKTtpZihfJiZfLmRyYWdnYWJsZSYmIm1v'@;
put 'dXNlZG93biI9PT1hLnR5cGUmJmEucHJldmVudERlZmF1bHQoKSxmfHxofHxPfHxYKXJldHVybjtpZih0aGlzLl9oYW5kbGVzLmxlbmd0aCl7Y29uc3QgYmU9bS5zdHlsZTt0aGlzLl9yb290RWxlbWVudFRhcEhpZ2hsaWdodD1iZS53ZWJraXRUYXBIaWdobGlnaHRDb2xvcnx8IiIsYmUud2Vi'@;
put 'a2l0VGFwSGlnaGxpZ2h0Q29sb3I9InRyYW5zcGFyZW50In10aGlzLl9oYXNTdGFydGVkRHJhZ2dpbmc9dGhpcy5faGFzTW92ZWQ9ITEsdGhpcy5fcmVtb3ZlU3Vic2NyaXB0aW9ucygpLHRoaXMuX2luaXRpYWxDbGllbnRSZWN0PXRoaXMuX3Jvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50'@;
put 'UmVjdCgpLHRoaXMuX3BvaW50ZXJNb3ZlU3Vic2NyaXB0aW9uPXRoaXMuX2RyYWdEcm9wUmVnaXN0cnkucG9pbnRlck1vdmUuc3Vic2NyaWJlKHRoaXMuX3BvaW50ZXJNb3ZlKSx0aGlzLl9wb2ludGVyVXBTdWJzY3JpcHRpb249dGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5wb2ludGVyVXAuc3Vi'@;
put 'c2NyaWJlKHRoaXMuX3BvaW50ZXJVcCksdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPXRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuc2Nyb2xsZWQodGhpcy5fZ2V0U2hhZG93Um9vdCgpKS5zdWJzY3JpYmUoYmU9PnRoaXMuX3VwZGF0ZU9uU2Nyb2xsKGJlKSksdGhpcy5fYm91bmRhcnlFbGVtZW50'@;
put 'JiYodGhpcy5fYm91bmRhcnlSZWN0PU9KKHRoaXMuX2JvdW5kYXJ5RWxlbWVudCkpO2NvbnN0IGFlPXRoaXMuX3ByZXZpZXdUZW1wbGF0ZTt0aGlzLl9waWNrdXBQb3NpdGlvbkluRWxlbWVudD1hZSYmYWUudGVtcGxhdGUmJiFhZS5tYXRjaFNpemU/e3g6MCx5OjB9OnRoaXMuX2dldFBvaW50'@;
put 'ZXJQb3NpdGlvbkluRWxlbWVudCh0aGlzLl9pbml0aWFsQ2xpZW50UmVjdCxjLGEpO2NvbnN0IHBlPXRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlPXRoaXMuX2xhc3RLbm93blBvaW50ZXJQb3NpdGlvbj10aGlzLl9nZXRQb2ludGVyUG9zaXRpb25PblBhZ2UoYSk7dGhpcy5fcG9pbnRlckRp'@;
put 'cmVjdGlvbkRlbHRhPXt4OjAseTowfSx0aGlzLl9wb2ludGVyUG9zaXRpb25BdExhc3REaXJlY3Rpb25DaGFuZ2U9e3g6cGUueCx5OnBlLnl9LHRoaXMuX2RyYWdTdGFydFRpbWU9RGF0ZS5ub3coKSx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnN0YXJ0RHJhZ2dpbmcodGhpcyxhKX1fY2xlYW51'@;
put 'cERyYWdBcnRpZmFjdHMoYyl7ZTZlKHRoaXMuX3Jvb3RFbGVtZW50LCEwLElKKSx0aGlzLl9hbmNob3IucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQodGhpcy5fcm9vdEVsZW1lbnQsdGhpcy5fYW5jaG9yKSx0aGlzLl9kZXN0cm95UHJldmlldygpLHRoaXMuX2Rlc3Ryb3lQbGFjZWhvbGRlcigp'@;
put 'LHRoaXMuX2luaXRpYWxDbGllbnRSZWN0PXRoaXMuX2JvdW5kYXJ5UmVjdD10aGlzLl9wcmV2aWV3UmVjdD10aGlzLl9pbml0aWFsVHJhbnNmb3JtPXZvaWQgMCx0aGlzLl9uZ1pvbmUucnVuKCgpPT57Y29uc3QgYT10aGlzLl9kcm9wQ29udGFpbmVyLGY9YS5nZXRJdGVtSW5kZXgodGhpcyks'@;
put 'ZD10aGlzLl9nZXRQb2ludGVyUG9zaXRpb25PblBhZ2UoYyksaD10aGlzLl9nZXREcmFnRGlzdGFuY2UoZCksbT1hLl9pc092ZXJDb250YWluZXIoZC54LGQueSk7dGhpcy5lbmRlZC5uZXh0KHtzb3VyY2U6dGhpcyxkaXN0YW5jZTpoLGRyb3BQb2ludDpkLGV2ZW50OmN9KSx0aGlzLmRyb3Bw'@;
put 'ZWQubmV4dCh7aXRlbTp0aGlzLGN1cnJlbnRJbmRleDpmLHByZXZpb3VzSW5kZXg6dGhpcy5faW5pdGlhbEluZGV4LGNvbnRhaW5lcjphLHByZXZpb3VzQ29udGFpbmVyOnRoaXMuX2luaXRpYWxDb250YWluZXIsaXNQb2ludGVyT3ZlckNvbnRhaW5lcjptLGRpc3RhbmNlOmgsZHJvcFBvaW50'@;
put 'OmQsZXZlbnQ6Y30pLGEuZHJvcCh0aGlzLGYsdGhpcy5faW5pdGlhbEluZGV4LHRoaXMuX2luaXRpYWxDb250YWluZXIsbSxoLGQsYyksdGhpcy5fZHJvcENvbnRhaW5lcj10aGlzLl9pbml0aWFsQ29udGFpbmVyfSl9X3VwZGF0ZUFjdGl2ZURyb3BDb250YWluZXIoe3g6Yyx5OmF9LHt4OmYs'@;
put 'eTpkfSl7bGV0IGg9dGhpcy5faW5pdGlhbENvbnRhaW5lci5fZ2V0U2libGluZ0NvbnRhaW5lckZyb21Qb3NpdGlvbih0aGlzLGMsYSk7IWgmJnRoaXMuX2Ryb3BDb250YWluZXIhPT10aGlzLl9pbml0aWFsQ29udGFpbmVyJiZ0aGlzLl9pbml0aWFsQ29udGFpbmVyLl9pc092ZXJDb250YWlu'@;
put 'ZXIoYyxhKSYmKGg9dGhpcy5faW5pdGlhbENvbnRhaW5lciksaCYmaCE9PXRoaXMuX2Ryb3BDb250YWluZXImJnRoaXMuX25nWm9uZS5ydW4oKCk9Pnt0aGlzLmV4aXRlZC5uZXh0KHtpdGVtOnRoaXMsY29udGFpbmVyOnRoaXMuX2Ryb3BDb250YWluZXJ9KSx0aGlzLl9kcm9wQ29udGFpbmVy'@;
put 'LmV4aXQodGhpcyksdGhpcy5fZHJvcENvbnRhaW5lcj1oLHRoaXMuX2Ryb3BDb250YWluZXIuZW50ZXIodGhpcyxjLGEsaD09PXRoaXMuX2luaXRpYWxDb250YWluZXImJmguc29ydGluZ0Rpc2FibGVkP3RoaXMuX2luaXRpYWxJbmRleDp2b2lkIDApLHRoaXMuZW50ZXJlZC5uZXh0KHtpdGVt'@;
put 'OnRoaXMsY29udGFpbmVyOmgsY3VycmVudEluZGV4OmguZ2V0SXRlbUluZGV4KHRoaXMpfSl9KSx0aGlzLmlzRHJhZ2dpbmcoKSYmKHRoaXMuX2Ryb3BDb250YWluZXIuX3N0YXJ0U2Nyb2xsaW5nSWZOZWNlc3NhcnkoZixkKSx0aGlzLl9kcm9wQ29udGFpbmVyLl9zb3J0SXRlbSh0aGlzLGMs'@;
put 'YSx0aGlzLl9wb2ludGVyRGlyZWN0aW9uRGVsdGEpLHRoaXMuY29uc3RyYWluUG9zaXRpb24/dGhpcy5fYXBwbHlQcmV2aWV3VHJhbnNmb3JtKGMsYSk6dGhpcy5fYXBwbHlQcmV2aWV3VHJhbnNmb3JtKGMtdGhpcy5fcGlja3VwUG9zaXRpb25JbkVsZW1lbnQueCxhLXRoaXMuX3BpY2t1cFBv'@;
put 'c2l0aW9uSW5FbGVtZW50LnkpKX1fY3JlYXRlUHJldmlld0VsZW1lbnQoKXtjb25zdCBjPXRoaXMuX3ByZXZpZXdUZW1wbGF0ZSxhPXRoaXMucHJldmlld0NsYXNzLGY9Yz9jLnRlbXBsYXRlOm51bGw7bGV0IGQ7aWYoZiYmYyl7Y29uc3QgaD1jLm1hdGNoU2l6ZT90aGlzLl9pbml0aWFsQ2xp'@;
put 'ZW50UmVjdDpudWxsLG09Yy52aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyhmLGMuY29udGV4dCk7bS5kZXRlY3RDaGFuZ2VzKCksZD1jNmUobSx0aGlzLl9kb2N1bWVudCksdGhpcy5fcHJldmlld1JlZj1tLGMubWF0Y2hTaXplP2Y2ZShkLGgpOmQuc3R5bGUudHJhbnNmb3JtPUdQ'@;
put 'KHRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLngsdGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueSl9ZWxzZSBkPWk2ZSh0aGlzLl9yb290RWxlbWVudCksZjZlKGQsdGhpcy5faW5pdGlhbENsaWVudFJlY3QpLHRoaXMuX2luaXRpYWxUcmFuc2Zvcm0mJihkLnN0eWxlLnRyYW5zZm9ybT10'@;
put 'aGlzLl9pbml0aWFsVHJhbnNmb3JtKTtyZXR1cm4gQUooZC5zdHlsZSx7InBvaW50ZXItZXZlbnRzIjoibm9uZSIsbWFyZ2luOiIwIixwb3NpdGlvbjoiZml4ZWQiLHRvcDoiMCIsbGVmdDoiMCIsInotaW5kZXgiOmAke3RoaXMuX2NvbmZpZy56SW5kZXh8fDFlM31gfSxJSikseGIoZCwhMSks'@;
put 'ZC5jbGFzc0xpc3QuYWRkKCJjZGstZHJhZy1wcmV2aWV3IiksZC5zZXRBdHRyaWJ1dGUoImRpciIsdGhpcy5fZGlyZWN0aW9uKSxhJiYoQXJyYXkuaXNBcnJheShhKT9hLmZvckVhY2goaD0+ZC5jbGFzc0xpc3QuYWRkKGgpKTpkLmNsYXNzTGlzdC5hZGQoYSkpLGR9X2FuaW1hdGVQcmV2aWV3'@;
put 'VG9QbGFjZWhvbGRlcigpe2lmKCF0aGlzLl9oYXNNb3ZlZClyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Y29uc3QgYz10aGlzLl9wbGFjZWhvbGRlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLl9wcmV2aWV3LmNsYXNzTGlzdC5hZGQoImNkay1kcmFnLWFuaW1hdGluZyIpLHRoaXMu'@;
put 'X2FwcGx5UHJldmlld1RyYW5zZm9ybShjLmxlZnQsYy50b3ApO2NvbnN0IGE9ZnVuY3Rpb24gX2t0KGwpe2NvbnN0IGM9Z2V0Q29tcHV0ZWRTdHlsZShsKSxhPVRKKGMsInRyYW5zaXRpb24tcHJvcGVydHkiKSxmPWEuZmluZChfPT4idHJhbnNmb3JtIj09PV98fCJhbGwiPT09Xyk7aWYoIWYp'@;
put 'cmV0dXJuIDA7Y29uc3QgZD1hLmluZGV4T2YoZiksaD1USihjLCJ0cmFuc2l0aW9uLWR1cmF0aW9uIiksbT1USihjLCJ0cmFuc2l0aW9uLWRlbGF5Iik7cmV0dXJuIHQ2ZShoW2RdKSt0NmUobVtkXSl9KHRoaXMuX3ByZXZpZXcpO3JldHVybiAwPT09YT9Qcm9taXNlLnJlc29sdmUoKTp0aGlz'@;
put 'Ll9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pm5ldyBQcm9taXNlKGY9Pntjb25zdCBkPW09PnsoIW18fFpQKG0pPT09dGhpcy5fcHJldmlldyYmInRyYW5zZm9ybSI9PT1tLnByb3BlcnR5TmFtZSkmJih0aGlzLl9wcmV2aWV3Py5yZW1vdmVFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9u'@;
put 'ZW5kIixkKSxmKCksY2xlYXJUaW1lb3V0KGgpKX0saD1zZXRUaW1lb3V0KGQsMS41KmEpO3RoaXMuX3ByZXZpZXcuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsZCl9KSl9X2NyZWF0ZVBsYWNlaG9sZGVyRWxlbWVudCgpe2NvbnN0IGM9dGhpcy5fcGxhY2Vob2xkZXJUZW1wbGF0'@;
put 'ZSxhPWM/Yy50ZW1wbGF0ZTpudWxsO2xldCBmO3JldHVybiBhPyh0aGlzLl9wbGFjZWhvbGRlclJlZj1jLnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KGEsYy5jb250ZXh0KSx0aGlzLl9wbGFjZWhvbGRlclJlZi5kZXRlY3RDaGFuZ2VzKCksZj1jNmUodGhpcy5fcGxhY2Vob2xk'@;
put 'ZXJSZWYsdGhpcy5fZG9jdW1lbnQpKTpmPWk2ZSh0aGlzLl9yb290RWxlbWVudCksZi5zdHlsZS5wb2ludGVyRXZlbnRzPSJub25lIixmLmNsYXNzTGlzdC5hZGQoImNkay1kcmFnLXBsYWNlaG9sZGVyIiksZn1fZ2V0UG9pbnRlclBvc2l0aW9uSW5FbGVtZW50KGMsYSxmKXtjb25zdCBkPWE9'@;
put 'PT10aGlzLl9yb290RWxlbWVudD9udWxsOmEsaD1kP2QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk6YyxtPVlFKGYpP2YudGFyZ2V0VG91Y2hlc1swXTpmLF89dGhpcy5fZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpO3JldHVybnt4OmgubGVmdC1jLmxlZnQrKG0ucGFnZVgtaC5sZWZ0LV8u'@;
put 'bGVmdCkseTpoLnRvcC1jLnRvcCsobS5wYWdlWS1oLnRvcC1fLnRvcCl9fV9nZXRQb2ludGVyUG9zaXRpb25PblBhZ2UoYyl7Y29uc3QgYT10aGlzLl9nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCksZj1ZRShjKT9jLnRvdWNoZXNbMF18fGMuY2hhbmdlZFRvdWNoZXNbMF18fHtwYWdlWDow'@;
put 'LHBhZ2VZOjB9OmMsZD1mLnBhZ2VYLWEubGVmdCxoPWYucGFnZVktYS50b3A7aWYodGhpcy5fb3duZXJTVkdFbGVtZW50KXtjb25zdCBtPXRoaXMuX293bmVyU1ZHRWxlbWVudC5nZXRTY3JlZW5DVE0oKTtpZihtKXtjb25zdCBfPXRoaXMuX293bmVyU1ZHRWxlbWVudC5jcmVhdGVTVkdQb2lu'@;
put 'dCgpO3JldHVybiBfLng9ZCxfLnk9aCxfLm1hdHJpeFRyYW5zZm9ybShtLmludmVyc2UoKSl9fXJldHVybnt4OmQseTpofX1fZ2V0Q29uc3RyYWluZWRQb2ludGVyUG9zaXRpb24oYyl7Y29uc3QgYT10aGlzLl9kcm9wQ29udGFpbmVyP3RoaXMuX2Ryb3BDb250YWluZXIubG9ja0F4aXM6bnVs'@;
put 'bDtsZXR7eDpmLHk6ZH09dGhpcy5jb25zdHJhaW5Qb3NpdGlvbj90aGlzLmNvbnN0cmFpblBvc2l0aW9uKGMsdGhpcyx0aGlzLl9pbml0aWFsQ2xpZW50UmVjdCx0aGlzLl9waWNrdXBQb3NpdGlvbkluRWxlbWVudCk6YztpZigieCI9PT10aGlzLmxvY2tBeGlzfHwieCI9PT1hP2Q9dGhpcy5f'@;
put 'cGlja3VwUG9zaXRpb25PblBhZ2UueTooInkiPT09dGhpcy5sb2NrQXhpc3x8InkiPT09YSkmJihmPXRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLngpLHRoaXMuX2JvdW5kYXJ5UmVjdCl7Y29uc3R7eDpoLHk6bX09dGhpcy5fcGlja3VwUG9zaXRpb25JbkVsZW1lbnQsXz10aGlzLl9ib3Vu'@;
put 'ZGFyeVJlY3Qse3dpZHRoOk8saGVpZ2h0Olh9PXRoaXMuX2dldFByZXZpZXdSZWN0KCksYWU9Xy50b3ArbSxwZT1fLmJvdHRvbS0oWC1tKTtmPXU2ZShmLF8ubGVmdCtoLF8ucmlnaHQtKE8taCkpLGQ9dTZlKGQsYWUscGUpfXJldHVybnt4OmYseTpkfX1fdXBkYXRlUG9pbnRlckRpcmVjdGlv'@;
put 'bkRlbHRhKGMpe2NvbnN0e3g6YSx5OmZ9PWMsZD10aGlzLl9wb2ludGVyRGlyZWN0aW9uRGVsdGEsaD10aGlzLl9wb2ludGVyUG9zaXRpb25BdExhc3REaXJlY3Rpb25DaGFuZ2UsbT1NYXRoLmFicyhhLWgueCksXz1NYXRoLmFicyhmLWgueSk7cmV0dXJuIG0+dGhpcy5fY29uZmlnLnBvaW50'@;
put 'ZXJEaXJlY3Rpb25DaGFuZ2VUaHJlc2hvbGQmJihkLng9YT5oLng/MTotMSxoLng9YSksXz50aGlzLl9jb25maWcucG9pbnRlckRpcmVjdGlvbkNoYW5nZVRocmVzaG9sZCYmKGQueT1mPmgueT8xOi0xLGgueT1mKSxkfV90b2dnbGVOYXRpdmVEcmFnSW50ZXJhY3Rpb25zKCl7aWYoIXRoaXMu'@;
put 'X3Jvb3RFbGVtZW50fHwhdGhpcy5faGFuZGxlcylyZXR1cm47Y29uc3QgYz10aGlzLl9oYW5kbGVzLmxlbmd0aD4wfHwhdGhpcy5pc0RyYWdnaW5nKCk7YyE9PXRoaXMuX25hdGl2ZUludGVyYWN0aW9uc0VuYWJsZWQmJih0aGlzLl9uYXRpdmVJbnRlcmFjdGlvbnNFbmFibGVkPWMseGIodGhp'@;
put 'cy5fcm9vdEVsZW1lbnQsYykpfV9yZW1vdmVSb290RWxlbWVudExpc3RlbmVycyhjKXtjLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5fcG9pbnRlckRvd24sV1ApLGMucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5fcG9pbnRlckRvd24sczZlKSxj'@;
put 'LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRyYWdzdGFydCIsdGhpcy5fbmF0aXZlRHJhZ1N0YXJ0LFdQKX1fYXBwbHlSb290RWxlbWVudFRyYW5zZm9ybShjLGEpe2NvbnN0IGY9R1AoYyxhKSxkPXRoaXMuX3Jvb3RFbGVtZW50LnN0eWxlO251bGw9PXRoaXMuX2luaXRpYWxUcmFuc2Zvcm0mJih0'@;
put 'aGlzLl9pbml0aWFsVHJhbnNmb3JtPWQudHJhbnNmb3JtJiYibm9uZSIhPWQudHJhbnNmb3JtP2QudHJhbnNmb3JtOiIiKSxkLnRyYW5zZm9ybT1ZUChmLHRoaXMuX2luaXRpYWxUcmFuc2Zvcm0pfV9hcHBseVByZXZpZXdUcmFuc2Zvcm0oYyxhKXtjb25zdCBmPXRoaXMuX3ByZXZpZXdUZW1w'@;
put 'bGF0ZT8udGVtcGxhdGU/dm9pZCAwOnRoaXMuX2luaXRpYWxUcmFuc2Zvcm0sZD1HUChjLGEpO3RoaXMuX3ByZXZpZXcuc3R5bGUudHJhbnNmb3JtPVlQKGQsZil9X2dldERyYWdEaXN0YW5jZShjKXtjb25zdCBhPXRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlO3JldHVybiBhP3t4OmMueC1h'@;
put 'LngseTpjLnktYS55fTp7eDowLHk6MH19X2NsZWFudXBDYWNoZWREaW1lbnNpb25zKCl7dGhpcy5fYm91bmRhcnlSZWN0PXRoaXMuX3ByZXZpZXdSZWN0PXZvaWQgMCx0aGlzLl9wYXJlbnRQb3NpdGlvbnMuY2xlYXIoKX1fY29udGFpbkluc2lkZUJvdW5kYXJ5T25SZXNpemUoKXtsZXR7eDpj'@;
put 'LHk6YX09dGhpcy5fcGFzc2l2ZVRyYW5zZm9ybTtpZigwPT09YyYmMD09PWF8fHRoaXMuaXNEcmFnZ2luZygpfHwhdGhpcy5fYm91bmRhcnlFbGVtZW50KXJldHVybjtjb25zdCBmPXRoaXMuX3Jvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGQ9dGhpcy5fYm91bmRhcnlFbGVt'@;
put 'ZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKDA9PT1kLndpZHRoJiYwPT09ZC5oZWlnaHR8fDA9PT1mLndpZHRoJiYwPT09Zi5oZWlnaHQpcmV0dXJuO2NvbnN0IGg9ZC5sZWZ0LWYubGVmdCxtPWYucmlnaHQtZC5yaWdodCxfPWQudG9wLWYudG9wLE89Zi5ib3R0b20tZC5ib3R0b207'@;
put 'ZC53aWR0aD5mLndpZHRoPyhoPjAmJihjKz1oKSxtPjAmJihjLT1tKSk6Yz0wLGQuaGVpZ2h0PmYuaGVpZ2h0PyhfPjAmJihhKz1fKSxPPjAmJihhLT1PKSk6YT0wLChjIT09dGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS54fHxhIT09dGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS55KSYmdGhpcy5zZXRG'@;
put 'cmVlRHJhZ1Bvc2l0aW9uKHt5OmEseDpjfSl9X2dldERyYWdTdGFydERlbGF5KGMpe2NvbnN0IGE9dGhpcy5kcmFnU3RhcnREZWxheTtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGE/YTpZRShjKT9hLnRvdWNoOmE/YS5tb3VzZTowfV91cGRhdGVPblNjcm9sbChjKXtjb25zdCBhPXRoaXMuX3Bh'@;
put 'cmVudFBvc2l0aW9ucy5oYW5kbGVTY3JvbGwoYyk7aWYoYSl7Y29uc3QgZj1aUChjKTt0aGlzLl9ib3VuZGFyeVJlY3QmJmYhPT10aGlzLl9ib3VuZGFyeUVsZW1lbnQmJmYuY29udGFpbnModGhpcy5fYm91bmRhcnlFbGVtZW50KSYmWkUodGhpcy5fYm91bmRhcnlSZWN0LGEudG9wLGEubGVm'@;
put 'dCksdGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueCs9YS5sZWZ0LHRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLnkrPWEudG9wLHRoaXMuX2Ryb3BDb250YWluZXJ8fCh0aGlzLl9hY3RpdmVUcmFuc2Zvcm0ueC09YS5sZWZ0LHRoaXMuX2FjdGl2ZVRyYW5zZm9ybS55LT1hLnRvcCx0aGlz'@;
put 'Ll9hcHBseVJvb3RFbGVtZW50VHJhbnNmb3JtKHRoaXMuX2FjdGl2ZVRyYW5zZm9ybS54LHRoaXMuX2FjdGl2ZVRyYW5zZm9ybS55KSl9fV9nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3BhcmVudFBvc2l0aW9ucy5wb3NpdGlvbnMuZ2V0KHRoaXMuX2RvY3VtZW50'@;
put 'KT8uc2Nyb2xsUG9zaXRpb258fHRoaXMuX3BhcmVudFBvc2l0aW9ucy5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCl9X2dldFNoYWRvd1Jvb3QoKXtyZXR1cm4gdm9pZCAwPT09dGhpcy5fY2FjaGVkU2hhZG93Um9vdCYmKHRoaXMuX2NhY2hlZFNoYWRvd1Jvb3Q9SzVlKHRoaXMuX3Jvb3RF'@;
put 'bGVtZW50KSksdGhpcy5fY2FjaGVkU2hhZG93Um9vdH1fZ2V0UHJldmlld0luc2VydGlvblBvaW50KGMsYSl7Y29uc3QgZj10aGlzLl9wcmV2aWV3Q29udGFpbmVyfHwiZ2xvYmFsIjtpZigicGFyZW50Ij09PWYpcmV0dXJuIGM7aWYoImdsb2JhbCI9PT1mKXtjb25zdCBkPXRoaXMuX2RvY3Vt'@;
put 'ZW50O3JldHVybiBhfHxkLmZ1bGxzY3JlZW5FbGVtZW50fHxkLndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50fHxkLm1vekZ1bGxTY3JlZW5FbGVtZW50fHxkLm1zRnVsbHNjcmVlbkVsZW1lbnR8fGQuYm9keX1yZXR1cm4gJDAoZil9X2dldFByZXZpZXdSZWN0KCl7cmV0dXJuKCF0aGlzLl9wcmV2'@;
put 'aWV3UmVjdHx8IXRoaXMuX3ByZXZpZXdSZWN0LndpZHRoJiYhdGhpcy5fcHJldmlld1JlY3QuaGVpZ2h0KSYmKHRoaXMuX3ByZXZpZXdSZWN0PXRoaXMuX3ByZXZpZXc/dGhpcy5fcHJldmlldy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTp0aGlzLl9pbml0aWFsQ2xpZW50UmVjdCksdGhpcy5f'@;
put 'cHJldmlld1JlY3R9X2dldFRhcmdldEhhbmRsZShjKXtyZXR1cm4gdGhpcy5faGFuZGxlcy5maW5kKGE9PmMudGFyZ2V0JiYoYy50YXJnZXQ9PT1hfHxhLmNvbnRhaW5zKGMudGFyZ2V0KSkpfX1mdW5jdGlvbiBHUChsLGMpe3JldHVybmB0cmFuc2xhdGUzZCgke01hdGgucm91bmQobCl9cHgs'@;
put 'ICR7TWF0aC5yb3VuZChjKX1weCwgMClgfWZ1bmN0aW9uIHU2ZShsLGMsYSl7cmV0dXJuIE1hdGgubWF4KGMsTWF0aC5taW4oYSxsKSl9ZnVuY3Rpb24gWUUobCl7cmV0dXJuInQiPT09bC50eXBlWzBdfWZ1bmN0aW9uIGM2ZShsLGMpe2NvbnN0IGE9bC5yb290Tm9kZXM7aWYoMT09PWEubGVu'@;
put 'Z3RoJiZhWzBdLm5vZGVUeXBlPT09Yy5FTEVNRU5UX05PREUpcmV0dXJuIGFbMF07Y29uc3QgZj1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBhLmZvckVhY2goZD0+Zi5hcHBlbmRDaGlsZChkKSksZn1mdW5jdGlvbiBmNmUobCxjKXtsLnN0eWxlLndpZHRoPWAke2Mud2lkdGh9cHhg'@;
put 'LGwuc3R5bGUuaGVpZ2h0PWAke2MuaGVpZ2h0fXB4YCxsLnN0eWxlLnRyYW5zZm9ybT1HUChjLmxlZnQsYy50b3ApfWZ1bmN0aW9uIGQ2ZShsLGMsYSl7Y29uc3QgZj1XRShjLGwubGVuZ3RoLTEpLGQ9V0UoYSxsLmxlbmd0aC0xKTtpZihmPT09ZClyZXR1cm47Y29uc3QgaD1sW2ZdLG09ZDxm'@;
put 'Py0xOjE7Zm9yKGxldCBfPWY7XyE9PWQ7Xys9bSlsW19dPWxbXyttXTtsW2RdPWh9ZnVuY3Rpb24gV0UobCxjKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbihjLGwpKX1jbGFzcyBra3R7Y29uc3RydWN0b3IoYyxhKXt0aGlzLl9lbGVtZW50PWMsdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeT1h'@;
put 'LHRoaXMuX2l0ZW1Qb3NpdGlvbnM9W10sdGhpcy5vcmllbnRhdGlvbj0idmVydGljYWwiLHRoaXMuX3ByZXZpb3VzU3dhcD17ZHJhZzpudWxsLGRlbHRhOjAsb3ZlcmxhcHM6ITF9fXN0YXJ0KGMpe3RoaXMud2l0aEl0ZW1zKGMpfXNvcnQoYyxhLGYsZCl7Y29uc3QgaD10aGlzLl9pdGVtUG9z'@;
put 'aXRpb25zLG09dGhpcy5fZ2V0SXRlbUluZGV4RnJvbVBvaW50ZXJQb3NpdGlvbihjLGEsZixkKTtpZigtMT09PW0mJmgubGVuZ3RoPjApcmV0dXJuIG51bGw7Y29uc3QgXz0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uLE89aC5maW5kSW5kZXgobHQ9Pmx0LmRyYWc9PT1jKSxYPWhb'@;
put 'bV0scGU9WC5jbGllbnRSZWN0LGJlPU8+bT8xOi0xLHhlPXRoaXMuX2dldEl0ZW1PZmZzZXRQeChoW09dLmNsaWVudFJlY3QscGUsYmUpLFZlPXRoaXMuX2dldFNpYmxpbmdPZmZzZXRQeChPLGgsYmUpLFplPWguc2xpY2UoKTtyZXR1cm4gZDZlKGgsTyxtKSxoLmZvckVhY2goKGx0LGR0KT0+'@;
put 'e2lmKFplW2R0XT09PWx0KXJldHVybjtjb25zdCBndD1sdC5kcmFnPT09YyxqdD1ndD94ZTpWZSxybj1ndD9jLmdldFBsYWNlaG9sZGVyRWxlbWVudCgpOmx0LmRyYWcuZ2V0Um9vdEVsZW1lbnQoKTtsdC5vZmZzZXQrPWp0LF8/KHJuLnN0eWxlLnRyYW5zZm9ybT1ZUChgdHJhbnNsYXRlM2Qo'@;
put 'JHtNYXRoLnJvdW5kKGx0Lm9mZnNldCl9cHgsIDAsIDApYCxsdC5pbml0aWFsVHJhbnNmb3JtKSxaRShsdC5jbGllbnRSZWN0LDAsanQpKToocm4uc3R5bGUudHJhbnNmb3JtPVlQKGB0cmFuc2xhdGUzZCgwLCAke01hdGgucm91bmQobHQub2Zmc2V0KX1weCwgMClgLGx0LmluaXRpYWxUcmFu'@;
put 'c2Zvcm0pLFpFKGx0LmNsaWVudFJlY3QsanQsMCkpfSksdGhpcy5fcHJldmlvdXNTd2FwLm92ZXJsYXBzPURKKHBlLGEsZiksdGhpcy5fcHJldmlvdXNTd2FwLmRyYWc9WC5kcmFnLHRoaXMuX3ByZXZpb3VzU3dhcC5kZWx0YT1fP2QueDpkLnkse3ByZXZpb3VzSW5kZXg6TyxjdXJyZW50SW5k'@;
put 'ZXg6bX19ZW50ZXIoYyxhLGYsZCl7Y29uc3QgaD1udWxsPT1kfHxkPDA/dGhpcy5fZ2V0SXRlbUluZGV4RnJvbVBvaW50ZXJQb3NpdGlvbihjLGEsZik6ZCxtPXRoaXMuX2FjdGl2ZURyYWdnYWJsZXMsXz1tLmluZGV4T2YoYyksTz1jLmdldFBsYWNlaG9sZGVyRWxlbWVudCgpO2xldCBYPW1b'@;
put 'aF07aWYoWD09PWMmJihYPW1baCsxXSksIVgmJihudWxsPT1ofHwtMT09PWh8fGg8bS5sZW5ndGgtMSkmJnRoaXMuX3Nob3VsZEVudGVyQXNGaXJzdENoaWxkKGEsZikmJihYPW1bMF0pLF8+LTEmJm0uc3BsaWNlKF8sMSksWCYmIXRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuaXNEcmFnZ2luZyhY'@;
put 'KSl7Y29uc3QgYWU9WC5nZXRSb290RWxlbWVudCgpO2FlLnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKE8sYWUpLG0uc3BsaWNlKGgsMCxjKX1lbHNlICQwKHRoaXMuX2VsZW1lbnQpLmFwcGVuZENoaWxkKE8pLG0ucHVzaChjKTtPLnN0eWxlLnRyYW5zZm9ybT0iIix0aGlzLl9jYWNoZUl0'@;
put 'ZW1Qb3NpdGlvbnMoKX13aXRoSXRlbXMoYyl7dGhpcy5fYWN0aXZlRHJhZ2dhYmxlcz1jLnNsaWNlKCksdGhpcy5fY2FjaGVJdGVtUG9zaXRpb25zKCl9d2l0aFNvcnRQcmVkaWNhdGUoYyl7dGhpcy5fc29ydFByZWRpY2F0ZT1jfXJlc2V0KCl7dGhpcy5fYWN0aXZlRHJhZ2dhYmxlcy5mb3JF'@;
put 'YWNoKGM9Pntjb25zdCBhPWMuZ2V0Um9vdEVsZW1lbnQoKTtpZihhKXtjb25zdCBmPXRoaXMuX2l0ZW1Qb3NpdGlvbnMuZmluZChkPT5kLmRyYWc9PT1jKT8uaW5pdGlhbFRyYW5zZm9ybTthLnN0eWxlLnRyYW5zZm9ybT1mfHwiIn19KSx0aGlzLl9pdGVtUG9zaXRpb25zPVtdLHRoaXMuX2Fj'@;
put 'dGl2ZURyYWdnYWJsZXM9W10sdGhpcy5fcHJldmlvdXNTd2FwLmRyYWc9bnVsbCx0aGlzLl9wcmV2aW91c1N3YXAuZGVsdGE9MCx0aGlzLl9wcmV2aW91c1N3YXAub3ZlcmxhcHM9ITF9Z2V0QWN0aXZlSXRlbXNTbmFwc2hvdCgpe3JldHVybiB0aGlzLl9hY3RpdmVEcmFnZ2FibGVzfWdldEl0'@;
put 'ZW1JbmRleChjKXtyZXR1cm4oImhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbiYmInJ0bCI9PT10aGlzLmRpcmVjdGlvbj90aGlzLl9pdGVtUG9zaXRpb25zLnNsaWNlKCkucmV2ZXJzZSgpOnRoaXMuX2l0ZW1Qb3NpdGlvbnMpLmZpbmRJbmRleChmPT5mLmRyYWc9PT1jKX11cGRhdGVP'@;
put 'blNjcm9sbChjLGEpe3RoaXMuX2l0ZW1Qb3NpdGlvbnMuZm9yRWFjaCgoe2NsaWVudFJlY3Q6Zn0pPT57WkUoZixjLGEpfSksdGhpcy5faXRlbVBvc2l0aW9ucy5mb3JFYWNoKCh7ZHJhZzpmfSk9Pnt0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LmlzRHJhZ2dpbmcoZikmJmYuX3NvcnRGcm9tTGFz'@;
put 'dFBvaW50ZXJQb3NpdGlvbigpfSl9X2NhY2hlSXRlbVBvc2l0aW9ucygpe2NvbnN0IGM9Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbjt0aGlzLl9pdGVtUG9zaXRpb25zPXRoaXMuX2FjdGl2ZURyYWdnYWJsZXMubWFwKGE9Pntjb25zdCBmPWEuZ2V0VmlzaWJsZUVsZW1lbnQoKTty'@;
put 'ZXR1cm57ZHJhZzphLG9mZnNldDowLGluaXRpYWxUcmFuc2Zvcm06Zi5zdHlsZS50cmFuc2Zvcm18fCIiLGNsaWVudFJlY3Q6T0ooZil9fSkuc29ydCgoYSxmKT0+Yz9hLmNsaWVudFJlY3QubGVmdC1mLmNsaWVudFJlY3QubGVmdDphLmNsaWVudFJlY3QudG9wLWYuY2xpZW50UmVjdC50b3Ap'@;
put 'fV9nZXRJdGVtT2Zmc2V0UHgoYyxhLGYpe2NvbnN0IGQ9Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbjtsZXQgaD1kP2EubGVmdC1jLmxlZnQ6YS50b3AtYy50b3A7cmV0dXJuLTE9PT1mJiYoaCs9ZD9hLndpZHRoLWMud2lkdGg6YS5oZWlnaHQtYy5oZWlnaHQpLGh9X2dldFNpYmxp'@;
put 'bmdPZmZzZXRQeChjLGEsZil7Y29uc3QgZD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uLGg9YVtjXS5jbGllbnRSZWN0LG09YVtjKy0xKmZdO2xldCBfPWhbZD8id2lkdGgiOiJoZWlnaHQiXSpmO2lmKG0pe2NvbnN0IE89ZD8ibGVmdCI6InRvcCIsWD1kPyJyaWdodCI6ImJvdHRv'@;
put 'bSI7LTE9PT1mP18tPW0uY2xpZW50UmVjdFtPXS1oW1hdOl8rPWhbT10tbS5jbGllbnRSZWN0W1hdfXJldHVybiBffV9zaG91bGRFbnRlckFzRmlyc3RDaGlsZChjLGEpe2lmKCF0aGlzLl9hY3RpdmVEcmFnZ2FibGVzLmxlbmd0aClyZXR1cm4hMTtjb25zdCBmPXRoaXMuX2l0ZW1Qb3NpdGlv'@;
put 'bnMsZD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uO2lmKGZbMF0uZHJhZyE9PXRoaXMuX2FjdGl2ZURyYWdnYWJsZXNbMF0pe2NvbnN0IG09ZltmLmxlbmd0aC0xXS5jbGllbnRSZWN0O3JldHVybiBkP2M+PW0ucmlnaHQ6YT49bS5ib3R0b219e2NvbnN0IG09ZlswXS5jbGllbnRS'@;
put 'ZWN0O3JldHVybiBkP2M8PW0ubGVmdDphPD1tLnRvcH19X2dldEl0ZW1JbmRleEZyb21Qb2ludGVyUG9zaXRpb24oYyxhLGYsZCl7Y29uc3QgaD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uLG09dGhpcy5faXRlbVBvc2l0aW9ucy5maW5kSW5kZXgoKHtkcmFnOl8sY2xpZW50UmVj'@;
put 'dDpPfSk9Pl8hPT1jJiYoKCFkfHxfIT09dGhpcy5fcHJldmlvdXNTd2FwLmRyYWd8fCF0aGlzLl9wcmV2aW91c1N3YXAub3ZlcmxhcHN8fChoP2QueDpkLnkpIT09dGhpcy5fcHJldmlvdXNTd2FwLmRlbHRhKSYmKGg/YT49TWF0aC5mbG9vcihPLmxlZnQpJiZhPE1hdGguZmxvb3IoTy5yaWdo'@;
put 'dCk6Zj49TWF0aC5mbG9vcihPLnRvcCkmJmY8TWF0aC5mbG9vcihPLmJvdHRvbSkpKSk7cmV0dXJuLTEhPT1tJiZ0aGlzLl9zb3J0UHJlZGljYXRlKG0sYyk/bTotMX19Y2xhc3MgRWt0e2NvbnN0cnVjdG9yKGMsYSxmLGQsaCl7dGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeT1hLHRoaXMuX25nWm9u'@;
put 'ZT1kLHRoaXMuX3ZpZXdwb3J0UnVsZXI9aCx0aGlzLmRpc2FibGVkPSExLHRoaXMuc29ydGluZ0Rpc2FibGVkPSExLHRoaXMuYXV0b1Njcm9sbERpc2FibGVkPSExLHRoaXMuYXV0b1Njcm9sbFN0ZXA9Mix0aGlzLmVudGVyUHJlZGljYXRlPSgpPT4hMCx0aGlzLnNvcnRQcmVkaWNhdGU9KCk9'@;
put 'PiEwLHRoaXMuYmVmb3JlU3RhcnRlZD1uZXcgd2UsdGhpcy5lbnRlcmVkPW5ldyB3ZSx0aGlzLmV4aXRlZD1uZXcgd2UsdGhpcy5kcm9wcGVkPW5ldyB3ZSx0aGlzLnNvcnRlZD1uZXcgd2UsdGhpcy5yZWNlaXZpbmdTdGFydGVkPW5ldyB3ZSx0aGlzLnJlY2VpdmluZ1N0b3BwZWQ9bmV3IHdl'@;
put 'LHRoaXMuX2lzRHJhZ2dpbmc9ITEsdGhpcy5fZHJhZ2dhYmxlcz1bXSx0aGlzLl9zaWJsaW5ncz1bXSx0aGlzLl9hY3RpdmVTaWJsaW5ncz1uZXcgU2V0LHRoaXMuX3ZpZXdwb3J0U2Nyb2xsU3Vic2NyaXB0aW9uPXRlLkVNUFRZLHRoaXMuX3ZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uPTAsdGhp'@;
put 'cy5faG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbj0wLHRoaXMuX3N0b3BTY3JvbGxUaW1lcnM9bmV3IHdlLHRoaXMuX2NhY2hlZFNoYWRvd1Jvb3Q9bnVsbCx0aGlzLl9zdGFydFNjcm9sbEludGVydmFsPSgpPT57dGhpcy5fc3RvcFNjcm9sbGluZygpLGZ1bmN0aW9uIG1rdChsPTAsYz1CQyl7'@;
put 'cmV0dXJuIGw8MCYmKGw9MCksRHoobCxsLGMpfSgwLFo1ZSkucGlwZShBaCh0aGlzLl9zdG9wU2Nyb2xsVGltZXJzKSkuc3Vic2NyaWJlKCgpPT57Y29uc3QgbT10aGlzLl9zY3JvbGxOb2RlLF89dGhpcy5hdXRvU2Nyb2xsU3RlcDsxPT09dGhpcy5fdmVydGljYWxTY3JvbGxEaXJlY3Rpb24/'@;
put 'bS5zY3JvbGxCeSgwLC1fKToyPT09dGhpcy5fdmVydGljYWxTY3JvbGxEaXJlY3Rpb24mJm0uc2Nyb2xsQnkoMCxfKSwxPT09dGhpcy5faG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbj9tLnNjcm9sbEJ5KC1fLDApOjI9PT10aGlzLl9ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uJiZtLnNjcm9s'@;
put 'bEJ5KF8sMCl9KX0sdGhpcy5lbGVtZW50PSQwKGMpLHRoaXMuX2RvY3VtZW50PWYsdGhpcy53aXRoU2Nyb2xsYWJsZVBhcmVudHMoW3RoaXMuZWxlbWVudF0pLGEucmVnaXN0ZXJEcm9wQ29udGFpbmVyKHRoaXMpLHRoaXMuX3BhcmVudFBvc2l0aW9ucz1uZXcgcjZlKGYpLHRoaXMuX3NvcnRT'@;
put 'dHJhdGVneT1uZXcga2t0KHRoaXMuZWxlbWVudCxhKSx0aGlzLl9zb3J0U3RyYXRlZ3kud2l0aFNvcnRQcmVkaWNhdGUoKG0sXyk9PnRoaXMuc29ydFByZWRpY2F0ZShtLF8sdGhpcykpfWRpc3Bvc2UoKXt0aGlzLl9zdG9wU2Nyb2xsaW5nKCksdGhpcy5fc3RvcFNjcm9sbFRpbWVycy5jb21w'@;
put 'bGV0ZSgpLHRoaXMuX3ZpZXdwb3J0U2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5iZWZvcmVTdGFydGVkLmNvbXBsZXRlKCksdGhpcy5lbnRlcmVkLmNvbXBsZXRlKCksdGhpcy5leGl0ZWQuY29tcGxldGUoKSx0aGlzLmRyb3BwZWQuY29tcGxldGUoKSx0aGlzLnNvcnRl'@;
put 'ZC5jb21wbGV0ZSgpLHRoaXMucmVjZWl2aW5nU3RhcnRlZC5jb21wbGV0ZSgpLHRoaXMucmVjZWl2aW5nU3RvcHBlZC5jb21wbGV0ZSgpLHRoaXMuX2FjdGl2ZVNpYmxpbmdzLmNsZWFyKCksdGhpcy5fc2Nyb2xsTm9kZT1udWxsLHRoaXMuX3BhcmVudFBvc2l0aW9ucy5jbGVhcigpLHRoaXMu'@;
put 'X2RyYWdEcm9wUmVnaXN0cnkucmVtb3ZlRHJvcENvbnRhaW5lcih0aGlzKX1pc0RyYWdnaW5nKCl7cmV0dXJuIHRoaXMuX2lzRHJhZ2dpbmd9c3RhcnQoKXt0aGlzLl9kcmFnZ2luZ1N0YXJ0ZWQoKSx0aGlzLl9ub3RpZnlSZWNlaXZpbmdTaWJsaW5ncygpfWVudGVyKGMsYSxmLGQpe3RoaXMu'@;
put 'X2RyYWdnaW5nU3RhcnRlZCgpLG51bGw9PWQmJnRoaXMuc29ydGluZ0Rpc2FibGVkJiYoZD10aGlzLl9kcmFnZ2FibGVzLmluZGV4T2YoYykpLHRoaXMuX3NvcnRTdHJhdGVneS5lbnRlcihjLGEsZixkKSx0aGlzLl9jYWNoZVBhcmVudFBvc2l0aW9ucygpLHRoaXMuX25vdGlmeVJlY2Vpdmlu'@;
put 'Z1NpYmxpbmdzKCksdGhpcy5lbnRlcmVkLm5leHQoe2l0ZW06Yyxjb250YWluZXI6dGhpcyxjdXJyZW50SW5kZXg6dGhpcy5nZXRJdGVtSW5kZXgoYyl9KX1leGl0KGMpe3RoaXMuX3Jlc2V0KCksdGhpcy5leGl0ZWQubmV4dCh7aXRlbTpjLGNvbnRhaW5lcjp0aGlzfSl9ZHJvcChjLGEsZixk'@;
put 'LGgsbSxfLE89e30pe3RoaXMuX3Jlc2V0KCksdGhpcy5kcm9wcGVkLm5leHQoe2l0ZW06YyxjdXJyZW50SW5kZXg6YSxwcmV2aW91c0luZGV4OmYsY29udGFpbmVyOnRoaXMscHJldmlvdXNDb250YWluZXI6ZCxpc1BvaW50ZXJPdmVyQ29udGFpbmVyOmgsZGlzdGFuY2U6bSxkcm9wUG9pbnQ6'@;
put 'XyxldmVudDpPfSl9d2l0aEl0ZW1zKGMpe2NvbnN0IGE9dGhpcy5fZHJhZ2dhYmxlcztyZXR1cm4gdGhpcy5fZHJhZ2dhYmxlcz1jLGMuZm9yRWFjaChmPT5mLl93aXRoRHJvcENvbnRhaW5lcih0aGlzKSksdGhpcy5pc0RyYWdnaW5nKCkmJihhLmZpbHRlcihkPT5kLmlzRHJhZ2dpbmcoKSku'@;
put 'ZXZlcnkoZD0+LTE9PT1jLmluZGV4T2YoZCkpP3RoaXMuX3Jlc2V0KCk6dGhpcy5fc29ydFN0cmF0ZWd5LndpdGhJdGVtcyh0aGlzLl9kcmFnZ2FibGVzKSksdGhpc313aXRoRGlyZWN0aW9uKGMpe3JldHVybiB0aGlzLl9zb3J0U3RyYXRlZ3kuZGlyZWN0aW9uPWMsdGhpc31jb25uZWN0ZWRU'@;
put 'byhjKXtyZXR1cm4gdGhpcy5fc2libGluZ3M9Yy5zbGljZSgpLHRoaXN9d2l0aE9yaWVudGF0aW9uKGMpe3JldHVybiB0aGlzLl9zb3J0U3RyYXRlZ3kub3JpZW50YXRpb249Yyx0aGlzfXdpdGhTY3JvbGxhYmxlUGFyZW50cyhjKXtjb25zdCBhPSQwKHRoaXMuZWxlbWVudCk7cmV0dXJuIHRo'@;
put 'aXMuX3Njcm9sbGFibGVFbGVtZW50cz0tMT09PWMuaW5kZXhPZihhKT9bYSwuLi5jXTpjLnNsaWNlKCksdGhpc31nZXRTY3JvbGxhYmxlUGFyZW50cygpe3JldHVybiB0aGlzLl9zY3JvbGxhYmxlRWxlbWVudHN9Z2V0SXRlbUluZGV4KGMpe3JldHVybiB0aGlzLl9pc0RyYWdnaW5nP3RoaXMu'@;
put 'X3NvcnRTdHJhdGVneS5nZXRJdGVtSW5kZXgoYyk6dGhpcy5fZHJhZ2dhYmxlcy5pbmRleE9mKGMpfWlzUmVjZWl2aW5nKCl7cmV0dXJuIHRoaXMuX2FjdGl2ZVNpYmxpbmdzLnNpemU+MH1fc29ydEl0ZW0oYyxhLGYsZCl7aWYodGhpcy5zb3J0aW5nRGlzYWJsZWR8fCF0aGlzLl9jbGllbnRS'@;
put 'ZWN0fHwhbjZlKHRoaXMuX2NsaWVudFJlY3QsLjA1LGEsZikpcmV0dXJuO2NvbnN0IGg9dGhpcy5fc29ydFN0cmF0ZWd5LnNvcnQoYyxhLGYsZCk7aCYmdGhpcy5zb3J0ZWQubmV4dCh7cHJldmlvdXNJbmRleDpoLnByZXZpb3VzSW5kZXgsY3VycmVudEluZGV4OmguY3VycmVudEluZGV4LGNv'@;
put 'bnRhaW5lcjp0aGlzLGl0ZW06Y30pfV9zdGFydFNjcm9sbGluZ0lmTmVjZXNzYXJ5KGMsYSl7aWYodGhpcy5hdXRvU2Nyb2xsRGlzYWJsZWQpcmV0dXJuO2xldCBmLGQ9MCxoPTA7aWYodGhpcy5fcGFyZW50UG9zaXRpb25zLnBvc2l0aW9ucy5mb3JFYWNoKChtLF8pPT57Xz09PXRoaXMuX2Rv'@;
put 'Y3VtZW50fHwhbS5jbGllbnRSZWN0fHxmfHxuNmUobS5jbGllbnRSZWN0LC4wNSxjLGEpJiYoW2QsaF09ZnVuY3Rpb24geGt0KGwsYyxhLGYpe2NvbnN0IGQ9bTZlKGMsZiksaD1nNmUoYyxhKTtsZXQgbT0wLF89MDtpZihkKXtjb25zdCBPPWwuc2Nyb2xsVG9wOzE9PT1kP08+MCYmKG09MSk6'@;
put 'bC5zY3JvbGxIZWlnaHQtTz5sLmNsaWVudEhlaWdodCYmKG09Mil9aWYoaCl7Y29uc3QgTz1sLnNjcm9sbExlZnQ7MT09PWg/Tz4wJiYoXz0xKTpsLnNjcm9sbFdpZHRoLU8+bC5jbGllbnRXaWR0aCYmKF89Mil9cmV0dXJuW20sX119KF8sbS5jbGllbnRSZWN0LGMsYSksKGR8fGgpJiYoZj1f'@;
put 'KSl9KSwhZCYmIWgpe2NvbnN0e3dpZHRoOm0saGVpZ2h0Ol99PXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTaXplKCksTz17d2lkdGg6bSxoZWlnaHQ6Xyx0b3A6MCxyaWdodDptLGJvdHRvbTpfLGxlZnQ6MH07ZD1tNmUoTyxhKSxoPWc2ZShPLGMpLGY9d2luZG93fWYmJihkIT09'@;
put 'dGhpcy5fdmVydGljYWxTY3JvbGxEaXJlY3Rpb258fGghPT10aGlzLl9ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9ufHxmIT09dGhpcy5fc2Nyb2xsTm9kZSkmJih0aGlzLl92ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbj1kLHRoaXMuX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb249aCx0aGlzLl9z'@;
put 'Y3JvbGxOb2RlPWYsKGR8fGgpJiZmP3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcih0aGlzLl9zdGFydFNjcm9sbEludGVydmFsKTp0aGlzLl9zdG9wU2Nyb2xsaW5nKCkpfV9zdG9wU2Nyb2xsaW5nKCl7dGhpcy5fc3RvcFNjcm9sbFRpbWVycy5uZXh0KCl9X2RyYWdnaW5nU3RhcnRl'@;
put 'ZCgpe2NvbnN0IGM9JDAodGhpcy5lbGVtZW50KS5zdHlsZTt0aGlzLmJlZm9yZVN0YXJ0ZWQubmV4dCgpLHRoaXMuX2lzRHJhZ2dpbmc9ITAsdGhpcy5faW5pdGlhbFNjcm9sbFNuYXA9Yy5tc1Njcm9sbFNuYXBUeXBlfHxjLnNjcm9sbFNuYXBUeXBlfHwiIixjLnNjcm9sbFNuYXBUeXBlPWMu'@;
put 'bXNTY3JvbGxTbmFwVHlwZT0ibm9uZSIsdGhpcy5fc29ydFN0cmF0ZWd5LnN0YXJ0KHRoaXMuX2RyYWdnYWJsZXMpLHRoaXMuX2NhY2hlUGFyZW50UG9zaXRpb25zKCksdGhpcy5fdmlld3BvcnRTY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9saXN0ZW5Ub1Njcm9sbEV2'@;
put 'ZW50cygpfV9jYWNoZVBhcmVudFBvc2l0aW9ucygpe2NvbnN0IGM9JDAodGhpcy5lbGVtZW50KTt0aGlzLl9wYXJlbnRQb3NpdGlvbnMuY2FjaGUodGhpcy5fc2Nyb2xsYWJsZUVsZW1lbnRzKSx0aGlzLl9jbGllbnRSZWN0PXRoaXMuX3BhcmVudFBvc2l0aW9ucy5wb3NpdGlvbnMuZ2V0KGMp'@;
put 'LmNsaWVudFJlY3R9X3Jlc2V0KCl7dGhpcy5faXNEcmFnZ2luZz0hMTtjb25zdCBjPSQwKHRoaXMuZWxlbWVudCkuc3R5bGU7Yy5zY3JvbGxTbmFwVHlwZT1jLm1zU2Nyb2xsU25hcFR5cGU9dGhpcy5faW5pdGlhbFNjcm9sbFNuYXAsdGhpcy5fc2libGluZ3MuZm9yRWFjaChhPT5hLl9zdG9w'@;
put 'UmVjZWl2aW5nKHRoaXMpKSx0aGlzLl9zb3J0U3RyYXRlZ3kucmVzZXQoKSx0aGlzLl9zdG9wU2Nyb2xsaW5nKCksdGhpcy5fdmlld3BvcnRTY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9wYXJlbnRQb3NpdGlvbnMuY2xlYXIoKX1faXNPdmVyQ29udGFpbmVyKGMsYSl7'@;
put 'cmV0dXJuIG51bGwhPXRoaXMuX2NsaWVudFJlY3QmJkRKKHRoaXMuX2NsaWVudFJlY3QsYyxhKX1fZ2V0U2libGluZ0NvbnRhaW5lckZyb21Qb3NpdGlvbihjLGEsZil7cmV0dXJuIHRoaXMuX3NpYmxpbmdzLmZpbmQoZD0+ZC5fY2FuUmVjZWl2ZShjLGEsZikpfV9jYW5SZWNlaXZlKGMsYSxm'@;
put 'KXtpZighdGhpcy5fY2xpZW50UmVjdHx8IURKKHRoaXMuX2NsaWVudFJlY3QsYSxmKXx8IXRoaXMuZW50ZXJQcmVkaWNhdGUoYyx0aGlzKSlyZXR1cm4hMTtjb25zdCBkPXRoaXMuX2dldFNoYWRvd1Jvb3QoKS5lbGVtZW50RnJvbVBvaW50KGEsZik7aWYoIWQpcmV0dXJuITE7Y29uc3QgaD0k'@;
put 'MCh0aGlzLmVsZW1lbnQpO3JldHVybiBkPT09aHx8aC5jb250YWlucyhkKX1fc3RhcnRSZWNlaXZpbmcoYyxhKXtjb25zdCBmPXRoaXMuX2FjdGl2ZVNpYmxpbmdzOyFmLmhhcyhjKSYmYS5ldmVyeShkPT50aGlzLmVudGVyUHJlZGljYXRlKGQsdGhpcyl8fHRoaXMuX2RyYWdnYWJsZXMuaW5k'@;
put 'ZXhPZihkKT4tMSkmJihmLmFkZChjKSx0aGlzLl9jYWNoZVBhcmVudFBvc2l0aW9ucygpLHRoaXMuX2xpc3RlblRvU2Nyb2xsRXZlbnRzKCksdGhpcy5yZWNlaXZpbmdTdGFydGVkLm5leHQoe2luaXRpYXRvcjpjLHJlY2VpdmVyOnRoaXMsaXRlbXM6YX0pKX1fc3RvcFJlY2VpdmluZyhjKXt0'@;
put 'aGlzLl9hY3RpdmVTaWJsaW5ncy5kZWxldGUoYyksdGhpcy5fdmlld3BvcnRTY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLnJlY2VpdmluZ1N0b3BwZWQubmV4dCh7aW5pdGlhdG9yOmMscmVjZWl2ZXI6dGhpc30pfV9saXN0ZW5Ub1Njcm9sbEV2ZW50cygpe3RoaXMuX3Zp'@;
put 'ZXdwb3J0U2Nyb2xsU3Vic2NyaXB0aW9uPXRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuc2Nyb2xsZWQodGhpcy5fZ2V0U2hhZG93Um9vdCgpKS5zdWJzY3JpYmUoYz0+e2lmKHRoaXMuaXNEcmFnZ2luZygpKXtjb25zdCBhPXRoaXMuX3BhcmVudFBvc2l0aW9ucy5oYW5kbGVTY3JvbGwoYyk7YSYm'@;
put 'dGhpcy5fc29ydFN0cmF0ZWd5LnVwZGF0ZU9uU2Nyb2xsKGEudG9wLGEubGVmdCl9ZWxzZSB0aGlzLmlzUmVjZWl2aW5nKCkmJnRoaXMuX2NhY2hlUGFyZW50UG9zaXRpb25zKCl9KX1fZ2V0U2hhZG93Um9vdCgpe2lmKCF0aGlzLl9jYWNoZWRTaGFkb3dSb290KXtjb25zdCBjPUs1ZSgkMCh0'@;
put 'aGlzLmVsZW1lbnQpKTt0aGlzLl9jYWNoZWRTaGFkb3dSb290PWN8fHRoaXMuX2RvY3VtZW50fXJldHVybiB0aGlzLl9jYWNoZWRTaGFkb3dSb290fV9ub3RpZnlSZWNlaXZpbmdTaWJsaW5ncygpe2NvbnN0IGM9dGhpcy5fc29ydFN0cmF0ZWd5LmdldEFjdGl2ZUl0ZW1zU25hcHNob3QoKS5m'@;
put 'aWx0ZXIoYT0+YS5pc0RyYWdnaW5nKCkpO3RoaXMuX3NpYmxpbmdzLmZvckVhY2goYT0+YS5fc3RhcnRSZWNlaXZpbmcodGhpcyxjKSl9fWZ1bmN0aW9uIG02ZShsLGMpe2NvbnN0e3RvcDphLGJvdHRvbTpmLGhlaWdodDpkfT1sLGg9LjA1KmQ7cmV0dXJuIGM+PWEtaCYmYzw9YStoPzE6Yz49'@;
put 'Zi1oJiZjPD1mK2g/MjowfWZ1bmN0aW9uIGc2ZShsLGMpe2NvbnN0e2xlZnQ6YSxyaWdodDpmLHdpZHRoOmR9PWwsaD0uMDUqZDtyZXR1cm4gYz49YS1oJiZjPD1hK2g/MTpjPj1mLWgmJmM8PWYraD8yOjB9Y29uc3QgJFA9VUUoe3Bhc3NpdmU6ITEsY2FwdHVyZTohMH0pO2xldCBBa3Q9KCgp'@;
put 'PT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhLGYpe3RoaXMuX25nWm9uZT1hLHRoaXMuX2Ryb3BJbnN0YW5jZXM9bmV3IFNldCx0aGlzLl9kcmFnSW5zdGFuY2VzPW5ldyBTZXQsdGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcz1bXSx0aGlzLl9nbG9iYWxMaXN0ZW5lcnM9bmV3IE1hcCx0aGlzLl9k'@;
put 'cmFnZ2luZ1ByZWRpY2F0ZT1kPT5kLmlzRHJhZ2dpbmcoKSx0aGlzLnBvaW50ZXJNb3ZlPW5ldyB3ZSx0aGlzLnBvaW50ZXJVcD1uZXcgd2UsdGhpcy5zY3JvbGw9bmV3IHdlLHRoaXMuX3ByZXZlbnREZWZhdWx0V2hpbGVEcmFnZ2luZz1kPT57dGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5s'@;
put 'ZW5ndGg+MCYmZC5wcmV2ZW50RGVmYXVsdCgpfSx0aGlzLl9wZXJzaXN0ZW50VG91Y2htb3ZlTGlzdGVuZXI9ZD0+e3RoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMubGVuZ3RoPjAmJih0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLnNvbWUodGhpcy5fZHJhZ2dpbmdQcmVkaWNhdGUpJiZkLnBy'@;
put 'ZXZlbnREZWZhdWx0KCksdGhpcy5wb2ludGVyTW92ZS5uZXh0KGQpKX0sdGhpcy5fZG9jdW1lbnQ9Zn1yZWdpc3RlckRyb3BDb250YWluZXIoYSl7dGhpcy5fZHJvcEluc3RhbmNlcy5oYXMoYSl8fHRoaXMuX2Ryb3BJbnN0YW5jZXMuYWRkKGEpfXJlZ2lzdGVyRHJhZ0l0ZW0oYSl7dGhpcy5f'@;
put 'ZHJhZ0luc3RhbmNlcy5hZGQoYSksMT09PXRoaXMuX2RyYWdJbnN0YW5jZXMuc2l6ZSYmdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix0aGlzLl9wZXJzaXN0ZW50VG91Y2htb3ZlTGlzdGVuZXIs'@;
put 'JFApfSl9cmVtb3ZlRHJvcENvbnRhaW5lcihhKXt0aGlzLl9kcm9wSW5zdGFuY2VzLmRlbGV0ZShhKX1yZW1vdmVEcmFnSXRlbShhKXt0aGlzLl9kcmFnSW5zdGFuY2VzLmRlbGV0ZShhKSx0aGlzLnN0b3BEcmFnZ2luZyhhKSwwPT09dGhpcy5fZHJhZ0luc3RhbmNlcy5zaXplJiZ0aGlzLl9k'@;
put 'b2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHRoaXMuX3BlcnNpc3RlbnRUb3VjaG1vdmVMaXN0ZW5lciwkUCl9c3RhcnREcmFnZ2luZyhhLGYpe2lmKCEodGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5pbmRleE9mKGEpPi0xKSYmKHRoaXMuX2FjdGl2ZURyYWdJbnN0'@;
put 'YW5jZXMucHVzaChhKSwxPT09dGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5sZW5ndGgpKXtjb25zdCBkPWYudHlwZS5zdGFydHNXaXRoKCJ0b3VjaCIpO3RoaXMuX2dsb2JhbExpc3RlbmVycy5zZXQoZD8idG91Y2hlbmQiOiJtb3VzZXVwIix7aGFuZGxlcjpoPT50aGlzLnBvaW50ZXJVcC5u'@;
put 'ZXh0KGgpLG9wdGlvbnM6ITB9KS5zZXQoInNjcm9sbCIse2hhbmRsZXI6aD0+dGhpcy5zY3JvbGwubmV4dChoKSxvcHRpb25zOiEwfSkuc2V0KCJzZWxlY3RzdGFydCIse2hhbmRsZXI6dGhpcy5fcHJldmVudERlZmF1bHRXaGlsZURyYWdnaW5nLG9wdGlvbnM6JFB9KSxkfHx0aGlzLl9nbG9i'@;
put 'YWxMaXN0ZW5lcnMuc2V0KCJtb3VzZW1vdmUiLHtoYW5kbGVyOmg9PnRoaXMucG9pbnRlck1vdmUubmV4dChoKSxvcHRpb25zOiRQfSksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fZ2xvYmFsTGlzdGVuZXJzLmZvckVhY2goKGgsbSk9Pnt0aGlzLl9kb2N1bWVu'@;
put 'dC5hZGRFdmVudExpc3RlbmVyKG0saC5oYW5kbGVyLGgub3B0aW9ucyl9KX0pfX1zdG9wRHJhZ2dpbmcoYSl7Y29uc3QgZj10aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLmluZGV4T2YoYSk7Zj4tMSYmKHRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMuc3BsaWNlKGYsMSksMD09PXRoaXMuX2Fj'@;
put 'dGl2ZURyYWdJbnN0YW5jZXMubGVuZ3RoJiZ0aGlzLl9jbGVhckdsb2JhbExpc3RlbmVycygpKX1pc0RyYWdnaW5nKGEpe3JldHVybiB0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLmluZGV4T2YoYSk+LTF9c2Nyb2xsZWQoYSl7Y29uc3QgZj1bdGhpcy5zY3JvbGxdO3JldHVybiBhJiZhIT09'@;
put 'dGhpcy5fZG9jdW1lbnQmJmYucHVzaChuZXcgQmUoZD0+dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57Y29uc3QgbT1fPT57dGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5sZW5ndGgmJmQubmV4dChfKX07cmV0dXJuIGEuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIixtLCEw'@;
put 'KSwoKT0+e2EucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIixtLCEwKX19KSkpLHNhKC4uLmYpfW5nT25EZXN0cm95KCl7dGhpcy5fZHJhZ0luc3RhbmNlcy5mb3JFYWNoKGE9PnRoaXMucmVtb3ZlRHJhZ0l0ZW0oYSkpLHRoaXMuX2Ryb3BJbnN0YW5jZXMuZm9yRWFjaChhPT50aGlzLnJl'@;
put 'bW92ZURyb3BDb250YWluZXIoYSkpLHRoaXMuX2NsZWFyR2xvYmFsTGlzdGVuZXJzKCksdGhpcy5wb2ludGVyTW92ZS5jb21wbGV0ZSgpLHRoaXMucG9pbnRlclVwLmNvbXBsZXRlKCl9X2NsZWFyR2xvYmFsTGlzdGVuZXJzKCl7dGhpcy5fZ2xvYmFsTGlzdGVuZXJzLmZvckVhY2goKGEsZik9'@;
put 'Pnt0aGlzLl9kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGYsYS5oYW5kbGVyLGEub3B0aW9ucyl9KSx0aGlzLl9nbG9iYWxMaXN0ZW5lcnMuY2xlYXIoKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkoc3IoVW8pLHNyKEZhKSl9LGwuXHUwMjc1'@;
put 'cHJvdj1ocih7dG9rZW46bCxmYWN0b3J5OmwuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbH0pKCk7Y29uc3QgVGt0PXtkcmFnU3RhcnRUaHJlc2hvbGQ6NSxwb2ludGVyRGlyZWN0aW9uQ2hhbmdlVGhyZXNob2xkOjV9O2xldCBSSj0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEs'@;
put 'ZixkLGgpe3RoaXMuX2RvY3VtZW50PWEsdGhpcy5fbmdab25lPWYsdGhpcy5fdmlld3BvcnRSdWxlcj1kLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnk9aH1jcmVhdGVEcmFnKGEsZj1Ua3Qpe3JldHVybiBuZXcgU2t0KGEsZix0aGlzLl9kb2N1bWVudCx0aGlzLl9uZ1pvbmUsdGhpcy5fdmlld3Bv'@;
put 'cnRSdWxlcix0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5KX1jcmVhdGVEcm9wTGlzdChhKXtyZXR1cm4gbmV3IEVrdChhLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnksdGhpcy5fZG9jdW1lbnQsdGhpcy5fbmdab25lLHRoaXMuX3ZpZXdwb3J0UnVsZXIpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rp'@;
put 'b24oYSl7cmV0dXJuIG5ldyhhfHxsKShzcihGYSksc3IoVW8pLHNyKEpNdCksc3IoQWt0KSl9LGwuXHUwMjc1cHJvdj1ocih7dG9rZW46bCxmYWN0b3J5OmwuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbH0pKCk7Y29uc3QgTEo9bmV3IE1pKCJDREtfRFJBR19QQVJFTlQiKSxQSj1u'@;
put 'ZXcgTWkoIkNka0Ryb3BMaXN0R3JvdXAiKTtsZXQgdjZlPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoKXt0aGlzLl9pdGVtcz1uZXcgU2V0LHRoaXMuX2Rpc2FibGVkPSExfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoYSl7dGhpcy5fZGlzYWJs'@;
put 'ZWQ9YW0oYSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9pdGVtcy5jbGVhcigpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVkaXI9U3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siIiwiY2RrRHJvcExpc3RHcm91cCIsIiJdXSxpbnB1dHM6e2Rp'@;
put 'c2FibGVkOlsiY2RrRHJvcExpc3RHcm91cERpc2FibGVkIiwiZGlzYWJsZWQiXX0sZXhwb3J0QXM6WyJjZGtEcm9wTGlzdEdyb3VwIl0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbcmkoW3twcm92aWRlOlBKLHVzZUV4aXN0aW5nOmx9XSldfSksbH0pKCk7Y29uc3QgeTZlPW5ldyBNaSgiQ0RL'@;
put 'X0RSQUdfQ09ORklHIik7bGV0IE9rdD0wO2NvbnN0IGI2ZT1uZXcgTWkoIkNka0Ryb3BMaXN0Iik7bGV0IF82ZT0oKCk9PntjbGFzcyBse2dldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZHx8ISF0aGlzLl9ncm91cCYmdGhpcy5fZ3JvdXAuZGlzYWJsZWR9c2V0IGRpc2FibGVk'@;
put 'KGEpe3RoaXMuX2Ryb3BMaXN0UmVmLmRpc2FibGVkPXRoaXMuX2Rpc2FibGVkPWFtKGEpfWNvbnN0cnVjdG9yKGEsZixkLGgsbSxfLE8pe3RoaXMuZWxlbWVudD1hLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWQsdGhpcy5fc2Nyb2xsRGlzcGF0Y2hlcj1oLHRoaXMuX2Rpcj1tLHRoaXMuX2dy'@;
put 'b3VwPV8sdGhpcy5fZGVzdHJveWVkPW5ldyB3ZSx0aGlzLmNvbm5lY3RlZFRvPVtdLHRoaXMuaWQ9ImNkay1kcm9wLWxpc3QtIitPa3QrKyx0aGlzLmVudGVyUHJlZGljYXRlPSgpPT4hMCx0aGlzLnNvcnRQcmVkaWNhdGU9KCk9PiEwLHRoaXMuZHJvcHBlZD1uZXcgeHIsdGhpcy5lbnRlcmVk'@;
put 'PW5ldyB4cix0aGlzLmV4aXRlZD1uZXcgeHIsdGhpcy5zb3J0ZWQ9bmV3IHhyLHRoaXMuX3Vuc29ydGVkSXRlbXM9bmV3IFNldCx0aGlzLl9kcm9wTGlzdFJlZj1mLmNyZWF0ZURyb3BMaXN0KGEpLHRoaXMuX2Ryb3BMaXN0UmVmLmRhdGE9dGhpcyxPJiZ0aGlzLl9hc3NpZ25EZWZhdWx0cyhP'@;
put 'KSx0aGlzLl9kcm9wTGlzdFJlZi5lbnRlclByZWRpY2F0ZT0oWCxhZSk9PnRoaXMuZW50ZXJQcmVkaWNhdGUoWC5kYXRhLGFlLmRhdGEpLHRoaXMuX2Ryb3BMaXN0UmVmLnNvcnRQcmVkaWNhdGU9KFgsYWUscGUpPT50aGlzLnNvcnRQcmVkaWNhdGUoWCxhZS5kYXRhLHBlLmRhdGEpLHRoaXMu'@;
put 'X3NldHVwSW5wdXRTeW5jU3Vic2NyaXB0aW9uKHRoaXMuX2Ryb3BMaXN0UmVmKSx0aGlzLl9oYW5kbGVFdmVudHModGhpcy5fZHJvcExpc3RSZWYpLGwuX2Ryb3BMaXN0cy5wdXNoKHRoaXMpLF8mJl8uX2l0ZW1zLmFkZCh0aGlzKX1hZGRJdGVtKGEpe3RoaXMuX3Vuc29ydGVkSXRlbXMuYWRk'@;
put 'KGEpLHRoaXMuX2Ryb3BMaXN0UmVmLmlzRHJhZ2dpbmcoKSYmdGhpcy5fc3luY0l0ZW1zV2l0aFJlZigpfXJlbW92ZUl0ZW0oYSl7dGhpcy5fdW5zb3J0ZWRJdGVtcy5kZWxldGUoYSksdGhpcy5fZHJvcExpc3RSZWYuaXNEcmFnZ2luZygpJiZ0aGlzLl9zeW5jSXRlbXNXaXRoUmVmKCl9Z2V0'@;
put 'U29ydGVkSXRlbXMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl91bnNvcnRlZEl0ZW1zKS5zb3J0KChhLGYpPT5hLl9kcmFnUmVmLmdldFZpc2libGVFbGVtZW50KCkuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZi5fZHJhZ1JlZi5nZXRWaXNpYmxlRWxlbWVudCgpKSZOb2RlLkRPQ1VNRU5U'@;
put 'X1BPU0lUSU9OX0ZPTExPV0lORz8tMToxKX1uZ09uRGVzdHJveSgpe2NvbnN0IGE9bC5fZHJvcExpc3RzLmluZGV4T2YodGhpcyk7YT4tMSYmbC5fZHJvcExpc3RzLnNwbGljZShhLDEpLHRoaXMuX2dyb3VwJiZ0aGlzLl9ncm91cC5faXRlbXMuZGVsZXRlKHRoaXMpLHRoaXMuX3Vuc29ydGVk'@;
put 'SXRlbXMuY2xlYXIoKSx0aGlzLl9kcm9wTGlzdFJlZi5kaXNwb3NlKCksdGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKX1fc2V0dXBJbnB1dFN5bmNTdWJzY3JpcHRpb24oYSl7dGhpcy5fZGlyJiZ0aGlzLl9kaXIuY2hhbmdlLnBpcGUodDQodGhpcy5f'@;
put 'ZGlyLnZhbHVlKSxBaCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoZj0+YS53aXRoRGlyZWN0aW9uKGYpKSxhLmJlZm9yZVN0YXJ0ZWQuc3Vic2NyaWJlKCgpPT57Y29uc3QgZj1mdW5jdGlvbiBGTXQobCl7cmV0dXJuIEFycmF5LmlzQXJyYXkobCk/bDpbbF19KHRoaXMuY29ubmVjdGVk'@;
put 'VG8pLm1hcChkPT4ic3RyaW5nIj09dHlwZW9mIGQ/bC5fZHJvcExpc3RzLmZpbmQobT0+bS5pZD09PWQpOmQpO2lmKHRoaXMuX2dyb3VwJiZ0aGlzLl9ncm91cC5faXRlbXMuZm9yRWFjaChkPT57LTE9PT1mLmluZGV4T2YoZCkmJmYucHVzaChkKX0pLCF0aGlzLl9zY3JvbGxhYmxlUGFyZW50'@;
put 'c1Jlc29sdmVkKXtjb25zdCBkPXRoaXMuX3Njcm9sbERpc3BhdGNoZXIuZ2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzKHRoaXMuZWxlbWVudCkubWFwKGg9PmguZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQpO3RoaXMuX2Ryb3BMaXN0UmVmLndpdGhTY3JvbGxhYmxlUGFyZW50cyhk'@;
put 'KSx0aGlzLl9zY3JvbGxhYmxlUGFyZW50c1Jlc29sdmVkPSEwfWEuZGlzYWJsZWQ9dGhpcy5kaXNhYmxlZCxhLmxvY2tBeGlzPXRoaXMubG9ja0F4aXMsYS5zb3J0aW5nRGlzYWJsZWQ9YW0odGhpcy5zb3J0aW5nRGlzYWJsZWQpLGEuYXV0b1Njcm9sbERpc2FibGVkPWFtKHRoaXMuYXV0b1Nj'@;
put 'cm9sbERpc2FibGVkKSxhLmF1dG9TY3JvbGxTdGVwPVU1ZSh0aGlzLmF1dG9TY3JvbGxTdGVwLDIpLGEuY29ubmVjdGVkVG8oZi5maWx0ZXIoZD0+ZCYmZCE9PXRoaXMpLm1hcChkPT5kLl9kcm9wTGlzdFJlZikpLndpdGhPcmllbnRhdGlvbih0aGlzLm9yaWVudGF0aW9uKX0pfV9oYW5kbGVF'@;
put 'dmVudHMoYSl7YS5iZWZvcmVTdGFydGVkLnN1YnNjcmliZSgoKT0+e3RoaXMuX3N5bmNJdGVtc1dpdGhSZWYoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLGEuZW50ZXJlZC5zdWJzY3JpYmUoZj0+e3RoaXMuZW50ZXJlZC5lbWl0KHtjb250YWluZXI6dGhpcyxp'@;
put 'dGVtOmYuaXRlbS5kYXRhLGN1cnJlbnRJbmRleDpmLmN1cnJlbnRJbmRleH0pfSksYS5leGl0ZWQuc3Vic2NyaWJlKGY9Pnt0aGlzLmV4aXRlZC5lbWl0KHtjb250YWluZXI6dGhpcyxpdGVtOmYuaXRlbS5kYXRhfSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSxh'@;
put 'LnNvcnRlZC5zdWJzY3JpYmUoZj0+e3RoaXMuc29ydGVkLmVtaXQoe3ByZXZpb3VzSW5kZXg6Zi5wcmV2aW91c0luZGV4LGN1cnJlbnRJbmRleDpmLmN1cnJlbnRJbmRleCxjb250YWluZXI6dGhpcyxpdGVtOmYuaXRlbS5kYXRhfSl9KSxhLmRyb3BwZWQuc3Vic2NyaWJlKGY9Pnt0aGlzLmRy'@;
put 'b3BwZWQuZW1pdCh7cHJldmlvdXNJbmRleDpmLnByZXZpb3VzSW5kZXgsY3VycmVudEluZGV4OmYuY3VycmVudEluZGV4LHByZXZpb3VzQ29udGFpbmVyOmYucHJldmlvdXNDb250YWluZXIuZGF0YSxjb250YWluZXI6Zi5jb250YWluZXIuZGF0YSxpdGVtOmYuaXRlbS5kYXRhLGlzUG9pbnRl'@;
put 'ck92ZXJDb250YWluZXI6Zi5pc1BvaW50ZXJPdmVyQ29udGFpbmVyLGRpc3RhbmNlOmYuZGlzdGFuY2UsZHJvcFBvaW50OmYuZHJvcFBvaW50LGV2ZW50OmYuZXZlbnR9KSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLHNhKGEucmVjZWl2aW5nU3RhcnRlZCxhLnJl'@;
put 'Y2VpdmluZ1N0b3BwZWQpLnN1YnNjcmliZSgoKT0+dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfV9hc3NpZ25EZWZhdWx0cyhhKXtjb25zdHtsb2NrQXhpczpmLGRyYWdnaW5nRGlzYWJsZWQ6ZCxzb3J0aW5nRGlzYWJsZWQ6aCxsaXN0QXV0b1Njcm9sbERpc2FibGVk'@;
put 'Om0sbGlzdE9yaWVudGF0aW9uOl99PWE7dGhpcy5kaXNhYmxlZD1kPz8hMSx0aGlzLnNvcnRpbmdEaXNhYmxlZD1oPz8hMSx0aGlzLmF1dG9TY3JvbGxEaXNhYmxlZD1tPz8hMSx0aGlzLm9yaWVudGF0aW9uPV98fCJ2ZXJ0aWNhbCIsZiYmKHRoaXMubG9ja0F4aXM9Zil9X3N5bmNJdGVtc1dp'@;
put 'dGhSZWYoKXt0aGlzLl9kcm9wTGlzdFJlZi53aXRoSXRlbXModGhpcy5nZXRTb3J0ZWRJdGVtcygpLm1hcChhPT5hLl9kcmFnUmVmKSl9fXJldHVybiBsLl9kcm9wTGlzdHM9W10sbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChWaSkscnQoUkopLHJ0KFVsKSxy'@;
put 'dChxTXQpLHJ0KFE1ZSw4KSxydChQSiwxMikscnQoeTZlLDgpKX0sbC5cdTAyNzVkaXI9U3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siIiwiY2RrRHJvcExpc3QiLCIiXSxbImNkay1kcm9wLWxpc3QiXV0saG9zdEF0dHJzOlsxLCJjZGstZHJvcC1saXN0Il0saG9zdFZhcnM6Nyxob3N0QmluZGlu'@;
put 'Z3M6ZnVuY3Rpb24oYSxmKXsyJmEmJihScigiaWQiLGYuaWQpLGdyKCJjZGstZHJvcC1saXN0LWRpc2FibGVkIixmLmRpc2FibGVkKSgiY2RrLWRyb3AtbGlzdC1kcmFnZ2luZyIsZi5fZHJvcExpc3RSZWYuaXNEcmFnZ2luZygpKSgiY2RrLWRyb3AtbGlzdC1yZWNlaXZpbmciLGYuX2Ryb3BM'@;
put 'aXN0UmVmLmlzUmVjZWl2aW5nKCkpKX0saW5wdXRzOntjb25uZWN0ZWRUbzpbImNka0Ryb3BMaXN0Q29ubmVjdGVkVG8iLCJjb25uZWN0ZWRUbyJdLGRhdGE6WyJjZGtEcm9wTGlzdERhdGEiLCJkYXRhIl0sb3JpZW50YXRpb246WyJjZGtEcm9wTGlzdE9yaWVudGF0aW9uIiwib3JpZW50YXRp'@;
put 'b24iXSxpZDoiaWQiLGxvY2tBeGlzOlsiY2RrRHJvcExpc3RMb2NrQXhpcyIsImxvY2tBeGlzIl0sZGlzYWJsZWQ6WyJjZGtEcm9wTGlzdERpc2FibGVkIiwiZGlzYWJsZWQiXSxzb3J0aW5nRGlzYWJsZWQ6WyJjZGtEcm9wTGlzdFNvcnRpbmdEaXNhYmxlZCIsInNvcnRpbmdEaXNhYmxlZCJd'@;
put 'LGVudGVyUHJlZGljYXRlOlsiY2RrRHJvcExpc3RFbnRlclByZWRpY2F0ZSIsImVudGVyUHJlZGljYXRlIl0sc29ydFByZWRpY2F0ZTpbImNka0Ryb3BMaXN0U29ydFByZWRpY2F0ZSIsInNvcnRQcmVkaWNhdGUiXSxhdXRvU2Nyb2xsRGlzYWJsZWQ6WyJjZGtEcm9wTGlzdEF1dG9TY3JvbGxE'@;
put 'aXNhYmxlZCIsImF1dG9TY3JvbGxEaXNhYmxlZCJdLGF1dG9TY3JvbGxTdGVwOlsiY2RrRHJvcExpc3RBdXRvU2Nyb2xsU3RlcCIsImF1dG9TY3JvbGxTdGVwIl19LG91dHB1dHM6e2Ryb3BwZWQ6ImNka0Ryb3BMaXN0RHJvcHBlZCIsZW50ZXJlZDoiY2RrRHJvcExpc3RFbnRlcmVkIixleGl0'@;
put 'ZWQ6ImNka0Ryb3BMaXN0RXhpdGVkIixzb3J0ZWQ6ImNka0Ryb3BMaXN0U29ydGVkIn0sZXhwb3J0QXM6WyJjZGtEcm9wTGlzdCJdLHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W3JpKFt7cHJvdmlkZTpQSix1c2VWYWx1ZTp2b2lkIDB9LHtwcm92aWRlOmI2ZSx1c2VFeGlzdGluZzpsfV0pXX0p'@;
put 'LGx9KSgpO2NvbnN0IEZKPW5ldyBNaSgiQ2RrRHJhZ0hhbmRsZSIpO2xldCB3NmU9KCgpPT57Y2xhc3MgbHtnZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9c2V0IGRpc2FibGVkKGEpe3RoaXMuX2Rpc2FibGVkPWFtKGEpLHRoaXMuX3N0YXRlQ2hhbmdlcy5uZXh0KHRoaXMp'@;
put 'fWNvbnN0cnVjdG9yKGEsZil7dGhpcy5lbGVtZW50PWEsdGhpcy5fc3RhdGVDaGFuZ2VzPW5ldyB3ZSx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl9wYXJlbnREcmFnPWZ9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdGF0ZUNoYW5nZXMuY29tcGxldGUoKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0'@;
put 'aW9uKGEpe3JldHVybiBuZXcoYXx8bCkocnQoVmkpLHJ0KExKLDEyKSl9LGwuXHUwMjc1ZGlyPVNyKHt0eXBlOmwsc2VsZWN0b3JzOltbIiIsImNka0RyYWdIYW5kbGUiLCIiXV0saG9zdEF0dHJzOlsxLCJjZGstZHJhZy1oYW5kbGUiXSxpbnB1dHM6e2Rpc2FibGVkOlsiY2RrRHJhZ0hhbmRs'@;
put 'ZURpc2FibGVkIiwiZGlzYWJsZWQiXX0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbcmkoW3twcm92aWRlOkZKLHVzZUV4aXN0aW5nOmx9XSldfSksbH0pKCk7Y29uc3QgQzZlPW5ldyBNaSgiQ2RrRHJhZ1BsYWNlaG9sZGVyIiksUzZlPW5ldyBNaSgiQ2RrRHJhZ1ByZXZpZXciKTtsZXQgTTZl'@;
put 'PSgoKT0+e2NsYXNzIGx7Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfHx0aGlzLmRyb3BDb250YWluZXImJnRoaXMuZHJvcENvbnRhaW5lci5kaXNhYmxlZH1zZXQgZGlzYWJsZWQoYSl7dGhpcy5fZGlzYWJsZWQ9YW0oYSksdGhpcy5fZHJhZ1JlZi5kaXNhYmxlZD10aGlz'@;
put 'Ll9kaXNhYmxlZH1jb25zdHJ1Y3RvcihhLGYsZCxoLG0sXyxPLFgsYWUscGUsYmUpe3RoaXMuZWxlbWVudD1hLHRoaXMuZHJvcENvbnRhaW5lcj1mLHRoaXMuX25nWm9uZT1oLHRoaXMuX3ZpZXdDb250YWluZXJSZWY9bSx0aGlzLl9kaXI9Tyx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1hZSx0'@;
put 'aGlzLl9zZWxmSGFuZGxlPXBlLHRoaXMuX3BhcmVudERyYWc9YmUsdGhpcy5fZGVzdHJveWVkPW5ldyB3ZSx0aGlzLnN0YXJ0ZWQ9bmV3IHhyLHRoaXMucmVsZWFzZWQ9bmV3IHhyLHRoaXMuZW5kZWQ9bmV3IHhyLHRoaXMuZW50ZXJlZD1uZXcgeHIsdGhpcy5leGl0ZWQ9bmV3IHhyLHRoaXMu'@;
put 'ZHJvcHBlZD1uZXcgeHIsdGhpcy5tb3ZlZD1uZXcgQmUoeGU9Pntjb25zdCBWZT10aGlzLl9kcmFnUmVmLm1vdmVkLnBpcGUoRWUoWmU9Pih7c291cmNlOnRoaXMscG9pbnRlclBvc2l0aW9uOlplLnBvaW50ZXJQb3NpdGlvbixldmVudDpaZS5ldmVudCxkZWx0YTpaZS5kZWx0YSxkaXN0YW5j'@;
put 'ZTpaZS5kaXN0YW5jZX0pKSkuc3Vic2NyaWJlKHhlKTtyZXR1cm4oKT0+e1ZlLnVuc3Vic2NyaWJlKCl9fSksdGhpcy5fZHJhZ1JlZj1YLmNyZWF0ZURyYWcoYSx7ZHJhZ1N0YXJ0VGhyZXNob2xkOl8mJm51bGwhPV8uZHJhZ1N0YXJ0VGhyZXNob2xkP18uZHJhZ1N0YXJ0VGhyZXNob2xkOjUs'@;
put 'cG9pbnRlckRpcmVjdGlvbkNoYW5nZVRocmVzaG9sZDpfJiZudWxsIT1fLnBvaW50ZXJEaXJlY3Rpb25DaGFuZ2VUaHJlc2hvbGQ/Xy5wb2ludGVyRGlyZWN0aW9uQ2hhbmdlVGhyZXNob2xkOjUsekluZGV4Ol8/LnpJbmRleH0pLHRoaXMuX2RyYWdSZWYuZGF0YT10aGlzLGwuX2RyYWdJbnN0'@;
put 'YW5jZXMucHVzaCh0aGlzKSxfJiZ0aGlzLl9hc3NpZ25EZWZhdWx0cyhfKSxmJiYodGhpcy5fZHJhZ1JlZi5fd2l0aERyb3BDb250YWluZXIoZi5fZHJvcExpc3RSZWYpLGYuYWRkSXRlbSh0aGlzKSksdGhpcy5fc3luY0lucHV0cyh0aGlzLl9kcmFnUmVmKSx0aGlzLl9oYW5kbGVFdmVudHMo'@;
put 'dGhpcy5fZHJhZ1JlZil9Z2V0UGxhY2Vob2xkZXJFbGVtZW50KCl7cmV0dXJuIHRoaXMuX2RyYWdSZWYuZ2V0UGxhY2Vob2xkZXJFbGVtZW50KCl9Z2V0Um9vdEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fZHJhZ1JlZi5nZXRSb290RWxlbWVudCgpfXJlc2V0KCl7dGhpcy5fZHJhZ1JlZi5yZXNl'@;
put 'dCgpfWdldEZyZWVEcmFnUG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fZHJhZ1JlZi5nZXRGcmVlRHJhZ1Bvc2l0aW9uKCl9c2V0RnJlZURyYWdQb3NpdGlvbihhKXt0aGlzLl9kcmFnUmVmLnNldEZyZWVEcmFnUG9zaXRpb24oYSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fbmdab25lLnJ1bk91'@;
put 'dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fbmdab25lLm9uU3RhYmxlLnBpcGUoRWYoMSksQWgodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fdXBkYXRlUm9vdEVsZW1lbnQoKSx0aGlzLl9zZXR1cEhhbmRsZXNMaXN0ZW5lcigpLHRoaXMuZnJlZURyYWdQb3NpdGlvbiYm'@;
put 'dGhpcy5fZHJhZ1JlZi5zZXRGcmVlRHJhZ1Bvc2l0aW9uKHRoaXMuZnJlZURyYWdQb3NpdGlvbil9KX0pfW5nT25DaGFuZ2VzKGEpe2NvbnN0IGY9YS5yb290RWxlbWVudFNlbGVjdG9yLGQ9YS5mcmVlRHJhZ1Bvc2l0aW9uO2YmJiFmLmZpcnN0Q2hhbmdlJiZ0aGlzLl91cGRhdGVSb290RWxl'@;
put 'bWVudCgpLGQmJiFkLmZpcnN0Q2hhbmdlJiZ0aGlzLmZyZWVEcmFnUG9zaXRpb24mJnRoaXMuX2RyYWdSZWYuc2V0RnJlZURyYWdQb3NpdGlvbih0aGlzLmZyZWVEcmFnUG9zaXRpb24pfW5nT25EZXN0cm95KCl7dGhpcy5kcm9wQ29udGFpbmVyJiZ0aGlzLmRyb3BDb250YWluZXIucmVtb3Zl'@;
put 'SXRlbSh0aGlzKTtjb25zdCBhPWwuX2RyYWdJbnN0YW5jZXMuaW5kZXhPZih0aGlzKTthPi0xJiZsLl9kcmFnSW5zdGFuY2VzLnNwbGljZShhLDEpLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2Rlc3Ryb3llZC5uZXh0KCksdGhpcy5fZGVzdHJveWVkLmNvbXBs'@;
put 'ZXRlKCksdGhpcy5fZHJhZ1JlZi5kaXNwb3NlKCl9KX1fdXBkYXRlUm9vdEVsZW1lbnQoKXtjb25zdCBhPXRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50O2xldCBmPWE7dGhpcy5yb290RWxlbWVudFNlbGVjdG9yJiYoZj12b2lkIDAhPT1hLmNsb3Nlc3Q/YS5jbG9zZXN0KHRoaXMucm9vdEVs'@;
put 'ZW1lbnRTZWxlY3Rvcik6YS5wYXJlbnRFbGVtZW50Py5jbG9zZXN0KHRoaXMucm9vdEVsZW1lbnRTZWxlY3RvcikpLHRoaXMuX2RyYWdSZWYud2l0aFJvb3RFbGVtZW50KGZ8fGEpfV9nZXRCb3VuZGFyeUVsZW1lbnQoKXtjb25zdCBhPXRoaXMuYm91bmRhcnlFbGVtZW50O3JldHVybiBhPyJz'@;
put 'dHJpbmciPT10eXBlb2YgYT90aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5jbG9zZXN0KGEpOiQwKGEpOm51bGx9X3N5bmNJbnB1dHMoYSl7YS5iZWZvcmVTdGFydGVkLnN1YnNjcmliZSgoKT0+e2lmKCFhLmlzRHJhZ2dpbmcoKSl7Y29uc3QgZj10aGlzLl9kaXIsZD10aGlzLmRyYWdTdGFy'@;
put 'dERlbGF5LGg9dGhpcy5fcGxhY2Vob2xkZXJUZW1wbGF0ZT97dGVtcGxhdGU6dGhpcy5fcGxhY2Vob2xkZXJUZW1wbGF0ZS50ZW1wbGF0ZVJlZixjb250ZXh0OnRoaXMuX3BsYWNlaG9sZGVyVGVtcGxhdGUuZGF0YSx2aWV3Q29udGFpbmVyOnRoaXMuX3ZpZXdDb250YWluZXJSZWZ9Om51bGws'@;
put 'bT10aGlzLl9wcmV2aWV3VGVtcGxhdGU/e3RlbXBsYXRlOnRoaXMuX3ByZXZpZXdUZW1wbGF0ZS50ZW1wbGF0ZVJlZixjb250ZXh0OnRoaXMuX3ByZXZpZXdUZW1wbGF0ZS5kYXRhLG1hdGNoU2l6ZTp0aGlzLl9wcmV2aWV3VGVtcGxhdGUubWF0Y2hTaXplLHZpZXdDb250YWluZXI6dGhpcy5f'@;
put 'dmlld0NvbnRhaW5lclJlZn06bnVsbDthLmRpc2FibGVkPXRoaXMuZGlzYWJsZWQsYS5sb2NrQXhpcz10aGlzLmxvY2tBeGlzLGEuZHJhZ1N0YXJ0RGVsYXk9Im9iamVjdCI9PXR5cGVvZiBkJiZkP2Q6VTVlKGQpLGEuY29uc3RyYWluUG9zaXRpb249dGhpcy5jb25zdHJhaW5Qb3NpdGlvbixh'@;
put 'LnByZXZpZXdDbGFzcz10aGlzLnByZXZpZXdDbGFzcyxhLndpdGhCb3VuZGFyeUVsZW1lbnQodGhpcy5fZ2V0Qm91bmRhcnlFbGVtZW50KCkpLndpdGhQbGFjZWhvbGRlclRlbXBsYXRlKGgpLndpdGhQcmV2aWV3VGVtcGxhdGUobSkud2l0aFByZXZpZXdDb250YWluZXIodGhpcy5wcmV2aWV3'@;
put 'Q29udGFpbmVyfHwiZ2xvYmFsIiksZiYmYS53aXRoRGlyZWN0aW9uKGYudmFsdWUpfX0pLGEuYmVmb3JlU3RhcnRlZC5waXBlKEVmKDEpKS5zdWJzY3JpYmUoKCk9PntpZih0aGlzLl9wYXJlbnREcmFnKXJldHVybiB2b2lkIGEud2l0aFBhcmVudCh0aGlzLl9wYXJlbnREcmFnLl9kcmFnUmVm'@;
put 'KTtsZXQgZj10aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50O2Zvcig7Zjspe2lmKGYuY2xhc3NMaXN0LmNvbnRhaW5zKCJjZGstZHJhZyIpKXthLndpdGhQYXJlbnQobC5fZHJhZ0luc3RhbmNlcy5maW5kKGQ9PmQuZWxlbWVudC5uYXRpdmVFbGVtZW50PT09Zik/Ll9k'@;
put 'cmFnUmVmfHxudWxsKTticmVha31mPWYucGFyZW50RWxlbWVudH19KX1faGFuZGxlRXZlbnRzKGEpe2Euc3RhcnRlZC5zdWJzY3JpYmUoZj0+e3RoaXMuc3RhcnRlZC5lbWl0KHtzb3VyY2U6dGhpcyxldmVudDpmLmV2ZW50fSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNr'@;
put 'KCl9KSxhLnJlbGVhc2VkLnN1YnNjcmliZShmPT57dGhpcy5yZWxlYXNlZC5lbWl0KHtzb3VyY2U6dGhpcyxldmVudDpmLmV2ZW50fSl9KSxhLmVuZGVkLnN1YnNjcmliZShmPT57dGhpcy5lbmRlZC5lbWl0KHtzb3VyY2U6dGhpcyxkaXN0YW5jZTpmLmRpc3RhbmNlLGRyb3BQb2ludDpmLmRy'@;
put 'b3BQb2ludCxldmVudDpmLmV2ZW50fSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSxhLmVudGVyZWQuc3Vic2NyaWJlKGY9Pnt0aGlzLmVudGVyZWQuZW1pdCh7Y29udGFpbmVyOmYuY29udGFpbmVyLmRhdGEsaXRlbTp0aGlzLGN1cnJlbnRJbmRleDpmLmN1cnJl'@;
put 'bnRJbmRleH0pfSksYS5leGl0ZWQuc3Vic2NyaWJlKGY9Pnt0aGlzLmV4aXRlZC5lbWl0KHtjb250YWluZXI6Zi5jb250YWluZXIuZGF0YSxpdGVtOnRoaXN9KX0pLGEuZHJvcHBlZC5zdWJzY3JpYmUoZj0+e3RoaXMuZHJvcHBlZC5lbWl0KHtwcmV2aW91c0luZGV4OmYucHJldmlvdXNJbmRl'@;
put 'eCxjdXJyZW50SW5kZXg6Zi5jdXJyZW50SW5kZXgscHJldmlvdXNDb250YWluZXI6Zi5wcmV2aW91c0NvbnRhaW5lci5kYXRhLGNvbnRhaW5lcjpmLmNvbnRhaW5lci5kYXRhLGlzUG9pbnRlck92ZXJDb250YWluZXI6Zi5pc1BvaW50ZXJPdmVyQ29udGFpbmVyLGl0ZW06dGhpcyxkaXN0YW5j'@;
put 'ZTpmLmRpc3RhbmNlLGRyb3BQb2ludDpmLmRyb3BQb2ludCxldmVudDpmLmV2ZW50fSl9KX1fYXNzaWduRGVmYXVsdHMoYSl7Y29uc3R7bG9ja0F4aXM6ZixkcmFnU3RhcnREZWxheTpkLGNvbnN0cmFpblBvc2l0aW9uOmgscHJldmlld0NsYXNzOm0sYm91bmRhcnlFbGVtZW50Ol8sZHJhZ2dp'@;
put 'bmdEaXNhYmxlZDpPLHJvb3RFbGVtZW50U2VsZWN0b3I6WCxwcmV2aWV3Q29udGFpbmVyOmFlfT1hO3RoaXMuZGlzYWJsZWQ9Tz8/ITEsdGhpcy5kcmFnU3RhcnREZWxheT1kfHwwLGYmJih0aGlzLmxvY2tBeGlzPWYpLGgmJih0aGlzLmNvbnN0cmFpblBvc2l0aW9uPWgpLG0mJih0aGlzLnBy'@;
put 'ZXZpZXdDbGFzcz1tKSxfJiYodGhpcy5ib3VuZGFyeUVsZW1lbnQ9XyksWCYmKHRoaXMucm9vdEVsZW1lbnRTZWxlY3Rvcj1YKSxhZSYmKHRoaXMucHJldmlld0NvbnRhaW5lcj1hZSl9X3NldHVwSGFuZGxlc0xpc3RlbmVyKCl7dGhpcy5faGFuZGxlcy5jaGFuZ2VzLnBpcGUodDQodGhpcy5f'@;
put 'aGFuZGxlcykscXUoYT0+e2NvbnN0IGY9YS5maWx0ZXIoZD0+ZC5fcGFyZW50RHJhZz09PXRoaXMpLm1hcChkPT5kLmVsZW1lbnQpO3RoaXMuX3NlbGZIYW5kbGUmJnRoaXMucm9vdEVsZW1lbnRTZWxlY3RvciYmZi5wdXNoKHRoaXMuZWxlbWVudCksdGhpcy5fZHJhZ1JlZi53aXRoSGFuZGxl'@;
put 'cyhmKX0pLGtsKGE9PnNhKC4uLmEubWFwKGY9PmYuX3N0YXRlQ2hhbmdlcy5waXBlKHQ0KGYpKSkpKSxBaCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoYT0+e2NvbnN0IGY9dGhpcy5fZHJhZ1JlZixkPWEuZWxlbWVudC5uYXRpdmVFbGVtZW50O2EuZGlzYWJsZWQ/Zi5kaXNhYmxlSGFu'@;
put 'ZGxlKGQpOmYuZW5hYmxlSGFuZGxlKGQpfSl9fXJldHVybiBsLl9kcmFnSW5zdGFuY2VzPVtdLGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkocnQoVmkpLHJ0KGI2ZSwxMikscnQoRmEpLHJ0KFVvKSxydChmYSkscnQoeTZlLDgpLHJ0KFE1ZSw4KSxydChSSikscnQo'@;
put 'VWwpLHJ0KEZKLDEwKSxydChMSiwxMikpfSxsLlx1MDI3NWRpcj1Tcih7dHlwZTpsLHNlbGVjdG9yczpbWyIiLCJjZGtEcmFnIiwiIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZixkKXtpZigxJmEmJihGbyhkLFM2ZSw1KSxGbyhkLEM2ZSw1KSxGbyhkLEZKLDUpKSwyJmEpe2xldCBo'@;
put 'O3VpKGg9Y2koKSkmJihmLl9wcmV2aWV3VGVtcGxhdGU9aC5maXJzdCksdWkoaD1jaSgpKSYmKGYuX3BsYWNlaG9sZGVyVGVtcGxhdGU9aC5maXJzdCksdWkoaD1jaSgpKSYmKGYuX2hhbmRsZXM9aCl9fSxob3N0QXR0cnM6WzEsImNkay1kcmFnIl0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6'@;
put 'ZnVuY3Rpb24oYSxmKXsyJmEmJmdyKCJjZGstZHJhZy1kaXNhYmxlZCIsZi5kaXNhYmxlZCkoImNkay1kcmFnLWRyYWdnaW5nIixmLl9kcmFnUmVmLmlzRHJhZ2dpbmcoKSl9LGlucHV0czp7ZGF0YTpbImNka0RyYWdEYXRhIiwiZGF0YSJdLGxvY2tBeGlzOlsiY2RrRHJhZ0xvY2tBeGlzIiwi'@;
put 'bG9ja0F4aXMiXSxyb290RWxlbWVudFNlbGVjdG9yOlsiY2RrRHJhZ1Jvb3RFbGVtZW50Iiwicm9vdEVsZW1lbnRTZWxlY3RvciJdLGJvdW5kYXJ5RWxlbWVudDpbImNka0RyYWdCb3VuZGFyeSIsImJvdW5kYXJ5RWxlbWVudCJdLGRyYWdTdGFydERlbGF5OlsiY2RrRHJhZ1N0YXJ0RGVsYXki'@;
put 'LCJkcmFnU3RhcnREZWxheSJdLGZyZWVEcmFnUG9zaXRpb246WyJjZGtEcmFnRnJlZURyYWdQb3NpdGlvbiIsImZyZWVEcmFnUG9zaXRpb24iXSxkaXNhYmxlZDpbImNka0RyYWdEaXNhYmxlZCIsImRpc2FibGVkIl0sY29uc3RyYWluUG9zaXRpb246WyJjZGtEcmFnQ29uc3RyYWluUG9zaXRp'@;
put 'b24iLCJjb25zdHJhaW5Qb3NpdGlvbiJdLHByZXZpZXdDbGFzczpbImNka0RyYWdQcmV2aWV3Q2xhc3MiLCJwcmV2aWV3Q2xhc3MiXSxwcmV2aWV3Q29udGFpbmVyOlsiY2RrRHJhZ1ByZXZpZXdDb250YWluZXIiLCJwcmV2aWV3Q29udGFpbmVyIl19LG91dHB1dHM6e3N0YXJ0ZWQ6ImNka0Ry'@;
put 'YWdTdGFydGVkIixyZWxlYXNlZDoiY2RrRHJhZ1JlbGVhc2VkIixlbmRlZDoiY2RrRHJhZ0VuZGVkIixlbnRlcmVkOiJjZGtEcmFnRW50ZXJlZCIsZXhpdGVkOiJjZGtEcmFnRXhpdGVkIixkcm9wcGVkOiJjZGtEcmFnRHJvcHBlZCIsbW92ZWQ6ImNka0RyYWdNb3ZlZCJ9LGV4cG9ydEFzOlsi'@;
put 'Y2RrRHJhZyJdLHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W3JpKFt7cHJvdmlkZTpMSix1c2VFeGlzdGluZzpsfV0pLGJsXX0pLGx9KSgpLGs2ZT0oKCk9PntjbGFzcyBse31yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVtb2Q9RGkoe3R5'@;
put 'cGU6bH0pLGwuXHUwMjc1aW5qPXhpKHtwcm92aWRlcnM6W1JKXSxpbXBvcnRzOltRTXRdfSksbH0pKCk7Y29uc3QgTTY9dm9pZCAwLFBrdD1bImVuLUdCIixbWyJhIiwicCJdLFsiYW0iLCJwbSJdLE02XSxbWyJhbSIsInBtIl0sTTYsTTZdLFtbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMi'@;
put 'XSxbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLFsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl1dLE02LFtbIkoi'@;
put 'LCJGIiwiTSIsIkEiLCJNIiwiSiIsIkoiLCJBIiwiUyIsIk8iLCJOIiwiRCJdLFsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwdCIsIk9jdCIsIk5vdiIsIkRlYyJdLFsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIs'@;
put 'Ikp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXV0sTTYsW1siQiIsIkEiXSxbIkJDIiwiQUQiXSxbIkJlZm9yZSBDaHJpc3QiLCJBbm5vIERvbWluaSJdXSwxLFs2LDBdLFsiZGQvTU0veSIsImQgTU1NIHkiLCJkIE1NTU0g'@;
put 'eSIsIkVFRUUsIGQgTU1NTSB5Il0sWyJISDptbSIsIkhIOm1tOnNzIiwiSEg6bW06c3MgeiIsIkhIOm1tOnNzIHp6enoiXSxbInsxfSwgezB9IixNNiwiezF9ICdhdCcgezB9IixNNl0sWyIuIiwiLCIsIjsiLCIlIiwiKyIsIi0iLCJFIiwiXHhkNyIsIlx1MjAzMCIsIlx1MjIxZSIsIk5hTiIs'@;
put 'IjoiXSxbIiMsIyMwLiMjIyIsIiMsIyMwJSIsIlx4YTQjLCMjMC4wMCIsIiNFMCJdLCJHQlAiLCJceGEzIiwiQnJpdGlzaCBQb3VuZCIse0pQWTpbIkpQXHhhNSIsIlx4YTUiXSxVU0Q6WyJVUyQiLCIkIl19LCJsdHIiLGZ1bmN0aW9uIExrdChsKXtjb25zdCBhPU1hdGguZmxvb3IoTWF0aC5h'@;
put 'YnMobCkpLGY9bC50b1N0cmluZygpLnJlcGxhY2UoL15bXi5dKlwuPy8sIiIpLmxlbmd0aDtyZXR1cm4gMT09PWEmJjA9PT1mPzE6NX1dLEZrdD1bImlucHV0Il07ZnVuY3Rpb24gSGt0KGwsYyl7aWYoMSZsJiYoeWUoMCwib3B0aW9uIiw3KSxZZSgxKSxDZSgpKSwyJmwpe2NvbnN0IGE9R2Uo'@;
put 'KTtTZSgxKSx3cigiICIsYS5sb2FkaW5nTW9yZT8iTG9hZGluZy4uLiI6IkxPQUQgTU9SRSIsIiAiKX19Y29uc3QgTmt0PWZ1bmN0aW9uKGwsYyl7cmV0dXJueyJ3aWR0aC5weCI6bCwibWF4LWhlaWdodC5weCI6Y319LFZrdD1bIioiXTtsZXQgRTZlPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0'@;
put 'b3IoYSl7dGhpcy5jZHI9YSx0aGlzLmlucHV0SWQ9IiIsdGhpcy5wbGFjZWhvbGRlcj0iIix0aGlzLnZhbHVlPSIiLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy50eXBlPSJ0ZXh0Iix0aGlzLmF1dG9jb21wbGV0ZT0ib2ZmIix0aGlzLnRhYmluZGV4PSIiLHRoaXMuZW1pdE9ubHlTZWxlY3RlZD0h'@;
put 'MSx0aGlzLmVuYWJsZUxvYWRNb3JlPSExLHRoaXMub25JbnB1dEtleWRvd249bmV3IHhyLHRoaXMub25JbnB1dENoYW5nZT1uZXcgeHIsdGhpcy52YWx1ZUNoYW5nZT1uZXcgeHIsdGhpcy5vbkxvYWRpbmdNb3JlPW5ldyB4cix0aGlzLmRhdGFsaXN0T3Blbj0hMSx0aGlzLmFmdGVyT3Blbkxv'@;
put 'Y2tEZWxheT0xNTAsdGhpcy5hZnRlck9wZW5Mb2NrPSExLHRoaXMuaW5wdXRGb2N1c2VkPSExLHRoaXMuaW5wdXRDbGllbnRSZWN0PXt9LHRoaXMucHJldmVudERhdGFsaXN0Q2xvc2U9ITEsdGhpcy5sb2FkaW5nTW9yZT0hMX1uZ09uSW5pdCgpe31uZ0FmdGVyVmlld0luaXQoKXtzZXRUaW1l'@;
put 'b3V0KCgpPT57dGhpcy5jYWxjdWxhdGVJbnB1dFBvc2l0aW9uKCl9LDUwMCl9b25JbnB1dEZpcmVkKGEsZixkKXt0aGlzLm9wZW5EYXRhbGlzdCgiY2xpY2siIT09ZCksdGhpcy51bnNlbGVjdEFsbE9wdGlvbnMoKSx0aGlzLmZpbHRlck9wdGlvbnNMaXN0KCksKCF0aGlzLmVtaXRPbmx5U2Vs'@;
put 'ZWN0ZWR8fGYpJiYodGhpcy5vbklucHV0Q2hhbmdlLmVtaXQoe3RhcmdldDp7dmFsdWU6dGhpcy52YWx1ZX19KSx0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSkpfW9uSW5wdXRDbGljayhhKXt0aGlzLm9wZW5EYXRhbGlzdCgpfW9wZW5EYXRhbGlzdChhPSEwKXt0aGlzLmRhdGFs'@;
put 'aXN0T3Blbj0hMCxhJiYodGhpcy5hZnRlck9wZW5Mb2NrPSEwLHRoaXMuYWZ0ZXJPcGVuTG9ja0RlbGF5VGltZW91dD1zZXRUaW1lb3V0KCgpPT57dGhpcy5hZnRlck9wZW5Mb2NrPSExfSx0aGlzLmFmdGVyT3BlbkxvY2tEZWxheSkpfWNsb3NlRGF0YWxpc3QoKXtjbGVhclRpbWVvdXQodGhp'@;
put 'cy5hZnRlck9wZW5Mb2NrRGVsYXlUaW1lb3V0KSx0aGlzLmFmdGVyT3BlbkxvY2s9ITEsdGhpcy5kYXRhbGlzdE9wZW49ITF9cmVzZXREYXRhbGlzdEZpbHRlcigpe3RoaXMuZmlsdGVyT3B0aW9uc0xpc3QoITApfW9uSW5wdXRGb2N1c2luKGEpe3RoaXMuaW5wdXRGb2N1c2VkPSEwfW9uSW5w'@;
put 'dXRGb2N1c291dChhKXt0aGlzLmlucHV0Rm9jdXNlZD0hMSx0aGlzLnNldFRvQ2xvc2VEYXRhbGlzdCgpfW9uSW5wdXRNb3VzZWVudGVyKGEpe3RoaXMuaW5wdXRDbGllbnRSZWN0LndpZHRofHx0aGlzLmNhbGN1bGF0ZUlucHV0UG9zaXRpb24oKX1maWx0ZXJPcHRpb25zTGlzdChhKXtjb25z'@;
put 'dCBmPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYCNkYXRhbGlzdF8ke3RoaXMuaW5wdXRJZH0gb3B0aW9uYCk7Zm9yKGxldCBkPTA7ZDxmLmxlbmd0aDtkKyspe2NvbnN0IGg9ZltkXTtpZigwPT09dGhpcy52YWx1ZS5sZW5ndGgpe2guY2xhc3NMaXN0LnJlbW92ZSgiaGlkZGVuIik7Y29u'@;
put 'dGludWV9aWYoYSl7aC5jbGFzc0xpc3QucmVtb3ZlKCJoaWRkZW4iKTtjb250aW51ZX1jb25zdCBtPWguaW5uZXJUZXh0fHwiIixfPWgudmFsdWV8fCIiOyhtK18pPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMudmFsdWUudG9Mb3dlckNhc2UoKSk/aC5jbGFzc0xpc3QucmVtb3ZlKCJo'@;
put 'aWRkZW4iKTpoLmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpfX1zZXRUb0Nsb3NlRGF0YWxpc3QoKXt0aGlzLmRhdGFsaXN0Q2xvc2VUaW1lb3V0PXNldFRpbWVvdXQoKCk9Pnt0aGlzLnByZXZlbnREYXRhbGlzdENsb3NlfHx0aGlzLmFmdGVyT3BlbkxvY2t8fCh0aGlzLmNsb3NlRGF0YWxpc3Qo'@;
put 'KSx0aGlzLnVuc2VsZWN0QWxsT3B0aW9ucygpLHRoaXMucmVzZXREYXRhbGlzdEZpbHRlcigpKX0sMTAwKX1jYWxjdWxhdGVJbnB1dFBvc2l0aW9uKCl7Y29uc3QgZj10aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtmLndpZHRoPjAmJmYu'@;
put 'aGVpZ2h0PjAmJih0aGlzLmlucHV0Q2xpZW50UmVjdD17d2lkdGg6Zi53aWR0aCxib3R0b206Zi5ib3R0b219KSx0aGlzLmlubmVySGVpZ2h0PXdpbmRvdy5pbm5lckhlaWdodH1vbkRhdGFMaXN0TW91c2VFbnRlcihhKXt0aGlzLnByZXZlbnREYXRhbGlzdENsb3NlPSEwfW9uRGF0YUxpc3RN'@;
put 'b3VzZUxlYXZlKGEpe3RoaXMucHJldmVudERhdGFsaXN0Q2xvc2U9ITEsdGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpfW9uRGF0YUxpc3RTY3JvbGwoYSl7dGhpcy5zZXRUb0Nsb3NlRGF0YWxpc3QoKX1vbkRhdGFMaXN0Q2xpY2soYSl7Y29uc3QgZj1hLnRhcmdldDsi'@;
put 'bG9hZC1tb3JlIiE9PWYuZGF0YXNldD8udHlwZT8iT1BUSU9OIiE9PWYudGFnTmFtZXx8dGhpcy5zZXRPcHRpb25WYWx1ZShmLmlubmVyVGV4dCxmLnZhbHVlKTp0aGlzLmxvYWRNb3JlKCl9bG9hZE1vcmUoKXt0aGlzLm9uTG9hZGluZ01vcmUuZW1pdCh7bG9hZE1vcmVGaW5pc2hlZDphPT57'@;
put 'dGhpcy5sb2FkaW5nTW9yZT0hMSx0aGlzLmVuYWJsZUxvYWRNb3JlPWF9fSksdGhpcy5sb2FkaW5nTW9yZT0hMH1zZXRPcHRpb25WYWx1ZShhLGYpeyhhfHxmKSYmKGZ8fChmPWEpKSxmJiYodGhpcy5wcmV2ZW50RGF0YWxpc3RDbG9zZT0hMSx0aGlzLnZhbHVlPWYsdGhpcy5vbklucHV0Rmly'@;
put 'ZWQobnVsbCwhMCwiY2xpY2siKSx0aGlzLnNldFRvQ2xvc2VEYXRhbGlzdCgpKX1vbk1haW5LZXlkb3duKGEpe3N3aXRjaChhLmtleSl7Y2FzZSJBcnJvd1VwIjp0aGlzLmdldE9wdGlvbnNNb3ZlRm9jdXMoInVwIik7YnJlYWs7Y2FzZSJBcnJvd0Rvd24iOnRoaXMuZ2V0T3B0aW9uc01vdmVG'@;
put 'b2N1cygiZG93biIpO2JyZWFrO2Nhc2UiRW50ZXIiOnRoaXMuc2VsZWN0Rm9jdXNlZE9wdGlvbigpfX1vbklucHV0S2V5dXAoYSl7cmV0dXJuIXRoaXMuZGF0YWxpc3RPcGVufHwoIkVzY2FwZSI9PT1hLmtleT8oYS5zdG9wUHJvcGFnYXRpb24oKSxhLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlv'@;
put 'bigpLHRoaXMuc2V0VG9DbG9zZURhdGFsaXN0KCksITEpOnZvaWQgMCl9dW5zZWxlY3RBbGxPcHRpb25zKCl7Y29uc3QgYT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAjZGF0YWxpc3RfJHt0aGlzLmlucHV0SWR9IG9wdGlvbmApO2ZvcihsZXQgZj0wO2Y8YS5sZW5ndGg7ZisrKWFbZl0u'@;
put 'Y2xhc3NMaXN0LnJlbW92ZSgiZm9jdXNlZCIpfXNlbGVjdEZvY3VzZWRPcHRpb24oKXtjb25zdCBhPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCNkYXRhbGlzdF8ke3RoaXMuaW5wdXRJZH0gb3B0aW9uLmZvY3VzZWRgKTthJiZ0aGlzLm9uRGF0YUxpc3RDbGljayh7dGFyZ2V0OmF9KSx0aGlz'@;
put 'LnNldFRvQ2xvc2VEYXRhbGlzdCgpfWdldE9wdGlvbnNNb3ZlRm9jdXMoYSl7Y29uc3QgZj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAjZGF0YWxpc3RfJHt0aGlzLmlucHV0SWR9IG9wdGlvbjpub3QoLmhpZGRlbilgKTtsZXQgZD0wO2ZvcihsZXQgaD0wO2g8Zi5sZW5ndGg7aCsrKXtj'@;
put 'b25zdCBtPWZbaF07aWYobS5jbGFzc0xpc3QuY29udGFpbnMoImZvY3VzZWQiKSl7ZD0iZG93biI9PT1hP2grMTpoLTEsZDwwJiYoZD1mLmxlbmd0aC0xKSxkPmYubGVuZ3RoLTEmJihkPTApLG0uY2xhc3NMaXN0LnJlbW92ZSgiZm9jdXNlZCIpO2JyZWFrfX1mW2RdLmNsYXNzTGlzdC5hZGQo'@;
put 'ImZvY3VzZWQiKX1vblJlc2l6ZShhKXt0aGlzLmNhbGN1bGF0ZUlucHV0UG9zaXRpb24oKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkocnQoVWwpKX0sbC5cdTAyNzVjbXA9a3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siYXBwLWF1dG9jb21wbGV0ZSJd'@;
put 'XSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxmKXtpZigxJmEmJk5vKEZrdCw1KSwyJmEpe2xldCBkO3VpKGQ9Y2koKSkmJihmLmlucHV0RWxlbWVudD1kLmZpcnN0KX19LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGYpezEmYSYmRXQoInJlc2l6ZSIsZnVuY3Rpb24oaCl7cmV0dXJuIGYub25SZXNp'@;
put 'emUoaCl9LDAsRzgpfSxpbnB1dHM6e2lucHV0SWQ6ImlucHV0SWQiLHBsYWNlaG9sZGVyOiJwbGFjZWhvbGRlciIsdmFsdWU6InZhbHVlIixkaXNhYmxlZDoiZGlzYWJsZWQiLHR5cGU6InR5cGUiLGF1dG9jb21wbGV0ZToiYXV0b2NvbXBsZXRlIix0YWJpbmRleDoidGFiaW5kZXgiLGVtaXRP'@;
put 'bmx5U2VsZWN0ZWQ6ImVtaXRPbmx5U2VsZWN0ZWQiLGVuYWJsZUxvYWRNb3JlOiJlbmFibGVMb2FkTW9yZSJ9LG91dHB1dHM6e29uSW5wdXRLZXlkb3duOiJvbklucHV0S2V5ZG93biIsb25JbnB1dENoYW5nZToib25JbnB1dENoYW5nZSIsdmFsdWVDaGFuZ2U6InZhbHVlQ2hhbmdlIixvbkxv'@;
put 'YWRpbmdNb3JlOiJvbkxvYWRpbmdNb3JlIn0sbmdDb250ZW50U2VsZWN0b3JzOlZrdCxkZWNsczo5LHZhcnM6MTUsY29uc3RzOltbMSwiYXV0b2NvbXBsZXRlLXdyYXBwZXIiLDMsImtleWRvd24iXSxbInR5cGUiLCJ0ZXh0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwiYXV0b2ZvY3VzIiwiIiwi'@;
put 'dGFiaW5kZXgiLCIwIiwxLCJpbnB1dC12YWwiLDMsImlkIiwicGxhY2Vob2xkZXIiLCJuZ01vZGVsIiwiZGlzYWJsZWQiLCJuZ01vZGVsQ2hhbmdlIiwiY2xpY2siLCJtb3VzZWVudGVyIiwiZm9jdXMiLCJmb2N1c291dCIsImtleXVwIl0sWyJpbnB1dCIsIiJdLFsxLCJvdmVybGF5Il0sWzEs'@;
put 'ImRhdGFsaXN0IiwzLCJuZ1N0eWxlIiwiaWQiLCJjbGljayIsIm1vdXNlZW50ZXIiLCJtb3VzZWxlYXZlIiwic2Nyb2xsIl0sWyJvcHRpb25zIiwiIl0sWyJkYXRhLXR5cGUiLCJsb2FkLW1vcmUiLCJjbGFzcyIsImxvYWQtbW9yZSIsNCwibmdJZiJdLFsiZGF0YS10eXBlIiwibG9hZC1tb3Jl'@;
put 'IiwxLCJsb2FkLW1vcmUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxmKXtpZigxJmEmJihUaSgpLHllKDAsImRpdiIsMCksRXQoImtleWRvd24iLGZ1bmN0aW9uKGgpe3JldHVybiBmLm9uTWFpbktleWRvd24oaCl9KSx5ZSgxLCJpbnB1dCIsMSwyKSxFdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rp'@;
put 'b24oaCl7cmV0dXJuIGYudmFsdWU9aH0pKCJjbGljayIsZnVuY3Rpb24oaCl7cmV0dXJuIGYub25JbnB1dENsaWNrKGgpfSkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBmLm9uSW5wdXRGaXJlZChoKX0pKCJtb3VzZWVudGVyIixmdW5jdGlvbihoKXtyZXR1cm4gZi5vbklu'@;
put 'cHV0TW91c2VlbnRlcihoKX0pKCJmb2N1cyIsZnVuY3Rpb24oaCl7cmV0dXJuIGYub25JbnB1dEZvY3VzaW4oaCl9KSgiZm9jdXNvdXQiLGZ1bmN0aW9uKGgpe3JldHVybiBmLm9uSW5wdXRGb2N1c291dChoKX0pKCJrZXl1cCIsZnVuY3Rpb24oaCl7cmV0dXJuIGYub25JbnB1dEtleXVwKGgp'@;
put 'fSksQ2UoKSx0bigzLCJkaXYiLDMpLHllKDQsImRpdiIsNCksRXQoImNsaWNrIixmdW5jdGlvbihoKXtyZXR1cm4gZi5vbkRhdGFMaXN0Q2xpY2soaCl9KSgibW91c2VlbnRlciIsZnVuY3Rpb24oaCl7cmV0dXJuIGYub25EYXRhTGlzdE1vdXNlRW50ZXIoaCl9KSgibW91c2VsZWF2ZSIsZnVu'@;
put 'Y3Rpb24oaCl7cmV0dXJuIGYub25EYXRhTGlzdE1vdXNlTGVhdmUoaCl9KSgic2Nyb2xsIixmdW5jdGlvbihoKXtyZXR1cm4gZi5vbkRhdGFMaXN0U2Nyb2xsKGgpfSkseWUoNSwiZGl2IixudWxsLDUpLERyKDcpLENlKCksdHQoOCxIa3QsMiwxLCJvcHRpb24iLDYpLENlKCkoKSksMiZhKXtj'@;
put 'b25zdCBkPVFpKDYpO1NlKDEpLFJlKCJpZCIsZi5pbnB1dElkKSgicGxhY2Vob2xkZXIiLGYucGxhY2Vob2xkZXIpKCJuZ01vZGVsIixmLnZhbHVlKSgiZGlzYWJsZWQiLGYuZGlzYWJsZWQpLFJyKCJsaXN0IiwiZGF0YWxpc3RfIitmLmlucHV0SWQpLFNlKDIpLGdyKCJoaWRkZW4iLCFmLmRh'@;
put 'dGFsaXN0T3BlbiksU2UoMSksZ3IoImhpZGRlbiIsIWYuZGF0YWxpc3RPcGVuKSxSZSgibmdTdHlsZSIsd2goMTIsTmt0LGYuaW5wdXRDbGllbnRSZWN0LndpZHRoLGYuaW5uZXJIZWlnaHQmJmYuaW5wdXRDbGllbnRSZWN0LmJvdHRvbT9mLmlubmVySGVpZ2h0LWYuaW5wdXRDbGllbnRSZWN0'@;
put 'LmJvdHRvbTp2b2lkIDApKSgiaWQiLCJkYXRhbGlzdF8iK2YuaW5wdXRJZCksU2UoNCksUmUoIm5nSWYiLGQuY2hpbGRyZW4ubGVuZ3RoPjAmJmYuZW5hYmxlTG9hZE1vcmUpfX0sZGVwZW5kZW5jaWVzOlskaSxTbmUsUzEsTTEsaXMsV2EsemFdLHN0eWxlczpbIi5pbnB1dC12YWxbX25nY29u'@;
put 'dGVudC0lQ09NUCVde2JvcmRlcjowcHg7YmFja2dyb3VuZDojZmJmOGY4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM5OTk5OTl9aW5wdXRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7b3V0bGluZTpub25lfWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXTo6LXdlYmtpdC1jYWxlbmRh'@;
put 'ci1waWNrZXItaW5kaWNhdG9ye21hcmdpbi10b3A6LTVweH0uYXV0b2NvbXBsZXRlLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm92ZXJsYXlbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7ei1pbmRleDoxNTAwfS5hdXRvY29tcGxldGUtd3JhcHBlcltf'@;
put 'bmdjb250ZW50LSVDT01QJV0gICAuZGF0YWxpc3RbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO2JhY2tncm91bmQ6d2hpdGU7Ym94LXNoYWRvdzowIDNweCAxMHB4IC0xcHggIzAwMDAwMDJiO292ZXJmbG93OmF1dG87ei1pbmRleDoyMDAwfS5hdXRvY29tcGxldGUtd3JhcHBl'@;
put 'cltfbmdjb250ZW50LSVDT01QJV0gICAuZGF0YWxpc3RbX25nY29udGVudC0lQ09NUCVdICAgICBvcHRpb257cGFkZGluZzo1cHggMTBweDtjdXJzb3I6cG9pbnRlcn0uYXV0b2NvbXBsZXRlLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLmRhdGFsaXN0W19uZ2NvbnRlbnQtJUNPTVAl'@;
put 'XSAgICAgb3B0aW9uOmhvdmVye2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDU4ODIzNTI5NCl9LmF1dG9jb21wbGV0ZS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kYXRhbGlzdFtfbmdjb250ZW50LSVDT01QJV0gICAgIG9wdGlvbi5mb2N1c2Vke2JhY2tncm91bmQ6cmdiYSgwLDAs'@;
put 'MCwuMDU4ODIzNTI5NCl9LmF1dG9jb21wbGV0ZS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5sb2FkLW1vcmVbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246Y2VudGVyO2JvcmRlci10b3A6MXB4IHNvbGlkICNlNmU2ZTZ9Il19KSxsfSkoKSxCa3Q9KCgpPT57Y2xhc3MgbHt0'@;
put 'cmFuc2Zvcm0oYSxmKXtpZigic3RyaW5nIj09dHlwZW9mIGEmJmEubGVuZ3RoPDEpcmV0dXJuIGE7c3dpdGNoKGYpe2Nhc2UiZGF0ZSI6cmV0dXJuIEtvKGEsIkRETU1NWVlZWTpoaDptbTpzcyIpLmZvcm1hdCgiREQvTU0vWVlZWSIpO2Nhc2UidGltZSI6e2lmKCJzdHJpbmciIT10eXBlb2Yg'@;
put 'YSl0aHJvdyBuZXcgRXJyb3IoIkVycm9yIHBhcnNpbmcgdGltZS4gVmFsdWUgaXMgbm90IHN0cmluZy4iKTtjb25zdCBkPXBhcnNlSW50KGEuc3BsaXQoIjoiKVswXSksaD1wYXJzZUludChhLnNwbGl0KCI6IilbMV0pLG09cGFyc2VJbnQoYS5zcGxpdCgiOiIpWzJdKTtyZXR1cm5gJHtkPDEw'@;
put 'PyIwIitkOmR9OiR7aDwxMD8iMCIraDpofToke208MTA/IjAiK206bX1gfX1yZXR1cm4ic3RyaW5nIj09dHlwZW9mIGE/YTphLnRvU3RyaW5nKCl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NXBpcGU9Vmwoe25hbWU6ImRhdGVUaW1l'@;
put 'Rm9ybWF0dGVyIix0eXBlOmwscHVyZTohMH0pLGx9KSgpO2NvbnN0IGprdD1bImlucHV0Il07ZnVuY3Rpb24gemt0KGwsYyl7aWYoMSZsJiYoeWUoMCwibGFiZWwiLDMpLFllKDEpLENlKCkpLDImbCl7Y29uc3QgYT1HZSgpO1NlKDEpLGFyKGEubGFiZWwpfX1mdW5jdGlvbiBVa3QobCxjKXtp'@;
put 'ZigxJmwpe2NvbnN0IGE9Wm4oKTtXcigwKSx5ZSgxLCJjbHItZGF0ZS1jb250YWluZXIiKSgyLCJpbnB1dCIsNCksRXQoImNsckRhdGVDaGFuZ2UiLGZ1bmN0aW9uKGQpe3JldHVybiBVdChhKSxadChHZSgpLm9uRGF0ZUlucHV0RmlyZWQoZCkpfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVy'@;
put 'biBVdChhKSxadChHZSgpLmlucHV0Rm9jdXNlZD0hMCl9KSgiZm9jdXNvdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIFV0KGEpLFp0KEdlKCkuaW5wdXRGb2N1c2VkPSExKX0pKCJmb2N1c2luIixmdW5jdGlvbihkKXtyZXR1cm4gVXQoYSksWnQoR2UoKS5vbkZvY3VzaW5JbnB1dChkKSl9KSgibW91'@;
put 'c2VvdmVyIixmdW5jdGlvbigpe3JldHVybiBVdChhKSxadChHZSgpLm9uSW5wdXRNb3VzZU92ZXIoKSl9KSgibW91c2VvdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIFV0KGEpLFp0KEdlKCkub25JbnB1dE1vdXNlT3V0KCkpfSksd2woMywiZGF0ZVRpbWVGb3JtYXR0ZXIiKSxDZSgpKCksR3IoKX1p'@;
put 'ZigyJmwpe2NvbnN0IGE9R2UoKTtTZSgyKSxSZSgiaWQiLGEuaW5wdXRJZCkoInBsYWNlaG9sZGVyIix3ZygzLDUsYS50ZW1wLCJkYXRlIikpKCJjbHJEYXRlIixhLnZhbHVlKSgiZGlzYWJsZWQiLGEuZGlzYWJsZWQpLFJyKCJsaXN0IiwiZGF0YWxpc3RfIithLmlucHV0SWQpfX1mdW5jdGlv'@;
put 'biBaa3QobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTtXcigwKSx5ZSgxLCJpbnB1dCIsNSksRXQoImlucHV0IixmdW5jdGlvbihkKXtyZXR1cm4gVXQoYSksWnQoR2UoKS5vbklucHV0RmlyZWQoZCkpfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBVdChhKSxadChHZSgpLmlucHV0Rm9j'@;
put 'dXNlZD0hMCl9KSgiZm9jdXNvdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIFV0KGEpLFp0KEdlKCkuaW5wdXRGb2N1c2VkPSExKX0pKCJmb2N1c2luIixmdW5jdGlvbihkKXtyZXR1cm4gVXQoYSksWnQoR2UoKS5vbkZvY3VzaW5JbnB1dChkKSl9KSgibW91c2VvdmVyIixmdW5jdGlvbigpe3JldHVy'@;
put 'biBVdChhKSxadChHZSgpLm9uSW5wdXRNb3VzZU92ZXIoKSl9KSgibW91c2VvdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIFV0KGEpLFp0KEdlKCkub25JbnB1dE1vdXNlT3V0KCkpfSksQ2UoKSxHcigpfWlmKDImbCl7Y29uc3QgYT1HZSgpO1NlKDEpLFJlKCJ2YWx1ZSIsYS52YWx1ZSkoImlkIixh'@;
put 'LmlucHV0SWQpKCJkaXNhYmxlZCIsYS5kaXNhYmxlZCksUnIoImxpc3QiLCJkYXRhbGlzdF8iK2EuaW5wdXRJZCl9fWZ1bmN0aW9uIFlrdChsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO1dyKDApLHllKDEsImFwcC1hdXRvY29tcGxldGUiLDYsNyksRXQoIm9uSW5wdXRDaGFuZ2UiLGZ1bmN0'@;
put 'aW9uKGQpe3JldHVybiBVdChhKSxadChHZSgpLm9uSW5wdXRGaXJlZChkKSl9KSgib25Mb2FkaW5nTW9yZSIsZnVuY3Rpb24oZCl7cmV0dXJuIFV0KGEpLFp0KEdlKCkuYXV0b2NvbXBsZXRlTG9hZGluZ01vcmUoZCkpfSksRHIoMyksQ2UoKSxHcigpfWlmKDImbCl7Y29uc3QgYT1HZSgpO1Nl'@;
put 'KDEpLFJlKCJpbnB1dElkIixhLmlucHV0SWQpKCJ2YWx1ZSIsKG51bGw9PWEudmFsdWU/bnVsbDphLnZhbHVlLnRvU3RyaW5nKCkpfHwiIikoImVuYWJsZUxvYWRNb3JlIixhLmVuYWJsZUxvYWRNb3JlKSgiZW1pdE9ubHlTZWxlY3RlZCIsYS5lbWl0T25seVNlbGVjdGVkKSgiZGlzYWJsZWQi'@;
put 'LGEuZGlzYWJsZWQpfX1jb25zdCBXa3Q9WyIqIl07bGV0IHg2ZT0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKCl7dGhpcy5pbnB1dElkPSIiLHRoaXMudmFsdWU9IiIsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLnR5cGU9InRleHQiLHRoaXMuZGlzYWJsZVNvZnRzZWxlY3Q9ITEsdGhpcy5lbWl0'@;
put 'T25seVNlbGVjdGVkPSExLHRoaXMuZW5hYmxlTG9hZE1vcmU9ITEsdGhpcy52YWx1ZUNoYW5nZT1uZXcgeHIsdGhpcy5vbklucHV0RXZlbnQ9bmV3IHhyLHRoaXMuZm9jdXNpbklucHV0PW5ldyB4cix0aGlzLm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmU9bmV3IHhyLHRoaXMudGVtcD0iIix0'@;
put 'aGlzLmlucHV0Rm9jdXNlZD0hMX1uZ09uQ2hhbmdlcyhhKXthLnZhbHVlJiZhLnZhbHVlLmN1cnJlbnRWYWx1ZSE9PWEudmFsdWUucHJldmlvdXNWYWx1ZSYmdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGEudmFsdWUuY3VycmVudFZhbHVlKX1uZ09uSW5pdCgpe31hdXRvY29tcGxldGVMb2FkaW5n'@;
put 'TW9yZShhKXt0aGlzLm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUuZW1pdChhKX1vbklucHV0RmlyZWQoYSl7Y29uc3QgZj1hLnRhcmdldC52YWx1ZTt0aGlzLnRlbXA9Zix0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoZiksdGhpcy5vbklucHV0RXZlbnQuZW1pdChhKX1vbkRhdGVJbnB1dEZpcmVk'@;
put 'KGEpe3RoaXMudGVtcD1hLHRoaXMudmFsdWVDaGFuZ2UuZW1pdChhKSx0aGlzLm9uSW5wdXRFdmVudC5lbWl0KGEpfW9uSW5wdXRNb3VzZU91dCgpe3RoaXMuZGlzYWJsZVNvZnRzZWxlY3R8fCh0aGlzLnZhbHVlPXRoaXMudGVtcCx0aGlzLnRlbXA9IiIpfW9uSW5wdXRNb3VzZU92ZXIoKXt0'@;
put 'aGlzLmRpc2FibGVTb2Z0c2VsZWN0fHwodGhpcy50ZW1wPXRoaXMudmFsdWU/dGhpcy52YWx1ZToiIix0aGlzLnZhbHVlPSIiKX1vbkZvY3VzaW5JbnB1dChhKXt0aGlzLmZvY3VzaW5JbnB1dC5lbWl0KGEpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxs'@;
put 'KX0sbC5cdTAyNzVjbXA9a3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siYXBwLXNvZnQtc2VsZWN0Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGYpe2lmKDEmYSYmTm8oamt0LDUpLDImYSl7bGV0IGQ7dWkoZD1jaSgpKSYmKGYuaW5wdXRFbGVtZW50PWQuZmlyc3QpfX0saW5wdXRzOntpbnB1dElk'@;
put 'OiJpbnB1dElkIixsYWJlbDoibGFiZWwiLHZhbHVlOiJ2YWx1ZSIsZGlzYWJsZWQ6ImRpc2FibGVkIix0eXBlOiJ0eXBlIixkaXNhYmxlU29mdHNlbGVjdDoiZGlzYWJsZVNvZnRzZWxlY3QiLGVtaXRPbmx5U2VsZWN0ZWQ6ImVtaXRPbmx5U2VsZWN0ZWQiLGVuYWJsZUxvYWRNb3JlOiJlbmFi'@;
put 'bGVMb2FkTW9yZSJ9LG91dHB1dHM6e3ZhbHVlQ2hhbmdlOiJ2YWx1ZUNoYW5nZSIsb25JbnB1dEV2ZW50OiJvbklucHV0RXZlbnQiLGZvY3VzaW5JbnB1dDoiZm9jdXNpbklucHV0IixvbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlOiJvbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlIn0sZmVhdHVy'@;
put 'ZXM6W2JsXSxuZ0NvbnRlbnRTZWxlY3RvcnM6V2t0LGRlY2xzOjUsdmFyczo1LGNvbnN0czpbWyJjbGFzcyIsImNsci1jb250cm9sLWxhYmVsIiw0LCJuZ0lmIl0sWzMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJjbHItY29udHJvbC1sYWJlbCJdLFsidHlwZSIsImRhdGUi'@;
put 'LCJjbHJEYXRlIiwiIiwzLCJpZCIsInBsYWNlaG9sZGVyIiwiY2xyRGF0ZSIsImRpc2FibGVkIiwiY2xyRGF0ZUNoYW5nZSIsImZvY3VzIiwiZm9jdXNvdXQiLCJmb2N1c2luIiwibW91c2VvdmVyIiwibW91c2VvdXQiXSxbInR5cGUiLCJ0aW1lIiwic3RlcCIsIjEiLDEsImlucHV0LXZhbCIs'@;
put 'MywidmFsdWUiLCJpZCIsImRpc2FibGVkIiwiaW5wdXQiLCJmb2N1cyIsImZvY3Vzb3V0IiwiZm9jdXNpbiIsIm1vdXNlb3ZlciIsIm1vdXNlb3V0Il0sWyJ0eXBlIiwidGV4dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsImF1dG9mb2N1cyIsIiIsMSwiaW5wdXQtdmFsIiwzLCJpbnB1dElkIiwi'@;
put 'dmFsdWUiLCJlbmFibGVMb2FkTW9yZSIsImVtaXRPbmx5U2VsZWN0ZWQiLCJkaXNhYmxlZCIsIm9uSW5wdXRDaGFuZ2UiLCJvbkxvYWRpbmdNb3JlIl0sWyJpbnB1dCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGYpezEmYSYmKFRpKCksdHQoMCx6a3QsMiwxLCJsYWJlbCIsMCksV3IoMSwx'@;
put 'KSx0dCgyLFVrdCw0LDgsIm5nLWNvbnRhaW5lciIsMiksdHQoMyxaa3QsMiw0LCJuZy1jb250YWluZXIiLDIpLHR0KDQsWWt0LDQsNSwibmctY29udGFpbmVyIiwyKSxHcigpKSwyJmEmJihSZSgibmdJZiIsZi5sYWJlbCksU2UoMSksUmUoIm5nU3dpdGNoIixmLnR5cGUpLFNlKDEpLFJlKCJu'@;
put 'Z1N3aXRjaENhc2UiLCJkYXRlIiksU2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsInRpbWUiKSxTZSgxKSxSZSgibmdTd2l0Y2hDYXNlIiwidGV4dCIpKX0sZGVwZW5kZW5jaWVzOlskaSxrZixDaCxlbCxtUyxOVSxWVSxFNmUsQmt0XSxzdHlsZXM6WyIuaW5wdXQtdmFsW19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXXtib3JkZXI6MHB4O2JhY2tncm91bmQ6I2ZiZjhmODtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjOTk5OTk5fWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO291dGxpbmU6bm9uZX1pbnB1dFtfbmdjb250ZW50LSVDT01QJV06Oi13ZWJraXQtY2FsZW5kYXItcGlja2Vy'@;
put 'LWluZGljYXRvcnttYXJnaW4tdG9wOi01cHh9Y2xyLWRhdGUtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZTttYXJnaW4tdG9wOjJweCFpbXBvcnRhbnR9Y2xyLWRhdGUtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1pbnB1dC1ncm91'@;
put 'cC1pY29uLWFjdGlvbntwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDotNXB4fWNsci1kYXRlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAgIGlucHV0Ojotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3J7bWFyZ2luLXJpZ2h0OjIwcHg7bWFyZ2luLXRvcDotNXB4fSJdfSks'@;
put 'bH0pKCksR2t0PSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSl7dGhpcy5oZWxwZXJTZXJ2aWNlPWF9dHJhbnNmb3JtKGEsZj0iZGF5cyIsZD0hMSl7aWYodm9pZCAwPT09YSYmKGE9IiIpLCJzdHJpbmciIT10eXBlb2YgYSYmKGE9YS50b1N0cmluZygpKSwwPT09YS5sZW5ndGgpe2lmKCJk'@;
put 'YXlzIj09PWYpcmV0dXJuIG51bGw7aWYoInNlY29uZHMiPT09ZilyZXR1cm4gZD8iMTE6MDA6MDAiOm51bGx9bGV0IGg9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRTYXNEYXlzVG9Kc0RhdGUoYSxmKTtpZig0PT09YS5zcGxpdCgiOiIpLmxlbmd0aCl7Y29uc3QgXz1hLnNwbGl0KCI6Iik7'@;
put 'aD1uZXcgRGF0ZShfWzBdKSxoLnNldEhvdXJzKHBhcnNlSW50KF9bMV0pKSxoLnNldE1pbnV0ZXMocGFyc2VJbnQoX1syXSkpLGguc2V0U2Vjb25kcyhwYXJzZUludChfWzNdKSl9ZWxzZSBpc05hTihOdW1iZXIoYSkpJiYoaD1uZXcgRGF0ZShhKSk7bGV0IG09YCR7dGhpcy5oZWxwZXJTZXJ2'@;
put 'aWNlLmFkZExlYWRpbmdaZXJvKGguZ2V0SG91cnMoKS50b1N0cmluZygpKX06JHt0aGlzLmhlbHBlclNlcnZpY2UuYWRkTGVhZGluZ1plcm8oaC5nZXRNaW51dGVzKCkudG9TdHJpbmcoKSl9OiR7dGhpcy5oZWxwZXJTZXJ2aWNlLmFkZExlYWRpbmdaZXJvKGguZ2V0U2Vjb25kcygpLnRvU3Ry'@;
put 'aW5nKCkpfWA7cmV0dXJuIGQ/bTpofX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChQdSwxNikpfSxsLlx1MDI3NXBpcGU9Vmwoe25hbWU6InNhc1RvSnNEYXRlIix0eXBlOmwscHVyZTohMH0pLGx9KSgpLCRrdD0oKCk9PntjbGFzcyBse2NvbnN0'@;
put 'cnVjdG9yKGEpe3RoaXMuaGVscGVyU2VydmljZT1hfXRyYW5zZm9ybShhKXtpZihudWxsPT1hfHwiIj09PWEpcmV0dXJuIiI7bGV0IGYsZCxoO2lmKCJzdHJpbmciPT10eXBlb2YgYSYmMz09PWEuc3BsaXQoIjoiKS5sZW5ndGgpe2NvbnN0IG09YS5zcGxpdCgiOiIpO2Y9bVswXSxkPW1bMV0s'@;
put 'aD1tWzJdfWVsc2UibnVtYmVyIiE9dHlwZW9mIGEmJihhPXBhcnNlSW50KGEpKSxmPU1hdGguZmxvb3IoYS8zNjAwKSxkPU1hdGguZmxvb3IoYSUzNjAwLzYwKSxoPU1hdGguZmxvb3IoYSUzNjAwJTYwKTtyZXR1cm5gJHt0aGlzLmhlbHBlclNlcnZpY2UuYWRkTGVhZGluZ1plcm8oZil9OiR7'@;
put 'dGhpcy5oZWxwZXJTZXJ2aWNlLmFkZExlYWRpbmdaZXJvKGQpfToke3RoaXMuaGVscGVyU2VydmljZS5hZGRMZWFkaW5nWmVybyhoKX1gfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChQdSwxNikpfSxsLlx1MDI3NXBpcGU9Vmwoe25hbWU6InNl'@;
put 'Y29uZHNQYXJzZXIiLHR5cGU6bCxwdXJlOiEwfSksbH0pKCk7ZnVuY3Rpb24gS2t0KGwsYyl7aWYoMSZsJiYoeWUoMCwib3B0aW9uIiwyMiksWWUoMSksQ2UoKSksMiZsKXtjb25zdCBhPWMuJGltcGxpY2l0O1JlKCJzZWxlY3RlZCIsR2UoKS5sb2dpY09wZXJhdG9yc1swXSksU2UoMSksd3Io'@;
put 'IiAiLGEsIiAiKX19ZnVuY3Rpb24gcWt0KGwsYyl7MSZsJiYoeWUoMCwiZGl2IiwyMyksWWUoMSwiXG4gICAgICAgICIpLHRuKDIsInByb2dyZXNzIiksWWUoMywiXG4gICAgICAiKSxDZSgpKX1mdW5jdGlvbiBYa3QobCxjKXsxJmwmJnRuKDAsImRpdiIpfWZ1bmN0aW9uIEprdChsLGMpe2lm'@;
put 'KDEmbCYmKHllKDAsIm9wdGlvbiIsMjIpLFllKDEpLENlKCkpLDImbCl7Y29uc3QgYT1jLiRpbXBsaWNpdDtSZSgic2VsZWN0ZWQiLEdlKDIpLmxvZ2ljT3BlcmF0b3JzWzBdKSxTZSgxKSx3cigiICIsYSwiICIpfX1mdW5jdGlvbiBRa3QobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgw'@;
put 'LCJidXR0b24iLDMyKSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFV0KGEpLFp0KEdlKDIpLmFkZEdyb3VwQ2xhdXNlKCkpfSksdG4oMSwiY2xyLWljb24iLDMzKSx5ZSgyLCJzcGFuIiksWWUoMywiR3JvdXAiKSxDZSgpKCl9fWZ1bmN0aW9uIGVFdChsLGMpe2lmKDEmbCl7Y29uc3Qg'@;
put 'YT1abigpO3llKDAsImNsci1pY29uIiwzNCksRXQoImNsaWNrIixmdW5jdGlvbigpe1V0KGEpO2NvbnN0IGQ9R2UoKS5pbmRleDtyZXR1cm4gWnQoR2UoKS5yZW1vdmVHcm91cENsYXVzZShkKSl9KSxDZSgpfX1mdW5jdGlvbiB0RXQobCxjKXtpZigxJmwmJih5ZSgwLCJvcHRpb24iKSxZZSgx'@;
put 'KSxDZSgpKSwyJmwpe2NvbnN0IGE9Yy4kaW1wbGljaXQ7U2UoMSksd3IoIiAiLGEuTkFNRSwiICIpfX1mdW5jdGlvbiBuRXQobCxjKXtpZigxJmwmJih5ZSgwLCJvcHRpb24iKSxZZSgxKSxDZSgpKSwyJmwpe2NvbnN0IGE9Yy4kaW1wbGljaXQ7U2UoMSksYXIoYSl9fWZ1bmN0aW9uIHJFdChs'@;
put 'LGMpezEmbCYmZXMoMCl9Y29uc3QgaUV0PWZ1bmN0aW9uKGwsYyxhKXtyZXR1cm57cXVlcnk6bCxxdWVyeUluZGV4OmMsY2xhdXNlSW5kZXg6YX19O2Z1bmN0aW9uIG9FdChsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImRpdiIsNTEpKDEsImJ1dHRvbiIsNTIpLEV0KCJjbGljayIs'@;
put 'ZnVuY3Rpb24oKXtVdChhKTtjb25zdCBkPUdlKDIpLmluZGV4LGg9R2UoKS5pbmRleCxtPUdlKCk7cmV0dXJuIG0uY3VycmVudFF1ZXJ5SW5kZXg9ZCxadChtLmN1cnJlbnRDbGF1c2VJbmRleD1oKX0pLFllKDIsIiBDaG9vc2UgdmFsdWVzICIpLENlKCksdHQoMyxyRXQsMSwwLCJuZy1jb250'@;
put 'YWluZXIiLDUzKSxDZSgpfWlmKDImbCl7Y29uc3QgYT1HZSgyKSxmPWEuJGltcGxpY2l0LGQ9YS5pbmRleCxoPUdlKCkuaW5kZXg7R2UoKTtjb25zdCBtPVFpKDM3KTtTZSgzKSxSZSgibmdUZW1wbGF0ZU91dGxldCIsbSkoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixuQygyLGlFdCxmLGQs'@;
put 'aCkpfX1mdW5jdGlvbiBhRXQobCxjKXsxJmwmJmVzKDApfWNvbnN0IGxFdD1mdW5jdGlvbihsLGMsYSxmKXtyZXR1cm57cXVlcnk6bCxxdWVyeUluZGV4OmMsY2xhdXNlSW5kZXg6YSxpc0RhdGVUaW1lOmZ9fTtmdW5jdGlvbiBzRXQobCxjKXtpZigxJmwmJih5ZSgwLCJkaXYiLDU0KSx0dCgx'@;
put 'LGFFdCwxLDAsIm5nLWNvbnRhaW5lciIsNTMpLENlKCkpLDImbCl7Y29uc3QgYT1HZSgpLm5nVmFyLGY9R2UoKSxkPWYuJGltcGxpY2l0LGg9Zi5pbmRleCxtPUdlKCkuaW5kZXgsXz1HZSgpLE89UWkoMzEpLFg9UWkoMzMpO1NlKDEpLFJlKCJuZ1RlbXBsYXRlT3V0bGV0IixhJiZfLnVzZVBp'@;
put 'Y2tlcnM/TzpYKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLE1PKDIsbEV0LGQsaCxtLGEpKX19ZnVuY3Rpb24gdUV0KGwsYyl7MSZsJiZlcygwKX1mdW5jdGlvbiBjRXQobCxjKXsxJmwmJmVzKDApfWNvbnN0IGZFdD1mdW5jdGlvbihsLGMsYSxmKXtyZXR1cm57cmFuZ2U6InN0YXJ0Iixx'@;
put 'dWVyeTpsLHF1ZXJ5VmFsdWVJbmRleDowLHF1ZXJ5SW5kZXg6YyxjbGF1c2VJbmRleDphLGlzRGF0ZVRpbWU6Zn19LGRFdD1mdW5jdGlvbihsLGMsYSxmKXtyZXR1cm57cmFuZ2U6ImVuZCIscXVlcnk6bCxxdWVyeVZhbHVlSW5kZXg6MSxxdWVyeUluZGV4OmMsY2xhdXNlSW5kZXg6YSxpc0Rh'@;
put 'dGVUaW1lOmZ9fTtmdW5jdGlvbiBoRXQobCxjKXtpZigxJmwmJih5ZSgwLCJkaXYiLDU1KSgxLCJkaXYiLDU2KSx0dCgyLHVFdCwxLDAsIm5nLWNvbnRhaW5lciIsNTMpLENlKCkseWUoMywiZGl2Iiw1NyksdHQoNCxjRXQsMSwwLCJuZy1jb250YWluZXIiLDUzKSxDZSgpKCkpLDImbCl7Y29u'@;
put 'c3QgYT1HZSgpLm5nVmFyLGY9R2UoKSxkPWYuJGltcGxpY2l0LGg9Zi5pbmRleCxtPUdlKCkuaW5kZXgsXz1HZSgpLE89UWkoMzEpLFg9UWkoMzUpO1NlKDIpLFJlKCJuZ1RlbXBsYXRlT3V0bGV0IixhJiZfLnVzZVBpY2tlcnM/TzpYKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLE1PKDQs'@;
put 'ZkV0LGQsaCxtLGEpKSxTZSgyKSxSZSgibmdUZW1wbGF0ZU91dGxldCIsYSYmXy51c2VQaWNrZXJzP086WCkoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixNTyg5LGRFdCxkLGgsbSxhKSl9fWZ1bmN0aW9uIHBFdChsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImRpdiIsNTgpKDEs'@;
put 'ImxhYmVsIiwzKSxZZSgyLCJWYWx1ZSIpLENlKCkseWUoMywiaW5wdXQiLDU5KSxFdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oZCl7cmV0dXJuIFV0KGEpLFp0KEdlKDIpLiRpbXBsaWNpdC52YWx1ZT1kKX0pKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihkKXtVdChhKTtjb25zdCBoPUdl'@;
put 'KDIpLmluZGV4LG09R2UoKS5pbmRleDtyZXR1cm4gWnQoR2UoKS5zZXRWYXJpYWJsZVZhbHVlcyhkLGgsbSkpfSksQ2UoKSgpfWlmKDImbCl7Y29uc3QgYT1HZSgyKS4kaW1wbGljaXQ7U2UoMyksUmUoIm5nTW9kZWwiLGEudmFsdWUpfX1mdW5jdGlvbiBtRXQobCxjKXtpZigxJmwmJih5ZSgw'@;
put 'LCJkaXYiLDQ2KSx0dCgxLG9FdCw0LDYsImRpdiIsNDcpLHR0KDIsc0V0LDIsNywiZGl2Iiw0OCksdHQoMyxoRXQsNSwxNCwiZGl2Iiw0OSksdHQoNCxwRXQsNCwxLCJkaXYiLDUwKSxDZSgpKSwyJmwpe2NvbnN0IGE9R2UoKS4kaW1wbGljaXQ7U2UoMSksUmUoIm5nSWYiLCJJTiI9PT1hLm9w'@;
put 'ZXJhdG9yfHwiTk9UIElOIj09PWEub3BlcmF0b3IpLFNlKDEpLFJlKCJuZ0lmIiwiQkVUV0VFTiIhPT1hLm9wZXJhdG9yJiYiSU4iIT09YS5vcGVyYXRvciYmIk5PVCBJTiIhPT1hLm9wZXJhdG9yJiYiTElLRSIhPT1hLm9wZXJhdG9yJiYiQ09OVEFJTlMiIT09YS5vcGVyYXRvciYmIkJFR0lO'@;
put 'U19XSVRIIiE9PWEub3BlcmF0b3IpLFNlKDEpLFJlKCJuZ0lmIiwiQkVUV0VFTiI9PT1hLm9wZXJhdG9yKSxTZSgxKSxSZSgibmdJZiIsIkxJS0UiPT09YS5vcGVyYXRvcnx8IkJFR0lOU19XSVRIIj09PWEub3BlcmF0b3J8fCJDT05UQUlOUyI9PT1hLm9wZXJhdG9yKX19ZnVuY3Rpb24gZ0V0'@;
put 'KGwsYyl7aWYoMSZsKXtjb25zdCBhPVpuKCk7eWUoMCwiZGl2Iiw2KSgxLCJkaXYiLDM1KSgyLCJkaXYiLDM2KSgzLCJhcHAtc29mdC1zZWxlY3QiLDM3KSxFdCgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGQpe3JldHVybiBadChVdChhKS4kaW1wbGljaXQudmFyaWFibGU9ZCl9KSgib25JbnB1'@;
put 'dEV2ZW50IixmdW5jdGlvbihkKXtjb25zdCBoPVV0KGEpLG09aC4kaW1wbGljaXQsXz1oLmluZGV4LE89R2UoKS5pbmRleDtyZXR1cm4gWnQoR2UoKS52YXJpYWJsZUlucHV0Q2hhbmdlKG0udmFyaWFibGUsXyxPLGQpKX0pLHR0KDQsdEV0LDIsMSwib3B0aW9uIiwzOCksQ2UoKSgpKCkseWUo'@;
put 'NSwiZGl2IiwzOSkoNiwiY2xyLXNlbGVjdC1jb250YWluZXIiKSg3LCJsYWJlbCIpLFllKDgsIk9wZXJhdG9yIiksQ2UoKSx5ZSg5LCJzZWxlY3QiLDQwKSxFdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oZCl7cmV0dXJuIFp0KFV0KGEpLiRpbXBsaWNpdC5vcGVyYXRvcj1kKX0pKCJuZ01v'@;
put 'ZGVsQ2hhbmdlIixmdW5jdGlvbigpe2NvbnN0IGQ9VXQoYSksaD1kLmluZGV4LG09ZC4kaW1wbGljaXQsXz1HZSgpLmluZGV4O3JldHVybiBadChHZSgpLnNldFZhcmlhYmxlT3BlcmF0b3IoaCxtLm9wZXJhdG9yLF8pKX0pLHR0KDEwLG5FdCwyLDEsIm9wdGlvbiIsMzgpLENlKCkoKSgpLHR0'@;
put 'KDExLG1FdCw1LDQsImRpdiIsNDEpLHllKDEyLCJkaXYiLDQyKSgxMywiYnV0dG9uIiw0MyksRXQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9VXQoYSkuaW5kZXgsbT1HZSgpLmluZGV4O3JldHVybiBadChHZSgpLnJlbW92ZUNsYXVzZShoLG0pKX0pLHRuKDE0LCJjbHItaWNvbiIsNDQp'@;
put 'KDE1LCJzcGFuIiksQ2UoKSx5ZSgxNiwiYnV0dG9uIiw0NSksRXQoImNsaWNrIixmdW5jdGlvbigpe1V0KGEpO2NvbnN0IGQ9R2UoKS5pbmRleDtyZXR1cm4gWnQoR2UoKS5hZGRDbGF1c2UoZCkpfSksdG4oMTcsImNsci1pY29uIiwzMykoMTgsInNwYW4iKSxDZSgpKCkoKX1pZigyJmwpe2Nv'@;
put 'bnN0IGE9Yy4kaW1wbGljaXQsZj1jLmluZGV4LGQ9R2UoKS5pbmRleCxoPUdlKCk7Z3IoImludmFsaWQtY2xhdXNlIixhLmludmFsaWRDbGF1c2UpLFNlKDMpLFJlKCJpZCIsInNlbGVjdF92YWxzX3Zhcl9pZCIrZisiXyIrZCkoImlucHV0SWQiLCJ2YWxzX3Zhcl9pZCIrZisiXyIrZCkoImVt'@;
put 'aXRPbmx5U2VsZWN0ZWQiLCEwKSgidmFsdWUiLGEudmFyaWFibGUpLFNlKDEpLFJlKCJuZ0Zvck9mIixoLmNvbHMpLFNlKDUpLFJlKCJuZ01vZGVsIixhLm9wZXJhdG9yKSxTZSgxKSxSZSgibmdGb3JPZiIsYS5vcGVyYXRvcnMpLFNlKDEpLFJlKCJuZ1ZhciIsIkRBVEUiPT09YS5kZHR5cGV8'@;
put 'fCJEQVRFVElNRSI9PT1hLmRkdHlwZXx8IlRJTUUiPT09YS5kZHR5cGUpLFNlKDIpLFJlKCJkaXNhYmxlZCIsMT09PWguY2xhdXNlcy5xdWVyeU9ialtkXS5lbGVtZW50cy5sZW5ndGgpfX1mdW5jdGlvbiB2RXQobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJkaXYiLDI0KSgxLCJk'@;
put 'aXYiLDYpKDIsImRpdiIsMjUpKDMsImRpdiIsMjYpKDQsImNsci1zZWxlY3QtY29udGFpbmVyIikoNSwibGFiZWwiKSxZZSg2LCJMb2dpYyIpLENlKCkseWUoNywic2VsZWN0IiwyNyksRXQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGQpe3JldHVybiBadChVdChhKS4kaW1wbGljaXQuY2xh'@;
put 'dXNlTG9naWM9ZCl9KSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gVXQoYSksWnQoR2UoKS5zZXRMb2dpYygpKX0pLHR0KDgsSmt0LDIsMiwib3B0aW9uIiw5KSxDZSgpKCkoKSx0big5LCJiciIpLHR0KDEwLFFrdCw0LDAsImJ1dHRvbiIsMjgpLENlKCkseWUoMTEsImRpdiIs'@;
put 'MjkpLHR0KDEyLGVFdCwxLDAsImNsci1pY29uIiwzMCksdHQoMTMsZ0V0LDE5LDExLCJkaXYiLDMxKSxDZSgpKCksdG4oMTQsImJyIiksQ2UoKX1pZigyJmwpe2NvbnN0IGE9Yy4kaW1wbGljaXQsZj1HZSgpO1NlKDEpLGdyKCJpbnZhbGlkLWNsYXVzZSIsYS5pbnZhbGlkQ2xhdXNlKSxTZSg2'@;
put 'KSxSZSgibmdNb2RlbCIsYS5jbGF1c2VMb2dpYykoImRpc2FibGVkIixhLmVsZW1lbnRzLmxlbmd0aDwyKSxTZSgxKSxSZSgibmdGb3JPZiIsZi5sb2dpY09wZXJhdG9ycyksU2UoMiksUmUoIm5nSWYiLGYuaW5uZXJXaWR0aD43NjgpLFNlKDIpLFJlKCJuZ0lmIixmLmNsYXVzZXMucXVlcnlP'@;
put 'YmoubGVuZ3RoPjEpLFNlKDEpLFJlKCJuZ0Zvck9mIixhLmVsZW1lbnRzKX19ZnVuY3Rpb24geUV0KGwsYyl7aWYoMSZsKXtjb25zdCBhPVpuKCk7V3IoMCkseWUoMSwiYXBwLXNvZnQtc2VsZWN0Iiw2MiksRXQoInZhbHVlQ2hhbmdlIixmdW5jdGlvbihkKXtVdChhKTtjb25zdCBoPUdlKCks'@;
put 'bT1oLnF1ZXJ5LF89aC5xdWVyeUluZGV4LE89aC5jbGF1c2VJbmRleCxYPWgucXVlcnlWYWx1ZUluZGV4O3JldHVybiBadChHZSgpLmRhdGVDaGFuZ2UoZCxtLF8sTyxYKSl9KSx3bCgyLCJzYXNUb0pzRGF0ZSIpLHdsKDMsInNhc1RvSnNEYXRlIiksQ2UoKSxHcigpfWlmKDImbCl7Y29uc3Qg'@;
put 'YT1HZSgpLGY9YS5xdWVyeUluZGV4LGQ9YS5jbGF1c2VJbmRleCxoPWEucXVlcnlWYWx1ZUluZGV4LG09YS5xdWVyeTtTZSgxKSxSZSgiZGlzYWJsZVNvZnRzZWxlY3QiLCEwKSgiaW5wdXRJZCIsInZhbHNfZGF0ZSIrZisiXyIrZCkoInZhbHVlIix2b2lkIDAhPT1oP0pzKDIsMyxtLnZhbHVl'@;
put 'W2hdKTpKcygzLDUsbS52YWx1ZSkpfX1mdW5jdGlvbiBiRXQobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTtXcigwKSx5ZSgxLCJhcHAtc29mdC1zZWxlY3QiLDYzKSxFdCgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGQpe1V0KGEpO2NvbnN0IGg9R2UoKSxtPWguY2xhdXNlSW5kZXgsXz1oLnF1'@;
put 'ZXJ5SW5kZXg7cmV0dXJuIFp0KEdlKCkuZ2V0UXVlcnlEYXRlVGltZShtLF8pLmRhdGU9ZCl9KSgib25JbnB1dEV2ZW50IixmdW5jdGlvbigpe1V0KGEpO2NvbnN0IGQ9R2UoKSxoPWQucXVlcnksbT1kLnF1ZXJ5SW5kZXgsXz1kLmNsYXVzZUluZGV4LE89ZC5xdWVyeVZhbHVlSW5kZXg7cmV0'@;
put 'dXJuIFp0KEdlKCkuZGF0ZVRpbWVDaGFuZ2UoaCxtLF8sTykpfSksd2woMiwic2FzVG9Kc0RhdGUiKSx3bCgzLCJzYXNUb0pzRGF0ZSIpLENlKCkseWUoNCwiYXBwLXNvZnQtc2VsZWN0Iiw2NCksRXQoInZhbHVlQ2hhbmdlIixmdW5jdGlvbihkKXtVdChhKTtjb25zdCBoPUdlKCksbT1oLmNs'@;
put 'YXVzZUluZGV4LF89aC5xdWVyeUluZGV4O3JldHVybiBadChHZSgpLmdldFF1ZXJ5RGF0ZVRpbWUobSxfKS50aW1lPWQpfSkoIm9uSW5wdXRFdmVudCIsZnVuY3Rpb24oKXtVdChhKTtjb25zdCBkPUdlKCksaD1kLnF1ZXJ5LG09ZC5xdWVyeUluZGV4LF89ZC5jbGF1c2VJbmRleCxPPWQucXVl'@;
put 'cnlWYWx1ZUluZGV4O3JldHVybiBadChHZSgpLmRhdGVUaW1lQ2hhbmdlKGgsbSxfLE8pKX0pLHdsKDUsInNhc1RvSnNEYXRlIiksd2woNiwic2FzVG9Kc0RhdGUiKSxDZSgpLEdyKCl9aWYoMiZsKXtjb25zdCBhPUdlKCksZj1hLnF1ZXJ5SW5kZXgsZD1hLmNsYXVzZUluZGV4LGg9YS5xdWVy'@;
put 'eVZhbHVlSW5kZXgsbT1hLnF1ZXJ5O1NlKDEpLFJlKCJkaXNhYmxlU29mdHNlbGVjdCIsITApKCJpbnB1dElkIiwidmFsc19kYXRlIitmKyJfIitkKSgidmFsdWUiLHZvaWQgMCE9PWg/d2coMiw2LG0udmFsdWVbaF0sInNlY29uZHMiKTp3ZygzLDksbS52YWx1ZSwic2Vjb25kcyIpKSxTZSgz'@;
put 'KSxSZSgiZGlzYWJsZVNvZnRzZWxlY3QiLCEwKSgiaW5wdXRJZCIsInZhbHNfdGltZSIrZisiXyIrZCkoInZhbHVlIix2b2lkIDAhPT1oP19CKDUsMTIsbS52YWx1ZVtoXSwic2Vjb25kcyIsITApOl9CKDYsMTYsbS52YWx1ZSwic2Vjb25kcyIsITApKX19ZnVuY3Rpb24gX0V0KGwsYyl7aWYo'@;
put 'MSZsKXtjb25zdCBhPVpuKCk7V3IoMCkseWUoMSwiYXBwLXNvZnQtc2VsZWN0Iiw2NSksRXQoIm9uSW5wdXRFdmVudCIsZnVuY3Rpb24oZCl7VXQoYSk7Y29uc3QgaD1HZSgpLG09aC5xdWVyeSxfPWgucXVlcnlJbmRleCxPPWguY2xhdXNlSW5kZXgsWD1oLnF1ZXJ5VmFsdWVJbmRleDtyZXR1'@;
put 'cm4gWnQoR2UoKS50aW1lQ2hhbmdlKGQsbSxfLE8sWCkpfSksd2woMiwic2Vjb25kc1BhcnNlciIpLHdsKDMsInNlY29uZHNQYXJzZXIiKSxDZSgpLEdyKCl9aWYoMiZsKXtjb25zdCBhPUdlKCksZj1hLnF1ZXJ5SW5kZXgsZD1hLmNsYXVzZUluZGV4LGg9YS5xdWVyeVZhbHVlSW5kZXgsbT1h'@;
put 'LnF1ZXJ5O1NlKDEpLFJlKCJkaXNhYmxlU29mdHNlbGVjdCIsITApKCJpbnB1dElkIiwidmFsc18iK2YrIl8iK2QpKCJ2YWx1ZSIsdm9pZCAwIT09aD9KcygyLDMsbS52YWx1ZVtoXSk6SnMoMyw1LG0udmFsdWUpKX19ZnVuY3Rpb24gd0V0KGwsYyl7MSZsJiYoV3IoMCw2MCksdHQoMSx5RXQs'@;
put 'NCw3LCJuZy1jb250YWluZXIiLDYxKSx0dCgyLGJFdCw3LDIwLCJuZy1jb250YWluZXIiLDYxKSx0dCgzLF9FdCw0LDcsIm5nLWNvbnRhaW5lciIsNjEpLEdyKCkpLDImbCYmKFJlKCJuZ1N3aXRjaCIsYy5xdWVyeS5kZHR5cGUpLFNlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLCJEQVRFIiksU2Uo'@;
put 'MSksUmUoIm5nU3dpdGNoQ2FzZSIsIkRBVEVUSU1FIiksU2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsIlRJTUUiKSl9ZnVuY3Rpb24gQ0V0KGwsYyl7aWYoMSZsJiYoeWUoMCwib3B0aW9uIiw2OCksWWUoMSksQ2UoKSksMiZsKXtjb25zdCBhPWMuJGltcGxpY2l0O1JlKCJ2YWx1ZSIsYS51bmZv'@;
put 'cm1hdHRlZCksU2UoMSksd3IoIiAiLGEuZm9ybWF0dGVkLnRyaW0oKSwiICIpfX1mdW5jdGlvbiBTRXQobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJhcHAtc29mdC1zZWxlY3QiLDY2KSxFdCgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGQpe3JldHVybiBadChVdChhKS5xdWVyeS52'@;
put 'YWx1ZT1kKX0pKCJvbklucHV0RXZlbnQiLGZ1bmN0aW9uKGQpe2NvbnN0IGg9VXQoYSksbT1oLnF1ZXJ5SW5kZXgsXz1oLmNsYXVzZUluZGV4O3JldHVybiBadChHZSgpLnNldFZhcmlhYmxlVmFsdWVzKGQudGFyZ2V0LnZhbHVlLG0sXykpfSkoIm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUi'@;
put 'LGZ1bmN0aW9uKGQpe2NvbnN0IGg9VXQoYSksbT1oLnF1ZXJ5LF89aC5xdWVyeUluZGV4LE89aC5jbGF1c2VJbmRleDtyZXR1cm4gWnQoR2UoKS5vbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlKGQsbS52YXJpYWJsZSxfLE8pKX0pLHR0KDEsQ0V0LDIsMiwib3B0aW9uIiw2NyksQ2UoKX1pZigy'@;
put 'Jmwpe2NvbnN0IGE9Yy5xdWVyeTtSZSgiaW5wdXRJZCIsInZhbHNfIitjLnF1ZXJ5SW5kZXgrIl8iK2MuY2xhdXNlSW5kZXgpKCJ2YWx1ZSIsYS52YWx1ZSkoImVuYWJsZUxvYWRNb3JlIixhLm5vYnM+YS52YWx1ZXMubGVuZ3RoKSxTZSgxKSxSZSgibmdGb3JPZiIsYS52YWx1ZXMpfX1mdW5j'@;
put 'dGlvbiBNRXQobCxjKXtpZigxJmwmJih5ZSgwLCJvcHRpb24iLDY4KSxZZSgxKSxDZSgpKSwyJmwpe2NvbnN0IGE9Yy4kaW1wbGljaXQ7UmUoInZhbHVlIixhLmZvcm1hdHRlZCksU2UoMSksd3IoIiAiLGEuZm9ybWF0dGVkLCIgIil9fWZ1bmN0aW9uIGtFdChsLGMpe2lmKDEmbCl7Y29uc3Qg'@;
put 'YT1abigpO3llKDAsImFwcC1zb2Z0LXNlbGVjdCIsNjkpLEV0KCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24oZCl7Y29uc3QgaD1VdChhKTtyZXR1cm4gWnQoaC5xdWVyeS52YWx1ZVtoLnF1ZXJ5VmFsdWVJbmRleF09ZCl9KSgib25JbnB1dEV2ZW50IixmdW5jdGlvbigpe2NvbnN0IGQ9VXQoYSks'@;
put 'aD1kLnF1ZXJ5LG09ZC5xdWVyeUluZGV4LF89ZC5jbGF1c2VJbmRleDtyZXR1cm4gWnQoR2UoKS5zZXRWYXJpYWJsZVZhbHVlcyhoLnZhbHVlLG0sXykpfSkoIm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUiLGZ1bmN0aW9uKGQpe2NvbnN0IGg9VXQoYSksbT1oLnF1ZXJ5LF89aC5xdWVyeUlu'@;
put 'ZGV4LE89aC5jbGF1c2VJbmRleDtyZXR1cm4gWnQoR2UoKS5vbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlKGQsbS52YXJpYWJsZSxfLE8pKX0pLHR0KDEsTUV0LDIsMiwib3B0aW9uIiw2NyksQ2UoKX1pZigyJmwpe2NvbnN0IGE9Yy5yYW5nZSxmPWMucXVlcnksZD1jLnF1ZXJ5VmFsdWVJbmRl'@;
put 'eDtSZSgiaW5wdXRJZCIsInZhbHMtIithKyJfIitjLnF1ZXJ5SW5kZXgrIl8iK2MuY2xhdXNlSW5kZXgpKCJ2YWx1ZSIsZi52YWx1ZVtkXSkoImVuYWJsZUxvYWRNb3JlIixmLm5vYnM+Zi52YWx1ZXMubGVuZ3RoKSgiZGlzYWJsZWQiLHZvaWQgMCE9PWQmJiJzdGFydCIhPT1hJiYhZi52YWx1'@;
put 'ZVswXSksU2UoMSksUmUoIm5nRm9yT2YiLGYudmFsdWVzKX19ZnVuY3Rpb24gRUV0KGwsYyl7MSZsJiYoeWUoMCwiaDUiLDc3KSxZZSgxLCIgTm8gdmFsdWVzIGF2YWlsYWJsZS4gIiksQ2UoKSl9ZnVuY3Rpb24geEV0KGwsYyl7aWYoMSZsKXtjb25zdCBhPVpuKCk7eWUoMCwiY2xyLWNoZWNr'@;
put 'Ym94LXdyYXBwZXIiKSgxLCJpbnB1dCIsNzkpLEV0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihkKXtjb25zdCBtPVV0KGEpLmluZGV4O3JldHVybiBadChHZSgyKS5xdWVyeS52YWx1ZVttXS5jaGVja2VkPWQpfSkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGQpe1V0KGEpO2NvbnN0IGg9'@;
put 'R2UoMiksbT1oLnF1ZXJ5SW5kZXgsXz1oLmNsYXVzZUluZGV4O3JldHVybiBadChHZSgpLnNldFZhcmlhYmxlVmFsdWVzKGQsbSxfKSl9KSxDZSgpLHllKDIsImxhYmVsIiksWWUoMyksQ2UoKSgpfWlmKDImbCl7Y29uc3QgYT1jLiRpbXBsaWNpdCxmPWMuaW5kZXgsZD1HZSgyKS5xdWVyeTtT'@;
put 'ZSgxKSxSZSgibmdNb2RlbCIsZC52YWx1ZVtmXS5jaGVja2VkKSxTZSgyKSx3cigiICIsYS5mb3JtYXR0ZWQsIiAiKX19ZnVuY3Rpb24gQUV0KGwsYyl7aWYoMSZsJiYoeWUoMCwic2VjdGlvbiIsNzgpKDEsImNsci1jaGVja2JveC1jb250YWluZXIiKSx0dCgyLHhFdCw0LDIsImNsci1jaGVj'@;
put 'a2JveC13cmFwcGVyIiwzOCksQ2UoKSgpKSwyJmwpe2NvbnN0IGE9R2UoKS5xdWVyeTtTZSgyKSxSZSgibmdGb3JPZiIsYS52YWx1ZXMpfX1mdW5jdGlvbiBURXQobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJjbHItbW9kYWwiLDcwKSgxLCJoMyIsNzEpLFllKDIsIlNlbGVjdCB2'@;
put 'YWx1ZXMiKSxDZSgpLHllKDMsImRpdiIsNzIpLHR0KDQsRUV0LDIsMCwiaDUiLDczKSx0dCg1LEFFdCwzLDEsInNlY3Rpb24iLDc0KSxDZSgpLHllKDYsImRpdiIsNzUpKDcsImJ1dHRvbiIsNzYpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtVdChhKTtjb25zdCBkPUdlKCk7cmV0dXJuIGQuY3Vy'@;
put 'cmVudFF1ZXJ5SW5kZXg9LTEsWnQoZC5jdXJyZW50Q2xhdXNlSW5kZXg9LTEpfSksWWUoOCwiIEFwcGx5ICIpLENlKCkoKSgpfWlmKDImbCl7Y29uc3QgYT1jLnF1ZXJ5LGY9Yy5xdWVyeUluZGV4LGQ9Yy5jbGF1c2VJbmRleCxoPUdlKCk7UmUoImNsck1vZGFsT3BlbiIsaC5jdXJyZW50UXVl'@;
put 'cnlJbmRleD09PWYmJmguY3VycmVudENsYXVzZUluZGV4PT09ZCkoImNsck1vZGFsQ2xvc2FibGUiLCExKSxTZSg0KSxSZSgibmdJZiIsIWguaXNBcnIoYS52YWx1ZSkpLFNlKDEpLFJlKCJuZ0lmIixoLmlzQXJyKGEudmFsdWUpKX19IWZ1bmN0aW9uIHE5ZShsLGMsYSl7KGZ1bmN0aW9uIHdP'@;
put 'KGwsYyxhKXsic3RyaW5nIiE9dHlwZW9mIGMmJihhPWMsYz1sW2VhLkxvY2FsZUlkXSksYz1jLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXy9nLCItIiksZGRbY109bCxhJiYoZGRbY11bZWEuRXh0cmFEYXRhXT1hKX0pKGwsYyxhKX0oUGt0KTtsZXQgSEo9KCgpPT57Y2xhc3MgbHtjb25zdHJ1'@;
put 'Y3RvcihhLGYsZCxoKXt0aGlzLnNhc1N0b3JlU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWYsdGhpcy5oZWxwZXJTZXJ2aWNlPWQsdGhpcy5jZGY9aCx0aGlzLmNhY2hpbmc9ITAsdGhpcy5yb3dzX2luY3JlbWVudD0xMDAsdGhpcy5pbml0aWFsX3Jvd3M9MWUzLHRoaXMuY2xhdXNlQW10'@;
put 'PVsiIl0sdGhpcy5udW1PcGVyYXRvcnM9WyI9IiwiPCIsIj4iLCI8PSIsIj49IiwiQkVUV0VFTiIsIklOIiwiTk9UIElOIiwiTkUiXSx0aGlzLmNoYXJPcGVyYXRvcnM9WyI9IiwiPCIsIj4iLCI8PSIsIj49IiwiQ09OVEFJTlMiLCJJTiIsIk5PVCBJTiIsIk5FIl0sdGhpcy5ub3RJbj0hMSx0'@;
put 'aGlzLm5vdEFycj0hMCx0aGlzLndhc0JldHdlZW49ITEsdGhpcy53aGVyZUNsYXVzZUxvYWRpbmc9ITEsdGhpcy5keW5hbWljV2hlcmVDbGF1c2U9ITAsdGhpcy51c2VQaWNrZXJzPSExLHRoaXMucXVlcnlPYmo9e2VsZW1lbnRzOlt7bG9naWM6bnVsbCx0eXBlOm51bGwsZGR0eXBlOm51bGws'@;
put 'dmFyaWFibGU6bnVsbCxvcGVyYXRvcjpudWxsLHZhbHVlOm51bGwsc3RhcnRyb3c6MCxyb3dzOjAsbm9iczowLHZhbHVlczpbXSxvcGVyYXRvcnM6W119XSxjbGF1c2VMb2dpYzoiIixpbnZhbGlkQ2xhdXNlOiExfSx0aGlzLnNlbFZhcj17aW5kZXg6bnVsbCxmb3JtYXQ6bnVsbCx0eXBlOm51'@;
put 'bGx9LHRoaXMuaW5PYmo9W3tjaGVja2VkOiExLHZhbHVlOm51bGx9XSx0aGlzLmdyb3VwTG9naWM9IkFORCIsdGhpcy5jbGF1c2VzPXtxdWVyeU9iajpbdGhpcy5xdWVyeU9ial0sY2xhdXNlTG9naWM6W10sZ3JvdXBMb2dpYzp0aGlzLmdyb3VwTG9naWN9LHRoaXMubG9naWNPcGVyYXRvcnM9'@;
put 'WyJBTkQiLCJPUiJdLHRoaXMucXVlcnlEYXRlVGltZT1bXSx0aGlzLmN1cnJlbnRDbGF1c2VJbmRleD0tMSx0aGlzLmN1cnJlbnRRdWVyeUluZGV4PS0xLHRoaXMucGVuZGluZ0lOVmFsdWVzU2V0PW51bGwsdGhpcy5pbm5lcldpZHRoPXdpbmRvdy5zY3JlZW4ud2lkdGgsdGhpcy5pbm5lcldp'@;
put 'ZHRoPjc2OCYmKHRoaXMubm9Cb3JkZXI9ImJvcmRlci1sZWZ0OiAycHggc29saWQgZ3JheTsiKX1nZXRRdWVyeURhdGVUaW1lKGEsZil7bGV0IGQ9dGhpcy5xdWVyeURhdGVUaW1lLmZpbmQoaD0+aC5jbGF1c2VJbmRleD09PWEmJmgucXVlcnlJbmRleD09PWYpO2lmKCFkKXtjb25zdCBoPXRo'@;
put 'aXMucXVlcnlEYXRlVGltZS5wdXNoKHtjbGF1c2VJbmRleDphLHF1ZXJ5SW5kZXg6ZixkYXRlOiIiLHRpbWU6IiJ9KS0xO2Q9dGhpcy5xdWVyeURhdGVUaW1lW2hdfXJldHVybiBkfXVzZVBpY2tlcnNDaGFuZ2UoKXt0aGlzLnF1ZXJ5RGF0ZVRpbWU9W119cmVzZXRGaWx0ZXIoKXt0aGlzLndo'@;
put 'ZXJlU3RyaW5nPXZvaWQgMCx0aGlzLndoZXJlQ2xhdXNlPXZvaWQgMCx0aGlzLnF1ZXJ5T2JqPXtlbGVtZW50czpbe2xvZ2ljOm51bGwsdHlwZTpudWxsLGRkdHlwZTpudWxsLHZhcmlhYmxlOm51bGwsb3BlcmF0b3I6bnVsbCx2YWx1ZTpudWxsLHZhbHVlczpbXSxvcGVyYXRvcnM6W119XX0s'@;
put 'dGhpcy5jbGF1c2VzPXtxdWVyeU9iajpbdGhpcy5xdWVyeU9ial0sY2xhdXNlTG9naWM6W10sZ3JvdXBMb2dpYzp0aGlzLmdyb3VwTG9naWN9LHRoaXMud2hlcmVDbGF1c2VGbighMCl9c2V0VG9HbG9iYWxzKCl7aWYoIXRoaXMuY2FjaGluZylyZXR1cm47bGV0IGE9IiI7ImhvbWUiPT09Sm4u'@;
put 'cm9vdFBhcmFtfHwiZWRpdG9yIj09PUpuLnJvb3RQYXJhbT9hPXRoaXMudmlld2JveElkP2B2aWV3Ym94ZXMuJHt0aGlzLnZpZXdib3hJZH1gOiJlZGl0b3IiOiJ2aWV3Ij09PUpuLnJvb3RQYXJhbSYmKGE9InZpZXdlciIpLG9zKEpuLGEpLmZpbHRlci5ncm91cExvZ2ljPXRoaXMuZ3JvdXBM'@;
put 'b2dpYywic3RyaW5nIj09dHlwZW9mIHRoaXMud2hlcmVDbGF1c2UmJihvcyhKbixhKS5maWx0ZXIud2hlcmVDbGF1c2U9dGhpcy53aGVyZUNsYXVzZSksInN0cmluZyI9PXR5cGVvZiB0aGlzLmxpYmRzJiYob3MoSm4sYSkuZmlsdGVyLmxpYmRzPXRoaXMubGliZHMpLG9zKEpuLGEpLmZpbHRl'@;
put 'ci5jbGF1c2VzPXRoaXMuY2xhdXNlcyxjb25zb2xlLmxvZygiZ2xvYmFscyIsSm4pfWdldEZyb21HbG9iYWxzKCl7aWYoIXRoaXMuY2FjaGluZylyZXR1cm47bGV0IGE9IiI7ImhvbWUiPT09Sm4ucm9vdFBhcmFtfHwiZWRpdG9yIj09PUpuLnJvb3RQYXJhbT9hPXRoaXMudmlld2JveElkP2B2'@;
put 'aWV3Ym94ZXMuJHt0aGlzLnZpZXdib3hJZH1gOiJlZGl0b3IiOiJ2aWV3Ij09PUpuLnJvb3RQYXJhbSYmKGE9InZpZXdlciIpLG9zKEpuLGEpLmZpbHRlci5jb2xzLmxlbmd0aD4wJiYodGhpcy5jb2xzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob3MoSm4sYSkuZmlsdGVyLmNvbHMpKSks'@;
put 'b3MoSm4sYSkuZmlsdGVyLnZhbHMubGVuZ3RoPjAmJih0aGlzLnZhbHM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvcyhKbixhKS5maWx0ZXIudmFscykpKSwiIiE9PW9zKEpuLGEpLmZpbHRlci5ncm91cExvZ2ljJiYodGhpcy5ncm91cExvZ2ljPW9zKEpuLGEpLmZpbHRlci5ncm91cExv'@;
put 'Z2ljLHRoaXMud2hlcmVDbGF1c2U9b3MoSm4sYSkuZmlsdGVyLndoZXJlQ2xhdXNlLHRoaXMubGliZHM9b3MoSm4sYSkuZmlsdGVyLmxpYmRzLHRoaXMuY2xhdXNlcz1vcyhKbixhKS5maWx0ZXIuY2xhdXNlcyx0aGlzLndoZXJlQ2xhdXNlRm4oKSl9c2V0R3JvdXBMb2dpYyhhKXt0aGlzLmdy'@;
put 'b3VwTG9naWM9YSx0aGlzLmNsYXVzZXMuZ3JvdXBMb2dpYz1hLHRoaXMud2hlcmVDbGF1c2VGbigpLHRoaXMuc2V0VG9HbG9iYWxzKCl9ZGF0ZUNoYW5nZShhLGYsZCxoLG0pe2xldCBfPXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0SnNEYXRlVG9TYXNEYXRlKGEpOyJCRVRXRUVOIj09PWYu'@;
put 'b3BlcmF0b3ImJnZvaWQgMCE9PW0mJih0aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0udmFsdWVbbV09XyksdGhpcy5zZXRWYXJpYWJsZVZhbHVlcyhfLGQsaCl9ZGF0ZVRpbWVDaGFuZ2UoYSxmLGQsaCl7Y29uc3QgbT10aGlzLmdldFF1ZXJ5RGF0ZVRpbWUoZCxmKTtpZigi'@;
put 'Ij09PW0uZGF0ZSl7aWYoIiI9PT1hLnZhbHVlKXJldHVybjttLmRhdGU9YS52YWx1ZS5zcGxpdCgiOiIpWzBdfWNvbnN0IF89cGFyc2VJbnQobS50aW1lLnNwbGl0KCI6IilbMF0pLE89cGFyc2VJbnQobS50aW1lLnNwbGl0KCI6IilbMV0pLFg9cGFyc2VJbnQobS50aW1lLnNwbGl0KCI6Iilb'@;
put 'Ml0pfHwwO2xldCBhZT1uZXcgRGF0ZShtLmRhdGUpLHBlPW5ldyBEYXRlKGFlLmdldEZ1bGxZZWFyKCksYWUuZ2V0TW9udGgoKSxhZS5nZXREYXRlKCksXyxPLFgpLGJlPXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0SnNEYXRlVG9TYXNEYXRlKHBlLCJzZWNvbmRzIik7IkJFVFdFRU4iPT09'@;
put 'YS5vcGVyYXRvciYmdm9pZCAwIT09aCYmKHRoaXMuY2xhdXNlcy5xdWVyeU9ialtkXS5lbGVtZW50c1tmXS52YWx1ZVtoXT1iZSksdGhpcy5zZXRWYXJpYWJsZVZhbHVlcyhiZSxmLGQpfXRpbWVDaGFuZ2UoYSxmLGQsaCxtKXthPWEudGFyZ2V0LnZhbHVlO2xldCBiZT02MCpwYXJzZUludChh'@;
put 'LnNwbGl0KCI6IilbMF0pKjYwKzYwKnBhcnNlSW50KGEuc3BsaXQoIjoiKVsxXSkrKHBhcnNlSW50KGEuc3BsaXQoIjoiKVsyXSl8fDApOyJCRVRXRUVOIj09PWYub3BlcmF0b3ImJnZvaWQgMCE9PW0mJih0aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0udmFsdWVbbV09YmUp'@;
put 'LHRoaXMuc2V0VmFyaWFibGVWYWx1ZXMoYmUsZCxoKX1keW5hbWljV2hlcmVDbGF1c2VDcmVhdG9yKGEsZil7bGV0IGQ9W107aWYodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aD4xfHx0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHMubGVuZ3RoPjEpZm9yKGxldCBoPTA7aDx0'@;
put 'aGlzLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoO2grKylmb3IobGV0IG09MDttPHRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50cy5sZW5ndGg7bSsrKXtpZihoPT09YSYmbT09PWZ8fFtudWxsLHZvaWQgMF0uaW5jbHVkZXModGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRz'@;
put 'W21dLnZhcmlhYmxlKXx8W251bGwsdm9pZCAwXS5pbmNsdWRlcyh0aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbbV0ub3BlcmF0b3IpfHxbbnVsbCx2b2lkIDBdLmluY2x1ZGVzKHRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1ttXS52YWx1ZSkpY29udGludWU7bGV0'@;
put 'IF89IiI7Y29uc3QgTz10aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbbV0ub3BlcmF0b3IsWD10aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbbV0udmFyaWFibGU7IkJFVFdFRU4iPT09Tz9fPWAke3RoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1ttXS52'@;
put 'YWx1ZVswXX0gQU5EICR7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdW21dLnZhbHVlWzFdfWA6IklOIj09PU98fCJOT1QgSU4iPT09Tz8odGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdW21dLnZhbHVlLmZvckVhY2goYWU9PntpZihhZS5jaGVja2VkKXtsZXQgcGU9YWUudmFsOyJzdHJpbmciIT10'@;
put 'eXBlb2YgcGV8fCgwLHUzLmlzU3BlY2lhbE1pc3NpbmcpKHBlKT9fLmxlbmd0aD4wP18rPWAsJHtwZX1gOl89YCgke3BlfWA6Xy5sZW5ndGg+MD9fKz1gLCcke3BlfSdgOl89YCgnJHtwZX0nYH19KSxfLmxlbmd0aD4wJiYoXys9IikiKSk6IiI9PT10aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0u'@;
put 'ZWxlbWVudHNbbV0udmFsdWU/Xz0iY2hhciI9PT10aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbbV0udHlwZT8iJyAnIjoiLiI6ImNoYXIiPT09dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW21dLnR5cGUmJihfPWAnJHt0aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0u'@;
put 'ZWxlbWVudHNbbV0udmFsdWV9J2ApLGQucHVzaCh7R1JPVVBfTE9HSUM6dGhpcy5jbGF1c2VzLmdyb3VwTG9naWMsU1VCR1JPVVBfTE9HSUM6dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmNsYXVzZUxvZ2ljfHwiQU5EIixTVUJHUk9VUF9JRDpoLFZBUklBQkxFX05NOlgsT1BFUkFUT1JfTk06'@;
put 'TyxSQVdfVkFMVUU6X3x8dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW21dLnZhbHVlfSl9cmV0dXJuIGR9Z2V0VmFsdWVzTG9hZE1vcmUoYSxmLGQsaCl7dmFyIG09dGhpcztyZXR1cm4geWkoZnVuY3Rpb24qKCl7Y29uc3QgXz1tLmxpYmRzfHwiIjt0cnl7aWYodm9pZCAwIT09'@;
put 'bS5jb2xzKXtmb3IobGV0IFplPTA7WmU8bS5jb2xzLmxlbmd0aDtaZSsrKW0uY29sc1taZV0uTkFNRT09PWYmJihtLnNlbFZhci5pbmRleD1aZSk7Y29uc3QgTz1tLmNvbHNbbS5zZWxWYXIuaW5kZXhdLkREVFlQRSx7c3RhcnRyb3c6WCxyb3dzOmFlfT1tLmNsYXVzZXMucXVlcnlPYmpbaF0u'@;
put 'ZWxlbWVudHNbZF0scGU9bS5yb3dzX2luY3JlbWVudCxiZT1YK2FlO2xldCB4ZT1bXTttLmR5bmFtaWNXaGVyZUNsYXVzZSYmKHhlPW0uZHluYW1pY1doZXJlQ2xhdXNlQ3JlYXRvcihoLGQpKTtjb25zdCBWZT1bIkRBVEVUSU1FIiwiVElNRSIsIkRBVEUiXS5pbmNsdWRlcyhPKTttLnNhc1N0'@;
put 'b3JlU2VydmljZS5nZXRRdWVyeVZhbHVlcyhmLF8seGUsYmUscGUpLnRoZW4oWmU9Pntjb25zdCBsdD1aZS52YWxzLHtTVEFSVFJPVzpkdCxST1dTOmd0LE5PQlM6anR9PVplLm1ldGFbMF07aWYobS5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnN0YXJ0cm93PWR0LG0uY2xhdXNl'@;
put 'cy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS5yb3dzPWd0LG0uY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS5ub2JzPWp0LDE9PT1sdC5sZW5ndGgmJiIiPT09bHRbMF0uRk9STUFUVEVEJiYiIj09PWx0WzBdLlVORk9STUFUVEVEP2EubG9hZE1vcmVGaW5pc2hlZCghMSk6KG0uY2xh'@;
put 'dXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS52YWx1ZXMucHVzaCguLi5sdC5tYXAoeW49Pntjb25zdCBRbj0ibnVtIj09PVplLiR2YWxzLnZhcnMuVU5GT1JNQVRURUQudHlwZTtsZXQgVnI9UW4mJigwLHUzLmlzU3BlY2lhbE1pc3NpbmcpKHluLlVORk9STUFUVEVEKT8iLiIreW4uVU5G'@;
put 'T1JNQVRURUQ6eW4uVU5GT1JNQVRURUQ7cmV0dXJuIFFuJiZudWxsPT09VnImJihWcj0iLiIpLHtmb3JtYXR0ZWQ6VmU/eW4uRk9STUFUVEVELnNwbGl0KCIuIilbMF06eW4uRk9STUFUVEVELHVuZm9ybWF0dGVkOlZyfX0pKSxhLmxvYWRNb3JlRmluaXNoZWQoanQtbS5jbGF1c2VzLnF1ZXJ5'@;
put 'T2JqW2hdLmVsZW1lbnRzW2RdLnZhbHVlcy5sZW5ndGg+MCkpLG0ud2hlcmVDbGF1c2VGbigpLG0uc2V0VG9HbG9iYWxzKCksbS53aGVyZUNsYXVzZUxvYWRpbmc9ITEsbnVsbCE9PW0ucGVuZGluZ0lOVmFsdWVzU2V0KXtjb25zdHtjbGF1c2VJbmRleDpybixxdWVyeUluZGV4Olh0fT1tLnBl'@;
put 'bmRpbmdJTlZhbHVlc1NldDttLnNldElOVmFsdWVzKHJuLFh0KSxtLnBlbmRpbmdJTlZhbHVlc1NldD1udWxsfW0uY2RmLmRldGVjdENoYW5nZXMoKX0pLmNhdGNoKFplPT57bS53aGVyZUNsYXVzZUxvYWRpbmc9ITF9KX19Y2F0Y2goTyl7bS5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVy'@;
put 'cm9yKCJwdWJsaWMvZ2V0Y29sdmFscyIsTyl9fSkoKX1nZXRWYWx1ZXMoYSxmLGQpe3ZhciBoPXRoaXM7cmV0dXJuIHlpKGZ1bmN0aW9uKigpe2gud2hlcmVDbGF1c2VMb2FkaW5nPSEwO2xldCBtPSIiO3ZvaWQgMCE9PWgubGliZHMmJihtPWgubGliZHMpLGguY2xlYXJWYWx1ZXMoZixkKSxo'@;
put 'LmNsYXVzZXMucXVlcnlPYmpbZF0uZWxlbWVudHNbZl0udmFsdWVzPVtdLGguY2xhdXNlcy5xdWVyeU9ialtkXS5lbGVtZW50c1tmXS52YWx1ZT0iIixoLmNsYXVzZXMucXVlcnlPYmpbZF0uZWxlbWVudHNbZl0ub3BlcmF0b3I9Ij0iLGguY2xhdXNlcy5xdWVyeU9ialtkXS5lbGVtZW50c1tm'@;
put 'XS52YXJpYWJsZT1hO3RyeXtpZih2b2lkIDAhPT1oLmNvbHMpe2ZvcihsZXQgYWU9MDthZTxoLmNvbHMubGVuZ3RoO2FlKyspaC5jb2xzW2FlXS5OQU1FPT09YSYmKGguc2VsVmFyLmluZGV4PWFlKTtjb25zdCBfPWguY29sc1toLnNlbFZhci5pbmRleF0uRERUWVBFO2guY2xhdXNlcy5xdWVy'@;
put 'eU9ialtkXS5lbGVtZW50c1tmXS5kZHR5cGU9XyxoLmNsYXVzZXMucXVlcnlPYmpbZF0uZWxlbWVudHNbZl0udHlwZT1oLmNvbHNbaC5zZWxWYXIuaW5kZXhdLlRZUEUsaC5jbGF1c2VzLnF1ZXJ5T2JqW2RdLmVsZW1lbnRzW2ZdLm9wZXJhdG9ycz0ibnVtIj09PWguY2xhdXNlcy5xdWVyeU9i'@;
put 'altkXS5lbGVtZW50c1tmXS50eXBlP2gubnVtT3BlcmF0b3JzOmguY2hhck9wZXJhdG9ycztsZXQgTz1bXTtoLmR5bmFtaWNXaGVyZUNsYXVzZSYmKE89aC5keW5hbWljV2hlcmVDbGF1c2VDcmVhdG9yKGQsZikpO2NvbnN0IFg9WyJEQVRFVElNRSIsIlRJTUUiLCJEQVRFIl0uaW5jbHVkZXMo'@;
put 'Xyk7aC5zYXNTdG9yZVNlcnZpY2UuZ2V0UXVlcnlWYWx1ZXMoYSxtLE8sMSxoLmluaXRpYWxfcm93cykudGhlbihhZT0+e2NvbnN0IHBlPWFlLnZhbHMse1NUQVJUUk9XOmJlLFJPV1M6eGUsTk9CUzpWZX09YWUubWV0YVswXTtpZihoLmNsYXVzZXMucXVlcnlPYmpbZF0uZWxlbWVudHNbZl0u'@;
put 'c3RhcnRyb3c9YmUsaC5jbGF1c2VzLnF1ZXJ5T2JqW2RdLmVsZW1lbnRzW2ZdLnJvd3M9eGUsaC5jbGF1c2VzLnF1ZXJ5T2JqW2RdLmVsZW1lbnRzW2ZdLm5vYnM9VmUsaC5jbGF1c2VzLnF1ZXJ5T2JqW2RdLmVsZW1lbnRzW2ZdLnZhbHVlcz1wZS5tYXAoWmU9Pntjb25zdCBsdD0ibnVtIj09'@;
put 'PWFlLiR2YWxzLnZhcnMuVU5GT1JNQVRURUQudHlwZTtsZXQgZ3Q9bHQmJigwLHUzLmlzU3BlY2lhbE1pc3NpbmcpKFplLlVORk9STUFUVEVEKT8iLiIrWmUuVU5GT1JNQVRURUQ6WmUuVU5GT1JNQVRURUQ7cmV0dXJuIGx0JiZudWxsPT09Z3QmJihndD0iLiIpLHtmb3JtYXR0ZWQ6WD9aZS5G'@;
put 'T1JNQVRURUQuc3BsaXQoIi4iKVswXTpaZS5GT1JNQVRURUQsdW5mb3JtYXR0ZWQ6Z3R9fSkuc2xpY2UoMCwyZTMpLGgud2hlcmVDbGF1c2VGbigpLGguc2V0VG9HbG9iYWxzKCksaC53aGVyZUNsYXVzZUxvYWRpbmc9ITEsbnVsbCE9PWgucGVuZGluZ0lOVmFsdWVzU2V0KXtjb25zdHtjbGF1'@;
put 'c2VJbmRleDpaZSxxdWVyeUluZGV4Omx0fT1oLnBlbmRpbmdJTlZhbHVlc1NldDtoLnNldElOVmFsdWVzKFplLGx0KSxoLnBlbmRpbmdJTlZhbHVlc1NldD1udWxsfWguY2RmLmRldGVjdENoYW5nZXMoKX0pLmNhdGNoKGFlPT57aC53aGVyZUNsYXVzZUxvYWRpbmc9ITF9KX19Y2F0Y2goXyl7'@;
put 'aC5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJwdWJsaWMvZ2V0Y29sdmFscyIsXyl9fSkoKX1nZXRsb2dpYyhhKXt0aGlzLmxvZ2ljPWEsdGhpcy53aGVyZUNsYXVzZUZuKCl9c2V0TG9naWMoKXt0aGlzLndoZXJlQ2xhdXNlRm4oKSx0aGlzLnNldFRvR2xvYmFscygpfWlzQXJy'@;
put 'KGEpe3JldHVybiBhIGluc3RhbmNlb2YgQXJyYXkmJmEubGVuZ3RoPjAmJnR5cGVvZiBhWzBdLmNoZWNrZWQ8InUifXZhcmlhYmxlSW5wdXRDaGFuZ2UoYSxmLGQsaCl7dGhpcy5nZXRWYWx1ZXMoYSxmLGQpfXNldFZhcmlhYmxlVmFsdWVzKGEsZixkKXtsZXQgaD10aGlzLmNsYXVzZXMucXVl'@;
put 'cnlPYmpbZF0uZWxlbWVudHNbZl0ub3BlcmF0b3I7IkJFVFdFRU4iIT09aCYmIklOIiE9PWgmJiJOT1QgSU4iIT09aCYmKHRoaXMuY2xhdXNlcy5xdWVyeU9ialtkXS5lbGVtZW50c1tmXS52YWx1ZT1hLnRvU3RyaW5nKCkpLHRoaXMud2hlcmVDbGF1c2VGbigpLHRoaXMuc2V0VG9HbG9iYWxz'@;
put 'KCl9c2V0VmFyaWFibGVPcGVyYXRvcihhLGYsZCl7bGV0IGg9dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2RdLmVsZW1lbnRzW2FdLnZhbHVlO2ggaW5zdGFuY2VvZiBBcnJheSYmIklOIiE9PWYmJiJOT1QgSU4iIT09ZiYmKGg9aCBpbnN0YW5jZW9mIEFycmF5JiYyPT09aC5sZW5ndGgmJiJzdHJp'@;
put 'bmciPT10eXBlb2YgaFswXT9oWzBdOiIiKSx0aGlzLmNsZWFyVmFsdWVzT3BlcmF0b3IoYSxkKSx0aGlzLmNsYXVzZXMucXVlcnlPYmpbZF0uZWxlbWVudHNbYV0ub3BlcmF0b3I9ZiwoIj0iPT09Znx8Ij4iPT09Znx8IjwiPT09Znx8Ijw9Ij09PWZ8fCI+PSI9PT1mfHwiTkUiPT09ZikmJih0'@;
put 'aGlzLmNsYXVzZXMucXVlcnlPYmpbZF0uZWxlbWVudHNbYV0udmFsdWU9aCksIkJFVFdFRU4iPT09ZiYmKHRoaXMuY2xhdXNlcy5xdWVyeU9ialtkXS5lbGVtZW50c1thXS52YWx1ZT1bXSx0aGlzLmNsYXVzZXMucXVlcnlPYmpbZF0uZWxlbWVudHNbYV0udmFsdWUucHVzaChoKSx0aGlzLmNs'@;
put 'YXVzZXMucXVlcnlPYmpbZF0uZWxlbWVudHNbYV0udmFsdWUucHVzaCgiIikpLCgiSU4iPT09Znx8Ik5PVCBJTiI9PT1mKSYmdGhpcy5zZXRJTlZhbHVlcyhkLGEpLHRoaXMud2hlcmVDbGF1c2VGbigpLHRoaXMuc2V0VG9HbG9iYWxzKCl9c2V0SU5WYWx1ZXMoYSxmKXtjb25zdCBkPVtdLGg9'@;
put 'dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmVsZW1lbnRzW2ZdLnZhbHVlcztoLmxlbmd0aDwxJiYodGhpcy5wZW5kaW5nSU5WYWx1ZXNTZXQ9e2NsYXVzZUluZGV4OmEscXVlcnlJbmRleDpmfSk7Zm9yKGxldCBtPTA7bTxoLmxlbmd0aDttKyspZC5wdXNoKHtjaGVja2VkOiExLHZhbDpoW21d'@;
put 'LmZvcm1hdHRlZH0pO3RoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5lbGVtZW50c1tmXS52YWx1ZT1kfWNsZWFyVmFsdWVzKGEsZil7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW2FdLnZhbHVlPSIifWNsZWFyVmFsdWVzT3BlcmF0b3IoYSxmKXtsZXQgZD10aGlzLmNsYXVzZXMu'@;
put 'cXVlcnlPYmpbZl0uZWxlbWVudHNbYV0ub3BlcmF0b3I7KCJCRVRXRUVOIj09PWR8fCJJTiI9PT1kfHwiTk9UIElOIj09PWR8fCJDT05UQUlOUyI9PT1kKSYmdGhpcy5jbGVhclZhbHVlcyhhLGYpfWhhc0ludmFsaWRDbHVhc2UoYSl7Zm9yKGxldCBmIG9mIGEpe2lmKG51bGw9PT1mLnZhcmlh'@;
put 'YmxlfHxudWxsPT09Zi5vcGVyYXRvcnx8bnVsbD09PWYudmFsdWV8fCIiPT09Zi52YWx1ZSlyZXR1cm4gZi5pbnZhbGlkQ2xhdXNlPSEwLCEwO2YuaW52YWxpZENsYXVzZT0hMX1yZXR1cm4gYS5pbnZhbGlkQ2xhdXNlPSExLCExfWhhc0ludmFsaWRHcm91cENsdWFzZSgpe2ZvcihsZXQgYT0w'@;
put 'O2E8dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aDthKyspe2lmKHRoaXMuaGFzSW52YWxpZENsdWFzZSh0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHMpKXJldHVybiB0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uaW52YWxpZENsYXVzZT0hMCwhMDt0aGlzLmNsYXVzZXMucXVl'@;
put 'cnlPYmpbYV0uaW52YWxpZENsYXVzZT0hMX1yZXR1cm4hMX1hZGRDbGF1c2UoYSl7aWYodGhpcy5oYXNJbnZhbGlkQ2x1YXNlKHRoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5lbGVtZW50cykpcmV0dXJuIHZvaWQgdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRXJyb3IiLCJDYW5u'@;
put 'b3QgYWRkIG5ldyBjbGF1c2UsIHdoZW4gb25lIG9yIG1vcmUgY2xhdXNlcyBhcmUgaW52YWxpZCBvciBlbXB0eS4iKTt0aGlzLmNsYXVzZUFtdC5wdXNoKCIiKSx0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHMucHVzaCh7bG9naWM6bnVsbCx0eXBlOm51bGwsdmFyaWFibGU6bnVs'@;
put 'bCxvcGVyYXRvcjpudWxsLHZhbHVlOm51bGwsdmFsdWVzOltdLG9wZXJhdG9yczpbXX0pO2xldCBmPXRoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5jbGF1c2VMb2dpYzt0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uY2xhdXNlTG9naWM9dHlwZW9mIGY+InUiPyJBTkQiOiJPUiI9PT1mPyJPUiI6'@;
put 'IkFORCIsdGhpcy53aGVyZUNsYXVzZUZuKCksdGhpcy5zZXRUb0dsb2JhbHMoKX1hZGRHcm91cENsYXVzZSgpe3RoaXMuaGFzSW52YWxpZEdyb3VwQ2x1YXNlKCk/dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRXJyb3IiLCJDYW5ub3QgYWRkIG5ldyBjbGF1c2UsIHdoZW4gb25l'@;
put 'IG9yIG1vcmUgY2xhdXNlcyBhcmUgaW52YWxpZCBvciBlbXB0eS4iKToodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLnB1c2goe2VsZW1lbnRzOlt7bG9naWM6bnVsbCx0eXBlOm51bGwsdmFyaWFibGU6bnVsbCxvcGVyYXRvcjpudWxsLHZhbHVlOm51bGwsdmFsdWVzOltdLG9wZXJhdG9yczpbXX1d'@;
put 'fSksdGhpcy5zZXRUb0dsb2JhbHMoKSl9aXNJbkh0bWxDb2xsZWN0aW9uKGEsZil7Zm9yKGxldCBkPTA7ZDxmLmxlbmd0aDtkKyspaWYoZltkXS52YWx1ZT09PWEpcmV0dXJuITA7cmV0dXJuITF9cmVtb3ZlR3JvdXBDbGF1c2UoYSl7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLnNwbGljZShhLDEp'@;
put 'LHRoaXMud2hlcmVDbGF1c2VGbigpfXJlbW92ZUNsYXVzZShhLGYpe3RoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50cy5zcGxpY2UoYSwxKSx0aGlzLndoZXJlQ2xhdXNlRm4oKSx0aGlzLnNldFRvR2xvYmFscygpfXdoZXJlQ2xhdXNlRm4oYT0hMSl7Y29uc3QgZj10aGlzLmhlbHBl'@;
put 'clNlcnZpY2UuZGVlcENsb25lKHRoaXMuY2xhdXNlcyk7aWYoYSYmKGYucXVlcnlPYmpbMF0uZWxlbWVudHM9W10pLHZvaWQgMCE9PXRoaXMubGliZHMpe2xldCBkPXRoaXMuc2FzU3RvcmVTZXJ2aWNlLndoZXJlQ2xhdXNlQ3JlYXRvcihmLHRoaXMuZ3JvdXBMb2dpYyx0aGlzLmxpYmRzKTth'@;
put 'fHwodGhpcy53aGVyZUNsYXVzZT1kLndoZXJlQ2xhdXNlLHRoaXMud2hlcmVTdHJpbmc9ZC5zdHJpbmcpfX1uZ0FmdGVyVmlld0luaXQoKXt2YXIgYT10aGlzO3JldHVybiB5aShmdW5jdGlvbiooKXthLl9yZW1vdmVRcnk9YS5zYXNTdG9yZVNlcnZpY2UucmVtb3ZlUXVlcnkuc3Vic2NyaWJl'@;
put 'KGY9PnthLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoPj0xJiYoYS5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aD0xLGEuY2xhdXNlcy5xdWVyeU9ialswXS5lbGVtZW50cy5sZW5ndGg+PTEmJihhLmNsYXVzZXMucXVlcnlPYmpbMF0uZWxlbWVudHMubGVuZ3RoPTEsYS5jbGF1c2VzLnF1ZXJ5T2Jq'@;
put 'WzBdLmVsZW1lbnRzPVtdLGEuY2xhdXNlcy5xdWVyeU9ialswXS5lbGVtZW50cy5wdXNoKHtsb2dpYzpudWxsLHR5cGU6bnVsbCx2YXJpYWJsZTpudWxsLG9wZXJhdG9yOm51bGwsdmFsdWU6bnVsbCx2YWx1ZXM6W10sb3BlcmF0b3JzOltdfSksYS53aGVyZUNsYXVzZUZuKCkpKX0pLGEuY29s'@;
put 'dW1uc1N1Yj1hLnNhc1N0b3JlU2VydmljZS5jb2x1bW5zLnN1YnNjcmliZShmPT57bGV0IGQ9Zi5kYXRhLmNvbHM7ImhvbWUiIT09Sm4ucm9vdFBhcmFtJiYiZWRpdG9yIiE9PUpuLnJvb3RQYXJhbXx8KGEuY29scz1kLGEubGliZHM9Zi5saWJkcyxKbi5lZGl0b3IuZmlsdGVyLmNvbHM9SlNP'@;
put 'Ti5wYXJzZShKU09OLnN0cmluZ2lmeShkKSkpLCJ2aWV3Ij09PUpuLnJvb3RQYXJhbSYmSm4udmlld2VyLmZpbHRlci5jb2xzLmxlbmd0aDwxJiYoYS5jb2xzPWQsYS5saWJkcz1mLmxpYmRzLEpuLnZpZXdlci5maWx0ZXIuY29scz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGQpKSksYS5s'@;
put 'aWJkc3x8KGEubGliZHM9Zi5saWJkcyl9KSxhLnZhbHVlc1N1Yj1hLnNhc1N0b3JlU2VydmljZS52YWx1ZXMuc3Vic2NyaWJlKGY9PnsoImhvbWUiPT09Sm4ucm9vdFBhcmFtfHwiZWRpdG9yIj09PUpuLnJvb3RQYXJhbSkmJkpuLmVkaXRvci5maWx0ZXIudmFscy5sZW5ndGg8MSYmKGEudmFs'@;
put 'cz1mLnZhbHMsSm4uZWRpdG9yLmZpbHRlci52YWxzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZi52YWxzKSkpLCJ2aWV3Ij09PUpuLnJvb3RQYXJhbSYmSm4udmlld2VyLmZpbHRlci52YWxzLmxlbmd0aDwxJiYoYS52YWxzPWYudmFscyxKbi52aWV3ZXIuZmlsdGVyLnZhbHM9SlNPTi5w'@;
put 'YXJzZShKU09OLnN0cmluZ2lmeShmLnZhbHMpKSl9KX0pKCl9b25BdXRvY29tcGxldGVMb2FkaW5nTW9yZShhLGYsZCxoKXt0aGlzLmdldFZhbHVlc0xvYWRNb3JlKGEsZixkLGgpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuZ2V0RnJvbUdsb2JhbHMoKSxzZXRUaW1lb3V0KCgpPT57bGV0'@;
put 'IGE9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI3ZhbHNfdmFyX2lkMF8wIik7YSYmYS5mb2N1cygpfSw1MDApfW5nT25EZXN0cm95KCl7dGhpcy5jb2x1bW5zU3ViJiZ0aGlzLmNvbHVtbnNTdWIudW5zdWJzY3JpYmUoKSx0aGlzLnZhbHVlc1N1YiYmdGhpcy52YWx1ZXNTdWIudW5zdWJzY3Jp'@;
put 'YmUoKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkocnQoTGQpLHJ0KFJzKSxydChQdSkscnQoVWwpKX0sbC5cdTAyNzVjbXA9a3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siYXBwLXF1ZXJ5Il1dLGlucHV0czp7Y2FjaGluZzoiY2FjaGluZyIsdmlld2Jv'@;
put 'eElkOiJ2aWV3Ym94SWQifSxmZWF0dXJlczpbcmkoW3twcm92aWRlOnBkLHVzZVZhbHVlOiJlbi1HQiJ9XSldLGRlY2xzOjM4LHZhcnM6MTEsY29uc3RzOltbMSwiY2xyLWZsZXgtcm93IiwiY2xyLWZvcm0tY29udHJvbCIsIm0tMCJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiXSxbImNs'@;
put 'ckNoZWNrYm94IiwiIiwidHlwZSIsImNoZWNrYm94IiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSJdLFsxLCJjbHItY29udHJvbC1sYWJlbCJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiLCJtbC0xNSJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2tib3giLCJpZCIsInVz'@;
put 'ZVBpY2tlcnMiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwiY2hhbmdlIl0sWzEsImNsci1yb3ciXSxbMSwic2VsZWN0IiwiY2xyLWNvbC1tZC0yIiwibWItMzAiXSxbImNsclNlbGVjdCIsIiIsMywiZGlzYWJsZWQiLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSJdLFszLCJzZWxlY3Rl'@;
put 'ZCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNsci1jb2wtbWQtMTAiLCJtYi0zMCJdLFsxLCJsaW5lLW51bWJlcnMiLCJsYW5ndWFnZS1tYXJrdXAiXSxbImNsYXNzIiwicHJvZ3Jlc1N0YXRpYyBwcm9ncmVzcyBsb29wIiw0LCJuZ0lmIl0sWzEsImxhbmd1YWdlLXNxbCJdLFsxLCJjb250'@;
put 'ZW50Il0sWzEsImNsYXVzZXMtY29udGFpbmVyIiwiY2xyLWNvbC1tZC0xMiJdLFs0LCJuZ0lmIl0sWyJjbGFzcyIsImNsYXVzZS1yb3ciLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsicGlja2VyIiwiIl0sWyJub3RQaWNrZXIiLCIiXSxbIm5vdFBpY2tlclJhbmdlIiwiIl0sWyJjaGVja2JveFZh'@;
put 'bHVlcyIsIiJdLFszLCJzZWxlY3RlZCJdLFsxLCJwcm9ncmVzU3RhdGljIiwicHJvZ3Jlc3MiLCJsb29wIl0sWzEsImNsYXVzZS1yb3ciXSxbMSwiY2xhdXNlLWxvZ2ljIiwiY2xyLWNvbC1tZC0yIl0sWzEsInNlbGVjdCJdLFsiY2xyU2VsZWN0IiwiIiwzLCJuZ01vZGVsIiwiZGlzYWJsZWQi'@;
put 'LCJuZ01vZGVsQ2hhbmdlIl0sWyJjbGFzcyIsImJ0biBidG4tcHJpbWFyeSBidG4tYmxvY2sgbXQtMTAiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImNsYXVzZS1xdWVyeSIsImNsci1jb2wtbWQtMTAiXSxbInNoYXBlIiwidGltZXMiLCJzaXplIiwiMzYiLCJjbGFzcyIsInJlbW92ZS1ncm91'@;
put 'cC1jbGF1c2UtYnV0dG9uIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItcm93IiwzLCJpbnZhbGlkLWNsYXVzZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwiYnRuLWJsb2NrIiwibXQtMTAiLDMsImNsaWNrIl0sWyJzaGFwZSIsInBsdXMi'@;
put 'XSxbInNoYXBlIiwidGltZXMiLCJzaXplIiwiMzYiLDEsInJlbW92ZS1ncm91cC1jbGF1c2UtYnV0dG9uIiwzLCJjbGljayJdLFsxLCJ2YXJpYWJsZS1jb2wiLCJmb3JtLWdyb3VwIiwiY2xyLWNvbC1tZC0zIl0sWzEsImRhdGFsaXN0LXdyYXBwZXIiXSxbImxhYmVsIiwiVmFyaWFibGUiLDMs'@;
put 'ImlkIiwiaW5wdXRJZCIsImVtaXRPbmx5U2VsZWN0ZWQiLCJ2YWx1ZSIsInZhbHVlQ2hhbmdlIiwib25JbnB1dEV2ZW50Il0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJvcGVyYXRvci1jb2wiLCJmb3JtLWdyb3VwIiwiY2xyLWNvbC1tZC0zIl0sWyJjbHJTZWxlY3QiLCIiLDEsIm10LTIi'@;
put 'LDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIl0sWyJjbGFzcyIsInZhbHVlLWNvbCBmb3JtLWdyb3VwIGNsci1jb2wtbWQtMyIsNCwibmdWYXIiXSxbMSwiY2xhdXNlLWJ1dHRvbnMiLCJjbHItY29sLW1kLTIiLCJidG4tZ3JvdXAiXSxbMSwiYnRuIiwiYnRuLXdhcm5pbmciLCJidG4tYmxv'@;
put 'Y2siLDMsImRpc2FibGVkIiwiY2xpY2siXSxbInNoYXBlIiwibWludXMiXSxbMSwiYnRuIiwiYnRuLXN1Y2Nlc3MiLCJidG4tYmxvY2siLDMsImNsaWNrIl0sWzEsInZhbHVlLWNvbCIsImZvcm0tZ3JvdXAiLCJjbHItY29sLW1kLTMiXSxbImNsYXNzIiwiY2hlY2tib3gtdmFscyIsNCwibmdJ'@;
put 'ZiJdLFsiY2xhc3MiLCJzaW5nbGUtZmllbGQtdmFscyIsNCwibmdJZiJdLFsiY2xhc3MiLCJyYW5nZS12YWxzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNvbnRhaW5zLXZhbHMiLDQsIm5nSWYiXSxbMSwiY2hlY2tib3gtdmFscyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLWxpbmsi'@;
put 'LDMsImNsaWNrIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsxLCJzaW5nbGUtZmllbGQtdmFscyJdLFsxLCJyYW5nZS12YWxzIl0sWzEsImZyb20iXSxbMSwidG8iXSxbMSwiY29udGFpbnMtdmFscyJdLFsidHlwZSIsInRleHQiLDEsImlucHV0'@;
put 'LXZhbCIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXSxbMywibmdTd2l0Y2giXSxbNCwibmdTd2l0Y2hDYXNlIl0sWyJsYWJlbCIsIlZhbHVlIiwidHlwZSIsImRhdGUiLDMsImRpc2FibGVTb2Z0c2VsZWN0IiwiaW5wdXRJZCIsInZhbHVlIiwidmFsdWVDaGFuZ2UiXSxbImxhYmVsIiwi'@;
put 'VmFsdWUiLCJ0eXBlIiwiZGF0ZSIsMywiZGlzYWJsZVNvZnRzZWxlY3QiLCJpbnB1dElkIiwidmFsdWUiLCJ2YWx1ZUNoYW5nZSIsIm9uSW5wdXRFdmVudCJdLFsidHlwZSIsInRpbWUiLDMsImRpc2FibGVTb2Z0c2VsZWN0IiwiaW5wdXRJZCIsInZhbHVlIiwidmFsdWVDaGFuZ2UiLCJvbklu'@;
put 'cHV0RXZlbnQiXSxbImxhYmVsIiwiVmFsdWUiLCJ0eXBlIiwidGltZSIsMywiZGlzYWJsZVNvZnRzZWxlY3QiLCJpbnB1dElkIiwidmFsdWUiLCJvbklucHV0RXZlbnQiXSxbImxhYmVsIiwiVmFsdWUiLDMsImlucHV0SWQiLCJ2YWx1ZSIsImVuYWJsZUxvYWRNb3JlIiwidmFsdWVDaGFuZ2Ui'@;
put 'LCJvbklucHV0RXZlbnQiLCJvbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywidmFsdWUiXSxbImxhYmVsIiwiVmFsdWUiLDMsImlucHV0SWQiLCJ2YWx1ZSIsImVuYWJsZUxvYWRNb3JlIiwiZGlzYWJsZWQiLCJ2YWx1ZUNoYW5n'@;
put 'ZSIsIm9uSW5wdXRFdmVudCIsIm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUiXSxbMSwiaW4tdmFsdWVzLW1vZGFsIiwzLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbENsb3NhYmxlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbImNsYXNzIiwibm8tdmFsdWVzIiw0LCJu'@;
put 'Z0lmIl0sWyJjbGFzcyIsImZvcm0tYmxvY2siLDQsIm5nSWYiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbMSwibm8tdmFsdWVzIl0sWzEsImZvcm0tYmxvY2siXSxbInR5cGUiLCJjaGVja2JveCIsImNsckNo'@;
put 'ZWNrYm94IiwiIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGYpezEmYSYmKHllKDAsImRpdiIsMCkoMSwiZGl2IiwxKSgyLCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDMsImlucHV0IiwyKSxFdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7'@;
put 'cmV0dXJuIGYuZHluYW1pY1doZXJlQ2xhdXNlPWh9KSxDZSgpLHllKDQsImxhYmVsIiwzKSxZZSg1LCJEeW5hbWljIHdoZXJlIGNsYXVzZSIpLENlKCkoKSgpLHllKDYsImRpdiIsNCkoNywiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSg4LCJpbnB1dCIsNSksRXQoIm5nTW9kZWxDaGFuZ2UiLGZ1'@;
put 'bmN0aW9uKGgpe3JldHVybiBmLnVzZVBpY2tlcnM9aH0pKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGYudXNlUGlja2Vyc0NoYW5nZSgpfSksQ2UoKSx5ZSg5LCJsYWJlbCIsMyksWWUoMTAsIiBVc2UgcGlja2VycyAiKSxDZSgpKCkoKSgpLHllKDExLCJkaXYiLDYpKDEyLCJkaXYiLDcp'@;
put 'KDEzLCJjbHItc2VsZWN0LWNvbnRhaW5lciIpKDE0LCJsYWJlbCIpLFllKDE1LCJHcm91cCBsb2dpYyIpLENlKCkseWUoMTYsInNlbGVjdCIsOCksRXQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBmLmdyb3VwTG9naWM9aH0pKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbigp'@;
put 'e3JldHVybiBmLnNldEdyb3VwTG9naWMoZi5ncm91cExvZ2ljKX0pLHR0KDE3LEtrdCwyLDIsIm9wdGlvbiIsOSksQ2UoKSgpKCkseWUoMTgsImRpdiIsMTApKDE5LCJwcmUiLDExKSxZZSgyMCwiICAgICAgIiksdHQoMjEscWt0LDQsMCwiZGl2IiwxMiksWWUoMjIsIlxuXG4gICAgICAiKSx5'@;
put 'ZSgyMywiY29kZSIsMTMpLFllKDI0KSxDZSgpLFllKDI1LCJcbiAgICAiKSxDZSgpKCkoKSx5ZSgyNiwiZGl2IiwxNCkoMjcsImRpdiIsMTUpLHR0KDI4LFhrdCwxLDAsImRpdiIsMTYpLHR0KDI5LHZFdCwxNSw4LCJkaXYiLDE3KSxDZSgpKCksdHQoMzAsd0V0LDQsNCwibmctdGVtcGxhdGUi'@;
put 'LG51bGwsMTgsS3UpLHR0KDMyLFNFdCwyLDQsIm5nLXRlbXBsYXRlIixudWxsLDE5LEt1KSx0dCgzNCxrRXQsMiw1LCJuZy10ZW1wbGF0ZSIsbnVsbCwyMCxLdSksdHQoMzYsVEV0LDksNCwibmctdGVtcGxhdGUiLG51bGwsMjEsS3UpKSwyJmEmJihTZSgzKSxSZSgibmdNb2RlbCIsZi5keW5h'@;
put 'bWljV2hlcmVDbGF1c2UpLFNlKDUpLFJlKCJuZ01vZGVsIixmLnVzZVBpY2tlcnMpLFNlKDgpLFJlKCJkaXNhYmxlZCIsKG51bGw9PWYuY2xhdXNlc3x8bnVsbD09Zi5jbGF1c2VzLnF1ZXJ5T2JqP251bGw6Zi5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aCk8MSkoIm5nTW9kZWwiLGYuZ3JvdXBM'@;
put 'b2dpYyksU2UoMSksUmUoIm5nRm9yT2YiLGYubG9naWNPcGVyYXRvcnMpLFNlKDQpLFJlKCJuZ0lmIixmLndoZXJlQ2xhdXNlTG9hZGluZyksU2UoMyksYXIoZi53aGVyZUNsYXVzZSksU2UoMyksZ3IoImNsci1jb2wtbWQtMTAiLChudWxsPT1mLmNsYXVzZXN8fG51bGw9PWYuY2xhdXNlcy5x'@;
put 'dWVyeU9iaj9udWxsOmYuY2xhdXNlcy5xdWVyeU9iai5sZW5ndGgpPjEpLFNlKDEpLFJlKCJuZ0lmIiwobnVsbD09Zi5jbGF1c2VzfHxudWxsPT1mLmNsYXVzZXMucXVlcnlPYmo/bnVsbDpmLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoKT4xKSxTZSgxKSxSZSgibmdGb3JPZiIsZi5jbGF1c2Vz'@;
put 'LnF1ZXJ5T2JqKSl9LGRlcGVuZGVuY2llczpbUmEsJGkseWQsa2YsQ2gsUmwsTWMsa2MsZWwsQjAsbDcsVjAsbTcscDcsUzEsTTEsaXMsUjAsTDAsV2EsemEseDZlLFI3LEdrdCwka3RdLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3Bs'@;
put 'YXk6ZmxleH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2Nv'@;
put 'bnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtbG9naWNbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtiYWNrZ3JvdW5kOiNlOWU5ZTk7cGFkZGluZzoxNXB4fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAl'@;
put 'XSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjMwcHggMCAyMHB4IDIwcHg7YmFja2dyb3VuZDojZmJmOGY4O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZsZXgtZGly'@;
put 'ZWN0aW9uOmNvbHVtbjtwb3NpdGlvbjpyZWxhdGl2ZX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gPiAuY2xyLXJvd1tfbmdjb250ZW50LSVDT01QJV17'@;
put 'anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdID4gLmNsci1yb3dbX25nY29udGVudC0lQ09NUCVdOm5v'@;
put 'dCg6bGFzdC1jaGlsZCl7cGFkZGluZy1ib3R0b206MTVweDttYXJnaW4tYm90dG9tOjE1cHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgcmdiYSgwLDAsMCwuMTYpfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAu'@;
put 'Y2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yZW1vdmUtZ3JvdXAtY2xhdXNlLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7cmlnaHQ6MTBweDtjb2xvcjpncmF5fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2Vz'@;
put 'LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YXJpYWJsZS1jb2xbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O3BhZGRpbmctYm90dG9tOjFweH0uY29udGVudFtf'@;
put 'bmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFyaWFibGUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kYXRhbGlzdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAl'@;
put 'XSwgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhcmlhYmxlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAuZGF0YWxpc3Qtd3JhcHBlcltfbmdj'@;
put 'b250ZW50LSVDT01QJV0gICBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAub3BlcmF0'@;
put 'b3ItY29sW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0g'@;
put 'ICAub3BlcmF0b3ItY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1zZWxlY3QtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6NDVweDttYXJnaW4tdG9wOjA7d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25n'@;
put 'Y29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtwYWRkaW5nLWJvdHRvbToxcHh9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVd'@;
put 'ICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAuY2hlY2tib3gtdmFsc1tfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTtwYWRkaW5nOjAg'@;
put 'NXB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjMpfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29u'@;
put 'dGVudC0lQ09NUCVdICAgLmNoZWNrYm94LXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgY2xyLWNoZWNrYm94LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDowfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50'@;
put 'LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLmNoZWNrYm94LXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV17bWF4LWhlaWdodDoxMjBweDtvdmVyZmxv'@;
put 'dy15OnNjcm9sbH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zaW5nbGUtZmllbGQtdmFs'@;
put 'c1tfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAl'@;
put 'XSAgIC5zaW5nbGUtZmllbGQtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250YWluZXJ7d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtf'@;
put 'bmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zaW5nbGUtZmllbGQtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVye21heC13aWR0aDpub25lfS5jb250ZW50W19uZ2Nv'@;
put 'bnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnNpbmdsZS1maWVsZC12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAg'@;
put 'LmNsci1jb250cm9sLWNvbnRhaW5lciAuY2xyLWlucHV0LXdyYXBwZXIgLmNsci1pbnB1dC1ncm91cHt3aWR0aDoxMDAlfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQt'@;
put 'JUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnNpbmdsZS1maWVsZC12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSA+IGlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5l'@;
put 'cltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnNpbmdsZS1maWVsZC12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W3R5cGU9dGltZV1bX25nY29udGVudC0lQ09NUCVd'@;
put 'e3dpZHRoOjEwMCU7cGFkZGluZy1yaWdodDoxN3B4fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVd'@;
put 'ICAgLnJhbmdlLXZhbHNbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdj'@;
put 'b250ZW50LSVDT01QJV0gICAucmFuZ2UtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250YWluZXJ7d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1x'@;
put 'dWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1jb250cm9sLWNvbnRhaW5lciAuY2xyLWlucHV0LXdyYXBwZXJ7bWF4LXdpZHRoOm5vbmV9LmNvbnRlbnRbX25nY29u'@;
put 'dGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAucmFuZ2UtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29u'@;
put 'dHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVyIC5jbHItaW5wdXQtZ3JvdXB7d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0g'@;
put 'ICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5mcm9tW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tYm90dG9tOjEwcHh9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2Nv'@;
put 'bnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAucmFuZ2UtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAuZnJvbVtfbmdjb250ZW50LSVDT01QJV0gPiBpbnB1dFtfbmdjb250ZW50LSVDT01Q'@;
put 'JV17d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxzW19u'@;
put 'Z2NvbnRlbnQtJUNPTVAlXSAgIC5mcm9tW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W3R5cGU9dGltZV1bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7cGFkZGluZy1yaWdodDoxN3B4fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdj'@;
put 'b250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnJhbmdlLXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgLmZyb21bX25nY29udGVudC0lQ09NUCVdLCAuY29udGVudFtfbmdjb250ZW50LSVD'@;
put 'T01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b1tfbmdjb250ZW50LSVD'@;
put 'T01QJV17bWluLXdpZHRoOjEwMHB4fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnJhbmdl'@;
put 'LXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgLmZyb21bX25nY29udGVudC0lQ09NUCVdID4gaW5wdXRbX25nY29udGVudC0lQ09NUCVdLCAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtf'@;
put 'bmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b1tfbmdjb250ZW50LSVDT01QJV0gPiBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50'@;
put 'LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5mcm9tW19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXSAgIGlucHV0W3R5cGU9dGltZV1bX25nY29udGVudC0lQ09NUCVdLCAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29s'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b1tfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFt0eXBlPXRpbWVdW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO3BhZGRpbmctcmlnaHQ6MTdweH0uY29udGVudFtfbmdjb250ZW50'@;
put 'LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250YWlucy12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfS5j'@;
put 'b250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRhaW5zLXZhbHNbX25nY29udGVudC0lQ09N'@;
put 'UCVdICAgICAuY2xyLWNvbnRyb2wtY29udGFpbmVye3dpZHRoOjEwMCV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250'@;
put 'ZW50LSVDT01QJV0gICAuY29udGFpbnMtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVye21heC13aWR0aDpub25lfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250'@;
put 'ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRhaW5zLXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHItaW5wdXQtd3JhcHBlciAuY2xy'@;
put 'LWlucHV0LWdyb3Vwe3dpZHRoOjEwMCV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29u'@;
put 'dGFpbnMtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gPiBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVD'@;
put 'T01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250YWlucy12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W3R5cGU9dGltZV1bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7cGFkZGluZy1yaWdodDoxN3B4fS5jb250ZW50W19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtYnV0dG9uc1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQ7ZmxleC1k'@;
put 'aXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcn0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLWJ1dHRvbnNbX25nY29udGVudC0l'@;
put 'Q09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4td2lkdGg6YXV0b30uaW52YWxpZC1jbGF1c2VbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjJweCBzb2xpZCAjZDk0YjMxfS5jbGF1c2Utcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1pY29uW19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXXttYXJnaW46MH0uY2xhdXNlLXJvd1tfbmdjb250ZW50LSVDT01QJV06YWZ0ZXJ7cG9zaXRpb246cmVsYXRpdmU7Y29udGVudDoiIjtoZWlnaHQ6LjQxNjY3cmVtO3dpZHRoOi40MTY2N3JlbTt0b3A6LjI5MTY3cmVtO3JpZ2h0Oi4yNXJlbTtiYWNrZ3JvdW5kLWltYWdlOnVy'@;
put 'bChkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmdcXDIwMjYlMkM5Ljg0JTJDMy4yNGEwLjY4JTJDMC42OCUyQzAlMkMxJTJDMSUyQzElMkMxWiUyMiUyRiUzRSUwQSUzQyUyRnN2ZyUzRSUwQSk7YmFja2dy'@;
put 'b3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTpjb250YWluO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTttYXJnaW46MH1bX25nY29udGVudC0lQ09NUCVdOm5vdChwcmUpID4gY29kZVtjbGFzcyo9bGFuZ3VhZ2UtXVtfbmdjb250ZW50LSVDT01QJV0sIHByZVtjbGFzcyo9bGFu'@;
put 'Z3VhZ2UtXVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmJmOGY4fXByZVtjbGFzcyo9bGFuZ3VhZ2UtXVtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzo4cHg7bWFyZ2luOjA7Ym9yZGVyLXJhZGl1czoxcHg7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50'@;
put 'ZXI7YWxpZ24taXRlbXM6Y2VudGVyO21pbi1oZWlnaHQ6NjZweDtwb3NpdGlvbjpyZWxhdGl2ZX1wcmVbY2xhc3MqPWxhbmd1YWdlLV1bX25nY29udGVudC0lQ09NUCVdICAgc3Bhbi5zcGlubmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjEwcHg7dG9wOjEw'@;
put 'cHh9cHJlW2NsYXNzKj1sYW5ndWFnZS1dIGNvZGVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOnByZS13cmFwO3dvcmQtYnJlYWs6YnJlYWstd29yZH0uaW5wdXQtdmFsW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MHB4O2JhY2tncm91bmQ6I2ZiZjhmODtib3JkZXItYm90dG9t'@;
put 'OjFweCBzb2xpZCAjOTk5OTk5fWNsci1kYXRlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDoycHghaW1wb3J0YW50fWlucHV0W3R5cGU9dGltZV1bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbTox'@;
put 'cHggc29saWQgI2IzYjNiM31pbnB1dFt0eXBlPXRpbWVdW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1c3tvdXRsaW5lOm5vbmV9LmluLXZhbHVlcy1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAubW9kYWwtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9wOjFweCBzb2xpZCAj'@;
put 'ZDhkOGQ4O21hcmdpbi10b3A6MTBweH0ucHJvZ3Jlc3NbX25nY29udGVudC0lQ09NUCVdLCAucHJvZ3Jlc3Mtc3RhdGljW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3dpZHRoOjEwMCU7aGVpZ2h0OjRweDt0b3A6M3B4fSddfSksbH0pKCk7Y29uc3Qg'@;
put 'T0V0PVsic2VhcmNoTGliVHJlZUlucHV0Il07ZnVuY3Rpb24gREV0KGwsYyl7MSZsJiZ0bigwLCJjbHItaWNvbiIsOSl9ZnVuY3Rpb24gSUV0KGwsYyl7aWYoMSZsKXtjb25zdCBhPVpuKCk7eWUoMCwiY2xyLWljb24iLDEwKSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7VXQoYSk7Y29uc3QgZD1H'@;
put 'ZSgyKTtyZXR1cm4gZC5saWJyYXJpZXNTZWFyY2g9IiIsWnQoZC5saWJyYXJ5T25GaWx0ZXIoKSl9KSxDZSgpfX1mdW5jdGlvbiBSRXQobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJjbHItdHJlZS1ub2RlIiwzKSgxLCJkaXYiLDQpKDIsImlucHV0Iiw1LDYpLEV0KCJuZ01vZGVs'@;
put 'Q2hhbmdlIixmdW5jdGlvbihkKXtyZXR1cm4gVXQoYSksWnQoR2UoKS5saWJyYXJpZXNTZWFyY2g9ZCl9KSgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIFV0KGEpLFp0KEdlKCkubGlicmFyeU9uRmlsdGVyKCkpfSksQ2UoKSx0dCg0LERFdCwxLDAsImNsci1pY29uIiw3KSx0dCg1LElFdCwx'@;
put 'LDAsImNsci1pY29uIiw4KSxDZSgpKCl9aWYoMiZsKXtjb25zdCBhPVFpKDMpLGY9R2UoKTtTZSgyKSxSZSgibmdNb2RlbCIsZi5saWJyYXJpZXNTZWFyY2gpLFNlKDIpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxTZSgxKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0'@;
put 'aW9uIExFdChsLGMpezEmbCYmdG4oMCwiY2xyLWljb24iLDkpfWZ1bmN0aW9uIFBFdChsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImNsci1pY29uIiwxMCksRXQoImNsaWNrIixmdW5jdGlvbigpe1V0KGEpLEdlKCk7Y29uc3QgZD1RaSgzKSxoPUdlKDIpLiRpbXBsaWNpdCxtPUdl'@;
put 'KCk7cmV0dXJuIGQudmFsdWU9IiIsaC5zZWFyY2hTdHJpbmc9IiIsWnQobS50cmVlT25GaWx0ZXIoaCwidGFibGVzLlRBQkxFTkFNRSIpKX0pLENlKCl9fWZ1bmN0aW9uIEZFdChsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImNsci10cmVlLW5vZGUiLDMpKDEsImRpdiIsNCkoMiwi'@;
put 'aW5wdXQiLDE3LDE4KSxFdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oZCl7cmV0dXJuIFV0KGEpLFp0KEdlKDIpLiRpbXBsaWNpdC5zZWFyY2hTdHJpbmc9ZCl9KSgia2V5dXAiLGZ1bmN0aW9uKCl7VXQoYSk7Y29uc3QgZD1HZSgyKS4kaW1wbGljaXQ7cmV0dXJuIFp0KEdlKCkudHJlZU9u'@;
put 'RmlsdGVyKGQsInRhYmxlcyIpKX0pLENlKCksdHQoNCxMRXQsMSwwLCJjbHItaWNvbiIsNyksdHQoNSxQRXQsMSwwLCJjbHItaWNvbiIsOCksQ2UoKSgpfWlmKDImbCl7Y29uc3QgYT1RaSgzKSxmPUdlKDIpLiRpbXBsaWNpdDtTZSgyKSxSZSgibmdNb2RlbCIsZi5zZWFyY2hTdHJpbmcpLFNl'@;
put 'KDIpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxTZSgxKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIEhFdChsLGMpezEmbCYmdG4oMCwiY2xyLWljb24iLDI2KX1mdW5jdGlvbiBORXQobCxjKXsxJmwmJnRuKDAsImNsci1pY29uIiwyNyl9ZnVuY3Rpb24gVkV0'@;
put 'KGwsYyl7MSZsJiYoeWUoMCwic3BhbiIpLFllKDEsIiBUbyB1bmxvY2sgYWxsIHRhYmxlcywgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvICIpLENlKCkpfWZ1bmN0aW9uIEJFdChsLGMpe2lmKDEmbCYmKHllKDAsImNsci10b29sdGlwLWNvbnRlbnQiLDI4KSx0dCgxLFZFdCwy'@;
put 'LDAsInNwYW4iLDI1KSxDZSgpKSwyJmwpe2NvbnN0IGE9R2UoKS5uZ1ZhcjtTZSgxKSxSZSgibmdJZiIsYSl9fWZ1bmN0aW9uIGpFdChsLGMpezEmbCYmdG4oMCwiY2xyLWljb24iLDkpfWZ1bmN0aW9uIHpFdChsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImNsci1pY29uIiwxMCks'@;
put 'RXQoImNsaWNrIixmdW5jdGlvbigpe1V0KGEpLEdlKCk7Y29uc3QgZD1RaSgzKSxoPUdlKDMpLiRpbXBsaWNpdCxtPUdlKDMpO3JldHVybiBkLnZhbHVlPSIiLGguc2VhcmNoU3RyaW5nPSIiLFp0KG0udHJlZU9uRmlsdGVyKGgsImNvbHVtbnMuQ09MTkFNRSIpKX0pLENlKCl9fWZ1bmN0aW9u'@;
put 'IFVFdChsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImNsci10cmVlLW5vZGUiLDMpKDEsImRpdiIsNCkoMiwiaW5wdXQiLDI5LDE4KSxFdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oZCl7cmV0dXJuIFV0KGEpLFp0KEdlKDMpLiRpbXBsaWNpdC5zZWFyY2hTdHJpbmc9ZCl9KSgi'@;
put 'a2V5dXAiLGZ1bmN0aW9uKCl7VXQoYSk7Y29uc3QgZD1HZSgzKS4kaW1wbGljaXQ7cmV0dXJuIFp0KEdlKDMpLnRyZWVPbkZpbHRlcihkLCJjb2x1bW5zLkNPTE5BTUUiKSl9KSxDZSgpLHR0KDQsakV0LDEsMCwiY2xyLWljb24iLDcpLHR0KDUsekV0LDEsMCwiY2xyLWljb24iLDgpLENlKCko'@;
put 'KX1pZigyJmwpe2NvbnN0IGE9UWkoMyksZj1HZSgzKS4kaW1wbGljaXQ7U2UoMiksUmUoIm5nTW9kZWwiLGYuc2VhcmNoU3RyaW5nKSxTZSgyKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksU2UoMSksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBaRXQobCxjKXtp'@;
put 'ZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJjbHItdHJlZS1ub2RlIikoMSwiYnV0dG9uIiwzMCksRXQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9VXQoYSkuJGltcGxpY2l0LG09R2UoMykuJGltcGxpY2l0LF89R2UoMikuJGltcGxpY2l0O3JldHVybiBadChHZSgpLmNvbHVtbk9uQ2xp'@;
put 'Y2soaCxfLG0pKX0pLHRuKDIsImNsci1pY29uIiwzMSksWWUoMyksQ2UoKSgpfWlmKDImbCl7Y29uc3QgYT1jLiRpbXBsaWNpdCxmPUdlKDYpO1NlKDEpLGdyKCJjb2x1bW4tYWN0aXZlIixmLmxpYkNvbHVtbkFjdGl2ZShhLkNPTFVSSSkpLFNlKDIpLHdyKCIgIixhLkNPTE5BTUUsIiAiKX19'@;
put 'ZnVuY3Rpb24gWUV0KGwsYyl7aWYoMSZsJiYoV3IoMCksdHQoMSxVRXQsNiwzLCJjbHItdHJlZS1ub2RlIiwwKSx0dCgyLFpFdCw0LDMsImNsci10cmVlLW5vZGUiLDEpLEdyKCkpLDImbCl7Y29uc3QgYT1HZSgyKS4kaW1wbGljaXQ7U2UoMSksUmUoIm5nSWYiLGEuY29sdW1ucyksU2UoMSks'@;
put 'UmUoIm5nRm9yT2YiLGEuY29sdW1ucyl9fWZ1bmN0aW9uIFdFdChsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImNsci10b29sdGlwIikoMSwiYnV0dG9uIiwyMCksRXQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9VXQoYSkubmdWYXIsbT1HZSgpLiRpbXBsaWNpdCxfPUdlKDIp'@;
put 'LiRpbXBsaWNpdCxPPUdlKCk7cmV0dXJuIFp0KGg/IiI6Ty50YWJsZU9uQ2xpY2sobS5UQUJMRVVSSSxtLF8pKX0pLFdyKDIsMjEpLHR0KDMsSEV0LDEsMCwiY2xyLWljb24iLDIyKSx0dCg0LE5FdCwxLDAsImNsci1pY29uIiwyMyksR3IoKSxZZSg1KSxDZSgpLHR0KDYsQkV0LDIsMSwiY2xy'@;
put 'LXRvb2x0aXAtY29udGVudCIsMjQpLHR0KDcsWUV0LDMsMiwibmctY29udGFpbmVyIiwyNSksQ2UoKX1pZigyJmwpe2NvbnN0IGE9Yy5uZ1ZhcixmPUdlKCkuJGltcGxpY2l0LGQ9R2UoMikuJGltcGxpY2l0LGg9R2UoKTtTZSgxKSxncigiZGMtbG9ja2VkLWNvbnRyb2wiLGEpKCJ0YWJsZS1h'@;
put 'Y3RpdmUiLGgubGliVGFiQWN0aXZlKGQuTElCUkFSWVJFRixmKSksU2UoMSksUmUoIm5nU3dpdGNoIixmLmluY2x1ZGVzKCItRkMiKSksU2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsITApLFNlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLCExKSxTZSgxKSx3cigiICIsZi5yZXBsYWNlKCItRkMiLCIi'@;
put 'KSwiICIpLFNlKDIpLFJlKCJuZ0lmIixoLmhhc0NvbHVtbnMpfX1mdW5jdGlvbiBHRXQobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJjbHItdHJlZS1ub2RlIiwxMiksRXQoImNsaWNrIixmdW5jdGlvbihkKXtjb25zdCBtPVV0KGEpLiRpbXBsaWNpdCxfPUdlKDIpLiRpbXBsaWNp'@;
put 'dDtyZXR1cm4gWnQoR2UoKS50cmVlTm9kZUNsaWNrZWQoZCxtLF8udGFibGVzKSl9KSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGQpe3JldHVybiBadChVdChhKS4kaW1wbGljaXQuZXhwYW5kZWQ9ZCl9KSx0dCgxLFdFdCw4LDksImNsci10b29sdGlwIiwxOSksQ2UoKX1pZigyJmwp'@;
put 'e2NvbnN0IGE9Yy4kaW1wbGljaXQsZj1jLmluZGV4LGQ9R2UoMyk7Z3IoImNsci1leHBhbmRlZCIsYS5leHBhbmRlZCksUmUoImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nQ29sdW1ucyYmIWEuY29sdW1ucyksU2UoMSksUmUoIm5nVmFyIixmKzE+ZC5s'@;
put 'aWNlbmNlU3RhdGUudmFsdWUudGFibGVzX2luX2xpYnJhcnlfbGltaXQpfX1mdW5jdGlvbiAkRXQobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJjbHItdHJlZS1ub2RlIiwxMiwxMyksRXQoImNsaWNrIixmdW5jdGlvbihkKXtVdChhKTtjb25zdCBoPUdlKCkuJGltcGxpY2l0LG09'@;
put 'R2UoKTtyZXR1cm4gWnQobS50cmVlTm9kZUNsaWNrZWQoZCxoLG0ubGlicmFyeUxpc3QpKX0pKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oZCl7cmV0dXJuIFV0KGEpLFp0KEdlKCkuJGltcGxpY2l0LmV4cGFuZGVkPWQpfSkseWUoMiwicCIsMTQpLEV0KCJjbGljayIsZnVuY3Rpb24o'@;
put 'KXtVdChhKTtjb25zdCBkPVFpKDEpLGg9R2UoKS4kaW1wbGljaXQsbT1HZSgpO3JldHVybiBtLmxpYj1oLkxJQlJBUllJRCxadChtLmxpYnJhcnlPbkNsaWNrKG0ubGlifHwiIixoLGQpKX0pLHRuKDMsImNsci1pY29uIiwxNSksWWUoNCksQ2UoKSx0dCg1LEZFdCw2LDMsImNsci10cmVlLW5v'@;
put 'ZGUiLDApLHR0KDYsR0V0LDIsNSwiY2xyLXRyZWUtbm9kZSIsMTYpLENlKCl9aWYoMiZsKXtjb25zdCBhPUdlKCkuJGltcGxpY2l0O2dyKCJjbHItZXhwYW5kZWQiLGEuZXhwYW5kZWQpLFJlKCJjbHJFeHBhbmRlZCIsYS5leHBhbmRlZCkoImNsckxvYWRpbmciLGEubG9hZGluZ1RhYmxlcyYm'@;
put 'IWEudGFibGVzKSxTZSg0KSx3cigiICIsYS5MSUJSQVJZTkFNRSwiICIpLFNlKDEpLFJlKCJuZ0lmIixhLnRhYmxlcyksU2UoMSksUmUoIm5nRm9yT2YiLGEudGFibGVzKX19ZnVuY3Rpb24gS0V0KGwsYyl7aWYoMSZsJiYoV3IoMCksdHQoMSwkRXQsNyw3LCJjbHItdHJlZS1ub2RlIiwxMSks'@;
put 'R3IoKSksMiZsKXtjb25zdCBhPWMuJGltcGxpY2l0O1NlKDEpLFJlKCJuZ0lmIiwhYS5oaWRkZW4mJmEuaW5Gb3JlZ3JvdW5kKX19ZnVuY3Rpb24gcUV0KGwsYyl7MSZsJiYoeWUoMCwiZGl2IiwzMikoMSwic3BhbiIsMzMpLFllKDIsIiBMb2FkaW5nLi4uICIpLENlKCkoKSl9bGV0IFhFdD0o'@;
put 'KCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEsZil7dGhpcy5oZWxwZXJTZXJ2aWNlPWEsdGhpcy5saWNlbmNlU2VydmljZT1mLHRoaXMuc2VhcmNoTGliSW5wdXRMaXN0PW5ldyBVMix0aGlzLnRhYmxlT25DbGlja0VtaXR0ZXI9bmV3IHhyLHRoaXMubGlicmFyeU9uQ2xpY2tFbWl0dGVyPW5l'@;
put 'dyB4cix0aGlzLmhhc0NvbHVtbnM9ITEsdGhpcy5wYWdpbmc9ITAsdGhpcy5saWJyYXJpZXNTZWFyY2g9IiIsdGhpcy5saWI9IiIsdGhpcy50YWJsZT0iIix0aGlzLmxpYnJhcmllc1BhZ2luZz0hMSx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZX1u'@;
put 'Z09uSW5pdCgpe31uZ0FmdGVyVmlld0luaXQoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5zZWFyY2hMaWJJbnB1dExpc3QuZmlyc3QubmF0aXZlRWxlbWVudC5mb2N1cygpfSl9bmdPbkNoYW5nZXMoYSl7YS5saWJyYXJ5TGlzdD8uY3VycmVudFZhbHVlJiZ0aGlzLmxpYnJhcnlMaXN0JiZ0aGlz'@;
put 'LmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyh0aGlzLmxpYnJhcnlMaXN0KX10cmVlT25GaWx0ZXIoYSxmKXt0aGlzLmhlbHBlclNlcnZpY2UudHJlZU9uRmlsdGVyKGEsZil9bGlicmFyeU9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLmxp'@;
put 'YnJhcnlMaXN0LHRoaXMubGlicmFyaWVzU2VhcmNoLCJMSUJSQVJZTkFNRSIpLEpuLmxpbmVhZ2UubGlicmFyaWVzU2VhcmNoPXRoaXMubGlicmFyaWVzU2VhcmNofXRyZWVOb2RlQ2xpY2tlZChhLGYsZCl7IkNvbGxhcHNlIj09PWEudGFyZ2V0LnRpdGxlJiZ0aGlzLmNvbGxhcHNlVHJlZUl0'@;
put 'ZW1zKGQsZil9bGlicmFyeU9uQ2xpY2soYSxmLGQpe2YuaW5Gb3JlZ3JvdW5kPSEwO2NvbnN0IGg9KCk9PnNldFRpbWVvdXQoKCk9PmQuY29udGVudENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQucXVlcnlTZWxlY3RvcigiaW5wdXQiKS5mb2N1cygpKTtpZihmLnRhYmxl'@;
put 'cylmLmV4cGFuZGVkPSFmLmV4cGFuZGVkLHRoaXMubGlicmFyeU9uQ2xpY2tFbWl0dGVyLmVtaXQoe2xpYmlkOmEsbGlicmFyeTpmLHRhYmxlc0xvYWRlZDohMH0pO2Vsc2V7Zi5sb2FkaW5nVGFibGVzPSEwLHRoaXMubGlicmFyeU9uQ2xpY2tFbWl0dGVyLmVtaXQoe2xpYmlkOmEsbGlicmFy'@;
put 'eTpmLHRhYmxlc0xvYWRlZDohMX0pO2NvbnN0IG09c2V0SW50ZXJ2YWwoKCk9PntmLmxvYWRpbmdUYWJsZXN8fChoKCksY2xlYXJJbnRlcnZhbChtKSl9LDUwMCl9Zi5leHBhbmRlZCYmaCgpLHRoaXMuY29sbGFwc2VUcmVlSXRlbXModGhpcy5saWJyYXJ5TGlzdCxmKX10YWJsZU9uQ2xpY2so'@;
put 'YSxmLGQpe3ZhciBoPXRoaXM7cmV0dXJuIHlpKGZ1bmN0aW9uKigpe2guaGVscGVyU2VydmljZS5kZWJvdW5jZUNhbGwoNTAsKCk9PntoLmhhc0NvbHVtbnM/KGYuY29sdW1ucz8oZi5leHBhbmRlZD0hZi5leHBhbmRlZCwhMD09PWYuZXhwYW5kZWQmJihoLnRhYmxlPWEsaC50YWJsZU9uQ2xp'@;
put 'Y2tFbWl0dGVyLmVtaXQoe3RhYmxldXJpOmEsbGliVGFibGU6ZixsaWJyYXJ5OmQsY29sdW1uc0xvYWRlZDohMH0pKSk6KGYuZXhwYW5kZWQ9IWYuZXhwYW5kZWQsZi5sb2FkaW5nQ29sdW1ucz0hMCxoLnRhYmxlPWEsaC50YWJsZU9uQ2xpY2tFbWl0dGVyLmVtaXQoe3RhYmxldXJpOmEsbGli'@;
put 'VGFibGU6ZixsaWJyYXJ5OmQsY29sdW1uc0xvYWRlZDohMX0pKSxoLmNvbGxhcHNlVHJlZUl0ZW1zKGQudGFibGVzLGYpKTpoLnRhYmxlT25DbGlja0VtaXR0ZXIuZW1pdCh7dGFibGV1cmk6YSxsaWJUYWJsZTpmLGxpYnJhcnk6ZCxjb2x1bW5zTG9hZGVkOiExfSl9KX0pKCl9Y29sdW1uT25D'@;
put 'bGljayhhLGYsZCl7dGhpcy5saWI9Zi5MSUJSQVJZSUQsdGhpcy50YWJsZT1kLlRBQkxFVVJJLHRoaXMuY29sdW1uPWEuQ09MVVJJfWxpYlRhYkFjdGl2ZShhLGYpe3JldHVybiEoIXRoaXMubGlifHwhdGhpcy50YWJsZSkmJmE9PT10aGlzLmxpYiYmZj09PXRoaXMudGFibGV9bGliQ29sdW1u'@;
put 'QWN0aXZlKGEpe2lmKCF0aGlzLmNvbHVtbilyZXR1cm4hMTtsZXQgZj1hLnNwbGl0KCJcXCIpLGQ9dGhpcy5jb2x1bW4uc3BsaXQoIlxcIik7cmV0dXJuIGZbZi5sZW5ndGgtMV09PWRbZC5sZW5ndGgtMV19Y29sbGFwc2VUcmVlSXRlbXMoYSxmKXthLmZvckVhY2goZD0+e0pTT04uc3RyaW5n'@;
put 'aWZ5KGQpIT09SlNPTi5zdHJpbmdpZnkoZikmJihkLmV4cGFuZGVkPSExKX0pfWxvYWRNb3JlTGlicmFyaWVzKCl7dGhpcy5saWJyYXJpZXNQYWdpbmd8fCh0aGlzLmxpYnJhcmllc1BhZ2luZz0hMCx0aGlzLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyh0aGlzLmxpYnJhcnlMaXN0'@;
put 'LCEwKSx0aGlzLmxpYnJhcmllc1BhZ2luZz0hMSl9aGFuZGxlU2Nyb2xsKGEpe2xldCBmPWEudGFyZ2V0O2YmJmYuc2Nyb2xsVG9wPj1mLnNjcm9sbEhlaWdodC1mLm9mZnNldEhlaWdodC0xMCYmdGhpcy5sb2FkTW9yZUxpYnJhcmllcygpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24o'@;
put 'YSl7cmV0dXJuIG5ldyhhfHxsKShydChQdSkscnQoYjEpKX0sbC5cdTAyNzVjbXA9a3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siZGMtdHJlZSJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxmKXtpZigxJmEmJk5vKE9FdCw1KSwyJmEpe2xldCBkO3VpKGQ9Y2koKSkmJihmLnNlYXJjaExpYklucHV0'@;
put 'TGlzdD1kKX19LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGYpezEmYSYmRXQoInNjcm9sbCIsZnVuY3Rpb24oaCl7cmV0dXJuIGYuaGFuZGxlU2Nyb2xsKGgpfSl9LGlucHV0czp7aGFzQ29sdW1uczoiaGFzQ29sdW1ucyIscGFnaW5nOiJwYWdpbmciLGxpYnJhcnlMaXN0OiJsaWJyYXJ5TGlz'@;
put 'dCJ9LG91dHB1dHM6e3RhYmxlT25DbGlja0VtaXR0ZXI6InRhYmxlT25DbGlja0VtaXR0ZXIiLGxpYnJhcnlPbkNsaWNrRW1pdHRlcjoibGlicmFyeU9uQ2xpY2tFbWl0dGVyIn0sZmVhdHVyZXM6W2JsXSxkZWNsczo0LHZhcnM6Myxjb25zdHM6W1siY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwi'@;
put 'bmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwidy0xMDAgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkxpYnJhcmllcyIsIm5hbWUiLCJpbnB1'@;
put 'dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCJdLFsic2VhcmNoTGliVHJlZUlucHV0IiwiIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2Vh'@;
put 'cmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbHItZXhwYW5kZWQiLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0lmIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsaWNrIiwiY2xyRXhwYW5k'@;
put 'ZWRDaGFuZ2UiXSxbImxpYlRyZWVOb2RlIiwiIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJyYWNrLXNlcnZlciJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbHItZXhwYW5kZWQiLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0'@;
put 'LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJUYWJsZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiXSxbInNlYXJjaFRyZWVJbnB1dCIsIiJdLFs0LCJuZ1ZhciJd'@;
put 'LFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLDEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJdLFszLCJuZ1N3aXRjaCJdLFsic2hhcGUiLCJib2x0Iiw0LCJuZ1N3aXRjaENhc2UiXSxbInNoYXBlIiwidGFibGUiLDQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20t'@;
put 'cmlnaHQiLCJjbHJTaXplIiwibGciLDQsImNscklmT3BlbiJdLFs0LCJuZ0lmIl0sWyJzaGFwZSIsImJvbHQiXSxbInNoYXBlIiwidGFibGUiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiQ29sdW1u'@;
put 'cyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCJdLFsxLCJjbHItdHJlZW5vZGUtbGluayIsMywiY2xpY2siXSxbInNoYXBlIiwib2JqZWN0cyJdLFsxLCJ3LTEwMCIsInRleHQtY2VudGVyIl0sWzEsInNwaW5u'@;
put 'ZXIiLCJzcGlubmVyLXNtIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZil7MSZhJiYoeWUoMCwiY2xyLXRyZWUiKSx0dCgxLFJFdCw2LDMsImNsci10cmVlLW5vZGUiLDApLHR0KDIsS0V0LDIsMSwibmctY29udGFpbmVyIiwxKSxDZSgpLHR0KDMscUV0LDMsMCwiZGl2IiwyKSksMiZhJiYoU2Uo'@;
put 'MSksUmUoIm5nSWYiLGYubGlicmFyeUxpc3QpLFNlKDEpLFJlKCJuZ0Zvck9mIixmLmxpYnJhcnlMaXN0KSxTZSgxKSxSZSgibmdJZiIsZi5saWJyYXJpZXNQYWdpbmcpKX0sZGVwZW5kZW5jaWVzOltSYSwkaSxrZixDaCxEZCxMZixpNSxSbCxKYyx4ZCxSZixNUyxFUyxrUyxpcyxXYSx6YSxS'@;
put 'N10sc3R5bGVzOlsiY2xyLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH1jbHItdHJlZVtfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyOmZvY3VzIC5j'@;
put 'bHItdHJlZW5vZGUtbGlua3tiYWNrZ3JvdW5kOiNlOGU4ZTg7YmFja2dyb3VuZDp2YXIoLS1jbHItdHJlZS1saW5rLWhvdmVyLWNvbG9yLCAjZThlOGU4KTt0ZXh0LWRlY29yYXRpb246bm9uZX0iXX0pLGx9KSgpO2NvbnN0IEpFdD1bInJlc2l6ZUJveCJdLFFFdD1bImRyYWdIYW5kbGVDb3Ju'@;
put 'ZXIiXTtmdW5jdGlvbiBleHQobCxjKXtpZigxJmwmJih5ZSgwLCJzcGFuIiwzMiksWWUoMSksQ2UoKSksMiZsKXtjb25zdCBhPUdlKCk7U2UoMSksJHUoIlRvIHVubG9jayBtb3JlIHRoZW4gIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0LCIgIiwxPT09YS5saWNlbmNlU3Rh'@;
put 'dGUudmFsdWUudmlld2JveF9saW1pdD8idmlld2JveCI6InZpZXdib3hlcyIsIiwgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIil9fWZ1bmN0aW9uIHR4dChsLGMpezEmbCYmKHllKDAsImRpdiIsMzMpLHRuKDEsImNsci1zcGlubmVyIiwzNCksQ2UoKSl9ZnVuY3Rpb24gbnh0'@;
put 'KGwsYyl7MSZsJiYoeWUoMCwicCIsMzUpLFllKDEsIiBWaWV3Ym94IG9wZW4gbGltaXQgcmVhY2hlZCAiKSxDZSgpKX1mdW5jdGlvbiByeHQobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJkYy10cmVlIiwzNiksRXQoImxpYnJhcnlPbkNsaWNrRW1pdHRlciIsZnVuY3Rpb24oZCl7'@;
put 'cmV0dXJuIFV0KGEpLFp0KEdlKCkubGlicmFyeU9uQ2xpY2soZCkpfSkoInRhYmxlT25DbGlja0VtaXR0ZXIiLGZ1bmN0aW9uKGQpe3JldHVybiBVdChhKSxadChHZSgpLnRhYmxlT25DbGljayhkKSl9KSxDZSgpfTImbCYmUmUoImxpYnJhcnlMaXN0IixHZSgpLmxpYnJhcmllcyl9ZnVuY3Rp'@;
put 'b24gaXh0KGwsYyl7MSZsJiYoeWUoMCwicCIsMzcpLFllKDEsIiBQaWNrIHRhYmxlIGZyb20gdGhlIGxpc3Qgb24gdGhlIGxlZnQgIiksQ2UoKSl9ZnVuY3Rpb24gb3h0KGwsYyl7MSZsJiZ0bigwLCJjbHItc3Bpbm5lciIsNDUpfWZ1bmN0aW9uIGF4dChsLGMpe2lmKDEmbCl7Y29uc3QgYT1a'@;
put 'bigpO3llKDAsImEiLDEyKSxFdCgiY2xpY2siLGZ1bmN0aW9uKGQpe1V0KGEpO2NvbnN0IGg9R2UoKS4kaW1wbGljaXQsbT1HZSgpO3JldHVybiBtLm1pbmltaXplKGgpLFp0KG0uc3RvcFByb3BhZ2F0aW9uKGQpKX0pLHRuKDEsImNsci1pY29uIiwxNSkseWUoMiwic3BhbiIsMTQpLFllKDMs'@;
put 'Ik1pbmltaXplIHZpZXdib3giKSxDZSgpKCl9fWZ1bmN0aW9uIGx4dChsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImEiLDEyKSxFdCgiY2xpY2siLGZ1bmN0aW9uKGQpe1V0KGEpO2NvbnN0IGg9R2UoKS4kaW1wbGljaXQsbT1HZSgpO3JldHVybiBtLnJlc3RvcmUoaCksWnQobS5z'@;
put 'dG9wUHJvcGFnYXRpb24oZCkpfSksdG4oMSwiY2xyLWljb24iLDE2KSx5ZSgyLCJzcGFuIiwxNCksWWUoMywiUmVzdG9yZSB2aWV3Ym94IiksQ2UoKSgpfX1mdW5jdGlvbiBzeHQobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJkaXYiLDM4KSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7'@;
put 'Y29uc3QgaD1VdChhKS4kaW1wbGljaXQ7cmV0dXJuIFp0KEdlKCkuc2VsZWN0Vmlld2JveChoKSl9KSx5ZSgxLCJkaXYiLDM5KSxZZSgyKSx0dCgzLG94dCwxLDAsImNsci1zcGlubmVyIiw0MCksQ2UoKSx5ZSg0LCJkaXYiKSg1LCJhIiw0MSksRXQoImNsaWNrIixmdW5jdGlvbihkKXtjb25z'@;
put 'dCBtPVV0KGEpLiRpbXBsaWNpdCxfPUdlKCk7cmV0dXJuIF8ucmVzZXRQb3NTaXplKG0pLFp0KF8uc3RvcFByb3BhZ2F0aW9uKGQpKX0pLHRuKDYsImNsci1pY29uIiw0MikseWUoNywic3BhbiIsMTQpLFllKDgsIlJlc2V0IHBvc2l0aW9uIGFuZCBzaXplIiksQ2UoKSgpLHR0KDksYXh0LDQs'@;
put 'MCwiYSIsNDMpLHR0KDEwLGx4dCw0LDAsImEiLDQzKSx5ZSgxMSwiYSIsMTIpLEV0KCJjbGljayIsZnVuY3Rpb24oZCl7Y29uc3QgbT1VdChhKS4kaW1wbGljaXQsXz1HZSgpO3JldHVybiBfLmNsb3NlKG0pLFp0KF8uc3RvcFByb3BhZ2F0aW9uKGQpKX0pLHRuKDEyLCJjbHItaWNvbiIsNDQp'@;
put 'LHllKDEzLCJzcGFuIiwxNCksWWUoMTQsIkNsb3NlIHZpZXdib3giKSxDZSgpKCkoKSgpfWlmKDImbCl7Y29uc3QgYT1jLiRpbXBsaWNpdCxmPUdlKCk7Z3IoInNlbGVjdGVkIiwobnVsbD09Zi5zZWxlY3RlZFZpZXdib3g/bnVsbDpmLnNlbGVjdGVkVmlld2JveC5pZCk9PT1hLmlkKSxTZSgy'@;
put 'KSxPMCgiICMiLGEuaWQsIiAiLGEubGlicmFyeSwiLiIsYS50YWJsZSwiICIpLFNlKDEpLFJlKCJuZ0lmIixhLmxvYWRpbmdEYXRhKSxTZSgyKSxncigiZGlzYWJsZWQiLDA9PT1hLngmJjA9PT1hLnkpLFNlKDQpLFJlKCJuZ0lmIiwhYS5taW5pbWl6ZWQpLFNlKDEpLFJlKCJuZ0lmIixhLm1p'@;
put 'bmltaXplZCl9fWZ1bmN0aW9uIHV4dChsLGMpe2lmKDEmbCYmKHllKDAsIm9wdGlvbiIpLFllKDEpLENlKCkpLDImbCl7Y29uc3QgYT1jLiRpbXBsaWNpdDtTZSgxKSx3cigiICIsYSwiICIpfX1mdW5jdGlvbiBjeHQobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTtXcigwKSx5ZSgxLCJkaXYi'@;
put 'LDQ4KSgyLCJhcHAtYXV0b2NvbXBsZXRlIiw0OSw1MCksRXQoInZhbHVlQ2hhbmdlIixmdW5jdGlvbihkKXtVdChhKTtjb25zdCBoPVFpKDMpLG09R2UoKS5uZ1ZhcjtyZXR1cm4gWnQoR2UoKS5vbkNvbHNlYXJjaENoYW5nZShoLGQsbS5jb2xIZWFkZXJzSGlkZGVuKSl9KSx0dCg0LHV4dCwy'@;
put 'LDEsIm9wdGlvbiIsNTEpLENlKCkoKSxHcigpfWlmKDImbCl7Y29uc3QgYT1HZSgpLm5nVmFyO1NlKDIpLFJlKCJpbnB1dElkIiwidmlld2JveC1jb2x1bW4tc2VhcmNoIikoImVtaXRPbmx5U2VsZWN0ZWQiLCEwKSxTZSgyKSxSZSgibmdGb3JPZiIsYS5jb2xIZWFkZXJzSGlkZGVuKX19ZnVu'@;
put 'Y3Rpb24gZnh0KGwsYyl7MSZsJiZ0bigwLCJjbHItaWNvbiIsNTcpfWZ1bmN0aW9uIGR4dChsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImNsci1pY29uIiw1OCksRXQoImNsaWNrIixmdW5jdGlvbigpe1V0KGEpO2NvbnN0IGQ9R2UoKS4kaW1wbGljaXQ7cmV0dXJuIFp0KEdlKDMp'@;
put 'Lm9uQ29sUmVtb3ZlKGQpKX0pLENlKCl9fWZ1bmN0aW9uIGh4dChsLGMpe2lmKDEmbCYmKHllKDAsImRpdiIsNTQpKDEsInNwYW4iKSxZZSgyKSx0dCgzLGZ4dCwxLDAsImNsci1pY29uIiw1NSksQ2UoKSx0dCg0LGR4dCwxLDAsImNsci1pY29uIiw1NiksQ2UoKSksMiZsKXtjb25zdCBhPWMu'@;
put 'JGltcGxpY2l0LGY9R2UoMikubmdWYXIsZD1HZSgpO3BPKCJjb2wtYm94IGNvbHVtbi0iLGEsIiIpLGdyKCJjdXJzb3ItZGVmYXVsdC1pIixmLmhlYWRlclBrcy5pbmNsdWRlcyhhKSkoInByaW1hcnlLZXlIZWFkZXJTdHlsZSIsZi5oZWFkZXJQa3MuaW5jbHVkZXMoYSkpLFJlKCJjZGtEcmFn'@;
put 'RGF0YSIsYSkoImNka0RyYWdEaXNhYmxlZCIsZi5oZWFkZXJQa3MuaW5jbHVkZXMoYSkpLFNlKDIpLCR1KCIgIixhLCIgIiwibnVtIj09PShudWxsPT1kLnNlbGVjdGVkVmlld2JveFRhYmxlfHxudWxsPT1kLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlP251bGw6ZC5zZWxlY3RlZFZp'@;
put 'ZXdib3hUYWJsZS5ob3RUYWJsZS4kZGF0YWZvcm1hdHMudmFyc1thXS50eXBlKT8iKG51bWVyaWMpIjoiIiwiICIpLFNlKDEpLFJlKCJuZ0lmIixmLmhlYWRlclBrcy5pbmNsdWRlcyhhKSksU2UoMSksUmUoIm5nSWYiLCFmLmhlYWRlclBrcy5pbmNsdWRlcyhhKSl9fWZ1bmN0aW9uIHB4dChs'@;
put 'LGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO1dyKDApLHllKDEsInAiLDUpLFllKDIsIkNvbHVtbnMgVG8gRGlzcGxheSAoZHJhZyBhbmQgcmUtb3JkZXIpIiksQ2UoKSx5ZSgzLCJkaXYiLDUyKSxFdCgiY2RrRHJvcExpc3REcm9wcGVkIixmdW5jdGlvbihkKXtyZXR1cm4gVXQoYSksWnQoR2Uo'@;
put 'MikuY29sdW1uc0Ryb3AoZCkpfSksdHQoNCxoeHQsNSwxMywiZGl2Iiw1MyksQ2UoKSxHcigpfWlmKDImbCl7Y29uc3QgYT1HZSgpLm5nVmFyO1NlKDMpLFJlKCJjZGtEcm9wTGlzdERhdGEiLGEuY29sSGVhZGVyc1Zpc2libGUpLFNlKDEpLFJlKCJuZ0Zvck9mIixhLmNvbEhlYWRlcnNWaXNp'@;
put 'YmxlKX19ZnVuY3Rpb24gbXh0KGwsYyl7aWYoMSZsJiYoeWUoMCwiZGl2Iiw0NiksdHQoMSxjeHQsNSwzLCJuZy1jb250YWluZXIiLDQ3KSx0dCgyLHB4dCw1LDIsIm5nLWNvbnRhaW5lciIsNDcpLENlKCkpLDImbCl7Y29uc3QgYT1jLm5nVmFyO1NlKDEpLFJlKCJuZ0lmIixhLmNvbEhlYWRl'@;
put 'cnNIaWRkZW4pLFNlKDEpLFJlKCJuZ0lmIixhLmNvbEhlYWRlcnNWaXNpYmxlKX19ZnVuY3Rpb24gZ3h0KGwsYyl7aWYoMSZsKXtjb25zdCBhPVpuKCk7eWUoMCwiY2xyLWljb24iLDg1KSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7VXQoYSk7Y29uc3QgZD1HZSgpLiRpbXBsaWNpdDtyZXR1cm4g'@;
put 'WnQoR2UoKS5jb2xsYXBzZShkKSl9KSxDZSgpfX1mdW5jdGlvbiB2eHQobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJjbHItaWNvbiIsODYpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtVdChhKTtjb25zdCBkPUdlKCkuJGltcGxpY2l0O3JldHVybiBadChHZSgpLmV4cGFuZChkKSl9'@;
put 'KSxDZSgpfX1mdW5jdGlvbiB5eHQobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJjbHItaWNvbiIsODcpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtVdChhKTtjb25zdCBkPUdlKCkuJGltcGxpY2l0LGg9UWkoMTYpO3JldHVybiBadChHZSgpLnNlYXJjaFRhYmxlKGgsZCkpfSksQ2Uo'@;
put 'KX19ZnVuY3Rpb24gYnh0KGwsYyl7MSZsJiYoeWUoMCwic3BhbiIsODgpLFllKDEsIiBMb2FkaW5nLi4uICIpLENlKCkpfWZ1bmN0aW9uIF94dChsLGMpezEmbCYmKHllKDAsInNwYW4iLDg5KSxZZSgxLCJMb2FkaW5nLi4uIiksQ2UoKSl9ZnVuY3Rpb24gd3h0KGwsYyl7aWYoMSZsKXtjb25z'@;
put 'dCBhPVpuKCk7eWUoMCwiY2xyLWljb24iLDkwKSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7VXQoYSk7Y29uc3QgZD1HZSgpLiRpbXBsaWNpdCxoPVFpKDE2KTtyZXR1cm4gR2UoKS5yZWxvYWRUYWJsZURhdGEoZCksWnQoaC52YWx1ZT0iIil9KSxDZSgpfX1mdW5jdGlvbiBDeHQobCxjKXsxJmwm'@;
put 'Jih5ZSgwLCJkaXYiLDk0KSx0bigxLCJjbHItc3Bpbm5lciIsMzQpLENlKCkpfWZ1bmN0aW9uIFN4dChsLGMpe2lmKDEmbCYmdG4oMCwiaG90LXRhYmxlIiw5NSksMiZsKXtjb25zdCBhPUdlKCkubmdWYXIsZj1HZSgpLiRpbXBsaWNpdCxkPUdlKCk7UmUoImhvdElkIiwiaG90SW5zdGFuY2Vf'@;
put 'dmlld2JveF8iK2YuaWQpKCJyZWFkT25seSIsITApKCJtb2RpZnlDb2xXaWR0aCIsZC5tYXhXaWR0aENoZWtlcikoImNvcHlQYXN0ZSIsZC52aWV3Ym94VGFibGVzW2FdLmhvdFRhYmxlLmNvcHlQYXN0ZSkoImNvbnRleHRNZW51IixkLnZpZXdib3hUYWJsZXNbYV0uaG90VGFibGUuY29udGV4'@;
put 'dE1lbnUpKCJtdWx0aUNvbHVtblNvcnRpbmciLCEwKSgidmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQiLDUwKSgiZGF0YSIsZC52aWV3Ym94VGFibGVzW2FdLmhvdFRhYmxlLmRhdGEpKCJjb2xIZWFkZXJzIixkLnZpZXdib3hUYWJsZXNbYV0uaG90VGFibGUuY29sSGVhZGVycykoImNvbHVt'@;
put 'bnMiLGQudmlld2JveFRhYmxlc1thXS5ob3RUYWJsZS5jb2x1bW5zKSgiZmlsdGVycyIsITApKCJkcm9wZG93bk1lbnUiLGQudmlld2JveFRhYmxlc1thXS5ob3RUYWJsZS5kcm9wZG93bk1lbnUpKCJoZWlnaHQiLGQudmlld2JveFRhYmxlc1thXS5ob3RUYWJsZS5oZWlnaHQpKCJjZWxscyIs'@;
put 'ZC52aWV3Ym94VGFibGVzW2FdLmhvdFRhYmxlLmNlbGxzKSgibWF4Um93cyIsZC52aWV3Ym94VGFibGVzW2FdLmhvdFRhYmxlLm1heFJvd3MpKCJtYW51YWxDb2x1bW5SZXNpemUiLCEwKSgibGljZW5zZUtleSIsZC52aWV3Ym94VGFibGVzW2FdLmhvdFRhYmxlLmxpY2Vuc2VLZXkpfX1mdW5j'@;
put 'dGlvbiBNeHQobCxjKXtpZigxJmwmJih5ZSgwLCJkaXYiLDkxKSx0dCgxLEN4dCwyLDAsImRpdiIsOTIpLHR0KDIsU3h0LDEsMTcsImhvdC10YWJsZSIsOTMpLENlKCkpLDImbCl7Y29uc3QgYT1jLm5nVmFyLGY9R2UoKS4kaW1wbGljaXQ7V2MoImRpc3BsYXkiLGYuY29sbGFwc2VkPyJub25l'@;
put 'IjoiIiksU2UoMSksUmUoIm5nSWYiLGYubG9hZGluZ0RhdGEmJmE8MCksU2UoMSksUmUoIm5nSWYiLGE+LTEpfX1jb25zdCBreHQ9ZnVuY3Rpb24obCxjKXtyZXR1cm57eDpsLHk6Y319O2Z1bmN0aW9uIEV4dChsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImRpdiIsNTksNjApLEV0'@;
put 'KCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7Y29uc3QgaD1VdChhKS4kaW1wbGljaXQ7cmV0dXJuIFp0KEdlKCkuZm9jdXNWaWV3Ym94KGgpKX0pKCJjZGtEcmFnRW5kZWQiLGZ1bmN0aW9uKGQpe2NvbnN0IG09VXQoYSkuJGltcGxpY2l0O3JldHVybiBadChHZSgpLnZpZXdib3hEcmFnRW5kZWQo'@;
put 'ZCxtKSl9KSx5ZSgyLCJkaXYiLDYxKSgzLCJzcGFuIiw2MiksWWUoNCksQ2UoKSx5ZSg1LCJkaXYiLDYzKSx0dCg2LGd4dCwxLDAsImNsci1pY29uIiw2NCksdHQoNyx2eHQsMSwwLCJjbHItaWNvbiIsNjUpLHllKDgsImNsci1pY29uIiw2NiksRXQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0'@;
put 'IGg9VXQoYSkuJGltcGxpY2l0O3JldHVybiBadChHZSgpLm1pbmltaXplKGgpKX0pLENlKCkseWUoOSwiY2xyLWljb24iLDY3KSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD1VdChhKS4kaW1wbGljaXQ7cmV0dXJuIFp0KEdlKCkuY2xvc2UoaCkpfSksQ2UoKSgpKCkseWUoMTAsInNw'@;
put 'YW4iLDY4LDY5KSxFdCgiY2RrRHJhZ01vdmVkIixmdW5jdGlvbihkKXtjb25zdCBtPVV0KGEpLiRpbXBsaWNpdCxfPVFpKDExKSxPPVFpKDEpO3JldHVybiBadChHZSgpLmRyYWdNb3ZlKF8sTyxtLGQpKX0pLENlKCkseWUoMTIsImZvcm0iLDcwKSgxMywiZGl2Iiw3MSkoMTQsImRpdiIsNzIp'@;
put 'KDE1LCJpbnB1dCIsNzMsNzQpLEV0KCJrZXl1cC5lbnRlciIsZnVuY3Rpb24oKXtjb25zdCBoPVV0KGEpLiRpbXBsaWNpdCxtPVFpKDE2KTtyZXR1cm4gWnQoR2UoKS5zZWFyY2hUYWJsZShtLGgpKX0pLENlKCksdHQoMTcseXh0LDEsMCwiY2xyLWljb24iLDc1KSx0dCgxOCxieHQsMiwwLCJz'@;
put 'cGFuIiw3NiksQ2UoKSx5ZSgxOSwiY2xyLWNoZWNrYm94LWNvbnRhaW5lciIpKDIwLCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDIxLCJpbnB1dCIsNzcpLEV0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihkKXtyZXR1cm4gWnQoVXQoYSkuJGltcGxpY2l0LnNlYXJjaE51bWVyaWM9ZCl9KSxD'@;
put 'ZSgpLHllKDIyLCJsYWJlbCIpLFllKDIzLCJOdW1lcmljIiksQ2UoKSgpKCkoKSx5ZSgyNCwiZGl2IiwzOSksdHQoMjUsX3h0LDIsMCwic3BhbiIsNzgpLHR0KDI2LHd4dCwxLDAsImNsci1pY29uIiw3OSkseWUoMjcsImEiLDgwKSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD1VdChh'@;
put 'KS4kaW1wbGljaXQsbT1RaSgxNik7cmV0dXJuIEdlKCkub3BlbkZpbHRlcihoKSxadChtLnZhbHVlPSIiKX0pLHRuKDI4LCJjbHItaWNvbiIsODEpLHllKDI5LCJzcGFuIiw4MiksWWUoMzApLENlKCkoKSx5ZSgzMSwiY2xyLWljb24iLDgzKSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3Qg'@;
put 'aD1VdChhKS4kaW1wbGljaXQ7cmV0dXJuIFp0KEdlKCkub3BlblRhYmxlRWRpdChoKSl9KSxDZSgpKCkoKSx0dCgzMixNeHQsMyw0LCJkaXYiLDg0KSxDZSgpfWlmKDImbCl7Y29uc3QgYT1jLiRpbXBsaWNpdCxmPUdlKCk7V2MoImRpc3BsYXkiLGEubWluaW1pemVkPyJub25lIjoiIikoIndp'@;
put 'ZHRoIixhLndpZHRoLCJweCIpKCJoZWlnaHQiLGEuaGVpZ2h0LCJweCIpKCJwb2ludGVyLWV2ZW50cyIsYS5jb2xsYXBzZWQ/Im5vbmUiOiIiKSgiYm94LXNoYWRvdyIsYS5jb2xsYXBzZWQ/Im5vbmUiOiIiKSxncigiZm9jdXNlZCIsYS5mb2N1c2VkKSxSZSgiY2RrRHJhZ0ZyZWVEcmFnUG9z'@;
put 'aXRpb24iLHdoKDM0LGt4dCxhLngsYS55KSkoImlkIiwidmlld2JveF8iK2EuaWQpLFNlKDQpLE8wKCIgIyIsYS5pZCwiICIsYS5saWJyYXJ5LCIuIixhLnRhYmxlLCIgIiksU2UoMiksUmUoIm5nSWYiLCFhLmNvbGxhcHNlZCksU2UoMSksUmUoIm5nSWYiLGEuY29sbGFwc2VkKSxTZSgzKSxS'@;
put 'ZSgiaWQiLCJoYW5kbGVfdmlld2JveF8iK2EuaWQpLFNlKDIpLFdjKCJkaXNwbGF5IixhLmNvbGxhcHNlZD8ibm9uZSI6IiIpLFNlKDMpLFJlKCJ0eXBlIixhLnNlYXJjaE51bWVyaWM/Im51bWJlciI6InRleHQiKSxTZSgyKSxSZSgibmdJZiIsIWEuc2VhcmNoTG9hZGluZyksU2UoMSksUmUo'@;
put 'Im5nSWYiLGEuc2VhcmNoTG9hZGluZyksU2UoMyksUmUoIm5nTW9kZWwiLGEuc2VhcmNoTnVtZXJpYyksU2UoNCksUmUoIm5nSWYiLGEubG9hZGluZ0RhdGEpLFNlKDEpLFJlKCJuZ0lmIiwhYS5sb2FkaW5nRGF0YSksU2UoMiksZ3IoImZpbHRlci1hY3RpdmUiLCIwIiE9PWEuZmlsdGVyX3Br'@;
put 'KSxTZSgyKSxhcihhLmZpbHRlclRleHQpLFNlKDEpLGdyKCJkaXNhYmxlZCIsIWYudGFibGVFZGl0RXhpc3RzKGEpKSxTZSgxKSxSZSgibmdWYXIiLGYuZ2V0Vmlld2JveFRhYmxlSW5kZXgoYSkpfX1mdW5jdGlvbiB4eHQobCxjKXtpZigxJmwmJnRuKDAsImFwcC1xdWVyeSIsOTYsOTcpLDIm'@;
put 'bCl7Y29uc3QgYT1HZSgpO1JlKCJ2aWV3Ym94SWQiLG51bGw9PWEuZmlsdGVyaW5nVmlld2JveD9udWxsOmEuZmlsdGVyaW5nVmlld2JveC5pZCl9fWNvbnN0IEF4dD1mdW5jdGlvbihsLGMsYSl7cmV0dXJue2NvbEhlYWRlcnNIaWRkZW46bCxjb2xIZWFkZXJzVmlzaWJsZTpjLGhlYWRlclBr'@;
put 'czphfX07bGV0IEE2ZT0oKCk9PntjbGFzcyBse2dldCB2aWV3Ym94TW9kYWwoKXtyZXR1cm4gdGhpcy5fdmlld2JveE1vZGFsfXNldCB2aWV3Ym94TW9kYWwoYSl7aWYoITE9PT10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94JiZhKXJldHVybiB0aGlzLmV2ZW50U2VydmljZS5zaG93'@;
put 'RGVtb0xpbWl0TW9kYWwoIlZpZXdib3hlcyIpLHZvaWQgdGhpcy52aWV3Ym94TW9kYWxDaGFuZ2UuZW1pdCghMSk7dGhpcy5fdmlld2JveE1vZGFsPWEsYSYmdGhpcy51bnNldFNlbGVjdGVkVmlld2JveCgpfWNvbnN0cnVjdG9yKGEsZixkLGgsbSxfLE8sWCxhZSxwZSl7dGhpcy5uZ1pvbmU9'@;
put 'YSx0aGlzLmxpY2VuY2VTZXJ2aWNlPWYsdGhpcy5zYXNTZXJ2aWNlPWQsdGhpcy5ldmVudFNlcnZpY2U9aCx0aGlzLnNhc1N0b3JlU2VydmljZT1tLHRoaXMubG9nZ2VyU2VydmljZT1fLHRoaXMuaGVscGVyU2VydmljZT1PLHRoaXMucm91dGVyPVgsdGhpcy5hY3RpdmF0ZWRSb3V0ZT1hZSx0'@;
put 'aGlzLmNkZj1wZSx0aGlzLl92aWV3Ym94TW9kYWw9ITEsdGhpcy52aWV3Ym94TW9kYWxDaGFuZ2U9bmV3IHhyLHRoaXMubGliaW5mbz1udWxsLHRoaXMubGlicmFyaWVzTG9hZGluZz0hMCx0aGlzLnZpZXdib3hlcz1bXSx0aGlzLmRlZmF1bHRDb25maWc9e2lkOi0xLGxpYnJhcnk6IiIsdGFi'@;
put 'bGU6IiIsd2lkdGg6NTAwLGhlaWdodDozMDAseDowLHk6MTUwLGNvbHVtbnM6W119LHRoaXMuc2FzanNDb25maWc9bmV3IHYxLlNBU2pzQ29uZmlnLHRoaXMuaG90VGFibGVEZWZhdWx0PXtkYXRhOltdLGhlYWRlclBrczpbXSwkZGF0YWZvcm1hdHM6e30sYWxsQ29sSGVhZGVyczpbXSxjb2xI'@;
put 'ZWFkZXJzSGlkZGVuOltdLGNvbEhlYWRlcnNWaXNpYmxlOltdLGNvbEhlYWRlcnM6W10sY29udGV4dE1lbnU6WyJjb3B5X3dpdGhfY29sdW1uX2hlYWRlcnMiLCJjb3B5X2NvbHVtbl9oZWFkZXJzX29ubHkiXSxjb3B5UGFzdGU6e2NvcHlDb2x1bW5IZWFkZXJzOiEwLGNvcHlDb2x1bW5IZWFk'@;
put 'ZXJzT25seTohMH0sY29sdW1uczpbXSxjb2xzOltdLGhlaWdodDoiMTAwJSIsc2V0dGluZ3M6e30saGlkZGVuQ29sdW1uczohMCxtYW51YWxDb2x1bW5Nb3ZlOiExLGFmdGVyR2V0Q29sSGVhZGVyOnZvaWQgMCxsaWNlbnNlS2V5OnZvaWQgMCxkcm9wZG93bk1lbnU6dm9pZCAwfSx0aGlzLnZp'@;
put 'ZXdib3hUYWJsZXM9W10sdGhpcy5maWx0ZXI9ITEsdGhpcy5maWx0ZXJMb2FkaW5nPSExLHRoaXMubnVsbFZhcmlhYmxlcz0hMSx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLkluZmluaXR5PTEvMCx0aGlzLm1heFZpZXdib3hlcz10aGlz'@;
put 'LmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0PT09MS8wPzY6dGhpcy5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveF9saW1pdHx8Nix0aGlzLmhvdFRhYmxlUmVnaXN0ZXJlcj1uZXcgSTV9bmdPbkluaXQoKXt0aGlzLnNhc1N0b3JlU2VydmljZS52aWV3TGlicygpLnRoZW4oZj0+'@;
put 'e3RoaXMubGlicmFyaWVzPWYuc2FzbGlic30pLmNhdGNoKGY9Pnt0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoZil9KS5maW5hbGx5KCgpPT57dGhpcy5saWJyYXJpZXNMb2FkaW5nPSExfSksdGhpcy5fcXVlcnk9dGhpcy5zYXNTdG9yZVNlcnZpY2UucXVlcnkuc3Vic2NyaWJlKGY9Pnt0aGlz'@;
put 'LmNsYXVzZXM9Zi5vYmosdGhpcy5maWx0ZXJMaWJkcz1mLmxpYmRzfSksdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLmxpY2VuY2VTZXJ2aWNlLmhvdF9saWNlbnNlX2tleS5zdWJzY3JpYmUoZj0+e3RoaXMuaG90VGFibGVEZWZhdWx0Lmxp'@;
put 'Y2Vuc2VLZXk9Zn0pO2NvbnN0IGE9dGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcy52aWV3Ym94ZXM7YSYmKCExPT09dGhpcy5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveD8oc2V0VGltZW91dCgoKT0+dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0RlbW9MaW1pdE1vZGFs'@;
put 'KCJMaW5raW5nIFZpZXdib3hlcyIpKSx0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSx7cmVsYXRpdmVUbzp0aGlzLmFjdGl2YXRlZFJvdXRlLHF1ZXJ5UGFyYW1zOnt9fSkpOih0aGlzLnZpZXdib3hlcz10aGlzLmRlY29kZVVybERhdGEoYSksc2V0VGltZW91dCgoKT0+e3RoaXMuc2V0QWxsSGFu'@;
put 'ZGxlVHJhbnNmb3JtKCl9KSkpLHRoaXMucmVMb2FkVmlld2JveHRhYmxlcyh0aGlzLnZpZXdib3hlcyl9bmdBZnRlclZpZXdJbml0KCl7fWdldCB2aWV3Ym94TGltaXRSZWFjaGVkKCl7cmV0dXJuIHRoaXMudmlld2JveGVzLmxlbmd0aD49dGhpcy5tYXhWaWV3Ym94ZXN9Y2xyTW9kYWxPcGVu'@;
put 'Q2hhbmdlKGEpe3RoaXMudmlld2JveE1vZGFsQ2hhbmdlLmVtaXQoYSl9bGlicmFyeU9uQ2xpY2soYSl7YS50YWJsZXNMb2FkZWR8fHRoaXMubG9hZFRhYmxlcyhhLmxpYnJhcnkuTElCUkFSWVJFRixhLmxpYnJhcnkpfXRhYmxlT25DbGljayhhKXt2YXIgZj10aGlzO3JldHVybiB5aShmdW5j'@;
put 'dGlvbiooKXtpZihmLnZpZXdib3hMaW1pdFJlYWNoZWQpcmV0dXJuO2NvbnN0IGQ9ey4uLmYuZGVmYXVsdENvbmZpZyx0YWJsZTphLmxpYlRhYmxlLGxpYnJhcnk6YS5saWJyYXJ5LkxJQlJBUllOQU1FLGxvYWRpbmdEYXRhOiEwLGZpbHRlcl9wazoiMCIsaWQ6Zi52aWV3Ym94ZXMubGVuZ3Ro'@;
put 'KzEseDp3aW5kb3cuaW5uZXJXaWR0aC1mLmRlZmF1bHRDb25maWcud2lkdGgseToxNTB9O2Yudmlld2JveGVzLnB1c2goZCksc2V0VGltZW91dCgoKT0+e2Yuc2V0QWxsSGFuZGxlVHJhbnNmb3JtKCl9KTtjb25zdCBoPWAke2EubGlicmFyeS5MSUJSQVJZUkVGfS4ke2EubGliVGFibGV9YDt5'@;
put 'aWVsZCBmLmxvYWREYXRhKGgsZCksZC5sb2FkaW5nRGF0YT0hMSxmLmV2ZW50U2VydmljZS5kaXNwYXRjaEV2ZW50KCJyZXNpemUiKSxmLnNuYXBUb0dyaWQoKX0pKCl9bG9hZFRhYmxlcyhhLGYpe3RoaXMuc2FzU3RvcmVTZXJ2aWNlLnZpZXdUYWJsZXMoYSkudGhlbihkPT57bGV0IGg9ZC5t'@;
put 'cHRhYmxlcy5tYXAoZnVuY3Rpb24obSl7cmV0dXJuIG0uTUVNTkFNRX0pO3RoaXMubGliaW5mbz1kLmxpYmluZm98fFtdLHRoaXMudGFibGVzPWgsZiYmKGYudGFibGVzPWgsZi5saWJpbmZvPXRoaXMubGliaW5mbyxmLmxvYWRpbmdUYWJsZXM9ITEsaC5sZW5ndGg+MCYmKGYuZXhwYW5kZWQ9'@;
put 'ITApKX0pLmNhdGNoKGQ9Pnt0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoZCl9KX1yZWxvYWREYXRhKGEsZil7dmFyIGQ9dGhpcztyZXR1cm4geWkoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKChoLG0pPT57bGV0IF89ZC52aWV3Ym94VGFibGVzLmZpbmQoTz0+Ty52aWV3Ym94SWQ9'@;
put 'PT1mLmlkKTtkLnNhc1N0b3JlU2VydmljZS52aWV3RGF0YShhLHBhcnNlSW50KGYuZmlsdGVyX3BrfHwiMCIpKS50aGVuKE89PntfJiYoXy5ob3RUYWJsZS5kYXRhPU8udmlld2RhdGEpLGgobnVsbCl9KS5jYXRjaCgoKT0+e20oKX0pfSl9KSgpfWxvYWREYXRhKGEsZil7dmFyIGQ9dGhpczty'@;
put 'ZXR1cm4geWkoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKChoLG0pPT57bGV0IF89ITEsTz1kLnZpZXdib3hUYWJsZXMuZmluZChYPT5YLnZpZXdib3hJZD09PWYuaWQpO08mJigiMCI9PT1mLmZpbHRlcl9wa3x8IWYuZmlsdGVyX3BrKSYmaCgpLGQuc2FzU3RvcmVTZXJ2aWNlLnZp'@;
put 'ZXdEYXRhKGEscGFyc2VJbnQoZi5maWx0ZXJfcGt8fCIwIikpLnRoZW4oWD0+e08/Xz0hMDpPPXt2aWV3Ym94SWQ6Zi5pZCx2aWV3Ym94TGliRGF0YXNldDphLGhvdFRhYmxlOl9EKGQuaG90VGFibGVEZWZhdWx0KX0sTy5ob3RUYWJsZS5kYXRhPVgudmlld2RhdGEsTy5ob3RUYWJsZS4kZGF0'@;
put 'YWZvcm1hdHM9WC4kdmlld2RhdGEsTy5ob3RUYWJsZS5jb2xzPVguY29scyxiSihPLmhvdFRhYmxlLmNvbHMsW10sWC4kdmlld2RhdGEpO2xldCBhZT1bXSxwZT1bXTtmb3IobGV0IGJlIGluIFgudmlld2RhdGFbMF0pYmUmJnBlLnB1c2goYmUpO2ZvcihsZXQgYmU9MDtiZTxwZS5sZW5ndGg7'@;
put 'YmUrKylhZS5wdXNoKHtkYXRhOnBlW2JlXX0pO08uaG90VGFibGUuaGVhZGVyUGtzPV9EKFguc2FzcGFyYW1zWzBdLlBLX0ZJRUxEUy5zcGxpdCgiICIpKSxPLmhvdFRhYmxlLmFsbENvbEhlYWRlcnM9cGUuZmlsdGVyKGJlPT4hTy5ob3RUYWJsZS5oZWFkZXJQa3MuaW5jbHVkZXMoYmUpKSxP'@;
put 'LmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW49X0QoTy5ob3RUYWJsZS5hbGxDb2xIZWFkZXJzKSxPLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlPXBlLmZpbHRlcihiZT0+Ty5ob3RUYWJsZS5oZWFkZXJQa3MuaW5jbHVkZXMoYmUpKSxPLmhvdFRhYmxlLmNvbEhlYWRlcnM9cGUsTy5ob3RU'@;
put 'YWJsZS5jb2x1bW5zPWFlLGYuY29sdW1ucyYmZi5jb2x1bW5zLmxlbmd0aD4wPyhPLmhvdFRhYmxlLm1hbnVhbENvbHVtbk1vdmU9Zi5jb2x1bW5zLGYuY29sdW1ucz8ubWFwKChiZSx4ZSk9Pntjb25zdCBWZT1wZVtiZV0sWmU9Ty5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuLmluZGV4T2Yo'@;
put 'VmUpO1plPi0xJiYoTy5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuLnNwbGljZShaZSwxKSxPLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlW3hlXT1WZSl9KSk6Ty5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZS5wdXNoKC4uLk8uaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbi5zcGxpY2Uo'@;
put 'MCwxMCkpLE8uaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGU9Ty5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZS5maWx0ZXIoYmU9PmJlKSxffHxkLnZpZXdib3hUYWJsZXMucHVzaChPKSxmLnF1ZXJ5PWQuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoWC5xdWVyeSksZi5maWx0ZXJUZXh0PVgu'@;
put 'c2FzcGFyYW1zWzBdLkZJTFRFUl9URVhULHNldFRpbWVvdXQoKCk9PntkLnVwZGF0ZUhvdENvbHVtbnMoTy5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVufHxbXSxmLmlkKTtjb25zdCBiZT1kLmdldFZpZXdib3hIb3RJbnN0YW5jZShmLmlkKTtiZT8udXBkYXRlU2V0dGluZ3Moe21hbnVhbENv'@;
put 'bHVtbk1vdmU6Ty5ob3RUYWJsZS5tYW51YWxDb2x1bW5Nb3ZlLGFmdGVyR2V0Q29sSGVhZGVyOih4ZSxWZSk9Pntjb25zdCBaZT1iZT8uY29sVG9Qcm9wKHhlKTtaZSYmTy5ob3RUYWJsZS5oZWFkZXJQa3MuaW5kZXhPZihaZSk+LTEmJlZlLmNsYXNzTGlzdC5hZGQoInByaW1hcnlLZXlIZWFk'@;
put 'ZXJTdHlsZSIpfX0pLGJlPy5yZW5kZXIoKSxkLnNlbGVjdGVkVmlld2JveCYmZC5yZXNldFNlbGVjdGVkVmlld2JveChmKX0pLGgoKX0pLmNhdGNoKFg9PntkLmxvZ2dlclNlcnZpY2UuZXJyb3IoWCksbSgpfSl9KX0pKCl9cmVMb2FkVmlld2JveHRhYmxlcyhhKXthLm1hcChmPT57Y29uc3Qg'@;
put 'ZD1gJHtmLmxpYnJhcnl9LiR7Zi50YWJsZX1gO2YubG9hZGluZ0RhdGE9ITAsdGhpcy5sb2FkRGF0YShkLGYpLnRoZW4oKCk9PntmLmxvYWRpbmdEYXRhPSExfSl9KX1tYXhXaWR0aENoZWtlcihhLGYpe3JldHVybiBhPjIwMD8yMDA6YX1nZXRWaWV3Ym94VGFibGVJbmRleChhKXtyZXR1cm4g'@;
put 'dGhpcy52aWV3Ym94VGFibGVzLmZpbmRJbmRleChkPT5kLnZpZXdib3hJZD09PWEuaWQpfXJlc2l6ZShhLGYpe2NvbnN0IGQ9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxoPWYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbT1kLmxlZnQtaC5sZWZ0K2Qud2lkdGgsXz1kLnRvcC1oLnRvcCtk'@;
put 'LmhlaWdodDtyZXR1cm4gZi5zdHlsZS53aWR0aD1tKyJweCIsZi5zdHlsZS5oZWlnaHQ9XysicHgiLHRoaXMuc2V0QWxsSGFuZGxlVHJhbnNmb3JtKCksdGhpcy5oZWxwZXJTZXJ2aWNlLmRlYm91bmNlQ2FsbCgxZTMsKCk9Pnt0aGlzLnZpZXdib3hDaGFuZ2VkKCksdGhpcy5ldmVudFNlcnZp'@;
put 'Y2UuZGlzcGF0Y2hFdmVudCgicmVzaXplIil9KSx7d2lkdGg6bSxoZWlnaHQ6X319ZHJhZ01vdmUoYSxmLGQsaCl7dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pntjb25zdCBtPXRoaXMucmVzaXplKGEsZik7ZC53aWR0aD1tLndpZHRoLGQuaGVpZ2h0PW0uaGVpZ2h0fSl9c2V0'@;
put 'QWxsSGFuZGxlVHJhbnNmb3JtKCl7dGhpcy5yZXNpemVCb3hRdWVyeS5mb3JFYWNoKGE9Pntjb25zdCBmPWEubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxkPWBoYW5kbGVfJHthLm5hdGl2ZUVsZW1lbnQuaWR9YCxoPXRoaXMuZHJhZ0hhbmRsZUNvcm5lclF1ZXJ5LmZp'@;
put 'bmQoKG0sXyk9Pm0ubmF0aXZlRWxlbWVudC5pZD09PWQpO3RoaXMuc2V0SGFuZGxlVHJhbnNmb3JtKGg/Lm5hdGl2ZUVsZW1lbnQsZiwiYm90aCIpfSl9c2V0SGFuZGxlVHJhbnNmb3JtKGEsZixkKXtjb25zdCBoPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bGV0IG09Zi53aWR0aC1oLndp'@;
put 'ZHRoLF89Zi5oZWlnaHQtaC5oZWlnaHQ7bSs9NSxfKz01LCJ4Ij09PWQmJihhLnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlKCR7bX1weCwgMClgKSwieSI9PT1kJiYoYS5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZSgwLCAke199cHgpYCksImJvdGgiPT09ZCYmKGEuc3R5bGUudHJhbnNm'@;
put 'b3JtPWB0cmFuc2xhdGUoJHttfXB4LCAke199cHgpYCl9Zm9jdXNWaWV3Ym94KGEpe3RoaXMudmlld2JveGVzLm1hcChmPT57Zi5mb2N1c2VkPSExfSksYS5mb2N1c2VkPSEwfXZpZXdib3hEcmFnRW5kZWQoYSxmKXtsZXQgaD1hLnNvdXJjZS5nZXRSb290RWxlbWVudCgpLmdldEJvdW5kaW5n'@;
put 'Q2xpZW50UmVjdCgpO2YueD1oLmxlZnQsZi55PWgudG9wLHRoaXMudmlld2JveENoYW5nZWQoKX1zbmFwVG9HcmlkKCl7Y29uc3QgYT13aW5kb3cuaW5uZXJXaWR0aCxmPXdpbmRvdy5pbm5lckhlaWdodCxfPU1hdGguY2VpbCh0aGlzLnZpZXdib3hlcy5sZW5ndGgvMiksTz1NYXRoLmZsb29y'@;
put 'KHRoaXMudmlld2JveGVzLmxlbmd0aC8yKSxwZT0oYS01KihfKzEpKS9fLGJlPShhLTUqKE8rMSkpL087bGV0IFZlPTAsbHQ9KGYtMjUwLTYwKS8yLGR0PTAsZ3Q9MDtmb3IobGV0IGp0PTA7anQ8dGhpcy52aWV3Ym94ZXMubGVuZ3RoO2p0Kyspe2xldCBybj10aGlzLnZpZXdib3hlc1tqdF0s'@;
put 'WHQ9IShqdD5fLTEpO2NvbnN0IHluPVh0P3BlOmJlOyFYdCYmMD09PWd0JiYoZHQ9MCxndCsrLFZlPTApLHJuLng9NStWZStkdCooeW4rNSkscm4ueT0yNTArZ3QqKGx0KzUpLHJuLndpZHRoPXluLHJuLmhlaWdodD1sdCxkdCsrfXRoaXMudmlld2JveENoYW5nZWQoKSxzZXRUaW1lb3V0KCgp'@;
put 'PT57dGhpcy5zZXRBbGxIYW5kbGVUcmFuc2Zvcm0oKX0pfW1pbmltaXplQWxsKCl7dGhpcy52aWV3Ym94ZXMuZm9yRWFjaChhPT57YS5taW5pbWl6ZWQ9ITB9KSx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9cmVzdG9yZUFsbCgpe3RoaXMudmlld2JveGVzLmZvckVhY2goYT0+e2EubWluaW1pemVk'@;
put 'PSExfSksdGhpcy52aWV3Ym94Q2hhbmdlZCgpfXJlc2V0UG9zU2l6ZShhKXthLng9d2luZG93LmlubmVyV2lkdGgtdGhpcy5kZWZhdWx0Q29uZmlnLndpZHRoLGEueT10aGlzLmRlZmF1bHRDb25maWcueSxhLndpZHRoPXRoaXMuZGVmYXVsdENvbmZpZy53aWR0aCxhLmhlaWdodD10aGlzLmRl'@;
put 'ZmF1bHRDb25maWcuaGVpZ2h0LHRoaXMudmlld2JveENoYW5nZWQoKX1taW5pbWl6ZShhKXthLm1pbmltaXplZD0hMCx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9cmVzdG9yZShhKXthLm1pbmltaXplZD0hMSx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9Y29sbGFwc2UoYSl7YS5jb2xsYXBzZWQ9ITAs'@;
put 'dGhpcy52aWV3Ym94Q2hhbmdlZCgpfWV4cGFuZChhKXthLmNvbGxhcHNlZD0hMSx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9Y2xvc2UoYSl7Y29uc3QgZj10aGlzLnZpZXdib3hlcy5maW5kSW5kZXgoaD0+aC5pZD09PWEuaWQpLGQ9dGhpcy52aWV3Ym94VGFibGVzLmZpbmRJbmRleChoPT5oLnZp'@;
put 'ZXdib3hJZD09PWEuaWQpO2Y+LTEmJnRoaXMudmlld2JveGVzLnNwbGljZShmLDEpLGQ+LTEmJnRoaXMudmlld2JveFRhYmxlcy5zcGxpY2UoZCwxKSx0aGlzLnNlbGVjdGVkVmlld2JveD8uaWQ9PT1hLmlkJiZ0aGlzLnVuc2V0U2VsZWN0ZWRWaWV3Ym94KCksSm4udmlld2JveGVzW2EuaWRd'@;
put 'PXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoa2opLHRoaXMudmlld2JveENoYW5nZWQoKX1zZWxlY3RWaWV3Ym94KGEpe3ZvaWQgMD09PXRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUmJnZvaWQgMD09PXRoaXMuc2VsZWN0ZWRWaWV3Ym94P3RoaXMucmVzZXRTZWxlY3RlZFZpZXdib3go'@;
put 'YSk6YS5pZD09PXRoaXMuc2VsZWN0ZWRWaWV3Ym94Py5pZD90aGlzLnVuc2V0U2VsZWN0ZWRWaWV3Ym94KCk6dGhpcy5yZXNldFNlbGVjdGVkVmlld2JveChhKX1jb2x1bW5zRHJvcChhKXt0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlPy5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuJiYoYS5w'@;
put 'cmV2aW91c0NvbnRhaW5lcj09PWEuY29udGFpbmVyP2Q2ZShhLmNvbnRhaW5lci5kYXRhLGEucHJldmlvdXNJbmRleCxhLmN1cnJlbnRJbmRleCk6ZnVuY3Rpb24gTWt0KGwsYyxhLGYpe2NvbnN0IGQ9V0UoYSxsLmxlbmd0aC0xKSxoPVdFKGYsYy5sZW5ndGgpO2wubGVuZ3RoJiZjLnNwbGlj'@;
put 'ZShoLDAsbC5zcGxpY2UoZCwxKVswXSl9KGEucHJldmlvdXNDb250YWluZXIuZGF0YSxhLmNvbnRhaW5lci5kYXRhLGEucHJldmlvdXNJbmRleCxhLmN1cnJlbnRJbmRleCksdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZSYmIm9iamVjdCI9PXR5cGVvZiB0aGlzLnNlbGVjdGVk'@;
put 'Vmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnMpJiZ0aGlzLnVwZGF0ZUNvbHVtbk9yZGVySG90KGEuaXRlbS5kYXRhLGEuY3VycmVudEluZGV4LHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUudmlld2JveElkKX1vbkNvbHNlYXJjaENoYW5nZShhLGYsZCl7Y29uc3QgaD1kLmluZGV4'@;
put 'T2YoZik7ZC5zcGxpY2UoaCwxKSxhLnZhbHVlPSIiLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRhYmxlJiYodGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZS5wdXNoKGYpLHRoaXMudXBkYXRlSG90Q29sdW1ucyh0aGlzLnNlbGVjdGVk'@;
put 'Vmlld2JveFRhYmxlPy5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUudmlld2JveElkKSx0aGlzLnVwZGF0ZUNvbHVtbk9yZGVySG90KGYsdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZS5sZW5ndGgt'@;
put 'MSx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hJZCkpfW9uQ29sUmVtb3ZlKGEpe2lmKHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRhYmxlKXtjb25zdCBmPXRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUuaW5kZXhPZihh'@;
put 'KTt0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlLnNwbGljZShmLDEpLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbi5wdXNoKGEpLHRoaXMudXBkYXRlSG90Q29sdW1ucyh0aGlzLnNlbGVjdGVkVmll'@;
put 'd2JveFRhYmxlPy5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUudmlld2JveElkKSx0aGlzLnVwZGF0ZUNvbHVtbk9yZGVySG90KGEsdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZS5sZW5ndGgsdGhp'@;
put 'cy5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94SWQpfX1yZXNldFNlbGVjdGVkVmlld2JveChhKXt0aGlzLnNlbGVjdGVkVmlld2JveD1hLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU9dGhpcy52aWV3Ym94VGFibGVzLmZpbmQoZj0+Zi52aWV3Ym94SWQ9PT1hLmlkKX11bnNldFNlbGVj'@;
put 'dGVkVmlld2JveCgpe3RoaXMuc2VsZWN0ZWRWaWV3Ym94PXZvaWQgMCx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlPXZvaWQgMH1zdG9wUHJvcGFnYXRpb24oYSl7YS5zdG9wUHJvcGFnYXRpb24oKX1vcGVuRmlsdGVyKGEpe3RoaXMuc2VsZWN0Vmlld2JveChhKTtjb25zdCBmPXRoaXMudmll'@;
put 'd2JveFRhYmxlc1t0aGlzLmdldFZpZXdib3hUYWJsZUluZGV4KGEpXTt0aGlzLmZpbHRlckxpYmRzPWAke2EubGlicmFyeX0uJHthLnRhYmxlfWAsdGhpcy5maWx0ZXJpbmdWaWV3Ym94PWEsdGhpcy5maWx0ZXI9ITAsdGhpcy5jZGYuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuc2FzU3RvcmVTZXJ2'@;
put 'aWNlLnNldFF1ZXJ5VmFyaWFibGVzKHRoaXMuZmlsdGVyTGliZHMsZi5ob3RUYWJsZS5jb2xzKX1vcGVuVGFibGVFZGl0KGEpe2NvbnN0IGY9YS5saWJyYXJ5KyIuIithLnRhYmxlO2xldCBkPWxvY2F0aW9uLmhyZWYuc2xpY2UoMCxsb2NhdGlvbi5ocmVmLmluZGV4T2YoIiMiKSk7ZD1gJHtk'@;
put 'fSMvZWRpdG9yLyR7Zn1gLHdpbmRvdy5vcGVuKGQsIl9ibGFuayIpfXJlc2V0RmlsdGVyKCl7dGhpcy5maWx0ZXJpbmdWaWV3Ym94JiYodGhpcy5maWx0ZXJpbmdWaWV3Ym94LmZpbHRlcl9waz0iMCIsdGhpcy5yZWxvYWRUYWJsZURhdGEodGhpcy5maWx0ZXJpbmdWaWV3Ym94KSx0aGlzLmZp'@;
put 'bHRlcj0hMSx0aGlzLnZpZXdib3hDaGFuZ2VkKCksSm4udmlld2JveGVzW3RoaXMuZmlsdGVyaW5nVmlld2JveC5pZF09dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShraikpfXNlbmRDbGF1c2UoKXt0aGlzLmZpbHRlckxvYWRpbmc9ITA7bGV0IGE9W10sZj1bXTtpZih0eXBlb2YgdGhp'@;
put 'cy5jbGF1c2VzPiJ1IilyZXR1cm4gdGhpcy5udWxsVmFyaWFibGVzPSEwLHZvaWQodGhpcy5maWx0ZXJMb2FkaW5nPSExKTt7bGV0IGQ9dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqO2ZvcihsZXQgaD0wO2g8ZC5sZW5ndGg7aCsrKXtjb25zdCBtPWRbaF0uZWxlbWVudHM7YT1tLmZpbHRlcihmdW5j'@;
put 'dGlvbihfKXtyZXR1cm4gbnVsbD09PV8udmFyaWFibGV9KSxhLmxlbmd0aCYmZi5wdXNoKG0pfX1pZihmLmxlbmd0aClyZXR1cm4gdGhpcy5udWxsVmFyaWFibGVzPSEwLHZvaWQodGhpcy5maWx0ZXJMb2FkaW5nPSExKTt0cnl7aWYodm9pZCAwIT09dGhpcy5jbGF1c2VzJiZ0aGlzLmZpbHRl'@;
put 'ckxpYmRzKXtjb25zdCBkPXtncm91cExvZ2ljOnRoaXMuY2xhdXNlcy5ncm91cExvZ2ljLGZpbHRlckdyb3VwczpbXX07dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLmZvckVhY2gobT0+e2NvbnN0IF89e2ZpbHRlckNsYXVzZXM6W119O20uZWxlbWVudHMuZm9yRWFjaChPPT57Xy5maWx0ZXJDbGF1'@;
put 'c2VzLnB1c2godGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShPKSl9KSxfLmNsYXVzZUxvZ2ljPW0uY2xhdXNlTG9naWMsZC5maWx0ZXJHcm91cHMucHVzaCh0aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKF8pKX0pO2NvbnN0IGg9dGhpcy5zYXNTdG9yZVNlcnZpY2UuY3JlYXRlRmls'@;
put 'dGVyUXVlcnlUYWJsZShkKTt0aGlzLnNhc1N0b3JlU2VydmljZS5zYXZlUXVlcnkodGhpcy5maWx0ZXJMaWJkcyxoKS50aGVuKG09Pnt0aGlzLmZpbHRlcmluZ1ZpZXdib3guZmlsdGVyX3BrPW0ucmVzdWx0WzBdLkZJTFRFUl9SSyx0aGlzLmxvYWREYXRhKHRoaXMuZmlsdGVyTGliZHMsdGhp'@;
put 'cy5maWx0ZXJpbmdWaWV3Ym94KS50aGVuKCgpPT57dGhpcy5maWx0ZXI9ITEsdGhpcy5maWx0ZXJMb2FkaW5nPSExfSksdGhpcy52aWV3Ym94Q2hhbmdlZCgpfSkuY2F0Y2gobT0+e3RoaXMuZmlsdGVyTG9hZGluZz0hMX0pfX1jYXRjaHt0aGlzLmZpbHRlckxvYWRpbmc9ITF9fXNlYXJjaFRh'@;
put 'YmxlKGEsZil7dmFyIGQ9dGhpcztyZXR1cm4geWkoZnVuY3Rpb24qKCl7Zi5zZWFyY2hMb2FkaW5nPSEwO2xldCBoPWEudmFsdWUsbT1mLmxpYnJhcnkrIi4iK2YudGFibGUsXz1wYXJzZUludChmLmZpbHRlcl9wa3x8IjAiKTtjb25zdCBPPWQudmlld2JveFRhYmxlcy5maW5kKFg9Plgudmll'@;
put 'd2JveElkPT09Zi5pZCk7TyYmKHlpZWxkIGQuc2FzU3RvcmVTZXJ2aWNlLnZpZXdEYXRhU2VhcmNoKGgsZi5zZWFyY2hOdW1lcmljLG0sXykudGhlbihYPT57WC5zYXNwYXJhbXN8fFgudmlld0RhdGE/Ty5ob3RUYWJsZS5kYXRhPVgudmlld2RhdGE6Zi5zZWFyY2hMb2FkaW5nPSEwfSkuY2F0'@;
put 'Y2goWD0+e2QubG9nZ2VyU2VydmljZS5lcnJvcihYKX0pLGYuc2VhcmNoTG9hZGluZz0hMSl9KSgpfXJlbG9hZFRhYmxlRGF0YShhKXt2YXIgZj10aGlzO3JldHVybiB5aShmdW5jdGlvbiooKXtjb25zdCBkPWAke2EubGlicmFyeX0uJHthLnRhYmxlfWA7YS5sb2FkaW5nRGF0YT0hMCx5aWVs'@;
put 'ZCBmLnJlbG9hZERhdGEoZCxhKSxhLmxvYWRpbmdEYXRhPSExLGYuZXZlbnRTZXJ2aWNlLmRpc3BhdGNoRXZlbnQoInJlc2l6ZSIpfSkoKX11cGRhdGVIb3RDb2x1bW5zKGEsZil7dGhpcy51cGRhdGVIaWRkZW5Db2x1bW5zSG90KGEsZiksdGhpcy5zZXRDb2x1bW5PcmRlcihmKX11cGRhdGVD'@;
put 'b2x1bW5PcmRlckhvdChhLGYsZCl7Y29uc3QgaD10aGlzLmdldFZpZXdib3hIb3RJbnN0YW5jZShkKTtpZihoKXtjb25zdCBtPWgucHJvcFRvQ29sKGEpO2guZ2V0UGx1Z2luKCJtYW51YWxDb2x1bW5Nb3ZlIikubW92ZUNvbHVtbihtLGYpLGgucmVuZGVyKCksdGhpcy5zZXRDb2x1bW5PcmRl'@;
put 'cihkKX19dGFibGVFZGl0RXhpc3RzKGEpe2NvbnN0IGY9Sm4uZWRpdG9yLmxpYnNBbmRUYWJsZXMsZD1hLmxpYnJhcnk7cmV0dXJuISFmW2RdJiZmW2RdLmluY2x1ZGVzKGEudGFibGUpfXNldENvbHVtbk9yZGVyKGEpe2NvbnN0IGY9dGhpcy52aWV3Ym94ZXMuZmluZChkPT5kLmlkPT09YSk7'@;
put 'aWYoZil7Y29uc3QgZD10aGlzLmNyZWF0ZUNvbHVtbk9yZGVyKGEpO2YuY29sdW1ucz1kLmxlbmd0aD4wP2Q6Zi5jb2x1bW5zfXRoaXMudmlld2JveENoYW5nZWQoKX1jcmVhdGVDb2x1bW5PcmRlcihhKXtjb25zdCBmPXRoaXMuZ2V0Vmlld2JveEhvdEluc3RhbmNlKGEpO2lmKCFmKXJldHVy'@;
put 'bltdO2NvbnN0IGQ9Zi5nZXRDb2xIZWFkZXIoKSxoPXRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRhYmxlLmNvbEhlYWRlcnM7aWYoIWgpcmV0dXJuW107Y29uc3QgbT10aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlPy5ob3RUYWJsZT8uY29sSGVhZGVyc1Zpc2libGUubGVuZ3RofHw1'@;
put 'LF89W107cmV0dXJuIGQubWFwKChPLFgpPT57aWYoWDxtKXtjb25zdCBhZT1oLmluZGV4T2YoTyk7YWU+LTEmJl8ucHVzaChhZSl9fSksX311cGRhdGVIaWRkZW5Db2x1bW5zSG90KGEsZil7Y29uc3QgZD10aGlzLmdldFZpZXdib3hIb3RJbnN0YW5jZShmKTtpZihkKXtjb25zdCBoPWEubWFw'@;
put 'KG09PmQucHJvcFRvQ29sKG0pKTtkLnVwZGF0ZVNldHRpbmdzKHtoaWRkZW5Db2x1bW5zOntjb2x1bW5zOmh9fSksZC5yZW5kZXIoKX19Z2V0Vmlld2JveEhvdEluc3RhbmNlKGEpe3JldHVybiBhP3RoaXMuaG90VGFibGVSZWdpc3RlcmVyLmdldEluc3RhbmNlKGBob3RJbnN0YW5jZV92aWV3'@;
put 'Ym94XyR7YX1gKTp2b2lkIDB9dmlld2JveENoYW5nZWQoKXtsZXQgYTtjb25zdCBmPXRoaXMuZW5jb2RlVXJsRGF0YSh0aGlzLnZpZXdib3hlcyk7Zi5sZW5ndGg+MCYmKGE9e3ZpZXdib3hlczpmfSksdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10se3JlbGF0aXZlVG86dGhpcy5hY3RpdmF0ZWRS'@;
put 'b3V0ZSxxdWVyeVBhcmFtczphfSksdGhpcy5wcmVwYXJlRmlsdGVyQ2FjaGUoKX1wcmVwYXJlRmlsdGVyQ2FjaGUoKXtmb3IobGV0IGEgb2YgdGhpcy52aWV3Ym94ZXMpaWYoSm4udmlld2JveGVzW2EuaWRdfHwoSm4udmlld2JveGVzW2EuaWRdPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xv'@;
put 'bmUoa2opKSxhLnF1ZXJ5JiZhLnF1ZXJ5Lmxlbmd0aD4wKXtjb25zdCBmPXRoaXMudmlld2JveFRhYmxlcy5maW5kKGg9Pmgudmlld2JveElkPT09YS5pZCksZD1gdmlld2JveGVzLiR7YS5pZH1gO0puLnZpZXdib3hlc1thLmlkXS5maWx0ZXIucXVlcnk9YS5xdWVyeSxKbi52aWV3Ym94ZXNb'@;
put 'YS5pZF0uZmlsdGVyLmxpYmRzPWEubGlicmFyeSsiLiIrYS50YWJsZSx0aGlzLnNhc1N0b3JlU2VydmljZS5pbml0aWFsaXplR2xvYmFsRmlsdGVyQ2xhdXNlKGQsZj8uaG90VGFibGUuY29scyl9fWVuY29kZVVybERhdGEoYSl7bGV0IGY9IiI7cmV0dXJuIGEubWFwKChkLGgpPT57Zis9YCR7'@;
put 'ZC5pZH0tJHtkLmxpYnJhcnl9LSR7ZC50YWJsZX0tJHtkLndpZHRofS0ke2QuaGVpZ2h0fS0ke2QueH0tJHtkLnl9LSR7ZC5jb2xsYXBzZWQ/MTowfS0ke2QubWluaW1pemVkPzE6MH0tJHtkLmZpbHRlcl9wa3x8MH0ke2QuY29sdW1ucyYmZC5jb2x1bW5zLmxlbmd0aD4wPyItIitkLmNvbHVt'@;
put 'bnM/LmpvaW4oIiwiKToiIn1gLGghPT1hLmxlbmd0aC0xJiYoZis9IjsiKX0pLGZ9ZGVjb2RlVXJsRGF0YShhKXtsZXQgZD1bXTtyZXR1cm4gYS5zcGxpdCgiOyIpLm1hcChtPT57Y29uc3QgXz1tLnNwbGl0KCItIik7ZC5wdXNoKHtpZDpwYXJzZUludChfWzBdKSxsaWJyYXJ5Ol9bMV0sdGFi'@;
put 'bGU6X1syXSx3aWR0aDpwYXJzZUludChfWzNdKSxoZWlnaHQ6cGFyc2VJbnQoX1s0XSkseDpwYXJzZUludChfWzVdKSx5OnBhcnNlSW50KF9bNl0pLGNvbGxhcHNlZDohIXBhcnNlSW50KF9bN10pLG1pbmltaXplZDohIXBhcnNlSW50KF9bOF0pLGNvbHVtbnM6X1sxMF0/LnNwbGl0KCIsIiku'@;
put 'bWFwKE89PnBhcnNlSW50KE8pKXx8W10sZmlsdGVyX3BrOl9bOV19KX0pLGR9bmdPbkRlc3Ryb3koKXt0aGlzLl9xdWVyeT8udW5zdWJzY3JpYmUoKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkocnQoVW8pLHJ0KGIxKSxydChwbCkscnQoUnMpLHJ0'@;
put 'KExkKSxydCh5MSkscnQoUHUpLHJ0KExhKSxydCh0dSkscnQoVWwpKX0sbC5cdTAyNzVjbXA9a3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siYXBwLXZpZXdib3hlcyJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxmKXtpZigxJmEmJihObyhKRXQsNSksTm8oUUV0LDUpKSwyJmEpe2xldCBkO3VpKGQ9'@;
put 'Y2koKSkmJihmLnJlc2l6ZUJveFF1ZXJ5PWQpLHVpKGQ9Y2koKSkmJihmLmRyYWdIYW5kbGVDb3JuZXJRdWVyeT1kKX19LGlucHV0czp7dmlld2JveE1vZGFsOiJ2aWV3Ym94TW9kYWwifSxvdXRwdXRzOnt2aWV3Ym94TW9kYWxDaGFuZ2U6InZpZXdib3hNb2RhbENoYW5nZSJ9LGRlY2xzOjU2'@;
put 'LHZhcnM6MjMsY29uc3RzOltbImFwcERyYWdOZHJvcCIsIiIsMSwicm9vdC1tb2RhbCIsInBvc2l0aW9uLXJlbGF0aXZlIiwzLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbENsb3NhYmxlIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxPcGVuQ2hhbmdlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWyJj'@;
put 'bGFzcyIsImxpY2VuY2Utbm90aWNlIiw0LCJuZ0lmIl0sWzEsIm1vZGFsLWJvZHkiLCJkLWZsZXgiXSxbMSwiYWRkLW5ldyIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiJdLFsxLCJtdC0wLWkiXSxbMSwidy0xMDAiXSxbImNsYXNzIiwibXktMTAtbXgtYXV0byB0ZXh0LWNlbnRlciIsNCwi'@;
put 'bmdJZiJdLFsiY2xhc3MiLCJtLTAgdmlld2JveC1saW1pdC1ub3RpY2UiLDQsIm5nSWYiXSxbMywibGlicmFyeUxpc3QiLCJsaWJyYXJ5T25DbGlja0VtaXR0ZXIiLCJ0YWJsZU9uQ2xpY2tFbWl0dGVyIiw0LCJuZ0lmIl0sWzEsImN1cnJlbnRseS1vcGVuIl0sWzEsImQtZmxleCIsImNsci1q'@;
put 'dXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiJdLFsicm9sZSIsInRvb2x0aXAiLCJhcmlhLWhhc3BvcHVwIiwidHJ1ZSIsMSwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwibWwtMyIsMywiY2xpY2siXSxbInNoYXBlIiwiZ3JpZC12aWV3Iiwic2l6ZSIsIjE5Il0s'@;
put 'WzEsInRvb2x0aXAtY29udGVudCJdLFsic2hhcGUiLCJtaW51cyIsInNpemUiLCIxOSJdLFsic2hhcGUiLCJ3aW5kb3ctcmVzdG9yZSIsInNpemUiLCIxOSJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciB3LTEwMCBtLTAiLDQsIm5nSWYiXSxbImNsYXNzIiwib3Blbi12aWV3Ym94IGQtZmxleCBj'@;
put 'bHItanVzdGlmeS1jb250ZW50LWJldHdlZW4gY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsMywic2VsZWN0ZWQiLCJjbGljayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJtdC0x'@;
put 'MCJdLFsxLCJtLTAiXSxbImNsYXNzIiwiY29uZmlndXJhdGlvbi13cmFwcGVyIiwiY2RrRHJvcExpc3RHcm91cCIsIiIsNCwibmdWYXIiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbMSwidmll'@;
put 'd2JveGVzLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJ2aWV3Ym94IiwiY2RrRHJhZ0JvdW5kYXJ5IiwiLnZpZXdib3hlcy1jb250YWluZXIiLCJjZGtEcmFnIiwiIiwidGFiaW5kZXgiLCIwIiwzLCJmb2N1c2VkIiwiZGlzcGxheSIsIndpZHRoIiwiaGVpZ2h0IiwicG9pbnRlci1ldmVudHMiLCJi'@;
put 'b3gtc2hhZG93IiwiY2RrRHJhZ0ZyZWVEcmFnUG9zaXRpb24iLCJpZCIsIm1vdXNlZG93biIsImNka0RyYWdFbmRlZCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImZpbHRlci1tb2RhbCIsMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSIsImNsck1v'@;
put 'ZGFsT3BlbkNoYW5nZSJdLFsxLCJtb2RhbC10aXRsZSIsImNlbnRlciIsInRleHQtY2VudGVyIiwiY29sb3ItZGFya2VyLWdyYXkiXSxbMSwibW9kYWwtYm9keSJdLFszLCJ2aWV3Ym94SWQiLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwz'@;
put 'LCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xyTG9hZGluZyIsImNsaWNrIl0sWzEsImxpY2VuY2Utbm90aWNlIl0sWzEsIm15LTEwLW14LWF1dG8iLCJ0ZXh0LWNlbnRlciJdLFsiY2xyTWVkaXVtIiwiIl0sWzEs'@;
put 'Im0tMCIsInZpZXdib3gtbGltaXQtbm90aWNlIl0sWzMsImxpYnJhcnlMaXN0IiwibGlicmFyeU9uQ2xpY2tFbWl0dGVyIiwidGFibGVPbkNsaWNrRW1pdHRlciJdLFsxLCJ0ZXh0LWNlbnRlciIsInctMTAwIiwibS0wIl0sWzEsIm9wZW4tdmlld2JveCIsImQtZmxleCIsImNsci1qdXN0aWZ5'@;
put 'LWNvbnRlbnQtYmV0d2VlbiIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLDMsImNsaWNrIl0sWzEsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbImNsclNtYWxsIiwiIiwiY2xhc3MiLCJtbC0zIiw0LCJuZ0lmIl0sWyJyb2xlIiwidG9vbHRpcCIsImFyaWEtaGFzcG9wdXAi'@;
put 'LCJ0cnVlIiwxLCJ0b29sdGlwIiwidG9vbHRpcC1tZCIsInRvb2x0aXAtYm90dG9tLWxlZnQiLDMsImNsaWNrIl0sWyJzaGFwZSIsImN1cnNvci1tb3ZlIiwic2l6ZSIsIjEzIl0sWyJyb2xlIiwidG9vbHRpcCIsImFyaWEtaGFzcG9wdXAiLCJ0cnVlIiwiY2xhc3MiLCJ0b29sdGlwIHRvb2x0'@;
put 'aXAtbWQgdG9vbHRpcC1ib3R0b20tbGVmdCBtbC0zIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsInNpemUiLCIxOSJdLFsiY2xyU21hbGwiLCIiLDEsIm1sLTMiXSxbImNka0Ryb3BMaXN0R3JvdXAiLCIiLDEsImNvbmZpZ3VyYXRpb24td3JhcHBlciJdLFs0LCJuZ0lm'@;
put 'Il0sWzEsImNvbHMtc2VhcmNoIl0sWyJ0eXBlIiwidGV4dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsImF1dG9mb2N1cyIsIiIsInBsYWNlaG9sZGVyIiwiU2VhcmNoIGNvbHVtbnMiLCJ0YWJpbmRleCIsIjAiLDMsImlucHV0SWQiLCJlbWl0T25seVNlbGVjdGVkIiwidmFsdWVDaGFuZ2UiXSxb'@;
put 'ImlucHV0IiwiIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2RrRHJvcExpc3QiLCIiLDEsImNvbHMtbGlzdCIsMywiY2RrRHJvcExpc3REYXRhIiwiY2RrRHJvcExpc3REcm9wcGVkIl0sWyJjZGtEcmFnIiwiIiwzLCJjbGFzcyIsImN1cnNvci1kZWZhdWx0LWkiLCJwcmltYXJ5S2V5SGVh'@;
put 'ZGVyU3R5bGUiLCJjZGtEcmFnRGF0YSIsImNka0RyYWdEaXNhYmxlZCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjZGtEcmFnIiwiIiwzLCJjZGtEcmFnRGF0YSIsImNka0RyYWdEaXNhYmxlZCJdLFsic2hhcGUiLCJrZXkiLDQsIm5nSWYiXSxbInNoYXBlIiwidHJhc2giLCJjbGFzcyIsImN1'@;
put 'cnNvci1wb2ludGVyIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJrZXkiXSxbInNoYXBlIiwidHJhc2giLDEsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsiY2RrRHJhZ0JvdW5kYXJ5IiwiLnZpZXdib3hlcy1jb250YWluZXIiLCJjZGtEcmFnIiwiIiwidGFiaW5kZXgiLCIw'@;
put 'IiwxLCJ2aWV3Ym94IiwzLCJjZGtEcmFnRnJlZURyYWdQb3NpdGlvbiIsImlkIiwibW91c2Vkb3duIiwiY2RrRHJhZ0VuZGVkIl0sWyJyZXNpemVCb3giLCIiXSxbImNka0RyYWdIYW5kbGUiLCIiLDEsImRyYWctaGFuZGxlIiwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVu'@;
put 'IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJ0YWJsZS10aXRsZSJdLFsxLCJhY3Rpb25zIl0sWyJzaGFwZSIsImFuZ2xlIHRvcCIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwiYW5nbGUgZG93biIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwibWludXMiLDMsImNs'@;
put 'aWNrIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFsiY2RrRHJhZyIsIiIsMSwiZHJhZ0hhbmRsZSIsImNvcm5lciIsMywiaWQiLCJjZGtEcmFnTW92ZWQiXSxbImRyYWdIYW5kbGVDb3JuZXIiLCIiXSxbImNsckZvcm0iLCIiLDEsImQtZmxleCIsImFsaWduLWl0ZW1zLWNlbnRlciIs'@;
put 'ImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsImNsci1mbGV4LXdyYXAiLCJ0YWJsZS1zZWFyY2gtd3JhcHBlciJdLFsxLCJkLWZsZXgiLCJhbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItZmxleC13cmFwIl0sWzEsImlucHV0LXdyYXBwZXIiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xk'@;
put 'ZXIiLCJTZWFyY2giLCJuYW1lIiwic2VhcmNoLWlucHV0IiwzLCJ0eXBlIiwia2V5dXAuZW50ZXIiXSxbInNlYXJjaEVsIiwiIl0sWyJzaGFwZSIsInNlYXJjaCIsMywiY2xpY2siLDQsIm5nSWYiXSxbImNsYXNzIiwic3Bpbm5lciBzcGlubmVyLWlubGluZSIsNCwibmdJZiJdLFsidHlwZSIs'@;
put 'ImNoZWNrYm94IiwiY2xyQ2hlY2tib3giLCIiLCJuYW1lIiwibnVtZXJpY19jaGVjayIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXSxbImNsYXNzIiwic3Bpbm5lciBzcGlubmVyLXNtIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInJlZnJlc2giLCJjbGFzcyIsImNsaWNrLWljb24iLDMsImNs'@;
put 'aWNrIiw0LCJuZ0lmIl0sWyJyb2xlIiwidG9vbHRpcCIsImFyaWEtaGFzcG9wdXAiLCJ0cnVlIiwxLCJ0b29sdGlwIiwidG9vbHRpcC1sZyIsInRvb2x0aXAtYm90dG9tLWxlZnQiLCJtbC01IiwzLCJjbGljayJdLFsic2hhcGUiLCJmaWx0ZXIiLDEsImNsaWNrLWljb24iXSxbMSwidG9vbHRp'@;
put 'cC1jb250ZW50IiwidG9vbHRpcC1sb25nIl0sWyJzaGFwZSIsInBlbmNpbCIsMSwiY2xpY2staWNvbiIsIm1sLTUiLDMsImNsaWNrIl0sWyJjbGFzcyIsImNvbnRlbnQiLDMsImRpc3BsYXkiLDQsIm5nVmFyIl0sWyJzaGFwZSIsImFuZ2xlIHRvcCIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5n'@;
put 'bGUgZG93biIsMywiY2xpY2siXSxbInNoYXBlIiwic2VhcmNoIiwzLCJjbGljayJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1pbmxpbmUiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItc20iXSxbInNoYXBlIiwicmVmcmVzaCIsMSwiY2xpY2staWNvbiIsMywiY2xpY2siXSxbMSwiY29udGVudCJd'@;
put 'LFsiY2xhc3MiLCJob3Qtc3Bpbm5lciBteS0xMC1teC1hdXRvIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJpZCIsImhvdFRhYmxlIiwic3RyZXRjaEgiLCJhbGwiLDMsImhvdElkIiwicmVhZE9ubHkiLCJtb2RpZnlDb2xXaWR0aCIsImNvcHlQYXN0ZSIsImNvbnRleHRNZW51IiwibXVsdGlD'@;
put 'b2x1bW5Tb3J0aW5nIiwidmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQiLCJkYXRhIiwiY29sSGVhZGVycyIsImNvbHVtbnMiLCJmaWx0ZXJzIiwiZHJvcGRvd25NZW51IiwiaGVpZ2h0IiwiY2VsbHMiLCJtYXhSb3dzIiwibWFudWFsQ29sdW1uUmVzaXplIiwibGljZW5zZUtleSIsNCwibmdJ'@;
put 'ZiJdLFsxLCJob3Qtc3Bpbm5lciIsIm15LTEwLW14LWF1dG8iLCJ0ZXh0LWNlbnRlciJdLFsiaWQiLCJob3RUYWJsZSIsInN0cmV0Y2hIIiwiYWxsIiwzLCJob3RJZCIsInJlYWRPbmx5IiwibW9kaWZ5Q29sV2lkdGgiLCJjb3B5UGFzdGUiLCJjb250ZXh0TWVudSIsIm11bHRpQ29sdW1uU29y'@;
put 'dGluZyIsInZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0IiwiZGF0YSIsImNvbEhlYWRlcnMiLCJjb2x1bW5zIiwiZmlsdGVycyIsImRyb3Bkb3duTWVudSIsImhlaWdodCIsImNlbGxzIiwibWF4Um93cyIsIm1hbnVhbENvbHVtblJlc2l6ZSIsImxpY2Vuc2VLZXkiXSxbMywidmlld2JveElk'@;
put 'Il0sWyJxdWVyeUZpbHRlciIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGYpezEmYSYmKHllKDAsImNsci1tb2RhbCIsMCksRXQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIGYuY2xyTW9kYWxPcGVuQ2hhbmdlKGgpfSkseWUoMSwiaDMiLDEpLFllKDIsIiBWaWV3'@;
put 'Ym94ZXMgIiksdHQoMyxleHQsMiwyLCJzcGFuIiwyKSxDZSgpLHllKDQsImRpdiIsMykoNSwiZGl2Iiw0KSg2LCJwIiw1KSxZZSg3LCJBZGQgbmV3IiksQ2UoKSx0big4LCJociIsNiksdHQoOSx0eHQsMiwwLCJkaXYiLDcpLHR0KDEwLG54dCwyLDAsInAiLDgpLHR0KDExLHJ4dCwxLDEsImRj'@;
put 'LXRyZWUiLDkpLENlKCkseWUoMTIsImRpdiIsMTApKDEzLCJkaXYiLDExKSgxNCwicCIsNSksWWUoMTUsIkN1cnJlbnRseSBvcGVuIiksQ2UoKSx5ZSgxNiwiZGl2IikoMTcsImEiLDEyKSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGYuc25hcFRvR3JpZCgpfSksdG4oMTgsImNsci1p'@;
put 'Y29uIiwxMykseWUoMTksInNwYW4iLDE0KSxZZSgyMCwiU25hcCB2aWV3Ym94ZXMgdG8gZ3JpZCIpLENlKCkoKSx5ZSgyMSwiYSIsMTIpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZi5taW5pbWl6ZUFsbCgpfSksdG4oMjIsImNsci1pY29uIiwxNSkseWUoMjMsInNwYW4iLDE0KSxZ'@;
put 'ZSgyNCwiTWluaW1pemUgYWxsIHZpZXdib3hlcyIpLENlKCkoKSx5ZSgyNSwiYSIsMTIpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZi5yZXN0b3JlQWxsKCl9KSx0bigyNiwiY2xyLWljb24iLDE2KSx5ZSgyNywic3BhbiIsMTQpLFllKDI4LCJSZXN0b3JlIGFsbCB2aWV3Ym94ZXMi'@;
put 'KSxDZSgpKCkoKSgpLHRuKDI5LCJociIpLHR0KDMwLGl4dCwyLDAsInAiLDE3KSx0dCgzMSxzeHQsMTUsMTAsImRpdiIsMTgpLHllKDMyLCJkaXYiLDE5KSgzMywicCIsMjApLFllKDM0KSxDZSgpKCksdG4oMzUsImhyIiksdHQoMzYsbXh0LDMsMiwiZGl2IiwyMSksQ2UoKSgpLHllKDM3LCJk'@;
put 'aXYiLDIyKSgzOCwiYnV0dG9uIiwyMyksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBmLnZpZXdib3hNb2RhbD0hMX0pLFllKDM5LCIgT2sgIiksQ2UoKSgpKCkseWUoNDAsImRpdiIsMjQpLHR0KDQxLEV4dCwzMywzNywiZGl2IiwyNSksQ2UoKSx5ZSg0MiwiY2xyLW1vZGFsIiwyNiks'@;
put 'RXQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIGYuZmlsdGVyPWh9KSx5ZSg0MywiaDMiLDI3KSxZZSg0NCwiIEZpbHRlciBmb3Igdmlld2JveCB0YWJsZTogIikseWUoNDUsInNwYW4iKSxZZSg0NiksQ2UoKSgpLHllKDQ3LCJkaXYiLDI4KSx0dCg0OCx4eHQsMiwx'@;
put 'LCJhcHAtcXVlcnkiLDI5KSxDZSgpLHllKDQ5LCJkaXYiLDIyKSg1MCwiYnV0dG9uIiwzMCksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBmLnJlc2V0RmlsdGVyKCl9KSxZZSg1MSwiIHJlc2V0IGZpbHRlciAiKSxDZSgpLHllKDUyLCJidXR0b24iLDIzKSxFdCgiY2xpY2siLGZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIGYuZmlsdGVyPSExfSksWWUoNTMsIiBDYW5jZWwgIiksQ2UoKSx5ZSg1NCwiYnV0dG9uIiwzMSksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBmLnNlbmRDbGF1c2UoKX0pLFllKDU1LCIgT2sgIiksQ2UoKSgpKCkpLDImYSYmKFJlKCJjbHJNb2RhbE9wZW4iLGYu'@;
put 'dmlld2JveE1vZGFsKSgiY2xyTW9kYWxDbG9zYWJsZSIsITApKCJjbHJNb2RhbFNpemUiLCJsZyIpLFNlKDMpLFJlKCJuZ0lmIixmLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0IT09Zi5JbmZpbml0eSksU2UoNiksUmUoIm5nSWYiLGYubGlicmFyaWVzTG9hZGluZyksU2UoMSks'@;
put 'UmUoIm5nSWYiLGYudmlld2JveExpbWl0UmVhY2hlZCksU2UoMSksUmUoIm5nSWYiLGYudmlld2JveE1vZGFsKSxTZSgxOSksUmUoIm5nSWYiLGYudmlld2JveGVzLmxlbmd0aDwxKSxTZSgxKSxSZSgibmdGb3JPZiIsZi52aWV3Ym94ZXMpLFNlKDMpLHdyKCIgQ29uZmlndXJhdGlvbiAoIixu'@;
put 'dWxsIT1mLnNlbGVjdGVkVmlld2JveFRhYmxlJiZmLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hMaWJEYXRhc2V0PyIjIisobnVsbD09Zi5zZWxlY3RlZFZpZXdib3hUYWJsZT9udWxsOmYuc2VsZWN0ZWRWaWV3Ym94VGFibGUudmlld2JveElkKSsiICIrKG51bGw9PWYuc2VsZWN0ZWRW'@;
put 'aWV3Ym94VGFibGU/bnVsbDpmLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hMaWJEYXRhc2V0KToic2VsZWN0IHZpZXdib3ggZnJvbSBhYm92ZSIsIikgIiksU2UoMiksUmUoIm5nVmFyIixuQygxOSxBeHQsbnVsbD09Zi5zZWxlY3RlZFZpZXdib3hUYWJsZXx8bnVsbD09Zi5zZWxlY3Rl'@;
put 'ZFZpZXdib3hUYWJsZS5ob3RUYWJsZT9udWxsOmYuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbixudWxsPT1mLnNlbGVjdGVkVmlld2JveFRhYmxlfHxudWxsPT1mLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlP251bGw6Zi5zZWxlY3RlZFZpZXdi'@;
put 'b3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZSxudWxsPT1mLnNlbGVjdGVkVmlld2JveFRhYmxlfHxudWxsPT1mLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlP251bGw6Zi5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5oZWFkZXJQa3MpKSxTZSg1KSxSZSgibmdG'@;
put 'b3JPZiIsZi52aWV3Ym94ZXMpLFNlKDEpLFJlKCJjbHJNb2RhbE9wZW4iLGYuZmlsdGVyKSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLFNlKDQpLCR1KCIgIyIsbnVsbD09Zi5maWx0ZXJpbmdWaWV3Ym94P251bGw6Zi5maWx0ZXJpbmdWaWV3Ym94LmlkLCIg'@;
put 'IixmLmZpbHRlckxpYmRzLCIgIiksU2UoMiksUmUoIm5nSWYiLGYuZmlsdGVyKSxTZSg2KSxSZSgiY2xyTG9hZGluZyIsZi5maWx0ZXJMb2FkaW5nKSl9LGRlcGVuZGVuY2llczpbUmEsJGksUmwsTWMsa2MsSmMsSWgsZWwsdnNlLEIwLGw3LFYwLFJmLFJoLHA0LFMxLE0xLFIwLFdhLGg0LHph'@;
put 'LENkLEhKLGhMLF82ZSx2NmUsTTZlLHc2ZSxFNmUsWEV0LFI3LF9JXSxzdHlsZXM6WyIubGljZW5jZS1ub3RpY2VbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2Rpc3BsYXk6YmxvY2s7b3BhY2l0eTouNn1jbHItbW9kYWwucm9vdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV17'@;
put 'ei1pbmRleDoxMzAwfWNsci1tb2RhbC5yb290LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLm1vZGFsLWJvZHktd3JhcHBlcntoZWlnaHQ6Y2FsYygxMDAlIC0gNjBweCl9Y2xyLW1vZGFsLnJvb3QtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICAubW9kYWwtY29udGVudHtoZWln'@;
put 'aHQ6ODB2aH1jbHItbW9kYWwucm9vdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAubW9kYWwtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjB9Y2xyLW1vZGFsLnJvb3QtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLm1vZGFsLWJvZHlbX25nY29udGVudC0lQ09NUCVd'@;
put 'e21heC1oZWlnaHQ6MTAwJTtoZWlnaHQ6MTAwJX1kYy10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzphdXRvO2ZsZXg6MX0udG9vbHRpcC1sb25nW19uZ2NvbnRlbnQtJUNPTVAlXXt3b3JkLWJyZWFrOmJyZWFrLXdvcmR9LmFkZC1uZXdbX25nY29udGVudC0lQ09NUCVde3dpZHRo'@;
put 'OjUwJTtwYWRkaW5nLXJpZ2h0OjVweH0udmlld2JveC1saW1pdC1ub3RpY2VbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6Ljc7Y29sb3I6I2U3NGMzY30uY3VycmVudGx5LW9wZW5bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjUwJX0uY3VycmVudGx5LW9wZW5bX25nY29udGVudC0lQ09N'@;
put 'UCVdICAgLm9wZW4tdmlld2JveFtfbmdjb250ZW50LSVDT01QJV17Y3Vyc29yOnBvaW50ZXI7cGFkZGluZzozcHggNXB4fS5jdXJyZW50bHktb3Blbltfbmdjb250ZW50LSVDT01QJV0gICAub3Blbi12aWV3Ym94LnNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEo'@;
put 'NjAsMTMzLDAsLjE4MDM5MjE1NjkpfS5jdXJyZW50bHktb3Blbltfbmdjb250ZW50LSVDT01QJV0gICAub3Blbi12aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlcntiYWNrZ3JvdW5kOiNlOGU4ZTh9LnZpZXdib3hlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9u'@;
put 'OmZpeGVkO2luc2V0OjA7cG9pbnRlci1ldmVudHM6bm9uZTt6LWluZGV4Ojk5OX0udmlld2JveFtfbmdjb250ZW50LSVDT01QJV17bWluLXdpZHRoOjIwMHB4O21pbi1oZWlnaHQ6MjAwcHg7cG9zaXRpb246Zml4ZWQ7bGVmdDowO3RvcDowO3BvaW50ZXItZXZlbnRzOmFsbDtkaXNwbGF5OmZs'@;
put 'ZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6M3B4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjNweDtib3gtc2hhZG93OjAgMCAxMHB4IC0zcHggIzAwMH0udmlld2JveC5mb2N1c2VkW19uZ2NvbnRlbnQtJUNPTVAlXXt6LWluZGV4OjExMDA7b3V0bGlu'@;
put 'ZTpub25lfS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjMwMTk2MDc4NDMpO2JhY2tncm91bmQ6d2hpdGU7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTtmbGV4OjE7b3ZlcmZsb3cteDph'@;
put 'dXRvfS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcmFnLWhhbmRsZVtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTttaW4taGVpZ2h0OjIwcHg7YmFja2dyb3VuZC1jb2xvcjojM2M4NTAwO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6M3B4O2JvcmRlci10b3AtcmlnaHQtcmFk'@;
put 'aXVzOjNweDtjb2xvcjojZmZmO3BhZGRpbmc6MCA1cHg7cG9pbnRlci1ldmVudHM6YWxsfS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcmFnLWhhbmRsZVtfbmdjb250ZW50LSVDT01QJV0gICAudGFibGUtdGl0bGVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOnByZS13'@;
put 'cmFwO3dvcmQtYnJlYWs6YnJlYWstYWxsfS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcmFnLWhhbmRsZVtfbmdjb250ZW50LSVDT01QJV0gICAuYWN0aW9uc1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O21pbi13aWR0aDozNXB4fS52aWV3Ym94W19uZ2NvbnRlbnQt'@;
put 'JUNPTVAlXSAgIC5kcmFnLWhhbmRsZVtfbmdjb250ZW50LSVDT01QJV0gICAuYWN0aW9uc1tfbmdjb250ZW50LSVDT01QJV0gICBjbHItaWNvbltfbmdjb250ZW50LSVDT01QJV17Y3Vyc29yOnBvaW50ZXI7bWFyZ2luLWxlZnQ6NXB4fS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5k'@;
put 'cmFnLWhhbmRsZVtfbmdjb250ZW50LSVDT01QJV0gICAuYWN0aW9uc1tfbmdjb250ZW50LSVDT01QJV0gICBjbHItaWNvbltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7dHJhbnNmb3JtOnNjYWxlKDEuMyl9LnZpZXdib3hbX25nY29udGVudC0lQ09NUCVdICAgLmNsaWNrLWljb25bX25nY29u'@;
put 'dGVudC0lQ09NUCVde2N1cnNvcjpwb2ludGVyfS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGljay1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXTpob3Zlcnt0cmFuc2Zvcm06c2NhbGUoMS4zKX0udmlld2JveFtfbmdjb250ZW50LSVDT01QJV0gICAuZHJhZ0hhbmRsZVtfbmdjb250'@;
put 'ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGV9LnZpZXdib3hbX25nY29udGVudC0lQ09NUCVdICAgLmRyYWdIYW5kbGUuY29ybmVyW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxNXB4O2hlaWdodDoxNXB4O2N1cnNvcjpud3NlLXJlc2l6ZX0udmlld2JveFtfbmdjb250ZW50LSVDT01Q'@;
put 'JV0gICAuZHJhZ0hhbmRsZS5yaWdodFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MnB4O2hlaWdodDoxMDAlO2N1cnNvcjpldy1yZXNpemV9LnZpZXdib3hbX25nY29udGVudC0lQ09NUCVdICAgLmRyYWdIYW5kbGUuYm90dG9tW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MnB4O3dpZHRo'@;
put 'OjEwMCU7Y3Vyc29yOm5zLXJlc2l6ZX0uY29scy1zZWFyY2hbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7bWFyZ2luLXRvcDo1cHg7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4yNzg0MzEzNzI1KTtib3JkZXItcmFkaXVzOjNweH0uY29scy1saXN0W19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXXtib3JkZXI6c29saWQgMXB4ICNjY2M7bWluLWhlaWdodDo2MHB4O2JhY2tncm91bmQ6d2hpdGU7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7d2lkdGg6NDAwcHg7bWF4LXdpZHRoOjEwMCU7bWFyZ2luLXRvcDo1cHh9LmNvbC1ib3hbX25nY29u'@;
put 'dGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDEwcHg7Ym9yZGVyLWJvdHRvbTpzb2xpZCAxcHggI2NjYztjb2xvcjojMDAwMDAwZGU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Ym94LXNpemlu'@;
put 'Zzpib3JkZXItYm94O2N1cnNvcjptb3ZlO2JhY2tncm91bmQ6d2hpdGU7Zm9udC1zaXplOjE0cHh9LmNvbC1ib3guc2VhcmNoW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1c3tiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjEwMTk2MDc4NDMpfS5jb2wtYm94LnByaW1hcnlLZXlIZWFkZXJTdHlsZVtf'@;
put 'bmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDQ4LDEwNywwLC4xNDExNzY0NzA2KX0uY2RrLWRyYWctcHJldmlld1tfbmdjb250ZW50LSVDT01QJV17Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlci1yYWRpdXM6NHB4O2JveC1zaGFkb3c6MCA1cHggNXB4IC0zcHggIzAwMDMs'@;
put 'MCA4cHggMTBweCAxcHggIzAwMDAwMDI0LDAgM3B4IDE0cHggMnB4ICMwMDAwMDAxZjt6LWluZGV4OjEzMDAhaW1wb3J0YW50fS5jZGstZHJhZy1wbGFjZWhvbGRlcltfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstZHJhZy1hbmltYXRpbmdbX25nY29udGVudC0lQ09NUCVde3Ry'@;
put 'YW5zaXRpb246dHJhbnNmb3JtIC4yNXMgY3ViaWMtYmV6aWVyKDAsMCwuMiwxKX0uY29sLWJveFtfbmdjb250ZW50LSVDT01QJV06bGFzdC1jaGlsZHtib3JkZXI6bm9uZX0uY29scy1saXN0LmNkay1kcm9wLWxpc3QtZHJhZ2dpbmdbX25nY29udGVudC0lQ09NUCVdICAgLmNvbC1ib3hbX25n'@;
put 'Y29udGVudC0lQ09NUCVdOm5vdCguY2RrLWRyYWctcGxhY2Vob2xkZXIpe3RyYW5zaXRpb246dHJhbnNmb3JtIC4yNXMgY3ViaWMtYmV6aWVyKDAsMCwuMiwxKX0uZGlzYWJsZWRbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjU7dHJhbnNmb3JtOm5vbmUhaW1wb3J0YW50O3BvaW50ZXIt'@;
put 'ZXZlbnRzOm5vbmV9LmZpbHRlci1hY3RpdmVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiMwMDcyYTN9aG90LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmZpcnN0Q29sdW1uSGVhZGVyU3R5bGUgYnV0dG9uLmNoYW5nZVR5cGV7ZGlzcGxheTpub25lfWhvdC10YWJsZVtfbmdjb250'@;
put 'ZW50LSVDT01QJV0gICAgIC5oYW5kc29udGFibGUgdGJvZHkgdGguaHRfX2hpZ2hsaWdodC5wcmltYXJ5S2V5SGVhZGVyU3R5bGUsIGhvdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAgIC5oYW5kc29udGFibGUgdGhlYWQgdGguaHRfX2hpZ2hsaWdodC5wcmltYXJ5S2V5SGVhZGVyU3R5'@;
put 'bGV7YmFja2dyb3VuZDpyZ2JhKDQ4LDEwNywwLC42OTAxOTYwNzg0KX1ob3QtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgICAucHJpbWFyeUtleUhlYWRlclN0eWxle2JhY2tncm91bmQ6cmdiYSg0OCwxMDcsMCwuNDMxMzcyNTQ5KX1ob3QtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAg'@;
put 'ICB0aC5yZWFkb25seUNlbGwgZGl2e29wYWNpdHk6LjR9aG90LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgdGQucmVhZG9ubHlDZWxse29wYWNpdHk6LjV9Il19KSxsfSkoKSxUeHQ9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhKXt0aGlzLmZpbGVTZWxlY3RlZD1uZXcgeHIsdGhp'@;
put 'cy5lbGVtZW50PWF9aXNFbXB0eUFmdGVyU2VsZWN0aW9uKCl7cmV0dXJuISF0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5hdHRyaWJ1dGVzLm11bHRpcGxlfW9uQ2hhbmdlKCl7Y29uc3QgYT10aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5maWxlczt0aGlzLnVwbG9hZGVyPy5hZGRUb1F1'@;
put 'ZXVlKGEpLHRoaXMuZmlsZVNlbGVjdGVkLmVtaXQoYSksdGhpcy5pc0VtcHR5QWZ0ZXJTZWxlY3Rpb24oKSYmKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlPSIiKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkocnQoVmkpKX0sbC5cdTAy'@;
put 'NzVkaXI9U3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siIiwiYXBwRmlsZVNlbGVjdCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxmKXsxJmEmJkV0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGYub25DaGFuZ2UoKX0pfSxpbnB1dHM6e3VwbG9hZGVyOiJ1cGxvYWRlciJ9LG91dHB1'@;
put 'dHM6e2ZpbGVTZWxlY3RlZDoiZmlsZVNlbGVjdGVkIn19KSxsfSkoKTtmdW5jdGlvbiBPeHQobCxjKXsxJmwmJih5ZSgwLCJwIiw4KSxZZSgxLCIgTm8gZGF0YXNldCBtZXRhIHRvIHNob3cuICIpLENlKCkpfWZ1bmN0aW9uIER4dChsLGMpe2lmKDEmbCYmKHllKDAsImNsci1kZy1yb3ciKSgx'@;
put 'LCJjbHItZGctY2VsbCIpLFllKDIpLENlKCkseWUoMywiY2xyLWRnLWNlbGwiKSxZZSg0KSxDZSgpKCkpLDImbCl7Y29uc3QgYT1jLiRpbXBsaWNpdDtTZSgyKSxhcihhLk5BTUUpLFNlKDIpLGFyKGEuVkFMVUUpfX1mdW5jdGlvbiBJeHQobCxjKXtpZigxJmwmJih5ZSgwLCJjbHItdGFiLWNv'@;
put 'bnRlbnQiLDExKSgxLCJjbHItZGF0YWdyaWQiKSgyLCJjbHItZGctY29sdW1uIiksWWUoMywiTmFtZSIpLENlKCkseWUoNCwiY2xyLWRnLWNvbHVtbiIpLFllKDUsIlZhbHVlIiksQ2UoKSx0dCg2LER4dCw1LDIsImNsci1kZy1yb3ciLDUpLENlKCkoKSksMiZsKXtjb25zdCBhPUdlKCkuJGlt'@;
put 'cGxpY2l0O1NlKDYpLFJlKCJuZ0Zvck9mIixhLmRzbWV0YSl9fWZ1bmN0aW9uIFJ4dChsLGMpe2lmKDEmbCYmKHllKDAsImNsci10YWIiKSgxLCJidXR0b24iLDkpLFllKDIpLENlKCksdHQoMyxJeHQsNywxLCJjbHItdGFiLWNvbnRlbnQiLDEwKSxDZSgpKSwyJmwpe2NvbnN0IGE9Yy4kaW1w'@;
put 'bGljaXQsZj1jLmluZGV4O1NlKDIpLGFyKGEuZ3JvdXApLFNlKDEpLFJlKCJjbHJJZkFjdGl2ZSIsMD09PWYpfX1sZXQgVDZlPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoKXt0aGlzLm9wZW49ITEsdGhpcy5kc21ldGE9W10sdGhpcy5vcGVuQ2hhbmdlPW5ldyB4cix0aGlzLmRzbWV0YUdy'@;
put 'b3VwcGVkPVtdfW5nT25Jbml0KCl7fW5nT25DaGFuZ2VzKGEpe2EuZHNtZXRhPy5jdXJyZW50VmFsdWU/Lmxlbmd0aD4wJiZ0aGlzLnBhcnNlRFNNZXRhKCl9cGFyc2VEU01ldGEoKXt0aGlzLmRzbWV0YUdyb3VwcGVkPVtdO2ZvcihsZXQgYSBvZiB0aGlzLmRzbWV0YSl7bGV0IGY9dGhpcy5k'@;
put 'c21ldGFHcm91cHBlZC5maW5kSW5kZXgoZD0+ZC5ncm91cD09PWEuT0RTX1RBQkxFKTtmPDAmJihmPXRoaXMuZHNtZXRhR3JvdXBwZWQucHVzaCh7Z3JvdXA6YS5PRFNfVEFCTEUsZHNtZXRhOltdfSktMSksdGhpcy5kc21ldGFHcm91cHBlZFtmXS5kc21ldGEucHVzaChhKX19b25PcGVuQ2hh'@;
put 'bmdlKGEpe3RoaXMub3Blbj1hLHRoaXMub3BlbkNoYW5nZS5lbWl0KGEpfW9uQ2xvc2VDbGljaygpe3RoaXMub25PcGVuQ2hhbmdlKCExKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1Y21wPWtyKHt0eXBlOmwsc2VsZWN0b3JzOltb'@;
put 'ImFwcC1kYXRhc2V0LWluZm8iXV0saW5wdXRzOntvcGVuOiJvcGVuIixkc21ldGE6ImRzbWV0YSJ9LG91dHB1dHM6e29wZW5DaGFuZ2U6Im9wZW5DaGFuZ2UifSxmZWF0dXJlczpbYmxdLGRlY2xzOjEwLHZhcnM6NSxjb25zdHM6W1szLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiLCJj'@;
put 'bHJNb2RhbENsb3NhYmxlIiwiY2xyTW9kYWxPcGVuQ2hhbmdlIl0sWzEsIm1vZGFsLXRpdGxlIiwiY2VudGVyIiwidGV4dC1jZW50ZXIiLCJjb2xvci1kYXJrZXItZ3JheSJdLFsxLCJtb2RhbC1ib2R5Il0sWyJjbGFzcyIsInRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbHJMYXlvdXQiLCJ2'@;
put 'ZXJ0aWNhbCJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4taW5mby1vdXRsaW5lIiwzLCJjbGljayJdLFsxLCJ0ZXh0LWNlbnRlciJdLFsiY2xyVGFiTGluayIsIiIsImlkIiwibGluazEiXSxb'@;
put 'ImlkIiwiY29udGVudDEiLCJjbGFzcyIsImQtZmxleCBjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciB3LTEwMCIsNCwiY2xySWZBY3RpdmUiXSxbImlkIiwiY29udGVudDEiLDEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwidy0xMDAiXV0sdGVtcGxhdGU6ZnVuY3Rp'@;
put 'b24oYSxmKXsxJmEmJih5ZSgwLCJjbHItbW9kYWwiLDApLEV0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBmLm9uT3BlbkNoYW5nZShoKX0pLHllKDEsImgzIiwxKSxZZSgyLCJEYXRhc2V0IE1ldGEiKSxDZSgpLHllKDMsImRpdiIsMiksdHQoNCxPeHQsMiwwLCJw'@;
put 'IiwzKSx5ZSg1LCJjbHItdGFicyIsNCksdHQoNixSeHQsNCwyLCJjbHItdGFiIiw1KSxDZSgpKCkseWUoNywiZGl2Iiw2KSg4LCJidXR0b24iLDcpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZi5vbkNsb3NlQ2xpY2soKX0pLFllKDksIiBDbG9zZSAiKSxDZSgpKCkoKSksMiZhJiYo'@;
put 'UmUoImNsck1vZGFsT3BlbiIsZi5vcGVuKSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITApLFNlKDQpLFJlKCJuZ0lmIixmLmRzbWV0YUdyb3VwcGVkLmxlbmd0aDwxKSxTZSgyKSxSZSgibmdGb3JPZiIsZi5kc21ldGFHcm91cHBlZCkpfSxkZXBlbmRlbmNpZXM6'@;
put 'W1JhLCRpLFM3LHc0LEpnLFFnLGU1LHQ1LGs3LG41LHY3LGI0LGI3LE1jLGtjLHVTLHU1LGY1LFQ3LGM1LGw1LEE3XSxzdHlsZXM6WyIubW9kYWwtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBjbHItdGFic1tfbmdjb250ZW50LSVDT01QJV17bWF4LWhlaWdodDo3MHZofS5tb2RhbC1ib2R5'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLnRhYi1jb250ZW50e3dpZHRoOjEwMCU7b3ZlcmZsb3c6YXV0b30ubW9kYWwtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICAgIC50YWItY29udGVudCAuZGF0YWdyaWQtb3V0ZXItd3JhcHBlcnt3aWR0aDoxMDAlfSJdfSksbH0pKCk7ZnVuY3Rpb24g'@;
put 'THh0KGwsYyl7aWYoMSZsJiYoeWUoMCwic3BhbiIsMTMpLFllKDEpLENlKCkpLDImbCl7Y29uc3QgYT1HZSgyKTtTZSgxKSxhcihhLmdlbmVyYXRlZFJlY29yZFVybCl9fWZ1bmN0aW9uIFB4dChsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImJ1dHRvbiIsMTQpLEV0KCJjbGljayIs'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gVXQoYSksWnQoR2UoMikuZ2VuZXJhdGVFZGl0UmVjb3JkVXJsKCkpfSksWWUoMSksQ2UoKX1pZigyJmwpe2NvbnN0IGE9R2UoMik7UmUoImRpc2FibGVkIixhLmdlbmVyYXRlRWRpdFJlY29yZFVybExvYWRpbmcpLFNlKDEpLHdyKCIgIixhLmdlbmVyYXRlZFJl'@;
put 'Y29yZFVybD8iY29weSB0byBjbGlwYm9hcmQiOmEuZ2VuZXJhdGVFZGl0UmVjb3JkVXJsTG9hZGluZz8iR2VuZXJhdGluZyB1cmwuLi4iOiJMaW5rIHRvIHRoaXMgcmVjb3JkIiwiICIpfX1mdW5jdGlvbiBGeHQobCxjKXtpZigxJmwmJihXcigwKSx0dCgxLEx4dCwyLDEsInNwYW4iLDExKSx0'@;
put 'dCgyLFB4dCwyLDIsImJ1dHRvbiIsMTIpLEdyKCkpLDImbCl7Y29uc3QgYT1HZSgpO1NlKDEpLFJlKCJuZ0lmIiwhKG51bGwhPWEuY3VycmVudFJlY29yZCYmYS5jdXJyZW50UmVjb3JkLm5vTGlua09wdGlvbikpLFNlKDEpLFJlKCJuZ0lmIiwhKG51bGwhPWEuY3VycmVudFJlY29yZCYmYS5j'@;
put 'dXJyZW50UmVjb3JkLm5vTGlua09wdGlvbikpfX1mdW5jdGlvbiBIeHQobCxjKXsxJmwmJih5ZSgwLCJkaXYiLDE1KSgxLCJzcGFuIiwxNiksWWUoMiwiIExvYWRpbmcuLi4gIiksQ2UoKSgpKX1mdW5jdGlvbiBOeHQobCxjKXsxJmwmJnRuKDAsImNsci1pY29uIiwyOSl9ZnVuY3Rpb24gVnh0'@;
put 'KGwsYyl7MSZsJiYoeWUoMCwic3BhbiIsMzApLFllKDEsIiBMb2FkaW5nLi4uICIpLENlKCkpfWZ1bmN0aW9uIEJ4dChsLGMpezEmbCYmdG4oMCwiY2xyLWljb24iLDMxKX1mdW5jdGlvbiBqeHQobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJjbHItaW5wdXQtY29udGFpbmVyIiwz'@;
put 'MykoMSwiaW5wdXQiLDM0KSxFdCgiZm9jdXNpbiIsZnVuY3Rpb24oZCl7VXQoYSk7Y29uc3QgaD1HZSgzKS5pbmRleDtyZXR1cm4gWnQoR2UoMikub25SZWNvcmRJbnB1dEZvY3VzKGQsaCkpfSkoInBhc3RlIixmdW5jdGlvbihkKXtyZXR1cm4gVXQoYSksWnQoR2UoNSkucmVjb3JkSW5wdXRQ'@;
put 'YXN0ZShkKSl9KSgiaW5wdXQiLGZ1bmN0aW9uKGQpe1V0KGEpO2NvbnN0IGg9R2UoMykuJGltcGxpY2l0LG09R2UoMik7cmV0dXJuIG0ucmVjb3JkSW5wdXRDaGFuZ2UoZCxoLmtleSksWnQobS5jdXJyZW50UmVjb3JkLm5vTGlua09wdGlvbj0hMCl9KSgibmdNb2RlbENoYW5nZSIsZnVuY3Rp'@;
put 'b24oZCl7VXQoYSk7Y29uc3QgaD1HZSgzKS4kaW1wbGljaXQ7cmV0dXJuIFp0KEdlKDIpLmN1cnJlbnRSZWNvcmRbaC5rZXldPWQpfSksQ2UoKSgpfWlmKDImbCl7Y29uc3QgYT1HZSgzKS4kaW1wbGljaXQsZj1HZSgyKTtncigiaW52YWxpZC1kYXRhIixmLmN1cnJlbnRSZWNvcmRJbnZhbGlk'@;
put 'Q29scy5pbmNsdWRlcyhhLmtleSkpLFNlKDEpLFJlKCJuZ01vZGVsIixmLmN1cnJlbnRSZWNvcmRbYS5rZXldKX19ZnVuY3Rpb24genh0KGwsYyl7MSZsJiZlcygwKX1jb25zdCBOSj1mdW5jdGlvbihsLGMpe3JldHVybntjb2w6bCxjb2xJbmRleDpjfX07ZnVuY3Rpb24gVXh0KGwsYyl7aWYo'@;
put 'MSZsJiYoeWUoMCwiZGl2IiksdHQoMSx6eHQsMSwwLCJuZy1jb250YWluZXIiLDM1KSxDZSgpKSwyJmwpe2NvbnN0IGE9R2UoMyksZj1hLiRpbXBsaWNpdCxkPWEuaW5kZXg7R2UoMik7Y29uc3QgaD1RaSgxNik7U2UoMSksUmUoIm5nVGVtcGxhdGVPdXRsZXQiLGgpKCJuZ1RlbXBsYXRlT3V0'@;
put 'bGV0Q29udGV4dCIsd2goMixOSixmLGQpKX19Y29uc3QgWnh0PWZ1bmN0aW9uKCl7cmV0dXJuWyJudW1lcmljIix2b2lkIDBdfSxPNmU9ZnVuY3Rpb24oKXtyZXR1cm5bImF1dG9jb21wbGV0ZSJdfTtmdW5jdGlvbiBZeHQobCxjKXtpZigxJmwmJihXcigwKSx0dCgxLGp4dCwyLDMsImNsci1p'@;
put 'bnB1dC1jb250YWluZXIiLDMyKSx0dCgyLFV4dCwyLDUsImRpdiIsMiksR3IoKSksMiZsKXtjb25zdCBhPUdlKDIpLiRpbXBsaWNpdCxmPUdlKDIpO2xldCBkLGg7U2UoMSksUmUoIm5nSWYiLFhhKDIsWnh0KS5pbmNsdWRlcyhudWxsPT1mLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9'@;
put 'PShkPWYuY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGEua2V5KSk/bnVsbDpkLmVkaXRvcikpLFNlKDEpLFJlKCJuZ0lmIixYYSgzLE82ZSkuaW5jbHVkZXMobnVsbD09Zi5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oaD1mLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0'@;
put 'UnVsZShhLmtleSkpP251bGw6aC5lZGl0b3IpKX19ZnVuY3Rpb24gV3h0KGwsYyl7aWYoMSZsKXtjb25zdCBhPVpuKCk7eWUoMCwiY2xyLXRleHRhcmVhLWNvbnRhaW5lciIpKDEsInRleHRhcmVhIiwzNiwzNyksRXQoImZvY3VzaW4iLGZ1bmN0aW9uKGQpe1V0KGEpO2NvbnN0IGg9R2UoMyku'@;
put 'aW5kZXg7cmV0dXJuIFp0KEdlKDIpLm9uUmVjb3JkSW5wdXRGb2N1cyhkLGgpKX0pKCJwYXN0ZSIsZnVuY3Rpb24oZCl7cmV0dXJuIFV0KGEpLFp0KEdlKDUpLnJlY29yZElucHV0UGFzdGUoZCkpfSkoImlucHV0IixmdW5jdGlvbihkKXtVdChhKTtjb25zdCBoPUdlKDMpLiRpbXBsaWNpdDty'@;
put 'ZXR1cm4gWnQoR2UoMikucmVjb3JkSW5wdXRDaGFuZ2UoZCxoLmtleSkpfSkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGQpe1V0KGEpO2NvbnN0IGg9R2UoMykuJGltcGxpY2l0O3JldHVybiBadChHZSgyKS5jdXJyZW50UmVjb3JkW2gua2V5XT1kKX0pLFllKDMsIiAgICAgICAgICAgICAg'@;
put 'ICAgICIpLENlKCkseWUoNCwiY2xyLWNvbnRyb2wtaGVscGVyIiksWWUoNSksQ2UoKSgpfWlmKDImbCl7Y29uc3QgYT1RaSgyKSxmPUdlKDMpLiRpbXBsaWNpdCxkPUdlKDIpO2xldCBoLG0sXztTZSgxKSxncigiaW52YWxpZC1kYXRhIixkLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5pbmNs'@;
put 'dWRlcyhmLmtleSkpKCJub3QtY2hhciIsbnVsbD09ZC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oaD1kLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShmLmtleSkpP251bGw6aC50eXBlKSxSZSgicm93cyIsZi52YWx1ZS5sZW5ndGg+ODA/NjoxKSgibmdNb2RlbCIsZC5j'@;
put 'dXJyZW50UmVjb3JkW2Yua2V5XSkoIm1heExlbmd0aCIsbnVsbD09ZC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0obT1kLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShmLmtleSkpP251bGw6bS5sZW5ndGgpLFNlKDQpLCR1KCIiLGEudmFsdWUubGVuZ3RoLCIgLyAiLG51'@;
put 'bGw9PWQuY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KF89ZC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoZi5rZXkpKT9udWxsOl8ubGVuZ3RoLCIiKX19ZnVuY3Rpb24gR3h0KGwsYyl7MSZsJiZlcygwKX1mdW5jdGlvbiAkeHQobCxjKXtpZigxJmwmJih5ZSgwLCJkaXYi'@;
put 'KSx0dCgxLEd4dCwxLDAsIm5nLWNvbnRhaW5lciIsMzUpLENlKCkpLDImbCl7Y29uc3QgYT1HZSgzKSxmPWEuJGltcGxpY2l0LGQ9YS5pbmRleDtHZSgyKTtjb25zdCBoPVFpKDE2KTtTZSgxKSxSZSgibmdUZW1wbGF0ZU91dGxldCIsaCkoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0Iix3aCgy'@;
put 'LE5KLGYsZCkpfX1jb25zdCBLeHQ9ZnVuY3Rpb24oKXtyZXR1cm5bdm9pZCAwXX07ZnVuY3Rpb24gcXh0KGwsYyl7aWYoMSZsJiYoV3IoMCksdHQoMSxXeHQsNiw5LCJjbHItdGV4dGFyZWEtY29udGFpbmVyIiwyKSx0dCgyLCR4dCwyLDUsImRpdiIsMiksR3IoKSksMiZsKXtjb25zdCBhPUdl'@;
put 'KDIpLiRpbXBsaWNpdCxmPUdlKDIpO2xldCBkLGg7U2UoMSksUmUoIm5nSWYiLFhhKDIsS3h0KS5pbmNsdWRlcyhudWxsPT1mLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShkPWYuY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGEua2V5KSk/bnVsbDpkLmVkaXRvcikpLFNl'@;
put 'KDEpLFJlKCJuZ0lmIixYYSgzLE82ZSkuaW5jbHVkZXMobnVsbD09Zi5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oaD1mLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShhLmtleSkpP251bGw6aC5lZGl0b3IpKX19ZnVuY3Rpb24gWHh0KGwsYyl7aWYoMSZsKXtjb25zdCBh'@;
put 'PVpuKCk7eWUoMCwiY2xyLXRleHRhcmVhLWNvbnRhaW5lciIsMzgpKDEsInRleHRhcmVhIiwzOSksRXQoInBhc3RlIixmdW5jdGlvbihkKXtyZXR1cm4gVXQoYSksWnQoR2UoNCkucmVjb3JkSW5wdXRQYXN0ZShkKSl9KSgiaW5wdXQiLGZ1bmN0aW9uKGQpe1V0KGEpO2NvbnN0IGg9R2UoMiku'@;
put 'JGltcGxpY2l0O3JldHVybiBadChHZSgyKS5yZWNvcmRJbnB1dENoYW5nZShkLGgua2V5KSl9KSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oZCl7VXQoYSk7Y29uc3QgaD1HZSgyKS4kaW1wbGljaXQ7cmV0dXJuIFp0KEdlKDIpLmN1cnJlbnRSZWNvcmRbaC5rZXldPWQpfSksQ2UoKSx5ZSgy'@;
put 'LCJjbHItY29udHJvbC1oZWxwZXIiKSxZZSgzLCJISDptbTpzcyIpLENlKCkoKX1pZigyJmwpe2NvbnN0IGE9R2UoMikuJGltcGxpY2l0LGY9R2UoMik7bGV0IGQ7U2UoMSksZ3IoImludmFsaWQtZGF0YSIsZi5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMuaW5jbHVkZXMoYS5rZXkpKSgibm90'@;
put 'LWNoYXIiLG51bGw9PWYuY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGQ9Zi5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoYS5rZXkpKT9udWxsOmQudHlwZSksUmUoInJvd3MiLGEudmFsdWUubGVuZ3RoPjgwPzY6MSkoIm5nTW9kZWwiLGYuY3VycmVudFJlY29yZFthLmtl'@;
put 'eV0pfX1mdW5jdGlvbiBKeHQobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJkaXYiLDM4KSgxLCJ0ZXh0YXJlYSIsNDApLEV0KCJwYXN0ZSIsZnVuY3Rpb24oZCl7cmV0dXJuIFV0KGEpLFp0KEdlKDQpLnJlY29yZElucHV0UGFzdGUoZCkpfSkoImlucHV0IixmdW5jdGlvbihkKXtV'@;
put 'dChhKTtjb25zdCBoPUdlKDIpLiRpbXBsaWNpdDtyZXR1cm4gWnQoR2UoMikucmVjb3JkSW5wdXRDaGFuZ2UoZCxoLmtleSkpfSkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGQpe1V0KGEpO2NvbnN0IGg9R2UoMikuJGltcGxpY2l0O3JldHVybiBadChHZSgyKS5jdXJyZW50UmVjb3JkW2gu'@;
put 'a2V5XT1kKX0pLENlKCkseWUoMiwiY2xyLWRhdGUtY29udGFpbmVyIiw0MSkoMywiaW5wdXQiLDQyKSxFdCgiY2xyRGF0ZUNoYW5nZSIsZnVuY3Rpb24oZCl7VXQoYSk7Y29uc3QgaD1HZSgyKS4kaW1wbGljaXQ7cmV0dXJuIFp0KEdlKDIpLnJlY29yZERhdGVDaGFuZ2UoZCxoLmtleSkpfSks'@;
put 'Q2UoKSgpKCl9aWYoMiZsKXtjb25zdCBhPUdlKDIpLiRpbXBsaWNpdCxmPUdlKDIpO1NlKDEpLGdyKCJpbnZhbGlkLWRhdGEiLGYuY3VycmVudFJlY29yZEludmFsaWRDb2xzLmluY2x1ZGVzKGEua2V5KSksUmUoIm5nTW9kZWwiLGYuY3VycmVudFJlY29yZFthLmtleV0pfX1mdW5jdGlvbiBR'@;
put 'eHQobCxjKXsxJmwmJmVzKDApfWZ1bmN0aW9uIGVBdChsLGMpe2lmKDEmbCYmKHllKDAsImRpdiIpLHR0KDEsUXh0LDEsMCwibmctY29udGFpbmVyIiwzNSksQ2UoKSksMiZsKXtjb25zdCBhPUdlKDIpLGY9YS4kaW1wbGljaXQsZD1hLmluZGV4O0dlKDIpO2NvbnN0IGg9UWkoMTYpO1NlKDEp'@;
put 'LFJlKCJuZ1RlbXBsYXRlT3V0bGV0IixoKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLHdoKDIsTkosZixkKSl9fWZ1bmN0aW9uIHRBdChsLGMpe2lmKDEmbCYmKFdyKDApLHllKDEsImRpdiIsMTgpKDIsImRpdiIsMTkpKDMsInAiLDIwKSxZZSg0KSx0dCg1LE54dCwxLDAsImNsci1pY29u'@;
put 'IiwyMSksQ2UoKSx5ZSg2LCJwIiwyMiksWWUoNyksQ2UoKSgpLHllKDgsImRpdiIsMjMpLHR0KDksVnh0LDIsMCwic3BhbiIsMjQpLHR0KDEwLEJ4dCwxLDAsImNsci1pY29uIiwyNSksdHQoMTEsWXh0LDMsNCwibmctY29udGFpbmVyIiwyNiksdHQoMTIscXh0LDMsNCwibmctY29udGFpbmVy'@;
put 'IiwyNiksdHQoMTMsWHh0LDQsNiwiY2xyLXRleHRhcmVhLWNvbnRhaW5lciIsMjcpLHR0KDE0LEp4dCw0LDMsImRpdiIsMjcpLHR0KDE1LGVBdCwyLDUsImRpdiIsMjYpLENlKCkoKSx0bigxNiwiaHIiLDI4KSxHcigpKSwyJmwpe2NvbnN0IGE9R2UoKSxmPWEuJGltcGxpY2l0LGQ9YS5pbmRl'@;
put 'eCxoPUdlKDIpO2xldCBtLF87U2UoNCksd3IoIiAiLGYua2V5LCIgIiksU2UoMSksUmUoIm5nSWYiLGguaXNDb2xQayhmLmtleSkpLFNlKDIpLHdyKCIgIixudWxsPT1oLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShtPWguY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGYu'@;
put 'a2V5KSk/bnVsbDptLmRlc2MsIiAiKSxTZSgxKSxSZSgibmdTd2l0Y2giLG51bGw9PWguY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KF89aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoZi5rZXkpKT9udWxsOl8udHlwZSksU2UoMSksUmUoIm5nSWYiLGguY3VycmVudFJl'@;
put 'Y29yZExvYWRpbmdzLmluY2x1ZGVzKGQpKSxTZSgxKSxSZSgibmdJZiIsaC5jdXJyZW50UmVjb3JkRXJyb3JzLmluY2x1ZGVzKGQpKSxTZSgxKSxSZSgibmdTd2l0Y2hDYXNlIiwibnVtZXJpYyIpLFNlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLHZvaWQgMCksU2UoMSksUmUoIm5nU3dpdGNoQ2Fz'@;
put 'ZSIsInRpbWUiKSxTZSgxKSxSZSgibmdTd2l0Y2hDYXNlIiwiZGF0ZSIpLFNlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLCJhdXRvY29tcGxldGUiKX19ZnVuY3Rpb24gbkF0KGwsYyl7aWYoMSZsJiYoV3IoMCksdHQoMSx0QXQsMTcsMTEsIm5nLWNvbnRhaW5lciIsMiksR3IoKSksMiZsKXtjb25z'@;
put 'dCBhPWMuJGltcGxpY2l0O1NlKDEpLFJlKCJuZ0lmIiwiQWN0aW9uIiE9PWEua2V5JiYiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIiE9PWEua2V5JiYibm9MaW5rT3B0aW9uIiE9PWEua2V5KX19ZnVuY3Rpb24gckF0KGwsYyl7aWYoMSZsJiYoV3IoMCksdHQoMSxuQXQsMiwxLCJu'@;
put 'Zy1jb250YWluZXIiLDE3KSx3bCgyLCJrZXl2YWx1ZSIpLEdyKCkpLDImbCl7Y29uc3QgYT1HZSgpO1NlKDEpLFJlKCJuZ0Zvck9mIix3ZygyLDIsYS5jdXJyZW50UmVjb3JkLGEub3JpZ2luYWxPcmRlcikpKCJuZ0ZvclRyYWNrQnkiLGEudHJhY2tCeUZuKX19ZnVuY3Rpb24gaUF0KGwsYyl7'@;
put 'MSZsJiYoeWUoMCwiY2xyLWFsZXJ0Iiw0MykoMSwiY2xyLWFsZXJ0LWl0ZW0iKSgyLCJzcGFuIiw0NCksWWUoMywiIERhdGEgVmFsaWRhdGlvbiBFcnJvcnMgLSBQbGVhc2UgUmV2aWV3ICIpLENlKCkoKSgpKSwyJmwmJihXYygidmlzaWJpbGl0eSIsR2UoKS5jdXJyZW50UmVjb3JkSW52YWxp'@;
put 'ZENvbHMubGVuZ3RoPjA/InZpc2libGUiOiJoaWRkZW4iKSxSZSgiY2xyQWxlcnRDbG9zYWJsZSIsITEpKCJjbHJBbGVydFR5cGUiLCJkYW5nZXIiKSl9ZnVuY3Rpb24gb0F0KGwsYyl7aWYoMSZsKXtjb25zdCBhPVpuKCk7eWUoMCwiZGl2Iiw0NSkoMSwiYnV0dG9uIiw0NiksRXQoImNsaWNr'@;
put 'IixmdW5jdGlvbigpe3JldHVybiBVdChhKSxadChHZSgpLm9uUHJldmlvdXNSZWNvcmRDbGljaygpKX0pLHRuKDIsImNsci1pY29uIiw0NyksQ2UoKSx5ZSgzLCJwIiksWWUoNCwiIEN1cnJlbnQgcm93OiAiKSx5ZSg1LCJzdHJvbmciKSxZZSg2KSxDZSgpKCkseWUoNywiYnV0dG9uIiw0Niks'@;
put 'RXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBVdChhKSxadChHZSgpLm9uTmV4dFJlY29yZENsaWNrKCkpfSksdG4oOCwiY2xyLWljb24iLDQ4KSxDZSgpKCl9aWYoMiZsKXtjb25zdCBhPUdlKCk7U2UoMSksUmUoImRpc2FibGVkIixhLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5sZW5n'@;
put 'dGg+MCksU2UoNSksd3IoIiAiLGEuY3VycmVudFJlY29yZEluZGV4KzEsIiAiKSxTZSgxKSxSZSgiZGlzYWJsZWQiLGEuY3VycmVudFJlY29yZEludmFsaWRDb2xzLmxlbmd0aD4wKX19ZnVuY3Rpb24gYUF0KGwsYyl7aWYoMSZsJiYoeWUoMCwib3B0aW9uIiw1MyksWWUoMSksQ2UoKSksMiZs'@;
put 'KXtjb25zdCBhPWMuJGltcGxpY2l0O1JlKCJuZ1ZhbHVlIixhKSxTZSgxKSx3cigiICIsYSwiICIpfX1mdW5jdGlvbiBsQXQobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJkaXYiKSgxLCJhcHAtc29mdC1zZWxlY3QiLDUxKSxFdCgiZm9jdXNpbiIsZnVuY3Rpb24oZCl7VXQoYSk7'@;
put 'Y29uc3QgaD1HZSgpLmNvbEluZGV4O3JldHVybiBadChHZSgpLm9uUmVjb3JkSW5wdXRGb2N1cyhkLGgpKX0pKCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24oZCl7VXQoYSk7Y29uc3QgaD1HZSgpLmNvbDtyZXR1cm4gWnQoR2UoKS5jdXJyZW50UmVjb3JkW2gua2V5XT1kKX0pKCJvbklucHV0RXZl'@;
put 'bnQiLGZ1bmN0aW9uKCl7VXQoYSk7Y29uc3QgZD1HZSgpLGg9ZC5jb2wsbT1kLmNvbEluZGV4O3JldHVybiBadChHZSgpLm9uUmVjb3JkRHJvcGRvd25DaGFuZ2UoaC5rZXksbSkpfSksdHQoMixhQXQsMiwyLCJvcHRpb24iLDUyKSxDZSgpKCl9aWYoMiZsKXtjb25zdCBhPUdlKCkuY29sLGY9'@;
put 'R2UoKTtsZXQgZDtTZSgxKSxSZSgidmFsdWUiLGYuY3VycmVudFJlY29yZFthLmtleV0pKCJpbnB1dElkIixhLmtleSksU2UoMSksUmUoIm5nRm9yT2YiLG51bGw9PWYuY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGQ9Zi5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoYS5r'@;
put 'ZXkpKT9udWxsOmQuc291cmNlKX19ZnVuY3Rpb24gc0F0KGwsYyl7aWYoMSZsJiYoeWUoMCwib3B0aW9uIiw1NiksWWUoMSksQ2UoKSksMiZsKXtjb25zdCBhPWMuJGltcGxpY2l0O1JlKCJ2YWx1ZSIsYSksU2UoMSksd3IoIiAiLGEsIiAiKX19ZnVuY3Rpb24gdUF0KGwsYyl7aWYoMSZsKXtj'@;
put 'b25zdCBhPVpuKCk7eWUoMCwic2VsZWN0Iiw1NCksRXQoImZvY3VzaW4iLGZ1bmN0aW9uKGQpe1V0KGEpO2NvbnN0IGg9R2UoKS5jb2xJbmRleDtyZXR1cm4gWnQoR2UoKS5vblJlY29yZElucHV0Rm9jdXMoZCxoKSl9KSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oZCl7VXQoYSk7Y29uc3Qg'@;
put 'aD1HZSgpLmNvbDtyZXR1cm4gWnQoR2UoKS5jdXJyZW50UmVjb3JkW2gua2V5XT1kKX0pLHR0KDEsc0F0LDIsMiwib3B0aW9uIiw1NSksQ2UoKX1pZigyJmwpe2NvbnN0IGE9R2UoKS5jb2wsZj1HZSgpO2xldCBkO1JlKCJuZ01vZGVsIixmLmN1cnJlbnRSZWNvcmRbYS5rZXldKSxTZSgxKSxS'@;
put 'ZSgibmdGb3JPZiIsbnVsbD09Zi5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oZD1mLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShhLmtleSkpP251bGw6ZC5zb3VyY2UpfX1jb25zdCBjQXQ9ZnVuY3Rpb24oKXtyZXR1cm5bIlNPRlRTRUxFQ1QiLCJTT0ZUU0VMRUNUX0hP'@;
put 'T0siXX07ZnVuY3Rpb24gZkF0KGwsYyl7aWYoMSZsJiYodHQoMCxsQXQsMywzLCJkaXYiLDQ5KSx0dCgxLHVBdCwyLDIsIm5nLXRlbXBsYXRlIixudWxsLDUwLEt1KSksMiZsKXtjb25zdCBhPWMuY29sLGY9UWkoMiksZD1HZSgpO1JlKCJuZ0lmIixudWxsPT1kLmN1cnJlbnRSZWNvcmRWYWxp'@;
put 'ZGF0b3I/bnVsbDpkLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuaGFzRHFSdWxlcyhhLmtleSxYYSgyLGNBdCkpKSgibmdJZkVsc2UiLGYpfX1sZXQgZEF0PSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmKXt0aGlzLnNhc1N0b3JlU2VydmljZT1hLHRoaXMuaGVscGVyU2VydmljZT1mLHRo'@;
put 'aXMucmVjb3JkQWN0aW9uPW51bGwsdGhpcy5maWx0ZXI9ITEsdGhpcy5zdWJtaXRMb2FkaW5nPSExLHRoaXMuaGVhZGVyUGtzPVtdLHRoaXMuY2VsbFZhbGlkYXRpb249W10sdGhpcy5jdXJyZW50UmVjb3JkSW5kZXg9LTEsdGhpcy5jdXJyZW50UmVjb3JkTG9hZGluZ3M9W10sdGhpcy5jdXJy'@;
put 'ZW50UmVjb3JkRXJyb3JzPVtdLHRoaXMub25SZWNvcmRDaGFuZ2U9bmV3IHhyLHRoaXMub25SZWNvcmRJbnB1dEZvY3VzZWQ9bmV3IHhyLHRoaXMub25SZWNvcmREcm9wZG93bkNoYW5nZWQ9bmV3IHhyLHRoaXMub25SZWNvcmRFZGl0Q2xvc2U9bmV3IHhyLHRoaXMub25SZWNvcmRFZGl0Q29u'@;
put 'ZmlybT1uZXcgeHIsdGhpcy5vbk5leHRSZWNvcmQ9bmV3IHhyLHRoaXMub25QcmV2aW91c1JlY29yZD1uZXcgeHIsdGhpcy5jdXJyZW50UmVjb3JkSW52YWxpZENvbHM9W10sdGhpcy5nZW5lcmF0ZUVkaXRSZWNvcmRVcmxMb2FkaW5nPSExLHRoaXMuZ2VuZXJhdGVkUmVjb3JkVXJsPW51bGws'@;
put 'dGhpcy5hZGRSZWNvcmRVcmw9bnVsbCx0aGlzLnJlY29yZE5ld09yUGtNb2RpZmllZD0hMSx0aGlzLmFkZFJlY29yZExvYWRpbmc9ITEsdGhpcy5vcmlnaW5hbE9yZGVyPShkLGgpPT4wfW5nT25Jbml0KCl7fXZhbGlkYXRlUmVjb3JkQ29sKGEsZil7dmFyIGQ9dGhpcztyZXR1cm4geWkoZnVu'@;
put 'Y3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKChoLG0pPT57ZC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yPy5leGVjdXRlSG90VmFsaWRhdG9yKGEsZixfPT57aChfKX0pfSl9KSgpfXJlY29yZERhdGVDaGFuZ2UoYSxmKXtsZXQgZD10aGlzLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3I/LmdldFJ1'@;
put 'bGUoZiksaD1kP2QuZGF0ZUZvcm1hdDoiIjt0aGlzLmN1cnJlbnRSZWNvcmQmJih0aGlzLmN1cnJlbnRSZWNvcmRbZl09WG5lKCkoYSkuZm9ybWF0KGgpKX1pc1JlY29yZE1vZGFsSW52YWxpZCgpe3JldHVybiB0aGlzLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5sZW5ndGg+MH1jb25maXJt'@;
put 'UmVjb3JkRWRpdCgpe3RoaXMuY3VycmVudFJlY29yZEludmFsaWRDb2xzLmxlbmd0aDwxJiZ0aGlzLm9uUmVjb3JkQ2hhbmdlLmVtaXQodGhpcy5jdXJyZW50UmVjb3JkKX1jbG9zZVJlY29yZEVkaXQoKXt0aGlzLm9uUmVjb3JkRWRpdENsb3NlLmVtaXQoKX1vblJlY29yZERyb3Bkb3duQ2hh'@;
put 'bmdlKGEsZil7dGhpcy5vblJlY29yZERyb3Bkb3duQ2hhbmdlZC5lbWl0KHtjb2xOYW1lOmEsY29sOmZ9KX1vblJlY29yZElucHV0Rm9jdXMoYSxmKXt0aGlzLm9uUmVjb3JkSW5wdXRGb2N1c2VkLmVtaXQoe2V2ZW50OmEsY29sTmFtZTpmfSl9cmVjb3JkSW5wdXRQYXN0ZShhKXtzZXRUaW1l'@;
put 'b3V0KCgpPT57YS50YXJnZXQudmFsdWU9YS50YXJnZXQudmFsdWUucmVwbGFjZSgvXHMrJC8sIiIpfSwwKX1yZWNvcmRJbnB1dENoYW5nZShhLGYpe3ZhciBkPXRoaXM7cmV0dXJuIHlpKGZ1bmN0aW9uKigpe2NvbnN0IGg9ZC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yPy5nZXRSdWxlKGYpLG09'@;
put 'YS50YXJnZXQudmFsdWU7ZC5oZWxwZXJTZXJ2aWNlLmRlYm91bmNlQ2FsbCgzMDAsKCk9PntkLnZhbGlkYXRlUmVjb3JkQ29sKGgsbSkudGhlbihfPT57Y29uc3QgTz1kLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5pbmRleE9mKGYpO18/Tz4tMSYmZC5jdXJyZW50UmVjb3JkSW52YWxpZENv'@;
put 'bHMuc3BsaWNlKE8sMSk6TzwwJiZkLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5wdXNoKGYpfSl9KX0pKCl9b25OZXh0UmVjb3JkQ2xpY2soKXt0aGlzLm9uTmV4dFJlY29yZC5lbWl0KCl9b25QcmV2aW91c1JlY29yZENsaWNrKCl7dGhpcy5vblByZXZpb3VzUmVjb3JkLmVtaXQoKX1jb3B5'@;
put 'VG9DbGlwKGEpe2NvbnN0IGY9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI3JlY29yZE1vZGFsUmVmIC5tb2RhbC10aXRsZSIpO2lmKGYpe2NvbnN0IGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGV4dGFyZWEiKTtkLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCIsZC5zdHlsZS5sZWZ0PSIwIixk'@;
put 'LnN0eWxlLnRvcD0iMCIsZC5zdHlsZS5vcGFjaXR5PSIwIixkLnN0eWxlLnpJbmRleD0iNTAwMCIsZC52YWx1ZT1hLGYuYXBwZW5kQ2hpbGQoZCksZC5mb2N1cygpLGQuc2VsZWN0KCksZG9jdW1lbnQuZXhlY0NvbW1hbmQoImNvcHkiKSxmLnJlbW92ZUNoaWxkKGQpLHRoaXMuZ2VuZXJhdGVk'@;
put 'UmVjb3JkVXJsPWF9fWdlbmVyYXRlRWRpdFJlY29yZFVybCgpe3ZhciBhPXRoaXM7cmV0dXJuIHlpKGZ1bmN0aW9uKigpe2lmKGEuZ2VuZXJhdGVkUmVjb3JkVXJsKWEuY29weVRvQ2xpcChhLmdlbmVyYXRlZFJlY29yZFVybCk7ZWxzZXthLmdlbmVyYXRlRWRpdFJlY29yZFVybExvYWRpbmc9'@;
put 'ITA7Y29uc3QgZj1bXTthLmhlYWRlclBrcy5mb3JFYWNoKGQ9PntsZXQgaD0iQyIsbT0iIjtmb3IobGV0IF89MDtfPGEuY2VsbFZhbGlkYXRpb24ubGVuZ3RoO18rKyl7Y29uc3QgTz1hLmNlbGxWYWxpZGF0aW9uW19dO2lmKE8uZGF0YT09PWQpeygibnVtZXJpYyI9PT1PLnR5cGV8fCJkYXRl'@;
put 'Ij09PU8udHlwZXx8InRpbWUiPT09Ty50eXBlKSYmKGg9Ik4iKTticmVha319bT0iQyI9PT1oP2AnJHthLmN1cnJlbnRSZWNvcmRbZF19J2A6YS5jdXJyZW50UmVjb3JkW2RdLnRvU3RyaW5nKCksZi5wdXNoKHtHUk9VUF9MT0dJQzoiQU5EIixTVUJHUk9VUF9MT0dJQzoiQU5EIixTVUJHUk9V'@;
put 'UF9JRDowLFZBUklBQkxFX05NOmQsT1BFUkFUT1JfTk06Ij0iLFJBV19WQUxVRTptfSl9KSxmLmxlbmd0aD4wJiZhLmxpYmRzJiYoeWllbGQgYS5zYXNTdG9yZVNlcnZpY2Uuc2F2ZVF1ZXJ5KGEubGliZHMsZikudGhlbihkPT57YS5xdWVyeUZpbHRlcj17aWQ6ZC5yZXN1bHRbMF0uRklMVEVS'@;
put 'X1JLLHRhYmxlOmQucmVzdWx0WzBdLkZJTFRFUl9UQUJMRX07Y29uc3QgXz1sb2NhdGlvbi5ocmVmLnNwbGl0KCIjIilbMF0rIiMvZWRpdG9yL2VkaXQtcmVjb3JkLyIrYS5xdWVyeUZpbHRlci50YWJsZSsiLyIrYS5xdWVyeUZpbHRlci5pZDthLmNvcHlUb0NsaXAoXyksYS5nZW5lcmF0ZUVk'@;
put 'aXRSZWNvcmRVcmxMb2FkaW5nPSExLGEuZmlsdGVyPSExfSkuY2F0Y2goZD0+e2Euc3VibWl0TG9hZGluZz0hMX0pKX19KSgpfWlzQ29sUGsoYSl7cmV0dXJuIHRoaXMuaGVhZGVyUGtzLmluZGV4T2YoYSk+LTF9dHJhY2tCeUZuKGEsZil7cmV0dXJuIGF9fXJldHVybiBsLlx1MDI3NWZhYz1m'@;
put 'dW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHJ0KExkKSxydChQdSkpfSxsLlx1MDI3NWNtcD1rcih7dHlwZTpsLHNlbGVjdG9yczpbWyJhcHAtZWRpdC1yZWNvcmQiXV0saW5wdXRzOntjdXJyZW50UmVjb3JkOiJjdXJyZW50UmVjb3JkIixyZWNvcmRBY3Rpb246InJlY29yZEFjdGlvbiIs'@;
put 'bGliZHM6ImxpYmRzIixxdWVyeUZpbHRlcjoicXVlcnlGaWx0ZXIiLGZpbHRlcjoiZmlsdGVyIixzdWJtaXRMb2FkaW5nOiJzdWJtaXRMb2FkaW5nIixoZWFkZXJQa3M6ImhlYWRlclBrcyIsY2VsbFZhbGlkYXRpb246ImNlbGxWYWxpZGF0aW9uIixjdXJyZW50UmVjb3JkSW5kZXg6ImN1cnJl'@;
put 'bnRSZWNvcmRJbmRleCIsY3VycmVudFJlY29yZExvYWRpbmdzOiJjdXJyZW50UmVjb3JkTG9hZGluZ3MiLGN1cnJlbnRSZWNvcmRFcnJvcnM6ImN1cnJlbnRSZWNvcmRFcnJvcnMiLGN1cnJlbnRSZWNvcmRWYWxpZGF0b3I6ImN1cnJlbnRSZWNvcmRWYWxpZGF0b3IifSxvdXRwdXRzOntvblJl'@;
put 'Y29yZENoYW5nZToib25SZWNvcmRDaGFuZ2UiLG9uUmVjb3JkSW5wdXRGb2N1c2VkOiJvblJlY29yZElucHV0Rm9jdXNlZCIsb25SZWNvcmREcm9wZG93bkNoYW5nZWQ6Im9uUmVjb3JkRHJvcGRvd25DaGFuZ2VkIixvblJlY29yZEVkaXRDbG9zZToib25SZWNvcmRFZGl0Q2xvc2UiLG9uUmVj'@;
put 'b3JkRWRpdENvbmZpcm06Im9uUmVjb3JkRWRpdENvbmZpcm0iLG9uTmV4dFJlY29yZDoib25OZXh0UmVjb3JkIixvblByZXZpb3VzUmVjb3JkOiJvblByZXZpb3VzUmVjb3JkIn0sZGVjbHM6MTcsdmFyczoxMSxjb25zdHM6W1siaWQiLCJyZWNvcmRNb2RhbFJlZiIsMSwicmVjb3JkLWVkaXQt'@;
put 'bW9kYWwiLCJwb3NpdGlvbi1yZWxhdGl2ZSIsMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10aXRsZSJdLFs0LCJuZ0lmIl0sWzEsIm1vZGFsLWJvZHkiXSxbImNsYXNzIiwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2Vu'@;
put 'dGVyIHctMTAwIHB5LTEwIiw0LCJuZ0lmIl0sWzEsIm1vZGFsLWZvb3RlciIsInAtMCIsImNsci1nYXAtNSIsImNsci1nYXAtbWQtMCIsImNsci1mbGV4LWNvbHVtbiIsImNsci1mbGV4LW1kLXJvdyJdLFsiY2xhc3MiLCJ2YWxpZGF0aW9uLWluZm8tYWxlcnQiLDMsInZpc2liaWxpdHkiLCJj'@;
put 'bHJBbGVydENsb3NhYmxlIiwiY2xyQWxlcnRUeXBlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInByZXYtbmV4dCIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLCJmb2N1c2FibGUiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4t'@;
put 'cHJpbWFyeSIsImZvY3VzYWJsZSIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsiYXV0b2NvbXBsZXRlIiwiIl0sWyJjbGFzcyIsInBvc2l0aW9uLWFic29sdXRlIGdlbmVyYXRlLXJlY29yZC11cmwiLDQsIm5nSWYiXSxbImNsYXNzIiwiYnRuIGJ0bi1saW5rIGdlbmVyYXRlLXJlY29yZC11cmwt'@;
put 'YnV0dG9uIHBvc2l0aW9uLWFic29sdXRlIiwzLCJkaXNhYmxlZCIsImNsaWNrIiw0LCJuZ0lmIl0sWzEsInBvc2l0aW9uLWFic29sdXRlIiwiZ2VuZXJhdGUtcmVjb3JkLXVybCJdLFsxLCJidG4iLCJidG4tbGluayIsImdlbmVyYXRlLXJlY29yZC11cmwtYnV0dG9uIiwicG9zaXRpb24tYWJz'@;
put 'b2x1dGUiLDMsImRpc2FibGVkIiwiY2xpY2siXSxbMSwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImFsaWduLWl0ZW1zLWNlbnRlciIsInctMTAwIiwicHktMTAiXSxbMSwic3Bpbm5lciJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiXSxbMSwiY29sdW1u'@;
put 'LWVudHJ5IiwiY2xyLWZsZXgtY29sdW1uIiwiY2xyLWZsZXgtbWQtcm93Il0sWzEsIm5hbWUtaW5wdXQtcm93Il0sWzEsImZvbnQtd2VpZ2h0LWJvbGQiXSxbInNoYXBlIiwia2V5Iiw0LCJuZ0lmIl0sWzEsImNlbGwtZGVzYyJdLFsxLCJpbnB1dHMtd3JhcHBlciIsInBvc2l0aW9uLXJlbGF0'@;
put 'aXZlIiwzLCJuZ1N3aXRjaCJdLFsiY2xhc3MiLCJzcGlubmVyIHNwaW5uZXItaW5saW5lIGZsZXgtdW5zZXQgcG9zaXRpb24tYWJzb2x1dGUgZW50cnktaW5wdXQtbGVmdC1vZmZzZXQiLDQsIm5nSWYiXSxbImNsYXNzIiwiZmxleC11bnNldCBwb3NpdGlvbi1hYnNvbHV0ZSBlbnRyeS1pbnB1'@;
put 'dC1sZWZ0LW9mZnNldCIsInNoYXBlIiwiZXJyb3Itc3RhbmRhcmQiLCJzdGF0dXMiLCJ3YXJuaW5nIiw0LCJuZ0lmIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJkYXRlLWZpZWxkIiw0LCJuZ1N3aXRjaENhc2UiXSxbMSwibXQtMTAiXSxbInNoYXBlIiwia2V5Il0sWzEsInNwaW5u'@;
put 'ZXIiLCJzcGlubmVyLWlubGluZSIsImZsZXgtdW5zZXQiLCJwb3NpdGlvbi1hYnNvbHV0ZSIsImVudHJ5LWlucHV0LWxlZnQtb2Zmc2V0Il0sWyJzaGFwZSIsImVycm9yLXN0YW5kYXJkIiwic3RhdHVzIiwid2FybmluZyIsMSwiZmxleC11bnNldCIsInBvc2l0aW9uLWFic29sdXRlIiwiZW50'@;
put 'cnktaW5wdXQtbGVmdC1vZmZzZXQiXSxbImNsYXNzIiwibnVtZXJpYy1pbnB1dCIsMywiaW52YWxpZC1kYXRhIiw0LCJuZ0lmIl0sWzEsIm51bWVyaWMtaW5wdXQiXSxbImNscklucHV0IiwiIiwidHlwZSIsInRleHQiLDEsIm5vdC1jaGFyIiwzLCJuZ01vZGVsIiwiZm9jdXNpbiIsInBhc3Rl'@;
put 'IiwiaW5wdXQiLCJuZ01vZGVsQ2hhbmdlIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsiY2xyVGV4dGFyZWEiLCIiLDMsInJvd3MiLCJuZ01vZGVsIiwibWF4TGVuZ3RoIiwiZm9jdXNpbiIsInBhc3RlIiwiaW5wdXQiLCJuZ01vZGVsQ2hhbmdl'@;
put 'Il0sWyJjaGFyVGV4dGFyZWEiLCIiXSxbMSwiZGF0ZS1maWVsZCJdLFsiY2xyVGV4dGFyZWEiLCIiLDMsInJvd3MiLCJuZ01vZGVsIiwicGFzdGUiLCJpbnB1dCIsIm5nTW9kZWxDaGFuZ2UiXSxbImNsclRleHRhcmVhIiwiIiwicm93cyIsIjEiLCJjb2xzIiwiYXV0byIsMSwibm90LWNoYXIi'@;
put 'LDMsIm5nTW9kZWwiLCJwYXN0ZSIsImlucHV0IiwibmdNb2RlbENoYW5nZSJdLFsxLCJkYXRlLXBpY2tlciJdLFsidHlwZSIsImRhdGUiLCJuYW1lIiwiZGF0ZSIsImNsckRhdGUiLCIiLDEsImQtbm9uZSIsMywiY2xyRGF0ZUNoYW5nZSJdLFsxLCJ2YWxpZGF0aW9uLWluZm8tYWxlcnQiLDMs'@;
put 'ImNsckFsZXJ0Q2xvc2FibGUiLCJjbHJBbGVydFR5cGUiXSxbMSwiYWxlcnQtdGV4dCJdLFsxLCJwcmV2LW5leHQiXSxbInR5cGUiLCJidXR0b24iLCJ0YWJpbmRleCIsIjAiLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwiZm9jdXNhYmxlIiwzLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJzaGFwZSIs'@;
put 'ImFuZ2xlIGxlZnQiLCJzaXplIiwiMjMiXSxbInNoYXBlIiwiYW5nbGUgcmlnaHQiLCJzaXplIiwiMjMiXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJvdGhlcl90aGFuX3NvZnRfc2VsZWN0IiwiIl0sWzMsInZhbHVlIiwiaW5wdXRJZCIsImZvY3VzaW4iLCJ2YWx1ZUNoYW5nZSIsIm9uSW5w'@;
put 'dXRFdmVudCJdLFszLCJuZ1ZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywibmdWYWx1ZSJdLFsiY2xyU2VsZWN0IiwiIiwzLCJuZ01vZGVsIiwiZm9jdXNpbiIsIm5nTW9kZWxDaGFuZ2UiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJ2YWx1ZSJdXSx0ZW1wbGF0'@;
put 'ZTpmdW5jdGlvbihhLGYpezEmYSYmKHllKDAsImNsci1tb2RhbCIsMCkoMSwiaDMiLDEpLFllKDIpLHR0KDMsRnh0LDMsMiwibmctY29udGFpbmVyIiwyKSxDZSgpLHllKDQsImRpdiIsMyksdHQoNSxIeHQsMywwLCJkaXYiLDQpLHR0KDYsckF0LDMsNSwibmctY29udGFpbmVyIiwyKSxDZSgp'@;
put 'LHllKDcsImRpdiIsNSksdHQoOCxpQXQsNCw0LCJjbHItYWxlcnQiLDYpLHR0KDksb0F0LDksMywiZGl2Iiw3KSx5ZSgxMCwiZGl2IikoMTEsImJ1dHRvbiIsOCksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBmLmN1cnJlbnRSZWNvcmQubm9MaW5rT3B0aW9uPSExLGYuY2xvc2VSZWNv'@;
put 'cmRFZGl0KCl9KSxZZSgxMiwiIENhbmNlbCAiKSxDZSgpLHllKDEzLCJidXR0b24iLDkpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZi5jb25maXJtUmVjb3JkRWRpdCgpfSksWWUoMTQsIiBDb25maXJtICIpLENlKCkoKSgpLHR0KDE1LGZBdCwzLDMsIm5nLXRlbXBsYXRlIixudWxs'@;
put 'LDEwLEt1KSxDZSgpKSwyJmEmJihSZSgiY2xyTW9kYWxPcGVuIiwhMCkoImNsck1vZGFsQ2xvc2FibGUiLCExKSxTZSgyKSxPMCgiICIsIkFERCI9PT1mLnJlY29yZEFjdGlvbj8iQWRkIjoiRWRpdCIsIiByZWNvcmQgaW4gIixudWxsPT1mLmxpYmRzP251bGw6Zi5saWJkcy5zcGxpdCgiLiIp'@;
put 'WzBdLCIuIixudWxsPT1mLmxpYmRzP251bGw6Zi5saWJkcy5zcGxpdCgiLiIpWzFdLCIgIiksU2UoMSksUmUoIm5nSWYiLCJFRElUIj09PWYucmVjb3JkQWN0aW9uKSxTZSgyKSxSZSgibmdJZiIsZi5hZGRSZWNvcmRMb2FkaW5nKSxTZSgxKSxSZSgibmdJZiIsIWYuYWRkUmVjb3JkTG9hZGlu'@;
put 'ZyksU2UoMiksUmUoIm5nSWYiLGYuY3VycmVudFJlY29yZEludmFsaWRDb2xzLmxlbmd0aD4wKSxTZSgxKSxSZSgibmdJZiIsZi5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMubGVuZ3RoPDEpLFNlKDQpLFJlKCJkaXNhYmxlZCIsZi5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMubGVuZ3RoPjAp'@;
put 'KX0sZGVwZW5kZW5jaWVzOltSYSwkaSx5ZCxrZixDaCxTMSxNMSxpcyxMMCxXYSx6YSxfUyx0dWUsd1MsblosUmwsTWMsa2MseFUsbVMsTlUsVlUsUmYsRFUsbTcsekhlLE9zZSx4NmUsVU9dLHN0eWxlczpbIi5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1u'@;
put 'LWVudHJ5W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW4tZW50cnlbX25nY29udGVudC0lQ09NUCVdICAgLm5hbWUtaW5wdXQtcm93W19uZ2Nv'@;
put 'bnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO21heC13aWR0aDoyNjBweH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV0gICAubmFtZS1pbnB1dC1yb3dbX25nY29udGVudC0lQ09NUCVdICAgLmNlbGwtZGVzY1tf'@;
put 'bmdjb250ZW50LSVDT01QJV17bWFyZ2luLXJpZ2h0OjMwcHg7bWFyZ2luLXRvcDoxMHB4fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uLWVudHJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5pbnB1dHMtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zmxl'@;
put 'eDoxO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW4tZW50cnlbX25nY29udGVudC0lQ09NUCVdICAgLmlucHV0cy13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgICA+Kjpub3QoLmRhdGUtZmll'@;
put 'bGQpOm5vdChjbHItc2VsZWN0LWNvbnRhaW5lcil7ZmxleDoxfS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uLWVudHJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MH0ucmVjb3JkLWVkaXQtbW9kYWxb'@;
put 'X25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItdGV4dGFyZWEtd3JhcHBlcnttYXJnaW4tdG9wOjAhaW1wb3J0YW50fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uLWVudHJ5W19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXSAgICAgLmNsci1mb3JtLWNvbnRyb2x7bWFyZ2luLXRvcDowIWltcG9ydGFudH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV0gICAgIGFwcC1zb2Z0LXNlbGVjdHtkaXNwbGF5OmJsb2NrO3dp'@;
put 'ZHRoOjIyNHB4O2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICM5OTk7Y29sb3I6IzAwMDtwYWRkaW5nOmNhbGMoLjI1cmVtICsgMnB4KSAuNXJlbTtib3JkZXItcmFkaXVzOi4xMjVyZW07Zm9udC1zaXplOi41NDE2NjdyZW07bWFyZ2luLXJpZ2h0OjZweH0ucmVjb3JkLWVkaXQt'@;
put 'bW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV0gICAgIGFwcC1zb2Z0LXNlbGVjdCBpbnB1dHt3aWR0aDoxMDAlO2JvcmRlcjowO2JhY2tncm91bmQtY29sb3I6I2ZmZn0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVd'@;
put 'ICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV0gICAgIGFwcC1zb2Z0LXNlbGVjdCBpbnB1dDpmb2N1c3tiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOjAhaW1wb3J0YW50fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uLWVudHJ5W19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXSAgICAgYXBwLXNvZnQtc2VsZWN0IGlucHV0Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uLCAucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV0gICAgIGFwcC1zb2Z0LXNlbGVjdCBpbnB1dDo6'@;
put 'LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTttYXJnaW46MH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV06Zmlyc3QtY2hpbGQgICBwW19uZ2NvbnRlbnQtJUNPTVAl'@;
put 'XTpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kYXRlLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1ibG9ja30ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVu'@;
put 'dC0lQ09NUCVdICAgLmRhdGUtZmllbGRbX25nY29udGVudC0lQ09NUCVdICAgdGV4dGFyZWFbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjIzMHB4fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAuZGF0ZS1maWVsZFtfbmdjb250ZW50LSVDT01QJV0gICAuZGF0ZS1w'@;
put 'aWNrZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjRweH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmRhdGUtZmllbGRbX25nY29udGVudC0lQ09NUCVdICAgLmRhdGUtcGlja2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAg'@;
put 'ICAgLmNsci1pbnB1dC1ncm91cHtib3JkZXI6MCFpbXBvcnRhbnR9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tb2RhbC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxMHB4fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01Q'@;
put 'JV0gICAgIGNsci1zZWxlY3QtY29udGFpbmVye2JvcmRlcjoxcHggc29saWQgIzk5OTtjb2xvcjojMDAwO2JvcmRlci1yYWRpdXM6LjEyNXJlbTttYXJnaW4tcmlnaHQ6NXB4fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci1zZWxlY3QtY29udGFpbmVyIC5j'@;
put 'bHItc2VsZWN0LXdyYXBwZXJ7bWF4LWhlaWdodDp1bnNldH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICBjbHItc2VsZWN0LWNvbnRhaW5lciAuY2xyLXNlbGVjdC13cmFwcGVyOmFmdGVye3RvcDoxNXB4fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVD'@;
put 'T01QJV0gICAgIGNsci1zZWxlY3QtY29udGFpbmVyIHNlbGVjdHtoZWlnaHQ6YXV0bztwYWRkaW5nOjEwcHggMjBweCAxMHB4IDEwcHg7Ym9yZGVyOjAhaW1wb3J0YW50fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci1zZWxlY3QtY29udGFpbmVyIHNlbGVj'@;
put 'dDpmb2N1c3tiYWNrZ3JvdW5kOjAgMCFpbXBvcnRhbnR9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgY2xyLXNlbGVjdC1jb250YWluZXIgc2VsZWN0OmhvdmVye2JhY2tncm91bmQ6dHJhbnNwYXJlbnR9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXSAgICAgY2xyLWlucHV0LWNvbnRhaW5lcnt3aWR0aDoyMjRweDtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2NvbG9yOiMwMDA7cGFkZGluZzpjYWxjKC4yNXJlbSArIDJweCkgLjVyZW07Ym9yZGVyLXJhZGl1czouMTI1cmVtO2ZvbnQtc2l6ZTouNTQxNjY3cmVt'@;
put 'O21hcmdpbi1yaWdodDo2cHh9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgY2xyLWlucHV0LWNvbnRhaW5lciBpbnB1dHt3aWR0aDoxMDAlO2JvcmRlcjowfS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci1pbnB1dC1jb250YWlu'@;
put 'ZXIgaW5wdXQ6Zm9jdXN7YmFja2dyb3VuZDpub25lO2JvcmRlcjowIWltcG9ydGFudH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICBjbHItaW5wdXQtY29udGFpbmVyIGlucHV0Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uLCAucmVjb3JkLWVkaXQtbW9kYWxb'@;
put 'X25nY29udGVudC0lQ09NUCVdICAgICBjbHItaW5wdXQtY29udGFpbmVyIGlucHV0Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lO21hcmdpbjowfS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci1pbnB1dC1jb250'@;
put 'YWluZXIuaW52YWxpZC1kYXRhe2JvcmRlci1jb2xvcjpyZWR9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLm1vZGFsLWRpYWxvZ3t3aWR0aDo4MHZ3fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250YWlu'@;
put 'ZXJ7d2lkdGg6MTAwJX0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLWNvbnRyb2wtY29udGFpbmVyIHRleHRhcmVhe3dpZHRoOjEwMCU7cmVzaXplOm5vbmU7Ym9yZGVyLWNvbG9yOiM5OTl9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAl'@;
put 'XSAgICAgLmNsci1jb250cm9sLWNvbnRhaW5lciB0ZXh0YXJlYS5pbnZhbGlkLWRhdGF7Ym9yZGVyLWNvbG9yOnJlZDtvdXRsaW5lOjB9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1jb250cm9sLWNvbnRhaW5lciB0ZXh0YXJlYS5ub3QtY2hhcntmb250'@;
put 'LWZhbWlseTpMdWNpZGEgQ29uc29sZSxNb25hY28sbW9ub3NwYWNlfS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5nZW5lcmF0ZS1yZWNvcmQtdXJse3JpZ2h0OjQwcHg7dG9wOjQwcHg7Zm9udC1zaXplOjEycHh9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXSAgICAgLmdlbmVyYXRlLXJlY29yZC11cmwtYnV0dG9ue3JpZ2h0OjI1cHg7dG9wOjVweH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICAubW9kYWwtaGVhZGVye3BhZGRpbmc6MCAwIDFyZW19LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQt'@;
put 'JUNPTVAlXSAgICAgLm1vZGFsLWZvb3RlcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5tb2RhbC1mb290ZXIgLmFsZXJ0e21hcmdpbjowfS5wcmV2'@;
put 'LW5leHRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9LnByZXYtbmV4dFtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MH0ucHJldi1uZXh0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250'@;
put 'ZW50LSVDT01QJV17bWFyZ2luOjAgMTBweH0uZm9jdXNhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1c3tib3gtc2hhZG93OjAgMCAzcHggIzVhYTIyMH0uZW50cnktaW5wdXQtbGVmdC1vZmZzZXRbX25nY29udGVudC0lQ09NUCVde2xlZnQ6LTMwcHh9LnZhbGlkYXRpb24taW5mby1hbGVy'@;
put 'dFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MzEwcHh9Il19KSxsfSkoKTtmdW5jdGlvbiBoQXQobCxjKXtpZigxJmwmJih5ZSgwLCJwIiwzKSxZZSgxKSxDZSgpKSwyJmwpe2NvbnN0IGE9Yy4kaW1wbGljaXQ7U2UoMSksd3IoIiAiLGEsIiAiKX19bGV0IHBBdD0oKCk9PntjbGFzcyBse2Nv'@;
put 'bnN0cnVjdG9yKCl7dGhpcy5zdGF0ZXNMaXN0PVtdLHRoaXMucHJvY2Vzc2VkU3RhdGVzPVtdLHRoaXMuc3RhdGVySW5Qcm9ncmVzcz0hMSx0aGlzLm1pbkRlbGF5PTFlM31uZ09uSW5pdCgpe31hcHBlbmRTdGF0ZShhKXtpZigie2ZpbmlzaH0iPT09YSlyZXR1cm4gdGhpcy5zdGF0ZXJJblBy'@;
put 'b2dyZXNzPSExLHZvaWQgY2xlYXJJbnRlcnZhbCh0aGlzLnN0YXRlSW50ZXJ2YWwpO3RoaXMuc3RhdGVzTGlzdC5wdXNoKGEpLHRoaXMucHJvY2Vzc2VkU3RhdGVzLnB1c2goYSl9cmVwbGFjZUxhc3RTdGF0ZShhKXt0aGlzLnN0YXRlc0xpc3QubGVuZ3RoPjA/KHRoaXMuc3RhdGVzTGlzdC5w'@;
put 'b3AoKSx0aGlzLnN0YXRlc0xpc3QucHVzaChhKSk6dGhpcy5wcm9jZXNzZWRTdGF0ZXNbdGhpcy5wcm9jZXNzZWRTdGF0ZXMubGVuZ3RoLTFdPWF9Y2xlYXJTdGF0ZXMoKXt0aGlzLnByb2Nlc3NlZFN0YXRlcz1bXX1zdGFydFN0YXRlcigpe3RoaXMuc3RhdGVySW5Qcm9ncmVzcz0hMCx0aGlz'@;
put 'LnN0YXRlc0xpc3QubGVuZ3RoPjAmJnRoaXMucHJvY2Vzc2VkU3RhdGVzLnB1c2godGhpcy5zdGF0ZXNMaXN0LnNoaWZ0KCl8fCIiKSx0aGlzLnN0YXRlSW50ZXJ2YWw9c2V0SW50ZXJ2YWwoKCk9Pnt0aGlzLnN0YXRlc0xpc3QubGVuZ3RoPjAmJnRoaXMucHJvY2Vzc2VkU3RhdGVzLnB1c2go'@;
put 'dGhpcy5zdGF0ZXNMaXN0LnNoaWZ0KCl8fCIiKX0sdGhpcy5taW5EZWxheSl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NWNtcD1rcih7dHlwZTpsLHNlbGVjdG9yczpbWyJhcHAtdXBsb2FkLXN0YXRlciJdXSxkZWNsczo1LHZhcnM6'@;
put 'MSxjb25zdHM6W1siY2xhc3MiLCJtLTAiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJ0ZXh0LWNlbnRlciJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1zbSIsInZlcnRpY2FsLWFsaWduLW1pZGRsZSJdLFsxLCJtLTAiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxmKXsxJmEmJih5ZSgwLCJkaXYi'@;
put 'KSx0dCgxLGhBdCwyLDEsInAiLDApLENlKCkseWUoMiwiZGl2IiwxKSgzLCJzcGFuIiwyKSxZZSg0LCJMb2FkaW5nLi4uIiksQ2UoKSgpKSwyJmEmJihTZSgxKSxSZSgibmdGb3JPZiIsZi5wcm9jZXNzZWRTdGF0ZXMpKX0sZGVwZW5kZW5jaWVzOltSYV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNP'@;
put 'TVAlXXtkaXNwbGF5OmJsb2NrfXBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowO3RleHQtYWxpZ246Y2VudGVyfSJdfSksbH0pKCksbUF0PSgoKT0+e2NsYXNzIGx7dHJhbnNmb3JtKGEpe3JldHVybiBhLnJlcGxhY2UoL1x8L2csIiB8ICIpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rp'@;
put 'b24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVwaXBlPVZsKHtuYW1lOiJwa1NwYWNlU2VwYXJhdGUiLHR5cGU6bCxwdXJlOiEwfSksbH0pKCksRDZlPSgoKT0+e2NsYXNzIGx7dHJhbnNmb3JtKGEsZil7cmV0dXJuIHRoaXMuYWRkU2VwYXJhdG9ycyhhLnRvU3RyaW5nKCksZil9YWRk'@;
put 'U2VwYXJhdG9ycyhhLGY9IiAiKXtjb25zdCBkPShhKz0iIikuc3BsaXQoIi4iKTtsZXQgaD1kWzBdO2NvbnN0IG09ZC5sZW5ndGg+MT8iLiIrZFsxXToiIixfPS8oXGQrKShcZHszfSkvO2Zvcig7Xy50ZXN0KGgpOyloPWgucmVwbGFjZShfLCIkMSIrZisiJDIiKTtyZXR1cm4gaCttfX1yZXR1'@;
put 'cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVwaXBlPVZsKHtuYW1lOiJ0aG91c2FuZFNlcGFyYXRvciIsdHlwZTpsLHB1cmU6ITB9KSxsfSkoKTtjb25zdCBnQXQ9WyJodCJdLHZBdD1bInVwbG9hZFN0YXRlciJdLHlBdD1bInF1ZXJ5RmlsdGVy'@;
put 'Il0sYkF0PVsiaG90SW5zdGFuY2UiXSxfQXQ9WyJmaWxlVXBsb2FkSW5wdXQiXTtmdW5jdGlvbiB3QXQobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJkaXYiLDYxKSgxLCJzcGFuIiw2MikoMiwibGFiZWwiLDYzKSxZZSgzLCIgQnJvd3NlICIpLENlKCkoKSx5ZSg0LCJpbnB1dCIs'@;
put 'NjQsNjUpLEV0KCJjaGFuZ2UiLGZ1bmN0aW9uKGQpe3JldHVybiBVdChhKSxadChHZSgpLmdldEZpbGVEZXNjKGQpKX0pLENlKCkoKX1pZigyJmwpe2NvbnN0IGE9R2UoKTtTZSg0KSxSZSgidXBsb2FkZXIiLGEudXBsb2FkZXIpfX1mdW5jdGlvbiBDQXQobCxjKXtpZigxJmwpe2NvbnN0IGE9'@;
put 'Wm4oKTt5ZSgwLCJkaXYiLDY2KSgxLCJidXR0b24iLDY3KSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFV0KGEpLFp0KEdlKCkuZ2V0RmlsZSgpKX0pLFllKDIsIiBVcGxvYWQgIiksQ2UoKSgpfTImbCYmKFNlKDEpLFJlKCJkaXNhYmxlZCIsITApKX1mdW5jdGlvbiBTQXQobCxjKXtp'@;
put 'ZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJidXR0b24iLDY4KSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFV0KGEpLFp0KEdlKCkuc2hvd1VwbG9hZE1vZGFsPSExKX0pLFllKDEsIiBDbG9zZSAiKSxDZSgpfWlmKDImbCl7Y29uc3QgYT1HZSgpO1JlKCJkaXNhYmxlZCIsYS5leGNl'@;
put 'bEZpbGVQYXJzaW5nfHxhLnVwbG9hZExvYWRpbmcpfX1mdW5jdGlvbiBNQXQobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJidXR0b24iLDY5KSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFV0KGEpLFp0KEdlKCkuc2hvd1VwbG9hZE1vZGFsPSExKX0pLFllKDEsIiBTa2lw'@;
put 'ICIpLENlKCl9fWZ1bmN0aW9uIGtBdChsLGMpezEmbCYmKHllKDAsImRpdiIsNzApLHRuKDEsImFwcC11cGxvYWQtc3RhdGVyIixudWxsLDcxKSxDZSgpKX1mdW5jdGlvbiBFQXQobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJhcHAtZWRpdC1yZWNvcmQiLDcyKSxFdCgib25SZWNv'@;
put 'cmRDaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIFV0KGEpLFp0KEdlKCkuY29uZmlybVJlY29yZEVkaXQoKSl9KSgib25SZWNvcmRJbnB1dEZvY3VzZWQiLGZ1bmN0aW9uKGQpe3JldHVybiBVdChhKSxadChHZSgpLm9uUmVjb3JkSW5wdXRGb2N1cyhkKSl9KSgib25SZWNvcmRFZGl0Q2xvc2Ui'@;
put 'LGZ1bmN0aW9uKCl7cmV0dXJuIFV0KGEpLFp0KEdlKCkuY2xvc2VSZWNvcmRFZGl0KCkpfSkoIm9uTmV4dFJlY29yZCIsZnVuY3Rpb24oKXtyZXR1cm4gVXQoYSksWnQoR2UoKS5vbk5leHRSZWNvcmQoKSl9KSgib25QcmV2aW91c1JlY29yZCIsZnVuY3Rpb24oKXtyZXR1cm4gVXQoYSksWnQo'@;
put 'R2UoKS5vblByZXZpb3VzUmVjb3JkKCkpfSksQ2UoKX1pZigyJmwpe2NvbnN0IGE9R2UoKTtSZSgiY3VycmVudFJlY29yZCIsYS5jdXJyZW50RWRpdFJlY29yZCkoInJlY29yZEFjdGlvbiIsYS5yZWNvcmRBY3Rpb24pKCJsaWJkcyIsYS5saWJkcykoInF1ZXJ5RmlsdGVyIixhLnF1ZXJ5Rmls'@;
put 'dGVyKSgiZmlsdGVyIixhLmZpbHRlcikoInN1Ym1pdExvYWRpbmciLGEuc3VibWl0TG9hZGluZykoImhlYWRlclBrcyIsYS5oZWFkZXJQa3MpKCJjZWxsVmFsaWRhdGlvbiIsYS5jZWxsVmFsaWRhdGlvbikoImN1cnJlbnRSZWNvcmRJbmRleCIsYS5jdXJyZW50RWRpdFJlY29yZEluZGV4KSgi'@;
put 'Y3VycmVudFJlY29yZExvYWRpbmdzIixhLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3MpKCJjdXJyZW50UmVjb3JkRXJyb3JzIixhLmN1cnJlbnRFZGl0UmVjb3JkRXJyb3JzKSgiY3VycmVudFJlY29yZFZhbGlkYXRvciIsYS5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcil9fWZ1bmN0aW9u'@;
put 'IHhBdChsLGMpezEmbCYmKHllKDAsImRpdiIsNzMpLHRuKDEsInByb2dyZXNzIiksQ2UoKSl9Y29uc3QgQUF0PWZ1bmN0aW9uKCl7cmV0dXJuWyIvaG9tZSJdfTtmdW5jdGlvbiBUQXQobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJkaXYiLDc0KSgxLCJzcGFuIiw3NSksdG4oMiwi'@;
put 'Y2xyLWljb24iLDc2KSxZZSgzLCJCYWNrIHRvIHRhYmxlIHNlbGVjdGlvbiAiKSxDZSgpLHllKDQsInNwYW4iLDc3KSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFV0KGEpLFp0KEdlKCkudmlld2JveE1hbmFnZXIoKSl9KSx0big1LCJjbHItaWNvbiIsNzgpLFllKDYsIiBWaWV3Ym94'@;
put 'ZXMgIiksQ2UoKSgpfTImbCYmKFNlKDEpLFJlKCJyb3V0ZXJMaW5rIixYYSgxLEFBdCkpKX1mdW5jdGlvbiBPQXQobCxjKXsxJmwmJnRuKDAsImNsci1pY29uIiw4Myl9ZnVuY3Rpb24gREF0KGwsYyl7aWYoMSZsJiYoV3IoMCksWWUoMSksd2woMiwidGhvdXNhbmRTZXBhcmF0b3IiKSxHcigp'@;
put 'KSwyJmwpe2NvbnN0IGE9R2UoMyk7U2UoMSkseWcoIiAoIix3ZygyLDQsYS5kYXRhU291cmNlLmxlbmd0aCwiLCIpLCIgIiwxPT09YS5kYXRhU291cmNlLmxlbmd0aD8icm93Ijoicm93cyIsIiwgIixhLmNvbHMubGVuZ3RoLCIiLDE9PT1hLmNvbHMubGVuZ3RoPyIgY29sIjoiIGNvbHMiLCIp'@;
put 'ICIpfX1mdW5jdGlvbiBJQXQobCxjKXsxJmwmJihXcigwKSxZZSgxLCIgKDAgcm93cykgIiksR3IoKSl9ZnVuY3Rpb24gUkF0KGwsYyl7aWYoMSZsJiYoV3IoMCksdHQoMSxEQXQsMyw3LCJuZy1jb250YWluZXIiLDM1KSx0dCgyLElBdCwyLDAsIm5nLWNvbnRhaW5lciIsMzUpLEdyKCkpLDIm'@;
put 'bCl7Y29uc3QgYT1HZSgyKTtTZSgxKSxSZSgibmdJZiIsIWEuemVyb0ZpbHRlclJvd3MpLFNlKDEpLFJlKCJuZ0lmIixhLnplcm9GaWx0ZXJSb3dzKX19ZnVuY3Rpb24gTEF0KGwsYyl7aWYoMSZsKXtjb25zdCBhPVpuKCk7eWUoMCwiaDQiLDc5KSgxLCJjbHItaWNvbiIsODApLEV0KCJjbGlj'@;
put 'ayIsZnVuY3Rpb24oKXtyZXR1cm4gVXQoYSksWnQoR2UoKS5kYXRhc2V0SW5mbz0hMCl9KSxDZSgpLHR0KDIsT0F0LDEsMCwiY2xyLWljb24iLDgxKSxZZSgzKSx5ZSg0LCJhIiw4MiksWWUoNSksQ2UoKSx0dCg2LFJBdCwzLDIsIm5nLWNvbnRhaW5lciIsMzUpLENlKCl9aWYoMiZsKXtjb25z'@;
put 'dCBhPWMubmdWYXIsZj1HZSgpO1NlKDIpLFJlKCJuZ0lmIixhLnRhYmxlTmFtZS5pbmNsdWRlcygiLUZDIikpLFNlKDEpLHdyKCIgIixhLmxpYk5hbWUsIi4iKSxTZSgxKSxSZSgicm91dGVyTGluayIsIi92aWV3L2RhdGEvIitmLmxpYmRzKSxTZSgxKSxhcihhLnRhYmxlTmFtZS5yZXBsYWNl'@;
put 'KCItRkMiLCIiKSksU2UoMSksUmUoIm5nSWYiLGYuZGF0YVNvdXJjZSl9fWZ1bmN0aW9uIFBBdChsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImJ1dHRvbiIsOTApLEV0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gVXQoYSksWnQoR2UoMykub25TaG93VXBsb2FkTW9kYWwoKSl9'@;
put 'KSx0bigxLCJjbHItaWNvbiIsOTEpLHllKDIsInNwYW4iKSxZZSgzLCJVcGxvYWQiKSxDZSgpKCl9fWZ1bmN0aW9uIEZBdChsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO1dyKDApLHllKDEsImJ1dHRvbiIsODUpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gVXQoYSksWnQoR2UoMiku'@;
put 'b3BlblFiKCkpfSksdG4oMiwiY2xyLWljb24iLDg2KSx5ZSgzLCJzcGFuIiksWWUoNCwiRmlsdGVyIiksQ2UoKSgpLHllKDUsImJ1dHRvbiIsODcpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gVXQoYSksWnQoR2UoMikuZWRpdFRhYmxlKCkpfSksdG4oNiwiY2xyLWljb24iLDg4KSx5'@;
put 'ZSg3LCJzcGFuIiksWWUoOCwiRWRpdCIpLENlKCkoKSx0dCg5LFBBdCw0LDAsImJ1dHRvbiIsODkpLEdyKCl9aWYoMiZsKXtjb25zdCBhPUdlKDIpO1NlKDkpLFJlKCJuZ0lmIiwhYS5jb2x1bW5MZXZlbFNlY3VyaXR5RmxhZyl9fWZ1bmN0aW9uIEhBdChsLGMpe2lmKDEmbCYmKHllKDAsInNw'@;
put 'YW4iKSxZZSgxKSxDZSgpKSwyJmwpe2NvbnN0IGE9R2UoNCk7U2UoMSksJHUoIlRvIHVubG9jayBtb3JlIHRoYW4gIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkLCIgIiwxPT09YS5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZD8icm93Ijoi'@;
put 'cm93cyIsIiwgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIil9fWZ1bmN0aW9uIE5BdChsLGMpe2lmKDEmbCYmKHllKDAsImNsci10b29sdGlwLWNvbnRlbnQiLDk4KSx0dCgxLEhBdCwyLDIsInNwYW4iLDM1KSxDZSgpKSwyJmwpe2NvbnN0IGE9R2UoMyk7U2UoMSksUmUoIm5n'@;
put 'SWYiLGEucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93KX19ZnVuY3Rpb24gVkF0KGwsYyl7aWYoMSZsKXtjb25zdCBhPVpuKCk7V3IoMCkseWUoMSwiYnV0dG9uIiw5MiksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBVdChhKSxadChHZSgyKS5jYW5jZWxFZGl0KCkpfSksdG4oMiwi'@;
put 'Y2xyLWljb24iLDkzKSx5ZSgzLCJzcGFuIiksWWUoNCwiQ2FuY2VsIiksQ2UoKSgpLHllKDUsImNsci10b29sdGlwIikoNiwiYnV0dG9uIiw5NCksRXQoImNsaWNrIixmdW5jdGlvbigpe1V0KGEpO2NvbnN0IGQ9R2UoMik7cmV0dXJuIFp0KGQucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93'@;
put 'PyIiOmQuYWRkUm93KCkpfSksdG4oNywiY2xyLWljb24iLDk1KSxZZSg4LCJBZGQgUm93ICIpLENlKCksdHQoOSxOQXQsMiwxLCJjbHItdG9vbHRpcC1jb250ZW50Iiw5NiksQ2UoKSx5ZSgxMCwiYnV0dG9uIiw0MCksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBVdChhKSxadChHZSgy'@;
put 'KS5jaGVja1NhdmUoKSl9KSx0bigxMSwiY2xyLWljb24iLDk3KSxZZSgxMiwiU3VibWl0ICIpLENlKCksR3IoKX1pZigyJmwpe2NvbnN0IGE9R2UoMik7U2UoNiksZ3IoImRjLWxvY2tlZC1jb250cm9sIixhLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdyksUmUoImNsckxvYWRpbmciLGEu'@;
put 'YWRkaW5nTmV3Um93KX19ZnVuY3Rpb24gQkF0KGwsYyl7aWYoMSZsKXtjb25zdCBhPVpuKCk7eWUoMCwiYnV0dG9uIiwxMDIpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gVXQoYSksWnQoR2UoMykubWFudWFsRmlsZUVkaXRNb2RhbD0hMCl9KSx0bigxLCJjbHItaWNvbiIsODgpLHll'@;
put 'KDIsInNwYW4iKSxZZSgzLCJFZGl0IiksQ2UoKSgpfX1mdW5jdGlvbiBqQXQobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTtXcigwKSx5ZSgxLCJidXR0b24iLDk5KSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFV0KGEpLFp0KEdlKDIpLmRpc2NhcmRTb3VyY2VGaWxlPSEwKX0pLHRu'@;
put 'KDIsImNsci1pY29uIiw5MykseWUoMywic3BhbiIpLFllKDQsIkRpc2NhcmQgZmlsZSIpLENlKCkoKSx0dCg1LEJBdCw0LDAsImJ1dHRvbiIsMTAwKSx5ZSg2LCJidXR0b24iLDEwMSksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBVdChhKSxadChHZSgyKS5zdWJtaXRFeGNlbCgpKX0p'@;
put 'LHRuKDcsImNsci1pY29uIiw5NyksWWUoOCwiIFN1Ym1pdCAiKSxDZSgpLEdyKCl9aWYoMiZsKXtjb25zdCBhPUdlKDIpO1NlKDUpLFJlKCJuZ0lmIixhLmhvdFRhYmxlLnJlYWRPbmx5KSxTZSgxKSxSZSgiY2xyTG9hZGluZyIsYS51cGxvYWRMb2FkaW5nKX19ZnVuY3Rpb24gekF0KGwsYyl7'@;
put 'aWYoMSZsJiYoeWUoMCwiZGl2Iiw4NCksdHQoMSxGQXQsMTAsMSwibmctY29udGFpbmVyIiwzNSksdHQoMixWQXQsMTMsMywibmctY29udGFpbmVyIiwzNSksdHQoMyxqQXQsOSwyLCJuZy1jb250YWluZXIiLDM1KSxDZSgpKSwyJmwpe2NvbnN0IGE9R2UoKTtTZSgxKSxSZSgibmdJZiIsYS5o'@;
put 'b3RUYWJsZS5yZWFkT25seSYmIWEudXBsb2FkUHJldmlldyksU2UoMSksUmUoIm5nSWYiLCFhLmhvdFRhYmxlLnJlYWRPbmx5JiYhYS51cGxvYWRQcmV2aWV3KSxTZSgxKSxSZSgibmdJZiIsYS51cGxvYWRQcmV2aWV3KX19ZnVuY3Rpb24gVUF0KGwsYyl7aWYoMSZsJiYoeWUoMCwiZGl2Iiwx'@;
put 'MDMpKDEsInNwYW4iKSxZZSgyLCJGSUxURVIgOiAiKSx5ZSgzLCJiIiksWWUoNCksQ2UoKSgpKCkpLDImbCl7Y29uc3QgYT1HZSgpO1NlKDQpLGFyKGEucXVlcnlUZXh0KX19ZnVuY3Rpb24gWkF0KGwsYyl7MSZsJiYoV3IoMCkseWUoMSwic3BhbiIsMTA2KSxZZSgyLCIgTG9hZGluZy4uLiAi'@;
put 'KSxDZSgpLHllKDMsImRpdiIpKDQsImgzIiksWWUoNSwiTG9hZGluZyB0YWJsZSIpLENlKCkoKSxHcigpKX1mdW5jdGlvbiBZQXQobCxjKXsxJmwmJihXcigwKSx5ZSgxLCJzcGFuIiksdG4oMiwiY2xyLWljb24iLDEwNyksQ2UoKSx5ZSgzLCJkaXYiKSg0LCJoMyIpLFllKDUsIkxvYWRpbmcg'@;
put 'dGFibGUgZXJyb3IiKSxDZSgpKCksR3IoKSl9ZnVuY3Rpb24gV0F0KGwsYyl7aWYoMSZsJiYoeWUoMCwiZGl2IiwxMDQpKDEsImRpdiIsMTA1KSx0dCgyLFpBdCw2LDAsIm5nLWNvbnRhaW5lciIsMzUpLHR0KDMsWUF0LDYsMCwibmctY29udGFpbmVyIiwzNSksQ2UoKSgpKSwyJmwpe2NvbnN0'@;
put 'IGE9R2UoKTtTZSgyKSxSZSgibmdJZiIsIWEuZ2V0ZGF0YUVycm9yKSxTZSgxKSxSZSgibmdJZiIsYS5nZXRkYXRhRXJyb3IpfX1mdW5jdGlvbiBHQXQobCxjKXtpZigxJmwmJih5ZSgwLCJzcGFuIiksWWUoMSksQ2UoKSksMiZsKXtjb25zdCBhPUdlKDMpO1NlKDEpLCR1KCJUbyB1bmxvY2sg'@;
put 'bW9yZSB0aGFuICIsYS5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCwiICIsMT09PWEubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQ/InJvdyI6InJvd3MiLCIsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpfX1mdW5jdGlvbiAk'@;
put 'QXQobCxjKXtpZigxJmwmJih5ZSgwLCJjbHItdG9vbHRpcC1jb250ZW50IiwxMTApLHR0KDEsR0F0LDIsMiwic3BhbiIsMzUpLENlKCkpLDImbCl7Y29uc3QgYT1HZSgyKTtTZSgxKSxSZSgibmdJZiIsYS5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3cpfX1mdW5jdGlvbiBLQXQobCxjKXtp'@;
put 'ZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJjbHItdG9vbHRpcCIpKDEsImJ1dHRvbiIsMTA4KSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7VXQoYSk7Y29uc3QgZD1HZSgpO3JldHVybiBadChkLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdz8iIjpkLmFkZFJlY29yZEJ1dHRvbkNsaWNrKCkp'@;
put 'fSksdG4oMiwiY2xyLWljb24iLDk1KSxZZSgzLCIgQWRkIFJlY29yZCAiKSxDZSgpLHR0KDQsJEF0LDIsMSwiY2xyLXRvb2x0aXAtY29udGVudCIsMTA5KSxDZSgpfWlmKDImbCl7Y29uc3QgYT1HZSgpO1NlKDEpLGdyKCJkYy1sb2NrZWQtY29udHJvbCIsYS5yZXN0cmljdGlvbnMucmVzdHJp'@;
put 'Y3RBZGRSb3cpfX1mdW5jdGlvbiBxQXQobCxjKXtpZigxJmwmJih5ZSgwLCJwIiwxMTEpLFllKDEpLHRuKDIsImNvbnRhY3QtbGluayIpLENlKCkpLDImbCl7Y29uc3QgYT1HZSgpO1NlKDEpLHdyKCIgVG8gZGlzcGxheSBtb3JlIHRoYW4gIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jf'@;
put 'cm93c19hbGxvd2VkLCIgcm93cywgY29udGFjdCAiKX19ZnVuY3Rpb24gWEF0KGwsYyl7aWYoMSZsJiYoeWUoMCwic3BhbiIsMTIzKSxZZSgxKSxDZSgpKSwyJmwpe2NvbnN0IGE9R2UoMik7U2UoMSksJHUoIk9ubHkgIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCwi'@;
put 'ICIsMT09PWEubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0PyJyb3ciOiJyb3dzIiwiIHdpbGwgYmUgc3VibWl0dGVkLiBUbyByZW1vdmUgdGhlIHJlc3RyaWN0aW9uLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iKX19ZnVuY3Rpb24gSkF0KGwsYyl7aWYo'@;
put 'MSZsKXtjb25zdCBhPVpuKCk7eWUoMCwiZGl2IiwxMjQpKDEsImRpdiIsMTI1KSgyLCJsYWJlbCIsMTI2KSxZZSgzLCJNZXNzYWdlIiksQ2UoKSx5ZSg0LCJ0ZXh0YXJlYSIsMTI3KSxFdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oZCl7cmV0dXJuIFV0KGEpLFp0KEdlKDIpLm1lc3NhZ2U9'@;
put 'ZCl9KSxDZSgpKCkoKX1pZigyJmwpe2NvbnN0IGE9R2UoMik7U2UoNCksUmUoIm5nTW9kZWwiLGEubWVzc2FnZSkoImRpc2FibGVkIiwhYS52YWxpZGF0aW9uRG9uZSkoInZhbHVlIixhLnZhbGlkYXRpb25Eb25lPyIiOiJQbGVhc2Ugd2FpdCB3aGlsZSB3ZSB2YWxpZGF0ZSAiK2EuY29scy5s'@;
put 'ZW5ndGgqYS5tb2RpZmVkUm93c0luZGV4ZXMubGVuZ3RoKyIgY2VsbHMuIil9fWZ1bmN0aW9uIFFBdChsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImRpdiIsMTEyKSgxLCJkaXYiLDExMykoMiwiZGl2IiwxMTQpKDMsImRpdiIsMTE1KSg0LCJidXR0b24iLDExNiksdG4oNSwiY2xy'@;
put 'LWljb24iLDExNyksQ2UoKSx5ZSg2LCJoMyIsMiksWWUoNyksQ2UoKSgpLHllKDgsImRpdiIsMyksdHQoOSxYQXQsMiwyLCJzcGFuIiwxMTgpLHR0KDEwLEpBdCw1LDMsImRpdiIsMTE5KSxDZSgpLHllKDExLCJkaXYiLDEyMCkoMTIsImJ1dHRvbiIsMTIxKSxFdCgiY2xpY2siLGZ1bmN0aW9u'@;
put 'KCl7VXQoYSk7Y29uc3QgZD1HZSgpO3JldHVybiBadChkLnNhdmVUYWJsZShkLmhvdFRhYmxlLmRhdGEpKX0pLFllKDEzLCIgU3VibWl0ICIpLENlKCkseWUoMTQsImJ1dHRvbiIsMTIyKSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7VXQoYSk7Y29uc3QgZD1HZSgpO3JldHVybiBkLmNhbmNlbFN1'@;
put 'Ym1pdCgpLGQuc3VibWl0PSExLFp0KGQudmFsaWRhdGlvbkRvbmU9MCl9KSxZZSgxNSwiIENhbmNlbCAiKSxDZSgpKCkoKSgpKCl9aWYoMiZsKXtjb25zdCBhPUdlKCk7U2UoNyksTzAoIiBTdWJtaXQgZm9yIEFwcHJvdmFsICgiLGEucm93c0NoYW5nZWQucm93c0FkZGVkLCIgYWRkZWQsICIs'@;
put 'YS5yb3dzQ2hhbmdlZC5yb3dzVXBkYXRlZCwiIHVwZGF0ZWQsICIsYS5yb3dzQ2hhbmdlZC5yb3dzRGVsZXRlZCwiIGRlbGV0ZWQpICIpLFNlKDIpLFJlKCJuZ0lmIixhLnRvdGFsUm93c0NoYW5nZWQ+YS5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQmJmEubGljZW5jZVN0'@;
put 'YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0IT09YS5JbmZpbml0eSksU2UoMSksUmUoIm5nSWYiLGEudGFibGVUcnVlKSxTZSgyKSxSZSgiZGlzYWJsZWQiLCFhLnZhbGlkYXRpb25Eb25lKX19ZnVuY3Rpb24gZVR0KGwsYyl7aWYoMSZsJiYoeWUoMCwic3BhbiIsMTI4KSxZZSgxKSx3bCgy'@;
put 'LCJwa1NwYWNlU2VwYXJhdGUiKSxDZSgpKSwyJmwpe2NvbnN0IGE9Yy4kaW1wbGljaXQsZj1HZSgpO1NlKDEpLCR1KCIgT24gcm93ICIsYSsxLCI6ICIsSnMoMiwyLGYucGtGaWVsZHNbYV0ucmVwbGFjZSgifCIsIiIpKSwiICIpfX1mdW5jdGlvbiB0VHQobCxjKXtpZigxJmwmJih5ZSgwLCJw'@;
put 'IiksWWUoMSksQ2UoKSksMiZsKXtjb25zdCBhPWMuJGltcGxpY2l0O1NlKDEpLE8wKCIgIixhLmNvbCwiKCIsYS5sZW4sIiksICIsYS52YWwsIiAiKX19ZnVuY3Rpb24gblR0KGwsYyl7aWYoMSZsKXtjb25zdCBhPVpuKCk7eWUoMCwiZGl2IiwxMjkpKDEsImRpdiIsMTMwKSgyLCJkaXYiLDEx'@;
put 'NCkoMywiZGl2IiwxMTUpKDQsImJ1dHRvbiIsMTE2KSx0big1LCJjbHItaWNvbiIsMTE3KSxDZSgpLHllKDYsImgzIiwyKSxZZSg3LCJFcnJvciIpLENlKCkoKSx5ZSg4LCJkaXYiLDMpKDksInAiKSxZZSgxMCwiWW91IGNhbm5vdCBzdWJtaXQgZW1wdHkgY2xhdXNlcyIpLENlKCkoKSx5ZSgx'@;
put 'MSwiZGl2IiwxNykoMTIsImJ1dHRvbiIsNDApLEV0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gVXQoYSksWnQoR2UoKS5udWxsVmFyaWFibGVzPSExKX0pLFllKDEzLCIgT2sgIiksQ2UoKSgpKCkoKSgpfX1mdW5jdGlvbiByVHQobCxjKXsxJmwmJnRuKDAsImFwcC1xdWVyeSIsbnVsbCwx'@;
put 'MzEpfWZ1bmN0aW9uIGlUdChsLGMpezEmbCYmKHllKDAsInAiLDEzMiksWWUoMSwiIFNvcnJ5IHRoYXQgZGlkbid0IHdvcmssIHRyeSBhZ2Fpbi4gIiksQ2UoKSl9Y29uc3Qgb1R0PWZ1bmN0aW9uKGwsYyl7cmV0dXJue2xpYk5hbWU6bCx0YWJsZU5hbWU6Y319LEk2ZT1mdW5jdGlvbigpe3Jl'@;
put 'dHVyblsiIiwiICJdfSxhVHQ9ZnVuY3Rpb24obCl7cmV0dXJue2hlYWRlckJhckZpbHRlcjpsfX0sUjZlPVQoNTMpLEw2ZT1UKDM5MDA3KS5CdWZmZXI7bGV0IEtQPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmLGQsaCxtLF8sTyxYLGFlLHBlKXt0aGlzLmxpY2VuY2VTZXJ2aWNlPWEs'@;
put 'dGhpcy5ldmVudFNlcnZpY2U9Zix0aGlzLmxvZ2dlclNlcnZpY2U9ZCx0aGlzLnNhc1N0b3JlU2VydmljZT1oLHRoaXMuaGVscGVyU2VydmljZT1tLHRoaXMucm91dGVyPV8sdGhpcy5yb3V0ZT1PLHRoaXMuc2FzU2VydmljZT1YLHRoaXMuY2RmPWFlLHRoaXMuaG90UmVnaXN0ZXJlcj1wZSx0'@;
put 'aGlzLnVwbG9hZFN0YXRlckNvbXBMaXN0PW5ldyBVMix0aGlzLnF1ZXJ5RmlsdGVyQ29tcExpc3Q9bmV3IFUyLHRoaXMuaG90SW5zdGFuY2VDb21wTGlzdD1uZXcgVTIsdGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdD1uZXcgVTIsdGhpcy5tZXNzYWdlPSIiLHRoaXMuJGRhdGFGb3JtYXRz'@;
put 'PW51bGwsdGhpcy5jb2xzPVtdLHRoaXMucmVzdHJpY3Rpb25zPXt9LHRoaXMuZGF0YXNldEluZm89ITEsdGhpcy5kc21ldGE9W10sdGhpcy52aWV3Ym94ZXM9ITEsdGhpcy5JbmZpbml0eT0xLzAsdGhpcy5ob3RUYWJsZT17ZGF0YTpbXSxjb2xIZWFkZXJzOltdLGhpZGRlbjohMCxjb2x1bW5z'@;
put 'OltdLGhlaWdodDoiMTAwJSIsbWluU3BhcmVSb3dzOjEsbGljZW5zZUtleTp2b2lkIDAscmVhZE9ubHk6ITAsY29weVBhc3RlOntjb3B5Q29sdW1uSGVhZGVyczohMCxjb3B5Q29sdW1uSGVhZGVyc09ubHk6ITB9LHNldHRpbmdzOntjb250ZXh0TWVudTp7aXRlbXM6e2VkaXRfcm93OntuYW1l'@;
put 'OiJFZGl0IHJvdyIsaGlkZGVuKCl7Y29uc3QgeGU9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCk7aWYoIXhlKXJldHVybiExO2NvbnN0IFZlPXhlWzBdO3JldHVybiBWZS5mcm9tLnJvdyE9PVZlLnRvLnJvd30sY2FsbGJhY2s6KGJlLHhlLFZlKT0+e2xldCBaZT14ZVswXTtaZS5zdGFydC5yb3c9'@;
put 'PT1aZS5lbmQucm93JiZ0aGlzLmVkaXRSZWNvcmQobnVsbCxaZS5zdGFydC5yb3cpfX0scm93X2Fib3ZlOntuYW1lOiJJbnNlcnQgUm93IGFib3ZlIn0scm93X2JlbG93OntuYW1lOiJJbnNlcnQgUm93IGJlbG93In0scmVtb3ZlX3Jvdzp7bmFtZToiSWdub3JlIHJvdyJ9LGNvcHk6e25hbWU6'@;
put 'IkNvcHkgd2l0aG91dCBoZWFkZXJzIn0sY29weV93aXRoX2NvbHVtbl9oZWFkZXJzOntuYW1lOiJDb3B5IHdpdGggaGVhZGVycyJ9LGNvcHlfY29sdW1uX2hlYWRlcnNfb25seTp7bmFtZToiQ29weSBoZWFkZXJzIG9ubHkifSxzcDE6e25hbWU6Ii0tLS0tLS0tLSJ9LHVuZG86e25hbWU6IlVu'@;
put 'ZG8ifSxyZWRvOntuYW1lOiJSZWRvIn19fX19LHRoaXMuaG90Q2VsbHNQcm9wUm93PW51bGwsdGhpcy5maWx0ZXI9ITEsdGhpcy5zdWJtaXRMb2FkaW5nPSExLHRoaXMudXBsb2FkTG9hZGluZz0hMSx0aGlzLnJvd3NDaGFuZ2VkPXtyb3dzVXBkYXRlZDowLHJvd3NEZWxldGVkOjAscm93c0Fk'@;
put 'ZGVkOjB9LHRoaXMubW9kaWZlZFJvd3NJbmRleGVzPVtdLHRoaXMucXVlcnlFcnI9ITEsdGhpcy5zdWNjZXNzRW5hYmxlPSExLHRoaXMubnVsbFZhcmlhYmxlcz0hMSx0aGlzLnBrRmllbGRzPVtdLHRoaXMuZmlsZW5hbWU9IiIsdGhpcy5zdWJtaXRMaW1pdE5vdGljZT0hMSx0aGlzLmJhZEVk'@;
put 'aXQ9ITEsdGhpcy5zYXZlTG9hZGluZz0hMSx0aGlzLmFwcHJvdmVycz1bXSx0aGlzLmVyclZhbGlkYXRpb249ITEsdGhpcy5wa051bGw9ITEsdGhpcy5ub1BrTnVsbD0hMSx0aGlzLnRhYmxlRGF0YT1bXSx0aGlzLnF1ZXJ5VGV4dD0iIix0aGlzLnF1ZXJ5VGV4dFNhdmVkPSIiLHRoaXMuc2hv'@;
put 'd0FwcHJvdmVycz0hMSx0aGlzLnBrRHVwcz0hMSx0aGlzLnZhbGlkYXRpb25Eb25lPTAsdGhpcy5kdXBsaWNhdGVQa0luZGV4ZXM9W10sdGhpcy5jb2x1bW5IZWFkZXI9W10sdGhpcy5zcGVjSW5mbz1bXSx0aGlzLnRvb0xvbmc9ITEsdGhpcy5leGNlZWRDZWxscz1bXSx0aGlzLnVwbG9hZGVy'@;
put 'PW5ldyBfTXQsdGhpcy51cGxvYWRVcmw9IiIsdGhpcy5leGNlbEZpbGVSZWFkeT0hMSx0aGlzLnVwbG9hZFByZXZpZXc9ITEsdGhpcy5leGNlbEZpbGVQYXJzaW5nPSExLHRoaXMuZXhjZWxVcGxvYWRTdGF0ZT1udWxsLHRoaXMuZGF0YT1bXSx0aGlzLmhlYWRlckFycmF5PVtdLHRoaXMuaG90'@;
put 'RGF0YVNjaGVtYT17fSx0aGlzLmhlYWRlclNob3c9W10sdGhpcy5oZWFkZXJWaXNpYmxlPSExLHRoaXMuaGFzQmFzZURyb3Bab25lT3Zlcj0hMSx0aGlzLmhhc0Fub3RoZXJEcm9wWm9uZU92ZXI9ITEsdGhpcy5oZWFkZXJQa3M9W10sdGhpcy5jb2x1bW5MZXZlbFNlY3VyaXR5RmxhZz0hMSx0'@;
put 'aGlzLmRhdGVUaW1lSGVhZGVycz1bXSx0aGlzLnRpbWVIZWFkZXJzPVtdLHRoaXMuZGF0ZUhlYWRlcnM9W10sdGhpcy54bFJ1bGVzPVtdLHRoaXMuZW5jb2Rpbmc9IlVURi04Iix0aGlzLmhlYWRlckNvbHVtbnM9W10sdGhpcy5jZWxsVmFsaWRhdGlvbj1bXSx0aGlzLmZpbGVQYXNzd29yZFN1'@;
put 'YmplY3Q9bmV3IHdlLHRoaXMuZmlsZVVubG9ja0Vycm9yPSExLHRoaXMuZmlsZVBhc3N3b3JkTW9kYWw9ITEsdGhpcy5zaG93VXBsb2FkTW9kYWw9ITEsdGhpcy5kaXNjYXJkU291cmNlRmlsZT0hMSx0aGlzLm1hbnVhbEZpbGVFZGl0TW9kYWw9ITEsdGhpcy5yZWNvcmRBY3Rpb249bnVsbCx0'@;
put 'aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3M9W10sdGhpcy5jdXJyZW50RWRpdFJlY29yZEVycm9ycz1bXSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg9LTEsdGhpcy5nZW5lcmF0ZUVkaXRSZWNvcmRVcmxMb2FkaW5nPSExLHRoaXMuZ2VuZXJhdGVkUmVjb3JkVXJsPW51bGwsdGhp'@;
put 'cy5hZGRSZWNvcmRVcmw9bnVsbCx0aGlzLnJlY29yZE5ld09yUGtNb2RpZmllZD0hMSx0aGlzLmFkZFJlY29yZExvYWRpbmc9ITEsdGhpcy5zaW5nbGVSb3dTZWxlY3RlZD0hMSx0aGlzLmFkZGluZ05ld1Jvdz0hMSx0aGlzLmdldGRhdGFFcnJvcj0hMSx0aGlzLnplcm9GaWx0ZXJSb3dzPSEx'@;
put 'LHRoaXMudGFibGVGaWxlRHJhZ092ZXI9ITEsdGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZT1bXSx0aGlzLnZhbGlkYXRpb25UYWJsZUxpbWl0PTIwLHRoaXMuZXh0ZW5kZWRDZWxsVmFsaWRhdGlvbkZpZWxkcz17RElTUExBWV9JTkRFWDowLEVYVFJBX0NPTF9OQU1FOjEsRElTUExBWV9WQUxV'@;
put 'RToyLERJU1BMQVlfVFlQRTozLFJBV19WQUxVRV9OVU06NCxSQVdfVkFMVUVfQ0hBUjo1LEZPUkNFX0ZMQUc6Nn0sdGhpcy5jZWxsVmFsaWRhdGlvbkZpZWxkcz17RElTUExBWV9JTkRFWDowLERJU1BMQVlfVkFMVUU6MSxSQVdfVkFMVUU6Mn0sdGhpcy5kaXNhYmxlZEJhc2ljRHluYW1pY0Nl'@;
put 'bGxWYWxpZGF0aW9uTWFwPVtdLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMudGltZXNDbGlja2VkPTAsdGhpcy5ob3RSZWdpc3RlcmVyPW5ldyBJNSx0aGlzLnBhcnNlUmVzdHJpY3Rpb25zKCksdGhpcy5zZXRSZXN0cmljdGlvbnMoKX1w'@;
put 'YXJzZVJlc3RyaWN0aW9ucygpe3RoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUmVjb3JkPSExPT09dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuYWRkUmVjb3JkLHRoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0RWRpdFJlY29yZD0hMT09PXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRS'@;
put 'ZWNvcmQsdGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RGaWxlVXBsb2FkPSExPT09dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuZmlsZVVwbG9hZH1zZXRSZXN0cmljdGlvbnMoYSl7YSYmKHRoaXMucmVzdHJpY3Rpb25zPXsuLi50aGlzLnJlc3RyaWN0aW9ucywuLi5hfSksdGhpcy5yZXN0cmlj'@;
put 'dGlvbnMucmVtb3ZlRWRpdFJlY29yZEJ1dHRvbiYmZGVsZXRlKHRoaXMuaG90VGFibGU/LnNldHRpbmdzPy5jb250ZXh0TWVudSkuaXRlbXMuZWRpdF9yb3csdGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3cmJihkZWxldGUodGhpcy5ob3RUYWJsZT8uc2V0dGluZ3M/LmNvbnRleHRN'@;
put 'ZW51KS5pdGVtcy5yb3dfYWJvdmUsZGVsZXRlKHRoaXMuaG90VGFibGU/LnNldHRpbmdzPy5jb250ZXh0TWVudSkuaXRlbXMucm93X2JlbG93LGRlbGV0ZSh0aGlzLmhvdFRhYmxlPy5zZXR0aW5ncz8uY29udGV4dE1lbnUpLml0ZW1zLnJlbW92ZV9yb3cpfWNoZWNrUm93TGltaXQoKXt0aGlz'@;
put 'LmNvbHVtbkxldmVsU2VjdXJpdHlGbGFnfHx0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkIT09MS8wJiYodGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3c9dGhpcy5kYXRhU291cmNlPy5sZW5ndGg+PXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRv'@;
put 'cl9yb3dzX2FsbG93ZWQpfXJlc2V0RmlsdGVyKCl7dGhpcy5xdWVyeUZpbHRlckNvbXBMaXN0LmZpcnN0JiZ0aGlzLnF1ZXJ5RmlsdGVyQ29tcExpc3QuZmlyc3QucmVzZXRGaWx0ZXIoKX1vblNob3dVcGxvYWRNb2RhbCgpe3RoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0RmlsZVVwbG9hZD90'@;
put 'aGlzLmV2ZW50U2VydmljZS5zaG93RGVtb0xpbWl0TW9kYWwoIkZpbGUgVXBsb2FkIik6dGhpcy5jb2x1bW5MZXZlbFNlY3VyaXR5RmxhZz90aGlzLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJJbmZvcm1hdGlvbiIsIlVwbG9hZCBmZWF0dXJlIGlzIGRpc2FibGVkIHdoaWxlIENvbHVt'@;
put 'biBMZXZlbCBTZWN1cml0eSBydWxlcyBhcmUgYWN0aXZlIik6dGhpcy51cGxvYWRQcmV2aWV3fHwodGhpcy5zaG93VXBsb2FkTW9kYWw9ITApfWZpbGVPdmVyQmFzZShhKXt0aGlzLmhhc0Jhc2VEcm9wWm9uZU92ZXI9YX11cGRhdGVfc2hlZXRfcmFuZ2UoYSl7dmFyIGY9e3M6e3I6MS8wLGM6'@;
put 'MS8wfSxlOntyOjAsYzowfX07T2JqZWN0LmtleXMoYSkuZmlsdGVyKGZ1bmN0aW9uKGQpe3JldHVybiIhIiE9ZC5jaGFyQXQoMCl9KS5tYXAoQzYudXRpbHMuZGVjb2RlX2NlbGwpLmZvckVhY2goZnVuY3Rpb24oZCl7Zi5zLmM9TWF0aC5taW4oZi5zLmMsZC5jKSxmLnMucj1NYXRoLm1pbihm'@;
put 'LnMucixkLnIpLGYuZS5jPU1hdGgubWF4KGYuZS5jLGQuYyksZi5lLnI9TWF0aC5tYXgoZi5lLnIsZC5yKX0pLGFbIiFyZWYiXT1DNi51dGlscy5lbmNvZGVfcmFuZ2UoZil9Z2V0UmFuZ2VBbmRTaGVldChhKXtsZXQgZj0wLGQ9MCxoPS0xLG09LTEsXz0iIixPPSExLFg9W10scGU9WyJfX19f'@;
put 'X0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iLC4uLnRoaXMuaGVhZGVyQXJyYXldLm1hcChWZT0+VmUudG9Mb3dlckNhc2UoKSksYmU9cGUucmVkdWNlKChWZSxaZSk9PihWZVtaZV09LTEsVmUpLHt9KTtyZXR1cm4gYS5TaGVldE5hbWVzLmZvckVhY2goVmU9PntpZihPKXJldHVybjtYPVtd'@;
put 'LF89VmU7Y29uc3QgWmU9YS5TaGVldHNbX107aWYodGhpcy5kYXRhPUM2LnV0aWxzLnNoZWV0X3RvX2pzb24oWmUse2hlYWRlcjoxLGJsYW5rcm93czohMSxkZWZ2YWw6IiJ9KSx0aGlzLmRhdGEubGVuZ3RoPD0xKXJldHVybjtsZXQgbHQ9W107dGhpcy5oZWFkZXJBcnJheS5mb3JFYWNoKCgp'@;
put 'PT5sdC5wdXNoKCIiKSksdGhpcy5kYXRhLnB1c2gobHQpO2xldCBkdD0hMTtpZih0aGlzLmRhdGEuZm9yRWFjaCgoZ3QsanQpPT57aWYoIU8paWYoZHQpe2xldCBybj0hMCxYdD0hMTtwZS5mb3JFYWNoKHluPT57Y29uc3QgUW49YmVbeW5dOyIiIT09Z3RbUW5dJiZ2b2lkIDAhPT1ndFtRbl0/'@;
put 'cm49ITE6LTEhPT10aGlzLmhlYWRlclBrcy5pbmRleE9mKHluLnRvVXBwZXJDYXNlKCkpJiYoWHQ9ITApfSkscm58fFh0PyhtPWp0LE89ITApOi0xPT09aCYmKGg9anQpfWVsc2V7Y29uc3Qgcm49Z3QubWFwKHluPT55bi50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkpO2lmKCFybi5pbmNsdWRl'@;
put 'cygiX19fX19kZWxldGVfX3RoaXNfX3JlY29yZF9fX19fIikpe2NvbnN0IHluPXBlLmluZGV4T2YoIl9fX19fZGVsZXRlX190aGlzX19yZWNvcmRfX19fXyIpO3luPi0xJiZwZS5zcGxpY2UoeW4sMSl9ZHQ9ITAscGUuZm9yRWFjaCh5bj0+ey0xPT09cm4uaW5kZXhPZih5bikmJihkdD0hMSl9'@;
put 'KTtsZXQgWHQ9W107WHQ9dGhpcy5maW5kVmFsaWRIZWFkZXJzKHJuLHBlLGp0LF8pLCExPT09WHRbMF0/KGR0PSExLFh0WzFdLmxlbmd0aD4wJiZYdFsxXS5mb3JFYWNoKHluPT57WC5wdXNoKHluKX0pKTpiZT1YdFsxXX19KSxPJiYodGhpcy51cGRhdGVfc2hlZXRfcmFuZ2UoWmUpLFplWyIh'@;
put 'cmVmIl0pKXtjb25zdCBqdD1DNi51dGlscy5kZWNvZGVfcmFuZ2UoWmVbIiFyZWYiXXx8IiIpO2Y9anQucy5yLGQ9anQucy5jfX0pLC0xPT09aCYmKE89ITEpLHtmb3VuZERhdGE6TyxzaGVldE5hbWU6XyxzdGFydFJvdzpoLGVuZFJvdzptLGNzdkFycmF5SGVhZGVyc01hcDpiZSxtaXNzaW5n'@;
put 'SGVhZGVyczpYLHJhbmdlU3RhcnRSb3c6ZixyYW5nZVN0YXJ0Q29sOmR9fXByb21wdEV4Y2VsUGFzc3dvcmQoKXtyZXR1cm4gbmV3IFByb21pc2UoKGEsZik9Pnt0aGlzLmZpbGVQYXNzd29yZE1vZGFsPSEwLHNldFRpbWVvdXQoKCk9Pntjb25zdCBkPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Io'@;
put 'IiNmaWxlUGFzc3dvcmRJbnB1dCIpO2QmJihkLmZvY3VzKCksZC52YWx1ZT0iIil9LDEwMCksdGhpcy5maWxlUGFzc3dvcmRTdWJqZWN0LnN1YnNjcmliZShkPT57dGhpcy5maWxlVW5sb2NrRXJyb3I9ITEsYShkfHx2b2lkIDApfSl9KX1nZXRGaWxlRGVzYyhhLGY9ITEpe3ZhciBkPXRoaXM7'@;
put 'bGV0IGg7dGhpcy5leGNlbFVwbG9hZFN0YXRlPSJMb2FkaW5nIix0aGlzLmV4Y2VsRmlsZVBhcnNpbmc9ITAsaD1mP2FbMF06YS50YXJnZXQuZmlsZXNbMF0sdGhpcy5leGNlbEZpbGVSZWFkeT0hMSx0aGlzLmZpbGVuYW1lPSIiO2xldCBtPWgubmFtZTt0aGlzLmZpbGVuYW1lPW0sdGhpcy5h'@;
put 'cHBlbmRVcGxvYWRTdGF0ZShgTG9hZGluZyAke219IGludG8gdGhlIGJyb3dzZXJgKTtsZXQgTz1tLnNsaWNlKG0ubGFzdEluZGV4T2YoIi4iKSsxLG0ubGFzdEluZGV4T2YoIi4iKSs0KTtpZigieGxzIj09PU8udG9Mb3dlckNhc2UoKSl7bGV0IFg9bmV3IEZpbGVSZWFkZXI7WC5vbmxvYWQ9'@;
put 'ZnVuY3Rpb24oKXt2YXIgcGU9eWkoZnVuY3Rpb24qKGJlKXtjb25zdCB4ZT1kLnRvQnN0cihiZS50YXJnZXQucmVzdWx0KTtsZXQgVmUsWmU9ITE7Y29uc3QgbHQ9e3R5cGU6ImJpbmFyeSIsY2VsbERhdGVzOiExLGNlbGxGb3JtdWxhOiEwLGNlbGxTdHlsZXM6ITAsY2VsbE5GOiExLGNlbGxU'@;
put 'ZXh0OiExfTt0cnl7VmU9QzYucmVhZCh4ZSx7Li4ubHR9KX1jYXRjaChPcil7aWYoT3IubWVzc2FnZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCJwYXNzd29yZCIpKWZvcihaZT0hMDtaZTspe2NvbnN0IFZyPXlpZWxkIGQucHJvbXB0RXhjZWxQYXNzd29yZCgpO2lmKFZyKXRyeXtWZT1DNi5y'@;
put 'ZWFkKHhlLHsuLi5sdCxwYXNzd29yZDpWcn0pLFplPSExLGQuZmlsZVVubG9ja0Vycm9yPSExfWNhdGNoKFpyKXtkLmZpbGVVbmxvY2tFcnJvcj0hMCxaci5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoInBhc3N3b3JkIil8fChaZT0hMSl9ZWxzZSBaZT0hMX1lbHNlIGQuZXZlbnRT'@;
put 'ZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsT3Isdm9pZCAwLCJFcnJvciByZWFkaW5nIGZpbGUiKX1pZighVmUpcmV0dXJuIGQuZXhjZWxGaWxlUGFyc2luZz0hMSx2b2lkKGQuc2hvd1VwbG9hZE1vZGFsPSExKTtsZXQgZHQ9ITEsZ3Q9W107Y29uc3QganQ9WyJfX19fX0RFTEVURV9fVEhJ'@;
put 'U19fUkVDT1JEX19fX18iLC4uLmQuaGVhZGVyQXJyYXldO2xldCBybj1qdC5tYXAoT3I9Pk9yLnRvTG93ZXJDYXNlKCkpLFh0PXJuLnJlZHVjZSgoT3IsVnIpPT4oT3JbVnJdPS0xLE9yKSx7fSkseW49W107Y29uc3QgUW49ZC5nZXRSYW5nZUFuZFNoZWV0KFZlKTtpZihndD1Rbi5taXNzaW5n'@;
put 'SGVhZGVycyxRbi5mb3VuZERhdGEpe2R0PSEwLFh0PVFuLmNzdkFycmF5SGVhZGVyc01hcDtjb25zdCBPcj1WZS5TaGVldHNbUW4uc2hlZXROYW1lXTtkLmFwcGVuZFVwbG9hZFN0YXRlKGBUYWJsZSBmb3VuZCBvbiBzaGVldCAke1FuLnNoZWV0TmFtZX0gb24gcm93ICR7UW4uc3RhcnRSb3d9'@;
put 'YCk7bGV0IFZyPSIiLFpyPSIiO2ZvcihsZXQgaXI9UW4uc3RhcnRSb3c7aXI8UW4uZW5kUm93OysraXIpe2NvbnN0IHNpPVtdO3JuLmZvckVhY2goRW49Pntjb25zdCBWbj1DNi51dGlscy5lbmNvZGVfY2VsbCh7cjpRbi5yYW5nZVN0YXJ0Um93K2lyLGM6UW4ucmFuZ2VTdGFydENvbCtYdFtF'@;
put 'bl19KTtsZXQgY3I7IiI9PT1WciYmKFZyPVZuKSxacj1Wbixjcj1PcltWbl0/T3JbVm5dOnt2OiIifSxzaS5wdXNoKGNyKX0pLHNpLmZpbmQoRW49PiIiIT09RW4udikmJnluLnB1c2goc2kpfWQuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIlRhYmxlIEZvdW5kIixgU2hlZXQ6ICR7UW4u'@;
put 'c2hlZXROYW1lfVxuUmFuZ2U6ICR7VnJ9OiR7WnJ9YCl9ZWxzZSBndD1Rbi5taXNzaW5nSGVhZGVycztpZihndC5sZW5ndGg+MCl7Z3Quc29ydChmdW5jdGlvbihacixpcil7cmV0dXJuIFpyWzFdPT09aXJbMV0/MDpaclsxXT5pclsxXT8tMToxfSk7bGV0IE9yPWd0Lm1hcChWcj0+VnJbMF0p'@;
put 'LnNsaWNlKDAsNSkuam9pbigiXG4iKTtyZXR1cm4gZC5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCxPciksc2V0VGltZW91dCgoKT0+e2QuZmlsZW5hbWU9IiJ9KSxkLmV4Y2VsRmlsZVBhcnNpbmc9ITEsdm9pZCBkLnVwbG9hZGVyLnF1ZXVlLnBvcCgpfWlmKDA9PT15bi5sZW5n'@;
put 'dGh8fDA9PT15blswXS5sZW5ndGgpcmV0dXJuIGQuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsIk5vIHJlbGV2YW50IGRhdGEgZm91bmQgaW4gRmlsZSAhIiksc2V0VGltZW91dCgoKT0+e2QuZmlsZW5hbWU9IiJ9KSxkLmV4Y2VsRmlsZVBhcnNpbmc9ITEsdm9pZCBkLnVwbG9h'@;
put 'ZGVyLnF1ZXVlLnBvcCgpO2lmKChkLmRhdGVUaW1lSGVhZGVycy5sZW5ndGg+MHx8ZC5kYXRlSGVhZGVycy5sZW5ndGg+MHx8ZC50aW1lSGVhZGVycy5sZW5ndGg+MCkmJih5bj1kLnVwZGF0ZURhdGVUaW1lQ29scyhqdCx5bikpLGQueGxSdWxlcy5sZW5ndGg+MCYmKHluPWQudXBkYXRlWExS'@;
put 'dWxlQ29scyhqdCx5bikpLCFkdCl7aWYoMD09PWd0Lmxlbmd0aClkLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLCJObyByZWxldmFudCBkYXRhIGZvdW5kIGluIEZpbGUgISIpLHNldFRpbWVvdXQoKCk9PntkLmZpbGVuYW1lPSIifSk7ZWxzZXtndC5zb3J0KGZ1bmN0aW9uKFpy'@;
put 'LGlyKXtyZXR1cm4gWnJbMV09PT1pclsxXT8wOlpyWzFdPmlyWzFdPy0xOjF9KTtsZXQgT3I9Z3QubWFwKFZyPT5WclswXSkuc2xpY2UoMCw1KS5qb2luKCJcbiIpO2QuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsT3IpfXJldHVybiBkLmV4Y2VsRmlsZVBhcnNpbmc9ITEsdm9p'@;
put 'ZCBkLnVwbG9hZGVyLnF1ZXVlLnBvcCgpfXtkLmhlYWRlclNob3c9anQseW49eW4ubWFwKFZyPT5Wci5tYXAoWnI9PiJuIj09PVpyLnQ/WnIudjpaci53KSkseW49eW4ubWFwKFZyPT5Wci5tYXAoKFpyLGlyKT0+eyFaciYmMCE9PVpyJiYoWnI9IiIpLGlzTmFOKFpyKSYmKFpyPVpyLnJlcGxh'@;
put 'Y2UoLyIvZywnIiInKSkuc2VhcmNoKC8sL2cpPi0xJiYoWnI9JyInK1pyKyciJyk7Y29uc3Qgc2k9ZC5oZWFkZXJTaG93W2lyXTtyZXR1cm4ibnVtZXJpYyI9PT1kLmRjVmFsaWRhdG9yPy5nZXRSdWxlKHNpKT8udHlwZSYmKDAsdTMuaXNTcGVjaWFsTWlzc2luZykoWnIpJiYhWnIuaW5jbHVk'@;
put 'ZXMoIi4iKSYmKFpyPSIuIitaciksWnJ9KSksZC5kYXRhPXluO2xldCBPcj1qdC5qb2luKCIsIikrIlxuIjtpZihPcis9eW4uc2xpY2UoMCxkLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCkubWFwKFZyPT5Wci5qb2luKCIsIikpLmpvaW4oIlxuIiksIldMQVRJTjEiPT09'@;
put 'ZC5lbmNvZGluZyl7bGV0IFZyPVI2ZS5kZWNvZGUoTDZlLmZyb20oT3IpLCJDUC0xMjUyIiksWnI9bmV3IEJsb2IoW1ZyXSx7dHlwZToiYXBwbGljYXRpb24vY3N2In0pLGlyPWQuYmxvYlRvRmlsZShacixkLmZpbGVuYW1lKyIuY3N2Iik7ZC51cGxvYWRlci5hZGRUb1F1ZXVlKFtpcl0pfWVs'@;
put 'c2V7bGV0IFZyPW5ldyBCbG9iKFtPcl0se3R5cGU6ImFwcGxpY2F0aW9uL2NzdiJ9KSxacj1kLmJsb2JUb0ZpbGUoVnIsZC5maWxlbmFtZSsiLmNzdiIpO2QudXBsb2FkZXIuYWRkVG9RdWV1ZShbWnJdKX1kLmV4Y2VsRmlsZVJlYWR5PSEwfWlmKDA9PT1kLmRhdGEubGVuZ3RoKXJldHVybiBk'@;
put 'LnNob3dVcGxvYWRNb2RhbD0hMSxkLnVwbG9hZFByZXZpZXc9ITEsZC5leGNlbEZpbGVQYXJzaW5nPSExLHZvaWQgZC5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCwiVGFibGUgaW4gdGhlIGZpbGUgaXMgZW1wdHkuIERhdGEgZm91bmQgb24gc2hlZXQ6ICIpO2QuZXhjZWxGaWxl'@;
put 'UmVhZHk9ITAsZC5nZXRQZW5kaW5nRXhjZWxQcmV2aWV3KCl9KTtyZXR1cm4gZnVuY3Rpb24oYmUpe3JldHVybiBwZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLFgucmVhZEFzQXJyYXlCdWZmZXIoaCl9ZWxzZSBpZigiY3N2Ij09PU8udG9Mb3dlckNhc2UoKSl7aWYodGhpcy5saWNlbmNl'@;
put 'U3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQhPT0xLzApcmV0dXJuIHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIk5vdGljZSIsIkV4Y2VsIGZpbGVzIG9ubHkuIFRvIHVubG9jayBDU1YgdXBsb2FkcywgcGxlYXNlIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5p'@;
put 'byIpLHRoaXMuZXhjZWxGaWxlUmVhZHk9ITAsdGhpcy5leGNlbEZpbGVQYXJzaW5nPSExLHZvaWQgdGhpcy51cGxvYWRlci5xdWV1ZS5wb3AoKTtpZigiV0xBVElOMSI9PT10aGlzLmVuY29kaW5nKXtsZXQgWD1uZXcgRmlsZVJlYWRlcjtYLm9ubG9hZD1wZT0+e2xldCBiZT1SNmUuZGVjb2Rl'@;
put 'KEw2ZS5mcm9tKHBlLnRhcmdldC5yZXN1bHQpLCJDUC0xMjUyIikseGU9bmV3IEJsb2IoW2JlXSx7dHlwZTpPfSksVmU9dGhpcy5ibG9iVG9GaWxlKHhlLHRoaXMuZmlsZW5hbWUpO3RoaXMudXBsb2FkZXIucXVldWUucG9wKCksdGhpcy51cGxvYWRlci5hZGRUb1F1ZXVlKFtWZV0pLHRoaXMu'@;
put 'ZXhjZWxGaWxlUmVhZHk9ITB9LHRoaXMuZXhjZWxGaWxlUmVhZHk9ITAsdGhpcy5leGNlbEZpbGVQYXJzaW5nPSExLFgucmVhZEFzQXJyYXlCdWZmZXIoaCksdGhpcy5nZXRGaWxlKCl9ZWxzZSB0aGlzLmV4Y2VsRmlsZVJlYWR5PSEwLHRoaXMuZXhjZWxGaWxlUGFyc2luZz0hMSx0aGlzLmdl'@;
put 'dEZpbGUoKX1lbHNlIHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsJ0ludmFsaWQgZmlsZSB0eXBlICI8Yj4nK3RoaXMuZmlsZW5hbWUrJzwvYj4iLiBQbGVhc2UgdXBsb2FkIGNzdiBvciBleGNlbCBmaWxlLicpLHRoaXMuZXhjZWxGaWxlUmVhZHk9ITAsdGhpcy5leGNl'@;
put 'bEZpbGVQYXJzaW5nPSExLHRoaXMudXBsb2FkZXIucXVldWUucG9wKCl9c3VibWl0RXhjZWwoKXt0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdD09PTEvMD90aGlzLmdldEZpbGUoKTp0aGlzLnN1Ym1pdExpbWl0Tm90aWNlPSEwfWdldEZpbGUoKXtpZih0aGlzLmNo'@;
put 'ZWNrSW52YWxpZCgpKXJldHVybiB2b2lkIHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsIkludmFsaWQgdmFsdWVzIGFyZSBwcmVzZW50LiIpO2lmKHRoaXMudmFsaWRhdGVQcmltYXJ5S2V5cygpLDAhPT10aGlzLmR1cGxpY2F0ZVBrSW5kZXhlcy5sZW5ndGgpcmV0dXJu'@;
put 'IHRoaXMucGtEdXBzPSEwLHZvaWQodGhpcy5zdWJtaXQ9ITEpO3RoaXMucGtEdXBzPSExLHRoaXMudXBsb2FkTG9hZGluZz0hMDtsZXQgYT1bXTtmb3IoY29uc3QgZiBvZiB0aGlzLnVwbG9hZGVyLnF1ZXVlKWEucHVzaCh7ZmlsZTpmLGZpbGVOYW1lOmYubmFtZX0pO3RoaXMuc2FzU2Vydmlj'@;
put 'ZS51cGxvYWRGaWxlKHRoaXMudXBsb2FkVXJsLGEse3RhYmxlOnRoaXMubGliZHN9KS50aGVuKGY9PntpZih0eXBlb2YgZi5zYXNqc0Fib3J0PiJ1Iil7aWYodHlwZW9mIGYuc2FzcGFyYW1zPiJ1IilyZXR1cm47e3RoaXMudXBsb2FkTG9hZGluZz0hMTtsZXQgZD1mLnNhc3BhcmFtc1swXTt0'@;
put 'aGlzLnN1Y2Nlc3NFbmFibGU9ITAsdGhpcy50YWJsZUlkPWQuRFNJRCx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvc3RhZ2UvIit0aGlzLnRhYmxlSWQpfX1lbHNle2NvbnN0IGQ9ZixoPWQuc2FzanNBYm9ydFswXS5NU0csbT1kLnNhc2pzQWJvcnRbMF0uTUFDO3RoaXMudXBsb2FkTG9h'@;
put 'ZGluZz0hMSx0aGlzLmZpbGVuYW1lPSIiLHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QmJih0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0Lm5hdGl2ZUVsZW1lbnQudmFsdWU9IiIpLHRoaXMudXBsb2FkZXIucXVldWU9W10sdGhpcy5ldmVudFNlcnZpY2Uuc2hv'@;
put 'd0Fib3J0TW9kYWwoIiIsaCx7U1lTV0FSTklOR1RFWFQ6ZC5TWVNXQVJOSU5HVEVYVCxTWVNFUlJPUlRFWFQ6ZC5TWVNFUlJPUlRFWFQsTUFDOm19KX19LGY9Pnt0aGlzLnVwbG9hZExvYWRpbmc9ITEsdGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdCYmKHRoaXMuZmlsZVVwbG9h'@;
put 'ZElucHV0Q29tcExpc3QuZmlyc3QubmF0aXZlRWxlbWVudC52YWx1ZT0iIiksdGhpcy51cGxvYWRlci5xdWV1ZT1bXSx0aGlzLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoImZpbGUgdXBsb2FkIixmKX0pfWdldFBlbmRpbmdFeGNlbFByZXZpZXcoKXt0aGlzLnF1ZXJ5VGV4dFNh'@;
put 'dmVkPXRoaXMucXVlcnlUZXh0LHRoaXMucXVlcnlUZXh0PSIiLHRoaXMuZXhjZWxVcGxvYWRTdGF0ZT0iUGFyc2luZyIsdGhpcy50b2dnbGVIb3RQbHVnaW4oImNvbnRleHRNZW51IiwhMSk7bGV0IGE9W107dGhpcy5kYXRhLm1hcChkPT57bGV0IGg9e307dGhpcy5oZWFkZXJTaG93Lm1hcCgo'@;
put 'bSxfKT0+e2hbbV09ZFtfXX0pLGguX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19ffHwoaC5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX189Ik5vIiksYS5wdXNoKGgpfSksdGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5k'@;
put 'YXRhU291cmNlKSx0aGlzLmRhdGFTb3VyY2U9YSx0aGlzLmhvdFRhYmxlLmRhdGE9YTtjb25zdCBmPXRoaXMuaG90SW5zdGFuY2U7dGhpcy5leGNlbFVwbG9hZFN0YXRlPSJWYWxpZGF0aW5nLUhPVCIsZi51cGRhdGVTZXR0aW5ncyh7ZGF0YTp0aGlzLmRhdGFTb3VyY2UsbWF4Um93czoxLzB9'@;
put 'LCExKSxmLnJlbmRlcigpLHRoaXMuYXBwZW5kVXBsb2FkU3RhdGUoIlZhbGlkYXRpbmcgcm93cyIpLGYudmFsaWRhdGVDZWxscygoKT0+e3RoaXMuc2hvd1VwbG9hZE1vZGFsPSExLHRoaXMudXBsb2FkUHJldmlldz0hMCx0aGlzLmV4Y2VsRmlsZVBhcnNpbmc9ITEsdGhpcy5leGNlbFVwbG9h'@;
put 'ZFN0YXRlPW51bGx9KX1kaXNjYXJkUGVuZGluZ0V4Y2VsKGEpe3RoaXMuaG90SW5zdGFuY2UudXBkYXRlU2V0dGluZ3Moe21heFJvd3M6dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZH0pLGEmJnRoaXMuY2FuY2VsRWRpdCgpLHRoaXMuZmlsZVVwbG9hZElucHV0'@;
put 'Q29tcExpc3QuZmlyc3QmJih0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0Lm5hdGl2ZUVsZW1lbnQudmFsdWU9IiIpLHRoaXMudXBsb2FkUHJldmlldz0hMSx0aGlzLmV4Y2VsRmlsZVJlYWR5PSExLHRoaXMudXBsb2FkZXIucXVldWU9W10saXNOYU4ocGFyc2VJbnQodGhpcy5y'@;
put 'b3V0ZXIudXJsLnNwbGl0KCIvIikucG9wKCl8fCIiKSl8fHRoaXMucXVlcnlUZXh0U2F2ZWQubGVuZ3RoPjAmJih0aGlzLnF1ZXJ5VGV4dD10aGlzLnF1ZXJ5VGV4dFNhdmVkLHRoaXMucXVlcnlUZXh0U2F2ZWQ9IiIpfXByZXZpZXdUYWJsZUVkaXRDb25maXJtKCl7dGhpcy5kaXNjYXJkUGVu'@;
put 'ZGluZ0V4Y2VsKCksdGhpcy5jb252ZXJ0VG9Db3JyZWN0VHlwZXModGhpcy5kYXRhU291cmNlKSx0aGlzLmVkaXRUYWJsZSghMCl9YXBwZW5kVXBsb2FkU3RhdGUoYSxmPSExKXt0aGlzLmNkZi5kZXRlY3RDaGFuZ2VzKCksdGhpcy51cGxvYWRTdGF0ZXJDb21wTGlzdC5maXJzdCYmKGY/dGhp'@;
put 'cy51cGxvYWRTdGF0ZXJDb21wTGlzdC5maXJzdC5yZXBsYWNlTGFzdFN0YXRlKGEpOnRoaXMudXBsb2FkU3RhdGVyQ29tcExpc3QuZmlyc3QuYXBwZW5kU3RhdGUoYSkpfWZpbmRWYWxpZEhlYWRlcnMoYSxmLGQsaCl7bGV0IG09ITEsXz1bXSxPPTA7Zm9yKDtPPGEubGVuZ3RoOyl7aWYoIW0m'@;
put 'Ji0xIT09Zi5pbmRleE9mKGFbT10pKXtsZXQgWCxhZT0wLHBlPTAsYmU9MCx4ZT1bXSxWZT0hMTtmb3IobGV0IGR0PU87ZHQ8YS5sZW5ndGg7ZHQrKyl7aWYoIiI9PT1hW2R0XXx8LTEhPT14ZS5pbmRleE9mKGFbZHRdKSYmdGhpcy5pc0NvbEhlYWRlcihhW2R0XSkpeyIiPT09YVtkdF0mJihW'@;
put 'ZT0hMCksWD1kdDticmVha314ZS5wdXNoKGFbZHRdKX1sZXQgWmU9W107dm9pZCAwIT09WD8oWmU9YS5zbGljZShPLFgpLGJlPU8scGU9WCxWZT8oYWU9TyxPPVgpOihhZT1PLE89WC0xKSk6KFplPWEuc2xpY2UoTyksYWU9TyxiZT1PLHBlPWEubGVuZ3RoLE89YS5sZW5ndGgpO2xldCBsdD0h'@;
put 'MDtpZihmLmZvckVhY2goZHQ9PnstMT09PVplLmluZGV4T2YoZHQpJiYobHQ9ITEpfSksbHQpe209ITA7bGV0IGd0PWYucmVkdWNlKGZ1bmN0aW9uKHJuLFh0KXtyZXR1cm4gcm5bWHRdPS0xLHJufSx7fSksanQ9YS5zbGljZShhZSxwZSk7cmV0dXJuIGYuZm9yRWFjaChybj0+e2d0W3JuXT1q'@;
put 'dC5pbmRleE9mKHJuKSthZX0pLFshMCxndF19e2xldCBkdD1JTXQoWmUsZik7Xy5wdXNoKFsiPGI+VEFCKCIraCsiKTwvYj4gLSAiK2R0WzFdLmpvaW4oIiwiKSsiICggbWlzc2luZyAiK2R0WzBdLmpvaW4oIiwiKSsiICkiLGR0WzFdLmxlbmd0aF0pfX1PKyt9cmV0dXJuWyExLF9dfWlzQ29s'@;
put 'UGsoYSl7cmV0dXJuIHRoaXMuaGVhZGVyUGtzLmluZGV4T2YoYSk+LTF9aXNSZWFkb25seUNvbChhKXtyZXR1cm4gdGhpcy5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShhKT8ucmVhZE9ubHl9aXNDb2xIZWFkZXIoYSl7cmV0dXJuIHRoaXMuaGVhZGVyQXJyYXkuaW5kZXhPZihhLnRvVXBwZXJDYXNl'@;
put 'KCkpPi0xfXJlbW92ZVF1ZXJ5KCl7dGhpcy5zYXNTdG9yZVNlcnZpY2UucmVtb3ZlQ2xhdXNlKCl9dXBkYXRlRGF0ZVRpbWVDb2xzKGEsZil7aWYodGhpcy5kYXRlSGVhZGVycy5sZW5ndGg+MCl7bGV0IGQ9W107dGhpcy5kYXRlSGVhZGVycy5mb3JFYWNoKGg9PnstMSE9PWEuaW5kZXhPZiho'@;
put 'KSYmZC5wdXNoKGEuaW5kZXhPZihoKSl9KSxmLmZvckVhY2goaD0+e2QuZm9yRWFjaChtPT57Y29uc3QgXz1oW21dO2lmKE1KKF8udikpe2NvbnN0IE89Q0ooTnVtYmVyKF8udikpO18udj1PLmdldEZ1bGxZZWFyKCkrIi0iKygiMCIrKE8uZ2V0TW9udGgoKSsxKSkuc2xpY2UoLTIpKyItIiso'@;
put 'IjAiK08uZ2V0RGF0ZSgpKS5zbGljZSgtMil9ZWxzZSBpZihfJiZfLnYmJi0xPT09Xy52LnRvU3RyaW5nKCkuaW5kZXhPZigiOiIpKXtjb25zdCBPPW5ldyBEYXRlKF8udik7IkludmFsaWQgRGF0ZSIhPT1PLnRvVVRDU3RyaW5nKCkmJihfLnY9d0ooTykpfWhbbV09X30pfSl9aWYodGhpcy50'@;
put 'aW1lSGVhZGVycy5sZW5ndGg+MCl7bGV0IGQ9W107dGhpcy50aW1lSGVhZGVycy5mb3JFYWNoKGg9PnstMSE9PWEuaW5kZXhPZihoKSYmZC5wdXNoKGEuaW5kZXhPZihoKSl9KSxmLmZvckVhY2goaD0+e2QuZm9yRWFjaChtPT57Y29uc3QgXz1oW21dO2lmKE1KKF8udil8fHo1ZShfLnYpfHxf'@;
put 'LnYuaW5jbHVkZXMoIkUtIikpe2NvbnN0IE89Q0ooTnVtYmVyKF8udikpO18udj1qNWUoTyl9aFttXT1ffSl9KX1pZih0aGlzLmRhdGVUaW1lSGVhZGVycy5sZW5ndGg+MCl7bGV0IGQ9W107dGhpcy5kYXRlVGltZUhlYWRlcnMuZm9yRWFjaChoPT57LTEhPT1hLmluZGV4T2YoaCkmJmQucHVz'@;
put 'aChhLmluZGV4T2YoaCkpfSksZi5mb3JFYWNoKGg9PntkLmZvckVhY2gobT0+e2NvbnN0IF89aFttXTtpZihNSihfLnYpfHx6NWUoXy52KSl7bGV0IE89Q0ooTnVtYmVyKF8udikpO18udj13SihPKSsiICIrajVlKE8pfWVsc2V7aWYoLTE9PT1fLnYuaW5kZXhPZigiICIpJiYtMSE9PV8udi5p'@;
put 'bmRleE9mKCI6Iikpe2xldCBYPV8udi5zdWJzdHJpbmcoMCxfLnYuaW5kZXhPZigiOiIpKTtYPVgrIiAiK18udi5zdWJzdHJpbmcoXy52LmluZGV4T2YoIjoiKSsxKSxfLnY9WH1sZXQgTz1uZXcgRGF0ZShfLnYpOyJJbnZhbGlkIERhdGUiIT09Ty50b1VUQ1N0cmluZygpJiYoXy52PXdKKE8p'@;
put 'KyIgIisobD0+e2xldCBjPSgiMCIrbC5nZXRIb3VycygpKS5zbGljZSgtMikrIjoiO3JldHVybiBjPWMrKCIwIitsLmdldE1pbnV0ZXMoKSkuc2xpY2UoLTIpKyI6IixjKz0oIjAiK2wuZ2V0U2Vjb25kcygpKS5zbGljZSgtMiksY30pKE8pKX1oW21dPV99KX0pfXJldHVybiBmfXVwZGF0ZVhM'@;
put 'UnVsZUNvbHMoYSxmKXtpZih0aGlzLnhsUnVsZXMubGVuZ3RoPjApe2NvbnN0IGQ9W107dGhpcy54bFJ1bGVzLmZvckVhY2goaD0+ey0xIT09YS5pbmRleE9mKGguWExfQ09MVU1OKSYmKGguaW5kZXg9YS5pbmRleE9mKGguWExfQ09MVU1OKSxkLnB1c2goaCkpfSksZi5mb3JFYWNoKGg9Pntk'@;
put 'LmZvckVhY2gobT0+e2NvbnN0IF89aFttLmluZGV4XTsiRk9STVVMQSI9PT1tLlhMX1JVTEUmJiJmImluIF8mJigibiI9PT1fLnQ/Xy52PSI9IitfLmY6Xy53PSI9IitfLmYpLGhbbV09X30pfSl9cmV0dXJuIGZ9YmxvYlRvRmlsZShhLGYpe2NvbnN0IGQ9YTtyZXR1cm4gZC5sYXN0TW9kaWZp'@;
put 'ZWREYXRlPW5ldyBEYXRlLGQubmFtZT1mLGR9dG9Cc3RyKGEpe2xldCBmPW5ldyBVaW50OEFycmF5KGEpLGQ9IiIsaD1mLmJ5dGVMZW5ndGg7Zm9yKGxldCBtPTA7bTxoO20rKylkKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGZbbV0pO3JldHVybiBkfXNlbmRDbGF1c2UoKXt2YXIgYT10aGlzO3Jl'@;
put 'dHVybiB5aShmdW5jdGlvbiooKXthLnN1Ym1pdExvYWRpbmc9ITA7bGV0IGY9W10sZD1bXTtpZih0eXBlb2YgYS5jbGF1c2VzPiJ1IilyZXR1cm4gYS5udWxsVmFyaWFibGVzPSEwLHZvaWQoYS5zdWJtaXRMb2FkaW5nPSExKTt7bGV0IGg9YS5jbGF1c2VzLnF1ZXJ5T2JqO2lmKGhbMF0uZWxl'@;
put 'bWVudHMubGVuZ3RoPDEpcmV0dXJuKCJob21lIj09PUpuLnJvb3RQYXJhbXx8ImVkaXRvciI9PT1Kbi5yb290UGFyYW0pJiYoSm4uZWRpdG9yLmZpbHRlci5jbGF1c2VzPVtdLEpuLmVkaXRvci5maWx0ZXIucXVlcnk9W10sSm4uZWRpdG9yLmZpbHRlci5ncm91cExvZ2ljPSIiKSx2b2lkIGEu'@;
put 'cm91dGVyLm5hdmlnYXRlKFsiL2VkaXRvci8iK2EubGliZHNdLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KTtmb3IobGV0IG09MDttPGgubGVuZ3RoO20rKyl7Y29uc3QgXz1oW21dLmVsZW1lbnRzO2Y9Xy5maWx0ZXIoZnVuY3Rpb24oTyl7cmV0dXJuIG51bGw9PT1PLnZhcmlh'@;
put 'YmxlfSksZi5sZW5ndGgmJmQucHVzaChfKX19aWYoZC5sZW5ndGgpcmV0dXJuIGEubnVsbFZhcmlhYmxlcz0hMCx2b2lkKGEuc3VibWl0TG9hZGluZz0hMSk7dHJ5e2lmKHZvaWQgMCE9PWEuY2xhdXNlcyYmYS5saWJkcyl7Y29uc3QgaD17Z3JvdXBMb2dpYzphLmNsYXVzZXMuZ3JvdXBMb2dp'@;
put 'YyxmaWx0ZXJHcm91cHM6W119O2EuY2xhdXNlcy5xdWVyeU9iai5mb3JFYWNoKF89Pntjb25zdCBPPXtmaWx0ZXJDbGF1c2VzOltdfTtfLmVsZW1lbnRzLmZvckVhY2goWD0+e08uZmlsdGVyQ2xhdXNlcy5wdXNoKGEuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoWCkpfSksTy5jbGF1c2VMb2dp'@;
put 'Yz1fLmNsYXVzZUxvZ2ljLGguZmlsdGVyR3JvdXBzLnB1c2goYS5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShPKSl9KTtjb25zdCBtPWEuc2FzU3RvcmVTZXJ2aWNlLmNyZWF0ZUZpbHRlclF1ZXJ5VGFibGUoaCk7eWllbGQgYS5zYXNTdG9yZVNlcnZpY2Uuc2F2ZVF1ZXJ5KGEubGliZHMsbSku'@;
put 'dGhlbihfPT57YS5xdWVyeUZpbHRlcj17aWQ6Xy5yZXN1bHRbMF0uRklMVEVSX1JLLHRhYmxlOl8ucmVzdWx0WzBdLkZJTFRFUl9UQUJMRX0sYS5yb3V0ZXIubmF2aWdhdGUoWyIvIl0se3NraXBMb2NhdGlvbkNoYW5nZTohMCxxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KS50aGVu'@;
put 'KCgpPT5hLnJvdXRlci5uYXZpZ2F0ZShbIi9lZGl0b3IvIithLnF1ZXJ5RmlsdGVyLnRhYmxlKyIvIithLnF1ZXJ5RmlsdGVyLmlkXSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSkpLGEuZmlsdGVyPSExfSkuY2F0Y2goXz0+e2Euc3VibWl0TG9hZGluZz0hMX0pfX1jYXRjaCho'@;
put 'KXthLnF1ZXJ5RXJyPSEwLGEuc3VibWl0TG9hZGluZz0hMSxhLnF1ZXJ5RXJyTWVzc2FnZT1ofX0pKCl9b3BlblFiKCl7dGhpcy5saWJkcyYmKHRoaXMuZmlsdGVyPSEwLHRoaXMuY2RmLmRldGVjdENoYW5nZXMoKSx0aGlzLnN1Ym1pdExvYWRpbmc9ITEsdGhpcy5zYXNTdG9yZVNlcnZpY2Uu'@;
put 'c2V0UXVlcnlWYXJpYWJsZXModGhpcy5saWJkcyx0aGlzLmNvbHMpKX1lZGl0VGFibGUoYSxmKXt0aGlzLnRvZ2dsZUhvdFBsdWdpbigiY29udGV4dE1lbnUiLCEwKTtjb25zdCBkPXRoaXMuaG90SW5zdGFuY2U7bGV0IGg9ZC5nZXRQbHVnaW4oIm11bHRpQ29sdW1uU29ydGluZyIpLG09aC5n'@;
put 'ZXRTb3J0Q29uZmlnKCksXz1BcnJheS5pc0FycmF5KG0pP206W21dO3NldFRpbWVvdXQoKCk9PnthfHwodGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlKSxmJiZ0aGlzLmRhdGFTb3VyY2VVbmNoYW5nZWQucG9wKCkp'@;
put 'LHRoaXMuaG90VGFibGUucmVhZE9ubHk9ITEsdGhpcy5ob3RUYWJsZS5kYXRhPXRoaXMuZGF0YVNvdXJjZSxkLnVwZGF0ZVNldHRpbmdzKHtyZWFkT25seTp0aGlzLmhvdFRhYmxlLnJlYWRPbmx5fSwhMSksZC5yZW5kZXIoKTtmb3IobGV0IE8gb2YgXyloLnNvcnQoTyk7dGhpcy5yZVNldENl'@;
put 'bGxWYWxpZGF0aW9uVmFsdWVzKCl9LDApfWNvbnZlcnRUb0NvcnJlY3RUeXBlcyhhKXtmb3IobGV0IGYgb2YgYSlmb3IobGV0IGQgaW4gZil7bGV0IGg9dGhpcy5jb2xzLmZpbmQobT0+bS5OQU1FPT09ZCk7aCYmIiIhPT1mW2RdJiYibnVtIj09PWguVFlQRSYmIWguRERUWVBFLmluY2x1ZGVz'@;
put 'KCJUSU1FIikmJiFoLkREVFlQRS5pbmNsdWRlcygiREFURSIpJiYoZltkXT1wYXJzZUludChmW2RdKSl9fWNhbmNlbEVkaXQoKXt0aGlzLnRvZ2dsZUhvdFBsdWdpbigiY29udGV4dE1lbnUiLCExKSx0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlPVtdO2NvbnN0IGE9dGhpcy5ob3RJbnN0YW5j'@;
put 'ZTtsZXQgZj1hLmdldFBsdWdpbigibXVsdGlDb2x1bW5Tb3J0aW5nIiksZD1mLmdldFNvcnRDb25maWcoKSxoPUFycmF5LmlzQXJyYXkoZCk/ZDpbZF07dGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkJiYodGhpcy5kYXRhU291cmNlPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5k'@;
put 'YXRhU291cmNlVW5jaGFuZ2VkKSksdGhpcy5ob3RUYWJsZS5kYXRhPXRoaXMuZGF0YVNvdXJjZSx0aGlzLmhvdFRhYmxlLnJlYWRPbmx5PSEwLGEudXBkYXRlU2V0dGluZ3Moe3JlYWRPbmx5OnRoaXMuaG90VGFibGUucmVhZE9ubHksZGF0YTp0aGlzLmRhdGFTb3VyY2V9LCExKSxhLnZhbGlk'@;
put 'YXRlUm93cyh0aGlzLm1vZGlmZWRSb3dzSW5kZXhlcyk7Zm9yKGxldCBtIG9mIGgpZi5zb3J0KG0pO3RoaXMuY2hlY2tSb3dMaW1pdCgpfWhvdENsaWNrZWQoKXsxPT09dGhpcy50aW1lc0NsaWNrZWQmJnRoaXMuaG90VGFibGUucmVhZE9ubHkmJnRoaXMuZWRpdFRhYmxlKCksMD09PXRoaXMu'@;
put 'dGltZXNDbGlja2VkJiYodGhpcy50aW1lc0NsaWNrZWQrKyxzZXRUaW1lb3V0KCgpPT57dGhpcy50aW1lc0NsaWNrZWQ9MH0sMjAwKSl9Y2xlYW5FeGNlZWQoKXt0aGlzLmV4Y2VlZENlbGxzPVtdfWFwcHJvdmVyc1RvZ2dsZSgpe3RoaXMuc2hvd0FwcHJvdmVycz0hdGhpcy5zaG93QXBwcm92'@;
put 'ZXJzfWFkZFJvdygpe3RoaXMuYWRkaW5nTmV3Um93PSEwLHNldFRpbWVvdXQoKCk9Pntjb25zdCBhPXRoaXMuaG90SW5zdGFuY2U7bGV0IGY9dGhpcy5kYXRhU291cmNlLmxlbmd0aDthLmFsdGVyKCJpbnNlcnRfcm93X2JlbG93IixmLDEpLGEudXBkYXRlU2V0dGluZ3Moe2RhdGE6dGhpcy5k'@;
put 'YXRhU291cmNlfSwhMSksYS5zZWxlY3RDZWxsKHRoaXMuZGF0YVNvdXJjZS5sZW5ndGgtMSwwKSxhLnJlbmRlcigpLHRoaXMuZGF0YVNvdXJjZVtmXSYmKHRoaXMuZGF0YVNvdXJjZVtmXS5ub0xpbmtPcHRpb249ITApLHRoaXMuYWRkaW5nTmV3Um93PSExLHRoaXMucmVTZXRDZWxsVmFsaWRh'@;
put 'dGlvblZhbHVlcygpfSl9Y2FuY2VsU3VibWl0KCl7dGhpcy5kYXRhU291cmNlPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlQmVmb3JlU3VibWl0KSx0aGlzLmRhdGFTb3VyY2VCZWZvcmVTdWJtaXQ9W10sdGhpcy5ob3RUYWJsZS5kYXRhPXRoaXMuZGF0YVNv'@;
put 'dXJjZTtjb25zdCBhPXRoaXMuaG90SW5zdGFuY2U7YS51cGRhdGVTZXR0aW5ncyh7ZGF0YTp0aGlzLmRhdGFTb3VyY2UsY29sSGVhZGVyczp0aGlzLmhlYWRlckNvbHVtbnMsY29sdW1uczp0aGlzLmNlbGxWYWxpZGF0aW9uLG1vZGlmeUNvbFdpZHRoOmZ1bmN0aW9uKGYsZCl7cmV0dXJuIDA9'@;
put 'PT1kPzYwOmY+NTAwPzUwMDpmfX0sITEpLGEuc2VsZWN0Q2VsbCgwLDApLGEucmVuZGVyKCksYS52YWxpZGF0ZVJvd3ModGhpcy5tb2RpZmVkUm93c0luZGV4ZXMpLHRoaXMucmVTZXRDZWxsVmFsaWRhdGlvblZhbHVlcygpfWdldFJvd3NTdWJtaXR0aW5nQ291bnQoKXt0aGlzLnNhc1NlcnZp'@;
put 'Y2UuZ2V0U2FzanNDb25maWcoKS5kZWJ1ZyYmKHRoaXMubG9nZ2VyU2VydmljZS5sb2codGhpcy5kYXRhU291cmNlKSx0aGlzLmxvZ2dlclNlcnZpY2UubG9nKHRoaXMuZGF0YVNvdXJjZVVuY2hhbmdlZCkpO2xldCBhPTAsZj0wLGQ9MDt0aGlzLm1vZGlmZWRSb3dzSW5kZXhlcz1bXSx0aGlz'@;
put 'LmRhdGFNb2RpZmllZD1bXTtmb3IobGV0IGg9MDtoPHRoaXMuZGF0YVNvdXJjZS5sZW5ndGg7aCsrKXtsZXQgbT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZVtoXSk7aWYoIlllcyI9PT1tLl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyl0aGlzLmRh'@;
put 'dGFNb2RpZmllZC5wdXNoKG0pLGYrKztlbHNle2xldCBfPXRoaXMuZGF0YVNvdXJjZVVuY2hhbmdlZC5maW5kKE89Pntmb3IobGV0IFggb2YgdGhpcy5oZWFkZXJQa3MpaWYoT1tYXSE9PW1bWF0pcmV0dXJuITE7cmV0dXJuITB9KTtfP0pTT04uc3RyaW5naWZ5KG0pIT09SlNPTi5zdHJpbmdp'@;
put 'ZnkoXykmJih0aGlzLmRhdGFNb2RpZmllZC5wdXNoKG0pLHRoaXMubW9kaWZlZFJvd3NJbmRleGVzLnB1c2goaCksYSsrKToodGhpcy5kYXRhTW9kaWZpZWQucHVzaChtKSx0aGlzLm1vZGlmZWRSb3dzSW5kZXhlcy5wdXNoKGgpLGQrKyl9fXRoaXMucm93c0NoYW5nZWQ9e3Jvd3NVcGRhdGVk'@;
put 'OmEscm93c0RlbGV0ZWQ6Zixyb3dzQWRkZWQ6ZH19dmFsaWRhdGVQcmltYXJ5S2V5cygpe2NvbnN0IGE9dGhpcy5ob3RJbnN0YW5jZTtsZXQgZj1hLmdldERhdGEoKTt0aGlzLnBrRmllbGRzPVtdO2ZvcihsZXQgXz0wO188Zi5sZW5ndGg7XysrKXtsZXQgTz0iIjtmb3IobGV0IFg9MTtYPHRo'@;
put 'aXMucmVhZE9ubHlGaWVsZHMrMTtYKyspTz1PKyJ8IitmW19dW1hdO3RoaXMucGtGaWVsZHMucHVzaChPKX1sZXQgbSxkPVtdLGg9dGhpcy5kYXRhU291cmNlLmxlbmd0aDtmb3IobGV0IF89MDtfPHRoaXMucGtGaWVsZHMubGVuZ3RoO18rKylmb3IobGV0IE89MDtPPHRoaXMucGtGaWVsZHMu'@;
put 'bGVuZ3RoO08rKyl0aGlzLnBrRmllbGRzW19dPT09dGhpcy5wa0ZpZWxkc1tPXSYmTyE9PV8mJmQucHVzaChPKTtpZih0aGlzLnBrRmllbGRzLmxlbmd0aD5oKWZvcihsZXQgXz1oO188dGhpcy5wa0ZpZWxkcy5sZW5ndGg7XysrKWZvcihsZXQgTz1oO088dGhpcy5wa0ZpZWxkcy5sZW5ndGg7'@;
put 'TysrKV88TyYmdGhpcy5wa0ZpZWxkc1tfXT09PXRoaXMucGtGaWVsZHNbT10mJmQucHVzaChPKTtmb3IobGV0IF89MDtfPGQubGVuZ3RoO18rKylmb3IobGV0IE89MTtPPHRoaXMucmVhZE9ubHlGaWVsZHMrMTtPKyspbT1hLmdldENlbGxNZXRhKGRbX10sTyksbS52YWxpZD0hMSxtLmR1cEtl'@;
put 'eT0hMCxhLnJlbmRlcigpO3RoaXMuZHVwbGljYXRlUGtJbmRleGVzPVsuLi5uZXcgU2V0KGQuc29ydCgpKV19cmVTZXRDZWxsVmFsaWRhdGlvblZhbHVlcyhhPSExLGYpe2NvbnN0IGQ9dGhpcy5ob3RJbnN0YW5jZTtmb3IobGV0IGggb2YgdGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZSl7Y29u'@;
put 'c3QgbT1oLnZhbHVlcy5tYXAoXz0+X1t0aGlzLmNlbGxWYWxpZGF0aW9uRmllbGRzLlJBV19WQUxVRV0pO2QuYmF0Y2goKCk9Pntjb25zdCBfPWQuZ2V0Q2VsbE1ldGEoaC5yb3csaC5jb2wpLE89dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShfLmRhdGF8fCIiKTtsZXQgWDtPJiYoWD10aGlz'@;
put 'LmRjVmFsaWRhdG9yPy5nZXREcURyb3Bkb3duU291cmNlKE8pKSxYfHwoWD1bXSk7Y29uc3QgYWU9Wy4uLm5ldyBTZXQoWy4uLlgsLi4ubV0pXTt0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPy51cGRhdGVSdWxlKGguY29sLHtzb3VyY2U6YWV9KSxkLnNldENlbGxNZXRhKGgucm93'@;
put 'LGguY29sLCJzb3VyY2UiLGFlKSxoLnZhbHVlcy5sZW5ndGg+MCYmKGQuc2V0Q2VsbE1ldGEoaC5yb3csaC5jb2wsInJlbmRlcmVyIiwiYXV0b2NvbXBsZXRlIiksZC5zZXRDZWxsTWV0YShoLnJvdyxoLmNvbCwiZWRpdG9yIiwiYXV0b2NvbXBsZXRlIiksZC5zZXRDZWxsTWV0YShoLnJvdyxo'@;
put 'LmNvbCwic3RyaWN0IixoLnN0cmljdCksZC5zZXRDZWxsTWV0YShoLnJvdyxoLmNvbCwiZmlsdGVyIiwhMSksdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj8udXBkYXRlUnVsZShoLmNvbCx7cmVuZGVyZXI6ImF1dG9jb21wbGV0ZSIsZWRpdG9yOiJhdXRvY29tcGxldGUiLHN0cmlj'@;
put 'dDpoLnN0cmljdCxmaWx0ZXI6ITF9KSksdGhpcy5yZVNldEV4dGVuZGVkQ2VsbFZhbGlkYXRpb25WYWx1ZXMoaCx2b2lkIDAsYSxmKSxkLnJlbmRlcigpfSl9fXJlU2V0RXh0ZW5kZWRDZWxsVmFsaWRhdGlvblZhbHVlcyhhLGYsZD0hMSxoKXtpZihhKXtmfHwoZj1hLnJvdyk7Y29uc3QgXz10'@;
put 'aGlzLmdldEV4dGVuZGVkVmFsdWVzQnlDZWxsVmFsdWUoYSk7dGhpcy5zZXRFeHRlbmRlZFZhbHVlc1RvQ2VsbHMoYSxmLF8sZCxoKX1lbHNlIGZvcihsZXQgXyBvZiB0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlKXtjb25zdCBPPXRoaXMuZ2V0RXh0ZW5kZWRWYWx1ZXNCeUNlbGxWYWx1ZShf'@;
put 'KTt0aGlzLnNldEV4dGVuZGVkVmFsdWVzVG9DZWxscyhfLF8ucm93LE8sZCxoKX19c2V0RXh0ZW5kZWRWYWx1ZXNUb0NlbGxzKGEsZixkLGg9ITEsbSl7Y29uc3QgXz10aGlzLmhvdEluc3RhbmNlO2xldCBPPVtdO2ZvcihsZXQgWCBvZiBkKU8uaW5kZXhPZihYLkVYVFJBX0NPTF9OQU1FKTww'@;
put 'JiZPLnB1c2goWC5FWFRSQV9DT0xfTkFNRSk7Zm9yKGxldCBYIG9mIE8pe2NvbnN0IGFlPWQuZmlsdGVyKGd0PT5ndC5FWFRSQV9DT0xfTkFNRT09PVgpO2xldCBwZT1hZS5tYXAoZ3Q9PiJDIj09PWd0LkRJU1BMQVlfVFlQRT9ndC5SQVdfVkFMVUVfQ0hBUjpndC5SQVdfVkFMVUVfTlVNKTtj'@;
put 'b25zdCBiZT1fLnByb3BUb0NvbChYKTt0aGlzLmRpc2FibGVkQmFzaWNEeW5hbWljQ2VsbFZhbGlkYXRpb25NYXAuZmluZChndD0+Z3Qucm93PT09ZiYmZ3QuY29sPT09YmUpfHx0aGlzLmRpc2FibGVkQmFzaWNEeW5hbWljQ2VsbFZhbGlkYXRpb25NYXAucHVzaCh7cm93OmYsY29sOmJlLGFj'@;
put 'dGl2ZTohMX0pLF8uc2V0Q2VsbE1ldGEoZixiZSwicmVuZGVyZXIiLCJhdXRvY29tcGxldGUiKSxfLnNldENlbGxNZXRhKGYsYmUsImVkaXRvciIsImF1dG9jb21wbGV0ZSIpLF8uc2V0Q2VsbE1ldGEoZixiZSwic3RyaWN0IixhLnN0cmljdCksXy5zZXRDZWxsTWV0YShmLGJlLCJmaWx0ZXIi'@;
put 'LCExKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPy51cGRhdGVSdWxlKGJlLHtyZW5kZXJlcjoiYXV0b2NvbXBsZXRlIixlZGl0b3I6ImF1dG9jb21wbGV0ZSIsc3RyaWN0OmEuc3RyaWN0LGZpbHRlcjohMX0pO2NvbnN0IFZlPV8uZ2V0Q2VsbE1ldGEoZixiZSksWmU9dGhpcy5k'@;
put 'Y1ZhbGlkYXRvcj8uZ2V0UnVsZShWZS5kYXRhfHwiIik7bGV0IGx0O1plJiYobHQ9dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0RHFEcm9wZG93blNvdXJjZShaZSkpLGx0fHwobHQ9W10pLCJudW1lcmljIj09PVplPy50eXBlPyhsdD10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEFycmF5VmFsdWVz'@;
put 'KGx0LCJudW1iZXIiKSxwZT10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEFycmF5VmFsdWVzKHBlLCJudW1iZXIiKSk6KGx0PXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMobHQsInN0cmluZyIpLHBlPXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMo'@;
put 'cGUsInN0cmluZyIpKTtjb25zdCBkdD1bLi4ubmV3IFNldChbLi4ubHQsLi4ucGVdKV07aWYoXy5zZXRDZWxsTWV0YShmLGJlLCJzb3VyY2UiLGR0KSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPy51cGRhdGVSdWxlKGJlLHtzb3VyY2U6ZHR9KSxoKXtpZihtJiZtIT09ZilyZXR1'@;
put 'cm47Y29uc3QgZ3Q9YWUuZmluZChqdD0+MT09PWp0LkZPUkNFX0ZMQUcpO2d0JiZzZXRUaW1lb3V0KCgpPT57Xy5zZXREYXRhQXRDZWxsKGYsYmUsIkMiPT09Z3QuRElTUExBWV9UWVBFP2d0LlJBV19WQUxVRV9DSEFSOmd0LlJBV19WQUxVRV9OVU0sImZvcmNlX2NlbGxfdmFsaWRhdGlvbl92'@;
put 'YWx1ZSIpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD09PWYmJih0aGlzLmRhdGFTb3VyY2VbdGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4XVtYXT0iQyI9PT1ndC5ESVNQTEFZX1RZUEU/Z3QuUkFXX1ZBTFVFX0NIQVI6Z3QuUkFXX1ZBTFVFX05VTSl9KX19fWdldEV4dGVuZGVkVmFs'@;
put 'dWVzQnlDZWxsVmFsdWUoYSxmKXtjb25zdCBoPXRoaXMuaG90SW5zdGFuY2UuZ2V0RGF0YUF0Q2VsbChmfHxhLnJvdyxhLmNvbCksbT0oYS52YWx1ZXMuZmluZChhZT0+YWVbdGhpcy5jZWxsVmFsaWRhdGlvbkZpZWxkcy5SQVdfVkFMVUVdPT09aCl8fFtdKVt0aGlzLmNlbGxWYWxpZGF0aW9u'@;
put 'RmllbGRzLkRJU1BMQVlfSU5ERVhdLF89YS5leHRlbmRlZF92YWx1ZXM/LmZpbHRlcihhZT0+YWVbMF09PT1tKSxPPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5leHRlbmRlZENlbGxWYWxpZGF0aW9uRmllbGRzKSxYPVtdO2ZvcihsZXQgYWUgb2YgX3x8W10pe2xldCBwZT17'@;
put 'fTtmb3IobGV0IGJlIG9mIE9iamVjdC5rZXlzKE8pKXBlW2JlXT1hZVtPW2JlXV07WC5wdXNoKHBlKX1yZXR1cm4gWH1jaGVja1NhdmUoKXtpZih0aGlzLmdldFJvd3NTdWJtaXR0aW5nQ291bnQoKSwwPT09dGhpcy5yb3dzQ2hhbmdlZC5yb3dzQWRkZWQmJjA9PT10aGlzLnJvd3NDaGFuZ2Vk'@;
put 'LnJvd3NVcGRhdGVkJiYwPT09dGhpcy5yb3dzQ2hhbmdlZC5yb3dzRGVsZXRlZClyZXR1cm4gdGhpcy5iYWRFZGl0VGl0bGU9Ik5vIGNoYW5nZXMgdG8gc3VibWl0Iix0aGlzLmJhZEVkaXRDYXVzZT0iUGxlYXNlIG1vZGlmeSBzb21lIHZhbHVlcyBhbmQgdHJ5IGFnYWluLiIsdm9pZCh0aGlz'@;
put 'LmJhZEVkaXQ9ITApO2NvbnN0IGE9dGhpcy5ob3RJbnN0YW5jZTt0aGlzLmRhdGFTb3VyY2VCZWZvcmVTdWJtaXQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2UpO2ZvcihsZXQgZD0wO2Q8dGhpcy5kYXRhU291cmNlLmxlbmd0aDtkKyspZGVsZXRlIHRoaXMu'@;
put 'ZGF0YVNvdXJjZVtkXS5ub0xpbmtPcHRpb247YS51cGRhdGVTZXR0aW5ncyh7ZGF0YTp0aGlzLmRhdGFTb3VyY2UsY29sSGVhZGVyczp0aGlzLmhlYWRlckNvbHVtbnMsY29sdW1uczp0aGlzLmNlbGxWYWxpZGF0aW9uLG1vZGlmeUNvbFdpZHRoOmZ1bmN0aW9uKGQsaCl7cmV0dXJuIGQ+NTAw'@;
put 'PzUwMDpkfX0sITEpLHRoaXMucmVTZXRDZWxsVmFsaWRhdGlvblZhbHVlcygpLGwuY250PTAsbC5ub25Qa0NudD0wO2xldCBmPWEuZ2V0RGF0YSgpO2lmKGYubGVuZ3RoPjEmJmEuaXNFbXB0eVJvdyhmLmxlbmd0aC0xKSYmYS5hbHRlcigicmVtb3ZlX3JvdyIsZi5sZW5ndGgtMSksdGhpcy52'@;
put 'YWxpZGF0ZVByaW1hcnlLZXlzKCksMCE9PXRoaXMuZHVwbGljYXRlUGtJbmRleGVzLmxlbmd0aClyZXR1cm4gdGhpcy5wa0R1cHM9ITAsdGhpcy5zdWJtaXQ9ITEsdm9pZCB0aGlzLmNhbmNlbFN1Ym1pdCgpO3RoaXMucGtEdXBzPSExLGEudmFsaWRhdGVSb3dzKHRoaXMubW9kaWZlZFJvd3NJ'@;
put 'bmRleGVzLCgpPT57dGhpcy5jaGVja0ludmFsaWQoKT90aGlzLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJWYWxpZGF0aW9uIGVycm9yIiwiSW52YWxpZCBWYWx1ZXMgYXJlIFByZXNlbnQiKToodGhpcy5zdWJtaXQ9ITAsdGhpcy52YWxpZGF0aW9uRG9uZT0xLHNldFRpbWVvdXQoKCk9'@;
put 'Pntkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZm9ybUZpZWxkc184IikuZm9jdXMoKX0pKX0pfXNhdmVUYWJsZShhKXt2YXIgZj10aGlzO3JldHVybiB5aShmdW5jdGlvbiooKXtpZihmLmhvdEluc3RhbmNlLmdldERhdGEoKSxhPShhPWEuZmlsdGVyKG09PiEhZi5kYXRhTW9kaWZpZWQuZmlu'@;
put 'ZChPPT57Zm9yKGxldCBYIG9mIGYuaGVhZGVyUGtzKWlmKE9bWF0hPT1tW1hdKXJldHVybiExO3JldHVybiEwfSkpKS5tYXAobT0+e2xldCBfPW0uX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fO3JldHVybiBkZWxldGUgbS5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18sbS5f'@;
put 'X19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX189XyxPYmplY3Qua2V5cyhtKS5tYXAoTz0+eyJudW1lcmljIj09PWYuZGNWYWxpZGF0b3I/LmdldFJ1bGUoTyk/LnR5cGUmJiIuIj09PW1bT10mJihtW09dPW51bGwpfSksbX0pLGYubG9nZ2VyU2VydmljZS5sb2coIkRhdGEgc3VibWl0dGVk'@;
put 'IixhKSxmLmNoZWNrSW52YWxpZCgpKXJldHVybiBmLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJWYWxpZGF0aW9uIGVycm9yIiwiSW52YWxpZCBWYWx1ZXMgYXJlIFByZXNlbnQiKSxmLmNhbmNlbFN1Ym1pdCgpLHZvaWQoZi5zdWJtaXQ9ITEpO2lmKGYudmFsaWRhdGlvbkRvbmU9MCxm'@;
put 'LnNhdmVMb2FkaW5nPSEwLGwuY250PDEmJjA9PT1mLmR1cGxpY2F0ZVBrSW5kZXhlcy5sZW5ndGgmJmwubm9uUGtDbnQ8MSl7Zi5zYXZlTG9hZGluZz0hMCxmLmRpc2FibGVTdWJtaXQ9ITEsZi5zdWJtaXQ9ITA7bGV0IG09e0FDVElPTjoiTE9BRCJ9O2lmKGYubWVzc2FnZT1mLm1lc3NhZ2Uu'@;
put 'cmVwbGFjZSgvXG4vZywiLiAiKSxtLk1FU1NBR0U9Zi5tZXNzYWdlLG0uTElCRFM9Zi5saWJkcyxmLmNvbHMpe2NvbnN0IF89YS5zbGljZSgwLGYubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0KTtpZih5aWVsZCBmLnNhc1N0b3JlU2VydmljZS51cGRhdGVUYWJsZShtLF8s'@;
put 'IlNBU0NvbnRyb2xUYWJsZSIsImVkaXRvcnMvc3RhZ2VkYXRhIixmLiRkYXRhRm9ybWF0cykudGhlbihYPT57aWYodHlwZW9mIFguc2FzcGFyYW1zPCJ1IilyZXR1cm4gZi5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrWC5zYXNwYXJhbXNbMF0uRFNJRCksITA7bGV0IGFlPSJTdWJt'@;
put 'aXQgcmVxdWVzdCBmYWlsZWQiO1gmJihhZSs9YFxuJHsic3RyaW5nIj09dHlwZW9mIFg/WDpKU09OLnN0cmluZ2lmeShYKX1gKSxmLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbCgiZWRpdG9ycy9zdGFnZWRhdGEiLGFlLG51bGwsIlN1Ym1pdCBlcnJvciIpfSkuY2F0Y2goWD0+e2NvbnNv'@;
put 'bGUubG9nKCJlcnIiLFgpLGwuY250PTAsbC5ub25Qa0NudD0wLGYuZGlzYWJsZVN1Ym1pdD0hMCxmLnN1Ym1pdD0hMTtsZXQgYWU9InN0cmluZyI9PXR5cGVvZiBYP1g6SlNPTi5zdHJpbmdpZnkoWCk7cmV0dXJuIGYuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCJlZGl0b3JzL3N0YWdl'@;
put 'ZGF0YSIsYFN1Ym1pdCByZXF1ZXN0IGZhaWxlZFxuJHthZX1gLG51bGwsIlN1Ym1pdCBlcnJvciIpLCExfSkpcmV0dXJufX1sLmNudD49MT8oZi5wa051bGw9ITAsZi5zdWJtaXQ9ITApOmYuc3VibWl0PSExLGwubm9uUGtDbnQ+PTE/KGYubm9Qa051bGw9ITAsZi5zdWJtaXQ9ITApOmYuc3Vi'@;
put 'bWl0PSExLGYuY2FuY2VsU3VibWl0KCksbC5jbnQ9MCxsLm5vblBrQ250PTAsZi5kaXNhYmxlU3VibWl0PSEwfSkoKX12YWxpZGF0b3JSdWxlU291cmNlKGEpe3JldHVybiB0aGlzLmRjVmFsaWRhdG9yPy5nZXRSdWxlKGEpfWNoZWNrSW52YWxpZCgpe3JldHVybiB0aGlzLmhvdEluc3RhbmNl'@;
put 'Q29tcExpc3QuZmlyc3QuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLmh0SW52YWxpZCIpLmxlbmd0aD4wfWdvVG9FZGl0b3IoKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvIil9Y2xvc2VSZWNvcmRFZGl0KGEpe3RoaXMuY3VycmVudEVkaXRSZWNvcmRJ'@;
put 'bmRleD0tMSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkPXZvaWQgMCx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPXZvaWQgMCwiQUREIj09PXRoaXMucmVjb3JkQWN0aW9uJiYhYSYmKHRoaXMuZGF0YVNvdXJjZT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMucHJldkRh'@;
put 'dGFTb3VyY2UpLHRoaXMuaG90SW5zdGFuY2UudXBkYXRlU2V0dGluZ3Moe2RhdGE6dGhpcy5kYXRhU291cmNlfSwhMSkpfWNvbmZpcm1SZWNvcmRFZGl0KGE9ITApe2NvbnN0IGY9dGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4O2EmJih0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg9LTEp'@;
put 'LHRoaXMuY29sdW1uSGVhZGVyLm1hcChoPT57Y29uc3QgbT10aGlzLmN1cnJlbnRFZGl0UmVjb3JkW2hdLF89Im51bSI9PT10aGlzLiRkYXRhRm9ybWF0cz8udmFyc1toXT8udHlwZSxPPSgwLHUzLmlzU3BlY2lhbE1pc3NpbmcpKG0pO18mJiFpc05hTihtKSYmIU8mJih0aGlzLmN1cnJlbnRF'@;
put 'ZGl0UmVjb3JkW2hdPTEqbSl9KSx0aGlzLmRhdGFTb3VyY2VbZl09dGhpcy5jdXJyZW50RWRpdFJlY29yZCx0aGlzLmhvdFRhYmxlLmRhdGFbZl09dGhpcy5jdXJyZW50RWRpdFJlY29yZCx0aGlzLmhvdEluc3RhbmNlLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZX0sITEp'@;
put 'LGEmJih0aGlzLmN1cnJlbnRFZGl0UmVjb3JkPXZvaWQgMCl9b25OZXh0UmVjb3JkKCl7dGhpcy5jb25maXJtUmVjb3JkRWRpdCghMSksdGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4PXRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD49dGhpcy5kYXRhU291cmNlLmxlbmd0aC0xPzA6dGhp'@;
put 'cy5jdXJyZW50RWRpdFJlY29yZEluZGV4KzEsdGhpcy5lZGl0UmVjb3JkKG51bGwsdGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4KX1vblByZXZpb3VzUmVjb3JkKCl7dGhpcy5jb25maXJtUmVjb3JkRWRpdCghMSksdGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4PXRoaXMuY3VycmVudEVk'@;
put 'aXRSZWNvcmRJbmRleDw9MD90aGlzLmRhdGFTb3VyY2UubGVuZ3RoLTE6dGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4LTEsdGhpcy5lZGl0UmVjb3JkKG51bGwsdGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4KX1hZGRSZWNvcmRCdXR0b25DbGljaygpe3RoaXMucmVzdHJpY3Rpb25zLnJl'@;
put 'c3RyaWN0QWRkUmVjb3JkP3RoaXMuZXZlbnRTZXJ2aWNlLnNob3dEZW1vTGltaXRNb2RhbCgiQWRkIFJlY29yZCIpOnRoaXMuYWRkRWRpdE5ld1JlY29yZCgpfWFkZEVkaXROZXdSZWNvcmQoKXt0aGlzLmFkZFJlY29yZCgpLHNldFRpbWVvdXQoKCk9Pnt0aGlzLmVkaXRSZWNvcmQobnVsbCx0'@;
put 'aGlzLmRhdGFTb3VyY2UubGVuZ3RoLTEsITApfSwxZTMpfWFkZFJlY29yZCgpe3RoaXMuYWRkUm93KCl9ZWRpdFJlY29yZChhLGYsZCl7aWYodGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RFZGl0UmVjb3JkKXRoaXMuZXZlbnRTZXJ2aWNlLnNob3dEZW1vTGltaXRNb2RhbCgiRWRpdCBSZWNv'@;
put 'cmQiKTtlbHNlIGlmKCEodm9pZCAwPT09Znx8ZjwwfHx0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEVkaXRSZWNvcmQpKXtpZih0aGlzLnJlY29yZEFjdGlvbj1kPyJBREQiOiJFRElUIix0aGlzLmhvdFRhYmxlLnJlYWRPbmx5JiZ0aGlzLmVkaXRUYWJsZSghMSxkKSx0aGlzLmN1cnJlbnRF'@;
put 'ZGl0UmVjb3JkVmFsaWRhdG9yPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kY1ZhbGlkYXRvciksZCl0aGlzLnByZXZEYXRhU291cmNlPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlKSx0aGlzLnByZXZEYXRhU291cmNlLnBvcCgpO2Vsc2V7'@;
put 'Y29uc3QgaD10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuaG90SW5zdGFuY2UuZ2V0Q2VsbE1ldGFBdFJvdyhmKSk7Zm9yKGxldCBtIG9mIGgpaWYobSl7Y29uc3QgXz1tLnByb3A/LnRvU3RyaW5nKCk7ZGVsZXRlIG0ucHJvcCxkZWxldGUgbS5kYXRhLHRoaXMuY3VycmVudEVk'@;
put 'aXRSZWNvcmRWYWxpZGF0b3I/LnVwZGF0ZVJ1bGUobS5jb2wsey4uLm0sZGF0YTpffSl9fXRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD1mLHRoaXMuY3VycmVudEVkaXRSZWNvcmQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2VbZl0pfX10b2dnbGVIb3RQ'@;
put 'bHVnaW4oYSxmKXtjb25zdCBkPXRoaXMuaG90SW5zdGFuY2U7ZC5iYXRjaCgoKT0+e2xldCBoPWQuZ2V0UGx1Z2luKGEpO2g/KHNldFRpbWVvdXQoKCk9PntmP2guZW5hYmxlUGx1Z2luKCk6aC5kaXNhYmxlUGx1Z2luKCl9LDEwMCksZC5yZW5kZXIoKSk6Y29uc29sZS53YXJuKCJUb2dnbGUg'@;
put 'SG90IFBsdWdpbiBmYWlsZWQgLSBQbHVnaW4gbmFtZWQ6ICIrYSsiIC0gY291bGQgbm90IGJlIGZvdW5kLiIpfSl9ZHluYW1pY0NlbGxWYWxpZGF0aW9uRGlzYWJsZWQoYSxmKXtyZXR1cm4hIXRoaXMuZGlzYWJsZWRCYXNpY0R5bmFtaWNDZWxsVmFsaWRhdGlvbk1hcC5maW5kKGg9Pmgucm93'@;
put 'PT09YSYmaC5jb2w9PT1mJiYhaC5hY3RpdmUpfWR5bmFtaWNDZWxsVmFsaWRhdGlvbihhLGYpe2lmKHRoaXMuZHluYW1pY0NlbGxWYWxpZGF0aW9uRGlzYWJsZWQoYSxmKSlyZXR1cm47Y29uc3QgZD10aGlzLmhvdEluc3RhbmNlO2lmKGQuZ2V0Q2VsbE1ldGEoYSxmKS5yZWFkT25seSlyZXR1'@;
put 'cm47Y29uc3QgbT1kLmdldERhdGFBdENlbGwoYSxmKSxfPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlW2FdKSxPPU9iamVjdC5rZXlzKF8pW2ZdLFg9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlbGV0ZUtleXNBbmRIYXNoKF8sW08sIm5vTGlua09wdGlvbiJdLCEx'@;
put 'KSxhZT10aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLmZpbmRJbmRleChwZT0+cGUuaGFzaD09PVgpO2lmKGFlPi0xKXtsZXQgcGU9dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZVthZV0udmFsdWVzLm1hcChWZT0+VmVbdGhpcy5jZWxsVmFsaWRhdGlvbkZpZWxkcy5SQVdfVkFMVUVdKTtjb25z'@;
put 'dCBiZT0oZC5nZXRDZWxsTWV0YShhLGYpLnNvdXJjZXx8W10pLmxlbmd0aDwxLHhlPSIgIiE9PW07ZC5iYXRjaCgoKT0+e2NvbnN0IFZlPWQuZ2V0Q2VsbE1ldGEoYSxmKSxaZT10aGlzLmRjVmFsaWRhdG9yPy5nZXRSdWxlKFZlLmRhdGF8fCIiKTtsZXQgbHQ7WmUmJihsdD10aGlzLmRjVmFs'@;
put 'aWRhdG9yPy5nZXREcURyb3Bkb3duU291cmNlKFplKSksbHR8fChsdD1bXSksIm51bWVyaWMiPT09WmU/LnR5cGU/KGx0PXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMobHQsIm51bWJlciIpLHBlPXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMocGUs'@;
put 'Im51bWJlciIpKToobHQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyhsdCwic3RyaW5nIikscGU9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyhwZSwic3RyaW5nIikpO2NvbnN0IGR0PVsuLi5uZXcgU2V0KFsuLi5sdCwuLi5wZV0pXTtpZihkLnNl'@;
put 'dENlbGxNZXRhKGEsZiwic291cmNlIixkdCksdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj8udXBkYXRlUnVsZShmLHtzb3VyY2U6ZHR9KSx0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlW2FlXS52YWx1ZXMubGVuZ3RoPjApe2NvbnN0IGd0PXRoaXMuY2VsbFZhbGlkYXRpb25Tb3Vy'@;
put 'Y2VbYWVdLnN0cmljdDtkLnNldENlbGxNZXRhKGEsZiwicmVuZGVyZXIiLCJhdXRvY29tcGxldGUiKSxkLnNldENlbGxNZXRhKGEsZiwiZWRpdG9yIiwiYXV0b2NvbXBsZXRlIiksZC5zZXRDZWxsTWV0YShhLGYsInN0cmljdCIsZ3QpLGQuc2V0Q2VsbE1ldGEoYSxmLCJmaWx0ZXIiLCExKSx0'@;
put 'aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPy51cGRhdGVSdWxlKGYse3JlbmRlcmVyOiJhdXRvY29tcGxldGUiLGVkaXRvcjoiYXV0b2NvbXBsZXRlIixzdHJpY3Q6Z3QsZmlsdGVyOiExfSl9dGhpcy5yZVNldEV4dGVuZGVkQ2VsbFZhbGlkYXRpb25WYWx1ZXModGhpcy5jZWxsVmFs'@;
put 'aWRhdGlvblNvdXJjZVthZV0sYSxiZSYmeGUpLGQucmVuZGVyKCl9KX1pZihhZTwwKXtjb25zdCBwZT17U0FTQ29udHJvbFRhYmxlOlt7bGliZHM6dGhpcy5saWJkcyx2YXJpYWJsZV9ubTpPfV0sc291cmNlX3JvdzpbX119LGJlPXRoaXMuZGNWYWxpZGF0b3I/LmdldERxRGV0YWlscyhPKS5m'@;
put 'aW5kKHhlPT4iU09GVFNFTEVDVF9IT09LIj09PXhlLlJVTEVfVFlQRXx8IkhBUkRTRUxFQ1RfSE9PSyI9PT14ZS5SVUxFX1RZUEUpO2JlJiYodGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5wdXNoKHtyb3c6YSxjb2w6ZixzdHJpY3Q6IkhBUkRTRUxFQ1RfSE9PSyI9PT1iZS5SVUxFX1RZUEUs'@;
put 'dmFsdWVzOltdLGhhc2g6WCxjb3VudDp0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLmxlbmd0aCsxfSksZC5zZXRDZWxsTWV0YShhLGYsInJlbmRlcmVyIixMTXQpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncy5wdXNoKGYpLGQucmVuZGVyKCksdGhpcy5zYXNTZXJ2aWNlLnJlcXVl'@;
put 'c3QoImVkaXRvcnMvZ2V0ZHluYW1pY2NvbHZhbHMiLHBlLHZvaWQgMCx7c3VwcHJlc3NTdWNjZXNzQWJvcnRNb2RhbDohMCxzdXBwcmVzc0Vycm9yQWJvcnRNb2RhbDohMH0pLnRoZW4oeGU9PntpZih4ZS5keW5hbWljX3ZhbHVlcy5tYXAoWmU9PlplW3RoaXMuY2VsbFZhbGlkYXRpb25GaWVs'@;
put 'ZHMuUkFXX1ZBTFVFXSkubGVuZ3RoPjApe2NvbnN0IFplPXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UuZmluZEluZGV4KGx0PT5sdC5oYXNoPT09WCk7WmU+LTEmJih0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlW1plXT17Li4udGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZVtaZV0scm93OmEs'@;
put 'Y29sOmYsdmFsdWVzOnhlLmR5bmFtaWNfdmFsdWVzLGV4dGVuZGVkX3ZhbHVlczp4ZS5keW5hbWljX2V4dGVuZGVkX3ZhbHVlc30pLGQuc2V0Q2VsbE1ldGEoYSxmLCJyZW5kZXJlciIsU0opLHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncy5zcGxpY2UodGhpcy5jdXJyZW50RWRpdFJl'@;
put 'Y29yZExvYWRpbmdzLmluZGV4T2YoZiksMSksZC5kZXNlbGVjdENlbGwoKSxkLnJlbmRlcigpLGQuYmF0Y2goKCk9PntzZXRUaW1lb3V0KCgpPT57dGhpcy5yZVNldENlbGxWYWxpZGF0aW9uVmFsdWVzKCEwLGEpLGQucmVuZGVyKCksZC52YWxpZGF0ZVJvd3MoW2FdKX0sMTAwKX0pfWlmKGQu'@;
put 'c2V0Q2VsbE1ldGEoYSxmLCJyZW5kZXJlciIsU0opLHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncy5zcGxpY2UodGhpcy5jdXJyZW50RWRpdFJlY29yZExvYWRpbmdzLmluZGV4T2YoZiksMSksZC5kZXNlbGVjdENlbGwoKSxkLnJlbmRlcigpLHRoaXMuY2VsbFZhbGlkYXRpb25Tb3Vy'@;
put 'Y2UubGVuZ3RoPnRoaXMudmFsaWRhdGlvblRhYmxlTGltaXQpe2NvbnN0IFplPXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UucmVkdWNlKChkdCxndCk9PmR0LmNvdW50PGd0LmNvdW50P2R0Omd0KSxsdD10aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLmluZGV4T2YoWmUpO3RoaXMuY2VsbFZh'@;
put 'bGlkYXRpb25Tb3VyY2Uuc3BsaWNlKGx0LDEpfX0pLmNhdGNoKHhlPT57Y29uc3QgVmU9dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5maW5kSW5kZXgoWmU9PlplLmhhc2g9PT1YKTt0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLnNwbGljZShWZSwxKSxkLmJhdGNoKCgpPT57ZC5zZXRDZWxs'@;
put 'TWV0YShhLGYsInJlbmRlcmVyIixSTXQpLGQucmVuZGVyKCl9KSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3Muc3BsaWNlKHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncy5pbmRleE9mKGYpLDEpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRFcnJvcnMucHVzaChmKSxzZXRUaW1l'@;
put 'b3V0KCgpPT57ZC5zZXRDZWxsTWV0YShhLGYsInJlbmRlcmVyIixTSiksZC5yZW5kZXIoKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkRXJyb3JzLnNwbGljZSh0aGlzLmN1cnJlbnRFZGl0UmVjb3JkRXJyb3JzLmluZGV4T2YoZiksMSl9LDNlMyksdGhpcy5yZVNldENlbGxWYWxpZGF0aW9uVmFs'@;
put 'dWVzKCksdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZygiZ2V0ZHluYW1pY2NvbHZhbHMgZXJyb3I6Iix4ZSl9KSl9fWNoZWNrRW1wdHlSb3dXaGVuRmlsdGVyKCl7dGhpcy56ZXJvRmlsdGVyUm93cz0hMSx0eXBlb2YgdGhpcy5maWx0ZXJfcGs8InUiJiYxPT09dGhpcy5ob3RUYWJsZS5kYXRhLmxl'@;
put 'bmd0aCYmW251bGwsIiJdLmluY2x1ZGVzKHRoaXMuaG90VGFibGUuZGF0YVswXVt0aGlzLmhlYWRlclBrc1swXV0pJiYodGhpcy56ZXJvRmlsdGVyUm93cz0hMCl9b25SZWNvcmRJbnB1dEZvY3VzKGEpe3RoaXMuZHluYW1pY0NlbGxWYWxpZGF0aW9uKHRoaXMuY3VycmVudEVkaXRSZWNvcmRJ'@;
put 'bmRleCxhLmNvbE5hbWUpfWV4ZWN1dGVEeW5hbWljQ2VsbFZhbGlkYXRpb25JZkFwcGxpY2FibGUoYSxmLGQpe2NvbnN0IGg9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlbGV0ZUtleXNBbmRIYXNoKHRoaXMuZGF0YVNvdXJjZVtkXSxbYSwibm9MaW5rT3B0aW9uIl0pLG09dGhpcy5jZWxsVmFsaWRh'@;
put 'dGlvblNvdXJjZS5maW5kKF89Pl8uaGFzaD09PWgmJmY9PT1fLmNvbCk7aWYobSYmbS5leHRlbmRlZF92YWx1ZXMmJm0uZXh0ZW5kZWRfdmFsdWVzLmxlbmd0aD4wKXtjb25zdCBfPXRoaXMuZ2V0RXh0ZW5kZWRWYWx1ZXNCeUNlbGxWYWx1ZShtLGQpO3RoaXMuc2V0RXh0ZW5kZWRWYWx1ZXNU'@;
put 'b0NlbGxzKG0sZCxfLCEwKX19dmlld2JveE1hbmFnZXIoKXt0aGlzLnZpZXdib3hlcz0hMH1nZXQgdG90YWxSb3dzQ2hhbmdlZCgpe3JldHVybiB0aGlzLnJvd3NDaGFuZ2VkLnJvd3NVcGRhdGVkK3RoaXMucm93c0NoYW5nZWQucm93c0RlbGV0ZWQrdGhpcy5yb3dzQ2hhbmdlZC5yb3dzQWRk'@;
put 'ZWR9bmdPbkluaXQoKXt2YXIgYT10aGlzO3JldHVybiB5aShmdW5jdGlvbiooKXthLmxpY2VuY2VTZXJ2aWNlLmhvdF9saWNlbnNlX2tleS5zdWJzY3JpYmUoZD0+e2EuaG90VGFibGUubGljZW5zZUtleT1kfSksYS5fcXVlcnk9YS5zYXNTdG9yZVNlcnZpY2UucXVlcnkuc3Vic2NyaWJlKGQ9'@;
put 'PntkLmxpYmRzPT09YS5saWJkcyYmKGEud2hlcmVTdHJpbmc9ZC5zdHJpbmcsYS5jbGF1c2VzPWQub2JqKX0pO2xldCBmPXt9O3R5cGVvZiBhLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5saWJNZW08InUiJiYoYS5saWJkcz1hLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5saWJNZW0sYS5maWx0ZXJf'@;
put 'cGs9YS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZmlsdGVySWQsImVkaXQtcmVjb3JkIj09PWEucm91dGUuc25hcHNob3QudXJsWzBdLnBhdGgmJihhLnJlY29yZEFjdGlvbj10eXBlb2YgYS5maWx0ZXJfcGs8InUiPyJFRElUIjoiQUREIiksZi5MSUJEUz1hLmxpYmRzLHR5cGVvZiBhLmZpbHRl'@;
put 'cl9wazwidSImJihmLkZJTFRFUl9SSz1wYXJzZUludChhLmZpbHRlcl9waykpLGYuT1VUREVTVD0iV0VCIixhLmxpYmRzJiYoSm4uZWRpdG9yLmxpYnJhcnk9YS5saWJkcy5zcGxpdCgiLiIpWzBdLEpuLmVkaXRvci50YWJsZT1hLmxpYmRzLnNwbGl0KCIuIilbMV0pKSxhLmxpYmRzJiYoYS5n'@;
put 'ZXRkYXRhRXJyb3I9ITEseWllbGQgYS5zYXNTdG9yZVNlcnZpY2UuY2FsbFNlcnZpY2UoZiwiU0FTQ29udHJvbFRhYmxlIiwiZWRpdG9ycy9nZXRkYXRhIixhLmxpYmRzKS50aGVuKGQ9PnthLmluaXRTZXR1cChkKX0pLmNhdGNoKGQ9PnthLmdldGRhdGFFcnJvcj0hMCxhLnRhYmxlVHJ1ZT0h'@;
put 'MH0pKX0pKCl9bmdBZnRlclZpZXdJbml0KCl7fWluaXRTZXR1cChhKXtpZih0aGlzLmhvdEluc3RhbmNlPXRoaXMuaG90UmVnaXN0ZXJlci5nZXRJbnN0YW5jZSgiaG90SW5zdGFuY2UiKSx0aGlzLmdldGRhdGFFcnJvcnx8IWF8fCFhLmRhdGEpcmV0dXJuO3RoaXMuY29scz1hLmRhdGEuY29s'@;
put 'cyx0aGlzLmRzbWV0YT1hLmRhdGEuZHNtZXRhO2NvbnN0IGY9dGhpcy5ob3RJbnN0YW5jZSxkPWEuZGF0YS5hcHByb3ZlcnM7dGhpcy5jb2xzJiYodGhpcy5oZWFkZXJBcnJheT0obD0+e2NvbnN0IGM9W107Zm9yKGxldCBhIG9mIGwpIl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyIh'@;
put 'PT1hLk5BTUUmJmMucHVzaChhLk5BTUUpO3JldHVybiBjfSkodGhpcy5jb2xzKSksZC5mb3JFYWNoKG09Pnt0aGlzLmFwcHJvdmVycy5wdXNoKG0uUEVSU09OTkFNRSl9KSx0aGlzLnRhYmxlVHJ1ZT0hMCx0aGlzLmxpYmRzPWEubGliZHMsdGhpcy5ob3RUYWJsZS5kYXRhPWEuZGF0YS5zYXNk'@;
put 'YXRhLHRoaXMuaGVhZGVyQ29sdW1ucz1hLmRhdGEuc2FzcGFyYW1zWzBdLkNPTEhFQURFUlMuc3BsaXQoIiwiKSx0aGlzLmhlYWRlclBrcz1hLmRhdGEuc2FzcGFyYW1zWzBdLlBLLnNwbGl0KCIgIiksdGhpcy5jb2x1bW5MZXZlbFNlY3VyaXR5RmxhZz0hIWEuZGF0YS5zYXNwYXJhbXNbMF0u'@;
put 'Q0xTX0ZMQUcsdGhpcy5jb2x1bW5MZXZlbFNlY3VyaXR5RmxhZyYmdGhpcy5zZXRSZXN0cmljdGlvbnMoe3Jlc3RyaWN0QWRkUm93OiEwLHJlbW92ZUVkaXRSZWNvcmRCdXR0b246ITAscmVtb3ZlQWRkUmVjb3JkQnV0dG9uOiEwfSksdGhpcy5jaGVja0VtcHR5Um93V2hlbkZpbHRlcigpLC0x'@;
put 'IT09dGhpcy5oZWFkZXJDb2x1bW5zLmluZGV4T2YoIl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyIpJiYodGhpcy5oZWFkZXJDb2x1bW5zW3RoaXMuaGVhZGVyQ29sdW1ucy5pbmRleE9mKCJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iKV09IkRlbGV0ZT8iKSx0aGlzLmhl'@;
put 'YWRlckFycmF5PXRoaXMuaGVhZGVyQ29sdW1ucy5zbGljZSgxKSwiIiE9PWEuZGF0YS5zYXNwYXJhbXNbMF0uRFRWQVJTJiYodGhpcy5kYXRlSGVhZGVycz1hLmRhdGEuc2FzcGFyYW1zWzBdLkRUVkFSUy5zcGxpdCgiICIpKSwiIiE9PWEuZGF0YS5zYXNwYXJhbXNbMF0uVE1WQVJTJiYodGhp'@;
put 'cy50aW1lSGVhZGVycz1hLmRhdGEuc2FzcGFyYW1zWzBdLlRNVkFSUy5zcGxpdCgiICIpKSwiIiE9PWEuZGF0YS5zYXNwYXJhbXNbMF0uRFRUTVZBUlMmJih0aGlzLmRhdGVUaW1lSGVhZGVycz1hLmRhdGEuc2FzcGFyYW1zWzBdLkRUVE1WQVJTLnNwbGl0KCIgIikpLGEuZGF0YS54bF9ydWxl'@;
put 'cy5sZW5ndGg+MCYmKHRoaXMueGxSdWxlcz10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKGEuZGF0YS54bF9ydWxlcykpLHRoaXMuZGNWYWxpZGF0b3I9bmV3IEFNdChhLmRhdGEuc2FzcGFyYW1zWzBdLGEuZGF0YS4kc2FzZGF0YSx0aGlzLmNvbHMsYS5kYXRhLmRxcnVsZXMsYS5kYXRh'@;
put 'LmRxZGF0YSksdGhpcy5jZWxsVmFsaWRhdGlvbj10aGlzLmRjVmFsaWRhdG9yLmdldFJ1bGVzKCksdGhpcy5kYXRhU291cmNlPWEuZGF0YS5zYXNkYXRhLHRoaXMuJGRhdGFGb3JtYXRzPWEuZGF0YS4kc2FzZGF0YTtmb3IobGV0IG09MDttPHRoaXMuaGVhZGVyQ29sdW1ucy5sZW5ndGg7bSsr'@;
put 'KXRoaXMuaG90RGF0YVNjaGVtYVt0aGlzLmNlbGxWYWxpZGF0aW9uW21dLmRhdGFdPVRNdCh0aGlzLmNlbGxWYWxpZGF0aW9uW21dLnR5cGUsdGhpcy5jZWxsVmFsaWRhdGlvblttXSk7dGhpcy5jaGVja1Jvd0xpbWl0KCksZi51cGRhdGVTZXR0aW5ncyh7ZGF0YTp0aGlzLmRhdGFTb3VyY2Us'@;
put 'Y29sSGVhZGVyczp0aGlzLmhlYWRlckNvbHVtbnMsY29sdW1uczp0aGlzLmNlbGxWYWxpZGF0aW9uLGhlaWdodDp0aGlzLmhvdFRhYmxlLmhlaWdodCxmb3JtdWxhczp0aGlzLmhvdFRhYmxlLmZvcm11bGFzLHN0cmV0Y2hIOiJhbGwiLHJlYWRPbmx5OnRoaXMuaG90VGFibGUucmVhZE9ubHks'@;
put 'aGlkZGVuQ29sdW1uczp7aW5kaWNhdG9yczohMCxjb2x1bW5zOnRoaXMuZGNWYWxpZGF0b3IuZ2V0SGlkZGVuQ29sdW1ucygpfSxtb2RpZnlDb2xXaWR0aDpmdW5jdGlvbihtLF8pe3JldHVybiAwPT09Xz82MDptPjUwMD81MDA6bX0sY29weVBhc3RlOnRoaXMuaG90VGFibGUuY29weVBhc3Rl'@;
put 'LG1hbnVhbENvbHVtbkZyZWV6ZTohMSxtdWx0aUNvbHVtblNvcnRpbmc6ITAsbWFudWFsQ29sdW1uUmVzaXplOiEwLGZpbHRlcnM6ITEsbWFudWFsUm93UmVzaXplOiEwLHZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0OjUwLHJvd0hlYWRlcnM6bT0+IiAiLHJvd0hlYWRlcldpZHRoOjE1LHJv'@;
put 'd0hlaWdodHM6MjQsbWF4Um93czp0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkfHwxLzAsaW52YWxpZENlbGxDbGFzc05hbWU6Imh0SW52YWxpZCIsZHJvcGRvd25NZW51OntpdGVtczp7bWFrZV9yZWFkX29ubHk6e25hbWU6Im1ha2VfcmVhZF9vbmx5In0sYWxp'@;
put 'Z25tZW50OntuYW1lOiJhbGlnbm1lbnQifSxzcDE6e25hbWU6Ii0tLS0tLS0tLSJ9LGluZm86e25hbWU6InRlc3QgaW5mbyIscmVuZGVyZXI6KG0sXyxPLFgsYWUscGUpPT57Y29uc3QgYmU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO2xldCB4ZSxWZT0iTm8gaW5mbyBmb3VuZCI7'@;
put 'aWYodGhpcy5ob3RJbnN0YW5jZSl7Y29uc3QgWmU9dGhpcy5ob3RJbnN0YW5jZS5nZXRTZWxlY3RlZCgpfHxbXSxsdD1aZT9aZVswXVsxXTotMSxkdD10aGlzLmhvdEluc3RhbmNlPy5jb2xUb1Byb3AobHQpO3hlPXRoaXMuJGRhdGFGb3JtYXRzPy52YXJzW2R0XSx4ZSYmKFZlPWBMQUJFTDog'@;
put 'JHt4ZT8ubGFiZWx9PGJyPlRZUEU6ICR7eGU/LnR5cGV9PGJyPkxFTkdUSDogJHt4ZT8ubGVuZ3RofTxicj5GT1JNQVQ6ICR7eGU/LmZvcm1hdH1gKX1yZXR1cm4gYmUuaW5uZXJIVE1MPVZlLGJlfX19fSxkYXRhU2NoZW1hOnRoaXMuaG90RGF0YVNjaGVtYSxjb250ZXh0TWVudTp0aGlzLmhv'@;
put 'dFRhYmxlLnNldHRpbmdzLmNvbnRleHRNZW51LGN1cnJlbnRIZWFkZXJDbGFzc05hbWU6ImN1c3RvbUgiLGFmdGVyR2V0Q29sSGVhZGVyOihtLF8pPT57Y29uc3QgTz10aGlzLmNvbHVtbkhlYWRlclttXSxYPU8mJnRoaXMuaXNDb2xQayhPKSxhZT1PJiZ0aGlzLmlzUmVhZG9ubHlDb2woTyk7'@;
put 'WCYmXy5jbGFzc0xpc3QuYWRkKCJwcmltYXJ5S2V5SGVhZGVyU3R5bGUiKSxhZSYmIVgmJl8uY2xhc3NMaXN0LmFkZCgicmVhZG9ubHlDZWxsIiksMD09PW0mJl8uY2xhc3NMaXN0LmFkZCgiZmlyc3RDb2x1bW5IZWFkZXJTdHlsZSIpfSxhZnRlckdldENlbGxNZXRhOihtLF8sTyk9PntfJiZ0'@;
put 'aGlzLmlzUmVhZG9ubHlDb2woXykmJihPLmNsYXNzTmFtZT0icmVhZG9ubHlDZWxsIil9fSwhMSksdGhpcy5ob3RUYWJsZS5oaWRkZW49ITEsdGhpcy50b2dnbGVIb3RQbHVnaW4oImNvbnRleHRNZW51IiwhMSksdGhpcy5xdWVyeVRleHQ9YS5kYXRhLnNhc3BhcmFtc1swXS5GSUxURVJfVEVY'@;
put 'VCx0aGlzLmNvbHVtbkhlYWRlcj1hLmRhdGEuc2FzcGFyYW1zWzBdLkNPTEhFQURFUlMuc3BsaXQoIiwiKSx0aGlzLmNvbHVtbkhlYWRlclswXT0iRGVsZXRlPyIsdGhpcy5yZWFkT25seUZpZWxkcz1hLmRhdGEuc2FzcGFyYW1zWzBdLlBLQ05UO2xldCBoPWRvY3VtZW50LmdldEVsZW1lbnRC'@;
put 'eUlkKCJob3RJbnN0YW5jZSIpO2gmJmguYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixtPT57dGhpcy51cGxvYWRQcmV2aWV3fHx0aGlzLmhvdENsaWNrZWQoKSxzZXRUaW1lb3V0KCgpPT57bGV0IF89ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmRlYnVnLXN3aXRjaC1pdGVtIil8fHZv'@;
put 'aWQgMDtfJiZfLmNsaWNrKCl9LDEwMCl9KSxmLmFkZEhvb2soImFmdGVyU2VsZWN0aW9uIiwobSxfLE8sWCxhZSxwZSk9PnttPT09TyYmXz09PVgmJiExPT09dGhpcy5ob3RUYWJsZS5yZWFkT25seSYmdGhpcy5keW5hbWljQ2VsbFZhbGlkYXRpb24obSxfKX0pLGYuYWRkSG9vaygiYmVmb3Jl'@;
put 'S2V5RG93biIsbT0+e2NvbnN0IF89dGhpcy5ob3RJbnN0YW5jZS5nZXRTZWxlY3RlZCgpLE89XyYmX1swXTtpZihPKXtjb25zdCBYPU9bMF0scGU9T1sxXTtpZihYPT09T1syXSYmcGU9PT1PWzNdKXtjb25zdCB4ZT10aGlzLmhvdEluc3RhbmNlLmdldENlbGxNZXRhKFgscGUpO3hlJiYhMT09'@;
put 'PXhlLmZpbHRlciYmdGhpcy5ob3RJbnN0YW5jZS5zZXRDZWxsTWV0YShYLHBlLCJmaWx0ZXIiLCEwKX19fSksZi5hZGRIb29rKCJhZnRlckNoYW5nZSIsKG0sXyk9PntpZigiZWRpdCI9PT1fKXtjb25zdCBPPXRoaXMuaG90SW5zdGFuY2UsWD1tWzBdWzBdLGFlPW1bMF1bMV0scGU9Ty5wcm9w'@;
put 'VG9Db2woYWUpLGJlPU8uZ2V0Q2VsbE1ldGEoWCxwZSk7YmUmJiExPT09YmUuZmlsdGVyJiZPLnNldENlbGxNZXRhKFgscGUsImZpbHRlciIsITApLHRoaXMuZXhlY3V0ZUR5bmFtaWNDZWxsVmFsaWRhdGlvbklmQXBwbGljYWJsZShhZSxwZSxYKX19KSxmLmFkZEhvb2soImFmdGVyUmVuZGVy'@;
put 'IixtPT57dGhpcy5ldmVudFNlcnZpY2UuZGlzcGF0Y2hFdmVudCgicmVzaXplIil9KSxmLmFkZEhvb2soImFmdGVyQ3JlYXRlUm93IiwobSxfKT0+e2lmKG0+dGhpcy5kYXRhU291cmNlLmxlbmd0aCl7bGV0IE89ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLnd0SG9sZGVyIik7c2V0VGltZW91'@;
put 'dCgoKT0+e08mJihPLnNjcm9sbFRvcD1PLnNjcm9sbEhlaWdodCl9KX19KSxmLmFkZEhvb2soImJlZm9yZVBhc3RlIiwobSxfKT0+e2NvbnN0IE89X1swXS5zdGFydENvbDttWzBdPW1bMF0ubWFwKChYLGFlKT0+e2NvbnN0IHBlPXRoaXMuY29sdW1uSGVhZGVyW08rYWVdLGJlPSJudW0iPT09'@;
put 'dGhpcy4kZGF0YUZvcm1hdHM/LnZhcnNbcGVdPy50eXBlLHhlPSgwLHUzLmlzU3BlY2lhbE1pc3NpbmcpKFgpO3JldHVybiBiZSYmIWlzTmFOKFgpJiYheGUmJihYKj0xKSxYfSl9KSxmLmFkZEhvb2soImFmdGVyUmVtb3ZlUm93IiwoKT0+e3RoaXMuY2hlY2tSb3dMaW1pdCgpfSksZi5hZGRI'@;
put 'b29rKCJhZnRlckNyZWF0ZVJvdyIsKCk9Pnt0aGlzLmNoZWNrUm93TGltaXQoKX0pLHRoaXMudXBsb2FkVXJsPSJzZXJ2aWNlcy9lZGl0b3JzL2xvYWRmaWxlIixudWxsIT09dGhpcy5yZWNvcmRBY3Rpb24mJigiQUREIj09PXRoaXMucmVjb3JkQWN0aW9uPyh0aGlzLmFkZFJlY29yZCgpLHRo'@;
put 'aXMuZWRpdFJlY29yZChudWxsLHRoaXMuZGF0YVNvdXJjZS5sZW5ndGgtMSwhMCkpOjE9PT10aGlzLmRhdGFTb3VyY2UubGVuZ3RoJiZ0aGlzLmVkaXRSZWNvcmQobnVsbCwwKSksYS5kYXRhLnF1ZXJ5Lmxlbmd0aD4wJiYoImhvbWUiPT09Sm4ucm9vdFBhcmFtfHwiZWRpdG9yIj09PUpuLnJv'@;
put 'b3RQYXJhbSkmJjA9PT1Kbi5lZGl0b3IuZmlsdGVyLmNsYXVzZXMubGVuZ3RoJiYoSm4uZWRpdG9yLmZpbHRlci5xdWVyeT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKGEuZGF0YS5xdWVyeSksSm4uZWRpdG9yLmZpbHRlci5saWJkcz10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5s'@;
put 'aWJNZW0sdGhpcy5zYXNTdG9yZVNlcnZpY2UuaW5pdGlhbGl6ZUdsb2JhbEZpbHRlckNsYXVzZSgiZWRpdG9yIix0aGlzLmNvbHMpKSxmLnJlbmRlcigpfX1yZXR1cm4gbC5jbnQ9MCxsLm5vblBrQ250PTAsbC5sYXN0Q2VsbD0wLGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXco'@;
put 'YXx8bCkocnQoYjEpLHJ0KFJzKSxydCh5MSkscnQoTGQpLHJ0KFB1KSxydChMYSkscnQodHUpLHJ0KHBsKSxydChVbCkscnQoSTUpKX0sbC5cdTAyNzVjbXA9a3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siYXBwLWVkaXRvciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxmKXtpZigxJmEmJihObyhn'@;
put 'QXQsNyksTm8odkF0LDUpLE5vKHlBdCw1KSxObyhiQXQsNSksTm8oX0F0LDUpKSwyJmEpe2xldCBkO3VpKGQ9Y2koKSkmJihmLmh0PWQuZmlyc3QpLHVpKGQ9Y2koKSkmJihmLnVwbG9hZFN0YXRlckNvbXBMaXN0PWQpLHVpKGQ9Y2koKSkmJihmLnF1ZXJ5RmlsdGVyQ29tcExpc3Q9ZCksdWko'@;
put 'ZD1jaSgpKSYmKGYuaG90SW5zdGFuY2VDb21wTGlzdD1kKSx1aShkPWNpKCkpJiYoZi5maWxlVXBsb2FkSW5wdXRDb21wTGlzdD1kKX19LGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczoxNzcsdmFyczo3Myxjb25zdHM6W1sxLCJjb250ZW50LWFyZWEiLCJkLWZsZXgi'@;
put 'LCJjbHItZmxleC1jb2x1bW4iXSxbImFwcEZpbGVEcm9wIiwiIiwxLCJyZWxhdGl2ZSIsMywidXBsb2FkZXIiLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbFN0YXRpY0JhY2tkcm9wIiwiY2xyTW9kYWxDbG9zYWJsZSIsImNsck1vZGFsT3BlbiIsImZpbGVPdmVyIiwiZmlsZURyb3AiLCJjbHJN'@;
put 'b2RhbE9wZW5DaGFuZ2UiXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJkcm9wLWFyZWEiXSxbMSwiY2xyLWNvbC1tZC0xMiJdLFsxLCJjbHItcm93IiwiY2FyZC1ibG9jayIsIm10LTE1IiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWJldHdlZW4iXSxbMSwiY2xy'@;
put 'LWNvbC1tZC1hdXRvIl0sWzEsImVuY29kaW5nLWJsb2NrIl0sWyJjbHJJbmxpbmUiLCIiLDEsIm10LTAtaSJdLFsidHlwZSIsInJhZGlvIiwiY2xyUmFkaW8iLCIiLCJ2YWx1ZSIsIlVURi04IiwibmFtZSIsImVuY29kaW5nIiwzLCJuZ01vZGVsIiwiZGlzYWJsZWQiLCJuZ01vZGVsQ2hhbmdl'@;
put 'Il0sWyJ0eXBlIiwicmFkaW8iLCJjbHJSYWRpbyIsIiIsInZhbHVlIiwiV0xBVElOMSIsIm5hbWUiLCJlbmNvZGluZyIsMywibmdNb2RlbCIsImRpc2FibGVkIiwibmdNb2RlbENoYW5nZSJdLFsiY2xhc3MiLCJjbHItY29sLW1kLTMgZmlsdGVyQnRuIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNs'@;
put 'ci1jb2wtbWQtMyBlZGl0QnRuIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJidG4gYnRuLXByaW1hcnkgbXItMCIsMywiZGlzYWJsZWQiLCJjbGljayIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiYnRuIGJ0bi1wcmltYXJ5IG1yLTAiLDMsImNsaWNr'@;
put 'Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImV4Y2VsLXBhcnNpbmcgY2xyLWNvbC1tZC0xMiIsNCwibmdJZiJdLFsxLCJtb2RhbC1mb290ZXIiXSxbMywiY3VycmVudFJlY29yZCIsInJlY29yZEFjdGlvbiIsImxpYmRzIiwicXVlcnlGaWx0ZXIiLCJmaWx0ZXIiLCJzdWJtaXRMb2FkaW5nIiwiaGVh'@;
put 'ZGVyUGtzIiwiY2VsbFZhbGlkYXRpb24iLCJjdXJyZW50UmVjb3JkSW5kZXgiLCJjdXJyZW50UmVjb3JkTG9hZGluZ3MiLCJjdXJyZW50UmVjb3JkRXJyb3JzIiwiY3VycmVudFJlY29yZFZhbGlkYXRvciIsIm9uUmVjb3JkQ2hhbmdlIiwib25SZWNvcmRJbnB1dEZvY3VzZWQiLCJvblJlY29y'@;
put 'ZEVkaXRDbG9zZSIsIm9uTmV4dFJlY29yZCIsIm9uUHJldmlvdXNSZWNvcmQiLDQsIm5nSWYiXSxbMSwiY2xyLWZsZXgtMSJdLFsiaHQiLCIiXSxbImNsYXNzIiwicHJvZ3Jlc1N0YXRpYyBwcm9ncmVzcyBsb29wIiw0LCJuZ0lmIl0sWyJhcHBEcmFnTmRyb3AiLCIiLDEsImNhcmQiLCJib3Jk'@;
put 'ZXItMCIsImJveC1zaGFkb3ctbm9uZS1pIiwicG9zaXRpb24tcmVsYXRpdmUiLCJoLTEwMCIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiIsImJhY2tncm91bmQtdHJhbnNwYXJlbnQiLDMsImZpbGVEcmFnZ2VkT3ZlciJdLFsxLCJjYXJkLWhlYWRlciIsImNsci1yb3ciLCJidXR0b25CYXIi'@;
put 'LCJoZWFkZXJCYXIiLCJjbHItZmxleC1tZC1yb3ciLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsImNsci1qdXN0aWZ5LWNvbnRlbnQtbGctZW5kIl0sWyJjbGFzcyIsImNsci1jb2wtMTIgY2xyLWNvbC1sZy00IGJhY2tCdG4iLDQsIm5nSWYiXSxbMSwiY2xyLWNvbC0xMiIsImNsci1j'@;
put 'b2wtbGctNCIsImQtZmxleCIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbGFzcyIsImVkaXRvci10aXRsZSB0ZXh0LWNlbnRlciBtdC0wLWkiLDQsIm5nVmFyIl0sWyJjbGFzcyIsImNsci1jb2wtMTIgY2xyLWNvbC1sZy00IGJ0bkN0cmwiLDQsIm5nSWYiXSxbImNs'@;
put 'YXNzIiwiY2xyLWNvbC1tZC0xMiBpbmZvQmFyIiw0LCJuZ0lmIl0sWzEsImNhcmQtYmxvY2siLCJwLTAiLCJjbHItZmxleC0xIiwiYmFja2dyb3VuZC10cmFuc3BhcmVudCIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJjYXJkLXRleHQiLDQsIm5nSWYiXSxbMSwiY2FyZC10ZXh0IiwiaG90RWRp'@;
put 'dG9yIiwiaC0xMDAiLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iLCJiYWNrZ3JvdW5kLXRyYW5zcGFyZW50Il0sWzEsImhvdC13cmFwcGVyIiwiY2xyLWZsZXgtMSJdLFsiaG90SWQiLCJob3RJbnN0YW5jZSIsImlkIiwiaG90VGFibGUiLDEsImVkaXQtaG90IiwzLCJsaWNlbnNlS2V5Il0s'@;
put 'WyJob3RJbnN0YW5jZSIsIiJdLFs0LCJuZ0lmIl0sWyJjbGFzcyIsIm10LTItaSB3LTEwMCB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJtb2RhbCIsNCwibmdJZiJdLFszLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbE9wZW5DaGFuZ2UiXSxbMSwibS0wIl0sWyJ0eXBlIiwiYnV0'@;
put 'dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdLFsxLCJkdXBsaWNhdGUta2V5cy1tb2RhbCIsMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxPcGVuQ2hhbmdlIl0sWyJj'@;
put 'bGFzcyIsImQtYmxvY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwibW9kYWwgei1pbmRleC1oaWdoZXN0Iiw0LCJuZ0lmIl0sWzEsImZpbHRlci1tb2RhbCIsMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxDbG9z'@;
put 'YWJsZSIsImNsck1vZGFsT3BlbkNoYW5nZSJdLFsxLCJtb2RhbC10aXRsZSIsImNlbnRlciIsInRleHQtY2VudGVyIiwiY29sb3ItZGFya2VyLWdyYXkiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwi'@;
put 'YnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwzLCJjbHJMb2FkaW5nIiwiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwzLCJjbGlj'@;
put 'ayJdLFszLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbENsb3NhYmxlIiwiY2xyTW9kYWxPcGVuQ2hhbmdlIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwzLCJjbGljayJdLFsxLCJtb2RhbC1ib2R5IiwiZC1m'@;
put 'bGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImRhdGEtbHBpZ25vcmUiLCJ0cnVlIiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwiaWQiLCJmaWxlUGFzc3dvcmRJbnB1dCIsInR5cGUiLCJ0ZXh0IiwxLCJjbHItaW5wdXQiLCJkaXNhYmxlLXBhc3N3b3JkLW1hbmFnZXIiXSxbImZp'@;
put 'bGVQYXNzd29yZElucHV0IiwiIl0sWyJjbGFzcyIsIm0tMCBjb2xvci1yZWQiLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImRpc2FibGVkIiwiY2xpY2siXSxbMywib3BlbiIsImRzbWV0YSIsIm9wZW5DaGFuZ2Ui'@;
put 'XSxbMywidmlld2JveE1vZGFsIiwidmlld2JveE1vZGFsQ2hhbmdlIl0sWzEsImNsci1jb2wtbWQtMyIsImZpbHRlckJ0biJdLFsxLCJmaWx0ZXJCdG4iLCJ3LTEwMCJdLFsiZm9yIiwiZmlsZS11cGxvYWQiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwicHJvZmlsZS1idXR0b25z'@;
put 'Iiwidy0xMDAiXSxbImhpZGRlbiIsIiIsImlkIiwiZmlsZS11cGxvYWQiLCJ0eXBlIiwiZmlsZSIsImFwcEZpbGVTZWxlY3QiLCIiLDMsInVwbG9hZGVyIiwiY2hhbmdlIl0sWyJmaWxlVXBsb2FkSW5wdXQiLCIiXSxbMSwiY2xyLWNvbC1tZC0zIiwiZWRpdEJ0biJdLFsxLCJidG5WaWV3Iiwi'@;
put 'YnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLCJwcm9maWxlLWJ1dHRvbnMiLCJ3LTEwMCIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJtci0wIiwzLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJi'@;
put 'dG4iLCJidG4tcHJpbWFyeSIsIm1yLTAiLDMsImNsaWNrIl0sWzEsImV4Y2VsLXBhcnNpbmciLCJjbHItY29sLW1kLTEyIl0sWyJ1cGxvYWRTdGF0ZXIiLCIiXSxbMywiY3VycmVudFJlY29yZCIsInJlY29yZEFjdGlvbiIsImxpYmRzIiwicXVlcnlGaWx0ZXIiLCJmaWx0ZXIiLCJzdWJtaXRM'@;
put 'b2FkaW5nIiwiaGVhZGVyUGtzIiwiY2VsbFZhbGlkYXRpb24iLCJjdXJyZW50UmVjb3JkSW5kZXgiLCJjdXJyZW50UmVjb3JkTG9hZGluZ3MiLCJjdXJyZW50UmVjb3JkRXJyb3JzIiwiY3VycmVudFJlY29yZFZhbGlkYXRvciIsIm9uUmVjb3JkQ2hhbmdlIiwib25SZWNvcmRJbnB1dEZvY3Vz'@;
put 'ZWQiLCJvblJlY29yZEVkaXRDbG9zZSIsIm9uTmV4dFJlY29yZCIsIm9uUHJldmlvdXNSZWNvcmQiXSxbMSwicHJvZ3Jlc1N0YXRpYyIsInByb2dyZXNzIiwibG9vcCJdLFsxLCJjbHItY29sLTEyIiwiY2xyLWNvbC1sZy00IiwiYmFja0J0biJdLFsxLCJidG4iLCJidG4tc20iLDMsInJvdXRl'@;
put 'ckxpbmsiXSxbInNoYXBlIiwiY2FyZXQiLCJkaXIiLCJsZWZ0Iiwic2l6ZSIsIjIwIl0sWzEsImJ0biIsImJ0bi1zbSIsInZpZXdib3gtb3BlbiIsMywiY2xpY2siXSxbInNoYXBlIiwidmlldy1jYXJkcyIsInNpemUiLCIyMCJdLFsxLCJlZGl0b3ItdGl0bGUiLCJ0ZXh0LWNlbnRlciIsIm10'@;
put 'LTAtaSJdLFsic2hhcGUiLCJpbmZvLWNpcmNsZSIsInNpemUiLCIyNCIsMSwiaXMtaGlnaGxpZ2h0IiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImJvbHQiLCJjbGFzcyIsImNvbG9yLXllbGxvdyIsNCwibmdJZiJdLFsxLCJtci0xMCIsMywicm91dGVyTGluayJdLFsi'@;
put 'c2hhcGUiLCJib2x0IiwxLCJjb2xvci15ZWxsb3ciXSxbMSwiY2xyLWNvbC0xMiIsImNsci1jb2wtbGctNCIsImJ0bkN0cmwiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0blZpZXciLCJidG4iLCJidG4tc20iLCJidG4taWNvbiIsImJ0bi1ibG9jayIsMywiY2xpY2siXSxbInNoYXBlIiwiZmls'@;
put 'dGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsImJ0bi1ibG9jayIsMywiY2xpY2siXSxbInNoYXBlIiwibm90ZSJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiYnRuIGJ0bi1zbSBidG4tc3VjY2VzcyBidG4tYmxvY2sgbXItMCIsMywiY2xp'@;
put 'Y2siLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwiYnRuLWJsb2NrIiwibXItMCIsMywiY2xpY2siXSxbInNoYXBlIiwidXBsb2FkIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4taWNvbiIsImJ0bi1vdXRs'@;
put 'aW5lLWRhbmdlciIsMywiY2xpY2siXSxbInNoYXBlIiwidGltZXMiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLDMsImNsckxvYWRpbmciLCJjbGljayJdLFsic2hhcGUiLCJwbHVzIiwic2l6ZSIsIjE2Il0s'@;
put 'WyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0IiwiY2xyU2l6ZSIsImxnIiw0LCJjbHJJZk9wZW4iXSxbInNoYXBlIiwiY2hlY2siLCJzaXplIiwiMjAiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiLCJjbHJTaXplIiwibGciXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1z'@;
put 'bSIsImJ0bi1pY29uIiwiYnRuLW91dGxpbmUtZGFuZ2VyIiwiYnRuLXVwbG9hZC1wcmV2aWV3IiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeSBidG4tdXBsb2FkLXByZXZpZXciLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0eXBlIiwi'@;
put 'YnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIsInByZXZpZXctc3VibWl0IiwzLCJjbHJMb2FkaW5nIiwiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwiYnRuLXVwbG9hZC1wcmV2aWV3IiwzLCJjbGljayJdLFsxLCJj'@;
put 'bHItY29sLW1kLTEyIiwiaW5mb0JhciJdLFsxLCJjYXJkLXRleHQiXSxbMSwiaC03MHZoIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsInNwaW5uZXIiXSxbInNoYXBlIiwiZXJyb3Itc3RhbmRhcmQiLDEs'@;
put 'ImVycm9yLWljb24iXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLCJtdC01LWkiLDMsImNsaWNrIl0sWyJjbHJQb3NpdGlvbiIsInRvcC1yaWdodCIsImNsclNpemUiLCJsZyIsNCwiY2xySWZPcGVuIl0sWyJj'@;
put 'bHJQb3NpdGlvbiIsInRvcC1yaWdodCIsImNsclNpemUiLCJsZyJdLFsxLCJtdC0yLWkiLCJ3LTEwMCIsInRleHQtY2VudGVyIl0sWzEsIm1vZGFsIl0sWyJyb2xlIiwiZGlhbG9nIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJtb2RhbC1kaWFsb2ciLCJtb2RhbC1sZyJdLFsxLCJtb2RhbC1j'@;
put 'b250ZW50Il0sWzEsIm1vZGFsLWhlYWRlciJdLFsiYXJpYS1sYWJlbCIsIkNsb3NlIiwidHlwZSIsImJ1dHRvbiIsMSwiY2xvc2UiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInNoYXBlIiwiY2xvc2UiXSxbImNsYXNzIiwiZC1ibG9jayB3LTEwMCB0ZXh0LWNlbnRlciBjb2xvci1yZWQiLDQs'@;
put 'Im5nSWYiXSxbImNsYXNzIiwiY2xyLW9mZnNldC1tZC0yIGNsci1jb2wtbWQtOCIsNCwibmdJZiJdLFsxLCJtb2RhbC1mb290ZXIiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyLWkiXSxbImlkIiwic3VibWl0QnRuIiwidHlwZSIsInN1Ym1pdCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nl'@;
put 'c3Mtb3V0bGluZSIsIm0tMCIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsiaWQiLCJjYW5jZWxTdWJtaXRCdG4iLCJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbMSwiZC1ibG9jayIsInctMTAwIiwidGV4dC1jZW50ZXIiLCJjb2xvci1y'@;
put 'ZWQiXSxbMSwiY2xyLW9mZnNldC1tZC0yIiwiY2xyLWNvbC1tZC04Il0sWzEsImZvcm0tZ3JvdXAiXSxbImZvciIsImZvcm1GaWVsZHNfOCJdLFsidHlwZSIsInRleHQiLCJpZCIsImZvcm1GaWVsZHNfOCIsInJvd3MiLCI1IiwxLCJ3LTEwMCIsMywibmdNb2RlbCIsImRpc2FibGVkIiwidmFs'@;
put 'dWUiLCJuZ01vZGVsQ2hhbmdlIl0sWzEsImQtYmxvY2siXSxbMSwibW9kYWwiLCJ6LWluZGV4LWhpZ2hlc3QiXSxbInJvbGUiLCJkaWFsb2ciLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1vZGFsLWRpYWxvZyJdLFsicXVlcnlGaWx0ZXIiLCIiXSxbMSwibS0wIiwiY29sb3ItcmVkIl1dLHRl'@;
put 'bXBsYXRlOmZ1bmN0aW9uKGEsZil7aWYoMSZhKXtjb25zdCBkPVpuKCk7eWUoMCwiZGl2IiwwKSgxLCJjbHItbW9kYWwiLDEpLEV0KCJmaWxlT3ZlciIsZnVuY3Rpb24obSl7cmV0dXJuIGYuZmlsZU92ZXJCYXNlKG0pfSkoImZpbGVEcm9wIixmdW5jdGlvbihtKXtyZXR1cm4gZi5nZXRGaWxl'@;
put 'RGVzYyhtLCEwKX0pKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKG0pe3JldHVybiBmLnNob3dVcGxvYWRNb2RhbD1tfSkseWUoMiwiaDMiLDIpLFllKDMsIlVwbG9hZCBGaWxlIiksQ2UoKSx5ZSg0LCJkaXYiLDMpKDUsImRpdiIsNCkoNiwic3BhbiIpLFllKDcsIkRyb3AgZmlsZSBh'@;
put 'bnl3aGVyZSB0byB1cGxvYWQhIiksQ2UoKSgpLHllKDgsImRpdiIsNSkoOSwiZGl2Iiw2KSgxMCwiZGl2Iiw3KSgxMSwiZGl2Iiw4KSgxMiwiY2xyLXJhZGlvLWNvbnRhaW5lciIsOSkoMTMsImNsci1yYWRpby13cmFwcGVyIikoMTQsImlucHV0IiwxMCksRXQoIm5nTW9kZWxDaGFuZ2UiLGZ1'@;
put 'bmN0aW9uKG0pe3JldHVybiBmLmVuY29kaW5nPW19KSxDZSgpLHllKDE1LCJsYWJlbCIpLFllKDE2LCJVVEYtOCIpLENlKCkoKSx5ZSgxNywiY2xyLXJhZGlvLXdyYXBwZXIiKSgxOCwiaW5wdXQiLDExKSxFdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24obSl7cmV0dXJuIGYuZW5jb2Rpbmc9'@;
put 'bX0pLENlKCkseWUoMTksImxhYmVsIiksWWUoMjAsIldMQVRJTjEiKSxDZSgpKCkoKSgpKCksdHQoMjEsd0F0LDYsMSwiZGl2IiwxMiksdHQoMjIsQ0F0LDMsMSwiZGl2IiwxMykseWUoMjMsImRpdiIsNyksdHQoMjQsU0F0LDIsMSwiYnV0dG9uIiwxNCksdHQoMjUsTUF0LDIsMCwiYnV0dG9u'@;
put 'IiwxNSksQ2UoKSx0dCgyNixrQXQsMywwLCJkaXYiLDE2KSxDZSgpKCkoKSx0bigyNywiZGl2IiwxNyksQ2UoKSx0dCgyOCxFQXQsMSwxMiwiYXBwLWVkaXQtcmVjb3JkIiwxOCkseWUoMjksImRpdiIsMTksMjApLHR0KDMxLHhBdCwyLDAsImRpdiIsMjEpLHllKDMyLCJkaXYiLDIyKSxFdCgi'@;
put 'ZmlsZURyYWdnZWRPdmVyIixmdW5jdGlvbigpe3JldHVybiBmLm9uU2hvd1VwbG9hZE1vZGFsKCl9KSx5ZSgzMywiZGl2IiwyMyksdHQoMzQsVEF0LDcsMiwiZGl2IiwyNCkseWUoMzUsImRpdiIsMjUpLHR0KDM2LExBdCw3LDUsImg0IiwyNiksQ2UoKSx0dCgzNyx6QXQsNCwzLCJkaXYiLDI3'@;
put 'KSx0dCgzOCxVQXQsNSwxLCJkaXYiLDI4KSxDZSgpLHllKDM5LCJkaXYiLDI5KSx0dCg0MCxXQXQsNCwyLCJkaXYiLDMwKSx5ZSg0MSwiZGl2IiwzMSkoNDIsImRpdiIsMzIpLHRuKDQzLCJob3QtdGFibGUiLDMzLDM0KSxDZSgpLHllKDQ1LCJkaXYiKSx0dCg0NixLQXQsNSwyLCJjbHItdG9v'@;
put 'bHRpcCIsMzUpLHR0KDQ3LHFBdCwzLDEsInAiLDM2KSxDZSgpLHR0KDQ4LFFBdCwxNiw2LCJkaXYiLDM3KSx5ZSg0OSwiY2xyLW1vZGFsIiwzOCksRXQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24obSl7cmV0dXJuIGYuc3VibWl0TGltaXROb3RpY2U9bX0pLHllKDUwLCJoMyIsMiks'@;
put 'WWUoNTEsIk5vdGljZSIpLENlKCkseWUoNTIsImRpdiIsMykoNTMsInAiLDM5KSxZZSg1NCksQ2UoKSgpLHllKDU1LCJkaXYiLDE3KSg1NiwiYnV0dG9uIiw0MCksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBmLnN1Ym1pdExpbWl0Tm90aWNlPSExfSksWWUoNTcsIiBDYW5jZWwgIiks'@;
put 'Q2UoKSx5ZSg1OCwiYnV0dG9uIiw0MCksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBmLmdldEZpbGUoKSxmLnN1Ym1pdExpbWl0Tm90aWNlPSExfSksWWUoNTksIiBTdWJtaXQgIiksQ2UoKSgpKCkseWUoNjAsImNsci1tb2RhbCIsMzgpLEV0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1'@;
put 'bmN0aW9uKG0pe3JldHVybiBmLmJhZEVkaXQ9bX0pLHllKDYxLCJoMyIsMiksWWUoNjIpLENlKCkseWUoNjMsImRpdiIsMykoNjQsInAiKSxZZSg2NSksQ2UoKSgpLHllKDY2LCJkaXYiLDE3KSg2NywiYnV0dG9uIiw0MCksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBmLmJhZEVkaXQ9'@;
put 'ITF9KSxZZSg2OCwiIE9rICIpLENlKCkoKSgpLHllKDY5LCJjbHItbW9kYWwiLDM4KSxFdCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihtKXtyZXR1cm4gZi5wa051bGw9bX0pLHllKDcwLCJoMyIsMiksWWUoNzEsIkVycm9yIiksQ2UoKSx5ZSg3MiwiZGl2IiwzKSg3MywicCIpLFll'@;
put 'KDc0LCIgTnVsbCB2YWx1ZXMgb3IgaW5jb3JyZWN0IGRhdGEgdHlwZXMgY2Fubm90IGJlIHN1Ym1pdHRlZCBmb3IgUHJpbWFyeSBLZXkgY29sdW1ucyAiKSxDZSgpKCkseWUoNzUsImRpdiIsMTcpKDc2LCJidXR0b24iLDQxKSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGYucGtOdWxs'@;
put 'PSExLGYuYmFkRWRpdD0hMX0pLFllKDc3LCIgT2sgIiksQ2UoKSgpKCkseWUoNzgsImNsci1tb2RhbCIsMzgpLEV0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKG0pe3JldHVybiBmLm5vUGtOdWxsPW19KSx5ZSg3OSwiaDMiLDIpLFllKDgwLCJFcnJvciIpLENlKCkseWUoODEsImRp'@;
put 'diIsMykoODIsInAiKSxZZSg4MywiSW5jb3JyZWN0IGRhdGEgdHlwZXMgaW4gbm9uLVByaW1hcnkgS2V5IGNvbHVtbnMiKSxDZSgpKCkseWUoODQsImRpdiIsMTcpKDg1LCJidXR0b24iLDQxKSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGYubm9Qa051bGw9ITEsZi5iYWRFZGl0PSEx'@;
put 'fSksWWUoODYsIiBPayAiKSxDZSgpKCkoKSx5ZSg4NywiY2xyLW1vZGFsIiw0MiksRXQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24obSl7cmV0dXJuIGYucGtEdXBzPW19KSx5ZSg4OCwiaDMiLDIpLFllKDg5LCJFcnJvciIpLENlKCkseWUoOTAsImRpdiIsMykoOTEsInAiKSxZZSg5'@;
put 'MiwiIER1cGxpY2F0ZSB2YWx1ZXMgY2Fubm90IGJlIHN1Ym1pdHRlZCBmb3IgUHJpbWFyeSBLZXkgY29sdW1ucyAiKSxDZSgpLHllKDkzLCJwIiksWWUoOTQsIkR1cGxpY2F0ZXMgZm91bmQ6IiksQ2UoKSx0dCg5NSxlVHQsMyw0LCJzcGFuIiw0MyksQ2UoKSx5ZSg5NiwiZGl2IiwxNykoOTcs'@;
put 'ImJ1dHRvbiIsNDEpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZi5wa0R1cHM9ITF9KSxZZSg5OCwiIE9rICIpLENlKCkoKSgpLHllKDk5LCJjbHItbW9kYWwiLDM4KSxFdCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihtKXtyZXR1cm4gZi50b29Mb25nPW19KSx5ZSgxMDAs'@;
put 'ImgzIiwyKSxZZSgxMDEsIkVycm9yIiksQ2UoKSx5ZSgxMDIsImRpdiIsMykoMTAzLCJwIiksWWUoMTA0LCIgVGhlIGZvbGxvd2luZyBjb2x1bW5zIGhhdmUgdmFsdWVzIHRoYXQgZXhjZWVkIGxlbmd0aCBsaW1pdHM6ICIpLENlKCksdHQoMTA1LHRUdCwyLDMsInAiLDQ0KSxDZSgpLHllKDEw'@;
put 'NiwiZGl2IiwxNykoMTA3LCJidXR0b24iLDQxKSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGYudG9vTG9uZz0hMSxmLmNsZWFuRXhjZWVkKCl9KSxZZSgxMDgsIiBPayAiKSxDZSgpKCkoKSgpKCkoKSgpKCksdHQoMTA5LG5UdCwxNCwwLCJkaXYiLDQ1KSx5ZSgxMTAsImNsci1tb2Rh'@;
put 'bCIsNDYpLEV0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKG0pe3JldHVybiBmLmZpbHRlcj1tfSkseWUoMTExLCJoMyIsNDcpLFllKDExMiwiIEZpbHRlciBmb3IgdGFibGU6ICIpLHllKDExMywic3BhbiIpLFllKDExNCksQ2UoKSgpLHllKDExNSwiZGl2IiwzKSx0dCgxMTYsclR0'@;
put 'LDIsMCwiYXBwLXF1ZXJ5IiwzNSksQ2UoKSx5ZSgxMTcsImRpdiIsMTcpKDExOCwiYnV0dG9uIiw0OCksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBmLnJlc2V0RmlsdGVyKCl9KSxZZSgxMTksIiByZXNldCBmaWx0ZXIgIiksQ2UoKSx5ZSgxMjAsImJ1dHRvbiIsNDkpLEV0KCJjbGlj'@;
put 'ayIsZnVuY3Rpb24oKXtyZXR1cm4gZi5maWx0ZXI9ITF9KSxZZSgxMjEsIiBDYW5jZWwgIiksQ2UoKSx5ZSgxMjIsImJ1dHRvbiIsNTApLEV0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZi5zZW5kQ2xhdXNlKCl9KSxZZSgxMjMsIiBPayAiKSxDZSgpKCkoKSx5ZSgxMjQsImNsci1tb2Rh'@;
put 'bCIsMzgpLEV0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKG0pe3JldHVybiBmLnF1ZXJ5RXJyPW19KSx5ZSgxMjUsImgzIiwyKSxZZSgxMjYsIkVycm9yIiksQ2UoKSx5ZSgxMjcsImRpdiIsMykoMTI4LCJwIiksWWUoMTI5KSxDZSgpKCkseWUoMTMwLCJkaXYiLDE3KSgxMzEsImJ1'@;
put 'dHRvbiIsNTEpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZi5xdWVyeUVycj0hMX0pLFllKDEzMiwiIENhbmNlbCAiKSxDZSgpLHllKDEzMywiYnV0dG9uIiw0MSksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBmLnF1ZXJ5RXJyPSExfSksWWUoMTM0LCIgT2sgIiksQ2UoKSgp'@;
put 'KCkseWUoMTM1LCJjbHItbW9kYWwiLDUyKSxFdCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihtKXtyZXR1cm4gZi5kaXNjYXJkU291cmNlRmlsZT1tfSkseWUoMTM2LCJoMyIsNDcpLFllKDEzNywiV2FybmluZyIpLENlKCkseWUoMTM4LCJkaXYiLDMpLFllKDEzOSwiIFRoaXMgYWN0'@;
put 'aW9uIHdpbGwgZGlzY2FyZCB0aGUgc291cmNlIGZpbGUgYW5kIGl0J3MgbG9hZGVkIGRhdGEgIikseWUoMTQwLCJiIiksWWUoMTQxKSxDZSgpLFllKDE0MiwiIERvIHlvdSB3aXNoIHRvIHByb2NlZWQ/ICIpLENlKCkseWUoMTQzLCJkaXYiLDE3KSgxNDQsImJ1dHRvbiIsNDkpLEV0KCJjbGlj'@;
put 'ayIsZnVuY3Rpb24oKXtyZXR1cm4gZi5kaXNjYXJkU291cmNlRmlsZT0hMX0pLFllKDE0NSwiIENhbmNlbCAiKSxDZSgpLHllKDE0NiwiYnV0dG9uIiw1MyksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBmLmRpc2NhcmRTb3VyY2VGaWxlPSExLGYuZGlzY2FyZFBlbmRpbmdFeGNlbCgh'@;
put 'MCl9KSxZZSgxNDcsIiBPayAiKSxDZSgpKCkoKSx5ZSgxNDgsImNsci1tb2RhbCIsNTIpLEV0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKG0pe3JldHVybiBmLmZpbGVQYXNzd29yZE1vZGFsPW19KSx5ZSgxNDksImgzIiw0NyksWWUoMTUwLCIgUGFzc3dvcmQgUHJvdGVjdGVkIEZp'@;
put 'bGUgIiksQ2UoKSx5ZSgxNTEsImRpdiIsNTQpKDE1MiwicCIsMzkpLFllKDE1MywiUGxlYXNlIGVudGVyIHBhc3N3b3JkOiIpLENlKCksdG4oMTU0LCJpbnB1dCIsNTUsNTYpLENlKCkseWUoMTU2LCJkaXYiLDE3KSx0dCgxNTcsaVR0LDIsMCwicCIsNTcpLHllKDE1OCwiYnV0dG9uIiw0OSks'@;
put 'RXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBmLmZpbGVQYXNzd29yZE1vZGFsPSExLGYuZmlsZVBhc3N3b3JkU3ViamVjdC5uZXh0KHZvaWQgMCl9KSxZZSgxNTksIiBDYW5jZWwgdXBsb2FkICIpLENlKCkseWUoMTYwLCJidXR0b24iLDU4KSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7VXQo'@;
put 'ZCk7Y29uc3QgbT1RaSgxNTUpO3JldHVybiBmLmZpbGVQYXNzd29yZE1vZGFsPSExLFp0KGYuZmlsZVBhc3N3b3JkU3ViamVjdC5uZXh0KG0udmFsdWUpKX0pLFllKDE2MSwiIFVubG9jayAiKSxDZSgpKCkoKSx5ZSgxNjIsImNsci1tb2RhbCIsNTIpLEV0KCJjbHJNb2RhbE9wZW5DaGFuZ2Ui'@;
put 'LGZ1bmN0aW9uKG0pe3JldHVybiBmLm1hbnVhbEZpbGVFZGl0TW9kYWw9bX0pLHllKDE2MywiaDMiLDQ3KSxZZSgxNjQsIldhcm5pbmciKSxDZSgpLHllKDE2NSwiZGl2IiwzKSxZZSgxNjYsIiBNYW51YWxseSBlZGl0aW5nIHRoaXMgZGF0YSB3aWxsIG1lYW4gdGhlIHNvdXJjZSBmaWxlICIp'@;
put 'LHllKDE2NywiYiIpLFllKDE2OCksQ2UoKSxZZSgxNjksIiB3aWxsIGJlIGRpc2NhcmRlZC4gRG8geW91IHdpc2ggdG8gcHJvY2VlZD8gIiksQ2UoKSx5ZSgxNzAsImRpdiIsMTcpKDE3MSwiYnV0dG9uIiw0OSksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBmLm1hbnVhbEZpbGVFZGl0'@;
put 'TW9kYWw9ITF9KSxZZSgxNzIsIiBDYW5jZWwgIiksQ2UoKSx5ZSgxNzMsImJ1dHRvbiIsNTMpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZi5tYW51YWxGaWxlRWRpdE1vZGFsPSExLGYucHJldmlld1RhYmxlRWRpdENvbmZpcm0oKX0pLFllKDE3NCwiIE9rICIpLENlKCkoKSgpLHll'@;
put 'KDE3NSwiYXBwLWRhdGFzZXQtaW5mbyIsNTkpLEV0KCJvcGVuQ2hhbmdlIixmdW5jdGlvbihtKXtyZXR1cm4gZi5kYXRhc2V0SW5mbz1tfSksQ2UoKSx5ZSgxNzYsImFwcC12aWV3Ym94ZXMiLDYwKSxFdCgidmlld2JveE1vZGFsQ2hhbmdlIixmdW5jdGlvbihtKXtyZXR1cm4gZi52aWV3Ym94'@;
put 'ZXM9bX0pLENlKCl9aWYoMiZhKXtjb25zdCBkPVFpKDE1NSk7U2UoMSksUmUoInVwbG9hZGVyIixmLnVwbG9hZGVyKSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxTdGF0aWNCYWNrZHJvcCIsITEpKCJjbHJNb2RhbENsb3NhYmxlIiwiVmFsaWRhdGluZy1EUSI9PT1mLmV4Y2VsVXBs'@;
put 'b2FkU3RhdGUpKCJjbHJNb2RhbE9wZW4iLGYuc2hvd1VwbG9hZE1vZGFsKSxTZSgxMyksUmUoIm5nTW9kZWwiLGYuZW5jb2RpbmcpKCJkaXNhYmxlZCIsIiIhPWYuZmlsZW5hbWUpLFNlKDQpLFJlKCJuZ01vZGVsIixmLmVuY29kaW5nKSgiZGlzYWJsZWQiLCIiIT1mLmZpbGVuYW1lKSxTZSgz'@;
put 'KSxSZSgibmdJZiIsIWYuZXhjZWxGaWxlUGFyc2luZyYmIWYudXBsb2FkTG9hZGluZyksU2UoMSksUmUoIm5nSWYiLCFmLmV4Y2VsRmlsZVBhcnNpbmcmJiFmLnVwbG9hZExvYWRpbmcpLFNlKDIpLFJlKCJuZ0lmIiwiVmFsaWRhdGluZyIhPT1mLmV4Y2VsVXBsb2FkU3RhdGUpLFNlKDEpLFJl'@;
put 'KCJuZ0lmIiwiVmFsaWRhdGluZy1EUSI9PT1mLmV4Y2VsVXBsb2FkU3RhdGUpLFNlKDEpLFJlKCJuZ0lmIixmLmV4Y2VsRmlsZVBhcnNpbmcpLFNlKDIpLFJlKCJuZ0lmIixmLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg+LTEpLFNlKDMpLFJlKCJuZ0lmIiwhZi52YWxpZGF0aW9uRG9uZSYmZi5z'@;
put 'dWJtaXQpLFNlKDMpLFJlKCJuZ0lmIixmLnRhYmxlVHJ1ZSksU2UoMSksZ3IoImNsci1jb2wtbGctMTIiLCFmLnRhYmxlVHJ1ZSksU2UoMSksUmUoIm5nVmFyIix3aCg2NixvVHQsbnVsbD09Zi5saWJkcz9udWxsOmYubGliZHMuc3BsaXQoIi4iKVswXSxudWxsPT1mLmxpYmRzP251bGw6Zi5s'@;
put 'aWJkcy5zcGxpdCgiLiIpWzFdKSksU2UoMSksUmUoIm5nSWYiLGYudGFibGVUcnVlKSxTZSgxKSxSZSgibmdJZiIsIVhhKDY5LEk2ZSkuaW5jbHVkZXMoZi5xdWVyeVRleHQpKSxTZSgxKSxSZSgibmdDbGFzcyIsX2goNzEsYVR0LCFYYSg3MCxJNmUpLmluY2x1ZGVzKGYucXVlcnlUZXh0KSkp'@;
put 'LFNlKDEpLFJlKCJuZ0lmIiwhZi50YWJsZVRydWUpLFNlKDMpLGdyKCJoaWRkZW4iLGYuaG90VGFibGUuaGlkZGVuKSxSZSgibGljZW5zZUtleSIsZi5ob3RUYWJsZS5saWNlbnNlS2V5KSxTZSgzKSxSZSgibmdJZiIsZi50YWJsZVRydWUmJiFmLnJlc3RyaWN0aW9ucy5yZW1vdmVBZGRSZWNv'@;
put 'cmRCdXR0b24pLFNlKDEpLFJlKCJuZ0lmIixmLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkIT09Zi5JbmZpbml0eSYmZi5kYXRhU291cmNlJiZmLmRhdGFTb3VyY2UubGVuZ3RoPmYubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQpLFNlKDEpLFJl'@;
put 'KCJuZ0lmIixmLnN1Ym1pdCksU2UoMSksUmUoImNsck1vZGFsT3BlbiIsZi5zdWJtaXRMaW1pdE5vdGljZSksU2UoNSksd3IoIiBEdWUgdG8gY3VycmVudCBsaWNlbmNlLCBvbmx5ICIsZi5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQsIiByb3dzIGluIGEgZmlsZSB3aWxs'@;
put 'IGJlIHN1Ym1pdHRlZC4gVG8gcmVtb3ZlIHRoZSByZXN0cmljdGlvbiwgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvICIpLFNlKDYpLFJlKCJjbHJNb2RhbE9wZW4iLGYuYmFkRWRpdCksU2UoMiksYXIoZi5iYWRFZGl0VGl0bGV8fCJFcnJvciIpLFNlKDMpLGFyKGYuYmFkRWRp'@;
put 'dENhdXNlKSxTZSg0KSxSZSgiY2xyTW9kYWxPcGVuIixmLnBrTnVsbCksU2UoOSksUmUoImNsck1vZGFsT3BlbiIsZi5ub1BrTnVsbCksU2UoOSksUmUoImNsck1vZGFsT3BlbiIsZi5wa0R1cHMpLFNlKDgpLFJlKCJuZ0Zvck9mIixmLmR1cGxpY2F0ZVBrSW5kZXhlcyksU2UoNCksUmUoImNs'@;
put 'ck1vZGFsT3BlbiIsZi50b29Mb25nKSxTZSg2KSxSZSgibmdGb3JPZiIsZi5leGNlZWRDZWxscyksU2UoNCksUmUoIm5nSWYiLGYubnVsbFZhcmlhYmxlcyksU2UoMSksUmUoImNsck1vZGFsT3BlbiIsZi5maWx0ZXIpKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbENsb3NhYmxlIiwh'@;
put 'MSksU2UoNCksd3IoIiAiLGYubGliZHMsIiAiKSxTZSgyKSxSZSgibmdJZiIsZi5maWx0ZXIpLFNlKDYpLFJlKCJjbHJMb2FkaW5nIixmLnN1Ym1pdExvYWRpbmcpLFNlKDIpLFJlKCJjbHJNb2RhbE9wZW4iLGYucXVlcnlFcnIpLFNlKDUpLGFyKGYucXVlcnlFcnJNZXNzYWdlKSxTZSg2KSxS'@;
put 'ZSgiY2xyTW9kYWxPcGVuIixmLmRpc2NhcmRTb3VyY2VGaWxlKSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLFNlKDYpLGFyKGYuZmlsZW5hbWUpLFNlKDcpLFJlKCJjbHJNb2RhbE9wZW4iLGYuZmlsZVBhc3N3b3JkTW9kYWwpKCJjbHJNb2RhbFNpemUiLCJt'@;
put 'ZCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksU2UoOSksUmUoIm5nSWYiLGYuZmlsZVVubG9ja0Vycm9yKSxTZSgzKSxSZSgiZGlzYWJsZWQiLGQudmFsdWUubGVuZ3RoPDEpLFNlKDIpLFJlKCJjbHJNb2RhbE9wZW4iLGYubWFudWFsRmlsZUVkaXRNb2RhbCkoImNsck1vZGFsU2l6ZSIsInhs'@;
put 'IikoImNsck1vZGFsQ2xvc2FibGUiLCExKSxTZSg2KSxhcihmLmZpbGVuYW1lKSxTZSg3KSxSZSgib3BlbiIsZi5kYXRhc2V0SW5mbykoImRzbWV0YSIsZi5kc21ldGEpLFNlKDEpLFJlKCJ2aWV3Ym94TW9kYWwiLGYudmlld2JveGVzKX19LGRlcGVuZGVuY2llczpbQTZlLHl1LFJhLCRpLGlz'@;
put 'LEJELFdhLHphLEkwLFJsLE1jLGtjLEpjLHhkLEloLGVsLGpVLE5IZSxCVSxNUyxFUyxrUyxoTCxSNyxfSSxMY2UsVHh0LFQ2ZSxiSSxISixkQXQscEF0LG1BdCxENmVdLHN0eWxlczpbIi5jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjA7Ym9yZGVyOjB9LmJ1dHRvbkJhcltf'@;
put 'bmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMTBweDthbGlnbi1pdGVtczpjZW50ZXJ9LnRlc3RSZWRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmZmY7YmFja2dyb3VuZDpyZ2JhKDI1NSwwLDAsLjgpIWltcG9ydGFudH1ob3QtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgICAu'@;
put 'Zmlyc3RDb2x1bW5IZWFkZXJTdHlsZSBidXR0b24uY2hhbmdlVHlwZXtkaXNwbGF5Om5vbmV9aG90LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmhhbmRzb250YWJsZSB0Ym9keSB0aC5odF9faGlnaGxpZ2h0LnByaW1hcnlLZXlIZWFkZXJTdHlsZSwgaG90LXRhYmxlW19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXSAgICAgLmhhbmRzb250YWJsZSB0aGVhZCB0aC5odF9faGlnaGxpZ2h0LnByaW1hcnlLZXlIZWFkZXJTdHlsZXtiYWNrZ3JvdW5kOnJnYmEoNDgsMTA3LDAsLjY5MDE5NjA3ODQpfWhvdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAgIC5wcmltYXJ5S2V5SGVhZGVyU3R5'@;
put 'bGV7YmFja2dyb3VuZDpyZ2JhKDQ4LDEwNywwLC40MzEzNzI1NDkpfWhvdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAgIHRoLnJlYWRvbmx5Q2VsbCBkaXZ7b3BhY2l0eTouNH1ob3QtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgICB0ZC5yZWFkb25seUNlbGx7b3BhY2l0eTouNX0u'@;
put 'aW5mb0Jhcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDoxNHB4O2JhY2tncm91bmQ6IzQ5NTk2Nztjb2xvcjojZmZmO3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6M3B4O2ZvbnQtc2l6ZToxNnB4O2hlaWdodDozMHB4O3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7b3ZlcmZsb3c6aGlk'@;
put 'ZGVuO3doaXRlLXNwYWNlOm5vd3JhcH0uaW5mb0Jhcltfbmdjb250ZW50LSVDT01QJV0gICBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDo4MCV9LmluZm9CYXJbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2hlaWdodDp1bnNldDt3aGl0ZS1zcGFjZTpub3JtYWx9LmluZm9CYXJbX25n'@;
put 'Y29udGVudC0lQ09NUCVdOmhvdmVyICAgc3Bhbltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6dW5zZXR9LnBrSGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiM2ODc2ODI7Y29sb3I6I2ZmZjttYXJnaW46LTFweH0uaGVhZGVyQmFyW19uZ2NvbnRlbnQtJUNPTVAlXXthbGln'@;
put 'bi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDojZmZmZmZmO2JhY2tncm91bmQ6I2Y1ZjZmZX0uZXJyb3ItaWNvbltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MzBweDtoZWlnaHQ6MzBweDtjb2xvcjpyZWR9LmJ0bkN0cmxbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5'@;
put 'LWNvbnRlbnQ6ZmxleC1lbmR9LmNhcmQtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCB0cmFuc3BhcmVudH0uaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXt2aXNpYmlsaXR5OmhpZGRlbn0ubXktZHJvcC16b25lW19uZ2NvbnRlbnQtJUNPTVAlXXti'@;
put 'b3JkZXI6c29saWQgMXB4IGxpZ2h0Z3JheTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDp3aGl0ZXNtb2tlO2JveC1zaGFkb3c6aW5zZXQgMCAwIDRweCAycHggI2E3YTVhNTJiO2hlaWdodDo1MHZofS5udi1maWxlLW92ZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjpzb2xpZCAy'@;
put 'cHggZ3JlZW59LmZpbGUtZHJvcC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmNlbnRlcn1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCl7LnByb2dyZXNTdGF0aWNbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6OXB4IWltcG9ydGFudH0ucHJvZ3Jl'@;
put 'c3NbX25nY29udGVudC0lQ09NUCVdLCAucHJvZ3Jlc3Mtc3RhdGljW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDpjYWxjKDEwMCUgLSAxNHB4KX19LmhvdEVkaXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9LmV4Y2VsLXBhcnNpbmdbX25nY29udGVudC0lQ09NUCVd'@;
put 'e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO3Bvc2l0aW9uOnJlbGF0aXZlfS5leGNlbC1wYXJzaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kZXRhaWxzW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MDtwb3NpdGlvbjphYnNvbHV0ZTt0'@;
put 'b3A6LTQ1cHh9LmVkaXQtcmVjb3JkLXNwaW5uZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjYpO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRv'@;
put 'bTowO3dpZHRoOjEwMCU7ei1pbmRleDo1MDB9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDgwcHgpey5wcm9ncmVzU3RhdGljW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjMycHghaW1wb3J0YW50fS5jYXJkLWJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNhcmQtZm9v'@;
put 'dGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjEwcHggMCAwfX0uY29udGVudC1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjAgLjhyZW0gLjhyZW0haW1wb3J0YW50O3BhZGRpbmctdG9wOjB9LmRyb3AtYXJlYVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7'@;
put 'aW5zZXQ6MDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjttYXJnaW46MXB4O2JvcmRlcjoycHggZGFzaGVkICNmZmY7ei1pbmRleDotMX0uZHJvcC1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHNwYW5bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4O21hcmdp'@;
put 'bi10b3A6MjBweDtjb2xvcjojZmZmfSNzdWJtaXRCdG5bX25nY29udGVudC0lQ09NUCVdLCAjY2FuY2VsU3VibWl0QnRuW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxNTBweH0iXX0pLGx9KSgpO2NvbnN0IGxUdD1be3BhdGg6IjpsaWJNZW0iLGNvbXBvbmVudDpLUH0se3BhdGg6IjpsaWJN'@;
put 'ZW0vOmZpbHRlcklkIixjb21wb25lbnQ6S1B9LHtwYXRoOiJlZGl0LXJlY29yZC86bGliTWVtIixjb21wb25lbnQ6S1B9LHtwYXRoOiJlZGl0LXJlY29yZC86bGliTWVtLzpmaWx0ZXJJZCIsY29tcG9uZW50OktQfV07bGV0IHNUdD0oKCk9PntjbGFzcyBse31yZXR1cm4gbC5cdTAyNzVmYWM9'@;
put 'ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVtb2Q9RGkoe3R5cGU6bH0pLGwuXHUwMjc1aW5qPXhpKHtpbXBvcnRzOltibyxvNC5mb3JDaGlsZChsVHQpLG80XX0pLGx9KSgpLFZKPSgoKT0+e2NsYXNzIGx7fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1'@;
put 'cm4gbmV3KGF8fGwpfSxsLlx1MDI3NW1vZD1EaSh7dHlwZTpsfSksbC5cdTAyNzVpbmo9eGkoe2ltcG9ydHM6W2JvLElkLGJvLGRjLCQzXX0pLGx9KSgpLFA2ZT0oKCk9PntjbGFzcyBse31yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVt'@;
put 'b2Q9RGkoe3R5cGU6bH0pLGwuXHUwMjc1aW5qPXhpKHtpbXBvcnRzOltkYyxJZCxCRSxibyxWSiwkM119KSxsfSkoKSxCSj0oKCk9PntjbGFzcyBse31yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVtb2Q9RGkoe3R5cGU6bH0pLGwuXHUw'@;
put 'Mjc1aW5qPXhpKHtpbXBvcnRzOltibyxJZCxibyxkYyxCRSxWRSwkM119KSxsfSkoKSxGNmU9KCgpPT57Y2xhc3MgbHt9cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1bW9kPURpKHt0eXBlOmx9KSxsLlx1MDI3NWluaj14aSh7aW1wb3J0'@;
put 'czpbYm8sSWQsYm8sZGMsQkoscEwsazZlLFY1ZSxWSiwkM119KSxsfSkoKTtONWUoKTtsZXQgdVR0PSgoKT0+e2NsYXNzIGx7fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NW1vZD1EaSh7dHlwZTpsfSksbC5cdTAyNzVpbmo9eGkoe2lt'@;
put 'cG9ydHM6W0Y2ZSxibyxkYyxzVHQsSWQscEwuZm9yUm9vdCgpLEJFLCQzLFZQLFA2ZSxWRSxWSixrNmUsQkpdfSksbH0pKCk7ZnVuY3Rpb24gY1R0KGwsYyl7MSZsJiZ0bigwLCJjbHItaWNvbiIsMTIpfWZ1bmN0aW9uIGZUdChsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImNsci1p'@;
put 'Y29uIiwxMyksRXQoImNsaWNrIixmdW5jdGlvbigpe1V0KGEpO2NvbnN0IGQ9R2UoMik7cmV0dXJuIGQuZ3JvdXBTZWFyY2g9IiIsWnQoZC5ncm91cExpc3RPbkZpbHRlcigpKX0pLENlKCl9fWZ1bmN0aW9uIGRUdChsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImNsci10cmVlLW5v'@;
put 'ZGUiLDYpKDEsImRpdiIsNykoMiwiaW5wdXQiLDgsOSksRXQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGQpe3JldHVybiBVdChhKSxadChHZSgpLmdyb3VwU2VhcmNoPWQpfSkoImtleXVwIixmdW5jdGlvbigpe3JldHVybiBVdChhKSxadChHZSgpLmdyb3VwTGlzdE9uRmlsdGVyKCkpfSks'@;
put 'Q2UoKSx0dCg0LGNUdCwxLDAsImNsci1pY29uIiwxMCksdHQoNSxmVHQsMSwwLCJjbHItaWNvbiIsMTEpLENlKCkoKX1pZigyJmwpe2NvbnN0IGE9UWkoMyksZj1HZSgpO1NlKDIpLFJlKCJuZ01vZGVsIixmLmdyb3VwU2VhcmNoKSxTZSgyKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSks'@;
put 'U2UoMSksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBoVHQobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJjbHItdHJlZS1ub2RlIiwxNSksRXQoImNsaWNrIixmdW5jdGlvbigpe1V0KGEpO2NvbnN0IGQ9R2UoKS4kaW1wbGljaXQ7cmV0dXJuIFp0KEdlKCku'@;
put 'Z3JvdXBPbkNsaWNrKGQpKX0pLHllKDEsInAiLDE2KSx0bigyLCJjbHItaWNvbiIsMTcpLFllKDMpLENlKCkoKX1pZigyJmwpe2NvbnN0IGE9R2UoKS4kaW1wbGljaXQsZj1HZSgpO2dyKCJ0YWJsZS1hY3RpdmUiLGEuR1JPVVBVUkk9PT1mLmdyb3VwVXJpKSxTZSgzKSx3cigiICIsYS5HUk9V'@;
put 'UE5BTUUsIiAiKX19ZnVuY3Rpb24gcFR0KGwsYyl7aWYoMSZsJiYoV3IoMCksdHQoMSxoVHQsNCwzLCJjbHItdHJlZS1ub2RlIiwxNCksR3IoKSksMiZsKXtjb25zdCBhPWMuJGltcGxpY2l0O1NlKDEpLFJlKCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiBtVHQobCxjKXsxJmwmJih5ZSgw'@;
put 'LCJkaXYiLDE4KSgxLCJzcGFuIiwxOSksWWUoMiwiIExvYWRpbmcuLi4gIiksQ2UoKSgpKX1mdW5jdGlvbiBnVHQobCxjKXtpZigxJmwmJih5ZSgwLCJkaXYiLDIxKSgxLCJkaXYiLDIyKSgyLCJ0YWJsZSIsMjQpKDMsInRib2R5IikoNCwidHIiKSg1LCJ0ZCIsMjUpKDYsInAiLDI2KSg3LCJi'@;
put 'IiksWWUoOCksQ2UoKSgpKCkoKSx5ZSg5LCJ0ciIpKDEwLCJ0ZCIsMjUpKDExLCJpIiksWWUoMTIpLENlKCkoKSgpKCkoKSgpKCkpLDImbCl7Y29uc3QgYT1HZSgyKTtTZSg4KSxhcihhLmdyb3VwTmFtZSksU2UoNCksYXIoYS5ncm91cERlc2N8fCJubyBkZXNjcmlwdGlvbiIpfX1mdW5jdGlv'@;
put 'biB2VHQobCxjKXsxJmwmJih5ZSgwLCJoNSIpLFllKDEsIk5vIE1lbWJlcnMgUHJlc2VudCIpLENlKCkpfWZ1bmN0aW9uIHlUdChsLGMpezEmbCYmKFdyKDApLHllKDEsInRkIiwzMSkoMiwiYiIpLFllKDMsIk5BTUUiKSxDZSgpKCkseWUoNCwidGQiLDMxKSg1LCJiIiksWWUoNiwiRU1BSUwi'@;
put 'KSxDZSgpKCkseWUoNywidGQiLDMxKSg4LCJiIiksWWUoOSwiQ1JFQVRFRCIpLENlKCkoKSx5ZSgxMCwidGQiLDMyKSgxMSwiYiIpLFllKDEyLCJVUERBVEVEIiksQ2UoKSgpLEdyKCkpfWZ1bmN0aW9uIGJUdChsLGMpezEmbCYmKFdyKDApLHllKDEsInRkIiwzMSkoMiwiYiIpLFllKDMsIklE'@;
put 'IiksQ2UoKSgpLHllKDQsInRkIiwzMSkoNSwiYiIpLFllKDYsIkRJU1BMQVkgTkFNRSIpLENlKCkoKSx5ZSg3LCJ0ZCIsMzEpKDgsImIiKSxZZSg5LCJVU0VSIE5BTUUiKSxDZSgpKCksR3IoKSl9ZnVuY3Rpb24gX1R0KGwsYyl7aWYoMSZsJiYoV3IoMCkseWUoMSwidGQiLDMyKSxZZSgyKSxD'@;
put 'ZSgpLHllKDMsInRkIiwzMiksWWUoNCksQ2UoKSx5ZSg1LCJ0ZCIsMzIpLFllKDYpLENlKCkseWUoNywidGQiLDMyKSxZZSg4KSxDZSgpLEdyKCkpLDImbCl7Y29uc3QgYT1HZSgpLiRpbXBsaWNpdDtTZSgyKSxhcihhLk1FTUJFUk5BTUUpLFNlKDIpLGFyKGEuRU1BSUwpLFNlKDIpLGFyKGEu'@;
put 'TUVNQkVSQ1JFQVRFRCksU2UoMiksYXIoYS5NRU1CRVJVUERBVEVEKX19ZnVuY3Rpb24gd1R0KGwsYyl7aWYoMSZsJiYoV3IoMCkseWUoMSwidGQiLDMyKSxZZSgyKSxDZSgpLHllKDMsInRkIiwzMiksWWUoNCksQ2UoKSx5ZSg1LCJ0ZCIsMzIpLFllKDYpLENlKCksR3IoKSksMiZsKXtjb25z'@;
put 'dCBhPUdlKCkuJGltcGxpY2l0O1NlKDIpLGFyKGEuSUQpLFNlKDIpLGFyKGEuRElTUExBWU5BTUUpLFNlKDIpLGFyKGEuVVNFUk5BTUUpfX1mdW5jdGlvbiBDVHQobCxjKXtpZigxJmwmJih5ZSgwLCJ0ciIsMzMpLHR0KDEsX1R0LDksNCwibmctY29udGFpbmVyIiw1KSx0dCgyLHdUdCw3LDMs'@;
put 'Im5nLWNvbnRhaW5lciIsNSksQ2UoKSksMiZsKXtjb25zdCBhPWMuJGltcGxpY2l0LGY9R2UoNCk7UmUoInJvdXRlckxpbmsiLCIvdmlldy91c2VybmF2L3VzZXJzLyIrKGEuVVJJTUVNfHxhLklEKSksU2UoMSksUmUoIm5nSWYiLGYuc2VydmVyVHlwZT09PWYuU2VydmVyVHlwZS5TYXM5KSxT'@;
put 'ZSgxKSxSZSgibmdJZiIsZi5zZXJ2ZXJUeXBlPT09Zi5TZXJ2ZXJUeXBlLlNhc2pzKX19ZnVuY3Rpb24gU1R0KGwsYyl7aWYoMSZsJiYoeWUoMCwidGFibGUiLDI5KSgxLCJ0aGVhZCIpKDIsInRyIiksdHQoMyx5VHQsMTMsMCwibmctY29udGFpbmVyIiw1KSx0dCg0LGJUdCwxMCwwLCJuZy1j'@;
put 'b250YWluZXIiLDUpLENlKCkoKSx5ZSg1LCJ0Ym9keSIpLHR0KDYsQ1R0LDMsMywidHIiLDMwKSxDZSgpKCkpLDImbCl7Y29uc3QgYT1HZSgzKTtTZSgzKSxSZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpLFNlKDEpLFJlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1h'@;
put 'LlNlcnZlclR5cGUuU2FzanMpLFNlKDIpLFJlKCJuZ0Zvck9mIixhLmdyb3VwTWVtYmVycyl9fWZ1bmN0aW9uIE1UdChsLGMpe2lmKDEmbCYmKHllKDAsImRpdiIpKDEsImgzIiksWWUoMiksQ2UoKSx0dCgzLHZUdCwyLDAsImg1Iiw1KSx5ZSg0LCJkaXYiLDI3KSx0dCg1LFNUdCw3LDMsInRh'@;
put 'YmxlIiwyOCksQ2UoKSgpKSwyJmwpe2NvbnN0IGE9R2UoMik7U2UoMiksd3IoIk1FTUJFUlMgKCIsYS5ncm91cE1lbWJlckNvdW50LCIpIiksU2UoMSksUmUoIm5nSWYiLDA9PWEuZ3JvdXBNZW1iZXJDb3VudCksU2UoMiksUmUoIm5nSWYiLDAhPWEuZ3JvdXBNZW1iZXJDb3VudCl9fWZ1bmN0'@;
put 'aW9uIGtUdChsLGMpezEmbCYmKHllKDAsImg1IiksWWUoMSwiTm8gTWVtYmVycyBQcmVzZW50IiksQ2UoKSl9ZnVuY3Rpb24gRVR0KGwsYyl7aWYoMSZsJiYoeWUoMCwidHIiLDMzKSgxLCJ0ZCIsMzIpLFllKDIpLENlKCkoKSksMiZsKXtjb25zdCBhPWMuJGltcGxpY2l0O1JlKCJyb3V0ZXJM'@;
put 'aW5rIiwiL3ZpZXcvdXNlcm5hdi91c2Vycy8iK2EuTUVNQkVSSUQpLFNlKDIpLGFyKGEuTUVNQkVSTkFNRSl9fWZ1bmN0aW9uIHhUdChsLGMpe2lmKDEmbCYmKHllKDAsInRhYmxlIiwyOSkoMSwidGhlYWQiKSgyLCJ0ciIpKDMsInRkIikoNCwiYiIpLFllKDUpLENlKCkoKSgpKCkseWUoNiwi'@;
put 'dGJvZHkiKSx0dCg3LEVUdCwzLDIsInRyIiwzMCksQ2UoKSgpKSwyJmwpe2NvbnN0IGE9R2UoMyk7U2UoNSksd3IoIk1FTUJFUlMgKCIsYS5ncm91cE1lbWJlckNvdW50LCIpIiksU2UoMiksUmUoIm5nRm9yT2YiLGEuZ3JvdXBNZW1iZXJzKX19ZnVuY3Rpb24gQVR0KGwsYyl7aWYoMSZsJiYo'@;
put 'eWUoMCwiZGl2IikoMSwiaDMiKSxZZSgyKSxDZSgpLHR0KDMsa1R0LDIsMCwiaDUiLDUpLHllKDQsImRpdiIsMjcpLHR0KDUseFR0LDgsMiwidGFibGUiLDI4KSxDZSgpKCkpLDImbCl7Y29uc3QgYT1HZSgyKTtTZSgyKSxhcihhLmdyb3VwTmFtZSksU2UoMSksUmUoIm5nSWYiLDA9PWEuZ3Jv'@;
put 'dXBNZW1iZXJDb3VudCksU2UoMiksUmUoIm5nSWYiLDAhPWEuZ3JvdXBNZW1iZXJDb3VudCl9fWZ1bmN0aW9uIFRUdChsLGMpe2lmKDEmbCYmKHllKDAsImRpdiIpLHR0KDEsZ1R0LDEzLDIsImRpdiIsMjApLHllKDIsImRpdiIsMjEpKDMsImRpdiIsMjIpKDQsImRpdiIsMjMpLHR0KDUsTVR0'@;
put 'LDYsMywiZGl2Iiw1KSx0dCg2LEFUdCw2LDMsImRpdiIsNSksdG4oNywiYnIiKSxDZSgpKCkoKSgpKSwyJmwpe2NvbnN0IGE9R2UoKTtTZSgxKSxSZSgibmdJZiIsYS5zZXJ2ZXJUeXBlIT09YS5TZXJ2ZXJUeXBlLlNhc1ZpeWEpLFNlKDQpLFJlKCJuZ0lmIixhLnNlcnZlclR5cGUhPT1hLlNl'@;
put 'cnZlclR5cGUuU2FzVml5YSksU2UoMSksUmUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXNWaXlhKX19bGV0IEg2ZT0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEsZixkLGgsbSl7dGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5oZWxwZXJTZXJ2aWNlPWYsdGhpcy5yb3V0'@;
put 'ZXI9ZCx0aGlzLmxvY2F0aW9uPWgsdGhpcy5yb3V0ZT1tLHRoaXMuZ3JvdXBTZWFyY2g9IiIsdGhpcy5wYXJhbVByZXNlbnQ9ITEsdGhpcy5wYXJhbVVSST0iIix0aGlzLmdyb3VwVXJpPSIiLHRoaXMuZ3JvdXBOYW1lPSIiLHRoaXMuZ3JvdXBEZXNjPSIiLHRoaXMuc2FzanNDb25maWc9bmV3'@;
put 'IHYxLlNBU2pzQ29uZmlnLHRoaXMuaXNWaXlhPSExLHRoaXMubG9hZGluZz0hMSx0aGlzLlNlcnZlclR5cGU9WHUuRCx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLHRoaXMuc2VydmVyVHlwZT10aGlzLnNhc1NlcnZpY2UuZ2V0U2VydmVyVHlwZSgp'@;
put 'LCJTQVNWSVlBIj09PXRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSYmKHRoaXMuaXNWaXlhPSEwKX1uZ09uSW5pdCgpe0puLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uPSJ2aWV3L3VzZXJuYXYvZ3JvdXBzIix2b2lkIDAhPT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmkmJih0aGlz'@;
put 'LnBhcmFtUHJlc2VudD0hMCx0aGlzLnBhcmFtVVJJPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnVyaSksSm4udXNlcm5hdi5ncm91cExpc3QmJiF0aGlzLnBhcmFtUHJlc2VudD8odGhpcy5ncm91cHM9Sm4udXNlcm5hdi5ncm91cExpc3QsdGhpcy5ncm91cFNlYXJjaD1Kbi51c2VybmF2'@;
put 'Lmdyb3VwU2VhcmNoKToodm9pZCAwPT09Sm4udXNlcm5hdi5ncm91cExpc3Q/KHRoaXMubG9hZGluZz0hMCx0aGlzLmlzVml5YT9mZXRjaCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCsiL2lkZW50aXRpZXMvZ3JvdXBzP2xpbWl0PTIwMDAiLHtoZWFkZXJzOntBY2NlcHQ6ImFwcGxpY2F0'@;
put 'aW9uL2pzb24ifX0pLnRoZW4oYT0+YS50ZXh0KCkpLnRoZW4oYT0+e2xldCBkPUpTT04ucGFyc2UoYSkuaXRlbXMubWFwKGg9Pih7R1JPVVBVUkk6aC5pZCxHUk9VUE5BTUU6aC5uYW1lLEdST1VQREVTQzpoLmRlc2NyaXB0aW9ufSkpO3RoaXMubG9hZGluZz0hMSx0aGlzLmdyb3Vwcz1kLEpu'@;
put 'LnVzZXJuYXYuZ3JvdXBMaXN0PWR9KTp0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL2dldGdyb3VwcyIsbnVsbCkudGhlbihhPT57dGhpcy5sb2FkaW5nPSExLHRoaXMuZ3JvdXBzPWEuZ3JvdXBzLEpuLnVzZXJuYXYuZ3JvdXBMaXN0PWEuZ3JvdXBzfSkpOih0aGlzLmdyb3Vwcz1K'@;
put 'bi51c2VybmF2Lmdyb3VwTGlzdCx0aGlzLmdyb3VwU2VhcmNoPUpuLnVzZXJuYXYuZ3JvdXBTZWFyY2gpLHRoaXMucGFyYW1QcmVzZW50JiYodGhpcy5sb2FkaW5nPSEwLHRoaXMuaXNWaXlhP2ZldGNoKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKyIvaWRlbnRpdGllcy9ncm91cHMvIit0'@;
put 'aGlzLnBhcmFtVVJJKyIvbWVtYmVycz9saW1pdD0yMDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGE9PmEudGV4dCgpKS50aGVuKGE9PntsZXQgZj1KU09OLnBhcnNlKGEpO3RoaXMubG9hZGluZz0hMTtsZXQgZD1mLml0ZW1zLm1hcChoPT4oe01FTUJF'@;
put 'Uk5BTUU6aC5uYW1lLE1FTUJFUklEOmguaWR9KSk7dGhpcy5ncm91cE1lbWJlcnM9ZCx0aGlzLmdyb3VwTWVtYmVyQ291bnQ9ZC5sZW5ndGgsdGhpcy5ncm91cFVyaT10aGlzLnBhcmFtVVJJLHRoaXMuZ3JvdXBOYW1lPXRoaXMucGFyYW1VUkl9KTp0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgi'@;
put 'dXNlcm5hdi91c2VybWVtYmVyc2J5Z3JvdXAiLHtpd2FudDpbe2dyb3VwaWQ6dGhpcy5wYXJhbVVSSX1dfSkudGhlbihmPT57dGhpcy5ncm91cE1lbWJlcnM9Zi5zYXNtZW1iZXJzLHRoaXMuZ3JvdXBNZW1iZXJDb3VudD1mLnNhc21lbWJlcnMubGVuZ3RoLHZvaWQgMCE9PWYuc2FzbWVtYmVy'@;
put 'c1swXSYmKHRoaXMubG9hZGluZz0hMSx0aGlzLmdyb3VwVXJpPWYuc2FzbWVtYmVyc1swXS5VUklNRU18fHRoaXMucGFyYW1VUkksdGhpcy5ncm91cE5hbWU9Zi5zYXNtZW1iZXJzWzBdLkdST1VQTkFNRSx0aGlzLmdyb3VwRGVzYz1mLnNhc21lbWJlcnNbMF0uR1JPVVBERVNDLHRoaXMuZ3Jv'@;
put 'dXBOYW1lfHwodGhpcy5ncm91cE5hbWU9dGhpcy5wYXJhbVVSSSkpfSkpKX1ncm91cExpc3RPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5ncm91cHMsdGhpcy5ncm91cFNlYXJjaCwiR1JPVVBOQU1FIiksSm4udXNlcm5hdi5ncm91cFNlYXJjaD10'@;
put 'aGlzLmdyb3VwU2VhcmNofWdyb3VwT25DbGljayhhKXt0aGlzLmxvYWRpbmc9ITA7bGV0IGY9dGhpcy5yb3V0ZXIudXJsO3RoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKHRoaXMucGFyYW1QcmVzZW50P2Yuc2xpY2UoMCxmLmxhc3RJbmRleE9mKCIvIikpKyIvIitlbmNvZGVVUkkoYS5HUk9V'@;
put 'UFVSSSk6ZisiLyIrZW5jb2RlVVJJKGEuR1JPVVBVUkkpKSx0aGlzLmlzVml5YT9mZXRjaCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCsiL2lkZW50aXRpZXMvZ3JvdXBzLyIrYS5HUk9VUFVSSSsiL21lbWJlcnM/bGltaXQ9MjAwMCIse2hlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24v'@;
put 'anNvbiJ9fSkudGhlbihkPT5kLnRleHQoKSkudGhlbihkPT57bGV0IGg9SlNPTi5wYXJzZShkKTt0aGlzLmxvYWRpbmc9ITEsdGhpcy5ncm91cFVyaT1hLkdST1VQVVJJLHRoaXMuZ3JvdXBOYW1lPWEuR1JPVVBOQU1FLHRoaXMuZ3JvdXBEZXNjPWEuR1JPVVBERVNDO2xldCBtPWguaXRlbXMu'@;
put 'bWFwKF89Pih7TUVNQkVSTkFNRTpfLm5hbWUsTUVNQkVSSUQ6Xy5pZH0pKTt0aGlzLmdyb3VwTWVtYmVycz1tLHRoaXMuZ3JvdXBNZW1iZXJDb3VudD1tLmxlbmd0aH0pOnRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJtZW1iZXJzYnlncm91cCIse2l3YW50Olt7Z3JvdXBp'@;
put 'ZDphLkdST1VQVVJJfV19KS50aGVuKGg9Pnt0aGlzLmxvYWRpbmc9ITEsdGhpcy5ncm91cFVyaT1hLkdST1VQVVJJLHRoaXMuZ3JvdXBOYW1lPWEuR1JPVVBOQU1FLHRoaXMuZ3JvdXBEZXNjPWEuR1JPVVBERVNDLHRoaXMuZ3JvdXBNZW1iZXJzPWguc2FzbWVtYmVycyx0aGlzLmdyb3VwTWVt'@;
put 'YmVyQ291bnQ9aC5zYXNtZW1iZXJzLmxlbmd0aH0pfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChwbCkscnQoUHUpLHJ0KExhKSxydChnZCkscnQodHUpKX0sbC5cdTAyNzVjbXA9a3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siYXBwLWdyb3VwIl1d'@;
put 'LGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczo3LHZhcnM6NCxjb25zdHM6W1sxLCJzaWRlYmFyLWhlaWdodCJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29udGVudC1hcmVhIl0sWyJjbGFzcyIsImxv'@;
put 'YWRpbmdTcGlubmVyIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkZpbHRlciBieSBHcm91cHMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMs'@;
put 'Im5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiXSxbInNlYXJjaExpYlRyZWVJbnB1dCIsIiJdLFsic2hhcGUiLCJzZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywi'@;
put 'Y2xpY2siXSxbMywidGFibGUtYWN0aXZlIiwiY2xpY2siLDQsIm5nSWYiXSxbMywiY2xpY2siXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLCJsaXN0LXBhZGRpbmciXSxbInNoYXBlIiwidXNlcnMiXSxbMSwibG9hZGluZ1NwaW5uZXIiXSxbMSwic3Bpbm5lciJdLFsiY2xhc3MiLCJjbHIt'@;
put 'cm93Iiw0LCJuZ0lmIl0sWzEsImNsci1yb3ciXSxbMSwiY2xyLWNvbC04Il0sWzEsImNhcmQiLCJncm91cC1kYXRhIl0sWzEsInRhYmxlIiwiZ3JvdXAtaW5mbyJdLFsxLCJsZWZ0Il0sWzEsImdyb3VwLWluZm8tdGV4dCJdLFsxLCJ0YWJsZS1jb250YWluZXIiXSxbImNsYXNzIiwidGFibGUg'@;
put 'bWVtYmVyLXRhYmxlIiw0LCJuZ0lmIl0sWzEsInRhYmxlIiwibWVtYmVyLXRhYmxlIl0sWzMsInJvdXRlckxpbmsiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJ3aWR0aC0yNSJdLFsxLCIiXSxbMywicm91dGVyTGluayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGYpezEmYSYmKHllKDAsImFw'@;
put 'cC1zaWRlYmFyIiwwKSgxLCJjbHItdHJlZSIpLHR0KDIsZFR0LDYsMywiY2xyLXRyZWUtbm9kZSIsMSksdHQoMyxwVHQsMiwxLCJuZy1jb250YWluZXIiLDIpLENlKCkoKSx5ZSg0LCJkaXYiLDMpLHR0KDUsbVR0LDMsMCwiZGl2Iiw0KSx0dCg2LFRUdCw4LDMsImRpdiIsNSksQ2UoKSksMiZh'@;
put 'JiYoU2UoMiksUmUoIm5nSWYiLGYuZ3JvdXBzKSxTZSgxKSxSZSgibmdGb3JPZiIsZi5ncm91cHMpLFNlKDIpLFJlKCJuZ0lmIixmLmxvYWRpbmcpLFNlKDEpLFJlKCJuZ0lmIixmLmdyb3VwTWVtYmVycyYmIWYubG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W1JhLCRpLGlzLFdhLHphLEkwLERk'@;
put 'LExmLFJsLFJmLGs0XSxzdHlsZXM6WyIuc2lkZWJhci1oZWlnaHRbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlfS5ncm91cC1pbmZvLXRleHRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lO2ZvbnQtc2l6ZToyMHB4fS5ncm91cC1pbmZvW19uZ2NvbnRlbnQtJUNPTVAl'@;
put 'XXtiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjk7Ym9yZGVyOjFweCBzb2xpZCAjYTdhN2E3O2JvcmRlci1yYWRpdXM6M3B4O2JveC1zaGFkb3c6MCAycHggNXB4ICNkYWQ3ZDd9Lmdyb3VwLWluZm9bX25nY29udGVudC0lQ09NUCVdICAgdGRbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246'@;
put 'Y2VudGVyfS5ncm91cC1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjk7Ym9yZGVyOjFweCBzb2xpZCAjYTdhN2E3O2JvcmRlci1yYWRpdXM6M3B4O2JveC1zaGFkb3c6MCAycHggNXB4ICNkYWQ3ZDd9Lmdyb3VwLWRhdGFbX25nY29udGVudC0lQ09NUCVd'@;
put 'e21pbi1oZWlnaHQ6YXV0b30uZ3JvdXAtZGF0YVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5ncm91cC1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmNlbnRlcn0uZ3JvdXAtZGF0YVtfbmdjb250'@;
put 'ZW50LSVDT01QJV0gICAubWVtYmVyLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjk7d2lkdGg6MTAwJX0uZ3JvdXAtZGF0YVtfbmdjb250ZW50LSVDT01QJV0gICAubWVtYmVyLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoZWFkW19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNkYWRhZGF9Lmdyb3VwLWRhdGFbX25nY29udGVudC0lQ09NUCVdICAgLm1lbWJlci10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICB0Ym9keVtfbmdjb250ZW50LSVDT01QJV0gICB0cltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7YmFja2dy'@;
put 'b3VuZC1jb2xvcjojZTZlNmU2O2N1cnNvcjpwb2ludGVyfS50YWJsZS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmF1dG99QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpey5ncm91cC1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4taGVpZ2h0OnVu'@;
put 'c2V0IWltcG9ydGFudH19Il19KSxsfSkoKTtmdW5jdGlvbiBPVHQoKXt9ZnVuY3Rpb24gakoobCl7cmV0dXJuIG51bGw9PWw/T1R0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihsKX19ZnVuY3Rpb24gTjZlKGwpe3JldHVybiBudWxsPT1sP1tdOkFycmF5LmlzQXJyYXko'@;
put 'bCk/bDpBcnJheS5mcm9tKGwpfWZ1bmN0aW9uIElUdCgpe3JldHVybltdfWZ1bmN0aW9uIFY2ZShsKXtyZXR1cm4gbnVsbD09bD9JVHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGwpfX1mdW5jdGlvbiBCNmUobCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRo'@;
put 'aXMubWF0Y2hlcyhsKX19ZnVuY3Rpb24gajZlKGwpe3JldHVybiBmdW5jdGlvbihjKXtyZXR1cm4gYy5tYXRjaGVzKGwpfX12YXIgUFR0PUFycmF5LnByb3RvdHlwZS5maW5kO2Z1bmN0aW9uIEhUdCgpe3JldHVybiB0aGlzLmZpcnN0RWxlbWVudENoaWxkfXZhciBWVHQ9QXJyYXkucHJvdG90'@;
put 'eXBlLmZpbHRlcjtmdW5jdGlvbiBCVHQoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKX1mdW5jdGlvbiB6NmUobCl7cmV0dXJuIG5ldyBBcnJheShsLmxlbmd0aCl9ZnVuY3Rpb24gcVAobCxjKXt0aGlzLm93bmVyRG9jdW1lbnQ9bC5vd25lckRvY3VtZW50LHRoaXMubmFtZXNw'@;
put 'YWNlVVJJPWwubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9bCx0aGlzLl9fZGF0YV9fPWN9ZnVuY3Rpb24gV1R0KGwsYyxhLGYsZCxoKXtmb3IodmFyIF8sbT0wLE89Yy5sZW5ndGgsWD1oLmxlbmd0aDttPFg7KyttKShfPWNbbV0pPyhfLl9fZGF0YV9fPWhbbV0s'@;
put 'ZlttXT1fKTphW21dPW5ldyBxUChsLGhbbV0pO2Zvcig7bTxPOysrbSkoXz1jW21dKSYmKGRbbV09Xyl9ZnVuY3Rpb24gR1R0KGwsYyxhLGYsZCxoLG0pe3ZhciBfLE8seGUsWD1uZXcgTWFwLGFlPWMubGVuZ3RoLHBlPWgubGVuZ3RoLGJlPW5ldyBBcnJheShhZSk7Zm9yKF89MDtfPGFlOysr'@;
put 'XykoTz1jW19dKSYmKGJlW19dPXhlPW0uY2FsbChPLE8uX19kYXRhX18sXyxjKSsiIixYLmhhcyh4ZSk/ZFtfXT1POlguc2V0KHhlLE8pKTtmb3IoXz0wO188cGU7KytfKXhlPW0uY2FsbChsLGhbX10sXyxoKSsiIiwoTz1YLmdldCh4ZSkpPyhmW19dPU8sTy5fX2RhdGFfXz1oW19dLFguZGVs'@;
put 'ZXRlKHhlKSk6YVtfXT1uZXcgcVAobCxoW19dKTtmb3IoXz0wO188YWU7KytfKShPPWNbX10pJiZYLmdldChiZVtfXSk9PT1PJiYoZFtfXT1PKX1mdW5jdGlvbiAkVHQobCl7cmV0dXJuIGwuX19kYXRhX199ZnVuY3Rpb24gcVR0KGwpe3JldHVybiJvYmplY3QiPT10eXBlb2YgbCYmImxlbmd0'@;
put 'aCJpbiBsP2w6QXJyYXkuZnJvbShsKX1mdW5jdGlvbiBuT3QobCxjKXtyZXR1cm4gbDxjPy0xOmw+Yz8xOmw+PWM/MDpOYU59cVAucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpxUCxhcHBlbmRDaGlsZDpmdW5jdGlvbihsKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShsLHRoaXMu'@;
put 'X25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24obCxjKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShsLGMpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKGwpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvcihsKX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbihs'@;
put 'KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwobCl9fTt2YXIgeko9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiO2NvbnN0IFU2ZT17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6ekoseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkv'@;
put 'eGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtmdW5jdGlvbiBYUChsKXt2YXIgYz1sKz0iIixhPWMuaW5kZXhPZigiOiIpO3JldHVybiBhPj0wJiYieG1sbnMiIT09KGM9bC5zbGlj'@;
put 'ZSgwLGEpKSYmKGw9bC5zbGljZShhKzEpKSxVNmUuaGFzT3duUHJvcGVydHkoYyk/e3NwYWNlOlU2ZVtjXSxsb2NhbDpsfTpsfWZ1bmN0aW9uIHVPdChsKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShsKX19ZnVuY3Rpb24gY090KGwpe3JldHVybiBmdW5jdGlvbigp'@;
put 'e3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobC5zcGFjZSxsLmxvY2FsKX19ZnVuY3Rpb24gZk90KGwsYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUobCxjKX19ZnVuY3Rpb24gZE90KGwsYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyhsLnNwYWNl'@;
put 'LGwubG9jYWwsYyl9fWZ1bmN0aW9uIGhPdChsLGMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBhPWMuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWE/dGhpcy5yZW1vdmVBdHRyaWJ1dGUobCk6dGhpcy5zZXRBdHRyaWJ1dGUobCxhKX19ZnVuY3Rpb24gcE90KGwsYyl7cmV0dXJuIGZ1bmN0'@;
put 'aW9uKCl7dmFyIGE9Yy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09YT90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGwuc3BhY2UsbC5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyhsLnNwYWNlLGwubG9jYWwsYSl9fWZ1bmN0aW9uIFo2ZShsKXtyZXR1cm4gbC5vd25lckRvY3VtZW50JiZs'@;
put 'Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fGwuZG9jdW1lbnQmJmx8fGwuZGVmYXVsdFZpZXd9ZnVuY3Rpb24gZ090KGwpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobCl9fWZ1bmN0aW9uIHZPdChsLGMsYSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5z'@;
put 'dHlsZS5zZXRQcm9wZXJ0eShsLGMsYSl9fWZ1bmN0aW9uIHlPdChsLGMsYSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGY9Yy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09Zj90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGwpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkobCxmLGEpfX1mdW5j'@;
put 'dGlvbiBBYihsLGMpe3JldHVybiBsLnN0eWxlLmdldFByb3BlcnR5VmFsdWUoYyl8fFo2ZShsKS5nZXRDb21wdXRlZFN0eWxlKGwsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShjKX1mdW5jdGlvbiBfT3QobCl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbbF19fWZ1bmN0aW9uIHdPdChs'@;
put 'LGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbbF09Y319ZnVuY3Rpb24gQ090KGwsYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9Yy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09YT9kZWxldGUgdGhpc1tsXTp0aGlzW2xdPWF9fWZ1bmN0aW9uIFk2ZShsKXtyZXR1cm4gbC50cmltKCku'@;
put 'c3BsaXQoL158XHMrLyl9ZnVuY3Rpb24gVUoobCl7cmV0dXJuIGwuY2xhc3NMaXN0fHxuZXcgVzZlKGwpfWZ1bmN0aW9uIFc2ZShsKXt0aGlzLl9ub2RlPWwsdGhpcy5fbmFtZXM9WTZlKGwuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gRzZlKGwsYyl7Zm9yKHZhciBhPVVK'@;
put 'KGwpLGY9LTEsZD1jLmxlbmd0aDsrK2Y8ZDspYS5hZGQoY1tmXSl9ZnVuY3Rpb24gJDZlKGwsYyl7Zm9yKHZhciBhPVVKKGwpLGY9LTEsZD1jLmxlbmd0aDsrK2Y8ZDspYS5yZW1vdmUoY1tmXSl9ZnVuY3Rpb24gTU90KGwpe3JldHVybiBmdW5jdGlvbigpe0c2ZSh0aGlzLGwpfX1mdW5jdGlv'@;
put 'biBrT3QobCl7cmV0dXJuIGZ1bmN0aW9uKCl7JDZlKHRoaXMsbCl9fWZ1bmN0aW9uIEVPdChsLGMpe3JldHVybiBmdW5jdGlvbigpeyhjLmFwcGx5KHRoaXMsYXJndW1lbnRzKT9HNmU6JDZlKSh0aGlzLGwpfX1mdW5jdGlvbiBBT3QoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIFRP'@;
put 'dChsKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWx9fWZ1bmN0aW9uIE9PdChsKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYz1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PWM/PyIifX1mdW5jdGlvbiBJT3QoKXt0aGlzLmlubmVySFRNTD0iIn1m'@;
put 'dW5jdGlvbiBST3QobCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9bH19ZnVuY3Rpb24gTE90KGwpe3JldHVybiBmdW5jdGlvbigpe3ZhciBjPWwuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPWM/PyIifX1mdW5jdGlvbiBGT3QoKXt0aGlzLm5leHRTaWJs'@;
put 'aW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gTk90KCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gQk90KGwpe3JldHVybiBmdW5j'@;
put 'dGlvbigpe3ZhciBjPXRoaXMub3duZXJEb2N1bWVudCxhPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiBhPT09ekomJmMuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PXpKP2MuY3JlYXRlRWxlbWVudChsKTpjLmNyZWF0ZUVsZW1lbnROUyhhLGwpfX1mdW5jdGlvbiBqT3QobCl7cmV0'@;
put 'dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobC5zcGFjZSxsLmxvY2FsKX19ZnVuY3Rpb24gSzZlKGwpe3ZhciBjPVhQKGwpO3JldHVybihjLmxvY2FsP2pPdDpCT3QpKGMpfWZ1bmN0aW9uIFVPdCgpe3JldHVybiBudWxsfWZ1bmN0aW9u'@;
put 'IFlPdCgpe3ZhciBsPXRoaXMucGFyZW50Tm9kZTtsJiZsLnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIEdPdCgpe3ZhciBsPXRoaXMuY2xvbmVOb2RlKCExKSxjPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gYz9jLmluc2VydEJlZm9yZShsLHRoaXMubmV4dFNpYmxpbmcpOmx9ZnVuY3Rpb24g'@;
put 'JE90KCl7dmFyIGw9dGhpcy5jbG9uZU5vZGUoITApLGM9dGhpcy5wYXJlbnROb2RlO3JldHVybiBjP2MuaW5zZXJ0QmVmb3JlKGwsdGhpcy5uZXh0U2libGluZyk6bH1mdW5jdGlvbiBRT3QobCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5fX29uO2lmKGMpe2Zvcih2YXIgaCxhPTAs'@;
put 'Zj0tMSxkPWMubGVuZ3RoO2E8ZDsrK2EpaD1jW2FdLGwudHlwZSYmaC50eXBlIT09bC50eXBlfHxoLm5hbWUhPT1sLm5hbWU/Y1srK2ZdPWg6dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGgudHlwZSxoLmxpc3RlbmVyLGgub3B0aW9ucyk7KytmP2MubGVuZ3RoPWY6ZGVsZXRlIHRoaXMuX19v'@;
put 'bn19fWZ1bmN0aW9uIGVEdChsLGMsYSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGQsZj10aGlzLl9fb24saD1mdW5jdGlvbiBYT3QobCl7cmV0dXJuIGZ1bmN0aW9uKGMpe2wuY2FsbCh0aGlzLGMsdGhpcy5fX2RhdGFfXyl9fShjKTtpZihmKWZvcih2YXIgbT0wLF89Zi5sZW5ndGg7bTxfOysr'@;
put 'bSlpZigoZD1mW21dKS50eXBlPT09bC50eXBlJiZkLm5hbWU9PT1sLm5hbWUpcmV0dXJuIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihkLnR5cGUsZC5saXN0ZW5lcixkLm9wdGlvbnMpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihkLnR5cGUsZC5saXN0ZW5lcj1oLGQub3B0aW9ucz1hKSx2b2lk'@;
put 'KGQudmFsdWU9Yyk7dGhpcy5hZGRFdmVudExpc3RlbmVyKGwudHlwZSxoLGEpLGQ9e3R5cGU6bC50eXBlLG5hbWU6bC5uYW1lLHZhbHVlOmMsbGlzdGVuZXI6aCxvcHRpb25zOmF9LGY/Zi5wdXNoKGQpOnRoaXMuX19vbj1bZF19fWZ1bmN0aW9uIHE2ZShsLGMsYSl7dmFyIGY9WjZlKGwpLGQ9'@;
put 'Zi5DdXN0b21FdmVudDsiZnVuY3Rpb24iPT10eXBlb2YgZD9kPW5ldyBkKGMsYSk6KGQ9Zi5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxhPyhkLmluaXRFdmVudChjLGEuYnViYmxlcyxhLmNhbmNlbGFibGUpLGQuZGV0YWlsPWEuZGV0YWlsKTpkLmluaXRFdmVudChjLCExLCExKSks'@;
put 'bC5kaXNwYXRjaEV2ZW50KGQpfWZ1bmN0aW9uIG5EdChsLGMpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBxNmUodGhpcyxsLGMpfX1mdW5jdGlvbiByRHQobCxjKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcTZlKHRoaXMsbCxjLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fVc2ZS5wcm90'@;
put 'b3R5cGU9e2FkZDpmdW5jdGlvbihsKXt0aGlzLl9uYW1lcy5pbmRleE9mKGwpPDAmJih0aGlzLl9uYW1lcy5wdXNoKGwpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbihsKXt2YXIgYz10aGlzLl9uYW1lcy5p'@;
put 'bmRleE9mKGwpO2M+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UoYywxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbihsKXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZihsKT49MH19O3ZhciBaSj1bbnVs'@;
put 'bF07ZnVuY3Rpb24gdTAobCxjKXt0aGlzLl9ncm91cHM9bCx0aGlzLl9wYXJlbnRzPWN9ZnVuY3Rpb24gWDZlKCl7cmV0dXJuIG5ldyB1MChbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLFpKKX11MC5wcm90b3R5cGU9WDZlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6dTAsc2VsZWN0OmZ1'@;
put 'bmN0aW9uIERUdChsKXsiZnVuY3Rpb24iIT10eXBlb2YgbCYmKGw9akoobCkpO2Zvcih2YXIgYz10aGlzLl9ncm91cHMsYT1jLmxlbmd0aCxmPW5ldyBBcnJheShhKSxkPTA7ZDxhOysrZClmb3IodmFyIE8sWCxoPWNbZF0sbT1oLmxlbmd0aCxfPWZbZF09bmV3IEFycmF5KG0pLGFlPTA7YWU8'@;
put 'bTsrK2FlKShPPWhbYWVdKSYmKFg9bC5jYWxsKE8sTy5fX2RhdGFfXyxhZSxoKSkmJigiX19kYXRhX18iaW4gTyYmKFguX19kYXRhX189Ty5fX2RhdGFfXyksX1thZV09WCk7cmV0dXJuIG5ldyB1MChmLHRoaXMuX3BhcmVudHMpfSxzZWxlY3RBbGw6ZnVuY3Rpb24gTFR0KGwpe2w9ImZ1bmN0'@;
put 'aW9uIj09dHlwZW9mIGw/ZnVuY3Rpb24gUlR0KGwpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBONmUobC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX0obCk6VjZlKGwpO2Zvcih2YXIgYz10aGlzLl9ncm91cHMsYT1jLmxlbmd0aCxmPVtdLGQ9W10saD0wO2g8YTsrK2gpZm9yKHZhciBPLG09'@;
put 'Y1toXSxfPW0ubGVuZ3RoLFg9MDtYPF87KytYKShPPW1bWF0pJiYoZi5wdXNoKGwuY2FsbChPLE8uX19kYXRhX18sWCxtKSksZC5wdXNoKE8pKTtyZXR1cm4gbmV3IHUwKGYsZCl9LHNlbGVjdENoaWxkOmZ1bmN0aW9uIE5UdChsKXtyZXR1cm4gdGhpcy5zZWxlY3QobnVsbD09bD9IVHQ6ZnVu'@;
put 'Y3Rpb24gRlR0KGwpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBQVHQuY2FsbCh0aGlzLmNoaWxkcmVuLGwpfX0oImZ1bmN0aW9uIj09dHlwZW9mIGw/bDpqNmUobCkpKX0sc2VsZWN0Q2hpbGRyZW46ZnVuY3Rpb24gelR0KGwpe3JldHVybiB0aGlzLnNlbGVjdEFsbChudWxsPT1sP0JUdDpm'@;
put 'dW5jdGlvbiBqVHQobCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFZUdC5jYWxsKHRoaXMuY2hpbGRyZW4sbCl9fSgiZnVuY3Rpb24iPT10eXBlb2YgbD9sOmo2ZShsKSkpfSxmaWx0ZXI6ZnVuY3Rpb24gVVR0KGwpeyJmdW5jdGlvbiIhPXR5cGVvZiBsJiYobD1CNmUobCkpO2Zvcih2YXIg'@;
put 'Yz10aGlzLl9ncm91cHMsYT1jLmxlbmd0aCxmPW5ldyBBcnJheShhKSxkPTA7ZDxhOysrZClmb3IodmFyIE8saD1jW2RdLG09aC5sZW5ndGgsXz1mW2RdPVtdLFg9MDtYPG07KytYKShPPWhbWF0pJiZsLmNhbGwoTyxPLl9fZGF0YV9fLFgsaCkmJl8ucHVzaChPKTtyZXR1cm4gbmV3IHUwKGYs'@;
put 'dGhpcy5fcGFyZW50cyl9LGRhdGE6ZnVuY3Rpb24gS1R0KGwsYyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIEFycmF5LmZyb20odGhpcywkVHQpO3ZhciBhPWM/R1R0OldUdCxmPXRoaXMuX3BhcmVudHMsZD10aGlzLl9ncm91cHM7ImZ1bmN0aW9uIiE9dHlwZW9mIGwmJihsPWZ1bmN0'@;
put 'aW9uIFlUdChsKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbH19KGwpKTtmb3IodmFyIGg9ZC5sZW5ndGgsbT1uZXcgQXJyYXkoaCksXz1uZXcgQXJyYXkoaCksTz1uZXcgQXJyYXkoaCksWD0wO1g8aDsrK1gpe3ZhciBhZT1mW1hdLHBlPWRbWF0sYmU9cGUubGVuZ3RoLHhlPXFUdChsLmNh'@;
put 'bGwoYWUsYWUmJmFlLl9fZGF0YV9fLFgsZikpLFZlPXhlLmxlbmd0aCxaZT1fW1hdPW5ldyBBcnJheShWZSksbHQ9bVtYXT1uZXcgQXJyYXkoVmUpO2EoYWUscGUsWmUsbHQsT1tYXT1uZXcgQXJyYXkoYmUpLHhlLGMpO2Zvcih2YXIgcm4sWHQsZ3Q9MCxqdD0wO2d0PFZlOysrZ3QpaWYocm49'@;
put 'WmVbZ3RdKXtmb3IoZ3Q+PWp0JiYoanQ9Z3QrMSk7IShYdD1sdFtqdF0pJiYrK2p0PFZlOyk7cm4uX25leHQ9WHR8fG51bGx9fXJldHVybihtPW5ldyB1MChtLGYpKS5fZW50ZXI9XyxtLl9leGl0PU8sbX0sZW50ZXI6ZnVuY3Rpb24gWlR0KCl7cmV0dXJuIG5ldyB1MCh0aGlzLl9lbnRlcnx8'@;
put 'dGhpcy5fZ3JvdXBzLm1hcCh6NmUpLHRoaXMuX3BhcmVudHMpfSxleGl0OmZ1bmN0aW9uIFhUdCgpe3JldHVybiBuZXcgdTAodGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcCh6NmUpLHRoaXMuX3BhcmVudHMpfSxqb2luOmZ1bmN0aW9uIEpUdChsLGMsYSl7dmFyIGY9dGhpcy5lbnRlcigp'@;
put 'LGQ9dGhpcyxoPXRoaXMuZXhpdCgpO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBsPyhmPWwoZikpJiYoZj1mLnNlbGVjdGlvbigpKTpmPWYuYXBwZW5kKGwrIiIpLG51bGwhPWMmJihkPWMoZCkpJiYoZD1kLnNlbGVjdGlvbigpKSxudWxsPT1hP2gucmVtb3ZlKCk6YShoKSxmJiZkP2YubWVy'@;
put 'Z2UoZCkub3JkZXIoKTpkfSxtZXJnZTpmdW5jdGlvbiBRVHQobCl7Zm9yKHZhciBjPWwuc2VsZWN0aW9uP2wuc2VsZWN0aW9uKCk6bCxhPXRoaXMuX2dyb3VwcyxmPWMuX2dyb3VwcyxkPWEubGVuZ3RoLG09TWF0aC5taW4oZCxmLmxlbmd0aCksXz1uZXcgQXJyYXkoZCksTz0wO088bTsrK08p'@;
put 'Zm9yKHZhciB4ZSxYPWFbT10sYWU9ZltPXSxwZT1YLmxlbmd0aCxiZT1fW09dPW5ldyBBcnJheShwZSksVmU9MDtWZTxwZTsrK1ZlKSh4ZT1YW1ZlXXx8YWVbVmVdKSYmKGJlW1ZlXT14ZSk7Zm9yKDtPPGQ7KytPKV9bT109YVtPXTtyZXR1cm4gbmV3IHUwKF8sdGhpcy5fcGFyZW50cyl9LHNl'@;
put 'bGVjdGlvbjpmdW5jdGlvbiBhRHQoKXtyZXR1cm4gdGhpc30sb3JkZXI6ZnVuY3Rpb24gZU90KCl7Zm9yKHZhciBsPXRoaXMuX2dyb3VwcyxjPS0xLGE9bC5sZW5ndGg7KytjPGE7KWZvcih2YXIgbSxmPWxbY10sZD1mLmxlbmd0aC0xLGg9ZltkXTstLWQ+PTA7KShtPWZbZF0pJiYoaCYmNF5t'@;
put 'LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGgpJiZoLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG0saCksaD1tKTtyZXR1cm4gdGhpc30sc29ydDpmdW5jdGlvbiB0T3QobCl7ZnVuY3Rpb24gYyhwZSxiZSl7cmV0dXJuIHBlJiZiZT9sKHBlLl9fZGF0YV9fLGJlLl9fZGF0YV9fKTohcGUtIWJl'@;
put 'fWx8fChsPW5PdCk7Zm9yKHZhciBhPXRoaXMuX2dyb3VwcyxmPWEubGVuZ3RoLGQ9bmV3IEFycmF5KGYpLGg9MDtoPGY7KytoKXtmb3IodmFyIFgsbT1hW2hdLF89bS5sZW5ndGgsTz1kW2hdPW5ldyBBcnJheShfKSxhZT0wO2FlPF87KythZSkoWD1tW2FlXSkmJihPW2FlXT1YKTtPLnNvcnQo'@;
put 'Yyl9cmV0dXJuIG5ldyB1MChkLHRoaXMuX3BhcmVudHMpLm9yZGVyKCl9LGNhbGw6ZnVuY3Rpb24gck90KCl7dmFyIGw9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxsLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfSxub2RlczpmdW5jdGlvbiBpT3QoKXtyZXR1cm4g'@;
put 'QXJyYXkuZnJvbSh0aGlzKX0sbm9kZTpmdW5jdGlvbiBvT3QoKXtmb3IodmFyIGw9dGhpcy5fZ3JvdXBzLGM9MCxhPWwubGVuZ3RoO2M8YTsrK2MpZm9yKHZhciBmPWxbY10sZD0wLGg9Zi5sZW5ndGg7ZDxoOysrZCl7dmFyIG09ZltkXTtpZihtKXJldHVybiBtfXJldHVybiBudWxsfSxzaXpl'@;
put 'OmZ1bmN0aW9uIGFPdCgpe2xldCBsPTA7Zm9yKGNvbnN0IGMgb2YgdGhpcykrK2w7cmV0dXJuIGx9LGVtcHR5OmZ1bmN0aW9uIGxPdCgpe3JldHVybiF0aGlzLm5vZGUoKX0sZWFjaDpmdW5jdGlvbiBzT3QobCl7Zm9yKHZhciBjPXRoaXMuX2dyb3VwcyxhPTAsZj1jLmxlbmd0aDthPGY7Kyth'@;
put 'KWZvcih2YXIgXyxkPWNbYV0saD0wLG09ZC5sZW5ndGg7aDxtOysraCkoXz1kW2hdKSYmbC5jYWxsKF8sXy5fX2RhdGFfXyxoLGQpO3JldHVybiB0aGlzfSxhdHRyOmZ1bmN0aW9uIG1PdChsLGMpe3ZhciBhPVhQKGwpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIGY9dGhpcy5ub2RlKCk7'@;
put 'cmV0dXJuIGEubG9jYWw/Zi5nZXRBdHRyaWJ1dGVOUyhhLnNwYWNlLGEubG9jYWwpOmYuZ2V0QXR0cmlidXRlKGEpfXJldHVybiB0aGlzLmVhY2goKG51bGw9PWM/YS5sb2NhbD9jT3Q6dU90OiJmdW5jdGlvbiI9PXR5cGVvZiBjP2EubG9jYWw/cE90OmhPdDphLmxvY2FsP2RPdDpmT3QpKGEs'@;
put 'YykpfSxzdHlsZTpmdW5jdGlvbiBiT3QobCxjLGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1jP2dPdDoiZnVuY3Rpb24iPT10eXBlb2YgYz95T3Q6dk90KShsLGMsYT8/IiIpKTpBYih0aGlzLm5vZGUoKSxsKX0scHJvcGVydHk6ZnVuY3Rpb24gU090KGws'@;
put 'Yyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWM/X090OiJmdW5jdGlvbiI9PXR5cGVvZiBjP0NPdDp3T3QpKGwsYykpOnRoaXMubm9kZSgpW2xdfSxjbGFzc2VkOmZ1bmN0aW9uIHhPdChsLGMpe3ZhciBhPVk2ZShsKyIiKTtpZihhcmd1bWVudHMubGVuZ3Ro'@;
put 'PDIpe2Zvcih2YXIgZj1VSih0aGlzLm5vZGUoKSksZD0tMSxoPWEubGVuZ3RoOysrZDxoOylpZighZi5jb250YWlucyhhW2RdKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgYz9FT3Q6Yz9NT3Q6a090KShhLGMpKX0sdGV4dDpmdW5jdGlv'@;
put 'biBET3QobCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PWw/QU90OigiZnVuY3Rpb24iPT10eXBlb2YgbD9PT3Q6VE90KShsKSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9LGh0bWw6ZnVuY3Rpb24gUE90KGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMu'@;
put 'ZWFjaChudWxsPT1sP0lPdDooImZ1bmN0aW9uIj09dHlwZW9mIGw/TE90OlJPdCkobCkpOnRoaXMubm9kZSgpLmlubmVySFRNTH0scmFpc2U6ZnVuY3Rpb24gSE90KCl7cmV0dXJuIHRoaXMuZWFjaChGT3QpfSxsb3dlcjpmdW5jdGlvbiBWT3QoKXtyZXR1cm4gdGhpcy5lYWNoKE5PdCl9LGFw'@;
put 'cGVuZDpmdW5jdGlvbiB6T3QobCl7dmFyIGM9ImZ1bmN0aW9uIj09dHlwZW9mIGw/bDpLNmUobCk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQoYy5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9LGluc2VydDpmdW5jdGlvbiBaT3QobCxjKXt2'@;
put 'YXIgYT0iZnVuY3Rpb24iPT10eXBlb2YgbD9sOks2ZShsKSxmPW51bGw9PWM/VU90OiJmdW5jdGlvbiI9PXR5cGVvZiBjP2M6akooYyk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKGEuYXBwbHkodGhpcyxhcmd1bWVudHMpLGYuYXBwbHko'@;
put 'dGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfSxyZW1vdmU6ZnVuY3Rpb24gV090KCl7cmV0dXJuIHRoaXMuZWFjaChZT3QpfSxjbG9uZTpmdW5jdGlvbiBLT3QobCl7cmV0dXJuIHRoaXMuc2VsZWN0KGw/JE90OkdPdCl9LGRhdHVtOmZ1bmN0aW9uIHFPdChsKXtyZXR1cm4gYXJndW1lbnRzLmxl'@;
put 'bmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsbCk6dGhpcy5ub2RlKCkuX19kYXRhX199LG9uOmZ1bmN0aW9uIHREdChsLGMsYSl7dmFyIGQsbSxmPWZ1bmN0aW9uIEpPdChsKXtyZXR1cm4gbC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKGMpe3ZhciBhPSIiLGY9Yy5p'@;
put 'bmRleE9mKCIuIik7cmV0dXJuIGY+PTAmJihhPWMuc2xpY2UoZisxKSxjPWMuc2xpY2UoMCxmKSkse3R5cGU6YyxuYW1lOmF9fSl9KGwrIiIpLGg9Zi5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtmb3IoXz1jP2VEdDpRT3QsZD0wO2Q8aDsrK2QpdGhpcy5lYWNoKF8oZltkXSxj'@;
put 'LGEpKTtyZXR1cm4gdGhpc312YXIgXz10aGlzLm5vZGUoKS5fX29uO2lmKF8pZm9yKHZhciBhZSxPPTAsWD1fLmxlbmd0aDtPPFg7KytPKWZvcihkPTAsYWU9X1tPXTtkPGg7KytkKWlmKChtPWZbZF0pLnR5cGU9PT1hZS50eXBlJiZtLm5hbWU9PT1hZS5uYW1lKXJldHVybiBhZS52YWx1ZX0s'@;
put 'ZGlzcGF0Y2g6ZnVuY3Rpb24gaUR0KGwsYyl7cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGM/ckR0Om5EdCkobCxjKSl9LFtTeW1ib2wuaXRlcmF0b3JdOmZ1bmN0aW9uKm9EdCgpe2Zvcih2YXIgbD10aGlzLl9ncm91cHMsYz0wLGE9bC5sZW5ndGg7YzxhOysrYylmb3Io'@;
put 'dmFyIG0sZj1sW2NdLGQ9MCxoPWYubGVuZ3RoO2Q8aDsrK2QpKG09ZltkXSkmJih5aWVsZCBtKX19O2NvbnN0IGs2PVg2ZTtmdW5jdGlvbiBZSihsKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGw/bmV3IHUwKFtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGwpXSxbZG9jdW1lbnQuZG9jdW1l'@;
put 'bnRFbGVtZW50XSk6bmV3IHUwKFtONmUobCldLFpKKX1mdW5jdGlvbiBPYShsKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGw/bmV3IHUwKFtbZG9jdW1lbnQucXVlcnlTZWxlY3RvcihsKV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgdTAoW1tsXV0sWkopfXZhciBsRHQ9e3Zh'@;
put 'bHVlOigpPT57fX07ZnVuY3Rpb24gSjZlKCl7Zm9yKHZhciBmLGw9MCxjPWFyZ3VtZW50cy5sZW5ndGgsYT17fTtsPGM7KytsKXtpZighKGY9YXJndW1lbnRzW2xdKyIiKXx8ZiBpbiBhfHwvW1xzLl0vLnRlc3QoZikpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrZik7YVtmXT1b'@;
put 'XX1yZXR1cm4gbmV3IEpQKGEpfWZ1bmN0aW9uIEpQKGwpe3RoaXMuXz1sfWZ1bmN0aW9uIHVEdChsLGMpe2Zvcih2YXIgZCxhPTAsZj1sLmxlbmd0aDthPGY7KythKWlmKChkPWxbYV0pLm5hbWU9PT1jKXJldHVybiBkLnZhbHVlfWZ1bmN0aW9uIFE2ZShsLGMsYSl7Zm9yKHZhciBmPTAsZD1s'@;
put 'Lmxlbmd0aDtmPGQ7KytmKWlmKGxbZl0ubmFtZT09PWMpe2xbZl09bER0LGw9bC5zbGljZSgwLGYpLmNvbmNhdChsLnNsaWNlKGYrMSkpO2JyZWFrfXJldHVybiBudWxsIT1hJiZsLnB1c2goe25hbWU6Yyx2YWx1ZTphfSksbH1KUC5wcm90b3R5cGU9SjZlLnByb3RvdHlwZT17Y29uc3RydWN0'@;
put 'b3I6SlAsb246ZnVuY3Rpb24obCxjKXt2YXIgZCxhPXRoaXMuXyxmPWZ1bmN0aW9uIHNEdChsLGMpe3JldHVybiBsLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24oYSl7dmFyIGY9IiIsZD1hLmluZGV4T2YoIi4iKTtpZihkPj0wJiYoZj1hLnNsaWNlKGQrMSksYT1hLnNsaWNl'@;
put 'KDAsZCkpLGEmJiFjLmhhc093blByb3BlcnR5KGEpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2EpO3JldHVybnt0eXBlOmEsbmFtZTpmfX0pfShsKyIiLGEpLGg9LTEsbT1mLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2lmKG51bGwhPWMmJiJmdW5jdGlvbiIh'@;
put 'PXR5cGVvZiBjKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIitjKTtmb3IoOysraDxtOylpZihkPShsPWZbaF0pLnR5cGUpYVtkXT1RNmUoYVtkXSxsLm5hbWUsYyk7ZWxzZSBpZihudWxsPT1jKWZvcihkIGluIGEpYVtkXT1RNmUoYVtkXSxsLm5hbWUsbnVsbCk7cmV0dXJu'@;
put 'IHRoaXN9Zm9yKDsrK2g8bTspaWYoKGQ9KGw9ZltoXSkudHlwZSkmJihkPXVEdChhW2RdLGwubmFtZSkpKXJldHVybiBkfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGw9e30sYz10aGlzLl87Zm9yKHZhciBhIGluIGMpbFthXT1jW2FdLnNsaWNlKCk7cmV0dXJuIG5ldyBKUChsKX0sY2FsbDpmdW5j'@;
put 'dGlvbihsLGMpe2lmKChkPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIGQsaCxhPW5ldyBBcnJheShkKSxmPTA7ZjxkOysrZilhW2ZdPWFyZ3VtZW50c1tmKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkobCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrbCk7Zm9y'@;
put 'KGY9MCxkPShoPXRoaXMuX1tsXSkubGVuZ3RoO2Y8ZDsrK2YpaFtmXS52YWx1ZS5hcHBseShjLGEpfSxhcHBseTpmdW5jdGlvbihsLGMsYSl7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShsKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitsKTtmb3IodmFyIGY9dGhpcy5fW2xd'@;
put 'LGQ9MCxoPWYubGVuZ3RoO2Q8aDsrK2QpZltkXS52YWx1ZS5hcHBseShjLGEpfX07Y29uc3QgV0o9SjZlO3ZhciBRUCxLRSxUYj0wLEdFPTAsJEU9MCxlOGU9MWUzLGVGPTAsRTY9MCx0Rj0wLHFFPSJvYmplY3QiPT10eXBlb2YgcGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3Jt'@;
put 'YW5jZTpEYXRlLHQ4ZT0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbihsKXtzZXRUaW1lb3V0KGwsMTcpfTtmdW5jdGlvbiBHSigpe3JldHVybiBFNnx8'@;
put 'KHQ4ZShjRHQpLEU2PXFFLm5vdygpK3RGKX1mdW5jdGlvbiBjRHQoKXtFNj0wfWZ1bmN0aW9uIG5GKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBuOGUobCxjLGEpe3ZhciBmPW5ldyBuRjtyZXR1cm4gZi5yZXN0YXJ0KGwsYyxhKSxmfWZ1bmN0aW9u'@;
put 'IHI4ZSgpe0U2PShlRj1xRS5ub3coKSkrdEYsVGI9R0U9MDt0cnl7IWZ1bmN0aW9uIGZEdCgpe0dKKCksKytUYjtmb3IodmFyIGMsbD1RUDtsOykoYz1FNi1sLl90aW1lKT49MCYmbC5fY2FsbC5jYWxsKHZvaWQgMCxjKSxsPWwuX25leHQ7LS1UYn0oKX1maW5hbGx5e1RiPTAsZnVuY3Rpb24g'@;
put 'aER0KCl7Zm9yKHZhciBsLGEsYz1RUCxmPTEvMDtjOyljLl9jYWxsPyhmPmMuX3RpbWUmJihmPWMuX3RpbWUpLGw9YyxjPWMuX25leHQpOihhPWMuX25leHQsYy5fbmV4dD1udWxsLGM9bD9sLl9uZXh0PWE6UVA9YSk7S0U9bCwkSihmKX0oKSxFNj0wfX1mdW5jdGlvbiBkRHQoKXt2YXIgbD1x'@;
put 'RS5ub3coKSxjPWwtZUY7Yz5lOGUmJih0Ri09YyxlRj1sKX1mdW5jdGlvbiAkSihsKXtUYnx8KEdFJiYoR0U9Y2xlYXJUaW1lb3V0KEdFKSksbC1FNj4yND8obDwxLzAmJihHRT1zZXRUaW1lb3V0KHI4ZSxsLXFFLm5vdygpLXRGKSksJEUmJigkRT1jbGVhckludGVydmFsKCRFKSkpOigkRXx8'@;
put 'KGVGPXFFLm5vdygpLCRFPXNldEludGVydmFsKGREdCxlOGUpKSxUYj0xLHQ4ZShyOGUpKSl9ZnVuY3Rpb24gckYobCxjLGEpe3ZhciBmPW5ldyBuRjtyZXR1cm4gZi5yZXN0YXJ0KGQ9PntmLnN0b3AoKSxsKGQrYyl9LGM9bnVsbD09Yz8wOitjLGEpLGZ9bkYucHJvdG90eXBlPW44ZS5wcm90'@;
put 'b3R5cGU9e2NvbnN0cnVjdG9yOm5GLHJlc3RhcnQ6ZnVuY3Rpb24obCxjLGEpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBsKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7YT0obnVsbD09YT9HSigpOithKSsobnVsbD09Yz8wOitjKSwhdGhpcy5fbmV4'@;
put 'dCYmS0UhPT10aGlzJiYoS0U/S0UuX25leHQ9dGhpczpRUD10aGlzLEtFPXRoaXMpLHRoaXMuX2NhbGw9bCx0aGlzLl90aW1lPWEsJEooKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2NhbGwmJih0aGlzLl9jYWxsPW51bGwsdGhpcy5fdGltZT0xLzAsJEooKSl9fTt2YXIgcER0PVdKKCJzdGFy'@;
put 'dCIsImVuZCIsImNhbmNlbCIsImludGVycnVwdCIpLG1EdD1bXSxpOGU9MCxxSj0yLGlGPTMsWEo9NSxvRj02O2Z1bmN0aW9uIGFGKGwsYyxhLGYsZCxoKXt2YXIgbT1sLl9fdHJhbnNpdGlvbjtpZihtKXtpZihhIGluIG0pcmV0dXJufWVsc2UgbC5fX3RyYW5zaXRpb249e307IWZ1bmN0aW9u'@;
put 'IGdEdChsLGMsYSl7dmFyIGQsZj1sLl9fdHJhbnNpdGlvbjtmdW5jdGlvbiBtKFgpe3ZhciBhZSxwZSxiZSx4ZTtpZigxIT09YS5zdGF0ZSlyZXR1cm4gTygpO2ZvcihhZSBpbiBmKWlmKCh4ZT1mW2FlXSkubmFtZT09PWEubmFtZSl7aWYoeGUuc3RhdGU9PT1pRilyZXR1cm4gckYobSk7ND09'@;
put 'PXhlLnN0YXRlPyh4ZS5zdGF0ZT1vRix4ZS50aW1lci5zdG9wKCkseGUub24uY2FsbCgiaW50ZXJydXB0IixsLGwuX19kYXRhX18seGUuaW5kZXgseGUuZ3JvdXApLGRlbGV0ZSBmW2FlXSk6K2FlPGMmJih4ZS5zdGF0ZT1vRix4ZS50aW1lci5zdG9wKCkseGUub24uY2FsbCgiY2FuY2VsIixs'@;
put 'LGwuX19kYXRhX18seGUuaW5kZXgseGUuZ3JvdXApLGRlbGV0ZSBmW2FlXSl9aWYockYoZnVuY3Rpb24oKXthLnN0YXRlPT09aUYmJihhLnN0YXRlPTQsYS50aW1lci5yZXN0YXJ0KF8sYS5kZWxheSxhLnRpbWUpLF8oWCkpfSksYS5zdGF0ZT1xSixhLm9uLmNhbGwoInN0YXJ0IixsLGwuX19k'@;
put 'YXRhX18sYS5pbmRleCxhLmdyb3VwKSxhLnN0YXRlPT09cUope2ZvcihhLnN0YXRlPWlGLGQ9bmV3IEFycmF5KGJlPWEudHdlZW4ubGVuZ3RoKSxhZT0wLHBlPS0xO2FlPGJlOysrYWUpKHhlPWEudHdlZW5bYWVdLnZhbHVlLmNhbGwobCxsLl9fZGF0YV9fLGEuaW5kZXgsYS5ncm91cCkpJiYo'@;
put 'ZFsrK3BlXT14ZSk7ZC5sZW5ndGg9cGUrMX19ZnVuY3Rpb24gXyhYKXtmb3IodmFyIGFlPVg8YS5kdXJhdGlvbj9hLmVhc2UuY2FsbChudWxsLFgvYS5kdXJhdGlvbik6KGEudGltZXIucmVzdGFydChPKSxhLnN0YXRlPVhKLDEpLHBlPS0xLGJlPWQubGVuZ3RoOysrcGU8YmU7KWRbcGVdLmNh'@;
put 'bGwobCxhZSk7YS5zdGF0ZT09PVhKJiYoYS5vbi5jYWxsKCJlbmQiLGwsbC5fX2RhdGFfXyxhLmluZGV4LGEuZ3JvdXApLE8oKSl9ZnVuY3Rpb24gTygpe2Zvcih2YXIgWCBpbiBhLnN0YXRlPW9GLGEudGltZXIuc3RvcCgpLGRlbGV0ZSBmW2NdLGYpcmV0dXJuO2RlbGV0ZSBsLl9fdHJhbnNp'@;
put 'dGlvbn1mW2NdPWEsYS50aW1lcj1uOGUoZnVuY3Rpb24gaChYKXthLnN0YXRlPTEsYS50aW1lci5yZXN0YXJ0KG0sYS5kZWxheSxhLnRpbWUpLGEuZGVsYXk8PVgmJm0oWC1hLmRlbGF5KX0sMCxhLnRpbWUpfShsLGEse25hbWU6YyxpbmRleDpmLGdyb3VwOmQsb246cER0LHR3ZWVuOm1EdCx0'@;
put 'aW1lOmgudGltZSxkZWxheTpoLmRlbGF5LGR1cmF0aW9uOmguZHVyYXRpb24sZWFzZTpoLmVhc2UsdGltZXI6bnVsbCxzdGF0ZTppOGV9KX1mdW5jdGlvbiBKSihsLGMpe3ZhciBhPVlkKGwsYyk7aWYoYS5zdGF0ZT5pOGUpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hl'@;
put 'ZHVsZWQiKTtyZXR1cm4gYX1mdW5jdGlvbiBRaChsLGMpe3ZhciBhPVlkKGwsYyk7aWYoYS5zdGF0ZT5pRil0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHJ1bm5pbmciKTtyZXR1cm4gYX1mdW5jdGlvbiBZZChsLGMpe3ZhciBhPWwuX190cmFuc2l0aW9uO2lmKCFhfHwhKGE9'@;
put 'YVtjXSkpdGhyb3cgbmV3IEVycm9yKCJ0cmFuc2l0aW9uIG5vdCBmb3VuZCIpO3JldHVybiBhfWZ1bmN0aW9uIGxGKGwsYyl7dmFyIGYsZCxtLGE9bC5fX3RyYW5zaXRpb24saD0hMDtpZihhKXtmb3IobSBpbiBjPW51bGw9PWM/bnVsbDpjKyIiLGEpKGY9YVttXSkubmFtZT09PWM/KGQ9Zi5z'@;
put 'dGF0ZT5xSiYmZi5zdGF0ZTxYSixmLnN0YXRlPW9GLGYudGltZXIuc3RvcCgpLGYub24uY2FsbChkPyJpbnRlcnJ1cHQiOiJjYW5jZWwiLGwsbC5fX2RhdGFfXyxmLmluZGV4LGYuZ3JvdXApLGRlbGV0ZSBhW21dKTpoPSExO2gmJmRlbGV0ZSBsLl9fdHJhbnNpdGlvbn19ZnVuY3Rpb24gZTIo'@;
put 'bCxjKXtyZXR1cm4gbD0rbCxjPStjLGZ1bmN0aW9uKGEpe3JldHVybiBsKigxLWEpK2MqYX19dmFyIHNGLGE4ZT0xODAvTWF0aC5QSSxRSj17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfTtmdW5jdGlvbiBsOGUobCxjLGEsZixk'@;
put 'LGgpe3ZhciBtLF8sTztyZXR1cm4obT1NYXRoLnNxcnQobCpsK2MqYykpJiYobC89bSxjLz1tKSwoTz1sKmErYypmKSYmKGEtPWwqTyxmLT1jKk8pLChfPU1hdGguc3FydChhKmErZipmKSkmJihhLz1fLGYvPV8sTy89XyksbCpmPGMqYSYmKGw9LWwsYz0tYyxPPS1PLG09LW0pLHt0cmFuc2xh'@;
put 'dGVYOmQsdHJhbnNsYXRlWTpoLHJvdGF0ZTpNYXRoLmF0YW4yKGMsbCkqYThlLHNrZXdYOk1hdGguYXRhbihPKSphOGUsc2NhbGVYOm0sc2NhbGVZOl99fWZ1bmN0aW9uIHM4ZShsLGMsYSxmKXtmdW5jdGlvbiBkKFgpe3JldHVybiBYLmxlbmd0aD9YLnBvcCgpKyIgIjoiIn1yZXR1cm4gZnVu'@;
put 'Y3Rpb24oWCxhZSl7dmFyIHBlPVtdLGJlPVtdO3JldHVybiBYPWwoWCksYWU9bChhZSksZnVuY3Rpb24gaChYLGFlLHBlLGJlLHhlLFZlKXtpZihYIT09cGV8fGFlIT09YmUpe3ZhciBaZT14ZS5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLGMsbnVsbCxhKTtWZS5wdXNoKHtpOlplLTQseDplMihY'@;
put 'LHBlKX0se2k6WmUtMix4OmUyKGFlLGJlKX0pfWVsc2UocGV8fGJlKSYmeGUucHVzaCgidHJhbnNsYXRlKCIrcGUrYytiZSthKX0oWC50cmFuc2xhdGVYLFgudHJhbnNsYXRlWSxhZS50cmFuc2xhdGVYLGFlLnRyYW5zbGF0ZVkscGUsYmUpLGZ1bmN0aW9uIG0oWCxhZSxwZSxiZSl7WCE9PWFl'@;
put 'PyhYLWFlPjE4MD9hZSs9MzYwOmFlLVg+MTgwJiYoWCs9MzYwKSxiZS5wdXNoKHtpOnBlLnB1c2goZChwZSkrInJvdGF0ZSgiLG51bGwsZiktMix4OmUyKFgsYWUpfSkpOmFlJiZwZS5wdXNoKGQocGUpKyJyb3RhdGUoIithZStmKX0oWC5yb3RhdGUsYWUucm90YXRlLHBlLGJlKSxmdW5jdGlv'@;
put 'biBfKFgsYWUscGUsYmUpe1ghPT1hZT9iZS5wdXNoKHtpOnBlLnB1c2goZChwZSkrInNrZXdYKCIsbnVsbCxmKS0yLHg6ZTIoWCxhZSl9KTphZSYmcGUucHVzaChkKHBlKSsic2tld1goIithZStmKX0oWC5za2V3WCxhZS5za2V3WCxwZSxiZSksZnVuY3Rpb24gTyhYLGFlLHBlLGJlLHhlLFZl'@;
put 'KXtpZihYIT09cGV8fGFlIT09YmUpe3ZhciBaZT14ZS5wdXNoKGQoeGUpKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTtWZS5wdXNoKHtpOlplLTQseDplMihYLHBlKX0se2k6WmUtMix4OmUyKGFlLGJlKX0pfWVsc2UoMSE9PXBlfHwxIT09YmUpJiZ4ZS5wdXNoKGQoeGUpKyJzY2FsZSgi'@;
put 'K3BlKyIsIitiZSsiKSIpfShYLnNjYWxlWCxYLnNjYWxlWSxhZS5zY2FsZVgsYWUuc2NhbGVZLHBlLGJlKSxYPWFlPW51bGwsZnVuY3Rpb24oeGUpe2Zvcih2YXIgbHQsVmU9LTEsWmU9YmUubGVuZ3RoOysrVmU8WmU7KXBlWyhsdD1iZVtWZV0pLmldPWx0LngoeGUpO3JldHVybiBwZS5qb2lu'@;
put 'KCIiKX19fXZhciBfRHQ9czhlKGZ1bmN0aW9uIHlEdChsKXtjb25zdCBjPW5ldygiZnVuY3Rpb24iPT10eXBlb2YgRE9NTWF0cml4P0RPTU1hdHJpeDpXZWJLaXRDU1NNYXRyaXgpKGwrIiIpO3JldHVybiBjLmlzSWRlbnRpdHk/UUo6bDhlKGMuYSxjLmIsYy5jLGMuZCxjLmUsYy5mKX0sInB4'@;
put 'LCAiLCJweCkiLCJkZWcpIiksdThlPXM4ZShmdW5jdGlvbiBiRHQobCl7cmV0dXJuIG51bGwhPWwmJihzRnx8KHNGPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpLHNGLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIixsKSxsPXNGLnRy'@;
put 'YW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpP2w4ZSgobD1sLm1hdHJpeCkuYSxsLmIsbC5jLGwuZCxsLmUsbC5mKTpRSn0sIiwgIiwiKSIsIikiKTtmdW5jdGlvbiB3RHQobCxjKXt2YXIgYSxmO3JldHVybiBmdW5jdGlvbigpe3ZhciBkPVFoKHRoaXMsbCksaD1kLnR3ZWVuO2lmKGgh'@;
put 'PT1hKWZvcih2YXIgbT0wLF89KGY9YT1oKS5sZW5ndGg7bTxfOysrbSlpZihmW21dLm5hbWU9PT1jKXsoZj1mLnNsaWNlKCkpLnNwbGljZShtLDEpO2JyZWFrfWQudHdlZW49Zn19ZnVuY3Rpb24gQ0R0KGwsYyxhKXt2YXIgZixkO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBhKXRocm93IG5ldyBF'@;
put 'cnJvcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaD1RaCh0aGlzLGwpLG09aC50d2VlbjtpZihtIT09Zil7ZD0oZj1tKS5zbGljZSgpO2Zvcih2YXIgXz17bmFtZTpjLHZhbHVlOmF9LE89MCxYPWQubGVuZ3RoO088WDsrK08paWYoZFtPXS5uYW1lPT09Yyl7ZFtPXT1fO2JyZWFrfU89PT1YJiZk'@;
put 'LnB1c2goXyl9aC50d2Vlbj1kfX1mdW5jdGlvbiBlUShsLGMsYSl7dmFyIGY9bC5faWQ7cmV0dXJuIGwuZWFjaChmdW5jdGlvbigpe3ZhciBkPVFoKHRoaXMsZik7KGQudmFsdWV8fChkLnZhbHVlPXt9KSlbY109YS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxmdW5jdGlvbihkKXtyZXR1cm4g'@;
put 'WWQoZCxmKS52YWx1ZVtjXX19ZnVuY3Rpb24gdFEobCxjLGEpe2wucHJvdG90eXBlPWMucHJvdG90eXBlPWEsYS5jb25zdHJ1Y3Rvcj1sfWZ1bmN0aW9uIGM4ZShsLGMpe3ZhciBhPU9iamVjdC5jcmVhdGUobC5wcm90b3R5cGUpO2Zvcih2YXIgZiBpbiBjKWFbZl09Y1tmXTtyZXR1cm4gYX1m'@;
put 'dW5jdGlvbiBYRSgpe312YXIgdUY9MS8uNyxPYj0iXFxzKihbKy1dP1xcZCspXFxzKiIsUUU9IlxccyooWystXT8oPzpcXGQqXFwuKT9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLHQyPSJcXHMqKFsrLV0/KD86XFxkKlxcLik/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsTUR0'@;
put 'PS9eIyhbMC05YS1mXXszLDh9KSQvLGtEdD1uZXcgUmVnRXhwKGBecmdiXFwoJHtPYn0sJHtPYn0sJHtPYn1cXCkkYCksRUR0PW5ldyBSZWdFeHAoYF5yZ2JcXCgke3QyfSwke3QyfSwke3QyfVxcKSRgKSx4RHQ9bmV3IFJlZ0V4cChgXnJnYmFcXCgke09ifSwke09ifSwke09ifSwke1FFfVxc'@;
put 'KSRgKSxBRHQ9bmV3IFJlZ0V4cChgXnJnYmFcXCgke3QyfSwke3QyfSwke3QyfSwke1FFfVxcKSRgKSxURHQ9bmV3IFJlZ0V4cChgXmhzbFxcKCR7UUV9LCR7dDJ9LCR7dDJ9XFwpJGApLE9EdD1uZXcgUmVnRXhwKGBeaHNsYVxcKCR7UUV9LCR7dDJ9LCR7dDJ9LCR7UUV9XFwpJGApLGY4ZT17'@;
put 'YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlv'@;
put 'bGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29u'@;
put 'OjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRh'@;
put 'cmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFy'@;
put 'a3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0Nixm'@;
put 'bG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93'@;
put 'OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxh'@;
put 'd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1Nixs'@;
put 'aWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1'@;
put 'ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2Njcs'@;
put 'bWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWlu'@;
put 'dGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0'@;
put 'NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazox'@;
put 'Njc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIs'@;
put 'c2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3'@;
put 'NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdo'@;
put 'aXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtmdW5jdGlvbiBkOGUoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBoOGUoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiB4NihsKXt2YXIg'@;
put 'YyxhO3JldHVybiBsPShsKyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwoYz1NRHQuZXhlYyhsKSk/KGE9Y1sxXS5sZW5ndGgsYz1wYXJzZUludChjWzFdLDE2KSw2PT09YT9wOGUoYyk6Mz09PWE/bmV3IEswKGM+PjgmMTV8Yz4+NCYyNDAsYz4+NCYxNXwyNDAmYywoMTUmYyk8PDR8MTUmYywx'@;
put 'KTo4PT09YT9jRihjPj4yNCYyNTUsYz4+MTYmMjU1LGM+PjgmMjU1LCgyNTUmYykvMjU1KTo0PT09YT9jRihjPj4xMiYxNXxjPj44JjI0MCxjPj44JjE1fGM+PjQmMjQwLGM+PjQmMTV8MjQwJmMsKCgxNSZjKTw8NHwxNSZjKS8yNTUpOm51bGwpOihjPWtEdC5leGVjKGwpKT9uZXcgSzAoY1sx'@;
put 'XSxjWzJdLGNbM10sMSk6KGM9RUR0LmV4ZWMobCkpP25ldyBLMCgyNTUqY1sxXS8xMDAsMjU1KmNbMl0vMTAwLDI1NSpjWzNdLzEwMCwxKTooYz14RHQuZXhlYyhsKSk/Y0YoY1sxXSxjWzJdLGNbM10sY1s0XSk6KGM9QUR0LmV4ZWMobCkpP2NGKDI1NSpjWzFdLzEwMCwyNTUqY1syXS8xMDAs'@;
put 'MjU1KmNbM10vMTAwLGNbNF0pOihjPVREdC5leGVjKGwpKT92OGUoY1sxXSxjWzJdLzEwMCxjWzNdLzEwMCwxKTooYz1PRHQuZXhlYyhsKSk/djhlKGNbMV0sY1syXS8xMDAsY1szXS8xMDAsY1s0XSk6ZjhlLmhhc093blByb3BlcnR5KGwpP3A4ZShmOGVbbF0pOiJ0cmFuc3BhcmVudCI9PT1s'@;
put 'P25ldyBLMChOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIHA4ZShsKXtyZXR1cm4gbmV3IEswKGw+PjE2JjI1NSxsPj44JjI1NSwyNTUmbCwxKX1mdW5jdGlvbiBjRihsLGMsYSxmKXtyZXR1cm4gZjw9MCYmKGw9Yz1hPU5hTiksbmV3IEswKGwsYyxhLGYpfWZ1bmN0aW9uIGZGKGwsYyxh'@;
put 'LGYpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9mdW5jdGlvbiBSRHQobCl7cmV0dXJuIGwgaW5zdGFuY2VvZiBYRXx8KGw9eDYobCkpLGw/bmV3IEswKChsPWwucmdiKCkpLnIsbC5nLGwuYixsLm9wYWNpdHkpOm5ldyBLMH0obCk6bmV3IEswKGwsYyxhLGY/PzEpfWZ1bmN0aW9uIEsw'@;
put 'KGwsYyxhLGYpe3RoaXMucj0rbCx0aGlzLmc9K2MsdGhpcy5iPSthLHRoaXMub3BhY2l0eT0rZn1mdW5jdGlvbiBtOGUoKXtyZXR1cm5gIyR7VDYodGhpcy5yKX0ke1Q2KHRoaXMuZyl9JHtUNih0aGlzLmIpfWB9ZnVuY3Rpb24gZzhlKCl7Y29uc3QgbD1kRih0aGlzLm9wYWNpdHkpO3JldHVy'@;
put 'bmAkezE9PT1sPyJyZ2IoIjoicmdiYSgifSR7QTYodGhpcy5yKX0sICR7QTYodGhpcy5nKX0sICR7QTYodGhpcy5iKX0kezE9PT1sPyIpIjpgLCAke2x9KWB9YH1mdW5jdGlvbiBkRihsKXtyZXR1cm4gaXNOYU4obCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsbCkpfWZ1bmN0aW9uIEE2KGwp'@;
put 'e3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKGwpfHwwKSl9ZnVuY3Rpb24gVDYobCl7cmV0dXJuKChsPUE2KGwpKTwxNj8iMCI6IiIpK2wudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIHY4ZShsLGMsYSxmKXtyZXR1cm4gZjw9MD9sPWM9YT1OYU46YTw9MHx8YT49MT9s'@;
put 'PWM9TmFOOmM8PTAmJihsPU5hTiksbmV3IFdkKGwsYyxhLGYpfWZ1bmN0aW9uIHk4ZShsKXtpZihsIGluc3RhbmNlb2YgV2QpcmV0dXJuIG5ldyBXZChsLmgsbC5zLGwubCxsLm9wYWNpdHkpO2lmKGwgaW5zdGFuY2VvZiBYRXx8KGw9eDYobCkpLCFsKXJldHVybiBuZXcgV2Q7aWYobCBpbnN0'@;
put 'YW5jZW9mIFdkKXJldHVybiBsO3ZhciBjPShsPWwucmdiKCkpLnIvMjU1LGE9bC5nLzI1NSxmPWwuYi8yNTUsZD1NYXRoLm1pbihjLGEsZiksaD1NYXRoLm1heChjLGEsZiksbT1OYU4sXz1oLWQsTz0oaCtkKS8yO3JldHVybiBfPyhtPWM9PT1oPyhhLWYpL18rNiooYTxmKTphPT09aD8oZi1j'@;
put 'KS9fKzI6KGMtYSkvXys0LF8vPU88LjU/aCtkOjItaC1kLG0qPTYwKTpfPU8+MCYmTzwxPzA6bSxuZXcgV2QobSxfLE8sbC5vcGFjaXR5KX1mdW5jdGlvbiBXZChsLGMsYSxmKXt0aGlzLmg9K2wsdGhpcy5zPStjLHRoaXMubD0rYSx0aGlzLm9wYWNpdHk9K2Z9ZnVuY3Rpb24gYjhlKGwpe3Jl'@;
put 'dHVybihsPShsfHwwKSUzNjApPDA/bCszNjA6bH1mdW5jdGlvbiBoRihsKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbigxLGx8fDApKX1mdW5jdGlvbiBuUShsLGMsYSl7cmV0dXJuIDI1NSoobDw2MD9jKyhhLWMpKmwvNjA6bDwxODA/YTpsPDI0MD9jKyhhLWMpKigyNDAtbCkvNjA6Yyl9'@;
put 'ZnVuY3Rpb24gXzhlKGwsYyxhLGYsZCl7dmFyIGg9bCpsLG09aCpsO3JldHVybigoMS0zKmwrMypoLW0pKmMrKDQtNipoKzMqbSkqYSsoMSszKmwrMypoLTMqbSkqZittKmQpLzZ9dFEoWEUseDYse2NvcHkobCl7cmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3IsdGhp'@;
put 'cyxsKX0sZGlzcGxheWFibGUoKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6ZDhlLGZvcm1hdEhleDpkOGUsZm9ybWF0SGV4ODpmdW5jdGlvbiBERHQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXg4KCl9LGZvcm1hdEhzbDpmdW5jdGlvbiBJRHQoKXtyZXR1cm4g'@;
put 'eThlKHRoaXMpLmZvcm1hdEhzbCgpfSxmb3JtYXRSZ2I6aDhlLHRvU3RyaW5nOmg4ZX0pLHRRKEswLGZGLGM4ZShYRSx7YnJpZ2h0ZXIobCl7cmV0dXJuIGw9bnVsbD09bD91RjpNYXRoLnBvdyh1RixsKSxuZXcgSzAodGhpcy5yKmwsdGhpcy5nKmwsdGhpcy5iKmwsdGhpcy5vcGFjaXR5KX0s'@;
put 'ZGFya2VyKGwpe3JldHVybiBsPW51bGw9PWw/Ljc6TWF0aC5wb3coLjcsbCksbmV3IEswKHRoaXMucipsLHRoaXMuZypsLHRoaXMuYipsLHRoaXMub3BhY2l0eSl9LHJnYigpe3JldHVybiB0aGlzfSxjbGFtcCgpe3JldHVybiBuZXcgSzAoQTYodGhpcy5yKSxBNih0aGlzLmcpLEE2KHRoaXMu'@;
put 'YiksZEYodGhpcy5vcGFjaXR5KSl9LGRpc3BsYXlhYmxlKCl7cmV0dXJuLS41PD10aGlzLnImJnRoaXMucjwyNTUuNSYmLS41PD10aGlzLmcmJnRoaXMuZzwyNTUuNSYmLS41PD10aGlzLmImJnRoaXMuYjwyNTUuNSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGhleDptOGUs'@;
put 'Zm9ybWF0SGV4Om04ZSxmb3JtYXRIZXg4OmZ1bmN0aW9uIExEdCgpe3JldHVybmAjJHtUNih0aGlzLnIpfSR7VDYodGhpcy5nKX0ke1Q2KHRoaXMuYil9JHtUNigyNTUqKGlzTmFOKHRoaXMub3BhY2l0eSk/MTp0aGlzLm9wYWNpdHkpKX1gfSxmb3JtYXRSZ2I6ZzhlLHRvU3RyaW5nOmc4ZX0p'@;
put 'KSx0UShXZCxmdW5jdGlvbiBQRHQobCxjLGEsZil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3k4ZShsKTpuZXcgV2QobCxjLGEsZj8/MSl9LGM4ZShYRSx7YnJpZ2h0ZXIobCl7cmV0dXJuIGw9bnVsbD09bD91RjpNYXRoLnBvdyh1RixsKSxuZXcgV2QodGhpcy5oLHRoaXMucyx0aGlz'@;
put 'LmwqbCx0aGlzLm9wYWNpdHkpfSxkYXJrZXIobCl7cmV0dXJuIGw9bnVsbD09bD8uNzpNYXRoLnBvdyguNyxsKSxuZXcgV2QodGhpcy5oLHRoaXMucyx0aGlzLmwqbCx0aGlzLm9wYWNpdHkpfSxyZ2IoKXt2YXIgbD10aGlzLmglMzYwKzM2MCoodGhpcy5oPDApLGM9aXNOYU4obCl8fGlzTmFO'@;
put 'KHRoaXMucyk/MDp0aGlzLnMsYT10aGlzLmwsZj1hKyhhPC41P2E6MS1hKSpjLGQ9MiphLWY7cmV0dXJuIG5ldyBLMChuUShsPj0yNDA/bC0yNDA6bCsxMjAsZCxmKSxuUShsLGQsZiksblEobDwxMjA/bCsyNDA6bC0xMjAsZCxmKSx0aGlzLm9wYWNpdHkpfSxjbGFtcCgpe3JldHVybiBuZXcg'@;
put 'V2QoYjhlKHRoaXMuaCksaEYodGhpcy5zKSxoRih0aGlzLmwpLGRGKHRoaXMub3BhY2l0eSkpfSxkaXNwbGF5YWJsZSgpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0'@;
put 'eTw9MX0sZm9ybWF0SHNsKCl7Y29uc3QgbD1kRih0aGlzLm9wYWNpdHkpO3JldHVybmAkezE9PT1sPyJoc2woIjoiaHNsYSgifSR7YjhlKHRoaXMuaCl9LCAkezEwMCpoRih0aGlzLnMpfSUsICR7MTAwKmhGKHRoaXMubCl9JSR7MT09PWw/IikiOmAsICR7bH0pYH1gfX0pKTtjb25zdCByUT1s'@;
put 'PT4oKT0+bDtmdW5jdGlvbiBDOGUobCxjKXt2YXIgYT1jLWw7cmV0dXJuIGE/ZnVuY3Rpb24gdzhlKGwsYyl7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBsK2EqY319KGwsYSk6clEoaXNOYU4obCk/YzpsKX1jb25zdCBwRj1mdW5jdGlvbiBsKGMpe3ZhciBhPWZ1bmN0aW9uIFZEdChsKXty'@;
put 'ZXR1cm4gMT09KGw9K2wpP0M4ZTpmdW5jdGlvbihjLGEpe3JldHVybiBhLWM/ZnVuY3Rpb24gTkR0KGwsYyxhKXtyZXR1cm4gbD1NYXRoLnBvdyhsLGEpLGM9TWF0aC5wb3coYyxhKS1sLGE9MS9hLGZ1bmN0aW9uKGYpe3JldHVybiBNYXRoLnBvdyhsK2YqYyxhKX19KGMsYSxsKTpyUShpc05h'@;
put 'TihjKT9hOmMpfX0oYyk7ZnVuY3Rpb24gZihkLGgpe3ZhciBtPWEoKGQ9ZkYoZCkpLnIsKGg9ZkYoaCkpLnIpLF89YShkLmcsaC5nKSxPPWEoZC5iLGguYiksWD1DOGUoZC5vcGFjaXR5LGgub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGFlKXtyZXR1cm4gZC5yPW0oYWUpLGQuZz1fKGFlKSxk'@;
put 'LmI9TyhhZSksZC5vcGFjaXR5PVgoYWUpLGQrIiJ9fXJldHVybiBmLmdhbW1hPWwsZn0oMSk7ZnVuY3Rpb24gUzhlKGwpe3JldHVybiBmdW5jdGlvbihjKXt2YXIgbSxfLGE9Yy5sZW5ndGgsZj1uZXcgQXJyYXkoYSksZD1uZXcgQXJyYXkoYSksaD1uZXcgQXJyYXkoYSk7Zm9yKG09MDttPGE7'@;
put 'KyttKV89ZkYoY1ttXSksZlttXT1fLnJ8fDAsZFttXT1fLmd8fDAsaFttXT1fLmJ8fDA7cmV0dXJuIGY9bChmKSxkPWwoZCksaD1sKGgpLF8ub3BhY2l0eT0xLGZ1bmN0aW9uKE8pe3JldHVybiBfLnI9ZihPKSxfLmc9ZChPKSxfLmI9aChPKSxfKyIifX19UzhlKGZ1bmN0aW9uIEZEdChsKXt2'@;
put 'YXIgYz1sLmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihhKXt2YXIgZj1hPD0wP2E9MDphPj0xPyhhPTEsYy0xKTpNYXRoLmZsb29yKGEqYyksZD1sW2ZdLGg9bFtmKzFdO3JldHVybiBfOGUoKGEtZi9jKSpjLGY+MD9sW2YtMV06MipkLWgsZCxoLGY8Yy0xP2xbZisyXToyKmgtZCl9fSksUzhl'@;
put 'KGZ1bmN0aW9uIEhEdChsKXt2YXIgYz1sLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24oYSl7dmFyIGY9TWF0aC5mbG9vcigoKGElPTEpPDA/KythOmEpKmMpO3JldHVybiBfOGUoKGEtZi9jKSpjLGxbKGYrYy0xKSVjXSxsW2YlY10sbFsoZisxKSVjXSxsWyhmKzIpJWNdKX19KTt2YXIgaVE9L1st'@;
put 'K10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLG9RPW5ldyBSZWdFeHAoaVEuc291cmNlLCJnIik7ZnVuY3Rpb24gTThlKGwsYyl7dmFyIGYsZCxoLGE9aVEubGFzdEluZGV4PW9RLmxhc3RJbmRleD0wLG09LTEsXz1bXSxPPVtdO2ZvcihsKz0iIixjKz0iIjsoZj1p'@;
put 'US5leGVjKGwpKSYmKGQ9b1EuZXhlYyhjKSk7KShoPWQuaW5kZXgpPmEmJihoPWMuc2xpY2UoYSxoKSxfW21dP19bbV0rPWg6X1srK21dPWgpLChmPWZbMF0pPT09KGQ9ZFswXSk/X1ttXT9fW21dKz1kOl9bKyttXT1kOihfWysrbV09bnVsbCxPLnB1c2goe2k6bSx4OmUyKGYsZCl9KSksYT1v'@;
put 'US5sYXN0SW5kZXg7cmV0dXJuIGE8Yy5sZW5ndGgmJihoPWMuc2xpY2UoYSksX1ttXT9fW21dKz1oOl9bKyttXT1oKSxfLmxlbmd0aDwyP09bMF0/ZnVuY3Rpb24gakR0KGwpe3JldHVybiBmdW5jdGlvbihjKXtyZXR1cm4gbChjKSsiIn19KE9bMF0ueCk6ZnVuY3Rpb24gQkR0KGwpe3JldHVy'@;
put 'biBmdW5jdGlvbigpe3JldHVybiBsfX0oYyk6KGM9Ty5sZW5ndGgsZnVuY3Rpb24oWCl7Zm9yKHZhciBwZSxhZT0wO2FlPGM7KythZSlfWyhwZT1PW2FlXSkuaV09cGUueChYKTtyZXR1cm4gXy5qb2luKCIiKX0pfWZ1bmN0aW9uIGs4ZShsLGMpe3ZhciBhO3JldHVybigibnVtYmVyIj09dHlw'@;
put 'ZW9mIGM/ZTI6YyBpbnN0YW5jZW9mIHg2P3BGOihhPXg2KGMpKT8oYz1hLHBGKTpNOGUpKGwsYyl9ZnVuY3Rpb24gekR0KGwpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGwpfX1mdW5jdGlvbiBVRHQobCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRy'@;
put 'aWJ1dGVOUyhsLnNwYWNlLGwubG9jYWwpfX1mdW5jdGlvbiBaRHQobCxjLGEpe3ZhciBmLGgsZD1hKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciBtPXRoaXMuZ2V0QXR0cmlidXRlKGwpO3JldHVybiBtPT09ZD9udWxsOm09PT1mP2g6aD1jKGY9bSxhKX19ZnVuY3Rpb24gWUR0KGwsYyxhKXt2'@;
put 'YXIgZixoLGQ9YSsiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbT10aGlzLmdldEF0dHJpYnV0ZU5TKGwuc3BhY2UsbC5sb2NhbCk7cmV0dXJuIG09PT1kP251bGw6bT09PWY/aDpoPWMoZj1tLGEpfX1mdW5jdGlvbiBXRHQobCxjLGEpe3ZhciBmLGQsaDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIg'@;
put 'bSxPLF89YSh0aGlzKTtyZXR1cm4gbnVsbD09Xz92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKGwpOihtPXRoaXMuZ2V0QXR0cmlidXRlKGwpKT09PShPPV8rIiIpP251bGw6bT09PWYmJk89PT1kP2g6KGQ9TyxoPWMoZj1tLF8pKX19ZnVuY3Rpb24gR0R0KGwsYyxhKXt2YXIgZixkLGg7cmV0'@;
put 'dXJuIGZ1bmN0aW9uKCl7dmFyIG0sTyxfPWEodGhpcyk7cmV0dXJuIG51bGw9PV8/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGwuc3BhY2UsbC5sb2NhbCk6KG09dGhpcy5nZXRBdHRyaWJ1dGVOUyhsLnNwYWNlLGwubG9jYWwpKT09PShPPV8rIiIpP251bGw6bT09PWYmJk89PT1kP2g6'@;
put 'KGQ9TyxoPWMoZj1tLF8pKX19ZnVuY3Rpb24gWER0KGwsYyl7dmFyIGEsZjtmdW5jdGlvbiBkKCl7dmFyIGg9Yy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGghPT1mJiYoYT0oZj1oKSYmZnVuY3Rpb24gcUR0KGwsYyl7cmV0dXJuIGZ1bmN0aW9uKGEpe3RoaXMuc2V0QXR0cmlidXRl'@;
put 'TlMobC5zcGFjZSxsLmxvY2FsLGMuY2FsbCh0aGlzLGEpKX19KGwsaCkpLGF9cmV0dXJuIGQuX3ZhbHVlPWMsZH1mdW5jdGlvbiBKRHQobCxjKXt2YXIgYSxmO2Z1bmN0aW9uIGQoKXt2YXIgaD1jLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gaCE9PWYmJihhPShmPWgpJiZmdW5jdGlv'@;
put 'biBLRHQobCxjKXtyZXR1cm4gZnVuY3Rpb24oYSl7dGhpcy5zZXRBdHRyaWJ1dGUobCxjLmNhbGwodGhpcyxhKSl9fShsLGgpKSxhfXJldHVybiBkLl92YWx1ZT1jLGR9ZnVuY3Rpb24gZUl0KGwsYyl7cmV0dXJuIGZ1bmN0aW9uKCl7SkoodGhpcyxsKS5kZWxheT0rYy5hcHBseSh0aGlzLGFy'@;
put 'Z3VtZW50cyl9fWZ1bmN0aW9uIHRJdChsLGMpe3JldHVybiBjPStjLGZ1bmN0aW9uKCl7SkoodGhpcyxsKS5kZWxheT1jfX1mdW5jdGlvbiBySXQobCxjKXtyZXR1cm4gZnVuY3Rpb24oKXtRaCh0aGlzLGwpLmR1cmF0aW9uPStjLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gaUl0'@;
put 'KGwsYyl7cmV0dXJuIGM9K2MsZnVuY3Rpb24oKXtRaCh0aGlzLGwpLmR1cmF0aW9uPWN9fXZhciBiSXQ9azYucHJvdG90eXBlLmNvbnN0cnVjdG9yO2Z1bmN0aW9uIEU4ZShsKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGwpfX12YXIgSEl0PTA7ZnVuY3Rp'@;
put 'b24gbjIobCxjLGEsZil7dGhpcy5fZ3JvdXBzPWwsdGhpcy5fcGFyZW50cz1jLHRoaXMuX25hbWU9YSx0aGlzLl9pZD1mfWZ1bmN0aW9uIGFRKGwpe3JldHVybiBrNigpLnRyYW5zaXRpb24obCl9ZnVuY3Rpb24geDhlKCl7cmV0dXJuKytISXR9dmFyIEszPWs2LnByb3RvdHlwZTtuMi5wcm90'@;
put 'b3R5cGU9YVEucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpuMixzZWxlY3Q6ZnVuY3Rpb24gdkl0KGwpe3ZhciBjPXRoaXMuX25hbWUsYT10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgbCYmKGw9akoobCkpO2Zvcih2YXIgZj10aGlzLl9ncm91cHMsZD1mLmxlbmd0aCxoPW5ldyBBcnJheShk'@;
put 'KSxtPTA7bTxkOysrbSlmb3IodmFyIGFlLHBlLF89ZlttXSxPPV8ubGVuZ3RoLFg9aFttXT1uZXcgQXJyYXkoTyksYmU9MDtiZTxPOysrYmUpKGFlPV9bYmVdKSYmKHBlPWwuY2FsbChhZSxhZS5fX2RhdGFfXyxiZSxfKSkmJigiX19kYXRhX18iaW4gYWUmJihwZS5fX2RhdGFfXz1hZS5fX2Rh'@;
put 'dGFfXyksWFtiZV09cGUsYUYoWFtiZV0sYyxhLGJlLFgsWWQoYWUsYSkpKTtyZXR1cm4gbmV3IG4yKGgsdGhpcy5fcGFyZW50cyxjLGEpfSxzZWxlY3RBbGw6ZnVuY3Rpb24geUl0KGwpe3ZhciBjPXRoaXMuX25hbWUsYT10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgbCYmKGw9VjZlKGwp'@;
put 'KTtmb3IodmFyIGY9dGhpcy5fZ3JvdXBzLGQ9Zi5sZW5ndGgsaD1bXSxtPVtdLF89MDtfPGQ7KytfKWZvcih2YXIgYWUsTz1mW19dLFg9Ty5sZW5ndGgscGU9MDtwZTxYOysrcGUpaWYoYWU9T1twZV0pe2Zvcih2YXIgeGUsYmU9bC5jYWxsKGFlLGFlLl9fZGF0YV9fLHBlLE8pLFZlPVlkKGFl'@;
put 'LGEpLFplPTAsbHQ9YmUubGVuZ3RoO1plPGx0OysrWmUpKHhlPWJlW1plXSkmJmFGKHhlLGMsYSxaZSxiZSxWZSk7aC5wdXNoKGJlKSxtLnB1c2goYWUpfXJldHVybiBuZXcgbjIoaCxtLGMsYSl9LHNlbGVjdENoaWxkOkszLnNlbGVjdENoaWxkLHNlbGVjdENoaWxkcmVuOkszLnNlbGVjdENo'@;
put 'aWxkcmVuLGZpbHRlcjpmdW5jdGlvbiBjSXQobCl7ImZ1bmN0aW9uIiE9dHlwZW9mIGwmJihsPUI2ZShsKSk7Zm9yKHZhciBjPXRoaXMuX2dyb3VwcyxhPWMubGVuZ3RoLGY9bmV3IEFycmF5KGEpLGQ9MDtkPGE7KytkKWZvcih2YXIgTyxoPWNbZF0sbT1oLmxlbmd0aCxfPWZbZF09W10sWD0w'@;
put 'O1g8bTsrK1gpKE89aFtYXSkmJmwuY2FsbChPLE8uX19kYXRhX18sWCxoKSYmXy5wdXNoKE8pO3JldHVybiBuZXcgbjIoZix0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxtZXJnZTpmdW5jdGlvbiBmSXQobCl7aWYobC5faWQhPT10aGlzLl9pZCl0aHJvdyBuZXcgRXJyb3I7'@;
put 'Zm9yKHZhciBjPXRoaXMuX2dyb3VwcyxhPWwuX2dyb3VwcyxmPWMubGVuZ3RoLGg9TWF0aC5taW4oZixhLmxlbmd0aCksbT1uZXcgQXJyYXkoZiksXz0wO188aDsrK18pZm9yKHZhciBiZSxPPWNbX10sWD1hW19dLGFlPU8ubGVuZ3RoLHBlPW1bX109bmV3IEFycmF5KGFlKSx4ZT0wO3hlPGFl'@;
put 'OysreGUpKGJlPU9beGVdfHxYW3hlXSkmJihwZVt4ZV09YmUpO2Zvcig7XzxmOysrXyltW19dPWNbX107cmV0dXJuIG5ldyBuMihtLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LHNlbGVjdGlvbjpmdW5jdGlvbiBfSXQoKXtyZXR1cm4gbmV3IGJJdCh0aGlzLl9ncm91cHMs'@;
put 'dGhpcy5fcGFyZW50cyl9LHRyYW5zaXRpb246ZnVuY3Rpb24gUEl0KCl7Zm9yKHZhciBsPXRoaXMuX25hbWUsYz10aGlzLl9pZCxhPXg4ZSgpLGY9dGhpcy5fZ3JvdXBzLGQ9Zi5sZW5ndGgsaD0wO2g8ZDsrK2gpZm9yKHZhciBPLG09ZltoXSxfPW0ubGVuZ3RoLFg9MDtYPF87KytYKWlmKE89'@;
put 'bVtYXSl7dmFyIGFlPVlkKE8sYyk7YUYoTyxsLGEsWCxtLHt0aW1lOmFlLnRpbWUrYWUuZGVsYXkrYWUuZHVyYXRpb24sZGVsYXk6MCxkdXJhdGlvbjphZS5kdXJhdGlvbixlYXNlOmFlLmVhc2V9KX1yZXR1cm4gbmV3IG4yKGYsdGhpcy5fcGFyZW50cyxsLGEpfSxjYWxsOkszLmNhbGwsbm9k'@;
put 'ZXM6SzMubm9kZXMsbm9kZTpLMy5ub2RlLHNpemU6SzMuc2l6ZSxlbXB0eTpLMy5lbXB0eSxlYWNoOkszLmVhY2gsb246ZnVuY3Rpb24gcEl0KGwsYyl7dmFyIGE9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9ZZCh0aGlzLm5vZGUoKSxhKS5vbi5vbihsKTp0aGlzLmVhY2go'@;
put 'ZnVuY3Rpb24gaEl0KGwsYyxhKXt2YXIgZixkLGg9ZnVuY3Rpb24gZEl0KGwpe3JldHVybihsKyIiKS50cmltKCkuc3BsaXQoL158XHMrLykuZXZlcnkoZnVuY3Rpb24oYyl7dmFyIGE9Yy5pbmRleE9mKCIuIik7cmV0dXJuIGE+PTAmJihjPWMuc2xpY2UoMCxhKSksIWN8fCJzdGFydCI9PT1j'@;
put 'fSl9KGMpP0pKOlFoO3JldHVybiBmdW5jdGlvbigpe3ZhciBtPWgodGhpcyxsKSxfPW0ub247XyE9PWYmJihkPShmPV8pLmNvcHkoKSkub24oYyxhKSxtLm9uPWR9fShhLGwsYykpfSxhdHRyOmZ1bmN0aW9uICREdChsLGMpe3ZhciBhPVhQKGwpLGY9InRyYW5zZm9ybSI9PT1hP3U4ZTprOGU7'@;
put 'cmV0dXJuIHRoaXMuYXR0clR3ZWVuKGwsImZ1bmN0aW9uIj09dHlwZW9mIGM/KGEubG9jYWw/R0R0OldEdCkoYSxmLGVRKHRoaXMsImF0dHIuIitsLGMpKTpudWxsPT1jPyhhLmxvY2FsP1VEdDp6RHQpKGEpOihhLmxvY2FsP1lEdDpaRHQpKGEsZixjKSl9LGF0dHJUd2VlbjpmdW5jdGlvbiBR'@;
put 'RHQobCxjKXt2YXIgYT0iYXR0ci4iK2w7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihhPXRoaXMudHdlZW4oYSkpJiZhLl92YWx1ZTtpZihudWxsPT1jKXJldHVybiB0aGlzLnR3ZWVuKGEsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGMpdGhyb3cgbmV3IEVycm9yO3ZhciBmPVhQ'@;
put 'KGwpO3JldHVybiB0aGlzLnR3ZWVuKGEsKGYubG9jYWw/WER0OkpEdCkoZixjKSl9LHN0eWxlOmZ1bmN0aW9uIGtJdChsLGMsYSl7dmFyIGY9InRyYW5zZm9ybSI9PShsKz0iIik/X0R0Oms4ZTtyZXR1cm4gbnVsbD09Yz90aGlzLnN0eWxlVHdlZW4obCxmdW5jdGlvbiB3SXQobCxjKXt2YXIg'@;
put 'YSxmLGQ7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGg9QWIodGhpcyxsKSxtPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGwpLEFiKHRoaXMsbCkpO3JldHVybiBoPT09bT9udWxsOmg9PT1hJiZtPT09Zj9kOmQ9YyhhPWgsZj1tKX19KGwsZikpLm9uKCJlbmQuc3R5bGUuIitsLEU4ZShsKSk6'@;
put 'ImZ1bmN0aW9uIj09dHlwZW9mIGM/dGhpcy5zdHlsZVR3ZWVuKGwsZnVuY3Rpb24gU0l0KGwsYyxhKXt2YXIgZixkLGg7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG09QWIodGhpcyxsKSxfPWEodGhpcyksTz1fKyIiO3JldHVybiBudWxsPT1fJiYodGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShs'@;
put 'KSxPPV89QWIodGhpcyxsKSksbT09PU8/bnVsbDptPT09ZiYmTz09PWQ/aDooZD1PLGg9YyhmPW0sXykpfX0obCxmLGVRKHRoaXMsInN0eWxlLiIrbCxjKSkpLmVhY2goZnVuY3Rpb24gTUl0KGwsYyl7dmFyIGEsZixkLF8saD0ic3R5bGUuIitjLG09ImVuZC4iK2g7cmV0dXJuIGZ1bmN0aW9u'@;
put 'KCl7dmFyIE89UWgodGhpcyxsKSxYPU8ub24sYWU9bnVsbD09Ty52YWx1ZVtoXT9ffHwoXz1FOGUoYykpOnZvaWQgMDsoWCE9PWF8fGQhPT1hZSkmJihmPShhPVgpLmNvcHkoKSkub24obSxkPWFlKSxPLm9uPWZ9fSh0aGlzLl9pZCxsKSk6dGhpcy5zdHlsZVR3ZWVuKGwsZnVuY3Rpb24gQ0l0'@;
put 'KGwsYyxhKXt2YXIgZixoLGQ9YSsiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbT1BYih0aGlzLGwpO3JldHVybiBtPT09ZD9udWxsOm09PT1mP2g6aD1jKGY9bSxhKX19KGwsZixjKSxhKS5vbigiZW5kLnN0eWxlLiIrbCxudWxsKX0sc3R5bGVUd2VlbjpmdW5jdGlvbiBBSXQobCxjLGEpe3Zh'@;
put 'ciBmPSJzdHlsZS4iKyhsKz0iIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihmPXRoaXMudHdlZW4oZikpJiZmLl92YWx1ZTtpZihudWxsPT1jKXJldHVybiB0aGlzLnR3ZWVuKGYsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGMpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlz'@;
put 'LnR3ZWVuKGYsZnVuY3Rpb24geEl0KGwsYyxhKXt2YXIgZixkO2Z1bmN0aW9uIGgoKXt2YXIgbT1jLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbSE9PWQmJihmPShkPW0pJiZmdW5jdGlvbiBFSXQobCxjLGEpe3JldHVybiBmdW5jdGlvbihmKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5'@;
put 'KGwsYy5jYWxsKHRoaXMsZiksYSl9fShsLG0sYSkpLGZ9cmV0dXJuIGguX3ZhbHVlPWMsaH0obCxjLGE/PyIiKSl9LHRleHQ6ZnVuY3Rpb24gREl0KGwpe3JldHVybiB0aGlzLnR3ZWVuKCJ0ZXh0IiwiZnVuY3Rpb24iPT10eXBlb2YgbD9mdW5jdGlvbiBPSXQobCl7cmV0dXJuIGZ1bmN0aW9u'@;
put 'KCl7dmFyIGM9bCh0aGlzKTt0aGlzLnRleHRDb250ZW50PWM/PyIifX0oZVEodGhpcywidGV4dCIsbCkpOmZ1bmN0aW9uIFRJdChsKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWx9fShudWxsPT1sPyIiOmwrIiIpKX0sdGV4dFR3ZWVuOmZ1bmN0aW9uIExJdChsKXt2YXIg'@;
put 'Yz0idGV4dCI7aWYoYXJndW1lbnRzLmxlbmd0aDwxKXJldHVybihjPXRoaXMudHdlZW4oYykpJiZjLl92YWx1ZTtpZihudWxsPT1sKXJldHVybiB0aGlzLnR3ZWVuKGMsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGwpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKGMsZnVu'@;
put 'Y3Rpb24gUkl0KGwpe3ZhciBjLGE7ZnVuY3Rpb24gZigpe3ZhciBkPWwuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBkIT09YSYmKGM9KGE9ZCkmJmZ1bmN0aW9uIElJdChsKXtyZXR1cm4gZnVuY3Rpb24oYyl7dGhpcy50ZXh0Q29udGVudD1sLmNhbGwodGhpcyxjKX19KGQpKSxjfXJl'@;
put 'dHVybiBmLl92YWx1ZT1sLGZ9KGwpKX0scmVtb3ZlOmZ1bmN0aW9uIGdJdCgpe3JldHVybiB0aGlzLm9uKCJlbmQucmVtb3ZlIixmdW5jdGlvbiBtSXQobCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgYSBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigr'@;
put 'YSE9PWwpcmV0dXJuO2MmJmMucmVtb3ZlQ2hpbGQodGhpcyl9fSh0aGlzLl9pZCkpfSx0d2VlbjpmdW5jdGlvbiBTRHQobCxjKXt2YXIgYT10aGlzLl9pZDtpZihsKz0iIixhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgbSxmPVlkKHRoaXMubm9kZSgpLGEpLnR3ZWVuLGQ9MCxoPWYubGVu'@;
put 'Z3RoO2Q8aDsrK2QpaWYoKG09ZltkXSkubmFtZT09PWwpcmV0dXJuIG0udmFsdWU7cmV0dXJuIG51bGx9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09Yz93RHQ6Q0R0KShhLGwsYykpfSxkZWxheTpmdW5jdGlvbiBuSXQobCl7dmFyIGM9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/'@;
put 'dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgbD9lSXQ6dEl0KShjLGwpKTpZZCh0aGlzLm5vZGUoKSxjKS5kZWxheX0sZHVyYXRpb246ZnVuY3Rpb24gb0l0KGwpe3ZhciBjPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9m'@;
put 'IGw/ckl0OmlJdCkoYyxsKSk6WWQodGhpcy5ub2RlKCksYykuZHVyYXRpb259LGVhc2U6ZnVuY3Rpb24gbEl0KGwpe3ZhciBjPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChmdW5jdGlvbiBhSXQobCxjKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyl0aHJvdyBu'@;
put 'ZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7UWgodGhpcyxsKS5lYXNlPWN9fShjLGwpKTpZZCh0aGlzLm5vZGUoKSxjKS5lYXNlfSxlYXNlVmFyeWluZzpmdW5jdGlvbiB1SXQobCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGwpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLmVhY2goZnVu'@;
put 'Y3Rpb24gc0l0KGwsYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9Yy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGEpdGhyb3cgbmV3IEVycm9yO1FoKHRoaXMsbCkuZWFzZT1hfX0odGhpcy5faWQsbCkpfSxlbmQ6ZnVuY3Rpb24gRkl0KCl7dmFyIGwsYyxh'@;
put 'PXRoaXMsZj1hLl9pZCxkPWEuc2l6ZSgpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihoLG0pe3ZhciBfPXt2YWx1ZTptfSxPPXt2YWx1ZTpmdW5jdGlvbigpezA9PS0tZCYmaCgpfX07YS5lYWNoKGZ1bmN0aW9uKCl7dmFyIFg9UWgodGhpcyxmKSxhZT1YLm9uO2FlIT09bCYmKChjPShs'@;
put 'PWFlKS5jb3B5KCkpLl8uY2FuY2VsLnB1c2goXyksYy5fLmludGVycnVwdC5wdXNoKF8pLGMuXy5lbmQucHVzaChPKSksWC5vbj1jfSksMD09PWQmJmgoKX0pfSxbU3ltYm9sLml0ZXJhdG9yXTpLM1tTeW1ib2wuaXRlcmF0b3JdfTt2YXIgVkl0PXt0aW1lOm51bGwsZGVsYXk6MCxkdXJhdGlv'@;
put 'bjoyNTAsZWFzZTpmdW5jdGlvbiBOSXQobCl7cmV0dXJuKChsKj0yKTw9MT9sKmwqbDoobC09MikqbCpsKzIpLzJ9fTtmdW5jdGlvbiBCSXQobCxjKXtmb3IodmFyIGE7IShhPWwuX190cmFuc2l0aW9uKXx8IShhPWFbY10pOylpZighKGw9bC5wYXJlbnROb2RlKSl0aHJvdyBuZXcgRXJyb3Io'@;
put 'YHRyYW5zaXRpb24gJHtjfSBub3QgZm91bmRgKTtyZXR1cm4gYX1rNi5wcm90b3R5cGUuaW50ZXJydXB0PWZ1bmN0aW9uIHZEdChsKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7bEYodGhpcyxsKX0pfSxrNi5wcm90b3R5cGUudHJhbnNpdGlvbj1mdW5jdGlvbiBqSXQobCl7dmFyIGMs'@;
put 'YTtsIGluc3RhbmNlb2YgbjI/KGM9bC5faWQsbD1sLl9uYW1lKTooYz14OGUoKSwoYT1WSXQpLnRpbWU9R0ooKSxsPW51bGw9PWw/bnVsbDpsKyIiKTtmb3IodmFyIGY9dGhpcy5fZ3JvdXBzLGQ9Zi5sZW5ndGgsaD0wO2g8ZDsrK2gpZm9yKHZhciBPLG09ZltoXSxfPW0ubGVuZ3RoLFg9MDtY'@;
put 'PF87KytYKShPPW1bWF0pJiZhRihPLGwsYyxYLG0sYXx8Qkl0KE8sYykpO3JldHVybiBuZXcgbjIoZix0aGlzLl9wYXJlbnRzLGwsYyl9O3ZhciB6SXQ9W251bGxdO2NvbnN0IGxRPXtjYXB0dXJlOiEwLHBhc3NpdmU6ITF9O2Z1bmN0aW9uIHNRKGwpe2wucHJldmVudERlZmF1bHQoKSxsLnN0'@;
put 'b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIEE4ZShsKXtyZXR1cm4oKGw9TWF0aC5leHAobCkpKzEvbCkvMn1jb25zdCBLSXQ9ZnVuY3Rpb24gbChjLGEsZil7ZnVuY3Rpb24gZChoLG0pe3ZhciBsdCxkdCxfPWhbMF0sTz1oWzFdLFg9aFsyXSxiZT1tWzJdLHhlPW1bMF0tXyxW'@;
put 'ZT1tWzFdLU8sWmU9eGUqeGUrVmUqVmU7aWYoWmU8MWUtMTIpZHQ9TWF0aC5sb2coYmUvWCkvYyxsdD1mdW5jdGlvbihRbil7cmV0dXJuW18rUW4qeGUsTytRbipWZSxYKk1hdGguZXhwKGMqUW4qZHQpXX07ZWxzZXt2YXIgZ3Q9TWF0aC5zcXJ0KFplKSxqdD0oYmUqYmUtWCpYK2YqWmUpLygy'@;
put 'KlgqYSpndCkscm49KGJlKmJlLVgqWC1mKlplKS8oMipiZSphKmd0KSxYdD1NYXRoLmxvZyhNYXRoLnNxcnQoanQqanQrMSktanQpLHluPU1hdGgubG9nKE1hdGguc3FydChybipybisxKS1ybik7ZHQ9KHluLVh0KS9jLGx0PWZ1bmN0aW9uKFFuKXt2YXIgT3I9UW4qZHQsVnI9QThlKFh0KSxa'@;
put 'cj1YLyhhKmd0KSooVnIqZnVuY3Rpb24gJEl0KGwpe3JldHVybigobD1NYXRoLmV4cCgyKmwpKS0xKS8obCsxKX0oYypPcitYdCktZnVuY3Rpb24gR0l0KGwpe3JldHVybigobD1NYXRoLmV4cChsKSktMS9sKS8yfShYdCkpO3JldHVybltfK1pyKnhlLE8rWnIqVmUsWCpWci9BOGUoYypPcitY'@;
put 'dCldfX1yZXR1cm4gbHQuZHVyYXRpb249MWUzKmR0KmMvTWF0aC5TUVJUMixsdH1yZXR1cm4gZC5yaG89ZnVuY3Rpb24oaCl7dmFyIG09TWF0aC5tYXgoLjAwMSwraCksXz1tKm07cmV0dXJuIGwobSxfLF8qXyl9LGR9KE1hdGguU1FSVDIsMiw0KTtmdW5jdGlvbiBPNihsLGMpe2lmKGw9ZnVu'@;
put 'Y3Rpb24gcUl0KGwpe2xldCBjO2Zvcig7Yz1sLnNvdXJjZUV2ZW50OylsPWM7cmV0dXJuIGx9KGwpLHZvaWQgMD09PWMmJihjPWwuY3VycmVudFRhcmdldCksYyl7dmFyIGE9Yy5vd25lclNWR0VsZW1lbnR8fGM7aWYoYS5jcmVhdGVTVkdQb2ludCl7dmFyIGY9YS5jcmVhdGVTVkdQb2ludCgp'@;
put 'O3JldHVybiBmLng9bC5jbGllbnRYLGYueT1sLmNsaWVudFksWyhmPWYubWF0cml4VHJhbnNmb3JtKGMuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKSkueCxmLnldfWlmKGMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KXt2YXIgZD1jLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybltsLmNs'@;
put 'aWVudFgtZC5sZWZ0LWMuY2xpZW50TGVmdCxsLmNsaWVudFktZC50b3AtYy5jbGllbnRUb3BdfX1yZXR1cm5bbC5wYWdlWCxsLnBhZ2VZXX1jb25zdCBtRj1sPT4oKT0+bDtmdW5jdGlvbiBYSXQobCx7c291cmNlRXZlbnQ6Yyx0YXJnZXQ6YSx0cmFuc2Zvcm06ZixkaXNwYXRjaDpkfSl7T2Jq'@;
put 'ZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7dHlwZTp7dmFsdWU6bCxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sc291cmNlRXZlbnQ6e3ZhbHVlOmMsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LHRhcmdldDp7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJs'@;
put 'ZTohMH0sdHJhbnNmb3JtOnt2YWx1ZTpmLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxfOnt2YWx1ZTpkfX0pfWZ1bmN0aW9uIHEzKGwsYyxhKXt0aGlzLms9bCx0aGlzLng9Yyx0aGlzLnk9YX1xMy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnEzLHNjYWxlOmZ1bmN0aW9uKGwpe3Jl'@;
put 'dHVybiAxPT09bD90aGlzOm5ldyBxMyh0aGlzLmsqbCx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKGwsYyl7cmV0dXJuIDA9PT1sJjA9PT1jP3RoaXM6bmV3IHEzKHRoaXMuayx0aGlzLngrdGhpcy5rKmwsdGhpcy55K3RoaXMuaypjKX0sYXBwbHk6ZnVuY3Rpb24obCl7cmV0'@;
put 'dXJuW2xbMF0qdGhpcy5rK3RoaXMueCxsWzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24obCl7cmV0dXJuIGwqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKGwpe3JldHVybiBsKnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbihsKXtyZXR1cm5bKGxbMF0tdGhp'@;
put 'cy54KS90aGlzLmssKGxbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKGwpe3JldHVybihsLXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKGwpe3JldHVybihsLXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbihsKXtyZXR1cm4gbC5jb3B5KCkuZG9t'@;
put 'YWluKGwucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcChsLmludmVydCxsKSl9LHJlc2NhbGVZOmZ1bmN0aW9uKGwpe3JldHVybiBsLmNvcHkoKS5kb21haW4obC5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKGwuaW52ZXJ0LGwpKX0sdG9TdHJpbmc6ZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX07dmFyIGdGPW5ldyBxMygxLDAsMCk7ZnVuY3Rpb24gdkYobCl7Zm9yKDshbC5fX3pvb207KWlmKCEobD1sLnBhcmVudE5vZGUpKXJldHVybiBnRjtyZXR1cm4gbC5fX3pvb219'@;
put 'ZnVuY3Rpb24gdVEobCl7bC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBleChsKXtsLnByZXZlbnREZWZhdWx0KCksbC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBKSXQobCl7cmV0dXJuIShsLmN0cmxLZXkmJiJ3aGVlbCIhPT1sLnR5cGV8fGwuYnV0'@;
put 'dG9uKX1mdW5jdGlvbiBRSXQoKXt2YXIgbD10aGlzO3JldHVybiBsIGluc3RhbmNlb2YgU1ZHRWxlbWVudD8obD1sLm93bmVyU1ZHRWxlbWVudHx8bCkuaGFzQXR0cmlidXRlKCJ2aWV3Qm94Iik/W1sobD1sLnZpZXdCb3guYmFzZVZhbCkueCxsLnldLFtsLngrbC53aWR0aCxsLnkrbC5oZWln'@;
put 'aHRdXTpbWzAsMF0sW2wud2lkdGguYmFzZVZhbC52YWx1ZSxsLmhlaWdodC5iYXNlVmFsLnZhbHVlXV06W1swLDBdLFtsLmNsaWVudFdpZHRoLGwuY2xpZW50SGVpZ2h0XV19ZnVuY3Rpb24gVDhlKCl7cmV0dXJuIHRoaXMuX196b29tfHxnRn1mdW5jdGlvbiBlUnQobCl7cmV0dXJuLWwuZGVs'@;
put 'dGFZKigxPT09bC5kZWx0YU1vZGU/LjA1OmwuZGVsdGFNb2RlPzE6LjAwMikqKGwuY3RybEtleT8xMDoxKX1mdW5jdGlvbiB0UnQoKXtyZXR1cm4gbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzfHwib250b3VjaHN0YXJ0ImluIHRoaXN9ZnVuY3Rpb24gblJ0KGwsYyxhKXt2YXIgZj1sLmludmVy'@;
put 'dFgoY1swXVswXSktYVswXVswXSxkPWwuaW52ZXJ0WChjWzFdWzBdKS1hWzFdWzBdLGg9bC5pbnZlcnRZKGNbMF1bMV0pLWFbMF1bMV0sbT1sLmludmVydFkoY1sxXVsxXSktYVsxXVsxXTtyZXR1cm4gbC50cmFuc2xhdGUoZD5mPyhmK2QpLzI6TWF0aC5taW4oMCxmKXx8TWF0aC5tYXgoMCxk'@;
put 'KSxtPmg/KGgrbSkvMjpNYXRoLm1pbigwLGgpfHxNYXRoLm1heCgwLG0pKX1mdW5jdGlvbiBPOGUobCl7dmFyIGM9e30sYT1sLm5vZGUoKS5ub2RlTmFtZTtjLnRhZz1hLCIjdGV4dCI9PWE/Yy50ZXh0PWwudGV4dCgpOiIjY29tbWVudCI9PWEmJihjLmNvbW1lbnQ9bC50ZXh0KCkpLGMuYXR0'@;
put 'cmlidXRlcz17fTt2YXIgZj1sLm5vZGUoKS5hdHRyaWJ1dGVzO2lmKGYpZm9yKHZhciBkPTA7ZDxmLmxlbmd0aDtkKyspe3ZhciBoPWZbZF07Yy5hdHRyaWJ1dGVzW2gubmFtZV09aC52YWx1ZX12YXIgYWUsTz1sLm5vZGUoKS50cmFuc2Zvcm07aWYoTyYmMCE9Ty5iYXNlVmFsLm51bWJlck9m'@;
put 'SXRlbXMpe3ZhciBYPU8uYmFzZVZhbC5jb25zb2xpZGF0ZSgpLm1hdHJpeDtjLnRyYW5zbGF0aW9uPXt4OlguZSx5OlguZn0sYy5zY2FsZT1YLmF9aWYoImVsbGlwc2UiPT1hJiYoYy5jZW50ZXI9e3g6Yy5hdHRyaWJ1dGVzLmN4LHk6Yy5hdHRyaWJ1dGVzLmN5fSksInBvbHlnb24iPT1hKXt2'@;
put 'YXIgcGU9KGFlPWwuYXR0cigicG9pbnRzIikuc3BsaXQoIiAiKSkubWFwKGZ1bmN0aW9uKGp0KXtyZXR1cm4ganQuc3BsaXQoIiwiKVswXX0pLGJlPWFlLm1hcChmdW5jdGlvbihqdCl7cmV0dXJuIGp0LnNwbGl0KCIsIilbMV19KSx4ZT1NYXRoLm1pbi5hcHBseShudWxsLHBlKSxWZT1NYXRo'@;
put 'Lm1heC5hcHBseShudWxsLHBlKSxaZT1NYXRoLm1pbi5hcHBseShudWxsLGJlKSxsdD1NYXRoLm1heC5hcHBseShudWxsLGJlKTtjLmJib3g9e3g6eGUseTpaZSx3aWR0aDpWZS14ZSxoZWlnaHQ6bHQtWmV9LGMuY2VudGVyPXt4Oih4ZStWZSkvMix5OihaZStsdCkvMn19InBhdGgiPT1hJiYo'@;
put 'KGFlPWwuYXR0cigiZCIpLnNwbGl0KC9bQS1aIF0vKSkuc2hpZnQoKSxwZT1hZS5tYXAoZnVuY3Rpb24oaXIpe3JldHVybitpci5zcGxpdCgiLCIpWzBdfSksYmU9YWUubWFwKGZ1bmN0aW9uKGlyKXtyZXR1cm4raXIuc3BsaXQoIiwiKVsxXX0pLHhlPU1hdGgubWluLmFwcGx5KG51bGwscGUp'@;
put 'LFZlPU1hdGgubWF4LmFwcGx5KG51bGwscGUpLFplPU1hdGgubWluLmFwcGx5KG51bGwsYmUpLGx0PU1hdGgubWF4LmFwcGx5KG51bGwsYmUpLGMuYmJveD17eDp4ZSx5OlplLHdpZHRoOlZlLXhlLGhlaWdodDpsdC1aZX0sYy5jZW50ZXI9e3g6KHhlK1ZlKS8yLHk6KFplK2x0KS8yfSxjLnRv'@;
put 'dGFsTGVuZ3RoPWwubm9kZSgpLmdldFRvdGFsTGVuZ3RoKCkpO3JldHVybiJ0ZXh0Ij09YSYmKGMuY2VudGVyPXt4OmwuYXR0cigieCIpLHk6bC5hdHRyKCJ5Iil9KSwiI3RleHQiPT1hP2MudGV4dD1sLnRleHQoKToiI2NvbW1lbnQiPT1hJiYoYy5jb21tZW50PWwudGV4dCgpKSxjfWZ1bmN0'@;
put 'aW9uIEQ2KGwpe3ZhciBjPU84ZShsKTtyZXR1cm4gYy5jaGlsZHJlbj1bXSxZSihsLm5vZGUoKS5jaGlsZE5vZGVzKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGY9RDYoT2EodGhpcykpO2YucGFyZW50PWMsYy5jaGlsZHJlbi5wdXNoKGYpfSksY31mdW5jdGlvbiBjUShsKXtyZXR1cm4iI3RleHQi'@;
put 'PT1sLnRhZz9kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIik6IiNjb21tZW50Ij09bC50YWc/ZG9jdW1lbnQuY3JlYXRlQ29tbWVudChsLmNvbW1lbnQpOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGwudGFnKX1mdW5jdGlvbiBmUShsKXt2'@;
put 'YXIgYz1jUShsKSxhPU9hKGMpLGY9bC5hdHRyaWJ1dGVzO2Zvcih2YXIgZCBvZiBPYmplY3Qua2V5cyhmKSlhLmF0dHIoZCxmW2RdKTtyZXR1cm4gY31mdW5jdGlvbiBEOGUobCxjKXt2YXIgYT1PYShsLm5vZGUoKS5wYXJlbnROb2RlKSxmPWZRKGMpLGQ9YS5pbnNlcnQoZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gZn0sZnVuY3Rpb24oKXtyZXR1cm4gbC5ub2RlKCl9KTtyZXR1cm4gbC5yZW1vdmUoKSxkfWZ1bmN0aW9uIGRRKGwsYyl7IWZ1bmN0aW9uIGlSdChsLGMpe2wuZGF0dW0oYyksbC5kYXRhKFtjXSxmdW5jdGlvbihhKXtyZXR1cm4gYS5rZXl9KX0obCxjKSxZSihsLm5vZGUoKS5jaGls'@;
put 'ZE5vZGVzKS5lYWNoKGZ1bmN0aW9uKGYsZCl7ZFEoT2EodGhpcyksYy5jaGlsZHJlbltkXSl9KX1mdW5jdGlvbiB0eChsLGM9MCl7dmFyIGE9T2EodGhpcyksZD1sLmF0dHJpYnV0ZXMsaD1hLm5vZGUoKS5hdHRyaWJ1dGVzO2lmKGgpZm9yKHZhciBtPTA7bTxoLmxlbmd0aDttKyspe3ZhciBf'@;
put 'PWhbbV0sTz1fLm5hbWU7aWYoInhtbG5zIiE9Ty5zcGxpdCgiOiIpWzBdJiZfLm5hbWVzcGFjZVVSSSl7dmFyIFg9Xy5uYW1lc3BhY2VVUkkuc3BsaXQoIi8iKTtPPVhbWC5sZW5ndGgtMV0rIjoiK099TyBpbiBkfHwoZFtPXT1udWxsKX1mb3IodmFyIHBlIG9mIE9iamVjdC5rZXlzKGQpKWEu'@;
put 'YXR0cihwZSxkW3BlXSk7bC50ZXh0JiZhLnRleHQobC50ZXh0KSxmdW5jdGlvbiBvUnQobCxjKXt2YXIgYT1sLnNlbGVjdEFsbChmdW5jdGlvbigpe3JldHVybiBsLm5vZGUoKS5jaGlsZE5vZGVzfSksZj0oYT1hLmRhdGEoZnVuY3Rpb24obSl7cmV0dXJuIG0uY2hpbGRyZW59LGZ1bmN0aW9u'@;
put 'KG0pe3JldHVybiBtLnRhZysiLSIrY30pKS5lbnRlcigpLmFwcGVuZChmdW5jdGlvbihtKXtyZXR1cm4gY1EobSl9KSxkPWEuZXhpdCgpO2Q9ZC5yZW1vdmUoKSxhPWYubWVyZ2UoYSk7dmFyIGg9e307YS5lYWNoKGZ1bmN0aW9uKG0pe3ZhciBfPW0udGFnO251bGw9PWhbX10mJihoW19dPTAp'@;
put 'O3ZhciBPPWhbX10rKzt0eC5jYWxsKHRoaXMsbSxPKX0pfShhLGMpfWZ1bmN0aW9uIEk4ZShsLGMpe3ZhciBtLGE9Yz9jLmxlbmd0aDowLGY9bD9NYXRoLm1pbihhLGwubGVuZ3RoKTowLGQ9bmV3IEFycmF5KGYpLGg9bmV3IEFycmF5KGEpO2ZvcihtPTA7bTxmOysrbSlkW21dPXlGKGxbbV0s'@;
put 'Y1ttXSk7Zm9yKDttPGE7KyttKWhbbV09Y1ttXTtyZXR1cm4gZnVuY3Rpb24oXyl7Zm9yKG09MDttPGY7KyttKWhbbV09ZFttXShfKTtyZXR1cm4gaH19ZnVuY3Rpb24gYVJ0KGwsYyl7dmFyIGE9bmV3IERhdGU7cmV0dXJuIGw9K2wsYz0rYyxmdW5jdGlvbihmKXtyZXR1cm4gYS5zZXRUaW1l'@;
put 'KGwqKDEtZikrYypmKSxhfX1mdW5jdGlvbiBsUnQobCxjKXt2YXIgZCxhPXt9LGY9e307Zm9yKGQgaW4obnVsbD09PWx8fCJvYmplY3QiIT10eXBlb2YgbCkmJihsPXt9KSwobnVsbD09PWN8fCJvYmplY3QiIT10eXBlb2YgYykmJihjPXt9KSxjKWQgaW4gbD9hW2RdPXlGKGxbZF0sY1tkXSk6'@;
put 'ZltkXT1jW2RdO3JldHVybiBmdW5jdGlvbihoKXtmb3IoZCBpbiBhKWZbZF09YVtkXShoKTtyZXR1cm4gZn19ZnVuY3Rpb24gc1J0KGwsYyl7Y3x8KGM9W10pO3ZhciBkLGE9bD9NYXRoLm1pbihjLmxlbmd0aCxsLmxlbmd0aCk6MCxmPWMuc2xpY2UoKTtyZXR1cm4gZnVuY3Rpb24oaCl7Zm9y'@;
put 'KGQ9MDtkPGE7KytkKWZbZF09bFtkXSooMS1oKStjW2RdKmg7cmV0dXJuIGZ9fWZ1bmN0aW9uIHlGKGwsYyl7dmFyIGYsYT10eXBlb2YgYztyZXR1cm4gbnVsbD09Y3x8ImJvb2xlYW4iPT09YT9yUShjKTooIm51bWJlciI9PT1hP2UyOiJzdHJpbmciPT09YT8oZj14NihjKSk/KGM9ZixwRik6'@;
put 'TThlOmMgaW5zdGFuY2VvZiB4Nj9wRjpjIGluc3RhbmNlb2YgRGF0ZT9hUnQ6ZnVuY3Rpb24gdVJ0KGwpe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcobCkmJiEobCBpbnN0YW5jZW9mIERhdGFWaWV3KX0oYyk/c1J0OkFycmF5LmlzQXJyYXkoYyk/SThlOiJmdW5jdGlvbiIhPXR5cGVvZiBj'@;
put 'LnZhbHVlT2YmJiJmdW5jdGlvbiIhPXR5cGVvZiBjLnRvU3RyaW5nfHxpc05hTihjKT9sUnQ6ZTIpKGwsYyl9ZnVuY3Rpb24gUjhlKCl7dmFyIGw9dGhpcyxmPU9hKHRoaXMuX3NlbGVjdGlvbi5ub2RlKCkucXVlcnlTZWxlY3Rvcigic3ZnIikpO2lmKDA9PWYuc2l6ZSgpKXJldHVybiB0aGlz'@;
put 'O3RoaXMuX3pvb21TZWxlY3Rpb249Zjt2YXIgZD1mdW5jdGlvbiByUnQoKXt2YXIgYWUscGUsYmUsbD1KSXQsYz1RSXQsYT1uUnQsZj1lUnQsZD10UnQsaD1bMCwxLzBdLG09W1stMS8wLC0xLzBdLFsxLzAsMS8wXV0sXz0yNTAsTz1LSXQsWD1XSigic3RhcnQiLCJ6b29tIiwiZW5kIikseGU9'@;
put 'NTAwLFZlPTE1MCxaZT0wLGx0PTEwO2Z1bmN0aW9uIGR0KEVuKXtFbi5wcm9wZXJ0eSgiX196b29tIixUOGUpLm9uKCJ3aGVlbC56b29tIixPcix7cGFzc2l2ZTohMX0pLm9uKCJtb3VzZWRvd24uem9vbSIsVnIpLm9uKCJkYmxjbGljay56b29tIixacikuZmlsdGVyKGQpLm9uKCJ0b3VjaHN0'@;
put 'YXJ0Lnpvb20iLGlyKS5vbigidG91Y2htb3ZlLnpvb20iLHNpKS5vbigidG91Y2hlbmQuem9vbSB0b3VjaGNhbmNlbC56b29tIixBcikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1mdW5jdGlvbiBndChFbixUcil7cmV0dXJuKFRyPU1hdGgu'@;
put 'bWF4KGhbMF0sTWF0aC5taW4oaFsxXSxUcikpKT09PUVuLms/RW46bmV3IHEzKFRyLEVuLngsRW4ueSl9ZnVuY3Rpb24ganQoRW4sVHIsVm4pe3ZhciBjcj1UclswXS1WblswXSpFbi5rLENyPVRyWzFdLVZuWzFdKkVuLms7cmV0dXJuIGNyPT09RW4ueCYmQ3I9PT1Fbi55P0VuOm5ldyBxMyhF'@;
put 'bi5rLGNyLENyKX1mdW5jdGlvbiBybihFbil7cmV0dXJuWygrRW5bMF1bMF0rICtFblsxXVswXSkvMiwoK0VuWzBdWzFdKyArRW5bMV1bMV0pLzJdfWZ1bmN0aW9uIFh0KEVuLFRyLFZuLGNyKXtFbi5vbigic3RhcnQuem9vbSIsZnVuY3Rpb24oKXt5bih0aGlzLGFyZ3VtZW50cykuZXZlbnQo'@;
put 'Y3IpLnN0YXJ0KCl9KS5vbigiaW50ZXJydXB0Lnpvb20gZW5kLnpvb20iLGZ1bmN0aW9uKCl7eW4odGhpcyxhcmd1bWVudHMpLmV2ZW50KGNyKS5lbmQoKX0pLnR3ZWVuKCJ6b29tIixmdW5jdGlvbigpe3ZhciBDcj10aGlzLFlyPWFyZ3VtZW50cyxTdD15bihDcixZcikuZXZlbnQoY3IpLEZ0'@;
put 'PWMuYXBwbHkoQ3IsWXIpLFd0PW51bGw9PVZuP3JuKEZ0KToiZnVuY3Rpb24iPT10eXBlb2YgVm4/Vm4uYXBwbHkoQ3IsWXIpOlZuLHduPU1hdGgubWF4KEZ0WzFdWzBdLUZ0WzBdWzBdLEZ0WzFdWzFdLUZ0WzBdWzFdKSxTbj1Dci5fX3pvb20sYnI9ImZ1bmN0aW9uIj09dHlwZW9mIFRyP1Ry'@;
put 'LmFwcGx5KENyLFlyKTpUcixkcj1PKFNuLmludmVydChXdCkuY29uY2F0KHduL1NuLmspLGJyLmludmVydChXdCkuY29uY2F0KHduL2JyLmspKTtyZXR1cm4gZnVuY3Rpb24oTHIpe2lmKDE9PT1McilMcj1icjtlbHNle3ZhciBOcj1kcihMciksZGk9d24vTnJbMl07THI9bmV3IHEzKGRpLFd0'@;
put 'WzBdLU5yWzBdKmRpLFd0WzFdLU5yWzFdKmRpKX1TdC56b29tKG51bGwsTHIpfX0pfWZ1bmN0aW9uIHluKEVuLFRyLFZuKXtyZXR1cm4hVm4mJkVuLl9fem9vbWluZ3x8bmV3IFFuKEVuLFRyKX1mdW5jdGlvbiBRbihFbixUcil7dGhpcy50aGF0PUVuLHRoaXMuYXJncz1Ucix0aGlzLmFjdGl2'@;
put 'ZT0wLHRoaXMuc291cmNlRXZlbnQ9bnVsbCx0aGlzLmV4dGVudD1jLmFwcGx5KEVuLFRyKSx0aGlzLnRhcHM9MH1mdW5jdGlvbiBPcihFbiwuLi5Ucil7aWYobC5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBWbj15bih0aGlzLFRyKS5ldmVudChFbiksY3I9dGhpcy5fX3pvb20sQ3I9TWF0'@;
put 'aC5tYXgoaFswXSxNYXRoLm1pbihoWzFdLGNyLmsqTWF0aC5wb3coMixmLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkpKSxZcj1PNihFbik7aWYoVm4ud2hlZWwpKFZuLm1vdXNlWzBdWzBdIT09WXJbMF18fFZuLm1vdXNlWzBdWzFdIT09WXJbMV0pJiYoVm4ubW91c2VbMV09Y3IuaW52ZXJ0KFZu'@;
put 'Lm1vdXNlWzBdPVlyKSksY2xlYXJUaW1lb3V0KFZuLndoZWVsKTtlbHNle2lmKGNyLms9PT1DcilyZXR1cm47Vm4ubW91c2U9W1lyLGNyLmludmVydChZcildLGxGKHRoaXMpLFZuLnN0YXJ0KCl9ZXgoRW4pLFZuLndoZWVsPXNldFRpbWVvdXQoZnVuY3Rpb24gU3QoKXtWbi53aGVlbD1udWxs'@;
put 'LFZuLmVuZCgpfSxWZSksVm4uem9vbSgibW91c2UiLGEoanQoZ3QoY3IsQ3IpLFZuLm1vdXNlWzBdLFZuLm1vdXNlWzFdKSxWbi5leHRlbnQsbSkpfX1mdW5jdGlvbiBWcihFbiwuLi5Ucil7aWYoIWJlJiZsLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIFZuPUVuLmN1cnJlbnRUYXJnZXQs'@;
put 'Y3I9eW4odGhpcyxUciwhMCkuZXZlbnQoRW4pLENyPU9hKEVuLnZpZXcpLm9uKCJtb3VzZW1vdmUuem9vbSIsZnVuY3Rpb24gV3QoU24pe2lmKGV4KFNuKSwhY3IubW92ZWQpe3ZhciBicj1Tbi5jbGllbnRYLVN0LGRyPVNuLmNsaWVudFktRnQ7Y3IubW92ZWQ9YnIqYnIrZHIqZHI+WmV9Y3Iu'@;
put 'ZXZlbnQoU24pLnpvb20oIm1vdXNlIixhKGp0KGNyLnRoYXQuX196b29tLGNyLm1vdXNlWzBdPU82KFNuLFZuKSxjci5tb3VzZVsxXSksY3IuZXh0ZW50LG0pKX0sITApLm9uKCJtb3VzZXVwLnpvb20iLGZ1bmN0aW9uIHduKFNuKXtDci5vbigibW91c2Vtb3ZlLnpvb20gbW91c2V1cC56b29t'@;
put 'IixudWxsKSxmdW5jdGlvbiBZSXQobCxjKXt2YXIgYT1sLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxmPU9hKGwpLm9uKCJkcmFnc3RhcnQuZHJhZyIsbnVsbCk7YyYmKGYub24oImNsaWNrLmRyYWciLHNRLGxRKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Zi5vbigiY2xpY2suZHJhZyIsbnVs'@;
put 'bCl9LDApKSwib25zZWxlY3RzdGFydCJpbiBhP2Yub24oInNlbGVjdHN0YXJ0LmRyYWciLG51bGwpOihhLnN0eWxlLk1velVzZXJTZWxlY3Q9YS5fX25vc2VsZWN0LGRlbGV0ZSBhLl9fbm9zZWxlY3QpfShTbi52aWV3LGNyLm1vdmVkKSxleChTbiksY3IuZXZlbnQoU24pLmVuZCgpfSwhMCks'@;
put 'WXI9TzYoRW4sVm4pLFN0PUVuLmNsaWVudFgsRnQ9RW4uY2xpZW50WTsoZnVuY3Rpb24gWkl0KGwpe3ZhciBjPWwuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGE9T2EobCkub24oImRyYWdzdGFydC5kcmFnIixzUSxsUSk7Im9uc2VsZWN0c3RhcnQiaW4gYz9hLm9uKCJzZWxlY3RzdGFydC5k'@;
put 'cmFnIixzUSxsUSk6KGMuX19ub3NlbGVjdD1jLnN0eWxlLk1velVzZXJTZWxlY3QsYy5zdHlsZS5Nb3pVc2VyU2VsZWN0PSJub25lIil9KShFbi52aWV3KSx1UShFbiksY3IubW91c2U9W1lyLHRoaXMuX196b29tLmludmVydChZcildLGxGKHRoaXMpLGNyLnN0YXJ0KCl9fWZ1bmN0aW9uIFpy'@;
put 'KEVuLC4uLlRyKXtpZihsLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIFZuPXRoaXMuX196b29tLGNyPU82KEVuLmNoYW5nZWRUb3VjaGVzP0VuLmNoYW5nZWRUb3VjaGVzWzBdOkVuLHRoaXMpLENyPVZuLmludmVydChjciksU3Q9YShqdChndChWbixWbi5rKihFbi5zaGlmdEtleT8uNToy'@;
put 'KSksY3IsQ3IpLGMuYXBwbHkodGhpcyxUciksbSk7ZXgoRW4pLF8+MD9PYSh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oXykuY2FsbChYdCxTdCxjcixFbik6T2EodGhpcykuY2FsbChkdC50cmFuc2Zvcm0sU3QsY3IsRW4pfX1mdW5jdGlvbiBpcihFbiwuLi5Ucil7aWYobC5hcHBseSh0'@;
put 'aGlzLGFyZ3VtZW50cykpe3ZhciBZcixTdCxGdCxXdCxWbj1Fbi50b3VjaGVzLGNyPVZuLmxlbmd0aCxDcj15bih0aGlzLFRyLEVuLmNoYW5nZWRUb3VjaGVzLmxlbmd0aD09PWNyKS5ldmVudChFbik7Zm9yKHVRKEVuKSxTdD0wO1N0PGNyOysrU3QpV3Q9W1d0PU82KEZ0PVZuW1N0XSx0aGlz'@;
put 'KSx0aGlzLl9fem9vbS5pbnZlcnQoV3QpLEZ0LmlkZW50aWZpZXJdLENyLnRvdWNoMD8hQ3IudG91Y2gxJiZDci50b3VjaDBbMl0hPT1XdFsyXSYmKENyLnRvdWNoMT1XdCxDci50YXBzPTApOihDci50b3VjaDA9V3QsWXI9ITAsQ3IudGFwcz0xKyEhYWUpO2FlJiYoYWU9Y2xlYXJUaW1lb3V0'@;
put 'KGFlKSksWXImJihDci50YXBzPDImJihwZT1XdFswXSxhZT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YWU9bnVsbH0seGUpKSxsRih0aGlzKSxDci5zdGFydCgpKX19ZnVuY3Rpb24gc2koRW4sLi4uVHIpe2lmKHRoaXMuX196b29taW5nKXt2YXIgWXIsU3QsRnQsV3QsVm49eW4odGhpcyxUciku'@;
put 'ZXZlbnQoRW4pLGNyPUVuLmNoYW5nZWRUb3VjaGVzLENyPWNyLmxlbmd0aDtmb3IoZXgoRW4pLFlyPTA7WXI8Q3I7KytZcilGdD1PNihTdD1jcltZcl0sdGhpcyksVm4udG91Y2gwJiZWbi50b3VjaDBbMl09PT1TdC5pZGVudGlmaWVyP1ZuLnRvdWNoMFswXT1GdDpWbi50b3VjaDEmJlZuLnRv'@;
put 'dWNoMVsyXT09PVN0LmlkZW50aWZpZXImJihWbi50b3VjaDFbMF09RnQpO2lmKFN0PVZuLnRoYXQuX196b29tLFZuLnRvdWNoMSl7dmFyIHduPVZuLnRvdWNoMFswXSxTbj1Wbi50b3VjaDBbMV0sYnI9Vm4udG91Y2gxWzBdLGRyPVZuLnRvdWNoMVsxXSxMcj0oTHI9YnJbMF0td25bMF0pKkxy'@;
put 'KyhMcj1iclsxXS13blsxXSkqTHIsTnI9KE5yPWRyWzBdLVNuWzBdKSpOcisoTnI9ZHJbMV0tU25bMV0pKk5yO1N0PWd0KFN0LE1hdGguc3FydChMci9OcikpLEZ0PVsod25bMF0rYnJbMF0pLzIsKHduWzFdK2JyWzFdKS8yXSxXdD1bKFNuWzBdK2RyWzBdKS8yLChTblsxXStkclsxXSkvMl19'@;
put 'ZWxzZXtpZighVm4udG91Y2gwKXJldHVybjtGdD1Wbi50b3VjaDBbMF0sV3Q9Vm4udG91Y2gwWzFdfVZuLnpvb20oInRvdWNoIixhKGp0KFN0LEZ0LFd0KSxWbi5leHRlbnQsbSkpfX1mdW5jdGlvbiBBcihFbiwuLi5Ucil7aWYodGhpcy5fX3pvb21pbmcpe3ZhciBZcixTdCxWbj15bih0aGlz'@;
put 'LFRyKS5ldmVudChFbiksY3I9RW4uY2hhbmdlZFRvdWNoZXMsQ3I9Y3IubGVuZ3RoO2Zvcih1UShFbiksYmUmJmNsZWFyVGltZW91dChiZSksYmU9c2V0VGltZW91dChmdW5jdGlvbigpe2JlPW51bGx9LHhlKSxZcj0wO1lyPENyOysrWXIpU3Q9Y3JbWXJdLFZuLnRvdWNoMCYmVm4udG91Y2gw'@;
put 'WzJdPT09U3QuaWRlbnRpZmllcj9kZWxldGUgVm4udG91Y2gwOlZuLnRvdWNoMSYmVm4udG91Y2gxWzJdPT09U3QuaWRlbnRpZmllciYmZGVsZXRlIFZuLnRvdWNoMTtpZihWbi50b3VjaDEmJiFWbi50b3VjaDAmJihWbi50b3VjaDA9Vm4udG91Y2gxLGRlbGV0ZSBWbi50b3VjaDEpLFZuLnRv'@;
put 'dWNoMClWbi50b3VjaDBbMV09dGhpcy5fX3pvb20uaW52ZXJ0KFZuLnRvdWNoMFswXSk7ZWxzZSBpZihWbi5lbmQoKSwyPT09Vm4udGFwcyYmKFN0PU82KFN0LHRoaXMpLE1hdGguaHlwb3QocGVbMF0tU3RbMF0scGVbMV0tU3RbMV0pPGx0KSl7dmFyIEZ0PU9hKHRoaXMpLm9uKCJkYmxjbGlj'@;
put 'ay56b29tIik7RnQmJkZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fXJldHVybiBkdC50cmFuc2Zvcm09ZnVuY3Rpb24oRW4sVHIsVm4sY3Ipe3ZhciBDcj1Fbi5zZWxlY3Rpb24/RW4uc2VsZWN0aW9uKCk6RW47Q3IucHJvcGVydHkoIl9fem9vbSIsVDhlKSxFbiE9PUNyP1h0KEVuLFRyLFZu'@;
put 'LGNyKTpDci5pbnRlcnJ1cHQoKS5lYWNoKGZ1bmN0aW9uKCl7eW4odGhpcyxhcmd1bWVudHMpLmV2ZW50KGNyKS5zdGFydCgpLnpvb20obnVsbCwiZnVuY3Rpb24iPT10eXBlb2YgVHI/VHIuYXBwbHkodGhpcyxhcmd1bWVudHMpOlRyKS5lbmQoKX0pfSxkdC5zY2FsZUJ5PWZ1bmN0aW9uKEVu'@;
put 'LFRyLFZuLGNyKXtkdC5zY2FsZVRvKEVuLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX196b29tLmsqKCJmdW5jdGlvbiI9PXR5cGVvZiBUcj9Uci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6VHIpfSxWbixjcil9LGR0LnNjYWxlVG89ZnVuY3Rpb24oRW4sVHIsVm4sY3Ipe2R0LnRyYW5zZm9ybShF'@;
put 'bixmdW5jdGlvbigpe3ZhciBDcj1jLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxZcj10aGlzLl9fem9vbSxTdD1udWxsPT1Wbj9ybihDcik6ImZ1bmN0aW9uIj09dHlwZW9mIFZuP1ZuLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpWbixGdD1Zci5pbnZlcnQoU3QpLFd0PSJmdW5jdGlvbiI9PXR5cGVv'@;
put 'ZiBUcj9Uci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6VHI7cmV0dXJuIGEoanQoZ3QoWXIsV3QpLFN0LEZ0KSxDcixtKX0sVm4sY3IpfSxkdC50cmFuc2xhdGVCeT1mdW5jdGlvbihFbixUcixWbixjcil7ZHQudHJhbnNmb3JtKEVuLGZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcy5fX3pvb20udHJh'@;
put 'bnNsYXRlKCJmdW5jdGlvbiI9PXR5cGVvZiBUcj9Uci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6VHIsImZ1bmN0aW9uIj09dHlwZW9mIFZuP1ZuLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpWbiksYy5hcHBseSh0aGlzLGFyZ3VtZW50cyksbSl9LG51bGwsY3IpfSxkdC50cmFuc2xhdGVUbz1mdW5j'@;
put 'dGlvbihFbixUcixWbixjcixDcil7ZHQudHJhbnNmb3JtKEVuLGZ1bmN0aW9uKCl7dmFyIFlyPWMuYXBwbHkodGhpcyxhcmd1bWVudHMpLFN0PXRoaXMuX196b29tLEZ0PW51bGw9PWNyP3JuKFlyKToiZnVuY3Rpb24iPT10eXBlb2YgY3I/Y3IuYXBwbHkodGhpcyxhcmd1bWVudHMpOmNyO3Jl'@;
put 'dHVybiBhKGdGLnRyYW5zbGF0ZShGdFswXSxGdFsxXSkuc2NhbGUoU3QuaykudHJhbnNsYXRlKCJmdW5jdGlvbiI9PXR5cGVvZiBUcj8tVHIuYXBwbHkodGhpcyxhcmd1bWVudHMpOi1UciwiZnVuY3Rpb24iPT10eXBlb2YgVm4/LVZuLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotVm4pLFlyLG0p'@;
put 'fSxjcixDcil9LFFuLnByb3RvdHlwZT17ZXZlbnQ6ZnVuY3Rpb24oRW4pe3JldHVybiBFbiYmKHRoaXMuc291cmNlRXZlbnQ9RW4pLHRoaXN9LHN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIDE9PSsrdGhpcy5hY3RpdmUmJih0aGlzLnRoYXQuX196b29taW5nPXRoaXMsdGhpcy5lbWl0KCJzdGFy'@;
put 'dCIpKSx0aGlzfSx6b29tOmZ1bmN0aW9uKEVuLFRyKXtyZXR1cm4gdGhpcy5tb3VzZSYmIm1vdXNlIiE9PUVuJiYodGhpcy5tb3VzZVsxXT1Uci5pbnZlcnQodGhpcy5tb3VzZVswXSkpLHRoaXMudG91Y2gwJiYidG91Y2giIT09RW4mJih0aGlzLnRvdWNoMFsxXT1Uci5pbnZlcnQodGhpcy50'@;
put 'b3VjaDBbMF0pKSx0aGlzLnRvdWNoMSYmInRvdWNoIiE9PUVuJiYodGhpcy50b3VjaDFbMV09VHIuaW52ZXJ0KHRoaXMudG91Y2gxWzBdKSksdGhpcy50aGF0Ll9fem9vbT1Ucix0aGlzLmVtaXQoInpvb20iKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gMD09LS10aGlzLmFjdGl2ZSYm'@;
put 'KGRlbGV0ZSB0aGlzLnRoYXQuX196b29taW5nLHRoaXMuZW1pdCgiZW5kIikpLHRoaXN9LGVtaXQ6ZnVuY3Rpb24oRW4pe3ZhciBUcj1PYSh0aGlzLnRoYXQpLmRhdHVtKCk7WC5jYWxsKEVuLHRoaXMudGhhdCxuZXcgWEl0KEVuLHtzb3VyY2VFdmVudDp0aGlzLnNvdXJjZUV2ZW50LHRhcmdl'@;
put 'dDpkdCx0eXBlOkVuLHRyYW5zZm9ybTp0aGlzLnRoYXQuX196b29tLGRpc3BhdGNoOlh9KSxUcil9fSxkdC53aGVlbERlbHRhPWZ1bmN0aW9uKEVuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0iZnVuY3Rpb24iPT10eXBlb2YgRW4/RW46bUYoK0VuKSxkdCk6Zn0sZHQuZmlsdGVyPWZ1'@;
put 'bmN0aW9uKEVuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0iZnVuY3Rpb24iPT10eXBlb2YgRW4/RW46bUYoISFFbiksZHQpOmx9LGR0LnRvdWNoYWJsZT1mdW5jdGlvbihFbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9ImZ1bmN0aW9uIj09dHlwZW9mIEVuP0VuOm1GKCEhRW4p'@;
put 'LGR0KTpkfSxkdC5leHRlbnQ9ZnVuY3Rpb24oRW4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSJmdW5jdGlvbiI9PXR5cGVvZiBFbj9FbjptRihbWytFblswXVswXSwrRW5bMF1bMV1dLFsrRW5bMV1bMF0sK0VuWzFdWzFdXV0pLGR0KTpjfSxkdC5zY2FsZUV4dGVudD1mdW5jdGlvbihF'@;
put 'bil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGhbMF09K0VuWzBdLGhbMV09K0VuWzFdLGR0KTpbaFswXSxoWzFdXX0sZHQudHJhbnNsYXRlRXh0ZW50PWZ1bmN0aW9uKEVuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obVswXVswXT0rRW5bMF1bMF0sbVsxXVswXT0rRW5bMV1bMF0sbVsw'@;
put 'XVsxXT0rRW5bMF1bMV0sbVsxXVsxXT0rRW5bMV1bMV0sZHQpOltbbVswXVswXSxtWzBdWzFdXSxbbVsxXVswXSxtWzFdWzFdXV19LGR0LmNvbnN0cmFpbj1mdW5jdGlvbihFbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9RW4sZHQpOmF9LGR0LmR1cmF0aW9uPWZ1bmN0aW9uKEVuKXty'@;
put 'ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz0rRW4sZHQpOl99LGR0LmludGVycG9sYXRlPWZ1bmN0aW9uKEVuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTz1FbixkdCk6T30sZHQub249ZnVuY3Rpb24oKXt2YXIgRW49WC5vbi5hcHBseShYLGFyZ3VtZW50cyk7cmV0dXJuIEVuPT09WD9k'@;
put 'dDpFbn0sZHQuY2xpY2tEaXN0YW5jZT1mdW5jdGlvbihFbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFplPShFbj0rRW4pKkVuLGR0KTpNYXRoLnNxcnQoWmUpfSxkdC50YXBEaXN0YW5jZT1mdW5jdGlvbihFbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGx0PStFbixkdCk6bHR9LGR0'@;
put 'fSgpLnNjYWxlRXh0ZW50KHRoaXMuX29wdGlvbnMuem9vbVNjYWxlRXh0ZW50KS50cmFuc2xhdGVFeHRlbnQodGhpcy5fb3B0aW9ucy56b29tVHJhbnNsYXRlRXh0ZW50KS5pbnRlcnBvbGF0ZSh5Rikub24oInpvb20iLGZ1bmN0aW9uIGMobSl7T2EoZi5ub2RlKCkucXVlcnlTZWxlY3Rvcigi'@;
put 'ZyIpKS5hdHRyKCJ0cmFuc2Zvcm0iLG0udHJhbnNmb3JtKSxsLl9kaXNwYXRjaC5jYWxsKCJ6b29tIixsKX0pO3RoaXMuX3pvb21CZWhhdmlvcj1kO3ZhciBoPU9hKGYubm9kZSgpLnF1ZXJ5U2VsZWN0b3IoImciKSk7cmV0dXJuIGYuY2FsbChkKSx0aGlzLl9hY3RpdmV8fHBRLmNhbGwodGhp'@;
put 'cyxoKSx0aGlzLl9vcmlnaW5hbFRyYW5zZm9ybT12RihmLm5vZGUoKSksdGhpc31mdW5jdGlvbiBoUShsKXt2YXIgYz10aGlzLl90cmFuc2xhdGlvbixhPXRoaXMuX3NjYWxlLGY9bC5kYXR1bSgpLnRyYW5zbGF0aW9uLGQ9bC5kYXR1bSgpLnNjYWxlLGg9dkYodGhpcy5fem9vbVNlbGVjdGlv'@;
put 'bi5ub2RlKCkpO3JldHVybiBjJiYoaD0oaD1oLnNjYWxlKDEvYSkpLnRyYW5zbGF0ZSgtYy54LC1jLnkpKSwoaD1oLnRyYW5zbGF0ZShmLngsZi55KSkuc2NhbGUoZCl9ZnVuY3Rpb24gcFEobCl7dGhpcy5fem9vbUJlaGF2aW9yLnRyYW5zZm9ybSh0aGlzLl96b29tU2VsZWN0aW9uLGhRLmNh'@;
put 'bGwodGhpcyxsKSksdGhpcy5fdHJhbnNsYXRpb249bC5kYXR1bSgpLnRyYW5zbGF0aW9uLHRoaXMuX3NjYWxlPWwuZGF0dW0oKS5zY2FsZSx0aGlzLl9vcmlnaW5hbFRyYW5zZm9ybT1nRi50cmFuc2xhdGUobC5kYXR1bSgpLnRyYW5zbGF0aW9uLngsbC5kYXR1bSgpLnRyYW5zbGF0aW9uLnkp'@;
put 'LnNjYWxlKGwuZGF0dW0oKS5zY2FsZSl9ZnVuY3Rpb24gZ1J0KGwsYyl7cmV0dXJuIGZ1bmN0aW9uKCl7Y29uc3QgYT1sLm1hcChmdW5jdGlvbihmKXtyZXR1cm4geUYoW2ZbMF1bMF0sZlswXVsxXV0sW2ZbMV1bMF0sZlsxXVsxXV0pfSk7cmV0dXJuIGZ1bmN0aW9uKGYpe3JldHVybiBmPDE/'@;
put 'Ik0iK2EubWFwKGZ1bmN0aW9uKGQpe3JldHVybiBkKGYpfSkuam9pbigiTCIpOmN9fX1mdW5jdGlvbiBMOGUobCl7cmV0dXJuImVkZ2UiPT1sLmF0dHJpYnV0ZXMuY2xhc3N8fCJhIj09bC50YWcmJiJnIj09bC5wYXJlbnQudGFnJiYiZWRnZSI9PWwucGFyZW50LnBhcmVudC5hdHRyaWJ1dGVz'@;
put 'LmNsYXNzfWZ1bmN0aW9uIFA4ZShsKXtyZXR1cm4gbC5wYXJlbnQmJkw4ZShsLnBhcmVudCl9ZnVuY3Rpb24gRjhlKGwpe3ZhciBjPXRoaXMuX3RyYW5zaXRpb24sYT10aGlzLl9vcHRpb25zLmZhZGUmJm51bGwhPWMsZj10aGlzLl9vcHRpb25zLnR3ZWVuUGF0aHMsZD10aGlzLl9vcHRpb25z'@;
put 'LnR3ZWVuU2hhcGVzLGg9dGhpcy5fb3B0aW9ucy5jb252ZXJ0RXF1YWxTaWRlZFBvbHlnb25zLG09dGhpcy5fb3B0aW9ucy5ncm93RW50ZXJpbmdFZGdlcyYmbnVsbCE9YyxfPXRoaXMuX2F0dHJpYnV0ZXIsTz10aGlzO3ZhciBwZT10aGlzLl9zZWxlY3Rpb247aWYobnVsbCE9Yyl7dmFyIGJl'@;
put 'PXRoaXMuX2pvYnM7aWYoTy5fYWN0aXZlKXJldHVybiBiZS5wdXNoKG51bGwpLHRoaXM7cGUudHJhbnNpdGlvbihjKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMCkub24oImVuZCIsZnVuY3Rpb24oKXtPLl9hY3RpdmU9ITEsMCE9YmUubGVuZ3RoJiYoYmUuc2hpZnQoKSxPLnJlbmRlcigpKX0p'@;
put 'LHRoaXMuX2FjdGl2ZT0hMH1udWxsIT1jJiZwZS50cmFuc2l0aW9uKGMpLm9uKCJzdGFydCIsZnVuY3Rpb24oKXtPLl9kaXNwYXRjaC5jYWxsKCJ0cmFuc2l0aW9uU3RhcnQiLE8pfSkub24oImVuZCIsZnVuY3Rpb24oKXtPLl9kaXNwYXRjaC5jYWxsKCJ0cmFuc2l0aW9uRW5kIixPKX0pLnRy'@;
put 'YW5zaXRpb24oKS5kdXJhdGlvbigwKS5vbigic3RhcnQiLGZ1bmN0aW9uKCl7Ty5fZGlzcGF0Y2guY2FsbCgicmVzdG9yZUVuZCIsTyksTy5fZGlzcGF0Y2guY2FsbCgiZW5kIixPKSxsJiZsLmNhbGwoTyl9KTt2YXIgeGU9dGhpcy5fZGF0YSxWZT1wZS5zZWxlY3RBbGwoInN2ZyIpLmRhdGEo'@;
put 'W3hlXSxmdW5jdGlvbihaZSl7cmV0dXJuIFplLmtleX0pO3JldHVybiBWZT1WZS5lbnRlcigpLmFwcGVuZCgic3ZnIikubWVyZ2UoVmUpLGZ1bmN0aW9uIGFlKFplKXt2YXIgbHQ9T2EodGhpcyk7aWYoInN2ZyI9PVplLnRhZyl7dmFyIGR0PU8uX29wdGlvbnM7aWYobnVsbCE9ZHQud2lkdGh8'@;
put 'fG51bGwhPWR0LmhlaWdodCl7dmFyIGd0PWR0LndpZHRoLGp0PWR0LmhlaWdodDtudWxsPT1ndD9ndD00KlplLmF0dHJpYnV0ZXMud2lkdGgucmVwbGFjZSgicHQiLCIiKS8zOihsdC5hdHRyKCJ3aWR0aCIsZ3QpLFplLmF0dHJpYnV0ZXMud2lkdGg9Z3QpLG51bGw9PWp0P2p0PTQqWmUuYXR0'@;
put 'cmlidXRlcy5oZWlnaHQucmVwbGFjZSgicHQiLCIiKS8zOihsdC5hdHRyKCJoZWlnaHQiLGp0KSxaZS5hdHRyaWJ1dGVzLmhlaWdodD1qdCksZHQuZml0fHwobHQuYXR0cigidmlld0JveCIsYDAgMCAkezMqZ3QvNC9kdC5zY2FsZX0gJHszKmp0LzQvZHQuc2NhbGV9YCksWmUuYXR0cmlidXRl'@;
put 'cy52aWV3Qm94PWAwIDAgJHszKmd0LzQvZHQuc2NhbGV9ICR7MypqdC80L2R0LnNjYWxlfWApfTEhPWR0LnNjYWxlJiYoZHQuZml0fHxudWxsPT1kdC53aWR0aCYmbnVsbD09ZHQuaGVpZ2h0KSYmKGd0PVplLmF0dHJpYnV0ZXMudmlld0JveC5zcGxpdCgiICIpWzJdLGp0PVplLmF0dHJpYnV0'@;
put 'ZXMudmlld0JveC5zcGxpdCgiICIpWzNdLGx0LmF0dHIoInZpZXdCb3giLGAwIDAgJHtndC9kdC5zY2FsZX0gJHtqdC9kdC5zY2FsZX1gKSxaZS5hdHRyaWJ1dGVzLnZpZXdCb3g9YDAgMCAke2d0L2R0LnNjYWxlfSAke2p0L2R0LnNjYWxlfWApfV8mJmx0LmVhY2goXyk7dmFyIHJuPVplLnRh'@;
put 'ZyxYdD1aZS5hdHRyaWJ1dGVzLHluPWx0Lm5vZGUoKS5hdHRyaWJ1dGVzO2lmKHluKWZvcih2YXIgUW49MDtRbjx5bi5sZW5ndGg7UW4rKyl7dmFyIE9yPXluW1FuXSxWcj1Pci5uYW1lO2lmKCJ4bWxucyIhPVZyLnNwbGl0KCI6IilbMF0mJk9yLm5hbWVzcGFjZVVSSSl7dmFyIFpyPU9yLm5h'@;
put 'bWVzcGFjZVVSSS5zcGxpdCgiLyIpO1ZyPVpyW1pyLmxlbmd0aC0xXSsiOiIrVnJ9VnIgaW4gWHR8fChYdFtWcl09bnVsbCl9dmFyIHNpPSExLEFyPSExO2lmKGQmJmMpe2lmKCgicG9seWdvbiI9PXRoaXMubm9kZU5hbWV8fCJlbGxpcHNlIj09dGhpcy5ub2RlTmFtZSkmJlplLmFsdGVybmF0'@;
put 'aXZlT2xkJiYoQXI9ITApLCgicG9seWdvbiI9PXJufHwiZWxsaXBzZSI9PXJuKSYmWmUuYWx0ZXJuYXRpdmVOZXcmJihzaT0hMCksInBvbHlnb24iPT10aGlzLm5vZGVOYW1lJiYicG9seWdvbiI9PXJuJiZaZS5hbHRlcm5hdGl2ZU9sZCl7dmFyIEVuPU84ZShsdCk7aWYoIWgpe3ZhciBWbj1F'@;
put 'bi5hdHRyaWJ1dGVzLnBvaW50cy5zcGxpdCgiICIpLmxlbmd0aDsoY3I9WmUuYXR0cmlidXRlcy5wb2ludHMpLnNwbGl0KCIgIikubGVuZ3RoPT1WbiYmKHNpPSExLEFyPSExKX19aWYoQXIpe3ZhciBTdD1EOGUobHQsWmUuYWx0ZXJuYXRpdmVPbGQpO1N0LmRhdGEoW1plXSxmdW5jdGlvbigp'@;
put 'e3JldHVybiBaZS5rZXl9KSxsdD1TdH1zaSYmKHJuPSJwYXRoIixYdD1aZS5hbHRlcm5hdGl2ZU5ldy5hdHRyaWJ1dGVzKX12YXIgV3Q9bHQ7aWYoYyYmKFd0PVd0LnRyYW5zaXRpb24oYyksYSYmV3QuZmlsdGVyKGZ1bmN0aW9uKExpKXtyZXR1cm4iIyI9PUxpLnRhZ1swXT9udWxsOnRoaXN9'@;
put 'KS5zdHlsZSgib3BhY2l0eSIsMSksV3QuZmlsdGVyKGZ1bmN0aW9uKExpKXtyZXR1cm4iIyI9PUxpLnRhZ1swXT9udWxsOnRoaXN9KS5vbigiZW5kIixmdW5jdGlvbihMaSl7T2EodGhpcykuYXR0cigic3R5bGUiLExpJiZMaS5hdHRyaWJ1dGVzJiZMaS5hdHRyaWJ1dGVzLnN0eWxlfHxudWxs'@;
put 'KX0pKSxtJiYicGF0aCI9PXJuJiZaZS5vZmZzZXQpe3ZhciBTbj1aZS50b3RhbExlbmd0aDtsdC5hdHRyKCJzdHJva2UtZGFzaGFycmF5IixTbisiICIrU24pLmF0dHIoInN0cm9rZS1kYXNob2Zmc2V0IixTbikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrWmUub2Zmc2V0LngrIiwi'@;
put 'K1plLm9mZnNldC55KyIpIiksWHRbInN0cm9rZS1kYXNob2Zmc2V0Il09MCxYdC50cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDApIixXdC5hdHRyKCJzdHJva2UtZGFzaG9mZnNldCIsWHRbInN0cm9rZS1kYXNob2Zmc2V0Il0pLmF0dHIoInRyYW5zZm9ybSIsWHQudHJhbnNmb3JtKS5vbigic3Rh'@;
put 'cnQiLGZ1bmN0aW9uKCl7T2EodGhpcykuc3R5bGUoIm9wYWNpdHkiLG51bGwpfSkub24oImVuZCIsZnVuY3Rpb24oKXtPYSh0aGlzKS5hdHRyKCJzdHJva2UtZGFzaG9mZnNldCIsbnVsbCkuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsbnVsbCkuYXR0cigidHJhbnNmb3JtIixudWxsKX0pfWlm'@;
put 'KG0mJiJwb2x5Z29uIj09cm4mJlA4ZShaZSkmJlplLm9mZnNldCYmInBhdGgiPT1aZS5wYXJlbnQuY2hpbGRyZW5bM10udGFnKXt2YXIgZHI9T2EobHQubm9kZSgpLnBhcmVudE5vZGUucXVlcnlTZWxlY3RvcigicGF0aCIpKSxMcj1kci5ub2RlKCkuZ2V0UG9pbnRBdExlbmd0aCgwKSxOcj1k'@;
put 'ci5ub2RlKCkuZ2V0UG9pbnRBdExlbmd0aChaZS50b3RhbExlbmd0aCksZGk9ZHIubm9kZSgpLmdldFBvaW50QXRMZW5ndGgoWmUudG90YWxMZW5ndGgtMSkscXI9MTgwKk1hdGguYXRhbjIoTnIueS1kaS55LE5yLngtZGkueCkvTWF0aC5QSSxSaT1Mci54LU5yLngrWmUub2Zmc2V0LngsRG89'@;
put 'THIueS1Oci55K1plLm9mZnNldC55O2x0LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1JpKyIsIitEbysiKSIpLFd0LmF0dHJUd2VlbigidHJhbnNmb3JtIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihMaSl7dmFyIFphPWRyLm5vZGUoKS5nZXRQb2ludEF0TGVuZ3RoKFplLnRv'@;
put 'dGFsTGVuZ3RoKkxpKSxkcz1kci5ub2RlKCkuZ2V0UG9pbnRBdExlbmd0aChaZS50b3RhbExlbmd0aCpMaSsxKSx2bD0xODAqTWF0aC5hdGFuMihkcy55LVphLnksZHMueC1aYS54KS9NYXRoLlBJLXFyO3JldHVybiJ0cmFuc2xhdGUoIisoUmk9WmEueC1Oci54K1plLm9mZnNldC54KigxLUxp'@;
put 'KSkrIiwiKyhEbz1aYS55LU5yLnkrWmUub2Zmc2V0LnkqKDEtTGkpKSsiKSByb3RhdGUoIit2bCsiICIrTnIueCsiICIrTnIueSsiKSJ9fSkub24oInN0YXJ0IixmdW5jdGlvbigpe09hKHRoaXMpLnN0eWxlKCJvcGFjaXR5IixudWxsKX0pLm9uKCJlbmQiLGZ1bmN0aW9uKCl7T2EodGhpcyku'@;
put 'YXR0cigidHJhbnNmb3JtIixudWxsKX0pfXZhciBvYT1mJiZjJiYicGF0aCI9PXJuJiZudWxsIT1sdC5hdHRyKCJkIik7Zm9yKHZhciBrbyBvZiBPYmplY3Qua2V5cyhYdCkpe3ZhciBxaT1YdFtrb107aWYob2EmJiJkIj09a28pe3ZhciBjcjsoY3I9KFplLmFsdGVybmF0aXZlT2xkfHxaZSku'@;
put 'cG9pbnRzKSYmV3QuYXR0clR3ZWVuKCJkIixnUnQoY3IscWkpKX1lbHNle2lmKCJ0cmFuc2Zvcm0iPT1rbyYmWmUudHJhbnNsYXRpb24paWYoYyl7dmFyIHh0PVd0Lm9uKCJlbmQiKTtXdC5vbigic3RhcnQiLGZ1bmN0aW9uKCl7Ty5fem9vbUJlaGF2aW9yJiZXdC50d2VlbigiYXR0ci50cmFu'@;
put 'c2Zvcm0iLGZ1bmN0aW9uKCl7dmFyIExpPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKFphKXtMaS5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsdThlKHZGKE8uX3pvb21TZWxlY3Rpb24ubm9kZSgpKS50b1N0cmluZygpLGhRLmNhbGwoTyxsdCkudG9TdHJpbmcoKSkoWmEpKX19KX0pLm9uKCJlbmQi'@;
put 'LGZ1bmN0aW9uKCl7eHQuY2FsbCh0aGlzKSxPLl96b29tQmVoYXZpb3ImJnBRLmNhbGwoTyxsdCl9KX1lbHNlIE8uX3pvb21CZWhhdmlvciYmKHBRLmNhbGwoTyxsdCkscWk9aFEuY2FsbChPLGx0KS50b1N0cmluZygpKTtXdC5hdHRyKGtvLHFpKX19c2kmJld0Lm9uKCJlbmQiLGZ1bmN0aW9u'@;
put 'KExpLFphLGRzKXtEOGUoU3Q9T2EodGhpcyksTGkpLmRhdGEoW0xpXSxmdW5jdGlvbigpe3JldHVybiBMaS5rZXl9KX0pLFplLnRleHQmJld0LnRleHQoWmUudGV4dCksZnVuY3Rpb24gWChaZSl7dmFyIGx0PVplLnNlbGVjdEFsbChmdW5jdGlvbigpe3JldHVybiBaZS5ub2RlKCkuY2hpbGRO'@;
put 'b2Rlc30pLGR0PShsdD1sdC5kYXRhKGZ1bmN0aW9uKHJuKXtyZXR1cm4gcm4uY2hpbGRyZW59LGZ1bmN0aW9uKHJuKXtyZXR1cm4gcm4ua2V5fSkpLmVudGVyKCkuYXBwZW5kKGZ1bmN0aW9uKHJuKXt2YXIgWHQ9Y1Eocm4pO3JldHVybiIjdGV4dCI9PXJuLnRhZyYmYSYmKFh0Lm5vZGVWYWx1'@;
put 'ZT1ybi50ZXh0KSxYdH0pOyhhfHxtJiZMOGUoWmUuZGF0dW0oKSkpJiZkdC5maWx0ZXIoZnVuY3Rpb24ocm4pe3JldHVybiIjIj09cm4udGFnWzBdP251bGw6dGhpc30pLmVhY2goZnVuY3Rpb24ocm4pe3ZhciBYdD1PYSh0aGlzKTtmb3IodmFyIHluIG9mIE9iamVjdC5rZXlzKHJuLmF0dHJp'@;
put 'YnV0ZXMpKVh0LmF0dHIoeW4scm4uYXR0cmlidXRlc1t5bl0pfSkuZmlsdGVyKGZ1bmN0aW9uKHJuKXtyZXR1cm4ic3ZnIj09cm4udGFnfHwiZyI9PXJuLnRhZz9udWxsOnRoaXN9KS5zdHlsZSgib3BhY2l0eSIsMCk7dmFyIGp0PWx0LmV4aXQoKTtfJiZqdC5lYWNoKF8pLGMmJihqdD1qdC50'@;
put 'cmFuc2l0aW9uKGMpLGEmJmp0LmZpbHRlcihmdW5jdGlvbihybil7cmV0dXJuIiMiPT1ybi50YWdbMF0/bnVsbDp0aGlzfSkuc3R5bGUoIm9wYWNpdHkiLDApKSxqdD1qdC5yZW1vdmUoKSwobHQ9ZHQubWVyZ2UobHQpKS5lYWNoKGFlKX0obHQpfS5jYWxsKFZlLm5vZGUoKSx4ZSksdGhpcy5f'@;
put 'b3B0aW9ucy56b29tJiYhdGhpcy5fem9vbUJlaGF2aW9yJiZSOGUuY2FsbCh0aGlzKSxPLl9kaXNwYXRjaC5jYWxsKCJyZW5kZXJFbmQiLE8pLG51bGw9PWMmJih0aGlzLl9kaXNwYXRjaC5jYWxsKCJlbmQiLHRoaXMpLGwmJmwuY2FsbCh0aGlzKSksdGhpc312Ri5wcm90b3R5cGU9cTMucHJv'@;
put 'dG90eXBlO3ZhciBTUnQ9QXJyYXlCdWZmZXIsbHU9VWludDhBcnJheSxiRj1VaW50MTZBcnJheSxNUnQ9SW50MTZBcnJheSxfRj1JbnQzMkFycmF5LG1RPWZ1bmN0aW9uKGwsYyxhKXtpZihsdS5wcm90b3R5cGUuc2xpY2UpcmV0dXJuIGx1LnByb3RvdHlwZS5zbGljZS5jYWxsKGwsYyxhKTso'@;
put 'bnVsbD09Y3x8YzwwKSYmKGM9MCksKG51bGw9PWF8fGE+bC5sZW5ndGgpJiYoYT1sLmxlbmd0aCk7dmFyIGY9bmV3IGx1KGEtYyk7cmV0dXJuIGYuc2V0KGwuc3ViYXJyYXkoYyxhKSksZn0sbng9ZnVuY3Rpb24obCxjLGEsZil7aWYobHUucHJvdG90eXBlLmZpbGwpcmV0dXJuIGx1LnByb3Rv'@;
put 'dHlwZS5maWxsLmNhbGwobCxjLGEsZik7Zm9yKChudWxsPT1hfHxhPDApJiYoYT0wKSwobnVsbD09Znx8Zj5sLmxlbmd0aCkmJihmPWwubGVuZ3RoKTthPGY7KythKWxbYV09YztyZXR1cm4gbH0sa1J0PWZ1bmN0aW9uKGwsYyxhLGYpe2lmKGx1LnByb3RvdHlwZS5jb3B5V2l0aGluKXJldHVy'@;
put 'biBsdS5wcm90b3R5cGUuY29weVdpdGhpbi5jYWxsKGwsYyxhLGYpO2ZvcigobnVsbD09YXx8YTwwKSYmKGE9MCksKG51bGw9PWZ8fGY+bC5sZW5ndGgpJiYoZj1sLmxlbmd0aCk7YTxmOylsW2MrK109bFthKytdfSxFUnQ9WyJpbnZhbGlkIHpzdGQgZGF0YSIsIndpbmRvdyBzaXplIHRvbyBs'@;
put 'YXJnZSAoPjIwNDZNQikiLCJpbnZhbGlkIGJsb2NrIHR5cGUiLCJGU0UgYWNjdXJhY3kgdG9vIGhpZ2giLCJtYXRjaCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLCJ1bmV4cGVjdGVkIEVPRiJdLEN1PWZ1bmN0aW9uKGwsYyxhKXt2YXIgZj1uZXcgRXJyb3IoY3x8RVJ0W2xdKTtpZihmLmNvZGU9'@;
put 'bCxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSYmRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZixDdSksIWEpdGhyb3cgZjtyZXR1cm4gZn0sSDhlPWZ1bmN0aW9uKGwsYyxhKXtmb3IodmFyIGY9MCxkPTA7ZjxhOysrZilkfD1sW2MrK108PChmPDwzKTtyZXR1cm4gZH0seFJ0PWZ1bmN0aW9uKGws'@;
put 'Yyl7dmFyIGEsZD1sWzBdfGxbMV08PDh8bFsyXTw8MTY7aWYoMzEyNjU2OD09ZCYmMjUzPT1sWzNdKXt2YXIgaD1sWzRdLG09aD4+NSYxLF89aD4+MiYxLE89MyZoLFg9aD4+Njs4JmgmJkN1KDApO3ZhciBhZT02LW0scGU9Mz09Tz80Ok8sYmU9SDhlKGwsYWUscGUpLHhlPVg/MTw8WDptLFZl'@;
put 'PUg4ZShsLGFlKz1wZSx4ZSkrKDE9PVgmJjI1NiksWmU9VmU7aWYoIW0pe3ZhciBsdD0xPDwxMCsobFs1XT4+Myk7WmU9bHQrKGx0Pj4zKSooNyZsWzVdKX1aZT4yMTQ1Mzg2NDk2JiZDdSgxKTt2YXIgZHQ9bmV3IGx1KCgxPT1jP1ZlfHxaZTpjPzA6WmUpKzEyKTtyZXR1cm4gZHRbMF09MSxk'@;
put 'dFs0XT00LGR0WzhdPTgse2I6YWUreGUseTowLGw6MCxkOmJlLHc6YyYmMSE9Yz9jOmR0LnN1YmFycmF5KDEyKSxlOlplLG86bmV3IF9GKGR0LmJ1ZmZlciwwLDMpLHU6VmUsYzpfLG06TWF0aC5taW4oMTMxMDcyLFplKX19aWYoMjU0ODE4OTM9PShkPj40fGxbM108PDIwKSlyZXR1cm4gOCso'@;
put 'KChhPWwpWzRdfGFbNV08PDh8YVs2XTw8MTZ8YVs3XTw8MjQpPj4+MCk7Q3UoMCl9LEk2PWZ1bmN0aW9uKGwpe2Zvcih2YXIgYz0wOzE8PGM8PWw7KytjKTtyZXR1cm4gYy0xfSxyeD1mdW5jdGlvbihsLGMsYSl7dmFyIGY9NCsoYzw8MyksZD01KygxNSZsW2NdKTtkPmEmJkN1KDMpO2Zvcih2'@;
put 'YXIgaD0xPDxkLG09aCxfPS0xLE89LTEsWD0tMSxhZT1oLHBlPW5ldyBTUnQoNTEyKyhoPDwyKSksYmU9bmV3IE1SdChwZSwwLDI1NikseGU9bmV3IGJGKHBlLDAsMjU2KSxWZT1uZXcgYkYocGUsNTEyLGgpLFplPTUxMisoaDw8MSksbHQ9bmV3IGx1KHBlLFplLGgpLGR0PW5ldyBsdShwZSxa'@;
put 'ZStoKTtfPDI1NSYmbT4wOyl7dmFyIGd0PUk2KG0rMSksanQ9Zj4+Myxybj0oMTw8Z3QrMSktMSxYdD0obFtqdF18bFtqdCsxXTw8OHxsW2p0KzJdPDwxNik+Pig3JmYpJnJuLHluPSgxPDxndCktMSxRbj1ybi1tLTEsT3I9WHQmeW47aWYoT3I8UW4/KGYrPWd0LFh0PU9yKTooZis9Z3QrMSxY'@;
put 'dD55biYmKFh0LT1RbikpLGJlWysrX109LS1YdCwtMT09WHQ/KG0rPVh0LGx0Wy0tYWVdPV8pOm0tPVh0LCFYdClkb3t2YXIgVnI9Zj4+MztPPShsW1ZyXXxsW1ZyKzFdPDw4KT4+KDcmZikmMyxmKz0yLF8rPU99d2hpbGUoMz09Tyl9KF8+MjU1fHxtKSYmQ3UoMCk7Zm9yKHZhciBacj0wLGly'@;
put 'PShoPj4xKSsoaD4+MykrMyxzaT1oLTEsQXI9MDtBcjw9XzsrK0FyKXt2YXIgRW49YmVbQXJdO2lmKEVuPDEpeGVbQXJdPS1FbjtlbHNlIGZvcihYPTA7WDxFbjsrK1gpe2x0W1pyXT1Bcjtkb3tacj1acitpciZzaX13aGlsZShacj49YWUpfX1mb3IoWnImJkN1KDApLFg9MDtYPGg7KytYKXt2'@;
put 'YXIgVHI9eGVbbHRbWF1dKyssVm49ZHRbWF09ZC1JNihUcik7VmVbWF09KFRyPDxWbiktaH1yZXR1cm5bZis3Pj4zLHtiOmQsczpsdCxuOmR0LHQ6VmV9XX0sQVJ0PXJ4KG5ldyBsdShbODEsMTYsOTksMTQwLDQ5LDE5OCwyNCw5OSwxMiwzMywxOTYsMjQsOTksMTAyLDEwMiwxMzQsNzAsMTQ2'@;
put 'LDRdKSwwLDYpWzFdLFRSdD1yeChuZXcgbHUoWzMzLDIwLDE5NiwyNCw5OSwxNDAsMzMsMTMyLDE2LDY2LDgsMzMsMTMyLDE2LDY2LDgsMzMsNjgsNjgsNjgsNjgsNjgsNjgsNjgsNjgsMzYsOV0pLDAsNilbMV0sT1J0PXJ4KG5ldyBsdShbMzIsMTMyLDE2LDY2LDEwMiw3MCw2OCw2OCw2OCw2'@;
put 'OCwzNiw3MywyXSksMCw1KVsxXSxOOGU9ZnVuY3Rpb24obCxjKXtmb3IodmFyIGE9bC5sZW5ndGgsZj1uZXcgX0YoYSksZD0wO2Q8YTsrK2QpZltkXT1jLGMrPTE8PGxbZF07cmV0dXJuIGZ9LGdRPW5ldyBsdShuZXcgX0YoWzAsMCwwLDAsMTY4NDMwMDksNTA1Mjg3NzAsMTM0Njc4MDIwLDIw'@;
put 'MjA1MDA1NywyNjk0MjIwOTNdKS5idWZmZXIsMCwzNiksRFJ0PU44ZShnUSwwKSx2UT1uZXcgbHUobmV3IF9GKFswLDAsMCwwLDAsMCwwLDAsMTY4NDMwMDksNTA1Mjg3NzAsMTE3NzY5MjIwLDE4NTIwNzA0OCwyNTI1NzkwODQsMTZdKS5idWZmZXIsMCw1MyksSVJ0PU44ZSh2USwzKSxpeD1m'@;
put 'dW5jdGlvbihsLGMsYSl7dmFyIGY9bC5sZW5ndGgsZD1jLmxlbmd0aCxoPWxbZi0xXSxtPSgxPDxhLmIpLTEsXz0tYS5iO2h8fEN1KDApO2Zvcih2YXIgTz0wLFg9YS5iLGFlPShmPDwzKS04K0k2KGgpLVgscGU9LTE7YWU+XyYmcGU8ZDspe3ZhciBiZT1hZT4+MztjWysrcGVdPWEuc1tPPShP'@;
put 'PDxYfChsW2JlXXxsW2JlKzFdPDw4fGxbYmUrMl08PDE2KT4+KDcmYWUpKSZtXSxhZS09WD1hLm5bT119YWU9PV8mJnBlKzE9PWR8fEN1KDApfSxSUnQ9ZnVuY3Rpb24obCxjLGEpe3ZhciBmPTYsZD1jLmxlbmd0aCszPj4yLGg9ZDw8MSxtPWQraDtpeChsLnN1YmFycmF5KGYsZis9bFswXXxs'@;
put 'WzFdPDw4KSxjLnN1YmFycmF5KDAsZCksYSksaXgobC5zdWJhcnJheShmLGYrPWxbMl18bFszXTw8OCksYy5zdWJhcnJheShkLGgpLGEpLGl4KGwuc3ViYXJyYXkoZixmKz1sWzRdfGxbNV08PDgpLGMuc3ViYXJyYXkoaCxtKSxhKSxpeChsLnN1YmFycmF5KGYpLGMuc3ViYXJyYXkobSksYSl9'@;
put 'LExSdD1mdW5jdGlvbihsLGMsYSl7dmFyIGYsZD1jLmIsaD1sW2RdLG09aD4+MSYzO2MubD0xJmg7dmFyIF89aD4+M3xsW2QrMV08PDV8bFtkKzJdPDwxMyxPPShkKz0zKStfO2lmKDE9PW0pcmV0dXJuIGQ+PWwubGVuZ3RoP3ZvaWQgMDooYy5iPWQrMSxhPyhueChhLGxbZF0sYy55LGMueSs9'@;
put 'XyksYSk6bngobmV3IGx1KF8pLGxbZF0pKTtpZighKE8+bC5sZW5ndGgpKXtpZigwPT1tKXJldHVybiBjLmI9TyxhPyhhLnNldChsLnN1YmFycmF5KGQsTyksYy55KSxjLnkrPV8sYSk6bVEobCxkLE8pO2lmKDI9PW0pe3ZhciBYPWxbZF0sYWU9MyZYLHBlPVg+PjImMyxiZT1YPj40LHhlPTAs'@;
put 'VmU9MDthZTwyPzEmcGU/YmV8PWxbKytkXTw8NHwoMiZwZSYmbFsrK2RdPDwxMik6YmU9WD4+MzooVmU9cGUscGU8Mj8oYmV8PSg2MyZsWysrZF0pPDw0LHhlPWxbZF0+PjZ8bFsrK2RdPDwyKToyPT1wZT8oYmV8PWxbKytkXTw8NHwoMyZsWysrZF0pPDwxMix4ZT1sW2RdPj4yfGxbKytkXTw8'@;
put 'Nik6KGJlfD1sWysrZF08PDR8KDYzJmxbKytkXSk8PDEyLHhlPWxbZF0+PjZ8bFsrK2RdPDwyfGxbKytkXTw8MTApKSwrK2Q7dmFyIFplPWE/YS5zdWJhcnJheShjLnksYy55K2MubSk6bmV3IGx1KGMubSksbHQ9WmUubGVuZ3RoLWJlO2lmKDA9PWFlKVplLnNldChsLnN1YmFycmF5KGQsZCs9'@;
put 'YmUpLGx0KTtlbHNlIGlmKDE9PWFlKW54KFplLGxbZCsrXSxsdCk7ZWxzZXt2YXIgZHQ9Yy5oO2lmKDI9PWFlKXt2YXIgZ3Q9ZnVuY3Rpb24oa28scWkpe3ZhciB4dD0wLExpPS0xLFphPW5ldyBsdSgyOTIpLGRzPWtvW3FpXSx2bD1aYS5zdWJhcnJheSgwLDI1NiksaHM9WmEuc3ViYXJyYXko'@;
put 'MjU2LDI2OCksSHM9bmV3IGJGKFphLmJ1ZmZlciwyNjgpO2lmKGRzPDEyOCl7dmFyIGMwPXJ4KGtvLHFpKzEsNiksc3U9YzBbMV0sQjE9YzBbMF08PDMsajE9a29bcWkrPWRzXTtqMXx8Q3UoMCk7Zm9yKHZhciBJYz0wLHRjPTAsUmM9c3UuYix6MT1SYyxVMT0oKytxaTw8MyktOCtJNihqMSk7'@;
put 'ISgoVTEtPVJjKTxCMSk7KXt2YXIgWjE9VTE+PjM7aWYodmxbKytMaV09c3Uuc1tJYys9KGtvW1oxXXxrb1taMSsxXTw8OCk+Pig3JlUxKSYoMTw8UmMpLTFdLChVMS09ejEpPEIxKWJyZWFrO3RjKz0oa29bWjE9VTE+PjNdfGtvW1oxKzFdPDw4KT4+KDcmVTEpJigxPDx6MSktMSx2bFsrK0xp'@;
put 'XT1zdS5zW3RjXSxSYz1zdS5uW0ljXSxJYz1zdS50W0ljXSx6MT1zdS5uW3RjXSx0Yz1zdS50W3RjXX0rK0xpPjI1NSYmQ3UoMCl9ZWxzZXtmb3IoTGk9ZHMtMTI3O3h0PExpO3h0Kz0yKXt2YXIgR2Q9a29bKytxaV07dmxbeHRdPUdkPj40LHZsW3h0KzFdPTE1JkdkfSsrcWl9dmFyIHpmPTA7'@;
put 'Zm9yKHh0PTA7eHQ8TGk7Kyt4dCkodWw9dmxbeHRdKT4xMSYmQ3UoMCksemYrPXVsJiYxPDx1bC0xO3ZhciBoYz1JNih6ZikrMSxZMT0xPDxoYyxwcz1ZMS16Zjtmb3IocHMmcHMtMSYmQ3UoMCksdmxbTGkrK109STYocHMpKzEseHQ9MDt4dDxMaTsrK3h0KXt2YXIgdWw9dmxbeHRdOysraHNb'@;
put 'dmxbeHRdPXVsJiZoYysxLXVsXX12YXIgcTA9bmV3IGx1KFkxPDwxKSxUcz1xMC5zdWJhcnJheSgwLFkxKSxHbD1xMC5zdWJhcnJheShZMSk7Zm9yKEhzW2hjXT0wLHh0PWhjO3h0PjA7LS14dCl7dmFyIE5zPUhzW3h0XTtueChHbCx4dCxOcyxIc1t4dC0xXT1Ocytoc1t4dF0qKDE8PGhjLXh0'@;
put 'KSl9Zm9yKEhzWzBdIT1ZMSYmQ3UoMCkseHQ9MDt4dDxMaTsrK3h0KXt2YXIgbHM9dmxbeHRdO2lmKGxzKXt2YXIgU3U9SHNbbHNdO254KFRzLHh0LFN1LEhzW2xzXT1TdSsoMTw8aGMtbHMpKX19cmV0dXJuW3FpLHtuOkdsLGI6aGMsczpUc31dfShsLGQpO3hlKz1kLShkPWd0WzBdKSxjLmg9'@;
put 'ZHQ9Z3RbMV19ZWxzZSBkdHx8Q3UoMCk7KFZlP1JSdDppeCkobC5zdWJhcnJheShkLGQrPXhlKSxaZS5zdWJhcnJheShsdCksZHQpfXZhciBqdD1sW2QrK107aWYoanQpezI1NT09anQ/anQ9MzI1MTIrKGxbZCsrXXxsW2QrK108PDgpOmp0PjEyNyYmKGp0PWp0LTEyODw8OHxsW2QrK10pO3Zh'@;
put 'ciBybj1sW2QrK107MyZybiYmQ3UoMCk7Zm9yKHZhciBYdD1bVFJ0LE9SdCxBUnRdLHluPTI7eW4+LTE7LS15bil7dmFyIFFuPXJuPj4yKyh5bjw8MSkmMztpZigxPT1Rbil7dmFyIE9yPW5ldyBsdShbMCwwLGxbZCsrXV0pO1h0W3luXT17czpPci5zdWJhcnJheSgyLDMpLG46T3Iuc3ViYXJy'@;
put 'YXkoMCwxKSx0Om5ldyBiRihPci5idWZmZXIsMCwxKSxiOjB9fWVsc2UgMj09UW4/KGQ9KGY9cngobCxkLDktKDEmeW4pKSlbMF0sWHRbeW5dPWZbMV0pOjM9PVFuJiYoYy50fHxDdSgwKSxYdFt5bl09Yy50W3luXSl9dmFyIFZyPWMudD1YdCxacj1WclswXSxpcj1WclsxXSxzaT1WclsyXSxB'@;
put 'cj1sW08tMV07QXJ8fEN1KDApO3ZhciBFbj0oTzw8MyktOCtJNihBciktc2kuYixUcj1Fbj4+MyxWbj0wLGNyPShsW1RyXXxsW1RyKzFdPDw4KT4+KDcmRW4pJigxPDxzaS5iKS0xLENyPShsW1RyPShFbi09aXIuYik+PjNdfGxbVHIrMV08PDgpPj4oNyZFbikmKDE8PGlyLmIpLTEsWXI9KGxb'@;
put 'VHI9KEVuLT1aci5iKT4+M118bFtUcisxXTw8OCk+Pig3JkVuKSYoMTw8WnIuYiktMTtmb3IoKytqdDstLWp0Oyl7dmFyIFN0PXNpLnNbY3JdLEZ0PXNpLm5bY3JdLFd0PVpyLnNbWXJdLHduPVpyLm5bWXJdLFNuPWlyLnNbQ3JdLGJyPWlyLm5bQ3JdLGRyPTE8PFNuLExyPWRyKygobFtUcj0o'@;
put 'RW4tPVNuKT4+M118bFtUcisxXTw8OHxsW1RyKzJdPDwxNnxsW1RyKzNdPDwyNCk+Pj4oNyZFbikmZHItMSk7VHI9KEVuLT12UVtXdF0pPj4zO3ZhciBOcj1JUnRbV3RdKygobFtUcl18bFtUcisxXTw8OHxsW1RyKzJdPDwxNik+Pig3JkVuKSYoMTw8dlFbV3RdKS0xKTtUcj0oRW4tPWdRW1N0'@;
put 'XSk+PjM7dmFyIGRpPURSdFtTdF0rKChsW1RyXXxsW1RyKzFdPDw4fGxbVHIrMl08PDE2KT4+KDcmRW4pJigxPDxnUVtTdF0pLTEpO2lmKFRyPShFbi09RnQpPj4zLGNyPXNpLnRbY3JdKygobFtUcl18bFtUcisxXTw8OCk+Pig3JkVuKSYoMTw8RnQpLTEpLFRyPShFbi09d24pPj4zLFlyPVpy'@;
put 'LnRbWXJdKygobFtUcl18bFtUcisxXTw8OCk+Pig3JkVuKSYoMTw8d24pLTEpLFRyPShFbi09YnIpPj4zLENyPWlyLnRbQ3JdKygobFtUcl18bFtUcisxXTw8OCk+Pig3JkVuKSYoMTw8YnIpLTEpLExyPjMpYy5vWzJdPWMub1sxXSxjLm9bMV09Yy5vWzBdLGMub1swXT1Mci09MztlbHNle3Zh'@;
put 'ciBxcj1Mci0oMCE9ZGkpO3FyPyhMcj0zPT1xcj9jLm9bMF0tMTpjLm9bcXJdLHFyPjEmJihjLm9bMl09Yy5vWzFdKSxjLm9bMV09Yy5vWzBdLGMub1swXT1Mcik6THI9Yy5vWzBdfWZvcih5bj0wO3luPGRpOysreW4pWmVbVm4reW5dPVplW2x0K3luXTtsdCs9ZGk7dmFyIFJpPShWbis9ZGkp'@;
put 'LUxyO2lmKFJpPDApe3ZhciBEbz0tUmksb2E9Yy5lK1JpO2ZvcihEbz5OciYmKERvPU5yKSx5bj0wO3luPERvOysreW4pWmVbVm4reW5dPWMud1tvYSt5bl07Vm4rPURvLE5yLT1EbyxSaT0wfWZvcih5bj0wO3luPE5yOysreW4pWmVbVm4reW5dPVplW1JpK3luXTtWbis9TnJ9aWYoVm4hPWx0'@;
put 'KWZvcig7bHQ8WmUubGVuZ3RoOylaZVtWbisrXT1aZVtsdCsrXTtlbHNlIFZuPVplLmxlbmd0aDthP2MueSs9Vm46WmU9bVEoWmUsMCxWbil9ZWxzZSBpZihhKXtpZihjLnkrPWJlLGx0KWZvcih5bj0wO3luPGJlOysreW4pWmVbeW5dPVplW2x0K3luXX1lbHNlIGx0JiYoWmU9bVEoWmUsbHQp'@;
put 'KTtyZXR1cm4gYy5iPU8sWmV9Q3UoMil9fTt2YXIgSFJ0PSh0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jdXJyZW50U2NyaXB0JiZkb2N1bWVudCxmdW5jdGlvbihsKXt2YXIgYyxhLGY9dm9pZCAwIT09KGw9bHx8e30pP2w6e307Zi5yZWFkeT1uZXcgUHJvbWlzZShmdW5jdGlvbihz'@;
put 'dCx5dCl7Yz1zdCxhPXl0fSk7dmFyIGQsaD1PYmplY3QuYXNzaWduKHt9LGYpLG09Ii4vdGhpcy5wcm9ncmFtIixfPShzdCx5dCk9Pnt0aHJvdyB5dH0sTz1mLnByaW50fHxjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLFg9Zi5wcmludEVycnx8Y29uc29sZS53YXJuLmJpbmQoY29uc29sZSk7'@;
put 'T2JqZWN0LmFzc2lnbihmLGgpLGg9bnVsbCxmLnRoaXNQcm9ncmFtJiYobT1mLnRoaXNQcm9ncmFtKSxmLnF1aXQmJihfPWYucXVpdCksZi53YXNtQmluYXJ5JiYoZD1mLndhc21CaW5hcnkpO3ZhciBhZSxwZT1mLm5vRXhpdFJ1bnRpbWV8fCEwOyJvYmplY3QiIT10eXBlb2YgV2ViQXNzZW1i'@;
put 'bHkmJld0KCJubyBuYXRpdmUgd2FzbSBzdXBwb3J0IGRldGVjdGVkIik7dmFyIGJlPSExO2Z1bmN0aW9uIHhlKHN0LHl0KXtzdHx8V3QoeXQpfXZhciBWZSxaZSxsdCxkdCxndCxqdCxybixYdD10eXBlb2YgVGV4dERlY29kZXI8InUiP25ldyBUZXh0RGVjb2RlcigidXRmOCIpOnZvaWQgMDtm'@;
put 'dW5jdGlvbiB5bihzdCx5dCxMdCl7Zm9yKHZhciBhbj15dCtMdCxrbj15dDtzdFtrbl0mJiEoa24+PWFuKTspKytrbjtpZihrbi15dD4xNiYmc3QuYnVmZmVyJiZYdClyZXR1cm4gWHQuZGVjb2RlKHN0LnN1YmFycmF5KHl0LGtuKSk7Zm9yKHZhciBscj0iIjt5dDxrbjspe3ZhciB1cj1zdFt5'@;
put 'dCsrXTtpZigxMjgmdXIpe3ZhciBIcj02MyZzdFt5dCsrXTtpZigxOTIhPSgyMjQmdXIpKXt2YXIgdm89NjMmc3RbeXQrK107aWYoKHVyPTIyND09KDI0MCZ1cik/KDE1JnVyKTw8MTJ8SHI8PDZ8dm86KDcmdXIpPDwxOHxIcjw8MTJ8dm88PDZ8NjMmc3RbeXQrK10pPDY1NTM2KWxyKz1TdHJp'@;
put 'bmcuZnJvbUNoYXJDb2RlKHVyKTtlbHNle3ZhciBBbz11ci02NTUzNjtscis9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NnxBbz4+MTAsNTYzMjB8MTAyMyZBbyl9fWVsc2UgbHIrPVN0cmluZy5mcm9tQ2hhckNvZGUoKDMxJnVyKTw8NnxIcil9ZWxzZSBscis9U3RyaW5nLmZyb21DaGFyQ29k'@;
put 'ZSh1cil9cmV0dXJuIGxyfWZ1bmN0aW9uIFFuKHN0LHl0KXtyZXR1cm4gc3Q/eW4obHQsc3QseXQpOiIifWZ1bmN0aW9uIE9yKHN0LHl0LEx0LGFuKXtpZighKGFuPjApKXJldHVybiAwO2Zvcih2YXIga249THQsbHI9THQrYW4tMSx1cj0wO3VyPHN0Lmxlbmd0aDsrK3VyKXt2YXIgSHI9c3Qu'@;
put 'Y2hhckNvZGVBdCh1cik7aWYoSHI+PTU1Mjk2JiZIcjw9NTczNDMmJihIcj02NTUzNisoKDEwMjMmSHIpPDwxMCl8MTAyMyZzdC5jaGFyQ29kZUF0KCsrdXIpKSxIcjw9MTI3KXtpZihMdD49bHIpYnJlYWs7eXRbTHQrK109SHJ9ZWxzZSBpZihIcjw9MjA0Nyl7aWYoTHQrMT49bHIpYnJlYWs7'@;
put 'eXRbTHQrK109MTkyfEhyPj42LHl0W0x0KytdPTEyOHw2MyZIcn1lbHNlIGlmKEhyPD02NTUzNSl7aWYoTHQrMj49bHIpYnJlYWs7eXRbTHQrK109MjI0fEhyPj4xMix5dFtMdCsrXT0xMjh8SHI+PjYmNjMseXRbTHQrK109MTI4fDYzJkhyfWVsc2V7aWYoTHQrMz49bHIpYnJlYWs7eXRbTHQr'@;
put 'K109MjQwfEhyPj4xOCx5dFtMdCsrXT0xMjh8SHI+PjEyJjYzLHl0W0x0KytdPTEyOHxIcj4+NiY2Myx5dFtMdCsrXT0xMjh8NjMmSHJ9fXJldHVybiB5dFtMdF09MCxMdC1rbn1mdW5jdGlvbiBWcihzdCl7Zm9yKHZhciB5dD0wLEx0PTA7THQ8c3QubGVuZ3RoOysrTHQpe3ZhciBhbj1zdC5j'@;
put 'aGFyQ29kZUF0KEx0KTthbjw9MTI3P3l0Kys6YW48PTIwNDc/eXQrPTI6YW4+PTU1Mjk2JiZhbjw9NTczNDM/KHl0Kz00LCsrTHQpOnl0Kz0zfXJldHVybiB5dH1mdW5jdGlvbiBacihzdCl7VmU9c3QsZi5IRUFQOD1aZT1uZXcgSW50OEFycmF5KHN0KSxmLkhFQVAxNj1kdD1uZXcgSW50MTZB'@;
put 'cnJheShzdCksZi5IRUFQMzI9Z3Q9bmV3IEludDMyQXJyYXkoc3QpLGYuSEVBUFU4PWx0PW5ldyBVaW50OEFycmF5KHN0KSxmLkhFQVBVMTY9bmV3IFVpbnQxNkFycmF5KHN0KSxmLkhFQVBVMzI9anQ9bmV3IFVpbnQzMkFycmF5KHN0KSxmLkhFQVBGMzI9bmV3IEZsb2F0MzJBcnJheShzdCks'@;
put 'Zi5IRUFQRjY0PXJuPW5ldyBGbG9hdDY0QXJyYXkoc3QpfXZhciBpcixzaSxBcixFbixUcj1bXSxWbj1bXSxjcj1bXSxDcj0wLFlyPW51bGw7ZnVuY3Rpb24gU3Qoc3Qpe0NyKyssZi5tb25pdG9yUnVuRGVwZW5kZW5jaWVzJiZmLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMoQ3IpfWZ1bmN0aW9u'@;
put 'IEZ0KHN0KXtpZihDci0tLGYubW9uaXRvclJ1bkRlcGVuZGVuY2llcyYmZi5tb25pdG9yUnVuRGVwZW5kZW5jaWVzKENyKSwwPT1DciYmWXIpe3ZhciB5dD1ZcjtZcj1udWxsLHl0KCl9fWZ1bmN0aW9uIFd0KHN0KXtmLm9uQWJvcnQmJmYub25BYm9ydChzdCksWChzdD0iQWJvcnRlZCgiK3N0'@;
put 'KyIpIiksYmU9ITAsc3QrPSIuIEJ1aWxkIHdpdGggLXNBU1NFUlRJT05TIGZvciBtb3JlIGluZm8uIjt2YXIgeXQ9bmV3IFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvcihzdCk7dGhyb3cgYSh5dCkseXR9ZnVuY3Rpb24gd24oc3Qpe3JldHVybiBzdC5zdGFydHNXaXRoKCJkYXRhOmFwcGxpY2F0'@;
put 'aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsIil9d24oaXI9ImdyYXBodml6bGliLndhc20iKXx8KHNpPWlyLGlyPWYubG9jYXRlRmlsZT9mLmxvY2F0ZUZpbGUoc2ksIiIpOiIiK3NpKTt2YXIgZHI9ezE3NTY2NDooc3QseXQpPT57dmFyIEx0PVFuKHN0KSxhbj1Rbih5dCk7eHQuY3JlYXRlUGF0'@;
put 'aCgiLyIscXIuZGlybmFtZShMdCkpLHh0LndyaXRlRmlsZShxci5qb2luKCIvIixMdCksYW4pfX07ZnVuY3Rpb24gTHIoc3Qpe3RoaXMubmFtZT0iRXhpdFN0YXR1cyIsdGhpcy5tZXNzYWdlPSJQcm9ncmFtIHRlcm1pbmF0ZWQgd2l0aCBleGl0KCIrc3QrIikiLHRoaXMuc3RhdHVzPXN0fWZ1'@;
put 'bmN0aW9uIE5yKHN0KXtmb3IoO3N0Lmxlbmd0aD4wOylzdC5zaGlmdCgpKGYpfWZ1bmN0aW9uIGRpKHN0KXt0aGlzLmV4Y1B0cj1zdCx0aGlzLnB0cj1zdC0yNCx0aGlzLnNldF90eXBlPWZ1bmN0aW9uKHl0KXtqdFt0aGlzLnB0cis0Pj4yXT15dH0sdGhpcy5nZXRfdHlwZT1mdW5jdGlvbigp'@;
put 'e3JldHVybiBqdFt0aGlzLnB0cis0Pj4yXX0sdGhpcy5zZXRfZGVzdHJ1Y3Rvcj1mdW5jdGlvbih5dCl7anRbdGhpcy5wdHIrOD4+Ml09eXR9LHRoaXMuZ2V0X2Rlc3RydWN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4ganRbdGhpcy5wdHIrOD4+Ml19LHRoaXMuc2V0X3JlZmNvdW50PWZ1bmN0aW9u'@;
put 'KHl0KXtndFt0aGlzLnB0cj4+Ml09eXR9LHRoaXMuc2V0X2NhdWdodD1mdW5jdGlvbih5dCl7WmVbdGhpcy5wdHIrMTI+PjBdPXl0PXl0PzE6MH0sdGhpcy5nZXRfY2F1Z2h0PWZ1bmN0aW9uKCl7cmV0dXJuIDAhPVplW3RoaXMucHRyKzEyPj4wXX0sdGhpcy5zZXRfcmV0aHJvd249ZnVuY3Rp'@;
put 'b24oeXQpe1plW3RoaXMucHRyKzEzPj4wXT15dD15dD8xOjB9LHRoaXMuZ2V0X3JldGhyb3duPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPVplW3RoaXMucHRyKzEzPj4wXX0sdGhpcy5pbml0PWZ1bmN0aW9uKHl0LEx0KXt0aGlzLnNldF9hZGp1c3RlZF9wdHIoMCksdGhpcy5zZXRfdHlwZSh5dCks'@;
put 'dGhpcy5zZXRfZGVzdHJ1Y3RvcihMdCksdGhpcy5zZXRfcmVmY291bnQoMCksdGhpcy5zZXRfY2F1Z2h0KCExKSx0aGlzLnNldF9yZXRocm93bighMSl9LHRoaXMuYWRkX3JlZj1mdW5jdGlvbigpe2d0W3RoaXMucHRyPj4yXT1ndFt0aGlzLnB0cj4+Ml0rMX0sdGhpcy5yZWxlYXNlX3JlZj1m'@;
put 'dW5jdGlvbigpe3ZhciB5dD1ndFt0aGlzLnB0cj4+Ml07cmV0dXJuIGd0W3RoaXMucHRyPj4yXT15dC0xLDE9PT15dH0sdGhpcy5zZXRfYWRqdXN0ZWRfcHRyPWZ1bmN0aW9uKHl0KXtqdFt0aGlzLnB0cisxNj4+Ml09eXR9LHRoaXMuZ2V0X2FkanVzdGVkX3B0cj1mdW5jdGlvbigpe3JldHVy'@;
put 'biBqdFt0aGlzLnB0cisxNj4+Ml19LHRoaXMuZ2V0X2V4Y2VwdGlvbl9wdHI9ZnVuY3Rpb24oKXtpZihscyh0aGlzLmdldF90eXBlKCkpKXJldHVybiBqdFt0aGlzLmV4Y1B0cj4+Ml07dmFyIHl0PXRoaXMuZ2V0X2FkanVzdGVkX3B0cigpO3JldHVybiAwIT09eXQ/eXQ6dGhpcy5leGNQdHJ9'@;
put 'fXZhciBxcj17aXNBYnM6c3Q9PiIvIj09PXN0LmNoYXJBdCgwKSxzcGxpdFBhdGg6c3Q9Pi9eKFwvP3wpKFtcc1xTXSo/KSgoPzpcLnsxLDJ9fFteXC9dKz98KShcLlteLlwvXSp8KSkoPzpbXC9dKikkLy5leGVjKHN0KS5zbGljZSgxKSxub3JtYWxpemVBcnJheTooc3QseXQpPT57Zm9yKHZh'@;
put 'ciBMdD0wLGFuPXN0Lmxlbmd0aC0xO2FuPj0wO2FuLS0pe3ZhciBrbj1zdFthbl07Ii4iPT09a24/c3Quc3BsaWNlKGFuLDEpOiIuLiI9PT1rbj8oc3Quc3BsaWNlKGFuLDEpLEx0KyspOkx0JiYoc3Quc3BsaWNlKGFuLDEpLEx0LS0pfWlmKHl0KWZvcig7THQ7THQtLSlzdC51bnNoaWZ0KCIu'@;
put 'LiIpO3JldHVybiBzdH0sbm9ybWFsaXplOnN0PT57dmFyIHl0PXFyLmlzQWJzKHN0KSxMdD0iLyI9PT1zdC5zdWJzdHIoLTEpO3JldHVybihzdD1xci5ub3JtYWxpemVBcnJheShzdC5zcGxpdCgiLyIpLmZpbHRlcihhbj0+ISFhbiksIXl0KS5qb2luKCIvIikpfHx5dHx8KHN0PSIuIiksc3Qm'@;
put 'Jkx0JiYoc3QrPSIvIiksKHl0PyIvIjoiIikrc3R9LGRpcm5hbWU6c3Q9Pnt2YXIgeXQ9cXIuc3BsaXRQYXRoKHN0KSxMdD15dFswXSxhbj15dFsxXTtyZXR1cm4gTHR8fGFuPyhhbiYmKGFuPWFuLnN1YnN0cigwLGFuLmxlbmd0aC0xKSksTHQrYW4pOiIuIn0sYmFzZW5hbWU6c3Q9PntpZigi'@;
put 'LyI9PT1zdClyZXR1cm4iLyI7dmFyIHl0PShzdD0oc3Q9cXIubm9ybWFsaXplKHN0KSkucmVwbGFjZSgvXC8kLywiIikpLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuLTE9PT15dD9zdDpzdC5zdWJzdHIoeXQrMSl9LGpvaW46ZnVuY3Rpb24oKXt2YXIgc3Q9QXJyYXkucHJvdG90eXBlLnNsaWNl'@;
put 'LmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gcXIubm9ybWFsaXplKHN0LmpvaW4oIi8iKSl9LGpvaW4yOihzdCx5dCk9PnFyLm5vcm1hbGl6ZShzdCsiLyIreXQpfSxSaT17cmVzb2x2ZTpmdW5jdGlvbigpe2Zvcih2YXIgc3Q9IiIseXQ9ITEsTHQ9YXJndW1lbnRzLmxlbmd0aC0xO0x0Pj0tMSYm'@;
put 'IXl0O0x0LS0pe3ZhciBhbj1MdD49MD9hcmd1bWVudHNbTHRdOnh0LmN3ZCgpO2lmKCJzdHJpbmciIT10eXBlb2YgYW4pdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRvIHBhdGgucmVzb2x2ZSBtdXN0IGJlIHN0cmluZ3MiKTtpZighYW4pcmV0dXJuIiI7c3Q9YW4rIi8iK3N0LHl0'@;
put 'PXFyLmlzQWJzKGFuKX1yZXR1cm4oeXQ/Ii8iOiIiKSsoc3Q9cXIubm9ybWFsaXplQXJyYXkoc3Quc3BsaXQoIi8iKS5maWx0ZXIoa249PiEha24pLCF5dCkuam9pbigiLyIpKXx8Ii4ifSxyZWxhdGl2ZTooc3QseXQpPT57ZnVuY3Rpb24gTHQoQW8pe2Zvcih2YXIgbW89MDttbzxBby5sZW5n'@;
put 'dGgmJiIiPT09QW9bbW9dO21vKyspO2Zvcih2YXIgdGE9QW8ubGVuZ3RoLTE7dGE+PTAmJiIiPT09QW9bdGFdO3RhLS0pO3JldHVybiBtbz50YT9bXTpBby5zbGljZShtbyx0YS1tbysxKX1zdD1SaS5yZXNvbHZlKHN0KS5zdWJzdHIoMSkseXQ9UmkucmVzb2x2ZSh5dCkuc3Vic3RyKDEpO2Zv'@;
put 'cih2YXIgYW49THQoc3Quc3BsaXQoIi8iKSksa249THQoeXQuc3BsaXQoIi8iKSksbHI9TWF0aC5taW4oYW4ubGVuZ3RoLGtuLmxlbmd0aCksdXI9bHIsSHI9MDtIcjxscjtIcisrKWlmKGFuW0hyXSE9PWtuW0hyXSl7dXI9SHI7YnJlYWt9dmFyIHZvPVtdO2ZvcihIcj11cjtIcjxhbi5sZW5n'@;
put 'dGg7SHIrKyl2by5wdXNoKCIuLiIpO3JldHVybih2bz12by5jb25jYXQoa24uc2xpY2UodXIpKSkuam9pbigiLyIpfX07ZnVuY3Rpb24gRG8oc3QseXQsTHQpe3ZhciBhbj1MdD4wP0x0OlZyKHN0KSsxLGtuPW5ldyBBcnJheShhbiksbHI9T3Ioc3Qsa24sMCxrbi5sZW5ndGgpO3JldHVybiB5'@;
put 'dCYmKGtuLmxlbmd0aD1sciksa259dmFyIG9hPXt0dHlzOltdLGluaXQ6ZnVuY3Rpb24oKXt9LHNodXRkb3duOmZ1bmN0aW9uKCl7fSxyZWdpc3RlcjpmdW5jdGlvbihzdCx5dCl7b2EudHR5c1tzdF09e2lucHV0OltdLG91dHB1dDpbXSxvcHM6eXR9LHh0LnJlZ2lzdGVyRGV2aWNlKHN0LG9h'@;
put 'LnN0cmVhbV9vcHMpfSxzdHJlYW1fb3BzOntvcGVuOmZ1bmN0aW9uKHN0KXt2YXIgeXQ9b2EudHR5c1tzdC5ub2RlLnJkZXZdO2lmKCF5dCl0aHJvdyBuZXcgeHQuRXJybm9FcnJvcig0Myk7c3QudHR5PXl0LHN0LnNlZWthYmxlPSExfSxjbG9zZTpmdW5jdGlvbihzdCl7c3QudHR5Lm9wcy5m'@;
put 'c3luYyhzdC50dHkpfSxmc3luYzpmdW5jdGlvbihzdCl7c3QudHR5Lm9wcy5mc3luYyhzdC50dHkpfSxyZWFkOmZ1bmN0aW9uKHN0LHl0LEx0LGFuLGtuKXtpZighc3QudHR5fHwhc3QudHR5Lm9wcy5nZXRfY2hhcil0aHJvdyBuZXcgeHQuRXJybm9FcnJvcig2MCk7Zm9yKHZhciBscj0wLHVy'@;
put 'PTA7dXI8YW47dXIrKyl7dmFyIEhyO3RyeXtIcj1zdC50dHkub3BzLmdldF9jaGFyKHN0LnR0eSl9Y2F0Y2h7dGhyb3cgbmV3IHh0LkVycm5vRXJyb3IoMjkpfWlmKHZvaWQgMD09PUhyJiYwPT09bHIpdGhyb3cgbmV3IHh0LkVycm5vRXJyb3IoNik7aWYobnVsbD09SHIpYnJlYWs7bHIrKyx5'@;
put 'dFtMdCt1cl09SHJ9cmV0dXJuIGxyJiYoc3Qubm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKSksbHJ9LHdyaXRlOmZ1bmN0aW9uKHN0LHl0LEx0LGFuLGtuKXtpZighc3QudHR5fHwhc3QudHR5Lm9wcy5wdXRfY2hhcil0aHJvdyBuZXcgeHQuRXJybm9FcnJvcig2MCk7dHJ5e2Zvcih2YXIgbHI9'@;
put 'MDtscjxhbjtscisrKXN0LnR0eS5vcHMucHV0X2NoYXIoc3QudHR5LHl0W0x0K2xyXSl9Y2F0Y2h7dGhyb3cgbmV3IHh0LkVycm5vRXJyb3IoMjkpfXJldHVybiBhbiYmKHN0Lm5vZGUudGltZXN0YW1wPURhdGUubm93KCkpLGxyfX0sZGVmYXVsdF90dHlfb3BzOntnZXRfY2hhcjpmdW5jdGlv'@;
put 'bihzdCl7aWYoIXN0LmlucHV0Lmxlbmd0aCl7dmFyIHl0PW51bGw7aWYodHlwZW9mIHdpbmRvdzwidSImJiJmdW5jdGlvbiI9PXR5cGVvZiB3aW5kb3cucHJvbXB0P251bGwhPT0oeXQ9d2luZG93LnByb21wdCgiSW5wdXQ6ICIpKSYmKHl0Kz0iXG4iKToiZnVuY3Rpb24iPT10eXBlb2YgcmVh'@;
put 'ZGxpbmUmJm51bGwhPT0oeXQ9cmVhZGxpbmUoKSkmJih5dCs9IlxuIiksIXl0KXJldHVybiBudWxsO3N0LmlucHV0PURvKHl0LCEwKX1yZXR1cm4gc3QuaW5wdXQuc2hpZnQoKX0scHV0X2NoYXI6ZnVuY3Rpb24oc3QseXQpe251bGw9PT15dHx8MTA9PT15dD8oTyh5bihzdC5vdXRwdXQsMCkp'@;
put 'LHN0Lm91dHB1dD1bXSk6MCE9eXQmJnN0Lm91dHB1dC5wdXNoKHl0KX0sZnN5bmM6ZnVuY3Rpb24oc3Qpe3N0Lm91dHB1dCYmc3Qub3V0cHV0Lmxlbmd0aD4wJiYoTyh5bihzdC5vdXRwdXQsMCkpLHN0Lm91dHB1dD1bXSl9fSxkZWZhdWx0X3R0eTFfb3BzOntwdXRfY2hhcjpmdW5jdGlvbihz'@;
put 'dCx5dCl7bnVsbD09PXl0fHwxMD09PXl0PyhYKHluKHN0Lm91dHB1dCwwKSksc3Qub3V0cHV0PVtdKTowIT15dCYmc3Qub3V0cHV0LnB1c2goeXQpfSxmc3luYzpmdW5jdGlvbihzdCl7c3Qub3V0cHV0JiZzdC5vdXRwdXQubGVuZ3RoPjAmJihYKHluKHN0Lm91dHB1dCwwKSksc3Qub3V0cHV0'@;
put 'PVtdKX19fTtmdW5jdGlvbiBrbyhzdCl7c3Q9NjU1MzYqTWF0aC5jZWlsKHN0LzY1NTM2KTt2YXIgTHQseXQ9TnMoNjU1MzYsc3QpO3JldHVybiB5dD8obHQuZmlsbCgwLEx0PXl0LEx0K3N0KSxMdCk6MH12YXIgcWk9e29wc190YWJsZTpudWxsLG1vdW50OmZ1bmN0aW9uKHN0KXtyZXR1cm4g'@;
put 'cWkuY3JlYXRlTm9kZShudWxsLCIvIiwxNjg5NSwwKX0sY3JlYXRlTm9kZTpmdW5jdGlvbihzdCx5dCxMdCxhbil7aWYoeHQuaXNCbGtkZXYoTHQpfHx4dC5pc0ZJRk8oTHQpKXRocm93IG5ldyB4dC5FcnJub0Vycm9yKDYzKTtxaS5vcHNfdGFibGV8fChxaS5vcHNfdGFibGU9e2Rpcjp7bm9k'@;
put 'ZTp7Z2V0YXR0cjpxaS5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6cWkubm9kZV9vcHMuc2V0YXR0cixsb29rdXA6cWkubm9kZV9vcHMubG9va3VwLG1rbm9kOnFpLm5vZGVfb3BzLm1rbm9kLHJlbmFtZTpxaS5ub2RlX29wcy5yZW5hbWUsdW5saW5rOnFpLm5vZGVfb3BzLnVubGluayxybWRp'@;
put 'cjpxaS5ub2RlX29wcy5ybWRpcixyZWFkZGlyOnFpLm5vZGVfb3BzLnJlYWRkaXIsc3ltbGluazpxaS5ub2RlX29wcy5zeW1saW5rfSxzdHJlYW06e2xsc2VlazpxaS5zdHJlYW1fb3BzLmxsc2Vla319LGZpbGU6e25vZGU6e2dldGF0dHI6cWkubm9kZV9vcHMuZ2V0YXR0cixzZXRhdHRyOnFp'@;
put 'Lm5vZGVfb3BzLnNldGF0dHJ9LHN0cmVhbTp7bGxzZWVrOnFpLnN0cmVhbV9vcHMubGxzZWVrLHJlYWQ6cWkuc3RyZWFtX29wcy5yZWFkLHdyaXRlOnFpLnN0cmVhbV9vcHMud3JpdGUsYWxsb2NhdGU6cWkuc3RyZWFtX29wcy5hbGxvY2F0ZSxtbWFwOnFpLnN0cmVhbV9vcHMubW1hcCxtc3lu'@;
put 'YzpxaS5zdHJlYW1fb3BzLm1zeW5jfX0sbGluazp7bm9kZTp7Z2V0YXR0cjpxaS5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6cWkubm9kZV9vcHMuc2V0YXR0cixyZWFkbGluazpxaS5ub2RlX29wcy5yZWFkbGlua30sc3RyZWFtOnt9fSxjaHJkZXY6e25vZGU6e2dldGF0dHI6cWkubm9kZV9v'@;
put 'cHMuZ2V0YXR0cixzZXRhdHRyOnFpLm5vZGVfb3BzLnNldGF0dHJ9LHN0cmVhbTp4dC5jaHJkZXZfc3RyZWFtX29wc319KTt2YXIga249eHQuY3JlYXRlTm9kZShzdCx5dCxMdCxhbik7cmV0dXJuIHh0LmlzRGlyKGtuLm1vZGUpPyhrbi5ub2RlX29wcz1xaS5vcHNfdGFibGUuZGlyLm5vZGUs'@;
put 'a24uc3RyZWFtX29wcz1xaS5vcHNfdGFibGUuZGlyLnN0cmVhbSxrbi5jb250ZW50cz17fSk6eHQuaXNGaWxlKGtuLm1vZGUpPyhrbi5ub2RlX29wcz1xaS5vcHNfdGFibGUuZmlsZS5ub2RlLGtuLnN0cmVhbV9vcHM9cWkub3BzX3RhYmxlLmZpbGUuc3RyZWFtLGtuLnVzZWRCeXRlcz0wLGtu'@;
put 'LmNvbnRlbnRzPW51bGwpOnh0LmlzTGluayhrbi5tb2RlKT8oa24ubm9kZV9vcHM9cWkub3BzX3RhYmxlLmxpbmsubm9kZSxrbi5zdHJlYW1fb3BzPXFpLm9wc190YWJsZS5saW5rLnN0cmVhbSk6eHQuaXNDaHJkZXYoa24ubW9kZSkmJihrbi5ub2RlX29wcz1xaS5vcHNfdGFibGUuY2hyZGV2'@;
put 'Lm5vZGUsa24uc3RyZWFtX29wcz1xaS5vcHNfdGFibGUuY2hyZGV2LnN0cmVhbSksa24udGltZXN0YW1wPURhdGUubm93KCksc3QmJihzdC5jb250ZW50c1t5dF09a24sc3QudGltZXN0YW1wPWtuLnRpbWVzdGFtcCksa259LGdldEZpbGVEYXRhQXNUeXBlZEFycmF5OmZ1bmN0aW9uKHN0KXty'@;
put 'ZXR1cm4gc3QuY29udGVudHM/c3QuY29udGVudHMuc3ViYXJyYXk/c3QuY29udGVudHMuc3ViYXJyYXkoMCxzdC51c2VkQnl0ZXMpOm5ldyBVaW50OEFycmF5KHN0LmNvbnRlbnRzKTpuZXcgVWludDhBcnJheSgwKX0sZXhwYW5kRmlsZVN0b3JhZ2U6ZnVuY3Rpb24oc3QseXQpe3ZhciBMdD1z'@;
put 'dC5jb250ZW50cz9zdC5jb250ZW50cy5sZW5ndGg6MDtpZighKEx0Pj15dCkpe3l0PU1hdGgubWF4KHl0LEx0KihMdDwxMDQ4NTc2PzI6MS4xMjUpPj4+MCksMCE9THQmJih5dD1NYXRoLm1heCh5dCwyNTYpKTt2YXIgYW49c3QuY29udGVudHM7c3QuY29udGVudHM9bmV3IFVpbnQ4QXJyYXko'@;
put 'eXQpLHN0LnVzZWRCeXRlcz4wJiZzdC5jb250ZW50cy5zZXQoYW4uc3ViYXJyYXkoMCxzdC51c2VkQnl0ZXMpLDApfX0scmVzaXplRmlsZVN0b3JhZ2U6ZnVuY3Rpb24oc3QseXQpe2lmKHN0LnVzZWRCeXRlcyE9eXQpaWYoMD09eXQpc3QuY29udGVudHM9bnVsbCxzdC51c2VkQnl0ZXM9MDtl'@;
put 'bHNle3ZhciBMdD1zdC5jb250ZW50cztzdC5jb250ZW50cz1uZXcgVWludDhBcnJheSh5dCksTHQmJnN0LmNvbnRlbnRzLnNldChMdC5zdWJhcnJheSgwLE1hdGgubWluKHl0LHN0LnVzZWRCeXRlcykpKSxzdC51c2VkQnl0ZXM9eXR9fSxub2RlX29wczp7Z2V0YXR0cjpmdW5jdGlvbihzdCl7'@;
put 'dmFyIHl0PXt9O3JldHVybiB5dC5kZXY9eHQuaXNDaHJkZXYoc3QubW9kZSk/c3QuaWQ6MSx5dC5pbm89c3QuaWQseXQubW9kZT1zdC5tb2RlLHl0Lm5saW5rPTEseXQudWlkPTAseXQuZ2lkPTAseXQucmRldj1zdC5yZGV2LHl0LnNpemU9eHQuaXNEaXIoc3QubW9kZSk/NDA5Njp4dC5pc0Zp'@;
put 'bGUoc3QubW9kZSk/c3QudXNlZEJ5dGVzOnh0LmlzTGluayhzdC5tb2RlKT9zdC5saW5rLmxlbmd0aDowLHl0LmF0aW1lPW5ldyBEYXRlKHN0LnRpbWVzdGFtcCkseXQubXRpbWU9bmV3IERhdGUoc3QudGltZXN0YW1wKSx5dC5jdGltZT1uZXcgRGF0ZShzdC50aW1lc3RhbXApLHl0LmJsa3Np'@;
put 'emU9NDA5Nix5dC5ibG9ja3M9TWF0aC5jZWlsKHl0LnNpemUveXQuYmxrc2l6ZSkseXR9LHNldGF0dHI6ZnVuY3Rpb24oc3QseXQpe3ZvaWQgMCE9PXl0Lm1vZGUmJihzdC5tb2RlPXl0Lm1vZGUpLHZvaWQgMCE9PXl0LnRpbWVzdGFtcCYmKHN0LnRpbWVzdGFtcD15dC50aW1lc3RhbXApLHZv'@;
put 'aWQgMCE9PXl0LnNpemUmJnFpLnJlc2l6ZUZpbGVTdG9yYWdlKHN0LHl0LnNpemUpfSxsb29rdXA6ZnVuY3Rpb24oc3QseXQpe3Rocm93IHh0LmdlbmVyaWNFcnJvcnNbNDRdfSxta25vZDpmdW5jdGlvbihzdCx5dCxMdCxhbil7cmV0dXJuIHFpLmNyZWF0ZU5vZGUoc3QseXQsTHQsYW4pfSxy'@;
put 'ZW5hbWU6ZnVuY3Rpb24oc3QseXQsTHQpe2lmKHh0LmlzRGlyKHN0Lm1vZGUpKXt2YXIgYW47dHJ5e2FuPXh0Lmxvb2t1cE5vZGUoeXQsTHQpfWNhdGNoe31pZihhbilmb3IodmFyIGtuIGluIGFuLmNvbnRlbnRzKXRocm93IG5ldyB4dC5FcnJub0Vycm9yKDU1KX1kZWxldGUgc3QucGFyZW50'@;
put 'LmNvbnRlbnRzW3N0Lm5hbWVdLHN0LnBhcmVudC50aW1lc3RhbXA9RGF0ZS5ub3coKSxzdC5uYW1lPUx0LHl0LmNvbnRlbnRzW0x0XT1zdCx5dC50aW1lc3RhbXA9c3QucGFyZW50LnRpbWVzdGFtcCxzdC5wYXJlbnQ9eXR9LHVubGluazpmdW5jdGlvbihzdCx5dCl7ZGVsZXRlIHN0LmNvbnRl'@;
put 'bnRzW3l0XSxzdC50aW1lc3RhbXA9RGF0ZS5ub3coKX0scm1kaXI6ZnVuY3Rpb24oc3QseXQpe3ZhciBMdD14dC5sb29rdXBOb2RlKHN0LHl0KTtmb3IodmFyIGFuIGluIEx0LmNvbnRlbnRzKXRocm93IG5ldyB4dC5FcnJub0Vycm9yKDU1KTtkZWxldGUgc3QuY29udGVudHNbeXRdLHN0LnRp'@;
put 'bWVzdGFtcD1EYXRlLm5vdygpfSxyZWFkZGlyOmZ1bmN0aW9uKHN0KXt2YXIgeXQ9WyIuIiwiLi4iXTtmb3IodmFyIEx0IGluIHN0LmNvbnRlbnRzKXN0LmNvbnRlbnRzLmhhc093blByb3BlcnR5KEx0KSYmeXQucHVzaChMdCk7cmV0dXJuIHl0fSxzeW1saW5rOmZ1bmN0aW9uKHN0LHl0LEx0'@;
put 'KXt2YXIgYW49cWkuY3JlYXRlTm9kZShzdCx5dCw0MTQ3MSwwKTtyZXR1cm4gYW4ubGluaz1MdCxhbn0scmVhZGxpbms6ZnVuY3Rpb24oc3Qpe2lmKCF4dC5pc0xpbmsoc3QubW9kZSkpdGhyb3cgbmV3IHh0LkVycm5vRXJyb3IoMjgpO3JldHVybiBzdC5saW5rfX0sc3RyZWFtX29wczp7cmVh'@;
put 'ZDpmdW5jdGlvbihzdCx5dCxMdCxhbixrbil7dmFyIGxyPXN0Lm5vZGUuY29udGVudHM7aWYoa24+PXN0Lm5vZGUudXNlZEJ5dGVzKXJldHVybiAwO3ZhciB1cj1NYXRoLm1pbihzdC5ub2RlLnVzZWRCeXRlcy1rbixhbik7aWYodXI+OCYmbHIuc3ViYXJyYXkpeXQuc2V0KGxyLnN1YmFycmF5'@;
put 'KGtuLGtuK3VyKSxMdCk7ZWxzZSBmb3IodmFyIEhyPTA7SHI8dXI7SHIrKyl5dFtMdCtIcl09bHJba24rSHJdO3JldHVybiB1cn0sd3JpdGU6ZnVuY3Rpb24oc3QseXQsTHQsYW4sa24sbHIpe2lmKHl0LmJ1ZmZlcj09PVplLmJ1ZmZlciYmKGxyPSExKSwhYW4pcmV0dXJuIDA7dmFyIHVyPXN0'@;
put 'Lm5vZGU7aWYodXIudGltZXN0YW1wPURhdGUubm93KCkseXQuc3ViYXJyYXkmJighdXIuY29udGVudHN8fHVyLmNvbnRlbnRzLnN1YmFycmF5KSl7aWYobHIpcmV0dXJuIHVyLmNvbnRlbnRzPXl0LnN1YmFycmF5KEx0LEx0K2FuKSx1ci51c2VkQnl0ZXM9YW4sYW47aWYoMD09PXVyLnVzZWRC'@;
put 'eXRlcyYmMD09PWtuKXJldHVybiB1ci5jb250ZW50cz15dC5zbGljZShMdCxMdCthbiksdXIudXNlZEJ5dGVzPWFuLGFuO2lmKGtuK2FuPD11ci51c2VkQnl0ZXMpcmV0dXJuIHVyLmNvbnRlbnRzLnNldCh5dC5zdWJhcnJheShMdCxMdCthbiksa24pLGFufWlmKHFpLmV4cGFuZEZpbGVTdG9y'@;
put 'YWdlKHVyLGtuK2FuKSx1ci5jb250ZW50cy5zdWJhcnJheSYmeXQuc3ViYXJyYXkpdXIuY29udGVudHMuc2V0KHl0LnN1YmFycmF5KEx0LEx0K2FuKSxrbik7ZWxzZSBmb3IodmFyIEhyPTA7SHI8YW47SHIrKyl1ci5jb250ZW50c1trbitIcl09eXRbTHQrSHJdO3JldHVybiB1ci51c2VkQnl0'@;
put 'ZXM9TWF0aC5tYXgodXIudXNlZEJ5dGVzLGtuK2FuKSxhbn0sbGxzZWVrOmZ1bmN0aW9uKHN0LHl0LEx0KXt2YXIgYW49eXQ7aWYoMT09PUx0P2FuKz1zdC5wb3NpdGlvbjoyPT09THQmJnh0LmlzRmlsZShzdC5ub2RlLm1vZGUpJiYoYW4rPXN0Lm5vZGUudXNlZEJ5dGVzKSxhbjwwKXRocm93'@;
put 'IG5ldyB4dC5FcnJub0Vycm9yKDI4KTtyZXR1cm4gYW59LGFsbG9jYXRlOmZ1bmN0aW9uKHN0LHl0LEx0KXtxaS5leHBhbmRGaWxlU3RvcmFnZShzdC5ub2RlLHl0K0x0KSxzdC5ub2RlLnVzZWRCeXRlcz1NYXRoLm1heChzdC5ub2RlLnVzZWRCeXRlcyx5dCtMdCl9LG1tYXA6ZnVuY3Rpb24o'@;
put 'c3QseXQsTHQsYW4sa24pe2lmKCF4dC5pc0ZpbGUoc3Qubm9kZS5tb2RlKSl0aHJvdyBuZXcgeHQuRXJybm9FcnJvcig0Myk7dmFyIGxyLHVyLEhyPXN0Lm5vZGUuY29udGVudHM7aWYoMiZrbnx8SHIuYnVmZmVyIT09VmUpe2lmKChMdD4wfHxMdCt5dDxIci5sZW5ndGgpJiYoSHI9SHIuc3Vi'@;
put 'YXJyYXk/SHIuc3ViYXJyYXkoTHQsTHQreXQpOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKEhyLEx0LEx0K3l0KSksdXI9ITAsIShscj1rbyh5dCkpKXRocm93IG5ldyB4dC5FcnJub0Vycm9yKDQ4KTtaZS5zZXQoSHIsbHIpfWVsc2UgdXI9ITEsbHI9SHIuYnl0ZU9mZnNldDtyZXR1cm57'@;
put 'cHRyOmxyLGFsbG9jYXRlZDp1cn19LG1zeW5jOmZ1bmN0aW9uKHN0LHl0LEx0LGFuLGtuKXtyZXR1cm4gcWkuc3RyZWFtX29wcy53cml0ZShzdCx5dCwwLGFuLEx0LCExKSwwfX19LHh0PXtyb290Om51bGwsbW91bnRzOltdLGRldmljZXM6e30sc3RyZWFtczpbXSxuZXh0SW5vZGU6MSxuYW1l'@;
put 'VGFibGU6bnVsbCxjdXJyZW50UGF0aDoiLyIsaW5pdGlhbGl6ZWQ6ITEsaWdub3JlUGVybWlzc2lvbnM6ITAsRXJybm9FcnJvcjpudWxsLGdlbmVyaWNFcnJvcnM6e30sZmlsZXN5c3RlbXM6bnVsbCxzeW5jRlNSZXF1ZXN0czowLGxvb2t1cFBhdGg6KHN0LHl0PXt9KT0+e2lmKCEoc3Q9Umku'@;
put 'cmVzb2x2ZShzdCkpKXJldHVybntwYXRoOiIiLG5vZGU6bnVsbH07aWYoKHl0PU9iamVjdC5hc3NpZ24oe2ZvbGxvd19tb3VudDohMCxyZWN1cnNlX2NvdW50OjB9LHl0KSkucmVjdXJzZV9jb3VudD44KXRocm93IG5ldyB4dC5FcnJub0Vycm9yKDMyKTtmb3IodmFyIEx0PXN0LnNwbGl0KCIv'@;
put 'IikuZmlsdGVyKEFvPT4hIUFvKSxhbj14dC5yb290LGtuPSIvIixscj0wO2xyPEx0Lmxlbmd0aDtscisrKXt2YXIgdXI9bHI9PT1MdC5sZW5ndGgtMTtpZih1ciYmeXQucGFyZW50KWJyZWFrO2lmKGFuPXh0Lmxvb2t1cE5vZGUoYW4sTHRbbHJdKSxrbj1xci5qb2luMihrbixMdFtscl0pLHh0'@;
put 'LmlzTW91bnRwb2ludChhbikmJighdXJ8fHVyJiZ5dC5mb2xsb3dfbW91bnQpJiYoYW49YW4ubW91bnRlZC5yb290KSwhdXJ8fHl0LmZvbGxvdylmb3IodmFyIEhyPTA7eHQuaXNMaW5rKGFuLm1vZGUpOyl7dmFyIHZvPXh0LnJlYWRsaW5rKGtuKTtpZihrbj1SaS5yZXNvbHZlKHFyLmRpcm5h'@;
put 'bWUoa24pLHZvKSxhbj14dC5sb29rdXBQYXRoKGtuLHtyZWN1cnNlX2NvdW50Onl0LnJlY3Vyc2VfY291bnQrMX0pLm5vZGUsSHIrKz40MCl0aHJvdyBuZXcgeHQuRXJybm9FcnJvcigzMil9fXJldHVybntwYXRoOmtuLG5vZGU6YW59fSxnZXRQYXRoOnN0PT57Zm9yKHZhciB5dDs7KXtpZih4'@;
put 'dC5pc1Jvb3Qoc3QpKXt2YXIgTHQ9c3QubW91bnQubW91bnRwb2ludDtyZXR1cm4geXQ/Ii8iIT09THRbTHQubGVuZ3RoLTFdP0x0KyIvIit5dDpMdCt5dDpMdH15dD15dD9zdC5uYW1lKyIvIit5dDpzdC5uYW1lLHN0PXN0LnBhcmVudH19LGhhc2hOYW1lOihzdCx5dCk9Pntmb3IodmFyIEx0'@;
put 'PTAsYW49MDthbjx5dC5sZW5ndGg7YW4rKylMdD0oTHQ8PDUpLUx0K3l0LmNoYXJDb2RlQXQoYW4pfDA7cmV0dXJuKHN0K0x0Pj4+MCkleHQubmFtZVRhYmxlLmxlbmd0aH0saGFzaEFkZE5vZGU6c3Q9Pnt2YXIgeXQ9eHQuaGFzaE5hbWUoc3QucGFyZW50LmlkLHN0Lm5hbWUpO3N0Lm5hbWVf'@;
put 'bmV4dD14dC5uYW1lVGFibGVbeXRdLHh0Lm5hbWVUYWJsZVt5dF09c3R9LGhhc2hSZW1vdmVOb2RlOnN0PT57dmFyIHl0PXh0Lmhhc2hOYW1lKHN0LnBhcmVudC5pZCxzdC5uYW1lKTtpZih4dC5uYW1lVGFibGVbeXRdPT09c3QpeHQubmFtZVRhYmxlW3l0XT1zdC5uYW1lX25leHQ7ZWxzZSBm'@;
put 'b3IodmFyIEx0PXh0Lm5hbWVUYWJsZVt5dF07THQ7KXtpZihMdC5uYW1lX25leHQ9PT1zdCl7THQubmFtZV9uZXh0PXN0Lm5hbWVfbmV4dDticmVha31MdD1MdC5uYW1lX25leHR9fSxsb29rdXBOb2RlOihzdCx5dCk9Pnt2YXIgTHQ9eHQubWF5TG9va3VwKHN0KTtpZihMdCl0aHJvdyBuZXcg'@;
put 'eHQuRXJybm9FcnJvcihMdCxzdCk7Zm9yKHZhciBhbj14dC5oYXNoTmFtZShzdC5pZCx5dCksa249eHQubmFtZVRhYmxlW2FuXTtrbjtrbj1rbi5uYW1lX25leHQpaWYoa24ucGFyZW50LmlkPT09c3QuaWQmJmtuLm5hbWU9PT15dClyZXR1cm4ga247cmV0dXJuIHh0Lmxvb2t1cChzdCx5dCl9'@;
put 'LGNyZWF0ZU5vZGU6KHN0LHl0LEx0LGFuKT0+e3ZhciBrbj1uZXcgeHQuRlNOb2RlKHN0LHl0LEx0LGFuKTtyZXR1cm4geHQuaGFzaEFkZE5vZGUoa24pLGtufSxkZXN0cm95Tm9kZTpzdD0+e3h0Lmhhc2hSZW1vdmVOb2RlKHN0KX0saXNSb290OnN0PT5zdD09PXN0LnBhcmVudCxpc01vdW50'@;
put 'cG9pbnQ6c3Q9PiEhc3QubW91bnRlZCxpc0ZpbGU6c3Q9PjMyNzY4PT0oNjE0NDAmc3QpLGlzRGlyOnN0PT4xNjM4ND09KDYxNDQwJnN0KSxpc0xpbms6c3Q9PjQwOTYwPT0oNjE0NDAmc3QpLGlzQ2hyZGV2OnN0PT44MTkyPT0oNjE0NDAmc3QpLGlzQmxrZGV2OnN0PT4yNDU3Nj09KDYxNDQw'@;
put 'JnN0KSxpc0ZJRk86c3Q9PjQwOTY9PSg2MTQ0MCZzdCksaXNTb2NrZXQ6c3Q9PjQ5MTUyPT0oNDkxNTImc3QpLGZsYWdNb2Rlczp7cjowLCJyKyI6Mix3OjU3NywidysiOjU3OCxhOjEwODksImErIjoxMDkwfSxtb2RlU3RyaW5nVG9GbGFnczpzdD0+e3ZhciB5dD14dC5mbGFnTW9kZXNbc3Rd'@;
put 'O2lmKHZvaWQgMD09PXl0KXRocm93IG5ldyBFcnJvcigiVW5rbm93biBmaWxlIG9wZW4gbW9kZTogIitzdCk7cmV0dXJuIHl0fSxmbGFnc1RvUGVybWlzc2lvblN0cmluZzpzdD0+e3ZhciB5dD1bInIiLCJ3IiwicnciXVszJnN0XTtyZXR1cm4gNTEyJnN0JiYoeXQrPSJ3IikseXR9LG5vZGVQ'@;
put 'ZXJtaXNzaW9uczooc3QseXQpPT54dC5pZ25vcmVQZXJtaXNzaW9uc3x8KCF5dC5pbmNsdWRlcygiciIpfHwyOTImc3QubW9kZSkmJigheXQuaW5jbHVkZXMoInciKXx8MTQ2JnN0Lm1vZGUpJiYoIXl0LmluY2x1ZGVzKCJ4Iil8fDczJnN0Lm1vZGUpPzA6MixtYXlMb29rdXA6c3Q9Pnh0Lm5v'@;
put 'ZGVQZXJtaXNzaW9ucyhzdCwieCIpfHwoc3Qubm9kZV9vcHMubG9va3VwPzA6MiksbWF5Q3JlYXRlOihzdCx5dCk9Pnt0cnl7cmV0dXJuIHh0Lmxvb2t1cE5vZGUoc3QseXQpLDIwfWNhdGNoe31yZXR1cm4geHQubm9kZVBlcm1pc3Npb25zKHN0LCJ3eCIpfSxtYXlEZWxldGU6KHN0LHl0LEx0'@;
put 'KT0+e3ZhciBhbjt0cnl7YW49eHQubG9va3VwTm9kZShzdCx5dCl9Y2F0Y2gobHIpe3JldHVybiBsci5lcnJub312YXIga249eHQubm9kZVBlcm1pc3Npb25zKHN0LCJ3eCIpO2lmKGtuKXJldHVybiBrbjtpZihMdCl7aWYoIXh0LmlzRGlyKGFuLm1vZGUpKXJldHVybiA1NDtpZih4dC5pc1Jv'@;
put 'b3QoYW4pfHx4dC5nZXRQYXRoKGFuKT09PXh0LmN3ZCgpKXJldHVybiAxMH1lbHNlIGlmKHh0LmlzRGlyKGFuLm1vZGUpKXJldHVybiAzMTtyZXR1cm4gMH0sbWF5T3Blbjooc3QseXQpPT5zdD94dC5pc0xpbmsoc3QubW9kZSk/MzI6eHQuaXNEaXIoc3QubW9kZSkmJigiciIhPT14dC5mbGFn'@;
put 'c1RvUGVybWlzc2lvblN0cmluZyh5dCl8fDUxMiZ5dCk/MzE6eHQubm9kZVBlcm1pc3Npb25zKHN0LHh0LmZsYWdzVG9QZXJtaXNzaW9uU3RyaW5nKHl0KSk6NDQsTUFYX09QRU5fRkRTOjQwOTYsbmV4dGZkOihzdD0wLHl0PXh0Lk1BWF9PUEVOX0ZEUyk9Pntmb3IodmFyIEx0PXN0O0x0PD15'@;
put 'dDtMdCsrKWlmKCF4dC5zdHJlYW1zW0x0XSlyZXR1cm4gTHQ7dGhyb3cgbmV3IHh0LkVycm5vRXJyb3IoMzMpfSxnZXRTdHJlYW06c3Q9Pnh0LnN0cmVhbXNbc3RdLGNyZWF0ZVN0cmVhbTooc3QseXQsTHQpPT57eHQuRlNTdHJlYW18fCh4dC5GU1N0cmVhbT1mdW5jdGlvbigpe3RoaXMuc2hh'@;
put 'cmVkPXt9fSx4dC5GU1N0cmVhbS5wcm90b3R5cGU9e30sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoeHQuRlNTdHJlYW0ucHJvdG90eXBlLHtvYmplY3Q6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGV9LHNldDpmdW5jdGlvbihrbil7dGhpcy5ub2RlPWtufX0saXNSZWFkOntnZXQ6'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gMSE9KDIwOTcxNTUmdGhpcy5mbGFncyl9fSxpc1dyaXRlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMCE9KDIwOTcxNTUmdGhpcy5mbGFncyl9fSxpc0FwcGVuZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDEwMjQmdGhpcy5mbGFnc319LGZsYWdzOntnZXQ6ZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gdGhpcy5zaGFyZWQuZmxhZ3N9LHNldDpmdW5jdGlvbihrbil7dGhpcy5zaGFyZWQuZmxhZ3M9a259fSxwb3NpdGlvbjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhcmVkLnBvc2l0aW9ufSxzZXQ6ZnVuY3Rpb24oa24pe3RoaXMuc2hhcmVkLnBvc2l0aW9u'@;
put 'PWtufX19KSksc3Q9T2JqZWN0LmFzc2lnbihuZXcgeHQuRlNTdHJlYW0sc3QpO3ZhciBhbj14dC5uZXh0ZmQoeXQsTHQpO3JldHVybiBzdC5mZD1hbix4dC5zdHJlYW1zW2FuXT1zdCxzdH0sY2xvc2VTdHJlYW06c3Q9Pnt4dC5zdHJlYW1zW3N0XT1udWxsfSxjaHJkZXZfc3RyZWFtX29wczp7'@;
put 'b3BlbjpzdD0+e3ZhciB5dD14dC5nZXREZXZpY2Uoc3Qubm9kZS5yZGV2KTtzdC5zdHJlYW1fb3BzPXl0LnN0cmVhbV9vcHMsc3Quc3RyZWFtX29wcy5vcGVuJiZzdC5zdHJlYW1fb3BzLm9wZW4oc3QpfSxsbHNlZWs6KCk9Pnt0aHJvdyBuZXcgeHQuRXJybm9FcnJvcig3MCl9fSxtYWpvcjpz'@;
put 'dD0+c3Q+PjgsbWlub3I6c3Q9PjI1NSZzdCxtYWtlZGV2OihzdCx5dCk9PnN0PDw4fHl0LHJlZ2lzdGVyRGV2aWNlOihzdCx5dCk9Pnt4dC5kZXZpY2VzW3N0XT17c3RyZWFtX29wczp5dH19LGdldERldmljZTpzdD0+eHQuZGV2aWNlc1tzdF0sZ2V0TW91bnRzOnN0PT57Zm9yKHZhciB5dD1b'@;
put 'XSxMdD1bc3RdO0x0Lmxlbmd0aDspe3ZhciBhbj1MdC5wb3AoKTt5dC5wdXNoKGFuKSxMdC5wdXNoLmFwcGx5KEx0LGFuLm1vdW50cyl9cmV0dXJuIHl0fSxzeW5jZnM6KHN0LHl0KT0+eyJmdW5jdGlvbiI9PXR5cGVvZiBzdCYmKHl0PXN0LHN0PSExKSx4dC5zeW5jRlNSZXF1ZXN0cysrLHh0'@;
put 'LnN5bmNGU1JlcXVlc3RzPjEmJlgoIndhcm5pbmc6ICIreHQuc3luY0ZTUmVxdWVzdHMrIiBGUy5zeW5jZnMgb3BlcmF0aW9ucyBpbiBmbGlnaHQgYXQgb25jZSwgcHJvYmFibHkganVzdCBkb2luZyBleHRyYSB3b3JrIik7dmFyIEx0PXh0LmdldE1vdW50cyh4dC5yb290Lm1vdW50KSxhbj0w'@;
put 'O2Z1bmN0aW9uIGtuKHVyKXtyZXR1cm4geHQuc3luY0ZTUmVxdWVzdHMtLSx5dCh1cil9ZnVuY3Rpb24gbHIodXIpe2lmKHVyKXJldHVybiBsci5lcnJvcmVkP3ZvaWQgMDoobHIuZXJyb3JlZD0hMCxrbih1cikpOysrYW4+PUx0Lmxlbmd0aCYma24obnVsbCl9THQuZm9yRWFjaCh1cj0+e2lm'@;
put 'KCF1ci50eXBlLnN5bmNmcylyZXR1cm4gbHIobnVsbCk7dXIudHlwZS5zeW5jZnModXIsc3QsbHIpfSl9LG1vdW50OihzdCx5dCxMdCk9Pnt2YXIgYW4sa249Ii8iPT09THQsbHI9IUx0O2lmKGtuJiZ4dC5yb290KXRocm93IG5ldyB4dC5FcnJub0Vycm9yKDEwKTtpZigha24mJiFscil7dmFy'@;
put 'IHVyPXh0Lmxvb2t1cFBhdGgoTHQse2ZvbGxvd19tb3VudDohMX0pO2lmKEx0PXVyLnBhdGgseHQuaXNNb3VudHBvaW50KGFuPXVyLm5vZGUpKXRocm93IG5ldyB4dC5FcnJub0Vycm9yKDEwKTtpZigheHQuaXNEaXIoYW4ubW9kZSkpdGhyb3cgbmV3IHh0LkVycm5vRXJyb3IoNTQpfXZhciBI'@;
put 'cj17dHlwZTpzdCxvcHRzOnl0LG1vdW50cG9pbnQ6THQsbW91bnRzOltdfSx2bz1zdC5tb3VudChIcik7cmV0dXJuIHZvLm1vdW50PUhyLEhyLnJvb3Q9dm8sa24/eHQucm9vdD12bzphbiYmKGFuLm1vdW50ZWQ9SHIsYW4ubW91bnQmJmFuLm1vdW50Lm1vdW50cy5wdXNoKEhyKSksdm99LHVu'@;
put 'bW91bnQ6c3Q9Pnt2YXIgeXQ9eHQubG9va3VwUGF0aChzdCx7Zm9sbG93X21vdW50OiExfSk7aWYoIXh0LmlzTW91bnRwb2ludCh5dC5ub2RlKSl0aHJvdyBuZXcgeHQuRXJybm9FcnJvcigyOCk7dmFyIEx0PXl0Lm5vZGUsYW49THQubW91bnRlZCxrbj14dC5nZXRNb3VudHMoYW4pO09iamVj'@;
put 'dC5rZXlzKHh0Lm5hbWVUYWJsZSkuZm9yRWFjaCh1cj0+e2Zvcih2YXIgSHI9eHQubmFtZVRhYmxlW3VyXTtIcjspe3ZhciB2bz1Ici5uYW1lX25leHQ7a24uaW5jbHVkZXMoSHIubW91bnQpJiZ4dC5kZXN0cm95Tm9kZShIciksSHI9dm99fSksTHQubW91bnRlZD1udWxsO3ZhciBscj1MdC5t'@;
put 'b3VudC5tb3VudHMuaW5kZXhPZihhbik7THQubW91bnQubW91bnRzLnNwbGljZShsciwxKX0sbG9va3VwOihzdCx5dCk9PnN0Lm5vZGVfb3BzLmxvb2t1cChzdCx5dCksbWtub2Q6KHN0LHl0LEx0KT0+e3ZhciBhbj14dC5sb29rdXBQYXRoKHN0LHtwYXJlbnQ6ITB9KS5ub2RlLGtuPXFyLmJh'@;
put 'c2VuYW1lKHN0KTtpZigha258fCIuIj09PWtufHwiLi4iPT09a24pdGhyb3cgbmV3IHh0LkVycm5vRXJyb3IoMjgpO3ZhciBscj14dC5tYXlDcmVhdGUoYW4sa24pO2lmKGxyKXRocm93IG5ldyB4dC5FcnJub0Vycm9yKGxyKTtpZighYW4ubm9kZV9vcHMubWtub2QpdGhyb3cgbmV3IHh0LkVy'@;
put 'cm5vRXJyb3IoNjMpO3JldHVybiBhbi5ub2RlX29wcy5ta25vZChhbixrbix5dCxMdCl9LGNyZWF0ZTooc3QseXQpPT4oeXQ9dm9pZCAwIT09eXQ/eXQ6NDM4LHl0Jj00MDk1LHh0Lm1rbm9kKHN0LHl0fD0zMjc2OCwwKSksbWtkaXI6KHN0LHl0KT0+KHl0PXZvaWQgMCE9PXl0P3l0OjUxMSx5'@;
put 'dCY9MTAyMyx4dC5ta25vZChzdCx5dHw9MTYzODQsMCkpLG1rZGlyVHJlZTooc3QseXQpPT57Zm9yKHZhciBMdD1zdC5zcGxpdCgiLyIpLGFuPSIiLGtuPTA7a248THQubGVuZ3RoOysra24paWYoTHRba25dKXthbis9Ii8iK0x0W2tuXTt0cnl7eHQubWtkaXIoYW4seXQpfWNhdGNoKGxyKXtp'@;
put 'ZigyMCE9bHIuZXJybm8pdGhyb3cgbHJ9fX0sbWtkZXY6KHN0LHl0LEx0KT0+KHZvaWQgMD09PUx0JiYoTHQ9eXQseXQ9NDM4KSx4dC5ta25vZChzdCx5dHw9ODE5MixMdCkpLHN5bWxpbms6KHN0LHl0KT0+e2lmKCFSaS5yZXNvbHZlKHN0KSl0aHJvdyBuZXcgeHQuRXJybm9FcnJvcig0NCk7'@;
put 'dmFyIEx0PXh0Lmxvb2t1cFBhdGgoeXQse3BhcmVudDohMH0pLm5vZGU7aWYoIUx0KXRocm93IG5ldyB4dC5FcnJub0Vycm9yKDQ0KTt2YXIgYW49cXIuYmFzZW5hbWUoeXQpLGtuPXh0Lm1heUNyZWF0ZShMdCxhbik7aWYoa24pdGhyb3cgbmV3IHh0LkVycm5vRXJyb3Ioa24pO2lmKCFMdC5u'@;
put 'b2RlX29wcy5zeW1saW5rKXRocm93IG5ldyB4dC5FcnJub0Vycm9yKDYzKTtyZXR1cm4gTHQubm9kZV9vcHMuc3ltbGluayhMdCxhbixzdCl9LHJlbmFtZTooc3QseXQpPT57dmFyIEx0LGFuLGtuPXFyLmRpcm5hbWUoc3QpLGxyPXFyLmRpcm5hbWUoeXQpLHVyPXFyLmJhc2VuYW1lKHN0KSxI'@;
put 'cj1xci5iYXNlbmFtZSh5dCk7aWYoTHQ9eHQubG9va3VwUGF0aChzdCx7cGFyZW50OiEwfSkubm9kZSxhbj14dC5sb29rdXBQYXRoKHl0LHtwYXJlbnQ6ITB9KS5ub2RlLCFMdHx8IWFuKXRocm93IG5ldyB4dC5FcnJub0Vycm9yKDQ0KTtpZihMdC5tb3VudCE9PWFuLm1vdW50KXRocm93IG5l'@;
put 'dyB4dC5FcnJub0Vycm9yKDc1KTt2YXIgdm8sQW89eHQubG9va3VwTm9kZShMdCx1ciksbW89UmkucmVsYXRpdmUoc3QsbHIpO2lmKCIuIiE9PW1vLmNoYXJBdCgwKSl0aHJvdyBuZXcgeHQuRXJybm9FcnJvcigyOCk7aWYoIi4iIT09KG1vPVJpLnJlbGF0aXZlKHl0LGtuKSkuY2hhckF0KDAp'@;
put 'KXRocm93IG5ldyB4dC5FcnJub0Vycm9yKDU1KTt0cnl7dm89eHQubG9va3VwTm9kZShhbixIcil9Y2F0Y2h7fWlmKEFvIT09dm8pe3ZhciB0YT14dC5pc0RpcihBby5tb2RlKSxXaT14dC5tYXlEZWxldGUoTHQsdXIsdGEpO2lmKFdpKXRocm93IG5ldyB4dC5FcnJub0Vycm9yKFdpKTtpZihX'@;
put 'aT12bz94dC5tYXlEZWxldGUoYW4sSHIsdGEpOnh0Lm1heUNyZWF0ZShhbixIcikpdGhyb3cgbmV3IHh0LkVycm5vRXJyb3IoV2kpO2lmKCFMdC5ub2RlX29wcy5yZW5hbWUpdGhyb3cgbmV3IHh0LkVycm5vRXJyb3IoNjMpO2lmKHh0LmlzTW91bnRwb2ludChBbyl8fHZvJiZ4dC5pc01vdW50'@;
put 'cG9pbnQodm8pKXRocm93IG5ldyB4dC5FcnJub0Vycm9yKDEwKTtpZihhbiE9PUx0JiYoV2k9eHQubm9kZVBlcm1pc3Npb25zKEx0LCJ3IikpKXRocm93IG5ldyB4dC5FcnJub0Vycm9yKFdpKTt4dC5oYXNoUmVtb3ZlTm9kZShBbyk7dHJ5e0x0Lm5vZGVfb3BzLnJlbmFtZShBbyxhbixIcil9'@;
put 'Y2F0Y2goJGEpe3Rocm93ICRhfWZpbmFsbHl7eHQuaGFzaEFkZE5vZGUoQW8pfX19LHJtZGlyOnN0PT57dmFyIHl0PXh0Lmxvb2t1cFBhdGgoc3Qse3BhcmVudDohMH0pLm5vZGUsTHQ9cXIuYmFzZW5hbWUoc3QpLGFuPXh0Lmxvb2t1cE5vZGUoeXQsTHQpLGtuPXh0Lm1heURlbGV0ZSh5dCxM'@;
put 'dCwhMCk7aWYoa24pdGhyb3cgbmV3IHh0LkVycm5vRXJyb3Ioa24pO2lmKCF5dC5ub2RlX29wcy5ybWRpcil0aHJvdyBuZXcgeHQuRXJybm9FcnJvcig2Myk7aWYoeHQuaXNNb3VudHBvaW50KGFuKSl0aHJvdyBuZXcgeHQuRXJybm9FcnJvcigxMCk7eXQubm9kZV9vcHMucm1kaXIoeXQsTHQp'@;
put 'LHh0LmRlc3Ryb3lOb2RlKGFuKX0scmVhZGRpcjpzdD0+e3ZhciB5dD14dC5sb29rdXBQYXRoKHN0LHtmb2xsb3c6ITB9KS5ub2RlO2lmKCF5dC5ub2RlX29wcy5yZWFkZGlyKXRocm93IG5ldyB4dC5FcnJub0Vycm9yKDU0KTtyZXR1cm4geXQubm9kZV9vcHMucmVhZGRpcih5dCl9LHVubGlu'@;
put 'azpzdD0+e3ZhciB5dD14dC5sb29rdXBQYXRoKHN0LHtwYXJlbnQ6ITB9KS5ub2RlO2lmKCF5dCl0aHJvdyBuZXcgeHQuRXJybm9FcnJvcig0NCk7dmFyIEx0PXFyLmJhc2VuYW1lKHN0KSxhbj14dC5sb29rdXBOb2RlKHl0LEx0KSxrbj14dC5tYXlEZWxldGUoeXQsTHQsITEpO2lmKGtuKXRo'@;
put 'cm93IG5ldyB4dC5FcnJub0Vycm9yKGtuKTtpZigheXQubm9kZV9vcHMudW5saW5rKXRocm93IG5ldyB4dC5FcnJub0Vycm9yKDYzKTtpZih4dC5pc01vdW50cG9pbnQoYW4pKXRocm93IG5ldyB4dC5FcnJub0Vycm9yKDEwKTt5dC5ub2RlX29wcy51bmxpbmsoeXQsTHQpLHh0LmRlc3Ryb3lO'@;
put 'b2RlKGFuKX0scmVhZGxpbms6c3Q9Pnt2YXIgeXQ9eHQubG9va3VwUGF0aChzdCkubm9kZTtpZigheXQpdGhyb3cgbmV3IHh0LkVycm5vRXJyb3IoNDQpO2lmKCF5dC5ub2RlX29wcy5yZWFkbGluayl0aHJvdyBuZXcgeHQuRXJybm9FcnJvcigyOCk7cmV0dXJuIFJpLnJlc29sdmUoeHQuZ2V0'@;
put 'UGF0aCh5dC5wYXJlbnQpLHl0Lm5vZGVfb3BzLnJlYWRsaW5rKHl0KSl9LHN0YXQ6KHN0LHl0KT0+e3ZhciBMdD14dC5sb29rdXBQYXRoKHN0LHtmb2xsb3c6IXl0fSkubm9kZTtpZighTHQpdGhyb3cgbmV3IHh0LkVycm5vRXJyb3IoNDQpO2lmKCFMdC5ub2RlX29wcy5nZXRhdHRyKXRocm93'@;
put 'IG5ldyB4dC5FcnJub0Vycm9yKDYzKTtyZXR1cm4gTHQubm9kZV9vcHMuZ2V0YXR0cihMdCl9LGxzdGF0OnN0PT54dC5zdGF0KHN0LCEwKSxjaG1vZDooc3QseXQsTHQpPT57dmFyIGFuO2lmKCEoYW49InN0cmluZyI9PXR5cGVvZiBzdD94dC5sb29rdXBQYXRoKHN0LHtmb2xsb3c6IUx0fSku'@;
put 'bm9kZTpzdCkubm9kZV9vcHMuc2V0YXR0cil0aHJvdyBuZXcgeHQuRXJybm9FcnJvcig2Myk7YW4ubm9kZV9vcHMuc2V0YXR0cihhbix7bW9kZTo0MDk1Jnl0fC00MDk2JmFuLm1vZGUsdGltZXN0YW1wOkRhdGUubm93KCl9KX0sbGNobW9kOihzdCx5dCk9Pnt4dC5jaG1vZChzdCx5dCwhMCl9'@;
put 'LGZjaG1vZDooc3QseXQpPT57dmFyIEx0PXh0LmdldFN0cmVhbShzdCk7aWYoIUx0KXRocm93IG5ldyB4dC5FcnJub0Vycm9yKDgpO3h0LmNobW9kKEx0Lm5vZGUseXQpfSxjaG93bjooc3QseXQsTHQsYW4pPT57dmFyIGtuO2lmKCEoa249InN0cmluZyI9PXR5cGVvZiBzdD94dC5sb29rdXBQ'@;
put 'YXRoKHN0LHtmb2xsb3c6IWFufSkubm9kZTpzdCkubm9kZV9vcHMuc2V0YXR0cil0aHJvdyBuZXcgeHQuRXJybm9FcnJvcig2Myk7a24ubm9kZV9vcHMuc2V0YXR0cihrbix7dGltZXN0YW1wOkRhdGUubm93KCl9KX0sbGNob3duOihzdCx5dCxMdCk9Pnt4dC5jaG93bihzdCx5dCxMdCwhMCl9'@;
put 'LGZjaG93bjooc3QseXQsTHQpPT57dmFyIGFuPXh0LmdldFN0cmVhbShzdCk7aWYoIWFuKXRocm93IG5ldyB4dC5FcnJub0Vycm9yKDgpO3h0LmNob3duKGFuLm5vZGUseXQsTHQpfSx0cnVuY2F0ZTooc3QseXQpPT57aWYoeXQ8MCl0aHJvdyBuZXcgeHQuRXJybm9FcnJvcigyOCk7dmFyIEx0'@;
put 'O2lmKCEoTHQ9InN0cmluZyI9PXR5cGVvZiBzdD94dC5sb29rdXBQYXRoKHN0LHtmb2xsb3c6ITB9KS5ub2RlOnN0KS5ub2RlX29wcy5zZXRhdHRyKXRocm93IG5ldyB4dC5FcnJub0Vycm9yKDYzKTtpZih4dC5pc0RpcihMdC5tb2RlKSl0aHJvdyBuZXcgeHQuRXJybm9FcnJvcigzMSk7aWYo'@;
put 'IXh0LmlzRmlsZShMdC5tb2RlKSl0aHJvdyBuZXcgeHQuRXJybm9FcnJvcigyOCk7dmFyIGFuPXh0Lm5vZGVQZXJtaXNzaW9ucyhMdCwidyIpO2lmKGFuKXRocm93IG5ldyB4dC5FcnJub0Vycm9yKGFuKTtMdC5ub2RlX29wcy5zZXRhdHRyKEx0LHtzaXplOnl0LHRpbWVzdGFtcDpEYXRlLm5v'@;
put 'dygpfSl9LGZ0cnVuY2F0ZTooc3QseXQpPT57dmFyIEx0PXh0LmdldFN0cmVhbShzdCk7aWYoIUx0KXRocm93IG5ldyB4dC5FcnJub0Vycm9yKDgpO2lmKCEoMjA5NzE1NSZMdC5mbGFncykpdGhyb3cgbmV3IHh0LkVycm5vRXJyb3IoMjgpO3h0LnRydW5jYXRlKEx0Lm5vZGUseXQpfSx1dGlt'@;
put 'ZTooc3QseXQsTHQpPT57dmFyIGFuPXh0Lmxvb2t1cFBhdGgoc3Qse2ZvbGxvdzohMH0pLm5vZGU7YW4ubm9kZV9vcHMuc2V0YXR0cihhbix7dGltZXN0YW1wOk1hdGgubWF4KHl0LEx0KX0pfSxvcGVuOihzdCx5dCxMdCk9PntpZigiIj09PXN0KXRocm93IG5ldyB4dC5FcnJub0Vycm9yKDQ0'@;
put 'KTt2YXIgYW47aWYoTHQ9dm9pZCAwPT09THQ/NDM4Okx0LEx0PTY0Jih5dD0ic3RyaW5nIj09dHlwZW9mIHl0P3h0Lm1vZGVTdHJpbmdUb0ZsYWdzKHl0KTp5dCk/NDA5NSZMdHwzMjc2ODowLCJvYmplY3QiPT10eXBlb2Ygc3QpYW49c3Q7ZWxzZXtzdD1xci5ub3JtYWxpemUoc3QpO3RyeXth'@;
put 'bj14dC5sb29rdXBQYXRoKHN0LHtmb2xsb3c6ISgxMzEwNzImeXQpfSkubm9kZX1jYXRjaHt9fXZhciBrbj0hMTtpZig2NCZ5dClpZihhbil7aWYoMTI4Jnl0KXRocm93IG5ldyB4dC5FcnJub0Vycm9yKDIwKX1lbHNlIGFuPXh0Lm1rbm9kKHN0LEx0LDApLGtuPSEwO2lmKCFhbil0aHJvdyBu'@;
put 'ZXcgeHQuRXJybm9FcnJvcig0NCk7aWYoeHQuaXNDaHJkZXYoYW4ubW9kZSkmJih5dCY9LTUxMyksNjU1MzYmeXQmJiF4dC5pc0Rpcihhbi5tb2RlKSl0aHJvdyBuZXcgeHQuRXJybm9FcnJvcig1NCk7aWYoIWtuKXt2YXIgbHI9eHQubWF5T3Blbihhbix5dCk7aWYobHIpdGhyb3cgbmV3IHh0'@;
put 'LkVycm5vRXJyb3IobHIpfTUxMiZ5dCYmIWtuJiZ4dC50cnVuY2F0ZShhbiwwKSx5dCY9LTEzMTcxMzt2YXIgdXI9eHQuY3JlYXRlU3RyZWFtKHtub2RlOmFuLHBhdGg6eHQuZ2V0UGF0aChhbiksZmxhZ3M6eXQsc2Vla2FibGU6ITAscG9zaXRpb246MCxzdHJlYW1fb3BzOmFuLnN0cmVhbV9v'@;
put 'cHMsdW5nb3R0ZW46W10sZXJyb3I6ITF9KTtyZXR1cm4gdXIuc3RyZWFtX29wcy5vcGVuJiZ1ci5zdHJlYW1fb3BzLm9wZW4odXIpLCFmLmxvZ1JlYWRGaWxlc3x8MSZ5dHx8KHh0LnJlYWRGaWxlc3x8KHh0LnJlYWRGaWxlcz17fSksc3QgaW4geHQucmVhZEZpbGVzfHwoeHQucmVhZEZpbGVz'@;
put 'W3N0XT0xKSksdXJ9LGNsb3NlOnN0PT57aWYoeHQuaXNDbG9zZWQoc3QpKXRocm93IG5ldyB4dC5FcnJub0Vycm9yKDgpO3N0LmdldGRlbnRzJiYoc3QuZ2V0ZGVudHM9bnVsbCk7dHJ5e3N0LnN0cmVhbV9vcHMuY2xvc2UmJnN0LnN0cmVhbV9vcHMuY2xvc2Uoc3QpfWNhdGNoKHl0KXt0aHJv'@;
put 'dyB5dH1maW5hbGx5e3h0LmNsb3NlU3RyZWFtKHN0LmZkKX1zdC5mZD1udWxsfSxpc0Nsb3NlZDpzdD0+bnVsbD09PXN0LmZkLGxsc2Vlazooc3QseXQsTHQpPT57aWYoeHQuaXNDbG9zZWQoc3QpKXRocm93IG5ldyB4dC5FcnJub0Vycm9yKDgpO2lmKCFzdC5zZWVrYWJsZXx8IXN0LnN0cmVh'@;
put 'bV9vcHMubGxzZWVrKXRocm93IG5ldyB4dC5FcnJub0Vycm9yKDcwKTtpZigwIT1MdCYmMSE9THQmJjIhPUx0KXRocm93IG5ldyB4dC5FcnJub0Vycm9yKDI4KTtyZXR1cm4gc3QucG9zaXRpb249c3Quc3RyZWFtX29wcy5sbHNlZWsoc3QseXQsTHQpLHN0LnVuZ290dGVuPVtdLHN0LnBvc2l0'@;
put 'aW9ufSxyZWFkOihzdCx5dCxMdCxhbixrbik9PntpZihhbjwwfHxrbjwwKXRocm93IG5ldyB4dC5FcnJub0Vycm9yKDI4KTtpZih4dC5pc0Nsb3NlZChzdCkpdGhyb3cgbmV3IHh0LkVycm5vRXJyb3IoOCk7aWYoMT09KDIwOTcxNTUmc3QuZmxhZ3MpKXRocm93IG5ldyB4dC5FcnJub0Vycm9y'@;
put 'KDgpO2lmKHh0LmlzRGlyKHN0Lm5vZGUubW9kZSkpdGhyb3cgbmV3IHh0LkVycm5vRXJyb3IoMzEpO2lmKCFzdC5zdHJlYW1fb3BzLnJlYWQpdGhyb3cgbmV3IHh0LkVycm5vRXJyb3IoMjgpO3ZhciBscj12b2lkIDAhPT1rbjtpZihscil7aWYoIXN0LnNlZWthYmxlKXRocm93IG5ldyB4dC5F'@;
put 'cnJub0Vycm9yKDcwKX1lbHNlIGtuPXN0LnBvc2l0aW9uO3ZhciB1cj1zdC5zdHJlYW1fb3BzLnJlYWQoc3QseXQsTHQsYW4sa24pO3JldHVybiBscnx8KHN0LnBvc2l0aW9uKz11ciksdXJ9LHdyaXRlOihzdCx5dCxMdCxhbixrbixscik9PntpZihhbjwwfHxrbjwwKXRocm93IG5ldyB4dC5F'@;
put 'cnJub0Vycm9yKDI4KTtpZih4dC5pc0Nsb3NlZChzdCkpdGhyb3cgbmV3IHh0LkVycm5vRXJyb3IoOCk7aWYoISgyMDk3MTU1JnN0LmZsYWdzKSl0aHJvdyBuZXcgeHQuRXJybm9FcnJvcig4KTtpZih4dC5pc0RpcihzdC5ub2RlLm1vZGUpKXRocm93IG5ldyB4dC5FcnJub0Vycm9yKDMxKTtp'@;
put 'Zighc3Quc3RyZWFtX29wcy53cml0ZSl0aHJvdyBuZXcgeHQuRXJybm9FcnJvcigyOCk7c3Quc2Vla2FibGUmJjEwMjQmc3QuZmxhZ3MmJnh0Lmxsc2VlayhzdCwwLDIpO3ZhciB1cj12b2lkIDAhPT1rbjtpZih1cil7aWYoIXN0LnNlZWthYmxlKXRocm93IG5ldyB4dC5FcnJub0Vycm9yKDcw'@;
put 'KX1lbHNlIGtuPXN0LnBvc2l0aW9uO3ZhciBIcj1zdC5zdHJlYW1fb3BzLndyaXRlKHN0LHl0LEx0LGFuLGtuLGxyKTtyZXR1cm4gdXJ8fChzdC5wb3NpdGlvbis9SHIpLEhyfSxhbGxvY2F0ZTooc3QseXQsTHQpPT57aWYoeHQuaXNDbG9zZWQoc3QpKXRocm93IG5ldyB4dC5FcnJub0Vycm9y'@;
put 'KDgpO2lmKHl0PDB8fEx0PD0wKXRocm93IG5ldyB4dC5FcnJub0Vycm9yKDI4KTtpZighKDIwOTcxNTUmc3QuZmxhZ3MpKXRocm93IG5ldyB4dC5FcnJub0Vycm9yKDgpO2lmKCF4dC5pc0ZpbGUoc3Qubm9kZS5tb2RlKSYmIXh0LmlzRGlyKHN0Lm5vZGUubW9kZSkpdGhyb3cgbmV3IHh0LkVy'@;
put 'cm5vRXJyb3IoNDMpO2lmKCFzdC5zdHJlYW1fb3BzLmFsbG9jYXRlKXRocm93IG5ldyB4dC5FcnJub0Vycm9yKDEzOCk7c3Quc3RyZWFtX29wcy5hbGxvY2F0ZShzdCx5dCxMdCl9LG1tYXA6KHN0LHl0LEx0LGFuLGtuKT0+e2lmKDImYW4mJiEoMiZrbikmJjIhPSgyMDk3MTU1JnN0LmZsYWdz'@;
put 'KSl0aHJvdyBuZXcgeHQuRXJybm9FcnJvcigyKTtpZigxPT0oMjA5NzE1NSZzdC5mbGFncykpdGhyb3cgbmV3IHh0LkVycm5vRXJyb3IoMik7aWYoIXN0LnN0cmVhbV9vcHMubW1hcCl0aHJvdyBuZXcgeHQuRXJybm9FcnJvcig0Myk7cmV0dXJuIHN0LnN0cmVhbV9vcHMubW1hcChzdCx5dCxM'@;
put 'dCxhbixrbil9LG1zeW5jOihzdCx5dCxMdCxhbixrbik9PnN0LnN0cmVhbV9vcHMubXN5bmM/c3Quc3RyZWFtX29wcy5tc3luYyhzdCx5dCxMdCxhbixrbik6MCxtdW5tYXA6c3Q9PjAsaW9jdGw6KHN0LHl0LEx0KT0+e2lmKCFzdC5zdHJlYW1fb3BzLmlvY3RsKXRocm93IG5ldyB4dC5FcnJu'@;
put 'b0Vycm9yKDU5KTtyZXR1cm4gc3Quc3RyZWFtX29wcy5pb2N0bChzdCx5dCxMdCl9LHJlYWRGaWxlOihzdCx5dD17fSk9PntpZih5dC5mbGFncz15dC5mbGFnc3x8MCx5dC5lbmNvZGluZz15dC5lbmNvZGluZ3x8ImJpbmFyeSIsInV0ZjgiIT09eXQuZW5jb2RpbmcmJiJiaW5hcnkiIT09eXQu'@;
put 'ZW5jb2RpbmcpdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGVuY29kaW5nIHR5cGUgIicreXQuZW5jb2RpbmcrJyInKTt2YXIgTHQsYW49eHQub3BlbihzdCx5dC5mbGFncyksa249eHQuc3RhdChzdCkuc2l6ZSxscj1uZXcgVWludDhBcnJheShrbik7cmV0dXJuIHh0LnJlYWQoYW4sbHIsMCxr'@;
put 'biwwKSwidXRmOCI9PT15dC5lbmNvZGluZz9MdD15bihsciwwKToiYmluYXJ5Ij09PXl0LmVuY29kaW5nJiYoTHQ9bHIpLHh0LmNsb3NlKGFuKSxMdH0sd3JpdGVGaWxlOihzdCx5dCxMdD17fSk9PntMdC5mbGFncz1MdC5mbGFnc3x8NTc3O3ZhciBhbj14dC5vcGVuKHN0LEx0LmZsYWdzLEx0'@;
put 'Lm1vZGUpO2lmKCJzdHJpbmciPT10eXBlb2YgeXQpe3ZhciBrbj1uZXcgVWludDhBcnJheShWcih5dCkrMSksbHI9T3IoeXQsa24sMCxrbi5sZW5ndGgpO3h0LndyaXRlKGFuLGtuLDAsbHIsdm9pZCAwLEx0LmNhbk93bil9ZWxzZXtpZighQXJyYXlCdWZmZXIuaXNWaWV3KHl0KSl0aHJvdyBu'@;
put 'ZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGRhdGEgdHlwZSIpO3h0LndyaXRlKGFuLHl0LDAseXQuYnl0ZUxlbmd0aCx2b2lkIDAsTHQuY2FuT3duKX14dC5jbG9zZShhbil9LGN3ZDooKT0+eHQuY3VycmVudFBhdGgsY2hkaXI6c3Q9Pnt2YXIgeXQ9eHQubG9va3VwUGF0aChzdCx7Zm9sbG93OiEw'@;
put 'fSk7aWYobnVsbD09PXl0Lm5vZGUpdGhyb3cgbmV3IHh0LkVycm5vRXJyb3IoNDQpO2lmKCF4dC5pc0Rpcih5dC5ub2RlLm1vZGUpKXRocm93IG5ldyB4dC5FcnJub0Vycm9yKDU0KTt2YXIgTHQ9eHQubm9kZVBlcm1pc3Npb25zKHl0Lm5vZGUsIngiKTtpZihMdCl0aHJvdyBuZXcgeHQuRXJy'@;
put 'bm9FcnJvcihMdCk7eHQuY3VycmVudFBhdGg9eXQucGF0aH0sY3JlYXRlRGVmYXVsdERpcmVjdG9yaWVzOigpPT57eHQubWtkaXIoIi90bXAiKSx4dC5ta2RpcigiL2hvbWUiKSx4dC5ta2RpcigiL2hvbWUvd2ViX3VzZXIiKX0sY3JlYXRlRGVmYXVsdERldmljZXM6KCk9Pnt4dC5ta2Rpcigi'@;
put 'L2RldiIpLHh0LnJlZ2lzdGVyRGV2aWNlKHh0Lm1ha2VkZXYoMSwzKSx7cmVhZDooKT0+MCx3cml0ZTooeXQsTHQsYW4sa24sbHIpPT5rbn0pLHh0Lm1rZGV2KCIvZGV2L251bGwiLHh0Lm1ha2VkZXYoMSwzKSksb2EucmVnaXN0ZXIoeHQubWFrZWRldig1LDApLG9hLmRlZmF1bHRfdHR5X29w'@;
put 'cyksb2EucmVnaXN0ZXIoeHQubWFrZWRldig2LDApLG9hLmRlZmF1bHRfdHR5MV9vcHMpLHh0Lm1rZGV2KCIvZGV2L3R0eSIseHQubWFrZWRldig1LDApKSx4dC5ta2RldigiL2Rldi90dHkxIix4dC5tYWtlZGV2KDYsMCkpO3ZhciBzdD1mdW5jdGlvbigpe2lmKCJvYmplY3QiPT10eXBlb2Yg'@;
put 'Y3J5cHRvJiYiZnVuY3Rpb24iPT10eXBlb2YgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyl7dmFyIHl0PW5ldyBVaW50OEFycmF5KDEpO3JldHVybigpPT4oY3J5cHRvLmdldFJhbmRvbVZhbHVlcyh5dCkseXRbMF0pfXJldHVybigpPT5XdCgicmFuZG9tRGV2aWNlIil9KCk7eHQuY3JlYXRlRGV2'@;
put 'aWNlKCIvZGV2IiwicmFuZG9tIixzdCkseHQuY3JlYXRlRGV2aWNlKCIvZGV2IiwidXJhbmRvbSIsc3QpLHh0Lm1rZGlyKCIvZGV2L3NobSIpLHh0Lm1rZGlyKCIvZGV2L3NobS90bXAiKX0sY3JlYXRlU3BlY2lhbERpcmVjdG9yaWVzOigpPT57eHQubWtkaXIoIi9wcm9jIik7dmFyIHN0PXh0'@;
put 'Lm1rZGlyKCIvcHJvYy9zZWxmIik7eHQubWtkaXIoIi9wcm9jL3NlbGYvZmQiKSx4dC5tb3VudCh7bW91bnQ6KCk9Pnt2YXIgeXQ9eHQuY3JlYXRlTm9kZShzdCwiZmQiLDE2ODk1LDczKTtyZXR1cm4geXQubm9kZV9vcHM9e2xvb2t1cDooTHQsYW4pPT57dmFyIGxyPXh0LmdldFN0cmVhbSgr'@;
put 'YW4pO2lmKCFscil0aHJvdyBuZXcgeHQuRXJybm9FcnJvcig4KTt2YXIgdXI9e3BhcmVudDpudWxsLG1vdW50Onttb3VudHBvaW50OiJmYWtlIn0sbm9kZV9vcHM6e3JlYWRsaW5rOigpPT5sci5wYXRofX07cmV0dXJuIHVyLnBhcmVudD11cix1cn19LHl0fX0se30sIi9wcm9jL3NlbGYvZmQi'@;
put 'KX0sY3JlYXRlU3RhbmRhcmRTdHJlYW1zOigpPT57Zi5zdGRpbj94dC5jcmVhdGVEZXZpY2UoIi9kZXYiLCJzdGRpbiIsZi5zdGRpbik6eHQuc3ltbGluaygiL2Rldi90dHkiLCIvZGV2L3N0ZGluIiksZi5zdGRvdXQ/eHQuY3JlYXRlRGV2aWNlKCIvZGV2Iiwic3Rkb3V0IixudWxsLGYuc3Rk'@;
put 'b3V0KTp4dC5zeW1saW5rKCIvZGV2L3R0eSIsIi9kZXYvc3Rkb3V0IiksZi5zdGRlcnI/eHQuY3JlYXRlRGV2aWNlKCIvZGV2Iiwic3RkZXJyIixudWxsLGYuc3RkZXJyKTp4dC5zeW1saW5rKCIvZGV2L3R0eTEiLCIvZGV2L3N0ZGVyciIpLHh0Lm9wZW4oIi9kZXYvc3RkaW4iLDApLHh0Lm9w'@;
put 'ZW4oIi9kZXYvc3Rkb3V0IiwxKSx4dC5vcGVuKCIvZGV2L3N0ZGVyciIsMSl9LGVuc3VyZUVycm5vRXJyb3I6KCk9Pnt4dC5FcnJub0Vycm9yfHwoeHQuRXJybm9FcnJvcj1mdW5jdGlvbihzdCx5dCl7dGhpcy5ub2RlPXl0LHRoaXMuc2V0RXJybm89ZnVuY3Rpb24oTHQpe3RoaXMuZXJybm89'@;
put 'THR9LHRoaXMuc2V0RXJybm8oc3QpLHRoaXMubWVzc2FnZT0iRlMgZXJyb3IifSx4dC5FcnJub0Vycm9yLnByb3RvdHlwZT1uZXcgRXJyb3IseHQuRXJybm9FcnJvci5wcm90b3R5cGUuY29uc3RydWN0b3I9eHQuRXJybm9FcnJvcixbNDRdLmZvckVhY2goc3Q9Pnt4dC5nZW5lcmljRXJyb3Jz'@;
put 'W3N0XT1uZXcgeHQuRXJybm9FcnJvcihzdCkseHQuZ2VuZXJpY0Vycm9yc1tzdF0uc3RhY2s9IjxnZW5lcmljIGVycm9yLCBubyBzdGFjaz4ifSkpfSxzdGF0aWNJbml0OigpPT57eHQuZW5zdXJlRXJybm9FcnJvcigpLHh0Lm5hbWVUYWJsZT1uZXcgQXJyYXkoNDA5NikseHQubW91bnQocWks'@;
put 'e30sIi8iKSx4dC5jcmVhdGVEZWZhdWx0RGlyZWN0b3JpZXMoKSx4dC5jcmVhdGVEZWZhdWx0RGV2aWNlcygpLHh0LmNyZWF0ZVNwZWNpYWxEaXJlY3RvcmllcygpLHh0LmZpbGVzeXN0ZW1zPXtNRU1GUzpxaX19LGluaXQ6KHN0LHl0LEx0KT0+e3h0LmluaXQuaW5pdGlhbGl6ZWQ9ITAseHQu'@;
put 'ZW5zdXJlRXJybm9FcnJvcigpLGYuc3RkaW49c3R8fGYuc3RkaW4sZi5zdGRvdXQ9eXR8fGYuc3Rkb3V0LGYuc3RkZXJyPUx0fHxmLnN0ZGVycix4dC5jcmVhdGVTdGFuZGFyZFN0cmVhbXMoKX0scXVpdDooKT0+e3h0LmluaXQuaW5pdGlhbGl6ZWQ9ITE7Zm9yKHZhciBzdD0wO3N0PHh0LnN0'@;
put 'cmVhbXMubGVuZ3RoO3N0Kyspe3ZhciB5dD14dC5zdHJlYW1zW3N0XTt5dCYmeHQuY2xvc2UoeXQpfX0sZ2V0TW9kZTooc3QseXQpPT57dmFyIEx0PTA7cmV0dXJuIHN0JiYoTHR8PTM2NSkseXQmJihMdHw9MTQ2KSxMdH0sZmluZE9iamVjdDooc3QseXQpPT57dmFyIEx0PXh0LmFuYWx5emVQ'@;
put 'YXRoKHN0LHl0KTtyZXR1cm4gTHQuZXhpc3RzP0x0Lm9iamVjdDpudWxsfSxhbmFseXplUGF0aDooc3QseXQpPT57dHJ5e3N0PShhbj14dC5sb29rdXBQYXRoKHN0LHtmb2xsb3c6IXl0fSkpLnBhdGh9Y2F0Y2h7fXZhciBMdD17aXNSb290OiExLGV4aXN0czohMSxlcnJvcjowLG5hbWU6bnVs'@;
put 'bCxwYXRoOm51bGwsb2JqZWN0Om51bGwscGFyZW50RXhpc3RzOiExLHBhcmVudFBhdGg6bnVsbCxwYXJlbnRPYmplY3Q6bnVsbH07dHJ5e3ZhciBhbj14dC5sb29rdXBQYXRoKHN0LHtwYXJlbnQ6ITB9KTtMdC5wYXJlbnRFeGlzdHM9ITAsTHQucGFyZW50UGF0aD1hbi5wYXRoLEx0LnBhcmVu'@;
put 'dE9iamVjdD1hbi5ub2RlLEx0Lm5hbWU9cXIuYmFzZW5hbWUoc3QpLGFuPXh0Lmxvb2t1cFBhdGgoc3Qse2ZvbGxvdzoheXR9KSxMdC5leGlzdHM9ITAsTHQucGF0aD1hbi5wYXRoLEx0Lm9iamVjdD1hbi5ub2RlLEx0Lm5hbWU9YW4ubm9kZS5uYW1lLEx0LmlzUm9vdD0iLyI9PT1hbi5wYXRo'@;
put 'fWNhdGNoKGtuKXtMdC5lcnJvcj1rbi5lcnJub31yZXR1cm4gTHR9LGNyZWF0ZVBhdGg6KHN0LHl0LEx0LGFuKT0+e3N0PSJzdHJpbmciPT10eXBlb2Ygc3Q/c3Q6eHQuZ2V0UGF0aChzdCk7Zm9yKHZhciBrbj15dC5zcGxpdCgiLyIpLnJldmVyc2UoKTtrbi5sZW5ndGg7KXt2YXIgbHI9a24u'@;
put 'cG9wKCk7aWYobHIpe3ZhciB1cj1xci5qb2luMihzdCxscik7dHJ5e3h0Lm1rZGlyKHVyKX1jYXRjaHt9c3Q9dXJ9fXJldHVybiB1cn0sY3JlYXRlRmlsZTooc3QseXQsTHQsYW4sa24pPT57dmFyIGxyPXFyLmpvaW4yKCJzdHJpbmciPT10eXBlb2Ygc3Q/c3Q6eHQuZ2V0UGF0aChzdCkseXQp'@;
put 'LHVyPXh0LmdldE1vZGUoYW4sa24pO3JldHVybiB4dC5jcmVhdGUobHIsdXIpfSxjcmVhdGVEYXRhRmlsZTooc3QseXQsTHQsYW4sa24sbHIpPT57dmFyIHVyPXl0O3N0JiYoc3Q9InN0cmluZyI9PXR5cGVvZiBzdD9zdDp4dC5nZXRQYXRoKHN0KSx1cj15dD9xci5qb2luMihzdCx5dCk6c3Qp'@;
put 'O3ZhciBIcj14dC5nZXRNb2RlKGFuLGtuKSx2bz14dC5jcmVhdGUodXIsSHIpO2lmKEx0KXtpZigic3RyaW5nIj09dHlwZW9mIEx0KXtmb3IodmFyIEFvPW5ldyBBcnJheShMdC5sZW5ndGgpLG1vPTAsdGE9THQubGVuZ3RoO21vPHRhOysrbW8pQW9bbW9dPUx0LmNoYXJDb2RlQXQobW8pO0x0'@;
put 'PUFvfXh0LmNobW9kKHZvLDE0NnxIcik7dmFyIFdpPXh0Lm9wZW4odm8sNTc3KTt4dC53cml0ZShXaSxMdCwwLEx0Lmxlbmd0aCwwLGxyKSx4dC5jbG9zZShXaSkseHQuY2htb2Qodm8sSHIpfXJldHVybiB2b30sY3JlYXRlRGV2aWNlOihzdCx5dCxMdCxhbik9Pnt2YXIga249cXIuam9pbjIo'@;
put 'InN0cmluZyI9PXR5cGVvZiBzdD9zdDp4dC5nZXRQYXRoKHN0KSx5dCksbHI9eHQuZ2V0TW9kZSghIUx0LCEhYW4pO3h0LmNyZWF0ZURldmljZS5tYWpvcnx8KHh0LmNyZWF0ZURldmljZS5tYWpvcj02NCk7dmFyIHVyPXh0Lm1ha2VkZXYoeHQuY3JlYXRlRGV2aWNlLm1ham9yKyssMCk7cmV0'@;
put 'dXJuIHh0LnJlZ2lzdGVyRGV2aWNlKHVyLHtvcGVuOkhyPT57SHIuc2Vla2FibGU9ITF9LGNsb3NlOkhyPT57YW4mJmFuLmJ1ZmZlciYmYW4uYnVmZmVyLmxlbmd0aCYmYW4oMTApfSxyZWFkOihIcix2byxBbyxtbyx0YSk9Pntmb3IodmFyIFdpPTAsJGE9MDskYTxtbzskYSsrKXt2YXIgQnM7'@;
put 'dHJ5e0JzPUx0KCl9Y2F0Y2h7dGhyb3cgbmV3IHh0LkVycm5vRXJyb3IoMjkpfWlmKHZvaWQgMD09PUJzJiYwPT09V2kpdGhyb3cgbmV3IHh0LkVycm5vRXJyb3IoNik7aWYobnVsbD09QnMpYnJlYWs7V2krKyx2b1tBbyskYV09QnN9cmV0dXJuIFdpJiYoSHIubm9kZS50aW1lc3RhbXA9RGF0'@;
put 'ZS5ub3coKSksV2l9LHdyaXRlOihIcix2byxBbyxtbyx0YSk9Pntmb3IodmFyIFdpPTA7V2k8bW87V2krKyl0cnl7YW4odm9bQW8rV2ldKX1jYXRjaHt0aHJvdyBuZXcgeHQuRXJybm9FcnJvcigyOSl9cmV0dXJuIG1vJiYoSHIubm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKSksV2l9fSkseHQu'@;
put 'bWtkZXYoa24sbHIsdXIpfSxmb3JjZUxvYWRGaWxlOnN0PT57aWYoc3QuaXNEZXZpY2V8fHN0LmlzRm9sZGVyfHxzdC5saW5rfHxzdC5jb250ZW50cylyZXR1cm4hMDt0aHJvdyB0eXBlb2YgWE1MSHR0cFJlcXVlc3Q8InUiP25ldyBFcnJvcigiTGF6eSBsb2FkaW5nIHNob3VsZCBoYXZlIGJl'@;
put 'ZW4gcGVyZm9ybWVkIChjb250ZW50cyBzZXQpIGluIGNyZWF0ZUxhenlGaWxlLCBidXQgaXQgd2FzIG5vdC4gTGF6eSBsb2FkaW5nIG9ubHkgd29ya3MgaW4gd2ViIHdvcmtlcnMuIFVzZSAtLWVtYmVkLWZpbGUgb3IgLS1wcmVsb2FkLWZpbGUgaW4gZW1jYyBvbiB0aGUgbWFpbiB0aHJlYWQu'@;
put 'Iik6bmV3IEVycm9yKCJDYW5ub3QgbG9hZCB3aXRob3V0IHJlYWQoKSBvciBYTUxIdHRwUmVxdWVzdC4iKX0sY3JlYXRlTGF6eUZpbGU6KHN0LHl0LEx0LGFuLGtuKT0+e2Z1bmN0aW9uIGxyKCl7dGhpcy5sZW5ndGhLbm93bj0hMSx0aGlzLmNodW5rcz1bXX1pZihsci5wcm90b3R5cGUuZ2V0'@;
put 'PWZ1bmN0aW9uKG1vKXtpZighKG1vPnRoaXMubGVuZ3RoLTF8fG1vPDApKXt2YXIgdGE9bW8ldGhpcy5jaHVua1NpemU7cmV0dXJuIHRoaXMuZ2V0dGVyKG1vL3RoaXMuY2h1bmtTaXplfDApW3RhXX19LGxyLnByb3RvdHlwZS5zZXREYXRhR2V0dGVyPWZ1bmN0aW9uKG1vKXt0aGlzLmdldHRl'@;
put 'cj1tb30sbHIucHJvdG90eXBlLmNhY2hlTGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIG1vPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihtby5vcGVuKCJIRUFEIixMdCwhMSksbW8uc2VuZChudWxsKSwhKG1vLnN0YXR1cz49MjAwJiZtby5zdGF0dXM8MzAwfHwzMDQ9PT1tby5zdGF0dXMpKXRocm93IG5l'@;
put 'dyBFcnJvcigiQ291bGRuJ3QgbG9hZCAiK0x0KyIuIFN0YXR1czogIittby5zdGF0dXMpO3ZhciB0YSxXaT1OdW1iZXIobW8uZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtbGVuZ3RoIikpLCRhPSh0YT1tby5nZXRSZXNwb25zZUhlYWRlcigiQWNjZXB0LVJhbmdlcyIpKSYmImJ5dGVzIj09'@;
put 'PXRhLEJzPSh0YT1tby5nZXRSZXNwb25zZUhlYWRlcigiQ29udGVudC1FbmNvZGluZyIpKSYmImd6aXAiPT09dGEsT3M9MTA0ODU3NjskYXx8KE9zPVdpKTt2YXIgZjA9dGhpcztmMC5zZXREYXRhR2V0dGVyKG1zPT57dmFyIEFpPW1zKk9zLFdvPShtcysxKSpPcy0xO2lmKFdvPU1hdGgubWlu'@;
put 'KFdvLFdpLTEpLHZvaWQgMD09PWYwLmNodW5rc1ttc10mJihmMC5jaHVua3NbbXNdPSgobmMsanMpPT57aWYobmM+anMpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHJhbmdlICgiK25jKyIsICIranMrIikgb3Igbm8gYnl0ZXMgcmVxdWVzdGVkISIpO2lmKGpzPldpLTEpdGhyb3cgbmV3IEVy'@;
put 'cm9yKCJvbmx5ICIrV2krIiBieXRlcyBhdmFpbGFibGUhIHByb2dyYW1tZXIgZXJyb3IhIik7dmFyIHV1PW5ldyBYTUxIdHRwUmVxdWVzdDtpZih1dS5vcGVuKCJHRVQiLEx0LCExKSxXaSE9PU9zJiZ1dS5zZXRSZXF1ZXN0SGVhZGVyKCJSYW5nZSIsImJ5dGVzPSIrbmMrIi0iK2pzKSx1dS5y'@;
put 'ZXNwb25zZVR5cGU9ImFycmF5YnVmZmVyIix1dS5vdmVycmlkZU1pbWVUeXBlJiZ1dS5vdmVycmlkZU1pbWVUeXBlKCJ0ZXh0L3BsYWluOyBjaGFyc2V0PXgtdXNlci1kZWZpbmVkIiksdXUuc2VuZChudWxsKSwhKHV1LnN0YXR1cz49MjAwJiZ1dS5zdGF0dXM8MzAwfHwzMDQ9PT11dS5zdGF0'@;
put 'dXMpKXRocm93IG5ldyBFcnJvcigiQ291bGRuJ3QgbG9hZCAiK0x0KyIuIFN0YXR1czogIit1dS5zdGF0dXMpO3JldHVybiB2b2lkIDAhPT11dS5yZXNwb25zZT9uZXcgVWludDhBcnJheSh1dS5yZXNwb25zZXx8W10pOkRvKHV1LnJlc3BvbnNlVGV4dHx8IiIsITApfSkoQWksV28pKSx2b2lk'@;
put 'IDA9PT1mMC5jaHVua3NbbXNdKXRocm93IG5ldyBFcnJvcigiZG9YSFIgZmFpbGVkISIpO3JldHVybiBmMC5jaHVua3NbbXNdfSksIUJzJiZXaXx8KE9zPVdpPTEsV2k9dGhpcy5nZXR0ZXIoMCkubGVuZ3RoLE9zPVdpLE8oIkxhenlGaWxlcyBvbiBnemlwIGZvcmNlcyBkb3dubG9hZCBvZiB0'@;
put 'aGUgd2hvbGUgZmlsZSB3aGVuIGxlbmd0aCBpcyBhY2Nlc3NlZCIpKSx0aGlzLl9sZW5ndGg9V2ksdGhpcy5fY2h1bmtTaXplPU9zLHRoaXMubGVuZ3RoS25vd249ITB9LHR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSIpdGhyb3ciQ2Fubm90IGRvIHN5bmNocm9ub3VzIGJpbmFyeSBYSFJzIG91'@;
put 'dHNpZGUgd2Vid29ya2VycyBpbiBtb2Rlcm4gYnJvd3NlcnMuIFVzZSAtLWVtYmVkLWZpbGUgb3IgLS1wcmVsb2FkLWZpbGUgaW4gZW1jYyI7dmFyIHVyPXtpc0RldmljZTohMSx1cmw6THR9LEhyPXh0LmNyZWF0ZUZpbGUoc3QseXQsdXIsYW4sa24pO3VyLmNvbnRlbnRzP0hyLmNvbnRlbnRz'@;
put 'PXVyLmNvbnRlbnRzOnVyLnVybCYmKEhyLmNvbnRlbnRzPW51bGwsSHIudXJsPXVyLnVybCksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoSHIse3VzZWRCeXRlczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGVudHMubGVuZ3RofX19KTt2YXIgdm89e307ZnVuY3Rpb24gQW8obW8s'@;
put 'dGEsV2ksJGEsQnMpe3ZhciBPcz1tby5ub2RlLmNvbnRlbnRzO2lmKEJzPj1Pcy5sZW5ndGgpcmV0dXJuIDA7dmFyIGYwPU1hdGgubWluKE9zLmxlbmd0aC1CcywkYSk7aWYoT3Muc2xpY2UpZm9yKHZhciBtcz0wO21zPGYwO21zKyspdGFbV2krbXNdPU9zW0JzK21zXTtlbHNlIGZvcihtcz0w'@;
put 'O21zPGYwO21zKyspdGFbV2krbXNdPU9zLmdldChCcyttcyk7cmV0dXJuIGYwfXJldHVybiBPYmplY3Qua2V5cyhIci5zdHJlYW1fb3BzKS5mb3JFYWNoKG1vPT57dmFyIHRhPUhyLnN0cmVhbV9vcHNbbW9dO3ZvW21vXT1mdW5jdGlvbigpe3JldHVybiB4dC5mb3JjZUxvYWRGaWxlKEhyKSx0'@;
put 'YS5hcHBseShudWxsLGFyZ3VtZW50cyl9fSksdm8ucmVhZD0obW8sdGEsV2ksJGEsQnMpPT4oeHQuZm9yY2VMb2FkRmlsZShIciksQW8obW8sdGEsV2ksJGEsQnMpKSx2by5tbWFwPShtbyx0YSxXaSwkYSxCcyk9Pnt4dC5mb3JjZUxvYWRGaWxlKEhyKTt2YXIgT3M9a28odGEpO2lmKCFPcyl0'@;
put 'aHJvdyBuZXcgeHQuRXJybm9FcnJvcig0OCk7cmV0dXJuIEFvKG1vLFplLE9zLHRhLFdpKSx7cHRyOk9zLGFsbG9jYXRlZDohMH19LEhyLnN0cmVhbV9vcHM9dm8sSHJ9LGNyZWF0ZVByZWxvYWRlZEZpbGU6KHN0LHl0LEx0LGFuLGtuLGxyLHVyLEhyLHZvLEFvKT0+e3ZhciBXaSxCcyxmMCxt'@;
put 'bz15dD9SaS5yZXNvbHZlKHFyLmpvaW4yKHN0LHl0KSk6c3Q7ZnVuY3Rpb24gdGEoV2kpe2Z1bmN0aW9uICRhKEJzKXtBbyYmQW8oKSxIcnx8eHQuY3JlYXRlRGF0YUZpbGUoc3QseXQsQnMsYW4sa24sdm8pLGxyJiZscigpLEZ0KCl9QnJvd3Nlci5oYW5kbGVkQnlQcmVsb2FkUGx1Z2luKFdp'@;
put 'LG1vLCRhLCgpPT57dXImJnVyKCksRnQoKX0pfHwkYShXaSl9U3QoKSwic3RyaW5nIj09dHlwZW9mIEx0PyhCcz11cixmMD0iYWwgIisoV2k9THQpLCh2b2lkIDApKFdpLG1zPT57eGUobXMsJ0xvYWRpbmcgZGF0YSBmaWxlICInK1dpKyciIGZhaWxlZCAobm8gYXJyYXlCdWZmZXIpLicpLChX'@;
put 'aT0+e3RhKFdpKX0pKG5ldyBVaW50OEFycmF5KG1zKSksZjAmJkZ0KCl9LG1zPT57aWYoIUJzKXRocm93J0xvYWRpbmcgZGF0YSBmaWxlICInK1dpKyciIGZhaWxlZC4nO0JzKCl9KSxmMCYmU3QoKSk6dGEoTHQpfSxpbmRleGVkREI6KCk9PndpbmRvdy5pbmRleGVkREJ8fHdpbmRvdy5tb3pJ'@;
put 'bmRleGVkREJ8fHdpbmRvdy53ZWJraXRJbmRleGVkREJ8fHdpbmRvdy5tc0luZGV4ZWREQixEQl9OQU1FOigpPT4iRU1fRlNfIit3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUsREJfVkVSU0lPTjoyMCxEQl9TVE9SRV9OQU1FOiJGSUxFX0RBVEEiLHNhdmVGaWxlc1RvREI6KHN0LHl0LEx0KT0+'@;
put 'e3l0PXl0fHwoKCk9Pnt9KSxMdD1MdHx8KCgpPT57fSk7dmFyIGFuPXh0LmluZGV4ZWREQigpO3RyeXt2YXIga249YW4ub3Blbih4dC5EQl9OQU1FKCkseHQuREJfVkVSU0lPTil9Y2F0Y2gobHIpe3JldHVybiBMdChscil9a24ub251cGdyYWRlbmVlZGVkPSgpPT57TygiY3JlYXRpbmcgZGIi'@;
put 'KSxrbi5yZXN1bHQuY3JlYXRlT2JqZWN0U3RvcmUoeHQuREJfU1RPUkVfTkFNRSl9LGtuLm9uc3VjY2Vzcz0oKT0+e3ZhciBscj1rbi5yZXN1bHQudHJhbnNhY3Rpb24oW3h0LkRCX1NUT1JFX05BTUVdLCJyZWFkd3JpdGUiKSx1cj1sci5vYmplY3RTdG9yZSh4dC5EQl9TVE9SRV9OQU1FKSxI'@;
put 'cj0wLHZvPTAsQW89c3QubGVuZ3RoO2Z1bmN0aW9uIG1vKCl7MD09dm8/eXQoKTpMdCgpfXN0LmZvckVhY2godGE9Pnt2YXIgV2k9dXIucHV0KHh0LmFuYWx5emVQYXRoKHRhKS5vYmplY3QuY29udGVudHMsdGEpO1dpLm9uc3VjY2Vzcz0oKT0+eysrSHIrdm89PUFvJiZtbygpfSxXaS5vbmVy'@;
put 'cm9yPSgpPT57dm8rKyxIcit2bz09QW8mJm1vKCl9fSksbHIub25lcnJvcj1MdH0sa24ub25lcnJvcj1MdH0sbG9hZEZpbGVzRnJvbURCOihzdCx5dCxMdCk9Pnt5dD15dHx8KCgpPT57fSksTHQ9THR8fCgoKT0+e30pO3ZhciBhbj14dC5pbmRleGVkREIoKTt0cnl7dmFyIGtuPWFuLm9wZW4o'@;
put 'eHQuREJfTkFNRSgpLHh0LkRCX1ZFUlNJT04pfWNhdGNoKGxyKXtyZXR1cm4gTHQobHIpfWtuLm9udXBncmFkZW5lZWRlZD1MdCxrbi5vbnN1Y2Nlc3M9KCk9Pnt2YXIgbHI9a24ucmVzdWx0O3RyeXt2YXIgdXI9bHIudHJhbnNhY3Rpb24oW3h0LkRCX1NUT1JFX05BTUVdLCJyZWFkb25seSIp'@;
put 'fWNhdGNoKFdpKXtyZXR1cm4gdm9pZCBMdChXaSl9dmFyIEhyPXVyLm9iamVjdFN0b3JlKHh0LkRCX1NUT1JFX05BTUUpLHZvPTAsQW89MCxtbz1zdC5sZW5ndGg7ZnVuY3Rpb24gdGEoKXswPT1Bbz95dCgpOkx0KCl9c3QuZm9yRWFjaChXaT0+e3ZhciAkYT1Ici5nZXQoV2kpOyRhLm9uc3Vj'@;
put 'Y2Vzcz0oKT0+e3h0LmFuYWx5emVQYXRoKFdpKS5leGlzdHMmJnh0LnVubGluayhXaSkseHQuY3JlYXRlRGF0YUZpbGUocXIuZGlybmFtZShXaSkscXIuYmFzZW5hbWUoV2kpLCRhLnJlc3VsdCwhMCwhMCwhMCksKyt2bytBbz09bW8mJnRhKCl9LCRhLm9uZXJyb3I9KCk9PntBbysrLHZvK0Fv'@;
put 'PT1tbyYmdGEoKX19KSx1ci5vbmVycm9yPUx0fSxrbi5vbmVycm9yPUx0fX0sTGk9e0RFRkFVTFRfUE9MTE1BU0s6NSxjYWxjdWxhdGVBdDpmdW5jdGlvbihzdCx5dCxMdCl7aWYocXIuaXNBYnMoeXQpKXJldHVybiB5dDt2YXIgYW47aWYoYW49LTEwMD09PXN0P3h0LmN3ZCgpOkxpLmdldFN0'@;
put 'cmVhbUZyb21GRChzdCkucGF0aCwwPT15dC5sZW5ndGgpe2lmKCFMdCl0aHJvdyBuZXcgeHQuRXJybm9FcnJvcig0NCk7cmV0dXJuIGFufXJldHVybiBxci5qb2luMihhbix5dCl9LGRvU3RhdDpmdW5jdGlvbihzdCx5dCxMdCl7dHJ5e3ZhciBhbj1zdCh5dCl9Y2F0Y2goSHIpe2lmKEhyJiZI'@;
put 'ci5ub2RlJiZxci5ub3JtYWxpemUoeXQpIT09cXIubm9ybWFsaXplKHh0LmdldFBhdGgoSHIubm9kZSkpKXJldHVybi01NDt0aHJvdyBIcn1ndFtMdD4+Ml09YW4uZGV2LGd0W0x0Kzg+PjJdPWFuLmlubyxndFtMdCsxMj4+Ml09YW4ubW9kZSxqdFtMdCsxNj4+Ml09YW4ubmxpbmssZ3RbTHQr'@;
put 'MjA+PjJdPWFuLnVpZCxndFtMdCsyND4+Ml09YW4uZ2lkLGd0W0x0KzI4Pj4yXT1hbi5yZGV2LEVuPVthbi5zaXplPj4+MCwoQXI9YW4uc2l6ZSwrTWF0aC5hYnMoQXIpPj0xP0FyPjA/KDB8TWF0aC5taW4oK01hdGguZmxvb3IoQXIvNDI5NDk2NzI5NiksNDI5NDk2NzI5NSkpPj4+MDp+fitN'@;
put 'YXRoLmNlaWwoKEFyLSsofn5Bcj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLGd0W0x0KzQwPj4yXT1FblswXSxndFtMdCs0ND4+Ml09RW5bMV0sZ3RbTHQrNDg+PjJdPTQwOTYsZ3RbTHQrNTI+PjJdPWFuLmJsb2Nrczt2YXIga249YW4uYXRpbWUuZ2V0VGltZSgpLGxyPWFuLm10aW1lLmdl'@;
put 'dFRpbWUoKSx1cj1hbi5jdGltZS5nZXRUaW1lKCk7cmV0dXJuIEVuPVtNYXRoLmZsb29yKGtuLzFlMyk+Pj4wLChBcj1NYXRoLmZsb29yKGtuLzFlMyksK01hdGguYWJzKEFyKT49MT9Bcj4wPygwfE1hdGgubWluKCtNYXRoLmZsb29yKEFyLzQyOTQ5NjcyOTYpLDQyOTQ5NjcyOTUpKT4+PjA6'@;
put 'fn4rTWF0aC5jZWlsKChBci0rKH5+QXI+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxndFtMdCs1Nj4+Ml09RW5bMF0sZ3RbTHQrNjA+PjJdPUVuWzFdLGp0W0x0KzY0Pj4yXT1rbiUxZTMqMWUzLEVuPVtNYXRoLmZsb29yKGxyLzFlMyk+Pj4wLChBcj1NYXRoLmZsb29yKGxyLzFlMyksK01h'@;
put 'dGguYWJzKEFyKT49MT9Bcj4wPygwfE1hdGgubWluKCtNYXRoLmZsb29yKEFyLzQyOTQ5NjcyOTYpLDQyOTQ5NjcyOTUpKT4+PjA6fn4rTWF0aC5jZWlsKChBci0rKH5+QXI+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxndFtMdCs3Mj4+Ml09RW5bMF0sZ3RbTHQrNzY+PjJdPUVuWzFdLGp0'@;
put 'W0x0KzgwPj4yXT1sciUxZTMqMWUzLEVuPVtNYXRoLmZsb29yKHVyLzFlMyk+Pj4wLChBcj1NYXRoLmZsb29yKHVyLzFlMyksK01hdGguYWJzKEFyKT49MT9Bcj4wPygwfE1hdGgubWluKCtNYXRoLmZsb29yKEFyLzQyOTQ5NjcyOTYpLDQyOTQ5NjcyOTUpKT4+PjA6fn4rTWF0aC5jZWlsKChB'@;
put 'ci0rKH5+QXI+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxndFtMdCs4OD4+Ml09RW5bMF0sZ3RbTHQrOTI+PjJdPUVuWzFdLGp0W0x0Kzk2Pj4yXT11ciUxZTMqMWUzLEVuPVthbi5pbm8+Pj4wLChBcj1hbi5pbm8sK01hdGguYWJzKEFyKT49MT9Bcj4wPygwfE1hdGgubWluKCtNYXRoLmZs'@;
put 'b29yKEFyLzQyOTQ5NjcyOTYpLDQyOTQ5NjcyOTUpKT4+PjA6fn4rTWF0aC5jZWlsKChBci0rKH5+QXI+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxndFtMdCsxMDQ+PjJdPUVuWzBdLGd0W0x0KzEwOD4+Ml09RW5bMV0sMH0sZG9Nc3luYzpmdW5jdGlvbihzdCx5dCxMdCxhbixrbil7aWYo'@;
put 'IXh0LmlzRmlsZSh5dC5ub2RlLm1vZGUpKXRocm93IG5ldyB4dC5FcnJub0Vycm9yKDQzKTtpZigyJmFuKXJldHVybiAwO3ZhciBscj1sdC5zbGljZShzdCxzdCtMdCk7eHQubXN5bmMoeXQsbHIsa24sTHQsYW4pfSx2YXJhcmdzOnZvaWQgMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTGkudmFy'@;
put 'YXJncys9NCxndFtMaS52YXJhcmdzLTQ+PjJdfSxnZXRTdHI6ZnVuY3Rpb24oc3Qpe3JldHVybiBRbihzdCl9LGdldFN0cmVhbUZyb21GRDpmdW5jdGlvbihzdCl7dmFyIHl0PXh0LmdldFN0cmVhbShzdCk7aWYoIXl0KXRocm93IG5ldyB4dC5FcnJub0Vycm9yKDgpO3JldHVybiB5dH19LFph'@;
put 'PVtdO2Z1bmN0aW9uIHZsKHN0KXt0cnl7cmV0dXJuIGFlLmdyb3coc3QtVmUuYnl0ZUxlbmd0aCs2NTUzNT4+PjE2KSxacihhZS5idWZmZXIpLDF9Y2F0Y2h7fX12YXIgaHM9e307ZnVuY3Rpb24gSHMoKXtpZighSHMuc3RyaW5ncyl7dmFyIHN0PXtVU0VSOiJ3ZWJfdXNlciIsTE9HTkFNRToi'@;
put 'd2ViX3VzZXIiLFBBVEg6Ii8iLFBXRDoiLyIsSE9NRToiL2hvbWUvd2ViX3VzZXIiLExBTkc6KCJvYmplY3QiPT10eXBlb2YgbmF2aWdhdG9yJiZuYXZpZ2F0b3IubGFuZ3VhZ2VzJiZuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdfHwiQyIpLnJlcGxhY2UoIi0iLCJfIikrIi5VVEYtOCIsXzptfHwi'@;
put 'Li90aGlzLnByb2dyYW0ifTtmb3IodmFyIHl0IGluIGhzKXZvaWQgMD09PWhzW3l0XT9kZWxldGUgc3RbeXRdOnN0W3l0XT1oc1t5dF07dmFyIEx0PVtdO2Zvcih2YXIgeXQgaW4gc3QpTHQucHVzaCh5dCsiPSIrc3RbeXRdKTtIcy5zdHJpbmdzPUx0fXJldHVybiBIcy5zdHJpbmdzfWZ1bmN0'@;
put 'aW9uIHN1KHN0KXtyZXR1cm4gc3QlND09MCYmKHN0JTEwMCE9MHx8c3QlNDAwPT0wKX12YXIgQjE9WzMxLDI5LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxqMT1bMzEsMjgsMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdLHRjPWZ1bmN0aW9uKHN0LHl0LEx0LGFuKXtzdHx8'@;
put 'KHN0PXRoaXMpLHRoaXMucGFyZW50PXN0LHRoaXMubW91bnQ9c3QubW91bnQsdGhpcy5tb3VudGVkPW51bGwsdGhpcy5pZD14dC5uZXh0SW5vZGUrKyx0aGlzLm5hbWU9eXQsdGhpcy5tb2RlPUx0LHRoaXMubm9kZV9vcHM9e30sdGhpcy5zdHJlYW1fb3BzPXt9LHRoaXMucmRldj1hbn07T2Jq'@;
put 'ZWN0LmRlZmluZVByb3BlcnRpZXModGMucHJvdG90eXBlLHtyZWFkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMzY1PT0oMzY1JnRoaXMubW9kZSl9LHNldDpmdW5jdGlvbihzdCl7c3Q/dGhpcy5tb2RlfD0zNjU6dGhpcy5tb2RlJj0tMzY2fX0sd3JpdGU6e2dldDpmdW5jdGlvbigpe3JldHVy'@;
put 'biAxNDY9PSgxNDYmdGhpcy5tb2RlKX0sc2V0OmZ1bmN0aW9uKHN0KXtzdD90aGlzLm1vZGV8PTE0Njp0aGlzLm1vZGUmPS0xNDd9fSxpc0ZvbGRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHh0LmlzRGlyKHRoaXMubW9kZSl9fSxpc0RldmljZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHh0'@;
put 'LmlzQ2hyZGV2KHRoaXMubW9kZSl9fX0pLHh0LkZTTm9kZT10Yyx4dC5zdGF0aWNJbml0KCk7dmFyIFUxPXtiOmZ1bmN0aW9uKHN0LHl0LEx0KXt0aHJvdyBuZXcgZGkoc3QpLmluaXQoeXQsTHQpLHN0fSxsOmZ1bmN0aW9uKHN0LHl0LEx0LGFuKXt0cnl7aWYoeXQ9TGkuZ2V0U3RyKHl0KSx5'@;
put 'dD1MaS5jYWxjdWxhdGVBdChzdCx5dCksLTgmTHQpcmV0dXJuLTI4O3ZhciBrbj14dC5sb29rdXBQYXRoKHl0LHtmb2xsb3c6ITB9KS5ub2RlO2lmKCFrbilyZXR1cm4tNDQ7dmFyIGxyPSIiO3JldHVybiA0Jkx0JiYobHIrPSJyIiksMiZMdCYmKGxyKz0idyIpLDEmTHQmJihscis9IngiKSxs'@;
put 'ciYmeHQubm9kZVBlcm1pc3Npb25zKGtuLGxyKT8tMjowfWNhdGNoKHVyKXtpZih2b2lkIDA9PT14dHx8ISh1ciBpbnN0YW5jZW9mIHh0LkVycm5vRXJyb3IpKXRocm93IHVyO3JldHVybi11ci5lcnJub319LGk6ZnVuY3Rpb24oc3QseXQsTHQpe0xpLnZhcmFyZ3M9THQ7dHJ5e3ZhciBhbj1M'@;
put 'aS5nZXRTdHJlYW1Gcm9tRkQoc3QpO3N3aXRjaCh5dCl7Y2FzZSAwOnJldHVybihrbj1MaS5nZXQoKSk8MD8tMjg6eHQuY3JlYXRlU3RyZWFtKGFuLGtuKS5mZDtjYXNlIDE6Y2FzZSAyOmNhc2UgNjpjYXNlIDc6cmV0dXJuIDA7Y2FzZSAzOnJldHVybiBhbi5mbGFncztjYXNlIDQ6dmFyIGtu'@;
put 'PUxpLmdldCgpO3JldHVybiBhbi5mbGFnc3w9a24sMDtjYXNlIDU6cmV0dXJuIGtuPUxpLmdldCgpLGR0W2tuKzA+PjFdPTIsMDtjYXNlIDE2OmNhc2UgODpkZWZhdWx0OnJldHVybi0yODtjYXNlIDk6cmV0dXJuIGd0W0dsKCk+PjJdPTI4LC0xfX1jYXRjaCh1cil7aWYodm9pZCAwPT09eHR8'@;
put 'fCEodXIgaW5zdGFuY2VvZiB4dC5FcnJub0Vycm9yKSl0aHJvdyB1cjtyZXR1cm4tdXIuZXJybm99fSx3OmZ1bmN0aW9uKHN0LHl0KXt0cnl7dmFyIEx0PUxpLmdldFN0cmVhbUZyb21GRChzdCk7cmV0dXJuIExpLmRvU3RhdCh4dC5zdGF0LEx0LnBhdGgseXQpfWNhdGNoKGFuKXtpZih2b2lk'@;
put 'IDA9PT14dHx8IShhbiBpbnN0YW5jZW9mIHh0LkVycm5vRXJyb3IpKXRocm93IGFuO3JldHVybi1hbi5lcnJub319LHg6ZnVuY3Rpb24oc3QseXQsTHQpe0xpLnZhcmFyZ3M9THQ7dHJ5e3ZhciBhbj1MaS5nZXRTdHJlYW1Gcm9tRkQoc3QpO3N3aXRjaCh5dCl7Y2FzZSAyMTUwOTpjYXNlIDIx'@;
put 'NTA1OmNhc2UgMjE1MTA6Y2FzZSAyMTUxMTpjYXNlIDIxNTEyOmNhc2UgMjE1MDY6Y2FzZSAyMTUwNzpjYXNlIDIxNTA4OmNhc2UgMjE1MjM6Y2FzZSAyMTUyNDpyZXR1cm4gYW4udHR5PzA6LTU5O2Nhc2UgMjE1MTk6aWYoIWFuLnR0eSlyZXR1cm4tNTk7dmFyIGtuPUxpLmdldCgpO3JldHVy'@;
put 'biBndFtrbj4+Ml09MCwwO2Nhc2UgMjE1MjA6cmV0dXJuIGFuLnR0eT8tMjg6LTU5O2Nhc2UgMjE1MzE6cmV0dXJuIGtuPUxpLmdldCgpLHh0LmlvY3RsKGFuLHl0LGtuKTtkZWZhdWx0OnJldHVybi0yOH19Y2F0Y2gobHIpe2lmKHZvaWQgMD09PXh0fHwhKGxyIGluc3RhbmNlb2YgeHQuRXJy'@;
put 'bm9FcnJvcikpdGhyb3cgbHI7cmV0dXJuLWxyLmVycm5vfX0sdTpmdW5jdGlvbihzdCx5dCxMdCxhbil7dHJ5e3l0PUxpLmdldFN0cih5dCk7dmFyIGtuPTI1NiZhbixscj00MDk2JmFuO3JldHVybiBhbiY9LTY0MDEseXQ9TGkuY2FsY3VsYXRlQXQoc3QseXQsbHIpLExpLmRvU3RhdChrbj94'@;
put 'dC5sc3RhdDp4dC5zdGF0LHl0LEx0KX1jYXRjaCh1cil7aWYodm9pZCAwPT09eHR8fCEodXIgaW5zdGFuY2VvZiB4dC5FcnJub0Vycm9yKSl0aHJvdyB1cjtyZXR1cm4tdXIuZXJybm99fSxkOmZ1bmN0aW9uKHN0LHl0LEx0LGFuKXtMaS52YXJhcmdzPWFuO3RyeXt5dD1MaS5nZXRTdHIoeXQp'@;
put 'LHl0PUxpLmNhbGN1bGF0ZUF0KHN0LHl0KTt2YXIga249YW4/TGkuZ2V0KCk6MDtyZXR1cm4geHQub3Blbih5dCxMdCxrbikuZmR9Y2F0Y2gobHIpe2lmKHZvaWQgMD09PXh0fHwhKGxyIGluc3RhbmNlb2YgeHQuRXJybm9FcnJvcikpdGhyb3cgbHI7cmV0dXJuLWxyLmVycm5vfX0sdjpmdW5j'@;
put 'dGlvbihzdCx5dCl7dHJ5e3JldHVybiBzdD1MaS5nZXRTdHIoc3QpLExpLmRvU3RhdCh4dC5zdGF0LHN0LHl0KX1jYXRjaChMdCl7aWYodm9pZCAwPT09eHR8fCEoTHQgaW5zdGFuY2VvZiB4dC5FcnJub0Vycm9yKSl0aHJvdyBMdDtyZXR1cm4tTHQuZXJybm99fSxwOmZ1bmN0aW9uKHN0LHl0'@;
put 'LEx0KXt0cnl7cmV0dXJuIHl0PUxpLmdldFN0cih5dCkseXQ9TGkuY2FsY3VsYXRlQXQoc3QseXQpLDA9PT1MdD94dC51bmxpbmsoeXQpOjUxMj09PUx0P3h0LnJtZGlyKHl0KTpXdCgiSW52YWxpZCBmbGFncyBwYXNzZWQgdG8gdW5saW5rYXQiKSwwfWNhdGNoKGFuKXtpZih2b2lkIDA9PT14'@;
put 'dHx8IShhbiBpbnN0YW5jZW9mIHh0LkVycm5vRXJyb3IpKXRocm93IGFuO3JldHVybi1hbi5lcnJub319LGo6ZnVuY3Rpb24oKXtyZXR1cm4hMH0scTpmdW5jdGlvbihzdCx5dCxMdCxhbixrbixscix1cil7dHJ5e3ZhciBIcj1MaS5nZXRTdHJlYW1Gcm9tRkQoYW4pLHZvPXh0Lm1tYXAoSHIs'@;
put 'c3Qsa24seXQsTHQpLEFvPXZvLnB0cjtyZXR1cm4gZ3RbbHI+PjJdPXZvLmFsbG9jYXRlZCxqdFt1cj4+Ml09QW8sMH1jYXRjaChtbyl7aWYodm9pZCAwPT09eHR8fCEobW8gaW5zdGFuY2VvZiB4dC5FcnJub0Vycm9yKSl0aHJvdyBtbztyZXR1cm4tbW8uZXJybm99fSxyOmZ1bmN0aW9uKHN0'@;
put 'LHl0LEx0LGFuLGtuLGxyKXt0cnl7dmFyIHVyPUxpLmdldFN0cmVhbUZyb21GRChrbik7MiZMdCYmTGkuZG9Nc3luYyhzdCx1cix5dCxhbixscikseHQubXVubWFwKHVyKX1jYXRjaChIcil7aWYodm9pZCAwPT09eHR8fCEoSHIgaW5zdGFuY2VvZiB4dC5FcnJub0Vycm9yKSl0aHJvdyBIcjty'@;
put 'ZXR1cm4tSHIuZXJybm99fSxhOmZ1bmN0aW9uKCl7V3QoIiIpfSx5OmZ1bmN0aW9uKHN0LHl0LEx0KXtyZXR1cm4gZnVuY3Rpb24gZHMoc3QseXQsTHQpe3ZhciBhbj1mdW5jdGlvbihrbixscil7dmFyIHVyO2ZvcihaYS5sZW5ndGg9MCxscj4+PTI7dXI9bHRba24rK107KWxyKz0xMDUhPXVy'@;
put 'JmxyLFphLnB1c2goMTA1PT11cj9ndFtscl06cm5bbHIrKz4+MV0pLCsrbHI7cmV0dXJuIFphfSh5dCxMdCk7cmV0dXJuIGRyW3N0XS5hcHBseShudWxsLGFuKX0oc3QseXQsTHQpfSxlOmZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93KCl9LGs6ZnVuY3Rpb24oc3QseXQsTHQpe2x0LmNvcHlX'@;
put 'aXRoaW4oc3QseXQseXQrTHQpfSxvOmZ1bmN0aW9uKHN0KXt2YXIgeXQsYW49bHQubGVuZ3RoLGtuPTIxNDc0ODM2NDg7aWYoKHN0Pj4+PTApPmtuKXJldHVybiExO2Zvcih2YXIgbHI9MTtscjw9NDtscio9Mil7dmFyIHVyPWFuKigxKy4yL2xyKTtpZih1cj1NYXRoLm1pbih1cixzdCsxMDA2'@;
put 'NjMyOTYpLHZsKE1hdGgubWluKGtuLCh5dD1NYXRoLm1heChzdCx1cikpKyg2NTUzNi15dCU2NTUzNiklNjU1MzYpKSlyZXR1cm4hMH1yZXR1cm4hMX0sczpmdW5jdGlvbihzdCx5dCl7dmFyIEx0PTA7cmV0dXJuIEhzKCkuZm9yRWFjaChmdW5jdGlvbihhbixrbil7dmFyIGxyPXl0K0x0O2p0'@;
put 'W3N0KzQqa24+PjJdPWxyLGZ1bmN0aW9uKHVyLEhyLHZvKXtmb3IodmFyIEFvPTA7QW88dXIubGVuZ3RoOysrQW8pWmVbSHIrKz4+MF09dXIuY2hhckNvZGVBdChBbyk7WmVbSHI+PjBdPTB9KGFuLGxyKSxMdCs9YW4ubGVuZ3RoKzF9KSwwfSx0OmZ1bmN0aW9uKHN0LHl0KXt2YXIgTHQ9SHMo'@;
put 'KTtqdFtzdD4+Ml09THQubGVuZ3RoO3ZhciBhbj0wO3JldHVybiBMdC5mb3JFYWNoKGZ1bmN0aW9uKGtuKXthbis9a24ubGVuZ3RoKzF9KSxqdFt5dD4+Ml09YW4sMH0sZjpmdW5jdGlvbihzdCx5dCl7IWZ1bmN0aW9uIGMwKHN0KXtwZXx8KGYub25FeGl0JiZmLm9uRXhpdChzdCksYmU9ITAp'@;
put 'LF8oc3QsbmV3IExyKHN0KSl9KHN0KX0sYzpmdW5jdGlvbihzdCl7dHJ5e3ZhciB5dD1MaS5nZXRTdHJlYW1Gcm9tRkQoc3QpO3JldHVybiB4dC5jbG9zZSh5dCksMH1jYXRjaChMdCl7aWYodm9pZCAwPT09eHR8fCEoTHQgaW5zdGFuY2VvZiB4dC5FcnJub0Vycm9yKSl0aHJvdyBMdDtyZXR1'@;
put 'cm4gTHQuZXJybm99fSxnOmZ1bmN0aW9uKHN0LHl0LEx0LGFuKXt0cnl7dmFyIGtuPWZ1bmN0aW9uKGxyLHVyLEhyLHZvKXtmb3IodmFyIEFvPTAsbW89MDttbzxIcjttbysrKXt2YXIgdGE9anRbdXI+PjJdLFdpPWp0W3VyKzQ+PjJdO3VyKz04O3ZhciAkYT14dC5yZWFkKGxyLFplLHRhLFdp'@;
put 'LHZvaWQgMCk7aWYoJGE8MClyZXR1cm4tMTtpZihBbys9JGEsJGE8V2kpYnJlYWt9cmV0dXJuIEFvfShMaS5nZXRTdHJlYW1Gcm9tRkQoc3QpLHl0LEx0KTtyZXR1cm4ganRbYW4+PjJdPWtuLDB9Y2F0Y2gobHIpe2lmKHZvaWQgMD09PXh0fHwhKGxyIGluc3RhbmNlb2YgeHQuRXJybm9FcnJv'@;
put 'cikpdGhyb3cgbHI7cmV0dXJuIGxyLmVycm5vfX0sbTpmdW5jdGlvbihzdCx5dCxMdCxhbixrbil7dHJ5e3ZhciBscj0odm89THQpKzIwOTcxNTI+Pj4wPDQxOTQzMDUtISEoSHI9eXQpPyhIcj4+PjApKzQyOTQ5NjcyOTYqdm86TmFOO2lmKGlzTmFOKGxyKSlyZXR1cm4gNjE7dmFyIHVyPUxp'@;
put 'LmdldFN0cmVhbUZyb21GRChzdCk7cmV0dXJuIHh0Lmxsc2Vlayh1cixscixhbiksRW49W3VyLnBvc2l0aW9uPj4+MCwoQXI9dXIucG9zaXRpb24sK01hdGguYWJzKEFyKT49MT9Bcj4wPygwfE1hdGgubWluKCtNYXRoLmZsb29yKEFyLzQyOTQ5NjcyOTYpLDQyOTQ5NjcyOTUpKT4+PjA6fn4r'@;
put 'TWF0aC5jZWlsKChBci0rKH5+QXI+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxndFtrbj4+Ml09RW5bMF0sZ3Rba24rND4+Ml09RW5bMV0sdXIuZ2V0ZGVudHMmJjA9PT1sciYmMD09PWFuJiYodXIuZ2V0ZGVudHM9bnVsbCksMH1jYXRjaChBbyl7aWYodm9pZCAwPT09eHR8fCEoQW8gaW5z'@;
put 'dGFuY2VvZiB4dC5FcnJub0Vycm9yKSl0aHJvdyBBbztyZXR1cm4gQW8uZXJybm99dmFyIEhyLHZvfSxoOmZ1bmN0aW9uKHN0LHl0LEx0LGFuKXt0cnl7dmFyIGtuPWZ1bmN0aW9uKGxyLHVyLEhyLHZvKXtmb3IodmFyIEFvPTAsbW89MDttbzxIcjttbysrKXt2YXIgdGE9anRbdXI+PjJdLFdp'@;
put 'PWp0W3VyKzQ+PjJdO3VyKz04O3ZhciAkYT14dC53cml0ZShscixaZSx0YSxXaSx2b2lkIDApO2lmKCRhPDApcmV0dXJuLTE7QW8rPSRhfXJldHVybiBBb30oTGkuZ2V0U3RyZWFtRnJvbUZEKHN0KSx5dCxMdCk7cmV0dXJuIGp0W2FuPj4yXT1rbiwwfWNhdGNoKGxyKXtpZih2b2lkIDA9PT14'@;
put 'dHx8IShsciBpbnN0YW5jZW9mIHh0LkVycm5vRXJyb3IpKXRocm93IGxyO3JldHVybiBsci5lcnJub319LG46ZnVuY3Rpb24oc3QseXQsTHQsYW4sa24pe3JldHVybiBmdW5jdGlvbiBJYyhzdCx5dCxMdCxhbil7dmFyIGtuPWd0W2FuKzQwPj4yXSxscj17dG1fc2VjOmd0W2FuPj4yXSx0bV9t'@;
put 'aW46Z3RbYW4rND4+Ml0sdG1faG91cjpndFthbis4Pj4yXSx0bV9tZGF5Omd0W2FuKzEyPj4yXSx0bV9tb246Z3RbYW4rMTY+PjJdLHRtX3llYXI6Z3RbYW4rMjA+PjJdLHRtX3dkYXk6Z3RbYW4rMjQ+PjJdLHRtX3lkYXk6Z3RbYW4rMjg+PjJdLHRtX2lzZHN0Omd0W2FuKzMyPj4yXSx0bV9n'@;
put 'bXRvZmY6Z3RbYW4rMzY+PjJdLHRtX3pvbmU6a24/UW4oa24pOiIifSx1cj1RbihMdCksSHI9eyIlYyI6IiVhICViICVkICVIOiVNOiVTICVZIiwiJUQiOiIlbS8lZC8leSIsIiVGIjoiJVktJW0tJWQiLCIlaCI6IiViIiwiJXIiOiIlSTolTTolUyAlcCIsIiVSIjoiJUg6JU0iLCIlVCI6IiVI'@;
put 'OiVNOiVTIiwiJXgiOiIlbS8lZC8leSIsIiVYIjoiJUg6JU06JVMiLCIlRWMiOiIlYyIsIiVFQyI6IiVDIiwiJUV4IjoiJW0vJWQvJXkiLCIlRVgiOiIlSDolTTolUyIsIiVFeSI6IiV5IiwiJUVZIjoiJVkiLCIlT2QiOiIlZCIsIiVPZSI6IiVlIiwiJU9IIjoiJUgiLCIlT0kiOiIlSSIsIiVP'@;
put 'bSI6IiVtIiwiJU9NIjoiJU0iLCIlT1MiOiIlUyIsIiVPdSI6IiV1IiwiJU9VIjoiJVUiLCIlT1YiOiIlViIsIiVPdyI6IiV3IiwiJU9XIjoiJVciLCIlT3kiOiIleSJ9O2Zvcih2YXIgdm8gaW4gSHIpdXI9dXIucmVwbGFjZShuZXcgUmVnRXhwKHZvLCJnIiksSHJbdm9dKTt2YXIgQW89WyJT'@;
put 'dW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLG1vPVsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5v'@;
put 'dmVtYmVyIiwiRGVjZW1iZXIiXTtmdW5jdGlvbiB0YShBaSxXbyxuYyl7Zm9yKHZhciBqcz0ibnVtYmVyIj09dHlwZW9mIEFpP0FpLnRvU3RyaW5nKCk6QWl8fCIiO2pzLmxlbmd0aDxXbzspanM9bmNbMF0ranM7cmV0dXJuIGpzfWZ1bmN0aW9uIFdpKEFpLFdvKXtyZXR1cm4gdGEoQWksV28s'@;
put 'IjAiKX1mdW5jdGlvbiAkYShBaSxXbyl7ZnVuY3Rpb24gbmModXUpe3JldHVybiB1dTwwPy0xOnV1PjA/MTowfXZhciBqcztyZXR1cm4gMD09PShqcz1uYyhBaS5nZXRGdWxsWWVhcigpLVdvLmdldEZ1bGxZZWFyKCkpKSYmMD09PShqcz1uYyhBaS5nZXRNb250aCgpLVdvLmdldE1vbnRoKCkp'@;
put 'KSYmKGpzPW5jKEFpLmdldERhdGUoKS1Xby5nZXREYXRlKCkpKSxqc31mdW5jdGlvbiBCcyhBaSl7c3dpdGNoKEFpLmdldERheSgpKXtjYXNlIDA6cmV0dXJuIG5ldyBEYXRlKEFpLmdldEZ1bGxZZWFyKCktMSwxMSwyOSk7Y2FzZSAxOnJldHVybiBBaTtjYXNlIDI6cmV0dXJuIG5ldyBEYXRl'@;
put 'KEFpLmdldEZ1bGxZZWFyKCksMCwzKTtjYXNlIDM6cmV0dXJuIG5ldyBEYXRlKEFpLmdldEZ1bGxZZWFyKCksMCwyKTtjYXNlIDQ6cmV0dXJuIG5ldyBEYXRlKEFpLmdldEZ1bGxZZWFyKCksMCwxKTtjYXNlIDU6cmV0dXJuIG5ldyBEYXRlKEFpLmdldEZ1bGxZZWFyKCktMSwxMSwzMSk7Y2Fz'@;
put 'ZSA2OnJldHVybiBuZXcgRGF0ZShBaS5nZXRGdWxsWWVhcigpLTEsMTEsMzApfX1mdW5jdGlvbiBPcyhBaSl7dmFyIFdvPWZ1bmN0aW9uKGpOdCxURil7Zm9yKHZhciBHMT1uZXcgRGF0ZShqTnQuZ2V0VGltZSgpKTtURj4wOyl7dmFyIHpOdD1zdShHMS5nZXRGdWxsWWVhcigpKSx4UT1HMS5n'@;
put 'ZXRNb250aCgpLGF2ZT0oek50P0IxOmoxKVt4UV07aWYoIShURj5hdmUtRzEuZ2V0RGF0ZSgpKSlyZXR1cm4gRzEuc2V0RGF0ZShHMS5nZXREYXRlKCkrVEYpLEcxO1RGLT1hdmUtRzEuZ2V0RGF0ZSgpKzEsRzEuc2V0RGF0ZSgxKSx4UTwxMT9HMS5zZXRNb250aCh4USsxKTooRzEuc2V0TW9u'@;
put 'dGgoMCksRzEuc2V0RnVsbFllYXIoRzEuZ2V0RnVsbFllYXIoKSsxKSl9cmV0dXJuIEcxfShuZXcgRGF0ZShBaS50bV95ZWFyKzE5MDAsMCwxKSxBaS50bV95ZGF5KSxuYz1uZXcgRGF0ZShXby5nZXRGdWxsWWVhcigpLDAsNCksanM9bmV3IERhdGUoV28uZ2V0RnVsbFllYXIoKSsxLDAsNCks'@;
put 'dXU9QnMobmMpLEJOdD1Ccyhqcyk7cmV0dXJuICRhKHV1LFdvKTw9MD8kYShCTnQsV28pPD0wP1dvLmdldEZ1bGxZZWFyKCkrMTpXby5nZXRGdWxsWWVhcigpOldvLmdldEZ1bGxZZWFyKCktMX12YXIgZjA9eyIlYSI6ZnVuY3Rpb24oQWkpe3JldHVybiBBb1tBaS50bV93ZGF5XS5zdWJzdHJp'@;
put 'bmcoMCwzKX0sIiVBIjpmdW5jdGlvbihBaSl7cmV0dXJuIEFvW0FpLnRtX3dkYXldfSwiJWIiOmZ1bmN0aW9uKEFpKXtyZXR1cm4gbW9bQWkudG1fbW9uXS5zdWJzdHJpbmcoMCwzKX0sIiVCIjpmdW5jdGlvbihBaSl7cmV0dXJuIG1vW0FpLnRtX21vbl19LCIlQyI6ZnVuY3Rpb24oQWkpe3Jl'@;
put 'dHVybiBXaSgoQWkudG1feWVhcisxOTAwKS8xMDB8MCwyKX0sIiVkIjpmdW5jdGlvbihBaSl7cmV0dXJuIFdpKEFpLnRtX21kYXksMil9LCIlZSI6ZnVuY3Rpb24oQWkpe3JldHVybiB0YShBaS50bV9tZGF5LDIsIiAiKX0sIiVnIjpmdW5jdGlvbihBaSl7cmV0dXJuIE9zKEFpKS50b1N0cmlu'@;
put 'ZygpLnN1YnN0cmluZygyKX0sIiVHIjpmdW5jdGlvbihBaSl7cmV0dXJuIE9zKEFpKX0sIiVIIjpmdW5jdGlvbihBaSl7cmV0dXJuIFdpKEFpLnRtX2hvdXIsMil9LCIlSSI6ZnVuY3Rpb24oQWkpe3ZhciBXbz1BaS50bV9ob3VyO3JldHVybiAwPT1Xbz9Xbz0xMjpXbz4xMiYmKFdvLT0xMiks'@;
put 'V2koV28sMil9LCIlaiI6ZnVuY3Rpb24oQWkpe3JldHVybiBXaShBaS50bV9tZGF5K2Z1bmN0aW9uKFdvLG5jKXtmb3IodmFyIGpzPTAsdXU9MDt1dTw9bmM7anMrPVdvW3V1KytdKTtyZXR1cm4ganN9KHN1KEFpLnRtX3llYXIrMTkwMCk/QjE6ajEsQWkudG1fbW9uLTEpLDMpfSwiJW0iOmZ1'@;
put 'bmN0aW9uKEFpKXtyZXR1cm4gV2koQWkudG1fbW9uKzEsMil9LCIlTSI6ZnVuY3Rpb24oQWkpe3JldHVybiBXaShBaS50bV9taW4sMil9LCIlbiI6ZnVuY3Rpb24oKXtyZXR1cm4iXG4ifSwiJXAiOmZ1bmN0aW9uKEFpKXtyZXR1cm4gQWkudG1faG91cj49MCYmQWkudG1faG91cjwxMj8iQU0i'@;
put 'OiJQTSJ9LCIlUyI6ZnVuY3Rpb24oQWkpe3JldHVybiBXaShBaS50bV9zZWMsMil9LCIldCI6ZnVuY3Rpb24oKXtyZXR1cm4iXHQifSwiJXUiOmZ1bmN0aW9uKEFpKXtyZXR1cm4gQWkudG1fd2RheXx8N30sIiVVIjpmdW5jdGlvbihBaSl7cmV0dXJuIFdpKE1hdGguZmxvb3IoKEFpLnRtX3lk'@;
put 'YXkrNy1BaS50bV93ZGF5KS83KSwyKX0sIiVWIjpmdW5jdGlvbihBaSl7dmFyIFdvPU1hdGguZmxvb3IoKEFpLnRtX3lkYXkrNy0oQWkudG1fd2RheSs2KSU3KS83KTtpZigoQWkudG1fd2RheSszNzEtQWkudG1feWRheS0yKSU3PD0yJiZXbysrLFdvKXtpZig1Mz09V28pe3ZhciBuYz0oQWku'@;
put 'dG1fd2RheSszNzEtQWkudG1feWRheSklNzs0PT1uY3x8Mz09bmMmJnN1KEFpLnRtX3llYXIpfHwoV289MSl9fWVsc2V7V289NTI7dmFyIGpzPShBaS50bV93ZGF5KzctQWkudG1feWRheS0xKSU3Oyg0PT1qc3x8NT09anMmJnN1KEFpLnRtX3llYXIlNDAwLTEpKSYmV28rK31yZXR1cm4gV2ko'@;
put 'V28sMil9LCIldyI6ZnVuY3Rpb24oQWkpe3JldHVybiBBaS50bV93ZGF5fSwiJVciOmZ1bmN0aW9uKEFpKXtyZXR1cm4gV2koTWF0aC5mbG9vcigoQWkudG1feWRheSs3LShBaS50bV93ZGF5KzYpJTcpLzcpLDIpfSwiJXkiOmZ1bmN0aW9uKEFpKXtyZXR1cm4oQWkudG1feWVhcisxOTAwKS50'@;
put 'b1N0cmluZygpLnN1YnN0cmluZygyKX0sIiVZIjpmdW5jdGlvbihBaSl7cmV0dXJuIEFpLnRtX3llYXIrMTkwMH0sIiV6IjpmdW5jdGlvbihBaSl7dmFyIFdvPUFpLnRtX2dtdG9mZjtyZXR1cm4oV28+PTA/IisiOiItIikrKCIwMDAwIisoV289KFdvPU1hdGguYWJzKFdvKS82MCkvNjAqMTAw'@;
put 'K1dvJTYwKSkuc2xpY2UoLTQpfSwiJVoiOmZ1bmN0aW9uKEFpKXtyZXR1cm4gQWkudG1fem9uZX0sIiUlIjpmdW5jdGlvbigpe3JldHVybiIlIn19O2Zvcih2YXIgdm8gaW4gdXI9dXIucmVwbGFjZSgvJSUvZywiXDBcMCIpLGYwKXVyLmluY2x1ZGVzKHZvKSYmKHVyPXVyLnJlcGxhY2UobmV3'@;
put 'IFJlZ0V4cCh2bywiZyIpLGYwW3ZvXShscikpKTt2YXIgbXM9RG8odXI9dXIucmVwbGFjZSgvXDBcMC9nLCIlIiksITEpO3JldHVybiBtcy5sZW5ndGg+eXQ/MDooWmUuc2V0KG1zLHN0KSxtcy5sZW5ndGgtMSl9KHN0LHl0LEx0LGFuKX19OyhmdW5jdGlvbigpe3ZhciBzdD17YTpVMX07ZnVu'@;
put 'Y3Rpb24geXQoa24sbHIpe2YuYXNtPWtuLmV4cG9ydHMsWnIoKGFlPWYuYXNtLnopLmJ1ZmZlciksVm4udW5zaGlmdChmLmFzbS5BKSxGdCgpfWZ1bmN0aW9uIEx0KGtuKXt5dChrbi5pbnN0YW5jZSl9ZnVuY3Rpb24gYW4oa24pe3JldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGJyKHN0KXt0cnl7aWYoc3Q9PWlyJiZkKXJldHVybiBuZXcgVWludDhBcnJheShkKTt0aHJvdyJib3RoIGFzeW5jIGFuZCBzeW5jIGZldGNoaW5nIG9mIHRoZSB3YXNtIGZhaWxlZCJ9Y2F0Y2goeXQpe1d0KHl0KX19KGlyKX0pLnRoZW4oZnVuY3Rpb24o'@;
put 'bHIpe3JldHVybiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShscixzdCl9KS50aGVuKGZ1bmN0aW9uKGxyKXtyZXR1cm4gbHJ9KS50aGVuKGtuLGZ1bmN0aW9uKGxyKXtYKCJmYWlsZWQgdG8gYXN5bmNocm9ub3VzbHkgcHJlcGFyZSB3YXNtOiAiK2xyKSxXdChscil9KX1pZihTdCgpLGYuaW5z'@;
put 'dGFudGlhdGVXYXNtKXRyeXtyZXR1cm4gZi5pbnN0YW50aWF0ZVdhc20oc3QseXQpfWNhdGNoKGtuKXtYKCJNb2R1bGUuaW5zdGFudGlhdGVXYXNtIGNhbGxiYWNrIGZhaWxlZCB3aXRoIGVycm9yOiAiK2tuKSxhKGtuKX0oZHx8ImZ1bmN0aW9uIiE9dHlwZW9mIFdlYkFzc2VtYmx5Lmluc3Rh'@;
put 'bnRpYXRlU3RyZWFtaW5nfHx3bihpcil8fGZ1bmN0aW9uIFNuKHN0KXtyZXR1cm4gc3Quc3RhcnRzV2l0aCgiZmlsZTovLyIpfShpcil8fCJmdW5jdGlvbiIhPXR5cGVvZiBmZXRjaD9hbihMdCk6ZmV0Y2goaXIse2NyZWRlbnRpYWxzOiJzYW1lLW9yaWdpbiJ9KS50aGVuKGZ1bmN0aW9uKGtu'@;
put 'KXtyZXR1cm4gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmcoa24sc3QpLnRoZW4oTHQsZnVuY3Rpb24obHIpe3JldHVybiBYKCJ3YXNtIHN0cmVhbWluZyBjb21waWxlIGZhaWxlZDogIitsciksWCgiZmFsbGluZyBiYWNrIHRvIEFycmF5QnVmZmVyIGluc3RhbnRpYXRpb24iKSxh'@;
put 'bihMdCl9KX0pKS5jYXRjaChhKX0pKCksZi5fX193YXNtX2NhbGxfY3RvcnM9ZnVuY3Rpb24oKXtyZXR1cm4oZi5fX193YXNtX2NhbGxfY3RvcnM9Zi5hc20uQSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgWjE9Zi5fZW1zY3JpcHRlbl9iaW5kX1ZvaWRQdHJfX19kZXN0cm95X19fMD1m'@;
put 'dW5jdGlvbigpe3JldHVybihaMT1mLl9lbXNjcmlwdGVuX2JpbmRfVm9pZFB0cl9fX2Rlc3Ryb3lfX18wPWYuYXNtLkIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sR2Q9Zi5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X0dyYXBodml6XzI9ZnVuY3Rpb24oKXtyZXR1cm4oR2Q9Zi5fZW1zY3Jp'@;
put 'cHRlbl9iaW5kX0dyYXBodml6X0dyYXBodml6XzI9Zi5hc20uQykuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx6Zj1mLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfdmVyc2lvbl8wPWZ1bmN0aW9uKCl7cmV0dXJuKHpmPWYuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel92ZXJzaW9uXzA9Zi5h'@;
put 'c20uRCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxoYz1mLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfbGFzdEVycm9yXzA9ZnVuY3Rpb24oKXtyZXR1cm4oaGM9Zi5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2xhc3RFcnJvcl8wPWYuYXNtLkUpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0s'@;
put 'WTE9Zi5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2NyZWF0ZUZpbGVfMj1mdW5jdGlvbigpe3JldHVybihZMT1mLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfY3JlYXRlRmlsZV8yPWYuYXNtLkYpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0scHM9Zi5fZW1zY3JpcHRlbl9iaW5kX0dyYXBo'@;
put 'dml6X2xhc3RSZXN1bHRfMD1mdW5jdGlvbigpe3JldHVybihwcz1mLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfbGFzdFJlc3VsdF8wPWYuYXNtLkcpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdWw9Zi5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2xheW91dF8zPWZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuKHVsPWYuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9sYXlvdXRfMz1mLmFzbS5IKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHEwPWYuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKHEwPWYuX2Vtc2NyaXB0ZW5fYmluZF9HcmFw'@;
put 'aHZpel9fX2Rlc3Ryb3lfX18wPWYuYXNtLkkpLmFwcGx5KG51bGwsYXJndW1lbnRzKX07Zi5fZnJlZT1mdW5jdGlvbigpe3JldHVybihmLl9mcmVlPWYuYXNtLkspLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sZi5fbWFsbG9jPWZ1bmN0aW9uKCl7cmV0dXJuKGYuX21hbGxvYz1mLmFzbS5MKS5h'@;
put 'cHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBUcyxHbD1mLl9fX2Vycm5vX2xvY2F0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuKEdsPWYuX19fZXJybm9fbG9jYXRpb249Zi5hc20uTSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxOcz1mLl9lbXNjcmlwdGVuX2J1aWx0aW5fbWVtYWxpZ249ZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4oTnM9Zi5fZW1zY3JpcHRlbl9idWlsdGluX21lbWFsaWduPWYuYXNtLk4pLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sbHM9Zi5fX19jeGFfaXNfcG9pbnRlcl90eXBlPWZ1bmN0aW9uKCl7cmV0dXJuKGxzPWYuX19fY3hhX2lzX3BvaW50ZXJfdHlwZT1mLmFzbS5PKS5hcHBs'@;
put 'eShudWxsLGFyZ3VtZW50cyl9O2Z1bmN0aW9uIFN1KHN0KXtmdW5jdGlvbiB5dCgpe1RzfHwoVHM9ITAsZi5jYWxsZWRSdW49ITAsYmV8fChmLm5vRlNJbml0fHx4dC5pbml0LmluaXRpYWxpemVkfHx4dC5pbml0KCkseHQuaWdub3JlUGVybWlzc2lvbnM9ITEsTnIoVm4pLGMoZiksZi5vblJ1'@;
put 'bnRpbWVJbml0aWFsaXplZCYmZi5vblJ1bnRpbWVJbml0aWFsaXplZCgpLGZ1bmN0aW9uKCl7aWYoZi5wb3N0UnVuKWZvcigiZnVuY3Rpb24iPT10eXBlb2YgZi5wb3N0UnVuJiYoZi5wb3N0UnVuPVtmLnBvc3RSdW5dKTtmLnBvc3RSdW4ubGVuZ3RoOylMdD1mLnBvc3RSdW4uc2hpZnQoKSxj'@;
put 'ci51bnNoaWZ0KEx0KTt2YXIgTHQ7TnIoY3IpfSgpKSl9Q3I+MHx8KGZ1bmN0aW9uKCl7aWYoZi5wcmVSdW4pZm9yKCJmdW5jdGlvbiI9PXR5cGVvZiBmLnByZVJ1biYmKGYucHJlUnVuPVtmLnByZVJ1bl0pO2YucHJlUnVuLmxlbmd0aDspTHQ9Zi5wcmVSdW4uc2hpZnQoKSxUci51bnNoaWZ0'@;
put 'KEx0KTt2YXIgTHQ7TnIoVHIpfSgpLENyPjB8fChmLnNldFN0YXR1cz8oZi5zZXRTdGF0dXMoIlJ1bm5pbmcuLi4iKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe2Yuc2V0U3RhdHVzKCIiKX0sMSkseXQoKX0sMSkpOnl0KCkpKX1pZihmLl9fX3N0YXJ0X2Vt'@;
put 'X2pzPTE3NTgyOCxmLl9fX3N0b3BfZW1fanM9MTc1OTI2LFlyPWZ1bmN0aW9uIHN0KCl7VHN8fFN1KCksVHN8fChZcj1zdCl9LGYucHJlSW5pdClmb3IoImZ1bmN0aW9uIj09dHlwZW9mIGYucHJlSW5pdCYmKGYucHJlSW5pdD1bZi5wcmVJbml0XSk7Zi5wcmVJbml0Lmxlbmd0aD4wOylmLnBy'@;
put 'ZUluaXQucG9wKCkoKTtmdW5jdGlvbiBWcygpe31mdW5jdGlvbiBXMShzdCl7cmV0dXJuKHN0fHxWcykuX19jYWNoZV9ffWZ1bmN0aW9uIFgzKHN0LHl0KXt2YXIgTHQ9VzEoeXQpLGFuPUx0W3N0XTtyZXR1cm4gYW58fCgoYW49T2JqZWN0LmNyZWF0ZSgoeXR8fFZzKS5wcm90b3R5cGUpKS5w'@;
put 'dHI9c3QsTHRbc3RdPWFuKX1TdSgpLChWcy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShWcy5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1WcyxWcy5wcm90b3R5cGUuX19jbGFzc19fPVZzLFZzLl9fY2FjaGVfXz17fSxmLldyYXBwZXJPYmplY3Q9VnMsZi5nZXRDYWNoZT1XMSxmLndyYXBQb2lu'@;
put 'dGVyPVgzLGYuY2FzdE9iamVjdD1mdW5jdGlvbihzdCx5dCl7cmV0dXJuIFgzKHN0LnB0cix5dCl9LGYuTlVMTD1YMygwKSxmLmRlc3Ryb3k9ZnVuY3Rpb24oc3Qpe2lmKCFzdC5fX2Rlc3Ryb3lfXyl0aHJvdyJFcnJvcjogQ2Fubm90IGRlc3Ryb3kgb2JqZWN0LiAoRGlkIHlvdSBjcmVhdGUg'@;
put 'aXQgeW91cnNlbGY/KSI7c3QuX19kZXN0cm95X18oKSxkZWxldGUgVzEoc3QuX19jbGFzc19fKVtzdC5wdHJdfSxmLmNvbXBhcmU9ZnVuY3Rpb24oc3QseXQpe3JldHVybiBzdC5wdHI9PT15dC5wdHJ9LGYuZ2V0UG9pbnRlcj1mdW5jdGlvbihzdCl7cmV0dXJuIHN0LnB0cn0sZi5nZXRDbGFz'@;
put 'cz1mdW5jdGlvbihzdCl7cmV0dXJuIHN0Ll9fY2xhc3NfX307dmFyIE1sPXtidWZmZXI6MCxzaXplOjAscG9zOjAsdGVtcHM6W10sbmVlZGVkOjAscHJlcGFyZTpmdW5jdGlvbigpe2lmKE1sLm5lZWRlZCl7Zm9yKHZhciBzdD0wO3N0PE1sLnRlbXBzLmxlbmd0aDtzdCsrKWYuX2ZyZWUoTWwu'@;
put 'dGVtcHNbc3RdKTtNbC50ZW1wcy5sZW5ndGg9MCxmLl9mcmVlKE1sLmJ1ZmZlciksTWwuYnVmZmVyPTAsTWwuc2l6ZSs9TWwubmVlZGVkLE1sLm5lZWRlZD0wfU1sLmJ1ZmZlcnx8KE1sLnNpemUrPTEyOCxNbC5idWZmZXI9Zi5fbWFsbG9jKE1sLnNpemUpLHhlKE1sLmJ1ZmZlcikpLE1sLnBv'@;
put 'cz0wfSxhbGxvYzpmdW5jdGlvbihzdCx5dCl7eGUoTWwuYnVmZmVyKTt2YXIgTHQsa249c3QubGVuZ3RoKnl0LkJZVEVTX1BFUl9FTEVNRU5UO3JldHVybiBNbC5wb3MrKGtuPWtuKzcmLTgpPj1NbC5zaXplPyh4ZShrbj4wKSxNbC5uZWVkZWQrPWtuLEx0PWYuX21hbGxvYyhrbiksTWwudGVt'@;
put 'cHMucHVzaChMdCkpOihMdD1NbC5idWZmZXIrTWwucG9zLE1sLnBvcys9a24pLEx0fSxjb3B5OmZ1bmN0aW9uKHN0LHl0LEx0KXtzd2l0Y2goTHQ+Pj49MCx5dC5CWVRFU19QRVJfRUxFTUVOVCl7Y2FzZSAyOkx0Pj4+PTE7YnJlYWs7Y2FzZSA0Okx0Pj4+PTI7YnJlYWs7Y2FzZSA4Okx0Pj4+'@;
put 'PTN9Zm9yKHZhciBhbj0wO2FuPHN0Lmxlbmd0aDthbisrKXl0W0x0K2FuXT1zdFthbl19fTtmdW5jdGlvbiBzbShzdCl7aWYoInN0cmluZyI9PXR5cGVvZiBzdCl7dmFyIHl0PURvKHN0KSxMdD1NbC5hbGxvYyh5dCxaZSk7cmV0dXJuIE1sLmNvcHkoeXQsWmUsTHQpLEx0fXJldHVybiBzdH1m'@;
put 'dW5jdGlvbiAkZCgpe3Rocm93ImNhbm5vdCBjb25zdHJ1Y3QgYSBWb2lkUHRyLCBubyBjb25zdHJ1Y3RvciBpbiBJREwifWZ1bmN0aW9uIE11KHN0LHl0KXtzdCYmIm9iamVjdCI9PXR5cGVvZiBzdCYmKHN0PXN0LnB0cikseXQmJiJvYmplY3QiPT10eXBlb2YgeXQmJih5dD15dC5wdHIpLHRo'@;
put 'aXMucHRyPUdkKHN0LHl0KSxXMShNdSlbdGhpcy5wdHJdPXRoaXN9cmV0dXJuKCRkLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFZzLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPSRkLCRkLnByb3RvdHlwZS5fX2NsYXNzX189JGQsJGQuX19jYWNoZV9fPXt9LGYuVm9pZFB0cj0kZCwkZC5wcm90'@;
put 'b3R5cGUuX19kZXN0cm95X189JGQucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7WjEodGhpcy5wdHIpfSwoTXUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoVnMucHJvdG90eXBlKSkuY29uc3RydWN0b3I9TXUsTXUucHJvdG90eXBlLl9fY2xhc3NfXz1NdSxNdS5fX2NhY2hlX189'@;
put 'e30sZi5HcmFwaHZpej1NdSxNdS5wcm90b3R5cGUudmVyc2lvbj1NdS5wcm90b3R5cGUudmVyc2lvbj1mdW5jdGlvbigpe3JldHVybiBRbih6Zih0aGlzLnB0cikpfSxNdS5wcm90b3R5cGUubGFzdEVycm9yPU11LnByb3RvdHlwZS5sYXN0RXJyb3I9ZnVuY3Rpb24oKXtyZXR1cm4gUW4oaGMo'@;
put 'dGhpcy5wdHIpKX0sTXUucHJvdG90eXBlLmNyZWF0ZUZpbGU9TXUucHJvdG90eXBlLmNyZWF0ZUZpbGU9ZnVuY3Rpb24oc3QseXQpe3ZhciBMdD10aGlzLnB0cjtNbC5wcmVwYXJlKCksc3Q9c3QmJiJvYmplY3QiPT10eXBlb2Ygc3Q/c3QucHRyOnNtKHN0KSx5dD15dCYmIm9iamVjdCI9PXR5'@;
put 'cGVvZiB5dD95dC5wdHI6c20oeXQpLFkxKEx0LHN0LHl0KX0sTXUucHJvdG90eXBlLmxhc3RSZXN1bHQ9TXUucHJvdG90eXBlLmxhc3RSZXN1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gUW4ocHModGhpcy5wdHIpKX0sTXUucHJvdG90eXBlLmxheW91dD1NdS5wcm90b3R5cGUubGF5b3V0PWZ1bmN0'@;
put 'aW9uKHN0LHl0LEx0KXt2YXIgYW49dGhpcy5wdHI7cmV0dXJuIE1sLnByZXBhcmUoKSxzdD1zdCYmIm9iamVjdCI9PXR5cGVvZiBzdD9zdC5wdHI6c20oc3QpLHl0PXl0JiYib2JqZWN0Ij09dHlwZW9mIHl0P3l0LnB0cjpzbSh5dCksTHQ9THQmJiJvYmplY3QiPT10eXBlb2YgTHQ/THQucHRy'@;
put 'OnNtKEx0KSxRbih1bChhbixzdCx5dCxMdCkpfSxNdS5wcm90b3R5cGUuX19kZXN0cm95X189TXUucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7cTAodGhpcy5wdHIpfSxsLnJlYWR5fSk7bGV0IG94LHlRO2Z1bmN0aW9uIE5SdChsKXtyZXR1cm57cGF0aDpsLnBhdGgsZGF0YTpg'@;
put 'PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+XG48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPlxuPHN2ZyB3aWR0'@;
put 'aD0iJHtsLndpZHRofSIgaGVpZ2h0PSIke2wuaGVpZ2h0fSI+PC9zdmc+YH19Y2xhc3Mgd0Z7Y29uc3RydWN0b3IoYyl7dGhpcy5fbW9kdWxlPWN9c3RhdGljIGxvYWQoKXtyZXR1cm4oeVF8fCh5UT1mdW5jdGlvbiBGUnQobCl7cmV0dXJuIGZ1bmN0aW9uIFBSdChsLGMpe2Zvcih2YXIgYT0w'@;
put 'LGY9W10sZD0rIWMsaD0wO2wubGVuZ3RoOyl7dmFyIG09eFJ0KGwsZHx8Yyk7aWYoIm9iamVjdCI9PXR5cGVvZiBtKXtmb3IoZD8oYz1udWxsLG0udy5sZW5ndGg9PW0udSYmKGYucHVzaChjPW0udyksaCs9bS51KSk6KGYucHVzaChjKSxtLmU9MCk7IW0ubDspe3ZhciBfPUxSdChsLG0sYyk7'@;
put 'X3x8Q3UoNSksYz9tLmU9bS55OihmLnB1c2goXyksaCs9Xy5sZW5ndGgsa1J0KG0udywwLF8ubGVuZ3RoKSxtLncuc2V0KF8sbS53Lmxlbmd0aC1fLmxlbmd0aCkpfWE9bS5iKzQqbS5jfWVsc2UgYT1tO2w9bC5zdWJhcnJheShhKX1yZXR1cm4gZnVuY3Rpb24oTyxYKXtpZigxPT1PLmxlbmd0'@;
put 'aClyZXR1cm4gT1swXTtmb3IodmFyIGFlPW5ldyBsdShYKSxwZT0wLGJlPTA7cGU8Ty5sZW5ndGg7KytwZSl7dmFyIHhlPU9bcGVdO2FlLnNldCh4ZSxiZSksYmUrPXhlLmxlbmd0aH1yZXR1cm4gYWV9KGYsaCl9KGZ1bmN0aW9uKGEpe2NvbnN0IGY9YS5sZW5ndGgsZD1bXTtsZXQgaD0wLG09'@;
put 'MCxfPS0xO2ZvcihsZXQgTz0wO088ZjtPKyspe2NvbnN0IFg9J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5ISMkJSYoKSorLC4vOjs8PT4/QFtdXl9ge3x9fiInLmluZGV4T2YoYVtPXSk7aWYoLTEhPT1YKWlmKF88MClfPVg7'@;
put 'ZWxzZXtfKz05MSpYLGh8PV88PG0sbSs9KDgxOTEmXyk+ODg/MTM6MTQ7ZG97ZC5wdXNoKDI1NSZoKSxoPj49OCxtLT04fXdoaWxlKG0+Nyk7Xz0tMX19cmV0dXJuIF8+LTEmJmQucHVzaCgyNTUmKGh8Xzw8bSkpLG5ldyBVaW50OEFycmF5KGQpfShsKSl9KCd2NyNhU1hqOl1DWzkwPnlLbWE6'@;
put 'S2AyaHR6OHsvWy4lWStOQUU+aXJVLz9fSmheTWl9ViJ+Znl6UyEoMXk2JVNdYnFoRmh3Pn5+cnVAXlBhYzd+TjRuOUJrT2pjWj1GOE4kd0Iic11pbl0lVEdePUpENExiZ04sVys2YFU3KilwaiQyLkddPHAwfUA2dzFYPGl7Lmc8NzJ2dV0yK1UvRHsvY352Q3N0PXpjUXJvcF43STZiOWRNenxb'@;
put 'a1ohcyJBR3lURSV5Mzw0RFtAP2Z8fCRTYmZ1JktuVVhQOSFGZzU9YForKUFKY1o8K3hoL2I8TER3W1hyZEwhWVoofmMyQ2Z4enFHJV94K0t6P0ZEXj04RWV6R3doP11sODhLc0NTJjpWKC8ybncqKGFdVTtaeXdlI1VSfFR1OTUsQm9fImVXcUNBUWIkXk1DVDYkKmJkNWdWZ3VYT104Uml1ZUBp'@;
put 'ZSFsPEZhazshWyxwakZjfThne3toWSxbTDRxMSt5TkNlKGlkMClSdFZEIVtEPkJ8WFcpMlM/MHJIPUZ4VUFXSndpRSJ6dVpmMClSQn4yS2JlP1JLRkJlM3g7N0xST31mOzU5Z3EvWVcpSFBnVmF0a29DZ1JZQl1xeUJQNDR+bz9tQ0BCWnIlTUxZVDg+dUNRYFF5JW09TjgzSnhXMlRYQCJdYWhe'@;
put 'dHMhTWY1Lzw5YkVNQWtZciwjQD94SFthTTkqbU08TU8qI15HZ21gdldXeXREM3Q8UXlSdXh8SWVXKTpXTXRfd29tOHZHUFBSVGN6bUd2Jnszdmx7eldtfT1Ybz1JOU89VWo/bHttfjxVbS5SR15RZ2VMVzw5RkZGbTpVVSlrdFhLSyFlRllJZ10rVlVzcyJZSFRWZ3A4cyxkS244cnk4JW84Ynk4'@;
put 'JVFodGczbEx4NzhKWE9JUHN9N3Refl50diF7emBAN2N7XVAvbn52VFRCNmVrOHBJIyZNKmRSI20zTlRVZGU9KiEybC5SNUtXZkgxMlZGTGIkYXk6akRJcDxnb2I8S0BgV2Z0ZHQ7Wy5yNTdIMUZzNTc7JTlMb2V3QyRHL1AlTl5IbHZ1dDlyOE0iNHxAdWprVXQ2QixeeiIvNGs/bCZnVktgI0F4'@;
put 'YFpoOHZOR29MeFthY3U0JjpFV1U5Lkp4SVRBKmdDP2M4MkpLakRMaFhGVTFDVVcqMnYzbEFhZjkma099cyE+TH0xIUV+citaX2ddNU9QaS9JeEBGO2VjPFRaLHJ+ImR+NEliTTw7LDVRaT16UUJscy81JmVeKGNbVTttVWVQNGdJUkpxJnB5VG9CVGckMnFwfnYqRmVGb3JnWis0dkxPb3BvdE0r'@;
put 'bDNpayglKkREeWtLMzAvYStaWy58ayMvZkw4MFMuXkFaVCE4ZTF1LlhlfVcjNmZyJlFPdSxCeGJAKHlvKjMpQGdgXyslLz9pUHpSRl4jeFliVkx7QEg8SClMREUyVyouO00xdEUham5jLktAZV9GLktaXlAoaW9nSSE2VD5Sfjd+M1Z9TDB8Qkg+I0xpSmNhUU5qKlk4VWJeNG9xcF0mP3NfO2sq'@;
put 'Pk4vM3htVmhwOHxDMXNaT29aOFVvOHdwOWx4P0okLCFtPkIkLylCOTRKSDMwL2JmLnByPDxuW1s/dnJiWnM2K0olYE9qUk1HdnlmQDosSWVRcllIeUgzRkEyXUYvTEt1fUMvSVFjJUYiSWkrQWtBU2VQaTtae1loVCt7bVp9PCxQfFk0bD5BMmRfLCZTX3Q5bD8yQ1EjWXBjU2VNQVBBOEhoWjE7'@;
put 'XmFnP1JJTiZLWEpqSXhIUGRtd1lLcHUoL31iWl8sJnhdSmorOX0me0RBdUhyOEViRXg6az1BOCVhIWYiYjY+NDpffjVkZWBFdF97S3l9SUp8STxYcFt9ITkoOWE3Yl9CZ34mezxiNnJrUDxsSml4I00seFRHWj4mMXUval0wdzBrNUJidllJTkppX08hQjt4KShaOTc7KjtzPnxrPjEzV1tkJjky'@;
put 'Ljl4clQrMyQkdipyRjhBZWBAQjtNOWhdUEZpKy44U0ZVZ1hpVCRWUWtwTiFGPEIuTFJteTxAfXAuQ08jNVZGLGczR1M6e3c6dSxqcFYkRFEsXWQhI115czxpN2dMM3Uxb2JSaWMjYVtdYCV1MC5LQGhlQjgyJkNlI10rO1U3RiNwe3EkOyU2fl1gczJ3fGo3R3BFVjk9U3hxXkZ6RTl2VnhqRnJg'@;
put 'M1lnWHxxZnBFZzoqcjQ1cFslLkIobFd0c09tZWtxL2V4QlYrYkQqT3xOKUkyK1lPREgpTHlRdWxTeTJscEBWPlUmemY4bGl8JiFvLlMmfTAvcXc1O245VXlOOV89QFMjeCMvSS81cXE1VG03ZG9oNDBQYXk1Rj91Skc6SlRRcnhKZlg/d3REI04hWUhMe1JKcD5HM2h4Smk1QHRXWF9SeDt9LCpF'@;
put 'Iy8xMGlNQ28zXTNOJXJvUDBieEJXcnsoQDc/XWA5L1k5bG16emB7M0c5Z3B3OjlNRVssWCpZdHhrcE9dcSRWOz96emBrSnlVRzJDXjxfMlZaLF08MV8hYHpDcDs3NCxOKiJVcmwiR1QyZjU6N0VFZmR7JWwmOzAzU0h5dilbZyN6bUc3Jk5LW0E3Z1p8aTpmU3RCcURPKU1XLk16WmMibDkuNiFi'@;
put 'U0FPSCpZVV1GU0t7WSRVRCM0fjpJQUhdMms1SWxENU1xd0NUWSE5K2xYPXN8M1MvV0Jtfng8IWxNSk58OVZSX1kvNltvKDhgS2t2P2tlRmk9JS43cFQjeDJIVEh2ZmA9NTpHXSpAW2cuTzZAdCJAZTw5SmdIbi56QnR4bU1sU0I7enkhKV5gc25zX2F7elBfKisqQClxOSpIYFc3TGtWfTc1UG5m'@;
put 'Qlt6Jj9DXktrUnIuYihiJVBEQThWK0FJLjY6IyFEQDY4fV9GamsmcGhXc1RJMkNeWGA3Oz1FeTkpYHxOUVtyJFRmRlcqVGxvQj1JXjZdS2tMJCg+MiM+JCE5X3lDJj8mTH4qZyYlaH12eHs4MklyZTs3JUMqYjglbmR3ZXNURThSVU01USMyUHA3JS9AZU1kTnc1KWw3SHB5OUhwKDZhPHw9NFNg'@;
put 'WSpSYDEodGIlbSZfamYkWF5gRitic1QkTzY9fm1yKFU3PGF1Q2kvbktAZWliQ1NvRUJXPGlaPlcjUnxLc3k7OWk7cERPXV1KVDsmdik2ZFpfQTBkPngySjhYOF8xVi5nME04ViMoUkUzTTMwL1RfS09+IyZgXWApJDRseD8rOCtJVUNMSzN9alZ2QHk1VDFWTyxdcWxseF9yfnJPJC50THJ3NTZi'@;
put 'cHBDSjpMLCVKbTxqcDIiQEYqTXliaDlNKW0xQnRjT0RuWVQ9JjpRWVZaYkg1SUBKWGxjYXIzR0hCSndDZD9TYlVzLyl5KjlNJkhWZVUmUk9lXWoyYzJvMEZ6Q2ZtK0FrQVNYb2Q5L0dJe2M9RklZN2JeSH1OZ3l4ISlUeUpvUkN4LmRUS2N2VGhkLnRrc1lWMiM5WF9DYDZeLDxjeDFxO3BvfHsm'@;
put 'VFlpb1NPTXlZIm47PUZHTD07cURlUndDXTdVblcxWSZwRzNGR3JPTEhWXTA0TVcjNU1LX2Q4bChjRi45XiRGXy9zIzJ7cCM6Y0t2aUYyXyJAcFI/fExvLzI1WWtHPDt3M207RipPfDpmZXF+dmhoYXphLDY0SXEhbS99RklmTTtYZShfPXkmZ0Y5JCM6IzIjbTNPXVFLXypwRFY2XiROe0BJcStx'@;
put 'OzUkL2cqeiYsNnNjRFkoa1dZaF8kSC5KcmxZMT5MYj5lflU7TU97VTM8TUhESmFyVVRLPnN3QDI1PzYuQV47KSZueG9halY2UWg8UzhsYExZcXoyVCN5RHt9ejwiZVs1c2M4b1NrK1Q4YGdPfSNecXwka2hic3RZIilGU0w9Z2R0WXJbQjJtdlVzIm1WeWtJb1IkVnhLeXNib1s/NU1dMSJEVmV6'@;
put 'OFdbUm15MzRIRXxMNHMvfn1AOj1xa041RWhpVl1ndiQ8SyNbOyEwU2xrKG48R3E0ZmouPGRVRFglZyYyMytqNXpnfTZwOSVISmsjVC5qPEosPXxpYjw1YTt3JEpuJU57QHV5cCt2fGhLaX0/LFIpIUM4M2Asdj43XW09LHlzM1FscTRXKzU9WD0vMSguSmZgNjFySFQ7NjFqKUwpKHJid0RIZzFt'@;
put 'PS45Lip+SDlDa3RATz5hPl02ZWsyYUI1MXp5OzNjWCVGNERuI2BOSGRBbmVxTHZ5W1cuNnVENy8mOjlxUHZ0SjkmIll5Zkd1RlZ7U3kxen1kRVtTOXNbOltuTzhzdHg1dWg3ODk3KEJzNS9YOy85eSQ5NCZ5byQydz5iKSEiRiUzXSVkZj9eS0FQe1hXfUosWC9KVE5nMFUqOTUhSV49YFNaW0hq'@;
put 'MmEldGl3KDRCciNofFo+JHA4bDhDZzdzcTV2eE84OEZyPDxmcThDY3xPPkRXMS9FT2s+PS81clFrS1t0S3F9JGA1MCNdVGtWPH5CTWBWfXc+JExWa3daVlpUZj17dEs+PCRnUDJgLFlye0B3dVRUdExSRC9deyg0WndDeDovRyZ3eksiVUZ7LylvYHBuRkRvXmg5V09UNEFvKjpZU0BwPyNpSmo8'@;
put 'KE5xQ1Y7ZE4lTTI7UnhLb2F2aT14Z0J6UzRKMXFaInBIXSY7Ok01ZUtRJWdjZio5KlM+ZE9JJip3I2M6L0dUMk99VTBHOW9ZcGhtQjFELHJ8d2svTitKaVAuKz9GIXBlbEQxW0dqJlh2OTluZy4yIzVlOmIyRiR7e1U+MVNqWFZpSlsicnJUVH09b2BxWlEjYGg/PTJuUkM0OTk+cn1fQDhzKTYs'@;
put 'RE5WSXJIcygjWXJ+NENuO3E9JE5BP3VaYktgSXk9QjtsbytPfSY6dnQ6T31vcDlYKFsmYykqUzsoXWpzdntLV31PPmIqXiw1PU98NWA2eWBXbHQ/NiwyMH1iSU81STllOjdJViwraWQvfnxETylNUFsmViFNMnJAVSlicnRqYkshNC9CTDk/UDpzY2ZARE8/TDUjNktBeCtlYWp3QlVZdnsrdiJd'@;
put 'VitASFs8UnQ/LixGSXE8TFk3dnhWcFdZKHUlN3dGQW0oRlkpRUc2RjpHbzR2MmtNQ207Rk1tc0NDbTh5YWJ2b31+b29VMU0hX1A6bT4xUGs6bXQrRjEkN1NNUy5ANlBWTDh8Q3AwXzIrL1koWSo5Yy9FUCtfPS98TTkve0s4QzVJMkB8d1YkNmErKypKe3soWSp7KHJAcXszKFBnNVp+eXtLUkRy'@;
put 'M1VXMSRfVV9uaGElXi9mJjdDQiJ5OSt8TWtkKFpNM1pmJDklVzU9a2V1dDRzKldlXU5pZ01AO2JoNVVHSDJTU2BoeHBJYW9sJkw0ISkoI2oiMzw9VWVoJjM7P2dYJUkxeXFWbiMhPzdJSlQpamhMQkxgQWMpO3YvUnEsLHlZPmQ3bXAuSUFIW3guWzFGKCYqYkojX3gmVTdJQEpsSXJaUTN5PSQ5'@;
put 'ezdJOWNHbjA5dyJWczs3OjYwJDcwMyQ6KH4zaTteYH19JnkyY19jfVpeWEJ6fTspX2I6RUY+Vioma1QjXkp9QFRbRjd9PXwsJVU6e1pSXy9RSiI8TVV2bW4oaXs9fCp7cWxILHxWS1Z9YiJHQT08K0E1aD8vQyRCcnNsPUtRMXh+elJfTyM+Tjw8aUZuRH04UEFLflcvb2ddfEZja0Zse0t5Tmk7'@;
put 'ekcuLio6X1QrNU5SfEtRPGltfWcuPGVfK1A+dnlfaXJVWSpUJnlzZW5mKkxRPmJLZSxJInxmbHVsPm52XWQhQzgzMXRIRDhqcHZbc3dnYUdaPExBZn54b1k+N25PRTdNRDhwVlArY0lmbmVtd0MzXS5+ck0mQ0YrI3JAQ2VoRzkuQktGQGtGNk5qPC8zdCsyQENhMGhnLEFdYDpVMHZsUWBlVTUm'@;
put 'PXlQZXc9fFBxXkpudipPYGkrTEVxajF9ZjtnOlBDIXJ+QDImQFBESVEwI2R2Y204ITl1RFhbNnB9Yi5JRE9udmhXazh7KjM1WmJKKGw3Zz5qamxySjlTXiouOGhHP0dyIzJzVHcscmgjJjRqeG4/bHlgNj9nLm0hTl92a2U6aV8xcDpVQzlkUUd5OStPUmxEaV9WPEdxVyt+YTc2ZzBYckNdS3Bo'@;
put 'SlZdcUxVPioqdnw3dm9iZTdhKVdXXl1LcHo5JnY3SURAKUJHKkY3bFd6S15LbSMuXT07OiM1NGNRI3g0L3N3YDNXOz16OjtuOEozUl82P0tnYTM7cXMmVyxvY0I5PmJLIWJoez0pcyk2c21CUG9HMlhUdkxHbyt0STtDRyVkNUMpaDVjdCVZNiIlWTkiJVk8aV9RfnwpYXg/NVlPKU5oPitaZEos'@;
put 'NVlMSmhFPkkoQ1FmJHc6aFQ5WWV1SWxFeEgvWmU1WUdvR1IqVkhseldYOyIlWSwpQG8jelFeZjdeaCMvKkkudllqPnl9KDVfPD5GaW90KHUpRFcpdnBIPFhpQkM9UikwKGFoNSU1fmVQTWZZc1U6U2hNcFJtMFUsPVtoeCF1bztmN3FaJUx8IlhIRVA2ZSErWHgydVYwOS9GUklHT282WXtpcU8o'@;
put 'ZmQ8ZloqV0lDSFJseFVYSEIybnNMS0IwUFlrOVpoKy5XYERfUGskIUcySlFvenFnWjpXS0U3SztLQUxGenhYU0VMSy90L0laWHNNKFRbcG1PJk1tTFJDd1o9V21FUUw6Ii5JcXVQTmZQJWozREpvJnlOdSpNb0x3QmxNZkQrRCtrNktmRz5oVDlhNDd1T0MuRmRIbnQwRzZJdUhDZUNxc3VldXk2'@;
put 'ZkQ0MC8qRThNOE0mOkwrS1VAXlFjI2YvVGYiaHt0UlMyOnB1aEJ0N1dTMjBeVjxyKy5jYy9GKEZuamVTUTBieGZ2MnU4YylJRHlvOzkvcXhFK21tMisxSUtGUWlUOTZZbik1ZDIrKXkhWCFIXi9WWDtpIk9fZGU1Vml2UFEwYXhfWTxVPGt6SUZFdUghOmF4SHZBKE9HTlJ5SSI0UnpOUiZJQ01X'@;
put 'WFcpTG45ZGJ4WHY1Lk9HTERxeD5VZU99QzJ4XXRQekZSIklCR2RNTml3TVEwIVlkKXFhZjd4SSF4KTNPR0pSTkgzUmc1PzRbRFc6MDAmTXorN0xeQiIwYzxoWmBXIUVLTjlSSm8iOTlCSVQ4NEAkd1AjTFRaO3g6S2ZPS2FKb0ZmImh8InZIP09lZSowckxdQmNkSipSanRMIkJvVGskR2VxMS55'@;
put 'RXVrSV4oLklqWkVYaUVoaixyNSEreTZYR0tQP0lZU2p4TGZDfVQwQHdnI01SIXJ0I0hkVUY9YFtqWltMcEMuVCFpUWp6TDJ2R0taW11hJHlhdW1LR2s4ODUhV3RhT1E2OTV8eV1BYGMoemVaMSJSSiVkOXl8QilmciNpWjQiVVF0JWVaNiJrUXo/bzcoTX55R0N1aFUwOXk7QjZkPTU4eTp1Ik8o'@;
put 'ZmVadSJQUGhsZVp3ImNJfW9pWnkiOEk8TTl5YEJ0VVBEK3lNQz1VOVpial9MN0NMYmBrK3lmQi9yZUd3TCxDbSI8YyFXXUlURCE1aXR+UnNVI01qdFFNZmoheWFDR1pQRGdMNUVaN1UwIXk1QnswZUclVy5HUW9mWlF1PlMicWZaU3VLTzxNI3k7Qn43SVkjeT9Cajk8YylXYEhjKWZaVXVFUUoq'@;
put 'I3lHQyUoPGMrVzZJQX1mWklCWWpuNyx5LEIhODxjOldTSSJxJDV6dH5SfW8keXFDOWttT2tMOUVkKmd6ekwlRWEhITUmTEdGPjxmei9XVUt1Ji9Jd0wuRHNuUDcpeTBDUm9fa3MrbEJSXlF3PiRrWThPK3A8Y3x5UURCfkE4UlFBP3RIUypgW1MwUVNtNjpndU80VyVYVVBZd0xPL3c9ZnZ6WGNP'@;
put 'RXYlRTZ3NDxJNnVIYUdYalN2N01PYHdeViJoQzorRk9FT2UjejFWNHxrQEhhYzVfUTE/RGFFZDpJQ35DNjE0WlJUYERhZzVyTHVTdzhBIX1XQ2xgJVl3TWEvdE5MK0cvN0JYX0ZuMzJ4Vi92QipZYnZoI1tXaEdQKFhEUjB4QkdsbDU9UFcvNUJ2YU54RlRfXzdmczQ0RDg2PDhYL2BCV0lAIXw3'@;
put 'Wz4rNH1EIyVJLlkvSUNHIUhiWi9TQ1FuVFBkU0dYSUpJKTFFYS9jQ21sRThNODJrKVhGS3g7ZW0ma1R1TU8lbCM8bi8oQmBvZnJkUz80QkVOM0hiJWs9dDNORCNkIzMvJFl2U2tVIzwva1d1YFRVOFIyMDRHRj9bSS4ma2J1IlVSfmojdmM9RjpCI1p0Y0V3PHU1ZCo1PXZjWSJPI2ZfWHR0ZWU2'@;
put 'Oj12QkJXaHQvPkZMQ2IqRG4pRlRDUGciQ1YmQVhCSjZtfUxGP0JFXzp9NChMYEhnbUF6a0xLSSg9fEw6V2tRdj9ZN0RNN2NTRk41VCxQdC51M3BbYH1YNnRzVSJDfHZOdjxVdFp8dmRCejZpU35YIXRbVkF3fHZqQlN0c2NuTF1JUkR+ND9XflJvVSJMQFdRTVhqP3ZidkZaIkMmRjVFWTdNMD92'@;
put 'NUJgMH5GcUwuR01vYFhQQjpPaiN+WEB0R210QkB2bHYwY1ZwIlhsWH5VUzIvNzdBKURiZn40SUckRF5kWUx9V1BQQG9AdmBCLCEieXRMI0oocCQ8dThOd0NDP1VbZFlMckFYSmVdYFhEQkRmKlspRlZFLnV9TEpHZEUzeH1MRlh6VDpPe1hMQmQ5OldlU00wW3ZydmhsV09+dmdDTjx0L0Z3eHZR'@;
put 'bzY6W3ZtQytbKlsrRmBFYip+NFtMRUt9Z0UwW3Z3Q1dJdi9pPX1YYkJqVC5NOVkrUmRIQzgxWiZZI2k4SS5NWXh0KlRQSXcjeUlKL3c8ZlB6QVJPRSx0NVkmaUVRVTJVWCNpeEo5ZFl4fXVYSFJ7UEghWVIpcm4mOlJAeStmdEd2TUkvJXlxLCRwK2owYVl2TypaTzBlWTZkWzVHMEc2Ik87dERh'@;
put 'WDVFUSQhRGFaNVtKKzpIYSZPfDZHS1s1SDA2WXlWWERPT3F4NHV2emZPeXhDd0JkZGNZR01hY1M+KHRIYnQ7UFYvVUNMRXRnYUM2a0h1UlA3PU04YHYwQ0BeKltrNXl4Yio1ZC81WHhuKmlTSXdneGt1Tjx5cVZAJVdPMFcwNl19dnk7ZkNHdHg/Tk0xMH10T3d3IzhTN2x6TkkofXd5XUN3Sms+'@;
put 'bzA4PE9IeiwjRVhlanIheHcySFdaSyNWMyxPeHBYSEBJMDA1WEkjRDhmcjxydThTRyY/LmcuSWtiaVJWJmxLKy4jOT1IR2lgRThOZUl0ZHYqc0s6KSlldn1LOEEhdTh4Nzc5MDFgd29mIWFlMXtkTywpOFUxKiNqKiVQaTtNTGhXbGZSZmFmQilnZVI4NWo7IUEuUXtAQH46ci9eLC9qRSIzPlMo'@;
put 'dyxzZGxBS15BfDcqTVIma3lEVWp+KW9YLHU+Z3NRSVNjJXhEYU5nY2w1algsdVBKLFNnWCRNWFhfbntQWyFGbGhlYyxwfGAjNHg0Jk9uYl9WKSpvaWBuUjBJQ1hodDxpTChLfFg1OmdjUS9GJG1BUkhDPkZuJXQqaipUMXskVzZEbUI4d09BOGZSMEl2KmFpTyFJOX4oRmYsIzpLPSVKbUImaHRN'@;
put 'ZXdQfHRBaF5tbyxvZUJQRH1WZXZdOmpre1VtYXB9LH04TFBJUD5pQUlmTH5CSU91LmUmem5UTV1DVFkyTFtPLERVZT8wJU1VWH0+e0lbIVMvS3NSJXpGNFdrWXFMSHJOaSp2dEF4ZG09bT1sfEFMPCxHc1NmSzE6Nz1sVGUmOGg7aS9PUHkoYGtuOUM7OHFZQSFLdVE/MFI4b2UmUDAxIyZuZmBU'@;
put 'fHArdHluQmUveVVbKU9kdUdleDhNNjwkRXtVWEM4LkNCMmRpcCtbZDtLIm0yJGgibVpgPiwmIUwobGFwNUYwImdYLmlOdExULnEsSzlsMEJpRmJEPVo8Q21Gcm80M0NlbTR6OERXUV9YXVhsKURDOEpQTFdlPSVdWGVNdDRHczg4OG5BIXV8UX1DeCNAUC8mSER0SFtXZGNNP0MiYj5ASlk0LiZy'@;
put 'NDFfJVlAfUlJOG1BdjlhfFl7XW5TX1M/W3hyO1AoZlhlVF97dDskeChMQUI4QUFrNlBnQjg6Z1I3Ond8OlhOWHQ6SDBlS1JsZ3ZdLyExSnttfDZGIXIqeGdfUEVXZ3R9JDhpR3ZQUixqUDcrdls8ZT1vLFJYX14qTFB2NVluTDssYn02IUshKiNGNGN7TUNvZjokYWE4Y3gwayFgUGRnIjZgJUZm'@;
put 'JEw0KX1kVz5qUkR2I0V+cHdGZysxOmk0eCl+KURYLiRCaSRDP1dAQkg6d24/e1hlWSl5YSIiL2xbPF4hfHRjYz9fPFNFdCNIQHxJQUV7Sm8lUC8hez14JW98Rz1zeE07NWtHQkdCfSRNNiN0PSt7IlZSdWE8QysjKldheD5MbmZRdiFEPSl+N0haRHBGVzZ1VVh8RDtERCJpO0F2I0R6SFVRfGo5'@;
put 'cjElTTlBZWxQezZ0WCZnNDFOLkllS2RmO3FtfDp5SSthREhwdUxpOWFqMGgkLiEiOmlqbUo7SGcmMyRvc3BMZT0saVNmc3RDZjFbb0JFMEhdSnV3dSxPTnZaKz8oVHM/QWxCeE9CUFJyPWF7UDQpKUZCV2hMWyFzYXJPK1MraEFJQ3RiQWcmd2tyaUI+fkQ9ODI5KkBdUk82Oz1dQjd1Qjh+N1cp'@;
put 'cWdXbDRIc0hXKSVMZnRzTFhJbUspPFA2JSh5ckwhLGkxWmAlOis8KUIoXjhSQF1CRClqezQhbmZFRVB7aGtZfHwzUF51UC43T1VeOTNMPE1OcEppfDYoU2NEMGFVXyReLiZqRm91ZVIhV1F0cnRXXXtmZSxYQlA7dSQ3KkZ3VSlRdnIrd2dGZUg6PCZoUmE8R0E7dmJCJGRpYjI7I1p1SVlhPmhA'@;
put 'I3ZGSG1FXiNxfldnI0ddRkN5NzZ1PlpRO2ZSRGVWOExXfSNeRlQoRiRfJWZeV0kzKXlaQVBKN2d1K1csO3x0NElocHYoLF91eTA/ZE1qOWo4eHJxfTxZKlZFc05ZWVZGYF06dV9Ncl5IQDVtTDphQEMxfkhicyY3SExqNDQ2QEFHZEZWP2NdZ0JXMTMoQnlpSVFffDtZMlVlaHZ4OS4mZyZsN0dJ'@;
put 'PykxTGMmeCloImZFbkJSRGZMT0NGYyElezh7dVRKSnMhaUQlITxmNylqJls6YCVQWXtUYTBWQGZuUSxEQCZBZXxLSXNRQjtIbCUuRlgxOFJIKiwxLjE0TDdyLkZ0LDQ0fDZPfEApKndLP2h1akV7cnshI0M1NFZQW3YzKVRfWGVjOFQsT3slRkheOF1KV0Y7UGNMaTRPaXlwLHMmJFYuZVVYXSly'@;
put 'YEtpUX0sMUBYOCwkOWJgeXIkOXA3Okg2WVc1ZUUpRG4+Yz1bT1k/eSFTV3gxentbRj1ibWhDZUdzSH06OFphTn0xTFZlQmI6UDg5aip7Nzs9TCpCbDhLU2JbTjwicUwwMytTR2VNRGpKanY3YmpKeGxOMzlMb3VNOEFeOkJQMjcjLygsNXplfmV5cyZhZEIjRSZlOHRmQ3JSREYrUzsje2FqSkdX'@;
put 'N0cjRVhQbkNqSk1rIUUrU01zdztVRUtyPSJKO3kvcFFqXWNEaC8+QmFCPW8+PHNheDU8bDZkclV8WlJRa1hzWEVIPV8kV3x1SU8sL0x5V05lMCJjY2N6ajpOTE9kTlFPXnRJT3lhPWYwY3Awb3VJT10iXWcpOmBmXzo8WUk1TDZ4NSlkc1VEYnJVa2Z4YTZPSHpLQCZaZWRlMzdHSUgiNUJOO1pX'@;
put 'OEpPaWN2RDhHUGFyVV0iSU8sL2pdZHdtNC9OLDo3LjVHazxzNFN7JUQ6Wn5EZDQ+TyokcjdKMEZkeGFQI2JOMWZdW1oxWmQ7UDUuSTZWSzwoeGMiNTZhZ2MqQmk0YGRkd3tvUCNJNSwvel1pISZaYns0R2xRejY5NyQ4eGMsYVhhUlF6NjZhPjxhPitrPyVyN15PS2g7RjJHWmU2JT8oZzQxa31v'@;
put 'K0pLSUMwb29sUHYyTipuYVFvc2MpRl5dQGd8RHNzS0p0K1goTH5YWmYwb0JLOHxDYTh2TmVTcHhVTy55OWc2Rzg2e2xiJFRtLk8obXNdPVhQbkh4UV1Gej9iQTVJXiYqZ3smVyhrRD1eZlVtSS9Kb0dgJlgmJkYlfV0mQT9jODJ0c1BLPTppRiFZVywmdEdCVXJvbDY6dm5rRVs5VFBIejZWKjh3'@;
put 'aiVsO1JdJk9od2NJMD04TzVULzQiRVRkNDlTVUk+T3dzYWw7SCZYKmR6NS9YVy8sTkNwPEU+PSxCUF88RWhQI3luOyIodyYsTmlwaEY0X3o8WSo5S1BsQz1CKk93dyw4JjRKJlUqdTpQJWVRM3l0eTR4KyxPc2xWR1o8YGc2TlcxWC9zJGEvUDgxST1dQnIuZzh3Y2syRDIub0Auc1s7aWA4OSh4'@;
put 'aTVxRHVbVEgpU1p1JG5vISVkYldWKUhbMm48YCpLUDcoOzM9PDwrfTIyfj4we31oam1veHF7VTdoayJiUihVOzJve1ZTVjk5LE52aT9vUnhoRkJVTyNOMjBVQm1USTpMPz1gI3JVJTtocFdaUFRqPEhGe3BKNyRYRi57KS5lIiNXPTRtQGBMPWVraDNHPWVrX3FrXktVVDRjeyszdk4rcX0/XjxO'@;
put 'cCF9UyQwNHIldVlBbFtHS21eMUQuPzJtbXBTW2chdytANyNoRW9aMloqYjRKLCU5Xkh8O2YuMFVhZ2Q7bDxEbVJNWm9Efjc0IUtuW2toN1ZEeDwoeXpuIjcqW3A+MV5lZXkpImRjZlYkM3RBOFBebWQ3VWIzcVFXeTVKOGtOQl0yRlJSQ2hATVNlO19jMDFPbmN4RTx5bSRMe05mPUY5JCVbXSl4'@;
put 'd2osfEBuK0pFNlZrN1k3XTspPj0lWWR4JHFUR1Z9Vzs5ZFNeR3N7QFAsUWB4MyRxZD9sU1M0MTEiem1oO0BveEljbXJ2MUMoSlEsVVVBeWwmamZYPCpnPE5iVyMqRkdnXUBKP0Yqdk5yVlZTQVd8Wkx9JkdYWml2QSwub2tMOkdsRGFKX2VgITlMK1NMIlUkY3IxbHJ6fjxkRkpnQDAscjxAWGtS'@;
put 'YSx9SWdAMGoscyVEfVpzfU1eTjJIR2ByVjh7cVNNamFleiprLmFtdndEW1cxamg9Oj9JN2JuQ2NrNlVTZzExTmh7IzwzajltYGdtc2YjNV5vR2s2P3UlIktDeCNHPXJQI1ZgdVNNamFlbUB9alFOdGo9O0NzV296M1M+fnFHUW9hZnJxa2NWajojWWtZb1grK3ssQTZCNEZLW055VFNmVVV+I057'@;
put 'ayQ3WkUxP3ZqcDhfTDRyY303ez53ajxZZjRuWEUueEk2OXxmQWhOPDZOVHJocT9Kc0NeSH0/JVtjXkV1WVFqPUlHKn5UaCZMSTlJdCJHLl0mdyRJNHFYNzEzUXRbMiJGaEZqIjZiZV16US5MQDtVVjJ1JlhGc01NfEg9Nmk4eC85eUcmQTgzUnVIV19gVWM+MzIsWnlJZiN7MjZdKD5XU2V+JnhR'@;
put 'Q21Mc1lyUi9LPUhfWUw4dipMckRmYEpJUHVuKGdCRUBEdTVAdGhpRGY2eG5dcE9LMGxnI2UocVZPOyRWSEVnOl48LFokXm9wLE1WOC99Ry5yWXVwaEdiem4hQHRfUFZ4dU5GMiE/dnlJMytFIXc1XV58Uks+RGNfPGliXVY/ZCtddmldbWtYKG1vUk4jUUZ0NFouK1dnKFApXnFRT2YmeXFuWGA2'@;
put 'MihePGdFV1lmV21fVEQ9WHBtK3U4NyRMck1aX2ZEc2M2PWFYW21oOExNamoqUFVbTTM9SWVOUXshSkZUQyFncmdiU0BJJkh1Q2AqZHFpWXQ5S3d9THJ4PDldO3MvO2o+dDIqbEZ8ckchOTMxeXQkSWt2YmppeiFUZH04STNwTHU2fWFHdG9PMylwWU9oVEJlQEFGNTA/X0N2MjRtamNYQnYyR3Vi'@;
put 'dnRHOE9ndi5ScHIkZiNfbVA1Tnl4SSgrPzBFNlA2NlheOngue315bmdvVWQ4UXAlZklVUzQqbk9zN3BaS1BTWTU+TXAlQktaOFBEbjVhOm12S1M6Q01UJlk7WW08V09TfU9mLFR+MT5vdXBLeV9kcn1NPVtlaEdLWjIrfFYmQ016PWUkRkxHKGUuZXlfJWZ3aG0zKVtUMWRkbEZRfClJVjhDaztn'@;
put 'TVBnODUhZ3I7b1NaRFs7YmtdOGdzfGRrc0AjITIuRn4/TjVpOW8uTSNZWFghSlY7N1MkdzpTUDIxPH1TdEA9N05dPGclYUVsOSFKOjE8OCJJOjE8Rl07KSE5aUpdMHVVJGxDfko5TjNMRGVkeH00P2VmN2tSfD9DaEVbaERLeFt8ak4iMyRNTW5YUXxDbDJ9YVorLjJ+NFlDKUFJcHNMallMV3R4'@;
put 'ZzBMIWs2TWZ2NEJsSl1RQmxmLzE8YWlUL2FJU3tES241XWllZD95dj15NXRAaztzfD4yYzRWKUJIWWxsRys+WHY/e3Z1KEY5JFokI25weXcsQzF2OHdGWjg5ZkladEI1d05OKE1jNWY3InklTCtScmEycyE3SXpBbDB3KDosT2VtOztgQU9NcTV0K090PThAQkwscTV8QSU3Sk8lPz1vZ2NTPXNF'@;
put 'PWdiTGpUUnZgXjZGI0p0NUxvSWg3WHE5RHcpQ2ZfYTF7PTFoYDZLd01bMHBqPjY/VU9zVG5QYEZQZ1RoMEJRWFF7X3dAMiouV3V4bj95dm1+eDZNRHlsSCk6T3NwYlFAMm5waVB7YTx4ZzxYKHJySz9aYkJzc34iQV9AdDkoJVgudTYoKFtQO3ZCL1thWjhVYjFwd0NvOUAoZSYjTU5NQ3U0cEsm'@;
put 'ZisoMHlfWUtadXVQZVZSIkVmSihXS1FIfWpPQiVWJVFMUE1udUU8KFRVZDo+Jk5CckJsPyhBXT1lKjl+KFQkUDFeOG9pM1l7IkVAW2tPflkoLjlAeXYzXkI7SSYxUEtNJnZzSmVjJkw0Z1ovVWZxWXlybjVFNSZMNm9STCpobmZbR1ZlKlBbVCFGXUgsYDsxQGpDTmpURCk+TkYsWVYwMEoqN0BB'@;
put 'M3QsSSpBUzswLmZDIjtQMXVMbVFGdTklXmRlPSpzITB8I0I4QkhXcj06cG5PSEsvVzclQkkqcU05TiFsaCtZNTB3JDhnfG8pR213UWM7ZTQqU0V6fjt7b09zMFIzQmRbYzNKRkgvNiV5Y24yXWZvXyE0JEk2aWVeQEVMdHIvbjJLWWNISShpSFRLLiltbHokbm1Sfn1FcTU6LiE0ST0sQjRDRVEx'@;
put 'RGMmVyF3OilGPTZORThdQHhOaExmTmx3aCtMMiVFPk5fV1o/OlVtd3VGN2RLPTdXW204X05ucS5xS0hXJDl3alAiU1UzVFZjdEU+LEIyd2FPIlNbNjouSWFFdThVITZWOVU3VTF8XWhiNTFjZD8+IX5UbHcjKiQ0RDFxKmk2Jmx2WHBTRk5nYUliOzk8UioqeUI7PnQvZFZhJiJxYz05SFNDPEQ2'@;
put 'dHh1cGlFREpkQzxvJktudWIvTSprMSMkK1pWdEVPZDRtcV0zWlVabFpPfX0mNXdjZVleNyQ5M3QqaVJiVnc0T2YqZUg9WisrT3w9WkxyMWxLbDxjMzx1Qj48U0ZoL3x9JHdiNC5xb0d+emhsO1U2aWsyOkFUdWxQYntOY002LklLT3VpJlgvZGNzUkNPX19BRitCVjlJKT1Hfkp2XWc9SX53SERK'@;
put 'cnpXMkdkeEpUYWwsIi57IndOd1hUJn0lO0dZb1hWWilzU31dVy83VylCdCwzZ1R+aHNGWENdVihkOkp1V2xyUHBuWW8hQExCZW05PGMhTmM6Yi9KNjkpVHA5NnMjX3U2YyY+OmpzaE5zR3EiLmMhblNkOT1YP2tMM0VqOkckNGVyfU4qeFZVLnNTdj5gR2owcEttb3tTU1defEkpc1omN3B5blg9'@;
put 'IX1gU0Rvb3hwI1JqSFhRWzJuWH1EI0YmdUVlZCxOWl5lJFJQKDQxS2djfWttSEtaWX1HYC57QTowRzVRPnRlWTtgVmIqNWRLMTtJTk8jKTxoKjxLMjQ9ZzxGeWBWazxrejJjLmtlcHhwI3hqaHAhTzVJOURJcnlKIllGZShHa1ZWITRddyNHbyp5XiwjXTc0KypFUW44djxkRUB2NjE5dm1taVds'@;
put 'VV1GaUpSY2x5eVRqRk99ZGFleG0hS0M1JEk1XUVNSD1uYV5GXUwsSSMzVVp6VD1+WjNtUmJrPFtdeUNRPil2PEM6JV1XO3JhJVVlWCo1TmJ8IiFvWCg5cEchWU89JHVaVkE8S1hsKF8rP0lQQyM0WnA5N05uZ3YwTU9rPFdpfWojMnxgX216W31yNVNYWjtkUEsjIUUifH5NcDdmQE0oSFEieHh4'@;
put 'Om5dPDpGaEBTR0VOZjBfaWNRM0p5Ymh2SVZRMEA3UnxFYWZhKmN0bCl0eTNJP0JMcWZRUld8OSlyQEZWfENWbXc/TypqcUpOJDoxSyUvVktHImI0LkhaTj1gbG19cjE5O1ZYPnZAbjdQJjBzc19Ycz43bjlGS20iQ3xXKiJgcjZAQjRkWFdDVjxdNGRSI1N6bTRWR2s/L1JwRG58I2I1Ki8pZi40'@;
put 'KFRIWiFeUzBCTzlMS11VektdfSovRksjIyNCNjtJcn1oTCwxbyNLWn1YekY3Ok1+fUYwXzdSKE9HQVBMZSJPWFcpPEpnV2o0JVFYL3RVO2J5Yzw3bVtveS8kJWVjJkw2RWImejxrcldOV3Bgfn12cHIpdG4yODpidTNWLkVtZCNVejt2SyJsIjw3L2tVV1RUbyY6fCkkcWc/WHViL3FoKXJ6TEtk'@;
put 'PExbNmw4ayxlM05ocVpGZXZdYDBtejYwSDFQNlBvbChlMFFxIzlbUDN9JT54UURfMEt5LD5YPHFsVlgzWFE6fElAJXZzfTBNXT96YXl8KHkkcmU2MmcjfTslI0lQdDMsQXBDMUZNKVJsW2h3QSw6JltaX05WcS4xQU9nWjksNU5tMklLOG8vU1FVKn5fRmsmPyg+d05oYGhVejBwMHFsd2JpKUtx'@;
put 'LHFkMWZbMzYuUSs8Yk1uMU0lXTAsMlZ2JkBQRm8yZ2N4M3trOFMkRnBDNkFwWGhJe1F6Ki8mPDFKcTVGWVVYSUVVIXFHfXp2eywxOzNDIUM3ZDFkcj9SeWBLdWxvQzRDIXE5e008enB5V2BpbWFWX0xmNiptLktKM04+LHgpNUZ7fj59PmExPiFeNik1X1Y9am88PilxfXZyfD9ga2N8LkBAdGMi'@;
put 'TWh8Wippaz5HbjBmdiprLlB0YVt7W0ZvSFspRlA/bD5NXXNiVGY7JVpGWiZzfX1vR2srcmxgeiFIQzpWKC8iKzUlITZMdyIrTHIySnxOd3B1TXpzNFtvVUVbZUtvXTk1JC8xPFdLYWswO1c9Nj0wOVtHQ1cuIXQyUmomI2htRD55O1tLQTt2bHV3eWZbPE1lKzkoSjBxdTxIay8jYiE2eSZOfUVh'@;
put 'R1NAfERwQkYhQDE/XjFxMTxtM2loKFU/bzttaHBnWiJwWyJsY0xzZ25CR0c7QF11JmghRDhtODgmUF9sdko4IVpiPlkucDUmZXNUJj0+RWskKVZXeFs2PCE7ZHUlLyNTJCV8c3VUJlchVCopRnIkfGxXdlZVUW56OXZWJHEjL05efkBMOWp3bDI4Kz9JX2I4ZXg8cnsoeUheWnAuPFkkUGkhP2cz'@;
put 'IjkkJT8lJip6TG9xPVViYlBTRFdKXnZmOVtZJHA4Pj1OL2hDIiZNbSRbViRjMj5gTjQobl9LeDs7XXg+ZzNZYVdyTSR8aTVWMn1NZ0MhRk1CVkZGPXE6LD5gNjVIaUs8diMrLGZTaUpaMzV9cGd7VltARWVwMjQuQkJJI0R2RyZiNVNCbHhBPlY4Yy8qMFpqMyVFX0NIaGhwQGxyKVR7XSgpcXIu'@;
put 'LGh3XUM5eXhaLzlVPGJMR0ApRzd9fj4ra1c/ODNGcCw3OSkwOCZPa3tOSTt6Y2I2VSxIRDp5O2tKcFBSP1A8SExXPzB1XTUvLlliI2hYVW07diw9SWZxSHkvZkRTTWRQNm1kdmk5ZGxaKCooYmhSUFAiaGlscG9wclF2SFMqUDIxOy44MS8sI3FQRGtaVjRfVGhsJFJ9PXZsejw8TH0sIkJwcjNM'@;
put 'ZVNVKVhmS20yamB8X0B6Qk1Pel17KGNLImA8LCwrU0tEPlJ+MENyS117OEtTey99SkVde045WkBpazgxXjhlR1BFVWEsNUY3S2dQYTdyNG9KZW83fXReSHguIkVZKUFdSnF2MkhiXVBsTD5sWiU4NitsWWghVl52PHY+TDB+eHxqWilfRGh3SGBic0kuIU5rZWtTQmZdYSlhS2YqNV98OV9VUnZ7'@;
put 'YGlaPUZxWTJEY2Y8NHJULiQmS0VHb1pramA3NlpvbWxFOTA2ZGBbbjcqOXg+RlJVaHdnWCk8P2orP115cksjen1zSm44fV5nWEU4LHAxOXU7bWZLamR7YV8mcGF6ZD5re2NfS2xQPGBhWXM5Vj5YRyghXyh2OC9DV1MqfV5nTHt7K1s7S1peKEJKfHIyc1lKe1RDPWxSIT9JRWxVJE1OXl0jLmt7'@;
put 'bSEyVj5PRHtgO283TDs4W2U2alIsRT08eUkoV2tpZGhUPi5LQGRKJmA+PWcrYC5dI3Rke3pgekp6fHxGX3kkZjRsVWt3K1Jdc2JyPHp2N0xeallNLCxHV2VTXTZXWFgpLGJ0dU1PSEUxRWU1YEc+Vn14dXdEZVIhYChXdWN2WGRLYG97aitzKztld3BQMm07TCNpNXp5fjFWO0FFXmI7JVV5TiVG'@;
put 'W0o6JilVWChRO1d4dldbSFY9Vy5JRTtlIl4qdyE+TE5NW2MzPFdwL0cyOF83SV5qKyU+e2R6fCVFZjU3LyErL0pzR219P3ZzKlFqX08sblhDfW9HUGd8PGthWm9LNTl7dXlNTHNoT0shTUhse0xrRCM0W01yKSQhX216RVY2Xi91KS4pTSxeUlN8MlFffHxGSUhZeTtTTVNzeWg2cCU4Ok5LKGkk'@;
put 'OXMwUVBMNF5KZl48M3U6ImoqSzU6RURvd2gwRCxtQlhgendWK2xjQnZLPGVke15UKiNNPUU+QnNBbH0/fiM6TjM0fVBaYlU8YHl6ZXFkIkhgRFdoSnAsLCw3TVYhNnk1PWVKWlUlSVkrX0dWS1MzaCE5fFdMfFU+Nl9PfCpKe0A+ZXl9PmV9P1c/ckAvPCxLWzZgRysjW1I6T1BebkxaXyVqTXIk'@;
put 'WW9aX3c4K1hNfUssOix3YkM0VT8pZ0ZocXJkXjYmZldga2tAMHw3PjVyU2NZPlVnJSM1YE8lTEdkcW45a3dUWWIqSU5rQWFsa0dMUHE2RVNpQGM/dEdNezlRM0RuY3lmOmtIcCE1LmwvYi8qUXNVYlF3SWNeP3hRVi8vRkNXXUdTazVGXTFNU2VofTxFKF9hYX14OWJfW196ZXImX3Y3LHw1Zkwu'@;
put 'OFZyKDdLblZpXnQmQix4bGYrLkkjI1BvJF1xWi5mVSsvPFokQUcwZm4jYSg9b1ErJFl3bCoiNHtYS182eXh5Y3M/MVB8eUZgPDN3VmtbYXJRR0xXVF81QEZxb19oS244KTNKQHk4NkNwI2c5aXtwP2JLXk8+NkRXaDo6SGhxPiljVnIoeTNKQD0mUF0mVE42JHZnRkdyI05WPltzY1ZXNXE3Nj5f'@;
put 'enFuKUMsVkI3QV4iK3RTaEJKNkVAUFNxWnlOYXV3RD1feHBSI2xLaFsiVkdwZDd6M0IzQWQ5b2lXQ1J6akZUJT0ifD5pWSw/W1FsMSgjRG11N1dmY0l3YHk+dnxPRTZuTzo8JS5NbWwlPVREPVoqZHkzSTZdcVo8ej1jQk8wTWQpaV11ezRMcDooaWp0aiFbS3FWRzA2IzRNZGIjW3JzeW1BZGA/'@;
put 'TWdMQEozdHMsL1NJIyMmMSZNckg/eUV1ck08Ukk3N1dWeThYOm8hJDl+WHxIN31gSmpmQFcmX2p0MXk6ZTQsQTJGY3RMV2ZfX2ZiNGslbHx7X1ZvTVk4MSFpVHUiWmt3Y149TlAjSE5JYmchNCJsO2MiKDpBXk1RJnc1W2BQa1prd3M0ZUpFN29oYzRENytOeUlmL0wueHh3Ok9bTEZ5Km9LXnFR'@;
put 'JE5pRSVIXSlrRE54QEgrT0UlRSEvcl9dMzVyQlcqKjRjU2FARTxpd0Vdd08rMXlHJkJEVT1ZNVRAT3xQZ29LKF1eaENYSjE1Z29EYDcrIyVDZmlzOVVHJmQuXjZkYFtLZV19eDFdSlFHeGNjKkFGYUo4YkUyTy5JMjMrKSEzImNBUXxfJClkOE0iZk1PZm0vYG44TmssUERES35IUiNKKFo6YkAi'@;
put 'N250VnxEaEx5e0FsPX0pXzdtSThgcyppJFJheFNiV0wmeFk/Y2YvVy41JTs8bCtsOW0yczk4JnNVVShwRkt9QEx+L3xWPGltNkZoVk5YO2wuQFhHcVtATGRfQWdVcE90PXhwNzMmcFVpXV1HTXxMfFd3ViU0JGQpUExdNiZOfEB9X083b2U4Ty5DbzUjczFSUjt9OjB1K0JZQXJWK1U+XTFqKzRG'@;
put 'eVFucSsmS2EqISsqWEJqRlo4a29abz8qMi5dLFhFNHlSM2RoWlR0aE90byZ3QW1qO3U/Z0dTRWtLJClyLmQ8dntGJmdQT20mMTgqN3QzdnIhfVJ4WW07OU0hRExxW2N3UktGdzhoK3Bma0psSTU5Oy9UflJAbHducHNzfjwoV0RsI1UmV2pRSCRqMiJAUzIrV2hMK1dzOVEsbVhTfWchanB7Km1Y'@;
put 'M1JacSF1eEJicSFGL0dFaiMyQiRWamdaa2psO2JfOlN7QChWQmc4dEApOyVTP3N7aEVuQ0o7PjF5ck9yZUUyM2dHRVZSRkt4IzZ7bCsjZl1gRGBuRTlIYFJFcFFbR2g+bDIrU2MpdHVnWmZMcXdSXjFWaHMjVWYzWjxBeWhHNkV+dzo+MURXVS5RYylwMm5eOU1UWUBYZFsrRWYvc19WbTJ1bEtQ'@;
put 'Rn0/QEw6alF8SmZAVmh7aCt9I2JlIik9eCNNKzcmaDkjQVpaK3RASXp9SmlVc1RJSnFkfm5nQCpPdUFwckVEWSF5c290b29ITVlaZjddL0s7NVRVfnA3eGFMKGs2elomMWBpRkZCRGhrOm12dUp8JHk4YURsLF1OaXVlJjpyYyxNTHxLMjpiXzUkT31nWkd2dTlnMVhVPCJGY0xKfV4sZ0B2bHpm'@;
put 'aEhiVlZAPjVTbT0zUElbRGF+SHcoSUYyaU0vc2o9KkxgYEw9Lnp1XSFJOSRRdDxrNUt2dlBhX3tLc3ptTXYlfkdWJU1ecllCcVMsXzxEeTJBUEt9b3UvXSl5RTFfUGQiSF5xWiM7eD50WjwjXzN9RkssRERmOiVJOnR5MzFmI18jPD9BZC5nYV9LQ0k5NCNZa0hxISVJbVFheEdDV3AkNkNYR3N2'@;
put 'WTAsKnlmW0V1THJFSXhjcGglZCloJWQsSVB0N05gdkdDV3BrJmh0d1UwUWxzSnErOVt5S2tFflhXYExdPXVoWk94PnREV3dIOXlEK150X0hecnN4O0BwT0hnIXk8aCo3Tm8mcUg0SnA/Y084aURUdGQ8IzV9OE45WTpHQ25kYTp1Viw4Lkl3fDtAVlkrbUckfGNrQDpNSD1uNStfYFF6e3FaNWt4'@;
put 'ZzQzLF16SlZzRnJzd2AkTmpqeDolSSNXeWJZK21HRW8ib0JOPnxISkJHPjI3dDJFTmpUREpLOyVzTiZXQ3tWVyouRFZzc0gmSCtwNlY3Mm1ZMjd0Vnw1YXp4KWEubUY6XS9AS2ZjYS5wdDM8K3hkW3BTXkdbYzgyNGIobW9SNHVaWnksTkZUXmM1S2EraEd8ek45STZOfVozVWspKylSK0hILzxR'@;
put 'TCRafmAjN0pPZ19YMiM/REpuXUQsUWEhLy9QRWQ4MjcsUE9oZC5tOFZSYSEvPl5qSGY8KlY4bXgmbjdjbWl6KSFsKS5dTyEkQkYpcTBuLEY3V01CTkNYbGZuY21RYF0lTW41QFNNdiwqe0dwbSFOZHg4N1MyYV9VbENwTjRrMDVkI19jTzM+VVpTMCZLYCEjNmxEZjp8fWIsVmNHNUJoRzU4dyg+'@;
put 'OjFsQGN6fnV1WUlqYnRXREsvVzdyYiU0XXx6eVZISE9yd09jYHpjU2l9TDQ2a0s0VjYqRTBZfTViVDdOfDR+YyMjbTNyIlZXOE5heGNzKmR+RXNEb3FCPlEuc2hudUt8UklFb3Z7NCloeUEwbWh1alcrXlt8WGBXdz5iNlgrdipqL1lZU2NKQjN4SSZ4Z3E9U09vIUE3ZlNdcnRYUX4mRkMqLi8s'@;
put 'O35ZTyR0cVRaLHouWXZLWWV3bFNvNnhFU0VHZXtxJEtTR2NtYixMeldOW0djQz47KkNKP01DZTNVUk8yN1Yra01RQ0xVVDQuKE5Yak5tMFF+OSliKVJfe2JdenE3eWNQazkuVkIhSl8qPmtobUVAdSt1THU/YUlOVkE8KUZRcU9iaVFbdCZXPWNlPDgwRl1PT0thKyNJJDc0eUtMZ0MmSFQhQD03'@;
put 'anddIl44MiNKPDJKbzpyXnt3aFp5I1pVfVk7KVUuJFRBTysyUF4lZEZTezxSalM+KDZTeVd9I0RgYko5M3NNNUAzITJFPWxKQUh1XTJpP2tXM2lnO0pkenpaa35qW05EL0t9WCxCfl1PRnpjdyRoSEE9NG03VUVJcm1jZ15ZYnU5WGhecWdkeF1lYz9iKSh8ZiFadmtzWVNBbTBCJj1HJSlbclpU'@;
put 'ZVJ2e3VEYnBaJHlWU09fcih6Ry8lMiZOK1J1cGg0MTJGUD8iR3suNStRbHBFeVZwJmZTbCtVREtJK0YkciRkTXowNVNzJTA4dGZtRHRmYzRVU2UrI2RrZWRGbypkdnc+TEkyMDpHLlMyKkpXMHtgeyV3RCFwZiNUazdPYGRKN1RwO0IufEpoKls5c0VOTCNUJnQvWSpXUDcjO20/Y1s6Q0VGQGJA'@;
put 'PyRVVSZoRWc8ZyE1PmYjZTc4QHU+U1YuMyFPRXE+JHY2Rj48V1VATylwXXt8K2NhKU58KzBTImJ0Sk50UXFRYXUrX0YuczdrZ3AoTSJubjdJOmN4eCtaOEJ2IiNwVVhHUnxgKyJsKygrU35IUD9fRlp3W0UwLClGYixuWmgmdGNXZm45NlolZWo7PysmcG94blpFcCIlejtDTUt9Ki9oNT5jbTtU'@;
put 'Yn5ILlV8WztOeFRoWlhuTTBHQ1dwN2IzXXVaNU5aUFpJezpkS04wMFluXnEwV3QkbGRXSD43Xmhsb2QpL0pzbHc9ZlY4UXRwYnlSZUttUkU1JEYoJjIuTDtxJUN4N1VrJGl5Myo9Y0JPcHRTJjwoPHYqYCFJcmpGRld9KFB0PGYrcGZJaCJQUkRfWChXNzkyIWh3MFhUPUNnMSpKbzM8ZEtPPHss'@;
put 'V30iIStyVDt6Y1RoQFJUQD1EYDpKKk1MbTwkYjU+QX5kS2xYaEZLOyIpNEp1WVR0ZFN8WW1ZezIxeHd9aEk9IiZrRy5ue0w0fH1MRF9dekgxcEROPVlhe3hseXJGRkEhTktzNHNbIk5LV35yOW43IyVjTW4vU3soNX1lbm1XW0B1e29dJChtYm0rP09xckc/RUlYIWtaakAhS25VNSExeTh7ZDR2'@;
put 'TDVfazNLKzErbElUd0okMDR9fVlHSmcwcEd7IStyIX4+RDIiO3ZBKksqdTprTTx4L2h4cEJGRTpgR3dleTx6VnkpTTVnRjUlIWVSSSEqIlMyO25DLEpYKVtWPCpkaFNmTTg1PHhSOGtVO2t5T1EqR0hFLEAhYjY5IVVjai85U1JUVSRxaCEweFVFOls8disyP3ZiOnl8RGE1eDIyc1B4PCEodmA9'@;
put 'Sj1GbFlZaFJpPDA5LlBrU3trQEpKMG8sZGxUQ2t5fHd2akhidldCdGYheUN3LHc6K0h2TSZVSGA1JmtYaXd5Sz5+WyRZcixxTHFSRm1bdGNRdHd3MiNwNldnNXpvLCVqPyE4KyVqViVXV05qY3U6KilLVXk0ZnJ4TkkmbDdhZTd5bTpCbS85R3ZacEdmeWlma1gpWy57XkssdXEhMG9yYWVJQzEz'@;
put 'WTJZQCYhIWFHK0hhcltgbWtwIU9WOXpiK2BLU0k/LnkkYiNKZ0c6PyFQNmJmVnZ8MFZWYWlUSzRpdSJjXU8vei95RGdyPzd+WSx8Sj9JTDl7Nkx+LEw1WHR8TipKenw8LGNGVDpLWVMrJUclKXpCcDVqYFlobnY0e200NVBGR1NGeVkrPzpPT1g5QUU3YkVyb0ldZ0RNM2RxQWswLlRXPCNiVzl6'@;
put 'ISpIRDkmMns5aDJxU1Ntd11wQExVKkBwKSwuQ2JWMzEpQmBLOSYwNFcvbEY4UVFVVC8lPGUuVm4rclB2M2lgNGFUdyVTP3AscG96MnMpbUFDcVRVSnxJNERuY01mQkBAQ0FAUX0sI0M7RzJLTUc5NzE0b0JSVHQ+dXZTRmB1KE9fTXxeXkApfWh8anlHPXMhUSwvcElAQGlaJCNLPXtscXg6bj9+'@;
put 'MUhpUit6KV5AXmdmdTkhQ1VvcnkybGlQPVBsOl49UFtQW256eX1QN2drb2M8VU1aXkdROGF9UX59OGs+LG5gIjt4WmtRSEN7UV89aUwsKTpVSUt1LD4jTWd8V0V7NktCSWw2S0pvYCttTHlOJHRCa2kkPG1VezJpd2puZmR1aktAdmpAKDtqJkBzOTRtQFZCPHU8ayxROkdye2spNVo8XjxlL2Iv'@;
put 'Z0VlL05eTWs+Oy47MHVVKyh5KjxEIz4zI3pmen5QK0BlaHMraGg7JU9ZSVk3SXclK2xxUVlGa1ZZVnlEbSx8dT96QlRWPHtDSHx1ZVM0RTcyel1NcVFaPFVtMllmRUgrc21JITtrUXpKXShNVjFfV1dmIl9OWz1QSEVmMCs5OFJvQiVqciEzKkl1eXssc3oxPUhbaF5ScHZgUmRjLnBtaDBwYjxB'@;
put 'OHwxKlo9KC90fFgjeTBaeXxiQGFqIUs1dSZ7N0xyOCkyQmF0JWd3WE9qQ0VZS1IwcClVcXUjSU5nOlomPFdbVT1QbGdAQH5RK2M8cToqJGwrVD08KUxXcT9waSRDL0dyZ2EmL3RtSWhJKF1uaiErNm91N2F1Q0VnYzFCSlZLQGk6aV1JQXYoR3JYQU9PLilQPUhKVHcxJCM8Z3V5UCUvWWFHUCxX'@;
put 'Im91JHlRb0lUSzVdQihzcTAzRiU6bTZlIk97cUk4eyo9MEcyaSslcEc2Yn0kcj1vOnEjQ3hmbVZ3OnssfjNpVmtzbH12MkdETGxTY2xDbVYqOWBqeTo3XWwvfkguNmY2ZFF6YjJmakRBZ1JNQls2Q1UwO21be2g1QWxMLj5VVDlASyo7P0kuNSUySGBAV0BLQjAhW2xbJWBWQE0uTUcsWDVOfnRO'@;
put 'PXtXTzhiLzNOY2hqZTxbd1YmO28sQUZMOVNGdzhhOSNRaUU8ejtTdkAiJTJ2SGl8bC9HeGh8UCJ9XiNgU3p5PSYoKnNAfCFIWDA+IWwmYFpNOzlJXlYkdEFtVlBEflszITh2aHV1S2hxNE1mLih9TlpqJkFXUCF6OzFqUTYrdlhzSGpTV2U2Y3xoZiJzWyp0WE17Mm14WHVqaS5NaHFVZEpFYzlK'@;
put 'XixDV1AhNXBqOmAyMEZFMSw1NmhGdU1lTFtSQDpuLlhKcmV1UkJ2YXNyRWN2VDFzTFYlVGEkRzEwYlRCbmttWC98LHZFW2BQXWBGbVJiPy9meWFtSD1MPDpneGVSRXpdKj9rPCI9aioyYFtqdmpOUWB7bTxfbTJmWz5leUIsUysyNXtqMHZ4eWd5VWJ3eWJoeDs4NGprc05zb1loLlVgXmxQfUAx'@;
put 'VllVdFVkcUREO0kiTk1+O2xaK25vYjxRIlZGbTc/Wy5LRWxbOGBudUw8eFtvS0ZaMmQkXTdte0xYKztgOlRacjdKfjVGXSxWIUJFTTNRWzhyKmBnfmUjJisuXXQ8ZDcjJWhrbz00bXp1YnJGVlZoekd3bXArQWt1PEh2cnN5U0pPODkqOUxoUFhYRmJndVFdckMkM2xqJHE1eXEpdXsxZSp0c1hi'@;
put 'TltZTHVqZyJNISQ7OEExbiNkLF1kM2lUWykhPWV5eGcrUkBsV1U2Ll82IjZtXmhRMS9Kaz0sRDl6MjAxKlNfeHpeeDthLkZnT21vZmB3PilkTF1yK3srLDVVTDxrdWUlKW8wRi42bWBiJDFMOyk6R3V+JnouMSsjVSpwfkoqOlFhYmVJeSVqcjZYNlVNJD8sT2hjYTtDP0BEKn0jbnBkXmRiVy5t'@;
put 'fG4ySXQ6R3Rvc2ZbeHhXN2w8RXJvPkgjZnU5UTlWO2M4cGluOV9iVnJmTWVwLlsvIUNjWmxLKihlIXRGVkgzZlhZNk8/aXN0cTVkJTI3ST8rNztRKmx3QSwsZltlSXBrdSJhLHlfPG04TWBldUlKeVZiRV1WYl5IOU1sLzkoSi9ORzV8JjA9aXlXMzJ+Y3UmdkI8NUY4bT1BP2M3SkBJSF8zKSI5'@;
put 'Ky5qPCZNcUk0SyosODY5JG8zNl0jSUolaHxSbnREPzRKMHFHMEl+QyJFPCZpd1dlVzFHKjF2Tm0xRWtkbVMqNDNHOSlPemFDOnI2aSRNOFp9TyNlQEhiZTNGWS9+fW9XRyFCPz5gVHgrL25bNjY3S0VvXl1TcyFNdj5lZFErSkBFMzx6c2pvfkt4JS8iUDc2W0lhYm5+akNqNSJmNzZZRDIsaDE5'@;
put 'WUtfcl4wc35JNWgjI0hVOn1DeDQ8bj4+cGw4Ly47UTYve0NRXlVGXlVJY1dRcnElVlVmR3o/SX1wbDhbLnVqZjM9YmQ7YHF9SypjVH0/OUdnM3ZYTU84R2dKW192WGdQLlQuMzFSWF5ObTM/VUwzcGt4WFdnIy9uOUVMbHsoUHErV2lDQyFyJV83K2NZP2AkSEhgMSs2L21FfDN2TEVKSEUoT3Vn'@;
put 'YHIwMzQ2d315cFM7Vno7LH4/ZUBaTCsoRTt5V0wrPGsrbVoheUxIbkJPQkYzOz47O2UhYkZXZWYwYkR5eSpydmZVKXhKYlRFOTdrKlklL2kiTlVqOHtYcUwzbjR2aVNSUVheJTxiO3cxc0pDTyNxczVwfnZ1Rk9TRihIdTBmbTdJfnAudzcxdVB0RkQ3OFR9U0V3aD1XYWosbzFLR2BbY1glWD47'@;
put 'b2o1PkRvNW5TWWNjJlRhdV5OeHVLQzE2JksuZUh0JSVlWztWclsmRytnLiQ8NG1fYEIxS1p5Tkw9VUtQazkpWE9LajQwLiM/cUpCMVIvaixYdzVDIXl3amA2MkB1eHB3IzdIMTxNcHU0dXN4XlZZaVpoYT0mO2Q+RnlOaTR4dXd7V20vR21YWnUhW14obF5KdSkvZSkvblVtPyk+VyFYI114KXc0'@;
put 'bzxhRSl5VUY/aT1QKE5Qa0Eybyx1WTpaViVXKzs9PG86Xyg/fD1NNiEjYDEwK3MhPU1LTngjVmReWnkxKSo8b3dvZkQ6P0M8bmpuOTJ1Yno3UWR2I2Q8VCplNi84K09FW3BUWn4sbmdEQjgxYjxLViN2OTIhQUVBMFlPfUR4dlc/Vm5Ca0VeVG8wVkNZJXFVeDJ+LzRdKD8hI2s7aUw2TEl4YFdP'@;
put 'S2M8YzpLVXErTWp0PU02SnVuLDN0Z0MyWnssOUghY1JQPTFIRkRsXlAlXkYjYiEuaUMzO3l9Rl0yNUZBQVhMb2k8RzVMb0ZQWHV1QWs6VVpaW2hhTVVRelJBSntbektYaVp3SVV2Wj5IKiJAZ0trfihCLkZgW2JsY106SlZnfHxpMiJhMyxddEpiZ3YqVzZqbyUvPiEwUG1ZUkNVbFVNLlE3WClE'@;
put 'I2VIQ0g6N3ZxbCt0NVkyMy4qIT94cUNXWVUrWVYrPWldW11DMk1NITRlfHlxakJLNENRNVdqYzxvaC94cy9FWDlIe0Q1L2ZfIzFZRD48cXlYTXEsNUIsMlcran0zSmUqIytSUUZQYil6dkMrO2s3LyMrMDMvIytiOWp9T0JDTVY7P15vW3lNd1k+eDh4QnA1fSFxeXQpL21jKS9tYyksND08NENN'@;
put 'Si5UaVRvWk5eWnBfcE87PD84RXQhKEo7fHheQ0BHdyNwJks+QlkvVXlDO2RqRCIxXk5pe3dFZlBUJSlVZip3ejBgWFhSRFdJKyl3YCFGYEQrOE1gJjs/NltnQGosO0l9T2dTYmguL0Q2V2V0M1oyWmtrPzNQUmpaX0B4KlBYKTRrJlcybDkjJixbPFNoaHp2Y1tMQ2BkIyJ3RyJXSUVLVWxKRjdO'@;
put 'TW9dTHYhQld9TGpxPClpUnVVREZEXWcuXXFiVFF1fGQqR0VLQ1hnKnI8MiI8QTRjPFRSWFtHJUJpOTwyWVd6S0pBMmxNezZTeyh+QXl9YV5XXVopazRnQDdIKE92dihwTzZSaypNeWZ2X1BKKV46PFlwO2V9bXd5OUpMPXA0NDhBfHZ1KEZJLkY7VyZsKDxFN2g+I2dRPyMlbVZ5PSF8OE5neCI5'@;
put 'ZnRZcUtFS1g1a0pPcSV7fj4yQm87RlpZKklyfHsrNUkyZ0BeSEFIWSo7XzVRJDpuZWBbNkZtND5TfjVndTR5Oj1aNEM7fWVYVytwa1c8VGA0OFZ5JEdWRXBQeUNdcnlPelB8LklYSVFBQj5VMXgzUVh0Ym58VjN7O35jM2FvUmFYO3U/X0Y9Kmc7dTQvJHhQNzRfOm9LPWZhc2hnOHpaTHhXWW0z'@;
put 'NDNycFZtTltlMTFeZ08/ODpHQnB3b3h4cnBbOGBMQENsRDBXWGJJXUVwO25lYWFYd0M1aWUkfXR5KnM3WVg1PVEjPHJedV83Lyo6W2UzY0QvO1s8XUVecEpvQURVQz4wP0NBSF1qcElEbSM1VHFSI2V2K2VZKS88OUpBRjt6JURIeG1ufXJRV0FvMjlOXkNhIUpTbjpHP1QwQ301M1hhakwrKSgr'@;
put 'Un11eDBJWFprXkRvJl9fQ21ve31wUypsQm9afEc9cWgpLEhtR0ZNKnQ2XThGViVAdSVwJSZ+ckQ+XXdycDtKcSZBRCpLXXF0bGVtTTk0W2BWNkQidnBwJUhjdUVyUzVpM3tCVSorWFh9b0pPdT5oeCt1Mkh+JD5pLzsxJlFVQ0JhK0o5I2I2K2kiKm1BeWgjLkxGXlpfQk16SnM+OXhfWDdlOWA2'@;
put 'fUVWaUohKFVNRl5aKSo7cnpLeUA8SCZpOyk1IUspJjA9IyNabkJETSVTS0VZTCI0WVhMSU16cy98Rz50TjAzekFpNTp2L3pwPmFYRCJ2a0NbZT9FdVkiclU6WGJUIUx7NWYiZj1mLnV+Z0xgYylvOm85ZmhLIT1Vc3p2M3Jwfnx3IT1ddTJjfUVLbHAqOTgqVERyOiViKVhCQCpmbnV2WSMvfnwv'@;
put 'JHRrLkVrYjt+VnZ2NDx4SmhMNEpET1NoYkEkaXplZjx3OC9hKmxVRzZ1dl1bZ0AjYiUhOj00NXxvJThAbWFGREsrVn13LnMzNVJhaFMoPFRQPGRxVTxJS2FoU2U7KkowLj1YLCl7YDo2KjMqYSZdM0RnTSQ2Zyk/eG92VGFvJFA5LmU5XTAhQHZMKWxefkpQakxmRkR6bWghQ1chbSVifWIlNWI0'@;
put 'NyF7Rjp8Lio3eDk1S0g9WD5yLHEpW2FWQVlPQTo9YE5ZPy5JeDtzXSVmX1hMNV4/NnJERjF8JU9de3wvWFd4PXdMbVJAQz5pdVU7NVdNO3tFWE9HUFJgNGZFazZ2ZllAelJ4MUFXKUh5ZFM+JVlLTHlUQSpZeWlFWHhnUXNWWVd8JCtDMiNQKXluSnhucytDREBUSXJvMCY3KlVaaU8wRVBZQENx'@;
put 'WCpTOS5hdVpPKHVidV9BSnNmUjFMSF5qdjxRWjlAeWl1S3BALj5nRF87TEglRXY9YjhlKXJZQH5AeVlCV0chTzdWSzs5Sj91VXc8VVFybU5nK1krVmRlJCtgeldxLztHez4qRTVZbGBgMC9jSXhSK0U0dzsvXy4zV3hCbzZFWGd8TEMpWV52ZHJCOXpMX0JhOV1AKmpGRjZPSl1oZGQ+bUhybHoy'@;
put 'QzpjZHRaL1oua3J7WyZ5WCF3JXAhbzhpRFJ3QzE6QGZaUjlyOkpTfXw5TVdLVXUzTHt7I3AjP3hieCEpQ2Q2OStFZ0h7fEQzWzFiaFpVP0dpT3ZTRW86UzB9SWZANjFlX29qKU5BU3soY1BdXjRvTyZdRDI6eWxMaikiSnFKb2xqM247ITRtZC5MSV5LZTdOJGJONjtlNGImWDpNJlhJUT95SzV3'@;
put 'KWB5PXlwL3Irdywvbmh6M3FMbyIvc3c+TFFGd05wdnEyTmBgWEJZayZGVUhDPkohTWM3YzxILD1veTVubDcsPkwrcSgiR3pNM3pzUVZiJiFfbWhrcnlBQDg0amFjY3VMfHN6VzdnI01fa0BjVEdOcXJKYmZyQWhoZ247fEdGRilxa2FdJEouY1A7TDIjcil7YFtHQ2g1PURaeDo2Yz9lIjtzUGVD'@;
put 'KCkxJns0Qm8+YHk7TmZzdGRkXSwkaUxfLCZCX3B1Uj0wPmd4WCVDOm1PLF16ITVYUnVjdGQ5WFpJMnIvR2hPP0JlLCJ4cjkqX1k5JHpLazJoQFkqIUtGc0cpYkJ+WGcsZEF+fjVOSW9JdH5zViUrczozbXA0P2R2REVsOll3JU9DdW5dMmdFRW0kRiRBSTtBNypvIjdKYSkud1liRz4jaWJEfX03'@;
put 'Z24hRyJ5M0JUeXguNCFWV2RLS19OSUM6MGB5VWwzNmBQekJtLHIrdUY6W2QvVDNYWGlvP2NXWEE1QWNJfTVjP0JFJGgrSkZ3IU92NHFoQk5YOFY7M143KkN4ITtLQjBIZWRRWHQpUnJTMDAkaUx9bCYoNF5oa3kuZHdBL3IqSjx3MHtfaXNJN3lrQlozIX59fVZjPFgqZDNqO1V2Ry9VMzwreCwx'@;
put 'MCtre21LOlI0WT81RllWRT1KJlsmNUdBImQza1dXYEAyRkNVNCY3PF5eeFYob0AyUF5GWXc0QDhFPSg6L114YCpMOm0rYnQlLzJldEdxdF56LDY5QUc7VE5oejtKdzBEOERmZntgTTlufCs4e2ciOC9NJWRPSSNKcTU6NzJVZHY2S0RyKF9VI3MlTEFvPm4wUUBxcCspLkl0WUBbNzRTeHJaN3xG'@;
put 'I05ONGc3T0F2QFsmRC5LWml7UV5bb3hTMFhqTn5ZQyV0b0M6NGhgTCp3PlYrbi4rNDxgJWV5ITlwaTlJTXl0PnN0cEx6YTUxPC9vKDs4Tzp2SzwiR3poOWVvPTFmejhtJCtXQjhNQWFqVyx8NCNrdERrcGMvPkkiTk9xcSIvZ3F7NlloTCVRXWd7b0E+bzV3cUVYM0ZxPmRsIUwucVlEa0tXJEF+'@;
put 'LDFqIj96QTw8MnwoY34vKTFCPlN5disyfjA7WW5YS1hSclQ3LnkiY3ptOVpKXz5aR1lPfTk2fC9FUkt8LDhgTDN8SmtIfip6VVVNZ3ZuWzNoMFs0Z3txZj15clp9I3NOJm1vLHRIfmdrKFJuLHRfe0dCaF9nTD43Jk1xd24mQ2hoQCRmXWVDfDE5LjlyPyhVcT51RS52XU1Ld1EkUTomO0hxWklD'@;
put 'RHptfkB1KTJTYThQRzh+OmJmTHc4cmlHOWZFVGhDTENrVGhoaGF6cShnO0k+X0ZydXgjbEBKbnF3e0tWRDljaE9Oa2ByLFhVJjZXKHI0ekcpcFVxRTcvWFo/KGxednVFPEFNMUk1TWNyIXRgdChuOSt0MmdNU3RRfndKM3w4Y2tGZlAlUmFrOUVzMz90UVJZel5tSSNmdjV+OCF1RWhFLztVRFVz'@;
put 'RzFfeTU2fj5ycCNHLk8oSCk0e3l0SElPWEA0KEAyakgudz1jb1g0ZyEhX0NVJSVkP3lMdCVbXiF5dF1takw9QX1RIUhYYmM8YjZgX0YjbmZ5PUBDUF8pTVBEX3JKSz1xJnIzdCxIXip4OjRvdktXJCkyXUpGPzIyRlt0a2daKDN0dlBsPVM4ZzRBfX1SQkw2UGpRMXtAYnI4ZzJNcHJRJHVGXXtX'@;
put 'WHdLbDYldHxTKW5pdlZGTzUhQnRTNUkwYTRnYHlwKHo/NHdXS0I7eVc2QmosV1JScnAsM09MQS8kZ0RDdXl0Y2V5KzxoInhgNXxKNlpjS34hMWQlR2Y3KTJ4Y2hfYmk1YmZpXTxUdGZnRm53MiRJJil0anFtazBTYyVfOWdqVixVU2ZkOTg2KVJCNzZVXSxwKTMoRiwkdGtCZ05hUyREalcjWGp9'@;
put 'VSlZYklNZjM6WGUjK0BoRyxza2I3JUY3KmY7dzZMZiEwXjNDbDN9b3NMZV0yRWBuRF51fHA3ai5RZVo5KSUxO2hNSnNwe15QOF0oOCklaERIbVg9YHo9PEtnej9IL3JzUTZtKlF3QmNseXFeMlc8UmpTKV0oRj0/LE1FSXkpNDg/eV1JI0NaTGNYU0UoJiVIS2BwWkBXW3Zrc3hwODlkQkxzV2dk'@;
put 'bTAzS3lfO2J5VTtgdDs0MUlecn47ZG5IUnVxRkAlWU5taz19elg+UFtWcTQzITpUYzhLZSxveCZVR2RTPilMeTEiXiRVeH0pZHF4dEI1ZT1MMXBtMnNCZkhUeSlEVSFue3NzKlU1OWkke0pPY3khI08/Qkw8Lm8pNGJLZGR9ZGJUUkZOM15kKTwvYHRaYiVDVV5HPDowLClGUlhrZDxRYnw2TjlP'@;
put 'QHUwMkorVHBWYmhJb1VXbVlAP0MwW0V4WCl7RTdUQy5lNllnKiRzcltrXX1QOz5bVH5fJntSSHZKWCgkW1FvSUMrcXY3RFhLVSlBaTAoREg9Qmg/QzxwSlBwKyxRSWVZKnl1Y3RKVnU8VG00QlF+eEEpMjFIPjRJJCk3RTxkNnBxMn1WeGdnaEdpOj5rYktpeTcmfWh2Vi8oVzxFTkM/WzQuK0Nh'@;
put 'TEo8e1A6WXB1XiF+KE1oeEVVUlB0aXtgSWBkQkdsMVVPWUAhYFoiITw8YSs5eF8/YEh4ejRLYmYoPCs8dVs7am86LzZ5aj57Xm8lUSQ+LltFM3s9NitKaF4hYjE5RDV0MitVaDdMfTM1MjJwNGleSHtnbWNwR0NvRFd3NzkwPU9HRVFFdGwpJSI2NSlCN3UvWDdxJnRvI3QuVFgxcD9XbVBmPHxP'@;
put 'RiJPYyMhTT05YEkrKUZfLnM+ZiY/KEtzQTVpXjtLInI9ZVVKRVZ9SChhVjBvIyNPSWIyNklDUklXM04pdXBnbkh+UHlJJjsqLnkjbGolW0BYYj5uY3s8Tmo/LyNZRmEvMV5nLmxKPiRkS3ltQk8pTVl7aFhJO3NYKDZBKXFncD1bJj0hMEMkTG5QKVtkJVNqd2Y1RjIhMHlqcmZ1Okd5Vk5DMl9n'@;
put 'WFRSJXQ/Zzw3WFpwbDNCX0xMPj1Je2g0d048dGhvND0jTVc5I2lALEZXfk1GQFljQk5md3MudGkyRGtiWiVkb1tmcURoQyNdKD06bCF1K2t4LF9aeWc5TG84cGNdN1htPzI6eWRGVjgqZSEiOFplKEhlbSsqVERpRlVFTyVXVkBRdjloP0lkRnxCSC9CaVcuWGBXSlppNGd8OUpFREJUVTRrMHR+'@;
put 'KUVdImlbI0t2V31XSkBQSzxpP3lNcVJ4NGUkeXsoVFkoZUU1Z0hLRzpReUxTI3h7ZitoVTJZLiZ0dTBSXXNEUS9VYGdaTDQ6dE1MK2dqOiNdKDhjJmxTMG5Tc294V2J6Wih7azByaSs/LGBNLC5WJE19JSkhb2JYZy5sSElJTFtWY105Z2djRS87ckRydEBmQSV4MjI6cFcvV3RYInQzd3cmOixe'@;
put 'QjN0cXtTUC87akRTe2NPNyN4ZlU8X2ddVyh5MCloZVlkZ25yZ0xgeEVJJUJtRWsyK0VVMjNbRElCdz5gSjMvX2tiLFAveGAwOUJSUHp7UCF1VVdsLEZCJStKdT5rPlFLWi9uSnQsYCE8Umo4OWBmVjMjeitdX1pJbm4rNF5kRTJVVjYsXzp9TVJ5dWJoNGw1bGQzJnxfaWB9aCxbdjViT0ouO3A7'@;
put 'VkQxbVlKPUJBSD8zIk5jRSVfcXwibUN4a1tMRz1pZkhCQ2J8WSRUZkhJZ34wXj4zakxoS1VnS25oQ1s9a0NeKn0/NT1rKFJfSGIibzh4MTRSSThlWXZpSEsjdDJLanNxQDppI348TyRgQChtYz8xNl9YMUtfQ0VLTyNUcC49bjZrXmo5QDpHOV9HIWh1ISJpOiojL3UyYH55RVFdZFFVXnNxVHVL'@;
put 'NUJUOVErJTZRcjQsblhiMGlmWWFqen0zcXRpUnAzdlhqVWA+a2UkRmQ7NjtwdXZWYiNROXJHVk5bZjxfTj5LeHtbWCRdPzZBJlVNKXFUT2Bxe0JicV4yLnJsdTlpInxpKzlHVl9Yej9YayY2Z1Y7Kn5yQnVNLmVDXn5AaF8hMlFFN1YyVFVRQD1gOHA/emlRayxlOSYqRmNRT2dwbyhlOTJjVjE4'@;
put 'dFBFWEM0QUdJYEhVNSZvYDFSQDZKKkwzPENxWClCKikiV1FgMSZmR3R2allgNkAifVEvQkU8TERAZVN6I1k1dGVpT1ZfP3oxSXd9LF5bVSNSL3dBQy4iYVpsZ35qLzg5fXgyfCgjKFtbXU5KVkU5W3xRL0JFPGxbcDRvbHdqUSNeVUV6IjlmIXJJKWBGXV90S01BXjxCN088X2w9OlguWF4xeHVR'@;
put 'N3JaK040bDIpQGNpNT0ybz9XO15qNmQhclBdbTAoSzh7TX0vUS5hPz07OXdiaTVbU3FkSHVARXJvYDg1UFszWTcyIS4hS3RkJlI2YkR8cmFLR0pJPVA/PihVVXs8aUlPXzpXdTh0REl5c3R3REY6cVdzezkzRltuLiZOLHwsfTx4MzxIP00+Qzx7KG8vaV0kbk12SDdZNGpDSW9XSFJyNFFwN19A'@;
put 'RGYwW2ZaSCZxSjsrJnVZZ2NpY1grNEF3cHl0cVRbZCYhfUJEOS5IeF84NXhodl5kNnl5flNDPV82QCFbckg5NWh6PTFpO2JQa0VDb0dxOH1mTCRXQT40UzpHPEpnVD5rL3FGK3cmQExlY10mNy40ektwW1chRUFsTDN4WHRSTl89dFRdVCZpb3p8ejxneHJ8JCt0MTJIdSU0XT96flEkbFt2V3do'@;
put 'TCVRT00maGNZPjhaRTcqV1hoZW5YSERvVWxxJnBdVEVbSjt1MlEpPiQhJVpiO0twTW1oUXJLeGR5Zys+bDpAcU4zLFRTay81aUlRLmE8ZzMoNFRpK1JuUUQkSEBGJWRvWClbc0lTWWheVyt1eCh5O0thN30mP1c7YGNRKVJPUiJObkVrYUVYYCx4d0JILmtYZDUhUm1oOWhXViV0KjxTWk02TmJI'@;
put 'PGAqL3MkOi8hMUIhQDFWVkFPaV53JCY2QTAhcGNkdWpBOCVMbGAoekRPcE5+Ymk8Yi5WYmxwUUlNSCxnTmw5Q1AvWTMxUG5KVSwlJU9VYUtETz5LdXAuPTtNZ0A7c1hiYlB4RmFrJXJCS1Y4U0RyQC5VPU04bUw5eWNVRjtlRnlhV3N1TSlfPF83NzpoezA7dktrNmwrRUo6TGNLRHhfWW4yU25r'@;
put 'RU1MXz5EVHpxc1JyelVVX0c8aTsxbjdkPlA+Vl9QeTxVI303NHtWVU5mUl8rfDJZa1JLJU0uaiFaMSEzQS5JR3kmOjg5ZU9xdk00YXk5OUNdWSRPWTNxTHdVVUUodTRsVTdJOj9kPVh+b29FPzQuTiVRMHt4Qm1RT0RSK1Q1TixpM30mRndgSiQjPDduVVVzO2BXI25Kd3hqZm0oOHZ6X0ldRFFd'@;
put 'OEQ+KjY0Vn5Idjl4VkNxcm9GS2piRlZIIWtCR2gmanNuQjouT2MqSHVHVS5VcX1tKTY0dWxCTUZsWmZoUyopPGZxVkRbcGxtM0VEVkl7XXJjYDcqV1dUW3pJOm1MTDZRc302MXo8amFCVHAkO1kwI1FfI2s0SlcjUl9weUZtRSZ8VlRSRHMraW1IfVFdUEMycEVeXSFxW1BqKDBwVEtmVThPfSZt'@;
put 'YjB6WltSbS91UTN5byFNcVVPJGBLbHZCVGNiYVJ3R2RkYEprQ1tKcXJea1RJT15vPHBEUzF4TUcrZ2lpNVQ3QXtZW1N2WEV0dSJpWj4kWlUpUWllKCJqcGNHaV1UR1liMihKREdjckh1RXJuKUxJUWIpQE01bkMxeUN4IXEvSCxkYDFkM0lUdm0uO29qPlJKP3NQQHZtbDBZLiE+a3xxZGJfRiRw'@;
put 'OS5icis6L20lUUJSNXFWMTZ2QCMqbUZeYFc2KzRUVDI8ZX1tVHpuT0o4XWpiOjcvRW0sZzhYZ21XYCNaWlEwQDEkYD1uejAsTjpLWUVWRjEsTlZHNlpFUVtyd21MKzBRZG4jI1U3Z3Z3e01SQDwzdnRZa2RNc3oxT3ZJUEtASklZd05eQiE6PWVIbERhXjsjL3xEdmtXVSFCfVhRNU5WSUo4YFld'@;
put 'cmFHa3Jib0E8R3JNa3RsZ2oybEw3VlV4fD8lYnlFPShOTm17KCxfQWpiWX1GKiwlQH50b29YPzZgNjZJMnE8cj4rR3hNMnN9dERbYFAsQnEhS3ZBVH48ZUl2MTBGV18+LE1SanB2Z0VFRStAKyU/VzN9ZkY9b0ZrRC42cDlpWCZ6VTNnO3soZmtAS0ksbioxUn5RR3opMjtfTzpwbWVrLmkpQksj'@;
put 'cXRadk00ZlQjW3BaWSIuZl1Ac1ViS208NlY1WHkyPFtmMnc9aDR0JSZ7ZWJNI2d+O3BZJEkycDVfSjkuYGBgKzl2dipOe2dvSlFOT3IvUGxaKyxOJVZDLjlrOSMjS1A8VDJZVC9Ie18pZz8lfDJ+RFhiK3I0Wjpxe0hvbylnPyUzR0RaPVhiJCRac1gve2taTDMvRSNtXyg1WiYscmMxfmt1LCxA'@;
put 'dGJVdTVbMVNNdml5ai80RyFlclVNSDlTK31QZT5GeikyV0dIZiR5Il5lSitxQlYmSmEvRSx2R1dNZ2RgTUshLyZwR2A2bXpOLCE8dzB6VlROI2tDXkIxNl9tR11rJiojPFFeLmomXUZXWGVmZmhdNmhjOXlaZSlLe2pmQkNLS28kb2FnPWNJQllaaG0+LGhWYSNVe21wQEUpV3ldQ3hFNVN7YyJg'@;
put 'OG0+azN1eTQpQiNnYTxlZipaVVU4OEssSXJ0QnRIQC9AZyZQKH1OcHAhdXV+TWdWPWpIdDVbezRkcU1gZDxiL21gYzp8RUgvdyZLKSFrJks/KStMY2t9fkxxMVEye25pYiRVO1pJXkR6TVo+NGosVyZVX2hUS3MvZDcsLDpgUSReKDpXUEZ9Rnk8dl1LZXhMUGlaPnFHbWk9NnVYPGBhMFR+djtG'@;
put 'b287e2p+ezZZa0ZAL2AhbWQsNGpdeyVTK3Z2MDNGKEgkWywkZl9Cdk18aVZpR31eKHcmO28hRn1vOE94cVBdIjRTWmw3STU2Pk8jVClCbk1yYWJPOk4zZUp0eixiczJOc287QT0ydXRsQGtxcFBkYSZpTT5VK0hQWi5FQHRAOENpQ356RHA9blQsXjVVZ0BMc2h2cmhvN3Z3RT1fa3VpUjx5Qikj'@;
put 'O2V0e3FMWU90X0prNE52JFozVkJRezJOLmEvMTx3M0ddLFo3fSFgOTdVREpVTklpPTl2Lk5SMltQRnFAeSpWcXNzV2BRfS8pO0tkOiNZOEBWIzRdS2sxMTxvbEZXYDRVeSE3S1NdQ15PQj9gK3M4VkliLEkxMEFMRmxrLiFncXd6QyhqJExGTGlgPGg5VkoqOXc0aSkjPlVgfCRaT1N0VGo8dHtm'@;
put 'ekg8SCs7e2ZCT1JBTysyYnc1bVpAd1srVmZqUXMrWT5uK09NKS8oLjdRc19ZUF84VkIvPWtRX3BJaDU2VjdXbk9YKjhXaDVPfl1OaVg3JUZKTG10RGhbMVpYRVtJfmxRMmspcD1OL01Pd3F6QlVSYVNlZkR1Xl5nOThva1dyKXw4Ty9ZKjg/cExAdDBpYzQ+NmxTaX1lUGl4UVZuP2p5M0sqdUBe'@;
put 'RCZNV1EpUzlxQ0VqbV5wT0t+THg0L0IsPjh3RmhxImdaeGJoQlc7UTc4UXNydng2Vj5wNGNWXz9jcUM0M1BkdFpLZ2x1V3VEYXdSMHg0NVdkTSopRFJqZyUuYUc1QnlWM25XOD1ddXB0Y3F2Z0U2dTdQIVVmeChLb3BmbDglZF5tZTltKHEwSmV+RElve3JqMl43dHJwIU0xJU48YnExJVtsImJw'@;
put 'MzZwNDZQPEhWJGtbR2hoT2kwck9pSzVjS2lVdV5vXz90UztRP1srZ3o7VStmdEpDQzVTQnhHITwqanAzPXJQIyV5V2lQKiQifUY9bVJPOCRmdG08cHZeZ2s7VTskRURlMnFsZWNuLm5MSltIKWgqWE12XjlmcmJhOkZCNFduK306KGJIVF9dNXUpLjA5RXc+QmZtIVNmaEl2RF1QO3FNKTopQkUq'@;
put 'eCtqSldodSpJd3VgMC4uWyllTmhjMCF3UUYjclVua2BGclhyZC5VPEIyOSooXixeOU1SdncyYHBuUjFEaTFtR1NhfClgUT04S2JqeW1ZN3JmUFtXKEouWDVDU144L34kY2tdcVZ6MCteRlBlJSojTD9gdjtHcHBxK08zXTJNdmYhTGo9PF9WK044P2taV0glS3dLNlBydEdSPWFJeDt6RFVnNlg1'@;
put 'LF00b2QqL1NLPl1GXj94VEd3XjN4b3tyZTB+R0EoZllWV3JRaW00Km1OXX4+OFBKQD8xdmxRYG4lZlpwPUkiPVp9NDxSbHhwTyU7JngyIT1YXnQrU1hZLCV6eHNSUD9pL2d2XSY+N25kP1QrZSFlIiN2PiMxOyk8MjQ3dj1eYlNzbC5pSjt0UEhRdUtHUSZGW2xSPT9pOEQ/OGNYVVVdckx9Pmwv'@;
put 'W3llRDk1KmglZkN2VDtEdD5bdzdDbiZiVklBWTNxZz9XYVQ7eWEvNFVFdGhJQWZKR148OH1MIX5hWWF0VTwzMy9sYlgjPyprWzZgU2c7NTJFTSlSNmNlTU57W04kM2BgT3xNRWRpc3VVVWQkQWhjXnBIITVVZDkpZGVoMG1wMzVvXV4sYlAzXU1Re0U4IjVlRGRKOEFxMVloL3k7eXgvS2w+LiZX'@;
put 'fj5YQUArPEUmc0U3JnNWXjQiYzhPKFRGWmhhKyMsVChUakJZOUMyIipRZnk1aF1UZkAobFV1RWpzQU9eSnU1YCtMcD04cE0zXUk7a0JsfXg+WHZGXVdgT3h2NGVickkocHleb3YhJXl9b0BTNl5ZIlNNNW17ImM/IWx3NTtDPlo4KnFETVgzUX4qRTJxVixTazpkMF0/Y0FJUko5Kj8oL3BJJXk1'@;
put 'PTVPWTh6dXUoJjhbaSt1V2ZbNEl5fV0mQW1vPjI8QSF+UXBKW1YpNz42YHFkPTNeIy9pVlVgdGA3L2A8YDxzNX4ifih2TGE9bj0uRWw/aXlvUTJNb0I2dnVEIjwjQjBeMnYvU3JVTyZ6djxzWlRdazxaQWEjI2ZNW0UmOjY4Yy4wMUV8WWhnJEplPWpaVF5iZkZoPFQhQmFFKDcvJTw1SDpMOzVD'@;
put 'ZDdmWzsjMWc8S1padk9aellUYGg1Xk91L2guYW9DRDFtc0xffCZGQkplK1NSPWBSM1hfPjZMb0Z8dy9WajA+YVMjV0V2NDYzMko7V0NmQDFfQEVEeF5LVmptZ1koP3VEQyQ8JjxsYHRgUzg1OGkrMS5hVV1vR2cuLC93bDM+ZFV1NX52dSxlYTdFUylvWEI4aTtXLl9PRXZQXTksXT1SbERMZ1hf'@;
put 'KnkqdjBtQWlCM0VJcFVdeThuNUVGcSY1Q3s+eVNudEQuVHlwOEVsNSZ2bVgrWV9IIX4xd28rcndeRHF4VTYzalJabTAyNVUsdjNgdSZZQ1ZdSVRlTHUlN1YhTVhjV2RaNDhPUHorUSFkeEE+Ik5oaEx8a3Q9V2l1ezRIKUkodEhdey4zeU13eSJGYmhHMTxGTnMreWIsO1NCZWd6Yjh0SCMjbWZT'@;
put 'VTM+KTIuR0xGXj1wUz5xejFtWGd0JTFzRkxHeHFHO042Ink7LGNOWnVtN1RrOHtyMClbXjcrdiwqWl4zViphKVtvbWQ4fXZ2SzJsKnZZQ3hYcW1qPjhjKjlQNFA7VH5eaWRkMlRgRkFMV00lfEFUMzJ9OUdNSnszQmBNOVJweUBvOi97YCxNfHdwSiV4VHgsSFtjaVR0Sz1mZWpmT2VmNWg+aXUr'@;
put 'YGIsXy9LNiEzRVBhRXp5aS9JUDo+WzVic3lRXjdmfEQqNGcjQUkiNFFgd2NzLF5TdlIzOFdoc1RMLlheIUgoZEcodEhsPEloJEBGYEdsdSxrVDYud0pocSlAJk90USYsPyFtW1prd3J8P2p5Wit2X31vOCtaK19STWpOVkZganlDM2QxRzR9eUk2OkBZXWImWiYoR1csPHNKamJ5YTxnaV1JaDFn'@;
put 'aV1JfntZYjVqd1FfWnxhTm1BZSM2LEowRzptRVt5d1ZNX2BKT29aPEgsY2lpbGdZOWF1bjcpUml3SVhDcHo4dyp4ZENJUS8mR2cmZDFdMFcvWmdmWGEhPXQhJG1OfTB5L04jTVExR2cvc1JJYlFpL0A9LmhEWl47I15HaUdOZFM8Tl9qb3YmKis6JHErbEpXYTxOVUZJXmZMbDpuMVYpOylDUCM1'@;
put 'KDJRWG59V21ESm0zPEFGb2Emc0NWc29OaVpVMSVMS2pYTW0jeTJ3bThQeDt2LEtFLnk1QyhtUlFRZSQxNHR+dCtpNWYmbSNsU1B7VzdKa1FQUFtXWihddEApLjdgV3EuV2MmOjZrSzgkNW1JekxzUiRwUWNgQ0NIWmlFVG5IZTtecylpYG8vUlRLIkIyblduYXxacWdaRkoiTE4oPTIuTEZuLGRJ'@;
put 'e35JVl0+YHFOfkREXV5bbkUkO2w0Vk5xPldAXi9Dc2BufXoibHBvOGN2X0VANWc0Ti9wQXE6YmB5d1ZuQ0t2OiFQT20rImtATncjMkVIWCRmMXguOkglYngwdW14Jnt5azhZKzArUnFrNj5xTG1wfEhlNVRtNn0zUkNFNy8zfVVLJStqezxmX3dbSHZYdl9NNF9VInc4L2N6e148TU89P2Y+UF91'@;
put 'QHlpd0EsbTp2d1M8PEh5NWwkUTQ4K0FwN2dmR0ZzKXEvVEI3Xy9OTEpRWEt0OzVsaXt9dkVPUHQ/OCZYO3R1amNQTG1vKzFtOWRTQ1FeeC8kUUtzez1VOGlZUTZBMGVKOEhzZ0Rxb2luWD0jPGRHOCw1TjsseVpmMTplSmB4aSFOeXNYTWE3OFM5YWFlO1tkU31jOkArLDAsQHNmbHg8IUV9I3Yw'@;
put 'JF5qTFNkLHpReVJYYyhdJHhiXmJ5QUwsZDkwWyw3bDVofmRRNkxlNnUsNXFaMnExNWMubHp3VlgxRntVbVZ6RmBHJVJ3ZXlzTnV9djt3SktULDFyMjomRTtfZF9GNiVtOGFEXlp+VUoqOixzYEpxJSV2UnE6XTddR2sucT14Xik1ek9oP2FYIW0yU3ZSUGt1MnQiWVQiOzx3YW11REYuIWAhWW1V'@;
put 'R2d+PiZuU1I+MzxzbHBESkt9RnJPVmldQXY/a3BQPHs/Y1A2U2J6MnoqPltCPXVVIngpP28jWmJVelkrV2lAUCQ+aVReXXFmU3lXJFosZU1XRGoveUImfmdRakRNM0tGfV5acyRWSSFnO09QfXkiY2p+WXJoLjMobVc5OXMxeG1jMztLX3pwNERLfl9IVWA/dHV1Mj1NOkczfVhrKktKPCheeiFr'@;
put 'Sio7JktYaSlSZz5od3tDQU8+UGtRNGlZaW19Tj0kZFQpbnReeDJbSiQ5c0wsXzJnPz9mIWojMjFZRkw4Vk1TKX1QaHNAUGoxej51Uk57Q2cpbEREO346UlAwWHVHcXVudHJ1UGk9aFVxVWNvdVJOPmk/VzgyOXUwez9XODI3dTB7dUhocGJ7bVJkYzdVRGpGTSwsITVVKTpXfX1HeUhjMl0/eDwv'@;
put 'UVNVL1Qub1NhLzZlO242M2dYTXJAXW51Z1hxRl9TbVA5d0hnaEh4PkJUS2RzVHUmd2UvanJ8JjkpMjhJMzlUfnl5MFBAZUtCSEI+V0VPdU9OQGZNMXpBKyZPdERpfXwyfSFkZE49dWphNkwzYy4zKChObDd5QUB9NGtfamNgInY6LGsre0wiPC5hKkdPVGhHSGAoTWFKLDgzdWdKXioxdTYkajJT'@;
put 'QEl1XjBNO0pZeSZVVylNPDZzezBKc0UpTDVOJWA4TzRubCtpUHxOaFY/N1lMZm0wVWtAcmwrL1Z4PHc7aDZlTDEsfDMzcFpyQFdOV0FPQnV1akFeRDB0ZC9Lb213QDFxVDU7WW4wdyZzRjw3YlI2TX5JMlhiNCN8YFQrPThFOCY6NCtYY1ddSTAsW1QiPkwqRElYLzRtNFB6RE9NRVBEKih3ITxr'@;
put 'U2hbeVByVCtBZUZ3PVVsbjxpKjtlLypySDt8PnE5KWZvbWd1SzgkWFFfRX46RUVUS3hpdFg3MW53Kn0kc3F2MG9fRmUoZE9NfVB1L0lYUVQpcjcye05PYFU7V0gmbDkjaGNKNWxJTD0kP3htczw5WFROPy8xdk9GPCV2Q0tlSDtYIzQmezhmS21iWiowcDVxZTxXUDc7bytSU2RiYDI9dllyWDdA'@;
put 'cWdCOFlGekgmUz9pMDtQcFpDX1pwd180YFs8MSpDRmo/MlFXbyw3ZFFTZ1tjW2hmcUxeO299NEUvViVhK21BLF1lQiFXRUcweHk6a2ZxSnNsfUNjX2V3ciRZfXFAUl9WVF5iPWJgMlNAbUY0ZUc8UFBRWXY5L0Z7OHlLe1Ipd2UkVE5XbkxMMDhORHlqVkhneSh0ND8yLFRQZXpifDJqM2Vpe0E/'@;
put 'X3R9WiwsRkAuVHgpbnQ5VHtULHJrRjg2Q1g1IygpdyQsbC97LlIvZ187aypbTD9lU3d9ODw6LE06cXFvdVdNYFgwRXMlbSxYQXVAW3ZXey49PH01Rmpidjx7ZW57fDpsM3lZYSFSNj5vaFBGKGY4em5pM082PmkvcHlyZncwPmxnOzZsbSQ1SXMqeGglZCVaa0tUfFZdW15VO2p6QDEqTCpnPlkp'@;
put 'TW9TNUo5bjpZJjVfdlYqWSkyOXZWcVZHSSFERi54PCUrYEtIVStyY0NDWyI4ekEwUHJJaGpJdFY0dUw3Pm08dCFEamo1NUxgPTlacUxsaTxqUGpeNzEmWUlnOFJJRSt4c3JgX0d9NSNYL1t4a3JYNVpzWVFzcF9NQUt9aCNyJklgbjUyTkxtflosX1okXlt7LH1wUkkiMm46SVg0RXFIcGZYWT5j'@;
put 'S0pxLy80JTZaN3puMjJCLHQ1OkclTjBmdFtafld5RFozR2F5RSFyYTF7Q1JDUGU6KkQsKUYqUnViW2pJS2VKKk8vOV9xZiNJRkthVm1pK31paVVVZ0s2ZWRhMHlUQ0RAeHQyc0wrKHhxcSQ8PE5lZX0odTB8M0hYR3RZLj1bKHhJdUBhSFJjUDM/Q319R2hieHg5ekZHUmMpPUx5WEc6Y0BgMXJt'@;
put 'NyFmOnxHNi5nTUpmNU1wZ2V6QnAzcHY1SSlOaSlbOHt6eyhlVUJxPjZbc0wxYmh4WUN7WmsmYiU5emJyc2Z+WyN6LnEjbHFwc2p9VCEueSJHPC4hTCp0JFRsK2tYWnNXS1J6P29HOVJqWExKa3dJMyYpImZMZUBIN0s1N0RAYW5fYn5uX2FzdlpCYz5HPDw0d2lQTjBlITRdbCldZmBeSDdnfGBQ'@;
put 'NkV0fix2R019fXlGfGElNFB0XVluYyM3SW4rKH01NFlWMCk3PDxyVFU/Yl5GIXY2MiErdH5wNz5rUm9MTEN1eEV2S2BXWlg9LGBoekc3c0pnempDPjRSNHk9c3RAPH40bjVIPXIjUXdSd15lMnRedmsrITlvTH1OU0BmTnRyJV5Dcm5hU1oqYmxxKWFjd2VjIU1AazduYiwpRmdLL1MvWkt3P2he'@;
put 'L0RlK2w2OjxTfFprcE9pSzkjVSkvdyVIOk95LjZGVlskdmIsSTEwSnFNfDF8VVMxLFtQK1ZeTENwTU5OVUl7UXolTH5yVF8xWTsvVX1+ZjNqMlkuJj47QX5HXShMTlAkZFszd2k+dHQ6ImUqZmRNbDh7W0FNWD9LNmhMbDU9eVhEelphMGgzPzVdSTo1ekc0eyQrIUwiZH1YKEJkcT1YTlM5TTt0'@;
put 'Jnk0b2ssIWwxP1pkYXdbOCZ1UCsjWTdqc31IRHF4QGlxRSJeTzYwKVp2UDBIZjFHJlhnaUdDKFNuLGJJezo4OGUmbjdWajspeCYuSSFNfFAzRUYzPnU/KSQvVUohSmVkNVFpKT4rJGNbY3VqVDVjUXllJVIlUD8wZFkze21JI29YV1pyIWVII3h7aSVob0Rvb0VtZHYkLjJ5NkA9WFpYeipSUXh8'@;
put 'IyMuKSFRfHg+cFE0PiEuWihidz5MQjVIbjhrSVkxVUlYUC5geXgrdFpJait2OlVHenEvd3Q7JUZbS3hpYitTZXpUXmt6O3U9YmpENmdkRHFMRE47dHJ3SEVCJmAvfGYufH1rOSFSdTNwUiNjKnRqT1lLTTZvcFhgS1ohTDFPX3BaPFQkUmNDXi9GXlV2a2pRN1hEei8zM3xEKFlXaSlQK2QyZFtI'@;
put 'P09ZVSZEMEl8a3pmT3dmP0gjJC43cGhCaz5jJmt4VCw6Wj9XTUsld1V6IWw5QFV2azV4fCZTMDc+W1cmM1o4cUNKJUVBYF9pMjlQVnJ+fHhsMjlxZmk8fCNVSmokYEVTc3k7QG8/eF4wIXo2fnFLVyl1Tm16IXo2UFZddWF8PXR+cXVTW0RaJmFbWSowZHRYfDBRITZ7VytQN19jaU5WdyErazw9'@;
put 'RGFKa2UzcDtVMzx3cjovWD4zVUxsKi9uPCUueG4zbipsQmRlSU18RHgqZjE1S2I6WUlWZkArTipzPFpLWSVNcmwuUT1VOSNoVFIjbEtOM3RCTGFoaGNqZkBaMlhdSi5XSlksWiw3cGY/IzteSFhqez8kbVgycXkmZGssTWR8WiUrNT4rMDViZFgmNVY2bTp7aUp3RzpobzpZIjNHPV8/Zk1TTW5N'@;
put 'M0BETWB9UVRgYmRyaC4+Vl1jT1Z6Uk5QKGd9M2s0JUQ2RSJYSGxANCUuN3A9KnJzLGAkK21QeGZPNn5wKEIsa2thOHV1QlFEeTtXT0F6PkwxPz9DYDZKNiUrYnt+YGpRZXIyTVI6RHo/ST5AXXs0KUwuTXtfb0hbR21CVV0/fEM7eXdUZVNIdUtudy4zMzJHXyhTMjJHZ2Y3cS9ifTpTKmBhez0s'@;
put 'RyUhc1h+UTcmRWFPWV1gNnU/UGh5RXAmMFQ7N3ZKX2hAKkUpZkZyZmlwQGlGJDNdT24yek5HcnIzNXEmbyM5KDU4M315Ok1MYjsxV10+W3ssYStoXi4kY15oW3E8JS4/dGdAanA8aileT3pOKzN1W0NZRUorPy5vdHxdWUdYLkZHN0xQSjluYlhdMntUKlVBLE19dWpIfnRRTWAlSWw8SS52PTgk'@;
put 'PFVkZlY4ZXVacVdlNjR0SnBHMkxvLjRveX5lJDRAUXokY1U7fDY7P3RtaWh5Mzt9XX5KayV2a1RkUCg5V1EvU1IlR11XVHp4RkxEJSFhdHF0JUdya28mQGptKWc3Si5QWTV7VE44JEc6QE1qYWVnS25eJDJUPFBqXSx9eWMhQDFVVmRyVTJ4ajs8Zm1NKVIjbTMoW2EkJSttcGg8NDpNYSR0SDFp'@;
put 'Un4vc3k7L2RMaHVBLC8lcio5Wj05NEp5bStwaSQ4I1F6Xj0wMz1jfDxKKHVrMnVkTiZYbUBqK31DbHF+NEpoRXI2dWMmZ09nemwyMUxSLkBiSD0iTCtxdTwlbkQwMXNdKyQvcyUjXSY4JGQiUktVUX15UlRLL1hYVXhdUkZFV2VwRWF+KWkpfXZmWGhDNUE8OEYlNT9nI0R7R3dSQSxGaUZ4NHZ5'@;
put 'RXRHd1hOO24sckwueWRYQCw4aSQmZlpSSUpkWnIvOWZ0Kz92RltVdjNtMj4uMVhiO3MmdDhrZnpUQCo7ZFt9d3srZlVoKWxeOT5hcmc9Syk6WktLJkgucmNoIlZPWjtQPFM/Y3k7W0tmJEJ6YTB9dlllPltdVExVZiloZl1IUD9yeipNYDY/SVc0a31qIz9lLF5RQjc6Ui53bE1mIlZRenRaem1Z'@;
put 'NChdXl9GUVBwRX5sYm0rI28vV2UjSzgwTHN5T2JmaiM4aUNLfiUoeTM2ZDJybHF+X1F6L24weztzejkhWXVlTmdGLitZbSsvZkhhNUI7TilkN1d7fDZaM2w8Z2ZxdCZdI0lEWkp1Y3JBTTdpL2YjOnk/UltCMlY9ZWZNPX5aIzJKRG1YKGUhZ1NfMUQmPXFwQXtROn1SMCJoR0JANE10b2E0VFJy'@;
put 'QklGLn4/QUprWVdQZGNKVyY7aDlJTFtpWSY1STVSanlHclhGW0tQX2I+OGwqI35iYD5sPlcsd1Z3JFszVDFPRmdOOyoxZztTLjFbVj5bXjx9PmZHYysmVDZWZ1Y+WzdVeiwlWDMsI0V2Z3RqI1ZvZXVeb29KKD10OmNWOy5vJltjPlVOKGx2eEt8OXpqYiRJLjFgTlgmfDwzNTMzUz45NC4oS0ts'@;
put 'PTczakB9aC9mYiVRNSQvQkgydis5ITREU11nLjElKW4qVzRVayhmZVNWOkk3dzJ+WmE7ZXl4ZyN3UXYrOShKaGVAMGxwYSgsbFBgc0VgVndpV2RPU3xtfT9qYX16MnAiTnssW2h6YldVI1d1dHU2PFZAanFMKld9OldddkcpUlRGQmJYXSZpem81ZG1lIStxSC55fGdASmp6e1ptJEFvIWglWlV4'@;
put 'PH0uNWwoNHdhTWBLUWx2WUUzMEhuOCZLS2xqY3BWI1olW2QqKypEUChfIS9sNTxmRCV9bWFNMXdwOS81LzwiSXt5c0tMV0ZMSkxgb2dyMT1Db0gwT2hUSWJWZi9bZzdKdzMwWXE0em9iYmd4W1ZXLiFySVlTdzQwVHtPT2ZOZk5Sdj9mfGg/PENtdVJKNVo6N1pCdG4wRzZjSUxCMGozVks8R24o'@;
put 'JiZ5KSozVjVYUz0zIXRFSyFpckhHMCRZPDFOYiNPK2w1L1lYaUE7UjZMeioiMXRmQjRFQFs6SzF1aSM0ejQwYClGNl84YmJTKyhQWG5SK3lNYy5XL3JVOTd3I2dyUCNaOUdLIkJdcjhQdFlxWV9pejYsbTQjeloxPFVQNyFfdzsrPGk0Sz9jeTNtZU5oOHQvUndsP3d5cTA7YGdTK2U2WitTYDh2'@;
put 'Wz9pL0t4ZHhWem1HZFoqe0w1ZFNKdU4kSyJTaHNFPm02ZVZOL30iSzlvclZSWiVkUFh4aTc3R3l7ajcwSCRPaExrcSt1YlJUXVg4OmFWRDksTkwpLDF+QEhsaSk9VjYpOixDXUJgSUw7XjFmQXVDeGZhXUgicl93RGI3cEUxIyMidWpETEtIKyhacVZyQmIuXXl+WyRZKVpXSCsxRytROl9tZDZW'@;
put 'aDpCO01WUXNLREpiY0dHPnlJOl5xUnglW096T3ojcW14cyZWSFo8X20yQnJvM1giLlRQLCk0Z21HP2A4Kys8OVpfPV5aSSozdGZqJS82a2orUD0hcVlRU0huUzoxJHBkZH5xY09YSU9JL3IlIWdsUiE9KEBLTHdQVD9sTWRVO2RwJi5VZEBpKzRfVlBeYmJtRnczMDEkWzdgLyRIYUd4RmthR1VJ'@;
put 'ImBJS1dVNGIsW3YmLGs2KVBCU0ZAJUJoKHA8WFV4RERXVUhTYFM/fWBOYSRedC9bVjx4L21gZ2VJWXFCYEhvJTpUT04sT316U2RLfTZHJWNxNDJYWGQlL0VBIyhSTkMie0UxUDduRmAqQlU5dnNVQW8iW2hnITl0dEwvYS9JPWljRVFBQUFBQUFBZ0FBQV5VNCw+d0s6NUhMTUx0MkkpMmAxdGpM'@;
put 'e2l2VWYoYURZLGIiNGQvKXlObjIoekdvaFhkSCttIkkxfnJrV0piSTM6U0BEamBZM0M0c19LN1s7TCR6bzBbMDEmQGgpMn4oWHp1IVtDM3pIdEUscCpiXldLU0xZNipuYGUqejJ3SmhzQkZ3NDZJIVQhPn1LRTRUZWgzJmxDLjE8TCZedzR6N2hZNUUseVgxPHxtcH1EQzhwMHsvOWtpcmk3QTxA'@;
put 'OEAxXiU2VnsxdjZ7XmgzSXwjaDB7RiFSaitgOCRpJmJVP0AvQ2J2YDgjU1lUJV5Ba101YF1aUTVLOFRge2lYLzEyJUxsJDJqSl10SmBzPkVsQCNaRjZlbmZFLExYZ0N4ZmYpb2tRJSt3VSEmU0VVWDxtTXtmOF4sWjRoUUhUVGswZ2RCJXY6c3d9S1ErazdqREMmOWxwKEVnK0ZFZkBRRGNYaTlq'@;
put 'RHl6aVQvdH13V3Q1bW8menkjJjIlTlQiJnIlOXYjVzp0U2V4W3w6TWNaTGNvMG80d2hROjchQUZnKkxYazZsQzRTWUNGV1ZSWCNLOyVMY1VvIXF0T2tkTWRGQ10kXUU2czVbTVpTZjUxUEpabT81KjB0Ujk8W0YxKkA8RHJtNVVxZjVxc3Q1LGRdcmhjP0JobGtOalh7ejE8fSllQjYhfi9hd312'@;
put 'XnldSmxufkgyc1o1TlBSO2tmKmY2b1NUPHkye3tFb2A8JlskRTRKUD9XNi5MW0RHTnxGMz1AOS8wdCpDJXoqYilOMEU7KUl5PWppX0okQnUwS2l2KERicDU3ZD08QkRRV3k3YVUmZyplSHgiWFIjWUNaaSNsQjIyNUUjfEoqUyU7NywxfEosLDpzUHgian5FRWs6UjwwO3Mwb3FxWXhdMGpnaE51'@;
put 'YiFSKk5IaUAxemszJW9CQktCZUs/YiwyVFduMXVjYEIhfiVGKGNPXWVeZ3o4IzZxZTFQREQqVyRoVlB5dDd8MH1DaS8rdTpfQX56KTwmazcmI09UKlM1OkBmMDY3b1k1KTNGcV1JUC5COzNeXW5dQXM1O3QwcExQeWZlJWchPTZJLClheWhaeVN1fnE5OXhgJjtUclNZWjs1WVJ9MmdVRFQ1L2ZT'@;
put 'eip4Ums6L3JuaFI4PFghQDwlbHBUeHJLdFlXP1hyWyxkfWV+NTJARVVhWDl+YFhrfVJHWVdwNDNNZS9BeShfJmlDRU4ucTEsa3ByRWo2Mzl+ZW5UcTlUYFdpb3wxO2oiXllJfl9rMDJrNygyTWlKV2ltTV5DRjBLcm5EQFgqIWt2Y21oYTtHfHN4KnBrbyx2YXheI1s0Y3JGTFZTV080N2M+YmNi'@;
put 'Ml8md1dQOkYjYyJtN1hkeks5ZUsvN3VQJEdFTlBYQDpRSXAoV1VsQjhnITpTYXQrYlB7NDhtR2pXQ2xCODBlQElHPHUzSHg5ME9fNl48Ok06KypRMTBWX1FASmd7N0pYN2Z4NX5UQ1tMRiU6SXcoZ09lTyQxKEpJRX5hY3RmKDQ3Ok1IV0w1QGIwW2QqXmpfLGZtMlJEXVksKVhfNUlRQXg0QE57'@;
put 'fkMmNkkoQ2wjNHlpNlpSISIhPExENig3WDlmPWtLRjt1L2R7Mj05YCIlKjlYal5qejFuL24scz18JWU2NjsqaDBdKyt3dU0ja3Q9TCRFTkpLWlk2a1QvbmwvdyFBb3B9WzgkTHpyYTZlL0hVdHJgJkh3L0VKLFE/eSFLYEh7N1t7aFVfQUFEO3U1YVtMRTU4LDREJkVPTmBfUSY3dyIuZDo+KmFh'@;
put 'ZWZ2VSg1bCUoMWsqe1JyLEIrWld2Q2wvQjojdFJwVX5NT0orIWhpNF5lYCYhbVFoPT9IVHREYXRFU2whdUY6a3hpNXJiV1FHSkZkNzssaTlMZ0hrOnpWeXx7UFIheEtSOmF3WXsrWEo/TUQ4YTxeI31eRjpSIX0yW2gwaUg/c2Z2PStIP1Z1WihJSlZKP0IjSiwpT3thUG9YT1NPKWIqSk1hQz83'@;
put 'dnRPT0BmYkx9KXRzd0IxL0d1VXNJZXx8dk9aRihgfnlgOj8wUGFIPlkmcDxdWkVJcXJoW3M1eFY8MH1oeypbQU9ZMmx3V3RfZDkzXlRUeDEjNE16KnFrcWRJZURpcGlefTc4IWVqVlJgVmh5UFlRO1pmQXc7W0dDdWRPKmtoLi9WXUY8cUNCNXBrSihoPV5KKzVXI2lGPy8lJD5CUC5hek17TEhe'@;
put 'fCx7e3xQdXNNL2omNkp6WW8sfCx3fSRCMWFJeTxdSDVhejRoMSVZR2UremBqdzgmN0BFcE92K0RsKiM1LD1nMTxgPU12LCgvUFJFaDwhQkVRPTdAeHdLbD8yWTRwTiNlNTttenZ5JEF1ZVExXXEvWW9gKjpWNG4pW15SWiU5TnImNFhYcHBWNylFITg8bmhsXyJIUnBUJFNSYEdLUFtKbGcqfW0o'@;
put 'V1guISkmWFQuN3ZtUkVMaGBHWDVqUjJjdklDbXluUkxHeT8jY2ZNRW1UfS5zO2MjcF1zRiN3YXd8JCJaKEt0IzREKkooTj1ed3MlVkc2cjZacFVkP1NNOF0+aEdXS2xXYHhxXz1YLz4+bWdUISZgdiU9fkJ8XWYqTDsjV0xERno/KnFaWSsmTXtZWiYubF9YUHpjQylJYmt6TFJWR1tELG5Zb2Ne'@;
put 'Iz8rMHo8WyNYem5RWENGKShvUFVNSWlGPTtKTiw6bnpxcz18dzVFSEwuVzJwJElLbWUqaTlOWWNFXnIheWApN05ZY249RWkpYUwsfUNQTjkubWpDfUdDIzVYcHZ+bTtmSzovMixDWl4iQVZNYTVmR2drVSx5TEYoUEFBQEciWlslbDVMTzxXWVd4ZyJWeXhIJn0qIj9wM1pBaTd8aWlhcV9ZJUhR'@;
put 'I1Qidyt8TytTclY2WVNUVUU1T1UxPSMjOz52RXdCTyFkS29kPXBVN2A9eCNKPjNtYVclLEgsXzw7M1VGNkNbUVohOUo5dDU8UWAjN1t1NnNeJk0uNEN7eDNKNld5aSNXMlVhUSJHYmJqP1pQVCg8flBbfkVPQCJsM1NDLzhFfmxIbTMjbSFXUyIkZFh1RSp4KzU1a1EyQEl9JiU1TkR4bm1RRURW'@;
put 'e3NTZXJ8VTsmIVdMR249aG1tekVTRXJGdm55ditzS1tAWTRhKEokYnI/JWdfQ1cpMF9bRlYuTE9nKl12ZVhSQTg/NjFGdHZQd3c/PVA7VXFPKlRUXXw8ZDJOW2I5JF8sTldrZ2dRMG42IkU5biFKIlhKRz5PR3NzZj4rc3pIXnUyKzJMfXBnU08uWUB+PkZ5RnBDVjojeylXXSVdPCh7KzVaXzJO'@;
put 'Iy9Bb3BgfSFsPnlaNzg/PVA5eH1jJG1BNihxM2xyWWorJk9DJVhNfCpGcVJxZiF9d1NqO30jWUxINiVIIW5GWUl3LEU2RzVGYGJ6Oy8haSFNdGlAZi92OXs+b0UkK0s1WXpHb0EraUQ/LzBZfEdHMmBeZntkWF80OlNsZXVDb3BtOE1JO0kwQi5yRDhLfmU0fWgxTH5VfGRIJWhOYHtVXylWM3I4'@;
put 'MWx8b2c6ZTxXMm9hQiRhS3MmOHQ7WD0lRDtLLltlLiRkJmdaa19GaE9pO0twTCxwI35yfD9CXyNyJT51MSI0TUJyVWA+d2RNSVoiWnZpUz5YQiE8PXNTaTxGdyZsJDJGUElZX1lMPCZHYHkuRzE9ITEiNChDbms6dUBpPj9xWjZOQm1fQG0pd1kwOG47QippODs4cjx8eSVEUUA9dHAkM3UzRVRb'@;
put 'OGBfXll7eVp1L24zZ3tMJmZ6eHM5b3Apajk+aW5edjM3dj9HZ2EseXs+JnIsM1RdUVFWN3piPiE0Y21gcjtvQj8lWWBFQWtqWDB7aCxteSpQPCo5Y3F9Ty9dQTd9RVFmbDNOcW88e1hlYXhlRi9JJFJIVSRrP3hKYHAzMSRYOTlfJCp8Vm80LD4kS0g8WFBPYz9FeH1vVHgxSjNXNWg4L2Z7TlEv'@;
put 'eHQ4SlAhIyE5XT5ROzM+VCM7MD59R3NLMzRIL2VsLk9WNHFmYCN4Rm4lYF4xeF1aKXNNQmokI0xZT3hFfG45OW4lKDl6e0U8JiVic1RGIS4qL2YvSHpZYWMvaCgwP1F2TVEsJWwoYzgxUkVoenIhLGJ0Tz1UeXZITjAjSWlZNCUydzpVNCEzL1UsV0x0K01AR31IK31acUxrNTE8M2tMNkNrfH1X'@;
put 'dkl6Om0vKDZwcWNjUXBeZW5pemp1JGNFQkY/cDRjb18oYX59Z1Zyblc1SzchOXAoaj8oZ1tbYkkuIjBFdTNDez8jfkZiS3h9WTkyZkZ5dGNFP3xkKGEkRU0xcl1eRlcmZXkrcWlofXtpfCl0PmpjSlR9OX19V1lyfWkwNkdoKnx2Ukl4LGIiX0Z9LlNLTV8sdyxDcjoxRHAqPEwmVWxsL3g8NjdH'@;
put 'L11QLG9DeXtlQkc+bz4pZ1YodmhBY0tEcDhDVE8/fTAqcjBebTY7MUozSUQlUjRAV1pyY0N6KHh5Pi5uMjdyYFpnTSlNWmByLzZ6OmRbMzo6Pk9KNFQzRSVeQ2tBXWtsJl8xPzFjMVZeZXdOSH15S0hJdi9Ga1QqVyhPKSYkcV5SXllSdk9jbCVlRSgyZjs2fkZoRW1xM181VkhybGhsJHdwfkAr'@;
put 'NCxEZ1lsT0klUSlIOHJyVHY5STJmbWlhK3xpP2RfLHRJJWolaj8hRHE3Oix6X10zPFUyQFs9clFBR01PMyElPW1sI0JGQ05HVjB+QUA5fSpLPEZBNFUyYW8zPCVlUHRhRVV8QTx3Z3NmeDNCR247JF9FZVQxK1JNMTVKa0NsJEQ7QTcyJjBlPk9bIXBqKWw7fSV2N1cqWmFYQD5jW35uaXNuTypP'@;
put 'UzNxY1ckPyN2aUYxdlhMcCZwdG19YSwjSis0MEg6eGVVKWVmWXVye2psejh6JHxsUWpFIjxQOXw7bGVvQXBiI09eKGV4JXlFZVRoV21sVCldNTVGcz5SMComLzFqakd4UjNibWNuYlVEWVhGbyk2S31nVVhwU0Q6XVpDPDklXiUsfSFYVDAhU1V8WU8yTVIlckVHP1M5Si9LfXVCdF01a2x+Wz1D'@;
put 'eUcjZ0Y2b0JBOiF2YGt4OzVwOF4xZFFJaFRHVT1MWmoubSRUYV8/T1tSRWQ8ang4STcleFkqQXlIN0F5aH4yQkkyI3FwV1EycFA6N090c0xTNWZRPjZGLkJDeTw3cj5KUSUuZV9iKyJvbkpEREY9dXdhN0ZVYTJOM2A1OEAyZkppbDtsKmdvVXEjdCtbVWVAPjxocXA5a0xBLENNNG5WZ2YmW0xd'@;
put 'Wi5WT2ltQUNPIjR2U1c4LHArPThHbXtdelBZQmpFLy4hciIxaCkhWHh7NUtnMGJ9TzpncnQxTmVJbzBfWmQsJndqNn5nPVklfCUxcUsrIU9LckdMayE/XnRBRWRnO19wO3V8ImZ1WCxkQCEkYWJEfkxRNH5uenpIMGA2eyFfUV44Y1ZtSipQVClfP1l8dUBYKzYwVT9rNVhKYVl2UTpGWDNzX1tw'@;
put 'bzZuVWIqcDd1UTRRZD1VdCJtSmsieFZtTTcrUjA1UkhQU31qbS58XUVDWlA+NS98OEk9ZkU2PWxCTmE+YkVfYTZaKFlNW3I8JHAxUl5FX2tlNlZyaTErNXAsdFImfCVNNU0mMVtuRENwJiQ/TG98LyYxMVM9SEhHJG0zPlpxZUQ1S3hEI0tTPG09YnJCeCJXPDV8L2h0Ry8iJkBFaE96fmA0RERr'@;
put 'WnZXZnpeXlM9ZF4re0lFRFJJPT1yRHssaF15Lnt5YSNFX2o9OkN+Z0hBP25nP1dwU3Zue0BsPH10THtiMWZIazRPXX1WUnw3ajBrLmYqaUJvNF8yN2p5ckxjXy41dDluU3JVNDErSX14Vkt3NUZoTSRwOX1WVEBpW2hGRndhXUAzUEouWmRrVTY0NHQ/dFhsa2pSOD9vKmRCUDZLSDgmQ3BuZChI'@;
put 'TGprajZvTkdYWWM2bSVsX2g5OXNVIitjR0Q6QEYxdTAoYjFoVns4QzhbOVZaT2FFZGJhcy5CKXZnTCRhLzo+M15UI0g0MHp8ZS8yNGt5OGYjKUlPUTF4bD4zJDQ5SmdeLDUhMkApbWhmcEwrZ2E7bUclTnJdI3ciR3phSmQ7KkBKdjg1N1gkdmImSWc2WE9nVSt3Yks7UjNJbF1pRGQhJCVQRTQq'@;
put 'SWd4WW5IZ09AIVBpPXx6QlAkd0BHfGZgOGt9WCFiMipmdmx3N0l0O1tBIWtIIXM2ZD91SXRHRERIZl1zVG0wcW82dnE7SjlYbXdGUTo0dFFvdXtaK0xWNkMsU041T2lRd2IrM28jY3A1ZVsmZyU2TCo2TG80dm1mcygrIUVwOj0hNUd5TnspKWFdVlF2SEBncE1iXU11eXlYQnFkfG49dHtPTj56'@;
put 'Z2dmIyJXNmZpLmpHUiF7WyQkMFUzZGpLX3N6bmJ+R1JHJltSSy90fCpCa0M2RnwqVSFDI3hLKD9TQ1s2SSVKJV0ieHRaaUNXYEchIThJTlJ2dlR8QkQvMGtmYCpAYUkpNXEvTExAXnhwMVhVX0JkWmk3Zm80Njd4Il02W0dnY0BERVozZkM/e1MkUUQ1M1o8NWZuZkRnLiNKRzJsKU1uQF4+I3U5'@;
put 'KUZeYmNdeyJ3K0tpJDVfZV10XzUsYH56WkA7YW9KNXFnXkAwJUw3eWd6Z2MsW0pyK2c5b09UQlhpRnpdNHAxTjZ6TCNad2Q+Pzc8JEJLaS9+UGI3P3UuWzhucU8+LDxLOUIsKTE+R2ZxbTsuLztyYkt9JnZudUY7bkBaci8yTCpPWnheanp2VEkqcXFERGdMciJOSyUpMmBCMmVUYSRAT0tedWpd'@;
put 'dyx7TjhucihAey9UNF1ROl1vPHltdHZRdmw5SFM3P0VoVykyKy5xNj1dWmI7RHpdZkQ3SkdbeDRoPzE3RDAuQ0EkcS5UKml7KG0vZzJCdGZuSjJVTTx+fVdaRCgrajI+eGFZL1F1c2U5YyJqVTIoZl4/JXVPYzh8MixtK2tVPFFoSlZLXU9WZUQ3dXs5SEJNQzsmfGdhLFpoWUFheGh3RDh0Wk5l'@;
put 'bCxrTWwvNyJnWENTUl90NHldTGR9bHN6P0l3aC86STkpe1RsWXMhRiksUTtKbFVRSkpiTnd9ITJraS4vMHkiJWszK3J1YEg7Mnc6OmxDfV5ZSCx8MnM0Ynk9WmBzJFtEc15WSUFpdH1tQTU6NVRiSFM4RjhmJjxGbX1XRGsyKkNqa1lVWHNZRnhGVVBXLDJGLmRWUGljWVI1e1kuS24iJmpRJkEz'@;
put 'KWtgdytrREJXe0szcjJFKDpCaFhxaWBKPnoiS2FFVUgyPyJ5LExSYHlmez86W1lzWU5bQDd2QWR4MExYInVIKF9KQ2J5ITBgWnhKOmBRS2p9UStndXhFdFJ6LzpJNXVgT0k4bzlVRUMsUkBxZFsiS3JZSD1zQnVqQ30iQW1MLHA+SH5WImxRaGJQfTQhI3wxNj1xUHRTP3syPSVYTVBuKVhVKGNP'@;
put 'U0ldNm9ofUYsTWxKXSo/Iz0sdFt3SmNvYDF1fTUsYVtwWFdqRG9tckZKUTYxbmQ/Ol9AOl4yZGlbKD4ranBxfC8zOV5saWRULFkkSSQ/S2BXby58Rj49eEtUZ1lWNGdxRyV8cCFgb1hWeSEiQXsjMmV5fmRNdCh9bGNWWjZKIyVDNSZtczI4fUA0N0JKXVJpTHY8JGZLamEwWD44fTJlVGxdOkkp'@;
put 'MHVWUWc8MEp3V0lIcXEjSiN+P09pZjRZMjB4aE9zRT05NWs0VGV3Nyk2NVdAIyMlW3EvZFdNSWhDS2ZhaU9XNi5FWGQ2cTJ0allnYTdTY0tjLE9aU1dkQkApLDhmLkwoPEYxMGsqNngsVEckPzY3Yn1DTCZ9UXd6LzwjWjpAbVNCLHxRXVpGeV9jP089ZGY2PltTSzBvQUFORSI+cDEmdzJ9Imwq'@;
put 'bSgwYXNaRVdoNl0/clJ0JTRPTiFbfHEpbEJNZUo0LissJk08O3dEJHgiRSpPLzUrPFFsYUZBZG0wP1lSXXQoMXdZeHd8Lndie298PFs+dE5RWHcjNj9CIkldJks6Nmt7UlJBTFghWihpSG59UGFObDJXI1hAbit4SjhDKk1FTz40ZzdiKV02e2Y0d0t8OEBgNCR5LCRDNyFbWiM4biI5V3RWUERT'@;
put 'PE5TU2owI3F1T00hTElAVmB5SHJbJExLelhRTH5WNTImTDM2Lzd9UCpHUF5FOmwlfmcuLiNFL0hjOmtgWzBAd1JSQjRObDkxb1Q+e0xHWExASTd4aW5UO2NbIyIzVD5KeGZGbEhpU0ovYFteTDkiV2JASmtNVk04NnhzYDYxIVlabV8/fnY8ayN2fVZGYm9BMHVrSmBRZWxDU3gvUyxdb2JUUWRV'@;
put 'ZiowMls9ZldQWVdlNGBOWnQ4UktIWChqNzF2PlBHMmh1b215PHBDSTMrem1MPUM/T0tNaFVKMXcoS3xxUHl5X3wxUWpHT1oyYSpxfVtsX3RFMGRrTDU3Xlc5ZGZZNE57VnZwSDZuVj4mXUBuMiMpL01aa1ouWCs+NCZIPlgsQ19AVU5Ib1JbZV1oI2s3MkFkMCRmNj0oOX5dLkxgeyFIOCM8e29q'@;
put 'WlBbVzk8Oy42KFdvcj51X0podHNGPFZ0ZlVqWG1kRXJZJHcuX2sxfHh3QnhsOlJHVldeWGRZKmw1Y2F+ei52cE9yfE8re05yIlgqTFU7biNaRDcvL25mc0dGUmhWYHN9aFIzR0Z6QkohTGErRmlBdUE+cC48RztjJEkzbFdQdmx+KkAjUCp6JDIueTJTbjRNeFlkRHcxJEA2REJ6S0tBMilhe0gz'@;
put 'd1orZWpiMGZSQCQpM11qVSZzYkJrcmNncjZ9NipvRTE/QSM3YlMuR3Q/czFMWWo/eikvWkFzfWA7KmRHX1M/ciMlcWlwOTdgalJiUEJDTDU6ZkNHa20kako/Z1VJNWR2bVErbjo4R31xZCojK3pkUndLMG0pZjdiKSoweH5WViFle1EuIVh5fnlaMiYhYnFLZWtRREl7K1BXQFtlPzomeTBGXiwl'@;
put 'ejZPYW9tOCxgZX58cndOUCVGdS9LdmIxSjdHXTFSOCNBO1kwd2hMWD12Y0t3aD1jc0I+RU8pTlFOKF9eTnA6S01EYUk3UmArdzg/YztHd0Uqb0U3XTR3bjF4VzFla2ZgJDQ1dz4hQUNldW1fbk1kc0cvX2lQd1RmODcqWjJQbSJ+NmFofCkjZUx0XUpbLyJeXVBrclckaW5ua19DdGsvPURkX0db'@;
put 'Ilt4bDNJeEsxOmtnSCNwNUB3WWd6RT1KMEU+PF9FNl8sXy9qOGZOU3xtSmhRVGxiWEd2RUhHT2V5YD4wSC9aNDY0b0g2NGlASS95LCRHbm5NTkg8VTphNmNhVXppKkk+Sy4qIUl9NEgvPUh3PlpGInQmdT1TUERPbjE4UEY9L2A1T2tWTTt2UEcpd2h+aiFfSEBzXzYxT3xbSExLdn5EdiYyIl8i'@;
put 'Y1FxfDlXSH1EflZIY3l8MFtOVVFjdTJbIlk+QEpZeEI/bEY+LnBuWUkment8P0UheHtAeGdtNlMxYDFiIjVDRXFHaGFkJShXazVrVld2TkpuelVyXzc9MFhOWzEyaSI/aj9+KlhjT0t5VnckKHwkTU1bUUlnRVMkdjB7aF5ALkxAYUdFdXI6OTIqZjk9KXF0OFMmY3dOdXgzIntReGFmRmArVjQi'@;
put 'WUxQM2l8Vy5OTyl6LlBreE5Fa09RUzRUS0w3XjVjOjshYC9xSGRLbHd5NSI+UjE+RTUobytxeDV5QHZ7eTYxQlBoTUF1YjZAPnIhWiliSXRHRTB6VXY5UUopUUt7cVZsZ2JeMiYhKW1BIVRWd0hKMFl9IX1DJD5VMjdwVXdYYytkRVVDa0RlOVdMP0BSP3RuPihYJC5sRk5PLHtza2U1ImsvRjVs'@;
put 'JHUmR25CMWpUdnFfODIlRV86YURISys8IT9WQ3tqWDNAITxiWGhWOHJmQXp+N35DKl92eCVteDpnRHo1ImZRc0JlZGlrXlEsM11NMGE2VGNHRSVzU2ttN0h4Ry85W1VNfjVyUDUkeHVlTUVEPDopXVp2Mzped2BoL0UwL2g3QU9vJGM0NUh5aWtxMGF5WipCX1FQOV5xeTg3K01VWWtATStCMVV+'@;
put 'eF1XUWxYXk96cFR8LHR5cDZaU2NjQVNzUlA/Ki47Mj5xIlhybFJPQkl1RHxOX00sOF0vM1ZUNUgvNm5qeyw3OTlsQ1gwdndJTzpHUUtROylSWzVdRl5LMFBXOHk0VmVtRlE+MXp2SmVKbWd7Omw5QlQ+RXRCZnJ9KHlAUEIlWWRsVSliL0w7M1o9QC50PSw2dEswdm9+LEsqZzFkTTxfXT9PXitC'@;
put 'M3dCUCpbJCJDdDVyKXdjZ0xpWmxAbEpIa2AvZmA0LEk/LGVBKiV6OjdUQk9rb0lWQiVwSlVwLndib0Y6YXRYZmtQLjtvdDVHPHl6XSUiW0ZDPnV0WnBXdkwsUUFWKyY+eEs9V0ZEe0kiPUR8ZX0iWkNdIjBuXV1bJkI1Kn4rU1Blb0R3aC94b202dyVvTDY7Xm8mInhaRCpkPklINGZoTmteInxU'@;
put 'cm5ySmkwJFYoelpRN2led2VGV0pnMFtrXjdtUDVUfXU2TmF5blhTKTZkcztUeiR+aE1ZaylsdXJoUSslOSFRN2M/MGdUKWd8ZDFDd3NGdiJEZ0dMQUsxPklMbTEuKSI/cURrU1g6NlcxITdOL2MvXmMhfXtaNFV0OTlkdzdEbk43SCVRJkF+UlM+W1N1OVpKMXBSNXpGYlA7QHt7eUpXOFtqaEo+'@;
put 'Nnp9ZjFuQUsmPHckVmFFaixvaTxnbTAwPkpfdzpHKDJffUtQSyh8Yyl0P0kkL2xtZit7fEUqO3gidVl2YCNvfWFxOVRCXnhhRU18cWopR0QyVF55IVkqTSxVWVc1cSF6PGtLIm8vRjhqZ1BGISZ3QDl7JS9hUD5zW2NKKTteNE5MYDY+SHJZcHZpR2xnK0c7RX4qO1d4MT4wVCNWbmkpO3tMenZM'@;
put 'IXlPZSRqKDAjXiorekFaflFfMytMT3k1OV51bFB2LG86T3JJbj9kbDxpY1p6Ul9bUE4lSGR3QCpNQzJUTTl9XWJPZk9VVEAuJi9uN2NtVjB6Vzt5fVpacW44K2RldUx+OTc4P0QuI1E0XT9JTTE8MylGXyooMjlnRXIlLCRmXWtgYTtJTU0iV19iI3Jvcl8qSltLYUtGSntKUUw8Qnl1SntGKkU+'@;
put 'KGBDRXcqZ2BxSlBHSkNjcnwuLF9wP3NIK11QKmZ6ZlIwLiUhVTs+YyVHNXxoLHg2VCFwSmhXSyY0YWpncmNbeGIvdnBzPz1+emFsMEhHSTxOa1A9S09vQl5Ce1Nsd3s+Wy9IdnZucCQuTmomLFNvZ2Zpby9YRjlvWkNLTEdsT2xbKm85dm1ienFwLm0sVEczS2tGTl98a0N6dVdnZV9MNGIxSTEx'@;
put 'JndzcE9XcDopWWFpbz5BZ3lFdzZiXUFlNV1ZYzhuVDgucnlWb0VJVltwPElMajUvXXlyV0tMQFgwN01SUmg/ezUyJX56U31FdkRIZEshUSpaR302PS91MColKSI7VE9rXTV+bUlsfWFvYFduXmNNO15XalBkeEdgYSNBKyElN118fTFhWWpgIU5ZdnszUS5tK2E/YmR+XmRIXVE6eSJ8c0A9SHwp'@;
put 'cXMrIWRiWDh+Y1B+OGI3KHNTYUhic2ZhK2wsPn5LREdCPjFVPEZOdXh3PiwsNEssc3JTbC85MXVgTnY3bTBBO0FaejNfcEZ6eVFfVUI3fUpZK0UpbT5EQEB1QWlvQ1lqdUBxeUcrXV80eGA2Tj1CTGFGW21ERTxYQyNKaGUjLlpHL1UkUUwrInJGUTVPTj81N1Ire34yQEI5TV9FZV5JNTpCIlBm'@;
put 'JmJOaXtJMD59TmMwN0tCJE12dTc2fFRPRzNFMn49ZkU+SDdfXnhbTi9sRiFWcDlLREY/PGAoa01LRCRndFhWY05XWjUxWVFDPFFyPE8xLE9dOkYibjRwOFtgcTYialQ4SSF4RTRnTXFHUFdHUnNVTXg7SSRGUXNpaiRQO1l5ZGQlfUl7OHZ9akx3bEpIZz5sfXpkKWBMeWFoWjIkTXBpbDo0c3FO'@;
put 'blcuKHQwTXs5OU9vUTRwdHtSJSs/OmhHJUJeRWlmfEUwOi8qKGNFdWh3JlZFNUxdd3g3eWIoaG1MQlU5VFBNUUZjeDhzPj0qUmx3WC5hfTdjTGI3Z00hNVFtbnNQbGg6O0IrIztHfnhBPGouYTV1QWM2OSxMOXp5YnYmN3d1Yi8ue0Z6P1Q4V3dPPVZBUE9WOkVUamJrQCFlP0lYYHUhIm8pQDY6'@;
put 'XSFPcjxjVFk4PjxPKjV9e1FpPkszWD5LLjIoU1ZNXSF6KThwPCw5YS5RSShlTD9nQyhbaT1VRjs7UHdCQT4hPWFLVmh6fWc8NyVtWT54bFhMRjhnfChXZTdPdFgiP0ZKN0U0IyFDOW51ZlZyQi89ZGE1ZUJpcFBKTSwwaUVSNzE9NHdMTl4vazpdXWlsSFFydSloaChRQng1SVMubnx9e3p2Ikpi'@;
put 'aVpNJmRrOkEjeEBLUHJgazVSSjZTTktyLEheO093ZktoSn5WLCR1XW5xPG0+eEkiS049RTM9aVo0fTIzNTlhMDltZXc+PlVuZmMsT1JJMjBLW1d+WnNGZ0BINmt6LiJqO11PWFhMZlgvVzllP2JHcColOC9QYj9GWDZLaiE7MzE1WSNbV2JqZjAoMFRjZiJCQF9ua2FxamQkfVdCeWRLM1IjLzpU'@;
put 'aVZERGZXOT4lS1tWRVl7bmgvVnpYdFRAP11pIiRQOXUzQGI0ayQwXkoyWjloZ2UiLmMiQCsvZkxvNC5+LixGRk4ye2IyaSpdcXYvaSFkRUg/X18lYklnQD5RLF51UjUjKl5xZFl9cVksOi4mMFYjTXhPNnhEXl4pXzUhTWZdcGtyQFlQVFp9P3BTfHolamI9PW8yQnMkKk5nS1lRaDY4O1htZG4x'@;
put 'ImpiKGJsYyh4TGhDQS9jdkpfeWh0QipPdj18bSVqYStKXTMvc2BjemdiOkw5R31GYUR+QFQoUHFOWWkoal8rd3Qma0svRCI5M10udlI9XXwhJF96K2E1P3p6W0hQL2tXR0d7VmtgZnZCKFR2YTV7blgpKHlHYDl5a3ZFLjZSW1ZnIWptdlIjZjU9djtucDdKVFE9Lz9MSjRWWnJnOUZvMzI2WT5U'@;
put 'WDF3fmlbSnoyRyt9aUl3KVdtdURYZmEkZkdYUSU9LipqaVt1bWxqQHUmfDtiN3hPWCxnYnNLPGZlXlFSdG16V2Q5MVJkVjRDJEdsYkZzVSNNMEFKKEt3bGdaQH5bVTBYLnJtaSo6dClZVXdsVDJqbWlqcG4oe1ZrRng9UWVROWJZTUx4QXk9PEwsTkNsQlZFSDhYIWhTY1M6dGdTeEk5LDNCbi4u'@;
put 'Q0laeiMjYk4sdW91UF1XWEJpeUNbdVZldTp4Z05bMSZbOHU/bmxjflI1Uiw3KSMoZn4qT0ROcmh+b3drbS5fSzw7VURIUkh1fitrPCN2TGwvMm5xKGBDKTVAKT9PeVI7aj0+QGwzdGVBLnRsYDAjOiEyX1BkRGtEYjVMKjxIUERxZzkmcjd5dF40W0ZpUHFJXmYoVHEqYG8kWWxvMCZifVNIdi9G'@;
put 'SCFXQmJROEVicT1bOktCWFJQfDl4QUo+TyJWLGRmODBKQ05NaXJNJDVuVDRMUXkiSSp3LFIhZCRuUnUiN2ZJPSoyTVl6IVlDVG1fRmJMMVFadGlhY2IqUG9lSjNlSjE9b2ZFZ0owbVdDTl4hSlAySkxjdHhYJmIkVFolSl5VWTZyMiIsSmAmSj16VVZTQV9VUXExUnNrdEZsPn0rc244MkpsRTxJ'@;
put 'e24uYHouK2xaZDljY1pLa2pHa3tjQFQ/bGY5R1dAIVVEUXBWTG5XdSE+e0tmR1IlIz1FNX5VJllMe3FUR2c5Oy9FOVpxZVpPXlRjOGtLaCVMSVBveDJULFRfY2RCZmVJcndgRHIpd19iaG9+SzxuWyhmUjJ0dUk3bVlDJWQldkQoIWh2Wmd+UWdQPjg4MXtOYTskXytWITxdaEpnUHVZR3pLJTZA'@;
put 'ITtDZm9AR1UlYkxUNjhMfSRrZ2xxS3ZIX2VkOWEvekc4ajcsJC4iaUp+ITgqZ3d+OSZJd0wkaX1GPD9gak98Q1MwejNvU35bMDspQntWUFc+SjJwOXckMCRieCRrbkxwTjdASzg2PklmZkIjWSE2TyRXQzhpSHtATEdAKjdgTj9+Xk98YWdbY1JIeVkhInRZO0pHT05gJG5vOiZVXjN8KC9nX1ts'@;
put 'ZTZZbVhVa3AhQlIuVWJ8VjRzakFFNjJuQG8/PDd5eHYoKTFHOlppKjhPaFZZbFVLUkdheVFIT1A3I2VKQXQsPnYrfC5FXXZoUDosfEVUb0BjR3MiOyg1bnsoN3FUMnIzX1EsPT9WQlZmaEIzLl14IzpEPyNBaXM6SE9reHVbVGNRKy5gbGZ6VzFBRmd7N29UWHxKREBUb2RYN1spRSRsMyVwNmx3'@;
put 'IkVVVj9+eFUyYEQ4VCNrM0soS1pSSVN0fCZFbDZqc2thOTBGVXB8Z11tRT0uR1ZlS1UiQSlbM1t7NnF5YW43PklOZD1lRmVrenFLa3pPS2l2bUxIal46bmJkPHdhW3tuIzNtOTN7dD12V2VCWGtVV2t5aDwhTk5qfWZ2JCRTMV9pRGFMTHxTUjIqfkxOJnhCfkUiVlViajleY3B2MjMqSE96S0sk'@;
put 'VXI9bDtvZjZkQDF8PTFpYSEqfTBPUGZzbUBaZ0VyUWg/NVc0fVhvQT1wLDhgVlFNYld+SnBjaGA+V2IlNnU9a2wpQSUoc19Obkk9S28xN0Z+YW4oKih3dHh9V1BXcVtgRk9MdF4xYk1wTUd0QHUqOU0qMDNbQHJ7L2AmfCZLSXI1fnVPekYmIjNiVGAuMFRTM2tySUw3YXxNdSwsei5iRlIxTjBS'@;
put 'eVMzVSlTNXRjcHI2L0dyIl1ycEt8MVdGOlQ9YVo2MkhnbWMhKXdMPTQ9M3BoOzVaMzxSej8+alt+XXF2QCRRLmBWSzF6UWw3NT1sJSxwOXlDKXpyIn5jVmZEaVRoYy9gP0QuIj9YdGtEWnI8N11JOk0scCojWUw0VDVhT182Zi5kan1IT3V8XU5BUHhdUGB3bjJveWcuaFYpMzJ7ND9jTEM2Y247'@;
put 'fi4+c2lFMHFbSWpAQF95dXpidFF4N2dNfHM5dEdHWWdmQ0VGZEhSfTE3O3VJYj9JdG9IZ1M3QS5NZztDMWhuJFJ8LkJgLy8+a1V3QVN5Szs3MDopKEw9VmNmWThObXZSI3g7NVNkX2JiNXYwKmF0bXxzYTdZVkI0R14ubSE/cFoqK0FCUm1FajZ4Lz5wWHdiOEN1UkYlSV5oSDovI1ciVj18KHdD'@;
put 'MCw0dHIkOkdHKHIqPDxJJEN9TE5JZlMlaGV0UjNQSVg7QlFVcGIqaT5WT0QuPWFzUSF6IW5KSigmJU5QOVdvaCNIXTRLYDdqaUVqbk48ZzluPVtgT0pZTCEsVE4qfkk1TXd7LzN1aTlHPXRYPlo9OCEsdHlRPDc5fiF3SW1ocnp3ITIvPCkoZjNLXV40SntlK1coQitXanRnXlhaKnp4S0hWTTZW'@;
put 'PjZPXk5TTFU+Z0Zab35MO0hgNUdDI2tdJWtdY2d4fFY4cipdYnVPL3sjJkN7SmtNdUx2UzQ4LGY2Q3RGLjYxZVRjamxpWH5lbWpYPnkvTy9OOHJgNXdjSF53NXR6ang8a0xXUmdEVX0zdSE0IU5WTVJHI2EmTXp3QD9FcVBtTTRbWW9TM1g1NSlZe1tpaztqYUM9ciQ0PSs9YCV4fVJzTW14cE9N'@;
put 'YSU3MlIkXko1fE1FZTFGWW9WUUFGJkJQO1QoKSlSbkFUZjR7eC9Sckt1Y31EciRQbk1rcE95ZG5nQT9bbF40VUo4YVM6WGskWTRvViRsOzVkZCgsUHoyM0hfTigkQjJ+SzlrZkpNdTdWKzJtSE4ydjNvYlgmSHN7QXZHS2E3I2p0Ri5kN3lKVksoTHtPa0JuUXRNLjkxI0o0Zk9BSFduPkRNVmp2'@;
put 'OyUiR1U5a1tZeHgjRXRBandvZmo8VHRxWSs3RilAOnk9X3B2T0lgU2lDL3BsSTZ1d11BSCtsYmtscH42JHNVOyNuRkdXRm9JN2JBfj4oaExiVkAyYno6KktXPjB1T3htaUU8cn49bXNfdkh0Q1p8TGprUSxLbGthXkZiLjEudUZ7SH5HTEk4QUdBand7QytAVChIS28+RG9ueHtISkhOYjQpcCF7'@;
put 'Z18yNCxuJiM2MjlLOnpTQSQrbFoqOEh+U2x0MDN9eko9ZG0xOVd7OnU1OWpwNEpeNSh8YTArS2ZFMlFGZjdlUkJmPjJVfi8xRiMmRjVXSTc5TzZsMyhvTklPUDFFQGYvUGQzcSx9Y1p5fCtQOWV1OWBBSmwvT3soWE80L2ZZQUtlVmFZa2M8Q1hNWGc2W1psOFpUWj5ofDo1ezVUOktAaGtFPDpz'@;
put 'VDB1clEhbClRbj02LERrXj1vMChifClpR34udy95Tz58XV5QYk9KJFYiajVXJHF1QnJEfHRERD5IcjR7c1pbWDguYW4/I3ooOGJ2JipINEE+KVk4YDdZZ3crdk9wO25JakZuXmd3ZTwlYCxBW2UoZyYkJXVie3doUk13YGJgIV9XYXNfNVF+W3ZPUVVCX01sKDh8ZEsmWV8mfVs5JnRCSFNXTHB3'@;
put 'PG5tdmdMTmtuJUtyLnM4c15UeC55O1BaYE56VXxycm9MNjkjSTAkZmpqdi5TOjFxbW1TN3BJcmBedU1ZYXxUKGw6Q1hBdChCdD8+PDF1VFdHWVdRb1BsJWdVb1V0YndvQ2xoLEhzRVN7IyRENDB6THRpb05SVSFfdmBHI1RYcmhZVjddSjZMc01RWUJ7MTJAekl9TEMlfHQpN0RLIUR1fmd8XmUq'@;
put 'TiROUSU/d1MvVU9EWjdOPDlYI0ZjSVdqTmpJUko4RmAvdmJOMXElNkR0X3psTmJJejV+by9CcmFgMUglcWU+a3VxeWtuNlFxQVNEUVpOeUY7cXt8U3BjfEArIXgiYn5raEpMMTZQR0NDfGlQLHx5O1BPR2BVRGR+eCNOPC9ZOz5nQ1ZdYkJHcDNPP01qdWt8WUZRSG15NUVRVSkucSEmbEEkfmhD'@;
put 'TEh6Tz5OKXJWcnR1KnY/LmJyfjROZEtkZXpkJSguLFhvRF5bNFRFPDU/VF5VL1h1ZE4he1grWEBPN0NgNThJQ1JWeGVZQDEucFExNT5ZPS9CVH1DOHY5YjtEKFRuJCI9JExacmM5Pit2fj9iPWwmdF5RcXk3Tm90M31uIi5ZOldBdyZPX141Qm5tbWFSPyNUT1V2N2IqW1FuTi9nSDtFfl5WSXwr'@;
put 'ND5adHdjNX5PPXdFR0tWa014bXtZUmA+XmVqPUBzQnVkYVRnbkFKe1c4Wjc5PkB1Z0R5KXd6a1o6LywsPko4KC8hSyUzOmwlNEB7UVVYMDdfVGM7byE1IzE5TEJpQmQlRDElelZ4XUdOc1l5bz9MPkJQdEp8Lzh3Ol9SQHJHZShKcHYhcC5yXzJ6YjdOdGhkaXpyRmtFeWJyUmUpLmFTRTpKXVtW'@;
put 'QDRdUDwzMUx5RyhoUEo9eTRyO3w6Zn0zcCRBfSNRVFAkPVJYYjBTWzhGVE97YyZ0eEFKak5HfHNdcXZnd1ZTZ2RtNm15dlA9cGFObm0qbmo0cHl8LGxSbj8zUiNZLG1sVHZbOHdAMHBmVWlGX0k/OWVXJiRIQHQrdyVAcjFSZDFXYjNIXmE/JClJKXVjYX4uQishMXE4UiIoamY/UHFre2RvQnVX'@;
put 'TS5mLyF1OWd6OG1zUzQhNXt3eVdBMmQ+XVUxS0tIekBJKV1UL35pR3pUYyEkSXhXNDk2c3FaJjhmMnJuPHVQJVVAK0Q0UF9oN0xeSFpqNHhNdjZWfi5hfCRTempIRGsoNl9kMEUuLk1vfmFYUCpAYUBJSihUKHMyI1JaUSVydm9RK1puS0BzMD9iYjUwVXxzQHEsJSgzL3pAQkNNQzplM1YuaExK'@;
put 'UHVGIXFzVkh5PXhAdT5tN0dTKGpuRWhZeHwiZj5+Qz8uTlQ+UFlzfnFXQTZgV21VK1prJXNhNXJsQnxoQC9mfEsufWZuS0dWKjk2TXwjbWJoQE1wL01IKiJGdj52Ryo9WzQ0Vz44cDdZYHdQMD1ic08jL3YoRVgsKU8rdWduPjt6eTErZGEzSmNQaWB4ZzpoX3s4ayI+KjFzYTx4QCMvaVFCZDYo'@;
put 'T29yPl8/Q3Q7Yzw0Uy9WLkxGUnNKa2tKcW06QntWJGlkT2BuWDw2TjxafmtaVGsrI0t0UVNodlZ+QWZreDtfUD9PeDRIUG5ufT92Jmt5ak4jeXciNVhWSG5wN05KSW5kMG9BKSlIUFNjUnZSeVFuTE5IUzhVc0Rlal5EPTpKc1djaE5RVSEkaFBUYUQpe29nVilkW0lJZXpmIyFAdmxmX1pAWjxi'@;
put 'cCJnWmBwM3BBSDY0ZWZPUGtGVEVdQT80XkJHLnsraj5aNlhnSjh4R3ZaPWV7VTBYUVBpTjpCUEM/dnV8RHhyJGhmZDkpVjolViFLUW0yK0ZxYlc7MTlWblo8dXhFUSltbC47Jn49VnlaKSUyN1kyXX1qLGowN0p4JkVIZllLXnw4fS43fGJsRltCXklCLypaPVFuOlIlW2tiNHlnUC5QSC4oaS9Q'@;
put 'KjV9eVVbbCV1Y1NmJWcqNWNJcDppMS49RV1FPDVlZTBUSUk/RD84S111PFRUcDZCfkRbfUNHRll2LjskaTV4ZUZGW0B2fHp3VktbPiV2W1pZfTpsTl1ONyRfbThELzhaIXVRaiNGUng9c3MsY2lyYGFHck9eKmpJR3wzYzhtTTdtMWRTMVoqIU8sXi52dEFrbnZ0WjQ/NHViYk4iKV5qaWp9Wj9a'@;
put 'TGlpdG8kPzdMW2ldTUMzYT9lKjdOcXA9ISh4LzdsPDptcmooRCJWI3NVUGR9XTc3Qy9wZU9NdHopNjsqeF5yLyF4WVE7Y0E7aFdUNVZoRU54dU1dLkZfaHVZTUpuX1BHcUw1SWlaNShxVGFWL3c7R0NjOztqeDoyQEdkV2JgUGpnP2BpI3JDekhAaWhYY2dgOWBGZzFgZX5TTTlzbSZEflpSS0lJ'@;
put 'PjV6L14vKjYjYlBfLzh7YVQ9cjptW1kjZyRyc0F8QUx+PEhCeGF+OEg9NEI6dXkqWDs7RE43aEAhT1FCPFlFSkBBTjtGNEMwPHApfGY8OXArPl03P24yMCV3K2pBJVJSU3QyXnF0SFttTDJRPHg1Ll83cn1RM2pudkU0K0w2MiRKR2ViWGg7WjchZnpBJmRyfTl5QG1FY3U9bHVVWyYzY284Kitb'@;
put 'aEhxWTdkTWdjS2Y3ZF5ia2tGWzc5Tit5Xn1Menx5MU1kS0BOOH56JXQxP0NLfVM6Pkl3ITE1VmlaSXo9OFRjTE90e14yJF93MllPXURDQXh1SG8kNGBWUz08QlY/dzVwWXo7a0VtYjZLMHt2b2puTihiUnYsN10vUlRjP3kkNSptTE1XJTNQMFRBT3VKPWJDPW9uT3VwVColNVEuY1hpN0oyPXx1'@;
put 'Si9wLF15aEI6PEYubXciO2hHdz05UDRkIUZ2UCkoK1t0XkJQKT5ZZXYpKWU2a3h2N3sweE5ifjYkTDpUXlR0ZEh7KFNpSGw+MmdBbUhtTiZpP3ArWEgoQj0rVEBiKCN3NTk8c3REbWhiOV1mUVdnOU94ZW9bNzhMQXA0dVpvIzF1Kz1vVmUlND4rb1kwOH0kYF50eHxxdVg0WFlGOk05UD04emc0'@;
put 'YmlILiNQXkxgaSM9VzxbRylfUmFveUR8VHkpRkgyZnMrOT1uNXw3OkFQQHIlNGVSPV1NTW1BXSFvc2R1PCJFKTBrKV49IlhYNVdfRSVWVEN3TnFbaV93KDVdS0t5K2FVVnJlT3RRNzAwdGp3b2pIMiV8TCJZbW04JGk2VDUqXmtGOEg/Tyx3UGZeaV5mI2Ffam5RRXckOyxicSkpbWZ1RSYlKDNZ'@;
put 'fXQ6fDFQPjt5UCJTWlBVQUkqXilnWGQ0InQ2NlcjWTNHZjxCJTVbZSt0SDl0M0V7NF5PVlYuaGU/WFl1M1Y8bnIyZENwVHJdd0Q/S0BYUFNtVmlsI0Jfbyk0SF0wd3JnLlRmJCQiJUlgMGxgbyx0en42dT9sdFswRVFZbHUmQkBuKD1QSkIiMCR9fU84L31sbG5TSHh0VWgqK2kyNXYsQ1E4XSh3'@;
put 'a3h3Z3NXUkV0V1UqNUojdkUhMWhoZzB5UEw1SV8mMC8rNEp9cWo+TVB9bXZlZmh0bCQ3VHJFaX0+SC5OaF9YTWlgJjNtSXZvXWpOYSR6Tl9vfnVmPXhjOVd+ZGUvbS58U3UuVnJbNSQ6LEkweDluLnBKb0ZJMipqdWtVVEdWTi58fUYyXTJtN315cVd2aHJ1PHYwdXw9TzArMV9EOSx7Wz00Lk1D'@;
put 'IjV2TlhbeGdJfXUqMi5Jaz9DQVJaVV19YiNZPkp7fj9ReGMyLDNZclVVSWtQcyp7X2B8LCptLC9pfmtEXj8kK35jYzFjZCNPenB9T3wkenQwZTckc1BoIUlvUjl3SDQ8aG9Ad0ojJC5GVHhxYzI/OGp0YjB9d1dTJT1VNEhDNWBganhOUnZTJSo8eDIkJDphMDJEUCwrRFhEOkBhWTxKKlQoYWJP'@;
put 'JDtUYXt6fmVwVnR4KSxFZlRWSDxQPypbYEMpanl7QV14QUQjWDB6eiQmUkJ3M2Jzd21wPXtYe3BmOzxMeTpGS1ZlKS8jUCJobzBGbzd1eUY9LiYoZylNR2BvMSNMMkAhYDxrV3g8O2gzaitCNV0oRndhSjsiWDs6Yzp9IlRAfE43ZzJRT1Q+TDg+SFI+YiVQc0pWNmJ6WDFPT3RJd1VQX1FgTGJr'@;
put 'M0FOeW9zWF1SYWVTJCFWaSxbVjdCczFnSzZBcnklUSohNT5eW3NNREZHSz52ckI2bTsyRGd1eUhTMWJIUGRbdnhJeiFSaGpYanEuaDBVJmcuQiZtWltnYzlSTVA3L2ZxZDtXKldnVmdgcXlbSCtqdnJ8ITM+fFNGTnZ4WUglcypOblJ4KWRPRWt7aF1wc0p2XkVieGM6VCtdbzx0Ikk5TjE8YHoh'@;
put 'OHNOTzU9fHwkUy9ya0BnWU5jUyJfVW0sPGcmbkRKbio9fT5zYkkqIzM5OiF8MD9hQSl9Q29ENlN0dWRnQ19gJVVia3QhNTMhNCNsJW4zfHxiZnRman5oMWVTcCMsKjksUld1cl83eUx9U2gwVllrQ05GSCxDPC9+WChsQmpmPWBfSjNqbS87SS5DS0RlbihJdywkYSYzYzA/MzBkbVZCd09PO2Bj'@;
put 'NFUsWWQ2dTYwVz1gVTIlaDVCSFUya3ExMj08TndYZl4qdFpXbmpiNGJKWldCOiNpP29OTEQiUG8iUk4vZ0h4YD5zYX4kKEpmJkR2OEJZe0c1dERsYU1lUy5OUSo3dEE+PVM4cyhMQHpXWig9a3VVdyJOTXciMXgjQWh2PFZqTCY+fTBeJjVVayY8YSxyYzdqPjkiNHBlcV0zSEV9P3UlPVY/Z1sj'@;
put 'W2t5XnVzXVRkT1YuZXRTMllTJG5sN0pEeTYuXlAkQSN1dDlBU0BuWUM7UndhK3NfQ3VCbTBZJnBdO0d2JnhmQDRWZmA3VCpXLnFpZ2pYdXNuUU8raHw3JUsjcXhHSlllXiszNHo8OWxGJmlzOylaTEJLLjAkdkR0ZkgrPj96TEl9RStUNEJ0YGh4Tz89bEFLbyRiMz8qTGorUXRFKTg7T3R6Uk5G'@;
put 'O2pAWyFYenVMdStdVW9VQn1MR2Z+dXc7WnNxX3tuSVBAb0QsTCNuSUt6TkduRV1vcVBUbGk0c2xFNiMuYTkrIX1MMk86IU5FTzhfdUtTYzhHLk9PQFsoNWNfUUpAeE1me3VwdWIlPz5ZISYzVEdIR2JuW3Y3fHhpb1k3eXtJSjMza2lYdkRLPmcuNWtoMGdaN1BaeEZoRVh1Z240KHplIVFbd0h3'@;
put 'R30yKj03TEA2W3haZXRxcUcze3AzKitMQ2E5MVJ7cWhMKS9WaT5iSE1LSG0jV3FQeXw5L2ImYTtGWHcsKDAzbERFOkJCdT9wd34lfGhtNDJefFpGJENgc2g7U1pwM0twZURTQyshZmhaJlNGPCJlQiE7THQ4fV8pJCRgbUJYNEkpcWNXR3NfWnxLX0ZHXzNWTyxpQWNKVXZaLlJSMHZPRHpfOT53'@;
put 'ZX17dG5ASHJgWlRSSns4XjxZV082Rn5XX145P1V2eis6Q01DT2x0amRjXSV8YF4qYT1tTHR2N3pXR05yYkNXJG1YdmdLM1Z5cWZJKyw7YyZuLkBVUTJeN30kemdnMV5CfDska3RiMiMsQjNwNW1FRnAiNn13PWJwS0VuTl0/KVlMRmxxSCRFRlBpNWNVZmZdK3cuSEp8STAxfUVBQTAsRU4xZHM0'@;
put 'LkQ2TXFPa25MRChDWHNUZHYkVy56K1JERSJsZ2kzdzlPLyhlPDlSWjEoMnM+Yjs4fGVmSUh7Jm5LI0p4RHtfVGk/XlcvezFoIX1+KyF9UGxOUmo4QDJIeHd3MkR6L3huZ01ebjVXRWEkZDA0Y3grUmxzRy8rfDtfMSxoKkxZYjYjc01OdFVaPFJlOSYpcD1IdSVaVFtqcSkxXUosPSwydGJpWDNl'@;
put 'd3dGJl0weHtqT3UjWSN3eCxFYngiTnw2TVIsZkkrMjhrTG5ePlNqXU5LKiZ3Ql1PQDB6dXN9TSFRSjZ3ZiVVX1t6eiJHc155Km5kKmZLY3pvYGdDTWBZMHNHL11lcW1yRltxPEdIMU9ZSSQoe1BzMHR0fnpWWVtIfWJLY0xLMl1PI243bjlMMj0jMWhqTGZAdUJDQl1kc0FJMVIvTF5bR0t6ZUc0'@;
put 'ITo/UT8iR11STV1aRUFjMy5ldT1rVTxhOklnWWN1bmBuInEydGRZUDx2czhJN1BVeD1IZGxCUj8hfkAxZFMsfGQpfl8zZW1OfDRkZlRHeyFsQz0ra1ROcEYrZzRFK2pydmImJjE7eU4yO2EiQkx3M3p7W3xRTDQ+Yl8rKFllY0ZnZDZKNWZsPTxKe0FnYCtoQVhvYnRMRF1tLmlWdC4pW1MiPGlA'@;
put 'U3cucz55PGY4e25FXmEuUkRzezVoekRPY09ue1FFWVNUL3w9OkR7ZzslWUVLeShCPmsxMXhQPSFZfng7RUV3LGAxYj4qLE5fbDFxX1N3TCI+WE5ocmtLNlFjKCsrNzI7ZT1gezdJfWVCUH1kOHxqZSNIOCshdW0zQUA0M1ImdUNxIyxLSU8mYzs3Q20jeUhFR303dzE9V0J3fEs4ajxUMm50M10l'@;
put 'L0JiJl4wTVcqOyJiRDZ2VDVJUmxjYCwhK2BYVDVydGthVyRGPkpUIzpsSXZEPUdpS0IxSSZjbDAzbVIme19rPz0+IVs2Z1o6L0ByS0c7bkVPU0c2SU9dSjAialRTfCsvbkFDPzVVTlRPVl1teVU7JmpCUkJhNTAmP1YobldCd0t5cHhAInJROD8mVyk4MjRRekIqIiQlTTM3biM+Q2MpRlJUdEhM'@;
put 'ZzJ4OGxZP0xRZiRaVCNEYF5WIXdsai9gJGVtLG48UF5HXTY1QEE8IiYkODpfP347aXFBR3lTW2osXj5oYHt+LGsxLko0OywqenVuY3clRFErJi95OVYhUnYhfHxpOEd7RXU9O1dadll5YjQxYjpQT2xFSikma0M0N2FaUWlCLjU/cilTWWN7RVVfTCwlcklTQll9Ll5wMC9zQGVQcldBN2FvU2Fq'@;
put 'en5OZik4OUBbSClPe1FHUiFKTjx0dk9BU2ZTUHZ1JG84MS5UMkNgalhZIVUrfDo4Uz1Waks/TDFUW1BULnlbWGRDUSl3YVVzRVE7b2pkNmRfQCV2MjokWyt8bUhlP1MwTjhUPmt7d3pKYCw8QGtsUGtpLHJdaSlOciU+ZEordTtDTVVoTUUuSTp1QCRgSCVVQ1ojeCJuLmdkVFMjYjs+Omg2RFtb'@;
put 'eEMzPF0vXTluVExDIjpWd2NKLk16Wml5dk5DLyowWmNdSC9uYDlRTEx9NEZoMkVqSixmZj81TWFRTVtsezZgdE0wR0pCRWpOa24xNzVLRVI2UXJRIThCTEJCRzlEQ3pHTXQ6NWw5VXBuOyh3MWtXc0srM3lvdkE0LzJfejNAYWdVNXM5aHh3JUIuNHt6cVF4Ij5RZCVvcHpFOypjYjhqWl94Ym5J'@;
put 'W1lGJF4oSEh1aDpFTS8xUXpjI2xgRD5sXj9KPGc9N0IrJi5kXjFEIVZmdkAmIiFUKH5VWVJIPi5CYlo/WmpzJFU0SihVfF8lXjFzOS4lVFFqYkVrc1hkb29xeEMmRyNHekYkYChoJTFhQyNXcTgpc10vd2VKeCswbGE8RXh8QC5tPnF0a2QmYnM0Kig5L0QiVXxTInVEOjArX1Bdd3l8cXZ5bVt4'@;
put 'Qip5c1s5dyQvLDt0Y2ldRVBNe1hoTEpOVT4rc3NgQUpHbypzMlt3WChRMCx4RGVCY1BCZ0FlVEslPnhpUEh0V0cla3MoVU0lajY8PmpnQ01oR3hqSXkpckQiXSxoL1A6S25AXzBfbXM3Um5ddiwxXj14SnM0PCxGTjJHYSR1amdhLCo5K1ZFR0BdRWN9RTt8MGI/Yj89XSFdSFl8SD9CRnMpcVQo'@;
put 'TV1dXiNaWit1U082TVYqZ0RgWyZqM0o0TipPXVN1NUY1PklCTDRYaTQiODA1eGphNSozfUJJW0x3LkAsbXwuJmRrd05FajE5MnUwKCxSam9eZlA2RXQvKmshT2k6fF8lcU5tKFgyam5aejZJZGt1fC8qdz12TW5LNjtVV21IeH5XYmN0MT5+O3xxYyFZQ0EocS8vQGlhb1MieGNCMjEoQ1NQKUJX'@;
put 'eWsoclt4fFRLaixXWnhFYmoyPlQ6JmRfLjRbXj4pdCYrM3FsfW96MEElM1pwYW9lTEd6eXZIW0I6bzFSfD9mK1RqQ0BiRUArZ298cmxPW28lQjJOInMhNXpEbF5gK29uIW0kIlNQPGxmPE5MRjQqakUheUMqbEtoY3tidD4oayZqcFhsTzUyUClbbUdlMD5wPXdbOmM7PEQzTlQrdGlWemF1VUh1'@;
put 'JGNNKjRFO0RJUEc+Jm5NYVFiQDxQP0thS3JebkYvciVweUpoQnZ6cTRDVUc/aDxBMGtFQUQjWyxxPyNHIkM1Yng5KkxefmJJaGt9fio+cCkuRHchMzxSTlVbWU1jYitFPUhQTSkxMDw4WyVHdnAqbEIwbzFTYzFgNEpAdE9SeC9+OkNwZ3Uza0Y2M3R9PSovUCJFdU9QY3Q5aE4iOTFZUUN3IyN8'@;
put 'aUB5W2lKckNGemA6QFlLen5na3pFdE58MWdqYWs1K0deRm5SaXJDfnltdXglViYuXk1OT3l2V0wjLmcuY24idzNzIlR5dyxhS106Zng9TnFXLEpqMVdleW9RP0hvcnNrO3VlNVVzLzh7O0UqVnxLb1Fqck42UlhSRDp7QEJvNCg7fl5FMC9qVkg5d3I+TmMvTjB7YDZiajIma1pqZHU/UjVJYWhX'@;
put 'UUFiX0d6eWZeZ1ZRMWNFU0cmMXh1S2NidE1QcihtcEUpd2g+KSVQWChpJUx3YU80RmtGYkxTajwzMGFjWFNaQFopcEo6VGZOVzVoKltqMnhIOVprfnw1Rig3e0pgNX0hMkxHfWhRb1hrc016K1JjIUJHSl0oU3c2QEFiJkJCZW1qS2dYXk5wbkkyaj9MVWpOd01GeSxnNDB4PWhteGBXREopMUIj'@;
put 'elBIcmdbJlpdckRhe3UsdVNPcjsiaCpIcj8/QF0iUVRpPHpSJEVCcHhZRW5rZjB2YVBrWF0ubSw8MXJJI0dPSVlvczY6PmZ8fXg0RDoke1dyPloqfChCUj98NCJPbyFpbylWPmQ0OVoySlNxUkd2STdrMT9EPSEwOlFuZGtaciJbUj0hT3d8YS83OnV4YklTQHFEMiE5XUZCfWUqMVcrMVZqPFph'@;
put 'QmwmVHFOeDAqOit7czZxKHVVOTlQJjYoUkE4OWhOQGAjYUUpUFUySC5GJElkNGBaZltXdSRAZXhVTWdmPXg2InM9KSRQSClNPn1dOz1oL00/WylTW2gzJj5OZ3ZTUS4zKl04XnNCSUAuPU8zOCR9VC89VVRXbUslelRfNjVpTFp7RlZ3XSgmckosNkdMeVU0MjQoZkNAY15hNnpAXzdXeF5nVTt2'@;
put 'UClgbylhb0orbnR5YzlUQkdXTj1PLilUXi8pSCxVP3hQWFpOYCh7YmZMeH5XOzpKcUViNHV+WmRZdSRGMncsMlslMzBES3AmaChrWWRIaWV+MDBzOTg6Wl9bOSNNQCJkc1hGb3dPTk5KYjQ+WUBoKGw1b2ROPls+PkJEa311QlpTZDp3Znw6LGVycjJKLj5ZLCspMDZqTCYsWVUoS0gjcShBaHlo'@;
put 'I3VBcCRsK2xtLC9WRWZYMVsyMjNxflFIWVtOZXUyfjUxTFMhJUdecUJKPGcpel1iKVNFSC5baHBUR28jVm9kNlgpWSI/bV5UNkokNWxkPiZ7NlZvYklZOjJ9TnF3KkZUfVRwOyo4R28yX15Ja29KIzNgdnZiRkA7XnAmY2llRDlkNSh8M2hlL246bkAvRSgsNmJKNVFRV28zYCJ4RXd8aEh9YEN7'@;
put 'bkQ9Km4pQ21YWyg9dFk8RSZgcyNxO3pKdD4vKEwwdzxAJUpOaz8qNng3YF8odF5qcWZUNSNlIn4+Vmc8RnJEdEdWSzRDdTo6NSImY3tJKXlsdSZ+QFBjU3ZTPmMrK1NOcTtHVzBMZCNldEQyMXZgMUI1akBKbDc2ZS5GZDAhM2g2PzZSYSokeVlUUC4pZUp8Snl3UCJlQjBiYTskQTl3MTBHJiI2'@;
put 'Nzk6ZT9XLj5kcT1zaEI7ZiRZPnd9YFZELDtOcmR7LktgdClyNSFEd0hvVmJSbERrdi9wYlRmb0x5Omk3JWVDX3c3akt0bXNiTE5UdkM+WzgkO35wTFRdKC87Sj9EOGg+O0JMKGl5d3AuQExFQiI7P0NDXUI4RWEuck1QfTcwOE14fCgwJn1oYzswYVkjS0ZoKGpBOSpVPXhqUn1YdXNzTSMySj8m'@;
put 'TnZacjEvKUl9VUJqRVQuZSxCV19saCJDVjpOSl0obHorU2d2cz85aV86KSY/OFZlWE45aE0ydVspVX54PnU4ZXk3WUhJPDdLYTtDcTw9aSxNJmlAKHRwUVpvSmk+Rzkpa3hXXWJJWlpwblt0U00kSlV+Wl9lZmxlNUhFRUZZL0tOdVRsTkcodmJCVyF4VT9fTHohNU13dT9UVyo8cjhLXXZ9SyYq'@;
put 'WlN0Ll9mUXB3Kkk0Lj0lem5VX3N2SEBDeFEpSnImdntUUV1XbUMwQkdqKi9YX0RNPnRIbmlpZVE5eT5ifF5wYmMsMnZ7eTRBd2x5Z1YkK3wpQmZ2PWZVZ3dnbSNrL05UNWlsQm9dP2xSaWA1Jj9YVlcmWzFIK0cxPCN6XiMvN29eXzNlV24oXWkvXj01d2pWXnlSZWVJdnt8KUBOTklRYWEzbW1n'@;
put 'V1I7c3J1bTouRWpvVVZTclVwbjxxYWh1SjFNNCR5WXNiWFdLZ2AwWTk0SiI5TT0sXnkxem5URCZmUEohcz1Fe1M8RF4vZGRIaE85SmFodm5od2tBOEo3SzU4cHBuO3Iha0VSay9EWT46YXJvVFNoUGZPM3hbXmM2dio6QjQ4NTQlNF5tXTk+KmgoeUlpM0hVSCZjO007eFBBMThEQ1ppZSRSenM6'@;
put 'fjpSO0ZoaXxKKWs4b1IlNCMpbkRgQVtBMkJ0OVFEK0AmfD16XktGWFtscyp9Lzx6Wk9SQ2hIK0lEPiE3Z0l5MW9tI3tbVTlXayF8Onh3LmtCPlQ3IWM0Nm1OWFgmT3tDODdYLD9yaWFKWWVyMlhGJD0uRnhafCZ5YytJPz8zbXN1OEdlbylPVjo8JlBkXVA7WzR9Sy9ZXVE+eFhGW28+cVp3eWNE'@;
put 'ZlRGdlgpN2R3O1J8YmZnTjFwO3Q/PzZoRSswezwyIiQiYV43ZU01YWUoRE8uQ11zXkVzWUxKJW9kal0paEU8bT54bn5vdDhRW1s/WGZbPFBTXikxLzNQPmw+NHw/LyZVd1VebWFkO0FkdV1MRG4jXnZ+OkZUTzA9ITZLTnMzQUVpVCtjWEBbYkdVSDs0fiYmSk8rekRddmE3Njs7PEM4TkFHa0Ja'@;
put 'OGl1Im5BL1pdLzNrfW5JUlEpKE5eKitnQHBXOFRYbURVTkEsNkRnbHFJQEc0SWMrXVBgXnhpfXFFUSRnUD1rem5TU1tyXn46RyVUSm05ZHBISCVsdUxhM1o4d3ZCWWsxOkAsZ1h6UmU2OytLWTIuSzpmZz97ZDgiVUZNK3NFakovY251fEkjdiptYk4+SXAxLnB0aTd1flB3dl9zei5YZWtjUkE+'@;
put 'Z1I4e10rJmkkU1RDfWMkUEA3N051NnxFck94aj48OH5zbGxrVj5qRnYoQ2t+Umo4JkxvdUNUOW4zT3cuWEBPTl5LeUhUfmtYJVRrWjhoVH5jKUZsMyg/N35Md3gydm8oIkl1IilOfCh3WUJJfW8/U3NkTy5zJmEhR217ZGxfUiRiRWBgXzpyT25pQ35mODNiaCtrZktOZjAjMndvQl5IO3B2VDZP'@;
put 'NSRJdjYofE1YNF9ZclQ2K0QpWjR0Nz97cERsTCF+bE1hbTZhakhSW2opOzplOltjSnQzaUZVJi8yXXBQOWB+Nz5dISQkVG9NbT5zfFQwTGlSR3E0eDx4LkhdW1hAam4idjd0Y1oiUHdBQ3xUTC5PMXhZdTFvODRXa20kMz8/Xl9NWGQufHZPQU1FX2NARz1BR0luW2tqVmlgL31OciVIWE9QbT8j'@;
put 'Q1dafnpSVD5qP1hXVVclOlBfUFtnXUw2fEAsX3V0OjNjflc4T1MjQywxPCFga2lZRXpGamM0PmNfLGFlLCEidWQ4XiQzcU5wOml+d1BmRixuTlE0dm8xKS9gSnBzTU56cHRjX1BtRig2dlk4SkgzLnlRb0JKUSIkVn4zN2BhMD5ZdTcvW3kpPVl3ViZaQ2pmYGY3IX0wQVgpXlBQKGEoLzVeMSVb'@;
put 'TU1OMysuUyFfMFlBaHBhOkd3Nj88Wjc1TDxMaV0kPHVFSV9hKXJDImV5diVtcV8yKVUvLD0qV1pHOHZhO35mLm0jSUI3YmpQRS5pOkJVc197b20yKWx2bWc1eWhGTCE5X30uflU/R119VjJHX00hIyNbWmJWbG5eTT9OVXs1eWZBNmt5Nz49XXhaZH5eOnRqPmN8RmoqNTcvc0pYUTIyN0NsKGhM'@;
put 'QSEoR2pGWT99Rm9hXTFgTW9DIip5TTlnSDY5QHtAWUFNZyZxSzN6Slt0Zi9dcGYvTXxXJCM0ektHenBqS2BdOkxCeGJWSHQxQ1kxczhpYyM8bSxZPnQ0YkV5UTYhQXdpdnVAZllgRnVyI35oPns4fjYrKDReUTguc1RfOXhJUFN3QDN9fGV+VFslXUw6Mk9NWjMyblNbNSpRRWYyfH1wXyklVylF'@;
put 'XnFhcGVWYld6fGRkKEY3dHtVfHIrWXRTIVVNOUxZdygobmk1PWt0ezBFYEs6TD1rblFjMHZZVUhkNEAuZkFTfjA+RTFaa2BuQlBnZVU7MDJdRG1Hd2JwJklOYitvYnJdeD5eO0d7R256YU1GQHxHOyYwZnxhOE15KyVrQFYxSSJVeyMsdFhkYCpWJFN3RitHNix+Q0Q+dDglNUc5OklbJVBwa2U7'@;
put 'MUN0Wjw9aF5Cbj4xXlldKy50ekVEYi4iRGoxS2FnYWcwP2xCMWNeUUFpMER0XkxYRWoqc3RQPTlBY3olSHpRVSZFYkFYW0FyQXg7YUkuWFtHb15ZS19BKFhnfjRlJFU4WzYuSHE+XSFIJHk9T09STWtCL35iIUchNDAxPX59NExzKjhNTXZVQDIyRWo4dUdJaXttTTArSVVnVmBBMDdyM2FIQ3NT'@;
put 'dm9RYH0odyEud3xePT5EJVoyKDFMZ2pRRTM3RjFGVU54Wl5PeDxeYjVXTE0+KDZ4UigmalVwaFthKzM4cW4zYFpDRl40VyV0Q21EVz4qSUs8PUd9e0BMYzg1ejgoPz1XdURrSS97cSxsUCt7anRwK0pjcjw9RC5KV0x+bSMiMF1aTkcvfXxTI31UUlh8IytVVmR2JEUvbUVUZXhxd1dNIVI7dF02'@;
put 'QVNmPWdAKT4zIWpyXmxAR21ScEQ2SkxLTiEhbkZgVW9hSEJgL1JZZiEhZGFRV1ZeJlVZTXkkZEdbQyNjdC55RzpTMGdUX35qdlowbjYzVCJfM1MhIj5PZipyYGxtTyghT2hhb0BDXkRBQ0E4X3N6OUFAYn08TzImL0F0JWNqMmE+T1dbZWlmOF9DdlVYcEclMF4kPHJGPXtDQjZJYyU1LksjRmFO'@;
put 'fF82IVY3IldVZWUqY3tpcmM8OVp3Pn1wRjFAcHYxJFArUEEzV3EmaWVgdlNRVEBmRCk/IWN7Ky5Jd0tRdChlfUN9TDcmMjVkcyZEeHklPHFZKkRWe0ZwWmdDRERGZC8oSW0yUyZOMDlXJXlodiY8MyhxYWk8ZTY2Y3FWXmlANUFUX2Q3KjZPRj4vVUsiRltVdGs4Wn1iaSx4JkZIcUJeRClhSk8+'@;
put 'T1lKM19vWVFxWywwOmthfml8UVREb3pYTWFVd3JaaFtsdHc2MzZlKzVrVGFjclY/Y1tWQjpvb2diT1R5YnYlI3N8ZnJeN2ddLiljdjdpPzdWRXRhSkI7an5ST0Vba3FOU0ppai9qWHhlRExkaUNePlolfGMycFp0fUlbIV10OTZGZFlpaFZiYkRDbGB5Wk96bHJLUW5mWWptVShdP0U9X0A+enlq'@;
put 'QHRPMEZQcnxSW2E8a1JTTV9vSiQqZD8pLC58KnVucjo6NkQ7PTssNDIsVHJzTk03X094JWJwI2ByI1paendqSExeMS5DMXFLN2NaITlBK0UpPHo8JnBpbSQpbFBeNk9tZ2xEMFQvbFM2VEIlM3RSTnZLZHdSPTl3M15hT1ljQT9GT3MmSCo1Klo3eT1yU3VneD5veUVBTVZPNyN6UEkxI21nW1ZC'@;
put 'VylXdTg3SlJNXyp7JjE8c3s9fnY7S2RGImZCQEQobSpteSZicVZuVHJpSy9QXm4wdE5GWFhYIjw7KF1Raz5QUGRELEhWbHgvZ1QkSFgvZjd5SCpkQ001LmtAOCsrbDEvJG9MbmYzLiFHe00sOGN5OyRGVzByOCQhWXxEeypyIz8/IT17aSQ0ay85UXp0Om98LFpRTWRgfUt4SXJeQjQkZi5xWVt+'@;
put 'NCNSMSVqZXFmY2Jpc3A4UHprKiZMaTRUVlk0bj5bOih4V0ljZlAzQER6YWE9WD85KW9AflkxOTspa1I/SnpGIl0mQnglMjptVDBiJTNJfDVJS1lxP1h2RGpQcGtzcS8qKHs2PCgxZGMrVTF9PilRWTtpViI1eSUqZyh3WEBmX31XZD04MUA0MzFodD4/UVJWc29DPlA+eVA+RT49XjBDSVlYI2t0'@;
put 'KVcqcjJNMUo9UGteMyFEenx3N0NddEVpSVhNNGJCIlE+JERQV18hTzZnRGA+VjU3LHFfX2UoODFRX3BiV3krJFcyO08jNio7KDtuUU4wbHYuKmVkK2NFQVAkIXY/b2ZTajcmUGxlMU5OWXZgc2szPi9kQFA9Vnc7VDRzNzFLNWBUMSZOdiJQPlEidXJnKyFwbFA6Q35WX3pbWnZicmZEI0A0cWc0'@;
put 'bzZKb1d3UztLe0hnX1A7XjUibk1YS2VVallXUXpfdVZyeElfVyxjQ0RkKmN1M1I/ZF1uRGVvb10mWT5HNjAhfHJ0WDJmWCUzWCNPbkdlfTBPKDwkP21fTD91SWNyUjsxfWYpSTpQZTs3JU4yS1h8eSomUmhuKWlkeSRRJEZ8WEYhWiU9bDRAV3sxYUhROTxYRC97dXMreEgkL1ZMMnU5SzRaWypN'@;
put 'SkBwVCxOXW1jRGk3dn1JQns9b2NjUnR5Mj9SR0pMNCJ7PjUlZFhKI3hZOjJhSDUwaExle2xLLzp8WWBEXXwrPEUyaDhIT2ZkKChSXjAzdWV2e1Y6dD1oSyxoVkFFKUcyeyZaOWlReEw4UTgkMlIoJF1SJXI+JVMoSW9gajtEYHlTaTluJH4mR3JRZSNwYSltUXs4Y09YTTJRK3N0MyRiNExEPkpo'@;
put 'NWJ+YClfOmFzfSkwXkJgQUNjcypEdD01XyJOJVtJZGhfQk93YWs8dzBIeW94NGJBU0NfTiZDIzdffmQsa1FdSDxkQj0/PihhK1hvTFA6d25XW187T01MVkVGL1hoPWYheCVWUGluQm5bKU9wVDV4PiRUN1RxdTVbbFspVCIoSlBTQmQ6X01bJmJMW2MwZ19uZHJkMjVMKiErSzVFaHpfNX0+RkJQ'@;
put 'OVpNOS86dGl+UXJDPGAiTnVnPkM7P1VWYGpeYntFVmxWS2BwLmtLQXVCK1ZocUc4OkRqMUUkbGF5UDdkM15icE06Xz9NI0hwRUtmbGBZVT4/e3ZGKj08WG40d0ZffiVedn0/byF7XVM6JiVAbDMlKiQlUmdIPWNzdmgvezB9W1VrUTc6LGxnbV0vbFhLUDpWT2YvZHszQSg6M14hUFA8VnA2YnUr'@;
put 'Y2skYTwsUW9fNio0WD5USTE1d09CN3c+e1NfRXBLJlJefnYkcnFOW0E1fiMzTV12WjpnaF9WOXZbeEtEJUYxQXlDNDdeVEIxaXp2Tj9TdncrY0UxdCtlYClBPXFqKyokcEswc0w+aFBULipmWzlPWjtpQ29AQTdZaXczQThnZTJIWkFVK29IQlVFQiV2TWhqUG4zX1t1fGNxMSNCXVM6fEdnYlJe'@;
put 'RVMwXU4hPzF1bS92P313QzRzTGI5KDU3YCRJNVByWkZsYGYrbjBSZ0FEMmU1ayx0TV1bU2clMH1Je3MqXlssO2UjYSs7ZWB5K2B9X0Y5dTpheFd9JTpsKUB5PDpRT3xUa0IyZ3E4RXQve3BoNkxWYHR2c0NOaFAwcGgyMzUmNk01QzpvTHA5fkZpWmdjTWRrcTlgSHQvQyZxSlR8Y3BaaSRpI3FX'@;
put 'UzVjfnJMWjZMY2pIWzxkTHYudlR8Z1tYXy89SzRUUV1xI1YrbWo5Nl5gTngzY082KHRmcyxHKW9SI1ppeDRZbDdeenU1Sk5rRyV3Z0IjJWZmRzQ8ZkVNM1FbTyptIl5ATldsYCYzPkdmd1AmVClCMn1oM2RpQFRAKmdOY1tGYHNEL2c2VEQsM2M9STouVmlja2tvRSF4Z2BgfjFnWlsxNSgqXyw9'@;
put 'ZTU/SkkrXVBzTTp5UCxmTmRvXTAzeiIyTDopaXIwaX5xNXo7N1tuKTclem08c04/ZXplXn5HbWt8NGI1cXlJQnJ3OU1afEZMJHhwUnVFT2BjKHJHVTV6fkE9S14kSjN2QT0obFlUKD4iJWRgYnp5ZWFMJHJvVHI9Z0dBT2lMYGZ1enVwKzhoZU1ZaiFLQWpzamxhJVN6fVl+TlAoIWUwfG9wakxm'@;
put 'an1VSDhrfSsmeFE5eCprZnB8MSg5Z1FMcFh4Y25eViw/SVBMXm0qeTR4KH1KLkB3flpMVGhHezpLa0gscUJoeFNhQGY5LnFpK0piOiw0WEBnal1ORnl2VEhxX3phRzhgPms/SklzNy5zY0xYNzhqSkRKPH0yNCEyYDIxbitAfiModT5mMTlUTXBJRzp9WCRkW3lyeW94KlZBZ0BTQ3UiTzJaLzkq'@;
put 'W0Rhak1oLC9uL1tifikibDl8OHtVQHJhNmMjekJvfjhbPWdeMkYlbm9oeTdnQEdSeVtOSUEpN2ROfk51QnYwcUB8STo8IyU3MS9BKSheeGlTMm1HMSNzZVU7eTdQISx8bmw1KXhzTlJKSHVJMEJzSV5uRW4qTWxMXURmelp2TEhVd2lIQ2FrKmJEcnguI3srV3U4aW9FNSVqZ0xreXg4RStrbVld'@;
put 'QkRkSnE/VHBVIVt9PCV8TXs/R09NTDM9WzYuJU5MYjBZQ1AxTCNdd09nLmolcG8jQnMhOFdZVj1sK05JNDUkQ3ZmKzFDPnlOLCFxcVNtdFRudiMzTVp3a0c6fSYlb1BPbkZUVGozP0FrczlRLlEmJFVrNkJVZ0FmISQ2RSRNVHBHWEhWbWZ4TksyOE9tdVo1Qz9iQk8xVEVGVjlsRDxNTTV0OWdz'@;
put 'WSo/P0ZbSjVGI15wSChEZXc7TnchbCVqbjUkeCpQNHNnMmcwIzpFdVJyTFBLTDx4OUN4dnt+YWNpey92LlNuRVZ8Njtfa15XYW03LmVARlVvdVd4T0ZrQys9dCljOXN6al8zaExaQmwsOC4mLiQyTWI4STgpYWZ2cUxNRDApTWgxeCt0cix6MWU/MWosWGhKLzUpJnxKakE9R1s5PylscEVCUS8s'@;
put 'YlZYNVY/REEzZHQqbW90SWs3Oj1NJnsyVTModlRUZFRtPmBXc3IrNjZgKz83Tm9uPUMjfU8kXlFeKSpsQWk6U0NHU0l2ajhwU3p0JEF7Tzs2NFM0R3dfdU4uNC8uYl5FJGgmKTkzLF98fDU8cGtfLkxud19qbk1MT2hYJTsqOUNCbiVXd3hOb0pSNHdoaXdqWyJ+T2N7djhLNjRMPG42VC9RQkl7'@;
put 'RkVBTChPUStPdSxqWjM1eFdeUWZEcH5IS2NsJmUsQFJwLlcoX1V4UVtuQ3JLbSRhJTxKKi8jQXFuaFRAN3Y/QD8qQHx1LitZNDBndzQ2SiRoLy9qO3VOKDYlbE5gIipwOFtUKVk6ZVRveCouVGUoXjtdPjYlVlJVXzhlYXc8OyNqMW89R2RAOENOJnxnaihBVCVMTXslOSY5R15TY0p1Qm9gVi5Z'@;
put 'TkFhMmtxIyhCaSNxPHJ2WW80fU5scndYM3IhVjNnQ31SYmIxensuckAxPyhwbkd1SUJKWEB0bnVDL3hjKzgjSEt2Z0YpX2VOdmBXRlg7cjshOzImLnJOSjZRfWNsfEA8SG5NXVg7XTlgYnY0XXU2QWIrejgmNVJBUFRaLEVsczI8clJ7JWk3fmYlPUMhZVokSipfLnIzQGdrMHRYL1paQi5QX1hJ'@;
put 'Z1dmcUFOSE1hdkVSPTQkVnJoZ1VIIWtRbFkrZE9kJFFOTih0RSNfIi89Z3ovZHYle2M2RkVEbHQ5MUJ4TShWfWEwKEspdjVvIkZ0LihGQ2teTSJ+L1pJeyEwVFB5OVpeLHFtfW42YHtQQyQ0bkltRTc9RHRweip0R1N8V19DeUpxbUJmbnk9VSs8Yjh7UH1Tal9+SzNqLGVxS2R4YiVaXlI/JDZq'@;
put 'SnEoWCJENGldLnFITShbJm9uYkdWZllbanZQdEhsKFtdJGBoV24uSWIvJHVyXzRsKWlgbSMuVFR2ODNJaUlJM3YiU1BEPmA0XlhwbVooPGJ8UShuZ21vXno0azU2Ly4hfWdlQE5FNXt2YkR3MyxYakwvI1hNRHxwaWY+NlUjPTF1YjZJSVg7YDBJb0dwU29EJCNjfSU1XmxKX3ZKRFtTcHZqKisp'@;
put 'TEMjUTBZMFAhWytUOD8lMU9IUjhbXT5ASltXXn58TXRWI1JjQ054RWVwVGIkdUhoS20haXhFeV9fXipfMzlobHRlS2dSQmZOWkNxUTEpWFB1YTU0UWMhUFl6Q2oyIiZqRVR0dl4xZDw9THtHMntkRnNEWUteZE02dVBGZEhFSyFDV3UqfTNORm9xTmY6TzYlVDtkKWl7blFLMXwsJnlCPzVjOiou'@;
put 'K21GQjZbWFEueG0+XWpTfHtJZzYmJE9bVk1wZjAvLypxeHcqXTdaYmhTamhMKmpoMFZyVEpbTE8/MGpWdzMieWNaYXUjImhgKkZ0R3piQVMmS2lVVkEuQWNpelQvVnVkVlkiXnR7bjFQUjFue3JZdm1WYkVBbHVjWmlhKCh8Kjg2IlBeTUhLalpDP3phamlRSm55TjF+LHg1PXA6XWslPlhHXVNI'@;
put 'am0meGdVPC5TNE0xM3RJR0N6PWZHandlLD1RI30jezsxTCRLSjUyflhrZThKbUouX1kpTVRRcUFuUG41fnxoXmdPZ1VMYFc8Q2skZno3dXdYMzFoJDBpR2hIK20iSzBMKXMlJSxGPXlMTSlWZFFMLHA7SzZ0UU1mTlRdcHM3NVpIZm4+UWBrTX5KQ21MLzd+VEl7RV4kNj5KMUNWVCY3NyFzWD9m'@;
put 'L2VbZWAqeC9NITVgYkJePn5YLi5eQiVuKzc3OV1sdyFMWXlNTWVlS2RJRSkqTEBqaEFocT9NaFMkUVp2MV01OSQ/WWtfdll+ZTFSaTtzfVg5bis2W35WJF1pRm8oOExnfndVRX1+ekFAaiQ8SVBnbHw9Tk5SOWAwT0NZMWQwa0EyYkBJfmJ+XnM4OExnSEpRfSslNFZhV357Tns4ci9oWDdwWFAj'@;
put 'dU4oL2YxKl5mVjBiY0ZSTzttcipWaC5ecWdNSDRjQDg4dlgzanUoYHIxPlQ1R1J9aX5WazRgI0AoXjlJZj9yd1smRipoImdmPEhQT2xCVU5rNjZEM0YzbzlKRnJXdXFWfGJmPDdheys3JWcpTFU+OyJ4el1IJDt8MENdKzpLaV41Q2tLQmReLHZ+dV9FeVV5cTQvLyNhYUNSX2NNOUlKdSlFPzVm'@;
put 'Wk80bkxmalVFYiksbGtiUCl2KEY/aXo1YVFsOVhUZXFVYFJKN1JtfjE5aXZHeCRpTGEpWWErJF1GczQzZTpfJXFib1tJamNIUT4zKnRdTUx0TFI9dSpxa2I5NTRWUm1zezdIQHc+YzRyKFlbVUZCMTYoNi4vLHhLRVYrKi9rdkZVaiM8TGA6X3RVVW0iLD4qSTljZX0mM1Q9W0czaW5aaHdPe2hb'@;
put 'TG03QnR5JnNlRF9WbnpLTUleL3lBWU9wRCpIRWl6bD5jUT1qOUNVRTNnXTA+e003JkkiQGZBRUZXN3l8a2FyenMxWmh0P2htPXN5fXBkTlUvflAkSj0jQ1NKY29BXyFyRmlqZ19EW2k/P1k+bl97fDR6OVN7dTdmJiNiZHlnVTYpZS8/SmJFeU5Sc0o8eChnUFhadlEmZFZBaixTPi4uIUVqdHJO'@;
put 'L3RVPUxVMy42fnE7MFFkQHN7eGFMJGBrN3FpNWg6NkxPSFdGI0p0YSttTmJlYVVsSEVPViphRG8vTTNiWSpMeXRMbU5XRnxkfi9iO28mPjZpfFt7amBWbTo9In5UXzo0aDlqYCRTZHFlLlZdRDtAXlVaPzVHeCteTlBMeUl6M01VI1NtaWVSSSh3ezx1PC9dM1U5IkI7LiJsPW1qend0eC41XmYs'@;
put 'djIiSytOO3psZ0FOOzcvN11QZWQ9L3NkW3B6N2BdTSYyVTJyMysrdXxbRGl4czd9Y29LU3ZqSnd8fG58NG5HIzx0U35+M1ljJHl2fFA0YGdbMExabGh+JStZSCY6S3JzKCYrVkwqV0crd1YwT3dpP0BGcEBaXjQkU3dmT2pPTmlHWDIyUl5DSmdOTmJ9LyVsPXtQQDVrM3piVEMxWm4rPjxgYUIq'@;
put 'T1FYRXIyJmQhQSNScUlDRUVtTkhDJCFYMHRwdzMlYVdUIl8kPzE0bTpqakhNXkBTdWlvXTheWjluc0s5XzBuNyMkUThBTltXeFhlPjI4WCZVPih6bXQlOEFZRi8mOlNkfjRXfDBYMXIsJiFoazI9bCZCPHxrUGo8I0lJZSpycnRfSUlacVN6Q31lWCNNW1Y8QnxrR25UVUl6SVY0KlB0USJESDN8'@;
put 'R2Q6XkAzcH1xazN4NnNNSDAwUiZLWXJ5Jkw/fnQoWmJkfEE0O1F+Sn5IQWJhKzk3ejlWVThMWHxRSCsibHVfRChYK3EoVHErfjw9L0tpNEZ3bExLTEFlZ111Oy91Ul4/alhaI0RpTEIxSUkmTj1bZl5ZQkl3b0NucXV2OD1eNmxRUClaZk1oP1IyK2N3NG93N0p0VDl0XUlzTmZbe3IsPXVqSyZO'@;
put 'O11Ee1BILk9vYWJ+bzVoTiJtNlM5XmBmIVNGaiFxT1JadVMvfkdQQzVUVl8sMD9Saj5xV1pufmY+LH12T3x+KC5aPjoxZVN4TnhBKX10KD5fIWt1PjBtbVM3dXBQZXJFQEJ9c2dSay99bCNCSXt0QiVVZkxjTk1yXk9tcktYKlppSkJ6a3RJIUkhSTt1YTMiVVg8UEMqN2hiVEs9JXBEOnReUDJX'@;
put 'el9tT3Erczw+bjlpfiV8SExySEw5OE1OYDF+RGU6cT0oSFB1VXA7M2cjQWltMUNqQCRxNmtFeDU2Vjt4fWpRP3hgaEMjezJVJkZ2TE9CRCRPeDVQWzYqdVU4eGh9LngpOVpKW2IhTmo1MXR4OzE1Ln0/SDFoUm9ZeFJfcHxGSSY9YFV1ak13V0J9e1UoSHhFP0hMS0lyOFFFKEQvXU80dERkVWhT'@;
put 'IWprcjxqMX11NyN6PkhEVWpBVzZgQypxSWlsLDtXcUtwLClmYmh4eWloMT9UcHhhdkgzeV5LS2JSM2g2QCtNRk47KFk3QDo+Pz5XRnQxaiRyaClfXWw1TUl8RlZwRFosdlhwZlRuK2dhb05UbVVnP3tPR3IhRHJjNGt8JDhqVFZMUipfZFMkZH5GI29iJTFkQDBIJVo8fVFMa2N5fDF8MCNNeiZb'@;
put 'KEpyZkVwSkdVZ1ozUiE3P29IM2p5JjV9dSwoM1NUS0JRbUd0WWp0cFBpOVA4JD0oZUdyczAiXjNYPV8yKWpYTmc/ZyxEWEBbLCoyQlh2My4yOnQiSG9yJTh6aVJrWGNxKTJXPkNJa0I5fjBfRz4mTDZiYmN4fCZ1bis5RkJNXnhnIlEocEJjOGRTWl44aUN5fElUW15uUkA7c0J7I3dkWXVMK2Mw'@;
put 'Xyg6IStYTDxRTE4iUUJ7OXliNzUpW01GYV9UQCQ5NSIlcyEmJWNCZ0R7dnkoJiI0MSZ0LHVVam5ETUhXW1ZrcHdbUUl5V1VrZWQlfD15fDlsZG5sZTZmVS5ZNmsxNkAuSFdMX1hgZW0hWSJ4ekJTT3oqcTQzfWN4TkFvYVdFc3tHWWlHNVRgJCE6W0pGUCsrZ0JLYGBzcjxXcGJsOyx4OGpZJV9z'@;
put 'MyFdfFY8OTkwNzQ2X2NEPzVscS9GOTlnSERKWj43WiF4SyMudHFDYHR+L31PbkV6VFszPSQkNGh4YispbDZKNHY4blZofkFvUmsieEkzUWM8flZ0UDR5S249ZFN1aGtNO0NHSkV6fmp6aTRadm1mIzxseHspfXBveEFJaj59IWJpOUNrJFRHX0AwMV8xfnwuVi59UV5xUTUpTTpZbVNnSVtyXyt0'@;
put 'YEVWLjpraH0xPzJQb248IW14TX5GJk10eEQ9XWspVEN6W3o3a205UXtlSEMkZFglSkI8eWghK143OyRvT3R9c0JaUm9Ga0IsW2wwVVRPNyNQSj9SViIrRS94R1g7OlY0X1JFOE5hOE93Z15UOnFaPUtCIlJuWWlTTWZIfUBhIXEpWHZRUkA1Ij9qS2FxIWNrQkJdZCFpZWZxSTl9JFEid0QkJFts'@;
put 'S3djPE9acmV8P15+OCpjOnlQczYvWDZueHovaXZ1RjxLVHpPdml+Ul9INnAiNkN9eGBMMlV3fWVXOG8jLHEsej1CdUwpa2FDMyFnV3w0QHReb19GR2JEJWpqKTp4MndmUSl7VHI9YlA0SEhhMXRFW3I0Nkhpaz56KFV+YzExLDhhXlkyI31GRFchI1VkbGJ4MkhAUkp8M2VKW2kzQEglclQiJHRy'@;
put 'Z0tGSytwZ0NpUnRgJktvVExQQUFkek1XW0o/MVk4ME0qSno2STBJVVVHbmxHRClJUmI+U0ZreTNMJSZ7YzBtaEhpfUUsN25JOVFlZVtie0dacmtCRllkcHxhX3hvQjAxK05hW0k7WUExcHI/MCxmL2xBQ2JTcjchPUdSa1Erezt+cTByZlh3XW8qWn11JTh+UGJvXlpJZT0oUj9ZSnd7SEJkOiI5'@;
put 'OTNSaD13KUlnVjtXK2twfEE/cjBmNXMxIzJWJj1qcEU6P242N1N9dDMlSzIhZyZTdEJwT1lASmJASDJwfFBgVW93enQiM1dSfTRHTnFbdWR+fXNdNXVzZGdpOnxaLG9IPSp9MStYVztdYGg0PDlPbCZ6WUVEaH5COHp8IjwoYmM9dkhHUFpgSEp4TWArZ2k8P29bTHFQdklCPDFuKyl7LCNQVVlH'@;
put 'LmJ5I0szSz5zR051SHEpSW50ZnlpSlJaO2dFfiJWayREU3tSNyFZJktjd3ZKYisrYjx+eiokLHVzcjEoXkJ9VDhrUzNYUVBocU1DelF5dy5LSTxgeG1RQXFJTl9WTFtqeG9aOHxPTStITV5Zey48T1k+JGFnNlBvNWJ6QHB8MFVvNkhWNnZ9M1hhVV9gN0JGJWVeayQpRCJhLld6LEV0V2xNSl4j'@;
put 'S3pzdjAsN09EI0ZOTWdvPCV5eX1EUXFgJF9FWl1YKm0yL2xsK10rallhcEhkX0JdZVAxKXoqeywoTVFraktbSUo0MUQ6WCkpWW9UIlBLNEZkI1RqRiNqYj49djhNfkNsRmFmP3UzInBuMUpqWnFqfC9eOlZJOkJ4PzUlKjUyUDt8ZDEscDguPU8zW2RLSmxZVXU9eGtyaUF1fm03QFpSR3hjVE9Q'@;
put 'N2JiXyMiUU9PLGMrOHQ5OF0+WEovZ3ZRLjB1aDN0QGFJb055SkhCd0wvfCguaHpheS5xbSRmVVhSKiojTGw6MEBvWGxCXUlDNioqNT4vVCpjKHoxJT10dXFZSGddbWwjMzlELyE5XzxsdGNsTGt+PTJtYX5NSGlYVF5tSDJJWmMud2x5YThINkcrWXJ4dWpdJXxLMkxeTjs3e1s0JXxGS3hSPHg5'@;
put 'KWdRaXteYV9YSlVgc1pbeUBsRzkodHJ7XVpqb1t5IihdeHx8Iy5+dDkkc0UlR2YwUG9SO1lyNCokT21HaT1YezlnXl0vPjF0bHIlWEIiQiJkJmZoZTtmI15GU21ybmZOOm5hWyN+IWMiQGIpPUJfYWAoeVt6cEN9ZXZVNzxUfnF6T3hjeDFTWn5LfntfYGZYbyJnUjhvUnZTYzdPIS9jXWVVcks/'@;
put 'MSpOLGg+bmEzNngwWmhFYj5yPWNHRFQuYE9aQilCK0c2RDlVSExDdnRgLFNDVSl3PiZQJXcvRi5aajBkT29RMmpGN1UzTkp8SU1maUpSb2VIaUdkOmFTfHg8Qio9STxhVTBqTklVPHZ7bEliYSs9LEolTVV3VXtALGRXPCp4fGIyPD1nYGQqYUhOfV1Gb0hKNnU4bjFnYk1fQTQ9MHsyb2B9YSMv'@;
put 'JFE7SHQ8K3RLYEoqemNGUlpmRGpAO1tsfTBoSiZ8N2pjOzB8UURPZ0NaQEIvXSs7amJPMC5FVFdXMUc3QjZNWS96K0k8bSUxamR9eT43aUZjRVZOLDY0fVVtZzkqcCxSWV5JaUFRaWNoNVs3UDVLWDtZVXhBbVEuT013cjtbOUdmJiVuRGVrWm1nQ0RyfkM5eUx2WCR5SHUyPXFjVyZeWH43QXgh'@;
put 'MGpob2hBIkddY2h6Xmw5cmJKZ1BULDpqdnVnOHFIVXw0ImUyP1YpbURJJnBCfWBwNERTfmh0SVV5W1d0czNqZ1JjITJyV1lKIXhXY20kY1F7Jit3UiRRTT1Tant4QU4mTz0+bXEuMWBCSj9iSF9XXysraUhMKUJBZTEoNk5sPnx4QWF2aWgjOFZWPmtOSj1SdWYlbDdxJX5fTiF9XjdEJSVzPyFZ'@;
put 'Sm1zYkp+I3RocWhbfCtfeGRkcDppWm4wYntDLyZBVSMsTUM4dVtwaG8xczV3KGYyUGopMndbKXlPWkF1e29oZjprVSVBNX5HYTkoYkAqYTpEYG54YShobUAhVjxJfCNyK19OfTZdeFVeK2sjY2YhWSosZU8zOj9VPkJbOFNnSi5pTlJmRSowNmlBfVVkJX1DTGxlNklWYkc2eVAvfUU5JE8oRSMq'@;
put 'dnp1OV47UWcubEo4ekhgVWM8LilfRzZQTys7OjRVWHk3fnFwJkdiKDhhVDRCPiYlKkBHcnMhXlJTPmdWMygqMF9aQE5jSyR4LjJEU2I/LDRUOisuJjFQaX0vWlElVFcmRXEhNF9qX0hxfnNbVjNefkdPTnxpVU9uey5HJSFJWjkxI00xWDQ+RzN1QDFRTmcwO3gyUThmKHcxWG5ke0VDNE43Iy4i'@;
put 'VmEiUHIsaHpVP0FxPWl2IW5sMU1uK1skSyJWbzFwZmUqLFdCeGJdXiZnTkpFKlR2TDVzO0lsSWNAS1UqKyNgeGEkflAqZShSakZlR21vP1ZKckArWkg3M25KLFVKIVA7PG1oUjYlLnpqTnw7OUNjSy8pOypldXVRUWs0Q2p6VzFYeFt2fkhLcz5jZHpzUCozPVE8Rm1WPmhrfCN9N1JAWShwLDd2'@;
put 'cFJOfV0yMVt3SU5UTHFXeDomaUd7U1g3PTV+UTVaRGRkdHRVTV13ZTZsIVQ/dz54fng5a2ZGXixCdVl7enQ1Mk8wI05ZOmZncTxjS1tuX2lMYS9wdWUiMjxucmUsWXc2UTp+LiN3JE5LeypvTS94Rmw4SyxgOS5rcHoyU3t+SGxDI2gofldmdTlNekZXMVkheU9RK2FFWHg6Xy95aFF9fktUQFlo'@;
put 'IzhkWTVMNDd5clJ1Wj1gdjAmbzVuYWZiSWQxe1dwaDVkXkx6KCx1REE/fG5pcykqdzc7K1dOKXR5JWgjfldNJEoxXltvOkkwVFg9TUhYNmc7VCgjNDE6QXAzVWF9LG5SYlJYSVV7W2s9XVMlJCpoUld1QF4pR2I/WT10MWkseXVkQUJhUzAjeltfRXE0SHZHUlZDPDZROyVRKDxNNig6UzJZZTR9'@;
put 'Yjded356Kn1QXTZuJE0xcHBAOChOZTlDVjtyMmVGemllOG5KQCkmbEZFOTtFdSZwXnQrWEpVOFo3Uj89PXpMRXtfLmJnSVZvZmxLcSZ3SG0qQFt+VisvbV4uTXAqQEM1YWV7RSU6aH5gaEx0NWB1aXBkQmJWUSwvR2t9PWBfK0s9ejFbdDp5UkNgI2UoRSpaUjdkbUF+VCpZbTYha18mYSYzfWV0'@;
put 'TTQhMzU3XSt5Ty9MUlFfYFF6JG9lcz8oPHMvPmE8ezNILlFoJiwkL1Nlemw1O08sQFNeRkg8VUhlJChjXWpdJXViVCRtS145ezxxeC8/SSZJakAzSEBRP35YVUV3MldKejhjXUNpS2NMJUNzfj9BcCtpW21TNXgjXURlRCk8YVcqPFVZdEdiWD1oYEkqLE9FUUdPRH5WOlsxQzlANTVRRnI1UmNV'@;
put 'KWNWd3kuakRHfixjQXBfKkZNTHFfSC9VRjR6fG9rVi9JcElxMnY6PkNESUhzVS4yZFswMzpRRCtGZTZNeXlWIiZzSkBWZ1NxVlJ8YWJ6cj1zeD9MNjFPPD9obUAhSURxJEUwOnpwKShncDhQQmAxPSt3TGdXQG5yWFNJKCh7U0dMcDwwPS9JaktNeDBBUiZldXNhQk4pNj1QOjo6aDRXWWp4aGto'@;
put 'JVZiJSVyLkhCTWBIN3tvP2lYYncsUEwzekxTSHZwNThiUHY0eF0/KShSSyVNPiUwJGdJS3FqSCYiTEQ3ZEBVSnFFXzJodlp8IkpvdmU7MSlSTDFTSVREcHt4LiZ1SWw5WUtZW2lTXihNPmw+O0JuS1lpWlR6TUpyJERDWDlpfj4oPHlpW0xWQDt0O29PVDhSY3s+fi5kImJ2Uyw2PF1IRyl6JiYq'@;
put 'aHM4XkpMa0FBQyMva2A8PG53Qm8kSlVIIXJXN2JoYVR5VW5qPXRXLiZMTHtHJSN0RC50fVpNMDZgdmJsbDZ8cGxeMmlRbm8sK0JofnduQTJ0RTVFPz9PbHwkZVRDekd2dGhHMUlNOkZoUmxyZUU6Mz4jX3xmdGNyL3wrQlBCcC9fIXJsSTx7IlhseEdILkNeeyQ/PjVKVUMjJE5vQ3VsTDZ9czx3'@;
put 'Jmd1V2FjO3xxM08pflgpIUR9UUIzaHRVOls6VkYlRkY+NUl6V0daUGttY2piNHB8bXw6K014ITZPVyYkOn1rV3xCWmdCVT4wSjtXe3tlME95Ik1wSElpT2hlOCkzdkpeJkAqamd+I0RER3txdGRvPUZZQEtid1E1Pk1YMjtgaVklV1ZBc3ZSJjRFdztET1V1aWozcS4mfjpedDYsKCMwRj9NW18h'@;
put 'Wk8vOWgkXlVzZ0RIRmt0SmMyS0VJQEk0d18jQis1Vj9GUzl2dHJ2Wi8yaH00Z2lXNi9qSVRrQVRRb2Bsb2dFVj46QHt8aXJ4Tnlqd0ZLKjNTNnpXL300YnFYfSIiVTcjKnYuTzciRDpFKmplQ0t8UVNMZEgsR0d6RF9DU2AqMSR8eHRyeiEmNDJWUHVeZ3UwUkV5bykhVXRvYCp3Rm09VVYzPlho'@;
put 'NGM1S0teIzkkNEE5ZiFhVE02TTEvaCZ1QmtOeDVfaj99PD9GdywhdVtLekw/TmgkdkJMLGI3K1t6RFN5ZEU6ZCgkIWdvSm9BNSN9UDB2fHRjbWcoKW1OP3RDPktHe19CI0p9RVs4JmJ3c2ZEeClFe0lNTCRsLDQvMVhXfmg4RjVwTDFfbCJjU1hGVmdkSFlWJWg9U1QrNlI0aypmdURrUV0zbUN7'@;
put 'd0s8SEZNclRnX203cHBCTkRJfTBxbWdRL2B1QDp0U2h2QVNWUlA1SmgldWA7KHc/NWdJemEsKVlgRWNVRDBTVXMpclUyKFJVSXxOMHhfakNNPDwuaUJeMHs/Mjo0RlgkQElxIVZCV2p7fkd3eC9vTmh4UCFPaG9BZ0VOfD0kOFlrST8kbnQ0QHkpd34mNX0oJWUqUH5QYX5IXXZlL1E8LDA/SF8x'@;
put 'RXU/cFlDXWpaKW9zc3xhbDlKKGMzeSluVDV6NE4uPUckZkhoLlpCcTB2PGcqSCk1YHpkMF8/N1J4VVJAKyIrLnRSZDhJdTE2blYoMWtkJVQkcnZWYkZkMiMyNzRdIyNoMkI4T0IsO3osWTdFdExCYUFUQ2JiY3U5fHFAPGBAY21NS0lBLjhkNH4/ei50YzolcE9rSS5geW4rMDB9NUFefjlrKmdE'@;
put 'MFI1V0ZhVFBqdjZYSEtUayxUdVlXJllSKjp3bjtbPDEyTHUmWEA8Qyx5Tzp9dCt4KiR3W2JXU05LWT90Xj1ga2kySVVNdSs7aEF1Mip3YG0xQWtYUSJFMHR1dn1hLmVveGZeb19HVDN9Q0Q0SEtpJnR7RHpmeG1TLF16enQzKnN4a1FEZ3cqcEssOi88fXxHKk5Yell+YUs1Wz1oQ3J0LzU0Qmgh'@;
put 'bmV4Sz9RcDImIyIqcUNXUG1lWWUlRktgInVIMDhGdnNUWGw/KG0mfFJJSSlYX1FiZFt5RHdDOEBmYDA9OS5QM2EyP1lEU0MlJmUlS3ZKVV5RKlpwYV5WZ2g9TyFLYzY4cGI1fjN9KntWMjRRRWRwRkI/Z1MsZmJ+KUZuPFlgMmtAfkIxbkFiMzVTOmw4W2EmX0VtX0dqcmQ5JDFfU2p1eCEsL2Nd'@;
put 'TClKLmA1P0FENiVndyZ+Lzo0aSwodXtaM3leRVBrO3JgZ0dOOGRBLDEyQkl7ZTtaYFFmbyUsd1UjRzwpXyVDSWQ/cyxZQCFWMlU4RVBrcWoqcTl0ZDljcHw4OUs2a1F4I3VqUClVUmU+cHkmX21JN20xRkd8aVtLW2xWK3FNI081UGB4VDAuPyFnak1bTUApP0k2WG5LUnpsfHklZnVuampwZT4z'@;
put 'Xm81Kn0/P21QNVJqV0NVUHx+S0kuTFFocWpRVD4lZlBsdUw4SXlUOTZ2VUw7JTlSWW5NR3lzUygkMCI7QDg4KWRwVmxwVFRHNHsiWit4VlQyRiRUMF80R0kwSXNsO0QuYUlNXyZBUSRwe3tQMHJuLGRuWD88by9tbiFAW3JJeClybDBCNH5bbGl7LHhyVC4qSykjNCFXRF42Z1dkfF5dVl55ZytO'@;
put 'Wlh3JSZXXTJ5dUIsYUtVKGc0bEtKNSxxRitVJFt6UTNVJEEhRSIwN2tvQzEyWyh5QlBeZUNTRTV0UVA7QjJFUDAuKT1NOVtOdkImSE1QKFdLdihjSyxyOS9tR1lZOHtRRm44PnBbTzFyRHN9aj5QZ1MjXzZQM3J5NSpbUjdxZ2xSfmhDRilGLzBja05Hayg1OT1Efn5mbFRqPEZWWDJ7Mz1jaXVI'@;
put 'fjg4a0hhT3oxLllbWDVDJUs8fEg8REBbbHB5R0R7JF9lPGJUTlkufH12MmVYKyRVJWw3Sk06U2hXSyRLY1tZSUwrNTl0aHc4MllFb3RebmA2UWN5UjpbQHZtcV5iNWNsfm80QS85WDVoIXRDLDd4Wis+Q3BscDEvKnI9T3FsZ0s+ejVOQnRaRG1dU2FHS0VdMDUsW1RwOG80VktnQHhdU1ZOPGEo'@;
put 'cEJkeHYrUDtiIXBlNkloZjJNWlowd0xTNVhoTE5zJlNoaTJKK110WHpKNmRoUXUrVStnOSNdbFZwajcwTVJbYypCJXM6RSNqKiZwIXZDSkshWlEjfVlleS9eaS53TE52VXpoZ2wqMzV8KzRPYkVlVjNzZW9mUCM3LjNpPChzalBNMWREYFZfTzcqcjJ5UU0lJCFQR05kdC5eOl54KDMsZDJWTVIr'@;
put 'VkxZIUJzWyZyMlIrJXd1bDgySishP2YyUitPKGUjUUdWNklaImRobHBecGREYG0wcU0jbG4xLk9TVCx8KCU+XWR4W2ppWSs9cz5eNjdkbnBnXyhkRm1MVmJjaXQ1dFFGbU0jbHdLVFR+Qik4eVZ9RSFhMjZDJWs/Kjw6OD9bTUtyL3FVbW04Mi5uQlQ9Rz00Ok8qSF50cWcoTk41LEd4Y3dxVTdt'@;
put 'bClTZi5ANVA3I19eUGdERCU0XyZTfSElI35kVTZIbVNoNmRnSnZKO2RMIWd6ejx5Nj4ucShsfklGbi4hbH44bzleIWdTMmR8JlAzR1dbMTJBZ0R5Y3RjOjJuL09kaF50UmBKTU44OV1sczJ7dlJzTk8kXXg3SUVCUTtOdGhMfUtoKGVETklHeiFUSGoxUTpRY0h+UVd3Vkc2YzUmb1QzP1REdWF7'@;
put 'Sn4lZyJnPTN7ZjhbcjVyJXU6NDEzIWVfTmhHKlRLVzZpdlErdFlLbGgyM0JXd3YlQjNSVnMyUVs7MzdDN0c/VGRofnI3RkQ8UzMzRDRXNG0uOiZLc0NvcGUyKG5haTRobihQfS9KX2x+PlMwdSEsVUMobktQT0FqIkhfamJVWCEpZEM7VVR0ZXFRPiE6O2FFcVtjPkZpT1hAbC9PQ3JlKVZGTl16'@;
put 'I2Q9WTp6LiNQSnh9SzosVUVbckdwI0t+S0lbK0VXWEtMWWhCbFBmY0VmIXc1XldfIUE7cTExN1BpMlpoNVYrYHBdenx5dFRHXiZhakJSPypZTiIpUGdCTCVKUylDVmBPfk59OnM/YkhAYms/fmxLdF1scmdrKDlkRUFkVWx8JmJSQ2FCV0RTVE12alNMOjNje3tgRDIwS1NUNmtKSUBZWC9DM1F0'@;
put 'RD1MSGIqblNLLGwpfWg3WGk0OFNNSzsyS0kkYyNXejtSdkddUTAvdSUvaDdyUnh4RFpHYjhNZUMxb0trPUI/aXFvPnhqciMhTVViMTxidlVVIV5zaWAvKkRreURlSCJQX1VdOzdSXnZ7OVZgUEBDcV80KnJqczdWdCs+aDd7Q20lciYkKEAxL3dxPGg2Tm5mSyE9Xy5lYFlbK006LGFjV1UwV2E5'@;
put 'LiZwK1hrOzRPZl1gRmVIeXZQKilackI1UzRMYD95UTpnO0JUSTslWzR8YFskfHlodlo3KEQ5cjxZdkZ8bHVBMzk8SUk+R2EiaDYheW5ie3tgPmxNVSNnUWZmcW1dfVV5L3JhblNpXlpiIkZmN3M9dTJpJH0yMG4iYjtVYDdjRkBCZy9ZLmMzfUJAZExWbkVUWGw6akhgN1ZhIXUjWWx5ITJvNSUx'@;
put 'OWdfWVsmRiZJUX4udH1AVSwpczp5XTEzNCtmSllUNGFYK0t4Tlsld1klX0lQcSRfb11gQDtJfD8zUEcoN19nVll8IV0zUEVjIjZrJlgmbEtZZVBTJj9GJTUuayk6bmtwUkhZXWwkc1VaLFAuUHYvVTQlN3pfJm0kJSRZeHRZeWM9cCNqWWAqSmFWQitnP25eQUBZZnZVeERmbTw0b150NWA/Pnp8'@;
put 'WV4pWi97PzloJiZOZHpAQ19tPS58XjNVSXlRZEZUYT9ReDJNWzRPfUhKd0w6SkBwaWRkOGQoLHh6Int1VlFQe2RtMDgyLmRIQDs3N2FoeU1bViUmW0gwRzUoVUw1Nz1QMU9YKzVRcCluMjBZd2RkRVhyajkyYWNoXnBkQXRuY20wP2RTaDFhJDZDVE9YSTV2TChSMWZ6d3M/YTY6VSRreF1eIUJd'@;
put 'Nyw5cFlmWGNseF5lRTssYUNSIixNUjlnVzouaipmaVF6R0goWz1EdFY0aXYkM3U6YGkxQXJ6QmJWbUV5LkJqYVJvJXAhIXpEcy5yNzghTlU9eFlDckBGSzRuezZjO0l3NXorYXRza0pyKW1NNldMSWdTMUJmP3dfMkhRXW9YX0lvR0E2LjFXai9jNj5vdmBAJmwkWzMkclNlX3w/cmBjYSM6c3M2'@;
put 'WFNSWUpffGpPWyxdQD9uPVBLMjpWVilHTVM4cmtafF5EMzh9TDY+VkNSZnMxN3Y2UjdgUGVDKmF7di5+Onk2WkZ7JiklU2UvKVJ4ajZhNl5AengrNCwudSlbIXB3N002cjhDcz4xJnwhOGxfSCo3NXtDbXckanJlJERqcno5cUVhbiphcUp1ezdddXs3OjhYYiIwUmRTRmssUmJtbFF1S3cyMT4z'@;
put 'IVJiW0d5bCw/TCxzP1dMUikwKCxVMjY3ai5OOFhPZDlGOnRNb0B0fGBqN2VAamM4O1A1aExSUjIzLjJreGAld0U/TlNfMzQ3IT53Uk99RzNtSj88OzY4fmozYSpGU25IMm53XyZnLisuJHlCZ2llZCl8UDVfaV9gPylBbWUwJTROUGdgampZOnU8biFtISNeYnJ+O3lqR2FeNT5rSmhIelUxdTJW'@;
put 'KnQ/X3c9dm18XW56ZihGY1J+R3syfHpgVGh4PnQ8MyNeN3YjVklxWU91ekkrazxhPDYsc1l1YjtDZmJrR29PT3dCWHRUSDxHcU0+PltQfWVBcz4+fF9EVSowcEM8aStoWjQ9ZyMyLD4/OSZGbVVoSGdQe0B2MUVxfCprLCkqUUpEPkg/S20pP186KStRcHFRP18lRm4vYW13PFhgVkcmYjFzen5Q'@;
put 'Vlo3XyxZSUFoV0RyX0hrYVY/fHF3N2swPE9TQUVdVEczbDg4JHkjOTRkUX14Qn5IbERuOEI3e0B0UyMzWjApfT07bVNPcT8pbm8kfGFfR2BvaEF+RDtJZ0wmPlksInMyc0pDTFE8TERAckBGWXR6OU9qTyNyRCopdDEvRnsyak16aThgZWtPPGFtKHVMYDN5d3V0c0h1Nj97LkJyOmNAYm13czd3'@;
put 'SSlMSSY7VnFGPE4yM2ZrZkNyaGJzbys3bW0kR0EvP101MXdPeChdOUt0ayp7bTw/XylVPGVfNTU3V2gzfEwrUzZ3KSslZUlnclUyaDc7Wyw1NWpReCZNYkA5Jms8YWRXeXFKREcrRDowNU0iPCNjZ20iaDYhSSpSP0taKU9IOW81Zk82ZGcyKG5CO3guZTtKR3E4PU87el5HPCMmcT8rekNVPXgk'@;
put 'N1pZLjRqJV8xaUlfKGtYYip3OFUvJn5RP1cvLFU2Nj1jMk8lWWI9PGtoJGtmUkJ5LGh7QG9ZKnx7Jkp3JjFjMEIqaklbcVBxbGM4fEdfWCVOPGRSc1hdaSxdSFJZVihxdUxbMW9IODFleSx1JClYSHZ8T2EjIU9INDh4TnhEMGsmVzNYanZoNGJYeHhoPyZUWkkpdSxXYWV1NncrQD4uZ2BKOSVR'@;
put 'ZEheTVIrU345VEQjXzZJek12O2FkVyV8YXsuVD8qIVA9bEtGdzc7SmVzZ0pnKi5TZStqV3k7LG1JYzQjRXs7ai5ueysjJUdVc35nOG1tL0lQP3tLSntRJXxxazE4KiJDZW50ZFEyV1B9ZEkhZW9OTn5LODh1ZiNrQlZpS3g/Kigjai9BL3lzXnIjI1AqSEohcG50c15oKltXRl1ST3hvblJKelFZ'@;
put 'MzdeQFpEQlh5Myp6ZDJmT2xARkkzcig7QGRFfnZPMEc1b0YqRz4sVT9sYV90P2lQXXtLXzNaWDUoOmJOTEdoS2xvNzJrbCl6dkluIWw8OFpuS10qZTNHTjo0cFkobHBKLGlIZ2M2YSxmREE5Lj5icG58Yk5+ISxgW3Jbd08jYDt+KUR1T2VrQXEoWUpHbCNOKkMpdXMhUVBXYlQ4IWYkVExuIj9S'@;
put 'XmZOcGIpUHIhPllQVjhYSl4yMGZaaXQsW25fekhZQGk4ITg5Z2RbOTRvPCwkfG8vI3BlJngpc21PMTc/MnNzXXhJXiwqQWlXfThJY3pqI1M6WFpqV1UwRCYyeUleQmo6XUw5PjBzSSJyI2Y1d01Ibzw+N2VqZExHSjdCWjRqWmhGWCFZNEEmWSlWPVdgUitGKVpwLkR6bkhXVzgzdj5iQi5RcWZ0'@;
put 'ZnVWMSp3d1NSV1tOb0Vlc2ZHQUMlVyl4Nz5UXlczViUoRV4sTVtFbDZaXnF6cUh+SEMre3F7ZFMlXitodnAhU1VAfnVEJTh5PFNLMz4raHlXaG4yYGkjM3F0Z10uTllWQltOYGVYOF19SVtsYnhVfS9PYF8jaTlJXTEzOCp3ZXtEUERCXUBaYl1PSlFaITtFL3tlX3UxLGlufXloWGJmRzZ3Ik5z'@;
put 'PlRJK1o1T2E9TVNVNnBAfnRjfEFZL15qbzx0TzlTc3xeME5VIW54OXBBTkIuQkBWbnwwV3hVWzh6I05tUEp3Iy46OE1PJGgxX2NrdGVyb2NnM0NXbipjR04+QFBrLDF9bU8zQi5CQCtSK3I4P2l5PzNfcmBVYkJFRGNAZ0RjP1JPKUdmNissKDtmOXNDd1hCJTZpd2k2ZEBYNVZ1WHxGWGFYeyZn'@;
put 'U3Z6K1B4dDVsTmlZX1Y9WnVdQTVkWSlxMjsqaCxWWTwydjY/YUFtJGJwL1gpQC5HMXciLGgyaSowLG1lSilpZXQ+PnpOX2tYIlRtSCVJNDVKdT98fSZ3ZVZtIm89ay9qZiRuNVhgViQ7PXdAaXlSR3ErI20sYXFvMSZZLyRobyRXOyRvJCVpN0xtOjhLej9fQitje1QxOXdeZTAqaXJxW0wrXmNE'@;
put 'aVluPyxWZVpwbzVwWmU6XytnL3BoJlg5ajcxU1VDWzNhdyZfM141R3EwczpKUGw2enJndThHSFJlYCxzZyJ4YFN4LEIydC4uJGhDQlFnLj9wQTxWbT5rREk2TCxIfTF6YXNdPlJMWn58ZTEyTXlsPGVCODRheDEoVX1lW2chZ05lMTVLaWtvLllmM0V4U3ozQ1J1I1glKUwlYnphek5nei49aGZF'@;
put 'K0hIZXYmOXtFezQsOmdeeTQpTCU0TW9HckBxSSwsNTwsVDhXbnZNfl82L3dGViQmdkc4MWtRRGhOKTQ8Un5tTEF6Wk41eFJGfkFXdGVlTlh1cShyRCosQjM0c0pbXldVLlFdOGQ2b2dRcWFmPnI5UklHVktWLEUuKGVWNTh9cEwje3hofSEiZXh1N2gsQDldaiU+QF41ajFERDV2OUdWNnRILyQy'@;
put 'M15ZTlM9ZzBde3BVRjFtPHBYIUg6fD4zRmFXM0xOUyJSXjEqcSYlPyVsMlprdFY5ZXRvPzFISUdfRCFXaHZIL3JyNkJNaUlER0FeO1FHTTU7UHcyWUdaelZUeE15QXc4JWlwSmVPUEw7ZXlxdlE4XyVPeW1vQ01dbWlROHo4OzksZlptclUpa20iRGhTanh2UmhYYDN+fHQuazVSYmw2eCk/P2s2'@;
put 'cip7X0Q/U1Q6dyI1RUk/aVIvRTFyRy97P2BPZVtaJWw6Pyp+bEhCV3ZCTz1yaV1Ub3l5QT0+OCt7KDk9V1dWRj0sTmtiN05rX3dFK2NUdGRCM0kvOm4+a1EyZW5+Tk4zaWJBMCRkeG9PYmIva2NpLmN2QzV8YmMqJGRnNVhiLEssdSN3dUcqdUB0b14mVXV3a29JO3B2SX41LkJLWUFZWyI3cjV0'@;
put 'ZnlXRGp0XmMkRzxIOThHezs+S0FIcVRvLkp0Rytmbko9aV52NXdITTt1PE5iN2B9emh6YiQ2YDNHQVVWbStuQWFBbUdFak0hIzUsaiZgJV50ZHQ+cD5CcjxQZD4rNW9vM2EyaV5gL358JmNJOSVPWWI7WWclb2wvUkk4a3l9JDo8UTs0Y08qTmI0JVliR2k3Wnc1Y3VXWm4zWkp4djFNOzJCVGBA'@;
put 'Zj9oQlIyaFZCUF5hNjNtZ01mLjR9OTxpRGo7MmFJPVRFc19LTypEfkdDQjZ5fkBFRCtFMnUkM2VjNGNjWDg6ZkFAPFVueUEwekp8VjBdNEhsbCxpZzFKMDY2R240JTtDZjhUYUtpVCR6THJDRG01JHJDbCRjLjBHIjM/NDtaR1Qhbj1zbm1sZXJwMF5ie3hUUU06Lyl8IUlYOnl3Vnp4IWY2JDZu'@;
put 'dm57L0QsWFNrallqXUg/cFQoPHRvdWVVLEhGIVFJbUMzS2Y+LDVgLmJBVGo2OHVgZE4uSEBXVUlAVmA6OzJiYVU+c3VnInJUR2xZXy9TaSN4Vzh8Sj9ZcktqK0U3XnxKLnxnaFVvJGZ1aERoaV5YTH1mKiQ6dE9rY0wlIURdRX5LYnA9bFY9NHgrKW5UamltLER2SD1vL302R3NoQSlyY0ZjMkBb'@;
put 'YkpDL19GKUllOU8qbF5CPDN8JlA4dVhzUGQyc1olOEsmSSgudVt9dkEva2w4YFZLYFlMK1FKREFxaUpJRWo0NSRHcHFeJHVjWCE1YDE4JGRRQ1s6d0osSHV3T2h0aX1iW0p+ZSI2bEomR3pNVnlaJj0kWyhYKUJUKURecUJLRzJPZVZnRlJjcDIhQjgzdVhiczl5fjVGLjN+YDlMdHF5MkhZRkA7'@;
put 'V3xiL3RuXUM5PVBGdy5mOWE3IUAjcn1bOClqSzxJUypIVCF2Q3I1OFE8dCZSeXhLPyJHd1JNK1tsSkEjI0NQRndONW14dF4pLmA9O25eVEI7S0sqY3BQLC9ddDA2SWZ+Ti88RTVJOHJXO3x9d21SO19Qbyk4JlQoXzIrM09gMml8eFJ+Tmp4bnc/TG89QUF8VjFpMTEzbD8/KUtXPUpPfmY0K3hm'@;
put 'ViZpYyU1PjNIU2hjYmFUd2dGXnJObGExfSpjSzI0Lng9KUdUcEhYbCZuR1FTaFIzXSY0QVBsOHBQakYhZXg5YzhtfVZNQEdUUCE7YWJVV1NBP3osa3YlbWV4Ol00Z0kicjZybGxvIXhHb0c4eSgpK0UuUncmcikpKEMoTTQ0WkxsU3NlIk0sVFhZNit6eXx5MGRxRzIhd3YiYjQsKV87NldWNWBY'@;
put 'e04uJFssTiRhc2I2NjhUL1ZAdnN6Nzx8OzN8VyFTYF5hRG19bS5vckkwPXZ3MEhuS1Ajc2Y/bzAuR1ZXKVZxPVtnWT4oRW9nQi9lUHksVVApaktuT1FHXz5IRD5vdF9lW1IxdTIpZzBPek1FTjY2O0A0OTwwdTI+aXpudl17TjA9Knx7N2IuTlshcWhGSXBqP2s4dTBZYT5ANXdJcHsmfCYsUiUq'@;
put 'Y1FgdW5ncSM1LGReZy85Mi5bZiMvZ2xRP3dNSSRWdCY2JG5kRDlKKUZgbVtXW0tibVomeG5nanFNKVZ0KmExRWdKOzsmLn14MlcyVjpyemxyRUI2SmteaWpPLGtSSlkqRz0jbm5vVTw1eEpHMD4xdmxFZjA1a3thKlRhUUgwKyo9NUw8PmU6KSl2OXFUaig8fGtLfGFVNmAxSD19OlZyaDcjMDgv'@;
put 'X0whaH0md3VLTyNKd0sufnRuL2p2P15xVkcie1Y1YCZgPzJWPjg4LmNwb0k3Qk1lSjdbQEhFNkxranJKUHc3dkp3eE9MX3VgT0RnJEk6SXBxPkl0ZDImfSJ2KH1SNzVRaEc7MDNkR3lwZWtvdjY/c3B2d2NweltTTVk1PlRWISFgSUhDKml8VHBKWTdISUxhKCpqTCRbeHY9VEZLWUVncSVzQU9l'@;
put 'aS8+LGx9P2pPW1BuMXc3LER9KlZwJnNbYkl1aDhJd21raG5CIjNFOEpoUTw/ZD99JDJYV0NFYzUwUUE8NittSFhZWS5OMCh5fjk1PGcmb0VZKk51aCl8O3NZbUhTeHcyMnxEbU8kPWlDd1JSWCM6UmAzPyg0RHZtWHUsZC5fKS5UZV1bMSxWODkyczFeY1A9aV5CODNvW1g3czx3Yzh0JmJGcis1'@;
put 'W1oqc3A2MUgrUkxybVNKJGtuUGkuImRROzhVK2NZTV5yPTdiamsqe3lENzdGdGREOGIqdyYyO010WGJATiJaMHdZSnZlIlZwSFRpJDYuWn16JkVrSSNWWCl0QkI5NkBvNUFQITlmOUFlRzg4USx0N3UuTDt8YjtdV3kydig0M151NWlrdHJuOy9IRjZyMDZhbDpWUDZmbDBRRlBLR3xWUWc2K1Ur'@;
put 'Tnc6fEtxfTR9PSxUeXw/cipjIlYldDY/bXIvQkJUdmE7Vj1LREdJOEw5ck5HITMydXliL2tIZlpCdEtMZHolMnAvVnFLeSEocVYlUkQiSj9fRTMrOz87YTVwbFYsWGhsWmRyU2xLZjA/bkd5cDovRS5POFkiUG1UVVIxbWo/fm1QOWY9NSx8SkZMXStIeW1ueSYqOChQQS47Sjo0bnUvPHd1Wkt2'@;
put 'TT97VWhwNiM5aCYkZCtjUVUudT9ZQ0g5bUw/fj58Zz1qallDPV1KSkpPMzZuZHpPWypWKSxUYG5OSkxlP2o3MWFkZSZ4YzZ4KVlIIV4/X19kS2lUJEVbV0tWUSFwPW1IfFJ6TXhgbD0ldE9qYGtpYzFHSnZaVSkuPVk4cGNdVzo+LDVWXmJgTlF9RTsiN3JMOyFkbSQvSS9MaVAqJEglW08hdUM4'@;
put 'bSJ5KCMpY1omVT9aPGM6NDR4Kyk3SENWUXhbfSN9JG9yR2U6TnI2RntdeH4uSWNeOFJRTTI2ZjpvJDp0N350dihUYXBrRjM5MV1SZlRSSV5+OUhmfix3KF56XSVbdDdxNywlYmEzO0Ngb1RUUm8kMk5MMl8uM3hGVW9eQEwxckdrYSFdXk4scE0sVjp5bSp7Z0xtUD9lODcrTH1Yczl8VUghKz8+'@;
put 'QE1lT0hGNihpaWpfcWlPSSJYTF52N3BdM0hMNGpOci44aXo4O1RvK18kOWhETX18OGhELERbKDk5PVA9a2VMXShkXlBTQkwrUz8+LiNkPWhSZX55cnpOXSwhIk1udlJ0dl5KX1hle18zMngiYkohUDl9S1siYjldWkdzJEJXZ05lPHw+IllRflF7MjA4JFNPJltMXk13bGdlKHVvdzFuLEl8YDo7'@;
put 'bnM6KWdFSXYlfmNwRCJjZ0F6LzIrfVdLNTQmMTVWQ2FxYE58NkBOY3UxMWguQFM8JVpTKGdETDhEU203c30iLzpGLn53RHhNYlhrI3BvQj5wLGtxcUlpQy9OQUVidkZePkwqN2tlZWpVOVshbmZLOnojTl5dPTRmSCtuR34kMlkyaGN0PnFOQnR2Py5oTDU/cD4oV1VZbyZ0dG93KGkkK0A+dzZ2'@;
put 'eUp6NT18bDYvUHlyZWU7WSVTSkYkNEA/VUJOKG5gNk5bMzNSITBYKHxHQ1laYno1PWJKRjphaCVqRShiPygsPU9majVwVWhFQClWRV08aFN9bUlpQmMhfXRecjAwPmc2elEkPkBpdVBWOFc4IWVjJVtUMTtrPiUrL1NkV2p0OFQ9WGFqLkVITEY4WH10OypFNio0anREPXswfDldaUdLfVhANzVj'@;
put 'UkgoQiZqPyFmUnFdXzo7Ki5rPzc2eEFsZXgzWyxxKXkiMWpDbEsjd2hIUG13RThPX0Y7JX1Oe2IvdGAoJl9iJjxlYjB3PEhzNnJUTzIqJXB2XWkmOyNxYG04KzF5fmo/ViVOQU91O3A7ZSRkM0xNTUchZHJkc1hoekx6XmNqVkB7WW95SmAjejI7QlhXdHxiOll1MjlMPiRXOHBEQjt5SEU8KERt'@;
put 'SD9CT2czdyQvdEA5aTdVQTtlaHR4U3xKNHlMPnJ0dlpJQzxBTWc8fUlbUlh2RT9HKTUpd18lS00hWWpYYk9xZWpaJVgqXSxLZjVOTUUiMSVbL1ZgSltWVmlXLF4zQH0iTG9LQ0hdOyJSe2hybGRlTGVIZmBZL157KTBMNjI9cGgsaj8kS1JmQV5FfF5CVStlM28pRzVxWz9QZ3NuKSxnK3I0RiZq'@;
put 'P3ZJLzExdHN0WSQ2WGJlcG1RfktCIz9UQ0RoZiVEQl1TUHU6MCtlSFBsLFZwQG1zQlR7VlR6S0pUR0g4TStaNTpWdXA7T2NZfGNuT1ZmPGVWRWw6Mjg0RXhJNk5tI04maGpKJkZuUVZpdE0pKkw/VGR7YWg4NX4udT5ucTkiVE9GKDlxfXQsJkZYJCEiPkczPUJVPWM1QE0uTVhwKG58WHExKz9E'@;
put 'ST1LZChoaXMidk91Mih8TkV6XXFOcmsvYX5qXkxlVkQpZypzekR1OTBxaXZwSnFhX2k7LyxLK1JmQF1KYClrOG8xbGlZaXpuNlVJOVBweUppSmw5fVUoZ0R7PW04ZlJKaTh6ZzRCMWYkVTtwYHljJWw4cDlfTDZZIV19JncxbGA7QD5fcV1CJDR0ZW1HMjwlYyUuaiYiIVM0LkhEUH4yP2gsVm9D'@;
put 'STNSNUY1UDgpRFh8SCUob2dHS2FoSVVGVDZNdTwpfWZiWUxOa1tpMEJoNCxRaXA5NGZxcHM0aGY8Um0yTmA0SkxiIUhGfDtOcy5SWE1JcDF+fkpGRyFTMXFHXVQ+QHZCdzF9SUJLQHQ+dGFYbnAlcEE5KjZkViNkcUcrPmMlQEU2L2U5VFFmJG5jMi94UV95ciFoK1pCQ3VRXl5YM2BZOXRfTngo'@;
put 'NXZuYFhpeV5gM0dgVyVLRGNVN3R4KmNtUiZQaS5yWSgrZXUlI1lbemFsPFZfV2dbWmVraUszd3UoKkxncXk2eU1yT2YuS34vVUNAQ2B4ej05djxQMm1IMzk3SkxOZ19iY1QhJDt5WG51eSVmOTxDUV07OTE0MXlzezhXWztxRHVoNUN8fFVTLmRWd2AwT0V+aWomYzhvb1hefX0/amwkanprSzdj'@;
put 'Qndvb2x5bG9gfk0zakJoVzBuS3FBVVJSV2FgVENxPiFEbHZYW012a0F8bXtVNjhKLGMiVkg4TWZPdz04T3VycX44MHJyTCs9REcudnxEe2JWOGpIVyohQD5wV0BOdHFWekhJQiVbUzlbRkR8cWBsPzFaTC4/eVFWU0U9cVhmZUZ3Ty9VVnIxakxnYWQqUXtFSUZZRjw6WSYsVCE2OldQMHIuaVRf'@;
put 'SHd2d093PzZgQW86cUt5I2RbWzV0fVNwb3hleWBII3U8K2NaVnp2cixKZmJsQm1fakNlaF4/KUdpVkQkQkFkP2MmZDBsKzBvaXx4QlFdVz9kR2QjdDs6SkA8NzBPJDxaSUUoeXNnXixjM1kjYHMwYmBYcUUuZzU5QzFlTnc0VkptLCVlaU9IPjd9LG1FO3spWyZDOEZaOSthRHkrQyRCXkV8ai5a'@;
put 'RS9dWDFXcEJVYyhWdVdddDV0WHdORCRCaEslWE8qfGh9aHdaeEBQKCRFMl9OUkFhS19yYC9RdkBFS0BOYnN2JCUlXTV5VjYrbSVaViVpJSNATX1GZVJzbF9qKmJMWn5kXipidjFmJkpYZy84SEppSShQJXVfZDAyVFFfbkp3Im8rJXwqZkRGZUQ7MkhjcFp8bCxsXnwzL2RRU3xYa0VXQ0REeWQi'@;
put 'dVFSSz4/OEFFXklgLCkuTzsqaG5aVTVvMnt1NClQbVUwTkc4M3g1Q2F7djdzeHBeRDk4bCxLbz45VkhdNVdtVXwvS3V7V3g1TW5geTF2In5DbF9wV2NzUSpyWHMhSSpRYElnSXRzfGxJJHUxN3EkMSR9ZExHWGZSOi9jSExMSHZPczdeZGM+Q0c/Kkg1Z0lCOEFNMjhyRyxJenxxPixjIlZuWUQ3'@;
put 'WjEqUn1NNl1ZODZVNEI1b0x9dkpfe3FHO2I0Vz9yIixuRUA4UWhyUWJNTCsuXTxhWD5tN25EVX10P3MuXnVaamY1YlJqKihuaVksK0w1TWlSPF5vZGcmQi5Hcz9GTS9oSWJBQyg0KEZ4KCJ5dzBnWURQaThXOHt2JEpsRCQyIUdqKlBncT5SOF8xb2V8RDlUWGxBcDtDZyZ3aUZPclNrSzFLb2gq'@;
put 'Lk9XMjdSP1hBZU00dmUxcVhIWSEzXV9UX2RmMC8kZSVfa1pWc1BYPT8qS2lzblBxfW0kVC4/anZmPyxBMSs0KjgiTS5WV011Ml4pcHNeRFFpeXUhOzNxWWZEb0BWfEIhdllmZSFPPjhueDI4c1d4d0xaP1NKUWY8ST57VWhkSUc6d2dhYUhFRV15cFpRNlkmfFMrUCY0UTdfTWlWPSpmR0d4Mlh6'@;
put 'XzdCO1VqVEA8IWo2SnhSXjNPe1s7YThMTndnSFd1JEw4WzJXfC9Rb1IyZXpYVz48LiR+fFtWc2ZJR1FnMjp9SjBOWGwkSnM+LyliW1UzNUJeKGxSNUczcHM/KmprdkRUPDc5NUQ0M3Q7aWRQJDIrP2FicXovPHlTWWI5cVdoUik8QF9qIyw1KS9SOkdCa3piaUQ3SWp5WnhDbFtAcVJ+KFNlbT87'@;
put 'fGA2ZDBdTzo5d20kKV0hMzIwX1NgbFBLaW18X1NIeGAmfWIxN2pLcVNYOW8rKURzSSp9OlYmKix3aGM/LHBAdSF4MmdebGxXSWtTTDFSTDM2MDQ8N0RkXmNQbzU3SG9pY0NHeXN4Uk9yPitmT0d5LyVfRElKeHs5XSVaSml+diY4by9jPjMyWlZQPDFeVFVqfnhpUE5ZXmJhMSN2PUU7SVRNRF44'@;
put 'dHIkbjhnMjlJaSpEWXZ2diQxYTFFOEpbMFpZTihecmBXMW1LeyYmJT5nOjNdVngyMiZ7LHMzbSR0JWoyTjo7WiFmcHpCVXwmKjZdbHFhRzUwOW1we1NJRkxkSiElb2JUSnlMWWtsRTZCezVifFpaVixjWDJaVitjY1I2Sz5yKVE7YldwKW4sP2goNTV2LEQ+JlNGWjhmVj1jJkpZMmRvJWZTTikq'@;
put 'QCV3QHFPUCIxWyFUNUVVWSpAPGcpQDwqKnAsJWQ3b25TIXdNNGFrTjNnWWl6SlVvb31PSXcxPCNoUCx3RElhN3YvTCl0Q01LJi8mZ1MvUmpXam0yRjk3OzlYaH1dcDh0cjEpZiw9a1A8KUAmPz5PTXUpdTN4N3Z8Vi50THw9PyZyR2ZrcnRkL2k3NlA9JmoxWV1iakk7M2I6TGx8dlU7QD9rMi57'@;
put 'clZNOS5TO0pBbjNDR0pxMT08OSpoMG83ODMqUkY7TE91cHIkdjIyaSM4Kjp8IS4mN3Iwbjp0Y1lUWVE2eGw5XW13SGUvJGo5XjwqOHUwUHJRayVVMDg+Z1V6eTd8W058NiV1SEo6NiVNbDhmMTJwM0UkbittOEJCU2xgM2V7Il5lZG91VFRPZmVQMUNGS3VgPmxIak43XngpfFZmRDhuajR3THUu'@;
put 'RTYjdGl6azVreHg7SkJtOUh5T35lKVlKSnU6VTJ2K3cmYUhlSGhNbEBibGpISSouSnlnfXc+a0A7dykla1pRPFlic0RdJVApOWpDSEVIXVhRbnZ4I0FLIVlVJUM7Q25JX0xXXjtvfV5vLkpNUj1HfXF+YiplQThMPzgvUnl2KUEzbUJCeUclVkVxclhoL3k8dEZ1LG0+ZUBGUHxkTXVKOVB8YjdC'@;
put 'ZUgiUFpSRHxndS5yYkBGdmIrYXd8MShuYDU+VToydUFGVjg5NzUodyQ9eWFWVjJKZm9fP2NGe3pfcn4+b1N3SEduMFpTRHw7MmhgYnIzSGY2VVVqa29BIX1VeV14IWMrTnd8d21TMy86YSowTWVeKU9OaUt7P1F2M3RHJiF5TCpYXlNNRl53IUg4OzclfEFHNiU+bE5ZbzlZRDxsfjtRTjN7SDw1'@;
put 'JllqVzt3ODglZDJ+ZEdgemkkSEw4RTg6QEtZd1JgLmMrSE9rI2VyZy9OXiRkMTt2OiRNdnpbVmxiTz5TNC9oZjY8SWIxU1lUbU5ZQk0zcGJ7TE5VJjYlMHc7IVlPWmVFWG0mKStKP1t5Z2RSOy9HYllrQE5AV2hNVX5iQiV7UEZwYU4jMVV5bCovOVFoQXUsWUU7XmtLSHpsMShobWgwYnFGOX5e'@;
put 'KDxVfms1V2khPyg8RlpNdUQ5czxDaFQ+R3N7PV0hOj04T1trM3lwZUwiTn0kL11GM0VAeDBZWFFETXNlc0tlS094WUcrZCZpVWUoPz1rey89UFA+LFpTTS5ySmNTUDAuN1VzeD54QSZ3Kyo5KFYwbSEvXSVIPWQkRF1uKDc/JiEvW0hRKWJESSJyKHAvdU5zV3plL0ZrRUAoIz9rX284JChKbXhZ'@;
put 'JiRyZWNQfSx9fGRXenVMKndAano4NGxJTmQ/SGk0fSpnVmkwPmI6c2k2PmxpJGQvbiYxaDBTQ0VWek95PiViT0hkZHg1TU9aPC56NTt2TlYrXS9oOGF3WkorKT0lRF1+RWNjZCw3cGtlTzw3YllqOW5zVWBeNFEkSmJgSGV7ZSI7dz9mTCh6SHNOOjBKYFZYbTY/Qzs/SXJ6RFZEZD5AWzlEWXg0'@;
put 'QHRNfGgsfkBlSFhfY2dAUk1QP0R7JnlYbFRdY280Wmo/JEArbWllcyFqckZmTVVJdWZIfGlaUGhlaChAQmk+anw+Zi5kTSF+cEYjMFJ+d2Z+UXY3XnE/XjFmLkZuOVpydFU8U3ZpPltFYU0yP31kJU06ZW47U3hgRGdhP1h9Mzw9bG1gT1FnQ085bXd3bDZ7XXcvMTFIOkt2KCxOdmJvTFA1Z2ND'@;
put 'TEVCUmZuYmJQQGMqZFd0KjBXMGgqQUIqNTdYZkJPVVVxaUtpWVVjUXM5WHpCRlgwKGB4SkkmQyo1djd0Y3spJEFIVSJGRnQ0d343OVApIl1We0d+KG1MUDVmdiErNCttRXBwJk5AYztMekxDQ1JubEpRR2tIVTYuaHR1Qk1oXmpTWEtGT1lmKmc1ZCs6bGlDZDRSb25AYys6L0ZlWmZkYmVBPH5M'@;
put 'SGFyKzdfLEd6QituTXQ0d2ZKMEs0b29PYkQsQiJ5RTZXQHFfd3c8RTJuSUJVSHIrLltwVnhYJEhQZCpkYk9YZSxESkc/aU9HKjV2N1pEeFdjKTooe1J8TFA1QTghQ2JvcG5wNDNjNkYxY0FlWkIpTFJDXkhwdn5XY1lHZDBRWUByVVE/X1g3fn5mNDA2JkZkLDkkbWhtfUUld3A8TXlBNXdQck9U'@;
put 'VEFQQCFPKCZhQjFqIWN5Wkdra2NjbUhIQS9KYGlMJEVAT2Q6QTo3dntpekllZ2IzTC9KNTdFd15gTzBeRj9Ccm5Qdnt1WjQ4RjFjZFhfMDJSL0ZHQ19oOUZJem80JTxWUntDS01UaiJDfH1FNnN1e1FgWE8wdTB5V1NPdXhlT2FTfExqR2dtNmFjdjQoXU5ZKUZHc3dRVyNmdEI1MjomQ1BVd31P'@;
put 'X3l7RywmQVlTSik6MlkiZFhHUUFEdFhMOkNlR29PMy8mXy9reDdSd3lRJXFYbTlTInlFNmoqTWhrU0l1O2FfWCtNanpTS0V1eChOJnFGdFo5WEZCSUNiP3ooKUhJQlVIQHZEKSNbR0IpdSU0X3Y6JmdZb1lVXy5ERjhQVl5zSThFXSwsZjwwZUJIUj84fTJfYnZWZmNJNEMuQyhBeDZvSGhvfTtR'@;
put 'ISxuYUt0YTchNlg9XSE4dlMpaCh2NDp8ZiRHVT1+fGB9M3FkXTs0Kik2SlVSKXxCQjY0OD9+V3paXzR4ZE88a0lXeF1xTjpDM1tjd0MxY2QwYFA2NndiWWJBL1djTmZzYSlWNF49TzdNPl5xI10mbUNqfG95R0omKls8fElme11mSGsjL3FYYkQ+JTR2X2NKaVBSVHMxdV1+bEZpfFpOQC9FVyJZ'@;
put 'JXM7PVpEWkAsdTtmMTt0dWA4UXNVK2o4c2F7ZnAlUnkhYn1udCRyOHwlZSZsb3pte19oOHYqeWk+OVRgcj4lSEpjP2xPXkxrcjkxZkpXKHBIb3c/RzlrNWNdcDhse2A7aUxJcEZtOXhGSVRaIzkjY2deYltHczN3KkVwbyYkbEsvYlc8KltvWV5pWHtzQ3N1IiVgKDxaRlJ3SU44bn0jfUpYUHJn'@;
put 'TCZIM280Z15Nd0liS3c8OTI9U3dtYixPM1VMTCtsLjR6MEM1cjJYMTRZezpaRyExO1E/W0NHI1BtPV1RWzBvOWgpbjpmX3lZJHt5Lj99YzdSLy5JKTB9SEs7RG9QfTl1cytpMEt+QCVuI1lbP01wViUrLCtES0I9MXB5YnoqJk0hSWRSbj18KHxyWmdaSWI7Rjk6fDMxLiVIdUY9eWpaZ1BNTiho'@;
put 'SyJ1cz9XQ3s6ZD1PXihdODQxLGVnRWZxT3lQRDZLJjtPKHVpbXl8bVg2W0s6Qm4vNEleMy9kIyN2dDByeDJtRiRgZHVIJCg8byhNbTw1WVlHSDw+UWNfW2tmSWJqRnM2X1YkRyZYe0k0YjczNS5KS081P1pkNVQxVFV5Y3ZpW0ZnaUU8JEA5Qm08aVNPMVVgVUckSCV8NjpEK3FHcmBwJFExJVBR'@;
put 'dCVze1dPRCRFYGlmKUBuPj9GQ3h9bUs/JjNXKUV5LGMmdUByUls7ek4vJChtKzR0aXxDOigyT2BxeyNkUVE8V3RWVGpjVz84USJyTHJkRWdRS2U2Y3EmUzBYUC5SJkgySCxROztidllua0JIJDZXV3lnVjwubyQ3anxWMzlDX0JFVzkmJkkkbmZHO1dXbFMwJDpeY04/ZyY/Ji84cCRbVkkuez9Q'@;
put 'YmxdQFZLfUtAXkIoX3s/Slc2RDQ7ZVM+VHs6JDRNTToiJUJwfCImVTIyand0UVhhcj9NOHxVO14oa1tMZWp+fDFpVWksWj9Ue2J2SWdkJDVgKmxtOnBDNnBgZ24qZkU1WChmQnsmZFQoVXByVzg8YTQkUzJKJERHbWMza1ZKbyF+XlcxXToyaWZpP3xoKncoSW41UnpPUD11bU5xeFtOWypWRGhi'@;
put 'TiEkWSFzNW83KFt2Q0ZTZGlSIyhdYnZmLmkpY15AJCVCbUpjZFAsbitDXkw5JTslajtrK1pOeihuMjAkdSNdL2srU3M/YnJFalc2Xih4fFpwWmJWeXE1JGQ1TixgQW1kdl4hPXRNKUEyfURhYj5fLkpdeyNGP3J5djZsRjkpMC42R1JHY1FKViw7OmJ2P2Z0MVJrLEFNfH1OX1UoWFp+MXczLG9h'@;
put 'NT5oVV8zUjNILEgwUz9gR3VzZV55ZiJ6SjZ+KSNRdjFddDQzN3ZfWUZpIWZlQ35UZWYpWXg0KjgjUX5OInZJVEdsL1tFYzJJZnZuYExAJHgiVkQyMWhHQytWeyxkTz9UI1FFVEdgPkhUKnJeMX0xdjdLVzVkeSFzTnIueXMmcEwrR30lPmBuQkQyPFEiQ0JFZjtJay83UFdJLixIaE1jZCt8QXUw'@;
put 'N1IuaXVGfHkyOSZ1W3ghMi88OT5rXSlDUzFUdlE8VmY6TG5JZjx4M3JEbWtdajF1R1pWL2c2aF9BY1dMKXNPZ1Q2NlJMPmQoPz13Pm4zS2hxSiYpfXtIWVZ5YXhpVTt2WXl4KUoxMF51M1Byby91ISEjek1qe0wjPFZBeDxWQVZuYWpiPEt+cDFsPjVeTlNbU34/UFIhMVg2QDtkTXVVNyopXSVK'@;
put 'UUh+IXk7VVRxRWYqPyxiXyEsW0B8PWRKWz96XWBXaCNeRDVdd2NFS1AsKGUlUXQxYkFsUzV5biNiU1VDJEJbIThCJEpHR1FCOHYhXzJQYCZZYmgwOjZiaTtpQCtRQiFKYTxwQFBCKDJDJSpLK3JeTG5hUCtKPiEvQlMoQkA2aF13e2FTWSx6MiR3dD9wZkJwOSpgKH0rX3R4QHdlKmNbKi4odFBU'@;
put 'flM1RHx0OFNPQylLVzJNUG0pYVBhKmZMckZkLkRSZkQmdFBLQiVsaDwpZCxQbFFlSHpDNEFPRG9vWXZYL3goQDAhJWJRIyZIazclaU9mO0EmMzM8KSJTK08/IXImOm4lXj1zWWAsQkQkaXg4dWw9PStxYTgvZXlzP0BASFJvM0ZGMixURlRwbkVjaiI3TE5VXUQ0KXxxJUhdJmE2KWIvXyNgPVJS'@;
put 'azJ5UilRVj1ycT0sKUopRXVpWTp6YHxba3NgMEoqQlBNJmoiPXtoTVkwVGVJLG07aDUkSnZdWDtQZWBoY05DPCI7YShbMXRpakF9bSZwK3cxeCtXZzJOSTxvPGAqWGheclVaOEJ8Tk8raztXdjAvXz9TYWZ8VSNwV3lpNTpgQnZmPUUuOXpUeWA9eTdRb1lHdjFIZH12VEdRbDc1Z1E2ODNSMDZj'@;
put 'cmxSeVlwdi5XbGU0XThwOnQrU31zXltVaCQ5OXpxPDB0MFN9czpVNmp+OzxrSy83T082fClFRHMvVH1RWjFkQzFRJj1JdlltTUg7SyRdY280PHRQWWo9OClTblZiPWM9P1o+PiU6alYofGdLXz5zODAsaHU4dzl7fFtjXWtTMXJHc0ZWaCtGdFNkRkpgVlUjKmM1Q0tkTX5SfEFTQjE+NCxjJmpC'@;
put 'PEMoeiVOYis9TTxWX3xRUWE/IVlEdkUzNzgqeThIbUlUUXF1cEcrfFJnYmoscyI2aj5PUnRyaCZVYSl5a1VXWGF8OXN3KjVbe2hqS0FPP3g3U11GJkwxa3N1OSg9T1EiKWxCMXA8dn57Sk9jcXFbQ3JocEx0dWxBU0JKWEBWfDdINEUkdkJCWF5kWUg3dF05V1g9LDhqclJDSEY+WU9aI3JNblpr'@;
put 'MyEhfmk2W3hsJlQ1Llg3MWJYO1s3WCxVbVQ6L20kazdYMmE0JngkRmdZNk0qeCx0TDZWVmhVSilVJTVIRGFfdHZnU2FPVmYlKEN1eXsoOnBuUTIqXyNkcUc+KGNhPHJ6WDhAJV8leWc+ViVJX1JHMjF4bGU8P3I2diJgaXlSSj1jbzZxYFg2QlI1dzt6bGw4bTU1Py9xLGMhOjVMRHJoe0w9TWw2'@;
put 'cXhhVSQ0InklW05KYUMkd0FfTCRNaltAd1B4JVpsS0g4YFJnNT5jOWc0SUV7bD9lYEA5SzVdTkk5LE5SVX45QFg9ZV8ibywpMH1NUyVeQjszZEtHbVdQPz9OT14scXsoMywoY1JuIzk9LChLZEd2Q3UwTn5DSnM8Tz0lbFopM1leZ0FhIjFZIzRTaktucXl7I2tKWl1OYS9pZX09NmwhZHEhKkVA'@;
put 'RXNiLHtqKnJbPCNqcks4K3tTZSxlLzAmOn5oeGcqaDwhSFtOYShme1phLE9oaDhzQDVkQWRTYiZOOkd5LHRDbWY+LHA4QmlZQihhezQhV0NtREA9LF5yZHZYQnIxb1l3SSlMbD9STGkyUFV8R0ZsUGZEeElGXjFvTyptREZYNSMrIkk5fCpQZUxkKCVTM1VYQD9UWGIpY3pJbnQ0NGgvPGA3UT1N'@;
put 'dGQvOGY4dElpQyhCfE0zJm4vRDNPT2Q7MnFeTjdpTm9MNnNZNmU4QnFqelNXZDRAZippamJlUE5kO3I1a1spXnxUQSksUlg9QEoxXlJRNyQ5OCIwMnc7dXtpZzFnZmJ2UF5UWjpHYTxnKGwyJiQxS31uP2hFUiJ2KTZyP2JQb3RRWG9uO1VtTSkoSj90Y28wW2JKfnJhZkhyM0JVQDk4KCVfO3xP'@;
put 'WG4kTj5xNyNeTlp+az8pQW1bQCI0I1poeWcwcik/dilOcis7IjJsYGkpTUFsK2xUN0I2bkQiNiJIPHd+T0NsfjcoZVFZfEphKmgpeDs/ent9VGg4bUR6PXR+WiN1MVAiO3IsMl5aVXI3OmshIXk2WjdxMHRsOkBEYi52SUZkSEM0SWJhKl4iczJGdTA0ai4iMT1NVFdeQnE1Zi5pelIoT2VFdyp1'@;
put 'JXcmajp5dXFEYlJIT3t6PEUuLlcsNX11ZkhwSDVINktqOT9ENjB6VE8zIlY9dWIvIlY1cCxQcHM0RTQ6ai81bGgkJFQ1WzdyYlYmbnVfIVJDRSkvfjBFciQ4fWxRSUNieG5JKm4vdSUhe3whNnJIW3hpKEtFUWVPdGRAUGFVaylQLnNGKnUjd2tINzN4N3F0KDdhWTVXP2RbInxXN1pPLk0uL3Ap'@;
put 'ekRUSSM+VVMxUj5qciEpeHhxe2JVJGJTQHtbbiFkenwyaCljKUVNekNMWVZhQ217USRGN2RqUyp1azEpKmhMOUdbbWUyNWJJWVdLV0QiWSxVfUw4UWRZdi9YMUx2LkNET1VVJk5+MS5kTE51RVhOKnxGeXlRIjNnZlRONTdlIUE7U2RQWUU8dV0yNyV0XzczbCNVfXcmTV5vKDdYaFRsfXciKUlt'@;
put 'aEgwYldIWE4rMDtvQVNSPEJpOEUvOEx2RWZIKyYvfTxSdSpxUUo0R09Gb0d9RVg9TjVYUmdbKkxLRWN6On5PQ3RTM18ufGdANzgkKmsmQ2lWdi88eVE5c2VlRSl4cC86OzVCdl9eJk06bXZ9UiRCbjF5ZmI4bWpibGlwRTIjWjwvbTIlPFFzWXd3Z1Y5enhEbyhuWFlMI0x4cUFVc3NuYH0/Rn5d'@;
put 'bEFVKWdJT0FAPnNpMTVbNmhydHMycGcrc11rcSwiZz1Eb307X2YvJU1YIUd5ajdEWHg3alZAVi54I3dzaVA2fU90TE15YXdZdnRUO2QqRj8ubSU9ND9NdERdQD5YfFZHOENbPDlddDo0dz9MViY8PUBFVSNkIXlQPDtHfVBRZiFtKXxidkBMLE5yYl8uO3BuMkguJWAjMV8vTWd7JmU9QWB5YEso'@;
put 'MkJhZjojb29lUytjOXIyOGxYPVtOZ2QuYmJ+UyxkKWlnQkguQCx4eVUzZSNARytrWUh9RVpTS2UmVyRfIVgwVmApfkkzX2JnYGdnMFVXKHBJMyx8OyNOJkhbZm9nK0ZLVyh9RzczTjNLUGhMRGtxc1lIZEZlW0o6NXJvdSlpRG1XPjQ6eFRmUGwqanwmKnx6alJLWyFmclMwJFVkWiQoUCRqLjBH'@;
put 'WyQqQ2VHNXU0cFlsNmlTOSM5KjxJSW1Mb0YpXWsyWFk8PTdAKGNeez5mOGcpUmlvLCVqK3A+NmxIOktAKTVDLFN7OWF8P01eUDVbUmJ5YHBRPnJRUlslPiFmc1ZIfiFacG4rbSNOXUg9Q14mfTkuZnZEYEIlWFZNaGgyRntuL1dTN0V7Vl16dCVtbE02UVspZyV5SU5dWz1aY1I7KlV7Ii9qXSQq'@;
put 'bi9nMkkuREBbWmcyTXltL3h6TltZJW1sa1M8eFMwRCM5N1lVfFBGLFs5ZmQ1U3FlbS9+fGVkZTteQ08lYzUrblh3ZnhIRj0za0g1IU0rY3d3U25dOjpnSyNgJXA0czdHYDolanZ0eDUvYXg+ZndHekNteVlJSjV9JWN6R2xEZmAyTy8mNzskSEhiSVUxeFltNj45RXN0YVV9LjdLUXRuOjAxO1FX'@;
put 'dWZxOGp0SkQ+JW4oVyhFUnU2Nj5SL3g5anUxZmpAdzRJNXhZRWtibiVwLEVEN3dQVmsvZ1JqYFJFK1Y5ZnkkbHxBUmNJOWs/TDtCLEpeRlY8UDJkWVplVyEuazAhN1NXN1YhZjtpK3FlU1dBeEV5fXEvUnZ9ZWYoTVtxUEslI1h9L0UscTVjOjtCaUtLWTQxd187VUZbUCIwZXhHQDB7a1dAZzwy'@;
put 'L2M7OnJheGhhVzpLfGFRJSRxX153Qzw9VlJkQzJQbGwzd01wSmxvWERpUnIraUF1cFhtU3U/d2FhUE5FQFpvSlA1JUVIejcvPlllJlVkW25oQyQ4c1B7WUxnP2NMZG9KRDpBUFA5WGNYWlg7OT9wWWQ2Qzs5P1AwMzluT3tWP2NvMnU8ISp7WSpNfTh4YHZLJmNoVy57KExRQXJveSpAKnZvWFMz'@;
put 'JFN1THFEUEIreiMwdVd+YDo6UV9vRyVlaHlpVCRjNFtISzs0L08iRzkoTXByZ0pTU20kaEtdTFNbOiY5I2p4OENJOmVheVdWZ2BnMG1HdmFhPT1wXl9nUyZ2NSFPZ1lwZUsxKSo2SnZDaypRVDxxQn0mUSIzNGw3bnx9UzdjOXV+XUNlSDB4LkNFPG1xPyhmKkFkM0dHdlAqKDhxWGVnJEhKVz1Q'@;
put 'VlU0R3U7TE4objAmb05rSFkjY1lPOnteZjguIV9HaWV1VG1wPlVAajlGcGN7VCpELiFgPSlJfn05NWNQLzJ+N1oyKG5wQihOZj0vRmZlbis/OCMpcm9QNnZ9Rnwkbzc4RktaYUJeJk5QPG0zKGNpdCovYClUJnFVI2ZRU2ltcStMN20zajswVTNVJl9zaXN0NCFFVTgoNkdbdUs+dyUrLzFpbDEj'@;
put 'W0k/fCVEdnEwWDpMbDlFcFkyP2cqTll6bEFlMnVxeHpZW3VNOWFENktXMVFWe1FnPF8zW0Z1dCROJi9fKFc1LkEqKS5jPGVoejNdUUQre2pyRm1QJCRZSks4XTZAS0lffUh4QiF3TyVVfWEhcjdGdXc1RzB6dUpgb2NRVTE0QkJAdGZodUhNWFNHaCV5ODBFRSliNkt1W2wlOz9qJUcyP1B2Tm0o'@;
put 'OUpvciNITCV9bTdoPG10MW1IPSlNMDFhM0NQOH5RNSxPKk5kdm9kS15OYEB4QktqPz0hWk5oZ1tQeFM+ZVo9Jj15USZHeWthWSYlTHpxS0ZYe3J0OUVgMGwjUXM0LFk1am1NemU+JVN4Snw6QDdqbFNJaTlXOCt3ai94eipbOGQsYkpgempSOCVfIjQ2ITMvXWdkZjh5ZGV4YyhtbjBXYWw1ZmZA'@;
put 'TTg0Q1RLaHVTPixhaV56P3ZLNzxWW0BTNipuTHE0UWkvZ0UwbypKdTJscFRwTD9qQGEoS3k+d0RGM3szNEhKciU/VGVmdDk9UHhzcGxOeFQ1bEpUUj1HbVlbdXRoX0EzYGZpZUczV0lpOHAuUV1OeXFnSztKakdeTHB6Q2VnSj1QPWs/JUdNISNiZGRvLD1UOkQrJHdLNUVmS2JjNzE/YUJrOXp2'@;
put 'cWFRYlRyakc3dmRHNzM+MGxMdk4sLH4pITFzRm1dXjlIMmk+UzxWKjZ4VUw7WVImUCRRYEF2SmA2S2ApQlkiU2NSTWIpJGlxZEdoa05uVmclYT82KzN+VXtUKGc7SDNRbD5+cmBrTFMvamk8ODRoMWZ4YUo5Lnp5d3EuLHFsIUxtMX1gQiZYIzopdlI9T3MiMS5sXVdLcCk+aWIwfDtdRTEjbzVA'@;
put 'ckMyPDoxQnRNak0mWjg3SUAkb3U2VXsrKUBAUnlnR1pWeiYwWUk0O0F8RzRoMUc4N3x6WDFYfVV0XzQ6OVt9MHlKYHROYU1iNjJAMSx+NXxvOygwLH41WDUjK35MQm8vKC9CaXxrU2ZmWj0ja3w+ZUlXTUFHTXZaRzV+LmI8JWhwW0A9ImBAKGdZamdofXdPTXYvaXlpMV8pU059UlYxJVBzKntg'@;
put 'SmVtVWQ2WCMxNTB4c21IOE09MG1ESTFtWjEoWUMsVTNtWjtVKVklKzRnIlNqPD8pLE5Eb3Z6UUkiWUtVSHpfKT9HNDdZRGppYmReR0ErOz1QJWI2ZFltcUpLTGh9QGxiTFZYV1ZweXtlbEIvW1JXVTprfFtedjVsPl9JNDchWik3ODV6PXlJanB2TkVtaXd5YmRpd1daVXhfLDRRQE1rYzhXOFA4'@;
put 'ZH1YInJ0P21HbU5+WFJ6dS98LHJvLkl2ZSwsPFlqMElqa2VUZGJScWk9RFM4NGxzJD09WFo2T1soO0BJJTJTSCIlZi5HIlllM0o4QF5VVSRsdV8lcVhWQnl+TSE/aHlaPG9MZjJMVkd5QitOXkdNNDZRV1IrWTwpQjtiR3lwb3tbeGxuNWRIWloiLF09VjM8UDEsM1lyYWx0P3I8V1BgcnBlZiEv'@;
put 'Y2g6fSJEYSVOQ2dsIlEiLEJAbUgsdTM2bW9MS2dsbjUlMSVLRnZ+dk1IM1k7azxJdy9uInsrZ0szZGZMZjlXdl0wUThEd1FiU2htN1I3ImZXVVtkLF14I0VDMG9MfldCWjt2bEw8QGtJRW9ZPlhPPDhnbm9leltFJnVeblY3U2RFJlNuXTNkSkYmfHosRnVDM3xqWHlxVixhTVlSP2djR1F4THRs'@;
put 'OHxkcU9CbFlYU1tPNypyXTk/cWo1c1tZUm0qZEUuRDl7PSE/VUghKSU8TzdjKFM0Z146RHU7MUs1QSpHL116aEFPL1U6ejI2Y19vM0I2YDt8ckRtd2BlUGU0dTQ/bDxNbHFSWS5pKkZ3TUluW0FqSn5xYC9FY2xjUUs6MCxVQGNOMCtRaU9+YU17ZiFRWzpeMyhWSil8ZHdkRjZbbCV9MCFDdy5O'@;
put 'aSl9Okt8RXtBLDFsXzNmdk0hWy5+MnNSensrYWUlak92UF9TL1MhdUFGW0ElRFhYWClGLnY9bG9fezVYU21vO1h2Ni9kTlopIzw+YkFKRTZEMnxlPHdyNWh7RGJeKHJ+aUp2USJeM3Y6Nj45QEM3aGNQTUwqLlNlai44eypqTCRbeDlqRWIzbU1vQHFCW0xqWWY+U3pBTWIrfFB2Q2xCbDEiJGY4'@;
put 'bTYpdFN5eDk/P2BFUzIzJGNuIVVhb1pReDBYMD41e0twMTFzJmRtXTo+SU92Z09vQ11NNTl8KVpNUWtNaXsuQ087fUNTeyJsY3JpeEpmaiRFPmlPdDtmJSpuL2pgY2xvay97T0MiV2tvWTVDKkEwRl5sRXt2W14xPF9WZmF7dkc5Y1BybWl4bzs/Kk8hTXU4M3hrcUBIZnx6WnZPVmFkW1ErK1ol'@;
put 'RXVoL19BNmshaSJHVHA0Z0hYI2tMOnFFTDohajwwbW86I0MjcStSVERhaWNOX2FHK1guWT1bbSo0NlFvUSEqM31XOiNxQzkpIWsvW0tKfXVGKXBnS11xVUNFKS9XUEVFcX4zMWBsOSlgb1swcnpCPVIraUp9WTQrYlJSS11YO252KGxSUWB+KWU3Xiw6WHshZG53dThlZ2RvMk9SdVZVM3lpIkcj'@;
put 'Vnx4eXciNX0+eXopSU5bNSVQY0JtUiFWRDk3LDVUbm4rNyw/aHx0W1JwUmZLPkBJR0BoJT9DUDVYc2BUMjoxVTssRVEjIzReZ3kkZSpiWmIwNi9VMU48Ni92JmYxO3lmJCVqYG96R1Z9KWtdRlk/MGhrfDpPUWVdYGcjPH5zbV0jKk5+WDd3TU1fdmBzO3JQMCRkJUIjQlglNlcoL1VgUGQsaDF5'@;
put 'NGtWS35dViVAaSF5SSgsXXU5LFJWOH45UH1ZRDckNSZoe1MjeyxJITpBVH5oLC4od2hxOXp3KlMvPkp9UHNCUGI7UjFwcDEoUGNzKW08fkBUNS9GI1suR0RaJFdXRWo1ZGlZKH0vSjVjQF14OHVAQHdpKnRSXiReJXdmTU1oJWlxcyx2Nk8jKkwsWSlVcHd8eGk4YC85S017ZFNaTVNkeVdrO2l7'@;
put 'dTVyfFd7IWFecSE9YEwucEBAL0xtQnosX1FZdXVKTVU6TjxRS1V8c2BNRER6Mk1odEVQWUVkZyhSfClrSXF1O0p6YHJ3PEZlX2dkfF5zJHZJaUxgfCVfeXdUdHNPZF0/KDBlYzU+Om5pIkYrLlpHPjNIUXs1X3lvdTUlOG16MSNiPWAmamNQV3QmW3ZofD9JZm1sYyE3L14wdTFyJVgoYDZ8YjFn'@;
put 'S1NtaUNYNmY+WiNGaWRHWHkzX3RRKS51SXRZKUR+XTp6fkhOeDEuTyI0JUd+eHdQX0E7JFB9PkhTMD92OV1BZjJSblIoQ0JUISUlM141fX1GNzI5N1csMTQ6LEtEdUEpQCJeTCsqMXBIPlgoaGV2TUttZnBCSEJITUc7SWNZLyZiZjVoNlE+VitkSmhMbmUvbFFwbTNpRVNZYi46JElkbldONltH'@;
put 'anpYP2MoZ0p6aXZzcj9gT0VKOEpqWS9+fGtyayhwdCg3aCpGamgvYmY3QkBkSnpqdjxwciZYWDglRSQvd3JgVmciVzVyeDdqI2NJdyUvajFePXlZY1Vxfm50JkZ2SmA0TUV5aFhYZnxZRVhYZm4hMk0lclpEMXI9YFNFM115Z3AsZHZKOGlZfUAzJGZVeHovMDIrcjVGKmR4aCl8MXA8K2EsPHNz'@;
put 'Vk0hWyk7OGpVb2ZqXkRnNU8iZm1bck81Z1NsKm9taHxLdWEva1tJYjJ2aVcoRWssN1AsQ0VOOVtTUEVFNFBWclIpYyRbQkFtOjExel9uTUUoJlFiQmtFSXgpWlhBYUJOInU3SFswaSEzMWcrJnIqRjA4KzcxLExgJDU1Kk9zLnNkcHhdJCFGQFl6Y2tYKG8mdT43YEw6anRKJmJqTT9reyV5JlE9'@;
put 'O3JaeUJdRVhqX1tqaiMpWmEvTGpENTRjen11K0NEZEVOQyQ/cX5NYjBAPDFRRzxnUjh3WjMhLk9CX2AwYS9MX2NLWihtVCoyT2F3X2dTZ09NRXw/RzxOOlUxUzgxfDRnNW1MLHZ8REBkfjBtJDB7eF9vcnVpIjhudG4lPDgkTFBXTXY2c3NSTks3K2B5NkYrJHJpdElhQzsrdGBJLFkvTWxNX1dk'@;
put 'YX5iY0Z1aC80NV41I3I0XWhxT04hdUA7ITlmPzR8cVoqVGglYmpYPklCIkd9UWtoQkpYNU1SfGBadlgvWVprcyVkMnVPbVJGQHVOaSpTLG9MQ3E0OkJKRW4sRHBZLCRNNWMwZCZOO0w6aypKdE4/MU1EaTJDLiJRREhIa3RJeUNDJXtydSl7YHwhPzdsI10mRz9CclVjJT89RVtJVHVdVitpbilj'@;
put 'fEtPZy5zb3VfTDYsRENtUS45P0kseSVdUHwmUEhrNkZSOCMrcVkySTFBaXFwWUR+ay9YUmJybE07XXQ+W30pbzdQNFEuSmJJJjp8WGxKN3taaGI9azUvPjZIa3JoO1VlVSFNNUJya2xlfVg2PFRZazJIe3gvUDl0IyVae2dBYU9zZTM3elU4R1BYOW4rRnZqPz5NcGU4P11QMipJYlpELj9fTSxe'@;
put 'eFVuJik0fXFgTTkjSV9KIXRfe1AxeD59MH1LbVBEMFkzRzV8Yzk4N29qK0xvIzIhd0d9KGZMbEgwOCZpKmZKJGt7TGdCTEB5NUkiayhLP3swRmtXaXtESU5LYntZZiFGOTl6X29PLEAkSnU6VHR+WmxzbisrTXlxJCFUJWJMUmFMWzk0TltYRDczdz5UfEh8Lyw4VHwvKW57d2N9Qk0/O3szYDA3'@;
put 'QjFTIUg9cExFYkAkNiZyTXkoOH1ldXVKIV5OZyUwITcucV5wZERgPHFeTCkxaTVeYChwMzcrfSNXWmZoJXh8Wko9ZUhJOz5OWndEYl0iZU9XVkRvSWhjS3ZzXVhiQm9CdDxDZjBNMWtIQlREKyZYZjx7S1ZNZjA9XWUhMUJDTkErb29RVncuLlI7KS5YNFcoN19yLzYiKilVPjNGM1RfMDllQW91'@;
put 'TXtNRjtKclA3JXtyRipJdXhGamZ2RkBxZCVLRUEkS3B1aUsxISIpX18ofXgqLGdhPmEmXz42bXAsYSVuJW5PaTV2ZXJBRTslfF5DJjIzfHl0MTh0Tjh5RDdTL1h8aDl2Q1B2Mm5ZLCwrPmw/YDRILC9PO0wpc3ozWFk/PF1CKGdxNiJNQi52Njg9S1UuXStma2dkTVskLiYwVURaZUBscH5OYC5X'@;
put 'Ql8zN1Y2MzlTcDFyP2hiXko0UVFpNyVncU4vci53cDtQKyomOzdAaU9OeFV7JDc7IVk1XiFUfURxXTQmLnZnSVh4MzJGPzk+KH10KnxiWV5YazZncT8kdEYzVXlrJVRyJnhzZ1ExSkY5I3RWOGRYL2V3RjtkekRwTGY/alJyb0dbbz9vOSlfZH0wczNjLDttTDpoSUVAckxfSklQYTUoSkZKQy8s'@;
put 'aFJZRnJeNF12XTozYmN2MzxXfitUO35rMTl+VzxpJTVoW3EhQ2VeNEdOJS5UQD1xd2claTo6Sy4+Nz9qSy8/OWI6RmBoI0FLbUVLWGI4dWdVL3ZoMjZUaS5ZTm9dNFBoLkF+cV1CZHRrcCxPN212YjU6LlopOHtnLHR8Zk1QbDVlTX0xImI5JFIhdFVSO00jcjIlZV04fEBaJVZsYWskS1AuTS5H'@;
put 'XUMyW1RVT1tKM180UTh3O1ghPGtpbyRbeWBXS1lEZn1MTlVFYj1kai4kX2ZHSTB4Vi95THJudDZiZGlzeWBXbzx4Z3ApaHEzS0pVfHVTXWpdKERlNDh3ZH1vJFVYYnJuIyguMH1yL3xKJVBqfTNDKHlISmkrfik0I2J9ek58bXkvKyhFU2BmTE5LPjolO2UodHxCcz8iNEI8YSw5cEd0T2dxQihl'@;
put 'ViNid284YXJzeH05VjEofHFmWEMkaSluTFBvOlAsLEJ3clQlcTJTXVNNaGxoTTJpbz8yVjglSmxTUkVpSG4kSHJ8bFEzP14jUWlWWmdSQkB3R3tLPVBBb0s5LGVsbEJ5fnEjR1YobTBHUkJAVEY8bEJ5bUhxYF1uQV4+WzlPOlVBVXZHLEM/SGNRSHVMQ3swQ1Nwb3hJfldDPml1M2pudSgsbzNw'@;
put 'X0FeNCM9KS5gPGtzWSp1ZW1tJTJ7SmlhWEF1KV8yTE8+W0BIO1hXfUhMe3RdWXQlLmN1Zl5fOmg2ck9Ye0Fld1M7U1toUDlhaSRMRmQjYCJ5XjRvXnBbYmBKMHlLfTYvRCpuWl1iYDpofHl0d0N3bzkqTG5YfGl5MWxRUissXkB6bEVZZWF3amxyQGxDWiFSKmREPnQuRChCUDw+dHpdZGgrWiok'@;
put 'e2Nac1pFSzt0VUlHeDJBfSRrU1ZgcClzSUB5dTFTbz01JFl1OXVGKFIyMkVbYFgwIW8sLiZgUEtvZVQpQV10Ui5HfTVqJCxgKGBle0VtTXlZJUhaWF5nOkRgdzZReXZ9bzs1b0d5I0VTOGY4UG17RS9qOWk+Z2BdLDVgJGY8VWUrYWsvejt6WU15dk1YYiNjUmNLK2VycXgzW2UxNiJkfT4yK3s/'@;
put 'UHVwR2Jtd1t+XjNIOXA+QFs7SDE5Ml08NFdNQENiR1RnaThpKy9WZlhmaSN5RjVVNXM8V2whcDUkMztoZDY6SGxqSmtYK3Z9XmRga05CLFUoXzNXUyJnfV1SNTZ4Zk5Oc15lc0wkLmgsJE94Rzk5LDF1VWx1PyVgRi81WD4yd3V6VkVxUS8iU2Z7UXd9W2A6SUdYdG1sPTFsck0yfHFzVX0rdT50'@;
put 'flZpZSpFM0VzdTQkX1Z8VlBnPUZLZV52eUQ1QjdDVSwsaERMbFExdTxINiFPXmY8PT4idGR9Wyp9LHQha3gqTE4lQ1l3eURMNUxSTVJWPEZBaU8+Ilc/VDF2U1t5RkZIO3REdih2algmRkZRckhzP3M/ayksaFBac0VLSW0wQWZ3eUpaRENNTTNyYn1le3NjInQye18sL2p2OVFeXzkmWVk0U1g0'@;
put 'Yi95NDRqZDlCUGN6Kit2Nl11ezVOYDlHVHZIVVpZbj5LTChUIXNfTVBvNEpWJihsQnJNVnY0OkpvOSlRT1pGfUVjRTl0RFJORlI7ekg3ZCpHcTljbW0jelpXTlQ8MkV1aHBKayU8dWsvTm9pXmZTVUFXQklkVVFBRVVMcFZ8KDE5OEJ+ZGFwOC9fbXApN2Y5SCQxOlliaXFVcSopRyYpYk5XU15d'@;
put 'b1Z5aD5reXt3SXtDcUZsVWhzbU9iTWtzQURHbFpRSTZYNk8qPUh4NCVyMUV6eyYhdCZIUl8wSSZ6OmtNcWBqLkdMKCglYn06P1B8JmcmJGtTYFVYTHVbUjhrPDYvQ0RsbyZlZShWN2N4N0VsdnQwalAjQHN2cmI1QDoifT1+PX42Q1FiLENRJVhoaCFYaFMzK212Jis3UixEe2dDfXwwWUY6KDdg'@;
put 'TFJEeWZzKSt5ZmE9eEhUQkZnc1B4d0dYQlpJbVtpR1hCUlEidW0jLkw1cVlPVUxiNUZkTDZgZjF0YzAzRmlIRV1+NjtbNTpyVmhsPDZXTSVuYlN5WUtvbzd6RF82IzVkN15BV0JXQmYydTBqVl5CXXkiX0RHTXUpTH1PcEJpMW9He1I+TzxrZHNtT2NNUlZZUWRsaUxTMlVVS0cyOk5IZCM+Q05w'@;
put 'KW4pbitLNGtpRmFdcz9zPyI6TV5rPV10JnRgdklsbzRWWFYvTV5rPThMYXRRL3smMlMuUmU6UWhtb1gyTUhCa3cxbDJQLkBrUGRASn1FPD9PMSVNXUN9REJOUlZ7MnBvKFljc0dMM3o9bVd8dUt5VndOdl4od2tyZTY2RmYvVW1SQXM/UHlHdSsvNSZ5O2JJT1JSczplNWN8MTdQKkNaWmQ3SU1o'@;
put 'ais5dHJoS2xvRCR2LEV7KGZdW2c+Zyk+bV5Fc2M0NlghOHpYZCtUdiU0Jm9Ca0wsL0QmOWxbQmNDJXQxOztzO2BwKGNAfSZNcTs8LENebD5JSCZUXSJxbF5jZytdL2FVe3FrQGZhL3JIIWUvZSNFP3A9ZT5SIWI9UDU7bSh2YE9yNX1vJmZhYlgjVWU6UVNBXjA7ZD5ybEpxJD9qUCsycT5ZOl1Y'@;
put 'cjB3Tlkue106Q1kqdH1CXm85dTdoUXArYy8yKkxhdml2S2BtJX1VRHdlJGdnKTA5SEgwQlFuZTpRaHFsZE9ZOlFoRGgwXSZ8UWgkS21LeXNhTjNQc3o7OUtsZm5qTSY4JXJAVWJSKSFIfEBkP318OG41KiVPcUdjeklJYlRTOWM6SylFRzwza0BebShKWzopM2N9cV9seVpbKTtWNXA5JiRuakxg'@;
put 'cVAxXzNAT0Z8THV5ZGI9YHpUfiJWQSl5Y1VSOGg5SlVTe0wyYn0qI1FkSVhDS2BkZi5iXVs8YUJmRjIyaTcvXy9FNUJ+ZkNod3Y7eVJeeXxST35wJTNNQVc1cFVdNHY8Il1vJDtfMzg+KkxaVkdYLHJbZTVmb0x+JXomcDojTSFIVTRRSXR2W08uJCY/bEVTZkRvSVhOfih4P29AQy5lXmdsaUFh'@;
put 'KiZeQDo0aWhJbSlhNDg/QjwsVFNpbV5AZ1l+eV9pTEJzMWw2KSF8V19lZDZDWXJMWl15TCo5PixGOmtjSGsib0xneTZUMnIkbDVRVGk2eFBHYTNZUVQkY3EyejJlaVZrTExoRV5jWjB+KT5CP1VsSClMP3R0SmF3TzRtc1osSVhCOXl+Mj5YMEYlI0hLOih8OndKaVh5aHVYcmFrT1VxYEdESyw+'@;
put 'VSRvR2RfdUM4ezo7LiVfPFsmU0N3XjxVdm9CIlR8MXM/RW9jN30+b29LYGBKQmA0NHYmcmQ0SG5QKHkuQjVnWGFfKVplS3MuRkE+XkZ4JDFJb3lDbFNxTDJFWyhFL084NEtxPDVXSCxJTTpiOzY3b0dhZlgrOyZbRHRNSHVNfUUsaVZRP0U1UXtVWXg9V3JiNWxIKUxyWnlYNitQWE5EdzkuXylv'@;
put 'S2AxTGRWMkQ5dlJEezIvc2o+RzVjVH45NSY0ZDZ3Tkh+UlNdQTVsZzAuMC83YjdjWlZednZqUnw/PWthXyVsbHs+TW4lLDpaUmglfjR8cmtuM15Mdmd6aSN4WFRDKEEpTy4jbih+RGIvOHIpKmZ6UGB1RHtCNGNWdVJvYW5vKyhmU3AzUXY1L1hLaitBSjMjTUk7M2k5RkxrUHNZTXBJXlJKcGh8'@;
put 'VlJvZ3ViemNbIXhWKURYM0guO1FOeSZGcmwpYCg6elE9U1ZSSCVxTVlYR1pGR2ZaX1RNbiMjSGU1W3lmWUtgbjcuZX13az4xYFJRV2oqLG1lUTJdeWteXk46Vi9AJXxjUVspRS4jK0NLNj5GW2NRMix5cUtHPjVLeyxCZnUlcDtTVi8oPUFtPSwkL219YHR+TkhKaSszZ2B6b3VwSDBRVV1Ec3px'@;
put 'YkomSj9DSUhfK2dlRypeWm5vTm9FYkU2NDUlTmVOODElN2F4aUN2ezwhQy84JSpGWDU/NCZDNUFmezBEMVNwdU1hIXBqI1slMiVxbGQ3TyE6Olc2YS92ZlpjTl9CaytzeGZpaXgkRihXJCgleGpdd2BXai8pRSkkMUVJcF1VJndxNEM9d3Z3WF5gZjF6LE0zIW9MUnJVe0Q4YDZJQ2RLYG43e3Y9'@;
put 'XSZ0dWxqT3R5TnJSRXc1fjhGaDFCdDBuWzlGfWRLVTtSM2VAaFN9WVpYMEF2Ij0pO31hKn1bJTJOSFJBN3IpfjErYSg7TDszY1heUD0mPF9Ed0Z8YHokPVlsNUhlME96IiVmWDUkIWs1VFNPKEBKUjZjNXJmLylFQXFYayV4fmpiKEMuU2lOWDNXKygkMyE2JGs8RypwcGEocThpfVQ8TjpYKG9J'@;
put 'VTQ7Qj03PXJNd0xINUxzcG5PKGE9UH54WnA2UmU6WWEzKy9WcWN6KnpEPy8sNFUyJE5dZU5geHI/L1ZRPCkmKHQxTi5LOkxeTHRkYSsuTU0oIVoqV3tdXXdsQ1laKWh8LHM5d1dhOlE0MmAuSk1UKC9XSix6di5maVUiaEkrOVt3PnZCWixYYkk4WVJAaSExW0xkWiNpWjttdjVpVzQ1OHg9bUg2'@;
put 'NWR5ayoheUdVZUg5cWdEO2JRb3l1OyNLXnJgVm95dVUpTmJteCZBQlRjUElpM2hIPkdUTzNaV0lwRjg0ZUZSZk1VQGFYdW9TR2smWm9xdTpSZWIrfHc2JVEyWTd4NkhjNTMyIjcuJmZHezM0bWIkZllkM1VoWTo4a0lfdHhsUmRFUEp4fVRgVmllOiZyYiQxLmsqI1Y6Iz4+QmVEdjljeD0oTTFd'@;
put 'Mj97PC9FNiMpdERSYnVFZjd5OUhuN2EjaCZlLnFnLmNTPX1hSnJQPUArWFlUNjtUSmk6Uk1memVhIVtIL0lIZnwsTjw2Nmg7em15TXBrUjhIVDk3SVdbXl09Qy5LOHJ+JjpxajImNHVXWE45SmlKTERfNWpAaG1DfF1WYEYjemptUk4mQGltaUAwY3JYdmxJW2s+QyFaWlZwUXJwSjkwS3NlOTUz'@;
put 'RnZsXztMYDxAekw4fVk7QktzeHlrOD40PX5lM3lFfTYqJjs6KVdYOWhqVyMjfD53cX1jK1VGXiw1VE5yOmhqUCZWVkZzcClnNVVgNEdqK3x5U31TN0hNSFlmPF8kfEhgWzhrWzsxUVJMLjVzUlhna2hHPjVeQCxRYSEhb0Bbc0lBRn0yTX1IdWRhelEhRnxVOyJLKUt6ckFwezNreyk1TihhOzF+'@;
put 'XzhFdj5ScjNleE9vTm1Wd1MjKXR+SVBlLC4/UyhYdHg8clByWEUvazMzYS9uUWokNmdUKWdhJCUzKnE+T0U6VTMlRFZJcFZne0w3Pkxgcz1VMSVjW2Y3eUBlM3lrKGlqPFZBWFtOLkVBK1t5SlVkOD18R3ZKTSZfTTJRUXgxUVckaXM7JUcrWmlEPW10MT1+PyExX15rKWdCeHBgd1hpYn5vUV1W'@;
put 'b2svay8pMEddMUkhWWI4ZUkmISUxNlYwZHJ5SVhoKVEwWnBCYitTWCRbRjVja3F9JCZ4bHM7YSZlWzc7UD1oYmYiQ0xFM09yRGF0USIkQVtYQTw2LHB9czB8REB6UkVpZFBLcmJnVUdNYE05ZU07OjxMczhvQSVMTkUoKDgvX0IkPVZ4eXUxLkx5THMlW1thb0N0KENAbmMkSUdAITAmcXxQP1dn'@;
put 'd3wmJT0laztycDEjIndMQGNFXk4/Q08/MzRrKHFRR0dJdXZMPC5yL1NAT1F3UE5EIzElXXw9RFZLM0oyRkNHaE96VFNicHBte2lDVC9NWEd2bUpRS151fkVhdzI9NyM2UWhgKiIrSVhZXW9vPStSOmxmZylLaWQoWFhze0osVmlxYT8obV5iY01RRSYuXzNNWSlpZiYiQjV8YmVwSVRPMF4zPGkz'@;
put 'UzVyQWViVWtfPiw7KVYoYFdzQzlhN19bI1pCMSgsJCFBbUxPc1U3UVFlX2xDRWE2Q1NBe0p4Tm5YSCFOdXlkeVNdPzl5Z2FNTVdhRGE8LFU/Xz0vMCY0dFlmSl8jRXoiPFhoZzQ3NFtzbTpxKVd6ST8uLDdTM0hfez8vMTc0Ym43ZGZOZSJlNmR1QnhxK1tMOSFOfG14Y0J3Y3lyZVZlVVR5KjI3'@;
put 'aDBzRyh1YjJDUTRnbk5uUEtxeWJ3IVJyb08iNlFGP3BhJCFlaVhgQFRVPzllRV97QFdvLCVqTn1ifjxfTC4janxSPn5aemxiWkkiYFhhMVE2NlRpIjdtPFgqbTxtJnVEM0tDZFpwRntUNGU3RmU8aUdeUnk2JTxZVzEybDM9QWg2LCohaXJPfTJ8Sys/P3B7KDtaZSp1JnFnbmkrfnImJWtQeCM3'@;
put 'UmlhPSJabH5HYncpOHB2IXRiSCo3Ny5iSXYzP2VHPWgyKm1sciQrdEo7ejw7THE0Zj4iayU7cT9JdTo7eEMhOlYxKVsqRT85aXkyWUM2XyJkfVNMajt5XXlDMngvV0M8Y1llSCtNPygqREhnK0BJTXVAdGRNei5kNTpWJnRMeSJIakpjbHpKZFc4RXlzJHoyaUIkdlNtYVsrI2xKPC9QbDhwUEo8'@;
put 'L1BVI0drTzgjRVFRTjpsQFBtTm1AZUZ9ZnBjKD0lUEwse3U2MCo/VWg5Kno6Z1lmWmNrKE1HUWcqamgkW3gjRlYvX15eQFk2UnNATFk7W3FpNUxlYChRZUE7MzpebXplUSEpN2E4UnJxfFBxdyV2SmRXfFBWekU3a2loQ1NnIU0iL19eZ35oUCJfXSl9cGY+UXRbISs9Nls2Wk5OZ3NkXW0qYWkz'@;
put 'YVZyVX5lOmBeUDhIeEgpJno9WSY/fWVGOVtXRGglSD04bT5ONkc6cFNqZHZYO2Nrc2FYbS9UTjFxM300MURrVHhjb2dTXkxvOFl7Nz4hWEM0KiNnTVtxVmhaK0VdS24sczJseDYpUiJDWno6NGFTVzZbTy9MdTsmcls9RDwzcTJIRSVfKENVRyVwN1krQj1OaHZTM293UU9mNSl8ZDx3cHAkJWIm'@;
put 'UjFJcj1FPHxzazhgbT5BUStsUj5JZ0QzSypHajhXV11iZn5dN2U7N01lWykuIkFCPGtwbVQ3bj52VHdleTg4bV8+NmtUT11vciNzcDYxfjh6WyZ4Y2UyQl1zKVVaezJ+QyZSTU9aNjY1Tio0NlF5d2djdyVKaF4vSXNKaUhtaVNvPlp0dnE7aFklRl18SlYvZ1lQP2pwfURWWHxEQCFDZTgkdVJH'@;
put 'Y0lIMHdTfEQ7WSs6Zk9yKGpOb3dpcV5IVUY3VVMzazlaVUAwImBJWkMkVyFjUURpUEU4Uih9LFdXTn1Bdl4zPkYpdyVpJjhyPW09PWRHZU99T2ZiZW85LCRwd2ouMThhVXluOGBvbTQ4WTEzYU9IazF1SDhmMWYvKWs4bHZGa2BIM0g9aTNIb2Z0OzFIM2NnLjwsJWo/IXcwYlU9c1BARip3aGpX'@;
put 'ITE+JlVWNVFWY2I+MGJaYSRrdWh9Kld5bXVXeUhecSR7V18wUXpSR0ZwZS9BOGprL3dPb1hHUCtmN3lzNCpJRHglekYvZyxLT1thdU8zfXdhemtlY353ei5XU25APFhmXTwhZTRuOGA1SENlWzxreVdKYitCTGw4N0h4JDtxKipaSnlbcXhmTnxIZ3s/bjpsdDFdeEdyL0p3N2grT2Y1YnBdSmA1'@;
put 'Ki5sZjQ4aFkudzttK0QpcWt6aWJzLyRhZkJmZmo0eFpqbUo4ZUY9PmAybzhVeyZVIj1gZj1eUUxrPUI3dGNxQEBueD00WkNxdF5AZUkxMUN0I1Y8dDJ0bGY7LHZUVTA8ZD4rO2lUQVUwMSxxRnpNcnVnUyJlYSNnPyV3T21tODlEaWU6RzImZCo5KmJSbkxgaHp3Pj1TUnFCQDs1VWVIUUQ1OXBA'@;
put 'KjR6O1ZtXllxXSY1emVXYW9lKTFRW1VtbDZLPGJMTkttWSR2RyZ2SF9ZfC5iMCxpXm84Yjd4Sl5LKihuN34pKXoyR3xFcWshRnY/T2E+bCZjQ05+OWF3PyNKcil3fXZfJEtoMVckZEpQT1VvdCRnNUN2KCZ5c3JFSFJaTDlXT0VFXXYuTF9pSkRxZ1pyN0p3UD5eS2xOa1taRDAjb2cuS3hRcnVZ'@;
put 'XmNobWBdVkopMytFajRfUzUpODZARlIoNEEoZF5uUXdkfjwkPTw4YHoxe3Y4bks+cHhwKEokXUVSKSYpZ1VxMXFNXiF4JjUqa3xiOzM1blt5LnI0RzV8eH1efXEmcFZNfEptfEZSKEN6XTszNz9yaDYuNUxqUU8uLjZDYWdNQ2QjU0A5e3wuVFdqLmApUnZbcDtAblRQMSVHMl9mQTZNczgrP14q'@;
put 'ZStmc0RuMyhLJTdKWyVfWUUleVd8RmMhQloxQG1NdDZfN2JFZDBDLix6QUEwKVNBS0NeSmVjaSFzKVArPTE/Xkl0RSIkTXtIKiM9NUB2LkxTanx2dEJBQUFBQUFBQUFBTWN+YUVnWy8lZ2lXQkpHeSYmakZYLltkJmpbSX1vcDNgUmxaR2tkY248Ylh4Ri9IWllna2tHSCxBMExjVDM9LDdefnF3'@;
put 'O2pVLFl0Xi5EZyFPPFh4OXBBdDQ5VjY/dkdpeChYWXVeQSlUNFFRNTtTKFVoPEo0bmtiNU5ZNVlDRkwqJSR4Omp+aThPNHNoRVJtPUxNZV5idX1ZZWk1ZmJ7aXQmXnh1X3olQmJGMSJBKn0kMyVSLzhxYT0qeC9yKDUjbDN8QCh+VCNZZXp5XlQob0p6RylIU0pRR2RYRWhZaT8lViIsU3ptXzh5'@;
put 'ODw5b0VQZDxQIyZBJlJgd0UvJGxpLyt+aHhWVl0xUn12KG0sdU1pZWk3VSZqUEsmRGlCQG4/aTxlNTBgM3BrIks8LDc/QUloNys9ayJEfUQuSXolcT0wM2txUEFfISlJYEFFVkwvXk5NZC9dNkhleE1Fcm9DSEV2VnRedmM5XyhIKj0oRXNtOilSJEo5UD1ITFRbfV0vaGw1R0pjVl85KXg+cChD'@;
put 'JFs7YEJxLGt5P2ZBcTIxJlI2dCxNPiM5RCFyfVUvV3whLFVvSXIpfUN3VV8oIXZAKVkjJGZTVHZuVlYmNH0+I0grblcrNHU9LiFpXkxOR0IyQWxYak1ESFd6dnR0VSJ7SHxwOnNEXTgjeiRUXjZeRDJidE1KWUJifDhZSVkjbnVsYGVIZzwkXmo9YTV2NCtQX3ojMiw8L3k0fVFzbkh8VmdyPHhC'@;
put 'R0t1RyU+Mit5WEFgc3NAPiJkJVpvP1JaV3I8Qzxwd1hWNXBaa3NCUld1fjFXSnVxLipeLiFQYSlNPmxUNnNHPC5tTmNUZCZJZmY5czd+S31aZWU0a350VmxCKkJdQkYzcHZQRiRWejcjXzU0ZUQ6MTJUdDRIWENnaV5YUHdacDZPJlVgRFt7TkgpQCZCZXtiXUVBZyUpdVFkOD81ZTQ4QHxHLz5W'@;
put 'O1hCW3QxbXlZI1MhcUFHZDY2fSR1anM3PmNIcUM2KX0keDt8ISgrVz1SdE4le2tgXkksPEZhdUQxRUQjNSomIUYxL3V9M3ooLCZ4W0pXenpFN3M6TktOJVV+citXeV4kSjNeYmIieG9aZHFfQzAqT0o9NmdyJkwvVFUxdFB7di5VKC4qelg5c0YvdDkhZlFwV3lFKSQ7JjVYPmt7UGpxdDxfPCR0'@;
put 'Yy49fEBMZTVdP2thdTNlZyIkdlhTY0wwU1koVF1KOiZDUGRMdTxtYnRnJXR4RypkT151KC5ec3Q3V1VPP0I9TFJsaDcwbjY2bXNORXdVZj1ZWldCVD8zL1QiLykyRSFvdTNkeyJGMmpraHFqe188an1+YCtXaXN6fl9Vc2VjTyk3YltTIkVLMkZ0X0grUmZIfSxVOiNeSkpmYmBUIUJRUnhzdzNW'@;
put 'Un1acXQ7OGZSdmxFNTVdVWI4WSh1d1UsSnwwTyYyOzlbbjVMKFlzMkkjVSF+VDkxRStoUEpuSTVEOnZlYXQsfForNkp0PXpATVl3QkVnanYyfGgmc0Y6VlBJfH5lI0lbLFNafjo9eWR0ek8kVkNQNk9RY3xPSz5rezt8cElLc1lsc3xfb3s6X0crZmFSd0AjKUg+YCk9O2llfipDSkJ3Pk9rXkN1'@;
put 'SCgwUkp6WDJ+YEgwOmVHUiIwJVBRMyshTH0/UXQ7TiZSeGJJQmBmdjwpPjs3UnhXTlk+IVMsSDVFJXRwRGo3Y1hQaCJXNSEiP01Md3IqWUVIdDZ0NXRRdlIoNTljeFtLPjpuISZxKDdoNU9sdWBxUzFabGwpQ1BiMkdXeDVnQF1DSUlGXzJnVENUM21RQjpiUjUuI0M/Ql87R0JTfUxHTDl8UD18'@;
put 'eWgmMEJyfCVVY0U9aGM0QjFBRUdLNldjUkZ4W0gxcittPDViS2pTbFJ9JjpRVmtpS2h+ZzYmZElPKyRucGFsa1JhKUE4SVhwMih5X2VAMExpMlovflcoeSYxVSIkX0Voelg+Nkk0Q3lRRz5YLnN0KERbe3RKeCpCYSpqbShuK0k/UGZqTFgudjNPPWlsNGFEdlJbKkpqMUdUaihKakBTbDpxVkN7'@;
put 'bmBRdndOaHQqZm05WiU+KF5PcD5CZi9+PDJBOFpAdzB6dS9OZXxYcEEycnRXdyU3ZjBxPUYqN3x1KHspcGxPd3Y8fC9pYnRJIlp2QEBqa2VgNFtoSyZ4RzRlU0dYaThWcHdKRjF1O0xGVEtabmNQakdkTis+anJYLHRtblBddipOMH18K1laSG4/a0UmPlh9ak9KNnI1LD96fVBCXkUsNFFmQVBk'@;
put 'a3ZhWVJERyhfTmRMTnxlN2BDPX1damFdaSE7fHh1RDxnTmgyWig8RyRMOW0hdDdFUixRRVJUYkkxUTYkXlhHYz9bYTgqNlchajduNjc2TVV6a2J8dVNsWSMkbFlrbzg3KGlJfnsrcHg4Rio4SW9TYl8qRm44PVE/NUleX3E7IVY4MUgoOXByd3Uiak5Bcio5I2ZFaV9yd0Mzey9IW3dwY0B1cFY2'@;
put 'fV4reTg3ZzBEfmV4RDd7eDp7JVp2MWw0XXFeYm5qV11XXy5rKUJ0a3tEKFM8KWlCXSJWYVQwTU9UaHc6Z1QmNU02V2hIJUxxa0JJWWU4NT9fUjNOQ3lYdTJjczxQYSVNPU9pT1ZpPmg/MCFLTUYjNjs8cFBMTGU7OCZxP31geiZQR312fUs1T1trMWhJUStkM014eUQhaVthJnpALEQxJmRTInlC'@;
put 'MzJ3JUs4aTYpNkVzZD5+UjEwfF1EJXRbdlRlM3JzMSs1W1NrSHY3O2grNX4/Vms4IkxHYlUyJEo3ZHw5eXo2IVg2TkZUNkB2QWQ1bltUP3IxQ2JNc3lQK3xYI2BISUtsWVdMOGFAelo9O0ptZn1DJVZAV1Z+Lmdxbl9zbUcwSS96Vk8vVntDOy5IQ3N7e2JSNU43TyZsTnhqYWl+eDAlMXFJZnJV'@;
put 'Mzh9KygrWiF7Mj49UCNQeylxIkkjODUsQS9+bUhdKVclKkJuYmlDQ101dCtCanpUKTtIRjtQdklKeFRfLDZaTjRITTwwIWdCQksyQTIoakZUNm5WU1I2eX1HITo3QiloTXU/LCklUzUqe2tOSD0rSCZtVU9qUmRoMltdayhgNklhP1plLDtZZVVMU14kPn5WbDBkLDhLb1RCR1g4ZldHJXQ/S1Mm'@;
put 'cEw4K1MwOnlLKk97aDZCbFBQJU93fm8wPUZVdUt6LilJS2BxbGQkQ2U0QHQpTE1zejVATEdVYUZQWjM5MDtaQUkzYkdmV1EzYiYyP0dZa1plKEJaR08rZUYwQmhPTG1FS0NdbUlhTnpKaWlgcWg6OkVyTiIkR3J9YUgqVVpPTEByT0NOaW9ZbShfVG5MejUmWz1qI2g0JDtvLyY1ZjRvRG01Jkgs'@;
put 'S30zMTNETkBbfHp7XjhqOlFxajBALn16dTkhczhQMTp1LEFbUnx1N3oxTH5bOFF1VnNLJFtqW258Z3g5TXspMVBpNkFqcGVgOXAyTmpafTo0U1tkMU1HIUc/cXlObkxRTylPb311UTI/X3Mxbj9WOChzXSFNI25pVyFSaThzS2hpU31uVCxSIVpFQiFNeS9YcHY4aHZYPmhUQyg0VGRjMDR6e2Qw'@;
put 'PDVFQ2Rxek5aZHRFVGgjZ1UjZGd4TCNmZXssNWBfW21SenswYSpqPjQrQEFZXW09SixEezEoVy9sanpSRHIkXV9mL2NtODNKXjJCWUpsTzhhY01ELzRLZExueyxvJVtydlVrPipFYipmW1d9P1RmaGE7e0Q8bSVQdll3QDN0KmUyOnFWbjg9X2thbzA1Kkx0RkVOd0d0XUhZIjZRNVRKbVQrd2pF'@;
put 'Xk1VRTsuPUtzUT9tRG4/I2tMMD4qdTE0cEdBR3FdKCxVMjZFYytbYDZ0W0IkM0VmV3RAeDtga0RLSH0+P0d+KzJMRygjWVB8YGBVRl01dFo/eFtuMytaYU5HYmVHPWlfKjM5elZBQHVDdG9DWSM+dUNGez5GWFtePkp8ZSZjMjV1cUIwS0pOSEZnKW45M2dETjAkZHklYDtObyNDe1pDXTRIZF5N'@;
put 'R1p6d2xbakkjRFAlbWZdS0cmRjQmeXU2OmkkLEVUOEtoKkY7UmBqPDxkNS5eVXdVKzl2enJOJUVXNUZCX0RCVWIrdj1UeyQ9MzswWU9VLFlaOlVVIjYvUzlUUnMpQSRtM1NddVFITmlod1FCTy57JTpvbWNzV3JrSFtMWjA8STpSMTl4V107QXRNMixEPTpgVDdIfWt0YDYveXAlNXFKT29ZQUou'@;
put 'OSo1anEvdW8jNlIrNWs/Ti9wa2VWISRQVD4lOVE+OSM5bzcpTHhdWUU3QHZfVUdKbnYxTnRlb3A0PFYjdHshUn43dlp4QmRSYkNeRUlGb3dnbXx5MEMybl8jaVR2Iz5lRlkwMUJ0fmpGamQ5QCsvMVhCXSwvMyVVN05bbzRkTmhaJCZJV0BEVXlhJClJPE1TXnFKemtSXjlzb0srRTlMVFprSHpF'@;
put 'WzhAcW5eVGkzSXVjYzN2WXRQZ2xmYylNNSN1UnR6PnFbYCkjU0o8T0VMJWNfVHxAJUpjTEA1XXxEWGZALFd0dU1jO196Xk1vRGlaJlE3OmFYMFNZYCI1P10ifUNBcXF8SWxFOmMub3l4a3MxUGB2c3ZscC9tQnhxQUd4VTtNaVFzeElZXVkzZWE2bTNIST1ZO0psI0U1UGdKbE8vX2RLOGVMd11T'@;
put 'Njo9ezh1NGt8N34zKU5AT2xkKlhMRz1SMz9APExleXokRTF3KCpFa25MJWZzbCkqfnkkRUlhSHcuO0c2dW06bXFfVkRLXktIPms8eHEyZGhqImAlI3Z5UFJkczM+MWg7d1BWamhwKE9gKiY+KFpnODs9JXttXUR2KTExS2djYlpbdTR5ZkJ1WUwrOjsxaElMT05VTz8oKGVCJEgheCYuYHBoeiZk'@;
put 'KnlxOHY/T3VzajRTPiJPPShaXlJdV1A2YjB2QDtQayxzJEhpYUFvfEh2SDtoX2tWRjJjUS9oPDMsJVM4Tk52QXFfQiUyY1lWQExhOHR4cVNYe3tNWVNAZnlyJWVMTzNAdW9sWmprOHU3PVhBL082PGZQQFRfVEJGTW9uNUs6Kzt2Y35zRkAlYj9FN0FrWHB+eWRBSSheSil9Ty4uazZePUJjMGo2'@;
put 'R3ZhUFk/TnwzfCFbMHEvUS9pVW9ANlcjJmpGQXlqd1Z6SXZEI3FUXlhqeD5sbXxuIz5iQFduaV9AIWl+PUI2Qkh5YlRlQkdSdUopPEx2ImJeWGY+UiRzd2cyc0lYTTdiQi9MIW5oOnx8JVhDaUcxL0NXWT0kQnJVQm5bLFlFfiN5VywsVlcvTylsL0xNcGRlSksrUn1ZZTpINCxVI3ZtPHhjbWVt'@;
put 'RDA3Z3VqdHdUOnFuPyVDUzY4RDA1OW1EKzIpZixaNCNCQGwwV200SXBrQkNsLGk+Z1J+T3AiYVoiWn5rd0psIUx6USUhP19FMEBwb3V0NyMhS2ZBJltdJSQ9YWtJVXVsajZ+ZXNNem02eSFKdTAucXEkaEdrXnRYLD9hYDpddVNgIT5iMEJfNV48MCFLI1c0KXFsITYkeVZTIUhkLmNNPCZAZiNY'@;
put 'Zj96KDRDWkFuQl8rUCU3Jl1jQH1YT2tAS3deQlVAJUtQWlZkST4jQyFjRyFibXhDYjQvVHU7Oykyd29bfTV+TGRhaSgoMnBZYW1MSno+I2tnV1ZLYztMRTlwaCkxcSQzVW9jTzZYP0dKWTM1PjkwUnsmfW8oSDVmQEttcTxpei9obmhvdGFPfTluKyVnMCh0YnBjNnBFI3ZROkV+Y3VEOTtsOUdB'@;
put 'TjQxQCpERUVKaHR4Wm0lRjBJOTxxVjgyTHBBQWx2dlJJMGFeOUUzPmUrI2xafF5aakhId3IvWWV0TyQmOSRKXWEwOXJeaEtkIyReIjcqVXl5a2J5ejEje0hRcCVWS1Ixd0w/bmh7Qn1NUVZ8QFpofV9BenVXWDsjSWg+d0B3MjBpQzcmQkBHeHp9aG52dlNaOXxbZUZyWGxudjI1I2Z9Z008UGNb'@;
put 'TiRlUiMlOUlSXyVrNjAkVDZWQ0s1OFgzTSQ/I1VzM0FhWXF4bHgvS1BeKyZMIjBlODNZNmltPzVoOHBDbVVzbGZERGp7R05WTnExTElOTnZ8TWsjZm5jUTNgcnk5O1JeSWZiYXNEL3F2e3tabnsuZlFvUC9FWk8uJkYyNm8qS2Q6ImIzaXB9MD14eyklNT1ZeyR6ZD5bI20zX2VUQ3coXkFSIjAj'@;
put 'X0M2KlFAPUhaNC5YYlleWkwjaz0laGVRRlBIYSY1dlRObFVHVTJXJkYzU0VmY09QUlglfGo+RFRZLCElaUVyI3tiYDg1JkxxUHRzKkcmKFdZcTVyMkZdaXlWVUhnJl5Sa0kiMjRtbkpTSGo/U0ZraUAoKCt1MEhiYUYvdHVDa1MlaClCb1A9SnJMJDF+fnlrPGUjWmted3MrTWN3azElcnNUJEtk'@;
put 'LEFTbTBeSHIqeXElI1kreDN+RSZIN3wyfWdJITFMUnBDen1DUXsqIkZ2Z11pV2J5IUh2bDZPIikoSzE5KTl8K2JmSXlsZjdoS1RvSXZfKExgZEtPPzRYSS9VWT15VCwuRjpGT1deUmdGQnJ7O2BHdjx5dXlQWTlVTFosfWUlQDBjc2pCaWs3azBTUTF1MHpqOnlZUXRhYDh3eFpOVFtLLjFUbE1Z'@;
put 'T3VrZl9YO0w3TTB4Ll5OfG4hby9PO3dmSUYqfH5PaXZeSVlmLyFyU0o4clQ7WXI6RXtgTFoyNWtnPj1VYTo/enRsIUpKOkF0WV5nPkk4eSZxMj0xXkkxK0QiJV1dal9bdkZDdlM7eHd9U15bKjw0ZWJ+JVtEUltKWDpgUnx0STlDQzxAMiIqRUgoSCspUjlxXVQ3U3dwZHAweiQjNm5CcV1GaX1m'@;
put 'aGslM0tzP019e2ppMV08UjhocXprXjhfSzNIS258KzxoezRibGh1IWFUPHNbK1UhJUMmJitKbCxALCRCQT1SMnwvYjVRaHoiKTl0SEdvIn4vRE9nUThqNmAoZS4kOFldUXc8T1BWc3gjZF8zaXlCSEJiMDd5cjQ2SX1KPDY+dnZjZEU/Un0rZzlGfDJNfDgpQlJrS2RLZGRdRjxQPj92K2p7S3Uq'@;
put 'JFl3em5KTS8jdkdRNFYsOTpnd2pPM2xbMmImNUVkKkJJKWdlQlJzMjgzOjpfR0JkPzA0OHZwVXsjIj4zYD1Vaz9bMVN0PzM0TGBAXTk7XmZ5YjJ3aCNuV0I0MSpJNi44dHRAIWYob2l6TyJZUX5EIWYoS19wczZIc0duVzE1QnBbPVBNU1MpTXhdIW8yOn1aaGd8Y0Q1WTlRI0tveUB3VHBqV01M'@;
put 'VmUscmZtZUVgQlZ+U1R6YFVFWD5iZT8kNFtzSHNiaVU2NGR1UUQvYV5BW29rRCtwVX4hYC8mdldYTmVyZW9Fd0F7VUJLZEJtI2AieTo6c3hvSVlFXzswaHBBS2N8STZpJVU2aVVJO2pBeD9FKjpkUmxnZiQyaUVAeVJwN0VHfXNxP1Y1ZCFZYVNuY0g9KE92fXkxWF90a152JlA5Z1ZuZlBRPExQ'@;
put 'JipYL1U6JWlZYlo/Zn16e187azIjI2RhbF4vczYoUn0wK2Fwe003K3d4RnhyajQvKjpQaGJtIU1mZlJmfil5SToyUnQkbEhCWn5kcSM+bHRMLilFO2xEQUw+NDZWY1UsPlcjYz1kJmZFTihRdUdCeFRCJXgjRS9wdjVbQV9dY0NEaHZrZnhmNVJfOm1MSTtjMioqK2FHWWlTUypwWDc8bjpnT3lI'@;
put 'VkFxXiFPZW8ke0FRMWFgM01zaDpxUU1ldD55a2EyRzlUKjFkSXRCYW1dSTFyRFZqOSgre0lvVT5KZ1V3T0EjOCgjbWY1KCU8R3pzYHtsYXxoZX5jdHRUWTpuJjUzaGZkazNdOTBrQSlzcGx9IywqNFEvWzsofTBMPXIzNEtjZU1dWV1adnVWMlR6dH5SLDlDYiNNWFtTdTEqXU9QTngxOV1vaFps'@;
put 'QUddJV8veT5zUm04dV9wQT5XYSUwInBbPUdpT0xHYVlvdSZkXzFwOVtNKEwpeGE6LFciPngqUj1hVHtTe3MiUmZYKXFlMnBGdkE1M1klclIkMnVWW2toOVBnWnFVQFliIWpqak02X1hxSjUwKUtwTHlecFcpekM4M30vLmxtVFYlNyssX21mLDp8LEZEaDBLSFhLQjU8RjFMW19uak9jVTxMeDRl'@;
put 'OyxhOnI/QjIlRFZRW1ViVn50fkFbNlhfK2soa1kyOSQ4TWU7MmF7My49TEduTVVmPDFqcXFnYSg3dHxnPlhiKi5dT2RxQV8hSD1sQnk2VD0xZWpvN090WmN4TTVkVUVJPT1oXlRLJXB4YS5RZFE4KCI+bXRKUGdWYl43blh5PmBtKm1KX3UkbXdIJU1LRGt+JmJZUVc4JnBJWmY2Q0MqazEjai88'@;
put 'PT1sRlpLJD8sWCRjLm1aLGJXJFZnZk9bO2FCbWtkMTVsXzhuOjkoWyRwQi93RlJrLFpLZlt6ejhOPkJhMip8L3Z8bklHYHclVn08S3RrUS9tXlF6Y1hEfSZLL0QoR147Mnk6T1smZ2lka0k5TE5pLFJSSUJ8cTBgJlhbfCtPREBRQSJqaD0qZjJOTzt4bXs9TjNQfUwsOHlZdnp8ZEpzdG5SMyZh'@;
put 'elpEQjBGPyNPT2N7S3JgTUx0KUshfmBePyh1dU5rXUloQjUlXk17T2REIT8yRGxocSxbREhNOXp+ckZ4VndEQnpIcUchfGozX18vZExNWyosUCtFfGh5aC8oXXRAUFRVe1F3OTQrd3dmVUJ1bkYkV1tTZ3Iqel1ZYzM2YU0mTEMkNHJ4fmQmU0c3OTVWZlFeYn5lPElJU0ZgOjdoTzIyUWE+eipg'@;
put 'N2BqUiQ6Oj9hckkxRyE3VzlxR2l2dV5vd3wvQmZXbmV5SD0kOD51NVg3bkN8fGhpcnVaUVM4K2lkRCpUPzRaZDpOYFZ1YSFCKSohUktuPWwuWjAlNSJpak02OjxLNEs2VSFhUHVNfnltSEFMNixAJEBXQCsqTlhgXVglUiVFOllDSXlpd1F9VHIpO3AuPGEsSVEsfX1PVGRSWkNKbEhVQjglQGcz'@;
put 'M0NORis+N1QvTHdhYl8wPCI3MkkzOGgpZCVrbGkkZ3U9Rl11Y0ReU2NfYFI9UHdjKlV4N31jU1ZReGIyUWAvXl9uKjBMLGhzfmFQPTpVIncqV3V5SnRYe3NMMG1ZYEhVN3VHO15sRk1qPDNOOWleYXA/SUs9Z2lfJm9bNiNafjIyIW9SfUYqNEU1fkRNZCxFMFgiR3cvZioxM1ZRJSFfR2RCQjRo'@;
put 'WEIjI0kldHJUIzIpdjoqYHJwVX40ODZhajojZGJAL1E0IVVUbm5VOUpJPmF3aXV9UVJuaiRMI0BDSDQidEJpZj4wPWNiOXQ/e2F+d0BHeyQhPmdUYD19T05tOihjZVBsKTdJY1h2Vj1ScmUuU0wublBfZnJ8dVVLUTQ1Vy5dRCtoRnp1ZjNTJGlBbShjXWE6YXEyWDI/diElc1gwLFU8fWJbZkcz'@;
put 'Pj08MUM4elVIbFFzeSVzNjRUY3xuaj5PZEpJel5sPWYobn5RWX5OWGBbW0lFbk59QHw4VTkrI1BvPFU/JWR1YzwyV1Q8cG9UZFNNSH40VnNnPmttX25TPFIwN09aLDFOMXtTa3FjJm9wPjdVXVI+NigpUVp6K2JoQ092OUNaZ2FraDpwKUY/WCJ8Vlp2P1U5MGliQV00U2o+RX1NSGFPSCNHUGBO'@;
put 'RlpRYmQ3QWxFXV0xcE1veXt+Mk85YGMjYlhtd2xHYEsufHRQcnQ0QSt0Sm4sLy51XiZOck5OSVp3N0VXKGMlRl5AVVR6ejJxaDw/N1RpaHVpTzRWOzdSXndUaD4lLHV7PlRSdTJqS0AxcVZPQ31TQC5xSXhfdlcjLyZZciZbKyV2fXNgO3duR2dFUGJydDBeZ05XJHk6I2dGaXQ2Nkk7OG42fWF+'@;
put 'dSVnJmB2W2kiWTQuMnNwIztXe0owTzcuTkxXKXc/Rk89OGAyKG0+X3R3SCFPM0lJKXk5WkUyP2JZJCVVZS5gRkh6RnlfZm5LZ0AuLHQ/PlAlN1ldZXo+PSUvdXk3YD8ifUErUGlTVV5oW3l2UThLLjBXTW1UOHErfGZaUUYqfH0hbEFbeWFLIyF2eFo9eGp0OF56RWgubGBTOGJRM0R6aX1WMD0u'@;
put 'fTcmZzFLOHUjYSZuSipwKk47MUljMEJdL2tFTC5hXmJCMVYvL1pVQyF8dHswVko4WzxseyFjYEF1UXpZOG1fWS9XSyFwbkw1dVZ+WDJYOSlqLiFaQlJ7Rm5XRkBUPEVrW0VMOTolZ3BqNjpeWzwpPVVlQjtRb2N0JkFVNGg0QildT3JZLjgrPmQyWWMuMipqQVVGLFIsOikjMzZ6Zj58OXp2S0Ax'@;
put 'QWo9ZDdAMFNaUWMhWl1SO2A3e3hIQy47JTVkeD5wV1NUfSpNRWM2MSUmM2ZUMWdePTF6M353UD0xTUs0VzFFR0R0LG9fclg3QHY4T3ZlPS8hMEA6R3hUNU18PUpRWG1Oan1JNnl1NEhlUWYyZjd5R1Vae0ZYRmVlKHhjVjR+NSZRckBHbUFMSHB3RypIb0cmYU8sfCJifSMhIUEyamxKfVc9NHdD'@;
put 'diEuIntsO1dMZXtsR19MQllGeVIsYDJuXnosZiIpb3lzXVYuMHtXV0JKSXM4bWF+ezJILllWMChidz5ea34lSStiU1gxUzZQKGtjKm58TDdiTCMjVyRIdFBwKXxoaGd2fmZjOWFicFk8Zl9nZnFsMXtnYiV5R3BkezBqfmUyen1kKHBKZH43fHlvOHlsd2c8KCpEejBsXVN8JHwxUThDOUJ6WVZ1'@;
put 'TjBLOFVtMHpGYyo9aTRpYylPVVR4e1Upb0g6ZUg3aDJmSDFPU3x7YylCL0JgfT84Nmp4InZ2NFtfZTIsKUwpSSJuTW5DbmA7WGYzNX1TfnwqVHp5QEU/UXE8YiYuV2RESjs6XmlKKXxzO2gjZTBQZDssVVZTezteRkdAT0NjbENmd0JNPFlTKDMqVHhFamhCRi4kNy91YFFWP0RTc2tiOV9OQUA+'@;
put 'JCIlT0hMakduNWU1azRgKn4+Wn4kfU8sSjB8RChALzxtZF95VGJ5RW4pRXMoTVN+MEZKLGR1OnpdbnpgUERCWltIQXRKITokL3U/OSpUS29DfCFCJXB2TkxgY09KXVkpbkpyOj1wO0QjczBqc2VIUGsieEJ7I25SZCN0SjteNSY0I1ZaOmFZdV57Sm11PiIub2l3V285KW9XcHVGUHFiQSEsaCwx'@;
put 'MXpQb3Q3PFpxLzUhZV5WZFZZVFFiNTk5cSpsJVRzMTZAZzRyY05JZ2YrWT5ZYy5uMkNFYiU4Rk1yXUc/TH5venJSPFksUSw8L2RONFFqNT1kUVpvIj5gUVRDIVQvIXhxJlFgeV1tX0A2fVReKnpnKHxganMwXmo9dGlQOWIkeG5WJVZjVnI5OkNTT142MVU7KkZIOyUlc0E8ek9QQTtQb1JnRVZL'@;
put 'QzdqdkVRI1ZrMXBNYFl2WFs+fCN6JnV1cjhRQkJQWSNYRkJ9aDRsWlUsNUdYTVt7YXVVdVtrNGlpdWxmPEFCJXpZOmZaVzR1eU06MjxOcWcpd1hCL0Jzaz5kdEthSGxlOGg8YmIpeWFPSUt8b1hLaztlYWZ3NlVYY1ksOzBuaG0ieURLT3k6fStVXmh8e11sPE03MyV0OXwmK0U5VkI9e1lWaSYj'@;
put 'R0tyOWFFXjV7ZTtkK2spfGdvflEuKXp3Ryw0MHVDPHc+dDNrOm97e0dFUCpVSnBmMnB8aURGSCgrXU9TKXBQeF52NDR3UWleQFEuSz04dkYybyYyWSVFSzdWbGBHMkY0RkEvXXJ4QHAjbkcxbFhoYmpaM3ojVnlPU0UqY2M4TkgzZnVNPURrUihhJHhYcXI9T0Z9Wi8+WTVgdyhmV308T1NzalYu'@;
put 'PzF4KTJ5cS9FZCpbLnpUMXxwfT5+Ul8zL0BGWjNVMiJ3RjxbXzlubGN4JjEicT9BbVlpW31QY256Lk8+ZWRiZForcyJBVjEuMk5dOmRgfV0jXiVhLCsjOTBlJTssc1JjW2Z9VTkrXT5sW2UvU11RR1VjY2dFIW9uUCh7cjV3KTZfO0dWN1oxNFQxcSp2VX04Q0lCfDl5Ym9mYjA+Ni46eVRyUGR+'@;
put 'ODsqbjEqcV81PnFNZVNiQTpPSFJ9Ok95Xl0rNjxiUUphITlbW25KekFKa3NGSmQ5cXRVemZGd2FELE1abS5WZ2lGI2EmdDQzKDcvZ09zY1ohUEc5NFI7WD1USEw5YEY6bSg0Qk5KS2BeZH5BRlVoeV9sd0ptZ1tURXU5P3F4N3wuUUZPPldGSXh7c3hSdmlpViI3US9NSXJLaHRscnNTT3d7e2Ul'@;
put 'TVsjRUBKd19kM002SnJMS0NoPjcrYEt4ekpAZS9na3RQbV5uOUtCbVt7KENeIWMzNjpzfjV8W0wpd2FWaF5HTnF+fkl+PTZOWX5WZ2VzcHwocFtWfSI7JGwzcDolSzY3RG5tP3wzSGlSQk43Pz5VQSt3TXBIQXJ2c3teLjQuaHBjSmA0Oztze3hLTn5xZEZvZzk4XzZ8Nkw2KmNiOXg3eWh7OFZ8'@;
put 'VkxZMWxQWVhQazJlVzAqezhWTmR5KkQiInxZUXw8dHI/IW87LlhDJHBzYXZvWSVENFdpKFZnQXEoaUROdlloajMsbnhZPWdmMSU9Q011QCEoaVUwU0suVTVSNEIzQkw7JWBuV3clOjlvMWl9aCwyZXg1KExFOU9VfU5UWTAuOkdEKSFKSFBFU2czU1FJdSpsZldTayIlSjRvVm13ZShaZHBGPlls'@;
put 'cXJvaComSDxWTUBRbXBfRTdsKDYsRFUjS2YmYmVJV1tQJF4rZyQ7VF4yUCx6e0pIb21pWDF8RCNCXzYsXU5RSGt6eyVFemROdUlpKyFsS2hSY318Pm82d1k+OShleD1PSVp+QHomYjIhIkRJbnImfjlQb0QuMUQiaVclRzIrI2AoN1liSllyc1Y5PDd0RyZeNFFVeWciQ11mOVljRCFCTSJXQjsu'@;
put 'OzExITxuRk9IJkBbWFYoU1lTUC9aKCwoPDA6eWJ5Kmx5S29IVDssa1NRVSZTXz5AR3NKQDVSO29+ZWNPTkgjLD0jJTc6SGtuOkhSVm95MEc/YDZZNWB6dUZmclt4cTp2QkBiZllebHprWG9mOnc0OX5vLzJIbX1IUHRCMDohdUJBMSFHKUUjemMwZiVscC8xbGosXjNKdXpxdjt3XTdHYytHYnRe'@;
put 'fGFsNltvOGB3P3xEPk8xM10qR2lUTUJWckRzK2Z4SzRkJDFUL20sYzJLMVFUa09ZZDFkVnd3bzkheUtLalhldzZpKjM8b1dMZzV2T344ZHxHdnQkNTR6NmNjWGtaJVdVVG0lV0dsIX5CVUMyNCpUQmM7M0Y6V0NoNDRvOEUxQl52L01Gcj5wW0dHRHVXK05HSVdGJXhnKVtCbE5CQlpDInc9I3tV'@;
put 'NSw6KTBeJlVHZUYkR3hOZWxDcEQrYTZ1eVchKUYxODJlJVh8ITN4XURFS3p1eF9GZyNOYWM+PyY+ZiZSZDl5OEIqKDBdQVA9Py42VF0rUS5HKkZafjp8XUh3OV1mMWFUJCZmZ2xtbX0kZSM3MksmPT0uUVQ9JWdXVWZofWtHJlNvQlt+N1t+bEZpSUd9OCxCbWN1TiRLLkpVYysmSnR+b18yaFdn'@;
put 'WU1KS0Jfa0Z4bTRfR2JOWyU2azdwcl4ofGZPaUl3cyQqZl5lZmhjJiFjeDFJQ0x0MlVLYnRKZk8pfnsmKi5IJmo3NT1ubSwxL0BAUH55T1AyTjpROmpFSlMoNWdHMHwzSG5HV0A2VF53XjN1R2h6NUMsSShodFA/JkFuTEwxRi9jbi9LQmZePUVZTFdabSZifDl3VklxUWJKbGB+PEN7Wm1YL21d'@;
put 'O0YhMUBxbU5nZW1lT0FyKWNmfDo7T0JjclkxN2MpeVo9PFljSl9dYyRHVH5fMnEjNTgkaU4sI0NzekQ0UDdkaj1VSmRhVTU+fVJpZChhPVIjRiR8VnAyfCVEJFpvRFg7eTREQnQ1R0g5UkgvTTJxLyN1ISNyYWF8ZS5UZl1PSXwsQGBuXjlLeHY2bnB0JCk0WltWLEhdKlR2eDIldkgqUDh2P2Um'@;
put 'JWpmOmUmOC8qNThhNCU2K1AsaC8rbUQxI2Z3XT1AW0RyMi4uKykmZ3hCOkpycjBCSzFSSyFMUilxUjcqbGZPIU8yVHZHT0hNUm82Oj1zNXxTcG44TEghWm8yQCQsakZMempRaVlaSCJsfW16eVcqQk4lWG0/XnQxMn1FZSx2KFZofGBDPExfPFVZaiEpLl07O115c2hRbENOY0FYMXYpYkNoIU0h'@;
put 'cVM3YyZ9WWZFZjZQKWx8YDBGcz8pZDlLeWJ4MzViVGJgMiV3Jn1tInkoX09ubkRPOEtNT0MjUClTTWRdeEdWL0Bxanw9KSkwdDs9cFl7SGhJUWw1TmUkRm1PMTBpKE8iI29SO14vfiwzdEE2LDJha1Z7fUBtTGFJekE5UDNeS3ZbP2dpfDMuTjdMTnROeGNlTiU1U1JzWm1PWVk9K0prRFJNdVd8'@;
put 'RHpKfllXVjpCIkRtNXFJNiQ+SCtkM1shMkFvbWB0Tm5QaFAieFtIeTB8QH10K1ZyaHVCKVVyIWB3bXlfR3QkUVhscVE8aWVteWEzNXl4KyRtIVk1elAuZDhBYX1SekNrRmtlWVVmS1k3ImshJWwqWjswP1ooUTZbMFFvMXpJYk1RfCopWGlURS9SM0tHQVsvVEBFaVF5KUIwRHV5L0FyTVVBfFtl'@;
put 'e0pXZkliWmpBalpFaD5jaDImbFs9anV0WFVNYjorbjY7bjE9fi9XYDAmJC5qeT08aWM5dS5vMH5tU0NyPG5DdCp9NUEhRFg4eXp7WyJUPi5ae1FUPHVEO1BPNmA+L3w0SFFpOCs4RFNHWzlZXzk9ciEzKXZre3JkbSx9SnV8KzcsRHtzZHJ2aXNgfnlzOmB2UGl3UE1tRSpWT349QFRmRHdOMypa'@;
put 'LjNCPW1VU2QzInswM2NpZnwuOnc1VXk+fnhjYm80aV51VjciVnc5Q0Y0QnFXTGcxJVFQaT97fEk8QWoxQyMzITQ7NmAicFZYTCUpJD4xTnFTdlJ0RWpsVlY4N3N8T2smZHc6cXIxaV8pTU5EK0hvZGZIZyk8Xjk7MnhOPkF5VGFSUHs3PGYqcy9PNnRdUy4pKE4+V2FVbSVbTlsvIixoNU4qdW4o'@;
put 'V3gzcmY1MCReJCliXS5gbnw5Qk4pNH4xX0VlLFhzb0dWPWxhNnB6ZitTKWBib0J4a192WU9tZEVfKy9Hcll6TkpHLyVpfHhzM1ByLyhLQFZdMnhoRFFAMkBnK1VyfEVeS2kvaDpOWm5YRHBde3B1NFkvZUNzITssZW5UYVtKQy5HTk9PbGtzYDgjazwuTktsNSIpeG4hZHFWUSZmc2N1T0chRSlB'@;
put 'b3ZbP2FaNSI5ME1XaTpbJWRgKihLWnA6TkdXMnNuY2J5OHwxNkdWTEdHYGl7MitNRlI0OTdsaXlbb3EoQitDfWdeVlcwPitOYCMxWU1xZ25VZVNDa2Q5bSlEOH1kSSZ6JkptJU1Ha3QvdzJEbigzMF42eUk5R3RnO2ArOnV7KE4qcztST0o3IkM+VkwpSlE2ZldJLnVWPmQlenwvbV1BVGdnQzdq'@;
put 'RHpqaXIjWT5Gbj9+Vl9JV1g0dE1OP2pxZnZCY25qZFRmSDJuVlh2P0ZZUV1pXUpBRjJdXV4rUCw3KyNuOGF1LEhHMVZ0enc3UXVDYmkoKDg5OH1YWERsYkQkZDdAU0MhSTUueys2T3d0eFg/VDpuJTpJWD4/dzJufFIiekxdIVFXVVUhXUlJXnRKcDJeY1ZgQTkvOnhUS1lRU0tmKSlCJiw7NHVP'@;
put 'cm1OQkxQXWZCYnJpb3RxWVs6b18zMlpWSDMuSXZ5ZE8kYTdQayJ0Q3o+Uzp3VXsvaU1CaXg/WSxsOT59fFQsRV89WXc/dlp2QDRjOTF1Y0d4L3sxPTZOYkNQaTlJQFVaUF5NXlZWMF1oQzV0R2tRU3BvY0ouZHVOWVVOcmBHIWYoRWp8MUUpTDNnVkh2MCpvVXYzYn4la3YyQipVTGxjWmQrQnJM'@;
put 'RXlfIiptIkJuNUIvcD0vUzc/SXd1VjRrOXQ7ZDJINVA+bmpIL19tQlJvI0t7bV1OUkpgbmspQCMubnVUQTo9TE5YdjNaR3JWSE04KyJzeEIqRU9QbDN4c08zZWVZJlYhPE1wXlhvZVlwJit2IldVOD8oV1hkJmdYcyVkY3J4dT56I3haWz07eWRKMVI+S0U7ZlhubWJRQmspU1FwSFl1ZyJrZGhZ'@;
put 'fSpNfUM9UiRKfEMxbyk5OE5ZTS9xZDwmNE9kPXdnOmRII3UrKk5PPz92cTJ3NkRiITcyPCVDJCV1MEVYcTgybWdpaX5YVShBMVM9TE80c3FUWWxdaC41Nzg5d04qKHQoNlM6ZyRTNGVnR0peRUA6M0BjYSMhUHcpZ2JYZ1R4MFtkbzNhPDpWcGBTOXBOKEdhIlRLYkwiOjJpRXtLUUVofWJEXyte'@;
put 'KVlhOGRtKlFLQGgybSZ1ZCRiUTlzRi5sN11yXmtzUC9OdltOR05FRHVAXzhJY10zT3w/X0xFYSxeQjorWSlfSj1dNWhbPldKOFV8ckw3eCFGOXdnKFtyP19CeU5pV1ZWdEoic1d0SmBBXVg/SjUvQ1ZIQipfUz57R34yeEx+KlI1THlDVHRidW09IUVUXyJkPXhbdERVLEdJeiVhLHJHPDFde1py'@;
put 'Rn15bVp+VU1TMEZjcEMiOGM8dTFfJGh7O0JxeSZ+Ky9YcWs1VU4idkZdNjdAU3MzU1VrYTk4bFN1InwpK3N0elsyKX5IK14lOXspJT9mPyo/M1VQQ1IvYXV6JnRySkM4YT1TdnsuNjRBWT1FNXtwUChQVmk5R3Y5SXs7fE9KcnVaaFhgWk1iTklxPWJSUlE0UDFZMjJ9fWk3bmZ9NlBrWCNYdS5J'@;
put 'LzxeZGtobHUjMyUoQTRTQF9yImZaa1BYcExpfXEmKnRWYU1Cb3dzW0A6Ki87eCwoKVkkWnEpYVJnUiVWQyh9fDRLZX41W2dFITxlRGc5OFhRVGNTQGgiXVlWKzBEWmhFLkYjZUcrdlgpNis2W2MxMGAyUVUwK1plbjR6ZSlndDZhX3lUcTJROHc1e2wsO3tRUHl0KSJ5eEl1SmA3bncrdGUuQlhE'@;
put 'NCZQUyJCTCo+ZyQqKFBaSjA/OENFV2pxQD57SmdvPVV6O0A/SylpSjdadjw3S2paQkhIfWFtVWFQTE1EWiYzV0ddYDFRKX1ocWc4T0cmaygjYjtMdUBzeG5EcWRxQncvbytmbEwubSMhJjUlUVZzbW5ud0FKaylDdUYpcHZnVyNYQCYzPVB2cUVXPHxmT2FeaSFuLixRdSEiZFJkQGY8VTl1SjU4'@;
put 'fkFwVT90e3VhQls8MD1dLDB5OUx7IVtaME9wM2dbakVLMkR2SUxfV29ieCpAcXlMR2NyaD4mIXxnK3BTKStvSmJIV3IjNWdvUCk0VVRjZWs4TnY5N29VdGQ2fSluSEZhYTtLUCg7LDtkVyEmaFdsIWprejpfPmZNdHxUOSQrVG9LaEt0alVZZ2guI1MxRkFsVD15JGRkU3hfRlIvdmovfCN3c0k3'@;
put 'c2wkOSlPMCVAYmxPYkhQPH56LHwoZjZKazt2Vk91XjBSMmM7Knxpfmksem0xPSoyXVtYe29abllVWihLPHlfLHdKIXtFYzsvWlpGV1pudn5KPT4vM0t3PiNgLDNYJU81YVJwTCp0YF00RCxrVS5lXWZaV29eaGBxeHIlaGw6UDsvMTFSWCg8KywlMj1GaUx+ZD83PjtdemM5djVQZnhCRjcuVVhj'@;
put 'dkdUbkMjJDU7Ry5AY2lyNHFsUm5RdiRhWGtGMjlEXWUwXWV7bHRFclkhajJQMF5iTFA3dzZ2OSMlLntjdFtveWZuZjVTKV5TOExQNi4pQiIoKDs1R31jbzJsJGVueGZZIyJjOmxxXm44YmpPYEJpKiFsY3koVlhUQWN6dHdRQCZbdzhbJitfUDhJdyteNUpiJTVxUiJvYkRCbTx2Y0NIXSFlI2lV'@;
put 'c0NLdUdVIjxoPjJJZXw7dHEwMWFZIyYwaGd5a1YuK2VPc1ZEdSE9MSh8VywhV1dIQ0JeNihaNHpQKDlETS85Yy9AbnJhLGorOyhiKFdnU3VMc3FBZjxPfHJlYVE0PThieFteKCx5IWA2XTV7KTlMWHd1WEg+ZX1bfDJrdkwxKDM7aik3WD5dPX5wI0RVJUZfcVorb1dDPVh+XVdEd0trY2NFWyok'@;
put 'cTxFV0VzVEJTSGtfYm5AW0w9RUpQNz0yYkVgPCMhWkIjUnJAUEJJTT11JTNqSUZRayhHLmtpLntfaD9uU1VjWUVjWS52Y2ZsNUc4UjohInUrajp+JEoiKHpCTWZURUJ5SkokMmtTamN5aUgjUl1xbnFhYH16SHFTLjlgdjsiSmNKbFhFTHkvJFF3Q2xsVVN3SXYxKUlXU056Um9FdGlxTjcwQ0oi'@;
put 'YExnIT1CbUJjMDtjR1NZXW8vVCFzcj16en5LKCx9cUpEZ2cmbXQqdlY8WjA/XmNzR3s/QkVIQzNIRilqYnt+NmIhfGZefHs4S2NlW29LTUB4OSI7cEdTQ2dhaVViNVlwND0/VjV0QlBgIVZ5aEpPQnxIeFhGPWB9amEiPSs2e1toS0t6ZD1JI2RlMG52enArXkFudFY2PlZ9REFwWDsuaGVQaSNa'@;
put 'JUo9fV53RXd2cDpNTlMlfnVKKD85bjZzbE5DKEZ4S3hIITlIT1FzRnNpdXY1UlRXVWlFMjxILzY8bClXIkljU0BFM28iOjdoXi9DWiI1cClQOmxAL09fbihPS2hKckI3YDVUdnJ4OVtgbDZnY3pEZ1gkPkY/Z3lIMXRpbVZ3N0U/JmlDPS4qeHVwZCFDeVg+JjIvOSpDaDkyYypkaSFHXz9fODN5'@;
put 'YyomeiZvako5PyhCVDJFa35PZU4jPlluIXNvJltzQ3ZXNF4/PlhBI2ZMR0VVSnVwOSlBWFM1ZV5aZF9MIXx4N24vVmwpMU0kezpvM09SLHIvNHI1WVFsKDtqdGgxWV9vTjBKS0BaOmA7aHVaVXJmYGhYaC5eV09sMEhJe2E/VjtALEFmLkFWUVdHTlJwW0NeNC5UUDNTbmtsSkBfakZrZ3h2dmhs'@;
put 'KHpVRmpjZ0cmWlU7fj1JV3lgPDVGJjpjQCkyZ1UzIkFIUCs1WFYrW3ppd3UlM0RxZzxwTHB6TDlTc3JDbWB5KC8lZE9wW1heQFg+NHZNW29IWTxTUHp5fUIsel1EZlExUnRMZT5LLGppbGE0WDwyUzAyX1B9bEsuL0x+JS9ySC8rKzE9blIpRVU0X0lOWGpfeDRMWWs7aGtYPSo+fisyLj5vOnEh'@;
put 'eC44Yns3NHhbPklTTCN5bT1FZSMrbDp4c35NZSUqNk59Ikk1YHhLZzFNR3ZKK25wa15PM15DL1ZYaWBwYkRINnw5RVM1byVvME48XXc/Ql44d25gWUg4cTBjOGB2ZW1dXS8hM3ViZ0pGKFZdfV1YTVkweXIidntIdHVNfEtgant7TFQzYGk3QHlGM2dbVC9bci86OUd6Q19wKU1ebC9obWdDPExZ'@;
put 'a3N5bTVyOUU7TXZ0UiJBRjB2YyxFM3h+b3hPVSNkQjhPTlZ5eU55ZHAjYGRbbXVvOVZ+I2spbEMjR1h+RzhaOS9CdkVGVXA4eF9OWV5RZl0/eilYIjY5WlQjeSVNTjgvNitEZzxkUVhsQDhLYntFNzpAQHg8ZTM8WW4kZClsa0wuTz8lXThJfHZNL2shNnx2S3JEeGc8emkoMkMhd1soYnYlSF5K'@;
put 'ZVhrW04iIk8/SWJrNEdQZD0vPTRdU1AwcSFhYipsSEZrVS5bIThNbjsqUndJL2ZRRXYrQjU9dn1Lfnpaa0E8SipmMU9zXVFtODIyO013NzcmcTJ+TyNUeGNhNEN3cXBrfHA5Lltyb1M3YmlXWVB5d3VDeV47fjgyeD9UPzIsdSlHN2doUC4rdnU0RiUqeTV0eD4rJDRJY3s3Q0JnXTFgQFB8UjIx'@;
put 'eXQuZz4sfnsqdnE/bjxuezgsOT97MHc/PUptK052K00vMjVKQnVlNFRoYExEY2NiemMvNCtnczIiUjtgbzRIfD5ZMEAsI2ZjSWNiOXRfekhKN3pbJk5kIS96Nmx0N2dSfDV0fHVmK09pejMxO01Mb1t9WGpwZGlFcSY5T0ZkVHVjWmEzWjF8STJGKHRnXjUxRH47Z01PNjJ1JU13VnNfQ1liWV51'@;
put 'QkNwQWYjIV9udmYwfTZQOHcqcCtGVjErMCxieGdEaiNFbFIwe2U8RSEicmheeG0sZ05IRE5QP2REOHtgIWxwWEpGMj45NDFqLmMvMyVvbVtoJS89VyF2OGVIT2F8fEM7fH1LNyVbPmlBSmpHN3IrWTJQM0dYdzcpUXx2Z2JXT1VMTTo+V2d1VHpbOjkmaWExUFNVVjBGVSFgL153T2x2PmNYO0hW'@;
put 'WEQpdWVrJSZSP1Nge256XS9KMlJVbzlbIk53Q0wzfTFaOE9jbHxlV3c0Kns4Mjs+Rm1WcnRXbkhkfXc0OnFac2cwYkBgT2tVe0g+eUF4ViNnU2FGaVRHOUk9T20/NlZrNj19Ny90NFY8OXUvYFJtPHhbTFIhd2lpXk0waERfRkJHKEU2WVM/K34oZiZUJUd4ZUUxVHg5ZEtyPTA8bXZkM2JuUE8i'@;
put 'OStpOS8wciglMStmdDIrPF1VayxkITxja2d7Nlo3Q1hwI2J1M3prY2JfYyohPzlOOyEiTjF9fGVFP3AkRUg6RGgwZUk9PXJGIWx2MG15UU5JWjNeQ2N1PUNtWXZiKWNmXl9FLEV4TDUpIT0xNHx1Tz9hOlAkW0hqcGdBMWJFTFpybF5sOjVELk5LfXM7Kk81YF8wTVR3RnV2QSVCfC5idUs5bTpT'@;
put 'dUtrNWt9SkI2WWVHPnY+cXVDXmwuKFdlR113SiNaPGw8czpMYGIpRGUrcHYvJDFyWikxU3M9I1ZDfXV5VyxpZHZNTCl1cUpSS3N7Mix+enpTUkxwQUMpNEk2QExFL1Z1aSExKl9YRnk9TD4kaSl9TCFadEo5UlYqfldxW01keTtiMjRSREIiUnp4PDVhYHlkOGFyTGozdURPOENSVC5LU0NnbTxK'@;
put 'RTxLMHFzNGImdkxgbkdsUD5LP1AvJXEpXWBWKDJqZmFOO2ddR1Yhc1pUak9jU2FkYlcmJTdpVmd7UllZWyVebyFmQEB0c1JDelFSLzZVZndQPXFmfHE4VGI4YV48ZGVkSngsOFZzTnc0YjxmfmxeWzxse2ZmMT46QFdZUF47Zj8hUkd0aTJVKl4ucD9bLFZHITpPJWQlTnA6Lnl8JUVOcF1XMHxI'@;
put 'a3NvZ31yYlE8YVRTNGxjbztkcW98NzQwUnNhajNXeWxuZkF1amdEMCM5NEBpP1Jnb3wuMiheN2U4PU5bU1BAISt8PFU9N2Flb0A8SSZbbXZSbWhWeGA/YndgL1lub1lhOHk3cnBIMzJaVX5sdV0/Jm0wKGdVfWtpaVZ2JD8sYkVpJjl5NEokNSpCWSlPbW9senBbKVteaXp+ZD0hb2M2LkliVWF4'@;
put 'JmNXIX5rbkxgPUxEJXVmbGI8UTNsPypnbis6ZllaM2M+NDplaF5QXiUwWUxybTlxMV15dXJCOG0oXkVVUFRWYTJJQl5+OiIjNms9MGtmPjE0SnZeJHVrZUtNQ3t2XTszeHNtS1dzayZ3RT9jKyw5eUQ7U04wWWl+bCp6MHI4MHY6WkFsJWczYig1SHxBKCohVWtaKkJBYGNPUSp4JG5ubyp8NEg7'@;
put 'TSglYTteOU06VH1NP3tofnpDL0lFO1s0PXoyIVZYVTBiUFJ9Wz1KTDZMOVBVXXt3ME5yUW9YZyFpL2w/aEBUPj1lRzFec2lEKCJEP2JkcHFAfGxNQEs2cGApUzI7PVR0c2hhSEBpKXhdaUMoajNrVFRwJWpQfE5NMGtWLncoKilgJE0sRSYoUnNfekBUYGZzVnR6P2FlXXl9OHVxWUMjK3dbSll3'@;
put 'YzdmSUU1OExQI3VzTSt1dDY3Qy8hPk5CfT9scjB8ZDw+c3c5Xlo+cGAoL0N5WzJ3fV1fJTAzXltmKHZaSTg+JE5BUSJXJWo/YXVIQWhkZSNpcyohWWlxYV11Y2dpa2trU3taVDtiWyFOU1ZHVH18YGk7cHEwTCNeZVluOzEsRCojdm5FMD1bOSR6L0NxaU1fKSlRKShhQ1hoaFgmdzYxTG5nO1Be'@;
put 'd2lyL05IT3BnVEdXVGlFODdqLypsY1VZbm16OSY9fUtIQiZ7RCNqKm4pb2JDYCJWPXJhJXdpQywlJnUuVkJkOi89R11gKXIjZmgjTSVGMm0mQEVMbGtYQiQrcUk1VyZAb3Q6OTxPakJQXUlsblgsJTJESDBWWjRJfG5JI2RWLEY+a3VGQk4jZlZIdl1KXVIuVlgwSCM+PCYxRSRdT2Q9N0o9ZmJ1'@;
put 'MlA9UUhlM2RlMWpVZm03PVVtWUxSaXJnejs1IXdCJiZAUkRMJHBHSFtgdFQ1QUFRZ1tmIW5RI2Q9R0JlbC5sKXxAO2NjRVhldXNudHFGe0VpOlltPzgxMFhmN1N+cEh6ciJZb0g5UiMmdkRLcThbIXtrfFlna2QkRmpLUnk6a102NDdxej0yIk5Mc3FTTnooOTU+XnY+SXxkUiNgckwkZFtfUEth'@;
put 'OTQuaF87JStpNStUSEczTDx2ZTtdbE53ck1tPWNiSGRrKW5HVk9XMnZKeGIjcU98OmNxaURXe24oXi82ei5BYEhEUkRsb2k0KXpJJm00YlJHNCV5ZWBZS200S0ROVGVROkNiazY/Rnp6cXtCbzM9LmY3ckQ0ZlZOJCtHIUpEdlRveSx+PldjVDZbJHokdD8uWDsrMm85VzR0WnZwJmFuM1s/cSs3'@;
put 'Umh6T0s0JUpeJVlieE4pM0MsKC9qWFVeXXVxSTJoQyUzcU5wTEF2WUVVWD89QDkkW3lzWGVNImNZUk9BNTw8cDopUkZXNyksS1hOMit5SSVYSG9leD49VCEmY3A2YVNwOlZVP0xUUiNyLColenhkJC46Skt6fHJtYTlIJTgkQFA2WnlecFF0bEVlPj0uUGNXYW1vfWpFLF5DcW59fmtLQXQ7fXNC'@;
put 'MShUUVo0Lz92ZXEuMWpmQls7M0REKnwmXVs4MEshTFspZXZsQUNrM2BeIWthQ1lsPj45bzl1ZD1BaSJjXzMhYWtieDxGUzt5IXcoM1RSYnpTPmYwJEdYYzs+MThORXRkWWcoI1RNdWxgWjB7eXVXbShsbHshL1kiUjNeMm11ZyMsbG57K1ZaJkpTT3NAcG1yWWFgOVJLV0hPU2l8YVBMfk9aOTtF'@;
put 'VFNZN0MsfHpeMy93VUdnKFZDTygrKT0jdEwrLGdYMXFaSlF1fXJtYC8mTEMqND8qSW1oIW5hZmtSIl12QDV4YH1bdiVmMUFJU1EoL0pBWHkiOVNXUEljeVhKUHtCe2EpMHhiRVRWNHosKVgpSm5ZTFQ7VW4hTEAjTX4xdU0/X2tVSG4mPUZYSj5lUSspWH1QZlBCfDY4I3FCZnFBbSN7aTQsVl94'@;
put 'ejAmaUthPXpSUnhLQWYuSEFnSnEpZVtiOSZTbnlkNT03dSF8PEtUSjVsUHFUYSNeN0R5bTUxO2U8b1d6TjZ8WnZGYTJ6UT1ZaUU8Y3FvK2lIUmklMzpXN0B6eCpmKzRzX15SPXBScilFNThISClkKXRXV3xvYFU6cUx0QEB4YWd8anRNNUZqNFRuKTUhMDZ6OFg9QUg9PlR0PyIoeWshPCFsPWRm'@;
put 'dkZLNygidDM9dkIsPXc3RSlGOm5TRnV7OE5Qe013MDldeD1bPGcjYkciNDtgUDpgMGhZQHAxQUkiRFgsIXVGX21kQEpTMTlSZWZmeCxtfSZrVURrZUUhPDd2KFYqaj04TSlPREtLTjAkYl1EbXR7eXhNTTVpelQiXWw5VyksOTlCcjxtSF1ML2dBS1U3dDZbXjR4OzNsej4xPmVqfEYkMFQpd3g2'@;
put 'alNCdjg6MloyeUFtYThWWHYuViYhVnNFPlR8STBYSGY4MjdrLkZ1P1U9XiNBKkN0MFpBQWJ4e2o3NERCMm0pNz1SSUYiQndAaXlCR0doN0JHQ3xZbngxU3dRLEtHMVk0fDxoZnFYVEhncmJYe0tKLG92Z1p8aHlnXUQ8JCtPeWdNdVNwL0VFOGtOY3JvRVtwYjByO3wxTlpWXk1rMW4zOzwmIVBs'@;
put 'OyV+X05aelRWLGZbMWBGITo9V2c+Nig2KHo5bGdhc1tbeU48SE8peis0bWRxXnBLfnxlRn5XVyt+Zn56JG1EPVY0VC9TNlpuYTBkLHJ4NUl1YVlNeVZAfkpfSUMobmIsTUx7Rkl1RHdlXzRnOndFUlpoKjI2dzYmSi8+S2x6O2QkZnE6U3QpSnEzOyg0JGxwZ1EqTD1jbSNdeFN+OXombHkuWERI'@;
put 'MVRITUIjSEcoKkoocGElZEc2ZW9yMzA7eE9SSDZWYiFDVGl4aUFJZCQ8KlYxSXl4VllVJE0iKTBVZyV4KlVmeWRQbkYjRU9geV8uKlA2KCt8QjRQPUchYEU9PkVeQD5wamN5cWBecHk9LFN4WHkhVFtHT2pxRTwpSE12PHdwUEZAe3FwTFNocD16b0pdWmo0QyshYFZLP2BXSm0xJXV0bXAkX0B9'@;
put 'P1kxNn44OSsyR0ZgVipsWiVUST00dU5oXWZ8VFs+OD5GIlp8dXdCIW9EN2d7R2spakFfWj9ga11POmwkeVRyNjpSOHpdTWEkeUNsLERLeE1he3c9aDx+WlgvLnBVMklBQ1M2UTpiLFdWXiE/dkkpKl5SVT5iYzt3dHZdcGVbKFsuPkx+UU9YUkAjSzl3Kl1veCtQKlkrUXk+XzZgOWxfRGd6I0ds'@;
put 'bSlOaWs0XTRXUDN8UGYuJX5rXXArcjVPO213My5kY3NvR0FRZHdrQiIhZkVmX3tvZHFGUjklcSUpY3A2Z1Y6KCI2MFZsV3YlfnwjW21bXnF7d0xWdU93WUhMVUBkV3ssZzRITlNXN0ZJeTZLeUtTRiRlU2dXT3QzcXwhRU41XmBeUVpxe04iRWZkOVMubl5mOithSGJ7YXw9SnBdLG8lOTNpbkhn'@;
put 'SUVmaCpDJnM0byxkZyZ8cWI9T3xQcXVtQk5OXVtCYm5Ec1tYSEhtPlVXOUEyQ112KkU8ekk1XzBmIWo6NUlWKiVxOUBkbU9dLjl3WlU6ZzVnalNsNWA+M1BmemNmRSVFKColQzAoNSlrY3xLL1JSKiVPWzpvVWtmQkt7Sy59I2kqPVcmWGMjLF1vUSNGSDYvSkVnP0l3M2pHck4sVFEjTjckI0JQ'@;
put 'TixYWiN+cENDc2RFX0hYImUyfmBHdyglXyxpTnp3R29+WkpmRkpLKlJfKUZBNU5PbGh2ejE3a1YuWjZ4X0NTQ01SW3J7NX42cjZDYk9+IkoyXXROY0pAZTtdUUVPKEhXe2w0NSlTcSFEcF5TSmNNPE4rfk9xMld8d2dfaGk8OnJfZ0oqJTAyeTtwU0NzaDB9dDRwejMrR2hFZTlmN28/fGxjPm5E'@;
put 'X2JePk5gZVlxXVNleF1yLmNbS0ozOihZNisxP1FjbWIzPVYsIU14L35aYjN6QnQ8TyZtWzlQNCFbZkghSk0md1FtTjowemEudSVjRkkoUDhjQE89ej9tLFRoPVBgcygwTWBiYGw0fSxTdTFPdlpVNzFadWZBV0d+UmA0RHxEUjNocUxsNHdgOE9MQilxNiNZVDsxRC4pRXc2OyRsXT5+TjFdRGh8'@;
put 'eDp2Z3VsJmIyQ1dUNk1xX2BoTT11PT9nPHZLQjtQTXhMdCw7UUtEREB0XVc4QjA7ZjVEdT1kVSNyZXtwKz5NZmFDMzI6MWRuPyJSZW5tQD1VRkR7b0BLWXhIRlhhaE50fFtUZnRrfEJ0Z3xdck9kJVg3XkokOWhtLi4vU1ltWV1XQ00oWmE1QSgkVkxlcHNkUF8qSW5qKUQkbk1VSTdJPXkjSlFl'@;
put 'KFV4S29iRmx1QEZ4KGl9VjIhZEMmaXg3Nyh4ISY1MkcuQjBYMT1uYGs1TDFgOktQU2olNmEkNUEkRWN+ZFVALGJrLn5fZCp5dilkPFt6X1lRIS8rU0VWbTAxOjgqUDN9NyM5MEVASl8oW21mUmgyMlJhc203KWlRXXkraF1hYU9FMEliXT52LD1HIUJ0UEZwfGVYISV6QE1ZWihuYE1aWDRuXk1y'@;
put 'KT9VVyh+S0dHb1twNn0rXmt1YiNveFZhVzRffFR6T0NLZXZvIlJGITd+QCQzRTNbNDlZOFZ8WXlqLD4/UXgoYFhUVFdGOzV3MyZRfmxfTjRxJWF8bGBhI3dtNFVQdko2Z3xuKWI0KXM+bywvbEVvcz5Yc3Eld21tZCQpQUpXI0RkRTR3aWBhOXQ1Pmk4dTYhKSk+TEJSW3U8UzUvWmszJSIyRkF5'@;
put 'N3p7SVc/OzMxMWgwZjx9MDYoM25wQW5ILGdNbl8xUFhPQzVFZTthYTQ6TEtpPUA3TnxoNGM+bSlpX3JEWmchUGs4WyJLXmFnazxvLzhFM01oamA2W3JvR0JfPSFoQ0UhaFFUaWFGR0xDJGIwUm06PWVzPy5oZmFqTjtxcm9Veik0OldKQXdNYksvaEpSeEg8X09qand5Q2UpbDlMSCFxMj16eEMy'@;
put 'dCskZX1JLE9mNHg8fThFOSVvbTMkVnV4aGlvQnUqSig6JXI1TjtrTDQ+U1IjPSw2ZXxBa08qKmgiVzMmc3MqdkxVOVouZVF3JmJnflZmI0Y8ZDpON1EiNngzVUc0fU13PkF6LyFLQzFLL0Q8cypKNV49cnY+MyFbU2FyPjtkbWROZnE4RkF3Xz1ucC81IzlHY25YdTxdUWRXRFE5PG40dWJSW3h4'@;
put 'dmRqbVU9OUhmW0JRKGE6c2RQMCpjb2VJdFpaPlM1Jjd5WlVHdiJlcl8icjJfNHlqbXZ9cEcyWWlpfUNkY285ZlloK0xXWUd5N2hLKl9Nfl1NKFNkZmR6bmFlJXBnYTxAdV9dYl5hNl59MldOc0ZOT35tLFRiNCUiJihqdSQkezUxImVzSG59MTpTK2hCS1YlTiRnaTExfnYrPFQsa2N5NiFTISNY'@;
put 'ND1wWzpyRGlXbUBhODF4Z11zflRaX0xoSjI0OyIpT3o2IW5ZU0ZkbD15dzhQKVpYUFEpZ2tpd35nJWgrc1daXWlFWEoqaGQobmp0bno3d198XSk6a0BfZiFTZlF3fEYhOHdBPTc+O15HejlgUHVQTW1ReTZXTzIlR10mIihFREVgMHFWVC41YyNiJmlhfEdYVlE6Iz0oT353Ymc9TzxBcyx+JTo3'@;
put 'LEVQW19PVFsoeVNdfSx5YCRXeFRZWTUkfDwzO1I4LyVwQThHKnVZLzxdMWZ4TiVWRzBoPj5NNEUvZW8rPCgjM3xGI2BrQmt4I21ELEh1eGxIR3VHKklRRnciWD1RYzttNn44Qj9hWlNlTCMmSFRYbV8wRilQXlZTKy5KPFlYZyt+YUBvbW1yJTYiNWtgUHtaTi4sTnFkJjwxdzsvbitbM2dGfT0y'@;
put 'LE1Ua3BlVU9NcmlHdy5nK3ovNip4O0BOWExNMnhDcjIvc1RzMUAzQ00rKy8udXs/aldQJldHbyFZUn0vY197az4hMFd0eXlPO2c3MUhAJHtqckZoMjhNTWBOdWQxZUBbOD8iI25zajFRXiNaMnU1Ukh0Jl1WX0A4dHJIbDtuVTl2TjhZJTA/TTpuIV5JSGFNa29RMmxeJlR+Wj1oYlMuZlR+NUtn'@;
put 'JEN0TXpgMlRpMk01WUUsYTImcVAkdkk8KHA7aVZTbmhtNyNBVWxOQm86Ml1gMjteSixMZiF6dF1YeD4xPkN8RXZMPFA7a2VHKU5UYyZAKDo+UGY5c3BHTWFYQF9Nemh6RklzTDlRLiM+SyNYNCRLSjtofGZmIW9yXlJOJSkoP01yb3kwN2owQy5wVlJIaHVySHBYaWZGYlN0aDBpMDh6enpyUFd0'@;
put 'ZWxfbTx5Tj1BWU5gSjdPXiI+YSNAbnFsLFkwfSZLXVBuOiM4fHR8Z2dYPVRlI3R0cDdMVFhPMGU5c1BQVno+TE9Zal9+MlVHI2pzOXkiI3ByNiZPPG9KTmN3aWVIeiQ0JkwqNDVYKms9ZURGdU1VNTkxYD9ieE1keTJbVl4xVmw0UWpaeE1WOCg0RVZDMVJ2OH1MTC9nRStlc3dtVkIzeyIzaD1T'@;
put 'Tl5tIS9lZnxYSkJsYGErRmEqNylJZUlwVGRUQ2kzKTJ2Q2MycVtEZk9Wc2I/S0cxZEImR3dMKExEen1GTW1ySi5VZHEzXS5LdV9RWHNJJF42WjBrOF4iWjFab1BHRFNAO2wpVio8YVc6S1VNLFhlaUxBNjMvQHtobWdGTWVNaDN9USoqb2UsKSJGXzkxOk1RVDJoclQ3SiI6UmhxJVd5UF00UEwk'@;
put 'Ll8+Tl5VJFF5RyRwbVo9bW0hLn46TmJJbmxIWkFrS315LFFGTCtKKFNoXjRUXWZFZTh0bFNeSD9lPk8vWUBefEJ8ekw4fElPeCZuUntUNlUrMDtuN11KbkhRdmpQKHJSJDdOMis5dmxmfTg+bWBEaX4wU0JwZkVQU0cyTnZjV3QrQkFlRVE1JndYNV1eWUxOTDppRV5laXxiaFAvPEJKLlZlMEBY'@;
put 'RmpWPnN1TGVzO2Q9JUpTXU1+Ui47O3ZaZEE4WkVbXjAwMSRdS081QyQ+cUJtUWY3KGx+R3lHe2cmTVF3bDA/YGIvPF1UeHAvQmxCOC5zPFRgdXxUPUk2e11+Kkt+K2NlPjwjJFlGc0FVQjNCM09MQjxYVl9rRCVVYEk7KiQ0VykxKWJAJHw8JT5OfiRFeklOUyJOfWdPQnoyMjxhcWVKPCprI0dx'@;
put 'K2Q1Yyp+aD0xYSx9dSZpK2cpbEQ0W2gmaHVvbzJnVklsSUJZdkR8ND8jUlBzR05xfjZ3b1MrPm5pX3ZVS0dLUSpRQyVUPyV+WHQrTD42TVMvT2c0NHRXKmlOb2FPRENOXXcwc1JpWShRclUxbyYqXVAibmpYWTchNk03M3kkNm98SD00WGlRJUBga0YxPEVMZGJPO2pwdDYlaiZnL30pJThrYlpL'@;
put 'Mi59NDI+eSRFJW1rajZzU2lfWzo0XTh1LixiIkRPYyp3bFoiYGFGPWpFSkk4eHY5OEssPXJLWCYxR3ksaHpnV3dHfU5AYl1ldW19aHVCekxRMk93c2pORG9LaUBFNy9yXnwlTj8me0dvIkh7X2dwYTJzYlI1N35YfXVNckQ/KlZya2BfSVp3XUxuVEplSm9IdkVNbFhGYng8fFdLL0YhQ2BjKCFj'@;
put 'YSRlOHlEUjQscl9HJld5dWxxVk90aDxfXyMwaSlWMHl3Kys9SFQqdmhgUl1EU1BtPCw0TlhlX3hSOF12PXFXIy5wVG9ETHFRZCxfez5wYXhaI1RZKn4xI1RRbixJRmVWdl4pP21+fjp4bSIpaTN6UFRVbTNzL0glckFZMy4zOjUvOz1ufFBAQzN+MjcrNDMyNEt+I1UmPXo/OnQxclNhOlBgY2U4'@;
put 'ODxbaF04JjpdTFlmTEIseVIhYlk7RSFPZWlSY3whJSRmX2lJRT0kKEIudnRNTlg6aWBHeip2Q0kvPyYzcmAoQER0NlU7Ojk5TTFQRm5GRmd3RmozWE9AfVhlRHBuc3I9cjRxNT5SfkAzI0JJRWlmbXYoWSwiXmZMITAiandmZyhjSVR3ej81e0siciV7SlFZWU1hMGl7UTFrKWhgaSp5ZmlNfSFI'@;
put 'NEZGfnwkWVRJNmEmU0pyZGMlVzleQG4lTl1DelAkYlI6XnIqOzp4PzFoQVJpfl5oLjBAaCx8IWp3Kl1UYl5BUj05LkdYVTlnOXo4MHFTeEJBIWhLQUYxLjhZZUBjSV18Uyg1NH4yIylKJSJRXzI1X2R3KFVKVk17YjdLdUxkLjY1ZC5yL01RSG9gXmJjQnUiUiRALnhMK2VHbEpkSDFdajBjUlhe'@;
put 'TF1CX2UiaUtWOywjenksY1ghaXxPYk87WiJKOCMiU35AO3NDXSVCXW18UFVxST92RGc/R2RrUyN4YTRuSnhdb2BTWnpwSTUxfDNQYHxUMjdNRUNOW10ham5eL2h+TU8mM1kpUWJwPnh5MW1gV2ckPVtXPFIoMF1qZFYpNGI9U2BVal59Vn5faEx2YTt3QEhLZU17KzFfO1pAIXsvSl5jNUoiRlkx'@;
put 'T1dOcjIhel0vbHRaMnooNm41NXZCamwsTHV0UWdNKnEjeXZLNF9RPzY0V2ZTdWZPJXR4WyNYJD5vXm5CKT5neS56RCQsSEJgMFM1JXhTMEhkRlk/I11MVy4uenU5dG9hfDglOHc+OSpvbD9SLkFzVypbeFRUPnRDRTBjYEdMaTZ8d2QzY01xVlthTGNjPyRZYEt0KV8kcmN5dF1gei8wYT47YDZC'@;
put 'JVEwY2g2YmVHQmNkXTE6cnQqTjhnX1ZKSHVee0VMelAjTTg2WC9xKkZCQ0AhaDo/YXMlIzBpaWhfWk4qOWwhPD9+WUMkSll7OVMwSnZjbEtIZHNPP3dCNTsvY3lTVzRRJGpEJXJ2fFVGdEQ2Rzxzbi5KJUI4fH0rV2MvbXdRRHlUWHM2ZChtS20lKCZTPT93YXhBQXRLOFZKRCVQY1c4KmU4ZEli'@;
put 'Tlt6UHRvdkNfVkhgQU96WGpNZTVuNllPaUwxVVtoT1NLclJGTDAqK1thcWkyKntNOUsqMXlVOXdObDMjJV91dUx+fmJpPUZ1TSJUPjA8MVgvSy48V2dVKSMjPyMsUU12eTteTHIzRHtBZXx+fUN6TyhMZj9mWldSKDhlW2RYXnpxTXN5KE0hc0tKMlZmWlBIcyNPP1lHaTBERCs8N3VJaSpCZVd+'@;
put 'P0hkP3hiLkM6M1lVem0xY0BuLi9gJX5RKDo1RHQrZklOL15aTyNTcWZBe3B0eVVKVjQqMnByJExPMEUzOHlaNFUoVG9QNzp4MGwvc1NCOHxnZzk6Py8wVFIlU3h5blp1VSlSJGV0ITkwfjRUV09JQVcrOVFAbFcmYzFQaSNFJTA0dSQvL2ZHRCZjcVRMOGNzfjRAUz1QXVU+Smw6QzFMY1JlT3A1'@;
put 'YjJQbXxQPT1FXT9rdyZecns7aTJbRVskVm46dnxWSk98e0RPd3MybUVgR1sqdCY5YWI/UFJ7dSQkal00Yjh1aiZWYVBBMTxHRyVJTnlLd0pDOzN2YV8yJm91byUhRG5lOEVJMGYseEJyaUBmcn4/N3IiSiNUNypAbVhBMGR8K3A9QmZIX3ZDJmNGTGZgJnB0NkcuT3ZKKH1DZG5IOilhKHpMbn5u'@;
put 'aVJJZG8zbEd9REBJO2dzMDA6QF5wb1ZXZjgxNTVmSTFAdTFzNCgscDs7dV85SzQqeXc3e3pPczUqdVhIdlszYWJzNkUyViF0TGs7TEx7aXlaNSxEKm8hNl5HR2p8N25zVzxmLjhObEB7dUcwXlgkTWtAIVBFPk5PNzZsbT5xYWFXQWtIcEY1YiplSDhbfTExbC5meCQmWCp3IkJxQjwjcjhtekwu'@;
put 'RmF0bmMkWD43RHt3cVtuSyUlN1FqN09CaXFvW01bXXVFMkE6QDEzayNtL1RAa1VRO2FiUUk5PUJUJnsxNlgxdH14IyUmV20qdEU2OEUlfGxsOFI5NG9xbllRfnozZk08REdkbzxIe1hRYDpCU0h+cjkwUXE4RWc1X1NxXihFI2w9RlQ3PzMqaHRmeGhJMmczeW9NY3s7RnxHKW9kKlBfcihOJjY+'@;
put 'JTtsOj93YjFlXSZaektAS1lEdm5rW25uJGx2YSJhMWEySFo8QkxYV2RyWlVfUnl7OSM6R2Z6Uyh1eEgrSHsyZ0JFVSxyLkdLU0c7WHJLIldnM0J+VE55Xjs+L3FCUTY6KkhSOyVxemZkKnt3JmxWXXx7Pk9YS2xOajtHWiNOZk44Qi4kbUdQUCk8JER3fUlFa0sqI2Qwb15INS8pM3pUOC9gKjRo'@;
put 'ekNTJFMoOU9oLHorSUJSUERISyVeV2IofVFreFArXyM2bHM5dk8hNy5uNSFPITpQN248TEhmU09eblVWKGRqUEQjSDo6aG9kY29OPFgzNisoNFdlYCsoW0Z6NEhMIz16Q3gzRjFOVU0md0B+STF3YX07dWQrL2wpOi4sSVBrTEYxVHgxdmpFI3sme0Nye2gsQjdxUWRhMyx2fjEweU43Kip4UVtG'@;
put 'SHR4ez1RfV5nM1JsakImbXEucnB1P0lOajVlL3k4TFFXUl14RV5kLDxELGlsTmQ9eS5jRlM9LnlLPG4jPjt2InsmQDVEbTdHTTdjfEJlP0BAVFgySjsmJG5VX3cyK3ksaz5oUTJUMFQ8fUdgaFUjS1BrfiU5LHs9QHQ9NlRlLzVAZSlfa00yIkp3d3xyeGJeVkp1NH5WYkUkLzAoOSpzTCwuTmRJ'@;
put 'ZSIrQG0yR2kiOj1MKSsiR1ssRmlmTykzLGNYL20uPUdmTVh0TStmRTVMR0JdVWNCellrNDdIeFA8RiZ9Z2Y+fnBiTHRQdXJqP0JIcmBiZ2p5LjF4U2A5XXsiZ3VZRXpPPk5CJiVJYT9CKFdEQDB1VmVPKHldLlQ3T3orakVZfSZvNlRpPFpwVm43LmM1UEtEWWZJT151fFFzNnNDbHU6VUZAcUo5'@;
put 'cEdGIU82JD1KTl91KG1UT351QjY2aCghWVIrVkwoISpoezNPeXomY144VChIc3Z0VndFZiw/RGVeXmxnLE11eTghTzl8V1piJHJIQyZLN3FHPUdQTXFaYD1GMTphM2BGSDZ3ITUuWXNzQVI7ckU+cGBwXUhod3dVQy5uLD9pXnN7UC58WzU5PUJwajIwLFVqNkYpWFtsRXVRO0JeSi50ZS9MMzJs'@;
put 'V3xOSHVbZmd3VHR8blgjfl5UTHxdJjA2UE8jSkF7b04+RDhmfUNAaDhDWUVlWHx5LyopXjhYOS8xIyNsL1JeWSFbMjk8aD1Xe0YlTm1JO3glYzl4d2VyaTpGVTpkWVJWUD9aRDhjVjJlMyE1OjxkNFE5R2xfYkVGKDw8eTI9ZXs0UD5xQUtdUmspez1PNltXWXR4dmBofi9+fEBjdjRwNz5PYFk7'@;
put 'L3lKQGhBIzd8UW9YX2dfO29tQlkqIVJBXTwqNzk8I30vZF9ZUClqWjRDdVAldipKdiF9cDR4VzRDWEBwOk96LFN3Y1BsRztVX2xtVHJ6aHtISUgjOFBAI0d1e2E4QXBJPmosJnRXOmV0cyg5L3JlLkZ+R2dEUWFsKSRSYnRBPSxPR30wSXE4IyFCczY0N09dRFFlQTV9ZH4hV2tXRnVpdDtUYyU+'@;
put 'JlIkPWdVLm5nKD9CcVMmNlh5UGlZNm9xMmsrMHA2M0NIbm1JJF1kfnc1Jl1lZjoobyZVbztYVFM6b3koTXdtS2hnWFI/aUlweDNmUn41L31EcT5nQW5fT0dtMlh+d3MrfE9sSWM9WU56Wk8uPGg9M3dfNmJSVUU9aU5tOW14MG4lS1k0PCE2cFh8bU8jVCh1cEQ1bSRoTkUua2Q1VmNVOyZ1Nndq'@;
put 'eHJOUXBje3FvWSYrcWlmM1tEZTkwXyNrO29lRjoiXWVIOH1FPW19eHUsI1Y9Z34sT2wudDMhdjs+NjtbdS9pTl5PIkZrOXRBUmtdP1ROIkZwYnMlWDM/cXRsaDhTUCgsanxUdD5VU3dIW016ZD9ScSNfKUJ3IXdGbUYuWlliU1RjL1pSXncuMlJDR2VTLDcwcCIrfUhERjNTa0RnUFFHW3dJc1N7'@;
put 'QkhSe0YldDdgTj5DcGpKZnNTc0hgWXRbSG4uNF91QDY2RWclPXEhVCVmOjJNeCJXIXdoWTFQVi9MW1p0W34+TlgyfSk+b0N5VHVuJXlwZzQhYiRPSk9DOFowNiFbK11lNUZhOCtFazB3Z1ddUlRvdEMoQTlLVDJlcEVVQjl1QGpgTikzR0RFQl9+T1l7YHs6TV40QXU4azRdUEg7OXV3YG4/ekl5'@;
put 'NUkoW24lcnhufDF7b2dINkEmdVZQT3Y/Ry5XeSErW2lCK2NeZENSPklWPTlwIlVbdVtNOSwhRWs8PkB3VyQ4UWxdRlhebWYicCV3Qj8oPWYkTjYhWVdRPG1mNVEqe1spNzNXR3JkZV55TGFfWXQ0a311PyxOISIxJHJHIl9KNE5aV0xtWG5qQ1pjQ0dlISo6JmBRYj4sRnZCPDJ+KU9vVWsxYUB9'@;
put 'WjlvVV5jKElPWDosWzVPVmFCZDU5ZkQ5UVRQfTxMJX5MViROYG1BWEdgPGBKdzU2OS4qLkgyQSJWK3dCfV5mSF9pSHp0SHQ4JT1TUy4yMm9adToqKk4jfG9NRGVVLDEmLnVpYTw0KzdTIz4lNjhzY1VZIUIjTSV7a3A0UUo8XWRZOU9EVHNJTmNfYCFlWmolWz9TQTFnbW1NeExTeyVBVGk8K3BB'@;
put 'ZVZmeUtyOUs1XiVUZUFRTG5GVE0vQ2FtLE0uciNmSmNXSnhuWTYkcktzM3Z4VisvL1VFV3xXWlltP05WZGBeeWRVSWhwYCZpYzJfR2lIREcrMSRNaFh7Iix2M0FGJHJGaGJoO0RuND0+Oll4P0FpIXA6eiIpInZgSE5DS21OcFQmJGdQXiNmQjckaCxKeCs6N2JLS1YwJEBbOkpQezM0K05QRFRh'@;
put 'dS4oTk1MTSZhaGF2MUluTD1oJWAzZWlpTipVYWw2bSs0cD1+OUtYb3tZcVcufmZ+LlFIanpHZV4rdXAxbkJVKV5fQHRoYS5JMkw1IitmO1Y/Plo/WCh9bC92KzBuMy42UVZ7NDBzMC5MMztKPCtXUjIoOkgqcEdJcyN0dzR8NVR3fjcsUSI4ZyJRaC5MPFBSIUpMcDBVe2UoOztIc2ZFJlNOVzRN'@;
put 'WCN5Vm5SU3Z3aDBzSDJgOGptVkJlPHBFLGVRUXd4azw4UVY1fm1XeFcvKTIvd2gyeEVYW0RRNzI4PClUdktNRSQuZmp0VmxtfG1oWjxWJnV0MGkqeFE+b2xUeGskK3RNb3hoe3VHK19yTzBYdGA6az5LbEYuIXxPWyVYfFFkLkJrPXdOdX41N2c7UVBZSiFCeCpfLz5FN3FHLGtPXztPV05wMnov'@;
put 'RV4oVWxwQyxnenBTPnIzb3RefF1KVEBZR1RMelYwezFpdChDY2c0Nm5veFdGa3AmVWN7dXxfVTx6Uz52WXU8d0ZTSHJBdVRAczdZeTJVelAjR0MzR1F8JStkYDNTWzBWRVk7XiYwT2FUI0t+PktKdjUjRT5YYD9DOVckR25bP0RGViNNdjp7fkFPKlJJUylSRVBJaFM7MzoibHYkaiklNmlzPGxh'@;
put 'YU9zKVY+LCtAUnBNS3MrX1hASyNhQ0lTUXpHXjk9LyVEL2p2VFNhY3Q+RzpOdGpBJihLTFJsV05BNiF7ejF3WDhERz4qdlhHdVAvKkUzUj5wKjxtOHVwTHl6eDZYNkByR1IlN3V3aTMqLzdycS50Q0g3VVBoSEEoYnJoMT1eVH5aeF83XyxIVXAiZihON30/bmF4Q201Ui5AMmhwTlEhfE4mQ3JP'@;
put 'XklpcGkhd1JFd3I/Lmslb3Vwelp5VW9vKzF1SGBfIisxfiE6SXBJMUVHKEN4VFI5flpBNj9bKXUje2kjIiZXOCl6OktXbS81LmpoRl9aQFAxRTcuPT5VMyFQRTpVemBSQ3Z1OHM0OGw3KVRZbl0hNipnKzw4OCZ3dDM8RE4lYk1qZykhJVJSW0hqRThhOiN7Oz5jVzFvSyY4fFhOOmAkRDJmZC4u'@;
put 'KUo7XmFBMFN2RkJjbVJGPzlCcE4kVltmQXlkMDxOfHIzKFkrO1ZyKzVeYHprajRRJTAjL2JKIjxoQ1ZSenFkXWNjZFk1KGArJGhwPSo2UXVuZX1dRlkvUSxmUlY+UFdYRFs5Ol5tSDEpSk5VKWUqTHxpfF95XiVYMVJ8eFpxJXE5bXcjYFQrczBoWSZrQEtycTVhVGouNlA1dkluSW5MdWFEOi96'@;
put 'JG9mMmlnRilUJDVfJjBmfEJfKCVIeDN0LztuWF8sQW0kdEI9ISJXeCRiUzF5Rz9sK1ZeX0s7RH1jNHE8aWVdPn58MEovfEVhUW1iTFUsO3c0N1s5aHpYfjpwRFJ5VVRhSGRbTlg/QkBZPHJCdGoyflM+L3FeeUd4Mz9tcWtZUWFTb243KjMkeSxULiU1fmUjO342O0dvVyZpaXNdKll0bVZVQiFj'@;
put 'fE91Wip6P3FuLyptT1U8LiEkaD1pQT5gKzxyI309SVpDWX45RnJ1SmxwbnpAMiM2fSpVUEpeMys8RkxuKEBLRFB2eCspPCQwN0ltQUxnOjpsfDNiVi4rfkA4JXNCXTVBcG0scV1UQGIqWy9bU3FSTE8xTnwpaEl5YGxEI3VzYUcuXV9WKyJgZ2E+KGxUOllFNyJoKnZ2Vng2b3NbaU11VmMkUGlJ'@;
put 'ViV+RGZrR1h5T0U4IzNDfUlmcXpYR2l1UD5aWipSaXovST9dJnJIYHZIQ0VwMnVKIXVOcCYpOGwrTVtUJCZidTt7MVQrZDVacXRZM0thfWZbektvUTRHWjlLUUsyakZDQ25qMm9pQ1VOWDZwei4wdFJ1bWsjR0tJaVFLLn1DYDglUEJpJG9pKy8ydVMvRFZ3TFZJI2FwdyNHSE8rc1pZKV9Ce2hs'@;
put 'eVo+P2J0MVAyVXQ+Y3xZYy9lLj5BIXNvbGo0UTRSJlVmPl5CQl0waURhL2ZRTl5idz57LlBISTJoQDdzNiR2d3pbS110dn05WFReKjpRbDZebX5UTyZqempyOSp9aHcvPWtKa01RRFtvUmdDckVeRndNbTpMKiQzeDxGRG8qQjJuZSwzbWtuNURLMCldXVhTR2tJbT49WEF6Yj1KT2lGfmVKNSpE'@;
put 'ancsTFhyJi4uUmJFaHlvaCl6bX1MS0hlKlJ1fmJ9OiVIfD5CS00pNH02P3dpSjsvVVFBRFA7Py9lRzMiSCFvUUVWRClvej0/TUZYYGhrR0BLd343OS9rMENVIShLTm9vTl8zTXB2fSQ+djZGTG06Q2MmbHF3fmM7MFRWbl4yOzB0QllIZU5dLCt9Lzs8KXg0L3gqUi9DNSpQS2FJdFIuaF5zTW01'@;
put 'KHlrdFFDRUdGS04uXnxgan4zVW4rKD5vajFXK3txdU0kaSRjM2VnTEcvdCg8XzcmUjFGdEpSTCM5Zj5BT09aMzFhTV5qfDFrJWY1WTghQ3J9OUgqbFdiWSVZejRPZWxaekZseC4yUjk1Qj50UVM9VjU6cnlOP1o1b0dsLnd5ZCZDTD99bHx0YmZ8eEsxOFJrWVJOekdyZGcrbkwwLiw1dCNDcnZ1'@;
put 'TmZtV0M/Q3tTSyIseDlecyxBfTVjMkI3LyZfdWVXPjJgRV9dfVBBWS4uRTZuTnxUYWQ8aXtbWF9qLGslOnViTzg3T0xqeXhQflBwMWZYJXg5YEdxMExPQ1MlUHJWIXd3X3RuRV56dj1KN0wmZytZfUxHQkVpPGZ9cFU5UCJEM3YzdG8rTXdlMSxgaj1QaXEwQCpoOFByZ0dFam06QHJbKno3Yi9Z'@;
put 'Iz1yay9qaU1KPiEucEsiPk9wWDEuMEN5IU1dQENZVCEhcG8pQ1M8ZVM8S053cC8mMSZgQE05TSxmIT55RlU8KlpVNi9sJWFZS1R+QUMuQVdgOU1dfGclVnwyaiQpVHdXcF48XylvU3QxdzZvMEE2azNDSywqZzhnNTdrOn1zS31LQm13aEVZJD9eMT49cmZeO2tkanB5X2g4VEU4Q10oJld+YFo1'@;
put 'eiY2XlU6IzYvNWE3LiQ1aix4X1o+cCx5NFBNKV4vX2tkflZYUV5EOCFyZkBgLCYidWJNWmZjJFp7VUFeQFFZKVRaQUhtLkx1OXQ8Rl13PEhLND9WN2BZNCV5K3coYV0pVT5jREhIXlEpKn0lJjJwcntMRCZ+N2M/N0dnZFR7UlBQKzcuUmFnW3dLTXdWYkV+YlNAbGBPV21XfDgyU2lmWEJ5TnA7'@;
put 'bXNCdmlQNXEsJV1eTjRhe09DPVs6cTRANG5eN2BkO2BPJmVLan5dPTh6b2tjVXJqVnZnSnZtRGNbNltWRmQpeEJLTUB8MEoySUwhbU8oanUrOVdubWBEWjp9KVd8b0hYXj54OXIvSExESz1+fEtSN1daJShnfTFxYD19QFI/MDFvMX0wR24lZTAsdm5RTG95JSkuJGMiW2NJfkJEQjV4PCE9P2lR'@;
put 'QW1hQT5zc3EpL0NAKitSMDZdVlsvUTJJeGEvWWgwaV4kaWQjNSM9UmZZfjt9JktRNHRNL3FJSDh8U3xeZlJaLjRXXyk5eWF+UmYzWGdpYmM2XzM/eSoyU201PT5dJGdJZipbZGZZYyUxMUhuM3RXQUhCbi48VVIxJHM3eEFGUWNbJEJDcmZZJWo7I0tIVl9nYy42JUQ4dn1ndixfXmhvRCszLG50'@;
put 'KVspc1lwbXRaPj1AYjR7YjN7aFg5IjI+LE84ZnYiY01vUCwjJHMsJHJValQwfTIpJE5APkxLTzhUfWFCaTBzMm0uZHs8KWtQdDs+XnlKNDRva3ZIcjdkSlAvZmEqSnhIZlBIMn1xM3YxZzomMTZILHIqWE9eUEJmUDFvVlJzNWpse2Y3KE1OdDQ1S1VEMGZBNV9CZn03czNUOW9ufj5vL0V2fkIw'@;
put 'V2EhVjM0d0xacDljcV1wcClTOUNRdz5dOS9bekQlMUdQM2V0OCZ8Tnc/TE01aDVRbmY9eX51e1lKdGxYfmV2V3gubDk2aCw5PSRzfWdhbVh4LnlEUXdYc3B0aGw2WXpvaGBjTlk5VzorOXU6LjgwZHU+JSpJSUloaj9iPC8haG1MO1FyTTJOeT90NSlCeyRkOUJSdVRxbSwsT21Zbj80cTVKe0Qr'@;
put 'ImRObWE2cDwxczV2Vm8xSDdYP0RJWHx1MVMmXXRQTTt5dXFAbl4xJVldajRjfTdpJT5oX1FYYWVPUytUVjljfUBqN2MkX15OVDszfTdCMT5jNV9jUCNeNTI+YFhzZV5JfiN1U2doP1hAVCRtX1NYI3ZpOD9nPigmQWpAYUk9KDBoMDcwa24jeENENCVTP3lsVUFEaWNbQ2p2MEMlYnNnVmA3XXlQ'@;
put 'altIdWM0JTYsX0ZzX0ZBITh0aFUxKHNiOiFUUmNKVCg5ZSp+WmQsPFducDAyQkklY2gyYjleM0dfK2tjU198blRJKEdTPTM9QEtrdkB2KlJOJCxXN0N2THhZYyVLfWxgVGwzWWRnIUNLbGhCak8wTmkrY1FWeDlmc05LPFU8OzowdDlrZkJRPX5oITNYPU19flc1fnp9XnAmK0JgXmp1VThlKU8w'@;
put 'dj8kLmc+OVY2Lm1UJEhuKmBZJmQyV3JubksvLmppMko2WmAvRWlge316d1A0fj0vT3RSXj9ofnN2THNTV09ldHMuZGhTXyo8RjJTJlFCYnp0Mm1GZiVkO0ozP3paem9Jc01RKlBfN1dgPiJ2els1aUR8eDsoLChdcHVZPzQ3S2dRMzZEJCRPYSthZz5mZnAwQjoveitMJHwoJT01N3tTfTVlPVNe'@;
put 'Tm5JS29rd31LKylhMCZ8W0Mzek98b3BOeFpoeXN8RVF0Rzl4QSJEIiN1JCosYjJNNFdSZDg5Mlk6QU42SD8wXmJobGxOams8MT87fHwsVE5NYER5cD8/c3c6WysmU2ZwI3p2ckN7NyldeElvOjF3dyw6ezJqZTtULD1OSn5yTX5bMXIlbEIhUElqQEc9PnZgSn1CZXdDXj4hPlBoNzRtdm80UF9k'@;
put 'L1ZGeSJ8X3FuZWAhIkNbXnFPYU91IilQcD9gMWM8L0tReWR3WUl+PU9GbypeQ31nPztKX29sUHZlZjBrKWgpM21weVFeXSxKKjwycHNjbSpMOGF2bGs0fnpacDg9bHRDLyFGTEIsc1RBQ0QocTRqSDN1JiJeamhWUUsqVzpzOEY6K2w+Z2kwe3lqKXdlXzd0I1F0VUhuZTc6RmoqOns7LzR2YnZ2'@;
put 'clJKVnVCQX5nVT9GL2t6PEdvd1lAPjN3KGRIWDxMYWY8OmQyLnc+PCYjPT8pJndfKHdhWjokKjVMJGQ5bFZ1KlliSFFwczoyL3FdUkF6QUNoNmAoNVJTe0lORE9VQVVbeTtle1o2TSZYdUg2TmB8fUd6SSRsM0I3PkUjUEtJMyM5c0kjSG1vdTdiYXFWUjNKWF1BR3xGdCgxPlVSb0NCWWl3QmJ2'@;
put 'Y3EpTnh5dzV9eGxKflNFM1kvMzlraXEwe256cT9ZbXxTTWkqRj5aXmRiJU1HWnQvJH55OFh8PzJXb1dBfi9dQywrVF8jfFlFLihdYn0od2dUSFhxeDFCbkNOTGJsVHFWeTxbfC96eyhAYDZKVFkyVHAvfHMkSkReW2tfMVduJm0hZUIkbjhIKWo3KHRGMjBuV0MwJG1hbmYpV1p8Ni5RUVpqblUj'@;
put 'PztIK1FJIWU6OHt4a2NZUT1QWS5GJjBmV3Z0SHtuTTZIMSZeOl09Vj54V0tYbysjfE18OyF2ZiZQMktKPGEyPVYjWmxpdV86L2EoNFByd146LEc+eDo3ZksmTGVRKS9jX3dLJWN4VnppUEpBY11XJSRZZD1lTXpKMS5gZzhYeiowK1JnIkg6ZjMxZ1NwUC9zVyYkMHs1bmkhM19zfUtYNVhQSjUk'@;
put 'JXJROUQrd0dEd3J2WExmaGUzenk3ZVJUflgsV08xMyxiIUJtOWxOaCsuITM6L1o3PmBjflRUQ0R1YFBrXl1MQkJLTmZmIzdESjRiOVVtNj1OZHhYOCtnREQvaVJ+N2g+fkBoOzUsdkJHP10/OT02KS54Km9xSm0iNTxkV1IiOn1NbGJ6cWhFPWp2bFhSL0hWdHtJIVB2JXVlUWImYGtxSTcqan5X'@;
put 'XiRARSJqQEdiI1hgOXFgX1lkbj42ZlRCdSQqSmp6amBdZ19Zb0U/aWpuJGFBVyR5K01ePll3VnNUdyFXe1chKFlDNk1iLlpbc0p1MDNLS2kvMWJlRXhLWjJrV0ZYJkkyTD1UdVduMHQ9SldzQi4+VjIoZG08YE5ePyMqby9xaHwvWywpOHh6cntfN2l4dTlIPzRRdmwvYWx8SnFRflM7bSVFdUls'@;
put 'bUF2IWU9QzUhe1soW3cwZzxVZDMweWcxIzVVOHw/JjQpJGFLdD8vP0k4KCVOTCUiW2RedlJYQHEhVDBqYXVQJlZFUzp7NHdjL3EpdHdEdEBjaTlkMExuO3U9SVp2Pk1mTGZFXnVVb3o7XzlmS3VgKGZWIkd7ZGpmdnRAYDE5UV1oaGF5LHhSPDxuQCV7YC9ZSDxsPVgqczo/UXlYeEE2TWlsbCo0'@;
put 'VG5YWDRIO0dEPUs0UjFwKl50TTk+Oik5NjoqV3lOSEB2WDhxeXRvMCNQU0tBPHJlIm9zVV42RE4+SmRZb1FySFEjSjdsRGgoNm9STVtmL3wqNCwxQmlsRS85RmRDRHhPW0ExLE5YSnY2Ui53KiN1YHQmSiZgQn1KLnpqQ0swPGZ9NU1ecGUvO05jVFFhSkhDbTw1RjJ0cip9YFAsaTlAMyZ3cVpU'@;
put 'SVBpezBoPV8sIW5YeXIxYTN9YHNDdjc3PV4xKGN9KSxeIzRuRFZsUkw1Ky8jM2o2MWJPPCVjSXcqYDBITzcucXQ8VzlDYjZzKFg6YH5se0t8bn0pK2F8fHkoKk42bEVXU0hDW1g0ODt1TllKZ3tQWzQ+eUgyI2NjK3pDPGhlMG9FTFtSX1tCdih2fiROQGNEd0AoQUk/RlRvYzMkMkNEQWIxMVIw'@;
put 'MW1OQzVXRmAiU2R1Z3IhNy52PVpOTF5NQXRMMz1AfkU6VX5eO0w8eHZPVGhRUlFhez48WHhZYEEzMGp1WUI7YmdBOEVWYSFWVkN6VGl2Ql9RfGJqOVl9cU0yOnsicDs+QEwwSENGPGpwY3sqTjdiUkhOaEx3UUhsSy5RdmNdImZbaUteX21GdmsoWEswZTYlbjU0fWs2SkQ2LiJaVHU7SUV+ZDg0'@;
put 'Mml6QDAoeFdJUFJQX3NkfHV0O21WSDE9LFlYRmxoIVpZZDVLVXshWk1mdngzZGdEYG00KWp9TzNoM1NFbTh+aDM+RVZEOyV5XVh5VylQb3tDRDA3JDF0eD93U0YqaDElYFsxQDp9VHUwfE0jb11Kc0J8cWZPXytTL2B7VU13KyhNYmtLY3UyPSNzQkhDI30pNVpJVyYid0Bley9IJEI0YW9VQF88'@;
put 'O3oheVN1ZTBRWjckZHM3MDssZkxCYUE2b0kpPlg6eSs/VFI1LEdPJD9KZk1VUnZoS1B1NHh1Lm93VU8xQnxdXyhoYD8xOSQ6Q3VHT19gQzVMQXVQQX5hYXVXMVVlPCMvVz5VOlR8UD9SN0l8ZV9GKWs9WSFrZmt8ITEqYD0yUEA8ait6TTY8aTNdWmVlXSVpYmsxZUc4bjhAV34rTD1bLkFeQXJU'@;
put 'ZEIoYkhIMSRaNWhNR35UbE89emN1VlpBUl9QOS4mMzs+M304MnF8UWFjOyVkZFpNKn1XJiNgW0tsZVUjRk9PNSowRjN4Sjx4Yk43d3NxcTRzTXYvKEtMNFJwd0lYcEN+cVMrWW94OjkpKEJMTV87d2g6THo8eXZhQFQjOEUkNnp+KnM3bjp9SXFTQjlxMn0yVltGZCkxKE5kWDgrd0ZRemYqVm5r'@;
put 'L314IyJ+OnswWWBuZWc4T0xTbzxeQThpSjZLTWVqNlMieil4aFtnUSI3PiFOZGhoZkkiMClSTVtAeEpYLCg+Om0zL3pmanV8czx6UGQ4QX1NWDsldF9xOyxoTjdicis1KFlXfEJ9Smw0PSRhWWN0JUNCQGgleFVzPmRMZj9WeDBEOzd5b1hUSGdvYlsxPXEyWyxle3lWMWxYQ2UjYCI8SU9ZcSF5'@;
put 'ekJ3VkNlSTBNNFNpQmZfPkd5fFtiQnpbRWk6ZH5zfExRXy5vYjsjSztHL2x6X2R4fnpNTjwpcCg2eSlabW9eRT51Nlo7SmhBOjhWQXY/XnJdbGoyZVRsX0JbKDhMNUV+TjRFWlB4SUsvJWNvbXUoOy57fGtKemd3Ty5TYUwkR011e1hvRChbcWpYLCYxPTxidjs8cj1DWm5Wa1Yre2BjaE0yakFT'@;
put 'SStnV05XR1NWdzdzfixJdFowJkt5Q3xIWEVRMUVHR09pfC8lfSpoZGQ5V1NJXzMuQjoxcl0wcUs2UTokO2ZKb0YlITJkOURKKTxFZzV7OjgjeGFqODwyNHMufE0lcndkWyhsdUVyeltsU0VpZTR1fj15fDt8NF9TTSlee3NQMj9ua3Q+fj4ocSksRXsvajdSeXdpaU9WaWhtWzA6eTlKJT5bOkVe'@;
put 'RiRQYyxeJDhkcipvUTxMXWdgVitPOSheaWBAOlJ4N0smLFk7PjBbRzRxUS9eZjhWbiN8b1J8WzBoUTk2VVR9KGBzMCtvVDwiQ31veU90Qyo7Nl1IR2wiKz8jaWUoT1hBaCtgUEdfOz5Cdk0sJnMrWzR5Wy5eVCR1YU5bfSJBKyRWcHFGYk8ma0tGfStedT09KEFLKFooaWkwUmNUTUllfEVzXlJA'@;
put 'PzVhPUZ0eClMdH1jUFRKPygze0J5dyI+anMkOFBmPmtFb292S1ZxaUxlT24lYiJsJjRSaXx9W0NPfnpjbXpsck5JWFZlZiJqWFAoWyhMMlpGc257aFVYQ2N4TTRyPUJ9KltFISk0SHx2cjFVN05BQ0B6NF1Edlc+YF5ORWZHdSRJdTNRLiojLDAoIXRtW0cieFdnSS4kTE9zZCo0LyVqV19ePyoi'@;
put 'YTBNIjc6I3hDbmI0dzkhQ0lBVzdocl9CLkBpX1h5R1slPj8yPXhwSmVSL0JYYkVUWi45NF9tInp9bFJmNSZbPV1lSW1xZ3EuYHhfREFLVTdMVVVvYSRXKEZ3PT0/ZUM+c0JIW1grfX1bMWk5RzhWUnU4NEkkKEJVJXtbfXU7SGAvWU5RR1VUSjl6dlVUaHRMT2g2KD9XS29EVlZaMl01Li46S0g9'@;
put 'ZFVTfmM2aEk4QD5gaHRuej1kWjdXTVdZK0xmI1RaZS9Tcmgucm1wWG1AfSU3U0Aqfk48RT1vYD1KYDhTYFNGM1A4ZTMheGlOWCt2PVtIZFsyW2c/cmBHJEk5S3dDT1JLW0tFXkhzeWJTPjd5aUZBQHJsMkN5RWt9VzNGYysrcDckKCUsKDFoezlAI0pIT3FNdDFKbTNRX1RgKjhMMSlBaGR1blp2'@;
put 'JXN9ZX19JXheKz5HbC5oVzBTc1E8RUxXJU58bH07eGQ/WklPNWtNNlc9Mm5ffnNfYmtaUyFhXXBiYjY7bkRBeyp2O0RFUFREJFBCdH43SjdoXzJmdU52S3EvZjBSQT1PNzwyRVk6NXhXcE4ifjx1PmZaeHkmWjVPU0FdNno3fkIqR1o9UD5oO3VqOjxKJXhGVHZFJWQiTyxycVNxdHldTXQ/ZlNq'@;
put 'Yl1PeGYyPDFhNHwmQ15HKjM0WjVWan02YmdIaXdWVGNKeHMjPWQ9OmhuYW58bForLHIqRUlBcj1Kcj4lKnAoJDpoXjBhQ2Zkcis0RmEoTkBwZSRKLz0jcktIYzlYdjdQSz0/L0dEK0RTS3o4YCtKV2Y1ZSkicGViKSx6ZT15Pkw3KiZJQHZsX09+VHVmTW9KV3lQXy86bmhZZG5rIUhMOyMobWF5'@;
put 'KUhxWEwxcDUkRFR0JUpKQEttVi9WTCtWX0ZGJnZ1VCtVfjBAYzF4VjBAZTA9aCZ4dFUiPCZdUT1LUjBKXVJQRDwvRUZQdXovbCRxOFNPM3k1Y2V+KSpfSyJVYSlHfDNWKShrUkJjYzFiZHJjSmNAcVhXMmdPflY5Xnt9aUojaGM9Pkg8KmxlO2cwY0Z3UV5wZ0NqK09uOkxAPXY+WzFsYkx+QEsw'@;
put 'KE1uZXZUTGYkX2VMTiFkWiw6dyxAfTRwbXptS0FDS0g/ZW8rMm4zOjgwNH4/RFhOKDBwLkNjQGB9KUBFSihxNyZ+WkNZUGdffF1POldGdUt2IVY5Wnk2a2pEcnNJNzgmNlkyQkQpNEtwYyhFZjU4MTVNPm12QzJ1IXRMWF9yTHVNVV9MRWw2L2EuRUBwSSZYTWYkSTx6KDEpLDZXS1NKKlhxU3Bp'@;
put 'WS8zMHkkKWZmRDcxSmdFelMqYFdmek00Uzc3Yyx2UXtyYUs/QlBKYEA1KGdVKUlIQkA+KDU/PU1xTVVAZHIsSnw/UFBmTjQ2Q11vY0QiLHtoSX49YD84QTJKYjMqQ1lNbnBAfUomVXE3Pj50TUR+KUh2WmM3KiVUcjJdLnBXOmBiWDxeSlYwRH1FUERgLGAxNmRwQ2MqJnlXPENlSnlESzg9JSlO'@;
put 'TSFzTyxOPipNUGUyYjImMnNxSWR2dDlUQiI6X1NHXnAzOn5aJjpFcnFrYDxqX1pKfDZuU1AsKEVJcWdlSkQjaDcmTkR5fnZJamtwUmxLQiMpMVQvS3hddG4sRDprelt3amlrMnI3NTk/ZDRgMzVefWgicT0pdld8e3FfaSlJRjNDLG15TChSYjtteldWdixQTCxLfXdMRyRHIjp4fSJ4Ly9lb2kz'@;
put 'MT1hJX5HLE0qekMiWHw6SGcxXiskL25ZT2hXUzo4ei9XbURxU0JgJFM0JTJQU2c9UUApeT5zJVsqeTkmRm85XUdvLEV8UXpiT342IjY0ImJzPXQ7QTlRfTBUSyNjNWJGUzhkXTpdOTVZalRbPW5LL1YpUGU/Q1IrT3hpU2lBJDJAWS8wK0kkcm4iOyZBTEdSSHpkeEczMHB6SzV5Wl9OdmFTfjw6'@;
put 'OixdKS94TzRHRUZrTkpLSShONXxrWElEaGUmRT5TTEd4PDRgaURIaC9vdjVNS3lFdig4NjBOOWkhQiI+Ty5nLmc8JmhdYkRVa2hFLCZBbCFARXc4WHtmcGYlLFlnRnxqMjxfRS8vZy5RbCxQdCp1R3ZbX145TGYsZGQkcjcqVHhDUmQ/RnE+e14qbXZrWFBAa2gmKzIwYTAvQ141bUEwRF4mVDJe'@;
put 'MVAsNEIufkcyfXs2OTl+SVFuX1M8PXh6IUoyQTw5MSt6cDd3SitlRzdEWTB+RVMyYDM4JF9pekNNeS43N3gqRk5oTHxzYDhMUzg1LmFPPy81ZGI/Kys9K3UwW2JZL0I2UXxhRjZrNy9zX01QQl89TX4pcW9bRiFJdCNLL3VXdHteI1EufXtGdlordFZtZDpxNC5rJWFMLkUwU3M4N0dAVSt1ckso'@;
put 'WUxhfXRgPUMqKTZockY7NzpHOFtkSTYkcTdjdWlNJm9SOnhuU2N8L2ssdDtmc0lVLE5YbU52PjlQMGciUDYpTEJJaiRzdHVEJUxiPlU4Xyp4V3VYd0p2IyVKe2EoP3U+dSFMNiEqUHRDMGQ8blR4KlZDfGNDK3thPU9AXU48Nl4sREVBXSJLODIsU11MOlBqM19BT1V3Q2tGL2ZAJl5GTFQwIyQx'@;
put 'Zl5XPUN8VVt0aXNwLkZdVChiNmtgLEQiXmRvRWplMls4fnh0Zn45cSVnJDhvOWRUOyZ9TTw+VyZaJWtYL0V5REVAQWt6bHBWP1QsMypGLDJmbls+JGNKIlh5QEQyZCoiZmdTTFJsaipOXiRnO188N2A5VytYNnNCeiFmPSwhfEA3TW1baSUpVjwwUD1SJFlUISU5Vls+RElqVEN3QyhHLDhqbVN0'@;
put 'Sz9zYCl6M3BoJUQ2a3ZMVVF8fVBkQDV2TTh0ekJWcjAsXmErRndIIXEpJF1xQnk2amRPYWtyfWVmbDxRZzooVStFSC49dFh2eW9fX2l+QUZmRC9fUEM6XzxfZ2VzPGdeTElAKzxdQlZWTXx8fT41WUY1Qn1vbHR+OHFTVkpmPVozMXxaSmxHaTxpYkpIKX1xOH1yWmlOMCRzeFlTdVFXMjBnVTYw'@;
put 'Uno7OVUkeX1CLyZodzE1KTdnQmNwQ2YiPFYpbFN9bk81OlgvWH4qQW5WKFIqIihXeCNvJipTSShmST1DPmlOQXJPUCtNJCYjNiJlfTdzWUQra10iZHtqdnk7Q357PWJuXU1gbGVuYi8sLn1tVkRVdV5OaXswdkAvTWh7b352RmlLZURSYnwiWCs6SThyPXh3LCNKTX15NU5pbE12JFZMdkBpej41'@;
put 'Kiw9UkRXOzt0TDJwPVhGRCUjSH4hXUZVV2MySTx4MTxiZW5gaD0lfGFHM1JGQi5AcWxsVVQvd3ZgeXV2NHYhM0dybyt3TE8jVyZ1b0tbQ3RuPjcjd0x8XjtlJFJ1e2FfZShGTnFhe2wvPkhgRGhOfUR8SCg3Yj9MfWElPHp3eExDaStwWCZUQC9zfDtdMk42Q3hUfDp2OClHQ15HWiVpT3JZQUwv'@;
put 'NDZYaHQuL1NRMHdVOlUpWTN0PnhedTEofXtxL1tCJj9EfUJ6bVNRa3k+P2lBVXp7bkdfLlNSYHYzZ3BQeSs7XVNZcVA4Ung1OV4wIlZnTHU7NHd3UURjI3prclA/VjgoYDZgT1BSKUVycksjN305eGRUdzI0dnxATWQsT1ouVV83Xkc9QGNYTmpHc3hzODltUkJTNzdENDtgKnd0WitXLz1LXjBe'@;
put 'YnlPLGV9ZyhgWFk8YFouOCVWOUx9Xz5aKklxbHlfdi9pUF1DTWIzPEUmcixjLCokOjN5Ymoxbk56MHZyZ1BhQVFAQW1pRnM1WUIyYWJLYWdqY3F8K3MyZzNuSzpybS41UDk7N3tpMTNmV3MlL0kvaExoUCkmKTRDdjlLJSh7JkxOX2RaNn0+NmE5QUFlbzMsOUxXW3Yve3BwUTNsfTpLZ0BLUzla'@;
put 'UGB7IUU8eSpibFNebG92RUVNe3VzJj46cy94ditZKGxacjB2VE10cltWNiEoPGQ0ZWtIW0Mye3AuOEc7JTFYTmhhQnAjR0ZoQWBUJmZYVlY6JEoic35ZJE1kR1FhUWFmKHJrLEk7aWYsQ2heLG8xRkVmNXhkdzQvKHpoZ1BaaF1uVjY4bS84c3c1Q11EU0BUZEhUSjtjQVtbJihOLz5MdTlZaUEi'@;
put 'TGJ1Nz1ZY21mQ3B0dSV4LlEoeGs9R1NZWE1kQTJeQC5WaURLP0N1JFopK2RPPEo0VU0rWG5iIlM/WTgqaFF1STNmW0xSN2ltMEMsa2tOeHpHa0ZyLjIjfWhVNEdZSCElUkR8ViF1WG59ZUhPb0s2cHBsUX4oZERUNzF5RjwjYUBHdi9QbzIiM0VHIzE+Xj4jLGdvbiNiKUUoUzhaNDM9Ryl4RVJi'@;
put 'Ij5GMDw4YGBdPTI+M2ooOm0xYH5uUWluOFJyPEszIX44Wz93NFhTMXUvfVd2OVFuXXl6S3QsR0c2UUxPKW9HS1k0aWU0bkl3XTA9Tk9zSFBIN1JsaGhzREV6L0dbQyRqLCJ9Ik5jJVlCZXdeY3ZfK0tpJVF8QDZlQUZPdUYqQUQhPihtUENfQl59Mis4eShfaUJeNys5KyZFKHpGUk47OThvQWFq'@;
put 'SS8waWZUIyFjcFVhbEpuIzQsZGszNjokeUVsdipYJHQ/bWJkUHVefXgpTW57cnlIUT9ARjh4S2Fdd0lnXTQ5RzxQc2hXdnVMMls6PnxJKFBdTUZdNCNpbltfTEVtTEdrfGd3OGBSQlFSXnw7eEoyK3ldMWxSTl1xVjNsRnwmWkI1ITlsZzEsTiZ7TSxRMkEsN2BvalhtQllIXjZeIUthYXk8YzRi'@;
put 'bSViaWw0PndmNG5ROHJBIlJUZDg4Okx1Oyw7RlYodj1IYE9OSHU5I0c+X0oyQXxHbD5Bfk9uS1JvIjwkMHd8OFVNKClfOXxrKnhURUViPi4+ZHc2MWd0cEgxSHw6bG9nPm9VOm5MS3ZXNV9TMGtDYHNqQnQ0aHx4Nm9MPmwuVDNUXiEvTEFdc28hR1FtNlozdzpIIztgKj9JUTtEWFJhaDIkUWNG'@;
put 'LFI9JEM5dSF7L11lJSVdOWkqM08lb1JNQ0woWlpGRkFAMH1kfXJQa3pjY1lval5YTS8jU3Q2LzUvbnlYUTQ5QHdnQnFmTz9iNU1+KzxeQzhdRl1HQXFBfjUkUjAzJmc3UVtAXXx2VVU+djFFfSx5Yj9AUU14eyV3ZFJgaUkuIXhSRi9hOzI3T3ZhWWtOeWdzJVNgS21rI2FgNHdbOlIidyhmdjU7'@;
put 'OE4vZkw0NHR2bXp7XihIT1RnaEghZSwzeUFTSjBed2NjY2YhJWZ8LGRnfGMuJHA1ai4xaTlkeG05dCZCcUJmTSFDLkJuWE9DUlMoOWRIekVtNDJrJCFzIk1sMW86TDNlamtBTmEkb0NVRFQ7P0g6M05IbXg5K1tmZkR0XlJ1QiFPO1E6V21WczY0UVJxO15lNl01bF56TG8rc2R5dDRpe1NNL1Ar'@;
put 'X0lvQFZYMTRfXiQxey8xTEtdYXd2TSlDP0hdPTJTKH5aT0JabEBENzlkblB+KmlZKnZNIlJndV1bfEx0R11lMGVbdWBNODIxaGlNY2ExazA2WGhoTTR+cW13UEghJDhyMFB5IjRSWWVXWWUmezJ5bCIxKT1gYmJdTm0qTmdAQEkqXltYTj1eYVddRyRIVGdOQmNmPlFWTURQeWdmMGpMOztJKjQq'@;
put 'NihRbVdCUTZ1SVFKTDphZnhBX2piQSFDWGBaPFV6SmhzTjQiP2x7SD0wdU88eEZ8PXhidjxsdn5BPFZfV0x1b2g6K3dSXioxUlptc1JsL3ZHdllsSnthcHROaWlsVSlUSmJVQStDQHJQPCZBYHN5R09qJi8jaU1Cfi90TU9AT3dwWjkkPng9IlVNXnFsfFRYTE9xTDlsdDkmLENsUj1MQUQ5Rnci'@;
put 'fDhtOXw8b0lDb2w5UlRzLjR+LEhTckFAV29LaSMvfTZqdGtGcnVnfTB2WDU8aWhxenUhcmxkZEF7OUFAM3oiZVEoOzpwY1F3WU07PmU7OklTUlArL2V7K2tqO3F7bGtvLGdZYFtRIXNKZFdrdzV0bzd6PFEhKSJvIzBOMFVWMlU6Vl12VXFNaUFlX0t4JFdWQHhRK1UsXkdWUHteUDEld0lWIUpX'@;
put 'bjJ4ejpBQUBLeytCdVQmVzpZMnRAfmMyTXh9OFc/cH1QK3AwQlRUfE0sNGJLKHtJYUM4LEphaFhJKDd5SnRCfj9KUzp6IUtLfnRHd1ghdE13R1dNdmdxXiNdV2BUeT91IWIsfUszemVVdzN2MWt3T3lCfTRqMXdsO0VDeC8yWjhYTXFVNjdzZGwhNih5JFtMNl54OzR3dCk1VEJndndrSmtfPnsh'@;
put 'YGRkP3pWTE1wL20vZyQxOyZ2cGI6NTQwdileV3xUX1dKWVg4a2g7YUs7YVRVci8+YXouWnErPUw0WmEoJStudW5HL19GWlQ9b0Y0X3NyfFdxK1pve1Ftdz97XlEwM1NRKUtBb2FEaUgrLFt4TEtUcCpWTz5vUFN1IlNEJklUNk5fSyZLaTtHN1tfLEZpQndtZCU0Q0hYOVJEPmJqZXM5IXQ5WUxx'@;
put 'SU0ocExeUmNWWyFrKXwxREJrQmpkNGxgaS46WW50cGoyaz9TXThoXlNIM30uInBMe3hmTT57XXQ6QzpdRnFSZl0qJl4lUzdBZTw6fjs8ayE1O3xIPjxxOWlNJThtJWE8RnF3dEhoNXQ0Y1IsW2t4OTR0SURWeDM2ZCx0RHg9VHYmPiQiVXx5Wjk8eClCfmsqQTUrcy9uUFhVWFpwI0Njaj5oJEFE'@;
put 'RUM3dD1VeTVULDgzW1Y0ZT5teW1CdiRGaVNmUHZzJTo2JnB6I3lFbkQ1aT89NTZ6bWxjUWxbdVE5dGpaVDtteyU/cTlpQ35ldTI2ZSUhIUwuXnBdaiFhVzAyOV9TI2dfOy9FbyNmd3dweGMwWmk/b31TTUY3e3BxRnc+cWUvcUYqRlJefVFTcX1tfVhCQzFkNkJ1ZD5Dc0JjXWZaITRHak80Nixs'@;
put 'L0d1STojZ3g0Rzk3SG5iaT9KZWRkZkA8OWtaTGxnM35Ra3JCQmV8XVpKe3NlUmFQdTcxYjxCMz53MFBuKmJCIVBMTF42OkEkVXE0YTlYdixqK0g6M1ROSHZTNW53Z0IlV0JbR25ESF43VChTYG0xXT84OldTPCRkUEZMOWpWR1FnMlJ+bTttXyYxTXBAQ01udEpWX1huJFlMV2tQUjVyaFAkXlcl'@;
put 'SU5GTTJWempMbVlhXmFwdHRMT01ddjpEfEZQZC8xW2V2amFfal9lVF0yXWFLOjU9NH11dUpnXTlPfG8wLnNOOXh3Pj4wTylIfFQ4PHpvRlhgQi9DQSkiRzg+fkM1bDErYVIvQj9TR0ZSKTo2Y2FFYE0/KiNvRER3WWl4QE9RRU5DNHFQN21sR3A/ZVtddCMxPkpAPXE/XyEyMTBOdVp9OFZSPD5Q'@;
put 'NVE5UDQ5RHxHVmhZQFJGeDgoaG8uJkMpV3NwO0hXeEJDRUlMT09NNylvVnFCImM9MC5PMXwiPEYpQTM+I3RfTzFwP1VoNi49OzthTW1GYiEzM14jTUcyXmEseXB5YXExP1JyY3xFakk4WCZ3bVRgclpzOH5iPiMvPiZ5WDMmWlI/cmtqMkkuRVdELmwvbTtgM0JuZHszRzEsSkIveHVlSmd1eCpl'@;
put 'USJ5ekA7b2RLOmYlSXpadSp7TXdrUmxFO1JhS1t1YFl9Ki9Kb3JPNkFGIkBkKHZyRj18ako+aFJqZCpYV2I2QGhWcVh5bSgufDpeT0g3WHNlVEc9UnI2e0tjXittRWNiWXk+b0dLZCVWOzxKa3l6L35YXkAkRFJOcnVwPGhJbHdsaSUvTUt0dUVMbng9cWxmYStBPTwmNCsreVtDVCheYzQ6S3Ni'@;
put 'P2tuMUtea3MuK1V2OWZvO3x3NCRnRWtDYVQoeHpFbCF2JUdlNT8pOkVGOnY0UTs6ZkRra1V9bzZaPShaQlZXfio/KFBsMWQrRCg1S0RxSkNafGRyeCRSN1psUXsrdXVOayxoTDtWeTpwPEBgYkRMRVhwKGE8KGRbIi40emYsOV5maTpbYnNjOkpMRVgsbX5bdFJdTCFTbHBMaShALCU/c2BpXXpE'@;
put 'blc5eWsrb0xzTSxsTktrQzQ7fnxUYHl5JShucUspNitFSDkzeCxIaGtfPDsiXlMhTXR7UnJnV04uaFU/PSp8anNCNUdZJEpVTnFZUmUuXUQ6PWE7K3RGOGZXNDo8Ui9RKEsySV9rX1o9Q3V2cGE0S2Z7ZUhHUWBVPk5+KDZxVTxMbFZrQUMrOE1saExyTWFnViJWRUJsbWFuTkVofUcicWxORDZk'@;
put 'OFE2TU5aOXFzck5zWlRgSXZGQ05WKGEoNiF8MTVbfCV+S2RtP3JbfHZ4Pl1DK01OV0ksJlYvKD1uSCthcmRtQl5tPS4kOD96L0MjbUU1W0VYcXk+WkpFMkkyfE56Jj12TGlaXjxCXWUobl4zKnBHOkghbmV2YGpYdmNMcENfNVN4VnI5cFUrJU9UaUJlMDNTS3VbWCZaa2d+PHY6WHgyNXIhZEpT'@;
put 'P0A6OUsvfHZhWysvI0NwO3RibzFgfmguRCJ5MylIKFJSWClgeTZdRV08KU9USyM7aFBEYUZBeFJ+cWtiQio8O1BKJnJwekwxK0M8JE5AaCxDangyNSxedGdGaHY2K219UWlqYyIofGh2W1lGeGhYLk9LZ3E2RHd9X3sjIl0qPGNBcW99ZHRtfmo1Rm9MVyMkRyhub15mb3BnNmUhNClSPlcpJGYl'@;
put 'bnM2YTFxZkZIX1hkME1mWDNEUTcvJjNFME0mMml5aj56NDgxN2ZuJSNdWFBiZkQ0KyI8Z3I9Ulk0R1ZeXmBEW30sbWlUazBYPXVzREB3QEFycG5eUnJMclVjezZ6WFtoXSMke09ObV0rTTdZd1MzN313fF0zTkp5VnVnWF5OdDY2JDJiSmpsY1AuPH5fIiViVCl0YH5bN0lvUT1JJlRtWm1qQm0u'@;
put 'NWAwQmlGXyElcEVOJXUyVExlc0x9fUpMPyl1d0VJIUVMSn5rLzx0NnN+cls/cz53Ll40U1lRUlNqNzgyMCVYZT5KWiEwRz1kOVYwIWRwPFBZbj8oY3hGfClaLDNRaFBrXi4uO25EKUVXKUhYbXl6Siw+eTc8JkBZU35TQS5xMzVtWyJScllsWnQ+fnshKTNQNkglSm48KDEvM0pySn1jTzdTZnNP'@;
put 'TVtzaTRQSn0lQXB5KEo/UCUmZHdKUjFpVSIvfFtXUURhdz8/XnBXWzkzPWRuUDZPVlB6QFZbbzBWYm0vT2JmPjtybFg6U2I5fGVpMioifSRdI0VtVmY2LCQ3ZzUvfnwrREB3KkUlQiFYR2Q3RGw9Yk9HWnpxNGVpQ3l2eVBgVkpKVSExYn5ObVZVPlhtP1FdNllGMDVOdXN3Z3p6fDd7fTdhKz1K'@;
put 'S2U3NS4+PGtSPE5DS2o8VjQiSVUzfnFwVDVAOWx8YVhtdik8cU1xdVBeUyVMdVlIeDRhU2orb29dZW9rdWBbY3k9W0BYWk1nNCk6eyRwKixsK21+ZH4vVlcyYUAmZmA5T34uJD4+LktUYlc8VndPdzRnUngsUioqV1kvSEQ+UmQvMWxFMytWQittOThZaTBdak4oYmZsMzRKYD96czNmeW1xQiZC'@;
put 'PmM8bkdINTV7eylSaD9jfiNGbERJTVI4fjh1RS5zRl97NnZCSythbjFGQ0dnUyo4TXpyeSlvb0g0OXY8PltiU1NzWyJoYXNGXkgwcSYuRjpEdUlObT9yeCM+K1FYeEloc2UpZWFtT1lqSGhkLGpOJWg/Wz1POSQ3UCV0SWw1eH1fempVYXpyQHgvWitWSmlMU0Y2eyYqQ0NMfi44dWFKajVZPUYh'@;
put 'Xmdle2t8QXI7K0xEdG4pS3dEfC92UlNmN0huL3UxTyttYz10MlIyRT9rWlVsbG1qMlppI2d7d2h9NzwhTl47Z1omM0ssR2hEVXhlQURlL2FuMik/KUo3M1NAMX0rX3EkbHJ0byYlbmYrXWZwJVE7MW1RPWdZO0tSSnN5O2NGT2wlOl9pOCR2SV9ed3Y4P1A4RmUhQ3FycClQPmA+VmU1WT8mX3BE'@;
put 'MSFsP2ckUVJEYW8kU3FyTDpgUT5mKl8vdnNiWHNYYD4paC9Za1s5OEVUVS5mfUZpQkNqRCkyUy5Md3M9Ik5NQkskVXJjdG5pcTsoWlRUb3Z7fCVzRUosOGFTZiVMTVllNVBQKk12WjI3M2IxTClHSjNsTno3XU9BcylmOV4/WG83aGBVI0w9bWA2LmB8fCV2elE6RzUkfH58P1p1JSRbbzh9Y1Mx'@;
put 'RGtsezJ1clAueVJOUTNpUTAkLCl4VkcpPks8TTZ0fiozNDF0UihgKURGM3YmRUFAWmlzd1k7e3gpQyRCOEN7LDt7ME1aIW1FO25QZSZ8aUw1SW9IfGNKdCw1KyNlPTdJSHVMQ3F6cHRNJH41R3ZnK0ddYDFDT3lYLEJMbHJWamJDZXAxVksqLHJ5N3JfeWcme3EkRyRxe3A3YWp6RD4kJUljNiZq'@;
put 'KFFpSlJoJiFDIzI6aVNRI3c6JTozMHwvNHlaRDBQbmZlQXI5S19AU3IxNHBOW1gwXjR+P0J8KkdFfHk2USYsP3d5Uyg/fnR+KEtVaHNmPUk1ZypiOV1AJTNnK0Y6NEtaN0pgKGptKShafU92VFoxMCMlWj55QD5ePkk1aGRIKlFjamx0aG9sdEI6Rj03JDVHazRVIU98QzkyQV13aDFYKEJHUiw1'@;
put 'PVtEIm9vTVoxeHQ0V2JhMWBkQHUxd3Z4XzVRLl88fFNDayMzc3NGbWcrdWZsMnksYUY0Qm1rO2drcnouZlI9T1pWKj1IamdxIU9aVnw6fjdKYFc2QCtgel0wck5ua1BHfVteeVUjKlZ6aT9HXTNkPHNHUDxxJEFwNi5eaik3fjttVnouPmMrRisyPDBkSGpicW1+fU81YG8qNT9AR2VOcE9AOERk'@;
put 'RldwKjVPdntkLzB8QHIoJUxEVzQiaT9kNn52VHtjN311RG5AX0khMW4kV3EiJk5jTWAyTDVRQFk3Sk8iV3B0XkxnanExRG5uUkQ8UWNUOF1BfTdrSCpNbnVmI29VRGopYiVXbVZxdG1pZVtJLEMhdSF2Tm9HdDdNdUVKLGhHcUtLLEViMz1PWlZaajcmKD9iLChCOVNWSD5ZaShPaD9WYzs4K1JU'@;
put 'UTBzU0gkOSUvWE96fXFScyl8QX1+QCk8Rm43WWJlXVN7JkZ4anBNZTo5P0cyPGl5KXB4a1VnODVpTnpFIy8yfmtMSFQrOF88YG9FLn03aXw6c0FBdFFDVXAhIyp0OClhRi42YTBMKmYwQ2k1RjYodzBXYDJBTEtTTFNHOyE/eVg8b111cG9lS3B4IXdXZENMeTt7KTU1PmMuMlRKdU84MURnNTxg'@;
put 'VFVtemZCL0Fybk11aH4hZUp7LyMvdDFhMSN0Q2A5UDU/NUdKLC4kOkdjZTc9WUVvL3EyNj5IIkhSc2FOP0Q2N1A7OUBkUTBfaGp4WkVaPCY5JUVGfUBAdFtSS0pCcG8sYyN6cFAzWlFPMUhmbHFPUDdCLkhTcktfe0dDYypCY1BDXUB0YT1yYSFdeWomeVVEZ2JQYj0yYmtjTH4uJD9pNEVsSCxm'@;
put 'X1tTT09iSkhCZXxAa2ZYKDs0OGM2K0h1LCErc1heZnAlIWNBOjtWZ2U3MFVHbiExPU5QSCZ2PUlMXmRrVVpmdmVqSTdXPm1GWFZmb1V0NVljO3J0Nnc+bVNRTiZGWyM0TyhtP3t2V1I2WTduOzEycFhSbjM9TStWUi51aTRVNiguT0dSNkl8NXtaTnBFfUJEY1BEaTkxek1TYzljLGdyJjdNWXhQ'@;
put 'eCUkNEF9SmZOZEN+K0wma1B0SFcueVNZSW5YV2RjWT0sKzIkbWZyZntrM1k7NjMmVyJNT3hnKz9jSVBxQl0rbTdlaXcxQGM2dVFpSWtle0RLRFo9eXZvOmJGeUtKPGVmeVgmOHFgaFVVPClHRzA6RjBIUk5wczxAemY/RWBzUypOS1YvKyRXO1dTaXQ0bExvTCEocUR8VXFaK1pBXThYcTBnd3Zh'@;
put 'R0l9RyxreWR5cDlOQlBXRDJkVXFXfFFIZERARWNnJDR2aFZgUCk9MWR2SC4zMVRddTJlaVVHJGRYM1prLGR+MEsmXzNaQnw6Tk5EbjBNU1JLP1VkJU5LdUhYSlg7W0ExUGd9S0QjVEp6WjZrQTxmc2M8MWRhMWchW2JwMFc4MzRQWiJASy4+QnFoUk5nfHgqLnJ5ZC9NfFA5P1hddSpHZ1pwV1U+'@;
put 'LEE1SjdpYX1qXjtDOnJvNWk5LlgjTyJqMlpBLyMqKlNXdng0Xl5JPCVdZyZiRDhDazclYiIjTFVJMWVweCxDPHhSKUdYZFg3fDR3a3hlcHAxUnBKensxL3RLRixOVGcvMT9uaUxuVyU5Ynh0T3FHM09RWFE5KCxyKHxoYWpLYE9WNXw2aU9HLmlKaER3UDVIfm9XaD5rMis7ZF5mJXM2LmN9eiYk'@;
put 'TmdtbG5nLyFLaUpmJldmPkt1JDxrYiVydXZweW9MPkpseytJJkY9KWtabVN6fCM5am9MLCZxMy85a2Q1dXJwTVYlIUZJJVo4VzJ5eWdtbDBXOHhAaTpiVDRsW2BrP2w/Qzs/UShOWD1nc0RERkRQWlhLVjt9bzJtYzxGfl1PakBSbCJzcmh9dj4uUFd+QSpjR2QpI21jJDMlbTNVNCVtY1Y3ODdd'@;
put 'NFd3IVVTMnd+THJvMkg+UzZJT3hzT2J6R1ExbTNgdFREREd6dz1FMGgvYnd3I0xzST0sMjFAM1tUWmdKN1NeaFVKJDRbbWVuVT1RfmpiWjRYNjdBZGA3Z2RAdVVjemMwY1E3S2E0Kmx0RmBOcEwxSmBySGFORjpuWWdHeX13Skx6amthZ1ZiSWdRbUIpcHZUeSpjQn0vQGtbLm4+W3NqOCtKelFx'@;
put 'PEdYTnlEOzspPVtKelRpeXwjcXVtUmZsR1duVT50aT80NFE1QilNRmZnblg1PUMvflY5UiRPOSxiM2FrPHgzPWU8P0Z9e3tDWnFDXnBeRz4qJUVTSC5ocn0yLEhEPCh3T2BgZnJHO15lMHB0fU9sWDVbMWQmdXZiJUJla1RjTnBPTU5IRF1KcV1PZV0qbWk0V295cSNEOC42ZXo6aHcsTXFPUHFN'@;
put 'RzguMzE3VyI1STAsbkQjMGRmWkN+VjdRY289JFcjZHtOI2BoKTtOOnZ9K0FvWSg8VVhSRTZVYUBxd3x7R0tkWy5Ge35oTUhtWmd6aCRNRVZ6TEsuUENubjVvSD9qO3ohL1hLbT9uYUEyYmhGUFhjV2gjeT0wPGxOOWxPN0ZnMVRXaGBreTAuN355QkZLdVZIY3BmYHBRen5SPzVbY04wcWh9bWsr'@;
put 'Nk9CKHY9QiovMzVhOjVXViNZVkwvS2pTUUB6TT5NKk1ZREFyM3NMOykhXnpiI1c9SCpZYUtAX0dEO2BNcnt9dS9VfitINVQpZ3MvUl9IY2x0a2FfKkRXNnUkUkpRTXk0UXtuLFU2QmBoNyExUHlhOEgpODphbT5NP00mYW15Sk1CPFpnZzlzXTtheyZZXz1OfTVKNVF2bW8zZ0hLKkorbz1QWUkv'@;
put 'OjVFSUdaYywhVWJLU1h1aT9icVRnJTl8eD4hbVo8eEhbRXBKM3QpN2BfVnJzN3BKZFlOUCV6RlVpIk4zXU83InVzNyZdYyl0U3VRblg7LHVYcUI0Z01DZ3k7YWImbSRNKStJPik8PFt4e2BsUyRKQnNxQi5NfXQvdFg/S28vJEo9ViUiX2xMJiF6JkhSfHRdNk1pZSJfLjpNIk45Y2clUylecVRV'@;
put 'YW80W155PClSdyJgOlF4c0RESzhXK3xFZXBtV2MhQXhXKiZ9QlYuTHs4dFsoKmY5IWYwM3VESyM5SlA8TVRvRXtZLjVYKWh8Zi5WfE81RGldckAhOztQZ0J2KS9vbTU9ajVJeEl4PnAuSWc3MUpNfC87Ll4sVWo5Pkh8ZW0wNCwvOz9rfkpmQz5wPT1vPFhxa3NCUFNoTGZKP2tML1V9W1BXSkdP'@;
put 'PHI+Kl5zaz8hRCV7XU58RlkiWFtYKGdydzlrdGVwQCMhZHt4V2Y3Zk5CLlJ8MG1JKUZWJXY6UkBFZ01majVRaXlGWXoofExdcF1QZXtbbjQoXlRtI35GKjduRGtRIXZ3V3dLZUlsRFhfaURyYF5lKiZtaG5DO1hoQ0llIXUsQSFyTHlObDBNPlM3P05MZChDRH57P3t9cEZAZiRhUmR7eng0cW0y'@;
put 'bCsyR3AhY2hJSUxkLGZMKXxxdEMzKyZTbFQsOyFiQGM1fHtoVmByRWBARFteUkohOWs+WWJzbkV9S3NZLCwlc3h9TEouZnVHWDViM2JHKHY5UmxvWkNwKjxIa2dvN3lTXUBaV2NpJDJNSmJIRkZ7UihwSUo+ZEwlKUNQMUdoUSJ2eWAuRkxlT18uXylmQDNZTj02OWVrY2UyJilhdCR1UTdFSzUo'@;
put 'OUxhakcqMEBaJmJHOHZOXTdAXSxLfDJpPSJHWDIyNVtAJDp3VUhaUWlySkM7dmZMLkJjdTFmd3VzYCUsQ0h4VXJ2dnN8VjRJUjtrTFYhI0k6Imk4KUU9MzVXNXRlczxTWmd+K0J8V19WL3JJQFFqOEdQSFhnIndRe1MoaWZPN2cxWDU4RShTSFhpYn5XQnJ+R2MhVFZkPHpxZTI0XlFIXnQqOz00'@;
put 'UjROayJsb2t7ImxsRlshXjQ4bkxIfFVGV2shUjZeRVlxaG4uVmk2W3o+aTw3dSY0KXZdIXhgQm9iSHBzYVc1VDA1a1NaU2tSYEphZ14wOChecSpPbGwpKTRzIVNFNjI3SE9YOWlxfGNXdSs0KFVQT1Z4ZDM9SyF4OSMoejF4ViVFTGNXLkxOYGBAWU9+IS9hVUdiWj17YEBfITMzMFVlKUw3VU5W'@;
put 'N19OemZNZilaSy41PUwuPzFUd1pvXmlLblpSR149LnJSL3l5MTBocW8vMThjOHkzUS5YQW98JFV3UT9tVX1SY0lsL0AoUlJnUFZENDpmeWwwa0VNP2s9YW12ZyN3d1hCQDdbWUVuaEB1O2ArOUI3LCwlQGxpcHh5K2dhQntSRGVjNnZ4WSwxeHwuOE9eKTZebyhOZjpRIytddzdHd1BPZjcrI19w'@;
put 'ZV9IUlZEc2plWG9ONkskKTdye0AjTmRGXixKS3BOKnJeTnE2OUt0YFlxUGo6QDFSIj87QkByZnUzP2B4XTRCV2koYUR2fFgmQThgN08uSWtbIlJ7Z11PJnVwMSlhaUxSdixCJWJePmlXb2NdZEJxOSlFZnQ8SDR3NkJadXZSUEs3amE9byRqXWRtI1FRdChHX3szUWF3K1tdVlczXUIrRDVpekk0'@;
put 'T3UrfDZVSGJRNjc/JnI+XzxmSnd4WHU+cSM+NXdNSDAuL3JPVHpxQ3UsLFFyY0kkMTBzJUBVSDwhbFtnek9Ze2AxVHxOYk8xOUkqclQjWWpzNypiOzBDJnFhIUVYfj4hW05nO0VfZEAxOWJqIVUyMl4iWSJ3Ji8kalJoRU1zIXdbPTRIemlQJUUvdih+TENuRVIhWixpJkQ3Rnk8a0tLViF+T2xg'@;
put 'cEJ+aX5NWzt4aT5CYFdXPVtJWHh9ezI6OWQ9ZVNKZk57USs0cDUzJmIkUiRManJ+TXFeLlZGJFhxcj5eIWlMPD9oW2lKLFJuPz5HUl9aYkgmSSt3LCx4LnJrdFBFIWYlLCw7bVMuKGZBSjVZaE93LDlKSHx+LlMvcyZEMmg+N0x7YFdNXUBhPEpSUFkzdEt3NWJqRylqbDU7O2hmOyQxakJCPz87'@;
put 'MjghY2tibF88e1ZTUlRDdG1KUCpSREcmb2lRT2RYZHZgMVEwcFg6Pl1ve29ZXjJvT2Y/MXdNRChRLFkxYW4vYnYmTURaSXhlb3ghblV6dlMqJElhQjJ2cXo/KlUuLylkaVApMnkzQ3xVK0tjYWhqSzt6P0sqUzFqd3piIXJSSn0wQEVIbUA1LyxyfDltTGBufTZaNT1rUik6ViV6YiFyNj1OXkAk'@;
put 'Kiw3PSV9azBQZyN9YXxxVnE/Z3slZHdZXkBYQHlGNFYjWXtgPVdOfW4+Kll2ZEd8Z3dVUiI7W04sRGhpaj18diZuV1pnR0tMfXZBaXpkSnpoND5BKCosLCoye1FreT1Eb1tKYFMienN3KmcmRCtAPExxTEppRUdAKHpoS2J+REpuVlteP10scFk/ez09IyVtO1VIS1kofHB5cSV5c2AqeXFPcm8i'@;
put 'YDRnWDMwJHhSI3EyaTlLLCl8aFhOPyp0TmgjbEMwOl8ofltXaXQkeXU0XnxeJlE1e3woN3Y2QF9kPj5VfFdINTlIfUBid1RzOkxea1A0SzN2Znh3MXM5Z2IjWX5EYVpIWGs7SnYwX2ZfQS5PcVgsJkxjRVJePXM8fDdVRjsuYnt4bCh1b2ovRHdCW2BdfjFAL2hDc0M8P25LYWMqQXgzdil+fHVP'@;
put 'VFAvP2NeK0xzUEwlczpNJCgiSWo9RmxYKDN+fCxHNUY4NzZZeldddnM6IjprcyZVLFZYX3VgNFl0UFlWdytTRSM7UHNgSF5dQVJUMnElW0QpbipfIWlOPDQleVIhbWU8WDheITkrMGB0OyZPanB6KE9pV18xLGUwMWksLDYpUSkjLGIuJSU1THBwaVtsPHROVUZXbDFwPkF4M1YiYFA2Xyw9OWZe'@;
put 'NDtjQzJnKnlqQTEyTmYyTFNdMCNtaFVdUk9IYkZpZ0A9U21CZnwsJmg4MlB4XiU/YEMyaXhBYHVVOkc7dF5iZ0xiY0pdeGFURHxMIUt1VU8wdnVbTmhWKmQrY3ooRl1xfWU6LGU3RGIrLC9uZU1FcHNuIjAySis/XyokRH1scippRlQmUERWRUAoV2xVIlFPXzV3Szl2UiwpMV9wQjxYSyYlSkpd'@;
put 'VWg4YytxWShecWUwdXgqLFtNUGlLSyQzSl5fI0ZHOTxDaXM+dkd5alIuJHpxaE4zalo0Z2p5KixEe09BbCYhNTJlL2FxUVsjXlYxLlklSE1RdiV6OFlWOFlVJWtFZTsxNGY1Oyl2cW94NksyWzZiS2hOLmYxRDJ3UjpqJFRSYUU0NWVHMUQ3QEBySl1LVWxgSkhaR1M4b3N8Uy58eTtoMiJqfmpO'@;
put 'LEZGSjE7OjAsNnssamRyLGptQSxqL240b10xN0tkQmBDWlZVVXorVFFNbCosVXdiLi56a3J4Qjc6JTZ0cjsyS0RQPF8jI3ombnhxUV5HKng+bFY1QlVzSkZtW3ooa0Iqd3NoW0xnVWtufncrSylNRloyQnc3Z2Z7IXA+UVtkJDNCbEsuPDRNPEh4TFFZOXtXaSE1PC9tLjYxbzVrSXhkZHomQXtE'@;
put 'aSQycFRQeipgUExPezVEdGRYJURabEd0RyZeQ21GJDNXayh0YHZ7dilfMDtTRF52czpRY2dnUyYkJGlxWDdPYm43XXZQZkBDJV9CJWtfPm5JR2liXS9QWE1NbEU7dnJBbFgjRFAyOmdmRnA/XTZzaylwcS85aShHR285Z2B7fTcoRkNIeWheQ30oViJtS15SVWNXUjV9ZXVaTj9NNGtYN09iT1dG'@;
put 'N0ROSExARnd3KUxyWGFlKF9zNChbVXVuSlZ9dFpFKnoqPlYhbUBGWlQ2bi9dbkxSMSRgaVQrcyx0JnQ6d0t6Z3VoMXA6d2YudyZMMkszM0w5N0hVTShwTClfOVdXYEoofXBkcmVednt2KjJKQDt1cSZHVTtKQEZ6UzVedXE6VGI5OE9paCFZckdeSGl0bzVzZntvPHx9YFk4WVgkeDhwKXliKDo4'@;
put 'TFosLCQvbHl3PCNjYEx3WEM0LzlrX2AuaFQ5XnQ/bG9sYlVjJkxDbX1DT25KPW4+O0pDe2R3OUVOZl55MTNnUyRZc3A+T216TTljUlYvVkpgOVErInw/XSZMdUFDJn12OnlpZ29MezgjN0IqTWBqP2cjTFFCdHFXKkxUMTxYNUVnfGhZRyU+VSw+KG9WPVNYIix1P246UVtfXUR0O0JGQUQrI25E'@;
put 'N3d3QW5QMSxfU3lKJllYVyNnKn1QRn4rQEM6VVV2fCVbTEt2PVRjUVJfSklGb0csKTZgVDNGRkBWVXk1MX5sKkwwT3xZPitnWGdaT3xdW3N4YS4kI05KPmRLR0oob1hTYWhlZSsuL1FbP1clcG1aSEBpKj4oe3l8YFI1KWskVHNIfStRa2ZtazkmbCNYQnJSNSMvOWQ2MUhMYzduI0FrNGN2JEUu'@;
put 'bTB5Tno2XjI2eCt5VDg9RmB4XU4xRVkiQmY8TSVJTD5wZGpYTkRJfE85Pz93dGxNMm0+Kiw+PUhYXys5KFUpI2JrI1VnMD00KGNhSypdNmU7fGNMQWsvamVpbDkuJW9tIXNSOSMiR3ZZby8mYGc/VUVXTTghbFtvMVdSellZRHYwX3RxKlBBLFV5fkV2JFohWHV7b2chZCFzJT9vRVFtWlhKMHVO'@;
put 'XmQ4ejVaMmx3LyxMK05eMTszMXZ4eGtqeF9iNCUuJXpmJWtYXmxsUDlyVTQ7P3o8e0pKJHU4KDkjNmh2P1RhU3IlcmIiRE1QclNTa3c8WyM/WiZja20pYXMzJDsxL3tVYzBBK3A8cCV5cCs6THl5OVRraTxEQFpyWm1JfHldZUkoUXY+Zy83ZEYlZXxtUUQuVnNWaE54UiVMQTUvT2dYOjhbWHhi'@;
put 'ZW56cW5XeGwoYUNMZ24hXTtkSX5rMHUsJjhfYDtMQX46WWNKPVA3WTVpZU0pO2tEbS98OjVVVF56U3RINlUhXXpnMTlgSz92c0lALzxjfmp2eG8hZGxSWnFYX29EeyFlU2FsLyhnU05ybXBaKixWSSVbaTlrMF1NX2l8KEZWPnY4YUdOeCMwIVhmRFN4UXwqS2BnTWYzRXgzKEc4VnFCR1R7bT9o'@;
put 'RzN8fihWVmVQQ1tCR3JNOCklYncmX1RwIT9hZGZ1WCQlZDdVS1h8OXo1QnJzNjxJbmcjflJBI2UsPT9peXU1MXFZUG19fHtwLHU2fFJfOCo3cGBlTnYlM0U8bDQ3ZFNla0ZSOjIkSX0jKWFTNT95S1MvSlpKNj18RkhtQVNWd21ONWk2NTN1WCp9R11iOX5lU15kIlplNl9qeUc1fGs/bmQ2LlZh'@;
put 'JnlKYTxxfmNKYmVsfmFWd3NjVlhFYXFJN3VtflR0PHEodE9jPmJnTF9oPHFuR2t6bFoqWkRuTn5kd21OKGc3WkU2X2lfbyExY0AxZCN8eEcqSkpaNyo7Wls8ISRvX0M8KCt4RXpZOH41QmVrZEhnc31XbiY5a3NvQE13QyR+b19AW00qSFlZKj0seXEiTUIsV1VGaXx0TD9VY2EhI3s5S2xRV0ox'@;
put 'RHJMIyw/bmZLNStiTkBDUXMkJitRK1FDIUZlSlZJQkBXTkMlUnlIQUxFXVFSfkZVZ0xkR0I/MUJjejlwN0YsYiZre1ghbGBzP1FNRl5RUk15ImVNTWRhU2p3NkFfaHFCcXxLPEhxT0UiKH4rNl1wQEJtQVRIKygjUDpWYShCWGlTbmZUNk5oSmlzdX4uYzZDeHFVUTJmR3YpSGpwNipxYWVmfVgl'@;
put 'aGtPRFQ3WGguNEEhaDdnKzp4On0xKiNHdHhTSCt6aDYmK0lOclhBcmw+Tl95UjI9dUZJaTgrNCE/XkBLI1V+QkBiNyVRfShIUEgmS3RMc2ZGZj99NTRGSSU9eXpmTm1Ob2BwOyhBdXIkIVQkQH0sMFJWXUsuO2tVMmg5aW9eejEkLnwrNmQhPEtSbzNGMDRHWlZgMz57YkwsWVomYGR3bF5UQEA+'@;
put 'bDlHM1I/ZztnLnZOKmdPRG56OWk5W1hFeV0ya1hffDNCI05fZUFSQmdwTm1STllUYykpWHgqSGQ5Mzh8b01+eipzQyRbKnJlQGJ8eVAoJSg/fkJfX05OOWR+NkhabiZuUUVXdjlkTi9JeGk9NnFAJHZ0bzc0eWQkTzQ2MUhQdkolPGM/LG4oO0g1IVgoV00qZXshRk0qR202SlJwb1BNMH1aSi9j'@;
put 'VDB4UF0wOEhbbl1zeEFCSCF1eVhqUH5ASityIn0xZUUsTX1xPlRgcyJBN1tMMlV4bXM4MkBCRV1yV1V+InVmLyJUK2JxU0NhUjZ4Wn5JUEh2U1MxNXRiLyZiVlUjNChOZTU2ZH1YPz8/dT5gKjdzMjl0NVk5WXkvMTNiVik0YHc/IWAxWXQ9YCNOTV9Kc20qZnB8XUVeMztbY2dPfVJ2PGN+dmpb'@;
put 'WjF7bEc+W3w8TWlZQSxeQUdecVQ0Y2NeSC4yWHhjYVUjVEh5fSMrJWpDMXk2YjooQnVadk9hKnYrYVc1JitWPU0pVzJORURnfD1PTUNmdmQ1ZjNvaz8hK1NVVil9RkYiW0IwMnUqY19xbUxmN3QlRks8TzAyNFpmJXJQSHwxaj8hQlIwUy88bDUvWUJ+dy80RChTLmY/VDR4MWU3X25pRV0lRVAs'@;
put 'Q0s8RElyR05bJjMkKkN9MToqKDU7czJoQDRYMmg2YFNMREtUTnhsXnFpI1VUN1c+KUw3WzYsPmhPUT5KRG5OfTx3OWRLfEFXbEtEYExFeUIhey9GWjpyZEM+IkosdDJ9SVJqQVU9Vkp6RFM1KnVXQzJ5TWlqV1p9TSsvRnZebnJ7dDxYTyZrS3pEb0F0LntHc1gxPiksbiI0dG01X34oejNlTV9N'@;
put 'KlF4Y10+OUFpbX09fDI/M1dYTzcvXk1jUVtmcDVXZCJTW0wxSj8/Z0pYdnE4bGk8XV9+MGMpSTpydF5te3BXdXYmL0JPQ043Qn55X2BTSEEoZWl5MEFHMihpe2xPbEhMbDpSTSxeQ2xNb09ZIUI+Xk1jUTtCcTVXZFBUXmxSKyR0aXsvRWB6KTxEYkguUnl3fFRlYUQ5PHdCS1VVcW8lRmIpPCZx'@;
put 'Rm9FbihOW3hOVlFsM3BiMzd7M14ob0RgRzlWZiwsT2dxVUNnVGkmTXlnSXBZeiVSYkRDeFRDQDRxUiNHM1JoL3BXfStZPDZ5UWkleV5dUWkveV5dPyFsK2l7NnAvMUVXaCl0JU1zcCUpNz9MXW5eLmZqSUwsIWN9aVN9IVtIfW01LF1nXjt7Onc2VWVKc1RJfCpoej4sJHQlcCwsTkFUTEt6Rj5E'@;
put 'aVdVcmRbJGlJPC4qflZwWUg3RmNKXj11OTd+TUc/K3h6QnYvMChqNFpQQ11sXzlXVkRmRFNYfSM1YSYmQnVCd0haNV5rcGhBUyJJPk1UUUJicSpzU2MmX2tYUCl5V18+LDE3VVdGWDk6Y3o0TEEyZ2R0O2J0NGU3UEBud1EpejZQMS8/Smgxe1V3OVRuLCFDd0clbG9IU2I0YDh4dkJJQi43LGcp'@;
put 'X0MhXTszUDpMN1Y6WDNsUjljJXRpeFp9aFUzT1UxSVthS1V0QHc9SmVsVik1QmZwPkh9cS9FU3I8aVl5aihLdlY7dm4yVDojQFs2dm5Le0olJjN7QH0iYGsvU25Pc3JZPkJBbT1OX2FAPzR1MERDQkQpInFaemt5RFRsejxvWjRsZERLTkZya21eXyhmKDwrcDtvZiklb28oSSVNWHUjPi4xQFUy'@;
put 'VEg0LzJhOiNOUFYmcVUzOUtSKkNXWygiJnB0aT9AVnhjYkdOUUVuSk0mc3VSOiQxZFtaX3hkXWFHRkVqTjAxKXZ1YyVwX3E6dCslWzxhbFYpbixWQGBnaEgzay9HPysxVDd2THFTejRTPkomLHQ6Smh8cFVCIj8pNFJrcDZNU1FuWEY/PG5ueH5TcFJuMUxRRV91W0hLOytoLjZ3WEU1OzhELHtb'@;
put 'JiUmNmlDWnN7VXtkWztOODlMbGxSeVdaMmRfMFBncipxZV1CTWZ4VkFkbV00Z2hpQnJ1XnUxZCloaGI5fTtNP2ZecU58I3N+e2R4MDg7I1p7RFh7WjkxN2R6disqYUtLUWl5cF5dMk9GPjJNRDQiUSUmIiIjW21WaH1EL2MkbXZEOnJ0Ijw+SU5SJSZpPjp6cW9AdDcvJmJObzptY05panhFKTk3'@;
put 'Xzc2ViVac2lXZVdudmhDLCx8U0ppZChRMzNCciY1TXM+bTd9SXNeKkN2c3RlRWpMcH1xYjg4flR2KmM3MWhLPlNBNVc+ZC5SUFlRL0osWj5Rfn1yMUxTfUxmY2U7Um43SlYpWUllTDVodU41bj5gODkvVGBbYlJtXnpBaCl+cFcwLnpqJnYraCl8LH1SfUd3WTRhOCs4U0QjRyYkPTIjQjtNWys3'@;
put 'SlRKeXFIM3VMOnZ7UjNsPE9wPCkjXUxgPTVoJkc2WG9VciJQUWQzYG5XajBeViV3dCg0TUx7Yyl2bDtqV3d0cFtPYnNPN2dyOSZhYyV7Ol9NWEBsY2xnPlV9ZVs9XjQ/UWQ7QFAjZXImWzh7aTxGXWk+Yjt3SE1VeGtwWVBaPX1lbVkjTnZEZGJvYnZDZDBqJmpCVHgmWXZHK0RARGB1cSZbOFhH'@;
put 'QC58WSYmTS55R1RCXTZ0Ly9Aei4pPi5QbFZOJVpMaCYrJTFKOmV2cjsqb1YqPG9GaHYuJUd2N0FdQmR9SSxdKEE8cHZ9MTduVS9COWslZUc+KmpKczBiV1hCIkRzYi84MUN5TVs4N1siSnkxQ3R3Nzp+fkQ0VHIxLiQ1dT9rVXRoQl08dF10dUYleiRxbClBaW41bWVsbDh+I2hbU1QlbG98PHsq'@;
put 'fildITQrMWw1OWkrU3djQ2d2Z2Ema0Uie3EpS2hzNWJjQksjUjZZME4meWxzcX1vT09iN016Z21bTkY5MlZqR2lwaFEuPDc3JSNPdlNsMiNKLjJsKWV4QUVUMUkzYWI1KUk/XXdUOWNKO3RsPyEhc3FRS016clJ2TGZwfjxVPmZpYiw8ajZ4WWVAe3lOUlEwKlEpekxLKzIodT5xbHUufSxEYkBh'@;
put 'JWZ+Pjk7aXJeKU1ybz0zeE5DOkEySzRvXlZyVVdkV2pyN3N6LGtGX209WTJ3e2FuZzIoJFVVPSR8LnA2IUZLMUQ8VVpzVTRuQkRWezo2PWBJQn5FbHBzbClZNXFxVnFlOVRUN0VEeU1bO0w3dE5RUC54b3d8amw5Zy82I3NqcEdMKyNPPkR7S3N+KkFWZzZsezdtZU89cl0jQ3o2Wk9IbVBfRHlw'@;
put 'UDAsNlRUUjZBYzZSdjIqZiE/PChtJUwmWDFOeW03O0wscWklSSUsVVI8O11oMTxVc201TT1IczpLZn1dSldnRCNoZjU2fDJLRH5lVTRAYW9eTFpxbHExNEIsbUkrUF8+Tzt7dz1dRlhMNTdhbE9VL3R+eVB8LjpOUkx4TD5KOj9LYTNwJG9UI0k/ODE0W3xXQ300UTVNajdyU0J+ZGxzKkdaa2d5'@;
put 'I1JHL01WVTgxWEVadXR9dnxXcFRySDY5NkN7PkImWG5wIiZudD5MPVFfZ08uPWFhKENfQTspZ0AhVWk1PT9dODx7Kk5zRFNecCUwdW9eYzRrNVdRPSFvS2RdbH4yUEEie31tZkQyQjU1K1FzPlt5Q0UuM0NPX0NtWkk+V2NCLzVrO21kek8oRiNAajt4SihBLmhIM3dQZzQyQiQ1MkBqbChfJSpM'@;
put 'O151QFdufjJTUzx4QmM7LGM7anQwdHxtTDJWRWtedykpanQkTllscEJoYmRtUnowJjh7a2Qxd3pvWDlkSE8kLEltQmVELHVJUCNbLDl3SWo4bSVJYzZLZShHay47dzUjJmtWOyhucno2bUh3KHwuXT9aST5NRzJSYE9ORGk7cyo+a1YleiFhcW4wX21HPmE2Uj40MTRWfS48OyExNHp4Ukd2K31w'@;
put 'anw5THllXlZFfSVMQmt3WFNPMjZuJXApeE0xcVtqZT9jN3pMLD4pVjBydVpnVVRkOWgjQVNYYSJbZzNgM1cwKzM3bGdqJTAhTV42TTZHMFJicGNxL18+d25OPSlzOi5oKEFYMDpRelFTPn57d1VFUntGclQwWTo4Lj5VPk5+O142bSg4ZUMuMXFzXk1vRWo2fkIwc1NYMkxTV29OZCRDXkB4XmdZ'@;
put 'VnJ0bGQjcG9xZiRke1JIeCRbUllzYVReflVFRC9zKnswKWxLKkosKHglKmRGMG5wREN+M34xKzRuIjMlPFNYXz5zYz4zOi8sLCZYSH14I1ZHdz1lZClBUXhQUTFBYmw/ZlZtb2ZWRCUoWUk8Mil1TThbJSlhbXRELykxS2N0ISIrdCEiTjJpN2p+UzojaD53MG9LSysyPkw5N1BxUVI7PUsqV15w'@;
put 'PD82fU9DWzVRVTx0aHdNeyhuI0ksKWcoOHYwY2UrRml2MllsODAuSnM6LH5VTzg9SWA6ND5xYVM3dzBsWGtGem9KTj0kJDVSJD9kIVd1QEpGQXB1Qy9FeClrVj5RMko9WlY2PjNIZVR9VHR5IUNGZXRRRk1LWVV2VHttRyxIPk04TndwNTY+Y0YkQiZrQkEsdSo0S35eQ21rQG9Xe2w8Tysie002'@;
put 'NGssc2VYRmVKVHJpMUo9Ol46djBhLnhHYjNyMDJ1cXVFImNzQEN6I2QzKlJfUyo5QVc3cWAiNHRKNjdjQTQrZE1QU3heVj5NfltBZkVGfTFATGlBISMoUVZ9V0sqLCslMFlqQSwpbW0sfntQJiw4JComKmB2bDFeZDFkMzBmSSpgI3hdZztYfSNyaW84OTJSeztiVChXQVMqSjU9NzpDKDQ6Jkdr'@;
put 'Lkp+elVFblJkdEtxKllyWTN2VD4jWkdxXmRQcDR4MUd2bX0jeD9qe0Z6YlRxPkJWMHpvYS5OYkEyanorLF1VNnh7bGZhYkRYaUd5JXx4MHpweFVLS3plVkl5O0ZlcWByQ1YudSVHVFJASTdvW3NJb0whKHxPQmskOEMyVl0rI0s7T31rRDguT0hGd10pZEd4dyVXMmM6QlFjQk1FVTV+SFh1b31z'@;
put 'VE9eLHZxU2hQdS48cXtYSHBOQzNKLGZVNzNqN0AvbVtLcUE4LFhbJjsueks9OiluO0UkZGAkaEwwPSUpeU5UcTldT1hidWREKkpeLnYyeTdIWHEjWGg8biZbSTM4WVtVYmVKM1prPnhpN0MyT11jaC9XfWFlWnR+dWw3O0slOExaUUMleGs9WWUsaW8vSV1EXzAka3Ywc19mIXZISTo8bmpedmpM'@;
put 'IU15NFV+Myp5fHExT3lEaFNnKlMyKjg5XV16XXRaQkJCaVkiOFR9cWBnTWxoZkBGQChjWjlPQC5hQ3RKPlQ7biJdd15AU2lkalBEakwrJXhJYk9TR0VAbmFxeVh4MilZeCI9WiMoQFBfJnNpLiJLKX1eX10pakl2Z1YlW19dKURJNFYvfkloZCZVIXwrRUhaTV5XRXw6cjhfQyxkZXp1aSVHOjMh'@;
put 'SWl6NiVSfFE9KG9vbClJdURxaX5IIiZsMTFsW0J6cmUwVmtrJlFzSU9JOV0uVUsqPmNZRzd4RE1YX3swTlI6P1djPmBeLmhrOCl7XSxhaC8zb2NqQn1NckdbLFdBe2NiS3wxaT8lUnlXWiZXbllNOHhjTmpMfC4uTVoxWzpKZEI2fUkiSEtSRncsdnhhVCg7Wnw8RUhOPltZT2BnWWl5KiswJFJy'@;
put 'eyNnYHl1e2JIcil6azNGS21bYW0kOlZtKXR7OXReS2x5RkdEcUUmNSw5MnB7c01UZkg/YjN1RjNQSmZmW1NNPGdNPlNJLjFUQD5XLGV9Kl5LOytHI2x6czluQzxlUCkrS257VHZ8Y3VaM2Zwb0JzTX12Qj1pdFYhYXdoNT1BXVoxXmVrYC4zPzcsN0JIYm5mJEtScnouXTAxOXEpPCw6Mj4qaDVN'@;
put 'JjwzVzx5Sz5CKi5YekkzODooZyE9SHFvTSljXUhHdWpsez0oNVpoNUoufCl2bHMrSklNbkJHd2lyV31KZz1VWTkoSn11fHYwMHF1cT1hTTh7LGBZSWg7I3s2bEpiUX5eekRRTTc8Lyw0dDcjRmpoNyprND0sTlJAJmRpeEk5NlhgWHoxPXkucztjQkoxOylOYFpfT1BwejE1e0pacS44Kyt7VUNl'@;
put 'UC5EdFA9YmcrUjI8JTRFa2peTl4hKSVXOE0lRU8xaCJaa1c8LHJ0NWwlXShXd2ZCMDBaOHRpdkhYR1ROOXsoJCRMUSZbIVBPI3JYblVPbzdaeWpASDdkXXcsMDltN0NbOTdiT0lpNTN2OVZXVXNqSmZzOylnPGFjentQVmlRMUVbR2U8Q1QmbEhqK1hKbysySDtYQyZeSClqIndxe2l1TlJzWSVW'@;
put 'O01eNSUmcl9iVnJocytJSGNiJXFoNSh+YjE+ciFjQn5Jbix7SWEvajFUZyk6RGtOMHZLUnoxYDwhdUlYLCVmeSkpfCx0dkA7fFdLYWhiZGBJI052JlZNSDFEQS8yUWNpfDBtT1tLez47SVhxa3pkOHExaGVdQCJrRlR7JmFrJClZY2Y4SSFjJk1SQ2V4STpLJEJnV2opbiVlX2xFTT9AZVBQbHQx'@;
put 'PW55Z0tESy5dMzF4dWslPmdZQzNgJHJdfEB3Zk0hdHB5b0gpdzY4Kjl6MVJlSC5vWUZDa1BSRDU5bHtsRVZeOUx5c3ZqOzAsS1E7dVY6d3khWForQVF9MDh0PEAxSm1KQCFvX0Q5Y2R3KTRBR0pMYyhxTW4zVSswNHB7S0sqKjVddGs/WWk1RFJwWUhpNEt7IytQYWlaZj5OOlA/Q0k1XXFQS2Fv'@;
put 'YFQrZXtoYlp+JSFwZFVlOG1oRFA7Z1A2NTxvMzs7LkBkaCQvSTtyZXpdeDcsZnBjcX5iWXVSSy5SMSlHRUteKyVRay4qcmhdZ1sqQjU7S3B7U3s9JjtgbCksd2ovMnVxJCZUeShrMlRDYGo+SlpTL2hbUGJETSUlOTtlSls7N3R9fCxdTHl8SVhLNVUzVUldR2ElN1VNb1lkXVtkWGhYPHsiclhe'@;
put 'eXVDVkoqTC9RVkswUXV1dFBYV0FdVCE8YEptIS81YjhZdVRhIXxJMkZ5aXc0Q21AO0NqVCxTPj1MO0BCO0tSRkZSfUI/PkRsNjYlekZFXStfamtHTXhqWkRvaihkQzglcjImTnZwUXAqRUlPcUJRbmhAZi4jWmooZEM4bi91X0JQM19nIT9CS2Zvaitkbk56TEdJd2taVil0P3dnfWBMSSY0fV8q'@;
put 'eHAydjlCJSwrYSE+bV9ZMVkzIXUpazFyIXVSdF5HcHZhcTQxMztRPEdFIiFePkQybzU5MSUxXT1vRSFnN3BJWVJ4OGlJNlo8e1h8MGA5Ynd9N0VqU3lwY0t1eSE6M0oqLkl4eUIue0M3UXZgI0M6Tm5PdCorO3JLdCNrK3xAKGMib3s+KUY2SUc3fUBlJHJaaDVAOD1XMkNfXVgxVWZPS0M8MyYq'@;
put 'KCJHQnYsLCJxNS9wUls7UnUld0FifF12KSImTl5oYjptZEBRJGp4PF1SNU80bH1AWWo5R0sxKT4raEBiSUYsZm0rVlBSMElxcHBNX117JShJQHAsaCtwUTB9NWcqSWRPWjY2d0h6Qzx2XlppL0ttT15LLGdLOloiZi5pb09wTWU6Yz5lZlV5Zj1PNlRLe1R3NHZTbkU5JHpmKC8iJEorQmw5Vmhr'@;
put 'MXAoRXtCQ2o5MUFSKDhYSyxIK1Y8UkhFbSRPdEcmTCxQejlqemo+IkFyVE5mN0p0PGY2fTx1YWQ9JissfGhqUiYkdFJpX2M/M3haMFhkcG95TzZlO1pTNmhbclYyfnNAJkM9N0RqWUZgaFUkYn1+dktpN2JMRzZZJUA7M2A5ckFfKFd7fUlxIUI6fFB0JmpePDxRbGZPSE5mYV9ZRzFYSj4sOEJG'@;
put 'NipAI2JRY3N3fChiM350YVoydWYyMHAhSSZ1e0BCaiVhNlkjQ3g0XT0pelQyWnxaSnYsKDZVVXE1OHA2K2E+YXBMU1JeIWksWTNzV3UudH5FeVY5TjhpKVhISnViOFlnektGazxpYER3ZWVWTTIsSDJjQkJ+W1o8bHg2L1UqWXVWUjx7My4/OWRdIz0uVH4jZnlXJXxscmgjLz4/Kj1mI2ZTL0Al'@;
put 'SWt+YU9kL0gkSmJLbHtZOGZqZUdtNVAqOE14O2daTT5ZeCRJNTxxYEBtKEQmallfQWZHaUJ0Zy9BYFNfNWtvPGtoZXs5OElPRiYrU3dQT3ZOUWU1VSFOPSlZJlk7OF8uMVZDKXwoeS9WSiRucCV+Mjo8TSw8KVdDTGV5T1heRCVdaXdOKDwmPFdTLC5Dazs2aFQweChmIy9PNGxXVndkd3QpZ0lg'@;
put 'RDIpYWkre1t3N1ZLOnlwRCFLeXVSJG5AVVhmPVRGXldVenYqQyEhVTk7b0JGbT86JU9BPzVJMTU1KSZNOk5RYEVSTDg5S1gqJn5rbXksdWdeMClNX3lYT1hRe1hwbW4jQiY4XjV0KnpQYUFFbV1AIy85MWIkcEpBSmJAKThvcEgqejkxKyYxclkyMCIxUFAxaixpU0BrKDNkdns9Qnt0WU0qalVj'@;
put 'QjQyJU8+XTVDNjRNVCtIZ1gpTCVdXytKanFpRztgQjwheWxTKF8qKjdqT15aSTpqUG1Rcil0SzlJSDhZS0dMdXgiYCkrWVA4ajV4USFfT11nbTdYdng6WTk0X0h0Z11AZU1HJkR0NGc4Y10sRiQ8PWdaYHc5JmVsKkBrel9EXURpMHhsTXYxKW5mYTArXVhlNXVwcF9WMWBQR3cpTXFAQVtAP3A4'@;
put 'IiNiSkI1WShPSGU1dVtbeUJ5Py9ZbztrPGw1V0ZHXWpsKDsrOGY1RWUoXz87P0RybVMrZUh9MT4lUXRoNWQ6LHh2O3RyQHd2RnldM2xxRlNvPihZTWEpN1FnQGt1d2kxdVElWGhRJmRQRD4hXj17bn17V1cwKyx0b10jekRvb0BrOytWVkpIOm1VQCJqK0FFK08ySEwsQkZgV1E4e3lSUEpGRHFa'@;
put 'YT5bQ2MqfjBBUjVhcWg+amR7QUdtQ3BiTj48JT1vW3hJd3ovN2YpNHh1M1sqSmBFMXQ1NT4/TTljMFJNVGEkTTg0ZHo3NG5VfSIhJnZJb1VUSSNmTTkrUz4sOz9rYClxc3g7ISx6VG4le2Q+Kll9WWQ6TGw+ISNMJWciVlJedG1ublAjaExKc35ic289SzpLWmh8UFZdOSNtPF4oL0UuYXIrPUBX'@;
put 'SENMKi9iaGZENjcsT3k/RjQkUWE4QEM+VS5JImRATyNHWkRmYzo+VyFeeiUvOTxUM1NhdG1QP2soRCFeViR6W3UrNExzSTYoJmYzLyJlL1JrNUc3RmEoc0tIO2QkOGtwT0VxVjAyPDBXd2NrTWBwZT5gKXN7WThqIn5GTThaTEFzIUM+WjpSYlhLb11BX00uSG5IZlk6JkVXYmI7S3pEfUo7S0th'@;
put 'RlNEOX1kLF15Y3lOLF1xSEE6JWRqMUpSOy5xKSthYCxTV3xRaSlGUm1CXXolUmVDTDJEbXwrbmc7SGZLV1hxSGtCISwpKXxUL3pvTlkwMiI/R2RueDFKMnY1NGJOcyFPfjkxS1pmeDBEcH1PI3RxcE5QSF1hZV5sRHdad2w9NVQsYUVjQGUqYSR7c2F7QFI7TX1zZlB3Y25Jc19ZYXhrTj5xVype'@;
put 'aHpYb3g6MGtePzFYQnN+RHJVVW13fmdBfn0/VWk1LCJrMWZNYkg4KjFaZThIUU8vJEx0cSNoRDp9MzozZTJxPS87OkdQTSZrSmZlXUA9aj5aK2JwUUlfP28iUDE5UiZQUXEjQU9yaVZJQlI6SUBZR3xLMjRYbnhTQygvJDdxRnpObDNOXmtlK0Zfe3A3WlYrPighbkxQZUIsUzp3JipxRilOMXJQ'@;
put 'OyhzcGorKjY6bSoyWk00WTQsNUIuQipkZmtUQDBVLzZGSzgxRWVFV0A8KzFWYz9JNyV2cHZIJENxOy5kZGhseHddbkVCIy5pQkNfTissM0F0eHhnaEZDLDhuKFVzW0JAeTxuUFM8OixBfGl5QHVSek5TdmJnXXJfdVRgNSRHKjVDSmhIQiNmS2o2V1dEWm9RTTRkTHhMLjxaL1h8Y31QTi5Gfnx9'@;
put 'RCk0Q24rJVtCT1tyNHpCR25VYzxCeik6NlpyOVY/JnEqcFlzYXtpUnFAeH5FNSxIUStVPGJwb1FSZjtVTmFPYl5XQ3FZMmEyMTE+ZXdxYF4qaSkzI3ZIcV5rOlsha1pydWt9UENrUmQvY3cldVc7Mmh2bnRvd2AiQF9PJDBWc2czcShbV0tzMDpFUlJGIVVhdUJiLGFuKD5XbzIjTXwlek9qKz18'@;
put 'QzhvTHZ7PFhYUkZELlNIWzJNaVhVMExCNltTZjBgZy56Nk54KH5ucn5jLD5tNyUqeFZxNGAhP0kwLlhkX2h9Uz5rXTF+d203P3IiYGZDe0hfaEVtc3Vre28je1lLeTxyRS5YZ0MydytZaSxbSCFQa2tYMkJSdEY9Sk4uTCwjY0dbW291W058Ims6cnlKQmtZNCFoWDYjTXY8ciElI109W1B5PSpq'@;
put 'Myh1LmpzVm9Nd2c7S0B3Vl4qME9Ta1NiN2ZAKyU/YjBzRUQkMEVsUnwjQzF0Rn59dU9JRHFrNEFXRnxpQmtVImpkL2tGLlBFWFB5U1pda2M3TjMqd3k4WjVaaVIkUjFkMV9HYzolWiN3LnlVKzV0O3p5Y2hFO31zXnRSWmo8TVhIfS85MmpjVyVEZU5FRClZPDN7MEREQDBCOVglMlVFdUk7Xjlj'@;
put 'WC5mL0BHT0k1WXJFQTpuMC8ueTEjRShnMFdYV0QpeSZRT3lpSS89YTZseUMyaGcqeHd5bnFaQTtKUHljOn57NCh7I1VqWkdPTihaYXAwVGZtJXBvU3xePEYkY3swZFR0KGQjPChrNlsvLH1IaiNgUjhKU3RFdTJ1LHRWakU6Q0YiIlRueVclOSw+PkZtWmRbOlc/QmRNNDhAK3R1L0ZSdkxTTigk'@;
put 'Ryh7MCZic01fZSxoWi9MbWh8OkkqNkZTT2BBRSllRTEwX2l9RWo3LndlPD9YYXtobUZKT1lvTFdrSER1P2hfeTchWXBFeU4iQzEpK2haRUk7M0lvYktrNEU6NHlJR19nUjwzJkgjZyNZcXxNQSNfXVcydVRqRGU4TUUsPUE9VFU5MjIkVHdFVTVuYXBeW2djI115OyJJMHdMXUhzX1hNO0FpTFkl'@;
put 'L1hXTW0yTExTUylbRUdGLDJGOikpOE5IdnkmIj9iKyImJTBHT2NdInRqNWd6TW47Q0V2cF5AM3FdODkvalNoOSV1Wm8xR108YG9vUXxOTEpuSC8xajFBa2c8IX4sRHx2b3ZPJSxYfX4qcF92dUlSTT9YfG43ZVE2b2BRJWRQRD5wYEBNO2ZOXnQ8fVAjWXhtVUgjMFElQG1yJm18LE80Wkg4dUN0'@;
put 'NXUvb29kdDlLKXZPdSV3KFc4Umc5Oyh8WGs9SVgsWHgvRnd4KllXQiomKTZ1dCFJR34/Z11kWHZEQXErYXBfaTx5WDlNQyhBYS9vaFVWSWk0UF80cmldbHFXR3VsYClmJDRaW3kod01rc0JNXUY8W2R8PCFGZjFLPCFkakM1LzozUjFbYkM1RmU3KGVDQW0sRHwsNltPQUMoVjN7Il1SZm9+eWVy'@;
put 'aGtRZXp3QjBddnRLImx8aTh3TEclQkNiaytRfiF7V1EpOWRCOHlBZ0MrQllHUkY5RDBxZEVYRnRBW0FgeHMhR3g0QUFUWCpFe0NCJW1dUSR4SCU1Wng/aG9hTVFsNG9PZmE8bEoiOFhjbXx5U2BzJT5MSWBrYktlcVJ3dSZUIXVtXV1haDhodFMofTdjYXhNPjZ8O1dKJldEUlJOekR+UXl7Q00o'@;
put 'Ql8/cm45eWI3OVJwWWt6fXJHSCY6UVtaT3VTMHU/NGB1bU8mU0s6MDoyZT9EYChiZWZ6d0B2VFhZN1NLVjFKcCl5TH58SEpAdWQvUFkrT3p6OypuWH1YcGpURGNDQHYpX01WbyVxRj1jNllgUV1EZ3cqaEdtdWxuIzpgWmM8Y3RLOF1yUF4sL0JQWEBbSVoqSnlZT0BiOWY/YGhuPSImIncqJWRQ'@;
put 'Zm8vMWJLWWVmRVdFTmwpeX5iOVkmcG1RZk5FIWNRPD03I318QClpKSxQITE8MWdiSnZ9akFTLng3cW5OIj50cCJLJDdub0R6LF5NQlh1bX5VYThkV0NXNUJ6cWxRakszcDhfTENyYnNSS0psUkdCWztPdzVTRVFqLCxOdjxDaV9aK3I5KWJCVEVCRjhiP0dQIzU2UUAhOWpMaS40ejModU4pPUx6'@;
put 'dW9nNzwkYWpOU15rcCo1PkwyaXo4MmpsT2pZZGZTL3JIcD1vM1dnN3NraH5vISthKWtoKUNBOms1aDNRaiRjU1RYU3YucW5JPmhCL2BWOmZrLkk+ZF8uY09aNGI3YnlEfDgyUEEqNX5KIko/S0RgdHd1RjZ3ImdAd0FxMUUpUzt5KWM/ckVYO1tGSWpaSzg1W2ptPlA4WlFYP2tUW3I0MTtoZTU9'@;
put 'Y0IlSjc+VjJjU1VTbGk0XXo2MXg+fSE1dmY2c3lDZX0udig+fnFwaU12dDR2dWVrckhaaz05SWFoQHpSYzUodENhPHpETURaLix5PnFaLjRvRWY1PU8+djV6bnc0YkJNfjQ4ZU5wMGhxezkvQT1vb2ZoaFokVXlYZjMwW3UxaTcoUkpSXjgsJSRZWTVEOmkqKS9nNWZHPDk9Q31RcXwhUWN8PVs7'@;
put 'T2lCZWl2dEU4UmtPN21CUntEWyErLzl5JX5xSnpLfE1eSHw2UztjTlJXXlQ0TDZdR1RJfSwwcipOOHhlPVYpOnskTUdRLCxidSU3dkxFMTRpUn1ReDZZJTAsZXVJaHNtKXx0e1MuLDZLRUBiLyJtfGNaSDk6ZXRbPiEoZWcyQTNiMjo8fjlNZWMwWmRYaT5iX1FbJlRzdXlZIU13cz1fLnB5e0N9'@;
put 'UVhvcmcrRil4Wn5Oeks4eSFbO0MhRGUiclBdYXNmPHRmTHc7OUJne3lKW1csRVtXI1U5ITxQSWc/U256ZSJyVDtoMXVeSWFyRG04dyUwPUw+Q0F6MUI5V2BSUURtWjphKXQ2dXF1bWFYfCM/OXk5a0E8QC9JenlXZStmTlJWVDl0WiNMNUYodGsiOG4peX1+QWcraHE+Riw3cSM1MyE1Wj9LL101'@;
put 'IX1dXUlJNnxrc1MrJldPSlM0RCRUWlM1bWwwUDFtaE1ffVBKbz56ZlNjUS9mfV0mUWkmVDFAY19QMDI/fWRBZHU/ZVMsMGZWJU1YMCtnYWJRZVFTaWNXKEE7JXlmMk9pb1pVSXg/LGshXll4SyJEODokIjYpVjFJTGRDXmdReU1aSFpxJldERWZ5MjhwT109QEcuUSNkVXh2PXcyLzA7NGQ9dE0q'@;
put 'X1lId345I01OX1E6KUM5X2BUdyhdfixmWiZ1OHR5bkMhaVZZeyZ6VztabUg7U2htfjw8cC45NyF1WCF6R2smbEhjUV5DcFFeP0Y1JUc6JU9POSpBOTxkbn00d0MybTp4TWU5TW96P31jQ1Naai4ocSQsLmNsKEw5TFVtQVgoVX5DJCpfZFcxPnVXIWNzPCwmak1TaTx3KXwoUmhCbENOU1hVZHN5'@;
put 'O2IzKUR7UHZBWHxpNUg7VVJKc09TKXd2Tj0qOy9eeSlncFV4OChaPCpKVkxuailmaVBadlM9OTgqLGI3SCx1bHNlL09JOkdRelclUHlWbH5SQHdVXl1AM3hyeFg8LiwicCR6InxOZyUvQE5qPXI/Ozl9aU1SXWA3fFQwdGFDcyg4b0BHVGFJV3ovSVdVQ0BOPEA0fmFYQzgvSlhpL2F6RT9xJW5T'@;
put 'JD0qZUpQenI/YVNqKHJMJi51TXxadnBRIylqQEAvIllOMEU1Tk92VG45Jm9VcV53PipoaH4jUzo9fD1NWF5sbF4uTnAzOTpzc0pEeT5VWldPPGwlT1lHMUx0N2AjLyNnZnE4UWRgQCY4YUFIZl4yXmdXb3QuY1tAN2NqNkArKXI+MXxAViVvSHY9VWcpY3BAZmxqYzlAfCVBVSYwbV19aGg9KUEw'@;
put 'YVtFfEpoOGhWVHBuVGc6eilfaT03eDtQR0tgLkB6fnNAWmtMMUIrcm8sc10iYkswXXAwYGNsUjhUezRKS2FrTDFFWzU3LDdgUVlkKE0od1FwZFIwenNueFJMRShHQiV1blNhamZqY3xhdlRyRD1HTElbeU99LE9NeCQ7Q1J7PWUrfV1WblpnKXNBfWRbe1ZAclNXV3NwMzRVNXpwM3l7WGoxdTxU'@;
put 'bTcmJVtAP2s8PjpUeyE3eGtYVm9FN2JsKTplV0hZMFVBZCQ2NSo+RWwvW2tgTzFnMjRqRGV5ImRYOiNOTTlacD1eZTlKXj9bKURIM3pwOWRyUk9oNSpkMzFNUlsqZTh5ISxYPn4xVlU/aDYpQGoieTBoLDg3ezghcE8+RUdYVSlxUDZSfHdsUzdzZT13dzJEYWs7MWdwLD0zNnhwaTtBcilBdzw8'@;
put 'KC97PiJZeUBmZ1hMW18ueDFlZkV8eX1fYVNPZit0b35NSlQ5ZHdscW9xKEg0S2Z4cXVOWDtOPkB5c1M7Xl82Tj9kOyVVMFklcT8rUWo1ODpNWFU9K29vdXlXQ3F0dmwkW0w2LEAyISpieTkpM3YlcWtdRl4zTzYwW1lmJC9LPHk5OnJtXVUxbVFtTVN9OVBBKDFyM3NZeTU6TCxlNUF9UjFRPV1I'@;
put 'KFtiSCpDRXsmMSYxO31iJitBfjJmN3wiNXhxe0hxeVBlIUp0ZDUsTkdmJnd6IURKanlQbSlncSFHNSlwNT1peWQxLkd0KGt7fTxLc2ZPdXhKeEd3VC8iLG1PIlpFKiU1NnwrJiNxPT1LWkNDcHs0Sm1fNUpeOVh6WCR6K0UoMTc5WTNeYjF9YVNqNkZGUjhdP2BKPV1Ie2AjYH1LdS9+bSxdT1s/'@;
put 'YFZ6d0x2Jkx3UkY2XmssUUdGe3w2JU44d0s/JFswV1MjSGA6YzFETSxvJGEjcTU9e0o8WCM3WCU+Q010Smd9aCNqbSZqX150YWdPSzZSWjlWKGNOWFduMFFjfW0hfkpuT20za1JpQmBoODJeQGYxQlI7KWJUOixfdn08R09NYlN+ZkhSVEQuPlVacDQoN2c/Zz1IZXojK0l8Y3old3Bpe0kjcFNs'@;
put 'JCtka0EsbWQ2VnEyeHdnT1oqdHZ4cU9tNFZZQ0tYZ35sP0tnZj8vKS5ZSDxkNX55VDhRMHFFI0ttZVA3RH1nNyg7ZSQ/YiN8QSZMay5qVXd6aTMxdG0kR05DKChTYWUhYlpFYDo6LDFhZWJOSVgmW2JXK2VRNjVdc3tnUU4mNVlnUUIwd3oqezYvP1s+OGN2WG5HNVRNKmV6aiNJbWd1UUYsX2h0'@;
put 'ViRxOmZ1UUBDekQ6LlVJUWBaWER+TnR6U082XnxSPX4zbnkzcyglPVpkMXNwcG84RyltJnx9NVMyYE9Dd0IuImdKcCk/fE5MU29mX0JtJHp1Jk5KTWQwMClCLnA1RXZdQGI/el1fL3dBckIwLk9UOFoiInZQR3lbYkZlbUgyLEBrWzsyNU08dFZtJEhufm8kX2gkPiR0VisqSGtvfkFLezZ5MUhW'@;
put 'MFB0dCM+ITwqQFU2azVvMm9VaF4/ZDovd1hgKWBnTmxCYHRvYFlZRmx7bDshY308fFpDTGFve3F2eEBOS1pHdmZOaGVIWTtAKnlDJnt3OTtYRlk5VjhATFUvYEJYUTxiU316UF1SaEdfKjFVNFtgSCZJVmEmV0YyKXwjMGZWVVo9Z24waWI0W2oqZD03amJjS0clYkM1b2ttO2IxcSR0Nlg2RmpL'@;
put 'OWtlV0YqcVdjfVp6bClrIiNCdXwoc1lDZ1lGLygkaCExWFVNW3NnYnNxbjpaQkBQXWZiYj02WEpTVWRSNiJSIlJINmM5PGo/M1B2fDF4Tz9FZ1ZSPEFKRmxNJHNRIXFoSTl2RiZrdH1NeT1DMnoxREB6WFNsZndvOl9pczIjUGlaclZ+O1tZRVFOU0AlUz5mU2ZGelBbYWlbTDF+dWhEQzNUd2ok'@;
put 'c1Z+b2I2W017JltSRFEkYnZpMlEjNkZ7Ozp0byt8XU9bbzhOL2o7NVJDZ1NtUEpZYE9mQzdhdiYuWmxhWWNLXVBaOzpyJVVHZkN2OS9AP1t1SEY6d0d+MzI2WnM9bFVmW2JyUSh3M35RMjNTa2ZCUjJeQkdIR2VodEdpQTI8M1FiI2QqVSw8aSI4IlRCa0pNP3NfeD15UUF3VyN3T0NFRE1nWiQ0'@;
put 'OEY9NFgyVkByZyoydUxxaiYhamZSUGlhc107NlQ2a0NEeXlFNUR5RHwkMiExa1tAS2YzcUp4OTtAZGRPcz1MInJJPn54cSQre0lJUz8hZHI5I2lZKWxgPmx+Ono4KDVNXXlSd2dxaiJJKEczX3YxfTYvYjhOZEZsXXR9Qnh7Ond8QEA5Wn03aTF6eFgqOXtKIVQ4ZCFNOFpWKml2bEdULCwwcXA4'@;
put 'NCtOcmthVFcsVnZmQGtic3IzXmBvN0JqeG48THxhdlRfSj9pSVFAOEhpNWZQKTB9QyFNaV1VRVdXJTE2Un1YVHB4cXlfQEt8K0l9ImxwbyhAcnd8VF83JWdubSRoKClvNH0vdEtpUUNwbzBqcmhhRXgxYFUsXjw/JTx2e2hzajZIcXZtVVhNaXUuX19FdVR5Q3NQMjppUihKQ0lSaj5aIUAxOWI5'@;
put 'U3NvNzVSVk9UQ3VqaHYrJWoocEQxRlJUOHlQWywvd1IpVlVHZmhrX2luQGlSRSNtTlgyWFdCOiEmSjMyMWBTdXJbRS9AJXE3RFFaZnArLE5UZUsvbHFUYjY4O1N9Uzcja0FFKmcqSn55dmhsd3RtTEpfO040YldfJUZHZG1yOH01eiN1aCROYEB1PlVMMkYkL3ttUEsjYV4pJCVwWDxJfFdMMygr'@;
put 'XWlXZ0VsT252SlcveHA2KmJqV0lkY3AmMFJOV1YpLjhQUSRQNVl+PC5dZWlwUjM8MHc+bFsreWloZT8oW0BdQ1tDOVMpU2U4W3ZRI1c5NHhIbDNafWtMPF1GZDY6bHJOPjFiMXVPbU9AbUdWVylTaSZXPU5+UVQ4Xmp1b1dwOix8Ii9GYWsiWjhjezphITh6Q0gkKGJ+em9QQy48Qmxxen1wTDNj'@;
put 'TFUuYShIbHhsPSxSfX0iYDUqOnxRKzxpMyRwcjJLdiYlWWl+UyIzaztuYWJHO2coY0M2Q0lJPUp3fl13e3wxcGt2a3RNajtVXl8rVmREXkIxeSR7aHkkYDVvXkJuPDZdd3dAJCRZKiZPSSR2UV5pWGFxVDU9VShLfG1NJVIxRCF3WzRBV0hfYEguRyh1YCtgPzp1cG9HKDZmbUc1cGF6YWk7clU2'@;
put 'PXA8a3smVEZ3Jk55JSUxNCJLLiMudCFfWUtzX0w1XUojM10pa1UvO1hBXlFBdklnL2tSPVJTSE58PnM4VC8rI2ZCI1BYMDtLcXtGKj85LE5OJnAkLCtAa3RGNVliV3QxPixKQEpRbnlQMCJyI1clI0d+aHI6Q09JY2RCUV9NNjV1amtfK09RRSY0N3NBR0cofl09T1FFVj9eb3BLLmg/dUNYbT1x'@;
put 'JlZfTnNzWVY5TjM8S3kvdVZ0RmMkWD1KZ1R7SWckZG14a3tSfV9AWjczMD8lYnswOCl7OGhxR1cxeG08YWxMM3QyZ2dscXpRUlppfmkqUlJHOTg4ISY8TiRiS0AlL2FfNjdQN2EsMXN5dHRbaHJGIToyb2d1SXJLZn1oRklMbXshOzh3PDVIZzxqUnE1clMvVCthezA3UihjcWtLUjteNktdPHcv'@;
put 'VXtifCtFbUgidH1eTmhtdjBmeiFCdSg/MiszbngxdTkwaGVyJXgvIlB3Wy9MSH1DKFE4WjMwRz0kTTlSPSx3MTwjb3B9alU2WEVPI29PQ1tZUzghYFJtSWNUMUlSPEw+S3deL0xaKVUzTV04WGAhdSIoZmNPeHFPezVqckU3RGp8LlBDNlk4YXRlVWo3Y049bWAiVnQ+N2BTTVQpcXNFW1RaZmxA'@;
put 'Ql9LcG0je0paVTxzeHZwKkgmanVTQUo3OlMyRDpPUypALi8pQDx4a3ZwbngxRT9vI3IpPiJ+QF1nMFYkbW5mbiNZamlOKCF+Xm01MnhHISFLW25CayJ4USRIMWVEencoQ2hXdkJ2OEdrLEJ3TUdgTlhYPz59PGNZOkBgb29LXVp6az5pYjtePGk0Pj0mPyRsdigmUUgsK35hRUFgMX1UJE05azo6'@;
put 'Ry5VQ1g8QFFZakg2InxWJGNHfENHNk5fI0NEeT08QUshKiVDRW48ZyQ5N1p1X0BqTEtWRz95MHI4SSUxJjEsRTRqeV1pIzpmYmM+UzNwT0hWU21Neng2K2x5QEtjISZiVyN2SHwlYWk/IU5oPE56cSxdd10oW3IkZTVIdDFNL0shLDp7JEdqOXUpLDhvS3FeSWVfYjhmQFtPZlh3QWE+OyEuUTFN'@;
put 'TFZ3MTFNPD9dRnZPRm9vNCpUdldsND1fbjBhb3I1aDhbS0pga14uSjJIW0FqK1lmQl0zVjJFZkgyRkJ5fDF8LHt5cmJuJnlhMUEyKmckXXZgaFFeazFEJWdXSSVfZmtYYF03cDgkUn40ZF1YJUg/cmwiWkZwelo8az0lP20+ZGouK0s7aVZnYXhrI0owT0lOLl5JOjs5Xm9RamF3Tm81PywjR0JA'@;
put 'NSJHRCU3dkxOPGhvdjBHPUNbIzBld0FTWyM9SHxKMjZrY2wvamMuW3dOV3A7L0JoM1hxTXZPP3J2dDtbNix4SSxrTCVddjFHbHhgRCpRSDZCWlN3QGNObWFUWm1kMSYxKC5ETH0wIXxvWWBsO0srPDZXYlkiL0MxK0ExREE8ekdQSFRMUUI8NFlyOk5ZRS9CP2s/MFdOIyk+RT9pc3RaUFQ1ZVNz'@;
put 'SDk0bFNkYUVpPm5DJF1RLGZRMlA2NChCTk4keVFWdmoyXnVCISRQfE9uWm5SJEV0Y3VKSnVOWVNkWnZnUi5oQUlQNUkwWE9hYXthX0hZbVVqLmNmR3c8YHY0OlhQfnQ9YkQjN3VCJEROWFB7dE9ORjxzNkFnOkZqRU91U3Y3cVEyUkN2T2VmeExtSGpMTV0rRiRaL0ZUXnNFTUNWY1J2ZiFhOyRJ'@;
put 'VVk3VzgqQFFndTRxQDJsUk1FcSJtblpJbzd1dXoiPDdLUk1PSWpsYStjOSw5eF1kLERpR1MuTUBwYiZ3eiEmJFBULCouV2w2R0dsL3g4MEV0KV15ZGwwd1Y3UWovW19gWldIWHEreHhrdW9PZFgxWjo3YFomRCNfRWFESD1CUVJGJDtIL0JZQWdNSikmPHh6WCsiKFNHPmtURHxTemxiN1tdeWpF'@;
put 'RTFqcjZSUGI3d2Z5ZDdCJC84Q1F9fHp9IXZiKCpbbld1RC89RERPSjBzUFgoOFtBZG1dNT0zTzY+Nlg9SH0lUFZ+fSJNRVcldlowI1BudHJsYj85WzVhR3Q4P1d0SU42a0d0LCF5fXVJd0RkNSlVXyo8XjdQL0RkNVpyaVQ1YTFKd3xAe1tEXzAjazNUe1JXV2ddNXpvXldjcDteQjdTcUo3bWdp'@;
put 'NU08LGY6PlduejhCMjFxT3dqfWUuQzpbWlpMeW9AaDpMSFU9dCk0Sj4/JEZbPX5AUThbUWtCb1p2R21XNlkzU3F3eGx8Rzp8SEIiaCNZR0xOdD9gd101PThQOlFyb0kiZHxfcUhjb1pffDVNciF0OCEoQWRPSjAkIjNHM1l9L0JaP05FfiJ2a0VFPTR9WGBreEZYKitUQEpeMlg+WkRgVkdHbyV1'@;
put 'b0BScilCZFk6O0ZbUH57eWRIU1p6PTx5MHY8I0clPkc5STJ7Xks3SDtOaSVMLGZuZ2IoeDljNkoyU1IqJnxsSGZoayVfKVJzRWg3VHl0S1NoZUxEaTZrbEpzdndMR2N2MWxVLzBjIzo2WnJ+QjIvO01lUiF+T3NjdlJxe3ZecSJCPzQ1JGU1Wm55MTZ2WkJYXkBTRFsqN09PfXcxciY8MWEqZzBR'@;
put 'TyIzN0UobzxySWNYYnN3YGhrYXN3YDU8Yk9Bfi4yKHpBZEBGPU1NT1Y6LkxbeS46ZHNNUHc2K1soJXJOUDR0TDd9O0dmdkZeQE8/Jkg/MFBNbT1Yc21oNVJmeHE4PyVHIz12KGJ6MXEoRUpWfihGaXpHNUIyODNJT3h1aVI1NitkY09aZDRRfUh6e1Q8NCg/eUs0Nlh6Oyx6Pk9+MHpIdlhtMFNm'@;
put 'X2dFYiRUbitzeHpaSjBdTzdwfjRYWj9Mb3puOHRpP1o2aVV2VCRVZlE7VXssWzwwKUQlJVVub1EmcntKc09RWUZYNmw7Y140UGBJU25wakBKK2RbSXpiQUpYZGVYIjldTk5wP1pNSGtJO09hSzBHNktSaF0kRE9eUCRCSCo8UUFgUSoqVjdSW0tTPyIudEh4Kz9YdHlaZ1szRUc1PnhWe2B1fEVv'@;
put 'Z3dBJWcobFkjQkFLdGJHe2gmdWJfQHxkfGFoYUtfP0dYVXB+NUg/R0R+JCMjWS81T2J+Km1gQ1UiMXM6KXNAYklSQjhWKF9hKXo4IzxRcy9mbj9YUyU5S0x9aUAkYyhHJXFDclYqUVtGOihzLDBrfG5END0vJEQofls+W2kqQD5Jbns1YmMpMlBtbHtePjBUdl4/ImhpQH1KX3c3cEQ/fVR7PkJy'@;
put 'TVUqNUc7X2lAd0RqYlV0Wmc9N2kpVHteQ3B2STF2W1dLUHZ9cjwiaT9TcnNpdDRKZm46TTN2UERUeXFWJXdiSUU9KUskZE5tQClQaWV+LldgQVlLUUspdD89MUNzST5bUlFucFIzV3xXWE9UUiNYZXc4eT1PTVJFUDpfO0FRWi5kPzEsIThkWT43TEt4ey83JD5tSzFPdn1DLHhTNWMmJXNoKUYx'@;
put 'MURIPk1nQ1NwSCsyIUwpVyg4JHMkJndGTlh3I1c6MmNwa3hKYE9QdGx5ZSI+dWprSk42VSElbTwifGljPiVfNDtOVTF4PGZlN2VNSFllOmREbnJSPz5qZTEyWUR5ZyZ0XjtqWiNYRVgialpydkhBWDkyPSwjblk+K2gpMkEzTHFyJGU1NDRrRWZbWTlERDslIUB1Q3dDP1I6WTAjRU1hR3Ehc2I/'@;
put 'LGBUTjwoTktnVVlvNXNiVSRvd0JJMC8lLyQwX2ZWKngqU1Z5OG1VWG0uejpRbVglR3B1Mk1EWCpmTWFnKjprSX1XcGI9fFIxN0dRNXBpPkhRUWk2My4qPVt0SS5ZZyowSFheOlYhdEZOb0VdVys7XXZWJXZ5Ki5JVGBOZXlXQ1FOdUVxWGM7PEZrLiZEI041KDdnYSFwaDpZVHFXfCM0Vn15XT5C'@;
put 'VUJNMWRaYzZVd0k9RiFga28sOklPUTowOFFnTFAkN0xZREBFXzRbQiJJdGAzd2xqJGtRbiVZNnxSWjErIzBdI1JMMzkwQnYxV2hJKGNHTlJqbXFVeVptNio5fEokNHZGN042SyozJFlaUlZxSjorImZvQnNAY2xyWD91Rj8odUZOcF4sLzF0dEQ9bEVhWkdSYEg5dilmJHF8ZHw6O0N4MGdHIzxF'@;
put 'ZXlvOyV+QSpnSSZNOSxoL0AiWFFlb141LERrTmVCPVRXZDFyTl9OOlJbfVNhZ1YxbihHRy9dNC8xMlJ2VWAmbG85T0tFQUgxUlFqT1l2UDc/eWlxRUhgdSozemBZekI5OCpDe2UjblB3cHc/YEFhJEVHdHJddVkqWWJ1R1BnfGpWNVlfXl90LFk+dChSeWxHKy5hVjJGVDkpQmxfaUdvTDRsazdC'@;
put 'Ykt3TCJ5Nj0hRGR0RWYmJjxRVk41dHFDfGFKZDs8dkBnc2FPR05FT3AyIkxoTz9LOm04IVtjbWNBNk4/SDR1fjtpR1VSd2JacDRHPnozfE1BM3EmSU1KSF9HPXpQVm0mMkVRbD8hPFpdPUJPYEBDK2wreHhKbjovJik4W2NHZy9ybHY1MU5sU2A6dTVlaTswVHE1R3BlSyNhUzF0YXt9NlU8Wzxb'@;
put 'd1I6LjxdPSYjKXg+VTpLVVRdbj94YFg5bXVENTsocEgkZWA7eUZfTSpzQyllWEpVNjAkPkl5VmErTWw2TUgkeiZFZCFNTXZUdUJJdHhYJmAvODY8ZHx1RVRwMGcuOVUuMClfdSxjd0FSa3B9IXJAKD1tTilwZDBIfFcpOWZXSWAya2dhYltAXVNmY1ZtIlFkWDlkXVB4SWZTemJ3NEAxSHI7Nl0v'@;
put 'ODZ0NmpGMUQ8X0lSSTtPU3FneG9fQD85NVtPSjIxV2JpdUJ8ZlhCX0Q+Q11mJllrfCpBLmlDcGdFUkp6eSoyVmBfK3hWPFckc1JyaENUXT5qZztIcFZAV2ZpSlRISWZjWD4vTSJfb1lIVXU8TFNxN3ZJU1ouLFFyenosXUlqcm97RWJHIyErVDxPPkhsS3omYHtTPiUxSyhQUiNKMVp0Jk85NF18'@;
put 'UjpiWklpbzBOMW1pbT4hS3ozJjRQa21PNX18TjReVE5je081aFowRjVlNVdnZEo7OSp1TFBVRWY1QDEoQC4sZE9BbmUpK2pZImN7NFNJOnxmZnl4MW01Ulc6T1lmO00mdyxZWXZVRlB6aEwxd2BSbkJLaS9ONnk9TzNzUzpaYjU9bDYpJTQ1UyR7ISR2ZlB7Jl48MWFKWzdVdVZkSF41U3BQVClB'@;
put 'VF8uT2J1KC96QVBhMTRvI2BhWD57VlE1QHBAUld6YnQ1YmVwZCN8dVA/W2guSTUmIy5PeSEyNlBjUjpqLF1Dcl9mJl02PEg4WlJRUiFoLn1DIWlSUX4wVXVmejxyZkAmXnpVd0hdbWFVUy43STI8TlM1KHcpImVOMExvYSlaKjNaVm45UjJfe2Q7Z1RYNT10Z0RdPHs5dG0vTFFqPklzb05bTVhM'@;
put 'dXlvX3kuMSwlPE1eaGhTR1FrbUJuMG1tNEFVYGxSfGQuMmAsR0RFd21NZzVwUT1CaDo8OTttW2FdUlthVTEyUVs/NHArQ1RzIWFOSixnPE9+b3sqZDJzS051JW1OJGJfU3JOeWwxK35QVCR8W3s6d2pDbz1hZXlsSShHYDxWQGhLMD91K1ltczU2OzFUK2NiU2BTbGV1cmdKQUszeVkmPi5ecUB7'@;
put 'dXEwYnJWZDhXWHchQXBEO3IxNixhLDMxRmVhZyYweFt5Xj0kc1pwMFZQSTwrPFQ6MyUvRHh7WXBFPDxnXnVaPEk7UCZUeUN8bWdtbCMqKFsqQl5kMkolVFdJQWU4PlZaVlVRaFVLMF1PN2BCe0M0Z2g/WnVON3pvOk57L3tfbH1nVCYoKy49PHFwP2dmc107R1BfU1s1VGlMeH5NMWw+O3NRLCl4'@;
put 'O0B+QGUicjRVSCxncygjOSxRZFhAM2hCXTZqSC5sMiIsMnomLFEkfG99Zmh9bV1XOCJWWFpMOE8xL2dhcDY1LzptOVVSVTlfRUdCK2QyWFRyVm97U3V3UEtKSz8rX1Z6XkRsaGFuSyYwa1NLUFFWWSpReVtMPVlILmlKOndVKHkwRVNoOD59dltaYUZndislL1dkaSNFXSFiNG09NyFmMkoxLF48'@;
put 'cThAK19WNG0lfERqbHtuRD5JQFhUJW08SWQwdlI2TV1lM31dRXAhISxGYl1LeVFaQXxqVkhsaGdnRlFbRjBbJjpiW0AlPWZGNG1dW0MlJE00dkZGfl45b3Z2YjJ5eVF7b3dXPCZPcUtJRjVedHx5eyhbS3E0QG1rbD8oemFjdWE7JUU1ZS4pVkRsdkVrcnwiNDxoJENGZi4/d3lxd29rVlFmejpm'@;
put 'bXcjaSk9Oj9YMTdFP21sX2V+Pm1sQW9WPU9YOWFRRmc4OiE9TmhVSkZMNnx1cmhwMGxZVzpNNT9jbHMrZClHWGFoOHkwNHtGdzJpLzcuTCxhVGlGVEJkNzJxSHNkMTk6emJMUmFBb1dWfW1lUGYrP2N2XTUzY1QvfFR0Vmw8LGhvTks0V1UhYlRDSFpWZ3A6YVYsODIyRDZLYT0hU3IpUTpWdV91'@;
put 'IjVTdmJwdFFiRTNdWFpoJmUhck40akY4e3k3JS5KLFpIKWAodlB3bEZROVZbZW5RRj5UKmhEX1ZMO21OQEtkIXVsKjBdNHcjan1HPEg2YGQpI3Qsa2BLWzNRa3hNNjp3WmtUYU07MiRuUD1yIjw5JlNwWiNIPT06SzZkLDRVezp6YCh8JTt+aUl+JDZyaFg2clpNOzYlcmxbZTRqcG08cHZ8RiNR'@;
put 'Nm97R2Rrdkx+M3dMfjxhKnI+elcxQnwhfXo0LHs5cmgyT3ZIPT06PHNhIXtbRHhOW25eJlVNaF5sdER8R3t3IWQoOXIlKTxIcmgvUi5FWVRBQUFdekFBe1F7eWpYWlldd29OR3AsJUdIXlhWUnsxVFB6aXBMbVgjKkF3QUFBQUFBQUFBQUlBeiE+b2dELC5kazJgbnU1bn5yZzcheEkvSi93eTws'@;
put 'KWI0d047Yz45L1gsUmZhIVVudlVUbkkiOVJ5Vl1QeSRbSzw2YTU5dWtXUHtFKnw/K2FhPUJhZ3lbTGpIPjJgZWZCZHd2cVhWdEI0aHU8dzNhI35IMDc1KX4oQVhkdD00cjNPNTdQbSR2Z2VDV3BiJl0oY0wjanw9OExQM1V4VjhzbUN9NEpVc0t7Zj9PKUZpfE95TTtKck1dQ1JCVG8wTnVVYDM5'@;
put 'bXJFSHZUeDZdKFJnLEtBNmtgSjA7KF11R1MlJmswcXEkMFB+JF5zRnk4RVl7bCE7PjVmUCs/VXpHU1YzeD9PZnpQd0VjYkdFYHovcVhBeURLd0RDQGAqUUZEYDNDRHBeSD5tS1t8Rk1wfTNzfV17O0QmWiVbOzFCc1FXcSlOPlcsSiYmIUd9L3VjYSlnfU1Sc3B+ZCp0RkowTipgVHl+VzUwPTBY'@;
put 'WkV+QTg8XUlYb14uenRzKmloTiMpYUE7eFlleEN9bGFLaFhLKEI2d18+UzI4THp7dlg0RFE/bW0wYzpKe1RHaygjYDpaP31kXkYvfCg0fSRpNnlsKjtHQntkUl1YSkxLelBGeCo0Nj1nTThHbyNjZDlaZ3xdUEBxVG00YUFPUSY4cUp0I3k2RCE0dFttQGF5Yk94Z2RrPVQ7WEloaCRea1dgRVpL'@;
put 'Y3dXVUJRbW9MMj0mY1d+fiQ3OkxkNVtFIVg7OjQmcnQhRSRVRzBYeT1GR19vOjVyemNATGYrVTN3PSUvfkxMK0s7ODIwND4jLlAuW2d1d3BCaFgwUUYrWVI/dEJUXUciTHIhREhba1FhT0ZHNVt9SSRyWyNBVE9LZkZCfDZ3RiZzWnxjaCwlKjdJXnQkL25aTHomWnRNPWR4NTlYamUhOUw/eSVb'@;
put 'NkNfO2pqYDBAdVF4cHBbTjVucyY8Vk43RElRb2l8PVJ8OWUpS3Y2NmpXPGEjLEVjTldQJXVNMDgxUEgpOmReLnFTOm47TmFyaGBZQFtzLiYuOC92d3pNdWdiOj5hdF1uPEleMGh5U2coVDIjXkYrcD54aD16cFE2TSZHVEt7Il4hfktQakpieiFdUHtrNlRkLlZLdUdCVlsidzQ7cmhSUHtHQ3cw'@;
put 'd3JBPGBXPF13fmMjTy9hdnVfQmNsPDFRTTY8ZGNibTpGUnQ+KkxUbnZ8UzRReGlbT3N9ZVZnVHJ0dCN6b0soTDRiYHUvVjYicEZwLyV+RFUzV3g3ISI6QSZAWFtyZk9+UyxrbEZrYnNPNClTXlpdPD9QRjFzVmFUNi9nW3l3PnM0S0xdSytbeCQhVFlVUzA9aUVwLHJ7IWImVl5JWGddMmApLG9V'@;
put 'aVhwK15NbEFoemB2fElUMlY8IWdiKWBJdXIudUlxbzlpTi4lMkpiZDoiWERXfisoaUZXJkQ8L2kqUHQhJnJFfUpTTihvIXVvNnloaXxea1pkPmlFN29xIWJyS1YrY1NqYGlbLlcvUFtValdSeSRjWG1SMilQb3kwLzNpP0tNOGRqTS9YU2pOYG4hIkZrSzQ7YSgyVU89VnhnZCtUZU8mPCNRc3oi'@;
put 'QGFZZFJ+LkJ6PCpnP1IsfU1YVmA0UmJtfG0vSTU4IypAOEMreCRUciN2SiFZNDdGa1U9YF9SWGteKCZXbVNLPzdVNVFxPlo4Nn0+UShxXTRRbWx7JGcqamgwPTFWKzVLaTBRLDx+THZYXVNGJj4wMXg2UFJmdjU5eC9ffl93UnRFWHt5RW96MWgmT2tQTmUvMlhGR3doYHVDLm9YRzpDWS5vbWht'@;
put 'YSxyYl0xQT1oMW5CRihIMGNBeSYqTU9kTldOaE46bFZCOlYpbT9oMyp2R0ZXdjNVbGo/RUUqQmMlQT5tYyMsIXZbfV4qQnR2RlFyVHdPeHI1eDc2K3BFfColYmg5UkMxW2lTQm9QPmlheUdQZTN4cldAMkdyUHhPdUpCNFtJSHYweCJJRnswMEcyfCRoI0JaLH19cnN1UFNEUUc5NVk3PCNiR2xP'@;
put 'QmQqJXJqdDVOLz9fY1M4RlglaGMxPl1OdlsoUVJKfVdnW0l7UTRYKl8wYjQqLF1sOClKRWh4TDQpcmVqSEEodkczZT8uR11VKEglP3xEI2lnTEpYbkJseFk5aUZVcExrQ1BrXkImKUQlIT99Zl0jfG5TWnNUMSl3SC8uZmlZUEZDeExJSV9bSU4oWjNLJjlLSC43I2Jue2hEb090Zy4pJENEN1JR'@;
put 'bipSdzRNX3JSRUtLUXptUyo+L1dSIVEyaUR8UyEudEY4XSNPQ2ZRSHNNVkxfJjAmXlhLRntlSXFidXJXYzwlZ0l3dV4oQng6aj81Ozw7LFE4fXtPMm17eiNadzcmSUVgUVZwLkQoR2U8cy5RIj1QdDlKIW8mLmVJPG9TKG0sV0JUN2tBSTZFPCk7NUU/KmQ0RHZLPCs5by8/L251Kld8VjZVSWhy'@;
put 'ZiN0L11ZJS5wYDpjYD1nSUliRVNpQCpBd0AzLnltdXhkeHExSGg9e1tsdWF4ZHV0fi9aZWFlPnJebGtEMTEoMUooWWFwIlZ3byooRnwzdyZ3e0lYV2ZvbFpHYG8uZllUdUUxITFdMUFSInFURDk6ZDQqMG4xdFBdfk14KXdJbUsqeVlMVEteUT5dZm9GKmxlSnZYPEsqVjJJMDcoY2ZjdFY6TXpV'@;
put 'amBQViprdEMsLG86K3hRZ1hrJXNYdnV9MUJTYkg8LzBbX2VRL18iZVdDTG5zKTA0dDtFUE9lNlFoN3pDQnAxXlZFbFAmNXNVVmZXRGNNNkVdcnVQNEJrPV03eTVJIXQhaVpFcGJNRkgmN0NIY11fWDBNQ3RyP2VCIWkkMSpQbzFxOTh6UEppLjB5UFBDPlM7TmZafnl3XntQMlNXazc4Jj1AJjx2'@;
put 'KnJUM3k2eTJbJVdxXnRLSHRFamU7ZXVCTzdGeHw/NE8ib1BzUmBEXWF3T01lYSl+QjBrZylSQD5feDV3ZkdPWW4zbT5xdiR8NiokKDhqVUA7dW1tRDU7Nz8iUz5fMV9ed3goNGM8W3pBb3puRU0xYWMhfkg1dktITEE0MGw0T31jWUNASmk0MlVgN08pUCVeSz5DPmgzIzsoQiZbNWo5LGhXUz5R'@;
put 'b1YyQSlZPk14YTVYKlE6aHA9cE5EKEhoWCJWI3pzWmhEbUo1KllbI1V0XmM0YXcjX1VwWmpvcENAd3BxPjw/Uk8/WiVuPj5hWjBCUztDODBDeWYhUXV2a1RKaHYpQnNVKTkqMzQjYzl4aXYrfjVRZGMkO1IqTkxJUz9pTz0vKi9qKlhBPUpqWnEvd1tFYDo1cH1XIi9EUnxkM2AkJF18fnIxWEE4'@;
put 'JWY0aT56VzQyM10oSGUuPytgIzs2VmZzNDIpaGo6WFYmNCI5RipSOipgV3M0OjlwX1omNTB7W1tqPkFXMUsqSFBhMDoyVVdCa3g4PklYQ21CZmFvYTBQXnFfSDIkLkZrSXB6InlwWjdtU2JnPWV7en1xV086QkNhezF2PjNodndJRko4SVA1I2x3d3p3Ykc3PCRLTFkxLldpZHF+MW80UjdpRClD'@;
put 'cHV3LkhuI2RaSCxLbDFJMD49dld+NEQ3S3ltTDtYPHRnV3JMKjJBKGMmPkdddSRGKkgrRlBfNiVUfWFHKy9QV0RfTD08JkUwVTUvfU1NM1kuMWo2IkczMDkxQHptS0ExbXprUkFlfkE/STJZKzlTZFc/QDRkWWxvaUxfQCgpTDlGXTU6Kl51JiwlfS86L31yU0xZUTsicVU5VVtIaSljNTEwb2JL'@;
put 'Mko3N2huK3Y9e2IocGZCISxsVzxyOGJzWSFhUzBkITtQe0J7Szg/XVQva1IwWUlrISVPdywlTHtYQXJ4T0dXTTJuZUwxTXYwWVlCIn1FJEhGfU8mdTgoenx0KkAxfC5ldlo0djVnNWxYSj1qN1FZPjxJU1liak4qUkBGUExVVCM6XXVjMkt6bDhARDYpaFlmRjZ7ZSZqajM9YGpha2VKczRuI2NG'@;
put 'NWFsQmd6Mkg8LEtTJjdLNjZ7azglRm5zb1dmcilfNXtBfHB4YWx3Oyo7KmVvQ1NKOVU1Y0g4SmpReEtRJXNNImhUPj9VMEF4VSM6YSxzN3dmdDs2KmldbWRkcEQpYXRsZSYhKmJVPGEqO2lsW18maEgxUnZTKy9vfVBuN0kzKzNmJFFZWiQsN0t6YEJMUnVrIi5iKndaVFVqRGVrajk+KDRJYz9Q'@;
put 'MU4+NXMoU0N0aXBWTUdnd0dZQG8wZ0BIWnM/Om12JTQ/KkFjfGk3fjFuWW9eSXlBeXVOflA5XUh6Ok9IIiRMTmtJfDBgNlNabEBZcVsiKEVsV1hmbXs0bFYuTD94WShfJFY7Y0QwYjQoJnVfZHFmPDxdMmdhMjRqSFgmfkd2cG12NDF3Wjs1cmh2KXlyYjdRYDZqQU0icmFKU2l7fGQ7cHAlRHRV'@;
put 'IjYqVnc3UXZReUIqZ35aSntsdCMjQGBbPU4vVktnRkBMbkhYV0NKZiNedFQ6eUoyaVB9X3FZOUsvOEY1aiwkZzBPYGFoNX5ldDRQez4pcnlTRlslZlliMzN2Ikp+V2hAVjVaKFFWQVYpMXZgSV8vPyo2VGA5fn56XVl9d2dMU3NnRW9lNWR+bFo3P0g0RzJKP3pYJWw9fSFHXkgyW0lDRVUmZGJ4'@;
put 'JkZ7VGB6bTckKDtvTXF7TCxfWEtrRkYlLnBvOmw1VWohfnk0S1Jge1JKTzUoOGEjV2kuRzlxQ0gyZ3c2LztjPHMvaENAbT9FVnc6eU9vbW5HOW0sWmwzK2tLciMqNFpAJWpSSFAlRWIzYEBBWyg9bmJRIXNbdjVgRG5xUH5CKSs2InpOJG0pdS4oXTlPTDIjTk06SXJnITVCV3xYK0tYcEJrRElu'@;
put 'a2Iwbzk3Qn16O0QzLikrTCUyZUtARV46KFYzVXNBZkBWOEhdKm81bll+LENPXjptJTNTdVdKWyFwby85YEpLXnlXeERsWDBZKVErKyMoOkhFNTIlKkZmQkFZXSNfNXpWUCltWDcjIzRGM0RkM1hNQH55UGVfKS5qT0JIMGgjNXI6X2VZWzRUfSQ0em8iVj5DdkxSaVlZWEtlMFpbQih6Lj5fN1Jm'@;
put 'MSs6UUdDWCQ7ISRIciQxfG9sVXpjJEUsUHUuZ19+Pi9OYjgyMU5tKU9Hb2BaPzczYHhoKlhAZz15RWBiLzBvNEBmeyZ8azBUeCk4VDZIZU4hOkFTRSN0IjpNTXl0TDd2SVZWZzM4KW1lOT5ldiN1WypQbyVMbHAjX2F6JEtlK2t8SkJCSDNje21kQD9SIlEpUjJXWEpnU0poNjQkV2hAandnYWI9'@;
put 'IkZgYzZMbV1lZi4jJkYoUlRveXBKMyVqMGQ8eUlMVWk9bCVwNyFNMS4ySENiTl1kfC8pTWlCQStySV4hJCZdOSlYbyQqVzY0S0krYSU9KWtTYzFKdDoyWWFAQShydV1lOTgwIXx7P0ZPaGFEdDFqNmdFcGU+PCIoTkQ5X0RlRkM2ZyE6ZDt6XTx5eWAsXTJpQmo0WmFCRE53UXdacHZFfWtAYVU2'@;
put 'Ti5VeDVOXlUoT3lNfjxfc295cGZQUnlZSXpkaXp4KV1ddSRoLlJnUn02NHcrRC9OeTQkNU9uOihIZzlBWl9zI2UsITZ1fHZhamw2K2l+TUE0PT59LCsxMy4rcHd3XWFiVVdqV11uUWBfeH49dGQxd0xrOld5SHp4cnNUIXwyViFJPEBPJm1XNkV2WmxVYUl4PnFRc3RvTCVmKURLWHJ7ZmlKTXNd'@;
put 'YV4mOUlVPHdQVEgianJwS30zMjUlYXQmI3UybnJlZURiRi84MXQ3TGdTVGVkamNCbFVyP0tbIzBxTF9kbk1mTDZDWGpmRyVWRFArKTI6bTU0eU8pMlVkYX16WCFFUTNYe1FVKFtNKHYzKWp9e0omYCFXWWJ4MHVKRCx+bUt8U01eTXROUV9gfGB5ND1tMGBEcChhYC5EQyRDWzI6UiZDTjN7YVJm'@;
put 'MWteKShqWlFCXy80S1E3PXAhdS5RQ3shRzZlQylRaVh5JHsia1hyI1ttKUEkbXl3dS5jXkMiTlE1OGhyIyZQaUJiTDw2U2BeTXl8UWxIQnMyNHwuM0whfG1ZZFN2b3V3d3poOXw7bn4vUExHYWhpTS9ESGRTVDkvZ1c9JWY3LF9TajRmMH1uSE14QV1CdHR+TVNRfWckZSVAWl57WVRIWT08U0Ep'@;
put 'KWF2JXVjXXd5ejZgIm46RmcyU3ArYSUzKCNqQE94Ml8yYCMuIzg5cllZMl1gcmpDfXdDeFZwVXpEfU01IWZnODlqZ0RKSzMpZX5eKSNoPCUhfiRBS18jI2lLIkQpJjB4IlIkPG99RlBJdXcxQ2FwU2dINW9ROFJ7OnIoVURCaEBAP2YiMUcsUVBkU1deOSY/d0d9ZT1rbTMzQThzJjM2TVRCOTJ3'@;
put 'NCJUVWloQGV3fmN9Lj41KW5aTVZ8NUYlOT43LkkvWS91TmciWSUmVEI0RVBbTz95Q2hTLmwzOUApJHQ/X11SKVQ9fXViW0ZhMW51Uk1xeE8hJktpMHNSLHUlcSFIMVRzNzJ3W3dyIzxNLkZKWXMjTz8vTDt7L3EyLnIyI0s4TkkhKiUiYW0oK0ljW2o+eD1IX0VfJCNnOGRpPldhRHMuMy4icTll'@;
put 'QGBITFA/Kn5vUHNNZE5VRWJrNUZic1t2Q3dmRTlXSkVxOTQ4Q0g8fkw/Z2lZO0xeWVRNQjd3eUBnJTZ0KDJkek9eRnI0a0IsX1VHQFF4dFtofE5BK0N5U1ZqJm9KaWY4NVFZOGJgKmg5dS5McUFhUEVeeTUxWSYmOjBoV2lAJmt0MzdudmlMc1VnKkN6TjdfNmE+fCElPVQ4NlV+PV0pPF5HS21a'@;
put 'P09ISDtaZiYsMEBpMVk0N0BPcW55XjE0YEJmOWVHazBKWnQxcSY/cShsZWZdQ2NkUyFORTxgKl1GUTM/KFs7WzkqNHJAd3MvbXM3PU0qXWguZCgpQm42YEBWd0Z6XyVjOUkkLEcmUVpPQnFTbExROnltVHchfi9UQUx6bzRyKEtdZ15CLlJ1ciE6XnZASEpsOmlyTzZIPUN9ZSRDMG1QdSMiUX5I'@;
put 'RF44ODlQQEc8WiZkSlRAIT9wUEdMLiVjMFA5SnllRDlAIj5oVWRJQlNlIWMwPk5KN0NGY1RNYW19OyVhJUBEPSI+e348aTF5blJCOUAxMTBfLl8ub1tsPV9yIjEpNS9uPi84UjMrUnRxZk1iK3FlO3oyUF0jfDVhP0N+PmRCS1ZWPndKdEdUYEtFVXhGfkksdG5sOzRXQ1RJNj5UYlkkYVldVC83'@;
put 'WlVWZ1kqPjBjLnZqKCRHekRoOiZFaFBJPV1RQylvS0xCYU5sNlA3d0trbCR1ZG91Pl1Gc01NN0hYYURTPjtgZGVKan4oWCVHOi4qdDJLfEImejJdZCJ1K2QxdWxfdzpuMFVCYFlZIURpRGZ2T2M6QThVTUIlOWs0UTRnQituMC9HUXtdRHczZDBrMCJLZkxZPS4uM3E5KlNVdVV8dGFEIkxUR2Y0'@;
put 'PzMvbSJpLDI5IUs8SXJqTT5pOnV4OFJzRitmVTwvZ0VaI1UrfCY+TkJJIzcjRV5eQjEuSk49PWJ2a0lKMDRtZl88VnFQR3xPMTduMShoVzVsfiIiUyZgMD1sIjtiRDgxZkhVX01mYW5ra01SdkQvdCUleGB9KGZhVE0hM2Z+cEI5MXlARTlgJSFiNFIzRi9jRClXL2kzbzQ8SUwyc0YvVUQ1d090'@;
put 'WnVxJUlLMjVGNWgrPmQ6QGUhd15SVk91ZFo3JD43JXgmPnMhTTdfTWNnViZhfjk0Z08kTlNHZi9jU2l5OiFWSnImey5nN2cqfWRUaGAwcFFncmZnJWRSRSZkL2xdbXJRaGBHSz9XWjg6Zy5KOWdPUGByOUZiKGlCMjByZGlAWDQiZmNYZF0lIkEuWU5gJEJUODhdVU9+X1dHanxmMDlSQSxRRGJK'@;
put 'ODYrT0RfTVoyN0FnInwpaXFNXVV9KEh7XUAvdzRAXVZmR3VVdn4sW3psNGlLQjx3SWFoSl1sOUM8JCY+M2pVM31HZFJ+IXBJPyl5YSFxUiFVV0hQWUV3ZU0jKDQ7RDs3dC5gMzYjRmxNISx2dTdnLDkoOkxlMW1DT0J2NGArbz47KSosLjYqeHYqRlQhUGR5b3Vndz9+S0AmYD4qPUpnOCJEXTIr'@;
put 'eCQ3YXNYMTo1SWshWSsmOiM5I25fWWIldGRzPGxUXShHb3R8d0smRWB8YjpMP1FKOHo6NnFlbG8pLnVbb31rbmpnNER6QCR1QTJXRitgLGZSI0E7Vl1uIWBXMihaX1p7QlswNVk8diJEV3YufHdGQTVaaSghVmBkYjJPYkdJQnJwPCtxUX1uLjRPPGtReFtdVGA5ZmdxRihlOTpqL1QqY3lwdCo6'@;
put 'YFFzSTlXeSUobHVPQ304MUtKUj9lZ0pQREpKdEhFKjJBZW93dV1qUHFFbzBLTH0we3lqU1p6UHtyQ0VwS184Rl1bMDkwfUtDWlVyZTg9TnskZ3Eva29kY0hlPEpxUj0oRFRiO3g2R0xDNWdHPi8wTV5+PT9jN1pGYGxeKHhPZVNdfUUwbGBeMGQkM3VuTzZnI0MzNUJWSV5nOjl4ak90UjFiZmBJ'@;
put 'VU9oQVJjPTUjQk0jbEtkZlIqV3lCYUY6S2cmYjp+TkN9I19bbWlJNUE0Zz5IP3p3Mj5WXzMmZkx0YGZqUSJeLER8YlA+XWkxfDBlUFtjK2RbcDgyT1FgUEwoM0EyaiIvQCQjYXNYWWppWmhHViZ3ZmxZZTNCOEB8VTd6eVh9KndPND49c1ZhNi5CWiJ7KklfXT1eZiNmakN2OVJWc0k9QF4qYW5m'@;
put 'aDQrTTt5anApLndQQWZSclIleHB4YUhmTEU2TEZmSkddR1VFaiYjZX5qTnNDV3MxT0VySyw8dFd0cHM1KlNTPDNxQ3hHe29dOEl7V35iRipCeC52WWt9anVrZnB6Rn0yWix1JV5HIyt5WCRNaUcrJjcoNX1FKG06W216cXFEfXdxUUR+dk5BVWUyJWAzIXUrb2x1SCFmeD1qXlhRdzkxQkJ9VUxs'@;
put 'ckMpQkspdF17Qko1Zi43NXQ3PX1LfipgM0RvenNlUiNSN1d3dixEVD0pTF59US9tSCwmP2V4aH1gRWl4VF0qJlAwe2hMSm9tXj9FbW5VZklHTzk7Zj49U3AyWV8rPjUpSWAvPyRmW1hkTDB3a2t8TjUwO3c1eWhQKnxHSj1VKyZ1d3NtMTEpTG9bJmZ1YjA3X09XRm9bX3s5LGIkPEJWcTp+JDE1'@;
put 'X2dCNXVoe0NzL2g9emd9diRRaUdNUFQ9cWosM0RZLmcicnVGdnVxd0k8PjBBbzwzdGRfV1N8KHMyWCk3ZntmQ3s/QXtJPkUrdiNnJUB6JnRAU0xCWjh5KS9IcVFqb2V3KHVKKGNrYX40cygvJGZyW3RmXXM9IV1uQFV7NixDZVA3Ojd1NXdYaHVOXnFhP3tSSH1tXjJ1XnBkWDo7RTVmN3x9b3tz'@;
put 'QSJiczQlbnU/RzUqdlhqK35CX1VrNz46T2tlN1EvLkEjRzpWcD0rKzROQnIvYitVQndYQHJ3Z2lOUCxxO1A4fVF0VD9HcHJyL0d9MF1VYzYocERDO11sL0dJS2VXMj5PfiRvPUB4MyVHcEZgfSppcipYUlh8Q2RZZHRHTyomaEZgUjk2PlhuPFcvOEtZb2smWl4lUFEoeTpSYCo8Z0ZtQT5ld294'@;
put 'LGBqby99QDw2ZCNFazwkKmhjc2RzRXxPMUl1Yjlea29dWlhqR3F2TSlxWH4jO05SM31BUX5aI3cmdlc/fHxiNix9TGRFZVhfIXdrPnNyTjEqbGZhNkcmWW5jOytRRFt+PFcuSVpEdEMoP3hGKTBMNDkhTW56ZHdpKEReaEVhVzN+eWEkfktMe3M1SFQqRV9GclNLS3A+WT9rNU4jeF5lcGU8Wz00'@;
put 'RkU2fDshK0xVVzdXPiwlMENePz9sXXN8V1lfeWMhYnZ8fm5rWW9DdFs3WS9UWUA/LyN3Wy9qRCs+KTBCe2Z8V15jdVZVRE9NLyt+InRGZlBGNlIrUVV5O0V0fVRVXnFFSXBkbVpQPGA1RUgva2pUWlEiQjM8U3ZHe11ZaGNBP2k7MDY2PGcqP3xQV1pte0dpbyZGYzhgLmcrPkI4I1AlSWppSXE1'@;
put 'VXt1dnc2Y3p7PUcwP1Y8KHJAUG1DZ05ye0x8bCFdJjFLQ1lmdCZxXV5ZOy8vJDwjcFVHNHMsQDh2bTNFfGFFSXYpVSpjTWQlbjk3fU8pdD95Jj8kKn0qZ31KWmJBYS5tYyErbn1oSWNMLCo1Ozx+VmZbImIjQm03dlN+LE45T3ZobyRdVFN6QywxTj89JCR1a24xRnd+bDY7RylNPEcySyRDbmV0'@;
put 'Kjh9UHQzRFY+R0MuXzhuX2t3YFl3SjZoeFF0d3wpRyFdUFA9fF9CQldSMzcjR2h0R240SkpWNjNYczFoamhAJDJKNyV0KkxzO3E3OT16ajFeTDkyamVeXVk8dmRwJlh+fXtERypiRXk/ajY7fld7e35Ud2p+Y0Y1UEtZNDkwYGQ1WmB9Q04reFdLYykpU1Q1JjJ+JXZYKX40T1QqfCVSUWIqJDFX'@;
put 'bU1UenJGYXI9RjQhRHtQKFgvXWAmO2wyQ0NfNVdTLlRTXjBnIzBbN3JBO3dyLnZxeUo+SkVQOSNVQ0ZfMDFKMHBFZnRVKnFkSTI1JVVGV1U3Tz0iN0J6a3B6XXJLREgufXtOLHYkInddcUYlQE10ZkJqXVk5PyxOcTtbQTU6OVdwaGd4bl9lMVtFeChuVXk3UGpgUjUzKm0waC8uR2JwNTUvPSI4'@;
put 'Ml9hO0k/YGNOTj4lVEpYSFRNWWhqJSZAeS5qLiw8VTVxXmR9ZllFOlpoanxFX0tDWzFWQFhHVDJDZWxJTiVwTjRNZk57S2kmJVp4QX4ha0ZmTTRSVjFSKnxbPHFSeVRzaT0/Pm1AJkcsSlVoTWxJJWkhXyhkTGQ/RUZyeG15PV9Re01MJVU8Ul57SXkpQjVkd1VxOC90cUNVQCRqRjEvN0UsW2VX'@;
put 'bWg6UmR5bmk+aGdnNlkvd29+bD9XZVciay9CfFsoSWNVSzs7RCFhYGRKN1ArTkI3Wj5NWjYpbE11SG5xalM3cV0mWiE9cGkwbWl0dyxQe2VicEo5WD9MRWUyLm88I0JBMVM0PHckQGolbkwlSUcvZzghTTl6eCFSRTlFLi5VIzo9ZUNtMT81dlpVcWI7bClhIjlML3oyRXtlUStgUTpzX2Qwelcp'@;
put 'V3RFKGF+N2heVFV4YnB7XlIlTWpfP1k1JEdecGIrT3ZfM3V9MHY0V3g2X0l1WjxPJjBpVFBkb0BmQ0FeNDhLcCphflNzLnhxKy49Pzl6VHFfPSRxdCJ4Ult7QnNRS19DRmhIUUMucFIrIXpnNUZyRlBbJUZaNzkwRD1IfUpgT3tXN05tdTdsR0Z5Y0gsQkEzQ3RCd01lNHRUTX1dMmh9SlFxXytZ'@;
put 'TnxnM3IpKmhARER8SGNsTDEwSjN7OS9YOFcqfklycHE0M0JTcERRO0JtdzY+OjNLSWRxZVA1cyxMW0lUXlhBeXdaRW1pQ0dWJV1LQlRebUEsN1ZGVWR0YzIhLjB6ZUUqQ15udHhpYnF8VUwye3RecXU1X0UpLGs0YV1QYmBDfSh5cSkjdzF3bTMkTS81VThXaEI+Jm09bn1BJH1VQUBnZ1l2WnVT'@;
put 'e0IuWmIldWJmamFveVFGJFZZU3lzSnZQQyJDdnJ7XWRWY1pJUDNvZ3VxVF5WfTZmZmlTUXQ1SDc5Uj8jT3BdKHh+OE0xUzc2UWtFQFlwTGpxJGgiSEomOjJKKEZJVnlaP1JVQUxKMmtnKkhDLiJrJjp1aHoxa0lYeF1IY2xtWHxHcTUmbm9nTGhxM2dSJWx5KyI0fiRDcSlgaTlDJSUjKnNaPjw3'@;
put 'L1ttKnVYPEg/bDZ3UzFsVE8sLkgpM3FDUzcsejVbI09DLlFCPCU1WC86XyZuTCFVW181UnhSIWlbRVEhMXw2MGxwODY7OzVCOGg9UiQ4O3ZwPkxzWVVOO1BpZWZ+TkdEU1Y6bFpfR25HWGBgbj1qRl8+OEQwV0hSQmMzbSNNeyVIIXdDXzA0eHkuTyokaWpPIXIrbltGV2RBYm12RXVqRGVPeld9'@;
put 'P2IlOFZuNFtAfUBNZTUkR3dqKTtqRjpbISI5L2hIPz4hJEVJS1RsYHwhWHM+Uz5QYUxJNEhLdWBZXmJxTnsrWjhdZFJOXVJ8eCxoRjEqTSleLGJJM35xN24iY2YjeyVRfk1dKFZLakxGVzwkSVZ9T2txOV1ucklwSmR7bjY4aDF0fEh7RlcwMFNyPTRKKFE7PEkvVXZ4SDpIWjJVYmp6Knt1NS9t'@;
put 'dTtvJFpvSSsseF0+Xm5DfVtjbTVTJTtNVnlHR21XeWNgVEZGO1REI2pzPiM5MykxTCNXe3dQJTI/NDxCR1MxJHF3MWUiI00mOGh5cWI8ZCVFRzRxNHc1bFI9TjZLaWFzRnI3cDJNWGF1InlINEFnRDEuOSM3dTRgS1tMfHxPNS9iV1BaTVhZYiVNYTxHJCZWT2U4TFc1dklkfWNbUzU7LjlsRTRx'@;
put 'K0E0NlV6W19kN2E+b1htYl9lPElteDV7WUApeSFyTy5ud2d9NiZ+PiNFMCk2PzFgKlEscDZZfX0pY3YlZHRnVXtUMlVSODxAQE1iWGMsSXs7UFhySHcmOyJ2aCtKeV48RFRIY0sqUkhBN1J7ISluc3NnZG9qfVR6Pl5LMEpKaSNXOFlRPD56MDx9I3ZnN3RWaUt3bUdaM3pXQGxUZ0Q4PDcxKWZ4'@;
put 'bDVCTihLdzZJQ3x0OmsmNEBJZitaYX45dzVefk5beldEVGlhejBWWmtNLjlTTHVHPy8jSUhwIy5+dStDWElrcVFieEtAK0k+az5TcG04Lk1iNCY2SEYmW3ZqYG53LCUzRnpLfiVCNDEsKXR2aWMmZWhDfUFncCVXJjVVTWAmaERHS1I3QGw2UkpBND51b1hdMXwyNDhOdV9iN0RRKlJKMD1ALE0y'@;
put 'ZkVOW31fdSZVdUI6fl5hZ1FKPzUoIytCVGNnZ1NgRyY2fmYwXzM6PE15dUIsSldAbzF3bmNPZ1k3IkxPTTl8InpLYW9eQn5IazlbdWAraGFDeloyaTdXSVM4Xzg+b1QhJCg6VCpmIWhMPyMmSk9UZF5LOG1EfXN9YVBieGxSalVPcmhzXmhISiZGXnlIREtYcjpLeDh0ITdrUChxNmhLRU57MS5W'@;
put 'VVV+PWVXbE9qYnFgITpkR3B5aTMrNV11P29SMDp3L2txOjF3WygpVjt8bTJldTk/VG8mPj5Ea2EkLD0kQEtFdywpSHBGYWxFIlNGSTt2KXNHc1BKfTwoOCJEOGR8e0ZrVXNvSW5HSW9xbHxLUCFoRmFFK3xOISVaOk57bnd5P3d8NXNkTUJUNStvLEdLWFVtI14qNV5BJVRZYkxxczp4WldpSigu'@;
put 'NUcseFNHYGt8MUkibEB6O3xPI3JjYUVjPSxpfV0pdWFHbnFjT0lZK3dwYmxdVTtYVW00K3dXSTJYfDVaQFZVblMjKGNmMiRfV2NCLzNQNV9UOklGJGZwd04ieldxN3dJb31TQFlfQSk9cGk3dj86WFEudnIifDZrTEM5IV4jemRiUVZvPE90TDh2NUgrSD56UFNycGluQFFAZjdDXn08azw5TVZo'@;
put 'RyJecz0+Wi8mbzFZTEQ8UDJNYU4scnp5U3hmejV2bzVKMGM6OmAmeUgvNS5XN3pUR246JklLN1lkYmNAfCV6emkvJT94Zj17UzFPWmQvRzdTS1pkNn1dVmZQSXR6OEx7Un1nVHxBPmNeSGdeNHc2T2dZTVdMMmRHTk5Sck8ldmhbV1NkbWJ0LnNLW3FISllKdj4rXiJZS09AZHZJOzsiU3pxcy4j'@;
put 'UTBJfFlsKzU0NTBeQldWX1cpYipqN3d6d30kfXkldF98RUdeKkVMQzRuPHB4YypiWkFnaGZTIXVLRmFZIztJS30qXks1NDxQYmo2XT9KX3FufFs9RXIlL2dDRT87KUtmN2RqXS5YaShtW0MsaXt1ZWBeZiEiNipoaThWQGt7L1NVeXoscVRzKy5hd3JCTHFPSUJqQl42e3h1Xk4qaHssK1QmXnd0'@;
put 'ZnhQakFSSDY0cnBBQzhuXnpfZ1NfN2Fbb2R5ZldFZFVMXjxlaSQ2OTRaLyhyUm95KXgxQEdZYisyTjR3K3pXP1NnfldqLHtMVClBOlRIMkQ+aTk2XTZeUDZFTF9GMi8xLyxEeG1PJF4/aiE0NXJ9QGZGb1p0Q1hyKnh0fjVyQmVTTjdlTVtZOHRJXSFDTzN5MjhjZV9AMUdMXXQucjwwaD58NU9U'@;
put 'KTBmWTtFdjM1ejhJIlJ6UldtSUlVdHRNJlQveH4uSGt6VnhJRHJ0WXdbOnVWR2IjSnxFSC9rJXNzVWFFK3BTTFAhIStaJnVuPnluVl9Tdil0YUc6OiN6UWJ8TkRpJiVnSiZWMjU8I208dW5PVWVRPSpFWl9hdGpqcih2RFVkMj1WSVhAKFo+IXdSNF06dFRvc1JqVFl0T0NsdlNhbk58Sz1xbn1+'@;
put 'aG5aY2JkQ21KKCI3PDcvaTpxKlApWl9MOzw8XkdtRV9iN31TIzYleD42Z34sZ0wpS1cySGJ2OSIwbS48RUwkbmEmS1g1X1s3bDRxUDYjWzE+NEJPfSghR1VXRzN5NnRoQGN6KTtRXmYlYElsbGVbJUVTUEZ1MnhLMnY1I1klcG5WMjFiY29RLC9USm15V1VAV0RuUjZMXXZTcj8icClnMk9ITms9'@;
put 'X2JgMkgvdS59OW9CKjEsTThBLiJKNHswfXZrcjl3SS44NkQrUlg7VFA4fixfW0J9L2F1cy9+a3MkKT8rRHY0Qnd3O1l8LFs7LyxGQV5jOC9FUTkhPiY4NV1wLjMuOH5ROUdnTz4+XU49bkp4e19NQ2MsTUp8dFRmVyhDPTtVazN8PkZ6TzQlWCVNZ0NpNWxHeCgrYyldTihCcSg/fSR2cCtJL1NR'@;
put 'TzM2V246N1U4PW8iQyh4XUhrL1g+cVZ9MFhjXm15V1RSQTE9TV4xKzZXNGFxKmw4UlpvJm1rY0kyLityYVQ0NCNrMyU6Q3UuXmR7SyRDUEk3e218Lkd8MzdlYXldKUkvajRuayp9KmxZMjVid3tCa3MpbHl2R3F9b0lCRSY+STtMZnxWXzdoXVtbRyQlNyZAZVBJcjhFaTRsWDA+ZzI8S0FnbHt+'@;
put 'OUJXKU9CJF8uKExnclk4V0pzKTpiUV9SUEx7WjFiKGoqIVVWL1BpYGw+YlhrYG1CJntnNTtnIWpdSUA4OGYmZy5TPH58XTVDYj1Pb09UQENqKmw9YHZdPS5fREJxLyg4WUQuRVA7NVpTdFk1V2dwWWRpJEdTMWcsTC95TlQ3ajU3ZURvKWNIMEtvalAyZHtGSUEuaig9OzVKQmM0LCljYnNJNyRy'@;
put 'eXcuayF0MmFGPDBlRzxYOig4Q1BOcVY3N3FpKS5wcUNgSnpISGZ8TDdRM2sjLDY6c3REOE1CZn1qKCYpT21GZitVO18jezRIND8sXkY9KWxpQFhMZmNoS1VhUGE8QUdAKjQoeXY0fkNmMi5CS0B8SV9kN2o0PTJvYzorQGhLPXtQZiV9YzZyXSJydHF7NG84QGx4WlA4fk1wbGV6VD1eZUk4e0tw'@;
put 'ZWZ+STNUS2F1IzB9QGAuY0hSLE9mdSFLXkVfOUg9fmRsSF5GcDtWazI2TWZ6ciN7WT0vbjRAW04wQ0NpPTlGLjdeP3YjN1lrRFtiRGpuMixodD9LKzdDMFZiQyh8P3NEI3RHMGVTd1VDaFp8fFhIZCFQRHRVbzhGY1h9Sk5qK0g1VkJvPmokNnEmQmB9SCNJM1sjazJWL29gJl49OlREdj5DQ0t4'@;
put 'ZjFsZyZxeUJGTj07SX5sOVVUPDZZTjs0V0B4Izk6USFiOSs9Wys0enRoMlAlNjF3djtNdmhuQUhUNHdSQ2U/ayRdfntWej1gN3hMJk9FKjVgZCR9QXspIT9qc1MhImtHQUcxTVNieFpVJjteUE5VPWh2TGRIM3Y1fWlpM2lDc15SbHF2NTdqayJXfTU/S24jd2psOHZyXW9EcTYzRTsqW1lTOUpw'@;
put 'biglOi80aH1xZGIyMWJTSEw4ZmRNbnYqY0N+OE0+W2IkNjNxTVUiaEglSCI/VW0hVXJbYnJffTFiRGwsMWQqamtNSSRRWUlIZzJeK2lJW1hIdWdlM0FIT301aUw9MyssKFt5QipIfWIiNUEyWkJjdEtTY3ooLlk4TEB2ZEtJamN5RDJBLjwrUUZGWlE5MyZWbCV7U3ZUfilTMH0vNjc2P3o6ZXNw'@;
put 'KkZ5cyNEeCYkJWRHYHU6RGFMYVV+W01sI3U0Pk41U3xxQXA3cD8iKD5jTnI3N1hrSkQuZ0tUS2o8RHFYbGQ0cVRKdV53WSt3Nk4jbVBMQHFIW21MXlZnZSx1ZCsicllPUlpOU2FANFBgNkowViFGLk1yVGNFY1laR1h9WVYwa2M1KEw0WU5zYSwqbFd8XSVzKSwxMi5TYkpCYls9OVlPNFUySDFK'@;
put 'VjMzfWFTNH01amRwZFBXTz0/Wz8od1dTeCpMPk95b1Qhbl48NHtyN3x0ZVM7cSppOUA7RTpMcDt1TVIzMlJrMyVqemV9Z3VuLm9bc3Z5Ui81K09AcWtbNmFDSF8/N2QwO2R+OnlZQn03P2B4dlI1R2cxVjNDSiVkTjEkX2lVL18wYHBTI3QsdS5gISY2Jk57MFA4QG4jbUIySz5wfmVjW3N0UUFp'@;
put 'ZENQVncpX0BfQjBIKDxqcihHTikzOl9SKyZPam95XmtdV0RTMlNlUCpdZE1dZDhGcy4/VkFyeypWcDZDM3czbFFSXlhXKlhxcDVKKSYqSE40UVplZ3dXQmZXOU5paG40dCZ2PEx5Pn4zKUppIjdaIztiM1YifiVnWzFYL0ImQSZBSXp+Izw9N1dmNTZURjJMRF5zO1leXyp8KWpkVSh1azA+Q3RV'@;
put 'RmExb2N+PklZI045ZHJsaGZybnRwc0UzUTg3SCwpRFRMSzVFYHx0X216dShsT1RrST9XTGVCSG4iNC92V1A4dTF7V3FGYDpkOjNUdX4mN1ZxaW9+M0JKbURgMTJubDJWcjI4YEdiVktvR35kQF5OdyhtPURlZ2NBb2tOZ0hPNnBUYGV7Skh8RyFXY3d1XXV7SFVzI0UmWDdjMjowbT03eTV6XiF1'@;
put 'dyxxWnw3S2cvNmM2SStBO0toM1pdVFhAaVpMKnBMV2U8JkEpVFFeckw1aClaOlBdUnRYMnM5XWE+KEk4RFlIJmR0M0kzQ3s1NjZwVSJSKmguZ0RvXmhxZE1JNXhBZ2lbQ28hMjxoP290cz9uVFowfXtKVUUoPDJiaCJRcytROSw9XmhiV3wsOVVUKSo0fUwkWFI5YENdIlg7JWdeUWJzNy9WaFZN'@;
put 'XUF6JF5HVWBHbn5zKlljez09bFV9LyZzVW8/PGFaU0tRdTVIUSpteWRdNmVWfGREOz5fMis0VlIkLkQqd0FZMWExQnBPRDxxJkgjZm5BPVhWXkVePjpFdXcwPWwrPVM7JX4uRz5vclFJfGh6MWt5Vz13Z3V0Xl55Nks8cCk+QmBva2c2PmQvTytHZjttZ2swfFdNbG9YKjNTd3xWQ282XSQkOnxm'@;
put 'KjklOTZ4O0JTaSpLQ3ZlPjZlYlhYIk1XIkJIKHtbdnRhJDIpQXcucEkhO0M+RDEzPndaQkZMfkwhU0hmLzppX2Emem9NeChdIkR5KWYzcVtgcGVwJX4qSzI4T0ZgaG5ia3R3UygwP1c5SU1nX09nZHZCUFttPT5vckhOZkNUbXx1OyR1Wl9OW3BKJVJUMThqXkc1TlpVZ2FTXUNzajI7d0VzR0lC'@;
put 'PEUuYnBfcSM3e2tOWSRRcF97M3FyfVVgUio3ImRCaHE1Tk0uSzJHfShdVyV3K341MnFkWXZWfUtGS3grblBEMD5gcn1CZG07KjBnakBldTdLcHEzJmQmfkMjezgzeGMmbS8kZEs0M2NUSFlOKWxba0JLXm9IVj16SXh9eCxARHt0SzMoZCJFR0VYbWU4JVYyb0dDK0BubkoyOWVnU0xrW117V3E4'@;
put 'Q1FfKkZffHNDSDxINGd7a0RBXWV0dkNBTitpbTZfZ3skS05iRE9nb2AsV0NGT2cpZmB6SFoxVExEZFV6cDp4XT5eWip2aVJzaW08UGZeYUJqelt1Vl1QUG8pPitPckdNUHh7ezskenxieyw2MX5Zaml3NXNzREw4e2tlMHt2bThPLFtMIlFfcDh7WW9SYH1dWE9LYVBNUjQpUGJ4NHR3XV5OYCR+'@;
put 'PFZeVSZGRCMmeFkjS0w+bjFsM3t7fHZWY281Sn5PVSJVNCV+JW1NOTgqWTI9WjFbai8sMSltZTtqIjpmcE1jYTJKRmltPF9JMkNlXWJ7Tlo5N0UoWCJlZDhKOTkpOyVOTzcjdmx4WkYvYUIua0dmTnYlZThmIT0mSHUhRjZZVGlIZFUpa1VkOi5sdyxQcDlxZjhRQldBUExtW1QjIjVDInVhJjl5'@;
put 'P1hpMSs3ZTNzRX40bGRZcj9SeV9GWC82Ujh7UytWQDMqVWA7Wz5tNGk3NXgjMEZuTkQpU3JYUlBUTkQzOioqNiUvW0lieURzPm4xKyY5WClIalMvI1dkUX0/XmNzfkhSNmg+e1YjK2Q8XVVwMVpFWUM9YkRMLm1DSUM4OjZiOGljcGMvdDVgTEpKbGkyJmlPNVQmIVlkLmNsMyFZc3N6SSh2cDh8'@;
put 'NihaZzVaSWA1X0c9X34hdXRPdz9yMTAvPyp4XmMoV0VkSz9SdUF4fmNURTAsKHc2UmJMSjo6NSNKcXJNR09AdCowO3hNIiUqOCY0TDFHciVLay41NE5tS2Vgc1QuZDVMLkY9SU46YnQqVVs1PEEifVl0TyMwdClVSGRmJU9CQ01vTCU4W2RtM2FHMWxgbyViSytkbTEjP3B5dH54VWs8ZmZHZSlP'@;
put 'aH53dzFAMXR+JXBANVh3cXVxTHN8RE1EX3ZmUj83PUhhZy40TWlWaVFtTVN7RGtxVGdaNDdPeDo2fl57Mn13TV80L0xKdF0rNjZIdXFlfT4lZSYqalY7SE1pbGlwU3B1dWokTU1TV09mfF5NI0NrbkxHRC5rKzBJR15pS3VwT01DNVI2czNmUklLOywwRVd9PUxrcmYyX1dfd3lnXUdZUSkmcTA6'@;
put 'Ik0pYXBoKHVtKjVNJl1RQjdrbmFFSEM0Y1AkQ087aDdjL146cmk3RGRoaHt5MDdlZXRWbShpSjYxLl1ORFh2MHZeRSVnIUdtbXlDRm9bOVdzZVFIUktFZy9FNHNUP1h9eSJ3VXdSYylCUUZNaktIYC5BJV4jOEZXYF9PeVJUMkRKaG03XlokXyg8cGReOH5jK2RENCt0byJjbH5GWlpNZENrVzZp'@;
put 'XnFNPlhVR3pDRXU2U01ZRUJVXS9LIzhEQHx4XjshdDl7ZFt2NWM/KlFhLiZoRT8rUFVrUHVGJX44QmtnWFpsKHJMclpue0p3OVJjInIhRGwuanAsP0NLaCEocVFWIXthX2AiPjluWXpKTiU4amYkXVBHYlc1RTpdbm0kP2pSVWZMMjBCa0IvYmNMNjZPZ0BSdDlfajppR2M2U2BSUHhUYT00ZkhR'@;
put 'X3Q+by50UmVtTDc6LDIzN01BKEVWUXNDR08+XT4zPC5+TDMyMV47V1tJUGVeXn5+am5LZWJ5SVk5WDgibkxmfWNNajdPTHRQSUh9OWslRlRnbTIyeXN4SGtBKUs6c0BrVCpzITImZVQxcW1KXzU5Mn5XQlJJQC47TSNrT0NfWCokNmJGYHl8XUYlbCR3Izk5fG5xdCMxTDdPLjZeaXwkWU1UTUR6'@;
put 'dFlUbCF3RjtWdGQyKWF1WTEqKmY1KklWRWIvRHFSQCl1S1luITVKMGk4aEM7IzwvZUVeUHRkUH1leHJuaHNTRj5SJHt8el9eVTF9V2FAd1dFZUxANDpvJiE/QFF4VmchIn1QQ01RMzNuQ3UoS0I9TWZDNFJjVF9hZVU1dzcvV3gmJlptVVZMKj5oW0Y5ZWBsUXcralA4QVdyVSNAL1NYLDNIKX5G'@;
put 'XSslODwrJGpjSkB9NC45RX1aUHgpIX5wRXV1eGs5RFc5Oy8lSy5VPz1SMW19bVdQM2p4ODJMTmI8dnw0UGJkQEhZc2NofW42eUkxRCNNJDUjdmQuUjpnc116eTBQMU5kUnEyYlBqbEg/VnNHVFhTR15PSmpvKDZpOFouKilMRkBwQy9panMpZlNLOCt1XX11eDVCL09XZSNkNEtaSTBuZSEkWFZX'@;
put 'VlsuIUg2R0pBbzZrKU5FWnRmSE44dSZuLj9XVmV5blBIazRgLl4xJHZLQXVoZXh+QC5bc0peZ2w7Qm91TVcqfXFEN1pSXndjRlZ7KyVTfCNeTjlAcT5xTkl8V15xVWdoNk4seGZdMThDYm5qKSkhfnk8ZFF3dWlPPXNCTUtFSk1CMj12dHY9L3tOc30qIVchOlkkRm5uXl5nRTQmS25fbG51UEoi'@;
put 'SkRPN2dZTitaRj1xayMvLn5kUUhHd2IiTjFSa2t3KSJdNXIzWl5vUWdjWnNQIjVxT2IwbFRJaGNocm5WRn1lOD9gLEF4Y3c8blE/QmAyczJKd28yXV9FSzp9JW5IeWp9JSxvKXRAUGx7ZXdaKlM+OFJtN3pCJlZ7Q25wWXpaIyEmIVUxdSJXS29jT15HYXpRdncrWzROPCNRVVJAV2Y3W0BxRy5I'@;
put 'TUwjY1FZXkcjRGZkcmFtcXlKT1dWe2tKZ0c+eCNuTXF5Il1hQlF+dHs2LioqUkJvTTt4fSFifT1xfm1ydDk8Lkh2WGlsMzVJM146ZHRzMEciSGNieGVCSE53NysuKCxPQmd+K15VX05Qa3ozQWBPbn0zV2YhQmBHUl9RZEM4cUliO1lEUjgmI3M2eXFwXW1hMEtfckY4VnVnYHc9KDZdZk9oQH54'@;
put 'M3kqSS9DeD5XeHF3P2lkZVRRJGIyc3t4Snd3MVs0bVlffDtRZE0sKCR0JHU1T2NJU0NIYHxIVH50MjEoRWhUSj9rWl5ETWFmSjUhYVV1QmV8SS5JPjNMMUt7S3RVImF2djRKN0Ilb1VpZlB8aW1iWHZ0c0Z+QDA2SVY+e1AxRU92R0JGQDNKN3tWZG4+Oz5RP3AsZnBCbzsqbnIqPDBZazU4V2lI'@;
put 'S2ZwWzp9aUBdUXk0P1V8cFFWWVpmfjg7KyZAU0RZYWIvUVdqQno6eit1aWhyWTw7Si4iSDo4YHgjMGZwTlhDW3lqMzFPb1NWQSp1IyVFfE1+TXlNJjZRPU1rfDJONiY/PEcmPlozOS4wenlUTW1ldmcwdE1iTWNhIkMhb1dJQ3FgQ0gjfTV3NlBLfCo5MDomdXp2M1ZMcXMlbUBAa3lHdDdTfl9a'@;
put 'QngpfX5OVXUqRldCbyp9I0RGKSRmRCZ6cDU3VSUpI1B0TFI8RGZAKCo5dSNTbkk/PEYkNzd9Wy5oPkpnLi8hWiZfSnpbMGY2bndHWjowIUojfmorPGZRXk1DME9CTTFIIn4zXz89YkhTMUA1OEYzSyIsdiZtYVFsMC9FaHxYMH0+RzN6Sy5aW1gpdVN7KCJBZ2pOU3NCPFg8KWlgQDBHQSFOWDQ/'@;
put 'VFNYRz4ifDRielg4VW8+cHd7TlRzMGs1Z3Bne3g0XTJqXkMyPnBTLzZHa3pUbGsvJmx+Q01+Wn5+MW9TTHo2MG1ZOippbD83a3MiYCY9OzVpMiN6VV1sS1sobykhcXx0Z15+JGhzRHdVIi5Qa2tdP0VpSUskXV5tNW9RKjUmdUNnNjFlfUdZPyY1K3NtUys8cjhbY2FXNk5ePz5LTjFgZW5IfkB1'@;
put 'QEQscWclPkIjSHMpZFFfbWkqQUpXPGQiOzkyWzBIX3ZBI3hvdiFyPEQqK31JOTgsdUQkOVVAYENHU2BFPzJXUy9zfWZZVERmbT0/LEBjTi5mXiFRI1J0Z04lV1MqY1d5JXRYK25YLG1hPzx5JkV9N09gQHhiKDI7O0IpVFhiZjFMQXkkQGJIeHYhW1M7d1ZWYmZ8TiZpZU0iSjRXc0lqIm10PyRL'@;
put 'QWF6QmBofD09OD9xOkkrdXxqZH1UU3k2RHc2T3JBcyVMQnsoTnBjLm85M24qP0koR00sej5OSCs4UUdofjsyVHsxenBKfjZuKSFoTTs0ZEhDOV8vWFFlfTFyMkxJaCNxRVBYKVdzcWI3TThicjFRIylQSWtBbls9LjE7Rlh9WXZVUU1jISUyKD0rMiQhbyZdUjY6WDAlPWJWWFRifGRJMD5oMWIj'@;
put 'IiJWfHtiRnAqP2FBWVhgKC9ONFdEVGVzUz1YJSsiUEM1TENvXyp0YCUqQjxzPitDMSlAdyUsb2JiUGIzTF4mMFJhV2FfbV0+fVcqeCxlZXtBI088Ij15I1NYcmZGNTA/NmM7JGR3Y2RmKEFzYU5UUE5oREQvSy9+YywmYHFGUXIkcXRuQE0yUS9OeFV6WW9qPzZdOV5nUz16XT9deiR7ZkUjSGc6'@;
put 'U2Nvc0k5MTNqYyhmMHhaOXpMWzFKMXs3Q0RLcm55aUJ8LDx4dVg4fXw+ZnwsY3l3RSRhTVIuOFlKeVQ6P0V3eGopbnFNZ35xfkl6JXxtMW53XU1AWXpxTiF9aTpRd012bVFTfipmXWB+UmFWbWxIPDBiWzRCKTNXY1FyXm9QZmosWElhY1V5TWZgUXIiUH1lXWc1Rn50Vlh7PzBpKzw0K1huYzRu'@;
put 'VVF1cns0QldSWTRnQGI0W2dKTX5gTDplZSlyUTpbdUF6SUAoUWVQMXxYeTNyXUgvKVkyZ2cvX0syWT5gNVdhIy87JlVTcHpWOHpPZXd8K2d9SG8qWVdWXj5namYsQW9FZyImbWg7PkJ1JFdEVChJMzEyYnJGUWQ7VC9he21XbixwM2VORm1vc0l0XiNNL01xNC8wJDtgUDBMV3daSG5mJUNBNiNG'@;
put 'U0tHcj4/fVs8MGkmZkp5OGROY3s6MkxMYC4jTn1JXjFMNGt2UDE4fT1PQno5aCptfWpTMTtZQTtAMEU4XW5QcEhfYn5AJDNSLnoiNisoJHRzIyY9bkIwaFpKUU4jTD0sbzpBITxzYFoxd1NsKFBXa0M5JDl2PzQlQ2M3YEE6TTVTKyMyVis+RFA6fmAlTTRBNDROS2lNaCMrZ2c1bW5qbEUkZGti'@;
put 'e04oU0NYJihja1sqVyhzMSE3JSZVYyg5XywhcTxiKkEwS2dPbz5DeTVpKTJLLCtteHUwOT9AV0JlQURleFFAQ346JW1WLjNJPGlUUVllSkIheyg6fWdNUDdZPEtObGxQZnUsN050Nl5HRTg+aWppb0wiKWs3eik7VFk1Uk1NITdzbCEjR1dYXVYlfmNPeX1ic1AjLyhkK3E9Ul8qI2o9NEcqZFM4'@;
put 'IWcuVjAxTFM5eVhGalhCOyx6e3ZhRiVGZEdpRTpveDwsITs3YDtga013dTlSY0phUG8lO1I3ZFJbUERuckhmM0R3Sm5OWWRteyZKJGJhe21TRipDSikwTytqW2o5Rjh6eEI7ZS8wNVRYNVt+UUsiaz9ncGQ6ZXtxKnRrZ0x4fUc1VTErc3RxW0lhJV1DXk5IYTVVX2lJOWlVWUdwLjFHSkouLm0u'@;
put 'bGJTXn5RZlc9YlNqZkQpcis8I1cxYiFlSy9zLkleI111RH58YEFEWDk7MSN5JU5iW2kiQWM8eW1XLEsycSMvLEk3Yjl8UDJDRFt9NXNuXkM3eWtgKkVyW3Z6I21lOmhYMDJPZGZELzVoWSJ0Pk4xYnJZekpuLkhtPzJdRkN0TmxXYDR7WXQ/PitfJiQ0SnVSOGlUbGh7bjtvX1l6cT4zVlRXV0Mr'@;
put 'cipILClNZ054MXlmW3ZsZFpvUCh0Jk5GTldmXU81YkhINEZMakR3M05deXI9bURIKjpeQD5+bVVRWzZQVlBtb31OOH5bOmQjT3xseVRre1MmV0VvdENyMTxVOzxEUEtkZEJDKTleZnVOb0lMVVk2VnMrX18vJEY5ST50eUlRbkRdJUM6SDl2QzQ9eVQzK0s2fW5gNlhQalNOWnA0emVlRkJ6M1M/'@;
put 'cUNkalV1Z0RwO2hGTWRWMV0vcmBfN2hCUXs3NiZtYyRHWUNPcUJ8RVAwQ0VYJWU/ZlUue0Uoc05MK2RsRmopUTtWcyhIbUdCODZvW2R8PCVeYzNgKWxkayt+Zldmd04oMHxKQFs6L3VKcUouaSZKaDB8KzIvUT8jd3hbKiRDYm1gKTxXVnRgInFUXiJnZDdnSkhRb01YX1heOi5TdzJtJSV1W2Vs'@;
put 'KTs8UHN9SmF9ZVU4cGV8al1RfmhVNHBhJHt8eG91NT5rdFZ7MXVIOSZ2eXsrOjMhb314SDIoYGc4SyxDQkw6cFBbUio1azlUZzNKSXpEX1Z3dn4qKSJ6RnZ6VTVeS15CNkxKKyMzeHVmWGs2RD4mR1lYfj8zKSV8R0hATC83UXQ5U0dMKEJye2Rnb2AmWTtuZ05tV0FkbCouLjVAY2R5YWp9PE52'@;
put 'RVhrNTdVQmllUWt7S2VJb1JMIXZYeEhhQiFXaTBfNHk5ZHJ1MyowcldDSzE/YkxMX1NsaTNJd1p8Qm98STV6eDNZZUtqV2lDXWdKJVZZTnVxPmpJNis9PHw2U3A6T0ZEPj9+eG99ZFRhN0JgO3clUWkkdyU7IXs7MzFoZngmY21hfkdtfDQoI3hoNlVBeFhWRXBZRTlEMjk+TU5WVDJyZEZIbHdu'@;
put 'czoqXnI1ZDpATWo3eVI5cTVYNmEsMUhUOGxLQS46KDBVZnZnNXd6bEVxMDFUdnElfHxaZV8ibUQ1MyNmdTZZfi9fMUNfJVhyS0pPakpUekRwWEI1NU9xTlYwKiNZZmtXVVFVal46eWYxL0k7IUNfbXsudnd5MWxINSFAM3hSbF1rOkZCQiNmW2ppeFZ4LjF3bWskcT5wRUd+WS5EJEkmJnJYTlZf'@;
put 'N247bUMoS1pZW25KT1FtTTpvQVAsZFVBaU5Oanc4ISo4RiJ7TURuXSYvaUsyNiVQKH57NjxNRyk5fT9ebX1SQ2dSal1RO0h3aTdzVD9TWUJUaSM6USo2dGVYLCIpVGc3ITs6aDVqN1guXzxNYGY0QFRgSlFpLDVhO3E/SHVEYCZGOltLQyFaMipDTnVLPjA2a3NwO2tXY04lNUlTb3lDQXJOXkIk'@;
put 'TFUvcz9sQUJNPzM6TkR0RiZBOW08Xj4uJVtsOkRDMHp3RyIpaVRedTZXbHRoUDVZSGIzVXNFSj1Va3BhZS5AK19rMSl9UH1GVlhAWHMoRX13dEhuc1g/Y2RiJHxbTlUmO2RbWSNaKSwzeThCLDlAZl9wTylhPHVmXjR0IkE/OVs9bGhhcmpGKjpIKzohO0JxPSZnVm5yPUdOemJNXzRuaVJ4TmlP'@;
put 'd3EoYHp9YkgscDN4VV1BUGByMGhKRCRga3tuSWRicClsalpLW099YDdhZnxfTnBoKDhadzJXaWEpWyovVHF2V0l6RGVkJCQlWy9NIi8oZ0c3YytvRT1ZLzRZcTBVflAqTDs1TEFoI2M+OyxPYltvY2w3MGs6RTFvSjwpI1QoWzs4eSlUJX0qcjRWZmZbZUhLWitUVEQ0PT1icWIzOnU3aW1xQTox'@;
put 'RUx2RVM4PWZQOD0xPzNybFZHViV4NnVEPy5edkdhKCxwd3A8blZ8eXBUSzIyeEBUMStkKERmYDVoMXlmPUBHUll1XUJkQElZWkB7Ml1ffi95QEE9Y2ZmWzMrYEhLNTg+T151NCVROGpTdkh6IT9MaUNhfUJYJXpEZjNPcnI2IV9vNFFpYm1ULGJHXUc1Ryg6fSNbW0RrZlswU1gybiVzfHxmSmd8'@;
put 'NU04e0xLdU1Db2hvMD1ZJWVHVWxnd1V4QmNaPUk3MGo4VltTK29dfGlKYWY1d2FvNV0/JDsmNVIkP1JCJSl8MjBqd248Py9qbUQkfGQhckUmb2F5c05MYVUxZHtuZFNzMWl+PCY4Wz5+OlhsRnxRTDRYRzVrRW5rK1VIbjcjJnttdW5+RWkkPTg3dUJkU097IXpIaSQ+b0RRTHwmTyZIQFAsK1cw'@;
put 'ayokcCk4WlhSV0VseUUpOT9VcnV7Q1l8W3NXTGFNQSFGT2NlMngseSU5S01ELDtmNFsiYCt5VV4lWkxqZTh0bk85XTpHaytzVnx2YExNeTErTms9eDpKIzcmWl1KaFcua2xCL3peeklVOjUiVSolOS5rTmteeEhOQCFoISxaNlZkRHVjdSxSe2NYdHEpdz05WmRwS3Z0SDt2Qi5+RklYUkAiTlYs'@;
put 'fSZMbzwsQHdvWGU1M1d5PjtdX2lsRWFaIXRsTD9ZdyFGYCIsOzx+KkZgKTNNTEh0MGtlLjA0Wz5+RzxvV293WDdqZ04hJWI8TDw3Uk5rLk1zKWtETVpvNWBQPiZ6LnxdL3U0IyhWZC9KbFs0RD9LJU5vTUFEJik/cUNmKnAqdGN3Kls3MyRwbXVPbDEkKF1dTiUjU3xnQXxUMzAiSm5uV2VtUUxp'@;
put 'KUJKRE1bbDY5UntSImFUJEV7Ti5+Ui82TCVvblorXWRfMik/NDRqMWZaUTxsekNrRSFERyhySkB4eFJGdVldMHUhalA+OHJgRlQvPmdCY1FdeDZpX0ZdekxuYksqUnFCSzo4cSFGdlVfVGFWVFE3MD5zQlQmV2BGVTBlJkNwcjZCPn1FaCFiQFMrckcmeTJFJVBHMEUzN1F7NCwpUHB2bjFPR2Z6'@;
put 'LnxiWy4yYzJ3RmYsSEVaOUQiOzgkT2gqKnk/WC8mX3VYKXQ/YG9bJCRHb0ZeJTNYPzBpPyJxfl5IUH05UzVwNXI6QHpgQWopcV8yd25rYnJ3emRKUiY3fk5fSkc+STRfWT9zQ34qZ043VzF3KjlCMkZ3PihVOT1MQFJ5elgueH5FfXpVUF5hOFBlLCFwbF9CeztBVUkseThQXW8+fGpoUCVgZTlU'@;
put 'dllUTTM9YHldUCZQfWFLZHBrfCtlZTVXL3ZqJUUmfSs4N09HNCI7cmY9cSsyPnFUaj1rfm1MKytmZmpTPitpZkBbc1EjWF8jQDZrPW9ld0VLfCVDP1YiQ3Mrc29gODhyOEZ6RDtPckx8ZWp8Z0NRQyJyXUt7ckxCX3goKWYpOiYhQmNUNWBHMm0zKFZ7UUJXNCY1UiNGXWJJZWs9VXdVeyhaY3xq'@;
put 'IXI8dTJ5M0w7amkxei5jSEE2RElNcTZvdjdCaUxQTWVSRDUleypFNlR+UV96bmcla2VTNSw5dkIzUW88NispUSNdNSpAb2tXIWBGVnlsVDs7eUU2Y3QkbmZuRzd0cSwrdk9EPmlldDc5cHZZTnxbSCkiYi97Ryg6cEQ/ZmNSUT1zTmZuSUxnKGdrbTFFUVV6b1VaM2E9YF0rREZOdVNaImAzc156'@;
put 'biZ3RFZKViZaMFtnfE5ReWFabnRjZGB9PyZKNX1KRUNoST9Ne09dPz4+Sl5WY3JIWkImQSZAZFpRZiR1UFd5XmE5PElxb2ZhWW5oYXpGN2UiZyxZKHdqKVBydkQ/O0s/a2AvdUEqXUtrLzlLUXo7X3g2WmUoZz9nSFpqb2k2fCxBPERVez5oJDU2a2c/TUV1T1IiQzBXY3hLcHFARGl5USI2Uktg'@;
put 'TVdAfDYqNEEkcFpUdCwoeTJ8NWR6eENtQDFtI35FdiF1VVlvQGgkVE4yKndLTSQ7YFZEVXIhN1EmYCw0NSM9Mn1RIkpxWHJ4Nn1uKjl7JCF7Mz1RJH0pIllEUyNNSHBgRz84XVlIWy8wNGUzeyRbIjU3WGtARj1LZ2B7N1kwYG5PLk1qZXJmRW93RHRiV1d5SyEsInhYX1ZrPSowQ15CKnxNO01E'@;
put 'LilUalptQyE3SV5WTTppPTRgRDBAXXtFJE4oXmhOX1R8U3gqaVhwMVs7TlF0X3lSQCtve1hUeTx4T0tfLn41WDwlOEN1dlspZ3dxYGhqSnZrP2Z5Wn0wYDxbPVMsYFJGY30jXkEjZkNyKCw5I0UrT25ZLkkyWUdaKGppQlo3KnlgVVExcVlZTWAwantfIiU2ZVV3Y1IrNXI9RTBVX3xnSkpyMGFU'@;
put 'WENkd1VaZStRbjtLZmFYeXlfdGIza1d6eUtFSVolcS90bnA8bHJAeV5ZbXtYOF49VjpFeEhEOGxAIUJtNTUze0UhemM6KWsxaCxVaiUxR108UH5ZT3Vta3k5YSRYOWVKKEhjaUVrczwifUpLWjFEaFU3RFVmLkchKHlIRXBOMENVIlRucnEwT0QyMCshXWdxN0l5WTBBTkc/MyR4QCxJbVtWXjBU'@;
put 'ek1RMiFXNFYwPzoleXIrK1MvdHIuZEhPKyZgXz54fD9xN00mdEtQNHxDX0EsSm1ieyMuI25xSjdyP0NqcWBRS1MvR3x2RyNMV2Y2RTJdT15uQ0g3YU83cjRlNCZmTEozemEldG08SEtYR0tZLnQ+eDZMVTBuQ04wTEVaOCNCKlU9NkA6aTMmO1AmNFklYmRUVW9bJDE/aHQyWVVEUGB5SFRPR21w'@;
put 'P0JdbHhGZDVzQlg9LlU0MTJXc2JZWHtqPmklVFVobCZqc2QmOHRwPXZ6aVE5X0N0XnJxNi9XNls+OzxneTYiJX5Ocl0vVkIqW0F0KXcvM0BeOjg7e1A1NnYyRlZzcVRKIVU7WFtGIikzNmIleHFEe3pkTiVCJGZXdFBqaitkOnZvZGNWdD1mcF5oR1hoI0R5a15NOiVzPVQ4fnpYS1ZNe1ErfFtt'@;
put 'WjN3cGY+I3d+Nzo3QHZ4ci9XbE1dLHZoTHlqViJIYWtWaFcmdnVoezJdNU9DdyU0Ui4wKWs5SyJ6WDl6XWpeUG9Xd1ZhdT1pYWtjMDJEM0ZHM14mMiF8cTJLS3JCcExWK0lrbmY+YnVuYXVYfGg/S2g6fDEzRElQbSQvVGMqLyt8NHgwWjQ9MENpW2U9cVZGRWtUUj87dnUzV008Sy57fHg7RWZQ'@;
put 'VDVrdXdnQC8kPCs/P0hZTSk+ZVosTyltWUZFTywoSkM6IkpbVGxGL2wvOVNEIXcyRWhCZFhOMz5TT0ooQG9DezYkZjw7QWo8a3Vvb1I5PF41VjE3bVhRcUMkZW5UYjx0U3xYTFAwREYzVGtHV3ZgM3hrKj08cypLNzQmQmJxJGpjKjNkOTguRHloZDI6ZERIczF4flFwOyVhZDZUcCpFOmt8ZXtd'@;
put 'L1FSZzNicyU2TltbfE5VJDFqaUdgMHsqSGlXdD43dmh7ImJxO0BEdVluPlYmPlM5MC9mXltmfkJ3LE1QVnNadUcseHpIO3daJFN8WG03VzVzaGphP3tfSUxIY1slSiNaY2wvKmU+NWxXdnI6RjpfXzpSciM0MHloR1J1bDZXOnZXNS46TWREbmtEWV13PUZ7O2YlKE1mYCEvSVlAVyszYWIhJGBt'@;
put 'JXVbPFRWTkphRmYvUCZzcUNwOkVPTSQwP0ZEU35Qdiw2ak9TMytlWlRwUyxQUXExdnNRdzpsSW47XjxQMCI0SyFbP3prWygiXzhhZz9qaXF0QD91cCEjOXRxNHBsUmg1WCpDRHU0Q0VHOXs8RF0pJipgSWVyLEh9OmZmYXRjc1Y4Wik/d21iZHV6OS8qJGg5blV2IlV0NFU4MXc9USsqS2dKaUR0'@;
put 'KFA/UV80IlMmOU94dlc3V2dHUC8yI1tfSWEzQnZLfjlVYEB+KGk2O2cyKGR8OVVKaEJKY3cod1Rpay9Lfkh6dy5qX0A4ZFZPNGcwZn00fHdnXyZkfm1Pa05AQXxATXdINCVpVjVQdTZBUSYiJnMoZDBWaTJgRy5XOGcmZ3JaZnYoIm48OE1uRUwyRD02KjE3UmErYFZaOzliVi9HJlV9diRqbHM/'@;
put 'bV9lcWByKnN5WWRGcn0mfCJgYGAlfEskQzRrLyt3N2pha215OWJrTWE3SUAoNilteWomR0JhJS5uTCxDRE0/dVFXV3hXT0ghPHFEUTFeTj4vXU0ydS8oIyIvTDoyYzU/ezJdVX5NTC9fald5LDlkME83KU46OC92LyN1PWZZJkMqcmFkY3t6SlB6ZzhqYUZ9YWBGUlJJT0hsfThmUSx3KkAqPiti'@;
put 'fFJoLi50QntCRDxeeW5qNWFpImM/fXhyOC5jNCh7aGNYfTtNNnhEKGVvRUtVXzFlTVlhZXB2SCkiUHp7KVhDN1VxdkVXOjAqNkgsUlhlcCY3SFNdMix3OyhdT29yQC5mSE08Wyg5KzBAXjA8XkZoS0hnfjghND5DKD4pbU1TeENRYkx4UTdLeyFYeERbIUJ1KVMocnx1Rm89aDBLKDR6Nmk6dVFG'@;
put 'SXQjUClKeWB1eTsiVEViRiM3Ym4/QD5oVUB3bHZMPmJbJFZIQHVTSkN5WXk2S2ohU0ZwMmJNKVdNOnhPWllUNlFgMCtpdDw4IzQ3OVc4VTVlK24xYTx2dFAqVEAsNzIrcDFRLHJeIjRsZTdgNzBAPH1qR2h7WWxffHgkUXxYQF4qZjd4d1l7PW43QntiRkQyK09ScFM6Mkl5Vip9JkdRL3kmJF4h'@;
put 'Z0Qjek9EZlo2R21RQkc1RlJ6SzcxJFh6ezYpRE86e1F7cnY9WlU0fHw1Oj1abElGZUlZSmpubHolNlNwJWs4JnZzcn1gbG5xZjFrZWFPJntwUFN+Q35IdV4lVjQ2YXFJLnchb0Zvfj9iMkZZTzV0W3chMGl9XlNYWDNzKFN1MnJ4UXVWejNCPX0sbG5WVSwzWCNrVF5we2pOPyx0fmhFbXJmaXdt'@;
put 'IToienBxYGlLM2xGUW1GbjUyQnY1Qnk9dzlGclBSX2lFcz59SWBxZytuKnVoSGYqKEU6YWZraUJ6L1hzVT4uRkp1ZDNRWml1Ym5NNVIpRGFxN1hhPFVGQkNhKz1pZkIhIzhaU0MjM0dBZEZlW3lML15NPSNoaHUzPkZdeD4jSCtiL0BaNiRtLFEqW3ZqalpySHBLdDV9ViFbe2d1fClTS09WaU4o'@;
put 'K0JNOkdXdV5VXV85Z2ZLTkFWdCIuPmFSTEZte09+dl4yXjg/RSlHKTQ6c11ubzp5XXNfZ00/bn0idV90RVhuUC9CSEpecWtGITlvbEZRaDJWJSV4ZmYuNX0lS2d3aVU7b1psazR0cWsue00pdz9nYCUxLEhSLFFoW08oajtoZT9TZGkwRFgodno1Z1V+USRwSU45VndjZkZYM3BzfUxAQnBzVFkx'@;
put 'Vi53QFZwI1lJK1tJIyg8T2c1MShwfX02cFoxdyhuP3osejUoT24oUipEUWpzJl0pZGBSVkMlR0NDTWx+QThsTipnb05HXShjdD1pXzM2b14qN31FeGt5eixCVHVCRjRsbm00ISUyeWM4R21DRX52cVpsfnteWm9oUDYoIkksN246SDp+YU02cy9mblYvSShxdTxoOE46Nn1vWjdaQVtpKWM2fSlX'@;
put 'XiQmenFXTS5TJHRGVVJkXS94UT9+YCtgYWhOTFpEbnY0az5Na3RtdFchVGdFej9fUjBKUWhneCVeb04ydnowLmA2MkIkO11XRSN7fnAyWWpMUnFHdVNiaihNT2BULlRURHFuUUg1Lz8zYjgmPH05PCRKKiwzKk4qPz8lSjgwVUEhPV5xLCVIUGJiSj18OEk6OmBkU0BGRjJkYEMmLE8oYlVEam1s'@;
put 'Ry57Im5qU1tsYjo6VGhYP019TT9Kbmh3JjRgK3tqT20oKk1+dkg3JVBuNFUlNFNzVSI3JS9La0N6anpaPDtdT3lvQzFPSG1bVDE5KyxheXd5REMsM1t7NlRWKW8qcXcpfUl+K3dBNWtKUCpRTUZjMXo4InxhNUkheGkrQE1zNFtkamRxI21Ud3NEeS5pMlMoVzR6eWI8RzU3YTpNMHtUQFZtbH43'@;
put 'bitMZTtsX3pULkw2eXp0eXxYIX49NSRxfDdDQj1UYyEiZ1J7QzY3KEYhTWVzeS5oLlNXYU02RG54bEgpYyZgZTRCKkpWalIoUyZONj5ZZzghdmksWGlLODNvSypHUzwwOntnS1pdR0ZlYGh0Zkg8T3AvIjRQeVcqeCVLLzokVGhJUFtAYTZiPFA4QzBUfSRMbCk+JmI/Z0xYMDpZTSI5Q0tAdSs3'@;
put 'TW1zTzBGJWZzMzc6WD84M3RXdm5aTUNDSlVDQ21NTF8yVyhSbDAuQmIsPz94IjIxVnpJelhzSjE8dEpQOSptTlpMKjhReSExej49LCJQT0tHPzZOV2w9eGxYRzZ2WHR+b30rQkcsRFh7ZDtKZjNSSWk3bjJ9eUAzSEV8dUs8V3ohYC56OnYkfEpseWAxRDdCdGdTSm9qMCRnfVswP35OQnM2UkU3'@;
put 'fkIwfHd+Vz1oY3gqP3E2MWdKXmkhYFsxM3ZOPUBRIUpGYDUxOS52TUNVPjNgPl4/dUVucUguXlFBIiRnfl1acHQqUlVOVyl8YFBVazY9eWE0UGRESys1N10zJTUoQ1l6dztGQ3xARn5jKzdFN0Z6OS4+PHFhezciWHNffV9rJSRxZEg6bztOanFVdHcsK31+a3YqTV12WllNbUtgJTI9QCgqTXZY'@;
put 'PFJ5S2tsX0NWQzBWQDMmZEhqPFA7KXUrRGx8LjtJWmkxQFNkP3VFWC41QFImQyhtX1Z6TDkwQiVvcXcuQDtGRCsoJkpNPExULGwuRHVbd1VzN0clfHhddXFjK1RTRW1QPUM0VyNyanoqSWFHfCw+WngpQFFjTlBVT3g+Vj1rIW19LF9dRF5oWW1WVFNHaCx3eW8mbkJ2QF48TSI+VlhAVjJycEFH'@;
put 'XTdNMmljIldudTh8TSVEPXQsJWtRMVIhY00zS2VIfk55TyFuJTBUSyp1a0RRUVZ0dSpOUSpLYVR9WXZAVDFMW2V7KjdFO2EkJDsuZH1NKT9pNiFvWzxycS9XeElWYlA7UGx4MXV8RSo3VUk+UER8SmcmfmEyYXghaillb3V5N01fOil4YHB1Zj1DQmohSlR4SjFoZFpvbzshSX5MXl51YDlwYUw/'@;
put 'cXxaaEhNPSJ6fWUxT3ZMWyU8SCk2MU4obS4mYGVEXkd6WCRjaEVfN21rXSsmLyswe2lmcHlPc0lJaGMkZj11PGV+Rz9hZ0NNb01MZ0YhVTZzKWBjUE0walFlQms5Q1NIYWJiVyR3JDNRWyRIcisrfmQ5a0VzeU0sIlEqKn5GfnZWV3p1KkxyWjU1c0U/L0xzNmVKPl9jPntkZDdlL3BWa2o/Z2B0'@;
put 'SXZZT1duV106VX1Ze2ZIcy5JfUslPGBONl1AYk8odWdlO3EhTDhWOmx+O0hgKV8hSktocHM6ZmhFcm5reTYwfkFSWnshWVhRMVBsUlQpMTZyZ00rfUsoNUA2U3l4VjVdeFRVfERKcT5HL2JpalIiUyNjaDFucnkzWlQqe1AjMD8vfTsmbWooPXN8Zjtyd2lbTCM5QXoweDFaYj47KnN+aXksPGhS'@;
put 'S0VPQGM3P19NI0lMJTp7ZHV5XWN0bEQ+eEtsY1dlSjJVb0I1YFVNV1kzUlY6Ul8ucWxMUEZ+JWRxL0M1WDFOYlc7QV5EZkoxSUVsdzhhTFpgMDtNJEdWeT8+NUE/fFE+RT9FJnpkOykkLldEIzU+OTRQUTRaK1FEamRyS3E8a2dWXjt8Xio9aSN3YVtAamUlPGoxQGcme3VzNyhBb3hGLkhRVG1j'@;
put 'e3A7cGozNGNZSCEpKGVSK3lxcnRKMFtaamVWZnNjJTROJSEoOCNJR25Dbm1XNncpfGpldC5qX1ZmWHJXaUNLTDB4QDB8YURtfjIyWHRRTGMiIUFUOjZJU1NdXlN2a1lFQjYhbVJTfHhvdiV5TFk8V1poS01bNnBzYXhbJmQoMmcwciY1N1Q2PHJ1YCUrTyRAd2BFLFhEI2V0RHJbTVF0NWg7d3Mj'@;
put 'TzhFfiZQNVV7V2poR206O0gwImQjLE5DWHM+Rnd6OzFmazlEKnleYVNRakU0UiM9Mj4vJUo6bz59NCZeYmxhektzbENaPFVgOWJpU20/e0J4TkQuQUVQMihbXjVYMFBUMzB0bCY5QjNga2BuWj1EdGx3aG01cDJ5dVUyRTY1V2g2JC9ZKGEhKSpfeDhYRChGakRiUU87b0B9b0FabytpITRpK2wp'@;
put 'K0lSNnEvanY5OkJPdFojTzRIJjtLdjo+PD5ORnk2WH0/TGojLCFxcCo8TXlVYCMhfkIlZlVrfFhPSkAlKU9NXXJwUC5hMVl4MiZFN1lJP0UzUkJabzd9VHRoJWdHOVFESmYrZU5CXj1+byFPZWd5R2RBKCtVd2BaOS9HTFZiRmBVY1ZJJGxKKGRQPERkWTRGfGM8d21WT1dHWDA1NEksJDBVYWZt'@;
put 'eCtIK31ZTHc1Nj9ZW3tycEI4KENWaGlNY34uOmpCakxYKjRmRiJAZXQ/cV5gPldsX0dvXkxrTCZDXUV6c2xgMl42djFoPStgdDwkc0JgbH1fKVhFN18iMjJ8V34+SmJ8VVdAVDZXJnVuaDckMT1sXjhdalJ5L0goUVMsKmU3K1dKdm5CO2lWZ081NXtoYG8rVi5OdnJqW1d8Y3N3VzxROiReMztP'@;
put 'RUJRc19nT0t2TXA3TipDc1gwVVt9Zj5xdiU9IzNGUm9YTHEyK3BlakdDKSkxbGU2e0x+K1MpIkNiVj5OazNtXy83LEs7MU8qRENDeEoiOn56XWs1b0JYWWxkYFdbeEZlNyI3JXJTLjo3dSZVLzgscS55TDhBUnVvdHVnaU9bUDc0bD92MFkuIz8mLjF0YTY9SlE7TD5pcWx3ampsWj1wXTojJC99'@;
put 'YTQ+P0VKNlN8eyRTfnpMaGlMP2hOYz9zIjd+UHpKP1B9aW1DT3J4YS5gdS90KSVNNDVye3g4ZEplT1V2e1s7OEAuMWd8b0UubTJyNjY1QGFXQkR8fVVUfURPRWNtIlJJL2Uqa1luIUdXRHYhb2o/TlMyRTkjeF1qUTw9dHI+eV5hTnA/R1osPSxxMHxEanc6WD1FbHQ7NkFCQ0R4ez8rfS54Yyk8'@;
put 'ODpjdnAmJEgpb14uLDZeREhvb3t+ZDZOYW91NiEsdW9nW2okW2k5RXJtNlpdRWdLM0dTRXtWeGZjMC9AdWdrdHN7MTNgdUVzNUBNTXEqQUVtUyMlWXFCNzpXZ0VYMiFrN00pa2k3OWFAUm14eEBLajJ+MkRnb0htLDtzKFduRXdWaHptdENhLmp8SXhRLlMlWD1DbjZRW2A8aDZOW2JGc0RBOmBz'@;
put 'bVNwSWcxbkJvQF53V3g2b1p5ZW4/dzxlI3thTz4ia2U8K1F4Z0ohJVgkVzhtYkJDRCVrQlVMVGpIb3tDQkRmQSsjdD4kVmloYUtldWJ9SVFdIm9ZMlRYUSlkMjc8VHZuYEFDZSRBTFRTZU4lKExkPzArVTxnRFdFKzBEeHY6UFk8OikjdCtZeGZ1dmU8fnRnbGZXakh9P1tOdF5qdTtyMzVYWnZ8'@;
put 'KkgsRXBVJXczSEZWX2JRTXh4TD4hRnoqPjlLT2ZVeGouTUZ3cC80QEFUPnJJbCwjI2tnTzwhP25CcFguKFhKYjJJSVBxQn5oeVVHdSNsNSZpYS9xUzlYV1FmTGU4ODF1dWtjLEU4R0AlYHgleVhHSHlvWGVsUV48VW5yV1B5andQQ0QobF8veHcmNGwuNFFQPF9rKzhpNURHfiZIPGhMdnokcjoy'@;
put 'YVp9O0NhVEVsRSp2NXR7OnpKZCVTJGR8WVUkOEtNQn5NVXZsUHxrQylGPUxdNldIXWdUTlFrXzI6bzVEU3g0PH5uUmVAZDclPzxPSnV2fEIhSil7ezwwfiNCIUA2TnZ2dy46a2d3blthW1MzL3ZtLCFhZ241KnB4aiswUzh3Pig8ZnBnakJ4W2pWZXZqMk8oclRKXj5xLl9wRnFFWF4oQjtXbk41'@;
put 'SSFWdEhwPXJnMj1NfkFDO3RfJChZUGhHczx2K2MpSCNnTk97LkVyKUQhS3R8XywvVGFKeTJPez5HdTMobnpgU2pBUHszR0B+aXpoOmBhUSYlYFs6bWtnSlAxLzdKckNpPFgvd1B2W14hVHA5WXN5dy51IiVqKURWV1soZ21bRFZ0SSRCd31XI3ZVQlZ3YjxVI0YhQEdMZ0xvaGdxNSh7RkkuSlVU'@;
put 'Plg0dSwxRVA3JWR7NVFhTTluejV5OCR5KyxkN0N9dnBoSSF4alFTdWoicj9KazttL3FvKkwhVn4lWmBGSj9xOT0zWT9hRyxMSzcyRn1eUXhDVFkxbD5yVkFTUGtdfW92aWYkMTR3dm4uU0BTZ1ZieV1nKmpnbFVBOkFgV2lFN2c7OzBNS0skYEYuSzNpTHhaaThtWCkpSDdleUA1NV5rV25OQjks'@;
put 'ciwxVlBeVF9Wc2BjYSNTVzEwdjQ8RkhVZzpaK3tROGcqfkFJa1QkOFhlLER7akFiQ3VXQFYmdGNYcXBhVDU4dHw6SU5NdUhSJHxZSFBJOFtqWiY6IlQkITlHQVYmSUNvSXNwbS40L1RQWHhHTHdaQnBdbS93TWowVGFyKD03e099XiFMOD5xX2wxNnlIP343Tj5fdDZfaS85I3J3OCM+bixdVnJF'@;
put 'JEsmaTZjRHJQWHooTmU7OyYxMlkiPWlKNFN4cU1COEQ5QF5kI3ZjN35gK1AlKC9peEZiYEcwKXlXUDheSXwsMjExIVgjUz5ZT0t3UW9WXjRzTyM7fEk9alF7RTlMQnFdI1tOdUFNVGA2RlkoWWhTPGRbZyNJJDlgK3h2aDgyLEo1bmUyamRpKjRiNHVPc3o2Zk1UOVhuNFspTT5TeUwmc3VoJG8o'@;
put 'cVBERjFITUh0TiNXMXV0MFd1ZW1KQkwxfis1WXZRYVssWSwzODtSU0B9Tk9kZUNXdSgrRSxfaTtDN0Q5dDdIW087UVAyPX19PDJTV017bXZhfUVhX2NfRTZncihWRi9nOX5heUV2ZjZwfTBEJjBAJV9SSHEmRiwhQHt5Jl0vdmxsITxIS1I1WGB6ZjxBSForbDA7Mks5N3IwI18se0BgV1RtQ29q'@;
put 'KDpRdE1YUkBxWmdtb3c/TjAwQG5FL3QoVkZxJDJMZmAlZ3A+P1leMVtacSpZWEpXOSReTmMmJVh2W2x5PWxQISIlNy8/M1QuUGBZdDt0ZjV1Jiw/PT91Q3xmU2NUVXtvIV4kQU5tfEgwUyxmd1FRQTZRLG0zaEJ9Q1MrKFA2M30/Q3olI1pyVF5gLFdNJFRaVSN9dWdKLlVhRGlnTVJwR1N7MEth'@;
put 'PVNNZjEzPEx1TiZ5eipwK0hOcXEkX1t6SDUoLDhEcSN+QD50OjFyQiUsMFVENWB9amJLO155RE9tTEtlPGBJXnMxdVc6WS42Tz5nNy9bQEtRISpqZ31daUshbmdOdDMybF82dyZ6dW9dZFk4fF58JDJyX0tOfHxLTj1CVUlOSXdyb2txW2tjK2xJOCNfY1dWRXFLJF5kbTNMaXtJLzlVKy85dWtL'@;
put 'fjlIdCpEM3hiZURzJGZBPio9NTh5NExZQj86UTxabkYvfUdXdzNzdTJ1PiZEM3xgUlpaTmZsYkJFXjlkVmE3IlhkYXs+dlNpIWdCNjx9KF05ejNjUk0+bDR4JmBKKnJLKmM7UEw9VXdhMG5rI096MWY4UW80UzFAM0x3QXhDJFtHZ2hea2dWPFtvXmQucGdoYTVNWEdpWSpkdipQa2tDXSZyZmBC'@;
put 'THo1Mkh0e0FCS3lofGhLYGJMOV0rNU9bKzREL3JpKyREKHVbQ04hPTsxVE43SVFuVk5WQj10UkpSOHBZdzdCXn1RWiVkeTUzZkZtVTM1LHRaWW0wZFE3XTxrQGhPWlhFOUVqI0RUaWZTOjE0KmhFSmdFcmZ5bzkoITc1JTlrQn5bRV1uKj5yPDleYndgdiE+N01MUCRVSTk/cjEsN2ZyM1NrYyN1'@;
put 'T1slLkE1dCRXV1BndmNBdmR9YjxRKWRiZHhRdXhwfCJiTCtaRWlwRzh2SikyKnAiKXxhSEgiRCk2IT1Hb0JoLEgpPUFpIyN6YUtEXlcmMUsvYDFiVjVJaSM3WWw7MihhcmZ0Jj5NTDJffi9tcytuNilsOSo/TyU5SmtKeH0udXB9dVdOQF0pWylUVT1BXWN6I1RZM24kUV5uWi5zOHpQOjVSTC5J'@;
put 'WXBZUTR6MjBhZD4rZlNxa2hMKjMjcTl2YTJeSnwrQU0uXXxGQENrdUFGcSw2LzA/aEgqbiJLUl92UTpAPDlBO0xMJiE9TnxOQj5qdkZEZDR9U0pZOHtIaTNXbjYoOXIxRkczOWs7Zn13NGBjYUUsQXxMKU1MK1R2QHJ8M2FrU0goVHlMYStCREgyNml8fCs6QXUuJUZNLy9rcj1vfkYhW2NIbHZd'@;
put 'XnVNQDt1SkdUd25ET0tqZlpZUGM6cClzIWQ9OH09OV8hXTxeO0dheHt0N2RtJCMsaSleOkMpcFRbflU6PzozX35MZDFrcWQ+WEx1PXAoXUk+fSNkTmMoWXpkXUYhdi48QztgRkF7UzZ2blVrUi9lMjMzWUhQW29SQCJQZT57MVFjOV0rUElScUVRRjBDfXxVMnluU3tpLkkoNkdLbnZVZzpmLmh8'@;
put 'QVJTS04kdWJ2dHRdK21ZaldOIjVIRlB1ZldFQWcyND8/RitJMVJ+Z05Sc1JKPyl8bl98UTNfV18xcSMwdjEkaXQyakIhSUMiK2xFa2Nfb0xZXygpckh3bEBIQUgrZTVuLGdoWylrfi5NQEZgNjJlNWozLl9+ZDRUN31Lfi53XkdxOmJQbClLUncvejAzVmZgLmNsLGhPeDhHJGYqezFhZGU/a2Mx'@;
put 'fTN+dC9dRk9ueWJbJC99TG5he2lOPit+anNnWSNOZys3VFkoRGRreDJjakw2TygocV8wRl8wdGZHaDRFJnokRWVIeipsQCVCdUtUKUFiKWtDSyQpUzdKXkpmRDMzdXNFKXF9QUd7Umlgb2lyX0dCNW92SnFgbzZOOyooQyFHcWVyQDBVWmk+TX44U0BeLzBNUlBtW2hXR3M5RnVVREoselFldWZk'@;
put 'NlR5bGtJOG4vamgjcHZgKkwyTEtnQGkuYHVLOlYlezxDVHYmKmkuRVhITl5rSTNfb3x9fmZ9Z11ONlU7fld7Wjg2JjZRPF5FJjNpIS86eCEvcXI6XTBULz1PRj1BJmtiY0Y3KUVDZXZ9ejxhaUlhQmhra1Q8SkxQcUp1fEhxYDcpVkVNVSFHXmBtOG4vV0VNciwiKDpDIyR5MXM4NXF0QHE6MDJ4'@;
put 'eFA6WnM8TG4uMCs5MWhjTHY6SWFmZC88NmhVZ0hvVG1VYEh2STdWQXo3YkooZk5ZXSNTQTAxK35BKl1mNmJrXlAhcEp0WjBOJV0/WVE3JXV4M2JQOHglTlpfclopLGA0aD5AYDRbKTtJcktVQjpHVGZ6dCRvfj5bJmYkYW0iazh+aHQ3fF0/RVJ8aEdBQ0F1O3dpP0tXPjE0JDBKPEc/U05JR2km'@;
put 'KWdram0yKmZXMzUsbjQlK0ksfl5XeVQ+YyEofDYrXkErdSkwJFYvbl9xWWJbL0NRJWA7WnleRjhrLil6RiVyOHIxOW59JiVpNWUiKnsxLF9weDV3MSpwdFQhcDtYQ3RZdGFnL3BPPmxhYX55az1mVEo8XkVxYyRITFZ7RWheNmlzVTYrTUBPOWBPbWBbSGxPbl9YWjY7JWhafUU1RVtPQHJeVS5w'@;
put 'dF5YaDsmcGBxfi92dnFdPjBLP0YrMTJjc2I0KyV2NDppQik2KldAfTlvfERdfShjW0hOcDs1eXBlJEJtPHwrVmNoJGpWZkBUPC8vXlcqVFZXeikhYVE2ZDVxWjY+fDpxUTdWU0I0djRiOD9fS2BGJTQpZX5OLzRmSy9KVG9hPmpAbGhuTyVrIVJIWTExNiF1RXAkZyhmKDAlQVgiWT1yRHNXcEAj'@;
put 'Yk13PFVwbUB6XkcyIVgwZVtEX3hPUnZmen5tOmdjZTNYVG4pX21NNjsicC8xa05gPTdSRn0mYSplPzZCdXNdeVB3QUJZJmlGakVYNC5uPC5DVSpaUjgqYnRKaFlySGJwTENPUlNRSCQ+ck48O0h2UH5GZ3FLQl0zOEIvREJGOlJ+PTJHV3YpWm4mZDVqOX0+L09aUWVbYlMrdkFHeUtsI196TGk7'@;
put 'UFY7K0leelBSZC4xW1ZiemY1YmU8MEZ+P1RLc3MuQG5PTC9IN3k1T3hwfDB1fChoKkQ/R192NlQkUE5nVDV0VF5qPytSIj9mMyNELm9Hd3s6MywrY3cvQTYuI1loZEJbaVh6UDFRbDVLZXM0Q1Mwd2MpZllJdT1KXXQ4SnU3MH5pKF9IeUFkVzVwbztmM3UibyoyRDsiO2doW3RrKE5qYiNtcUlX'@;
put 'fCRhTE00XjZhZ2U0YThUMV8hZ2pXYmBPQ29wbm1oMStxdns5QTdUT0RNVXgzYHZafkl6YmhFQXY+N1BrJDR5VEJpb1IkSFZDd0k9fihvIyhCSX5wUGc6JD1lXyNdSW8hbyxgTVA+ZiZ1dTUyQ0V0ZiwmbUwsa3kjSCljPHwoezpOQ2lKbzVOLytda0V+LFZpSHReZVVUXl1CNGNCenpKNHVCRX0m'@;
put 'fS9nPDBhcW9GLGRhZGMyWWxzLispO0B+THNuKG4jTFZUZjEke151fGZWWUxQbXV8ai9UNVp4bmE4P0NEbzA9OTFNUzdycT18W3QxOTBRJDJnW1NqNlZ7KyNfQXpbOylhdkRNaTw3aW1xPkg1bUFWJUg6YXkjRCUxNmRNeHVFR2Q3O35XJnovRSIja1IyVys1bjtrR2xMKHAmLjdyd0AlNlhePnNs'@;
put 'NG9lbjN9XU1yc2g9RFlPWkxgMXZXM3V+TUdZQFVteTNgQTkkeThhQy9qK2w9VFN3JXppbi9FKExzQ051MFBQPzddaihKSXokeVh3JkJ9JF4qVihhMG9YW1VdVSEyTE1MYlovUz5FUldkNE4oNTBJa1pRaHUqPjRsYTtYOmRQc1paUWEhRS5dSyhXY1pyWXh9SHNFQHBIYDNCbG8/c1JSZWlqUDc8'@;
put 'dGMuW2M/JSJgXmVnUXQ3aXA2WFZYVyhAXyJmVV4hYD9ZSWgpVTRbNUtPQTZ6OkZuUnQhcXZ+ckIhbFFjUS5XLkYwRFBeMUh3U3IkRSlXVmQ8cjI6KXo2bG9DbXxdImUyb1ZeK000ZCRxTntAP1NiLGBTUjFdNGw0SVpsQFVxKmVHMF9wInpuYVlKcFZpdmxkfFlpeksjMXx8SV5AMnVPO3BlZ0Ms'@;
put 'bSNXK2ovektqLE9IWFA9bj5gI3JrIX00Nz95eSZ7InNAb1ZpOWF3WGImKCZCPSlFeTRxX0FhZz5YRFU7Ml5SUndiK200ZHk4ZihmWDlTOXohLiovbkxLRUBiYF42b3Y1T3NOWDpWc21YdWkoXW9EOllKbnZaQSltWXQ3cFdrKncibGt0V3guX1NxQHo2WzwrYiEzMk53WVQ5YGtDaUFeMDxrW14s'@;
put 'bWZNMVh7alZ2bnlzPXFnekcrIltsK3tiTlo0eTw8QmFwQ0t9fSM0R143Ji51WTQzY15qOj1XPEZJQmp5KGFlUmBCP1V0KTFyYjBALGVVKkcmVGMibXt+dXJUfENeOX1DZD0/d1FycXJSIyVZVDhzUjB0QndzeyR9MVlNS3UucT04Pk1RJCExIywpPGVBKkRWX3lkMW8wdStMQTtwTHFkUU4xSEBb'@;
put 'MGRxYiJoPVFzayElIzd2ZW1AQCM8fnlJTHpXbkJDbCpwaWQrKHBbc0AibjdTL0VOIXd9WSRJKlY7aXs6PWZwdD96a0hYcE5OJSF5ZlNZcURWa1MjcG8hTT4mU0FzISkwZm9mR0heclJbeS53S1JpWUc+enNYYFU6TCg6QytOalFeZFNkfCF9NUFKOThLVSRBZXpkQltPaCgqWVJTY0VFOFk1RlJE'@;
put 'OUV4PilHSzlHakM6NEUkdWBIKmZqfTY0aCpJMGMwZS4ienNQW3oyN3s/dXsqY0UjK3R7fUk5PSssXnB4K1REfHhQc2NldzcuT0U+PUNfZHFlJCJzaShbaFJ2NHVFKV8lfi5vUk14dkplaVZjYzdbaVJPfSpOaVNfKlVHRTg9RGdhR0pwck5zWUZDfXp5YXZzMjBELEF2U1UydEFuWGsjdTY1KjMz'@;
put 'UThnRUJMNUhLP0hxcXgjSlFFSkk3PXFAdy4pTkB7Lz5EKiQ3X25kV35td2UhcFROXTh7Ik56VzF7LHQuPHBWOkg8JjVlb0VeRihiT0UreilnbzUyIWlVb28hZUt+eypqUkdkKyZEe0trLn52VEMzcnBlaFt7NEl1O2d2JixnT108VmZsOHY0fE04RlVdeVhRKS5ja0E4PyozQiFCS0p3SGxzeFtf'@;
put 'YjpNJHQ7Py4kWUZMd3hAQDV4fW94WCFyYUh7QVRLVyxWdiZdbE0/V15hUnhRYG0uMFEpdz1hQE09OH1iYF1VVW41IVptM0s2N0ZiPzNjfiJRWDsqbz1GIUs/SUFATl5nJFcjKDRPOFl3NSxhK004JGBbbGVNeH1TMzl3cmhiKyEpc3hoTStANlEyOyxJXmBDVWFmV2lYUnBGZXlOdzRke05IVHJM'@;
put 'fldXT2ReaVQsVWFdSHI0aVF3UDJVO3cwI1cjNXB5WGA8NHBgYUUjKDR8PUdmSysxU3xIKkJNSXMqZUl+QzZPQUBsNXUmdjooMU1pOnJoSzJVayYjWXF6aWNicEMmUmosUWxqPV1kZkVdfTpMfDZQTHtWW0BHLkF7XVFGcmVNITdyYWpoY3xGKiNLRmNMPTR1WStId1NZUHR9I3FtNlo2ZTBEIWFk'@;
put 'ZUJCW3V9eW9Me1MlOTpPWWwoX3AkP1Q4UWMkLEs3NHRATWI4PjVlXj47RDA7R09OfE5qcSZrKGFTcyM6RUA8NHZyeWUyb0w4TWY2U2hZZGhJIjwhPW0hOGt0NDEyXzAyRzciWlo2ZjdleT8ze11vWSwkb21GfDMxZjQ4JkJGRVk2OE1xQmhjXXU/Ij9IVyFATEVCMjt8SS9yUEt6LkN7WiVQa35i'@;
put 'dXk4dUlWS0goOU8oYXh7Km9SeX5YP35ALlIhPVVXfCVqPSt9Iyo2OncwOCNXak0sOE42fFlucz1ROTRmLz9yPHZ+SUB5PEAwMylJNH0wR11pLkxDKW40MTErVUVISHRoImJ6OSgvSS5XV0khI2tRQCk+dGZoL3s6SjlOITNzemQ/UnJ0emN6UlpWa2hkTEoiYzt6b3Q/M2E/OHckTEFiLzd5dWgx'@;
put 'RVh0Y3IjRnc8e3ksKFdkNVA9Yno/aGVAU2BtI3hzMUBmV09+bj1gO0NwNk5AWUkzVio3VFt7fFZ1fUtTMzUsVDgjfj06NGxMV3UlUjI3VlN7djBOYGhYV20iTFRDLks3IXFjcjBwMHEwcXgqfHRRbDpyTGg+S35hPW0xRGohVGo/UFlnejR9NXtLPHpLWENFaDoxXW1MOFdTQWRFPVhYJFZpVCUj'@;
put 'Mjw7SVRGUHBsR0ApOGoiSTBKZUJMeWg4QCpTRiE8SDo3YHQwUUNJUnxFfWxdRnhUTGxVaF9sIkNSMlR5WSVKcyNQbDBBJXc8W3slNiNbfihrWEVnN00hUXhyYl1jKz05P2FtfDlNOSx+QmRQOlklTGY0JWhAXyg3Z19PclBROnIjNmxRYz1eOFAzWVM3QGtxTzRQRSt1eDRGa3FFe3R9fHJiJHYv'@;
put 'SD9EeCE1aF1JJC9TV1REM1hAJXsjLDI5WzpoeDNzOUllbD9YbDpTWDBnSURCI2NTQVUvWSVpN3hpLygvfGkiRGd7fDRnJWxdK00relZgZ1txS1Z+MFVCPntXRnMpOCQ4Un19Ii52aGk9RTRkfipvQEZ8ZUNkNWpvSWk2TTF8TF1uaW47e3B8PHomVE91NW1rTlYzQCpfT35pZHMpczFKVW1vPCVG'@;
put 'aXZZOV9wc3pFIz1JQlM8eXVlJl1VQjJFWUlBSWUzc2laVUg0Rz9ecTRpT3R7RGQuIkEzayh6NHhdXSkiPCR0PkNhVmlYQUJWfFd6OTVhOH1zNEt0OnZlaCFaVD9LZFNnLkwhUF8xKlJMUSsmSUhkSUlIMDxaZCk/UXF9UkVyV3Q6ZD8zcmc3TjExeXxiJGN6TipRVG9APG9ARzE+W0ImMnpKPWgx'@;
put 'b1QhcHBFa2IwdEplaiw1e3w4Rmg8P24+OElfOkw+ImBIeXUib2hOP15Pc1JsTV5CXT8vREo9LGEkO2A3eWhgbHJ7NShvZlE/XT18aWNTRSJIbj5CZTJ2MUU9dCV9VnFyUXpda1R2TEQwLmdyfVttU0hoSj9Zd2hRal1Fc3xHNFA8W150K15dNUdjcDZNYHciPWt8KzRzYTB2SEBeTXAuS2RnOUJE'@;
put 'IyliZ1Nnais9e293fk5KMH5OdC5hPWMsfFEyTS59OmN5Lz9jMXdRYjk1VT52eTM8KyZUZiNrTFFAZiJDYz0ybiZ1VyQ0X21aIk9SbkR8IypPPDopb2x1fiVFYSFgZl1LUWhNb1AxbXNJcERoRmt+eEI6TWY9eFVteEdmS3Zlem01WCI0PCg5WWs9ZUVIai4pIkIiPjRbfUBsTnlSeWU+aUQpOUty'@;
put 'JlE1YygmOEtPNmEse2liZCpndmd9W1R0Rlg+dSM1YDY0eHs6Uyt4bjVvcG9kQGc5XUtkeTwsLD02U0giSiFWR3lsaDMhIll3KEVRRXkrOkRiK3MxYE9iRzoiYiQsVmRlMmxMUlY8fUQxM2V5dCtTWmp8bXslYSVvKyYwJC9wZy5zJGM+dkleNmkhfVBPdmVaWzI7dWUhblMxWiN0WjE3NGJmUk5i'@;
put 'Lm1LXUMsVTR7ZGZKXyNZY1IhJVFOeF14Y3RHblM8Q3NUNXx2fU1jaDxZOkMkUWBRODQmOjpdTjE0fnB4KEd+JUgrZHBNPTl7PTNqO1h5UWk+eFtie0d+a2tLbUBiJUw1Z0AvYipKT2AiJntVZUNBKz4/XjQ0U0l6WW1fMiNYI31HXXlwXmFjOkMrLzxjVyRATTxfPH01QUNVfilJeT5eZ2E2USQ0'@;
put 'a3FZSWhsKEhMeEE7JGgmQjwyQn5nIWFXKXQ9dW9BMUFxWXc+LyVdaSZhZyReQy4vZ1pHeyxyJC4ySlU4WWFNbUNhOypPeWZyR2VyXj1qRTwhU3t1eCxUUztKUnRlamZ5VFJoOyVmS2N8OHgiSmpZXVgxbmJ1P0llNTdML256eXVdPk1nKWl6cV5BK0U7TStOSz1wRjlCeDElaDteRTthTk1mMSoy'@;
put 'XlJZcVFxfW16bTtadDZXXUh9c18oSkBGRTpeZVh1N2oycEA1SE9HWDNXJldCYFhTJHw4VyZbUkgvQ0U8NXRZUXdKVDZCTU9ELF9+UjJQIk4hMi5BZk5KYFkxPyhWMT4+aVpTMERVQ0JuZXVXTz9TW2VtLzBYfFpRcktYMn5rfVIjVEF4YShNVHEyND1kTF1HWzxCLFQ6U1JRJW1fSXZzbTw8bF4y'@;
put 'PWdRS0dTS1BldV85e0BUcGpmcjc3WF1RWm9XU0BFb3QyaHwkKFJiRU5sWjUrcT5pZyNmM3h3Jj9uRExuNGF5UEJ+JmMySiZ3eUBfVUEoZyk6VyFkZkBTP11NNCR5Y1lYSGVaYnJCSzsqSCVPdWlvV3FxR01ISiVgXUpoVEo5em41VkBmRiRAVyt4PVVnemtqYXFCMURCaW0pSypmaihtNGlKdCJP'@;
put 'Qkc8S3tCXXddQGNDQCh+YjBieiVtbGElaTE4S3s+Kl5dX2M/S2ZuI3JURilUJjo3JjJsVTZoVCNZQ3BCZ18sQjxTVHVPQSJdO1s8V24uL2NLMHp4KShSals0VW0/LD43eS4pYjA1IldyMjtwTDJeQnk5RkIzeitNYT06eXFvclV1TV42WlJONGFCb3U9aTNHVFo7eCYvWnJkUltBeGV9ezxWN0Ne'@;
put 'PWFLNWFqYip6Q30rcTQ0O0Qobl88P0BHYHRlRD5SJi9HaXhRKXJERFR8e0pCbGhtclE8YXZhLmUhcXdULH4qaU9CL2NTI3VhJXhjdWZfbHNvcTcwRDROVDUoSURzMGJxcDk2NWUxa0EhYmBnU3VFYzJLYHZpVzBuTlZXJjIyViordEpBdE10TTBvIi99Nz9XYlV9O2dbM0tmVVZvai89T0I/V2Uo'@;
put 'PXVPOy4rcUpSdStHMGp4fmxNbzhvQ156Ym5ATi9HejIzRk09UEB+VGswVWhyTHh7JF19VXsmVyl+JjVUfVc8NXh7TG5AamQ9MlUqIlB7USZHZFssPkJFd0hHbDVVPUdqWUgvTFRqOkY0bmxeSGJ9bTE+KWw8IzR8SWtjXnZiZmR2eiI+RkgofC9kJEVITmt9fjQifU1vUU5dU0w8PkhoVXBUTShf'@;
put 'c1AhQStDY3xrX0ZxVUgpcHtJYT5tcyJdR1RrRVpPMEM5Jj09IXFbODZrbDw3KVsid1F+QVU0VnxxcV1wdWB3LG06UzpLYTYuKD5dUmpqTjEuOltfL2IrRmhqVHs1LntEdE1JPk9QMWFDL2oqdF1uMXpnTixidT9GRjZabURRQlgvYGJReysoV1gyN1VfW0tuZiZacDJ4QUZ9QSMjVj0/ZEJiTCxH'@;
put 'cWdTcVhJTmYoeSVyUSluWlhbQigmbnFGPGAjTX0oIVJzJWNOKFN0am97azdpclZJfj1OOG5Vci9FMj8kOjwmO2FWYjN4Um80M3d9PHk2PXBjfiJJLzAzcHBOYUJxV2BhODwrTTptdDdXcz9dait6KkpAbHpRQTFfQDo5d3pCSXBRSSZLclVdPkUhJnlUM1VHdEJnQDR4UyorX3RaSEpdfVo3YDgw'@;
put 'Ml9bRHxFKTxUPz96PHBVdHQ8aFd8XilocypkPFNDMkV6K0Y0ZmxnPH5gUX48PyY0WDF2fFszUmFaM3lxPD85LmRDVD9+SkxxXm04OkNVOVFJeDVRP35dRElNX3Umdj5KRGxMY1o1ViRiUTtJaW1rRVl4Yi90ZTRpJSp5KGBdUDA4SlAjcEhmLzslclEsdiEmSmMoczEiSyROail7QVJOViZ4cSs2'@;
put 'eE55XiMqbzIle2drYXNJZV51UiF5dHhpNDErfmJLPE5tOjRdQTAqYk5sJFJKVFtaeyZdVk8hfkpGfkVVJWt6Ml93N3YzJHYrSGg7UiFtbnJMKVFOZ3FOUmAqeVI4flFeRExhbEs5dDJ0VVZWIUcoRSwvJDRaRENFXk99ZXVeXXU3TVhNJV4wfVM5fDcpQCMjQEBFXTdeOGZ4JUlYbEE7JSw3RXpT'@;
put 'ZkIlSFMyJjRJLix8bGNWQG9DSz8saHFPPz01TXc6Rk5QVkpeRD4vOCVFNnQ7QHFsO0NvZEVddjJ9ZnZAZWtxLERdYV1VRCQsWVR7MmljdGkjailXWklyR3JAZXd8VjFXNjdfZUBvdnZyOjxoVnFCd11+Y3BdODNRQSNQR0VpXTFqJmZCfnBOaSwwJi9EeS47XitjNylFUEJpYkU7UGp1VkY1fVMs'@;
put 'PTZvOjcrZG01amByazEjKkE1Jmh0O3tZSGtsOio/cGBXWjoqPmJbblIqb0JYTUUkfl85YCp4IW5kWnZVRmFmc1R1MmFpTEJLZChvVl1gWnRfTzNXPTt4Pjw1KShueE8qZEh1WXZ3KlIyMGk+Nk5udDk0fiJKRX47RVJNTnNbQDxrX1pENC5aI3ArM24hISR6Xk0ueXpvdTB9V2VGOypFNERXdSI4'@;
put 'NCExPipJailpeUNtR21dUWsxZGRpWEp9N1dKQjE/KGBKP3I7Vmc8R1F+JTdVOGpJd29RTCU2KnVmK25nOShyPStFNz5eckN5SUI3KHd7VSxhWWd0aHhjcnduZCNYNFQsZFVBVzd4cHpMdywjPzhqR0NGT2V6L2dyOkYvIk8jJiErek5YS250WGYhUjZwJCF9MVA5dHckPndYTkd2ZFJMPSFyfHRB'@;
put 'LyZNR3QyK2F9fSg2OCRDV3x8IkgkcUJDQG1OKSV0fU1AW1oifG0+PzkkTE5efE17TlZFWVd2JGtDfUdiOld2bmU8OVgrOFd1bXVVI3UpIms8RVlMM0c3VXplPU9zbmk3RywwO30lOFAzPS9BPSxMLClpUUEqVHAiZW1pdCw+XSFyRVJUNysmPF97TSooMzFEZj8/VXIsTHZ8dTdJRXVUenhjU1gl'@;
put 'dH5tZChKWXssNWV2TEFrWD45LmVoN3sxenVtW2BieUBUUytpdnJJUS8sRzhSdEd4YTMlNj5LQDFTYEBWV0V6Nl4wMiEwNDhyUD11ZjE9Nm5odGc8WTp1ZE81TWQ4ZU04YSkrRCZgRmRsW3NaT2VIe3hdTnI1e00oQltCO1hiTnVuSCltWDIiWCovPj5+KF83KiwhUyozPWI2U0hYYHw/aVVSVnlY'@;
put 'Z1pOJUBrQH0jK3syX1BaRCgzakRtX29qXjVAOyhRTCRwKFNIL0MpRHBFKkZzcXR5eUBefSE/JCU3fCUqPj5tOyUmc1J9RSh3YjE0ZFBkQG5COChKYVFlPUc1dDZofVA2RjQ+dyVGcDU/JEUxODg0fERebDw0fFhHflQuPXxFNUk0Uz51WjV+JHQmc30vSkd1XTJ1c2ZqY2hlZjIoZjZNbCx2Kncu'@;
put 'fXd2NnwjYygrLnMveV92L0FdcWpCOnVNfX5xVz43XkFvfTl2PG9CcFlqYnZtWHI/UEwoaDEyJD1GVEN8XUBBcVouejMlL1dRQ3VUSWtEP31uPiZiMkNlYnYudztqKlVGfkB9angxdUR4LkJfQncwRTMraz1kZSwjeCRtUG86cFtZWUIlKzVqOVt7MSpHITpGc1ZhV0ZjNW5MLEVPT3NMe118XlQr'@;
put 'byRJVzw/KnsuXXFRdTBFKSRtKl89TGNDNEV3IWxbd0srIk9dL2B2Oio8PVdHSikkL3lsQCZ6V3E6QnJSZEBUT25OOz1+RTJLX145aCU7TyY1NkQlOEQkXks2VFMyUHB7ez0vWCg8e2tFeDw0VjxlJTIxJlMqPV90amEkLzUjeG1dW115O150XT4+fi8rNisrS1NgKihDOTBFY19EM001cW5mTTVe'@;
put 'eExoLik6WTJ7UDRme1F0Y0F9Slg1TlRATEJsPEZqbV5GMlQmUktnd35mKXNHS2FfIWNkVlAiXSV3IypCUlojW29CJCEqWG9pfVJIKWd8IjUjTzlSM35XP31RQl86YEpgfWxZYWw/OEU5QkYqaDFmPC9ZfTYzP0hnYjd3L3BrMTVeNVImTF50JTV5clIzdmM8QjdLSS8/ODs1QWxmWmUlNDhxc2Mw'@;
put 'RlYrISU9dzw4MjlWbmh6RlJ6VEwubihHfDQzOnR8QS9wSlcrO0QudV5gdlNFSmtRZz17b0poTUYuY3JeNnlebT4hezdbVVc3IjQ0WTN7fTh6fjoueWkye1V1X0ZISCtHd14zbTlZSVBBR3wudnFwNUwvJGx6Lk8mMSV4RE1VflkrajVgUkdPRS4vNkRFZ3Z7T1tDPUNhMyF4dGpgQH05P0tmX0Na'@;
put 'fVNOIi9UI0gzZ30+WEB0ZFB4TmFVaXQ2M0J1eyp4b3EsOjBxR1I+UCQvT3ozXV5vYlVHdT5nQVlCKzxwb19nbGYlZFhMY3s9N1BuZT1KNWFhLF9Wa2p7cWNKJiJYUzJtIUFmX2h9U2dZIyxSbWJIaEw3bj5lbllXanFmISZtRDNoQ0BWTSR3USUmMjRIdV8vMHBMbWJ2JTJxXWxPRk44Uil8Lkhe'@;
put 'Wz5hOHhSTU1uI3djM1dlRSEuRyMpIzxNc01TbVgkfDQ7eDlTMCVKbnB0WzJeOyIofkRfXlp8Mjk5LGN2QkdrU1t5OGxtNm5DUUQyVj9XNVQsQlNnVmUxSntWbEUyQmFjUVN+KmZ3OHcofm08RSl7TzFecytBJEU5N1B8SXhPS3VzK3IrQ1RtYlk0fiNbcXJje3RtVXIrZiVbdlhPJUNYakd5SzJr'@;
put 'cWI5WixmQDNSPGJWZUpoe2ksXn4/IihwVkVjTGE2c1ZYcGBhTT88bVlyVUcmQlh6eUdJNG13P3V2ZDE2eW57bChKU2xSPj5ROEh7cmpzOFldUzJXWHJddXdfakxTM2YhXU4zLiRick0mYFdhXSRDUEdgIWJyeFl5RDU4IUQpIjtzKVdnSjI0O3R0UHt6JCQ4YnVRb3t3VSl1eXQxPkdSOGxab21u'@;
put 'ZXorJnZMbElNLG8+LExLM1YqU28vXSs4YHlkeGE/JWxeQlI3bz5aMk52UT9bLFYxa1lneFFZTGhYMlJNTmtyOEgyb2EkVVtMXi95TWswb2srTy54UklWUiIwU1p5bGAxPktQLEVOWDo5P09LTy9WYHdaayk+RndbM3VRQmx9OVdRL3ZNOHohIWlqQj4kTyIjYXN0dFppNDxQYE9lJH08MGRvQ2M3'@;
put 'eTtnWi4lImsrQn5HLCpRRCtldlJGXn1TZX1FUVB7MXVRcSpnakE3e1swcn12KV5rJj5ZYGg4ayM3KW1JSXVeYl58fTgsUEVyW3hOMk1DJm9kTHdFcX1oXU8uQmlmbH48SmliP2krNiRXSzl5L2tXQ1d0e1hjSF18aCwqVEpHRjhnLkJBPE5LM0ZROCx+QSteJEl1Tyt2MHtEdS5SejtheEhyKTl0'@;
put 'eFNfYl1RQXdlRy5JSCZiKERSYWhoITFYaltQVU1oYlNjeV8hZDtrSEJ5aztPRSYpcldgYGxneXduSldLbFUqWEshOD5sdCU/ZTh2XiEzTkB2VHQobXZpPiVhLG4ocX1FQysiLHhPfUhIc1FQfl1FN3Q1Iz48XXhKd1g9aHEzYFJKc3lOQiZPKD0sW3ArS0d6NVpjXitKYmRUKWAoUylZcUNQd215'@;
put 'WmdsQmhuIUkiYkc3IihDYG5BXVRzYntuKmwkT3l4ViM3OkhfaTBFV3UkayZlW0Y/SmJ7bHhwZnJ6X2k2cVdyPGVhOWArempQSXpyNktjamRsL2IyZXJELDtdQHhwL0t6MiwzNCFNbFssJVZMdUxlU09yNntHQ2NLcWN0e35bOFlDQzlfSGJUbEN4IkNnWmhfV11TLm1KVFkhUlFIRiExS3t2Tj1T'@;
put 'PllJPmdTKj9QN1dmLyVQXTtGQ0djJDEjaUhgVzNoJmhuX3g7NDslbyltSWlyenR2aTxtZlVmaC92fEQwNz86Ky5KayQ6L0EzcExPcCNnPHZ3cmhfaVRvNzpKd00wQDkuY3Blam86VDwzTCx2YSsoWnl3UXxJZGw+aGpUbndSTk8sUSg6Vmd5cElJVypEInc1LF1oSjZmcSRrWlo6T08xNzZOWk1a'@;
put 'YHhrUSx0OE0jZ15BZl01dT93RF80V3goKD9xeFoxLk05KC5hfCZ+O2x1cVoqXlgkQnpFTnl9VnFaS1k7O1NBJXdPVl9Gems4bGAsO1QrY1g+ODIjOWpXMHh1NCEsd3hJRnNBQld5SlNETmF3cnRhKUZ8a0VkTkdVP091cHdaY0ApRW1QYTo+Sl40fXk+NkBHcns1eC9mT1V8Lmt+d1J7UnxlRWFf'@;
put 'MEVeRz1AKnpLN05qZyFzOHsrP3dFdSU6V3cxWX07ZytTa2g1emA6WVchWStJW11ITH4pOn4wK2NSTj5IbGYmdmR4anZ6Y2clPUtvVjlnPXoidGdhImNLUkd1KC57fk5ES0t2IURZcSZWKkBaVTFAd3F8LGBvMiFpV3p4Zko7JmUyLGd2cWhtN3xeQFVaNWJ5ZVhARHRoPiFLWkRIfFRfaXk4TFcl'@;
put 'eChnU0R7bD1PVGVzRDhXZztwWCRBcFIqSm8ySXpebFFvdWAxOXU/KkJ1b259eGV5LCopLEwvTCsyaDNrMWN1QmsxSi9ONz53bX09YilkKGhzVnwwOzUsPjtZIWM8djR6aXF1d1FDelZTMlNZKD9zX1cyJTwwIWpPVEZlWVowQmRMK1BZdCVBTHVyMzJYLlZkXm9HVzZQZlZeb3haPUN7VysuKCUi'@;
put 'JiY/NSRZcTZCOWVjTVI7NCpZKlNkTlcrfjtaWyVwKXZGP3UxRiJML3FvUEBeKixwX2Y/PGFvZEBgMVE6TT5GcC9rVC92UX5DYEYjVXdJR0IxcjFyWXxiRThsQkplN3pEdHExNytKWV58IUkzVSRMfG8wSmksQyxgYVp5Oz8mO089R31bYEc+eEBBa2thaSlkJl0raV9kQGJvWyZIPFEkJlR0RW1U'@;
put 'WU15LkhGYWRjYX5JaU4xPDR+I0xscnxkRGB4MUp9aWRydi8hbjQ+dUc1WzFgdnU8QlM9K0I7WlAxLmNKUD1AWXF8WXNmSzpkVSRHenZhWix1R0xXQilVNWZDTy5NcDtKTGclVUMmR1ZFTGBUI0BETSRLYz5RTmhaZHE7OmRML097TDlveD1rZTUocnFjJkFPT2tgd31VQzpYdEg9dVZXdyVxSHtS'@;
put 'M1hreE53bCM3fFtPTm1XUHhrfm1yY2RzRmU5VnNJK2RfQkJOVVpWTlV3Qz1STipiJXJqcHxpTitMPndaW3h2PzZEWnAjWWNqOk10WEZvUCRAeixLOlF2b3N9SCRGbTosWUdxS2hmY2AvLks0TypYPDc5UUZ0a0UlP1tdU0B8XkZ6aHB6eG9vY3xWXn1dZF9eeHAoaT4vZU0wKih+R0gyez5GbjQ0'@;
put 'amhuVUo9OygwOVJzZ29lT2khZUFLPCFJRVFmZC8xPDtkfmV8RC8rclBOeC8pd194MnFbYShpa3Q6SGZOU3R5UHp5eT9jSU4rej1JJn5HREBzbHlUPztGO0JKXX5hZFtFfVJkZFkoZC9Dcix5XSpuXyNjPT9MQ0JrUGd1T3cyNH0uUWdgQiwsfGIjRSJ8Q3RAU3xKalJjUltAYEs6W2l9cmkxYFZS'@;
put 'V1BAR0RqR2ZDIk1DWEowa2JtZk1dM11mR1F8eFUoMlFWM0VEZXBCQkFUZ21kWE5ifEdGVW8lcGA/d0BffHJDcHw3SFJERk49LyFvNnZCXyJXRUw6OGlkdyRRJGg6NUYrSHFIW31bL1V+NWAoe3xPPjspJXx6aiYxIVVycipoRCslMHBKd1toMUlLcXBwIj1ZSD5kYlA9bGZpbS9FPTdlL1E2Yls4'@;
put 'TjdWdlcrX2VlO2FOfjddZjBWXSpmZnQmUilMNF0kdiQ1VThhc1dEZz17TWA8MUNNUlh9Qnh5bEBqbjxjJjg9O2NlJXNCa04uWDc/bDZqNTg2bmxeVzJ6cXNLOjlONlFdeSlrdCZ4cVsqdlBYVmVKODgxTCQ1QksvfGk2VywkRXYhOHVbM088OFgmXmUqfDtAfX5DOntAPT5DR25TYThLeil6fXhP'@;
put 'OklrTUdPYDtoV00xSm4hYFkrOC5FKmpJbSVUbys7XkBRJit1YUdAVmZRYGF1XX09cXFtZXQufkE5eUU8MnszMHNjSTNzPlNdaHdhTHNAVyx+VExye0ImS3Y5bjt9MXpAQXA1Y0thamN4WXNxWXNGck9OYGNYO0JHUmFEZSNweCxQMnNwPEx8enRQbFg2OERTNW8qUytMcX5nUU9JM3AjZzshd1Z9'@;
put 'VGB6SSNsJFZFaVtdbmp3U0UyRFNEeDA+LmREV05SailGa3dnLm9re34/O3oqa1c4TGd+XVkqIjU1Z2d9XXdRU2taTjpxQXRsayZhX3hGUHI3XUNkd2M8In1uajdRQEA6UjxiW1VxVVEib1Eiby4mUSttSiMiPXdFK3ojIUNvKl9ZO2U/aTJOeXZgemNGdz4mbjtLVkpOOTVJTzJ1NmxPdGdWKVUi'@;
put 'RT5xdUI4KmZMS21eWyJOc0Qse0tqTDxCVXtSWSEmXUNiQS5BNG1aRzlWNHJGdThpXXo2ZmdOU11BQlJCeDBdMlVrUGZTNyU2IlpwJV57czxYIkhlLjpyQ2F7RnpqSTBRLGhKdVpqaXhKfT5YJDdfKVtxZkRXOCxtUyY5dmYjTnBNTzRudUdpbWF4ITxTRkZ5P0FlSENmY3spdldRZztvdkdkcTNJ'@;
put 'eWA0bkA0WzA2Z1tzdnxKNUckaEhpaWlQa2lJLDo9ITFkd29aTmYze1tqZzlsKkZUN1RbLD8qMC5McDZkNm0uUyN8S1NAazZXSGdeLGQ0dkZ1KFV+OXUvfCM8a2JuT3NNQS9OcyNgNjdVVnNtOzU/XnFkZnhPfUVUS0dJbCtKJDhCJTdFVEw7e0IwOEFUZCY1cTNkUztvenU9P2ouNDhUNnNeWzRz'@;
put 'UnBMT2YsNXppekF1fFo1fERSSUZyX0hBP2o5Ykd3YlR7ez81V3BhSV8zSjt6e04wa2ZvNzFQNj9nIj0kfXE6bz5zL0ZZZTRSJE9hX3g6Ln41LCVvN2IyUVFKSWJaMkdKIjVjPWpWRTYzS2trLjBgOFJYQDgkeChqOzYhTWcrWH1kUnosdTZLdSs4Kmt4RlpCfEtYYldFVE5hWCxURnJtJFJKLH1v'@;
put 'Rjh1Vj55ezUyZ3M7MHtEMSV1QFZjNztucS5JPjJxdyw3UF1CXUc1JUQ0Z35dV0sjWXNTYSQ1eF8wMkwkcl1RPStzKXFifTAyO1BTWXBSb2xETjxKfSUvNkRYfk5ISEBxanJyRlVsTHtCSiZgK1ZFRnk0YW1IYGUobXFdd3dJN1JfaGolOGwzfkIudj5Ua0wxQXo4ck9dRmZ0dXVKfmcoLitkYURt'@;
put 'eGdna04kIn1aXV04MWpnTlJSJG82bCsvbH14SH0+Yis1d0kwZCFbO2FjL2I7Plg5e3N+MTBRSUV8MFkhUyEzL048ZmhqRT9UcktQMCZAQHhZQkN+YFBTZ015Q0I6XTglbyRKbl97S0YkS1csW1RqXSM9amR8bHRScEVrbD9IYkRbcyxCbnEwej8vU0NuPW87ZngyQzJYbCVxKkhPIVhwZT0uXW98'@;
put 'Pz9jVzh+QGd+YVk3Tjs7cWJdVS9LOndlUExZZXNUdV16MDdsSWZLc2kmeyxuenkuPVd6bGYkTFt9OjJlcTYkN3U2ekZBdmJWRE51VnlSK0FPP2xMfW14SkpxaXJaYW5pN1JQIXJyLjwqcFkxO1I5I19lT09ta0dEY1pKYD1ycE5ZI1cuW0pJYGspfmtRLDl4aTt2aV5vTDZhfGtWalN6UmRubyxs'@;
put 'K3hnOzdCaig0LH5mOCI5eVF4bVNfXUlMTlZqRF5AaFd0aCReb25WS0YjKkN3eCJGSlRAVUxNKVouTTEwdn09TDZ8XTRwfmUkZjtELGNZJSt8JDVacWp9K082eGM6On5UfkFYNi9Yc3AjSU9BTlZMYyhKeFZTUz9JPVZPeCtmdFIhJixten5ia1BeVFI+flV3PjxjL21ZN3lVc0ZMRlF3K0NqSU1n'@;
put 'NGh+K2V9UExgNF12alpZMjI8PjRFaihKWV9aVk4wdz1CYSpDVlE1ZjFqYj8xLz98Q2RNa1tXdWRLQWVaYDBRQlZUfFVvaUo1R15CMklEOSZAQD1yLHBffXN3SXM+I24rUi9TbFNqeyNTJkk7RHNudnZxfm1xQzp1PjxFOCtjNkZpTylBajB4SSRWPiZ1Rzc7Q3V7eld6NjwkUzRJLC8sbWEyTzUv'@;
put 'LEhmbV1jZT1yRz1LUXhre1l2NENOYkE1andbZ0doJE9PUXEuaSglOWdYcEZtT0dTNEd2OCRLYGNASEFZMk1BTzpzSm83Yi5ASD4razM6a2N0YSN7KHVQRnV1SjJ2NCMqS2p7dyhFYCNqcWVgM3wqT25Td1ZMZSg+QGVOPn1lKXQxUDhnfDRUN0ZkZTlNS3M5fHd+aCFiSTkkYSQiWkpnbV1uQERt'@;
put 'X0RdOHArMEM4VT4lNlRKUnpCSXk7S1Q/YlQ8ITA/SlNmVjBZe1cuKz9kP09PVX5yJWAiSWVDR1dyVUhmbT46cU1EZXhORGBiQ1kkPXg8LkFuYD1hZyhIRXlVWHclK0o7LkI3PllaXU5HQjA6Wm53WCg+SmJEfW88PVd3fm8yVXVYcmNbaCRgVytsI3VDI1ZQaExgTT8sKWQzQVomNCxkMU57OWw6'@;
put 'NVJJUjBESWM1PC54PTFGL103K0VHaWgsbHxwPDJUa2UxcFtwd3JkMSIrUHxNQXRrR0pQL1IhaHRDWDglNnFXLDdbPG9aWHNyVWhNMWAoZXxHS1h+cFgldzNlVyw5Jm9JUXE4LlY/ZGhIOUEua09ZYzhwYGhpS1NDNDBsKkIzYUJaYHppanMkZHAwfnMjZEFsWUY/LGldUmF7XWFHKDx0ZyFeRUxD'@;
put 'bWRHMnEsSTpFKEJgInVlQkVPJFcoMHVFbFZjOUwwLl5PZkk0S0BQY0BISTl+emo+XjN0dXwzcGAkRnZYMzRoJElKd1JLdjZIZXdQIUksWTIycjVIRC9BOyJJOkFySmU8eWFlfVhlcGhFbGp4fCIyUGtwYVhvOU89Myg/REhWOS42Jn5qfSZYRFsscUs+Y1ZDPyp9Mnc9OjJQUE14Ul5uWDFsXkIi'@;
put 'WkdAaThxdDpJfVZEYCMxYTZlSWFgS1I7WyJ2NW5JJkI0TlQySkdNT2paKV1sd20hOk4xfUF8L1gxP0V0QjhSXXI2ZE04aEVzaXdnRFRaJHw8K0JFJCpLeTU1c1BWOStZOjdDMntXVl9JaTM/XjN3REFTR1Z5S0R7TEZQdFdkdmB9RikqQWdUUH5+RjhpSV10YHksYTd1ZyEsQXwsMkxSL1A9MEUj'@;
put 'NDswcS9Qdzd3O2lNeFFbKWkxeHhJfVo2MCNUZ21tPlhJUld6ZEw/KCp0VXRIU2pGTltudS5MWCo0JmRNdXl9emZhd3csQWB4VzszU05Oa3NJcikrUHBNXmNOMWdKNT1YdTIhRTZEc007MUtGJikzcTtDZDMmRXBAa3BtUlZRe3hmNCFuKzlMeXI6XkhpSURqWmBWdTgobn1ZblhyVnpMPmg5c2xv'@;
put 'JiJxdkReQ2k0fGxvWTYrOixrP2hieT4pSy9XWiE0XT5kPCgvTHMqaW8rP3lFKl5OMiEhVytRNHBiVSt0Y009R0B3ZVN1SCE+fkdAV3opWi9DXTZtNHokaiVBIUk7JTBhcThQZzdEdSl7eW9gdlkrJV4yQ0trWypGPDQ5TE1bSFpOVXlLX3UlOXA+alBJXl1xOiw/ckdlLmhnYUVZbzpLRCg7TCNi'@;
put 'T0tHa3xuIiNPT3Q7YVsiKEc3Sz09KlhKMEZ6fllCPWFYJk1BMnA9JDFGaXdoOTZGLGpAUmlnZndDWkQyTj4sRCFyRyxheE5fV18reXc7Kz8vaWhXYVZYOzM0K31lZEhlPkgoVzskfWwwLnBwTmhbdm9vSU4vRlBFLE02O3Q4JmllQkxRJjxddjQvaztzPmVtKj5bMHJAOG5WYmlGIXI6VH0mQDZw'@;
put 'Qy5CY30+QnNoUDdNMCorTjYpZFY1VlF6T0UmWHEwaWA4S3w4ekdVd2lbWi9oeE5NMTEiaE5bcjpoYGZIQypXNVtYTEBSU2VeYyo0NDVqdElTbWFSTXttZDdxOWdYS0JfPz9Oc1RYS2xITnM6KzNTdDF7Uz1MWFdWSzZaQ0h1Wj9fQk1OeT88KVoqRV1dVX0ifiI4X3YlMzBlLiZ1bWV4OW4/MyVy'@;
put 'JC5ra1ZOenBvS0tLQzg8Vmk0Jn1JP0Q0aGV3bnxFKFVTZ3lPPVo1YlYla2ptQ159dHFKMV5YMVh2UCFNYVIrJFFWRnMpS20xKV1EcCRiXlppTEgsMmhjVkAoU25YUWkzNENwMEpeXkJ0emx9dVlPdiEiOV4raGNjWWt1P3VZT35nUVtIYWc6cypzYWE8O3d0eyU/WGs9fTEqbS9wc3tLSTEvImdH'@;
put 'KkNHSE48UElBcGFkfjlJNCh0YDQ0d3ROcHF0SjlEQCNmbHFXe3UpRWNbUEM5c3Rgem5fZW5MRUxPbzdSPTg8YzxYLl5zX3k3ai5oaEdMMilxOFlaZXkrYEVPTVd7bVVkZD5kR1VQaC4oK3toc3AlciJlKyE8USFPNEk0KHQhWWtBc3BOJVVMczp3XXIwXVsmKW1GfE53TXxbcFZkM2g5M2xzK3pD'@;
put 'OF5nZnhLPkNiMTdpUy8zJVg2eEFgUzlRYGByL2JKX0R3ezVHQkl9SzhaZV0pdFp0Rng6WGtJX007K1ckZHN3MStlKitLdFMrQ3ReM2EsKGJAKS99eHNMN0ZsT003ZWUiJX10RyFnZkNgWiw/TnZrTTBDZSY/OyspU2djSz1DTVo5Sn1ySkcvdVNfaX1oTyxoY2VhcThjN0JHfXpJWmJPMXFbNkFG'@;
put 'NChkY3k/R2A8LkBWMHVaellHSFo+Z1RSX05pSC9AUE1qTW18UWAhOzsuIzhiVnVNMS5PPmhHP3JFcyh8NmlXTXtLd0JFbUNiQylbSFpVKT1gOXRtZjw0VntNUitdSzUzI01nKWFVbmpxeVRqZU0/Iko4O3JmNjZLQU1eKkNKR3p9VFNSUjNOaWtpOX5NMDJJYTY6OmlHUmkvRzAhP2FSd0NpTUtm'@;
put 'fE0weWE0N1MmaHooUjFaYyt8QzcsPE42fSV+cThwanBVbVljLGwxYCE9MExJY2l6cCM4NTkrP28kPkBgYDR4JHFXIyhxbnBCPkByInA2MXAsX092WXkxbig8cVhtMEZXZztwYiFDUiVpNSFQcUZUUThTUjZ2TG1AMlMmXmFvc01QM1IsMUhveD9GTng/JjIiTXZpZ3lPeD1ab3pZd0J3UCtfWTUq'@;
put 'dWBpT296anRKamFNdiUjMzhZJnVoKUQ1LilPZWBJUjxpeEoyQ3JeRzQlLDFCZW1dK2MwcHBvXXkxI2A2ZVg/QzUsSnVdJE9qdCUwKjwqZUN8PDF0eXhpVl1mP01BbUQhQlU6Zi9eKzI9YygxfFtDM3YreFJETTd9LmksNUM7dGdvZHJOS3hYMywsKkteNnVsV0dZJD15I106Z3hAcj0+NUdLXk9F'@;
put 'N0RrXm4xVXFJa3hSSXhNPzFROkksS2FdLHNgNWIiLHVgd35GbmVNa2RfSU1xS3Z+USRxdiU6P3ptaWlIUTg7Sj52XUBQREQvMV4/N2FAa083eW0jTXZUdU1VYnsxREt+Lk5fMnx6SXd5eSFfTi45TShLfEg7cTtSclFUL0pIWmhLKi5QRTckPXExYDNsKXY1Zl9WSVdINHJkNDR+bWFae0x0Mzxw'@;
put 'OzQ2c0lyTyEpbSg9eD4qTF1ob2BGIUM3LnxRbl1geklELzdoRS8sSFp9c1leRWlycXJfVkMvVkxbOlo+bz0pak9bI10ifStyNVZYczQmNjpDKFZyaUtJLHA5L1l5NXFycGkkLzVLcE5gZiRDKzljZVBdTmFfSEMrT25QSFU5djBjaVdEJjNZJnYvI0RDNjo7JVVwUVU3QS4pVXs7eUcmRCldSHMk'@;
put 'YEJ0JmA1SU4xeURbflVVJksoV0NISj43I1JYVmBAIjwsbitDLz8+WW5YcipGRmN6N19RVWBiWCZTbyl6OHYocXx5SW0qWE49bnFnJWksSWRqW15Ben0ubWFyPkxKdktwPmNfJi5RM3V9VGRULm5WXlskeyEmLnNeVHlKYWJSZlRHUk1TZXZDbXIvdUsvSj0+eF1ffXBETWI1fVlkT1JWS1EuXW42'@;
put 'WiohfSx0ITJyXlVoe287KE9LPlsqdklITkw9UVNrNUVVaGZYVFI+MG9hbGp8KDchPTBeb0FUJUhfQ2tUQmlKMHI6VFU8e3I6N2NgYCovQVpCYzYoOjFYMkhndGViS3lRQl1oZi8yaUd9alkwfGBteVIoVjI4Vmk7V0c7USZZS3MsYFQrLyM1aUpAbThNSyNvZ2QrJkt8ckJZOUxPMlFXc3VSbjgj'@;
put 'T0V2ZyosdmBbe2sxPjRiLDRGXjVnWyw+UWlQQH0jSkkvWWsmRyN3XXYjaWU+eypBYWMqe11NMVdkTFtHcmM/THwoe1VJdmRnZl5LPFt3W3pkfmAsIVs1LE1Sei8ufXh1JVhHPWN+bj0/d2hnZkNaPXtoUW81Jm9OPy9ZYT1remNteH0zWiN6PU1tLnwwKkc2Sz49cylRdE4oaF5YVDFCaXBXTmEx'@;
put 'NSx7MFQ6MlQvU1E4N2wrWkJwamE5bCo/NlImOixgQERkNHI0WTRAY2BYc01rWHNfMVIibFo0QihfPzljJmVOaDpzfHJBfl9TaTwic3VFZHE/YFQoaCIxNG8+JXd6X3tse29xJSJHRXtDe01KYTV3fjNwbzx8cVlLU19fVkBEc0pgIkt+OjYjalkuYzJOd3khWGk2ViI8I3VMdWBAdlA3dV13M0tU'@;
put 'SSwjeEhNZXttVDBpKSYpP1IxUD07SX1QQjJIWyVPJn5VTDohVk5GZlIiKG5OWn1eQnV8U3NgMlNbbzhqeTxObHZhR0hmUWBaaWBKbWtlalE7MzBvPCo3YUlBaXQpeUVUUmQ0MnMzaUBCJml8NCtXK2VgTWp1KitUVUVxaysvI28sUSZLfV49bUFlfFtIUk9kKyJla0VEUUJ2UWtAd2s3MXE+VFgp'@;
put 'V25iM2s4RlVEaFdWWHF9THdDTVA9MlV0P09yUi4lcXt2TVl7SkVeQSxoO2lLU0MrTiJlLjZRS0FXJUQ5L0FDWFNlJDRKVSt3e0Z0dlQ3PUkqJk5zejhdUXVXR1pUSTV6OWNLdCpUYFF9OXUsTlJmSFlBQipLUlVAP31QPXMzOnRPcUM8a200Y2NvJSZwOD0wWy9mYXY5N1pKXyJvN3AySVtFfmxX'@;
put 'XW9+VEJ0SmExOG9QQz18SHxAaFVSfShMKn5NNF8iUVFwIU9tIk9TMmlxPGBZcjgiLFhdXkIiYnlIdTkiIVA3VVJwKXRnTWZbfTQ6VUBKPzxGc1lgdVkwcFBnTHhFRTlpfU9dblsvfTFFTj5KX29MTnAhU2JKKEVqTD82OmwjSVMoXUVTVVUlSXFXenFrWCRQKWpyYiRoLiNEO2xmSVhLfSQ6KUx2'@;
put 'Vm9ofSxlKStwTl85W3NULlNdXT1ralk8cSVrKndZNixmYTslXSF9P3Y1Q315O0pYNkpkJFR1Qy5gISJLYEAraUE6RnVDQHNnfiRfbl81bms8c09TUmh9fCJseCFQMCRQTVA4LDg1ZGk/enRCQ2BOemtjTFJKYG8hVChCQjgsSW9zSlNTKmxuLDIvMXxEPHtJOmpMRllMRGs5I3k0OWZjZmVeQWEp'@;
put 'SEE8KjNNe0wsY2RPbiU/IipFJHRRXjltV3Fvb1Y8c2AyUyQwSENYQEAmfSJnSyJfNHsqYl1NPV9ZLyN6ZDNoOTYuQ2FNfiIoM147KC9Sdi4rdG1obXtDbXNTWEE/W0QyYCwlSy5weUROVWd7elY1S0MvKnl3X0owMDZEQFVWPjZKXjImSHZJRlVoLDE0TFVFPG8oZ0x8SWxEd1NhX0o8KCldL1Vs'@;
put 'OzA1RFkwP05bcXE9KT1bQCU4b11vI1dyPSRXciZwJSZZeT1ePyVvJF4lYHBEamx7bEhkR0lHNSs/bDxwc1QjL2lyQj1XYFpJellJMzhPNV5JYkErMElgUVhAQSNgYDVET016czpZP2VBcjdhQikxP1RtRUcmYGZPPndFK3xFU1ZVUjdxdk9jQyEsciRWbUhMd3dydFh8WjRESE1AYk42ZSt1RSJh'@;
put 'O21QUjlOenc5QSlqTnBxb1kxVnhWaywqSGFzPUl1bzV0emVHO0U8Vk0lQHVNaXE+N3tDOC9OXylTIj06Z1JudTlFUERlfmorcCRsfT83L1VCQ0xtTElXSnk8S3xWRmJHYz1JPWBJXV5AU3svbTo/byR8OlAvVSVjKypIYHEualt3cVZ5VUElIj9bbjNkNTJTejIxYTtdPTxtYkA2byRzW3BLPn5P'@;
put 'VXsmXiFuP2BiLi4kbXJOMUVOLHQ7NGpSWHFdKG0vVWROWismcERjW2tGVnNARW0oLzpmWzA+a2xsUV5AbXQ5X1BbdXtJRCtZXTY+JU4mTi8ybFlkOjcjSDldVTVoYUloUl4yKXZSLEIiXzoiO1IjKXo3ZWNIKGNaMndSTD8ob34mQl96P106Oz9nd0VPeDRKYjxDbUZVWTo4aHJRYkRoLlpVLF9A'@;
put 'S2pNLGk+XzBWWXFQa09GWjtdZGxpK0RZWlU1cWQwaXZnNSwoLkQ4ajNhS0BRXyU6KSxQRF8hcTo/TVQxMUxWe3lZJDAqJmVjUj0maHVaXmRReGwzb3VwfVMuW0dYY3MzfjJPfUM2VWk4I0d2OEQvZkYjMTRudXYsb1ZALHE0OVlsQ0JXU2JLWCxWWnwoPT5gbig4Iih4KGQ1X2AxX3g+eGwmN3t7'@;
put 'WW5CPUFxZ3lBc0tLXkZDMkpgPFlTU3RsfG0yMD0vPSNrUndPfCk3fF5vdFV4dTFAeHBCZjcsanhkMW12OnZHYCk6fSEmeyZqPyFUJCVrMWVPYV1dV2ZZclI8eWw8PV8/Z0xgQyRqPThrYWBSO1IkLnY0Sl5AQFdQO1RjZWpLImFHdl9yZil5NlYxezZUSnFCXzYrQGI3V1U9ZSFQOWRdNW5UbjJz'@;
put 'b0JNb3E4Nz9wZ28lOnpOeW08MX0lWTMyIVo8Jk9uXTg3WGteUEElXWhiPF9zZVlJK11GZGt1c1dUQDYqeFVwbyp4PnMwfm4hJXlRRCk9TEBwfHFjPXgqclpFQzYuYG5tUDBRNHB1UiNKQnFBJVdGI09RenV8Tm1vY3tDVjFHaEBqaiZdMHV7aVc7WkpaM2xwLDk9KnNqYklOemlwLGdVW3o3Kkt7'@;
put 'NC9qQWVPTUltaTptdyFBKXtAT1MxanB+Q18oT3JSbnd8S2w7Kn0mTTBWaz09eE98ZiptKXRUdEklMVA/ImhXd2U4e1tVVTxedHlCJX1WKiM0U3ZHemkwVEtPWyIhdCohbE1gWHg1alZ7JmA6UmNkRiwkOl81VGNpayZPS0UvSCQuNmAsRF1Ze15KTkcmX1J4N2MrPmNzOkojX11JblZBbVkjYSw7'@;
put 'cSx9QDlVQjZoI0hYOS8rUEg1LEd3fjt1a2pQYm5KVns1fFQhVm1ae3UjMlkyIWgkYSMoZXE0Wl4haEIlSHRSL3Vsd2NmX19lTTVPMU9wQ1lKJFgkaC5FOVFqKnQ9dD50KUhbQm8+ayVHS3ZFMUxJbCwzOnYvKyRDKFdpREBZVW8jUV44LzghNm4pNUJUfFE/SFNPLmtrPXlgSD9kREQ8dDQqUmo4'@;
put 'e2tHNGMvMDFdYnJ9P1hGeXdbc2B0SH09ND1UXndfdytWVjRCZDp8aEZ9YUQ4ZSJwKCU8Y1txSjovUH14aklxezU4d1VOXitLWVNMPV8/Mm0lVFRfWCJ5Yzw3YHhlfCJoIyhfSUQ4THU4PEhMcDhJXjVMb0ZRUFMscWZrRShYTEtgRlh2MmJ9TnxVKERxWW95O14hM1Jnc2YreHlIRlEiVyxlY19Z'@;
put 'ZUBEIj9ocVQrRD53WTcrWCZlbnVLSkgibkxTcFtiMXdoMCtzfSVqOnUsU0kocCxWUS49bWEoISl8JXZ6UXVvIjloZmlbUHRwanVrV1ReJVVofVtVT0xqSF9tIUIpPEs9ek8hWX14XmMoMS54Xzg7RXVvenomNjczJWVycSRBJkFhRD5pSEtjWihKYil3Z1ZqfnVNdCFtVTFXSGlkTHNQQXo3KlFD'@;
put 'NDVoN30kdWZuNmtGelF4UTwsTUxDaGpnW2hAP05+IWRpQyY9XjxlWVV3KWVYVTtlYztQayIlel12PXI6PzM4N2BwcTJaakRSJDZLLkNJa316el59JHhPeEZFIUhUPlY7VmA6KWpyLlJ1VXw1KlE1eFFzQTZTOzhnNzFRbkhTdG1WP3AsYTs0eV82MW0xe0I8Imh5JGg2dSQ+OUNmUiE8Sz5CYWMj'@;
put 'OG9qb2BCciZ9KFZEQjUvR3xMdDExQSZCYnhKLChfbyozZH1qZm1nfllSWUF+RllETiR6aSR7NndWR0pXcCRjNnB1WmpQcGQ1PS5VZUU0ZzYlJXs8cXxfTytWeEZRTllJNUtvWms7L0UlP1dVXV48XzMhaGxDS19XWyZ1M11gPDkrOVM0IyFYYTVeQCZnX2xaVGs8P2pWL2Z0YShYM0dMYEttMT0+'@;
put 'IltPOnMlUmJjQjl6WnY4LEFSZmw1Iz9JOEIlMlJIdW9qKT1qdS9KWH48WF1BaCgxeVlGXz9qV2FNUkQ4NXYqSCg9cVs/SHJvOGVbY0wsc0Q3d2ZpVDNCfSo2YzEiW3BabGtZPSFPOnhFcFNmO0xQUlZYbG1ALyMmRTppOWZ4M2lkKTh0WygrY2l4NWckODFOS1FBay5ne0FzLEVkXn4yLFkxXmo2'@;
put 'dT9qYz1oQ0B5JlBLUGJXQ0IoQFpNNDF1OTJNLiQuOzk5Im42OzllfioiP0A9JlQiaXhOQUA1dFt1TnJqOUx1NFQjOW9LQWJCPjNCfV1nS01qfllZfWJ2YDE0Vm9wS0J2OFkwOytjYSY5YkA4Zm18T3cqeyg7RWooZzxFM215XlM9QEhDPFssPFIwJURvTEByWzc3LkB1YE8xTEhBejo6eXJBPlB2'@;
put 'cFgoXkR7NT9wSF8uIXA4SzYzQi9kUnxKMiZXX1ZpcitVJXQ6bihqalBFLHlub0gmdnVfSnxMcXJ2JTt9diMzaUYrOUwmaiVYRDpgXitlTz9XKn0qQ0BbP35pPmJVQmBdOGA1NnIrYikub10mNnM8XVNBMTQ8Zl1jczB3IXNQeVs4PVl+VCFzeWZvPUk0cHcvSDZtJllpWUleITZ3KFN4PnBmXiE/'@;
put 'MG4mR3FCPERvKmc3Myl4JWhqYiNlLjk+bk0+MHBwOV4sT09CTkU9RT41QVYlfFlwdSg5RyFdTTo3PEglRCRFclRdT1YpQ0RyIkA4Q1FTYThHPVNWQG4yWSpLdDByNFZ0M3ZsS3JKPGszK1VpWSsmQTFgUHFdOkFhXzEpSiMpJWtpamVWUjNPTCEmZEE+OUxTcjgpfjE/WjA1bmN4PmxMPnFFcUw/'@;
put 'UDBDUUg2MjpAY3tFQEBtVjdMbSh+UjNCXkIjZjBtYS5JKXouQWdaOT11eyRdSn1yUCNpaT9te2c7Xy9INzU0L11wOVFxa2xdXSo5Y1s4TSsxZ2FWbD8qTXB2QHh6dkpDRm52P149dVVuNktDPWNxRlljW3g+VEVJMHU7QntQVG1zPWppYFQzejsyQlRUJkxGfE1JYVlRdklTY34saCheWDJZLGVe'@;
put 'Ky5GTCR9U019X2kxJEQkeHFSYyV+S01jY2BEZXx+REgoZ34wQWwqIUdbcHlGTVoyPXEuK1d1aUskJjd2Unw5LHxwcz9mUjkkKjRVfV5MKlkkcHtIajRXVyt4RHpYenl4P2tmTSE8T0Y8OVNGKGJ7ZUZNWjNGQ0QiYVdoT3JXTXMlXSF8PT5WUGZDe25mKC4xLHYpVlhxUSxNQF8rcE5mSVc9cyVW'@;
put 'VFt9MzUmJFFGVygufFtZP2xacHt9RGFYeWl6XkJ2NzQ3VXxlTiM5bWZAOnNFVU9pTnMxfjF+MXszfktMPyk2XVsqUlJ3KnZ3IXBbKVFDOUtKYDs8cG97PVd9Tn4hcDt+c3Z8PGxieSlnaWFySnZiXllGeGVFdE4jNE58KnxLPU15fVZrNFFEe3M5NjgiS1NSe1QkYi5faU1YPmclTmlXTjcqcjlZ'@;
put 'V28oV1ZsSl1EfiM6Ql47PGVYITdPIiVjRShvIkF8P0s8THFbeTtWL2Z+bF9JQnZ3MER6PjZRWWJ0PjZhSXA/dnpPRDpJVUNKWG8hfSFaKFp9JEBUQi9Eckt3cjFaQFl3KGVMNGQwPmM8bTV7dS9Se3VURTRHfHRHdG47LGtOYzRNcV9SIVBvTTcyUmllP09KVmR6VTt9cXh2T01lanBRIUUxcE58'@;
put 'Vl5RKzRkJURaKn5rIy9MYUM9TDglRyJLNjFgO2xhUVR8Wz4/OS4sOSxMdUNbdztpM1tkU185bzlQfSN6dyxANmJkVGlXUnMvd2FRVCZRR3M1ZGNGPTBXWztqRU01VEV7NVYhJVFOIUlHTGRZOCsyNFoiWXJePWYiQn43eEYyQFc8LlFmT051Lj1Kb19nbTZ7YmozWzY7MHpRVEY9N3hMVi4wOEQ1'@;
put 'UlFJaDpeRih+WVNrZ29WOF5UZGlBaEQ7Ynl1VFhLWmphQ20veGxKQ0VNRU9FLkdwTUosPz1sWWdzeWl3RXJYW2ZWNXdOV18iODJkW00laDIxKmwiKX52KmhFQ1UqdjJ9VVo0dTNqQlMxdGlKLj9ERmc3WT8vcj40IW1lTykuZDZWU2tBeUdoZHxnSkIiL0xaMzdhWEtxXz0hSEl0eVs/fV9WJCpK'@;
put 'LyhsWX5JT3o1Lkg5V1EqU0dJKn14fGZwYF9dP2ZwTUo/UUNMR1Y8UVNrPT5gXl8/I18jUjdKV25te2B7Jmk0UU5oWnBSZ3xuflRvUC4oczxQalp4a2kuVCwldnxxa3kyTXZ7cDFJWCUrPTY9R3BAKjpTSmgvVTd7RDkyYDZ9dVBESntuQlJOWkcxbHI2Rlp3anEuKiFsTT47Vi9IXVY9Jmp6cjkv'@;
put 'ejM1MmBEVkI5OHRedWU5SlBJKGtYTXNhRHlxUTppI15PaDMxIWJQJEBNc2A1cjg1SWR9Vi4wOHtuLmBZcDxDWn1KeFh7XT96fioqekd8ZUZKSUcwdDY1Wnp+JFEmJHsuKllWKCR3dUo6WjFeakR6VDB6czEpTVo0fHF1PiooazAzKDcwWUN7cC9DITkkT21OYUswMnRNVF1BPUI9ZT14SztzUDgu'@;
put 'RV50Qm1PPHU+X2YjI0R0QmoiO1ZrUkZ3X1EpJWwjfDpGInd7KzB6YTI2ai4+dnRUUTtFPGBfQ2hYUntwZT5YYlBEcXtHaS5KdmtMOSNQRThHOlcoN0Y5e296YHB4PVA2c3QkLGFQQGcpdj98fktaVHxJPWhLMjkpSnh0fGg3YzROaEBqQXJVPnlxWEdrOkQmRSRkZyhDUyMkRDdiJC5+JUo6TGZV'@;
put 'PFghOlNBPmhteDFmK1NDRCgsa0ohS107KXBSajNoSTk5R3BEPHJWRlsxbXkvL0k3bHJtTXh9SStVLEhHZ04hOXZ7cE8yTl1EKXkpVC5DKyVtYjYhOEY0KC9YIXl6LEhQJX0kYDErSXRtemhIeWRqLE5MeXZxd0pwNUNdVzM/JVg8QWdmfnNQQ15hcUh8QHQ1JCRsQHJiZ1hLcV8jUipPRTdZXSsw'@;
put 'dXBmc35jeyZBKDkwZGorJD9dLD0uKWU6MkZDNF45JGs7OGtZYzBkMTRKWDp7ZyNQP2FyOGZxemk+d3dNfXI7anU2NmNxJVo1dnQqdn5nNzFue3BAY3l2YUIpJD5rY2hLZHt2Xksvc1pVfnNaK1deTmlaV2dBaXs+KWA5KT5UX2xSflhwYjVqQl8qKkh7fDZeX0Q8VWl8ayxBXX5vYyNGcX1UYilj'@;
put 'R0gqeT02cHAodXwzbE5lNVpPVlRyV0VNO2N9ZEQrJU58cmJtQ1opV0E2cn4qeCNXfHZySFk9KGVKOWp3X0RxUk1gPnpEdVNoZ3tHPSJHPF9Ldm1rc0ZHYVY1YDBXSE9XK0RJI1F3K2c1a2ZIW2VKcWNrREkwcSs7T28wMTE+cCpEYjE0c0l5XXVeRj4rWyk7Yks9W04/QDxoZD9CcGZJVUJXOyUo'@;
put 'dHQ9SSgwcEQlPjlsMDl0aXBvaSZSS2kmfnZzREY7QD9bJkRkPDoqYEU7JFVQel52Vi54b1giJUVDRTskRmh2YjgoVkVjWFYvR3suaSlTKldPLjtheVopfnU6Uy5GQDlAUmw1UHFuVD5LLmFCb35HK3lgNz1fW3ozdFBwLzV+R2U6Oy5jc2tBISZpTTtWLExbSF1scGkrclVBUVdJaDJaYUt3bFN4'@;
put 'JiYwVD5KbDV8YTJ7VSklJVIyKi9SPzYkOHBzfEdSRzNJXlpeN0w0SjxUbWlzPUY9eUJAMG1YRTA5QWNKWkRrcHdvVUZ6Pkk3PVc8SyskOkZbQio+R0hbY2Q4bF9QRiQ+amA4QCN0Oz48YUF1e2RpQ3RfRjF+QUFDIm1GJEZ3IzU6PDBvLCVqL0xvM3RsOGo6Q1NMUUslYz0rODBGMDJCbVsxNWl5'@;
put 'JUNLY1kmcmVfViNjTVZPQU9BIkdvX2dxKnJgaldDVzdlSkpddiZbZkNMMm9NcCUmbEYlJllzQEBtbyg8MnBOXTdTK2V6SH1WXkpWLn1rZW5zNDtxYyRPdUQwMDlQZS5nb2NkdDxFQV4hKCo3M2U0eFRKOjUjbGohbVF4KTd2U1J3L3VJVmc3aDF0OW9Oc2Bwfl5WbkMpdGBHaT8hbmZELzxZJHA+'@;
put 'azx4NSxnfSZrPEsjPDRsPz92aGBMUVNpR2g6e0VWYDZtU0VrbUFeUWglS3dLckpkU0FhNWVBJmpJIjdqOjloQEVrU0BpbzZ0PVdoNWVoUyNqQiYoMFJRSFQ0K19nNj19YCJ7KCtseH0vRHU6QHExM0VLRz53LGA7Z0JWMCl+JWoxMVhZKmc2MllBJmwvYy5yfE1JQjVpcnlaellfPHxdUE5RVE9O'@;
put 'WyRseTthZ3Z0bSxCXSp9PC9pbUc2SkhDPi5vbyU5RDwyK2lYW1dfdTFdQSooKighdy9kYiZoeWBHZitxYldCb0JVMGV7M0doOipDI2RTZndpPFRtPGhTaW4/QD0jXU1HUEZiMCEqKGlHW0kpa1IsSzc3bnBqUDJWN3Y7TXRLJTsmcWozQV4sWk0/Y21VL3FXRlZwZnBpSFs5X1I3X2BsLzJTOkh+'@;
put 'ZDZnJl8jKChOTXRbdGB9bjpLM2xUU2NQYlteMEs1dlJGazhFPyJbN15ePXB9Y21LdWwyb1FoeXY0LjsxeH0kKz1TKnh+cWhscXkvNjlAKkFAdCp4UmVoTl1BQGshXlU1LDQpTzQ4X2dQX0QzWTUsaFlQLltnWWRDRyt5XnswSW16Q2MjLGI1LjxhW0h4VTZnMX4jdDtdSS86ezloKF41TWQkLEtU'@;
put 'Q1MkLkN2fnAzP0N9KkpOM3N7IndFKyRRQDZLOXw0bXAuY0MrRDg7OExxbzhyS0o5MGNqdyhALGpMK0RAWiU1L045PChFYDZneXNbbEd1Xyk6P090IW0udk1afnNkfiZsWyYmVGA5bkRhTH5oYilsY14va3hAZ0NALiZaMmwxTjp4RVomKCx4JUF+ITMybUhFXmMxMHRpdTdqM11TJnd6e1FPSzsi'@;
put 'dlYkfncoez5FYTsmJUdRV3JeL3VsLzxNO2E8bEhIWGZ0I3RQUzFeIV9OXnFnRl47TWQ5dkpdd187JFhOc1Y8QSomVUEmfnd9IypVdjE4NXokLCt9ZX1ePmc3X0ltNykxMVRzZyVUfUJqRWxUdixYW3lNflMrOk5+PyEkNEdRO246aTxKWEtkTj0lJld6Sj11aFQkMUV4X1VBcXBHXlZsfH5KbGx0'@;
put 'ZjVqcjQpcl55VFBjV2x5VTdRQ1I3UWY7XXApSHtWUXh3dlZASW4lJnhWSTx4Iiw/XUc1PnpyK0V6USFwcGA4WXFJRGAhOHJlMm0mVUsqejROdFU+PTBvcGAyTT9fd35NdSoqSCI0IWhnQHxTQi9+PUBtbFNvKlVnbT0mITpSOXtUZCxxOlRFYWBVUiZzSD5Mfn1fbDpzXylCVXQ/ampJRTgsYyRz'@;
put 'VEAmPVFROV9uZ2pMdzZZRjwrTjolYzl5byl8OUs5WXVJdl1HRXpRTVIvPSF+YFU/alhGeWVDPCN9dGtiRUsuNGFdL3ReXiU8Kzwle2dSUyRiSjU/TnZaNFVFJGtteEddYGBfaCZtQ0siUkZEOHk3T2Z5c0lAcT8wNzApcD5AekldYjs3ZXUlKmxHWj45VWhpcD9mTEB1UipLcD9ONGVKWXpyZCF0'@;
put 'WnolQ0kmNTZaMV9AWD4lbXJ9RnhnTVhtKWJIfF9VZzVAclhRNVdIKU5dTDVOK14pMkYkKn5lQShEMX18SlRfYCJocVlMOCNQQGVbKyJ9IUUuTTNnOz9MVUgxRGtXfVRkfF8uKEJvKiJGQUp5IiQ5UlJMfmhVSj0uN3Y7OnRlWSZ9M2c3Ljt9VlMmPT5FP3RgKjF+SWY3IiRRbzNTY0dyKzloLE4w'@;
put 'UVQpUmxHQCxWND0yX31wV0tqfnBCdmc/KGV1bHhFRileUEFjOENGTUtAI3EpIT5QdWtPeUksOHFFRyxhW2dHUjBGPDM4MUtxb2VPMDs4WXhHenF1UlFLPFRRK3NGQSh0KV93cCVQZSEqOGJwOmpLOVg7TFQ1X2AxIyVrTEhpKEMiTit9cGMkR0BxaSteUXRTeXNLa3tuU2BOMjs8KmFePEVTaFI6'@;
put 'eHFLTFd9IzowUDM4Rj9zRWA0MDY8YWI+TzE0aXRvXTVkOWM6XSFFQCtxRi4qckFTRGBldD11dWdYUXZVTVN2OE9QK2tlLjJDSj80O0p1bmcuTTB+QTp3XzopXVNARWp+bkRiOkwoMW1MLlQyajR6PlZqaTM9bFomd3s0bVFLUC5CfXwjbk0jK286O2NNZFRiTH51fUhsbHJTQ207dHA0U1YlOUts'@;
put 'V3tMWTkoKlpZYS58Q0lzQ0BGSnxbLCpwO3AvVEtTWExMNmNbRnlSOzcjR2pKVmJNeEJvaGFIQUQ4L2Q5dFN5XSQ3aWRwImdqN0xbfDpNPnlMVmp2fGFUcWZ+Wmp+TTFXMyZQQ3VpPixEfkRhWEhlJjZQOnw5I2JZeG97WCskcFdedFFLamB5RSVDeUd6cDdHUGUuYFE7P0wuTkMrNU1bSFtuZ01o'@;
put 'RkBZNnA+VEtsV140dXZ4eEZbWT8wRWJYNjpKWytxPV51bDgyWyxnZUIzVVdCbzFJI3d2fEZ5aGVZJjNLZ0ZGVnh7QCZoenRxMVkjXzlJPzZxUVFtMnJxeHZZeiRpdWJGYiVdPnc0Tnp2M09JaysudTEzYUYwWlBsdFIrSThuIW5Lfkoua2BPeDIvQWQrPmtSITFSQ3NCKVdgRkEhPDtXfSRSOU8u'@;
put 'Sjw0ZDh7PGU9LE93TCxxWVRsV0NgR0d+O203QmxGOz4kcEc0aHMrRCt2QyFtPWhtQnZGSHk6TDQ9VWZ4TFAydTssP2pEXitzUC5CYnh1Q19yK3hGRV1eOz9ZJVNwdkl0JktvdHs/fWB3RXUzdTQ1c1AwUSUyQX5oSmBUMzFHYn1HUFp4U2JVd2EufCpVRUB2Wn5vcXxVeVB+Y1lINUFoJTlaKSFK'@;
put 'Lmc6SCZpMj8weiwiUXZ7WXNNT0JHQXB1TnhpKnFUSmFCaiFTREU0ZDVGWy5RekVpdC8yU10jXjJ1QTAmLmFURVkzI2hnTl4qdTleWC5wZywuI1d6fHxtTjYvXVtsJF8kK2A2WUVxfV5hLn4lYihjaG81U0IiYjl7VTFsRDRKOHhBXmM5aFdMUlBAbEJaWHt1VXY3QD9oR3JYXTJxYiQreEk9MUpz'@;
put 'OipLNSteUVhdQGIrclsqN3dudEw8KzJGeXtgPUx8TkFXRSQhZ11oTSpBeUY2b1RkUTlwKnZSLitlN3hvWVJgNjg4L2pHNHZ4fXw2P3leOyRxNGc4LEU3UCFJKGdHYC5BOnFYUl4kLGgzUVIwSTdHUzxvYHNOOSRCQ1oyYCFabj13Vmlxe0MpT14hTUkkNHJaJDJwSFB8InNINGc0Zyssa0ZveDNw'@;
put 'UElLM0drNT04KEEkUTFQeUwjM0p2PG4kWDkmLntgdm8qc1NHaCxNe0R+RDgzbThVJnxbNlI9UUVyc1JNY1Q0MU5DLylSUiYsZUksPUx7Wj4hU2x6OyluWGhYN35ecCY+WEZYP1ZpbHJ9OTIxIl5NcDdlP0Qocy5zKExBcHBxWmRfPkRTKExrQC85L2p8dk9WOVZdS1RyeDBIMlZfa0ssMGZvRCpL'@;
put 'a1ZQbyE8cj5JMVp9aXhxdl5DSVdpJDZeUWpBaXJBXVVeK0ZJS2JFQXB0YTlKWD1LaXElfjlmZVV5TjhYYj5nUlMsZH4lLy5KZFRPRjwqPWxJYCpBeUxkJnlYbD1ZW2ZSPCE7Xmd4e359RV5FP0xHI3RoKSp2dzZlfWF3anEsWVt4VXZHVkBXPW59WTVbNWRGNSRsWlQ9U3RROi58KFRgP0g2eitq'@;
put 'UTdSamNmOi43OyQqP3lZZHZ1STxgOWJxTXN2KTt5Llp5WHNeNSNDUjQuY3A+aHgsbHR7WiVuPjZwWHR0eUhzS3khb3cmNEx0KCkpRn1Ja2E5NiVhIUJ7dnBfPm1NRV1RXlVWUVp9VHhma1s6RVVdeyEjbFJQI3hmX0VhNVBzJmlVQGY9ZCM3UEZke3V1VDRITnE5aD9HIl95MUtvM3J2JExtP0lM'@;
put 'UGJ1WEpBZjxYMi94ZmssbUVlKiNlP0hZNkp6WmliVThAYCFNczx0amohT3JDSWk3KTYhSiE1WF51JT8/QypQcDUre3JjMig9SU9EWUJLS15NJDpDPUk0aSNHVVI1KXtUdCJBWU46d3B4W3QkLG4hW3xeSEg1QWhKZHQzVU9IT3BfQkVwWilUcWtOPiRyamF3cTpjMzI/RG8xJmJuP1hiWjtdOW5R'@;
put 'YFdmTGVMQnEiXVcjTilIaD1FTlZ7eWB1WDUrPSVrLz1FVD1EeCxEcH1kMjpIW0tGJm1zKT1qfSRXKiVte3AickNtdTNGNS8xLzs9IyxbRCNRJVo1MEkmUH1hM1l3Zjh0dmVPaCEkKixqfUoheS5gTWd5Oyw+UjEpP0RMaHEuYWl6PSY2TkNZQnphM0IiN2xNQzNLXS54c3hHeDNtflk+T0tORjVd'@;
put 'Sik0KXwqa3JDdW5xPUlCZ2ZTbzFaOkB6eTZzdT1xb2Ypc3VkPTU/SCosbEZhWyw9aEhjbiwvSlZdQzx1THQhNzhkTmIsRHxyPnttS10pZUl5bHhSaHRvOylBV0ZEQ1h9YVt4dm54UDImWX0sMV8xeGFRW0NaNWd6eHQlVSk/TXYhbVd8ejZsRitdISwxd3VTPW42Pit6WEtLcn1yUSpYSSxsTSlx'@;
put 'IUtCbWliUDsra15OM2Frd0k8LEhtYlpRXmNkcSQya3NWfFR4USNWTyJPdTlWT0d0WX0mQF1YJl9Zel15NihGXTh7NmtxfVNdR3wqVEd4NEN2WWR1IWlBZmxaNUU8I0FJO2VuPSg9fDZKcEI0WX1rS3Z7QjBCITtzXUhjfUcufjlINEJeUHMwUHJhJUU2fUFEVWpVan1+IjFpdDd2VktGTyJfMWdQ'@;
put 'NzJgRSQ+RDk0ez5xXUE8O1RVJC5EVjdwe05mPWZWOD9ETyZodH0zYSFxeyRXRGFrP0RwSHc2OUgoeU8uSF5SWD9gOHJYVFBVNW1VKEhxVTddfDttZmIqSFo6Y2xHO0BeR1R+eTEubkk8YExHS3c+VmlHS2xffjlZMUp9UEJYMGlQNWdWOCt7elF7Q3M3VSI7ZnV1cStlWl5MW11kdEN1XXkjUl5M'@;
put 'VEp0QnZMIkRsQFdZUD9EVjFUJGpWV3hMYkBAcm1gVCpaMUFjLkN4Tzs8cUpTI1dfUEJQe2ZDQi8pRilFR05+ZGVNZjY5dDAwOkt1QmFWZUdpeSYwdGJiRkphd1Q8S1JxJi9ZTC5zaUd2KywwTmhvNCx9bl97KUZ5OEJ4fHNWYi5RWmsrYDpxTTxYcGlrcl03bHRRamhpU3dDbDBTajA1OUU/PiVW'@;
put 'SV53QWslU2BtbzMmL3JVLDxTfm97VCo/ayk4eyRhUC4zeS99fEksR3NjN30hMT9WclgxZDRuRkJ3KFNqWVRkQUg7YXtCal5Mek1xWX4rcF07PXFeaXc5N0c2MU52IjVYTWEpfCV7bGRyPyFfcFJ9Y3Z6dSh7SjxrNSppUHcmVUJhJUtRTFJHRWgjMEFlUjc/dDR8cmVxOnVMY3xSTlc3JDkxUzJ7'@;
put 'Q2hBPGYqWnR9UHptI0QhPC54TkQjYDE0Pj12e1c+SmQ5OXNZdl5WN2d0aVZWPDpNfWg3dHtwQ11jfWxnKkhmYCZ8SlJ0UXdwbEkpR1BIJDVXbm5jRmIhTyQjcGpvbEciRXM8fk9kXig/cFZ1aVh3KEhvMV9pS3JMdUhfTHh4YFpmcnM6T3IlSGthPnFiciFlK3thWyo2JFd2N1lfeyhAJnV9OlZu'@;
put 'dGt4fExkMl5DKEclfTlMJigqK180OS8mIzpfQ3NHV35wMDBzTHR8NkJfezU9QlRrUyNsV1EyfEB9UHBUKCt+aClhe30uPSp0QyJlJng5Ok5tfW5JUj02PiMlbXszdikoKnB5U3xdSWU3U0R3TztCdDpTW2lCJXVdWn0sfjpPQz98PXhKe1NpVDkjfFcrVlcpNGc6NU1MSTdmbj9pITBVczYqNmV8'@;
put 'SDtiRlJdb3doR2p8QHZsUitDQ2B+L24/SixYZSltdDMzUit1SCtdRnQ2Nkh2Q0UxKHl6QTpsfDd3VkNgSWBMXUR+UVh0VGtlO01AVG1DTUdnKUt+OHd3W3A2KSoyJUVmMDhkayR7Z0RDVFt3Wk9rKWR6aGdoRF97Mk9uOFJJayhwSkxdU2k6a1AsKj80PSwycGZEfk9RT3lbak9wd2tzeE8sKkgp'@;
put 'WD5JZE9OaTRqW2pYK2c4SjttNnY5YD9FMXg9RTEsaEh9SGZtP0JfazpfP3hqSV8zU0JISixTJit6ei5URlJdbT95a3dDIy8+bHwuV1FZV29vR1ZFSTB1PHN2YClkP0s5XkhCQyk4N1t8Nmx+MyM+V2Yifkg3QzwvNltTWXhSekxLeTU8czwyfjFDMm9rT2dyUkVeLGl5SWVOIyhUcjFQJk0wKk8z'@;
put 'bDtZN0EyRkxKIUtmZzNndyF1XkdpKEZgRjtIVURobV0pdmtEK3Z0LjtmbSpNODlJSjkiNyQ7cUhEeDtxRGBVJV9ucSpQMFclR3M/RzgxfVRDNGcoLyYuNj5ISX5+JGFLdXhKe31UPTtnVjdxY1kvOUFoMHhjYFEvOUtkeS9AUThCIjpAPT8uQ1d7XjEwU2shRTBXVXdaVSYqPDRSamFgWCxDeyZ3'@;
put 'Om1oWFVMNEBxWCIwREJDSHwlMV9ua0I+XV4xTVNsPndCcjFoSyM7el0ldStSNkl5dENIWnZadDpwKjsiTWUxNnQ8cis9RiVlfF1SfTlpcFQyQyM3dz1EPiV7LGMxYD1sWTVPQ2hCbD5qUCFkbDBpYT5BI1deZFAjQFJmV2hGZXl1dThvZztofGd4e1pvYWlbTHhsV1UqeGBjTCZqITl1Jm03Ji92'@;
put 'MHkiTkpnMGk7REUhMH4/OkpoZGNHZX5AVXdbMD5UM2xdZ1UsTHw4LCY7SDomSitCWit2Q0R4Kn1TTH5oNFZQcDddJFU0XUJfbUVLXkJfdWtUJUZ7ZEVWS3JkSkpgXXZSTFAuMXxlSWowaWgkR1dfSVdHQSFEe0ZmaWVwP2BbJElIKy40RzNJIkdGOjg2ZWQhej1AdHYmPGNWIzdZK3hqMC49dGs2'@;
put 'Wl5WbEFJRHdwXVgzRkBwKjtpW281cT81VXBpU3ZSdXBKYG9ROzEob3hxSm5TX10iUV1qMWF6RzdpPGJ3R3h0fmw+cmtvRkJ6QTckNipBTl0+JSVhfj4pWkFfe2Z5Pl9ZWC9AIn06JSkuYiw1LyU1UyQhNVteQEFpKjVIfj9CWFAlVGA+N1lzUUc0cFR4Mjttd2MwOjBBcXNvVyZjS0E8cDp7V1Rv'@;
put 'bnYzKWc6KFZSKUg1MmBTRT4zIVVNazFtPVJ7aUgoQXh0TyFaeThELylsfGlURG5VPCNRViowa0UieihfIjUkIUs8dTtzUG9zZ2hmdiMpR19uYjtxdlJBW25Ydl5FaWdHZWpQcEVFLHRPVj5GSCM0KWs1OnR1VkFtcjg0K3M5Zi8vWns/WF1wMD1jYml0M2FFfkdwbyRqJml6IzpqVGY0T00hNC89'@;
put 'TnJYInJpdVAxQ3gkLEYsWHAyKFZASXo/RGhLKEJTWEZeVXZZZ0pOQ3ZIKS8ka3M3Mj1MN1VkY1R4X1oiXSlgZGZlOCxrXmE0Ql07aD9YZSFZbHg7eXBvX3o9TE5iLlVaSSRiQnZuRXVgNFVsY31pSXt7K2xqfiROcylSellpeFpDbl42Rlg/KDRmTGw+KnxjRGRAaylgSSNAXmtBaUomZVZfI2ok'@;
put 'Vm0rSExAUGZxYnhnKSFKJH15M1dRaV49PGkheVVxSUJDMF8vSl4uPEl9M2A/TDU1XTZJcG54KGNaXTsyaylYbH5ZaEZKVHB4IWgyZjdmLj8rfigjUGppLClpNGIkNFZ+ZlAmZ2R9fXAiMWoua09RZWY6RXpOd31dIVdyd3R7T3cyL0cpYUBXXjNfQFc5ZFpWT0E7NEM+NyZJZ2l2ZU5CVEg9dEJy'@;
put 'fURkMy87T0FZNix6USJRUFkiYEB9YFE3VWtxNHxSQyNAYUkkMC4wNi9mYTQwOkpROW1La2F+UHheZTNEW1pmT3NQLCZHYEQlTWs+fHUydUNvamNBIUdXM2BbP3ZwbTlmOkNYeiw+cFtNUTA1diopPCIqfUFrZ2dZJVUuRlZZWX0qPVB2NTNYJVhPYXAsMmFycXQ2Uns5K3ozVnw7KyljYG5leD8h'@;
put 'NDdHUnh4QztGSUhaU1JJUX1Ud2FxXzpmVS5EdiVqV0N7dzJ3OlskYzhAS0JLRDp6PmFRbCYyOWojeipxQWZIIX5bQWJJbCltVWRUd2cpezF7SV5rQi8hbSN1WlMjTVV9TDd5MjpjXVtxO0hwbHFmZnsxPEdwWiRaM01AS0wvMjtoOl5pVzRzPTN4UntBT0cwOj9aY1EhbWEuXVZjQi4hWGdmcmJf'@;
put 'bklmVE5NTjw1dXcsK0xNVGBWJkIuZmlkY3xsWDwjKT1QSWVMU0FWUChMKCoxcCt8cGRoQHBNIip+aUwoSXxuYlNlXyFGZi8+RFNza2YqdXkrQD1SezNXZmVxTno6V31jNE4xKEJRJVFqVldOM0RXendpUCFPWypxWDRDcEZwWWlDY1B+QjhIW3paJVRDJkwhdm8obi8hYykoMi59JS8rO15rWCth'@;
put 'SDR6PzBiYlV2InA2aSllKiFpdzUkdDhyeCVzYDNoaVA/fV1vYiYvK1JSOz9Ee09ZR05DUik0XyRxeyVKc2J2Im9XN0dBW25bMSxNaiswdVphQEdFLkJkdjRlOmttXUQpMGomSGsxWDopUmJHRGM3VWBUSGBlcz8jKCxmVHQ/MVdpVXFwaXcheVBfSXBdbng/JE1lKjJMXzVhfjlidURsRH5HdkZU'@;
put 'MSMyTXNFfWJxJU0oK3dZQDNeN2ExYzpCLGwwI11BRmpHflE9UnVJcCxuVHk4UFZ+ekJNYGpZeWBjMHdwPTo8STsuRWExQGJhQm9KQm0uXmJZelFac2ksLE8+dW15WSQsSUs9OTs/XVhJQzAzZ35eYSlaYVhVKHVlKjJialU2bF5hVFl4SX1OOTZxdyorWHlCJDlsO2RGWFc4T2ZlPGpTJiopY0Jw'@;
put 'bz49IlhHX1p7Lj0oN2hWWVlgTT1Ad3orRikjMXp8cHdFek98YlJQZGYheFR1ZDBwWHJXW1pGa31tUkAiZG4xa2o8MmZ4aWBXdCkxWCpPMHtxeGJ7Uys6M3BmRn5ERUFsMUJmJWVafERtIkZSTTt2eE1wMChQeDliSjlCV1MoPWUwOC8kWDpdP0lFW3VQXVllTjh4KWU6Ukl9QFZeLD0kPS4qUENk'@;
put 'dlc1Vi5LQyR7TnkweW15LH1EbVdzQ3x9M0lTdTIqb2d4Lig4e0xLVz1meExvfCsjaiNiKElHbnBBT3pYLk45W206UXU6PkZZSnRdeEBHZkI5NG5PUGxhPWI0KjIjR302OU01WDpFckFIc3osc30pUHAwKC51djI1ViM2MVNVPXx4NmljJHNNTHJmeEVbLD1ZaGdUQ1dMNE9nV0djXS82UXBdXjJi'@;
put 'KFBbbTEzazYkKj1vW00lKF1GTC92bntQVV5HclM3TEtUK3xiPywsakNbRn4oOEl3VTM0eXBxbDplM2tjVHhiVUF2Nkw1bjtCKltlM1lJdVJhOGN8Z00rZ3B4SnBrNjQ3RDR4WTMrb3N1a3c6MiVhSyR6cnA/JmMlU0RGOFZdNGxCWClzdHdGel5nP3Raak55VCFwNiVPUCEwP090ZD9Me01udyEr'@;
put 'M1c6aE9zfD1PeiNpKXp6PEI+bWhbZTMwMF5JWl1NT01OeUIhSTIwQ2ViUTVJUS5fWXUkWiwuIzIkPzt0e2ZhYHpbPXNtaXd0aiFQUUgseGIwKmsscmtYYlR7Sks6Ii83KnY1PUsjMkY7OHYpIU5BUzs9XS5ibWVGXkR5Sil7cTxdZiRCJGdoRmUiPlg8L3MlYzRWd2FGcHV+cUc+OTViNyZHfU5F'@;
put 'bWJbSXdobTd9RGUsMzNIbjF7fCQvSVRJOTBTVkokZGh1a1pUZHRbeFd6LDVRSTovRFopSWs/TyF0OVVka31MYUImbnJyZFRFXlpeNzFiJSVHYFZsPk95PT91NjsyT01FUXteNkohbisqZi5fZVlBWWB6MXV7InwofXg5aEVsSDAvSVYoO2h3U2p+ZjI0Q1EqfCF+JWxaKz0+Vk55eX17NixZYmhW'@;
put 'OzMsMTpsSTpLVllEI1thfiNKfSMyWVosQ1dvMlg3cTV0X2pdbTJGcFRFN1NMeH4xOjU0bTZ6JVklY2NUZGU+encqPElFfkduKVMiYXhtJSxeQzt4ZkRhJipOXiI0NkxDNkdDYTF7QipVS1BiVHJ9WHFjISwsUyQ7OipIZSxufSJHYncldVsyOyY7SFR+dH1IPSVuQyQlKl9lQSpiZngoJE1LaE1N'@;
put 'NzJHJFt5R002VyhNImw/aGt3QUlNNnZIUzw8eWprLDJtVzl+NTk3Ry5YVHtEYXE/aVI2R3FHbXpOUFBDUF5pRlBIVkpBbDczXkpVYVdCWVpETEM0fkt1RjZIXXw+TVpQNTs2I0x+PiZ8S11dIXdIaltmTDRYSDUyT3s3SyV9YFY2LiVPeGx6PSVyfXN+ejZ6Vm1OJDpfeDZoVl93bzY5LzwxbSp1'@;
put 'UyNoK3ouYXpLYWM1Sj9nN1pGemo+Yl0hM1QwTm1nIVkxQlZXMEhBMjUpUlZYNGN3aGpidzBkTyUrJXxWMWVPSSVfLDk6Z2p7cjlyT3lOcCJlNTp4ZyZxWkhfdGhKSFkhNEAzOSNtcXszbihwPSRtWDYhRShQIm1KY209dzpkSGIxS00lIVRgIiU7TmNZKnpBR2I8Wih5dHo1MWs4bkY8KjhhQG51'@;
put 'em4mU0MkZz18eHs+X0RASyI0MiFOTHBaJHEuakRedkZaUUdXJHE1UUdXQn5WUXR7YUBmWl1RfVZ1JnBbTTFLKE19WEpQMXg6IkZ3VFclY2dxOzFJNHxaTkM8KTVNeE8lYlRabjY/WXIlWmspVSY4LH1bKnZdL0xATzEuSDpONzFZV15wRF1xWTZZVGFKYXt6Nix3aD5ncGZQPzVuVUBgMzQ9VFdV'@;
put 'O08xLilKcGpdODp6dmcoUlJkTzNndiM0ZzohQntpJlI3KUZNXTl2WCkkcUlSMTFYNiJfSTY4KlMoQDJiVj5UYFEwT0AvYVJ0YXdqUTo6dClYSkdzJS4iKSxYeHZ3KHhTQ1VOa2RBfEthKFAsKEQsb3kydTR6TENAT3xORUlxcnooUlt8JD5LR2hnSTo/d0JdJSMmcClKPDRsIWl6PEJpc2g4SiJf'@;
put 'c2Z5WWkwRDNsX1IvV1BCOUV+c2FhWSIqZyhlLi96cWslPCpxNiUiemdUdUBffGV4T3RIRmtfXz5EcC9xZXFVSm82fF10VmVoVChlLkRmPF1PPFhoZ21UdlouTmlmZX5AMWw0UkYhQ2wsOHxCVFdLPU82VE9AVno5RVUzcTV0KmgwNCJpUEMqfT4qOyl5ST5GcGM5NlU1RixSZ2pqPW5sQCIqLGE1'@;
put 'OnhmQ3hFSyVhSSkyKWFpTVdQT3lXL0RZP11Db0htfT51WDxgdkxaN3I2d29eSyJtQ08wdHZ7Wk5SKyRvai5vS3MrP1VWNyx8OGlwZTFwQV8sJXFIOX5naldKbzEmT2EsRnowOEhye3wlKlNeTUNYXnl0bjxjKj15WltdPEk0WD5fUGRWP15bLkxlOW1zT29senphck9RejQ4QyQxT2hbL0B1Rj5U'@;
put 'JCZPaGlxTzgsVUROQFZRYTk2fXAjX29HU29TZXh6WGg3S0pmP09demJCcUxHKVYzXVBRTlpUfG1IU1lXSTIsVjwyIiN8JkJMTUwiMSZ3MCtsbzZ7TGhbY0R5aCZkaWM/VFB0UWthbWs+TyVuNlNkRnJVc0ZINUZlLjBJUj1SQl19M3Z0ciwlcUAkYyVqWXhATHx9Z3NiRHloeVJlfE5DYEFvVTV3'@;
put 'ekhfJl56MTEreCR+Zz1ZRHlIQWlQJE9DYHI/X3ViYSt9PyRWaXZ6UygmXmxmakA/O31ncWxES2NKajghZF08STBvaCJnZU5NVVlTajhCaXpdWVhDYEtxWzxGS1s6SjhBYSt9dT1BUFBVbDdSZWgwdXFBJUM7d0BLcWo4MVBDYERvMnp3ejA5QHBWd0pVLFY1fjgwbm99V3Y4KkZ9b1BQclorWCpR'@;
put 'LGUuUFpnbWY/VkhtZTxMXz4wJlk+aCohKTopcDFZekMzOWEjamU7IktDJW02Knw9U0Y9KTtddmZ+M0VVcmN0bXYqSH5zXSkybTY+Z1J5dVZdZjlfaisoOHp6VEIqJXNTS2BfemMrKCtqSVZNI0g/SCJaMHxfXTZyOGNtS00zJTVuP0h6azd4Xj8pS0kmTkZxaDNRWnMpTzJZVVNhYXhSem84UjNJ'@;
put 'UGpMI2RZcWE5OjBrb2ldTEMiIS5rMVNuPVFHenhBSFZ2T0I7eURVWzxaakdsekgmYEQhK1g1ISZnSSlINUIkdz9XQjd2d2dvKzp4PUx6RlFnbCMiRm15OUZdfSpIJEVIMkohI1FEOEZ1TFkxPUk6eGYuZkR5fmNtYzc1IkZDMmRgUyJtKywsO2YuXzpfb1loYnxYfVBPYCpaTWE+SEsqTX1eQz0p'@;
put 'd09HX2F+UD4xRDlJW089SXJgWjFDWCYvcmZCO3pEQUxuYGJ+X3l1M1p2UVllKyF5VkZ8JlFnV0doaiJkKHdKWUYkT2tWXnJadn1LPjwsU0ZzODhbeFJ1SzBJb2cvU2JHb3RgcDxmI3Y3cFFNQno/b1N3fV9JRz12V0lbZX1qdHQrKn1ldUAvSCxkZ3Z6PEkhQzEkQCYqQ3EpdVlpUHs3SD1xeVlG'@;
put 'bmIjQldTOGFxRFYpck9kP086bDR4VHIzVyh+eXVvNj1YWEokR0NEIVFBe3QzJVBsdjRzNHBdRztaaFFJNSJqQG8/UFM7V2laNSJMKjVZUTxNTio0UVshXzF9P3RnRm5BTV1gNXtvOWs5anQ4byJvNlNAO309TXJwaDUmcjk7QDN+Z1ltSjVNQDBhWjxbQU94dkBqQ3ByfFFoOXNiI3JJVT1BRzNP'@;
put 'M2drMURWJDtnNls9WXlscismSyE5dWlSMElaNmFIX3cqamEvfGJNcyYsPCZDS2tmYEl7bkRQOU09UnVKVk9mXUJPSiFweWl8IX5HQjtDOSY7JXxJeUgkOXxNJnEzRiM4PXZIdXo9X2hAJE1KYT9pfCU1USNiK2dzQmA0b04mVD10d2cwYHBDUSJZW0socHI9WF1jMk1PUnV6MWw+eXIqZUYzW11A'@;
put 'b1E/OGkueXZ6fnkrcjU/eDhlXVA3c3g4eWV4N0ZLcXBheloxWjE6UzBEZCFZeE9jbHNwZjVrb0J6Y3MhO2Z7WGNVSUJMUG52eTpycn10c3teSWlsbitgZ29bRHV0XlcvRk43R2o3ZW4qdiU3Olh3X0YwfnpIWEM9dk0leHFvTlpMMV85Sk0iejFHcn5jVVJic0QvPDFfUnN0YWp8aV5IOytWbGhG'@;
put 'blg4fEclbTNzdVF6fEYoVUxqKkgrSTxEZCxdSi80QnB8JEpPJjVgcFtBRXQ8KHEidVIzSTpoR1lWRXRwfUdFWlAzQmQ3ZFVmOnpGVTwsK0gsSzFSTTUidXx0TE8xS2FVQWxiY1JVQypNVW0qP0hgQ1RZUjA7elYucz5ZfWpWJC4sRDNoQyxgcih7RWZFVEJCMkw5aXpFWDlucUd2ZiFKKiwrUSt4'@;
put 'ekg2PTluTmJsezpHRT5qInkuRTE6bXdMbzRPOjl9P0BjcCxMUGcqXUAvISQoezRBbyMldFprZy8+fHYsZyZCVGBNMUhrWjtjNCx2JlQ8RXopXSw4TWZEfnQkZFJpWjBpcDhQd3omQlNvX35EQjxOSk03VTNHWGA8SUN0cSlsI2RRdUtzRV51X2hvNylVQV5GeU4pW3lvYHEwR3lIZlRQIjwwNDl4'@;
put 'RGRBNnl7cC5bNE0/SVEsRFNGKUVwN3szMU9lM1ptYDlKNC8hTDd7KlRuMT9LJSU1UGhnQFZ3JEQqfE16cDg2SlY3djpNKUFhOlFYP3pAVUlAeUR4R1ZYS3k+cSxZfX5mJmp7NXorPl8pNFJmI2lrMllEYjBMUCpFdntjNn4lX3s2O0JzTFA6UCZEOTlwYUFeV3ZedHpGTCsmRSMwa0QwR0sscGl0'@;
put 'cDAyXjBjVCopSi5iS0NYdzA0WFFqTCFRfC59QWpjMHJKeThgLGREQ2MyLnxFaGsrcTEpO2t8eVQrRGhKbU1QYV8vL243amNuWVt3VGVBIUJLSVk0NDBoIi5Rc2ZrU1sqaDB9WHB9MHpQVjVGallJJDw/RE9eTykuOkQhQD1PaG5RbyouLm5neW1TNlV1On5MYSlIUmVtUkMhUCtbdGJFVnYxejB6'@;
put 'Zld1PlpDalk5W2llQ2YoUHU5SGhdV2lKO0Jfe0o9KGZzRXleOE9ZUGJSd2t+Q007YnJyMi5hOm5ycDA2OGYzdixyPH04KiRJOXIyaDJwSHdOOFlBdEVSQS9KTVpbP3Rha2s6KURdeV9GOCJDUSM4eWdWTkN7UHNLM2wvPlV2TyFiOWR8SFdgTyE6TWkjX3NNcFhpZU5uN1BLTHtpYF9jKy8pWnBE'@;
put 'ZHpMOCVgIntdVzNiLFssfmwxZWskfmhvWFJVSGgvKnVwNjo+ZS9bRmk1ND15bDgiW1cmPDEpVl9MbW8/d1N9O2x8YGJGUEo6bCx3TkI6eXwheVczWEFZXllwR3F9KyhFM0EmYj4xKjJXe3prUlU3ImwzSEclK0x3TVhYI35KSFpDOytbPTtZSyV0MnA/eFJdT3t0JjQld0woLjBbVzMmW15MezI9'@;
put 'Yj8laUNwWGMmbm84KkBZdV9RNFdFaSZXZyVGTFJfNjEifUB4KXBMQCVyK3lLM0FaVCx3UDNILFNYVGFKNHVTPD95Rjl6SEcyWEgmOm8rXV17ZT9feylueSllMToiaHJ4PVJ4SkM8bVd6UHRROURhOEN9WVlaVGt6SmghVy52emJYUkFbUlZaQ2V8WD5HSEtJd2dqVFJISFpJOEs+TSp9eC9LXjkw'@;
put 'UGBuTzcmIjR6YmVCfVhue3UleXJFKHVaMHFjTllwQzgsUmA9cCRATktISD5UbmhOWWtxa3FXR3pAO19sMWYsPkdYakwhcTRbZCIoOjNwY0ptLlZBPFVQfF5xQkJePDtzfnR2YGdpeDc1U0xqOHhVbVs/dUVkUUByLGlhezljcCVII2BwaCMwbElDMGAhLixjRkpoNDs+b3BiR1d5L3FKcER1fDYs'@;
put 'X05jOV41LGU6SyRqRUkkeXFgSzhiaUdHY2lSdiU5RXx1JUs7aT1XRSMpJjdVdm5YK0A5ayJoTXBZfXZ1MztSZDo3YlY4V3E+ZzBOeExHWTBfSkE1OWNKbzIoNEsvP0t8QXxFRUtKNlojIV4qNF9BWSJnWlJGdylWZDUieWMwIkp5Wlt4LiRdSlB7ZHdTJlFEYDpgWm9vTHhNWUJoW15Qbi8kZWVb'@;
put 'PUNeNm44cjFVWkk9IV8pL2pVZGFJMFllW35VPFN+Kyola0hOYCx4KVZYeWlmbmA0KTckNSljJDl+VVBmSnpnRT09ZkEqMH1lRyNNe0ArPCZjWkw3emkrMH0zR1hLRTR9RjNJc0xHV2pFUCRgLFVCIisoOVNhVChsXysrSHZbfmhqQiouVkF9PyQzTTlAXlZ7KH5MVDteRG03TTROWnp3InA2bz1E'@;
put 'XkMkI1NodS4wYXlDaC4sNiUpb3hwJUo9JjpQLyNkOlkicTpUUXUrZjRRNzN4ZWclRzZGeEsyZVNaJElQUjRCaWowdlhCQ30vb2A+O1R0JmcsP2BIelU+QEROWTFYaygjXlp4P0FtUkAwYTZZfm9beWxgPy9sb1BAdU1TVVhXbCVDdWtCLHwuZCQ/U2hRZ0hvWmdHKVVoR0k7Xmgoc1FRbC52MCRL'@;
put 'dVkqTVFDaU95fVksVFZYSndbaEE6fVJhTmZHRkp6Rmp5dns8LEFIaz1RREQ/RSU8UUdXVSVVaDhHaz1bMmImUChJOG9ZSF53YiZkdU5RLlAweFJETFRJJWhHV0dOITV2KXdLfUB+a3B4Qz87ZkxfS0ZhSVkza0lIMyQvLmp3Tn56Mn1kUXo/aCQoP1V3OEg/NGVpJjBqYTBJfUM5PmlhRENPfHFz'@;
put 'OzA9SWhNQ1BnfFZYQW53RURDZmtTJll9X09jfSRLJkxuYyNEQl44VG42Qmc6ITZ2JEtQN0k8R1QkUz1pPzR+JXdJOElLbEdlZjtVLztqfm9gbWB0Tmg/aHVPUmoxOy5RMllycCFqSVIyUmQ5VCY3eTgkVisvM3RqTUhgRClNdlopZ0IxZDRKQzNrblYkM1lhJT91SThAeCIydSwsQnpiSCojeWlS'@;
put 'NzI4KzNib2thaGNGTXQuRCl4P3dPdDN5QzksQVIyUDhpQ0hLeFBvU0U7eH1QZ115fUQsK2h+dlJqa2chSkJya29gKVQkWHksLCosVk02LnkwVUl7WyZ8L21LKkBNUzFYYWxQUzF8OmIvcH57OjhXdk9YQHN2aHE/TC41fVp+LzByIlovclJRaXdpNUBodnRvIWlbKkw2Snp6by43XlVdbXJqYmlB'@;
put 'fWcxc3wsLytWYWx2STpCOmlSRzojLm5mIlZ4LmpSdUowdlo9d34ye2lJSDlEJHxJekM0fn5wRjY9LzQyTXU6W01kP0RvUi9ZL3FlWCshTUBSan1wZmhnVE1nSEB1bXA6RzZIOVR1KXkyNVpCKnF1fHNyMDA0PklSVmppUmIuMn5KUEQpJktIbmBNRjtZaTxYOytGcjVnJGN5P1t6V0lJPEw3cHFP'@;
put 'YUV1VHZsQHJDTU9UV2NpSVFyWHJYSSNbWmsuVWRjMElJe3A8RkBoWDdOIVpvMTpKNylUREJNaH4qSm03MjpLeW06O3ZARHlUb11wLjBpaExDVFdNd01mb1omTGw6KT0zaXJ0LD96cGRRImd9L1lpWCEvKjN+PWAoPWElMDB9bG8lSm1IaXAmJXxTViVRZEVqWXdpOixjVmdXOWpmTG4/O0hSaUE/'@;
put 'SyU1N2ovRDgkZ0MrJFVjNGJPdGlOQFV1P2pJXkA/NiVFfSY7Y0xvOU5hJSVZLmRVZmloKGZSdzBqbEJmZSFmaGZpVDtiSUh7KWlqS3dweS9TUjBJPkxfIVplWGVoVCglaj8lZSl9KyZhaVVeWmxsY1ZqVFd5NEl1MX0vSkd1VSEhOngoLDpLUUw8TUNpWnE/O3AiPUk9az9kRSJCfEVFLH14KEw+'@;
put 'aDl6X0omdCVfIWojISwxI0J9e34lYXI0dDdueGBHaFVhWXc1NDB1NlRFPF1eZUtHbjZRMCprQHhPKWtTR2FefihOdn5URFVdQmdhSnY7R109YVE/bjR8VV5fLiVlQE4uJEg2KEopRlF2R2RnZjIpNyNIdmd6NFBpRGt9QSFHKEsueUd3UiNIc3VKPlI2dDpPYCFPQWl9cnY3c0ZLKj9ma2x9SUxp'@;
put 'e3VKPH1lOzN+SnIiUDVMQ35tJEc5cFhlTzcvU1JiMz12MnA5fEJQV0Z8cnlKaHhRXywoZ1JaIiQ4MWxLbn1jPStlaHFZalp2XTF0YDNEZ3ppJmleQy98Ki8rYUdseik4L1U8eVkqJi4rYGoqbDw5SEk0eCZDO1c6VWhtQDpuJTptNnoqL1s2VmVZfl1fdH4wZTYufWpwOz4mLzFsI3M7PjF3czNF'@;
put 'VnRmTkNlaW1KdWNGeiJacWhSTkBtKXE0dltsUyZ0SDBveHZ+RGBdYmAiaW5+PCJ6OVkmNUwhfFN3aFkvR34lWyoldH5hXXUrJmdxXkc3Jm43N206b3I0VmZdUE44d1E5MDZWfUMwSX5EMUQrdmspV3UoP2RFS04pTWZqLjA4dHUra1JXcTtbLE19On0veUZsaUkzQWdZfXRmYE43MT0jaj1rRUtM'@;
put 'TipaMWYsNUk8X2BtJEJ1OXUlMD05PGV4WXV9aUlpbl1LYHFianV0d1RpL19yfHw+KEZiayFIRW5TUGl5PG5DUHJSM0hEYj9eUihDQl1abm9kT0JHZT14MVJNNDd1YnRIa3pXbjFJNyk3bnR7Omc8cDBCdFRhLCltKVYodDZpQDRqOGFpWCR7dXNwaHdleS8zS1gpO0QrLlZwSDtRbjZBdV16Q0Uh'@;
put 'Y1BwSEgyM2x6ejJHTXB2b0M7UXtoOVVTb21gUjxmXWlTQWlFUkpOOUQpMX5EP0ZeY0hqekg/N1VoNytkbExld3tuQ3hNPDsmX2V0WCo6KHpoJldyV2hYVlJ9MGg2cF51ImN1K2BucWBXbz5maDxhMFhWSk8oS0VYfD1iQztaSXQsdnlPVGpMO1RZRUBCfUJZRXpVdXt5W0UjaGBsY1tdJDh1NHl1'@;
put 'NyQoKWYlcWk7PTE/NVYwUzpLLmZBPlBtP24xRzNPKlAkLnk/JHlDd09lZSIxfUtSSltrVTddMzNKMDRDWn13R31CKSR4OEdVMCV+QV9dTUc5Ukw3UGZ2XiNFaHU+QkJESVlKPTZpfk4xXntlNC9xZXt1L0ZzaSxXcl9YTkEwU30zSmt7W2deRH4oaUJzYWxDJEhlfG9OZXt7NitCX2xIVHJ3UkZC'@;
put 'Q113amFTfElXUHZVPFAzPXlxZzBNSmRoTFV5SjtIO0spZmA7YiFPR2F0TCF8KVlIO0tGdTBeMWJuYl4yOEZoOTA1dnppfmJWZFRqb15EdXloQWF7emlYfnV5aDlEM0guUXBpNyZVTzchc1J8aDR6IiooTFBnVUBYUSNKZHsyXV1XXyNlKi8/Nk01ZklLP0ZFIXR5M28mIks6a287N3x4dl5xaSFe'@;
put 'YjJHaHtwT1IkMEA2MXNtdnwhJmkoUCZnKFBYJmgyIyxMaHd6dWxBS2tacSVtSFI1O0dObWsxLnRlZHF0TUlRKn0kck9hdzVHZUo0ekk6Mi8uTUlBKkIueEFBS083bmJYYSp8eFpRIW5nLlNIXlg4OEp6Q09aRUF1OUQ6RiJMQ0FBQUFBQUFBQUMiQ2gzbGt8WDlMaEQ1ZDBmNSs8IkhqfXhOc2t3'@;
put 'MGowIUcmTSNZKnRPQChpS0hkV20uQFkkM006OjkmazY1PC47U195Zy9rfEhCOEpfYWN0QlZYIVptcj8yKS49YXZYPy9Wc01HPUhpODAkV2l0KEZ3X0JQYGhQVT1YIixKe2N0Sz4yazkvVT9fMzthXUtSRmdGR216OnReTiswRk5wTVU4ajtQMEZTS2NaNz5pMmxYVVtGMHVdKCE5bTAmKDxGe3Yy'@;
put 'T2IodyRNeThDNztzdkN0IT1SSy9ObGFedkcyUUlrVmIrSkZeNjU8Wz5LLyI2MkxEIUBaZSpkPVBfcSUvMTpzWmU6Q1NRZW1ifE1ldSM2OE9hI1Iue3tKTixJUjVQTFtbcDlGMmgkQHlyVTh4fSgkSFtEbk93S3l3ZlhhSC5vSUNCOXNnfHQmeGlxWG5wQ0NyZn5TQEZleUJPTT0xXnNHN0lVNUxf'@;
put 'eCZJa1tfdWgwX1RnRDUlIi9IZ0dDTEVEUkwiVGJWOm40aUdNNzQsK0p5c2RMcVlndjBkRWMlPFB+dTFOLywyMUspPG05ZEQva1F2UXF7OUxTKG8+eUVpQX5IVzI7cUhUdDdXciJeKHg0KEVrUz5JajU/aERqTXk0a0MhIjxWSUJfQFRQUHkqflV+aCpqKk1wemspemg7KW1gIW51L0JXYDJienhK'@;
put 'LGIzc1ZmM1loK3h0UChtM3FlcXd6ZVszMlBqPHEkWXFbW3ldNy4+W2I/dTVCLEZvSEpER01hO2lqQXViUTVTSlFJTHMwXUBAc3ZzU2wve0FFalJHZTFzRWt0djliNUtCSiJ5TGIhQllteF59RShMLlgxIUYvQ20wNS9zOj89UHdmOkN2ZXZgLz5TN1cvb31YQCZsJCYoS0NPc14uKWJLNlFvU2F7'@;
put 'ZDtbPHwyZT84Ujh1OmhiLGdJYFpDYSs8SjRgRzJ5clUjR3J2eDh4bit5XmBNQzA3ZFJCbyMzTlU9IXUzcmN2S2lyMHBqfEUkejtle3VEcTdyRX58dCZESTIma00kdlUpSSozX15OX1UhcXVsZDpbcy5De0dvfmg9eEhHKkNhO2RsVDw9MFhuNzpZSVZpTHRzUF0rajBfRnAzZHNkRG8jUD9JYVAw'@;
put 'dW5MNDUodllpRjVFLn5KQCQoZTZtXWA1RFVtT0c6ZCRWNWswNFBWQGU/WzNoLkpnRXJgcW57X3tGfWskN04hKVdwPHpoYHZEWEIpJHxORCpgOkE9LFkmJiZdb2ddJE5bL19RK0YwaVRZMlVqaFVEMWcsZk5NZGReRStUPEZXWmlaPThNTilORyFUZUdoPmtPPl57fFl7S3JhMnF7VlpocE97VS4h'@;
put 'NV47JEUqLEMzUmVkVyMoVXo8ZDpAVjlXaHFrS1pGaShPJjx8cExiSFlafmN0KW4jdTx+TTw+fHN7NW5pPnNeb058bENAY10pelRpQWtBS0pqNm8mLlhRJkQyOyl1OFssWzV8X29JIUJ2VzJbVFkwKl4rcT9vcTNVSCMse0lHdTZ2LjowKEN1WkN7KGg4Y2twWzMlYXxrMDEiV2hmUylxbXVvN1Ny'@;
put 'SlFwcnROOmsydHhafTZCdjxdRkthNTtDYWd0X0wlYiZeQ2smfFBgPVQzSjxHSTczdTh2PSlbblI0Y2RbbCRELl5sM1ZnfHlDJEJGPiw4LGdQVD98PENfXXdjbV18SmxtbX1ecDAqSVQ0UD9dPC9UZSlCYn1GUltoSEZ8VUJsPD9BRjddR20pUmdBZWgqM34pclUuc3F0YnY8M3E7K2IyXj1JL3NB'@;
put 'aHRfOzNAKH1TTkooRXVvO35kLm0kXiRsVlpdfTI4KjBNQnprbzNULztFMzxJez0yV0gwOl03MGlSSl1gXWJIKXkqPTMwe3k3SzdrZHFkWWYzejBQUmk3JUJGSFFiUnxtaUNHTiQpIlZjIjgvLHsyVG97X11AX2VUVithWl5Ac1YleXhpZjU2TFpnMWd2SGMqfmhDejcsfSJWZmVkUDZDODJgR0p0'@;
put 'fThiPUwoMjZRVXklfV9UMj86ej1dXTA5P3dsM29tUVZ6Wj0lVS90WywwP2E0RHJtZiVKfWQ2OWp8JmlaInpVPS9kUWYkJkssSCNONiVNUTMsYVRdKCpOZXdFfCJuP1hgTEcrPExUK1E2eHtCLEJJNzJdeSpPN1QrYG5kPzAoKzBQRjZkMDh1X1I1YnBgPnQsO0ksfmsra1IqMFg5KF1mRiI3XkIh'@;
put 'bDhgfXwralZWMWM2Sj1dT1pmXlQ5Z0pjMk5COWtxaUU3dDZeLDIrIXUqOFpLbDxYZmgvQWNWU0hjdzhBLjBQUTxFWztQI2RMZlJ5KXJUcmwiNTp3PXtjTFhkJU9dNDw+S0hAMXImMzY1MWdkN2BLcWZCNnRkMnNEYzNgLl4jSV9pV08sQ1NLcEhyeTskV3UkMT9MW0h1NUI0fT0+NngmUkZMPSFN'@;
put 'QDhoR2UkbUdOQDU8VGkhfHQwfGZQWk58IX5OKHNUXiQ8dyVGU11hPiFWOjVqMkthQE8rRXsqeDFKK1FbL1JUOjlFcnBvTFlBZkc8JihJYj95LzNMJmU8TUdtXVVdalckRX0oTkskXlBOcHVoRD1xW3xzIlNsYG0/QEAiUkUvNm4qVTNRUVZLQHUkd290SnBYRSkvL3s0Jl0yM1ZZeGMoflg+Q0Ym'@;
put 'bk80cW55PypENU4vQGFAUXxZYTcxcCldZzl6WmxjL2xdOUhRLlF1ZGkpcmhGaz94TlI8JTR0RndIJGJrY3M/OEl0NGRuUHZnLjZZZjhKWTxgKks6V0w2bmpuNF5lOiE2P0dScnAjZkZWelZGN3RlV19qZnBuYT1XbSU/fW85RH1iS1Vqd0VOb3RTNiN+M3l3LmtqWSRqOz88R2RCTiZfSD8iL3dL'@;
put 'TWNlKldkfWwlNGU8P1lvRDBndSNwKHo+VVYzdHxCeWoyI1A/YXEvJGZjRG46anFBW2RYOmIpSjNqXjZCd2NOITddU29jZ0tpMkxqMiNgQzdGXjBEeTJpcEsoTkNQMHs+QnRlTyNXV29nbTwsPU48bUZ7JU48P3JvVkZlWWthezlGQEg9I2JYPztsSnUkMSJsVkJ4UV45b2ZoTCtIS2RZRUcpJiZ3'@;
put 'VmFXQTk2TE5sSlV0dXA8a09zMjtTOW1qMnpZVG9eUnVAaF1tKGdFJXYjZXVCJSkuQlFpblAkUGNUan5VJWlqJi40UjUwImoqRnAzWU13OXl0aXl6IXFEdylhYiVJNzY6a0hvNTV2MV0haVZndWNENkc1di4sNVtgcy52P2t9PVM3anp5V1FTR1NwNjpRJGhtY3A9QEIpR0xiMSpFVHlAelsxfSp3'@;
put 'YTsoT2Q+NEc5U3JALmIlIU91fjplIklVMlVUMHRDZV5TUzxFW2k8QHx7TTt4LCpuTzN6QWJpWjZgK303T0Z2RSg9MlkmSUpAU3N1KVdJcSQyIiQxIXhBSDYrKi9IUzN+TDc9Lz4jejdkalVWYy47Q0NzLF16VCxdRGoxJTtoWDZOMz9CdEZZbyJhb09QU0NidzBQQ11NREhNaHx9ZEYofnpxY1U8'@;
put 'cjFgbjtuQF5ZZTl1IVk0USRUPzUoSFpEa3hCPSs0T2JUQF8rS2NoZXVyLElmcVJFVFMmQzkjZ0dyMm5IIyxFeylVKlVwPV94QE5ANlRNajFvcEdrOHtSO3liI3hxTVJ+a1ZSI08yel5ZaSZtPH5EaG50RF4uVGozWT12VTxgQjZTdXVKKjN5aj9jWzVRPiYiXy9wfkg0IlY/QSRFe0hAYlZhXUA9'@;
put 'SWJ9fVFjM2VBSl58KFh0YnlRUHhCIVRGR1U4Tl5rSUMrOnJMb2k7e2xYUCxudE9CdVV+WUU0Rkl8SkF7YnhXSlhrdn1TY051aGV1aztUSl5nUXNiU0o9YFhQXTBnfjhKbUp8Wj5leyM4JHslaX1sVG0qVVUhbns6VngoQ2UxYyxsUHlMQGFwcG48bGpPJXY0cEpfNCtLdTVXQ1k5fkNJVHFddmd0'@;
put 'VFhlZTE4JC49dHo8QHpfO1YrLHdgOEpANHNeY08xW3NIZmRQVnI5MkcpLFdFOyxCNXlCZ11CM3A8NDBdb35PMUVmdERrTSY6XzM3TVd6Z0dwPztNVk1DTGh7UHYrT1ROa1FaO2VdVUhiSEw8SXkoL2ApYFluPHtrOiZ3bFQ9OHJ1cEdEPVloTXdzekZXIltbME9QImhKI1FeXXBJPWVdVyRLI1VN'@;
put 'SDB2bFVVdCxmXXtGKyMqPFNlcVVDZkxvNyY/an59VTdhPkRhYjNuM2tuclFXR29JK11DaiJFPCM2KT51YV0wbnh0IlVjTTgjRFdJRHBabH07dXVbMDVqSk1RRCtoLkkqdCF0fFhSfURudWhkKTBgPE9wdD57bUIrIjAwV0MwPXlRUjYxUXNzfVEza15wTCZLfFZVWUpyN3w1R0x8aFQoY2Y6ODRr'@;
put 'VEFwOUUxczRqOzFSOEtkO1p4entoT3hhUEM4Q1E6JXBfNTNbP1RARFg2dDt3VDVnYno3QXpfe0EhT0tQMGo8SVFIVkREPi4sWVUpXUxXLiFuSjVpbXFKOClORWs0Y298aCZDRylrcCUiTjRmdWFhR2RvJTMpQWpfbCg6ViFTSzRFOSZ5cTo0a2s0OF8qYGsxNWFzZWtRRzlNYCl2USFOMzQiPzhi'@;
put 'aVZ7RWU2byJEXm1QSEY8V0AraTVFX2IudmVfUXF0UlVISmwvfWJxYVVVcCQ1eGdbVHZHLlt7V1AiU0BtRG9gPi5nIWpQfGtQckJ1eUlHIXxIL0JJe3AzZ3kkaXY1UlRzIXR1Snxddzg4X1RuX1U9aH5iImNJKTBoO1tZW1EzbipbZzU9KFtRN0dOZXloQUNVMkU+RV59UEg4MVJvKmdRIy8lKT1A'@;
put 'fGRMU3I7NzUrP0ZLQlUlRDFQU0A0KXVPJEQ9U2NKSzlLZ2VdXXQ9NVsxXlIxazU6cCE1Ild2aCV6PVh8aCNAJHAydThCb3ElQCM8Sng0KT5eKGAsanMoey9HO1FPZ2MpXlhOW10hTndsOn1TbCE5JXsxW2ovclFUVCx0dHdZczY3USt6ZGEhZlNTe3JlamxmN1IoPzxeaXNRaW1qb1d7Z1VEdGp7'@;
put 'QGBrbHcxQilTe3dtX0gwPGRAYn5yK11pTCMpak5OPnJ7b3IrU3NgTTF6YiwrZHh8MkRxRloxSXskQXkkcGspRVczKUoudzs6KVVpJVlpe2FIM3Z3IywxKVJRais0MFgrX0VORV97UCsyc3IvdjZQXiV3WkUwU11BTkg6bTdWfn5FTzkkJDErVFpeW3k2Uz4iTFNoMkRgQ3pwRzdFKlZCTUxZMlhR'@;
put 'KjphVWA3bD0wU1BkW3A6aytbS2hsSUk1SWQmI10vJlRmKUdpTTV7eXNNSFVrT213emx3bkhufVZnRGtVRmk0YFlQSnpwV0hOSD1ONHx3UWY6Zzp9R35hJTg2Xm5zOHwkaU9YSTpTRms3anYiS3djPHk7IWJ6JFdmN0c3NVttXz9MYlo0NEdUd1t7RnIqaSVtdSxjY2t3KEp3ZlM9NFQ1MyQoYSp1'@;
put 'MDtvdFF5KC8uQEtyaz8rb2BULm9ya2UyJDs2Z3g4N1smM3Y2QWlVeE1mPWYjT2thXkViMjpoJU9ZRGpWamVtYk9WfCE4S3ZtTHhLMiFDaFJfMmR9KDJsT0pyRjQ9YCowYzdFU0NhQHQpKEAzPjY4OGZFT0hVXVlXZEk7R04pL2NNZitCQHFYRXQ4ZXFWeW4xam01YkBkfSkhIXNGVTIzMnlqbTg+'@;
put 'THY2O1RkVmwhRTpGOyY7ITxWJG1vSms4LmBCeUVRSE15OnAuKzRRJGt6Jlo8WSUvSCRjU0N6XVBQaWJdWW1XJn5rUC5QPlUyZE9dTjxaMShAfWI6JHtXa3EmMWNyP3ZOLGwzZiklc3tJMH5dUm9CP1NvRjlGO29kX1A3Slg0USpQKThuPCxpP1o8WzwkKlV6RyNPM1V+Lld5UmN8ZXJIW3RLVCF0'@;
put 'RHNRNnNaSyx8aSRHTD8sbW1EPzFMbDI1KGhSc3NRU1hSX19nTUBNV30+dD5vcjQhcEZFaWpWeSxaUXs7TGVzdH1bPlt1aEomL31IUmN+KlV5XTh4W05+JG9iWFFxPWUmP2hNIkdmKSt3bWchPDd6WXtjbUpOOHB8PzJAZypoZjhBNyI2WDJESnRQOFBzfVs6Oy82SHo9WH17eGtlQndoMjZ9d35+'@;
put 'RD5ZZn51Oyh8SG9kJDh2ZCRpKXtGVnpgeVkhVHA6RjNtQEgyWmBaSVlRNno5UzhIdHFddEpiO2AkakxKVTpHNWU7LkMsLHZtM2hhP0A+b0k+Ti85cF59biY9X2BzcGoqdGVLYmViTXhPKCpUWURnLDhFXTE0ajZrLjpWYlpPeWNdLF4sJCJyQDtPWzA2Qkg6NzBne3NnKD9GWjdubS9nM2x7bXEz'@;
put 'NTE2YTYsaHEpKDwobGYwUz0vJFomdiwpSXlSTEBZfmlFZ1IiaTJwfHNZMjQrajYrKnFLZlJoIyF+NSFdZGpGT10/PnBOfHhWWSwlPklFbiwpKHJnbXV2VlJmIUx5Mj9WQCpoRSZrM25+dykoRnVxeSFUU25QUXJbNi5OSGdea1NAbUlZPDJCR3k/fWU7QChCTTZDRUZLSWZ7cUFMfGQybG1Fai5r'@;
put 'QHooYEtPaytIRFRkLmZkP34+V0E9KH5HdlpISHVKOT8rdlYpckJTLEExZm8zODRzLzVdPDled25VZlVBY2wwa25Aa3N7X3B7VHFPfWl2OD8wNnpgRUtPXWlzcUpMQ2F6LCQwUHlbVXQqVjpxZ3dGZ0IvYys8WGM6fEBART11XWZDe303O3t0fDA+Rmp7MXEqaywoI3NaYyRzN11+UjFiQGhpNHB+'@;
put 'PGJQbFcoQ34rYFZtbmI+dDxDYkZvPlZIbk43MkpbMTomV09YcWp2XV1kay98P088b2gvR1ZDdFZaVl1XcXw+O3U/MEJQMnBCWms8d1pFNk14VihPc141aEc7RW97UiwlaFtJbmIzRzJpS2F3OGdkajJ4Y0VWempFRkdacDlCIm0qaUEhMGttPD5pNmQkUE1EJk5kZCF9Xy5vM0BJPj5kOWlAZFlV'@;
put 'SCxGKTBdWSFHZH12NFolWmFQPy99JEhVLz5OIkI8QiYuaTxjd0sqLCxEWW9Fd3k8JGkzSWE/X0dZdlR9M150Jj5rZDFJX0JodDwwenkuZnpxWG5sQCJrSTckI3YyKVAqIUV6YkopUk0/Oip2IUldbWtrejImPkZNZV9+fSN1dXAkJkxrLkhkQUxYVUMvNXR0Tk9tclgkUmk3MWVMfTBkZUIjZkMq'@;
put 'ZzQiPUVKX3JDZHg8LE1KYzxAVDA3VihqNW5jNXZfL2B0RnA7a1lwdHMuMnhQM0EzQnBtKnpMT29HSCZwdXU9e197PlFqPi8kKiF8bGZ6UylNQkxyeiZpYmlebjRKMTYxY21fPTslfkxXL18hfm9pXUM3XWBbcFMkQkl6UFk6XzwmRiVvJFBGKi9GS3sxeD1jfUhJIkkjPlJ5KipjSWRDWDwrPCY8'@;
put 'OWgofkJLUSQyUXIxKmQ8dntTWjA6N1l+ZXxAdTZuI2NKP0ZFVFpLO3s1cFk4TGNEXjRmLy8hWEhFUDA4cThSaGhTYkg6UUV1UjNLdXgmKF1PbzVhN0ZyeVhYMU83a3I9JHVyIVI2aTxfbmdpKCQoYz0yYFhbI2ZVdz9xKktiN05PSGQmO1Ire25DU3Q/ZU9daU87Wkddamg3KjxqdEdlaF9DQnEy'@;
put 'RTlFamY1I2IyblhmWUpjIjh3MTUiMWFJU18uPjBWJjlzL3s+XTp9fmY2cTExVVBuMnAjdH5mLC5YeyksLzIhKWttWU5XUHU4KjgyTiNPLnNtPiRCQHApQSpPeWh2V2c2WlhxSDUjXytDQVBKTzRXVlZ1STVqTGZAbV5jUy5QUSJTVVZ2TUV4TExablp7QnJvYSkwfW5waXYoVGdKVk49bXZ6SC8+'@;
put 'JGBdaFoyLl5GQT1GTnhlXWNKQkRiZDBmbVFgcih5dihfJURgandYTlYvelpHLHxSO002U2IsVE4vfD5dTkVKUHUvN3ZUdis3RiEoaGdTRjpedyg5TD8lX1MucXk0IWBLRSJ3TDQvbj9fNnEoa2AwJF9LJG8sKl9paXArVyJTbVokNTR3NlY2Qk1oQj1lNElCKEBFJVk4Tk44VEVNW3I4IyFXXzFY'@;
put 'UiMsTVtocH5Rdzpda2RgdX1rM15EQyMwYTJ4N1Zzb1tlPFlVfVZQcVBtKSk6Wk9qIV5JbyVvcHlKaEI2YE5aP2Q5I2xrZEEsRkMuOiJaZ1gwUn1YWl5FJU4wJSMuI0JSdlA/dEV4MDI1WT1TQl1PRlF2VkRBRD07YX52Zks9TGt0bWF7anJKRDVobUBjTUVCPXNsPn4yPllEY0EpM2g7MDJvIjY5'@;
put 'QDxsNz9QI1UmUksuaUlXWENWaGwuSFB9VlM5Qi5CO0FCUl5EOSpNMGkhcUlIc1p0dStEXjFxU1l5XiVQRH1qU0BfRUJ+OXxXST1DeFBieUFEN1tdbnhkLHNCcDdgUXhwRGdOL3BQXWdMfnlTXTZCYWdwYkpRWCpfMDpMdXQlMC8kY1k4cHdJYEJBIVE/ezd8bGNwLkRdJmM7KDRSSShrKVNMai9b'@;
put 'KzZ7TUZmNX1iVF9JUkhwX2gsZCVMZmtzYGkuNX1qS0opYUxLRHtbciZWQ3xwfXxBKGhVJXMpaT92OzhXSTFmbHNIZDZXcyZ8R0tYP2R4eyo/MSpgTTIhUGVCeyQyK1s2VDw7R29Xazh1TzFZWGZ8ImUlfmdZUXslSUIiVD5hUFR7UTw6fUg5ZFRSUXM3bkwrdU1dYnByJj5ZUVtkYnxuNHNbaEIi'@;
put 'cEI5M3NXN2tpSy5va00sMnBYbDlHQmBiY154I2lDZE5hcDkrNyN3Xj4xaXU7Si9UQ3xVUUpEX3pMPGY/Zm1Nb1pzYGM0XnNJUTFQMlMxPltNXWlIZm5Pe31KRzhmeiZqNmppc3trMzwsPzk8SlltOiFKeltJPWJJRXhsPGw3OFVaVDdtVzpnI3xtdWE7cWE+bCNUP1A1akdWLkVJZzx1JF55bi95'@;
put 'LlcmYkdZJnpycSpkaGUjQnBgMzE6UXJ0X1tKYkhGMiZjOlQkeChYMFlGdXQyQks8OUMobz1HQHtlQ2dxREBRNlo5aHo7bWJLaF9vRW4yTlM+LnxPPkR6aXhoX00seiJvMiI+ZyZMblZ8c1olJEBLKkR7YVNgW19CUj0sdipnNChhOTpCN2paPFh3O2AhWnhqYT9DcD9SaUNbUG5aVX1MdGh+aF1R'@;
put 'JGUrXj5TLFE3ajFbIWwuJG9GW052TjoraWJJI3Neemo2OFNYMGdeWltZZmlzVXRyR3pTXiFLKjIhWXl7aDVEI2ghK3A3VCwkL1FOYWQzTFlpeXp8VkthP05zS3tfV1ksPSQwYSxVZlZUJl92ZEhDSGhZdk0oOThGU0JiV2w4KiwwIkNvLGQ0X3hOcCNDLGA9NV1oMEhkeFFVXlNgfmcodDsscyN2'@;
put 'I18kQlNJbWtUeXZ6IyVxSDU+TS8ldGs3VkYzT0FEQjNJeipuW3ZLNSRmQyhyYz88NWRMNSZ0JSxnLitROXgiaSt5WCg/NF0lWzEjfFp2bWZBIU9jLzIzeGEqfWdNP3svcyVdZCwwMTQyKFtsOCElclBYKCNOb2Q3PjUrKktXTTdwbk8ySUM8YDtgRzA2SGBYSy5aLCpDYzopSz1CSkN0b0khWUts'@;
put 'aX12PDcsZnM7M2hUVlEpckNUWSZZImBhIkBEMGpILktwIjVvYW9PNjVDeCNEdkNiRD1mUHlbTXU3LDFBflE2Pzt2UVhVJEB9el5kN3JPKE5ee3o7I3VvZFpGYUVNOWtkMGVsSEBPYXY5VysmNTVBRjZgc1EiNV9KczhIdnU8b3o0Y3g3cnNwcFckVyhMXz1LZDFDc2lGdHppaklsa2xTIlZsRnAl'@;
put 'JkNIXXRfNGoyTW17SVt3Mz49aGUpVW9iImpfPVdlNC5WQUBWWSowJWtsPEtNbWY8XypwKjVqbCYmbzNBVkw5az59aDFje01ObzxxSEE8bC4/NHZDeVQmKkk5IzE+dWx+elpaWzxgIiQrQ1Qudj9vSX00PWtUXjVqWzd3KjdNLGdNPXhWbnQ0S1BLWHxMLCxyRXs3V0Mkc2E9akZ7XSNwSnw9UUs9'@;
put 'InBnYlI3akgsKls8ZjAzO3ZHaGloYmBxWjQxVGlKM2xrcSYwaXJ4NF5aZjc4KjR3SX1afmcpRH52Llo9JEVoQlhkTEVlIkBNekt3dVV7b1hCdU54eDs/SzN+T18iYzYuKUhzPE55fTdiRVhsNk1UZCt6Qlt0O001RFk3NG8jfkYvQUY/VEldQitjPWtQVWBaKUAqKyx3WW1dRm8/RnM7PmYwUGQ1'@;
put 'NkxTeytLSXZ4L2l3SUhGOUBdMm8sOj8+U19tJGZxZX0kV2Z9al97MiFganp4VSxVbkxfYUVgfVRFPmFkZD15Wzc3e1EmX3guaDAqYSsuUjN1dWIvY2JRN0Q/K1pLUCUkZl1sKWwzYWlrdSkkQXdzb2QhT0NSfDIwVkF1WmQ2X25sLFo3aC9OPjJxVWp+X3smOVZfPXJYRCwlYmNUSypVR2l1fS8r'@;
put 'cVJoQEs6PE4lY28oPl5sbmNhXWIqOHQ1eTF2JnJkcTNyZUtQYF87WyUlbSVRJF1vIyRAZ3p9XW1qT3V7Sm5dMnoxZE9jZGkhO2gvNDw7cG1yMHsmb2t1IjdpTFBsfisvNX0pSnZiY3x1ZCFqN3dNWyojUUcvOlREMyw3X2g0eHRwJCYsKEN6Z3REW1VVfTVia3YhejpGPF06OCpxbSFMU1F6ayg4'@;
put 'SlJAb19gX1hsWT8jSHBzdTdhWSFdWiZmNV4uRUBubnRbUXBvbHQrRSUhcSU6Uzk2QG1hTzJQK3ZlZmZGQCt1JnZmbzQ4M2UmdE18diNIdSM5Kl8kU0c0YHt6LDllKmxbUUdANjF9O2hgPCN+SnFjVFJsIXoyIVJyJCNoS0ouXjhhX09iPXFVKT9AT18oZX4zUHYkZ3ZoQXtzfTV1OCFzdlFuNDAu'@;
put 'Z3l5SkkjWTYsLz14Om50W09mRUx7JiN8N0RjI2k3XkU9fCp1NzVweUloKilgZkJKdSRuR0lUJTVYbXomZiE1PEdwRE8mTldTKyUzK2c3eXBfS0ZAS1p1VXAxInlvdzRmezBRbjZxME1RZDVaLzxgeXVlKjsrSiJkNFpZUUAjbGZ2QyQ6YzthYiUkbXwraE05fihJWk93cEp3RndDOVQyLFh9fGVx'@;
put 'RDxmIW1fJkBOTSosSiVVTzVtYVdseHRjWWEuTGElU2dnRVIoS1d5VypFPCMuaU10RSp9aGs8JWlWQmA/W2BEI1EhfHdOSEk7a0JoUX1xXSlYRWJ6V0U7dksvVHA3allhITB+UW0paCY6NVVid0hgeTc3PkNvbH1vU1tWWzVpfFMuMHtTSCZhIlNII2IpO2o0SlhzLkF+XmgjRlY0ITc5eTxnKTI6'@;
put 'JGYqJElLVzl7ZkMrbn4hRm9hViJ3YiQvUV54P31eVFRPSGNMO1t5OzJZSHxRQEJfckRDXnRkVCosRy8zZzRnOTZ9JWtJekovTER7YnMse3c3U2dwand7LF5EXn4mSn1sXVVdSFhYZng2ZWlvSy53O1NNfldTM0Vdcm9tdHFha2goeD5LYSVGeFZJUjlPQm86TShxZkR1fWRVb05POSFNJn44VHBd'@;
put 'R0Q/Z3hwUCwpV3g5InFnQXp6flQ0PEN8SkRZaUdlSD9+dnhgPXdEbUl9dFtDMF5wYjVpeWkmRFFeeFFWYlFxP0h7OztbXSswMyksTEV4WVUiYDYsOXZTS19kSE5kVGo6XXpINSpPPzI2cGpJI2B5QCk/Q3c+eipxL0kpSS80LmtNMk0zLHZ3LjdVUDFVZHc4aFQyfX5iXm99I1ZGMkI4RnJpIVdJ'@;
put 'PzkjNVdNW2s6LzJMLy9TfXtDYnhLT1BXcDZvPW1gbnx+dExkaHBuPkp6ZFtGQ1c7RXpKPDhPdiJ+XikmSDUrU283Ol01VWRZY2BCdF9mUGdIPXpCdz4jV3FCUFZlNHQ7VkBbe29ZSmRIQ15BVSlLfU1lY1QjI0I4RWs0RnJUSkBXV1clLDR+aXdDW2s4Z31Va0YvNlp8dGwudEVNQz8pdWdhekoy'@;
put 'XksldmhbbkJqR2NdIyhiQ0ArPnlJZn1oPmp4PjV3WSFdRiF6VkY7YC4kdW5pVVVQPEZKKG1IaFpiIkpmQW5qajJgRGZ0e3YkRE5ifUgsdHBATlMqQixGXXxxXXxQR3YmI1EpNkVvRyQoRl1RcX4vbWkpJCY5SExNY2dOS19BQnpyOktPPnFBVXBqeDJvNShZTzxne3kjIz1pbFBSYHxERX51ME53'@;
put 'UlI1SCNGQSQxRzhmO3VbZ05dMF99ZmJ7PmxgcUFUOSRoIzldKDtCW24wdCI9NmFFK0JnQThqJWFgKWJiVDkkWnI8VUVZclouVE99Um5XezFuME9Ue2ZEM3BqQ3YhengzbTI9LklhM1s0WUw4JFN1eXcwXzt4fCg6dHEoKj1HXjRfJV5nfjIzWUYoLH5mW2VJVnZodE1yRHdyfiN1VH4jTHZTXnor'@;
put 'IkJiVDxNJlNbVDAqVnwqKFFiSlY9RyF9NUF2b304JTlUaS9Rfk9rRU8zIWNHVj1jfSlNT1shcm5RRlM1UGVLelI7NDpEKHFZKV5LVHA8fihWWVZJKzhMOUY7XkxHKkZOIXBWUnVQPFJBNGI2TTQ0SSI5UiwmKilQcURyUjtfUiQ0QzNSQUc/Tm54cjFWb317d0U2VUd9WTB7XT48bWZzLGVHNHRD'@;
put 'TFVpfHs8KkNNQ3lDUChmR15ZTV1oeztRd2olcV4qTkk0dGRjZyNsbClBQF5GYkp3QURPYDM3YHE9e3VsOSY9NGl7IjxJZ29GQ3whWSYqUFlOfX45fTFwVnJQNGElKHd3eGliMnErblowY1d0d25QV18iW3B8YnJjK1Z8V3t8b0Y9dlVvR3FvYj9RZWYzYXVZSGM8N1lyZDROe2g5JjBkeUVNeXsy'@;
put 'UEpXb2RPIWE7SH50Jj9WNnRjOi90K1UuQm5vPXEoNmxDVExIQVhAZlp4Ki9GV3JEdUlsSVBPTXBFWG43OjZQOkcwNlY4ISVmKGA9e1B3KCxtJlBJYW5bLyZyKz0za2A/Vzk5KEs6YElhSlJaLnxZOmpqPXhaI09nOkw2OSQ9VkEmVmYzclM1ZHxedGM6Ujg0S3c3LnN1NlJbMlpXbjdlS2J2TlZH'@;
put 'NmpIIjc2Mjd4dmFFajZyaW1nSFRLMWQ7JHBOS0UjZmUmPU1Ocn0qa2prQjV4dUI9b05LJkd6Q05fKTY3LClIZX1dUUp0XntSUCkufnVJI3svMzkwY1VEemhFd11WLlRtUkhOeWIoTnplVihRfDxzOUV4WltbQlFNMkMwbHpbfl9wT11tUi4kYEZsWnNZLkBOZW8qNTZdekVPIWgmVXM7eDJFOV5Y'@;
put 'RnU7UnUucSVaTFtVM3AvJU52bXMmIjNybVNAK302KjE+YXtFP19zfGxTNHd7LFB5T2h6c0R6fSJYWDoxd0BUPlpje2IkXXQ6SW8mUUw0VVUub3BRWXxYK2xbZ0heUFR7JCxxNll+ZC8meDQ3I00yeTBlUEpQcjhgYkZfKWZQe3loKCE6UDIjK2tucmlAUDBdTC9fWXY5KV92PjxhSVtAa197UCFT'@;
put 'NTBfXUpjeE4yXj5WS1FJLEZHa2ZLMFBAai5eRTdfOFtMUDMoLFBYRVR0NVZob1pUN3AzRT8oMiVdKmxqV2VCYClZd20/eip9T1t4X1t4O1kkejYrLnp0RzswI0FNXytlPW9NT2MoZHpZfnsvTUNEQmJgW2syKmMiJTZUJlFqeEZlQ2RyeF5SfkthelFqZzpyUS4yQmxTZCtrLGJsdHkyYEVyRTFN'@;
put 'MzU0OEZyQ1IpM1VhRDFVXS9PP2p7TyE3XjE3W0VeIiZ9dGw/X3xPazpoblI6KV43UU0peWVxejBmOWZUWSMqdmRfNy9eUCFublp+WXRucC42a1RAeCVxYWYqUCFrL3g5Ll9FRUZJcG52MXdVeGcocWljb2VCdFZ6VGhHT21YTDhGNH55K3YxU1ZjQ1VVUnB8blBjI1JSbkJSTz1wdHBXZktDIilG'@;
put 'bm1mZmlVal81SkQ3Q0U6PDsuYE5YWXRrVXR9SWouVjVlbXZxfnoxdihiWTdXTCZvMEZ7O29gJHx5eilRe2lyOFJNSUlBbTZVezJ1PiJub3AreSFtciw7SzA6Yz1Kdj1pdFZ4JnBlfWhjJUchK3AoaHgzSGN5IltgW0V0UD5yL2Y1bkhIT3ZuaEMsIkw+KFV+e0h6ejIsJXh1ailmVEk7YjElKGAx'@;
put 'TW1ZWn5qfVhJfiZFbk9nPVt9UkhUIUosQUwufm02eDBibStOczQxVnA1WDxiLHMiP1drT3w+PzZRU3RIaCRfaVAoP2FRb29ITEZVLzlXWnckKGgoZUBiaGBCU3pxSDU5UCJ6OU8pOil1PD55OzNreXpRbEpLemNhbW5nImd7PEs6XXkvJCVgfXRtMDQsW1F4ImB3ZDdJWSpTPilQXlNue0xTX0xy'@;
put 'ayQqKUtYRSlhcV9wP25dczxxOEIiMGk/JVVJWkxFNCQ6e3I4UjBhL3chdzouX3ssSlg5UXdHa08+dSFKV2RSYCtDQU0/W1E/cjYpNiI+JmlaKXVKbjJjTmJ3cXJRWjVaQ0s3MzFBLyF2QT9QQ2UhemxIcjErOlE9P05hSEV4MD1DQ3lsU3YuTXRIQHQySSMuM3x3OFZlXXd1ZkFTR0k5Q2Y2OnVv'@;
put 'TGopNnVIZEBMZ0UqKHZzdXFpSVsqZ150XlBhalFfdHBYKy8vQ1pTdVdXVUEyNDV7PWEjcHk8OHAjfUxyQkcmV1JGJWcrYUxaXT4lMyhJZzBgc3tEMVJmIiFLNHNuY3RROlUyczVaRWtkI3E9bWV3RnkyKmosdXxKR11iSCJRc3YqWDwmb3dYfit0P25raUcvRTZuWSQpSFJERDlwckZLMCNIbW05'@;
put 'ayxEQCFSQXt1eXZPQitPOUUhZngiJS52RX1GVjtee09leSJYdlpCNG5daC9ZOmkjOHt1ZyJgNjQ5JH4obXcyOG5uIytUQ210I1N9WzlrIWE3K2siPl5FMTRIajsxRHd8cXE3YmldSDZRJls8ZF9AU2Z+JGNbNTYsb3s2MFBFMlN1NSMmR0UqZVUyQ01qUVd+Q2wre2NaeGQyaEB4c1ZBOFJ1KXU0'@;
put 'KEQjRihbOXZyUyRnZSJZY0trX1FvNHBtZHIxOWx9YUpGKkckUXZlPls2VWxrQ01Ib0MzTm5DPzduN21RIXBHcUlFKFA7OyQ4KkgzOD0rRDlsa1psW1hIWjZVVTUyMkdLOSNdRyxqdy9HZE48NHhnWj9qZ0hATHt+NDQ9TUhrL250WEEoTWkmZUcpW3F9VHUxNVtfUm9QLEQ/LzpefDdUIT1UfjFs'@;
put 'fl9HR08mMCYrWF8yWX1IaEZILCIsfTtJNXAjbWZGPXtZdUJFUz9ocnIrJV17QWpkWWtNRHlSLCkxblM+Omw1RWRZbkxOX2YkP0l0bHxGcVFkakwrYDVzeVd3MTZpbjFbcmZ8fCl+YmdJfDVALkpGV3h7aiRLIiUmYVRuLHEiOU85SXFlLG1WYnU3WVEqeTdrUXNGcDdPRiJPYDIiWW0sfTk3Tm4p'@;
put 'KE0/U0ZjZ1JkSyZDYDhVWD9NZXFkSDszYSEpYX1fUy5xU2RRelRuRnwzN3xbRGs4VC9jQ2dTNFQmY0UpKn5qb3NYUE84JHZxVSMjP2A/JHo+RVZxaXlVaTdqQ2FPQ21nUXg2LmowPXFQemJrVyI/fUZAZERfOThCcjY5T2ZeW1UwOTZkZnJzPSM3Q2laanAvbUJSOFpZLCJzQW4sRVpkT1VvK3I9'@;
put 'fitZdntTOGlIVl5pJmRXe1spUytqfGNuJVB3bmNkLmNQRDhqNiQ8fFg8Qj94enM5TE9ZaHY5bFp6SkFzKzYhIUBMa05oX0hWV2khbEdvb1pPZSw9VTsqU1U3WjFpQyYkb0RMYSx4SnhVKERlSmBhNF08L0suaVtJPCFiLjJYOVdmfUlrWF8/XzdiVk1oT0JpN183Zl5hLGNGNkBleTkhSUQpZyMi'@;
put 'TCl2OFVtVFt+IyY9TWtEST5bNSpFajhrYGRzYns6ZVUmfC9daXhHdV9pJCt0MmBvPzpkPzc1JG1ZTW5aS28vP1V0VzclZG1PPUVDSmVdTyRvI110WkUxL0N5bjNeOUlSVnVjVVd1NUUzRHN6Py87eDokdExHMz9MPlQsWkpkN0FVK1BTJTE4TS9eOXc0IWlRKEAoRk1ZMUh3fXRnSkw0NDhtOFd0'@;
put 'IzlKbGtlaH5oPFhHeC5PKl9fY3JofWE1Tk02ViNzbFBpIXdgcmFodVdiNEs+LiRmKDl4L3RUZFEjJE5YOD0pWi8vUSM3LCMhWTZXNilkXWNJbyt9KEI4eyRKVyFPM142cXd3VjJiRWNzSmlZazlmMGNXQStEIj14bD0yOH1ET0xeW2dvNFt8U19LaHspTUhzVWA8M2tbKE1TZSNwXmoick5saSJM'@;
put 'WSkpQ1ZUK0k2cj0zbTswZmVDMUl5NiM+ZWNrIX5AYnNVa1MveiolJntdPGE0Lm9jb3AiNXExKzV1PDF6cW8laltSZWgrdHNAYEZGRD8qJXhSVTRFeS9HM0Z6JV9tOT53QCwwQ0V7eCFmZSxSfEtGOEckcHxdWj9tMSo7ZUt6dnojYG1RaGczbW59XzBdWSJKPCsqRkdCVltdXkZOIipXKyJ5ZDhI'@;
put 'Rj17cTNQZ1YpWzEqVmZlci5eYEtXV2IlaEpyMCtCOm9dMihJR1d3cWF0eW43Ukk+PVFyMnppLChXc2ZwfDVoJlFNeVEoX0t7Y2J+TmcpQCgsYm98SGU0dUYiejN5c2p0QkRSL21hVUtXI1d9ZXJ+fjFafCJWfDlMMVVUSFYrKDwlZnh9UGRkL0g6MTNscVFvLyxESzt5Okp4a21BUVZVPHluczcv'@;
put 'RTMxYTMxKkU+LFh3NGU6OWlnOD1jbHVdOUxQX1MqdzFkPHRMW2FPR0c6ei9TKjZscCNraS8zX2dHRUh0I09gU3Z8dC9mW1VPcT5RKnhWeDgjMH1USlhJfC42MSJ+empeKFlKbixaaU5Zb1ZMZSlDfGQoNEJML0NuUENncD93YVNFVjp2JG9vOiNld0NKZj0sUUtZSCZMWHhgdihDR1RiSzZkWHU5'@;
put 'fWhMSHA2TH5oL3RyVHl0PHczNzwoSVNtYi4wV0dMWD5DR05mQnF+UkhJeGV8R3JPK2luVU14Zj9HcE0/YltJS3hkUF18IlZKPUx5REArISw2N0UrfmJyL0V+aCFHQU9bUmQkYnFAcE43NUN3KDFUIUFebG1wLD0pbC81Wkc+KnAyXXM5OlAmIT92K115d29EbSQ1SH1sOTAyPkA2UTokTH1oMjA8'@;
put 'ZDhlIWxWLElnUV5RWWsuSkw0cGZKUXdJcVVyKXtHQUc+OShLWVd2Zm8qUzxOOSYqVnM0d2JEfm5yWlBYfDdjaD03eWNCfHZON2pWZCUiISlzPC4wXXZHenA0WEIlajM6dGp7QCZlT2xMbVAiZ0FNeFB0bDB1JUhIRUMrKWdranElLmxjdVFVT1BPUlF3ZylbdXBCUHwzJFZXMT5CLHMzY3BVXiMm'@;
put 'X28uWSwuaCVZIUY2Ul52KVMjWlJDJWZEJTA/TTAoUzw8MiJMYn46PktDRi5veHxCb08/bDFudGdVVzA6fiUhUG4wUzlDfWNmeDxCcEwvcyJSXy9jNmImWGQhKVAkfDhZT1dkfjFLO2RWPSJIUUx9ci5hYzk2Sndoa09MdT5PKXIpPDQ/ZUdxQV11LHB3MEVaaSNrRU56P0R9di5iSSV9OUVzVisr'@;
put 'cEszfihlTWo/SDE8ezJAUTl9N0JbZ1VCRiNdVzNiSHlpR01WODA6YTk6Ul0kb3BfeT8md1AqQW1WP1RMI182M1doNEFGUVZHRE96NXFFTlEkYTc3VTEsMkIvbUp4SHNya3ljaSh6TjMhTU1OOm8+Izt7Lj4lWjpNM1B6VTlCWzZOcmcidChfYDosRE55STIhZ1h3KX49KV5eV1tIKDdsJGg4UCw7'@;
put 'M3UjNnE8WjsqZFRVKS8ifCZdYDgrdkUoMVhPWmZgKCo4SkorUnxHRWwmSjIsW09xSyk9JUkwZmtaRTtHZF9Ld3JVW0FBdSpzMkpab1c6KXhHaSx9OGEjSFldT0JfLzN3QVNZPHQ0I0omeHtHSGVyPGtndCZVO0NQT24rXSxOQm1meCgmRkhPNTs2dForLDx0RG5gWTtzcUBtWkpaUz9qSz9+OSlt'@;
put 'Qio6dEd4d3B3ZENPXzJjWFRwfnF7PyNyJkNIQns7NDYkZ3tpQGNlYXV7cF4+JHZZSXN+aVFuRW1YeDdiOltGYzdJZHB+dDYvJU0vMFt1JSkwOlhZd3NOXy5GIWQmS0ZKSS95XTtMJFUqVHF9Nl41WjxaUms7e0lzdCYkU1RITFk7MGJeNmk/Okh2XyRhPmFnfiMmeXJdPnklZFFpQjdELGVFW25Y'@;
put 'WHlJUkBGb1prdVApT15SZT5RemIyI2RFWnk4SiVZSlROJVVoOTE/W0tRTElANiJyT2lMRDkuRX14RG0qQ3xzP3NBSVY2M1VAeERrPE9pR21FPF1RblN6LG92KmxHdy5lSCxFbzM8fUltdU1aKjZuKURJdmh1ZWIoLzZsSzk5OVh4Sk5BXj5KLCMhVUtGaVVeW0F5dXQ0Sz4+aUtjd1chU1k2V35T'@;
put 'WHgwbSE/LkI1L1JxZ2VOJiMiLyQheTxZXUNZWFI3IUx1RT1pUi9kclhGUTVjc3w1PGBsSD8xQmMrd1VfUCZdMlNHVFNXcCoqclVxTCImVE48Ql42eCs0Y1h2VTloWmBKQUNYRGF5aV5XWXs2Qm9BNVtOcUhHbVA1SkBdMHw7KE8+NFNTOlFwMnx4RWZ1YU5DUE1hMH1sMjh3WTNQQ2trZSlhN3Ri'@;
put 'TWUpanh7NUk2VHV6Y35rcSREXlJGNT56SUp6b15iYS5eIjZ6X1gmeUsoPE1YbzFpVUg2W0tPOTxiWFVnImh+QFgkYnYkYD4kVWQ+Slc7OmN2d3dzN11QQ1FqTmBANUxSZUJ9dWtKPXM4RCZRMj5Mej1FQnR1JC53fFJ1XTFeUHB5LlglQihPZWVOZ2wqNjYvaztnQCVpIzcxMXxkNU5JT31iRDYp'@;
put 'b15dXWFxNWJTQFc2STxAYzp6ezRubCskPEklK3N4MTpqLlF3UkdbV2kmMFRsdHV3YkMrInopcGlnemBEZjRqYmBfMnYqSXZqXix5VWMwe2ZtNTgvbzx+SCZeN21uZ1RtSHB7R1tPYHwzKjAxMDU7anh3P3Y1ajlsV19NSW94LDlraGZmdywxQjN8YS5mVmo7T0Nkc1pGRUw6Z2UhPVZKVnw7cTA7'@;
put 'WC5rcnxBQCViS1Fna2lVciVdZCg3IXFuKUNSeUs+RThCUzVMPndBc3dRWEk1fmI1SWdxfmV+b01oQ0xFT211SlgxVSkhaH4oQnQ/R14/cXUrZm09fSVYcV1SRF1sSTxuI0t2T1UqOEAlcDJuYXF4aikvTHtIYTVed1BAbGI8QSpfITxyaGYjIltQVUppKnlaPjxCW34+MD5XUWBnJGFtI1tuOjRH'@;
put 'MiU3dGglOnltOjU5KTUjZ0pjZVF3Z1dXR1tUVHFLVHdZWy52SzwiVzp7Q0Q+TTFdSztqaSZdUmp9R2gkTmYhOU5PKEhON3peXlNsKEFJMC5AM2pdMS9NdUM8UmVEPGRTOnFRUTwzc1NnfWkuLzVUOExOQ1l7P0R0bFhQIzNwZFdvJTc7dC4pOixIcXdOR3kwYFI/Z0pYYjppJldUPl9yKmJZWH4u'@;
put 'Z353PWAkb0Z4Y1JdRVBOQnF6LEt7NFJmTF9kKWcoTTtkakRzayQxXmE0dys+VmIuSTJVUEtsVSNGR1RISz5eIiRbVmg0WmJdXXppSHNlZWVQXzRHMzF2fk42OmRfTSRydm14b2oqV2ldfCxjM11NTWRSUjEya1FpeXlLZjUwK3JwbFhkUCRHTyhmdllwbEsyYnthR0tkXkYrUXN1QFNiUzk0SjVx'@;
put 'dnVlbXkuWUMiOUdjdTl6KDwrQCpTXm8zVVIxNXRlUDVSI2liMC5WZHFCX2heWUo/eChlLllrUnBnLklbY2ttamwmWDNPel1eclk9ZkxUQXVlWDtoJj1QW1ByVl1WTEZFbCYpam1HaEo0NFd1K3B7Z1A1M24oOjVVfUB5OCNoZDs8UjhtR0g2ZUtjc0BbPU1UZWhnSUVRQkZ5ZG9hclFLbmZpRGZS'@;
put 'WDE9U0oyZS9IJTQpc0d4KEpNXSpJNTFTd3Zdcn07PjNxXStaRWJ2cn5kO3JuPmJHdWk0I2tTakQoUER9ODAsaVhsQTckbEpsLFE6eSw1TkR5ZWAhPEBJVnVnKDtpSlgwLzRUfE9OdV80dEJvaDtrQiNZU18scXM2OilFfHJdQkcsJD1CV3YmWnBoeSs/KmUwIT5rO31AXVBjZis/MHxLYmd6PVEk'@;
put 'ZVpCOEl9blV+VkQ6UFljcC5ndzkjcXxOMHBVaVt6LnZCT3QwKEdrYU0pc1VrKzNObkw3N2EvI3R3PFE8KzhTYzA4S0hXV0IhV1k+anlYU1lNcSEzQEBxOEJOOXBNPHV5Im9zaHYjK1BfUEE9Vn0jeSRUX05qTDs8aUh6MkY+LkRnYSw7UzlzRUwjP3xtUGU0T2ZBTz9RTl1KUTY/VkR3cixJRGc3'@;
put 'MkExRWhodV93PnNPQ2BAOCEuOzFZP3U8Q0xnUE8we2QlOTR2c10sQ149Rm13KUMuazRjfl1XaiIqdGxib31WXSxMYypHZGgxdlVOMWVlcyFDSGApV3ZeLjhmcjVPLD11QXo8OUF2I2h2SilhXmF3X1ZUb2V5bFRAcS8mQzVWdjFfMTRBdV5vWj53QT9QayEmPF5YYiRZS0tZSFgoZj5UREJoNT9W'@;
put 'Pm8oMm5nc2JIPzJaL0ZAP2QzaE5VaGAxTjRaPmJHSUd3dl43My8uRDdoT0NtYStzViEjU0pEVmRWOF1mUmR4L1B9KkM5UkRfNGBpP1ssJU5kbj5MKFJUMzpKaS9aeW5Pfn54bWZLNyxxSlFWfFYwLDNGZFJhdjkoUHclWEZINE51V0Rpei9nUUJ6bjhKd3dyREtHUz14Wzd7bmNYciI3e2UuamZw'@;
put 'ZWJaeXcrQ3VKYkxjbmJSb0I6SVFOcWFHVX1bRDFQWkV8ekdLPnlVUSp1VmVEYiM1Vkc+MT8/X1phV2ZOO2gvJTUxRDJEPXp8LFAheWdpeGd5bjg+eihnVDQueFBlcTIyTVNtQTtpPGs0TVhWPkBaXjJ0e3hkfFEoXW90ZSE2O084I0d0KWMxYWRaSyNhTStKYGFbUFR0OGJJVzdiaCtPX1V3ZTZL'@;
put 'QEJoYERPI0dZP29+ViJJN1NDQVpGbX12UV5dR0FnJSFmfkF0ej47aTY+fWdUMCx1UiVAXyVTTkhgMjg7RD4oZWYyeXc3dCVLNVJpQXN0Lks4PDdxNVEwJVBhfjt8O0poUyNVX2FAeG1LUkNYcER3Nk53MHNCPVVSOip8PmtxJDB7Smh9b1l0Xk02d2JYJXN+Z3pkRi58anhZJjxXSlhRN1ooZ3k4'@;
put 'OWQpc2wxYF5hbzU2bUdvSzopOmFeZlN3eGEyYSY3aT8vcFNiUnc5VHQsKDRfZ1pWdEM+STtLXWw6bEpzZT59ZXk5dm95QUdpNC92aikreE9tMElqZipZaVZOUnpqYHM8YzVZeHlEekV4aSIhQ3dfJkU9UTFXN212e3Q1NWU3bjVId3FWUWU3QC8mQmZ3ITdiQDM+OnoofiZLMFIsZS8xQ2o5ZkZf'@;
put 'QSJ7UjltR2E0fWdPb18oPz4lM0ROMytOb0BIMyJoaz1ELDFwUCRCa0llRiVnb2FSOGxBZmhONlBTUUl0JkZVMW5EcjtDcGgxQnomaWcyN31FSW8hRSJPSl5HRytNWX0uWTdxV1puaH1yZSlufjpSLiEpXVhJQSU1OkkkW1UrdDlYTzsyJEpifSNKRkoyMHB1T2FUUVRuX1FqZlhrfWh3L3ZJd3I8'@;
put 'Z2B4fW5aQmEhbkdya143ajp2O1dDeHtDKn5BNDh8KEEldWRtcV9wdixSWV8wRGU4ZF5qTCxIaFYmcWdwMj9eSGJbKHclZDJ9KWxDQ0R8aT02NDJRNHZRcVpfYlk1ZHtSektqe3ZAfTVzTVtUXURuRDlUK2pEOUxrWyM7Nio3VywwJWZ2e3Y+X0Uldlt6Py8uP30pNk1uVWQ8fHopcSVLeEZfYXsw'@;
put 'U25PRVp4aU12KUtOfT88enBLeSEmRXpzRzFyWTxDREd6OH02VmdIU1djP0JKYzgxZ0tmKXhjRj9QOnZ7MjklayR1WDtLWW05NXledVFjeHJ1UGQ3JkVlUDdRQ3dmRXZGYW92cTJocXlCSHJvNDlIJCRGTl9Db147UUgkdUVeZzBqQ3gye0E4ZlRHIzEpUmYiP29EO249LHlCUClVPFVBYmVyfG54'@;
put 'YD98XyE7LEg8eD9qOS9XLk47MHAmUEtpaE1aQnsiSUltNFpZIix6UEM/Y2MyV1tlfGJvRE5BeT0/KSE2NzBQYzFhM3dkVGVNN25vbixXVCZtbjYze31KW3VrMT0iaSl7Rk95TE4rdjQpKS4+LkF3TWxmRG4xbyVbbmlkXX1lX3FwPnBZVEdaa0ZIKz5mez4/MzojP0FvPXFVZ3pscWE+LiN6SjJ0'@;
put 'aHlsaUR0Pkw9VXgyVmZ4V2NqQVAlSHs7M3NuM31JLGlJdTxTd2c7MCNIUFNVPWNbPnVVcSRaL2VnOSo/MlVpPThISDJYeUBHQlkzbEZBM1pge0Y1fXFAXnEufXZ0SS9kMH5xKWgjMVpNUEJoNmYvMDQvenFnfFBpSF8yeFZvdHwwX2ApOEBASHJHPXBxUy9qS3BNejh8NDVKajBaenUkV35wY3RY'@;
put 'OX1CNHNCYHttOyhSQ3ExPXB1KGhFbyR5ez0ybz9pcHVwbTo3V31KWFhTWklBJX05U0N1cFF1VixYcGRLczxBZX5LLjJUaE99Q2pHWUc+T1slYDlmbW1hfGlnKDArbmsveWFTIjlePzlRTT9aJUY2fC9jTVMmWV8pNGtVJlhIRXU9WDt9OnJ7KGh6MEYhK0ZnOk5sZWAmO1UxeHYyTSJNMzFDWzR0'@;
put 'O1lhYlAhZzE+KUxUO0h2fCl0fXtWUiZeZ2htUjJ8Wkx1TkZTZXBrZFBDampTNVkrYVg4PHIsMGskeEY/eTs7QktfZ0h7ck96Ml5OX0daekg2TzF6UkRiLktvI2d1eHM7aChyQFtSO0ohOkREbUp7JnNmKmtuOXtBZiRWTkVPY2Y8KXx4dyg7PkBqRGpzdnh1TU1BRjJlWVc0fUY5dlV8Vlo8YUlU'@;
put 'NnRobHxkNWQ8RHVVWz0iQykoOEpta0ZWMVN+K045WHZsNWRrRWNqX3l7aXNyJXx4Rl1fUDBfQF1iVThNUyEmPlVAdnxgKFB0RzooZixYWmkpQTF2U3BgV3lWSzQoOjkxTWFtfmBMSE5NWH1dWEpsMCtZWD0vViUsP1Q5cDdEPUgmUXdMeHBRLEY6Qi5tak57LHwxT3szbilMOCh5X1FQNl5SQn0w'@;
put 'PjV7ezV3eCxeXyJgdF0qWzFhVCkpKEBUOkV7ezZaeEU/NT4zVkJYcmtbRj5+MVAlOChfaGpYJkBgdktDTD98cjssOjFhZWJtKlk2UmxFVzV9eiN5WUhPITZeUmx6d00pRzwrYDd0bE95Pn5ET0pYM1tEdGVzbGhoe0MlV0d3cXtKWnI2YHVNYjRQdHshN0ZWXmFxUmhgJUBOfVJaYyw+bzJ3I2w7'@;
put 'eVR0XyM1RWhSR35GbX18UnlrPCIveWdSVS8zfGtMNGgzX2twcVlEeXxwWzpBclhLTUhZODZAfEQ8InxOU3QrekswVCEvJkcrIkwiPj9oP3g1d15rSjhvbXl8dWA8V2xeSl4zMXdgWzxxRHt3LGJyV1dZUGZoeVRiNTtzciJrLEVJSy9NeEYlanhfOHFGIl5yJlo8bEklRGddMCZlaTtzPW90ImxK'@;
put 'V0pYckZwZUZNe0BdVlAucz9AVnl5MiM2QE57SmYyPWhLU2UoaCtgK2AiP09jMCEhNDMmYjdLNG5fTntrTHwlZiFpO2k4d2NBOlFzSHBFbUZ1RXgheVVvUUQueH5TIUdIYkQxSXZ5YCV6Sj5ZKmlXbzUybEUicVRPMFtGdCNNZnNzQzw1cH4vUm1EWG4qWyN1fER8LEcyRlAoZnZ2bXFdWkQ5V1pP'@;
put 'YiF4aEZ2Y2E6QHF+aVNXJjRbPnRxMFQ2IyRZSXo0Z0M0Iz1Ddlk5KXQzSFJEIWAmZ1tzYmFee0ZoRWxzMH1pW0IiIX4oWztKfFZjX1gpT2dedjg+VXkvNmhLI1BLcTF7MTRFel41WHY1dndITkYxSnI0UzBodGdxVT4ianc+fDtTUGI2fTs+d1FaTVI5Yz49O00sV1IiN3VaWWAkeSNnLiY6aS8+'@;
put 'WFd+ND5YL1lVZVA0ODo4PF1VNCpeV1tmbFVaISFfdUs1WmglL0ZgKF8uW1F+b0chSmE5IUh+T0VZZ0Zdak5vPkI2cmo/TW1CY2NzdzAlJmREXnQ2Omcmdl1VIlFCclFuPmh3L31GOGRRRkIxOz82cXJ0IU1leG1LKyFhZyFzW1Z3NG5HbCFPdiJRJU5UbDdgOChVVmZNYj45Kllrckw2U2ttS05e'@;
put 'bj1UWHFgUmQkV2V7VCx0b1ZZQ35jMSp5NGU6KTBKMmdHVkRyeHlQVkw3eDkoXURQQy52VERlZFByQVhSM3FhZEBOdTN7fS8lXj1XeVI1QFs/Yzt8WnZ5PkU4UjZ+RDdiZzdELjNMLiZbbjo0RypzJFd9eEAhPH5kYVg4YzpiJltPVXp6cUlLPzJnOyE9ME0jO1YrJmdjZDEvRmR5RitYTHM+fnFM'@;
put 'fjB1bGtxcSJLKHtYPjBIWEp8QyR6dVd9ezNAKSZSPXVRRDVmZ31jZihgcjY3bE5ZakBxV2ZoL0taPCR6OSpZYzw+b202N0UjTTRZOFV1OlJgOHFWaUZqIk87YHlIeml4NX1RMmxQZD9JckY8M3FvQWdiWDhDXVVPRHtwOjRpLkVIOUdYOCM9ZjN1RWc5cWxmcVpmdHVmYDFpNVJYMUo6O18+YVlG'@;
put 'Sk4hcU52Lll5NH4vKFE9JHgrRz9LbWpOTlljIjtSNEB8RiNfRkNOJiRwaktMeig5Km5ZWXsreHFvOlU+Tj8wTDQkPGoqX2hWbzsyLzQrYHA5TDVdW0JDckdhX1s7KTJvYj51PlIwcEUrWXA5NWFyc3pMNl06T0w2Lno9NXIvcHhmcFshISo5RkBHVl9DbXk6ejg3Y0R9YHVJPXl8Kyx0TENBYWgl'@;
put 'PjFxcE5Le1RLejFgWnR4OmxNST5hJDBiI3pKajVhRUIzb3lQUTFhQ1FzTWZYYypITUBdfk4+NCRpfmlKViFRSXx9OTMobSQmPEM8IXVLX2g/e2RxPmc7Xmd2cGJDXSM2OkNRYnpZVllgOURuTjU+KyN6JUd+cHlgJUtzbS4/XVlja0hAK1Z+WVd8I3J6PStZKiphcnU/IjFZOEs+QHc0I3xqdnh3'@;
put 'SzBqUHlJZDMwKTBrXUFyfT03VHhANV0xfUBZQVJAZWhlaH50eVkpKkQpUUF7OXcsTDgze00lLGUsfj12Wk4zX0FLbS40IV5BWDM1WFIpX2FGcldrcmdbP1AubDluS1lpe3xXNGRgU2lYOX5LMChsQSVTa2wkfmxae0VsRmdOZU5Vb2YrNkRwV1AheTt2WHlzM0khQWJUdDlIUDpWbDx2NWpZYD9a'@;
put 'RyxnNkR8REdzYUtLJTFrclJONkpVSk5WfXAjO31mOVc1dCVqWld0NG0oN2pZRWpwJWxCZ3loUlBZLH0uQzZkQDZqSXJkaSNsUWI+IVE7TyV2VDtDNn10SHMjfDdWMCJQSklxaEAldFolRW90K30zYVdON2B9P1FERkNmMS9MYkcqZ2NYe1FqWig8Pjl8ODdVU0pwbzFPaXF8MGFwWzF9LFMkQ11T'@;
put 'b2MkOkNGQSxAfnRxKmVsTlszanZAazcuKyI/diloVD5OJmlBI3NgSUhOWFJrNU0ieSEqX0dHRlJRPjU+TC49THE4Rn05cXdUU1dEQysqIV56ZUtsTXElKXh8MmUyZkZ8e28rW2hAKEZ5dj9wV05VVGI5dDo6X142WFdvLjRSPUMwMHFjZSt3P3x6O1RsRGI1Z3Y5Ry8ibj9mR2l3RyJNdm19TV14'@;
put 'Z3puK1tRUGdQUFVaKSxyU3tROzszbVluIjlJfVlMUXZ3VmVsSz4kRXQlezwxQE8ja017Xl12O3QrQHR9NUZAYGZ4cztCejBDail5YEFPbmlPNkA5XzFVS0RZWFBfMVpkZH1XVlFVfmRgS28sNik4bjRNZms1ITFHaXMkPy91bHNrbytROy9NX1NROilzWWAxZiM4cypuOFE4eTZuLmpKeCxaWl1P'@;
put 'USRSd2RNcCR9RC9VdUNzMS49UVh3RGgidVRfLCplNkF3ZSRraVVeKlhbaF1fOjlHTmdDdzZeNXcxNlhZMFU/Y2BVP1BkNWRQQGlIUSYiY14hQ283dG8vWVRLezpmRHRLNi9XNmAsQm8raE5bbzNHTFpNc2s1MVUrbGM6MEkuMzFFRUpwUW1OTUx8LDFKOHl4LnN6Wy9sW19SL05gZDIwLmVwVXVO'@;
put 'RjZldF9tbXgzeFpbZlhpdShDL3o2c2QzJmR4Y2BvJm5BIXBsU3ckWWY8T0RvUzJbMW9Gfiove0pudFhHTGh3WDBdSVI/IUN2I3VTKnApO0BBJEokdyx1V2d2XzBsI1NWQjZMNSkxeCp1eTtfez5+XV1hcVc/W1dAJiNmOCR1VjRsKFc7WkpIPGsjMFN9WEkxI2xnPz1yPCpEQ0oyZCwwJVtRczJ8'@;
put 'SUI2XV86JmxedT93NXNyY2VHMWJeWDI1PCh5bHsvVmJoaE4kW1ZoOm1fayIjNTVlYExkRnFEPnhxfmldfiRjaXw8eWN7Iz9FQH11YXI/L1VVQmJOd0BXS1JDUzs3YmRrbD4lN0VOP3dSOWVaWHg4IUd7R1lmaU54ZyFYP0A/STxmOC83ZCRYWGZJSF5JVyNMcCs5ImFSNHdXWHZHJD4rW3p2Rjx2'@;
put 'WXw1U0JpelJ+QHF2ZVt2c3FpQDB1LHRyYm9XQiE9WFRWa3BQTGdHYX1sMGg4UX5majtCUnN8InJBPTI9MmtiV1FuIjYkKUBMSXI4KHIjcT97ZjNUanpsMkt2dkA2Q3pSY2oqfjBuUWsvNU8wOiFeRTZMQUpWRUFeYStLJThzYEZ9Y1Q5NlZhTDtSLCI7PyNEcWwzJWhSfG51U2d2PXRRayFySV1j'@;
put 'OCZOTEh9NE59aUJmdjRmZW5UYiNMIjYiMUdOUkM7bmBLM115OjpiI0dWLCY4RVcwOlR1S05vcTRPN1huYjQvWDRqUWxqQV13dVQ4MiQrOEx0MkVyLDl9W0hqQGlYSTlsQGNYfWJGTlg0bjdKKTZaQCojNWp1e3xjeUVDVlQ6akZXQX5PMXhkVzt8JGspamZgOytEVzYqWWx6QHF6PjghdHZCbl9F'@;
put 'VHIqQDhLe2hCQGpsRU5RSi8qYSlXc2p2TTBpXlFtLjxoVUlyNGBaUlZkTF5fbzBOLy9vN3x2eTprVj9IaU4lXjB2d3xXPFpZeHNsTjV6eFd5P21NcyxYaVE8XjVTJTsvbjMoYTFEZVVVYG5QOE5SfX1NK11KWE0qaD5vIVZJcjQ9Q2MkIXdlfU1lfipuSSF6Rj1BTmdrWCxORG5ScFVuLD8yeFNz'@;
put 'YGpkYFRZXkRqS2NjQ1J6bC93YGtbRVNmOTdFVkdNfWFNZ2ppJCoyXVZmMi9Ea0ZyYiEud3J9UH4wYS84SDM5cmpOe3dSImBlYTIyQy4lRCQhYjdJdGN3UF5Wait2SHlYc3sxPWNoWTF6YCY+bGwjXyIsdHhzP0lJYUd8W1srTkIpRF4oKFtpK1pETzI+TU9CYG5FV2VnRGksPHZUfCROMURASktU'@;
put 'ekMpc3hjfEJNbiVPKDY+JH5jI2xBJkRvTjwuMy9CQ2NvTzljbjZJXzpXUSRJalBjJmo+Yi5IRWZiO0gqQlosfSxrKWpLZ1IjNSpzR3tiJXI2WXxBJDxsfmNwcDMkIXckQGxPOUF1PjAkPGpOX3VxcUt2I1tZI15EWWReYSgxOCx9QypmRV5nWlk9UjEuIkU2aV94K3t9LC9fOGpCb0JvbV5XX1Zb'@;
put 'dyt6aFJqdjVlc3d1JVd0Ljo3cCFwInlJe2U9XmMuRn00fntqfTQ7fE1gKkxFXVE0dGZqVlV9aTdSQX14Q312NHp5bz1PJiRNS2lUKVslODFGQXlZYTBqO1tQM0FoWSFbNEdubC5RMk9ELkl9UXN7endGcmlPaWlAczBlWC59e2Q9OU49VUMlSHcmdCw7UUtnekYrTnB4cUNxaU9nS0ZMRUp4PGpi'@;
put 'JnNtbltUdWUoZkFEWn1DISglRmBxVTw0aWNSPnxHQFdWdSUvNCYkTTdpYWZsQ3RQeGg2SnNwdXNzVyUwS2x6VntaQDg5IkwoLEc3TU5DP3thcGhoTT0lMjZVckN5Wn1VIzozJUNoIUpWfT9uZXdhLnYyMj5PN20yN3EuVVA2JjxkeW4uQ3RDV0gmNl8+amo+JmFPP0ArTjllR0FHcDxhYnFocE18'@;
put 'WWsve3wjZFpMUH1aeDVtcFs6Ul0jbEJ4JklRPFB4cyo5KCZwbD1YQShbPkMjbFd4K1JwMH0iL1Q9c1J7d0A6TnFTbixmOVE4a195Vk99bjc0NElPR3c+bnUrMHJrMEUob2hSfEJJYSkzIzVeaTFwcWVHIWlkND09bzVuRmheXVBxKERMXVIiOVRdeDY2Zm9nZVR7JHM/QkliKHxPLyQ1Lj4ycTgr'@;
put 'e1VRXmdVVyxtPnhMIylBUDwubSVoXzpDZFp2aVpSU1BhQmdgZk1gKjovIzx6OF5GUj9UQ1ZtN0ZWUUtmTWJ2VTZSLyEwemFOWWd6NWt7QiN+Ykl2WDVlPlcrOkcoelRveGdeUWFEYTdheUg4ZEZ+WzNxfDx2ZEROWWlgVCpIR28+cy4pLjIyVV4maE83OVAxZ2hyUiUhMnVhQnRETmFDaiUkRG8p'@;
put 'LmdPLCZxX2JUJHN7KEZdQUlxZDMwR1hHZGFGR2wpTlosTE0sd0Q7SF1Dd1s0NVBlbmwhfT5yJSpvemc6a291UyZjYzw9ayVlLDcwMmQ2Z2IrY21kWls7L1JUWm5AQVg0LEM3fCpudHhGaFVCXTV1Zkw4PjMxMyRANGh9anpaIztjX3ZCcjZ5eE43MUttKD1dY3ZCJShPUCZBdU9+aXplYEl2WyQu'@;
put 'XmxIXTcqVUxxWjdJVH1UcWg1WnosZiNgUypra0dzSSpQZ0NDbntpZFV0UmI+WiNZPGt1OztkV0srTn4uei9XKnpuNkFkamR6SUhadzU6PXFESkdyckA+VjJ6Y1JwPVZnZV5PKVtoMyV3WCold2t7WGlJLHcxXmo/JXIkaVVudlByXntuWTM0QEIuYl5hViRJM1p+L3Z9bldpIXk5UHRTX10oNk1w'@;
put 'dHlpb1B4eDc7fC5laHJAUjZXUHpqXndRcCZCQ206Ozo3JElUTCI0aDQpeV13Ril6NTUjNz9xJUEiIz9mP05wPEBqOGFgIl91OyQqRilJPkw5TEt2WUJpbm9Ld1hSQ1Z4OEkwaXRsZ31wZiU2WmlwYXoje2EwUiNVQCZBN2tuRkx1WSpFe1U/OlhXYzNrc1U4WjVFUVN9Wk1LPiZHOj5XO31OVDRd'@;
put 'QzspbzVJSl8yam5PKHAiZERiUmtgamxSaCghWUY3WXB+Nl1HK1ZMKD0sKkZ4JjBrZGlybkszNGJlJGovdDE0QS52XjdtNykuOTpHVy5eTV9TdWwoOHhqV1VYfS9scSpzLn1WI0hFUHNEbUx7fChXLy5xN2ssSmpATkNSU0lZSTQ8fURyPFhsT3BGXilCTiZ6UU9iQUcyUTI6LHFyUHs/ZlIiYmgp'@;
put 'd2VzSGIieE07Z0JPZF0qOEZ4dkM7UmtkWkZbeGBKakloXT5dNCIkdT1KKG9gI3R8Y1cwbDh1Uj47NFQvd0hVcTZQMHRQQ05pPkAqbHhdXnpab0hdVixPX3dpXn18Rm92Z31WWGBoSHxCOE11RFJSNCRiVnw+bFRXaGBCfm1AXWh3PlY9TlpwLjJhTCojUFo5MjtrXzU0STdrPGAuWVd9LzpVUXt1'@;
put 'RDh0I0VZXjVGZmZxbUZrKXBbS3VTbSElKDs2QjZXM2dJWTVNTyRQZUouMCkxQHBLWSpmdX5UKnk0WDBKbn09WjB+O0hoZihuSXt4UmozajVBO0pTRU5ZT2A/W00wNldHbXApYVdFdFZhP3hGMzxyWjlRYCR5QGJEOD9RZUdVYyIiOCZtTXlUcVQ2dG41KG15IyFzbCRVZVFuV0NmfU1Lcz9kRDAp'@;
put 'WVV+dyJDd31EZnxTPjIzKT5dUlldMDNJVHtfJDxrQ0BVZFZLdXRuO25GR0kuUykuYWhMWzcmdSZrQ2E7L0dOMzp3WGJyMW11a1tfSFFRaVBnOlhybyldeXFGbVZmdmRbSSZ3dkxdWUNbSTp3Jl9mLiNJezohMTBaKWhgV1F9WkV+cmZzK1U/ZF1zXXc+cGw6aFMvPVBwemwmM0xkUmQqRXU8XyQh'@;
put 'Nix5U19GfCY7el55R1lxeW5lbllQdkFBdiRdKGFWKWsxcGNYQTJFeHVlPXdsM1RILCVtPTc9YjVnZlhsLyZXelljXmM7JFd7SlsiOmEhZlZ3XXQ1KDoqXzExPVJUUzNATFR6P0IxaiFyVE5SKkt0QSFMeUU1WSxIS20sW2lwPX1QTV5+UGJ9RkRmME9XQD8xZiM/S2ZFYHV+TyY7SSFgQGIzQF5o'@;
put 'VjQmSSJ9RWFVVThLZ3BCaiw+VU8uTiR1L2E2QEMoXVcuZlhdY3xUKylSSChLSXBSRFdHTGAwc191eUUwXzs6OD9+QEwzdEJjVTYkXUwiV3UrQnMiWkxpVzJUPCl1Z0srQiE+IyJHdURsPlY2LCxvI29gNVM0OTxTRjZFMXZWb3cvKHZ3d3E9WWE9ell1MzNebTF0XSxhWFhVWm48KyZxODFWTXc4'@;
put 'djhwQ3pZbDlVZWttOHR5eURWTFlWeVBMbTwoW2l+OiVDNEdkM3p1b3lSX2VgVSJjbGhdOElVWm9MX0lmcDtrQjoja0s5dj5NRSQlNHR4VUVJJGJwUEpyNVdPXjh+KUdqVSYkez07QUFgUG16UnB3TDQqI0kmRi5mLz5VMkY5fll9WC5fRzlIOW9oQDhPYW4ydUtOVzxiRHlgZy4kK3NqTjEzbTQ+'@;
put 'UGJ2Ym0pZD1MVjAsfnlUI001ZGRwM3gwLEEufDhMd2wofHksdHtuXzt6T35TakNSR2ltS1U9KWUwOWY9Q25MZ0JJLDRJTXBnSnMjfGVifTI0Jjg3RnRwXyhTNi8wdkcpUT9qTFV5QHV5OWQqaVBKP2tzM1RNcmYhYjlQVD9sQFpEfVpGVkxgMUgxNFkzaFs8M19maiwsKVdbPixmcnxNOmkiK008'@;
put 'THBIRnQsdnhULGZ1VDdaZEZBPHxUOTV9cktUWDRCNEAxUilGWnhQPUk1aFk2SGJHeDciK2BqR0heSXRlaVkme1Vld3pgN1V8QzkqJl1IT1lWW2RPPy5EUCUsamFoWVhdaWlVdWdCOVd0cVVCTClNZEwyWzFAZVVjXU1DVCFGPUpzNXtOTV9Fa2FAK2o7Sjd1RjEiLFtfa0x8V2N3QVQ3SCwoRUU0'@;
put 'LlJXW3VXVC9SVF9LKHYqWGNgT30zZC5eaEReUHh5bWt+fjczUEY/ZH1jPVdkU0crbCU4OjxBKVZUYHEwQz5INyMkaFU7VXp1IUpZZy5VbUtNTj4ySkojV1hPSUdsN1dIZC5qSWsveC5pW1l7JVQ6M0hebDE1YCYsOXlrPlR6bT9oSk8lSl8rTD5ePFFpSE5qZWRTTVFUcGtAYiNEIXc0JlVXMCk9'@;
put 'c0pqMjNmcnB4UD4wSDtFYXJ0W2l2RXNQJHxUP3drJDBDeXNDLmQ2JWI7KD1qTXFCW3lpYnh+NVlwMGprNzh6T3pGRV9aPEJhNGVVWG5qOSo9MkN3ZTVJLFt5a3R5MTdjZkxhSSlIKlI/KFVnZDw5ZW0/bi44TGpJREtLN3Vxe047NXZEY3kmZ0khSlV4QnlTS05GVkgyVURlKUYmRjJOVi9gaUZP'@;
put 'ZlVgUko8V2spYVhPMT1UJG1zXT4kYSt3USZRcXplYUJyfXg6UCxgM1RWYXRAcTE4U0YvRHBpd3pHZ3BqOFRfW2hOPT9Jc1V6ckRkVSxGeitRIz9PV0Z+V1BBbDsqPFREKVIlTHV4QnNsJWBCTXkwd342SERqIV9nZCwmdWxuaGAkfFpFN0glTXEiRltXTGk3P3ZYcTYhMkwyTWwuI2pQRERUPnhb'@;
put 'YjtJNVJLQXVgXWhvW0YuOTVbanklLmYoPU0+XXshSndoOHZhO0NDJTJMPChTezclcTpGcF1BP21UbnpYZ09gVmpDRzU3Knk3YkR0ZFpKaVJlY315My8ocWkpK1lmJC8ub1kubWVffGBoLEt3b1I9cjdfWTRjUkRhJF1pLFsmOnhUJUk/ZlEpPSEzQj5jLjJZRn1yUSR8O2dQLkMqLzc+O05ARmhZ'@;
put 'MEl0RlBzQEMsX2RVfHw+YllgRSJrNUZAYzgyVnB6MUNJLkQqOUUya3tPZVB2LyNyWmszdlI6OjFqelRXSH5Gfnt4fEBBWzJTdSEjPEVfan1ZTDl7UGBlQjh1KiNXVykjPG87OWRNJXh2OVBBOj0jdyR4Z3lfc0xgKil5OGV5dCZsPkpPaXgyfWl0YG1FamtWRSomdkVbYjhlL3JQSVMpS0xmcWlh'@;
put 'IVBLdD5YbEJjLFt6bXpbS3RNWCM/T0hUIkt8SjxeUEQ1Z2xBdjdIOD1rIloyTjFTYzx6SlhBcGBDNEZPUjJbaz5Xck9Nc1YseF5baFVqVj9BNHE8MTNMX2I/K3ElR0VsciNZM3wmTTVMNmV9d2ZbblFuWUU0Pys9SUImalJ8Kl5jcTZ9PFkuYyskNno+JCEhd1loc0BwRnhDdU95OFcoPFRLOj5V'@;
put 'L19XQWElQiVHTEs0Oml3JW07Nm9dUFA0THgrXTNXT1E6NjZtPjUuIUBkQjBuc2tiakZwTiVBIl12WFkmNmZETyE1M09OLl1lQSkpMTpsbH14Sl45YiNFOmtCSHdKcVdJT3lzMXpXeSEsdCo3ITt5a28paXVCPktUeikpNTw8SWNmTEUyMUIxYlpke2MjL2FANzNMPlIzNXI4fl59dTAkN1hNXixB'@;
put 'XXI6dDgrKT9zY0BVIjJDWklMX3xMQHg+Q15DO31tX21bSDdRO2pibFJieHJmSUlCWEp2JEc1VSFKS3J2a0kzb3Y2LGRsLmw1P3NiUD1oKm5kMmxmPkJlW0MpLGpFRihHNEM7WXFdeE8oN2U2TXMmVyMuNTkrM2BeSHQsWXdEfklZPTl6RDp2fDFXK3FPW2phanRpPyxmZSkwN0xQOikiOjdqOnBt'@;
put 'KX0jM2F7ZiF7TkooXWYpQVFCPi56X2hdU2F2KVRfZCxXQ01yZEV3ZGYlKWEpYVZaIXpGLmVxbEpaQU9XWFJUOHc9NUh5LGdYK1R+cUVfXn1hUWJ4OCZUeDUsfDVKNDlQfF41LHJAaUxDK3ZJIT5iR00pWkdiL3ZpaHpKT3hmST5ZSnw+OHQ9U35sKUFAaiJNdCZXeHFQOmN2KT1eeFdHOWslWU1D'@;
put 'WD5Efm5oRGp4eShqS0JIYGo8WUZSdTczJXZrayJpfVchRD10LytpX35NQlNlSWlVbWB3Q2BNe35TVD1DKlYkYWp2K0NKNWI2OUxySktLLjd+aiJpXnMlNl95QXp1dSlqbE80bHMuKz1MVVolSGVkdCR8OmkjRmM7SkVDLjZATjMvdlR8cyFJTUlPOXhwdXVMQU5IPkBge3NTb3AlaiRRVXdGPEVG'@;
put 'Qi8oRUdkYjJ+XWQ8czU8djp2Z29Jd3FRKnRSNmY2amhKJmB3Qkk7TUt3NloxIU8iIW9NT2I0VW1UTnkuKko/QUVReDhraWI6QkV6VlpwKDB2UlM1dmxkXT0xKXBmQXZJOFY/eyN2TiEuSjg2YyRpQF9+QCMqeS5fc31GMyUhME1+SWtfbG99XVEpczMxN3BWSFJ+ZjhfTF41Nnp2Wi9xTHdMVj55'@;
put 'fnY6PCYkc0tZZ1tTRl9TbjdSWWwmc0U0WGI5Z0A3NWJeYlkpXmEmcSw6Q2NPc1giQypRMnVeVEMrMy48ckFDaChdSVFbcnZxV1swc3NFL0pJfWY/Sy90XVI0dEY1TWBrJWN3dX1ZLjBoK35KOTpCXyY0Y0lveXskMGB6JW1CJERYNE5rbUh8dCE1MyMpQFJjSShLN2FWSDRXTyRIVXk/fSV6PHNE'@;
put 'QEo0Y1Y2KFgofngqeDpaVUkrZVhzK1pDYDshRWBLXko4fFhbWjhdZS82NG9acyNNSl8+TFdGMX1VKklSPiEqNiw6MjI/Olk0YVo3Ji95cFRoNEcxZys7Snh8dHc8MkM6SntjZCk/OnVxfmpXeipDfnBJZXJOTyFncXAlSD9yOHh0fDd4ckFZbV5RI1U3ODJDPX13S1pEUlVLNXlBeiglOGlAcj83'@;
put 'ejJrJWF2ci5FazE8VWcoPUtsMnEmRzBPW0tFLCMqeEdvQHNLTTJMN0RkL1dqVTYpUUJuNDkjOkp1N091L0NYa1QyJig3ZnA1aCo3I3YhI2tndWBQM1BFXSg7Yzw6Tz8ySE47IVR2RnxVR0RAfW44SllqaTROIz5MOWJUbFphbG1jNzBIfjZWVTdFWEhfRT1IaHB8ZDsrcmA2QU81QypOW2FDKiE9'@;
put 'W1RtcHdIMVolNVJhcUJuOXIlZmxma1VOeC5FOTIhOnN3UE5xK1ElWiN4QHlRbV1jOVdBX0hfbH5GQj9GfmF5THVDKWVEQVYuJl16KXdxWCsyVGFaUG8uPyNfVXNYOC46LEY5Pld7TmEmXVFtW3JuZ1NJKSRjRj1HMWE4WFlrc1oofG8payE0UHVZLyR3XzxEI29mPnptZHtJdjVadXZNXVhTZ2pn'@;
put 'KXBNQVEkN2FYUzclPDtFNF5+PXZtXl5WNElBeDxRXUguPyl0ZSZ5cnVJZjMkTEMhOlJzY35nPFRJVVg6QUsrNUFDMSU4emEvfjF6U1t1P1gsMnBZIWw/Qn1gOz84S2MwSnluJXp+PnEveCEuOSZwI1F+YUhhPDM1UE8+T3d4LmpCPXlIKyNZMnNGTlFAckY+eFR0QjZKOVRhZkJvJXchTEBQazlV'@;
put 'aFMzZzNobGEvTGtvbTd5Mj5abiUxQjtoOjx0O0x1ciwmTFEpZWFJWDZpQDZvVTJDfHNVa044WDxsdytOMHtBJUJMViR4TGBGK29aekI5eWZ7aGg/MDhqQjR5ciV0cWIlSkxtNnpYYF5UbChmQ3hDIz5PVj84Nnw+P25YRGUoYTExKkUlKD8uMUx1JU1Ffn0vKmckK2tmUEFGRyNBZyNZYWpEVTdu'@;
put 'TFBzKW9MWntORi9LPEghMiNuK1lxbGBOXUJbMCVYM2ovTmw3az1oPytJTDc5KkVXfDFOWj1XfltqejNKQCR0SzViZF4vZWpJJTtCTzdMVGlgfXlKLjFYOTNCbS41fSx1dkt5Z1ZpMVVmU2kzKGlmJTpEMjJYN1hiY1tAIW0mI21GZTguYCk2PlIxI2o3KkN3aypAYzA4czJQWnVSVE5NOkR4enVC'@;
put 'Iz9SLlYpN1ZoPiE6PHFfejA4filLdXRhIjtNWG4yTFY1ISk3MFtsYE18KksvRUI/RVR2S2FBKzc0QXN5XWpGWlZScyxPNktRPExlP2lVUVpMfi5RNyVxPVRLbX5RbGAuVXFfV0FGPXlKTD9gJS80dUhGQy5yRik/RCwrX3BRUWdDcT5Yb2pkbEczeU1oLERWNUZpbW8qNE53O2pnXzRVcyErUSom'@;
put 'KHJAVnVQPXUoOSFqcjxscVE2RnpPRyRUXXgvPm1RUkMpTFtgTlFebUE0Z3p5di4uY2YhTWViam5UWXxOMWwrTz5DJFA4VTZDc3U/Ln1TbTJ3Q0t2JnpZKkhoSjt7NSUocHo4Nks0Kl9HKywvYVJ6W1MudVgsTl0xWEhVRCVZN2pjKVh5d1ZMemIlST44TH0wVndRZFpSI1NxeX5rWkxLKzs9eFpn'@;
put 'UXMxOl02aFo8VmxhNTRmdXc8bE5wODx+fmQlVzhFQnNObDRsNVFYTUVwYEZIJHVZU0UpZHhUYk90fSlnITIuRjsoXyVCNnN+TmVmYjhMfEFLS1suR0FeNXtqazd3YElmOzpYRiJlRzk4fWBIY1k2ei5hVy58dmRxUHY8cVlEXnNHLHl4LHZFfjBmZCx+fE1wNjs4c3JZfFRSQTdKRUVQYzAzV30z'@;
put 'SjE5L2NXVVlXU2tWanBkdD5HRFVfeDtQUC9UJE0zXWxaY3A8Q2MifU9pcyM7dSV1ZzljYnJmWnVNd2d1MTdsI291bTY7aj0uSnxzQlBfU1pHZlpyTTdfenZ7L0hEJmJ9M101TmwuMCl6M3koQVA0VGRHUWpoPWcjWGVBXV4xdDZTIWpuMkt3I3BWSi9TNHsxYlA0TzJAZilLU3R7TDhoLGQ2Q2Zg'@;
put 'VmlEYFB4KSNweT5iUS5vOjhVT2EuRU5bOTNLS2ZBZmxdbk0xY0U6UixbV3QzQlpIOEt0U30mLE9HN2QvNnc+eGheQV5VR2hXfHhJSSlgeTZpSisyeWNRN15kcE5NWWB3Sl0/NT1FNjRaL2o0O2VJXVguVCsjZSheTWs8XVRPR11PaS5bYn5NJHh7ODhdQyZUMH40bj4hamlWKTp0Ol5DRVlXMVFx'@;
put 'XUNEK1lhTUZOJTVPKGxNZG9BUiojRG5+bWEqSlFHaCxBTXJjJFtsI0BNeTJITjhhRmxMOy9JPUl6b1chck1gSGVxNkRhfHB0OnIlfjMuTzdXU0NOOEgoM3Q2UTp5ez9ELl5TcnVGSzNxb3RaTWUhSzJCI310cW9QJnxzI0wuVTR4ZlhjND1RUltjXTRUSU4qVm4jPmdibjh6I0ojYyt3RiV2c314'@;
put 'KnNYUG4hbnBNWWlqXykkUlA/bU9GYnw4PktpeWl4LnFfdHxRNkg6S1VQNV0sND4xZVtXWXgkIV1tKzVbKXJTcitoLipBcWpnMlc0THhrISZvWUJTcSlhKTRSVEklMW9dfDtgOG9NaD1bQUlbOnFUVlRYVmZMT2FkI1g0O1c0cWYrbiVjKX09Zi56OT1XOWxtKT89d2tEcHFaWVBpWElDenUyTzp5'@;
put 'TlclI1lhMjgiIjEibSt0NCVvOzZvTkokRkEzRU5UWFk8VD08OW1KT003P0Q1Rm8iKV1ASmJzIk8rPEJ+e2xFMUFuTWwjI3htLHxvKUR3VmVtNDJJMW8jYmxYMk17N1ouNWhqbHRDWEFZKHZ+S1Qvdj92ZW1RV04oLkAyMlloLj9vaiR6aClUJGsqMSVjLGZ6byxFVit4eUB8KTRLSWZjSUBEOyM+'@;
put 'Z1lwLkM0LFhQQmFDLyhsLjs/JkhTOEQpSD4lWEBtOSRVaSl3RHxLR085cC9wN1VBSzFpc1ZgL3RCdV8oYHd2XzJ+NjwmSyNIT2VnL0p8Y2xQLH5ha00vbzlgWGNFcnVUY15WflhHSz5DNXxVOnBDfWdOVCJKOihTZlZgNklATChDTUtwfE96aTl6MnZueU55bX53XjBKUikpVlBaT3ljOig+R0p9'@;
put 'TXQ1XT1sU1c7cks5L3VTV2lWQT9EMV4kXX1+LjxRckwrTmtFLigxNUI3UkQ3IyhIM2lTY2l8UFhmZ0syOUA5bWY4YmFTLE1VUHJAcUImfH4lS3xDR244RylOXVpyJUlZUHZgL0tmdCNoQitKKns/ZFJUKVRiZk84bW5FSCxwWD5oWD5jTE01bXcod3F+VyVCa2VVRzRpc0hKRFI4N1AxbEF2K1Zz'@;
put 'YExYMyU6WG1XL3xvVldsKm03cnAwbG0oYkNQbD8kZjp2ckBtI0c5ZSZxT0NJdl46bD10I3BXU1cmOWh5PyRDTlVvPjxkXWM5TypRXkwhXzJVOSNnOjc2bkN6bGJEPTQ4fWpJQ3pWcWNQPG5EenVXXURjRlZ3VzdJeEJEMk94MH4weT59b2lNfGlVQjkoc3B7akouTFQpaXA2KGp7Wnt0Xm41JU9P'@;
put 'QE1Wa2NhJVpDNXI+Z0ZbPmxoc3RbSSRKblJLPzdTO14pVXo4fkd5dzcjJWFUfC9Xb094Rj16PjF7NC5GbC5ZOVVlVSFhVCtFKlcsVy5fWG1rX3Q1dlIpdj06N2JZLEZ6U04uKFtxfHVoa2B6XSxdTVBYbDosUD9oWVMyKDRzYEZ5XyVgZlZAVzNJOzA0V2crWVlnM35PNzVrOTlwVnUkWXlReTAx'@;
put 'WFB1MCVZXyMub3lLflZ+LjUuVnxbWE1CVHxKPExhWUxtVWNOfkYjTHddWU16VDo7aVFuQj1NVlYjSE9KPnYwO0ZaRXB7RFVMfCoyKXxvPFF4SzY0TGUsN1ZiSF41Sy5TZk9dIkdOQklveWZmTF9VdV9PYXdWTjtRamRKO29RK10/OkIrLnN7QXBbbnhRSCUmcWs0SH41QjcrIzYpe3xkaXs3cSxO'@;
put 'NHUpX19MYjEwNGB5KWNGSD9dKnRPTnlmKmEjYSJjcVJUaVE9Ji9KSz5QUWMrZDE6QW1iRTw/KiFGMFtXNGlkWzd6Y1s1YEowOEh4UVp4Rk56OTNtbHdjci5FN3V8KTlrXjx8ZDtOTFosSmE5YypTU1Z4VEFzXkdRaEszOH1uR3pJVH1ANW1IQEpbOiRkYkZMcF1jTCkqeGFlN2VCKHI0bGNlTjxp'@;
put 'bnRRSF5XNEk+STEpWzdXUl5BU2loZmdkKFA5WmtFYno4a2M9UUQ4THtNdD4wdjVOUHJxMkl4XkBiN2kzJCtoNCNGWWArdFpmbjdyUDNga25Cdmp1ejw1JCllWUl9R2tPN1gvalAqVSs4ZypZMnJPVShkKmpVXTI5UUt4NipgNEU4TWc4eGZsVT1gPz0jXk5AdGpQY0hhMVQxIUtxeXZqeERRd257'@;
put 'Pmg+fVF5eVBfNT5SK05EMW1ZeHh0NlkxTyFNRU4mdUhCKCtLW3xhaTk2LiMkdWI0bFhYKCVHTnxed3szL2JGeUddfnNHPEt+M3FwRyp3TW43XkhITFtKV3IyT1NRJXlEcDcvQCg5YygwVjNzfEw0SCExKCMpfD9DI3VWJiMzMTVLQyU5T3JfQkdyc2NzW1JAajs8YXpqbWVvaTJ3S3ZBRFcjdngq'@;
put 'VUMzPjB0V0svPXU0M0lvbTJ6Nzw8aENdMFJEV3BDSXVucEdHPmJ1OHJtQDQzWkVGMHZaRVU/V21oPWBvJGpeYGZ6UFh+RmRoWW5uOXlhSHo8cHB+U0V3fWdRITdROU4/TGZtT1ZydiVAdGloI2hdN0Flbn4lcGxWWls0JjooflVeSXdbbTZJY1lFZGh7ZG9MPUB6U2s0R0Z1TFtxM1pUPy5NTj8l'@;
put 'd2ZNJiVDM110U0ZBV3Z0QztoTH1ke2tnR35SbyZ8WyhMaHowODRnN18vKjlJZ3R3d3FOYEVZSlJmWH5FIzZ4Sz5gM0xxLn4/dXtAXXBVTUtMe31QOlcyW2FUYl98P2ouJERILEhPeHhAaWQ+QFZmclIrJmYhPDhuLGQoNV0qcW0wVTNJVmZlRnElTDtGa0xhZDBVK2Jqanc0YTBaLFFgdHI9MFcu'@;
put 'aGdYUHpuQl5mW01yWnBzI15aVWlzMD1vXmA5X3g6bHdJKzJ8QFRabj4leDI9Tks0YWxtMXhCYT1RQjYqUHZAXz5oJVszMkVXIS9IUmlnfi92Nix7TWJvQDY9UEhEZ2J5NmlNIk0lb2kjVC8iOXpOO0M1cG5uQGhQfT9IYkptRUhRQ1tPKWN2RWdkM1M9flUhbUU/KS44UmQoU0VdMHdBKSpgZiNR'@;
put 'c3xtYjgpYHVUOEFEOz8+aCo1OHleVlEoM2M7azc+L0o1ZCM6bjlRN1J0byttO25dc3tuc3JRST9xJDVHSUElbWVsXzc3IlpmP2RyQlNFaWFBcmtKbUtJd3gwdEVfWFhydHkueWIufTwucnd4SDcwQmwqcCpHTXQjVTczez03S21NK1ZaWXxgWlhYWDlMQlR6d3xfTDVfQDh7bEE2R1QoRElGWzdE'@;
put 'SSwsbCs6UVJ5cngsTmZQX1FhdmxzUCJMPEU5N1lQWUsyeX5EfUImX344LHtiVlZfVXJkcGBKTkJVMkZsPl1YXUZDVUdGcH1XRFdiVUVQS31ZVC5+Z3RTIXIkayhQSHdLbCw6MFcwSGIubzVBMCNZfExDW34xOWxeIS9lKTpJK3lCcDBUfjk4IjFeSCllMC4yLmJhN25QU05pZzQ/aGc7bXJRRUw9'@;
put 'RjNdRiQjXjg6JnhmPitoN080ITRFMHt1JSErWSR0MjVGSCshLDUyY3BsJjZuIUZYXz9XKCImfjwuQmgmS290VEg7IjhXfWdtLE9eLixGK3pke15QK1hyT3FsI2paVj55RGx6YkpRSHYpeUg0fXFFW0REP3A9ajRmTmZqWU9zKVAkVFk3PmU4czh8d28lL2xfTzxVLnJkOF9HSyNWKCh0c2tLdlsz'@;
put 'Y11YKktdNl0rJE9FRkx8MjNwJWkwKzFjc2pJUT1PMTUhXS9OajQoRFFOPVZgbltGRz1hLGhELlZZTXs1RWJtUlBeQmp1cDs5KUt0ZVhqb2BwazxhRl1RRHN1X0xpUWtsNSJzY2lPdks1OS9aRE5xKkg4Y1t6RjFueiRQLlE5M245bF5pQFFeWU1dX0NXZGRTbSpzYT9PMG99NHowKGkoTyh4REhk'@;
put 'PjhfME1VQHczUnkzaC9MNW0pcipzcFRKc01oZWBkd0VlSDJGeEJtUWBhTEhOVj4wbWgjdXVDNjZ4NzNwUSFfIXUpJlIzS1pBNk1tJV9ZMCtrcEJhKChHaDZDYENEeEdTSzNfRyZMbUs0ajA1X1djSDgzJUppc0M+JGZyLChtPFBhMVJqai9rWkB4UUA0dCJMNXxzcDREdXUlPi5lOHpRI2tLbEs1'@;
put 'L0RNdzpxaU5DQXoxSlhPKjB+IT9uJTMjcGklUzlXM1dRbGZYUjNIPSQraX5TN2gvdVRyV1R9RkpqWGB6MDtQQTNuR0JmK21YM0BrPSpsQSlaNXs/VVszWUopOHNLMFdBUDQhN3A7fSxrXzVfenswQjtWaXdXIWVHU11hem0yRjFWJSVgW2UqfDBVZz9OeCE0Yj1qVV4zKWBCR0JBTHJQZD5YejM3'@;
put 'XW4zPTQsMCwwSVFgKjp2OU4qYkl1dURePFk0enNeQyE+RzBNKnhvOm1CNiQ/K2M3Jik0JHpoVkN8TCY8djtsV1E7cl06Im1OUH1NVGddSTAuNnRlemVBTi5vQShVMH0uJVtUYXZRbC9JQEdgPGhQcE8uZXA7KDJIPi5BWG1De0p4X30rclgvfHkuelpJV31WIlAqOzxFcFIzaFVqNElgPyxQX1FH'@;
put 'L0xla1E4c0xDPztLVEJLM0tpLFQrfVdLblhqeVQhajwwRSR5Pl1QNUM4VlhIYi9NQnU2WW5UOmF5RkplL3c2Zn14L09LTlkoOmBoJTxHQDRMN1ZPSHhyNEdVRyo6OyxuPGNOdExHU05LfFo7YylQMCpDUkNaTVgyOltaI1NeRjd7UUVNdEJORXg/YXNoaygjSlo2XzNjTVFSYnMwV15hYHNtYyE5'@;
put 'd04/WX0/ZiwjKDN+ei9+M245TDFeZkRiaWskO0haJEt3NyUubV1ZKzR5WEx1R0A8K0lEUlljLE1vW1RHaCVUX0U4ZXZRZzpILHs7e1g3SmFeLiR8WnVjRmljPnZ4bEhQI0IzQzNMNjFOM3sqbUwyKW09NEpNOFRWSXQoUlVbSi9Ye11rITw5ISxXYl5qaklnY3FHKD1hfTFEO1MkR3N1U0ZXc0xd'@;
put 'bXQ/alYid3QmaEBtSXMsVEQoOWUuYkZ7MkBASnd9cCF7LikjKXJmek11cU1LL2k1YX10LDlFY2RLUn0zcG9FZXl2SXdnRX12alhoN0JuRFFgdUw4WEZgakI9Mz53XUo7KkBTfXU/RV45TzQhbGtHdkpEJnFRfCNvT0coKHR3MWJfXm14IylrKWhYS2Q8U01KVyR7cFQxSChtO3BeJiFPUDcuO19D'@;
put 'KH58PnUiKCpsR3pZOUlGa2lzSXIhQE9OKUklfTl0U1tpRmtuamBtdFBtVzdmQk1ANyYwOnV9QWA4JFM9XVRlUXkvfS4wKz9oJDxWMkQ5VEc+OmRmPVVvezNEYXorYWBYMUVnfE05OElbMCI2bkR+RkAsN1c6fkFzKDA9dEZqcWI9OSo9fUhmfFV3JU98KUw4MlZeRmJQTV1XdFtnczF6PnxDVjE5'@;
put 'd1tsaHRkX3BSazYhejpjN1peJVJqaUVIbT40THhlNyJlTGZUZjUoYEQuanRoNkA9I08wUylFbTcqUD89ZHs9b2MzWClmUHd1WncrUyRdPyN2NXZ3JmY9SlF1dCpAZy9NODxMSFRdZmJTS006VDhTIz5Fe2dONE1TXyIqREh9NW8hejM7P1YoYzc8amU1bz1Ccjw0Nlo6Uyo/KDZqeXFYYW5MY0Rv'@;
put 'OXcmX1JPbkhvMHUsJShLWXZGODNBNjpqNVFFM2tWVmhsKz8lW0JIIXp2OElrbGAxUWVJR0w4aXhCeHN8MjlnUWBeWEdNLz9ZUGxfcVA6NGMqLyQyYGh1X2ZnJnI+JT5eZ2xUT1ZHXWY5TTUvIW10Xm1DQzhTeG4/dFhmZlQmVTJLaWQ7cjYkaiJvRjRublVpMCMzTDc9aFshc0J+UnFzV0osIkMj'@;
put 'ZGF2NSlIKUJSPTd1WHk9ejRMRjo4VGhmeTJMRm1FZU99bE9CXXs3bXJ3Vk1zYmlydj1RVHdKLC4uYW87TWd+NSU9Uy9UREhvZTh5cnhQTmZTSSlsJFtKZDxWNHNKcztyITo0dWJAR3FxdG9gRDtpX0Z4Z1IzW01bQG4xVCRBP21JTHpWckhub1hhJTV8IiFPdmhxakQ0fit4ZlFHKT5Zd0RAYnpZ'@;
put 'OVR1WT1UMD40V1lSIWRRPlZfcjF8L2EldytYMFpgWEVzLnFnX3lzamtLIkNMTWJscHErZFciY3czckJHRE1kbyRsZHpHZT1Ed1BGRXJteGN7fl5FZ2tmKV9ZRX02RlNrO1soI1hMNnpTWnpSdGxmQV93bmYxLHo9YVhiJCRRTX5WbT1JJDZPejlvLzY7ZDt0eFY5YEw8NVM5aGMwJEZNaTtPbTBu'@;
put 'LGBJUXxRVkFfIW93OCp8PEk2bjtId0Muc2coZG0lQjJ2JixZOV9tSih3X2gpUl0sdmgrcVozTSFHYHRsJWlZLDVte3YxTmgsI1UyMGU7VmllKFQxUDYoVzJwSE1Nd08oOjNYWDgkUitSTSU9WzZpOVJiWC4+XlRBOjNJenFRbzlbLHFfL3dGJkRJbTMpU2R2ZDBSWkNpYzlIUzNvUChtKG4kV0w/'@;
put 'Sm9OIX47NUxnR1FFPiQzWGBNMV1TUzVhJHhqPE8jMWBjakgyS2Iial5jSWZhRClXbGJZTlJ0ZzJ5V2lheDZpNGchP3l7amwye2BPc2tGPlMzJXRWWSM3LzFSa0JXeCNGVT41YHZHWntFeyswQXlmNFp3d0w+IUByVDwrS2hhPFAuJmxvO0Q5SG9ySjBva2F6Plh5NDU4Jk9NRlgxRDF5QGFQdEA/'@;
put 'RmNxQytEPltha0YqKnd7WXYkeFJ6UlBWXlFmST8ie2JsYXhxRDtAT1FFWThbSmB6WFJPKEprTVleSU4lc2tyNC9MXUwkKGF4PHN9QEEpdX49enBORip2TTZudWJXdiJUKGNQbGZ6ejdiQHxSYCNtSEVJMjxpVncpI08pQyp2QlZSYEFKPS9XSVBvZWZsLzdiYD82fC4rbll1Xmt0amcxZXA5XTNT'@;
put 'MjNzb1ROdG4qJFlCNjZ8KDpjV0JuLlA2OyFUdEM2NU1sZ3gwfT9JaC58PV9qfnJwZlZuJGtVR1RjPCRGV3dMUiYlKlprczg3UDg9d3xMWjlpI3AmNFpVUyshbj8iI2MpPXlqVEAjKWojd1ZEWUB9Xzl7MUl7L3dGKGo4JUAuXSY4Y0llRGBYeURnaFVVQ3ElcmRmS0lNQCFqbHU5OCtSRlBvUz5b'@;
put 'NUwzS1dxI1BQcTVJWVZXRF1KMix6cjBiZCEkTEZ2Y00jIiN2W2F0Vj89YjprJDMiTjBNTSRrYERVPDNJVW4jaXxvPVUqIl5RXjc7JShPSF9fNjVpTExTM31tPEV2IysvX2R9IiQzaWp0MiRJaFhIMitbM1dzUmd4Z3hqaW5xT19TQ15GMXhdcVolTXszUTJwM0xmLy4pRlBKQSJPeXVQMFpsUnZI'@;
put 'MVRZO3UpSTJ7OU8wfGNiZWtOeytmfX4yL0Q1dVl6RSo6fW53QkB1T1MwSzF3blphdEdEflskQltKWzVzYilZdVAjbkI2Yzh0MnlvTUYhQFBEWHAqJiwpN089ST91el5JQTAyN1N3QUA/Qzt4KjNVYClPJWN8Njc4Sj4lO21mQCpGR2FmbE9UUWZCU1hUYHUzZmYkLigmKWcmUnpgNEttRXFFbHpC'@;
put 'RFZwT3djYTZRaGJHKVgrWjxFNjxaVkoiW184XTMwfmU0XTpHQEwzZ1ZZcUkvOjpRfVs+Ulg/LE9zS2lhVyFSYzdqcClrInkwMFZxTik/a2x1Lko7MFFbVlgkPmdLL1JSKm5oOTlqZl9uOz1zXyUrTkRzIjxhOk0rfTZlIWNCWTMpPm1vLEFSKUE4OCE4d2YldilQPlgjSDxKREdAejcwR2xhVzI+'@;
put 'WWtWe2NUO0Z8Kj1QXms4Zm53Zk05dGgsdlMlbyJ8SmpedExJVj8xT3hFanxLSjF0KnhuIUhIR1RXZ1tjTURaKll9dCVCLm1US3pQTEY7YFhfVV9aOlhQaG1Oa31SeHBZY2dEL3IwL05PXmdman1mfkNGcD94Q0NlbWVGVEd9bGZKPXlpVSh2YThgYXhgQkpuSU42fEBvP1d7RSlkUm04YkIzaz1E'@;
put 'SmVYWlZka0ZJXjo5KipASmE5Zip+UVtgWlpzanx8Wl4xJjhUNi9dbHRveVBHIkhLYnM2SkQxZi5UNXAxfnpIcV87YE9EZSg8YnhodnxCeEF2JX1CM1ZnSXlJPC54SSRRbzgwY3F7ITt0UHA8V08wRk4uWCg0OTdiSTRAaVg/IWNuOCNBanF+eCZ2fkAoJCYhPmRMdl46JEgyOzNKYFFeRGNlTC43'@;
put 'a0xSR0h3Jm56TVBrZjo6TjEzMThvclpYVm1UJCo8Qy9WYmNzSD8lKyQ2eVApUCJ5cnJVZltNZ3BQeGpFTk41e3pzYml5NVpeVCImJGAsI0lSSmpJPWpxWFRfbncxaWkraj1kWz0landFYnZTTFYxQ1dzJmFNdXs2QVRfelRGfTRWO1BZMWIyKkhwSTxZclhVeilLOTVeTGFddTE4TEFna1lhW1JC'@;
put 'RS4yM1VQJkg3SHE8eitdVWEoV1d5M1FiejgvQjcjfjpZWE1+bzV5OUQ8PEJIZk10OjdgOiJsZkk+NXNXflEhR2lGJmxMbylNWCNVcTRZJTUoNjpZcmEwa1I0bUpHK1NEMlNpQX5+SjI1QHZ2fT9geDZbZFs4NmpfJTp1UU4mMytDPkZLUG9VfEglaF5tNnovWytjQVFfUCxqQFN9cXM0QzJzMmdX'@;
put 'dSQ0a04wY0YuZXRaI0d0PWZePz5HW1FofG9vI29JeFM8IXsvNUo4Nzl0XnZ9SkYkVV92VSNWS0N7PCZyYWtVVUxiK2gpPGZ+VTFaaitvOzo9JGo3aCxzJGhVVFFESWo4ekZxOn5DcWdsbnRhW1RxeXBdSWJbQlcqe0I7UDF0Qm9Xe0A2WiMlbitiaWZpIy5ISSZgPCx4WDdLQHt3eEVocDokNCs2'@;
put 'M0xCUj58N0cxZy5JVi8mSEBVTlYiI3MmIyEqU31HelBQIXRJbW00VnlxbjB+e05BXyJafUwuaGQzUHJ6LEY+ZU93UCJhfWcrQCFgTk1deH4uQm5dT15ELCJhengieVRGWlkzQjB8OnVtcCJnOHk0QnQ/Ty5pTVRCV2VPMVh+KEg4Zj4ubSRkOns5a2RfY24jQlthQHJHaV1WOF47NDw7TGYiLzor'@;
put 'JTs6U2w7dEkjTHtqIj0lW1t9QT1nSSI4cVBSMDNuNU9CIU1UIVhiakN0I09ETFUpbS5YbU95KHw7bWVzIlYwfkt9Oz97XiYqOEYvIUI+KzVMLFhGdFtMc1lmfnAhSCtlZlQhZS5GeWJMRnc6TFg2YStFY19OcU1wX35pJkIwaz9OJGpQTGZNNTAqTThuciVMTnxJflNYI1hFI1lHYlBiK08/bEZS'@;
put 'ZklzPlY9fWhMezYmQHtVJVRPQHh8dzVFPFQ9RyxOWj9TWVo1eDQjJHdfVCUrS0kmKUl3KWx9dGsjaT5jTV07aVVUaHVIJEJJdCl5cywkdDxOWEtEWGZjaHpWOl1LcV0iWyRDfTIrVGpuTWgoTHVsPXBkVSsxbmRWUyxvPlNSVGVQZihvSDN7IzRPLGJGY295WjVzPVtFeTFCXVRaIXshKiwyWlNU'@;
put 'JVd0PUEwYjQmLmY6JT0rbWM3XVE/JkRHT15Na3d1VVZCPkVqU2ZpSyVUM0VYPS40KH5WbXRCVnNAOTJQMmxuR3lwe1YkTXc+VD1xO304aHFJZitNfGw1SCtVaT1ZX0Q6L2h5KTs5eykhPlJMOSt2K24yJEI/ZG5YM1JKfSo4eGRGKCU1K1JmMnMhPWE8W3opekokRSp0YmlnYC5wTVEiO3lXemJK'@;
put 'QnsrNFdDNjVwdjM6NSY/alldSlo6QGpfRjxFT2IwKVdRR2REfGY3UmJoW1NwQ0crR2ZUYyZsSys1LDlxayZwMW94KnY/LDBGXVZvM15eTCJgLj8kZD1ISiE4STBQXmx8IVdkczhrbk5KJWBJIyVsRXkkTSw1SHZ6Y3A2ZHlSeVpHZWp9JE5NczFrXTApKyQyXV5OfGRwc2ksN3NtXk8wU0RUMHow'@;
put 'W0ZIZzZLYHlWOUFBO3ZMOyRxMzpZa2kqd3Bua0YyJSYkVDd6Wj9XSyFHe34vV3IxNEsmb2VMcW8+SiZPY2lbQ0leN2JCWWU0PW5gJlRRSHZyZClafDd1PTE6fTJedEs8Ly5lN3VXYD8pW28+Ymd2LExdNWhAJCYoR2ddWCNeO1RYbjkyZmp7VT5Ecm5tY1tmKEQ5P2VpO1koPjN9aGp3T2lXc1R6'@;
put 'QGReUjVZI0xZUHtTLHpgcHI6Lk0hJVUzeSxKWmhPVzFba0FlMjVuV05nOS5IQVY7SW5Va1hlXjloOVEuNG87RGAjLiIpZV1QUC9tbEpZeHxoP081WmBPez5JMGhMVEooZnV9XldaI3hSSFh+emd+RH18QTJ7cTxjVUV5R3kzLGZhYD0+XUFyQWxpIU55QyExSWdxPU5HZXklJXdsWnNwL0BaZD8w'@;
put 'YEdbPVorN2xzTDJ3IUszI3duOEJLQnxsakE8bW5MN0swJVZzSnFXWnUzKiouNXZxdDxefHZOIWZKN2khQ1F2MSsmZjVCVjBNNU0oWU5VdD5+KzlrQGYiXX41ZzF7MVleMmEvKSgkWHo+SUVMMnd2Rzk+KFcsQmVleTc8LkxxXlF8ZWslcysvTjYrKSNhSGhGRURbYyZ7Wn1XLHRSI0VYcT9IfVB5'@;
put 'VCJWJkw9SDpeMkckJGNJeGYhZU9aYWNhOGB0W2N+VHxGTmJeNWBFJncqNFNuNn07aFdWUk5XUjRNUXN+Ql8welNvYWs0fjB0UmByenFYSE4oTTQ2MmAybGJqXy4jNSM5cSx0TC5aa1l7Nlt8Tl9lRWBaJWFpfTNOLDx0NGtZS2w6bm91LE1APHNIaX5MbV0uPjVGQ1prTiRMUzN2R20kQkdBenhT'@;
put 'VlhzfEF3IiJmdyp0MlRFQ0VJaHNhYS4rPSN3Mll5K0ZSIkUrR1BCVHR2MiFUeUhwYTRAY30uLiJpWW4jZDAkQEA8bzlbYltKL0xXXzxMZWRhampXP2ElUWIjOHNQVHEjRy5AI0NwX3QsRSUvZ1JrKGxSOHVmdU0uaU8mTnlveD9gZSowey5oYCFqUGRuJTlYanF1dlJRJWcoVCtGWEFdJCF3JFd2'@;
put 'RHB3fiVpOj1fTD5xaVdudnQrV2ppQDB8OlAjRzw7KGQ8RGNPUEl8eSReflU0K0JyZj1ieT1KN0F3T01oQUJlZEtBWEVDamMqbmo0blJEelBAPitXbUk+Uzlpfn5jXWBvWXw+anBYd2g5PV9lPVlVczt6PE1lejddY0lMalVaN0ZCLjlKVk00dDVeSX41eUpJQkZaIyNpS2RCKlVEZl1sJCoiQlU6'@;
put 'MXB+KC87LEdyLH0/TXNfZjt3PnYyWVVZU3RCIShzTW1MOnFBelcpNWxOWENAZUxRPUN1RVQ2cDp6eUtNOGsxd3o0Nng5MnMhc3lvOGl+all+Z1txWDdvQSpQWm5kfFJIckJqbjZ4bDR1TiJ8fUpoYCsrJWttUVN+OSNEXT8yMSJDKnMrS3UoUmN0fkE3THV7YDBnZmIjNz9+JWkrYUFNaUhMQE9I'@;
put 'UHlnPi47e3pCISQwbTooW0FYPmliWzlKW0A2YiRiS2khb083KEJue155Ij1yPDZUcm1RMntBPFtDKDY3W25HUFBLPFtBS0V1fjoiLDJqbFImVCoqKChHZWUmWlV6Z1dydS97Kj89ekhKR0NndSxfZTFzTXBCM1svTm00bVdjUDNTLlE5enF4KkclPzRGMThkezlDMnNFLkVgVGxtK10sKXNuNWE+'@;
put 'Ml9RU1AzcTtzbiw4MzRtWWVPc2Q5SmFWPlZrKVtaeTI3ayVwcXMjO0goZWhzKmxtOnJUYyhXNylWTzFgKDNFSW9OM2ZRTGt+VmthLnxdeToqRjApZz48XjpxQ3dvW0o0fWJfKihuNzZKcXUrYUZselBrOjA6aURWYTsmUn06dSs+T3loS0Rfdm4pTVFIKXo2d0pSK1FPUjBEY0RQSzxFayh3Lktt'@;
put 'TU0pbGpoZyFkMUo1SVg1enh6Nz15a0QsPUdUfGs6WXRVOmpOWzpZIUZDNmEwbDZwVmclck1VT0smJj1IT2pTUj0yVXs7Y3FjISp9ZlUubFB9K0JKQVdXSGQqR0x1MSl5Vj9ZW3RveCReQXpHNl16PjZrcSxJNVZde3VWKHJ6NEpOWDpudG4kKCMuLkxua2swe0k8Q3h5UVlEdzhDcE4+dWBaMSxV'@;
put 'OlMvclZoVVplNitDK29TeWN5K3JrWDJ3MXApfE86V2M7QTNXP1Y9JkVxSUI1YlUvKFFFNmFDKmk5MzxCPSlHdX1mbz5nOFgkSipKTFI1NW8maz1rLERgbFlbZX5NanZ3ZUlMencwTDZecDZSdSw+el5gY1teR2toNC8/ek1gel8rNkRVbU5HOE8sOEtAez80UkNzeTpSXSM1bnc2Rjp2WyptLyNt'@;
put 'JXdea15QLE1VN2B+TD1nRF8mKHwjczZ0KCp1ZVJaPnVqaj1XOSNYeSopPkVhcCpxd1VhY3JgVXAja0oqREB3WmoySEQlIW5Kc3wjRUF2b1AsZFpPJS4zPmQ+SyFqMDthIyhMQHJWTERtRDBfclJ0fnAuOjE8VVVtQjV4WCVnQTZkJjloKXM0RSRZWX0rbzBqcWgsfk08PDlsSiNOUjU+ZjpPKlYj'@;
put 'P3gzKF5NOTl6Pi9HfWJpNmMqITZYZTpAVjZ0d2xndXNaSy5bdmUkXnpDcSNvbFs2IlJBSVN6d2JvPixgWlZ7MlhqUHV5PFZZKlU+NXolMjJ4azRTUndsIz8lWixwIVE3JHosK1ZUP14kUSRwRHJHU3g2QS43XXs2TGRae3t+en1WfjhEVm96TlNCajlXS1lPZCshdUkqQWxyamk3L097aWgzPyEw'@;
put 'SVlKZXNEXkNzZWhQREJYTEZORFIvX2kzX3VNVVRCU3x+MG09eHFJfWE8R2Y/ezUiWz0pMnk9KVZmZyVROE8sTlMkKjZhU317fFMmVEx5e1Iyd1JPQVooMGRII2RlVG1xUXo6aGlDfGF+TFg3a28kNXQ8aUt7LHMsPmJiNGpXNH19PDQ6d0YzRnk5dzYrPUY0XnFaUWUkRHovQUxiby9DUjdIRkU7'@;
put 'QjdGOypIcn0jQEBJZHR7LilIXV4lT2R4U2c3aVUsanp6ODttbCpkJU9+aDhHKGZ2In4/ci40T190KS4mYz16QEQjQWdtfmxuZEgkJEUmfUtzfkhmSyRtVUxdK2JxXSJDanUjMHdHaSElRGVSXX59b1tRUkZ6NTE1dlZ3ME9oN1QoRVtUfmohQUhVY1FQK18vfHZVazhZKTRyeXQpPzVHLmVkSmFM'@;
put 'X2hKfU9YT2Z0Tz0iOWsuOFRHSG15VVc3TjF1NlFydGF0U3V5JixVc3k9LDtZenZnfkNOQVVNWF1yWHVeQDlDfG01KzdGd2pqYiNTR2x1eikhaCUhISkuNCw4Si5iRDM8aXglX0g0e3pQY3RJWERucjI0PUsyR1M7djBFSyZKNUkxYzxAW09leVlQQnQzVH5Zbzl5QFIvJChvLz5gMlVnZmtSe1Rt'@;
put 'VmQxd3tSSCROSHJJfHdsIVZ+Lz1IKDM0SWVLJVMlWDNlLnlxd1UyeyNoQCY8IkRDYUc7NCokKC55W0QsQE1YRkpNbkBwMjFiTmY/NVguX0ZXYDoreEEvSVgoNWhOZk1zSkNYXi9FSSVGSzd8c3J6JntmYHV0ZTJSfiohYE1QW1hpQkMwUloyTyQqcnh5dHlAQ3VjSGxCdVEmby5jLiM8Z3t+Vn5H'@;
put 'cnhlO251KVE7UzldVTBVRGc8am5dYGp2Rzp1aj1YKyw5ZDtFNSVCbz9maDxhTHlYKioyP2QpLGFVPj0lX1guXzo3QVJLVHt2SF9fPmZ7RlIuekt7eWh1bzl+WDFwfitjSXRTbi5zbj9mT0BzOCZDZDtpbEJ3bUZfbUwuWlRHeHh+JlhbVltyZkJnTkZZMXhUPDJlVFtCO2s/c357aFghK3tHVT00'@;
put 'T099dXJLTTF0dXo4KGN9RzM8S3hibiQqInhEflhQUGV7bypBUnA1OD5NSWEkQn5GT0BORHYjPXgiYWpmZ0NSMWh8fUJiNFtXPU90aGBjNThncH1bO2kxbnwwKWxLIWd1NlY6VDZOX0xdTGhEb01pR0leO2RDYXlMZyFuU10zSlo9PDU5ZERZXk5CLCNKaWZ2QSZAcH1gRT1DWSgxcXIxfUo2WVRK'@;
put 'Ly5sLyxiYnRpMUJxPlV1aG1oSDNbIl04Li5OZ1QhNGB7YW1laTx3dz9LcHt2d0MoWjlFUHV7YVdIXlFiPGMqZH1oNWs3dmRWfGVuPjNga0J0eXlCWTBdNV8iQyZ6NHhFZiUzMj1fOix0MGFhYGFfWmssJEN1QFJgQ0dae0pLNDhxbFEvVUEhcCUjV24kY1lRKDhkQD53SjE0SCt6Ky5AJFhUP0I4'@;
put 'U0BHRFVxU2Ymem0palpzWyM6O2hkRXJ4aiY6cllZOylYYltNUnEicl19PndHOWNFIjZNW0ZWODZLYSQ/KVtxLENtZi5LZ0I/YEw/XWJbYkZAITNeWXZqR0RxPnRMfDdZdzRjU2tdYF45dSZKKUd4I2ZOfW51bixVJUJ5V0JedkYib1s7Z09EQl5UNWdpQ2lqNTVuTllFPiUlXzxURi9tN0M0e0Rb'@;
put 'S2F1PmZ9N19uKikobXI9QCZQY1F5KHM+VCR3LFRgZ1pOSmA+PnpUSFFSOWowIVZAMnNfeipaRlMiRUk8cXo0WTsqRTJaSzs8OnIzVTBPaiZAJEBNR0srNTE8L1gpQ0t4aCZLT2NhYTRsKT1SVm04fFU7YDFpVFR9cG83ZV1MOFFwImRhZFFdLHF4KWh3UyxPeE5LVkt+YFZRSnlwW1NYMSYiTG1w'@;
put 'elR4O0EieU1FWjx1eDYzMy5JKlN0cUleTVdidD5HejArSGtSOnohZz8meVdNLnJMJURhd258NztLdnlhMSlDIk80XVcoYlRUS29rQVFMIWh6cjwmOlFUQHxoL3o4eEphYnJFRUtaJn1TbjI3eUx2ZUozNF9delRkPFt1U2UqZU0rU1VvTT0iNiU4c1VMVlU4RSFSWGdgRFJKIWA9b3FIWTsmKTtw'@;
put 'I0l8YjUqM05vOExJZTZuNyFua2ElU1dHcCNMeiF0K0xFcVsmU2kqTls3NC5Dc2okUVhHWzRSWT98VHJ+PyRkMGMwfHdQLEtxNy5Ja3pmWE83czJTaVZgNGN2VC9GPzBRfXw1b2RtUDU8e15WT1o4JGJJRVc6WTorM3l5RkYuMzs1PltCNSEqZFZiUSh1JFAwfGtQVVFqP3NKT2sxfVBbaDNzTHxR'@;
put 'dF1zSjVLOGNIYHg4UkA7L015TWxWTl5UUUJwa2AvXXBUVjRTZyZ+O2tSMVVjR359ODRLaH1AYyNKUjp9e3wpYnc0K2A5OHNuaWFBNmdmNkdpVXtMcXdMNzBEcWIsRHd6Pnt6elhFZWtBdj1OZzg+ZCIlOm97JHd5TCF7VVBMVFpSY3llM0pqVSxEemBYNWcvKFpnfmdnZz9UR1FVZ3c7SFJjSS9W'@;
put 'V35ybnFvck1RZURFSGU/aTM1K1RZOzBFVjdOZCphTysoYHdpb21tMkVZdWh5RE1lb012OGw5PHUqSmo/XWdealRfclRPSCtKX1k8YVZWZCZqcXRkX10pVV1xMnhbVkYuRXRyKSxHMjgwKkc8Pzc5TyZEYkV+YmE4RyhsPFF7XkdJNHpaPGZzUH17fHg6VEFnfER9L2gzfjJxVW9bRzlARl8uc1BE'@;
put 'WHA5dU4mWX1wKGpSUUV3aXBTLH4iTXYvYXkyY0ZROlYsWkRRaVUjVjAlKXtgVERPTiEqI1E5Vj4wQTZJTnxSPTk8UEM8TyoiPXdfSHV8LjREJEx1e2BZKkQ6JSVrKV41bVMjY19tMWEidW9ZeFs1IjJFImd2SDxfZWBbZ1I3e0RTXkFFaFlZY0ZPVU5Idl87ckwhSW1ZXm9uQUN1d0lCdVIrdWgo'@;
put 'dU9xWF46ZUtdfXwod1p4elk2LHZ3QkdGZ2lYbmpsJEhBX1R1NGRiaiFVfCJFIUM3NzdOVGM2LD92OElhTWg4fTk1dVpAYGI5eTBFJFtrPCZFQGZrVnthNVY1XX1GWF1TeEN3dWxII31jZGwqcSQrVHgzN24oXX1vKWddTmo5Tk15PTtjLntMSDFROztEa0IkJGtpanJdKiFtMnFESH47YSEoPFg4'@;
put 'Qj1dc2p3WXV8cTtic2RWcilbMC5kTWZyIlIwc31oRW1JVUpOM0VeQ1JBL19hTGhLK2A9OCxBQEYzI2t9ezthdFlrPDcyY3NaJkYhUE8wP2MrMjU5ak48fC5EUX08WFRaYHdCbzZ1JDN8eTlMaXFKMnY9OUNgbntpRkh9OyR3WyZ8P01jRWw7Uk9iX0wlM2BUX0B6Jl5laWpAYHZRMih0LkNoXiRI'@;
put 'I0F9Qj5xVGZ1TT95LDptazJ+bTQuRj0vIlZNKElHXnlLeF9HVVs2UGdnVmNMZzx0O28jckc7V3t4WCw6cDBRfHoiXW5zJmIkcGB3ZSRhMFFTRSgpMi5eNk44LilvfG5kXSVCclRJWmZaU1kqY2RXR315PncvOVBmNEpwdzkwZDFqYFpBVCJjaWIvfE0oRFJeYipxKDRLbCkjP3YuKk1ZSV1hWVAv'@;
put 'eGNwLzJGVX18UlZKc3xLeyYxSFsrPktvalF+d0ldYXV+XTt2PFBZNlAmcWorTCkqZCw3KjEqTz81XWR3LnlbKlZpY3tbPC5WRHtIWlhOQF8hW35RXjtGJHx4SDVZenFoQmNvMEJoYm19VVcrPTxVbD0hODRsUXZqLHEjb1doZlswO01wWWBOKmZDcXFsQ0c3WyIxKClWcCo7c05ffE9PYzQrPG1S'@;
put 'WmF4L28lKEdhc3g5dDEmdTltS0lxcGBfOStHXjNGWyxPT006ZXBaNysoYT0mVn12SFtBfUg/PUxraTIrRCxEQGUrVTNqX18yJnl4dis8cXthUGYmZjdwI3RbSHdnU25eJndVMjxUMiZyNGtKa1RDdGNJLFMsVFk2K0o/e31bNmosYkhUMFUmbGovJUhQYlJ+QkpOfDtXS2UwL3EpNFA/aF1ASUM1'@;
put 'TDxzTDJCd31WVDpteypkfV9MPVlQMGhCXm58fStbLCU+Wi4+JissRldoKVF+VVlgOHIrXSRuXiMjQEJkdEowP0JWVCk8VjAxczhuOGg6MT1ydTZnaDRyfWpQPWpvdlpZIlE9T2cqKHZXcX5hPzRjOitYPkVFOWF0MTR7PmZIZyNhWiVmIzxXeGFjd0l1VmdnWG1CXyhfRDpyck9HTi5kQFtjYGlZ'@;
put 'I2d6OFZgOm5QYz1ubiNeNVlIPW9ndDdEMnU9akB7YGouX0A/N3BpUU07TFshRl1gLkE9c19TRjBGPUMvTEpGPn46SHtqaEs8SjJkX3xsZlY8JU5zQz5uI1M7VE1zJnREMnxuSnhiTTBpRCJ7QXM7dGoyQy9fVllbKCErX1FhPm9RcyF1V0Ymc1BFV0ZgSGJ9XkJPQEpBPnN4JDRDU298b0ZSTnAz'@;
put 'OmJSVj8iPENxdis5enZse0xbTiNod2xXO29yL01Ie2wmJj91YTRhT11uby89TWhsPEBKeGZvaE5yR29uNXZiO1lvRTVBWUNXVGFxKXs8TFhjOD1sPE48NDcpPllTdzokRVZaKiQ5KEd6P3F1OkNGM2ImWE58LD8rTlYidi9yYGpleEo1aSssV0soVH4oKTBYUDlBYDMvR2ZpPEl1eFt6KnxkSld0'@;
put 'KSJ0K3hjfXFgJHcjYzg4PS81OV1BbTBHVUhodUxJTTBgR3d9WFc3JndLYitNW0h1al0qZTxPbk17Z2d8dnFnX21OWHZGViZPT2c6Y3lGRSVVKmQ6ZCtxX2pOIStNeiNNRmQ0L2wxJjlyeG1nK1lKXzxuIzhJaFtvLypVaFM2byhfOlNkcFhPdTxEPGA9fU9jeWZ4VWBNRikvcERVcjkycDI6cFRy'@;
put 'd3gmYXskPEVgR1AvYFc7YmtqbW0rZiN1QmNobmB1eiNwe1t2YjpuN2xDeipzfGpUWmhVU1JeeEg8WXkwdUY2Q3IyekpdKm10NEdPPU9KbCtZKixQTF1CJXJ1c0JRT2BScXJUUFIwYE8hNkpvXiN2els5Xjg/R35tOTdMIV9PNl87S1I7fEFtKlVlbDRIMGg2YkFaQEFRVFdyeDVEWHooQ3o0dypy'@;
put 'Pzx6W1JCLHFvLlE0bCMzSkhoLGhAJjp3VTciP2hOTk4jdyEhWVFIIUhzJTxRWW1mdGAvUEs6SW1ee3pgMVlUMyZwMTpee3REYXFDRTQxXVlGV059MkhIJHxyOFVwLFVbZ3FCZClFMGdoNkBQbkF+RGpHYS9VLmRHNVVdSDRsTFFpd3RFYGI1QypsfnR9Sip2K0YsSiNVek56XmYlS1tmZjk4Wns6'@;
put 'PFREQjZUSCx6WmgpWkV5ZCVwVE19Y0BtKiZFeEg2LGNxZ2A3P05OLkhvUyk7al00VihDfU5fPiNjXVUrbkk4d3UzNDNnMjIyLjpeTHh6blh7QGxGdjJPTCp4fkRGXT07RmF+UChVcTtObEp8Pk0qTiZMbCY3ej9XZFdtLiUzcWFtKHlBMF53T2s4SCR1Rj0wM1c1LCl6NyhuJDRDSFl2IzVGTSxX'@;
put 'bWhFbl9ieW1DdihpOGN+a2lJd01FXWAqPSFYR0pxQFZAXSNucT04SDpWVGFiSVliYk9JMkc2LGV6WDo6JUhFWm1RPzdiZ2ZASnwrSlY1fV9AI3c3VEVISGt1XSRsLHo6L0VgN2p+OlEpXkVRcyEhUCFLbGE8X1d9KShQYHoqLHF9LGxFOEF1KiloXlc8VlUhRVQ1Nkh+alcmRVQoLjY6X09uIS9r'@;
put 'TWxTcy9qYnI9T0tKPnY/P2VNIWRrJk57STwqO3V2Im4xaHdFbXdTMSNUJEhoLkpqcnQiWkJrWWt0fEJ1LmhDKC5ER05CM1MjJD8yfS40Lk5xRkMuUllDdjtZYjUzYzE0R2Z6czV7KlI3d2N0fkJEbmwwMyVAbSxAb2gqM0tFI3tLP3dvRE5AUnc1IlV7PWE6ZDReXXg/PVc7WmU+c1hZTSZMbWFr'@;
put 'RjAzTXg7bipPSSFkNHM5N25vTXosd0VFQnw4O20xTWdXJStZfVJGYmsuREAoIlNkZmlNbyolRFhZKDV3MkIxYFF+dU1jPDZQdnhKJWx2aEVUfjxuJEZqXSguTzk3OnU0TSxhM0MqJT5OPWxLOS5vUyZiT0o1cnZDKm1lLyRCJUwwNUFDajpMeGBtNyxlZFdmTzdwJDFFTDZnN1VwaFJHSk04NmN0'@;
put 'N0NTYCl+bkFAblFqX3l9Qzw2IyFDVUlUVSkhdUhBNSNHWHMqeDxHTSMpN2Q9bmtdQzk3cUVmInh4NjshaVNERE9gOTFwXkdXZHNVOF5bRnY+dUg+cVtpeGQ2LiYzdjRJK2BxNCJaKSRoUEw1YWw8a0wsUD0/eiJiNWljd3RzUCEjdmN2IWJdWms6MixKXk1RaSpAd1Y2TTw9QltIVVE6ZTEwXj9g'@;
put 'JH1ZK0lHZzhFUkNCJno5Q3M3bk1SSEU6bTpxbTBkI2NRNT41WXIuMH1ffSNsSlBPTyUmbEhVa2FQTjBpMGB2PD42ND1Ga2kqOTc7aVA5ekFyQSQ6UDp3QVM2JSRPaGNZKkFpIWEwNXtHNTRSdUIsPU1hTHNvRkYjP0VZUkwmQ1heJmM/L0lDbXU1SywvTXU2USwpN2w/dlZWfjQzNVZIKiQmVWJr'@;
put 'T2lYZHBwNytSN0MmP0dOLkhdZFoyQS4ucjYqSmwzVm5SbXREKm02dFhdaDhATmFFdks8RywmRVdVPG11UHZnb0tmezBac3FfQ1FjXWZtRmhMXTtSTComOjR1VSkqPjpvREolWX1XP2VgfDVaUXBoRVpmYWF9akAvUS54TWtTbVdnWW1TUU8re2VOfFtUNzcjLGw8NlY+enZHWiFeNms5aFBbfjl8'@;
put 'fjo6RDpmZ1hIVH5tfD53N2ticXFpLitGdm4yREo6LDMxd3xgMD1adHU4b2ZPVSQ3Rm5bRFQ9ZHB1UD8zKkBCLH1ScTVJImIvTDN+IXk2IUpuQEBxazd1PUJNWFUlanc/WCopKUUzVFQlOUo7V1REdj5tMjhRUkRzWlk4OGByQiRGJWVrb0kpJn1gdSJ7P1dmQG4ueSV3fXZZR0teImkuczkyJkh2'@;
put 'XiRGTSJSQF8hRVlVaWVte0VCPXhid1UpZnR3cEJkciRediwjPmJEZlpRY2FXbU4uOENsQnFCJUQ0ezEuYntxNy5iJSZYdStWJn5LbXd1NXskZVEsQiEid2VLfWh3K3ZhcnppKCRpYVtdQnB0Vn1XJWB0PG5rOF4pX3tyTH5QYD1+YEhKSGVReEM0KUVIUEBKdF18Y3JoJik8NjhAMkpZLFBoL1Ip'@;
put 'ITNZVFh4WChSLmJFLnJGckBuVTlbST1tSEFxPSpuPmx9VU9ofT0vVUFpYXlWVjNBW2BEcmxLYD40c2ZjS2ImOS89fCYpbVgkUHpVVnxSJlM/XW5gWiN1STU1TThPUG95XXU+WyFbK1ZnWD1XT2t4SG5NVVFrfDorQm94T1RQSCtEYk9AZzV9Um9He11xVHJIZm5UWzwya1lmRn1QQG0sbyh7QkEy'@;
put 'ems6VTA/X3tULFNXKiZbZDJ9KGtBWkZiWnloYWZrVVhwJWg5cXFoTHtDaGtmSz4vcjtSclYmV0RPdTQoREsqXj9HOE18VT1dbj9Xa01pcDcjRzdQNzFgSColXUA5LGo6TDxfa2R9b11qTGd4fHd5NTlsImwlKjMiK0BQeH1QajZMc1kpdmB2MGsrLH4pSGVjdnFJej1fOShHJmRjSWc2aiMmeF45'@;
put 'UjZ7MCJBTSVEbVBGc3lFPj51WC5CeEZ9R2MuY2c2aFtodDl5ZGx3ZUxhLnNreWJNeEgxZlZ6d0JMfG5XMUhDeyNkUykodiYxfWZ0ez40b2orXWklbF1gYEk2QTNHdlhpKmQuK2cobiRWJTFiUnczTW48SjcwXWZ9ZiMlRWB6WWspNFt8a09RTnEvKDNYV2d6Rks3Z0wpaXw1Zlg5a3M1JShKJDYw'@;
put 'QylZd010ZGI9V2dKW2ZOeVJvcDtecz4sVilwa0lbd2hzfHk/K11NOFhHclYvKFlCb3d0YzRtIkc6Znh5cU59S14zMD14cnAlU04zWEpvZi4qNTZyOzxnOEd7UDUrYDZPd3UvRVRsbmtPMzJndUBAeHM1L0FGRV9Ue1p1LGBdWFlhM0VaPl5NVSRlWUgoemApOjB7YHgrJHAuIk4hQCFOJUVBdFlF'@;
put 'QlVBIWVXcztpdnBSfjZ8RD9nJm1jey8keiZOXXZfLmA/LiVCLG1IcUdBMypWeVttfHZvJT8uJH1Hc0g1cXFtbytaPTR3I2IvVTFwJExsSWVUZSksWHJYbX57OUFCZzFzXSlNPi9KQlUvYG08V209dmc5USt1L3dWTjlKWHQwIXtDUDlzLzV3NT0kX3kwbUY0M3hMMHlmYVVzK3tPTEckM0c6fGNB'@;
put 'W3h7Jkk8Ukxabl17UTU+QEMkRiZsNXchQTxucDF4LkYya3FLOXFMVmM+d258OEkjQXRUQEdNaWZbdGcuQkwzXlpqJGUwYTF1a2k8NjlTXV19ZnU5Kj4yd19rYil2ZDFFb3IuejRCYmclJVBgQVl+MFUmJTsjZTcke2BKbDd1W1U5ZiF6dD4+Qjk3QX42RikjTnBAfmNVaFRbLDZ1VnNudmY+Zn1V'@;
put 'QUd6PTlnWVheNXtLLE4sVVdLQjBfQ24oLzEkaVVBOCtKOikscDFyKS4lez1odmpbdCs0LkxuVTVGQ35mWW5DckU7KDl4bE84dzo1eXFLWEQzJHFyLGB3JjFrRXpnVHwrIz9ZNjo6X2hlKn0pLHhrdyFXQjM/eHIwfE5QL1dCb21aRWZLVn4wY1N4cVohMG08bjw+S3oxNXJLeTkodC5ZcDpUSyxv'@;
put 'ZXY/Wi5uJkltX1h8PSlOR2lVMGBwclMrV09IdCFkbXAlQkpgajIsX1l7RUcmMDZXPiUuLmc7JThXT0Q+XnpyY2BdQSRDViMyRWB3eShSbjtyLEhjU3coIiZ6cDVlKWxYTnk6WXAhZX5VdWZ4KjtmSF5vKllpMlt6TytrNmpASFNIdXR4QmVyXV5baFBlXyN7W2AraCZYR2tIOEwqSWVqPz53bClC'@;
put 'Wzxtb1VZNTspWVdjWUdeQVhFSC9aYF40S1lTUz8+KjYwVywkcXd9N0BiUVFEK3llZGZHTUdXS21jeHhxY0J4Sz4jVkUuSjR6RHhpbX16dSZWQ3JLKEFHI1FqL0lYJnFBSVUsQi9SPlJnK0tuKHB2fCMrYXYvWTtDUEROJU5hUX51ZVBZX2owR29ddVYseWAqcCIyeGh8L09MdCNLNkI7Yzt2aWxi'@;
put 'NGBGXkBZQHszc2UrOGhbUCt3W115WDoyaiUkLmlWSSlIIzcsTUlRMWRDT0NDSDt3bHVXIXszZChnOjUsTHVZMjY4al9hd0xkTjZMemV8ZmswQ09KWmE8aiZ8L2JHfXI7JmFlK3xxJiFdeUwsW2YuWVpUPGhOWipMNWVWP0UlX0NSak5lW0A0VXhETFB2ViY9WjReTmZia3pjY3FCaiFrJCt4anpy'@;
put 'bS4jMyJdKVlkOk1eQltMcE1eLypvc1YoLlIzeFZfWGwpbWB8cyV7YikiTUhtQiNraWo2WX4kU1Z9O0A3PW4/Umg7YSVqRzZZfVJbfGdZY1tbamoqRnd4SyV8N0pPQlhuYjU2cEdjW0d0RHchOmp4RV5FSVsxWEtnI21wPSN6azMhMEAhX2dZajdWe1dDQkwiYkZKSXZYPjZTdVY7eF05KitQekRH'@;
put 'filraGlUKFhENCpXdExMY2V6Zl8zNzUkQEc7P19KWjt+Rjx8I2NUL0N2M0x4WjVsMDAmRWkqMjZQWmwkPHBeem89PTZnRF8oRW08NytrNSorQWwoPFpxVUYyb05QSTdDQzMsP29VeW07eCp9KHgiOXQqIVJ3RjljPHhbNDQlNGs/Jj4lZkVCZGlOMj9EbigzOFlmcj07WXxnT24obVFrdypmMmc9'@;
put 'Lz4qLjspUyE+bldaJiwrRyoxOCZDdzx+MGAwQ0dIRDN1In5ASEo0Mz0rUFhYPSZVVH4xKVJrekxjeSJ7RThRRUdVPkBRfUwlb2pAZ0FEcSZ0fHJQOiw9ZyxtPWN9RTghQCpzODgwW0FhXU9bU3d0LzUiYkhgdF4+SlchMExWbGJLXnM2eTgpaWJaTWRJQyZOTzpTYFYyKE5kYUg6RDwrIj4oP0pL'@;
put 'S2QyNiZXZCIpa21PQ152NUwiJSovQFpRcVBjTkkle11XKnFVS0AyRThYcEJQXnpdfEpwY21RPT5bS14peUFwPlcjZF1Wdl4hLjZzX298OGVDZkR4W0hdVStIeTdyfTBjOiFLfSVwR1BTdTw8Nio4OXlgfjc4cVood2I4K1RZPVZeQ1lPOnR+R0I8d05nM2JaZnx4MGU0ci9jVXlRL1kuKl1ROzd3'@;
put 'fU9jfV9hbT5fTF41eTlFJm4jTyJuSHB0SCxGZSpdbThue0NGfkBSfFs2UWs+ayhzPGF8RFk1bDN0fSt+eT59QmZCV1Yrb0hJJiZJcWBPV2hvWy44MFRJPkRVVTlKcDIyclZ0KzZzX1smJiU7diRsSld9Z1lxLERLNHE9bjFZTHRsKCF0O2pUQ31KaFtyK3ZBX2ozXldCdDBsNmNwMXxCaDhbXjh2'@;
put 'fDEwR1Q7e3x3Lnh2Nj0wbylka3c9LmN7dmNiOjJkS1gxeGFTQGlyeHglQHVLN3EmT0tCZl9JMDJaTnpoUWdOIjB4bEtUX0FHJHs+e2l+Y1hqfVRTWHtfeUFYMTpiKnpeaiMjYWF0QkVRWEwyNFsoaTl2WVpvWVhSbWY1QkZKdEYpN1BtfWY5S19heDkjc0dhMWQvQ0xvblg+RDR4K2AvUCM7XUkk'@;
put 'YnVbflk/UGEmd0lTbi5MMVBFMlFmRl4qNC4zZTxtQjVdeDtCejc1YmE4c0RqTk4hNCtwMVI0VGNlT3UlQVZmfDVXbVA7OSZpezkkbDFqezhjeShbMWc/Il5PPz9JSEh5SkNxP2NYO2NSd1l3JFhNMmhYQzVoU3F+OTxyJiZsWzIqK19vMzJePkEqWyREPzB2bkVVUT57LzRUcTEhO0xReTF1cDlZ'@;
put 'UCZITTliT3Y6UCUrKE5rWkZhWTQpVCYhe1ZEVFE5WkhtbjdZWmE8T2o2PzZRR3dIKip6eCY8QXpjVSRpTXw6Lyp3akVBKnM5aTd9RTx5UXJERmZjLms7KGV1N3Yyen43MGxWN0pvVVdUYmJiYXY0Vz49fV5KYGFlNipQaEVLam0hNmVVUHY0fk96PXxeZz4+VC9oa3JJODxWc24udFBsdzRQQCsk'@;
put 'Yml2ODY6amMlQiRUSHpFRWc2Sz57QVE5SGJuKHp5NF8+XzgwWkA8b3w4N3E4Jj51fHI4bFNWPHFFQDBiTUI3PzJ5ayZXPGElQWo4PzU+bl9fIndWTn5UMU9sRWwqKGc0Q29WXUszN2VXVypveiRZQ3Q0VD9xKlg2dkZmaCNXQn1DSyQmWkIieDpORipqIVp3Z1txejg1TlhYSmN2VVsjTTk7eWdY'@;
put 'XUNkPGpvNUMydVQ5bnwudVtPaWp5Tn5iIkcmWDFNWXdqKmlEcXY9Zjs3eVF4WSJPY0dGVG8jZEZBPld7fEIiVCx1QnNHSzk1O2YjNFs9JkZuUnAqZFJyW0EoOEBYTEFmT0AoW0tUfmZQbSZ1KzBtNzMrYGorJWBZW2g1ZWR2fTN6NWRlWGEmYlljSCt1O2hXT3c/NCZlM1dgUSE8MEYlYkdHdyFX'@;
put 'YCVSRVRfRFh2Z0NXVUUmRTBsKTArMCthW3V7V2VPQmVyN0Jdc2M5R2AkV3Jna29NKnRoWGJPTT99TE8/fTg7YD95S2AqT1hTOzc2XUAsQ2NKTCFnMFIqNzZiOnltWEYqJU89XlpEKWYqRyxCQGxwd3FkZG4/YGpFbW85JWU6L1khPG43biglZWxMUWlZNVpsfGB6RCJbL2M4QndmP2ZvNSM1SmdG'@;
put 'Sis0IyYjIj1EUG9Ud11sNlBhTDRUbmJiTHFEWUVpOiVMZSohX1ZKNSpuelM2Nl0pO211PG4+TilJXSFHKFM9IlprSD5TZClPWSt5IkpicWZFKi5BYCZDT0NlMm56WiJWXXNfSTdES2pycW9PVjFRLC8jcTBJLF9gKFtEaV5gOjBdTi9qc3c+d2J4I1J8UkQ8W011bzd2TipGRnovRGJ7S2MsMkZD'@;
put 'WztsY2RWaXp5bTV1b0k0MC5Nb3ssUlkxekgyJG9PMDd+diw3NTtGZTtrfUk3bEohal1sczgieUBZKXJVT1JWNmopNllRdXpLdyl4aEMpTX1uWXRTYH5iNE4yMV9TaWRATXxJfDVTVk88L2xBK2Z5JXFLMitHJVMiaXpRND0laVd1L20vPjdRP1kqYzFIYksmcyFoREIwK0NafFM6JnpYKXo6X1cl'@;
put 'T3RVJXBKQ1oiZCJrIXM8SS56Ol9wdH1NPV8+Y04qX1ojQ1cwNlk2dVhlRSxyeiE3QzIlR0RTRFNvTnwsUyohPU04e1NTKjgsWnxxTlRoRn5IYS9uMSVremVgMSxZb1cqRzxPKzRoXVR+bixNaSpPMXBTLEdzSiFibCpXVnN7MSghbmNBIj8hfTBXI18oKCJUUSI5RS5QIW5LJS4uaH4xKFUzLDol'@;
put 'OExWbXxkVUJdZUZROG0+KERZYSt3cHFAJH4hPlh8Sj1ydGNeazt1XiFxZzdLWEQqU3dkQCpBJkJpOyErIXUldG5KZjdLKF53Z1tiP2V0TG8wPkNFUCJHJU9+I3A3byp5ZzRvUnBPMWtrSDkkUWksQlQqNSk4dml6ZlhLM10hT1p6ciVaNVNybytwQVZZaC9CUUMqUl1+WTdsZU1gIXU0P31hIUdO'@;
put 'WzBlPXFObVJOXVkocS89SyJVdngvQTBJKl5GZnZPZVpYO3hHWnpwS3M4XmBqYGVsfjtCMV1PXVR6aSNzfU9dVDA/Z1ciTjxbMjVlQCEzdjV1QGBYXVRfYyR+fmd4VTRqQSsxUWtkL258PykrfkR6LFFQIi9LPmZ5SU5UKiF4azE+fDxvK0cpWltmP2ozX0ghX2tzaSY9Jk45QlJXRytNe14/SFVK'@;
put 'N3hpRnd9RzRKZi4sd29jWkBzalZSUGQ/KFF7c25iT25VYll4MGdWXSRTalQ7KDl2WkFzd0B4Ql5Jd2MqZjlEZWQuV1IpR31ITURTRlVHdFsqVW1HKVd6ek9SYCNaRFFfbjsmSG07TmFhKjx6ZGdrYixlPCxaeFAlMF9NMUN+XygyeHpUSCR0c3FeX0AhXXteUTNRN0R2MlFaYEkoXmosVyFONyta'@;
put 'aEphIUd6Z2w0cXMkRnIsOnV2RG09eGVoJGRiJFcsVG5hdUI4XjhuN1A8dFQ5TkNqPVtTKHdMPmgsMXt2NHRSKXReVEZeUXVvMFBDIV5VPTNSQFQsNkcwMUp1cElDaiIkSUJxdzNmOENPfFs2e21zSjJEPDtQVFZyYHRLNlZLKzF0Xk8pUWw4LGxvYz1RPWVvWl4+X0lmR31gYGdsRFojd0xHZVk/'@;
put 'MGRufTxIMkA2ZCR0VElzVl5UcG4vO0I2PHxdciFkPW8sSW0leHNxXl1sXVhjS1h0bHwkRHZWbllzLnBdalhtbUN9N046ezAsMzhUXyJRW0MheSwmKXRUNWRoRW1dPWhyZn1iTjJGcj1reCZkXldnbVh6OWBadVB4diI9I2p6WF8qQz5QOH1nIzBAdD0kN2lFfCYpQjthLj8hVmhVV0YpU0w6WGIl'@;
put 'Y35meSE7Ijs9fVMrVTwwZE0pbURybE5dPVVfPlQsdlZycjpFfFFMVGFpTlIwSWFFT3YxKT4iflUsKFM3aTdQN3xNWVhTUlF6cjwybVJSdll2ZiVQImp6d3NWR2V7UnxJSF5yeXZlLFA/MG8sLGpdIW5mJVA/MCNpJW5Ublh+Kz59NXdVUyN6ajpAVW0zUE8hXi48T0QuXlU0PEwxdzUibTwwbn1B'@;
put 'bGd1enVFODk5Rm0sd2UqZmhRSzBKK3c6ajVDNEEybHZdTSlzUko4UjVmaU9tO0VBS2F8Wlh3JmJwWzlOSCwkT3d+ZnJkMThyLDRWIXNWQj5YMjJuRkVycS87JmA4ZygmYWx9Uj5yeyI7N1M4WGRZNS5rOlRAVF0yczlTJVg0JVttPkxXbCJxe1hLWz9iNVFTXnRRWEMwQ3YwJTA0VG4sVl55OGxt'@;
put 'NVM+PXJdJGkyek9OZGE2MFhQLytJfSQhWFBuN1A8R2VASzJvcyxxaHhNb3A0PGhrM3czbyU7TyhKJipVL34iZ2dlNnBeRSVjZUU7ckJeeFIwSS5LUixBS3cwQzhvPkt7Pz12PDNqKjZHI3slIi9UIzpsPzRLX1FDRDxPT3BjMCo/YjBwfFdXSVFVW2VgTjtObzo2XiVtNzh4SW9VWlQqLz9KT0t8'@;
put 'KHQpMDNEcW07az41eFk9YV1eKkRPV1ZAPEtqV3VQeVtIdiloaTg6UkxoW199Z0dnSVNDVHs0MT93fmcqVSI/MEk/Uz5ZelUvSmc2PyExViFDOyhsMFZeU1QvSik7eThtRXxZPnwmPFd+dkgpSnc5QjNNRit3W0t1VHRiMlpKdVhYIUIlKT1ue1F7TFp9YGFmLjxHPmVtXyYoSHdTOlkjOCtRd0M6'@;
put 'Jk8veEw2aTY4WDc2JWV+V1QhKzVfM0s3LDV+WWMhJC5LSnFufTUmKlRUXVRLV2o6TXIwcDg/LDRmYFhrPTtMIWFWQDBUKVlPOSl1ZVg+MG1XYiJdY2IsaGNycjVgIW5UTXZjIztFfSo7OzwqbExFIX0yb1RAbyolSzh7UUxAanFBRDFGVCZRXzQ6NEUuS0RQcyRgRSpEKHd2XUtdR2VrKVNKNHpv'@;
put 'XSomamEkeCpaanNBO3VfeThwI2lNUzU/OFpuSSheanEsMG0qSXZFMCYqS3oyNDVUVHNSUzFEQldqdkwsLylVQzF0ZGN6bHMqNT9UXU1jbEx5L2JSbzlNRENIIy4lfXEpPXYvbzVaZyx8O2FyWkg2JGBPPHZDcXVJVGVKTzNeaCNdey94TVc2KUA8ZVJMP0sjQCpzRCgpS103aSNrbGFIISFYQD5G'@;
put 'VHlGRiEyNWU8MTA2L0ouWUk2JWl9cm1FZWxrPGVoI09rM2xtWn1jZWU1Q2UlcDR0fG0oZCtTd0ddRmN5UnY+LmByc0wqYSFXN1ZydyxPTG08JG1VcFB6SmVKW3RtQSNgKWR+dEg/W3wjSy4qPW83a0dKfVprVEcre3YxbU5lWyZJaXFqNk1vSk0wR2ZeK0Bjc0U2ckt5fkF8Pz1rX3cwIWlsKXdv'@;
put 'PkF9Jm0oL2o6WUtBRmgwMTgucj01PE1bT2VwIjRgTmBQLGkpMT4lSHU3LF1xNiFUaT1PL3pGWDl4QmtCTEI9aEJ0cTcyUSRjOXw5eENROjtVTU4rUCp1c3FpUihgb15kY0omYnJkMUJ7Uis5d1sxVmpXLGVpZnl5UlNtMXlDXy8lT0NBdUNVLyg7JWRJNU53UnR3Y150P3NFLkVbdWU1LmcpX2B6'@;
put 'P2BTKzRgezlFfERya0lyYm50PkxvRDwzYSEzTEErcjxPMF42YTFbV1FhR11xUn5tc3FeLlklLihXb34kUTJ5bFpGNz1baDxKMXRBI2t5RnQ2cFhKIUMybEFsNSprW0hnb3g+d3ZHPSNZJCZMd3g9aT43e3liLGNtQ0YwUFFsb347TGtMN0RTJSIvO3ZuSnghOXZka1d2JD9RXkplRUlIPSM8UFY1'@;
put 'eGxvMnQxJTwhP0lVZiF3JDZITj93d09oTUhAImQ7PUUoSGw2KCxWJFl2VkpDOT85Nj5YanNZdGxAemNMIk4kcjZCckZ0T0ZfL3gkTHl7SnA8eGZqS3JATTxtcXRzSEJaa31JNktdWndwZkpwV2hzflpsa09RSWAuOHo9VmJyRitLYn5ZNV1xYUhOcls3I30iNmV1eEUiQFhIRVtoTSUiVVMocUlX'@;
put 'SWlILjZtV3JNc2F9eSZ4aDlXT3s6ey5Vfl1qJlpKWitDXmtGJUNnL0NPPGJ3eThSUnpOODwuLisuJUJDMWY8OFBLe3hXSCNgczlHVi90aEd0UXBUSFYhPHs9PnU/MSZFciFdYiNBbGtIYGFdQGIoOz5mI0Fsa25gYV1taCxWaks/KXJFc049cSVWTk84Lj1aLjouT088MkB6TUtfPG1iOzczaz46'@;
put 'eSpGSXh3d0JyJjBATytoUlcmKmxMXiFsazYvfT4mKCQuIWJjeHtGaFA5Y3xSP1M4TU48aGYraGBAYiF2VlJ2NUR6Wm5qaGIxajxjSSteVTdmN0M2XW9qTGxxXlQ7MDVHUWFUb2pgI0hrUWQ9M292NTB7O1piWEBddkVyRTF7bElHclB2Li9SYDFNOFRiVXs5eEp7PXx4SU9Db2tPRyVmKkQvND8u'@;
put 'ZSljJUlLNStjL3ZtMWQsL1A3cSFMa31UVTxfYjB1YE5hWEZIQTo/aHZRXl9heT06Xn5vfSE2e2dgckAxIShmZmx9X1ZFL2NCKSs0MnN+Y3lSK1U1KjcuKiZePXI8bDxsZjhMQjE8THlObGs/PDE/UD8wV2R3RytkY0g9PVFsQ01QT2lON3pSSk02ZGA0fC9yRE5XMWh8QG8sWHhAaTVycFQ1ZzhJ'@;
put 'ZjZpeWQldz1OPFQrNEhyVzJlXkBpVDxDNSUrKVNodCRqdj18T3pNTFpzaUxaOjI7M3JMNy41U2NbbCksZjJfSC5OPG9PQ3tZVUJdXmFmSGsoY0tYcDQ/fCNBL2o4IjR8MiZufTd7Y3BTNmB6dyFvRypNcSQ6N0lrKFczSGNuL1FPV2JffWM4W0Ryel9eOH12MVE4PE53anpzOW9rKXpwLzlCclgq'@;
put 'd0RuPCJeVyI4Ym9RK3dBTl5gOlt0TCl7LEN4VkQ5bVZjLiwuR3JJZ1hzcWkoIVFaL3xRIm0yOTlrVmVRJEBLc0tUI3EuRiZKbTB8Mm05JXJAKDg2UGlaMHZqQSsqeiY8cy5TSV1adjhhelU/c1NNI0tRK0Vlb2JdUiZzVTVdQ2UkYiE7cy5VVnt5L244OmBxOHxVSEdmdztgYnQ+bkY2Sy5ZPiI8'@;
put 'c2UrWFsjIXRwZyV7KDZNRUJOWVtRKERyVlBHOkl3R3A3VDlIR2NJRHdWWCo1OSpYei5JN1lMKjduUURlaXooS1NrQVlIMlIiKSRJN0ZiP1dXS0NZP15Rc3d+dit3WEI0d2xMI0NaaT9NNisuT0N6RjBTLCx5SklaakF3V3ZSdjxbY0V4e2FJNzV5X3BPSSFicFsvQzpAKCpqdVUrO1czd1RucCYl'@;
put 'VV9NR2oyP0NiPV5ONT5sO2hAIXJzcjc4UXpVez09TXpVe0ZeLDFEPj5GSihbN0YmI11xP3hraVdZTTddXipvPE1URV50TFosczJbRU84P2JPJTQ9MVE6aUwpZTw2NE02U1BDbX40Ims1OVAhKC5UQzp0O3tufmgkQ2VJMW89Kjh4czBrR0t2JlpqbE55JWRTRXlSXjlJZWFYYkEhNyZQS2BofGdh'@;
put 'RUdRJTZZfEg9KFNqLHopSl5wW2RDSkw5bFdiW2UwNGUsditxTX5qUCQlVX5QQjliMCJEMiYmTHR0YHo2RT0zbWhCPVB7PGVdTmp6RyRId1dPPUJVS1BHay9pQyR5LzQ2SjhffFhrWCY1UERjJm1HP3lheEQsXyR1dSUqWUljbF1oKUlpXV0mdztsRTo0P1AuQlVbXSYrT3txZU01UkZOTV5LWWlZ'@;
put 'LiU9bGtTJENVOyQuQjVdaUBGOFNoUDsmdnsuSTdZVzxNKjduciFTRCUve21zLl1pOEIzVGRoWHxDPEEqJElfaSV5ISM6ayJ7bj4qJX52VzwsdzsqakJLYS4lbExyISVDOC97bUA1enBIP0ZpckV1U11zWEplbkR2dFEvSnMkYjVOc3tITV5BYzYmVnhZdEx5Q0ZEcFcvTUU3PSkxPyFadTEkSiRL'@;
put 'PFFJXkY8Jjt5a0JgVSQiTF99aXcjKTtmPTxIUDw5NiJgTGopVz1gVHprQHxocD44RGpdZmQ8Y1Y+SVUkZmwoVD42M3k+bHt7ZmElIT1CcWY4MEZSQjd2N2dZMn1PP3FJOkZGTFpOU1d5M1RCZ3w1MmpEWj1PcCkjP0ErWXxSUCU5dGVFczBUPztSN0QlQjZ+Z21vd3ppZl46KT1qJHYwWDIrNURX'@;
put 'SElNYiRfKmB7MWl3MkhHcjY8bGg9PUhhL25Xa103MSUvbk9TQU1KS1MqN11GcV1sWFshck9RL1J1NUEvXU00P2lXSElNVThdO1s0SDs9IzV8MiNkImtvUzZgWSxNLndrdjgjQWQ3eTMxQ284VHNzaGFgYVM5ZndGbSs3cGV0UEdoeGxoPT10ZWUoPGhNZiwuZUIzKkE+LkRFKDEmTGVkOmh3bEtE'@;
put 'JV0vMGZFL3xdUiZ1XkpEeDtGQiRKPHBSV1ZMSFFqKWZXZHBYfXhRUU09JFphc35JdFZ6bj0jXXYwfDJhc0MvQGUoLnR0cyEuek5sL0swKlhlRGZbZTleKmBkJUEkMjlMRWAuYW4+PjA4QGoiZUVeUEJ6MjckfWBNU2pFMm9Vbk5sR3MzOVcyOnFxWz98YGx6TlRoPDQ7YUdWcXtsc3pme3I8entK'@;
put 'dkAhZS5uRFo9T05TaSgqZShHNDk5ZyIzTVooR0BWTnB+L2ZyOVc0WnleISJZRzkpWUY1ZDRFWUtYN1ZKInNlK1F1Z1lidDNoPyR2KXZSK1g1R1UwKT5VN2JkXSg1aj47WmJ8VSNvYiQiIzM1TmJTOyR1ajIvRER8Zl5bOGN8VTI8ZVVoOnp6Kz1EJXAxPilKSFZwOnVvTTs/N2E2WSxAPnlvbmVD'@;
put 'M10rfCh5fU0kPnFDUWRbJmA6aTJ0OTg7PUFAYSU1MVBFOml9biIwZ05sWWh1TTk7V3g7IjE6N2t+aDleXyRlUSlLOjgqbCh9azBTLzxeTV4+VUlfSWwxal59L15NIUV5ckYkM04iW0QzcmFzJnk7en5kXjNkayg7ckkkaXwmdjdnbkpdZUZBNVYiSnQ6IU81RFgwNSw4e2ApaERCRUZpPmpJKERJ'@;
put 'LCswPnpOSkFxQkUuQWZLK0wqSEN9NkpXcD5hJkNbcXlaK3I+WFFYJHVLPUNtLCUwRVRWO15ESm1VfUFnZEBfb3E+SEQ/W0VdakM3SDJGJS8vSiJVL21oa14/dDk8VjUqR0pqJVBRVUZzMyhASXklcVFJYG5WW1E8fUk/W1grblBadiskU2lob31HflRHVmBVY31LZX0lcmE4JjZpfjx+L299KVN+'@;
put 'Z0AoMjxPbF4mcixEflVMaFBWZVouakExNWpuT0l4aE9ufDtSXiNfbV9OcTB0MHxyOXIyOjBzbH46el5XOn5QRFNoU01bIVdLLkIuY1pha2d5ci5CQlAuLjM6I05jQF1QfFohVnVqckFnOntyfkEwWW1yXm1gRkM9TlZveCxlJWghfFEwbWlDflZoPHF2JTYrdSVteXlCckUrXzVIMnFkPyhxWFs9'@;
put 'JFF8cSwpLCUodEAjIT9mXmYqYHs/P0ZCI198Y2tCUW5sXlQuRV1pQitqVz08T3I7e2dTXk8kbntLOU1yIWBRalhbYDImWDYkTCwoaz1jKTVxWDpTZiQzRHIkPDBlSEk8PEtod1dyMXBIZkMkW1pOe0M8ek47PzRFTm4uekxLTDgwLlM+bFRdKy4zP0FoaSEzYE5qblIySkhHdG8vQjVuVmxuRCRD'@;
put 'YSYzREM2XlouOXZMWT45Lm1LVEAsMUMobC8xamlfQCYhNVpxb2k8aXxeSzhwWFMrend2dz1UbXlzdX01Wk99dVUsLiZgNnc3fkheV01tSGFwbyYwOGFuUU1jPmJJYnsmblghSnk9Vj99OWdMXy93cGtvRmFLeXFGaGpBZnVee2V0OCJCNnlGaj5saEBTdCp3TTpPT3lCIzomb01EIWNCOyYkd0kp'@;
put 'I2Q1eCxRK0MvflVMY2NnaFMie3x3cEFiWXdtMm55eHEzXj5wZVhSYThPa3YwNHMxdG0pRSZ2QCZUd11MQj4jRU5aXUVHRmFUe2R8OlU/Wm1jJWZARz98al4kb1dlKX4wPy5eY3U0XlYiQG5LNkttRDhYKHIibjdlMW1HUDczO1NfNntyPSUiW1dYOE1mZnprLit9SGN5eHtKa2oyTj4rOlJSLHw6'@;
put 'V1AqbTRTMyRJK21lXygqNCsmelEpX2k1Q3wldmArVzJLamExaXtAT2g0MWlxYkljMzw8UVdPJHhbc3kwTUZsOUViTFBELjtDLF5pTGNuSDNnKUxHXS9+YEVnbCMrNz1EMCM8S0xRJHFyISovT3h8Y0YldSZkPTE6ZDI8NnQ/fGYrdHUpQEBYTTlwZDgrUH1eY19QW01PdjdwJkZoK000eDZVL2Eu'@;
put 'V3I/P3JBJSElc04xKGA3QyE8PiVucVI0NXR9Tm9La0JTcE1AW09qK1Y6XXwmaU9eenRYJFR2fDV7cHlEdnt2cGA6TCtgOyhKL2t7I3RTdnlnaHo8NlZSZSIvK0twR0FxV180L1o8L1NJYFsiLHUrMkJFL3Y4MVV1VmhuWilGNTNAYztpRFFDOTtyXWo6KE4sPmFwNUchem5WYTlKKko4OSF8YVQx'@;
put 'TSxgQlBjPGBfdGA5ajhPelFSODM5UGo/W0tVOjU2VWphYFN9IXZwZl1zYGddeVYjdyxjeFA7Y1k0aWh4fCw9aGVwLCJsSjlDOCJTOztEZCYjdUhJSzpYaXdtMl9Gb1J8P2ZNI2RDPGdtTmpuamRoIllkQDxkIlNkejIsUFNuQl1uSCQ6PHRpTDw6QnBbKCgqWj8jPGNoSEZTVShqVileXiwpQWBn'@;
put 'W2gyOUJtSWM4ejBBdHFeNVJBQW1ARSFWejtncnxeTyMpXiIpZF5XKSElNkoyXmIkdT0vVV9VPUxmLkRmMDBAKj50cWt0KzhwcnUyIyI5OztKQnAyNlpbUHUzPzdTPS5tLypsQnAyXnRPdFA0OVd5JmNYWGVYMDUvJUQ5eG07RFR6O3kkMjkpI0l6TXlbeVs1O2FOT3QqPnkxcHQyOU9sdFlmNkh5'@;
put 'XU04LzlUbXREfiN2W0g8c2ghYnxYclIwSUchcUA9N0ZNOU1QbH40d1VDbWo+SnclcztAOCQ8VE04Mm5VW2w9TF18O0B7dFRTbV5oRWxySnB3bGxRZlpPdG1HUzZgYS41eHpWRXc6aytJaClOZ0ZSMDJ9N15tXVQxdyslQEJrVyQuMWUuWCxUbTk/VUdnKl03bjFzK3NbRU9hSGNlZDU1VVpeciJu'@;
put 'MDZAcH0uOCJAbTRMO0I8TiJVcVZfTGd6RHlXMFQqNE1yIXBPQ3smfXA5R21VY0RdNi9fYHBbZkEvbTcvKH1rJkosUkljdWFKJEF0dGBbWX0wLn5oMXgwa3xrM3xONzxLX1h5SGpZM10wM0xZa3UxNUVCPFd2SGI9ZS59aVYkNFQ2W0UkekV9NFEsOElHIW5tdysyKUE0Sz52TjAwUUZSIT5fWzlO'@;
put 'OHFLTWZCVSw3QGx2QDl0Mj1JLCYuWG1RZmZzNElNRk1UVClwSDhsbUEsKHBVSjxyL303VkplZ248MUpQdX1mcXlZMFtpe08vdTVjcmtORzYsU2lQMEVnZGNzUS96dmAuKCY0LFooTiIueUUjLEE6SkpddnhUM2IxOTRyeWwhdWxSVmU0eF5SM3BsU25TX3g6RGV1YWtUMm1QSEl0c3dLOF9WQz1i'@;
put 'dV5IK34/NXhVVDZ4djVJXz5UYzV6OUcvM29ZU3plSGwpRX0/fWRSYlAzXyYsZ1I+LjFpbyxULyJsLmQ9WmJ6OC5GMiM1YWtiPDpRZz5YbFl0IUI7PkkuJV86NT96Yl9ddjgpa0B8cXF8Z1hKQjwmP0ZZJnwmP3tgaVQ+Vk1jbTN3cSFuWilpS1hrR0tdXlo8OkUiMmp3WEdqdS9jJGhaMzEmVDJ+'@;
put 'XTckTj55I30lUzFHfFhLdlEoRWJiQ2l2bytTdm8pdyNESiRlciN5fDJ4XStWUXh5Q2NZMkshQnBQRnxYNV1XakBJZzVrRVFDe15oITh2KkxHS057MmdAUnAuN1U0ekZtJDtqZUJyOyNQYzh8O0FYMGpCZFk5WSJpdUs2QnBabHxLVUYhfFsmV2FHKUBML3dqS1g6RzghXkZOS25UYDJsZXJdPWtA'@;
put 'VDZJX3YrW3xHYGVgWkdQNVcyeU0qWGRZL3dsIzxqa3d5ZE58VmMza0BaWF87KExHT3lYMnEjKU5MbU1fflsibGVCeV5qPkN4XVBaJEpxWzZuY0NjUmRRJS86Lm1HY1JDJSNHRXdNajNuViI0LjlBM0ttVF0jVl10cUxFXmRKZl0vbyZpSU8me3ZERlFbMWlYQ3V0Um9IelZsYm1WLGRYeSJhWztU'@;
put 'IXV5Si5sMEssV2VyTk9nbXh4IUtiRSVsWUdJWz0pMzxjOjk9Tm1SIypGNktKMm0pVlE9S0tyN315I2EpWCE6Lit9ZXg3LjB+OW1rUFRiLFloNyp0LFpqNlYqTTsmbkc6Ilh8alpoWjBfPnRIREpRZ29OdUlKRXs9ZlRifXEjdVp2ZyNLVUo4TmZiLFFCbGlHTk4+ez5yQigvXjkuL3NSMiFiVkBZ'@;
put 'djRBZWBLYCpfTyQjWEAyP2FhKCRMYU5FVW40UDVNInEmI3RKPDpMNFYsXUh0aXdGelRTbWt5Pi9GLlZWezQ0VDB3SlMoKVJtW0xqdTlgdntxJE11LHVZb1VMYjZ4LDBXIy8iakdxUFovU2BXaltLeTtTe21MaGRdcHwhczprYjVicE1vazAqLEEkPDF0eStQTWEia2V1NmpWS2F0aUdfaHtme1t4'@;
put 'VigwUXREREw2WDJ8K35lQ3p2P2FFQlo1QE8sZks4SllkSTprWmNpT0JWQ3hlfjArdT1aN0tdbV1UKlF1VE1xQU96JipIVl1uPGBvVV1LSlZ3dj5Rc1FQdlApMk1DSCo5JHVPLl8rY25aNVpQbksjRClEQldnWyReY1QmfDkkWUNuYyY1OVpvNUJlfUFtKjIkPEhDaSFZNXJUVyNZNXZMdXp4WWhF'@;
put 'fmxDe2YyUHgqcm15KXJaT2tgSGVPRXtYVjJQUT1EJGJba1hKek18L3RwO3RsfT9GWjBlKUgqP1ZbUF1MIkEuJVkscUtCdXYmKWtOSUV7XWtWO0NmTHFIQi5tY1JhWUVhdiNbeFdsb0JEaj0/Sl5wfHBkK055OFpGTGw/KFdQWylNPmosb0t6WWgvelRgOVFHLDgmJEMpJGkiYCZKVGssVkFFVTVq'@;
put 'eXtCPytGKj1eYlBvOiJoXlJgOTZgVWdUYjBaak5pL2dXck4vJTdIKzZ+KTw8N2kyTjRhLl9nWCNPaEVbOTA3T0pucXNWJUpzYDsjYUc5b04hTERPUCJmQ3pnQ2xdMz1GdiwkSUokKU57WSQsXildQSQmKSUpLFV7OUVzMTZQOlIhViUrJmphUDh3LG51aTA7IU80WTsjSjlNS1kwX1gmeXlhWC4y'@;
put 'TG9OeEJkPiV8U0tTbUclX2ZvYixhakFgTiRhZ1U8IjdjOV0xVm5iJGJlI0dmJE5nbzltLHU9aiwiPSh6Ukl9IWE6TmxZZkNZTEU7UzMrK11MdlUlYmpzb2hNO0lvam0pLGBucCtqL2tiXzZzTyhHTC9tY3E2TFtsWl1JLH1FKkZ3OSFORShCOjlwJHV4SkE8ZCxvYEJtOUAlfE90bWgmMH1CJVso'@;
put 'OSVgJFVVI2xrcnRvfi87TDBjbD42fm5qU25wc2o1X3wmQkt+OS82Q2pARDpLNmIlS1U2KXA2Yl9wNmJhM1EyQ19nT3NEZXFwKDIsKGo1NmQkdHpteEtFZygjX08xbXhiaipMUV14dkAldD90VDMsQkFBQUFBODAvUlB1d1hfSVlvLDVbPXFjUWFRIiohN2BxM3NUUHJNKDdiUz9QcmwhaT8yQSE/'@;
put 'X2x3dnt5VTlNPFEmQDI3IS5aQkVYPV1qVHMyMnpwTCFWOkJ3Jl4sRXwjdjk6YHFvKTFeQD0oRD9NY0l0dHpvUHoxLkpWVERNSDxnfEc2VG4kKXZDbUsjc1BTXmY7Wn54QiFoKl0wbyxqWGpHdHB+RDs0TWR0b3dVWTx9MzM/dnYlKygsLD5BbF1nSXRQYnBqQT9AIz93cyJPW0x2PFMsSyF8Ljl7'@;
put 'Oko+KiZPLHRPXmtRJX05NyRmWCkuVDVmYFdKMTQ7b0pGRDhYMi5TYD9oIWp6IyZ7MWBUNG9XRzl8K1I2QitHNnVQKnJmey5xTTA+Qmw4TVolJUtsNiVHRDxyRyYrNjxlbF8wd0ZEL0x3MitiLExybERtWGpzUSl8JmBjYzVRXzE3IlNSYXJ1IiZ8SV0lTHlmM1ZOT1hFNkVAUjA6W1pFTHpIITx6'@;
put 'aCNlZX45X2I+dVUjJnJfcFlydDNPfjY8czFuPmwyND5XKERIRUBKRUJMOnFOdXgvX2VLRSl8WUNTYD4wcTVBXlMxNSkoQlUrbjhCPCZ6KXJKY3ZWUTp5cmtiblY2Ymc1fFFuLDMmfXRGUU9bVHwqVV1xcDJsbVQ+MmZSOX5sSmtzaSJRQW1PPStxbU96ZlE4JnAxan1UT3lNIz8oNypHRWNbfXYj'@;
put 'U30xJHh2NVI1dHxNPT95T1t7KUBGQCUxQXxPOSxLUDJjKn1yPiJrdnBbeT0wWXRgeitnaXFXRXFCKWxlMXYifDR7VjYoZG1xfjUoYjxwJk18KyR1O1R8MTNGNFRFVGZzYEV6OlUrbClwVSMrMX1xclo9Km9gIiRbPGwyPU5oWz1Ve1kkRXcjPls5LzQvT3gifW5kKFUkbClTXip7PyhRTkdHeXZb'@;
put 'WGkldDJBUUJuM3BSPVFeM2t9LFJqPm9ZI2FCQGc2bnBNZEtTS31PQWZ2T0FfVylgKlZoKyJsfTUmUDRwb2B7VVBjJk5aSXFvYzw2elNSfHNjfUJmRiQpL2JCL09JTmAmPjphdS51NHtAJWkpQ1BSR29tY0BdaDNRalFdfSJxanVVKDdJa10vOWRfUHZLIT81LilPW1IhY2VRSzNJVH1+OU9vJCE3'@;
put 'fmU9KnpbN1gyYiQ6MnduJiwrZj4hMGFZTjlNQ11HKjY5bi9US3RTc0ZPOCNsajdXSk95WWYhOFkiOnIyRHJ6fUglTkJucjFGbiRgbTh+OnliO3Q+dXMpOzM9Kn1RN0R3fH1RQUU3K0lHJGd+Qnd8aFdWU2g/WmM8b1kwL2JJe0FDPjBtT0crJSpNPjg2anomPFZuRFB0cTNkTHlpNUEjTkpaQiVO'@;
put 'NytaemdIeEZxOXooXUxvT1dDOFlNaz86O2taREdlJVdaeG8mZSZVKSV8VWJlbnM5LDM1QmR5bnBfTmRzSWJzSmFiOTdgJGcjSG5ZJHc2U009a3hyOk8majRQI2tpIWgjZntdUDJPcDAkYzY3Yzc9b31FTkhFWm1hLHpTTjVAX3U4MGdPZT5KTjMvPTR2LGkjYDQ2eD54NFE5eEEyXSw2ODpZK1Mj'@;
put 'YGdSPmprVF81YWNKVX4oMHtpWEt5Ljdod1liZyg9d1M4SE9MMzA9JFhYPCp0RDZqeGBfXTxgdzJHPFBtcmlSIypfJSFJPWlTVyM1YSQkSSY/KkwhWTpOOEBXLyEmOWdUSl0odUdUdEFnQ1F9PFBIN1s9UCgwVTIxKVB2ZlZGXk92Wn1RKGQhd147SDE4RDZ8X2ZgWlhnWjtNOGt6aCQuVWBTMTF4'@;
put 'RSs4RCNxMmMlVFFhZT5LMDxacyw+T3NecVkmOi5lNXJLcjJNJC5AJU9BUlFsYnoxeT06WTtTKGpCSkw1dCZiUG5KZ1BbaHM/Ong8az8wNyR7YHpdPXE2Kyg0Y3tkLl93YjttQ15oZ29beSxeJG9AaEU9MkhaNVU1bzwwUU11aStWRW5zLjxRYTNKakQ3K1JtZF5xYnQqJFE6TThrWlE9MGFmeTpt'@;
put 'cVtWTVdJX3E0MVUpVUJUJkV2cTUsaXNueDpMfFhYRnBRUzxEZDNETG05Wz8+PmB7VG0lfmpLIVAvJj1FVWhGfnQkTDFXYHF6WnRMdUR+WG9MSWVZd3drYk9xfXI0aiRCLj9rRzAhWnpXYGtHK2RleltrTGYjVjdOdTV2UGRsckF3dEY9L3RebSk+TGMjOnZLKj5MYlNUdDpAQkxPQiJOJU57Wz40'@;
put 'K052QzBiZ0c2V3xlZzYzbj1QLmBaITc0QEE5cTlsY2tYZSleXSZWZGRKN0kzPD92PFBadV00QFBAM1J3cWhPRU5za1IrKVJQK1VCYUw0fCpYMntyKj5lZTZ+cltNcl9SRXFYfXI1cnxrJkBzPiVKLEBxb3huIytgL3Z5cCs7WVF4JlcpLCVaaSRWbShObklfI3wwYCVmMGYyfUtbM3VrVGZlZ2hC'@;
put 'dVUmPCEibShefHFjKjdIb1k3Ui57M2dgUzEsa3o5OW1bPHMrdTsjeENiaDZsR0swanZpWlcoVTBobyohNkBbJjJmPX42aE9YS3J3M09xSmN+c2tmOCwpPkYlLm4+V1s9fkswfnMjNVp0cl1+aFdycns+RVZHPVQ6bUxyXW1icntgNSZ+Zj54Z281PXA9MiV4Z3ReUHA2dlV8eHtwX3o4PTtxV10+'@;
put 'aWIoTms/SiwiTSNAMUIlInJQb0leUWtVP3N3dnhJY1MsRDBaRHVqeH5mKWoxMWZUc3duTG5VLiJvenc4L1ZgNXVCPVlMVWdBSiQpbiRUPGNPU21MREQlKDJXbEFibVFEWXdIcDxQZ15EMyY0MjplKyt5ZFNibXZHd0VTJTFFUkJlKWBUM0JxIl4oI2svTDI8ejlaaUVIfE9yaS9sX3FDeTYxa0Eq'@;
put 'V0xVWSkrVXJCYjd3V2w9RkhIREx0Uj9bb01TI1BhWXFaNXJQRH5CazVOTzRSMShlNERRVEJsND9iMkc2NERIbDU2Vzx2Z3dFcHVZYy98cSxiJChtJSkwWT9rPSRRKU0ocipCM2JhY1FRcCUpd1F0SjdzY1ZCKzwxa2FdQlpbdi9iUUEzaSVyKz8yTj4pNnlDYSNYTFVWdGRjJEp8V09gTTd4d0tT'@;
put 'eFo/RjpvQUMlRGZEcTZUL1dKU01DMitXPWg5WjU1Rkt+aFZxUDJvZzBvVkg8c3xEIVdiL3diI1d3TT8xX0FDZnd2UT86JE9Db2Nka0hLQUNkaX5qPClkTHlJQDR0LihUY2t1bnRNfHYjK0l1UiFsKTtUfUR5KHFfbVVATFROS0EiTG50LiRhbEwhc0ljd0ZYTFVqejBOPis4UHBCNCFAQVkhSExW'@;
put 'WExVWmBfXU50aU5rKXhue2VZTFMpJX1rVXVYM3BdQ2NAfFg/R0xlOnkmV29JKDMvV0xVbSIkWWFTWXc4V2B2U0FCdiN5VEBtXVlrQypUWGR4akgpdnkiQW0mQyojZyJXb2hqNltAQTdjbE4/IkI8dTVsdEoiNC5GRCVtXjxpZytHR2lyQiRnMVs4TU9KL05rWis8NExQemcvVUBvRW1EZkImKExV'@;
put 'M2JMNWdFayFWd0YqQWd3RShBN1o+NzQ0RkttUm9uemppdnUvOWMrcyF3aUs3RG0qe2RsVUFCZ3w1THVHQFcqVz1vKnokMFM0RU5mRE90U29OLyNbKk47PmVafnpFMFBqNC42bX1RWXF1Mjl5NC4jMTpvWUlKWDVuOlgjWVI2VkxYIi8+VkRUaEtDZVV5QU9YQHZSTkJOJFtlTzc+Q3okNUFVK0JQ'@;
put 'QkAiYSI6bztSMEReTDBENmE5WzptO0VvWTszZ0dBY053YCQ8W1N4e1liKVFhQU5yUUNtb2RlV1slbEN0Wn4/PmtfbCZPJTlbbT1sVF5VJTFBcnV6e1l0cGlbZ2ZPO3ouVXxOK3BndW1EYlRPQmhIPUZwaT8ufD47Jn5lfXRqJjN1RCxPWFJYK0tNTkNWYU8zY2FudzA+JE0pcnRiSS9FbHdTXlho'@;
put 'WGNQMUZEPUxvU0FJRFgzdHV0KTBDTy8/fGozPWo9UC9JLjN3OiFsPTdbLzljUnpSOj1gMV9AWmFKa35oSDZwPWQ8Wlh4MS8vIzkjQ0FfTllvaClSeWg9bXw5UiwvX01ZV3llS0FmMG98ViowenVrfDBNYkM2LHR4RlF1SENeVUZgQ2Zga2QwMFQ+c2lNc2J6bil8bXluO3R8aDNAMW48dD19fj1b'@;
put 'X3pndGZ8WGEwLkNgVUVhdS95fH1MXmh8YWFlU2gockZhRXpEdDRhVEMmMWR6blh7WGYwcmgzeF9JQFNbKj5XbyhAcnpgXUdARSw8cFFYUXw/SDMoZDFAeFpkZl1seTpsUlNkezR5dkhXQTd+bUheP3JbMW5aPyo/L29aX21YPi40WWFjaT4/aHUwVyFSaFtRTkVpW0lia0Bod2tbT1VIMiF8VXds'@;
put 'dV5gPVhSNW84O0I9OWd8aGguRjtaPSVVKEhiZ21PNSxDWD0lK2spWSowcHUiTlsqVGcrazBFMmc8Jk4wR01mdV83RDx7M1o7LHhoOGErYHF2YUQjTlVOST52W3YpY2I7OHc/VCF4Wi8oamZtMCpHImgwRmlWbU5gcFJYRHchQFoyTD8qQmZDVlJhRmdEIWFJayZvKk9VTzF8bUtUOysiK01Ea2Rb'@;
put 'MTBnVXlRXzAwVDBzaTJMfjlkMUJ1bVZ+PjRaU2l+TTtPLHUseVZiaTM+UygpfmAjY3crQiN5UypSJXlyOUFFd25yOWdIRUc9fUdValIjWTZ4USxCTWUyN3JYK0ZXOFgzVWAzLFFXREtJK3dVOnFZV0R7MEpaOXVPdWhmI0JramldMFU8WiVxMDA4V08hcnlGayI7cTooXzc1RlQzWWg+YHNRWTwl'@;
put 'Ni9wLFlORG8wYExtNTk4KlY+cmQveFAvJn16YGtLS25gQ0czUjVITlh8Vm5UfCFhSHQmfEd0JXF6cDpRPntDKnhjV2N4VkJaSChtTC5ySzNGcSh9TGFWLyEzVi85OnZ1e0ZvazlMNXJ8KXFPQCgxLENEMmdvQ2dENjF0aW9DV2hNVyMrIXM+KSZpdVtpZlsjbitgKDNYYC81Mm44YWtAZ3xAVyZE'@;
put 'NEdKaFtTO3dFUiMqYHppbm9qa1kkXWdbI19pe0xLT3lZZmZJfGVHSEdSIV9NVDR3Ljh0NVJHS3ddRFk9I1c2N3AjKWE2U3B0ckM2TF9Ld09pfFUmK3JWcXZUYTw/RTpja19CJXU0TWRLNU5uajx2OitpTE5TZT4wd1lBOis5SyRqdVtbLjNJSllEVENZTzp7MExuNTF7QyhgWmM1MXtDa3VhQG88'@;
put 'QS8zWEpwXUVBR3FbKVtEO3o0KW5eXUxxZWVyfm9UTHtbdjR3LjgqQmdEK1tGcj5JSjckcHMvPyFLWEAvLztCJk9KaVE3WGVvNDU1di5ASFhmWHJiS1g1IXNTaGBIMU57WWhzfi9efW9NeC9taGJObzliIXxvVDdYeT5vUDpYaW8pQ312WF18KXxYRnBkU1dLVUhnaiIldT14QFJOSTFCT25sJHpY'@;
put 'ISQyVXUiKVhGLzgzPTlMLkRXY2J2KylVXTVSR0tbZmFNOVBiUk51RWJ1dWtiKkdOP1Q9ZD5VM0pfR3dtYXBQfW5EWWd7MGEuXyNyP28yZzgyKU1JaGosb0NtcCEwL08kK3QsekdOUzApVyRxcjNONFEuRCpncml+TGZmdEYlek0/THtqWjgrd0V0cmdgWlVDXlVhXXdWKltyKlpWPSRNU2IoQlky'@;
put 'bU9HWmpkPE1oWSt3RzpNTV9gQ041X2VmZDFUdispJEcxLilVV1VRWmsyTFBNUCZHW1k7WztHYSs6NFIvc2lrdzJQZk46NEN0LnxHVXEqMGEuXyNMVzttMkk0KCx8MUUkbWRAJVNNOmEqdHYjaUxdfj9YPEcqbllVSk8mJTFpP3dGRGFQaEw1UjJiO0NfLGJPL0ZEcXlGRHpdbnJhPCI5OE5fd1th'@;
put 'PVNzTE1wYV03LzVEdzRJVzxMP1tTVFVzfjxALClAQ19SWFo/YUdRfD9qJFo8LFNyTkJaPSo/MSR3cmheVjtJYikiZWhbTnhJRCt3Q2ZdKGlZOUomKFN5KG1jVEJQPDljckpFcyRiLnNNLHxNOzo7YmUsU0V1WXQ1LmA9TFBwInw2fFhDXXkiOm9eOTpsUkZtbTdKdyNzZWVdTnV2SkVQSWlnciol'@;
put 'd3A8dmZpdThhLjlCTUdUPEJpLiw9KG1vaVAwZGNheD8uNWRQV3hKdSpoWkk0cGkwQSkoenx7Wl9WcSNlNFhSLkJ3YXJ1WEEzfldIZStSXjRAK3RKK245UkRpPS4zd3x2Y3hrO0RtWXQ2SUtybnxSTHohdnRkZ213fTNGbV99SUw5KFtoMVFgOjx3NHs6cmVhYD5iT2l8OFdtKk8vczx+ZT1yYl5B'@;
put 'XmQuWio5M0NmQ2x6ZDBnJDpEOnQqfHlGWDhjNzE9OHREP0ZxWyxXKnhOZzBXLkxUfTVDRGdHNjswQWYjUHxoOls7dVlwSGZmakU6WG0uKUM8dU57Zil2RCthaSVVMElyK0FufldpSSIpfjdzXX4/VTB6Uk0pQVd4cGdFcSVqd3s6fCEmT0hCeVBqP2l1bjRXNTBXYmlqOT5yakpmT3lQd2k+eEJ2'@;
put 'UlRMaWxvIVExeFEwRjZWIVQlVSVzUUhRYEdWIzR9L0IkKTBNUzYpKyxacCNQYW5ZXUh8NzVKWntPPUF5O0A6MX1xSjJ3SS9UTSxDIy5CRH0zJjFBOyNQVyVsOHA4Xj0qIypEdzxvKj0kOmk/TUFBXmVWQU0vSnMkPipXZW88S0p0blRHcV5PdU0qXVdoTDdGMHUxUWwsRS4kaWlSNVFpLGFNImte'@;
put 'PW50ek4jJVM2QUY3WDp6X0FtVThTSmZLU0d2OGpId3d3e0pidmdDdTF4MXgxRTxRdipuTk95REx4K0IjMG1WcHh2dStCQkt8Q1YydFJOSE0iK0B0NH5sKytVaktGcTl0anRrX1YyN2t3ZzV9SFdPIkFUNSJrQmw1MWQ0IjVKLlI5PWJ5cTVwKTJLQ2MsK1ddbyt5Liw0X1ZFLHh9dHVTdkwpMTFk'@;
put 'Smp6WFtgaFNAaFU/RTpXeVpiO3NwYDQzWypWaSRrRFhebz10UG5GSk5YPUxhN3Z1K1h6KmpYeVAqZW82RUB9RTpeZkUiZSUuRCwmTEZBe3Y1PzooMzpRPEZmOjF4N1NHQmUvRXI+fSlSLGZSLFUldkpTSmYuPEplOTNPVFVmKkZpYSYzM1JqYkBiUGdHclRUZXtHOVd8NGVjSVtdNHJhaClseV5Q'@;
put 'eWppVU9eUktSeTw6RmIuRTE3K09rLiJ6QiVjUj8oNUckdywoNWk1e1B8O3peYTR0YG4zbUxeP2FNKjs+WktiUDhObHpTdTJjels+XnFmOEdMYD4zY3hDeloiJUsuPUxYQ09wRTkkUG5ERlQwIXw6SCQ0R1U4ZCl9cVc/OkR8LzJoMyZ0OHRkVSlhJCtDMktWbmhzeX5yYWREI0ZjLyt9RGtUa0or'@;
put 'Vl06QjRrPWU0MHpQY2MxTUllMXQoOyRwdWUsRGdQWWN6QEBoVTVlekxFTU53dFQoR0hRfSszcVEzZCFCXUlqZ3d8TnsmR2w2RUB+Ry5vfGRuTDU6cXFIflQoQlI4XlZqOSteaSpXOlo5dSV0eiNNZ0FoJXpfTm4uQUxLbEpCPWkpciF7Nm0jeyMjKkkhWD9pSWZqQmJGMVZUNm87UXNKMnR4ajdy'@;
put 'dSkxLkY0WV1pTX54Z2VrbTtPYzIkVUdZRCZ1SSolL04yXk9jW2glSmdnV1UrVVdzLy5XWCFvQkxdUG5ZVEEmXmokKm4vUXIjeEJzSWNudEFvMT4+JFRgelF5bU83PV8haXxPek8zSFgmS09xT0l0L0RGS1dTP0x4emtabE1iLDlpTlJJPCk7d1A8WlskKSFAcFBuNioiJWZdRCp4fTBgP0soJlp+'@;
put 'VmRfb0R5SUtbK15sJSQxLjczNzxGJnRtaSxxaEd8NXQ8NzVDR3dvcH5sOGpATWloUjAqPUhDUiVzSkNaXVZ3P1d8ZCxGPjVyQ1ZRaDR0TShUKnomUmBkOFg9UHN9M1gyN1cvbitdOFZJLyY/SDY2WkZyKzxqRyszJHtrOVskLE1SJT1LVWRyOSQ7dT5YJiRMMTBsSWF0anhZdTMzK3BULFRxaHdz'@;
put 'SnUrMUg7SyUiYyJWXk8iflFFMkFeekJnL2Rjdk8jTDNnNC9kTHFZTm1mNSolJSt+WCZARVJ5I0JKW3ZnUz55Ilh4OFlLajdPMSpueEI9TCJ2cUpdST40Tzp3ZzB3OFNHJHo5aS8rNE1HQWxCNlRSaXRVLCl4NCFSZ30vWDs0ZF9iXjZOYmZyUThCcnNpSGVGXTVLdXhHel5vPHcydGQwdWV0cHs0'@;
put 'KDhCcik3XmkibixUUTdQIUFrZXtCVC9YKXgsQzlJYm94eGF0JltnUGlhcTVwVlUrSyt1Y0glfHIjRj58Xi5Gaj8oTz1TJSI/Q28oYnVwUmtDNE5FOl52VHZSV3RSMCV2QzVxITU0O15SQFhOXUN2cWRVYmF3fCRJOVpDZTlGVyxkZnhydzBQIUF1Kndfel1vKDRpR11oIVY7O0RLOTR8SGpPfjtE'@;
put 'M05GIjNPUDYhYnUsOkFUcGhDZjdhdiJ+bCRZSStYQFJwMWBnLEckU0I4QEluQXdBTkNUQlpyYU0uRSlLMGtdUTR0cFIzPiZmR0VsJUR6UkgjYkk4QFdwIUt8aiZrdllCWzFwMGZkandgTWxAWldTTDAhR05TTk4hdUxtRGopbDUwI3dpQzE4X3F7NHRZdSUvbmxwdD5sWkh3NHVwL00ueT1FW31v'@;
put 'UDpsd0tyfEZPJH0laDw7UDBDajJDMixYclhPUzZ6SUVbYjhqJGw0Pjg6Z2x1PXtbemRtITIqcUt8ZFthcD17W2ZadUw1dklFM2w+TUNCJjh4YjFOY2ppTT42dEZaRW5ufU1JbihzfmU4WnsjQSFlVDJWXzR7PVRmPmYxbSl7UlozSTlJPjQpazVTRjA4dFBxcEhhXjN0Y2olOGosb1BzRyIhYWkk'@;
put 'VnBIWz1KYGVMbDNeK2BKZz5PPTgiSDE7U2BmcTlSIzZFO3JaclReaWhpNSIyJSNhOl5hYVdgYj5VQyk3VisxRzJxUEB4N2BXSlN9IWN7b3ZqU1RDSUJNRVllMHh8WmJgP2tEVDpHWHdPQmE6UDorbiNEN0k2L14oZjBqO3xRYXI0QXdVelljR15UY0ose0c7S0BKQ2V7PUJve2xhcl9wQnxsWG8+'@;
put 'VHNxKHw3ZlZKe3QkJFkqY3I9SV18WXFbSl96ITUzb3x4KUdlN09QTWFgQUVbWlZ3ZnRNW0smWSZuSCZSe2kqSz5YfGxfdUllTDgoRz5bO3JCel8wUyx6YypmbmBJYmg1fEspdX0wK3I+aDMyZ3tOayJQImxROEx2JWtla2l8T3heNG5VcShxS0IvZzoxYz5JPHlpIk05NjgufCFVK1dKVCRSS1RP'@;
put 'LFVtdTRvNkRJKmxNOkBRVUVGQit1LzdmVTh5XmFWRlhHYXVkIylVZytKayVGL0dmKz1CSE00NjNwW3R1S31MQj0/Uy4+Xyg3Sj1pYjtiRCl7dEBMZyhwSGZQaHU4RDd7KSs4Nk0vOltXVnRKRGlBMUlkN2BKW0FAUFN5fkZFcyswcD06RiheZnp1VW97X1d7L0BNQURKZGVKQHBqNyF3P1loSVp4'@;
put 'Nkk2bkt4XjFGdVgma0k4QFZ3I2JjIWJib3taPjxoR3JnRSolUSthK3hyb3NUYl0sT15WK2ErSigmPGRmR1V1QlVHQG9RRj59SmsrXj54QSVSekBPYywkTD5uaF95VWNIYWFNaUI4Snh0JUVPSHdYREM4XyFOcWF1SDZ3WiNYRlBNZVhlLjNqbEBGb1s4JCwwSUdbKiQqLHdCJDpjMn1Qant6fWgp'@;
put 'RTg/WSF0Y3wmN2EpSj99ZDQ2KF5oeFBNZyg5M2M0NHY4OFRDOFdFeCM0SFh7ZDw/V1RiUHIhSSQpPWdBYF5Pc3N9R3xNMDh5VjY/Tl55Q2VuJGZRYnZARGMpYUdwbGJxdFI4Rmp5JT1oYnU3TzckIVA/MG5DKXthNVsqW08vdyJTXyFgZ1orfEV9NVpvKHBEUUoxMztSJXw0LlM9Z0JeZE4+RD1y'@;
put 'N2FlZjo5N3pOMC9GcThTMWRNVVdmYD1OOEB5M0RDRHdwa14oVm5vTiQuNkRkOHRJQ21LcXJXRFhtMktDQz1HOFBfVkVRe3QiVilfMmp6WSlSXXxYL2dyY1o3eUJxdlB4I0YkWCJTYGRqOTFHXnh7XVY4ZW1NeU1YfmQ1I3BuSyFAVCVweil1TWY1QSRKLCgzQCQrbiV5a3l2XihWYWBbe0gheT9T'@;
put 'dlhdP1I+WSZZYTArOnFlTGt+UGcqWk9AR3pPZyo8ZjdsP084On5iR0NWZCt4QCo0K3Y1MFVaJFkkWSQidSs9c15YV1A2YztBZiNPWGdKM1VNQ0J1LzZia3hsaV1IUmZsUktrbCRoPG1mVF0jby5mYyxnZTtMamE5eG0yJD9CMzxnWUl1TGpheEYsP2IxL1MjKUFmNV9+ZTQvY0Q9ckE8bl4uZTpT'@;
put 'fmw1YWY8ey48K0RURT5eaGR5KURrV3w9JGIqcEh1R0VWekV2WCZpVlNEVUdLK3xYR3AoTHI7QE95OFg9azhfR1I3YEptZltlWSI2Jk8peXNMPjUoNmI6L2JKQzcmSUFqLGFeUDpPXUJTcmZoe1pWXWsjWyJ+YnFtSEpvOWJUVm4+ISNKLiF+bFIkLGhGfXFOUGFUWmNeeVN+YD9gPCt4OGY0biZP'@;
put 'OkEhamhJakBZVVAwcyorZCFqa1AsLlJ8UjlZTERtYH1QfC5hVGRrQTxKTjBzYXZ4ODN2JCVrekg8fVZFZ0Q8ZlFXKXNeeCJ8NFMlcDxgVzh8fDluT29IMlAiVyNePCE7KEJudVkkQHBDKlNhajxiWnUmNDs1WV9MQmZFJHM9cTc6cloyJls7QlgkQGJpfEtVdjxyRE1dR3U4TGpPImxAWjJNUCY1'@;
put 'WTJHQiVwOCFjJiJZPTpnT2RNTzBHNilWQzklY1RIaVpxSktoRGpATSREQjolY1RIQ1pmYVJjdGMmMkgsQXBvSEBNYWQ0MFNhSWR+WSZ1PG5WZCEwIWtpZyR8ImNqdmk3LExTcH5jQ3BSUXlZaC89dnI3OnpJNk0xO1Bpb35RezB7Y3QsJU8iL11aQ31eZFs1KWdYMDZPTnh1Jl9TbVpiNSh5OzU6'@;
put 'ellZIlFJT2VdfDViWX5Zb1NsOUFySU8pd1h3NGU0TmtEZzJbWkNwc3piVlNkWEQzJUFdR05GeHY0PWxNeVBEPD9DeV9TQlkraSpae3FqOVdKSFo2TF1vSWd0UyNQOUg+YUhlREZKWlQlfTx8ZUVxPjBmUCtXSStvTmxaY25BV2xOM0MjcSZkcSVXRSNMZCNFMDEvImg1WmRxdTUyLyJoIitTInVz'@;
put 'ek4xWn10eU4odDMlWDJ8TDxETGg8RGIsOCNZczJ4XkJBWm91TVUzUjlIKkZONGt3eUBfb3RJYnBWRjFsOCw0YD9wdWViPy96TH5eZCtZdyM8aDUic15FYW97WGNIRzBZaSM2aFNhKUp0UHtoWXZlVmpFSTpnWV00Ynp1JEVeJWt8bUc8QjE6ZU8rZlJEPiwvdXtnU25FUWhhYDxFdTl8OUU6O09H'@;
put 'X0FwQEVZUDVfSmhyN34pJWM2WVphUmFFOnNpRWVGIz0oYjk9Kl53ZldhLiQ4PENFOHVsKER0S3xSSF5VOC5PMF4ldk1hZzttTSROT01FRCgxPSpXdSEqSzY0NF5WcDtUZmtORDpKNDcrcDdyOzRdIngoaihZZGtEbVFGTzhuMyI5WEpBSGdpdzApe35WO1A8RHNZR1RrRTsmaCQmPnRZS3JIYF5O'@;
put 'LEs6VyNvcVg7Yn1meVZ9REREV0EySDM9aTVzfVFDNnQodVBUIVg+L2B4aGlZUDJEejRHPVZuLl0hQ1NjXzAuZnBCTjxPa0ZSeDdHKl5hVip9PEdCU015Rjk6SUJTd0chLmcrMXc8dDBWYjROcXNWNXReKlhdVFcpJjxMZmR5Tyw2XiYqQkAjL0NrL1pRYGIyInVyMz1rKjMrdTZdYU5qKUswQzo9'@;
put 'M15qclpNLj1rdGUkamVaQCFRWEFUTVltOE9sJmMiL3Y/O3owPz9rY2lUbjU5RURAaXJhTmFUUTNnK1Nral1bKllpLCE1NWwpPFRURXMueEJrQT93anlmQE5KLEojWWwjPWJ7Nk0jVjJOWCYmX1QlY2hXe2cqM0kzcEU5bFYhX0NCdSN4aDlyJTJnTD5TLExSXWJpTyE5OnMuSWE5bVRaUS5nSDEx'@;
put 'Z0dSYkVpYmwkYlJ3YFp7SGBQYWJtTD1tL0dtLElmSjJELGRUWHVMNyVLQ0pfQyZNWCxAKU11Xm9CUyQ6WjV+KXM0KWtCXzQvQ1VfaXMhKSx9UkNYMk4zaU4vazlIJS5xT3FgOXR8VStJODBtYjN5SiwpcyloPUouJSFQSlQrTVpOcD5McTFqc0RNeHYwLGNkc2NVeGd8IVJRIyQwKCkqaTIzPkVw'@;
put 'XVlYY1RTZWd1PHYxSzpuKSlFcmNyeiIibjAxIWooTl97cGBiT1lPe0VfeG5ZQjBZZldndF1EYWR1ak9QZllhVHt2SiNYL208RTg3PShtNGw3eCYqIUJXSm58JmMrTjlge0FJcW84c3JiKDF9KSN1ajMxUVIlanxsZ3ZZI3JpWW9QS3w4TGxEQXgyZixOJDQqTCMqZU5xOERzQW1nYilCKClCSEh8'@;
put 'ZmZ5bWVhbFpOUnhwMkJHeVVdakdBYGkmQEt1SkA6fmdsdGZzWmVHSSxMMCY7ZSVYQChAIjZTNWlnfWtJfHRGeW5uPXh0U1UlaD9YOSI1NlZwVDpAOkBabXM4XTl1Ris1JilqRz1LKzMySUpLUS5DeiJMMz1TKDx6bj09TERoITR1aUJre2gjaXxePXZtL1VLSjJdTiQyVmh2TCk6cGRPSmhbelNJ'@;
put 'N2cwZTp6QmUqdEpebCwrOi59VmNWZ3kxbHZPZjpqVWUxZjtjdCtvNlF2MiMqV15IVT8vciFTTEtaI3F7W2pgPC8uOksoRy46bltzUzhQO3JRNkQzcil9RmNpZnQsN0t6N3JPIypyNVVBSWMzSXhpelhZJSg1X2IpQ0kuOm4ydFZ+KDwyJWE8Okc3VXNnK2M9Q1dXMVc5S2JYQFNTfEMjOEJuYVhf'@;
put 'cSMofi82bFBnPFhvNz0rQyo5UWBeQWFvVSpbfFpWJnorTHBRaTFMakFXcXlhWi9KWVJpZXM4VmtHZCNGUmBMVXNePS9UJV8/JF48ISpLW1Y8Lkx2TSxWOlh2P0g1eF8wXSxoQFRPXmc6VnxZcHZ6XiZgZm1gMURrcm9bcyspXUxPXlshYzE0R1JWfGU4dzNWW1V2OEsrY1U3ZXkhTiFOZWZQZDcm'@;
put 'Z3x1QmU2Jip4ZXJqYW1qdW5PeFhIWjVQVmVJJVBjZT96ditrQHl6U2lLenJ5PkxVK0hEZCNdZDhNWjxOJSl3ZUBXSWpbVnI2KDl2ZkY3K25VPFdQdj9ITkdROFdlWypLVShnX0IzJUdORnhHRGYqQ1RtJU8uYHE3YX5vJnh+VG0lbHY+aGtOLDd5V3A4TXlGJUZ0VkV+b2l4P0lYX2F8W29HRk1Y'@;
put 'NTN7JnMvQkFbQmxqZlBCPyJZNFBjIjFPVVVOTihrSTk0NXpCeFksQXBGeFZmLlU9eVR+eEYiWVZ9Tyt3RiZxT09CdVdnb0MzKzBLeSE3KXY4VVFLTi8pLn5ZTlMrMHo1XXlmIzZtJiphQUUiUT5Ba2N1cEtifjF4MStGMj13bGc4els1T25UbntHRjgxQ05HZ2NBW1Y7X1RWbHxoaC9LOChBSUF2'@;
put 'V1hMRktDKXV2Y3QseHNxemFHZlBsUCEmMXBoaFp9UCg7PndLaHpHUEglRWFHe0p4NVVBPjtkfmNRMDdHdFQ0Zk8zcUtxOCpGNFchWHo+d14lKHQ3R2VxIjtiZD1EbDxwKj55fGguSEgjaWFsOSVpczYxWmNobk9xWHYlbVlIQDlIbDVfQj5rNCZ1Y2xQOTMwfHE6L291PUl3NkxHUVg3QGJJYDls'@;
put 'dWtVa0ZSbWBNKT8lZ1JHYHNDUFVLYj8xTV8uLCQ6TSheOWliQmRuWXVTaTlySFAlV2tEakczNGIzPjhEVE1iSzRUciltI3dnc297dWBmZSo/KlkvXWVoPCM/MkYpW3A+RmEoQzZyYiJUbURGcWU4KDNoJUB0Smc1RiFYeD5dVmMuMj1AUyFnVEZBVHs8NEswXnhrXjFQKjVBIzJlRGE7ZXosNThn'@;
put 'ODRrd3JRXT1XVW53OnZjXm81aSkqQzhhRXRxP0ZXdkAjPURVP0ZpZE0yaHs3eFJIJTsmbXhaR3Eqe1A/d2xnPERdRGQsMnY4L1piYU8+dVkwMmVRTWh2LkJNTi5CdUhoWWVPZzVZMGExXXRTNVkhSkgpRUN6PnV4QXtrNU8kKUU5MHpKdmJPdTI1IXp2S1ljYnAqKTp+OXEqTCoxUHBCaSFXSyop'@;
put 'M3AuSH0vIjQ1KD98T2ZbWlphQE5kbnpjOGtXUjpoMjM/aEwxe1AoVWhNMVdrbnFxVUtvR1c5YkhhJmpEWHZAeXFPcyxidzVENzMlWSJvKlpEKG1oYmgyUmpgKGRucnRNI3hTT25mKzp8NjFQNWR8dXMjLEhRNT4/SCokWltYMzFtYFlhOUg0WytgajpbQ1B7cWtvUTduUmVYaEp9aSY+bnQ9fjRs'@;
put 'ampYfU12dzl8QE84a2BqL0Q8ZEFkJCwiX2hRalc0dysyeHAsVF9jWSJtTUlqdmkod2dWdysoPEc4cntFUTRAO2VHW0tQVSYjLEdmYllDck1vNEBmTn4mbzJ3LiImLEJeTkFDLGVIWFtjYTtJYX09aXQsOlUyTXk/WXJ5SWRHSTgzMGhfNnNnKnhVcnJORVRbIz1DdGM6RmZYdEt0P2p1bmBJPEZ3'@;
put 'RnJaa0ksPlB8UG1TUlZ2UEJKWVVFIy89L25fS1U7WW1BITJoQFlDMDAiTXkvSmxiT2hILjRwTHVtIztbcDl+SldONmExOmY3I3hKNE1SY11dJk9bJTJ2TCx0PX0qUGVZKntTSyhpa1N0e083IXszVHthayYxZDdrVWUvSk1LLHwoVzNUYm0kLltPTkVCYiI0Jm98RSNfTVRsMm1ML0pHJXZSK1A5'@;
put 'UU8vUlt0LGouMHtKWmc3PW80OEleQEhTNnMsU3ZjZXZaT0AuSjpeRjV0Tmd4O2R2ZyZJcTBiRisqaCksWl1sMnRbX3V2JHdzRGYwWCM4V09RJD5OaEJJZ2tDeCtJSDZJOUsrQGcjOyFyYUw2JHkyV31RQGRzOEFHKk1QZyFnIW1UTE41Tl41O09FTlpDMFQsS0NPP0EjWlEmQCE2PWZmVG5ISDMp'@;
put 'QHRhcDcmSX5OUFRfZCExTS5vMXVlWVsmRW0kRTdHJS9nKkk0aix7cVQrRFh9L2MmdlV7WSk8bEVYalQ+YEpxKT1fbUN1SElIS2RIZWllejkifT5WWF9qWTtZXmVjQCRJSW49VkBObCNPVzZhX0MmOWJEcExod3tyR2VTNihuMEQyZ1h4dFBuKlBMVCheZEBRIy8pJHVAbV9NMEwxYzlYRixyWmQs'@;
put 'MHgjRERCRDoyckYmb3I0Oi9idmJRSHcmcSE/enEmMGI1KFpOPHV0KiMxWGdpfEMpam43eWo/XytrQmgsVyRlRDVsZHA/NUtQLHdgXWlZZG93ekJ0dVtMU3VCeCEhX0siNzdPeXE2fVssRHc9RzlQT1FqTjsrKCk9UGlgKkVtIzNmTWQpKnNjY2RyeSVfdnErI1M2dSlYTnghSSwrcnZuUzY5T0d0'@;
put 'M11TeT99cTdQR2IpMmlzY2Z3NFUjclpGLEI4W1kqdGw3ZT1XJHJ7TzJvanZtSyFedy4hM3pYall1Rk4qTjdyeUNbXXJ8NGdWYyFeVUJwVldfPVduVTc9X1RXVkNFbFFwRC5JTGI2VHtMPDg7eCtqU0BRQWdEVGhSeEllZk5sOVpWe0tib3dDbHBiT2FjeCtmNHJ8dmZrOEBASjNnY3s6eXlicFtp'@;
put 'WyVbJVtFOjo2bkJJbElmbkpkSFhQYmB3Z0xkVWhEZEpReXk9MzlARzNqQVReTE0/b0IqQkcoOkEkdnYrKT1QQlRPKX17Yk9RL2VmdVpHd1NPeVBpSWdqcH01VS9GciYzaU17QiU4TiF1Vi9+Jjc6dn19b2loZkdTVnhiKl5GRHJaLygkaXcjOUkrRTw9ckdOUyF1dDVYMVN5bHNNMCFHTlNTeXxl'@;
put 'MThDIUtXQ1B1UHZ9dj8zJUtedm51SGFJYHd8ZVltcmFzXnpbOndkPHAqWkNzZTNMW15yInRaRS9PVEdqVCg4UUNee3kkTHkuIXU2UUAmQUNiakNWWWFBLEw8cWc1ZXRfdTZQZT4pMilZRmlxfSFGWz52eGlza3ZgQnhwXm1fUy5ycTsiUGJNLyNuKCYqU3c1ZTgkd1A8bn4mRjtpPlssSi9QLC5B'@;
put 'ZEB+dXA4UVJkTDRXLm0vSltQS0l1VVQqeH5xNTs6RjEuIiYiJkt7UVp1b3N3QX0uUSR9ZnJzPSN8Jn1sbn1Ta2pZQ1c9dFt0U00zPTh4JHNRVEV7bDYoMjVQT1YyY1hOM3guPHk8Om4jYGw1V2oxYlYuejU2W1pFZDxbKltkY3VjcVg5M1p0aSkoS2tYSWJhWXJWZEgsNWQ/XlFTOXRUUUJQMz1T'@;
put 'SDF6TF4yRzpuP3NbcDpwRUppRWZ8cFd5N2g8YypmdG8/YCpkN0pzWiw6b2t7KD8qbjZNSVF4VWFDKC5DUzx3Z05TO0w8ZThJMWxiPTt2a0RoTHxONWltYEpLWkc4U2FkdiJZN1suYFIiV2J+U1B3Kls9KF8yaUk1W2VNc2tUPUZuVnZGUDcmNUd2UkxaTlh+Z1dZfio1ezA5Tyg7cDY8JU1uS3Bz'@;
put 'VFBIbyU+UVchTC5QIUJCSXV0UEdaXXlJe3IhY0xITmRkQHVbME44WHgiUSNTX0QlQnUlXzBBKmgqaE06MjcsOFA0OF88e3IwfU14fEgrMFNmfFEsS2c/bTg0Xi82U3BEe24zOlloVyNRQjEmWzYkaTYoYGw6MyU+MWpsTTIva0s5eixBQm13KW5tcEk7eSR8dk9SIVkzbnU4Mz1qSCpFa1kyQUZx'@;
put 'QCssOW0kXTYjU1E1bWhESFp6MHpzLD5TazR7UTc7Vi57P2tafldFNCZoTD0jJlZRMF55a0k9Jn5sOjJVISY7V11zWT1GPiJKMXA3KSRJbCltOTRPWSp3ZyFDM15bUn5Td2BsPVlFOHJnc3YrdSN6bns/WlJrcUZmJHJnc05oTGBkPUh1a3cocHl6cVM2WCJmeDhmSHtka0hWPEQ2ZzJBKl1fR1JZ'@;
put 'NzpTRXo9K0FsSU9+cWhNTzgkdUo3ZGV7PEVIKSRSfHIvIjhyLCFIckkpZ1A4Zlg8LHRFXlM2WGp5dFp5WVkjTjM3eUdKe01FWWlHUS9NUzNHd21sKXM4WyxtL1BrWnZ3Onw5UFp0UCZ2UGw8OkhSYisla01GZUMiaS9ATXR5YnMzaU1MKnJ+eU1BSEFCN1soLlB2ZT18e2gxcDJEbUdqP3czdUtj'@;
put 'Uy9nX3smOmgrPG1gWSIxNUl+Q2FHR1UyWFFdRWZqUitLUjtAIihrQGVGMl5WNSlrPUAxSWlNNndHVHwmNG56eWcvY2tMRXZMPTA0cCtnJUhXRlJ0MztyQGVGKGsuJmpNZDMrIyJ1bVJEL2RFaV5kY3Q2aD5sdHdvUUtYXitXRCZiI1EucnFUMC5UfTVrYHByREVEUEI2fkBrNGo3WWo8eTB1Nk9T'@;
put 'bzdsJGZGLCIkSWVha0txOTAjP1lFW2dvKWFYRk5VJXh6PHg5IXh6JixlZn1ufmhYMUw0ITJnd2tje29DV1NCbmM3fmErS257SW9NS3pwPjpoNSlRQHg3NWl7P1t6MVpuKTBpRGxdY2w6Qj1jJndjV2ojU351JVRRQk9LTjNHcGRFI3E5aXAxRnA0PTMsV1BrbztvazIzelo+ckY0Oy9eSU9tK0c1'@;
put 'QklYYiEhaW9FUGRkTDRUYEpbQy88TiojImxdMFE4ekhDSSUhZyhuP284U0ZyLF81SyU+YDhYYVg2ZU86UyQvRnxjT2hOUyx2S1lmPkBRKF1TK3gsO0dTUFlRTkdSUH18ZyZ2MXVHdyI4UDEoOmhROEpyOThZdDk4VV1nKGNua25LOXQpVGhwN3dkYlNBQ3tpL0BqWiZANm8rdVBUQTFaUjcpVEVr'@;
put 'TXsiJWM/LGV9VnldZUFfWCkhdT5VKyFBQmpaPSNOM0M9MVtQTWFrJkNUTnkjNUM1bWg9QHU6eD9AIUlkcFBlMS5razQkTTM7aSJTJGxXR2JRaF12WnAqci9lWW1De1BPSzF4fjA9KFVQWHhzbSNPaXxbQSElYzc9bzkkajRzUll0MGZJK3gyUnYxKVBCOkchOHR8LkdOQ3NlTWk6JUlpUFNPQGFG'@;
put 'aEVbZW1YYWJ2UjRkTWlhUjExL00iejU4MC94dTJ4RCZwOkgpMURHJT0/PyRlPGwuIyouSXUrdCx6QF5JTnEyUUlgKmw2MmVqI0tTS2IpQ2twUmpadzg/fC8rYTB6TmwyRDA+aE0ucVg/cnZFeU5tOmNBRFh6e3JkT0NvKzdlXmBlPmA5OSFfaWBtNzY7SV9rd1dqS3t1bWBzRk5URGRIQiV1SWZP'@;
put 'Sk15RV4lUnc5USpiRT90Y1ZgIyl9SGo3Ojszc15GWmRMelJKTCxybEIjcXw8KTM3b1FgKDd5YDUkQkQpMXF1WXdiNWdWXXg3ZG1xQXIuMk5gQnVHTXR7WEhUNTJxV2h7WWIxc3BvZTRhJTl4fWMmV2h9cUNaTk8oRm0pVjM+b2BgeGJKQSQkJFFaQk5gM1s9W0hLMihMdHNTQ3tKaERqOmVNbUJ0'@;
put 'OkxSUFhibVV9cXd2PGJLTUg3LndDWCNZS3RRIUgwOnlpUlVxVTNmb3d1JThsKjd4I1cjWSNAT0N6PypGM3tOb0crNTkjbj1KfWc9di9kSCs1OV99VDM1eDtpS0NScGBgRXlXdiVbSEtDKWw0Zk1qdE8iJGcsRCx0VXwubylzPG8zOStbJWN4QjhCJmtteWxoSGE9VXcrb35qbmFZQ2x3RlhqW1VM'@;
put 'KkBWc2gjYjUscm9lUnVHIltEbE49e0ZJdSRvLFo1OGV6cX5RQ2p3JXdsZ1QlXylOZF9UMDpGWz9XXWN2WiZ4SCRAdnZ2d3UkVWo2d1NCNzluUHkhdGYmdHNqSFs+ckZoXlNsUi5sV11QRzlrY19oVD40THhYMzZLLGkydkRqV0wydSYjQC9pI0AibU55a1FePFlLMU9FXjY5UCssPDg8XjtLN0Al'@;
put 'OHxIKEYmI184byxANy4jNkpqWzgkOUpQKkpKOGw4YWBDNy5vSTNtXjRDeGZdZT88L2Z0XlYmNDg3Q3F9VS9PbzJLTThIMiQzKEptUDklM3N6bWA2KGFYK3MyLkVhV2lxNmVZWnxTdk9Sfjt3WzxfZ2tDYz57PVc0TE1QLzc+Yl9EV2A9MDB0eXp+Vn14cE85cSkxcik8NiNvbXptKU5NOE1UTn5F'@;
put 'YFBuYmUsXVlzTzc/S1o5V0VFaE05JXRQYU8vRT52I116YHQocCsjX0Y9aHBwR11JQ2RCYm8oJkp7MUBQPD9LclFNfm5iYiFRVVJoLmhuXXN9ZjxOKDRlUjY1W0VdbSpdYGg0aDhpJWVVb28kQiFLYDwlSEtCZGY8KDtyImc+WE5rRCYvPGArKiwkdFhYYWJjWjE2T0JpYFVdJkJ8JTEoYlBje3E0'@;
put 'a0w+fHc7WEZtbk0wdTFZQkMqMFApOGlPc2MwW1UkXVFScTZ6MkY9aCllZH5OOVVMPDBEbG1MUnR2O2o+ZGdYJDEqZ3gsY0loQ3tBVDEqTEs8dFh4MStzUnA4bmomaS9OKSp2NjkrVHtgJno5UDt5IlQuWG10bVArTkBOMDlmX2xdKyh6XTc9YTBTU0kwWjZuW25TKm9RW256YU9JYGExak0lb0Av'@;
put 'NyM2bW9iV0U3MmtWSW4sUUI8d0hza107X1lRQnwoTUs6PjwzOE0ofkZDN0hpYXJbdTNSUWw0MHxOcztrdXJNSWpyJEVnY05VNjJJLlU6USlwLl5jRkxwM2M4KDEwIXx1X358VlFNOHVhZVc3QihbSz89Ol95TktCeU0pKyo5bk13WzJpKyEqOW44cypgSG1iZ2VCUVJJYVVCVFZlOEQ+QW1IVytA'@;
put 'dUxEPXNXM1Q1bFE4PmkvQ1deQXh7OCNlYDJbeUJJKyE2dFZrKXBVYGFLWGguJGhNJDojJXlAU0Y/fVZ0Z0JSQHJ7S0g0V1JRIUhKWyZUWiUoSSlYMXlDSSshail6cTh8Ym5hWH1QQzdUZTVEcV42IzRWMSVJOSs7LFg6M0pPJlhFKzlucmokRW1eM2h8bzlwRzRoNC5FYWl8YF5+bT4kWWEhcmY2'@;
put 'WWYmRipIIUBWeXEkNT15LCg+YzB3SHJHMDsiSzdQbWpuVzd+b3VgeFdiYjd5dmNVIjlpayRWOG1WRzs3WU0lI2A/JTtIPmZ8ZiFnMjYiRyVPNiQ4cWV5QWpfdG1kR2VAc0B2c1VFLD1fN313OChGIywpUjZQblZAakJpPSooekFtZTo8Vz8qTEtMIkRHVkJbTkEjPyw3REpRXVhQcT16N3BveTxw'@;
put 'LiZQQiF0amhLOV5tUSh8VStePXsyW3tEcixob19rPUV8Ukl4L2k0OCpLfFFCbippaHgiVGtSfVNHKUhqQltKa0ZeK0suWmVlQVd4XWxzOjJMSUU8ZnVHZHM8Xi5xWihRU0ojWDF6X09gJDZyXixCWyZ5XTVpfTopJEludihhIiVRKVRLSlRuYXAjY2cmTT8wdllPN0RpaWBKM3UpUC9mPUMxWzkv'@;
put 'SkNwUHF7Z0JPQjVIZiJTYDAkQlMlfS8uUFgpMHkvRl13cj43eX5we0QjTDZVUHpFKn1WXlhqcTBmJXw7Q0VZLDVaa3YhQChoKFZGKkBAK2FRYWUrQ19RMUlHIXArYjkxKWRjU3oyNDg1ZTFYO3JpM0VGPXh4byxlZlMlQHw4Rn5efkFON2p+N2BETT4iTGZ9bip1Nkc9YVJ+XXAoZl0wL1NBQmhE'@;
put 'b2A4RiYucDZ0aUlJNnV6cGNsLkYociJwfXx8MDlGcEpmVXBQak4vRjdRPWVqQm5CIUd3UEtYJXE6Xissa0ldYTYmOz59b2khRmBzRlcuOHlscztYMncsKD5jLHwiKWxCe15NQG5Qbi5ZVkBVZDsyOl50MjQ1UUg2XlpWNGk0ZjpbfkBiQ0dRUzQzSkQ3T2Y2WEhtKyx8Y3o8KHpQSWU1bUNSZyU6'@;
put 'aktxbEQjZnI/VCY5Zk5xX2c6U0lQN21VNDleOl0xQlskIjsmcFtoTE1qLyxlIztWTj11KyVzd3JYdnJPWHB2P28sOUd6JVtvV2dTVl4jZmFLZHoka2JmeT5QL0FNPWEmQ3MhSH1iI0w0ZFIidSRRSlcxSCVnc0p7bltbOSpMYU0sfU1CeUIrVlV7SVpkZ1IvZ3QyK2BIbXVSPiFzUXtSQjJlaH5F'@;
put 'PGd3Olo2NzVHeiRbP1IhMDAvI1suMnZwI3RTa1YxQyM3TS5vJnoiWntRMk83QiE/ITMhT2BJez8iMUJyPGtHNmE+RzZsN3MlbDYkaWUvM1MoMzVbQV5pTitMPTNOUn4laE80Ql9WLHlWYixJbk00Qm5jUGxJcFttYzB0K2ttTUYqanwwO1NjLjNoXjZiX098QUQ+fHhPMVFPRl00OlhRaFVmVksr'@;
put 'Y2BKckxLMzwsQi48WjpUTipFLk5OdnBodk0qQ2llZk1TMDBgW3BLJjFNZ3hGdmwkMkRqfnZ1ZnBbWHU9RzM6YzFjZVo3dXYhR3F3VUJpY0dYWGV4ZiEpZkszUVlbK2wsYF42SzRyPy92ayM1NXZIYCZPQz1GV1daYnpARGs7VUI8bz5IZHI/XW0mKlduTGdHNzlJSkx9RjNzRmQ0VjxTOyp+el1h'@;
put 'Si5tdUFBQFFkRHYoKkI5RitNUGY1LzE1cGIoOFF0Q0E4fVllIWtMYlQwK1glKi5JayJBQUNBQUFBQTFCUzZGU0dzeWxdOD98Lk1lX05rUFQscyFkQkVNbik9YzNtfl92QU5VTCFzJnl6RXJ4JFp5Y2QlfXM4dF1Nb0lbOFd0RXwzQ1c+cDt0PTFiKClsIz8vL3ZQQk83KV0+b2tYYTh6aDRSQG5j'@;
put 'cXk9PUR9NnYkZ2VjNjc0fU5LRXxnWyxpI3xKP3YsaXpBcypdamxmJS5mOjQ3ODBAaj93SE51YmxsP3dvZihHTVdyLHRZOTU+Ol9EKzgsTX1SIkx1czx6VG9LPy4xWFgpdXFnRkdVY0p+JSt9SWtxQnhXYC4qbyglSHdNTj9HUylSXzJJJCZGZXxqLDQzM0dUV312WVJHKmdzRiFeN3tPYGdeam14'@;
put 'UTVZWHI/bHc5MldWN2NAPVhWcjQ1LmdzaT5ubiglOSlBbUhVJTNgIllbKUlFYUNDSz81MXY/U0ReKkEuKmZpeEh0bG8vbnQoWUN9JDRaKDgpbTwxKl01WUwwUGJCV1NmZi9bdyVJXVt6aHNsJEQ+aDFQTGp3OXIyT0k4OElAJCV8Njc/KCxnQlBgfStpM049LiRqZVJSPjh9MFJrJkdWMCoqSElm'@;
put 'XlBrdClQXXFxTXJuRiEjenNVcTZSeGUlN14sUVlsRH1eLHJaOTdzTmo6SHFIMlV6MVEmSiJGRzFPK31ReTtTeFBHWnx2VnAlI3pleGcrcWQ6TylUQ15sUERKPEo2Ul5ITStTXXVLPCpRX2sjVzE5Mmh3IyomVTNgVSQ+KlNDXmspO35PL05FdHB5VWBYZW82e204N2wxUnIxTWEpVmNyWlpiRjE+'@;
put 'JGlESC9ZQUBYR0VyQUhQYzVuOkxeY1kmYFJvaFFyKz55JmRidSVaI3J9InUlaiZEejZ4IX11eTA5K1Eydj1HVllmQXVxbWxmfCs1N24ubi48SEsvJiJ+TWBMdG4qcFJFbThqPXhsWXQ5UFdCZW8uME0jNUZdcCFQa0Q3TWk4dFAsRV0oTDU1VzFTP256QFZvO1Q4TSlzOUJxQ2hzQFFpVjVMP1Mm'@;
put 'PD5XREpxaS4rSzUvWSNQeDBJRXpKN2lSaTN8cVhlP251OWU4YDV+UWJyQz1+MldtYl8uNHV+cjtvPllSLFNqXSxmciRNQyooUDZtMWtEc0xEPmpCWm8qRUs6V3w3dWg0O2JecXZPaUApT0pxW15ZRnhwL2ZKenp+eFYyUTNtQlpHPiV8Uj1ZcTBZaVpPK24oQih0KXsrbX07bC44MmckKi53NVsp'@;
put 'TiNrRWRGRCQxYEVBZj9PLj5HelsiMT5KLGRaMXQhdFM5LmY4NSxKRXV6L3VUL2AjbFduNEImOCZ3OSoiTiZ+S3FacEwkeDI8bCVLaC9oSiEsMTxFIXtCa3FWdW0pfVg9K1RuYSFkKXxiZSNXRWEpImwhezdZSnolaUl4USFRO2I2dCpaN3pPIyt7ZDhRZ2ZoaVl1PkxgXkVVR0tgdHNVbjBddn5g'@;
put 'OlFDUEorLjRkMVt1NUc0dyE3Q0pUNFVbZCFzbS42eGB1M3FlbGI9Kil5cHR9fSNDcFBWIj9zJUcpPzRdUjBdXzohKyJjbD55MStBcl84T1p4OVZ+Y3BxM2VyJDZfVlglZiFdIjw1T2t2UWFaNDZYKyJXdDR3WXMlV1pqNzp1THg6eFgocl11K0UhPXxNUVllKTRTLGdSMlNgK3Z2QnlPJEZ5WFpm'@;
put 'OztEZyg1disqa1QhRERDTS9PUHBeRVI4VER0dDAodktSUChOWyxWaytbSVM5ZXQuR2hBb0ZjWU5ULyVSUDw8WyF+T2NgTTYhVj5hK3Y0SUNwIS4ycTMsbiZCO3hBQmY3cGBHZV1tc0tWZGR2UjBwU0tIXnxdYmZpTUchdk03ZTpPVGY4YSt9eWN8a3RNRG8qdzpAa3MyeF5jc2JjLz8iekxvTlg9'@;
put 'ZE1gNHZzdXZtLF50UHkxRTFFeV5qcS9aQ1gyW0BmZ0FVTzZIOSREMlVFWWdjfC9nOmB6bCkuYHd2PHBjViFHTnkvTHlZKjhNYGUoVnRfXThPWjNgLlFhIm5Ke0BjdCg3JU5CRXNsTGs7eDNiaioidU45W1ZJODhbW1opVn1UOWJvTjI1OiltLkh3M2pnPUwyYkQ6dFBgKX5iJF07Kik+QTBCbEQh'@;
put 'Kjd0azI8STJ2fmdjSVVELDBOcmRvYVpEZ1FvPm5Ad0U+e0cxUiRzfVs6RyZ+al9NY3IxdW9tfnojfW5xTCMoIkImaT1qWTU9QG1ddip5VHVFRktsJEQ3UVE0K287Iz9lcGY1c2NnOV5Se2BeZGI5Z0IyMFdgKzFrd2FuJEdQOzdxOVZwOWE/QDdGJiYwazh1TDxFSVcqNVBSOURFLnBTPEt0ST87'@;
put 'bSZsQCoyP2lReTl0ci5kJXh5TTkySl8sUF0yT2hBa0ZpeCtjXk99VUh2M25DJHxEOHc9bFh8U29idjZAZ21qSmxpYlU+JmghbGU7M1lgWSk4OzUhaXQ5TjJbfCQ/WjxJLiU8LG5AVCokTFNwYSUrSV1oRX5fRnZ2TzB7T0cqQkI9OkNXI3xGJWozSEI8KiRRQCpSe2Q6Z1s8Ji9YS1B8Mkg4SCUw'@;
put 'K3RoZjIsTk5bKSxsMDZPfHk8MlVwV3woR2g7LkdZUl42NFo9PGZjRH51d35DdiYyKENgYkVFJGpLfF1DezV5QyxlVTwuajdKLnVCLjwwanlNNExieCF+XXE1U1RfWkZ2MnAoWVduUWNzcE5CNkt3MmsjZStXdUlxZVc0Lz1AJWd3b3l3bnVTMG1zOng9by9+WntlTzdPTnJ+aDx0eDAwYGhYaHt9'@;
put 'YEdzdiNhUy5rM3NGWSJnciFlMn45NWcubFZ2ZmI4OUBUejdCY0hZRCIoX3tnUkV2amhZRTZhZ3pkbF5NcHlyNUVfYkRgWHIzczZESFA6PWViK0s6V2NGLk9xT0NTVVU/Zl1ZZmVjaGw5Tk46N21+XlZiemdMJT5PMCQ3YlUhUWwoNFM2cEdQI2J4Wmo0LlE5X2M2Ym1CJipmejtvOjhbelQ3cGZk'@;
put 'OFdQN2dzNzBQX3k9Nlk8eTl+IUZTXjZsciFOQnZgT2ldWGw6IS95Mm8ocUdLJU1jLGZuRmtbVCw1eFEqcUhidS9lY2trKzxqQXhReUlGentHeHNHeHBwXUFGN0Y8Y2dQWUNxLF87V1g9dmJFRXZ3JmIufjJgSGhOZkRzVD5lK3RUeCsxelhEbkh8JT5RSU9ycldxYCxYY2pxSDg4OjtCTylgTUd6'@;
put 'NlRzcm5xajBvTEt5fTpDemh7Nm92RSNuRkxYPz9kYFpnZl44ZVAse0p8Ri5vSjpgbC8lUH1CZllWcC9AYjx+PEA1KjxvPDt3cG9MeD94WDE2dW04bTdYZzd4TFA5SlJ9QjRSSlBybEJzOWwwdElnaV8jNy5gTFkwenhhNjRjVnxsZTlbRikkSz1EUV58W2VyTn4hX0EwTVA4aHZAOT09QF1NN2Y3'@;
put 'ekBKRDk1cmZrWTNEZi9VUnt6YEB4Nj5FR25VVjBiZHddUj5oVFFGI103bU9vdU40Tk1JdllPNkFdRSxdfFVOXSIuUUlpb3M7SXt3aENAY1dPfmVOLytXNjByL1ZEXmFqcyMyeSUqNFR6YTk9fWpudkQpVW4kUylmIk0hYkwrcG8vMkVOJHFGbSJYUVJwRFJsdl12VkIuQHVNRTRwTzMkdkAmY296'@;
put 'PzR+W24iYTAhdjAlLy55QXdqNHhta0RTJFouIklIWV1bZkwqbnRfUkB+K042djZlaj1VaENpeU1gQWQ1WUpWanBoMTZbVG5qMUpNQTglQzZnQm5gaE1XVWtLciZ6SjRHaERibylBLz88V0xgIypvYHZWKzJRYnsrT3lYNm5VdFgjNSRsVWU8Wy9eNURNOkhYKjFAe3N2aUx4KlA/LzF+cyU1eWBT'@;
put 'WjxFfn4vXnBtXTg1ZGcpJjU9U1JxKnJTd3VPKkxlU0A4SXBnb0hedzVheXBkWkxuQjJsRjwoZXBUSyNrYGkvJCgiOS44bmxsRXEvMH14JmB4Umw8OCFseDg8Mmg4Q2JLNGkxej0mUWsoZVc7eEp1PXEzN0M8VmZed2hrSVRCYCxhLih4LEh3flhkRmg8aHl5P24icE44VE5IJVQ6XiNESmgqWFhj'@;
put 'RiFmI1I/KmVtXixqS0ZxSzMkJVtNb1lUZkx1QThecylddjkqXmp8WDwlLHlzNzxPaWdpPTxFQmAwZnV4YUB8bVpSNDl+YCtsQF1uXls4SkkpWFUzfW1EWiNXeHhjdWJXcls4RX5AYjJ4K0U5aStJQ2laK0N3SG1WeHdmPV9deUVvYV9XVSIoRzBnQWtLSD5zUXRZfFsiTlB8Tjorbyhkfkx3VGBJ'@;
put 'UnxVP1Z8WHVMKm4jJDZ7fDtKPyMmc30sL2dYUShdcmBpalRTZihpYD9SKihjaWBIcURzOjlHM1pDJlAzZEZMMltYI2M2MWdzTy5BXyhwa20wOnhNMHxzOVkjPVNCajp3R085c3skQzxsZGVLU3hQVzg5Rm1hSiFhWU9FUD9xPEZDVH1BJEUxcT9lZCNeLEAhRVVxN2IkVEg+JDYrIjspLk9ya3pI'@;
put 'Ql5dUU1rLCpJN19hJEgsbi5TRVZLXnZ7W0VsMW4kSHBTXzAjQm16UispLlRML0IuazFzY2E2fVYpdVdKNi8rMyhIX3JKZzhJWWwrTSl2ZEFQSlBrXnZ7em19OSVAV3svMzQ8b3U8TWoyVi9rSkp3ezBnMmQpaHUuMVt6VlFAV2Y4YllVeGY+TnA9UTYjPSZzVCUrcSNlNHZ7KHVfTTpeLzkoRk9E'@;
put 'RzRpcjtye2o5cnB4dSFWbURddnRgbUhpUyQxKl5hZSozQjV1TFt6WHtUblEkWS8wVTpZIXZEXntoYT4hckJeRDVKLHpHaUxZMWNJMktPRl4mTTBzPEIoZkxKJSguTzFrSz43QzAxUCkqJWxbO31qaTpJbTZlNVduOEc/VEhQI10oI34vL3JEdEIob3xqNDVfaitTblpXVXZ4fUtSS2FKOXlGWFI7'@;
put 'OUlvaSsiKlRgYGckI0pYeGp+K2tTODd7e1JZM1cwU3UhUktkJlQwNHc3ajtIMFl9aF4iQW1ITFNsNXkjIyMlaFRgWl57ZE5LO1VvbDl+TVttTCxYLEdnVjFmSnJJNm88OVhpJCpjaHJuIm9OM2xOXUleTz50R0JUbSQ0TEpFaUN3ZHBiQzEjbWovYE90YiR7aUlxJTpBMUUoRDVUdjFQWlspaENo'@;
put 'LjQqTzQ2K3QrY2NtfW1AS1RPaUsheXpEfk01b086YiRRV0ZJSVdQRjJTTDxucncoTEI4ZWpLUzdZZXtual5qXTtZeyZacDc6dHV4L05PUV5uNyZYL0Flci9gODhjRVVqZFVbY35AUjAlY3ZxaTI0a0pZQkEoTX1GPkNfTml4S3JUUC4oanJaSVBnfUY7Xi5PRGszJS5kKVojU2xmfW8xd3wrSllN'@;
put 'YVdEUlBNU2ZffmQiTDk3bE0oMj85L258REYyYDVRailSYDcuPVcqcF1kMDt0c2FfSnMzdntsXVddKndUUlhHelhwbFNJKHpSNiFZU1JzQlloI00+RCNTYlIsbzI1Mk1YQFVJOEY0KCtiNWU8cmhra3RsSSZZXXgvZVJpKTZtZzpGLyMwfCwoOSRqYVZbVkhubUxVckZANyMvJmlSa2hFTGBlWCE1'@;
put 'JHBaUVo7TGh3KFF1W1o6R3tqKFlxRUg1PT4sVT1IOEkhaUBQTVdmLFBJbUYoUj0xKVh4cGJmWVBjOEsleTpAImJ5T0NMVWhtImtdVCF1R1J0fDJpaSNbUD1WOFZYWz1HXXUqTDd+Pyt1dDNmOjM3OThLWXY6bEw6QyxUVUY0XndgdSpZQXp6ajI1PCglKm5lKylKWWR0XUR3WntQOCxNT1AoKER3'@;
put 'e3tHRWBLaVdWdlg2a29ufDtWJGx0MWlEXyMuIVtYcHNxVXBsMWsocj09U3k3RGpPQWlSe1RIMFk2R2xLOTQqK0shPWhUN3IxYVlaWElzS09bZW1QJD9XSVRmb1lnXjh8YHArYzg2cjt5RF1aIXo/SF4ucHU1PS5LYjImUnE8W2pGNEsueVVFZSFxTmJDK2xQbjBqfVhPNWRiP2ZLbF8wYXBjbEVA'@;
put 'enlFaW5QUk9Fe25RK29pYXNuRjpqRTY7TFciVTtKIS84LiVJdGVdZX0hJWs3aDhWVmpwLjdeP2duZzFXejdBLlV6fTlFVXB8aj8/dV1CYkhUT2FhbkVbNE06c29eRFVINWd1V2JlLFFEW2F3OmtUM3orIVUhNXRaRmk/OlFUOCowSV5PKFNDfG0pXWo+Xm09ZE5XPE8yK1lFR0pWIW93YkZVT2c2'@;
put 'Uz96RHl8dmVPXXA0NlhHZm55Qn57QnZwVmdocEE+fW5+QFIlJGNoa1khPUAzIW85cShGWXRKODU9OyhyUiRJTUoha1hEYk5sd2A+azBiIXBtKkZgfClOTDN2TF5lNEA7OVNsfk0zZk9NZUJ0MFp1SGlVZHgrYVpIZkxsK0giXnpEbGtyIyUlbm0vPHFvT2coJjtZLD07YjEqI2wuRUcoIno7Lks2'@;
put 'LFBnbjkxI34lcUlDYEEzQ0lFNyR4SmJ4PEFCel4yRGY4RCR7Qk9aem1zUmd5R21QdFc8WC49KVdYWzJ2MTRUTzwuPX5FUzdQe3wuZ0tKPSs/ZjZnfXxrR00kKkFQZmFBOj9HdG5IbldCZmZxU2lzdm1zZU5yYDNCQHtdMTpYYClFIWs2dU1nIypWMW1CR3VpKCt2PmM2bDolN0ErJXJVKmVsTFVE'@;
put 'dkJUblRGYUN+R3JaUTZhVXRYMGlpVEQiaXgpTElPNjZ4NGluOCVMb1I/bTcydDYmfUZFbzhlSkpHbW5UJDFNP3FLL2xmPXFwTjJsPWVUKUpDMDtLJWhiZixCKSEzLmEjN0Q5Y34pXnQ8L0g8dEM+c0hnUDA3MVsiYSMrOTklfkZHN24mbmVWfV02MGZ5bHRZYyhPdExnIWtgfltiaW9XaD9PSU1k'@;
put 'bHd6OX5nVi9Gdz0lcF5zP31ETGFsQ19gJUBgXkUrYDU7VTR7K1IzZV5eR0x8Sj5faVVsRiw4WGZQSn0xNk15cCVKODEmOX1DVDhBUE0/PVtSV2tId2gjeyhsWW0oVz5kPmwzWlQmZEM7UFJwcUJsfSwjZTludGlVcFZ+V3l1Jl0zcCJkIk88QjlTZW8xOFpdeHc/MSZiYVVuSSkyNiMrZVlaSXFB'@;
put 'eD1UeUcofUhJdjA+Ulo9d1RAOlczOSY4K1dCMDwmOFVyJChuRj9Idz4/O3s+dzFQMzdxNF96NDk4S3c8M042UWhOKFlhbXdjO0JsO3NqWSZbXmR1b259R1Mub1B9XToifF9iWHouXS4vNml0PHJtV1B8NSpEO1lmJV1Dc3tJcVYjKnl5NCssSEtWU3Z5IXZoP31OQXZbZHJbKHI1XnF3aT5NZEgj'@;
put 'QG9LVm1aZTMlM2NTT0NASkF+TjJtaipQU1khQy5xfm5hOCgkPCV4bG1uWCsidXN5Jj1SNzxzZVRtZD05KWhdOWRmeXJrUkBhZGdvNSVwSklSc2Y4LyxJJTRbWShkP3BASWFRKWRMTWU0RS4yMDQ2OHQmS0lfWkhEKFNWeUNqJkhAaCNlO2U0NyN3Mmo7YitVY0t7V2JoPk8sSlR8S0VqTDhYRC5R'@;
put 'TG07Ln5DdltoI3c6bnR6emNxbiR9ITd+OmpjTHl7Q3EvT0paJnB6NWguUGp7QlJjd3BXSVUjQlEuQGQlU0NaPGk4ZlVRZ2dKVlNaW2RyVGh8bzRdJSxHYk87R2pEZHprZHovQENmZ3h6UnNNSVkvLnJaS0AsQ1NofHxqUmNTamI3PnY5QE9JW2E7ZTRVNmxFaHFIYHtGVyIxX09vM3EhbF98flAo'@;
put 'XSFMeWRMTFNXeTdFfiNFMjIldVcyU0dyQWphW35pI24vdCokSFU8TW45K3xdMk1ULnovPD55NDtgZCk0bHI4PlAiVVdIVGkydCQ9Q2p0MSJkUTZ9RWtpYU0oaWEzXXQyXXJYZz0kUiM1PyJFUTQiTGFkMElNOmx9RCZFYWxqZWJ7KEViWSpneX4wQCY/YV5yPGRFJk1aYGIyXWIjeUNSNTh6Y0Ui'@;
put 'QUQjUXdSM0M6ZiVzWXl4Q043Myx0XklgdFtMISJkMU82Pis0dj5CcHs4ODx8ZjcwV1NUensqNiF+eFM1LjZFRWliPyVhfGkkQFY6Z05Xc3x9KGx2Qls8TW0zKWMxcyVKL1ZvejMzaW9HbEssTloiaj4oOEE8V1hPV2BKU0JkMndUWyQ0XlhQRVlkMElVRlU1Rj5UNUloVFJpSjEuWEg0fSx3RFc+'@;
put 'TCk1PTooOVtHL00pZWg4c2F4Jl94LDFHM2lmYVYkWENBYmYyLDNlMnt0R0AuRih0QDpCL3Z9M1gvPD1UXlRxdXNYI05QcSNOKXthWD9LIURpbUM4SyMhWiJjS0I0Zy9KQDJpWW13bzgwW3ozSFZRcUJDZE5QP1FwIXAkVER3e2E1XThCcDRnR1I1PG1rPGVQQCQsXVNGNiUoKzAoS0poJitGcENF'@;
put 'aFg5Wi9dKSlEbV8jVU1MOmVuOlpnQVEvUnFLWiwuUS8jQHA5WEF9ZWxXSEd0cVZhWXhEV1ssY3k5fGBKdGlNcyxAMTVKR1JmS1o6VTptQCp1UThRJj49XmNOL2Qid0Z6cEBzejR7Rj12Q1k8Xmc1Z01xPXFbVTtCdClJWiQoMjZNNXkoI15SUElYcj0xRHVDSUc6VWc/dzBGU1lmSztzUTpoR29A'@;
put 'JVNlLEtVQ1F1ZkJEI1ZsPC4+MyxKRDNUR2NpeXpjfVFOXzNHKVBEJDAxVExQdHl+KHZxSz1gOUQ7SWFgeU1lNEZZe3NFfVk9a1UpYUd0Q35QN2c1e31qREhZbElQYGVvMGQ9ZT5pJCEvJGIrM0AqMStNRWVod3V8LFtCZS55S3hUQlNRMUU5Z0FlfFRlV3k7Tj1dfi5nTX07eHIjfUpwUDtHWU9n'@;
put 'JGZPanRiPDgoT1U1X0hTUjU/VEFKS0QvVGkmRW1JWUQpcjdlTkEiLkx2blp1KiFHKHgyPXxDQmp0cEBMY3xEPVhJPEdlN1VYfDl+STh2SGwmeHQrfUFXJjl+KUZudlcvZChydFBFfXU6OkddWTs1MG9FVEhfSHtvdypYRShWezozbmAidDFYKTAyZndmfjFaeGA7bWNfb0QoVyI6KkJWNHUzXU5L'@;
put 'LGdsKCQ+V2gycnFHUkpzXnVIMyk1LG0qVipqUGxGRW0zRC9hQiFAUF9RckMmISZAYXtqUEtpZ1F9IkM4Rj1vMnAxUWkxYG0rZyZSR2w0Sl41O3IuMFFpdXdZQn5JL09XZm5ORkdGQHBpIXlDPkt+eDMpfD9lPzxuUCRVNGZPfUk1TjV8VDoxd3xtbz5RQGI1JGFVdzI9ZGx2dDcobkwiUz0oOT8u'@;
put 'K0JrKWdBcCI2NGhaMlM+OUJIJTRsMHZGU1RXeG1dSyg7QXBvR3F6Rmc2UzAyVkRKYGt1MjE0ZzkoTCl0TGRRL1hjMCwkXWJhfU1fYChge1glN301fjgjMk9uN2BNclY1Zj0qUUUmcFsmb01hTkNCKzkuKVl6NixPeSVEXWt8L2ExQnA/JWZwaXljYjxVJXtgaTZuV0hjL041JVMvOVJpJTNeXSRl'@;
put 'UyojNXlDV1IkR21dNS59dmpjPWlhbmUieyZuYl5aO1pLR1FSYnRmNWdPImxUIlFUIVNKeDE3JChfdVNYfGk3MEhCM0JhOUJ8c3B2T2JPdk9yd2ZMPS9qOmdeKytZI2Y8YVgwZGR4YCpVQzFvVG45VmhPJmZufUtoJH18OXV1YltgWHB5MVpGQFk7Xk5lUn46NSlKX3BEL1owZS43KDRuVnkiXil9'@;
put 'SXZCTUw1U2RIN2J9JFV8YDRHRz1AUlU/U1RCfmwjZkJrJmxKQElEaT55fTQyLnRqcTksRF5QWDtiJXBMZFc/byRJa0lUVENtNkl2YjRLKHJTVG5+NUhiTFkxfGJGZntuK2w9QUcqTFpPZChqUTBJTTt9MiMhQjo0QTxPV3FzcjJKJS96MnFVdHx8QUlsOmhCTVNReF9eJH5VVn5UaiZGU3tCcVpj'@;
put 'KEFKP0o5d0AxSXBvXWZnfTcmSDNrdERSSFlpJmJKRXhHWVYxYlJyImZUdCt7V0FWfn5jLls7UiNUbClZfXspZnJscmZIeVI9ZzEwT20wV1t5SmQ7eFkpV35ucTA/WlJ8QCklTFRxfVQ0WTNsN3NuIU4rPmRRVVIvYjxwNit6N2AuaF9VYmM1MHBsd3pRTGNpP1UqYVUkWiprYWEpaFlZdT4yRyRe'@;
put 'KHBLfX5ITCRiSjRVcSJlTFVNMVFWN1ZjIVlqVn12V3RAVHwofjhuVHo2QlV2dDldUW8yPHc3JlRCLFFrKDVLd2w9ZSlsaTZTPytNezxmP2I0UVdfeGJ7b1Q7WV1ZOj03czxefkNzS1BhcVNJX1krL21KVDRFUilnaXMjLzlvMzJaPCN0cnVMTWZ1RUlxP0RLbTV4dlNBO2ozQyQ9cmlyJTQrUFVl'@;
put 'XURnR1k1Ojx5YUsrWVZCMGQyQ3Mxe1lJeWNNJCxqPWZrLGR4Ojt8eWtmaiQuQyRnND9uI2oySFlPMCx+Nno5ZWNmdnpIfXI4TndNSGJuZFVKMmZTIS5aVSRgZ1EjY189Q29GNllJS1lGZmlob25Ofl1SUHlKJV41cEFNdWc3Tn5BXmtjYXl4MXIhQmg4L21XXXxsKG85Zk9AWCNiUWpaWXgwcy93'@;
put 'dzQqZ1dnLlQpdC8seXZINyVATy9OQmNdMDAqOVk9KF5CS3dePyE3PHBedComSUIuWXRnRHV7Lkc+LGZkI19hRF0vMnVUX1p6WDJEQENaYUNDXzMxVz1+KH02fHc/Wko2bCNjWSZtRllqYkpGTE09blVJY1BFZXg8bDMwNDRRbz5DTDNPNVAkLlM1IiFbTUd4TDRAaUUrYXlaZS5oeDh0YGZqNll8'@;
put 'cWtHL1ZpPGBiKHMxN04+dmRFL3MlSHFdVF8zfnRKb2h2dnJpWDBvY1lvUn5+YCs4cmh0e3NDQXQ0PzAkV1p3KG5JQTBqIVRNfTA6WT99clYudDo2SVdBVTFJTXxgZVpfIWMkRks6Qy9CR2FDQ00ieUZ6TXAhJVNWR1dxNyxAUmdiZ2csJjo5JGcmOm9xbE9TTztEKjJqUFh6JkxbTXIwJUxMQntt'@;
put 'dWZmeSl1WFpyYDkiWz4yPk9VU3JjIztzT1E6fiYoc3Q/Lj0veV5pWnJLflc5RyU5JEMxNCpJflJTb1Z5Q2t8WC85QHVqcmdUO1VhSSkpVEVqNi5TND9edjVndDtHbiZUIWh3QVModylJWT4mSmZjVjEsLjB5M31kOWYzLzYmW0BeOC49Z1o8LHx+aUhuRWs6e1VENmBvcDoxcHR8K19fV157OXIz'@;
put 'VC9TKjNHZjp+ayxXOiR2XmNEWDs/RCw9Rn1sIXNseShYczNGI2FEJHtxSWVhVVchVlI0NmlBJjgkM0JJKF9eflczd2hPdEp+bCgpZzRzJXN4WHFPRm8oSENsYmNCVkRdVEoqLj9XMjMlYSx8QldaI0g0SzFEaHwvZk53PjN4bCE+YkNQVTtnOk9leWthPiFoaVF5QGdOaVtBRnpHQFJzdyV7UH55'@;
put 'LzhgT15LUjFlPVhodnAxXmApRGBrIjBCI1ZYSmBhPTxwPEkwQ0teaWUvM2laXm1id0tjR2AuQGAsZVovfVRoZ0VZQXVnNj46RD97MCwiSD5sK10pUTtuN1tOOiN4TmVhXlJJKV4oIVZocThBMXNfUHtCbWQsYzh+PmNXNWswRldeRko4cStpdGQ2UnAjTFtlNShtPDRaQlpHeTIzIVQwPkM4RGxC'@;
put 'VUlaQ284TnV7UjEjb2pEOX5rKW1hNV9mI1EsM2IpP215dHtKXnYsNWgvfDR7e3N2UEpBfXd8VWJXdDdDVFQxa3R8IkByPTNoQ210JloldmgxR24iU3g0cXcjI3VNKXs/RXgwdksvQnBvXWxneUc0UjBiOFFmKFdYT0F8SVBqNWRhUWsvbWl+NSYuIm9TTUM2ZFpsRnE9fXk7OSRtJHo3RyJMa0xF'@;
put 'TTpaJnt3M1FhSSV8UzM3K2NuK0leUTVnXishUztiOXgkfD5FPUVVdj1UVC8laDo2UDlCXjtSMENddFgmL3FlXXhvTWg3WkRzYkIzOF52Yl1nOkkkcn5CJnRJc2l5XmwzT09kX2pwSU85KnhCdVV4SzV2bWdZQCo7S3psKG0/Nm19XyFxcT5jNFtuP2pUXXVUPFhpLiw0RG1zRDxYTXlPcl5XJSk0'@;
put 'fkFlYXhea3BWRUpTOGRUdWBdb3g2MWwkJnVyZUZAYlhvdzc6aCkkOkIramhjcil4fUxDSS81djBUfmFWSlpUa3h+KFEzckNsKHRLKSRCVDkvNSJfYlUlTSVofWYifCJTY15PJCQoKjx5KH5hQ30sL0t5fTVab1I+YlhBY2F4Y1kpLHsyUzp8JUc4QXYkTiZZbiEzcik+OlJZP0ViWmpKNGZrZE1r'@;
put 'Q1o/SmJqM1I0Xj5Vdi5ePm8wRHQhOCo5YmtwaFZwJm14M35rbVVMWWpJL0pfTjIxVylec3E2NGpZQ0gySkpYM2xpJlVuSWZtKVVtdjduKCNEdCUzUkteajg9aTlnSndXJHVtSzJ1SmAoYXFnSVF0NkZNeSNacFY6aFkscUZvR2BFQTszdlJeQzBFRXRDQ21lJkp7QXN4WCVDO3JLUTciZTFgbm0v'@;
put 'U0pibUt2NkpRdSZGJlEvRFIyODc4aU44YCNiZFZTaFRwUkFVdStVSSpvdyYxQERoeT4uKHRmVVpvfDxVeGEwJWVPUmVCUXI3UlVQKURRQnp5Mk5uZHMhcU0xfXtHc2VHUXpfcSxBSyxbTSg8cTlDZ0V2UnRLIjhnL31PR2A5VWNBNiRnR31fPHc3dEhvYiUxMU1Oe0AvbHJOPDJDIyVzZy9QeEJg'@;
put 'OXBkIU04UUBreH0vcXN6YDJ+RTlfaTI5fS9bTFJva2gvIz16UkBtX3dGUl0rQGZDcX50LkR4PV5ILCVbbEVDWWBwdi4+OXQ1PDZaXyNbR2V1KD11OTYxYDZmWmpXMT5rR0E4MU1Qcy9SW1VbSTVwS21nbCxwXlB7XiIheWBzVjVFe1FBTHx8ckM1PGI/SFdQbDJnK3tfZmR+M1p1PTdVZjpfP2Zm'@;
put 'LFBbSSwheCJPaCpqNzxqV0xubFN7Y2hKRFtmIzhzSzxzSSx7SCMibT9SIVUiLz0iazU6ZDxONTZ9Vko7Q0VzYWxZJDBBd2FFJjc+Y1plNExGc1lAL0I4VFV0QGg+UyJjQ3F6M0F2S00uYUBuZjRFXkJfSnA7U3ZvITVzfE9YTU58YXpXTGI1TzRISlFRe3UhSDpGK1YjKUduJCpVL2FuJCRGcyVt'@;
put 'UmdFSVQ9NXI2dHQ8PFJLR1FqQFRRfSNNdTV8Z3dwJVZbUXQ7RkNOeTt+VW83IldmYSxFOj1SRnd5ZEcqLDJEekNPbmB6RT1CKCQ0cTtvL3hsR1dBQn5Zd0NEXjd2QWpWbzVUL1tmWlM2Q2YsRD98KVcrRD84LGMpR3VNfEtlT3krUUtqKnJVbWhMPFlMUXg8MiRrXSNOeTllPFtIQi8hYlVPLH1J'@;
put 'bmZLOEMsRHUzVmJ6QVhQOkh2TEd6VnZObDR5Q1tUIX1YcC5yemNbfkZhWjJjTHpwc3ZhUCF+YG1APHxMUVQvbngxU3skelFAKiliWl1wcEBqeDRtYSNRJGhmUSZlNWVPUTRMRC5Nckx9X0NTPjtrKiN1LjRSQS90ZFpSP2tQVn5NZEZxZSwmOXJvaHwrIis0VD9AfHJXRV59QEMlc0UmdykyUS9x'@;
put 'OXomMjQhZiZkNChwQyZSKWR3USFzUmVmNTtxSlBPPC9XUipVcXtnZTk9O1A8cDYhUUkod1BZaXc7OT0vYD4pUVdlMF1bL0dJTylWMkI5aF01WGZCe3BWYSlCZTtNWiZwLlBWUEdnTzhgbUsheHB+Z3I1IU0qOmY2ITVFQWlvUWxMTmhXXV5rMUYiRC86bFM5ISR3PmlsQltXZUpiMCErOU1efElp'@;
put 'TSUpbGtJNyVTQlpjNGRsRE4zbktXeF1XNl1LUDxvMjxWQmE+PSVPfVhrbWFtIW9BaVNofX40Ll57QkM0SzVFY25RIj5zb0RIQUtaRWlNPDtmXyNtOTQ7TltEJilfKCRTbGRlZGB3UEsqTDohc0ReTSF1MFI9LmkldSlqLHoxQU9pemdxKSopU2AzV1JIVUtzMSJnOEBFTW92PENGdUwkYT1DKkxL'@;
put 'MVNRSTF8I31ub2xDVH4icSRae3RbMSFrb3ZUVVM5b0syPS9vT2FUKThKZ3wxfXNxKl0+LkRJWj55KXtna0BYd1k9YGspTlBwUCFOZ0VsOHZ0Q3dtRzpwIzVxIUdteDt+VipfcX16VkVAMyUjaitudStCU2EmYVI4MUgsVEhYLmJSV0k1LzgwQCRRM09kUFdfbUMzfk1Ye0NMNSIiQy5WTHw1Nk1x'@;
put 'U01Jc1I8YEY7XX0iU31NTG9CTnchSkBpOEF2Wjs1WyhxU2VfeCJPKjhVUTFCWXttIz1DX1F6QzBEZUJgb1dmLzN+c2FuKzA+SigrK0tdNi8xZmtoL3BZR0tbdV83UG89aCNhQy9TUl9WTXkwIUlWcGw1cG5lUU8ocm0lWkguKkhuMUY8OChiX3I4dz9bVjFHQFtNeHk9bkx4IXBvNX1LUVg6QH1K'@;
put 'aHRmdX1pTTtVVUJhVypMMmZKXiwoPUEiWCpDXV8rd2pUM1Z1YSs8Q3pLTUspNkBLRVh6YHkibnpjeiR1cXhaMW14S2YscEA0fGphLmhQfmxQNlY0RUE2aTx5LEJTPWFgU1l7Zy9yS1czbTJzI0FAaEJLN21AXlc8UVJHXXR2a2puO213Im0mT3ppcDt8Rmx5TXZxTk0xaG1jNEAyLn0zMmZAcGU1'@;
put 'KkFSTnZzaT9lQDtlSXBDN2FnM2ZoWjs8WmkiPzs2L3lqXX49Q2tTWUYqRGdiMVdTazp+e010QkIsb0I+QFNmNnssPzxLcyYjaUpHbDtVZFJvazZidjdIV3ZJQ1hQbGl2cjZxZXtEQXJAQFd7PXQsKjErTURYc01HVlosbFNPInFadCpsQV5jdnsuYSU8WWImZUVdO2EySiN7ak9uZ0Q/QzdLTlRU'@;
put 'ZmhvMWc+QDI/NTYlO20qSWk0P3JHVTlLdys+YEU9fUsyOHsoMDJdNzZ6VCNSPiRBLnh0OSh1Im91aFFtdGArdkk8e3I5bHZYNyldUjRybFJRNy9qPlVJR3c0Sj1OLyovLykoQ2wvKmg0LmteMGdhIW02KnIxdmJmW1Qyd3NbOEU0X3AmMUkjVnhjZ2ZUbW8odEs/KD1pRmAkWEouJjEuQlBBXlVj'@;
put 'QjcsfC5KVWYkOFI6NGFmdyEieC57UipfIyNGKF9DLGBuZD1ybFRCYTF6QS90MVZqYXZMZW8hYFl5O3ZjQGlDaXtjbU07YlkrS0g/cnA9VmFRWlBfSC4hRUQ5dCp0PDVqJnxXTT05dngsTFskM0VLNiExNT9efFooWkxRd1RLVkpZaDkvcDg6OXUufWBab31vemF+NHVyQHhXI0U/NGpCOF1vTWJL'@;
put 'Xmc7MlZoaVJDQy59SWRfSjwjJWBnKGtmcEcmVzJ5amc7azxCR0BENGRvMUQ4RCk0XS5NJThdN3pdVU9IVU1MayhsUFV9SjZzKCFMV3w/aj1WRHIkfWloOGpYRE1ENjFoUSQ+bF9tZl1FQX5gTGN8VkAzMzhHIkFZaE1fbl5fKjZYVC8+QkAubWE3IyZWVS96ZjxgUXlJUXtpa0BqOURWRSNGfnQv'@;
put 'SnFgZSZQQTNqQDYjW2ZffVVpMUZWbE4vQGIqQmU+b19LPzNDRktxRTpKWmF+WHQzYmJUInZYdyg9ZSE7WWoyUj8mVnZnTzc6LFJ5QkJYSClKJSFpa0NZbUo7MnAxazVqXkhUZ0N5e1Z6TDRlRUtVbm1IJEg5c3BRSV0iUEdGSmohJCgvZ2VnPDNydH07RTAjRWBtQ2BORjN7ZnZESF04KlJZRmE7'@;
put 'OWpOblNiQGpvQG5ebDpGMTlHMEZ9PjJGWytUZ2RRWHFdR1VPJnk0W1d5fH5zIXpRejc2QTkrcHxkVU92VUxJZHZAc0JBe0pfQDs7L2l+I3VtOTwiZXxCWVRFcV4oQ3hTajBtdUVoOllTdyY/KWBvSHU8ZCVxaHd0Om0jKUpPPnguVEp+XSVEOHwkaVM8XnpbcVI8bHNKI25+aHxxel9kK3g3TSlo'@;
put 'Kz1sS2RoNFZAfmliVnBfV2dzNEAjYnhAL2N3KD5hMGo9cEE2PlspZkh6anI2Rn1VSSxiVGNfI3g0ZjsqOWNDSih2d2JpYHJlaixBe1BTej1CNSpYdTUvamlaL1IzWVE1XUwoe2lgV0FuaTIqSndkbyMqKCJbLCwrVXViUj15dDl1MFduaX5gPlVGdWN3K04oWVJ3Z1hDM2UldFV8QiR0Xk0vV25H'@;
put 'cyZ8XSZkSHQ9WHo5R1p5Znl9RTJZMCxNeT8vZn1IViRVVXE0XS9WUUsyQkEmV3V4SS5rbUUwZXg5N2xJdERNeVFmLzF8Lih+PU1gYz9Rd1MzIS50K1s7WUo4KzhpPDwhN3s4M1svdzZzJXtSQmJWZV1dOGEpdU40Xnk+OEJSeyZQZWQiXXEwdSEyKnF2cVNAfSlRS0plJUYpRSppYEA0SyZJNXU8'@;
put 'fXZSQmRWbSlOVUV8YWxycU1BYT5ySS9DfCojPEN3bzM4P0RaPGhKXT46a2hFR0R3K1s0aD12X1NvYlNpdyN0PERYJjd1JGE0IThMcV9jYFgyIWg3N0I7WCNgOEY5eGM9RVk8MD5AM3pAakwjL0Zvak0jZFJ4QDtlUnFDYmBZJS98YiYwQ2pzY3ZvPm51WW1JSz1GUVZzcjouZTUxQiw8XVhIaWF+'@;
put 'JSJBfTx8NVZ5LlMlWX5eMigqQyl0LkA8LE81SmVnZ1ReSD5Qbz4lM2BwVFFFMCR+eWM1fkF0cWJpZmp2bmtKJiVjOU8qdTRwOEMsQ1FsQVQ9eiUmJTpebjpJVWBddTZLRU4oe2NXaWZaYiRrM19ZX044Z3xSaC4le3trdnYlNEp4ND07JnhLPUdDZyhEKFY1SDt6dCtOPnNDal8qP3k3Q2VaR25+'@;
put 'RnUwVmIuWVdFcU4hI0p2OTBHcG8yalcxOzpnRTY7ZEZbdGkwT2pFQEA5YT44P2tiPVZJUnBHOVpUYFBlOj1scn1bTTgzUWAzfClpMVgmcDdfUTk4XSVuUjtvOTY/bVF8Y2JFJEBdVU4vLjIjdVhBZlFgXkNUK2d4I2JbY2dVKzxuLDcyOUJJMG5tcDhRTzdILygzaEFRdHUmL19BaUtbaGRGXlBd'@;
put 'XiE9QSpNN1s9cyJjL2U9PXxMVU5SVHx+KnsuIV9GSlBENSM5NGgqe1N6dVtvKDJtZEdIfnImdUxKMkFeIXMxSzNuVHRfQmFTUXw1N2gkYDUrQG84eDwhMSJEN1BCM2teIWwjWVkycC5uOiE+b2xHdHB5O0x3JVhaUzdaUkVuQz9AMih9T35nTSlzJG8/bTdgcEg5VkhTI1BYdGpDdXY6fGQqRVlC'@;
put 'dmNDdCpOZDRdYUZiMlR4ISNwOmI5fjlgSTkrcWxSW149fExkPDMqVyNmX2B6cytmTFFPbzA1NCYiQTxHdihnOnIsbGtIdFRbK0RfMipfQWxrPHAja0hRU1I3TFdNJi8+S1tKdSRCVzdlMy5zYU9KOk5NMUcudTorIkMpYGY7JF5AYFdwPHFkI0ZUZixpIyxody9wZnFUXT9RP2N7flZYTGhQLF1l'@;
put 'TV13ZmJkPigjT0lfYHk9NTNMYHd8JnNAaTs4dSlgVzglK3BDWVNRcEImKSpobzRUWy9gPSg7W3soNm5QPjskaj5KLilCVnd9Pz5OJFpJOVFNMVVMa11PNEomUD0oZUxXLHB+Q3JkZ0ojUjhdXllEJmlMTTp9akkpfSNxUE1MLno1Z2g2ZyFuRF4/KldiMmUyXkd6ODJgeTpSejk2NUY+U2NOY0o3'@;
put 'a2tgamZ4UmYqVnBabmNPN1piSC5sbHwqdFluKV1oPDp5dCQpeVM4UTssRypRL19LbE9QSFM+TUVDQCE5YiJZLDltKHdeKDllMmQlfCFJPSM9aE0/VmkycjF9QHAkZnZ8IkZsPVR3aDowKShgKGltdnQvSWNRSWNUPS5+c3U0JCxbdj95RUE+UUJqKjVoXV1CZ0hjVkRPRUBBZ3k+MHJ1OT0mVSFA'@;
put 'RCZYbiNiTUg9eW13MCgqMUdQclRuSktWKSJpIi80clFJTktqcWBtbCZ6V3ghKCtRUDtlckkrSzZOSVhFRClwLl4qeWldaXg9IWhxLkYmK0RWWkMpZVR7YHlpSTBXMzVtQ0JtLkxaRyJDW0xrXSgoeSt+UXZxUGVUfHFEZDxRMjIxVWlaQ2ZCRSwqbkxOJVVbLmlCWCk/V3MuXmdOaVteTXJwcnZA'@;
put 'W29tVlJ+O0g4Ol0meXpeMitSO18/Mk51QzNjSXxNRG5rLCpYOkl8T00vb0BwTk1XJTZ8VGMoTDd7eVdhXWtFej07O0gwbykwK20iSF5iQntdNjghYkR2QylzKk06c2xCJGEjUHdHTipYaGQxLi4rdShxTUhQfTk0MUFrNm5vdzZHYXooWEg+RmBORk5+KS5PT3kwcjVPKU8lZGtiYWEuMmxHRlEi'@;
put 'SG0ia0w+RW9RNVdZK3g9X0xidE1Yd1BgcVU0eV9fXTxPcEo4MzNHVntbS25pZTxSfHlgRXpJZ2l6V2M6T2UhMjEsOTlib3VTPUB0OSY4ayRwTTRALktoeC91UyhuIktTI3I/JkhnKmBCVkBJYnNzZ0ZgKFJWKjt4ZX4zM0dxMzVHSFZidGpFKmxLWDNiUVlsZlNlUHdIMkFMJVEhZk5bMkg+W194'@;
put 'JEExZCJscEQhWXtEITBNO2BMKztEM3ZXNjAkUHhsX28sPkYkfmR5cTpIdUxONTRfdGEkbFQ9cWNSMjdDdWdjOUNpfFB4NXhlN0ZUNkpBMll2O3xdTnNsd0ElIW1yVHYhSUVXWzVBMUQ+WmpzSGRmWVNYTHhWSSlZJFleNTR6I2U5dzZlWXUrKDx4KmRvfH1VWVtKUiFyIVBjI31sLjxBW2c0R01M'@;
put 'aGVKNDlFajlRQFFnQVtaZClNUjAqOVZuZmZLPjRXYlpYdSQ9Vzw/TEs2V0JCMjBYPzJfMHpuNWNLPzBwTE9UUS5GRWUmaHdSI3ZIJTFWbCNzbkV6Ol9xYXcobXVnVSxzeCNzMWlreE14V0skN0FJUCZ3JSwwRC40TUl3TUQmMkpFfjMyZDpefi4jPkg5aS95ekBCVkR6ZjJrXlA0Tnt5SipJZnxG'@;
put 'XTEkdDkxSV4zQm9kOW4jfE1JW0J+ekYwUHdUPkEmUHFQaUdsUk49blooZWFVW2lrIXlKRVFWYU1LUzJ+QUo4JSwpd2lwYW12PTBvaCVlZzAhXy43QSI7QEJDRFV7M1l2SGZlUlpIeXhXLnN7WWwsOUxmaHUzRVNSYDV7NWluUnRpLk9deEtpKHNxKE5lSDtJayFvUXxwYjNqV1I9NVdBO0l3KHFM'@;
put 'I2o8Zlk2QmQvKn0mUjRbS3pOYWRMV2ZKJj0vPDJ8fHxxeFZwKUJpZWBFVzFlVkc3W3diWyV3bDNTTEhCe1g2Q2JCQD1Tb2ZqMyltWHdXPl0zVDxaME5gbGFALH0xfXdCKUJxXlh1JXN7P0tMSkx1c1ZKYCFnPH1ebC5sQClPdzxHWytBNjMpSTg7eU03NThzeG00WjdFIkNOfF1TbV5FQylzNHI1'@;
put 'OloxNUNQN19SUzZUZ2I7d2RYU0ZibU9RPVA3XUxIVjx9LF9kZ0Qpb35NO1B0cndUdHlYO3pWYWA5TFpzTCRIMzZ8PTAqUkBXI2Z7K0ZtIWhMa21FZW94S04zcUoqdFgoPHNPOk1SOElEdlUqPGJNZ18rbHRpPVY+UVk6ZCxRRCF3RXZQL1lxTjdXeUJbTmtqa0Q8LHhQLENwaHBNX1pGXktaTUhj'@;
put 'TzYlVW9EVDk3Y2Bed3JmKDwsK1pBTzZNOGooJS9QbGNtJSpfVWJlZSwlL0NuIXVjZSNqYSFSayVldUROLCQpXkpeaE4hR0ZPbWtwdkZ1amZVVzN9RV9ROnJmOUpMX1p6TjdYODFSfWZIKTw8RkYzbGl7YjRLb2Z3O10oIkJkRXkwXzJvaVZEJlRSX3o+dC5vI3xTa3xPRSJlZWJAKD58TjVXQjNi'@;
put 'UGc6U0g3dndePHM1SzxRfltnckY4QmReYWN2Pz8pblEuMXY5SHtNKThPYz03dG9jKk97MHklL3N2USRDWHd3akJSVDlEPzpkPkFEOyhpKyZbdDJHbGZ2IXQme143XTJMa0ZOQWYoeENNKFhlODpiUGp6fDt0ZSUoTHsoVWRGIWFeL0NASkZ8ZUpVb1opYjcjYjhnZVhUcSwmcUFDfCFVMHMsOCRw'@;
put 'M1FNSSMmWCFMQWskdyFnanNsQ1ZrcytdVkJMSVE8ZzolTjZrKjFhOk4yblJSSEpdMm86Mz5OMUN+enJxLmxAJFh8OXdYSmU5dSRmVGBHaSQ0SHMpOVpiUWdzTVRaUiw2QWNATkxFRSNnZyYlSW8pNUNZaiI8c19BKl86ZnJEe2lLZEp1fCwvNj9bQWhDUFpaLzdDXkU5ZUxxc1JxS3toOyF3My5O'@;
put 'UFs4KktEfj9SQT5NUE1wU0x3RGd+dkBsNEBbOThrSmdYdVF2JHtTSTgzTyU6floubF9MQVYqPGdVX0IoSW96T3IiMlF5OmpwKTprWEg3QXUzQjpfRT5EZTlSMVA7dDp4N1NkRk4yNjkmb3o6IlJSMDB9d1oxcTJveDBtUmRMW0wqOytHfDleQyw8WiUqNGEwZm1TfkZWZmBETTJxN0VaOl5RKEIl'@;
put 'OSJfZSlONUhHUz1FcHl6XW01RzRAQ3NPZ214Slg2OSEwWiNOIiE3XW17PTxEUDdweU1Je2B4K2Y9PlprX1lkLl1iR0dYWnlmKnI3Pmtwciw3ZismfSVYPUs9Y2plcHBwIU1JUEdsO2NmSDZpKXRsOzVydlMyNEhXMGswJXg0IVdaInYqd1ZqcHVjcklaPCxtY3o7K1g/YH1AOGMsVEhfZkx3IX52'@;
put 'RDAiK2FBUXJKYlZzLlJ2dF5HWmBAczlJXV1wd3RVdSt6Z158ZHB3Tm9WMzgmRkxxeEZuTmxOPV8zT15LYyk4VUE8JkYiTE1gRD5+WTw+YnVIQ1R2WkhtIll5KWZTPSQyYkIySCU0ZnxlVX1VUCtQMz1eRilgWGdydjwwVTg1fUsjcDQvZmJkKyhAVCQ9O3klaTFVSy83V0kmN0lhMWt2ZF8mYVhI'@;
put 'YSpmZkRmeWk6IisiWiQlRFNUYG1VaFh6JH1hcF5ycjcjODdMQ0VtXVdHfHs5blkoWlU4MTBkYGo2ezZ6V3NWMVs3ay51IT5aVT5VYU8kTypsW0s3ZSFKeztwVndwR3tGMzRxMFt9UCpVIip0fV1MdTtzN2UkaHNORCw3VSEyYDkmNixtfXUxVyozO09iRmdxKGN0b0ZSeFIzJTRKYH5uQyYkPiVB'@;
put 'N3o4Qil2aEJJaEpGK2E7ciZmV3R4TGZfeFohV1s1TE8waXopRSs7OSksaUVAOyZ4enYwMSFWM1VicTg4eEBKX3xhTChUKixhUDwlcCVNVTJGeXVpZ0NBMjgjWzomMVlOKFcsSENUKD1TWV8vfS9DeT52MWdTeVhjM2YhP2pgPnNVUzxDQjJeSiRhVTlYZ2pPLkcmTnJvUkp2VXgzM3FHaWdxWlMj'@;
put 'OSFqdmpXP1VvLmJvZX5fYFJpUlJjXzsweUFAelZOfi9CKjEybER8an5fUixRRWZXTkEuZUV4MiwwWSxYfXU0VX06fn5lIncwV24mOUVaKXw1fCllXlZzP09LZXFSMnUkeGFPV0pFdnJnd21hQilEWXlKcjVqJTd7ezxfakJpeFNxZjtRI3UsX1daOn1LK2wsLllLd1EuQ35CSSJIPEA2eEZ9Lmxj'@;
put 'fCV4RGI3e3BXdkZSTlJaQnAoQDtlXiE3cS8kUkJ5PiZJSzQ7LllRV2A9UU9qekV4KGI3Z2BCWDRFOHQzRHkmLDA6UXJWZilISXFmLy8xPU5WNXRVY1V6SUpEUno0NmY+Zk1JUnMhWFBRQltMOWl4SWpkYFZiQ2c5eVs9NVRyNi9gTEtsUDo5a3o3YEMiKEhCcX51Q3RHUU53P21wcjcjPm1GSjhh'@;
put 'fHchQ09+SFBVSGIkMnBRVUBeRSwsQVlAZCNGT11DP291Mkw2R1FON15rQlZJMy9tXTRMcTE+ViY1Y217e3BbLG1scFduVkssJFIpc1t9eykrJW5IRy5Na1I+U0VpNnkqYWREZWRybHAmKUhedDNVajZSREg3U0N0R0JEc3hpXylXbldqS31HUzFYYnNVa3JpWyZULl84TDxRSj1NRjl0ZTJ9KStJ'@;
put 'cW81RUt9U2w2W1VUOjA6cy9vVUpqN1dJWk8ye18hVl1nTilVbEM0bylydzMiQyhJYE8jSUdVUlMlNHxiNWUrMHg2enlbKktFIUQyUW91cmhRdzJfZH4lJSJjbVpHfnMmNlt5a3dsRk5RO1ByKFM0cTZ4bDdeMStjaGRCNnpwNjNhTClYOS9mY3Q7XjJaOWoyNzVtVl9TYCs1S3lZU3V0THxIPzJR'@;
put 'an06VExEbChlZyRmTDFxTXpLV3l3fU52LDxvQT1LOnJxbTQvUGdKRjdleHZ2ZyJfZj8kLlRoZHglOzNfJj1IcilrMTQ8UzRhJFgiZjxpajJIMD43Kj4rL0ZCeUQzKDtlWyh5bWdeT3VZXz1vaVpoK1Q4OF1KLjxLMDZTX35OfH1tW0U3MUtZNkZIcyJSZC9JWHw0VDEud1F3RDchZXgkMj1GYC49'@;
put 'Q2RSfHZDVWY6XkoqYFheUDF4eVdOe2lgI3VbYE5GOSk8Q2MlZntOZXliflh4WS48SjlITms8Q148OXsxbDZ5QyN3KHAjWTdyRFVdI3VaT2s2RDEhK3VSMDomTllKVyxEWHsraThNamkxYy5lRTFNJVtdSURwNV9tWHFTezBAcS4yOnNIPkd4QUVXc0sxZD5eRHl1Tzd1bil2X309KERDPWlKUHhU'@;
put 'KDJhbmE/W3VqRXN6ZCZ5M3V0dzU6KGpIUyR7KGdIflNQVmRoPChLWVo4bHFHeX5XYXM2NH1NT1UkbGheP1B3RzlucngpJE0uL3pzQyxtTz8kX0NlXmNRWkBjJGYpMl59cWd5SStJYU5KW1NZcnlKPDxFJElwIntVdGx+dWRrfEcsYXF0dFMhcUhaOHdxWVFidX58QD0uRXYpaV57ZD8yczA8dExm'@;
put 'bUo+JiY6QW5Sb0I0UjNpdSZjZmNLQGMkOWxXajpMTTRjMjxnfiMwQHlKJkkxOFArPHxCQGl9OGs4ZnhvLGRoY0JlTH1NUHBeK1Z7bGMlPnZ5RjJ5WXNyTGRmRnpsa003O1pgYCxLe3gkPn50RiQ0XzR3TXZzfi44TzIpTmlHQCokPkpnKD9KK1JxTDwsJigiV3t5fHkqXzgqdyg9PlZEZnh9K2o4'@;
put 'W191OCRZfG5ROyFuaVtCZkFjJDtrPld2XUV3YmMwfTU6W0VNSlk8PkcyTWNLaFdPQGNaISlpPDNnXXk4fSVzN35MNUhXKDhVYEtxeFtbYzJLQCVyQHpgTC5IIywyQ19dO0dPTjc+V2NgU0RhVTI6Iyo4Lyl3WTcrTmlMZX11OmhyQzpFJTI4R1EyeEYhe15kaGF8cylUOkRYfn58THA/NkNmSXBe'@;
put 'L312X1lXPEZeYmxdPk5gYUcueTAwIWQ+fF5+bG0yWSFKSzZbVGJKNUFwLi5sNSJmP3RCQjtofFtTQmNsI0c1bHo9PVZoa3ZdYTNPOUpBODd3WC46XVRyRldnQG96bDgzVG5sZ2QvNCp9YSs4fThDXyh4V3wqZlNRT3tndkUqfFhlTiJnOk9FZjIxW0Z3XXw2digoJHJAcS9YL0cxcV9SSCIwVUEl'@;
put 'd041Tm1wdX1xWmB4YE1xJkIxa3l3TzREV2hKXzVnaDNqTEpfcVt6W05SSDZuanxCaE4ldTBXcF8le2tyaH4hVVRsajhDfE5dX21LY301enhnUUQpWCt1SENddlVPMnFLXUg+LE4/dSlhKVhWREs8N2k5NFYiSS4mPTJbbTRCdmduLyVbZHB1TUt1S3pUKjZUWS5iQUl5RU5YfmA2Pyp1c2ZaTD9R'@;
put 'Y35sSXMhWTV4Q2h6R354VSh4Q2BBbWkjOiM5Tj42dWxSfm9UJmEwc1JncDFgdnhsVnJkQjlWZW58Lkh8cj5MdytqJkVfJD09LFIqcFZ6MX1lPHhKL0RoSVFiTkYqRCMxOnRHVmJRI1VkWDs+NyRAZlBqPjoiYSw/V09SV2h8dXh8QSFGZUpYJWg3MWYyQEQyd2lYbWlVWnwoV0ksWCs0YkxtUylQ'@;
put 'LGBAdEIkNTpKPH5WPUg4UGZRXzdrW0UyNkIkRHhIUE9ecjJkYGF5QlUuLGpjZyVUO3QjRHMudmU7IXZaamVfNl5AeXE+YTc1LlFEPUM0e3RPWHN0WkZ2Lmd9RW0xbkRvL1lUYFdyYUVWcXpoNXA1VztgXiNYSDtxcGQzS01lemNOXn5SfEFYP3EuXTcifGhRK2lFR0FHZi9YNzU0bG54TTRyRVcm'@;
put 'cCkkd1ZjZD9HLEdlbX58MWVReSR7eE4uZlIuPkp8fVNEcXwjO1pUXUUzcVhQU14mKV5RcjRrYywrSEI5Y2NGRlZDMktrVlhFYyRKYy90Llh+VTZ+KDl7V3llRl1jXz58M0c5d0l4WEFeT0lIXV09U0YoZDk8VyQpL2h1WyNpKTU2bilPMFZXUm41YFF1WS55Oz9kZkMxcyFBfF5AQzcyIzcoVDp6'@;
put 'dXZKXlowJTV3WltTYEZAUlMyM3x2eSZsNCJvYWZHdVRBQ1BubG4lRHA9QSFVRSxqLjlmSEJlLz0vPHFue31Ac2lQW1N4W3YoV3Q1L3BJJDwuIlR4Vj9tZHEiMU5JW1hgcDl1ekd2SFVjOz9WPC96Yj4mL01MemY6MCtrQVkpNCJvPlV3UWdRVmc5KztdeVhDRDl6OkhLQVZLenciOXNOXXpee1JF'@;
put 'QUpkdmJ0Qj9ffm9iLHF5WCZVMDUzUG0kLnFOSUVaOEtCdDI2ZFp+QUlmWCk1Tjs0N1Z6WkxDTWVdUixuX0NmcVgxZlY9XWo5RExLJXsrYVJwLFAxazUjSFU8RD0oe1VjcWZJTzZWa1cyTlQ2Kz8rT0hYODRwfXo+TjB8YDNeOC9VXX5pTXUiW25uIlI1MUs9amBXZEhvJVhHW11JIy5bSzsjLCNT'@;
put 'XnJJfX51KzJmcVlvezdYK0U1WEcoV35jfVkjcn09UkhXVGlkTz50UjsiaUxJczpmcFRyKzNaVExDZjVqTTU9K11rZX1ROG5wXiRWaHtAOVh0KW9ZMmQ6TVM3MG02YjdHQjMlLj9LZXV2aVQpTF18PFN1dE1XKERNOWwlfUkxIXxUfVFBZ2RNPmduMV1aM0AjLH1qPjJVZGUvX156OkBkYDdofUJn'@;
put 'M2trWGpZNFM1K3o8fEt8KX5ZP2x1OGg2dVVhL2hhSGsjUlZudGlHTjtiP3I1X3FgbDdgb2hESTw7M2hKUSwoQldTdCNeRzlMeEd4MmlRWjQrUld3eldWbmAycnpWSW5VcDttWHs5cGpxaCV0NzEwSTp2Z0IwTnBPMlV2Smp3c25LfjpqQzpuX1c5Mno6NF4qIX46OEhdZEgxLHd7dDFzeGtFNHNA'@;
put 'QytWcTJoL0pCQUNLcEohU0N9UjU5PDhZcDgmTyRvQndkNHhCQGlXZFt9YmJ+MXdEekswRn1oQFF6SGUpTDF8OW4waFdxLHsoIWxsYCY8OCNmcDRlS1QoWmAxYHBeayRoYXdmbXY8dHIlM3U+JjVZK19FNlU9MHVeSWNVYzhBJGJVOipUKkdsYUw9UGdNTHEpRzBdLih8WXZ+clNBW3xKLFciTnxr'@;
put 'JlohRi5MV2M3ODxSWVE2eTNzIWZ9dVFdWDR4JFZWV2l+Rj5saWYiMTVVSX1hJmFzZXNwQj5oW218PURPdmAqQmNgTCUyd1l0MFRfZC9CLzAmQmJdTH1fI3xGKXF5Oz9uUi9BclZsfW9sNDd2LHJeaXB9R3FDMlp0US5YZG86ZCRnR3NJbkpleFtiSFIyMlkwJXF4MERed3xsMz9oSnNyQ1FkKl0y'@;
put 'bmB1N042NFMmVjhOMnh9ckFsPy4kdjhoX0hITGBIJD0ke1VATil+SFhrVjhTTGpwQ0pNK09vbSswYDhDYVBrWDlBNENpdWhiLnM2Ly4leShOfHheK1NtakZ2Oit2N0hmPWlkKndwdi91aHh3e2BUYGpfKDI1QUg8bGwmQHtOIypaIyhkQFI2ZVhYVWZIIkdbZy9AQlNRWFhaciwkb1YyMXh3fDxK'@;
put 'OzJLIWNrUmE8bnZyc2pvJXtTWU0+c1NRTDVbcChJdjQ8OmpifWx2eE4lN14veUVVeE80eFovJXx4NUZgayFGYTs0T2dAKGt0L1oqK1dHZzNOQlFSIW93an48OUgrRWVEWS9+amUuUE9DWlFVJEdjaENufXl+bDJvQWhgcWVTLHw5VXxvMSZ4R3o8cmwhXzMycVhpfV1LMVkxcVVFSjF6NVMxQ3tG'@;
put 'Sl91ND16bHJpQlp9VHxtJjxsND9ZMCZlXVc2JD53Y3dmOnRIdkZbL0tucjtbPz4/IVZjMjZLeiYyIz1HRHRITDxGOlolIU9yWHJOZ3JJTixQQkozU2ZARCl3Yjs7U0wjTjJ9UFRGbXttezl0RDUmems3aC92TyFwYGI9LyVLVF5KNjtqYz5XX0w8OUJ7U0Q5M2J8fGU+Pm1MLGJqVDFfWj4lSFRt'@;
put 'I2ZBRShiL1FDaVt0NnA2Ml9hfSNFdV10T0pkdj9tRG12eDJ4LmxWNUkuOlI9VCNsKSgoYiJoOGN7K2poSUFSTzEmMTBvW1pUdj5pZjhdYTIqbGpPPGNoPUkkM3NoTTVUZW56Y1lrYmRrMFlkRHtkdiNIWzJhU0k6ZnpVRG5fPE5OTlt2bV1hSEIuantEIXA2JU5nMUxqWWxiemxrRTNnIn5FMztw'@;
put 'SGRjMzlfVkJSJHRISSR5ay9nXX40bFtXQWM6cUpZRzN8KTMkOldReXFHZGdjMUlIVFhkQ0cpKSpwbHxTbWhkZ3wkfS9heHNzPjBUY2tdMXBOUnU2SXVpYXxMd0pmV3VUSVQkTE8zJjoyXVg8TEtwLnJhNTpoNTplUUgmbn5KKFljQTZTQkNdJl9mdE8pd29VZ3pJJjFTTno/SCsvQD44IiwhPn07'@;
put 'JSo9YW9uKlg2WXQ9My9LRktmLFEqXypTYkxhOFZqbE49I1U6d3RibH1DdG9hZUAhIz9kdTI9OE4yMUVSdWBrXz5tPi9RQzFgXzd9WlUuMVUqNXcwZCltdFl5bXtURyE0ZD9aUDdMfFM8I3xTMytjOTFJNUkwVmZ7ejduWFI3KS56cy89KWxiLkNsTWcyS11rXWA9Nm4ve3lNN2oqVSVJV3c2MTB1'@;
put 'KjE7NEA6WkdFWTExKSlNXkBEYFhPS15iWXtDbXtVYEpZSUcpWldEIng7KFhnV1EkcSkwcyFqMiR1IUpLcGZvPWs5LFJ1OyxCLFlpQWdXVGBKWnZxfWBda0J+flgiPkFhPFkvaVE8IyxpMT9YeigoPmlzUzEvIXE4Py9JU2l2SmM+O3heJk5ePHFGUk8la3pgQFR0Y0F3YS4iVG5LT3VXU0w1JUZv'@;
put 'YFpYKCgsPSJSInswZ0UqWjxUdn0vT005OEpDMGxrKjBjMHNnPkg6NGUuV0s0dWk0ZlJfUXh2Lm8qfFNbKyNURFpEbnFCOUk6USpoczl7IzVtVjN0W0J6TDxQWjEoa1YzcTU7amRUKm5LbSleWytSKyNhNnF0ekxUXSVXMCJHfHReZHpZJmVXfF9hKmJ7KnxnSCNlbX1aTipTYCNqVnpWV0tCSiV4'@;
put 'QDBjbSl9OS9yTy8qK3lHWmdbLFNpQCVOQGJsPih+KFUyJShdP2Uya3x5TS8jX3JvUD99UWdAMmVfQWJhSyV6eltHZi5HaFFRMitge0l+cV85OG18fDhdb3YoTnk2bDdSUTNkLyM4U1shalpCOlE4JFNiTElGeTlRZTB8djp2N2pabz9iUUBAIztLdCFCSyxhTSQwQjAsPSVKLiNiL3pIUCpJXW5D'@;
put 'Ti5vazdyT0ZObGN5U05YOSFaKVlUKVA7TE5FbWAoTypxcGR+ajsjWF8zPilGcyVPUG56b05QMi5EK00pSWBGVHE5KHJ+OyJEQ1VYSjw/O2MmdXNPV3xnW2B6MlUoa0VWWSxKYDJaXUxFNiNHfGZCKl1aNj4uemhkVFhre0x6Z01WOl5Aa0VsQn4pJjx6fSNddWxpb1tUNWhQXS45SlE4UVMlbEdG'@;
put 'WV9LX2wkNGY5TTYzWiJjfmBWUF84dkUpemFYdDZ5V3d7X3ZbUXBkJC9dNHcoT20veC90P102RXZNcTJDP31RNnQ9SU06RktyeSNTXiVqfW4pQnR3SSNLbGVzTndTQEFhRyQrcXUjI1Q/LjdyMzQkMmZXVFI5eVojIy8vSkRAQks+YzFLP2FYVHYzXk9EW1pmJC5QSjtGXWddeSU6Mk8qZ1d9dXQw'@;
put 'TFpYPVdvUnFGO1UjZV9oeG13L3xiQj4wVilpa25sIlAiWVtGc3kqZjpMJipmNXFVQUQzVVV5fEFibW9AK2x3IjIvXzBnWXZtKFcyW0V4dmhMbVZrSjJ9cyZ0ajE2PS5UfUwuPWhwcyspPjNFZ1FJLlFVNyMyOkhgZUJfazxWeEshbTBSIUFmTkd0UGI4YF5YYmMrMFlTaX0/XjlbN3J6JDlKWzFn'@;
put 'IUU8O3d+dX50TFZPPz1QSlBTUHo7STJPezYzcTZjTlU1IXY6RiZvaT5eNjE8ZVtlRSZXZlMseWlRaXE3WzZvc09GXzFscHwlMl5aR0NsWmZ+Y2hnLnVZY0VPYlVQekJLNjp9ezolREFpRFJ7bnxzO0AzO1MqKytAK30/N1pWJClNWm9vZnJpUXx1QEM9bmB4fWdIa1BbWG0/ODtPMU0/XzdRVC4l'@;
put 'NUkyNEZsdEUxPFZlWjFzTGI/YU9TWTdKO1hdRnR7TDdVITAyLnNVZ2BIPS43V2I5e1laVGcyflQ0Q1F+XTQ3LyhkXjFvN3Q7QHtteU9hMX5HNDk1eSg0amk5bVZWfSJzQGlEdWYuJUY1KGtpRk5RWlU3SVhWVHVUWEhqYFIwbXR4RFBtdF9DW2w4fm5FWntkfmdsWlcyQG8mZlZ3VTg0VDFRUz8s'@;
put 'ITNXMX0/Qi43cn1Gd1E+JHQvaERMQ0VXIXNaYjFBMTk9THI4MV9VcWNaRVZobj1ZVk9ycEBpJXt9ZWZRbmRjQlprLz9yP2o4NVMpNmg6fEp5fEpydU1TITZ2MVdrdlpUbl1tI097MWg8dHlLNnNRdk43M09AKGZrSFkxbkhXa1Ixd2BUUG4yeWd3PiI2WShPXixnOzc8SC80Y2FUOS58aXlZVjsr'@;
put 'RDhZNiI6LF00dis9ajI/YjVKTT4uZng4WSk7L0RUWUQuPW5obXNYe0tpP0V5bTNKanJ5eF9qPnAkQExzbXwoVkJKdFJWSXRjPyp7eEV2Y3VKW1k9c3VQam9rNkAyUyJwUUN+QF9LRE5PP3lXI3N7eDNPSm5vNiZzMFBmWnBMQHhlUWhZJTdKel4ucllZK3QrZVMja3J4MDRRcVQmZTFsWT9QImpS'@;
put 'RlQzRyVSXkFGeX4qWShASmlGN1NwcnFuOHZeYy9DcUorRH5Pcnl0aUFtO2tybkg5NTZhV0pGdXV8K31aL1RiWjZedUo0KTtsU1B9TEBdeXBxIk14NV4/aTBPcF49QXhGOS46PyhPK0sofikmUC5ERjk3QU9fN1N2W0hxSixDTHxRMFl8Z2BdRGZLJEB2I2Uuayx3KDtTYHt8N0VWM05WQiwyU1Yl'@;
put 'IlR5TzdbZF9JQkoxL1F1SmJWPD95cnZNPzBWL1oxZFFAbjtufm0yNUo7NmBgaGZAXiZYdnRtbWc2TCZHbkpfbXwiTSlVeFM3fW1fXVFHY1tJOWBPI0JJKmFQaWBWcn50Wl9QdTdqLnpHUWtQcUVFbG9HemMweD1DNXM2diFfL1N7WnlTOn55MEVSYXQlOVM6VjxNNV01NGplc1NQSkNzNHYlZyJq'@;
put 'WUtPW015ISIvW3JmUE1HY01teGRIYlIxXUlncmNyJVZwT3E0XjFBcUJOX1F6YUtQKEVweFhuV11qYzY9N35tWzJjYTomP2B5bG46ci59L3xyR1srJD1LN0suL30hNXAifHdwY052UjFRaz4vdDMiMC9gdTNqPC5hT1cpKD9Ab1BGSmFeKn5KJWUzeDp9OzRHSlhDY2AhQlRSIzF2XTNJP3srMWRz'@;
put 'cD0kJFNNImBpbjpFNFleWlc2SmxfJjdkWGdFTU43dzd9Tn0pUDprQ2NrS0NYTjBgd3t6JX5vLGJoWXdCV2dCflR3MUtLZ31oUUkuJSFZIS5dZ2h4JC9hSSUhJnwvP100I3FUQCohWm0rWi50REksd0ZyX0pGZmshc3BqV2ZJQHVOM3A/PStkal80MXp2OWNzW01dRVApZGp2eXJ0WWNgO0klXiN9'@;
put 'fDhoVF83UCFCZSpbXk0mS28mOVY1Qz5FZiRsSl9zRytKP2pWdkJbTn0kbWllelhJIUtZPThBXWt8QXprZ3E9dEIzUD1TXVFbdCxgRHdOVipBcTU9M0FeY110TH14JWFJJF9GM0pDXjc+T3BddzdnTk9NYnp1PW9lbmI/e2BlaUFRSWNMZnpwJk52MF9hYzg5cXx0XU1OYE06K1lxemtmWGx7JnI0'@;
put 'c1ZqPyk4XjIlJlJFYk4saD03NVhtU3JnJHo5SmNBVHF3W0x1fHFoTyYyVE1PeEhtUGA5a2swVmh1QGh8NTQxMTwkPmhTUDw8THI8OCxtTi9aViw+V0J1N1JaX0VuOmpaUWMhSTdOZzFRb1tqRVFZR08wU0lleylPUUNtRXRUZSgsUHNxKWJGIyhGRyslYk4jTEpxMyVoTi9rMHtXLjE4aFF7KkZ9'@;
put 'V3RTRDl6OD1oMCEwYnt7OEZ4cyIkSDh8bXN8NW5ZcTV6S0c1dnZuemlmbjY3QjRnP2RpPDolZ3RmJnhOS3A1IWNxZDpKfVdWSkN0TTZKZSZjUTpaLk5FakR8X1gsdTtDdTJNRCU8OEJLS0E0SV17IztKWFdDNFBFYndlRjYkM11vW1VmTHgzT0ZIZmZmVTJQXnx2SEIxJD5kIj9LUl1MT1ZPUHIy'@;
put 'I1lsZ31jOlZdd18/JTZuRTF1biV+OkxrOHNkfTZgUS9JbHwpZT9aSWRfWURIfn1mQUpkYzF8MnB0YWFoLio3Y2hpMWJ0KnlJNypSI0o+e3tiajdFOmVvO2lBcEhJbCp1fVZycFZLd1U/Zm9TTEUwPUhbSzZgSWJGPyY8WWBJcn06UXJjZHMvNyN+fkkrSm1jZHZLayMoUEokZzEuPCQzUncqTCpK'@;
put 'O1QxdXY8fWAxSFhOIW0iTDUpZTtWdzpDZ2o9Tys9a0d1VCUmW0EoLHRYPj08ZlklWW0rUGVzTlgxKG5vcVtQNEg9d3wsQl9GUVM7NTR2WWhTQWY3dnQ8Xns8KUdyfUBFUld5RWdtKy8pciVQcDt+ek1qRy4sPGt4Kn1sO1RGNnE/My4jJlBSL1Y1JG42U3t4TnxEeVJNdnJ4JkVBMEc0aXQ7bH18'@;
put 'JU1zTk95IVFsUSkhODJ5My9NdXY4fmFAIm1CNEVKenVwMENHMzBBKjJnd3pzWk10JT5oeVgzd0hhLk5WRT59Wj9QKXBEeDE3ZWJOWXhDNHw9OUpVY3pJbTxpWCtgcFM3d10/S3lrKUtzSS5UVD9DRUNJV0R1Snh7dV9neHxVI3tbZXZfKz5TQnshZzFRUSs6KSorSV0yUy5LYncrVjs4OCpAL1hX'@;
put 'NEhRbSx3Z1JeYm9VeilDVHolVnhzTCtlJXpraWRjPEZaIyVkcUU7cm1oXjAvZDY4Vmt7Y1pRcFBbe2FwPUxEXjxAVXFPcmkyKW5MJlJjRDVkVkdpNiE4RXZsYl0rTGs5SjY9XmkoaExldyNUX3U9V3JDW054RFlUUGc9dVhIXiFNQyo0eFguTngiI3g1ITtzckYlLjVuQHY2bUs8dCNUIkNkTHdB'@;
put 'I012R1JDej58dVk5cEFxeyE1WEpMSH1KI0cjWmVFc2dQI11uZyk+K2hLNGc8fWE5Zm1ZXkBMOUh4MXRqLkxpOUh+a3lbUmJKaWhjVHdvakk3NktJV0xyLlFCIkI5SCJHZV1+Qll8JS4pIW5WNiReai9nYmM5eyQvYVdBWiNtMVFEUGd5P0svUXlZND8yfjI5L1o3ditSSSIkMnNISGRNenNHK3NF'@;
put 'VH4yK2A1QHZGaUI5ZFc8RHAjL0RvT1dnemdXPzk6M3kmTn5GLF1CQEQsKzpKWCI/d0ZLZEt3fWcvdGd1JG5ubDc3bm52Qkt6JFNKMisjQ1daSzgpLFdpfk8rTCpIS0ZpeTZ7MDJHYnNreCpeNDx+SD4qSjxjZj1ZajRlUyx3VVo3ZUtxbVF5ITJ1V11hdXZfIXc6d1pRTFNgcHRveG40bTZ+USFY'@;
put 'VmRDaT0oVG15YFNza19uTERQUzZPPWg2OzNtSG1wVEpSMHRDVmQ1ZHk7QVQ9Xi9hSSx9YSZ0alR6STJ4UFs1K0psX28oWUJULEo7PGc2PmUobksiW2pKSEpfd2kkdSpsel9Kb31iV3puWzNTLGg9Xmt+PyEpYzJ5d0lHOEpATyQ4YjVhRHd8JWdzLFZQT2AzKzZJKHYoVnRJOUd2MGdyVGdkWlp1'@;
put 'JHBJL3Zba19mYjtwSj9OWT5BSltnflRQISw5TSs0bDBnUGRQbkVoO3UzOzE7V356RVJhMH5QPjNqIjd7TjE/QD8uVSIuc1VpYyVVS0xwLkpaSiFXUF4sUiheeGRLLkRbe25GVlF5IWYiVEN3JTtkYS80TzZyY2cjMH5Je3NdXUA2e0Z9MjBxej5UdGoiPjIvV19bQWs7PktZWmlgK2I1d0V5d2lM'@;
put 'ckBoejhkKD1vKiVWPzM/dTdRNzpnIUBkIXZGdnAjaVY8I3xaRTJARD5YRmxgUm4jaDU1W2wjMCFHIzYuQyV3MixGeXFzZl0mIzdadG56ei9PZDowWmJ7bHVOO1NzZEd0NG0mVGtPVXpKJV0uIVJAVVcmQio+JTRmYTVOL01eQ283eXI5I0spNihPLjtRJl5JYjEvZUtnKEMvVmYuYXJ3NWBlYVsu'@;
put 'NiRTdFFHcytYWENqSGJVQnREQnlHOlc5I1Y1VWojV1khamI4NXpDMU8jbTNLLnJaSktuSCF0ZUAyQyVORyRRXypHOnc6PCtVOHg8S2lLcURHLF95NEIsTnRJODFfUzhQbyxCdDwwRVFOZSImeSxwe1BfXWVWeSVbYHIlcnkrOU0pQ3FZVVRERXh9K2NgUXRWY3pmPXFELEdfRC96RTA6SmZ4O15P'@;
put 'RGNEMU9Ae0YkdyIqbFJII0RlUFMmV0A+ailNJm17TCJYKHZEfislfHdMR2IsNTxMWEw4fHN9STliSlJ1SjkoXlJOVF1AVXxPLytXKjw8JXpNSEBuL0opfFgzWil2NnY4PCpyM3FbT1RYOHhfTzhNZykvSlBJaTF8ZzxEQEkiPVRjNFNVcz89b35iXSpiXVtzKHxuLGRfeU5yYzlCUTl0LyI0T0U8'@;
put 'R2ZWczY2eX1HLEExKHxNZntaciFjUWt5aihae1RXP31IdHR6TH1BLjZgOS5WRzRYaTBjQlBhYXcwTjlgLmtHcTFoKjwrQCo4Y2l9ekprdzQrIU07X09KN0l9SmlFbWlOcCMhRjV7LyNXXyxvM3pEWDRffDN9XiErKXNOQlBbS0ppc1Yyfl9hI1ZHRD02dz9jK1ZpMkdkXUZsYGhaeHRXREx0MSN+'@;
put 'JCxnN0Y9T19XfHAyPDkvbD9Ad0x7VjV+fWlsMFVTVX5DY0l+WTR8Wi5oUG08OXV6N0lkIkhQcSJkc3JCX0UveC9SOUIlRj8lLHxbU2QlRElVRER6O3w3YHo4WDlfflFdZDlxWEVxcUdgIlFTWEhvSSpORitiVVYybXxESyp5QGh5Q1ZTMkN0bHAkUllsIiI/NVdER2UscnwsZGgyL0gld0NpVTZn'@;
put 'alVsO3xTY2BNM1BNaW8sWFtMZGY/JmUxfHcjRVg3T2FfLyYvUkZLTyheWCpGQWhmaHBHNnU8e2RzKVR5TV04NWVacEgxc3dhTWJYLlVYP3ZuPWN8RyZoPWN1UEddZ3F6V15iU1BiI1J4a2UiYy84aDx8XWpmOFFRfT1KKzdvR0pHdGU9W0doa2pYYFtAVmEoOT91bkFjMWhuLnMoczMvYFAlKkVp'@;
put 'IyxaRjVyTlp6WGpZayJFcXpKKHxyXVZvdzBeSSZTI3g+TXRFcVtAUVtGYmcoRUdaTW9gRUA8NitrZHFqVXArXlk8MXVlZGtxVUZ5UD8zeG5qSD13SDdCMEUzYDZ0aGY5bD5EPFpEPVRdITdYIjw8dTNDVSJmfnx7dztvTV5RJFpzSk1YOHtha0peVXwsT0ZXbUB8bktIIncpVV5CIUpOKjc0U2B3'@;
put 'ejFqUkdNZzNydT5xO0lNUF1xdTF8eEQ/WWdrLHF3KFRIW29xRjpgZExme1BfWDFAI25sfWN7PUcrcDY0U0U1NiFgMzUuLCpfS31wQlFReTI4KHl6YmUuRHdkLntOaW10TVchZTp7I1AxUTg9JGNNXU04OTVJT0t5bDVgXkYkU2MzNz56QnpNVzNyVzRRJVJaKD0kUXl4bmtqOlN8IVglfTE7N0pt'@;
put 'N2A5LzFiUTlmMkEiQUYwW0xgJGFTK19yZyt+TUhGbkZLNTV6U1lzOSFqX0YydHI2LmA2PEddSSE0KDF3akRvUWpTTiEjVnJuKX05eSt5bV9sQUV6N2Q5KFp6SnR+aE9gPThfUkBKdl8zR0l7NjBYYG9KJTEhcmh1MnY+cTR3NV9bbiFDVShtRFlVW2BKO2x+cjE1ZGA/XWA1QURfIVFRWzNnSFE2'@;
put 'bCE0Y05hOUBafFIvZnc+QmFvaFtse0lQKilAJkM+LDZYOlhuMlcvcGYifjsoRjtwMn5NVEJjbHFAKGFrZDYxIUlEW3R0Pi9mcHlsdyg4byldYG87e0RRZTNMayhENzJfXypzLl87T3VlLDQ+eG9VeVZIPStqQkksJHc0czdzbSZBaSVAU2teMFs/MXRJIjQlVEJAdDF5SkE0X0h0X3NvQz9HeCk1'@;
put 'Wjh9Nkk7QWtSWXM5IToheTg1RHZtQz9VUD83NWRab3xEP2leOUR8THZ6fFIsODZqJjQqaWUuPWR2W2c0QzBhc1puMG4rQiNFVjhdMG1IWEw2XkEkI2UpQEAxTF4reChhcWJoUmNTQVdbLHlrZmlBWmorVDhieHZTVjRBI34xRkZIez44YlMwfT89X3Yzc2ouMTglPyQpdmtaTnB8azhlaSlJImVE'@;
put 'L01SOUFOWn1OV1NIeGlyK3VMO1FAXzZmfXBqNXssPXReaWZoUzc2M1N8OSR1QyhkXTlzJSZjPXM9R3J4a35XWm4xcH5NKDUqdjdJdVYvUjxxNVRfPmVnTEE1MHw9XntHZDphJG8wN1BzR25vbzYzT1BFYjp5I287SVtZWXU/Mjx8a11pUm9lSj1nXShYKVRoU0FQc202dWM8N0MySmJIeWV+NTBk'@;
put 'SG0xdj1XVmRBNVI/cUs2NlsqMmtpS3tuZipdWCpQRHouXndyQ3QsfTBrZ0dsOng/eyw4NUZUNFNRUGZbOGEhXyRlKUZYaTFrNFM3R011L3IsSF54ZWViYjF9SHtuWDduZC9sMGRlV2d+W3R8fGBMWy9kXl18QzssZmlkLFdDVHdHfEcsb2d8V2UzS3NeXjN1KDpNbCJELlRoQ31gfCwqWF1zWSRZ'@;
put 'PSZhJmBkeUxuLzZTZDxlI35rY0lkOVdtUGN1NSt7KlU8OnFmbDAyQ2A7fGhDQ0xCQXU3fm8kWTl3VCFUL35LSHtORS47bHxxb05WMXt4dmRQJD93IVJYcC8sPyw5SC4lbTgjbyo/N3N3ancuUUFgJGsmcWp4dUpRako1Lj5IMHhLOHR9PFImaDlYT35kWVkwPzN1QzRfKXRqUGM3SUt+Uk0zVDoq'@;
put 'eU01djFiU3syKSN4WnQwPyNDR0I6eWR1P31eVyFsY3ZebileIXopIXAvWE92M2RYa1RRajgwQSwmWGA7eEU5ZzUvZlM8dndSY2ZwJUMze14zTmlfOHlLL0plfkosTkM1RXlURHIrUk1KdGdWKUUqRTB3VFZSKDJbOnNxUXB0PTRuflkzIWpPTHIwNnVlRClYaTMpZVVIYFdRXV10c1ZpcGQ7IWN0'@;
put 'ak8mVFE4OyRKbUpgRUEiXSI2P050MSxML1o6aHtDQGQxSyNdYmx5OjY8fnk4cTNrT057VG5zJlJ7dCpwW31pbkYsM14xeHxGaSJaNTwuW0FyY2RSNnl1fDQuT058PkQ0fS8uTnxDLFJDW0FuLj9nXUpAZiRCTTVZTEs5UmBvRkosNVVJX0kyQmcyKCh7SztWTGNwM0UjXys6ciIhVjg4NnxoNFEi'@;
put 'PSZRa1Y5KDhAXlJPY3tXUU1JIkZnXW8xQTJmTGc9eDNOKD5jTn4reEVHdXBzelsuO0VqZz9Ec2t1ZXkxJnBlKzdiaDAsQ1MsbDs2dn0kb1VQay4zUTMld2B1O0JIOkdLRVNPS3NBXWg8aXN6OU5uPVZFREcoT1EsRVNbJSVQRjYmNH01eVs9QkpKdzwuRVdXMHlsUDJzMi5DUCtjM2opbHRhdWNs'@;
put 'fi9McTZFNHI2ZmtuOUpkM0IuN3VwSjVoNEVjSXc1OGY2c3c4ZHI/cE9iLF03ck4+PVJ2XVFUU3x2WkApYEpwWiM5MjU8SHwrYj9YIj9mdDk1SjUua1QwPE1jLG5zN1Q7P2AqJitUWGZ2YzAxV0h5VUhRTSsjWVBbUzVATlRkPUJZJixMaXQuMHhZRTE6Slo9VSVuLExrU3p5b3ZycTBQeDNyQXRl'@;
put 'LG5rV116JE9ZUngufX59Nl1jPzFbXTErYlRkVnZIeyRqWV5hQzpESEdAeTg7KkAyOzEkP1czP0NqM0FPNkIlbi9uPjFIKH5heCFDZD5DWlhUImM4LDEvdUJlMU13c3FlYyw5L3pTKDBnbTd1TjZYPjheMCokRENIQS83dnZQb2RyN0xqR0J7JS9pVGBTKlFwbnJedjlQS3E4M0xYbURVN2t+NChD'@;
put 'aV5ZPU0rcCl1L0xjckIwWk4/KGI4dVNPZWg+dFV8anB1UVheRDt5eDokPn51I0Y/aU1td2N0LE8iKTYwWTEyYDtATSJwZXlWfCRGbyx3JnFCbCNtMTYiW0J1WnJPKS5WRV1CZFsxODpFJHk1an1rLFtudWtQPyFyPTt4eF5zX0hFbXdLazN9JSxPVHFPRm03KytNaFgpUHE9XzdYSDgoXjkxTCJn'@;
put 'UTgxPnYzY0RAJDZLOEZJOmdtYD1JSCQ8enRHST9RbHopd1RrSlVuaDoreUBgYkouME9+PENbcEZJenlFWG57PTtNaWg7NlQ6OitgeDMjRmIpfjVYQkVsZUxdM1tDSWo1WmRxSTMmZU9xdXJ+OnR8Rl8wKkFDfDZbfnElYW1ZRjkyWj5TYHE6dV1UQmdXWHYxPmpNT0FkdyF3RHdgfUleJnQ7Kyxs'@;
put 'OVM1R2h4SlNJVEpzKVlbZWVaeUlKaSEmS1hmem9kViVDVFhhKyZuYDc7LHc1MSZWVl08Mzk1OzVfSldpSUlVQmVFa2U0U2ciYDl+dng9QlpGZDNGNzo7fS94JkNdOW5nTFRPZkBybEdEYXpTfEpwInI+XlR9ZUdIfWciKVc7ekVScnhjVXFQaHtjUF5KVmlIZiIrIj1SQmQkbEZ6Ulc1T3lfMSgx'@;
put 'JE44S2BaVSY8czFEZTVScUB3dXwsYmZ8aWMwbSwoMTtMKCFYfFFfLltkaE9hM0lFOCxuKVA4IkFyJVB3PWQ6dGteSW17K3xiKnd3W0ZmYk1JZ1BjbW41ZlVbX3YocCgxdFtRPHs1R1pqKDYuT2NNTlRxeSRPL2pGeW1UYz5fOkxTUUE/RyQoNTw0eDciI2E2QTxbMGlhfEdGPEdnWlIvcmNsYUtm'@;
put 'ZWE6RipNT2o1O0JOJGFSPjEsSzEqQ31LaUlgezBPUTkkekNvMlBkaUlUe18uVVVbaC9ddHhUNU9CJVpsdEIhU1dnVSNXTWA/M0E5cEt2ZmVCU0UpN1F5U1Rsa0lCdUVUeVg+LGNAKCJtOSgleXI2ZkB+cipaXjBuP2F0THFoV2EmKklAPSopWEhTUHtwSV9YXSl2cjY0SFFKdlhLYmUyei99dUZh'@;
put 'RCRRayVHKnd9TF9yMlc2ckNfLzdifUJqY2dFVDc1fWUjd1B7bXo1aX5MNmNRL3ZfJFc3PEkjRy9jVUpZIklrO0UqJWZGK31UclRhdGNSX20vRCxWKklYejBDWWdDY0NgJjZdWE1bWkRnPUJXfExJW0shbmVvUXlbaUUyPjsoTntEJn1yUiM5KDB7ciQ1UXdqZGMxO0xiVUthLE9PYmM7ZEFYbnc0'@;
put 'RXpUQzsjS2tPcm9WREBNRmA4P3lFYG9lYF8oZU9NTzwsZjM2S0dZTyYxcHwmdXskKi5ObmhuP0lzfkYjb350PEdffG89W2tpJC5iajRfbHQ4blBocWU5UTNbPT1IMntaeHNfKz4wWWFgNVA6ZyYsdyouKjNUX3RuRitpLkYmNkNpbVs3RT1HfH0paUAjeyspJEg7WTUpV21ncC9DRjJhZEJbYzRg'@;
put 'UUBeTjxYZ1FVJmVMRCxaVkJDPnF2MXFeUGpgVFR2akwoeWpmdVt1Wz5LR2BwaiNHbVVWT3M3UiFFRWd8L1dbQ1k5KUZGKEohTyRaLm4rKGUlU11tSkhrZHJ2fit1NFVpcmgkaVdILz96TjJpRyliSFheZSlpUjlBeH0zQkhYfWsmOS5wQSJ+Vk5+aWVNJUdURnB9QHBhWFhpNncqTm93X313WjRS'@;
put 'UGolUkh9MiRKJTB9c31INT5jdTpUfXQxUVYrO2I5MDlIOVZHRkJUKyghXXA5ITVJM3d6JG82WFU3OTF6KnA2KXE7a11dW2NiaWdQeWtAMFdre347d3dKekJAWGA0Pj8iRmFbYitSKDZRYiMkMmBdd3wqZT9oZ1N+KEtgb0hSSSEvfExQcHBrR2x0azl8NjQxLmlQfHUwIU9JJXE3b3Q0eW8ldDU5'@;
put 'LDZTZllJMzYkWDh7ZCNGQ1A0REtCKytqSFVVPmtOJDs1VltKOzJ4RV9BX3k1TEg/KUshdSpxWWowN3ZEZyFxQlFmbTZnPUtVTUd8dWQ0U0U4O1g6PzIiQTEvP01SWkhde15gdjB8fHswPGgvRm0yYl9CMFU2S1trRS5XTl4jT203eD1gJWE1M1kld0ZMIXAwL2NgMWVCYTtEUSt4NjBmJGt2ZSw5'@;
put 'TXw9Nig6K1EwLltRQ2trfWNATGJpcDohN0N4UXZVQjElQyxmfD1zezoqK0p2fXBie2UwWFhkS2lQIiY7OEszeTQ6PFJjJk0lOXBQYUJtWWBLenswXy5YYTZrLmEiMmNIMyw5VmFwPi8rMCppYGxlVDozZGhHclA9d3pNcDx1RC5JS3BgQmg/dUNpaUt7K0tCQyI/ZGBbMk5+RzZHWkVpKV5iLkw1'@;
put 'cFUiT1pLMnkmTU9ISmkoQDRHTH4mSjVEL08wWj5kMVldU0xJQDQ2aCo0cnpNQ2Y1fm43YWtfWHgzbDhtL2k8RyprTzxXW2xsMjdgISZebDpFP1ZjdSFlP2FqcTtNd00vLHZic20iZm5ZSCUkKGZAYmQjMmRoMEZ2eEJicjNoPEJ7STh7NVpZbFEoViRCRCFnIyQ5KH14cFZSPWFTK2wySloqIk51'@;
put 'eTc/RT9QS09xYEAqLnBOc0BPYyJVaUtiWXRCcSNNYl0hUU8/LE9oUW4ra3lRRHVzWEI2WjEuVDIjPnhhPyJ4ZGRdLDJ4KDpJbkhzIiRDT3h0ZV5FWXZkd2cqam40PUY9ZSM4NWI9RiJqTHY6bjJyVjpkREdETSNbbF1SR18ofEQvO1JmRGlCU0dEfiRMMGFdZEYycTZsMkk7amRDJkMsaHpeYXFG'@;
put 'YDlNNGlvQHRMJGhrQlssSHM1UXJuXmB6RUVfeCplWElQTz1+alorRyV5alRhYkVzPSZ1P3A7flc4K18kaWU7eUR0STU8QjhJZkVxY0s0UjQ2czhMMWBWdWB6Rk5xKUhISypsO15mNVNlUVlNSVd1JjxpUTN5b1tOciskc19JUHt4MC9HMz1qO0RlaXF3WntOJEpmVzhUa2E1fHpse0MwV0x9OUgq'@;
put 'aClNIUR4K0tJPEtvQXImfUdsekFjRU5Qdzw/TkJPTDAsJEUlTE02dHhGcmguVVVWdmp6Vj9xbz42K2o2Sl1fRyt8XlJATyY4RU5fcHorT1J0YlQ5ViVmcH5LdVZfcF97enQ1OyVRK0RpI1o9TW9VN0Rxdmt4UHNreERnOFptZG9eI0wmMilOV2gvSFp9JE1jRl5NcENgWCY1RypsOkM2dWt9V0s4'@;
put 'T1ZINTYuSShoaml0YF5ycykiW3BxQ3lTU0oxMm8zK0lfLm1CXVsqNHhDNG5CdmpEcFhiISlHcVdyX1o5emFdYEheQiVuIWwreDxkenEobl1KeXxldld2OyR1K3J4R2V2anorY3o4Z0Y4Q0BiPUl9NmM8bXhVfCN9Un5JZiJiX05APjJ6R3RNYFQyakZoLyQoLHR1cC5RKHRKY0hONHtGJGlPcmQz'@;
put 'KU46ZGZJO1l6UU0yPD5TS1FQM10sYCNHakA+a2x6KjNuQWJTKjBGQUZuIm9Ed1E1K3s2SiY3PC9xJH5vJldEIzVGdzdVRGwxeW5MVWw/YiNRUER3czpQMixsWTglWjE+MC5vXixDdzdQaWQ4Z2FyIjkpbHNjdy5aTyFCYyR6eylUOXMsKyojTCZYLG0/JUNBMl51XyNbWXo2WXw3cF58UXMzSmpL'@;
put 'amh7cCM3TVR9bShsL0hlaGJuUTpqdi5QOnkwK0luSFc6N0oiP1RsSkh0QT9KWjZGcWlQS0RQM19QSEE1QDxeMTR6elgvSU5FU35yMmpxZnZOZ1dwTFhySlJoNnZiSDNeZktpTFV9YzxuSHVuXmN1KipHUUpDd1Y9ZFlVPmJMTmElZ3pbXlIsXzJGK0JfPHZuXTU/fnZQW2AwTy5Ob2FufCtFJSs1'@;
put 'fW1rfH5mN2xlNUJ7akxdWSkmVk9gSzk1cTEsa3VQRix8QUVvdGNMYEROSGYwYHJNNF5kWEo6VEVHOHxEciwmNGNsWHdNIndCfVB+UWRuWEluKVVKL1NjSWxMdUNkcmciNmk9KG5rYWNjYiF6fTQld31feXR8K0JZYy9IOXtdTTM9eD9lKFYkX25IeShMMkp9QUVIfFZtWDA9b31ba2cvQElGaURo'@;
put 'cHB0KDBbQXtnJUBVLGJUOyswU09yR2oocWVFYDJyR2BdPFd8ak1gSW1SUlEwXiQ+Kk1KbSNZI3B+NC4mWzhKJGFFL0xlKkZAXWNRajxOayhiO3A7K2t3eHFIU2IrTHFBK2RKPXxkPVBjJWNUdTlJLGNaK1A0RX16WXJtQiQsT0AlPGo/QilleCh4W1h5PCNMQUFrTVB+MjpVeHxCXXpgQzFFPkch'@;
put 'aCE1aDRRRDc5ViYqSXc9ISJgSnxKVDVHITtEYywrYGhhc0EpRl5TOzIiaz5RfnRMd0MlYWc/Jk5jTHZVUl1xfl1pU2lsWX1SK04rMlFGUTI4SXNbTmclcCo8IXNeUGQxTHtqc2o+MWNjajVSZFh6aixkJkdzRDYhRkI0RTVPbTMxcVZpbmwjZy46KlchbkN9QjJXSl5ZblhmZUZwYnpmbGU0bkYi'@;
put 'LFtmOXEiS09nNDBkOGd3Yn1IbjdmWSlnbURZM308UF9yTCk5dmpaWTUyKG9iP2JnNGFlKGQ6SmpGWi9ualkvcVFFPURZbHpAX1pUIj0rUjxueG5rZH5RXUQzTiZUe1VyTXoye24qIVIvKCViSDgjXyJLYmA7cz9dfD8qXkpSWm9CTEoxJUo1NjEjP2glWiJAVEFfUDA5NjlCeXtDITByQmBeeWRR'@;
put 'V2xteTRyXS95YSxLTyQrT0EwdGx8TEwhWX1JXS9FeEJ9R0tBcWVrLExxYH13X3NXfVM+IUslIXxmWTE3fHlnOH1Wcj1abSQ+bUlsUXc2JCtzUm5VMltmNnJhYSV+d0ZvdUBlOGwyZX5uXl52WFt0SiUsTSQ/a2t2d3VjOGJAZzd1SCN0dl0wW0JgP2JjeCQlQ2Y+OWpuSjNXfldvN0RTdm9tVlhV'@;
put 'S0skUkgkRVRIdSEhKCN4cjsqSFBuOVAjeDQxXWJPQ0Q5WStiZmRWfkw6YD5Vd0ltUnQsTmx9KE12WShnam4xKVQ/ZGAuYCh4PVdtfD8+YGF4Y11RPXNRYGNDcypEUjZ+TGBhR2MqTSRENW4wQEVRLzJNV25wcW5mXyNKOjlNVytRYVdqY2J5Rj0jL2F2dU9ffi8yREEsR005JC96PXA7MClRQzl3'@;
put 'KWlRKj9mfX54X2suck5yY3c8c3libXFvK3FYV1tKPDl5dDhrVmp6P2NHUDJiVnApek86cUBMRi4rMT42P0svOnsmZzRkOmdgUn1JdUB6a0xLNDtTV2d3LEhOV21RZWdOb2pvMWpmelJRUjpxPFp8QUZCRVs+L3J2NjNzXmY9TEwsQk9BcTdTPUYkdGBAai5GKTBrIUI1TnhpKW1lKHsrJjgwPkFn'@;
put 'VF4oSDNFKFFWKDRMVH1EekhzIkYsdEw1VjpIeyxPQFcrZmJkNCk7M0BBWmxIcTJLP2N+KlteZ0YyeUA+MTZBYmdiKTFCSSVseGdAaU1qN1YmN1lWdzpVRWNLYnd5b08xe19DO0xXT28ieyJqZHMwe0RHZF4uQkg+RE1Va3hCLGshJVgyOG95a0cpSyl2K15Zd1V3bns+KmY+QnVMRWhuZ0RJSj92'@;
put 'U3pHK2M0bjRyUUV+KDRvQk5hR2tLSGwrQlNQZTZbeTg+NjJEWnRNV1RnL3JUdyxuLlosdys2cDsvdnZ2Xzp9UGFNL04lMj1AJFJUb2hEQmlDYE5RKikrVyVzQHsmX1d9Pj1mYlR6cD17bkIqe0swbk1eeG1hVWVSY3pJKXJxPXs9MXFMWUpqeDd9ez9BYSNscmBKUWc7bTo3TXReW0decDs7dE5I'@;
put 'UU5VRyp0c2lvUihZfXpkVFJnZFs1dStad05OYF1WKDNfXk89R2FMcCx5Tm5oOXtoRHxLaUlFSWAyZnVLRUwwKGZmcyVndnxqUj5PbThYRiVoRTxgLCRyNkVUciZSVUlEP3R3eVhwVzhuaUAsc0xRcCMvezY7JDN8TGpPO3MyQ0xmJm8hP2hyOzhvSUdzVkJoZWU1V30+aFdAX2EwJlp7aHB8JGtT'@;
put 'WFN9ZHdPfn1USi9Qd3VJRyJ7Z3UxWkR4Kz9+OU5za0tjfWxSSFhLSHZyYzkjSVU9fntiPjA/TXhJOzFBMUxjR2YxIU4ifFN9c000dHNjfFg+SExKOix0Kl40b2ttIiEvbGFUMyIxITA1KWxQUGBMb3g7eUhhflI8PSNPQlhZYj4kPjRgWUtrKlR7V09DJWNSe0g/WklRayFWV19tbGlhWzYsKGMw'@;
put 'O3ZVc0o9aXdAbChQImg6R1k8QXNuNUphQSZEZGt2X2IjflcxWXI0fHMvRTVuSXc6XyE1dzEpPWZdeDQySH1edDJaMzJbMmVXN3lqdWN6Y092LkJyVm5PKjlZayxZXWhrWzZDZSgrOjVYUFhSTl8+eH4rLCM1TVU/MUclTF9xd3lwXis6YyQqQ3p2ZWIxbnZVTU9JMXMudlNvIWY9PF5jaVJ8QEpw'@;
put 'N2RsSnRMdDFYQzYrNEc7LjZUKXxULjdSdThmeElCPDo4JVszI3I/eEI8JV5zY2tWU3hNJnVsO2RpQWV7KyhrJk1LISNVa0tJcHdFXXFNW3VUfTBBVjoySEpsZEk2Q0xbTU9gV3hwX1Qvbj5uODdOW3hee1s+ZUdXMS5bN1U5TjU9az1CdXp0fV4yOjBxLFtkJGA2Kl9qLFQ4dlRKcTt0TCYkVk5h'@;
put 'JklNaThWbzh9JEwqU1RwSEllRHwoXVoqU2dxIyYsO3EyZXRabz9rISJBditkWTZWIlRVbX5CZFlAMkRPPyFdSmNMYXt7ZE8lP3p9KXx6KkI4NldiUX1mQ2MpIVhtMjNlU0ByKUVSRFE7YiNJPzEzU21Jb00wd2JHS20+SlVZUGhEfUMvIls4ZXF5ZF1Qb2BRVXR5VW99Zz0ifGMhX1pmR2lUQFhW'@;
put 'Xk1+XUY1OUErKSEoT2xoRDFnM08+b1creGpuQlBFJD06PD1nMT4+Wz1qWnpAW3NGSSF2UTU0RWo8STFCN1FKPG15ISJYbWNETkEpYF1YeyZ9VmVmbjxKU1EsOz1QLE1eVjsrWzVqK0ZfPVh2YUNHZHw7JDNDQ3VIbFUqP2UodE9ZP3gyVCsyN1A/bWxoaTRTL2p2YkgrST0lYSxHcyI/RSxidmsj'@;
put 'OWQmR1Q8RHA5c2pkUXsiW154YmVwc0BZdlQ4TWR1VVF2dmluRkklOVk/WHd5JCV6I2ArNWdRRG5gNC50Y09iYCJoOkdBLGddO1AmIXdmM0olOn4jbmgmaiVtelZBN2MsaVopZDt9N29ALHpKZEM6Rn5OejpTQ1B6UTk0aTR+ZTQpZVssOklbN3J5OixQYWk/U0tqfE45TXNWYkBKPyhZZ1dBNDZg'@;
put 'XWtgMytkQCZpWyNgTE99cDVbRkkhVy5uXkArO3phaXd7Yl1gUnVnW2wuQUFAWzFeazc6JUsxZy9HO3lQYkRdL1BGQFJDLDJzKjNjfk0kVFVaJkQvV0VkcmxwLyU+e1ZyJHdnQ2RCbGRvLDVeWHZ3YDYjbjUzT19TIzg0JWRUOURnW15HPHtJa1tWT1s9VSYlZEJdNlE4cWUucjAvMURAbiojIzFK'@;
put 'T3FZWXRiak9wRDRKbFtIXV45X1cxd1VCe1BoMWZOYSJZPz4saSttPnNmR09pUCsmOnFxdXluTFI5ISM0clVTVSxuZyVUOCE0TEkmWlA/LzFGL0JoSHEleCxXQGNpIUkmVDxxSGI/NDhbcEp6MD5qeUhIMXhSVmgsSXgwWlJBIU0sME1CcXx3PXs1MjFQPTsxcShEaWhtZHsqT0FEdW1IP2x4aSQz'@;
put 'O1Q1SUdyWysoYWkydnFZcWpJIWhuXSU9eV5iayxQVVplZCMxUzI8Uy5iV34/W3FMZlBsdUVHJE4iPTR0KFBjTkRIYCRSS1VOb0h5ejRSR0RWejZvYVdxWG48KWZ5bUgwPlgkI1AvVnZ2aEQsaiVkQCFdMihXcy8yPntNO3t3WDFzbikiO3YvMTdsOTEobj1QaUJoSG9MUyV1dlFmdX5Te316Jltn'@;
put 'SD89ZEspblpeJipbKXJ8dmtrRCFVY0VsMnRJbyU3cSJAUj14YzFSZiljZWYydVV9bGQkKChlSUA3c1lMR1ddeGpXemwqM3xALC9bLGZXZ0MyY1tIUyJtcyt+RU4mZTxKeU1ZKFU5IjooJXc0S05MYTYzYHZFZG1uN2w6JTVOVDkmZ1d4WEJAcHRUcz5tdzldOGk3UT5nSjhyX0xrZF14NzVIVFos'@;
put 'eWhBLENMK3hkXnxwe3FKezIpRmJMSUdlJjApbHd5bnkpIm1CWkdLZ1k4a119UGZNbjBJQ0spaGZtNGUuNzZycSg2RmcyeSxUdCYyW1J2VjZGaHs3OXxHKjhLJWV3RDAscXt4dltMTT07YiZlQVslckA6QEc9cGRvOSQkLEl7UzFJTitdS0RxVUJEU30yb19zPFVNSDMkQyFhSm9KL1ljOGJ8NXp7'@;
put 'T3lsaWEsIilnbXYxeCtBVk5ZXX4yNyQiLkQ8MitJYjo3aVRzWExnOzIjWkQjUCV+Mm1iTlc/cnkxdkFMQyouX3R7aUw+Ukw3bDttMV0/JkA5X1JfaDMkPnB2e31qYXpwe0k4ZGckJS4qeCVuO2xdaFpmQShbPUJINVZfdCsjd1R+T3F7PExaN1tgK2xWOmF2VFJ1LyMlK2lTMDlMOjYvKkQ8VGtb'@;
put 'ZjU3MmpCVy5IJUwwZD8zLmRVdDpeY3x1R1hfaVNLb25TLFQpP1NMbWhvYChGNjBYWkpoPXBII006Yjt+dXBwXkkpcG89aXxtYVlpUUpELGBTPFQkeT5QZ1NDTyNdPHY1NGNWPHc7dUVweHVUZT0mW00lZVBLMmlvMG49OmQmc2RNVEVIIWNOe0gjeTdeeUU8YzJuNXl8O0lDO3FuUlFRfitHTTAk'@;
put 'YUZ6UVZbJGJwKGxvYVlqaF8yMiRxS2FZaHw5eUt5a3smd01CR3hkfk9idi9HUiFfZiFTY0hCazNvYW9gbHssVGhiUmBRYDxVLGM4SlFdVGlzNDlyaGhAPztPLCsmWUBgNiNTcVdLI1s5NGthYmo1fndqL3R4WV1oKF9eNWJBaklzJk5TaCtERGE6bX5xWW1dTU5wW1hqRC9reWgjO0JMU3pGTipH'@;
put 'TTYvei8jPD17WyQ4bH1ZOldUMTNNQDREaiRvbWNOWmQma1dQVTE+P2M0YyI+ZCRhMD85Sj44NShYU0l2QXUubXNUUlU4dUFKUzpBQGNqY3h9OS5pb21wfm4qKnhsIyFuWl9FOWNaQUI/WDU7TW1UUlAlTyRwJiRvXy9bTGxoPVdTRz1EN21wJXRUIVdZdzFdRWxxck0wZ1kmUzI5SV5FIXhWUC5N'@;
put 'PShXbUVDLklqSX5EPmZefVsoSjJva1Vte1ojNGY1QD9DZzorMmBZNnEmPyU7e3Z5YHtHP0YlPkFTOl9GYVkjNWA5T2BROyppYmJoY2BqW3M4fEAmUSglUWt+bkB4fCwxOSUsNH1kW0xJWThzakNgRGdQbEpBZ1tZUTQrbW00Ynw8fVMkbWY8SUVXTkMoSUxgUnklNk0sfiwlLkIoKXJKXXoodTRJ'@;
put 'JWM8UCU/ZENfVCZ4dX02RChGUyxXcCRiZUJqSmVweCE0M25EYUwuPUp6U1QpQHxZKW5pPj4iM0t3VFppPHZ1Xk5nYShQRGJVNlkiPVZafG1ue204fVJWP3w5Xl9ETUcsNk4sbDRCQU5Hdj8rKUtIKjdjaVV7Y1JwMHFXe01NdyhQK147I1R8elY+MUh6fDRgTXlvIjZrK2BORSk8b2dEVn44OS8r'@;
put 'TVIyV0Y+JTttWkkkODxRTW9RMnk5SCwiTE9QXituTCJUTGNlPWImWV8pVzxTUWQ/Lm91KHRuViFKMEpTcD98NmZMSzJuIjoxUEB9Km48Ynhoc3dhW3JyflVDay8+eHplXm44KF49aG5SeTt4c21EYGsvMj9uKUJCdDpEWFE8WCt2bVhDOmFNcGJ2TV5OSER0eEJudGRyVl1SNUlrI1UselFNQn1B'@;
put 'eTdGbnFgS0s5YTIxTjpSQUxqOEBmfj4le0VpPW9jOVNlaURTPGhhYjpLWjZEMiFuSV1ALmleI3lsR0tzNzdRPWciRSw6JlVAU2cvX0NOfixfOVlJViIoXUk2ZkRKcTokfFdYPC8kZmg6KFFLaURKMFdlKSM/MlorKWU7KG5UImU6JTQjZSVsKFohbUgoYlhSdD9+Kzd1OSk8O0hgU2I3ay97cUQ1'@;
put 'emc3ZjBKWzxwVEZ4bUh7Q2l2enl7dm88YCxDOWtQIlB5OGpIUT58KztsPTgrSUo5Uy9HSCVEP0B9NWhddHRWTVk1cTw9Y0dpYGk3fmUyT3d2UUQ7W1YxdixPPUYyMmpRN2poQk41MnB4W31WM34uLGEldDpqOnwvXXMqJClGTHQ7VmIvcHp6NjkwdVdXMDFrVyoob2luKGlCdlo4fWQ/Tjx7JllW'@;
put 'V3tDTjV5IzZnfHErWEdFIW5yfnJlNXVUNEE9Tm8iOyh8e1RdTnBANl06cz9GQ2lgMGo+dSZxTEdSIUtoLGBPe09iSFRrdkRse0J0NCk+LEpaekA8cm44d2JDfjheTS5eQH5oKUg6aUZPa0RMT0lWa1ZdVE8kQyFlLkkuVDx2KWVlV1ByJFYsVGlfdWJyK1ZCS1BPMkZ5TXs1X1hoTnssaCJOdEM4'@;
put 'Q2wsP0s+OjtQISQwRzEuNHZyUDxPSCspfjRiSkVxLmI7WkNYb04iIkNOTiwydz8uMCtMNzdOQkdaaSl+VFE+W054XWpQfCEkYzhsPDxMUzIjXlhxSTd0PGpERGA1Q01KSF1XKXEyWkNJcGtVL3dbQSl8I24+Vz5NOFRwMUVeQiQ3X3dSO1ZEQC9WRUlIQ3xSI0I+KktNUz9PeXhReFMoTTkxfGFA'@;
put 'JChibFcqNXZ0KEI+R10lfkVBfWJlPk9Wc3cwdzpJOm9UdXoiV0R4SmBzaUUhP1dQK0R2Wj42RWI3KHxjQ3x3ZEZDW1tiWV9ITyxqT2tvdE9xdTFYWyJpZSVkRzsydT5reitxbEJvVlI+WW1fT1k4Q0xJKGUxM0UmYDImP24vNTVpOitdUllnSWdlbGtNb2FnVHd+a1tzP0wyNm9+clhibzE/I3Vh'@;
put 'SyZvXkt5Lkh6VkNQdXB3VXxiZSE+T0hHL3BveCRlZGNBJVZoZitfOCokKztddldRIiF0ZExJampUVHFYWktiViUpSTxIdUJaaHl+fHVLX2tTZUVmUDEwSnZYc1deZElnfFhUflMmVCxKJH4qRnBKOTFQU0xdREwqWzgsMGYlRWZlNmZ1enRRdyw0QkJBKjtyRGNaMVE1QCI+SCQ8JGdVeldUdExN'@;
put 'OlQ2YiJzKWJfM0VTb3dkVDY8X3IyQFlyfCJwe1c4OG4qOVclZCxbYCYxez1KZjRuUlVkI3EicjdLbUxyKyomYEBTKjcqWHgqdSF0WGhtLjdGUnR8fkxEJldvcEAue0UwNigqXzBOKThYb1hWXyQ8dz1AS3E7Wml1dyZsPnBTNj84KH43KkZJeSw8Vm1qPzIiV3h0dl8+Ikk+JlUuVV56WmsoUThF'@;
put 'bzB2TnJkey5yJStPLFtBND40XyQ6MWddVldXeWlJXj1rY2YoP2JuNFI3TXwpdX5hRExrTDF3THhqRz1BWkhBQX5AJTVmPD5ab3xhd1Muazw5Qlc7XncvJG5jTzRNX08zaUp8X148K01xdUYhY3djMTQ5JCMuQHxtSW51dmxTYCFOSjxoY2tRbmZAbmYpPSVaaVswVyk2PCNdSFRWMSxwW08wVG9K'@;
put 'XmlPeXtYdzpJJCUxIX16QyZfWSRQfiV8Pk5PXjNBUWBxQTl1JVFVLGNoQ0gkUmVAO2k0LEB9ME5jWmJjcWtoXlAlKDBvWTk2U0ZLXTF7MFh6VFIlKXROW3ZNViljQUB1dXgmeFdRZmU1JE14b2FIPUhhcS9eNkIlV2l3W3FjJnU1Xz8pUE1TRyl6TiUmITpgcGg+WDhUeXlffEU4NEZnYHZ4Snd1'@;
put 'LmEkWz9ATnw7bl4xVG8rflRAS2R4aiE8QygzPSM6L08kOEJZO2IrUUk8WzhlNVdPRFcwdzdTeFVyNHpbJWtaMU56YHghZjFhNTNHVEtqLGlQTSRvLD87U2JfQj5Sb1JKQDA+XzpXdUc6a3l9TlEsSmMwPVNNWSZ3Z1sxRy54ZU1FbEJQXVcxfGBbWz9VXj9CT1FCfHU1UHUzNm9PKkhiI2F4OmB9'@;
put 'TU5lN1A3aENje01IaEZzcX53Sk00IntPYX5iLE9SITJaRX5xKUwrTX01dXxzRjt0XnB0RVVDPztYKThwOz9ISzcmeSxpTiRnN0IqVmFGN3d6OGRfV2BNXldBUSYybU1LV2FZVF4hKDIsLHR6Z1toOUREU1dUQzdXdGhMVjZRN2kmKiZLK0VHKGcjYl1zYkxCXiZCWjRDPDlNUnxvPlgpT3QrMGhF'@;
put 'XXQ6MUtvXShvVVkofGA4LDtxeywmczxDVFp2MSVlS1tWJDIyc10sMGNCakRfLEMqSClnen5TWHJEV0RBY3xLPVt7b2FxUjR6YWI/UF1xIktkZ3Y9P0l3OVRxKEVXSTo8QjJUPz4sVT5xNjd0RGUmW142R1tCY1FhUSErUmtDZzBhSkpXKkNQfDh6byo2MGNae0x5cVBXOyR2bEtbfXlUeXdNeWIq'@;
put 'dEI2blN8RTYvWVpMeHs5KyQrNDwzWVpNczxCPEk3XXk4KyhIYDlQT1t7Qy8xIihXbmtlXnJdYERvJkZ8WDZPVyZPOytgQ3YiPFZhOSY4SV0mUkxLcD5ZUC9YVy42VyZVYGcjVEpPTjZaUlRQMUpAT1ImTDd8bTQhb2NbZGN0eFEjKEdZWFQyVVouUyxCUlNgUGZsYHhmcmgiZD1XQXBeNlE2WE8r'@;
put 'KCt2O2xKOSZDQz9iTjYuV01wLkBEVkd8UyNxa3kzeipzTFdbZ2xNIX1tQ1FPXk1pUFs2SFF7RVhueGtrJFk9XWxFY1JeczlHaGg0Zmo0JU81PCxCV1FII1EwUHA9UVtvMENkKHxqUlZnKHY1KG04PGN1WCJRNEV1JUpwM3NMaHE2UH0oQUFJdF1eejYzdVtLUE90XS8+ciREfU1ffFo6SE55KTF0'@;
put 'ND9KRz50QDxEcz4sUmchPjBdQ3dxMl0jLFpqLHEpQSFpTT0qU1QycCNUbFspW1tHIVk+Q156KH5ERXhyYn4zOGohfTlJcW1sfVpaTGVlfXRZNTp+b1Mre3VfYzYuN1AqPW4oYGJ6O3wjRDFIQWFEP308dkRSWXM3OmpaeiVFcz5+Z0deV2xKYTBlYCFaWm9SfD8lRXN7V2kvXVo+L0MmVTNIRmFp'@;
put 'fjs6ZG1sciRSIkNwJG5sciR2d11jYyxFYEolSWFNTU5tUUBkVS9zK0NjZXM1XW01fGhkUiwodWlMJHI6PSMjRnhaMkpJd2RPP1tLflZwaTVERTYrX0lMQkh3cVdhTS9obnxSVVJsfldfRSlNNCsiRjE5RTZ0MU4pS0VsKzwxeyQiSVQyYmpVZiJpUFYqTDM4S04heUVSMnBuWyNIa14iUDwpfElV'@;
put 'WW58L2NmKGw9JVtQIV9sX1VYTUN+cXEyPGs3cXEoPmQpTDVRRVYheENnQnc4YjZoKStVaH0xaHQrL3A3bHpNe2RmMCVidGk4Y1lfM14mOmUvbkhvJG1QN1BpKHg6NGkqclBfcC5rQytYMH5icjIkI2pTR1o7bSo9fCV7SDlyTV93N05NNFUlRyhwLGg3QjVlRFVHXlhJbnU/I3trYTVJJWhnRnFV'@;
put 'MFhXK3kmL1JnYmlhbFZadWN5USR8YTchMEZHKlB2Zno/PVFoPGlpOV5nWH0qVThEaVdValsjJkUmd3Q1JHlydWdjWVRFSjF6eE1zTz9ERElQXnoxMGlEJFd3UTdAZE1WfHhodXhFazFkNVgqOHdTZF02ZXpWZlclNlBIdFtGXVtXVyU7N282SDgzb2hueE1ZVE5sMWkrR3lucyxXKF81b3woOmpD'@;
put 'aT5HNWh2Qj1+USsofVQkLnA+eix8dCtRS1JLK0lYTGY8X19SfHI+WkRAeDV1XVA0RyxZQClFIjp8ZU9XYXZfPW1COUNGezFJW1AhWlhBciUwSmNNVHJ1YiVDMlhGQy5SY3NuTUxqYiY/dD5EalZETTZ2U11XeDh+d2QyLFJtUkBTS35gU1RpMG5OPF1ddHl9QkNWQnpJRFRCU29VJiZacV1JVkhi'@;
put 'VC84dmc1TDt5bm1xKH5KPWFVUUFue25YZ0dsRDZfR2JuZGc5eyxmayIoRWNwckEsWkpqUy44UT1TRkchd1lAN1JMWl5aQ0Q7NC5EPzBOUHM2JTQwXTJqS29PUCVkPTlGbCtgJF9TWGBQKX5jekE0a1ZtfjBZfUVwfS59e0QlUV8rNnJpTV9uKVg8WjltOF8lZk9xXWVjRzxuUD4weWRSZmJ9Mjho'@;
put 'WyhEcnpuWTB8WVZETTxaX2VTK31uOWo8c1VeIVpkeDl4Q0lke3dDSS8vLmAyb2AlOXc8O0llSyZ3NGghfTJeU2FwfFdiNyVfR0E/b2IhYUokQi46ZTN7TiF5JkBsTUBUYT9ENzhIaXlCc0t5a1dCZF9tcDVfYjl+STsoTUAiblNNTFhgS2U1Rj8qbihNNEooXXp1L244JCNobHRhJW8lODd2Tjkv'@;
put 'TX5HS2d5RDxlUkBuQChyM25VQ0F4KyYlSG1zUCg2KzJoZTleMWpOQnVbInE2YlZqSXtIOiJ+WkJMNixQW2RfbEJOYWUqc2gqQUw0dGA8e28lMnRGc3RNcThpYjNKQjlOSUNLTXpDMTdAb2RQJUV3Pj0iZGlpfF8/NHAvbDVjeHImTlV8OCojbSxec0YqcDxjLHRTKVh0IkxnantlS2FyeD9sP3ZP'@;
put 'KTkuNUsiXWVbRGFPT1cwQXxdLGdtTnteUlQvb3dIT2V+Qi9xPUx8YX1dWVdFTUldZG10M0E/ZixGVz5FTGIpcSEmK2tSZ3o5fTNNOm03MV45WnAjVCJdKj1dMzVxZk94YkhAaks7UTNXfSx0ZTNQQHpTWk5YPEt5d2NrdTJUUmxpRmNjL1klWEBeTCFlW2g1S1U4T0drT1FuJC52cnFdMCxLWTRz'@;
put 'SipDVUhLYjxmR3NxV1hrYkEudU9EQldTO2pPeHEoR0BHJGdtKWx0Ql8kJH59fX1UVWRvan1vKSFZNEMxM3JZI2d+PGQxVXFGdzNoMXJuMiZodEFiXVZMPz9QfjgwZTg6KnVCUFo5LGQ6JHM/fCYyUFYsRXQvJihlQT4ibSYhLmFTWSJdJDpxYn5xXlZkTWtXeVtRRX5HdDBSQXZDXzI7KUt7NTx2'@;
put 'dzovUHpFSDAmc1F2Okw8dFZtK0EzOy9RWG9ieElEQ31bdUxFRnA0SUlSUC5SUWRJYXcufi4yZUBjPyFeZ3BJMVB8MStaTXslSTFYKy5JcCFGdFp0Ql1LSlF8KkRNQnBkJWc1PnhJWUp7ZiV0V21fcGNMcUg3aldSdHt5KEY0LFY9JS53JHkmREtPYEVEJls4VnNab1ZAYTQse3Ijb0YvSX1Uemg+'@;
put 'fDYoP2JjJnZgc2VTP20xfTMlKy9EJlpxQVsyeWczMjghcVUyL11NNDMsQGQuI3BVOHpuU2duIVFMdShLUW59QzYzbUM1U0FITTEoaTFxSjE8SSR5UTdoQ0k5Vj9tYWt1YmN9dSJlPWwiREhfWUdUP2tVOyhXSmRLVlJoaSVqaHNzVUA5a0xLV0VCdjVqP1RCQVRTeVJXfmVNK3w8fiteYVciNFhy'@;
put 'PD9RMk0uenE7c3plfG5gQWVrdVI1XXZ2VzlBa2U5WXx+PHJ8TTZKbiVbXWE8MEc7cXs1SVQjcEhiaylBaVEpSSw5ZGZ7R3xJXlcmSH15WiwsQyRIcCN7WjJfKC5+SygiNXUqXWoiTmt9WlpIejp6VEE2JjpAfH09Y0VVdjU3T159Mz10UiEvbkxFUWkpWmFYPXZyPHs7ZklOZltiaDlHRz9DM055'@;
put 'dCUvbUtDM0slPGV9e2dMRWB9QypyTyxCPjAlNzpXOHQ6WzpnZHlOcHtQPklPe0l7U1VVKzFLaisrRDA5WyExPSI4VSVQZmUsNlkoeEZPUzo+JV1YZW9VWUs3Jl57Sm0yMTZvR0FTXlI+UHJDbilxUTx1dVB3TiRHSXlFRC5yeHEiW3dKe14jTG8uTkpYUCVIekh5UkNmMGR2PyFYL001ZzJHZVk0'@;
put 'XjRdT3k9M3p0ZEZRSFIjLEpvbGR6e2ZTbkdfdFVaeT4vUEY2TG9keDMqc3tGQFsmRUQkN29YJUZwOUVtJjQ6ZC5TR3U5cTlJJE5KYEJbMj4lJFFxR3FfVUhTczlFdn1qYWJCeCJyVWVMbSFHNl1AbGB5UkZfRjgmWmV0XWBXQEJ+azxsTj8rfDlpOEU8KXRMWSxvKypKbjNkSjJhLzElUzpzSXZ2'@;
put 'dmpUSlRqcCx0cGdSOS8jSk1zJTchSXc5a0Emc3pEQjF+K305THt3bllFOis4TmkoUXE0IXswNT40MTRzLEAzdTszOkBXOT9AWFQ7O0oyLjM8OXxHUXFYW0E6Lzx1KVohb3ZCJnxnR3lUbF02TSJxQXtrMV9fNXFJY05RNWd1eSYzQTtDTlo3Yl1ZTSNXdUt8ZSRIMHN3L1laI2x1bnNST29uP1RG'@;
put 'R29OSE5FR0diVVIwezZ+TDNfaH5jfl5waSx1RT1ifUBaISk8XXxLY2tuITt2LmNLPjUrXlp3VlQ2QXNPY2VWZF89Wld2aTkpQERKPm0oMUIsOCpzMVllJTlnS3IlYkpdSk1rbVNQUVA8L180c1JjdlhfYGdAVkQ3VnZhc0lOeXFtP0ldPGZMLDA/RCJKKG5WT34sPkRgTTZYdSV1cW1pZ3o/XkI4'@;
put 'ITRMZUU8RkJgfWtge2pKODIhOUA4aVdRJUh2OV1NbipXa3BreSZIQXxvXUhtSSQ/ekhyW3d9VGV5MVtJYHBOWCZrJGpwVz95OW0rZl0pRX0rVn17OTFyNChfZEs9c2U5YzNecTZgK3VeO3J2b2IjUkVVMi96RFpMV0hZPTshalcqW1ZiWHMvQyEjdGtTMX5MKCowbmgke3R3RDp4XzNtdE46dkRa'@;
put 'RCJddygpQ1syIShncytRakV+PUlsOEQwc1ZYOjUpcmpEUD5rU1RYM3pkTSR9dSN9JEw+JFhmTGR8KmE6SW49Tk5vYXh3I2FSUTpkZU94KnNbXnNQMCF5RSttN1csZHA4bi82YjlOcHBzMiJSQkFoXj5GXVU6RTVoTDhfQ113d08sXikzQldbOz0zQ3IlTVlwVFFYTk1rUSZSanwqNl5SZiRxNHd3'@;
put 'cjFzVjUjZ2YyTH1SOm9wdzZUfWUuQ0E/W21jfV5kNiVwL2tzUCVUI2tJcSMqPlREZj5oalRfek95eixmSURGWihQOFN7fDl9N2BVTjhXbWAzcU4xJGx5cERHPCYlX0xLP1h+UGdwc2VteXVSUVpvUzlOflF8YkBuRHJ1Q2peemYlUkhgL1NpLHMyY29FODklNyYwUDleW2dgYElxcyVaMWJqe2g/'@;
put 'JkAxc3NpV2RnbmFzXyhjQzhaV0R6UTluKm5WSD1PU0EjaEZwKiFJcGxePGF8MS4lNWVzbShucmNDPkBjMTFJcSx4XjcxO0ZXbntTRG97NFReUEMsPF5mdDdjUCFCWFNyW341YyEjVn0laSY2IkBxbyw3OSVlfmBJY1J3NUdTKFc6dWM4YX5hVD0uVSxmQiZpcGU2Yjp0Kjl4P3tiUk9ndWd1WUsr'@;
put 'ZzomZUJbXzQpcnVDRVE8ZjVodCxoYWhUYUVGQ0hRS2FTblEqZndURTBhISwjMVgkRkpHV3hbbnEzXV1dZngjSVtuMmldVk5hT2FZbChbQ05Ya0clTD80VD5MZHEjYV9AL19KbWIySUteJEw/SWlsdmNwb2E/P25zNDZuc2lRRT8zaDhXbUd8LFNkUDJze2RrXSpWI195YjZVJSJEPFA3PC9zRkN5'@;
put 'JWtnRU1SKmZrfit6THdCRjxdNyh0cjhpen4mNiJKVVNHY0lAMDY4R0Z7akpHPTtdL042YCYwRGR3ZTVvX2dnWTAweiJTJTRJUnF3QEBAd0M2Y21LZiZKb29UblB6SVplQDp3O29rZ2BIRjU4IUJLOmgob0RHWWFORGh1Kmc4Rz5yWE9DVTJdJUJKP1lCWXBjWURQLmYxK0NVbk9dbFtFTVN9OThb'@;
put 'SFB3KHAvcHohOGZlanRbNCNTUnBwYj0wZElAREkhbT57VHxyOyxiXVtrdUYoLDFFWEIjcCI7djhten5lLHFdVzhzJHg2KzhDeF1AQC5vLEZja0FVNS9GS3lQXUlXejJ8XjNGVE9kOD1pcz1ZSG0jNyVdN3ghcVhEX3ghcUNnJTl8VjNaaVdfdldWdSU9eSIkazI/UHcoRnQ0SzhUaE5pNkhBdk1Z'@;
put 'Uy9RO21wVD0mRjMjdV1ndWtZVWlQWjhQQURaO2pMTnIxIWYhTEszVG9RcWFOdl9SWW9ve3FJfXU3PToiVzFNKSFgKkFsYXxWfStne3Y7X2QmRDYqYzwyXiVsek8xdzErbkJ0WEdvUF5wX0wjKj0mXTBPNyI4PGRLRzZ9Y3B8R0Q+bltkXVRVeVt7ZnpeamM+W3klMFBOM2wsN2VVS3M5QX5eWl0s'@;
put 'KjZiRGl8bUtrSU44flpLZV1kPShUUjlHZDs+JjFJc2VCSzRtbVg9S0JVeHA5S3drUyE2IiJNNCwmemAhJHF8cnNVZzk3dFhHMVkjLz5leT1tJnQ4Z2VtM1hgMj1mVj8hcnhbOjFvbVUiTGolckNWTkcpJXMrSkY8dmNnfGVZY2tUYz9eYklmVn5QZWpNbWZ1PVlMOCVPOVo7Qy5bYFNaUXMmXmhw'@;
put 'I3ksY19zfHUxMXVGKUcsajxuOndifXhab18yTn1MODV0cXBYZ00lc2c7Kj9pVmw0M3c6eW5Ycnd4NFFGe11FfHtndXtFYSY7R3ZfLClfNmF+bDo3OkA/KTpdP1teaDIqUDQsJXt2LypQRzFtXlR6fi5ldXkpUStJbnwuX207KmI6SmIkUk9dNXouO24sYD9UMiNlI2ZkQCRaVXBnMz46NXFDYnU7'@;
put 'LG1QTT06VjNjOk03OylOXXt1Ols0Z1lLPXJQIW9AT10jajs5O1pZVUJPZFg0UT43O3FoW1RwMWx+b1pVXU80REN5IWlQTmErYmRpOXdjRn5sJTpXLzVJJlVZb29SfkN0TikzQXc1eiE0Qm9vfERRR0YoOn1OI291d3ZdX206aE0/fVpeO2A1byE7RURiZyFLNnp4JFs/fjpZLkBtVSN8MUpmR2U6'@;
put 'P1ByUEZJNXFIJE0pOz5VaDliKTE7WTlgL1Q7RUx5fkliLlBfYSRSUWY/P0tTYkphdk8xVkNHRVEyTDcxdTt3dVZjcyVPJXgrM0tnODdLOkMwJXs6ZnxfRktnV1pRUnc1VVVVRig/cEghPWRbd1hkU05WL2FkdkdGSFBtV2ZLVT4rXT9nL05pTnQ2L1l5QnhSRyIkIjJpcz5zL3RIL1FoaEpFeEEv'@;
put 'Pjo6W1pbOGdUMThgQUxXazxTNyovMX5QQSUiMllbUDNAOmRZcjc7VyFOVDg2TVA4K3dDZUYhMH5WY1s2ZU51cmQrTGhIfnltOjgzcG9pT1RjKDlCeVsqS0Q7S0hdRz07WmVZRH0yWmV3dip3aVd5emoxUkp8bWteTHtHZXB6M1h8fCJNcTlFfDpLaTs4SjNXPyl9eXRbVyVKbiJIO2kwOGYkK01b'@;
put 'MXR6PnA6OWZ5MHY2PGlaUVp1Vms6aU5GKz9lfkk3SHwhZjVxez8kQzQvcHNWMGFdZ2R5amBPe2hWNypjOGpbKkBwSTtpRCxyeyQpTip7NVFAeCluZlUuQSZsUmpsbS5lTU0lc3coaWtAeSlbJWdoV1lALkEmNTEvLFppJGFwZSkxbE4/Z08hY3E8TEReXmZHZTR2TTo8I0dCOUJGTjlGX0V5QDhD'@;
put 'bHJlQkxFTVIhWXk4TGZ8THpLRTBkPCJCfEh0QGhQOj5sT3h6JnEiTiMuLH1TenF6UEw8TX1YLDQvKVc7VHs0cHc3S1ZsTHVMX01VeFh9SFdvbGBhRFAqXlchKUpVNmkmNHFoZVczX25Nayp+cHxzOUs8bV9VO2thXT0qbVM7WilpeFF6Y0hBJl9GOlFCWDZtOWFBOjNnN1BoVjJhOFdbZl80MjZW'@;
put 'JFAxVWFZS3FUdCFKOnFbUmpUcS9AfkB5Z2xgc282VzgxPW13ZU10Y25xeD5mIUxeO148PTNsYDpEe1QvUGl5V2YufDR8aXE+d285cXAmJUw/KG0sI2dWUXJ9ekJAOHF9eiZWfUNmbiRQYntfKjNpbj5rYk1hN2E5eixSKCU+Z0JfNF1bNV92PCxjUnJxZWxAYUNqWXorUiZZXl1jJjE5RytmcCJf'@;
put 'Ym9JZCllTGBlOVUxJDgkS3pGRHUvWTo7YjtvckNDPEA3cmMsRzBUfT5WKkZgciUyKUl2WW49QXEzKUJqWC9uW2JAYUEsSCVuPDFMS2B9MjBRZlNYZ0YpLF9vYDxNY1EoXlsrMDpIdCVMRVVMV2lSJT5nJWY5QUp8eiVaNGJYZHwmM2c9OHJjPT5gZDFVVSRWdWgjMDJCOTsiblUrRlsxeDh+Q2s3'@;
put 'IigkRkV8SjpLYEZjbG9vJkQjOzlpMXtKT3p7NFIkQ1ZpQH1sPUJsUXldVWh6e3tSdWpgdnpqRz52S05pe3Q6dD1lPnI0Rz8+NHI0dD9vbHo/T2pmXkRKOTwkdCp2MSxvV3hOWFcuKV9Xan1UY3MvK1dzUiU9cFRbVy9Lc29ibCY9dkI1RXJyTWBTL2hFPl04OVlyTVR+OnImbDpFTHZCRkhmUnNl'@;
put 'Y29HZU9eLj88S35IPV1vOWwlXUJJRUJVNVVkaCJ6PjpETEk/WWU+KXUxIWF2KXVuYGRDSUF9UyRUSENYXjtIQ1E3M2h0dV1AXmJNWmZGdltnMHQ5KX13djwkc3dJXXl8JklpNEo/SjBSOHxQP3IidkclYzwlfFJ8aGUuQCZGcFB0RW9ZPHBodHs/Y2Q0X1QpZ0Z7YDklPnVbfTBzQEQ1aCRLQ293'@;
put 'KTNbKX5LL2RsVSNxd0hPekQjfU9QViFhbmAkQ15uISV9OUxCbHBDdV9BL28qT3c1PWxCZkNIPVNoQD9YY11zQi9TcEdSRVssaGc2Wj89LnlENCNrUTpAbF1uaHIvbSsqfXVKZlZbIVpyQHw9Zy5DYF1mXmVvaS9IQ0o9QXpkSm07WVdrdWF+YSY+Z2IxVWhQUlcxfjNZJEk8TSRDQkxMYVtgLjYi'@;
put 'RH5hNCw0VVZYOFZ7QF1HZVl0cXNVX044VmBRQ0JRcmhMUz9OWzo2MFBsXXJ4IyxDMl1EPE09MVt9OCtVPUlGZH4zJTJJZmZ0VHgzRT1MVi9eKXhQOzxfbm9HRj1yPmR0cyQxcG8sP1opOCRSPCNSKWpzJWhlPjEwKDZ+aHU0ezRjP3BURDYoLGJRRiZaajEsQV48RFB+bWBvQGpZIjdofC8qbCVs'@;
put 'IjovWEpDVDklTFNsVXU1MjtEYSsvJHBBUXdJQTk7b0piWmZ2SUNaPTlhYzUoXWVsbWNTVSxrfX54Yi92OltfcT46YzY0X3NCXiMhXnFxWGBXMFpxUHw3REhbOz9vaUJoTTovJlhaNGdpL0lpJlB2YDc5PGg4aC4mRyE9VlUvPEM5Nms5KzhnXTFVK3N+XiszOXM8WzNWYmlaPHltPkQoMWY0e3FF'@;
put 'VnciaTY4PGAvUz17OlVvRSNBJntANnMmVDNxJlRMXS55RHB1flFBTT1QRjBjZnVOMGQ9TnVCdUZkKX1FMUMvMlJsSVgyP1llMT9ZZVA5N1t6UlVbOFZSY3kiJW9FPjQ8SWFVKG4me3VSY2RbejdVclFAMU1RJGRoXmJ5ZGY0YCI0JkU8OHNHLCo3WSxudlNnbEZlc3h3RWpEUHp2Pm51JmM2Y1NT'@;
put 'KFdTJFAjW1NwcShMOWBDenVeOHFOUExaZDBBeDpOQFl0WVZHYy5UJWY2JndJbEAqWEEpLz88XWhiaDEsdmxWdVVrZyNpOyo2PzN2VHglOEtoZjQwPXArXnJ7Wl5FOzl3VkNlNlRpblp2YTRnVWxWRTA3b0shV3E4LDhLTXNNfE9Fem5qUi9vPXxWSncjWDUuT1UhOXxOTlNnKCtvczx2OG84ZEpO'@;
put 'O0BIUHEwSkpRYX1dJTdEOSZTezZeYm5gRUtYTmYpQGU7Wz5lOksseSRMP143KTZ3bVgrdUdiKGwvSEQjNiYmKklPWjJlKHBodC5+N2ErIWlFXjpkQjtsZnlTVmV0e2Erb29acE5EOiE5ZElqPExPM1lwa2ZOT2omaytmZDIsNnVvQEFRTVt6dzA2MlU3fFpZQCgzZlZeMHB4bDRuOjN3dz1dc051'@;
put 'Q156cXY3YHV4NTNPKXxjZW1GTyNdXU9lISNNQnJgKmI1YG12NDdmQmpeIm5gW1VROF5lKGt3VXRSTyFadzNpbTNLe1pZbEFbQExGdzh9aSohc3lFZTQ2clRSaXghMD4peyk7LyJGO0taSzs/Zng3YU07bzN9ezxGZUJxIXoya1phKXBHLGNuJlNLUH52aXxgVlEzWDhkMnlbajs0VEM4MlRRc2Fo'@;
put 'eyJzeTsza0A5LE02ZCN3KC5kZTR4W2JPTShKRmJ+SX5NOHVlNiZidEhNdEl8dF1CLzJrTyRuSGZnZkdCS0siaTpLKUlLZDRQMmteWkxDe2BLbUI8Izh2Zl1QajRNS3t3K2Q6RjdNfEhWP245bjxHIX4qUTh6d3JxTCMpKE5sPkZ8MjdlUTZ5NWAhMy9tc29nXUlmYGwzQCQvUkZQMGQ1ZmFFW3Vp'@;
put 'b2FlL3M3QEdOK1pNOCljMkc8MnBDKkRXbkFLKlhqcVg4O2ZlPk1yYXBwM3FDMk9TXjA9JHYiOCtPYjxBckdSdUQ0Xl5OSVRJN0pddWYuKT1BUF14VHRrVjE2dFRgQlIvTjQqJEtHLGw3R2FMQm9bVG9sQStwY24+QEBNPz5vQkk0NnQwc3FReG5xPDpkSjZCJktOX2I+TSVBY3lhKnEydCNkQ0hT'@;
put 'Q3s/cnV9aHR3JiVPZ3J+YEhObUZaTHt9OTs/WG5mPEpVYVVeVXAzJjliS3Rra1V0KnZXfUNLVTIsdj10N2kwLjUsI3xUaWhzO259cDtmbVs7ZDl5K1txWH0ubyV6eGhGOmp5RmZpX1E6bkdRb3h0aEwxLzNRMEdSNF8yP3A7VFU5NFBXOjh3cSRDLkRzfTtqXjlrSVZYWlI3WUI3cyQpRFBYUlBU'@;
put 'LCtEJjJSRUhOTi45MCMlV349PSRmJjFtOzAse0chZ3BUNEJmPSFCPF84JVFNZkViaXVQKEhjKWZIQX0jYmxEdCw/TT10VztXQiIucVM6S1srMVJTK2QqMEV4emBxXnd+aHU0eXQ0Mkp1KnxDJF9pLGldOjRtSHlKdT1bXT1ONU5KR1hLMSxZYlNeYHlxS3hCNSU+dEldNHJjflFkRE5Tc0xwIzhT'@;
put 'dmx9Ri9PTTNUNGg1Wi9ESkcyelh6UXBSSmhbaHpwUmZTamFyQl9maDxgM2dhY1RQNC5gW149fWhLUG9DVFooS3cyeEcpJmFDZUZ+NGJxQDR8fUYseUU2a0AuZFBwYHR+SEp7JWhYWllWZillTSR9QksxUkZkcENkIlU6d195U3g5eXFWNkdoKSgzY3BiVGZMQF97LGVaWy9SQ19TZipAWVZSazVJ'@;
put 'RnJDWEI/SjZLXzQyYmNQVmU5Rl8lK1dMRSUwUDU8PGBoWkRVcjk8IiZEW0ouKkZZfEowfXJARzh+OyYrYEw7eHdQOjowPT5KQytQTE1vY1VAYyg3anl0LzlKT3p3cntQKFZlayRha3JFfCtFcGBrQDpqV2N1ayVSL0BIM2oxJnchNiJOPWFOciwyYjxQNnxjT2x6R09PUVt2LDFhOy4/dWVjLDoy'@;
put 'SmV+LmsmJWd9Xl4zUUl9QkVdWU0vTmY0WVY6ITl2Wjt6YmZOMjtHUmU0KC5mPigqWmNAb2lXLkk+VChUfEdeWG1paUBKSFt1REY5YSE1JV1NZ009ImdbLnI/Y1tsRDdbMV4iSVkwMVNdJSoqMkpjVEFsKn19Sk0maX50Xz1EJkJDfk9PRmFrWDxeQ3IyeDhRPUR5RCxvekpRT3M2SU8sWHJ0Wz9w'@;
put 'VH5HNEBhRDVzYEY+alE9UmZLSSxaZHM3XUtSPH1rKkgyPWcrLkVdNTU0cDxGPEMwZyk+K1FAO2h5Lyp+aTpSUmkyYmZWQE0iW0koenpCXWwhI35rOk49YkZ5QjxUXTpOPW5Cekdja3c0U1Q9NDFFTG17aUIybS9UdlBbeTJWPE1rN1ImPDY2cE1CU0hVUUo7eF4+OXYxOCtTakx5UjQxfWBIbVM7'@;
put 'U3gmLHBdMlV0QDk4RDFKQ0tCTFlme0RZaFhCNTQ0QFAkK008c0QifCpRdUw4R1ZEYm4sQ2ZrdXNyQCMue0w0SilPWzliZCYiZEpzWHJ8WG0kJX1LZmhWa3drQzw7bV1nc3hUQDBtSHA4VzhzOCEiLCt8NVQrd2F4V25wS19nS3ZqbkkkJTpdP189JX5HQE0rUWN1PnU5R0xMSVFzWG0/cilTTHpb'@;
put 'YEVNe3NPeWlzY0M6UjwlNzglMDB2QlVpeXl8U2Rhe01zLlE2akVyeHZ3IzhLRDx9cDIsP0M5b01MQClkbk5YLjQyO2BWX0BLUXVMdWZ3NV5LLFBUdUZJPCpZRE9tP31KNzdHeHZFIVA5MDFbV1VpY2h6WCg4TUNXRTdteSFmK1ooVypYZTsmcWY+KnZ7YmREU3gyPUVyVXxuLnBEYntSQS9HMyU3'@;
put 'LFhCWCtxNDhzIzRhMEZbb0EwJjkudVE4TTMzbXVYWyltO3p8fXQqfFFIbj5heXp5R2V4TkUwfEA4PEJ2cUBFRl5Qfk5ZQkFUInlKNFgjJkIlRSlyKW1BSil4XUdUVGY5RiJwQ2tfYW14cz5mTUkmTyhjeGdgJS82RkRqc1tHQ2t3KUg8UlFzbGNZPE9LQV5acDxQRU5dVl4vUSNfR0ZGTjFlc2xS'@;
put 'UTtXVGBiQipFbn1yPW1VdC9dIWRYOFdtPypUbUk1QiRZLEIxUXtVKz5JYU94elZrX3YoRHUjb21IQkFKeUpDS1BeZDhkOFREMihvYmR0WU0rYjpVYms7VjV8cEtgUS8laFQ1WTR0OzImUUorO0VESDc/K2ddZjRuV1YrK1MsczJReTVENjUyLmREMUhxLHxrOipVKWkseXc6aFAufmVMTDI/d040'@;
put 'MSVwaHlVanJ6YyVlWTB9KiFkWTB6QFopbGt3M3x5Qis+QndHZXRSYm1wPzcjTixnYz49MChGWWEkVTwhTVtgYmN5JlZaLFR1MHAvQFdeXTcqdXlAbFE6W0lkZXBhfCM0Ym5XVHdNIXw8PSImJlRtMFhAZ3kjJUB1eDdlNjJ5KUBAMWBEXSw3aTFnKEg1NSN8UD5VdTIpVGx4UkkxMHBUV3xvVSgs'@;
put 'NThmbW9geTFJfWRjMG9SQCt6TVIoPyZIfDFyKGBfYytvTkRVVnVDdzg0Q2pHd3xae1QuOj82KXdQRGhHTmwzXU82Rnp9US9VTzNwSHFdfVJ3bExVN20vOmFRNFAuNU1MeTNvbXZ2RHZLS3l8dzh6fGxBVV0wK3ZvVX1dPHc2Pn1GQ0d6ZyY9bXNWUC4rIWRGZEZJVjhRcnFIa3tUeVVlUjNtNj5N'@;
put 'OmBCYzdjMlF6TjBeelpbO0c7OklrO01pY21TI2I1ZDlnN2A9WiQ8d0g7WyUsRTMpblIqcTcpQ1NSNSVHWVdENE41WlsqdX56ZmtSSjh4cTR2cypjO3BSYVNvaXlCKV5vVD09eCQpYWovO2I3KW1hSV0qOj1nWTk3Qj46YGQmJlNEMlYoW1JQZElOODwzZT14JkNdZmg1aWNham1rdEs6NiFKW1k2'@;
put 'L3NIR14hd143K3R6d3FlIld1R05fX0U6SkZsXlt3PzkhdUJdInp3ZEJhKTo3V1dpSVlXakokL2plYGpgXWp8LiJ4WDZ1ZV5WaFE/YUxVKlEiZFVTanMjX0Q6JH1EUVB1eFldRl1nezV7T0hjPVVlKHFpO1IxZCRndGtLL0VnNHhoVjcwaH1DcyoiKyZ8bGA4KGJRI3MxeFNrRzA/Z1J9djFZWTND'@;
put 'XUk2dmFubGAwLnZYK3x8S1NhYGVpKGlPQTRkVDttdXc3XW0pL3o/dldubExMSyJiMU9DaiU4MS47IlglNmlzKzsiTzhfUj55SltVYCF9Y0dmOCJia3sxLkxLbHxkfDIyTk13IzREPjsuL2hdR11AW1trUnA5SyUxQU03aUZIN1JiSm1SJDc+O21wWjUxNlAwQXpwTyldVERAQEBAQ0tHIWBUT3pz'@;
put 'SEtUTkdlYmxUQEB9d2lzb2VuIksqNXhKVmdzRmN7UFIlMFk4LkQmRDJPeiNlPTE5LHp1QSxKZnJwOUskOzhnVE1+TzpreVpmImBlKlFyWnIwKmhIKnx0Mz0scjNBdk0weTVWUXJIOj5dcCRgI0ApTWNrZnBdUzpPe0dSISVgeVhPRWFYUFlhYUdfMHttRjVLK0JnamNFTV11TntHW3p3Rzh8VnQo'@;
put 'X01aaW9XRX5vdztUUl1pI3tnQ3dpanZ+XmFaOGR1YT1wXSQmWXgvWEhxYWk2VndAfmNzc0I5TndCKWN3QXVuVyo1ck1yYXcwTmlOUUI2bjFGNTNGdSNHez5UTF0odVdbU1J3MzJvenkpIyl6bDpraTZnKWlocEd7SCpLXV9GWj5YT0dnRFZwNVpYdj5KPT0qXlBzYXAjelA+dz1adktkY2c2ek1O'@;
put 'O1ZHdyZaIUN9eD9MeXxgcGVZOFs3WFgrfjNIQ05sU0RhTVo6ZmRvU21IPEJHXVRFSGp5eXxWNGFpSV1yYzkyIm82b0pyRX4hZippJHwzZSppQn4vZF5vXW9tSXNHdGEjWSFzJk5IcWp2cTNYNjA1WHFLakpyRm1NNigpTT54fHYmPlA9KktdVCFlSm42OyklI1VIZi4vYE9ueC4zTiV9L1VmTzVo'@;
put 'Lls4PU9fIWV2Pmd9fGBKfUF5VTYwNSg6VkdZWjhSbmE+fXQqRTc9WUJMZjZhYl4hOigxTCZlTl9ALiwhbjd6TUVzNSFXTmt2amx0cSV6QjB+K25vODx+fUdXcHtqWSRaNHZMbncuRjVxM0ZZSVN2XjtXZXJWKTk9OUl9UT10bWFIKkU8JUdeeXh8LkxHYDxWVnJNQFNaJVMrL1FiSzx0Q307b18+'@;
put 'aGBoNHtMUlNiQ1RRKmlYSi9ZcjsjbF5LaHFZYzl0KmUkSFFQaWU+QSZhakkpZFREZzBIVSs6Uk5pTkZLankie3A8UV4qNT1vVnsqQE5BYyh+UG5BW1goeDV4eyspcThfOlYpTysxOHJ9U08hUCxhY3IwZmxjPHxVVX0vOGxlUS93TzBsWCtRd1hROHk2VjErWy93UkhGJmxmMEZPIyp8Jn5OUF8x'@;
put 'Tk9La31UYyw+MEBMPkwrWno4L0kpM1dXd3ptJWY1R2psb3wmXUhsdV5+dT9mPklRK3c7dVgodFF2SFt1O2B+bjZMbVMiJV5ePUlCSFUrWlVdT3ZIa1lfemZWSih1UTwkekMwZzlgUk9DZUN2SHlUcE4hQ3ZAIVYlVjtCLlgjY2Q0eWI8Zy9kJmxZMGk9SzdAcTlZZSghRH1KUHd7W244e1Mhc1E3'@;
put 'a0UxPENYJEwhZUxSLlA2cGhIZiUmZHBsSSh6Nk56RW1sJi5RazJvPV5KJUhwZClAK0UvT11xOUEpITd2YDpkTStpWCFsOkRGJkE+UzVMU1RhfGNzezQkTWR7WkxXMkk/TzMmbzB5c0spWEREKX5xTSRZWGBFRnYiVl5sSX1dQ1h1I2tKZUFoTXs1VlN5XUI4VzNiJkM+XjFCRnRGX3h7fD9xNXlA'@;
put 'KC9aPnlkS0Ixam9IdkhGc31ZUzN2WDlNcVswT2Nmbi9KXTQhKVs6UyJbNHxzcyFgOipCSGNJOX1SRlModUI4NjQuQU1kbk1SekZNLEwpNjZVfmpuJUdPdVhQTll7I1d5IkI2PnQscUBFTCowOkh7Jj86Xl5BfWlmTTUxdSxPbmBHQCF7cUVUMyo3UFA9OyozI3gjPUV+WDBRXjsqXzdDVyVuPSo+'@;
put 'bzx+VWdyJSNafF9STVBecnFiZkUpNjFkVXN4PFpnakNPR2J1OykjaE04WiN4NCVeN09ocD4jQkc8dCxbVnNTTTF4JHglX0l7XiZnW2FkOjddRiNhPEUjKDJRVW42LlUyYUAxImA1SDRQRThWaSh7U0Z7I1MjXkRCZTJmZT5oLDxhJk1LTlpSQFclKX0/fW5XPGNralFTYlYyQ0VLQktKdCM2Jl1D'@;
put 'eThjUzJ4aSw2JjZaMCNVa2hTdy9VOVZfUGleVX5lYz02dWlFVlRgXj9VSlpua1p3RzVdVy5RO1ckaSplPW8xSF9sZXRROjlRfHc4JSpWIjg+IXcxSFRuRTpHMiRaLjx2a1I7dyhyTSM9VGhyVmZHZTdtQSlySjo9b1E0Lzp4dlBoVDgsNj1DIUJePCNBT0c7MGg/d218NiZ6dkhpQntaIm56dzE7'@;
put 'YCs+eClSUCNKczRYVUE3eFM2YmgjJjcrdmBLIzZ0XmcvVmNRbDxQd0AhaSxtaU8/Zj14M3ZZX044d21JYjxkTDdyVUtqSWY5SThsTyEvSWNhXVZ4dUBmOFdNZj4kWGJoeHhvdk5KQG8oLy9wc0dXW0w0XzwpbFAxcGNxL0AiKmVGYCslYG1rUEMkeDVNPm1BOSxgemZIZDB7aUB7d0kzenpAMDws'@;
put 'JGJEUGYwdSE5fTE9SmREUGRSUV85SFpTODJZeWghVnRrdX1SJmopKzwpJXw7ZGJGb1g2aUU4SyNaeEtEZGJsVFZxWHI3PV56W0llTDFWOi9fM1pmYHk1RSJGcnFDMzZhIiwwR253Vz0/Qjl9fTE8bGJyL3dIRD5UUUc4a192YFheMG9veE5oYHdvSjN7KyVXTjhUJUZmOGRAdVhhY1BmYWxldUcv'@;
put 'cXYyYlRmM1Q+Z1Z2Ql9iOnJyaEVbZml9MTBoSF57W3M3Ikx9REM4TjE+JGxnRThKW0FpUzVDcE44V0s4YTQxZTYvXXdtNTNOYyl1NiVZV1JpS1JTPy5HIXFWQmJGUG4rfGMkVDZ8P25CTCRmRyNxJiJoYHdvcm1oPDBtWF8/WVUyfSosd0cpMmh8bHFkUFoqO1ksdVJ0VDh6R2U7SStTaWxVaWxx'@;
put 'WS9kPSh6US9xbVZpOEo8VDcjVG1RUmxUXWpsMWx1c2BMRlM/XT5PIUJMTU9ITnFmV1kwOHhRZXhrcChaVEVmKUx9RStsQXosMGdDfV43dUgvdGFAIzcyR3YoREBqWX5Gd2I/Nj18eDF+UH5YOnAoUDF4UUtnKXp3MmgydHJgZWNLbURqYns1YkoyV3NsU3MyWkNYRWBObm9iKTRTIyRvYEZQKitF'@;
put 'ZmoraUR9ZSsjcXkvO0xvNi5dQExLRl1jNitkfXtUNn1zIUNQbSZqeXZ1aCl9PUBaaS8kVmA1Mjo/PWRjd3guUz09dEF8Lzt2e1FdQEB+a1BSQ2UhO34wdWlfcU1UWXlwRTsjTU8mK2BzbnohdmZvUFB2SEtSQCpbYGozYEN7NFgiSVdjSl56InhrMEMzWCE5ZktWWnJvKStJYHYvJnpXSTM7TCoq'@;
put 'SiROUFBufHlxKiJhUis+X3x2bXIvZzFeZlZpKVszVVVDd3x3KzFNWz57TklnW29pWjdAQDZ0fSMjUUBySFJjM1YxfmV0LiVsTzhXYV1HRFh8b1JaUCMzL0Y6OT05WT5eLk9eaz9pZk5eVXMjcEM7KFY/WjFufVYxcmlPIXdfRixGZnF4OGpWSntTLDZBNFZVR2VaTUNlSzxqdC8iZX1NaU9eV3Jo'@;
put 'JStYfnEueWs/ISZYQiJ6RmBBMV1QUFU7YTdEK1siNHdYYCUoQntJbWNUcFpAPz5GWEVHJlkzKDxMYUw0OEhNI2ZraTAkPGdAbWVqN2gzYSFdKGRqIlJIOSZJKDAoa2k+SStjbGN3enhRLGpLeT9JRnR0QSVBQFhSWmFFQWdzODVpcCtqT1ppYyFdS0Y8MF9sRXBHezloOyl+SXxYbklzVi9uZyox'@;
put 'Kyw+RmlWYHYmKDdSUn5FcTMsQlVoZztoXUwocXZIKE4qeCt5d3FsUTE4VG8mJHx2cGZ+KTNXTHU1aFJ6Z155XXlnM2FAdWVld1glQnJqZnI8Z2o5Un16cCFSbS9DKENkRUosTnVDTyZ5b0pYN29+PHJmdltWc3gqTVFjIXN8JnUpISEiRT55Rm9pPWwlLD5qMmw6S3thQ1IpfVZRQmRLLEhVOVpm'@;
put 'QDkqPCo/Vzcmcmw6Q0I5O1NVc3hvenZ+bSQqR0M7dUNoS1I5SS8yNlVGVUdjLjI5ayVoQFpremAuQkFKXUVRZlZJUCJpOkMqfU5hLFRDIzgwPTZvXz9NSl9zUC5RJSkvaj9AUGpKTyhFKVM+JGglIyxJN0AmRD15Q2kyYSRUOVJvWVsvelg7Uz9BS2xlXz9CbiNFI0wqcW4yXzdwNWNTO29BcTtx'@;
put 'XzQlXUVlPXhYL1kvJnxUO2tqZjhpOCshb2RKPFZdLHdrVT1ZRkxZL3s/Ui57ZWQ6NXIpdXx4Kz5NSXAvPW96LH5PIT1HPTxiZkZsJU9pXSp5Vjt2U2JyR2k3R2BpY3FwQ09DMmhLdEMrS3FrcX10PUJTQUpvRnYwezNwfUdxN2p0eEYmdUkrQUpGcVR5YkUvSS9wZFVyT1dgNzttdyFDc2c9aCkz'@;
put 'LzohRWUlPzVdS0YyODp+RDIhK2woPzFGPDhOK341VVQhby8qMl1DW0xKIUpeIyxUc1sraC93dj0rakMrPkc7bHQjKVlxWm5pZl5bS1AyQSUsYHplRiV2PS9HfkkrPnJFKCZBbTpJSVUhcDN9PFp3Omwwe2xmWjFpdiUwamJnc1goJjh+fSpSPGVjeU44L3wuXUhgNGAqPGp1SH1VKWchIzRLM0ZR'@;
put 'ZlFQZ044UWVBb15PSVA5OW0qcG5HLj5qTUpmQDpxbVEucEwheW9mNWFkWXIufnJ6WmVWVWwwYkpkKzxiRFp4XmJpZmk5V0MxcW49KTZodkZMTm9oWUR1ODV7ZixqPVtCYitEaHBAL2x1K3xyVHN6TyklbXNNcHM2MUNTOVQ6JXFbQ0JQRnEvRlplRHVBTV13TjhYJSlrKkxGbEBpWjk9SDZMZ0Fv'@;
put 'SmBpYF49SSZCV1I4VT87QE9wQD4sVCg5SFlyeFNGS3FUY3BATE1DfEp5b1hyPzEwISRxPWJZdjUyXT8pb20sKzYreEAlYlRES0k6Xm1AZXsxb1M4em9ZUmE+OEUrUTtRISt6NV1FY2NrU1s1VnRdbV02SDJJZStqNkUrdGRUSWU1YF5KMHEyLmRlaGV8UjhMO308aHBVNWNAeGRMTj44a0Z0Okd4'@;
put 'UUJQKHBoXTEwLkhbYDQsOm5VMk1xfSVAc1AwZjVnbmt+YSRiQDFOLGZwZWE6L20sRjZlOyFmYUgwX0ImSHZgISojR14kelJ6a2VgU3VUOixhUlVbPjkhciFvN0BVaUNYZ3V2XWNLeF4pWGU+KkxBeGBJSWppSU1KQy95RWNqflIqNmthXj9CMmxFLmZIRSo/PylUUmxlZzElUiV2YT1ZcDVWRExb'@;
put 'NjcufV5sYU44MCJ5Q3Ywdl1MUDNhL1JiX0RDJi5vaV9bWUtsY0xpbG9HTFRKM3pmOWF0UThWIU8wNT9IeFJzSUgjdHxaITN6MlchJXVSS1VhST5OUnNVc2RHIXtAbCVyQF5hNk5oNjQoVSUhK3ZHR2BfTnx9VmxqcyJNP019XUVLd2ckQUlZLlsoQnwyaGZmKEt1bUVGKiRWYWd3aTlQWCF2Tl9H'@;
put 'ZjhzRnxbNl45ZD1pXzwjQ157d0BAYDI0NlZsNSVXaEAyNE48LktuM0FEaXdIOTdreSMjQ2JXbEY0e05fSERWIyNDVFclQ01UbGFSITJOTilzPT8xPVhbLiZZZDF9XSZmLyxQfU16ZGZhcF1XNyFYL1VIel1JJHR6OUlwdGNXT0B+XXt+bGBTPjI0Rk1WNCsjUjF3Wls2ODVWJHU6KzNKaXRZRDgu'@;
put 'cl5ERUB8TFldMHZgcSV5InF8QEtfYyYhPW1ReD4pOFFzQ15PZCk7I3EwKV5OYS9HXVdnc3NOKH51Ol92SGpEWXU/d0dgNjgka35yXXVbUWY0bypPIkk2TnlwRzU6VWJoZV12VVUhLloxImo/NFBrMHViaXhFVSpCQkN4RkhDb1hyIm1ue2spKko+KTd9YWtuMXcqLnt7VnxBVil2NzJXKzAjJG9Q'@;
put 'dkgkSUlVUEhmTy9qbXgmcUB4UEhQOmg+UE1Id0dxR1E7XkVEU1pbb3AvMzxNaUxlMjYxLy91PDBHQlBIUyFYdmNhc1Q6QCMvenVsfWZZM2diSXFgej19I1QlXmJ6STldYnBSTWNpLDc7KTUkeHZFJk95SXFJVWQmM1NtOmN4OWRCTU92K1kyd2ZsKnc1KSN6dXZZeUJZRFZ8ZFc8fEN7YGpbTi9f'@;
put 'PGUwej1VOD9rZmRWbUlqfCx1M2FWI2NfVltqVyQ7UCEjMyRHaihsRVY0cWdkZXNPSGVnR15JKytHXT9vOFdtQCYrYX14fHVDamE1QX1sUVI3UG9meldbOThoVCNnV15pcCx0X3QrdzUpMVtePWJLRSFgR2wyNyZZaCkyWjwlY1NNcTQ+bnVaNnZ8RXczemhyczdvLj9+NkNIOzJDN3g6ayU6MlF4'@;
put 'QHNOUCtGL1RAc0ooenlAc1I7UF8oRGBOY1pnPTRQMmJmTnRkPHhGb1lITEhFcTdmeCh3akk1MSRlUjdVPzRYJF0laTdKc0lYdHV2XjkvZFV7Ni81QjArZ21sW1IlY0c4VEMpMil5XiwwTD88e3w6fm8wMltzY1pkaCRIQE92SzZ3fC8pfl97fDdWQ1BuSHplWCFDY2R4bi9se0U4cWc/d1tdZD9A'@;
put 'UzxDP1tmTyhGcXJHYGBFNmVTamlNQXdAQlcxcm5yUHVNbWlBPHhuN2c5Rl5hWVdhKkZKQzMsdXQpWXYua2d9U1F6fXBUMWV9YVQ8I11rPGZNdWBjOUkjIldlbVBnIVd0e1lzRFZPcyF8WWtZcjVxSEBXaUxNREh0aX1WM25yfXs2eDooPVEzSnBkdX5ebWUzXkRUaHcrSjV6VTliI1FNYFsyQnU0'@;
put 'eDxMMWVHTFAoR3Jja15tdTBLK0FvTCo6Zy5lI15tbSZTbTxDSm4leX0vJWl7YlomWXkxN3ZMZ1lHTzleaVUyNXFme1BxdksieVF3V3Q4Q0RaKkNELnkrNHx6fnEiYE5eYVZAejYzJjRCe0cqSWJ9UyskYFckYkk7eCgmeUF9fTJ8XXdyU187V3pmPjA4REsqQnRsWTFhZGhHN2dZXnJiVWBtZ2U5'@;
put 'V3Q9Z3l6SkQqRC8+Lj8ydUgscHZgPDZZQl97NGtiak1HNSxye0UhSC9SSy8uWF5SUUV9UltnLGNuJlNeRUBIW087TyxPT2RjNkxvMU5lRHA7JTRCSHJFVFg6YDEsYlF5QlRJVmZOUDM1LFgsdVssaDQmTzo2XTpwLyZ6XTpiZHc8Nyk8K293V0gpckI0R1dMaXldfmpGXSshNlRIOHo5NCx0M2tp'@;
put 'RzU3XllHTlN1bjl2a1JyYF4uODwsJm1MWktaQmteTl9Jc1RdXjMrLikmbVlZWEpiUUxhV00zWHNqKFtJZ14sUnxbRVgsdmBMWk5tRXdCb19ANTVNLGZkeldLLFgyLHd3JmdQeG4jXWNaTF1oa3RoaiI7ZkMkJkVkTjs3U1BfbVcxWzVTOixbWnxARFBAWiJwNj1wdFdfIldKfWZPV2BwMj5bbWVp'@;
put 'PGk1c2A5MlA4SmlUOEppTlkpNWBIbURIM35xPWA7KjUxMEoiQjJHdWRSTmhNMWxZPi5hSFZEWStbOklGeEpSQjVtdUElflBuZlZocTIuNEFAUmFVR1ReJSFiNSNyOVdfWE5tVi8vMDRRaXh0VjFgcDRseTVzIzt5KmIsIkI2PkJQMywiQjVoZjFDIjU3LzklYE43SHxLQVJXPl02LkczeHdsPG5L'@;
put 'K3VJITtCNmVkTHdnTCozYyxOM0gqSjxLYUAmNHd7WzF2RCppdVQ9Rmk0Q1JBI1pgMmIqUFokT2p7S3FgVmRoOWp0UXdoYClZKF03dUtpSWFhKDA0byp6SERJPH0qeE9jOHY+aVdva1hOIUVmQ0pDWntMYnwsRS9jRXRCZGdCQCludHJpfnxDbVllJltwJF9Db2l9aEJ8MTdVRnpsc0h4RF0/XUl4'@;
put 'fnQ3Inx7bUVEbHl7WWY4JEpsUFlsTi9SPmdNWnw5TXMmN14qMTF4KFtyYi51ciVxdVk+RjBVbVNrWGg6MTVWeng5UD1tVmNAYWpYdHUoTnd6ZUZDfmBhIUtTb3lFNVh3azBnOjllUUpiRGZzcCMsJkVVS1VVdXJUXWlLQGd3Zls2WXFJTn0ub1gyaWNDdFt4LEAuIV1CXXBGJXVXVXx5diFpIVFP'@;
put 'Pzk8S09XRVBfJE9YJU1ILmE8cDxCK29vQnMxYnE5N09sekldQilPMVFmbyEyekR9Pmk2ODArU1dEJip5ImRQayhMZl9XbVgyNFo9XXpmLzc5aCJ0biU+VyRvek0+STR7dF55R3c8SEg0ezQ0PHR+fHx2XmIlP0I1L0lrKV9weUY+VC4sRkBfRT07Ild3PUJMZXRqNn49Z1lZZjFdUEZ7eWdqX3E/'@;
put 'WFZHUl8yJlA3Pj1tdFRMfVRXdDtXYF5FWGJecWAjaSlrL35FQGY8RkBac1UuQGU/Xi45fGp3ODpNWkpSPSJVRWFdWGQvcTE8UzF4ZGZQY2RrIWB4amVwcDpdTF1EazwiPSYpWEJPVTZbUXFZL2llMXVscjBPdmouUE01X0pnW3ZCbUZiZ0dAX2NtJXBmUS9SNXNgfCgidyZxXk9FJiFpeEVpIU1o'@;
put 'LGk8eHBjXXlmcmRoL0s5PChkTU1pOXRDUmYpS3oqM1AyUXhhOzl6ZXE5IlthKV9ZeGxuQ2hJT3BtTzVrcjs4InE4eCQ5dDB3diFrRz1AND1PT1pDXUI9b2F7L3tsZCFvcltxMkM6elU+VE03SC4ubWQ0SkY+ajlHcms+K2E1eURlMUJ7YUIrWiY6ISs5XmhfSUdrXkNhazp8Z2RMWStHbF5iekRC'@;
put 'fj0sX0BPZnQ0QSk/QExGbUsofGI7dWA7Z3tEd3dHUT9mPlkldmNEc1ovTCQxIUp+NjNtZUJFPClKITdMP3N6fXpFUG0rPCR3eCUuUltLKXcsTEkxbVUjI3FbJW9RY0xFUE9xRTFHXn5ta2BOW3BAREppVmZNRHdoWGdURTw+JFJbPUhdLmdQT3suUTZqa3RhWW5lQXEoIjhtYjAxay9LPTg6OTks'@;
put 'PHYsWCwqM2xQSFZ2UWtyI1o2QlI/YCJya21NbiRGKVdzVlgxdjF5VHwsY110Szc3ayZicCYiP3c4eS5zPWMkSU4hemNROVc+UjMkSSg4XmBxeHBKVz8yKXheekdUejM6KEAoR0ZGKyN6TjRnX3J0KFNVN3VNZDx4Ij8mUU1OPmopYkEmUmU3WFlVLjZ0ZjArLGNJK0x3WTdLY3tqTEtbTzw9cXhU'@;
put 'OHJjYWZJYGo4PCJ8SX5bdHw/ITFDSHJ0O0pXKkJES2lxQWh+KSIhaENvVTh0OilYYUBwLnRoLmlgdjtGO1FycyQxeyZnejh9bWJHRmZobSlNOmcjd21nckp4KDl1JktDOyMwXWt9QE1SXlViO0k7cGZRNWNmfEM+IXxCaWg4RjNbSThqImAhQUNwYGk5OCpYZTcyNCNTd0tzN1FldE5EQy9RaF54'@;
put 'eXNaekQ5KV9mezhrcnNtR2ZsaC4qKkdzYGMlfkV2fHdlPWEpeDRMfmU/aixuJV5iIS48cjpvJG1LNGdAaDhaRyVMWCt7eSxFWiQqUHlKQjk7Uz5ZKUtgNjVYVigodCJLYGk1OElMejl6OSFXNWZ5XWB2O3F6dzIzS2ZYS3dSUEl+amk7PC9PSSxScXF7aWYsfXhdTml8ZX55TUxMc1s4S25wXmZ3'@;
put 'RyQ4US9hV2Z2Kig2ZXs5JXFjezZEfnRkfXE2T3c1KSRRV3c7PntYKldxeCIyajF3cGF3IlUwOnVqWTomYjUpYFhOe3Ukd2R8ZzhXUX1xd3xNSEsxQjQsRGowMyoqWG9yZDJ6d2BbVyo2QUwvSUQwc3xsbHcsflY+UmVxIzV4a0I7JXw9ZEkqbHNTLjdeUUVgeSNhbUplZT04YyxqZTw4bCwuNGUp'@;
put 'eTorP2l5RSEralBnZytmbWFteDFNazg8QiwrSXFWbmBCOj0hI1s4Ji9TYkRNN2pNazxMV2ojVkNmUDhPe3shaGZYJSs6JEVFdDpDfjNoUDlFbGg2aGtwbDVmYjFAdVNvS3FRKFl4JGdBeU9fYDExWTIkdntlalNlSUNWTmNbUGtBLGJrKE00fDdWRzMpRjMrO3oya09oX1YsfCUoTGk1WissIUIj'@;
put 'RE1MTGEpW3hoP2hdMGNnbC9ie1UqZ3tadj9uL1hyIVYoaHJlPlUoMjo5RWRjLFgobktgQVs1NkwsRHgwRGZoZTFdc2pgR1Jna2VbflgqRGpXJF1UaGRDU15AVDJNYVJAYEtmVGVaZUo4SiJaWCQ9cDkvPlthVUQ/d3ZwcTkwMng0Y1EiSWs3RUx4ZDhFeiFlQSx+N1NMejVjKkJlc0VbdWYjLm9L'@;
put 'OXUmbG0rdUw9XSs0PTJKZVo7NCwqeUYmKV54dlZman1AQ25sWWhZZU1xamlLM3loblFJQ0YyJX1OUk1nY3BJWCNpcXNPNkVjRXN1WzNwNz1pcGdXYyFMW20yWixeeFEvVzk4Jk4xPHchXSFnTixCM2NgYSR+MDA8Mi4/eDxtRFp0YU94I09eeUVGcjI+eXhrNmgsbSk2M1gvfGpKIU55X1AvZVVC'@;
put 'WFBiPzFKYjEuXU90fUhwN3xPQ1EvRWpUIVp0NCEuWlEkIVl4KlZnKlIsTXVkdUxuMmI6e100fDopVmozOmw+bFkxLFJ1bzJ5cT0sYFYmWEZzb0NoN3YhRzFBTzQlMUAkdSlERHE9eUJGQ1pWbmlzdjZaWGpAUjw5ZlkkWkVMWTdhXU5obWM+MFAhY2M+Mkprcm9ONHpEVCphXVlXXT1sbWdfO1NR'@;
put 'OkU0JXNANiZ6Zz9VSn5HOClLZWhzblAuWXZ9I31ZZG92U29daCEwVS46biVkMjIzVWkwYHNAbFJdMVVPZjFhbHdEbm9AZSg3c2ZnU04kLjtwKlpUQnI3Njo3S2IoPFpMXk1hayVQTzdFVEdOOkh1NHxVMi4jSklTT2ZyZj1ibCVPUVovYEoqTWpYbXJhMVUxKDgub0VoVGpUUyVAW29WTWNLOFEl'@;
put 'NyJxfUIyVjxRZH1nYz9Gcj87aENwRFB7V2ApOmZAST9MQ2FbVGkrYX1YSG5gfSVRKUs3WFhPV3VreUM6OClLZkVnOUBfdWZ+MT1Dd2tYYVJqRWhzWEU6TDg8V1MxVX4iPVhIbmBpIiFYSUlROkslcz1tPmpsR15uKl5RdXhxfFM1R1IuLmZhLCJEPFY1TUNTS1l+QlFha3xIUG5KYjJ9bmBoc00q'@;
put 'KiNtcldMUithfFk8VShBZmBAaSM5ZiU0OkQuLEZIVU8pbT9HXylZJTgoWTVEVjt5PENnK1c5OihtdUxmTSFHRFI2aCQmIWVWJDBobTYxcXEpNEpGfl1CNmRKXWJffDB+STZwMSs7fmh4RT99cSRWdzFIJFg3am9IXmU+OXpmSlI6QmkmJldTKDlLcmZ4MT9vRjA2bFVPclRUM3U4T1haYU5zPTZn'@;
put 'Y2R5an5MTERqcjVJPFJ3NVYkXW1DRkZLSi8saCQ0eGRgOz4sbCk0bXlfeH5BPk5KViYwd0JfOyI7Li9DKCJsLnRFQ1MqSnd4LipZQXk6KkA/RDoseHZAfW46bVhIUlp+dzRte1M9WX1uRz9Xb3JxdW5JeWZ1Y2FsVUMvWWdQYlhlPTpXMkNJc2xzMWl2OWJUaCo2Yl1zL1dNcXNCakc0RzNiSVh1'@;
put 'OnlqJlM7PXQ2OFM4TC9tXUx6XVZpVGlKKXZ0PXwzWF1pSHBAfm4+YT0uK1AhZ0pLcit8Rik5P3AqeD06YHFkUzloZF4kfix3b0FwZzsicFouPiVGTVBaJVBEV0E6QXtFN1M9WHxnZHg+ajxWLDJjM15hYko4eEBUWiE7Q0w3Lik9X0IoSl5yJlJJVFVsZ2ZAOTFiVFRwSmRUPWZQLH5CWzhSPVJ8'@;
put 'Uz13dTpqVTFVYTB2KyUqNj84Zz5VKipWb0hrSnAzRU9fNl1Ne0RSR2JOZTVDR3xLKykrUF4uZFVwQUA7fC5UPVgoXVs1LGJRZldVbGpgTGQ7Sj4uTFRfIktUOmdNL2NZQjJsSE85PTNnfWF4L11qOGlEcnMkLD9LTmYzXzNnKW9Wdi8iamVCXUVsW0g1KkdzKUg0Z2l2RGw5SVBrKU9paH4sY0xu'@;
put 'dUE4U0JEbTcoJF5ROGY2ZGk9LlleRX0jcXAudzVSX15jdVpQdytXfVk2VWcoaHFrOnZbLyZQY191RUxLWWExNyVlcEt2ZmpHbDhyJGBKKlcwWk9eKTZ5V3IkcGJqRXk7RiRbaXY8XThIbjU2RHtVLmNoSjw1JT40eDkhIzdHZjRvOltUYFs3Sn19QzZYcndDRjlgNTZpfV1IV19uWyFOZylHUjhh'@;
put 'QCopJk1zc2JRZHQ/RiNST2djZT9pOltyeHt0QFJDOG1nbWxjOnpOIjBUdSYqVmFabWU6cyEreHpKIW5zISN1Xys3L1Iqfl5tPi8/aD59Sk05T0g5VkNLVTBkWjs5TUtFXTdRTDwzJjRNTU5jZDgoeCw9ciRFO2YoWGBmX0YjS1FKJFZJV148d1YoJUI+WXZeW0FvaithcjwiVHhKXWdKb28vd3Ul'@;
put 'WV9pO0pIS3loXkppVSkoMl53VCFkW0tRWDFDS1RfeVhmfDklfUooWC9yOCxwNShKOV0we2pwbEN6dmkmdEU/NHlUXlRuP1hyJktodUdgflZsRiRDTEB0cU4hTj0mW05ifmpwOVU8e0M2LFMqUVcie1J3UytNXjAsNX5ARXtgcWRxdUNoRF8oUnU+MGlRN003MlFdbEB3YGVCRT9SWFsxbCFwYEdY'@;
put 'Z3xdMGxRbmJLKGVYX3kkUHM7QEVrO01oW3I8ZGlPO1lXIypZZUZTW3ViSFBrKSJpbj5ZSXF2Oig1OFRELDpXTXdfenIyeURTNTx8bXRSMjQ4PGFBNFpgT1hJSHJAcUJtcy5QeiE/VUBsekNYNU1fLHBSfVBPfWlyRSZvcEZ1RHR7cFs4S1FKTSlzYEtkY2pSNj49PUgwb0IxZW13RlI6fW9rVURo'@;
put 'NHpPWjosOjJwQCgyIVdXMyR4bnZ0YGl5NXxTK2hiZzQkSCUyPjdYaHZsPlkrdyJiJGJXbmtbRVFQeCJfdH55bjwzK1EiTi9dUE5feEdEa1RKemJbKD1pMndTPDJtbzhuXiFucExLM3k2QGxdQE1OcWhjSjx5bGJGUEoqMHZIX1hEVixsUThHVXVhWmArdkZHNkt5IW50U1Y9TFEkRUZnbishW2Yv'@;
put 'd3xAcml9SFRPUCsiRyJVLEpUPXRCI1sqfEZ5QEo+a3FoaihaPFZdWmtdX0RWWCR4clBJKHp9KCosdHtEOz5SMXtPaFldQlUqM2NXXTtvNWI6TmxfLypPczshZFRkQkd7ezJCUVl7LzhWUUN8SWAoLDA/R180KXg1L2labj9eJGVzO3VTP3xnIXN7RyRBekV5Nz4va0VFUSFvN0UkTyNFRGVjantL'@;
put 'al1md2tLXjs/KSUiVWo5WmhxRC8iPlI+bTUlJi9GdHsre2dEOHJWJWt6dipEaSwoSHRNditPdSJHZj8rL0RUKEQ3XjtiVVhNV3ZyfCs5Wis2bngrYnxTMENrQU42WmQrXzgvcl9TISMucTRLU3dfTT1hSUx3LypiQnhTMUhxNjpxRD84YWo3IWAvWXkleFlQZDl8VkE6eSQuQ1tVOixvfCpRMGJ1'@;
put 'eWFuND1HbEd6Tj8xSXY7SnpqSzl3X2RlSjxrajImKzNUWSg2UVdyUjpEfmxOLH5ROFM1e1EidzxsLjV3NF9qSFRzeTA3IlkqKnlgRWR3SDc3MnQld1lVfjh8Uj9TOGM0YkQydDBjdWlRLFtEMShfQn1SRW4iXzU7TEMxYykyXXtdKHxBNF1bK0xQeEl5dVd8WCFPWmBseW4hRFk+Y147Kk11QWhe'@;
put 'eUFBTCVJVTN+QkBCbDdBek0pY0QxcUtMSlJXL0dmaDguQyxDXkAjcitXJGNRK05FQkdFM3d3d2JJZ2RvdHYuPyJye0smOV93ZHRVSCs/WGlld29RImNQIzErJnw0UW8zTGp6d3UjYX1qZj94UTw3eiZHQFZ7Y2N4ZDtgdFE7PUVQJjxQQn0kW0FtbHolbERQU2h+NyNdYy80VnovS2lESVo+cT0y'@;
put 'c0csSkFLPzNnMkZFXUJNYVpvVzsrN3ZwNDdNalFaN0F4Z0R5OzVzU2FYZTxAa31AK2MvaTM4IUxEWFdrJHlha05fRGMxTEZPdltvNE8vRDUoS01IdVE7PUVQJl46KiUzNC9zJWdeO257OFtoXWcjTjdTIXxKL3EiezBka19SQE99ZWZ1Q3R7SnwvbElySX1Hei5nPWFReTdNU3dQP2lQaitTS2ZF'@;
put 'VmZURzZ4Wyh8WHBgWmVXYSExUVdRZV5IKU1JUXZLb2k/cHMod2tLQWJJO1YxY2Z4QVlQSEQ/VUZFbmM4PHJyeUlNe1guO3FgbVNtaCRNfTtqXT9rSV1fRlIoYko5bF47UVZqeTBuKFhUd0xIPDJvdT0pW0NHKUdiTy92ciUiYnw+RmspNSZMTGpYZkk9aTY+ZUZCSlhgP187T3FhNyJpeTcxO3Mm'@;
put 'RkdAN2BFe0ZZYFdLZTxUcEQ3fEVNfXUpJVMscnxzcjxCcWB1OUV+ZDQ4RUxSJHdNRyhHeiE2W00mSHUjdjUhcG9aKWBbdnU0L2RmKyM4X0Z7fmE7MEM/Unl+ZStOWWUsaTEkXkh0e3xbSGkzNk14IXwhYDNMS2lie357KC8seSFzOEheRSRKXzRIfWdWRUhDOCZobTZBdldsdntCdjdtI3trbiFl'@;
put 'PU9PNUNuRVhXbWVKdHtPeFgvXl9kOmRvMjozdkM/XW9bZFIsJDY3bCthYCR6OV1qUWI9LyQ5SnxjL2RzLCZxYkhPSSxbVkwqMzw6TC4lY2RnUS8ycEFgb2NjZXN7YDV4bE05eEdsI31IR3ZYSkd6dW4hWVR1fX0lUnlbZ1VnS21ESlF3eEtsZzFoOjBPP1dxNDQkLGwpV2M4OkVwfE9YQnxKXjtX'@;
put 'elA1N0JBZGIqQD1hQkRDXzsqS2owXU5tS2R8ZHMkbjFJcnlYM3shNmh3Rm9pOCp4X0Q0bWAuaWhzc2xiMWVzOWdBMHtARygySUQ2UyNMNWB6Vy51Jl1UZFkvSndiaXUyX2ZrbWdhNGdBQykxPl1KSEN9LiosKU0id3hRP1cuUSYsV0VNP309VDozPG4xWEZlRDApOWtHXz1aZ0EzenhkVlBTYSRF'@;
put 'Zm5AaCxCQ3xFSDF6YVMiRDcqP2dafDEkJFdKZUtWY18lbVlMN1Y7b05hUWlVL3dPS0JLP0ZXY0ImeERodygwMFBZLzd9SXJyI3J3W0pnfmB5TCF1VF5sfGFZVTB1cCRnY3N2OkBoRmN6XWdaPilZMmZ5XmIyX1BfS0Y4Wm59ck82QmpqL2JiPW92RjNLT3pyWnwqUUIvbnRpO0t0cDdgcFRpJX14'@;
put 'WGh6OV5+Vzl8VXc+VChaYmgwQF9aeEZCMGxzSCY0S3BYKUc8dShVbjRwYmBgK1AiYjxHfSltNDVVbGBDXTMsaEtvT3IkcHNKNEd8dHU2aUB1MiozYzF0fUxFKWZadTt1KjIhcGBnVmNMVlNfZWAuOXZjXkd0a2tDWE9WaUR2P1J1NiFCelB7R3RONXRJdT84aDV4di9lUXFie3tkaW53JktMLGwo'@;
put 'JjZmeVs1JXFEfE5tJEwwfUpBdS9xKnskI0IuXy5lJGcoU3hKLyxaSjhpVGNpbm40OD84dEErNSZVL1JfZWUyaEhZKD1oYSxPXUNDczBFfV1+MlpRUypzRWtBbHxZbk4uQ2lJQ3B8USNydlIjbVRHKlVrXzR9L2BCfDRmTEFSKVt6XjVndH5RV1tqMz47M2Zac3BZUUtAZVBHQ3pad05pc2NNL05z'@;
put 'UU1pd3ByVFtlfn59Tzo0SmRkOXlVfFp3NHZ0Yj1kc1hrPEY7Mk9xV3YzV0pSJDRrSWQhKmlpZ24+Sk9ISE0/JFZHWExFKSYhTU9HTT5kKSt1XnhJKWhLIUU0ey5MOH0sSmg0TDVsTnhubjk3fTVUQWZhUiRdIjRuZmwxajxHUWd4L241aGRHPG9zP0EybU9vRUowY1AuIk5DQiE0IUZ4Ojkydk59'@;
put 'QnIlVnl3MWgydDxvIS8zbjZPU0NyKUxiUipzZ2NIW0JbdnM/Q1kobnVQN1NyQmhIYVlCeGwjKFdkMCtHeWE/fWdDUTVBKjVfN25NZkxMMXIyOVUyXjtMQEI8Z0JwYm5HRGwwe3pmVUV9XSw/RygmWm9SZ31mUklUWz0lX3RZd2dEVjhOcz9XYjAjNCFFRXU0dmlZWXk0XjlxU191RD9HakwqNFZt'@;
put 'c110WH12QlJ1WnxUK31RTXVpa0VSX254QGF8KlFTRy9uKFh4ZXtHc2oyaHFBcSVxL1pkLzkwJV5YQyZFLlBacCwuW2lLbWB4cD93e3pXcl9oO3VgQ2NmVCo2fVUhMFpEdVQ/ZD53Wl9mQkV5X2lMYWFXSDd9UHgkKUgsaTNXajRfRjxdS3A4RGZIKSM0aHN8dUM/e14qT0l7c2VHLlVgL1hCbCJC'@;
put 'dVgzaEc5JXBiLEg4ejFJZTl3JnEpV21yKCgya11STX52OGpwI3s0aTw7bT9jJnhyYTNEKVB8KHJyXik/KWNVTjluUz91MVZaVEUwdWYkN2xnak16bTpKREZ1fChyUVtgMDZxIipbeFIkQEcodHM1aGVLQFVNeEp3eGc5KmdVUEhNdnU4VlpeSSF2XTltMXNWYCRkWnNwZVJHOn5nKVkiLCVMZXxT'@;
put 'Wn5XOGh8VEA0eFIxKn0vM3ckYTpraHlNUHR7bmZNc1VIPmp5IjNocDokZC8qOTI+QyExRlZSN15xMmVtZTdZZ2g2d2RWb3g8X0xBUGhtJS4mTTN1Zit1JUtlPjdWcnhWOUBhd1NkdCEpMls4JjVKeTR2RUEreDR+QShfMT8peiklKmpMJnFJX0JjPipSbTxqRi5AfGJgMzVWUmlEQFhyRGlrU1BF'@;
put 'ZX55biwzd0RwYzExMDgkR3t4OkZNTjlGIXFsQiEzRjNWJXc4PXojTlttWHJycUJ7R0BNOFlVJEpFV0ZTOm9PNH13dyx5Pz9veUIzX3hTejh5d2dIfjwlV15zUjtmI3xRMEd7TSYldE11TDxwLjVMPDRKUFdKSEpEcERuTVJ0YkNucFAzeDcwJXJAa2V9RF9dWHJTPUpefUJXbntfaGsxNzRRK2Rd'@;
put 'WERzWUMhb0QrWGE4ZVN0cGJLUGZaPikkZ2VecEkxPz5YQWgsdFhsez43fSRtSi48SEhIQztlXlovJUVfLjo4SkU3ZUA0LFkuYjBpYnBXdSZncSN0UCFheCkhUCJeb2M+VXVDcU01V3xQNEdedmtOMlBqbEJiSndSWm9sMihIP29ZRCY9TC9FJVtsV21xOHlJIjskPS5pVXs2OjFpM2guODgldjl4'@;
put 'Ky96LFtTZ0wpS1YsQXFVOCtyVEIrWFZVQ3ppZFhAY3VdT0JfbjNJOlh5SFBBK2U6aW0oV3MmaVA/VWlgREgqRCRPTWA6LF5BK35qMkJ+MGdrPjJmUjwhdl0wWmZPWFVpKiFUcCwwXy9hP3NFPCNBKmArNmwidm4uRlVeRlQhSWUuK2dySU59RmRlVDVvQiZLRWxLQyxoS0tneGNkPW8sXkRsPD01'@;
put 'MF1wRDoxW0lKNWxGM3xaR30uRGkqRjh3PVYjJTJXajdsIigreUhxTG9+WF46MzxMRyZzb29bdipNRWciKjYmb3tNcjhFaWo5RDRyXlBgQmM9Pj1qN0YyUi5ndzpLbEFUMjNbfntHUncoZkhuVFpyWEpxeW5ISnN2QlhiIjREP3lDOHJ7R2h4QGBGLlR6O01VYilMYHB3KkhmI0wpcFpMcHBIOklp'@;
put 'RVIrSGkubiUoWzEwU1FyOnk+PVI7MD4qPmFBaEJNLCpZcDdleSl4eEI4YTYmcXM+OzB6R3dyaDFLfkBDPD84bC9dV19QPk5sZDlCX1U8d3ZmbH4oYW1bVyJyQiwmW0hSO3pfMm4lY21iVVhkMEF8XVIuJCRiQUFTVGIhY2dEU1MyN1dBNEcjST9eL2UuOC8qT2dhfGxLa3ImRyU/cShWNGZSR25e'@;
put 'VTBEOXlqOlJMMElVeT8yV1NnUGFFXmEqQjdzTX5+T29dQGQvSV8oUGp4N0dEZzNCXn1kQWx6OWZTdmtzcHNlfDxQNyY5YiQxeDR8SUdlSCVseFBTXjsjdTQmdDFNWDlVNmdieVM0KmRnNi94e1VvaDMiZFhjO0h7RUQ8Qm0+OF9GKkRJWzhVdXgqdyFWXkxmVmR0Rjt3RU44UFBrSWYxVVQxelRV'@;
put 'KG4wIjh1K2QuZSwrLDxCdH4/UFRHJHdXST8uQDt8bCpVeFB8WHJpaWtYQl1EcVAvVEdlSStuVjVJTVFJcDdgTmRWV1QmKFYvQy80XlYvQy97KFpyU3drMEs8Rk1FSFpxYDI5UixePnp+Qi5OOSxnLGNFfitZYCxeOG1ILlh1KUROJCFCPnk5S0VabWBTXTl2aSlHc0FSX1toUVs1fG9RMnF5Mklz'@;
put 'SWxEMl9IKlJpViQvSG5KRD9RTEJVNDxQM0Z5X20iNWMqU2t7U31feXhMc2x7WTQscWdPSEc8OmYzfFVia1ZbMGxlLy5rNG9ROkhkT2gjeD05dzFxVDxYT2wiOHxkOVttXShNLHF9VDlvQDF3YSR4R2U0cVhuJjI5TjU0fTpFdGxyZ2s0Ln1fOGlPcTFNMVleSHl8TlZyUkF7aTlMfWMuZXliSSQ0'@;
put 'R0s4VHRfYkYzfXkhJixwe285b3spblV0aVdFan55XT55R29qQSslPS9pKSJyNlB8clNSLyozZyptcmtXfUg+XU5rbCVjbVgvUSMoU3hiVGg5QW86ZFJnYl54S0pie1s5dENlaz1lZEYhMi8vK3xfYzNkSVI3V1J5djhZV359N2BpVmoleTg7YCMzRjQuVERnQ0pLdnVOW0EpcVd1cnJOIVEpNDw5'@;
put 'MWBsYSE7aE88Iix3UE5tcil1N1BYVFVJazU3cS9WZGxLQWFGRlhDWUJLQCMoZEtTIW5UcFN6ZHBlS0k9O3QpenclQGh9OH04LD4xNTBxNFIoVzt0KyY7bCs3ZSVDY3xRfEZaIkczfjA6cUIjeE5hV2FFd05XJnhoeGREW2NHOkxuOHw1a1BhMWhdRU12ajJiLm1OVCN6PChnKzU9bXxsIllGenRo'@;
put 'W0lxLD4qMDRecjVBSW9OODlePXI3X2FjZFIyInpIVEVXL2J7ZkwuLDBoeDlrVU5bXXNiaiQyV1MqTXlbeTB1TlJRVmVlQ2E2fmUlcWEhLmVwYmY9MFJ9K2lYSC8uX3I+Uk0leUY1QFo0MEUkc2tmL0s0RzVONFRwb003RGFHT0F1c0klUUFRP19aKERsZmY9fDQwP0NTc25Oaz1JW009OCNrRy9t'@;
put 'ImIxPCJXKSlLTGBgK0x9O2pDbzVKdWNVQzpte3olRnAyNEQlTGNfWmw6OEw5cEdzPyY/JExoWyIkX3wqX1UrbE56KDBMP0VlaFBebVpCWG0oTlR8UkhFIzs/PDVZWl5QIi8hOmtpTVFPVCE1ayl2N1cjY31yL29EVXY/TiFHSDhxIT5WaTc4M0tmI3xAcy91PTpvM31JTylEO0p7UT0vV3pRZz9q'@;
put 'PkNWejd9aDgodUlpdz1DXl9uLldrMEF1YjsvUmBPYCNDLkwiLlVWY2xKMjk8V0tKN0VSLy5YQFdHVTFXeFklMV8lUWN4ITE3UjFEMnI0QzFlbT17WHJvOFYveDQzRi9lPzBBITEzI2tVbldJVSlINHNDSHg4Sk4pLmRxJEReY19jb0VzckosVXFvcHZAQ3ZFbU05OU44MSVAVDVZcEJydVg3d2N4'@;
put 'bEJ+ZzxpKH1YNFchXm1qalhUWXl1cntSTVgoZTFAYHo0Vz5pWHN8L05teUFDKz9XM2xEXzpqRDVxKl9lRC5KfTt6JDsvT2RBe3NpVCF6VncwTTwsVWpxZUdzZVpYM3FEXl09ViZWWkd6S2NPLndCJEZOXyQpX3d8b1RSO2BwUy95X20mSi5FKDU0TXlfRCF7fGEvbUkifE1ffmQpY0V7ailrMFQw'@;
put 'JmtEXlpBekZ4LGBxIkR6X0tGQ3YxaT1GfChjcDJlYVZHZShBUFdWMEB1RFIka21yL2czSWgjRCQ1XTg+Ukc2Qyt3fTk2LFNqJnN8WDU1b1o8SHBBaXNjTWNZaCNbaWB8YyhkPXRVSihUcTI+Pjt6fElZL0IwIn4vMSEvbytGeWR7dWZ+dVdaYUxISSY1d3toSG1yKiQqIWVAMjU1d3goXyhLV2Q+'@;
put 'NHMvTT9oZTI0Mz94eXc4ZEhRV0hyblRgYztYYjBAYD9gQUgpW3F5eDJwQTNCY1NyZGd6KVsuImNlPSg8SGJzNjRaK3hYWF5FUnxSN3RsIXBYdzRtWSwoYyFieDYrKX1mTllPTHd1X28lfGxTRURtIldkPEA1WUouaGF5QCkhS1o7RUd8ITswYWk9LEdsRmIydiNdOSV8KG5ELnpSSH1DRktzcG0x'@;
put 'JiU7WGZjMjciPmVEe3xVdShYK1RyQmxvUlZmUWF+ZnsoJjcyPylUS3AvXnkxT2l0V2ZPKGQ5QEprZUM4QEpLb01yMWJ5aXFbbEZfK0ojZUtPV3doRjF9QmhON3BxMTY3cS9VPmdefTxVbGhObk5KRnlOMHU7VSIjT2lVVnEiZkdQdTthOEg1ejtQJlpYZUdDa1FlZW02cVllMH5OX1lWcEl+UGMh'@;
put 'T2lgUV9BMVtKbml+SCFhY01HZ0R2WChLTUNleC9pfHBMVVlgY3pIOH5IT25ILl9zJC47eio+fT94cnZKczlIPzh2MSUxWmxmWixHQilOZkVhdkRfTV1Oej9XXjZ4P29WUiN3Wkx0TiUsQTZ2RDYoYzRzTSE6UFBVMHY0LFRFSG93eSsrT0xIY1I2WXwiYFg4SEFZMm4zUkM2X1ElekowNFkiMkxI'@;
put 'fkMjdURpNXwlKDssUFllNGNnIT99clVsMC5VQTolailsMTl7OzlgLjhzIVJ3QCY/I1AqW2MofEw2R21ge3xUdHNCRjg7cXlEZFVtJVRSVmVSL0kiWnk4JjpqJX1pRW53dHVLdEwqUUZKITl2JEshNXZNTG9pKkVYSUJOSXltfHVINSMqPllgNT5vaVNTQUFBemJDQXc0VkJ4RElIIlEsMUN1Sz12'@;
put 'RkBBdEI6P1JEMnoxTiNPVWpoeC5MQUFBQUFBQUFBQUFBVFgoNCI5cHdhTi4lXmZocFglXWhtY0FJQzFEaU1IQ2oiNzQzY2EqOm9pRWdPdD1hIixLZjU7KjhYJCxNVV8sS29rQ0tSSlA+TGtuJHBfe1ttUnVHNk9AcHEjc1hRPiMoK3NKQGxCdFR0PG5gakg9djZDc11EbzckXUdzP0x9bUpOM2Bo'@;
put 'bklwd01YfGRXcDlXUEwyMFpwPi4xTkM4LGZpWW4oM3Q1RmBDfF0yZ2IuaD5gM0AuXiMuTl4jWE01VDg3b11GVWlFWDRFPHppQEgsflhWfi5aKH5jZUJuTWRUP1Qwd1ZObzpIMDQ4Mn42Qno6JDE8QGJne3c3LEJCQEQjMGY3Lmw3bmZtJEJyWHdDN148XjNCTlpSXjtxSi5bP2RrSShRT3RXZ1No'@;
put 'SndhLzRWQFc+T2ZVUW94XjdkPXlkWjV7ZT4pO3cjPjptbUtyYngyek1Hd2VhbjJWOmtVRFlgYG1hKloxVE0pNS5YKV9TKV04azgwWX1waDs0Yjp+NlRFMVU0U3lnMntIYSQrPn1RR3lrS2FnU3BrcGkpVUZSdzQjSkJoRFZSbH0xdyNhT3B5Y3BNeU1sOCs/bS5eLnh6dU0yS3o+e2RxKWFyTmIx'@;
put 'c0lPOHEpaV9CQilLI1hUVEw3c3VeRFYxSVlKfEJNblpHNFVqXil8eV97XWR6QERKK3V4QWs1clM8b1RoJEJxIn48MyEqen5dZFp3ODdVYFFEI3g0Qkw4MGRCTHNXZjBATkQjbUhNV0pzcD1qUHV0d3w/T1lmJklodjl0P1s8azM7eGlvaj4uT0RyXitsaEJYUzY+OU4jU29HOzglemhBO2FaOCJS'@;
put 'dF06TmxwNyYsJHZbTmo+UjJKPShLYDhkP2V5e0YyU1IrU1gyVT0vZjJdaT4yWStqaFIvOndUVlJydkhFK0g9YDx2ZTFiYC8zRlUpRFZ2N2p8RnpWRmREZy5BfjsoTFoqaEh6Umh+eTtXVVRaJj1iNyV8KyZjYH5ZU354dkFOSyNFW1RZPzlpPC9PbG5UPHdAIVo9QE9lTSJ8X0JAQ00zNSp5bCpN'@;
put 'eV5kQjxSSi9UNl9NeE90cTRiP0pZR0dTLnhLRypSenJ7Xzh6UUYiU2taUUIqX1pyYXVYfT4ofH0rZCZ0T0sheT0zUX53dUhTM0FiLEZ6WTg5U2BGXlRYdm1dJloxdH1aejhERUgqdHBENj0jXmNaV3o+UGErNFtbVksmaCk2MztaKHA5T098RFtnbGduOXsyVTlMRVlLNGR3NUBMb0cybUc9bkpo'@;
put 'QCRVWWpsIWZqeUZoLFg+IWRNfSZCODh2U1FkKjspYzNPLFNZZnE9O0QrKSh4QTJwbTVRb09CTW01bzJHXV9zYGkzZjkpZEM7NWUqSChwWlA1Q05lS1clfEM4RiZYKFd2Tis0WUY4O0laLDlTdkxGI0V4dSI+OHF0NGdKd0dgP0x5ZmAiMGNpPHkkZVZGenUpZS84U0pfZU9CVlg2JXdMdjEveGdW'@;
put 'SEJOTlRqN2giJX1LJiVkaS4mYWNOVWRPfHNUcFRlVzp1cDM8RX1VNzNnQE0oZ0NTb2F4aD9hQGhVaH53Tnc6cj1ZeElMIVZAdEs1Szx9YllVXUVebE1md24oJVA4NTxaNH0ufVFOODQwSUhSPlhSe2Q3dHFjdVJKKiU+dTNqfClYb1hnbFh4TzxBUTFaOE4kTlk0UUReJFVRJHQjWCtvPUpITFhl'@;
put 'U0FQTTRwY2l9PXxkeGx9WEslW05pR0d8RjhuWkM1LixlbmpGai9gLmswKyV+L25AUD1gQlI6dCRjNF1XZ3w5In5aTlFTKXVYSWtTSG0qX1FFX3VnNH0iPXM4KjxGQXA8IUkzfCIvcFNXTldzLmpSaVR4YzEoSjRwbGgvVkA/TF49TUlGXzRVfWUkaGIzRUM+ITglNjFfTCZPRTEvU14odCgqNmRS'@;
put 'QlBvLyZ7NV0oc19iQT52XTUvXm00aXZ4W3tIKjRVayMkQC95YUJieD1tcHw1KHhlRDV1Mm9hOXsqMjsqclpMfiUxXnRMVFpWLF4+QkN3QiJLPDN7QGxvYHFTJjwoXnhjajZNWj94VmJTajozSjhec0UkNntOR0AoLn1bX2FdQkd6QF5YfWIsWztKPEgoWlN2Zyg5SFpDITg0WXdEPk9bc1UwUVhn'@;
put 'JFVZY35jSGUvWFBUTnkpMSYmZURGdjRIUXdUe353SGYqNk4wYUNdNHQ2cmNbe1EjK3FqblA0MSliMVN2Nzt3fX02UTh6MEd2Um44NnFeXiwmXiFAO2x6SDhRXmQ9QUd6Kj9pe3g7IUt0ZFtTQiZmM11fak5QMHgyJUJlRUxpZE5KPHE+aWc2UDBlejx2elFCNFQ6RWlsdEBRSGNxZ3QrIUY8eEhj'@;
put 'fTZoQ0BMTUwkYDNqKDN2X3NwaFtQY0g3cFViXWMhd0MhdHArKWhsYGFkNX4pPXI1d3pxR0BXcE86QmRucSowalMvQi56eHVAW0IkXXBYKztdIjQlN09PZzFjeVpmfE5aMENVWSk6VkomfSJfZ2s8Tm80b2lacTNvfE9bdXk8Q25WbFAlXm1dO1RSIyo2S3xlUiYrfTtIYUovO3VWMEBpPGkrSSpD'@;
put 'WjBLXWc9WE1jQWBMbmMhXzloL0dyPkU+R343RWskdn08L3E0UG1mbyhqREpocVMhWyloRDZbZWl8ITZQdTlMUyFJOS9laj1WalM+W2dGLDxRJCpkMTFhak40anU1M3ZfKzBXZmJ9KyZyfEI0W3FCNlpkZDBEdyhMc0EjJE1KODBIcDFOZ2VYVlMuQ0w+KWtSLFRnLkNZNCp1WnlCXXpVZjNYNnBU'@;
put 'TlgjQSNec3xPSmxeT2NEYFdsTEpiJEhXYGA3Pn1vbVs9QTAoW2RlNDpddjRMUT4xUVE2UGV4N2Mlbkd0bmJafnIpZnxyY2pmKTRGbCU+cV9vKV0xQDpENV0rR048X0ZPT2FdNkl6XkBIdX46SWY/Pmo9Oj5lck95ejFBaGRsaVdUYkdXdnczK1IuV0UlYltIa3FQLFRnUCFTekx5KWlYSzhsYD9G'@;
put 'YSoyVGBxZj1yL2F5ajA/bSEuTjNSNVZ2aSFJWlEyUl83NHttUDlwN2djdUx+NF5oWEUwa1NQSVlCZUlvQFNhQGkqcHJPaHxNMC5MODVSIV9jP0N+NTZqayYyYmFdRClEa2dFOTZsJStWNTdIciw4Ik0rSXssWVI0Rm9hPnZse2p7YyJ+fHR6dl9qb3R1WXtKSioxQ3hGVD4hKURydipqbCVaMnVs'@;
put 'a1YsTV1+ZlZoZ1NnME8rUVF2KjhjPE8lOT5uRzJkMSg3dVtfSHlJbzJEaT9BcHJJMHYzZGJ0VCN9ciM4ZkkzcEcrLCxgbnV7TVtFOGhEb2dEUDJrczpKaSZVJF8sX2BNZlpoPlQ9S0xhR3JvLG9iM2w2MlFOJW9TWiVhPDtYPn5LWlJRWmcxUGBDMjJFciUsPSZvSThka35EPE85Wkd0S0RsbFlw'@;
put 'Pnh5SzAlWHhoX1lzZXtoJTheJkw+R2hwelEmeSg3W0R1RV1UJWxGfW0/MzgzRmIlIVg3aEQsWU5DYHRneWRzfj5lcEJNXUloKDZ7cDA1fENUI0deSUs0OnR4bnxGT0kkKnQoLiU2VmZzQGcjYV1Vb1gpdFEqUDo6Ml0xRkclTXV8PFZldSJ5Y1pwelN2Qk86MXthO0k0RDp8fFRFPDlhcismakBC'@;
put 'JVdjKW8qdnFXd2kpKVA5JkQwfkAjOFo0d0tBMEQxUC5xWERebkl0PFklXitUNFUme21kS2RrV3VkdzF9Ik1QckR2dDlHaV1fej13Sy5vTWFbYGdVKUJ9NUFFSWBHfDFGbiRuUFdhaDc+ejxNe3g5RmdqPyQzO3h6MGlMals5QD9iXk1ILllPMnJ9JE5iY1g7I2p8PSxVNz88O3dfVEcqaE5TVl9a'@;
put 'UiZaSVNyPi5XYzNYW34ub18iQF5XYVlIfiRmeD1Re0I8UChtXzh0aDhzLE9HQSYmb3VkbVMrPXhfXzQqQ2BVbTcuX0YhKTVkKldMfH5gdTJaPDQkdDtXSCp2L3A4bV0qPHJpVm1GcmEkLzY8W283Kn1VcFhvYGluZCRae1J4U3MpSmohKVRWOSg1WCY/NGo6QG1zOUt2MmtrUCE/QyQ7JkR4IzR0'@;
put 'TEQyMVYxPkZ+dUBiczJ8UGNZTF9PV1s8ai88KDVJJFN8UnNgQnhdIWdYNGROOD9AIzhLZzAydyw8SDEoUCVNJStyZDk5Wz8sMUI0Mk5GNDNaUFVCezB8VUFeJW1ZTmR9ZzVaOmA+IykqZChTUGY1Sm9sSCk5UEY+S0h8dk5EI0xbRkBoNlRfaG8iUmskO1hXJjI8Pkg2Z0IzRGYobUo3VjFiUktD'@;
put 'WXk8fiJvan5KJkJ+dkxNRD90cC9yWXt5ZFFXek5BOz9DKUNiNGg7Ti9CR356RiN8XzR2YS41JjplQDg0UkhaUzM2aVdoTmshOVs/RTI/XjszUTRCVkxue3QkT0cvKj98YW18WkNeL3NLfGBVRiRZWlo2fllBSEo2bG0rUHtSVlpHJjoufS40KjZiTT81X25ncGd3I00/Q2gjSGY5dHNMfCtXU0ts'@;
put 'R0VqPH5ycmlNRzU+SVU7Z0U/PXs6VnorTlY0bU47b1BUWUdUSUg4ZGpMSy51YmBmV1IzMiRiJil5NE9lWjspQ3dkMX5qWVNfJXY+ZT9NTkNTX151bClEVTpLQH4vNHVjPDkxa2I6XWEzazBfdSVXOmA2ND5HWVU5RVomc1NHZDk+ZDk6Wzp5JkhFTF83RVYyWj8ifCp+KzQ4MWZ5RlN5dkBIQzMq'@;
put 'WzpaM244K0FwYztKLyZqWnV2d1Y/PVMic0VzcV8oViRqX1ZhREdeSFlmYUFHSHF5eFM/cXJIfXk7fFRAPlRGMyo9OHk7azp8JHA+RFZnMFNYYk9UfFg7VlVlP21Tdm44UHB6TlsvTmMkNyRKODJbXUAwbCpkRFlFdzEzL0lKLl1YdiREWilxPz9JeFtKJE4uTChFWjguaWBbRjhXeE17TzRsX3Fs'@;
put 'LCFdd0JNTWAsTXIzQyFoTVJ2YiEjPX5Se14+VXxhdms9c3x+JWlWP2txcDZPcSlgb35XcGJJWm5ARUkuUHBGTEY5MSV1MUc/Pz5oNj8veGBCYXFxRFJ1Njxjb1A+YWVjWitqO0U8QyVdaGxdVWUzX2FWb191Y0klJTRfdVl5MWsiZCxbQVcoaXBdUHlBXzJOfVolOFFpOj5Ce1hyUk9BfmM4JlN2'@;
put 'JH56OyZASmlRd1YzNyp2SDVbeiE9T1klZHdLPyN7YEpbckJCZ21eZmRxXnFhKGslYmU9eU5HQklTQFBjcVVzK3d7TFIpakYiclB+N0Q+JH5oIkcyNCVmQE8jaXFoVXc9cT1LQ2JtcnZ8MkJTSEx8VzMoTioqdUUzN28mRjtmUjQmNk5BayNTQTprfEtocFhZO0FFPGs/K2JjaltjckNYTll+SGxV'@;
put 'QkQmYVt0Q1dIeUcmWGFjZU4hajsuVSFPTSFUVypETG5YUThxTkMha1daTD5lQGJ8Pmd7SSFzPyM+XkwwVCh8JUoyfHdAa1ZCWXV+M3g3ZlsqM2MzPGd5MFdLcE1FdFIsOXNjQGJ3SzFfUW9wIVpUZikkUz9tUywuWClYNWx3TWBPNyxMQWtFVWBpfUNJKU9kNmR4NiRBRnp+ekFMYDhPfFVUNm5L'@;
put 'UkFJJTVlflQoUV1dM0hCZnlmSSVqKkJub2QpS2xlQyxFdGpMczBnRS4mbz5ZJDE4eyNuLjNZN2k4P3F6UlMwRTA2eyJeUF95U2E0RllBOXBGVGs+aV4oJGhoYnl2OWkiME52fFI7N1FIVFlyeTEjezZ2YSIlOFg5S2txaUZ0Jk86MldXRGJrM186OzxyOCRORldZTzNMTSlyZF04R2w4LCllNixB'@;
put 'SjFeUUlEb21uPktJQzkpSz1fUlNVKTtkeXlDSWN8am47QypnY2krSGxYRFpYT3U0OzZibTZ7ZkE3QjgiMXFAQFRyL2JDNFBZIkY0R0tNYzp0RDQ+P1JGbUZHUUl6cT1OVERIYGE8VWpvY3QxS3x6WV1sL2lrTDY3TVdTVW8kKTJuIytRXTpFNHtnZVFuRWpxIW5wPz5sWHJBLiRVK3NpQypIQios'@;
put 'VSt9Y2ZzKXAhZkMmaUUvWyhTSnRjT3RmXTBQX3pEQjdCN1Y7Pm48WkVdY3A6aTlYViRjM35feiJtTDlSYilwWHp7dkFbKFJAZHNsM2JVJT5HLmhvSHphPjV6VGI7Lzp2ZXM5aSJsOHNSOzZtPV5sPkpVaXR2ckUrZ18xZ2JwLFV4Y0NbWyJhWnZKNVlZSlkyVCJzS0RsMUFBdkgzUG8sQnFhdVJK'@;
put 'ZV4jYkdoQHlKPTtPXVBoPyFALDM7YGZGVit9fFJean1dMlF7Mm9HSTtCcnp3LFdPRWFwUGR7PlUxJlkxVz94WzNNZWFqcy47eyZQcDtkO0xDZX5qJFAraStFeGksckcjOXhjX1ZWXXprflpGfiw8QDdObWM9dG5uLHdWZzp4Qy9UUU5DXkliezIlWU5RKktdWDZmXVJ4eFRfbTZ7PXB1STVtP3Rl'@;
put 'ZkRDdnouYXYrbkp7SjRRRSleV3U5Qj1dQjJ4PDw0WikrbT4zK3NvdHFXRiZXRSN8NygpY2NUdHYjdVQjcWgvKWNXfkdsUkE0dy92QyE+Pl5hd31WaitYZHl0TGxuZj9YWSZ2LCpZelpFKTdqfC5wWjhEN0lKNT90S0YlSFg6WSN5NzU6LHE8OnRTdTl2NSp5OHBIem58cEBPI19hJDokMGdYMDlu'@;
put 'bnUicldFK0Ztfn5PIlZVWnQ1Wmx2ekd8b0slUzM0PHEvOk4veUVDUW5saXQ8cnd9Ty93OkU0IUdUbTxFOkNMSjsyQ1RXaHBGZ2VDcUoxX3hnQkhLTjxPfEluRUp5QitbcXc8XjhTe1lxV3kpbVohfGo0Y2J1enVWLlJMRFRjdmIzWW4qXyszTjIzSkgqRXFHam4hNipFRjFqNzBlckh5P1FrNGVr'@;
put 'TmlAUltsLDIzJjJXbn1JV2xIQjBuUW5icD1xVi9mUlozN00yZDl2WkooJjIua0tWOD9qIlcpWThxayNqTCshKDJiTX0+QXM/d2JAXl17LGA8VUpOeGNeeUssPWRLTFVnVSlIWnh2WUBQSjRyJXhNbjsuciEmcj5Ue3lEeSpaQjYuTDdpVml2UHVlcXlfYnApJGVnZis/akFCU3lIJlEmUXZuNV5E'@;
put 'XUUyRUZhXlBIYztwOD1pJSFXcCp0eDo3XWgkX1tWZlNgYEhnc0pFUiY2eXp1XjRFLCopaiwqMkEmVEksPzEiUigydjRELF5Va0o8bDVYXjZnSy82KW1pSFRrViM0Rz9OdntfNV8xLHxJMWFhVjF1O19YZWVWeExBbERxaz85ZDxWUFAlY147UDlSLisveSZNdUxYL3FlIWNlNnJNcCM6P1JCS2lE'@;
put 'PjxILHdXXTFjWjNUenM9QUpxW2gqOSM6JjFOYmpzPUZQRWpmL0p2a14pIWRtRSwqbllAVUhARHdxV0VCL2ZMNmRYVSVgNilUUWx2On0+aDxCcVRdVUlAN3tTdSldV3gqMj50ayU5KyRdbEVzTTl2JmV5M28vN28yMjVwbSxSel5AbEFlMHJAbCxBMjJWQW4yN1pxRkhBdUx9RkJSMCEvOk4sakF3'@;
put 'Q2NTaiF9dkQ0eWh+ZUQ3OTNnd2c7RCx9QjolVnZATnVMLmU+PHIjaFNVWm8+YC9hbXZCS0lGIip7RF8kVVFYKDclZTA2ZWBPQTQ1SnlaWzd5LGlhdnBycTkrbmpIeVJGPk0kITU1VHVWbDJxWSJZcT9MZFciMVswJFYhWzhUaHJSMyRsLkx3cXw4ezNnNHc+M3YydTQuRlU7aWF2amFebmRURFYq'@;
put 'QiM8JGQ+anpXZHlpRVVnRnkwJi5iSjxfbUNNJkYlTzdWcDg3aiwxTlpJVWRNVGhbSTRRMzgyemhsVX1KUTY9VjtuOj4jeVQ8NXl2d1g1c0k6ZT9APjQwUlpmeihzVlFIPD1IVjFxSm1aMEg7YFQuNEhXbz9pcWFzTiJ5dlEmYEBSYn10NHZKOTRNOX5aals8e29nRjpCPyxLKF8oL1Q2ZDYhVFRu'@;
put 'X3hLIWJhQHZOQStySFN2ez4zSGkqeFRzSSxyXkdRQm11Ykdtb1A7JTZkUmskVjxvP1daODBCZ3xDfil7Ly50RWhMd21OYmhKfCVDeDB5Unx+LjREemhDVFhAUCZ+WUUiT0huRl07Jkh1WH1icHZbdEtyPltWZiNeOUwucVNOfjNdaHYzQ31uPW1uaCpUbzJ8bWckeVslMG44Z0o0dm9QMk5JRXUu'@;
put 'e2BSQ1IoSkxEe1hBSnNnMGZdcCM4dFRjTGphUmNKTS9DISl6RlpTeDFsUXZEMX4hKVluMUpuKW56SkhMP1RtXVVZNnt6ey5NWTwuQ1cjJGU7JSRXRjklPFgxVWswIU0vcW5oe1NCQF9tXjpBfFV0cjhRI3g6dWdQbCsyaklgU0AmUkkvODxocS8mVWNGL2FAZ0d2UmR4Tj0uQHo5VFRhO0J3clt9'@;
put 'U35rXV8yUnBnJD4mcTF5RDNpNHVeRWdiJjRuRmRjWGBzKmQrOCNFOXU+fGF1a2ZxXmQxTFJjSWk3eDtuJWI5KjVNMzxIOlhZbFEvWGZqfF9qZnNjIUh1NShIQCRybG1tbWVwTmRFeGMhcz0rV0c7V3x+cWVOPVU2P3JvQChGbitEQWZ8cCQuUWxGKHFERFhEaFV0JEZIKHZGMVhgPzU2RnglO2ly'@;
put 'T0Q1PiZVYVgpPWxSTCYvdHJreCp0I29hLjtLPXxLOGk6IX1TdWZ1WFc+VWZJYUBYcjp5c2VhYVsvfHZNIyVbMjZrM2d0XmNHY1VzJiNzZFI1T2dtRjlqN0dMXVZeXlZ2O2BFfWg+bjE6MUM4dDRwJFRwNEphUnRgNW5FI1g4XngkUV4jMHo9blRvI1JVbUsrTzdiLDZ+O1VKPWMrIl53Xzoyd1Uh'@;
put 'Zl5fbSFhW0s4KHt2diVDNkdmblpBRipNMnVUXk4lZkFFJGBoPzgpPihRfUZvN2ZbdXprN0ckXXFXbUdkfERLcGhJKDVbW0tkZCllK1s1I2prfUZNMGt6KUJwPDo9QT96JWt9MT5VX2JbTi8mOXR6PTVHRlcsNm5pdVN8ZFI0bW9KUD9KbzEuQCFMNmFxbSIpciZDVHUpMWZPekh4eHtJVW4sJVQq'@;
put 'PXlMNH1jcy9uZ00hOjpjVC5ASyRrcT5DKDssWHRKO2JWVmBGUj8jeE1PeSh0W2s7aXF6TXZeKHddKXE8W0VpMXtXcC5jaXQ+QFBpMXZFUmE5YGlCZGovSzhhMzthcz11dl54PHdzMHMmQExgMm9iTix2RjFkazQvfFAyJUB+NHdDWS4+JX1INURDcSJIVVEzPGh+eUMwbmNCdXBQVERhTEk+fEUj'@;
put 'NUZTaWNRSSojQyFfe2wlW3JUcyRWQDI7IjUyRDk1MF9BJHR5Omd8MntsOj5JWkF1eDc3QkohPk9PSWxYZ0x5cE5kZXddJT5wN2Z+TSslNlo0XzVmSHxIRl9rOFhyJDhhLzBweD4vQWV0IThDPDQzMSRhQF10bCRUWi9SXVolWWYxb0ZgXU5hITYsO0ovbUJHa1QrK2UxOV5zU3NbKE5edDIpTEhR'@;
put 'RS40RWZnPX47ZGZsNzZPdnZ+ciZNKC5lZlR6RFY2KFtxaHElTjpzN0kwRSMuKWxiam4vOjNPbiQraCRmIl1TPS90Vjx2Y1lvK0BARzddcV98Zn44fT5AUm9tYlcoUEN8RF94MlRyMCl0KEFAbi5HbCYrbTcoVExdanJiOE5WMS80aEBURGhTQHk3e1IrdktFI1Q3VE9ocHxNO1oqJjZEKmMwODRT'@;
put 'SCM3VFFWUn15LjBMeyldQUt8PnlUcmJmZjwlTWVhfTEyXilOVElZOzcvcEpNNilzQGRVO1pkVHQ/WnVGQDgoUyRyeSUvRUx8PUl2M0RFJnMuYXg/JFVmV0F5I1NIN1AiaEZze00vdFBCUl1sXzhIbDcuR1kjODFANndpUzNlcjdoOzU6bFszPzgxXWs7MXx4bU9FRUxiaXc+WUowajxpNDFNKkNX'@;
put 'ZjMxZygmY2NHPih6WWpzKj9XJikzInxmaGhRKzU2cTw4aH1ndkgyaSg4PSklVGQuYiVqPW5+W0xbYk8wIyo+d2tQcnZ1eSRtdlJSVi5fMkt3K0FYM3U4SVhwe3RlR2p0amhgOlcrREN6JDdEd101PWIqRy9VYnB+KzI/PnY4R2NuXlsmanlvd3ZfOFlLcklMc3NCcSxka2I6WT9QbyosV0dsWHg8'@;
put 'Y0tSVW1OXUI/X3dUK1tBRjNSZEFTQHVjcm46NSQwKDRLV3loPzB6KChNbWQ4Y0xQRSRUeklFWWksS0tpbDc6RGdJV1t+RDk8ckVqJSg+dE5PWUN6dE96Y1dCYSpCU1k7TGpmKT5ORzpOLjtxW2ohPEZvUUo2SkV0IXo4VjRLTExyTmlia0RRb2ZVd2R+OkxkIl9VYkY6Y1l8fCYiZyFzXkY2KnhW'@;
put 'TlZfJVcmT2BvQXcyeVFpTiVpYmlCbmRER3lANm9BNEx+aDIvLmN6RSlKflgrQGlTRTp4IktKYW19JUZ9L3Q8JGE2RmheYDpKWSVCK3lsSzZoYnhQN1RZXkd4RUkmK3EmN09kJWB6WEJVP35iRkhkT0h1USZQVlo2YldRcyljRStjWmBqTEFRV09YfHFbKGVzT2kwPmkoLmFDZncsMSZyeEVMUCg6'@;
put 'PlU3fXAzQXN3Ujl9VSpjMnU/OTJAKEdpREk/Ol4mQU44fUxvZkZMaEAsSjBoY2w9fVc7UXg9eF8kTGQ+Q199QHJJOFk5dGU1S31aIytTZk5ZcTEsd0h3Mz9le0gmWS9fRkgmdm59XjB6dH45cjN8RVtbZ0V8fks7XTpjI1Y3IWZyIX1ielROVHwmbmExfWR2cyJ6ZmlIbj5fZzcuZ1VTSGVaazQx'@;
put 'NHg8ZElqMGc8cj9dOHAwakNCJTIkblFbXTh2biFGL3tVT2d4OnVsO3FMPDFmQWtbZFdtZFcvdlFXQVRqbXwhL21ARnM8KXVVQ1drbSV4UiRCOSpubnBZKE5tbnxMUHteSCQpUXYlOlR3VXBDTz1bViowXztGInhPZ1J1WmdnUiJtVk8/PWlJaUpadUgldVAzKSRLIkMpOjx6JmQpeCxCaFsvVkk7'@;
put 'X3FMUGZDTDF1UEosZGwudmV4RlBEYTA0KEg4WUo1dnNFLnpuMzY0ez5aIyx3cktbIyptOntUZjJAUE1iX2NMV2BoOXVXIVYwMTBPY1M6b2FZfT1+OUtGLmg7THJlSWJ+NFpPR0ZnajlHRS84KCJ9ZmZ7X1lmLlkuSD9iU0tQZ113UUh8Z0Rfc0MwKjVNKTBQakZXOjcxZF5OYGhwakkvJGwzfTpW'@;
put 'SVUmMFdfOC50NHhfeEZUKjtXMEQpVXMwXiFUemQqUnQpSUVoRlpQNlRjYU9KQSR3RSJFUjNxQ3M3NUFVWEQmW15eKWNdVHcyWmZuISVtOytuIzJRfjBdLm5VcH1bPn5iM0VWdGJ8bSFwPC9CK2EwM0MqSSU7dC4vITlSK35IOFVXJjZpbTImdz91PCtMbih8IU14UnUoITpVX0gwPXJeIT42dThy'@;
put 'bUpeOVgySj1OWmtdXUYxLEFvcmowSnJMfn5vXW1PVWV1VHJdajYuYjt1UTFBa28oc3JNelgzQk8vPTpefVFlTlhnPzNaTlMpbipvPWpUMThuQlY0VzhEU2l9VUppNCx4cSowdlJzbzpUPSUyPUs9MDhLNXZhPyN4PGRsZFIsLix5SEdtcVsyMlg8IiY2WHUzW01oNWwqPGVtcTRsP1BGUnkmaS9h'@;
put 'PytldFlDOHdOSm9lYS4pI3N+N3hXend8djYhJSpVSFpTJTlaSD40cTUwWENEZ3tqMnZHYn5nZj5tVFFZZVoyVCFqOHxkSWRfUXM2fEI7QzlhPitdJjN4N3hZVVFOPjNoc2RUUyZFWV5adDlofUhCQiNnUmQjQ1Q6aSEhInxTS0J2QSNWeXI4KFk+dVsuRk99LC5sYCg6Knd2OGo6P2RHcWcwWj90'@;
put 'JHUxYmRmMTdIPFs0Wyw2JX05VFFRVTc5PURNW344ey9hbTw2PkIvU3J6ZURfISVeRzhjTCNoWjtBdXF8Jm1JbipGPFRfL3ZCJC4xO0x2b09rYT4+bTpMR2E8Tmd4emR9aEh2fGtCYUNDKSE+bltDT3lLaERhbCVORzREM1dCeyVyPFFGfGhQVFtHRSVQe1hwdXtgVVd3LH1MNXZDQlslZjxNRTti'@;
put 'RDY2VUlGdHdOTHVFai9gPnwqMjhFP0J0IXdDNl9hWGwyMUVAeE9EPFhwI0h0QHJpWF1DMFBecVYjPXBDKGFPKnNHZ0BSIkNsSnlqbEFhRV5KezcpRTZKPTdXLGs/NCxRQXtJdmtnUjoqZ11CTl8pWiMyUWRkY2NlRCFtel9yTyYpUzJnbHliTkdKRCssbXZNOjFQYXlzO2swL3J3YFskcC9NUGRl'@;
put 'Pil5IkE/NW9wMDxjakNsY3o7YUhfNyh+aS9mNEE2NT9FNls8Sy5OTS96fk9UTlBNQWU8eS9daH5dZFEoMm9ZLFJ0OzdoIS4mUGU+fjNeWTBCInpPZCFEbGFWdkZXRzZoYHJnY2sjLGFnbWx8ciNfKXBUPCNVR1hGZDgpMFRGPV9eMmRjR1JoSTdBNGQlT3d7UklQcSZLTTUiOFF2KmtrSkYoZGJq'@;
put 'QE5aQXE6PyhEZCVeITQobHZ7OG95YUhwSl5WMDMwKT01YiVaTmYzRm0rPXJnOGZzXzZxPzB9bWxtVWtBV01Nc0t9aEJkKV51fEopfFBUNVp2WVZ7Zm5JIV07NnReXXU5eXpvWFFINFFfbHY4US5LMyp3QztkME5aWkdQJiRuTVg4Zz91eH01UzwsLzEkYj5RNDJMd2lwaz0sMUBwOmIvciVzZyox'@;
put 'PT4zenQpYHBpXXJNO1p0KkE+YUsySWJZVSQpSHAlRCprL3dNZ0lrcHxsNWV8cFk5QzJXZH0xc3w2OiNlO3lHVkxdT2F1VV9nazkidnNLfEt4Y2t+OGtYKnxhckFwNmBhb2slbzNOWno9dWhUY0A9NjkuKkg2W01ULzYiZm46eUhOUTZTUC9KX3trWF1QbH4mbUowe3EpWGA8YX4xIkB+dTxIWGQ8'@;
put 'YzdXVl5LIS8vQVs8LGIqMmJqczd0I1NVdmxqO1N4TVt0QmJSKFo9ZHFyXUJqTzw7X1kvT0IuQCFWQFkqKDFZVio8VHA6JSlBcDQ7NW4mUX17fDNPemcmUFMqJGZGI0RRcSNmdUd3STk1OGVuRERPbG9mYXB4d0B+JTgvJHkvLnphY2VxdVpXXWVIVlA7QndJOCFyL1tzZitpMW06fTtSYF5AcUBA'@;
put 'NV4lbiUkRVckZ3pFKnBJQmtnV1Y5WXY1Rl9qdlQ+dWV9Qk9WT0g0VFZNTG9hTWNGJnteKUA7W3J5VH1IJHtfWGVUQjt8aW54WklHdU1eWk9LXlVjZWBaIVojS2coZnR4Vy9qb3hmP3VVRSpkPH5fbjsoIWBlJHE7bzJZO1tUR081QHlsPWB6QHROeDBrSFZgPk93a0dtPz53bU5vaD4xJHd6UFh2'@;
put 'dUxxK31gI0NgeHR9VDEmTkRjYjpSQGNPVil6elV2cUowblJUSmEwe3RlPVExYmQ5OGM3WWlBaHkmLDZ2Rl5CZUhPYDE3flQ9bH15eH5IRTc5ajpEfG9QTjJgLENXNm9oYVFrKWZjez1uXjUhcU1vJC5Ac1ZYe08kXn19ZW86JlRKMXc9VWwhUThaWHpOTFElK3ZtbGkmYnhmfnVQQ35bcVdEails'@;
put 'aUtmbWBIbTsia1dOaCU9PExrQnZ5Y0VyWDBueWpmMWNUWHh0Pjpga3YrWms9TC8pRSJiOlIsWEpGYyYhVik3VWtLW3YiMiIvUVslYGVJTCs2cVhNY2paJmYuS3o9VFdQSThXPEpvWU8mXS81THlVbGU1YSo2WywkJXU5fFBaZkxURGwiLl80TH1gIlYmZ1tmXko/cVhZNU00V1E3bGlnd25ray85'@;
put 'WmVffm9pRVByQUVSb2hsJG9Uc2RRNWt5ZDZ1OmhhdE5mcipOT0xuVSM4dyMhZS9QakNKNiUjX2RbNzNrZmVGLy5qJXxLaWZLMlt2VXd6SXFocEN2XSZlJFMrNWcxX2NOYnZXUmY1PDQqazVCMV5WTzBHcnMkK0x3SDhIQChdV3U1QUZWdDJuX09ATEwpSUlNWVI+WXhaayVMRSs0K3crZUxsXTxd'@;
put 'RUNsNnRDK0ZeSyZEXkMlaygoSWQyQmFGUUg+ZUtBNDRWSntMO1Z0XSRDYlNqP0lkO3B4dD9WXjNaOSZCO1MvI3RsIjVlcEM0V2pSVlZFVk5ueFMhYyNldSgmfigpWCpedVZUUWA0KlNnQ205LzFHLkNbRC5fY3VzdEYheiFRImpMTTE0PWhuTDNtRVROUSJJZE9pN0U3aiJ5TVpebzReWDpvMztN'@;
put 'VlRLWkBbQGAhb2RfPWEkJXB+WipibD9hUmd8UC8vP0ErMV9+KXFqOXtkY0UxJG9nPl53M0kkMzU0cylrc1dqVkBqVSJvNismaChxJCh+cV5TM3RXNzcwTXprNHUofFF6TlNCNz5ANDszdGZFV2JrW2hHcDVlZCpXdWw1QDVDe0ZENjU+fDdodWg/Mjgydy5He2UmcEJBJn1rOGJDMWQ/bXppUj81'@;
put 'WDFAMGtMY1lVQDMrbVZ2VjQ4P0NdcV9KWXc1eUFwR1ExMywlNVpNXl9vNSp5ZSFxPHA/ZlVBaHFETEVXTn4+NUIleXpwSklRPGJ5M2VyIWZaP1J4RTVJN158c0UkIU90WHZuY2JoJWw3Z2x1OGFiYnEkK3Q1V0BCdzxnYGJtJDY5UEBOPjc0U2RQTGRyRXB4RkZSTk10PUZaR2NxUkYjflsrTltH'@;
put 'RUcoeTwkTWlvcnxrQl4rV15lPjtRcCNQV205cE9tMkFGaVZ7YzA7Xj18VDVGOC8zInV+Mmh0Y0tTKmEySUNXVERxL117VV8yOndmKmwlJXZsKyFjO1hrTjA3WjMpYHo+T0J2KzZ5cFdZU2dAUjxVKGhQWTk/ZixtS3dUWiROfTF0VVFrMGh3KGpgeCtwKWc+ajlfajhvWlNTfVU+YkpMR2Q5SnBJ'@;
put 'emFwOHd5YlEpWWxbVTddJCIoVjtYN2JnQ2dKc29qbWIoSDNmU3p+ZDZyfEc0JDorfU8yPjNpdjFzeiNRQFtlJkkpQ1ZXK1glL2MkO2dfI11VYUExeyF+fUdOczVIP3QyNHtqVyZLYngzWHhYR196X3lRKS4zfDFeTDNHIWRmS1p0WVhnS1JJV2lFIjxhVHc/RVppfEJHTD54fGxEeFVIajtQWltw'@;
put 'UzVeJWg+fisvcHdkSXplbXE9WDVvWTgkO3NHOnM6ang5TkEhdD5mT3Jda05Ba3EyeGdFKnBSU0xRcz1KaTR7UylbJF8zOjkyd2JWZGJ1SUJmO2wmNHciZ2tjPU5QbC4qTCZ7Un1xOSlPRigkZ01xdWsrWCVAcEJUdjR8NCxZaUEwRTc0RCt4SFNWeE1iUSQyYXdsQUokZilva0BndDUxcTY/bkBM'@;
put 'cit2UXVlTUNsTVQpL11mWHhGVEtDQ1F1eVFdQkEqcEVrLDRHW0JyR0JhMjw0UWc5JElTWGlAM2RaRGBhanJuTVBvc18/VVlFP0dPdWhCJFozaDo+RUd8OS99QGl+a3Y0eGQiUyk+anwidXBzSWIzbnpiNjZ2TD09fjh8WXtoZUlRPkI7b0J2OEg3KkR8RDxBTWBXdnA8d3A2IT5WTjJBIUZOSWtb'@;
put 'bDBSWVgzLnEpTitPeiVNLG8saD1ycXIiY3RkNkZBLiFwfndgeXg2Uk12dENLMXVLVE0oZ3wyan0vMltqRW8wV2ImaXZ3d0dLMD8mWWIvPCw4cXNsaD5GcTBPcyNEWEYxMjM9OCkzdkYyQk5fQyJpUUVwdmt2PE0hZUxgTis3WntpPFE8PGgoMChSSF1dNSZ4Mi4hUzY/ZiFQWlouTmQ4U3Q4PHd6'@;
put 'JFMkSiI2amp8bl81NVNxZiZ6LloifE9ZdVdDTnYjVj1mPWl5JkFlKTZoek5mSXRfcix2aipSK21HIlpPQCZwfWJDVUZFLn5iX0piKjRjd0JzeXNwbih8WXtmfjx+MisoeT9MJmRMV0VeVkh2NS5zb0x1XWtDX0tMRXJjRW1fSkV7WSJOZnE5Z3o+SE8xfWQ2WjIhdUU0SiI4U1pRQGtOZ2JWfVZo'@;
put 'RGImSnkmTmU9OFkqWEghYHoxVmdAU3Q7VV57QFlUZHo4bXsmdzs3SXJpcGB3NnQ0RyxbR0Blfiw/PEpZISJMZUNxbExgRXNvTGltRjUqWVlpV1cmaD9OImk5I2hWOHZFaktNTkJUSFVwUEYkJXB8XXQlaW8pTjk4V1NlWi9dNjVWKEJYaElUJldnfD5QQHJTZGxmLFVpJnRHIlU7Pm1IWEghN2Q0'@;
put 'fV04bWNFcVgmSn5YSTM8NktUfFE4KkB5Y0d5ISJPRUcrS0psRnhHRXk4Km5PXiZmSlckZks9UUs8O09ST1A0fF84NCRrMGBRJEZLNVNfLCIrRjxOI1JIZ15vXjExZjUpQXo1QSwzbCRgRlQ+fDEseV1+RywsIjI9UXdnbTM7YiRnejJrOld9PmMpWV58UmdGVy89I31IXnUpMV98W187VntpOCNv'@;
put 'aXdQSiNRRC54K2sxUllYQVFvSlFLUixmQVVQaHc4VGxDTkNDSVRMeVRlTm5lK3skIzw6dSV1RlJ6dnc0PXhEUH1sXVBwW0RpbykwXXgkczU+cjZVaCJsJChwbHZTcm5OMHkyZXdAJjk8OChxLitzeFZjcVddOzVGPyFJc3htOSRsRDA+QXBORGg3SGwoSlR1e0JTRmNCVTZxTSZAL3ZiUUpkTDJ5'@;
put 'VWEqdyxjK1h4akxzMTIlZltqNlFaY3t1fVU1YjFAdUd1Rz9hTXtLQngwUnwuKH1KP3Y6UTBfdjB4I2Q0WHRoYG5ac2kyPStVVH1NSz1PIWw/WFgyX2ptMiJsYERGalgjQVBeIyMlMilAVGduYU1+ciZPVG17c3tgQy5aYEZMNT42R1RvNT5bODRTV1pxMy4qI0s1QmFfRFdoYVBbbVhSW11zLjVN'@;
put 'cFNKZ1pKUlRRRCFPMzE8ZUs8eD9jI2RjZ0R7bnUoay5xaCNwL2UsVT82Qy8hdWUkdXIhcUZ1YUNneHUqbXFqc2tSI0c1bnViYEl2QD1eZzNqQS9DfSkjMUFNb1czTTFYcmRSY0U6NiJIWnVZJmxAWXxaXWNdbW5qL2BMIUhGMmI6bDk+XiFBSXMzYm0yVD5+Lilbal9MYVUhOlQ0cSltRjZJeWdE'@;
put 'T088SVF3XWdOcXxtMWtpVn1mL202PzBYczI8e1gsdGNyYW1YJDFqK3FIajhHJDdRUkZIQzFyQVBjRjI1WXhKNF1vcE9HbDx8JkgxUXNoRSloUWh2Qk07MX1oZWBhQzg6SDRAcClhOWgvUiYhRndII11KJSYrckVSV1F9LClyP0A0Y3x6fng0NGohJEhkWXpyeW5EM3FMWj5jPWU5OGhoQHBIWGZB'@;
put 'NS9ucFpZcWIqLlgodFpXaGF0SyFVfjR3JmNxNlNreSIlNTZ3M31zc3VfamE4eSt5OUZmPzBKTTdnLzJNfENeWkVMeE4sNE02SCttVFt1PE9QPzssLmhBXmJ0MFZdZiwrYyNFdiJRQSwrWjlefFc2aD0vaD0+fmREZnU2SDVDPDdWfT9TcztrV3w/cDYjX0dIdi5PVi96SSgoNDRKYmo9YihlRVli'@;
put 'USlPbzBKSCM3MUoxenVqVF5+UW9LVDB2NClIKU9TQjtldnVVe0BkVSNTMzloam56Uz80YEsoWyY7N2lnQn0qaHkodHFHMnxeMHB6bUZ0eWFSanFiI3ZqVVcwRktBdWNzTmxNN2loK1g0JHNdJnAsMXMuSmEzLGpmRm0/ZzdBTUkiYjUzekZrI1BVdTpxaiNuIjBCRERpbVdLdEpNOz5jcVk6L0JA'@;
put 'WSJpVCtpSHZdL31XfTA4UVt4c01FbFM7eW0ie1JgJFQ+QiVCJGtzMUhneC8/dTxlN1lFWVZzYEsiaFVRWy9HOCZnPGY5bl87MXhFIzUoblNvWns2Qmp1ckVtU0NMImgxSFNWWjpXKm59QzF8NHJyWCZxSThvbXpjKj1Ea1pufF5sNVVTOD50Ok59fnQ4VltlfVMoPHZ6LC5GYSJbLH1aTkU/JTll'@;
put 'e2wlI3N5VXxyenJ8L3ZLaHV5Ojl3JlhxSjpbVns9QXJkLmt5ZyEuY2NaSmhpU35sPT1lIXxeczhEY1hkQ1VPYEwrL3hnWC9wMns6b21xUV5ZQ3cwMD9ScmE/IzQ+QHgwNDBqVmk0MTI1PHdKaVdUX3FYI01wI3FSWGhpfmVjOEkrUiF9X0YoWVZzTF1MUSN+ZnxFdSttM111KSJiMCorMm1SQzYq'@;
put 'NSQwVmtqVD1tX0RQLD5VcFdKW1hNKiU+aUlNN08jYzZePGwjcV8wXz9tUjBlIj5MeSZyeltTL0xGbFtiQDgpK3dHWCtpYClrO2VnP0JBOGdNQ2xQXnhtbkU5OjxWZCU0Lz8wQH5HVm1Bdzo0bWczRDJuU2dpZD8mPmRkYUIlcyp+TUxCMEZAVnBSQ19IZSVPZ0Mod1FeaCFHR0BJPUNYX1hFKlNM'@;
put 'cnVWMkVXRSlCcFlsRWNIMVdTP2lPUzU/TXR9dmh7ZnxkKF9GSCslOktUT2R3WjskKzQrXlpYeChqTFR6bER1P21RcV9WUzRIMyh+OXFXOnNpfGZKPFVbN0hmXjdVQHJjRytaaUQyV04+KXhVaGt9TGZiTDFvLHZaUCE/YClIPzRAP0hfUTRiVzdZZDg0ZmQxYUxGKT5yN0creE1hVT99Q1p5Q3Am'@;
put 'dEFPXTBhJXQqSylfaFMsMyxmPlM7RntydjtHc0p5bkg2eUx2eEFbdTJzSmEjeEtLR1NIZVZOWXlgeHRKZ1FEMEppZjcpY1dgRnNsZzloI0lCVEw2bUVsbkx8aXVrPihfZWcpcXAhVFZaeykhdjJPcV9tYnkrX15UbkdtKiEkQ252OWlVKzssdDhhcl9CKkZjUjtGK3h0TGRhfT44R0ZEdTJsZCN7'@;
put 'Uig8Sk4sT1BkLFZ7ZiN1UGpMM1AwUy95YSg9VUU0Ols8XypZV1RXZnsiRXVSN1hlZkh4ZCpVLD09WCEyYGZld2o0R3tbMCJYeCxZSzdONT1pRmZLQn5+SFFOakxfRUJmc1BnTXg7UW9DRk1CYEhnbH1fakw+VD47YHpgYGM9W0U6QEhDIipwbmxCNlhJemhHMD9Fbk5FRVFJMik5djQve0I/cWNg'@;
put 'KzpeYl5RVyRVd3VLWlA/ZEV5Onp2S2AvazF9d204TEE3RTBQS2xtITksKnZRIkdOI314KCUmL3cjITNyOyFTWUo9Oy5CbTV1TyI9aitDZWdvUl8leWgsPHkiMWtnNzBeWk5yW2E1XlVLZWQqJEFNUjwibnNXTmlda29+VjZYcT44VjFqM2Z3c3dyUyh0JHo6KXUqcWtVcWk3Jl4mPzhyd2EqQi9Y'@;
put 'aiVHcllydT5zT2wqU29xY0RBKlIkVVVPU2p5WlQhPEImYGBRJShNQEBhcGs+PF9SfU1zI248UDRRWU9CcEZOWTRTeTNiaT1qTGhuQDxeKWFDJk1dKlp7fVs8P2BoTF83MTZRMClFZFNqbyEvfHs0LktsMyZORXlmXil5YmQucChUN1lFWCl8PjR1b3x+LClMS0VJei9eWG5KWz5gNX08N0cmMW5N'@;
put 'YkQxb1NoelR3JVRDI3FdYUA6eDg4aChTPVtfNEsoZ2cvO2JwfF9zPEMkJnl7fkdmY1AuKEduTyNWa2kpKW5fMjsqXiVZJk0jbGhpM0lxaS5TR3twUntgbkN6NDVkPywkVX55bUg2bCZMNCUkdip3YFYiblEmS04wYD5XQH5MQmhmNTh3O2t3V3BQVHl3Uy5EKHh0PHEyYGVMMjAiPXxOT3IiR3xP'@;
put 'UW9rVlAlek41cVVfXjJ3clpmZTpTJXk8Xl11TUZzdWNvU1hoUEZ4S3A7XnMwZjRYcE1VYFQlNilOPVZ1S2ApI0M1YlpTZDZkcEJiW2NlVUlHT0NQfj0jI2l3PUt6QVlXdHxhMWNAbVIhPH5XI25aPFVUZD9zOHg+UFk8T1B+fl9Xdm1bRmdNLyNMKiNeb0pYJTI8RnVAMVBfUmB8MCtfMlh6ezA4'@;
put 'cCEoQk8+WHJTVSQ6L2N6bnVwLCYkX0slIU0yV0IkKUxyfms8ZkZjPEl0Wj9PVnhsM0gjIy9scDsoaWJ2N2JXUC5fM3Y2dzZwZ2JPRXclaEQ5cDhVKDZTcDQ5diFvd0lDLiROM2VbbmNULFl4ZXtOOnhueG1FV14wLElLT3MpeTN1OHMub21VVTlBLHx4QDBuJGoiYW8qQyw5XUVePFZjUDI3QWF6'@;
put 'Nn4kO0lYbm1yP3hTbGRKSj9hOGckT2djTDFKMXdAMk9lcWdSW08qWCNBOGEsIW1PbEJ+dU9qZnxnO3ttdT5jeGV1aTFHXThGOyNVKk5VY2NkUjA4YUpPZG4wJD9xOighTUZrOFp9L2tNO3Y/XykrKV08UnpaJV87ZH1qdSRCVz1JUlVCNF03WC9AOyN1NEQ0Ny86b0xFfXpwNXMhRl0kUGtjJC8+'@;
put 'RW0iTWsmITcjQUVUdDZjRyE9K2ZnbHVhaW8kIW5GUUFAKX54aVBTdW9YOCQ7Yk1qZGsyUHAlXiNtPE84Olo2KXUpKXVPUGBiJUc9RTIqVjdGRyYpdiR7Wkh6PEU3Ry9LS00rXkUwQS5Sbz4vJm5kQTRObClseHJWfCw5NjhZPkY7U01taH5qOmlpPTlMKDV2QDhZZk08IzRLdG90RVl5d3pRJDRu'@;
put 'SUV4W3dWL1tpYyNUUkZFWlgpcF82KSNrYlJTT0ssdz1fNGsuJm5KUWFSXmFQUkIlR1Z+WyEyUkp7UGA4O0dBZDo6fmdXWDE4aiQ/UTl6YiROflB8fHFafiV0W3g/WUQ8JmcvN1cvOn17VCIzRWlzazIzaEQmX15gR1RNLjV9a3tGN3UrKjA7UzlnI25OV29MWX5qJEZnVTYwdXxJI29vdl8sOXdE'@;
put 'WFBJMnQ4fkNmcCNXTyp3IXYyJilKLmRdTExNQH40aShhfXVSQVpmRGA6T056cm44JDp+Qjk+MSkral54Zko5SzJ4TVtjZkh3LyJVNT1HRzVZTnddSlpebzIlOCpEbX1hW1NlMjhBRHU1eD10Q0RGcWNQeDcwPVI6RVV6YWgiUU4/NFV3aVcyVWpxRyVAOGhnbzRMd114b1ExQlZtYjNPK2ZWUVd6'@;
put 'N3RjVUozMHsvRGMlNygwWW5tU2cwTT9LKEQ7L2c8MFIwXSEoWXhOeDZmUXcyLjQ3Ljp9THokMlsxMmtVOnJ4ZWQ2bjFlNCZ9PURUO2FLN3JLNTB3LE5ebmZbfWBgOntDU3daMmVxMnphWC4mZXxwMjNuI2cjTHMlVDUoLEd3M3dSOT1Qbjs6QHtPZDVqPFhPN0ZMW0pFdj1mV3BiRi9HTi9MV0sr'@;
put 'LElWNExWKWRJSj5ldCUmRjpuVnFQQ3RWaClgJXkjenhKfk1jM1cpdnV2dDx6YS9uRSYsRHt+W297e0hYRWQrU0lQTTt2Ikc+ZCxlMmwifEN4YSopa2siaUpSLkJrKCNlQjN2cz90VEVrWiVMYjlsdWwvcFlDL0xpaVdvQ0RbfWwrcVhrTmFpKkJ5O3pXP1FKPkk6WDwjckBePC5VU0VVY0sxVjJl'@;
put 'RzMmL3c7fHl2M152d29dVX1pZH1oOUtpK1csaFVEWTFHUHBOJUdqKypvPT1FcXFdNWZre0pacT1uUCZZckMmQEVVcDBxKXx2ZjE/S1M+PikyXzhJTSVWeChZU3Bqa2VIPWs5b2pHZiMyfHIjRUxuMUNjbTh6QX5MS1t1aUxILmdpS3NXNDIwam1uaXI7dGJOYCxAKGIzO0xlZTpyLCRMeDFVSWNi'@;
put 'QzsjPjhqSl4yUk1+ckghazcoRylfZ0I9TWMoeHJ4bEkubDE4MCguW0hPYiRoeXFNV2BAU3FPcURWfmtSenF4dW11TVdoTzwuXy8lbGRVYDFHXj1deWBSZ3d4TC44WUZMX242TlFiPlJZNSgme1VkZkR4JT1pcGMjLiVhRy98LDMxLEBOP2tdR3c4RXU8XlR2VFtqSnpWUDtAb3VDZzdjb2QzXjZP'@;
put 'NVMuWFNAaip8elhONFZLKSVVXTtMPDNoUk07bX5EfT5zZHY9dmZ7fC8zclNWN3dZY2NQMjRyMlhyU0xmSz0oeERCL0pycXFBLjk3YltITj5ELEtgbkUlPzRvW1AiXUU6KzdbTUlzQENTR3VZWmlHaVRnVWJkYmZDVVg4RjI/aCorRmpaRF8lRnc6W2VVJVUpOTlBVF9HSDV1fnprWG4uNlIlfWEo'@;
put 'TzI2YF5ORlRBd0pkTFdRdkwwUyI2eG9JZTdkWUVXbzlmPztLI3U4PncjKGFiJXArKlQ7JFpWYyhDbWs0MERrcStydWglNlYoS0xgZmRfcF1den5Dc29dN0V6XjtLREglNnlIK0ZWelsofSF3dTNMKEJLOGR+M1EwKytwRWFUL31URGhQOTJsNzM6bHN1RTZ2fDx7MV1jbzRuUD0yLFd0a291KFhV'@;
put 'RU9xSi5RQT5QSCtaJXlQeENAc0dWJiVEL2VwUHwpTFojTzBkTCImKmd7TyFQaSZxVDRaSz1wZCg1VnJTajBhY2lQaXMkQj9ocDV1RVtGWGptazp5XygsIjhtYHsubU9bXjFqUj1oVHgjU20rL2pzez50T0YjK3RPaEtuSGwlek5ZWX1rd2k7WD1Ra2RoeG5DV017aWZxWDltTnBoXTtRcSVmMlFF'@;
put 'TDlkR3Z5eVFeSFtvQyY2PFhzUmgoLiNWeUtjcG9MRkdiKUF3RWgvaVY6fEJmcyFJQ2RbYU9qaSo0cilVa3pXNSYwNDFuUE00U147TCpaTHwpJWsqSy9tNXA7WVtgSDJdVHgmJkBQL2AkL0BOTDoiSjg2dW40enFdUnclLDQoVDUzdj9Wfk1HOWhPK2xFO3ZDMXpWciQzQCFNOF9JaD83R01UUkEk'@;
put 'XyJjTCJLajoibztFem53QDQpXUh1dztsRH0hLkgwbHdiaWpdaFQ9IjNfazBKalpoPmtqelFNQlZeKnY9USV0M3V0R3hmLlsuZXU9RSFnaj09QkxqJmg8QVYkZnIrY3YiRWlpZCRZNW96JSEmbkx2KlJYJjR0RkdIXlh8Y0FEO0ckckcpP3I5d2gvNXZHLH06WUBiTFRWfVh8TCp3Uk48b2FjQ3NO'@;
put 'ZT1yZnt7Und4MDxUSy59cmZbeWRaN25Mbyt1by5hN3Y8JDNWRzFhMjhWOGwzZ3FWOVc0QE08QDY3JXgjMHpKPV4pSDo+WX0wMjZTW2BMNHg8Z18heFpqYHErITgjRzpeRmthVDhxQ0FOIyZ7U0ZVcUxrUFRqO1RjQHRDRmZtayRCT0NARiF4NVdZcTFwNCguQTxrUn1ANUQ+aFBTNG9mV2NDR2Y3'@;
put 'Q08yMHpqd1lmaUpERTJBflAmWEZfOUhSISQyVnY3Z1RqVT80dWcrJjRkZ2FzcSszezp5bG54b0xIcituaSk/YjkhOU0me0Y/cVQlXUdMLDRecmcrJUtfOE9LP1NON31uOElCSjxdcC9tZm09RFMxLjtoaDZTKlg0anxCSkUqOTVwdytoQFNwaiV7TyttLHxGKX1SNVhjOHtYcD84PnM8VzJbSlRE'@;
put 'ImoyJipGMU90KGU/dTZWZGE1RWc7eE05ZkgjNzdpdEcsLk0uYV1QcktsbHRmSjBHNTBrQCwzNnYyPi9dTzFHanFWYShvanxwNFsldmFSTDtoZD1iOWwvRVJuViZeaHxMTzRQbzZMMHEoMjMrWUJDbV1ZZCh2WGcqKD1kaVlzO09dcCFoWj97RmdFK04lRHRMbipNfHAjQCh4JXZVRyh6c05fI3pQ'@;
put 'aDpycVlhOVtsQVdZND9xdVs5UT4kb3o4XmpaIU9pdXFDbEAuW3JMPlkrXjRsVk5rS055Yz1gb3VJK34/RzptWkRJZn1IblhzXTNVWFppR34pTj5PRSR8VDxjLktedUlBRSFyeDJINyVtVkE8W3YpRFNLXXI8c2JvW1BJUj4pL1tBeF4mSmBRb2ZkZDNWQ011b1YhT0VHSClAdT0obiVJYm51byU6'@;
put 'KihrNlgzZ3FoSmxiOTBMQjlOMktCMHozfW8wfC9ad2JqPGd5YztfVik0dEFTVkRlKXVvMjdqMV45em9PeyFFWV4ybzN5K3FOfldpUSt+RSx+akRDRHp+MSsoLmMvPGtkRW92JkIoM3tUY3l0ZyhPeCVeUS9rNGVqL0BoeXZiTDkwfmkmJXVAYCN3TTFuP2tCRCglQSM+QHtGaGdXITk8JlEuTlNB'@;
put 'O2M5Vzd3KG5BZzY/flpJKnlBX3w1VW1HUVY1JHQ0YGhaPUp0OTluRSRuKUdPJk4qfTVhKlBlfHQ3PXFVRS5fW1B+Pj5oXVE0fFlrTTtDbCQkRH5uKThxYGUpUmBsRXlHS1hodHU6MkA+Q116TVg/LC9MRH5ad301YEpwMV5FSTlgajQzUWIpOWljIXNEPGExV1g8ViVKUGxpPCRdcixaJXpObjV6'@;
put 'P0B2VT9TQi9tY2p7aXZvPnJZVjU2QUBrRFJfIWZNS21APztyanZOOis1VHlpKjJnMiVRSUpOP1hgaHJTN2hbWWpwZDE8LnBOZmBJWztqZHI2NkQrUGpeajkqVGhTPD1bWWA4SlJ+e3s/cz9vQ3xPQ3QhNStZP0BWWEVxW0lsaDdDK3J9N1FKMSpvPF1ZTkhfcHJFXS4hRk9pfnpkWX1VYiRTSWVO'@;
put 'OTFedW5ZIn0vVyRZbillK0pwQDU6KUAvJktzYiJrdj5MNXl0ZVVKYFJKMkU6T1hsQT9de0IoXnxLamg5eDg/NFIxJWI2fVtuVDhjY3xMQWNGVDd3THZRYkF1WnZjTmVoXnN8PVd0UDorSzcuaWVhcHd2LEdlXUY3aT5pKlZ2JWRCQV0kcnFvR1gkPVElKDZePV5LTVJpeTJISTZyZztOek9qXU5W'@;
put 'bHM9PH0mc3oyYUVfQXtbbl07eTpqMVFRRTNIOk5SPXM0aG4zcXpHVzwvPWFyR3ZoUCxJVFRbNyFRc1daTkErXjVlPjJ7bTdvQ29VSVJGal1pZno2b0hyWlQxYVB1Nyt1LDVRPiZnJXFOZTd3PE4mbnViNDJ8REVOQ01TPTRVP1c9PWpaQmwwMXdzcS41Kn1qeklBQlIoUiQ/YGF1WiF5WTJDb05G'@;
put 'Y3V5I3RxV2Z8UjMqTSNDUUspekxlaDNQPlhfcG4lJH5qTk01c2ZDZSpgX1E/ck0jPEtUeT98ODZhQ2B1ZVIqMVQzNUZkUXg/MT96XklWUj8vc31RPkhsfi54WGkmW19UISRYRSZESVR0ZjtiPkBzPWpLRCRwIWFkVS9VIVEpN2EqWTRnVn46TS8qUk9DLk0oJF5VbGw9bUJ0KzEoVXRTQ084JVE2'@;
put 'cklucVFleldKbGxpeyo0b2BDRVtJIlN2OF9LdTlGS2dqaSVtPHI0MUNDYFFfQm56c10+PThwRV1ROlgqcFpSRSthQ2J5Kjc+QlIhMDtXaGVfcmt8SjFJbXMyImVOQjVbKzlKXipHbC9Edl1oRHtDdmckMXliYD94V3o9YDVvaH1NdVEweDU0MD9KYTdFe01ANjhgMjZpV1U4fUVSdUVoekgsMyR0'@;
put 'O2txJH15P0BSWyNnTStkQyliMy9WW1l9bF1iS3BCeCtlJURbQT4qNGBKaU9LdX5DZmE0NDleUF0pKno1cHk7Oz8qWlo6YE8pUl9ee1IsZ0tpR11CZ0dTdSxSZUloMyx1RGJBdmZUV0FGdU0heV9JMjRAZTU4RGosUEtjZHx3O35iXTxvODNHej9qajc4eUw1Zi4pYmFDeCNgUmxnO2hINCUkbmRI'@;
put 'RCIsUi5vPEddRiZgcEJXV00/JHtJcnVbe1tFemlKbHEsTDsobVt2c3RXMzJ2MHEobTZPVDRAM2NpKnlaLEhzbyVpSTB+bigkU3wqVjNVVW9OJEt5R2R2dXVyLzo+O006KHclcThpPFFsT29fRHBSIWxwUkUjJXcjKWZ3ZkdzOkBhUGgjSk9TWGFPYXdsQ0ZaY1VOZzNiRHxWKSVvcyw8b3FoUl9u'@;
put 'cl5NTnAsOSI1by85U3xGQ1RgNVprWVM0d3R+Qn5HY2s5RTRweV5FaH51dyg5O2V+NF5xU0hUejI3dyNyR2NsTF0uITFqLGM/fXRHQmF5M2lhfFVhRGF0NEpdcm44PGdsSC9sOmwvZGNveXsoQnhVTF5QXl1vNGI7O09eNTxRNFhTODk4JiIqZjgxOVMrOzAxZDR6ajNHZWZ1ZkdQRE9xQGN2RTFm'@;
put 'YWBUVmFzajZURF9FPXNyWiRjfllTL1hecGc+QG5XMzFLNSZZSGQ3bFdXdHFjd29GLj1pRnxfTzsrQiNIWWlAOlZ6eEMmaERwaFM3PHJ8RUVWXUxbKUNCP1M7SU82Y28uJH50bSo3VW1dX20sWEdSLF49P2dAZXpIZ2hQTE1RK18mbT9IZ30yVkA8TjlaQyJOTG45aU5+d1dIQFEvNFtMbE92ZVl9'@;
put 'U245ay9aNUVSUCZVWih4dUFWYyl3OW1DNjhtT3Ngcmw0PSMkbC8weSwzUmFMLDJkQ3c7IypFJWxyXjYiQ3JxZVRgUHgsXzoociRme3NFb0lVLEZZIT02MGs1IWslVCtpa2osQmVpO2I8SW9zQ1NQY2VfIVdYRmMuOENndGRmTkI8bXJCS3FqPG54dDFoakB1OnwwPnYjNFBSVTY4STtwR2lKbCx6'@;
put 'dG98SUJvPChnQHFtbDFmTzorcyNneCZVTGF6cX1UOWcpfSg/Xjo8W09hc2IxeXRoQHNgODxtY30pVnZwY0p2TDdCSU0qTEF8OSFxTHhNQztObXFbUXBGeT1WQj9XTlBXUUA+Y1Qifko+bEFgWGQ0eVl3MklvZm0iVVdDVjk+TEorWkpxTiJdYXk9JV99TWd9cntEWkRfMz1rdlpdIzFVKSlBTyh2'@;
put 'JXVFL1hTcWM1YS8mPCxWJV9oSX47XmVDN2NkZHlhclcsIXAubVcxPDNJO0Ahd1RmfXFLaSove31PL3Qxe2BTc1pYNzZMR1ZqcHBQajxJT2NFfW9ZaiM6PTEye0VifDZVSk9iU1A2YHpKfDNDSDd+YHtPUUddJFcqZ09AMSFMVVFqS3hiU012c3lSeTxMbW1rLlZYTi41WS9zZHpDP2NvSlBNUShN'@;
put 'Yz95QkRvVlB+Xi5+eUxqMmc5eHdTNmAxbzp5fWdMSysuWDE7L2wjS1gid35QOXU3SlREaX1gZX55VSR5XT5HXSxNLjZWbElsY15QPytzc1MrWkI+TW0ieUhHeHFmLi9QN29Te01QZkclPWk9LEk3cGJPMjpUOyp7LFR6U3k/WXAmXz5RfExTdjElY04wfUVtdFk7SlowdDVDR08qbGVgKHU9eilV'@;
put 'PHBoVXB7fHMvPH1rIk8oRGldeVFfNFdwUlpEeWprVFN2KXJ8Im5FU3x7a2tuWWhPOiR8aFQzQ2lzX3xBJHp9cFZOem9aPT4uVHAkLkw0bWNLWnc2Rl0kWH1IOkdCJiVEPGdMeUUrSmZ1KUdbdkV+eHhffG03ZyMxeng+SmM9NTV4ZUMrNlUsZkJ5RktsYnUrR0UhNCxVKEI5Nz5aeywiYy9CS09a'@;
put 'Py5XQVVedXR7Uj09UjZudGw5IlIuIkdqbDxWZl5zfXRRQzMudVAmcyRULGFaL2sxc2NRJiZtZUcyX3BueWsuVkhxRmIvNHhjI2U2X21dV3k2Wi5fOyw3eWk7ezFiYll5YX1QUXpQJTQrI3JZREB9cmZzJm5ke1p6a2FqOUhVe0ZmWGg0bX1bYUQySGJbck9zRC9dQDlIalpqM0d3ZVgma1pMXVpZ'@;
put 'YVB8Om4ubEFkel4ramk/Rz9kNGdaNChPd3shXVJjfSY7ZCtPP0pKMWcmemdNM11nMjZDRGVLZEFkOT9IOGhMKzgrVilqXUhqKj9udkBNZG1TQiNLZjhyVC8kVXdWSittN0UxN3o0b3Bnclp1P3lUWFllWDw0N3UqQm57dFFAVUAmOy9jZlNCOitLVWglRUo3Om16dXlgVVdMOlQvNkx8KXUhOyp9'@;
put 'aGNYaX5ubSU4OywuNiZoIjlpaUhVS1g7JD5OJkREa31iYiZvQEtVMC94YVI4IXNpTjsqN21OSXt0LmY+cCVVfSN1aXJrNk1HREV0Ujw1Xz5bKkUrVF9bKDsmZUIpaGZAXzwuJTlaMUpXaUplXyM/Xm5dXjBiNW0pM2lzQF0kQ0Y3U1s0Kjo+by9+OUU6XXYsQ2pga0V6Okplazk+T35RVU09Xzpp'@;
put 'RTw5VC82YDczRiN8bnBsdHA9ZVVnPE01YHY3Lzo1aEhFQ0xPSSgodFpHd2o/NUtlY3QqP017JnNgXUB7Yl46N3pnblRiS2UsJC8qSys0O01EI3Y9VXJfZV5jajdbb2pvcFB6QDRgLlReQEtfVFZtKigrW3x5M2gjUkxERVMlJCtNU1FRb21HaTN6biRjbCFCdV9sbEtHeWRzalhFWkY8ZjJyM2Yu'@;
put 'fkw+UTI2MmBYSWphSEdSQlJmUCt5QklmUVF1TVdgNVdYZFlGKGZzdUBHKlche2ZYXl5nV19re04ySkhvaXFQPDBETUcsY3NNNkhoWTJBJWtHWEZdYlZEWmp4UF1ONV1gRz02V2Vmd3Y0eGsoQko5QnZHTSNvK0x4TUpzZmsqXl1yV1hNWyNnI3JhI2hMWVVAYDxOTDNlOE1sc0dHYUEzQUZZaUAk'@;
put 'RSQkM3x+SWRjYEJtcnVFajZRd2wqT0N2bzduOTJmOmRMcnM8Nz5bNmxdazxjSEhpRHgjPVNlez8uOVg9JChLdWBSSFFiXmwsdSFUdz02LEIzKnVzNSRleWV7cnVBJGVQIV03aVVOP142XlN0Xm0rbSQzalRHWUMiWXRYOSRPb19mVXh4QV0oTmByaGJpdHsjTitgWmRxV1BCUz1sfmJaOD5wW3NB'@;
put 'XTVqRV4qJE5wY28lOCNLeSI1VWwvPTY6QGAoQnQzVGpZWmNWemlbXk5ALz5UYSw0THE1QzR5X1cuaFVAM2N2RWF1bkg6ME9+P3EpPU1mKiYmeVlwTjYoYzZfP001XnVBfmRUO0RKK3syX0l+NlYvRiFxSzVbXlc/WSNXRHg2R0koPko6ekZhPkI9RHpGYWtHM2BYWz1dP2kzXUBWeHhqQ3wxQiha'@;
put 'O2BnYis/ISMuRC53aTlGPSRAPG5fdH1LPW0yOEdoOXlWcWlqbDEoVEdDU3VHM31TV2EmNGg/YiRbNDhfSkdNW3tFNFBjWVclWVlHSHU4KD9yKmNDJjY8YzpSTT5IY289bGNFRUVoQnxkJGYreWspRz1yKUA4YVhGQ2IqMCxtJUIwbXNqejdgfV8pbkUjfF5keUN2Mj9uLHl3c0RZSiNaKSkrZSE/'@;
put 'Y14qeSVaT1hTQFVARUBSdkNQLHI5ejZVYyNrVyRFSmlBfGZrdW5SPGQjTTpOcHUmdWduQmRhOXE+JEtpIyF7ekVdbUphOl1qLEZAITxVeFRgVlI+ZCE+ckY/cCxwfCl+cTlLL1EmWCE3dmRnOVV7QG1bSFBeLlRmXVYvX11uI2NMaCg+Rkt5SHJ7NSRlVldFY31NdndoYygzVWl4V1BkUXVNSVAz'@;
put 'PF5TL0lyOFQxRHBAV1JjPkEvNk1MIjB+ZmMwV1hye09ffUtsWEFuUmtgJmc7RkRXXn15NkVpeyhMc2FVKm9STE5jdUo2S0BlfU5HdFNEPXZgNTVKajZAc3NfZCZ8K3V4RVVUNl5rXyklXjw6VEx0fCtmJmY/YXJSdT5yNHElJDdxcUFPOm4pJnlEPUVgYUxVRWlSPypXQzcmTzAuUWAqSjImcEcy'@;
put 'dVYycHRIPEdLW3E5JDksViEyT1lYOlJHZHdpMlFwcX5POk9Zb2JRWSlMenMvQFYmdlh8cl4iVzB+PzpaL2VdaTZHPV13aGoyJlF9IUxHTUtuSEhkR0ptYy8zejFZZG0pW0hrRiE8WWhZVTR7bnhIQTgsYW1SKC95Vm0vWyxyPSh3eERiRyVqbTdLfVpoeFRrbGp7R29EW314Tj5SY25IQHs+RVtp'@;
put 'RmBlb05weV0rI2tFKnghJjhoOCJdO0xfKFd9bjhjbiJMSiF+ISU6Skk7X0Y5e1hsUlo/OU9QZzEuVi84UjclXV17bSVDLzo5In1FNSsxNGt5KGE5b0JhLHgje14kcE9ZfT0mQzgmWEQzW2FjZ3ZGI0pPZHFbbzkvcU1KcU17T1tgaFRbX1NiNzkuWCpkPTckSDF8JDVBN3dEVzlvSjJ9JiJBfiEm'@;
put 'VChHNiF+NTVFX0RNZExGVVVGSz8qRkUsIURZVDgwTiFwOGdLW3laQTM2SSxXMVdKIi5bSGk8YGNlZ2ZRK1BGVWBqOHViUWh6TDRJKUh8PjheanNFfWlgWismOmQ4fWFWPH53XWlraj5oLGxbTTJKX1R1Ons6fGt7dzpVMXNEWTRrYjFyNUZzLmJCbiJXU254Okg9SEhmUzcqKTVtJlBTMigvX0U2'@;
put 'XS9BaTFnMG51LEtsaF1DKXBQMk5rSFFkbTR5NG5UNTwwbz1rZjcpJVZvMjphZD5NY0x1Qz94W35nSCtxM3ooVSw1UXclVmN7YFhuU3hfSjRTLzxtOmo/JkVgem83X1lFWUE1Vk1vNmJMUCM6N2kmaXx+RjhVZE5OYDJqdjMkW0lwKzleQFRWZylPWmBnIz9yMGNrZ05ne304Rj44bnMsTFcpWDl0'@;
put 'PXQ+SWdINE1DQk1+YF52aUJUMTJNSWlXflBkUFVYVFNLYGV0Ly9oJWdNS0kuNnROQzs/VGVbTTYiUXJzY2IqInVabmIhQ1pOUzE6NGJjZXhZSS9TRHBgOUZVWTdFZ0B7dk1QXUpibDErT2B9P2F1NjwqfnFLWUBCfDIhJnMoakhOfX1VSn59UHUiOGArfWY9PTBQcWYsQnhoYUxgcn5GUks+KGgl'@;
put 'Z2tlKTJaX11EZDhzfW5IeEJAQX0hWkxXOHMoUWdGZ2RbMj43ZHpsfTlMXkpeYW4xZjM1KXlmZHBRVFt4bFVNUkA3JD9FWWs8NSlnUl12R1BlJWI/MVkuQCFETFJoPWlZUyh4QS41Jm4ocixaZnRKYyJJe0ZuQXE0YXd7fkhvPnVpP2NBd2BTT2lJXm5JdHA7PCo9MDYsW3VZP1ghaHFfQVMjaGRi'@;
put 'PzQ3U2cqb3Q1a0I1ezNdMmRxJkh6Zj5TbFApSFJkZ0h2cmcpYF87UFFwdVs2dWJmUDJ5fihkKz9kYUloY2JWZDU+YUxvPmtDYz4xME46O0pEdDo9IVA3Q0QqYX1aJn1sXlNTT15bQEFZOWl2ayohZXcydFJIQlRvSFpfLC5TTHYuaHBQVVExTlovK3M6XVZvSF0vT1BjNlU+YzQ0NTs1WGh4dF5o'@;
put 'SnJCemR7Xl8vSVdpaXhwaTUjKToiLjxzaUZjIltWTHEhc2Fwe0NbX0d1RUlOIzsmeHEufjpLZiRGbT1dai8hPXcrQGJsRls5amh9OWNSZUVNSXg8SDh4XyxiO04mRCo+XTs0RCRJRVtZaEEvJXlqNTcySXBDL25yJXZ8cSZTKFp7NUp7TEtPJUs1Njx8fUJJI0pgZy9hcVZddCxEKCojL2pVVlRs'@;
put 'OjVTb09POGkiMFJUcjU8cm5XSSxtQ0IsKnIxLzgoc3s2OyxwOkowMlB9NFkwMz11Zn13PGpBYi9pbXREdG90MWo5Ny93XT9CT0RORCVzb1VpZWVxSENTdSZYQHYyZ1FRL3ReYTByIVlaRj8uQkZ0dGdxZnZgfjA3R3N+IkdlUlJRcCg5R1diQztDNGUsazNNVmYlQmN2MEtYNks0VzE1LGYzKT9Z'@;
put 'RzNvK3RSZjxIdi5IUmheeHB6OGNTXjxFOCZ3N1Q8JDd7WTcsUEM/M2d8YSZ3K1NvWkRAV2k6RF5AKH1qOjp5L0RKanhaaSVoITkreiZ0OFdpa1t8ZXE/bi5GPT5MLH5iNnVwQXg5RXFHPyN4LkxIW0k2fXRkYS5JRHxLeUI7V0lWMV0kVGwiI01VeiRKTzUzIlU5OV56YjNESmxAQn09QyF8PU8m'@;
put 'ISpjTVAmYzkmRnFLc3xHJkVFW0NGb2VJL2Q2Ni5Pa2s/bUteJX43ZGB5W3VTMk9KTSN3QEY5cztqUCxwP2AlO1ttYCxrL2ZkbCk8cSk+bmpvTEpFSnozQi4ydHlKUztLQDJPTkZzaTB9JH05Pm9BT1hiVDduKW17RDNSI3dqJHRjODJXQGxXaGJRfHZ1cSt1az52NmcjKzk4LHJaTDkwS3RvKylG'@;
put 'dD1DOilZI1hjSVhUUGpONz1bTzhYTGYlUTgqY2o5TGRDOVFdMUssdCsiVzpaW0kiYHRKMEM4K1NeTT89eUNkc1lzYCJJO2NKdXh6IS9tSk04Q2RCUW8jJXZDUE1NO0lMdUg9d0ReUD9RK29ocSRfKzxMfih+OWNHclIpSiFqM146PDlScXBmLnt+ZjphZ040QnRZXWpNcGU0WG1FYU0uc1hoTVhJ'@;
put 'Uys+QVcuR09sQmxsSFNiOX5XYzFQfUV9TVphKXY2ZzFYW1tEKiZPRUFISCNgck5DKV1uYjhlRz0hImc8PC9odDhILDI7b0pRN0k1V3RNPVlqa1JjaD5+LDdadiVedigxI3cwR09eWVFwfGRVIlhDSnpQOjQqYzg2c1dJNkprYyZodDAxM0JiPWpNRTszVyJMbH1sVGs/aWJ3elM2TX1ffEV+KEg4'@;
put 'bCQldEI7Nm18YT1AMVZART0yeXZGUCNCLD4lUz9sVTRlQjhxNlN1TyY6QTF9PFI/VTB6bU1EM0did113Q10rM1Q6bHlkOW00JnB2ZkA5SWxnekdiJCVYNl0iQjkwQ1RJWEpBd3F+NHJJN2dFW2oiVlAsYlszV0MiXlczKTxoZDwzbnpbV3AxfmVgY3QrbnghbXJTOmh5NjQ4SCMiJDUyMDlvVz44'@;
put 'Kmg0UEI4Nj9Oe0MiQ2RocHlYSV09MVBqdEc5YUMkK09qOUhUM2lnZXhqSy85c2VhKnhLKilAOV1OejR5RytnNEl1SSVdQTFFYUBNcCtQLnpdMk52KE9rfEQvbWZNM1ojZHxLJigyay5oVDw8LCFJPyRzd1RWUTptJmthJmtrZ3JMU3FxNDB7ckVffXsjPSl5am91UmlRPzg9VWwqey5jYy5CfSFG'@;
put 'flh+dzg8XyhCX3BbTS8rSDQ2Wnp4UkQxdWJdbEdebWVXVSR6WkF8LmBtdV4raHZvSVZFUHxPKlpeKD9pJGQqKDh1QFl1Rm1FYlh8bC82XzJCUF5vbmhaQjV5PHtBSTpubjE7TyU/SjswMDRzYDxMJjwoMTFNXlNQLzFpZUE/M31fQWR7TmIifTtdO3QxQGNqSHlUZyldXWx1MSNCRD93dDMxUy5F'@;
put 'YHQ7TnE5fFtASH5MJlMqJlkwZlhnS2pmQiZ6MGxFJG16RDRITUp4TF9ARnN5Ky8mTFNzJU9UKERbYz1CUV5hJFJBQTVKY1kudUZibD9pdDBQLDV0MWgkMTx+bi5II3tCQ2VDMEhqTG97WGMxe35nXm9LVUsyZGxnXTI3Zl14PFAzOD5MY2RRWT80UGhGZ3RKRV96fTBOU24ofGt+VnJNfEU0Ly90'@;
put 'RVElQ0I4PlZkelF1VzFtQGQ2TDlTbWJ2KSFoOVFCd0lrLEBQKywkeUNfWHhpS2hWa2huM2tzUnUyX0llKnxefiJ6JExBYkdtT0RfSzk9T3J3KEtCe1NuWEBUe2VgQDswfD0/TEBpTVhWciF6RjB5SVV+VWhKQyREVihDT2IlQVlqNWthOSxTc3V0RWksY3F1LkplSDRDPjF1cUU3Q3YpYHk0N294'@;
put 'NSJQaVhJM1Y+QWtpdCRfOmtnbSppclI+IzxTfjNkfnZNK1RaVmFeXyVXfnpkeV9dbEgqUzFxUU9aUjc0cWtATyxgQzgiWlFMaTJ6ey93TVEycW89aXlxc2FDclhvTE5SSDNYJXchdU40Nio4RjRbdzFAeWh9eFk0blN0cmNbeEY+L0VWISpYPV9QTmRzS1NOOSU3W186Rls4TGUkQyl7KUh4azxR'@;
put 'ejsiUmZDUjA2b0lDeXN8d2pta2NiWSlSNVIpX103VVMzTShWdUh5WkUvVjY0R1Q5ZGozN1lEWHR8T1ljUHtxfGgueXUwIn5tIiI4TCVXYUJmbHhPP35yNjYwLmNgQFFPfmk4SU9hNWM6KDJyfXZWVEl3ZyYiS0AhZGBNOlV1Q0x6UUZaQD4zOHE/YHFXWmohby95OlI+W2NZUzVHXilqblUhRk04'@;
put 'Nih6JHk7L25vTTR0I1d8cVAmNVVbMWhdRk99XkFfSz93UWRkSyUqJmlkfU5MJEM3SjhNblEpWjxiQUYuMGhFbj16aXx1XjgjUz83IndFSyUmJlkrTCVeTTpvYF55dCNZWFRZP25wc0UvZmJCRztvXmM0a25qVm9GPl0lLjI4d1lGQCN3OFo2cmdaS1BkWVVFS2IkUTlKW35AMi5EbUcuY2kidFho'@;
put 'IjoqTVhMSyVVbiN1cTtoPFlOZ1YsYih5LDZjNiYyR0RITGUxXzQoWUx9b1ksRVNCRVVVLixwZXU+IX02LHFML1A1Z0BqYC96VF9wLzc9TlkqWmo6c2FSNyIrMU1iNiI4PEZbLkw2cyhSYk5GRHo9Yj5iejhrXyZUe2E1TkBjKyhVby81OSY3QUt4T2l6Wjp9eihVe05jR2AlM2BSank0eXFZMyRe'@;
put 'dV9PUDFrSD1AT0Elcj5TQDAmVSsucTNhZk46PVskW25Rc15JXiQoWlNjOUhlIURjZCJqQiI0UWVUcnVUaEx1PE1nWDVzSCMjfDU2JXp5eiF9Nl01aENIfVQjUnJvPjlBQ3k+VVBjTFk8NWgkZk8lJTwhKXojMj90WGpnJjg0c3JDVy9rMnNiPldVO3JiNVhoX3J4X1J2RSF4U0dFKWA4PiZTcTBp'@;
put 'WCsrZHdgX1hpdz5XLzs+LHhrZVVKR3lkJTdISCVKIUZFa3AoeVd3WnZtdS5dc28pWGRPODZPVllSTEVLcVoiekMydn14dF9bQk9rSDErJVZfNlZtYypuV3ZQUUd0N2l8ano6TTRQPGI7WVlANjxJMiE1U0Q7OzJ3QzQ9bl8oU08jXmZ+RSZHbWRIaW82WjdaeiljREZDTVcpJDtDZSVSMzpjTjlV'@;
put 'MnokNTl4fGAlfj46WkFdQDRZPHxIaE5WelgvSH1qdkhieV08M19SajxeOFRmTXRvWElYOXhBZWxGZFFjIkxOXjFsTCs4PiJXLn1aa1BxO15zQERyJVFfISs8LD08dyo9dTltY0BHcW5rZXhmLyNQME1UXjh0YGNMbW92KW4rfjpCdi8ueltAUnYwOktndD8lO2g7cyV6SngsSFBfQkc8OllyI0cx'@;
put 'ZT5ycV5hLFttdlljaU1wKHk4UjdyfT1UP1IkYl0xKmp5NFApMnFYdi5qJExLZVdYZVRXOl93SnkzQlFZejo2P1A9MWY6aE5iRm9KLCFoTFU7WHErXTclVXhDQiFhc1ZPITl3YzF0ZyMyViVuMVJAV0I1MT93ViFnfVkkfkdYUHFycCM2Ui54UGRYW1BbaTh+OXZwTD4+dWJ3blNHaitOSFthUUBX'@;
put 'NCZeIzJTY1l7enxFVmh5WkhqbCZbT2VpYmtaNXUqZTo/fV42TS9teyg6TD9oe2FHMiQ5cm8vbVE9cDouazBrVyUzIjBINiRfOSovM3cyZ0c8UVQqWyp3cEZLVWEqY1dBJEZbbSo7OT46QHJTVUolOCg+b2dATUElK0R+czxzVilxUEtjX0JUbjZMKmksX3w9LiNoKytZTEZERV5RdyNKeD5jSGBE'@;
put 'RygjajAmLzElXXA+fUZBRFRRVCpZfj9SdE8uRG9rZDRqKyUkVjwxemI0WCs0aV1CS2VuSyUyUzVzNS44dkhIPHhkKGZpSjxJYi83Q2Y7d0I/Pz9UPXVXJmYsZCFyPFJjTG9lSEF5Q1ZTLz1HQ3lDI1E+fVEzbipiZyhmQjJvMD44bSgwPyRNK2ZZWTtNTFJjVS5HbzpecV1UaVlyQ2hsSk5BOVl7'@;
put 'TzIlTkRpZjZKUSg0IWAqdVt6JD0oNlQmMTVQeGJDaCNtSHVnc0I1QD47UzgrTXVnMG5ERT8hKD5fMlswcExGdEZsTG1JemJQdTpOJktHIStlKGg2OCtFXjRwWWhhLEd8byl4KWIzJDUvQzRMengrUTVsfllnZUMsYC5WWzs7NTRzemh+aDY/MGJYUDxtcUg8fj5uIXRAWU1zRVR4Nkp1KSM0LE9H'@;
put 'cyw5fkRxSmtAVVtoPSkzTGx5ODtAZXZHLzY1ZTZ9SENjQzFXQGh4VX5Nfks9JDB1eWJsOldRL1JKQTwjfXs6PzhkWjI9U1I2dDBRaHZwSmlISVpdWXpHd1NYXzFESyNWSE99Pi41eSNZQEV9MHxjQTd5X0x5T3QueERRYU9mWEg2OFljeXJWZmpeW3ZuTF5gQlhyNV5mXWMlYGg3VmlKYGN3WjR5'@;
put 'UWwqW2osbzhfdT1Lfn5JaCZpeWc1PDA3RSpuMjxuRGgwaipQU19Xdld8cV5fODt6JnBPUTpRfnMhcyRnQkdSeDUrW2AlKmBjcEJwK1QiYXNBXk43Wm5RKEMjTDVWXVdML3dbIiNidDVgPkczS0BhaSN1RCs+OzZdXmg8SjhZPGNrMGRQXTN5fmYvd11gSSQ1NkBSeylae2l2cE8zTzpRL2g9YUMv'@;
put 'biJ0cV4pUFtoYlsjYj1Rb309dHtbRjc2R0VLM1dlOEJPU1kmSVdgLzdpekwmJEZLczEuN3xmbEo7O1BnPlZkXTdqJUd2KHtpZSouWkN+OixFZEhwP3N+MGxwZX5dLyVRIiEvJnJWYkBVan4uU0ZLV1J7LGJNLm1NR1YzQEFFO0YiQlZEREsxKCpiVDkqRkxBXUNqKyRxPmBrPzF1MiwmTjM8QSVW'@;
put 'b3luVTlIb2goWjImZVRIUFN0RT8xWiF1biNdZUQpSyxxYTpzR1FwNHBVVilJZTgvdD9IRU4udkdvKU8/OjY3ZFchWV1vW0JQWjpkSX46cWJvRjkyRHdIcjovNXlSTjhhZkBHM05COWtfTWtSQExKXzQiWk02IT8welRJMTJBdU14STRrfThJO2YpJChTRUtqQjFURk9aZSg3fXhUfUFpUnpgQGI3'@;
put 'SUMiIkJNNEIhYlkzQnBKcjghUkRJfGB2PHYoZHN9a2ltTXlxLlsxaWEoUXcpcWphNWZBeEJZKVRyfFdeQURYLjNSNkJbL2dHO3cuciNfU241bkIkWmwxZDRbTzdZTTA6PFRzMmphLn1tbCg0PzRjIU49WGN0Y0QuJCFULy9URTlTIVtscnQ6Z3p3PGthV1puPDFJb3Vkdzp3TmA7azooPWExR3NS'@;
put 'Y1RUNWB4c2Z+M21RVWRpfGd8UF4qKVtgPDc1bmFTO1J4Y0dkUT4oW3R1alZpdCtkVUFhb2RNU3MkY1QuUz52QUFLQjl6QUJda14+fk07UE5JeWwqLz4lW1ZIb21lQXdvPDg9SE92N1NUeiRNeyFWblRiPX1LVz5QNFcyP2hfbXFZR2cqcGIwI31HWi54YTxbaEJOb3c7ZlBeNjV2fTtUQDM2V2dO'@;
put 'InVbNVZAPFYkWWc2b2JCUnMkPzooeykucFpoJTRCO156RU5bL3cmSS45YztJSk9uQltHSm5OQihUR1E9fEw9a3RHZ1JoSylhcnFhUyZrbk8oMSRHY04yflQ/XncmPHkpMlFTRmc9SlBzKy5SUXtfM1VAZiljWFN9Z0pTdUI8WXJeb09eMHZNLH1eUWZOPFhZMCR6Om84SVNAUiEld3RHLFZUWEtw'@;
put 'dSMsSFRiOGl1THcufWtuKXBJJHFsaXRePH1ybjVLZW81cEpzOGlhMFZodzZOYnpaSDFsQTBjQ0wwYyhjY3gjdGEsc1NMfVZYa3RrfUl+fWxvZjdKOmdHPn01ZCZfZDRwNUlVSis1ejc6QWlYNUhGSG4wdUw/K0A+MUpZVDFXVF41UTQ/eTVAbWQ2M1dNLjRSPEVxaTlRQmB8V1JWfF05N0lTWyx5'@;
put 'SDBeJFZyZkVOeDw2PzQ2TT1GTU1IQT5hLGNrXSxFMG1ZMUN6emR4Y01HeUBrPSN1dipAY1g2ayw5MyRuJjZpcCYsZnpvcnk6Qn1hU0BeIjZbZnhIbndmfkMiKENBUkE/Wmlkd31JfXxIIzQodldCMERmOT1AOXpNN24yYSZAdVo0Lkc5JmdYTGdFY3lsPT9WJjwlRXgxSn19aHBvIVRTN19mKmgq'@;
put 'cFZNfF5WTGx2ZzdHbnowTntlOkUjYmBWclt5ZnYlPkJ5dFhFSEFMNVRoIVEwRUI1eHpwTEJ6OjVfJTZPK0RvKFdDTGdia1ZgfH5BdUthLDJ4bE44YD5BdEUkTlFlUExwZyMvdSQlYjRfTFpIT3JUKzpCX294Ukw7WE58UjB5SCNgcWYwdlRqJGVheWpzQmBGOml0c1piYjlaamZINGlKcCl3ZGg4'@;
put 'SnllSmg4RFoqNG4rV3xhR0s6UjwrSjpCQnQ3bS5TOmo/dkYyODBBInU1JWdnITRmfm1xfGs3KTdqUGlkdENWTUIkXyJMNDFCQyM9MWBjezlXaXs4KDhNXiNxYGBSPlRrK0hlcCIkOChQelt2JjswMl9iS21Renp3Nl0zJCUkcXE7dHReajQze2p0dXgyU3lhOU10Zyt5KUsre3hAUls6bXxUMlNQ'@;
put 'OyxRdTd2LDkzWTlAL0Flaz17MzUlV2E9RVZ4PjREZUBhazQ2Uk9WRVs4O21ANmJ7MFFWNTNoYXZBYzZFUzlQJk8xdGNQKnhrPEh+Ul9iREU0JFFjU0BOTChDJmF6Sit2Rk1TLEdZe3ZWRUttWixnZU1gLzVBSCguQ15CTFUuPihDTWRoREk+NjZPR11bR0J3aztXP2VveGdvVlZTKV5eOW8rfkxI'@;
put 'Xl5LRSowbk8wfVBsYFRHR31zWzRSRjEzNTpJQHkhUWJjJm1ATXhBT3hANikmJGtzOl88dGxtXj56STFCWmVobGZlfTBVQnVEK2w3a2prInkoWnVTOjdaZXZwR09zPCk6PGR+UikwN2p1cFo6bXIlIixvNTdXKCZQLFApKDNKKHswXVBTRXx6TDl5SjReJUI1UlJjfChebntuQiorfGhmOlBKMSlw'@;
put 'czhfRlkyNiN+YyxJMC5pZnovXT1panE7KT5WW2hsfDtDWDw9e11FXU95PW91WWxdNUlGIU1JV1lIPm1sPXU5cjQ4dzIuXVM4alE1LDlnZ3J0Tj9aV146Nl89eWdvVzkiNW5GTnsrUFNdamtYZTMoTnFATl94O01Vb2lQbGhLUV8rbGdlMFNWfTp1d207IShLP3A5ViF9OnNucSkxT1pELCtsI21P'@;
put 'L2gyWzUpO2x9cTBGM09uOjA6KVREUEk6TCE3VEV4QTR3cmd2KDwvOnx5PntwRk5OQy9OX1hJPFtXSnIvTXg5blt7V0VwYkpfcls9QCo1SGB8OjA2TzVmWmg0WjNDe2hPRGQ2UnJ9NjdlQyQ4PTdOI2x0QVQ7Syt8dV5KSU94PU15V0J4X10sK3M3WiEvfVMyTnYmT3s+am99YyNCY2RqWGRxNWFM'@;
put 'P201PEhsOk4qeVVLTWNWI25BUXk6NSM5LyZ3c2EoRnxyOGBLPldxe2VoZC8/Q3tuczswPTJ2ci9CPmh+Kz1jaTFaUHMzNSVybyI4Mj53KkRdW1V0VFdqRVpjI0VTIyxEWml8JGMoVSkvdkRLN3xrP3Q9fF0rbjhZKnpNQ2N3WilkWz5QVFo8P1Q9fGR7RmlTJHZ0ZFVmcndAakNnbTFOZ3MyKHFe'@;
put 'ezVFb3opdCIhXmRnaCVhYXs7PGZ4aGd9aWtwNWA9PihDT0dDQ1BwbXk1PSszaHUiPnM6YSRGbndZTl5ib0JNQmhPVnpueyRwXVE7TC90RFQ2dUJ3Ii5dZHhTInIuNkhgTm52XlZzSENgPzFlUmw8fTMrcWZkXV4jXyMlRmtfVV4obCFRVnhbU34qUF54OVRJckE+aT5Ae2hbX25JZld4OXFoe1F4'@;
put 'LDlWVDsmI0U2UXp4c2wxb3NwI2oiaHMueCpAZ2xkJEloOFJOODgofjNOWmpUTSo8VHd5MSkoTD1ocWNOK3pqQy9gPm8oTVM2UituO3FCV1M0MyRMbEQ2ZDRVVCV0aFMwOy9SREQ8JDomZiFaK1BGKjZoI2U1PiNqQjs3Q2RDRG1qVEZIMkMzUFpBbWdMI25WcVVpP2BTbGhxeldjd19RdT45az1v'@;
put 'aytzWGMzeUtLNWhMRUouPWUvNUpTIyRiOG5FSSg8VVpyVks3LklxeVQraTc4ez5Ja3xKNk9+Sm0rdHFhSFd7bT1Oai84W2c0cVliR35KZEBWVm4kdV9KeSxbV1VBOlYoZH59OylXKClNRDQ9TilhYzd8eDNockl5Xzo1YGdKKz5uMzEkInZdLig1Z1d7eikkMk9HMHcxTGtCYC9mTnQ0Uk9qamRg'@;
put 'Izk1ZnZ6X2BTfF95IX5gd3ZifjV9Kkw2P2wkN0JRRyQzSTYvN3xHYkM5KzYoczZQZnx4biYzJm9vcmohL2lieD8sPlA/Knd7RVNIaDR+OHY2cWZDZ0BNPzJFcm0hZltWLFJFR3hfLHVXRHBYbmhKW1pIeldLSTs7dnk2LE0uSDZjXXBPcDljfk0+RVlVOEZKJkB1JC9teiEhPWdWNURPKlJPUkQ6'@;
put 'VENkWGskd10uYWZ2dnBOYG5bTkk4O3RdNSNJa0EhK0RHXmkjJTcxSjw3P1ZNP2ZwQjwxP05PMVVRMF4rZXF7fHR7PyU1TGNaaiZFUWp9WSV+YzJucGZje2duI1RfVyhuKVNgNEBgaDVJbWM9UnUmNWhTY29sbixdUXgwRX1QI0Y+ZGg1SD9VeD8oTnJHQCZUJCpCKS5JMSxHUm1HTUlJQkk0RWd2'@;
put 'RS88dSFHSCNiIUBFX2dfT3tsX3wpdmdpS2lqLkI2eWBHJDM8TG5wcFlTbysiNEJtYD1KS1Nsa3R5QjcqeD8lMT0wUXFDKndqdm5OcnN4WlYwXnAyeFZ2dnAwdC5mNDI5bmNlQGZjWHltVCMqTyU5RGI7YzR2WXAwVHBJSEYqdzc1Y0VYNFo2L2pUbzE+JTEmW1ZsK0JDQlY3Iyk4RFoxNXlVJXJv'@;
put 'T3o1KCpZRWxmemZ6eHplYX1JKkd2eyFSbCNFM0dxcmgieXFAMlJ+dys9SENKISE6Jl9Wd1goQE92UiR9YCthX0Q/MjsrNkUpWmpCUmt1aXpEL3xSe1VdR2dRPikmQytFPCReUWk4Z2pBZU0jP3FZSioyU3dfckF3M1M2SCxFXVFvPFRBM2Mpbm5AVWpuRjptdHplPTMhYjYmMH1GeTZLRW9UM0VM'@;
put 'R3huNkYvXy9JQFMxY2JXOE0rdnNsbEtpL2JCRzcqS1F0YzU2cVZ9UCwlT0FmW0plPCJiTz5dd2s4Tjc9LixJQztKK0o/QzldXnVXLGlgfD44RlBXPUY6fm04NzBwfkx3d2p5UF4kYUtuXkFRVT9kNW1YZFZiJEo0VnkkaHxbdkpZIUpra3ZvUFVFdFBUXzRBWmV8fW4/UFRRb0Y9ZiR0eTova0Vn'@;
put 'OmZpMGVCQytNPH0oek4yPDNBWU51Mj1oSDJNJj15QHtZfkw8YSZWRVpvcU13JXN6L3RkVTRuUFg8SVtELjY1I0ooO2wzQ3NXTix6MVVIdFtlUDNlKTozUipSfCh5WTgwNEomZnBhPSNNRVNqflpUSkd2JHZEQHB+JXQvcjhyfCJFMGQ9QFkkKnwmNl5zP3dnOXBrcVphYSJ4PmB1OU5sSmVJZSJd'@;
put 'W1J8OS93emJxIyt9WE9hO3QuPXRHYSYzYi5tO349cG85fTspP3h2IiQvLnVDNTEpQjVvKzNfLChFbj1tPyVKTF5HZVdnNXBvam4wJXA/ajo1Tl1AM3h5PX1KKDJTUHs7Wlp2PGhGaDBEYi97VCtiM0cwZ2EoV1pdbDFgQz9PcjRoLGxeXmhTZz9HKH1DMS58YHdKYXczbSNlXTZeIyJxb19QNG1g'@;
put 'Q099IV5XOCFeS30+RzJybTA8NVZLQlk0Myt5UztUZHRYUWw1dksiXl97emAvSioyb3Y4VVJ4eilBO015KWM5UlR8RzFbMCZxZUQ/bjtYdiswbFp+XjAjSD83Lz1iZ2pNZFpDYHE3KFFBJDNeYWkoakpvZHZ2LFNDbTRwVWlwRzZsNVReZVQ7M0c6PE5Bb11lc3B3K2dCWjFBNXw4Q24oZiRfRkkh'@;
put 'JCsreUZRN1s+eD93aDVrU31YPj41cDA6JTpgWkBHe0dALyRaJFM7IVBvKihAOzI3T08/PGtCb3o9PiMsNFY9UVBdVjtRfnYxYHtoeC5YZHw1QXhkWVJQSVlVcUFLfTNBZEo7fEMhbG9IfGJ6SE5ZVG59Q2xwSDAwW0NDSGk6fGk/K2crQ2EmMk0vQk5pSmssKHgzfFg+Kzp9Q0dQdSIkTGtHVFpY'@;
put 'fWhpZDdIL3M9PFVRUX02YWY1SExoM3lQeTB+Q3U3RzplfF5tJWxLOFJdJXdDayhrMlJYLFp9ajRbfEBFODpSPWxSVHsrNipRI2xQTDV4PSRJM1RTIzwhM3VFMGd3bSw5PEMuIkl0SVFqajJ7PCNoZkE3L1BiaUV9dDl5O0UkcDtVOF83Nz1JTVJ4czhbVjx7OG4sME9HPSpvQyF2LCphfm9uTDt+'@;
put 'OXRnViN3WCVCQSNOKSw9SkopNltTJm52SC53YCFGUypbfStjVzRmS1pCaSRhRU8zWVdCMVMlZCJDT3FtL3twLyhRJD9FKTJrWXJjaiRINExWJWRpOCsqPCRsWFJHQzlLUSEvOTQ3MUpuOkRRenZlPztZI2I6K2FyJnBbQVRCUX5xb1M3TjlILjBjZkBrJUxgK2FPR2kiZlVMPDApP1pxfUpDQilV'@;
put 'cm18W2oreH06eDVVKTl8PXlIWHpbQnRJd0R9TXhyb3RvS3BuWktnUj9OPHt4UiRifjk9eVY9azlKM09qN183aW1FRkVpNm1HRFVsa3N9SWNFWXNMZVtnZzYwWWU/fE86UWZbMWRNVVY9alQ5IXY3fEEwV20lfkFmU2t8KyFZeT5iN3Q/YmdpTFlTdjFVc0tMdiU0PnowNVRydnE5YjR2WUUjLmhx'@;
put 'YUV6ek9TMWt6NjksWTVLdV00eD1DUHB2ZitQTWNsd0J1clIiX21jcnBjRGhhRE1qTEd7VE9jKmRiYzJbezozXzFGUk49Wjd2SUF9fHRUTlt2Y3ZLVDRUXWBJMGR5VFNETVcwVF95YHFCOnkiNz9TNHV5QygqQltbdkolMXloNnkrQFZSdnE8eEg3RTYyN1M1NSRkNVh4SkxzQm8se3RLPERWcTNI'@;
put 'U1lMImdBJSY+JjVQTjM+WmIyYlZAKXc6R3YqWXY/eT44Q1o3WFB1UCgiSH1Rd2NpdXJ9S3JDfXg1TGRvTnUoPlp+K347bF57VHdhL0pKK2UuRE4wUG5wL1NPfWl6cXpKO35HN1JEXnd2e19vemZTYX4yRTU+anYwUlIxWyw6OTRkYD1pNE45YyNgdVJdSkZkX2MwfVhZUUosKng6UTlqPF5VaytP'@;
put 'QjBFTGFdM2E4Tmw1cilYUyQ1UENuJVNtZHFDRzxnL2JvRml1dmsmYHlCQEksKllwT0UzOzhYfF50Tnk5W2VZYnloWSwiaTxbKi5uZTJla1JAekF3LGtjdHc2YCVEJiJBZmtIV3llbEAmazBSYXt2fE18LEsreDtCNSIweCQqVG9tcnpYLF9PIkR8cFV8ai9GXyM5aiQ9RlJXb2k+VUBpZTJfNyhY'@;
put 'MCk2KG1NUSY+YEh8e0o/WjdSKnQhOjgvVldFLzJXOWtLdTxqdGJ1TFM5SklGNml1e2RAPW9ndSUoO0FRJUVpYS8qayhxTSFXMS5hZlI4ZyZmelMxTnB2Mng7NmdtR3tZMSRXVDRLdFpEKmA6Ql4sdnAoIldNcU5fOiZIOXBqT2QjfWJCaUBDSStgM1pfN3NTTn5JPXxTK3hsOVlgZXpvcjxTYW9L'@;
put 'R1gqPDguSWJTNCJeVjAqLzprLyVZQE07YklnMn5vVXp0IS9zYit6bnRCPlE1XnV9VjNYS2A/ZWM8aTA7UEE3P05FOkpOITU2In48QkRLIUVSZUkxUTpUdUk/SlIqMU5WMCNweGhzYjYqTWZdOSgjZUVIaFJ5YF1MRilOeGd4YT40PSZVNVlUbnV3WGJYTFdaMWc2RSYpSUFKTlgjZE4xWiw/fG0r'@;
put 'aV05WG5vQ35oPVRHWVFLajgvXlJAZHFifWYuVSJ9V2M/cnJSaT1YamM4LldrQWNraEhuW2dsXUIyVC5pbHplJUg8I3lQS3dSU2ksaXpHS0ZxNz1yPGddIkdCK34vR34+fU0zRnVtMnJyT3J3PGZ+OiZYX31mWHk7VkpGQXBTPzYlQ35pOGZRITloSnxUK2Akblk0b1l6VCx5dThbfVBffSJybUE6'@;
put 'VG1mYTJnbSFSWkZwUWJzOXRtSUB4NHhqYEk2YFpXdDNoYS99TFp+IXNyNnpQKUVrdG9CYm1wMnZNcz1balJtVVE5dSU7Z0leWG10KlN6RjVoc2tdXVtbfU9gPFokTGZtTTVbW2E0P2w0Zzg0YV01PnYhaV4icktwckVJZkdUemZ3a3VMIWpucz1FKF1QeHVUZHpvVEMyUnUsM09PPyRuRHk/dmNd'@;
put 'aEVeS0VpISgzMUVdWDVrcTBBUUVIREhQaj8mbDNZdF0hS086bmg8e2pMVVVJTSZOTSlBN1ZGJk1fZX5SSHVsTEZIUERINWQ6N3BTTUlZXztjTTZAeylWND1jXWo7bnNnazVNLmNvbnsqKHYvJlB+KjRQd1NtS0xKRn13VnJyeG1LRjIwWkhyU3FvS1JJOXxocmlfdEZ1I1JlNik4P01OaWFmZmx9'@;
put 'c3FGLnl0TzlZayRLeWljXSZxWVVrTjBsYDVtd0N4biVCXz5gVSx7fE9UaXBOajVme2ppWzw+dHBoP1dnSi96KzJ9flo1OkleXXQ4MjxSLHUvfENSKWZ1RzlEaiZTKSQxYXVINyElR2BUOyQ6dXh0X01zOFswRn1NNWNjTUNHdVR1XUg+dSZZbEsiWEpMbVEhXUN8VF0/Ty9HMlE6aTRLQmU0RFky'@;
put 'YEliR0hKIVMqW2VYNXJ6djh9b15oN2s8Uy5NNTg6Ukx3fERkLE5vdVVpN1QlVG9SI1s6OkZ4UnNRangpNzlXeiopQzEhWT9NLisuQFhhbiV8RDxkc300R2hkPDZ7RiFdVW89fW82M0BeekBFai9OQTI6SWlbezxYViVFOW0kbnNoKyxRbyRPPk10UHBbTjM+STgvP25mV2UoWlFSPSomMHhRJWJA'@;
put 'TSg+b08weH4/MEorRWRVc29KL2xTaWpiWTkkZXRoSmJEIldtb1BATyNAYmw5JSkua2NETGB7aGNlVmA+IV0xS2tnU2k1amgvWiNAWVZfL15sQGI0X2BHO0g5eWtpPS5EcUBLI1p5SDh5eXhAPCZ6QyVGTm55NSkzVmIwY2x5VHJgXS9BRiJeUkhuZnNpRGgpS1hVOl5RZ3ZDY1giOXRKTiVrbFM2'@;
put 'LHtTKnkxQlt6KEZYdiMkR0hLc1NqdnJwUDpHMXFfOiRdblo2ZC97UStkbmA1JENTUmtWMzRgZG5pa3pLZytpeE5AMFNlUF5rOH1MdCQ1PlU2WDdXY0QrZjc3Ynh2WTIzUDg7ZyN6Nk83ST1RMClsfHNuTSFAYTgmSUU/ckAwfWo0Nkc+RWUqKDZXVDFsRlgwYGleWG44YWQ5Q3kvaWs2bURIKEtN'@;
put 'cW8ldTdmIVM3MUApNEsoV3NbPFAlOzR7I2AyM1oiIm59KHtAPERCTW44LygpWnVZfDpDRURkR1o+WyxzUlJWeStKUTg3e15GIV4yKixyTWdlR2loMmt+JjteSDpAeDBpc0BuY3dJamR1fkdKSF8yW31+YUVpPXIjVXBpZi4wdGd3RzpYYkY/fkJ6fVg2eyYuZlBndTRXZ2Z+bTsjXUA0ZG9eWE1n'@;
put 'alJOdCl8PG07ZiFUbVJseGEzalNARWdSZjA6SnUrYGh1RFF9LGMqeyNuL1RUdF9GXys+REZ5aG1ZSkZ5S3ByKVcscjt8S3QidCloc0B0K0A1JjpadGQ/LlAxTmNjQngwNG42dV1pWERgWSZvXjQlYl1vUit0amd7aC87JXBVUFRFZnNaYkI3XklDRUIifjxAOXVnWF9Ve0BWTzYrenxXWHxxfmBo'@;
put 'XjN5fm9QUSolYmkiZjZZdTtGVltOJGhoNls6KSVpKUwvWl8hUXViazQsWT1DcnVUJix4PmlNQ1VHISwuP0prW0VxcG15P0Y0PTR6ODclaChyIngzXixnbE4iTEBrUy5fJC8pMjdlTWFGMV1dRWFUKTdlVVZQSE9gbWo6OHtjPTBmQEJEQG5LYjNPLFJVeU0/OnxualpsVUZIO2B+UXJBP00kYGIp'@;
put 'VnJeU09AO11lckc1UTRTdT8lQks/KFtXYV9gQkI0V0IuSUtLLkRPYVdFaGVnLiEuIzBsP3NRcyMhWEJzSip9N089PkN9UnErSzBrLHlUejlrOV9UJmp9KUl6emYrXyNFOXRsZyMkWVRhWVF8MkIvOXBxVHsqaz8vIWp6UGlRNC8kTUU1OD1VWFsuOy5QRzEvc3dlSkVRJXZhayhWfV07e3NDPk1T'@;
put 'QmNTLH1mdVEiPDNVRSQ9cWlbJj13cyUoeU41eCtdOShKMFFORlZNUFROJks5aVopcS5JfXU1TFU5RWt8TEhhJEd7LFZ4SmI6IntkaEhPNipTLklFOlprd1AuSyE/fUkkWSQ8OnpsSzVkZ3VTUlRaMU1NKT5FXU12Pi4ufVZnazxINzdwSHFqYEdWJS90XXVYJjZzMnFBP3FbeCkjRDlkeltTen5w'@;
put 'aEgoKnB6VVtdTzh+bSJpKSVaMV1CdXVNcGlwPnI6Il5heDczcmxIaDtfO21+NEc3fXF1YHZ6WnxpKDFePXMhanR8cjpvTmJxWzB5IihrTUc2RDNbfEhgcDlNTEpsX358Y0E+bFpCRmwib3ZdQnRNITZOR3U/ZltFci8/djxsUWg2dUZvWmNxV3RySlQ8ZkJTbz59SiZYU3kiTHNiYEEvMkV1dHQ3'@;
put 'Il9HXlV5IWMlJEpaI0ldNmQ1bG8lW3A4aEFtSiRtKX0mZWs9NTNJdiE7anF6fXZ0YERWOkwrR3V2Ij5CaksucnEiK2ZgPEZdQ1U7b2wsT1YjT1AmaGlvNT86XkIiN1JWXXc3UmNBR1poPzJUKH0mVn1oNm1CMnJiV1d7ejhXQDZLa2wodXombSNGfSs6JGtJO15wdmF2eDh2RUU9b19gQHdxdGgr'@;
put 'fXgrZzNeblolSnA6XTxrcDt4KXJ6JnA6YWE9MCp0TG1teFIlNVd+cDAscWQ8WW91QTUsdFBVdVpxI2pfflREZXhpSUF1fSw2aF8sKUA2L0diP2o7cX5FMV9IW3QuYXV7MXQ7XTpVPy9QWmJ1SyRAZShwQE9vaXohQER4Ozl9ZkkoKjlYcyoxYyZsR0hWfVlbaHFBYSh5bW1rZVsjeGZ2SikxMSk4'@;
put 'MThPUDtlL3hVVWBVfiRRPUw7VDFgUGUpZV4sKiEjX3FdSmJVX0l5OWFHZzV8XXBrSDZ4V1VaTEJfKFhtL3YxWkI2VWNeP1J8Lnl+UzZddTJGNjtfeSJXM289NWw1WmEuQ3xJNjRwViZfO2l9Pmw4RzdTQ3RmMHpfaDQqWHJZRzhJUDZCUFRZeiM+YV4jJGdhQmNlclVjNFAuKzZwVHRbRnIpaTVA'@;
put 'JmZjaiFGVl5GSE4zYFRERDFzWzNPcTY3IWRiaFBEJGlsRTtRPSZCRC5ROm09V2RvPUdkI2l9UmMuQUQhfEIqaDphZzk8OEJWUG4vckZIUmk0WDs8c04uNV9pTWYrdHFtMGROJWFuNV83NE9tQD1JWmZfZUArMGBDQz1ZKF9ZXVlOQCsocz9kYjVicGp3YW9eeHZpUyRPRn1ge2xCSTdfcDk4cW90'@;
put 'VCZoVTRTJFMiQ056TXRwa2w4cSI5W01QIyF7Vj12YWNXUmp8MHdYL2VDSG9odGY1OTZwRXNkOmtrV3Z3PTJqUUt0Skp8OGI4LFBsQlhlMjZYfVtXVmNyRVVEUyFHYHckaz9fflhFfWArSkdqIzRyQSxnJU9WNl9UaSJHKDNyMysmbnlmMlFPZHlDUiNkclB8aW86R1k8P0ouRUdpWilaIzNiI205'@;
put 'Nk1WS0lIPlY5ZEB7cyRkT3JZaWdXcWBOS1Y/fCs3c0x9QXVQc2l+WmE7PTdBKnBuV3RGflI1SH1OTzQrRV1ZKDlLXVdGSTw4Q304ZHZ1V3Uxcmp0VzhsS2dXYWBIX257YFtXZEwxfVkzbm1qflJxMEIsfHNFfGFkZywsMnxzcSg9aWshWnhvSm8mSylod1YrV2tlMCFzfjs3bSFoNHtWRTVCXVMk'@;
put 'MyR6Myx0O1pOdVRXaiZ5fkUkd1VxcWtvaW1eYmhCRihpVW1CRnZxZjNlZlRHKUI8fGB+ZTdWUiVXYHJyb250LjFnaF1CQ0Ywc3gxJnh1OD5NcCpDUSxuRyY2T1kiNzEmfG1OM3wwUEppLHEuS14yX2RlL1N6MzYkMUdRNS5yezchZT4jeXZAK25hRHpKPCosJXpjS2hCfSprTWdzdThtd1Q3RGMw'@;
put 'bWZ5fWBCPVVOaURqfFtFM2A6Xio3X1suN1t6KE5zbnwpRX5CUEJiJDFqb3dSY15DZXB8VzNePj5MUHpjVi5FVE9RYUkqKXs6ejwlIVBVJEYuTHYxIig6OlMxJi9UUEpdR09GSDdDUDh2S2d4e20rUiNPNEcmMW9II3MhZyQ7emFHc2VFJWg6O0AhKTR7U2VsOFV6VUI7JVRVNkxfIyNvWFg8SlI5'@;
put 'I042enw4QDBiensjX1p9RVJXIyJ7UGB+UzllaC91RmQwWztvfUx6cVRYU1Y/anhONEN9WmohMmYpVT1MMH16d0JGelUxakVscHFSdUhLNjhvZUhwNVg4KGxPeGlqTi5kLmtMM2ZvNHRqPSZoLzlTSEU8THooZj07UDY0T0BRNnApSTYxMCVOSiZbZ2tAPXZ7JTV7KjBOJVJmWUJKcStaKGQ1R25P'@;
put 'biReVE5fSn1MRkR3QzttK0R9dnVZUHUicEYiPTVRcz83U2RpPGtwJENGaGxdeCY0R1hBb1VhKGNmWngoJF42WGF8cDJmey90OGxRI318InI4SzxnczUwaVJmTSFAU1cyQ1tdTGQ1UThON0t0Rk1JZHpYSjcsPS9MMWRpYTJMP1FnO014NTBCM1olY1M4ZCt9KDEvJml6IStvTXAvYzNdMHFdfSkv'@;
put 'SD9KRHMhSHVNQGd6O3owPk1xLzwvNzBEaSlybGM3Yjl9ITJhaTZ1alNsXSRCP3dhM1E2NEdmPktPSSZeXyo6WDVkc35qSkVlS1UkSkdSYyJZM30ibEpYJWdgLllTMF9rRW49cmk9entzeCZ8fkVxISV5NU9OfGpBU0hqY3sxWkQuOktOdX1mfjlPTTNnRUtKdzlmSTJOUXNER1FROnVHJUEvSili'@;
put 'XncjdWYvLE58Qzp5a3NLeS5lOnJweHppYklQL2omVjEhaUdCO3w8Z0sxL19Aakxdfm8xJjxtMHhYQyFQaTF+S1VnVnxeMTlvSmkjaDE+Sld8VlVdXUBBMHJMaSEvY0d6LH11X1hfa0ByaCg/Uy5ofTlqPnpaOGMmKVhrfSJINGUzcE8kZXswKCVdWEAvdTVpXXN4WCk9JX5kemVyPVFhajY4ITM2'@;
put 'OTpVPlpiX0d8flc+PVg9TlBRYDBGK0V6WCYxfHMlM0N8WyEjfjB3fnc1Pl5oQ3h8VlY/aCpwcUxVIURSYDdxWkBmYF41KC47OSNjWj86XXdZVU9FRF5DKVtYLFp4enR+Q1YuKCpzZHViUDlbKkI/b1VwPCsjUzR6LHFZSUsueCl2JFpTMkxPMn08UCpKbCRsWitvRHc/PEFoNiUxOHw0RWhXYUNZ'@;
put 'Q1RMXzhieX0pe0w+clFzMFlfS3EkPFI5N3U8U0tLdH4pRl1PV1lzXjVRTzBiRVt9eWolOzJWYjxbcnZvfmQsOCF+fjckYCY4cm4pIUR1QjVjc2VNImNrP2NYK0wvYXBpMEcibXNub2EiPkd5WWl2KiguUC93M1Nzcl9KciFkO1JUXWZ5S0dTMzJRXmlTcDJiNHw+KiZ+KCV0TVJVYnBleU9SOWNd'@;
put 'UUBdRFJHKWEkWzkmMDkyVWgrZmlEQUJXOUI2T0hqNy4pa2tqdyYvcCN8REJZbjheSUdMaTJLSzxOZFp4PzFsdTtlQUVSNXZUWEdVSDdhKX5YPCN4Y3hobnplalAkVXJMbzVscisrcHkkKUlhOk4iNis5eV19QEZaXlZPYFt7a0tra183fXVVOXIlb25qPlglKGYhSSltYG9FYVcmKktmTWt6Kk8m'@;
put 'QFI6Uz8sYUlRP0Q2K3N0UyRKYFo1ODI/LD5KU2xUUiloOHNXNSg2fT56TnJ3THxyLH1vYF95UThPQX5uOzI/ZyFeREpoajVoS2pGM3FZNVRQQyFCLz9QIzlPM2FCVXkrVD03THpJKTlWIyMlc3Q/MFcsQ1ombW1CfUN7TXB2cjptdyRSWE1vQH1MJTU+QylxcnF2V0RFPjl4OWBTeVZKZiJyfWJY'@;
put 'YiQrPlQ3eF9MPTVSKihMbDtJNjZGQ00vTF0wMkBpPSt2dylkUkMpezQveCMkWWFab0kmKSw1O3U/cGBuUSo9eT5jMCxERSVDZiY/L1NKQSJPX2U5OW9CPS83KTdUfmckMUByQ0o1SE98MF8/fSVrSzJiLyhQe01iRUVWfiY4Qz1xM2NtXm1zSGhdOSl7bWpnc2c/Ky4lX1EyZzBBX25qS3AuQF1r'@;
put 'QHBMTSQ7Xmksa3I9LmouYGBnUChzS3UuJWlRTXNDZTxPRnkyNypXcmdxQnJucj06K2Y3Sk07YHx1ZiJLIj5GRkNUaCxoLDI9cz96PFg/NXxfJm5BNmxpUERoMS9ecVdlbjEkKzZWfkNrRkBIfUVvOkokblApVGdoTHc4M0R3VWckSkE8bytIbWlKdH4sdVhwZVRqe25sXnxhfVs2PkdDK3dEViE9'@;
put 'Nm0oPD9veyJwMkIyMHk+UnhoTV1XeT1eMCQ1Y0ldNjFQcjd5WztCOjc5RSJCU3ZaQiglWipQU004cz0/d1tSL0M+fTt2Wjk2RkRfKHsjS0BjOUIyfG93SVdBLl9eVXFGTWV0fT5TclJxbFEsOzlpJTpiZjlKbFE+WSZGRiFeS0dbI2Q7Zz9YMnpZdXVoLC44dj5eMkpALElIUGM/Vl9gTjk/Kz13'@;
put 'eCZPeTlNcHE2OEVxXU13UzQzJmdPeUwsZmthT3dhL0hwX0UySDt4WCNQbEY6JT12VH1QJGJme0paaHJZUyV7XlM6XTRFJEUjdSlEYCtTPG00aTZrRVFyKDYwME0sVEE6aEkkci9mJVl0LEZsam1zVDJmbF9tQjFiQll9TWJ6WChPLDpwNDt5VG5ge11eWkhZKG1KNVFdQENBZCM0aFYkPXBvNVBA'@;
put 'eSNVc1ZlNlEqaVR1O09iQEwpV1RLOUMuOjk1OXA5eiJ5Tkk8bWdtalRVW1lJM0glbG0xWkJ+JUtpdilgLkY3YCQvU0VtPXRfVE14THJUZnJ7YExFWnFreF4kdCo6NW9LSnBbT2p0UGluLFVtWSs9U1JlXVdEME5kW1kiMEBrSSlbPmVYVzlHN15AOyojTGQ/IWxDUEA8I0ZMcXVvbUVJPD56YSF7'@;
put 'JXsuY19Adih9OzxNfCU3WShlKmJFMmZ2U35wRldfW3AvUDdMRzJ7bmFpUUAlT2pub0txPl42IkFJO1svLyZPTG5CXjZ+V0skLzdvLlZJQ0NSNGRLKVFXdmFwdX4vbmtTRz89VVsreCVacXF9a3RwZUNSczZ+Tyx4NXVaO0xHZk9qRDI0Sj8+YDVye2tgKCZvPExhZzdWVU41ImtCQUV8I2okWm9J'@;
put 'UHpKKGlePG1SKC9VJkxqe047NU9NNH5DKzIxT0RCW0BKemNbT3N8Rk82aXtkOXVjO347V2dtPkdnfkJbPFpHenQqK0NyYyxUJkRCfVRlezZ8Iy9XX3xAUExiSWh4LGA8RmhRI3wuaXBqbW5yRSlodj8uNHZ8ZHUvI2V5QTB0N2RFPVMiXTp1QmAiWWQ3LGs4SGAiTWNOZEthIUpqRi5rN21CciJV'@;
put 'Pkhia0dDSSVAWnpmI01QcFF4a01VR2V7Slt3TGRQJkg8PyMqRklHJXtpdXxZLD1lWW5CSHUzU2ltXzRfPHoiPiFdQlFHeW0vMDtqQEcxY20pRWRrcExLMCwifGxzSUI0NG8uTUJsZGcuWyRxPWU/PFR7VXNqbGNrYEpaWH0oLllTIUVqYUJXRStaclRUMUVNS2hbeW16NzVIZWNQU3FPQkk0KHw1'@;
put 'NEBmZixnVStPL3ozJUFvTGlnXm8qdHg7RyZXU3cqZ1dRMX4qVTFSLn5tdlZZXTEybngkd0RmSXI4Lm42dVc/NGszSmZpQnVeOG1iMlkxUihOVlNwOzJTTkF8PFBjaiN9UF51LnlfUFI7eG0lTzJbUVs5NzoxP2EiUW1zUUopUCU7OFYubyNialMoQ0dUZWtROT13cDw8WGNaJU5PcEpIU0ZnKkZ3'@;
put 'MTgke01hbyNzallLZiVlY24yITxOb3tMe1ckOV4zc2U/dGVYYzR8OTFtTyRUfWklMy5tJjxTWWMxNUFUaiVDKnRMSSRIazI0ZVBhM3JlVkJ6cDFgfWMxe0c2cXE/PE0+RkY5OztWK2dBfihiUyRdVm4zOyF6RXI1dVBSVCMwV3Z5VDxjZm9AUTw5MjhnJDVAODR9eUUoIyllVHdIcnBSIyU5LnVj'@;
put 'KHtbeGwwUGEzbTZDSVdbZzppdiFIe3xAd016dGxFWlJsZWxFRCY2S0w3JXsvX20uZWpbcmZYSm1fUVMydkp1eCJKKDtCci9IPXI1eWlgMmk6d1lheyxePF18TFhMTFFVU0UqWF5DTlljUERyNGdgZUpJOjN4cV0+ZGdMcmdsNCU0WFo5UGMufnJZfFEvRnhiRihOb21qa0Z5PD9sOS5CWHNaRld8'@;
put 'REcqPmYjYjIzST5uV2FkISJMbG8pRjQxRltXPmE7ZixlQzBmeipwRV1wNmsiJl9veSRlUVtSJUJHV0M9cylmQDYyOWkoLD1TcjpmOC9zcWRhZXIxP318fk1pZF9uMVBAMEpdY3E7Y0p1b1g5I2Q8Zl03ITw8MjIxQnt3SGUsbGZhX3tda1YjP1N1SCx+dihwUndKSUA0PStHakkoZDtRbm0ve2wq'@;
put 'IlZ3Kk0wa2kjb0FwcXIxLzcydyZQQ3YzMTowOSU4dGdYUWA8VCVTWCNlVSxxOWtpTSo2K0hHZm8vUnc0WCRaJHhHKkZwaV5WUG09SCVDO3Z8MWIhcHhsUVFTa3BPSlJ8QkM3TW5DRUFyamRpLDU2YHo6RmNycWh2WFNFWk5mREdRTl5HOmVBSHVWeD45ZWYqfT5fNSxHdEQveDJSR1pHJHU/QDxf'@;
put 'bTVMSTFhXVc1NTk8Tk9RZ3pzI1daQn1ZRm55MThuUTd+I1Rsa3V2QittWCNhIylXfTtMTmxJJEJ5OFtZP2J7IV9ybSM9LmlrKzExPipAYEBefWkpJn1WdFFaPWY8Vz53VExmLld1JS9XejR2Wl9rYFp3T0JSbDYhRmFecnV5eyY9YnFafS9ONT5jUzpkZWFoUkM6JF5UcTIuckghY1F9cSN4PzZB'@;
put 'SCtOMjRZMDU0VkchbiVEfF5LQlYrN1g7K1VTdmVeLCkrKXVIPVJlazkreE8hMT1TRmhdbGx7VmFeMDhLPXJeY3heSyVDMDJpZkBEWC9uPDNEeyNaa3RMKlVwd0E9Ti4mRys3OF5faj9geSEvbTY4bW1DL25bN3ImQElaO1BdJnpFIytfTWRybzg0OXlVIUllNENFY0JDZz9DM3VMRylCOUlwcz0k'@;
put 'OXJBVlhTWGsvamd7biRoYHV5YzlZLEQ4ai8iI1IoYT9MRmZpdS5ZWTlIUnh7QW5uLnVXWl1qRz1OMnx7d2tzaitYPWlTRitAcUNRRT48bGpiMEVHWVZCeF9Gd00zSnlAOWZzIVpsSnshaUtnKmpjJkIoeW51bjEuX0IoQ25Hai8mWXg7a2dxKzhmQXE2S0x9d3RkbHt6WTsmJFpNWHNXNUZ4djYj'@;
put 'YFFnSlp9S0ZYIl0/JlZNa1IrQ2xkTUs2bF9OMkloWz1qZWMscGRNNDNlQipTMj04WiokQk9sQkM7ajZHUnw4OUI1bDY1aVk0SVsia0koZldMQGRZdHdQKElBW0hJTzpVTXJ9al9wPnBjRmR5NF1NUyY+ZyMqdFVGWSxYcTZoN3Y0bnpLZ05neisqPX0qXzVtZXZwQ05zKjtWdTNRNXJHbyloKm52'@;
put 'KUtVKWg1QkZ7QVlvZzF4bChRezUmalozcGVfNXMqJDtkZVohRXVuYFgxKnQsXzF7Lzx4UntAWGohNXZeeltsWnlhUzNhcG9dT0wpYVlZcihRblV9OihkaDJWfFo3WGUlQ2pydUJnNFhZLmArcTgrdDEkeE1lKmdsI01TWjRLUzMrUE1wPmwlPF52S3ohPS53fWdqU3ZmcEM7ZEs9Pk9PQT1qUUg+'@;
put 'USkjYm99eXlLYFhFYD5RdGYqRX56ODpbJU1SLzIsQUpmSlF2XWVpWTkuQDpIWE1URkZuY2s+UTF1MUkod3g+L3ZwRkhwQH0+cyV9OS46aD9wT3Q+QSt9JSolK28uOGBxTkEiay8yMzNxN0FUK11hZzksSyRhb158WipCKjYoS2ZHUEt3MHVYaj99WGdIOmhePkp1NnI4Nl08XTdhKWh2IkRlcDc4'@;
put 'SDs6dUo/KzM6NlFlZ2puWX1EUUhUSG0uXX4zcnc+anFVTExyLnViQDMwV3Y6VlB0IXZxX0RCM1M5SnNvOj01WTtFeCs5PHN0JW4xaW8iYj88MjFPPDRbOVRxNTFbRE1oNVYiSlpFNiM4WDpfV3Yoa3dRNFV5aFZ4WT0oOE51XnU/bntpYXJZNHx1Q0g1bzZKYyUmX34uaix9UWdGTz1QIzRdbExU'@;
put 'PkBfJjNMRDZ0Lnw/dl5rdX0zKGNiVEZ0ZklIbDRzSnYwMlI+JSprN31GYi81ZFFqWndjUXJ6bnNdQUIlYjQsIzRIeG9OXVVQZTcmZFpTc191YykxJWBiVGIia0tHSFUwJW0/bFNsX04pajB5cllIJGBdJHUiLG9uKlg9fmVnWEMjfUNYZSUhQHJ2K2M2Vz5ka3dgYWY8cF1rP3MldENURSV1emFP'@;
put 'RGJmTyJoWTUwKStveWdveTdpITlkaE4mYXZ2dD15UlRtd05JTUYqLjBBc2tOOFJ6VUY2Oi5Zc3tyQytueXplZGMrJHA2Yis+dX5ONVhMMD8jZzs3cz59c2AwOUFrO1BWYDdTVT9aQmB6OXY+MnE7LF5jPWJqbzl+PzlKUEpQK1tJJGxEUSp6bzglLnlIVyZLfTRIMWlPRVt0W3RFU2twI0JHXV4k'@;
put 'VThlQFUqMyl0ck1RcHRqR1l1fFdVPlA+cCwlPTMpUDBkYGBAI0lOZGE3KmxYJTYkNnBebE4ueGdpRlU0XVtrYkJNeGhdcTdYMDFNTnJXZTA1ITpzT1Y4fH5fe0RFTkEkY009NDVGWTYqWiFdSFFkOiJvdmEyIXA6WCY4IVcrLmQ/MkxJTWcpPCMmUXg/Pjs5I0JZOWcmKVkpKSw5RDFPMT5LQ0N7'@;
put 'akg7aHQpKSNCT0xxUTRyNFV5ZEAzN2JvSTpGMW9hITNARGpWVFg+czw0dT0ld1s1JUpuQjpDIkxdRTxqfUlLcUs7PVdGWV9ZOU46TWg3YFs4ZD96KFN5PzQyOnBLP2p5SS43dCF1Y2cwN0sva0ldPm5JfTg3W1t4OVBMYXg+Nj1yKGlLNlhUdUFvLEB5KC4zWEp6WzY8dEwlSmYsMChhLyI6OGM2'@;
put 'Ly9Fc1tVRmI0QUVkMTdANEdHPEQ3cFE4dHZ6YSF6bFV3aDpNPzRWJTgvNVFIPnpAWyhzWFpyfFlxWzMjbV8+PTQuaEh1I0JbKmRLOHdBRF9Ud3pYfTBaPFp8RkFrTDtYVFg0Tmk0cUMqcFkyYURhXVBRTTJaUiEkRkBOLz1gaUFIeEdHLnZyY3o1TyY5ZFkjUik/VyFxOltXYUU3YVZ8YXcmRl0/'@;
put 'XWdDRkxJflcqbz9ofT9dSSNaZlZeY35uLkF0K2g1PV5CRkQzYlkpTUpyNmVIM1t1L1kvWCI4Tih5aW8xdWVAaDIrUE9UZ11RXVBYMEl1JE55flZsTFhNI0wpTCZkYnN3R05OO2d3KkR1PlBPVDhjUlhoczp0NyFodko7RWtTWUR8YzBde2lgTWhhWzRdKXQ7MXZhQXlhcklsRGphbio/OT9FbFBT'@;
put 'UjoxfCF0UlNyJnJHYD9QKmVeYkQkUUdkVlhqJUc3OUJJNjM9VkM/LnxtWlB1IWUxT0c3TD1IYXtsJCo0XUptSldkRGcqbDlVMShxPjxNVUJZJCJwRTZBaWdgcHsxaGBpZVQsNipgSDRadUA0Nnl6ak9LTF0wRSw+NntCQDVTUCVMRC9bZC9MaE1JRCRXYVRxL2orX0xET2xJOWRpdSgoLnIqWjsj'@;
put 'QGoofEtSciszS042Ojl6VS54VUVuSG07RCZLPjQ6YmhpWDs3YUYsMSExfWYxeno+LFBIfFZPNjwmcTlMbmVycXV6PmdBYS4qNDpqMHBFPExwKWFeUHl7SXdzazAvXndEWWNBPmczLkBFKD95cFllZ341O1chNDFtNSFuYV1FdE1oVGNmOz0pUmhFS0NIS01VMjpdd2FgLDd7VXQ+UXR0YSpqUi5T'@;
put 'Rj00JCkmLiQhPj1eRmt4QjRmfkleN259dms0fit3KFh5QUopWn1jbURfdkB7PH5FLjA9OW5lVmdmbC9tU244USsoRD8hUkZJUy43OD1heCZvMVIyQCRsWkxqWSFHcVJSUDx3c05ILExFNXNBWVAjN0kxPno0UnN0fHtYJGdAMGdAbDIhUGl4QiR3R0E0S0l7VGRHJjkjWDc8IWVWT3Z0JkkwNUQu'@;
put 'b1FpaFJ3fUYxdlhxeUo7S2gpJUljL0x2cnR6cTx2NkdrISY/aFg4NTQ6dWUobmlxXSUrcnp7IzVbUHJhNzQ6dnphLkpqellbflIsZmBOcj1abjRQKUNSRzttSl5ITmxwIm9KbXZpTEV0JipsM3tSRjt5KF5GXWssV3k4ZjZMMnAlUld2SjZoNy95KTI1d0EkPCk9Y198alooSm9jKiNhJTZRKHRW'@;
put 'WzNacyR5S1pIQDQ5UCM9c2dAKHtCM0YqJDVbM1t2PC5uOjYzRTN1S3MkY15iMis+X2VjWD4ydlBqKyt8T3VbNDFhbXVsOkpDe2wuW0ZnOSs8a3AiJSRnImMwIUMha1N9fjhWcUY3UlQyOGwxLigkYmxiK0FJKX1FUX5xU0NdR1VMcjoiNyMmY3AiNSxRfEs7NkBzdj9IeDFRTWMxcS5ZcnZfQitq'@;
put 'd1RIQ1lpeTFIfXdxNzlLaFMuLipIOEdzNk8rSkAlPFVmWkw4M3tWa0hqZzgzYTNbZk9WMTFMJDJBLyMsSmAkZG5WXUVSbHhONEUlWFpoW1Bqd3IqUTRPYDcuOUwhdTthImosXjZRPDt8eD1jQks0eDFfPyx4W1tTbW0vVTUkJipMdEo9dzszQ31VfEVHO2FgVm4yWU9GfUZLXl0wVyN6NlpKXn1H'@;
put 'KytxWWE3WmJJKzI5cTFAbSJwSXYyPFdaIz0rfiIzNy9SKit3NjApflhBQHlMWCVQNmVjK0NPImJASjpiLC5TJDVLVz02V11TVVZyQiE7dT5wP34hOyF3NDRBRE1CRDVgNyZzIXZ9YGg0dzxkfEUhZGUsbHgsQmIvWm5Eb05bNjdOVl1oSGxzMnZrS2ZSRyJLcW4xY30jWm9vQ2pFMUQsamY+K0Rm'@;
put 'ZzdJYSJwYV93ZkhaKz9VMz9mcVJmTHI7ZDlMNExaYU03bClGajZIJl55Ikk6R1deNWBxJT9WU2dyaDVCVyQsUk44cF8jRHhAZHtYdy5CM3ZJTyxjZTFyNlBJQ21VfkszIzdZTUpYVk9xYDlxIm0mSzosUntWbjp+fil2SG8qcHBNcklgRmQ5S19XTHcoMjhJXm94TFlgfGJNXVt8Y2ksK3JMd3V5'@;
put 'LktndkhPSmp1Z3JNTnleQlhnXTBrQUdrOVJkaFp+US5ERyM6KFpSIXlBUzR3aEkqOF8obEVJR2YpazBddGl9RU99VUFzcSw6MXNLbyRwOWR9ZWhOMH5SKU1xNSV6NTo5XzI1KEtuOWluXUs7SGVWcUA+P0kyTyFBYyZqaFJCQUl2ZlB3Vjo3QXh4YGd8KitJWHc8a3k7Vks1c21HOGNuOn06Q11m'@;
put 'bEwjVkhEQjA5ekZvMz07YmNQQWowfStFK3V7eyg0OWNOVEgjbTwjenY4aXkrYDpdXkM8ak93dl1LaEteJnxxc0t5Ii49Okdud3BVWDVXLz13Sm59Y1UuPHBDRVNxc0daO0xdcTh0dk5bMlFufGhBMz45QilFN3ZVYXFNJWs+ZFtNRXBjRTB3TW5xeyYqdDhWYW02ZERBMnsiQ2N4a1FGWG02eTE7'@;
put 'PH0yRXBIKkd2fXxXLHJQdmE/NENYJEVwc24ye2N2ZUkvUX4sfFArYmchZjd9Jn1zWkBvflo8KTxNam42blloOXdJXXFTZD9dKmpVTW5MdzdXVWBoZUNdZllzZ15xeylNPClUcWp5UGhnZnpSQFUsSig3UGg7MH5sQ3o/VFhjeHVMW1hpUnpQTStufVRifCpmTVRadXh3N0RKU10yV2tFd0VgIkZp'@;
put 'PSU8ME9kQz5AMnJpNlZCMHJDdi51SyswImg3UT5eI1ZOXj82QjVdeS9tWGxZUFcxK1RkOiFLeUV3X1t3cGslb1Z3ZnhdLHxoMDEiYTg+RkY8d210VHs8I0l7MHJCNkc+V3w7aiFIQCE7bXNmdVpKQj5DLE42YiZlYmlPeyxaP0Z0SUojZ09wRyM1KlY+K0ZHIz9mWFNqOlJnYFNTSHRkVGRacn46'@;
put 'ISNdYWMrLlVfNDw/YzxbWXJyK2ExL3wkNipaIzttYilwQSJ6IlA+JGNvIz04IlpTR3pxIUFZRSJvdW9ZVFhMYWxoQXg5UikqUnVDRXU0eTxWL1VIKEZ5U04wUURNcDx7Lmd9M2tobkliRE05ck94ejljX0hIaWJpakIoJEVnNjtsfTtKeD83OXMzMWkiN2ooYUUqIXZeOXx1Ml9kdzY3ek5+MXtt'@;
put 'OW0kfXIjQlYjUXVKOWpVeWN8eGI9SUVYQnJ0RGZyZlR8diNZTUAjTyxIX3k2fjEjK1k5bipOP3IoRCR4fTpuMmB0VlpKY1IySChwNHM/NzpRfDxaWnJ8PEh2dX53SDZpMFI3PHhiOSw6QTcuY3o0NSFbL25wKj1ZN0x7cUJeKlN+TjBgQUohTXl9VVp5QlVeKHFQYi90djN4bnNWT35CcUZHXkJ0'@;
put 'QnA9PWEvYEh1PX5oWHVWejY8KW52Zz5qTns+bTB0flB0fCt2UkgpKUgvdDMsSzYpOnlvY3dCe1RIMVg9dGNBeDpRYyxOJjQ0N0t3R09FI3Y+Z2giMiUmM2R2M0U0WDtHZGJodV0xOHJAXl1CbyxDb2VoUzJHIiIuaDg6PENydDdYRjYza1pEMSZSd1BfYjVpKHxbLEZOW25OLyQ1eSUjOVQ/a2p1'@;
put 'N1VIJEwhNzp7RSs+YmMpdV5tWkwpV3FeUi55XWZ5YF1wPSZTb0siWSMwZVgjfGw0cV5fWjQhLEBrPk1kTixZMFNRNVtXISl2SnxSOTh8fDc8b3RlfV1JOGYjZntkQmNyfjtwWUxZRC9HdUpQZWZiaDMsI0BnTSVRcFBfcHRfZHNBI3smNGdxb3xtIUBecixLfl1CaisxaixmYnY7Ok4iLGZdP1ss'@;
put 'fVBUY1tNXUpIaSNUTyU3SWxjZzZkeEo9ei4qZmxuND9tZDNNXWVwaTQuKldgWlAkQ2xjblRlJX5QUkRdRm9dV01Jey4jV2RNKHZxOSJ8Q3RvIT0/fTliL2pCXzF4RT0rMUtNYWFfPSsxPShyaFl2ZT1lQk5LUS55VG5FfHZtR25rKiUkPFtVZ2pAdXlhMTFDfGNLQXtsb3BRQC5VWWgmQFgwdzo4'@;
put 'VjdoIVlwfjlxQD42JHErOD0od10ibD5RPnoqM21RVjQqQ2NmMmNUNEdEeX1POyM0bkBpdUR3TllaYEtLWWFHL1NKQ31TSm5gIm1rSzIxPytrTWlGLDM3ZzwwRVFFLEdMVEhTcEFedW9jZlMkaW1gOEI6I0Y7N0F3YkUhZSs9Sk1UUm1PY1ZoYmpXVTQkSyxYa14jViVhT0ZbZ01kVmhRSnFgKkNq'@;
put 'XjxuMkZFaFFKcWBEMTtgKi48cDVgRTxENmI9e3hfI1hON3FlaVQvM3pnU0F7OXQ2IU5FZExjUjBvdyF0eiNVQnlZWzVtSU8iejFWanU8Rz52QEtLNm9gK1BvTntMdDN+YH1GKWJsYEsvaUIsW0QxYmo+Vno1JjM1aixxSWdSenQ0Ql9kKEojeDlBaDFHO1ZCNTdHc1QiO2ZLQnpzPlVZNy4pdk0w'@;
put 'NSRbTHhILDhAL35yfXRuRllnOUsiVTs5WTY+UGMsQiY7OlFeNHRAd19YZyUldm96L344S1EuS3BNazR6Pn1ZNm1mPjBnZklqb0lsJCVdPSVOT1Ihd29sdlA9RS5FdklgV1NLZVQpI2pyLF53UWtNX0MiUHksWHF2TTd8UG9lYzttL2ZVYDRXREUjcmVdLjxgK3NtbWszRGYxQmMvZFAzdVV3RGZz'@;
put 'dW0qcWklUDRwUFszOlBPU0RBKUAuP04mP0gvSWFsdXohX2JBe3BHSShXJlVKUC5jLmltb2h+WSRvdVd3bGZEQ1A7PEBgQz10VCwyYnNBNH0vO2p9YDssSU9AOXR8SG5feXZqKFVhR1huTHhqTm4ocmt1WH1yPjlQSTBFOXZMJXQ2QVU7SnMmdEpeRUV5d0okX25kNFVbW211Iko6TkkoOztzfTtL'@;
put 'eVJPYk9MIlc1PV5efFFpeWUlY1c6S3IkX0JONS5AJFZpWG5yUjV3UlgqPUNPZzlnZVY8N01dWT85aF02OUgxQCxMbTkrPHFILDdhaEJpYCtWeVUhWi4mS300JWskP3EjPW45cio5T0BWS3FvT3speTFOTUVHOkJpeClSY1t1TDZVYTFAYV1YMUhVdjVDd2JFTWMvQ0lLPmReVVRGblVJPy5QdyRp'@;
put 'Xiw0Y0ZeVTw6LyR6LEImKXIkOy5ZZ1ZgPn5vOCwrPFArbmRrfmAxRn17YU5EOm02b3xUNjJUcy5dXyklcyFVYytmZkd0VFosKlhEOXB9WDNbXkJuR0tiWUlSRldYNUQ/Y0lDU3pZL3ZpLERnVltlYTQlVU5jMURuQnFPLm9hNFNSPHUjcXRENlV+QXpHIkBRMjB5YSNzPGAzYXh0czhUVXkkZ1Ar'@;
put 'SWBVODFmTj5mS3J1a1BNc0l0fG0uRHFWYWY3cVMpcWAyKWIxLml4MWVMUE07V2ByKXxbI3RgKTtxdFVlOkBnW2FSM25vNGpVe0JZaVpJQil7KSZLMllyRSZgT047RncwRGYjQmghL091Q3c3XnksOVp7bEJNcUBgInd7R3VXUXdtZCEwYlg0dUlMIzFlYzw8d3d2MiUsIX5IcCM7WGZXKmhwYnQv'@;
put 'fCw2NnwsSzRSWmdpR29PIkMqeXosd3oyaGFzZ1B5fis4dT9OOUVNXS4kZXBpeSRUM3lVJXdXbzpyK1hNM2hyd0AhNiRPaHAwaWNUN292eyNFVFp3SWN+OX1IW29OQUVrc3lYX344N2JrO182fTxscCJ7Zz8vPld5Ul5wWX5GQjNqb0kwV3hxYWdqWV1GRDlrb2o1KnxgeVlhN0xBcltyMXZkWSFg'@;
put 'Tk1kRzFZLnFaW2pWViNLPFVGYnA8cDhZZV4lNztwdWlfLD5LW2hYfk1yIzN0b3pPUTsyNVpmM3l3XW1FOmU5RmIoKDQ0TGYjXWRJRGlJS09eVlMvUUZeVShWO3A+U259cV9tdUtIZUJKTC80RDZhfmVQPXQjNT1WNDZSNStQcUNuSTQ1SXRuZEJnZF49X1U4RzhDOExASyglRFJEJjIwX2IoV1pi'@;
put 'PmUzR08jSDIpeTQrIVdYKHMwWGVCYEh5RHIjTFg7cCE4bEhLPmh8K09RSU9TNHVwaGpEaTx6ImBRT1ZvVUh8SkJ4R2J3NUhEV0ZIR21mLyNOd0h2d31eSjd1I1ooSkZlM1lBP1tlanpENzgsNXdgRFByI3liW21FfDs5UnpbOzhGPlpqZ0p4QFdIPDBYYCNiWDcqWEFrX0V0R08sTGlHb09Te0lo'@;
put 'M3U1eHlBMDNNRWh2OUlBbTxwdzxzMWhWMnZQU0JeKnFqOGNEaTEpR0ltZVo+OF91VVQ1fWNRa2dPTUx2azBHTnIrbTliWFhIUmNxdEpLOGZ7QzN1ZHhpIjlyUUF8V2JFQXpEMytba0tIIXxEQXBKNVhLQGh5aU16fW96S2d3NVg6KXNFdS9LekQzYUZRWTpMOShyWiJILCZHekcxQGo3UWcpayhp'@;
put 'LHs7I2B4fXtpIWV0KC5pSEx0Vmoxc0Y9I0IoU1I8Q0g4RGUiVn5dKkU1bG50d2t8QDhrT3w7SDU6fH10S0g9MGZkXnw1dDU4fjB5d0A7UzUxV2pWN2dZNGkmXXRpfG85IzUmantPTjhDQHY3Slo9SE96UjlWSX0wM01pTD9XX3chfWFOWiImUUFmNnZAXWZWNXZvSmJXOzU3RGZtRjkxYjhRNXVS'@;
put 'NzhpRz5NZlhzU2J3JE1XL007cGtgIkB0PHZPM3c8PlVqcWpkMixxUGMvZVg7eWc8ODwmSGZ5fUs/Sl5GQWN1O1RPNjA0SCsxOHBWLlQ1OnpFT3ZxMHc4dilHdFBrNVVPYWdLS0BTL1tMSzNgIVgxMFpkK3F0RlhlYio8OmA+a0g+TV4oPj0zKmRwLjNfaGFPd0hbdTo4ZXddM0FpSk8zOVY4Tjtm'@;
put 'WTkkfEBpR1lSZU1UZ3U0SU8oa3JlfWUvODIxPjRFNGdpLih6ZUlgMUNMVl49PVJNc1dCKXtJVE9fTXdgb2tOcHhUdU1zZ1ZbI0NiNytZaSJhNlpIIUlsIV84Q30hJjoocClabTUjdXkvQkgvQj9JVU1SQHd1UE5NaTk4aXooWzpaUkRgY3BjNWgwZTVofHRPb1NELEY0X3g+RFhdQ2YhJElONiQ4'@;
put 'bzkiSDZfUF8jRz5Db3FSWHlDJl9nQDtiRFgwc3IpcDVabGFDOW0lY2dzRD45WDVXbkdbTm9JdilxTGpaXjtDdlo/RldxdShkZVNpdExsbnEzPnJ0OjdFSzhrYHExMjUzYmt+RnBWKVFuQz97djQ4fHhbTWVWVXczRlo9Y1Rfa29vL0thInI0ZDc+QiJIbmZ6bTQ0eVl5fFA9UGR6V0wrXygjVFZK'@;
put 'WUZTNlhaK29DP2B9X0g7aCMxUHtARn1YYytnY15Wdl86NXYpIz1tWE9WZX0mdUIvdiQ9SC5mPllVZV5QMFRjdVRCfH1SS2VgaSRPel93aDR3VixLTlVWQi9XPjYqUE05V1VLWTZeSF47ZnVncXolN3N8THtQdyRRL1RVSTA5JUwmZXRVT0tKRlBEeFtLIlF4fUpqK1oiKHdgb35zJlZ2VyFJPFZ5'@;
put 'MzFLK3B6dTZyMWlXTzAjd1U/QEZwR2FwPWU1dm5AYGk3fHB1b0ZFYUdtSWdmbz9MVSlNP1FYWERMaUJFJSxOMVJRKDAvRldWSThqU2FjW3QjLGNib29EVnhnYn56aFBKeCZzKnNYUFc2fnl+cyQ/fHN8dzoyc25gJnwhO2ZNNF9+PHx0IykpOW9bXmB6JXQ2UWNbSFtfWHlyWVVWak1AfkVTbXRU'@;
put 'eEg/Ij0xJDgwdkBlJDE4eXlnOkFWIzF8XyN6KXdvJThSKGBua2orW0I0e1k5Oix6bnZRfThpQExWXXRRNnF5VjVhSHM0Yz4/YEpFRWgvOFc2YlM/OWxERDdFMDllYihCRjleLk0vTjFaW1F1dF9IfFAxdFVIUDVjOzRZbSNHLnxQQXV7QUtkM2ZVVkh9IltxemFDM0VHbCMsXk08IzF0bHooWDNa'@;
put 'KWFGYUchaShgYmpmYjkyPis7USw3XWdWNHh7clBreTRTTDVKTE9ScXJwZkkqfGNDcmglSHsmVnglKHNFKHxXXzJJTyp4KCRFbCJOUHZkM2tMcGNCSmpVTSRNQ1oicU5pIS9SUEFCQVJEUHlAPkJnKXtTMyI1TGVSMUgkfCtgNExlNWM3OUtwZ0lZaythQ21nQ0NXSl15OU16dElfU1E/P2pmfGA/'@;
put 'JmFDaGYmQFZKP3J1NV1uR0s7KyZRRHo5L0xSKkg1Lz9qSm1kTV1ocCpEZnl1T1BBQnh1YVkwY3pEXWhETnd1MXRNSHl3VlhVellPW0EhWSZhIyhiRF1oeEI5Qk9CVU5oTj1ob3VxSXEiUEd7ITJLeSZoI3EhP1BpeHE5d1M/KnQjcFJSUEdsR11nVjd8WDZUNiRGenp9XUlnX142KWdVNTh9Yj1p'@;
put 'NCIqeCJqVVdXalI2MVtyTDdlRHZuc2g8aUtfeyJ0SWptNGowZE9sJWt5Sj81U3JmWzs4Wl4wPnpWeipLJGkvIUlaTVoxayx2eFpNWktILCkqREw0KHxCezssVlVyVF8zNWgxSF84L08jXVFFZXM2Wz5yK1U+OWIvbj5GKDZ1fWpsVEVKendYS0dNTjhmXzB2anBJSF1yVnw5a1VUZWVyV2FwISlO'@;
put 'RGJ8WzxnVmxCV0I2Zj1HWj82VSE1VGMubFM1VmZZK10veXJTKVk5M19JUlM3ckQifSJYTGoyYVohVShjK1IvLlhodDIuW1c+Yj40NHZxIjdoOjtDYlRad0RYL1Y2dnZXfld1Jn18RT5fTFg5fWhTKGtzLy8uaCNMPCxMRUxpenUmP01jYlRqd1gzbUZSfi5zRkt2eV1QRCQ4IXg/XzQ8IS8yOSF4'@;
put 'JkwzOTlFaG15OSF4W185dGklR18yOnpIZmk8Yl15UXlhImtqc20yLlFiVkxyU1FGZCRUMT07M2t2KXJTWD9obGo3NmRCUUo9fHg9KnJTWD9obDx3IiQ2NGN0I1M3alRbflg0LkYpOi5iZSYwOF05ajdMTGVyKWJxUj8hYjdYeFh6ZzFoQktHLF0hQCZLZUFrMEd7blNPMCRlY3NUKz5PUj9ATmln'@;
put 'c1lqKlleVkFSL1Bed1YyalpPXWtWIltqLm4lWGliRUtGOVhtPjF7NmtUIVpmS3AkRSg7b3pfO1VAWnVyKk1+QX4oOUZ6QEBCKHBKWCU7RClAfSpGViJLJCxlJTA0amkzXWdHQX11aFg6UUNYVy5QeyZfSWsyLCJNNGNiJG9RSG87bk4lIVgjXiVVXU9Ga3tOVT1YYWRPcisjTiYkNDxVJGtVUzE0'@;
put 'Yjoxdix8TkxhaWlbNDY7IlhGJWkoUFVFWVtKeXx4dHtHfFkkT1J1QERqJTQ1c0tlXm5hSE9CVHYjIkBhK1gyRDYzb1tefGpWcXVrelpScVVYb0pkPElNdDRNe3VHejByIl0iJj40Oks0bilDOmg3YTJia1tOMVk+a05iMD9jdSYueFdRbVYzZk9XMl0xeiVhWF9zUz1HWUR8UiRQL1toITZpb0Uv'@;
put 'KVlpd2M+PXoxXXxKK25YPXxjRWJ5MTw2OjRrQVN6QSlqXk9uZG1EMFIhJC5TNzwsQy81PTBbWWRlO290Yk55TFVldDVmOkhURj13Tyo9QzBHPXtHcHlPQzMiR1sxTktmQV4yT0pzNC8xZlR5IXk0PC95W3diOzAvN0AsdHMoOj1gfkZVWWwpT2ExX357MlM5V3ExYFdYTCtFVHgqZ35CPjZfQSh9'@;
put 'VGwpV1IodFR4dzFocHlfSndFb3FaKmkza1pDdXRfJjtaWT9Ec3BqNDlZY3wjQ29MWGlwQlBPMDE1NC5uPTg0NzlmRFgzdHw+dW5ASiowTWN9XSFRYUNCXWlaPWlsMXkjJE1nWVEkfUljXVo/bSNfb3c4PVtaZE5KeGl0dUVLbjdNKlgvQ3JKfDIrUChqaCtVckRsTmJYPCFzdXB2YlBeOzs4VTgz'@;
put 'Ql56Q2YhWEg6JEs9PT5sTTsid11DSUlhYHtYYkhXaVlFfUR8ZWlROEV7NWpLSUoleltTT10jPGwxYTd9SDxmTGBlUy5MZGxtWk5SRjN2NzNpVXZYNzhMKHRyc0VFd3VvTntDM3UmQ15pVmprQTtoVHZvb0VZY0RmRyZ1Mm55UV5IcnZYNzhMa2BhTEMrQD4jZntDM3UrQ3l6Iys6dFdPckJCR0Ur'@;
put 'ODo6LkBTXnpyb3Bzb21WOGlHRE5ERGt0Z3w1djVKWW1deGQwZUFpfmFYRCpFZkV6QXcuTCUvdGMiIntGc2wlOH5YfCYlZU8pJlQhfnpMR0c/OXVIOSIzREpGSThPe09bOU10dlEzNUJ7O114KmNbdG0uIytxUj1SQGlsIy9tM3tTY15FKzZLN0h3UjFub25mcW9FTT5pe0BmMGBeMmVDW1ZsNyNf'@;
put 'TnRPUjFwOixLOlsxM280OH1ZOjhDa2dyR1A5NVtIOnE4R3diRXMwNTluWy81TVpPcmFYdHxyV1N7OHtvWj1NZTZVWlckPHluVk1EIXpxPmhKXV5nc0gmIUIkP0coYDRSVjxnYHRpa3VfSl9eV258eTVYZHxMb2BxMm9HKH5CKDZaZ3o+UWk0JHdscUUrUFN2W3FnaWBkIl1ZM0Rzfl5bVyprZm9X'@;
put 'ekVXeTMiOyRwZWFMP3EyNF16OjgjXT1aOHwhXzMofGgqfXZSfWwrPTl+MlNQRndYeTVkY1oxOFNAc0kjKEhERDYpXXZ1cDxNOHduY1FjV3t6JUBvbU5ZWVNjPlJWRyp2eDtJeyk7QjVIUEg2JUIjbEFDdUdTYXx4Y1EmTW1HbDAlM1FfbUJNVVcvUVMrW24oYFcoQWR1S1AsSXV5WSYkRWZ2MjpO'@;
put 'cE5nJlJhJXZ6Z0VgQ0BEfSg9UFdpNlJvL3psWkgmc1Rdd1BjU0pAKmdnZStXSkA/Z3U1P0BVPWFVZntrZT4zIjNWWSNWKl1ET3heOTA7LCU9P28kRVspTEZSO1lLdWUxISNDfWV9aCZbLltIZEpwNV9LdXtWVVZDXnJueTZRUGJqI1NXVClzdVI3fCVlOVs1JjduPERYPF4zNlp5KVE9YzRWNHQh'@;
put 'YVpbNkJZK1ZVZ1t1IipbUGg0bW1lMHd3L1E+RGsoZjIzK3FDQGFIPyJpfXh0RXFuMCk2Kj5KJDlPeCZUU3UqVFZCOFtxTjsoPkpANHJDXz5aTnRNc0N9RURCaHcwXkdocXdWaHJzaTFIUWU5T0xxdXciWDFlTGlXe21YOEg5YHApclp1fHRKUU9iZWxyLyt1JE5vJCp3bEpeOEF7WGVGfixsbTkz'@;
put 'JisscTMlUFNhNGxsNmhFRmZVNSVhVElFXXV+aCFOPH5mfl1qez1CSUgzP0RjYyp1XzV7VCErKXNDQio6Xk49THB6fWY4TFBXN25Ua3MoSjBRZTRHUmJIMn0jIn1lUHxIV3dCP1tRRWwjSU0vWVRrS2hRSiU/MjU7KXd7VV1YO1hfeUtRZTJrUjxwe1k0NDVFLzx7UitkRlNPTHd3Ikw7KlVuOV8x'@;
put 'YD1yXyUuYilxX21rX3AmYHQsPS5MdXFVdTQzb3R3Wl9pNEVYaUZVTkRhKEV7YHY0Xnlxbz5tUTd1WHpPd2VUOFEjbVFEQ2x9KzwkOVdPSE1LJEVZIkYhZW1QVXcqQlFERVh3bEJHbmFXNmJEU0RXTkBQdiYmXkB5PitWZkdNbCVbRFQ2YUM5LGQ0TDMqLiJAZ1JaYUBOOTx6eDJmT0ZfXXUwKCJD'@;
put 'fV5HZ3BGeFI4dmpbaSUzK3Rtb0g3OWBvaCsxZDRvPz5gQCsuRWs6W3Z3NGgha3wyKjhpMU5RPEBTbjYmWyskeHB1Y291SHNlbT5gKEZTKy8kXkM2JGFzKHRwUGZbNS87aXAkYjgic319W3QkbCV1d3tzND5ufW9+bElCVkNaKWkzNmpTI3VIVkM8P0ZDPERzT25zJWlSJWswVGZUJWRjOmNnL2M3'@;
put 'Pn0kT3lHcUdPOl5JWF9bMUNEWSNkdmNzamYvR1E8cWgoQ051QF03OTk6cWNka2BKUHI1VUs2TDhTZ3lDL1VuOUwwOzJlUDZpNnNUfVovfjBpQiU3e0JCL1MzNls7Z3wvJFc/VCEmNGRWUElPS19BWEN+bjosTypvMjBwcEEpZTtaPCFrWVZ+MyhkKyFoYyVfejNOI3lAfjt4Q3N9LmVocG0lVVM7'@;
put 'OSJmTHsiUGs8enVSVHImJGUhJEFXRColJCNrMEVdTzhRMyo4QyZEJkQmRCZETHdmQD8mPS8lJiJDOVF4P0hsSWw8WkRkOWFCXW5Pc04zPCFrMEU1aUh1XnxdMi8wZTtfZiFxIitjVnxHKjR8ODduTGZwPVdrWTtBbUUkKkhacEhqRSQ7VlFHdHh9XSh0cUAodFF1alhZYkBGJjJGK3opOmErIy96'@;
put 'TyR5LjUmOU9IVy8uekNGLilhOFs2ZWAhK10oS3hsbTRXYWRNVihaV2E9PmJfcjhvWzgue3M0QHI/XUZmWGM6bUhIRixUVX1RQDw4O2FtNVtYOls8LHRuYG05IXxFam44QEI2cWswYig9OSE0I3UkdVM4IihiaG1zVCFiPkpnJUE1aCJ1N3MhaH1dQnI5ZTNdLC9SNnJVajVqUkkoS016VEhYZG5b'@;
put 'WFUlbzRMM3sjaC9qQmkuKSU2YXYwTGJ+cWw1Q1RtJSUlLHglPWZtWGgrWUNjc2s5b3M7XnFeZUFkeUNEe2oySTR0LlklYi96LnNybFg3azlgeUtLRlc8ZiMmO21zfWZqLy4zbnw2aFpVU2EhfFluWlVoOTUjSng/fUtzI2BCZ146XWx7ImJwLlk3NFJhIyQ1aHVXKkQrKl8iS0VVeS9GYSlUPHVw'@;
put 'aHhAXmpndEV3SHYkQ11uJENdfmdFelF8SStBQnQ8fUA9XlIrUVN4KylgS0dYbjpZa0s0aGJbb1txfmBWPH1gSF1TcjJub1UhVFM+ajBTS3g2PHVwOCpscEhwdzRXdT9SZVpVMSklV297YXBpM2hESUgwR0l9ZkU1fiRPLmdwdj9LMiRwblV6R3Y2Uiw+LltSRlFSRG5HWFAzYHJtOyYyTGNZM2J8'@;
put 'SCVQdWBgOHZjejZyVV08YEt+cjBHKF19KUtUOWV2d2U0VHhfKGV8ZnlaIVcvLFR0aHhTQnhRaSJ4NHFTcz1eOEMyRHNWRGs1Q3VtbmQ3ITtAdntge05fMTElW0FaXW1+YlV5NWRWeWhzX0ltTGlNTDN6bW05PHg8Jjo9X3tPL3VmUD0zSHZAZE5YSmIsI34ocldnSm9QOVNyQXl0Ln1uYSlfI01b'@;
put 'JXR+JFpENmsmWWxobmtWO2YxNXdBclhkJHRSfGo7RzE9WUVwTjN5VTRULk5GS01lZVlFaVh3WXNlJiUvREg9aUMzZkBSYiolZSxdPypeenspU2J0WnJ9VDQvWFVmdywqYlVEMyVdYVVSeXBFS2NdclglUGU5O0kmd20vRHR2PzlTNHApdHR+YiUzPWd1LlZTJlJVI2E4O21XXyZqOz1GUHBzM3h2'@;
put 'QGxLbFM3T2RmP21IOCVQKyE9dXkyZzkkJk5MOyh3P2UlXmExZSJYalVjL2tCaF8+WlIreipmI2c5UDgrMWF2JTczb2RSYiJiUjJyPHtIeUxUSUtdQGBdYls0c0huMkN4ckFuSUtJITs5TE95c097fEJsOiN9JXR1XkA9azp7e3tRK3wyXW1rOCVBNDpeWVNFO19bSTVqVmN1fkE5d1kjJnk6LiFV'@;
put 'YkpnODlRZT1EWnkpcTFvJVF0PTEidFIuZHhbWTZXRyh+bXZmeHdGZ1pma2hxamkvOltFeGJsQFFKeElhV08jUW1ALzBaI3JnKy9lRHQudXMjWiV9Zi9lMSF8KzV9fWVjZTBKNC9pKn1lY1VHbylyc0NOVj8pfWtJRXVNSXhbKld6MXx9ZGYkYVBicmA0aGIsZUQpNyV9a0kmPzl1PDo4fWtJS35l'@;
put 'YyYoeFtIdzNoYmxkSCxgNVcvUXFWWndOe3NpJGE/YnsoR3JTTiVaZ3owZysvJnxyX2thUTkyInFPaGxvN040Wk1tIy53KUI1ZTBAeyhQeipXRmMsTFopQ09deUU2KUJGYTMsQHRvTCR8KzU8TGhzI1pMYUUwWFliMSZ8Kk0pZ0ZjempsMFhZMjBnRjplO0ZNNHQlOi40WyVNIyxMTSJCaCNVRTsr'@;
put 'PVA/QEFYKV1sezxofEQrV3FJQX1wUUFDWShJMDRCbHxlUj5AOXVIWyZ9OEltYGVYQkA2fThJWTVZWCpPQXl9dWlIRGdsMT9eZU9SV1F2UjxYUipPTjdjRX59Zi91V1dXUXZrfDk0LzQpfTBJcWBlWHBRIUdNSi8sLlElZzZMWnxPUkF7ZVgzKW58T1IuQDl1UUNCPzcpXzA5R0I7P30wSWdgZVgz'@;
put 'KW18T1JgYGVYMGA4fTBJOT85dXdhZHNhRTh8OTRkNiN8T1JOKmVEV2xtc2J4fX1mL1cxOXx+UT8qZUQ4ek1QdURLMCRhOjZtfH5RPEA5dXNHRE8rVzZJcEdsYUJ1Nj5FRytXZG41RTxpcGd7KV5XNzwqJDJhbngrb0VZYGNaV1JDQE0hWzh4VlI0REdjTmlZakddOHgkUWdNWFd6dSpMZ1pZbENt'@;
put 'UEd7b000YSlMUkdjXShsI3c6ZzQzUj1gO1k6eXN8bE1IRCR8WlE7aWhzSHhEaSh0QzBxej5ATSVFRXVzSHgyZ0ZjVCVkUEMwZ3g4dTd8WlFsWG9zSHhtcVMxdkBETjEqbXMwYTtmQG5TMWYkWyQ1W2x7XVA7SXhrN18+TSZ8dVIhQDl1NTczRGpVYnhzWVYmJitYKHZTciwrVyZJQX1wUT5AdyNU'@;
put 'V1N2Z1ZuNDJ6fGBDal9rU09oRUN+VmxIOHBRPkBlQkR7dEtRQ3VzLHNqZjNzaUVTcHtSeVk/clhFQSwpfVVJajV4dWNueiV9SXdYazQ8d2Vec2lDNnt2dkdiYEkwVEheV2JlYFt4JmpIflc3ZSxEcnd7X1loO0RRJTRlVzZoO0VjXW4kZjlqdyUvSiVbfUNKKUdyQlF3WDRbY0lrYFptRnJ4USNR'@;
put 'Q3syYlZoVDVUV0l2cHFENjVdaSZ5Rkx7SGg8MmdYQi5NKFpRRkhlRm9PMjs9cTAzfmJHZGUxa2RdRSEieFojaHkuVmxTRSRLdzMkX0M/RClZcnxROWhmKDhzeFEiNig7ZlttdzgyQ0lSWjooLi5taFNVSUVzJkNWWDwxcEd+TXNEbyV7Y0VgV3RwXkdLWnMzJkMwLjdwLCMuLEhlb3Q4Xj14ekBB'@;
put 'bjxwYCooTyxec0AzQ1E+O0NwfEh1XypqOjtDIlQofVNbPF1KQUIzdFRDX1ozbGlEUTUsXVNBRis+QmBkdDpWREA6SylrUUtBVXRaM21nVTM1VTl4TSU3Wkc+ZF5vN2BRJDVTUFUjW280VDh0aWRlNyY3KzlFLDc9bWJUO0o3c2dxeTdZJmhLPXdMTFlxMT5fPnZ2fkNjPT8yJF9udDhKOWVQblBv'@;
put 'NEF5Qy9oUj05aDBKdXE9Q0dSdi45d3FRIT1GdzovZjpBWG1xJm99Z29bQkY1eWVMJFVYOiwpTEA8dj4uJmQ9dypPPHhUVXVxNWEoQzllKHV4dk9kI3RZcFU6UFk6dGZzQitmdGllQUdkOCF0T3NlVW1iPERyVT89d1dNO2BUI1txbUJ3fFNMNVVtb3deP2FXViRXb0piMHh2QUMuXT9pP15nZi8s'@;
put 'I30sZntgbyIrJXRLUWIjY1RveytPbWE0aXxVJHomI04iUH5rUVBPX2xZR21aJnc0dTNgPGdEWWh6LCwlb3c4ZDdJbUEwa3BEPEIkcFRrPzl0ITdienhXOG91fFBuTiUmKFAoPnhyMDpvWDxbKllCc0NVcHoyN05JNG5bQUEoMzIzcWJndHZ2ekBLPmxvPl18P20xI2VyTys7eDBDQVNaeEZbMlVS'@;
put 'cGRFKWg6PXN9Q3JkJCIvUWJjVWhjODBzdF1+UnxLM2RBTSZuUjRocXM/M0MvVDwyXntJYzFmPzREXVhgXlh9cWRGYXs6Tlg+e1lmdVUwUzBZYHk8TzVmbnJnPnhFTiVtUWVucGc9IUpIWTheZmJeR1V0fCojdTdbdWxhaGYoWkZiRlhqKXdYMUt1X3gqZW1UUFNSVm1PaHJUNVZiOWYiTyJfTnoz'@;
put 'JEJAVj16RWJGISEpX2JCJnBkVnRCeCRKT1NIU0pdb1FJVTZ7XzdxcnMhZVJEOEhBdTpJTWMmWzFYTThkJjtXMjUqNjNzIVcoQ0tmQEl2fF5ga1hUXXR5aHRibEdQQVVtTF9PcSNwVGlpYkY7elVfJSNLRnlMTyV1I3BUdyMiRGI9dF1tJChyUCw8JTRLNjMiLnBEQzMiZ0k/NCQpfXBERWhjRj92'@;
put 'Z0pNY2tHVVhpWWs+Ql9YeyVkTDx0fS8sKClpdWRCKTp0K0ovSztQJWZXSyx0QGVaWVdNOFcwbm87cmYqUV9Kb1hUaTBrO2g6VmdNTDYzcSQsfkEzSVRifFpvPk95QF5zalF5SipHSkU4SkssNlhbNmo5UXA/PEA4RixpZHtYW3UzaHkiXipLQmE1YlRPZDt7aDp6PnBIRyNsR1ksXlZGeFIzY3BZ'@;
put 'KTVqfEskcURZVWhyT3s3O1tyZT0pKj9qeTtnVVYxOzRofWY0PXUufWZUXytWV2ZmVD9eeUBOJXhVOlcpPzI1MH1HTlo9KHZHcV08dFZFeUU6ekAkNFlvPFdRUnp5UUF+c3ttcnM1YFolZF0zQ2A3Um1+e3lVPT1WTkUxbGlJTlJaIkwmXS40ai52SEIlSytCW0dLOXhOeUIuLCtGUHA/MTxCQDJd'@;
put 'XlVoZCFsbEBDeX5qRUckaDRfV2VuLjdgZmUsdGRURT50XiF1PUFOQXBSbixfKmg6QiRKVFNfOyNKVENfdT5LPGZiYH00dilyMnZiPXYyaUlhVWIzKEJzJThDPV1PMzJvaF9SKSpvfD5KLiFbJHhXL083Z0RKRDVtX3RIQiRHYzZiY3gwMCRrUkU/S2VbXkhvbEtPU1B8IUIhJF91PUAjVW0zJFFT'@;
put 'fCRTdS9dJXlbSntvW142QWBdYj9yPH17QG9AMTJbfiZgI2dXTGhBNVRtcndZM2JlPFV4bWtmQCRGMUY7PXtOaXtDKVJbKCMjYjl7OjAuXyhrO3RAcXlqZ3NYU3xLPmc4fDpdUnJhViJ5T0ZsOW1SZmxzIlNzJFh7ci98VTNmeHJKLldNcU5NZzx+cn0oPTNEVU9KQX11JC90PGlEW2drRkBmTSlL'@;
put 'PDk2IUY7MFFCUC9vXXJbcWZzRExeKUQzaHFUL2lLM3hTb3E1MF88LGguS3Vxb0RreV1ZcyIjS1I1cUdxXjMqbyJYUzRuMHpgSG4oRTk4Q0dWQFsxZGlwdTJ7XilVb3RreEVJTUwyWkMmRVorNT1IfSl8SExhJV1efXtnfk5hbFIqOGRpLylKNVhhSksoPWVrUDtZdk9GVWxpQ3xtZWkvKW5VUSx2'@;
put 'L0BXInJQXygjS1Z5cVUpdFltaU8yYio1IVI6Sz1oJEs8MGBpQmpOPyMzS2hMbilGUXBzKF0weWZCd3smcjM2Q11KeS5zMFZPcyMzcHpDLnlqWCVVeywwKTcyTHVDY0VIdCVuVUVFRXtDS2o9LnEwVDR+Q0sxYWFeUS9dW0kzK1NDVlgwPHpsZjQyOzh0ZGArKn4+bXIxMjR9MV0uVVV6PywyYjdK'@;
put 'fFVdQDVCNSN9P2tAQncqRyp6cU4uUi8hK3pyNnNOYGE/MXE+NjdeeTJ8bTo7NlUxWG9dL3FmISVjaXpTYjJkN0kjbmZGcVsrQiFwJmYlPmduUUVHPCJWT2o4OH0xbF9sP1IwST99ck9odXZnPCg5LnAsUTk4e1pxd0MsKTRxUFtQL2NoYGpPOFQvfG9HaEtSNSM0REg5bldwPSh2cXw/Uk5TMTBv'@;
put 'clk1UG88ImttYUkie0toe2E6K0xrTmAhJS47Pn02VWYyTmJwdUZSO29zZ3crYmt+VEdTPUxMOG1ScCx8cDlvM2lSIVhgZCF6SWFFV3Y1KWFpbEpvaWFgP20/ME5tflFWfEtLdHZWKyhYMylfX31TYUVDVF9ubnpvLGNpa207R0lxTUNad0YvWG01K3VaN0YoR3lqLHRvVixpNkV0X3RTUGtOUE4k'@;
put 'fF59PyZvdVsvfCltYCphL2J2Z1M9TGVwXnxZXixxYmkwTn5ObUxzZyYqYGBPW3hCZn5kPU8hYF16eVFiOjJzVT0yQS9lMUY1PGpuYSNnVl52MDZbSjw8TFRNI1FDdzB4OjMwKmFxfjwrVVtNO0RTb0VLTU93eFopNzA2SWFVJm5scD13ald2P3o4V0spVmVCSm89RigzaHM1QUcubEFIRDhCSERa'@;
put 'YVcrRU02fk5vXS8hSiI/Q2NuKyF8eEpbaitnbUc9aWtvXS9aZkx9eTlbWD1WPCFOKEsiKnJBZD53L0t8Iy87KV4oMXldJFJ0cltxYzZET1JDUlpiV0p6OS5wXmdobVZZUTNCTygpT0glJjlnaG9JfkEyc2p0T353QElhJipodyNDdVY0Kzd7N0tbVj9yemVLbjdVfiZLJjx7QT4sWnJgIi84NW9O'@;
put 'ZGlvdUpoSG1VIS92fEA0bHZ9WHUsbURHWG5TJFZffUcvKykufFNCLm88TXl1W0BwIihEZV4lfFp4LkV+LzthaEk8Kl58cmxDJip1WjdbLyFGeTVdMCksYDx6PXdacCU/TUBnOTBiKEdxe0Z5X3Zfc1dzQWc1RXBldm1GKDBtUF4pWm9rQlUiSjBuXXove05aV0cse09bOkVJcXZsVnw3enx8JV0j'@;
put 'Vm1MUG1VPTBtOD1zPjBtcz0wbVt4em4sMEs9JE9PZj56SVszX2FwPVp2T007NF1vbzUsWDE9Q20sYT9LO25oSGp6eDRmc1FnOWZBPDlLO1MoJm80NDkkflMlaDFRfG9efDRDI3ZwIiUsJlpzam55KTAsfXBePyJ3Tj8iOW1dQ1tdbDYhbyo3bj5nUHlGJl5OaVNzdmxLIkRfUDlHfUdzLE43VUpa'@;
put 'WmV9fVI4Rnt4QUsydjhyMTdVXjgzQC54ZXMhfFV0O0VkKyhlR15iOHh7OTtacHQhIXUyT15rYjheZyxedip2SWwmOn1NKXZvN3dXfjA1SUZSZ3ZNUl4oLk13anJIXntXZEdhSWJEfl89Iz8+OXdacHx0Nk1fPEIlODkrOE0rSykvfmxySGcsd0JuPklMYERnUDlrZV8veDojczh6VzR6PkJ+L31v'@;
put 'cD0oanRXWCJzVlo9e2I8WjEyX1czfTlPPlVObDBkfikzbHM2c2xaXkVTZWEjMl5qWjw5V1Z+VjEqOHdtemYmMjxbPFM7OCNSSmlGQV5kPkE8R0w2Rk09QWgkISp2O0BeKXFgUztJemNrYzt9RmxFYDEoQyFHW1thdEZMdys4U1RTJT1+TiRnLDEpMXtteTNWTWdUJmttVGpNJVU6PlZlK2R6TF97'@;
put 'fTsrJTxxcj9hYykjITU1fGB7WCtCe312c202V2RfdHk5JWtSMUpQY2lfKEMjMWRpP0JbVWQyfVExK3wzRTBYOGd9XipPYUdeLHcsOS56d0YyZGpGUkZtUkF3ZX1ORnRveDRhKD8rTWMxYF9EI1ttITFdb1V4Q15rSUZ5fCpHS0g4PW9ONTxCTGJBZW91JC42ajIxQW1zcEdzfUdGU2FlQnQ8cjFv'@;
put 'XipbdH5fKWlFQjUiPTs3QGZXWzcwKTZXcH4vQzhnSHJlPCNFazN0ZCM5KS5FeEVrPFtTOS9Tbl5wZ317S3pedUtgNmJFa1YzU0pJZjUhLHJvZHhwUCR7SmZmfGpSe3xnQ0lbWz13MnBtbTQvLCslVm9LPFMxJTlEPXx0MFthXXcuNDlhL0g4Tz18JE17OnhMbHxvQGFmQitWczlmS1huRFpkazdh'@;
put 'Pi4+P2l8dzgkP3FxSkBkJndPTzRTIUpdYDR2Zz8kLHdwfUBEIUJTemtGdzh7TDYqPmFqPDddYzpqKlI3bVt7YXRqUW5kP1dVTG5Pe0Yse29LNHF+dyhUbmFJS2NGUDVxWT4vb3ZIRzRgWjZ2YH1+NXApLz1sPmh4PHcuc2ZfMGhPOzk7cTI5Qy5dR1E8MUU3V34/eiImRkBvfEFyTDBIWyNUXTNL'@;
put 'ZU5SY1dwRllONCRVaD9rQE59LC9xQT10al8zS2VMMzs/MWJGUDAuczFBakxGWC81NkBmJHAveyRLTUksMkgzcWoxK0ZSeTEwakluUzwwI2pLPkBOfiRJI0B2XjQ7JF94aj8/SkpSRXx9NzM4QFMhUDBffTJSNX19VGJbTyk7OiIzdjwia1VrRXhrMTAsaUM6Myl3REx1PFdiQVNYZ3RAZVA4V0wy'@;
put 'dWc7MFAxaFlMZV9NZSY0bVo8aWZdfVk7VVRlcWUzRmxDa15FfSVYYD4ofHI+fCVTeyhwSzl4YDRYZyUpeFJEMCsudDNHcXxydlY7OVgoVmBBRWV5emVMVWJ6R0ZUNCMsY3BlM2Jed0huXXc9V3E0bVNVSFY7XSY9TUtgbSpTQyMpTEIvLDhuUFFtcVtsNDlyRmxXbF94RHIsYEgqYDtCJFlXXih0'@;
put 'eD0pQlA8bFRwT2xMIVh0OnNsOH5lYmljaSRCcWBxcEBURDNgPkYhbXI4W01YQyxsVVp1aUcvS09YJkM3XXhya3Uib1kqKFZwUUtMMn5ONH5ASTdzT1RRZThPbGxRVGNrbEwhMGxIOG1mfmk3fEQvR1lefipxO2ByODV0RFdeeUkvWDBaaEsvJXZbcXg/clFRfkMxSjRBVVlVVHUkfEkzOj1zOG44'@;
put 'Om95anlILnNpMyVrITFCPCYsOi9jLGwxZVBWPVdlSVB9LDlzKWAyMCJALDhSRCpER1AjYDJdLmAuVzF1dFFvUj9sdWo9cyxLL1pBRjFPOjY7c20kbFV7PmkoSys/OF13Mns2bFlWa0cwMmx2PEFwKnAqUG5zKSlQfXUvUWQ5NSRZcCFvJG9PfUhlZGtSb3tJTVshJVRSY3BwbXUrcXk8Z2pXKyhs'@;
put 'cmtvSnxnd3hwNVUwVWJoNC9KaWhxYXBYWjlleWxeW09Afi9HckdjKzcoKk0lX0ZRPmJsKmZXWEE3TXMvfFo1WUdeNjVLOz03aHJaKH5ie1NeI0FmfEwlV1pPYmh4djx6MD1AVF5hVV5xQy4vUzU+KlZnYXdtWWY2LiJvfSZiNnVUTVtLTzRLIkt9JmFKU1VYUVUxZ0dvcz9lOl0jVSpzWHljfXF+'@;
put 'IU95KjR7TzMmQl5PV2puLi9xLDk9dF5RP0AjIV94YnNwQlEoRUZxbjY4cEQ+MD1sTFpUdVMrMCV9RU88MkhpMjkyO2h5bG5aY1VdOCZ6OFE+OSVHYVcrVnY3Vzt8YUldRFFsS2kzfHdvYFgsLH5qWlomWCMhXTJIL1I1UDN6KkwhXUoiMlJdMUovcTVGN31ldit5azoyWSUkWnY2QCs5Oyh4JjFj'@;
put 'P0R0dmRAZVt9U3B5MnclVS5xOCxmO0VmfnFIL0ZdcUFYUThUWHZrPXpCUHB1MVRiNnFFWHwsNnl+aWF4bytfXnw+PXwvRjorc2RqWHxWV25bPFNkLm8oNnR4WDFbKSVKaWhPfGpfVHBgQmU0YSMrTzFzbU9FaS85KiY+ayplYWBybCFDdjZvUVBBLyYydnA1JXxXU2wjLGt2YDZyXSxSZkpFWzh8'@;
put 'MjZ9QyhoL1B9MyIkSUV4SXxGRStHYVlVLE4xLHMzeChsOitydSYlI2lmX0RvZ3ZkM0MlfCYhPD1DL2xmfExUNEsyUXl0SX5gOldELyRle1BffGAmSXtaSGl8OXRaKTR7fExCK3pGUV4zb2RtNF9LVXhPdWNlODxDL3NVI1pwU34xQzYhI28+QDk3SFVuV3NzfXpMOFIudSFRZUJ7c1tCajxtfGFX'@;
put 'Zzx2dHx5bmJufHZHeVJ7diFAW3BCIiYhUlUvNTZfRlt9TkU+RlZRVyxkPF18WiM/LkNiIjNJSCQ2NUNQfkpUIV47TktQXi5jWz5sPCFdS3VIcHp8O1sqZWR2QHA9NCRQdXV5PUV+bigmZ1RUISRvYyw2fVBVQlomazhnQF0rJXZRRUM7aD0uIX41aihfMj9qODVlWmFjKFR9Pj1bcHtxfGslOEg/'@;
put 'V2BpcDEuST1PJnQwJX1XMz1PcSNGI0dedVlRL25xRDduWXg6TlcsSyQuTzUmfXJ4UT8od2pXRzpVKE5kUmNQLixZbFJ+IXhyTm4sUSlVUWlkIz1pKks8NlMxPjhxPz9vezV3UTc0c3h1X1RUOnBSOW4pYzIoUjA/PVVpXyJdVmxmdFUyPFgsQ3RTLyw9YiRJIT1KdkpGSWQ7dXgvN108PVdSV21B'@;
put 'Ki9Ya1tebThEODNwS1M0cypKZjs4XnwkZTE0bn00Q1hGS15HKEFgVWp2NGwlWCFrViZvcThCT2A6NDJFSTlIQCluVD5NO3lEPH1HdH5xTl44aUE9eU05UUtfOjp0VjtIYXdheXVXZiU/VmwzT3h1JTRpRm9xdmZDPUdObTp9UXNNeEh+JUVveHA9KHI6KERrPCk/KmV3RC5FVmMsUn1ka1UpQmJH'@;
put 'azE6WzVWVj0/Y2g5ZXV+cVNQO1J8QCI0PGd2TiFlNmd+cT0lOF5WaHlvXV5JO1FyPHg7V2w0dD12aTNwOTxpVX1YQEJyNCM3V0pnODMvWzNOe2s6fn1ZeHtKYFtRbnV7Pm9CMFI+Zjk4SFdpd0g8Vn1eQSF9R2Z1bHNpdVhad0ZYNH1Oen5PeyFXaGk4Q1NEWVYobjA1LjxULCk0RnQka1p7ZGgk'@;
put 'a1FMdE5tJU5mcyZAcmI2YyVIJXxwSkBJajZIXi5VM3IxPHRnVkVXRWBncz0oQ3pCTU09ZHVoUHk2OlVYIXZOfVZRY2Bla0JiTFZSIXZfMmAwejYmWz1GcTRgWyl5KkI7YS5JOUt+ImRQeGlnK2VHNUJQT2BjdCMmWmFvOHJUL2hgQUlTdEY7LiFGZyRNRmdyI1Evb3xrND1NP1dNSGpYc0lEYTJ1'@;
put 'WGQqQXFAJnZrQ3J5LFhHWDdpLDRma3heWTM4Qm5wNF4yNFo9NGVMQFRpeSRzQElzOEViP3k0NngmNF1YQUpbNDR6Y08mWjZkQUlOPHIlUDpFNk9paTdEcGExKUwxT0N4TXpGTl1scSV4OEp4Xk1+d3h6RXtMQWFffmo1YXojKV1iLkE1S3lwZUFyKzo7QiNbLFBPSF9PL2ZdSmUzZEQ8MVBjKz0v'@;
put 'OWB1UygkemdmRHB3Sl5EOH1Db1QjaV0ub2JlIkkrZnslLCxKcm1eQ09uTjtAOGAxTlMvOW96V0FoKVtIRXdqazMhanNiOUh6RjJbOz1VKFp7TUZZK2dLKjlkXyFoR0Z6XihPNTl3TCFbSEY9bGJ2e0YpaVVXM09lQ3MvIUpmKmN9ODEqSDJKb1EkRHRWSE8zN34xejF6MWwjMzdRZyhMRHg/dXRZ'@;
put 'KnkoQigodilNUU1RTVFNUS5NY0diRVR3WjZTI2VNdHd4fHM7Vk1YeCg/Nk5kdztxS0w5SD1udl1bV3VYJGdQe3MjOylzWGY8N2F2aj5Ee054RDZbP3hONWYxelZNQ2RpeXVfXz4pJldWRGZgZylhZiVpN3FDJWhnbU44W2RPOyhwdGI5NWApPm5UWHhZNTk6b05uaSJERG02JUJ4KkclLDlIOixj'@;
put 'cG52LEYrRD9XM3EmTW1veWg0UXx3aWZGO3hzcCVWRlpNXmUvYWFwIltYPlshQWZCfm1OOmpSPHxbZWU+KV5AOX0jeDY+RUZPeU46MmZVekMpNC9xYFBfZkRVUyZ6RUpeQzhhV055d18jLDQ/cmBnOzk6I2BpSkQybHVzX15oOUxYSEk8bF1qLDhpUm9qYm1bV2dgYSxeWWg5KWl9XSQiaz9QJjJd'@;
put 'NWt+RTZRRzlVb15vdFliRjd0I2gvOUtANjM5VzcjJmVPLyMxKy42UTU5ekRHQihxUj81XS5Ecy8hSnp4Lm8vNCgzMDV0c2p7JD9zNEtGdnV9cW45Y3prQjI4U2c+XV1MRnhGe119a1RNcVgiU3dGdXVjLCt2PEM1QztUdls0d3N+fmBsX1h1JDFrfHQhV2J4OUI+UDVZZ1ltT2pISUcpQSl3Wmwz'@;
put 'V0NOJjFDaUwmW0Y2WWpMP0NGZ3o0Omx8Xz5yYFN1UEdbdUUkdT9ALGcwdDYuK09mWn1MeGQjV0VEKXcsN2c0eGB3UEdHb1lJdyNtZEo4dyFudGsrezMxQDNLTDwvL09ObUs1eCpiSTh2MWtWOFo1Ykc4KF1faTQ0OmJbLjZZV3s8UCVaPWFVSHJvZ05JaVtkYjIxU1BvZWJZRFkySGJAaF4jVV1f'@;
put 'Iz9uZXZpNGd4TUFVfFdWVXZnTGZjO2oqTDk2JXg3NlUlPCxYP29zZ2dVREt2KiU8WlVJMGl4eDE7XX0pZm4yZzFuSSx+WUVRSTJtIz1deCpJL1FaZl4iNyNkUkxucVArMGM7I1JWNyhIOUd3YkV8N1dudkt+ZFs2RSV2YyR2V0g0X3dCLy5AW2txV0lgdS8jNSlDc0c5RjtudFs9cSw8SSNDOzdL'@;
put 'P2BGLiRDfWxCSSQkT28iL2RdZHZLaG5uUExldkd1LEEpLDA3ZDNMNDU+RUlPT0NYQCpsJnAhS3tXSnlPYyspS1dZV0pwMTlJJHt0WW5IXmVmV1tIckFIRW4zPXA0Ujt8QHBUJWYhR3xlYio3blBmWmVuViEycGJqayVHPDhxZTtGWCU9REdQUG5CJipRfkRZK1Z3bDc2VUg7YWRbZHVIUFUwSl5E'@;
put 'JWUyPkBhMVczQ1F+NT15d3ZjRGVFQE0kdTR+JjtxclVfOnEyYn1BYnNiZDQ7NHApV1NLZT8sPUdXQjw6Ylt0ZFA7NTQ7cEEkNz88Oj1iWjhjKSpIMnNRVHZqITtBajpvKi5VRDRtdlM2NEVdVnkqRnZsaDg3Mmp3KENRYUVrSTNmUUd6YCYyUFReUnlvJHUkVW1xb1QlVVJWOW9jX0UjWypYSE9g'@;
put 'R106Wk90WGphOCRlUWUsU0Q4NjhwMnNGWCRnUHtoWyF+RDxzcnZEIVQuUFpkeT50ezxudC4+RjRocSI4fW5MYVchRE4/d3ZdcUkwbVsudUojXTpmbSY0ZHxwSEB1Zn0lW3EvZXJncWJELF8mO1hCXmxAdmgoOUI+cnMjMEI8UGY0Vz9VNDJyRVdeWndEdCwpJHhRcH5+cVBJZmNVU09mUyhxUkIo'@;
put 'JV8qRHZsbSU2fVU7IyZLZHNZVnU7RFRtXlVvS2JyaG9QcmlOIz00V21oflUjWExaaDkvZDleMTBHSG97XWJ6I3EqPlpBNVk3WihCV158MEYwMHcrUXFHUGE4VmpHNDEzZHJRT1thfn1uZV87N3VlUjR9KG9qTip+eVRAaS4meFglfVtMQXAzP198TStlU3U+dk5+dDxFP3tvRF9bPyJeS248aDRk'@;
put 'e01fcyxCcCZFUXZ3eTFSWCMsJVVPJGhnLDFZY3FxPFRnJGlvSWRIQ0s7TDxfRE84dW9WfklLTFdlTTxtWH0zR0JmUlVFNnk6YnImblZmUDs/e1VEViRrT0Q/P1NGJGhfe3Q8P15ITiZhIVhmN1NDKmQkWXYoMUFUMlpGRWd4TmV1JTVRcGFvL2pYTDtOIyIvbH1BViU3PEFyZnpyRjshWlBUfVU2'@;
put 'ZDdHPF51d2gkWmxaREM3QkVHczRJRlYiS3ghR1VhaFBWPWpjJilHXSRuIUljI2Y1T1t8Y2g5QTRfOiZ1ISJ0WmAvOFVRRlFPQVJHRz48ZClbXk9zOSI+IWU5K3V8QkdIUVV0WCpjKyN3SEFEbysqTUlVJWxUdilNYWUpOkFyXUx5SmN9IitoX2UofjM4JU59Jnw+RHJIXXAvX1UyO1hySDp4Tz98'@;
put 'IXRlbHVVQ0omXng7IUtAIT9pdFVDMnJhZnhdPXMrSX01SiRHcStBK2BLaSUsXnxSUnomRCRSUSVISFghdT9lW0I9QGBtamdqVzNqfHJuUFRQK2A+bm1fIjkyPEp2W3xndWlDJHolLHVNSVF3M2duLnp0NyJHfGIpRWpOPX5yLjtWc18oV3JZcX0jbURqW0U7YSFPRlJpQzFzNiwkdzpATCteJVd2'@;
put 'ODp1OUJ7YkJNblhRfFdHTllFNlV3aE9KbEl+SHdEL3d5bno5RkRGLG80IXByRHMkIlEjNFA8YmZ+V3JRbUt6Lz10fEF7KlAvbyxvVU8mWWVLZSFxN1smMG1XcWBQMXQ0RUlQdyU6MCZhWmMjOkJCQzxvIUc3QjZJUjlBXmNON0QhVDNkdCpxMSt2Qzc5VzVqWDg7ZDZxb3NSSyY1VG5GYm5jV30k'@;
put 'a19UZTQ/UzAoYiJNfDUxSS9YRzNwXUN4UU1FQS9ydXtJK0xEYURPYCsrL0A2MzEqa1M1fE1YSylGeFo+WyJ0RFhOX2FXS2t3fCtmUnNBMm5vYkkoRmArLm84RlBQYXA9ai5IIllJanI/LlE+LGEwJkJ2KjtIMDpITzdbem5nV1t8a2d1YD8qKGApOzdlTGUuTUZsRVApU3FIdytobmwlRVs1NG5x'@;
put 'enJkcSk4bFlqa3dGRU43Knw1L25nVVl7e29ZdWI4VGwxNGBoeSt2dHdIWixNVnpSJH59UyQqZClMOXB4NyVjeUkqNlFjUW1WSlh2fFMwXyE3Q18odiR4THhELkVEVmBWfFJ2W1IvfiZ0KCI+LiVffkV8SjROITImazReTSlPLzl0IXgxfWwsK3lhJUd6b1E3OX5ZeGpmfXMiKFppMDUqaC9EO0Iv'@;
put 'ZWUmMUJ2X2RRaXlUJiJ7KXVdRXQ+MHB4YTtqajhGfjB5bDJnTFVFbTslQjBAKSU5aDFxMz8oVSFoPDFXX3E8WG9waVhfZ3NzdCQ+PVcmfiU3Mn1XfChPbGtbKFUjc3BFUi5RXmhMe3s7Wn1zeiJITXFHXnwmR15IMUtxW10kVnRwYmMlaG1ee1QzSHElbmBsXStbQj4qfXpCXkxoc0p1P0ZhQVdN'@;
put 'WWp4KFNESUc2TzNYKixBNCMybnEsbis4QFc8XkRaNUl6RH04SihTQkt1fl1WfjQrdkh7O0h7bk13ViJ7MUw/akg/Wmo9c0NfWEN1RDZIZTlfUV9gP2cufTV2fVRgS3B8MEwiVU5APnZzWD9ePTlgLEE0TDI2WW4pdW5Lb1BEemY9Yzw/R2dHUzh9ZF1hfExfXVAwIX14dkB3MV9qfE8yLzl+Tyky'@;
put 'PihfUXVPXihWPV1fSHdpcCs0VCZQZUNMb0AzVyt5VSQ6QzEyW1gqc3B3KCl4Zj9wfCMuVXg1IVQjZHMkMnh9aHB7O3NyfF5+dytiUmQkcmxGKi5rNHk5XlZAXU5XSD8uJXZxTEcmfm5QNSNYLzA5WCZlTWEwa19ePT9FMCE3QVJYK2h4ZE18XV0lQVBELkl4akpGUV9iUHBHR28pKlM3aEh4NE92'@;
put 'aGl4cExCPFQhbXlLTDwyZipZOXJdeCtSbjZ1PDIsQz5SLEE8PUA5fnNLUChUKVpqUUFScTFLTDNzfj5ZYltqLnhHMy5JPUFbekN7O10qKXhNJDhwVTcyL1BRUDJ+fWolRFVPZndWQVsvS3hGVkV+USZLTSRrfltaYEYwc1FGP3YyMz5bPUlteENRcHtFaSxoMk5gMWFwbG9YUCRhVz9EZnhleiE2'@;
put 'czpbZ2hPNGg4WzJUXVpxbi54fnRnYCo+dndwYFZjZSQva2xyZSh4ZUY2U3VUPj5lTW11biJSTk1tSTcudD41UjpWeEFzQXBgbzJbUDRAVkw2I0JnJmN8fkdAJW5xLylqTHh4XkV3I2t5Lm1jdUhkR1pgTWwsO2BNKHt1NHJOIyhrci95YC5SQ014MHshWT8lcWZocSMoamxUb1E5cm1DMl5BcVsh'@;
put 'P2FrWWsmcXVCSEVZd0dhK2NtI09XZ0AjVXdNU0JeMVkpdm5pPiEmdjEpaz5hO3BweEw3JiZPRURGMTk7I3lkNmZTZCt6YXFHZEwrb3JLVXZ7YWFkREk2Si9LezEwPzBtQSV1PTFeLCYyXkJAQW9wMmBtTlBMWypVLGBrLlV0SGpUckdDelImWlgxeGhjQEs9Nmdve0JddUlqTSg+ZSQxbT4zL2B3'@;
put 'aztwdXIvPjBydUAvNVMzW1EhRG19JDJmQDQ3TV91fWtSfGNrVXNvQT9+KEQyPFMmL3IqPDokWTdSU3p0RTEqMzYkUzg3OUVBLHc4NkVwMXhse203UncpQ0djYG1ULnkqY21zLmo1eDEpayZFeGtyLnR2QFJwXT8+QFdsZzBlLmVkNF1vfV9pd3wyXi9dbiZwZjowN3pwNSsoczteIWIuQjxDZ2NF'@;
put 'a05DWGR4cXomaFIhJnBJLCEqXyFvPGlKZjwpWmkkdCRqV3hSNE0sciYld21VO3pRRTNYaG5RO1FiUUExVCRHPWt9NmclR0t6SFUqTUw2KTsyZ3opa3JkJE59IkJzTkg2QTBtIVhOPSRUUj0kPDpuampnPyRAWTVieHhYbkM+ZXUibmlUPz09eEElIUo7Rm9DQU47cVd4S3YhJWFpQXl2VSI5NSZo'@;
put 'IVJXX0R+akFTbHc/a217LypmbF8rNz0pRTFKZ2k0UlZYdXxxZFMrXV8iPUk4fnlAcGgwWDBpRj81QG1LU1VxUkV4bix0fURdTV5UJSsuaT5JfVJEeXF6RCtOLD0xVCRBJX1rcyIvK3R1WC5kSyJOS2hlWHZ3bHlLM3VTR0ohNVRyOkAoT2pNdmc0KUJAY0BDW0JrQVNTel5uQVN9TXJ4WldmN1JV'@;
put 'YGI8V3F8ZlMjRzYkLDp4eGNzXl1gY2h4I1F0Ymp4L3ZSYU5+UChUWFR2NSZfaTd6X0l2cE01KixOW1RJPEFfX1VYO1pJS2tgJCxKbXkpN1FgajlMJGpvYV5dbnhwcVtnXmUlR0l+KiwhWzAsXVdgNn1ZRW5yRklhamhsM15EOjU9RVl8cE4+LC4hI1JUeURUYXMoLCE9cWRPTGt8Z2xHNGF7emF+'@;
put 'Ozx5cEdDeVgwUz1XWHN1NH4wYTssUU5MJndZWSp7IU87NT57cVpCcVs6MjdvbS5AbDIuMG8rWXNFQ1RsJkVkN0A1cXRNYjdoXS5XIVM2Kz08JmBdQGxXNEt+Uy9xTks6MGNmI0JiKThpOENBT245SzppUD9VX0M+ZGxUMSxkPkY+UWZCKCZiLjIvQV9bXilqXUJdQE5+czZhemVzWix0fWAyfTY4'@;
put 'U3JaZ1pRRXBxLF48PUgpK15qS2pUMWUoSllmOVZaPnI4a1c7YVJtJWxgYVg1ZjtHbyhSQHZCNWZlODYsVFlIVmRQeSRFOzFJbjFjWk5oZG5kek4wbCVsKnUvfm1qXjwjPiohKE9OayU9cl5Ab2xoTlZgMnxXYG9AUiZYblZ8T25EOVU7dkdrQWssKnFNc3dBQHVjeCN+MUsjTVUpcGJ8Lz0mYkIz'@;
put 'QzNQZzkzUHBTVFJSJm90cU8oX3NxUVNmVmZ3WH12WyVZMVpAX09xWy49QDYqPnNCXyljIyp1T0Y2WTAqIUorbSssMDljKComck0sfj0qK1NmU28hISVpe113STBGSHRiYzVSZGVFKzhiWkJIYXZPbk0kKmQhKEkoVTJ3I0x9cHVSbCw1RSRwZyxAZ11mMUNgIUBwY3BHMm02emlQIVhQV2YlUGk7'@;
put 'ek9FSj1pT1JkRS9HYDVYdm8seGZVbUgyeXt2XlBrPlIiPW5hRjxiY3pgcEdlKVYkQDBxQD5sOyVvPks0VTBUR3hEckcxNm9mOzltZlosNXBad09oXk15OFg5SmZTO0JpcHAmJTUsbzlUSWh4Y2g0bCg9fmJ7I2AmK3VtYCMpKytPOWdxckU8PzF2NixAPS4wc0o2a2wsUj5VKDRYcnw1PXU5aCJm'@;
put 'PlNoTHtiQk1xYzEiLC97RCthSUxeNXE2KmVnYng5JDxAfV1KX1pXXyEkOEd8LEhQMTx7WUROR3ZtTC4zLmhFMW1ybWE7UXZXXnx0XixTPlo9SVopMS53LEl5YFk+anhDel1GZEUpS0h1V11ZfEZbKXxPQ3YyV1JNRT8wbyxeUl52MSlBUWNPSHU0RTozPVc7NlRTT0w9PW9zT281QTpQK19rPzRm'@;
put 'YG5oSUcsLlMqT0ImQWgsbSwoWW5SbV1DeFFQMTh9RFAmOzMwKlZneTUxYVhRQ2QxKkVQPXJENz5ZeU5GKz5HS0x8eX0rSW9OPCFFbTZKRi8ybiE2ISR7empueHhkfnRUbVlwKCU4WUMsYHkyKz56Xk03XTY+RHRyOXN9XXMhJDNCam5gSzl1c3J9c1BxMVEldTMkKEBgRFowUTU1VSUmblUwXkhz'@;
put 'NHxyTFlGK35eYiUyIVh9STdOS2UvKktgelVjKHlCLzh2PDtEMlFlcn1yOixOVH5+eFp3JlQoakxTTFhRSjw6eTZxX0ErP0VwP3BWI3V+WURBT2ZaPENbL0kuJkpxPExwcygsNnwpfFRjeF5bazp5eXpdKVUhcWh3fHJ7PDYhVlgxJjNUW31wc3JoLkZtTXp5ekZtU15dYkwkM104aTh+Qk9CPUA/'@;
put 'OjwlVmkuOzs+Tjg7JSt2PEIuQWt2Vk55QjJ0RUUyQi5BazhlIjI0ciJWRSNhJU87fHtNYShDbiRkJCxdTz0wbXJvTyN6QDBtY2oyW0w9SH5QayQmYTheczNTe3JkPzByYEkzK35SdFV6VThgVzZKcSZgQ3NCK2hafD9oPkBmcyNXcHEvTSVEK0FVXiVEYjdqNyZJMlYuKHpyNiY7Pmw3VXo7e1J2'@;
put 'QEFzMSN9PzVCfVM8cC5zTndFY2JKYlUuTk9UVitCQGkuWGkyQnRhVGFbQDkwPDAqTmNIKllkWkMidihgTkMid0RlTHZaaSFsNToqXkRCKzxCZUc+d3JObER+QSVjNTEzUiUqW0ZDQUFBQUE6Q1BqMkFBQS4zJWxjezw2ISEzVCZBMmh3QH5tUT9CQzpGbGI9SDw6YSEyeXxpM09+NT9kMDI/Sn17'@;
put 'V3s+VXZqN2pkQ189fC9+YDM/QHl1aVl8ZzNHcVRNWndlalBUSFMlaDIxVSQ/U3QmQHI9VWZhOHtTIiNLMzByZEprZExCRGZ4YUouREdPOklsaHtSaTVYKHdFcixUPFghdyVRUWgzS2pwaHcoKU8lcjIxYkVve1VIPkJsNkBDXkB8QEdoRV40fn1nc25wY3JiMiUlfkBUOiV1M21zbzRdVFN4KldO'@;
put 'djRSVWkyZ1BZfWdxKSpuVyROb1BpO2lSTzhXSyRReTlJeWYvO2hROCxeRU4+OF9GUkc9P2sicT1dMFAkYlAhN1ZII3VSW2V8N3U2PGZOWzdlWXZvdkFKXjxwZllUYm9FT3l9MzdsVjMrQi4+KT05Y1ZgYHFIXV40Oj1HcnYvOi88JlAsNHU8RjoiYTlyMHZETUI3KD1iejl4RFt4RG58UTs/I311'@;
put 'L217WCtIKGtLa3ZUR1pZT0s7RylpY0s+YXg0ITl3b3F9JS9EPyZmb2JnZHwuMWdiKWtrY1t7ZmtAamglR2QlYmRYez9zUGAsWD9+SiFPVCU1bUQ9KW0sd2JWYF8uQHkyI0N4QzhZaEM2Q3kpKk1rOmkwPXBzJnJrXXZnVU81RGZqOG97QGNGQHoxUWY2ZzRNYSUxNF5pNFV1UnZ0Km0qW11ye2dH'@;
put 'Rm0hI0FjfVBjdkdebjslQE5HJD4+NWFbTjdLR1Q1UW5eUDc8NClTJD9vbT1OeTN9US9Yb3pHSyZJcWkrRCZTW2Zbb3xGOmdidyMsX0Nxe25ycCN8OC5nTzk0Q0hPXkdlb3tqPSF6d1c2S2F4Vm9xKmZ6WC8pTiY+MlhhUUxfb3xqXkBrWXtrJjJocE8pXV9NKWFKaG1WRjBlZTVffGlkS05HTmko'@;
put 'KFRJYFdjUk0vLCQjPXlTKDFkTi5dI2RgZyVrSEZSdX1IUXd8U0lwdHAhUyNAeCxLLjI7d1s8W0QxOmMoMFImUHEifHRFQGxzfVpCMHZdXj1qPmhpW2YlTGVUQUVIXT19WmtRdj4wZkp8eUh8Kz96QDFwbGl4c3J2bTkrWDV4bT4xVnxqS1FdLEt0eC9HJF4xKz9HflovQlUzQW97YHc1ZiM2Yk5Y'@;
put 'akRZWzxfTm9MPGVTL3Y/PjA7eDo2Jnx3dGs5L1RGKUdXazpTNVZudDZdRnhuYSIhZH1wRG9dcmhURVZoZk8jPl4vZn0wIWYqMVNgTDUhXTtobUJpfiIlL2YzNCElQ3ZuQXV4ZXNTNE1lMmF6Uj1mb31DLmltaXs3UDEufiZOQHJ4W3c9ZDREMUV4VU91XXE8PW5wS1p0SiRhVERTeDUpI0s9Zzx4'@;
put 'IUhKfTh0M0xdKiVtb104c3pKalNjRk4vOE4/YXliWkRTJE1dT3szajdCSyYwLHtMImBUYnlZM0hiY3BSQkliWFY1WTxvfkZOY3xGJGBoOWcuY142bE13WHpnWU9hQkZgZnZlSW11alZrVFJsX2o9NiNAR0l+QVF5Rk5aZy89NntYSnxlMTdYUCNwY2wrQDY0aE1qPU9OLk50MCp0dDR5dEw6ITk2'@;
put 'Jll0bTlpL2VdXzldU1dWWzgiOmBySU9lI1pCeHNrYXpbZjVFQGAvMXs3M257WFcjQl5Jc10/P2d6Ll0+QytRZTUpMTsqYC5yOjNvMyVmciJRajBtOUZKRExwZCZOfmZ4OGY7SjdTUXZuS216dFN6VFJuSjZ4MjAsZFFUb3wlcHRSJVVpbGZSIXk8WGhlUG1SY1Y2OVIsP0xlTysrTltpOUJaWmlt'@;
put 'WCZtKCI0NH1sR1kmfEZ3bHdldnQwRmhodTFhRVRWdT5wNkZJfElsNERBOj1iWSxLVzhNYz9mNF4ydF9ffl1ydGpfWEdNKTIoZzN6WzdePG5vTEdbYmRddS4oVl1kJV4zP046U15CP18paytadEooI3c6TEVPZV9lTkNReXpWRV4mXmczRlojOWN5d0dXK3VXTHskbWtIYlpUQzIjaXFhO0E2bzpG'@;
put 'SDFMNlVLKEQpK2MrcCV5bCNpd1ZIQj4oXSlSbXd7Nm9IKiYhI2k5PnFjJloqdkdAdH16OytoPjc3LF1lI3ZxZzVWRz85P15uZnwzbz4jZko/Ty9Ebj9jIS8kTHF4cFZeaGk/OEZbXyh3LmVqLzV3IXBwbSpQIm1RWUNXZiREO3Z2O3FrREUwe1pgcyF1RyV3NlpIQTBfbkllIXMqUjZxX3Z2Q2FY'@;
put 'bTFSVFdgRD14KXlOYUUlV3RXanAoVmBqUU5fVSQ9TX1rfFNEKyRyIzMvaTl9bEVvMjFaNmp2S205e353bjpxJSQ4eSU/UjhXOWB6XT5obzBQa3FqVkYoIlM0SyRUQmF7NUdhfHsoODhGJE1Xd10kcShZbWcoU2xoS3g3dS5JWEVHa0B4KDppXlRtcW1GI3gyfChSXXRvdng6ZW5iKWw9SUhibjA7'@;
put 'SFo/ZXNvMSlUSlRPNWQ6NDNgR34zZTRsWXFvY2UicntZXXk4K1VldUVnQiYpbjV4YVE8TWckS2VfM3B+KmJOYnRYJml2OG1sXjtHPUtWPjQvOmAqfmosOkNUOFhVUThXTX02RDZHQFg6eCxeOnFnJltjVEl+MysiP2cpPUZRMDp5dWdmOk9QYC5RQCt7RVR5MCRSRE4jeikicS9+OjgjNHJIQE18'@;
put 'ai9kR2hsWFhpP3VmVUdmIUlkT2VZQSZEI1AjOC9oUCtUcHh+WllLPDN0KztufDJGK2NvO34uMTFNflpsdytFUW03IlUkczthe0Bve1A5TkdFa0tMMXgyal1SN2djYGcofjpWKk1ORWghWm53MmlFLigmLFAkQUgsbEZ+aTJ0Q1VbTSg6fUBeNGh5RWhwO2R+Wk97Om5mO3pkP35jeVA/UTZBME1F'@;
put 'PFdoTSxXQm15V3c5ZCF7LiZZdnNCM0tRPjdEa1hFeiozeVhWSU48YWI6e2E6a1csS3klfVY+OXx1OEVGczFDOjxkd0k1UGx+Z0x5JmxARipmYlU5PWZLVWdtcmxuRDJTOGsxdHNUUldzYTkzaX4yTyV6QWZabWZRNT4kLCQxQ20vW3BoRmJtR3Q0WCMqZywvQmQkc1NJQno1Kld6L0diPXEhVEAz'@;
put 'UEJQSmEqTFVNX2B2VXNJTWJzTVFwIjZGRVdCRThVZy8oSlBFRHRzMk18NDdZMlliI0YxT09qVzVldzdFclVvJl13VCx3cEhtWiV6QyFIRzltQjEkVVkvV21nOEhbPmxXJnBBcX5INXpwejBKcE9eK25ia246Zi8/Q1c4SHxuZnFSMFszNjhORXttJSJEQUVOZE9YVXhYNGVCJnVvYjc3UWo6QXY5'@;
put 'TnpgIW5gcml1TX5+dEQlSk1xW3hpMXg9Pm9ZeXR3aWZwJXBlRDVFUF8mQGw5bmJvZih8N3dsW0BQfVkwSz50UiJuZGFzQm1fKjRVKCplMnNMJF16M0lmam9mZ21fSGZeUjEoankuYyVMZ3MxP31ZZ0BiTWdtYC9OOXN3SG5BKmJIQ2pqdUJTTFl0OUF6SG5LUHZ+fFczVWhZO3JaTDVYRiYrRjZk'@;
put 'YjVFRTEocllnNHpeJjdeRHVLVkA/VnM4X2BpazN1KCReVSwpMk01SzVdZWwkYEpXNkByJXx2ckhueUoxQyF0Rk9+T3osIzJJcXQ8LmpMSTtNeEVzZTRea3NHYSs9a1VqXlpZJERAUTZbSX1Ndm8mRmZHJUpXVWUlI0ljIS8+NUZQdDpRK1o/UVBWKztXKC8jU0FNMTd1O3FpY3t+fD82P0BdcTZO'@;
put 'bjpGfjlhI0NCbHcrLitNcUsyXytHP2dMd2xNPUJqRTMpeWs0MmN7X19KVVNVWUdzRVRIPmYlRTV7XykkKlA+X21aRnM9QncpbTskdi53NG1LanxsZCUjUiRDdDIvN3VaaHlYSE1EIVgid1gucl57b2IpK2F0fTRldTZYUW9MeVVwPSlYO05LTCt4Z1hJVWxheCxnTlRKJHBWL1EiK3NqI0dCdT1Q'@;
put 'OV1hWXppals6dXNJOUQqUkhrMj5+dDghT3hEZWR2aTd5Jm1YT2htLi4kbyE1SndJM2wwZUQyeU1PcTdWNGBSQCxAQThjX3YwYXg9diEvWHozUEw+NWgiZDJ0Lko/P2F4RX04VDBjMG5bT0xZXnlWXU1kV118SnVCQS5sW3YwOCxRfGp6XkhIQFhqMyxWJnxwPjxHcT8oKWAsWy92X11nemsvQ1h2'@;
put 'IiVPaVowNV92MDVnL0Z1ZCMvNXp7e3g2fGJkSDBZL1lJI1BKPT4wQFgxWWo/WXg6eCUkeHFtNWRYNXsvejttXzxuakd+YWZIMXt4aC9wVyNPVyRVR0B+TXQ1S0tNdlsxRnJEeV9MeFsjK1t0e2FRXyMiYHZhRmskQyFGeEg3QEB7KiVCRXtlOmx4Zko0PnJoJnVVR29vMzIxa2hCMzJaSGIyMysj'@;
put 'V1clWTNjal44QTEyamdzOClhcXl1dnw/LGJIQD5mOVlAUkFaRklmbGRFYlNwRncpZFt8Z2szI05SRSZ7SVdRfWA9PzBeKWdDK0lwbW4xU09edkA8ZG0rJl5IP0JzZlclfU0sIVZTJlVbL31ZbHlUIj96XlZdNm83Lm90UGhCWD96cGQ2KC9We0NYcSosfDZeSEI5T3cwaTklYzpIOWloNkhYcSgj'@;
put 'XmxYZW9hUFZjbHpYZkp8PnQ2UGAic2YoS0hoaXdgPGllRUBGaU4sQS5oVlFSX0psN3w1dFFaMHBCezN+bXpbJld8digqL2gzLEtUW0wkY35lLDAzemxFam9TfUB0cHNVWGJYREtlfV8yVjlsO3gvdWBVTUd9WmBUV3Z9TzxSb29ANE1hekQ+W1kpV1IpO09WNVMkPVR6Mmk3ezw3Wy9CSjhKWjNw'@;
put 'JlhSJVowdmxdTntmN1ZhUmZTfFs4a25gPXJMRihDSjV+NTdhRTIkPG5DbSpOW2dmNzchfCtoZlYpIXdsV2Q/PiZhLlklI2NzJlolIkEuaDNtNyh3YEBDNyh8d3VmSDFoaXQpSjA2YT88b28+QmdNXmdhKjdQTDZuSXMqaE16XmluIjd9dk44RmMqMCh7fSpeaVsodjtjMT9aPV9WIU5NLFBtd1pO'@;
put 'Tjtuc0p7fihTKUtsJTJLfU0wYi5jJjhlUTxVZStJPmRPKWY7dzZPbD8sSHx0QXxzRnQzfjUmKkhHVFcsSTgmaX4/aClzVkhzRC9jUmdueH1eZUQqaCJIZE9OWix+QmNOciFIPXJQc1VSWTJUUyh4VXpTfXR0fDc3V3xGZ0g/IXBGUUpoIyNiKF1fKi47K3kuNjQqTDBXXXlDS2pwOjFHJGQ2Tm5C'@;
put 'XkpLXUswTjxtKyFoYUovTy5Xb2VHZGcpVldWSzZKOjhSbjI1IigyRD1jPChJY3xgX1VYdEBNYSxhT2FZZiYoJlI5MVpSNzoqMXAifnUhNSxidzVfLmVEfSJjZ091eyFWZHd5bVlkMzdfQ2hxZkJAYnJJcD54PilHZylrdHFVfkImYjV6OnNPSi9zdXs/NS9gSHtXaUVAX1RIUHVrJCs5UHRHZTcx'@;
put 'TTIlSmo3MH1qLltmQ3QyQ0dQQSxyWUg2SHAoSjAjSH5fWzo9cjc2SGsmP1lgfX5nd1Y1K11MKnRgOmghRF1oYSNnNEIoUXpzI0pyI1lwZ2k5SWMsJmU7MStxUT9UNUosQHtLI2xnLE13NnhvOFtwYjkqSSh9c00uZXBDK3pUKF9feldUTDhwLiYxcnIwPzwoSl1INk8iNGk1RDBbRTxzIWpNb0xH'@;
put 'U2ZYPy56MnhjTC9kO2tTYHlERlMxUE1uKjNzMHNhUjR+Xm5zXWhUYTJna1ZDPHtyZSIkK2h5OUlsPWpgaXFrdig6cWxKKjd9fnNMYjZ4PjVMb0VIemYmYFApQ0V3RWY8W0Z9UnArQVhWQ35RW3VeXXxdITw0WC8rOkxoMTFoVihGOCpPRSpyTHNsRk13M19JP15QTmt4dDhPUHJOaXk/bn1pKmhE'@;
put 'bU4/ISQxY24pd1cjan05ZUxwW0lrKzBiRC8xKjxIOjBSRzNKOlcjRilkZTRdUk86e1hdP3klPjpkT209TWE+KHp0SHpzdDVVS2k7Ll5IKXxlTTZ5Sjk5NlJvTyErKHhCXTZrTjUxLF0oI1IsWHdtSV1EVnEveTN+XllxKiQiSXNmN2pYVSZIPHIrJTZZImBlVXRJJnQieiJaMikke3VUMm4jQD1I'@;
put 'aCZfQiIzI2dycEVvQyRleyY2VnNkdSxrMzJ3SnI2T094aHRKKnpELyxrPX53UV0pRytRS0VJSTlFfW1LM1FfaDJxPWNJZVI2NWZbMVJuPnVbe3JRLlEpUX1INmgxYm1zYUJsdk1jJj5BRGQ3aXNrSiF7YkBpNDYqM3xDdVFAUWJwN2dBITBaQD52Jl8mRGN3JXgkWXRlOyp2XXFkQGR3IUp4Ymdv'@;
put 'Sm42ME1vbmBPPmk7T2NjUFp9fUMrPG5xN2NDL1tAIVlrTk1uPiFZeG1IdlFIdl5tXUQoXS9tQnd7RHEsQj1FakQ9clN5bjRhJV9+cjIxWExYO25iYWVkWEk/M28uekY/MztEaFJdWlJpSkp0PmchTC46SjhZQyI/XkUmblciVjs2Mi9ePHlDMS94WlFxdGRYOzoqRntKNGk6QFpxTGZuYzxAMyFf'@;
put 'OkkxOmckemROOCxNOSlgMn5qPCtALCp2ZSt3WUF0Imk0NGR3OHZQfClRPV5KYGR5SFk0fVVuPFlbYWlALltjbnJkISV+PHo+P1RlRyREQiJGR0JQeDJNODosSChXOW9nOD9bey86eTROUXxaSyshP3BoI3VMLENxWytwbSZrc3xRWSw4Iy5mMzNpPTxXU0tROFclLCUpL3BWJTZXQFU2TXdVZk89'@;
put 'Yns6ImZ2aDJ+bkspZVJQO2ZCWWRTQXJ4MFBKeUlDUyV1fGhsQiljXyVJXlkwb1JwaypUXjlKL3xtQ2EvaytNVlBIPm02ITFDQT0/VGpsdighfXRJRCJZRkx5QlYwN3xqWlBHdVBDJDw5Iz4oOGttL0gpLkJuI2lWRWBiJV9rMHo2NWhdTXoyI2NfSn5QI1F3bWdJaEBmX2I5dV03Lmx1JVtrY3NE'@;
put 'PVYvQzFGR2M0MSxnQSVrSmB9VFJrWStuezAlS0c0fXZ6U21SZi5fLHdGRnspeElaMilaenhVRFdMUWZJaipBcWg9InpIVF1GVjBlKV10TjFJN0RQZkRLaDA7IiFzVCQiZTlWVT14SGh4RlQybiFfU00kMiFjfiIsJiQ+elE+TyQodW9jRjIyWCpgYlJ9W1BaYWkxaDJGaGAkSTAuMmIyMEY/Zmde'@;
put 'TFZJcTtIZUUrLzdQclpPL14iMyh6L3tHI0FrRisraiMlXVQzO2A7SClwcCF2I0YvaCMsJXomLiRHJUQ0Tz8lLy4pMCU8P1FZbElhRVpUUmBuZkhQOVNTUjg/MiJ4VnFfdEkqTF51ZyZJaU9UP31zXyghZyZXQFQ2aXJiWGBtLCtPKzRbNDgiTnA6ZVFLTk9uNV9UQHFXeHZkRl0janE9dDNNOzhO'@;
put 'bzRnQlNeaHhePThIbSVLL0E7TV9GbkdnJW0yRj1mRkdQZkp8bmtQek1sOHNORGpZRHFvd1YqUU8zRCkoSjtEWikyW3dfTylObzEiMHE3QUQ5a1NWPnI+SFs4Q09gKCMwbyY6P1dYd0llKnFYNyhdVFRiPEhtMTBAa1FiM3g6RzJFRSVDTUFYc2p5VXYhQFJVIU5oen5nOigvfHNQVWBtTGdGVEkz'@;
put 'Z3U8a2QsdT1taT9LMn1NVVBBdlBLKGMwY1coVU5TWSp8eCxPUmQme0JhVn5QLH15bD9MM34hUz51UEQ3ezksblEpOklEUmZCMmxubWtCQzQ/QlNQdmBMPH41eTd6SzFFKFY2JktwJGlYUFhIMDFOLyRjWHhKOEN5QURxP01pRG40QiU6d1VDc2NET2xHZTlQUUclPVBGP2t3NFVMblFePVEsfltm'@;
put 'N2diQyZNSlVIazBpMSZddjFSbXh8TjtmI25kOTo1eVMxOjQlK0tVfkFsbF5VXlthKjlvVjFSYHAwb2wyQEo5K3dfeVdfQElvcD5+U247fXlITHFjInRiR0tLVU9xdG0xWkM/Xng1U0s7Vn0oUGZnIVFvezZVcVQ3Ml03Vj0+SVd9UW85STVeZHBsIU1pJloxe0NPIXplQHRjLD9EWloqJG89d0xT'@;
put 'Q0c6bklUTDNPJUdMVihIQSlJWDQ5UHoxY3l6X35dczc2cjVMZ2BpPU9kcEFiYSVDfSUocjRKNz1mZltBI0dONkx5fil4ZENqVT1IY2EpP1k4R1tzaF9NQEszPntaeXtCKmZFKTBoOWFNKiE5d0RgYEd2KkJATUxjZjBWdUIycXYxYE1JR3N2LiRwc3VfaF5fb0EoRGxKOW5YPE4vdT1kLj5rOEUq'@;
put 'N0Ukbm1IYm1DMmphK3U+QXpkNmk6UCV8S1duSnwxQldkWnprJVN+Z3c6aklXUjJRWnppeWNDM1VhQ0B8LmsoW3RsPWx5NUdsVERNLGVgJFR4eiIsMHBQdThhWEwyWiRuUz9pOnZTNGZoVUkjMW9yeyU+THpSd3p1QHovNit4PyNNaEooYXlqaWh2cjRxSX4xUTo8TyRPej9+eklLMFBXMHVYQFQ/'@;
put 'MVkkYHc4dFh2JlgicnAxPThtW31uNl1yTCxATj54UzpRfEhEPWc/VG03NnE6PmxeTUFgWyVqNmo5cn5yNm4sI3JpWnQrP2k/c24kI2NlTnhMSTQoYEllL05jQ3JZdjRLZVJOZioranRoNHhARlZxcCYqeXgwaClDeCV6UlBFYnN6bXt4XltgSnoob2FvMXBGKHxERl9EYXZrTTx7RHFvekxRVlZa'@;
put 'Sl5wdStDNXs4Tn5xWjg0ezR6c1trQz4oZXlFejQ6VEIhd2FjLmolXVFeW2htVV1xfVQ9K01RVUkxJk9NPi42SXkzUTB4bjJodDQ1aTtELjwyUTlnfTtWTl9HYnRwNHNONkk8SU1CfGJvUnxCLnFZRlI6Jl06VkVMbGVbT3okam04VFkuWDF7T1VqfXN6M0Z3UFRQVUFrOnJyN3ptWWF2ZWMwSWt1'@;
put 'Z1M3fU5nYWdKV0VrME1Aa2Y9am5oLnJGMklDVyxCQ1U7Oj9POH15QFNudGQ1PFhaVShuKThsLHo9cDB1bFcvQ1R2YU8yfllBJitaS1JUdmxwYUJRYEMyPnJ9eGNEUnojfEZsJm4rRGsofCY4LiplUXd8RyxCU0Rne0YyNHJBPiNpSSYkTjRieDBGJWArMlguaHJyQCRFVldkUktmdmJJYF46N0w+'@;
put 'TCl+JjMwR29eOn47JEg1dV4rWSl+I015bkllZHBoR3hBVyw5P1M6IXpARkdifmVmRn4lXXk3PF9jfnBlQXs0cUNyJDgoYVlRMTZmWCE8Zz9NLiN+ZjxXN1t7WDR1MW1rdVo5T2kmRFJOOnQkVTQifVd3Jip9Iyl4V0ZBcHFeRk87Qls6Vml0KVF9VDslY3dPMV4+cXpkTVJ8cjZsR2cuPzBtKkYk'@;
put 'OkQ/XV1uKjk6WXdwbHNaUS9lMTJ0NSN4RHUlPF1lRnMvMilKN2YxdnNvW3BlYzQ1e0puPG9xM3FzI3ZUbTNOd2EuIXNnMjFTIW5Pe18zQCopI05SVyJtWyU8JVo9dkIkNCI0RWslQzwqPlU4RTE+fGczdFkrdWR8PFRgN1R3ekhfRVp6OnJRQnkmaTJYVG8jdWFGL0wsVFhpNj1rJjI3b0dQSigr'@;
put 'MnlMU0lwYnoqKygvO0k6UWpDXVYuIV5wKHcsK1lzMXlQbiN3cFU6dH0sWnxERlhifkJkJV4/eEsvPyV6TipSPUB9VykkLzspSyRQOEd7RyVOI1IyRGpZKFpqVzpiKnQsNk5wVkZwU3Y3W2REe015RUErMHJlOHtfRz9QVmxfdTojQmtWa0k+eGIkdis+KzhEa05ZfTFweSt7LDt1dip1UDhybHRF'@;
put 'TjUsWDI8JTcrQVVnO1t2JVc8fT1sdFtjaVt5X2lBKzxaJX1BPCpqTVtRPHdDMT1BO2NGZ3dSRkBAP0tGRm5+RmY5NlF6SiJtR2xFbn1mXjZ6MzF0S286TWAqNTtzQDQ1YCJKPmpPOzxxTWY2dH5XSyZjNSUuMmAyKFgiUD1fPitJOkBjQiFQTm8oY1BOSEYrS0V8amNNfXlNbWxNQ2Q4KChyU2BE'@;
put 'SGkxWiJ4IzJJRmVSODs/TjtPV0YpRExwOU91LHgkYX1uSVVqOW5nXnR3b1R+QCJGMCpFIkshSl94VGE2S3BzdkNoTXZGI0xuektXfUFTUGp8KEczZDAibjY0QGpkOzB9Z1Y8PCtNPG9dRWReXnRhaW1zR3BeJSN9bncsfGI1ek5vQW0wenRJRzNve0NMQGlEQFB3c2xhMmV3b3RZeGtfYiVHTTdB'@;
put 'TjdEIWU5JV1RMFRqLHc2OFR+cnRKe3omay8/Pyl7L05Haz5lI0F5bWRjc198MGYpZmJQLGIwU2dVI3x7b0xmc3NGcVI5OW5ockdtWW9SXnFNaGg4fTclMEx2anJDKER0PiV3ZmB1UmM5YF5JejV1KDh6MGBRT1ReIlUrV0lhRllgeDsyWklUYlFBTntLK2BPWD5GZz5AJFBUImJtVWpETHFHekh0'@;
put 'dzZZfXUrd3A0cStyLGMxV047QnImdCZVdlp0bEVIJmhaekkqPEw5S24oPGJVPl1CQERqb0hOM3I9ZWtNJld5XT1YM3hoY2M7fXR0a1M0M2BiMn4mXX1lcV47XkZZU1V7N3VFVyNFKkM8Qz9rYCFwe21LJTRQYmJsfkY0eTA+dD5FaV1RcHxdQXZlbDpQNFQoRUt0cnAzd0Mzb0o0XlRKTWBOY2hN'@;
put 'UC54TUklXTZhIVoqTWtzQjwmUGBAQWJ6cytHXVh+PG0kQmJsdGYvdzt4KU9jJnpPKT9GY0tsXmtDJipTL21lZC8qTiJoWXVNaTlvUW8vL3pFKERqalFLNUcvalB6cmlMS0A8JlJ3Znl2cHhNN0UiTTFMN0IjYFpGJVIlYmhEWk1MKjlRL01VamJKaGVmdWhzbmIhUk99KWhNQTVrWU1MVlVkSkNK'@;
put 'dnljfjRAT2t5NzIufU9CdiVxIV1wQ0VfZDBIX3FxPmJvSVMoOkQmWjQ7W18/SiNLXWsqKVpKS2UuOFVkX2YjXixAY3pKXWtPYkghTT5fVV0sMyRuJGR4R08jUGkkZWR8QTxXeFFwOD89YCJhOnZaT3pSW3tOS2FALk9jW3whOywmdm9Gb0x0Qk5kN0IvPGQ2cktYMmhhWyV4MCRvPT4lLzkoYU5y'@;
put 'az5XYXUvVHN1Mkx0W3txNi8wcUFDdW57fCRUMVN6S2tKbjFNTnVHbCEvSC5DcCkzJj5JPlh8RlooRCEwLEMsdV1xdWtuI11AY1dTPmI3WTIrInlRWCkyTn1OWz1XMURIK3d0V3UoUS9TPkp9XkFQM101WXA7RVAze2hwPlB6Yk5vSD8kK3lBWC9WTm86IndFJih2QSpHLiR4Rl8xSzcvSkh1LDk+'@;
put 'ayNePGJQYFdMP1F3YlMlPE5uMUA2aEN7bnAvc2NsVkZWRzM4TmEzX29EfX1xNFdVZi40dmBxY0RnI0B+ekMyYCp7PThuRThzUDU8MSgsc01EYjhabStRTjBjYDM5aSFDdjoofCU5VE8kazQwX2xQentYMDtESntWYXxZP1ZFenU1Y1Q5e2EpUmIqSjw0dzo/bFcyRXpkYiFtWHglTXl3JCJDO1Is'@;
put 'RGV9aVtIdCNbKXEiQVhocCRoayVgWEppVTt1dmBOKnR6QWFjMHRJZHtQY0RxdVs6b1skbXMldXMxYkxtKDt6QkMyREhLQSNUYj9wQFNBb2toamBQZUc2T0RCWCJuPTJtOEtlWGxURjFZYkFSdjZJcztqeEw2TilOPy9iYmAyeTZBYzYhdCQ7XVFFMyY8eFtAVCIvUj81ciVnQGw/U31GcDpCenVq'@;
put 'fFpJaENGeEZPVlJqfCt8UFZ3Ul0yW0hbOEFiXkNMJnhUfn1Fd1Q3aV5MP2oqOk1uQy9IPn0wTiFGND1xQUs7d0tqfmJkcVtANCZuVVdKKHB1fSJyMkJZNGVqJG13KyU1ZXk7eylPNjk/KU9mN0AvfHk9aFcwZDNbSyJ3JGkuKVt1cVMyKG94fk5PUUJYJXhKM2YzMGRQbzZwdjRtMmJHP0goXTwq'@;
put 'YGZwMFlYant8YVlaNTZyMzcoZGVOZmdtbXozckZ4OjlHey5YcTFDciwuMHxwZTVfLiR2P0hpQmxzUTwwa15mantCMiY6TllwYEtKcmRdb0k1ViledGNaJj4/MjlqLnJFJX5rTi5+IVkuL3lsLHwmVDtDbUNKRXp4Xzk6ZXg5YylOK1JKaTg5eEQmLGdDKjxLelFNWXd0cjMuKVlUTmZQeTVkWFZ4'@;
put 'Y1BjP3teeUUiSjZqRCxoV0tTT2UzVipKQ3g2c3BHd1MhM2dwNGc8W1JQeXE0SzttVHpleEpeMFAvb2RQTUJWSnE7Zns5LmJSelM0UUEiODBhIU1mLDZoYiNSLGxxeDtvPXBEeDFaQzEqNy5EczBfKD8sXXZRTGNJYWk6bEh8OndBcjU4W1NSbkoiR18lek1BI2E1aDAkTyZkdDRQUSVYNyIwaTFL'@;
put 'NjBCRXFWNVMvX11Ldz19dGBecXM/ISxRMTtwaGlBdHpffmIyJndGVHI6fj1DSXR8YHN7QDpiQFZEKm8/anF9R3N9YC42KHpmJGlOXlZnVj94RTFdaiw3PnN3bFR1WixsOkNLTX09WSVKKHMuek0rZ1VANDplPS41X1slUzYsQysrUS89X1NCW2hYZGJ2PGRHUmtVbjwjLiMqbD82TFdOT3ZRYXdI'@;
put 'KUJUMmBQYE1PUHg6cUl0MkM6Tl0mMkI7YSU7ZTxRfFhQcF9PdnxHYGpfODNlfGJRfEs1JXE+bD17KncxaCU6LilbQVhQb19gWUVTa1QkO0dsM1BeSy8iU3deQldoenNSPl5FNnJkZF53amA8ZHFwJVFGYC4hZ2E3KFJPK2NRW0w6T0dCRllNczdHJi8hVjpQQk5BOVlCOTUkOn45fHpwak9PckJ3'@;
put 'P3dib1pEYkZpdWsmfj0qenJRLCk8aiFgfnNtWihZUjd6ImRsPkZ0MF5EKyVzdUJ1T29bSn1FaylFSWZedn5mLFhVbGRdZUtESTgqeG5WWjVFSnd9ZzlAOyV0anJoWX4iQClHcTZSZTY4SnUsNmlHTVMrOXRaZ1RTKVM+O3IwQjdLPmQmfTp4JkEvXStLeVJuNVg3N2M8ZHFlelNBTnVmbn51RVAr'@;
put 'LG1wTE5PKDxFIWZmaj89TXclRUVQbjBXcjQhPUMlfE8iTHk0eHZnT2I5ZytPNyN5Yn5IRiwmeyhaUV1wMyJOVm8kMVghXUU5RWJve1BqVlheQ3xhaiY/L3toSFRNLiw6OGw8UWJ0eitaamtaKVlJXyhSUXM7djVKKUZ6PiouYn5KPHV8W3dGQlo0Rkwmc3EybC9GUk1tJmxjQD59VDokSVE5XiRE'@;
put 'KyFPdno7Z1M0VUtaUHpSKzkifGBldXNjSlJJZW1eS1hqdk50PSxVO2oieXxydFJnSmpnemZrNm1fUXc8ZFFnSiNva2A4YlI7b2Q2fXRtYW0wbngkWilQSHgoeUN3am9GeSUjd0h4NDM7KWdEVjspK3t8QytZSSZ8eHRPTUNYeEBFRXVgWVJ4K1dqSHAhQ1VAb018ZH0kT2pfMmlIcz02fWdVPnhu'@;
put 'PFo2TyJyY3MhT2NZY0c4WlRySH4kMXY6dXszcmc0aWlGT2Q1TzQmLylYTW89PWV7eSY9Vn0zKzNPVS9HPVE+UVUvIkMmQyNMN18xcFVgbG5DTWRPIy5oPnBCQklCTiFKQTEjSGtSUSo3Qy5RIThvSnZRfEYlfDA9IVM2N3ImS19MaVNWLEYsQ1FOZ0lXJH46eiQuN1haeXo2PVBXdml9dDBKezdG'@;
put 'cUp4TFI5OyZGdDVdPHFCOGByamIlL3o1aS5aTm8yPE06bklFZ0I0Q1djOXd2UGdCaD92ajxXJmNkUj1zc1gzKlFOeGJwaDNweixOKUxoXlk7ImsrXURHeXRpImFlPm5xfVs/KTBZNzd4U2cvSih+JU1EVkF2bUV+a1RkV1ZMPEMzRz01T0hYV2gmI3ppQDxTN2dFSTk/eUNQZVU0fklXaEYvUktF'@;
put 'V1o/STBMfiFJJi8rcDlKOChVQHVsQmxiXlchR1p1cSt5MWRAViV8YD51bXhZazhLaEhtKzImMkB7WyJqSmk5X3lrRih2N31ONzp3WCFKN2wwVlI+XWNMT0VIIklkYzo4YHUyfHIwRWdUZGxGXTxPJngqIz0uJk5LQ2ZyOyFaekBPX3xFVypsamsxc3VtQmJ8OnhXfl5Kal5AS1QwUTxFdTgpPHRa'@;
put 'WHJpPTNQOWcqRCNMaktPe3E+X20qfVY3UVlAfD44aXUsUmZNSF5QK11XJDRtcS9qWCkmSV00UEdwP2QyQCxeJEA1M35aSjAkU2dITSliNDE4JiQvb25qVS9ffl9hMHhvQlZSPVtULDRvS243fkgyPWJgI10mcHBebTdYWCFrJFh8WU9XJCxDa0M8M2lzLHQ4cSl3cjRSOCYmNHZNdF41P3pxfkVZ'@;
put 'RFNWYD9tUEopJFZzNHhEIXkrUVFwWXU8bXY8emJgOjl+amYmMEg+YG0rM1ZDaWF9cVFGIyRdWyRfSHNpeitLfEdSKGNsR2ZVbmNJcjJZQitgTCp1cmdqKH5EcDJnU0o1ZDohUGNgVWMpRlVyYH0+JGhoZ2B8Y1NGe1BLUGJyMGojZT5KejkyXiU5dD5paWl0X18pcjxKLjI7MCQkeV9JeCRsa0tj'@;
put 'TDQkfihPVWQ4TlF2WUNifXw2NT1fIk5FQCZab09PeGU8Knh2NytIPW1RJWcobldgLms2TDcoMEskaHM4NCRAZCI3THpwT1txOVZEdlExSEIrJEp2JE4rJWllYjo/d2pGb3t4cm09cWx3dS5jNixeOzJdIVk1a1ZaKStYW3FjPT9dR3N0NTQqdkczPEooIztKOip5TnlBe2ZSM0RHVClvREN3PHR6'@;
put 'PGlIX0xAY307IkBtQUFgTF1pcFFIeDQ8MjtRe3c5SCoqTE0sdnkpWzMlYXB3KDwiUXExfUsoamhrZ218Y35LIj5tPWkmPD1IJnp1ZnYsTU05Kjp8ZTYjO2FKY2JscUZndlpYUz9qb0JxKCwrJUNMeTo0R3c2ciUrbj05LzF3Vj5XPHN2STwvSl9YI1peREUjLi5nUCR2YFQ2KDVFSDV3Qk0/NSUl'@;
put 'OUdjQDZPclJLdmQ9b0w8en5fQEtHITR8OGlIY2dGa2owV0U9allhWTVnK0E0O3ptRmJ5WlNKXkNfZVojViplfnwqeWZOaWhRZF85UVhXWTkxUngvP0VOVV8wKCoyPHVwbVVYZzpjS0NWIkBRfiFFNyw2UCRnQG1mYGUke2dXYigpfVFPLDkzeG9DeSNqMHRUNzVaelg3fWhFJltvUkxWWVdFZ21h'@;
put 'empabVhhQXFQPm5jcCpIU1ZlRDcibCYvVmtGPz1HZ0tpb0U9Tz44LyRtLkRZOiMrPTJnZEBqJCZteyxZaVNwIW1aeGR8YTUjKCNzWnNSUVFIZ04kdlRiKEgzdkFfO35tWXxEOk9ucFVJKEtPQT0hITlMN017O1dsTjpEOE19R1omO0hANUJsdW9RfDpRZ1puMWh6OFVTe09NciNsIUZ8XTIsU3BE'@;
put 'OzgxMyJJKzxZVHlZcmNRR3xnaH5CY29YLFo4alFsZTowck1DaWloPC5wMk1eLzgwWHpUMDFeLn0mMlZjdD8kI359JEV0NjZ6PS4xTmEiRVE0My4uLnU9fGVbeV1SaXhLUzdjLyV+OzxIWj96JWAkPVAwXVAqTkRwKiFaKjZMVWlxQV5USCgyIkVQLFk1a0VmREpQP1hBK0lVVDVCaHlSMFM0aHkx'@;
put 'UDJPRC5KZWVmWk5kVHAkTyQ3TlcjbntQfCZ1ZEViZyV7OV5sXT5aIlAzM1smaTBwMXsuSSgsbj1mSmxoXkJuZS5kcTw4eWx+TGRtfGsqPm9EPjJLWkplTVR+bj96PDpMMGAySWlCSUpab0c2c3ljTz5pZDBHZUhaTFdDbjdoSH5zOk1fcD8+V0JuZipJMntOQE5+VEdBSHh5djE9JFViYl5mSDQ5'@;
put 'I1ppZkQlLzQ7TE9FT3x+QDF8MCQsejc6OSFNYHwjal5hezpxYzMsakIvN1FOX0tdajMmY2AlOFJpcX0qMUU3b2RwJVdsSm9TQSY5R1RgTUBzTkRHPzxoZi9wOSZTeU1TdTtoVXw/RnJPeV8vKklPa2I+d35TITZ9PGEuNWFjcDtGeUMpY096WE92ZlNONjRdNzdiWyEzZF9TPGQmbn14QlYoMmMi'@;
put 'YWBXWD09T15vSnNldV9uKShNdjJwSEplViRLXypeKD85Wy9EeXdIWndGUkNoeGtMSFsrIz1lSDdGMXx9K2xyazVmSyVWTWImPlJoJj5AY0NAaSU3XUo5az9US0diOERYMyV2OihYcmFyUHk4OShfN2RbP0tBJUl2WTs9TUcvei42aFRzR0NpfDxiZlBCInwpK1hjMnhzQCw6UUEwVkA7MnxHPVJ0'@;
put 'dWtSMEEqUyxxdTNaRTwsK2NpRH49LGJ5JE5OZF97LiZqfSVzXUArJi4lamRMbUtHfW1bdTdacnN8M0ZKamtVdjlyO04iYSolS25VSz9fRHxVcFhhU3RmTEc4bjkjVDM1RD9NT3l7OW1jJjteIUU0Vjl3emFZYkAjXlspd3JoR2RGYzgzNEJ5fHA9KkV0YC9oITomQy4rRTtBXShRcjNrJkdhPjE5'@;
put 'bzlDMChbV1N+N2hRY1NqbjdmbUhlQmJrZWV7OjhOWnt4VE1aTjohM1dfdGJSfkAsNkxmMlU0bz94TEBqUkIhUmhMTihnaD46eUJzTnpUQDNSSDBzViRTcFBffiU3RDFOa1dWV0ZGSXVBPF46TXdNSS9MYkRwM0ZOSTNAYnEldVdnSDNGciFeYCZ4NWRWW0tSIXVAVUYiNnB5akQyd1J6NTMzJix7'@;
put 'eDkkfU5ITDd7dnlZIilTISgmVkhqQWBscVQicjgkcUJUfDFJWUczezorSVl0PD5OJTRPOUNHQX4zcmVNJD49SlkjJlZGImlOLmRrSTQiTmwzSGJWeUJwM2VnZGZYcTdvOyhyYTZMQnFWNXhuWiFSKSRJVS5HPyxdP2UsNUNHd2RWP3VqKjh5KVN+UFNSQXdhZTB5cUdRQEElKCt5TTNEY2MuNzJg'@;
put 'ZTZkd0p5ZEc7TTkpOXZyKn1HcCgwM2pzRkVkVEJxPm9JVjx3P1NrWzVXfkxCJGdxL1MhTFJ4dEpIanR8fTtXYTlEUkBFZSUybzJddGJ2LiRQVSFWZlErQkA7YjgkZTFyaGx4eEhIVCkzNEIlMlBAP0MjWjg/RzV5VCVRUl5LMWZoekBWTU8hQit5QHEpY09UIlV9M1UpQTswVCFCYFAkKH5fSy9p'@;
put 'OkRmIzNeWThYUURiMVp6SHB9JnlmYXFJeWZiaW03LllEcUY/TDdTPDcuK3p5QUxmVG5bXmooSSslW2QiL315O2NwXyhLSFNzQDgodF8/UGBxdkZkJmApI208JEM4IyNxcXw9VnRTXXt8aTRWOl9PNmMyUmVfdEpxeUgmXndnIyVjUGM5bkppVG8qOnh1RXpwLjxMNjp6fGd1I20pQzZII0VgJTt0'@;
put 'RyQ5cTUoR35ZVkBfbVRGMHwlQlNrW1pwMEdtcnxMWUZAaVoxM2UuUjpDQndNKDYqZkpaVkpbakMpVTBNfnlDPWBrVWFYVFh1ZiwvW0tNPVAsVVJ3NiJUSWxDfE5DUjtNVDdLSXhoWDh6ZVVtcm5CRUhKKG9rP0tXP3s0PSlDeF11aHlwTzpPPHJyKEhtaUF0WUNXcjg+fUlVIVBUWCREZys0MUp7'@;
put 'T0ttKDZLOEU9e3YmKkE0LG9aTHlmTEM4SU5ORDBEQX1qIWBRK29PMW9wN3M4RGh+MVVIWy4idVI9ezZrR1p4Tj54ITwpQjcvbH5AcGsuMz58NmNdU2BAPEtMRSVyPU9KSk1VZkM5YjU8SldrbkdBdCViIzZLQWBgMksiXkRvNn1vUmR2b3RKMHcoQk8hO3w6UW48TmhbZjRxY0thfThAVEx2YSp+'@;
put 'TGdNMTJQLjdVQGB3ZXpyKEdfKVRhKExzTXtpVm1PME8iJnZoLm4jIUQ+T14hWnxwKXxMZU59VkowLHFeNmssI3tjU3JLellTb35aaEpxLzZdMU00enVHaThpYmxAfW5UNSZudy5kKTRHJll1UGJwSz4/S1c0ODZbNyFQfmJ+clZsZlpPZiJJaTIrVW04SC5wcUZ1Q1lpOWx2MixvUjdvXmZAd1cw'@;
put 'cnZiPyUpdGRndGh4WlJ0MU1nQEB1Ulo8dFBdUlZqR193VHVwKElENyYkI2suMG1XUT1rQ1l4ditiSmYoV1trRHhKUiVEMzMzJVJkdHhOMy8jSG9deSJGazdWS11KdmlnSntSamlLXWlmXngle3BZTn5GcztYaE5UfC4sNzhJKV9SalZRZS9tNCV6bzBkNF1AU2V2bFg3aE42V1FxZ1U3ZXhYfVl6'@;
put 'fHJvTmBbQmlSSixeL3IidGRUOWRzNnN4SjVKWipMVSlqfHwwUiFwVHthL0UyK298X3tGSVNgclI9M1RQNDcleHI0R1A9ZzRNSTNsaWJha1haRjcuPDBaWTp8dG9iLFVOcG4+LFlXKT8jIzpWRCg9VVszdEJRc1lWbW5eL2Z8dXZydFZ7eXJHX0tOJmNRdj86em9mOTheaUZPcngmaUFxWDc8WVVM'@;
put 'NnxAZ3NlaGpbcCtDJFE4OW8xZWdGK2s/fm4/IkJza2AwQlVkT3FiTUI6ZiRsS1ohS1Z+bDdZMF5lPU5zP0I6Mip5Tyw4X0B5SEM1USpsLGE5SispPmldbmdrQyIwK11JRWdJdTRTPFNESXVMemNmfmVNRFgyfj9WPW5GKGtQcyVRLzFBJChneVVBcjlqXnpLdTdqeEd6WDc6V15BTVQiJSxEdFEk'@;
put 'PUssS0kmQ3VMQGxrRVZxUj5haS87N2pJQWY1KyowYFNLP0xyNyhVRUU5NkhYKDxIaj5fQkMleXN1YVY2RU5QTz13ZUVGMSpIIXpgPn52fGV6UTtgaSExWVpVR3FGRyN4elsma1dKSjcmQjF4TDE8ZWNwRFB6fnEqOHckLElxb2kpQD1hbm18M0IwM2c4OWpZZ1hUTkNXLFhaezUsJGRONF5kcXpt'@;
put 'MT5adk1MZjFxKlMkWTdtQ311Zy5xIWFodDpnVFFnIzEycHw1enFdcltSW1BpKl1SM2xlTUNVOHBpV1V0fGp8aWxsYGwwemEwWmQ3NSNEakg2XWhjJj1mYjh6alRAMzpDWS9eKmR1bmpScEYlWUV7fT8wLGQ8MmU1Qld0P2diKEt0UU1SISt+JnEwd2FKX18oQHFjVGV8KE1bZSNEXUhNTS9rKW0z'@;
put 'T1pLZ302R1pVMExxWCEmJHNudCt2N1Q/OWtpVXsxe2lxOFE1Q3QofE5rTSUuYyRSTCsiaW4hN2JXZz5WQERKYlBKO3UxZnMkeX16WFpZV05CSDNxKiN6Qz8xVUhIUDNNal1NPFspbkV3YmJUdlZvZVJvO0t6LGo+NCVTSEFaWjVdOyFHeSxfV1RPVmU4R0lYZzFwKz8lOGlQW1haZ3BiI21ubTNp'@;
put 'Yk9QMEdxczJPcC9pNihafVAoeC5PRWJGUzBlXzdFOk9QUl5EPFNNK3FXeVZaPnVFT35eYTleJSJ6X0AkNHgqbFpWZFgiJjFKLEh3dXAiSm9jO2FSQTlbXX52WUhfe1J7SDpkd1E6bmVkUlMyaTtseFFZfFk4QTM6LGRuT2hOS1ZDQHZTSmNUPzYlWCpRJE8sVytleDNYTStue1BweGxEV11YJGll'@;
put 'cFV1MmBPWmI/MTtuOXd0bVRnaTkrNlszSHAickFFYiFeOCJRSHM0bG9iUmEianpTMExGOzdoezM9PE5AVTluczM3cE9ZT3xiJFJIYnwuKXljUDxiO1suWWUxIUtreElEZyFKcipDQUslTFVqL30re05sLD5ua3xwSXtORUJzRilxezYrLmIwMEBwckNPXyZtfUZibUx2Sls+JEkxWzt2YXR1eCZi'@;
put 'Jklyd3FnVipMO2BDTCh1P1MmSlN6TjtpPl82OE9CPzl5YEd1eVB0dVclWnY/IStwODssZmZhWXtjY2RCKjc5LmQoV3dhcl9FKH5SMVdvYGNbMVN8UFo+RWlIcD47LCZ7VmFsITlsSzg8ME4wa2N5UkV4Z1BoPXpYa1dXT3FIWiV6ay94OXJWejVjOzBRY3srVmdXaUdXUzp+KCwvKyJHT0NwVixR'@;
put 'e2FEOX1MXkNLdCp9OiRTYUlvSmltbXtNSVk8W0pKaUJ4WVQ1V2F9Nn44Wz02Yz9CdlB8dy5sM1hjcVAjVz80XytqMT08XXQ/V2tqKU9FIV9QVDJxbj1lRlZASV9WMXg2TXFPcVtieHJxXyVkcEBWNmIrd1hgQylUeHk+SnE2LzlWKk9HPGg0ISRRKHhiUm8qPkw/ND0rW2wqcFY9MVNVNDJja3hP'@;
put 'dFBDUCFZYzp0JFkuWDImKD9FInRQJkxuKElqM0AkNDoxV1ZERTU3NUtqWHlxMlVdV3B9UGg8LCl0TFNoVEQydC8sYCJCJjc/by9xSCw9I0xqQVVeNUwheDZaLi9VXm1oWGsjelhvLF9+PzFGbVV1TmpWREY4JWZuX1A1fEdjVyh7e146SVMwcSpMUH5FKSUoTmQoe2p6S0AyNCp9Jmx4R25VPyxx'@;
put 'RGtgV08oVnZyYUgvJm43YSJHfSxQMClQYklzL3FWdTttaS92ZyNefjhjczZqckNQMCZpUWQ+MDwuWzJmdyZuIXpnJmouZTp3NGVbPDk6ZnBKIzJDIiUoblZgUzojTUopLz9SKXFeKTVmdVBxKS8vPzpgJDwkITZrUWg6U1g2NlJmN24rNV1+WkpTbE5oaWplNWNgL1tOTV1rLmYmRjVfa080QkNz'@;
put 'STxbP1JzRm0oS3VsPThAQDRld19RY29lKTlnSDo6ST5oUSgkLHpYI1A6WDNfTWUjNj1aZCskIVt1OnNvKCpNcTJ8O0ldNEFJNnBWWy93I1NGNlBaRjB+Py8reThgL3ltUHkzVmxSa2YuKXdYeF16L1cwNXdJd302NkFWOl9tK0NxV1FwRyMzJGopJmIqLjomST1TLktCLD1XRTB6IWUlLlJ9ZltK'@;
put 'O3chalcse0lGbloxTihLX0dVRDUsRC9oOnkhOy9CbX1pISxXYWpYd3x4NDkvSCQ8WzF5YD08TkQkeG1fR2BIRCJlUDw0ZklAPGVFQjk5fCNXfTFYLEJCLCZEJChtTjE5V0VTLmA9MHFjNyF0OUhbNyVJOEl0bVY3NWBvL1MkM0c8XTx1OVhKNjU6cSldJWhAOjVxdndjYCRPIkl7R3ZpaUovOS5Q'@;
put 'SU90b148cSNMRlhBJmJiIW9ObjI4Jl0iZCo0IX5OSntyUnwrZEZTdEM0bitJUjF8Kk51W1VJLkh4Xk82VFo0OFpONkx9XV1JRF4kKixlI2RSZXBzaFB5K2NtWmEyWE1uOCojKkJZfE94LEJsN0IiPHhPQVcpeTAiQ25XN2ZzN1V3fmJ3dWBNRjp0cnNHME4wTFRvaTAiRkdlM0AwIz97Mj9ZMCtn'@;
put 'KWU2VlFkWjhVPldNKHtFaCxuMDc2ZWNpaU44eFVTP1A4b217IVJPRzZ4L21ZWSVgVDF2eGJeKnJYIlJEN00obTVOViVfcmMsTC95I3lCZVV5PW9ga34zRmVwJSkiK0UzRk90Y3h2NUpmREosbzgqSC5NXzlFVDBTcyhmRW16OVZDKyIhQ3pBI3RQWFg5O2FlR303aCghMDI6PXk+M2cvOzkwMUdK'@;
put 'L20yMl1gbyR0RXUuSzQ/dmYwJVI2RGNWKzdKbmooX2txX3pnSGJ7QkhQenUqL0ZkI1ZqakY4fHwhIVVNN0QpbnZMTDlCKl5VV0FTd3YzMXY4V1hTdlVueG40VEk5fShKaV0yTWdNYSF7cHtBPGgkKlZifE0sJD04YVRhXlZaYHdNYz5CMFk6ZyF9OmdYNWxYKCpWYWEqNXZ3THxqbEMlY0oodUpq'@;
put 'SFtnQlsod3wmLGhYcUNFQ0Z8UVU3cWFabSR4eT0xW2QiK1gkXS9GMns5U3NLakRoVmRJTzlhVyVJMUYlZ3RqezhGazA2YTRHTn5GUlM4Wlh8YkwsS3pBbTdSbWl5L3J2TmBiN2lAJGZaOD4pQV1DcW9IV19uaUllJlZdeVFtO29uRDZAQTcrek4lYGQkcz1QSDpIMnx9OzA0I2FlalQ2VWhWLklN'@;
put 'cW8kNUB4TWVeSUZbL11VLiFnakJyb3tUdkkkR2c5eWAhYG8jNiIuNjNmZDo6W3ciUk06Wy51fFtnckU3RXlqY0UsOnlSW3pNLm4jczI0RERlaCNXUDtXZW9ub2FOPSsjPWI6JlJsPEM6V2JjQCEqMnl3QlN5UFF6PCZ1TyVFcEMwJVA4S0x+ekp8MipFdlJ0OXxqZ0R6dFQlYCVUI0hVUzUiMDVA'@;
put 'RmB3d2FlRSEsWzdMcipiTGZOe1tsVSR8cyVEW0FdQHM1Z3tkUG1fUmJSd29PUDgqbWlGTjxrOTQ0THhTZnBmd0NqZE9vdCZVLFdpd3xNUGlFOnw6WTsoailDfVh6OnphblpOPylJPXkxXSUrSixlZUV5cWZIYXo9WTp2PC5CV2JyWl07fT04VklJI1IiOWdKJjBoREhdI3F5aXd5MzBde3xkQG5j'@;
put 'WjEjcmlIbGxuNW5FY2Y7cSlPYE9YeUxAIjFyVX5XRUssPl9bSUFLS0o8UlU9T3J2dnFrW1hQJH0uZVV5WE5EVXF7Nj9hWSo/dTl2UW1bbXdEb05OQF58P0BjPk5yUTdBeG93bUdFUix3KCQ8PkR0WlVoSk03RCtGJEcpV2h+X15ZUTAqZHZaZitbc3psWF1yWkNLPmhnRHAjJCJFSz5LbEpKUEB3'@;
put 'I0p6eVYzRnt3M1sveEZUJG8wKjBIPHl5YjN2IlEjXiNnPXVFOy58N0pUPFlPXUEkVy9yYHxPSnBAMnFUb3JvV3ApKzZ3bUdRRkhZaCQ3PWg6ST44dWx7dnVze1YvJHQ1fjxDZToyZHZWejxRR0hGaDhLV3tIbFIpPEtOQFFeL1ZQJHo2byJaRHBhZTZZMXl7VV1CM2JAUXFuYHdqQTRiRlkrbWUv'@;
put 'OVZ3X1gpK2BxPCQkeSJ2ODY1MkgwSERCSCw+PHhvdEl+OExwa2h0MVNfaGkxTCh8UFRwLlpHZypaPj5sc0BYc3JtbElDWkNOUFBlMnQ/WllaXWQxOTQ/W29YQnUmOE0lV284XUZIb3Y3Zz55P3d1Tl40PlZwT3ZZVFtfIkFNVE11PFZkP1t1N1I4Q012c18mKj4lRFgxRzo/fFV8fD5sZ05yakdC'@;
put 'QzMiW3ZFeH1oMixLQlZbXXJlK3RXMDo5aTV6ajRLQHlOWUpsIUBELipyanEuaD1hRUpYSE13NSh3JmA+OWYoL05mRUwrT2N6TkA3SDlAQyVLLk5kOENRR1coQi5pPm9mSDlXXlhJViI8MTpaTntRdCQwWm5hJEEiTEUyI1FyOW5Fc21UW3Yidk5vLi53KzEoNzF3d3EyXSgsS0p2JnU8N2BObUVh'@;
put 'TWc4SilZImdiNmYsMFgyWG01Syx5QFVxaGNaV35aP3kyXXFVOF5FVDVQQD5gLFRIMS83ajBGb2giayM6KHp0X05heFQoM3NZK01adlpMMzFAdzImVjs+Xkk7SUpddWJIPDdIXypbVEtKbXRNcDNPKE1nY1B7In4+K0puViFNTG5kR2V5QmgmRG9nO15qWHx4a312NEJBfiNfaVkleGJXOTI1QFdB'@;
put 'OXBRKW9Ca3ZnUixrZiZ7IVooW3N6Q1gibkhSbiw7WW1vZCtrNCtkLG5xeHhmfnZhSUg2YTBafDVTWTczMnNmOkI1Mk1EaUtAKlhkKnY0YCVmbFR1S1AoUHpKL2NZdk5rfUh3PGFablY+MTtlbC5ORlRzNyNPNFlrcVs8OTdabjdPfT1Be0lVKytQemdfP2toPHMpO3IwTyJkQT0qNHBVaVJyKzwk'@;
put 'ImJCejo8fFB4YHRgeX1mb1JqamcqQ2FCai51QnVMeyZbWSp6YTUvanssT2J3eUJiLzFrTiUwNik0PmwwVG9IW1MoNDRPI2deaDE9WyREOlpHQXxsSykmdSNJL1U+MHIpaVc7fkBHNFo+c2xkV1lmOSFNKEhZIVVPRXtCZmtMP0FDPUlfQH4rJUwqLlZ0L0JQazRrYS85UjdZJk5FMmg7Sz95KHw6'@;
put 'e01iL11rc3dSOD1AYitYRCpVbjgsZn1yb3lPT1FaOUVjekU7MCRNJTUoNE1jdWRkQlpIcjRLcjpOTEF+Pl9sVldqd0J8PUl+cXFgOiNIaCZ9emtwaSFeczUyLGo4Sik/TFIlNFdmLjN5UT1MRWBaYjdDXzN+VyZffCxEXiZhKG1nNVJlbiQuOjRdbmBTUDV4YDF7KyRJcD1FPk5tdF80SnVrJTp8'@;
put 'TVcrVXoofFc+QXx6UD9AcWw/VnFFMj4/W0tDSUtzUj0oPFFvYl0+M3R5b3JdJipNeE1xRTN9ZmlMcy53OENoRDBZei9nVGhTQkd9Nk84VypeL31YWSgqN287TWJEUD1fQFhDIj9yV2c9LlA3PXBTXT1YTTk/JCJDW201Z2QjI1Y5dmtKd04rIUUpL2UyOk5EPjp2TldnZi5ueilLSzxjJWVxZyto'@;
put 'enZuKzVRSiNaR0M7NFJwe2Z1OyVSYltga3FzbDBuYXYwej1GUD88U3s/WS4rYT5SRDFhWXd2KnhYVV5WeDIpRWskblt8RiwzXXxkV2MqOmRIYS5HNypTWzV6S19DVXh0W0M8ZDskMUUjS2FoViI7LF9UbnxxdXtDQChabldROzJbKmpIXU89Q0hrfSoxKyJwKSo6bnpAIX4lWmhPdH5BVCNfIkRd'@;
put 'cGJZbyFle1kqI1ZMdCNeWm9XXnEwOVZTLnJbfjZIYjlKTENhWWxtLlpkLEUjKyI5XytMI3kvQk1wX319X21VLkxTZmU/SGp6OzxXbzQ6WE4jVTY1bGU6JiI8azZEaWNMJlJPemM7Qn0vSkleOiR2Q3tjYH1eXjJjQiQkK0ZYP110M1lkQV1aJlNjcz0kZGRoQmQhOzNHe0xKRTAwJUk0TmBDMEo3'@;
put 'MUV9eFVxe3BaTDFZVXx4YnRsSUJnYT9OU2VdQUthNHF4ZjBqJXtFQ0R6UF1WL2FZIyEqSDlyQnJwMHhzSmZvSiQ3IUMwQjpNJldxIkc0OExWKSYlSiN4dzxnTHwmTX14aUUybT1xeD9nRU1NZTxeIU88RVFla2dqbDxKRmYiO0M4fWFPdj9HdGp1TkQsd3s/NCZpelR4Rnc5SVBTNFZPelZQLiQ2'@;
put 'dGFwYVBmcHpqNyhNbm8sKTNgQHVAY0tAR2JQT1Y1KDZsfE90MG1Mb2Q0MU9TTDNESHQ3OVZ1YXhSRVFLaU0rLF1vWzJuPlBTdEYrdVQ/WyU3LzV+el4/WjoocSs0PSpPMUdYXVV2SUdSdkdOUUhve315cSppdkcsSy97JTVyXy8rYXNBUEBlMyZ7Ky83b08yLmJtVmx0aSM4cnpVcHw3RXp+LF9J'@;
put 'eXtVKVhaIiw0NzZRfnZBXnI6Xmxde05oInI+VXFfU0JYOTFNVERvWjo5Kjt5ZV8wPF5VZDNeSVBpNldXPiomK2hEWjc3Syh+IjUxZkhpOl8sfElhe1BeJiNZODouO2EmXXM1QEw9N0YhVz15Xyl5QXJlPVVKJSE2fWR3flh+NmxGSTRfP0YmJTB3XixkSCgvOmpnfGJBMmQzL0Y2XlFgKUwkcShq'@;
put 'SHNXbzlOJEBJK1hCdFJBZHF6bWhvYzRtJnJ7fiY0aDtLcUIjNDshWSJRbm84SzhCVCE1KkhLWC4pK2RERzM1dkJEeGR8SHNOJTZCR3NDQkErWlp0LjQveGFoSUlGYU5IVjZnflptZUA2IkBnfExhaHhCZSNBdSNybk0ueXxRKmNEZD5wPmpnMyY+dChrLkNKd2doQCpGQnZfKFBnJldTUS5ETS8x'@;
put 'cT1tRXV4XSw1b35ASE19ezF9SmkxTkI1TGF7Y2Y7KVVYXi9leFpsPTFpdkBXa1VtZEcoWEx4Nnksa0EufnUsNUIpRG4jJX1ddl9bYG5PVXdiZHJFLig4THIpMVdTcVglcEIyTW0sYHs2V1d6bHYwNjJeeTRoSTM/aXhjRCkmJDpjTGFdKnJCY0V6YFc4UzRqez1RS21GTkBKcW1VQU9nY0t7VFgo'@;
put 'TjlLZkoxbHIyL1htImZUQSQ6WzNfL3lASCErclkzO0lHeVd6Qj9Yfk16S3pNSDg3dkdaYj93dCxzdiEwfmUhTjZbUEl4cEI3ZCV9SUFQVEBOWUxnMmNgPzFiWkRbZFAweEUsV1JpPi9kbU4vLHRkRkg1Y0ZjWWtYWkI/aWUjJnFUdWZ4JnNhQ2twQFBOdCZZMGc9Y1ZyfWs9ZVdyQERZbzN+XkxU'@;
put 'RDpUaCtqTSE7cF0zQTwsQWBmOTI7Mzl2d0ZVNUYkZEZQOUpORlNScTZodk9yfmBEdn5aTVhbe3sqOn0xJWhFYW1HPWhhP3x2dzloTn1zIU5rV35HOX1VdEx1fkBHLz07P2hvVTRAMlMpYjJPV2hKQi91QXtdUEBvQCpCd2BjZCplcjxAfCs9R2BQYUtockZWc3UpK29TQ0h2MnUmT3sieHpJMnFO'@;
put 'STRyaz1bZEw6YSNHR10qfkJLIj0qekJKP0ZsL0FecD4rIlM+fCo2TiopSk81bFA4eGxyfSs3P1h7TkVpRmF9LjttTmY5ZX5JUnAkKENGanc+Skc5QTtyM0xwcl4ue05GZGhLYiJecytrbT5dJjVVTSk9e3JSKUtAPV4kOFo7W2BPYTk4eXI5TkB1flRIWks5MFA5fi5zaytuZDVWLFhwcmdHNTB3'@;
put 'eklidDcyeFtHNXIlZzJsSGtQK319cCYwVXI7LC5jKElRN0I5JCR+MX46bSs9dHRvKjViTDtneU05KCNqemUzQTRJLyhGcVd1WT9dLmU0WTRxIlZAOW1sS0pvaEMxa1lwP2trW1p2M1FgSkEwMlVYI01ZQWQ/eks/Rz8pITVsW1FFW0prZip3bl4jY0h7czxmZFdLRkAiKl0iTEo5WztKQiQhUU8q'@;
put 'XlB6dVZAbkt3bF9vKH1lN0pxYlJCOkpqIlFTZGcyYTglR1RGKlVQOlNdc15GQ187ay93Z1lGbjMofFFycFVEeUIqYmFmSH1OTTlqen5FRV0+QyhJOCV2KT5tZ2lTaVYufjxYWlFvLHZHXWFaZ2FuS0J6XTNwd3xCJjNnJTNRRX01UXMiSnlrMF9lQHpyUixNQkdidWhTNElHUTMxJVAuND9bOWZW'@;
put 'Tzo0Mz5qdUU4R0JyempZO342SCgiXj1KVz9Je0NFQEVkS1dWQ2JDQSU5UnRbekFxTm8+ajdWbVNTLzI4OlYsNFNndkJkLHUkQTd1fWFURnIsXSMhekI1RyQ/QWM0eCJYQy97aSZSSjlgfnw3fXBAOz1lIlhbSDFNX0pfKE5DeyhhYE1We2tGNlBCI3E2K2YlcExCY2piO1N6ayV9eHs7LDFeR0pF'@;
put 'U2l8Y0YsKSgjNUBTZnJzM1giZWM5SjpEQ2hHRW9bJHRQPEtWZVBhcWBYSiNTcTIiKTdiWlEiYXloIkM0LFJXZkxMQW12X0c0I3MuXltPYCl4KmolTCs9W05ZfFl2UV5yPDx7dGd0eSF4Z190clMlMjZCYkQ6Q2Z6OG8jOWNeMEY3cjtCcWxCcmx6NlVGb342ez5TSllySHU3cSxiNnw9Q1hMTkBY'@;
put 'fWIkVU1fez1NQl91Y08lI2s6UztmLEcldXIpKHRpd0IlLz87THBSZTZaL35ZV3RSVyEwaml0WCE4Slk/fXIlQT9DTWxHOk8jbV5ZNEJGMylQPEtAN0RzJH1MN0FJSHVaQ3ZXLjk0JituazVRdl4oUX13N0xLcX5Qa148dXpiaUBDSV98WXpkKzRqYWNPTW92bH4/Wj1eejNANCwvQSkrIyJvODQz'@;
put 'WnppdSx6bXtaPWUwNERLd2I/Sj01bms6cDAyQDcqSGlSY0ZDVSluIzhzSEBBdkl5LyR7UCUvZUhdNDh7YlpBdjBNfm05WER3W0dpQyQ/X0osb3syKVNmWltjaVN7dlRYcGx3XV1HW1YzeyVVOmVDM3xIaDFpY3c5X1E0QSI9UDsyb3V4fSM/IiNrfVY2YGshSi5rWlBtNjplbHI+KFJ6Xl5LIlY+'@;
put 'ZWFKdzdHKmhTZy56S2ozZ0Z9S2IkZWthJSkuaSF8dl96ey4rbCVkRm5JOyY0NmtKSCltIiFYQktHU3YxX2ZaW3hjY2BgZFJYKkQ9em53eyR7P0ddUVB8SVRVJC9wSjZZJT4oWShMInMyLjtASTFNeXkvdHRzZX5AQ3dOY11pcjtbWEFJNFgjU2BUQzlpdTpLOEglOkFIVnR3QkA1Izl0UFNRbWgj'@;
put 'azRaRyh5Ym9hbGBlSGtednMlMDNOWFgoJT0yVGNdZFNpKHQ3cmBocTkrcnRHRWMoL2c1bSklISNGOj04bjJOVHFuWGA3eEhHYkBiUStCR0lGbGUmbUxeRGldOkFqX0xmZGVwQj09QXlQfEVoV2xnYGA8SUB7PXd+cU1yMVp+XilLZU9+KHZJTl1HaEc8Z1s7KiYrekBIQnY/NU0+NzJFUiRGLztQ'@;
put 'OWlLRXVpT0BdPVJ1Ql9UPWRSeE5iUXY3e1ZjPWZfWEBKc25UUUJ1TTxjVXA3Wk9nP3pgbi5CI1BldiMpPlUyZyNLUEVwZ2gyXSs9cFV7bExhezZ9fGJSR3U6TX5EV1IpZGZlO05aOFAwUCkmYD9+NiNqIzRFO3tYWjk4P2diZyhXPT9RbWMpQ0Akekx8eVdYNFB8K35tbltKN0VUaz08blFRbmFo'@;
put 'allPcF0pPWhxMmxvSCpINkBNPV1OXS5tWD1PVDNxWzNqLitYdiVKTFdyX0xKOl8wc2lXZ3c3VExDfldUOzZCay8hRkNWO0RzSTQmQ2FqfitjYWhwTUY1c3chVCFsd0ArJU1AP3V2eDFJZ3YrOl0+XUB+N0leMyZRaUcpfGVDXj9HITJAez1mIi5KI3JgM3BlIXF9LndDbitDbUxpVi5TO2pTKkBW'@;
put 'bzZoVCF5NVJGZXFxS0pXcm5rdX4/ZE1HM2NyXy5TKjw6aTM6JjZ3JjNQQFkzKXRaYmdsOFIya0tETT87S2dgRVdOO0t0aC5UQkIpZDd8WzNfTXJCQ3pvbEYoQmIrNTZfQT14WDc7YEN3SWQsSlgiWVkvQXUuaHskVyU5WFZ4YDAiQ2skMlJ3eyZqZ1ZOaCNnPW1CK0MoInZZMWhIPWZqVDpeO3Ii'@;
put 'a0tybj9YZ1R4fEhOY2skbDJfVDBQaiNQanIuRXIxV0d6YzQsfDw8W1srTVRIR3VMX2Imb25XM3pyQDhkOG5pUGl4a15PbyVKM1J6akhiZC9gSE1MdndoZmgwMDRoRX0yS24xWTU4M3AxcEAxZm1HdUNiUHFOano8ZEtzNlFITi5AYGA+Rlh+OX1AOzgiWV91ISFwK1JoLlt2Ll1Xci49Wn0xYnFm'@;
put 'RTFFO2FgPCpUWGJhOWRqWGtMU2JWe3VtXSRTazt8InJALHJTbSk+Rig4XmliP2ElTGQvL04/VnchRjtlR2hjSHRLI3x7ODUsRUJXU1tWfXxWaXlgSlhSJEtOaUsjfEU6JF1vWyp5Km5aeEFhWFpGbXx1RFhFKGhmS08xTGYkeHVJSHorJDtBaCt1Iy9BUDdWe1JqJmFRMShaXl5PNWcjcGlANmEp'@;
put 'SjFeMnhCaXB5Pj9VRDI0LGV+Wk85QSVfMmRQdDNsYjw1MC9mNVRzYCE4Uz46Ikk+NUAjZkIjSThvZz02OClXMk9+allONFRmbjhFRjQlS3ZgUmRqQDBiaFsjZSRUUmB0VDpYcjBXW1ZvM0xmPD9geiJbWihVSCsqP2k0RVEofkUlUjdrOix0W0UiY2NLamZuSU1UOXNDVFZqMFM5cjd4a2tRaVI7'@;
put 'YiF+TzE8SilIdTFDYjJhaGpHTDlEVFRdVW9LeDhnK09kVVFtYEpmJCpxdHBfY1cmRnpQby87Tkg2Y3QwZ1NqWCFlQDVWdDZMMHlqOFV7a24wVWdwdlI7fiZndkR7SGtFP3dFcW4zeC9hMlImfWhnR3dfOX0lSDAhdG9XOX5hP34vXTN0cXxfZiIhKzk7MjdoT00rLGh6Q3VdISRXXzVrWXtpej1j'@;
put 'NlJ3ZU04VjpUUCg7WX4pPyw4IV02VUI6fURjdF9uU01GQW4lTmJoS1RkLCQ2QSZQTSJdRENuRkYwMn51K1hsanQkdEdrbzhIOW8lcyJwLlFQNzB+JWR6WTo4dylFeWJQZndUaF85a29SPzBZW09rbm9WKGtIc34/LypfXkYiNClucXJuK0o0K05VX2RuIV5zSS9AfSVmXiohcjk0bEJlPEw4Nk8y'@;
put 'PypHJGBAKlsheCN0Xl1yUlVfYD8qd0RbY0tIbUliPk0/RFkuZ3J1cWJ8a14pWVZxZigiRFQrV0xleUdFaDNpYiltT2JpTX1fPDFedVB4Mmw5XWNbOls+My5TdE51VF4yKzZyI3ZIMU5MalM3an5VQzlLPz5ZbS5VVjVfITc9JGQvI3VpUCtmNDROdHU3e0ZzbnFaaSNpJC9IJGx8RnlGdEJwNXIs'@;
put 'RmU5IzpQaV5DQDBCVCFkc0ZhXl8vNj1GOHJLZDpPbiN8QFEzYldGezBfI0ZzdUFybHBkTDsxSSx6Oj1de2AkanxVXU4hUWRZTHshYCFuJjtbPVFSSTNHcUhORDdDa1trdiZWUHROdjc/TVRkV1o+JjkjeXdNb3pAKmdDaj5SLyE5eV4kaGdjTnllMDNoKGgicE1SNEQmImZCVj9eQGBGRWMlVDFF'@;
put 'cSw8SXV+L29WNytJU2t9cXksPjhQel0vNHIqSDUiaEZ8NCEoPm0wbzZKZCthRTdZX2NeOitAS205ZkZFK0RPVVB0REswVEV0IUQyVTR3UHJmZ0k4ViVWcXlDQTwzVStpalglJXB6ZDpOIz97InVkUlU7MEZMS3JmVGNkcl5Tfk5gS1chNm9LbW40TnJIaDElSVsqSyhaX1s8PyJsflZPTXthWzdk'@;
put 'RVNKTEgsJFBAfGhwXmw5VV49e0F1JVhLIkVoNGN2LkNdIVIoIXRJbXRaKThqd01XQnRBOTFsWTg3Ul1BJWl9dWU5WnhxTl52RWpVOz5IPXZfMisoaHJEZkhDTngjcCxlbipLXiEhQH1SN25QOGFJKHl+RH5pPkddRV47UDRTWWlwImo4djR6WkQrS3BuODFbMSVSOGAxTih4I3huNDFbNXdQV3k6'@;
put 'aD0iPk5taG8qOENie1Iwen48RDJWeDsxe3Q1YlpNKiRmQ1lmM0ghaik/b218VGp7QSpAITF6IWxCPz96RUg1W1VuXUc4biJgQjhRKkp3eGFSVWtzX29gQkR7NVNqZXwpfXJkOWJrb342U11JeWpUSFhtR2VLIlJNLFlaXlJueWVMSX0uMUsxPEhLInVzLCRxKnJXKHl1aSh4T3M4eCxOaHJKb1pm'@;
put 'X2pKKGA5VEU7IUw2dDhCQklmcDJHcXhUMUFfbTkkakQ7dStEYF1SWztdWDNnSkI3aGc3KSs+S2BTbnhIelo8QyEhZTtFQmMwQlspSS83RDJuJEs0PGcwajlYRlMxTWdjZi9ALnh7dlpuQFI+KEAoamQ4dSFBRSwwPCtKJG5RTWFKJD96alU5dEhkckUze1pLSmFzJG1ibDc6LDRBXlM9KkxZJHlH'@;
put 'Sm1EKFRyVGdsWmJjIUpFTk40Jk1Be1pfOGU6ITJ+eVF9WXpLVVExWkIyJUohd0cmfm9kP09NdD4yLnQhQVp8JUBdcFc7a09xd2NsY0s7c3g3LEp7Z0VAN2hSM0JPdzk7Mik2T1Eqb1t7QTYodyVVeDR1ajlrOmtOZHI7S2c9I24yX2l+NC5rQUlqR31RQmkxayRPe3FRWU8vbDh2eU09K09KaEBX'@;
put 'YGRGIjhURzVuem4mMyRPIXJlJFtvO1k6e2A0cElJdFZSLnMrP2J3JiU2eklpS1t8UV4vV1hZWjFzQ05FYFQpdCFTUDg4R08qYXsxLFs1SkpSZ1E4ZzxlbiFLT3FvUUZoLmJSaWc4eTlKfipNRDhlfitWcSpleCxtNSgoSi8+a1klSV17Y1hFWXF7bz88OG1nfiZad0NrQ1tWKC8mM3hWKVFXVkVO'@;
put 'Vno+R1VIaWNMPTEvYSZYekZKUVE7NjJOZmNnKUs3K1AwdTNHaFg+USRLIyxhVjQkL0hHdSw7JipFYjZuclZicTw0fVhXYXw/ZkBAUSElPHpaSSw2QzBIYlpEa2xLenBPZGhCVW1GUilIQz1Iays6Q0wmN1coKj9YZ2QwczhoNzlVVVYoWDNhe008U0QmO2BMaHIzSFYiPGdIXmQ7dnB3YkdWIzxx'@;
put 'YGx+R2tofHojJEc+bUpDY0YzaX1ucUlAb0ddbkUmTzR7Q3gvNmNRUGNJVyF2YUp8bDw8XSRecUh2PGYvVzlebSh8KmVQImhrXUgpeWw8ZSFaXUNmN1Q5Q2lucE1EVXtTVVEwVWMlTjdlKU57UD5GaHs+NyZiazA4YG5wKFEqPTN+NGhWbSNOJlc1ekIwWGZhSzR9a3JJej40eD96cncpPTchUXl7'@;
put 'fjFrMXJSVXdIRk4rQXZrUHZTR1sjYUEzI2F3d0JZYTE+VlVIST9XXjZhdipZWEBvfUNtMX1Xfjg6VHxsUDE4OXBld2V6OlR1ZGcxaGIsaklJXUVFQDJYPiF6QWckQmBCdHNyUiNEVHcpci46Xi9WUEBeUzRkOFcqNiFGOiFYUkpmaEBiWyFGL0BUPzxFJH5rfXh0VC8hK3YmZHo8bFJdWnFgcE1p'@;
put 'c0lGKGZxa089P0dUckVPR15OMHY4R04mL1U8WjpFKV4yWDM9eUUhSjZkOEpCaThZcTdCUCZVQHx2aUBLMH5ZOUUpU3hbMktjLFAmSEt+MWVQLjF+SmBkSG9Kd2JxMCZZeSZYclg/bC4vPW4vflFpbDUraEtAJHR9eyhtclkmZjZWbSpAXT1vb2MiNjZjPSJuQDUzYUBqY3NufjtieUs3SilWfVVA'@;
put 'Jnk2ImFwJGlLSSV4fld9VylnI2NgQCteX3NqKy9yUEZPUTYvNVRCMThiYlVpaUZJInlvI31oInw+X0s4KUxuWlE3M3J8WnZMXmddVWdeQVhUPlNPXjtkKlB8PF42Oj5FUyEvUkciTThvWDddIkN1Y2k9NS9VZXdxdW1GdCFePnBIS2BKSFdKPUt+a1M4MXxiTD4sUmQuYjAxQ2hqW2kuNVdMIkZ5'@;
put 'RXU9Jl5GKWMrNlNXMH59VD1MUzBrJX1POk4zJFBFTTwwPV06eSMwJVVyTDg1TSwjVlNXYHovcGBgT31+WDNDeVMhd0EuP3NRLiNkdjB6KnsxYD9lOXMpJmk2V3xoMWZsdHEySW5kQ3M1MX5NSzdha0tDckJkI1ZYPXksTzFEKnAoZSY8JVlJIy46PHtbRDlOaSE8UG1OXmo3K1ZPWEUjZlkzYXQ5'@;
put 'QG5vKX08RjFYO3VGPl9RUTsuJHF1Il1qfXohJExzMFVPZVUrZSlWbz1uQnA3ezwxJSJRNiV8PSUzNU91fDciPC9+NmckOXQheXU8VHQxSXppcldLRGNNSzd7X1kkQm16TnMySC4mclNXJjRSc14mQ0Y7fmc5SzNlKXJyZU5dMm5nZj5JbmQ2RmRXRk0iQ083ekEzIVkoSzt8TVN9LEFoeWl4SnY+'@;
put 'PTtsZ25VdD06K2s+QmxxKVA7NFlJXTlLeHh3d14zbmMzZHoodD5jc191a3wuYEwzbiY0fGkjWEE0e357TTtWUFJzRFtiPno/RTp1X1haNkheR2NDVXBGazMwemx7MjRZamMhMyolbDZuc3ckRHx3YkwoPCFzcG1ENz5qQTlySHwzYXQ7UG4yL29tYztAOTdEeH57KmIjans0YiZdN0g4VTBVX2la'@;
put 'NUJvdTMvIkpjeUV3JFVvbWdFOzJidXB3QXBzMCZoYiZReztQRVMzcl9aMko8Uz58NU0iOmMhPyVDMmQ9UVMsVShJWnokYCNiZFlrNzJZcTh8X2g+bHghOmZxImM9fnFGT1hbPFt+Q1Q8c04+STJ6dnRIbnMiZnBVOjlqLlpUfEp4ajw1cF44eEpkZSpgTHVTIk0wN0QvRUIhYlFQWGw7SFpvZFN4'@;
put 'Oj9eI2g1bEApSylGYjNZeS9DTXxjVzMwa1hAN2ElNiw8VU1neGpDV0l9JWlQI00sWC5dMThBeE04Z0JLKEVpWHdPcjJPQ2lAREpoQ2YlXmt1cDg7YWlLWE58eWdbXi5pKDlNTnx6cWkjaUQqQE4vTGZSa15MUDI0aHcpYS5+Xlh5YzBrNlFiUFQrI1piJEBpJm9qMlNzaGpDQWk0K2tYMl1zeWFT'@;
put 'MH1XdDA7IzspNEVyJDNXalp0JEtUOTFIPz43SnN6blRuYksyOEgrdDtOVX1rO3pOMyJhbildeU5xMmlpaEpaQDIpSlZhVFhEYnhGK3hVWWtUTFVeJEFWKiZwbnh9ej1VYjl8fFs6fSVufCJtITh7bDwpdj0sWCZoXU9WTixxQGh5RUAuUT5nL2x3dk8kP1E5YzkzMTo0R1dSRS9TMHFIbWZ0ZG9I'@;
put 'X3E1eT49XmU4N2IhSHJgbzpwMT84TFQ9TV9TWyx9Ji5sUlFSdE9OXzhwLjZ+TXI4TDEsUltiKi9eflc1Uyg3U2tLN1NHITQ9cnFXLjM7JXlKKzV4dHI2aXdUI3VoWX05SnNheE1nVD5STkI/VWwqZTtfbnl7KTRZIyw2WjZ2RmsoL3MvPEM7JnNucztAaE0+NE83LklYY1kvV2dUMDVFX2M1dm5o'@;
put 'YjRDVTo7Y1A8cUk9PGtdNylWJVloeFo0eHMse3RNcXJVOm40U006KVFqI1RSUlJeJGM8L2A+c0BsfCEkVSRPVn02Xmo6M1l9R3R0KDJhL3BibEA7TnhOTCtzSzV3Vy47XUNVWS4pfCYsc2hQOC9EPSJLd2s+RGg4P1IyLHsxbzNFdzppP0cvZUJDREFWSyhAYWlka0BtNzduM0coVCJHaGU7I0l4'@;
put 'T2twMFRARGA9em15R2xTYWU8UFtWM1ZGXy8uI0IuUjNaQFZNI2RIYnRxIjElaStAcmRCYkc7e3paWCZxRi9jWmMoPTY6LEBvPlV8RkQ8PURhXV5+K28/OmY9enxrazZ6NisyYUIvKFc7bmM4PDNyNUpaOzx2RkReOEZNM0gkLmd4XXg3SHl3SiI1T3dmKTJiSjJpLjNwaVBrT1MmY21kODJBVXgv'@;
put 'IVI+N35VK05SZ0prcEI2TFBCVVpMYDQrNTNGeDVCd3YsOkI4VnVed2kxUF1de2k7JlIkYCUzVCJ7N2E3djgoYWwwUldZd3ZRKCFHfF5QOTFUZFRnS2FJNF10VClEUDZbS2doNSFicCFTV1p3YTkoaVp0cSFlekp7VjMhWT9AfCZ2VTZTeilWMzY2T3RvfE8mVj9jXzNZb251NGFMenElNHRHe0dN'@;
put 'dzN2OiMlLzp1PXhCSFRsLG8oRkZyfWN4JnczeWI+bCNKcHheQVBveiNueHQsfkxAVmdyV1E5aGorYzdFW1RNdWQkRWFlYHZJcVk7MjYlc31ZIUJ4dDlqUWQjcDlwVUQvdSE4bS9GPVlTMWdDWVMuXTE0JHRHOF17Z35vMFYwOm5bMjcsMXRVYjpkQzl6WHxLP1JMcWI1ZitmPlpoYCh7UjgwJns6'@;
put 'NHVqWWB3cSV6aig1YVMuNkZUa2BaeW91fGhjKnZIaEVuSXg+USF2Nkk2KGdLTX5yenh2eVhtSDheWS9XMVtkalJeW1llZHJ+bH43fEdTQVBhTn04SyplbTwrJGJzU21NY24ldTdOPEM+Yko3YilaNltWR1ArbXAoOGU5eG83InUzaCZjJm1iNVRlNE4rdGQ2RUdPXj0ycXhUbjwvN2B3LnYsbHNE'@;
put 'bnFLP2RJYzVzaHdDYXJfeyFIUS8/fTU7I24payUmOChaQFVYKTJxKSZbemdQUHFSezwqSDd6eGY0VGQhYWBiX1dbLn5uQTJmNTRAcz99NzM5YTZMT2IkNTpvWnI0T05YKlUkPzJ0JjNNNVZjfnFhVGdtOWpWdVppSzpYfmFWPmM7TUJfeDFXWDgscm0yTiZbb0NQeygwZFJ3djF7aTRufFIjZTJx'@;
put 'bns8OyJjUyZdfnB6dUdMSDpuYEMhRT49fDRjMnd3LjZSNzg6Xi9me3dSK152JEpgeG0jVlhRNGdVSlQ2VnRWblZhZzJSK0pdL2A3L2ssKlloaCVMbEdJNXosejJ4KW11Yk9PZGFOdmZMRXR9RHR+eTVEOnFwdXplZm9AYEx1fFZILGxvPypUajAhY2kiMUgxQWpLITJMflBSQjIsRS8/RGBiWztX'@;
put 'eE9fMU5+Q3woLjIqZ0Q/JElvJFtocUYwXXJpJEhpVk9+Kj9XYFdifjtSKld6eyN6PjdeN1Y0V0VLMH1VYlVZZm5vWkdpWUkjNHcpbU1AUzUzQl9lRnhgZGArajh2U28uU0lwOFpuU0ZnJUIxRWVacmMrQGQ3dDBbNDd8cXNubFgrWXtdQSk5UEBUYFlPY3omZXJrSHR9fnlQWXZpT2BhMm1NLkRe'@;
put 'KTdqeHtmaVo7TmF8a0RPVnAqMmxwYis9YDhUTkdPTVUqPFlnREdKfVBzXzI0YXZbRUkiTkcpNF5qKGd7bjBWdDRtdUZbfFArUjsjIXROW2Q2VlBnVWFoXVpQa2c+YSxhOCMxXWJ7ZTZ2MjxVPy5sRV9WNj1LPWckb241WjpwYT8vcXgxPUIwWVVZcTlQJENIe0MyWHgoKWI0eU4qJDZrcjRJQWh7'@;
put 'cCYhTX1aVXJUW1N+MS46R0oqKDZRKVIlOz1mRlF7TlkpUkpfWHw5djd5YD5iV1JAWm9tb2h9azVGZ21WXlVFOSg+Q0JKc2dSY11MVSU6QiZfSHQqUlhRWXA9czlTUDtZXn0zY0oiWHVeMkk6ZHgje10uT3doV3lWdl9APD07Y34sWFh0bFRTa1Qlck00PlYvZ1BpY3pNZXJ9Ni5tMHJdbnhWeTEs'@;
put 'Rm8hW1k0KE06Ql5yQTNuTXl2OWc0IjFSNCh5ZSlrSChmOX1IPT5IbEVQWVRCdUB5TT4kRktXLi5xQS9bTG9OLyNmJVROc0hkbF1ALmp6NldTRlEmeyVVNnFiSUlFIy9yV1k+NEZIOSwzUjY5dU5ScWdQNC89dkVHWjV4Unh1JGxZRERHblc0TGRhY3pWbiE4WiQsKjo9JVRBIUMqbF9xaGJDemt2'@;
put 'Wyo0NFQxVyZXfFBJbFBgU1ddKXllOT9+KlIwfEp7XyhhOFNnLjJfRjZmWCl8TVRGREsveFo2NEVebl5kQ0M/R2w1RyZFMU9Pak9XP15jaCFEJjk8a1lmKSMrYENxYVM/RGZGT28wTS9PdnBZfVFhODUxWDUyVVdKfkNpYEI1W3RoXl1EKk82OCw7JkFaKFRdYT04STJHSz5gYCx3R1hZWUVNSnpO'@;
put 'NTFbLi5OOmk3MXo/ITd1I09GXnk1QnZtbjFmdmJrTT08MUZSR0J0L3s4UFM8dSJofHFRbywvOXcuRkVpVXtPYWY6TGdEJCFHcmJHMC9xTUZtdiVLPnR0c2MqJUBUS31NanlVM182SEBuUz5EYmB5en5KOE0hQlNlLnE6aD5zaEM9bGIlcnR7dz5QSV80QXZyTEh7NU5CcE99QGF9cmxjZlRzb306'@;
put 'OlEoKzpaSS5oJEVdazJmQEdBWmJPZ3coMDk2V2NLTGVKMXc7KVNJcE1ZdmFkIjxnLGJudGN0dElSL1YvJS48TSN7ZTU2fXNEaTgqV3RKO1liWDdpRVJuQT91JXJXMUpZNksyKyxFWnNhKS9hPnslcyE0ZihsRDVseH55VFU5bTtoPzZeUmNUXXxUMC8iajlVVj1Qbis7MjomP2dvblc8PU1FfEl1'@;
put 'aEdaNDYsajJ6dVBvUSZuSj5nV0psV0MjeFlGWHhMLkMoUTFCQWpRUlBnUTJzb1FbZyV5UFdsXiVmSSRbQTI8djV8az1abCZiQExNS3o/I2Ewc1A4LjFEMkx0Wil8IyZsM1MsO0ImajVdXz92PV9wIzNeVldxe34lYUpLVlpJR3UseGl0OWFJTmQ2eC5pMXxwNSZORkl7MCF0M2l+KjssaFgwZkBa'@;
put 'SXphZUM3YXshfWZ+Z3wobDZUTmRLWmRdOlMjOW9FKnVkSURDMiFjejFgaGZfMCxSXV9wSlhpUWBFSzZ3N1dYUWl4UiZlPndeM35lPFReSWR8d0Rhe1tWakksUl5yXzt+aVIhVTE7VjRZJjspfFdfaUVfWVdUM31RMTVJcm4hQjlwcyl9ZGxDe2VIMHpZfkZUcXhNPSY5bGApTnFPTiNKZFs+OyFv'@;
put 'bm9fImxyUX42Pm4qYm1JfmpqMnl2XmVDO3lwLDJdPzRvNzloMGdeJS85cV9HIj9zdFY+MkgoL3p8RFFIT3k3cjF3aW9MNSEySnN9RD9lZkxRUENGWV82MTlKXjRjPkEsSFY3a05xclVDQlImJkt+Z091JXZqP1I6cFZkcVMjTEpfN21iSVYjbT1nQTtLe2FvXTx3XjskMS5sZ1J6TjMxM2wrbGQk'@;
put 'P31NfktfNU1OWEA5bn5Ze2Fqbn5mLGBrcmt2T2slemY/RERvbS9kYGQ7SDx9eEVHPWUleEkue1I3USk3O1lCfUgsajBYbnxdRW5IZlp0Wj5MZlE7cm11MSo1VlFuLEs+OylMUHhUeHZLQyZ2ZWlyR3V3YWEvZCIoWVF6W3pJUFp9Vm9LdzgvaF1CcThAPzB8aShtYH51OmA5MVF2ZV93Zmx2eGN1'@;
put 'aWo5fkw3JS9AUD5kfSNrKXJ4MSp7QmZhVTEpKCRhZCUjdXomRmQ4ZWEyZCo4X1BLMzJ+IzVLSThUPTZlJnIyOWMqRjJyMHtQYHdCKitCKU93RCNjZHZbO0ZqTixFaHkhcCZ8fTp4Ml04fCghQThTIkNlVTlzLHE9ZUJ9Y3c2P0R0N2hQQmUkZ0FkPS5fMCk2NFoqLCVmYWZGd2diMGBsbG1EdCVU'@;
put 'aiZJdjQ0NU9VQypCfkJYTHFSaWdPfiFaeXBqaD4iXSF1Njw0YS8mfHU/VEZVQUlCKiI3TGpVQDpsOWp2VVZsenFOWGdpRUwyb3xCVTRjdDgxTzIyMSlTamdILjFKd2NWOEA4TksqKlNZMC46L0VuLFYyWTJTXjopVy9BYTQodkcqODlEJDUodTMxWzZIOE4jTChAOlBxK3A5QCp5OXF0MzgkQ1No'@;
put 'bj9HO3JVM305PSY8cWNiXitaNkQpfEEzMWJMWzIlRElWNmlZKUZLbCs5RG5lKT5uL0NMciFrOiJob0AiR3tgZlRLUHUjT1BHMUxLKkl6Im86ZTBiSSkzPmpRdVU2SjUwKEJgbDdydVhiSShUaT58LjkvR0JSSzhneHQ6e2VlQX0uc3k9ezRbX3lhVy8+bl0pfCU9cEkhT3RdQjdkPjlqU3JdPC4w'@;
put 'KHwuZj01ZV8mNGxgKzZjZUEqUXVCcVM4bz9zciUjL0Y6ZGpqXzUmM0ddaHQkN1FgMUBPT3U3JV5rb1N2LH0qNDdVQz4+fTg9WHlVND4sZDo9PkV4MF1BMnVwKkd3Yzg9PElWJSRaZGZaUEAseHhQYERpPmA1RlZRSGNiQ2lYI2JDNillLF9rP3pyJERWSF1dMFgre0wraV0xXnk5KXZWYmNdKX1y'@;
put 'VU1GXnlufC5ENC98Vn5DOHhrcWF0fTliJixEJEtyVTYrPzZhITpFM3QwRUNhVGxmUnQwa0k7Xjg0UE5MYEJuYEg7eTlHRH4hKzZne3k0LHtJQm1jPU4wIiVLZ0pRVDI7NDguYFkpUmlsalEyImw8W1c+OjAxTXxdPXZsZTgvfCkray5qel9Pe0BEM19LYkh7eCxtcXhBOHRCQzEsJX1ZLG5MM2VT'@;
put 'NHIkJFdDVUY8MHJ5VSNdPXI7YFBGTE9oOno1UkM9LFFPO0c9ZixkYmpddV52cmspUXlESipRV1FMTiQxfjxdSEc2bz4wRnN8IlcvIzlNTkYyQFRJWWAqNE5dZThYcTxleEZzRCo3eTNWfT46LEZpcml6IShPMT9RZzBGcXk6PTY5bGRTXiY4QG9WRXMxYzQ8Nn19NXVzZUVNWi48PSwqc29TSVp6'@;
put 'QiJ+dF9MJDtgeCU4ZStEP1FOOH1JfXU+RmVCNmZCZiVrbkBYfDxMSFpkO1BpK1Q6YExEfil2THxwfmxbNkRCSTFzJDVkSVJWXUxRXUJaKi98dClPT3BVajN+U3k4ekNXYzx4azgwRl19M2xXRmR2R1hDQWxRaiM4PUtYIkBgYGI2Ull1LGVUR0s4Vkk1WX0+TDM7WVUxZkB4KixXODZ5PDhnUiUo'@;
put 'JHJTcGVbMWZPXyZNQEohIVlRISZ5TlNkb3JqNT5iaTM6XUM2Q35vI3dYMW9iPkM/SnhEITV1QyZVOSg2d1lAR1pNLCF3UjAseztjOGN7QkQrLjBgeVRVczd2IkYsb3hFRTFKNzwkanI8MWx+bm1TS0VPbG43aSMhdltDVkUreF4pMlB2JSwvMkRHeVFVKXAsTHczVUJQSXsyRXN8OEg0a15oR0NT'@;
put 'TTZkNUpqJHx8PEhSfHxAMj5wXi89R3UwLlJiNXJrbS5wNWE0KlRTcXFBVEtYaSxZaH57KUQ0cShlMDptaGM2WCxBe0tSW1IvYE0/fW5IeUhaRjUkMDMxMGQoUSk6PCxpTkFhI2k7XilFJjkjbWZ+d10jXSw4KEBlKVl3T3B8MUpqP1h9bjtfWVlhcVVZQDUkOiFMKnkzOSVVXisue15RfmJSYjFS'@;
put 'cnFmKnFObE9kS28/bGdSZig3I3JlVkllUH04Wz9iITtlIXd1QzZUYCVPKEpON0Q2V1p6U3lFO3orPnAsZGZhfTFlLzJSITRpR2RwT2hwRTorPXk7JC8rMnF3anZLR19tSzIwX2siUSYxSWFWZkN7Y2J1NiElJHFEeyNebzU9TztfWDxndz8/T3ksaFl2OlAkQSk9QXpeemtVdys4ZFlnIjczK2Qq'@;
put 'QnJAXSM1OUUmPEl9MDV4ez8kQ0RQIm5lWnMjK3hsOV95WUUyX3NYe3ovfUh9dXUhUHQuU1YjNEVaRj16cCs5Zk43IzNOLDJ5LE88RF99dTpQajc+YFl4NDtYIllIOWF+NGtXRis/YllPJWFyTy9JO3hOeWg9YlM0S0BVbW5zcV55LEkqdzprJkI1blNMTWJLdi89O0VGTz5YfEZuQCpjLi9uQFlE'@;
put 'cip5dkh8IU94ZlpYTC40OCphcV1dcyk0V0gwaD8kMzp9QX59VGg4U0w6R0xyK1F2UCklW3o3PTclaHFTPmpINnVAUExyISFaRDN6Vjh5THs0flFrZEBSTEF6Nlc2fSF3ZGBDMWs1NFgrLnV4fH4qUmJeMVU3Il9FNX1TdDZ1NG14Pkcsck46VmE2ekg+UjhYe01LamE4PHw7RXtKKiEoYTJ1PFJh'@;
put 'fl1qdC5XKEEjS346Y1IxRCg5fVRmcGA6eF00X1F1R3xAenNjdys1eyo0aTxQNWU6SEAlSzhjb3wvP2FnWHszV3c2aCVpYjEhK3clfUd6NW4oRUo8Q1ExUm1iUGFkIkcsZiUjY3w4cltQWXV8RHhTLzhgOSMqdExYfmhXU1NbWF54XzM2U3NASUMrPSVsanwzOSVRYTozVCQ3a1YzLzFoTWpPcDJ5'@;
put 'WkE9OyVUez0jNyJ7Rkc5KGVsZ2JTOGlGTVooTyZDamp2K2EjdlttYFVdP0NYYGRmRVFqfkpMfXxfYyElI1AsSUk2JWlQWG1JMml3NCx2dkouTTpNfTM7N2VRYWZiQT4qPG1haGBbWyZEQEoqOjgpTXZsTy9vNChhIUkoPT1iWG5MLFlKfStoYF48Ki4hfkRpODpPSiRDRERiSGR4S11YOEtTQCQw'@;
put 'JV5MfUw5QUNaU1E/WGh5XXZDbHB+Lzo0JnooKlglcSUzPGBVU31FWjBiLElnRkpoblRVV3tRbkJdcz01SyN0cndFWVRTb1Q2VTNvUSNQZ0ZoL3Z+MG15XVc+SC42VV0rendjayZ8dmd1KU00T3YjOHFZW3FwTjdwMn13Um8/ZmAhbipRY0QwcFd3VTZpRFBiIXFCP2wqfCk/Vl0kd3kyUC9GQHF5'@;
put 'aG5bNGBWY2xvUXlgNGNsO3gkanpGL1YwLHEhRW8/dCNrWzpEOC8hTjE7WGlYWUZdJGpuXjRFL1BedUlZZDxpKyxzdGZ2fTZTT3lnZmJ3biRxb3BhRXt4LnxKfSVhWWNtSEtEe0RLbDpUblhyTlsjeUhaSzJANl5uUzBlRjtpXSpLfUdnSGpbJkBlKU8wO2JudWR+U1BxQFFRMl17WXpySD9hYUlN'@;
put 'QmRnQ1cjVCN7W1VZPlEoa0MpeypMZTBqczpRflpuSnRUWyRMM3EkMEF3MGNVYSJQWlllSF5tNSMwYWIiMGcoOjsoXSooRz5PXyorRXNydl1vPFR5RzJDaVpTdn5haTtuWDowdV1za2A5aGtuY3VTWGg7UG5BNHZVJiZuYDhSOWhgMUhGYE1AbDFUdytzbFNgbTxQJGhdQW8jeStgNmxZbFVDWD8y'@;
put 'UTdgVmBXSCs+ODpJSlZvRl10QnFOR0xgPmNEcV8kSlNBfH5ydHNiUmdBUHhXPiRhMUkwJSg+NW9TSllwZVRJQW1HbmlTaEp3LnJ9cjZJN0RzMmU/N00wPEpxTXY4OCk4eWxrKW5aZkxtc3VbJTUlXkdPX3l6fXNPfWw3I1JzLnAoQFt7cGMxdy9OSl1EbUoqU2hSMEB5MEQyKFtxTVhwK3Q5RVNu'@;
put 'OTc/QnElbCk0YVNxOEQ9c35QaDM3I2p0ZUNOVFBdPkJyJWkqNGFTJlEsJGYjVVo1PTVMZUJHZGxMfDAyXmRONTxkSCN9KSU2cnwkXXA+UTdMR2ZsL2w4MXpkdC9KME1neyk5NiNyK3Axcl1YZioyRTdVJU4sVW5LbFNBQ1ZBU2pYOnZ8SmgoZDc3YV1gPFM4Vz1OTUk3blpLcEJ+Uk9rKU80RCwh'@;
put 'a3lGOm1VWS84MEh5cmA6IyRqfD5lY1Q2RiEzfCV6OCk2OUlve0whWHY1c0IyPnZvXSE7I3JyUEBSQFFxJX4yZyNaSzdfViQpKlsjbGd+dThGbUhYNmFVUUBCVTY5XzwmSnp9VDxaRnh7TDprOSx2dXZmfE1eV1EvMWdwTyNyTHEvQUs4b10jRTkxK1MqNUY0YnteK05tTnJ0T2ozdWdFOUJhNXlo'@;
put 'ciE4alZufFFlT19QQ2NtZi9sO0xIQj5lfF8mS3ZSdVYmRUUzJmJlWW4zTEJiUCsxaDF9Kzp8PzcuOmxdU3pgMVFSYjMzK35MSWNPNGxOLj0kXnJVUkw0c1tsdVlNb3pIMiZTYnsleSgyME5ZekQhditRP0hjdmMiL1EycG8yQWwrQmwoZ3B1YTBiXjNsMSFwL25RcS9eazJWQmxIfiMhRVFlSHp6'@;
put 'aFYxP3B9ZldvZDBhPWsodTBKXlR0TTZXVyV4TDgqJjM1aitxQUc3QjN1Kzt1b1hzaFJ1cU0mYzJlQCpMTnZXSTA+OkBaemxuSnFyWG1saVA6fDU+IWZhKUgjMHptXyt1MWBvOHZyIyV6bUhxW1psej9ONTAlVXU4SCFlQShVYVtNJmczRitNTDFPY2xwNWMsbFk1Q2kyT0MmRHNNUzdnRkVoUUEs'@;
put 'NSFQQGRkT3I8Rzo4SDZqSj1CKGpBOTYjZyZWNUN+ek5QZHtsfCxdd2V+UmJWd2VkLl99aFVLXyREWV1wUStUfWE+ZTVQLDtXbFNDa1N0QGg1ajZuKUs5XnFRejF7XkJKfWpRbnopZHF9dUB1VmlaO0BEST4hUnhhMFchcGw1KzJrZWlrMmRbTGQlOVlRP2RrUyNnd1UiPDVEI21pPXR+e0x6MUAr'@;
put 'a3guSlRwQ3lMejwuRVI6IUVUX0BEfGQhX0FITFk+LygxV1MjRm1SYVJfYWlIJVljI35HPDx8aHxoTUQwIyUmYFFDbH5PS3UrcW5eaiRtaDVxQF19STJHJSNOe1B4KHJPRz4wYy97QiIzUEZCbSs0ciJTIzRnWktPJnxYIVNIWTMmd1EsRGk7VzpWYV5GMyZjNiMkVXFkPyImZmo2en5wO1BqXmRo'@;
put 'WDJ8JXRVRzxNMn1NWDg9XnhrKns8WlNxXlNuMWduI207ZXJmZy5JLnMxPWA9UCtsZD0zLz88dlJJeklIeCZab311XldAcDtbI3ZdOHIyfUQ9Ml1ifnl8eDZWb2hzajhnQEVpfkFfaXJDU0VYczVdRDtGQTZnUSRRWzdnXzVoZjxmMWZgRW5ibnR0bTlnXz81aVY5JV9+THBXVzBgeE5IXkA8X3A0'@;
put 'amMxaSowTCVoeC48cn4oS1t1MHJnLG9yYzlKVCV9SFR+aFRnQyU9Qk8sRS86dldPWDdxUWQ1WWUofjc8Ym80dmEobmdySy8jR24pLkE3RzB3KmpRe2swQiRzTFF2Qj9vLkxwTk8jMU1eUDpDRWU5fGRQTjJFMiUzPTdGfTdXYkwkTzFXOllncXchVmRjdGg4aE1sampmTjBQVkQyeClFPGN6XTQx'@;
put 'SVtxUVJldnQ4WyNpInV5RVAyQ281dnZga2NLQGRBSW4pR0VDIzIxRjttUkd5Y0AydVBCdXVWSGJJdXVZSlVVUzJYNTI4S0IuNypKVGkkc24ibCh5fm92Pm5RVlIwa2VJKXJ2NlRlK3UqYWFpTj1ubVdyeDVdPjkyOFhyRUIzY09mYllVUjFSRF5YQn5dOS92KisjZUEjN2lGbkx4c0NIWVd6UTxL'@;
put 'K2ZCMU9JdG4zJjhDJGI2eCIqenVJP0pkJHw8WiY9TEF3ZHsoMVJUdHVUNUQzeihwN1syNFM7JiNJUSxkdyQlTGV6YixLfkZBdTtRWEV9PE48Sjw9WzRHZWV1cTtBMCpWMTs6QVJQZndvaVZLZSsiZl8kOF1JOWtadE1gUkpAe2JJSzcke0FxfklfIWt2dHpRcGJaP1t9Qz5OaHJkPys+ZCl+MUVT'@;
put 'a2cwTmBAd0Z6MWFPKW5rU2BXazMsUXRdX01oen0ha2xRJHY4YGtxd0wpcl9mKUJbXTRbbG0xWGhaY1o4JXBkQDZNekRtanZyKDJQYX1JeD43L1lOdmxJIn47NDA+SjMhJVFXQHdVVVM8TCI4Xjh1MFE+USFjRm4zU1U4MXtpW10hWz8rNzVMdjYjQltdd3hqL2ZhNkRWfUdTPTx+UjApIllhOWtN'@;
put 'KGwjayF+SV9gMGJAPTUuWn0+OmNXZjJtTUFeKyZlfUNAKCFBWnN6RUNjalRdMiJRbytmdihFJWZ7cDU7TGN8d0o4fkhNTD5jYjk9Qjk/UzJVZ05BbS8jQnFWMiVtSGRgSEFtIVFrR1JgckhaNTFHKEZQWCFFT05APj5ORCNocjkvc0FxTX1UOW1PcGN7cnV5X0s9aEx1JUZhKCNGOT5YeVgvVjFk'@;
put 'ZihKVnBDN3U2akt1JURMN158KEN7WnFnTiY1W2tWO2FbUUphajZKPXJYVHpIdmZ6ZTI6dGpebWNQXXE3JitdTnEkZDo7QiRXMmFhdD9iTVg2ZSl3KytNWTs0RiFLdEw7QkpWOVBaMnQ8PHxHRnEkSXAxdENyP3JkcHIxWkFIa21GNColK08zMiwjYiFsSjw9KlI0Z2h+aVt4bDpqS10mIV4sQkRn'@;
put 'KU8xb2VkMVFhX3YyeU9TXyUxcnpIZ1AwU2MvO3Z9OEtHb2BCa0JEJiJEU3tgW0lzJFQvXV1RS1Q8JkpQalhvVGJmLCZ9Nl56OSxedHFlKl1mYnAlRyJnW3dyUyoxSWt5a15Oczh7dGtSd1BvfVVafF5EZXZUMEo+TyZFQDtTLzJgYDtOIiVTdjNhLmgoQ1MpYyp1RThhUl5+N11+MyswKGpiVjh2'@;
put 'aWhVPWk2OCY0W259YlNWdypiYCZeZ3hEYCZIXTI1JkxbXWwuO0A0O2I7TX40Tz8qVFY3WHs1ekZYIXh6UUZtOyJDdmdofiM+WF5EZ2xKeDliUHZ7QE1COzlVIzYjVnlbbHhmW017cz5xTGpNRk1IJGk1d11US3BsZH4iKmk0YjhPe2hNPEhacV5XWDYuPW5SO3cyMXhGelZrNldsRkJGTmFnK1Nm'@;
put 'T1BAWHYlZj90SX1NST9jQV1jT2guSXNRKiRWWW8jUj0wQmwqYmgySGY2XzY3cyV9TGYvITNlXyUlKXYjQ0kiM0pidmJeX2d1IywyZWkzdUtGSCRrZyFWQFtld1RoZClnSzpfKDhXeDFmaHFxVU0uaW5hYWFdRn1UOW5GP18lXkdZVHtPImJ1fnFwSWV1Zz5wZWdYQE8zazNuT3lBZ3hjQSU9RSFx'@;
put 'eyxtTzAyPWw4TzRmQSp8di5rIiFgWWFgNndxUiVVMVBCXW9MRml7OFhjKDYzUTZUb1JwWjRuXkgpcysrfGNMLFEjM1c0JHY4WD5qRyIzeDZzOzljOVo9LEVlXygqb3FgMWxBeFo1N0M2Izk6fUk2VDgpWX1bfE9UTXRkb0tSaVh+Ulo0elg/Wlh7ZXR0TFNPJHU1UDNDb0MveEtDNUVETVghRXJd'@;
put 'SUNrQD4yWEtwV0Z6SHMybTJqNE4mUERgMlJbbiNTbXs/JihmMGcudXBVSlE3LCMjPmVoaDR3dC8/flIpdjNlQygmcX47JFptV0FrKWk+eChbJTIoN1kyaU5HN2dTNis/d2tFM3QoWGVIO2dHNyMzbDZzNVd1SjMrT1tiZCwpbHtKNVo2dHEjdTRISF5Xd3d9VElCXjttWjpdPix2Ty8sLkBYMmIq'@;
put 'cGQ0STxyQGJ4OTFbZ0J8M2lRPWI8bCRVb0VESSpqR3Bld1l8OVsoLmcwfUc5fmxvMkIjZ3thPkQqXU0vPn5BfCFETGI3bDNfNWozJEJAS0pWU3Frfng+O3pvPFZQbH1XK1pfLEBoUnI4Nk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZi'@;
put 'Ok5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5i'@;
put 'MTZiOk5sMFNiMk5iMTZiOk9dMTYwNmI6TmwwU2IyYiU5YSZCQi8vOnNofiZPYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObEI3YjpObDZAfnt0MCkqZDJOYjE2R3lXbDw6IjNGOndbQS8iM31We3JbfCpgdVtBLyIzfVZ7'@;
put 'clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIz'@;
put 'fVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjMyNzI3fVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wq'@;
put 'YHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8O3JqPiIzfVZ7ckd5TFd7cmN+Mn1RfGZfOT5lKDdzY34yfVF8Zl85PmUoNzdGIVteQF4vbktOZXxaNjEsdDJrfjJ9UXxmXzk+ZSg3c2N+Mn1RfGZfOT5lKDdzY34yfVF8Zl85PmUoN3NjfjJ9UXxmXzk+ZSg3c2N+Mn1RfGZfOT5lKDdzY34yfVF8'@;
put 'Zl85PmUoN3NjfjJ9UXxmXzk+ZSg3c2N+Mn1RfGZfOT5lKDdzY34yfVF8Zl85PmUoN3NjfjJ9UXxmXzk+ZSg3c2N+Mn1RfGZfOT5lKDdzY34yfVF8Zl85PmUoN3NjfjJ9UXxmXzk+ZSg3c2N+Mn1RfGZfOT5lKDdzY34yfVF8Zl85PmUoN3NjfjJ9UXxmXzk+ZShRZEUrKGg8OnQ+ZSg3c2N+Mn1R'@;
put 'fGZfOT5lKDdzY34yfVF8Zl85PmUoN3NjfjJ9UXxmXzk+ZSg3c2N+Mn1RfGZfOT5lKDdzY34yfVF8Zl85PmUoN3NjfjJ9UXxIYy5qfn4yfVF8cm8vflF8US9EXW1CPEM5RmZMIVdodCYiJiImIiYiJiImImk2RnMwMG95dFR6YWdmLChwMD0iI0tgIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYi'@;
put 'JiImInF0JiImIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYicXQmIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiJiJxdCYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiJiImImFkRSteaDw6c2h9JTdIfm4+OSgmfjtoaEJtIzlwbExaYSVH'@;
put 'TktbdW8yQzlEIzc6MSxVK2VHeTwoS2lOXnFpVlViQnMqWTxFSF1AUkY5dCV5N0hkclpGOXRMenB5cl8mInJfeUs8RVkxXVY2Qz0oVnFaRjl0cl95S2RCYD5LVjZDPShWcVpGVW8rNThDImd8S2BwSSNkQmA+V3hgPktWNkM9KD52PTspci8xLFVZLjVfN0NWfDcja3VhSj44MFY1TlZ7ZkgjQ1hF'@;
put 'dUlCUkNpRSlHdUxDWEV1SUJSQ2lFKVM6Q1dhYVVaKjJhNjlQSD9WLEx1I0tYRXVJQlJDaUUpR3VMQ1hFdUlCUkNpRSlHdUxDWEV1SUJSQ2lFKUd1TENYRXVJQlJDaUUpR3VMQ1hFdUlCUkNpRSlHdUxDWEV1SUJSQ2lFKUd1TENYRXVJQlJDaUUpR3VMQ1hFdUlCUkNpRSlHdUxDWEV1SUJSQ2lF'@;
put 'KUd1TENYRXVJQlJDaUUpR3VMQ1hFdUlCUjpLQ2pkOl97dmhxcj45KCZ+O2hoQm0jOXBsTFphJUdOS1t1b2xGX08jN3J2R3lSKWdSMXtHdVVVJENxKlk8Kyxxb2xGX0NDanpfQjEmQ0xLaHVVWHdEV2NbdEZIczQqQkxPe1d3RFdjW3RGSHM0azBVe1hlKFZBPlVRa2owWDA3NkdTLjc0KkJMT3tX'@;
put 'd0RXY1t0RkhzNCpCTE97V3dEV2NbdEZIczQqQkxPe1d3RFdjW3RGSHM0KkJMT3tXd0RXY1t0RkhzNCpCTE97V3dEV2NbdEZIczQqQkxPe1d3RFdjW3RGSHM0KkJMT3tXd0RXY1t0RkhzNCpCTE97V3dEV2NTYUxLcDJiJVB9Nz0sczxeKShfe0VpcXIyZHxVUy56TyhTRjIsVTI2NlNNNzoxLFVs'@;
put 'OUtLXjRvdXYheUQ+LGpLbGZHeXBjVylZPGEqWTwrQiw2dXk3ZFI1bEhjN2dZO08yYyV3N2RSNWxIYzdnWTtPRGxCTE82NDVpYk5kPEgkOlYsaTVqVjxPMmMldzdkUjVsSGM3Z1k7TzJjJXc3ZFI1bEhjN2dZO08yYyV3N2RSNWxIYzdnWTtPMmMldzdkUjVsSGM3Z1k7TzJjJXc3ZFI1bEhjN2dZ'@;
put 'O090bypsUFs0XXpvTX5hJX4iPF5KKV97UjdecGkyTWRybElTMXtQYmVsMmM0UjF7LmdWVVRaP0NDalNIIzFhcjohS0s0NXF1diEzd3YhPU9SYmdHYlI8QmI2e01yTytaTGF7Y3h6VzBbNUZOck8rWkxhe2N4eihkPDpCU2pQRDR1S0ZPTisxaHkyWD9wMFkpMktabTd1Q3BreDg9I2pCJig/MT9V'@;
put 'YU0hfTBhUXw6LmN7Y3h6VzBbNUZOck8rWkxhe2N4elcwWzVGTnJPK1pMYXtjeHooZCJAdjtjLlU7TVtXfXpvX0JiJWhDOD0oNDc9cWx3YUA3aC5ZPCNTczcrWnIrWTxTcGBAb1FzTEd5T2QmaU5eVixxb1YxO0YlRWI2cXV2IWtsa2xrbEIrMGpZMENkeD9hNlEwaCY5MS4lWzU3PXF5cntfXUdO'@;
put 'ak5hPFk4cnJZRUVoUCVDR05rMSMxTWV8NXExezBqaT8wK1JVSzhFfWQmR24zXkxOM01HUlArR2dFelZpeTJXaWFhVitWd1tPI0dRKEhUUShyVCsmanp9JD1FOFo2ITxIdHI2ITA/VWE2X1YsVndIfSwzfTpiejl9QWMwak1tLzxoaHtsIzl+Uz1ldTJfbFkuJEhTLms3XnBzNG5CelssPEM3Rk5z'@;
put 'N2xUQ2pbOmZ2R3l1ZCVpTl4mRF1AR1d3UEUrKjdoUjF7WURwb0U0eW84ckQ3Nz1xeX46P21WU3E+JiY8WW9oOUBQVTZfKXc1dSxAeCpAZF8mQ0B5fClbP2JPN1tYP29xXW8kR2Q4SCVmNy5DMklfe21ULiFhfCxGMVdwUj9dWHhpTHBaZDw7MGR8SkNgeXw4RFBvcVduQiJZK31wNl0pREs0RmZW'@;
put 'dnxObTRlNzs5JjRVZmN3aD9len5kPD14eH5WT3pnQ2pmPG5mYWB4UCNZZDpJKlp+LHJHeTp2YmorfVhANWErKz5+ODhXeVJUM0Y0cTM/Q3kvQzd1ejAlOXlvd3goeVpQZjYzcSxmeSRBOGpPfT9Uezo6TWQyPVUrNl9iZ0dsImQie2JWXk9VTFVgNzdhOCw9W2I4YU87fDAwJClHIylLRzFfcSl6'@;
put 'MXxieEQwVF47ZmJJa0hAejJMKC5TKSgiTU45PSNLUl51YnEjRUsxLzNPJlYkN0hDTUk+JllQTk45WjsxUSJGMGUlXmF7SDhWYDpRPTh0OSgqSzRPJj95PWdFbjk0fjBhOGhWeTk8V29peDdlUjF7c3ZHeVspZ1Ixe0h1VVV2RnEqWTw6LHFvRExuWng3OUVMSzw5bipZPHlILCxPfkZmR3leZShp'@;
put 'Tl4xR11AMHNhUk5+eDcyNlZqTl5Kb2BAOktdV0tLaHVAd3Yha1ojMWFyIkNwb15iTEt4IWQqWTw7U2BAU3k8TENqZTshMSxVfHRVVUZqW3d2IU9QR2Y3R2MxREttZilBX0ZKK2dlcylIdkVqYHd2IWxheDEsVXgjK0B7OWFmZyxjeUdqRV5iYUxLVyMhU2c/bTlLS1cjb3V2IXtEUWhaTVM7fnVg'@;
put 'QDszJFBFKy9QTGlOXmA8emQ3TlFEUDw+I2g4MSk6OD1nVVBMZ3MpYEh5Iy5NXy54O31vMUluOUZsNmxrTU1gWnBsOF4ufjtodkxgdHRdbH5XL1B+SUY8PiMjZjVsRmZ5I3F7cGtNXl0xLiVJWVZVS0VVSENqW3llUjBwL0lXVUtFOEhDalt5S2lOXih0YEBvUWZmR3l3WHxYKFkqTFcpWTwmNStm'@;
put 'QEYhalArR3ZVVXZGSzFFVylnJW1qKzFoMClaOzFoQC9oTUAvWzhkcDwsfldSai5RfElOPDshb1lITlQ6RmY9ITtIaD8yeiFdNFJ5OEZVM3VnfEwhJHFtWmkmZHBSRCwwQHlVWSswXkdWPFg2c0x0SmxEMmlaIlF0bF9IXUQ9QCs2dlheI2FOYGRnU01He1o2P1M2SU48W1MqRmBJRWZmallQTGdj'@;
put 'bDZsa00yO3dneD9tOS9ddz54O2ZqMyFZbmNQRVlPUUJHRTFCd3csQioqanVpb0pnJVBWbzllUWB1LiwlZSE7ZD5maVgkI0hJXyFfQGh6P2hNWTFodiFdVFZrPmhNYU1JIUxFVCZvWWk4QGwie3AoI0hdc2RFL342SXE5PzkmK1B4X1licCUrKzBqcTJsTGcuRCNKZzt4I2dTSFJ3cVd6XXVnUH5X'@;
put 'cU1Nb3cvWjtjanFUSSE1Ky99UzpaekhsK2wxaUtvYG5Kdzl1VTgxaUw8LEt0TFJ9cjEsKEkkaUc3SztLOUxgPGU8OyFZQGRNL0w/UjQhI0VTMXJ4UUVsRiVlMXozLGVYVFIpRVVqQ3lwWnBoUUpdRkpsW3cpWX11SmhiTVUxeSNCVDZHYElhMW9JZFAvWjFIJXZNXmF9REs4MyNmcGBbO00qKFlz'@;
put 'ezxMLigpMGhNR0IjMCJDYVYlMCxRSDI5Wj9lWSZPU3o2TGRlNk5tUG4oTmNSLDJbPXk+dzJzKXUsb0BoKWxOcCJSbU9kUjxPfVBQelpgejhQMzlwWm9qP0l3ZSk4JiF+KytEYnt1Kl8rL11tZiV6S3opJXk5V31LQFhgJV91LE1ZTH4ue2J8P0soOX0/MUh4UyNaMl18bFErQWl+eVdiTCV4fF9e'@;
put 'PUhNVyg5Pz1jVGciRmVQJVpeN0BJc2YmfXVEK3hKL0xJKFE+UH04cT0rYSxVKk1zZiYuQndoaE15ZnZ9XVNEU2pQIXxzO2EsUT0/Z0YsOUh4X3tKcndWaWk4ZXxWOUJqSFFLKngrLFZSZ3ZiOH1eJExeMyprXzBxYXJiJlYzJXJNUEQrejA9PTlAZyYkK05gaiF+X1QjTWsiLl1hTV1eeHVqOlJF'@;
put 'ZmcmQixMVyltMD1YbyROOnJgITtVWGxmcyZyW3p1cUMsPXc6IVZgNWpLKlNmUnhXZnhodn0xcGE7KV5fPEE0bHE7ZDgvVjVwWStuMSpWXjokVm9sYXJnbWxJPnEldSxgWHE8d15dPFQ8LFojaTdAPWEzKitqfUxTbjF0Y2JNK15fb2ZtUjZtNjAoP2FqVSx8ISlAYiEiJTF9Tj92KnFoW0o0KmIs'@;
put 'OSY2cXRRRT1kXiEhWTM8YnNsIyFYTTMrRHBmUmtoXVsqanRRa2hQK2R5UyMheGtVXjY/YSI1ez1mVnMvKkdSPj8hZ1VdJU96VDI+PXdvQ1Amei5QZWoocS5IOXt8QDI/V29peDQ8IiVMXj5FZV42QD8haXp7bD4yY1ROIzRaRV9fPTkhP2tEYGtTbC5PUU5uVXc8PSNTdTNbJWRmMjZsLF9kL3dx'@;
put 'VEo1Z3lDJmJlTyFeelppQHA9W1Y7NzxeIUo5eTtUIzUraTg/bVQuP05RKEZUUndfWTM8NnBzcDhwWHNlLG9mYW5ZYkVNPjN6ZV49ImlXXjlyfm5tUHdyJnlaOWVsYm5HZiF4Tzp8VHVReyQ0ODozb3ZYQyFqdTlwWEglPklfWihAfUQ4cGZzP0sxXUFdaSZoVmZxIXxZZXQ3OnhJOE8mLiUsODck'@;
put 'VCNEb2JUXz9ULkE+ZSxGPTZuOmxLfXMkZnwubjU8UlVtb2BJcn0ie19mKzI1PDhWP1Z4ZVQ8I1o3enk/ak9KRzFyelouaXY5VU1raHBZZk4xfDgrMXxUUmxrdTk7SDJqNW16UUhJUShjP2B3QD1fWnltdypxdD5yVVZ9cDB6KCYqam1wVl5wZkBeK01KfVc9MU4/WV87NGY2LFVaMkgxR31qWXFk'@;
put 'fT44Kk1kTmxreik5M1AmMkV8bDNmYm4hSjk7MlQwLCE+Vzlpc3wkJCtycCROZkAxP3ApRGh+JUV5WyF2a3xpNyxoVHVxNW1Mc19ZZTwyfXFtY0BWLGd8JmVoYHo8cWtwPCslfCNYfnt3WFBjfmV9TCVoaVleYk4ua0NgbjVwUFUxYk92WTM4UypFcU8mcDcjdUBQSSV3RzVMaGVyeFp4SGZ6d3or'@;
put 'MyRnX1kjXmdiTWJzcEpjfjAhIU5eW191KSVZPyU4YFNjbjkmJiplKHhnJGIlfUZ2K2pEZypKTz0iJTV8MTNrcSladixZbl93Uj1vPn4lPyU+PWVvay47SjI1NHA4cjdURDlLbHJOdTM8SW4yRHx3O113VSoyMT14O3h5R1BkTyU9fTo1QiV7MX5wOX1GIzl0cnpySytiYnB5MyYhOX1rKDMzd181'@;
put 'Xjt4RCZBUXtTbXBQTzw9MSslOFJlQUtVfnV9WH5BJlciSnNRJSFJZ3BUTVE5fGZwfGUsQD9hUGYwKSV0JHpUcHBQT1clXUVQUX5mRF92bWZuNyxqZkExTyV4Z1RtdlErQlBkT29yIVdgbT1HSz0rSFY2X0VgI0pxRSl4PnI0cG0kOSQjSDUkNCRsKnteKz9lfSNxd1BCPnElRXh8WTgmSTA8ISFI'@;
put 'OEhUeH1fQjBwazw9OjREeUkxQyUwOWtgR2Z8e10lOUd2KUkxXypDcUNROEAsQHteZyZTPHA3N3o5JGROQlFuZks4ZCQ+KUZsN2FPYWBeYV80PmIxVzlwc3xJYV9FekNQdVl+UGghOX1lTjtsKFFjQEgxLiV2JD5IITlQWitRbzVlfEBuXmdEWWFReCE0LGRiZ21SZVJuS2tRekRUUCRXc3JAOjAi'@;
put 'LE4oT3IvJkkwSVF6YWhgcmZqYE88QT5ifjY8ZHwuQEUvZCxXOUZ9TEo7andeMDV5bSwlWG00UEpHKCVIX0JsSF87bnopSz43M3kwMTtaOU9nQHBQYCxkMzZjJE9lNSRtWkVnUnt1cyJyNT9gWVdyNT9iYVsrUTQxNntHa3E3ciNzNT9zLDx6KHFBYEhRQm55ZTJiQz51IUElNHE1SnxZWiw1K2Vz'@;
put 'cTk6allaWD08RSIsXWllfFRKLmQmOFA7K3t+OWYqKjszVEJ2SEA0SmhAYFk3O149WUAqcik9MVRycFgmbiFxfVFgdXlCaEdiUkNXKjF5Zn5PZUtrNixPMDROaiRtfig/ZWpQQGV9Z3w1S3h5JngmeCZ4NFU5fDQpIXFLfkJRcX0zeU16dkdkKzZfU0wucl5vaT9AKzwvfWZZcWVeZG87OH5fcyVL'@;
put 'ejwvPER8JF1JRmV5WWBdQy5tYHMldyxUKD56c2YhU31wSmtiWkhRO2xPWkk5ZHFrel9bTWVMJTdsbXtzJW55W1JwdnxvMV1fYygpSE1zOTUzbCoiXzE/fG9ISTg1aklHfiYwZTFyYF41SXx3K3BrRFZ+ZyRpJVI3O04kbTElbX0zVTxEJVlWJnIzZjRNZmhtV1glVX0xSHk5VHJUeWAmeixqVF0l'@;
put 'TXoocXI8QF56SS88SCY7S0coZH1yKjp6cWYkMD9dZTFLaG14TyhAX14vaDFLaCNaX1leW3NtaywrOHk7VD9zTiJQZCY4cUlfWlBfUiwyTF4xP3NOZ045XmQ+KStbIVBndExQZyw5SFE/X3csdVN7ZkIjXys1OF8rN3s+PTFxXTtSRS5WYmdoPE5lMlk7fU0hYSYsYUJ4cEpIbiNzN204QEBSRk83'@;
put 'L3lAQHRjT3lmY1AsZXlmY1BMKlksLDhBSS9uJW00UDJZXSRNKEVKd21VSWVnPElhJCRSWSVWaXlte142XlAleWZOa09nejJGJCgqRjJESXBmJVJZJX0/YV4wcjM2QEgmVTYhcHskKWFeI2FrLlAoVFAzY0s4ay55MnI2QTI0TTFHYk1ZVjtsJVFQWj89cXklJWwkJmVWWlZiZXN4KU96Xi5ASzA/'@;
put 'OFBYJTBsQF17SX1oKD9PayROSHE7bGNAUG1hLEpvRWdBJlVNUFp8PVopOSFyRzBlOCtNISspOFpbcCk/flVrR2FOT1pWRE92MSlFRmVqMSxlS3BAPWY4UmI2UnlVb2YhPDFOZER5VW9ue3BOND04Ui5qM016ZyxWQCtPMThSLmpUZyJORyQqbSh6Nlg0cTxPKHo7VT9afGRieSFhJiEiOTtJYHVX'@;
put 'VmJgeGdMdE0lJilJLFA9NmVXKzErL01kUFNlIk4mcjlQUHxKJEU0NUpCYVA/QDFBMHFmaVA8QDcueTx3Vj9lWSZAX2QpW1Z+JHg4ezosM10hUjA5QEZmTTIve1pRJmRMJSl9TjFePTNhNnFhLms4Qmg1fElUd0pXelBfLzttYXJ6XzZpYGt7bWBvPlo8dTl4KEVZbix2Qi9HUGRBJm9CXSUsc3pz'@;
put 'UHE0TlpNSElCcUg6SVBLVE4mOCZSZSY8QSZ4Zm4sR1FfZGJvYWoxaUElTDI0eXQkXS92YUtbLDVgbmhlZCs1ZjlxTm9sNkxkQ3A3UEZJUnldYT43WSRYWiJ1UT84OHdSZThAKzArWSMwK0xrK2VtUXdlPmlZZ0EmbzxBbkNgIX0oMV0hOiVkJmVoK0pzM3YsQ19YPVpQSiZpYiFzQSZueSw7Jit5'@;
put 'KXwudSRXYE9nSl87eCJIJnJfKlJfNjApJSoyVyZAY0QmVSVCfCYvWSRrWWFuI0owPyZRKz9AeDohd1BCPk4sL15LcVtLPFI2LEJ8eiFaQE42bFJZczV8byx+JXYpI1FLdmEsMmhdcDFWSTxMZn40ISU+SHRRIzpkLHAwellsVGM3YixjP2ZvRjFEPkk5ZE5WbkBFcGFrfXpoRj1iLCs9X1o3O1Js'@;
put 'IkBNKGE/XVpoVC8oQnxQJiFJYF0wPmw3KXU7XiJUQklNR2VnNXxYMS4+WDEqJTtAIzJhSyJQQlc0bU14MD42NXsja1k7a2whMnsxQTRaJjhFP1RtM19MSn1wTV5oXixhR1NTRXs7SF9FeDp+fVM0bUokZWpgKzdQMypuaEBfcHlvZjFtdXhmbkU/SWBkcVZtJW04K0YxMmpYJlpSdztoMCw9Tlk3'@;
put 'OzdxUm15OVUqMCtad3U5RXxFbWZIe1o3OzZfJE9kfX57YT9EPSV+ZXNleGQkbHlaMXxzMjleJjNoSzk6ajB+UGhtWUhoMyk5KkFNdClsfjdHMGk+ZV82NiptSHBxRzpHXzZ3UV5RQmYsdSpRJWw3PHdPJjl7WlA0TklQPHJDQCk/XitiLF4rWWFtajp6YjlgYzQ3cTJAX29HKS9QTmBpblBMKSFA'@;
put 'U2t3ZmRUN1QjZW9Oe0lpLDlANjhXeVRtUjZ7VUlLdllJPlswZm0xb2RvOyE3IUFJKzVEOWNAW2U/MXZaNE9namgscjd7YWgsNztfMS5fck53eGNoQDslMFppMjluUGEsN3VZPW8jYURhUCFqSjVtUClOLjlMXkdROnJPMUtoL0BlfGpQc3hhUGdSU0ZBfGtZI0t4RDpYXWNrMTVEOltOQDpAQF5h'@;
put 'QCRwRHF3XllUZTN3YUNeLDxwODx4YGlmSzwhTEZrO0o4LlgkNHMrbF17KEVgRGQ3NyQpOmpmclRGe1llPEV5Kmk+JXUsOWxDJlZgZEtKPnhUN2omKCVIck01dUExSCsuI0U/XVplZlR7USY0OGYuM04qYSN7TnZGV3lgbzppNiVPYjBMKTklKT94JDldUzhwSyNwMWhqXntLaE0je3A3Y29Oa28h'@;
put 'QzlwSDIvczkua2JfJHBiWFV5Vn1IJXtrNXFtN0koaWwpSmNIPVU3LGAzQzI6enV6MHFlO3RUfCVGekZIQmRBOmFvJHtwdyh5ciM6ekxwMCVvTmJYJWJZJjZoX2ZZJlhDIWooMjh1a0swYEoqaFpPWFR5WDZzdyIlZk0oZU8mfXtPe11eOzZoKUJiMVo1bWtQMyVSLlsvclp3UnYpLzs9MUk0JHUq'@;
put 'dW4zL1tAK3YwRj0xME16LF5AK3YwRWBhalArIz16WjklKE1qXjtkT1FpfTJ1bUt3K04hQ2M+diU1OnB2IyMyRFYrPEEuJFM3XmVzYWp6YFUwQUUvKyFhdTo9M0xKMCxeZj9lKk03TDR2YT49eUdAUURtWm0pXiVIJFo5OzxIK1NnXmUsbCQ8ejFLW3QkQC85ajZSV3pgejxpU2JpWjVtLzl1cTxW'@;
put 'UkQ9VStJfkdsXiNyVDV4UGU7LFNPXlU8bExRRD4lZ2A2PH01YGImdiRNJit3Ujx5ciNKV29KUHclNSI1cixoXXhaSUp6PDklLmQsMGokWWAlNSFMVklaVz9tLHFuenMmdmc8ciViP2U1QFUxfSRWYDY4MGpQc0xXPzY4bC85MVV5PDckYTJwS045SFBncD5yKyVITVBtUjBaJEo9T2cwQFlmQzdk'@;
put 'WXJZZk5WUEtQZFlpXnA8QXBwQFhheW1JZFR6SSQ/VjV3M2RsZlR4W1J5VmBnb3FkfSlnb3FRUE4rKFYhTko1ZFl4bS5yUlc/NkMvQCEvajZSa3B7ODd6P2E0cWpzXS5EXSVMNSt0WWozUTtzOl1VaVR7UCs9ezZVcihWfVBOKz8mMDA7ZHpZNyxBYFZ6OnBkdztkaCxMeiQ5ZjFDOiNaOmVPZnE+'@;
put 'dUhYTWEsTToqO3BofGt9R1VeLyUpeCs4TTlOSVshXj0xSV8hXj97d01vOX1oNzRqI1k3SjBsMmNVZXNha0h9P1M4ZFlfJVZmNEdeTkNbJF1OOykjWTBdVkE+aGxPMW5mSTlVLGdmfjhYNmZyKGFVYEtFejBSVz82c2w5UUpsVVAvOnhUeVNfJXRAcDB+XnwxYS43VnpDaT0wNzxZM1ZOJjolOUA2'@;
put 'NURSQTRgYlBFLGY2XnM6bWNffHV5IV09VUgpOnp9WjRiZCQvO3pPYjBIQG1eIW89S253SUp5ZmlofVZTJUFJVWAzOG1eKnIucjlzM213PSY/RHFNVXkhSWhtcGpQbGtnd1ImcU0uNV86WSZ2WnB8a3JqUDEsaVRAKXYwc2ZrJDh2U1YsP3BqIUolISNKa31QblFGPUd6Z1I7PiZIeHhYfVNJPkhn'@;
put 'Z2pkJEhUQllIJVVWay5lczFRWjA+cmVwd31JQDR7Q3FbIUo+WT9yPj5XYXNVVk45ZGA2L0xeRW55KjVfQCE4UztsZHEvbTVnY1ZNUUI+Qk1ocW5zOnJNUF5LcHZFL09tMylwPE5ANkBoJFUudDlwRldEYnM8UyF4ZUlkeilNRDlAXmZgXj0/WWpUY1A5dk8oVkpWa0YuOyFQa2NAbyEvezFobDhh'@;
put 'VGJxX1ZdZVtuZV4wMDFLUFZicjhfI2piRSJ2bWk7WCh2YUZnVmVxY3I4X0AhT3ZyKTNLUSYkcWhge1V+ODg3eCNTK1ZsLlF6VT1iOUNscTIrJnpiJlo8UCtXXUZ6ejBgdz0hLzxkcmssZnspS3okQThGejx6JHhzek0oZ118QExdKHE5d3dyUz45aVszLDE9T2ZWUnp5UiRkKHEweV1sak54KCth'@;
put 'Skoqb1ZIbyo/KnpaKXptZkk5WTp2WmJyN3FpbyFKRHhNYjNLVGBHQG8kVV4lfFJmb2NWYUs4c28wUmtSXW4+VEV8JVZWKlloW2J4YnJEV3BWPVZ2YSwjanZeYTw2M3VaQEtTLGFAWDxkZ0xqTDE7SC4xW190PHtLfnVPKD5WdVE2MEZfOFZTa0NQXypSJiVZVStMUUJoMWpkcSF8Lj9NNjslWkNO'@;
put 'K1IhdVEjOClyMSRbZSgwMFRKfURxZThuPHtsSTxIX0VnYyx5eX09MCtGenowWiZAckJZYmdwfERxdHlzTkZldCx4JGZ8b2YjSC5qditJWEQld1AkVlU9R28xX3s/Zk1JUCZCRG07bDV7XT0iaHUkWGhPXih4Z1ZUfXkyTWpgK0V6RXhPXjhtbCQyaCNTO2xRJVc9QkxkJCZARCFqczI9WTlKJDc4'@;
put 'bkguRlhNSEAxMGRgYmUwIShkMXlOWVFlOXxTSWJNeGdpP0JgWmpyeTA5Z3dCSygpQkA2bj9tckAxPz9tMlBuMFUxeSEsPyF9PiF1M0VvZTt+bS41PXp9angrX15LalloNSxZZjo9dGAkakFWfHtYVFkmbU1FL1Z6WiZlamk/Vl5Hbm8wYTlJTFd2e143VjhHNUBaK3clPHpreGVJPkBuIUA9NU1Y'@;
put 'cyRfQCtySmQkSWg9RDUsfXBtLzJ7e2tJOH5SLDxaODUpejBhUThsXXVbd01nZWFVSygpVzErITddZnE3cWNURiMuSj5AcyZUJU9lKT9GZi9uIjlAezxGNGxoUElyVVQmMEptSFdRJjdnYiYsPztSVnJ5KjFJdj1EeC5aYD0wbVJnVWZfWypqSElCX2JRTSszZ0FFRnklcVkxX2p7XnheZjxac08m'@;
put 'OTNdUUhsRCZsKlZ3IW4re3Zabz5xa3hUMl9XTTAsaDFHajJeSl84X0AheVFBJWtweWUwPV1aOSYkOXl1eGgvPjRYdCgvcHdQZnNWZVZgVD1FZz5pZzFyUXh1REl8STgsQXEhSks5JnJ5bFlnfm5VVH0lQTBOMWIpKlNESW57Om0hLHUkW2VwQCs/OiUjXzVqfnB3UGAhLnB3UDBwSEl4PDA7fSRm'@;
put 'JnpweXB8bVtlOCxmd2RvL1FkNm9teTJDQHIqbWZlTkU9aiRbTy45eyNUZld+MjA2PXN6YCE0VUVgM2hVbXJAVSh7aWd0UWFVKGAxZSxjUiNWWlBZKkdkIk42MyJ4Mj0/fSVqVWElLClxOjkhLDBoT2UlfDdHYVFFbF8uVCZ7ZFpReCFgWVloL2prOG1re153bVF9Wk5JckprQl9Qck1oV3prXUFd'@;
put 'I3FISyMpd1JTZVIueCwobT4xIl53K2k4IywxaDFAazhhMTA5ZnJiJnVxZURrXmxrLytEbiEmdiU8ekpLK2poTTNndT04USptNj14aGcxMykmeEV8UV4+QDcsTTFJaFkmQTBGeVBZb3E4LDdfWSZ9c0IuJHxzeGBUcHZEK0hodW80cHM5Pk9nTllWaGBjdWhSZWpkP1phT3NhOXI8KlFpdiQsZWAm'@;
put 'UEg8UFkkK0t6LFE7fVteOXU3MChZRl87VVRsTSVXczZ+fThnV0AlSTBWNDNtYSN8Zzc8TU45LkpQWlM5X3V8YToyPjFIdTkiLyg8SD0vcEkxNzJFVD5uYiE0amExI1JXejRLOVE6WXd9OTlRJm5TO1p9MC5kNG1nPyk7fWY0OH01UShiPyZ4SFAvU09zKyUrUFdfQF5wdkhZdFRteDJwVj0lam53'@;
put 'LG0vTCJIdilIeDUrKCEpPU0he18jez94I3tTUWk4JmxDOVlzV0BFR2V5ZUlRJjtWOFZCa31WWF43T0FyfFooYD1NfFNGLjl6ezZAI3BTRWJ4cUFvQ3NHYEFAZDkjIVgxZndYMUMjfW5aZU5uNWFDYEArK3wzbHcsMm9YXXsmcVh+bThwcmg6LmRgJVJpVmFiblJabUZ8LjB+NjJxaDp0X3BqZFBN'@;
put 'QCh3TE11WSo3aFlBb3tfbCNmKkI6IWlVLDdWdEVUeHxOWj0iJTh9bjNjZ302YyVlOHdQMFFkPmYsImdIaFBoW0BePSEhckUvMm48OF8lallyPV1ucCYlPmdvOWI/WW47W3gsUz18Xlk1eGUsOGdJX1BYc3VKOXs1fG0kTDp7YWhUQy54OXMkI0hWPHdfcGo0cDxWYVF4ITZSbmBPaGFuVzxQaD89'@;
put 'PiY/IWJuKlBRJmBhe0ltYlV3Ll5CYDVUSlk+Z0YsPDJZUTAoPGRPUSYpRXgjQFc9LGFCeGZmNHVDeFZgVm5lUGhqM2hsalA9TTE+TzhwfiVMdG1EP2dqTkNFLDIyPltwMSxhbmVzbTtMaDolJHhnZC5dQFM0bXxtSTkjMiIlfV9+MHk5QmojcX4wKSV+XnhlSzhRKGFnZWFTQFNJSDE2PXUke19v'@;
put 'IT59bnAiSHxtalByKmplSj5FcWRQU2VvXk47YVFYQ1diTm4rSjRqVm4/bXRxQDtSRSg4byRycTsyU2d9Xl9tSGhkJGVdPSF1UUE+dyQhSjwyMjAuXlklej40PH17SCtzKkdyeyxkQClpN1RAcnNOZnM8cnYjU1BibzhyNTUwWTpjNClVMVlvMi9ePUAqQV03d34sRjF9NSpPK200ZV17UV5pMCh3'@;
put 'Wyx8MFVLRnFVaXI6cjBoVk5VS1JKWVErOFFneTxiXW9NQFAlQn07Pi80ZUBnLnBrWEYkL11oKFpPaTUpLkIqVVQvZ3pBe3dqfWsmNSovbj9IcSN0WXYsd0FzQUlrcFI9dz0uYTVvKm1xemYldCZfM0oqdyRFbmZzRlM9LG01Wnk8KCl2OWJVSFQydTJiQUcxOmkxWyVYemdGKlZ4fFVkNVtjSGJa'@;
put 'elBGMGJnM3RUIVdtVUlSVDYvV1dHMFAjNkhZaFR6bktjQD5OVnpNOHgmXnExLEwjWzJTTjNjRzFQMi9UUVZQJT8kNTJtZkxEIzhpenBdeWYjMFVLeyFbXyRlKmhFfG1wZGJZeHo1PyltXkBEMV9LIk1QVlEjPEE+Y2JUKmR9MkRvaFRHIl5jfVlhbHhkR2ttKyYpTH07aDhfRW0sN3coSz9Ybnp2'@;
put 'SygsdlBXPSo5d003NC5OX3ZiISwxSTNCQG01QjhXPkUsWG8wIW1HWkswK1V+OHBiJDRmdSFaPnVmY1ZdfiUjRzRMLGFKKltOZFo5TT9QXk9XOSNfLy9XVlFANEBCUG90aEc9W2k3Kmg2MD1gTkNsdFBRLn0/bTFoLzlqVW1fZCtyKGA5LHZiYG9sZHNGRCN+Z3F7figiX2VLflc1bFc8QnQobys9'@;
put 'MUIiWzV+WmI5NDhmfClabWxFXVQkODAvaGcsYUFgdWQ4MUM/MFBGOUw+UnRQZksrZkhvKS5FIVZLWEJWN25Vdk1uJFFaKn4yP1NNZmBbZV1+PXFOLkdMcX5tem40YVpgVUF0MT1HTD9+cn0jVEljLihYPi9LQXRWRCt9WHpdfmtwc3wuQn59e15oKz1+ZXhWTFhnOyRHSihaamlwVmd+MihTRSVA'@;
put 'dzlrfih1Zm50TUt6R0s7aGU/dH1ybXc/VHMmWjwhMjA2Uj4ofkJ5MzpJOSU9I0koQ0JITlRJMytAUyQwWCRzdXsmX2djYT16KjBbTS4leTlgdyVZLzN9VlJ6RE92OC5+LF09Mjt9V3pzKFN0IyQ1fHlodWB1KG9QNH1wWHc/cSU6d2RuNGw3Q307UnlUfH0qJX52YSk+a0BQUWxzakkiSm1+Vnly'@;
put 'KEleUFFiKHA4M1E8fF51WlslXUltcFQieTE9Mis5X1d+ezRJTyJBNGJbRm1NUU9rN2RjWXd3RnNXWFdjcWpPZGNXcXpESFVZbU5WZC9gQ3U+MTt7T3puUkZLPCh5N0YvQloqeFc3QyZveWRZKXdid1cqZmtSJn5nOTx8bntlc0ldPHNqWXhbdTAjZ1s+KmVifGg2VFdBMUome0BgZVRoWmBURWlz'@;
put 'IlAsbyYqZzkzfF5TXX5RJUZxVzBAQlVTLy8kJTJ9bXAmc2Btfn5bO1g0fVFPJVdjTXZhTjdlbSVmfCkxPVgxQmQwTVc7QkIiLnQiKzZ9O2QzaDFUO1oubWQjZnEiSmtNJHM/W3p5PE8uY1Z+aGxvV0UwJHRyXm9Genw9KXF+K3VjX0hIejBgZXs3QGJnI1IuenMhRS59aTI2cyN4S2NdWko0emBA'@;
put 'ZGZtKzc7YCF1aHxhQiN+IVBgfnlqWiMzREV4Q21pOV55STU4WWFATEFuNWxTL1grJDxpdih+RjcrRXkobllMU2VGQTRuZ1lpNCFtPlE/L2o1dGs1WiQvbWlsVHM6b3JUfHY+XyUrfXN4JmBVWVA0T3hqNXV4YWtqWnhiXjk5X25gJGV8JHdZRWc1Ujt2SUEqa3Ira0U9MGBoQER+V1NANFczZEBm'@;
put 'RjhlKTM0fnpoMlIqe0s6L3NWME0uWnhZVFhnfiNgI2BfR0BgcjNVfl8yY1dfJW1WXyVzdkoyXTVZTUtDPSZiZGRHeDhJflJASHJYdEhoN2RzL2lQJG51X0dyKUNyOnp9e2IhSlNpKmF5YzxWMGkzZDhZNmJ2N216Q3UwcEx6JlQ6OFcwb0JraXx6Ri8rPWlfUERCfkdyUzRNe3g1VkZRSk4vbHg7'@;
put 'azBIQnlrXyM0Ljk0Tks/KDYwQGkiV0UyTCImWzNxQE1WeihCIkxGP0dLckBrNGkxKW5wWzR+InMoenNbfnA5eWJFKl1kbG8+dSwjPSxYWGtjNk1PaGxvXVYuejR4MS9OVToxVCVAUDlRKCt7MDsjUnA4WF1NZV1kSXlDTixoWSsqKkZ9SW9SKjZeeEN6LHhlLDcjRzY7aylIZ1JzYGdVO2hDXWxn'@;
put 'fkIzOGhWcyo9LG5rdiYkd0FpMEhuaygxWklOenxSQCxZdylXalYzLiQzMWl5RUUyYGpsMXJie1d9UkdNey9PaVRGPU5YPSR2cUUoMWpLTTZadHZHRXpFQUlYfVJuQmZbXV4oT1Qyayk0ZE8rTjArbTBKeS9Xd0kwREIpZnAqfEp+WW5oIl9mME1ZJXI/b3VDWzZlUXFPM1FOU3drO0wiSSQzXX50'@;
put 'eDpVSj80anxSTUtZOTRldng+Ln5JPF5MTCpZdzUqWWVQZC5DWztudF97JGRWVSNuKGhIVzsyP0M+cEJET2o1QHJeakMyb1tzU0wubVNEX05TTC5HNXRnK09QUzw+RUBPS2xkOjZTYWwwNi5ZSCU3VGdRZ25VbT11Vz11UixANHk0ZExCUzplI09DRlFvQko7aG47b3crJH5UQUJuSiVsVDNjIz5v'@;
put 'SHU/SjE0MnR6SW5KJWx7dXRnYVNSb3lYYjBJUnBLdHpvTEc/ISlJVGNVZ1RtbjRMUFlNKWxVby5adENyNENaQlNLR09rL1o0IzBMd28uMi4qPXRCNkF4KmUlNltlL0N0eEdaQlVrZFs3aWhkaEhqZzE0OHRWXjJXKyF4PTNudnVuRThFQ3lYLzdAUFtVNm5NTXdiMzJTN29PJXcrUENsTDM7TSU4'@;
put 'NCI0X3QrLklyMDMsTzY/RkpHYltBe0RnLlhASFhTVWYsNEReJSUkcFV9QkZHQ2t7eHFuSnUhZl9PVWtOYyxiSSl7KkdKXSJwdEs2XSJ3IVJdPjIrJE8veFUqQnNDcWJ8KE1EJldNd3B0LkBLUyVSUWEyaj46QUAwZEJ5QUE/IkYxQUBqZzJXP01ETWM2YyQ8XVUzST8jQlh5SEVVWWhRYjlubmoi'@;
put 'S0xgdDZpJWdGSEBKekM/Tmckb0FZQy9gbm51VXxVcD5bP0ZEdlkreit6TCl4PVdVV3QoQkR4RUVBNmckY3R5V00sZiIzSSpicj9DeVcveW5sTl5We1okXlVjOlczMDtRWFF7NnMreyosV3hDXXAwLm5naDRBW0R2VlB4U0RNMDIiSW4mOjZlWkB3XjlBSSRjKDNGdjk8PW9AMlZ1Z3hLRCQ0Qk47'@;
put 'b1M3L1Q/L0ZNOjZadjlnPGZffG5iTnRmRS9OX0ViNDcvfTlQYyJ5VUZKOSFtb25PMDtJUytUQzM1fTR7dCNCYH13QHo9fj4mdVVDOEtue0dFej1iQFEiPWBSSXtVajowYnt5eEciQkJgMFV3Z2pjISsjQ3lJflY4Ull6cC4sPkhCSEZOMUslMjQlRy5ULGl7e0pvQ1tzXXddZE4rRDlgJmdoTFdo'@;
put 'ZmRFQGQjd25vb2tRRzFZemFbcVU6eWdKcGM6NiJZOFg+LF5hZGp1TU8jaGtqb1MsdFlVWyl1dGJ8VjhvPVRCQjdla25jPzxJNVp9TUZLRT9mQkhGVltuYnEvRUxuT2EzO0lFUSkpfk1ESz5UfChCVXwodEFzbWBwQ2BvYmUvc246RXdhbnYxeGQjWjR5WHIpVGFmSEg3IS5IVTRCM0NqZlAzI1Rn'@;
put 'dDpBe0lrMEcwUi9GK0Z5bz1Bams9VSwsT01VMG54SkBHNy5RY1dYS057RHtVSEhZQHJaX0o4Unp3TG9PIkdBT0F9VUYlYnR0YiNkXlNERlBvZXpsIkklaj9DS1RVbW92M2VvL0RgUC89SS5eOkcwI1t2VylCKEdJTm9XdSFlJVhrVzNhemNGMlRxSzk+MU5GRzJhR091Kzh2ZCJIa09nZk1RUjgk'@;
put 'PDw4Zm86eG5MdTBDQWVuUXBSRls9Snw+cUMsQS5nODxNT3k0az9+ZGEzW2QmNkczP3R3Q2VpUEklZ1BwJSRQWGxDSkV0aDRzOjZjMnt4PjJNdUtBMVBNXzVaVGM/eXtIIk9GUGlXWWs3a3BASlp9PSFwNnFnfTJTbDpSQF9XNENbZChLLl5XL2l0eWN5VUJfcUM9dn1NZCMkazhuL2ghaytwczNA'@;
put 'XnMrZkh2al0/O1BJSiwkR3RTRFA7WlE8VFR0RXV4R0oxcy5VL010REIqZFZoVDNAVDsiRDQ/TXR6XXFPL2A2dyg+Rk9FITIxW3pXUEFTeE1GXlQ5REwjXzJFImlZLlguWGJVWXc5MGgkT09db1JAa0N+MH08W3Avb20ifUozLF1UfFZPMTtec25WdXdPTVIua2spd0RxJUwpdHdANiZrJS45bnxw'@;
put 'Wiw+dF8wfXJbenZiSCVAUHNSOHo7UHoucW51VXxBKlQ7V1d2TUZVfSRnR08+WzRDQ0J+ZzQ7cy4+PkZYME8wYTpgWW83VWpGIzRIYl1HeGIrKzxEOUEraSRnRyUmV25NYUh3bzg8bW5FIjRdQkolJWMyUDJPL0osNytEOnF9I2UyazBXPzBCR01EdmJaS08vYXRwTy9gUUBycEMuRFMyPFlRYWNk'@;
put 'N2tAS08jSWRVLl49SmtEYlU4eH1NRkh2biVVWkBaQjh4KkI7bz1OL1RsKStKWH57V35oN2BpPU8zLj5BRUl0U0Qoalh6UjlkNGx0fTo4RHR3TC85VWcuYEUjazM0anV3Q0BzekIsNihbWzZANihbMzQzM3EiJURJV349YiNjLz1bMCglQTJNQlMwPFFTYjRHdTVET0UjZGgjVm9idVd3cVlvWk9M'@;
put 'ZFt7e25VW1RkSGNLKn5WKjZgUG9CMGRLelQvKi9Ad2daQGkwN3dGNiYmIm5vQzBDTyRuJmo6aT1CRGFCQTR9TSVOJSRnYjdwYXVIN2grKENDKV1UTyR9NExSdGRSWiRPVmkwKFRdRmFGSFZjaWt1a2I2T0pMb1tAbUBzVV17Yzk6PjJBaUorWSpOSm9wTHxBOTBlRzxVfDBqQSE2dzY3ZUtvVSJw'@;
put 'Mltlc0dwVkZVKHlxek86KlpwZntPRHlUb1dYVUpzVU15Pm8wekczQ0QiZ1F2c1Z3ZyVbaEJJSDVCIWU6b3p6bW43W3pYTzc3NEUweSVoPzp1KWRxQCZAPUYwPCNPPG93LDVFTE5zMGJea1U2PDdPeFNgIzxQJFRjMyhdeWdbPkZYflBdIkR1W1BhSFNdYV0oJGBXR0RaTTlWTjEiWWQ/dEYvPFJJ'@;
put 'R30wYS9vNGJNWEdCeVlFcyRnMjpXQGFNZ1osTzssVHJsJUlLWSVJbEk3UDN4KE9CTERKRlpLWDdvQGpYL0tNWHg9a0BfTXU1SzVUSVtSUVFUQERCckVyflJRWzI4NVUxaGhKMWtuRT9HeXNASVlqK0l2PmdWQiUkQVVaa2QvZnxbUXdgMlNDQ2JTVWMiV3F0M1ZJa1IxRko9SjMoNUFISjQueTpZ'@;
put 'LzMvfSw1UX13JU4qNnpXQEJER013fHJ6ZDxUVlhndkJ2aHRWS0N1K09Nb0JbUFY0MiFmVEIqTkxPVU99W2JCLEN+Z0NLK1tFQXtkY1cpSSI1YVE1ZzhkYzR0LCtCSVd+ZF58cyU9KDg3ZGtPM3BANkNdUGlUbWc0bmF9Okk3RzF3R0hLUTJhcC9vWU5ZSjZSKVdGdz5lUlB1JUdvSCpQSWsvamww'@;
put 'biVsbmcpNip0RT9DeFYsN003P1twWylJMT9KJHJZRVFjRT5FaylELE8vUXdmJW1ua1g6Qk1MVFRAa1JjSSxSd31DV2F7e3VDT2M8eTwxe3lOMU9PK2tvL0VVdDB9UjhSTEwkZ0YlQnR9Q3ltamQlZ2A+TUFhSmFtNEV3YXx5QjJxMmE6SGJdemhrKC5FV0BrUjlkL1klWCkhRiNSKjFjOHx4VC95'@;
put 'L3kvQ3RfYTxSRitNTXNqfVpLT2xjYE42ND50ZXdITTJhKCgkbjpFYkdsSTohMm9fMHdnKVsxKFdGVEZkUGBxSUs4PWNAJkFrRFhIJU4uTmRvXUBYNXw0dFgsQ11KP2Z8NyRnQzMkWEdWLnAxXk49JFhNU2UjZTR7NHgzcW8xXkBVVVE4X19XdGAhOjY6aFZbaGs4PDA7KDJ1X3R1TTFrbCs7TzVL'@;
put 'eGlJeEV5Oj4wQzZKO0RsJEtvJkxDUFl6ZUdQb0J2eHhhbVZrcCszdXllbmJTb35Ae0FCRUs5RDNqS2ZIa2dsK2d2LD9kWyNNSFouZENQSlE8bFZLKVs5WCRxZzhsVTFuTVl5Kj9ecDp7MlpYbEdaQkZLaW9hOnxhY1dRSW8lQE1wI3ZucT8lLCksfFczXktTaj15VVV0dERRRjpdVWtmM29MYlN8'@;
put 'UUkyeTpxbnVvfHh2Tis2XnpVQDZ1L3Y2RWIyOURIYi9tb241dClDPkE7bHhnajQiTDZIM3c3byFrKlRVcF9PNkhfI2NVTzd3QCJBcVIiSGd9OUJhbX1NJFQ1KzREKFZ7WisvdkBDLiNDcnI7bEUzPFtCdlF5T2dKUWo5Yy90b10uazNWOl46LnY/dChiRytIVSZ5bjBxMixuQTh2Tn1NJk5uK0Rd'@;
put 'VERxSGQlLzZQLyFCUytqQ05Ucn5nOCwvaSsrWipHKFhqZ102eCgyeDlyRzxmTDp7dj5ZREdreW5Sb3QsRn1bUEFgNWBzLlE/eHBiKndMeWZoLj1tQUIrNjVuUD4sM15uJl4iYmczLiV6cUR0QFpQPVZrRjNMWDZtcFQ6LktVdkA8SVdhaSlHSnMuO2JuM091KHdeZ2hkaWR6bl5iK2JXJWpxbkVr'@;
put 'b1Z7S3tnSFVscy54bk8uWFdANFFnZkhaSTQ3SHc0Wk54RzJqVGMlcnF8Xz5vMENfWXUySHduY1oqP3xyek8zbnYmMjA9JikmYGpEMyM1P3c2Vkc5SkAkcnFzK0BMQDFRYUsxayRDJXEvNlsrb2tdVyJBJU8kY1VrJCFucys4SHBLNV40LkolYitIU219QHpmayQuRnQ8XUxEX3BkJVpbXjYpVCIz'@;
put 'JDMiYml0aXpTVGhYPUVyJCZicFUvKVpBeXZzQFtHWzJ0b1hGOk1gKlNRVVFeanZYejtSUXMuSiVJdkg4YTgoYGxWJSR2bikrYE0xbUV2M143XjFGSmhtdX1FbUdYSjZrJWAlWFFCd18xKStEYDdjODpgaGIyeEBeOUVycj9eIXhrZF1pcnIlM20lN2sqRlBCKFZCMC5KLD9sVjdvaEwlQlZrfjJp'@;
put 'InZkZXB2by5KaihsLlFuLGBaL3xUTVJ4TSZmfVl7VTtgLzZwcmhHM3QhWVYpJDdrZDNVPEJsbj00SyVIVSFFcFJ0fG4za2QvNkdrT3YzUXpgITp5YmQlZC4uVCJLQnlJcll6YDosXjJ7NisrW08pQnBOdSR4LC4mbnE/UEJCQ1FnRiVdKHRBLlMxYmgkaTYlQmtKLzZjODZWdDNtJU0lejwwPUBb'@;
put 'WUNBM1pHRUk6cWRyJENAMzR4fXIsKnh4R0pOU3B2Om9GOnhFfWk5dE55fDwmNixfVFNQO2R4XWs9PVRTLzYvKl9uTiIhWSU6cFpAazk9QFs8dW95ZmRFNWVIS0A5WDlPIzY/Xi5eUW8+ei5Ke1clOlhjQ1g9QEsybms8QGcwaWsuQWFbTTNVSl8yIT1tQTtVSVF4PUc/YD9KSiM2MWJuXVovaiRv'@;
put 'LkdYQzM6VEVbPjpUU3t7dHRRWFlbOk0yVF4/aT5de0RaMnRgYlJuYzg2YFVvPnouSnBSKFYoJi5eUW9tei8yQkdoPXdXJUA+OiNPaVdVcHpbTTMzdzZbJjM7cWxUMS9QYVJTaXlDVWYzdm88V1R2NiFURGtEWGlwZFUsRk9gczN8N00/UV5+Wn1GISFUP35PYEVoTS9dflR9I0E/UWR+Kl12d35+'@;
put 'Ln1lOytlKj4sflp7cF1oNnNXLH5Qe1QpL0NBIjx+en1HN1JxfH5Eflo6M31gfnh8JUtYNCR+eH1mQTV5JH5FcCJ+Il81UyJzan4pKmQrX3NyfFI2QXQ+fl1fcVAoaCJ4ZlpIb0E+Vz4lZGV+MjQySCFvaWNmLyQoNilfPUZ6PG88by40ezxVMDxveVdiP1ImR2NPY3BbNUM/YGpFQSJFflokXSZi'@;
put 'aTErZ2Nwa256eTYiMS5iSU9kdlZFODV0Vz5+Ol9+e0JdQiI2fiRaTz07TWtIV1JlcWlXfjcpWmNYKkFZditecHc6QyF9SkBVJHJPUE8wUyFffT00dUpibXZSeXRXMnw4NXRXLjQ8aHk/KWh8fktiQSJpc0c2YHNdJDpzLlR+czpzcmVfc2lXaDRfczV+YWZCIklje2tQYWszSEg1OGVxenxjYGUv'@;
put 'OH0leW1iS31hUGZnRi9HN0YvSkdkTjFFSm85clJMMyI3emJ2IlNJaCpmQXRTRGMyMmhBSWUkcXBzO2ZxOXhnTSRXVntrOFJ6UShaPkclZnY/U304KDohIUI6OmZZXV44b1VicStienBiUilnOj9XX0w7NGd7PDY5TWUjMztmWzZmQExdNzM9en49JndPZ2cqYV53Kyg9YFR1eXpoalQmZD09KlFw'@;
put 'ajJeIiQ1c1UoZH1KZltPKkAmUHVmcEpMeClZZnA4WXxCWUs1bWEsYT9xa0J8Ol97I0ckIV9JfkBdTFFgQFFePX19YWI2cEh5KFhnIThQUC8rd3FSZmNfQHNPK0lbR1Z3fFRLO2N+JXZQSVZyL100VjZgUUldaDlNJmNtWyZjRkFdP3pOXlBUOSwoXWcyfFdiPHxpTDFrM21ROlg0cExlM0tiejV2'@;
put 'bDFiPnghWTpPVU1XRCVXJmdaVWxAKGoxWyxTXzsxRWBVU15bfUQ4N2llJkc5S0RxUUkofV1VdmYuaU17el92ZnhxNWlOQFMxZmVKI0JiPjZxOl49cj50LyM/Q05eVUdfZW85Sz09I3FXRnZLT15QVF82TjZkQGx3bmdAbC93I2lxOTtkUk1ZV0F6Y3hqVUUjbj91IUJySSV7JCNzNUtqfnZkTStE'@;
put 'b1QuSSslcV9ANHZbLD4sVUY5OVNiUWZNV0hWWmYkK1VGdU43VktAdDxUJGJkaDJfJiNqeWY0IXs5ekhaZ0FXNG1NKHchMV9INWcmZD1UVE47LGYscCklPHR2Z01xLGZjJkxiV05yPlE6UGRPMXdLaDJOJSkvJXpLbG9ORj1lYEIoJUchM2Ewak99P0JzWjZ2JCkkOiVZXzBNWXlOJFNKWXM9O2wq'@;
put 'XiFjPHB3YFk2emEzW1JDMV5TbE16VT1ifit3YngkWSZJK2tHTGIwPkldKT04Pnwrd2IyPiVQMmIiLyEvU00jOiUhWl5sel1TeCw/JWlidyF7VXwxbDF9Z00ha1tyTFl9WnppZjhIfHxmVSI9a106cC9mR3dgenBQQCVRPTZhTnIvNkZ6YTFQZ0JWX20jWnBKfT1eJlM6KSFjJlFFNW1Acjc6UiFn'@;
put 'Ultwb2p3Lzo8LztNISZRTzY8XSNvcX07eFRZeDdGVnE+fCtlUiE/KT1rMm1kKjE+ZW9JMTwzPiNPPEczMWB6PEc2OWtbUTx5Vm9ocF5zQEpbcUAzVmQkOjM6cnchRUkyVkV+e00vaGksdn5JXXNsLlFWbipbaTI9bmZofmlEX3sjLjxNdWM1cyxDYlEpblVSbkBgdCtwa1hsTCVRPTZwajwubXwl'@;
put 'bD1dez9dZDokYFRdd1YjZih0cD5RfGtkMCVPJU1eeCwvI3V5T2clTHopXj13Kms3ckpkJERWMmNBfG5VVnpdNF9kV29VJj06MlIuMWF1R11vU3IpN3Y+a35tYWhYZyRVMkU0VmBdUFpJUm9qQ2YsU3owM3FfWyJPdEAzPTZRSCZLPztpM2J4UmZPejApKl1eaX5jV3dATEwqck9MSDV7bDViL29b'@;
put 'YjFdVjJHJmxPTWVlcys5MUJ2X3BtRyZ5OS9qXj1oUFpibFdJbWVWRiNaLlpWT18xWmV6RjE3TUtfaFNxe2llOGEsLlJiYXJnXS9fTUVmbCJkJnFxe2lnJi5zYUZgLzhAcy8xMGdZNjhqZGk4RFU2KVN2T2JRKkt4UHJnNUB7XjE2JFNaMHNhNjNoczc5OjNGZVtnKHptXWprV048cF08YmFqc08r'@;
put 'KFtySHB7XS9wODZCUWgxR0hWRl1TJmNtVkFrN2g7a0VFVClnJW1vVE5fSGpKPlg6cE5PMUg+XT1kYiIvTDpiZGgmYzZNKGB3PTolSjhhSGdCOzx5ODN8TzUkNU5dKkFgOyRYVDc2W2x8JWwqL2RaP08xdEgmRGBNbilqa3w2Q34wPGprfEthViFbOElZeSN7ak56YFlvUi4iZzpYTzdNKGhiUnBk'@;
put 'UE1ARDFRYjhfQVIhfFlAIiVBOHtkMDcvNjJhWzxiYU9kQiV+TkIuI3EiZHBHSSYvODVCUWhPcjJfNl52SCtRYEkmRjVWOWt4TXUpU31AOEhxNlVBYXIzczs7Lno5XVZjfFdEUyNNcU5yMl9jWGE8Si4mKXN0d2Voc3IwUmtLfEU6IUViOiJvOEA/Und9LDxDbDA9ZmBLUSElTGFZRHkxR3szPWEh'@;
put 'MFA6Zng+MUlFZ2NhRmdzKjtkLzteIT5AX2c6ciFMXzw+cCxmKC89VXAqNUQuO31vVVApWXBwPTRRcSMhMEZ5L3B6e2teTX5efDFlSzlkMmJXbHBvdnZxeGMoNno1c1l3MEdASGkxUExINU42Tll8a1lORFZPbzxOTDpCKCVHXk8vUUYoOnpXZkFlXWVxTiRSeSQiT1FpcjptbC96UGRRaXI6WntA'@;
put 'bGpOSVdCL099flYuLzNdMU4hcWcpTWBdOzFwNWxqI25xX0AzQ1AhYzY1QFhOaEdkXyR1WDJ3Pl1aITFHJixpZiowKnkhV11YSV56THJRYXRdZm9DOVErUmRWe1g1JFBoLEkrVmxZZkloTCRZX0lAXz9bZEk4a1tkYlglR0U3L3gwW2dCNWlgVHpTXWg4VWRocz19XiU0VTM2ZG5OKypQSH1PZ2xL'@;
put 'enNkZXVvKVZtdiw6QCZ2UlMsVV5OfDVjLHNnMU5vdyxfNkAjREliNi41fTozK1VNclFxPT4rNGcqOiFxfSsvTSVRTzZSSDgmPCsrQExSJi5TMHU5JWo3YXtrVSZ4KTg5aXs6WE1xIXF3IVhkWSY3OiFxcGpaMWVsZlZfN0BOKEAzTz1iQ2JLI1p5Sl8wUGQyMjlUVipTUURiUUk+U2d7eTY9JVIu'@;
put 'ZWJPfGk5PiVAQjhvajBhSXNaSztzek9QZHVxV2RLZlQ6UD1wbStaLCg+KWtmSTVgUTdqVnc4dT1saiNAU2J6W25IbVFoJUFoR3xJLjtHanVyQGY1enojOSVFeERvIT87a1p9Tl5bLEM7VmIiLyhxNlJdPWE5bHJDTWttRzk7K3ghNjBDcFNeQmxCJHZndHs/UEpSWD15ME0oaHNge1JrKSVSITEx'@;
put 'TD1dU1dvIiVQbXJ1a1kicHJFeFUyUVR4IV1eJW55UnE0WjRlRj1wazw9RXpzJUIpRT4pa15DNjhiPUN4L3BgIXghQnxZPUgmZnFvVDY8XVVDRWFEfElJVnczQz5WXngsdyFHajQ4bmRYI35rMW1nX3k8cyFYPUhaYVYkbnp7Lj9LaXYpaF0jcUA3JnxtKTZndDwlfmo+RylCYio7fk1HUD5fcj1m'@;
put 'KFN6ak06ZnBmIUsoOVUuOXZ0O3ZhPklzMnc4ZEBFI11ZTHA9PDczeWM1K1loeTNhVmhfTTZUck9xUGBAdX02JkpLOG9qUzIqemFWSVBxcGE7OHcwPVNnPGo4SXFCaCEkcHFLZENdekZeJE8rPHNrez87cCZBZXYlVUdWXmU9emZXTSVRPT9Le3FfKTptWnNzZUs4ayhWJlAkcU1yNmsoUkc7M2xx'@;
put 'O2RJSjtvL2JDXnlieDpjMk5rMmI5XldtXyt6emokfE1INSwse3d2a0FhIXBhLHYwejBQazp6elVeJVdsfjhAI1ZefDB+ckR6djpAYX5rO05vOyMlUi4iIWBNTE17SSg4fUBzZV5OcmhSKCQvVHZkd1JDIjV8TWd5X3Znc0hALDU9PDx6amhkJDp6UiFLOFEoIypHb0E3USglNyNObWtNb2RlPFNs'@;
put 'RDlRZXFgcD9PbDQ2MFkmeWxibn0scWdISzA2UGlmcXhtOzpNbzs4cXgkXyltRyssO2lodHZoYiIvIWpabkcoVT1RXX5QM2NEeC5jYyVnbVhzcU4ydmsxSmtpYFdNOTpEX3ghXSZvV3M6Tn08bSNFOl4lO3xiSjIzbVo2ek1kRHxOKjQpKUFsQ2guWywxdGgiWlJ1IWxUdldyQG1qTkMuPWVfJld1'@;
put 'flpbK0xFUDw6M1IjMjA2MCQ/O2U/UlkhQWwsdTtkKnJ4ZzI5fUxUMl4mTG9LSn1wUHloVkhpTXloVlo8OlNQPD4/b21abipYKTJZRiYxV2BoOEUveiNeb253PFUobSxxWUZaQDZjNSt3fj1eMyUjUlNlWSZOcUQ6Qjc6ZFk4eSErNXY9QXlqOVQ9Uzx4N0pfbTJ5VmQhNi9OMWJlWCVoZkN+aWhS'@;
put 'fSVPaSxnKHBHcTh5M2RxN3FhOz10aT8wWj4xTDp5JHgjPGZHY3V6MEsoVllQRD50Yk9fUFRCdlk9e1d7Z3N2R1ZCVmdhT3EvZl82WDZzTHRKdHxlc2hFKD0kOHJ6IiVvLGJnWUZNVyJESzsyMFk/WyhDK2UoRUAqamZwTFlrYmtRaCEuXlUxNDhCPl1ifjZ4RzF1Sl9eZnhidlE9Yk1aTGVfWkpb'@;
put 'VHFsT04+LDtBfGYmUUo5USQyYUszWWQmc05INGVOXkJrMTA9bDIiJW13OiFxeFtSUi5tS2ptXWVgXiZsSnp3LGx5X1ZwfWQ3fW5PK182Sl9eZjgzPEdmVnovSjVSXkZMdTk8U2xxWmRdWkklPkIvXTkmSyQ5LztyWiRJNHJORmVPPCQrWDFLaCxaYV9IKFtuRyZpJmhWd3E3XkpGci8+cGRfRWtU'@;
put 'XkJ2ZVZhelUuX15kUCQyPDtHb2xJWVZ3cWs1VGRDPisweTNYZHZTITFqb3VLITNwLEM7PCFbSVEmRDJOUE8odlE9Yit9aDs0VTRtQ1tfdUFuWm5wQCI1WyxxOy5KMmdvODp4MTAxaCNxZTtgdFslfmosJVgxTSxXbzU4ZnU8YjBsP29dXnw1Mn1QaGhpMCtxaD1pbCRYPW1Nb0opakk/JGo1OnRs'@;
put 'MXx8bFptVm9lRGk7IXEjJV1gek1hemg8alJQZz9lck1FMUlifEBnfCxpZFRkTjBMLC5wOEVqY1Jmb0dWZ3tpeXdxczp+ezVtLzlJSyZ8RF5TLnFNISV1LDx3W2c2LHk8cyFESStwVG0yTmplQFpZeT0hcVRjQGNLbllkeTVLXjRWNmsoPiwseC9iV1BPKHsxK0BxaF88K2xJazFHYG9NcShxK216'@;
put 'MmgoPixgOjVQbF54cEphfns3fDNhM3FyR3BQcT58Tz1ieT5gQClEOXplUkZlRU1LeERvSVJ4UTJRPWI/b152KHBNeWhWak9CdkpfIVNIKG0sW218Wz1qcjp1b3IpO2Q5Xk8/fk1FUktaL3dgJkVxVm5xbW84R25zPkArL1VaKGd7P20sTWU4MiV0VXtZeyRFeSRyKkBMMVlaeGYwKihZTUhkMjsw'@;
put 'W0F5JHA+TD5RUFI7TXFEcWRxJiUwVFcyKDUvMHAsPXlYSSMpYCY3UmBATD5SIXJeTjtBeGhsb21rUDdAND5MPi5lSTkkXU0rLC58UFpiKz95SUghMj40ZW8wUiE9emJoaGVNZ2gjfF5bbkFIaThBJikvSG45IyNIXz9NeDEkbDEmcHhlYzswKiFqSTk1UHxAMko0bHRySztKTXE5ZV1BXTJANSxE'@;
put 'ZyV6fXBmcjZsLGQ5QCxpYW5FSS9mYGc4QGpSXWUwcE0oISpvZi9RZl84XTtrQTJyYCgjKH1HMWhiMCp1S2p7NWFbKUpjSDR9UHwwLylmeWhWZio3XiR9WkRzcEhxQUZGXzZheygjQFQrcWs7ZyM0PGpkJGE6SDpVMSFfVVNkQC9uMDtgR05xM3p5M35wNHBISWc/P1lbcDM+MnBLKCQhdFRaJHwj'@;
put 'S3FNaHM9PWtRRWk7YGkuaUBLR3xCfko7NGl1OUJAKGVSPmZ7USVQJkZiLDhZJFZgY0tlKC5zRz5iOWtdNk9HWClacywmeElnfCEhaixpTjZSZml2fFBJK2IpWntCT05sTXN7WnxASCYjTHVZWihsb18qTXpiMTojfTpwdil6JGp6c1pLeiROeXI6Q244M3Q7Q25eaTJiKlZ6Ty9obT82OENmTHBP'@;
put 'NkMoNUdZajhASUtGUzRORWpMcEUoQFJnZVJ7V2ZfPW88ZWA6WCEsflA9YT07cmU/PU5gemVmZioyaTFfODJscTBPaHZTPm4oOG5eMG1aNyhva3k5eDYhVDI6cnVsfFtFPmExMWYvanByKFNQPGd8WHkvOio7UHBDOVBadU5Oez95aWE1bXteU3txVD1ibnMybHdPMnpGNGtiJikrYm5gcXhbJXdj'@;
put 'SmFXI2QkJDBObzUkcjN4ZWU7WF1EbGhQQlsyP0BsXzZGNk42e3owSyxtUXIxcFA1aWAkWVlxTWhZXX1aOG56ZVAlKV05QD9STXN0T086WjlZPyNxJlJEUGsqRHwrcHRLXiosOTlLRHFUZyRVaF5OOzteYnZzSjBqI1lmZCRiQmFgYSZ2WGR1LC8rNnsyWX17Pjo3UTVOdU4qNFpIJEgqYn5QSFZP'@;
put 'VVdzdDYuPGtkbCFAK1Z3TGRGOV9dfTtIazhdK0lRMEY6P2ZPbzlRbWRkMksrQCpNVXw2PlhqfTAkWmJvalsmZmwyL1smKl41I24wLzhfXTw7N1EvTk1wKGtaeyM1fGhEKUhYRnVpVTw7Xi5DbDhjQVRIZUNYVntDMihgJDdQLn5oMmJzRGx3YikpJlIzSmp5QHtNMCNQRlIseVZOMVkpTyxkbmUm'@;
put 'ZGw9a096XSZYOihTIzhzOk9hRDJ9R21ZUCVkOkBfKzN3Sy9rL01lNmEwdl42OyMjNT0+aXt6KSosZXpPdlIrcFI1RTs3UXRoODFfXUl8VWQ1JlJkOCMua3heZ1l0YT9tPX0jZDc3P2IkN3gmelFuUypqbWRWeyhqQiZhUlBlN3daSHZ8I2RDMmNAb1RBLGkjYVYyLyFqWzBKOGksWFoxbUohZ19L'@;
put 'NlhXSGpyZy50UjJ1Xy97KmxZVDxmXW9iY01eMVZKNkJiKCpncm9dTl8oPTVfUGA9fWs3YkQoMHhLPX1WKkhrTGRTPjcxUTAhbHdjaUImXTtuNXUpJSI0Mj1lOGY/UyVsdzdRTCtxb30jcmc2Qk4melEuZFFmLl08YWZ3ZnlxKzdRXz9dUys7bWx2fnNyVzkqXjZlNWE1Nk06c1N0U34wcWd1Sl5N'@;
put 'ODs/ZmAsRjFFcF83OjViVEV9O2REfDY9dyopbE8xRWk1Nj0sYFN2U3ZTITE8I0U/O2t5JF03aUR7N2lEKzlONnU5L15fPDtebU1YJC96cnB3Z2lQd2goJUM8RDJyLChtMXFHaztsJkxhLCgpVy5fNmJAfWYvXTdRZVQmbGFyaFVzfFtHKztDTX5dXjZ3PXU7JjlBOSl4d3NCe196WztHKFEmXlk2'@;
put 'TnBUdWh8QF1afElQJmkmdSxlbE5RMzkrOW5AcyxBbyFOZjJHMXIpIl58RiM2LD16blQ4YiF0Zko2anl8dyp1S1IxVlNwQ307TCxBc2QraUM3Tz8hYnw0b0Qla2ZyfUdaMCZAQ1FOXy46JTh3VlNwWzdYQDMocSFOdnw2PEJ5RjgzQDpWTjBMezwhMEgodXl8d1EjZzZPaXM/eDhfRjlUe21EekF4'@;
put 'WjlPLFI9Tl1mcTo5cENrSV8ydiY4UERKcGhMZGtqNmU9UVArYVY1TXpVdWBdNys8Vzo0TkhzY29Wb3V1MmZFVEojZXMiZH4rbTlROkF2UWRqMkwoQXxJIWU2ZyFSZWcoIk9YU2QzY3x7ZHNmeH5+NyF1OTpEfX43cGplMWFndEg+ZlU4L19PRThhOXpoalFkajJle0IocSFmd1lASE19cHJNPyE8'@;
put 'ejhhOlJ2WzJLKnciaV83aURaJE5kQyR6JndNeGEjaTZRUD59WnQkTzFdJFMlNGdCO3hlM2wzWE8xL2Q4K01kfjBmTllnLmplNi4rRyRgd0hATllnbmc8TyoxT0puPG56XytxJEB9Ny9OKHpsbGMhamI8LE55LEBXdypQbXEwIXt8cXpzPVoxUFBRUDUpN0A2YU59ezBZeyNTLnIxZ3UwKCV5OTBL'@;
put 'OzA1am52KFkiUkhRX2FdUl5dNm4yQzJfckZWW2hVZ0tLNW9CZkR6VXg5czlRcSlzYilUO1pfSmQwejFoUyhNVmhgRmpRaFUoOlMrclpxM3YvdzdAbmpaMV09TlFAPUZ4T1g/MTReX2FNVyE4NzZYPVNJOE44JSghOEE1di93YndFTWtKWzp7fHlWc0ArNndxOF1KI2tgY05iN2t5RWVUIU15Xyta'@;
put 'PDRlSXc1OVhaMl5bc2xWaGBDMmhgYkImYGosO0kqYFN5OUN3Kys9QlVPXn5WSSorJiteM2srejwySHBYKV9afjkzKnUzWT5JXlEmSSsrZnVzMmw3YVBwW1JKUUl7P21HIzRlQD8panZSJlhANi9rND43X0x7dVNzellsUV9UXTU2ND80cDVOTXNuQ1RfPDs3UTByZjYmUj44NHEoYSlsPTNJbDUm'@;
put 'VnJye3MpZjZye19dPDs4OWNoMSNGe14mUTpROlBkdXExT0NqI1FuXSk5Ij08OU9MNjh+Uz1ldTJfbFkuJEhTLms3XnBBZCJaIioielcwaTJELjcmITdYe1ZqTl5DaFZVSnxvdXYhJnZgQGU+PkhDantieDFhclppU25RX0F8S0l5ZSlhenQwOmZ2LzxCL0pmUGVQSlNkQytEeTtjOkRxOndzW3pN'@;
put 'TmpUQDRmWjUoYjd7QnBVP2wleVBlITw8dkYqNHArIyVjM0JIZGJMWmEvdHJacmdqeiMjP0ZqR1FBeVcvIz5tX1Nja1hPZTJfeVRia0MwMHtQTUlnWE5KP2AheHp1MTU9WXNvQXZLQH1LZUFLTzl4TG1ySDdMYHx+REVQXjI+Smx8N1NDPzVSTys1Ul1mPWhZIktoKWsjOkN1bzdIR3N6UTsuT2FE'@;
put 'czRpc1BiOVFxYUgob0V3ZylMZlJmWjFCYUw9ZkQuNElNbF5lcCt3KEE6KE57NlZULno9LyRAXWY2Sy5ZWTB0eG40dUlxdWhZZFtdZl5QMGNrWld4PVhDUmF5bXFORUNoKjRTIUlKMUtHeTc9bTZOI04vUzt4RGtRNl93d2tjaVJxT0lmaExmOD5vbkUsITw6ZTdQQ0NSSE9NMHpnPEwrVzVHczFf'@;
put 'MGc+UDdvdTpPRzsoM2BqXkBuRFpsczVOJiF1O1tKOFFEYWRsbnJDc2NuRU41dU5KbUY7ZTJpQ151SDc0NCpURXp1YXUmKlNWTl4kPTAkNDdTU10wa1I4UiQqU35CLGQ4KncuKSNeeWNML2YlUXdsMUpHIjZQZnVXY3ZFJUFoU095OGc9NH1uQlRVPzVyXlBpRUM6XVFtT0Y7WW9xSz9aeDttN2JD'@;
put 'I0tiKXJPRjtuO2U2KHlUemU3YkNiJX1ybGhje0t5X3VDZnEvVWMjRXR6VHE8OChlc1oqdSVnRXc3NHpKYzJYO0I2UTtBNUxGYDE3UEk1ekpVQ0JlMi9TOyoiKWJFYjVZOjomKSJDUzZFOjJdQ04lKUYqWmQpOiVYO1BfRGMjM11mbVpRKz43UCw3eC4wX1F6XmRQO0csW2RdWWhxM1dWb2AoSHQo'@;
put 'Szk/akYmeFI8MzdRamUyd0VGM2FpNEJPcjxVaSt4XypVXlgxb1BWQCJkSGQ4V2pOaHJCIktKWjFvPFdBVyo1b2dCTVBmakZPaXBzPDxffTZGXzRvaHhISXJ7JmlRR2Y8WWRlZzpPVnYsUk1eRkV1cUMkP3k6L05Baz83d1Ysd2gqPWh7fCk4JDpkW0B0dTJMZlBlNiF1TSZMQlpzWWFwbEJHTyVF'@;
put 'NWdCTUIhai83K1JkYXBodDgoYUkyOXYvblp9SjV8X0txZU51JmtEbG8pUk1URjYzQFFWYGZKcytQQiE/TEZ4SHZHO1M2SUckI1NHaSRUZDV5X2g4NzpETkEuLj59RGc/SVlxbH1SRiVTWXhLR0plREBRXlBacWorfD5ycGx3RioxaTJBaD08ZihbYFJodCZ8ZTh1Qj9pOmkjZUA0WUtSLEdKKX0u'@;
put 'RyksLn0/ZE5QUGJoU048U2ZxYC5HeUJPTj54eTE5UzE0cjFobHcxbDJ3byoqQmZJRWM3U0ZLXlt3di9mODZkdmJjKXsyMVJGI0ZxOVFSKnowfjlwYHkxYys0OjN2M2Quen4mSFBSQXk7fXFAKWY3JkJOaSVAcmpmQzdPWnQmTH5Mdy5OY2dKZ0RyTGFkeGZhSmpqVHlyL3tSUGIyYFtSRDh3ZUZ1'@;
put 'e0FOQiN8KDM3PTphMml7aldCNG44WUYqOXQmTzgjUVImM0JTfEpaVTphMmkkR1IySXt+fnI4PnhCMVdYP0khWV1KM09oQTlbcEg/JXFgZ1UrITJZR0YkR09mImBRWUVyQSJROXhic3V9RWsuNlY8ckpwPVlaWFtickkhfCk2N35hYUM1VVJVL2siMFdeUHVpUCxpYSQ3di9BLjJke1hddU5sPWNC'@;
put 'Nk4jQVpJR1BtaU16T3k5dUdqLHMrZCNiPyV3SFRZOkwjV2M1eHNIQEV3R3FxeFZ0VlVKKkZGYUxJWVIrUWdhVkskdn1AaXlnRUdEYHVCNTkoIUkjY3QrLG0+Yy5Sb3VHdHxYPEVfN1RGJHZAc0l5fixZZStPajoqSHYsezd7WysvMkxOY1NReTtNQjdieDQoUzVScDpoNDFFPiUkJGY8IUVPQihT'@;
put 'NiEzbUk1PjJsWnJ1K29QK2MpaEoseFJZLGJzOWxaajY4dyV5YFIsNWovNDEkdno4cTAyQCVJX0NAQShje3YwLl1qKHZbQ2Q2SXJCSnVvbVkpTDVxanhTRiN6R1EuTUhnQT90QjxmQX0xL3RCZmJrMVBVVlg3djlMbjB+YHhSNClGd0RmOyY6XiFGamVfdmQ5Wkx2RCo1InRsZkQ2V3t2MmRYeTJz'@;
put 'QisocXU2T2NNfnRuZXEpWGNuK3tANUxZZX00MXQ5MG5vZzp+SEw9cFtGWHEwKDUhWjBfWGVmW0p0PTw3UkRfam44TX5MY01FTWMvISJiN3BNbCZlcixYI3VzNGVFbH19KUg3ZjpLLCZUUkgidyQrYEphaVI5SyRVUnhDJldnZ3swflI2Q31RMENtNXdtQWtaXUVLJGE4Rk4lKFt0eD1PTzNnVUdN'@;
put 'QCUrcXoiOHRMdU94SlRYU2p1IWtXMlNmTHk9PldrKTVWYkp5QjVHMnQjPCt0UEwsM0ImNCh4ZDlKdTY2Wy80V3swYGNgWEhEPmxXb2EhfVJPWFlRZmAkTVVHU1pyMkwvUkpdUUpnb0NGaHwsVU9PcH5gRlZdQkh2O2ZbSDZGNlJFME5YfVJCdXJPdUcuejpvTk9UMzxoaV0ieTEufVk4KSE1VUR3'@;
put 'WjFaZExBdU5YclI0LzJVbUNoJDEvI3dgKCI5X2Rzcz9ySGdobHQjKlo4eSt8QzFVN2BYLE5meHZHKTxHS2l4fUNDNmFjaitDRmRsdEJKRE4kQVNZfUxJfVlzTFhTO3kyTGEpXXBiP1UyQEFpNyE1YmskRDd0JUZuTj9wYUV3Si5TLyp7JihRZHpxQn1KZSpjRUpHI1N1K0g9OUpsIX1rNyhZQF5D'@;
put 'TylbQlBCXSpmWHljVlEkel11TUFAR1dEYEEudjtxJkExVz4lOVA0b0MkcylPN2FTdmBqTD9EKHYiQyR3OFtnV14oXU8ieTd7MlsrQyR7Rk45KmlKeTZIN1BqfiFCVVF6JUZ6dFAlOkxaTSs2b1dwaUZMT2xrQy5Pd0JOdCZ0S0FWe3QrcVdxKUNLJHB5PFNvVzptd29XeTI5KVsqemJuL3hCIVdo'@;
put 'WFM3NHlALFVYUGFiYTtBZnZ1KTRaPTBZVyhgYkt4KXlTSHRXRSlmUXQmZE1KQjJAb3Q8OXVuRylYeDR4TilFeHNzQCZSXXc3Tm9mOUREIlAiX054c3tpMUwlVzNbNXhtR35MbEd6T003NjVgeywrLjE7eW5HV1NsQU1AbGx+eT9lR1NDRlB1PWssR1ZCV3ZpfXsrd1h3Yjp1ZkRPRypbYzxxeDcj'@;
put 'Tm1qO1lSfCFiKXsxLEB5aSV5L09fW2I2SWtWY3k5VnRfRmIpcWYsTzB4Nj1RJktvTz9JMkNBdVpOVlQsdWJSSEt0aU1NSUxMenZJSGpkV1pxUElrUkMjPykzNTdmSndnRjQsXzEvdTF6WW1GamQ4ayRZZzlDY0RmWHg1bn5JZGBeSDApZktlJUlXTDBOSz9jL1p3M3huN0l6bmU4Nk14QiNMNzpa'@;
put 'eHNLK1cpVHhkPkBIfmh0IkZobFlPQTttNDNiTkFMPU59YzMyIyJDOExgZEtIaEk9UWUlb1dYWm1dfC9uWkdGbWxlWnRsUzs7Y2B2UjJYUn1kMDQ9eVQlMTBJfmJJRFpKKzFELE9Me2pIQDQiYEhQcSZiMzc3JTV5Ojcid2d8bTBvV3RjJk1iXy8uYyw2czMuVGQsYEE+eFdVSUBjZG9tPDBWWSlF'@;
put 'Jm8ydDw0JFV5WztPQ1JrSCl1fGAxbHNjS2A1P3xSPnVOQ2l1bV91Vy5TWmAodiMuTzxLfURaJnR0TCo5KXlVQ1paQSpIR0tSYl4vPmhCNWd0NC9MVHE0aVc1U0k3dn0maiphOWFjfDJwMSxzYFhCRT1+NkMmV2JwZC9bdHExe2R6ZDJ0MlJ2NXM4Ml0wRVRLYSR8ZDU1OHV8X0JBVSIyXV95U2FJ'@;
put 'TTJHO2MoIkF4eVl8ZVE7Ji90NT8rVkhTNUhCeTR2Vyt1MWd5Sihwfk02NDRjI1drdHp1TX5tPDY2R091RTsobGxhOnZpYXw6OUdRW2MrZXhEPEUydH16SD9bQDojMlZeblAyUWo2U010VktmYiV9TD0rTTxDI0dvUiUjaXc4Q0h2N2hOZ1M+dm5LTFY1UVM4SlF3M19wbWdCdmxxTzIheTo6WTdk'@;
put 'Pz9JbS8jek9xeWFjTlAwNTBHL1JkKTdXLyMyVmw1Q0ZmJjhFRG1Adj9XUShhJGZseURBUTB2PDpgWjZXKVhlbzd1c01jWHhGS0tYNjRESFJOTWIlZFhYWD1MfFdTJjZTTGVmRDJnT1BaYVo5TW1ZdU1ES1s9diQhWnhOW1pEWkU+IVgsajllSXhadEJwVnNvN3V+dGRaPzVYe2VDWCl0LzJMOjll'@;
put 'Y0xmZzV5NEtgXlAhfTV0Y0BwW35EJloye2FhaFpvXmBvIzdkLDojUnReY3FCK2lMN3AuaC98ekZ7MWwiRlM2MikvbFA3c2JfPk47UmovI1EkNEUxNnMuLzo3WDcrNmklODFsOjEvYHw5OEVVNXpKUSIjUk9HV29BdiN2RUouQUpeUGJubHsiTHNFJjlYRUdZUjkodng2U3VSc0MjRFtgSTh0Y192'@;
put 'VmkiVl1XMW80Q010V0NGJTlYYElYRGJHW0c8WVNQRkJBUSVOd2x5aTdYWTQ0WXdXYXBBKVhZREc1ZzxMOnFtT01ZJFc5RTxoW1kyUlglOVh5P3BIciErLF5QdzF+WWU0bU9je2UyTF47RlBCJFMwTH1LIUxAJjJdRlV8MjJMS29VODpVTG9OTW40OWUpWyhhI3VwJjQ2b0tLQFhKN3xlOGhTMGRG'@;
put 'QkFNTm8lcG1UNWo1dz96alkmMmhDJUV6cT0qamdWbFgySFtJRzhETGEoZCp0KV0hWiJ8SzY5ZUFEVUNhKjskdVdmcVNhPkJDelBlKyJ4PXo9WjFXYzIzPWsxP3wmSFBReyR6WCUmTnJsPSlgcGdNNltRO1kpZE1mdG5aTU1KW1FKPUV6elFALkd3SHwzekxRdEl7RUk0a0Q3b2dKTVljXkdvPzFC'@;
put 'MjZpZltqMS5aWy5HO0NNaVdLYnR6OmxCdytzZUAvSFBBRClVTFR3V0dHbTw2dW1eM3pDSih7JiRdQzkocU9dZF15dG9aO0RKd1dRbnZYYUpFRnB0SEovM0JBJVtKT3g8dlRMLE5TfEkuTzE0MHxVVEVHYmxHQDFYU3M4d0I7UiZmR3FjflkyOlkrUXZrfTgwXWNNQmFWNDRjWSJjLEVnZHZwTWNn'@;
put 'WlZhN2trc2gkQk1GI0xJWCk5fHdNTX12VGMpL09FUV84dmdxK3ZGYDFBZXZAMCtIbUU/YXdGeGQ8cChKVGBxOlZHQ19DXkNKM3pJcERePm0wSnNDdSUkbGhjdSlrbGBqZ1JkdVBULC5LZU8xZF5IV01oRWRsP0NJTFZTPk9yQHh4cT11Ingxe2UveTIufGVXLGxUY0dBIz5GbnUpP05pXipvQn5i'@;
put 'Rz16MTwjM2EsWFNDN04lKSQvODRaYjlGLEcmVGVjQ0lOSiZGbm5xNm0wOGpYWE1PKFFeTFNoQipjcWJLSmxXLGxEYUBTJkJJRkRxKnlCRndHdFpZRz17VHZ5T2N3WkBJZDRoWEZReTUrRTtDfURZKUpWOyp1VkpbU3Y5Qmo3NjJCREMweEQ8MGhQaz9BeT10VG0zaiZyT3ZJU29iLCwuT24iITJq'@;
put 'Q1QsIjB5blIpY0JUamlhJjBqZ05CPld6MlNeTkVNKVJEI3A6aHZ0JHk5NFQsXU14dEVacHhGRCFsVkJ1NkhaOld6MnkjMnVzbiU0UXNnRFR6TTozazRqYHlWRHNNfDFzU2VESWI4Lng/WSwkU3ppIi8hWU0ub0dVRSk0Jk5LeUskQmxtaWsxcSlMLiF1UkI5Y3EwX2JVdmk5MmJHIWxKKnQ1JT8/'@;
put 'czB4VW0rbVphazpDcllaJkZGVzBsQlRtUkxPbUozR0d6dEdgTG0wSWF4SyR3NHlxUHQmZEtpVUlFcjY0R2FULDVId3RJXkFBRTo/akh5T0c3V0R0azBPTnYockVJSUZaNnFwMzcrXzZON3YsTWIzSS9OPS8/akFYKFBuR1VjfjxYI21VbkJwWmQsLikhWnFCSEE6Z1BNTUV7Qzk0KzxiMHB3XjFG'@;
put 'TXNjTGtAST1CVSVXRyxHNTJmVUxWRCMwOkc5Tnc6SHZEbzZTeG1xVCJlJWZNbDlHL0l3NHpwRFYpTnpjIyNGVlc1Y1gke2pXODJYd3poUHw0flhLQ3R0VmNNWyssYjtnTWtEVjZASEFgVzBOcCJwdyJ8cThMdnV5WEAvQSFhMCQ6KkA9SiI5ejl7L0x2LixjM3EhSUklO3Z2PENVIkR+MWRhUyMo'@;
put 'KEJyU083bzU1WUNsL0xvOnQqYS9ERy5kNSU+SWZ4NlY1dFgpfls+Q3hwc2YxJXVJQEBrU0o9R0RaWXZQckZtIWxVbDkqRW5PNyluZSk8cTFlWndSenRaNHNtZTloeClbQGVuSiZ5YmZbTHBVUXBZUExQZGpPR3haaEdLSFEsZTd2Rz5sJExEbFF1dkVzIzpfK09vQVNBO1hyMj5oPk1+MTJYTUtm'@;
put 'enduQUFwKVBwcE0xeH0kTko2dXh6RGZOKnUrUzZWYlh8Lz8vaDNhWlR0biVEITZEaz5sS2lvZyNDSHtMP2ZaLmIrNE90PXRgIypxfFU0KGRSZXNeQzhScHdubj5sST9VT1dlckl2I0UpbWg3QVR3WXAiSlR2ez4rMjp5UlBiTFM3PGlHQT5sY3RFKnYsfDlXMjNrXiJzc3pEVnA4andNaWVvIXtr'@;
put 'QnVpPSg3bD1iUD5sLihvNCVYSHclXiRBcUZaQjhpJTtFKSU9Jm86VjEpJUYvdTcrYGolO0RYRSovb3wwW1pxRiU6L2wxOjElN1IzJj9YYTdlcz5CKVg2eShYazc0SiVXUG94TX41aXQ4X0QicnxtImAjIjFeWDN0N3lldlg7RyJRSGswJGNXVG9hZEc1UlNsLjxBZykweV1ONzRKL083ZE9pVE5q'@;
put 'ZV02VWlWI2RZbDloRSZGeCxwZDp3OSE/dXRWbTJfU3RmJGprcTtmPTNrWVYvYTQ2ZzIlN1IrKERQO2NALzpXPmhnSnxlVEY+bCtXO1R2LHwpfkw1d3AhXUFGKTpnVkMzJVkhL19IW35sNktneSVaWjdkOlRYOTVmbW06fEI+YV1fZldsNSI4N0RWSmF3ZXRocEcvcHMqeGRLLmdsQ1RYMS42Q0Ns'@;
put 'Wk1wQkRQYWtnNSh4TiZNRyRtQXdhaU1AYEtvPEw3Vy5UQC5BREdWSHBCbS5VfGZ4WUFScEVMaU8idlp4dHVRZDlGJnRhKT01flB3OF9FfD4xSVBPakc6dUlOdkRqZDROTnZhXTVbWkZtVWBoRFIyKzJJMSVVR35qZ1NPQkh6ckJwWHRCTSwyRy9naURHbyxIXV18L0d7V1IkRW5aXmFxSkA+L0lt'@;
put 'QzA5MDY+VmFDRW9OSnFhcjJfeUtTNih9RUhbUGlKVi5rS0NsOTZ4P3ZlNXhSNTRLNztTRUh2VlpkNTY0S1hCTHJ6dmtrL2l+ZUxIO3lnXXs8UlphXk95LkY3dHRFZ1kwSCk3QXgvSSVCdUxHSyVnYUFMVkZCcTIlOzYpV3VgP0VNcEJDTS52NVA9Ong8ZUcpITBhNXU9Y3pMNXFZTD51YCNNWH1V'@;
put 'NV1+RmltejF8KDxmfWg0OlBdWz0rRig2N1pwR18+fVhOKixhbDk4dik0Pygha00udDg/ems8UVRJNzBgQGpbI3goVUQhKFtGckN6IV01YCNXbDNKO1t6WExiMmk4WSI5e1J2WH1mTnsrPjRJIkxjQ3RvYStVaVlZaF0jQkliWCVIaWEyS0tGd2ZPek5lNCh4P1RMSGVWezI+U2dBe1hOQz5lOzpX'@;
put 'TiNKPFNsUkkwckIxdD19RkI9dDpnWE1wTEFePixfcTgzKFNjMzVMeGR8PTBnRjl8eWB2UjlDRVpMTz5WLCtnaV4wNklJc2k0O3lneWBOY1QsMEdbKH5lWF11dU9nMEFUPD9UYjV3bX5FfUlpdHF6I0RlXUA+TzwhQlRtOGNObzwpX3IpZl5tXSJXJkVTLk9iQX1BZTxwRlRYalApQWp6QX1uN0sk'@;
put 'a19FdH00MkVWSlFjPWNuWFFEYTRhLjkhY3VjMGFHZCxqfDFCKC89dTohJCNHaF4oOWQ4I1FBUEhfYTFkOiE/T3I9Vnd3RyZBLmg5VjE0cHVVLHxkQGg9Qm1MZC9INU4xWlhDNm0wZ1hOant2YTVwdT8+e0Yiak9rSTd8P1s7YEgpYjo1N2EjZ3tKYkxfRDohLGF9LzU3R0omTm5MTWk8N0xVVSxu'@;
put 'Tn56Nls3blZKKSQmRHc2anQqWEZnXmEzW0EzO3VMdHclM2pbUTg3anJhWXNdfEJHT1NocDUzaVMpQ1BUbUdlOnk2d0thKzhYdkxBU0IxVzpPWTU6Ikk8VUVFd21lZWtzfj5hSU0zaiMwS3Q0S1taQjpLQ3huUGI9VGNJbTwlKFEhMlI1RWh9MUhqcFJJUXc0allCYCsuRHNPdCNxbjhZS0AmbGhY'@;
put 'eUpgUXd1PTdBSmdyP0p3ZzMqc3pKVGtMXSZJMm5FZiN+REdkKjcqLFUsI0ZidCEoV1hxdV0+aStOQkYqdVltPGhYcExGd1hjd0lpTn4xYChvT0A3KmxYZTpMdUkqSFEoTkJAKFQoWUduMFFufEJsYWhMcHVoWHAlZmBsRUJlXyt+SWZARk1+eTtCU3VBP01NO2gxZHw9WDJDb1dCXkRHdmp4V3FJ'@;
put 'TWljWiRYUWEreDA5eStRYkx7Y313NW86IVcvYDlRMiU4UHUoTjRjdXB6M3ljQzF+ZEo/JH1GSF50KF9ueDVjZjgxXn1XJVpSQ0Vrazh9IXNWczQ4ZFc1W0RjfC5vVUBsUz1CQGpPaUlOKFtMN0pYK2xyaFZFdld8SyxnVXo2MUQ9a2pgfmBlT3RSN3UhY0AqWm5DJEc/RVRgW1E7PTphMmlbRGZj'@;
put 'MkZvW1RTPzhuMnBMJEdqXjZ9azAmLkpwPVl4Py5GR35BdEVVeipPbUUlOllCJDNkJH5XN2klVE4hfDI3VD9PQnt+KSNYQ1Jme35KaWR2Km4/fipINEwlKG5+ZGFjZXd+TDgoPVdHSW9gQ3svS3gxRWFQTjVjW3h6clEvWF5vbjN8VjMoR2IsWFtWfjN9XnlkODBLLHIxfnpvQixJSkIjfGtjTXYq'@;
put 'dVB4WC49Q2dLXSk9fUpPcERPelU8VltzImJfQERpKTp0Pm1Zczs1dC41Rlh1QzdNT0FLRWRGaCNIVFcjTSM7VCs2XVFpOnl3Sz40LnNKVk8pZk10TiVgO3YrUWd5QUsjd3wsdFMhbGNHOldfXlFKeGglRVIqJihKWWR0VU9rfko3MClINmJFRkVwSU8peFl9QGdOSCRuUHxITjFpTlElU21UKylq'@;
put 'OXcvYWBhNEZubilOayskVGxuOkxWMiJbUSgjbTc/fj9jXUtXRVloVkhPIzJaQ3M0Pn5ZeihDdU1ocCNuTXY7fGxGSktXdm1dZzQqbX1NSFB5KnEpTytCUUhgK3l5aVNIRyFIaERaTlU4bmkiL0NZL1goaTQ6Yj1Jb2cjWGxbU1MwVztKS1hpZ2dnVjA5dXBudXZNS3xxQTxEMVp1MDd5JDN1QUhh'@;
put 'OUpjU3lhfGJ8PCwpKjB3ZkhCLzwkY29mLC4qSSpYVl8+LlFxQmJLc2Frb05sfnZPekxacU1SdCMuUWlDP3BML14vcHBaWlErYSJuTyIiRm5WJS9dR0YwPnFGZjR2UkN5T182UUQ/VGlaZ3t9V3NuTyRzSiFPRkJOPl5DNzNldjpfKTk1RTNUNUUwTX0ycSV9MihYMkRjNyg5SndEVjR6QVUqQ2Zo'@;
put 'TE9AP25MbHpnS0hCTktJKktAZWlUaVhJTF1WIzlCTXNVL3E6WFk9SlZfMCtnZ249dXg5XSg1cnBbYmAyVDNpVWBpKVZmRF9gQSk5c3ZOOUYzMzFGcV8rbjJXQkJVdzRiaCsjP3Q0ejhZU3ooJmU/OD0mR1Q7LC9AeDFsTGMmPUcoOEVjYnYjX2cvKGF5eWF1JG5OJXkxPHhlWFJ5LnlUeGlBbWdq'@;
put 'ZV0icypNRF00NShRM29mUWAqKGR4WiNASWkoYXk9SyMqbV9UdEdCdk5NUl1OaUtxPlE3fHZJdHNMJE5iWGlxYVY4cjAob0Q0RihxPkttQytfemM1STBPQjlDRXo7P3ovRjVwZ2IyQHZ0W0pIamQ1K3FpcUB7NihEW0B4fXlldXBgWVNQLEBtc1VCLzp2anF8ZjApI2gvdz9WRGY7Xy9uPENqRTgo'@;
put 'YkclRVEzdWFbZz1obSsmNS9Ee0RyL0EmPDNVKyFaIXttd3ZqNSNtPUxxaWEkXiI7OHxidnhbY2k3WzlKekslVXIrKjM2RF5bMUxHIWBzOjZIPnFfV3x7SkJBRkcwSC9AKUUuVGxaalF6PD9tLHdlOUN6YTdqTyZDY1VnK0pPbWJldiUiJDg0TW1tQHohWjY9VDdqKCQkMz9gPkdGN0djd21WbFlP'@;
put 'XT0iR2g1Q19MI157TmR9UmNoMld6eEBsTDBaKmMuLlFfNVluP3s0NWtoSVtGQDJ+Y31KPko8dkk5PDcraVJ5Llp6YmI8PXk8RVNDZT9vNXRGV0lmQiokMyMrT0JLMjRSKE9NM19yMlddX3pEYXgqUkJCMDlFVnJVdHR0OkRQTnAjOVUqTFJyY25Bd3tUMklDdF5ScXR9RXxLWXFgeWRKJUN5VUlJ'@;
put 'cyZLVTVnYFRqTDY+bVhPQU5aSV5hKEp3NGdKeVheYGY8cnJ4Ui5ka0B2fnkyVChSVSNNSWcrPzNHaGFrJTVyOXQ/R3F6NF0yLCRGfF9rLjI0KilbVlk9TnouZGxYV0ZAKCR9NTNnPWBZRGY0Zz9ZR1Z4eHxOK2pXSjsqcn5IciU7JD0+KmZJOzErNFtlQCN1RkoiQiRxUntRUWs1TGlLPlhIbFt6'@;
put 'IXlRaUVNWW1zV2s3cHhuMktEQjdqaD1lU1ArTk13RGNCP0RfM3xMRDcvYkBKPmAmSzx4OnxeTmp1bFZ8aVlXbUI9Lls6I0ZbWDBHcWJOYkIqZUJvTHQ1cnViJSlGalE9RzJ4LDtjVVcoZ1RiXiIoU1MhRDhBMjMpQXwoPVdqcnpuW0tBazIpTVAwLHxPbU9OMk4/W2wjekR5YmxCKGhnVDNkdSE5'@;
put 'KSowI0RPfiojUXtIKD8sb205cTcwV2loTEJPaEhOdV08TCheJSU9SXslYEpBY2tRQCZTUEs/VClBXjxFQXYyOTJ3dUBpMlhAPlUhTVNuUittWFV1cU1UPCF2dmNBKzBrRjddX2d+W1FPMj43eVA/eHB0bDM9ZzdwcmNoeFdeOHFUUl4+QEo4S30uIVheVDNUc0VWfTpDV1JSUjBBVjMqPDN2R3Zl'@;
put 'dzkrK2EsaXpOdlFyPzpiVFRXSzhkPkt7eFkufld1UzlnK0w6OUN5aktYQ3Z1SkNaY1JXOjdIJXl1cHdTfGdaTUpNIXdkeG5HL3QqaWtqYW8/dnUpImdLa2xba3UvQDtkWnFnPSRrLnNYLjhNeDdXSi96WER5bmhTe1tRJnZ3Qn5XSFZ4RlUmSTc0dzkiJFB8K2IsfF52Y11feXw5TU1XfFdOX3hq'@;
put 'Iz0pYTJ0K3ZUOkxFXVFMU3oxeXFRY0opU05MTWs4I3Z9I0V1Vl9NYzFbdyFYKDdWYHFLS2deKjRaL1RFWTovQE8kSWN7KWdWfFBXKSgiIik1YHxEOyY6bz0qaSosZjJ6e2siPXdFVz5mcyF1VEU8ekJ1fVskb20hTD51Y3c9Y0wiWyYpZnBlImo5VSVtTnh5I3Ijd3x5NDwqeDxxSXdkaGxnOSg6'@;
put 'bFpMQDFlYDtqa3pZSXdBW2BBTnNzZ14mKXdCMG9XWTppJG1RaSwoLHs8aTMxcD12RT5GN0NTS0xbZn1sfkszXnkqKygxXlI2SVAoN3V8Mk9vWnMjUkBUSl0lVGR2KTx7dGd4VnMoIWNzdElFeWAxR25qTiJ5KUJaIShYbXhyVHo0I3FoWmBAdClgV2FHWnhTM25zQDRddnh2WiI7a3xGcmJiPSJL'@;
put 'UX46VDR9ZCoxP1lgTSx5WHJJc3lvRHolL1t6X0EhQ2clWGJhOGFmelttTE9aPyR6WUJaeStfSm5CV1E/cFgvdEdZJGkmOWpDPGJYKUJ0N2NlfFBNfFEqdl5IWVZwQmBFPkxDfnpYJiQ1UFd6c3ZEYTApcXQ4OFlndUMzNXAuJXJ0OGE/bTp1cG9jUlMyM0NKeXsoZ0N5Yi5yUE8rPTxyJkNTRn1X'@;
put 'PHh9IltBR0NrJUJPUVQ5OzB2NEdoNWthcjoxQF5fV21dO2pGalk9ZXtsczZSLHxzK05TaTNVZFBYRyJOaClzdihNTmdYRzJ3QSJ9Q01nbzRlaixRaig2anc9KGNVOEV7fFQ8Q10pWHxxbUk+WEB7WXY3blBOJkZPTGA5cD5TTjxxYjQvVktXWlp6PSpyTnh0Q2NiOk0jTHNKRkIiXmRsKW9dX3A+'@;
put 'bilROjpYWUhwRlhHTD9LejssKUJvSWpVKzEvQ19GezNqSyVnTG1hK0ghSlU0R0pGQktMREoxPUh5Xy4vUFc2TSlpR3xGRVhLey9ILEUqWEg0RkpaTXxgQmIoY2skVS81YUNMTW48JW9MZitLJFRmRGlIdlJQV2coQHQrV0g+S08obzU0bkIjTmZ3dCtuNkpDW0YkbXJpYy4yWH4yNkN5RntUbzJF'@;
put 'JjBuLClJTkpWY24jLGUmaCNkLzZYXWQkN29Ne0dNTXtAR1NGImViZG9LV1VpP3tHaH0+T0BQRV1mY3N7cjE9TyNrQ1JLVXdtW0FEOFVjNHtSYkVZZEVfc1BTb0ZgJDVmLjtTP1h6WCIyeSVYXnNHJTVFb0l0fSVYejlfNFUqLlFmQFY1QzlxYXR0dCM4aitjZ0ZGO3xXQ3tKaWVtXyFfWHJ0RH1D'@;
put 'WihgazVUKkNdJTdQVzBPRDQmd3Q5TEB6eUIiVC8xTndwInJTSEw5d3syPTV1XT1HN1ghYVlmJk5iNCtnfl9MVlhxbit4TS55VjdsbjIzL3gxOSkwfnAjVmkqXXpHT05EZX09fip4K18lY21LXUg0T3xicGNZfEshIl1gIktGaWZwSWgsUlIvLmdXQT80aXxlKDB+RlBLYiwyYmZNTytpNy4iaVVP'@;
put 'dCpeeVd0JV5baXs+bjUuRXRdN2ouZEgzRmhCZHFtSD1fS2A1KSUiSERPVCF0ME1dUWc5Z1piW0MpXnd1JEdmWkN3dURtbEJmZXcpdXowYStxVCM3eUZxSTZtc0tYZ2wodGFgSWdFNkBuPllOQnROanNpUnlNZTVWWiRQV2xbQyp3QUlYd2lFRU1pNDR5alZMPzU9PUg8QCVaYU5qMUF6YkpiPGBN'@;
put 'UFNFYkxvOkl+KjYkZjl5cS9LNmU+OyFqW3MxWWE4RSUvfU83RSF0XSpVMzZrIXBdLCZaS2V6MUNLPDl4aHEycWMmJGVzeU1eR3JPRjZlYT9RcHkmK15pVyNhJDYrPVsmSHxHMmxWd0tSIkYrd3IkPn5WI1RTcVNxVCY9VjRSV0l6ImNQPVFXSUI+TD5vPi5QOT88XzVzaFRhMXx6d0tIRnFPcVhm'@;
put 'U3BwcEs2WlhndFR6VCkufm1XejBnRyViP0coe2l2UVNyfV92a2JNZDgwPTAhfm1fY3NtcmlLcVhHazhFLkcsdkB2M187PSt2e1YuVV81JSh3e11EMCJ+O31RYDslIyw3MEssO0AleTpEKTthSS9sOEheI2NnXUBpPTd9QUZLViI6KzdRJWolY2dEUk1CYnNiX0E/RWBodVp1WisiP0Ngam5lPV1T'@;
put 'SjkmTUQrJVB9eHlbImBufHJnMHZQK3NrbFZ3NlpdYn5jQks/UHsuZ0krViMqTGR9YSZLK3grcFN+ZloiQSVROUsjKzsyfmZrJnJiJi85NV1qVHtVL0kxayZRbmlUPDl9L31YUXpycVdAS0hBam5+JChyVzluaF1OUGV9TXNHe148X1d5bmh2NSljfU03NV9bSmgwNXNWSEZxTypXcmlrOFlnaU9H'@;
put 'SSN3dypOMFlnOU5HSUFkcz1IalJSe0k4eH57OGdzUTc1QHBxfEEhWHpPQTx4V1BYU2JKPl4/Yj1QZj17P2shd009USxgWHNpRlAoMz5SbDJTNT8mbUE0b3dKIT9HWTQ2ayoqbitjRXxUP0c6bkVhYT8oTkF1YmVnWXI9NT8oSnI9aSkmbS5ufS90JHx5ej9vJElwWzRxMzpuI0xOVVQpMClNPVlB'@;
put 'Kz5oSnBSV1heQjJ5IVJIQkswP2BQKzskfERIaTBITSxuQ29HZy5XejBnNiNnfDxMYGY9OCVFPW9MZ3tmMThybUxtbCNrbV53VyRjT3tXdEkqRmZMIiZSOlszc0AxTmJSKENPXlN5cS9US1lMUUBaRnFuR10pbSVsUiFCQVk0ZmxhQ0Asc0VKd3BJeSJENjNzcndlbnIzdnchJEguPnAmXnJbKT4m'@;
put 'KW1WZz1pW18lO3s8cGNtemRxeXN5fXl+fX1UOWksdlJtTS4hSkoiVzxKSUpgQHc5Q24jI0R5K0xxKj1VQXs2VzZCXSxEc3F+SUt6ak5fT0d+TUUjVEY1anolMzNeZXpvfWp1L3QyUk8mV3tgQi5Vflo0SDM2ZkJBZWZ+VzIoQX5CbksrVmhZfTJZTEx5TU1+b0hRZ2UpZC9CWmNVSCY3M0Q4NGB4'@;
put 'SVJ2R1oyRitPZVIiPHd1MSZpN0hqIT1QKW9bRDVfUll7Yk96Lk9QNSV5JmksYTVCaDQ/Xn54b30icC9JeWMoTko1PG95YyYkNzRCRlZRK35NNTpxKTZ+MkBucipjSD5uaip+MkE9eDt1VzI4cm0rbGIpKG1MZ3w8emxxbSZSOmlkO2dDKU49PyhKVCZfPH1tRlNdPXg7VyRYPTI4LCtiZX04O3lP'@;
put 'Z3w8bkolRWxHaSFAU3orMGJhb3M/V3Z4Oj19I3ckR1Qic1dwfSYzS250YXhiO012en5DY1ZRMGVMdjc/byZLTHZ9OUQ6clpVRjooYi91Q0dKN1pNWHduSEx5LzpGbGRpenFpXkpmPVgwOFR1TDgkQ1F8flh+WENxT2JVMkoqYlcwP0VWPztoNWAmODBAU3VwL05KOCl4SVIzKj4/W194dX5ESXMo'@;
put 'TnchVCxfJTYqfmxZcihCdyMkfHwmWFt+L1hpbj9gMWUqfnp1JE1PJVdHbG4hQ18+ZnxAfnJtaW5rfVBnfHN6NCFUX3xERVt+MFdpbi5gVVspfkpzKT50WzltJH1tRD5+I1ZpbnM/XkUkfWA1cmpUM0h3c3ZQVjhpNzMpTD1SZmdTTmY9MmheRT9PbTJIM0ElVkVDb3NPdklYQntRYj9STVhxLD5K'@;
put 'Ink0fkl6dGd4eVpiOS88UFZCUnJPV1QiaGpQMlphbyw0WkVuSVtuc09mSXxqNCR6ZltCfDVoaEZCZ34/dzBAdlhtdllMTlU3X0cwMU4yOiEpRXIpPl0pPTJ0K0B+UFZpbm8/X3gjfX09NF5CIzBAQXUySWJaOkBFTShNTzFTTVEmLjU8diVfVGs3a29bN1Jsdnorfn4ySmIuVzBdRGFTSi9dY21U'@;
put 'ZkomfVYlV2guSVFrNX5NTjF5UGV9S1swe2M1UCMsSTRRW0hkJkpPayNGdTd6RjFvdTd6RkkjXXM2MGRhYj4veH19VT00RUNiT3heOklJQSJlMj04Y1RCI2oiUmFsXV52aVRxdnEhNTc0Nz4jLmAyMUN0MjxuOyEyKlNEa3d4Xn1MLkB+dFAjM0kqX1ltKTxPa2VvU34rLlRNLD91SVIuYz51fElL'@;
put 'OCxNTzEhPFEmJlsrLzVKXVN7cy8rPjVOZFcyOXNVZ2FvcXRYdkkxXj4reGZPVXVePmQ8NDE/Lm9bQjJCOEI7VFMzYFBIS25sdGVlVltJTWt1LlpzcGpJM0k6ZTFVJjM3KU0sLHUiSUQlJmBfWWdwTSwodVhSNm0yMmVHYUo6eFtDQSJ5Y3VgPnFyNTFaL15pKzlfVXMjRlk8PGtHLldXaXlnPkx2'@;
put 'VjcsSkB8dTU8PnZMVTJ+SyJGcFt9X1V0ZCsoK3hga1lYNUYrQyUsfEMzUVJqVjQvPVtgc1JbZCsocSJzNnwiNyMzdjVxVSwvR1smYE9OcU8qRyUoZVc2am5WVkdvXTIxPy5tUiskcy9GWiIxbClNNkV5aFZVRmtFWDBhREdTRW93P2Yub1tIYT8ubmtRWCIxZUoqd0oub1slb30sdHk+Ljo1dWBf'@;
put 'WXU+fWM6TU0uXTZPSkZYelFePzVrRUFYJjBFdVMqPzpoYUMrTVcqOEhORy9PPmlwbkddaCMyMV9FTi9Ad3ZaSklSXWBjSGwlajBNKD54WTtacHdEWFJdPX5JSyk+KSlmZ2B9KS9gc08zIVQ8fF8lIX5NVHIoZ3YhVCFfSEkpfkhTcihwLj0yZnxtcj9zZmFfUyQwRF5yZ1J9MTBoTTRHS3pfSXYh'@;
put 'VTZHOV1uJmxPIVghb3tfSSxlaXYmXXQpTzx8dDJha0YlZXskPSMlOGJFLGY6REg8bFtnZSwoNUIvfn0jZnN+JW03ZFdXOF9benNUXjdNe3w6dFpMUXZJVkJ+emNlfkwhe0gvYEl0Un4jSF5LZTN2KEBOd3xoMCh+RjpGNzhgUnFyTEdGWEwjJFlASTFUfDZIZX5kd28oZElobk12ZmdxP0hJanw3'@;
put 'MFdXKXBrJTE/ITslfWVhSjRKbStvTy93OXJ8YFMjcyQxUXFUXSs7On1VcmgoQXhRcXF+cXBmX3s9I1FFfmI1UChGe35+ZTApaGs/Tkc2fjF8ZyhMLG1JfXozWS59Ryo5fWtHVygoOmVXc0EvdjIvO012P2I8MXNVOlE5enNASWooR09ScUp9QHQwfFApIn1ndCx+LCR8fnJpYH5LYH5+XXEiczVW'@;
put 'dFdbRl1YP0Q8Lzp7NHg0eW9hPC9GdF5rQ0A2SGkxN01xKzlHU3s9dSg+OXEicy58VXhyflsoPVFwNzNZXXM0N2VXPz5mbik2WSpdfEI2aH47dTdUfmwxcj5CUFEsRC5WejNraEI/PWVqfFk1c35yPCFoJE1SfF1DTGNbdEJhcX07MFRXcl1mJGxzYFpURUZCSiZdK3VEXXNuNDJyanUpaGd+PkRA'@;
put 'fjBWPFFWSFV4dV1UPHV+a0E8c01nQkhUQC5sPFE+LFVCPz9NQl1gQUI1cy95UyghYmB+OEx1KF9AbzF7fXc/IXN4Z2xJYndCYUdAYjxWfCpNaCh4PCZ8Nn0xKGlzcG5ncyp5Nj5XfGNfNEgic090KWhSP3s7anxEWWp+OkkzaF1PRU9iOjEhcV94K2soZWAoOGRzOEZjcyZ8REU5PyVDYX5QZH1+'@;
put 'JU11KEpbbkl9fXZpI3NQbWxJUXhCYTB9OkhkczN4Zm4/fV1wMj5rX2NfSyVISXgqb0Y2fUhDZ34peCJ+fkR1KCt7MFpUfC41a3NaLlE0d2NkK34oTE06fXE1bDFYKVVCS3shLGQoI3kzPlBjUXxAMiloWWByOHF+aEsjaE5WbUlZei9pe3NCRDV5SHVZKk9+WjhsMWQpVUIyfUhDaHNAaFMoVGMy'@;
put 'cmt2KWg8fj0rPX43d21JajpiTVZgS15sV1QmNHkjdVkqXnNsQyUsM2BkIi59XyE2PlZ8MXJjTS8mZltvMX5+KlN+fm41M1kyfUUqbHNnRFI0fSlPajRgbHElcz9FJSxtPzNBNHxlTiE+UmpRfFl9cy9wc3NjaCgzM0ljL1kkdEkuKk9tfCwpVUxzdTRsPX47IShoOytiOClfNDFWTDQrJGRwc30+'@;
put 'RE9Qe0p5bF8qdSl9KXNuKCszUWRWfWxnOzk1ZTwyYUMyciFgYHtMTGRYNzU0QmlzXmdibWI5dl5OIm5OX1YpRl9oOFlCYFZXP01kPFpefVdMQmY/PEgvU2dBZ009VlguMkkxWGd3an4/Uyl9JF43NjZDdEJxbj5JNl1NbGhWOXtUK19SKlE5Y3J0dTRkQlVsKlJkbV5waDd3ejUqI0AqeXFZa2Ao'@;
put 'dGo8MVt7REBUUlg7LHNFKzdoeC9tdEJIKUhmcF9aUkdgPWtnKUBUJmdWfmNBXWp2ejxXQnQ1VisqSUpxOTQuLzpsUl8vLzF9OyZ0U0djan11U0puRE1dbmJtdWVKPElSMiUiUkZnLjhNbnJ2TX0yaHRwRHdKSFhdRlRIeTxKTG5uXUl4NHkqX1hLQ0FrbEcsTCI5R1F4aXpQakVDNlRPMEZFc1hG'@;
put 'PUlkTTxFJn1ROnNQZTJhfHxFQys+YWtrUEMhbDZMUjUyRDVCRVhIRV91RHptOzlNV0NxL1lSWlo3Vnx9XjE/Ll1fNlBFNEw4UEcxcUQ6NWkocjZFVjw4Vn00dX5rVzVmdE5XR0U1YH5DOjtWandvc2g1WHg8UTlaaVU1fWVHXSlsP3ZRSGA2Tkpsa044Lj99cUxAVkB0elYhQlU6Zn5kaXdbeiFA'@;
put 'aiRDZkVnX35sW3x6MF4xQiJvZ3VHW0xzYztPIklBMzcrKShoSU5SckJmRCp5VyU/dTpHc1k3UGBTeD17REFHb1tXdEo0KioqYGtSfFJ1KFNeOz9YfElNWm1vTX5ZRDAjKUNHPT57SlsqcGAvWU45WE8vdD9qdFtNdHJJUEdEaTFGaVRidEU0bzF1Ryh+MnosNTp1SF07Q2pQISNQJCkzWjxhRlZ+'@;
put 'UjVCLyQhKEg1YyYxRi9VRClvYTRXeGVPYnhkR2R0fiZUJGZsMzMpfUBpezNDSFhyVStWb0NIWTQzLipISXdmMkBfPHQqXz5SRWM5U3pkKX0wNF5WYDp8TzB6Sk5WTE5jIyFxQDh3W1ZhMVE/PHcxaFBwW0BiRFpMaHRqdmBSTVhVRlM3VUVMND1DR1tKUSw/QDFvfG4jL2dGdk0wY19KQipgRllt'@;
put 'U34uNS87RmhBZSp1al0sKitiVl1oPGhUfGA1O1ExLmxCWXtHSkJGWVIkR3F8N1ldSTQuXT92amBqeXUlfVE9RzZpI350ZUxFLEx8NSRHJXxVYmojfkBNfS5TUTRZYGB6ZCY+Nll7cjdmY013aXYqfkNEKmZ9RFgjOlcyaX5hLy9WJXVyfHxiJmJJY0hiNjwka0l3REtAdzlHJitJPS9WIzp4VnF8'@;
put 'djZzc2haR01LYk02aj9KIVFoYlA+X0dOdnQpUCNHeChGXiExVHVRfnJQK0FVOVthRFVYPnM/REBBb3JqQGF3ZmJYPUNwSXErLGVBcUNqIyglcngzZyV8VTtpOklXdUVbUCtIXygyWzEiQmpCPTArLzBKUEdZUj9+aUhPc3JCUUFZTFQzeDZiU2FDIV86djZTV1NvTGBYQXdCIipUK29xKl13QiI6'@;
put 'Pndbd2Y9U2Q6Qi8rbExnNH5Ua3B2KkFqRGFIMiheJDRwYlB8XzFRQlgqUDZOYFJ2XnxSMG5rVz1Se1FSYEp3R3d6UFlHL30yWEE0ZGcmUXV4Z190VkFDKm86cmI/LCRuYkVPXXRgOC9aUUJyInh3QiVee2Y6YUxOSkguJnNUWzQxbXtjeCxSSERTblRIfWtkMEl0O1IzLyxgRGlrRUcsZUBIST98'@;
put 'Nkd9KShGT2NWfWl0X3JXNFhSZ1krdXp+UCIiLlQ6bjdkTGApdURifGNIVkYrJCJMWH1eV0NXa0YyRV9YKkxjc0IyQS9HQSRNTyIrRmtJcjRPaTFOLEh5KG5FTDpvSShYeSlLRSxqbHN5V145MWk8T3BhfGVmQmVxJD11WXVpVGFifGt4SVdGdTdMRkVvKzV9UFBacjhyaDNmLzVVNClUVylxL2Q+'@;
put 'MFIvX0VLQ35ub0VOZUs1ZEF8cikyfTRpdGV1YShySTpJWCxOdSpSVSJ6WHBgIiNzY0pad0JkQkw6T1cpbyRbX0tCKUBIbVd4Y3pFM2tUSFEhMUBJMSt8MlNYIW91Pkc6fWBoNnJOTGVsUE05SSk+YV0/LmtFUmpfMlMxdUQieyJOO2JsK35PUH5wTEUvUil+YGtjS204VG9Scno3IXY8RU1IQ3du'@;
put 'cVlpQ2FZdW9qJXUuKiolWyoqc3BqTXFaRDk3S2Y0JVQiQ0ZYSC9WV11LNWZ4SiYsR3tsUDokaHQwRCJMMEFgVkYiJUkqWTY4cFArdDx9QzFFWDhNNFhBNFYiInxCL199RmMkZjd6RkRedGNIdVtxNF0hIXlydT5ELyoiMy8lfFVtI1IoZU9YU3FRdHhYY3JfSUZhKWdGNG86bEhGNCoxWE88LEdS'@;
put 'd3tgalRsakhCU3UrKERDVlFnREUifkFZdllrR3U2WyIscmBOa2MlV0l3dnVqUCNeQFFacmZzeEEkOX1xNmFTRixDJDd5bXg6SXQrR2RyWU9BOXJ+MytjYEtPRDU+STdLQjR8Jk9TaVVFNUZsP1V4Y09bVztBISIlazZTZG1NdippektzRUc3aCpGKzpDYk5AQ2tFaG49MFY+Z0plKShCOih+Q0xO'@;
put 'P1ZadWY8e0UvQiF9WU09ViF2X2d5SyRNcH5zXzxWfnlgW1s0cHw0PmEyb1Z+ZWU7Wn44WmQwdzw9VnhaPWJPayVZVTVrSS54LG1mZS8xRCEmIjB3UlBfSStoVSlCU1dNWyhzVW9fb3gsclEiMnFgLGp+ImMhKlBXekVZdkNTbF5BTkFbKVQrTzpXPmhgUnhpSUlnU0tEdld0a2NHUko0azlrXilu'@;
put 'Ny9vSC5rQEczKn1wRTxjSnR+LGVCPDRoeFMzOkIoWGMjcj8qT1k/MixHQ29oIUdtcztaalV0QmZHbkJBODJ5JmF7cjB3dzQrbkNnaG40SU0yX0kyT0s3Q2A/QSh8O1RPWDVwUyIlc1cvfTNFRGN2TjVqL0s0VEBYeiFjQEdKdFBIbVt+QGFiPERifHtFYGpaTkJZbk5gUzFCZCN8KEZYOz9Xam4q'@;
put 'RWZQenB6NClkRkl0RUYiQ0BDQSs+cWxPblgzTCthVS8yZXVVVjAiOW1OaSJILEt1YXZYQl1VVnhdfWcqcm4hUkcwWSM0OEBpenAsP0YyTDQmdEVmJEdpWW5+UWMjTWtFcCZmKUs8OGZeP3hDQU1jLDxvPll9LnV1XnYqWyloJFM+Y0tGNSg+dl0xKUZQU3w4TTJvSUpTNy88fVFvIjNlTm5CXSh2'@;
put 'MT5zPEE2PDM6TFAydD8sWFlufF5MMVtQInY1byhGfTNtQ092RztDY3NkUl8zNUA5fUhMJDhnKC5vKm9uRWUyZmhWeEVofj9GcV0vKmdoWit+YzR+LnNEYT9uI3prfSljW09FeklmMFFxREg2PDFWSFJpTHRfT0RNY182VkQhP2FWeG8zR1BOWyZgKjpoamFATUVVKng/alc/M3YkQH1RZ3Ngcj92'@;
put 'ImFNaTR5VzVJRiFQQkRXWHw+e3pmVGt8KUkvKCNpNkNvYHRPKywjaiwycV9dUVU8dVpfWWI6YkxTS0guLktIQl1yLCxVUk8sX2sjZ3h3SVljTCFDdChQWCpmfXdmVmJQNFh7Mz9BLm0lQkJvOX55Kzs4US8iYTRkYTFmZ3Zbcn0kLkl7QHo/fW5MI3JjbUdta2Q/LF5FMkA6O2VhX1NPQmhXVkV0'@;
put 'a1ZSVFE1RkV0NX19PkM0Qll6fHxMMik1fU11IjNuUz5rfn49K0dEbkQ1L0xUcC5WQnFFcTEkeDAzbGUkRzg3ankmfTU/RD0ueSx0Pmg1bmFDeUE9Q2sleS5bI016fH0jWX5nR2t2THQ1VVVHWFl8MlNLYU1iXnY5fiFIeUByI3Z8O3ZFaSJWPiw+cXMha35ZREUxNHR3UVN1TnMrQWdpOFklbGZX'@;
put 'Mltza2R0W1BydmMhMWh0UCpvKShzSFJsWSFUayNwajQiWllHYmY5Xz9JRDNqVV98PUV9QD1tIX1tQ0pgX3BJYXRVUkxLSiEkdGk1TyF8NHYlKlo2Y3xxUGZna0gzIUQ9b2hXOmRgdmd+fiU/XlVWPWoiQHxLdTpwWmRHKWY9fXIjUjBzSD9EVSpaeEB3PTtRbFc8KyFUIXNeNDtXdnhgaEQzSkoz'@;
put 'K0FXenlqfTVlRmpZfCo+e0MmPG5qIV1zfGokUEBBSXxDQ3ksXyptM3ldekRVUUdUWEFFbnU6RCN1VGtCbC8/VHxkbjM6I20yZGhnSn5wWG9gOkR2K1g0aS9deTZqQVY5MEsvbmc7fT14Yis/K3c9On0hT2NuSjAmfnlYKXMoNEBXPTtMVWdNXi5NUl94dSs4JC5PbV8+STc2MT0sZW0wcEJmbnBC'@;
put 'VChoY29MZWZdbShNVyhkYytNRTFtTjtJRzpva2R3XzE/SCVZYmhhZ0QuX21iYmptaURpNlNgdXZTV0xaQSJmTXRNIm90VlNTaCVwPylYTjFWJUx4OFUmO1hNMz8wR0srQXpFImRgTm9YT29fPF1IdTRIJWpUZlV3OCpNO3RJLiQwc3cpT0A/aip0R3VXIW5CckxLfmtheit3PXpzbSZiTmxaZWNA'@;
put 'NWleUERLTzElSkZuL2J2WDlFJSVFKFhsP2J2UFFBd0VjRVVLdERVTEdoNCNARVVLQkRmRTBOL2J2aCMwfD9HOVB6bi5CdFV7RUtpIT4xWyl+XiwoX2NIeXNDdTtEdFoxRnA0fXZMfVhrTUxEOERVOXM0c2Ercl0qbXtjXilzQ3NZYitiXVhRUEw9Pnc9ZFd9JkUlaVc0JkUlTFVkLkMzaW0weVY6'@;
put 'QzMsfW17eXlkeUUld3xqOklMSktIb24/RHRHYko0d0YmW1JXel1bJEtbdX1pPDd3Uld3YUhvQWAqNlBAfD9BRjR9UDt5eTR4RSUuKFV2fnkiSyE0MUVpUjs/dWJZKHZ5Ilc2fCFhLnkuZENzSklIb1tfdXxgRn1GXUY+KVImMWVRb2J2Z1NxIXl5O3dEVW98emFJTEtISG87X1hrUih+LjZuL19N'@;
put 'MUxMfT1CS3VzNVphK11bdWJuZ2NXKFsiPyk5bXZVPCpbJk54cFtGS31edVpbN0hwUG9OS3piaiFdNFRkbDgkaHptM1hQNkRvPXc9UUxZPX5+cDVGT0F+PUwkLm9bK18jZ1t+YUdMYyxfQGRbfktHTGMrX0difFhNL3t8JFhYYixCdFVAMmBJOVRYIVVUaEEyRSVrP2A6UFt+ODR6azR+Um1NL1N+'@;
put 'eENyV0xPMnVYcj5mTXlwdll2OW0qIWxGSV5kMDU8PEtMMV8mW08yW118KX5YV00vW3xZYGBzfnZHN2p8Pl4mRnNkI217TEdaSiNPdlBRNWRuTDhNWGpPSm4vYUNofktyVzRxP1pdZ34qcVc0JWBlXiF+N0tXNCRgJD0hfj1VW0x4MVFnfU1NRFZqOV81ImtFVH1ZdjcqKH5VQm5obXVbfXBYWEJP'@;
put 'YTghfSgjQDVfMz0hOGgwWXNmZjBhYlVxVyopYSNyfkFwVzQ4YGowQH5ARUxjI187OCF+V0pXNExTRXQmSzt8Uyw9fjoyOF9NcDU+IUNBUl5yUlFxV09bUl16Q2E6IVBIeFgxck5FcGRZYHFVZWxGRXJPTW1mZWx3LEt6Tz5rdW1PUm0lWU5MNkFiV3VtKHtkbSF+XlNNL1J+aWZfc191RzdoN0hM'@;
put 'WTZybWR8TTU9fnJETGMzXzpQIX5uR1c0Nkxwc313OHxZdkMkYWUzUDFfWFlAfntDTGMwX3x9OX5UU0xjYy80ci8xfV85TTxpWHVHN1t9bVRfc34sd2Q3fUJTX3NIQntfKGEuejhSb19xTllSIVJVNn53ZWxdVj5uUHNneCgxMFtZfDpmPX5bQkxjdV9TMzl+ZVJwTChrbnYyakEiMzN7fFl2d3tr'@;
put 'YFIxbktRTiE4eFNtZmE6d2U4TyNJeEJMY3Nfe3I5fk9STGNyX2RtOX5+UU0vJnxHcmBzenQwW1Z8OHBeInJEZW03YCNfMmFtQC4/X2k5SlpEcVcvQGk/XTFTW1dLP3VTSnMyLm4yYD1fPkUkPT9+fTBGT1Z8JUs9fj9II3xVaGNuPilRQ3FXOUA2ZiZ+fkFXNC9SJn52T21iYE9NMHprQH5+QENI'@;
put 'On5VIzBbP35OVSJzZn5iV2J2WnUib0hIJWoxNWdgXXJnYFNyL3BONHIzaz9lT0daXWk1KSp1P35kYF18c1c2fit6TGMlfkhrTS9BbFg0ZH1FcjF+a344eE0vKD4hQ3FSR1pNP1d2UElYTzYqQFBeWn5rT3NHX0xCIm85RjdqS3FRO2l9MGo6clREPCpOJHo/MFNHWmd0SzV9c0B+W305eyYsbzF0'@;
put 'VyJzYixBdCo+In4kcz4jKWhefmt+QWBScT5+JX1WZXkoYj85MkNUWk5ba34vSGZkflcsTGNgczxuek5OMn5+On0yek1+ZzEufV4wPX5QQHs3REF0KGlzMCsoNipaM3doTmZ8Kz9NLlZ1alE0en47eDprc1syRz9LKyVPXXx3bkBzWzJsfCZScnZ6ay99Vyg7SmlPPy4mamhWXjAhfjY5emt6c0BK'@;
put 'MVEoMltoKlR9Vmw9bXJSV2ArVz5KU0shbShiVT8/TCo3O0hpLEp7eWNuPno4PlI3TEg0SC9tcilAK3g5UVBOYlRDbjk5I1IoPzZXbytsOkM9fnxIL315djdUXnkxVGx+MVRTYGlIP35qOz56b2I+LmJJJDMzUXtzOF1NSlQoVEM2fFVoclcjfVsicVd5fl44VzROfSFEWDRJYEI2e3NvXSpPXX4h'@;
put 'OkNILH5FPz56KlVBImA0fnhkYntKV1QvX3htMT90IXVHZz1aWlFUTGM4Lj1HMmBQWV59aWw/c1dUZXpQW1h3L3wlOlYoc216W1BbKDxVV3NtVzQyYDFlZn5iLjhKMWBEQV59SilVV0QhbldCbSUsdTIwUk5bYkUvfE8qKH5CIWRfQW0hJHUyOlBOWz5EL3x7dHF+fmhLTEI8cVdBVG1iWS45RzFg'@;
put 'WHdxflo8Wlp3MkFOTltkR159dyFSNHgybE9efXUhYHMxdlpHKGBHQEs6JWt1fHVaK2NmWmU/Rk1HWllNOCl8fUViWUcrKGI/JU1HZkpvZz9WJkVFay8+NWhtTzUhfmkkV0t3LDBFSElmZyJ1eWd+W0lnVFRjZ0YxeDV6TzEpfVtqenAjN2VRJnErbHhvfCVpI3koaEZBflsoZldrLzk8PHxiZldb'@;
put 'YypCfH5UPyNaXy9dUTxWKG10VXswXlEhYTxRdkdBfWEjRnhXS2oieEU5R1lOTURgKTlfIXksYG53I1lGKmd3P0spTnFNR1pJQTYpMFJycnZ+flt+YDdZPHlmPXEjVFF3aTkqX08rSWV6K0lQR3A+eVIuYSwvK2hlPzV1NUp3OzNqYmBYME0sMCVuSmhWT0RRUiYzN3tyY2NNIlhyPzhCIyhFeTRl'@;
put 'SmBfRi8xKFU5P3Yuc35RfnkzSmYkM2wpTTBJOjhsc0Fsc1JAI09BXWpmWWtQTFN0fGtba0hadVdmWVh+S0Z7b3pvMm90ej15R05qTyRSOF8rK0RiK2NMUmI/KEtsVTRrMSVXS2phNUl6W2cvaE8+NU5pU0Znfnw5fF9mS1IxO1ZsVEcleWhSN3lAKXVmdFFbWHdhRHtELGcwWTc1UnV9Ql9aR0os'@;
put 'PTVubj97elhFd0UodSImP0xVaHlGRzJYSyNUX1gzVkMrMmdQM2k/KlpnfTM7WltXUz5OZTM4LlgzcG9pRFNSfWdwViFKSj9GdlM7K3RYVktXNC5nZzI9PEB3Uzh6eWFvckEvOCkyZW5VUiVhMVUxKGJKOWhrNm83fXZ3R2M2e2NtYTtCfEZ6b3ZHUDY9PF5sX20kMCNFM0cxfGF4LCFsaE1uQGh6'@;
put 'ejB2UURZeSw+el5ZXnhIUENeZ0lIZF8haSEueXxnaGI5I3VLTEVoW3chJHEsODNUWD1aKD8mM2g5aEk9Wi5jJFNyQmhPJjNQJnw/TmUsXyVDK2xQIS4sbEMmciFVXkojKWlpPyJfUzgpckl8Omx1cXU3PHBuK3xtW3BAXldNI0VfJWZyRkByPnFrI19HKDl7RkQ6KT5IRFkuJUojUlBGVFU9JCtl'@;
put 'PCY4Rn5AXSg7ZEtwUG48U1FNPmF7czljamBpYzAwaFJwQlEmUT8rYCh4UElTfnVIZn04SHNndldyIlp4PkskamxZPThRbzhOKykqUVI0cEMmZnJ6XUo5SUtnTk4jRWA6WTgsbDIpYjYwRl9QNj16e3s2SkMrLjJwOV5ZSVNIUTMlPG5rSS55Wm1OK0pNdilXP2EsayRzQElLITc2RzwyYTFlXWBd'@;
put 'KW02ZWtQM003OFd6XnVFb0JoUUVuPDh9Jjgsakp+QF1zJG5mNjlfPT49TVQ4Mk8mdHsxalFyfjA8cHU5eT1dJTV8OF0wPk99KTthdlBEWVMheUVjbzQ3RD9aNi5RJGlPdSVibCNfaixfeUAoKTBHTjdSSGY3JTEqJTgpRV0jMjlMP29lfnRyLCEhWk5tUXxCdztEMGoraHYlWnFYflJmbnFBbW57'@;
put 'Lz95cEUjJGJuJUxDWyZgK0NoOXBGb3RIJWgvIVpsZ04qIXBvIWNTeSkuYUJOX0g1d35JQyJdRGY3aWRwJE1OR1o9aCF9Wl4pOiNNfmpkeU1LKyldfUJOP3QjWmAjcUZYPF1DZSMzTlUpJFNrWiJGI3pKb1kwKWd1fGl5PmZDOls5czVkbEpmUTIkWm14eHo9bGBTIix7bUwwJXcvPkAuUmNbYita'@;
put 'YCNYVzB2N1crY3lQJD9HT1s+eldsRU1hTXk3V2JYMldXLzxbe0I9bmNFVXRIVXl5eHpEal16fih5eS40JT12eGA4Ykl4QmMoaTA/NXgydUU6Izc4V2FtPV95c3V4TjE6dlJFYHxQOnV4ekRqODF5OXZGIUJYTzlvV1h0NDliKUY3RkZAR2F7L1ViY3ZePEZtcnQ6RmxoaEZMNntIWlRYcTJZK1pM'@;
put 'OXZ5ZF50Kno4M0xyQT5PNCNlZV5OYHR4elVnU1RHWDZSOWxedGVVLkchP1cwdk91JWNiZEpCKllxR0I4LnQ8KD9tdTY0QE1uQ3p5MD1vd2hUMUpVN3c1T0NtWSN9dU91JW0lZT9OfTBIa2N3UXBCaVc2QEx2WUs3VUNkIm8kNTYpWns0UkM1O2BZSTE6YFE2QHd3SDNiUE4wPzV5TH5JSzhWIUE7'@;
put 'RipwNGxjUVd7Nm9DLzRRam1aYll6RWk/dzJgUWpIb219NG5MTmAwWSJveyllIyRRXXU9VDlfSHJvbXw7PCw1TWhsOTV8QDFMU1F6TigjYnh8N0kpbWhZMFgzUXdAelNHcEx7bWh0Yy9UYUo+QkcjPGxYditObHYoQk5CZ0VIPSpES016MHlJSjRdViFzbi9vbUIobmZsfjU5IithQlorWkVDZzJ5'@;
put 'OTR5ZF49SnBoUG8/OEhKOyhQRFV0a08mWipXfFJTZV58JERLWjx5W31AdVVOPHQiWDBZIm9QalB2K0QyVyNkTCErfGw2KmM0WClGaXRVeyNaNkE3QyM0O2lRT2lOUW93PnosJVR7ZVFkbUhAaDVkOUpUWGhFTmcrQixkd090VWVHQ1RfbkdII3ozYl43eiIpZyo0fGMxLytlZVpYb3hbNlhXNnhU'@;
put 'Oz1HKy9GcUkheTowNilIRGBRcClAUXApM2hnTyZabFdFU1Q7JEFHUlBWYUIpSUBRZTdJI2RPdGcyeXNFL1M4OFVrN3lBaiZhS0N2aEwzV05SdGJPJlpWV2tTVDt8TGtOOShbOUZOMFdsUXh4U0g9SmVkcHpxc2lrazghNUZtLjx5Nm1Ic11HMCwoOltkSk5wWUlDPFF6KVMlImQwUHc3eWMhXTE+'@;
put 'PiFQL2N2KUNiaywvZkUzdnZeLGRFO0FPcDI2dmF6PXpOWGpodj8mLncuRiwhNTR9dUd6QERwQnpjcHpLcz92XzcoWCEqKCM1WGV1KVNkR3hOOkFFNn5bdlt4REUiOz5zUHZMWzo0XzI8NkZsTyFfMENlWmUzWGJQQkg3Uz9eMGJQOHlDZCJvKW83KWRLKk56dH5sJksvamdsRWZ7WEdpfGB1T3RV'@;
put 'OmNlP09GKDlEeVIqZDRhXV52T1dEWnsydU90VWNHZT9PRiozWlVrSGZgQDJ+eWxIUCIuIT9tT08hXyU7OzskWS5EcitLPHRNc0xyYnBKbWtwPTlfJTs4TVUyOVddMHVDYzcwTDAudCpzRTdTSWhyMmYmUyZwSiY8OCNoeE91WzJhTXUlV1JNdjglRlQhN3UyUEdrSzM3flI6R0ldYUxNYTViT08h'@;
put 'X208KFIiKFlObEF1MDdmN14+MjBaNWJzX2I/OyE7Q18+I0dEdX5GeDVUeGR6LG5XZVkwWDNjY2U/OyFjLCkxZXhwX1BXezg6dTJQL0Brel1HJEdlcVRtU3VxemhYdHR5OTFecnpscil7TCFiUm91Lkc4QVhYXzheYCN2S2QwWSJvVlNjI3VaMEYqaG9HUHk6ZDZTWmlNRkdrV2glWnVMPCkrZWxD'@;
put 'cGhsS2lMRkZIREIyPWZRY0FKSyxYZVkwKWdjYylOcml9ZWFGLyszT0giN0xUVDhlfCh+UWJNdFVLaXc4V3lBd3c2XlgrL2NrMjZSUV5IT2whU0pCfSkkRXtIXkN7dUUpPDo1dH1NWkB3SnZpfFV8bnhjc3VhY3dhRUxIUG40UHZ1RTojRXJSWmEya0AsaEVIRiJmMkU8VCs8Ty9baVJxQkUubFNm'@;
put 'el1ZanZvMnw5e1V6bFFZU3EwRUQqUVdfOFlFM0MqLCZLR058e3wpO3ZeZF0qcU5gaWdBd2NxRHtuYGREc3ViM05ETUxIX31yYDZTaC9xVT5oLFRlSj9fcmkmaWNxOl1HWnM2cEg3TnZVRk5iWXNvfWRqYjZbL2ErWU43XnUkeW8wTi9GNn5bUFpZdlphR219UyVjZlo0dXxQOjZ3UzdGMlFnKUlh'@;
put 'ey9meXNFejB+YEl3WXs2eXlWLHBeOkF1QUtue1pJey9hRjNJM2x9clAhS2wxaG83UWIjKGpeXnE8WWR5L2QpOyh0W19rTik1RlRuZGk2dy5kTzh5RG8yMHp0a0hhQXo6dlgjW0RLdUBkbHJqPUF0dGkwKkIkeTw8ZHE0WXd1byN2T3UlMUxjZSRNbE4uPk15OGNgOGw0THpJIjdjNVJvZEg2MW42'@;
put 'bF1hXjpGQj5yLklkZWZ2byNiY2xoSCpKaEpbS1UiKUlpcVNNYU15XXY5X35EanlpQUNDMlJzT31TI1NGMnNkWXVVJSk5NEQqX1JKMnVLaT9mWi9IT0FPV0A5eHdLTF1taEd1S3R3Yy8yIShaayNbTzUlY3YwSWkheTFOOjdeLCIwfFVBOnJvNENKRWlpJTp+KjwwYHR7fGZKbjxyaWh2blFAX152'@;
put 'TEE+PDcoclNLRHtrRXd5dSg0alk/U1J4cWxIKXs+MyxHPFZGVSohZXw1aExYcTxmbSZsQmpUU3h1RUc7fmBTeT1bYTo2aiZ6elcmL3dRdj91Ti5JfHFebVtCYWl7UlNtNDohKXttQS5KbUxaKXgqMyNIVHA5RHg8U0tQbzQ1bWxfKVBvOnVMdF5YSUF4PFEkL0ZacVVZK1pVXVZSImMoR2AvYEtk'@;
put 'eDtmJXAxOjRZM0I7dmRmczM/I0RhbGcoWF83OFM1QXhRPmFDSzxMeEdHZ3QiWCkodXFAT3U1RnY/N2NwelNVOywrZSJ2aztCWkl0V3hTZ2Y1UFsrNkRIMUVYTyZaX0oua2s4KTUpfmBla3ZHKjI+Q3BQVGQuQm9ETGl1bTRATSRucjN5OXYvQiJzSl9GYGsjXUlSdGx2TSNNRUVPTkJkIm9MWFl2'@;
put 'LHdBfUIiLHFTTitoMig8KTs6enZTdnk/e1FaMFdLLEZlP1JNOHlCIjdAfFJ+QjokYGtBOEtGJlBARFYhSGF7L1B5MkV5SEUzfn5LUCQxPFBrKXFaX2RgbyxqRWYodjVjcHpicGlrazhZQCV+YGV3dlVBNTEiPixVOXgrfT92VkE5ZitaUjtmMnk5Qno9fSloNDMxbnJDdCFjQ3FlNlhta2ZaTFBN'@;
put 'YWo5SCplcUZ3fUBCIkVdOkY4Rkh6Xm45I3ZSRFE8I0I1QE1dWzEvK2VCd3F+bkk6LnBFYS9bTVRhPFRmXmhBM1tDYXsvNS54RXlIImB+fktQUzwuYjYhJFBIWDxUQ2V3UWJ2Wk8mWnJVRVNUO3x8QiJSdStZMUM8KUJyZnYhZmM8eFdVZCtaLC82MXk5RnpBIllsQTBZWEN1WVV3QypALkk/V1oy'@;
put 'd3V4eiYyYllJaEpNenxBdHduTGZLVSt1UU5+MHIueTYkOHdjcHoyb2lrazhaQCV+QDkyeDdXK1VoRmUvdCxwbz5ZOlpiWCtaaS5mMnk5Rno9fT9RU0c5TCJdNjpNZmYyXmghMD5jO0lZMCo9TXc5Xy5HXyxCIkw9RkxoTDU6JmMmTGlSK0JqempXM0pzaSRHZHlpd1F7SSpkeGVPTWYuZEB8KWgm'@;
put 'IzRMYlJodzwsNzpwW0IiYSxVdkoqTCZ2IXIwQzNGOyRZaV19RF5BfShVQ3RZUk1EPUtXJUw6JExicUkmSy50PkxfNEJ6bSZoI2VNR2x9UlV3Pzo7dCFkR2FEQH4qIUUuJDpCPXg2RiJsYzV2LzNnJHI4aXJ1Jlcpcj5BR15SN1tgQ2tlZmhWVkpLMzRvamkpVUlHXWx1NDI0eWV4TGUyRCEkVD9Y'@;
put 'Jnd5JjNZeVVhWS9OblQ4SVZDQE9FNj5lLi5wMU5pTDdTUXRVKmg8NHFjVnlnbSpEe2syKXhQIj59eng3KE05ZTVEJV9ga3tSPEJEMmswejcoTV1AdS8lVCtPL0IldG5YdV18ZV9MfTEse0Z2QWFnQkdTSU9NRUlIVXtXPjFzZ1FTWllRVGcoVyYkY3c9WHMyd1txMU41TGZ+P3JJI3c/dj1YQ2g4'@;
put 'WFcidHU6SFhPcio2Ilk0cWNyPThyTj8ydXE0cHpBeWNNbTVeRlBrQ2ElR3pYZU91N2xYWVB+Nz5vXWpBTWtuSVlkQmoqUCxAWjtDZ3ZIW3hgNC5IOjZZIkJKTT5KRXc5WF5SS3piViF4bWUlSEd1WkBOSmhKYmA9bj92PEVeS3MwbWZfIm1mYDoiJjhHdW9iejF0Nj1kbG5aUlFoSnM6X1lodENl'@;
put 'R2tfRUZnMyhKZl06Y2NgVnVjb3VsWjkieFlWO28vIzpibCJ6blhKdF9rQFJaImUmXTYmOm4lcG82U1J6OFpRQmVvVSg0IWlkKjQrcXt2eit7a30ud0xnVXRGQXY+QFk/SDdISFosWSFMI3dPSGUqNFJTK189eFpHZF5FVzAod2JIO0xgalZdUCwhOVtAQEBGXWkmez5meSZAcCV0JU4pSWdSckl3'@;
put 'aVROQXY5Pzk0NUZASVRLckh3Zl9FX00lZHNpXXJYRHJ2bG1LekdMPmFKS3pHPkVJeGF5KnlvdVRkTWIiKGQkO09ENj9lV2FKTih0d3IlYG1udzBhJlJoV0trLE0/LGhjWXJpK3JtMmRYOEsobUdtPEN7KHo2PHcsNFRhdGhud1JSJF44a3o6eEIoWTZpVmE/Yi54W0Y1OlhYO2gpVG1hP1o7N0kw'@;
put 'L2IvRHhCPi9idi42TkZAaSEjTG0ueFpGRipiWCg0ZU17TW5SWFg3Ml99O1J4TXZTOGNAQmd8QlpuN3ZhNT47dEdeVk4pfl5IOSNvRXptXlIzY2EqSUx5OVhmQFlgSntKem04S2tKbHBaKWc0Plk1KnhJeWNRW0QyX0gjdUU6QFd3I0kjKU1peWEkUC5zdX00JVo0R3EibzRTSkVgNyNUT31LLHBo'@;
put 'VDttNmM5TylqNmRzIXVOX3E3Tj5GZUVfPFs5WUx4QlRtNm8uVzxGdUxSX2lSYCguayVkejJ4MUdaOXtXIilrL1J5dm47TUIzamMxLFdHRzBJN3glYClrLkExYVRta1tPYEFnKUdvIltMRSF5VH40YS5GUyZnW1F5dTQoQnRqWEhlOmFGZzVDelhsdF9aOjt1Wmcqe1EkNyNYfklPNXR0TWxIQSJl'@;
put 'ckd7S2hjdTtOTF51SSlyI2kzWilEeTQ4STc6ejIsLnd+KFRYMzlFRn40QHRfU0dSOnZsNHc4KGoxMHpXZno0KW5dSihIUEMpOkc4WEtZT1pBZ1hjUHBSX2FXS3RINy9GIz0+LywsTk9QcFNoSEUzXUI8STB8JX1JTXUiZT5sZDJodXYrWlZWOHRQfTQ9Ok15X1M5MSMpa1pKUm4lYTNDaWVTRnhO'@;
put 'WDYyc0JGKCJ5UWdeJThNIUsraDBDeC5lQkBMeEc0YSw6ITJXZk10TlhNaVhGOlVTTldgbXF4SVRKKTFOWG9gOihlUCt6QlBUNSgkQkI/aGJLMEAodSZmflg1elVZMT0lWm4wMFVOaDEiU1lwSVVAS0lnNmVgZnEwVXkmJEIoRmVKU1E+QndVZTJtdFBwQmQ8UV9XMV80TDNrU2RMaU0kVHp9VzYy'@;
put 'PHZ7aEcya0VWdClXR246Q0JQblQwLklSPmM+LygqY0V7dT9HfmREYTU+RV9uTkZSL0hGSU41MFc/N3lxTEt5aWROW0NWNjBrUFRLXW9Me3QrLkdIJFNBTW9mfTBNYmJ2ejcpeUxrLmM8RllMTG1aIXV0Lml2THt0NFM9eSNXN1YuT0lJanY0RHRHOjc0NHNFcmJGSks6NyhAJD4+WzU0N2ApYiVM'@;
put 'SCJgQC9EM24pMnNOL1U3L29dakhKNVBFbHQudyFwWCQiYWxRd34xYi9CYDFuWEoxRU0mUFQsNSR5IiwsNTFRXlg5QmFrQ0ZtXzIwLldeVmdnQGc+L04zUTV7Q1MrZjdSQC58JEssRHx6TFtOQT8/RyE0Ol1xNz1ja0xCQkRQWT9JemosVSVjPUNgQFUhPnR2dU01MzBSM3BGLldjTGUuV1BHMDAj'@;
put 'aCFDNG98RTZWYzJbLyxjdUdBLE59UDc0cS4uK19BTi4/KWhlYUxoRW5eQDA2bjVIcyI+QDw0U1ckWmMxLy4qIzxWaEZzIjtya0xAR0FEWjZGazZLMDIpNy9gfDZ0QiYvSyErZiZDNChtei40T2NkV1tEWWpxdW1rQUc/TW4/NWRDYWQ4ZWU/W3sweTokL0JRJiFMfWxtNE4oRENZIjokeUVFJldn'@;
put 'OUwvMjFrWklaJTFbUH00V0Rjdz52S31ETTAuU0RyanZTaiEiSTApYkI5N1BAdWB3am4iKzU3cVprPldyWl1CW3MrLlJYN0hdejJRZDQicClHIjU0eUxrNWYuL1ZpUWYkOzZ5Vls7OlpdLlB8WDg6bStiZW9vTkw8QVZ7QWRjQXhCZj5edlBDNHdVWUNkWzdWIVNoX1FqTGAvK0BNTXRgb0BNfT1F'@;
put 'IXZZdzJaX2tkYDJMdVYuaH46QjohYThYXVgiJCJtTjd8SndjYitBW1RYMU4wU2Q0MG0+T3pqQTtUMEcoTDF2TE1JODdYbXcxfTp+Jj89XW5pWj0ifnxHSFVTSkJNfU5fU28mYWFNTjEmNFBNdGlaV3hzOT9UUGFDNk1CQkgjJFpqNDhrJntDPXFXQExYa0UjTlA9WjR3YTQ4Iz1taFY+T2xWUSxh'@;
put 'NDJLMXR6ZVlaLCw6NUVCT0Q3V3VuSkl+RjFQaX03LG9NTHR7Q2xed1lCZFgpcnQsI1QwM3dPUGgxWiV7KFpOJUprN05ALnx2SWpITE1WMV12WGY+UHZXRjRQLl5vVTQ+Rk4sb01yTE9sZGxCNkVjaHQ9aH5rMChXY0lESmJSZCl2MW93QHcrZFg0YzkpMms3IlI3NE14QzppKkxEOlR0Uk9CR24/'@;
put 'Z1Q8ckhbPU9oYk06STYxW0IxRjNjTTxyO2pyNWd0MmtrZ0dEXiw3KkUxXlZufi5nJlg6eXlkckMyV0ZtVEhkYEA7Sk12blJkQ0NlQ0FZI046N3U6RG9bUmFGRGZuYl4oPHd2dTl8ZCo0YHhEWGRYdS5sKWB0Vl48RVo1WGMvc1BkWGczSD94TVhYKmVDNzI1PmNMRjc6TlhGeS9CNiooeytCdm94'@;
put 'QismNyNeaG5ib0xXb1JzdFgzVzIzPEZ6ZCtjKks9ZmF1cV5xTGpQa3k8PmwwUzBeLCF3OiVZV0E+PShVM0w1MWI2MSR2QmZQZVpdPFA3PDBHM1VsR1IqQFRZQEh+XV00NCthZUdmW0NhbnN4V2Y5MHllS051RmFhWEhLR2lLRVJ0LmVhWkk8N3ZqLyxOWCxFSDRue0V3Lk59ZjIxSVFKKU82QCVC'@;
put 'ZFAjWGxnTUx6Uk1DSD17Qk5uNElPPENdYzk0eWJxWF1rTTU1bHZUJT91ejQ5ZS9DJEkiV31GVjBuSncpYyJXKThlemtYUH04V0NKZDVFTUhGRnY/NmUwWyNUaGNgOS5iRGxheXxrVko3Z1VMZj9ee2lNUnh+VH1jPmlgK1E7MSFvUlo0W0M2WHhFP2gpa0tdK0RuVGNpckMhayNkaWlOY3x3NnlA'@;
put 'Qm02eHxyRkh0VjdkP2hxdlA5OEhQM0w2Rj1MYmUsN3ZuQVQpTWhtK0QhZVZaZzNQP2FdZCJERDJSJSxgQXZ1M1oiNV1JOXguYjlYQnRSJEBCK0t4W0RIQ2dOY3sqKGFMKzMjMmwzTE90aTcpM01jMSlMdHRmUGZRO3d3QnpPP0J4T2NRW2kjMV9hSGtKPFUuJHYyITFVJHAuWyxnLm85VC9EQXVH'@;
put 'MlciXUl9S29KOXtSR3EydEZCPlBnQm5uLjd6SVhCUTYhNVE7VFh2UC9HQ1dBZWFVRnZRdDd5dUhHS1M/OkhvNjhkMF5sWHFGV297dD5NajtbWnE0JTs+Q2V8WFpMOG1PQ0slWUpZfU9AaF1FQVImTkNQXlA9MSRUeGBBOH1LaFo7a3srKUQlTHRlQGkhRWJkWkZ7REIsY3B9b0tde0NwRilXMEQk'@;
put 'T19IT2lmOGRTI0ZWVjxpSlhrRFIsLkJTe2RLZUNRT2FkS0NyMEZ0dS8sMSImTlhlPz1MLyohTWUyb2F+USRNdTI7Z2liL3lyaj9KZUo6b3JEYHliLG05JERDIT1OLE5XezppfUFrSzhAJTtuLFNDdTRLTzElZkchR2UlWi5tOTJ4S1JYazdyakgkNVNGSlhocz5sN01tbjApfnJGZGxSKzQqJF1l'@;
put 'XSpITTQ7VlhaY2V0YS9AUUdDUSVLJFRkNXg2RilOQGZra0NpeHNUbVp0TGgsRCEhajFZdiZAbnNUbUpqe1h2djt5N1NgVyg6TyI0bDRaXTp1KmFxWmxkOSNeP0M7OTpFK0F5Q1oqQjUlUFBHO3orfFYkTCt7d0NzPFc9Z1VhbmU1aDcyIWljRUJFektfOEFeV0dsb1YoWlRHbGd2amlpSUlYe09G'@;
put 'bndBUSVaVGdmbEMjNTphNDJxaVRqOFk4QEw9dUA8b1cvMWluXngoMG9tdDhATD16aiMzYCNBWjhFM2ttRlRJSW96bW1gX1hQelt8YWxFaWJEJWxlLFYkInQxTGYrcCorOjJBX0MpY0NmUTttd1tOY3dOY3c1IkVYTmxzajwxbFg8V3VZRGdHVHZqVktDQkJQUE5bTD15Q2pZa205Sml9X2shTX1F'@;
put 'LzlkYjlbfDUkKmlDQXZ5S1h0dVc5eXBtQTU9NFIxYmFlMn1RZysjNDRoOTRWS3pLfEJHR1RUcGJedmJMdmg4TD5bNHZUMyVkL01uVHh1IlRQZXNpXUEhT0V3Tzc3dURfOl1uK0hQbzd6Yz9WMjxnMmdMblJndDpgSFBrSGYyOC8zIS5jcUQ6Pmp6KWk3ZV92Q0IjbTFAYWx7VyE0L1peZV5DY0RP'@;
put 'K3dTczRaSCooT05tdUtQQ05xU150RzBvNXBIKVlLYSgsOGVQT2NjVTVzU3o6PFRhVj5IP3ZbSVF2WTA7OmJ2b0I5WXNBZFN3cW0hMGNKUkIzXUBZNHYoWjtCbENaNnxnaXBMcnVrRS5MUnYyV0FBQUFBQX5sZ0FFTVFhdTVbNXhEJklpb245Vyg+d2tzL31jOzhOeTQ5KjQ9XjZSITx1IVNoRnRS'@;
put 'XkBocXooWX4jTjc8fE5sQkYheiJtWTduNjFrcFh3SHhAVjtkT3V3MmUpOEwxTUZSPXN5I2hhKF81NCNXcGRRSmVCOytZZjJ9SjowSm4reGZUQ2VfYE1tWyUyV0pFNERRUkp8RXZ9LixqOVhkZT4paFJCUUBkeWRYJk9dSzV+P21zSlFQcz9WRj84TF9PeWtpKGFmTks+bDxpdUYsLzYqNmIjRGcl'@;
put 'QnpzTilPXkdpZjl3P19rRW9lKV5oITFFJVN6fC5mNF1ePUY+JiV+Vl01c1c+K2AiP1IhOCFxMkUwPXR0NWJkN20rRXguQD9pPUssbVlELy9TU0ZEVi5LQ1FNeXVqWnNzfjNvLy9LOkdCOHNJXlI8UkdZc1ZsajpVPlZZcyZhejkrOiRjK21ddXByWUc0TEduc2x7UHV3dlU9ZUdqbnRKWEBvckZl'@;
put 'Xng+fHdgOmUoRlMkK2R3U1lyOmFNcFM0WT5CRVVKdnw1YnVqV3BiVTVoMyhTck5PTTEvVFZKQzNJIX5ldz9fcCltQHwqbU96VHRsMT5xVXBzRnVjaVVCVTk0QjwzTkBvYUorbSgxbyYsUVd9NnBDdy82WyNrMG5YYWwociRKQGRaO29fI29RLHV+dHtiZUlHKWUoWi9AIltHMkJZVDt2JWgyJm1e'@;
put 'RkFITmZFZHRWbWdIelNSfVZWdCI8bDUrbTJPNXx3L2J9KH5wRUBRfix0QnV2L0BecSx9RGFPZl0vW3BGVCVvUTdsSEtLVFFZemgwfktWdGlVJkl7RWliVWJhP2pXb3hSNmY8MngiaHV5SWBJIztJVGZWen5oRHQqb3RVXV9BLE5kfnY4cjsvWGcuek49cC5BYERNdTNybn0uUCtEaXkyNFtfb1t9'@;
put 'b0Z5W09FLF9zbktTaXRuczo2UDBEZ2U+YHNXaF83OjVkYVdDVStGYClMKyg/QkwlUis7YmRzM105c2UlNk9nQntyI0JFN18/b0d1aT1udVVoRF42aSNTcSZbZnlufW9PQnVFYWE7OTxrSUZyeUdoZFZbRkttVVRsWTQ2TnM8RE11andTWl0jam83NHEyJFFATFNicFQ4SUZYeWk8eCkhdVAuUGRA'@;
put 'd19KbXt9MilfYGA/b1hFRjcqQ3NuK1VxYzpsaGBeQiN+eHRlSyE5KCFTLHMoU1hfcXo0Jn5UbnckKUFeXmpeYHxNYmdOM0V6TiNeZ3hKUkA3b1txKjsqcjBFa2RLeGRmIX0pQTQlMi8/cXlOSH5eT1teQ2VxPWR3IzM4ZFk2IU1DOmw5JlYwZ2J+ajA6W3JIbVF3YnpaMnluU3o1dHVeW307eTBO'@;
put 'ekpFeXosU2xELk54Omo2ODZfXlhzQjlCd2tiPFQ7ZGlONWpEJGdzRnQkOFQwL2J5bmVNbkg4eTkpZH5JK09tTmdTQnxTW01fPlY5Wnc9SjUofSEkeTpMU0dMcltafT0rOzM9PEMjUlJpZFJeU34jJCZ4dmQhSDRMSX1MP0syPzhCVXNvM1BFVnd8KXA+dyNiJSpKYUBUQiR0Old5bykuOjJ5fXIy'@;
put 'UGw3cnI2T1NpcHxKT1NiXSFSbVVWRjdENHxTR3pSbX03NDlqc0BNMkVxJltNU0wlfFAmcTBqR0YubEA2UUlqNzRdPnpLcUg+aSYoWXQpUSV0K2t7STpHLEQkfmc9UiouaWAmJlRnSSR0NmFKailvMkVEeWldJTRAcG0pe3k9fmVqR2BUZ0JPYk43WVhHaCNFd1NAWktuaXRZTDlYdV00WW1MS14r'@;
put 'fXtELyp+aClKKm1xSltHc3JrZD9teEFJXzEuYkZTOj0lenZYKn50XjpAOFNjV05xUkd3OXd0SGYxS0JPOV4wbmU7QSxWJX5aITtIN3lhflohbS59Nk1DV2FlWTBgO21gMkhsNWllYUJjREhyIXV6L3R1M0ZZRXhrZXo6cnMmT2sobGZscjcodlFxVG8rQlkpZyZSXWNNTChnOGpJRFZ7KDshPEg2'@;
put 'Uzw8biZ6a1NKJDAhKWplLyVSJmlOfTtXRHZPa1VbSi92JUlsNSwvYlAqLmpQbUlyZTpOZ3dbXz1gWFpfYD42XkJ1RWFbe3xeZ3VFbk4kWF4oRD15JmgjPDNHVitddEZHK3pUaS4jWW1yQVdzKSh4PlEzUkZdSWpfMkEke3RxWF1OeGUvJDpzX2tQeTYsS3tyNz8yMTt4Xmx0eGh0Qj9bWyF6al9t'@;
put 'N0ZgZypDITVGcHJ6PztePEFfWDE4NkwoOi5wR0JVQmBDZlc5SVtOO3k7MSE9dGFyL3h5PykxaVdZTzcwImo7RCF9W1cjPlVTPjt8TG95ST5ofj8yJTczJTdQQlRbRFRiPWFvVnJsUG1DbSZAfCRnWV5hbCt5MiY5OzAwVFg7JWdGWkQoSm10LEp+NnJxZ15pbXg/MEU5ekdeI0RPMUpxMXElMWYw'@;
put 'NylkbmNecXlLfVNNdFIie0I8MCNpNk1mPXgsIzg1NGAoQzVXdFlseS9NOT5yMkQxMileVWZvSmIvRkowPm5AO2dZI1Zva2QzX2xfcUAwVHR5LHZBPyskKEMuJSRycVBwJTpCTDFnKHQ9SChyWzpJanc5NyI1PmUjaDtZUXdmS1VPLHthKXZALnh+dlA7XzhRcmBRPlNZcFIiM0ZNWC44ZnBKXX0+'@;
put 'QEhVQ3RaMkFDJkxeVkR8OkxqcmJYeEIsP1t6dDlyYEV+XkxHT0JIP0ZYflsuJHpTUzB7UzN6R2tWInkoeFM0bSZALlc6LjhPKmc4TTAjMFUyMDBLfHQmWU5VfGxBYUNgZCFNLD1zXzVtQ35xP2hbWmBQbHtxdCVAJmRSVy41Y2drVihhKTU5bD43alB9T05JLGZsN29HYnRITlM/KixyZExsQlJr'@;
put 'T0hTU3VyNUVsKCxsTStoOCF6bjEkNG5KfDpaISljJEtzM2FiS3c6UkZqNHFJMkl1LCJlb2RTTDg+SnM4b31+dUpAellsZysqbThaI2skdHVkbmJBfUdgYS50cHMrOGliIzZ0KElBISVbOG5EXnpSLzwpT0pKLHZXfE0lP01uNHo4Z3lNZGkxMUZPbiE4aTZ5aEZGYCgsKk1pbU8kI35QZVE4KGhQ'@;
put 'ZUB1MTY1NDEqY21tSzFoWkNFOVRjN2ZzKjs2WDZhcmFVYnF2YG9bP1ooZEtYKWBSI0hxZSpMLix8JWZIM11FLHRtfVlaJWBAKH5iQDEvcSN7eWlke0VJLnU6bDFdO0tWJHVnUUhTLmptd0Uxa0hAVXxYcSNhUHAsS1ZLQ28rNjlHQWcuQV1MSCt6bG0mNyExJSp7Un5ANXwhYTRYbWc3XSw7SFth'@;
put 'azRgQDUoRlZeQmUrIWE4QEVKNTBGXi9Yc2NOTXY0L2JHWE45ZTJEZDFdNiNbVjFqODoyM3dwTzUvISl8THptZFo+M3NRTi8vI0g3aldfeiFSZlJIQkdtZlpRNDZQTGZoYnV6bztgfDFPd1VlemJ3PUZ+KXBkKCZhJX4sSXwmIyVzTDFDemt2QTo/MUlKeERuIS5WSjQjVl1bWzA7bUtVQ0tYXj9F'@;
put 'bEROfD8udkc1bl00cC8sK2w4ejNnYEJodmBVeUh0SGhldmhWamAjT0xkPjEsQCIueXM2JC41JTUrVGQ2NW83KXIrfDI8PCxeSCo7VU8uQTczXUdDRVlKL0A6UUB3T3BReWZeZSJbZFBaTm9fZHpAfTBmbiI6T293bSJsL0Z9YnpOOD87clZoWWJiNXY+aGUrRG0/bksyJlRFcXxqbitsUzJ+LkRZ'@;
put 'Vn5gei9eXyY6UUlnZmM0IjVjPmZxMzllUlsuJm16cTdUIXteWmJLTEI4MEFJeHlUcl06KG83XmU2SlJaTjdeY3dLKS9eLm9rX1spY05wPytMVXlxTHwjKHR1VE5pOzVsKUc/bFhrbHUlJHxSbXcvLFhqQCUwanNWZjVTMVtYcyxGPz9LRVFubEArdGpdU1tAL3NmVTtWXyFxNixLPUk5eX54Z3h9'@;
put 'aT19QHA3fD58U1paT1JYck9nNytuT15+emNhRUNndDhHV3dLdnBfPkVxcCQ7Wyl5aExvYF4zZE5WbzJWP3ZAa28jcmdeTTQ+VjBlR1k1QkxMRyJ6alk1SnNbfVlMOHxrPHA7ajRmVXxqdEo8NzwoKTVaNUJ9aXVwYSh9NUAuMz9iMGdCZEB7YzJ+dnMrPCxVNyZ7RW1RYVZjQ3FSYTArRiVXNzI8'@;
put 'TTNgSmRWflQ3JTFKdk52cipjV1h5TFpHTkBqJW5SMFo1TjR+M3Z8b3hrKiUjWitBR1RxZCYibk0sS08pKTZIQmdxQlFDKHcobW03djdRb1pzcUlRcWdDRSE8ZDJ9ZFh8MUosN2dTb1csKzxpZkR5T1VPWCtyKzRaSmxlbDQhQjswNkJdUjNtWTJwb0ZvW2pWIU1QaHh1RHR4cVJIfHY7SVg8SllP'@;
put 'Lks2bldYR0ckTSZzVGJ9YjdCVDRNTVB0JWFwcy5GVH5FbjBNSl0wNl93Vj9aL1k7cytGWEFBfn1mRGJ9fHNJNVt7SmEjV0gxI1QxNEc4NVk5SyZ2UlRnMHlaU3FAUEF5JWg8UXVIezIhUUpCbTNteWhHI1NQQ356OzY4K0p0NkpPanJOQFA2cysrRks6ajQqaGZRQj5QVj5SUXBNTHZ6aFlObHN6'@;
put 'PUBEfUQ5eDpIbVJgPnQsNmM7elB1VSE1YWhpcXRBYWNgajJzbk5CNTloamtaMHoxVCVqQ1hzaW1raURoQClDLnYqUkoiVzpKM14lWFEhJCFddW1IVGwzTW0qRj5mTmUsezZ1UlFXITBPQjJGU293cTVDZ0dFUHBOYl9GQWplJEJSPiNLcGJtLE88SzEsIkklOV5iezNIK1RgemMxQFt6TyQheWtV'@;
put 'Qk0xYSxTTnBGPzpkMHFmaWlocVBbMWl8JGs6V0xONTM4MzE0JiF1WTApK2A0cFBKfiVAYmkuYXleXVouW1BTfGQuW3IiWSJmelBxXXJ4a0FwKHFfTmNUYW1FMTxSQWE3emlodiErbik7OSFuYk57fnFPNX1eLHhfWV4oS0xPOGw8eCw8WENCdywleTFGL2xAeDc0PVFFJGNNY05NOktGLzlOZHUs'@;
put 'SS96LjVdaXkmaUIzcnpFVnklTXxnUHM4fjxsWDc4cnEuN0FkVDgkXXVUNjhbMjBsQmlKfTRqVCkmeC95VHljY3A8Wngva0whUTR4WER6JXs+fmlXPUs1eXFoZitDOGErJngzQilqRjchZ1plazNPSFNwWmAkVnoqLD41fDJWZklGfVkwQnpXaE8/VS5NWD0+clpmaUx3e3svL1c/byUuRSt8SXt7'@;
put 'JGs7U1Jfemc8amhQPEtLaGQyOHVMNDQyfWxSJV5pTF9QKiQ/ITUxMTdbV2plX0Z1anIwbFR9JF8/WSYhXnM4e058RE5PeFMqN1Q0TiNxXXUyTm0yOSs2VktFaCwyWFIoZDwvMGEyc3R4VEh0cCl4Jj8+IW49KUlgO3xOdDkpRExrdDJNZC5sVip1IzVCKTZgPW19cmlNIUV7c3JxNilUc2BESFBx'@;
put 'S2xmT3lqOFlzX2EzSTF7eElsbEx2eUpsPC5tOTByMkYvNiEiZGltdTRkWig1QiElUSYwPTVPQFlVImJfZDp0VVAibllkc1JeWGtVN0lfbiQ/ZEI8WTRqO3ZFbXxPMG4iWT85NjBaQ3JPZGI8aUNVZFdsOlZeflg7OmwvfXpRdGVPVTcsJENEZ3RydiJWSCl7Oyl6VlZjUWFaLGtbQmlleWFlIWRi'@;
put 'OGp1Y0NUT0w2dVhbZ3srN0xHaXBeI0pOJUokaG5TMXJXJEldJVtxKDM2az5CL3dENkcwNnBDLil5PVk+PmU8QypWOFphWTd5PjVYSHt2V3FzRmxzdlJydlEzfSpxT3JdOCkyUEohVztLbTF7QyorYkV4LzZXPUFsNTZrMjxmSnp7XnBjKituZGFTKk1gX2F+RGkiYlBYQ2JsfXlMfVJbNiQ4QSE1'@;
put 'KXJIImhMe2t3JWgpeDJsYCYrPHR8cVQ8VmZiKGBbVCp7K2NIPi8oP2YwVmtHZE5rfTk5Z0xLUlY+KyNjOTYwfmM2aFVuPk45ZFhxOXtGT2xyPCl9Ii4+VUlqLkNmdVRgYiFZUDM4OktaNE81VkdmM01bPnRfaFNAKThIRC46eShXI3Z3T28+UnAmfl81fVNifSFNRkQhYSMjYGNJSzBOZD1fX3J1'@;
put 'JTc4Myp1NHxtW1U2ckdhKUlMWzNCP1V3aShWdl88SjwzRGclUXJlT1ouTEdGVSVkbiUqLElRVnhLMD1fXXQxciJFUntLRSorXTBlfCRfW0duPXNNRmovO2M0RnJOXWEhUEJIWG0zdV5AeUROR2YudkEwYmlhXkM/bVVxbEA+UjFvRFM2cSVwRzNTRz4qUmF5STl7ZXooentIQG1FfTBRJHplM3ln'@;
put 'PTNdZj40PT08Q3NHYVBgKyNbWGIxdjxdP3ZeS0gsZiwjd0M8YDk5e3dwWzB0UTYqWn03NkJTTCxzM2lLN2M5LFYua2t1eGw5NF1zNFl0PG8yJFFRPT0ibDZrM0dCI1hoTS4lT05KaHdHYn1fL1ZdOV45U1B0W3x2ek58Y2ZTZ0JELzZLLjpBPUUwUnFXJjA/VWd0Y0luPkleM317SXxzZyJ0L2tk'@;
put 'PVcudmA7eCg2QSsqZlImLEBATlFHODdrMDRqKDZXY1djNlNkdEMqfnVKfWciUDF6OXg+djlDZmJqVig0JlJzXSFlbn5XT3BgYjRNX2VMdk9lWXVzIjhaSX5HNk1jdktsOllkY0t8ailZW19tMlJVdThiRzJBLzk3SkReVFF0O0ldM10jO00vaX5pYm5pfl93OkRePDh8ciN4VysuUmA2S3FLeD1E'@;
put 'fi47XjpVU2NkbXtZQUNYJmNQUWB4MzcyNnxeKikyKll6Zkc7eFZtM3RhZzl7NDJLOGtCbigsb3U5en03PThLK34/MjQ5e2B6dCw+bmklNF0jI1sjVGxlZjVtSVFXOntYdGJTZnp+T1lCKilMJlJBO1Z5Xkopb3JhTEJIRkwpQ208MX5eM0w1eixaTmw8X3s4WndBMX5gXzxZfGc2W1lGRjJaNmJ0'@;
put 'eWRzW2woJlVHe1AlRHJrW307IW5jQlU+aEVxeyZEITVkOWwxb2V0fS9JVkwjPnVWWippeDVNfmhbSmBTd0UpcWMid2Z4ZF1YSS5KKmx4P1F1Pjc1WV9aSV1QP0UqQ3tbVmtWRkt3dFIzdDJUWWFESm80Wi5tbiRjQ1AlWz5FRGZsTWJhMiJqTDRFRTwuVEFSdSsldCpsUDVFZz5yLlYseW1wTkFR'@;
put 'Z25TXjVlTX14JWBEPFhidD5mPCFfM180QyNqXWpTaSZZZTY1fTc2UXNiVkdWaTphU1lGfltnM1lPe0hWXm1vdDNYJj4qTjlXQnAqSSU4VDk+NmpqWEBKSS5iRH1MNCpVT3JFSzVgWEJvUnJaS1VTamIoQTJXXUs9NXhzJjx3T1YwNTNyODV4UG1OWkFuSzAlM2MrdU9FMlQ2WWk+emI/fClxNCU4'@;
put 'ZHBFVVkySmUqZzQ9ISNNPCVfVnRbNXJPVztzIzxNWTwzS0BAOktGYl5yOEouWX56IWtxdTArY1khbSl4KUtLLl9mfiFSKCZYckklPDtgM1UycElvIixxXnh4ciF3JFUjOW07PEJLUTRgP1NxM3lndXRQNEJoa1ZQdEBLYDVUbEl4a2djPF0oOk53QmA0T0M6cyVlS2JEPiZdc1Qoe1omTExvdihG'@;
put 'SE5OJFE+VTxzJGw8emJ1eElPMHdfTyYiTDh7biIsTGhhaUhad19+aU0+LyFrZy99REZqM0NHOCowY35fV3xLODMzV3RJSXtFelR5M2xvKmcrOD84N00vSD9oeGJmUVZKbDBYJlljI15KM3NVUyVML3l8IUJxJjFjbGNWfWc9eWlyd0dVZFc3eiFOQkkxUk99bHJ9NipMIUw+IklYTDNGdGQ8Pndi'@;
put 'L2w2flo4L0RDTURsQEIrekZmZDhXY1Jabnt0KzJLM2BLdn42MDhfSU9CZGAwd3lofGpZVC9TLiVdaV9naj1kODZIPmImNjx1WCw9QmRiPj44Y3lWMVMkQH4lYks5I2RGW1VXa2I5M1Z8YjlBeWs/ajhIKHR5S0g4NUR0fW0mXm9TUFZkNWhLeU9eIi8ydGwpJW9pNWRndmJbaEN0IVcrYWpuXlJC'@;
put 'R0lSV2lEZXUuZTNIe2RSZWEuLyFaOlA4akBhWWglQW51N2h4KTpMTjtZWG0hWixbKFV6dCgrNTpTWVlKdyN3Qn1xKTsoVThnXk58bHkqa1U6Yjs4fkxLQmpuZWpNNEJaZ2ZzNyRHR05xMF8sN21PSis9bDBmV2o4YTdyeT9obnRuKlp4YCVuTFJCJmRPMEI8fFErVmJbS3YyJFpOencocjU+STt1'@;
put 'QiMkMW5DRmFUbHhGcnlUKkVXOSR1V3Q+Vl4jJG9QMmtod1Y0SEBHQC9Qc010NTUsPUN1SjAyP3tJUDRLZ0MrJE14ZElRc0F9RTNQMGJVSSgkfX5bOXN1ek9rUjh+VDcxRFlyY1B5QSZNUiRLRGA9SVhdaUtXJVZBNjZVdUdDMDcoVk9oN1V+az1mPXclPXtXZyMveE4qR017OipMdmVDc2BCQUBR'@;
put 'dFZFT0dgRDNmaEhrWU5KfEZ1KVpMbElQJFh9Mmg+N2pvdj4qQDU0PmowKEcufmsmdEFHSSRQNHckTiFJS0Q+b2U7XyZzWyg7Zi9JbkJFeG1SZ00kT0liJnAmV1FJSTVuIyt5T0dORnRIX2FeWiQ9YXV1dGhlZ3p4aChRcCo+ekUxenVmZ2NqYF5iUFNiPEJTMltMLlQpNWxDfVsmKWBPcWFucCRj'@;
put 'TTxlP21afnA/cjR9dElran1qJlNSdk1OOjFEclcmRzc0QG9qfXIvbWQvXWRJQmJ6QVNBb3h6R1lnbldsOSYjRmBXdWJvdnxPeipWfX41fXVlMzM5IzlSUypJNzlqJSx5QnxIZVFmPG19NERZfU9eZz9yN0t4P1cqcElASkVIa3pbPGxYfUJpMTczZWZMYjpwQTUsXyl2ZEk/QTFxYkVtbWV1WzQ4'@;
put 'Iml2L0RMLmR4JD5UNktlfF1HVDwmM3o2WWIlJiEzczhCaylAJC9FN1N6dUczNltATHcvXUw5YGolL35UOVVYaWFfR0s2WUcxSz5lSF9CVTp3ZkRndmMxInlCcEhtKn5NSHAiTXhqdW1oflkyNGZSUW8hL2Vlcjs+UGx1ZjsqXilQQCEjKVRvZnxbZl8xNkF5JEZtQF1GOCVCenBVezRCMWBNezQl'@;
put 'OSEoOF1CTilNNEpOTV9tampEJWE3YHFZMExxUCFkKjBDX2ZqRE9geGh+Z0kmaTgheE9ve007Vnh0KnRsYUNsSVI4PEdMOSJZJlZpbXZZKjMmT3FVU0J9M3dTcVROTThlWXxtNTBEVElQX0oieSVRO0NCcjhBaHRzNllGPXlMUioheTFCKj5FcCZSRWFEUX4ufnhLR0d0TERbKCs/JUlaKSFKY15V'@;
put 'MjV8a1g1dCl+LldYRUArfENIZUN0NkIiYDNrb1FmSV5hZFA0bk9zN1QzWGQ4NXpMPFp5aW1RPkNbI0Z2RmddO3FxTHozSGtSdH5TIVc7b25ENS9nKVFWPys5WiJpdDdOZSNaQlN3bjZraE5adTVgZHdxNUgpJWRTVEZgclc1X2c+ZFQ4Ki4ldkF0dDB6VV92YWkkNTwoM188a1dDLllmXWg+VCVu'@;
put 'RXVDZkQmPENKcEMxYnV0S0goMkZtODtRdFFZZVA2Y2JjVTMlciRFUWxeXWBKTW5QSGpTSlY3e3FjZElBYCpoKGA9XTleSl9yfm5MMH1taUVVK2s6bHc8aSpVRU9jfURrLllZTUVDK0p1I2MuSyZ3azRnNVlsLkcrJChgKWI1dnxgYGZDeVpnZ1M2aFt1OW1UdTBrRi48Z1NuZSM5YHRtW3VKSi8m'@;
put 'NlNfP2E6IVI/cGVDJFEsLCt7TjRBQEV3Z2lYUHIkS1dXb0UhdFo+fjhuSTJ5VnxNOHNYQSFWcFBYPVU3Qk9pZTRadDFkNzlWSm52IiQrPVF3PVghaHluVHRdWkZEMmJeODFANWVMO29Bd2U5W3B1ZU5jRHpzcTY9ZWJUTjpybn41YUtZfXJDWllmTmlWWm8xZGM/XkJqJT16YndTMjUsI3Y/RlU9'@;
put 'KUUyfChnfTdKQkEwTDlpSFNEQG8rKGdLVjVFSktudUZeJDU1M3tTPSRuVyp3dSwuL2dyLFErMiN3LnVGU31GJWBte1UyVD19Sj9yMFpeKE9SJC9IU28/XndaeChSYFtJQ1cvfUopcGV4dXBPNz0+aHsyeEx6Lj0zY2tUN1ZbXUhdcHR1ZmNFPEszJjpCNTUxfmliM15kREI9emVNcFQuI2BaQG50'@;
put 'cTd3cjIwSzV+c293a3MhOj42XyFvWihGJTteVDJjWX0+NXJPM0FvaDhHeklwTnBZNVRVVmh3SllFTVNOfkxKbWFkNE5rOjxjK0NEczRiN1Z3YUUiXk8rek5FUyZrUn4wYW8mTXt6Q3F0ZDFEfVYwN2htOE5sMnI9Lj40eyY1c2tFUTgwOHd7QD5uPl5VeXNGQzomamArUDhrfEtaXyJVYVZtbW4p'@;
put 'MHlCL3V3JXpZcVY2RTQzSF54bE9DTn1BV2FiK3N1ZD9QIjgsKDQ3X0V6SiZZKjYyOnRPPCxzRihvU0d3aHgqdzxbaUAkMS5mO0NybVBqbEA8JlRoRn1XdnY1X3FsIjZdN1h7Uzg8WCFKcXtDWSw8VGtVMyNiYSJ2ekguRGV0fGlkQ1I5amw3bldJYmEvMEQxcDcjcXVbW0lxSk04YClrKSRHSDxu'@;
put 'WkdId1RjP0w8Rz8sMXdtX0o6ZGJFNHFyZ2AufUtULnElYnBKO2Z2NkkvXWBgNyU8VD1NS1k/JGkvOzoocXsoeHtSRUtbeGdjTFh+IUZXS19MSmRwMXJ9PnQhOmdQKXYlcXpiNFh4TX5rSEw0Z1ckRyg8YDBMUCVbRz5uVjhWQHolTjxOWF1sbmFNPEM3InhLPDY4VT9XRCRyR3dvWkhnc3xnbERQ'@;
put 'V2lSWCIoQF9VQDs1QHJzKmhUJTVHMF9bKz0rSWtAP3BCSj9DLkRLV3pxZk5CS1UwUDRLdWpTPFlwbThYSmJ0dT8oN2pCPGBxb1g8OlhtI3JFWz4yY0IsZm1KYSNVSSZGOSMqYTcqfngqfk0xYztLOCFhZi4kdCJ6XVZMNVBAP3BhQ3xVWlR2PnlnT0hWUX10RXpjbCtDJXEoNiMyZGkiLlpTYC9I'@;
put 'ZilqMil3VkxqQ00jIn51YkxkdEhGTVIvKGFrK1RBfV1SfGJjOnEwfFdSa3ZJLmsyI1poNnBxfXpfVGRTYSRJeD9xKSV6e2laLDd+cywzZipKdDtvfCNkXSMubFIiUUxZQF1Vend5VCtYM35xTjwue2JHX3N1NTtLanNDRWsxUTNtdHRFdEZ8aXx3bD4zQ3QrKiEodDY1QmA2JCM2fUlAejh4Oit+'@;
put 'STtXQUl7XiVpYzk3bmReaUxmfX1jUX13MDFqaXIwcz5naFJjWVd7fU4sQyZHR3AoN0I3dkB6JS49ZCxkR3ojJFlFfkR8KHJ9Vk54YXM/JX1GTFtoQz89T01EdThgYlBXKl9SLEF0Wih4NlF9OjhGOi4zW0dme1pleWooT1ouUC55UH40P34sLlNOcyJ7c1VLbWw4JUJBdH5aV0ZtTThbQz88eXhy'@;
put 'ZTs5Pyp6aypVU3E9T3FafUtwVWs9aGEqZVtGQVZqYltIVE84Vz5pMEpMNWxIKUpWPEN+cWE1MHRRMXg/R0Elbk1ARkVkK3VyU0ohKV9bYWJjNEsofSxpR0VsdnFgLCYveSNSQHRuUlM6eTlKfFV0JVhXW2lYOS9fS0Q5K3xHTXxPTGI0QFo+UWB3Z2BdJk5nRS5rInhKW2g8Z3p9b3FHeDU3YyVq'@;
put 'RURmUENbOEJadCJBSyhyVVUiKzBDbSQ0L1dpSj9zXXcjUlFtTn1OUEBPOk5hRmdQL2tLMjtmZFo+NCE9QGZye09WczJYU19ab01fRz9rbklqUERVKSYxW00mfXhbM2Modm0vWkEkV2JuVm1QVHYxYmszX0p7TjEsYXdRe20qLCFfb19QZHVmfW5xbEAlJitJXTVsJXE6NlY9PDFdeX54SyZnUTVx'@;
put 'OWJjdzxBQlcoL3VDdTBaQnQ0N1FEL217TnF0V0I3a2sqdSopVkswe3MxZHVvaXRTaS9AcE5XejdTbXA4OF5wIU4jOjp1fVFCMWo0IyMwfVRiIks6ZV8+a3gsWGh6djdySX5wajlCWEtZXSs5NFskXXE5VGFpIVQyUWhxJGJxZCJQQCZtQyp+clB4Wz0rVEt3PGdYfWxjNEE3ZXd7eVhrVFlmJSMj'@;
put 'InBUUns5bT8sWEh4fVBeZmcqJjxzaGBIfjR1YnE7R28vO11OJiNDSjZfWnFMVD9rfj5UVGMpRTBNaCMuZHAmT0o7S30iSGxOey9BdmIyJkhWfk1ZYi5BYHZsVWs5eXVjfCQsfDxQPyUiQHo4bFRkQ1drYnMofE9lJjB9V20rLGFnS2VwRlt3bnVEPVJee1hAVWNKTFk4WzB3Z0BDaihoaldHeiMp'@;
put 'JEtncT9TRnc/d3h9MTMoKnRhbDA1RkskLHVfW0NYO21dYz99MVR2el4udlZSbFlxanlweTZHRnRoRkVVOVNKU24xWSpoUEckOERzSyY9aGEqUz8vWFNgeHBYZGJmSG5bODVqRXFibUVrZj1neiFYQ1tpdSkvVT5sV35deCh9d28oWmMjfnw4QVBTL2Z0Q3dOT2t8Ynt9S1heIzZzQk86KzdzfX5z'@;
put 'a1QiPlJyPnlOI0dOVSFxQHh4c1A4ZnFOayQ4eH5HOCJELldLXmFJTSVqRiZyVS9iUERbdmpLMDNGd3VuVHBDPy9We0hgMFEvQzM8OD9jM31hZE0sMV8rem9pLlRwaUBncF1YeSZgbE5BRjVsQnUoTHImK2dyV3xKSzJDd3tsIi9NYFVqJD5ST3dFKGVpXyxfVEFFd3orL01HJUkkfSY5P0U0TSZ7'@;
put 'WTpWa31ZYXxQSUAlRW15WSNZT08we2M8UUVYdyNBayQ5bztoIVV3VlpreD4mJV47OSE6WGwwX1d5T05wNzl4QUgoXi81UGwjbkhhTV1VYmcvT3ZQSkQhOHJ6UEpVJSFWTSY9aEd5WnNFM2pEM10+U1l0Q2coSXpMVkNwNGNBcTs4QlRNdSFiaklISHJ1PDleNEp1QUA9bzFmdm1WSnFjQlZkLnRe'@;
put 'OFVNLEtyPjV1QGckc3ZzMi9NaTpfaCoqJi5WZitCY2dwJil9K1ttJXBxTHp0PGVGWk0hM1tjYnhpYHEsLCErYmVSVntjZjhQIkxQK1hfPkIwWFJdfV1HVXlYYSp9OTlpc1ssOGFMR0o+KWA6WEsmYFBUT0Y/e1EzMnd3PSFISnF2bWUvcDg1a1k8MTBgXTN1fjldLz0lWFIkRVVOLjJabjIzcTFp'@;
put 'c2F0S3xUKSRXLHcmIlFpMUxnIW1ac3RMUW9NSCUpMlVDIyE+JjFuNy5ufSxFL2MqeCpiTU96c2dkNitdPHFtRSxIIzBtRFIuNlRnRDxMV0J7KzkySz1Zd19tSixjdVZdLEJKfltuUFFvUztOOlczSzExPi9zPFVJN0ZfQiR+UHtNNzUvKkc6Pi9Kci9UVU1vOF9ndyk5PH1yTCVSZVF4eFAwOD9j'@;
put 'RG52NXdZflYhQk1qUipnPj1aanVpPkZ+V0cpamJReGJSMTlONzc/bm56WGh4Smk5WFlBWVU2LmQ6a0lwOm0yfFdwPm8wOkU7UURJeSJfYVVuSSlOZWtlcD1TMjhTbGZ0cDpXJEl9MSZJZz9YalReRFtjWF81UiYjW3djTWNTJXMqQFBPNDA9fXdHO1ckVEshKmlDfmhMT0dVbDdtM3tZIS48ZjI0'@;
put 'a309Lkd+Py9nc253Zy5fPTwkc091JEgidTNIYS8ic3g3Nm4xN0ByNml0NnpLOFkhayJFcWVCN0AuSW1wdGheZkBvTE9iXn1GW0JgNXVANUZ3P0FUTThCKjslVzJgMDNxXUo6bm8rPi89S2R9Oz1PamFKN3VQYTlKKl8lKW8wTjdnb1ZTNiMkcltxPXttMWN5aXIlSGJPMEwzVThEUy9yQzozNnEv'@;
put 'W2BFOjJ6M0xRRDs6NWw6ezdRMW1sZjt7fTR8P2khVD52fn1xTj1HYz5IIl0wajgoaitUV1F8bnM7TnJaemlrOmJ2JStrIypsSUcrcSM3ezlASmU0YGlCcFpjL3FwLk5iZTldZDw0JFNFc0B+Vz9XWVVsSi8sZlUkaU1iTCo8JmgjeXB2PylCRklALDtOWD5uXWplTG9jdSR4bXZHX1F7Sz1KViZe'@;
put 'K35YMTopQGl3Y1phdDZFe2NjTk9BQTxNMVs2YkwzbSUpSFlyNENyMmRIb2QqeSsqUShJazdnPDE0QF1qRDYlZHZefGJQeHhQNkUqLm5XazMqU0N9TzYzdVB5c005QCFNWD9UbVM9Vk1ec0tTMTleeDJlMkNJWW9jJXxFa0dgPy4ycTZMfD1QdkRWayxga0liWHNZQ340Qnl1Pjt9KXt2RU84eT1O'@;
put 'WywjP2Z8WXlbdnJkdyRJW0s+YiRNRn5uKE17P007VzgpNnYja241fVE9PlN5WlZ5Y3M9PkFebmk9e0ZGKTgzWz81STlKSTNjXU9dI0ZBIipWe2txPkU2NTIwYXVFOWxoeF9kZHB5d2FtPiZGcmIoa1RvU3Q1STtCXUxQO1dnJEssNUxBZSs+UTRHMEYicSg/Tll9IVVefkdNeThBLHhKOUR4Rk93'@;
put 'SVUjRHUrKXopJEBPZUNUVG9mTDFdX0kwbDwvKntzYmUob2xOXmBqK0g8aUQwfm8ye3N9TlZITTFwLDc8RkRvZip9cFNaQDRdZHk5aTtQQW1pYG5fXlQsciZdS2t4eVpgKEdSLysjdixUWC9Hck9qeTZEfG59JkthRGBYYXAxNFhicWRjMCNrd2pzYElUJnNfMz9IcXhybDxtZCxDIVFrbEYhczlV'@;
put 'byRjTV1ALzpmZUBEJFhgQ1lxZ0VuQml3YUNITk1JLypaYXBOLz95V05PcjNHZ3hhIksxZV08ITIhWSs9KEJxfmhDdzFfNWpXQFtUI3U1XzwueCZtJmptZS84S2Z5JXIqR09dPTRAZX04QFEyPUUiI2hvZH0ke1RnKWtuc2Moe1tKd1dKUDR8M2JYbEElc3NTcDR0dnszYiljSD5WdHcsWWlGaiVi'@;
put 'c2FdYiViRlRUPV44UzFNRytkSDtmZ0lbLzpKOEZLPlpYMntsXkszc0ooJCRYTDZVPW1BMDpgbVNCTkgoQmwvRDI2P1p9akt9JG89S3JJQ2AkIkliYERGQXIqSDIqYmZJaDpuPSRTUzMxIUdnNHczWCtrViVXIVR4RClTfCZ+ZyQ7XW5uVlFnWnd4fX55TS8kIiFjZ0A4dU5KbVMuIykkOE9pKlVH'@;
put 'Ol1KKytyKG1IUVhFQTdqdElwMmpRY1pPIiQoMyFeSWgqYHVgcUNkfWhPa0ZITHo2SixbSWtvMW9CQ299V3R2S0UwXXpOSEcicUU7PkIjNVpQeX5lOXlSQHZEaEw4TmZoNElRdHpgIWk+RC5yRz5SUUxvYW5xYmFXYyIqYUYzQjFONDBSJk58cGdWdHd7KHJON2suPn1EV0BfbGdsa2ElbGpCNSQ8'@;
put 'SEx9fkQlYjY9dGZncytVanNDI0dIcjIzMU9rJjdaJE1oPyVMIWdKaEtnZ2ZLPkxKZDVMbitPMnVsTEhWcF9ZRDAkdl9Gak9ubiE/Yi9SQiIuN2VuYjVAMG1qbyQmLnttJlhYO1VqcFlAY1Z+RjVQcF43Wj8yIlpYOE9bK21QLngiTD8oYHR0KGpaJVhQYDUjaSsqW1dmJD16TTdsMUpZRipuIj5T'@;
put 'fE1wT3JMSndgek5JKGVEfmpEQFBAcXlfUV9iKWIwJFI7YGZseEdnL2ZQaXUzYU8zbjs2U1p1OzYqX0FNalRbPEBAaF1JI1VqUV1AU3s6R3hUYUB2aGUpX1JuIldyM1txVDo4PVFfXVEhRW42YmBJLjIrL343a09GL2p1KkFpMnp3ZV1jTEJdLi5qKCQlLzlTezZqSks1W35LT0l5fDZnSSttbFU/'@;
put 'Y19mVlE3KE5wQ2klNGF4JlZ4MUV8XXA9bDlIVykrLHlxcl1jPFsvfGp+RUJrcEkkUDE1b15UM1EjS0wzJlpAczwvI3IvdUt4MHhecGlxMUAvMURoTlRjOE5OKH1DVjpKajEkbXg9MjJTIjlENUBBSjA1OD5AKUs6bytxWHxvTD1VMCUxbl5mdldmWiY1Q31kU3g/O3xSPCkqLFY0Z3ldLHRGblJ+'@;
put 'cWFWbnEqYXthdlR1MT1kenFbOUx+PlhXMkE5bTdOfkljKmBtTkJleV9WTmNFYUVlT0d9Pj4vO340d1d5bnUzTzI3Wi5sTHErIV52cX41ayQhMEojTF4lMX5FNGouRkV6OGBjdCojNk9WR2dfPHs5fFE4Y2cwV0RARml0ZSpMc0p0Yz1YcndEU1Q+SkxGaTshdiU6MWpeZklWIjlfJj54RFddbkVY'@;
put 'T3p0UT9qZUdsQ0d4JHprc248JjA8Vm9jKCE3fERqTFVIS0B4OGAxT1ZhSUIlNDxuamkyR3NZYVpWX0RtKCFjfSx5UExeMXgxczFweCZUTVpMTkdfe3puZXtmdkN6PUp0T2N3LEpyJUVUViEkcipnZWgmfnVCLzZWPG1AUiU5LjZjYTQuIyIpUkoyfHxNNEw4K1FkXzFtLndCYVM3dj1aWV07Nkgz'@;
put 'STljZlR9eVExcCRSTS8sVT4rWyRFa0duSkFEQlsxLiNMXSRrKHl6SWVtXm9DNndEekkyVHNuZmRXdTM3MU99bnJ8TlNMe21lM1Vgcn1pd1BGZF9UUE04Nyp+eTQpVHhNUV02RzhvI0J6ZDZyPkwvRzdUM0dRQXl9ZWZCO0E/dVZLaW13Miprb2Ftc1BGTXN6O3lQN3RRP3Q6Xjk/NFFCQTFYbSp2'@;
put 'IWFEfkleKmZ2UkNabkpDL0ZVJldvJGwoR25Eeyk4bG9Wc0YzOFpXVnMoO3oqSVFBQjp3eyFYU3tlIVt1aFhhdCN0K0ZjMEtxM0whaUV+LztWbF40KmlYfHR0djNLNmE2T1kjTyU1U3I5U09dMnI9ZChsZDlHUiwuPFhLdVJIRSFiJkxJOXpuX3p+PXcpPlRRQCxtSUguNnwwO1Z4T15TOEIyRUpA'@;
put 'VDZHM1V2SGJ4SVpQUV94cnYsOyI+QDUkVVIzSFkzS0xMQT5tR3QuKS8+NVtpNDtqPjZJWF5DQSIrLzVbJEkoYX1SdnNKYGN+N3drJHg0bnx0ZlFQJXNEdHliSX5SfS9CfEpJdzVoY0FVcmxnI09mYS55N1BlQWpjem1ZPTJeXU08fFJqTjhPUV0odVMod3c9X15hbVcpXzpCN1gkd0A8QjVXWj5t'@;
put 'dGtvdFVQeiZXPUxNOVkqO0o8OlslUjpWNzNGTytte2c4dXs/JXpoKWExM2ldfkRZe2QwQ1YkeCZ8OTYqJkZpelhOSFh2PzhsbUErRUdOZyR2OHxSQ2VUa0ppZ01scXdmX0RsZkFBS0Zge3cpLDxYNmVYMWcvUCpQOXZUbE0pMEtfTVQhU1NtSkNQYl0oYSoxSjNKX0QhXi5fRmwicFg5V0ovTko/'@;
put 'XVd5P08zXXs2fi9ebXJFMGRhTjp9XmlrSl0oRCVHezUhLiwzUEUuMVEkP1hHLCFIQSVvXilCYSwlcTBReTU6IzBINWM7cylOUEQ9Y3dRUHdzLFkiXSspP1JdPDUmbyIvQklfdW92cWpFbyRqWy98L2ZnW00qbXdDcD0hSiV+WytSbz01IXUhY2dtfGs5U1F1cSskLEl8c35fYCxiLjdEL3JvclZ6'@;
put 'JlhzW2dsTzFCZGZ8TmY7elYqMCkzY05WdH1GM0hQQ3VpMihgR0I+Q05sR1ZPfl8pfVhvRyVAYjI/dG48M1dsYmg+W3JyT0taUkhXc2dJYj4xRzlaW1gmQE9DcyEkRGEoKU8sWkxmN1Baa0Y5N28wZm4zVUUoInkiWUlQdHRPdy5EeCFkOXdTPjdnZ0lhQiRmbCkyLiYyaWYvR1lrKHwxXXttUHsx'@;
put 'PzR0Wzg2UXU2WCU2NXQ6JVFoV3UkYXlPdUlITmM5JS8oOGpRNSVPVnpTWVhEMGJ1V3B1cX1NJn0qZ3dlP3xza09AZk4lZD9iPkojUEI9Vn5VLDxwampVaUFtZjM8bUw7RGNNLmVFfUFbSDNmZmZ+JEh3Z1djfE8hTiRlaWBDfEsmYEZ6Jk5Rb0YlaTd+YV93LjQkfnlyTy4+PikrYTshNElIQChI'@;
put 'bkY1R2hHW2VHPzRyPFhUKVheQEh8YzJtL3N6dzg2KXk3biVyI1l6KmgzS1thbXZWamo8MjlZPCZeaEdbP1BsdV8wIl81YiY1ZGxHLighTTcxPHg7KykhNzNGYCx9SU54QmEvSD9wTTl6SW95bWNqLFg0L2JYY0N8TjM8OHFHKXl8STEiSUpYU0FQa3tTWkBaRDVKU0tPeV53JksqLEYqdWt3ZTx7'@;
put 'elRNU2gxa1NKTl1XP1VjK19xanFmaSw0fkdWbUtSRGl7fUZLZE1OXUl1UTlqZEo3Sk98W3puby9fenE1RW1OQ1hlWztRQ0ZzNmxOJixnfGksOVtSMXZvRl95L3hkMXsoSDZhRX1lfC5RdElhOnFsJkIjRXlTLGFrWVMyfX5kUjJuYmpTU3NjJCg/PihYPmk5JlR+PlVVI0c1SD1NKW19Ln54MkM4'@;
put 'VmNtSC4qIzhiNXcseGpoRmY9dVU9fFc6WGtGOzhCLmtiRG9aSCtZOzRpOn1pdEc2e1IkMyVMRSV9TXd2eSN4UVhVNkFuKiQ5X05Gb3dSOFZlVXwrX01XP1IvYFB6Z2YmRXlRLCxbLFt7ekNvREZEOmopYm88fGhaeSZFNHszWm9MYHRmOFhbUnYocUd2MipAdVopZ1EzZzskOWU4RUZ8OGpgSlci'@;
put 'cjdLMjovZT58aCQxQixgVGhEUy9FPWsxUHU4fUhVXzZ+aFJqRSkhZy5zcF8lV203UWhWWk03YWxgbHg1eH51QmVCWWZxVUFpbExibmF8TzdiY3pKK29Be3FTIURYUjt+UTJTdWBKKTN1JVJIbzhrX0g+XzdIRUFKXT1sbHU3Jlc9TFk+UTVXJUAvWT4vKUkyZlNETmdzJj5YVnwkcil7QlY2eUJ4'@;
put 'T3tgd0lrWzh4QWNWQDh9RVBDNGQpT3RENTtwXjA0aElNPm46LzZEaVB+X0ZJN3k2S0BwXTZJeC40cjBDbnQ2TWxzKXhvK3hLOnh7VyhrN1JdW2AvLnc9d08+UDQ0QD1jZVNFIXteWVJRQ0IzSjAxbURXbz9yZEFAdnArZkB1QG9zYUFHdFRVJFs8V0hXOCE2JT13byVXPHB+UTdqJWVwP3RWIVRC'@;
put 'SWpoZXU7UT9LQE1yYDIkRUtwKEhYW3hgM10pclUxQmZ7fFZGYztDeGRLIUhWTzJKWSU+bEJNeUReM3EkKkUvUm1oa3w5NF8vVzFVZ2kvMk9kYGZUa15qcW5QPXFMek0pOmhqOVAzbDd0TzNhITZCOkJJbVpwMT1dXiYlMDRyTmZAOipUVmtJWTMucGVBT3AvUWBuUEtlVnghUiRzcThdVmNMRiFH'@;
put 'VHxVRDU7aFhwQjBuXXMxPUQ/S31AOTEwSz4jfjM/MklmTDE/M0M9N1JWdz9aSXFSbSp1eUMwPDhncTlzWFR6Ly5bOGh3ZnNaVV1IWGoxKVh6QihDOUZmckd+fFpoeio8VERvKylPVHgsZGFGOERzQllCMHgvPHMlIU46UUVKWH0xPGJOSDBDSUJVSXYqXllnWDtbYSs3fThXT1FuW31SOHFbKm9U'@;
put 'Wl9JXU8wPXdqJWojR1VZTkdtUDM/JFsqZGZXb0k8JGE2SFdANTwvYCMkTj91bk8kPTt3ak0xdjVjL2xsJjhTRlVPRTQ4Izl9b2NIJk52Wm59UjpFS0NIKnpnY3N+K3RbZDBHZCorNUpPWkBFV286Xm92P11NampoLFNaM1N7K1NWb0pgKSF1OUhgJXJYNU5rVTNEVFp3WHpTO3xpPFZ0ckhnOndE'@;
put 'NUFsTkIwNnskfmZkdjBdRXQ7eFc+V3c5WTZ2eDNlZk8maHBxVUpMfCNgKH11fVBVOmt9ZSE8SmkmKmt4LFlOeSVKKjlAWCkrWSQlaHJbXnh5XyE6SWVXMFF7Z2dgam4yNVorOml6SmtaInFRRXNtKzhEd3BbKTI8OGJPTCFTPWBgIkJUY3lzKFY9JSxobUBEXzY5Z2NXIjBVWFA8Nk43YV1CakYv'@;
put 'MyVZdHdyS2tUO3EoSVg4bysmWVhvKGZ9Kl43ejhVbEM1TUhTY1p7ZVlidUcmYmk1QUtXen54PzIkLyNjTEhpb3FOTCFBL0skTE57aXIuYlAhRl5zZzkoWUxFeEEyL1tFfmIxMjQ6Vit9I25HZmdJRDI+Sy8haXsycy9LSXNrMnkrNUJoSCVrbzhtUnF+PmliTiZKdDxwOn1fdVgrS3N9LkJSMVlq'@;
put 'OjN9P1VGXlNEXkV5aTl2QCguS0JPRllmIVJpTEJSY3FscmI0ci8zR35rNHlAUmdSKlR6e1FhKjFdM0ReNHlQeTFKY3h6WFMqWCs1RThweHhPZ25qaCxsWjQvdiFSRjovdDNLWEBLNS48W3o0MCZHWmFvNDUkcSo8NHpoRVMoXyM3OnlJTUh4VW4qPFl0P1R4NFtHODtbNU10aGI6QmpQUU87MzNi'@;
put 'YV82QGh4KVd0am0jaiNGQ0x6QXp9cWJmfkleOSMwc1tSa1JeSysjcWtnJCt9ZG81fENlKS5tMDkzVFJKY3BaeSo1IklXbXtDOXolWzdVJj10VENxJm13RG18O31gdzBhIV8pVCZXPHpsbjVxPUZ2dy5Ra2ssX0RTS0NdJjR+RWVEQ048ekspNXZZPmg9TWJ4eVhQUW9vNX1YZi9ZMTlWa0ModzB0'@;
put 'PVF3QV59Nng4b0dkWiw/flNHMi8qQF8rXndYfWgiQ1U6Wys3LjtWYUJxP2dqOkxOQ1VvTFsxPTt+ZypQYnYvSnNqM1M6dlUwbSJKPjBUc2ZILExvKjsuVFd8SSx+YXBtVn5nZ0Q1dzwjOj1Xbz1VO0M7Rjo7Ujl1TD5HWGV1NEE2NitDKmM5VTFmVUxoQ0dJRGEmVChmcGk7SU5QMDljO0pMY08u'@;
put 'SEAwMlo+Nn0yek5yMnBjPlViPGg0ekExLkh+Zjs3eSopZ01dOFZfWThCOWdDYnwmaUM3MC5GdEt6fUB8WHQzRT88IXEpW0UxYCVCV1QkX3FYWEtdIztfKzxFL3I5I1RmNWNpaSwoNFY+SyhiaFJEfT9aVSoqSFNOPyZEIW4zVERCPigzbDhsemZPLDtsP0tRRkxOJUJqPCo6VTckSk9iSihVLnJw'@;
put 'cH4hbHYkbUY0Wyw7KVE8QGRVQGYrOWQ2JCZlIk42dHJ1L3lZcjN7Ri9wRlgiW3YsdXkmWX14d3xuQXJ7cCxEZUkxZU9fRkp1dDJxfWVLbyFAdVF7ZipOaXlJclF8PkFTOUUpazQ+RDA+Y05lQG5EcGErM3kibGBfU1c4OVdYYTE8RTM2L3o4N3l6VkRUfShSPE9gWXhEMUgme309YVd1QGJrVmlU'@;
put 'VVo2PSE+KjxudD9BcXllXlYmPj9hKywlbns0RTJua3E3PlIuPmswLE9KU19jQHhbR3JzLiN5U2JrMTdRUzgiVD5FTnt2QDJJN1czPnF5W0xoK3A5SFVnOjsyaXhmTXA9NGw9anlEUiImbG5+UC9JcnBYaz85ajsyK0RiNWg9bEZ0X3hKNmxOU0BUIWNXT1tyfWAlISk6M0QjK0o8QFRkTTZqISE+'@;
put 'W1NzV3lVSlI4bCUxMF48I3huTms7Pil6YkJZX0oxKjglTG1ibnY5YCteKiZiY0lfO3Q+eyImP1hvWCg0e15fe1BzUzF3cVlSYEUvYyt5eGFxNUtVZFksPjJMMntBW0VEO0Y/KyZrWENpZDVONCU8Wz5uW11VImRHcDZJYEc+S00sM0RiYSZNKXZySmt4fl4mVH4pRTFDN3YzTnVpUEJKbU9YMzc7'@;
put 'ZX53OCYic1FYMFdJeHdmXUEkITdAK3x5LyJJTTF8d2p0Xyg4Q2c2ZCN9ck9hXzluQzxCSn1KcDpCLnE6MEBPXX1IQXkxKmQzLG1GeyozZCM8ZDJ7Sz1+flNGbihEMm97NlNzbXBVK3I9ckomYjQ7NDZVSnMjSHhYOn5rfSskNnF0U29hKGlrYmlGQFh+ViMoL2Q0biM0d0wzRTkqJH0lTnIyQ14i'@;
put 'RyFKPntYIlhZT0NRXzwrfFkvWlBuR3B+Njp4KVlwZFolIkJbN3ElZFQqNWd3Vysld2whbUdvb2EzbFg2Kkd6QlA4bGolQGxIZWJdcD9oJCFJcm5LfXwwPTQ9Qmt9WWdAUXU7PC8xYW1JfGNYOXBsTX5RdiJkfl5oWT1gW1RRfFR1fVp2aTAjVXhlX0JFYn1nTlR+czBIaTskMkJQcihjYFoiaTI2'@;
put 'Smx5cCxoPypwIWpMIyUhezJ6TWxQWVc5JH4yLG1GPFY4Pz13UCF3MCEhMHJXZUkhSDZTJHhJNXd8RHRHMEV3V0ZdTkFaZTd1fFZve0F2YF1vbmoxQWM/X11yTXlIVkRXbWZJNUphVz8rSyNQZGx0RikvfFlJMzU0flp+LnlKUFtJLjwjNzpGXV1adGNSI3ZFLnw6WT0xQH48THhHKUA2YSNVcCUm'@;
put 'KUEwQHRXQiVJckZ+dDdtYUd2M2I6fDNTeVBIdWg/OmZ2RnkiNEJoXXh2PmokV3k5djhZOGJkSGR3LnR2NlQiY21scH1zQnZuKFh6Z0lhKFVhPEZENm5ORHBFcm9nI3JrbS5fJX0xR3x4QENmJGY5aV1IaCRpQlJ7JnlLX2Z+MmdZeEApVVRwNjAmVDtfMWRvZyZ3SiZKX08wJn5yOEB0LnV4UzRb'@;
put 'bDk1JnFTfiZvMCFqMklSUXJ0aylmNDFobEVOZHgoPjBULGRfa3YueHZWLzY6RT93czhTSyk/JiNhS3AwPUszfnFsL3NSbnw1bn4yYzpaR2ApUTlJX05OMiU2PVQlJGB9emFdNj43fC92IVNjVTZFc1ZQNFJ9eUMlcS5eKUw5ZT5qNmo/U2Z4RWtgTF0mTSE2WVNXYns9X0o7IjYxd3M1JGh9WDl7'@;
put 'cCthXkVELDYxbj81M1czK2M4azlae2RPcVFwOmEudilTTU9WPWxGbSV8NTlGNFsvTl1CIUE9e3dzSm5udkRSci5Ie29OT3FnOz0yN2phZWExeEsvTTdoYlVlMzlyIzl8e0QuU15uS01rOSw/U3twQCU8Z1R5eCV4Sil6VVpvZF5NMU84NXVdcWI3aFkhVDdUO0BQI3x1Y2N6S31FMC59YXV5RiNK'@;
put 'JS9jXS5VOTZ6WTVYPXJFcE1wSChCJWZnN3RTelNjSkRKcURKaDkibVlGK1UxVHh6RTJxelNpdUFNdy5Ga2ZLKWFZTDcqJDAwIlpbZGVoRH19Ny8iKnx4bU8qRTorekdhL2N9NCo5O3NBOENyUlk+MXdXOU5KZFc2WWlZdDQpSnNLMzY3QE5SLChMaWRybW54aHo3K24oOHMkZl9xa0o9RT9bdC9C'@;
put 'emEhYnZDPVBULmBJbV5gcCxXfE45MyVQITEveT5hS21TbTN4YD9AZGtjSytIQl9gN1g8aSYxMnd3IiN3cXElcTdscD52KFtoQVpTaGYocVYoSTg4O05PbVF2eX17ZGlzJDIyeGc9ZH5TM3dWcXA2V3NPa2lRaXVZNUg9cGI+SzYvVmQ9M0FhRmA9Jm9WIUhJaWpHaD1FdlI+T3s+ZDY0PHJefFM3'@;
put 'Omp9N2BGW09jMzw2XkohT15kMyJhdzZBL1M5KU1sXldXU0lKL24hcUpNP3R5PktgZkx6UEg6VDBtWSljQWtKRW93eW5lZnpqbUN8dGZSZnRAODcwIzlaKDF2MlNCeSw1PHU/Z3o6QSZ3TVc0O1lGYzkkUHBNV2UxTWBWL3QzT1gxaFNhP1dnY3ZYflZVQnw2aHtrdE1feHk0KUkrYiEjOW5DWF9l'@;
put 'VXxrNlJaakp2VUcvOGt1Rn5+W3ZINU5bMEVHQX19VmBrL3BqZFRjbUAwdExqZXFjfGFPMzBoZmdncSg9QjVLImczYS9qPVRAbjtqYTFgeTBQV2Zgd2hnfHl8Tig/PDBdeFt6bltnXUBSczhrMn13UTdCbikvPGtSJlBHMXw8RmZ5O3kwfTZYTEp8WCZueUpGXndRXl55OVZjN0wiVWtNcDl7ViJg'@;
put 'e3dSZTAvXmcmQUQvLGRSaCMvNkUyXkM4ZFhBK2ZrRzVfXSsrWTlFJDh7dURvPS4lPE1uMHdQe3woUixEWHhAcmJHaDY6eCNjTCJPT2c/L3pSX2VFMyxULkB9P0h4QmUzNE9dYUltTks+dVp3L2wrWEozXlBWQXVNTlsySDw+SX5zR3F5RDImTTRHSz51NThbPmVEREptbSE2Oy5YbFpdd1Z2QSUo'@;
put 'YXdgO3d3bClMUk5FWyI7WCM7QzNjbjRkWjA1dUQjJjYydF8vPW08K1Fxe2tGW0lLbyhOdytefiNOQHM1O1RWfUJsVm19YEdLWW0sdUpoLGJXJjMxamd2SnUvZDRAd3NASCF5N2hIL2VFKysoQDJjZGlDNSZufHJ3dVhQKVNpI2ElOkZCdXlWdFZWQ3c9RDhjXjNXdCxYRUA6JT1kdmBXSUh1Yzd1'@;
put 'XnFAT25keCx+Z3R1ZClbJTdMXUd2XWF1Vjh0QkhFJno0V0c6SipHXk96d0NySixvP155YXZRQVJ9X3cxWG1OVjNkdSQvekZqaEFAT0IrZC4/VSosIi9CV1NQTm4yOzhaPGUhRkZ6eUA4YyhoZzRBVU1uZiheNCFXeypqcFBiQXR7T0QoKlB5Tm10Qjp0cHVCYXhaIi9+fWk8YEU6fF9uZ1tKKk5Y'@;
put 'PTBee0kicE5CYU88Kko3YjZUVSM+S25wQEl0d3NXXyI/UnxqeFlzZH1jOWpvNjFndypbQlhKYn48aiFnITQ4NDlsP25tbFpPeVEqYDNiSmdaQGkiVD1tK2E/XU5JU2Y4W3ljT21MTW1VVnArPWwiP2JsKi55VUt0b3RodnJBVzQ9Vmp9RTZAemkzKGspL30vOCZlYFc3clFhfTFyQl9uRG4vOEc2'@;
put 'UEczVSxRTnViNmZjMk5KWk0hX1oiW3dWXzYqZ0ZJQD4kMitNPE92W0FEO0lKVTxuK2FiN25lJlNNZ3ZaQEsjZSRWYGg+bX1HT1huYHQvLk9dVGsrO2JxUSs0NlsyK0JCNSM+NWoqXT0uSSFXKCRCQlU2KiM6N05YRkUvW1pTYXA3JHsqRUM3JXVSKHgpUjdaRFg3bTpmVXx2fjAvZXEzMi4ve2pO'@;
put 'PWlpTyRUQDUhamRBZn44SCJne1Z5OyxKc0orY2IrQVE/alZuNyFyZkQlWi8oPW9kVmdMNytPbm1kTHIscit7WzF4cDF1aUVQcXF9LD9pPkoiZzI5U1duRmFyTDc7ezw/ZkM1Ump5fmIzQ3M2Jn4xZkRtRkF6YChFYFFnQHlNbUo4aXRdfiZKcn07fnpfbjBCR19HM3tOTXpeME90Y0M8TDEqNV5X'@;
put 'MWcpUWFsNnV+OmtHcml7bykqcURPKTAyOTxNOFo0KF12NzlCUD91bEleXk0+KGJ1SVF3Lnp6PFVYbj5bWSU/X0JacF1uYVZKaFlNKmtEa1ImfiMpRHU9UmkiU0RMKko7PGhSPyl9S0g1ZFdgVSt9YFNjOihlc25oRXZeIzZ9eFsoKHp4bi8weT17I3xLbHNOJmtxSzxYQlBXQDl5eUVVd3A/RS4y'@;
put 'YCJuVEIiLDtZIT1TKXZqNSg6IlhMRElHO2NSKndnTSFKc1Z1QHB7O1VRRHM7eWpIOjtzVFJLd3IzfncpWXYzdmZqQXV3c2FXRUZMMENNeiQsa21Ldi5SRlFvR1AvUU0qaz4+X3E/VWl0W0dzd0JgKHdma2dJLExVbDglfng4VU93blNDPl5LQGhWbDlCMj96RyhUVnRJPWVWT3owY3tEOFlSfnt+'@;
put 'JFM9Pz0kbk5sZ3RPTzQ0L106IV03WSwzQG47bDlyS3hZZzx+Vz5AQiU9STlmZ2A1bjBYKjM3VFBsKFNzREJzcVhneypSaD5FbzloVk5mQWU0dTMwRiVmKmQpQiYkMDdZamI0ZmlLQE9mRk1dNWB5fmhYZUgrU0Q9Uj5RcTRzc0pbdjFLJS4mdVQ3UltOcUAkbGEvQ2AjWU1IOSYpXjJRYE91T2Qx'@;
put 'a0c1ekN3Zk1vVGg3fDZfKTYkIT8rUEc0YHF0MHZtI2tNXWJHWF06eEs9MjF1aVBQNkY2MTs1XnVPIiJfS1EudkJ8aTk9IyQqZSZxdVhiJXFiZE9qbDtVdkEicDMqPWRxdCkzMnNAXmcuVzhLZ2k6dDlnfio7Z0l3Q0g7eVpFRXhHIz05L05DOG47YkFyQ05jaHRsPklbd2FqO0RiYnxKYzNRKCx3'@;
put 'IVhuP15jKkJbPENCRyJyZn1rXjNXZDkmSnNFUV52bUkiOltzaXVGTURIaWBCQ2NSfUt+Qn1lc19sfTc4SFA9OTFhQU8mMzUhPFFbU2t+KUJsfjgkTnEmdD4jQGdXL1A8blgmVEtgMWxZNElZdjFQel1LbHpOc2lbJihBO0VtX3J6IyltbEVybCF+S0lNUmtHYndPfTV3Q3x2QlVDZk1VVzlwUlBd'@;
put 'S2JPLiozd3QqImlRczZYeDZpNHJNPEg9NFJEQC4mfiIzQWo/W095PUxBdy9Td2olTCQ8RzNtUFFtPVtJYXleYHdRYnhiXXw2LG11TEBBPltickAiM0hnekJTK1o7UiJUfCQsYXNeKCxSejdZPmd6KSt2eWQmTiZzcT5ATHI4el10TlNBc2AqJkBxPUJSW0xgPDM8eSNeezY/V1UuMyN9L3NFOjBa'@;
put 'S3IvUjc8ZENhS1JDNk47LlhtbiNERj4va0VUZyQ7WjU9Pk1XMXV+XWd3MXw4YUB1YUBdKFAmZnsjVS44YClLQUZ1M3RzYlhEeTR0I1M9NCQpSzl6WDM4Ik5nNDRSSDNMMDBzY3RMNkJ9b3AlY3gkNWsxLGRoX0BfX2k0fm9mQTMrLDxKWTBRNUsuP2dCI0F3SUFncT1QWFhkPFRRXmNYW0xHaXBD'@;
put 'Om1JUVpXZmxdKX5qIzcmKEkqTSpfQjlnN2tHPEVYO1MlX3VjcH4vU2crQGEwamVmfCQxeklEazplZm9mfSw1JF5kbXM7P0IvUiosJEN8Vk4yUksqZlVnIVJwKFA2O1psdnVeI3EzI15nKnBdcj5NYD96Y0J6bW48OCh0PTVyX3xnSyF8MlR0fmlZeDk6ajRXSnROWXhncVE/TH5ARkRMNCFOWGIr'@;
put 'eXZ5LyltPTo9OTt1Lms5OVNNaEZNYVVHajBKZFU9WzFjYmZlQHYmUko4bVphbFNXeSt2eHo7fnMyKVppMmNsdTlub116ZV5QWWxkJVhxITl0fHB6TGsuJGx5fjMwOCVYKUdPX2NPUGAxI1goYlsrWlRrXT5xcitwTX5xaVtsRTpQUGZibGxDfF4xbkRpKUE4cFVsYXYoNDczPXpWVXxjNU9jaXIq'@;
put 'WSVDMztHOD5veW17alZMRDA+cjE0QyRTe3dwQSxuST9zTU5ncmUyflUzb3hZUjJOcjVZfDA7O35RJU5kWTIjNGNxaT48LiomX2k+O2kiQ0VgME4kNUomIzZqI2Q4ZClHPUhFXzB2fTJMdlpmJVZQMUpmSX1AUU4uK1lsfStwRUZrdWNPSFVoL3wiLG10TDVWLjY7dGtTZ1h+dW40alkuYSRyKFtg'@;
put 'XW8zZVA1allBWCUvKzRKVV1SQUBbdkljdTBZY1ZTP0t7M2g4eCNNNG42cyVCYSs9OHJ2XT1oJFd5eHMkNks6Mm9ta0goZURYZEE0IUBnaWx9IyFURCkibzBjVz4zUGArTWw8RVZ3UztIOVtjd1hvWXx5ZigiN1JOVUw6ZF9MJkdVVElabncpZilzJmEuLCE/UGVJbHl0fCtVZnRmfkNge1Y9ej8m'@;
put 'c0VJcVlLUFhOKUVMOkkjal58eVNVdHZqKDtGdihfbUxHYG9JOCpYcixZT3tvSXFHXUU1Ojt5NEJFMHpTWEo8MEorPSZGUV1neTZ4Q0VVUlRJUEIqfj1MPVRVQkBbdU8/JltIbk9ISihRTkljNkBeInhMcTQ+KVhGTHo1OV1Pdk14YERlKkYkYyluVHJQe3EsVDVkais4NXY/a1FHWDtxaiJ8STQ+'@;
put 'cW9aMzYqIXtZSHRBI2glMHZgSjNtT31wKWM6Y3hKfDlCenMsTmY0RFtCUEIuPXJZOkhsdWBvTERzc3IvR1hhNUlXdFZdLFNAMXQ8ZEY+Z1VdOzlfVHxsVy5gVUspTHNETkRxdnp2KkJgb05IemlKO3cud2RaQ29UajFiOCo2KVd2V1Q5UkoqQj4yQmU4PDJyaDRKSE9jYXw8ME1CV3hoO2R0R2Vq'@;
put 'X0lEPGNsSUs4LH03Nm0pWzExdzZTc0dkOiUxfWl2dGxhaFdWMFtdNit5bH5ONGFrIVIkb2RGP01jaytiP19IOls1Nk1fWT1gWWs4e3UzQXRqNjM7YlJfaU4kNk9ic3hlVHlxWSpaQyx5QnAodng9R3dCaGZlXj0lUWJAUFV1TVBvaXtRS2hXODV5SXBQLygxUyhPUyZYV3dINjdDJixoViorNTJd'@;
put 'SVQyUXsocjl5U1BYdHQhN0Y3cjdBTy5RWGVdbittSnF8VilNTnhFbjRXMWtRdTJEbXFpLHQkM0sobTtqbilNaWtOcHNfdjhhJnMiK3l6WSlyWVEmQVMiTFJERE8sPEhjQlMiYnIjY18qdm18YyFGaHw2IlUkRy9QanxyQihRLnVyOVdNLy94Wyw2dmxyZX5oPGVzI0Imdj09Ky9jTzopKjI9Xlp9'@;
put 'M0wlQiYqZTA+bUEjUT86YEtvTjlzSjd1UVFVZChOfDlMU1ZGfDhsdEJnekh6IXg3eS5sWUM1eGpHbGFVQV9qU280RClFOEl+NCkxMHd3TDZJL1tUdy5xbE4sTTVFeixlNEdKZnNoPTFbMyVmbz1wVUJAXnR0dFpUXzk0czZQb106YSg1RE5OT2NHPil9O2J7YDF4UER3TTtsLEV5WHVPRUIqZU1F'@;
put 'TjAzIWR1SlpJdVB0TihiRV5DVCZHXllVKHV8KjkrMSZiOm41ZCwkWSY+bnRfQ1tAKF49cn5peDBEbCVLRnVzX2kuK0YjMms/Ik5udG5ROVBYP082WStUaUN+ZU97a3l6M1ZBRD9uWCU6PGw2bHcydkglNUdjdC5PPlJVcDduKUdAWWt4azBhXkgsaW0jTztoNiQobT0oY2QsdCEzaHg2fCl6Tjgl'@;
put 'OX1KfG1PdDxuS2FTUG1YakQvSkMyWWpUKkJMNlBEYiFDMlMvdzwkQlZzN0EmQUY0VjpjUVpDQHRuIU88dCs6KDouekwsJVFzMGljRkI1X0ckenYwJkU2Z0d5QW1dfilPPi9xKUtjSiEjbEdncWdqRGtASDRMJj4/P0dOVmx4elJeKTdsdCJuUSwhOERESWlrQDM2fExMYiNuKHNLSGR7fnAjKThR'@;
put 'bUc1QzdPT3VZdUFXO3lYSXZHa08wdj1ybFZtOH5xUlpIWXkrSTEhQzNuPTApNzJ2Ukd3Sl5xLnZGNXpEcE5beDQwXn0wd2ttcTFdeXY+OT1zKWJBMCMuWmF9V3cyT2A/TlAyWG1zdWo0UWNwUzpGaXk0PEs/dHgpPFVaQXoqRlUrVn5SY1kubVB7UWR4anFDdT1rLlUmSCpZcUdZOkMrN00mL3Rr'@;
put 'WkJGe30rT2JNayJfRl8wJVZgRnM6VzdBR3BjPEN1en1lNWpyNVUrWDszLHVYcWA3OVk2Q1crbXkrL1ApSFhEP0hbN1YiR1hOa1o+e18rMnNSKjlkR1YlS2ROKkNJa3csMn4jIUpucVIkWHMiIT56ODFKTE86OFJUfX0vV3VWQmtRISg8bUpWKlhRciVrfGtIZjBaP1FlNFBIMnhyJih5Y0JWRiUk'@;
put 'QlduXywrN35wSW58Y1Z3YHo6LDtJTzFkZFJ1K2Aybl8/bFFpLHhxW0IkbE96WEFPayN7K3g5RzpRa1FfMERxRHcudSt4T1o0Uz8jUCFXPFJvOGBddWVZfi87LEVRJiVVeHRtZnJNbz9sRGRXPnV4Nz5NSnMkOF5Iejc2N2lEVVQwKUVnOnVRZ0ZsJGs2bVlCUEQkTHZfa3VnVE17RHQrTEJ6SWtF'@;
put 'NzIheWJseF99JV8vbCNRL3RIVWA/MiZYQVlGJU5UTkNyIj4iamkxOHBQRFBPfksrRmsud2NteHZ2M1ZbRCF6bnU1cUU2cT5TPnwqeEU3TGpRWWxrQHwiIVlQYG8laG4kK2pnNk17Rm9OODNlKSg5aC5SX0hNZSttSElEM3FNYzNMdW5gRlghcUZPPyUyPHZ0UE5IcCFvaVBMei9wT1AqWkVSdnFz'@;
put 'OmlYRF9VaFFWQmpXelV9MGRPbU9NY1lMd3I+NSlxYlMjKTs7RU0lUVJeLD8rKnt1P3ouS0tHeHA7NW5+UD9VYDphfnUreSgjQDRZSV8valhtYyV6b0ZAcWlqeD02a2ZFTUVkPDxOSHs/MW0ka1dqZGdkWSxgZD90XXMmOzIjUXo5OG1FYE9WUytQUHJPNSxtT3N+YjA0W2tNTG9KXk4vQSZOQW9f'@;
put 'altqRXtNOGtrUGpAdi94Pk19ekYpcVldNCVRYjtQej1NbkBvNFEwOHVtOWprLzsxaiVSc08saFoycmBefDclXT1lJksxbHp6Ijc8YWl6JnY6fEtZK2p8amhNa3dWYiM6O2pOTzphUnUreT9XJjxkI3JVKmBxSlMveUxoPUd3VjFMaV0wdU0+ITxeIVleckA/PnlzW2cwX2UyUmFCQkFvRyY5ZTxp'@;
put 'JTpJLlVaTXFzXWIsd2NYPltDcGhXLFlVVXtbamJaJVt4OFUvRGZ8aGFuT2NDfCZJMlp9KF02aSRVWmdrS2s5RSt7QzV6SEl+cWBFZGI9fUxJXT5NOHxudUh8QE54PzNvVlthN2cxb00qbjFdKjZPaEAxXzJVSVBxanpwU3JaLk1eIjgxPXc0dWFOKE9qWG9BbUJ8W0ROQF84WW9ZfW8uPzY7KkMz'@;
put 'bExFcXt7P2VZUGw3OjBZeEc/OjB2Z113anNmWmZkT1o6aW1CcCtQWURESX5GUnssaUBXS29nI2FzY0BqWlNrb3o7JDIhdXNZMjZHWGpyPyFqflh3UV9NTCtDa35fSXZJPlBsLmVHO2x7NHZmSSF7PDBVLlFAUS9TX2EzWmo/UD5dWE89O11Pd2Mqbko3fTFMcnRrI0tsT3c4XWtrXT82dS4rOEps'@;
put 'KD46bVJDKEM0RU9KdCM0dUxETFlhZzlGPld8TGdkTiNkIXNQYHo3ZUcjVE1vI3FPUTw9MH43KnllP0FUe28lTz1fRDF9VHxyImksNXlhPWRsQj8me2l3Smwmeiw+Z3t1SD5LQ3tRI2psRDRQUzk7MFYpQ1oqPz4+eEQ3RDhFYSVOKkJaZU5sQlJ0TkRjMXEra0V9VHZUXSJJT3R+SSpWPkZUcyEi'@;
put 'MVVAcmdUR3MmM244XXV1a35iQyl0JlpgSDZlOVRZOVdsaGNPdFNDZS92RzdxO1Y/bnAlfl9lKm1jUnpBZmZaKyFla2dQSzJBJE9KNXVVMF45czdRWStRMz1YbnVfeixIRyM+M0kjdCx3Rzo6VSZBUC9SISVXfWVQclJKYFJOUnhRNzF8T2BBQylfeE17VHZjPGF6NysmJGpzSUxxTGVKWGElQjV0'@;
put 'IWEqbS5XJXlQfCF0S19QezIqQChYPmBDY2hSYU9TQDpWcTdNdmgzd3tNU3ZKX1RZYj4lPHZmZ3BuaGBPb3J5dmVldzAqZ0VSdl9VIk1mVE5rTiI2Wz5MMlVAN0shd3VGMjZVWkFNe3h2SE9XM3VBakpfND1uaEJ2blY0e3BPKDU9WkYqIVs5akZbdWlqayxhYkx2WF5EKlprVn1MY3dXSzVfRSwy'@;
put 'ZnxCMGY9SFYjdzt3UnRKOmlnd1c+KGZJUTRUIiZCSlNDNC5LLDZrQXpoYkkyZ2xpVEtVb09XPVZYfVJHX0NsMDZib0oqOT4sJE81T3IxNGBxOE1XVzk0RUNoK1VfQnEoTV9sfUE0aU1rcCZZdDgsL3RVaiMjPHFNOXl9IXhbWyFQOC44RmI+Zm9aQlI2fHJPd3NgOi56Z3pLeGM6MnIiSzNqWj9U'@;
put 'KVhecjw6Wj14N0E4YCRyW1RrYT4xMXkxZUslYGIzMkxBTWxhdWNqKXdQalJAVnNkcTJCQUNRRE5lWE1PVHo9bzhvPyZNcl53YWhiZT9KViNCfXYqTUBZNSxKfUw8eE1IKy9PYzIpInJkNDBiPytQYjR6UWg+YXAmI0JkeFNZVFpkV1Zsen0pNlgyPDdvPSQlbC8sRnw7cnY4YDl2eFcjNURkXX4+'@;
put 'OCx3JSEoSFZKdmhCZi5pYDNmKWRGQ3s3WElufSYoaVUzfStnSisyVDZNeF47OXh5KUFXdU5UZVBDS2FmJjVbV1ticS8qUiJwWkNOeTFJaF42OEg2JmdPaU8uSUx6NkJLVlk3OitsJWU/MUtJcE9HK25PZk4qd2dQS0cydGw0UiVSdE9wPXxCbk4jfUp0YHlpZzpvfnc/fGUzRywqSjdIaUdMWF1x'@;
put 'cWYuUlB0K2c+ejhSbjVTOHpLMG5AS1BoWkY5WW8mUypJLEtUVTlHODhGYUYyRD4pKXRzXzR3WUU1ciRMKFdmMm9OJiliaG9wSkZFYHg0cHkucTs2WTJ4NWBxeFhIP3wifCsuQkNBc35ZUStWTWJGcD9oJH1XdzEkY0o7SUdKMl8jP0luOn0qOG1KeXV2SWFxQVRAKjowb3VvbE9fPXJpeUQlfjt8'@;
put 'UWE+OkVnbT5YWFk6cWI2S29TZ0k/dENTPjxGOVpZTCVlblZXQCk1e0NHTlI0O304SHxRWU5WU20pLyIoYlN0TDpNKj1IISZtaFIhJXd7VEBNS05KKnhUTlBdVVhPfDRCc30hRShGPSt5TCJdQUVRX2h0PU9xJm0hXTJGKlp4RCIhbj8hNGZFLkl9fDs0TkNdbFFpdVNlZnFyOC9rTig6YT5yRW0v'@;
put 'OClbZTZANzk3SGp5ZEJvQ3suKSJzUzJUb1IsRzM5UldsMHQmPVsoNkhoOFpGOnhpTl9jQjpyOjpNPG1HcG5kI2J3SFIjOjk2SGg3eWpMMlVERyxicHZRdmF1OiZZcSNdJnAualoodW87cCpFYXBzUFpzM3U1ei9xfCRgR19gZCZMMF4vPjhraUdKRGxdekokZCpEJFV3VGZEVi96fWtATXMuYW56'@;
put 'PSIrVVY+V0smSjpIY1tJU1U1UjtfVkc+bzplMG5oND5leHJ8SS5KUm9OTn0+THxiQiMsTkorRkpPRz85eSQ5fDg3QHFnL2BSVl5JT3JRbFc+OkdqNDI1RjhRRlRIT1U0b3R+fmMyNEpMJEo+Y0ZNaHkjanpvWyFTUHs/Y0w0ZHpqfC9ZNGZQYWpnUWp8KHY7bUl3IT0wV01ZPkovNH5WTi9ecF9N'@;
put 'Q2Rjb110Yz9SKGdSa0k6V0lFPXl6NlZlbD9lJlNpMl5fbSNROGRmbF1pejk4Wkp4Oj8lL1lSWT4wT0olJkFEeUVKZX4rVk8mZlVrQVtgPkddcTtQQkZmQDA3RyhyYkJpVGkhTUdBTiYkNG9IVk5MeXpyMC4zTWJCeHB6Kk1oelA7amFiSyN+UUFAMXVMJmtAImFIKmRKIVQzJmUqX2M6QkRIcGQm'@;
put 'MVd6QXd8TGZtKEtnKSsuaGdWW1MrfnIpQ1E6dEUkWzBDQVcvbHJgNm1abU5nQX11IWR5ZX5TS3trPE1rQFY5b1lfQDwkcildWjl5Ik9FSztBR0h5Ky5PSUU/JjAoR2cuTXc9Tk5YL3IsVXdXeH4jMjIyaTZZN3FWUVlSeHZlZzMpVnRseVo/bEs2fW1GV3xueH1DU0tUMkV8SWVpNTRrYUBtbGd6'@;
put 'VXdtWGJHOV1femtsMWFUOkZuW3YwNlc+N1I2TyI3PWM+VDwvc1ZvdUx5eDkuXkoqZ1Z2JW50dFAsdk5gWXdrSlp2PjJGTXJ8T3djSXNMb0QuMm9xTGlFVmFFMUYuaCpIO010X3tjJHhWUDU3bigvKUJlQTN3ZkJpW2JWdy9TQy97OG8yeFYsKFtsaWYiK0ohKzp2UUk+MjdJWUMqbTVFdXlfP3Qi'@;
put 'b3Z6fkxeMyJhM289MWgmbUp2eW5VZ3phWTokOFkrdXBmTjdLTURbS20sWzY1OmZMZVNSRW5Eek9nUEg8PEdFfSFHKF1taj9uS305QUIwe3JHOE9EKXFoIyp0czJqZFI4Sk07KCM9djlWd0VkNlNeVkJ1bUtIMFR5R0xQNlVTN25JY09iWUMyeVRgXyxkSlV4NzBJRDd3X015MWZKZU5KaEJ+JllX'@;
put 'Wy5AMUUwX0o+JjkoJFRxQ2ldPGh2K1dPVXYlKjdkNjs2aFl7e0dGWDNjbCJXVG5OeFVYS0dvZnsrd3A3PDYuKWJRUmh+SWlwbGdRVjtwVDtmOHgpLylFUkN9UTpNYkVkfTdpdkE4MCY2eyFHMyQ7XW97VjdfazssUG9CJjwzViloLypTWDZHfmVnJHpBVi9YTn1tKEtkPnomK1I7O3N8RnFwKE5w'@;
put 'e0hjJFlwcUpZR2xaKHFfaWRHcSxZQThLdTZRMEphP3srOUhbNndxWnJVWjNwQDtjc3BsdWBpUSpnflQ3Jig1X3k3OXZxRFhkPV4jO10vOFYvPixWQjVUXmNWV09CbENsL2NmYjp2V3x0VkRGOVBjUlpAXyN6RE1NKktNOSM2Rl1QU29UMlJ8LzZ2ajlya3dgVCEwOjRkZjBQWj9oJCNIeE4jZ2FG'@;
put 'bUgjYjE4OnlxZ0luK0ZoL25BKmhSW10kcnVGQCw3TC5LPGk+V2suX211ZjpYTXwwNXFQIzZ5c01LTXhrNUB0OjwqTi5TO1ksRV58XVBfeGxFRV5MV2hiWGdHSkxNV0hgcnk6TFJwPTVQPndHLjJ4N31PQGYqVm1kVXB0SEgxeDd9T1EjVTVHYU1Zd2JoPl52IkNIISUrdjR2RCZXS1p3Ql5dODMi'@;
put 'K3tIQ244Ni88a1FhUGBsPTA6KyE4fi8oWTdSblJVb3YzW1p0U0FyKl9dY2NZK013ZkZLMHFMQ3tRZXtIKCM6OXg+a1N2QmhzWW0jW1YwQEJNWFh8WFZYNVF3VzpDZ0FpQE5RblgyZExuSGo5NG1AVjRdfGhXdGhwPzxWdGRBJHBwcUNfPlRYQEBTNWxIb3xIbj86YzNEYEVxRFswLlJSdlQ1P3Ji'@;
put 'YEZhc3lUNGA8dXJKbi9idiU/Rz5QbFNUZWRJbkBER2YqSmVEbVpjKUJ6NFJlKHN7KlElWmpLa2BIL3JzLGB7UiZ8VytAVnRjO2VHcnM6aXo+JkImQj4/OkxrKio/LFJScWBmeEl3NUlbRUNWYyVoLlFiZSZbekczc0BnXyhlOCVvey5LZSgjLD5yU0YpcUV2OyRGeDw1bDgkZnNZeHVqO21QZm83'@;
put 'ZWdAVj5RXV1KSD9WWztlLDU0dy9bWnNeTllgO2IyNmJAOF8penFOe24iOSNzcHk2K0RLcnkvcXZ1XnZ1K0QzYHVediJDZkd8cVBAanNhK0NiOF4oSzovNWVYP09GcS9US2U1R2drPj14QSUrUiVgSHhyZ0JCLiVjQk50W1FVRWksa0VeeTZWfmk4WUYqIXVuUXcpbGdfXyE5XyE/REFpUEdGZT51'@;
put 'UjdMM1FscmFZSmomOm4oTkAiMlFuL2J2S1VfYF9XIU19Z1omNUx+THVpcl9ARTpGIkY7ViMoVyNtMy84SWh6X1pGZnR8Mzl6bXhianRfJilFbWp2b3FJWGRTOCleKU4vdkVeeS9JPzltKCJIQSl0UDl4Ry5xMT1kbThAUEdsJmhvWXVDRUhtK0IhWjYoUzEpO3dlPnpJQTguRzlyZXZvKnFrSjh4'@;
put 'SUBxcHJOKTlwa0QyM0hyKz5eZTA2MXpKfCtjVVQyW114bjl4fTZMZGZoLzBXMmNvaGk0cVM6NUhvd2hSeiJkfVtKS2cmKF83XTNaSWAxKEpHWSE0Wi9DSlljPlRUdkx3SG5fKiNSRDZAUV0lVS9IJT9HL0lJS3hXamtickBLZXY/QVBPZVd+RCY+Lj9fN1Q8KTsmTSlhMmxIRnMyUzIqTUNBZUBM'@;
put 'WmciRW45QlZFWC9XZnZVR3lUYjJ8a3grKTdKYEI4RHg3TnByUHpGJm4qZSxNb0lWdHFNeEg9TW9DWFRSKzNhbnY+ajlMK0J5VF9dOi43TT1hMSV1dXJgXiElb0tKJkxyJWsla1gkUlc5Qk5WNig8ZFRiaVEzL2RhWCYsWlVjYTV+cnRdUmUjcW1RMy8+YlU+fWY9OG5PfUc4eXQmI1lIcHcoO3dX'@;
put 'X2ZkbFFUfEFdWXkjXUVDXjNUTV0yMkVxZm8wKGRvbERVIXFfWCZKTXJocmd3ZD1RODw4cmQlPnF0Nm4kQk5yaHJBVDcjcDdwR2MvNTtjOSZaM1UyKTpEUSZ2X31keE05cjxsVnI5LlI7NUlAcW1gU0U5cE53LmIvZHlacWFWRkw4JGVee0Zfb3tucWJjfjtCKClpeFNSPEdXKzQvP2RNQjhSKm1v'@;
put 'WmBgUGlwKzE6S05tPGBkY2Z7SHRYNl8/K101ZUxueEJ9N3kuYmgoUi8/P3poOGFtR2BWP2Z5M15FeTZ9dC8pOEJUI1FmYkI4OUVtLjgmYnQjXWhieF88WENxVEBBJjlFKXVBZ0V8cFJvZU0zajhmZFRZen0xUDBgMllzRURgWUtJQjMlQF42akxobHd3WShHKSZ9TUNoO09iOEBbd3E5YE9nTi5o'@;
put 'RDVzW3QvKHRLMHpOYkJEYVApXyRhXmRdWk4/MiNjMWZ3bjluR18zQlM1Q0NsWmFOP1BPPEVOKzowSE5pV35QYjVJYkBmV1coUG04Lk9uOT5gQ24kUVg8V2dYKGBbcCo1ZHhnJkR2OSZIbjRafFRYLm52QH0vdGwxX29YRW5+fX5kZkN4UW1UTX5HOjlIX2h2MWBXQF9OYlMxWix1JkFlP2NlTmFu'@;
put 'YytvcH0/alZxTGdFRnJPTml4YmI5fGxmSGIxcS9rLzAscX5XbEo+bG44PW9hZD5aPmVIMix3OGRebXV1PnpJPiZmNl0+RTFfJG9IcSlkInAiTHJEXSN1MDl6UmtQc05qQnc/WCE4Qjp7ZVpUYVhnQj5TZEwuJCtNPjBFQWtAPDAuLyR8OCtpcz0rNEs0PE5ydmNJfEMuZEwjKz1CbE8yNU03bTZB'@;
put 'fTk1SWZod1JiV0IxN21SPmBrYWVZXi8ySTZzUWphSz0rMjQ4Zk9yeCpKRVo8S0JtTyNufiYiVzMrJEhQWm14JjJkcWY/eFQ4cDhCWF5wQ1BuL2QqL2szfT5Ca0wmVXpHel8sU0Q1U0l7WmJwXkd3Oks2OEM+c0NjJXYhXi5IVTZNVXY4YzcxQHpmJT5jWUI4JmpPIk9FVUx6cDAqLyM4S2RyJUtg'@;
put 'TmNLPi9wZUl2bj51czZIP2MqaCNwOSkhLCpbPG15YGNmIURRI1NfV25geWRnTUVOSj5ZVmAqJVFHMD1oS2k/XVdbbFFHWHdDPTlJRkJAOyE0S2JHVChqaFhbJHY0WTghcEwjLG8pbCY4dy5NLFAvL1UpKSp1OUIuT3clclRlPTFMbEx1RjIkcVVCTk0xcTpIWGwkQHQ0XjxKRWdxaWksO1hReixr'@;
put 'WjVfZHVVfFZCQC8kWmAoZmU7RDh1M09JdiVMYSJweHNfa0A1M31FJFtnUVd8VD92NnRRQi58bHJbPj15UGFLc0hUeHs6ej1EJl0mR2ZtNnRGMERyLDA6Ll48JC5FJTEhYW5aQUVFd35BQ3w6OjsxPWYocjVTPnhmJnBQYEVwUC4pajBlP1BaVzohc0VTPz8iVEFNYFR6Qkx8ckZOR3VGQ1kxOGM9'@;
put 'Vi4pVjw6VTJZTTdLW3QvXzR5S1cxRn47azFJKDFXSTMyTWdgeGBnSV9ob0g1L0l3PEovJnxGQithYSZgNTFmQX52Tk53TEFsLEh6MUo+ZF4+WTZXMTdlZWlHa1NtYWQvZkdzSiRIez0mQjhWfE01NEx3WnhJS1ZSdS9nRjFvOmFedmtuP3U/K19sRytVb3NBbXEoMGM/RD85cDoxW3NUcHQlLFFw'@;
put 'VDclOXlJX3oyQm5OTTVjRk5FYD9pR259WWl0PTw8I1VKLldLTz1xOjtXcCRPPWh1OncuNVcscmorWiI8KU94Xk0oRDpnLjwoOCU5MXM+UmQucXddJktAYDgvRDxPKyZtQCVVa3B3SGlzdGUkMDxZQFNDY2dWaEwrZWx6IntQJFFLbXtUZExpazZAaEQ3bnpmLkpuIUAxTGI/RD5rTypCLFhJPndV'@;
put 'Q19NM3w7SCkqcVA8LGVtfWgzKlYkKVorK15gKGZRZF1GJjROOnskez9CKE4hRStWaVpzb1djdXM0KEQmeCpWUTIuKUZOKUVtRDd4Pk9ZKztdPEx1WnwuRmM9fGsqNVlqRnxFVSl4e3lRZnRfMDN2LCJue1Y7LypGRlZVKSpDUXoyQGVDKiFncS4obmMxKCRsI05rQC4zKEImRih9JF9MfE5rTm55'@;
put 'VDdnaXNRT0NxaEpfVEBPfXs5TEVuZCE7NnNHVnhLI01yW2t7JVtfakZlc2UkNElCOFsoJSx+cWVaJHBGQV5iNUwwZX43VXIrdSxJbyZqdTk2V2BJZUhJPGA+Z2prUkUmVnI9LDI4ITpZYTBLK2h1WiYwUGlweEVQfj0sXmxzbnw1L2dHXUxrTl9uISlWZG0wYEgqQW5QJiVyQlZnJiorKmlKKEpN'@;
put 'az5II15TNDU3KyxjLFNHIzY0ZXM5fWRUbi40P1tXZyZGQD4lOmhmfmlHNywjNDRhR0g9aihfenQ8PFBDV3FFd3p9Mm1gZ30rR2JNaGZiOUIhTzE/OEJzJkhCKEg1Yz51NiR7Mnh5ImtuTnAuZ1YpeWtQVytFJWNgci9IcTx6cGZ8NjNUJCguZG9rPmBCRmQmVS9EPikkOG1hSV18KChiMSNwOUZI'@;
put 'NjI1QT1vJnZoTndudzs9RChhfjAyVDR1NnVAak9AVmNHTUE9amlgNHVvR1NJSEAhdE0+Yl9NK21eWT4qXklTWF5Fdjc5IUxQNXIwTzJtRFVnWmBUL3BmcjFWKH10WXFPRFlqd3F8cTlHc3I4MVJpVFN1aEBLPntHRWFeX20wM304ckpDNFA6czhbQ2olQyZrcGI4Ul5oMXF0YjBZd1lPKDpAQnh8'@;
put 'VytBMm0xVnJZPWcuRiVFSlEmTVRdWyhQdFdMOyxjL2RrNVg1eyZ2UFRlRSVaR2N9L0xCVnUmSW8se1dkMSRIS3Z9RCtQQWxxRFVuNU5EUCpEPFcmKUpDWnJVZDwiWGpoK15kKDZ7Vy9GVlk9bSQ+PkBMVmgiRl5kRD5PVG9xc1tdJWFTI0MyJVJ5SitfOyt9OGk2MEtufDsxZmBjbVsrODJUaDor'@;
put 'SGVUWm15PEduW0ZdWi5SMSl9Qk4mUjpBcWIoeCNMRUIhKkRsfEZHNFE6bihOR315dmZ8YWhUNmthfCRvaDVYaEtFJTtRZXxQPDplMml9eiV5a3VjOEImYkVWQ1B8YChgQTE+PHsxVE9yQ3Z2OUBySkE9eyJsfjZrXSZ0U2grPFQwTHhEaDZfc0d0Vks9NTVMP2syU25fWSQkaU5wcjs+dlRgdzJa'@;
put 'SHFLbnZwNF0oeShCcSpZJmY0OCxHdDFqS2dAfUs8eX1iOksvakpHTEpZUzpdS104LElPJjJHYUdeXjI3JmZAfV4+Yk1mKEd+YnF+cztlb2IpUiRWYjR9I3JbOTZVKCFzfHxySk58Xz4vVldpRVJjcWw0QHM1YHE/ckVQaEFrMSEzJnFfQ1YiNl0jZElneEdEIVY0ei9KKCwpRl5sNi90dV19M2BC'@;
put 'ISh+fH1hfEVjLH4kVC5pJl9fRn5LYyEvQ2N8VVs2KjY5ZVZmJGJzTlI3VEs6cmNhI318Yl0jaSVRREowUlN+UXtBRzJRTSFPRGhxZXAvOTkpPGt8I2xbYGlHaCphay5yfEFgRmtec3dzSmgmPmhXQiRYND5RTFtNQkNIKz4iQmJufj51NyVzVFpJVkpjcylYOEhMOm8rb1M0Ii8iRDM+OU15azM1'@;
put 'Tl8lNlRFaH5Je2NSPTtZMjkyamgydj9AR35Nez40PTtkPzJeeStgW007Pi59cn5mNmA0TF9LaCM7PHUmUzw/WCkuKl17ViQ8OCRpV1Y2KDBKUDtbcDZSInZxfjh9emkvdGF9JntRXWVheTEoMHhuSThgRjoqdUhXTEtkR31fTGQ0aEI7QmF5SH5gV008UTwoKWwxaCJMfmY2fTVIUkwqc2RiQTlj'@;
put 'cy5wfXNSWmgyfnk+UWxbUH1jUno5RShRPVZ8XVttOz87UTI5Mm5oLHNZRml9PlshcG1XNX1lfCM+KXN7a2dOZ257XSpAYW5zMTQxUFZ5U3wjVlsqIl9zdX5gcXwjRFtiJFVXIn1SWXJXOmVUYUNIMVleLEF4MGh8RVBUVldWfCNJNj50fiNmXWVMTCFKImZfemUlRDUrPnNvP3RFJF96ZFVOWGBl'@;
put 'QH1HKDgpfiRkVCNbPD8qLChST3ZpL3ppRzBAMVNkUjc/IUx2VkgoUjdZZC8/ZmxSRTA+VVhtKkh2OCIjTGl0akRKI1toNCVzWSQoUnFqfHxFP3lrUj19KzBvX0hqcHU8UjU+W3Z0NzZxL10rb0kmdGFsUTFEWWdyMWghSD4uN2UrW2EhOW8uajtvI2N0PEFiVUVhUjhna0dqLyM3b0ltWGFsUTF5'@;
put 'PTE6KlRfOyM7YXkvWDdue0lDVlhuPFV5R0J4YiN+dC5JYFVLMyFWfmhxMjlDUGl3Q35uZERuVyJEdGA2Rzl2QEkrXTZHdXM1OUVIc0plIVtqOXBMSGVRX0RpL3l8WkRzXz48YjZsKl98Nmd8I1FpIWc+MHMvcilwfkI8ZiUkOF00djhrRm45Tkk5L0drUTErckkwTGdRMVNIPWA6aH5CUnsuNFlF'@;
put 'UGlaKjh9JiEjNX5DZmZIRXpXQzdhJVlnP1VzeHBVaEYuTFdSZUZHLEZNUS99Q0h5dD82R1JmVTM1UlpaQjkxYSxEPW9XT0RuUDgxTElAOUdqW0ZOcy5Ccld4P1Q5dXBVY2tZK3AxaEEmKFlbKDlgTk0mZVE/d3NHWERNJmVRZyxrRT0oUUY5Z01lKSVabDpgS3tmJVBQdlJZRFNxOWckIkAoPShA'@;
put 'SlhCaTN2VSImcV9mJUhQalgudDIsSDpUUWkzYzlWM1VxOWdaelMkcHBJXTdYe3RwJSRNZlFZLFk3YFBKYmRYWzJdN2c+MWYzYzhqMVt+OVgvKVM/YmV7TW0sbG5WfmErZEZabmJja1RnPmZRMShTdjdGWmFEZVEkRFYsKFRQWVNaSDVYSndNYWFxZndEJlVnVlJjKXMxQi5VZ1ZJWChUWzhiNDs7'@;
put 'LmpnWkx5RmhRMSUjIVt+OThbW1I1VWZQY002JGtdODhWaCQ0bHA7WnoxKDM5NSJDTlF3d1hITSwpW0owcXRWRVtoKkJtcFNVQSF4RGJtYTRgODIsVGE8b3NJIVZ5aj9vZHdlTU9FdkcjLmRZMkZ+ej1MUUplUUksKFtaUWZReUR8MFpZcGFbdG9VeylidjFhQmRvVSFNZlFFLCZreVZRfWxWP308'@;
put 'WUJ9cDQlWjY1VltLNEd3OWo/fTo5SEwpVmtNcmNqUUA/W0wxViNMWlh9YkUjVUQmUndTXm40O0dtJHpUKnB3Iy9SVDAxP0dRI2pHd2VIZFM/bFc5VzpVbCt7S2JjOGZoO2dnNl1mR2NNIVZYMm4zaClEdHswOilYP3hEQ3R9ajFIZ2wmIys6X29iUEx6NlNIJURkSmdUSEY7XVphIy5lTltZO2xu'@;
put 'QGhDbUJYalBNQWB5RyRqdS9ibDltWlMhUFBIdUMrSmZAd3tXYXIqRzRZP0hFUFsoanRLNj5SSGl7fTtZaXpVJCtuR1M8aVdrOGhESHs0TU9LP30kOjRPR3ldWVlvKVRQaFl+LipRR3Q3b2diPlhiRS5TZCUyNmxYQzFWW2cyMis2QlExJHVQN18ya2xKTGZCVTh6WjFoN0tSLzFMcj82WyZ7VDFR'@;
put 'RFZma1lrVjdILEV0PFcwNlpeeXF1Sk85eXdeOkIlJWxOUXZJKWhxNV95dXpaM0I6fWN9ezlYSFR7KCkzRWhFTj9TOXV1YllISGFhclBtRk02cFpXWXhEKy88ZlZWeSNDVy9OXT06cDlnTGR5NHRPYWx0TzFrdG5IbDJwQC5RUGtIISl+NmI6KWNDJkFldEkscSklNCZHSDhmO0MlZkFnXWBjMSJD'@;
put 'OkYmPSNEODtdaDA2N2NeS3dGeCIhNUB1JERFUiRgVEZdOFZpbylZRlM+fEx7PWY3WUksM0J7MHpRUm14YlUuMCtnKDc2SHpxQXYxZEt4Vns2cHhyJiM/XS9iK2AxWzs+LHAmWywzKnhDXyxhPk03R0VzUk9gfFlLbDoyMXlIfHEyTjBdLyxRbEhfMmNAPSh8SzJEPk5yaGkpdUtnfkJEYFJeWy9W'@;
put 'dGt7KVgvMmhUQThvb0ZoQEZmcHczKEI3Nk9ucVFiOkBoXWUkN0NQbTc2UV9fJXVFcXwiZ1B7USxgWz9dUkBnW2giR1hab3grVjl5NzdbKEdvTjBUd3hTKSRFZUE8R25QX2tMKWV7aFQpeHF+T3B3YXUxfTJjLmU3PlU3TlZjMTo3aVBNRGJhU1NZVn1xXnNoamJxVVc6YUpgIVlzOiYmcXA0JSJR'@;
put 'WntsLFs7Y058aDVxWWcxajA2U31bezEkZUoiZHw+dzEqcVEscjtIcURNM1QlPFkyUWwqV1gybCh3PUc7NWY5Uzl9SWl7e1E2eVdkOlJ8NixEcUJhUVQvc0NYS2l3VDxEMlpKcXNobGdLOElgVHBCcWxicj58YSxqaj5tVm5WRD4lNCJeKi55blM1OU9tQ1cyOHJLUC9fR3NKTyojUV8rTk1feVly'@;
put 'ZilqcHl4U1hJdyssI1Ffdkk/b258X2FeL1Z0b3txKTJUVDJ+ZEc3Q0wiRSglQjE/XU1wK2BGKG5SfT1aXX1HN1JMJiRKdFNLQmF8QmBaZ1l3QThCai47TFk9ZzooeksoRTdbVEtAezMkWHszOmppYjFHdnpzcG1mM2tOSiZNckxrRWp5dmxzeWFFYC4yOFMwNmdnT0A3KGRLaGRgQT5yczxjSX5A'@;
put 'bjlnZ2lfaltlPTpwJSRRRWshO1ZqYnc7bzc7OD9lZDB3bFk3b149U1UlT3JaYU94eHNMW09aTl9sLDQ4Ozh5RjA6aD4lJk1iKnt1Ykw+YEVBZSp7KyxyJlcjJV1gI1JxeGBfeWdedF5CaWFtPDpsI35kd3hpcFNoREc4OiNGO20oYSk0IUQscUVkU3lUenB8ZWA+ZWg8ZTdzI2JuNSxwe1d8Plkq'@;
put 'PzQ5Tj5GdyNtbkh9R0ArSittIUFqIUxCN2E2ZHE0JU1iRnVJTEFWRmUsN1VpX193dkdfPlUlZUNpTUBfciVDVUl1SWx1cm9kSXB6TGJtNURXJTNHSX5iNVU3Zj1AOns0eS44RWxMOzpiUW4rX3BRbyN6Rnh2SGJFJmZmMDZ4QVtlQDtxKCxjWSxKLiNVcCMoeDdDWiY/SVdLU311SzpJYWRxZjEk'@;
put 'X0t5LGt3WXtoZTsySHtXLiY4YShEO2h5Vj5IMiJeKDh9R0VHVXExNndheVh6aD9DU2VgQXApeD1iVUc+aDgvOCxMRS9mPEI+XzksTH1Oc3c/cXhNUHlXYUdAaVQzOWU3YjUuK1kmbSZCfDY5MmVgJS5VRXVCSypIXyZoTXxrNlFEe3x0R250JiJkMipCKHtaV2IwLFI7MlArYGZbNU06cDIqKjNX'@;
put 'dVFdUEswNjBHSnFnY1VUPigzPG45T3hZKW9uS3E5Wj5mdzswKn5kfE1GcVM5MGA0dUdleD9RZjYkSnhnciF8R2twaEc5ViNqUkY0T2IrO0x4IVhnckJUIUdDRVpKUjBRSSVxWWp9L0tlX0BfNz43T2tkPm13aHBIeWJxSzJFaWtZS3d8Z2ZORXJRRFVleFt8SztjYWhuO3o8ejlKN2hwU2ghRi9Q'@;
put 'bnMkYyE9TVhnXiQ2blJyN3F8P2VOOHdsWDBKfWhzbS45cWBtbjI2aHhbL2VHPiE9Yl5xfHxHN1poJjFjeWF9V35xbWZuOEUrbDcvb1huai97I3BOJUV4NVY+bT5WZ2lUS3kpdVlCL04wQGpHb1ozVVI3QzNTcXNbLjdYWlB7RkI1UU13OSUrY0Z+IT1UO3hHb3BnY0NYP3FGWUhIRUQ/N3RqfDh8'@;
put 'XjYlKVNAMCs7bzl8R1opfHRiSUc/ZDF9L05sY0FDPl9kKUQiaypiIyU0JiVHb2JGOFFsMFppbER0S1BPYDZAaVRSYkkuRnlhPilEVi8uR3hgQlZHcSxXfWUlV0tMRk52VyFGdVEyXUtrJDYsaXI3JltwOEheWzxacU5uSV9PMUtxSDZVOT80VispMXZ9NXcuSnl9JUFBW1BoPFtyU0EzWCZtRz03'@;
put 'ZlJ2XzppTW41fm45flVScU1IISJbJnxjfWt8SmZ7R3hIfEJxQWVNd2UxbHlrcFFrfWYqaEdgOHs4eWNeWHRRfTsmWTRzZy83WnFuTX4vcWVxe3x4JWRMZTB7bl13Myo2KlYsMl86IjhMXkY8Sl8kVT1nNmpiKHx4JDZPJTV4cDJEOChWNkBsPyYlQTpEVm1KaXU2VmxiJDtxT2UsbzhwKllwXXRL'@;
put 'Z0EuYlFYPkpFPC5KVCpxfCNEJkFlcixBU1NYNDxjSTlqMDZ3L15LdUxORzRaNVVSakVST3tAeWA4LlopKSwuMEI9a2ZlTitnUW5de2RUWSg1WXtDQHouNENQNjk/aDtXSilUcEBeVD9iP3pnYjgjfURyLHhPejlLMiFibFQmRiEwdld9emdibz11U1dXOzo4WSYycUB2UypDK1Q7Ol5UcUBAYFE/'@;
put 'ZlY7OjFOQjI+Q2csO2JBU0tGITBUWTE5dzw5cSNgflI7fWg5PkM8YmJSZkdzRCUoZmMhZGgve3hPRDs/OWVlMEZndFUzNDN2b2ZeTj0ycH57K202SFgyenJJTSl+QF5XJmdlUjxiMlFZSGYlN0JtWUpCTEdmcTUpaj90YHZ+SS5AQH5ASDZiNl40OXF5OSJ1PSFIaDREJlUwI0JaZlBTP1owK2Vh'@;
put 'KWFEQkFiP1c6NklVMy8rYGFwRzxvPjE7dChxTGwwdl5WalBJP1RtK2VHKSF8O2VfXVVeZCxDYDEwQlk1MFlCWTkzZ05KQDF3I0Bvb1p0akk6UjN3I3t6fXolWXJYOXU7Yj5JJERwYj5JSURmYT8xQDE5ZD8/dS80Py5wVFBTYEhOeGlDWls1WGo7UENBQDE0OG8lJUR2NytbfWpDTlVYdEdxemZg'@;
put 'ZmUiTnV2Jk5YMDV2Ik08cjFudkA7ckRkbnhoKC9ZVFdQTyNRbyVzMFlgUD5id15fdFV9ekpBX3JWbl5FcDpCNDt6RnVAJkFPcEBDP0o0Vj1eWSVNX3A1N08yP2JVSEF6WkxKP3NvZkppOTx1YE8ocnNJXUFBTjhXeyt+NUM1NXF7My94dXo7dl9NIjQpWkcseyx1JSM8S28iQUYoTE8xRSJKdk5L'@;
put 'NWh+b24/eitabHV1QCNyT01CLFhMZ3I/YiIpV0RgMytDLFR1eDFkP2JGYn16MlpGWUI6UCx7LHlpe3FWSChSJForW0w/clsseCtETH1EOXY6XlslTlN6JXZuKlhvP1ZPUmh8alRCdGBhUW97cWZKQix1bXNqZ0cjNHpBKUtxVnRFQU5FbXNqPy8jZ35OKjRvYjlMOkYiWldjdGo/L0cxQDFVaXFW'@;
put 'b0Q5M143O3VkRE1KMiIofVZ7SilyNlhaZFIqLnhCTk9eaTtffld3N3R4Zmd5Qi9JQ0hPR2AyMHlAd0AoN2gsc2k2PEV1V19ITk49P1ZCMX5rQUEwWX17S0xYNnJtRUIsTHNYaHVqRldEQ3ZARmMqfFpRQmFLcyVEMEdvcndOZjB3b01dR21bW2ZyIWVBR2RlKm5aWHtdflJudXg7QDFMUFhPOi5r'@;
put 'dypUQWJAdyFldWNvYilHTU0hMG89Mzw+cnNqbnRdNDlxLiR2U1U0VU59XSIhNUlMd2Qvemc8WDBuP3pbWXtWTU1VcVdKJiMzIXJtRk1+Tmp7P086cmpAKHojeyZLYHMwR3JqIWMuWy59I11bZ0AxX2A4W1hKYUUyOnJwWCVrc25eOz88Tih3eER1YFZkb0xVM2hFJTNdTzhLITBHWEp+cSRPODxU'@;
put 'QWI8WWlXcUNHd1VlTis8YilHU0ZnLC98fStCNWpYPSEvTTlAOW5HdE99fStCNVFYblhgTjc2cTJmRnxHPkU8bmhjKFphXWdVPWxRfkoxPjhyUHs0Sj5DXlZGTCFUJk4kKDJEditOeiFMSnp7e3V3bTpfdkJXWTV4ZGZld31xT3QkQykxWDh1WU8xWzEzezQkPz8qNE9rLiVEVF1Sakp4Qmx0QS5P'@;
put 'SUlsMlErZDNMLCltZ2VZcHUyJjNLUFFtSjlGM3ciX1UpdmV4ZDdYO3dOOXdjUjkqWXcydm0iQ0lIPm5qUz4rVU0vQWVnQWYzI1dzTzh0KCNkUCJaRnJqZWN3L25dMjdoXUBBP3pjWERZTzcuKFs+YkooV3JqZWMuWz1IJV5gZXJIbF4zd3ssOTx3WlAjRCt+bX5vWn16PHI2bU9uJT1NKVI2W2Mv'@;
put 'K2RCKytkPlBae196fFdIViJ5IWVzYTwqQkppP3RgZFptVXVWR1pRdXssYjRAb0F9QShXaH1FQDFtQiRbb0cuOjl2KFV0RThZZlBuK1RQNWtuLG5EeVdgTklkKnhQaiFbYGZ6SUsoWHZDdlYzcW90aj15SmJIMUZeeksxTC5AcTRVPSUoS3Y6PXs5Sk0qRkMrRC4oeyxMeV4lOUMqK1BAJnl7UFgk'@;
put 'LlRZW1l3UWhDR2NFWF1IaH1kNzhWTSlJaT1lYTpXXjFiWDBTNXg+KyRWTXJiYSpBNVkxdjpgPk5uKnNXPygpNT4jWyE3OW12czY3PXs+VTp0IjVHaF53eShnRWJCa09xQGd0LjNLaEgjVmYpLDlENl5hbFNeRWFiO0I9Z3U4fHshKVFiQzRLZlZEMX5TaHx5SEkmeD9PVnY6PDYyZEAxdTpAb318'@;
put 'Lls0UmpEQDEqYDhbKH0kW2JdfSt8M0hYdjQ0W2slOXspKX5ANFMifXdoVFJRQH1JRyEkXz5KMXRTKGhQWEk1dHR2TDxCRno0dUpZaTxWRDFobTNJX1ZvI3hZdik3WCJqJm1AJkE8aG58Xzp6T1oiSXpSZFNbPyJIS3F+SXYyJVE7Q0dMXW56UXxsV2BdX2NTLD9XVHtLT0kjdHdDWFp3NTdFa1F7'@;
put 'T3xAflI7TSVnelNUe2N5ZUJAb1g6WS5zNmw8RFl9XSZHLkZieTE0Xi5vVjQvdk5yai9iLlshYDZiQDJdT01HKm9FT2AocjZsSGk5UkpUSmwibkkoUk4raS9OWT5QYURtKypJKnJzaisuRl9nRTpAO1QrbnFieyttS0Q1ai5lVFdiIWJsXmxGT0VjVjAjUldnOEZjOUJAMW5kP28mfmlhaH5Ad2BR'@;
put 'Xjt5QXd3aUMwfHY4bDRnak0zfi9dTi98R1ducD9aS25oOVU0NGU+UWhrRU9LP3NvOk1VM2hFZFZNM1dYV1c5VlIvfStPS0M1RVJ9emRVSzV2X19oQDJ0Tm9HITBOalJHVWBfelJZfDRGXU1bNHssOkwoKFIrTmgvakM1TnUyPmIyQGdZTnVEe1JHclJ8O3I2c0BVM0YwZ05+OUt+SylIU1k2enlV'@;
put 'Vzl+YnM4fntuQHp9VERZdD4vJjo7X3p9VFN1WSY7Yls/a3dOYj96LlRHWUVKUj9+RilTJU1WS2t6Z2ImYnM+SEgkIWJ+amBGSz4uVytUYFV6IXEscGl3ZWUpdTNURlpiZj9iZ0B+QFRLP21TaTkzIUspRzksOCQ3JCN6YGF9eEUsXnNbdUNIJSphPDlbdTt1T1Yrc2JEMF0pI2B3ek1WWG17WCFl'@;
put 'NzlxZWpGTj5peW5lZkZtWExeIiFuXVQ1RFF3MUAxZTovYV5ab2owTj5Fd1BwLnssWlU1ZztZIks0aHB+WH5zfXcofkBUKl5xP3IyLHssYSVvJTd6QDFVam9YZlh+PlZkYUppOSFLNnJhJCI+VmQvTSVnRFNTZFJiSzpAX3Z6JGtZa1tbQ01vKzBrTlt1el47JiZ9On1ZMClAJD97dlshWVI3eVM4'@;
put 'RjpzazRpPiJ9cmoxbilbWTJwSX45YitWUjRgX35xLmR8QnVPUkZKN35fQ1Z4SFY2eSJmY0xqc2haLCUhfFowVDRCQjBjIV9+UnF5MFV6WzxpQ34hMzpTaGcmSEkpUTlBZmgoNmomX21QVGA+QEZ1KXxYbyUpPX1JTSM3aUhXXWUzS2N6Zld8JTlHWG4xcEZUfWpBVSNyX1gpUHROMGZBJEB2SSV4'@;
put 'XXk0Rn1raUohVDM3ekUjUFplRCIrfjFHOF9XOk5tcGx7K0RMKlNDYzNCciZvekAxI2E7byladGp5RSg0bCJUUyx1VSFZfE08cEYmOyJYZGhIczhtdH1eczpVZEc+aldgbTsldVZxTEcqdjd2aENjfF9ueEZuVyszdGV+cl12fSMoKEoiIX47fC54UkxseU1PPmomaF4sUUJsPmxVfnM6MjA4aXZB'@;
put 'clpxPDtXIStESX1KXXg0KmRLOjkraWZLTFk2M05sLlNdant0PjtSbCFsfH4oOzsiNCF6eH5wX2t0eVE3UjVTaHxxW2o2c34/fHJ3eUY0UTMoI0lpaCt5bCFZcVY2UHhALG8qbCZOWzhtUnIiSTRUSHpUPCZ9JGJ8IyMoNEJ9PGVdaTMyOzFzO3x4SDMqLFszLiJOZkBKJCJLMUReRUt7djIyPlRY'@;
put 'VVJTfjlyKnZ8XSxZejk0WElGJmAsVTRGLz9xM09EKnFEITZDLCFMPDl9Jk1ITGtgI0EwOVZrWEZhXSUicENrfkEuYU16fGY1N3ZxKmhDcF9RIndrZmhneGBMcD95cFBXVUdsIU1+UU8qdksqUC50czxWd0J6eXNoMUQiUER9S0JydVcmWkhAWG9fUXZQTEg8L2Fofn5lMSo8fTlpM31kPXJbajg3'@;
put 'PHAmbC9KSiY6MWV5SCZgYTtKIip9OmBIZ1Q0fk5pTmwhUH40WzIqUnw5ejo7JjRAMXAmakp7bGMpRm1GNE9ZeEsxNVksQWxjcyJld2tbc0wmNEZ9OF98QFAmaDtldldsIVdzZjBsIVUoWkp3OlI0Xl8rVXtMUUBfanwzIVlWIWF8WEw+aTVfVGRUbkg4QTF9fUEyLml5X15SZ18ocz5fIjN5dmp8'@;
put 'eHRpQmZ6UnFJaVIjcnZVUmN8N1d0Rjd3cENMfSZxSy9OP0BMS1Y2fU54Wilqd2NzPyxsdWxfVGQuZUxAOixlcyNNYitte1VSRmh4e1hGa11TM3BDUH0ocXl5UmBpcDomUFZ7U2AvU1goOShXZVRefHZdT1Q0UVg5cWYjfT5gIUssO2E0OEpZJiQuU0VBQFF2bWh6SihFeF8zL1JXelYiJGZuQH48'@;
put 'Y3s7VXhiflh7IzRdSzghYWZqVkMxKyZqW0opVF9uN3JKcnxGISJCYXtDZy5lWUwiUEB8KmoqdjYqSC5sc2B8Xkk7USlzam0vQ3J7UFt6e2x1I3JtazZNS11uNnBrPV43WT8uRUhXNFM0aXRaeX1GRntqYFdueDJUPC99cHJ+ZipgSGl2RmNgOzBSSmswd2l7Jm9YRkJoRHApdkxWdHN1XUZYZFg7'@;
put 'W1FXRUJ0TEM0MzNEU0A1dGdTdkRuYj0qJFc1bmdnZEQobjZ5Z0daVjVbZ0FlIVhXakh9c1UzOGI9fEwxYmJYeTxkZiNSK1MvVTc+SztGflN1bjdNIT04JE1wVGVJV2pePWVFSVgxWytrXmd2L1tbPXE9SCRrbjxZMH1KbD4jPnMoS3t9V3diS25PTjZQeD4/WStKWTNWZyMzekhmelArVFUpbiZs'@;
put 'MEY+OmlqQjhnWz9qZ3Nnb0x3YS9EOE1zP2s6NkAzPj9WbllDVFkrNEBTb1RpPFJUL0U0fl1ibFZKLylJIzheYn1fKHo+M01aZTRKZ1M6I1k/VGFUXSRhaUFXc0BtaVVYV1oqZztiUnA4bCReLmlfenVWdjYwcVk0emExMVhvOUx6WWpgXnp5OjEobGpvUUhVeVk8ZUV4PDx0eDZdKVhfKlMqSlJB'@;
put 'cz1bLzxaX20la0ZrWGx4NChfUStGZz16XXNqUWM3QWlTT0pzamlYMjpbcmNhLzJJW3x5W0x3YT9vNmoofD9PbnN4MDBAUWdUcWc5N2ZjQ1sxLi8oITlLQ2cyKSUpV2ApeCFPZmlIVFZqbE9+X15wP1YvRywyMFpsKUpJNj0jQXAwbjJxbWokREIpekwmTC5NI2lrQHFofFN8UEV1XyFpe0BjYHQu'@;
put 'KV5lO0A+IjslQCt1JjJ4dFtFQVNeb0J1UHMxdm9Kb2ovNEElXyNhXixqejNYKCFdaGV3dlNgXSErb3dudiMyO3luYnMkS1ZTQTg3PUc6WmUxYi9CYjB+IzZwN0NlO2ZkUFc0WX1xXSlbRWw3KXVuOnwsPldfaTBFbWQ1IiZ7IShKIjtOcVNjbTw0NHomOkFBbTt1NVFgKDloVXY/YCQkRj9fN3JG'@;
put 'anBuN15TYzRySDYxMWVjKU99TCZHOTVWQSZ8NypEJntSMW87eTNkTHElQCw3XWlpdDouWFAhW3tQTGRIUzAmaH1xYm9RW21ZXmwvX2Z7KUNTTXZnei5RQkRpWztLUCJAbUVII19sJk4lQWVLVE5DYC51Yl9WUjYjKkJqVzU+TzJOciNaMXUueCgxdzMpPC9mPTNkNjxkcFVAdSw4Jklvcz9pKV1m'@;
put 'IXApU293SGRVP2ksXUtqMl0qd3o2Iks4UWd2cEAzYkA3PzFCNnd2Lishe0xtZ2lyTTg7IXRvPUYhVSZXaC5LVEM9P2NvR0JmaXlkZG1lZzdxfiEhIVBsIiJEPXRdJD9jQFtuUFNFJWJ1LFskT1V7VypgdTxXMT5MMDhpcihaZ24vd0JuUTorLkomekR2RnxPKEtkVEsrRkU5eD98ai5WJSVHKm8p'@;
put 'dlUmQCF2YHw3MSQlM3Z0XkAkb1YoMX19SVplPjg0NWhXZFdMdkxWJT9vb0JhQCN2YUNOKmZ3US9Sd0pWM20rLDt1JFQ1KEpIO1okdSpwQFleey9rSlJBNyJ+dlomTnZPOVk4SnNIbzIvfEAiUzY0KyJ4XSZ3YSZ5JGgvNnYsdCxpdyooIjhHQFtib0VEZD1FL2g1Q3YyV2tIOVtWNnRON3tnQkI7'@;
put 'elVkUylBSDRSaVA3cSF2SjpuNzFbI0YkSF5jPWEyR0NNcmN+QyskTSxCITEsZmpbdTNfUzl5VDRCfERrdHo1Sio8Ji5IdzhgfT8uKl8oLGhSUnhSWF8jXmRTNHBMVDhgPy9WNl0wJikwc2xmW1pgc0ZSJTpYYEI2QS9VdFU9K150Yzl7RzFmKyZZXW9TTXY4T3RFXj90cSgwNFlHQi9AW2xQRSw9'@;
put 'ckYiSClGWTZKbHBXLyokfkQiTjl9Wm45fHM8dWBzWltSTHRWYCFqRHFtLHlRZXdYUj5yMmM1NjFyVkJVX0xUcCgoK2FkR09WT1FRJFlmWkpuLDBhIXYlQE0haDY7R05aIzReVFFoR0shfDU+aXsyYWMxWCkkaD02TG5ddWgmQD8sJXIvcHR8ZVNmXThmWTB0OFdRRldhQ3RePG04IzpKd0JIdHdZ'@;
put 'Pn5OQ3cuSmxXdll7cTZwO2Y+JSJaa0dOMiRreCY3PDgoaTdRPjF7TmhPNDQ5V11ubGVCeXBYZnRUYFZUUF9ZSGwlPDA0M1dbU3w2RjYje0hLTm5LWCY/Q3F1M2o1JCZUKmsyOUMqOk4pJkwhOj44KCF8NTM0TS9AOVIqSiNBZkdwMzY5VFYjYGVXfWBpN3hVaTY0KG17WnNvVTtCZXYlOF55S3kl'@;
put 'WFpBb3FNSFo0WTFPcmFbe3pbJTd7XysvI1oxRllqMGNVe0pEYCFdZVNEYHwvTzUkLkwuczN8Uyw5RzchJm57fDRkfUQxMHIiMjNhbXZ3QUNtfkNlQDRaa1huZVVZPl5UJDNlSCkzP31+PFhZeisqVzBbLDR8QyRVOCNVeTpGU2I5MWFXVkJCenc3YFd8O1FvNU1Mb2YldUxpP0xCaG83NCZebGB0'@;
put 'eUF3NVMqbDppajlPZk9rMUJVWVhjUlN5LCxjbH14aU5vVmYvQkYvI2ZUfmQwVmtbeT11ZEJudlJtNFlFeldaSzQiV2tCbnpENUZPMCZrTUF4YnluMC5VRC80OyFyS2UxKEU2QnVJfUtJM1dgV3QhMCpXI3lQX3UqOlBdfTU7d1ZGcnIvIXI4TG13PEIoKWAkNEBAZWBlO28zaF5lWVkxKHBldUp7'@;
put 'bzY5S0I1NnZCa28kRFArT3o5dCtTc3FjTGBRKk9jd3YpWXFobTJ3XWdbbHYubTo/cGVVKStfci48d1AsST9MaX4/YXxteEJyMWM5bkR2dmlEXW4pQERxe0BnL3BxcF05WFdrbGN6XVVqUXRbcntIWCZVSVBZU0d3NyZ6UmM/aWY1NiMqbi9lXyk9STc0TmU+KkMrJTc2d0U1Vl9xNyolOkk3NlZC'@;
put 'IXVXb1llPStwP2l8MzxSRypRfDMpN3RKbT44NCxbeyhVeXBiUnBPOEg5N1dJRjhvLz0kZXglREU6e043fmB1OmJEcFBvTC81dGVtdkgoXVgzTz8lRjt5K2pvKzFZbUEzWC4wMUshNUElT0hYIklrPz90UG1wYHYvYk1scWpGSys6WSNnbl9gN0oiR0o7dEYzIT5DNG1heDduKzc/XitSRUApYUAr'@;
put 'ajhAdW1ZPWVBaXM0KzoqRkA2Vy90Z35qYHZeV3h5cEwjcSZ2IWMwZiNRWWVtfFQmKSlOI3VzdTlNcV4hYmZuQFZWT3tKXl5EIl9hQ3haVENwJUxDVj1CQmlRdSIvamNRZDowYU9JTyV8ckoxbz1kQz51M2pedjtbXkwmdVhjQikobWxufllRQTVzbkYxd0ElazRJWlglRXs0TSl7dFA/MkJCdW1x'@;
put 'UyRWdk87czR9a0ZGISxqKX0iR0BnUzF4Wjo5e0pZNkF+PF8/KCtNeTNYYztKIjNDWEtfWmQmfjZqUHx5KW9lZjVaWDAuVUV5YD0sSigjZ2hUbHo0PHJJWjg6KTx0WTlwRyw2V2RGYXRgZV5XX1UmOT1EWm42ZWApbkd4UStDMyxrRnlJUTx8ZEZvekFdfWB2QnEsaShSSCFMUEhebkhvS0g1Syxv'@;
put 'NnQjLixDfHA/WHFrfCk1cis6Vls1OGh4QCoyWVRMMCxgM1ldRDEmaV90c0ovR2ZmS1pqciIsfHQ8SDVSIV5pOigkNik8NSNFVjdTaHg9QS5FdSt4dn0sXnRQYXh7O34yLlZVdD1lMmBrRiFxaSJ5XWMjd1Y4dVNzbTYuN2hSKXluV3t7ZHR1fSpMWTJ1X2B6alI/cWE0Wzh8Q2VXSStuKHdUay4y'@;
put 'WWcqLmJOQkNfeUI7fVYyKi9yKUMjWCsofUhEOUY9THw/ND07Yzd4NiVtTkAzOXtSRjFoIi4vWUZKY3FUYW0hSkk0OzooRjxVNEhdT2csSHRtVWc9OUNCWzo7TjlDRzc7L3x1Q09qMl9IOVRxfkQ8eGp3Sj85MlFUW05sMXFaQ3BfNTdQUz99cyNaVztfdm17Ol9SWm5zP3FodyRtMD4ofFozTUld'@;
put 'Tz0kc0FdTWhKIzBoY0NLPXVfRS5TNypSZS8zdCN4WXk2bGI0b0ciTSltUyZJUTE9Z0UxMnw8V1phTFUsejV7fE5RPz1JaDNoSVQzNVApLFosQzBwKmhfIl5CV3JSNT5YdiguVjdiXV8wLyJvUy84bks4R1pWeDspeH0jYVZYKXomY2JuREdKMCh8bHV7JURaaTJSb2t5OVMibEU2cGtxMV1TPHwl'@;
put 'MFUzVTNdSG1DL15pRmI1X104KCt6YXczeVVLSERmaC8iZ2BXV09BaihwK2MwdToqWHI8LjAzVSgsR0E+ZSpGbC5acVZQWkpRV1hMLFojbjg5Q35ZRXBmQlk9STJQJlF3QXtxS2pFTzFeJHJEMWBzbm9CSlBoOl8xITVnJD4md2d4KWB2WFo+QCIyRmFQPCpgIXYwVzEhTzxzal5DTjMlcVZRfUQu'@;
put 'NGUoZGtaVVleM1dwS1dVQFUraT1jPClUe0lDK2MlQSlXay80OTZUWXh8aVN5OFBSK0N4ZS5GPlt3QGAkaytoZCRBT1o8QnJLYDVUMyVuJnNMRCJlTElQaiJUNmYzcnlyQywoe09MX0d6X2Nze30jfVNWNmpnQmAmYCVje0FTPm53TkBia3U4MGdEOng3VXRHMlQ/PnYhLj9AOnwmPW50MFVkZEB8'@;
put 'I3QsTW1YWnxGMTFZVlg1ZE9TTEFMMF5tVFozfjEsdkNuIUBMWCRoPUZHYkE2TGg0JV45emdvc0xMTmNuV2w0K3k5OjN5WlptfltJaDJfR3ZvPkBWUnNYLFRuYFNlNz5fckYvSCJ7L1tqaGFwaXo5Wz8raWx6S2J5e00oMj5mXTh1cTd4TSpoNGUvXUgqdk1TOnleeE0iU1RdTyxaR2UrYGIuYHFX'@;
put 'OW5EOlQiNlJbcXY9bDBwODBCaGBmejVbPUdFWU19MTBCfEEzX340YmgmTG9ZMEw0fW4mVDY3TH1veC9xUlhUe2UoZShJYltue2FkJDY5XWpaIXBoOE86a2QrZD1nVzhIUjJEOyI/NFB2MXBJe1Z6SEEwP3hlPU9fdlVeXzMhalsjVlgoJS5MYzZzVT47MXhJJUtvOGN6SF9SeTluYzsxeU04WTM3'@;
put 'NDxSTmVYK1BxIlUsK2N+RS5vfSJWflMwOHtxY340M0RiUDQxRWxVanx4YkVMal1bJEBNQi9iWUY0UG9WNllmPGUqTiFZPztIWl5OOmAjXTRNNFIqfXVJP3RAQElMNyZ1djVxeXRuaER5bTc8Tl0iLDQkJCZVR3s3TW18RT40IlgyfH1uUD5pe1RSOU98d08/W09JQ3RjeDM0OiF2b31DP1glOWo5'@;
put 'TnRiO2UobjwzPmljVVg4Qn0pNGc5QiN8WWB1elclLk5OTFNvJH0oTmRNMDJtISgrNSh+cFk+d1ZJd2hJX3A1fEBMIVRdYyg9bjJbWU1ubj5VbDB9PWdCOGBXKG9kOTpZNXBqaDk/RHZBXz8mJDAvJmx5IWchPWpgK10+P2xgZD1ge21JJEtVaHx1e15lWyY4WjJfNFcjfTleKU12WHk3ayZlTyws'@;
put 'JjlbQVB9eGlKKiZNKFYiX3AmMGlfO11UOXYmTDNHQ3BZNE0qZVF3RDJAZH5LQlcyNVkuWDB4bTB+eF9PM305bn1hN0I1ckMlaEMyT35EQGNUMF5lQ2E7flNfIjlAOD1lfm4hKUJoQFVRcl5lfENUWDR8QGJUO1NmVU5obFd2dllsOGlxclMzaClQXmY5QD93O29yOWtlfFYkd3I8fEJPRi5hIWNV'@;
put 'JSg4JXNmQygxPC5Ke3MuTTgrNGd1PVpOMj1IRUhKcjh3ckNGQSJnPXR3eSxdVmdrZzRANjZHWUZUZ3QwYF18R2VoOT83a1cuWyRtNC4kTEUsajRwKFZFRFFxfi4iQjtpWWdMVS43dVJ0XmxxLGYzZSVRLF5UcmlmN3I8LjRXbTJ9MyhgYEAqK1BJOSgwP0p7UDN7eiMkZURCPGY5TzolfWolKiVD'@;
put 'ZT5UWjhJJiEsZ0J2fTtkeTZ1emw3WkBIWiJwYj9yMCRnPUhtfWB8ZE1iWlhrPXpzLkJ9a0pjU2YqIylEOjA4RnI0Qzxicn1kezdYWk1VeTpWQn01KzcqU1omXyNYSHxUYlhyVl1hTnNVXW8qcW90KnxjOCkjdWI9M2o0aCV6YjZfMHUlMEs5WmtgS2dbNTtIUSE7QkBeXUgyOX5wZ2slTy5kJlhb'@;
put 'eCNRb14pOV1hKnZwVyhDRyRxIj8+PmwoSlBAQGlVRG9CX3RxKHBTejVie3UrJioyLHh4OkN6KltEU2FeY1deckBlWEBQIiNrN0xuOFJvb2Q0VkI0aTJrcSwha0JtN3RXREBVOjsxX1AjZ30xKjlscUtmIiowVD8oOUYiYiJQPV8ud15zX1hnMUJsV1s7eSU4fDxPVExqR3lkKHF4Smc3eHAhTH57'@;
put 'M3Nye1o1cVt7RUlwXVQpVWdjZiYmd31sdStzan5Ld3hQbEszb2w6az0pYTszTiZHMl43TDp0TVBQeiQvMyR8RnBSJlA5anN9MTUzd1Q0eWJ9bkxGej4jIyVqJEloMH5QYEJfeCx6OGhHTzFeZnMweSNVQy9zVGgyU34uWzFIJCEkQjUmTVB4O0InKSksb3h8fChveD1IUnQoe3dhc21CaW5hcnk6'@;
put 'eVEsbG9jYXRlRmlsZTp2b2lkIDB9KSksb3gpLnRoZW4oYz0+bmV3IHdGKGMpKX1zdGF0aWMgdW5sb2FkKCl7b3gmJihveD12b2lkIDApfXZlcnNpb24oKXtyZXR1cm4gdGhpcy5fbW9kdWxlLkdyYXBodml6LnByb3RvdHlwZS52ZXJzaW9uKCl9bGF5b3V0KGMsYT0ic3ZnIixmPSJkb3QiLGQp'@;
put 'e2lmKCFjKXJldHVybiIiO2NvbnN0IGg9bmV3IHRoaXMuX21vZHVsZS5HcmFwaHZpeihkPy55SW52ZXJ0PzE6MCxkPy5ub3A/ZD8ubm9wOjApO2xldCBtPSIiLF89IiI7dHJ5eyFmdW5jdGlvbihPLFgpe2NvbnN0IGFlPXtpbWFnZXM6W10sZmlsZXM6W10sLi4uWH07dmFyIHBlO1suLi5hZS5m'@;
put 'aWxlcywuLi4ocGU9YWUuaW1hZ2VzLHBlLm1hcChOUnQpKV0uZm9yRWFjaChiZT0+Ty5jcmVhdGVGaWxlKGJlLnBhdGgsYmUuZGF0YSkpfShoLGQpO3RyeXttPWgubGF5b3V0KGMsYSxmKX1jYXRjaChPKXtfPU8ubWVzc2FnZX1fPWgubGFzdEVycm9yKCl8fF99ZmluYWxseXt0aGlzLl9tb2R1'@;
put 'bGUuZGVzdHJveShoKX1pZighbSYmXyl0aHJvdyBuZXcgRXJyb3IoXyk7cmV0dXJuIG19Y2lyY28oYyxhPSJzdmciLGYpe3JldHVybiB0aGlzLmxheW91dChjLGEsImNpcmNvIixmKX1kb3QoYyxhPSJzdmciLGYpe3JldHVybiB0aGlzLmxheW91dChjLGEsImRvdCIsZil9ZmRwKGMsYT0ic3Zn'@;
put 'IixmKXtyZXR1cm4gdGhpcy5sYXlvdXQoYyxhLCJmZHAiLGYpfXNmZHAoYyxhPSJzdmciLGYpe3JldHVybiB0aGlzLmxheW91dChjLGEsInNmZHAiLGYpfW5lYXRvKGMsYT0ic3ZnIixmKXtyZXR1cm4gdGhpcy5sYXlvdXQoYyxhLCJuZWF0byIsZil9b3NhZ2UoYyxhPSJzdmciLGYpe3JldHVy'@;
put 'biB0aGlzLmxheW91dChjLGEsIm9zYWdlIixmKX1wYXRjaHdvcmsoYyxhPSJzdmciLGYpe3JldHVybiB0aGlzLmxheW91dChjLGEsInBhdGNod29yayIsZil9dHdvcGkoYyxhPSJzdmciLGYpe3JldHVybiB0aGlzLmxheW91dChjLGEsInR3b3BpIixmKX19ZnVuY3Rpb24gQ0YobCl7cmV0dXJu'@;
put 'IE9iamVjdC5hc3NpZ24oe30sbCl9ZnVuY3Rpb24gbG0obCl7cmV0dXJuIE1hdGgucm91bmQoMTAwKmwpLzEwMH1mdW5jdGlvbiBWOGUobCxjKXtpZigicG9seWdvbiI9PWwudGFnKXsoYT1DRihsKSkudGFnPSJwYXRoIjt2YXIgZD1DRihmPWwuYXR0cmlidXRlcyksaD1mLnBvaW50cztpZigi'@;
put 'cG9seWdvbiI9PWMudGFnKXsobT1sLmJib3gpLmN4PW0ueCttLndpZHRoLzIsbS5jeT1tLnkrbS5oZWlnaHQvMjtmb3IodmFyIE89Zi5wb2ludHMuc3BsaXQoIiAiKSxYPU8ubWFwKGZ1bmN0aW9uKEVuKXt2YXIgVHI9RW4uc3BsaXQoIiwiKTtyZXR1cm5bVHJbMF0tbS5jeCxUclsxXS1tLmN5'@;
put 'XX0pLGFlPVhbWC5sZW5ndGgtMV1bMF0scGU9WFtYLmxlbmd0aC0xXVsxXSxiZT0wO2JlPFgubGVuZ3RoO2JlKyssYWU9eGUscGU9VmUpe3ZhciBaZT0oeGU9WFtiZV1bMF0pLWFlO2lmKDAhPShsdD0oVmU9WFtiZV1bMV0pLXBlKSYmMDw9KGR0PWFlLXBlKlplL2x0KSYmZHQ8MS8wJiYoYWU8'@;
put 'PWR0JiZkdDw9eGV8fHhlPD1kdCYmZHQ8PWFlKSlicmVha312YXIgZ3Q9W1ttLmN4K2R0LG0uY3krMF0uam9pbigiLCIpXTtoPShndD0oZ3Q9Z3QuY29uY2F0KE8uc2xpY2UoYmUpKSkuY29uY2F0KE8uc2xpY2UoMCxiZSkpKS5qb2luKCIgIil9ZC5kPSJNIitoKyJ6IixkZWxldGUgZC5wb2lu'@;
put 'dHMsYS5hdHRyaWJ1dGVzPWR9ZWxzZXt2YXIgYTsoYT1DRihsKSkudGFnPSJwYXRoIixkPUNGKGY9bC5hdHRyaWJ1dGVzKTt2YXIgZix4ZSxWZSxkdCxqdD1mLmN4LHJuPWYuY3ksWHQ9Zi5yeCx5bj1mLnJ5O2lmKCJwb2x5Z29uIj09Yy50YWcpe3ZhciBtOyhtPWMuYmJveCkuY3g9bS54K20u'@;
put 'd2lkdGgvMixtLmN5PW0ueSttLmhlaWdodC8yO3ZhciBRbj1jLmF0dHJpYnV0ZXMucG9pbnRzLnNwbGl0KCIgIilbMF0uc3BsaXQoIiwiKSxsdD0oWmU9UW5bMF0tbS5jeCxRblsxXS1tLmN5KSxacj1NYXRoLnNxcnQoTWF0aC5wb3coWmUsMikrTWF0aC5wb3cobHQsMikpLGlyPVplL1pyLHNp'@;
put 'PS1sdC9acn1lbHNlIGlyPTEsc2k9MDtkLmQ9Ik0gIitqdCsiICIrcm4rIiBtICIrKHhlPVh0KmlyKSsiLCIrKFZlPS15bipzaSkrIiBhICIrWHQrIiwiK3luKyIgMCAxLDAgIisoWmU9KGR0PVh0Ki1pcikteGUpKyIsIisobHQ9LXluKi1zaS1WZSkrIiBhICIrWHQrIiwiK3luKyIgMCAxLDAg'@;
put 'IistWmUrIiwiKy1sdCsieiIsZGVsZXRlIGQuY3gsZGVsZXRlIGQuY3ksZGVsZXRlIGQucngsZGVsZXRlIGQucnksYS5hdHRyaWJ1dGVzPWR9cmV0dXJuIGF9ZnVuY3Rpb24galJ0KCl7dHJ5e3dGLmxvYWQoKS50aGVuKGE9PnthLmxheW91dCgiIiwic3ZnIiwiZG90IiksdGhpcy5sYXlvdXRT'@;
put 'eW5jPWEubGF5b3V0LmJpbmQoYSksbnVsbD09dGhpcy5fd29ya2VyJiZ0aGlzLl9kaXNwYXRjaC5jYWxsKCJpbml0RW5kIix0aGlzKSx0aGlzLl9hZnRlckluaXQmJnRoaXMuX2FmdGVySW5pdCgpfSl9Y2F0Y2h7fWlmKG51bGwhPXRoaXMuX3dvcmtlcil7dmFyIGw9dGhpcy5fdml6VVJMLGM9'@;
put 'dGhpczt0aGlzLl93b3JrZXJQb3J0Lm9ubWVzc2FnZT1mdW5jdGlvbihhKXtjLl93b3JrZXJDYWxsYmFja3Muc2hpZnQoKS5jYWxsKGMsYSl9LGwubWF0Y2goL15odHRwcz86XC9cL3xeXC9cLy9pKXx8KGw9bmV3IHdpbmRvdy5VUkwobCxkb2N1bWVudC5sb2NhdGlvbi5ocmVmKS5ocmVmKSxi'@;
put 'US5jYWxsKHRoaXMse3R5cGU6ImxheW91dCIsZG90OiIiLGVuZ2luZToiZG90Iix2aXpVUkw6bH0sZnVuY3Rpb24oYSl7fSksYlEuY2FsbCh0aGlzLHt0eXBlOiJ2ZXJzaW9uIn0sZnVuY3Rpb24oYSl7InZlcnNpb24iPT09YS5kYXRhLnR5cGUmJihjLl9ncmFwaHZpelZlcnNpb249YS5kYXRh'@;
put 'LnZlcnNpb24sYy5fZGlzcGF0Y2guY2FsbCgiaW5pdEVuZCIsdGhpcykpfSl9fWZ1bmN0aW9uIGJRKGwsYyl7dGhpcy5fd29ya2VyQ2FsbGJhY2tzLnB1c2goYyksdGhpcy5fd29ya2VyUG9ydC5wb3N0TWVzc2FnZShsKX1mdW5jdGlvbiBaUnQobCxjKXt2YXIgYT10aGlzLl9vcHRpb25zLmtl'@;
put 'eU1vZGUsZj10aGlzLl9vcHRpb25zLnR3ZWVuUGF0aHMsZD10aGlzLl9vcHRpb25zLnR3ZWVuU2hhcGVzO2lmKCJzdHJpbmciPT10eXBlb2YgdGhpcy5fb3B0aW9ucy50d2VlblByZWNpc2lvbiYmdGhpcy5fb3B0aW9ucy50d2VlblByZWNpc2lvbi5pbmNsdWRlcygiJSIpKXZhciBoPSt0aGlz'@;
put 'Ll9vcHRpb25zLnR3ZWVuUHJlY2lzaW9uLnNwbGl0KCIlIilbMF0vMTAwLG09dGhpcy5fb3B0aW9ucy50d2VlblByZWNpc2lvbi5pbmNsdWRlcygiJSIpO2Vsc2UgaD10aGlzLl9vcHRpb25zLnR3ZWVuUHJlY2lzaW9uLG09ITE7dmFyIF89dGhpcy5fb3B0aW9ucy5ncm93RW50ZXJpbmdFZGdl'@;
put 'cyxPPXt9LFg9dGhpcy5fZGljdGlvbmFyeXx8e30sYWU9e30scGU9dGhpcy5fbm9kZURpY3Rpb25hcnl8fHt9O2Z1bmN0aW9uIGR0KGlyLHNpPTAsQXIpeyhmdW5jdGlvbiBiZShpcixzaSl7dmFyIEFyPWlyLnRhZztpZigiaW5kZXgiPT1hKWlyLmtleT1zaTtlbHNlIGlmKCIjIiE9QXJbMF0p'@;
put 'aWYoImlkIj09YSlpci5rZXk9aXIuYXR0cmlidXRlcy5pZDtlbHNlIGlmKCJ0aXRsZSI9PWEpe3ZhciBFbj1pci5jaGlsZHJlbi5maW5kKGZ1bmN0aW9uKFRyKXtyZXR1cm4idGl0bGUiPT1Uci50YWd9KTtFbiYmKGlyLmtleT1Fbi5jaGlsZHJlbi5sZW5ndGg+MD9Fbi5jaGlsZHJlblswXS50'@;
put 'ZXh0OiIiKX1udWxsPT1pci5rZXkmJihkJiYoImVsbGlwc2UiPT1Bcnx8InBvbHlnb24iPT1BcikmJihBcj0icGF0aCIpLGlyLmtleT1BcisiLSIrc2kpfSkoaXIsc2kpLGZ1bmN0aW9uIHhlKGlyLHNpKXtpci5pZD0oc2k/c2kuaWQrIi4iOiIiKStpci5rZXl9KGlyLEFyKTt2YXIgVHI9WFtp'@;
put 'ci5pZF07KGZ1bmN0aW9uIFZlKGlyKXtPW2lyLmlkXT1pcn0pKGlyKSxmdW5jdGlvbiBaZShpcixzaSl7ZCYmaXIuaWQgaW4gWCYmKCJwb2x5Z29uIj09c2kudGFnfHwiZWxsaXBzZSI9PXNpLnRhZ3x8InBhdGgiPT1zaS50YWcpJiYoc2kudGFnIT1pci50YWd8fCJwb2x5Z29uIj09aXIudGFn'@;
put 'KSYmKCJwYXRoIiE9c2kudGFnJiYoaXIuYWx0ZXJuYXRpdmVPbGQ9VjhlKHNpLGlyKSksInBhdGgiIT1pci50YWcmJihpci5hbHRlcm5hdGl2ZU5ldz1WOGUoaXIsc2kpKSl9KGlyLFRyKSxmdW5jdGlvbiBsdChpcixzaSl7aWYoZiYmc2kmJigicGF0aCI9PXNpLnRhZ3x8aXIuYWx0ZXJuYXRp'@;
put 'dmVPbGQmJiJwYXRoIj09aXIuYWx0ZXJuYXRpdmVPbGQudGFnKSl7dmFyIEFyPShpci5hbHRlcm5hdGl2ZU5ld3x8aXIpLmF0dHJpYnV0ZXMuZDtpZihpci5hbHRlcm5hdGl2ZU9sZCl2YXIgRW49ZlEoaXIuYWx0ZXJuYXRpdmVPbGQpO2Vsc2UgRW49ZlEoc2kpOyhpci5hbHRlcm5hdGl2ZU9s'@;
put 'ZHx8KGlyLmFsdGVybmF0aXZlT2xkPXt9KSkucG9pbnRzPWZ1bmN0aW9uIHZSdChsLGMsYSxmKXtjb25zdCBkPWwsaD1kLmNsb25lTm9kZSgpLG09ZC5nZXRUb3RhbExlbmd0aCgpLF89KGguc2V0QXR0cmlidXRlKCJkIixjKSxoKS5nZXRUb3RhbExlbmd0aCgpLE89WzBdO2xldCBYPTA7Y29u'@;
put 'c3QgYWU9Zj9hOmEvTWF0aC5tYXgobSxfKTtmb3IoOyhYKz1hZSk8MTspTy5wdXNoKFgpO3JldHVybiBPLnB1c2goMSksTy5tYXAoZnVuY3Rpb24oYmUpe2NvbnN0IHhlPWQuZ2V0UG9pbnRBdExlbmd0aChiZSptKSxWZT1oLmdldFBvaW50QXRMZW5ndGgoYmUqXyk7cmV0dXJuW1t4ZS54LHhl'@;
put 'LnldLFtWZS54LFZlLnldXX0pfShFbixBcixoLG0pfX0oaXIsVHIpO3ZhciBWbj17fTtpci5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKGNyKXt2YXIgQ3I9Y3IudGFnOygiZWxsaXBzZSI9PUNyfHwicG9seWdvbiI9PUNyKSYmKENyPSJwYXRoIiksbnVsbD09Vm5bQ3JdJiYoVm5bQ3JdPTAp'@;
put 'LGR0KGNyLFZuW0NyXSsrLGlyKX0pfWZ1bmN0aW9uIHJuKGlyKXsoZnVuY3Rpb24gZ3QoaXIpe2lmKF8mJmlyLnBhcmVudCYmIm5vZGUiPT1pci5wYXJlbnQuYXR0cmlidXRlcy5jbGFzcyYmInRpdGxlIj09aXIudGFnKXtpZihpci5jaGlsZHJlbi5sZW5ndGg+MCl2YXIgRW49aXIuY2hpbGRy'@;
put 'ZW5bMF0udGV4dDtlbHNlIEVuPSIiO2FlW0VuXT1pci5wYXJlbnR9fSkoaXIpLGZ1bmN0aW9uIGp0KGlyKXt2YXIgQXI9aXIudGFnO2lmKF8mJiFYW2lyLmlkXSYmaXIucGFyZW50JiZQOGUoaXIpJiYoInBhdGgiPT1Bcnx8InBvbHlnb24iPT1Bcikpe2lmKCJwb2x5Z29uIj09QXIpe3ZhciBU'@;
put 'cj1pci5wYXJlbnQuY2hpbGRyZW4uZmluZChmdW5jdGlvbihOcil7cmV0dXJuInBhdGgiPT1Oci50YWd9KTtUciYmKGlyLnRvdGFsTGVuZ3RoPVRyLnRvdGFsTGVuZ3RoKX12YXIgVm49ZnVuY3Rpb24gX1J0KGwpe3JldHVybiBmdW5jdGlvbiBiUnQobCl7cmV0dXJuImVkZ2UiPT1sLnBhcmVu'@;
put 'dC5hdHRyaWJ1dGVzLmNsYXNzP2wucGFyZW50OmwucGFyZW50LnBhcmVudC5wYXJlbnR9KGwpLmNoaWxkcmVuLmZpbmQoZnVuY3Rpb24oYyl7cmV0dXJuInRpdGxlIj09Yy50YWd9KX0oaXIpLGNyPVZuLmNoaWxkcmVuWzBdLENyPWNyLnRleHQuc3BsaXQoIi0+Iik7MiE9Q3IubGVuZ3RoJiYo'@;
put 'Q3I9Y3IudGV4dC5zcGxpdCgiLS0iKSk7dmFyIFlyPUNyWzBdLFN0PWFlW1lyXSxGdD1wZVtZcl07aWYoRnQpe2lmKCh3bj1TdC5jaGlsZHJlbi5maW5kSW5kZXgoZnVuY3Rpb24oTnIsZGkpe3JldHVybiJnIj09TnIudGFnfSkpPj0wKXt2YXIgV3Q9U3QuY2hpbGRyZW5bd25dLmNoaWxkcmVu'@;
put 'LmZpbmRJbmRleChmdW5jdGlvbihOcixkaSl7cmV0dXJuImEiPT1Oci50YWd9KTtTdD1TdC5jaGlsZHJlblt3bl0uY2hpbGRyZW5bV3RdfSh3bj1GdC5jaGlsZHJlbi5maW5kSW5kZXgoZnVuY3Rpb24oTnIsZGkpe3JldHVybiJnIj09TnIudGFnfSkpPj0wJiYoV3Q9RnQuY2hpbGRyZW5bd25d'@;
put 'LmNoaWxkcmVuLmZpbmRJbmRleChmdW5jdGlvbihkaSxxcil7cmV0dXJuImEiPT1kaS50YWd9KSxGdD1GdC5jaGlsZHJlblt3bl0uY2hpbGRyZW5bV3RdKTtmb3IodmFyIFNuPVN0LmNoaWxkcmVuLHduPTA7d248U24ubGVuZ3RoO3duKyspaWYoInBvbHlnb24iPT1Tblt3bl0udGFnfHwiZWxs'@;
put 'aXBzZSI9PVNuW3duXS50YWd8fCJwYXRoIj09U25bd25dLnRhZ3x8InRleHQiPT1Tblt3bl0udGFnKXt2YXIgYnI9U25bd25dO2JyZWFrfXZhciBkcj1GdC5jaGlsZHJlbjtmb3Iod249MDt3bjxkci5sZW5ndGg7d24rKylpZigicG9seWdvbiI9PWRyW3duXS50YWd8fCJlbGxpcHNlIj09ZHJb'@;
put 'd25dLnRhZ3x8InBhdGgiPT1kclt3bl0udGFnfHwidGV4dCI9PWRyW3duXS50YWcpe3ZhciBMcj1kclt3bl07YnJlYWt9aXIub2Zmc2V0PUxyJiZicj97eDpMci5jZW50ZXIueC1ici5jZW50ZXIueCx5OkxyLmNlbnRlci55LWJyLmNlbnRlci55fTp7eDowLHk6MH19fX0oaXIpLGlyLmNoaWxk'@;
put 'cmVuLmZvckVhY2goZnVuY3Rpb24oc2kpe3JuKHNpKX0pfXRoaXMuX2Rpc3BhdGNoLmNhbGwoImxheW91dEVuZCIsdGhpcyk7dmFyIFh0PU9hKGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSkuYXBwZW5kKCJkaXYiKSxRbj0obmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJv'@;
put 'bVN0cmluZyhsLCJpbWFnZS9zdmcreG1sIik7WHQuYXBwZW5kKGZ1bmN0aW9uKCl7cmV0dXJuIFFuLmRvY3VtZW50RWxlbWVudH0pO3ZhciBWcj1ENihYdC5zZWxlY3QoInN2ZyIpKTt0aGlzLl9kaXNwYXRjaC5jYWxsKCJkYXRhRXh0cmFjdEVuZCIsdGhpcyksZHQoVnIpLHRoaXMuX2Rpc3Bh'@;
put 'dGNoLmNhbGwoImRhdGFQcm9jZXNzUGFzczFFbmQiLHRoaXMpLHJuKFZyKSx0aGlzLl9kaXNwYXRjaC5jYWxsKCJkYXRhUHJvY2Vzc1Bhc3MyRW5kIix0aGlzKSx0aGlzLl9kYXRhPVZyLHRoaXMuX2RpY3Rpb25hcnk9Tyx0aGlzLl9ub2RlRGljdGlvbmFyeT1hZSx0aGlzLl9leHRyYWN0RGF0'@;
put 'YT1mdW5jdGlvbihpcixzaSxBcil7dmFyIEVuPUQ2KGlyKTtyZXR1cm4gZHQoRW4sc2ksQXIpLHJuKEVuKSxFbn0sdGhpcy5fYnVzeT0hMSx0aGlzLl9kaXNwYXRjaC5jYWxsKCJkYXRhUHJvY2Vzc0VuZCIsdGhpcyksYyYmYy5jYWxsKHRoaXMpLHRoaXMuX3F1ZXVlLmxlbmd0aD4wJiZ0aGlz'@;
put 'Ll9xdWV1ZS5zaGlmdCgpLmNhbGwodGhpcyl9ZnVuY3Rpb24gU0YobCxjKXtpZigoYT0obD1jP2wudG9FeHBvbmVudGlhbChjLTEpOmwudG9FeHBvbmVudGlhbCgpKS5pbmRleE9mKCJlIikpPDApcmV0dXJuIG51bGw7dmFyIGEsZj1sLnNsaWNlKDAsYSk7cmV0dXJuW2YubGVuZ3RoPjE/Zlsw'@;
put 'XStmLnNsaWNlKDIpOmYsK2wuc2xpY2UoYSsxKV19dmFyIEI4ZSxtTHQ9L14oPzooLik/KFs8Pj1eXSkpPyhbK1wtKCBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC5cZCspPyh+KT8oW2EteiVdKT8kL2k7ZnVuY3Rpb24gX1EobCl7aWYoIShjPW1MdC5leGVjKGwpKSl0aHJvdyBuZXcgRXJy'@;
put 'b3IoImludmFsaWQgZm9ybWF0OiAiK2wpO3ZhciBjO3JldHVybiBuZXcgd1Eoe2ZpbGw6Y1sxXSxhbGlnbjpjWzJdLHNpZ246Y1szXSxzeW1ib2w6Y1s0XSx6ZXJvOmNbNV0sd2lkdGg6Y1s2XSxjb21tYTpjWzddLHByZWNpc2lvbjpjWzhdJiZjWzhdLnNsaWNlKDEpLHRyaW06Y1s5XSx0eXBl'@;
put 'OmNbMTBdfSl9ZnVuY3Rpb24gd1EobCl7dGhpcy5maWxsPXZvaWQgMD09PWwuZmlsbD8iICI6bC5maWxsKyIiLHRoaXMuYWxpZ249dm9pZCAwPT09bC5hbGlnbj8iPiI6bC5hbGlnbisiIix0aGlzLnNpZ249dm9pZCAwPT09bC5zaWduPyItIjpsLnNpZ24rIiIsdGhpcy5zeW1ib2w9dm9pZCAw'@;
put 'PT09bC5zeW1ib2w/IiI6bC5zeW1ib2wrIiIsdGhpcy56ZXJvPSEhbC56ZXJvLHRoaXMud2lkdGg9dm9pZCAwPT09bC53aWR0aD92b2lkIDA6K2wud2lkdGgsdGhpcy5jb21tYT0hIWwuY29tbWEsdGhpcy5wcmVjaXNpb249dm9pZCAwPT09bC5wcmVjaXNpb24/dm9pZCAwOitsLnByZWNpc2lv'@;
put 'bix0aGlzLnRyaW09ISFsLnRyaW0sdGhpcy50eXBlPXZvaWQgMD09PWwudHlwZT8iIjpsLnR5cGUrIiJ9ZnVuY3Rpb24gajhlKGwsYyl7dmFyIGE9U0YobCxjKTtpZighYSlyZXR1cm4gbCsiIjt2YXIgZj1hWzBdLGQ9YVsxXTtyZXR1cm4gZDwwPyIwLiIrbmV3IEFycmF5KC1kKS5qb2luKCIw'@;
put 'IikrZjpmLmxlbmd0aD5kKzE/Zi5zbGljZSgwLGQrMSkrIi4iK2Yuc2xpY2UoZCsxKTpmK25ldyBBcnJheShkLWYubGVuZ3RoKzIpLmpvaW4oIjAiKX1fUS5wcm90b3R5cGU9d1EucHJvdG90eXBlLHdRLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbGwrdGhp'@;
put 'cy5hbGlnbit0aGlzLnNpZ24rdGhpcy5zeW1ib2wrKHRoaXMuemVybz8iMCI6IiIpKyh2b2lkIDA9PT10aGlzLndpZHRoPyIiOk1hdGgubWF4KDEsMHx0aGlzLndpZHRoKSkrKHRoaXMuY29tbWE/IiwiOiIiKSsodm9pZCAwPT09dGhpcy5wcmVjaXNpb24/IiI6Ii4iK01hdGgubWF4KDAsMHx0'@;
put 'aGlzLnByZWNpc2lvbikpKyh0aGlzLnRyaW0/In4iOiIiKSt0aGlzLnR5cGV9O2NvbnN0IHo4ZT17IiUiOihsLGMpPT4oMTAwKmwpLnRvRml4ZWQoYyksYjpsPT5NYXRoLnJvdW5kKGwpLnRvU3RyaW5nKDIpLGM6bD0+bCsiIixkOmZ1bmN0aW9uIGZMdChsKXtyZXR1cm4gTWF0aC5hYnMobD1N'@;
put 'YXRoLnJvdW5kKGwpKT49MWUyMT9sLnRvTG9jYWxlU3RyaW5nKCJlbiIpLnJlcGxhY2UoLywvZywiIik6bC50b1N0cmluZygxMCl9LGU6KGwsYyk9PmwudG9FeHBvbmVudGlhbChjKSxmOihsLGMpPT5sLnRvRml4ZWQoYyksZzoobCxjKT0+bC50b1ByZWNpc2lvbihjKSxvOmw9Pk1hdGgucm91'@;
put 'bmQobCkudG9TdHJpbmcoOCkscDoobCxjKT0+ajhlKDEwMCpsLGMpLHI6ajhlLHM6ZnVuY3Rpb24gdkx0KGwsYyl7dmFyIGE9U0YobCxjKTtpZighYSlyZXR1cm4gbCsiIjt2YXIgZj1hWzBdLGQ9YVsxXSxoPWQtKEI4ZT0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihkLzMp'@;
put 'KSkpKzEsbT1mLmxlbmd0aDtyZXR1cm4gaD09PW0/ZjpoPm0/ZituZXcgQXJyYXkoaC1tKzEpLmpvaW4oIjAiKTpoPjA/Zi5zbGljZSgwLGgpKyIuIitmLnNsaWNlKGgpOiIwLiIrbmV3IEFycmF5KDEtaCkuam9pbigiMCIpK1NGKGwsTWF0aC5tYXgoMCxjK2gtMSkpWzBdfSxYOmw9Pk1hdGgu'@;
put 'cm91bmQobCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkseDpsPT5NYXRoLnJvdW5kKGwpLnRvU3RyaW5nKDE2KX07ZnVuY3Rpb24gVThlKGwpe3JldHVybiBsfXZhciBNRixqZixaOGU9QXJyYXkucHJvdG90eXBlLm1hcCxZOGU9WyJ5IiwieiIsImEiLCJmIiwicCIsIm4iLCJceGI1Iiwi'@;
put 'bSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl07IWZ1bmN0aW9uIF9MdChsKXtNRj1mdW5jdGlvbiB5THQobCl7dmFyIGM9dm9pZCAwPT09bC5ncm91cGluZ3x8dm9pZCAwPT09bC50aG91c2FuZHM/VThlOmZ1bmN0aW9uIGhMdChsLGMpe3JldHVybiBmdW5jdGlvbihhLGYp'@;
put 'e2Zvcih2YXIgZD1hLmxlbmd0aCxoPVtdLG09MCxfPWxbMF0sTz0wO2Q+MCYmXz4wJiYoTytfKzE+ZiYmKF89TWF0aC5tYXgoMSxmLU8pKSxoLnB1c2goYS5zdWJzdHJpbmcoZC09XyxkK18pKSwhKChPKz1fKzEpPmYpKTspXz1sW209KG0rMSklbC5sZW5ndGhdO3JldHVybiBoLnJldmVyc2Uo'@;
put 'KS5qb2luKGMpfX0oWjhlLmNhbGwobC5ncm91cGluZyxOdW1iZXIpLGwudGhvdXNhbmRzKyIiKSxhPXZvaWQgMD09PWwuY3VycmVuY3k/IiI6bC5jdXJyZW5jeVswXSsiIixmPXZvaWQgMD09PWwuY3VycmVuY3k/IiI6bC5jdXJyZW5jeVsxXSsiIixkPXZvaWQgMD09PWwuZGVjaW1hbD8iLiI6'@;
put 'bC5kZWNpbWFsKyIiLGg9dm9pZCAwPT09bC5udW1lcmFscz9VOGU6ZnVuY3Rpb24gcEx0KGwpe3JldHVybiBmdW5jdGlvbihjKXtyZXR1cm4gYy5yZXBsYWNlKC9bMC05XS9nLGZ1bmN0aW9uKGEpe3JldHVybiBsWythXX0pfX0oWjhlLmNhbGwobC5udW1lcmFscyxTdHJpbmcpKSxtPXZvaWQg'@;
put 'MD09PWwucGVyY2VudD8iJSI6bC5wZXJjZW50KyIiLF89dm9pZCAwPT09bC5taW51cz8iXHUyMjEyIjpsLm1pbnVzKyIiLE89dm9pZCAwPT09bC5uYW4/Ik5hTiI6bC5uYW4rIiI7ZnVuY3Rpb24gWChwZSl7dmFyIGJlPShwZT1fUShwZSkpLmZpbGwseGU9cGUuYWxpZ24sVmU9cGUuc2lnbixa'@;
put 'ZT1wZS5zeW1ib2wsbHQ9cGUuemVybyxkdD1wZS53aWR0aCxndD1wZS5jb21tYSxqdD1wZS5wcmVjaXNpb24scm49cGUudHJpbSxYdD1wZS50eXBlOyJuIj09PVh0PyhndD0hMCxYdD0iZyIpOno4ZVtYdF18fCh2b2lkIDA9PT1qdCYmKGp0PTEyKSxybj0hMCxYdD0iZyIpLChsdHx8IjAiPT09'@;
put 'YmUmJiI9Ij09PXhlKSYmKGx0PSEwLGJlPSIwIix4ZT0iPSIpO3ZhciB5bj0iJCI9PT1aZT9hOiIjIj09PVplJiYvW2JveFhdLy50ZXN0KFh0KT8iMCIrWHQudG9Mb3dlckNhc2UoKToiIixRbj0iJCI9PT1aZT9mOi9bJXBdLy50ZXN0KFh0KT9tOiIiLE9yPXo4ZVtYdF0sVnI9L1tkZWZncHJz'@;
put 'JV0vLnRlc3QoWHQpO2Z1bmN0aW9uIFpyKGlyKXt2YXIgRW4sVHIsVm4sc2k9eW4sQXI9UW47aWYoImMiPT09WHQpQXI9T3IoaXIpK0FyLGlyPSIiO2Vsc2V7dmFyIGNyPShpcj0raXIpPDB8fDEvaXI8MDtpZihpcj1pc05hTihpcik/TzpPcihNYXRoLmFicyhpciksanQpLHJuJiYoaXI9ZnVu'@;
put 'Y3Rpb24gZ0x0KGwpe2U6Zm9yKHZhciBkLGM9bC5sZW5ndGgsYT0xLGY9LTE7YTxjOysrYSlzd2l0Y2gobFthXSl7Y2FzZSIuIjpmPWQ9YTticmVhaztjYXNlIjAiOjA9PT1mJiYoZj1hKSxkPWE7YnJlYWs7ZGVmYXVsdDppZighK2xbYV0pYnJlYWsgZTtmPjAmJihmPTApfXJldHVybiBmPjA/'@;
put 'bC5zbGljZSgwLGYpK2wuc2xpY2UoZCsxKTpsfShpcikpLGNyJiYwPT0raXImJiIrIiE9PVZlJiYoY3I9ITEpLHNpPShjcj8iKCI9PT1WZT9WZTpfOiItIj09PVZlfHwiKCI9PT1WZT8iIjpWZSkrc2ksQXI9KCJzIj09PVh0P1k4ZVs4K0I4ZS8zXToiIikrQXIrKGNyJiYiKCI9PT1WZT8iKSI6'@;
put 'IiIpLFZyKWZvcihFbj0tMSxUcj1pci5sZW5ndGg7KytFbjxUcjspaWYoNDg+KFZuPWlyLmNoYXJDb2RlQXQoRW4pKXx8Vm4+NTcpe0FyPSg0Nj09PVZuP2QraXIuc2xpY2UoRW4rMSk6aXIuc2xpY2UoRW4pKStBcixpcj1pci5zbGljZSgwLEVuKTticmVha319Z3QmJiFsdCYmKGlyPWMoaXIs'@;
put 'MS8wKSk7dmFyIENyPXNpLmxlbmd0aCtpci5sZW5ndGgrQXIubGVuZ3RoLFlyPUNyPGR0P25ldyBBcnJheShkdC1DcisxKS5qb2luKGJlKToiIjtzd2l0Y2goZ3QmJmx0JiYoaXI9YyhZcitpcixZci5sZW5ndGg/ZHQtQXIubGVuZ3RoOjEvMCksWXI9IiIpLHhlKXtjYXNlIjwiOmlyPXNpK2ly'@;
put 'K0FyK1lyO2JyZWFrO2Nhc2UiPSI6aXI9c2krWXIraXIrQXI7YnJlYWs7Y2FzZSJeIjppcj1Zci5zbGljZSgwLENyPVlyLmxlbmd0aD4+MSkrc2kraXIrQXIrWXIuc2xpY2UoQ3IpO2JyZWFrO2RlZmF1bHQ6aXI9WXIrc2kraXIrQXJ9cmV0dXJuIGgoaXIpfXJldHVybiBqdD12b2lkIDA9PT1q'@;
put 'dD82Oi9bZ3Byc10vLnRlc3QoWHQpP01hdGgubWF4KDEsTWF0aC5taW4oMjEsanQpKTpNYXRoLm1heCgwLE1hdGgubWluKDIwLGp0KSksWnIudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gcGUrIiJ9LFpyfXJldHVybntmb3JtYXQ6WCxmb3JtYXRQcmVmaXg6ZnVuY3Rpb24gYWUocGUsYmUp'@;
put 'e3ZhciB4ZT1YKCgocGU9X1EocGUpKS50eXBlPSJmIixwZSkpLFZlPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKGZ1bmN0aW9uIGRMdChsKXtyZXR1cm4obD1TRihNYXRoLmFicyhsKSkpP2xbMV06TmFOfShiZSkvMykpKSxaZT1NYXRoLnBvdygxMCwtVmUpLGx0PVk4ZVs4'@;
put 'K1ZlLzNdO3JldHVybiBmdW5jdGlvbihkdCl7cmV0dXJuIHhlKFplKmR0KStsdH19fX0obCksamY9TUYuZm9ybWF0fSh7dGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl19KTtjb25zdCBDUT1NYXRoLlBJLFNRPTIqQ1EsUjY9MWUtNixTTHQ9U1EtUjY7ZnVuY3Rp'@;
put 'b24gVzhlKGwpe3RoaXMuXys9bFswXTtmb3IobGV0IGM9MSxhPWwubGVuZ3RoO2M8YTsrK2MpdGhpcy5fKz1hcmd1bWVudHNbY10rbFtjXX1jbGFzcyBNUXtjb25zdHJ1Y3RvcihjKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIix0aGlzLl9hcHBl'@;
put 'bmQ9bnVsbD09Yz9XOGU6ZnVuY3Rpb24gTUx0KGwpe2xldCBjPU1hdGguZmxvb3IobCk7aWYoIShjPj0wKSl0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgZGlnaXRzOiAke2x9YCk7aWYoYz4xNSlyZXR1cm4gVzhlO2NvbnN0IGE9MTAqKmM7cmV0dXJuIGZ1bmN0aW9uKGYpe3RoaXMuXys9Zlsw'@;
put 'XTtmb3IobGV0IGQ9MSxoPWYubGVuZ3RoO2Q8aDsrK2QpdGhpcy5fKz1NYXRoLnJvdW5kKGFyZ3VtZW50c1tkXSphKS9hK2ZbZF19fShjKX1tb3ZlVG8oYyxhKXt0aGlzLl9hcHBlbmRgTSR7dGhpcy5feDA9dGhpcy5feDE9K2N9LCR7dGhpcy5feTA9dGhpcy5feTE9K2F9YH1jbG9zZVBhdGgo'@;
put 'KXtudWxsIT09dGhpcy5feDEmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl9hcHBlbmRgWmApfWxpbmVUbyhjLGEpe3RoaXMuX2FwcGVuZGBMJHt0aGlzLl94MT0rY30sJHt0aGlzLl95MT0rYX1gfXF1YWRyYXRpY0N1cnZlVG8oYyxhLGYsZCl7dGhpcy5fYXBw'@;
put 'ZW5kYFEkeytjfSwkeythfSwke3RoaXMuX3gxPStmfSwke3RoaXMuX3kxPStkfWB9YmV6aWVyQ3VydmVUbyhjLGEsZixkLGgsbSl7dGhpcy5fYXBwZW5kYEMkeytjfSwkeythfSwkeytmfSwkeytkfSwke3RoaXMuX3gxPStofSwke3RoaXMuX3kxPSttfWB9YXJjVG8oYyxhLGYsZCxoKXtpZihj'@;
put 'PStjLGE9K2EsZj0rZixkPStkLChoPStoKTwwKXRocm93IG5ldyBFcnJvcihgbmVnYXRpdmUgcmFkaXVzOiAke2h9YCk7bGV0IG09dGhpcy5feDEsXz10aGlzLl95MSxPPWYtYyxYPWQtYSxhZT1tLWMscGU9Xy1hLGJlPWFlKmFlK3BlKnBlO2lmKG51bGw9PT10aGlzLl94MSl0aGlzLl9hcHBl'@;
put 'bmRgTSR7dGhpcy5feDE9Y30sJHt0aGlzLl95MT1hfWA7ZWxzZSBpZihiZT5SNilpZihNYXRoLmFicyhwZSpPLVgqYWUpPlI2JiZoKXtsZXQgeGU9Zi1tLFZlPWQtXyxaZT1PKk8rWCpYLGx0PXhlKnhlK1ZlKlZlLGR0PU1hdGguc3FydChaZSksZ3Q9TWF0aC5zcXJ0KGJlKSxqdD1oKk1hdGgu'@;
put 'dGFuKChDUS1NYXRoLmFjb3MoKFplK2JlLWx0KS8oMipkdCpndCkpKS8yKSxybj1qdC9ndCxYdD1qdC9kdDtNYXRoLmFicyhybi0xKT5SNiYmdGhpcy5fYXBwZW5kYEwke2Mrcm4qYWV9LCR7YStybipwZX1gLHRoaXMuX2FwcGVuZGBBJHtofSwke2h9LDAsMCwkeysocGUqeGU+YWUqVmUpfSwk'@;
put 'e3RoaXMuX3gxPWMrWHQqT30sJHt0aGlzLl95MT1hK1h0Klh9YH1lbHNlIHRoaXMuX2FwcGVuZGBMJHt0aGlzLl94MT1jfSwke3RoaXMuX3kxPWF9YH1hcmMoYyxhLGYsZCxoLG0pe2lmKGM9K2MsYT0rYSxtPSEhbSwoZj0rZik8MCl0aHJvdyBuZXcgRXJyb3IoYG5lZ2F0aXZlIHJhZGl1czog'@;
put 'JHtmfWApO2xldCBfPWYqTWF0aC5jb3MoZCksTz1mKk1hdGguc2luKGQpLFg9YytfLGFlPWErTyxwZT0xXm0sYmU9bT9kLWg6aC1kO251bGw9PT10aGlzLl94MT90aGlzLl9hcHBlbmRgTSR7WH0sJHthZX1gOihNYXRoLmFicyh0aGlzLl94MS1YKT5SNnx8TWF0aC5hYnModGhpcy5feTEtYWUp'@;
put 'PlI2KSYmdGhpcy5fYXBwZW5kYEwke1h9LCR7YWV9YCxmJiYoYmU8MCYmKGJlPWJlJVNRK1NRKSxiZT5TTHQ/dGhpcy5fYXBwZW5kYEEke2Z9LCR7Zn0sMCwxLCR7cGV9LCR7Yy1ffSwke2EtT31BJHtmfSwke2Z9LDAsMSwke3BlfSwke3RoaXMuX3gxPVh9LCR7dGhpcy5feTE9YWV9YDpiZT5S'@;
put 'NiYmdGhpcy5fYXBwZW5kYEEke2Z9LCR7Zn0sMCwkeysoYmU+PUNRKX0sJHtwZX0sJHt0aGlzLl94MT1jK2YqTWF0aC5jb3MoaCl9LCR7dGhpcy5feTE9YStmKk1hdGguc2luKGgpfWApfXJlY3QoYyxhLGYsZCl7dGhpcy5fYXBwZW5kYE0ke3RoaXMuX3gwPXRoaXMuX3gxPStjfSwke3RoaXMu'@;
put 'X3kwPXRoaXMuX3kxPSthfWgke2Y9K2Z9diR7K2R9aCR7LWZ9WmB9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5ffX1mdW5jdGlvbiBHOGUoKXtyZXR1cm4gbmV3IE1RfWZ1bmN0aW9uIGtMdChsLGMsYSxmKXtyZXR1cm4gYz0tYyxmPS1mLFtsLGNdPVtsKmEtYypmLGwqZitjKmFdLFtsLGM9LWNd'@;
put 'fWZ1bmN0aW9uICQ4ZShsLGMsYSxmLGQsaCxtKXt2YXIgTz1ENihKOGUuY2FsbCh0aGlzLGgpKTtsLmRhdGEoW09dKSx0eC5jYWxsKGwubm9kZSgpLE8pLEs4ZShsLGMsYSxmLGQsaCxtKX1mdW5jdGlvbiBLOGUobCxjLGEsZixkLGgsbSl7dmFyIF89bS5zaG9ydGVuaW5nfHwwLHBlPVtbMCwt'@;
put 'My41XSxbMTAsMF0sWzAsMy41XSxbMCwtMy41XV0sYmU9Zi1jLHhlPWQtYSxWZT1NYXRoLnNxcnQoYmUqYmUreGUqeGUpO2lmKDA9PVZlKXZhciBaZT0xLGx0PTA7ZWxzZSBaZT1iZS9WZSxsdD14ZS9WZTtpZihmPWMrKFZlLV8tMTAtLjEpKlplLGQ9YSsoVmUtXy0xMC0uMSkqbHQsaC5VUkx8'@;
put 'fGgudG9vbHRpcCl2YXIgZHQ9bC5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiYSIpLGd0PWR0LnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInBhdGgiKSxqdD1kdC5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9u'@;
put 'KCJwb2x5Z29uIik7ZWxzZSBndD1sLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInBhdGgiKSxqdD1sLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInBvbHlnb24iKTt2YXIgcm49RzhlKCk7cm4ubW92ZVRvKGMsYSkscm4ubGluZVRvKGYsZCksZ3QuYXR0cigiZCIscm4pLGY9'@;
put 'YysoVmUtXy0xMCkqWmUsZD1hKyhWZS1fLTEwKSpsdDtmb3IodmFyIFh0PTA7WHQ8cGUubGVuZ3RoO1h0KyspcGVbWHRdPWtMdCgoeW49cGVbWHRdKVswXSx5blsxXSxaZSxsdCk7Zm9yKFh0PTA7WHQ8cGUubGVuZ3RoO1h0KyspcGVbWHRdPVtmKyh5bj1wZVtYdF0pWzBdLGQreW5bMV1dO3Zh'@;
put 'ciBRbj1bXTtmb3IoWHQ9MDtYdDxwZS5sZW5ndGg7WHQrKyl7dmFyIHluO1FuLnB1c2goKHluPXBlW1h0XSkuam9pbigiLCIpKX12YXIgT3I9UW4uam9pbigiICIpO3JldHVybiBqdC5hdHRyKCJwb2ludHMiLE9yKSx0aGlzfWZ1bmN0aW9uIHE4ZSgpe3JldHVybiB0aGlzLl9kcmF3bkVkZ2U/'@;
put 'KHRoaXMuX2RyYXduRWRnZS5nLnJlbW92ZSgpLHRoaXMuX2RyYXduRWRnZT1udWxsLHRoaXMpOnRoaXN9ZnVuY3Rpb24gWDhlKCl7cmV0dXJuIHRoaXMuX2RyYXduRWRnZT90aGlzLl9kcmF3bkVkZ2UuZzpPYShudWxsKX1mdW5jdGlvbiBKOGUobCl7dmFyIGM9IiI7Zm9yKHZhciBhIG9mIE9i'@;
put 'amVjdC5rZXlzKGwpKW51bGwhPWxbYV0mJihjKz0nICInK2ErJyI9IicrbFthXSsnIicpO3ZhciBkPXRoaXMubGF5b3V0U3luYygiZGlncmFwaCB7YSAtPiBiIFsiK2MrIl19Iiwic3ZnIiwiZG90IiksbT0obmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhkLCJpbWFnZS9z'@;
put 'dmcreG1sIik7cmV0dXJuIE9hKGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSkuYXBwZW5kKGZ1bmN0aW9uKCl7cmV0dXJuIG0uZG9jdW1lbnRFbGVtZW50fSkuc2VsZWN0KCIuZWRnZSIpfWZ1bmN0aW9uIFE4ZShsLGMsYSxmLGQsaCl7dmFyIF89RDYocnZlLmNhbGwodGhpcyxm'@;
put 'LGQpKTtyZXR1cm4gbC5kYXRhKFtfXSksdHguY2FsbChsLm5vZGUoKSxfKSxldmUobCxjLGEsZCksdGhpc31mdW5jdGlvbiBldmUobCxjLGEsZixkKXtpZihmLlVSTHx8Zi50b29sdGlwKXZhciBoPWwuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLnNlbGVjdFdpdGhvdXREYXRh'@;
put 'UHJvcGFnYXRpb24oImEiKTtlbHNlIGg9bDt2YXIgbT1oLnNlbGVjdEFsbCgiZWxsaXBzZSxwb2x5Z29uLHBhdGgscG9seWxpbmUiKSxfPWwuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigidGV4dCIpO2lmKDAhPW0uc2l6ZSgpKXt2YXIgTz1tLm5vZGUoKS5nZXRCQm94KCk7Ty5jeD1P'@;
put 'LngrTy53aWR0aC8yLE8uY3k9Ty55K08uaGVpZ2h0LzJ9ZWxzZSAwIT1fLnNpemUoKSYmKE89e3g6K18uYXR0cigieCIpLHk6K18uYXR0cigieSIpLHdpZHRoOjAsaGVpZ2h0OjAsY3g6K18uYXR0cigieCIpLGN5OitfLmF0dHIoInkiKX0pO3JldHVybiBtLmVhY2goZnVuY3Rpb24oWCxhZSl7'@;
put 'dmFyIHBlPU9hKHRoaXMpO2lmKHBlLmF0dHIoImN4IikpcGUuYXR0cigiY3giLGxtKGMpKS5hdHRyKCJjeSIsbG0oYSkpO2Vsc2UgaWYocGUuYXR0cigicG9pbnRzIikpe3ZhciBiZT1wZS5hdHRyKCJwb2ludHMiKS50cmltKCk7cGUuYXR0cigicG9pbnRzIixmdW5jdGlvbiBWUnQoaCxjLGEp'@;
put 'e3ZhciBkLGY9KGQ9aC5zcGxpdCgiICIpKS5tYXAoZnVuY3Rpb24obSl7cmV0dXJuIG0uc3BsaXQoIiwiKX0pO3JldHVybiBmPWQubWFwKGZ1bmN0aW9uKG0pe3JldHVybltsbSgrYysgK20uc3BsaXQoIiwiKVswXSksbG0oK2ErICttLnNwbGl0KCIsIilbMV0pXX0pLChkPWYubWFwKGZ1bmN0'@;
put 'aW9uKG0pe3JldHVybiBtLmpvaW4oIiwiKX0pKS5qb2luKCIgIil9KGJlLGMtTy5jeCxhLU8uY3kpKX1lbHNle3ZhciB4ZT1wZS5hdHRyKCJkIik7cGUuYXR0cigiZCIsZnVuY3Rpb24gQlJ0KGwsYyxhKXsoaD1sLnNwbGl0KC9bQS1aIF0vKSkuc2hpZnQoKTt2YXIgZj1sLnNwbGl0KC9bXltB'@;
put 'LVogXSsvKSxoPShoLm1hcChmdW5jdGlvbihtKXtyZXR1cm4gbS5zcGxpdCgiLCIpfSksaC5tYXAoZnVuY3Rpb24obSl7cmV0dXJuW2xtKCtjKyArbS5zcGxpdCgiLCIpWzBdKSxsbSgrYSsgK20uc3BsaXQoIiwiKVsxXSldfSkubWFwKGZ1bmN0aW9uKG0pe3JldHVybiBtLmpvaW4oIiwiKX0p'@;
put 'KTtyZXR1cm4gZi5yZWR1Y2UoZnVuY3Rpb24obSxfLE8pe3JldHVybiBtLmNvbmNhdChfLGhbT10pfSxbXSkuam9pbigiIil9KHhlLGMtTy5jeCxhLU8uY3kpKX19KSwwIT1fLnNpemUoKSYmXy5hdHRyKCJ4IixsbSgrXy5hdHRyKCJ4IikrYy1PLmN4KSkuYXR0cigieSIsbG0oK18uYXR0cigi'@;
put 'eSIpK2EtTy5jeSkpLHRoaXN9ZnVuY3Rpb24gdHZlKCl7aWYoIXRoaXMuX2RyYXduTm9kZSlyZXR1cm4gdGhpczt2YXIgbD10aGlzLl9kcmF3bk5vZGUuZztyZXR1cm4gbC5lbXB0eSgpfHxsLnJlbW92ZSgpLHRoaXMuX2RyYXduTm9kZT1udWxsLHRoaXN9ZnVuY3Rpb24gbnZlKCl7cmV0dXJu'@;
put 'IHRoaXMuX2RyYXduTm9kZT90aGlzLl9kcmF3bk5vZGUuZzpPYShudWxsKX1mdW5jdGlvbiBydmUobCxjKXt2YXIgYT0iIjtmb3IodmFyIGYgb2YgT2JqZWN0LmtleXMoYykpbnVsbCE9Y1tmXSYmKGErPScgIicrZisnIj0iJytjW2ZdKyciJyk7dmFyIGg9dGhpcy5sYXlvdXRTeW5jKCdncmFw'@;
put 'aCB7IicrbCsnIiBbJythKyJdfSIsInN2ZyIsImRvdCIpLF89KG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoaCwiaW1hZ2Uvc3ZnK3htbCIpO3JldHVybiBPYShkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpLmFwcGVuZChmdW5jdGlvbigpe3JldHVybiBf'@;
put 'LmRvY3VtZW50RWxlbWVudH0pLnNlbGVjdCgiLm5vZGUiKX1mdW5jdGlvbiBrRihsKXtzZWxmLmRvY3VtZW50PXt9LGwuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24oYyl7bGV0IGE9c2VsZlsiQGhwY2MtanMvd2FzbSJdO251bGw9PWEmJmMuZGF0YS52aXpVUkwmJihpbXBv'@;
put 'cnRTY3JpcHRzKGMuZGF0YS52aXpVUkwpLGE9c2VsZlsiQGhwY2MtanMvd2FzbSJdKSwidmVyc2lvbiIhPWMuZGF0YS50eXBlP2EuR3JhcGh2aXoubG9hZCgpLnRoZW4oZj0+e2NvbnN0IGQ9Zi5sYXlvdXQoYy5kYXRhLmRvdCwic3ZnIixjLmRhdGEuZW5naW5lLGMuZGF0YS5vcHRpb25zKTts'@;
put 'LnBvc3RNZXNzYWdlKGQ/e3R5cGU6ImRvbmUiLHN2ZzpkfTpjLmRhdGEudml6VVJMP3t0eXBlOiJpbml0In06e3R5cGU6InNraXAifSl9KS5jYXRjaChmPT57bC5wb3N0TWVzc2FnZSh7dHlwZToiZXJyb3IiLGVycm9yOmYubWVzc2FnZX0pfSk6YS5HcmFwaHZpei5sb2FkKCkudGhlbihmPT57'@;
put 'bC5wb3N0TWVzc2FnZSh7dHlwZToidmVyc2lvbiIsdmVyc2lvbjpmLnZlcnNpb24oKX0pfSl9KX1mdW5jdGlvbiBMTHQoKXtrRihzZWxmKX1mdW5jdGlvbiBQTHQoKXtzZWxmLm9uY29ubmVjdD1mdW5jdGlvbihsKXtjb25zdCBjPWwucG9ydHNbMF07a0YoYyksYy5zdGFydCgpfX1mdW5jdGlv'@;
put 'biBrUShsLGMpe2lmKHRoaXMuX29wdGlvbnM9e3VzZVdvcmtlcjohMCx1c2VTaGFyZWRXb3JrZXI6ITEsZW5naW5lOiJkb3QiLGtleU1vZGU6InRpdGxlIixmYWRlOiEwLHR3ZWVuUGF0aHM6ITAsdHdlZW5TaGFwZXM6ITAsY29udmVydEVxdWFsU2lkZWRQb2x5Z29uczohMCx0d2VlblByZWNp'@;
put 'c2lvbjoxLGdyb3dFbnRlcmluZ0VkZ2VzOiEwLHpvb206ITAsem9vbVNjYWxlRXh0ZW50OlsuMSwxMF0sem9vbVRyYW5zbGF0ZUV4dGVudDpbWy0xLzAsLTEvMF0sWzEvMCwxLzBdXSx3aWR0aDpudWxsLGhlaWdodDpudWxsLHNjYWxlOjEsZml0OiExfSxjIGluc3RhbmNlb2YgT2JqZWN0KWZv'@;
put 'cih2YXIgYSBvZiBPYmplY3Qua2V5cyhjKSl0aGlzLl9vcHRpb25zW2FdPWNbYV07ZWxzZSJib29sZWFuIj09dHlwZW9mIGMmJih0aGlzLl9vcHRpb25zLnVzZVdvcmtlcj1jKTt2YXIgZj10aGlzLl9vcHRpb25zLnVzZVdvcmtlcixkPXRoaXMuX29wdGlvbnMudXNlU2hhcmVkV29ya2VyO2lm'@;
put 'KHR5cGVvZiBXb3JrZXI+InUiJiYoZj0hMSksdHlwZW9mIFNoYXJlZFdvcmtlcj4idSImJihkPSExKSxmfHxkKXt2YXIgbT1ZSigic2NyaXB0IikuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuImphdmFzY3JpcHQvd29ya2VyIj09T2EodGhpcykuYXR0cigidHlwZSIpfHxPYSh0aGlzKS5hdHRy'@;
put 'KCJzcmMiKSYmT2EodGhpcykuYXR0cigic3JjIikubWF0Y2goLy4qXC9AaHBjYy1qc1wvd2FzbS8pfSk7MD09bS5zaXplKCk/KGNvbnNvbGUud2FybignTm8gc2NyaXB0IHRhZyBvZiB0eXBlICJqYXZhc2NyaXB0L3dvcmtlciIgd2FzIGZvdW5kIGFuZCAidXNlV29ya2VyIiBpcyB0cnVlLiBO'@;
put 'b3QgdXNpbmcgd2ViIHdvcmtlci4nKSxmPSExLGQ9ITEpOih0aGlzLl92aXpVUkw9bS5hdHRyKCJzcmMiKSx0aGlzLl92aXpVUkx8fChjb25zb2xlLndhcm4oJ05vICJzcmMiIGF0dHJpYnV0ZSBvZiB3YXMgZm91bmQgb24gdGhlICJqYXZhc2NyaXB0L3dvcmtlciIgc2NyaXB0IHRhZyBhbmQg'@;
put 'InVzZVdvcmtlciIgaXMgdHJ1ZS4gTm90IHVzaW5nIHdlYiB3b3JrZXIuJyksZj0hMSxkPSExKSl9aWYoZCl7Y29uc3QgWD0iZGF0YTphcHBsaWNhdGlvbi9qYXZhc2NyaXB0O2Jhc2U2NCwiK2J0b2Eoa0YudG9TdHJpbmcoKSsiKCIrUEx0LnRvU3RyaW5nKCkrIikoKSIpO3RoaXMuX3dvcmtl'@;
put 'cj10aGlzLl93b3JrZXI9bmV3IFNoYXJlZFdvcmtlcihYKSx0aGlzLl93b3JrZXJQb3J0PXRoaXMuX3dvcmtlci5wb3J0LHRoaXMuX3dvcmtlclBvcnRDbG9zZT10aGlzLl93b3JrZXIucG9ydC5jbG9zZS5iaW5kKHRoaXMuX3dvcmtlclBvcnQpLHRoaXMuX3dvcmtlci5wb3J0LnN0YXJ0KCks'@;
put 'dGhpcy5fd29ya2VyQ2FsbGJhY2tzPVtdfWVsc2UgaWYoZil7dmFyIF89bmV3IEJsb2IoW2tGLnRvU3RyaW5nKCkrIigiK0xMdC50b1N0cmluZygpKyIpKCkiXSksTz13aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChfKTt0aGlzLl93b3JrZXI9bmV3IFdvcmtlcihPKSx0aGlzLl93b3JrZXJQ'@;
put 'b3J0PXRoaXMuX3dvcmtlcix0aGlzLl93b3JrZXJQb3J0Q2xvc2U9dGhpcy5fd29ya2VyLnRlcm1pbmF0ZS5iaW5kKHRoaXMuX3dvcmtlciksdGhpcy5fd29ya2VyQ2FsbGJhY2tzPVtdfWVsc2Ugd0YubG9hZCgpLnRoZW4oKFg9Pnt0aGlzLl9ncmFwaHZpelZlcnNpb249WC52ZXJzaW9uKCl9'@;
put 'KS5iaW5kKHRoaXMpKTt0aGlzLl9zZWxlY3Rpb249bCx0aGlzLl9hY3RpdmU9ITEsdGhpcy5fYnVzeT0hMSx0aGlzLl9qb2JzPVtdLHRoaXMuX3F1ZXVlPVtdLHRoaXMuX2tleU1vZGVzPW5ldyBTZXQoWyJ0aXRsZSIsImlkIiwidGFnLWluZGV4IiwiaW5kZXgiXSksdGhpcy5faW1hZ2VzPVtd'@;
put 'LHRoaXMuX3RyYW5zbGF0aW9uPXZvaWQgMCx0aGlzLl9zY2FsZT12b2lkIDAsdGhpcy5fZXZlbnRUeXBlcz1bImluaXRFbmQiLCJzdGFydCIsImxheW91dFN0YXJ0IiwibGF5b3V0RW5kIiwiZGF0YUV4dHJhY3RFbmQiLCJkYXRhUHJvY2Vzc1Bhc3MxRW5kIiwiZGF0YVByb2Nlc3NQYXNzMkVu'@;
put 'ZCIsImRhdGFQcm9jZXNzRW5kIiwicmVuZGVyU3RhcnQiLCJyZW5kZXJFbmQiLCJ0cmFuc2l0aW9uU3RhcnQiLCJ0cmFuc2l0aW9uRW5kIiwicmVzdG9yZUVuZCIsImVuZCIsInpvb20iXSx0aGlzLl9kaXNwYXRjaD1XSiguLi50aGlzLl9ldmVudFR5cGVzKSxqUnQuY2FsbCh0aGlzKSxsLm5v'@;
put 'ZGUoKS5fX2dyYXBodml6X189dGhpc31mdW5jdGlvbiBFRihsLGMpe3JldHVybiBPYShsKS5ncmFwaHZpeihjKX1HOGUucHJvdG90eXBlPU1RLnByb3RvdHlwZSxrUS5wcm90b3R5cGU9RUYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjprUSxlbmdpbmU6ZnVuY3Rpb24gZUx0KGwpe3JldHVybiB0'@;
put 'aGlzLl9vcHRpb25zLmVuZ2luZT1sLHRoaXN9LGFkZEltYWdlOmZ1bmN0aW9uIHRMdChsLGMsYSl7cmV0dXJuIHRoaXMuX2ltYWdlcy5wdXNoKHtwYXRoOmwsd2lkdGg6YyxoZWlnaHQ6YX0pLHRoaXN9LGtleU1vZGU6ZnVuY3Rpb24gbkx0KGwpe2lmKCF0aGlzLl9rZXlNb2Rlcy5oYXMobCkp'@;
put 'dGhyb3cgRXJyb3IoIklsbGVnYWwga2V5TW9kZTogIitsKTtpZihsIT10aGlzLl9vcHRpb25zLmtleU1vZGUmJm51bGwhPXRoaXMuX2RhdGEpdGhyb3cgRXJyb3IoIlRvbyBsYXRlIHRvIGNoYW5nZSBrZXlNb2RlIik7cmV0dXJuIHRoaXMuX29wdGlvbnMua2V5TW9kZT1sLHRoaXN9LGZhZGU6'@;
put 'ZnVuY3Rpb24gckx0KGwpe3JldHVybiB0aGlzLl9vcHRpb25zLmZhZGU9bCx0aGlzfSx0d2VlblBhdGhzOmZ1bmN0aW9uIGlMdChsKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy50d2VlblBhdGhzPWwsdGhpc30sdHdlZW5TaGFwZXM6ZnVuY3Rpb24gb0x0KGwpe3JldHVybiB0aGlzLl9vcHRpb25z'@;
put 'LnR3ZWVuU2hhcGVzPWwsbCYmKHRoaXMuX29wdGlvbnMudHdlZW5QYXRocz0hMCksdGhpc30sY29udmVydEVxdWFsU2lkZWRQb2x5Z29uczpmdW5jdGlvbiBhTHQobCl7cmV0dXJuIHRoaXMuX29wdGlvbnMuY29udmVydEVxdWFsU2lkZWRQb2x5Z29ucz1sLHRoaXN9LHR3ZWVuUHJlY2lzaW9u'@;
put 'OmZ1bmN0aW9uIGxMdChsKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy50d2VlblByZWNpc2lvbj1sLHRoaXN9LGdyb3dFbnRlcmluZ0VkZ2VzOmZ1bmN0aW9uIHNMdChsKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy5ncm93RW50ZXJpbmdFZGdlcz1sLHRoaXN9LHpvb206ZnVuY3Rpb24gY1J0KGwpe3Jl'@;
put 'dHVybiB0aGlzLl9vcHRpb25zLnpvb209bCx0aGlzLl9vcHRpb25zLnpvb20mJiF0aGlzLl96b29tQmVoYXZpb3I/UjhlLmNhbGwodGhpcyk6IXRoaXMuX29wdGlvbnMuem9vbSYmdGhpcy5fem9vbUJlaGF2aW9yJiYodGhpcy5fem9vbVNlbGVjdGlvbi5vbigiLnpvb20iLG51bGwpLHRoaXMu'@;
put 'X3pvb21CZWhhdmlvcj1udWxsKSx0aGlzfSxyZXNldFpvb206ZnVuY3Rpb24gZlJ0KGwpe3ZhciBjPXRoaXMuX3pvb21TZWxlY3Rpb247cmV0dXJuIGwmJihjPWMudHJhbnNpdGlvbihsKSksYy5jYWxsKHRoaXMuX3pvb21CZWhhdmlvci50cmFuc2Zvcm0sdGhpcy5fb3JpZ2luYWxUcmFuc2Zv'@;
put 'cm0pLHRoaXN9LHpvb21CZWhhdmlvcjpmdW5jdGlvbiBwUnQoKXtyZXR1cm4gdGhpcy5fem9vbUJlaGF2aW9yfHxudWxsfSx6b29tU2VsZWN0aW9uOmZ1bmN0aW9uIG1SdCgpe3JldHVybiB0aGlzLl96b29tU2VsZWN0aW9ufHxudWxsfSx6b29tU2NhbGVFeHRlbnQ6ZnVuY3Rpb24gZFJ0KGwp'@;
put 'e3JldHVybiB0aGlzLl9vcHRpb25zLnpvb21TY2FsZUV4dGVudD1sLHRoaXN9LHpvb21UcmFuc2xhdGVFeHRlbnQ6ZnVuY3Rpb24gaFJ0KGwpe3JldHVybiB0aGlzLl9vcHRpb25zLnpvb21UcmFuc2xhdGVFeHRlbnQ9bCx0aGlzfSxyZW5kZXI6ZnVuY3Rpb24gd1J0KGwpe3JldHVybiB0aGlz'@;
put 'Ll9idXN5Pyh0aGlzLl9xdWV1ZS5wdXNoKHRoaXMucmVuZGVyLmJpbmQodGhpcyxsKSksdGhpcyk6KHRoaXMuX2Rpc3BhdGNoLmNhbGwoInJlbmRlclN0YXJ0Iix0aGlzKSx0aGlzLl90cmFuc2l0aW9uRmFjdG9yeT9yRihmdW5jdGlvbigpe3RoaXMuX3RyYW5zaXRpb249YVEodGhpcy5fdHJh'@;
put 'bnNpdGlvbkZhY3RvcnkoKSksRjhlLmNhbGwodGhpcyxsKX0uYmluZCh0aGlzKSwwKTpGOGUuY2FsbCh0aGlzLGwpLHRoaXMpfSxsYXlvdXQ6ZnVuY3Rpb24gelJ0KGwsYyxhLGYpe2lmKHRoaXMuX3dvcmtlciliUS5jYWxsKHRoaXMse3R5cGU6ImxheW91dCIsZG90OmwsZW5naW5lOmMsb3B0'@;
put 'aW9uczphfSxmdW5jdGlvbihoKXtmLmNhbGwodGhpcyxoLmRhdGEpfSk7ZWxzZSB0cnl7dmFyIGQ9dGhpcy5sYXlvdXRTeW5jKGwsInN2ZyIsYyxhKTtmLmNhbGwodGhpcyx7dHlwZToiZG9uZSIsc3ZnOmR9KX1jYXRjaChoKXtmLmNhbGwodGhpcyx7dHlwZToiZXJyb3IiLGVycm9yOmgubWVz'@;
put 'c2FnZX0pfX0sZG90OmZ1bmN0aW9uIFVSdChsLGMpe3ZhciBhPXRoaXMsZD10aGlzLl9vcHRpb25zLmVuZ2luZSxoPXRoaXMuX2ltYWdlcztyZXR1cm4gdGhpcy5fZGlzcGF0Y2guY2FsbCgic3RhcnQiLHRoaXMpLHRoaXMuX2J1c3k9ITAsdGhpcy5fZGlzcGF0Y2guY2FsbCgibGF5b3V0U3Rh'@;
put 'cnQiLHRoaXMpLHRoaXMuX3dvcmtlcnx8bnVsbCE9dGhpcy5sYXlvdXRTeW5jPyh0aGlzLmxheW91dChsLGQse2ltYWdlczpofSxmdW5jdGlvbihfKXtzd2l0Y2goXy50eXBlKXtjYXNlImVycm9yIjppZighYS5fb25lcnJvcil0aHJvdyBfLmVycm9yLm1lc3NhZ2U7YS5fb25lcnJvcihfLmVy'@;
put 'cm9yKTticmVhaztjYXNlImRvbmUiOlpSdC5jYWxsKHRoaXMsXy5zdmcsYyl9fSksdGhpcyk6KHRoaXMuX2FmdGVySW5pdD10aGlzLmRvdC5iaW5kKHRoaXMsbCxjKSx0aGlzKX0sZGF0YTpmdW5jdGlvbiB5UnQoKXtyZXR1cm4gdGhpcy5fZGF0YXx8bnVsbH0scmVuZGVyRG90OmZ1bmN0aW9u'@;
put 'IFlSdChsLGMpe3ZhciBhPXRoaXM7cmV0dXJuIHRoaXMuZG90KGwsZnVuY3Rpb24gZigpe2EucmVuZGVyKGMpfSksdGhpc30sdHJhbnNpdGlvbjpmdW5jdGlvbiBXUnQobCl7cmV0dXJuIGwgaW5zdGFuY2VvZiBGdW5jdGlvbj90aGlzLl90cmFuc2l0aW9uRmFjdG9yeT1sOnRoaXMuX3RyYW5z'@;
put 'aXRpb249YVEobCksdGhpc30sYWN0aXZlOmZ1bmN0aW9uIEdSdChsKXt2YXIgYT10aGlzLl9zZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigic3ZnIik7cmV0dXJuIDAhPWEuc2l6ZSgpP2Z1bmN0aW9uIFVJdChsLGMpe3ZhciBmLGQsYT1sLl9fdHJhbnNpdGlvbjtpZihh'@;
put 'KWZvcihkIGluIGM9bnVsbD09Yz9udWxsOmMrIiIsYSlpZigoZj1hW2RdKS5zdGF0ZT4xJiZmLm5hbWU9PT1jKXJldHVybiBuZXcgbjIoW1tsXV0sekl0LGMsK2QpO3JldHVybiBudWxsfShhLm5vZGUoKSxsKTpudWxsfSxvcHRpb25zOmZ1bmN0aW9uICRSdChsKXtpZih0eXBlb2YgbD4idSIp'@;
put 'cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sdGhpcy5fb3B0aW9ucyk7Zm9yKHZhciBjIG9mIE9iamVjdC5rZXlzKGwpKXRoaXMuX29wdGlvbnNbY109bFtjXTtyZXR1cm4gdGhpc30sd2lkdGg6ZnVuY3Rpb24gS1J0KGwpe3JldHVybiB0aGlzLl9vcHRpb25zLndpZHRoPWwsdGhpc30saGVpZ2h0'@;
put 'OmZ1bmN0aW9uIHFSdChsKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy5oZWlnaHQ9bCx0aGlzfSxzY2FsZTpmdW5jdGlvbiBYUnQobCl7cmV0dXJuIHRoaXMuX29wdGlvbnMuc2NhbGU9bCx0aGlzfSxmaXQ6ZnVuY3Rpb24gSlJ0KGwpe3JldHVybiB0aGlzLl9vcHRpb25zLmZpdD1sLHRoaXN9LGF0'@;
put 'dHJpYnV0ZXI6ZnVuY3Rpb24gUVJ0KGwpe3JldHVybiB0aGlzLl9hdHRyaWJ1dGVyPWwsdGhpc30sb246ZnVuY3Rpb24gdUx0KGwsYyl7cmV0dXJuIHRoaXMuX2Rpc3BhdGNoLm9uKGwsYyksdGhpc30sb25lcnJvcjpmdW5jdGlvbiBjTHQobCl7cmV0dXJuIHRoaXMuX29uZXJyb3I9bCx0aGlz'@;
put 'fSxsb2dFdmVudHM6ZnVuY3Rpb24gd0x0KGwpe3ZhciBjPURhdGUubm93KCksYT17fSxmPXRoaXMuX2V2ZW50VHlwZXMsZD1NYXRoLm1heCguLi5mLm1hcChPPT5PLmxlbmd0aCkpO2ZvcihsZXQgTz0wO088Zi5sZW5ndGg7TysrKXtsZXQgWD1mW09dO2FbWF09W107dmFyIG0sXyxoPXRoaXM7'@;
put 'dGhpcy5vbihYKyIubG9nIixsP2Z1bmN0aW9uKCl7dmFyIGFlPURhdGUubm93KCkscGU9YVtYXS5sZW5ndGg7YVtYXS5wdXNoKGFlKTt2YXIgYmU9IiI7aWYoYmUrPSJFdmVudCAiLGJlKz1qZigiID4yIikoTykrIiAiLGJlKz1YKyIgIi5yZXBlYXQoZC1YLmxlbmd0aCksYmUrPWpmKCIgPjUi'@;
put 'KShhZS1jKSsiICIsImluaXRFbmQiIT1YJiYoYmUrPWpmKCIgPjUiKShhZS1hLnN0YXJ0W3BlXSkpLCJkYXRhUHJvY2Vzc0VuZCI9PVgmJihiZSs9IiBwcmVwYXJlICAgICAgICAgICAgICAgICAiK2pmKCIgPjUiKShhZS1hLmxheW91dEVuZFtwZV0pKSwicmVuZGVyRW5kIj09WCYmaC5fdHJh'@;
put 'bnNpdGlvbiYmKGJlKz0iIHRyYW5zaXRpb24gc3RhcnQgbWFyZ2luICIramYoIiA+NSIpKGguX3RyYW5zaXRpb24uZGVsYXkoKS0oYWUtYS5yZW5kZXJTdGFydFtwZV0pKSxtPWguX3RyYW5zaXRpb24uZGVsYXkoKSxfPWguX3RyYW5zaXRpb24uZHVyYXRpb24oKSksInRyYW5zaXRpb25TdGFy'@;
put 'dCI9PVgpe3ZhciB4ZT1hZS1hLnJlbmRlclN0YXJ0W3BlXTtiZSs9IiB0cmFuc2l0aW9uIGRlbGF5ICAgICAgICAiK2pmKCIgPjUiKShhZS1hLnJlbmRlclN0YXJ0W3BlXSksYmUrPSIgZXhwZWN0ZWQgIitqZigiID41IikobSksYmUrPSIgZGlmZiAiK2pmKCIgPjUiKSh4ZS1tKX1pZigidHJh'@;
put 'bnNpdGlvbkVuZCI9PVgpe3ZhciBWZT1hZS1hLnRyYW5zaXRpb25TdGFydFtwZV07YmUrPSIgdHJhbnNpdGlvbiBkdXJhdGlvbiAgICAgIitqZigiID41IikoVmUpLGJlKz0iIGV4cGVjdGVkICIramYoIiA+NSIpKF8pLGJlKz0iIGRpZmYgIitqZigiID41IikoVmUtXyl9Y29uc29sZS5sb2co'@;
put 'YmUpLGM9YWV9Om51bGwpfXJldHVybiB0aGlzfSxkZXN0cm95OmZ1bmN0aW9uIENMdCgpe3JldHVybiBkZWxldGUgdGhpcy5fc2VsZWN0aW9uLm5vZGUoKS5fX2dyYXBodml6X18sdGhpcy5fd29ya2VyJiZ0aGlzLl93b3JrZXJQb3J0Q2xvc2UoKSx0aGlzfSxkcmF3RWRnZTpmdW5jdGlvbiBF'@;
put 'THQobCxjLGEsZixkLGg9e30pe2lmKChkPU9iamVjdC5hc3NpZ24oe30sZCkpLnN0eWxlJiZkLnN0eWxlLmluY2x1ZGVzKCJpbnZpcyIpKXZhciBtPU9hKG51bGwpO2Vsc2V7dmFyIFg9dGhpcy5fc2VsZWN0aW9uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInN2ZyIpLnNlbGVjdFdp'@;
put 'dGhvdXREYXRhUHJvcGFnYXRpb24oImciKSxwZT1ENihKOGUuY2FsbCh0aGlzLGQpKTttPVguYXBwZW5kKCJnIikuZGF0YShbcGVdKSx0eC5jYWxsKG0ubm9kZSgpLHBlKSwkOGUuY2FsbCh0aGlzLG0sbCxjLGEsZixkLGgpfXJldHVybiB0aGlzLl9kcmF3bkVkZ2U9e2c6bSx4MTpsLHkxOmMs'@;
put 'eDI6YSx5MjpmLGF0dHJpYnV0ZXM6ZH0sdGhpc30sdXBkYXRlRHJhd25FZGdlOmZ1bmN0aW9uIHhMdChsLGMsYSxmLGQ9e30saD17fSl7aWYoIXRoaXMuX2RyYXduRWRnZSl0aHJvdyBFcnJvcigiTm8gZWRnZSBoYXMgYmVlbiBkcmF3biIpO3ZhciBtPXRoaXMuX2RyYXduRWRnZS5nO3JldHVy'@;
put 'biBkPU9iamVjdC5hc3NpZ24odGhpcy5fZHJhd25FZGdlLmF0dHJpYnV0ZXMsZCksdGhpcy5fZHJhd25FZGdlLngxPWwsdGhpcy5fZHJhd25FZGdlLnkxPWMsdGhpcy5fZHJhd25FZGdlLngyPWEsdGhpcy5fZHJhd25FZGdlLnkyPWYsIW0uZW1wdHkoKXx8ZC5zdHlsZSYmZC5zdHlsZS5pbmNs'@;
put 'dWRlcygiaW52aXMiKXx8KG09dGhpcy5fc2VsZWN0aW9uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInN2ZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKS5hcHBlbmQoImciKSx0aGlzLl9kcmF3bkVkZ2UuZz1tKSxtLmVtcHR5KCl8fCQ4ZS5jYWxsKHRoaXMsbSxs'@;
put 'LGMsYSxmLGQsaCksdGhpc30sbW92ZURyYXduRWRnZUVuZFBvaW50OmZ1bmN0aW9uIEFMdChsLGMsYT17fSl7aWYoIXRoaXMuX2RyYXduRWRnZSl0aHJvdyBFcnJvcigiTm8gZWRnZSBoYXMgYmVlbiBkcmF3biIpO3ZhciBmPXRoaXMuX2RyYXduRWRnZS5nLGQ9dGhpcy5fZHJhd25FZGdlLngx'@;
put 'LGg9dGhpcy5fZHJhd25FZGdlLnkxLG09dGhpcy5fZHJhd25FZGdlLmF0dHJpYnV0ZXM7cmV0dXJuIHRoaXMuX2RyYXduRWRnZS54Mj1sLHRoaXMuX2RyYXduRWRnZS55Mj1jLEs4ZShmLGQsaCxsLGMsbSxhKSx0aGlzfSxpbnNlcnREcmF3bkVkZ2U6ZnVuY3Rpb24gVEx0KGwpe2lmKCF0aGlz'@;
put 'Ll9kcmF3bkVkZ2UpdGhyb3cgRXJyb3IoIk5vIGVkZ2UgaGFzIGJlZW4gZHJhd24iKTt2YXIgYz10aGlzLl9kcmF3bkVkZ2UuZztpZihjLmVtcHR5KCkpcmV0dXJuIHRoaXM7Yy5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJ0aXRsZSIpLnRleHQobCk7dmFyIG09dGhpcy5fc2VsZWN0'@;
put 'aW9uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInN2ZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKSxfPW0uZGF0dW0oKSxPPXRoaXMuX2V4dHJhY3REYXRhKGMsXy5jaGlsZHJlbi5sZW5ndGgsbS5kYXR1bSgpKTtyZXR1cm4gXy5jaGlsZHJlbi5wdXNoKE8pLGRR'@;
put 'KGMsTyksdGhpcy5fZHJhd25FZGdlPW51bGwsdGhpc30scmVtb3ZlRHJhd25FZGdlOnE4ZSxyZW1vdmVEcmF3bkVkZ2U6cThlLGRyYXduRWRnZVNlbGVjdGlvbjpYOGUsZHJhd25FZGdlU2VsZWN0aW9uOlg4ZSxkcmF3Tm9kZTpmdW5jdGlvbiBPTHQobCxjLGEsZj17fSxkPXt9KXtpZigoZj1P'@;
put 'YmplY3QuYXNzaWduKHt9LGYpKS5zdHlsZSYmZi5zdHlsZS5pbmNsdWRlcygiaW52aXMiKSl2YXIgaD1PYShudWxsKTtlbHNle3ZhciBPPXRoaXMuX3NlbGVjdGlvbi5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJzdmciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIiks'@;
put 'YWU9RDYocnZlLmNhbGwodGhpcyxhLGYpKTtoPU8uYXBwZW5kKCJnIikuZGF0YShbYWVdKSx0eC5jYWxsKGgubm9kZSgpLGFlKSxROGUuY2FsbCh0aGlzLGgsbCxjLGEsZixkKX1yZXR1cm4gdGhpcy5fZHJhd25Ob2RlPXtnOmgsbm9kZUlkOmEseDpsLHk6YyxhdHRyaWJ1dGVzOmZ9LHRoaXN9'@;
put 'LHVwZGF0ZURyYXduTm9kZTpmdW5jdGlvbiBETHQobCxjLGEsZj17fSxkPXt9KXtpZighdGhpcy5fZHJhd25Ob2RlKXRocm93IEVycm9yKCJObyBub2RlIGhhcyBiZWVuIGRyYXduIik7dmFyIGg9dGhpcy5fZHJhd25Ob2RlLmc7cmV0dXJuIG51bGw9PWEmJihhPXRoaXMuX2RyYXduTm9kZS5u'@;
put 'b2RlSWQpLGY9T2JqZWN0LmFzc2lnbih0aGlzLl9kcmF3bk5vZGUuYXR0cmlidXRlcyxmKSx0aGlzLl9kcmF3bk5vZGUubm9kZUlkPWEsdGhpcy5fZHJhd25Ob2RlLng9bCx0aGlzLl9kcmF3bk5vZGUueT1jLCFoLmVtcHR5KCl8fGYuc3R5bGUmJmYuc3R5bGUuaW5jbHVkZXMoImludmlzIil8'@;
put 'fChoPXRoaXMuX3NlbGVjdGlvbi5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJzdmciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIikuYXBwZW5kKCJnIiksdGhpcy5fZHJhd25Ob2RlLmc9aCksaC5lbXB0eSgpfHxROGUuY2FsbCh0aGlzLGgsbCxjLGEsZixkKSx0aGlz'@;
put 'fSxtb3ZlRHJhd25Ob2RlOmZ1bmN0aW9uIElMdChsLGMsYT17fSl7aWYoIXRoaXMuX2RyYXduTm9kZSl0aHJvdyBFcnJvcigiTm8gbm9kZSBoYXMgYmVlbiBkcmF3biIpO3ZhciBmPXRoaXMuX2RyYXduTm9kZS5nLGQ9dGhpcy5fZHJhd25Ob2RlLmF0dHJpYnV0ZXM7cmV0dXJuIHRoaXMuX2Ry'@;
put 'YXduTm9kZS54PWwsdGhpcy5fZHJhd25Ob2RlLnk9YyxmLmVtcHR5KCl8fGV2ZShmLGwsYyxkKSx0aGlzfSxpbnNlcnREcmF3bk5vZGU6ZnVuY3Rpb24gUkx0KGwpe2lmKCF0aGlzLl9kcmF3bk5vZGUpdGhyb3cgRXJyb3IoIk5vIG5vZGUgaGFzIGJlZW4gZHJhd24iKTtudWxsPT1sJiYobD10'@;
put 'aGlzLl9kcmF3bk5vZGUubm9kZUlkKTt2YXIgYz10aGlzLl9kcmF3bk5vZGUuZztpZihjLmVtcHR5KCkpcmV0dXJuIHRoaXM7dmFyIGE9dGhpcy5fZHJhd25Ob2RlLmF0dHJpYnV0ZXM7aWYoYy5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJ0aXRsZSIpLnRleHQobCksYS5VUkx8fGEu'@;
put 'dG9vbHRpcCl2YXIgaD1jLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJhIiksXz0oaC5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJlbGxpcHNlLHBvbHlnb24scGF0aCxwb2x5bGluZSIpLGguc2VsZWN0V2l0aG91'@;
put 'dERhdGFQcm9wYWdhdGlvbigidGV4dCIpKTtlbHNlIGMuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZWxsaXBzZSxwb2x5Z29uLHBhdGgscG9seWxpbmUiKSxfPWMuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigidGV4dCIpO18udGV4dChhLmxhYmVsfHxsKTt2YXIgYWU9dGhp'@;
put 'cy5fc2VsZWN0aW9uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInN2ZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKSxwZT1hZS5kYXR1bSgpLGJlPXRoaXMuX2V4dHJhY3REYXRhKGMscGUuY2hpbGRyZW4ubGVuZ3RoLGFlLmRhdHVtKCkpO3JldHVybiBwZS5jaGls'@;
put 'ZHJlbi5wdXNoKGJlKSxkUShjLGJlKSx0aGlzLl9kcmF3bk5vZGU9bnVsbCx0aGlzfSxyZW1vdmVEcmF3bk5vZGU6dHZlLHJlbW92ZURyYXduTm9kZTp0dmUsZHJhd25Ob2RlU2VsZWN0aW9uOm52ZSxkcmF3bk5vZGVTZWxlY3Rpb246bnZlLGdyYXBodml6VmVyc2lvbjpmdW5jdGlvbiBDUnQo'@;
put 'KXtyZXR1cm4gdGhpcy5fZ3JhcGh2aXpWZXJzaW9ufX0sazYucHJvdG90eXBlLmdyYXBodml6PWZ1bmN0aW9uIEZMdChsKXt2YXIgYz10aGlzLm5vZGUoKS5fX2dyYXBodml6X187cmV0dXJuIGM/KGMub3B0aW9ucyhsKSxyRihmdW5jdGlvbigpe2MuX2Rpc3BhdGNoLmNhbGwoImluaXRFbmQi'@;
put 'LHRoaXMpfS5iaW5kKHRoaXMpLDApKTpjPW5ldyBrUSh0aGlzLGwpLGN9LGs2LnByb3RvdHlwZS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uPWZ1bmN0aW9uIEhMdChsKXtyZXR1cm4gT2EodGhpcy5zaXplKCk+MD90aGlzLm5vZGUoKS5xdWVyeVNlbGVjdG9yKGwpOm51bGwpfTt2YXIg'@;
put 'Tkx0PVQoODg3MDApO2Z1bmN0aW9uIFZMdChsLGMpezEmbCYmdG4oMCwiY2xyLWljb24iLDI4KX1mdW5jdGlvbiBCTHQobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJjbHItaWNvbiIsMjkpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtVdChhKTtjb25zdCBkPUdlKDIpO3JldHVybiBk'@;
put 'LmxpYnJhcmllc1NlYXJjaD0iIixadChkLmxpYnJhcnlPbkZpbHRlcigpKX0pLENlKCl9fWZ1bmN0aW9uIGpMdChsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImNsci10cmVlLW5vZGUiLDIyKSgxLCJkaXYiLDIzKSgyLCJpbnB1dCIsMjQsMjUpLEV0KCJuZ01vZGVsQ2hhbmdlIixm'@;
put 'dW5jdGlvbihkKXtyZXR1cm4gVXQoYSksWnQoR2UoKS5saWJyYXJpZXNTZWFyY2g9ZCl9KSgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIFV0KGEpLFp0KEdlKCkubGlicmFyeU9uRmlsdGVyKCkpfSksQ2UoKSx0dCg0LFZMdCwxLDAsImNsci1pY29uIiwyNiksdHQoNSxCTHQsMSwwLCJjbHIt'@;
put 'aWNvbiIsMjcpLENlKCkoKX1pZigyJmwpe2NvbnN0IGE9UWkoMyksZj1HZSgpO1NlKDIpLFJlKCJuZ01vZGVsIixmLmxpYnJhcmllc1NlYXJjaCksU2UoMiksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLFNlKDEpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gekx0'@;
put 'KGwsYyl7MSZsJiZ0bigwLCJjbHItaWNvbiIsMjgpfWZ1bmN0aW9uIFVMdChsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImNsci1pY29uIiwyOSksRXQoImNsaWNrIixmdW5jdGlvbigpe1V0KGEpLEdlKCk7Y29uc3QgZD1RaSgzKSxoPUdlKDIpLiRpbXBsaWNpdCxtPUdlKCk7cmV0'@;
put 'dXJuIGQudmFsdWU9IiIsaC5zZWFyY2hTdHJpbmc9IiIsWnQobS50cmVlT25GaWx0ZXIoaCwidGFibGVzLlRBQkxFTkFNRSIpKX0pLENlKCl9fWZ1bmN0aW9uIFpMdChsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImNsci10cmVlLW5vZGUiLDIyKSgxLCJkaXYiLDIzKSgyLCJpbnB1'@;
put 'dCIsMzUsMzYpLEV0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihkKXtyZXR1cm4gVXQoYSksWnQoR2UoMikuJGltcGxpY2l0LnNlYXJjaFN0cmluZz1kKX0pKCJrZXl1cCIsZnVuY3Rpb24oKXtVdChhKTtjb25zdCBkPUdlKDIpLiRpbXBsaWNpdDtyZXR1cm4gWnQoR2UoKS50cmVlT25GaWx0'@;
put 'ZXIoZCwidGFibGVzLlRBQkxFTkFNRSIpKX0pLENlKCksdHQoNCx6THQsMSwwLCJjbHItaWNvbiIsMjYpLHR0KDUsVUx0LDEsMCwiY2xyLWljb24iLDI3KSxDZSgpKCl9aWYoMiZsKXtjb25zdCBhPVFpKDMpLGY9R2UoMikuJGltcGxpY2l0O1NlKDIpLFJlKCJuZ01vZGVsIixmLnNlYXJjaFN0'@;
put 'cmluZyksU2UoMiksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLFNlKDEpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gWUx0KGwsYyl7MSZsJiZ0bigwLCJjbHItaWNvbiIsMjgpfWZ1bmN0aW9uIFdMdChsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImNs'@;
put 'ci1pY29uIiwyOSksRXQoImNsaWNrIixmdW5jdGlvbigpe1V0KGEpLEdlKCk7Y29uc3QgZD1RaSgzKSxoPUdlKCkuJGltcGxpY2l0LG09R2UoMyk7cmV0dXJuIGQudmFsdWU9IiIsaC5zZWFyY2hTdHJpbmc9IiIsWnQobS50cmVlT25GaWx0ZXIoaCwiY29sdW1ucy5DT0xOQU1FIikpfSksQ2Uo'@;
put 'KX19ZnVuY3Rpb24gR0x0KGwsYyl7aWYoMSZsKXtjb25zdCBhPVpuKCk7eWUoMCwiY2xyLXRyZWUtbm9kZSIsMjIpKDEsImRpdiIsMjMpKDIsImlucHV0IiwzOSwzNiksRXQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGQpe3JldHVybiBVdChhKSxadChHZSgpLiRpbXBsaWNpdC5zZWFyY2hT'@;
put 'dHJpbmc9ZCl9KSgia2V5dXAiLGZ1bmN0aW9uKCl7VXQoYSk7Y29uc3QgZD1HZSgpLiRpbXBsaWNpdDtyZXR1cm4gWnQoR2UoMykudHJlZU9uRmlsdGVyKGQsImNvbHVtbnMuQ09MTkFNRSIpKX0pLENlKCksdHQoNCxZTHQsMSwwLCJjbHItaWNvbiIsMjYpLHR0KDUsV0x0LDEsMCwiY2xyLWlj'@;
put 'b24iLDI3KSxDZSgpKCl9aWYoMiZsKXtjb25zdCBhPVFpKDMpLGY9R2UoKS4kaW1wbGljaXQ7U2UoMiksUmUoIm5nTW9kZWwiLGYuc2VhcmNoU3RyaW5nKSxTZSgyKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksU2UoMSksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlv'@;
put 'biAkTHQobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJjbHItdHJlZS1ub2RlIikoMSwiYnV0dG9uIiw0MCksRXQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9VXQoYSkuJGltcGxpY2l0LG09R2UoKS4kaW1wbGljaXQsXz1HZSgyKS4kaW1wbGljaXQ7cmV0dXJuIFp0KEdlKCku'@;
put 'Y29sdW1uT25DbGljayhoLF8sbSkpfSksdG4oMiwiY2xyLWljb24iLDQxKSxZZSgzKSxDZSgpKCl9aWYoMiZsKXtjb25zdCBhPWMuJGltcGxpY2l0LGY9R2UoNCk7U2UoMSksZ3IoImNvbHVtbi1hY3RpdmUiLGYubGliQ29sdW1uQWN0aXZlKGEuQ09MVVJJKSksU2UoMiksd3IoIiAiLGEuQ09M'@;
put 'TkFNRSwiICIpfX1mdW5jdGlvbiBLTHQobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJjbHItdHJlZS1ub2RlIiwzMSksRXQoImNsaWNrIixmdW5jdGlvbihkKXtjb25zdCBtPVV0KGEpLiRpbXBsaWNpdCxfPUdlKDIpLiRpbXBsaWNpdDtyZXR1cm4gWnQoR2UoKS50cmVlTm9kZUNs'@;
put 'aWNrZWQoZCxtLF8udGFibGVzKSl9KSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGQpe3JldHVybiBadChVdChhKS4kaW1wbGljaXQuZXhwYW5kZWQ9ZCl9KSx5ZSgxLCJwIiwzNyksRXQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9VXQoYSkuJGltcGxpY2l0LG09R2UoMikuJGlt'@;
put 'cGxpY2l0O3JldHVybiBadChHZSgpLnRhYmxlT25DbGljayhoLlRBQkxFVVJJLGgsbSkpfSksdG4oMiwiY2xyLWljb24iLDM4KSxZZSgzKSxDZSgpLHR0KDQsR0x0LDYsMywiY2xyLXRyZWUtbm9kZSIsMSksdHQoNSwkTHQsNCwzLCJjbHItdHJlZS1ub2RlIiwyKSxDZSgpfWlmKDImbCl7Y29u'@;
put 'c3QgYT1jLiRpbXBsaWNpdDtncigiY2xyLWV4cGFuZGVkIixhLmV4cGFuZGVkKSxSZSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdDb2x1bW5zJiYhYS5jb2x1bW5zKSxTZSgxKSxSZSgiaWQiLGEuVEFCTEVVUkkpLFNlKDIpLHdyKCIgIixhLlRBQkxF'@;
put 'TkFNRSwiICIpLFNlKDEpLFJlKCJuZ0lmIixhLmNvbHVtbnMpLFNlKDEpLFJlKCJuZ0Zvck9mIixhLmNvbHVtbnMpfX1mdW5jdGlvbiBxTHQobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJjbHItdHJlZS1ub2RlIiwzMSksRXQoImNsaWNrIixmdW5jdGlvbihkKXtVdChhKTtjb25z'@;
put 'dCBoPUdlKCkuJGltcGxpY2l0LG09R2UoKTtyZXR1cm4gWnQobS50cmVlTm9kZUNsaWNrZWQoZCxoLG0ubGlicmFyeUxpc3QpKX0pKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oZCl7cmV0dXJuIFV0KGEpLFp0KEdlKCkuJGltcGxpY2l0LmV4cGFuZGVkPWQpfSkseWUoMSwicCIsMzIp'@;
put 'LEV0KCJjbGljayIsZnVuY3Rpb24oKXtVdChhKTtjb25zdCBkPUdlKCkuJGltcGxpY2l0LGg9R2UoKTtyZXR1cm4gaC5saWI9ZC5MSUJSQVJZSUQsWnQoaC5saWJyYXJ5T25DbGljayhoLmxpYnx8IiIsZCkpfSksdG4oMiwiY2xyLWljb24iLDMzKSxZZSgzKSxDZSgpLHR0KDQsWkx0LDYsMywi'@;
put 'Y2xyLXRyZWUtbm9kZSIsMSksdHQoNSxLTHQsNiw4LCJjbHItdHJlZS1ub2RlIiwzNCksQ2UoKX1pZigyJmwpe2NvbnN0IGE9R2UoKS4kaW1wbGljaXQ7Z3IoImNsci1leHBhbmRlZCIsYS5leHBhbmRlZCksUmUoImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSgiY2xyTG9hZGluZyIsYS5sb2Fk'@;
put 'aW5nVGFibGVzJiYhYS50YWJsZXMpLFNlKDMpLHdyKCIgIixhLkxJQlJBUllOQU1FLCIgIiksU2UoMSksUmUoIm5nSWYiLGEudGFibGVzKSxTZSgxKSxSZSgibmdGb3JPZiIsYS50YWJsZXMpfX1mdW5jdGlvbiBYTHQobCxjKXtpZigxJmwmJihXcigwKSx0dCgxLHFMdCw2LDcsImNsci10cmVl'@;
put 'LW5vZGUiLDMwKSxHcigpKSwyJmwpe2NvbnN0IGE9Yy4kaW1wbGljaXQ7U2UoMSksUmUoIm5nSWYiLCFhLmhpZGRlbiYmYS5pbkZvcmVncm91bmQpfX1mdW5jdGlvbiBKTHQobCxjKXsxJmwmJih5ZSgwLCJkaXYiLDQyKSgxLCJzcGFuIiw0MyksWWUoMiwiIExvYWRpbmcuLi4gIiksQ2UoKSgp'@;
put 'KX1mdW5jdGlvbiBRTHQobCxjKXsxJmwmJih5ZSgwLCJkaXYiLDQ0KSx0bigxLCJjbHItaWNvbiIsNDUpLHllKDIsImgzIiw0NiksWWUoMywiUGxlYXNlIHNlbGVjdCBhIGNvbHVtbiBvciB0YWJsZSIpLENlKCkoKSl9ZnVuY3Rpb24gZVB0KGwsYyl7aWYoMSZsJiYoeWUoMCwiaDMiLDU1KSxZ'@;
put 'ZSgxKSxDZSgpKSwyJmwpe2NvbnN0IGE9R2UoMyk7U2UoMSksd3IoIiAiLGEuY3VycmVudExpbmVhZ2VQYXRoQ29sdW1uP2EuY3VycmVudExpbmVhZ2VQYXRoTGliVGFibGUrIi4iK2EuY3VycmVudExpbmVhZ2VQYXRoQ29sdW1uOmEuY3VycmVudExpbmVhZ2VQYXRoTGliVGFibGUsIiAiKX19'@;
put 'ZnVuY3Rpb24gdFB0KGwsYyl7aWYoMSZsJiYoeWUoMCwiZGl2Iiw1MyksdHQoMSxlUHQsMiwxLCJoMyIsNTQpLENlKCkpLDImbCl7Y29uc3QgYT1HZSgyKTtTZSgxKSxSZSgibmdJZiIsIWEuY3VycmVudExpbmVhZ2VQYXRoQ29sdW1uJiYhYS5jdXJyZW50TGluZWFnZVBhdGhMaWJUYWJsZSl9'@;
put 'fWZ1bmN0aW9uIG5QdChsLGMpe2lmKDEmbCYmKHllKDAsInNwYW4iKSxZZSgxKSx5ZSgyLCJhIiw1NiksWWUoMyksQ2UoKSxZZSg0KSxDZSgpKSwyJmwpe2NvbnN0IGE9R2UoMik7U2UoMSksd3IoIiAiLGEubGluZWFnZVRhYmxlTmFtZS5zcGxpdCgiLiIpWzBdLCIuIiksU2UoMSksUmUoInJv'@;
put 'dXRlckxpbmsiLCIvdmlldy9kYXRhLyIrYS5saW5lYWdlVGFibGVOYW1lKSxTZSgxKSxhcihhLmxpbmVhZ2VUYWJsZU5hbWUuc3BsaXQoIi4iKVsxXSksU2UoMSksd3IoIiIsYS5saW5lYWdlQ29sdW1uTmFtZS5sZW5ndGg+MD8iLiIrYS5saW5lYWdlQ29sdW1uTmFtZToiIiwiICIpfX1mdW5j'@;
put 'dGlvbiByUHQobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJkaXYiLDY2KSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFV0KGEpLFp0KEdlKDQpLmRvd25sb2FkUE5HKCkpfSksWWUoMSwiIFBORyAiKSxDZSgpfX1mdW5jdGlvbiBpUHQobCxjKXtpZigxJmwpe2NvbnN0IGE9'@;
put 'Wm4oKTt5ZSgwLCJkaXYiLDY2KSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFV0KGEpLFp0KEdlKDQpLmRvd25sb2FkQ1NWKCkpfSksWWUoMSwiIENTViAiKSxDZSgpfX1mdW5jdGlvbiBvUHQobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJjbHItZHJvcGRvd24tbWVudSIs'@;
put 'NjUpKDEsImRpdiIsNjYpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gVXQoYSksWnQoR2UoMykuZG93bmxvYWRTVkcoKSl9KSxZZSgyLCJTVkciKSxDZSgpLHR0KDMsclB0LDIsMCwiZGl2Iiw2NykseWUoNCwiZGl2Iiw2NiksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBVdChh'@;
put 'KSxadChHZSgzKS5kb3dubG9hZERvdCgpKX0pLFllKDUsIkRvdCIpLENlKCksdHQoNixpUHQsMiwwLCJkaXYiLDY3KSxDZSgpfWlmKDImbCl7Y29uc3QgYT1HZSgzKTtTZSgzKSxSZSgibmdJZiIsIWEuaGVscGVyU2VydmljZS5pc01pY3Jvc29mdCksU2UoMyksUmUoIm5nSWYiLGEuZmxhdGRh'@;
put 'dGEpfX1mdW5jdGlvbiBhUHQobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJjbHItY2hlY2tib3gtd3JhcHBlciIsNjgpKDEsImlucHV0Iiw2OSksRXQoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gVXQoYSksWnQoR2UoMykuZ2VuZXJhdGVHcmFwaCgpKX0pKCJuZ01vZGVsQ2hh'@;
put 'bmdlIixmdW5jdGlvbihkKXtyZXR1cm4gVXQoYSksWnQoR2UoMykucmVmcmVzaENhY2hlPWQpfSksQ2UoKSx5ZSgyLCJsYWJlbCIpLFllKDMsIlJlZnJlc2ggQ2FjaGUiKSxDZSgpKCl9aWYoMiZsKXtjb25zdCBhPUdlKDMpO1NlKDEpLFJlKCJuZ01vZGVsIixhLnJlZnJlc2hDYWNoZSl9fWZ1'@;
put 'bmN0aW9uIGxQdChsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImRpdiIsNTcpKDEsImJ1dHRvbiIsNTgpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gVXQoYSksWnQoR2UoMikubGltaXREb3REZXB0aD0hMCl9KSxZZSgyLCIgTGltaXQgZGVwdGggIiksQ2UoKSx5ZSgzLCJk'@;
put 'aXYiLDU5KSg0LCJkaXYiLDYwKSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7VXQoYSk7Y29uc3QgZD1HZSgyKTtyZXR1cm4gZC5mb3J3YXJkTGluZWFnZT0hMSxadChkLnJvdXRlci51cmwuaW5jbHVkZXMoImNvbHVtbiIpP2Qub25HZW5lcmF0ZUNsaWNrKCk6ZC5vbkdlbmVyYXRlR3JhcGhUYWJs'@;
put 'ZUNsaWNrKCkpfSksdG4oNSwiaW5wdXQiLDYxKSx5ZSg2LCJsYWJlbCIpLFllKDcsIkJhY2t3YXJkIiksQ2UoKSgpLHllKDgsImRpdiIsNjApLEV0KCJjbGljayIsZnVuY3Rpb24oKXtVdChhKTtjb25zdCBkPUdlKDIpO3JldHVybiBkLmZvcndhcmRMaW5lYWdlPSEwLFp0KGQucm91dGVyLnVy'@;
put 'bC5pbmNsdWRlcygiY29sdW1uIik/ZC5vbkdlbmVyYXRlQ2xpY2soKTpkLm9uR2VuZXJhdGVHcmFwaFRhYmxlQ2xpY2soKSl9KSx0big5LCJpbnB1dCIsNjEpLHllKDEwLCJsYWJlbCIpLFllKDExLCJGb3J3YXJkIiksQ2UoKSgpKCkseWUoMTIsImNsci1kcm9wZG93biIsNjIpKDEzLCJidXR0'@;
put 'b24iLDYzKSxZZSgxNCwiIERvd25sb2FkICIpLHRuKDE1LCJjbHItaWNvbiIsMTkpLENlKCksdHQoMTYsb1B0LDcsMiwiY2xyLWRyb3Bkb3duLW1lbnUiLDIwKSxDZSgpLHR0KDE3LGFQdCw0LDEsImNsci1jaGVja2JveC13cmFwcGVyIiw2NCksQ2UoKX1pZigyJmwpe2NvbnN0IGE9R2UoMik7'@;
put 'U2UoNSksUmUoImNoZWNrZWQiLCFhLmZvcndhcmRMaW5lYWdlKSxTZSg0KSxSZSgiY2hlY2tlZCIsYS5mb3J3YXJkTGluZWFnZSksU2UoNCksUmUoImRpc2FibGVkIiwhYS5jb2x1bW4mJiFhLnRhYmxlKSxTZSg0KSxSZSgibmdJZiIsYS5jb2x1bW4pfX1mdW5jdGlvbiBzUHQobCxjKXsxJmwm'@;
put 'Jih5ZSgwLCJzcGFuIiw3MyksWWUoMSwiIExvYWRpbmcuLi4gIiksQ2UoKSl9ZnVuY3Rpb24gdVB0KGwsYyl7MSZsJiZ0bigwLCJzcGFuIiw0Myl9ZnVuY3Rpb24gY1B0KGwsYyl7aWYoMSZsJiYoeWUoMCwiZGl2Iiw3NCkoMSwiZGl2Iiw3NSksdHQoMix1UHQsMSwwLCJzcGFuIiw3NiksQ2Uo'@;
put 'KSx0bigzLCJkaXYiLDc3KSxDZSgpKSwyJmwpe2NvbnN0IGE9R2UoMyk7U2UoMiksUmUoIm5nSWYiLGEuZ3JhcGhSZW5kZXJpbmcpfX1mdW5jdGlvbiBmUHQobCxjKXtpZigxJmwmJih5ZSgwLCJkaXYiKSgxLCJkaXYiLDcwKSx0dCgyLHNQdCwyLDAsInNwYW4iLDcxKSx0dCgzLGNQdCw0LDEs'@;
put 'ImRpdiIsNzIpLENlKCkoKSksMiZsKXtjb25zdCBhPUdlKDIpO2dyKCJtdC0yIixhLnRhYmxlRmxhZyksU2UoMiksUmUoIm5nSWYiLGEuZ3JhcGhMb2FkaW5nKSxTZSgxKSxSZSgibmdJZiIsIWEuZ3JhcGhMb2FkaW5nKX19ZnVuY3Rpb24gZFB0KGwsYyl7aWYoMSZsJiYoV3IoMCksdHQoMSx0'@;
put 'UHQsMiwxLCJkaXYiLDQ3KSx5ZSgyLCJkaXYiLDQ4KSgzLCJzZWN0aW9uIiw0OSkoNCwiZGl2Iiw1MCksdHQoNSxuUHQsNSw0LCJzcGFuIiw3KSxDZSgpLHR0KDYsbFB0LDE4LDQsImRpdiIsNTEpLENlKCksdHQoNyxmUHQsNCw0LCJkaXYiLDUyKSxDZSgpLEdyKCkpLDImbCl7Y29uc3QgYT1H'@;
put 'ZSgpO1NlKDEpLFJlKCJuZ0lmIiwhYS5ncmFwaENvbnRhaW5lciksU2UoNCksUmUoIm5nSWYiLGEubGluZWFnZVRhYmxlTmFtZS5sZW5ndGg+MCksU2UoMSksUmUoIm5nSWYiLGEuZ3JhcGhDb250YWluZXIpLFNlKDEpLFJlKCJuZ0lmIixhLmdyYXBoQ29udGFpbmVyKX19ZnVuY3Rpb24gaFB0'@;
put 'KGwsYyl7aWYoMSZsKXtjb25zdCBhPVpuKCk7eWUoMCwiZGl2Iiw2NiksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBVdChhKSxadChHZSgyKS5yZW5kZXJUb0Rvd25sb2FkKCJQTkciKSl9KSxZZSgxLCIgUE5HICIpLENlKCl9fWZ1bmN0aW9uIHBQdChsLGMpe2lmKDEmbCl7Y29uc3Qg'@;
put 'YT1abigpO3llKDAsImNsci1kcm9wZG93bi1tZW51Iiw2NSkoMSwiZGl2Iiw2NiksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBVdChhKSxadChHZSgpLnJlbmRlclRvRG93bmxvYWQoIlNWRyIpKX0pLFllKDIsIlNWRyIpLENlKCksdHQoMyxoUHQsMiwwLCJkaXYiLDY3KSx5ZSg0LCJk'@;
put 'aXYiLDY2KSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7VXQoYSk7Y29uc3QgZD1HZSgpO3JldHVybiBkLmRvd25sb2FkRG90KCksWnQoZC5jYW5jZWxSZW5kZXJpbmdHcmFwaCgpKX0pLFllKDUsIiBEb3QgIiksQ2UoKSgpfWlmKDImbCl7Y29uc3QgYT1HZSgpO1NlKDMpLFJlKCJuZ0lmIiwhYS5o'@;
put 'ZWxwZXJTZXJ2aWNlLmlzTWljcm9zb2Z0KX19Y29uc3QgbVB0PVQoMTY2NzYpO2xldCB4Rj0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEsZixkLGgsbSxfLE8sWCl7dGhpcy5saWNlbmNlU2VydmljZT1hLHRoaXMuc2FzU2VydmljZT1mLHRoaXMucm91dGU9ZCx0aGlzLnJvdXRlcj1oLHRo'@;
put 'aXMubG9jYXRpb249bSx0aGlzLmV2ZW50U2VydmljZT1fLHRoaXMubG9nZ2VyU2VydmljZT1PLHRoaXMuaGVscGVyU2VydmljZT1YLHRoaXMuc3dpdGNoRmxhZz0hMSx0aGlzLnRhYmxlRmxhZz0hMCx0aGlzLmZvcndhcmRMaW5lYWdlPSExLHRoaXMuZmxhdGRhdGE9W10sdGhpcy5ncmFwaExv'@;
put 'YWRpbmc9ITEsdGhpcy5ncmFwaFJlbmRlcmluZz0hMSx0aGlzLmdyYXBoQ29udGFpbmVyPSExLHRoaXMudml6SW5wdXQ9IiIsdGhpcy5saWJyYXJpZXNQYWdpbmc9ITEsdGhpcy5saWJyYXJ5VGFibGVzUmVmPSIiLHRoaXMubGlicmFyaWVzU2VhcmNoPSIiLHRoaXMudGFibGVDb2x1bW5zUmVm'@;
put 'PSIiLHRoaXMubGluZWFnZVRhYmxlTmFtZT0iIix0aGlzLmxpbmVhZ2VDb2x1bW5OYW1lPSIiLHRoaXMubGliPW51bGwsdGhpcy50YWJsZURpc2FibGU9ITEsdGhpcy5yZWZyZXNoQ2FjaGU9ITEsdGhpcy5jdXJyZW50TGluZWFnZVBhdGhMaWJUYWJsZT0iIix0aGlzLmN1cnJlbnRMaW5lYWdl'@;
put 'UGF0aENvbHVtbj0iIix0aGlzLmxhcmdlRG90RmlsZUxpbmVzPW51bGwsdGhpcy5sYXJnZURvdEZpbGVMaW1pdD0xZTMsdGhpcy5saW1pdERvdERlcHRoPSExLHRoaXMucGVuZGluZ1JlbmRlckRvd25sb2FkPW51bGwsdGhpcy5kZWJvdW5jZVRpbWU9MjAwfXNob3dUYWJsZVNlbGVjdCgpe3Ro'@;
put 'aXMudGFibGVGbGFnPSF0aGlzLnRhYmxlRmxhZ310YWJsZU9uQ2xpY2soYSxmLGQsaD0hMSl7dmFyIG09dGhpcztyZXR1cm4geWkoZnVuY3Rpb24qKCl7Zi5jb2x1bW5zPyhmLmV4cGFuZGVkPSFmLmV4cGFuZGVkLCEwPT09Zi5leHBhbmRlZCYmKG0udGFibGU9YSxofHxtLm9uR2VuZXJhdGVH'@;
put 'cmFwaFRhYmxlQ2xpY2soKSkpOihmLmV4cGFuZGVkPSFmLmV4cGFuZGVkLGYubG9hZGluZ0NvbHVtbnM9ITAsbS50YWJsZT1hLG0uY3VycmVudExpbmVhZ2VQYXRoTGliVGFibGU9Zi5MSUJOQU1FKyIuIitmLlRBQkxFTkFNRSx5aWVsZCBtLnNlbGVjdFRhYmxlKGEsZiksaHx8bS5vbkdlbmVy'@;
put 'YXRlR3JhcGhUYWJsZUNsaWNrKCkpLG0uY29sbGFwc2VUcmVlSXRlbXMoZC50YWJsZXMsZil9KSgpfXNlbGVjdFRhYmxlKGEsZil7dmFyIGQ9dGhpcztyZXR1cm4geWkoZnVuY3Rpb24qKCl7ZC5jb2x1bW5zTGlzdD1bXTtsZXQgaD17U0FTQ29udHJvbFRhYmxlOlt7dGFibGV1cmk6YX1dfTt5'@;
put 'aWVsZCBkLnNhc1NlcnZpY2UucmVxdWVzdCgibGluZWFnZS9nZXRtZXRhY29scyIsaCkudGhlbihtPT57ZC5jb2x1bW5zTGlzdD1tLm1ldGFjb2xzLGQuY29sdW1uc0xpc3QmJmQuY29sdW1uc0xpc3QubGVuZ3RoPjAmJihmLmNvbHVtbnM9ZC5jb2x1bW5zTGlzdCxmLmV4cGFuZGVkPSEwLGYu'@;
put 'bG9hZGluZ0NvbHVtbnM9ITEpfSkuY2F0Y2gobT0+bSksZC5zZXRHbG9iYWxEYXRhKCl9KSgpfWxvYWRNb3JlTGlicmFyaWVzKCl7dGhpcy5saWJyYXJpZXNQYWdpbmd8fCh0aGlzLmxpYnJhcmllc1BhZ2luZz0hMCx0aGlzLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyh0aGlzLmxp'@;
put 'YnJhcnlMaXN0LCEwKSx0aGlzLmxpYnJhcmllc1BhZ2luZz0hMSl9Y29sbGFwc2VUcmVlSXRlbXMoYSxmKXthLmZvckVhY2goZD0+e0pTT04uc3RyaW5naWZ5KGQpIT09SlNPTi5zdHJpbmdpZnkoZikmJihkLmV4cGFuZGVkPSExKX0pfXRyZWVOb2RlQ2xpY2tlZChhLGYsZCl7IkNvbGxhcHNl'@;
put 'Ij09PWEudGFyZ2V0LnRpdGxlJiZ0aGlzLmNvbGxhcHNlVHJlZUl0ZW1zKGQsZil9bGlicmFyeU9uQ2xpY2soYSxmKXt2YXIgZD10aGlzO3JldHVybiB5aShmdW5jdGlvbiooKXtmLmluRm9yZWdyb3VuZD0hMCxmLnRhYmxlcz9mLmV4cGFuZGVkPSFmLmV4cGFuZGVkOihmLmxvYWRpbmdUYWJs'@;
put 'ZXM9ITAseWllbGQgZC5zZWxlY3RMaWJyYXJ5KGEsZikpLGQuY29sbGFwc2VUcmVlSXRlbXMoZC5saWJyYXJ5TGlzdCxmKX0pKCl9c2VsZWN0TGlicmFyeShhLGYpe3ZhciBkPXRoaXM7cmV0dXJuIHlpKGZ1bmN0aW9uKigpe2QudGFibGVzTGlzdD1bXSxkLmNvbHVtbnNMaXN0PVtdO2xldCBo'@;
put 'PXtTQVNDb250cm9sVGFibGU6W3tsaWJ1cmk6YX1dfTt5aWVsZCBkLnNhc1NlcnZpY2UucmVxdWVzdCgibGluZWFnZS9nZXRtZXRhdGFibGVzIixoKS50aGVuKG09PntkLnRhYmxlc0xpc3Q9bS5tZXRhdGFibGVzLGQudGFibGVzTGlzdCYmZC50YWJsZXNMaXN0Lmxlbmd0aD4wJiYoZi50YWJs'@;
put 'ZXM9ZC50YWJsZXNMaXN0LGYuZXhwYW5kZWQ9ITApLGQuc2V0R2xvYmFsRGF0YSgpfSkuY2F0Y2gobT0+bSksZi5sb2FkaW5nVGFibGVzPSExfSkoKX1jb2x1bW5PbkNsaWNrKGEsZixkKXt0aGlzLmxpYj1mLkxJQlJBUllJRCx0aGlzLnRhYmxlPWQuVEFCTEVVUkksdGhpcy5jb2x1bW49YS5D'@;
put 'T0xVUkksdGhpcy5zZXRHbG9iYWxEYXRhKCksdGhpcy5vbkdlbmVyYXRlQ2xpY2soKX10cmVlT25GaWx0ZXIoYSxmKXt0aGlzLmhlbHBlclNlcnZpY2UudHJlZU9uRmlsdGVyKGEsZil9bGlicmFyeU9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLmxp'@;
put 'YnJhcnlMaXN0LHRoaXMubGlicmFyaWVzU2VhcmNoLCJMSUJSQVJZTkFNRSIpLEpuLmxpbmVhZ2UubGlicmFyaWVzU2VhcmNoPXRoaXMubGlicmFyaWVzU2VhcmNofWxpYkNvbHVtbkFjdGl2ZShhKXtpZighdGhpcy5jb2x1bW4pcmV0dXJuITE7bGV0IGY9YS5zcGxpdCgiXFwiKSxkPXRoaXMu'@;
put 'Y29sdW1uLnNwbGl0KCJcXCIpO3JldHVybiBmW2YubGVuZ3RoLTFdPT1kW2QubGVuZ3RoLTFdfXNldEdsb2JhbERhdGEoKXtKbi5saW5lYWdlLmxpYnJhcnlMaXN0PXRoaXMubGlicmFyeUxpc3QsSm4ubGluZWFnZS50YWJsZXNMaXN0PXRoaXMudGFibGVzTGlzdCxKbi5saW5lYWdlLmNvbHVt'@;
put 'bnNMaXN0PXRoaXMuY29sdW1uc0xpc3QsSm4ubGluZWFnZS5saWI9dGhpcy5saWIsSm4ubGluZWFnZS50YWJsZT10aGlzLnRhYmxlLEpuLmxpbmVhZ2UuY29sdW1uPXRoaXMuY29sdW1ufWxvYWRHbG9iYWxEYXRhKCl7dGhpcy5saWJyYXJ5TGlzdD1Kbi5saW5lYWdlLmxpYnJhcnlMaXN0LHRo'@;
put 'aXMudGFibGVzTGlzdD1Kbi5saW5lYWdlLnRhYmxlc0xpc3QsdGhpcy5jb2x1bW5zTGlzdD1Kbi5saW5lYWdlLmNvbHVtbnNMaXN0LHRoaXMubGlicmFyaWVzU2VhcmNoPUpuLmxpbmVhZ2UubGlicmFyaWVzU2VhcmNofXJlc3VibWl0V2l0aE1heERlcHRoKGEpe2xldCBmO3RoaXMuY2FuY2Vs'@;
put 'UmVuZGVyaW5nR3JhcGgoKSxhJiYoZj17bWF4X2RlcHRoOmF9KSx0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSx7cmVsYXRpdmVUbzp0aGlzLnJvdXRlLHF1ZXJ5UGFyYW1zOmZ9KX1uZ09uSW5pdCgpe0puLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uPSJ2aWV3L2xpbmVhZ2UiO2xldCBhPXRoaXMu'@;
put 'cm91dGUuc25hcHNob3QucGFyYW1zLnJlbG9hZDtpZih2b2lkIDAhPT1hKXtsZXQgZj10aGlzLnJvdXRlci51cmw7InJlbG9hZCI9PT1hP2xvY2FsU3RvcmFnZS5nZXRJdGVtKCJmaXJzdExvYWQiKT8obG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oImZpcnN0TG9hZCIpLHRoaXMubG9jYXRpb24u'@;
put 'cmVwbGFjZVN0YXRlKGYuc2xpY2UoMCxmLmxhc3RJbmRleE9mKCIvIikpKSk6KGxvY2FsU3RvcmFnZS5maXJzdExvYWQ9ITAsc2V0VGltZW91dChmdW5jdGlvbigpe3dpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKX0sMmUzKSk6dGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoZi5zbGljZSgwLGYu'@;
put 'bGFzdEluZGV4T2YoIi8iKSkpfXRoaXMuaW5pdERhdGEoKX1pbml0RGF0YSgpe3ZhciBhPXRoaXM7cmV0dXJuIHlpKGZ1bmN0aW9uKigpe0puLmxpbmVhZ2UubGlicmFyeUxpc3QmJihKbi5saW5lYWdlLmxpYnJhcnlMaXN0Lmxlbmd0aD4wP2EubG9hZEdsb2JhbERhdGEoKTp5aWVsZCBhLnNh'@;
put 'c1NlcnZpY2UucmVxdWVzdCgicHVibGljL3ZpZXdsaWJzIixudWxsKS50aGVuKG09PnthLmxpYnJhcnlMaXN0PW0uc2FzbGlicyxhLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyhhLmxpYnJhcnlMaXN0KSxhLmxpYnJhcnlMaXN0JiZhLmxpYnJhcnlMaXN0Lmxlbmd0aD4wJiYoYS5s'@;
put 'aWI9YS5saWJyYXJ5TGlzdFswXS5MSUJSQVJZSUQpLGEuc2V0R2xvYmFsRGF0YSgpfSkuY2F0Y2gobT0+bSksYS5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUobT0+e2Eub25Sb3V0ZUNoYW5nZSgpfSksYS5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKG09PnthLm9uUm91dGVDaGFuZ2UoKX0p'@;
put 'KX0pKCl9b25Sb3V0ZUNoYW5nZSgpe2NsZWFyVGltZW91dCh0aGlzLmRlYm91bmNlVGltZW91dCksdGhpcy5kZWJvdW5jZVRpbWVvdXQ9c2V0VGltZW91dCgoKT0+e2NvbnN0IGE9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuY29sdXJpLGY9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMu'@;
put 'ZGlyZWN0aW9uLGQ9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudGFibGVpZCxoPXRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMubWF4X2RlcHRoO2EmJmYmJih0aGlzLmZvcndhcmRMaW5lYWdlPSJGT1JXQVJEIj09PWYsdGhpcy5jb2x1bW49YSx0aGlzLmdlbmVyYXRlR3JhcGgo'@;
put 'YSxmLGgpKSwhdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCJjb2x1bW4iKSYmZCYmZiYmKHRoaXMuZm9yd2FyZExpbmVhZ2U9IkZPUldBUkQiPT09Zix0aGlzLnRhYmxlPWQsdGhpcy5nZW5lcmF0ZUdyYXBoVGFibGVMZXZlbChkLGYsaCkpfSx0aGlzLmRlYm91bmNlVGltZSl9bmdBZnRlckNv'@;
put 'bnRlbnRJbml0KCl7fWRpcmVjdGlvblRleHQoKXtyZXR1cm4gdGhpcy5mb3J3YXJkTGluZWFnZT8iRk9SV0FSRCI6IlJFVkVSU0UifW9uR2VuZXJhdGVDbGljaygpe2xldCBhPXRoaXMuZGlyZWN0aW9uVGV4dCgpLGY9dGhpcy5jb2x1bW4/dGhpcy5jb2x1bW4uc3Vic3RyaW5nKHRoaXMuY29s'@;
put 'dW1uLmluZGV4T2YoIlxcIikrMSk6bnVsbDt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9saW5lYWdlL2NvbHVtbi8iK2YrIi8iK2EpfW9uR2VuZXJhdGVHcmFwaFRhYmxlQ2xpY2soKXtsZXQgYT10aGlzLmRpcmVjdGlvblRleHQoKSxmPXRoaXMudGFibGUuaW5jbHVkZXMoIlxc'@;
put 'Iik/dGhpcy50YWJsZS5zcGxpdCgiXFwiKVsxXTp0aGlzLnRhYmxlO3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3L2xpbmVhZ2UvIitmKyIvIithKX1nZW5lcmF0ZUdyYXBoVGFibGVMZXZlbChhLGYsZCl7dmFyIGg9dGhpcztyZXR1cm4geWkoZnVuY3Rpb24qKCl7bGV0IG09e1NB'@;
put 'U0NvbnRyb2xUYWJsZTpbe3RhYmxlX2lkOmEsZGlyZWN0aW9uOmZ8fGguZGlyZWN0aW9uVGV4dCgpfV19O3JldHVybiJ1bmRlZmluZWQiPT09bS5TQVNDb250cm9sVGFibGVbMF0udGFibGVfaWQmJmguZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCJnZW5lcmF0ZUdyYXBoVGFibGVMZXZl'@;
put 'bCgpIiwidGFibGVfaWQgaXMgdW5kZWZpbmVkLiIsdm9pZCAwLCJGcm9udGVuZCBlcnJvciIpLGQmJihtLlNBU0NvbnRyb2xUYWJsZVswXS5tYXhfZGVwdGg9ZCksaC50YWJsZUZsYWc9ITEsaC5zd2l0Y2hGbGFnPSEwLGguZ3JhcGhDb250YWluZXI9ITAsaC5ncmFwaExvYWRpbmc9ITAsaC52'@;
put 'aXpJbnB1dD0iIixuZXcgUHJvbWlzZSgoXyxPKT0+e2guc2FzU2VydmljZS5yZXF1ZXN0KCJsaW5lYWdlL2ZldGNodGFibGVsaW5lYWdlIixtKS50aGVuKGZ1bmN0aW9uKCl7dmFyIFg9eWkoZnVuY3Rpb24qKGFlKXtpZihhZS5mbGF0ZGF0YS5sZW5ndGg+MCYmaC5saWNlbmNlU2VydmljZS5j'@;
put 'aGVja0xpbmVhZ2VMaW1pdCgpKXJldHVybiBoLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJOb3RpY2UiLCJZb3UgaGF2ZSByZWFjaGVkIGRhaWx5IG1heGltdW0gb2YgbGluZWFnZSBkaWFncmFtIHJlbmRlcmluZ3MuIFRvIHVubG9jayBhZGRpdGlvbmFsIGRpYWdyYW1zLCBjb250YWN0'@;
put 'IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iKSx2b2lkIGgucm91dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3L2xpbmVhZ2UiKTtpZigic3RyaW5nIj09dHlwZW9mIGFlKXJldHVybiBoLnZpeklucHV0PSJkaWdyYXBoIEcge1NBUyBFcnJvcn0iLHZvaWQgaC5idWlsZEdyYXBoKCk7aC5saW5l'@;
put 'YWdlVGFibGVOYW1lPWFlLmluZm9bMF0uTElCUkVGKyIuIithZS5pbmZvWzBdLlRBQkxFTkFNRTtsZXQgcGU9YWUuZmluYWxmaW5hbCxiZT0iIjtmb3IobGV0IHhlPTA7eGU8cGUubGVuZ3RoO3hlKyspYmUrPXVuZXNjYXBlKHBlW3hlXS5MSU5FKSsiXG4iO2lmKGguZmxhdGRhdGE9YWUuZmxh'@;
put 'dGRhdGEsaC5saWJyYXJ5TGlzdCl7bGV0IHhlPWgubGlicmFyeUxpc3QuZmluZChWZT0+YWUuaW5mb1swXS5MSUJVUkkudG9VcHBlckNhc2UoKS5pbmNsdWRlcyhWZS5MSUJSQVJZSUQudG9VcHBlckNhc2UoKSkpO2lmKHhlKXtsZXQgVmU7aWYoeWllbGQgaC5saWJyYXJ5T25DbGljayh4ZS5M'@;
put 'SUJSQVJZSUQseGUpLHhlLnRhYmxlcyYmKFZlPXhlLnRhYmxlcy5maW5kKFplPT5aZS5UQUJMRVVSSS50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKGFlLmluZm9bMF0uVEFCTEVJRC50b1VwcGVyQ2FzZSgpKSksVmUpKXtpZihoLnRhYmxlPVZlLlRBQkxFVVJJLGgudGFibGUpe2NvbnN0IFplPWgu'@;
put 'dGFibGUucmVwbGFjZSgiXFwiLCJcXFxcIik7c2V0VGltZW91dCgoKT0+e2xldCBsdD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbaWQ9JyR7WmV9J11gKTtsdCYmbHQuc2Nyb2xsSW50b1ZpZXcoKX0sMWUzKX1oLnRhYmxlT25DbGljayhWZS5UQUJMRVVSSSxWZSx4ZSx2b2lkIDAhPT1mKX14'@;
put 'ZSYmKHhlLmV4cGFuZGVkPSEwKSxWZSYmKFZlLmV4cGFuZGVkPSEwKX19aC52aXpJbnB1dD1iZXx8ImRpZ3JhcGggRyB7Tm8gTGluZWFnZSBBdmFpbGFibGV9IixoLnZpeklucHV0PWgudml6SW5wdXQucmVwbGFjZSgvXHNkczovZywiXG5kczoiKS5yZXBsYWNlKC9cc1xuL2csIlxuIiksaC5p'@;
put 'ZGxvb2t1cD1hZS5pZGxvb2t1cCxhZS5maW5hbGZpbmFsLmxlbmd0aD5oLmxhcmdlRG90RmlsZUxpbWl0P2gubGFyZ2VEb3RGaWxlTGluZXM9YWUuZmluYWxmaW5hbC5sZW5ndGg6aC5idWlsZEdyYXBoKCksXygpfSk7cmV0dXJuIGZ1bmN0aW9uKGFlKXtyZXR1cm4gWC5hcHBseSh0aGlzLGFy'@;
put 'Z3VtZW50cyl9fSgpKS5jYXRjaChYPT57aC5ncmFwaExvYWRpbmc9ITEsaC5ncmFwaENvbnRhaW5lcj0hMX0pfSl9KSgpfWNhbmNlbFJlbmRlcmluZ0dyYXBoKCl7dGhpcy52aXpJbnB1dD0iZGlncmFwaCBHIHtObyBMaW5lYWdlIEF2YWlsYWJsZX0iLHRoaXMubGFyZ2VEb3RGaWxlTGluZXM9'@;
put 'bnVsbCx0aGlzLmJ1aWxkR3JhcGgoKX1jb250aW51ZVJlbmRlcmluZ0dyYXBoKCl7dGhpcy5sYXJnZURvdEZpbGVMaW5lcz1udWxsLHRoaXMuYnVpbGRHcmFwaCgoKT0+e2lmKG51bGwhPT10aGlzLnBlbmRpbmdSZW5kZXJEb3dubG9hZCl7c3dpdGNoKHRoaXMucGVuZGluZ1JlbmRlckRvd25s'@;
put 'b2FkKXtjYXNlIlBORyI6dGhpcy5kb3dubG9hZFBORygpO2JyZWFrO2Nhc2UiU1ZHIjp0aGlzLmRvd25sb2FkU1ZHKCl9dGhpcy5wZW5kaW5nUmVuZGVyRG93bmxvYWQ9bnVsbCx0aGlzLnZpeklucHV0PSJkaWdyYXBoIEcge05vIExpbmVhZ2UgQXZhaWxhYmxlfSIsdGhpcy5idWlsZEdyYXBo'@;
put 'KCl9fSl9cmVuZGVyVG9Eb3dubG9hZChhKXtzd2l0Y2goYSl7Y2FzZSJQTkciOnRoaXMucGVuZGluZ1JlbmRlckRvd25sb2FkPSJQTkciLHRoaXMuY29udGludWVSZW5kZXJpbmdHcmFwaCgpO2JyZWFrO2Nhc2UiU1ZHIjp0aGlzLnBlbmRpbmdSZW5kZXJEb3dubG9hZD0iU1ZHIix0aGlzLmNv'@;
put 'bnRpbnVlUmVuZGVyaW5nR3JhcGgoKX19bWFrZUdyYXBoTGlua2FibGUoYSl7bGV0IGY9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiI2dyYXBoIC5ub2RlIik7Zm9yKGxldCBkIG9mIGYpe2xldCBfLGg9ZC5xdWVyeVNlbGVjdG9yKCJ0aXRsZSIpLmlubmVySFRNTCxtPWEuZmluZChPPT5P'@;
put 'Lk1FVEFJRD09PWgpO20mJihfPSJUQUJMRSI9PT1tLk1FVEFUWVBFPyIvdmlldy9kYXRhLyIrbS5NRVRBTkFNRToiL3ZpZXcvbWV0YWRhdGEvb2JqZWN0LyIrbS5NRVRBSUQsZC5jbGFzc0xpc3QuYWRkKCJjdXJzb3ItcG9pbnRlciIpLGQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLE89Pnt0'@;
put 'aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKF8pfSkpfX1nZW5lcmF0ZUdyYXBoKGEsZixkKXt2YXIgaD10aGlzO3JldHVybiB5aShmdW5jdGlvbiooKXtsZXQgbT17U0FTQ29udHJvbFRhYmxlOlt7Y29sdXJpOmF8fGguY29sdW1uLGRpcmVjdGlvbjpmfHxoLmRpcmVjdGlvblRleHQoKSxyZWZy'@;
put 'ZXNoOmgucmVmcmVzaENhY2hlPzE6MH1dfTtyZXR1cm4idW5kZWZpbmVkIj09PW0uU0FTQ29udHJvbFRhYmxlWzBdLmNvbHVyaSYmaC5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwoImdlbmVyYXRlR3JhcGgoKSIsImNvbHVyaSBpcyB1bmRlZmluZWQuIix2b2lkIDAsIkZyb250ZW5kIGVy'@;
put 'cm9yIiksZCYmKG0uU0FTQ29udHJvbFRhYmxlWzBdLm1heF9kZXB0aD1kKSxoLnRhYmxlRmxhZz0hMSxoLnN3aXRjaEZsYWc9ITAsaC5ncmFwaENvbnRhaW5lcj0hMCxoLmdyYXBoTG9hZGluZz0hMCxoLnZpeklucHV0PSIiLG5ldyBQcm9taXNlKChfLE8pPT57aC5zYXNTZXJ2aWNlLnJlcXVl'@;
put 'c3QoImxpbmVhZ2UvZmV0Y2hjb2xsaW5lYWdlIixtKS50aGVuKGZ1bmN0aW9uKCl7dmFyIFg9eWkoZnVuY3Rpb24qKGFlKXtpZihhZS5mbGF0ZGF0YS5sZW5ndGg+MCYmaC5saWNlbmNlU2VydmljZS5jaGVja0xpbmVhZ2VMaW1pdCgpKXJldHVybiBoLmV2ZW50U2VydmljZS5zaG93SW5mb01v'@;
put 'ZGFsKCJOb3RpY2UiLCJZb3UgaGF2ZSByZWFjaGVkIGRhaWx5IG1heGltdW0gb2YgbGluZWFnZSBkaWFncmFtIHJlbmRlcmluZ3MuIFRvIHVubG9jayBhZGRpdGlvbmFsIGRpYWdyYW1zLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iKSx2b2lkIGgucm91dGVyLm5hdmlnYXRl'@;
put 'QnlVcmwoIi92aWV3L2xpbmVhZ2UiKTtpZigic3RyaW5nIj09dHlwZW9mIGFlKXJldHVybiBoLnZpeklucHV0PSJkaWdyYXBoIEcge1NBUyBFcnJvcn0iLHZvaWQgaC5idWlsZEdyYXBoKCk7aC5saW5lYWdlVGFibGVOYW1lPWFlLmluZm9bMF0uTElCUkVGKyIuIithZS5pbmZvWzBdLlRBQk5B'@;
put 'TUUsaC5saW5lYWdlQ29sdW1uTmFtZT1hZS5pbmZvWzBdLkNPTE5BTUUsaC5pZGxvb2t1cD1hZS5pZGxvb2t1cDtsZXQgcGU9YWUuZnJvbXNhcyxiZT0iIjtmb3IobGV0IHhlPTA7eGU8cGUubGVuZ3RoO3hlKyspYmUrPXVuZXNjYXBlKHBlW3hlXS5TVFJJTkcpKyJcbiI7aWYoaC52aXpJbnB1'@;
put 'dD1iZXx8ImRpZ3JhcGggRyB7Tm8gTGluZWFnZSBBdmFpbGFibGV9IixoLnZpeklucHV0PWgudml6SW5wdXQucmVwbGFjZSgvXHNkczovZywiXG5kczoiKS5yZXBsYWNlKC9cc1xuL2csIlxuIiksaC5mbGF0ZGF0YT1hZS5mbGF0ZGF0YSxoLmxpYnJhcnlMaXN0KXtsZXQgVmUseGU9aC5saWJy'@;
put 'YXJ5TGlzdC5maW5kKFplPT5hZS5pbmZvWzBdPy5MSUJVUkk/LnRvVXBwZXJDYXNlKCk/LmluY2x1ZGVzKFplPy5MSUJSQVJZSUQ/LnRvVXBwZXJDYXNlKCkpKTt4ZSYmKHlpZWxkIGgubGlicmFyeU9uQ2xpY2soeGUuTElCUkFSWUlELHhlKSx4ZS50YWJsZXMmJihWZT14ZS50YWJsZXMuZmlu'@;
put 'ZChaZT0+WmUuVEFCTEVVUkk9PT1hZS5pbmZvWzBdLlRBQlVSSSksVmUmJmgudGFibGVPbkNsaWNrKFZlLlRBQkxFVVJJLFZlLHhlLCEwKS50aGVuKCgpPT57bGV0IFplPVZlLlRBQkxFVVJJO2lmKFplKXtjb25zdCBsdD1aZS5yZXBsYWNlKCJcXCIsIlxcXFwiKTtsZXQgZHQ9ZG9jdW1lbnQu'@;
put 'cXVlcnlTZWxlY3RvcihgW2lkPScke2x0fSddYCk7c2V0VGltZW91dCgoKT0+e2R0JiYoaC5sb2dnZXJTZXJ2aWNlLmxvZygibGlicmFyeVRvU2VsZWN0Iix4ZSksZHQuc2Nyb2xsSW50b1ZpZXcoKSl9LDFlMyl9fSkpLHhlJiYoeGUuZXhwYW5kZWQ9ITApLFZlJiYoVmUuZXhwYW5kZWQ9ITAp'@;
put 'KX1hZS5mcm9tc2FzLmxlbmd0aD5oLmxhcmdlRG90RmlsZUxpbWl0P2gubGFyZ2VEb3RGaWxlTGluZXM9YWUuZnJvbXNhcy5sZW5ndGg6aC5idWlsZEdyYXBoKCksXygpfSk7cmV0dXJuIGZ1bmN0aW9uKGFlKXtyZXR1cm4gWC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKS5jYXRjaChYPT57'@;
put 'aC5ncmFwaExvYWRpbmc9ITEsaC5ncmFwaENvbnRhaW5lcj0hMX0pfSl9KSgpfWdldFNWR1VSTCgpe2xldCBhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncmFwaCIpLGY9bmV3IFhNTFNlcmlhbGl6ZXIsZD1uZXcgQmxvYihbZi5zZXJpYWxpemVUb1N0cmluZyhhKV0se3R5cGU6ImltYWdl'@;
put 'L3N2Zyt4bWwifSk7cmV0dXJuIFVSTC5jcmVhdGVPYmplY3RVUkwoZCl9Z2V0U1ZHQmxvYigpe2xldCBhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncmFwaCIpLGY9bmV3IFhNTFNlcmlhbGl6ZXI7cmV0dXJuIG5ldyBCbG9iKFtmLnNlcmlhbGl6ZVRvU3RyaW5nKGEpXSx7dHlwZToiaW1h'@;
put 'Z2Uvc3ZnK3htbCJ9KX1kb3dubG9hZFNWRygpe2lmKEVGKCIjZ3JhcGgiKS5yZXNldFpvb20oKSxuYXZpZ2F0b3IuYXBwVmVyc2lvbi50b1N0cmluZygpLmluZGV4T2YoIi5ORVQiKT4wKXdpbmRvdy5uYXZpZ2F0b3IubXNTYXZlQmxvYih0aGlzLmdldFNWR0Jsb2IoKSx0aGlzLmNvbnN0cnVj'@;
put 'dE5hbWUoInN2ZyIpKTtlbHNle2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTthLmhyZWY9dGhpcy5nZXRTVkdVUkwoKSxhLmRvd25sb2FkPXRoaXMuY29uc3RydWN0TmFtZSgic3ZnIiksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKSxhLmNsaWNrKCksZG9jdW1lbnQuYm9k'@;
put 'eS5yZW1vdmVDaGlsZChhKX19ZG93bmxvYWRQTkcoKXt2YXIgYT10aGlzO3JldHVybiB5aShmdW5jdGlvbiooKXtFRigiI2dyYXBoIikucmVzZXRab29tKCksTkx0LnNhdmVTdmdBc1BuZyhkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjZ3JhcGggc3ZnIiksYS5jb25zdHJ1Y3ROYW1lKCJwbmci'@;
put 'KSl9KSgpfWRvd25sb2FkQ1NWKCl7bGV0IGE9dGhpcy5mbGF0ZGF0YTtjb25zdCBmPShhZSxwZSk9Pm51bGw9PT1wZT8iIjpwZSxkPU9iamVjdC5rZXlzKGFbMF0pO2xldCBoPWEubWFwKGFlPT5kLm1hcChwZT0+SlNPTi5zdHJpbmdpZnkoYWVbcGVdLGYpKS5qb2luKCIsIikpO2gudW5zaGlm'@;
put 'dChkLmpvaW4oIiwiKSk7bGV0IG09aC5qb2luKCJcclxuIik7dmFyIF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpLE89bmV3IEJsb2IoW21dLHt0eXBlOiJ0ZXh0L2NzdiJ9KTtpZihuYXZpZ2F0b3IuYXBwVmVyc2lvbi50b1N0cmluZygpLmluZGV4T2YoIi5ORVQiKT4wKXdpbmRvdy5u'@;
put 'YXZpZ2F0b3IubXNTYXZlQmxvYihPLHRoaXMuY29uc3RydWN0TmFtZSgiY3N2IikpO2Vsc2V7dmFyIFg9d2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoTyk7Xy5ocmVmPVgsXy5kb3dubG9hZD10aGlzLmNvbnN0cnVjdE5hbWUoImNzdiIpLF8uY2xpY2soKSx3aW5kb3cuVVJMLnJldm9rZU9i'@;
put 'amVjdFVSTChYKSxfLnJlbW92ZSgpfX1nZXREb3RVcmwoKXtsZXQgZj1uZXcgQmxvYihbdGhpcy52aXpJbnB1dF0se3R5cGU6InRleHQvcGxhaW4ifSk7cmV0dXJuIHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGYpfWdldERvdEJsb2IoKXtyZXR1cm4gbmV3IEJsb2IoW3RoaXMudml6SW5w'@;
put 'dXRdLHt0eXBlOiJ0ZXh0L3BsYWluIn0pfWRvd25sb2FkRG90KCl7aWYobmF2aWdhdG9yLmFwcFZlcnNpb24udG9TdHJpbmcoKS5pbmRleE9mKCIuTkVUIik+MCl3aW5kb3cubmF2aWdhdG9yLm1zU2F2ZUJsb2IodGhpcy5nZXREb3RCbG9iKCksdGhpcy5jb25zdHJ1Y3ROYW1lKCJ0eHQiKSk7'@;
put 'ZWxzZXtsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7YS5ocmVmPXRoaXMuZ2V0RG90VXJsKCksYS5kb3dubG9hZD10aGlzLmNvbnN0cnVjdE5hbWUoInR4dCIpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSksYS5jbGljaygpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQo'@;
put 'YSl9fXNob3dTdmcoKXt3aW5kb3cub3Blbih0aGlzLmdldFNWR1VSTCgpLCJfYmxhbmsiKX1idWlsZEdyYXBoKGEpe3RoaXMuZXZlbnRTZXJ2aWNlLmNsb3NlU2lkZWJhcigpLHRoaXMuZ3JhcGhMb2FkaW5nPSExLHRoaXMuZ3JhcGhSZW5kZXJpbmc9ITAsc2V0VGltZW91dCgoKT0+e0VGKCIj'@;
put 'Z3JhcGgiKS56b29tKCEwKS5hZGRJbWFnZSgiaHR0cHM6Ly9kYXRhY29udHJvbGxlci5pby93cC1jb250ZW50L3VwbG9hZHMvMjAyMC8wMS9mYzEucG5nIiwiMzBweCIsIjMwcHgiKS5yZW5kZXJEb3QodGhpcy52aXpJbnB1dCwoKT0+e3RoaXMuZ3JhcGhSZW5kZXJpbmc9ITEsdGhpcy5pZGxv'@;
put 'b2t1cCYmdGhpcy5tYWtlR3JhcGhMaW5rYWJsZSh0aGlzLmlkbG9va3VwKSxhJiZhKCl9KX0sMTAwKX1jb25zdHJ1Y3ROYW1lKGEpe2xldCBmPSIiLGQ9IiIsaD0iIixtPW1QdCgpLmZvcm1hdCgiWVlNTUREX0hIbW0iKTtpZih0aGlzLmxpYnJhcnlMaXN0JiZ0aGlzLmxpYnJhcnlMaXN0Lmxl'@;
put 'bmd0aCl7bGV0IF89dGhpcy5saWJyYXJ5TGlzdC5maW5kKE89Pk8uTElCUkFSWUlEPT10aGlzLmxpYik7XyYmKGY9YF8ke18uTElCUkFSWU5BTUV9YCl9aWYodGhpcy50YWJsZXNMaXN0JiZ0aGlzLnRhYmxlc0xpc3QubGVuZ3RoKXtsZXQgXz10aGlzLnRhYmxlc0xpc3QuZmluZChPPT5PLlRB'@;
put 'QkxFVVJJPT10aGlzLnRhYmxlKTtfJiYoZD1gXyR7Xy5UQUJMRU5BTUV9YCl9aWYodGhpcy5jb2x1bW5zTGlzdCYmdGhpcy5jb2x1bW5zTGlzdC5sZW5ndGgpe2xldCBfPXRoaXMuY29sdW1uc0xpc3QuZmluZChPPT5PLkNPTFVSST09dGhpcy5jb2x1bW4pO18mJihoPWBfJHtfLkNPTE5BTUV9'@;
put 'YCl9cmV0dXJuYCR7dGhpcy5kaXJlY3Rpb25UZXh0KCl9JHtmfSR7ZH0ke2h9XyR7bX0uJHthfWB9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHJ0KGIxKSxydChwbCkscnQodHUpLHJ0KExhKSxydChnZCkscnQoUnMpLHJ0KHkxKSxydChQdSkpfSxs'@;
put 'Llx1MDI3NWNtcD1rcih7dHlwZTpsLHNlbGVjdG9yczpbWyJhcHAtbGluZWFnZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6NTgsdmFyczoxMSxjb25zdHM6W1szLCJzY3JvbGxlZFRvQm90dG9tIl0sWyJjbGFzcyIsInNlYXJjaC1ub2RlIiw0LCJuZ0lmIl0s'@;
put 'WzQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJ3LTEwMCB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbMSwiY2FyZCJdLFsiY2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZCIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzMsImNsck1vZGFsT3BlbiIsImNsck1v'@;
put 'ZGFsQ2xvc2FibGUiXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJtb2RhbC1mb290ZXIiLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiJdLFsxLCJiaWdsaW5lYWdlLXJvdyIsIm1iLTBpIl0sWyJ0eXBlIiwibnVtYmVyIiwibWluIiwiMSIsInBsYWNlaG9sZGVyIiwiTWF4'@;
put 'IGRlcHRoIHZhbHVlIiwxLCJjbHItaW5wdXQiLCJtYXgtZGVwdGgtaW5wdXQiXSxbIm1heERlcHRoRG90IiwiIl0sWzEsIm1iLTIwIl0sWzEsImJpZ2xpbmVhZ2Utcm93Il0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbImNsckRy'@;
put 'b3Bkb3duVHJpZ2dlciIsIiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLCJtdC0zLW5lZ2F0aXZlIiwzLCJkaXNhYmxlZCJdLFsic2hhcGUiLCJjYXJldCBkb3duIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0Iiw0LCJjbHJJZk9wZW4iXSxbIm1heERlcHRoIiwiIl0sWzEs'@;
put 'InNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJMaWJyYXJpZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiXSxbInNlYXJjaExp'@;
put 'YlRyZWVJbnB1dCIsIiJdLFsic2hhcGUiLCJzZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xyLWV4'@;
put 'cGFuZGVkIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsNCwibmdJZiJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJyYWNrLXNlcnZlciJd'@;
put 'LFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbHItZXhwYW5kZWQiLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJUYWJsZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJv'@;
put 'ZmYiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiXSxbInNlYXJjaFRyZWVJbnB1dCIsIiJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiaWQiLCJjbGljayJdLFsic2hhcGUiLCJ0YWJsZSJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkNvbHVtbnMiLCJu'@;
put 'YW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiXSxbMSwiY2xyLXRyZWVub2RlLWxpbmsiLDMsImNsaWNrIl0sWyJzaGFwZSIsIm9iamVjdHMiXSxbMSwidy0xMDAiLCJ0ZXh0LWNlbnRlciJdLFsxLCJzcGlubmVyIiwi'@;
put 'c3Bpbm5lci1zbSJdLFsxLCJuby10YWJsZS1zZWxlY3RlZCJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwic2l6ZSIsIjYwIiwxLCJpcy1pbmZvIiwiaWNvbi1kYy1maWxsIl0sWzEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSJdLFsiY2xhc3MiLCJjYXJkLWhlYWRlciBkLWZsZXgg'@;
put 'ZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LWNlbnRlciIsNCwibmdJZiJdLFsxLCJjYXJkLWJsb2NrIl0sWzEsImZvcm0tYmxvY2siLCJzdyIsInBvc2l0aW9uLXJlbGF0aXZlIiwiZC1mbGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsImxpbmFnZS10aXRsZS13cmFwcGVyIiwiZC1m'@;
put 'bGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIiwiZm9udC13ZWlnaHQtYm9sZCIsInBvc2l0aW9uLWFic29sdXRlIl0sWyJjbGFzcyIsImNsci1jb2wtbWQtMTIgdGV4dC1jZW50ZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQiLDQsIm5nSWYiXSxbMywibXQtMiIsNCwibmdJZiJdLFsxLCJj'@;
put 'YXJkLWhlYWRlciIsImQtZmxleCIsImZsZXgtY29sdW1uIiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBwYi0xMCIsNCwibmdJZiJdLFsxLCJ0ZXh0LWNlbnRlciIsInBiLTEwIl0sWzMsInJvdXRlckxpbmsiXSxbMSwiY2xyLWNvbC1tZC0xMiIsInRl'@;
put 'eHQtY2VudGVyIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWVuZCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWzEsImJ0bi1ncm91cCIsImQtYmxvY2siXSxbMSwicmFkaW8iLCJidG4iLDMsImNsaWNrIl0sWyJ0eXBlIiwicmFkaW8iLCJu'@;
put 'YW1lIiwiYnRuLWdyb3VwLWRlbW8tcmFkaW9zIiwzLCJjaGVja2VkIl0sWzEsIm1yLTEwIl0sWyJjbHJEcm9wZG93blRyaWdnZXIiLCIiLDEsImJ0biIsImJ0bi1pbmZvLW91dGxpbmUiLDMsImRpc2FibGVkIl0sWyJjbGFzcyIsImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYi'@;
put 'XSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMywiY2xpY2siXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJjbHJD'@;
put 'aGVja2JveCIsIiIsIm5hbWUiLCJyZWZyZXNoQ2FjaGUiLDMsIm5nTW9kZWwiLCJjaGFuZ2UiLCJuZ01vZGVsQ2hhbmdlIl0sWzEsInRleHQtY2VudGVyIl0sWyJjbGFzcyIsInNwaW5uZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwicG9zaXRpb24tcmVsYXRpdmUiLDQsIm5nSWYiXSxbMSwic3Bp'@;
put 'bm5lciJdLFsxLCJwb3NpdGlvbi1yZWxhdGl2ZSJdLFsxLCJncmFwaC1yZW5kZXItc3Bpbm5lciJdLFsiY2xhc3MiLCJzcGlubmVyIHNwaW5uZXItc20iLDQsIm5nSWYiXSxbImlkIiwiZ3JhcGgiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxmKXtpZigxJmEpe2NvbnN0IGQ9Wm4oKTt5ZSgwLCJh'@;
put 'cHAtc2lkZWJhciIsMCksRXQoInNjcm9sbGVkVG9Cb3R0b20iLGZ1bmN0aW9uKCl7cmV0dXJuIGYubG9hZE1vcmVMaWJyYXJpZXMoKX0pLHllKDEsImNsci10cmVlIiksdHQoMixqTHQsNiwzLCJjbHItdHJlZS1ub2RlIiwxKSx0dCgzLFhMdCwyLDEsIm5nLWNvbnRhaW5lciIsMiksQ2UoKSx0'@;
put 'dCg0LEpMdCwzLDAsImRpdiIsMyksQ2UoKSx5ZSg1LCJkaXYiLDQpKDYsImRpdiIsNSksdHQoNyxRTHQsNCwwLCJkaXYiLDYpLHR0KDgsZFB0LDgsNCwibmctY29udGFpbmVyIiw3KSxDZSgpKCkseWUoOSwiY2xyLW1vZGFsIiw4KSgxMCwiaDMiLDkpLFllKDExLCJMaW1pdCBEZXB0aCIpLENl'@;
put 'KCkseWUoMTIsImRpdiIsMTApKDEzLCJwIiksWWUoMTQsIkVudGVyIHRoZSBkZXB0aCBudW1iZXIgeW91IHdvdWxkIGxpa2UgdG8gbGltaXQgRE9UIHJlbmRlcmluZyB0bzoiKSxDZSgpKCkseWUoMTUsImRpdiIsMTEpKDE2LCJkaXYiLDEyKSx0bigxNywiaW5wdXQiLDEzLDE0KSxDZSgpLHll'@;
put 'KDE5LCJjbHItY29udHJvbC1oZWxwZXIiLDE1KSxZZSgyMCwiVG8gcmVuZGVyIHdpdGggdW5saW1pdGVkIGRlcHRoLCBsZWF2ZSB0aGUgaW5wdXQgZW1wdHkiKSxDZSgpLHllKDIxLCJkaXYiLDE2KSgyMiwiYnV0dG9uIiwxNyksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBmLmxpbWl0'@;
put 'RG90RGVwdGg9ITF9KSxZZSgyMywiIENhbmNlbCAiKSxDZSgpLHllKDI0LCJidXR0b24iLDE3KSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7VXQoZCk7Y29uc3QgbT1RaSgxOCk7cmV0dXJuIGYucmVzdWJtaXRXaXRoTWF4RGVwdGgobS52YWx1ZSksWnQoZi5saW1pdERvdERlcHRoPSExKX0pLFll'@;
put 'KDI1LCIgUmVzdWJtaXQgIiksQ2UoKSgpKCkoKSx5ZSgyNiwiY2xyLW1vZGFsIiw4KSgyNywiaDMiLDkpLFllKDI4LCJXYXJuaW5nIiksQ2UoKSx5ZSgyOSwiZGl2IiwxMCkoMzAsInAiKSxZZSgzMSksQ2UoKSgpLHllKDMyLCJkaXYiLDExKSgzMywiZGl2IiwxNikoMzQsInAiKSxZZSgzNSwi'@;
put 'UmVuZGVyIGFueXdheSAodGhpcyBtYXkgdGFrZSBhIGxvbmcgdGltZSkiKSxDZSgpLHllKDM2LCJidXR0b24iLDE3KSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGYuY29udGludWVSZW5kZXJpbmdHcmFwaCgpfSksWWUoMzcsIiBSZW5kZXIgIiksQ2UoKSgpLHllKDM4LCJkaXYiLDE2'@;
put 'KSgzOSwicCIpLFllKDQwLCJEb3dubG9hZCB0aGUgcmVzdWx0IChQTkcgJiBTVkcgcmVxdWlyZSByZW5kZXJpbmcpIiksQ2UoKSx5ZSg0MSwiY2xyLWRyb3Bkb3duIikoNDIsImJ1dHRvbiIsMTgpLFllKDQzLCIgRG93bmxvYWQgIiksdG4oNDQsImNsci1pY29uIiwxOSksQ2UoKSx0dCg0NSxw'@;
put 'UHQsNiwxLCJjbHItZHJvcGRvd24tbWVudSIsMjApLENlKCkoKSx5ZSg0NiwiZGl2IiwxNikoNDcsInAiKSxZZSg0OCwiUmVzdWJtaXQgd2l0aCBhIG1heC1kZXB0aCAoc3BlY2lmeSBkZXB0aCkiKSxDZSgpLHRuKDQ5LCJpbnB1dCIsMTMsMjEpLHllKDUxLCJidXR0b24iLDE3KSxFdCgiY2xp'@;
put 'Y2siLGZ1bmN0aW9uKCl7VXQoZCk7Y29uc3QgbT1RaSg1MCk7cmV0dXJuIFp0KGYucmVzdWJtaXRXaXRoTWF4RGVwdGgobS52YWx1ZSkpfSksWWUoNTIsIiBSZXN1Ym1pdCAiKSxDZSgpKCkseWUoNTMsImRpdiIsMTYpKDU0LCJwIiksWWUoNTUsIkNhbmNlbCB0aGlzIHN1Ym1pc3Npb24iKSxD'@;
put 'ZSgpLHllKDU2LCJidXR0b24iLDE3KSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGYuY2FuY2VsUmVuZGVyaW5nR3JhcGgoKX0pLFllKDU3LCIgQ2FuY2VsICIpLENlKCkoKSgpKCl9MiZhJiYoU2UoMiksUmUoIm5nSWYiLGYubGlicmFyeUxpc3QpLFNlKDEpLFJlKCJuZ0Zvck9mIixm'@;
put 'LmxpYnJhcnlMaXN0KSxTZSgxKSxSZSgibmdJZiIsZi5saWJyYXJpZXNQYWdpbmcpLFNlKDMpLFJlKCJuZ0lmIiwhZi5jb2x1bW4mJiFmLnRhYmxlKSxTZSgxKSxSZSgibmdJZiIsZi5jb2x1bW58fGYudGFibGUpLFNlKDEpLFJlKCJjbHJNb2RhbE9wZW4iLGYubGltaXREb3REZXB0aCkoImNs'@;
put 'ck1vZGFsQ2xvc2FibGUiLCExKSxTZSgxNyksUmUoImNsck1vZGFsT3BlbiIsbnVsbCE9PWYubGFyZ2VEb3RGaWxlTGluZXMpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksU2UoNSksd3IoIiBUaGUgZ2VuZXJhdGVkIGRvdCBmaWxlIGhhcyAiLGYubGFyZ2VEb3RGaWxlTGluZXMsIiBsaW5lcy4g'@;
put 'UmVuZGVyaW5nIG1heSB0YWtlIGEgbG9uZyB0aW1lLCBob3cgd291bGQgeW91IGxpa2UgdG8gcHJvY2VlZD8gIiksU2UoMTEpLFJlKCJkaXNhYmxlZCIsIWYuY29sdW1uJiYhZi50YWJsZSkpfSxkZXBlbmRlbmNpZXM6W1JhLCRpLGlzLFIwLFdhLHphLEkwLERkLExmLGk1LFJsLE1jLGtjLEpj'@;
put 'LHhkLGVsLHhVLEIwLFYwLFJmLGEzLG81LGE1LHg3LGs0XSxzdHlsZXM6WyIudG9nZ2xlLXN3aXRjaFtfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFt0eXBlPWNoZWNrYm94XVtfbmdjb250ZW50LSVDT01QJV06Y2hlY2tlZCArIGxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXTpiZWZvcmV7Ym9y'@;
put 'ZGVyLWNvbG9yOiMzMTQzNTE7YmFja2dyb3VuZC1jb2xvcjojMzE0MzUxIWltcG9ydGFudDt0cmFuc2l0aW9uOi4xNXMgZWFzZS1pbjt0cmFuc2l0aW9uLXByb3BlcnR5OmJvcmRlci1jb2xvcixiYWNrZ3JvdW5kLWNvbG9yfSNncmFwaFtfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OmNhbGMo'@;
put 'MTAwdmggLSAxOTVweCk7b3ZlcmZsb3c6aGlkZGVuO3RleHQtYWxpZ246Y2VudGVyO2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtib3JkZXI6MXB4IHNvbGlkICNlNGU0ZTQ7bWFyZ2luLXRvcDoxMHB4fS5zZWxlY3Rpb24td3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTtt'@;
put 'YXgtd2lkdGg6NjcwcHh9LmNvbHVtbi1hY3RpdmVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6I2Q4ZTNlOTtjb2xvcjojMDAwfS5jb250ZW50LWFyZWFbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVyZW0haW1wb3J0YW50fS5jb250ZW50LWFyZWFbX25nY29udGVudC0lQ09N'@;
put 'UCVdICAgLmNhcmRbX25nY29udGVudC0lQ09NUCVde21pbi1oZWlnaHQ6Y2FsYygxMDB2aCAtIDEyMHB4KX0uY29udGVudC1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jYXJkLWJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41'@;
put 'cmVtIC4zNXJlbSFpbXBvcnRhbnR9Y2xyLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH0uZ3JhcGgtcmVuZGVyLXNwaW5uZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDow'@;
put 'O3dpZHRoOjEwMCU7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bWFyZ2luLXRvcDoxMHB4fS5iaWdsaW5lYWdlLXJvd1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjttYXJn'@;
put 'aW4tYm90dG9tOjIwcHh9Lm1vZGFsLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MH0ubGluZWFnZS10aXRsZS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtsZWZ0OjEycHh9Lm1heC1kZXB0aC1pbnB1dFtfbmdjb250ZW50LSVDT01Q'@;
put 'JV17d2lkdGg6MTAwJX1AbWVkaWEgKG1heC13aWR0aDogNzY4cHgpey50b2dnbGUtc3dpdGNoLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWJvdHRvbToyMHB4fX0iXX0pLGx9KSgpO2Z1bmN0aW9uIGdQdChsLGMpe2lmKDEmbCYmKHllKDAsIm9wdGlvbiIsMTEpLFllKDEp'@;
put 'LENlKCkpLDImbCl7Y29uc3QgYT1jLiRpbXBsaWNpdDtSdSgidmFsdWUiLGEpLFNlKDEpLHdyKCIgIixhLCIgIil9fWZ1bmN0aW9uIHZQdChsLGMpezEmbCYmdG4oMCwiY2xyLWljb24iLDE4KX1mdW5jdGlvbiB5UHQobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJjbHItaWNvbiIs'@;
put 'MTkpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtVdChhKTtjb25zdCBkPUdlKDIpO3JldHVybiBkLm1ldGFEYXRhU2VhcmNoPSIiLFp0KGQubWV0YUxpc3RPbkZpbHRlcigpKX0pLENlKCl9fWZ1bmN0aW9uIGJQdChsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImNsci10cmVlLW5vZGUi'@;
put 'LDEyKSgxLCJkaXYiLDEzKSgyLCJpbnB1dCIsMTQsMTUpLEV0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihkKXtyZXR1cm4gVXQoYSksWnQoR2UoKS5tZXRhRGF0YVNlYXJjaD1kKX0pKCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gVXQoYSksWnQoR2UoKS5tZXRhTGlzdE9uRmlsdGVyKCkp'@;
put 'fSksQ2UoKSx0dCg0LHZQdCwxLDAsImNsci1pY29uIiwxNiksdHQoNSx5UHQsMSwwLCJjbHItaWNvbiIsMTcpLENlKCkoKX1pZigyJmwpe2NvbnN0IGE9UWkoMyksZj1HZSgpO1NlKDIpLFJlKCJuZ01vZGVsIixmLm1ldGFEYXRhU2VhcmNoKSxTZSgyKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5n'@;
put 'dGg8MSksU2UoMSksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBfUHQobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJjbHItdHJlZS1ub2RlIiwyMSksRXQoImNsaWNrIixmdW5jdGlvbihkKXtVdChhKTtjb25zdCBoPUdlKCkuJGltcGxpY2l0LG09R2UoKTty'@;
put 'ZXR1cm4gWnQobS50cmVlTm9kZUNsaWNrZWQoZCxoLG0ubWV0YURhdGFMaXN0KSl9KSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGQpe3JldHVybiBVdChhKSxadChHZSgpLiRpbXBsaWNpdC5leHBhbmRlZD1kKX0pLHllKDEsInAiLDIyKSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7VXQo'@;
put 'YSk7Y29uc3QgZD1HZSgpLiRpbXBsaWNpdCxoPUdlKCk7cmV0dXJuIGgubWV0YURhdGFJZD1kLklELFp0KGgubWV0YURhdGFPbkNsaWNrKGgubWV0YURhdGFJZCxkKSl9KSx0bigyLCJjbHItaWNvbiIsMjMpLFllKDMpLENlKCkoKX1pZigyJmwpe2NvbnN0IGE9R2UoKS4kaW1wbGljaXQ7UmUo'@;
put 'ImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nVGFibGVzJiYhYS50YWJsZXMpLFNlKDMpLHdyKCIgIixhLklELCIgIil9fWZ1bmN0aW9uIHdQdChsLGMpe2lmKDEmbCYmKFdyKDApLHR0KDEsX1B0LDQsMywiY2xyLXRyZWUtbm9kZSIsMjApLEdyKCkpLDIm'@;
put 'bCl7Y29uc3QgYT1jLiRpbXBsaWNpdDtTZSgxKSxSZSgibmdJZiIsIWEuaGlkZGVuKX19ZnVuY3Rpb24gQ1B0KGwsYyl7MSZsJiYoeWUoMCwiZGl2IiwyNCksdG4oMSwiY2xyLWljb24iLDI1KSx5ZSgyLCJoMyIsMjYpLFllKDMsIlBsZWFzZSBzZWxlY3QgYSB0eXBlIiksQ2UoKSgpKX1mdW5j'@;
put 'dGlvbiBTUHQobCxjKXsxJmwmJih5ZSgwLCJoNCIpLFllKDEsIkxvYWRpbmcgbWV0YWRhdGEgdHlwZXMiKSxDZSgpKX1mdW5jdGlvbiBNUHQobCxjKXsxJmwmJih5ZSgwLCJoNCIpLFllKDEsIkxvYWRpbmcgbWV0YWRhdGEgb2JqZWN0cyIpLENlKCkpfWZ1bmN0aW9uIGtQdChsLGMpe2lmKDEm'@;
put 'bCYmKHllKDAsImRpdiIpLHR0KDEsU1B0LDIsMCwiaDQiLDI5KSx0dCgyLE1QdCwyLDAsImg0IiwyOSksQ2UoKSksMiZsKXtjb25zdCBhPUdlKDIpO1NlKDEpLFJlKCJuZ0lmIixhLm1ldGF0eXBlc0xvYWRpbmcpLFNlKDEpLFJlKCJuZ0lmIiwhYS5tZXRhdHlwZXNMb2FkaW5nKX19ZnVuY3Rp'@;
put 'b24gRVB0KGwsYyl7aWYoMSZsJiYoeWUoMCwiZGl2IiwyNykoMSwic3BhbiIsMjgpLFllKDIsIiBMb2FkaW5nLi4uICIpLENlKCksdHQoMyxrUHQsMywyLCJkaXYiLDI5KSxDZSgpKSwyJmwpe2NvbnN0IGE9R2UoKTtTZSgzKSxSZSgibmdJZiIsYS5sb2FkaW5nKX19ZnVuY3Rpb24geFB0KGws'@;
put 'Yyl7aWYoMSZsKXtjb25zdCBhPVpuKCk7eWUoMCwiZGl2IiwzNikoMSwiaW5wdXQiLDM3LDM4KSxFdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oZCl7cmV0dXJuIFV0KGEpLFp0KEdlKDIpLm1ldGFPYmplY3RTZWFyY2g9ZCl9KSgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIFV0KGEpLFp0'@;
put 'KEdlKDIpLm1ldGFPYmplY3RPbkZpbHRlcigpKX0pLENlKCkoKX1pZigyJmwpe2NvbnN0IGE9R2UoMik7U2UoMSksUmUoIm5nTW9kZWwiLGEubWV0YU9iamVjdFNlYXJjaCl9fWZ1bmN0aW9uIEFQdChsLGMpezEmbCYmdG4oMCwiY2xyLWljb24iLDQyKX1mdW5jdGlvbiBUUHQobCxjKXsxJmwm'@;
put 'JnRuKDAsImNsci1pY29uIiwyMyl9ZnVuY3Rpb24gT1B0KGwsYyl7aWYoMSZsJiYoeWUoMCwicCIsNTMpLFllKDEpLENlKCkpLDImbCl7Y29uc3QgYT1HZSgpLiRpbXBsaWNpdDtTZSgxKSx3cigiICIsYS5VUkksIiAiKX19ZnVuY3Rpb24gRFB0KGwsYyl7aWYoMSZsJiYoeWUoMCwiY2xyLXRy'@;
put 'ZWUtbm9kZSIsNDgpKDEsImRpdiIsNDkpLHR0KDIsQVB0LDEsMCwiY2xyLWljb24iLDUwKSx0dCgzLFRQdCwxLDAsImNsci1pY29uIiw1MSksWWUoNCksdHQoNSxPUHQsMiwxLCJwIiw1MiksQ2UoKSgpKSwyJmwpe2NvbnN0IGE9Yy4kaW1wbGljaXQ7UmUoImNsckV4cGFuZGFibGUiLCEwKSxT'@;
put 'ZSgxKSxncigib2JqZWN0LWhlYWRlciIsIWEuY291bnQpLFNlKDEpLFJlKCJuZ0lmIiwhYS5jb3VudCksU2UoMSksUmUoIm5nSWYiLGEuY291bnQpLFNlKDEpLHdyKCIgIixhLmRpc3BsYXksIiAiKSxTZSgxKSxSZSgibmdJZiIsIWEuY291bnQpfX1mdW5jdGlvbiBJUHQobCxjKXtpZigxJmwm'@;
put 'Jih5ZSgwLCJjbHItdHJlZSIsNDYpLHR0KDEsRFB0LDYsNywiY2xyLXRyZWUtbm9kZSIsNDcpLHdsKDIsImFzeW5jIiksQ2UoKSksMiZsKXtjb25zdCBhPUdlKDYpO1JlKCJjbHJMYXp5IiwhMCksU2UoMSksUmUoImNsclJlY3Vyc2l2ZUZvck9mIixKcygyLDMsYS5yb290JCkpKCJjbHJSZWN1'@;
put 'cnNpdmVGb3JHZXRDaGlsZHJlbiIsYS5nZXRDaGlsZHJlbil9fWZ1bmN0aW9uIFJQdChsLGMpe2lmKDEmbCYmKHllKDAsImNsci1hY2NvcmRpb24tY29udGVudCIpLHR0KDEsSVB0LDMsNSwiY2xyLXRyZWUiLDQ1KSxDZSgpKSwyJmwpe2NvbnN0IGE9R2UoNSk7U2UoMSksUmUoIm5nSWYiLGEu'@;
put 'c2hvd0FjYyl9fWZ1bmN0aW9uIExQdChsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImNsci1hY2NvcmRpb24tcGFuZWwiLDQxKSxFdCgiY2xyQWNjb3JkaW9uUGFuZWxPcGVuQ2hhbmdlIixmdW5jdGlvbihkKXtVdChhKTtjb25zdCBoPUdlKCkuJGltcGxpY2l0LG09R2UoMyk7cmV0'@;
put 'dXJuIFp0KGQ/bS5wYW5lbENoYW5nZShkLGgpOiIiKX0pLHllKDEsImNsci1hY2NvcmRpb24tdGl0bGUiKSx0bigyLCJjbHItaWNvbiIsNDIpLFllKDMpLHllKDQsInAiLDQzKSxZZSg1KSxDZSgpKCksdHQoNixSUHQsMiwxLCJjbHItYWNjb3JkaW9uLWNvbnRlbnQiLDQ0KSxDZSgpfWlmKDIm'@;
put 'bCl7Y29uc3QgYT1HZSgpLiRpbXBsaWNpdDtTZSgzKSx3cigiICIsYS5OQU1FLCIgIiksU2UoMiksYXIoYS5JRCl9fWZ1bmN0aW9uIFBQdChsLGMpe2lmKDEmbCYmKFdyKDApLHR0KDEsTFB0LDcsMiwiY2xyLWFjY29yZGlvbi1wYW5lbCIsNDApLEdyKCkpLDImbCl7Y29uc3QgYT1jLiRpbXBs'@;
put 'aWNpdDtTZSgxKSxSZSgibmdJZiIsIWEuaGlkZGVuKX19ZnVuY3Rpb24gRlB0KGwsYyl7aWYoMSZsJiYoeWUoMCwiZGl2IiwzOSkoMSwiY2xyLWFjY29yZGlvbiIpLHR0KDIsUFB0LDIsMSwibmctY29udGFpbmVyIiw0KSxDZSgpKCkpLDImbCl7Y29uc3QgYT1HZSgyKTtTZSgyKSxSZSgibmdG'@;
put 'b3JPZiIsYS5tZXRhT2JqZWN0U2hvd0xpc3QpfX1mdW5jdGlvbiBIUHQobCxjKXsxJmwmJnRuKDAsImNsci1pY29uIiw0Mil9ZnVuY3Rpb24gTlB0KGwsYyl7MSZsJiZ0bigwLCJjbHItaWNvbiIsMjMpfWZ1bmN0aW9uIFZQdChsLGMpe2lmKDEmbCYmKHllKDAsInAiLDUzKSxZZSgxKSxDZSgp'@;
put 'KSwyJmwpe2NvbnN0IGE9R2UoKS4kaW1wbGljaXQ7U2UoMSksd3IoIiAiLGEuVVJJLCIgIil9fWZ1bmN0aW9uIEJQdChsLGMpe2lmKDEmbCYmKHllKDAsImNsci10cmVlLW5vZGUiLDQ4KSgxLCJkaXYiLDQ5KSx0dCgyLEhQdCwxLDAsImNsci1pY29uIiw1MCksdHQoMyxOUHQsMSwwLCJjbHIt'@;
put 'aWNvbiIsNTEpLFllKDQpLHR0KDUsVlB0LDIsMSwicCIsNTIpLENlKCkoKSksMiZsKXtjb25zdCBhPWMuJGltcGxpY2l0O1JlKCJjbHJFeHBhbmRhYmxlIiwhMCksU2UoMSksZ3IoIm9iamVjdC1oZWFkZXIiLCFhLmNvdW50KSxTZSgxKSxSZSgibmdJZiIsIWEuY291bnQpLFNlKDEpLFJlKCJu'@;
put 'Z0lmIixhLmNvdW50KSxTZSgxKSx3cigiICIsYS5kaXNwbGF5LCIgIiksU2UoMSksUmUoIm5nSWYiLCFhLmNvdW50KX19ZnVuY3Rpb24galB0KGwsYyl7aWYoMSZsJiYoeWUoMCwiY2xyLXRyZWUiLDQ2KSx0dCgxLEJQdCw2LDcsImNsci10cmVlLW5vZGUiLDQ3KSx3bCgyLCJhc3luYyIpLENl'@;
put 'KCkpLDImbCl7Y29uc3QgYT1HZSg0KTtSZSgiY2xyTGF6eSIsITApLFNlKDEpLFJlKCJjbHJSZWN1cnNpdmVGb3JPZiIsSnMoMiwzLGEucm9vdCQpKSgiY2xyUmVjdXJzaXZlRm9yR2V0Q2hpbGRyZW4iLGEuZ2V0Q2hpbGRyZW4pfX1mdW5jdGlvbiB6UHQobCxjKXtpZigxJmwmJihXcigwKSx5'@;
put 'ZSgxLCJkaXYiLDU0KSx0bigyLCJjbHItaWNvbiIsNDIpLHllKDMsImRpdiIsNTUpKDQsInAiLDU2KSxZZSg1KSxDZSgpLHllKDYsInAiLDU3KSxZZSg3KSxDZSgpKCkoKSx0dCg4LGpQdCwzLDUsImNsci10cmVlIiw0NSksR3IoKSksMiZsKXtjb25zdCBhPWMuJGltcGxpY2l0LGY9R2UoMyk7'@;
put 'U2UoNSksd3IoIiAiLGEuTkFNRSwiICIpLFNlKDIpLHdyKCIgIixhLklELCIgIiksU2UoMSksUmUoIm5nSWYiLGYuc2hvd0FjYyl9fWZ1bmN0aW9uIFVQdChsLGMpe2lmKDEmbCYmKHllKDAsImRpdiIsMzkpLHR0KDEselB0LDksMywibmctY29udGFpbmVyIiw0KSxDZSgpKSwyJmwpe2NvbnN0'@;
put 'IGE9R2UoMik7U2UoMSksUmUoIm5nRm9yT2YiLGEubWV0YU9iamVjdFNob3dMaXN0KX19ZnVuY3Rpb24gWlB0KGwsYyl7aWYoMSZsJiYoeWUoMCwiY2xyLWRnLXJvdyIpKDEsImNsci1kZy1jZWxsIiksWWUoMiksQ2UoKSx5ZSgzLCJjbHItZGctY2VsbCIpLFllKDQpLENlKCkseWUoNSwiY2xy'@;
put 'LWRnLWNlbGwiKSxZZSg2KSxDZSgpKCkpLDImbCl7Y29uc3QgYT1jLiRpbXBsaWNpdDtTZSgyKSxhcihhLlRZUEUpLFNlKDIpLGFyKGEuTkFNRSksU2UoMiksYXIoYS5WQUxVRSl9fWNvbnN0IFlQdD1mdW5jdGlvbigpe3JldHVyblsxMCwyMCw1MCwxMDBdfTtmdW5jdGlvbiBXUHQobCxjKXtp'@;
put 'ZigxJmwmJih5ZSgwLCJjbHItZGF0YWdyaWQiLDU4KSgxLCJjbHItZGctY29sdW1uIiksWWUoMiwiIFRZUEUgIiksdG4oMywiY2xyLWRnLXN0cmluZy1maWx0ZXIiLDU5KSxDZSgpLHllKDQsImNsci1kZy1jb2x1bW4iKSxZZSg1LCIgTkFNRSAiKSx0big2LCJjbHItZGctc3RyaW5nLWZpbHRl'@;
put 'ciIsNTkpLENlKCkseWUoNywiY2xyLWRnLWNvbHVtbiIpLFllKDgsIiBWQUxVRSAiKSx0big5LCJjbHItZGctc3RyaW5nLWZpbHRlciIsNTkpLENlKCksdHQoMTAsWlB0LDcsMywiY2xyLWRnLXJvdyIsNjApLHllKDExLCJjbHItZGctZm9vdGVyIikoMTIsImNsci1kZy1wYWdpbmF0aW9uIiw2'@;
put 'MSw2MikoMTQsImNsci1kZy1wYWdlLXNpemUiLDYzKSxZZSgxNSwiQXR0cmlidXRlcyBwZXIgcGFnZSIpLENlKCksWWUoMTYpLENlKCkoKSgpKSwyJmwpe2NvbnN0IGE9UWkoMTMpLGY9R2UoMik7U2UoMyksUmUoImNsckRnU3RyaW5nRmlsdGVyIixmLnR5cGVGaWx0ZXIpLFNlKDMpLFJlKCJj'@;
put 'bHJEZ1N0cmluZ0ZpbHRlciIsZi5uYW1lRmlsdGVyKSxTZSgzKSxSZSgiY2xyRGdTdHJpbmdGaWx0ZXIiLGYudmFsdWVGaWx0ZXIpLFNlKDEpLFJlKCJjbHJEZ0l0ZW1zT2YiLGYubWV0YU9iamVjdEF0dHJpYnV0ZXMpLFNlKDIpLFJlKCJjbHJEZ1BhZ2VTaXplIiwxMCksU2UoMiksUmUoImNs'@;
put 'clBhZ2VTaXplT3B0aW9ucyIsWGEoOSxZUHQpKSxTZSgyKSxPMCgiICIsYS5maXJzdEl0ZW0rMSwiIC0gIixhLmxhc3RJdGVtKzEsIiBvZiAiLGEudG90YWxJdGVtcywiIEF0dHJpYnV0ZXMgIil9fWZ1bmN0aW9uIEdQdChsLGMpe2lmKDEmbCYmKHllKDAsImRpdiIsMzApKDEsImRpdiIsMzEp'@;
put 'LHR0KDIseFB0LDMsMSwiZGl2IiwzMiksdG4oMywiYnIiKSx0dCg0LEZQdCwzLDEsImRpdiIsMzMpLHR0KDUsVVB0LDIsMSwiZGl2IiwzMyksQ2UoKSx5ZSg2LCJkaXYiLDM0KSg3LCJoMyIpLFllKDgpLENlKCksdHQoOSxXUHQsMTcsMTAsImNsci1kYXRhZ3JpZCIsMzUpLENlKCkoKSksMiZs'@;
put 'KXtjb25zdCBhPUdlKCk7U2UoMiksUmUoIm5nSWYiLGEubWV0YU9iamVjdExpc3QmJiFhLm9iamVjdFJvdXRlKSxTZSgyKSxSZSgibmdJZiIsIWEub2JqZWN0VmlldyksU2UoMSksUmUoIm5nSWYiLGEub2JqZWN0VmlldyksU2UoMyksYXIoYS5hc3NvT2JqZWN0U2VsZWN0ZWQpLFNlKDEpLFJl'@;
put 'KCJuZ0lmIixhLnNob3dUYWJsZSl9fWxldCBFUT0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEsZixkLGgsbSxfKXt0aGlzLmV2ZW50U2VydmljZT1hLHRoaXMuc2FzU2VydmljZT1mLHRoaXMuaGVscGVyU2VydmljZT1kLHRoaXMubG9jYXRpb249aCx0aGlzLnJvdXRlcj1tLHRoaXMucm91'@;
put 'dGU9Xyx0aGlzLm1ldGFEYXRhU2VhcmNoPSIiLHRoaXMubWV0YU9iamVjdFNlYXJjaD0iIix0aGlzLm1ldGFPYmplY3RBc3NvY2lhdGlvbnM9W10sdGhpcy5tZXRhT2JqZWN0QXR0cmlidXRlcz1bXSx0aGlzLnNob3dUYWJsZT0hMSx0aGlzLnNob3dBY2M9ITEsdGhpcy5tZXRhRGF0YUlkPSIi'@;
put 'LHRoaXMubG9hZGluZz0hMCx0aGlzLm1ldGF0eXBlc0xvYWRpbmc9ITAsdGhpcy5tZXRhT2JqZWN0U2l6ZT0yMDAsdGhpcy5hc3NvVHlwZVNlbGVjdGVkPSIiLHRoaXMuYXNzb09iamVjdFNlbGVjdGVkPSIiLHRoaXMucmVwb3NpdG9yeT0iIix0aGlzLm9iamVjdFJvdXRlPSExLHRoaXMuc2hv'@;
put 'd0RhdGE9ITEsdGhpcy5vYmplY3RWaWV3PSExLHRoaXMuZ2V0Q2hpbGRyZW49Tz0+Ty5jb3VudD9HaShPLmRldGFpbHMpOnRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJtZXRhbmF2L21ldGFkZXRhaWxzIix7U0FTQ29udHJvbFRhYmxlOlt7b2JqZWN0dXJpOk8uQVNTT0NVUkl9XX0pLnRoZW4o'@;
put 'YWU9Pnt0aGlzLnNob3dUYWJsZT0hMCx0aGlzLm1ldGFPYmplY3RBdHRyaWJ1dGVzPWFlLmF0dHJpYnV0ZXMsdGhpcy5hc3NvT2JqZWN0U2VsZWN0ZWQ9Ty5OQU1FO2xldCBwZT10aGlzLnJvdXRlci51cmw7cmV0dXJuIHRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKHRoaXMub2JqZWN0Um91'@;
put 'dGU/cGUuc2xpY2UoMCxwZS5sYXN0SW5kZXhPZigib2JqZWN0IikpKyJvYmplY3QvIitPLkFTU09DVVJJLnNsaWNlKDErTy5BU1NPQ1VSSS5pbmRleE9mKCJcXCIpKTpwZSsiL29iamVjdC8iK08uQVNTT0NVUkkuc2xpY2UoMStPLkFTU09DVVJJLmluZGV4T2YoIlxcIikpKSx0aGlzLmdldEFz'@;
put 'c29zaWF0aW9uc0NvdW50KGFlLmFzc29jaWF0aW9ucyl9KSx0aGlzLmRlYm91bmNlPSExfW5nT25Jbml0KCl7Sm4udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249InZpZXcvbWV0YWRhdGEiLHRoaXMucm91dGVyLnVybC5pbmNsdWRlcygiL3ZpZXcvbWV0YWRhdGEvb2JqZWN0LyIpJiYodGhpcy5v'@;
put 'YmplY3RSb3V0ZT0hMCx0aGlzLm9iamVjdFZpZXc9ITApLHRoaXMucGFnZVNpemU9NSxKbi5tZXRhZGF0YS5tZXRhRGF0YUxpc3QmJkpuLm1ldGFkYXRhLm1ldGFSZXBvc2l0b3JpZXMmJiF0aGlzLm9iamVjdFJvdXRlPyh0aGlzLm1ldGFEYXRhTGlzdD1Kbi5tZXRhZGF0YS5tZXRhRGF0YUxp'@;
put 'c3QsdGhpcy5yZXBvc2l0b3JpZXM9Sm4ubWV0YWRhdGEubWV0YVJlcG9zaXRvcmllcyx0aGlzLnJlcG9zaXRvcnk9Sm4ubWV0YWRhdGEuc2VsZWN0ZWRSZXBvc2l0b3J5LHRoaXMubG9hZGluZz0hMSx0aGlzLm1ldGF0eXBlc0xvYWRpbmc9ITEsdGhpcy5tZXRhRGF0YVNlYXJjaD1Kbi5tZXRh'@;
put 'ZGF0YS5tZXRhRGF0YVNlYXJjaCk6KHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJtZXRhbmF2L21ldGF0eXBlcyIsbnVsbCkudGhlbihhPT57dGhpcy5tZXRhRGF0YUxpc3Q9YS50eXBlcyxKbi5tZXRhZGF0YS5tZXRhRGF0YUxpc3Q9dGhpcy5tZXRhRGF0YUxpc3QsdGhpcy5sb2FkaW5nPSEx'@;
put 'LHRoaXMubWV0YXR5cGVzTG9hZGluZz0hMX0pLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJtZXRhbmF2L21ldGFyZXBvcyIsbnVsbCkudGhlbihhPT57bGV0IGY9ITE7dGhpcy5yZXBvc2l0b3JpZXM9W107Zm9yKGxldCBkPTA7ZDxhLm91dHJlcG9zLmxlbmd0aDtkKyspdGhpcy5yZXBvc2l0'@;
put 'b3JpZXMucHVzaChhLm91dHJlcG9zW2RdLk5BTUUpLCJGb3VuZGF0aW9uIj09PWEub3V0cmVwb3NbZF0uTkFNRSYmKGY9ITApO2lmKHRoaXMucmVwb3NpdG9yeT1mPyJGb3VuZGF0aW9uIjphLm91dHJlcG9zWzBdLk5BTUUsSm4ubWV0YWRhdGEubWV0YVJlcG9zaXRvcmllcz10aGlzLnJlcG9z'@;
put 'aXRvcmllcyxKbi5tZXRhZGF0YS5zZWxlY3RlZFJlcG9zaXRvcnk9dGhpcy5yZXBvc2l0b3J5LHRoaXMub2JqZWN0Um91dGUpe3RoaXMuZXZlbnRTZXJ2aWNlLmNsb3NlU2lkZWJhcigpLHRoaXMuc2hvd0RhdGE9ITA7bGV0IGQ9IiIsaD10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5vYmpl'@;
put 'Y3RJRDt0aGlzLm1ldGFPYmplY3RMaXN0PVtdLHRoaXMubWV0YU9iamVjdExpc3QucHVzaCh7SUQ6aCxOQU1FOmR9KSx0aGlzLm1ldGFPYmplY3RTaG93TGlzdD10aGlzLm1ldGFPYmplY3RMaXN0LHRoaXMubWV0YU9iamVjdE9uQ2xpY2sodGhpcy5tZXRhT2JqZWN0U2hvd0xpc3RbMF0uSUQs'@;
put 'dGhpcy5tZXRhT2JqZWN0U2hvd0xpc3RbMF0pfX0pKX10cmVlTm9kZUNsaWNrZWQoYSxmLGQpeyJDb2xsYXBzZSI9PT1hLnRhcmdldC50aXRsZSYmdGhpcy5jb2xsYXBzZVRyZWVJdGVtcyhkLGYpfWNvbGxhcHNlVHJlZUl0ZW1zKGEsZil7YS5mb3JFYWNoKGQ9PntKU09OLnN0cmluZ2lmeShk'@;
put 'KSE9PUpTT04uc3RyaW5naWZ5KGYpJiYoZC5leHBhbmRlZD0hMSl9KX1tZXRhRGF0YU9uQ2xpY2soYSxmKXt0aGlzLm9iamVjdFZpZXc9ITEsdGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoIi92aWV3L21ldGFkYXRhIiksdGhpcy5zaG93RGF0YT0hMSx0aGlzLmxvYWRpbmc9ITAsdGhpcy5z'@;
put 'ZWxlY3RtZXRhRGF0YShhLGYpfW1ldGFPYmplY3RPbkNsaWNrKGEsZil7dGhpcy5hc3NvT2JqZWN0U2VsZWN0ZWQ9IiAuICIsdGhpcy5zaG93QWNjPSExLHRoaXMubWV0YU9iamVjdEF0dHJpYnV0ZXM9W10sdGhpcy5zZWxlY3RtZXRhT2JqZWN0KGEsZil9c2VsZWN0bWV0YURhdGEoYSxmKXt2'@;
put 'YXIgZD10aGlzO3JldHVybiB5aShmdW5jdGlvbiooKXtkLnNhc1NlcnZpY2UucmVxdWVzdCgibWV0YW5hdi9tZXRhb2JqZWN0cyIse1NBU0NvbnRyb2xUYWJsZTpbe21ldGF0eXBlOmEscmVwbzpkLnJlcG9zaXRvcnl9XX0pLnRoZW4obT0+e2QubWV0YU9iamVjdExpc3Q9bS5vYmplY3RzLGQu'@;
put 'Z2V0TWV0YU9iamVjdEF0dHJpYnV0ZXMoZC5tZXRhT2JqZWN0U2l6ZSksZC5sb2FkaW5nPSExLGQuYXNzb1R5cGVTZWxlY3RlZD1hLGQuZXZlbnRTZXJ2aWNlLmNsb3NlU2lkZWJhcigpLGQuc2hvd0RhdGE9ITB9KX0pKCl9c2VsZWN0bWV0YU9iamVjdChhLGYpe3ZhciBkPXRoaXM7cmV0dXJu'@;
put 'IHlpKGZ1bmN0aW9uKigpe2Quc2FzU2VydmljZS5yZXF1ZXN0KCJtZXRhbmF2L21ldGFkZXRhaWxzIix7U0FTQ29udHJvbFRhYmxlOlt7b2JqZWN0dXJpOmF9XX0pLnRoZW4obT0+e2QubWV0YU9iamVjdEFzc29jaWF0aW9ucz1tLmFzc29jaWF0aW9ucyxkLnJvb3QkPUdpKGQuZ2V0QXNzb3Np'@;
put 'YXRpb25zQ291bnQobS5hc3NvY2lhdGlvbnMpKSxkLnNob3dBY2M9ITAsZC5zaG93VGFibGU9ITA7bGV0IF89bS5hdHRyaWJ1dGVzLmZpbmQoWD0+Ik5hbWUiPT09WC5OQU1FKS5WQUxVRTtkLmFzc29PYmplY3RTZWxlY3RlZD1fLGYuTkFNRT1fO2xldCBPPWQucm91dGVyLnVybDtkLmxvY2F0'@;
put 'aW9uLnJlcGxhY2VTdGF0ZShkLm9iamVjdFJvdXRlP08uc2xpY2UoMCxPLmxhc3RJbmRleE9mKCJvYmplY3QiKSkrIm9iamVjdC8iK2Euc2xpY2UoMSthLmluZGV4T2YoIlxcIikpOk8rIi9vYmplY3QvIithLnNsaWNlKDErYS5pbmRleE9mKCJcXCIpKSksZC5tZXRhT2JqZWN0QXR0cmlidXRl'@;
put 'cz1tLmF0dHJpYnV0ZXN9KX0pKCl9c2VsZWN0QXNzb3NpYXRpb25zRGV0YWlscyhhLGYpe3ZhciBkPXRoaXM7cmV0dXJuIHlpKGZ1bmN0aW9uKigpe2Quc2FzU2VydmljZS5yZXF1ZXN0KCJtZXRhbmF2L21ldGFkZXRhaWxzIix7U0FTQ29udHJvbFRhYmxlOlt7b2JqZWN0dXJpOmF9XX0pLnRo'@;
put 'ZW4obT0+e2QubWV0YU9iamVjdEF0dHJpYnV0ZXM9bS5hdHRyaWJ1dGVzLGQuc2hvd1RhYmxlPSEwfSl9KSgpfWdldEFzc29zaWF0aW9uc0NvdW50KGEpe2xldCBmPW5ldyBNYXA7Zm9yKGxldCBoIG9mIGEpe2YuaGFzKGguQVNTT0MpfHxmLnNldChoLkFTU09DLHtjb3VudDowLGRldGFpbHM6'@;
put 'W119KTtsZXQgbT1mLmdldChoLkFTU09DKTttLmNvdW50KyssbS5kZXRhaWxzLnB1c2goe0FTU09DVVJJOmguQVNTT0NVUkksTkFNRTpoLk5BTUUsZGlzcGxheTpoLk5BTUUsVVJJOmguQVNTT0NVUkkuc2xpY2UoaC5BU1NPQ1VSSS5pbmRleE9mKCI6IikrMSl9KX1sZXQgZD1bXTtyZXR1cm4g'@;
put 'Zi5mb3JFYWNoKGZ1bmN0aW9uKGgsbSl7ZC5wdXNoKHtBU1NPQzptLGNvdW50OmguY291bnQsZGV0YWlsczpoLmRldGFpbHMsZGlzcGxheTptKyIgKCAiK2guY291bnQrIiApIn0pfSksZH1zZXRUeXBlQXNzb3NpYXRpb25zKGEpe2xldCBmPVtdO2ZvcihsZXQgZCBvZiB0aGlzLm1ldGFPYmpl'@;
put 'Y3RBc3NvY2lhdGlvbnMpZC5BU1NPQz09PWEmJmYucHVzaChkKTtyZXR1cm4gdGhpcy5hc3Nvc2lhdGlvbk5hbWVzPWYsZn1hc3Nvc2lhdGlvbk5hbWVPbkNsaWNrKGEpe3RoaXMuYXNzb09iamVjdFNlbGVjdGVkPSIgLiAiLHRoaXMubWV0YU9iamVjdEF0dHJpYnV0ZXM9W10sdGhpcy5zaG93'@;
put 'VGFibGU9ITEsdGhpcy5zZWxlY3RBc3Nvc2lhdGlvbnNEZXRhaWxzKGEpfW1ldGFMaXN0T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMubWV0YURhdGFMaXN0LHRoaXMubWV0YURhdGFTZWFyY2gsIklEIiksSm4ubWV0YWRhdGEubWV0YURhdGFTZWFy'@;
put 'Y2g9dGhpcy5tZXRhRGF0YVNlYXJjaH1tZXRhT2JqZWN0T25GaWx0ZXIoKXt0aGlzLm1ldGFPYmplY3RBdHRyaWJ1dGVzPVtdLHRoaXMuaGVscGVyU2VydmljZS5tZXRhT2JqZWN0T25GaWx0ZXIodGhpcy5tZXRhT2JqZWN0TGlzdCx0aGlzLm1ldGFPYmplY3RTZWFyY2gsIk5BTUUiKSx0aGlz'@;
put 'LmdldE1ldGFPYmplY3RBdHRyaWJ1dGVzKHRoaXMubWV0YU9iamVjdFNpemUpLEpuLm1ldGFkYXRhLm1ldGFPYmplY3RTZWFyY2g9dGhpcy5tZXRhT2JqZWN0U2VhcmNofWdldE1ldGFPYmplY3RBdHRyaWJ1dGVzKGEpe2lmKHZvaWQgMCE9PXRoaXMubWV0YU9iamVjdExpc3QmJnRoaXMubWV0'@;
put 'YU9iamVjdExpc3QubGVuZ3RoPmEpe2xldCBmPTAsZD0tMTtmb3IobGV0IGg9MDtoPHRoaXMubWV0YU9iamVjdExpc3QubGVuZ3RoO2grKylpZigodm9pZCAwPT09dGhpcy5tZXRhT2JqZWN0TGlzdFtoXS5oaWRkZW58fCExPT09dGhpcy5tZXRhT2JqZWN0TGlzdFtoXS5oaWRkZW4pJiZmKyss'@;
put 'Zj09PWEpe2Q9aDticmVha310aGlzLm1ldGFPYmplY3RTaG93TGlzdD0tMSE9PWQ/dGhpcy5tZXRhT2JqZWN0TGlzdC5zbGljZSgwLGQpOnRoaXMubWV0YU9iamVjdExpc3R9ZWxzZSB0aGlzLm1ldGFPYmplY3RTaG93TGlzdD10aGlzLm1ldGFPYmplY3RMaXN0fXBhbmVsQ2hhbmdlKGEsZil7'@;
put 'dGhpcy5kZWJvdW5jZXx8KHRoaXMubWV0YU9iamVjdE9uQ2xpY2soZi5JRCxmKSx0aGlzLmRlYm91bmNlPSEwLHNldFRpbWVvdXQoKCk9Pnt0aGlzLmRlYm91bmNlPSExfSw2MDApKX11cGRhdGVTZWxlY3RlZFJlcG9zaXRvcnkoKXtKbi5tZXRhZGF0YS5zZWxlY3RlZFJlcG9zaXRvcnk9dGhp'@;
put 'cy5yZXBvc2l0b3J5fX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChScykscnQocGwpLHJ0KFB1KSxydChnZCkscnQoTGEpLHJ0KHR1KSl9LGwuXHUwMjc1Y21wPWtyKHt0eXBlOmwsc2VsZWN0b3JzOltbImFwcC1tZXRhZGF0YSJdXSxob3N0QXR0'@;
put 'cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MTcsdmFyczo4LGNvbnN0czpbWzEsInJlcG8tZHJvcGRvd24iXSxbImNsclNlbGVjdCIsIiIsImlkIiwicmVwb3NpdG9yeSIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJjaGFuZ2UiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwi'@;
put 'bmdGb3JPZiJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQiLCJiYWNrZ3JvdW5kLXRyYW5zcGFyZW50LWkiXSxbMSwiY29sb3ItZ3JheSJdLFsiY2xhc3MiLCJuby10YWJsZS1zZWxlY3Rl'@;
put 'ZCIsNCwibmdJZiJdLFsiY2xhc3MiLCJsb2FkaW5nU3Bpbm5lciIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItcm93IGNsci1mbGV4LWdyb3ctMSIsNCwibmdJZiJdLFszLCJ2YWx1ZSJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJjbHJJbnB1dCIsIiIs'@;
put 'InBsYWNlaG9sZGVyIiwic2VhcmNoIFNBUyBUeXBlcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCJdLFsic2VhcmNoTGliVHJlZUlucHV0IiwiIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hh'@;
put 'cGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0lmIl0sWzMsImNsckV4cGFuZGVkIiwi'@;
put 'Y2xyTG9hZGluZyIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImJsb2NrIl0sWzEsIm5vLXRhYmxlLXNlbGVjdGVkIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwiNjAiLDEsImlz'@;
put 'LWluZm8iLCJpY29uLWRjLWZpbGwiXSxbMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5Il0sWzEsImxvYWRpbmdTcGlubmVyIl0sWzEsInNwaW5uZXIiXSxbNCwibmdJZiJdLFsxLCJjbHItcm93IiwiY2xyLWZsZXgtZ3Jvdy0xIl0sWzEsImNsci1jb2wtNiJdLFsiY2xhc3MiLCJzZWFyY2gt'@;
put 'aW5wdXQiLDQsIm5nSWYiXSxbImNsYXNzIiwib2JqZWN0cy1jb2wiLDQsIm5nSWYiXSxbMSwiY2xyLWNvbC02IiwidGV4dC1jZW50ZXIiXSxbImNsYXNzIiwiZGF0YWdyaWQtY3VzdG9tLWZvb3RlciIsNCwibmdJZiJdLFsxLCJzZWFyY2gtaW5wdXQiXSxbImNscklucHV0IiwiIiwicGxhY2Vo'@;
put 'b2xkZXIiLCJzZWFyY2giLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiXSxbInNlYXJjaE9ialRyZWVJbnB1dCIsIiJdLFsxLCJvYmplY3RzLWNvbCJdLFszLCJjbHJBY2NvcmRpb25QYW5lbE9wZW5DaGFuZ2Ui'@;
put 'LDQsIm5nSWYiXSxbMywiY2xyQWNjb3JkaW9uUGFuZWxPcGVuQ2hhbmdlIl0sWyJzaGFwZSIsInJhY2stc2VydmVyIl0sWzEsImZsb2F0LXJpZ2h0Il0sWzQsImNscklmRXhwYW5kZWQiXSxbMywiY2xyTGF6eSIsNCwibmdJZiJdLFszLCJjbHJMYXp5Il0sWzMsImNsckV4cGFuZGFibGUiLDQs'@;
put 'ImNsclJlY3Vyc2l2ZUZvciIsImNsclJlY3Vyc2l2ZUZvck9mIiwiY2xyUmVjdXJzaXZlRm9yR2V0Q2hpbGRyZW4iXSxbMywiY2xyRXhwYW5kYWJsZSJdLFsxLCJmdWxsLXdpZHRoIl0sWyJzaGFwZSIsInJhY2stc2VydmVyIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImJsb2NrIiw0LCJuZ0lmIl0s'@;
put 'WyJjbGFzcyIsImZsb2F0LXJpZ2h0IG9iamVjdC11cmkiLDQsIm5nSWYiXSxbMSwiZmxvYXQtcmlnaHQiLCJvYmplY3QtdXJpIl0sWzEsImNvbHMtaGVhZCJdLFsxLCJvYmplY3QtdGV4dCJdLFsxLCJtLTAiLCJ3b3JkLWJyZWFrIiwibXItMjAiXSxbMSwiZmxvYXQtcmlnaHQiLCJtbC0zIl0s'@;
put 'WzEsImRhdGFncmlkLWN1c3RvbS1mb290ZXIiXSxbMywiY2xyRGdTdHJpbmdGaWx0ZXIiXSxbNCwiY2xyRGdJdGVtcyIsImNsckRnSXRlbXNPZiJdLFszLCJjbHJEZ1BhZ2VTaXplIl0sWyJwYWdpbmF0aW9uIiwiIl0sWzMsImNsclBhZ2VTaXplT3B0aW9ucyJdXSx0ZW1wbGF0ZTpmdW5jdGlv'@;
put 'bihhLGYpezEmYSYmKHllKDAsImFwcC1zaWRlYmFyIikoMSwiZGl2IiwwKSgyLCJjbHItc2VsZWN0LWNvbnRhaW5lciIpKDMsImxhYmVsIiksWWUoNCwiTWV0YWRhdGEgUmVwb3NpdG9yeSIpLENlKCkseWUoNSwic2VsZWN0IiwxKSxFdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0'@;
put 'dXJuIGYucmVwb3NpdG9yeT1ofSkoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gZi51cGRhdGVTZWxlY3RlZFJlcG9zaXRvcnkoKX0pLHR0KDYsZ1B0LDIsMiwib3B0aW9uIiwyKSxDZSgpKCkoKSx5ZSg3LCJjbHItdHJlZSIpLHR0KDgsYlB0LDYsMywiY2xyLXRyZWUtbm9kZSIsMyksdHQo'@;
put 'OSx3UHQsMiwxLCJuZy1jb250YWluZXIiLDQpLENlKCkoKSx5ZSgxMCwiZGl2Iiw1KSgxMSwiZGl2Iiw2KSgxMiwiaDMiLDcpLFllKDEzKSxDZSgpLHR0KDE0LENQdCw0LDAsImRpdiIsOCksdHQoMTUsRVB0LDQsMSwiZGl2Iiw5KSx0dCgxNixHUHQsMTAsNSwiZGl2IiwxMCksQ2UoKSgpKSwy'@;
put 'JmEmJihTZSg1KSxSZSgibmdNb2RlbCIsZi5yZXBvc2l0b3J5KSxTZSgxKSxSZSgibmdGb3JPZiIsZi5yZXBvc2l0b3JpZXMpLFNlKDIpLFJlKCJuZ0lmIixmLm1ldGFEYXRhTGlzdCksU2UoMSksUmUoIm5nRm9yT2YiLGYubWV0YURhdGFMaXN0KSxTZSg0KSxhcihmLmFzc29UeXBlU2VsZWN0'@;
put 'ZWQpLFNlKDEpLFJlKCJuZ0lmIiwhZi5sb2FkaW5nJiYhZi5tZXRhT2JqZWN0TGlzdCksU2UoMSksUmUoIm5nSWYiLGYubG9hZGluZyksU2UoMSksUmUoIm5nSWYiLGYuc2hvd0RhdGEpKX0sZGVwZW5kZW5jaWVzOltSYSwkaSxTMSxNMSxpcyxMMCxXYSx6YSxTNyx3NCxKZyxoSSxfNyxvWixw'@;
put 'SSxRZyxVc2UsZTUsdDUsazcsbjUsdjcsYjQsYjcsVVUsRGQsTGYscXNlLFJsLEpjLHNzZSxlbCxSZixtNyxwNyxLbGUscUQsWGxlLHFsZSxKbGUsZ1UsazQsek9dLHN0eWxlczpbIi5vYmplY3RzLWNvbFtfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0Ojc1dmg7b3ZlcmZsb3c6c2Nyb2xsO2Jv'@;
put 'cmRlcjoxcHggc29saWQgI2NjY2NjYztiYWNrZ3JvdW5kOndoaXRlO2JvcmRlci1yYWRpdXM6NHB4fS5jb2xzLWhlYWRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6I2ZhZmFmYTtib3JkZXI6MXB4IHNvbGlkICNjY2NjY2M7cGFkZGluZzoxMHB4O2Rpc3BsYXk6ZmxleH0ub2JqZWN0'@;
put 'LXRleHRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO21hcmdpbi1sZWZ0OjEwcHg7ZmxleDoxfS5yZXBvLWRyb3Bkb3duW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tcmlnaHQ6MTVw'@;
put 'eDttYXJnaW4tbGVmdDoxNXB4O21hcmdpbi1ib3R0b206MTBweH0uY2xyLWFjY29yZGlvbi10aXRsZVtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0uZmxvYXQtcmlnaHRbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowO2Zsb2F0OnJpZ2h0fS5mdWxsLXdpZHRoW19uZ2NvbnRlbnQt'@;
put 'JUNPTVAlXXt3aWR0aDoxMDAlfS5vYmplY3QtdXJpW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46NXB4IDAgMH0ub2JqZWN0LWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1sZWZ0OjNweDtwYWRkaW5nLXJpZ2h0OjNweH0ub2JqZWN0LWhlYWRlcltfbmdjb250ZW50LSVDT01Q'@;
put 'JV06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZDhlM2U5O2JvcmRlci1yYWRpdXM6M3B4fS5kYXRhZ3JpZC1ob3N0W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OnVuc2V0IWltcG9ydGFudH0uY2FyZFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDowO2ZsZXg6MTtkaXNwbGF5OmZs'@;
put 'ZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5jb250ZW50LWFyZWFbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVyZW0haW1wb3J0YW50O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Il19KSxsLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmwsZmFjdG9yeTpsLlx1MDI3NWZh'@;
put 'Yyxwcm92aWRlZEluOiJyb290In0pLGx9KSgpO2Z1bmN0aW9uICRQdChsLGMpezEmbCYmdG4oMCwiY2xyLWljb24iLDEyKX1mdW5jdGlvbiBLUHQobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJjbHItaWNvbiIsMTMpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtVdChhKTtjb25zdCBk'@;
put 'PUdlKDIpO3JldHVybiBkLnJvbGVTZWFyY2g9IiIsWnQoZC5yb2xlTGlzdE9uRmlsdGVyKCkpfSksQ2UoKX19ZnVuY3Rpb24gcVB0KGwsYyl7aWYoMSZsKXtjb25zdCBhPVpuKCk7eWUoMCwiY2xyLXRyZWUtbm9kZSIsNikoMSwiZGl2Iiw3KSgyLCJpbnB1dCIsOCw5KSxFdCgibmdNb2RlbENo'@;
put 'YW5nZSIsZnVuY3Rpb24oZCl7cmV0dXJuIFV0KGEpLFp0KEdlKCkucm9sZVNlYXJjaD1kKX0pKCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gVXQoYSksWnQoR2UoKS5yb2xlTGlzdE9uRmlsdGVyKCkpfSksQ2UoKSx0dCg0LCRQdCwxLDAsImNsci1pY29uIiwxMCksdHQoNSxLUHQsMSwwLCJj'@;
put 'bHItaWNvbiIsMTEpLENlKCkoKX1pZigyJmwpe2NvbnN0IGE9UWkoMyksZj1HZSgpO1NlKDIpLFJlKCJuZ01vZGVsIixmLnJvbGVTZWFyY2gpLFNlKDIpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxTZSgxKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIFhQdChs'@;
put 'LGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImNsci10cmVlLW5vZGUiLDE1KSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7VXQoYSk7Y29uc3QgZD1HZSgpLiRpbXBsaWNpdDtyZXR1cm4gWnQoR2UoKS5yb2xlT25DbGljayhkKSl9KSx5ZSgxLCJwIiwxNiksdG4oMiwiY2xyLWljb24iLDE3'@;
put 'KSxZZSgzKSxDZSgpKCl9aWYoMiZsKXtjb25zdCBhPUdlKCkuJGltcGxpY2l0LGY9R2UoKTtncigidGFibGUtYWN0aXZlIixhLlJPTEVVUkk9PT1mLnJvbGVVcmkpLFNlKDMpLHdyKCIgIixhLlJPTEVOQU1FLCIgIil9fWZ1bmN0aW9uIEpQdChsLGMpe2lmKDEmbCYmKFdyKDApLHR0KDEsWFB0'@;
put 'LDQsMywiY2xyLXRyZWUtbm9kZSIsMTQpLEdyKCkpLDImbCl7Y29uc3QgYT1jLiRpbXBsaWNpdDtTZSgxKSxSZSgibmdJZiIsIWEuaGlkZGVuKX19ZnVuY3Rpb24gUVB0KGwsYyl7MSZsJiYoeWUoMCwiZGl2IiwxOCkoMSwic3BhbiIsMTkpLFllKDIsIiBMb2FkaW5nLi4uICIpLENlKCkoKSl9'@;
put 'ZnVuY3Rpb24gZUZ0KGwsYyl7MSZsJiYoeWUoMCwiaDUiKSxZZSgxLCJObyBNZW1iZXJzIFByZXNlbnQiKSxDZSgpKX1mdW5jdGlvbiB0RnQobCxjKXtpZigxJmwmJih5ZSgwLCJ0ciIsMzIpKDEsInRkIiwzMCksWWUoMiksQ2UoKSx5ZSgzLCJ0ZCIsMzApLFllKDQpLENlKCkseWUoNSwidGQi'@;
put 'LDMwKSxZZSg2KSxDZSgpLHllKDcsInRkIiwzMCksWWUoOCksQ2UoKSgpKSwyJmwpe2NvbnN0IGE9Yy4kaW1wbGljaXQ7UmUoInJvdXRlckxpbmsiLCIvdmlldy91c2VybmF2L3VzZXJzLyIrYS5VUklNRU0pLFNlKDIpLGFyKGEuTUVNQkVSTkFNRSksU2UoMiksYXIoYS5FTUFJTCksU2UoMiks'@;
put 'YXIoYS5NRU1CRVJDUkVBVEVEKSxTZSgyKSxhcihhLk1FTUJFUlVQREFURUQpfX1mdW5jdGlvbiBuRnQobCxjKXtpZigxJmwmJih5ZSgwLCJ0YWJsZSIsMjgpKDEsInRoZWFkIikoMiwidHIiKSgzLCJ0ZCIsMjkpKDQsImIiKSxZZSg1LCJOQU1FIiksQ2UoKSgpLHllKDYsInRkIiwyOSkoNywi'@;
put 'YiIpLFllKDgsIkVNQUlMIiksQ2UoKSgpLHllKDksInRkIiwyOSkoMTAsImIiKSxZZSgxMSwiQ1JFQVRFRCIpLENlKCkoKSx5ZSgxMiwidGQiLDMwKSgxMywiYiIpLFllKDE0LCJVUERBVEVEIiksQ2UoKSgpKCkoKSx5ZSgxNSwidGJvZHkiKSx0dCgxNix0RnQsOSw1LCJ0ciIsMzEpLENlKCko'@;
put 'KSksMiZsKXtjb25zdCBhPUdlKDIpO1NlKDE2KSxSZSgibmdGb3JPZiIsYS5yb2xlTWVtYmVycyl9fWZ1bmN0aW9uIHJGdChsLGMpezEmbCYmKHllKDAsImg1IiksWWUoMSwiTm8gR3JvdXBzIFByZXNlbnQgISIpLENlKCkpfWZ1bmN0aW9uIGlGdChsLGMpe2lmKDEmbCYmKHllKDAsInRyIiwz'@;
put 'MikoMSwidGQiLDMwKSxZZSgyKSxDZSgpLHllKDMsInRkIiwzMCksWWUoNCksQ2UoKSx5ZSg1LCJ0ZCIsMzApLFllKDYpLENlKCkseWUoNywidGQiLDMwKSxZZSg4KSxDZSgpKCkpLDImbCl7Y29uc3QgYT1jLiRpbXBsaWNpdDtSZSgicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvZ3JvdXBz'@;
put 'LyIrYS5VUklNRU0pLFNlKDIpLGFyKGEuTUVNQkVSTkFNRSksU2UoMiksYXIoYS5FTUFJTCksU2UoMiksYXIoYS5NRU1CRVJDUkVBVEVEKSxTZSgyKSxhcihhLk1FTUJFUlVQREFURUQpfX1mdW5jdGlvbiBvRnQobCxjKXtpZigxJmwmJih5ZSgwLCJ0YWJsZSIsMjgpKDEsInRoZWFkIikoMiwi'@;
put 'dHIiKSgzLCJ0ZCIsMjkpKDQsImIiKSxZZSg1LCJOQU1FIiksQ2UoKSgpLHllKDYsInRkIiwyOSkoNywiYiIpLFllKDgsIkVNQUlMIiksQ2UoKSgpLHllKDksInRkIiwyOSkoMTAsImIiKSxZZSgxMSwiQ1JFQVRFRCIpLENlKCkoKSx5ZSgxMiwidGQiLDMwKSgxMywiYiIpLFllKDE0LCJVUERB'@;
put 'VEVEIiksQ2UoKSgpKCkoKSx5ZSgxNSwidGJvZHkiKSx0dCgxNixpRnQsOSw1LCJ0ciIsMzEpLENlKCkoKSksMiZsKXtjb25zdCBhPUdlKDIpO1NlKDE2KSxSZSgibmdGb3JPZiIsYS5yb2xlR3JvdXBzKX19ZnVuY3Rpb24gYUZ0KGwsYyl7aWYoMSZsJiYoeWUoMCwiZGl2IikoMSwiZGl2Iiwy'@;
put 'MCkoMiwiZGl2IiwyMSkoMywidGFibGUiLDIyKSg0LCJ0Ym9keSIpKDUsInRyIikoNiwidGQiLDIzKSg3LCJwIiwyNCkoOCwiYiIpLFllKDkpLENlKCkoKSgpKCkseWUoMTAsInRyIikoMTEsInRkIiwyMykoMTIsImkiKSxZZSgxMyksQ2UoKSgpKCkoKSgpKCkoKSx5ZSgxNCwiZGl2IiwyMCko'@;
put 'MTUsImRpdiIsMjEpKDE2LCJkaXYiLDI1KSgxNywiZGl2IikoMTgsImgzIiksWWUoMTkpLENlKCksdHQoMjAsZUZ0LDIsMCwiaDUiLDUpLHllKDIxLCJkaXYiLDI2KSx0dCgyMixuRnQsMTcsMSwidGFibGUiLDI3KSxDZSgpKCksdG4oMjMsImhyIikseWUoMjQsImRpdiIpKDI1LCJoMyIpLFll'@;
put 'KDI2KSxDZSgpLHR0KDI3LHJGdCwyLDAsImg1Iiw1KSx5ZSgyOCwiZGl2IiwyNiksdHQoMjksb0Z0LDE3LDEsInRhYmxlIiwyNyksQ2UoKSgpLHRuKDMwLCJiciIpLENlKCkoKSgpKCkpLDImbCl7Y29uc3QgYT1HZSgpO1NlKDkpLGFyKGEucm9sZU5hbWUpLFNlKDQpLGFyKGEucm9sZURlc2Mp'@;
put 'LFNlKDYpLHdyKCJNRU1CRVJTICgiLGEucm9sZU1lbWJlcnNDb3VudCwiKSIpLFNlKDEpLFJlKCJuZ0lmIiwwPT1hLnJvbGVNZW1iZXJzQ291bnQpLFNlKDIpLFJlKCJuZ0lmIiwwIT1hLnJvbGVNZW1iZXJzQ291bnQpLFNlKDQpLHdyKCJHcm91cHMgKCIsYS5yb2xlR3JvdXBzQ291bnQsIiki'@;
put 'KSxTZSgxKSxSZSgibmdJZiIsMD09YS5yb2xlR3JvdXBzQ291bnQpLFNlKDIpLFJlKCJuZ0lmIiwwIT1hLnJvbGVHcm91cHNDb3VudCl9fWxldCBpdmU9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhLGYsZCxoLG0pe3RoaXMuc2FzU2VydmljZT1hLHRoaXMuaGVscGVyU2VydmljZT1mLHRo'@;
put 'aXMucm91dGVyPWQsdGhpcy5sb2NhdGlvbj1oLHRoaXMucm91dGU9bSx0aGlzLnJvbGVTZWFyY2g9IiIsdGhpcy5yb2xlVXJpPSIiLHRoaXMucm9sZU5hbWU9IiIsdGhpcy5yb2xlRGVzYz0iIix0aGlzLnBhcmFtUHJlc2VudD0hMSx0aGlzLnBhcmFtVVJJPSIiLHRoaXMubG9hZGluZz0hMX1u'@;
put 'Z09uSW5pdCgpe0puLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uPSJ2aWV3L3VzZXJuYXYvcm9sZXMiLHZvaWQgMCE9PXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnVyaSYmKHRoaXMucGFyYW1QcmVzZW50PSEwLHRoaXMucGFyYW1VUkk9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJp'@;
put 'KSxKbi51c2VybmF2LnJvbGVMaXN0JiYhdGhpcy5wYXJhbVByZXNlbnQ/KHRoaXMucm9sZXM9Sm4udXNlcm5hdi5yb2xlTGlzdCx0aGlzLnJvbGVTZWFyY2g9Sm4udXNlcm5hdi5yb2xlU2VhcmNoKTp2b2lkIDA9PT1Kbi51c2VybmF2LnJvbGVMaXN0Pyh0aGlzLmxvYWRpbmc9ITAsdGhpcy5z'@;
put 'YXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcnJvbGVzIixudWxsKS50aGVuKGE9PntpZih0aGlzLmxvYWRpbmc9ITEsdGhpcy5yb2xlcz1hLnJvbGVzLEpuLnVzZXJuYXYucm9sZUxpc3Q9YS5yb2xlcyx0aGlzLnBhcmFtUHJlc2VudCYmdm9pZCAwIT09dGhpcy5yb2xlcyl7bGV0IGY9'@;
put 'dGhpcy5maW5kUm9sZSh0aGlzLnJvbGVzLHRoaXMucGFyYW1VUkkpOyExIT09ZiYmKHRoaXMubG9hZGluZz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VybWVtYmVyc2J5cm9sZSIse2l3YW50Olt7cm9sZWlkOnRoaXMucGFyYW1VUkl9XX0pLnRoZW4oaD0+e3RoaXMu'@;
put 'bG9hZGluZz0hMSx0aGlzLnJvbGVNZW1iZXJzPWguc2FzbWVtYmVycyx0aGlzLnJvbGVNZW1iZXJzQ291bnQ9aC5zYXNtZW1iZXJzLmxlbmd0aCx0aGlzLnJvbGVHcm91cHM9aC5zYXNncm91cHMsdGhpcy5yb2xlR3JvdXBzQ291bnQ9aC5zYXNncm91cHMubGVuZ3RoLHRoaXMucm9sZVVyaT1m'@;
put 'LlJPTEVVUkksdGhpcy5yb2xlTmFtZT1mLlJPTEVOQU1FLHRoaXMucm9sZURlc2M9Zi5ST0xFREVTQ30pKX19KSk6KHRoaXMucm9sZXM9Sm4udXNlcm5hdi5yb2xlTGlzdCx0aGlzLnJvbGVTZWFyY2g9Sm4udXNlcm5hdi5yb2xlU2VhcmNoLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2Vy'@;
put 'bmF2L3VzZXJyb2xlcyIsbnVsbCkudGhlbihhPT57aWYodGhpcy5yb2xlcz1hLnJvbGVzLEpuLnVzZXJuYXYucm9sZUxpc3Q9YS5yb2xlcyx0aGlzLnBhcmFtUHJlc2VudCYmdm9pZCAwIT09dGhpcy5yb2xlcyl7bGV0IGY9dGhpcy5maW5kUm9sZSh0aGlzLnJvbGVzLHRoaXMucGFyYW1VUkkp'@;
put 'OyExIT09ZiYmKHRoaXMubG9hZGluZz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VybWVtYmVyc2J5cm9sZSIse2l3YW50Olt7cm9sZWlkOnRoaXMucGFyYW1VUkl9XX0pLnRoZW4oaD0+e3RoaXMubG9hZGluZz0hMSx0aGlzLnJvbGVNZW1iZXJzPWguc2FzbWVtYmVy'@;
put 'cyx0aGlzLnJvbGVNZW1iZXJzQ291bnQ9aC5zYXNtZW1iZXJzLmxlbmd0aCx0aGlzLnJvbGVHcm91cHM9aC5zYXNncm91cHMsdGhpcy5yb2xlR3JvdXBzQ291bnQ9aC5zYXNncm91cHMubGVuZ3RoLHRoaXMucm9sZVVyaT1mLlJPTEVVUkksdGhpcy5yb2xlTmFtZT1mLlJPTEVOQU1FLHRoaXMu'@;
put 'cm9sZURlc2M9Zi5ST0xFREVTQ30pKX19KSl9cm9sZUxpc3RPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5yb2xlcyx0aGlzLnJvbGVTZWFyY2gsIlJPTEVOQU1FIiksSm4udXNlcm5hdi5yb2xlU2VhcmNoPXRoaXMucm9sZVNlYXJjaH1yb2xlT25D'@;
put 'bGljayhhKXt0aGlzLmxvYWRpbmc9ITA7bGV0IGY9dGhpcy5yb3V0ZXIudXJsO3RoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKHRoaXMucGFyYW1QcmVzZW50P2Yuc2xpY2UoMCxmLmxhc3RJbmRleE9mKCIvIikpKyIvIitlbmNvZGVVUkkoYS5ST0xFVVJJKTpmKyIvIitlbmNvZGVVUkkoYS5S'@;
put 'T0xFVVJJKSksdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcm1lbWJlcnNieXJvbGUiLHtpd2FudDpbe3JvbGVpZDphLlJPTEVVUkl9XX0pLnRoZW4oaD0+e3RoaXMubG9hZGluZz0hMSx0aGlzLnJvbGVNZW1iZXJzPWguc2FzbWVtYmVycyx0aGlzLnJvbGVNZW1iZXJzQ291'@;
put 'bnQ9aC5zYXNtZW1iZXJzLmxlbmd0aCx0aGlzLnJvbGVHcm91cHM9aC5zYXNncm91cHMsdGhpcy5yb2xlR3JvdXBzQ291bnQ9aC5zYXNncm91cHMubGVuZ3RoLHRoaXMucm9sZVVyaT1hLlJPTEVVUkksdGhpcy5yb2xlTmFtZT1hLlJPTEVOQU1FLHRoaXMucm9sZURlc2M9YS5ST0xFREVTQ30p'@;
put 'fWZpbmRSb2xlKGEsZil7bGV0IGQ9ITE7cmV0dXJuIGEuZm9yRWFjaChoPT57aC5ST0xFVVJJPT09ZiYmKGQ9aCl9KSxkfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChwbCkscnQoUHUpLHJ0KExhKSxydChnZCkscnQodHUpKX0sbC5cdTAyNzVj'@;
put 'bXA9a3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siYXBwLXJvbGUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjcsdmFyczo0LGNvbnN0czpbWzEsInNpZGViYXItaGVpZ2h0Il0sWyJjbGFzcyIsInNlYXJjaC1ub2RlIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdG'@;
put 'b3JPZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbImNsYXNzIiwibG9hZGluZ1NwaW5uZXIiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiRmlsdGVyIGJ5IFJvbGVzIiwi'@;
put 'bmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSIsImtleXVwIl0sWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsi'@;
put 'c2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsInRhYmxlLWFjdGl2ZSIsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsaWNrIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwibGlzdC1wYWRkaW5nIl0sWyJzaGFwZSIsImJsb2Nrcy1ncm91cCJdLFsxLCJs'@;
put 'b2FkaW5nU3Bpbm5lciJdLFsxLCJzcGlubmVyIl0sWzEsImNsci1yb3ciXSxbMSwiY2xyLWNvbC04Il0sWzEsInRhYmxlIiwicm9sZS1pbmZvIl0sWzEsImxlZnQiXSxbMSwicm9sZS1pbmZvLXRleHQiXSxbMSwiY2FyZCIsInJvbGUtZGF0YSJdLFsxLCJ0YWJsZS1jb250YWluZXIiXSxbImNs'@;
put 'YXNzIiwidGFibGUgbWVtYmVyLXRhYmxlIiw0LCJuZ0lmIl0sWzEsInRhYmxlIiwibWVtYmVyLXRhYmxlIl0sWzEsIndpZHRoLTI1Il0sWzEsIiJdLFszLCJyb3V0ZXJMaW5rIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywicm91dGVyTGluayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGYpezEm'@;
put 'YSYmKHllKDAsImFwcC1zaWRlYmFyIiwwKSgxLCJjbHItdHJlZSIpLHR0KDIscVB0LDYsMywiY2xyLXRyZWUtbm9kZSIsMSksdHQoMyxKUHQsMiwxLCJuZy1jb250YWluZXIiLDIpLENlKCkoKSx5ZSg0LCJkaXYiLDMpLHR0KDUsUVB0LDMsMCwiZGl2Iiw0KSx0dCg2LGFGdCwzMSw4LCJkaXYi'@;
put 'LDUpLENlKCkpLDImYSYmKFNlKDIpLFJlKCJuZ0lmIixmLnJvbGVzKSxTZSgxKSxSZSgibmdGb3JPZiIsZi5yb2xlcyksU2UoMiksUmUoIm5nSWYiLGYubG9hZGluZyksU2UoMSksUmUoIm5nSWYiLGYucm9sZU1lbWJlcnMmJiFmLmxvYWRpbmcpKX0sZGVwZW5kZW5jaWVzOltSYSwkaSxpcyxX'@;
put 'YSx6YSxJMCxEZCxMZixSbCxSZixrNF0sc3R5bGVzOlsiLnNpZGViYXItaGVpZ2h0W19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJX0ucm9sZS1pbmZvLXRleHRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lO2ZvbnQtc2l6ZToyMHB4fS5yb2xlLWluZm9bX25nY29udGVu'@;
put 'dC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTtib3JkZXI6MXB4IHNvbGlkICNhN2E3YTc7Ym9yZGVyLXJhZGl1czozcHg7Ym94LXNoYWRvdzowIDJweCA1cHggI2RhZDdkN30ucm9sZS1pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRkW19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0'@;
put 'LWFsaWduOmNlbnRlcn0ucm9sZS1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjk7Ym9yZGVyOjFweCBzb2xpZCAjYTdhN2E3O2JvcmRlci1yYWRpdXM6M3B4O2JveC1zaGFkb3c6MCAycHggNXB4ICNkYWQ3ZDd9LnJvbGUtZGF0YVtfbmdjb250ZW50LSVD'@;
put 'T01QJV17bWluLWhlaWdodDp1bnNldH0ucm9sZS1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnJvbGUtZGF0YVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpjZW50ZXJ9Lm1lbWJlci10YWJsZVtf'@;
put 'bmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZjlmOWY5O3dpZHRoOjEwMCV9Lm1lbWJlci10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICB0aGVhZFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZGFkYWRhfS5tZW1iZXItdGFibGVbX25nY29udGVudC0l'@;
put 'Q09NUCVdICAgdGJvZHlbX25nY29udGVudC0lQ09NUCVdICAgdHJbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2U2ZTZlNjtjdXJzb3I6cG9pbnRlcn0udGFibGUtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdy15OnNjcm9sbDttYXgtaGVp'@;
put 'Z2h0OjcwMHB4fUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2OHB4KXsucm9sZS1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4taGVpZ2h0OnVuc2V0IWltcG9ydGFudH19Il19KSxsfSkoKSxsRnQ9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3Rvcigpe31uZ09uSW5pdCgpe319cmV0'@;
put 'dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1Y21wPWtyKHt0eXBlOmwsc2VsZWN0b3JzOltbImFwcC11c2VybmF2LXJvdXRlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5j'@;
put 'dGlvbihhLGYpezEmYSYmdG4oMCwicm91dGVyLW91dGxldCIpfSxkZXBlbmRlbmNpZXM6W3h2XX0pLGx9KSgpLHNGdD0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKCl7fW5nT25Jbml0KCl7fW5nT25EZXN0cm95KCl7fX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5l'@;
put 'dyhhfHxsKX0sbC5cdTAyNzVjbXA9a3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siYXBwLXZpZXctcm91dGUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZil7MSZhJiZ0bigwLCJyb3V0ZXItb3V0bGV0Iil9LGRl'@;
put 'cGVuZGVuY2llczpbeHZdfSksbH0pKCk7ZnVuY3Rpb24gdUZ0KGwsYyl7MSZsJiZ0bigwLCJjbHItaWNvbiIsMTIpfWZ1bmN0aW9uIGNGdChsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImNsci1pY29uIiwxMyksRXQoImNsaWNrIixmdW5jdGlvbigpe1V0KGEpO2NvbnN0IGQ9R2Uo'@;
put 'Mik7cmV0dXJuIGQudXNlclNlYXJjaD0iIixadChkLnVzZXJMaXN0T25GaWx0ZXIoKSl9KSxDZSgpfX1mdW5jdGlvbiBmRnQobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJjbHItdHJlZS1ub2RlIiw2KSgxLCJkaXYiLDcpKDIsImlucHV0Iiw4LDkpLEV0KCJuZ01vZGVsQ2hhbmdl'@;
put 'IixmdW5jdGlvbihkKXtyZXR1cm4gVXQoYSksWnQoR2UoKS51c2VyU2VhcmNoPWQpfSkoImtleXVwIixmdW5jdGlvbigpe3JldHVybiBVdChhKSxadChHZSgpLnVzZXJMaXN0T25GaWx0ZXIoKSl9KSxDZSgpLHR0KDQsdUZ0LDEsMCwiY2xyLWljb24iLDEwKSx0dCg1LGNGdCwxLDAsImNsci1p'@;
put 'Y29uIiwxMSksQ2UoKSgpfWlmKDImbCl7Y29uc3QgYT1RaSgzKSxmPUdlKCk7U2UoMiksUmUoIm5nTW9kZWwiLGYudXNlclNlYXJjaCksU2UoMiksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLFNlKDEpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gZEZ0KGwsYyl7'@;
put 'aWYoMSZsKXtjb25zdCBhPVpuKCk7eWUoMCwiY2xyLXRyZWUtbm9kZSIsMTUpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtVdChhKTtjb25zdCBkPUdlKCkuJGltcGxpY2l0O3JldHVybiBadChHZSgpLnVzZXJPbkNsaWNrKGQpKX0pLHllKDEsInAiLDE2KSx0bigyLCJjbHItaWNvbiIsMTcpLFll'@;
put 'KDMpLENlKCkoKX1pZigyJmwpe2NvbnN0IGE9R2UoKS4kaW1wbGljaXQsZj1HZSgpO2dyKCJ0YWJsZS1hY3RpdmUiLChudWxsPT1mLnVzZXJJbmZvP251bGw6Zi51c2VySW5mby5VUkkpPT09YS5VUkkpLFNlKDMpLHdyKCIgIixhLk5BTUUsIiAiKX19ZnVuY3Rpb24gaEZ0KGwsYyl7aWYoMSZs'@;
put 'JiYoV3IoMCksdHQoMSxkRnQsNCwzLCJjbHItdHJlZS1ub2RlIiwxNCksR3IoKSksMiZsKXtjb25zdCBhPWMuJGltcGxpY2l0O1NlKDEpLFJlKCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiBwRnQobCxjKXsxJmwmJih5ZSgwLCJkaXYiLDE4KSgxLCJzcGFuIiwxOSksWWUoMiwiIExvYWRp'@;
put 'bmcuLi4gIiksQ2UoKSgpKX1mdW5jdGlvbiBtRnQobCxjKXtpZigxJmwmJihXcigwKSx5ZSgxLCJ0ciIpKDIsInRkIiwyNyksWWUoMywiIE1ldGFkYXRhIENyZWF0ZWQ6ICIpLHllKDQsImIiKSxZZSg1KSxDZSgpKCkoKSx5ZSg2LCJ0ciIpKDcsInRkIiwyNyksWWUoOCwiIE1ldGFkYXRhIFVw'@;
put 'ZGF0ZWQ6ICIpLHllKDksImIiKSxZZSgxMCksQ2UoKSgpKCksR3IoKSksMiZsKXtjb25zdCBhPUdlKDMpO1NlKDUpLGFyKGEudXNlckluZm8uTUVUQURBVEFDUkVBVEVEKSxTZSg1KSxhcihhLnVzZXJJbmZvLk1FVEFEQVRBVVBEQVRFRCl9fWZ1bmN0aW9uIGdGdChsLGMpe2lmKDEmbCYmKHll'@;
put 'KDAsImRpdiIsMjEpKDEsImRpdiIsMjIpKDIsInRhYmxlIiwyNikoMywidGJvZHkiKSg0LCJ0ciIpKDUsInRkIiwyNykoNiwicCIsMjgpKDcsImIiKSxZZSg4KSxDZSgpKCkoKSgpLHllKDksInRyIikoMTAsInRkIiwyNykoMTEsInAiLDI4KSgxMiwiYiIpLFllKDEzKSxDZSgpKCkoKSgpLHR0'@;
put 'KDE0LG1GdCwxMSwyLCJuZy1jb250YWluZXIiLDUpLENlKCkoKSgpKCkpLDImbCl7Y29uc3QgYT1HZSgyKTtTZSg4KSxhcihhLnVzZXJJbmZvLk5BTUUpLFNlKDUpLGFyKGEudXNlckluZm8uRElTUExBWU5BTUUpLFNlKDEpLFJlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUu'@;
put 'U2FzOSl9fWZ1bmN0aW9uIHZGdChsLGMpe2lmKDEmbCYmKHllKDAsImRpdiIsMjEpKDEsImRpdiIsMjIpKDIsInRhYmxlIiwyNikoMywidGJvZHkiKSg0LCJ0ciIpKDUsInRkIiwyNykoNiwicCIsMjgpKDcsImIiKSxZZSg4KSxDZSgpKCkoKSgpLHllKDksInRyIikoMTAsInRkIiwyNyksWWUo'@;
put 'MTEsIiBVc2VyIElEOiAiKSx5ZSgxMiwiYiIpLFllKDEzKSxDZSgpKCkoKSx5ZSgxNCwidHIiKSgxNSwidGQiLDI3KSxZZSgxNiwiIFVzZXIgcHJvdmlkZXIgSUQ6ICIpLHllKDE3LCJiIiksWWUoMTgpLENlKCkoKSgpKCkoKSgpKCkpLDImbCl7Y29uc3QgYT1HZSgyKTtTZSg4KSxhcihhLnVz'@;
put 'ZXJJbmZvLk5BTUUpLFNlKDUpLGFyKGEudXNlckluZm8uVVJJKSxTZSg1KSxhcihhLnVzZXJJbmZvLlBST1ZJREVSKX19ZnVuY3Rpb24geUZ0KGwsYyl7MSZsJiYoeWUoMCwiaDUiKSxZZSgxLCJObyBFbWFpbHMgUHJlc2VudCIpLENlKCkpfWZ1bmN0aW9uIGJGdChsLGMpe2lmKDEmbCYmKHll'@;
put 'KDAsInRyIikoMSwidGQiLDMxKSxZZSgyKSxDZSgpLHllKDMsInRkIiwzMSksWWUoNCksQ2UoKSgpKSwyJmwpe2NvbnN0IGE9Yy4kaW1wbGljaXQ7U2UoMiksYXIoYS5FTUFJTCksU2UoMiksYXIoYS5UWVBFKX19ZnVuY3Rpb24gX0Z0KGwsYyl7aWYoMSZsJiYoeWUoMCwidGFibGUiLDI5KSgx'@;
put 'LCJ0aGVhZCIpKDIsInRyIikoMywidGQiLDMwKSg0LCJiIiksWWUoNSwiRU1BSUwiKSxDZSgpKCkseWUoNiwidGQiLDMxKSg3LCJiIiksWWUoOCwiVFlQRSIpLENlKCkoKSgpKCkseWUoOSwidGJvZHkiKSx0dCgxMCxiRnQsNSwyLCJ0ciIsMiksQ2UoKSgpKSwyJmwpe2NvbnN0IGE9R2UoMyk7'@;
put 'U2UoMTApLFJlKCJuZ0Zvck9mIixhLnVzZXJFbWFpbHMpfX1mdW5jdGlvbiB3RnQobCxjKXtpZigxJmwmJih5ZSgwLCJkaXYiKSgxLCJoMyIpLFllKDIpLENlKCksdHQoMyx5RnQsMiwwLCJoNSIsNSkseWUoNCwiZGl2IiwyNCksdHQoNSxfRnQsMTEsMSwidGFibGUiLDI1KSxDZSgpKCkpLDIm'@;
put 'bCl7Y29uc3QgYT1HZSgyKTtTZSgyKSx3cigiRU1BSUxTICgiLGEudXNlckVtYWlsc0NvdW50fHwiMCIsIikiKSxTZSgxKSxSZSgibmdJZiIsMD09YS51c2VyRW1haWxzQ291bnQpLFNlKDIpLFJlKCJuZ0lmIiwwIT1hLnVzZXJFbWFpbHNDb3VudCl9fWZ1bmN0aW9uIENGdChsLGMpezEmbCYm'@;
put 'dG4oMCwiaHIiKX1mdW5jdGlvbiBTRnQobCxjKXsxJmwmJih5ZSgwLCJoNSIpLFllKDEsIk5vIEdyb3VwcyBQcmVzZW50IiksQ2UoKSl9ZnVuY3Rpb24gTUZ0KGwsYyl7aWYoMSZsJiYoeWUoMCwidGQiLDMzKSxZZSgxKSxDZSgpKSwyJmwpe2NvbnN0IGE9R2UoKS4kaW1wbGljaXQ7UmUoInJv'@;
put 'dXRlckxpbmsiLCIvdmlldy91c2VybmF2L2dyb3Vwcy8iK2EuVVJJKSxTZSgxKSx3cigiICIsYS5HUk9VUE5BTUUsIiAiKX19ZnVuY3Rpb24ga0Z0KGwsYyl7aWYoMSZsJiYoV3IoMCkseWUoMSwidGQiLDMzKSxZZSgyKSxDZSgpLEdyKCkpLDImbCl7Y29uc3QgYT1HZSgpLiRpbXBsaWNpdDtT'@;
put 'ZSgxKSxSZSgicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvZ3JvdXBzLyIrKGEuR1JPVVBVUkl8fGEuVVJJKSksU2UoMSksd3IoIiAiLGEuR1JPVVBOQU1FLCIgIil9fWZ1bmN0aW9uIEVGdChsLGMpe2lmKDEmbCYmKHllKDAsInRyIiksdHQoMSxNRnQsMiwyLCJ0ZCIsMzIpLHR0KDIsa0Z0'@;
put 'LDMsMiwibmctY29udGFpbmVyIiw1KSxDZSgpKSwyJmwpe2NvbnN0IGE9R2UoMyk7U2UoMSksUmUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXNWaXlhKSxTZSgxKSxSZSgibmdJZiIsYS5zZXJ2ZXJUeXBlIT09YS5TZXJ2ZXJUeXBlLlNhc1ZpeWEpfX1mdW5jdGlvbiB4'@;
put 'RnQobCxjKXtpZigxJmwmJih5ZSgwLCJ0YWJsZSIsMjkpKDEsInRib2R5IiksdHQoMixFRnQsMywyLCJ0ciIsMiksQ2UoKSgpKSwyJmwpe2NvbnN0IGE9R2UoMik7U2UoMiksUmUoIm5nRm9yT2YiLGEudXNlckdyb3Vwcyl9fWZ1bmN0aW9uIEFGdChsLGMpezEmbCYmdG4oMCwiaHIiKX1mdW5j'@;
put 'dGlvbiBURnQobCxjKXsxJmwmJih5ZSgwLCJoNSIpLFllKDEsIk5vIFJvbGVzIFByZXNlbnQiKSxDZSgpKX1mdW5jdGlvbiBPRnQobCxjKXtpZigxJmwmJih5ZSgwLCJ0ciIpKDEsInRkIiwzNCksWWUoMiksQ2UoKSgpKSwyJmwpe2NvbnN0IGE9Yy4kaW1wbGljaXQsZj1HZSg0KTtTZSgxKSxS'@;
put 'ZSgicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvcm9sZXMvIitmLmdldFJvbGVVUkkoYS5ST0xFVVJJKSksU2UoMSksd3IoIiAiLGEuUk9MRU5BTUUsIiAiKX19ZnVuY3Rpb24gREZ0KGwsYyl7aWYoMSZsJiYoeWUoMCwidGFibGUiLDI5KSgxLCJ0Ym9keSIpLHR0KDIsT0Z0LDMsMiwidHIi'@;
put 'LDIpLENlKCkoKSksMiZsKXtjb25zdCBhPUdlKDMpO1NlKDIpLFJlKCJuZ0Zvck9mIixhLnVzZXJSb2xlcyl9fWZ1bmN0aW9uIElGdChsLGMpe2lmKDEmbCYmKHllKDAsImRpdiIpKDEsImgzIiksWWUoMiksQ2UoKSx0dCgzLFRGdCwyLDAsImg1Iiw1KSx5ZSg0LCJkaXYiLDI0KSx0dCg1LERG'@;
put 'dCwzLDEsInRhYmxlIiwyNSksQ2UoKSgpKSwyJmwpe2NvbnN0IGE9R2UoMik7U2UoMiksd3IoIlJPTEVTICgiLGEudXNlclJvbGVzQ291bnR8fCIwIiwiKSIpLFNlKDEpLFJlKCJuZ0lmIiwwPT1hLnVzZXJSb2xlc0NvdW50KSxTZSgyKSxSZSgibmdJZiIsMCE9YS51c2VyUm9sZXNDb3VudCl9'@;
put 'fWZ1bmN0aW9uIFJGdChsLGMpezEmbCYmdG4oMCwiaHIiKX1mdW5jdGlvbiBMRnQobCxjKXsxJmwmJih5ZSgwLCJoNSIpLFllKDEsIk5vIExvZ2lucyBQcmVzZW50IiksQ2UoKSl9ZnVuY3Rpb24gUEZ0KGwsYyl7aWYoMSZsJiYoeWUoMCwidHIiKSgxLCJ0ZCIsMzEpLFllKDIpLENlKCkseWUo'@;
put 'MywidGQiLDMxKSxZZSg0KSxDZSgpKCkpLDImbCl7Y29uc3QgYT1jLiRpbXBsaWNpdDtTZSgyKSxhcihhLkRPTUFJTiksU2UoMiksYXIoYS5VU0VSSUQpfX1mdW5jdGlvbiBGRnQobCxjKXtpZigxJmwmJih5ZSgwLCJ0YWJsZSIsMjkpKDEsInRoZWFkIikoMiwidHIiKSgzLCJ0ZCIsMzApKDQs'@;
put 'ImIiKSxZZSg1LCJET01BSU4iKSxDZSgpKCkseWUoNiwidGQiKSg3LCJiIiksWWUoOCwiVVNFUiBJRCIpLENlKCkoKSgpKCkseWUoOSwidGJvZHkiKSx0dCgxMCxQRnQsNSwyLCJ0ciIsMiksQ2UoKSgpKSwyJmwpe2NvbnN0IGE9R2UoMyk7U2UoMTApLFJlKCJuZ0Zvck9mIixhLnVzZXJMb2dp'@;
put 'bnMpfX1mdW5jdGlvbiBIRnQobCxjKXtpZigxJmwmJih5ZSgwLCJkaXYiKSgxLCJoMyIpLFllKDIpLENlKCksdHQoMyxMRnQsMiwwLCJoNSIsNSkseWUoNCwiZGl2IiwyNCksdHQoNSxGRnQsMTEsMSwidGFibGUiLDI1KSxDZSgpKCkpLDImbCl7Y29uc3QgYT1HZSgyKTtTZSgyKSx3cigiTE9H'@;
put 'SU5TICgiLGEudXNlckxvZ2luc0NvdW50fHwiMCIsIikiKSxTZSgxKSxSZSgibmdJZiIsMD09YS51c2VyTG9naW5zQ291bnQpLFNlKDIpLFJlKCJuZ0lmIiwwIT1hLnVzZXJMb2dpbnNDb3VudCl9fWZ1bmN0aW9uIE5GdChsLGMpe2lmKDEmbCYmKHllKDAsImRpdiIpLHR0KDEsZ0Z0LDE1LDMs'@;
put 'ImRpdiIsMjApLHR0KDIsdkZ0LDE5LDMsImRpdiIsMjApLHllKDMsImRpdiIsMjEpKDQsImRpdiIsMjIpKDUsImRpdiIsMjMpLHR0KDYsd0Z0LDYsMywiZGl2Iiw1KSx0dCg3LENGdCwxLDAsImhyIiw1KSx5ZSg4LCJkaXYiKSg5LCJoMyIpLFllKDEwKSxDZSgpLHR0KDExLFNGdCwyLDAsImg1'@;
put 'Iiw1KSx5ZSgxMiwiZGl2IiwyNCksdHQoMTMseEZ0LDMsMSwidGFibGUiLDI1KSxDZSgpKCksdHQoMTQsQUZ0LDEsMCwiaHIiLDUpLHR0KDE1LElGdCw2LDMsImRpdiIsNSksdHQoMTYsUkZ0LDEsMCwiaHIiLDUpLHR0KDE3LEhGdCw2LDMsImRpdiIsNSksdG4oMTgsImJyIiksQ2UoKSgpKCko'@;
put 'KSksMiZsKXtjb25zdCBhPUdlKCk7U2UoMSksUmUoIm5nSWYiLGEuc2VydmVyVHlwZSE9PWEuU2VydmVyVHlwZS5TYXNWaXlhKSxTZSgxKSxSZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhc1ZpeWEmJmEudXNlckluZm8pLFNlKDQpLFJlKCJuZ0lmIixhLnNlcnZlclR5'@;
put 'cGU9PT1hLlNlcnZlclR5cGUuU2FzOSksU2UoMSksUmUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KSxTZSgzKSx3cigiR1JPVVBTICgiLGEudXNlckdyb3Vwc0NvdW50fHwiMCIsIikiKSxTZSgxKSxSZSgibmdJZiIsMD09YS51c2VyR3JvdXBzQ291bnQpLFNlKDIp'@;
put 'LFJlKCJuZ0lmIiwwIT1hLnVzZXJHcm91cHNDb3VudCksU2UoMSksUmUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KSxTZSgxKSxSZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpLFNlKDEpLFJlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1h'@;
put 'LlNlcnZlclR5cGUuU2FzOSksU2UoMSksUmUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KX19bGV0IG92ZT0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKGEsZixkLGgsbSl7dGhpcy5oZWxwZXJTZXJ2aWNlPWEsdGhpcy5zYXNTZXJ2aWNlPWYsdGhpcy5yb3V0ZT1k'@;
put 'LHRoaXMubG9jYXRpb249aCx0aGlzLnJvdXRlcj1tLHRoaXMubG9hZGluZz0hMSx0aGlzLnVzZXJTZWFyY2g9IiIsdGhpcy5wYXJhbVByZXNlbnQ9ITEsdGhpcy5wYXJhbU5hbWU9IiIsdGhpcy5zYXNqc0NvbmZpZz1uZXcgdjEuU0FTanNDb25maWcsdGhpcy5pc1ZpeWE9ITEsdGhpcy5zZXJ2'@;
put 'ZXJUeXBlPSIiLHRoaXMuU2VydmVyVHlwZT1YdS5ELHRoaXMuc2VydmVyVHlwZT10aGlzLnNhc1NlcnZpY2UuZ2V0U2VydmVyVHlwZSgpLHRoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksIlNBU1ZJWUEiPT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJU'@;
put 'eXBlJiYodGhpcy5pc1ZpeWE9ITApfW5nT25Jbml0KCl7aWYoSm4udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249InZpZXcvdXNlcm5hdi91c2VycyIsdm9pZCAwIT09dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpJiYodGhpcy5wYXJhbVByZXNlbnQ9ITAsdGhpcy5wYXJhbU5hbWU9dGhp'@;
put 'cy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpKSxKbi51c2VybmF2LnVzZXJMaXN0JiYhdGhpcy5wYXJhbVByZXNlbnQpdGhpcy51c2Vycz1Kbi51c2VybmF2LnVzZXJMaXN0LHRoaXMudXNlclNlYXJjaD1Kbi51c2VybmF2LnVzZXJTZWFyY2g7ZWxzZSBpZih2b2lkIDA9PT1Kbi51c2VybmF2'@;
put 'LnVzZXJMaXN0Pyh0aGlzLmxvYWRpbmc9ITAsdGhpcy5pc1ZpeWE/ZmV0Y2godGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwrIi9pZGVudGl0aWVzL3VzZXJzP2xpbWl0PTIwMDAiLHtoZWFkZXJzOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24ifX0pLnRoZW4oYT0+YS50ZXh0KCkpLnRoZW4o'@;
put 'YT0+e2xldCBkPUpTT04ucGFyc2UoYSkuaXRlbXMubWFwKGg9Pih7TkFNRTpoLm5hbWUsVVJJOmguaWQsUFJPVklERVI6aC5wcm92aWRlcklkfSkpO3RoaXMubG9hZGluZz0hMSx0aGlzLnVzZXJzPWQsSm4udXNlcm5hdi51c2VyTGlzdD1kfSk6dGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVz'@;
put 'ZXJuYXYvdXNlcm1lbWJlcnMiLG51bGwpLnRoZW4oYT0+e3RoaXMubG9hZGluZz0hMSx0aGlzLnVzZXJzPWEudXNlcnMsSm4udXNlcm5hdi51c2VyTGlzdD1hLnVzZXJzfSkpOih0aGlzLnVzZXJzPUpuLnVzZXJuYXYudXNlckxpc3QsdGhpcy51c2VyU2VhcmNoPUpuLnVzZXJuYXYudXNlclNl'@;
put 'YXJjaCksdGhpcy5wYXJhbVByZXNlbnQpaWYodGhpcy5sb2FkaW5nPSEwLHRoaXMuaXNWaXlhKXtsZXQgYT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmk7ZmV0Y2godGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwrIi9pZGVudGl0aWVzL3VzZXJzLyIrYSsiL21lbWJlcnNoaXBzP2xp'@;
put 'bWl0PTIwMDAiLHtoZWFkZXJzOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24ifX0pLnRoZW4oZj0+Zi50ZXh0KCkpLnRoZW4oZj0+e2xldCBkPUpTT04ucGFyc2UoZik7dGhpcy51c2VyRGF0YT1kLHRoaXMubG9hZGluZz0hMTtsZXQgaD1kLml0ZW1zLm1hcChtPT4oe0dST1VQTkFNRTptLm5h'@;
put 'bWUsVVJJOm0uaWR9KSk7dGhpcy51c2VyR3JvdXBzPWgsdGhpcy51c2VyR3JvdXBzQ291bnQ9aC5sZW5ndGgsdGhpcy51c2VycyYmKHRoaXMudXNlckluZm89dGhpcy51c2Vycy5maW5kKG09Pm0uVVJJPT09YSkpfSl9ZWxzZXtjb25zdCBhPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnVy'@;
put 'aTt0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VyZ3JvdXBzYnltZW1iZXIiLHtpd2FudDpbe3VyaTphfV19KS50aGVuKGQ9Pntzd2l0Y2godGhpcy5sb2FkaW5nPSExLHRoaXMuc2VydmVyVHlwZSl7Y2FzZSBYdS5ELlNhczk6dGhpcy51c2VySW5mbz1kLmluZm9bMF0sdGhp'@;
put 'cy51c2VyRW1haWxzPWQuZW1haWxzLHRoaXMudXNlckVtYWlsc0NvdW50PWQuZW1haWxzLmxlbmd0aCx0aGlzLnVzZXJSb2xlcz1kLnJvbGVzLHRoaXMudXNlclJvbGVzQ291bnQ9ZC5yb2xlcy5sZW5ndGgsdGhpcy51c2VyTG9naW5zPWQubG9naW5zLHRoaXMudXNlckxvZ2luc0NvdW50PWQu'@;
put 'bG9naW5zLmxlbmd0aDticmVhaztjYXNlIFh1LkQuU2FzanM6aWYodGhpcy51c2Vycyl0aGlzLnVzZXJJbmZvPXRoaXMudXNlcnMuZmluZChoPT5oLlVSST09PWEpO2Vsc2V7Y29uc3QgaD1kLmdyb3Vwc1swXTt0aGlzLnVzZXJJbmZvPXtVUkk6aC5JRCxOQU1FOmguTkFNRSxESVNQTEFZTkFN'@;
put 'RTpoLk5BTUV9fX10aGlzLnVzZXJEYXRhPWQsdGhpcy51c2VyR3JvdXBzPWQuZ3JvdXBzLHRoaXMudXNlckdyb3Vwc0NvdW50PWQuZ3JvdXBzLmxlbmd0aH0pfX11c2VyTGlzdE9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLnVzZXJzLHRoaXMudXNl'@;
put 'clNlYXJjaCwiTkFNRSIpLEpuLnVzZXJuYXYudXNlclNlYXJjaD10aGlzLnVzZXJTZWFyY2h9dXNlck9uQ2xpY2soYSl7dGhpcy5sb2FkaW5nPSEwO2xldCBmPXRoaXMucm91dGVyLnVybDt0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0aGlzLnBhcmFtUHJlc2VudD9mLnNsaWNlKDAsZi5s'@;
put 'YXN0SW5kZXhPZigiLyIpKSsiLyIrZW5jb2RlVVJJKGEuVVJJKTpmKyIvIitlbmNvZGVVUkkoYS5VUkkpKSx0aGlzLmlzVml5YT9mZXRjaCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCsiL2lkZW50aXRpZXMvdXNlcnMvIithLlVSSSsiL21lbWJlcnNoaXBzP2xpbWl0PTIwMDAiLHtoZWFk'@;
put 'ZXJzOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24ifX0pLnRoZW4oZD0+ZC50ZXh0KCkpLnRoZW4oZD0+e2xldCBoPUpTT04ucGFyc2UoZCk7dGhpcy51c2VyRGF0YT1oLHRoaXMubG9hZGluZz0hMTtsZXQgbT1oLml0ZW1zLm1hcChfPT4oe0dST1VQTkFNRTpfLm5hbWUsVVJJOl8uaWR9KSk7'@;
put 'dGhpcy51c2VyR3JvdXBzPW0sdGhpcy51c2VyR3JvdXBzQ291bnQ9bS5sZW5ndGgsdGhpcy51c2VycyYmKHRoaXMudXNlckluZm89dGhpcy51c2Vycy5maW5kKF89Pl8uVVJJPT09YS5VUkkpKX0pOnRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJncm91cHNieW1lbWJlciIs'@;
put 'e2l3YW50Olt7dXJpOmEuVVJJfV19KS50aGVuKGg9Pntzd2l0Y2godGhpcy5sb2FkaW5nPSExLHRoaXMuc2VydmVyVHlwZSl7Y2FzZSBYdS5ELlNhczk6dGhpcy51c2VySW5mbz1oLmluZm9bMF0sdGhpcy51c2VyRW1haWxzPWguZW1haWxzLHRoaXMudXNlckVtYWlsc0NvdW50PWguZW1haWxz'@;
put 'Lmxlbmd0aCx0aGlzLnVzZXJSb2xlcz1oLnJvbGVzLHRoaXMudXNlclJvbGVzQ291bnQ9aC5yb2xlcy5sZW5ndGgsdGhpcy51c2VyTG9naW5zPWgubG9naW5zLHRoaXMudXNlckxvZ2luc0NvdW50PWgubG9naW5zLmxlbmd0aDticmVhaztjYXNlIFh1LkQuU2FzanM6aWYodGhpcy51c2Vycyl0'@;
put 'aGlzLnVzZXJJbmZvPXRoaXMudXNlcnMuZmluZChtPT5tLlVSST09PWEuVVJJKTtlbHNle2NvbnN0IG09aC5ncm91cHNbMF07dGhpcy51c2VySW5mbz17VVJJOm0uSUQsTkFNRTptLk5BTUUsRElTUExBWU5BTUU6bS5OQU1FfX19dGhpcy51c2VyRGF0YT1oLHRoaXMudXNlckdyb3Vwcz1oLmdy'@;
put 'b3Vwcyx0aGlzLnVzZXJHcm91cHNDb3VudD1oLmdyb3Vwcy5sZW5ndGh9KX1nZXRSb2xlVVJJKGEpe3JldHVybiBhLnNwbGl0KCJPTVNPQko6SWRlbnRpdHlHcm91cCIpWzFdLnNsaWNlKDEpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChQdSks'@;
put 'cnQocGwpLHJ0KHR1KSxydChnZCkscnQoTGEpKX0sbC5cdTAyNzVjbXA9a3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siYXBwLXVzZXIiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjcsdmFyczo0LGNvbnN0czpbWzEsInNpZGViYXItaGVpZ2h0Il0sWyJjbGFzcyIs'@;
put 'InNlYXJjaC1ub2RlIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbImNsYXNzIiwibG9hZGluZ1NwaW5uZXIiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJjbHJJbnB1'@;
put 'dCIsIiIsInBsYWNlaG9sZGVyIiwiRmlsdGVyIGJ5IFVzZXJzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSIsImtleXVwIl0sWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0s'@;
put 'WyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsInRhYmxlLWFjdGl2ZSIsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsaWNrIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwibGlzdC1w'@;
put 'YWRkaW5nIl0sWyJzaGFwZSIsInVzZXIiXSxbMSwibG9hZGluZ1NwaW5uZXIiXSxbMSwic3Bpbm5lciJdLFsiY2xhc3MiLCJjbHItcm93Iiw0LCJuZ0lmIl0sWzEsImNsci1yb3ciXSxbMSwiY2xyLWNvbC04Il0sWzEsImNhcmQiLCJ1c2VyLWRhdGEiXSxbMSwidGFibGUtY29udGFpbmVyIl0s'@;
put 'WyJjbGFzcyIsInRhYmxlIHVzZXItdGFibGUiLDQsIm5nSWYiXSxbMSwidGFibGUiLCJ1c2VyLWluZm8iXSxbMSwibGVmdCJdLFsxLCJ1c2VyLWluZm8tdGV4dCJdLFsxLCJ0YWJsZSIsInVzZXItdGFibGUiXSxbMSwid2lkdGgtNTAiXSxbMSwiIl0sWyJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0'@;
put 'aXZlIiwiY2xhc3MiLCIiLDMsInJvdXRlckxpbmsiLDQsIm5nSWYiXSxbInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDEsIiIsMywicm91dGVyTGluayJdLFszLCJyb3V0ZXJMaW5rIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZil7MSZhJiYoeWUoMCwiYXBwLXNpZGViYXIiLDApKDEsImNs'@;
put 'ci10cmVlIiksdHQoMixmRnQsNiwzLCJjbHItdHJlZS1ub2RlIiwxKSx0dCgzLGhGdCwyLDEsIm5nLWNvbnRhaW5lciIsMiksQ2UoKSgpLHllKDQsImRpdiIsMyksdHQoNSxwRnQsMywwLCJkaXYiLDQpLHR0KDYsTkZ0LDE5LDExLCJkaXYiLDUpLENlKCkpLDImYSYmKFNlKDIpLFJlKCJuZ0lm'@;
put 'IixmLnVzZXJzKSxTZSgxKSxSZSgibmdGb3JPZiIsZi51c2VycyksU2UoMiksUmUoIm5nSWYiLGYubG9hZGluZyksU2UoMSksUmUoIm5nSWYiLGYudXNlckRhdGEmJiFmLmxvYWRpbmcpKX0sZGVwZW5kZW5jaWVzOltSYSwkaSxpcyxXYSx6YSxJMCxUQyxEZCxMZixSbCxSZixrNF0sc3R5bGVz'@;
put 'OlsiLnNpZGViYXItaGVpZ2h0W19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJX0udXNlci1pbmZvLXRleHRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lO2ZvbnQtc2l6ZToyMHB4fS51c2VyLWluZm9bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2Y5'@;
put 'ZjlmOTtib3JkZXI6MXB4IHNvbGlkICNhN2E3YTc7Ym9yZGVyLXJhZGl1czozcHg7Ym94LXNoYWRvdzowIDJweCA1cHggI2RhZDdkN30udXNlci1pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRkW19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmNlbnRlcn0udXNlci1kYXRhW19uZ2Nv'@;
put 'bnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjk7Ym9yZGVyOjFweCBzb2xpZCAjYTdhN2E3O2JvcmRlci1yYWRpdXM6M3B4O2JveC1zaGFkb3c6MCAycHggNXB4ICNkYWQ3ZDd9LnVzZXItZGF0YVtfbmdjb250ZW50LSVDT01QJV17bWluLWhlaWdodDphdXRvfS51c2VyLWRh'@;
put 'dGFbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAudXNlci1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmNlbnRlcn0udXNlci10YWJsZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xv'@;
put 'cjojZjlmOWY5O3dpZHRoOjEwMCV9LnVzZXItdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGhlYWRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2RhZGFkYX0udXNlci10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICB0Ym9keVtfbmdjb250ZW50LSVDT01QJV0gICB0'@;
put 'cltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZTZlNmU2O2N1cnNvcjpwb2ludGVyfS53aWR0aC01MFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6NTAlfS53aWR0aC0zM1tfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MzMlfS50YWJsZS1jb250YWluZXJbX25n'@;
put 'Y29udGVudC0lQ09NUCVde292ZXJmbG93LXk6c2Nyb2xsO21heC1oZWlnaHQ6NTAwcHh9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpey51c2VyLWRhdGFbX25nY29udGVudC0lQ09NUCVde21pbi1oZWlnaHQ6dW5zZXQhaW1wb3J0YW50fX0iXX0pLGx9KSgpLFZGdD0oKCk9'@;
put 'PntjbGFzcyBse2NvbnN0cnVjdG9yKGEsZil7dGhpcy5odHRwPWEsdGhpcy5hcHBTdG9yZVNlcnZpY2U9Zix0aGlzLnZpeWFBcGlzPXtBbmFseXRpY3NfSW5zaWdodHM6e2luc2lnaHRzOiIvaW5zaWdodHMifSxWaXN1YWxpc2F0aW9uOntyZXBvcnRzOiIvcmVwb3J0cyIscmVwb3J0SW1hZ2Vz'@;
put 'OiIvcmVwb3J0SW1hZ2VzIixyZXBvcnRUcmFuc2Zvcm1zOiIvcmVwb3J0VHJhbnNmb3JtcyIsdmlzdWFsQW5hbHl0aWNzOiIvdmlzdWFsQW5hbHl0aWNzIn0sQ29tcHV0ZTp7am9iczoiL2pvYkRlZmluaXRpb25zIixqb2JFeGVjdXRpb246Ii9qb2JFeGVjdXRpb24ifSxEZWNpc2lvbl9NYW5h'@;
put 'Z2VtZW50Onttb2RlbE1hbmFnZW1lbnQ6Ii9tb2RlbE1hbmFnZW1lbnQiLG1vZGVsUmVwb3NpdG9yeToiL21vZGVsUmVwb3NpdG9yeSIsbW9kZWxQdWJsaXNoOiIvbW9kZWxQdWJsaXNoIixtaWNyb2FuYWx5dGljU2NvcmU6Ii9taWNyb2FuYWx5dGljU2NvcmUiLGRhdGFNaW5pbmc6Ii9kYXRh'@;
put 'TWluaW5nIixidXNpbmVzc1J1bGVzOiIvYnVzaW5lc3NSdWxlcyIscmVmZXJlbmNlRGF0YToiL3JlZmVyZW5jZURhdGEiLHRyZWF0bWVudERlZmluaXRpb25zOiIvdHJlYXRtZW50RGVmaW5pdGlvbnMiLHN1YmplY3RDb250YWN0czoiL3N1YmplY3RDb250YWN0cyIsZGVjaXNpb25zUnVudGlt'@;
put 'ZUJ1aWxkZXI6Ii9kZWNpc2lvbnNSdW50aW1lQnVpbGRlciJ9LENvcmVfU2VydmljZXM6e2ZvbGRlcnM6Ii9mb2xkZXJzIixmaWxlczoiL2ZpbGVzIixhbm5vdGF0aW9uczoiL2Fubm90YXRpb25zIixhdXRob3JpemF0aW9uOiIvYXV0aG9yaXphdGlvbiIscmVsYXRpb25zaGlwczoiL3JlbGF0'@;
put 'aW9uc2hpcHMiLFNBU0xvZ29uOiIvU0FTTG9nb24ifSxBdXRvbWF0ZWRfTWFjaGluZV9MZWFybmluZzp7bWxQaXBlbGluZUF1dG9tYXRpb246Ii9tbFBpcGVsaW5lQXV0b21hdGlvbiJ9LE90aGVyOntpZGVudGl0aWVzOiIvaWRlbnRpdGllcyJ9fSx0aGlzLnNlcnZlclVybD0iIjtjb25zdCBk'@;
put 'PXRoaXMuYXBwU3RvcmVTZXJ2aWNlLmdldERjQWRhcHRlclNldHRpbmdzKCk7dGhpcy5zZXJ2ZXJVcmw9ZD8uc2VydmVyVXJsfHwiIix0aGlzLmdldEJ5Q29sbGVjdGlvbigiam9icyIpLnN1YnNjcmliZShoPT57Y29uc29sZS5sb2coInJlcyIsaCl9KX1nZXRBbGxDb2xsZWN0aW9ucygpe3Jl'@;
put 'dHVybiB0aGlzLnZpeWFBcGlzfWdldEJ5VXJsKGEpe3JldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuc2VydmVyVXJsfSR7YX1gLHt3aXRoQ3JlZGVudGlhbHM6ITB9KX1nZXRCeUNvbGxlY3Rpb24oYSl7cmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHthfWAse3dp'@;
put 'dGhDcmVkZW50aWFsczohMH0pfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShzcihueiksc3IoSXYpKX0sbC5cdTAyNzVwcm92PWhyKHt0b2tlbjpsLGZhY3Rvcnk6bC5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxsfSkoKTtmdW5jdGlvbiBC'@;
put 'RnQobCxjKXsxJmwmJnRuKDAsImRpdiIsOSl9ZnVuY3Rpb24gakZ0KGwsYyl7aWYoMSZsKXtjb25zdCBhPVpuKCk7eWUoMCwic3BhbiIsMTApLEV0KCJjbGljayIsZnVuY3Rpb24oKXtVdChhKTtjb25zdCBkPUdlKCkuJGltcGxpY2l0O3JldHVybiBadChHZSgpLm9uVmFsdWVDbGljayhkKSl9'@;
put 'KSxZZSgxKSxDZSgpfWlmKDImbCl7Y29uc3QgYT1HZSgpLiRpbXBsaWNpdDtTZSgxKSxhcihhLmRlc2NyaXB0aW9uKX19ZnVuY3Rpb24gekZ0KGwsYyl7aWYoMSZsKXtjb25zdCBhPVpuKCk7eWUoMCwic2VjdGlvbiIsMTEpKDEsIm5neC1qc29uLXZpZXdlciIsMTIpLEV0KCJzZWdtZW50TGlu'@;
put 'a0NsaWNrZWQiLGZ1bmN0aW9uKGQpe3JldHVybiBVdChhKSxadChHZSgyKS5vblNlZ21lbnRMaW5rQ2xpY2soZCkpfSksQ2UoKSgpfWlmKDImbCl7Y29uc3QgYT1HZSgpLiRpbXBsaWNpdCxmPUdlKCk7U2UoMSksUmUoImpzb24iLGEudmFsdWUpKCJleHBhbmRlZCIsZi5leHBhbmRlZCkoImRl'@;
put 'cHRoIixmLmRlcHRoKSgiX2N1cnJlbnREZXB0aCIsZi5fY3VycmVudERlcHRoKzEpfX1jb25zdCBVRnQ9ZnVuY3Rpb24obCl7cmV0dXJuWyJzZWdtZW50IixsXX0sWkZ0PWZ1bmN0aW9uKGwsYyl7cmV0dXJueyJzZWdtZW50LW1haW4iOiEwLGV4cGFuZGFibGU6bCxleHBhbmRlZDpjfX07ZnVu'@;
put 'Y3Rpb24gWUZ0KGwsYyl7aWYoMSZsKXtjb25zdCBhPVpuKCk7eWUoMCwic2VjdGlvbiIsMikoMSwic2VjdGlvbiIsMyksRXQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9VXQoYSkuJGltcGxpY2l0O3JldHVybiBadChHZSgpLnRvZ2dsZShoKSl9KSx0dCgyLEJGdCwxLDAsImRpdiIsNCks'@;
put 'eWUoMywic3BhbiIsNSksWWUoNCksQ2UoKSx5ZSg1LCJzcGFuIiw2KSxZZSg2LCI6ICIpLENlKCksdHQoNyxqRnQsMiwxLCJzcGFuIiw3KSxDZSgpLHR0KDgsekZ0LDIsNCwic2VjdGlvbiIsOCksQ2UoKX1pZigyJmwpe2NvbnN0IGE9Yy4kaW1wbGljaXQsZj1HZSgpO1JlKCJuZ0NsYXNzIixf'@;
put 'aCg2LFVGdCwic2VnbWVudC10eXBlLSIrYS50eXBlKSksU2UoMSksUmUoIm5nQ2xhc3MiLHdoKDgsWkZ0LGYuaXNFeHBhbmRhYmxlKGEpLGEuZXhwYW5kZWQpKSxTZSgxKSxSZSgibmdJZiIsZi5pc0V4cGFuZGFibGUoYSkpLFNlKDIpLGFyKGEua2V5KSxTZSgzKSxSZSgibmdJZiIsIWEuZXhw'@;
put 'YW5kZWR8fCFmLmlzRXhwYW5kYWJsZShhKSksU2UoMSksUmUoIm5nSWYiLGEuZXhwYW5kZWQmJmYuaXNFeHBhbmRhYmxlKGEpKX19bGV0IFdGdD0oKCk9PntjbGFzcyBse2NvbnN0cnVjdG9yKCl7dGhpcy5leHBhbmRlZD0hMCx0aGlzLmRlcHRoPS0xLHRoaXMuX2N1cnJlbnREZXB0aD0wLHRo'@;
put 'aXMuc2VnbWVudExpbmtDbGlja2VkPW5ldyB4cix0aGlzLnNlZ21lbnRzPVtdfW5nT25DaGFuZ2VzKCl7dGhpcy5zZWdtZW50cz1bXSx0aGlzLmpzb249dGhpcy5kZWN5Y2xlKHRoaXMuanNvbiksIm9iamVjdCI9PXR5cGVvZiB0aGlzLmpzb24/T2JqZWN0LmtleXModGhpcy5qc29uKS5mb3JF'@;
put 'YWNoKGE9Pnt0aGlzLnNlZ21lbnRzLnB1c2godGhpcy5wYXJzZUtleVZhbHVlKGEsdGhpcy5qc29uW2FdKSl9KTp0aGlzLnNlZ21lbnRzLnB1c2godGhpcy5wYXJzZUtleVZhbHVlKGAoJHt0eXBlb2YgdGhpcy5qc29ufSlgLHRoaXMuanNvbikpfWlzRXhwYW5kYWJsZShhKXtyZXR1cm4ib2Jq'@;
put 'ZWN0Ij09PWEudHlwZXx8ImFycmF5Ij09PWEudHlwZX10b2dnbGUoYSl7dGhpcy5pc0V4cGFuZGFibGUoYSkmJihhLmV4cGFuZGVkPSFhLmV4cGFuZGVkKX1vblZhbHVlQ2xpY2soYSl7ImxpbmsiPT09YS50eXBlJiZ0aGlzLnNlZ21lbnRMaW5rQ2xpY2tlZC5lbWl0KGEudmFsdWUpfW9uU2Vn'@;
put 'bWVudExpbmtDbGljayhhKXt0aGlzLnNlZ21lbnRMaW5rQ2xpY2tlZC5lbWl0KGEpfXBhcnNlS2V5VmFsdWUoYSxmKXtjb25zdCBkPXtrZXk6YSx2YWx1ZTpmLHR5cGU6dm9pZCAwLGRlc2NyaXB0aW9uOiIiK2YsZXhwYW5kZWQ6dGhpcy5pc0V4cGFuZGVkKCl9O3N3aXRjaCh0eXBlb2YgZC52'@;
put 'YWx1ZSl7Y2FzZSJudW1iZXIiOmQudHlwZT0ibnVtYmVyIjticmVhaztjYXNlImJvb2xlYW4iOmQudHlwZT0iYm9vbGVhbiI7YnJlYWs7Y2FzZSJmdW5jdGlvbiI6ZC50eXBlPSJmdW5jdGlvbiI7YnJlYWs7Y2FzZSJzdHJpbmciOmlmKHRoaXMuaXNMaW5rKGQudmFsdWUpKXtkLnR5cGU9Imxp'@;
put 'bmsiO2JyZWFrfWQudHlwZT0ic3RyaW5nIixkLmRlc2NyaXB0aW9uPSciJytkLnZhbHVlKyciJzticmVhaztjYXNlInVuZGVmaW5lZCI6ZC50eXBlPSJ1bmRlZmluZWQiLGQuZGVzY3JpcHRpb249InVuZGVmaW5lZCI7YnJlYWs7Y2FzZSJvYmplY3QiOm51bGw9PT1kLnZhbHVlPyhkLnR5cGU9'@;
put 'Im51bGwiLGQuZGVzY3JpcHRpb249Im51bGwiKTpBcnJheS5pc0FycmF5KGQudmFsdWUpPyhkLnR5cGU9ImFycmF5IixkLmRlc2NyaXB0aW9uPSJBcnJheVsiK2QudmFsdWUubGVuZ3RoKyJdICIrSlNPTi5zdHJpbmdpZnkoZC52YWx1ZSkpOmQudmFsdWUgaW5zdGFuY2VvZiBEYXRlP2QudHlw'@;
put 'ZT0iZGF0ZSI6KGQudHlwZT0ib2JqZWN0IixkLmRlc2NyaXB0aW9uPSJPYmplY3QgIitKU09OLnN0cmluZ2lmeShkLnZhbHVlKSl9cmV0dXJuIGR9aXNMaW5rKGEpe3JldHVybiJodHRwczovLyI9PT1hLnN1YnN0cmluZygwLDgpfHwiaHR0cDovLyI9PT1hLnN1YnN0cmluZygwLDcpfHwiLyI9'@;
put 'PT1hWzBdfWlzRXhwYW5kZWQoKXtyZXR1cm4gdGhpcy5leHBhbmRlZCYmISh0aGlzLmRlcHRoPi0xJiZ0aGlzLl9jdXJyZW50RGVwdGg+PXRoaXMuZGVwdGgpfWRlY3ljbGUoYSl7Y29uc3QgZj1uZXcgV2Vha01hcDtyZXR1cm4gZnVuY3Rpb24gZChoLG0pe2xldCBfLE87cmV0dXJuIm9iamVj'@;
put 'dCIhPXR5cGVvZiBofHxudWxsPT09aHx8aCBpbnN0YW5jZW9mIEJvb2xlYW58fGggaW5zdGFuY2VvZiBEYXRlfHxoIGluc3RhbmNlb2YgTnVtYmVyfHxoIGluc3RhbmNlb2YgUmVnRXhwfHxoIGluc3RhbmNlb2YgU3RyaW5nP2g6KF89Zi5nZXQoaCksdm9pZCAwIT09Xz97JHJlZjpffTooZi5z'@;
put 'ZXQoaCxtKSxBcnJheS5pc0FycmF5KGgpPyhPPVtdLGguZm9yRWFjaChmdW5jdGlvbihYLGFlKXtPW2FlXT1kKFgsbSsiWyIrYWUrIl0iKX0pKTooTz17fSxPYmplY3Qua2V5cyhoKS5mb3JFYWNoKGZ1bmN0aW9uKFgpe09bWF09ZChoW1hdLG0rIlsiK0pTT04uc3RyaW5naWZ5KFgpKyJdIil9'@;
put 'KSksTykpfShhLCIkIil9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NWNtcD1rcih7dHlwZTpsLHNlbGVjdG9yczpbWyJuZ3gtanNvbi12aWV3ZXIiXV0saW5wdXRzOntqc29uOiJqc29uIixleHBhbmRlZDoiZXhwYW5kZWQiLGRlcHRo'@;
put 'OiJkZXB0aCIsX2N1cnJlbnREZXB0aDoiX2N1cnJlbnREZXB0aCJ9LG91dHB1dHM6e3NlZ21lbnRMaW5rQ2xpY2tlZDoic2VnbWVudExpbmtDbGlja2VkIn0sZmVhdHVyZXM6W2JsXSxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1sxLCJuZ3gtanNvbi12aWV3ZXIiXSxbMywibmdDbGFzcyIsNCwi'@;
put 'bmdGb3IiLCJuZ0Zvck9mIl0sWzMsIm5nQ2xhc3MiXSxbMywibmdDbGFzcyIsImNsaWNrIl0sWyJjbGFzcyIsInRvZ2dsZXIiLDQsIm5nSWYiXSxbMSwic2VnbWVudC1rZXkiXSxbMSwic2VnbWVudC1zZXBhcmF0b3IiXSxbImNsYXNzIiwic2VnbWVudC12YWx1ZSIsMywiY2xpY2siLDQsIm5n'@;
put 'SWYiXSxbImNsYXNzIiwiY2hpbGRyZW4iLDQsIm5nSWYiXSxbMSwidG9nZ2xlciJdLFsxLCJzZWdtZW50LXZhbHVlIiwzLCJjbGljayJdLFsxLCJjaGlsZHJlbiJdLFszLCJqc29uIiwiZXhwYW5kZWQiLCJkZXB0aCIsIl9jdXJyZW50RGVwdGgiLCJzZWdtZW50TGlua0NsaWNrZWQiXV0sdGVt'@;
put 'cGxhdGU6ZnVuY3Rpb24oYSxmKXsxJmEmJih5ZSgwLCJzZWN0aW9uIiwwKSx0dCgxLFlGdCw5LDExLCJzZWN0aW9uIiwxKSxDZSgpKSwyJmEmJihTZSgxKSxSZSgibmdGb3JPZiIsZi5zZWdtZW50cykpfSxkZXBlbmRlbmNpZXM6W3l1LFJhLCRpLGxdLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYt'@;
put 'OCI7Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6dmFyKC0tbmd4LWpzb24tZm9udC1mYW1pbHksIG1vbm9zcGFjZSk7Zm9udC1zaXplOnZhcigtLW5neC1qc29uLWZvbnQtc2l6ZSwgMWVtKTt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO292ZXJmbG93Omhp'@;
put 'ZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweDttYXJnaW46MXB4IDFweCAxcHggMTJweH0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5z'@;
put 'ZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVde3dvcmQtd3JhcDpicmVhay13b3JkfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtbWFpbltf'@;
put 'bmdjb250ZW50LSVDT01QJV0gICAudG9nZ2xlcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7bWFyZ2luLWxlZnQ6LTE0cHg7bWFyZ2luLXRvcDozcHg7Zm9udC1zaXplOi44ZW07bGluZS1oZWlnaHQ6MS4yZW07dmVydGljYWwtYWxpZ246bWlkZGxlO2NvbG9yOnZhcigt'@;
put 'LW5neC1qc29uLXRvZ2dsZXIsICM3ODc4NzgpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gICAudG9nZ2xlcltfbmdjb250ZW50LSVDT01QJV06YWZ0ZXJ7'@;
put 'ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29udGVudDoiXFwyNWJhIjt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMXMgZWFzZS1pbn0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LW1haW5bX25nY29udGVudC0l'@;
put 'Q09NUCVdICAgLnNlZ21lbnQta2V5W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1rZXksICM0RTE4N0MpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtbWFpbltfbmdjb250'@;
put 'ZW50LSVDT01QJV0gICAuc2VnbWVudC1zZXBhcmF0b3JbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLXNlcGFyYXRvciwgIzk5OSl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVu'@;
put 'dC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi12YWx1ZSwgIzAwMCl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV0gICAu'@;
put 'Y2hpbGRyZW5bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1sZWZ0OjEycHh9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLXN0cmluZ1tfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdt'@;
put 'ZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1zdHJpbmcsICNGRjZCNkIpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1udW1iZXJbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdj'@;
put 'b250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tbnVtYmVyLCAjMDA5Njg4KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtYm9vbGVhbltfbmdjb250ZW50LSVDT01Q'@;
put 'JV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1ib29sZWFuLCAjQjkzOEE0KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUt'@;
put 'ZGF0ZVtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1kYXRlLCAjMDU2NjhEKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAl'@;
put 'XSAgIC5zZWdtZW50LXR5cGUtYXJyYXlbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tYXJyYXksICM5OTkpfS5uZ3gtanNvbi12aWV3ZXJb'@;
put 'X25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1vYmplY3RbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tb2JqZWN0LCAjOTk5'@;
put 'KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtZnVuY3Rpb25bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0t'@;
put 'bmd4LWpzb24tZnVuY3Rpb24sICM5OTkpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0l'@;
put 'Q09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLWxpbmssICM5QjU5QjYpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1udWxsW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQt'@;
put 'dmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLW51bGwsICNmZmYpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS11bmRlZmluZWRbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50'@;
put 'LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tdW5kZWZpbmVkLCAjZmZmKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtbnVsbFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2Vn'@;
put 'bWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW5neC1qc29uLW51bGwtYmcsIHJlZCl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLXVu'@;
put 'ZGVmaW5lZFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LWtleVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tdW5kZWZpbmVkLWtleSwgIzk5OSl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50'@;
put 'LSVDT01QJV0gICAuc2VnbWVudC10eXBlLXVuZGVmaW5lZFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW5neC1qc29uLXVuZGVmaW5l'@;
put 'ZC1rZXksICM5OTkpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde3RleHQt'@;
put 'ZGVjb3JhdGlvbjp1bmRlcmxpbmU7Y3Vyc29yOnBvaW50ZXJ9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLW9iamVjdFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm5neC1qc29uLXZpZXdl'@;
put 'cltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLWFycmF5W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBhbmRlZFtf'@;
put 'bmdjb250ZW50LSVDT01QJV0gPiAudG9nZ2xlcltfbmdjb250ZW50LSVDT01QJV06YWZ0ZXJ7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuZXhwYW5kYWJsZVtfbmdjb250ZW50LSVDT01QJV0sIC5uZ3gtanNvbi12aWV3ZXJb'@;
put 'X25nY29udGVudC0lQ09NUCVdICAgLmV4cGFuZGFibGVbX25nY29udGVudC0lQ09NUCVdID4gLnRvZ2dsZXJbX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpwb2ludGVyfSddfSksbH0pKCksR0Z0PSgoKT0+e2NsYXNzIGx7fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4g'@;
put 'bmV3KGF8fGwpfSxsLlx1MDI3NW1vZD1EaSh7dHlwZTpsfSksbC5cdTAyNzVpbmo9eGkoe2ltcG9ydHM6W2JvXX0pLGx9KSgpLCRGdD0oKCk9PntjbGFzcyBse3RyYW5zZm9ybShhKXtpZighYS5pbmNsdWRlcygiLyIpKXJldHVybiBhO2xldCBmPSIiO2NvbnN0IGQ9YS5zcGxpdCgiLyIpO2Zv'@;
put 'cihsZXQgaD0wO2g8ZC5sZW5ndGg7aCsrKWlmKCIiIT09ZFtoXSl7Y29uc3QgbT1kW2hdO2YrPSIvIittLGRbaF09YDxhIGhyZWY9JHtmfT4ke219PC9hPmB9cmV0dXJuIGQuam9pbigiLyIpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAy'@;
put 'NzVwaXBlPVZsKHtuYW1lOiJsaW5raW56ZSIsdHlwZTpsLHB1cmU6ITB9KSxsfSkoKSxLRnQ9KCgpPT57Y2xhc3MgbHt0cmFuc2Zvcm0oYSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGEsbnVsbCwyKX19cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwu'@;
put 'XHUwMjc1cGlwZT1WbCh7bmFtZToicHJldHR5anNvbiIsdHlwZTpsLHB1cmU6ITB9KSxsfSkoKTtmdW5jdGlvbiBxRnQobCxjKXtpZigxJmwmJih5ZSgwLCJvcHRpb24iLDIyKSxZZSgxKSxDZSgpKSwyJmwpe2NvbnN0IGE9Yy4kaW1wbGljaXQ7UnUoInZhbHVlIixhLnZhbHVlKSxTZSgxKSx3'@;
put 'cigiICIsYS5rZXksIiAiKX19ZnVuY3Rpb24gWEZ0KGwsYyl7aWYoMSZsJiYoeWUoMCwib3B0Z3JvdXAiLDIwKSx0dCgxLHFGdCwyLDIsIm9wdGlvbiIsMjEpLHdsKDIsImtleXZhbHVlIiksQ2UoKSksMiZsKXtjb25zdCBhPWMuJGltcGxpY2l0LGY9R2UoKTtSZSgibGFiZWwiLGEua2V5KSxT'@;
put 'ZSgxKSxSZSgibmdGb3JPZiIsSnMoMiwyLGYuY29sbGVjdGlvbnNbYS5rZXldKSl9fWZ1bmN0aW9uIEpGdChsLGMpezEmbCYmKHllKDAsInAiLDIzKSxZZSgxLCIgU2VsZWN0IGNvbGxlY3Rpb24gdG8gc3RhcnQgIiksQ2UoKSl9ZnVuY3Rpb24gUUZ0KGwsYyl7MSZsJiZ0bigwLCJjbHItc3Bp'@;
put 'bm5lciIsMjQpfWZ1bmN0aW9uIGVIdChsLGMpezEmbCYmdG4oMCwiY2xyLWljb24iLDMxKX1mdW5jdGlvbiB0SHQobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJjbHItaWNvbiIsMzIpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtVdChhKTtjb25zdCBkPUdlKDIpO3JldHVybiBkLmxp'@;
put 'bmtzU2VhcmNoPSIiLFp0KGQubGlua3NMaXN0T25GaWx0ZXIoKSl9KSxDZSgpfX1mdW5jdGlvbiBuSHQobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJjbHItdHJlZS1ub2RlIiwyNSkoMSwiZGl2IiwyNikoMiwiaW5wdXQiLDI3LDI4KSxFdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rp'@;
put 'b24oZCl7cmV0dXJuIFV0KGEpLFp0KEdlKCkubGlua3NTZWFyY2g9ZCl9KSgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIFV0KGEpLFp0KEdlKCkubGlua3NMaXN0T25GaWx0ZXIoKSl9KSxDZSgpLHR0KDQsZUh0LDEsMCwiY2xyLWljb24iLDI5KSx0dCg1LHRIdCwxLDAsImNsci1pY29uIiwz'@;
put 'MCksQ2UoKSgpfWlmKDImbCl7Y29uc3QgYT1RaSgzKSxmPUdlKCk7U2UoMiksUmUoIm5nTW9kZWwiLGYubGlua3NTZWFyY2gpLFNlKDIpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxTZSgxKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIHJIdChsLGMpe2lmKDEm'@;
put 'bCl7Y29uc3QgYT1abigpO3llKDAsImNsci10cmVlLW5vZGUiLDM0KSxFdCgiY2xpY2siLGZ1bmN0aW9uKGQpe1V0KGEpO2NvbnN0IGg9R2UoKS4kaW1wbGljaXQsbT1HZSgpO3JldHVybiBadChtLnRyZWVOb2RlQ2xpY2tlZChkLGgsbS5lbmRwb2ludExpbmtzKSl9KSgiY2xyRXhwYW5kZWRD'@;
put 'aGFuZ2UiLGZ1bmN0aW9uKGQpe3JldHVybiBVdChhKSxadChHZSgpLiRpbXBsaWNpdC5leHBhbmRlZD1kKX0pLHllKDEsInAiLDM1KSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7VXQoYSk7Y29uc3QgZD1HZSgpLiRpbXBsaWNpdDtyZXR1cm4gWnQoR2UoKS5saW5rT25DbGljayhkKSl9KSx0bigy'@;
put 'LCJjbHItaWNvbiIsMzYpLFllKDMpLENlKCkoKX1pZigyJmwpe2NvbnN0IGE9R2UoKS4kaW1wbGljaXQ7UmUoImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSgiY2xyTG9hZGluZyIsISFhLmxvYWRpbmdUYWJsZXMmJiFhLnRhYmxlcyksU2UoMyksJHUoIiAiLGEubWV0aG9kLCIgIixhLnJlbCwi'@;
put 'ICIpfX1mdW5jdGlvbiBpSHQobCxjKXtpZigxJmwmJihXcigwKSx0dCgxLHJIdCw0LDQsImNsci10cmVlLW5vZGUiLDMzKSxHcigpKSwyJmwpe2NvbnN0IGE9Yy4kaW1wbGljaXQ7U2UoMSksUmUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1bmN0aW9uIG9IdChsLGMpezEmbCYmdG4oMCwiY2xyLWlj'@;
put 'b24iLDMxKX1mdW5jdGlvbiBhSHQobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJjbHItaWNvbiIsMzIpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtVdChhKTtjb25zdCBkPUdlKDIpO3JldHVybiBkLml0ZW1zU2VhcmNoPSIiLFp0KGQuaXRlbXNMaXN0T25GaWx0ZXIoKSl9KSxDZSgp'@;
put 'fX1mdW5jdGlvbiBsSHQobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJjbHItdHJlZS1ub2RlIiwyNSkoMSwiZGl2IiwyNikoMiwiaW5wdXQiLDM3LDM4KSxFdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oZCl7cmV0dXJuIFV0KGEpLFp0KEdlKCkuaXRlbXNTZWFyY2g9ZCl9KSgi'@;
put 'a2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIFV0KGEpLFp0KEdlKCkuaXRlbXNMaXN0T25GaWx0ZXIoKSl9KSxDZSgpLHR0KDQsb0h0LDEsMCwiY2xyLWljb24iLDI5KSx0dCg1LGFIdCwxLDAsImNsci1pY29uIiwzMCksQ2UoKSgpfWlmKDImbCl7Y29uc3QgYT1RaSgzKSxmPUdlKCk7U2UoMiks'@;
put 'UmUoIm5nTW9kZWwiLGYuaXRlbXNTZWFyY2gpLFNlKDIpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxTZSgxKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIHNIdChsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImNsci10cmVlLW5vZGUiLDM0KSxFdCgi'@;
put 'Y2xpY2siLGZ1bmN0aW9uKGQpe1V0KGEpO2NvbnN0IGg9R2UoKS4kaW1wbGljaXQsbT1HZSgpO3JldHVybiBadChtLnRyZWVOb2RlQ2xpY2tlZChkLGgsbS5lbmRwb2ludEl0ZW1zKSl9KSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGQpe3JldHVybiBVdChhKSxadChHZSgpLiRpbXBs'@;
put 'aWNpdC5leHBhbmRlZD1kKX0pLHllKDEsInAiLDM1KSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7VXQoYSk7Y29uc3QgZD1HZSgpLiRpbXBsaWNpdDtyZXR1cm4gWnQoR2UoKS5pdGVtT25DbGljayhkKSl9KSx0bigyLCJjbHItaWNvbiIsMzYpLFllKDMpLENlKCkoKX1pZigyJmwpe2NvbnN0IGE9'@;
put 'R2UoKS4kaW1wbGljaXQ7UmUoImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSgiY2xyTG9hZGluZyIsISFhLmxvYWRpbmdUYWJsZXMmJiFhLnRhYmxlcyksU2UoMyksd3IoIiAiLGEubmFtZXx8YS5pZCwiICIpfX1mdW5jdGlvbiB1SHQobCxjKXtpZigxJmwmJihXcigwKSx0dCgxLHNIdCw0LDMs'@;
put 'ImNsci10cmVlLW5vZGUiLDMzKSxHcigpKSwyJmwpe2NvbnN0IGE9Yy4kaW1wbGljaXQ7U2UoMSksUmUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1bmN0aW9uIGNIdChsLGMpezEmbCYmdG4oMCwiY2xyLXNwaW5uZXIiLDM5KX1mdW5jdGlvbiBmSHQobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5'@;
put 'ZSgwLCJuZ3gtanNvbi12aWV3ZXIiLDQ5KSxFdCgic2VnbWVudExpbmtDbGlja2VkIixmdW5jdGlvbihkKXtyZXR1cm4gVXQoYSksWnQoR2UoMykub25Kc29uTGlua0NsaWNrKGQpKX0pLENlKCl9MiZsJiZSZSgianNvbiIsR2UoMykuZW5kcG9pbnRKc29uKSgiZXhwYW5kZWQiLCExKX1mdW5j'@;
put 'dGlvbiBkSHQobCxjKXtpZigxJmwmJihXcigwKSxZZSgxKSx3bCgyLCJwcmV0dHlqc29uIiksR3IoKSksMiZsKXtjb25zdCBhPUdlKDMpO1NlKDEpLHdyKCJcbiAgICAgICAgICAgICIsSnMoMiwxLGEuZW5kcG9pbnRKc29uKSwiXG4gICAgICAgICAgIil9fWZ1bmN0aW9uIGhIdChsLGMpe2lm'@;
put 'KDEmbCYmKFdyKDApLFllKDEsIlxuICAgICAgICAgICIpLHR0KDIsZkh0LDEsMiwibmd4LWpzb24tdmlld2VyIiw0OCksWWUoMywiXG4gICAgICAgICAgIiksdHQoNCxkSHQsMywzLCJuZy1jb250YWluZXIiLDE5KSxZZSg1LCJcbiAgICAgICAgIiksR3IoKSksMiZsKXtjb25zdCBhPUdlKDIp'@;
put 'O1NlKDIpLFJlKCJuZ0lmIiwhYS5yYXdKc29uKSxTZSgyKSxSZSgibmdJZiIsYS5yYXdKc29uKX19ZnVuY3Rpb24gcEh0KGwsYyl7aWYoMSZsKXtjb25zdCBhPVpuKCk7V3IoMCkseWUoMSwiZGl2Iiw0MCkoMiwic3BhbiIsNDEpLFllKDMsIiBHRVQgIikseWUoNCwicCIsNDIpLEV0KCJjbGlj'@;
put 'ayIsZnVuY3Rpb24oZCl7cmV0dXJuIFV0KGEpLFp0KEdlKCkub25CcmVhZGN1bXNDbGljayhkKSl9KSx3bCg1LCJsaW5raW56ZSIpLENlKCkseWUoNiwiYnV0dG9uIiwxNCksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBVdChhKSxadChHZSgpLmNvcHlCcmVhZGNydW1zKCkpfSksdG4o'@;
put 'NywiY2xyLWljb24iLDE1KSxDZSgpKCkseWUoOCwiZGl2Iiw0MykoOSwiY2xyLWlucHV0LWNvbnRhaW5lciIsMTIpKDEwLCJsYWJlbCIpLFllKDExLCJTdGFydCIpLENlKCkseWUoMTIsImlucHV0Iiw0NCksRXQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGQpe3JldHVybiBVdChhKSxadChH'@;
put 'ZSgpLmVuZHBvaW50LnN0YXJ0PWQpfSksQ2UoKSgpLHllKDEzLCJjbHItaW5wdXQtY29udGFpbmVyIiwxMikoMTQsImxhYmVsIiksWWUoMTUsIkxpbWl0IiksQ2UoKSx5ZSgxNiwiaW5wdXQiLDQ0KSxFdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oZCl7cmV0dXJuIFV0KGEpLFp0KEdlKCku'@;
put 'ZW5kcG9pbnQubGltaXQ9ZCl9KSxDZSgpKCkseWUoMTcsImJ1dHRvbiIsNDUpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gVXQoYSksWnQoR2UoKS5hcHBseVF1ZXJ5UGFyYW1zKCkpfSksdG4oMTgsImNsci1pY29uIiw0NiksQ2UoKSgpKCkseWUoMTksInByZSIsNDcpLFllKDIwLCIg'@;
put 'ICAgICAgICIpLHR0KDIxLGhIdCw2LDIsIm5nLWNvbnRhaW5lciIsMTkpLFllKDIyLCJcbiAgICAgICIpLENlKCksR3IoKX1pZigyJmwpe2NvbnN0IGE9R2UoKTtTZSg0KSxSZSgiaW5uZXJIVE1MIixKcyg1LDcsYS5lbmRwb2ludC51cmwpLHZoKSxTZSg4KSxSZSgibmdNb2RlbCIsYS5lbmRw'@;
put 'b2ludC5zdGFydCkoImRpc2FibGVkIix2b2lkIDA9PT1hLmVuZHBvaW50LnN0YXJ0KSxTZSg0KSxSZSgibmdNb2RlbCIsYS5lbmRwb2ludC5saW1pdCkoImRpc2FibGVkIix2b2lkIDA9PT1hLmVuZHBvaW50LmxpbWl0KSxTZSgxKSxSZSgiZGlzYWJsZWQiLHZvaWQgMD09PWEuZW5kcG9pbnQu'@;
put 'bGltaXQmJnZvaWQgMD09PWEuZW5kcG9pbnQuc3RhcnQpLFNlKDQpLFJlKCJuZ0lmIixhLmVuZHBvaW50SnNvbil9fWxldCBtSHQ9KCgpPT57Y2xhc3MgbHtjb25zdHJ1Y3RvcihhLGYsZCxoKXt0aGlzLmhlbHBlclNlcnZpY2U9YSx0aGlzLnNhc1ZpeWFTZXJ2aWNlPWYsdGhpcy5zYXNTZXJ2'@;
put 'aWNlPWQsdGhpcy5ldmVudFNlcnZpY2U9aCx0aGlzLmNvbGxlY3Rpb25zPXt9LHRoaXMuY29sbGVjdGlvbj0iIix0aGlzLmVuZHBvaW50TGlua3M9W10sdGhpcy5lbmRwb2ludEl0ZW1zPVtdLHRoaXMuZW5kcG9pbnQ9e3VybDoiIixzdGFydDotMSxsaW1pdDotMX0sdGhpcy5lbmRwb2ludExv'@;
put 'YWRpbmc9ITEsdGhpcy5jb2xsZWN0aW9uTG9hZGluZz0hMSx0aGlzLnJhd0pzb249ITEsdGhpcy5saW5rc1NlYXJjaD0iIix0aGlzLml0ZW1zU2VhcmNoPSIiLHRoaXMuc2FzanNDb25maWc9bmV3IHYxLlNBU2pzQ29uZmlnfW5nT25Jbml0KCl7dGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1Nl'@;
put 'cnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLmNvbGxlY3Rpb25zPXRoaXMuc2FzVml5YVNlcnZpY2UuZ2V0QWxsQ29sbGVjdGlvbnMoKX1saW5rc0xpc3RPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5lbmRwb2ludExpbmtzLHRoaXMubGlua3NT'@;
put 'ZWFyY2gsInJlbCIpLEpuLnZpeWFBcGkubGlua3NzU2VhcmNoPXRoaXMubGlua3NTZWFyY2h9aXRlbXNMaXN0T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMuZW5kcG9pbnRJdGVtcyx0aGlzLml0ZW1zU2VhcmNoLCJuYW1lIiksSm4udml5YUFwaS5p'@;
put 'dGVtc1NlYXJjaD10aGlzLml0ZW1zU2VhcmNofWxpbmtPbkNsaWNrKGEpe3RoaXMubG9hZFVybChhLmhyZWYpfWl0ZW1PbkNsaWNrKGEpe3RoaXMubG9hZFVybChhLmxpbmtzWzBdLmhyZWYpfXRyZWVOb2RlQ2xpY2tlZChhLGYsZCl7IkNvbGxhcHNlIj09PWEudGFyZ2V0LnRpdGxlJiZ0aGlz'@;
put 'LmNvbGxhcHNlVHJlZUl0ZW1zKGQsZil9Y29sbGFwc2VUcmVlSXRlbXMoYSxmKXthLmZvckVhY2goZD0+e0pTT04uc3RyaW5naWZ5KGQpIT09SlNPTi5zdHJpbmdpZnkoZikmJihkLmV4cGFuZGVkPSExKX0pfXVwZGF0ZVNlbGVjdGVkQ29sbGVjdGlvbigpe0puLnZpeWFBcGkuc2VsZWN0ZWRD'@;
put 'b2xsZWN0aW9uPXRoaXMuY29sbGVjdGlvbix0aGlzLmVuZHBvaW50LnVybD10aGlzLmNvbGxlY3Rpb24sdGhpcy5jb2xsZWN0aW9uTG9hZGluZz0hMCx0aGlzLnNhc1ZpeWFTZXJ2aWNlLmdldEJ5Q29sbGVjdGlvbih0aGlzLmNvbGxlY3Rpb24pLnN1YnNjcmliZShhPT57dGhpcy5lbmRwb2lu'@;
put 'dExpbmtzPWEubGlua3MsdGhpcy5lbmRwb2ludEl0ZW1zPWEuaXRlbXM/YS5pdGVtczpbXSx0aGlzLmNvbGxlY3Rpb25Mb2FkaW5nPSExLHRoaXMuZW5kcG9pbnRKc29uPWEsdGhpcy5lbmRwb2ludC5zdGFydD1hLnN0YXJ0LHRoaXMuZW5kcG9pbnQubGltaXQ9YS5saW1pdH0sYT0+e3RoaXMu'@;
put 'Y29sbGVjdGlvbkxvYWRpbmc9ITE7bGV0IGY9IkVycm9yIG9jY3VycmVkIHdoaWxlIHNlbmRpbmcgcmVxdWVzdCI7YS5tZXNzYWdlJiYoZj1hLm1lc3NhZ2UpLGEuZXJyb3ImJihhLmVycm9yLm1lc3NhZ2UmJihmPWEuZXJyb3IubWVzc2FnZSksYS5lcnJvci5yZW1lZGlhdGlvbiYmKGY9YCR7'@;
put 'Zn1cbiR7YS5lcnJvci5yZW1lZGlhdGlvbn1gKSksdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCxmLG51bGwsIkhUVFAgRXJyb3IiKX0pfW9uSnNvbkxpbmtDbGljayhhKXt0aGlzLmxvYWRVcmwoYSl9b25Kc29uQ2xpY2soYSl7aWYoYS5wcmV2ZW50RGVmYXVsdCgpLCJB'@;
put 'Ij09PWEuc3JjRWxlbWVudC50YWdOYW1lKXtjb25zdCBmPWEuc3JjRWxlbWVudC5ocmVmLnNwbGl0KGEuc3JjRWxlbWVudC5ob3N0KVsxXTt0aGlzLmxvYWRVcmwoZil9fW9uQnJlYWRjdW1zQ2xpY2soYSl7aWYoYS5wcmV2ZW50RGVmYXVsdCgpLCFhLnNyY0VsZW1lbnQuaHJlZilyZXR1cm47'@;
put 'Y29uc3QgZj1hLnNyY0VsZW1lbnQuaHJlZi5zcGxpdChhLnNyY0VsZW1lbnQuaG9zdClbMV07dGhpcy5sb2FkVXJsKGYpfWNvcHlKc29uKCl7dGhpcy5lbmRwb2ludEpzb24mJm5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KEpTT04uc3RyaW5naWZ5KHRoaXMuZW5kcG9pbnRKc29uLG51'@;
put 'bGwsMikpfWNvcHlCcmVhZGNydW1zKCl7dGhpcy5lbmRwb2ludCYmdGhpcy5lbmRwb2ludC51cmwmJm5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRoaXMuZW5kcG9pbnQudXJsKX1hcHBseVF1ZXJ5UGFyYW1zKCl7Y29uc3QgYT10aGlzLmVuZHBvaW50LnN0YXJ0LGY9dGhpcy5lbmRw'@;
put 'b2ludC5saW1pdCxkPWA/JHt2b2lkIDAhPT1hPyJzdGFydD0iK2E6IiJ9JHt2b2lkIDAhPT1mPyImbGltaXQ9IitmOiIifWAsaD1gJHt0aGlzLmVuZHBvaW50LnVybC5zcGxpdCgiPyIpWzBdfSR7ZH1gO3RoaXMubG9hZFVybChoKX1sb2FkVXJsKGEpe3RoaXMuZW5kcG9pbnRMb2FkaW5nPSEw'@;
put 'LHRoaXMuc2FzVml5YVNlcnZpY2UuZ2V0QnlVcmwoYSkuc3Vic2NyaWJlKGY9Pnt0aGlzLmVuZHBvaW50TGlua3M9Zi5saW5rcyx0aGlzLmVuZHBvaW50SXRlbXM9Zi5pdGVtcz9mLml0ZW1zOltdLHRoaXMuZW5kcG9pbnRKc29uPWYsdGhpcy5lbmRwb2ludExvYWRpbmc9ITEsdGhpcy5lbmRw'@;
put 'b2ludC51cmw9YSx0aGlzLmVuZHBvaW50LnN0YXJ0PWYuc3RhcnQsdGhpcy5lbmRwb2ludC5saW1pdD1mLmxpbWl0fSxmPT57dGhpcy5lbmRwb2ludExvYWRpbmc9ITE7bGV0IGQ9IkVycm9yIG9jY3VycmVkIHdoaWxlIHNlbmRpbmcgcmVxdWVzdCI7Zi5tZXNzYWdlJiYoZD1mLm1lc3NhZ2Up'@;
put 'LGYuZXJyb3ImJihmLmVycm9yLm1lc3NhZ2UmJihkPWYuZXJyb3IubWVzc2FnZSksZi5lcnJvci5yZW1lZGlhdGlvbiYmKGQ9YCR7ZH1cbiR7Zi5lcnJvci5yZW1lZGlhdGlvbn1gKSksdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCxkLG51bGwsIkhUVFAgRXJyb3IiKX0p'@;
put 'fX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydChQdSkscnQoVkZ0KSxydChwbCkscnQoUnMpKX0sbC5cdTAyNzVjbXA9a3Ioe3R5cGU6bCxzZWxlY3RvcnM6W1siYXBwLXZpeWEtYXBpLWV4cGxvcmVyIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1j'@;
put 'b250YWluZXIiXSxkZWNsczozMyx2YXJzOjEzLGNvbnN0czpbWzEsImFwaS1jb2xsZWN0aW9uLWRyb3Bkb3duIl0sWyJjbHJTZWxlY3QiLCIiLCJpZCIsInJlcG9zaXRvcnkiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwiY2hhbmdlIl0sWzMsImxhYmVsIiw0LCJuZ0ZvciIsIm5nRm9y'@;
put 'T2YiXSxbImNsYXNzIiwidy0xMDAgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImNsck1lZGl1bSIsIiIsNCwibmdJZiJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2Yi'@;
put 'XSxbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQiLCJoLTEwMCIsInAtMTAiLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iXSxbMSwidy0xMDAiLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJzaXRpb24tcmVsYXRpdmUi'@;
put 'XSxbMSwianNvbi10b2dnbGUiLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsIm0tMCJdLFsidHlwZSIsImNoZWNrYm94IiwiY2xyVG9nZ2xlIiwiIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLWxpbmsiLCJi'@;
put 'dG4tc20iLDMsImNsaWNrIl0sWyJzaGFwZSIsImNvcHkiXSxbMSwidGV4dC1jZW50ZXIiLCJtLTAiXSxbImNsclNtYWxsIiwiIiw0LCJuZ0lmIl0sWzEsInctMTAwIiwibGlnaHQiXSxbNCwibmdJZiJdLFszLCJsYWJlbCJdLFszLCJ2YWx1ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsInZh'@;
put 'bHVlIl0sWzEsInctMTAwIiwidGV4dC1jZW50ZXIiXSxbImNsck1lZGl1bSIsIiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiU2VhcmNoIGxpbmtzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRl'@;
put 'Iiwib2ZmIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSIsImtleXVwIl0sWyJzZWFyY2hMaW5rc1RyZWVJbnB1dCIsIiJdLFsic2hhcGUiLCJzZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUi'@;
put 'LCJ0aW1lcyIsMywiY2xpY2siXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsNCwibmdJZiJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIl0sWzEsIm0tMCIsImN1cnNvci1w'@;
put 'b2ludGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJibG9jayJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlNlYXJjaCBpdGVtcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCJdLFsic2VhcmNoSXRl'@;
put 'bXNUcmVlSW5wdXQiLCIiXSxbImNsclNtYWxsIiwiIl0sWzEsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4iXSxbMSwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJ0ZXh0LWNlbnRlciIsImVuZHBvaW50'@;
put 'LWJyZWFkY3J1bXMiLDMsImlubmVySFRNTCIsImNsaWNrIl0sWzEsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJxdWVyeS1wYXJhbXMiXSxbImNscklucHV0IiwiIiwidHlwZSIsIm51bWJlciIsMywibmdNb2RlbCIsImRpc2FibGVkIiwibmdNb2RlbENoYW5nZSJdLFsidHlw'@;
put 'ZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLWxpbmsiLCJidG4tc20iLDMsImRpc2FibGVkIiwiY2xpY2siXSxbInNoYXBlIiwicGxheSJdLFsxLCJqc29uLWFyZWEiXSxbImNsYXNzIiwiZC1ibG9jayIsMywianNvbiIsImV4cGFuZGVkIiwic2VnbWVudExpbmtDbGlja2VkIiw0LCJuZ0lmIl0s'@;
put 'WzEsImQtYmxvY2siLDMsImpzb24iLCJleHBhbmRlZCIsInNlZ21lbnRMaW5rQ2xpY2tlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGYpezEmYSYmKHllKDAsImFwcC1zaWRlYmFyIikoMSwiZGl2IiwwKSgyLCJjbHItc2VsZWN0LWNvbnRhaW5lciIpKDMsImxhYmVsIiksWWUoNCwiQVBJIENv'@;
put 'bGxlY3Rpb24iKSxDZSgpLHllKDUsInNlbGVjdCIsMSksRXQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBmLmNvbGxlY3Rpb249aH0pKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGYudXBkYXRlU2VsZWN0ZWRDb2xsZWN0aW9uKCl9KSx0dCg2LFhGdCwzLDQsIm9wdGdy'@;
put 'b3VwIiwyKSx3bCg3LCJrZXl2YWx1ZSIpLENlKCkoKSgpLHR0KDgsSkZ0LDIsMCwicCIsMykseWUoOSwiZGl2Iiw0KSx0dCgxMCxRRnQsMSwwLCJjbHItc3Bpbm5lciIsNSksQ2UoKSx5ZSgxMSwiY2xyLXRyZWUiKSx0dCgxMixuSHQsNiwzLCJjbHItdHJlZS1ub2RlIiw2KSx0dCgxMyxpSHQs'@;
put 'MiwxLCJuZy1jb250YWluZXIiLDcpLENlKCkseWUoMTQsImNsci10cmVlIiksdHQoMTUsbEh0LDYsMywiY2xyLXRyZWUtbm9kZSIsNiksdHQoMTYsdUh0LDIsMSwibmctY29udGFpbmVyIiw3KSxDZSgpKCkseWUoMTcsImRpdiIsOCkoMTgsImRpdiIsOSkoMTksImRpdiIsMTApKDIwLCJkaXYi'@;
put 'LDExKSgyMSwiY2xyLXRvZ2dsZS1jb250YWluZXIiLDEyKSgyMiwiY2xyLXRvZ2dsZS13cmFwcGVyIikoMjMsImlucHV0IiwxMyksRXQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBmLnJhd0pzb249aH0pLENlKCkseWUoMjQsImxhYmVsIiksWWUoMjUsIlJBVyBKc29uIiks'@;
put 'Q2UoKSgpKCkseWUoMjYsImJ1dHRvbiIsMTQpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZi5jb3B5SnNvbigpfSksdG4oMjcsImNsci1pY29uIiwxNSksQ2UoKSgpLHllKDI4LCJoNCIsMTYpLFllKDI5LCIgQVBJIEV4cGxvcmVyICIpLHR0KDMwLGNIdCwxLDAsImNsci1zcGlubmVy'@;
put 'IiwxNyksQ2UoKSgpLHRuKDMxLCJociIsMTgpLHR0KDMyLHBIdCwyMyw5LCJuZy1jb250YWluZXIiLDE5KSxDZSgpKCkpLDImYSYmKFNlKDUpLFJlKCJuZ01vZGVsIixmLmNvbGxlY3Rpb24pLFNlKDEpLFJlKCJuZ0Zvck9mIixKcyg3LDExLGYuY29sbGVjdGlvbnMpKSxTZSgyKSxSZSgibmdJ'@;
put 'ZiIsZi5lbmRwb2ludExpbmtzLmxlbmd0aDwxJiYhZi5jb2xsZWN0aW9uTG9hZGluZyksU2UoMiksUmUoIm5nSWYiLGYuY29sbGVjdGlvbkxvYWRpbmcpLFNlKDIpLFJlKCJuZ0lmIixmLmVuZHBvaW50TGlua3MubGVuZ3RoPjApLFNlKDEpLFJlKCJuZ0Zvck9mIixmLmVuZHBvaW50TGlua3Mp'@;
put 'LFNlKDIpLFJlKCJuZ0lmIixmLmVuZHBvaW50SXRlbXMubGVuZ3RoPjApLFNlKDEpLFJlKCJuZ0Zvck9mIixmLmVuZHBvaW50SXRlbXMpLFNlKDcpLFJlKCJuZ01vZGVsIixmLnJhd0pzb24pLFNlKDcpLFJlKCJuZ0lmIixmLmVuZHBvaW50TG9hZGluZyksU2UoMiksUmUoIm5nSWYiLGYuY29s'@;
put 'bGVjdGlvbi5sZW5ndGg+MCkpfSxkZXBlbmRlbmNpZXM6W1JhLCRpLFMxLE0xLGlzLFZELFIwLEwwLFdhLHphLERkLExmLFJsLEpjLGVsLEIwLGw3LFYwLFJmLERVLG03LHA3LFJoLGs0LFdGdCxVTywkRnQsS0Z0XSxzdHlsZXM6WyIuYXBpLWNvbGxlY3Rpb24tZHJvcGRvd25bX25nY29udGVu'@;
put 'dC0lQ09NUCVde21hcmdpbi1sZWZ0OjE1cHg7bWFyZ2luLXJpZ2h0OjE1cHg7bWFyZ2luLWJvdHRvbToxMHB4fS5qc29uLWFyZWFbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvdmVyZmxvdzphdXRv'@;
put 'fS5qc29uLWFyZWFbX25nY29udGVudC0lQ09NUCVdICAgICBhe3RleHQtZGVjb3JhdGlvbjpub25lfS5qc29uLWFyZWFbX25nY29udGVudC0lQ09NUCVdICAgID5uZ3gtanNvbi12aWV3ZXJ7aGVpZ2h0OjEwMCV9Lmpzb24tYXJlYVtfbmdjb250ZW50LSVDT01QJV0gICAgPm5neC1qc29uLXZp'@;
put 'ZXdlcj4ubmd4LWpzb24tdmlld2Vye292ZXJmbG93OmF1dG99Lmpzb24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjEwcHg7bWFyZ2luOjB9LmVuZHBvaW50LWJyZWFkY3J1bXNbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMCAxMHB4fS5x'@;
put 'dWVyeS1wYXJhbXNbX25nY29udGVudC0lQ09NUCVdICAgaW5wdXRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjcwcHh9Il19KSxsfSkoKTtjb25zdCBnSHQ9bmV3IE1pKCJXaW5kb3dUb2tlbiIsdHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5kb2N1bWVudD97cHJvdmlkZWRJbjoicm9vdCIs'@;
put 'ZmFjdG9yeTooKT0+d2luZG93fTp7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+e319KTtsZXQgdkh0PSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmLGQpe3RoaXMubmdab25lPWEsdGhpcy5kb2N1bWVudD1mLHRoaXMud2luZG93PWQsdGhpcy5jb3B5U3ViamVjdD1uZXcgd2Us'@;
put 'dGhpcy5jb3B5UmVzcG9uc2UkPXRoaXMuY29weVN1YmplY3QuYXNPYnNlcnZhYmxlKCksdGhpcy5jb25maWc9e319Y29uZmlndXJlKGEpe3RoaXMuY29uZmlnPWF9Y29weShhKXtpZighdGhpcy5pc1N1cHBvcnRlZHx8IWEpcmV0dXJuIHRoaXMucHVzaENvcHlSZXNwb25zZSh7aXNTdWNjZXNz'@;
put 'OiExLGNvbnRlbnQ6YX0pO2NvbnN0IGY9dGhpcy5jb3B5RnJvbUNvbnRlbnQoYSk7cmV0dXJuIHRoaXMucHVzaENvcHlSZXNwb25zZShmP3tjb250ZW50OmEsaXNTdWNjZXNzOmZ9Ontpc1N1Y2Nlc3M6ITEsY29udGVudDphfSl9Z2V0IGlzU3VwcG9ydGVkKCl7cmV0dXJuISF0aGlzLmRvY3Vt'@;
put 'ZW50LnF1ZXJ5Q29tbWFuZFN1cHBvcnRlZCYmISF0aGlzLmRvY3VtZW50LnF1ZXJ5Q29tbWFuZFN1cHBvcnRlZCgiY29weSIpJiYhIXRoaXMud2luZG93fWlzVGFyZ2V0VmFsaWQoYSl7aWYoYSBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnR8fGEgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFF'@;
put 'bGVtZW50KXtpZihhLmhhc0F0dHJpYnV0ZSgiZGlzYWJsZWQiKSl0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgInRhcmdldCIgYXR0cmlidXRlLiBQbGVhc2UgdXNlICJyZWFkb25seSIgaW5zdGVhZCBvZiAiZGlzYWJsZWQiIGF0dHJpYnV0ZScpO3JldHVybiEwfXRocm93IG5ldyBFcnJvcigi'@;
put 'VGFyZ2V0IHNob3VsZCBiZSBpbnB1dCBvciB0ZXh0YXJlYSIpfWNvcHlGcm9tSW5wdXRFbGVtZW50KGEsZj0hMCl7dHJ5e3RoaXMuc2VsZWN0VGFyZ2V0KGEpO2NvbnN0IGQ9dGhpcy5jb3B5VGV4dCgpO3JldHVybiB0aGlzLmNsZWFyU2VsZWN0aW9uKGY/YTp2b2lkIDAsdGhpcy53aW5kb3cp'@;
put 'LGQmJnRoaXMuaXNDb3B5U3VjY2Vzc0luSUUxMSgpfWNhdGNoe3JldHVybiExfX1pc0NvcHlTdWNjZXNzSW5JRTExKCl7Y29uc3QgYT10aGlzLndpbmRvdy5jbGlwYm9hcmREYXRhO3JldHVybiEoYSYmYS5nZXREYXRhJiYhYS5nZXREYXRhKCJUZXh0IikpfWNvcHlGcm9tQ29udGVudChhLGY9'@;
put 'dGhpcy5kb2N1bWVudC5ib2R5KXtpZih0aGlzLnRlbXBUZXh0QXJlYSYmIWYuY29udGFpbnModGhpcy50ZW1wVGV4dEFyZWEpJiZ0aGlzLmRlc3Ryb3kodGhpcy50ZW1wVGV4dEFyZWEucGFyZW50RWxlbWVudHx8dm9pZCAwKSwhdGhpcy50ZW1wVGV4dEFyZWEpe3RoaXMudGVtcFRleHRBcmVh'@;
put 'PXRoaXMuY3JlYXRlVGVtcFRleHRBcmVhKHRoaXMuZG9jdW1lbnQsdGhpcy53aW5kb3cpO3RyeXtmLmFwcGVuZENoaWxkKHRoaXMudGVtcFRleHRBcmVhKX1jYXRjaHt0aHJvdyBuZXcgRXJyb3IoIkNvbnRhaW5lciBzaG91bGQgYmUgYSBEb20gZWxlbWVudCIpfX10aGlzLnRlbXBUZXh0QXJl'@;
put 'YS52YWx1ZT1hO2NvbnN0IGQ9dGhpcy5jb3B5RnJvbUlucHV0RWxlbWVudCh0aGlzLnRlbXBUZXh0QXJlYSwhMSk7cmV0dXJuIHRoaXMuY29uZmlnLmNsZWFuVXBBZnRlckNvcHkmJnRoaXMuZGVzdHJveSh0aGlzLnRlbXBUZXh0QXJlYS5wYXJlbnRFbGVtZW50fHx2b2lkIDApLGR9ZGVzdHJv'@;
put 'eShhPXRoaXMuZG9jdW1lbnQuYm9keSl7dGhpcy50ZW1wVGV4dEFyZWEmJihhLnJlbW92ZUNoaWxkKHRoaXMudGVtcFRleHRBcmVhKSx0aGlzLnRlbXBUZXh0QXJlYT12b2lkIDApfXNlbGVjdFRhcmdldChhKXtyZXR1cm4gYS5zZWxlY3QoKSxhLnNldFNlbGVjdGlvblJhbmdlKDAsYS52YWx1'@;
put 'ZS5sZW5ndGgpLGEudmFsdWUubGVuZ3RofWNvcHlUZXh0KCl7cmV0dXJuIHRoaXMuZG9jdW1lbnQuZXhlY0NvbW1hbmQoImNvcHkiKX1jbGVhclNlbGVjdGlvbihhLGYpe2EmJmEuZm9jdXMoKSxmLmdldFNlbGVjdGlvbigpPy5yZW1vdmVBbGxSYW5nZXMoKX1jcmVhdGVUZW1wVGV4dEFyZWEo'@;
put 'YSxmKXtjb25zdCBkPSJydGwiPT09YS5kb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJkaXIiKTtsZXQgaDtyZXR1cm4gaD1hLmNyZWF0ZUVsZW1lbnQoInRleHRhcmVhIiksaC5zdHlsZS5mb250U2l6ZT0iMTJwdCIsaC5zdHlsZS5ib3JkZXI9IjAiLGguc3R5bGUucGFkZGluZz0iMCIs'@;
put 'aC5zdHlsZS5tYXJnaW49IjAiLGguc3R5bGUucG9zaXRpb249ImFic29sdXRlIixoLnN0eWxlW2Q/InJpZ2h0IjoibGVmdCJdPSItOTk5OXB4IixoLnN0eWxlLnRvcD0oZi5wYWdlWU9mZnNldHx8YS5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wKSsicHgiLGguc2V0QXR0cmlidXRlKCJyZWFk'@;
put 'b25seSIsIiIpLGh9cHVzaENvcHlSZXNwb25zZShhKXt0aGlzLmNvcHlTdWJqZWN0Lm9ic2VydmVycy5sZW5ndGg+MCYmdGhpcy5uZ1pvbmUucnVuKCgpPT57dGhpcy5jb3B5U3ViamVjdC5uZXh0KGEpfSl9cHVzaENvcHlSZXBvbnNlKGEpe3RoaXMucHVzaENvcHlSZXNwb25zZShhKX19cmV0'@;
put 'dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkoc3IoVW8pLHNyKEZhKSxzcihnSHQsOCkpfSxsLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmwsZmFjdG9yeTpsLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGx9KSgpLHlIdD0oKCk9PntjbGFzcyBse2NvbnN0'@;
put 'cnVjdG9yKGEsZixkLGgpe3RoaXMubmdab25lPWEsdGhpcy5ob3N0PWYsdGhpcy5yZW5kZXJlcj1kLHRoaXMuY2xpcGJvYXJkU3J2PWgsdGhpcy5jYk9uU3VjY2Vzcz1uZXcgeHIsdGhpcy5jYk9uRXJyb3I9bmV3IHhyLHRoaXMub25DbGljaz1tPT57dGhpcy5jbGlwYm9hcmRTcnYuaXNTdXBw'@;
put 'b3J0ZWQ/dGhpcy50YXJnZXRFbG0mJnRoaXMuY2xpcGJvYXJkU3J2LmlzVGFyZ2V0VmFsaWQodGhpcy50YXJnZXRFbG0pP3RoaXMuaGFuZGxlUmVzdWx0KHRoaXMuY2xpcGJvYXJkU3J2LmNvcHlGcm9tSW5wdXRFbGVtZW50KHRoaXMudGFyZ2V0RWxtKSx0aGlzLnRhcmdldEVsbS52YWx1ZSxt'@;
put 'KTp0aGlzLmNiQ29udGVudCYmdGhpcy5oYW5kbGVSZXN1bHQodGhpcy5jbGlwYm9hcmRTcnYuY29weUZyb21Db250ZW50KHRoaXMuY2JDb250ZW50LHRoaXMuY29udGFpbmVyKSx0aGlzLmNiQ29udGVudCxtKTp0aGlzLmhhbmRsZVJlc3VsdCghMSx2b2lkIDAsbSl9fW5nT25Jbml0KCl7dGhp'@;
put 'cy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLmNsaWNrTGlzdGVuZXI9dGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQsImNsaWNrIix0aGlzLm9uQ2xpY2spfSl9bmdPbkRlc3Ryb3koKXt0aGlzLmNsaWNrTGlzdGVuZXImJnRoaXMuY2xpY2tM'@;
put 'aXN0ZW5lcigpLHRoaXMuY2xpcGJvYXJkU3J2LmRlc3Ryb3kodGhpcy5jb250YWluZXIpfWhhbmRsZVJlc3VsdChhLGYsZCl7bGV0IGg9e2lzU3VjY2VzczphLGNvbnRlbnQ6ZixzdWNjZXNzTWVzc2FnZTp0aGlzLmNiU3VjY2Vzc01zZyxldmVudDpkfTthP3RoaXMuY2JPblN1Y2Nlc3Mub2Jz'@;
put 'ZXJ2ZWQmJnRoaXMubmdab25lLnJ1bigoKT0+e3RoaXMuY2JPblN1Y2Nlc3MuZW1pdChoKX0pOnRoaXMuY2JPbkVycm9yLm9ic2VydmVkJiZ0aGlzLm5nWm9uZS5ydW4oKCk9Pnt0aGlzLmNiT25FcnJvci5lbWl0KGgpfSksdGhpcy5jbGlwYm9hcmRTcnYucHVzaENvcHlSZXNwb25zZShoKX19'@;
put 'cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCkocnQoVW8pLHJ0KFZpKSxydChqbykscnQodkh0KSl9LGwuXHUwMjc1ZGlyPVNyKHt0eXBlOmwsc2VsZWN0b3JzOltbIiIsIm5neENsaXBib2FyZCIsIiJdXSxpbnB1dHM6e3RhcmdldEVsbTpbIm5neENsaXBi'@;
put 'b2FyZCIsInRhcmdldEVsbSJdLGNvbnRhaW5lcjoiY29udGFpbmVyIixjYkNvbnRlbnQ6ImNiQ29udGVudCIsY2JTdWNjZXNzTXNnOiJjYlN1Y2Nlc3NNc2cifSxvdXRwdXRzOntjYk9uU3VjY2VzczoiY2JPblN1Y2Nlc3MiLGNiT25FcnJvcjoiY2JPbkVycm9yIn19KSxsfSkoKSxiSHQ9KCgp'@;
put 'PT57Y2xhc3MgbHt9cmV0dXJuIGwuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1bW9kPURpKHt0eXBlOmx9KSxsLlx1MDI3NWluaj14aSh7aW1wb3J0czpbYm9dfSksbH0pKCk7dmFyIF9IdD1UKDUxNzE0KTtsZXQgd0h0PSgoKT0+e2NsYXNzIGx7dHJh'@;
put 'bnNmb3JtKGEsLi4uZil7Y29uc3QgZD1wYXJzZUludChmWzBdKXx8MixoPSJudW1iZXIiIT10eXBlb2YgYT9wYXJzZUludChhKTphO3JldHVybigwLF9IdC5SKShoLGQpfX1yZXR1cm4gbC5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKX0sbC5cdTAyNzVwaXBlPVZsKHtu'@;
put 'YW1lOiJjb252ZXJ0U2l6ZSIsdHlwZTpsLHB1cmU6ITB9KSxsfSkoKTtjb25zdCBDSHQ9WyJxdWVyeUZpbHRlciJdO2Z1bmN0aW9uIFNIdChsLGMpezEmbCYmKHllKDAsImRpdiIsNTApLHRuKDEsImNsci1zcGlubmVyIiw1MSksQ2UoKSl9ZnVuY3Rpb24gTUh0KGwsYyl7MSZsJiZ0bigwLCJj'@;
put 'bHItaWNvbiIsNTgpfWZ1bmN0aW9uIGtIdChsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImNsci1pY29uIiw1OSksRXQoImNsaWNrIixmdW5jdGlvbigpe1V0KGEpO2NvbnN0IGQ9R2UoMik7cmV0dXJuIGQubGlicmFyaWVzU2VhcmNoPSIiLFp0KGQubGlicmFyeU9uRmlsdGVyKCkp'@;
put 'fSksQ2UoKX19ZnVuY3Rpb24gRUh0KGwsYyl7aWYoMSZsKXtjb25zdCBhPVpuKCk7eWUoMCwiY2xyLXRyZWUtbm9kZSIsNTIpKDEsImRpdiIsNTMpKDIsImlucHV0Iiw1NCw1NSksRXQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGQpe3JldHVybiBVdChhKSxadChHZSgpLmxpYnJhcmllc1Nl'@;
put 'YXJjaD1kKX0pKCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gVXQoYSksWnQoR2UoKS5saWJyYXJ5T25GaWx0ZXIoKSl9KSxDZSgpLHR0KDQsTUh0LDEsMCwiY2xyLWljb24iLDU2KSx0dCg1LGtIdCwxLDAsImNsci1pY29uIiw1NyksQ2UoKSgpfWlmKDImbCl7Y29uc3QgYT1RaSgzKSxmPUdl'@;
put 'KCk7U2UoMiksUmUoIm5nTW9kZWwiLGYubGlicmFyaWVzU2VhcmNoKSxTZSgyKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksU2UoMSksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiB4SHQobCxjKXsxJmwmJnRuKDAsImNsci1pY29uIiw1OCl9ZnVuY3Rpb24gQUh0'@;
put 'KGwsYyl7aWYoMSZsKXtjb25zdCBhPVpuKCk7eWUoMCwiY2xyLWljb24iLDU5KSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7VXQoYSksR2UoKTtjb25zdCBkPVFpKDMpLGg9R2UoMikuJGltcGxpY2l0LG09R2UoKTtyZXR1cm4gZC52YWx1ZT0iIixoLnNlYXJjaFN0cmluZz0iIixadChtLnRyZWVP'@;
put 'bkZpbHRlcihoLCJ0YWJsZXMiKSl9KSxDZSgpfX1mdW5jdGlvbiBUSHQobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJjbHItdHJlZS1ub2RlIiw1MikoMSwiZGl2Iiw1MykoMiwiaW5wdXQiLDY0LDY1KSxFdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oZCl7cmV0dXJuIFV0KGEp'@;
put 'LFp0KEdlKDIpLiRpbXBsaWNpdC5zZWFyY2hTdHJpbmc9ZCl9KSgia2V5dXAiLGZ1bmN0aW9uKCl7VXQoYSk7Y29uc3QgZD1HZSgyKS4kaW1wbGljaXQ7cmV0dXJuIFp0KEdlKCkudHJlZU9uRmlsdGVyKGQsInRhYmxlcyIpKX0pLENlKCksdHQoNCx4SHQsMSwwLCJjbHItaWNvbiIsNTYpLHR0'@;
put 'KDUsQUh0LDEsMCwiY2xyLWljb24iLDU3KSxDZSgpKCl9aWYoMiZsKXtjb25zdCBhPVFpKDMpLGY9R2UoMikuJGltcGxpY2l0O1NlKDIpLFJlKCJpZCIsInNlYXJjaF8iK2YuTElCUkFSWVJFRikoIm5nTW9kZWwiLGYuc2VhcmNoU3RyaW5nKSxTZSgyKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5n'@;
put 'dGg8MSksU2UoMSksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBPSHQobCxjKXsxJmwmJnRuKDAsImNsci1pY29uIiw3Myl9ZnVuY3Rpb24gREh0KGwsYyl7MSZsJiZ0bigwLCJjbHItaWNvbiIsNzQpfWZ1bmN0aW9uIElIdChsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigp'@;
put 'O3llKDAsImJ1dHRvbiIsNjkpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtVdChhKTtjb25zdCBkPUdlKCkubmdWYXIsaD1HZSgpLiRpbXBsaWNpdCxtPUdlKDIpLiRpbXBsaWNpdCxfPUdlKCk7cmV0dXJuIFp0KGQ/IiI6Xy5vblRhYmxlQ2xpY2soaCxtKSl9KSxXcigxLDcwKSx0dCgyLE9IdCwx'@;
put 'LDAsImNsci1pY29uIiw3MSksdHQoMyxESHQsMSwwLCJjbHItaWNvbiIsNzIpLEdyKCksWWUoNCksQ2UoKX1pZigyJmwpe2NvbnN0IGE9R2UoKS5uZ1ZhcixmPUdlKCkuJGltcGxpY2l0LGQ9R2UoMikuJGltcGxpY2l0LGg9R2UoKTtncigiZGMtbG9ja2VkLWNvbnRyb2wiLGEpKCJ0YWJsZS1h'@;
put 'Y3RpdmUiLGgubGliVGFiQWN0aXZlKGQuTElCUkFSWVJFRixmKSksU2UoMSksUmUoIm5nU3dpdGNoIixmLmluY2x1ZGVzKCItRkMiKSksU2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsITApLFNlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLCExKSxTZSgxKSx3cigiICIsZi5yZXBsYWNlKCItRkMiLCIi'@;
put 'KSwiICIpfX1mdW5jdGlvbiBSSHQobCxjKXsxJmwmJih5ZSgwLCJzcGFuIiksWWUoMSwiIFRvIHVubG9jayBhbGwgdGFibGVzLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8gIiksQ2UoKSl9ZnVuY3Rpb24gTEh0KGwsYyl7aWYoMSZsJiYoeWUoMCwiY2xyLXRvb2x0aXAtY29u'@;
put 'dGVudCIsNzUpLHR0KDEsUkh0LDIsMCwic3BhbiIsMzgpLENlKCkpLDImbCl7Y29uc3QgYT1HZSgpLm5nVmFyO1NlKDEpLFJlKCJuZ0lmIixhKX19ZnVuY3Rpb24gUEh0KGwsYyl7aWYoMSZsJiYoeWUoMCwiY2xyLXRvb2x0aXAiKSx0dCgxLElIdCw1LDgsImJ1dHRvbiIsNjcpLHR0KDIsTEh0'@;
put 'LDIsMSwiY2xyLXRvb2x0aXAtY29udGVudCIsNjgpLENlKCkpLDImbCl7Y29uc3QgYT1HZSgpLiRpbXBsaWNpdDtTZSgxKSxSZSgibmdJZiIsYS5sZW5ndGg+MCl9fWZ1bmN0aW9uIEZIdChsLGMpe2lmKDEmbCYmKHllKDAsImNsci10cmVlLW5vZGUiKSx0dCgxLFBIdCwzLDEsImNsci10b29s'@;
put 'dGlwIiw2NiksQ2UoKSksMiZsKXtjb25zdCBhPWMuaW5kZXgsZj1HZSgzKTtTZSgxKSxSZSgibmdWYXIiLGErMT5mLmxpY2VuY2VTdGF0ZS52YWx1ZS50YWJsZXNfaW5fbGlicmFyeV9saW1pdCl9fWZ1bmN0aW9uIEhIdChsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImNsci10cmVl'@;
put 'LW5vZGUiLDYxKSxFdCgiY2xpY2siLGZ1bmN0aW9uKGQpe1V0KGEpO2NvbnN0IGg9R2UoKS4kaW1wbGljaXQ7cmV0dXJuIFp0KEdlKCkudHJlZU5vZGVDbGlja2VkKGQsaCkpfSkoImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihkKXtyZXR1cm4gVXQoYSksWnQoR2UoKS4kaW1wbGljaXQu'@;
put 'ZXhwYW5kZWQ9ZCl9KSx5ZSgxLCJwIiw2MiksRXQoImNsaWNrIixmdW5jdGlvbigpe1V0KGEpO2NvbnN0IGQ9R2UoKS4kaW1wbGljaXQsaD1HZSgpO3JldHVybiBoLmxpYj1kLkxJQlJBUllSRUYsWnQoaC5saWJyYXJ5T25DbGljayhkLkxJQlJBUllSRUYsZCkpfSksdG4oMiwiY2xyLWljb24i'@;
put 'LDYzKSxZZSgzKSxDZSgpLHR0KDQsVEh0LDYsNCwiY2xyLXRyZWUtbm9kZSIsMiksdHQoNSxGSHQsMiwxLCJjbHItdHJlZS1ub2RlIiwzKSxDZSgpfWlmKDImbCl7Y29uc3QgYT1HZSgpLiRpbXBsaWNpdDtncigiY2xyLWV4cGFuZGVkIixhLmV4cGFuZGVkKSxSZSgiY2xyRXhwYW5kZWQiLGEu'@;
put 'ZXhwYW5kZWQpKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdUYWJsZXMmJiFhLnRhYmxlcyksU2UoMyksd3IoIiAiLGEuTElCUkFSWU5BTUUsIiAiKSxTZSgxKSxSZSgibmdJZiIsYS50YWJsZXMpLFNlKDEpLFJlKCJuZ0Zvck9mIixhLnRhYmxlcyl9fWZ1bmN0aW9uIE5IdChsLGMpe2lmKDEmbCYm'@;
put 'KFdyKDApLHR0KDEsSEh0LDYsNywiY2xyLXRyZWUtbm9kZSIsNjApLEdyKCkpLDImbCl7Y29uc3QgYT1jLiRpbXBsaWNpdDtTZSgxKSxSZSgibmdJZiIsIWEuaGlkZGVuJiZhLmluRm9yZWdyb3VuZCl9fWZ1bmN0aW9uIFZIdChsLGMpezEmbCYmKHllKDAsImRpdiIsNzYpKDEsInNwYW4iLDc3'@;
put 'KSxZZSgyLCIgTG9hZGluZy4uLiAiKSxDZSgpKCkpfWZ1bmN0aW9uIEJIdChsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImRpdiIsNzgpKDEsImRpdiIsNzkpKDIsImRpdiIsODApKDMsImRpdiIsODEpKDQsImJ1dHRvbiIsODIpLHRuKDUsImNsci1pY29uIiw4MyksQ2UoKSx5ZSg2'@;
put 'LCJoMyIsNDMpLFllKDcsIkVycm9yIiksQ2UoKSgpLHllKDgsImRpdiIsMTApKDksInAiKSxZZSgxMCwiWW91IGNhbm5vdCBzdWJtaXQgZW1wdHkgY2xhdXNlcyIpLENlKCkoKSx5ZSgxMSwiZGl2IiwyMSkoMTIsImJ1dHRvbiIsODQpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gVXQo'@;
put 'YSksWnQoR2UoKS5udWxsVmFyaWFibGVzPSExKX0pLFllKDEzLCIgT2sgIiksQ2UoKSgpKCkoKSgpfX1mdW5jdGlvbiBqSHQobCxjKXsxJmwmJnRuKDAsImRpdiIsODUpfWZ1bmN0aW9uIHpIdChsLGMpezEmbCYmdG4oMCwiYXBwLXF1ZXJ5IixudWxsLDg2KX1mdW5jdGlvbiBVSHQobCxjKXsx'@;
put 'JmwmJih5ZSgwLCJkaXYiLDg3KSgxLCJzcGFuIiw4OCksWWUoMiwiIExvYWRpbmcuLi4gIiksQ2UoKSx5ZSgzLCJkaXYiKSg0LCJoNCIpLFllKDUsIkxvYWRpbmcgdGFibGUgdmlld2VyIiksQ2UoKSgpKCkpfWZ1bmN0aW9uIFpIdChsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImNs'@;
put 'ci1pY29uIiwxMTEpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtVdChhKSxHZSgpO2NvbnN0IGQ9UWkoNSk7cmV0dXJuIFp0KEdlKDIpLnNlYXJjaFRhYmxlKGQpKX0pLENlKCl9fWZ1bmN0aW9uIFlIdChsLGMpezEmbCYmKHllKDAsInNwYW4iLDExMiksWWUoMSwiIExvYWRpbmcuLi4gIiksQ2Uo'@;
put 'KSl9ZnVuY3Rpb24gV0h0KGwsYyl7MSZsJiZ0bigwLCJjbHItaWNvbiIsMTEzKX1mdW5jdGlvbiBHSHQobCxjKXtpZigxJmwmJih5ZSgwLCJzcGFuIiksWWUoMSksd2woMiwidGhvdXNhbmRTZXBhcmF0b3IiKSxDZSgpKSwyJmwpe2NvbnN0IGE9R2UoNCk7U2UoMSkseWcoIiAoIix3ZygyLDQs'@;
put 'YS5udW1iZXJPZlJvd3MsIiwiKSwiICIsMT09PWEubnVtYmVyT2ZSb3dzPyJyb3ciOiJyb3dzIiwiLCAiLGEuZmlsdGVyQ29scy5sZW5ndGgsIiIsMT09PWEuZmlsdGVyQ29scy5sZW5ndGg/IiBjb2wiOiIgY29scyIsIikgIil9fWZ1bmN0aW9uICRIdChsLGMpe2lmKDEmbCl7Y29uc3QgYT1a'@;
put 'bigpO3llKDAsImgzIiwxMTQpLFllKDEpLHR0KDIsR0h0LDMsNywic3BhbiIsMzgpLHllKDMsImNsci1pY29uIiwxMTUpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gVXQoYSksWnQoR2UoMykucmVsb2FkVGFibGVEYXRhKCkpfSksQ2UoKSgpfWlmKDImbCl7Y29uc3QgYT1HZSgzKTtT'@;
put 'ZSgxKSx3cigiICIsbnVsbD09YS50YWJsZVRpdGxlP251bGw6YS50YWJsZVRpdGxlLnJlcGxhY2UoIi1GQyIsIiIpLCIgIiksU2UoMSksUmUoIm5nSWYiLG51bGwhPT1hLm51bWJlck9mUm93cyl9fWZ1bmN0aW9uIEtIdChsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsImJ1dHRvbiIs'@;
put 'MTIxKSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFV0KGEpLFp0KEdlKDUpLmVkaXRUYWJsZSgpKX0pLHRuKDEsImNsci1pY29uIiwxMjgpLHllKDIsInNwYW4iKSxZZSgzLCJFZGl0IiksQ2UoKSgpfX1mdW5jdGlvbiBxSHQobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJi'@;
put 'dXR0b24iLDEyMSksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBVdChhKSxadChHZSg1KS5nb1RvTGluZWFnZSgpKX0pLHRuKDEsImNsci1pY29uIiwxMjkpLHllKDIsInNwYW4iKSxZZSgzLCJMaW5lYWdlIiksQ2UoKSgpfX1mdW5jdGlvbiBYSHQobCxjKXtpZigxJmwpe2NvbnN0IGE9'@;
put 'Wm4oKTt5ZSgwLCJjbHItZHJvcGRvd24tbWVudSIsMTIwKSgxLCJidXR0b24iLDEyMSksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBVdChhKSxadChHZSg0KS5uZXdWaWV3Ym94KCkpfSksdG4oMiwiY2xyLWljb24iLDEyMikseWUoMywic3BhbiIpLFllKDQsIlZpZXdib3hlcyIpLENl'@;
put 'KCkoKSx0dCg1LEtIdCw0LDAsImJ1dHRvbiIsMTIzKSx0dCg2LHFIdCw0LDAsImJ1dHRvbiIsMTIzKSx5ZSg3LCJidXR0b24iLDEyNCksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBVdChhKSxadChHZSg0KS5vcGVuUWIoKSl9KSx0big4LCJjbHItaWNvbiIsMTI1KSx5ZSg5LCJzcGFu'@;
put 'IiksWWUoMTAsIkZpbHRlciIpLENlKCkoKSx5ZSgxMSwiYnV0dG9uIiwxMjEpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gVXQoYSksWnQoR2UoNCkub3BlbkRvd25sb2FkPSEwKX0pLHRuKDEyLCJjbHItaWNvbiIsMTI2KSx5ZSgxMywic3BhbiIpLFllKDE0LCJEb3dubG9hZCIpLENl'@;
put 'KCkoKSx5ZSgxNSwiYnV0dG9uIiwxMjEpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gVXQoYSksWnQoR2UoNCkuc2hvd1dlYlF1ZXJ5KCkpfSksdG4oMTYsImNsci1pY29uIiwxMjcpLHllKDE3LCJzcGFuIiksWWUoMTgsIldlYiBRdWVyeSBVUkwiKSxDZSgpKCkoKX1pZigyJmwpe2Nv'@;
put 'bnN0IGE9R2UoNCk7U2UoNSksUmUoIm5nSWYiLGEudGFibGVFZGl0RXhpc3RzKCkpLFNlKDEpLFJlKCJuZ0lmIixhLnRhYmxldXJpKX19ZnVuY3Rpb24gSkh0KGwsYyl7MSZsJiYoeWUoMCwiY2xyLWRyb3Bkb3duIiwxMTYpKDEsImJ1dHRvbiIsMTE3KSx0bigyLCJjbHItaWNvbiIsMTE4KSxZ'@;
put 'ZSgzLCIgb3B0aW9ucyAiKSxDZSgpLHR0KDQsWEh0LDE5LDIsImNsci1kcm9wZG93bi1tZW51IiwxMTkpLENlKCkpLDImbCYmUmUoImNsckNsb3NlTWVudU9uSXRlbUNsaWNrIiwhMCl9ZnVuY3Rpb24gUUh0KGwsYyl7aWYoMSZsJiYoeWUoMCwiZGl2IiwxMzApKDEsInNwYW4iKSxZZSgyLCJG'@;
put 'SUxURVIgOiAiKSx5ZSgzLCJiIiksWWUoNCksQ2UoKSgpKCkpLDImbCl7Y29uc3QgYT1HZSgzKTtTZSg0KSxhcihhLnF1ZXJ5VGV4dCl9fWNvbnN0IGVOdD1mdW5jdGlvbigpe3JldHVyblsiIiwiICJdfTtmdW5jdGlvbiB0TnQobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJkaXYi'@;
put 'LDk1KSgxLCJzZWN0aW9uIiw5NikoMiwiZm9ybSIsOTcpKDMsImRpdiIsOTgpKDQsImlucHV0Iiw5OSwxMDApLEV0KCJrZXl1cC5lbnRlciIsZnVuY3Rpb24oKXtVdChhKTtjb25zdCBkPVFpKDUpO3JldHVybiBadChHZSgyKS5zZWFyY2hUYWJsZShkKSl9KSxDZSgpLHR0KDYsWkh0LDEsMCwi'@;
put 'Y2xyLWljb24iLDEwMSksdHQoNyxZSHQsMiwwLCJzcGFuIiwxMDIpLENlKCkseWUoOCwiY2xyLWNoZWNrYm94LWNvbnRhaW5lciIpKDksImNsci1jaGVja2JveC13cmFwcGVyIikoMTAsImlucHV0IiwxMDMpLEV0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihkKXtyZXR1cm4gVXQoYSksWnQo'@;
put 'R2UoMikuc2VhcmNoTnVtZXJpYz1kKX0pLENlKCkseWUoMTEsImxhYmVsIiksWWUoMTIsIk51bWVyaWMiKSxDZSgpKCkoKSgpKCkseWUoMTMsImRpdiIsMTA0KSgxNCwiY2xyLWljb24iLDEwNSksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBVdChhKSxadChHZSgyKS5kYXRhc2V0SW5m'@;
put 'bz0hMCl9KSxDZSgpLHR0KDE1LFdIdCwxLDAsImNsci1pY29uIiwxMDYpLHR0KDE2LCRIdCw0LDIsImgzIiwxMDcpLENlKCkseWUoMTcsImRpdiIsMTA4KSx0dCgxOCxKSHQsNSwxLCJjbHItZHJvcGRvd24iLDEwOSksQ2UoKSx0dCgxOSxRSHQsNSwxLCJkaXYiLDExMCksQ2UoKX1pZigyJmwp'@;
put 'e2NvbnN0IGE9R2UoMik7U2UoNCksUmUoInR5cGUiLGEuc2VhcmNoTnVtZXJpYz8ibnVtYmVyIjoidGV4dCIpLFNlKDIpLFJlKCJuZ0lmIiwhYS5zZWFyY2hMb2FkaW5nKSxTZSgxKSxSZSgibmdJZiIsYS5zZWFyY2hMb2FkaW5nKSxTZSgzKSxSZSgibmdNb2RlbCIsYS5zZWFyY2hOdW1lcmlj'@;
put 'KSxTZSg1KSxSZSgibmdJZiIsbnVsbD09YS50YWJsZVRpdGxlP251bGw6YS50YWJsZVRpdGxlLmluY2x1ZGVzKCItRkMiKSksU2UoMSksUmUoIm5nSWYiLGEudGFibGVUaXRsZSYmYS50YWJsZVRpdGxlLmxlbmd0aD4wKSxTZSgyKSxSZSgibmdJZiIsYS50YWJsZVRpdGxlJiYhYS5hYm9ydEFj'@;
put 'dGl2ZSksU2UoMSksUmUoIm5nSWYiLCIxPTEiIT09YS5xdWVyeVRleHQmJiFYYSg4LGVOdCkuaW5jbHVkZXMoYS5xdWVyeVRleHQpJiYhYS5hYm9ydEFjdGl2ZSl9fWZ1bmN0aW9uIG5OdChsLGMpezEmbCYmKHllKDAsImRpdiIsMTMxKSx0bigxLCJjbHItaWNvbiIsMTMyKSx5ZSgyLCJoMyIs'@;
put 'MTMzKSxZZSgzLCJQbGVhc2Ugc2VsZWN0IGEgbGlicmFyeSIpLENlKCkoKSl9ZnVuY3Rpb24gck50KGwsYyl7MSZsJiZ0bigwLCJjbHItc3Bpbm5lciIsNTEpfWZ1bmN0aW9uIGlOdChsLGMpezEmbCYmKHllKDAsImRpdiIsMTQxKSx0bigxLCJjbHItaWNvbiIsMTQyKSx5ZSgyLCJoMyIsMTMz'@;
put 'KSxZZSgzLCJQbGVhc2Ugc2VsZWN0IGEgdGFibGUiKSxDZSgpKCkpfWZ1bmN0aW9uIG9OdChsLGMpe2lmKDEmbCl7Y29uc3QgYT1abigpO3llKDAsInAiLDE0NSksWWUoMSwiIE5vIGxpYnJhcnkgaW5mbyBmb3VuZC4gQ2xpY2sgIikseWUoMiwiY2xyLWljb24iLDE0NiksRXQoImNsaWNrIixm'@;
put 'dW5jdGlvbigpe3JldHVybiBVdChhKSxadChHZSg0KS5yZWxvYWRMaWJJbmZvKCkpfSksQ2UoKSxZZSgzLCIgYnV0dG9uIHRvIHJlZnJlc2guICIpLENlKCl9fWZ1bmN0aW9uIGFOdChsLGMpe2lmKDEmbCYmKHllKDAsInRyIikoMSwidGQiLDE0NyksWWUoMiwiRU5HSU5FOiIpLENlKCkseWUo'@;
put 'MywidGQiLDE0OCksWWUoNCksQ2UoKSgpKSwyJmwpe2NvbnN0IGE9R2UoNSk7U2UoNCksd3IoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uRU5HSU5FOiIiLCIgIil9fWZ1bmN0aW9uIGxOdChsLGMpe2lmKDEmbCYmKHllKDAsInRyIikoMSwidGQiLDE0NyksWWUoMiwiTElCSUQ6Iiks'@;
put 'Q2UoKSx5ZSgzLCJ0ZCIsMTQ4KSxZZSg0KSxDZSgpKCkpLDImbCl7Y29uc3QgYT1HZSg1KTtTZSg0KSx3cigiICIsYS5saWJpbmZvWzBdP2EubGliaW5mb1swXS5MSUJJRDoiIiwiICIpfX1mdW5jdGlvbiBzTnQobCxjKXtpZigxJmwmJih5ZSgwLCJ0ciIpKDEsInRkIiwxNDcpLFllKDIsIkxJ'@;
put 'Qk5BTUU6IiksQ2UoKSx5ZSgzLCJ0ZCIsMTQ4KSxZZSg0KSxDZSgpKCkpLDImbCl7Y29uc3QgYT1HZSg1KTtTZSg0KSx3cigiICIsYS5saWJpbmZvWzBdP2EubGliaW5mb1swXS5MSUJOQU1FOiIiLCIgIil9fWZ1bmN0aW9uIHVOdChsLGMpe2lmKDEmbCYmKHllKDAsInRyIikoMSwidGQiLDE0'@;
put 'NyksWWUoMiwiTElCU0laRToiKSxDZSgpLHllKDMsInRkIiwxNDgpLFllKDQpLHdsKDUsImNvbnZlcnRTaXplIiksQ2UoKSgpKSwyJmwpe2NvbnN0IGE9R2UoNSk7U2UoNCksd3IoIiAiLGEubGliaW5mb1swXT9Kcyg1LDEsYS5saWJpbmZvWzBdLkxJQlNJWkUpOiIiLCIgIil9fWZ1bmN0aW9u'@;
put 'IGNOdChsLGMpe2lmKDEmbCYmKHllKDAsInRyIikoMSwidGQiLDE0NyksWWUoMiwiT1dORVJTOiIpLENlKCkseWUoMywidGQiLDE0OCksWWUoNCksQ2UoKSgpKSwyJmwpe2NvbnN0IGE9R2UoNSk7U2UoNCksd3IoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uT1dORVJTOiIiLCIgIil9'@;
put 'fWZ1bmN0aW9uIGZOdChsLGMpe2lmKDEmbCYmKHllKDAsInRyIikoMSwidGQiLDE0NyksWWUoMiwiUEFUSFM6IiksQ2UoKSx5ZSgzLCJ0ZCIsMTQ4KSxZZSg0KSxDZSgpKCkpLDImbCl7Y29uc3QgYT1HZSg1KTtTZSg0KSx3cigiICIsYS5saWJpbmZvWzBdP2EubGliaW5mb1swXS5QQVRIUzoi'@;
put 'IiwiICIpfX1mdW5jdGlvbiBkTnQobCxjKXtpZigxJmwmJih5ZSgwLCJ0ciIpKDEsInRkIiwxNDcpLFllKDIsIlBFUk1TOiIpLENlKCkseWUoMywidGQiLDE0OCksWWUoNCksQ2UoKSgpKSwyJmwpe2NvbnN0IGE9R2UoNSk7U2UoNCksd3IoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0u'@;
put 'UEVSTVM6IiIsIiAiKX19ZnVuY3Rpb24gaE50KGwsYyl7aWYoMSZsJiYoeWUoMCwidHIiKSgxLCJ0ZCIsMTQ3KSxZZSgyLCJTQ0hFTUFTOiIpLENlKCkseWUoMywidGQiLDE0OCksWWUoNCksQ2UoKSgpKSwyJmwpe2NvbnN0IGE9R2UoNSk7U2UoNCksd3IoIiAiLGEubGliaW5mb1swXT9hLmxp'@;
put 'YmluZm9bMF0uU0NIRU1BUzoiIiwiICIpfX1mdW5jdGlvbiBwTnQobCxjKXtpZigxJmwmJih5ZSgwLCJ0ciIpKDEsInRkIiwxNDcpLFllKDIsIlRBQkxFX0NOVDoiKSxDZSgpLHllKDMsInRkIiwxNDgpLFllKDQpLENlKCkoKSksMiZsKXtjb25zdCBhPUdlKDUpO1NlKDQpLHdyKCIgIixhLmxp'@;
put 'YmluZm9bMF0/YS5saWJpbmZvWzBdLlRBQkxFX0NOVDoiIiwiICIpfX1mdW5jdGlvbiBtTnQobCxjKXtpZigxJmwmJihXcigwKSx5ZSgxLCJ0YWJsZSIpLHR0KDIsYU50LDUsMSwidHIiLDM4KSx0dCgzLGxOdCw1LDEsInRyIiwzOCksdHQoNCxzTnQsNSwxLCJ0ciIsMzgpLHR0KDUsdU50LDYs'@;
put 'MywidHIiLDM4KSx0dCg2LGNOdCw1LDEsInRyIiwzOCksdHQoNyxmTnQsNSwxLCJ0ciIsMzgpLHR0KDgsZE50LDUsMSwidHIiLDM4KSx0dCg5LGhOdCw1LDEsInRyIiwzOCksdHQoMTAscE50LDUsMSwidHIiLDM4KSxDZSgpLEdyKCkpLDImbCl7Y29uc3QgYT1HZSg0KTtTZSgyKSxSZSgibmdJ'@;
put 'ZiIsIiIhPT1hLmxpYmluZm9bMF0uRU5HSU5FKSxTZSgxKSxSZSgibmdJZiIsIiIhPT1hLmxpYmluZm9bMF0uTElCSUQpLFNlKDEpLFJlKCJuZ0lmIiwiIiE9PWEubGliaW5mb1swXS5MSUJOQU1FKSxTZSgxKSxSZSgibmdJZiIsbnVsbCE9PWEubGliaW5mb1swXS5MSUJTSVpFKSxTZSgxKSxS'@;
put 'ZSgibmdJZiIsIiIhPT1hLmxpYmluZm9bMF0uT1dORVJTKSxTZSgxKSxSZSgibmdJZiIsIiIhPT1hLmxpYmluZm9bMF0uUEFUSFMpLFNlKDEpLFJlKCJuZ0lmIiwiIiE9PWEubGliaW5mb1swXS5QRVJNUyksU2UoMSksUmUoIm5nSWYiLCIiIT09YS5saWJpbmZvWzBdLlNDSEVNQVMpLFNlKDEp'@;
put 'LFJlKCJuZ0lmIixudWxsIT09YS5saWJpbmZvWzBdLlRBQkxFX0NOVCl9fWZ1bmN0aW9uIGdOdChsLGMpe2lmKDEmbCYmKHllKDAsImRpdiIsMTQzKSx0dCgxLG9OdCw0LDAsInAiLDE0NCksdHQoMixtTnQsMTEsOSwibmctY29udGFpbmVyIiwzOCksQ2UoKSksMiZsKXtjb25zdCBhPUdlKDMp'@;
put 'O1NlKDEpLFJlKCJuZ0lmIixhLmxpYmluZm8ubGVuZ3RoPDEpLFNlKDEpLFJlKCJuZ0lmIixhLmxpYmluZm8ubGVuZ3RoPjApfX1mdW5jdGlvbiB2TnQobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTtXcigwKSx5ZSgxLCJkaXYiLDEzNCksdG4oMiwic2VjdGlvbiIsOTYpLHllKDMsImRpdiIs'@;
put 'MTM1KSg0LCJoMyIsMTM2KSxZZSg1KSxDZSgpLHllKDYsImNsci1pY29uIiwxMTUpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gVXQoYSksWnQoR2UoMikucmVsb2FkTGliSW5mbygpKX0pLENlKCkoKSx0big3LCJkaXYiLDEwOCksQ2UoKSx5ZSg4LCJkaXYiLDEzNyksdHQoOSxyTnQs'@;
put 'MSwwLCJjbHItc3Bpbm5lciIsMTM4KSxDZSgpLHR0KDEwLGlOdCw0LDAsImRpdiIsMTM5KSx0dCgxMSxnTnQsMywyLCJkaXYiLDE0MCksR3IoKX1pZigyJmwpe2NvbnN0IGE9R2UoMik7U2UoNSksd3IoIiAiLGEubGliLCIgIiksU2UoNCksUmUoIm5nSWYiLG51bGw9PT1hLmxpYmluZm8pLFNl'@;
put 'KDEpLFJlKCJuZ0lmIixudWxsIT09YS5saWJpbmZvKSxTZSgxKSxSZSgibmdJZiIsbnVsbCE9PWEubGliaW5mbyl9fWZ1bmN0aW9uIHlOdChsLGMpezEmbCYmKHllKDAsImgzIiwxMzMpLFllKDEsIiBObyBkYXRhIGZvdW5kIHdpdGggZ2l2ZW4gY29uZGl0aW9ucyAiKSxDZSgpKX1mdW5jdGlv'@;
put 'biBiTnQobCxjKXsxJmwmJih5ZSgwLCJoMyIsMTMzKSxZZSgxLCIgTm8gZGF0YSBmb3VuZCBkdWUgdG8gc2FzIHJlcXVlc3QgZXJyb3IgIiksQ2UoKSl9ZnVuY3Rpb24gX050KGwsYyl7aWYoMSZsJiYoeWUoMCwiZGl2IiwxNDkpLHRuKDEsImNsci1pY29uIiwxNTApLHR0KDIseU50LDIsMCwi'@;
put 'aDMiLDE1MSksdHQoMyxiTnQsMiwwLCJoMyIsMTUxKSxDZSgpKSwyJmwpe2NvbnN0IGE9R2UoMik7U2UoMiksUmUoIm5nSWYiLGEubm9EYXRhKSxTZSgxKSxSZSgibmdJZiIsYS5ub0RhdGFSZXFFcnIpfX1mdW5jdGlvbiB3TnQobCxjKXtpZigxJmwmJih5ZSgwLCJkaXYiLDE1MiksdG4oMSwi'@;
put 'aG90LXRhYmxlIiwxNTMpLENlKCkpLDImbCl7Y29uc3QgYT1HZSgyKTtTZSgxKSxSZSgibXVsdGlDb2x1bW5Tb3J0aW5nIiwhMCkoInZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0Iiw1MCkoImRhdGEiLGEuaG90VGFibGUuZGF0YSkoImNvbEhlYWRlcnMiLGEuaG90VGFibGUuY29sSGVhZGVy'@;
put 'cykoImNvbHVtbnMiLGEuaG90VGFibGUuY29sdW1ucykoImNvcHlQYXN0ZSIsYS5ob3RUYWJsZS5jb3B5UGFzdGUpKCJjb250ZXh0TWVudSIsYS5ob3RUYWJsZS5jb250ZXh0TWVudSkoImZpbHRlcnMiLCEwKSgiZHJvcGRvd25NZW51IixhLmhvdFRhYmxlLmRyb3Bkb3duTWVudSkoImhlaWdo'@;
put 'dCIsYS5ob3RUYWJsZS5oZWlnaHQpKCJtb2RpZnlDb2xXaWR0aCIsYS5tYXhXaWR0aENoZWtlcikoImNlbGxzIixhLmhvdFRhYmxlLmNlbGxzKSgibWF4Um93cyIsYS5ob3RUYWJsZS5tYXhSb3dzKSgibWFudWFsQ29sdW1uUmVzaXplIiwhMCkoImxpY2Vuc2VLZXkiLGEuaG90VGFibGUubGlj'@;
put 'ZW5zZUtleSl9fWZ1bmN0aW9uIENOdChsLGMpe2lmKDEmbCYmKHllKDAsInAiLDE1NCksWWUoMSksdG4oMiwiY29udGFjdC1saW5rIiksQ2UoKSksMiZsKXtjb25zdCBhPUdlKDIpO1NlKDEpLHdyKCIgVG8gZGlzcGxheSBtb3JlIHRoYW4gIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJf'@;
put 'cm93c19hbGxvd2VkLCIgcm93cywgY29udGFjdCAiKX19ZnVuY3Rpb24gU050KGwsYyl7aWYoMSZsJiYoeWUoMCwiZGl2Iiw4OSksdHQoMSx0TnQsMjAsOSwiZGl2Iiw5MCksdHQoMixuTnQsNCwwLCJkaXYiLDkxKSx0dCgzLHZOdCwxMiw0LCJuZy1jb250YWluZXIiLDM4KSx0dCg0LF9OdCw0'@;
put 'LDIsImRpdiIsOTIpLHR0KDUsd050LDIsMTUsImRpdiIsOTMpLHllKDYsImRpdiIpLHR0KDcsQ050LDMsMSwicCIsOTQpLENlKCkoKSksMiZsKXtjb25zdCBhPUdlKCk7U2UoMSksUmUoIm5nSWYiLGEudGFibGUpLFNlKDEpLFJlKCJuZ0lmIiwhKGEubGlifHxhLnRhYmxlfHxhLm5vRGF0YVJl'@;
put 'cUVycnx8YS5ub0RhdGEpKSxTZSgxKSxSZSgibmdJZiIsIWEubm9EYXRhJiYhYS5ub0RhdGFSZXFFcnImJiFhLnRhYmxlJiZhLmxpYiksU2UoMSksUmUoIm5nSWYiLGEubm9EYXRhfHxhLm5vRGF0YVJlcUVyciksU2UoMSksUmUoIm5nSWYiLCFhLm5vRGF0YSYmIWEubm9EYXRhUmVxRXJyJiZh'@;
put 'LnRhYmxlKSxTZSgyKSxSZSgibmdJZiIsYS5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZCE9PWEuSW5maW5pdHkmJmEuaG90VGFibGUuZGF0YSYmYS5ob3RUYWJsZS5kYXRhLmxlbmd0aD5hLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkKX19bGV0'@;
put 'IEFGPSgoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmLGQsaCxtLF8sTyxYLGFlLHBlKXt0aGlzLmxpY2VuY2VTZXJ2aWNlPWEsdGhpcy5zYXNTdG9yZVNlcnZpY2U9Zix0aGlzLnNhc1NlcnZpY2U9ZCx0aGlzLnJvdXRlcj1oLHRoaXMucm91dGU9bSx0aGlzLmV2ZW50U2VydmljZT1fLHRo'@;
put 'aXMubG9nZ2VyU2VydmljZT1PLHRoaXMuaGVscGVyU2VydmljZT1YLHRoaXMubG9jYXRpb249YWUsdGhpcy5jZGY9cGUsdGhpcy5xdWVyeUZpbHRlckNvbXBMaXN0PW5ldyBVMix0aGlzLmxpYnJhcmllc1BhZ2luZz0hMSx0aGlzLmxpYnJhcmllc1NlYXJjaD0iIix0aGlzLmxpYnJhcnlUYWJs'@;
put 'ZXNSZWY9IiIsdGhpcy5saWJyYXJpZXNUcmVlRXhwYW5kZWQ9ITEsdGhpcy5saWJpbmZvPW51bGwsdGhpcy50YWJsZXVyaT1udWxsLHRoaXMuZmlsdGVyPSExLHRoaXMuZmlsdGVyQ29scz1bXSx0aGlzLm51bGxWYXJpYWJsZXM9ITEsdGhpcy5hYm9ydEFjdGl2ZT0hMSx0aGlzLnVybEZpbHRl'@;
put 'clBrPW51bGwsdGhpcy5xdWVyeVRleHQ9IiIsdGhpcy53ZWJRdWVyeVRleHQ9IiIsdGhpcy5xdWVyeUVycj0hMSx0aGlzLnRhYmxlRmxhZz0hMCx0aGlzLmxpYnJhcmllc0xvYWRpbmc9ITEsdGhpcy5sb2FkaW5nVGFibGVWaWV3PSExLHRoaXMuc3dpdGNoRmxhZz0hMSx0aGlzLm5vRGF0YT0h'@;
put 'MSx0aGlzLm5vRGF0YVJlcUVycj0hMSx0aGlzLnRhYmxlRGlzYWJsZT0hMSx0aGlzLmFjdGlvbkRpc2FibGU9ITEsdGhpcy5vcGVuRG93bmxvYWQ9ITEsdGhpcy53ZWJRdWVyeT0hMSx0aGlzLndlYlF1ZXJ5VGFiPSExLHRoaXMuZG93bmxvYWRGb3JtYXQ9IkNTViIsdGhpcy5zYXNqc0NvbmZp'@;
put 'Zz1uZXcgdjEuU0FTanNDb25maWcsdGhpcy5zZWFyY2hMb2FkaW5nPSExLHRoaXMuc2VhcmNoTnVtZXJpYz0hMSx0aGlzLm51bWJlck9mUm93cz1udWxsLHRoaXMuaGVhZGVyUGtzPVtdLHRoaXMuJGRhdGFGb3JtYXRzPW51bGwsdGhpcy5kYXRhc2V0SW5mbz0hMSx0aGlzLmRzbWV0YT1bXSx0'@;
put 'aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLkluZmluaXR5PTEvMCx0aGlzLmhvdFRhYmxlPXtkYXRhOltdLGNvbEhlYWRlcnM6W10sY29sdW1uczpbXSxoZWlnaHQ6IjEwMCUiLG1heFJvd3M6dGhpcy5saWNlbmNlU3RhdGUudmFsdWUudmll'@;
put 'd2VyX3Jvd3NfYWxsb3dlZHx8MS8wLHNldHRpbmdzOnt9LGFmdGVyR2V0Q29sSGVhZGVyOnZvaWQgMCxsaWNlbnNlS2V5OnZvaWQgMCxjb250ZXh0TWVudTpbImNvcHlfd2l0aF9jb2x1bW5faGVhZGVycyIsImNvcHlfY29sdW1uX2hlYWRlcnNfb25seSJdLGNvcHlQYXN0ZTp7Y29weUNvbHVt'@;
put 'bkhlYWRlcnM6ITAsY29weUNvbHVtbkhlYWRlcnNPbmx5OiEwfSxkcm9wZG93bk1lbnU6e2l0ZW1zOnttYWtlX3JlYWRfb25seTp7bmFtZToibWFrZV9yZWFkX29ubHkifSxhbGlnbm1lbnQ6e25hbWU6ImFsaWdubWVudCJ9LHNwMTp7bmFtZToiLS0tLS0tLS0tIn0saW5mbzp7bmFtZToidGVz'@;
put 'dCBpbmZvIixyZW5kZXJlcjooYmUseGUsVmUsWmUsbHQsZHQpPT57Y29uc3QgZ3Q9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO2xldCBqdCxybj0iTm8gaW5mbyBmb3VuZCI7aWYodGhpcy5ob3RJbnN0YW5jZSl7Y29uc3QgWHQ9dGhpcy5ob3RJbnN0YW5jZS5nZXRTZWxlY3RlZCgp'@;
put 'fHxbXSx5bj1YdD9YdFswXVsxXTotMSxRbj10aGlzLmhvdEluc3RhbmNlPy5jb2xUb1Byb3AoeW4pO2p0PXRoaXMuJGRhdGFGb3JtYXRzPy52YXJzW1FuXSxqdCYmKHJuPWBMQUJFTDogJHtqdD8ubGFiZWx9PGJyPlRZUEU6ICR7anQ/LnR5cGV9PGJyPkxFTkdUSDogJHtqdD8ubGVuZ3RofTxi'@;
put 'cj5GT1JNQVQ6ICR7anQ/LmZvcm1hdH1gKX1yZXR1cm4gZ3QuaW5uZXJIVE1MPXJuLGd0fX19fX0sdGhpcy5ob3RJbnN0YW5jZT1udWxsLHRoaXMuaG90SW5zdGFuY2VDbGlja0xpc3RlbmVyPSExLHRoaXMudmlld2JveE9wZW49ITEsdGhpcy5ob3RUYWJsZVJlZ2lzdGVyZXI9bmV3IEk1LHRo'@;
put 'aXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCl9bmdPbkluaXQoKXsiIiE9PUpuLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uJiYwPT09T2JqZWN0LmtleXModGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMpLmxlbmd0aCYmdGhpcy5yb3V0ZXIubmF2aWdhdGUo'@;
put 'W0puLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uXSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSksdm9pZCAwIT09dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtJiYoSm4udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249InZpZXcvZGF0YSIpLHRoaXMubGljZW5jZVNlcnZp'@;
put 'Y2UuaG90X2xpY2Vuc2Vfa2V5LnN1YnNjcmliZShhPT57dGhpcy5ob3RUYWJsZS5saWNlbnNlS2V5PWF9KX1uZXdWaWV3Ym94KCl7dGhpcy52aWV3Ym94T3Blbj0hMH1yZXNldEZpbHRlcigpe3RoaXMucXVlcnlGaWx0ZXJDb21wTGlzdC5maXJzdCYmdGhpcy5xdWVyeUZpbHRlckNvbXBMaXN0'@;
put 'LmZpcnN0LnJlc2V0RmlsdGVyKCl9c2VhcmNoVGFibGUoYSl7dmFyIGY9dGhpcztyZXR1cm4geWkoZnVuY3Rpb24qKCl7Zi5zZWFyY2hMb2FkaW5nPSEwO2xldCBkPWEudmFsdWUsaD1mLmxpYisiLiIrZi50YWJsZSxtPXBhcnNlSW50KGYucm91dGUuc25hcHNob3QucGFyYW1zLmZpbHRlcklk'@;
put 'KXx8MDt5aWVsZCBmLnNhc1N0b3JlU2VydmljZS52aWV3RGF0YVNlYXJjaChkLGYuc2VhcmNoTnVtZXJpYyxoLG0pLnRoZW4oXz0+e18uc2FzcGFyYW1zfHxfLnZpZXdEYXRhPyhmLmhvdFRhYmxlLmRhdGE9Xy52aWV3ZGF0YSxmLiRkYXRhRm9ybWF0cz1fLiR2aWV3ZGF0YSxmLmRzbWV0YT1f'@;
put 'LmRzbWV0YSxmLm51bWJlck9mUm93cz1fLnNhc3BhcmFtc1swXS5OT0JTLGYucXVlcnlUZXh0PV8uc2FzcGFyYW1zWzBdLkZJTFRFUl9URVhULGYuaGVhZGVyUGtzPV8uc2FzcGFyYW1zWzBdLlBLX0ZJRUxEUy5zcGxpdCgiICIpLDA9PT1mLmhvdFRhYmxlLmRhdGEubGVuZ3RoP2Yubm9EYXRh'@;
put 'PSEwOihmLm5vRGF0YT0hMSxmLnRhYmxlRmxhZz0hMSxmLnNldHVwSG90KCkpKTpmLnNlYXJjaExvYWRpbmc9ITF9KS5jYXRjaChfPT57Zi5sb2dnZXJTZXJ2aWNlLmVycm9yKF8pfSksZi5zZWFyY2hMb2FkaW5nPSExfSkoKX1yZWxvYWRUYWJsZURhdGEoKXt0aGlzLnZpZXdEYXRhKHRoaXMu'@;
put 'dXJsRmlsdGVyUGt8fDApfXJlbG9hZExpYkluZm8oKXt2YXIgYT10aGlzO3JldHVybiB5aShmdW5jdGlvbiooKXthLmxpYmluZm89bnVsbCxhLnNhc1N0b3JlU2VydmljZS5yZWZyZXNoTGliSW5mbyhhLmxpYikudGhlbihmdW5jdGlvbigpe3ZhciBmPXlpKGZ1bmN0aW9uKihkKXthLmxpYmlu'@;
put 'Zm89ZC5saWJpbmZvLEpuLnZpZXdlci5saWJpbmZvPWEubGliaW5mbztjb25zdCBoPWEubGlicmFyaWVzLmZpbmQobT0+bS5MSUJSQVJZUkVGPT09YS5saWIpO2gmJihoLmxpYmluZm89YS5saWJpbmZvKX0pO3JldHVybiBmdW5jdGlvbihkKXtyZXR1cm4gZi5hcHBseSh0aGlzLGFyZ3VtZW50'@;
put 'cyl9fSgpLGY9PnthLmxvZ2dlclNlcnZpY2UuZXJyb3IoZiksbnVsbD09PWEubGliaW5mbyYmKGEubGliaW5mbz1bXSl9KX0pKCl9ZmlsdGVyRm4oYSl7dGhpcy5saWJyYXJpZXM9dGhpcy5saWJyYXJpZXMuZmlsdGVyKGQ9Pi0xIT09ZC5MSUJSQVJZTkFNRS50b0xvd2VyQ2FzZSgpLmluZGV4'@;
put 'T2YoYS50b0xvY2FsZUxvd2VyQ2FzZSgpKSl9ZG93bmxvYWREYXRhKCl7bGV0IGE9dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsZj10aGlzLnNhc2pzQ29uZmlnLmFwcExvYztjb25zdCBkPXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7bGV0IE8saD0iJnR5cGU9Iit0aGlz'@;
put 'LmRvd25sb2FkRm9ybWF0LG09IiZ0YWJsZT0iK3RoaXMudGFibGVUaXRsZSxfPSJTQVNWSVlBIj09PXRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT9gJl9jb250ZXh0bmFtZT0ke3RoaXMuc2FzanNDb25maWcuY29udGV4dE5hbWV9YDoiIjtPPXR5cGVvZiB0aGlzLnJvdXRlLnNuYXBzaG90'@;
put 'LnBhcmFtcy5maWx0ZXJJZD4idSI/MDpwYXJzZUludCh0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5maWx0ZXJJZCksd2luZG93Lm9wZW4oYStkKyIvP19wcm9ncmFtPSIrZisiL3NlcnZpY2VzL3B1YmxpYy9nZXRyYXdkYXRhIitoK20rXysiJmZpbHRlcj0iK08pLHRoaXMub3BlbkRvd25s'@;
put 'b2FkPSExfWRvd25sb2FkRERMKCl7bGV0IGE9dGhpcy5saWIsZj10aGlzLnRhYmxlLGQ9dGhpcy5kb3dubG9hZEZvcm1hdC5yZXBsYWNlKCJfRERMIiwiIiksaD10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCxtPXRoaXMuc2FzanNDb25maWcuYXBwTG9jO2NvbnN0IF89dGhpcy5zYXNTZXJ2'@;
put 'aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3aW5kb3cub3BlbihoK18rIi8/X3Byb2dyYW09IittKyIvc2VydmljZXMvcHVibGljL2dldGRkbCIrYCZkcz0ke2Z9JmxpYnJlZj0ke2F9JmZsYXZvdXI9JHtkfSR7IlNBU1ZJWUEiPT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlP2AmX2NvbnRl'@;
put 'eHRuYW1lPSR7dGhpcy5zYXNqc0NvbmZpZy5jb250ZXh0TmFtZX1gOiIifWApLHRoaXMub3BlbkRvd25sb2FkPSExfW9uQ2xpQ29tbWFuZEZvY3VzKGEpe2EucHJldmVudERlZmF1bHQoKSxhLnRhcmdldC5zZWxlY3QoKX1lZGl0VGFibGUoKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIv'@;
put 'ZWRpdG9yLyIrdGhpcy5saWJUYWIpfXRhYmxlRWRpdEV4aXN0cygpe2xldCBhPXt9O2E9Sm4uZWRpdG9yLmxpYnNBbmRUYWJsZXM7bGV0IGY9dGhpcy5saWJUYWIuc3BsaXQoIi4iKVsxXSxkPXRoaXMubGliVGFiLnNwbGl0KCIuIilbMF07cmV0dXJuISFhW2RdJiZhW2RdLmluY2x1ZGVzKGYp'@;
put 'fWdvVG9MaW5lYWdlKCl7bGV0IGY9YC92aWV3L2xpbmVhZ2UvJHt0aGlzLnRhYmxldXJpLnNwbGl0KCJcXCIpWzFdfS9SRVZFUlNFYDt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGYpfXNob3dXZWJRdWVyeSgpe2xldCBhO3RoaXMud2ViUXVlcnk9ITAsYT10eXBlb2YgdGhpcy5yb3V0ZS5z'@;
put 'bmFwc2hvdC5wYXJhbXMuZmlsdGVySWQ+InUiPzA6cGFyc2VJbnQodGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZmlsdGVySWQpO2xldCBmPXdpbmRvdy5sb2NhdGlvbi5wb3J0Lmxlbmd0aD4wPyI6Iit3aW5kb3cubG9jYXRpb24ucG9ydDoiIjtjb25zdCBkPXRoaXMuc2FzU2VydmljZS5n'@;
put 'ZXRFeGVjdXRpb25QYXRoKCk7bGV0IG09YCR7d2luZG93LmxvY2F0aW9uLnByb3RvY29sfS8vJHt3aW5kb3cubG9jYXRpb24uaG9zdG5hbWV9JHtmfS8ke2R9Lz9fcHJvZ3JhbT0ke3RoaXMuc2FzanNDb25maWcuYXBwTG9jfS9zZXJ2aWNlcy9wdWJsaWMvZ2V0cmF3ZGF0YSZ0eXBlPVdFQiR7'@;
put 'dGhpcy53ZWJRdWVyeVRhYj8iVEFCIjoiQ1NWIn0mdGFibGU9JHt0aGlzLnRhYmxlVGl0bGV9JHsiJmZpbHRlcj0iK2F9YDt0aGlzLndlYlF1ZXJ5VGV4dD1tLnJlcGxhY2UoLyAvZ2ltLCIlMjAiKX1jb3B5VG9DbGlwKCl7bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGV4dGFyZWEi'@;
put 'KTthLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCIsYS5zdHlsZS5sZWZ0PSIwIixhLnN0eWxlLnRvcD0iMCIsYS5zdHlsZS5vcGFjaXR5PSIwIixhLnZhbHVlPXRoaXMud2ViUXVlcnlUZXh0LGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSksYS5mb2N1cygpLGEuc2VsZWN0KCksZG9jdW1lbnQu'@;
put 'ZXhlY0NvbW1hbmQoImNvcHkiKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGEpfWdvVG9WaWV3ZXIoKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9kYXRhIil9c2hvd1RhYmxlU2VsZWN0KCl7dGhpcy50YWJsZUZsYWc9IXRoaXMudGFibGVGbGFnfWNoZWNrRXhwYW5kKGEp'@;
put 'e31jb2xsYXBzZUxpYnJhcnlJdGVtcyhhLGYpe2EuZm9yRWFjaChkPT57ZC5MSUJSQVJZUkVGIT09Zi5MSUJSQVJZUkVGJiYoZC5leHBhbmRlZD0hMSl9KX1sb2FkTW9yZUxpYnJhcmllcygpe3RoaXMubGlicmFyaWVzUGFnaW5nfHwodGhpcy5saWJyYXJpZXNQYWdpbmc9ITAsdGhpcy5oZWxw'@;
put 'ZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXModGhpcy5saWJyYXJpZXMsITApLHRoaXMubGlicmFyaWVzUGFnaW5nPSExKX10cmVlTm9kZUNsaWNrZWQoYSxmKXsiQ29sbGFwc2UiPT09YS50YXJnZXQudGl0bGUmJnRoaXMuY29sbGFwc2VMaWJyYXJ5SXRlbXModGhpcy5saWJyYXJpZXMsZil9'@;
put 'bGlicmFyeUV4cGFuZGVkQ2hhbmdlKGEsZil7YSYmdGhpcy5jb2xsYXBzZUxpYnJhcnlJdGVtcyh0aGlzLmxpYnJhcmllcyxmKX1saWJyYXJ5T25DbGljayhhLGYsZCl7dmFyIGg9dGhpcztyZXR1cm4geWkoZnVuY3Rpb24qKCl7aWYoZi50YWJsZXM/Zi5leHBhbmRlZD0hIWR8fCFmLmV4cGFu'@;
put 'ZGVkOnlpZWxkIGguc2VsZWN0VGFibGUoYSwhMSxmKSxmLmV4cGFuZGVkKXtoLmNkZi5kZXRlY3RDaGFuZ2VzKCk7bGV0IG09ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgI3NlYXJjaF8ke2YuTElCUkFSWVJFRn1gKTtoLmxvZ2dlclNlcnZpY2UubG9nKCJbbGliVHJlZVNlYXJjaElucHV0XSIs'@;
put 'bSksbSYmbS5mb2N1cygpLGYmJmYubGliaW5mbyYmKGgubGliaW5mbz1mLmxpYmluZm8pLGgubGliJiZoLnRhYmxlJiYhZD9oLnJvdXRlci5uYXZpZ2F0ZShbIi92aWV3L2RhdGEiXSx7c2tpcExvY2F0aW9uQ2hhbmdlOiEwLHF1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pLnRoZW4o'@;
put 'KCk9PntoLnJvdXRlci5uYXZpZ2F0ZShbIi92aWV3L2RhdGEvIitoLmxpYl0se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pfSk6aC5saWImJiFoLnRhYmxlJiZoLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSgiL3ZpZXcvZGF0YS8iK2gubGliKX1oLmNvbGxhcHNlTGlicmFyeUl0ZW1z'@;
put 'KGgubGlicmFyaWVzLGYpfSkoKX1vblRhYmxlQ2xpY2soYSxmKXt0aGlzLmxpYj1mLkxJQlJBUllSRUYsdGhpcy50YWJsZT1hLHRoaXMuc2VsZWN0TGliVGFibGUoYSksdGhpcy52aWV3RGF0YSgwKX1zZWxlY3RUYWJsZShhLGYsZCl7dmFyIGg9dGhpcztyZXR1cm4geWkoZnVuY3Rpb24qKCl7'@;
put 'ZC5sb2FkaW5nVGFibGVzPSEwLGgudGFibGU9ITEsaC50YWJsZURpc2FibGU9ITAsIlBsZWFzZSBzZWxlY3QgbGlicmFyeSIhPT1hP0puLnZpZXdlci50YWJsZXNTZXQmJmY/KGguYWJvcnRBY3RpdmU9ITEsaC50YWJsZURpc2FibGU9ITEsaC50YWJsZXM9Sm4udmlld2VyLnRhYmxlcyxoLmxp'@;
put 'YmluZm89Sm4udmlld2VyLmxpYmluZm8pOihoLmxpYmluZm89bnVsbCx5aWVsZCBoLnNhc1N0b3JlU2VydmljZS52aWV3VGFibGVzKGEpLnRoZW4obT0+e2guYWJvcnRBY3RpdmU9ITEsaC50YWJsZURpc2FibGU9ITE7bGV0IF89bS5tcHRhYmxlcy5tYXAoZnVuY3Rpb24oTyl7cmV0dXJuIE8u'@;
put 'TUVNTkFNRX0pO2gubGliaW5mbz1tLmxpYmluZm98fFtdLGgudGFibGVzPV8sZCYmKGQudGFibGVzPV8sZC5saWJpbmZvPWgubGliaW5mbyksSm4udmlld2VyLmxpYnJhcmllcz1oLmxpYnJhcmllcyxKbi52aWV3ZXIubGlicmFyeT1oLmxpYixKbi52aWV3ZXIudGFibGVzPWgudGFibGVzLEpu'@;
put 'LnZpZXdlci5saWJpbmZvPWgubGliaW5mbyxKbi52aWV3ZXIudGFibGVzU2V0PSEwfSkuY2F0Y2gobT0+e2gubG9nZ2VyU2VydmljZS5lcnJvcihtKSxoLmFib3J0QWN0aXZlPSEwLGgubm9EYXRhPSEwLGgudGFibGVUaXRsZT0iIixoLnRhYmxlRGlzYWJsZT0hMH0pKTpoLnRhYmxlRGlzYWJs'@;
put 'ZT0hMCxKbi52aWV3ZXIubGlicmFyeT1oLmxpYixmfHxoLmNsZWFyR2xvYmFsc0ZpbHRlcigpLGQubG9hZGluZ1RhYmxlcz0hMSxkLmV4cGFuZGVkPSFkLmV4cGFuZGVkfSkoKX1zZWxlY3RMaWJUYWJsZShhLGYpeyJQbGVhc2Ugc2VsZWN0IHRhYmxlIiE9PWE/KHRoaXMuYWN0aW9uRGlzYWJs'@;
put 'ZT0hMSx0aGlzLmxpYlRhYj10aGlzLmxpYisiLiIrdGhpcy50YWJsZSk6dGhpcy5hY3Rpb25EaXNhYmxlPSEwLEpuLnZpZXdlci50YWJsZT1hLGZ8fHRoaXMuY2xlYXJHbG9iYWxzRmlsdGVyKCksdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyh0aGlzLmxpYlRhYil9Y2xlYXJHbG9iYWxzRmlsdGVy'@;
put 'KCl7Sm4udmlld2VyLmZpbHRlci5saWJkcz0iIixKbi52aWV3ZXIuZmlsdGVyLndoZXJlQ2xhdXNlPSIiLEpuLnZpZXdlci5maWx0ZXIuZ3JvdXBMb2dpYz0iIixKbi52aWV3ZXIuZmlsdGVyLmNsYXVzZXM9W10sSm4udmlld2VyLmZpbHRlci5jb2xzPVtdLEpuLnZpZXdlci5maWx0ZXIudmFs'@;
put 'cz1bXX1saWJUYWJBY3RpdmUoYSxmKXtyZXR1cm4hIXRoaXMubGliVGFiJiZhKyIuIitmPT09dGhpcy5saWJUYWJ9dHJlZU9uRmlsdGVyKGEsZil7dGhpcy5oZWxwZXJTZXJ2aWNlLnRyZWVPbkZpbHRlcihhLGYpfWxpYnJhcnlPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5'@;
put 'T25GaWx0ZXIodGhpcy5saWJyYXJpZXMsdGhpcy5saWJyYXJpZXNTZWFyY2gsIkxJQlJBUllOQU1FIiksSm4udmlld2VyLmxpYnJhcmllc1NlYXJjaD10aGlzLmxpYnJhcmllc1NlYXJjaH1saWJyYXJ5UmVzZXRGaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UucmVzZXRBcnJheUZpbHRlcih0'@;
put 'aGlzLmxpYnJhcmllcyl9dmlld0RhdGEoYSl7dmFyIGY9dGhpcztyZXR1cm4geWkoZnVuY3Rpb24qKCl7bGV0IGQ7aWYoZi5sb2FkaW5nVGFibGVWaWV3PSEwLHR5cGVvZiBmLmxpYkRhdGFzZXQ+InUiKWQ9Zi5saWIrIi4iK2YudGFibGU7ZWxzZSBpZih0eXBlb2YgZi5saWI+InUiJiZ0eXBl'@;
put 'b2YgZi50YWJsZT4idSIpe2xldCBfPVtdO2lmKF89Zi5saWJEYXRhc2V0LnNwbGl0KCIuIiksSm4udmlld2VyLnN0YXJ0dXBTZXQ/Zi5saWJyYXJpZXM9Sm4udmlld2VyLmxpYnJhcmllczp5aWVsZCBmLnNhc1N0b3JlU2VydmljZS52aWV3TGlicygpLnRoZW4oTz0+e2YubGlicmFyaWVzPU8u'@;
put 'c2FzbGlic30pLmNhdGNoKE89PntmLmxvZ2dlclNlcnZpY2UuZXJyb3IoTyl9KSxmLmxpYj1fWzBdLEpuLnZpZXdlci5zdGFydHVwU2V0KWYudGFibGVzPUpuLnZpZXdlci50YWJsZXM7ZWxzZXtsZXQgTz1mLmxpYnJhcmllcy5maW5kKFg9PlguTElCUkFSWVJFRi50b0xvd2VyQ2FzZSgpPT09'@;
put 'Zi5saWIudG9Mb3dlckNhc2UoKSk7eWllbGQgZi5zYXNTdG9yZVNlcnZpY2Uudmlld1RhYmxlcyhmLmxpYikudGhlbihYPT57Zi50YWJsZXM9WC5tcHRhYmxlcy5tYXAoZnVuY3Rpb24oYWUpe3JldHVybiBhZS5NRU1OQU1FfSksTy50YWJsZXM9Zi50YWJsZXMsSm4udmlld2VyLmxpYnJhcmll'@;
put 'cz1mLmxpYnJhcmllcyxKbi52aWV3ZXIudGFibGVzPWYudGFibGVzLEpuLnZpZXdlci5zdGFydHVwU2V0PSEwfSkuY2F0Y2goWD0+e2YubG9nZ2VyU2VydmljZS5lcnJvcihYKX0pfWYudGFibGU9X1sxXSxmLnRhYmxlRmxhZz0hMSxkPWYubGliRGF0YXNldCxmLmxpYlRhYj1kfWVsc2UgSm4u'@;
put 'dmlld2VyLnN0YXJ0dXBTZXQ/Zi5saWJyYXJpZXM9Sm4udmlld2VyLmxpYnJhcmllczp5aWVsZCBmLnNhc1N0b3JlU2VydmljZS52aWV3TGlicygpLnRoZW4oXz0+e2YubGlicmFyaWVzPV8uc2FzbGlic30pLmNhdGNoKF89PntmLmxvZ2dlclNlcnZpY2UuZXJyb3IoXyl9KSx0eXBlb2YgZi50'@;
put 'YWJsZTwidSImJihKbi52aWV3ZXIuc3RhcnR1cFNldD9mLnRhYmxlcz1Kbi52aWV3ZXIudGFibGVzOnlpZWxkIGYuc2FzU3RvcmVTZXJ2aWNlLnZpZXdUYWJsZXMoZi5saWIpLnRoZW4oXz0+e2YudGFibGVzPV8ubXB0YWJsZXMubWFwKGZ1bmN0aW9uKE8pe3JldHVybiBPLk1FTU5BTUV9KX0p'@;
put 'LmNhdGNoKF89PntmLmxvZ2dlclNlcnZpY2UuZXJyb3IoXyksZi5yb3V0ZXIubmF2aWdhdGUoWyIvdmlldy9kYXRhIl0se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pfSksZi50YWJsZUZsYWc9ITEsZD1mLmxpYisiLiIrZi50YWJsZSxmLnRhYmxlVGl0bGU9ZCxmLmxpYlRhYj1k'@;
put 'KTtmLnJvdXRlci51cmwuc3BsaXQoIi8iKS5sZW5ndGg+MyYmZCYmKHlpZWxkIGYuc2FzU3RvcmVTZXJ2aWNlLnZpZXdEYXRhKGQsYSkudGhlbihfPT57aWYoXy5xdWVyeS5sZW5ndGg+MCYmInZpZXciPT09Sm4ucm9vdFBhcmFtJiYwPT09Sm4udmlld2VyLmZpbHRlci5jbGF1c2VzLmxlbmd0'@;
put 'aCYmKEpuLnZpZXdlci5maWx0ZXIucXVlcnk9Zi5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShfLnF1ZXJ5KSxKbi52aWV3ZXIuZmlsdGVyLmxpYmRzPWYucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbSxmLnNhc1N0b3JlU2VydmljZS5pbml0aWFsaXplR2xvYmFsRmlsdGVyQ2xhdXNlKCJ2'@;
put 'aWV3ZXIiLF8uY29scykpLGYuYWJvcnRBY3RpdmU9ITEsZi5maWx0ZXJDb2xzPV8uY29scyxiSihmLmZpbHRlckNvbHMsW10sXy4kdmlld2RhdGEpLGYubnVtYmVyT2ZSb3dzPV8uc2FzcGFyYW1zWzBdLk5PQlMsZi5oZWFkZXJQa3M9Xy5zYXNwYXJhbXNbMF0uUEtfRklFTERTLnNwbGl0KCIg'@;
put 'IiksIlNBUzkiPT09Zi5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlKXtsZXQgYmU9Xy5zYXNwYXJhbXNbMF0uVEFCTEVVUkk7YmUmJmJlLmxlbmd0aD4wJiYoZi50YWJsZXVyaT1iZSl9Zi5ob3RUYWJsZS5kYXRhPV8udmlld2RhdGEsZi4kZGF0YUZvcm1hdHM9Xy4kdmlld2RhdGEsZi5kc21ldGE9'@;
put 'Xy5kc21ldGEsZi5xdWVyeVRleHQ9Xy5zYXNwYXJhbXNbMF0uRklMVEVSX1RFWFQ7bGV0IE89W10sWD1bXTtmb3IobGV0IGJlIGluIF8udmlld2RhdGFbMF0pYmUmJlgucHVzaChiZSk7Zm9yKGxldCBiZT0wO2JlPFgubGVuZ3RoO2JlKyspTy5wdXNoKHtkYXRhOlhbYmVdfSk7Zi5ob3RUYWJs'@;
put 'ZS5jb2xIZWFkZXJzPVgsZi5ob3RUYWJsZS5jb2x1bW5zPU8sZi5ob3RUYWJsZS5jZWxscz1mdW5jdGlvbigpe3JldHVybntyZWFkT25seTohMH19LGYudGFibGVGbGFnPSExO2xldCBwZT1bXTtwZT1kLnNwbGl0KCIuIiksZi5saWI9cGVbMF0sZi50YWJsZT1wZVsxXSwwPT09Zi5ob3RUYWJs'@;
put 'ZS5kYXRhLmxlbmd0aD8oZi5ub0RhdGE9ITAsZi50YWJsZUZsYWc9ITApOihmLm5vRGF0YT0hMSxmLnRhYmxlRmxhZz0hMSksZi5ub0RhdGFSZXFFcnI9ITF9KS5jYXRjaChfPT57Zi5sb2dnZXJTZXJ2aWNlLmVycm9yKF8pLGYuYWJvcnRBY3RpdmU9ITAsZi5ub0RhdGFSZXFFcnI9ITB9KSks'@;
put 'Zi5yb3V0ZXIudXJsLmluY2x1ZGVzKCIvZGF0YSIpJiZkJiZmLnJvdXRlci5uYXZpZ2F0ZSgwIT09YT9bIi92aWV3L2RhdGEvIitkKyIvIithXTpbIi92aWV3L2RhdGEvIitkXSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSk7bGV0IGg9Zi50YWJsZSxtPWYubGlicmFyaWVzLmZp'@;
put 'bmQoXz0+Xy5MSUJSQVJZUkVGLnRvTG93ZXJDYXNlKCk9PT1mLmxpYi50b0xvd2VyQ2FzZSgpKTttPyhKbi52aWV3ZXIubGlicmFyaWVzLmxlbmd0aD4wJiYoZi5saWJyYXJpZXM9Sm4udmlld2VyLmxpYnJhcmllcyxmLmxpYnJhcmllc1NlYXJjaD1Kbi52aWV3ZXIubGlicmFyaWVzU2VhcmNo'@;
put 'KSxmLmxpYnJhcnlPbkNsaWNrKGYubGliLG0sITApKTpmLmxpYmluZm89W10sZi50YWJsZT1ofHxmLnRhYmxlLGYubGlicmFyaWVzJiZmLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyhmLmxpYnJhcmllcyksZi5yb3V0ZXIudXJsLmluY2x1ZGVzKCIvZGF0YSIpJiZmLmV2ZW50U2Vy'@;
put 'dmljZS5jbG9zZVNpZGViYXIoKSxmLmxvYWRpbmdUYWJsZVZpZXc9ITEsIWYubm9EYXRhJiYhZi5ub0RhdGFSZXFFcnImJmQmJmYuc2V0dXBIb3QoKSxmLmhvdEluc3RhbmNlQ2xpY2tMaXN0ZW5lcnx8c2V0VGltZW91dCgoKT0+e2xldCBfPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3RJ'@;
put 'bnN0YW5jZSIpO18mJihfLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsTz0+e3NldFRpbWVvdXQoKCk9PntsZXQgWD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuZGVidWctc3dpdGNoLWl0ZW0iKXx8dm9pZCAwO1gmJlguY2xpY2soKX0sMTAwKX0pLGYuaG90SW5zdGFuY2VDbGlja0xp'@;
put 'c3RlbmVyPSEwKX0sMmUzKX0pKCl9bWF4V2lkdGhDaGVrZXIoYSxmKXtyZXR1cm4gYT4yMDA/MjAwOmF9b3BlblFiKCl7dGhpcy5maWx0ZXI9ITAsdGhpcy5jZGYuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuc2FzU3RvcmVTZXJ2aWNlLnNldFF1ZXJ5VmFyaWFibGVzKHRoaXMubGliKyIuIit0aGlz'@;
put 'LnRhYmxlLHRoaXMuZmlsdGVyQ29scyl9c2VuZENsYXVzZSgpe3ZhciBhPXRoaXM7cmV0dXJuIHlpKGZ1bmN0aW9uKigpe2Euc3VibWl0TG9hZGluZz0hMDtsZXQgZj1bXSxkPVtdO2lmKHR5cGVvZiBhLmNsYXVzZXM+InUiKXJldHVybiBhLm51bGxWYXJpYWJsZXM9ITAsdm9pZChhLnN1Ym1p'@;
put 'dExvYWRpbmc9ITEpO3tsZXQgaD1hLmNsYXVzZXMucXVlcnlPYmo7aWYoaFswXS5lbGVtZW50cy5sZW5ndGg8MSlyZXR1cm4idmlldyI9PT1Kbi5yb290UGFyYW0mJihKbi52aWV3ZXIuZmlsdGVyLmNsYXVzZXM9W10sSm4udmlld2VyLmZpbHRlci5xdWVyeT1bXSxKbi52aWV3ZXIuZmlsdGVy'@;
put 'Lmdyb3VwTG9naWM9IiIpLHZvaWQgYS5yb3V0ZXIubmF2aWdhdGUoWyIvdmlldy9kYXRhLyIrYS5saWJkc10se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pO2ZvcihsZXQgbT0wO208aC5sZW5ndGg7bSsrKXtjb25zdCBfPWhbbV0uZWxlbWVudHM7Zj1fLmZpbHRlcihmdW5jdGlv'@;
put 'bihPKXtyZXR1cm4gbnVsbD09PU8udmFyaWFibGV9KSxmLmxlbmd0aCYmZC5wdXNoKF8pfX1pZihkLmxlbmd0aClyZXR1cm4gYS5udWxsVmFyaWFibGVzPSEwLHZvaWQoYS5zdWJtaXRMb2FkaW5nPSExKTt7Y29uc3QgaD17Z3JvdXBMb2dpYzphLmNsYXVzZXMuZ3JvdXBMb2dpYyxmaWx0ZXJH'@;
put 'cm91cHM6W119O2EuY2xhdXNlcy5xdWVyeU9iai5mb3JFYWNoKF89Pntjb25zdCBPPXtmaWx0ZXJDbGF1c2VzOltdfTtfLmVsZW1lbnRzLmZvckVhY2goWD0+e08uZmlsdGVyQ2xhdXNlcy5wdXNoKGEuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoWCkpfSksTy5jbGF1c2VMb2dpYz1fLmNsYXVz'@;
put 'ZUxvZ2ljLGguZmlsdGVyR3JvdXBzLnB1c2goYS5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShPKSl9KTtjb25zdCBtPWEuc2FzU3RvcmVTZXJ2aWNlLmNyZWF0ZUZpbHRlclF1ZXJ5VGFibGUoaCk7eWllbGQgYS5zYXNTdG9yZVNlcnZpY2Uuc2F2ZVF1ZXJ5KGEubGliZHMsbSkudGhlbihfPT57'@;
put 'YS5xdWVyeVRleHQ9Xy5yZXN1bHRbMF0uRklMVEVSX1RFWFQ7bGV0IE89Xy5yZXN1bHRbMF0uRklMVEVSX1JLO2Eucm91dGVyLm5hdmlnYXRlKFsiL3ZpZXcvZGF0YS8iK2EubGliZHMrIi8iK09dLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KSxhLnZpZXdEYXRhKE8pLGEuZmls'@;
put 'dGVyPSExfSkuY2F0Y2goXz0+e2EubG9nZ2VyU2VydmljZS5lcnJvcihfKX0pLGEuc3VibWl0TG9hZGluZz0hMX19KSgpfXJlbW92ZVF1ZXJ5KCl7dGhpcy5zYXNTdG9yZVNlcnZpY2UucmVtb3ZlQ2xhdXNlKCl9c2V0dXBIb3QoKXtzZXRUaW1lb3V0KCgpPT57IXRoaXMubG9hZGluZ1RhYmxl'@;
put 'VmlldyYmdGhpcy5saWJEYXRhc2V0JiYodGhpcy5ob3RJbnN0YW5jZT10aGlzLmhvdFRhYmxlUmVnaXN0ZXJlci5nZXRJbnN0YW5jZSgiaG90SW5zdGFuY2UiKSx0aGlzLmhvdEluc3RhbmNlJiZ0aGlzLmhvdEluc3RhbmNlLnVwZGF0ZVNldHRpbmdzKHtoZWlnaHQ6dGhpcy5ob3RUYWJsZS5o'@;
put 'ZWlnaHQsbW9kaWZ5Q29sV2lkdGg6ZnVuY3Rpb24oYSxmKXtyZXR1cm4gYT41MDA/NTAwOmF9LGFmdGVyR2V0Q29sSGVhZGVyOihhLGYpPT57Y29uc3QgZD10aGlzLmhvdEluc3RhbmNlPy5jb2xUb1Byb3AoYSk7ZCYmdGhpcy5oZWFkZXJQa3MuaW5kZXhPZihkKT4tMSYmZi5jbGFzc0xpc3Qu'@;
put 'YWRkKCJwcmltYXJ5S2V5SGVhZGVyU3R5bGUiKX19KSl9LDFlMyl9bG9hZFdpdGhQYXJhbWV0ZXJzKCl7dmFyIGE9dGhpcztyZXR1cm4geWkoZnVuY3Rpb24qKCl7YS5zd2l0Y2hGbGFnPSEwLGEudGFibGVUaXRsZT1hLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5saWJNZW18fDAsYS51cmxGaWx0'@;
put 'ZXJQaz1wYXJzZUludChhLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5maWx0ZXJJZHx8IjAiKTtsZXQgZD1hLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5saWJNZW07YS5saWJEYXRhc2V0PWQsZC5pbmNsdWRlcygiLiIpfHwoYS5saWI9ZCkseWllbGQgYS52aWV3RGF0YShhLnVybEZpbHRlclBrKSxh'@;
put 'Lm5vRGF0YT9zZXRUaW1lb3V0KCgpPT57YS50YWJsZUZsYWc9ITB9LDEyMDApOnNldFRpbWVvdXQoKCk9PnthLnRhYmxlRmxhZz0hMX0sMTIwMCl9KSgpfWxvYWRXaXRob3V0UGFyYW1ldGVycygpe3ZhciBhPXRoaXM7cmV0dXJuIHlpKGZ1bmN0aW9uKigpe2Euc3dpdGNoRmxhZz0hMSxhLmxp'@;
put 'YnJhcmllc0xvYWRpbmc9ITAsSm4udmlld2VyLnN0YXJ0dXBTZXQ/c2V0VGltZW91dCgoKT0+e2EubGlicmFyaWVzPUpuLnZpZXdlci5saWJyYXJpZXMsYS5saWJyYXJpZXNTZWFyY2g9Sm4udmlld2VyLmxpYnJhcmllc1NlYXJjaCxhLmxpYj1Kbi52aWV3ZXIubGlicmFyeSxhLmxpYnJhcmll'@;
put 'c1RyZWVFeHBhbmRlZD0hMCxhLmxpYnJhcmllc0xvYWRpbmc9ITEsYS5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXMoYS5saWJyYXJpZXMpfSwxMDApOihhLm5vRGF0YVJlcUVycj0hMSx5aWVsZCBhLnNhc1N0b3JlU2VydmljZS52aWV3TGlicygpLnRoZW4oZj0+e2EubGlicmFyaWVz'@;
put 'PWYuc2FzbGlicyxKbi52aWV3ZXIubGlicmFyaWVzPWEubGlicmFyaWVzLEpuLnZpZXdlci5zdGFydHVwU2V0PSEwLGEubGlicmFyaWVzTG9hZGluZz0hMSxhLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyhhLmxpYnJhcmllcyl9KS5jYXRjaChmPT57YS5sb2dnZXJTZXJ2aWNlLmVy'@;
put 'cm9yKGYpLGEubGlicmFyaWVzTG9hZGluZz0hMSxhLm5vRGF0YVJlcUVycj0hMH0pKX0pKCl9bmdBZnRlclZpZXdJbml0KCl7fW5nQWZ0ZXJDb250ZW50SW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIHlpKGZ1bmN0aW9uKigpe2EuaG90VGFibGUuZGF0YS5sZW5ndGg+MCYmKGEudGFibGVGbGFn'@;
put 'PSEwKSxhLl9xdWVyeT1hLnNhc1N0b3JlU2VydmljZS5xdWVyeS5zdWJzY3JpYmUoZj0+e2Eud2hlcmVTdHJpbmc9Zi5zdHJpbmcsYS5jbGF1c2VzPWYub2JqLGEubGliZHM9Zi5saWJkc30pLHR5cGVvZiBhLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5saWJNZW08InUiP2EubG9hZFdpdGhQYXJh'@;
put 'bWV0ZXJzKCk6YS5sb2FkV2l0aG91dFBhcmFtZXRlcnMoKX0pKCl9fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpKHJ0KGIxKSxydChMZCkscnQocGwpLHJ0KExhKSxydCh0dSkscnQoUnMpLHJ0KHkxKSxydChQdSkscnQoZ2QpLHJ0KFVsKSl9LGwuXHUw'@;
put 'Mjc1Y21wPWtyKHt0eXBlOmwsc2VsZWN0b3JzOltbImFwcC12aWV3ZXIiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZil7aWYoMSZhJiZObyhDSHQsNSksMiZhKXtsZXQgZDt1aShkPWNpKCkpJiYoZi5xdWVyeUZpbHRlckNvbXBMaXN0PWQpfX0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRh'@;
put 'aW5lciJdLGRlY2xzOjk1LHZhcnM6MjksY29uc3RzOltbMywic2Nyb2xsZWRUb0JvdHRvbSJdLFsiY2xhc3MiLCJteS0xMC1teC1hdXRvIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNlYXJjaC1ub2RlIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3Mi'@;
put 'LCJ3LTEwMCB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbImNsYXNzIiwibW9kYWwgei1pbmRleC1oaWdoZXN0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm1vZGFsLWJhY2tkcm9wIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWzMsImNsck1vZGFsT3Bl'@;
put 'biIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsT3BlbkNoYW5nZSJdLFsxLCJtb2RhbC10aXRsZSIsImNlbnRlciIsInRleHQtY2VudGVyIiwiY29sb3ItZGFya2VyLWdyYXkiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJjbHItY29sLW1kLTYiXSxbMSwiZG93bmxvYWQtc2VsZWN0Il0sWyJjbHJT'@;
put 'ZWxlY3QiLCIiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIl0sWyJ2YWx1ZSIsIkNTViJdLFsidmFsdWUiLCJTQVMiXSxbInZhbHVlIiwiUEdTUUxfRERMIl0sWyJ2YWx1ZSIsIlNBU19EREwiXSxbInZhbHVlIiwiVFNRTF9EREwiXSxbInZhbHVlIiwiRVhDRUwiXSxbInZhbHVlIiwiTUFS'@;
put 'S0RPV04iXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbInR5cGUiLCJzdWJtaXQiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImlkIiwiY2xpY2siXSxbMSwibW9k'@;
put 'YWwtYm9keSIsIndlYi1xdWVyeSJdLFsxLCJyb3ciXSxbMSwiY2xyLWNvbC1sZy0xMiIsImNsci1jb2wtbWQtMTIiLCJjbHItY29sLXNtLTEyIiwiY2xyLWNvbC14cy0xMiJdLFsxLCJjYXJkIl0sWzEsImNhcmQtaGVhZGVyIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWJldHdlZW4iXSxb'@;
put 'MSwiYnRuLWdyb3VwIl0sWzEsInJhZGlvIiwiYnRuIiwzLCJjbGljayJdLFsidHlwZSIsInJhZGlvIiwibmFtZSIsImJ0bi1ncm91cC1kZW1vLXJhZGlvcyIsMywiY2hlY2tlZCJdLFsxLCJjYXJkLWJsb2NrIiwid29yZC1icmVhay1hbGwiXSxbInJvd3MiLCI0IiwiY29scyIsIjUwIiwidHlw'@;
put 'ZSIsInRleHQiLCJyZWFkb25seSIsIiIsMSwid2ViLXF1ZXJ5LXRleHQiLCJ3LTEwMCIsMywidmFsdWUiLCJmb2N1cyJdLFsiY2xpQ29tbWFuZElucHV0IiwiIl0sWzEsImNhcmQtZm9vdGVyIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwzLCJuZ3hDbGlwYm9hcmQiLCJjbGljayJd'@;
put 'LFsiYXJpYS1tb2RhbCIsInRydWUiLDEsImZpbHRlci1tb2RhbCIsMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSIsImNsck1vZGFsT3BlbkNoYW5nZSJdLFs0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tbGlu'@;
put 'ayIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwiYnRuLXNtIiwzLCJjbGljayJdLFsidHlwZSIsInN1Ym1pdCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xyTG9hZGluZyIsImNsaWNrIl0sWzMsImNsck1vZGFs'@;
put 'T3BlbiIsImNsck1vZGFsT3BlbkNoYW5nZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbImNsYXNzIiwibG9hZGluZ1Nw'@;
put 'aW5uZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2FyZCBoLTEwMCBkLWZsZXggY2xyLWZsZXgtY29sdW1uIiw0LCJuZ0lmIl0sWzMsIm9wZW4iLCJkc21ldGEiLCJvcGVuQ2hhbmdlIl0sWzMsInZpZXdib3hNb2RhbCIsInZpZXdib3hNb2RhbENoYW5nZSJdLFsxLCJteS0xMC1teC1hdXRvIiwi'@;
put 'dGV4dC1jZW50ZXIiXSxbImNsck1lZGl1bSIsIiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiTGlicmFyaWVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsIiwi'@;
put 'bmdNb2RlbENoYW5nZSIsImtleXVwIl0sWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMs'@;
put 'ImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsci1leHBhbmRlZCIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIs'@;
put 'MywiY2xpY2siXSxbInNoYXBlIiwicmFjay1zZXJ2ZXIiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJUYWJsZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsImlkIiwibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCJdLFsic2VhcmNoVHJlZUlu'@;
put 'cHV0IiwiIl0sWzQsIm5nVmFyIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsImNsYXNzIiwiY2xyLXRyZWVub2RlLWxpbmsiLDMsImRjLWxvY2tlZC1jb250cm9sIiwidGFibGUtYWN0aXZlIiwiY2xpY2siLDQsIm5nSWYiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6'@;
put 'ZSIsImxnIiw0LCJjbHJJZk9wZW4iXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwxLCJjbHItdHJlZW5vZGUtbGluayIsMywiY2xpY2siXSxbMywibmdTd2l0Y2giXSxbInNoYXBlIiwiYm9sdCIsNCwibmdTd2l0Y2hDYXNlIl0sWyJzaGFwZSIsInRhYmxlIiw0LCJuZ1N3aXRjaENhc2UiXSxb'@;
put 'InNoYXBlIiwiYm9sdCJdLFsic2hhcGUiLCJ0YWJsZSJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiLCJjbHJTaXplIiwibGciXSxbMSwidy0xMDAiLCJ0ZXh0LWNlbnRlciJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1zbSJdLFsxLCJtb2RhbCIsInotaW5kZXgtaGlnaGVzdCJdLFsi'@;
put 'cm9sZSIsImRpYWxvZyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibW9kYWwtZGlhbG9nIl0sWzEsIm1vZGFsLWNvbnRlbnQiXSxbMSwibW9kYWwtaGVhZGVyIl0sWyJhcmlhLWxhYmVsIiwiQ2xvc2UiLCJ0eXBlIiwiYnV0dG9uIiwxLCJjbG9zZSJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwi'@;
put 'c2hhcGUiLCJjbG9zZSJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1vZGFsLWJhY2tkcm9wIl0sWyJxdWVyeUZpbHRlciIsIiJdLFsxLCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJzcGlu'@;
put 'bmVyIl0sWzEsImNhcmQiLCJoLTEwMCIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiJdLFsiY2xhc3MiLCJoZWFkZXItcm93IGNsci1yb3cganVzdGlmeS1jb250ZW50LWJldHdlZW4gY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIgdy0xMDAgbS0wIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm5v'@;
put 'LXRhYmxlLXNlbGVjdGVkIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNhcmQtYmxvY2sgbm9EYXRhIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1mbGV4LTEiLDQsIm5nSWYiXSxbImNsYXNzIiwibXQtMi1pIHctMTAwIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsImhlYWRlci1yb3ciLCJjbHIt'@;
put 'cm93IiwianVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsInctMTAwIiwibS0wIl0sWzEsImZvcm0tYmxvY2siLCJ0YWJsZS1zZWFyY2gtd3JhcHBlciIsInN3IiwiY2xyLWNvbC1tZCJdLFsiY2xyRm9ybSIsIiIsMSwiZC1mbGV4IiwiYWxpZ24t'@;
put 'aXRlbXMtY2VudGVyIl0sWzEsImlucHV0LXdyYXBwZXIiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJTZWFyY2giLCJuYW1lIiwic2VhcmNoLWlucHV0IiwzLCJ0eXBlIiwia2V5dXAuZW50ZXIiXSxbInNlYXJjaEVsIiwiIl0sWyJzaGFwZSIsInNlYXJjaCIsMywiY2xpY2siLDQs'@;
put 'Im5nSWYiXSxbImNsYXNzIiwic3Bpbm5lciBzcGlubmVyLWlubGluZSIsNCwibmdJZiJdLFsidHlwZSIsImNoZWNrYm94IiwiY2xyQ2hlY2tib3giLCIiLCJuYW1lIiwibnVtZXJpY19jaGVjayIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXSxbMSwidGl0bGUtY29sIiwiY2xyLWNvbC1h'@;
put 'dXRvIiwiY2xyLWZsZXgtY29sdW1uIiwiY2xyLWZsZXgtc20tcm93Il0sWyJzaGFwZSIsImluZm8tY2lyY2xlIiwic2l6ZSIsIjI0IiwxLCJpcy1oaWdobGlnaHQiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYm9sdCIsImNsYXNzIiwiY29sb3IteWVsbG93IG10LTUg'@;
put 'bXItNSIsNCwibmdJZiJdLFsiY2xhc3MiLCJ2aWV3ZXJUaXRsZSBjbHItZmxleC1jb2x1bW4gZC1mbGV4IGNsci1mbGV4LXNtLXJvdyBjbHItYWxpZ24taXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0sWzEsIm9wdGlvbnMtY29sIiwiY2xyLWNvbC1tZCJdLFsiY2xhc3MiLCJvcHRpb25zLWRyb3Bk'@;
put 'b3duIiwzLCJjbHJDbG9zZU1lbnVPbkl0ZW1DbGljayIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItY29sLW1kLTEyIGluZm9CYXIiLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIiwzLCJjbGljayJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1pbmxpbmUiXSxbInNoYXBlIiwiYm9sdCIsMSwi'@;
put 'Y29sb3IteWVsbG93IiwibXQtNSIsIm1yLTUiXSxbMSwidmlld2VyVGl0bGUiLCJjbHItZmxleC1jb2x1bW4iLCJkLWZsZXgiLCJjbHItZmxleC1zbS1yb3ciLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWyJzaGFwZSIsInJlZnJlc2giLDEsInJlZnJlc2gtdGFibGUiLDMsImNsaWNrIl0s'@;
put 'WzEsIm9wdGlvbnMtZHJvcGRvd24iLDMsImNsckNsb3NlTWVudU9uSXRlbUNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsImZpbHRlclNpZGUiXSxbInNoYXBlIiwiY29nIiwic2l6ZSIsIjE1Il0s'@;
put 'WyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCIsNCwiY2xySWZPcGVuIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCJdLFsidHlwZSIsImJ1dHRvbiIsImNsckRyb3Bkb3duSXRlbSIsIiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xpY2siXSxb'@;
put 'InNoYXBlIiwidmlldy1jYXJkcyJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiYnRuIGJ0bi1zbSBidG4tc3VjY2Vzcy1vdXRsaW5lIiwiY2xyRHJvcGRvd25JdGVtIiwiIiwzLCJjbGljayIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsImNsckRyb3Bkb3duSXRlbSIsIiIsMSwiYnRu'@;
put 'IiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLCJidG4tYmxvY2siLDMsImNsaWNrIl0sWyJzaGFwZSIsImZpbHRlciJdLFsic2hhcGUiLCJkb3dubG9hZCJdLFsic2hhcGUiLCJkb3dubG9hZC1jbG91ZCJdLFsic2hhcGUiLCJwZW5jaWwiXSxbInNoYXBlIiwic3dpdGNoIl0sWzEsImNsci1jb2wt'@;
put 'bWQtMTIiLCJpbmZvQmFyIl0sWzEsIm5vLXRhYmxlLXNlbGVjdGVkIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwiNjAiLDEsImlzLWluZm8iLCJpY29uLWRjLWZpbGwiXSxbMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5Il0sWzEsImhlYWRlci1yb3ciLCJjbHItcm93'@;
put 'IiwiYm9yZGVyLWJvdHRvbS1kaXZpZGVyIiwianVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJ3LTEwMCIsIm0tMCJdLFsxLCJ0aXRsZS1jb2wiLCJjbHItY29sLWF1dG8iXSxbMSwidmlld2VyVGl0bGUiLCJtdC0xNyJdLFsxLCJ0ZXh0LWNlbnRlciIsIm10LTEwIl0sWyJjbHJNZWRpdW0iLCIi'@;
put 'LDQsIm5nSWYiXSxbImNsYXNzIiwibm8tdGFibGUtc2VsZWN0ZWQtaW5mbyBwb2ludGVyLWV2ZW50cy1ub25lIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImxpYmluZm8gbS0wIGNsci1yb3ciLDQsIm5nSWYiXSxbMSwibm8tdGFibGUtc2VsZWN0ZWQtaW5mbyIsInBvaW50ZXItZXZlbnRzLW5vbmUi'@;
put 'XSxbInNoYXBlIiwiaW5mby1zdGFuZGFyZCIsInNpemUiLCI0MCIsMSwiaXMtaW5mbyIsImljb24tZGMtZmlsbCJdLFsxLCJsaWJpbmZvIiwibS0wIiwiY2xyLXJvdyJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBtLTAgdy0xMDAiLDQsIm5nSWYiXSxbMSwidGV4dC1jZW50ZXIiLCJtLTAiLCJ3'@;
put 'LTEwMCJdLFsic2hhcGUiLCJyZWZyZXNoIiwxLCJyZWZyZXNoLXRhYmxlIiwibS0wIiwzLCJjbGljayJdLFsxLCJtLTAiXSxbMSwibS0wIiwiZm9udC1ib2xkIl0sWzEsImNhcmQtYmxvY2siLCJub0RhdGEiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsInNpemUiLCI2MCIsMSwiaXMt'@;
put 'aW5mbyJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBjb2xvci1ncmF5Iiw0LCJuZ0lmIl0sWzEsImNsci1mbGV4LTEiXSxbImhvdElkIiwiaG90SW5zdGFuY2UiLCJpZCIsImhvdFRhYmxlIiwic3RyZXRjaEgiLCJhbGwiLDMsIm11bHRpQ29sdW1uU29ydGluZyIsInZpZXdwb3J0Um93UmVuZGVy'@;
put 'aW5nT2Zmc2V0IiwiZGF0YSIsImNvbEhlYWRlcnMiLCJjb2x1bW5zIiwiY29weVBhc3RlIiwiY29udGV4dE1lbnUiLCJmaWx0ZXJzIiwiZHJvcGRvd25NZW51IiwiaGVpZ2h0IiwibW9kaWZ5Q29sV2lkdGgiLCJjZWxscyIsIm1heFJvd3MiLCJtYW51YWxDb2x1bW5SZXNpemUiLCJsaWNlbnNl'@;
put 'S2V5Il0sWzEsIm10LTItaSIsInctMTAwIiwidGV4dC1jZW50ZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxmKXtpZigxJmEmJih5ZSgwLCJhcHAtc2lkZWJhciIsMCksRXQoInNjcm9sbGVkVG9Cb3R0b20iLGZ1bmN0aW9uKCl7cmV0dXJuIGYubG9hZE1vcmVMaWJyYXJpZXMoKX0pLHR0KDEs'@;
put 'U0h0LDIsMCwiZGl2IiwxKSx5ZSgyLCJjbHItdHJlZSIpLHR0KDMsRUh0LDYsMywiY2xyLXRyZWUtbm9kZSIsMiksdHQoNCxOSHQsMiwxLCJuZy1jb250YWluZXIiLDMpLENlKCksdHQoNSxWSHQsMywwLCJkaXYiLDQpLENlKCkseWUoNiwiZGl2Iiw1KSx0dCg3LEJIdCwxNCwwLCJkaXYiLDYp'@;
put 'LHR0KDgsakh0LDEsMCwiZGl2Iiw3KSx5ZSg5LCJjbHItbW9kYWwiLDgpLEV0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBmLm9wZW5Eb3dubG9hZD1ofSkseWUoMTAsImgzIiw5KSxZZSgxMSwiRG93bmxvYWQiKSxDZSgpLHllKDEyLCJkaXYiLDEwKSgxMywiZGl2'@;
put 'IiwxMSkoMTQsImNsci1zZWxlY3QtY29udGFpbmVyIiwxMikoMTUsImxhYmVsIiksWWUoMTYsIlBsZWFzZSBjaG9vc2UgZG93bmxvYWQgZm9ybWF0IiksQ2UoKSx5ZSgxNywic2VsZWN0IiwxMyksRXQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBmLmRvd25sb2FkRm9ybWF0'@;
put 'PWh9KSx5ZSgxOCwib3B0aW9uIiwxNCksWWUoMTksIkNTViIpLENlKCkseWUoMjAsIm9wdGlvbiIsMTUpLFllKDIxLCJEYXRhbGluZXMgKGNhcmRzIGZpbGUpIiksQ2UoKSx5ZSgyMiwib3B0aW9uIiwxNiksWWUoMjMsIkRETCAoUEdTUUwgRmxhdm91cikiKSxDZSgpLHllKDI0LCJvcHRpb24i'@;
put 'LDE3KSxZZSgyNSwiRERMIChTQVMgRmxhdm91cikiKSxDZSgpLHllKDI2LCJvcHRpb24iLDE4KSxZZSgyNywiRERMIChUU1FMIEZsYXZvdXIpIiksQ2UoKSx5ZSgyOCwib3B0aW9uIiwxOSksWWUoMjksIkV4Y2VsICgueGxzeCkiKSxDZSgpLHllKDMwLCJvcHRpb24iLDIwKSxZZSgzMSwiTWFy'@;
put 'a2Rvd24gKC5tZCkiKSxDZSgpKCkoKSgpKCkseWUoMzIsImRpdiIsMjEpKDMzLCJidXR0b24iLDIyKSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGYub3BlbkRvd25sb2FkPSExfSksWWUoMzQsIiBDYW5jZWwgIiksQ2UoKSx5ZSgzNSwiYnV0dG9uIiwyMyksRXQoImNsaWNrIixmdW5j'@;
put 'dGlvbigpe3JldHVybiBmLmRvd25sb2FkRm9ybWF0LmluY2x1ZGVzKCJEREwiKT9mLmRvd25sb2FkRERMKCk6Zi5kb3dubG9hZERhdGEoKX0pLFllKDM2LCIgT2sgIiksQ2UoKSgpKCkseWUoMzcsImNsci1tb2RhbCIsOCksRXQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oaCl7cmV0'@;
put 'dXJuIGYud2ViUXVlcnk9aH0pLHllKDM4LCJoMyIsOSksWWUoMzksIiBXZWIgUXVlcnkgVVJMICIpLENlKCkseWUoNDAsImRpdiIsMjQpKDQxLCJkaXYiLDI1KSg0MiwiZGl2IiwyNikoNDMsImRpdiIsMjcpKDQ0LCJkaXYiLDI4KSg0NSwic3BhbiIpLFllKDQ2LCJDb3B5IHRoZSBiZWxvdyBp'@;
put 'bnRvIHlvdXIgcHJlZmVycmVkIGNsaWVudCB0b29sOiIpLENlKCkseWUoNDcsImRpdiIsMjkpKDQ4LCJkaXYiLDMwKSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGYud2ViUXVlcnlUYWI9ITAsZi5zaG93V2ViUXVlcnkoKX0pLHRuKDQ5LCJpbnB1dCIsMzEpLHllKDUwLCJsYWJlbCIp'@;
put 'LFllKDUxLCJUQUIiKSxDZSgpKCkseWUoNTIsImRpdiIsMzApLEV0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZi53ZWJRdWVyeVRhYj0hMSxmLnNob3dXZWJRdWVyeSgpfSksdG4oNTMsImlucHV0IiwzMSkseWUoNTQsImxhYmVsIiksWWUoNTUsIkNTViIpLENlKCkoKSgpKCkseWUoNTYs'@;
put 'ImRpdiIsMzIpKDU3LCJ0ZXh0YXJlYSIsMzMsMzQpLEV0KCJmb2N1cyIsZnVuY3Rpb24oaCl7cmV0dXJuIGYub25DbGlDb21tYW5kRm9jdXMoaCl9KSxZZSg1OSwiICAgICAgICAgICAgICAiKSxDZSgpKCkseWUoNjAsImRpdiIsMzUpKDYxLCJidXR0b24iLDM2KSxFdCgiY2xpY2siLGZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIGYuY29weVRvQ2xpcCgpfSksWWUoNjIsIiBjb3B5IHRvIGNsaXBib2FyZCAiKSxDZSgpKCkoKSgpKCkoKSx5ZSg2MywiZGl2IiwyMSkoNjQsImJ1dHRvbiIsMjIpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZi53ZWJRdWVyeT0hMX0pLFllKDY1LCIgY2xvc2Ug'@;
put 'IiksQ2UoKSgpKCkseWUoNjYsImNsci1tb2RhbCIsMzcpLEV0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBmLmZpbHRlcj1ofSkseWUoNjcsImgzIiw5KSxZZSg2OCwiIEZpbHRlciBmb3IgdGFibGU6IikseWUoNjksInNwYW4iKSxZZSg3MCksQ2UoKSgpLHllKDcx'@;
put 'LCJkaXYiLDEwKSx0dCg3Mix6SHQsMiwwLCJhcHAtcXVlcnkiLDM4KSxDZSgpLHllKDczLCJkaXYiLDIxKSg3NCwiYnV0dG9uIiwzOSksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBmLnJlc2V0RmlsdGVyKCl9KSxZZSg3NSwiIHJlc2V0IGZpbHRlciAiKSxDZSgpLHllKDc2LCJidXR0'@;
put 'b24iLDQwKSxFdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGYuZmlsdGVyPSExLGYucmVtb3ZlUXVlcnkoKX0pLFllKDc3LCIgQ2FuY2VsICIpLENlKCkseWUoNzgsImJ1dHRvbiIsNDEpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZi5zZW5kQ2xhdXNlKCl9KSxZZSg3OSwiIE9r'@;
put 'ICIpLENlKCkoKSgpLHllKDgwLCJjbHItbW9kYWwiLDQyKSxFdCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gZi5xdWVyeUVycj1ofSkseWUoODEsImgzIiw0MyksWWUoODIsIkVycm9yIiksQ2UoKSx5ZSg4MywiZGl2IiwxMCkoODQsInAiKSxZZSg4NSksQ2UoKSgp'@;
put 'LHllKDg2LCJkaXYiLDIxKSg4NywiYnV0dG9uIiw0NCksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBmLnF1ZXJ5RXJyPSExfSksWWUoODgsIiBDYW5jZWwgIiksQ2UoKSx5ZSg4OSwiYnV0dG9uIiw0NSksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBmLnF1ZXJ5RXJyPSExfSks'@;
put 'WWUoOTAsIiBPayAiKSxDZSgpKCkoKSx0dCg5MSxVSHQsNiwwLCJkaXYiLDQ2KSx0dCg5MixTTnQsOCw2LCJkaXYiLDQ3KSxDZSgpLHllKDkzLCJhcHAtZGF0YXNldC1pbmZvIiw0OCksRXQoIm9wZW5DaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBmLmRhdGFzZXRJbmZvPWh9KSxDZSgpLHll'@;
put 'KDk0LCJhcHAtdmlld2JveGVzIiw0OSksRXQoInZpZXdib3hNb2RhbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIGYudmlld2JveE9wZW49aH0pLENlKCkpLDImYSl7Y29uc3QgZD1RaSg1OCk7U2UoMSksUmUoIm5nSWYiLGYubGlicmFyaWVzTG9hZGluZyksU2UoMiksUmUoIm5nSWYiLGYu'@;
put 'bGlicmFyaWVzKSxTZSgxKSxSZSgibmdGb3JPZiIsZi5saWJyYXJpZXMpLFNlKDEpLFJlKCJuZ0lmIixmLmxpYnJhcmllc1BhZ2luZyksU2UoMiksUmUoIm5nSWYiLGYubnVsbFZhcmlhYmxlcyksU2UoMSksUmUoIm5nSWYiLGYubnVsbFZhcmlhYmxlcyksU2UoMSksUmUoImNsck1vZGFsT3Bl'@;
put 'biIsZi5vcGVuRG93bmxvYWQpKCJjbHJNb2RhbFNpemUiLCJtZCIpLFNlKDgpLFJlKCJuZ01vZGVsIixmLmRvd25sb2FkRm9ybWF0KSxTZSgxOCksUmUoImlkIixmLnRhYmxlVGl0bGUpLFNlKDIpLFJlKCJjbHJNb2RhbE9wZW4iLGYud2ViUXVlcnkpKCJjbHJNb2RhbFNpemUiLCJsZyIpLFNl'@;
put 'KDEyKSxSZSgiY2hlY2tlZCIsZi53ZWJRdWVyeVRhYiksU2UoNCksUmUoImNoZWNrZWQiLCFmLndlYlF1ZXJ5VGFiKSxTZSg0KSxSdSgidmFsdWUiLGYud2ViUXVlcnlUZXh0KSxTZSg0KSxSZSgibmd4Q2xpcGJvYXJkIixkKSxTZSg1KSxSZSgiY2xyTW9kYWxPcGVuIixmLmZpbHRlcikoImNs'@;
put 'ck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsQ2xvc2FibGUiLCExKSxTZSg0KSx3cigiICIsZi5saWJUYWIsIiAiKSxTZSgyKSxSZSgibmdJZiIsZi5maWx0ZXIpLFNlKDYpLFJlKCJjbHJMb2FkaW5nIixmLnN1Ym1pdExvYWRpbmcpLFNlKDIpLFJlKCJjbHJNb2RhbE9wZW4iLGYucXVlcnlF'@;
put 'cnIpLFNlKDUpLGFyKGYucXVlcnlFcnJNZXNzYWdlKSxTZSg2KSxSZSgibmdJZiIsZi5sb2FkaW5nVGFibGVWaWV3KSxTZSgxKSxSZSgibmdJZiIsIWYubG9hZGluZ1RhYmxlVmlldyksU2UoMSksUmUoIm9wZW4iLGYuZGF0YXNldEluZm8pKCJkc21ldGEiLGYuZHNtZXRhKSxTZSgxKSxSZSgi'@;
put 'dmlld2JveE1vZGFsIixmLnZpZXdib3hPcGVuKX19LGRlcGVuZGVuY2llczpbQTZlLFJhLCRpLGtmLENoLHlIdCxwNCxTMSxNMSxpcyxSMCxMMCxXYSxoNCx6YSxDZCxEZCxMZixpNSxSbCxNYyxrYyxKYyx4ZCxJaCxlbCx2c2UsQjAsbDcsVjAsUmYsbTcscDcsYTMsbzUsYTUseDcsTVMsRVMs'@;
put 'a1MsUmgsaEwsazQsVDZlLGJJLEhKLFI3LEQ2ZSx3SHRdLHN0eWxlczpbIi5jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjA7ZmxleDoxO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Y2xyLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25b'@;
put 'X25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH0udG9nZ2xlLXN3aXRjaFtfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFt0eXBlPWNoZWNrYm94XVtfbmdjb250ZW50LSVDT01QJV06Y2hlY2tlZCArIGxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXTpiZWZvcmV7Ym9yZGVyLWNv'@;
put 'bG9yOiMzMTQzNTE7YmFja2dyb3VuZC1jb2xvcjojMzE0MzUxIWltcG9ydGFudDt0cmFuc2l0aW9uOi4xNXMgZWFzZS1pbjt0cmFuc2l0aW9uLXByb3BlcnR5OmJvcmRlci1jb2xvcixiYWNrZ3JvdW5kLWNvbG9yfS5oZWFkZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aXRsZS1jb2xb'@;
put 'X25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9LmhlYWRlci1yb3dbX25nY29udGVudC0lQ09NUCVdICAgLm9wdGlvbnMtY29sW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5zd1tfbmdjb250'@;
put 'ZW50LSVDT01QJV17bWFyZ2luOjFyZW0gMHJlbSAuNXJlbSAxcmVtfS5pbmZvQmFyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjEwcHg7YmFja2dyb3VuZDojNDk1OTY3O2NvbG9yOiNmZmY7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzozcHg7Zm9udC1zaXplOjE2cHh9LmZpbHRl'@;
put 'clNpZGVbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MjZweDttYXJnaW4tYm90dG9tOjE5cHh9Lm9wdGlvbnMtZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVdICAgICBjbHItaWNvbnttYXJnaW4tcmlnaHQ6NXB4fS52aWV3ZXJUaXRsZVtfbmdjb250ZW50LSVDT01QJV17dGV4dC1h'@;
put 'bGlnbjpjZW50ZXI7bWFyZ2luLWJvdHRvbToxNXB4fS5kcm9wZG93bi1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxODBweDttYXJnaW4tdG9wOi0xOHB4O3BhZGRpbmc6MH0uZHJvcGRvd24tbWVudVtfbmdjb250ZW50LSVDT01QJV0gICAuYnRuW19uZ2NvbnRlbnQtJUNPTVAlXXt3'@;
put 'aWR0aDoxMDAlO3RleHQtdHJhbnNmb3JtOm5vbmV9LmNhcmRGbGV4W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcn0ubm9EYXRhW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmbGV4LWRp'@;
put 'cmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXg6MX0uZmlsdGVyQnRuW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5lZGl0QnRuW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50'@;
put 'OmZsZXgtc3RhcnR9LmJ0blZpZXdbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIWltcG9ydGFudH0uY29udGVudC1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41cmVtIWltcG9ydGFudDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5kb3dubG9hZC1zZWxl'@;
put 'Y3RbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLXNlbGVjdC13cmFwcGVye21heC1oZWlnaHQ6dW5zZXQhaW1wb3J0YW50fS5yZWZyZXNoLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtjdXJzb3I6cG9pbnRlcjttYXJnaW4tbGVmdDo1cHh9LmxpYmluZm9bX25nY29udGVudC0lQ09NUCVd'@;
put 'e3BhZGRpbmc6MTBweCAyMHB4O292ZXJmbG93OmF1dG99aG90LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLnByaW1hcnlLZXlIZWFkZXJTdHlsZXtiYWNrZ3JvdW5kOnJnYmEoNDgsMTA3LDAsLjQzMTM3MjU0OSl9Lm5vLXRhYmxlLXNlbGVjdGVkLWluZm9bX25nY29udGVudC0lQ09N'@;
put 'UCVde2JhY2tncm91bmQ6bm9uZTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0ud2ViLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXXttYXgtaGVpZ2h0OjM1dmh9LndlYi1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAud2ViLXF1ZXJ5LXRl'@;
put 'eHRbX25nY29udGVudC0lQ09NUCVde21pbi1oZWlnaHQ6MTAwcHg7bWF4LWhlaWdodDoxMDBweH1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCl7LmZpbHRlckJ0bltfbmdjb250ZW50LSVDT01QJV0sIC5lZGl0QnRuW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7'@;
put 'anVzdGlmeS1jb250ZW50OmNlbnRlcn19QG1lZGlhIChtaW4td2lkdGg6IDU3NnB4KXsucm93W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tcmlnaHQ6MHJlbTttYXJnaW4tbGVmdDowcmVtfX0iXX0pLGx9KSgpO2NvbnN0IE1OdD1be3BhdGg6IiIsY29tcG9uZW50OnNGdCxjaGlsZHJlbjpb'@;
put 'e3BhdGg6IiIscGF0aE1hdGNoOiJmdWxsIixyZWRpcmVjdFRvOiJkYXRhIn0se3BhdGg6ImRhdGEiLGNvbXBvbmVudDpBRn0se3BhdGg6ImRhdGEiLGNvbXBvbmVudDpBRn0se3BhdGg6ImRhdGEvOmxpYk1lbS86ZmlsdGVySWQiLGNvbXBvbmVudDpBRn0se3BhdGg6ImRhdGEvOmxpYk1lbSIs'@;
put 'Y29tcG9uZW50OkFGfSx7cGF0aDoibGluZWFnZSIsY29tcG9uZW50OnhGfSx7cGF0aDoibGluZWFnZS86dGFibGVpZC86ZGlyZWN0aW9uIixjb21wb25lbnQ6eEZ9LHtwYXRoOiJsaW5lYWdlL2NvbHVtbi86Y29sdXJpLzpkaXJlY3Rpb24iLGNvbXBvbmVudDp4Rn0se3BhdGg6ImxpbmVhZ2Uv'@;
put 'Y29sdW1uLzpjb2x1cmkvOmRpcmVjdGlvbi86cmVsb2FkIixjb21wb25lbnQ6eEZ9LHtwYXRoOiJ2aXlhLWFwaS1leHBsb3JlciIsY29tcG9uZW50Om1IdH0se3BhdGg6Im1ldGFkYXRhIixjb21wb25lbnQ6RVF9LHtwYXRoOiJtZXRhZGF0YS9vYmplY3QvOm9iamVjdElEIixjb21wb25lbnQ6'@;
put 'RVF9LHtwYXRoOiJtZXRhZGF0YS9vYmplY3QvOm9iamVjdElELzpvYmplY3ROYW1lIixjb21wb25lbnQ6RVF9LHtwYXRoOiJ1c2VybmF2Iixjb21wb25lbnQ6bEZ0LGNoaWxkcmVuOlt7cGF0aDoiIixwYXRoTWF0Y2g6ImZ1bGwiLHJlZGlyZWN0VG86Imdyb3VwcyJ9LHtwYXRoOiJ1c2VycyIs'@;
put 'Y29tcG9uZW50Om92ZX0se3BhdGg6InVzZXJzLzp1cmkiLGNvbXBvbmVudDpvdmV9LHtwYXRoOiJncm91cHMiLGNvbXBvbmVudDpINmV9LHtwYXRoOiJncm91cHMvOnVyaSIsY29tcG9uZW50Okg2ZX0se3BhdGg6InJvbGVzIixjb21wb25lbnQ6aXZlfSx7cGF0aDoicm9sZXMvOnVyaSIsY29t'@;
put 'cG9uZW50Oml2ZX1dfV19XTtsZXQga050PSgoKT0+e2NsYXNzIGx7fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NW1vZD1EaSh7dHlwZTpsfSksbC5cdTAyNzVpbmo9eGkoe2ltcG9ydHM6W280LmZvckNoaWxkKE1OdCksbzRdfSksbH0p'@;
put 'KCksRU50PSgoKT0+e2NsYXNzIGx7fXJldHVybiBsLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGwpfSxsLlx1MDI3NW1vZD1EaSh7dHlwZTpsfSksbC5cdTAyNzVpbmo9eGkoe2ltcG9ydHM6W0Y2ZSxibyxrTnQsYkh0LGRjLElkLHBMLmZvclJvb3QoKSxCRSxWUCxWRSxC'@;
put 'SiwkM119KSxsfSkoKTtmdW5jdGlvbiB4TnQobCxjKXtpZigxJmwmJih5ZSgwLCJwIiw2KSxZZSgxLCIgVmlld2VyIHJvd3MgbGltaXQ6ICIpLHllKDIsInNwYW4iLDcpLFllKDMpLENlKCkoKSksMiZsKXtjb25zdCBhPUdlKCk7U2UoMyksYXIoYS5saWNlbmNlU3RhdGUudmFsdWUudmlld2Vy'@;
put 'X3Jvd3NfYWxsb3dlZCl9fWZ1bmN0aW9uIEFOdChsLGMpe2lmKDEmbCYmKHllKDAsInAiLDYpLFllKDEsIiBFZGl0b3Igcm93cyBsaW1pdDogIikseWUoMiwic3BhbiIsNyksWWUoMyksQ2UoKSgpKSwyJmwpe2NvbnN0IGE9R2UoKTtTZSgzKSxhcihhLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0'@;
put 'b3Jfcm93c19hbGxvd2VkKX19ZnVuY3Rpb24gVE50KGwsYyl7aWYoMSZsJiYoeWUoMCwicCIsNiksWWUoMSwiIFN0YWdlIHJvd3MgbGltaXQ6ICIpLHllKDIsInNwYW4iLDcpLFllKDMpLENlKCkoKSksMiZsKXtjb25zdCBhPUdlKCk7U2UoMyksYXIoYS5saWNlbmNlU3RhdGUudmFsdWUuc3Rh'@;
put 'Z2Vfcm93c19hbGxvd2VkKX19ZnVuY3Rpb24gT050KGwsYyl7aWYoMSZsJiYoeWUoMCwicCIsNiksWWUoMSwiIEhpc3Rvcnkgcm93cyBsaW1pdDogIikseWUoMiwic3BhbiIsNyksWWUoMyksQ2UoKSgpKSwyJmwpe2NvbnN0IGE9R2UoKTtTZSgzKSxhcihhLmxpY2VuY2VTdGF0ZS52YWx1ZS5o'@;
put 'aXN0b3J5X3Jvd3NfYWxsb3dlZCl9fWZ1bmN0aW9uIEROdChsLGMpe2lmKDEmbCYmKHllKDAsInAiLDYpLFllKDEsIiBTdWJtaXQgcm93cyBsaW1pdDogIikseWUoMiwic3BhbiIsNyksWWUoMyksQ2UoKSgpKSwyJmwpe2NvbnN0IGE9R2UoKTtTZSgzKSxhcihhLmxpY2VuY2VTdGF0ZS52YWx1'@;
put 'ZS5zdWJtaXRfcm93c19saW1pdCl9fWZ1bmN0aW9uIElOdChsLGMpe2lmKDEmbCYmKHllKDAsInAiLDYpLFllKDEsIiBUYWJsZXMgaW4gbGlicmFyeSBsaW1pdDogIikseWUoMiwic3BhbiIsNyksWWUoMyksQ2UoKSgpKSwyJmwpe2NvbnN0IGE9R2UoKTtTZSgzKSxhcihhLmxpY2VuY2VTdGF0'@;
put 'ZS52YWx1ZS50YWJsZXNfaW5fbGlicmFyeV9saW1pdCl9fWZ1bmN0aW9uIFJOdChsLGMpe2lmKDEmbCYmKHllKDAsInAiLDYpLFllKDEsIiBWaWV3Ym94ZXMgbGltaXQ6ICIpLHllKDIsInNwYW4iLDcpLFllKDMpLENlKCkoKSksMiZsKXtjb25zdCBhPUdlKCk7U2UoMyksYXIoYS5saWNlbmNl'@;
put 'U3RhdGUudmFsdWUudmlld2JveF9saW1pdCl9fWZ1bmN0aW9uIExOdChsLGMpe2lmKDEmbCYmKHllKDAsInAiLDYpLFllKDEsIiBMaW5lYWdlIGRhaWx5IGxpbWl0OiAiKSx5ZSgyLCJzcGFuIiw3KSxZZSgzKSxDZSgpKCkpLDImbCl7Y29uc3QgYT1HZSgpO1NlKDMpLGFyKGEubGljZW5jZVN0'@;
put 'YXRlLnZhbHVlLmxpbmVhZ2VfZGFpbHlfbGltaXQpfX1mdW5jdGlvbiBQTnQobCxjKXtpZigxJmwpe2NvbnN0IGE9Wm4oKTt5ZSgwLCJkaXYiLDE3KSxZZSgxLCIgUmVmcmVzaCBEYXRhIExpbmVhZ2UgIikseWUoMiwiYnV0dG9uIiwxOCksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBV'@;
put 'dChhKSxadChHZSgyKS5yZWZyZXNoRGF0YUxpbmVhZ2UoKSl9KSxZZSgzLCIgUkVGUkVTSCAiKSxDZSgpKCl9aWYoMiZsKXtjb25zdCBhPUdlKDIpO1NlKDIpLFJlKCJjbHJMb2FkaW5nIixhLnJlZnJlc2hpbmdEYXRhTGluZWFnZSl9fWZ1bmN0aW9uIEZOdChsLGMpe2lmKDEmbCl7Y29uc3Qg'@;
put 'YT1abigpO1dyKDApLHR0KDEsUE50LDQsMSwiZGl2IiwxNikseWUoMiwiZGl2IiwxNyksWWUoMywiIFJlZnJlc2ggRGF0YSBDYXRhbG9nICIpLHllKDQsImJ1dHRvbiIsMTgpLEV0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gVXQoYSksWnQoR2UoKS5yZWZyZXNoRGF0YUNhdGFsb2coKSl9'@;
put 'KSxZZSg1LCIgUkVGUkVTSCAiKSxDZSgpKCkseWUoNiwiZGl2IiwxNyksWWUoNywiIERvd25sb2FkIENvbmZpZ3VyYXRpb24gIikseWUoOCwiYnV0dG9uIiwxOSksRXQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBVdChhKSxadChHZSgpLmRvd25sb2FkQ29uZmlndXJhdGlvbigpKX0pLFll'@;
put 'KDksIiBET1dOTE9BRCAiKSxDZSgpKCkseWUoMTAsImRpdiIsMTcpLFllKDExLCIgVXBkYXRlIExpY2VuY2UgS2V5ICIpLHllKDEyLCJidXR0b24iLDIwKSxZZSgxMywiIFVQREFURSAiKSxDZSgpKCksR3IoKX1pZigyJmwpe2NvbnN0IGE9R2UoKTtTZSgxKSxSZSgibmdJZiIsIlNBUzkiPT09'@;
put 'YS5zZXJ2ZXJUeXBlKSxTZSgzKSxSZSgiY2xyTG9hZGluZyIsYS5yZWZyZXNoaW5nRGF0YUNhdGFsb2cpfX1jb25zdCBITnQ9W3twYXRoOiIiLHJlZGlyZWN0VG86ImhvbWUiLHBhdGhNYXRjaDoiZnVsbCJ9LHtwYXRoOiJ2aWV3Iixsb2FkQ2hpbGRyZW46KCk9PkVOdH0se3BhdGg6ImFwcHJv'@;
put 'dmUiLGNvbXBvbmVudDpiWWUsY2hpbGRyZW46W3twYXRoOiIiLHBhdGhNYXRjaDoiZnVsbCIscmVkaXJlY3RUbzoidG9hcHByb3ZlIn0se3BhdGg6InRvYXBwcm92ZSIsY29tcG9uZW50OmdjZX0se3BhdGg6ImFwcHJvdmVEZXQvOnRhYmxlSWQiLGNvbXBvbmVudDpiY2V9LHtwYXRoOiJzdWJt'@;
put 'aXR0ZWQiLGNvbXBvbmVudDpHWn1dfSx7cGF0aDoibGljZW5zaW5nLzphY3Rpb24iLGNvbXBvbmVudDpqV2UsY2FuQWN0aXZhdGU6W2VZXSxjYW5EZWFjdGl2YXRlOltlWV19LHtwYXRoOiJob21lIixjb21wb25lbnQ6ZlVlfSx7cGF0aDoiZWRpdG9yIixsb2FkQ2hpbGRyZW46KCk9PnVUdH0s'@;
put 'e3BhdGg6InN0YWdlIixsb2FkQ2hpbGRyZW46KCk9PnlzdH0se3BhdGg6InN5c3RlbSIsY29tcG9uZW50OigoKT0+e2NsYXNzIGx7Y29uc3RydWN0b3IoYSxmLGQpe3RoaXMuYXBwU2VydmljZT1hLHRoaXMuc2FzU2VydmljZT1mLHRoaXMubGljZW5jZVNlcnZpY2U9ZCx0aGlzLmFwcEluZm89'@;
put 'e2FkYXB0ZXJWZXJzaW9uOiI0LjMuNiIsYXBwVmVyc2lvbjoidjYuMS4wIi5yZXBsYWNlKCJ2IiwiIiksYnVpbGRUaW1lc3RhbXA6WG5lKCkocGFyc2VJbnQoIjE2OTAyOTgxMTc1NDkiKSkuZm9ybWF0KCJERC1NTU0tWVlZWSBISDpNTSIpfSx0aGlzLmh0dHA9Imh0dHA6Ij09PWxvY2F0aW9u'@;
put 'LnByb3RvY29sLHRoaXMucmVmcmVzaGluZ0RhdGFDYXRhbG9nPSExLHRoaXMucmVmcmVzaGluZ0RhdGFMaW5lYWdlPSExLHRoaXMucmVzcG9uc2U9Ik5vIHJlc3BvbnNlIix0aGlzLnJlc3BvbnNlTW9kYWw9ITEsdGhpcy5JbmZpbml0eT0xLzAsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNl'@;
put 'bmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5zZXJ2ZXJUeXBlPXRoaXMuc2FzU2VydmljZS5nZXRTZXJ2ZXJUeXBlKCksdGhpcy5saWNlbmNlSW5mbz10aGlzLmxpY2VuY2VTZXJ2aWNlLmdldExpY2Vuc2VLZXlEYXRhKCksdGhpcy5lbnZpcm9ubWVudEluZm89dGhpcy5hcHBTZXJ2aWNl'@;
put 'LmdldEVudmlyb25tZW50SW5mbygpLHRoaXMuZW52aXJvbm1lbnRJbmZvJiYodGhpcy5lbnZpcm9ubWVudEluZm8uQVVUT0VYRUM9ZGVjb2RlVVJJQ29tcG9uZW50KHRoaXMuZW52aXJvbm1lbnRJbmZvLkFVVE9FWEVDKSl9bmdPbkluaXQoKXt9ZG93bmxvYWRDb25maWd1cmF0aW9uKCl7bGV0'@;
put 'IGE9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksZj1hLnNlcnZlclVybCxkPWEuYXBwTG9jLGg9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3aW5kb3cub3BlbihmK2grIi8/X3Byb2dyYW09IitkKyIvc2VydmljZXMvYWRtaW4vZXhwb3J0Y29uZmlnIil9cmVm'@;
put 'cmVzaERhdGFDYXRhbG9nKCl7dGhpcy5yZWZyZXNoaW5nRGF0YUNhdGFsb2c9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoImFkbWluL3JlZnJlc2hjYXRhbG9nIixudWxsKS50aGVuKGE9Pnt0aGlzLnJlc3BvbnNlPXRoaXMucGFyc2VSZXNwb25zZShhKSx0aGlzLnJlc3BvbnNlTW9kYWw9'@;
put 'ITB9KS5jYXRjaChhPT57dGhpcy5yZXNwb25zZT10aGlzLnBhcnNlUmVzcG9uc2UoYSksdGhpcy5yZXNwb25zZU1vZGFsPSEwfSkuZmluYWxseSgoKT0+e3RoaXMucmVmcmVzaGluZ0RhdGFDYXRhbG9nPSExfSl9cmVmcmVzaERhdGFMaW5lYWdlKCl7dGhpcy5yZWZyZXNoaW5nRGF0YUxpbmVh'@;
put 'Z2U9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoImFkbWluL3JlZnJlc2h0YWJsZWxpbmVhZ2UiLG51bGwpLnRoZW4oYT0+e3RoaXMucmVzcG9uc2U9dGhpcy5wYXJzZVJlc3BvbnNlKGEpLHRoaXMucmVzcG9uc2VNb2RhbD0hMH0pLmNhdGNoKGE9Pnt0aGlzLnJlc3BvbnNlPXRoaXMucGFy'@;
put 'c2VSZXNwb25zZShhKSx0aGlzLnJlc3BvbnNlTW9kYWw9ITB9KS5maW5hbGx5KCgpPT57dGhpcy5yZWZyZXNoaW5nRGF0YUxpbmVhZ2U9ITF9KX1wYXJzZVJlc3BvbnNlKGEpe3JldHVybiJvYmplY3QiPT10eXBlb2YgYT9KU09OLnN0cmluZ2lmeShhKTphfX1yZXR1cm4gbC5cdTAyNzVmYWM9'@;
put 'ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxsKShydCh3RCkscnQocGwpLHJ0KGIxKSl9LGwuXHUwMjc1Y21wPWtyKHt0eXBlOmwsc2VsZWN0b3JzOltbImFwcC1zeXN0ZW0iXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjEzMCx2YXJzOjM0LGNvbnN0czpbWzEs'@;
put 'ImNvbnRlbnQtYXJlYSJdLFsxLCJjYXJkIiwicC0xMCIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJ0ZXh0LWNlbnRlciIsIm0tMCJdLFsxLCJ3LTEwMCIsImxpZ2h0Il0sWzEsImNv'@;
put 'bnRlbnQtYm94IiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIl0sWzEsInN5cy1pbmZvIiwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJjbHItZmxleC1jb2x1bW4iLCJjbHItZmxleC1sZy1yb3ciXSxbMSwibS0wIl0sWzEsImRhcmsiXSxbMSwiZC1mbGV4IiwiY2xy'@;
put 'LWp1c3RpZnktY29udGVudC1sZy1jZW50ZXIiXSxbImNsYXNzIiwibS0wIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxPcGVuQ2hhbmdlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBl'@;
put 'IiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbImNsYXNzIiwiYWRtaW4tYWN0aW9uIiw0LCJuZ0lmIl0sWzEsImFkbWluLWFjdGlvbiJdLFsxLCJidG4iLCJidG4taW5mbyIsImJ0bi1zbSIsMywiY2xyTG9hZGluZyIsImNsaWNrIl0sWzEsImJ0'@;
put 'biIsImJ0bi1pbmZvIiwiYnRuLXNtIiwzLCJjbGljayJdLFsicm91dGVyTGluayIsIi9saWNlbnNpbmcvdXBkYXRlIiwxLCJidG4iLCJidG4taW5mbyIsImJ0bi1zbSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGYpezEmYSYmKHllKDAsImRpdiIsMCkoMSwiZGl2IiwxKSgyLCJoNCIsMiksWWUo'@;
put 'MywiU3lzdGVtIGluZm9ybWF0aW9uIiksQ2UoKSx0big0LCJociIsMykseWUoNSwiZGl2Iiw0KSg2LCJkaXYiLDUpKDcsImRpdiIpKDgsImg2Iiw2KSxZZSg5LCJFbnZpcm9ubWVudCBEZXRhaWxzICIpLHRuKDEwLCJzcGFuIiw3KSxDZSgpLHllKDExLCJwIiw2KSxZZSgxMiwiIFNZU1NJVEU6'@;
put 'ICIpLHllKDEzLCJzcGFuIiw3KSxZZSgxNCksQ2UoKSgpLHllKDE1LCJwIiw2KSxZZSgxNiwiIFNZU1NDUEw6ICIpLHllKDE3LCJzcGFuIiw3KSxZZSgxOCksQ2UoKSgpLHllKDE5LCJwIiw2KSxZZSgyMCwiIFNZU1RDUElQSE9TVE5BTUU6ICIpLHllKDIxLCJzcGFuIiw3KSxZZSgyMiksQ2Uo'@;
put 'KSgpLHllKDIzLCJwIiw2KSxZZSgyNCwiIFNZU1ZMT05HOiAiKSx5ZSgyNSwic3BhbiIsNyksWWUoMjYpLENlKCkoKSx5ZSgyNywicCIsNiksWWUoMjgsIiBNRU1TSVpFOiAiKSx5ZSgyOSwic3BhbiIsNyksWWUoMzApLENlKCkoKSx5ZSgzMSwicCIsNiksWWUoMzIsIiBTWVNQUk9DRVNTTU9E'@;
put 'RTogIikseWUoMzMsInNwYW4iLDcpLFllKDM0KSxDZSgpKCkseWUoMzUsInAiLDYpLFllKDM2LCIgU1lTSE9TVE5BTUU6ICIpLHllKDM3LCJzcGFuIiw3KSxZZSgzOCksQ2UoKSgpLHllKDM5LCJwIiw2KSxZZSg0MCwiIFNZU0hPU1RJTkZPTE9ORzogIikseWUoNDEsInNwYW4iLDcpLFllKDQy'@;
put 'KSxDZSgpKCkseWUoNDMsInAiLDYpLFllKDQ0LCIgU1lTRU5DT0RJTkc6ICIpLHllKDQ1LCJzcGFuIiw3KSxZZSg0NiksQ2UoKSgpLHllKDQ3LCJwIiw2KSxZZSg0OCwiIEFVVE9FWEVDOiAiKSx5ZSg0OSwic3BhbiIsNyksWWUoNTApLENlKCkoKSx5ZSg1MSwicCIsNiksWWUoNTIsIiBEQyBB'@;
put 'RE1JTiBHUk9VUDogIikseWUoNTMsInNwYW4iLDcpLFllKDU0KSxDZSgpKCkoKSx5ZSg1NSwiZGl2Iiw4KSg1NiwiZGl2IikoNTcsImg2Iiw2KSxZZSg1OCwiIERhdGEgQ29udHJvbGxlciBEZXRhaWxzICIpLHRuKDU5LCJzcGFuIiw3KSxDZSgpLHllKDYwLCJwIiw2KSxZZSg2MSwiIEFwcGxp'@;
put 'Y2F0aW9uIHZlcnNpb246ICIpLHllKDYyLCJzcGFuIiw3KSxZZSg2MyksQ2UoKSgpLHllKDY0LCJwIiw2KSxZZSg2NSwiIEJ1aWxkIHRpbWVzdGFtcDogIikseWUoNjYsInNwYW4iLDcpLFllKDY3KSxDZSgpKCkseWUoNjgsInAiLDYpLFllKDY5LCIgQWRhcHRlciB2ZXJzaW9uOiAiKSx5ZSg3'@;
put 'MCwic3BhbiIsNyksWWUoNzEpLENlKCkoKSx5ZSg3MiwicCIsNiksWWUoNzMsIiBIVFRQOiAiKSx5ZSg3NCwic3BhbiIsNyksWWUoNzUpLENlKCkoKSgpKCkseWUoNzYsImRpdiIpKDc3LCJoNiIsNiksWWUoNzgsIkxpY2VuY2UgZGV0YWlscyAiKSx0big3OSwic3BhbiIsNyksQ2UoKSx5ZSg4'@;
put 'MCwicCIsNiksWWUoODEsIiBWYWxpZCB1bnRpbDogIikseWUoODIsInNwYW4iLDcpLFllKDgzKSxDZSgpKCkseWUoODQsInAiLDYpLFllKDg1LCIgVXNlcnMgYWxsb3dlZDogIikseWUoODYsInNwYW4iLDcpLFllKDg3KSxDZSgpKCkseWUoODgsInAiLDYpLFllKDg5LCIgU2l0ZSBJRHM6ICIp'@;
put 'LHllKDkwLCJzcGFuIiw3KSxZZSg5MSksQ2UoKSgpLHllKDkyLCJwIiw2KSxZZSg5MywiIEZyZWUgVGllcjogIikseWUoOTQsInNwYW4iLDcpLFllKDk1KSxDZSgpKCksdHQoOTYseE50LDQsMSwicCIsOSksdHQoOTcsQU50LDQsMSwicCIsOSksdHQoOTgsVE50LDQsMSwicCIsOSksdHQoOTks'@;
put 'T050LDQsMSwicCIsOSksdHQoMTAwLEROdCw0LDEsInAiLDkpLHR0KDEwMSxJTnQsNCwxLCJwIiw5KSx0dCgxMDIsUk50LDQsMSwicCIsOSksdHQoMTAzLExOdCw0LDEsInAiLDkpLHllKDEwNCwicCIsNiksWWUoMTA1LCIgVmlld2JveGVzOiAiKSx5ZSgxMDYsInNwYW4iLDcpLFllKDEwNyks'@;
put 'Q2UoKSgpLHllKDEwOCwicCIsNiksWWUoMTA5LCIgRmlsZSBVcGxvYWQ6ICIpLHllKDExMCwic3BhbiIsNyksWWUoMTExKSxDZSgpKCkseWUoMTEyLCJwIiw2KSxZZSgxMTMsIiBFZGl0IHJlY29yZDogIikseWUoMTE0LCJzcGFuIiw3KSxZZSgxMTUpLENlKCkoKSx5ZSgxMTYsInAiLDYpLFll'@;
put 'KDExNywiIEFkZCByZWNvcmQ6ICIpLHllKDExOCwic3BhbiIsNyksWWUoMTE5KSxDZSgpKCkoKSgpLHRuKDEyMCwiaHIiLDMpLHR0KDEyMSxGTnQsMTQsMiwibmctY29udGFpbmVyIiwxMCksQ2UoKSgpKCkseWUoMTIyLCJjbHItbW9kYWwiLDExKSxFdCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixm'@;
put 'dW5jdGlvbihoKXtyZXR1cm4gZi5yZXNwb25zZU1vZGFsPWh9KSx5ZSgxMjMsImgzIiwxMiksWWUoMTI0LCJSZXNwb25zZSIpLENlKCkseWUoMTI1LCJkaXYiLDEzKSxZZSgxMjYpLENlKCkseWUoMTI3LCJkaXYiLDE0KSgxMjgsImJ1dHRvbiIsMTUpLEV0KCJjbGljayIsZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gZi5yZXNwb25zZU1vZGFsPSExfSksWWUoMTI5LCIgT2sgIiksQ2UoKSgpKCkpLDImYSYmKFNlKDE0KSxhcihudWxsPT1mLmVudmlyb25tZW50SW5mbz9udWxsOmYuZW52aXJvbm1lbnRJbmZvLlNZU1NJVEUpLFNlKDQpLGFyKG51bGw9PWYuZW52aXJvbm1lbnRJbmZvP251bGw6Zi5l'@;
put 'bnZpcm9ubWVudEluZm8uU1lTU0NQTCksU2UoNCksYXIobnVsbD09Zi5lbnZpcm9ubWVudEluZm8/bnVsbDpmLmVudmlyb25tZW50SW5mby5TWVNUQ1BJUEhPU1ROQU1FKSxTZSg0KSxhcihudWxsPT1mLmVudmlyb25tZW50SW5mbz9udWxsOmYuZW52aXJvbm1lbnRJbmZvLlNZU1ZMT05HKSxT'@;
put 'ZSg0KSxhcihudWxsPT1mLmVudmlyb25tZW50SW5mbz9udWxsOmYuZW52aXJvbm1lbnRJbmZvLk1FTVNJWkUpLFNlKDQpLGFyKG51bGw9PWYuZW52aXJvbm1lbnRJbmZvP251bGw6Zi5lbnZpcm9ubWVudEluZm8uU1lTUFJPQ0VTU01PREUpLFNlKDQpLGFyKG51bGw9PWYuZW52aXJvbm1lbnRJ'@;
put 'bmZvP251bGw6Zi5lbnZpcm9ubWVudEluZm8uU1lTSE9TVE5BTUUpLFNlKDQpLGFyKG51bGw9PWYuZW52aXJvbm1lbnRJbmZvP251bGw6Zi5lbnZpcm9ubWVudEluZm8uU1lTSE9TVElORk9MT05HKSxTZSg0KSxhcihudWxsPT1mLmVudmlyb25tZW50SW5mbz9udWxsOmYuZW52aXJvbm1lbnRJ'@;
put 'bmZvLlNZU0VOQ09ESU5HKSxTZSg0KSxhcihudWxsPT1mLmVudmlyb25tZW50SW5mbz9udWxsOmYuZW52aXJvbm1lbnRJbmZvLkFVVE9FWEVDKSxTZSg0KSxhcihudWxsPT1mLmVudmlyb25tZW50SW5mbz9udWxsOmYuZW52aXJvbm1lbnRJbmZvLkRDX0FETUlOX0dST1VQKSxTZSg5KSxhcihm'@;
put 'LmFwcEluZm8uYXBwVmVyc2lvbiksU2UoNCksYXIoZi5hcHBJbmZvLmJ1aWxkVGltZXN0YW1wKSxTZSg0KSxhcihmLmFwcEluZm8uYWRhcHRlclZlcnNpb24pLFNlKDQpLGFyKGYuaHR0cD8iWUVTIjoiTk8iKSxTZSg4KSxhcihudWxsPT1mLmxpY2VuY2VJbmZvP251bGw6Zi5saWNlbmNlSW5m'@;
put 'by52YWxpZF91bnRpbCksU2UoNCksYXIobnVsbD09Zi5saWNlbmNlSW5mbz9udWxsOmYubGljZW5jZUluZm8udXNlcnNfYWxsb3dlZCksU2UoNCksYXIobnVsbD09Zi5saWNlbmNlSW5mbz9udWxsOmYubGljZW5jZUluZm8uc2l0ZV9pZF9tdWx0aXBsZSksU2UoNCksYXIobnVsbCE9Zi5saWNl'@;
put 'bmNlSW5mbyYmZi5saWNlbmNlSW5mby5kZW1vPyJZRVMiOiJOTyIpLFNlKDEpLFJlKCJuZ0lmIixmLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkIT09Zi5JbmZpbml0eSksU2UoMSksUmUoIm5nSWYiLGYubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93'@;
put 'ZWQhPT1mLkluZmluaXR5KSxTZSgxKSxSZSgibmdJZiIsZi5saWNlbmNlU3RhdGUudmFsdWUuc3RhZ2Vfcm93c19hbGxvd2VkIT09Zi5JbmZpbml0eSksU2UoMSksUmUoIm5nSWYiLGYubGljZW5jZVN0YXRlLnZhbHVlLmhpc3Rvcnlfcm93c19hbGxvd2VkIT09Zi5JbmZpbml0eSksU2UoMSks'@;
put 'UmUoIm5nSWYiLGYubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0IT09Zi5JbmZpbml0eSksU2UoMSksUmUoIm5nSWYiLGYubGljZW5jZVN0YXRlLnZhbHVlLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0IT09Zi5JbmZpbml0eSksU2UoMSksUmUoIm5nSWYiLGYubGljZW5jZVN0'@;
put 'YXRlLnZhbHVlLnZpZXdib3hfbGltaXQhPT1mLkluZmluaXR5KSxTZSgxKSxSZSgibmdJZiIsZi5saWNlbmNlU3RhdGUudmFsdWUubGluZWFnZV9kYWlseV9saW1pdCE9PWYuSW5maW5pdHkpLFNlKDQpLGFyKGYubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3g/IllFUyI6Ik5PIiksU2UoNCks'@;
put 'YXIoZi5saWNlbmNlU3RhdGUudmFsdWUuZmlsZVVwbG9hZD8iWUVTIjoiTk8iKSxTZSg0KSxhcihmLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0UmVjb3JkPyJZRVMiOiJOTyIpLFNlKDQpLGFyKGYubGljZW5jZVN0YXRlLnZhbHVlLmFkZFJlY29yZD8iWUVTIjoiTk8iKSxTZSgyKSxSZSgibmdJ'@;
put 'ZiIsMT09PShudWxsPT1mLmVudmlyb25tZW50SW5mbz9udWxsOmYuZW52aXJvbm1lbnRJbmZvLklTQURNSU4pKSxTZSgxKSxSZSgiY2xyTW9kYWxPcGVuIixmLnJlc3BvbnNlTW9kYWwpLFNlKDQpLHdyKCIgIixmLnJlc3BvbnNlLCIgIikpfSxkZXBlbmRlbmNpZXM6WyRpLEkwLE1jLGtjLEpj'@;
put 'LEloXSxzdHlsZXM6WyIuY29udGVudC1ib3hbX25nY29udGVudC0lQ09NUCVde21heC13aWR0aDoxMjg5cHh9LnN5cy1pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXSA+IGRpdltfbmdjb250ZW50LSVDT01QJV17ZmxleDoxfS5zeXMtaW5mb1tfbmdjb250ZW50LSVDT01QJV0gICBkaXZbX25nY29u'@;
put 'dGVudC0lQ09NUCVdOm50aC1jaGlsZCgyKXttYXJnaW46MCAzMHB4fS5hZG1pbi1hY3Rpb25bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzo1cHggMTBweDtib3JkZXItcmFkaXVz'@;
put 'OjZweDtib3JkZXI6MXB4IHNvbGlkICNkZWRlZGU7bWFyZ2luLWJvdHRvbTo1cHh9LmFkbWluLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde21pbi13aWR0aDoxMDJweH0uZGFya1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzAwMH1AbWVk'@;
put 'aWEgKG1heC13aWR0aDogOTkzcHgpey5zeXMtaW5mb1tfbmdjb250ZW50LSVDT01QJV0gICBkaXZbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZCgyKXttYXJnaW46MH0uc3lzLWluZm9bX25nY29udGVudC0lQ09NUCVdICAgZGl2W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweCAw'@;
put 'fX0iXX0pLGx9KSgpfSx7cGF0aDoiYWN0aW9ucy86bGliZHMvOmRzaWQiLGNvbXBvbmVudDp6WmV9LHtwYXRoOiJoaXN0b3J5Iixjb21wb25lbnQ6aVllfSx7cGF0aDoic3VibWl0dGVkIixjb21wb25lbnQ6R1p9LHtwYXRoOiJzdWJtaXR0ZWQvOnRhYmxlSWQiLGNvbXBvbmVudDpHWn0se3Bh'@;
put 'dGg6ImRlcGxveSIsY29tcG9uZW50OndjZX0se3BhdGg6ImRlcGxveS9tYW51YWxkZXBsb3kiLGNvbXBvbmVudDp3Y2V9LHtwYXRoOiIqKiIsY29tcG9uZW50Om9ZZX1dLE5OdD1vNC5mb3JSb290KEhOdCx7dXNlSGFzaDohMH0pO2xldCBWTnQ9KCgpPT57Y2xhc3MgbHt9cmV0dXJuIGwuXHUw'@;
put 'Mjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8bCl9LGwuXHUwMjc1bW9kPURpKHt0eXBlOmwsYm9vdHN0cmFwOltJQmVdfSksbC5cdTAyNzVpbmo9eGkoe3Byb3ZpZGVyczpbd0QsTGQsZ2NlLGVZXSxpbXBvcnRzOlt4emUsV25lLGRjLGhPZSxiQ2UsTk50LFZQLElkLEJFLFA2ZSxW'@;
put 'RSwkMyxHRnRdfSksbH0pKCk7bWJlKCkuYm9vdHN0cmFwTW9kdWxlKFZOdCl9LDU2MzIxOihXZSx6ZSxUKT0+e3ZhciBzZT1UKDE3MTU2KS5kZWZhdWx0O3NlbGYsV2UuZXhwb3J0cz0oKCk9Pnt2YXIgaz17MjY1NjpmdW5jdGlvbihILEIsTCl7InVzZSBzdHJpY3QiO3ZhciBLPXRoaXMmJnRo'@;
put 'aXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihSKXtyZXR1cm4gUiYmUi5fX2VzTW9kdWxlP1I6e2RlZmF1bHQ6Un19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxCLmRlY29kZVRva2VuPUIuaGFzVG9rZW5FeHBpcmVkPUIuaXNSZWZyZXNoVG9r'@;
put 'ZW5FeHBpcmluZz1CLmlzQWNjZXNzVG9rZW5FeHBpcmluZz12b2lkIDA7dmFyIEo9SyhMKDYyNDUpKTtmdW5jdGlvbiBJKFIsRSl7cmV0dXJuKDAsSi5kZWZhdWx0KShSKS5leHAtKG5ldyBEYXRlKS52YWx1ZU9mKCkvMWUzPD1FfUIuaXNBY2Nlc3NUb2tlbkV4cGlyaW5nPWZ1bmN0aW9uKFIs'@;
put 'RSl7cmV0dXJuIHZvaWQgMD09PUUmJihFPTM2MDApLCFSfHxJKFIsRSl9LEIuaXNSZWZyZXNoVG9rZW5FeHBpcmluZz1mdW5jdGlvbihSLEUpe3JldHVybiB2b2lkIDA9PT1FJiYoRT0zMCksIVJ8fEkoUixFKX0sQi5oYXNUb2tlbkV4cGlyZWQ9ZnVuY3Rpb24oUil7cmV0dXJuIVJ8fEkoUiww'@;
put 'KX0sQi5kZWNvZGVUb2tlbj1mdW5jdGlvbihSKXt2YXIgRTt0cnl7RT0oMCxKLmRlZmF1bHQpKFIpfWNhdGNoe3Rocm93IG5ldyBFcnJvcigiSW52YWxpZCB0b2tlbiBzdXBwbGllZC4iKX1yZXR1cm4gRX19LDY3OTk6ZnVuY3Rpb24oSCxCLEwpeyJ1c2Ugc3RyaWN0Ijt2YXIgSz10aGlzJiZ0'@;
put 'aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oSSxSLEUseil7dm9pZCAwPT09eiYmKHo9RSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEkseix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUltFXX19KX06ZnVuY3Rpb24oSSxSLEUseil7dm9p'@;
put 'ZCAwPT09eiYmKHo9RSksSVt6XT1SW0VdfSksSj10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oSSxSKXtmb3IodmFyIEUgaW4gSSkiZGVmYXVsdCI9PT1FfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUixFKXx8SyhSLEksRSl9O09iamVjdC5kZWZpbmVQ'@;
put 'cm9wZXJ0eShCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKKEwoMjY1NiksQil9LDMyNTk6ZnVuY3Rpb24oSCxCKXsidXNlIHN0cmljdCI7dmFyIEw9dGhpcyYmdGhpcy5fX2Fzc2lnbnx8ZnVuY3Rpb24oKXtyZXR1cm4gTD1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihLKXtmb3IodmFyIEos'@;
put 'ST0xLFI9YXJndW1lbnRzLmxlbmd0aDtJPFI7SSsrKWZvcih2YXIgRSBpbiBKPWFyZ3VtZW50c1tJXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoSixFKSYmKEtbRV09SltFXSk7cmV0dXJuIEt9LEwuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtPYmplY3QuZGVmaW5lUHJv'@;
put 'cGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQi5wcmVmaXhNZXNzYWdlPXZvaWQgMCxCLnByZWZpeE1lc3NhZ2U9ZnVuY3Rpb24oSyxKKXtpZigib2JqZWN0Ij09dHlwZW9mIEspaWYoSy5oYXNPd25Qcm9wZXJ0eSgibWVzc2FnZSIpKUsubWVzc2FnZT1KK0subWVzc2FnZTtlbHNl'@;
put 'e2lmKCFLLmhhc093blByb3BlcnR5KCJib2R5IikpcmV0dXJuIEwoTCh7fSxLKSx7bWVzc2FnZTpKfSk7aWYoIm9iamVjdCI9PXR5cGVvZiBLLmJvZHkmJihLLm1lc3NhZ2U9Sy5ib2R5Lm1lc3NhZ2U/SitLLmJvZHkubWVzc2FnZTpKKSwic3RyaW5nIj09dHlwZW9mIEsuYm9keSl7dmFyIEk9'@;
put 'dm9pZCAwO3RyeXtJPUpTT04ucGFyc2UoSy5ib2R5KX1jYXRjaHtyZXR1cm4gSy5tZXNzYWdlPUosS31yZXR1cm4gSS5tZXNzYWdlPUkubWVzc2FnZT9KK0kubWVzc2FnZTpKLEsuYm9keT1JLEt9fXJldHVybiJzdHJpbmciPT10eXBlb2YgSyYmKEs9SitLKSxLfX0sOTc3ODpmdW5jdGlvbihI'@;
put 'LEIsTCl7InVzZSBzdHJpY3QiO3ZhciBLPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihJLFIsRSx6KXt2b2lkIDA9PT16JiYoej1FKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSSx6LHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVy'@;
put 'biBSW0VdfX0pfTpmdW5jdGlvbihJLFIsRSx6KXt2b2lkIDA9PT16JiYoej1FKSxJW3pdPVJbRV19KSxKPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihJLFIpe2Zvcih2YXIgRSBpbiBJKSJkZWZhdWx0Ij09PUV8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2Fs'@;
put 'bChSLEUpfHxLKFIsSSxFKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEooTCgzMjU5KSxCKSxKKEwoMTA2NCksQil9LDEwNjQ6ZnVuY3Rpb24oSCxCLEwpeyJ1c2Ugc3RyaWN0Ijt2YXIgSyxKPXRoaXMmJnRoaXMuX19leHRlbmRzfHwoSz1mdW5j'@;
put 'dGlvbihqLFYpe3JldHVybihLPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihHLFcpe0cuX19wcm90b19fPVd9fHxmdW5jdGlvbihHLFcpe2Zvcih2YXIgVSBpbiBXKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHku'@;
put 'Y2FsbChXLFUpJiYoR1tVXT1XW1VdKX0pKGosVil9LGZ1bmN0aW9uKGosVil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFYmJm51bGwhPT1WKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoVikrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7'@;
put 'ZnVuY3Rpb24gRygpe3RoaXMuY29uc3RydWN0b3I9an1LKGosViksai5wcm90b3R5cGU9bnVsbD09PVY/T2JqZWN0LmNyZWF0ZShWKTooRy5wcm90b3R5cGU9Vi5wcm90b3R5cGUsbmV3IEcpfSksST10aGlzJiZ0aGlzLl9fcmVhZHx8ZnVuY3Rpb24oaixWKXt2YXIgRz0iZnVuY3Rpb24iPT10'@;
put 'eXBlb2YgU3ltYm9sJiZqW1N5bWJvbC5pdGVyYXRvcl07aWYoIUcpcmV0dXJuIGo7dmFyIFcsVSxxPUcuY2FsbChqKSx0ZT1bXTt0cnl7Zm9yKDsodm9pZCAwPT09Vnx8Vi0tID4wKSYmIShXPXEubmV4dCgpKS5kb25lOyl0ZS5wdXNoKFcudmFsdWUpfWNhdGNoKG5lKXtVPXtlcnJvcjpuZX19'@;
put 'ZmluYWxseXt0cnl7VyYmIVcuZG9uZSYmKEc9cS5yZXR1cm4pJiZHLmNhbGwocSl9ZmluYWxseXtpZihVKXRocm93IFUuZXJyb3J9fXJldHVybiB0ZX0sUj10aGlzJiZ0aGlzLl9fc3ByZWFkQXJyYXl8fGZ1bmN0aW9uKGosVixHKXtpZihHfHwyPT09YXJndW1lbnRzLmxlbmd0aClmb3IodmFy'@;
put 'IFcsVT0wLHE9Vi5sZW5ndGg7VTxxO1UrKykhVyYmVSBpbiBWfHwoV3x8KFc9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoViwwLFUpKSxXW1VdPVZbVV0pO3JldHVybiBqLmNvbmNhdChXfHxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChWKSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShC'@;
put 'LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxCLlNlcnZlclR5cGVFcnJvcj12b2lkIDA7dmFyIEU9TCgzOTAwKSx6PWZ1bmN0aW9uKGope2Z1bmN0aW9uIFYoRyl7dm9pZCAwPT09RyYmKEc9W10pO3ZhciBXPXRoaXMsVT0oRz1SKFtdLEkobmV3IFNldChHKSksITEpKS5sZW5ndGg/Ry5qb2lu'@;
put 'KCIsICIpLnRyaW0oKTpbRS5TZXJ2ZXJUeXBlLlNhc1ZpeWEsRS5TZXJ2ZXJUeXBlLlNhczksRS5TZXJ2ZXJUeXBlLlNhc2pzXS5qb2luKCIsICIpLnRyaW0oKTtyZXR1cm4gVT1VLnJlcGxhY2UoLyxccyhbXixdKikkLywiIGFuZCAkMSIpLChXPWouY2FsbCh0aGlzLCJJbnZhbGlkIHNlcnZl'@;
put 'ciB0eXBlOiB2YWxpZCBvcHRpb24iLmNvbmNhdCgxIT09Ry5sZW5ndGg/InMiOiIiLCIgIikuY29uY2F0KDEhPT1HLmxlbmd0aD8iYXJlIjoiaXMiLCIgIikuY29uY2F0KFUpKXx8dGhpcykubmFtZT0iU2VydmVyVHlwZUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YoVyxWLnByb3RvdHlw'@;
put 'ZSksV31yZXR1cm4gSihWLGopLFZ9KEVycm9yKTtCLlNlcnZlclR5cGVFcnJvcj16fSwzOTA2OmZ1bmN0aW9uKEgsQixMKXsidXNlIHN0cmljdCI7dmFyIEs9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEcsVyxVLHEpe3JldHVybiBuZXcoVXx8KFU9UHJvbWlzZSkpKGZ1bmN0aW9u'@;
put 'KHRlLG5lKXtmdW5jdGlvbiBpZSh1ZSl7dHJ5e2RlKHEubmV4dCh1ZSkpfWNhdGNoKGNlKXtuZShjZSl9fWZ1bmN0aW9uIGxlKHVlKXt0cnl7ZGUocS50aHJvdyh1ZSkpfWNhdGNoKGNlKXtuZShjZSl9fWZ1bmN0aW9uIGRlKHVlKXt2YXIgY2U7dWUuZG9uZT90ZSh1ZS52YWx1ZSk6KGNlPXVl'@;
put 'LnZhbHVlLGNlIGluc3RhbmNlb2YgVT9jZTpuZXcgVShmdW5jdGlvbihZKXtZKGNlKX0pKS50aGVuKGllLGxlKX1kZSgocT1xLmFwcGx5KEcsV3x8W10pKS5uZXh0KCkpfSl9LEo9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oRyxXKXt2YXIgVSxxLHRlLG5lLGllPXtsYWJlbDow'@;
put 'LHNlbnQ6ZnVuY3Rpb24oKXtpZigxJnRlWzBdKXRocm93IHRlWzFdO3JldHVybiB0ZVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBuZT17bmV4dDpsZSgwKSx0aHJvdzpsZSgxKSxyZXR1cm46bGUoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihuZVtTeW1ib2wuaXRlcmF0b3Jd'@;
put 'PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxuZTtmdW5jdGlvbiBsZShkZSl7cmV0dXJuIGZ1bmN0aW9uKHVlKXtyZXR1cm4gZnVuY3Rpb24oY2Upe2lmKFUpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7aWU7KXRyeXtpZihVPTEs'@;
put 'cSYmKHRlPTImY2VbMF0/cS5yZXR1cm46Y2VbMF0/cS50aHJvd3x8KCh0ZT1xLnJldHVybikmJnRlLmNhbGwocSksMCk6cS5uZXh0KSYmISh0ZT10ZS5jYWxsKHEsY2VbMV0pKS5kb25lKXJldHVybiB0ZTtzd2l0Y2gocT0wLHRlJiYoY2U9WzImY2VbMF0sdGUudmFsdWVdKSxjZVswXSl7Y2Fz'@;
put 'ZSAwOmNhc2UgMTp0ZT1jZTticmVhaztjYXNlIDQ6cmV0dXJuIGllLmxhYmVsKysse3ZhbHVlOmNlWzFdLGRvbmU6ITF9O2Nhc2UgNTppZS5sYWJlbCsrLHE9Y2VbMV0sY2U9WzBdO2NvbnRpbnVlO2Nhc2UgNzpjZT1pZS5vcHMucG9wKCksaWUudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0'@;
put 'OmlmKCEoKHRlPSh0ZT1pZS50cnlzKS5sZW5ndGg+MCYmdGVbdGUubGVuZ3RoLTFdKXx8NiE9PWNlWzBdJiYyIT09Y2VbMF0pKXtpZT0wO2NvbnRpbnVlfWlmKDM9PT1jZVswXSYmKCF0ZXx8Y2VbMV0+dGVbMF0mJmNlWzFdPHRlWzNdKSl7aWUubGFiZWw9Y2VbMV07YnJlYWt9aWYoNj09PWNl'@;
put 'WzBdJiZpZS5sYWJlbDx0ZVsxXSl7aWUubGFiZWw9dGVbMV0sdGU9Y2U7YnJlYWt9aWYodGUmJmllLmxhYmVsPHRlWzJdKXtpZS5sYWJlbD10ZVsyXSxpZS5vcHMucHVzaChjZSk7YnJlYWt9dGVbMl0mJmllLm9wcy5wb3AoKSxpZS50cnlzLnBvcCgpO2NvbnRpbnVlfWNlPVcuY2FsbChHLGll'@;
put 'KX1jYXRjaChZKXtjZT1bNixZXSxxPTB9ZmluYWxseXtVPXRlPTB9aWYoNSZjZVswXSl0aHJvdyBjZVsxXTtyZXR1cm57dmFsdWU6Y2VbMF0/Y2VbMV06dm9pZCAwLGRvbmU6ITB9fShbZGUsdWVdKX19fSxJPXRoaXMmJnRoaXMuX19yZWFkfHxmdW5jdGlvbihHLFcpe3ZhciBVPSJmdW5jdGlv'@;
put 'biI9PXR5cGVvZiBTeW1ib2wmJkdbU3ltYm9sLml0ZXJhdG9yXTtpZighVSlyZXR1cm4gRzt2YXIgcSx0ZSxuZT1VLmNhbGwoRyksaWU9W107dHJ5e2Zvcig7KHZvaWQgMD09PVd8fFctLSA+MCkmJiEocT1uZS5uZXh0KCkpLmRvbmU7KWllLnB1c2gocS52YWx1ZSl9Y2F0Y2gobGUpe3RlPXtl'@;
put 'cnJvcjpsZX19ZmluYWxseXt0cnl7cSYmIXEuZG9uZSYmKFU9bmUucmV0dXJuKSYmVS5jYWxsKG5lKX1maW5hbGx5e2lmKHRlKXRocm93IHRlLmVycm9yfX1yZXR1cm4gaWV9LFI9dGhpcyYmdGhpcy5fX3NwcmVhZEFycmF5fHxmdW5jdGlvbihHLFcsVSl7aWYoVXx8Mj09PWFyZ3VtZW50cy5s'@;
put 'ZW5ndGgpZm9yKHZhciBxLHRlPTAsbmU9Vy5sZW5ndGg7dGU8bmU7dGUrKykhcSYmdGUgaW4gV3x8KHF8fChxPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKFcsMCx0ZSkpLHFbdGVdPVdbdGVdKTtyZXR1cm4gRy5jb25jYXQocXx8QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoVykpfSxF'@;
put 'PXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihHKXtyZXR1cm4gRyYmRy5fX2VzTW9kdWxlP0c6e2RlZmF1bHQ6R319O09iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxCLnVwZGF0ZUNzdj1CLmNyZWF0ZUNzdj1CLnJlYWRDc3Y9dm9p'@;
put 'ZCAwO3ZhciB6PUwoMTU1OSksaj1FKEwoNzU2NSkpO0IucmVhZENzdj1mdW5jdGlvbihHKXtyZXR1cm4gSyh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBKKHRoaXMsZnVuY3Rpb24oVyl7c3dpdGNoKFcubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCwoMCx6LnJlYWRGaWxl'@;
put 'KShHKV07Y2FzZSAxOnJldHVyblsyLFcuc2VudCgpLnNwbGl0KCJcbiIpLmZpbHRlcihmdW5jdGlvbihVKXtyZXR1cm4gVS5sZW5ndGh9KS5tYXAoZnVuY3Rpb24oVSl7cmV0dXJuIFUuc3BsaXQoIiwiKX0pXX19KX0pfSxCLmNyZWF0ZUNzdj1mdW5jdGlvbihHLFcsVSl7cmV0dXJuIEsodm9p'@;
put 'ZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgcTtyZXR1cm4gSih0aGlzLGZ1bmN0aW9uKHRlKXtzd2l0Y2godGUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gcT0oMCxqLmRlZmF1bHQpKFcse2hlYWRlcjoxPT09Vy5sZW5ndGgsY29sdW1uczpVfSksWzQsKDAsei5jcmVhdGVGaWxlKShH'@;
put 'LHEpXTtjYXNlIDE6cmV0dXJuIHRlLnNlbnQoKSxbMl19fSl9KX0sQi51cGRhdGVDc3Y9ZnVuY3Rpb24oRyxXLFUscSl7cmV0dXJuIEsodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgdGUsbmUsaWU7cmV0dXJuIEoodGhpcyxmdW5jdGlvbihsZSl7c3dpdGNoKGxlLmxhYmVs'@;
put 'KXtjYXNlIDA6cmV0dXJuWzQsVihHLFcsVSxxKV07Y2FzZSAxOnJldHVybiB0ZT1sZS5zZW50KCkscSYmKG5lPTA9PT10ZS5sZW5ndGg/MTp0ZS5sZW5ndGgsKGllPVUuZmluZEluZGV4KGZ1bmN0aW9uKGRlKXtyZXR1cm4gZGU9PT1xfSkpPi0xP1cuc3BsaWNlKGllLDAsbmUpOihVLnNwbGlj'@;
put 'ZSgwLDAscSksVy5zcGxpY2UoMCwwLG5lKSkpLHRlLnB1c2goVyksWzQsKDAsQi5jcmVhdGVDc3YpKEcsdGUsVSldO2Nhc2UgMjpyZXR1cm4gbGUuc2VudCgpLFsyXX19KX0pfTt2YXIgVj1mdW5jdGlvbihHLFcsVSxxKXtyZXR1cm4gSyh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigp'@;
put 'e3ZhciB0ZSxuZSxpZSxsZTtyZXR1cm4gSih0aGlzLGZ1bmN0aW9uKGRlKXtzd2l0Y2goZGUubGFiZWwpe2Nhc2UgMDppZihXLmxlbmd0aCE9PVUubGVuZ3RoKXtpZihXLmxlbmd0aD5VLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImEgcmVjb3JkIGNhbiBub3QgaGF2ZSBtb3JlIGZpZWxkcyB0'@;
put 'aGFuIHByb3ZpZGVkIGNvbHVtbnMiKTtpZighcXx8Vy5sZW5ndGgrMSE9PVUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiYSByZWNvcmQgY2FuIG5vdCBoYXZlIGxlc3MgZmllbGRzIHRoYW4gcHJvdmlkZWQgY29sdW1ucyIpfWVsc2UgaWYocSYmVS5pbmNsdWRlcyhxKSl0aHJvdyBuZXcgRXJy'@;
put 'b3IoImEgcmVjb3JkIGNhbiBub3QgaGF2ZSBtb3JlIGZpZWxkcyB0aGFuIHByb3ZpZGVkIGNvbHVtbnMiKTtyZXR1cm5bNCwoMCxCLnJlYWRDc3YpKEcpLmNhdGNoKGZ1bmN0aW9uKHVlKXtyZXR1cm5bXX0pXTtjYXNlIDE6aWYodGU9ZGUuc2VudCgpLG5lPXRlWzBdKXtpZihVLmxlbmd0aD5u'@;
put 'ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJudW1iZXIgb2YgcHJvdmlkZWQgY29sdW1ucyBhcmUgZ3JlYXRlciB0aGFuIG51bWJlciBvZiBleGlzdGluZyBjb2x1bW5zIik7aWYoVS5sZW5ndGg8bmUubGVuZ3RoKXtpZighcXx8VS5sZW5ndGgrMSE9PW5lLmxlbmd0aCl0aHJvdyBuZXcgRXJy'@;
put 'b3IoIm51bWJlciBvZiBwcm92aWRlZCBjb2x1bW5zIGFyZSBsZXNzIHRoYW4gbnVtYmVyIG9mIGV4aXN0aW5nIGNvbHVtbnMiKTtpZihpZT1uZS5maW5kSW5kZXgoZnVuY3Rpb24odWUpe3JldHVybiB1ZT09PXF9KSxsZT1SKFtdLEkoVSksITEpLCEoaWU+LTEpKXRocm93IG5ldyBFcnJvcigi'@;
put 'cHJvdmlkZWQgY29sdW1ucyBkb2VzIG5vdCBtYXRjaCBleGlzdGluZyBjb2x1bW5zIik7aWYobGUuc3BsaWNlKGllLDAscSksSlNPTi5zdHJpbmdpZnkoVSkhPT1KU09OLnN0cmluZ2lmeShsZSkpdGhyb3cgbmV3IEVycm9yKCJwcm92aWRlZCBjb2x1bW5zIGRvZXMgbm90IG1hdGNoIGV4aXN0'@;
put 'aW5nIGNvbHVtbnMiKX1lbHNle2lmKEpTT04uc3RyaW5naWZ5KFUpIT09SlNPTi5zdHJpbmdpZnkobmUpKXRocm93IG5ldyBFcnJvcigicHJvdmlkZWQgY29sdW1ucyBkb2VzIG5vdCBtYXRjaCBleGlzdGluZyBjb2x1bW5zIik7aWYocSYmIVUuaW5jbHVkZXMocSkpdGhyb3cgbmV3IEVycm9y'@;
put 'KCJjYW4gbm90IGFkZCBuZXcgaWQgdG8gZXhpc3RpbmcgZGF0YSIpfX1yZXR1cm5bMix0ZV19fSl9KX19LDE1NTk6ZnVuY3Rpb24oSCxCLEwpeyJ1c2Ugc3RyaWN0Ijt2YXIgSz10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oWSxiLHgsTil7dm9p'@;
put 'ZCAwPT09TiYmKE49eCksT2JqZWN0LmRlZmluZVByb3BlcnR5KFksTix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYlt4XX19KX06ZnVuY3Rpb24oWSxiLHgsTil7dm9pZCAwPT09TiYmKE49eCksWVtOXT1iW3hdfSksSj10aGlzJiZ0aGlzLl9fc2V0TW9kdWxlRGVmYXVs'@;
put 'dHx8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oWSxiKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoWSwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6Yn0pfTpmdW5jdGlvbihZLGIpe1kuZGVmYXVsdD1ifSksST10aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24oWSl7aWYoWSYm'@;
put 'WS5fX2VzTW9kdWxlKXJldHVybiBZO3ZhciBiPXt9O2lmKG51bGwhPVkpZm9yKHZhciB4IGluIFkpImRlZmF1bHQiIT09eCYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFkseCkmJksoYixZLHgpO3JldHVybiBKKGIsWSksYn0sUj10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8'@;
put 'ZnVuY3Rpb24oWSxiLHgsTil7cmV0dXJuIG5ldyh4fHwoeD1Qcm9taXNlKSkoZnVuY3Rpb24oRixnKXtmdW5jdGlvbiBDKHApe3RyeXt5KE4ubmV4dChwKSl9Y2F0Y2goUyl7ZyhTKX19ZnVuY3Rpb24gTShwKXt0cnl7eShOLnRocm93KHApKX1jYXRjaChTKXtnKFMpfX1mdW5jdGlvbiB5KHAp'@;
put 'e3ZhciBTO3AuZG9uZT9GKHAudmFsdWUpOihTPXAudmFsdWUsUyBpbnN0YW5jZW9mIHg/UzpuZXcgeChmdW5jdGlvbihRKXtRKFMpfSkpLnRoZW4oQyxNKX15KChOPU4uYXBwbHkoWSxifHxbXSkpLm5leHQoKSl9KX0sRT10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihZLGIpe3Zh'@;
put 'ciB4LE4sRixnLEM9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmRlswXSl0aHJvdyBGWzFdO3JldHVybiBGWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIGc9e25leHQ6TSgwKSx0aHJvdzpNKDEpLHJldHVybjpNKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoZ1tTeW1i'@;
put 'b2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxnO2Z1bmN0aW9uIE0oeSl7cmV0dXJuIGZ1bmN0aW9uKHApe3JldHVybiBmdW5jdGlvbihTKXtpZih4KXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO0M7KXRyeXtp'@;
put 'Zih4PTEsTiYmKEY9MiZTWzBdP04ucmV0dXJuOlNbMF0/Ti50aHJvd3x8KChGPU4ucmV0dXJuKSYmRi5jYWxsKE4pLDApOk4ubmV4dCkmJiEoRj1GLmNhbGwoTixTWzFdKSkuZG9uZSlyZXR1cm4gRjtzd2l0Y2goTj0wLEYmJihTPVsyJlNbMF0sRi52YWx1ZV0pLFNbMF0pe2Nhc2UgMDpjYXNl'@;
put 'IDE6Rj1TO2JyZWFrO2Nhc2UgNDpyZXR1cm4gQy5sYWJlbCsrLHt2YWx1ZTpTWzFdLGRvbmU6ITF9O2Nhc2UgNTpDLmxhYmVsKyssTj1TWzFdLFM9WzBdO2NvbnRpbnVlO2Nhc2UgNzpTPUMub3BzLnBvcCgpLEMudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKEY9KEY9Qy50cnlz'@;
put 'KS5sZW5ndGg+MCYmRltGLmxlbmd0aC0xXSl8fDYhPT1TWzBdJiYyIT09U1swXSkpe0M9MDtjb250aW51ZX1pZigzPT09U1swXSYmKCFGfHxTWzFdPkZbMF0mJlNbMV08RlszXSkpe0MubGFiZWw9U1sxXTticmVha31pZig2PT09U1swXSYmQy5sYWJlbDxGWzFdKXtDLmxhYmVsPUZbMV0sRj1T'@;
put 'O2JyZWFrfWlmKEYmJkMubGFiZWw8RlsyXSl7Qy5sYWJlbD1GWzJdLEMub3BzLnB1c2goUyk7YnJlYWt9RlsyXSYmQy5vcHMucG9wKCksQy50cnlzLnBvcCgpO2NvbnRpbnVlfVM9Yi5jYWxsKFksQyl9Y2F0Y2goUSl7Uz1bNixRXSxOPTB9ZmluYWxseXt4PUY9MH1pZig1JlNbMF0pdGhyb3cg'@;
put 'U1sxXTtyZXR1cm57dmFsdWU6U1swXT9TWzFdOnZvaWQgMCxkb25lOiEwfX0oW3kscF0pfX19LHo9dGhpcyYmdGhpcy5fX3JlYWR8fGZ1bmN0aW9uKFksYil7dmFyIHg9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmWVtTeW1ib2wuaXRlcmF0b3JdO2lmKCF4KXJldHVybiBZO3ZhciBOLEYs'@;
put 'Zz14LmNhbGwoWSksQz1bXTt0cnl7Zm9yKDsodm9pZCAwPT09Ynx8Yi0tID4wKSYmIShOPWcubmV4dCgpKS5kb25lOylDLnB1c2goTi52YWx1ZSl9Y2F0Y2goTSl7Rj17ZXJyb3I6TX19ZmluYWxseXt0cnl7TiYmIU4uZG9uZSYmKHg9Zy5yZXR1cm4pJiZ4LmNhbGwoZyl9ZmluYWxseXtpZihG'@;
put 'KXRocm93IEYuZXJyb3J9fXJldHVybiBDfSxqPXRoaXMmJnRoaXMuX19zcHJlYWRBcnJheXx8ZnVuY3Rpb24oWSxiLHgpe2lmKHh8fDI9PT1hcmd1bWVudHMubGVuZ3RoKWZvcih2YXIgTixGPTAsZz1iLmxlbmd0aDtGPGc7RisrKSFOJiZGIGluIGJ8fChOfHwoTj1BcnJheS5wcm90b3R5cGUu'@;
put 'c2xpY2UuY2FsbChiLDAsRikpLE5bRl09YltGXSk7cmV0dXJuIFkuY29uY2F0KE58fEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGIpKX0sVj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oWSl7cmV0dXJuIFkmJlkuX19lc01vZHVsZT9ZOntkZWZhdWx0Oll9fTtPYmpl'@;
put 'Y3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQi5pc1Rlc3RGaWxlPUIudGVzdEZpbGVSZWdFeHA9Qi5jcmVhdGVSZWFkU3RyZWFtPUIuY3JlYXRlV3JpdGVTdHJlYW09Qi5nZXRSZWFsUGF0aD1CLmJhc2U2NEVuY29kZUZpbGU9Qi5iYXNlNjRFbmNvZGVJbWFn'@;
put 'ZUZpbGU9Qi5wYXRoU2VwRXNjYXBlZD1CLmNvcHk9Qi5tb3ZlRmlsZT1CLmdldFJlbGF0aXZlUGF0aD1CLnVuaWZ5RmlsZVBhdGg9Qi5kZWxldGVGb2xkZXI9Qi5kZWxldGVGaWxlPUIuY3JlYXRlRmlsZT1CLmNyZWF0ZUZvbGRlcj1CLmxpc3RGaWxlc0FuZFN1YkZvbGRlcnNJbkZvbGRlcj1C'@;
put 'Lmxpc3RTdWJGb2xkZXJzSW5Gb2xkZXI9Qi5saXN0U2FzRmlsZXNJbkZvbGRlcj1CLmxpc3RJbmlGaWxlc0luRm9sZGVyPUIubGlzdEZpbGVzSW5Gb2xkZXI9Qi5yZWFkRmlsZUJpbmFyeT1CLnJlYWRGaWxlPUIuaXNGb2xkZXI9Qi5mb2xkZXJFeGlzdHM9Qi5maWxlRXhpc3RzPXZvaWQgMDt2'@;
put 'YXIgRz1WKEwoNTY3NCkpLFc9VihMKDk4NCkpLFU9VihMKDI1MjApKSxxPUwoNjI2NiksdGU9SShMKDI5NzUpKTtmdW5jdGlvbiBuZShZKXtyZXR1cm4gUih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKGIpe3JldHVyblsyLEcuZGVmYXVsdC5w'@;
put 'cm9taXNlcy5hY2Nlc3MoWSxHLmRlZmF1bHQuY29uc3RhbnRzLkZfT0spLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4hMH0pLmNhdGNoKGZ1bmN0aW9uKCl7cmV0dXJuITF9KV19KX0pfWZ1bmN0aW9uIGllKFkpe3JldHVybiBSKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBF'@;
put 'KHRoaXMsZnVuY3Rpb24oYil7cmV0dXJuWzIsRy5kZWZhdWx0LnByb21pc2VzLnJlYWRGaWxlKFkpXX0pfSl9ZnVuY3Rpb24gbGUoWSl7cmV0dXJuIFIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihiKXtyZXR1cm5bMixHLmRlZmF1bHQucHJv'@;
put 'bWlzZXMucmVhZGRpcihZLHt3aXRoRmlsZVR5cGVzOiEwfSkudGhlbihmdW5jdGlvbih4KXtyZXR1cm4geC5maWx0ZXIoZnVuY3Rpb24oTil7cmV0dXJuIU4uaXNEaXJlY3RvcnkoKX0pLm1hcChmdW5jdGlvbihOKXtyZXR1cm4gTi5uYW1lfSl9KV19KX0pfWZ1bmN0aW9uIGRlKFksYix4KXty'@;
put 'ZXR1cm4gdm9pZCAwPT09YiYmKGI9ITApLHZvaWQgMD09PXgmJih4PVtdKSxSKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBOPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihGKXtyZXR1cm5bMixHLmRlZmF1bHQucHJvbWlzZXMucmVhZGRpcihZLHt3aXRoRmlsZVR5cGVz'@;
put 'OiEwfSkudGhlbihmdW5jdGlvbihnKXtyZXR1cm4gUihOLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgQyxNPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbih5KXtzd2l0Y2goeS5sYWJlbCl7Y2FzZSAwOnJldHVybiBiJiZnLmZpbHRlcihmdW5jdGlvbihwKXtyZXR1cm4gcC5pc0Rp'@;
put 'cmVjdG9yeSgpfSkubGVuZ3RoPyhDPVtdLFs0LCgwLHEuYXN5bmNGb3JFYWNoKShnLmZpbHRlcihmdW5jdGlvbihwKXtyZXR1cm4gcC5pc0RpcmVjdG9yeSgpfSksZnVuY3Rpb24ocCl7cmV0dXJuIFIoTSx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIFMsUSxyZTtyZXR1cm4gRSh0aGlz'@;
put 'LGZ1bmN0aW9uKGZlKXtzd2l0Y2goZmUubGFiZWwpe2Nhc2UgMDpyZXR1cm4geC5pbmNsdWRlcyhTPXAubmFtZSk/WzMsMl06KFE9VS5kZWZhdWx0LmpvaW4oWSxTKSxyZT1baihbXSx6KEMpLCExKV0sWzQsZGUoUSxiLHgpXSk7Y2FzZSAxOkM9ai5hcHBseSh2b2lkIDAscmUuY29uY2F0KFt6'@;
put 'LmFwcGx5KHZvaWQgMCxbZmUuc2VudCgpLm1hcChmdW5jdGlvbihtZSl7cmV0dXJuIFUuZGVmYXVsdC5qb2luKFMsbWUpfSldKSwhMV0pKSxmZS5sYWJlbD0yO2Nhc2UgMjpyZXR1cm5bMl19fSl9KX0pXSk6WzMsMl07Y2FzZSAxOnJldHVybiB5LnNlbnQoKSxbMixqKGooW10seihnLmZpbHRl'@;
put 'cihmdW5jdGlvbihwKXtyZXR1cm4hcC5pc0RpcmVjdG9yeSgpfSkubWFwKGZ1bmN0aW9uKHApe3JldHVybiBwLm5hbWV9KSksITEpLHooQyksITEpXTtjYXNlIDI6cmV0dXJuWzIsZy5tYXAoZnVuY3Rpb24ocCl7cmV0dXJuIHAubmFtZX0pXX19KX0pfSldfSl9KX1mdW5jdGlvbiB1ZShZKXty'@;
put 'ZXR1cm4gUih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKGIpe3JldHVyblsyLEcuZGVmYXVsdC5wcm9taXNlcy5ta2RpcihZLHtyZWN1cnNpdmU6ITB9KV19KX0pfWZ1bmN0aW9uIGNlKFksYix4KXt2b2lkIDA9PT1iJiYoYj1VLmRlZmF1bHQu'@;
put 'c2VwKSx2b2lkIDA9PT14JiYoeD0iLyIpO3ZhciBOPXt1bml4OiIvIix3aW46IlxcIn0sRj1PYmplY3Qua2V5cyhOKS5maW5kKGZ1bmN0aW9uKEMpe3JldHVybiBOW0NdPT09Yn0pO2lmKEYpe3ZhciBnPU5bT2JqZWN0LmtleXMoTikuZmluZChmdW5jdGlvbihDKXtyZXR1cm4gQyE9PUZ9KV07'@;
put 'cmV0dXJuIEY9TltGXSxZLnNwbGl0KGcpLmpvaW4oRil9cmV0dXJuIFkuc3BsaXQoeCkuam9pbihiKX1CLmZpbGVFeGlzdHM9ZnVuY3Rpb24oWSl7cmV0dXJuIFIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihiKXtyZXR1cm5bMixHLmRlZmF1'@;
put 'bHQucHJvbWlzZXMuYWNjZXNzKFksRy5kZWZhdWx0LmNvbnN0YW50cy5GX09LKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuITB9KS5jYXRjaChmdW5jdGlvbigpe3JldHVybiExfSldfSl9KX0sQi5mb2xkZXJFeGlzdHM9bmUsQi5pc0ZvbGRlcj1mdW5jdGlvbihZKXtyZXR1cm4gUih0aGlzLHZv'@;
put 'aWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKGIpe3JldHVyblsyLEcuZGVmYXVsdC5wcm9taXNlcy5sc3RhdChZKS50aGVuKGZ1bmN0aW9uKHgpe3JldHVybiB4LmlzRGlyZWN0b3J5KCl9KS5jYXRjaChmdW5jdGlvbigpe3JldHVybiExfSldfSl9KX0sQi5y'@;
put 'ZWFkRmlsZT1mdW5jdGlvbihZLGIpe3JldHVybiB2b2lkIDA9PT1iJiYoYj0idXRmOCIpLFIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyxmdW5jdGlvbih4KXtyZXR1cm5bMixHLmRlZmF1bHQucHJvbWlzZXMucmVhZEZpbGUoWSxiKV19KX0pfSxCLnJlYWRG'@;
put 'aWxlQmluYXJ5PWllLEIubGlzdEZpbGVzSW5Gb2xkZXI9bGUsQi5saXN0SW5pRmlsZXNJbkZvbGRlcj1mdW5jdGlvbihZKXtyZXR1cm4gUih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKGIpe3N3aXRjaChiLmxhYmVsKXtjYXNlIDA6cmV0dXJu'@;
put 'WzQsbGUoWSldO2Nhc2UgMTpyZXR1cm5bMixiLnNlbnQoKS5maWx0ZXIoZnVuY3Rpb24oeCl7cmV0dXJuIHguZW5kc1dpdGgoIi5pbmkiKX0pXX19KX0pfSxCLmxpc3RTYXNGaWxlc0luRm9sZGVyPWZ1bmN0aW9uKFksYix4KXtyZXR1cm4gdm9pZCAwPT09YiYmKGI9ITEpLHZvaWQgMD09PXgm'@;
put 'Jih4PVtdKSxSKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBFKHRoaXMsZnVuY3Rpb24oRil7c3dpdGNoKEYubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCxkZShZLGIseCldO2Nhc2UgMTpyZXR1cm5bMixGLnNlbnQoKS5maWx0ZXIoZnVuY3Rpb24oZyl7cmV0dXJuIGcuZW5k'@;
put 'c1dpdGgoIi5zYXMiKX0pXX19KX0pfSxCLmxpc3RTdWJGb2xkZXJzSW5Gb2xkZXI9ZnVuY3Rpb24oWSl7cmV0dXJuIFIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihiKXtyZXR1cm5bMixHLmRlZmF1bHQucHJvbWlzZXMucmVhZGRpcihZLHt3'@;
put 'aXRoRmlsZVR5cGVzOiEwfSkudGhlbihmdW5jdGlvbih4KXtyZXR1cm4geC5maWx0ZXIoZnVuY3Rpb24oTil7cmV0dXJuIE4uaXNEaXJlY3RvcnkoKX0pLm1hcChmdW5jdGlvbihOKXtyZXR1cm4gTi5uYW1lfSl9KV19KX0pfSxCLmxpc3RGaWxlc0FuZFN1YkZvbGRlcnNJbkZvbGRlcj1kZSxC'@;
put 'LmNyZWF0ZUZvbGRlcj11ZSxCLmNyZWF0ZUZpbGU9ZnVuY3Rpb24oWSxiLHgpe3JldHVybiBSKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBOLEY7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihnKXtzd2l0Y2goZy5sYWJlbCl7Y2FzZSAwOnJldHVybihZPWNlKFkpKS5zcGxpdChV'@;
put 'LmRlZmF1bHQuc2VwKS5sZW5ndGg+MT8oKE49WS5zcGxpdChVLmRlZmF1bHQuc2VwKSkucG9wKCksWzQsbmUoRj1OLmpvaW4oVS5kZWZhdWx0LnNlcCkpXSk6WzMsM107Y2FzZSAxOnJldHVybiBnLnNlbnQoKT9bMywzXTpbNCx1ZShGKV07Y2FzZSAyOmcuc2VudCgpLGcubGFiZWw9MztjYXNl'@;
put 'IDM6cmV0dXJuWzIsRy5kZWZhdWx0LnByb21pc2VzLndyaXRlRmlsZShZLGIseCldfX0pfSl9LEIuZGVsZXRlRmlsZT1mdW5jdGlvbihZKXtyZXR1cm4gUih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKGIpe3JldHVyblsyLEcuZGVmYXVsdC5y'@;
put 'ZW1vdmUoWSldfSl9KX0sQi5kZWxldGVGb2xkZXI9ZnVuY3Rpb24oWSl7cmV0dXJuIFIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihiKXtyZXR1cm5bMixuZXcgUHJvbWlzZShmdW5jdGlvbih4LE4peygwLFcuZGVmYXVsdCkoWSx7fSxmdW5j'@;
put 'dGlvbihGKXtyZXR1cm4gRj9OKEYpOngoKX0pfSldfSl9KX0sQi51bmlmeUZpbGVQYXRoPWNlLEIuZ2V0UmVsYXRpdmVQYXRoPWZ1bmN0aW9uKFksYil7dmFyIHg9WS5zcGxpdChVLmRlZmF1bHQuc2VwKSxOPWIuc3BsaXQoVS5kZWZhdWx0LnNlcCksRj1bXSxnPVtdO3guZm9yRWFjaChmdW5j'@;
put 'dGlvbihwLFMpe3ZvaWQgMCE9PU5bU10mJnhbU109PT1OW1NdP0YucHVzaChwKTpwJiZnLnB1c2gocCl9KTt2YXIgQz1GLmpvaW4oVS5kZWZhdWx0LnNlcCksTT1uZXcgUmVnRXhwKCJeIi5jb25jYXQoVS5kZWZhdWx0LnNlcC5yZXBsYWNlKC9cXC9nLCJcXFxcIikpKSx5PW5ldyBSZWdFeHAo'@;
put 'IiIuY29uY2F0KFUuZGVmYXVsdC5zZXAucmVwbGFjZSgvXFwvZywiXFxcXCIpLCIkIikpO3JldHVybihnLmxlbmd0aD8iLi4iLmNvbmNhdChVLmRlZmF1bHQuc2VwKS5yZXBlYXQoZy5sZW5ndGgpOiIuIi5jb25jYXQoVS5kZWZhdWx0LnNlcCkpK2IucmVwbGFjZShDLCIiKS5yZXBsYWNlKE0s'@;
put 'IiIpLnJlcGxhY2UoeSwiIil9LEIubW92ZUZpbGU9ZnVuY3Rpb24oWSxiKXtyZXR1cm4gUih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKHgpe3JldHVyblsyLEcuZGVmYXVsdC5wcm9taXNlcy5yZW5hbWUoWSxiKV19KX0pfSxCLmNvcHk9ZnVu'@;
put 'Y3Rpb24oWSxiKXtyZXR1cm4gUih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKHgpe3JldHVyblsyLEcuZGVmYXVsdC5jb3B5KFksYildfSl9KX0sQi5wYXRoU2VwRXNjYXBlZD1VLmRlZmF1bHQuc2VwLnJlcGxhY2UoL1xcL2csIlxcXFwiKSxC'@;
put 'LmJhc2U2NEVuY29kZUltYWdlRmlsZT1mdW5jdGlvbihZKXtyZXR1cm4gUih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKGIpe3JldHVyblsyLGllKFkpLnRoZW4oZnVuY3Rpb24oeCl7dmFyIE49VS5kZWZhdWx0LmV4dG5hbWUoWSkuc3Vic3Ry'@;
put 'KDEpfHwicG5nIjtyZXR1cm4ic3ZnIj09PU4mJihOPSJzdmcreG1sIiksImRhdGE6aW1hZ2UvIitOKyI7YmFzZTY0LCIreC50b1N0cmluZygiYmFzZTY0Iil9KV19KX0pfSxCLmJhc2U2NEVuY29kZUZpbGU9ZnVuY3Rpb24oWSl7cmV0dXJuIFIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihiKXtyZXR1cm5bMixHLmRlZmF1bHQucHJvbWlzZXMucmVhZEZpbGUoWSx7ZW5jb2Rpbmc6ImJhc2U2NCJ9KV19KX0pfSxCLmdldFJlYWxQYXRoPWZ1bmN0aW9uKFkpe3JldHVybiBHLmRlZmF1bHQucmVhbHBhdGhTeW5jKFkpfSxCLmNyZWF0ZVdy'@;
put 'aXRlU3RyZWFtPWZ1bmN0aW9uKFkpe3JldHVybiBSKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBFKHRoaXMsZnVuY3Rpb24oYil7c3dpdGNoKGIubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0ZS5maWxlRXhpc3RzKFkpXTtjYXNlIDE6cmV0dXJuIGIuc2VudCgpP1syLEcu'@;
put 'ZGVmYXVsdC5jcmVhdGVXcml0ZVN0cmVhbShZLHtmbGFnczoiYSJ9KV06WzQsdGUuY3JlYXRlRmlsZShZLCIiKV07Y2FzZSAyOnJldHVybiBiLnNlbnQoKSxbMixHLmRlZmF1bHQuY3JlYXRlV3JpdGVTdHJlYW0oWSx7ZmxhZ3M6ImEifSldfX0pfSl9LEIuY3JlYXRlUmVhZFN0cmVhbT1mdW5j'@;
put 'dGlvbihZKXtyZXR1cm4gUih2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBFKHRoaXMsZnVuY3Rpb24oYil7cmV0dXJuWzIsRy5kZWZhdWx0LmNyZWF0ZVJlYWRTdHJlYW0oWSldfSl9KX0sQi50ZXN0RmlsZVJlZ0V4cD0vXC50ZXN0XC4oXGQrXC4pP3NhcyQvaSxCLmlz'@;
put 'VGVzdEZpbGU9ZnVuY3Rpb24oWSl7cmV0dXJuIEIudGVzdEZpbGVSZWdFeHAudGVzdChZKX19LDU2MjY6ZnVuY3Rpb24oSCxCLEwpeyJ1c2Ugc3RyaWN0Ijt2YXIgSz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oUil7cmV0dXJuIFImJlIuX19lc01vZHVsZT9SOntkZWZh'@;
put 'dWx0OlJ9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQi5nZXRBYnNvbHV0ZVBhdGg9dm9pZCAwO3ZhciBKPUsoTCgyNTIwKSksST1LKEwoNzQzNSkpO0IuZ2V0QWJzb2x1dGVQYXRoPWZ1bmN0aW9uKFIsRSl7cmV0dXJuIEouZGVmYXVsdC5pc0Fi'@;
put 'c29sdXRlKFIpfHwvXn4vLmV4ZWMoUik/Si5kZWZhdWx0Lm5vcm1hbGl6ZShSLnJlcGxhY2UoL15+LyxJLmRlZmF1bHQuaG9tZWRpcigpKSk6Si5kZWZhdWx0LmpvaW4oRSxSKX19LDI5NzU6ZnVuY3Rpb24oSCxCLEwpeyJ1c2Ugc3RyaWN0Ijt2YXIgSz10aGlzJiZ0aGlzLl9fY3JlYXRlQmlu'@;
put 'ZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oRSx6LGosVil7dm9pZCAwPT09ViYmKFY9aiksT2JqZWN0LmRlZmluZVByb3BlcnR5KEUsVix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4geltqXX19KX06ZnVuY3Rpb24oRSx6LGosVil7dm9pZCAwPT09ViYmKFY9aiks'@;
put 'RVtWXT16W2pdfSksSj10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oRSx6KXtmb3IodmFyIGogaW4gRSkiZGVmYXVsdCI9PT1qfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeixqKXx8Syh6LEUsail9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJfX2Vz'@;
put 'TW9kdWxlIix7dmFsdWU6ITB9KSxCLnJlYWRDc3Y9Qi5jcmVhdGVDc3Y9Qi51cGRhdGVDc3Y9Qi50ZXN0RmlsZVJlZ0V4cD1CLmlzVGVzdEZpbGU9Qi5nZXRSZWFsUGF0aD1CLmJhc2U2NEVuY29kZUZpbGU9Qi5iYXNlNjRFbmNvZGVJbWFnZUZpbGU9Qi5jb3B5PUIucGF0aFNlcEVzY2FwZWQ9'@;
put 'Qi5tb3ZlRmlsZT1CLnVuaWZ5RmlsZVBhdGg9Qi5nZXRSZWxhdGl2ZVBhdGg9Qi5kZWxldGVGb2xkZXI9Qi5kZWxldGVGaWxlPUIuY3JlYXRlV3JpdGVTdHJlYW09Qi5jcmVhdGVSZWFkU3RyZWFtPUIuY3JlYXRlRm9sZGVyPUIuY3JlYXRlRmlsZT1CLmxpc3RGaWxlc0FuZFN1YkZvbGRlcnNJ'@;
put 'bkZvbGRlcj1CLmxpc3RTdWJGb2xkZXJzSW5Gb2xkZXI9Qi5saXN0U2FzRmlsZXNJbkZvbGRlcj1CLmxpc3RJbmlGaWxlc0luRm9sZGVyPUIubGlzdEZpbGVzSW5Gb2xkZXI9Qi5yZWFkRmlsZUJpbmFyeT1CLnJlYWRGaWxlPUIuaXNGb2xkZXI9Qi5mb2xkZXJFeGlzdHM9Qi5maWxlRXhpc3Rz'@;
put 'PXZvaWQgMDt2YXIgST1MKDE1NTkpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJmaWxlRXhpc3RzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5maWxlRXhpc3RzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJmb2xkZXJFeGlzdHMiLHtlbnVtZXJhYmxlOiEw'@;
put 'LGdldDpmdW5jdGlvbigpe3JldHVybiBJLmZvbGRlckV4aXN0c319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiaXNGb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmlzRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJyZWFkRmlsZSIse2Vu'@;
put 'dW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkucmVhZEZpbGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEIsInJlYWRGaWxlQmluYXJ5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5yZWFkRmlsZUJpbmFyeX19KSxPYmplY3QuZGVmaW5lUHJvcGVy'@;
put 'dHkoQiwibGlzdEZpbGVzSW5Gb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmxpc3RGaWxlc0luRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJsaXN0SW5pRmlsZXNJbkZvbGRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIEkubGlzdEluaUZpbGVzSW5Gb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEIsImxpc3RTYXNGaWxlc0luRm9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5saXN0U2FzRmlsZXNJbkZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwi'@;
put 'bGlzdFN1YkZvbGRlcnNJbkZvbGRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkubGlzdFN1YkZvbGRlcnNJbkZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwibGlzdEZpbGVzQW5kU3ViRm9sZGVyc0luRm9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gSS5saXN0RmlsZXNBbmRTdWJGb2xkZXJzSW5Gb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEIsImNyZWF0ZUZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmNyZWF0ZUZpbGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5'@;
put 'KEIsImNyZWF0ZUZvbGRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuY3JlYXRlRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJjcmVhdGVSZWFkU3RyZWFtIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5jcmVhdGVSZWFk'@;
put 'U3RyZWFtfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJjcmVhdGVXcml0ZVN0cmVhbSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuY3JlYXRlV3JpdGVTdHJlYW19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEIsImRlbGV0ZUZpbGUiLHtlbnVtZXJhYmxlOiEw'@;
put 'LGdldDpmdW5jdGlvbigpe3JldHVybiBJLmRlbGV0ZUZpbGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEIsImRlbGV0ZUZvbGRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuZGVsZXRlRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJnZXRSZWxh'@;
put 'dGl2ZVBhdGgiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmdldFJlbGF0aXZlUGF0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwidW5pZnlGaWxlUGF0aCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkudW5pZnlGaWxlUGF0aH19KSxP'@;
put 'YmplY3QuZGVmaW5lUHJvcGVydHkoQiwibW92ZUZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLm1vdmVGaWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJwYXRoU2VwRXNjYXBlZCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEku'@;
put 'cGF0aFNlcEVzY2FwZWR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEIsImNvcHkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmNvcHl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEIsImJhc2U2NEVuY29kZUltYWdlRmlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIEkuYmFzZTY0RW5jb2RlSW1hZ2VGaWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJiYXNlNjRFbmNvZGVGaWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5iYXNlNjRFbmNvZGVGaWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0'@;
put 'eShCLCJnZXRSZWFsUGF0aCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuZ2V0UmVhbFBhdGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEIsImlzVGVzdEZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmlzVGVzdEZpbGV9fSksT2Jq'@;
put 'ZWN0LmRlZmluZVByb3BlcnR5KEIsInRlc3RGaWxlUmVnRXhwIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS50ZXN0RmlsZVJlZ0V4cH19KTt2YXIgUj1MKDM5MDYpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJ1cGRhdGVDc3YiLHtlbnVtZXJhYmxlOiEwLGdldDpm'@;
put 'dW5jdGlvbigpe3JldHVybiBSLnVwZGF0ZUNzdn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiY3JlYXRlQ3N2Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUi5jcmVhdGVDc3Z9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEIsInJlYWRDc3YiLHtlbnVtZXJhYmxl'@;
put 'OiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBSLnJlYWRDc3Z9fSksSihMKDU2MjYpLEIpfSwyNzc3OihILEIsTCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEIubmV3TGluZT1CLmNhcGl0YWxpemVGaXJzdENoYXI9Qi5z'@;
put 'YW5pdGl6ZVNwZWNpYWxDaGFycz1CLnBhZFdpdGhOdW1iZXI9dm9pZCAwO3ZhciBLPUwoNTMwNik7T2JqZWN0LmRlZmluZVByb3BlcnR5KEIsInBhZFdpdGhOdW1iZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBLLnBhZFdpdGhOdW1iZXJ9fSk7dmFyIEo9TCg5MDE3'@;
put 'KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwic2FuaXRpemVTcGVjaWFsQ2hhcnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBKLnNhbml0aXplU3BlY2lhbENoYXJzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJjYXBpdGFsaXplRmlyc3RDaGFyIix7ZW51bWVy'@;
put 'YWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSi5jYXBpdGFsaXplRmlyc3RDaGFyfX0pO3ZhciBJPUwoMTYyOCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KEIsIm5ld0xpbmUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLm5ld0xpbmV9fSl9LDUzMDY6KEgsQik9'@;
put 'PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEIucGFkV2l0aE51bWJlcj12b2lkIDAsQi5wYWRXaXRoTnVtYmVyPWZ1bmN0aW9uKEwsSyl7cmV0dXJuIHZvaWQgMD09PUsmJihLPTApLEw+OT9MOiIiLmNvbmNhdChLKS5jb25j'@;
put 'YXQoTCl9fSwxNjI4OihILEIsTCk9PnsidXNlIHN0cmljdCI7dmFyIEs9TCg0MTU1KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQi5uZXdMaW5lPXZvaWQgMCxCLm5ld0xpbmU9ZnVuY3Rpb24oKXtyZXR1cm4id2luMzIiPT09Sy5wbGF0Zm9ybT8i'@;
put 'XFxyXFxuIjoiXFxuIn19LDkwMTc6KEgsQik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEIuY2FwaXRhbGl6ZUZpcnN0Q2hhcj1CLnNhbml0aXplU3BlY2lhbENoYXJzPXZvaWQgMCxCLnNhbml0aXplU3BlY2lhbENoYXJz'@;
put 'PWZ1bmN0aW9uKEwpe3JldHVybiBMLnJlcGxhY2UoL1tcdTAwMWJcdTAwOWJdW1soKSM7P10qKD86WzAtOV17MSw0fSg/OjtbMC05XXswLDR9KSopP1swLTlBLU9SWmNmLW5xcnk9PjxdL2csIiIpfSxCLmNhcGl0YWxpemVGaXJzdENoYXI9ZnVuY3Rpb24oTCl7cmV0dXJuIEwuY2hhckF0KDAp'@;
put 'LnRvVXBwZXJDYXNlKCkrTC5zbGljZSgxKX19LDY0Njc6ZnVuY3Rpb24oSCxCLEwpeyJ1c2Ugc3RyaWN0Ijt2YXIgSz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oSSl7cmV0dXJuIEkmJkkuX19lc01vZHVsZT9JOntkZWZhdWx0Okl9fTtPYmplY3QuZGVmaW5lUHJvcGVy'@;
put 'dHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQi5pc1NwZWNpYWxNaXNzaW5nPUIuY2hvaWNlVmFsaWRhdG9yPUIuY29uZmlybWF0aW9uVmFsaWRhdG9yPUIudXJsVmFsaWRhdG9yPXZvaWQgMDt2YXIgSj1LKEwoNDgxKSk7Qi51cmxWYWxpZGF0b3I9ZnVuY3Rpb24oSSxSKXtyZXR1cm4h'@;
put 'IUouZGVmYXVsdC5pc0h0dHBVcmkoSSl8fCEhSi5kZWZhdWx0LmlzSHR0cHNVcmkoSSl8fCIiPT09SXx8Un0sQi5jb25maXJtYXRpb25WYWxpZGF0b3I9ZnVuY3Rpb24oSSl7cmV0dXJuITA9PT1JfHwhMT09PUl9LEIuY2hvaWNlVmFsaWRhdG9yPWZ1bmN0aW9uKEksUixFKXtyZXR1cm4gST4w'@;
put 'JiZJPD1SfHxFfSxCLmlzU3BlY2lhbE1pc3Npbmc9ZnVuY3Rpb24oSSl7cmV0dXJuKCJzdHJpbmciIT10eXBlb2YgSXx8IUkuaW5jbHVkZXMoIi4uIikpJiZuZXcgUmVnRXhwKCJeKFxcLik/W2Etel8uXXsxfSQiLCJpIikudGVzdChJKX19LDc3NTc6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0IjtP'@;
put 'YmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQi5nZW5lcmF0ZVRpbWVzdGFtcD1CLnRpbWVzdGFtcFRvWVlZWU1NRERISE1NU1M9dm9pZCAwO3ZhciBLPUwoMTMwMik7T2JqZWN0LmRlZmluZVByb3BlcnR5KEIsInRpbWVzdGFtcFRvWVlZWU1NRERISE1N'@;
put 'U1MiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBLLnRpbWVzdGFtcFRvWVlZWU1NRERISE1NU1N9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEIsImdlbmVyYXRlVGltZXN0YW1wIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSy5nZW5lcmF0ZVRp'@;
put 'bWVzdGFtcH19KX0sMTMwMjooSCxCLEwpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxCLmdlbmVyYXRlVGltZXN0YW1wPUIudGltZXN0YW1wVG9ZWVlZTU1EREhITU1TUz12b2lkIDA7dmFyIEs9TCgyNzc3KTtCLnRpbWVz'@;
put 'dGFtcFRvWVlZWU1NRERISE1NU1M9ZnVuY3Rpb24oSil7dm9pZCAwPT09SiYmKEo9RGF0ZS5ub3coKSk7dmFyIEk9bmV3IERhdGUoSik7cmV0dXJuW0kuZ2V0RnVsbFllYXIoKSwoMCxLLnBhZFdpdGhOdW1iZXIpKEkuZ2V0TW9udGgoKSsxKSwoMCxLLnBhZFdpdGhOdW1iZXIpKEkuZ2V0RGF0'@;
put 'ZSgpKV0uam9pbigiLyIpKyIgIitbKDAsSy5wYWRXaXRoTnVtYmVyKShJLmdldEhvdXJzKCkpLCgwLEsucGFkV2l0aE51bWJlcikoSS5nZXRNaW51dGVzKCkpLCgwLEsucGFkV2l0aE51bWJlcikoSS5nZXRTZWNvbmRzKCkpXS5qb2luKCI6Iil9LEIuZ2VuZXJhdGVUaW1lc3RhbXA9ZnVuY3Rp'@;
put 'b24oSixJKXt2b2lkIDA9PT1KJiYoSj0iIik7dmFyIFI9bmV3IERhdGUsRT1bUi5nZXRVVENGdWxsWWVhcigpLFIuZ2V0VVRDTW9udGgoKSsxLFIuZ2V0VVRDRGF0ZSgpLFIuZ2V0VVRDSG91cnMoKSxSLmdldFVUQ01pbnV0ZXMoKSxSLmdldFVUQ1NlY29uZHMoKV07cmV0dXJuIEU9RS5tYXAo'@;
put 'ZnVuY3Rpb24oeil7cmV0dXJuKDAsSy5wYWRXaXRoTnVtYmVyKSh6KX0pLEkmJkomJkk8RS5sZW5ndGgmJkk+PTAmJkUuc3BsaWNlKEksMCxKKSxFLmpvaW4oST8iIjpKKX19LDgyMzk6KEgsQik9PnsidXNlIHN0cmljdCI7dmFyIEw7T2JqZWN0LmRlZmluZVByb3BlcnR5KEIsIl9fZXNNb2R1'@;
put 'bGUiLHt2YWx1ZTohMH0pLEIuQ29uZmlnVHlwZXM9dm9pZCAwLChMPUIuQ29uZmlnVHlwZXN8fChCLkNvbmZpZ1R5cGVzPXt9KSkuQnVpbGQ9ImJ1aWxkQ29uZmlnIixMLlNlcnZpY2U9InNlcnZpY2VDb25maWciLEwuSm9iPSJqb2JDb25maWciLEwuVGVzdD0idGVzdENvbmZpZyIsTC5Eb2M9'@;
put 'ImRvY0NvbmZpZyIsTC5EZXBsb3k9ImRlcGxveUNvbmZpZyIsTC5TdHJlYW09InN0cmVhbUNvbmZpZyIsTC5BdXRoPSJhdXRoQ29uZmlnIn0sMjQyNzooSCxCKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDE4OTooSCxC'@;
put 'KT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDM2OTI6KEgsQik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw2OTM5OihILEIpPT57InVzZSBzdHJp'@;
put 'Y3QiO3ZhciBMO09iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxCLk1lbWJlclR5cGU9dm9pZCAwLChMPUIuTWVtYmVyVHlwZXx8KEIuTWVtYmVyVHlwZT17fSkpLnNlcnZpY2U9InNlcnZpY2UiLEwuZmlsZT0iZmlsZSIsTC5mb2xkZXI9ImZvbGRlciJ9'@;
put 'LDMzMjc6KEgsQik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw1MTY1OihILEIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sMzkwMDpmdW5jdGlv'@;
put 'bihILEIsTCl7InVzZSBzdHJpY3QiO3ZhciBLPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihJLFIsRSx6KXt2b2lkIDA9PT16JiYoej1FKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSSx6LHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3Jl'@;
put 'dHVybiBSW0VdfX0pfTpmdW5jdGlvbihJLFIsRSx6KXt2b2lkIDA9PT16JiYoej1FKSxJW3pdPVJbRV19KSxKPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihJLFIpe2Zvcih2YXIgRSBpbiBJKSJkZWZhdWx0Ij09PUV8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHku'@;
put 'Y2FsbChSLEUpfHxLKFIsSSxFKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEooTCg4MjM5KSxCKSxKKEwoMjQyNyksQiksSihMKDE4OSksQiksSihMKDM2OTIpLEIpLEooTCg2OTM5KSxCKSxKKEwoMzMyNyksQiksSihMKDUxNjUpLEIpLEooTCg0'@;
put 'MDY5KSxCKSxKKEwoODkzMiksQiksSihMKDQpLEIpLEooTCgyMDE1KSxCKSxKKEwoODUxNSksQiksSihMKDUzMTMpLEIpLEooTCg4OTc5KSxCKX0sNDA2OTooSCxCKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQi5pc01h'@;
put 'Y3JvVmFycz12b2lkIDAsQi5pc01hY3JvVmFycz1mdW5jdGlvbihMKXtyZXR1cm4gTCYmIm9iamVjdCI9PXR5cGVvZiBMLm1hY3JvVmFycyYmIUFycmF5LmlzQXJyYXkoTC5tYWNyb1ZhcnMpfX0sODkzMjooSCxCKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19l'@;
put 'c01vZHVsZSIse3ZhbHVlOiEwfSl9LDQ6KEgsQik9PnsidXNlIHN0cmljdCI7dmFyIEw7T2JqZWN0LmRlZmluZVByb3BlcnR5KEIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEIuU0FTSnNGaWxlVHlwZT12b2lkIDAsKEw9Qi5TQVNKc0ZpbGVUeXBlfHwoQi5TQVNKc0ZpbGVUeXBlPXt9KSku'@;
put 'c2VydmljZT0iU2VydmljZSIsTC5qb2I9IkpvYiIsTC50ZXN0PSJUZXN0IixMLmZpbGU9IkZpbGUifSwyMDE1OihILEIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sODUxNTooSCxCKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIg'@;
put 'TDtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQi5TZXJ2ZXJUeXBlPXZvaWQgMCwoTD1CLlNlcnZlclR5cGV8fChCLlNlcnZlclR5cGU9e30pKS5TYXNWaXlhPSJTQVNWSVlBIixMLlNhczk9IlNBUzkiLEwuU2FzanM9IlNBU0pTIn0sNTMxMzooSCxC'@;
put 'KT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDg5Nzk6ZnVuY3Rpb24oSCxCLEwpeyJ1c2Ugc3RyaWN0Ijt2YXIgSz10aGlzJiZ0aGlzLl9fYXNzaWdufHxmdW5jdGlvbigpe3JldHVybiBLPU9iamVjdC5hc3NpZ258fGZ1'@;
put 'bmN0aW9uKHope2Zvcih2YXIgaixWPTEsRz1hcmd1bWVudHMubGVuZ3RoO1Y8RztWKyspZm9yKHZhciBXIGluIGo9YXJndW1lbnRzW1ZdKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChqLFcpJiYoeltXXT1qW1ddKTtyZXR1cm4gen0sSy5hcHBseSh0aGlzLGFyZ3VtZW50'@;
put 'cyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxCLlRhcmdldD12b2lkIDA7dmFyIEo9TCg4MjM5KSxJPUwoODUxNSksUj1MKDY3ODEpLEU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB6KGosVil7dmFyIEc9dGhpczt2b2lkIDA9PT1WJiYoVj17fSksdGhp'@;
put 'cy5fc2VydmVyVHlwZT1JLlNlcnZlclR5cGUuU2FzVml5YSx0aGlzLmdldENvbmZpZz1mdW5jdGlvbihXLFUpe3JldHVybiBLKEsoe30sRy5fY29uZmlnW1ddfHx7fSksVVtXXSl9O3RyeXtpZighail0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdGFyZ2V0OiBJbnB1dCBKU09OIGlzIG51bGwg'@;
put 'b3IgdW5kZWZpbmVkLiIpO3RoaXMuX2NvbmZpZz1WLHRoaXMuX25hbWU9KDAsUi52YWxpZGF0ZVRhcmdldE5hbWUpKGoubmFtZSksdGhpcy5fc2VydmVyVXJsPSgwLFIudmFsaWRhdGVTZXJ2ZXJVcmwpKGouc2VydmVyVXJsKSx0aGlzLl9zZXJ2ZXJUeXBlPSgwLFIudmFsaWRhdGVTZXJ2ZXJU'@;
put 'eXBlKShqLnNlcnZlclR5cGUpLHRoaXMuX2h0dHBzQWdlbnRPcHRpb25zPSgwLFIudmFsaWRhdGVIdHRwc0FnZW50T3B0aW9ucykoai5odHRwc0FnZW50T3B0aW9ucyksdGhpcy5fYXBwTG9jPSgwLFIudmFsaWRhdGVBcHBMb2MpKGouYXBwTG9jKSx0aGlzLl9jb250ZXh0TmFtZT0oMCxSLnZh'@;
put 'bGlkYXRlQ29udGV4dE5hbWUpKGouY29udGV4dE5hbWUsdGhpcy5fc2VydmVyVHlwZSksdGhpcy5fc2VydmVyTmFtZT0oMCxSLnZhbGlkYXRlU2VydmVyTmFtZSkoai5zZXJ2ZXJOYW1lLHRoaXMuX3NlcnZlclR5cGUpLHRoaXMuX3N5bmNGb2xkZXI9KDAsUi52YWxpZGF0ZVN5bmNGb2xkZXIp'@;
put 'KGouc3luY0ZvbGRlciksdGhpcy5fcmVwb3NpdG9yeU5hbWU9KDAsUi52YWxpZGF0ZVJlcG9zaXRvcnlOYW1lKShqLnJlcG9zaXRvcnlOYW1lLHRoaXMuX3NlcnZlclR5cGUpLGouZG9jQ29uZmlnJiYodGhpcy5fZG9jQ29uZmlnPSgwLFIudmFsaWRhdGVEb2NDb25maWcpKHRoaXMuZ2V0Q29u'@;
put 'ZmlnKEouQ29uZmlnVHlwZXMuRG9jLGopKSksai5hdXRoQ29uZmlnJiYodGhpcy5fYXV0aENvbmZpZz0oMCxSLnZhbGlkYXRlQXV0aENvbmZpZykodGhpcy5nZXRDb25maWcoSi5Db25maWdUeXBlcy5BdXRoLGopKSksai5hdXRoQ29uZmlnU2FzOSYmKHRoaXMuX2F1dGhDb25maWdTYXM5PSgw'@;
put 'LFIudmFsaWRhdGVBdXRoQ29uZmlnU2FzOSkoai5hdXRoQ29uZmlnU2FzOSkpLGouYnVpbGRDb25maWcmJih0aGlzLl9idWlsZENvbmZpZz0oMCxSLnZhbGlkYXRlQnVpbGRDb25maWcpKHRoaXMuZ2V0Q29uZmlnKEouQ29uZmlnVHlwZXMuQnVpbGQsaiksdGhpcy5fbmFtZSkpLHRoaXMuX2Rl'@;
put 'cGxveUNvbmZpZz0oMCxSLnZhbGlkYXRlRGVwbG95Q29uZmlnKShqLmRlcGxveUNvbmZpZz90aGlzLmdldENvbmZpZyhKLkNvbmZpZ1R5cGVzLkRlcGxveSxqKTp7ZGVwbG95U2VydmljZVBhY2s6ITAsZGVwbG95U2NyaXB0czpbXX0pLGouc2VydmljZUNvbmZpZyYmKHRoaXMuX3NlcnZpY2VD'@;
put 'b25maWc9KDAsUi52YWxpZGF0ZVNlcnZpY2VDb25maWcpKHRoaXMuZ2V0Q29uZmlnKEouQ29uZmlnVHlwZXMuU2VydmljZSxqKSkpLGouam9iQ29uZmlnJiYodGhpcy5fam9iQ29uZmlnPSgwLFIudmFsaWRhdGVKb2JDb25maWcpKHRoaXMuZ2V0Q29uZmlnKEouQ29uZmlnVHlwZXMuSm9iLGop'@;
put 'KSksai5zdHJlYW1Db25maWcmJih0aGlzLl9zdHJlYW1Db25maWc9KDAsUi52YWxpZGF0ZVN0cmVhbUNvbmZpZykodGhpcy5nZXRDb25maWcoSi5Db25maWdUeXBlcy5TdHJlYW0saikpKSxqLnRlc3RDb25maWcmJih0aGlzLl90ZXN0Q29uZmlnPSgwLFIudmFsaWRhdGVUZXN0Q29uZmlnKSh0'@;
put 'aGlzLmdldENvbmZpZyhKLkNvbmZpZ1R5cGVzLlRlc3QsaikpKSxqLm1hY3JvRm9sZGVycyYmai5tYWNyb0ZvbGRlcnMubGVuZ3RoJiYodGhpcy5fbWFjcm9Gb2xkZXJzPWoubWFjcm9Gb2xkZXJzKSxqLnByb2dyYW1Gb2xkZXJzJiZqLnByb2dyYW1Gb2xkZXJzLmxlbmd0aCYmKHRoaXMuX3By'@;
put 'b2dyYW1Gb2xkZXJzPWoucHJvZ3JhbUZvbGRlcnMpLGouYmluYXJ5Rm9sZGVycyYmai5iaW5hcnlGb2xkZXJzLmxlbmd0aCYmKHRoaXMuX2JpbmFyeUZvbGRlcnM9ai5iaW5hcnlGb2xkZXJzKSxqLnN5bmNEaXJlY3RvcmllcyYmai5zeW5jRGlyZWN0b3JpZXMubGVuZ3RoJiYodGhpcy5fc3lu'@;
put 'Y0RpcmVjdG9yaWVzPSgwLFIudmFsaWRhdGVTeW5jRGlyZWN0b3JpZXMpKGouc3luY0RpcmVjdG9yaWVzKSl9Y2F0Y2goVyl7dGhyb3cgbmV3IEVycm9yKCJFcnJvciBwYXJzaW5nIHRhcmdldDogIi5jb25jYXQoVy5tZXNzYWdlKSl9fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoei5w'@;
put 'cm90b3R5cGUsIm5hbWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmFtZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoei5wcm90b3R5cGUsInNlcnZlclVybCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZXJ2ZXJV'@;
put 'cmx9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHoucHJvdG90eXBlLCJzZXJ2ZXJUeXBlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NlcnZlclR5cGV9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRl'@;
put 'ZmluZVByb3BlcnR5KHoucHJvdG90eXBlLCJodHRwc0FnZW50T3B0aW9ucyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9odHRwc0FnZW50T3B0aW9uc30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoei5wcm90b3R5cGUsImFwcExv'@;
put 'YyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBMb2N9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHoucHJvdG90eXBlLCJkb2NDb25maWciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZG9jQ29uZmlnfSxlbnVtZXJh'@;
put 'YmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh6LnByb3RvdHlwZSwiYXV0aENvbmZpZyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hdXRoQ29uZmlnfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0'@;
put 'eSh6LnByb3RvdHlwZSwiYXV0aENvbmZpZ1NhczkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXV0aENvbmZpZ1Nhczl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHoucHJvdG90eXBlLCJidWlsZENvbmZpZyIse2dldDpmdW5j'@;
put 'dGlvbigpe3JldHVybiB0aGlzLl9idWlsZENvbmZpZ30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoei5wcm90b3R5cGUsImRlcGxveUNvbmZpZyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZXBsb3lDb25maWd9LGVudW1lcmFi'@;
put 'bGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHoucHJvdG90eXBlLCJzZXJ2aWNlQ29uZmlnIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NlcnZpY2VDb25maWd9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVBy'@;
put 'b3BlcnR5KHoucHJvdG90eXBlLCJqb2JDb25maWciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fam9iQ29uZmlnfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh6LnByb3RvdHlwZSwic3RyZWFtQ29uZmlnIix7Z2V0OmZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIHRoaXMuX3N0cmVhbUNvbmZpZ30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoei5wcm90b3R5cGUsIm1hY3JvRm9sZGVycyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYWNyb0ZvbGRlcnN9LGVudW1lcmFibGU6'@;
put 'ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHoucHJvdG90eXBlLCJwcm9ncmFtRm9sZGVycyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcm9ncmFtRm9sZGVyc30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJv'@;
put 'cGVydHkoei5wcm90b3R5cGUsImJpbmFyeUZvbGRlcnMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmluYXJ5Rm9sZGVyc30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoei5wcm90b3R5cGUsImNvbnRleHROYW1lIix7Z2V0OmZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRleHROYW1lfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh6LnByb3RvdHlwZSwic2VydmVyTmFtZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZXJ2ZXJOYW1lfSxlbnVtZXJhYmxl'@;
put 'OiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh6LnByb3RvdHlwZSwicmVwb3NpdG9yeU5hbWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVwb3NpdG9yeU5hbWV9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVBy'@;
put 'b3BlcnR5KHoucHJvdG90eXBlLCJ0ZXN0Q29uZmlnIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Rlc3RDb25maWd9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHoucHJvdG90eXBlLCJzeW5jRm9sZGVyIix7Z2V0OmZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIHRoaXMuX3N5bmNGb2xkZXJ9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHoucHJvdG90eXBlLCJzeW5jRGlyZWN0b3JpZXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3luY0RpcmVjdG9yaWVzfSxlbnVtZXJh'@;
put 'YmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHoucHJvdG90eXBlLnRvSnNvbj1mdW5jdGlvbihqKXt2YXIgVixHLFc7dm9pZCAwPT09aiYmKGo9ITApO3ZhciBVPXtuYW1lOnRoaXMubmFtZSxzZXJ2ZXJVcmw6dGhpcy5zZXJ2ZXJVcmwsc2VydmVyVHlwZTp0aGlzLnNlcnZlclR5cGUsaHR0cHNB'@;
put 'Z2VudE9wdGlvbnM6dGhpcy5odHRwc0FnZW50T3B0aW9ucyxhcHBMb2M6dGhpcy5hcHBMb2MsZG9jQ29uZmlnOnRoaXMuZG9jQ29uZmlnLGRlcGxveUNvbmZpZzp0aGlzLmRlcGxveUNvbmZpZ307cmV0dXJuIShudWxsPT09KFY9dGhpcy5tYWNyb0ZvbGRlcnMpfHx2b2lkIDA9PT1WKSYmVi5s'@;
put 'ZW5ndGgmJihVLm1hY3JvRm9sZGVycz10aGlzLm1hY3JvRm9sZGVycyksIShudWxsPT09KEc9dGhpcy5wcm9ncmFtRm9sZGVycyl8fHZvaWQgMD09PUcpJiZHLmxlbmd0aCYmKFUucHJvZ3JhbUZvbGRlcnM9dGhpcy5wcm9ncmFtRm9sZGVycyksIShudWxsPT09KFc9dGhpcy5iaW5hcnlGb2xk'@;
put 'ZXJzKXx8dm9pZCAwPT09VykmJlcubGVuZ3RoJiYoVS5iaW5hcnlGb2xkZXJzPXRoaXMuYmluYXJ5Rm9sZGVycyksdGhpcy5hdXRoQ29uZmlnJiYoVS5hdXRoQ29uZmlnPXRoaXMuYXV0aENvbmZpZyksdGhpcy5hdXRoQ29uZmlnU2FzOSYmKFUuYXV0aENvbmZpZ1Nhczk9dGhpcy5hdXRoQ29u'@;
put 'ZmlnU2FzOSksdGhpcy5zeW5jRGlyZWN0b3JpZXM/VS5zeW5jRGlyZWN0b3JpZXM9dGhpcy5zeW5jRGlyZWN0b3JpZXM6aiYmKFUuc3luY0RpcmVjdG9yaWVzPVtdKSx0aGlzLmJ1aWxkQ29uZmlnP1UuYnVpbGRDb25maWc9dGhpcy5idWlsZENvbmZpZzpqJiYoVS5idWlsZENvbmZpZz17aW5p'@;
put 'dFByb2dyYW06IiIsdGVybVByb2dyYW06IiIsYnVpbGRPdXRwdXRGaWxlTmFtZToiIi5jb25jYXQodGhpcy5uYW1lLCIuc2FzIiksYnVpbGRPdXRwdXRGb2xkZXI6InNhc2pzYnVpbGQiLGJ1aWxkUmVzdWx0c0ZvbGRlcjoic2FzanNyZXN1bHRzIixtYWNyb1ZhcnM6e319KSx0aGlzLmpvYkNv'@;
put 'bmZpZz9VLmpvYkNvbmZpZz10aGlzLmpvYkNvbmZpZzpqJiYoVS5qb2JDb25maWc9e2pvYkZvbGRlcnM6W10saW5pdFByb2dyYW06IiIsdGVybVByb2dyYW06IiIsbWFjcm9WYXJzOnt9fSksdGhpcy5zZXJ2aWNlQ29uZmlnP1Uuc2VydmljZUNvbmZpZz10aGlzLnNlcnZpY2VDb25maWc6aiYm'@;
put 'KFUuc2VydmljZUNvbmZpZz17c2VydmljZUZvbGRlcnM6W10saW5pdFByb2dyYW06IiIsdGVybVByb2dyYW06IiIsbWFjcm9WYXJzOnt9fSksdGhpcy5zdHJlYW1Db25maWc/VS5zdHJlYW1Db25maWc9dGhpcy5zdHJlYW1Db25maWc6aiYmKFUuc3RyZWFtQ29uZmlnPXtzdHJlYW1XZWJGb2xk'@;
put 'ZXI6IiIsc3RyZWFtV2ViOiExLHdlYlNvdXJjZVBhdGg6IiIsc3RyZWFtU2VydmljZU5hbWU6IiIsYXNzZXRQYXRoczpbXX0pLHRoaXMudGVzdENvbmZpZz9VLnRlc3RDb25maWc9dGhpcy50ZXN0Q29uZmlnOmomJihVLnRlc3RDb25maWc9e2luaXRQcm9ncmFtOiIiLHRlcm1Qcm9ncmFtOiIi'@;
put 'LG1hY3JvVmFyczp7fSx0ZXN0U2V0VXA6IiIsdGVzdFRlYXJEb3duOiIifSksdGhpcy5zZXJ2ZXJUeXBlPT09SS5TZXJ2ZXJUeXBlLlNhc1ZpeWE/VS5jb250ZXh0TmFtZT10aGlzLmNvbnRleHROYW1lOnRoaXMuc2VydmVyVHlwZT09PUkuU2VydmVyVHlwZS5TYXM5JiYoVS5zZXJ2ZXJOYW1l'@;
put 'PXRoaXMuc2VydmVyTmFtZSxVLnJlcG9zaXRvcnlOYW1lPXRoaXMucmVwb3NpdG9yeU5hbWUpLFV9LHp9KCk7Qi5UYXJnZXQ9RX0sNjc4MTpmdW5jdGlvbihILEIsTCl7InVzZSBzdHJpY3QiO3ZhciBLPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihSKXtyZXR1cm4gUiYm'@;
put 'Ui5fX2VzTW9kdWxlP1I6e2RlZmF1bHQ6Un19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxCLnZhbGlkYXRlU3luY0RpcmVjdG9yaWVzPUIudmFsaWRhdGVSZXBvc2l0b3J5TmFtZT1CLnZhbGlkYXRlU3luY0ZvbGRlcj1CLnZhbGlkYXRlU2VydmVy'@;
put 'TmFtZT1CLnZhbGlkYXRlQ29udGV4dE5hbWU9Qi52YWxpZGF0ZVN0cmVhbUNvbmZpZz1CLnZhbGlkYXRlRGVwbG95Q29uZmlnPUIudmFsaWRhdGVKb2JDb25maWc9Qi52YWxpZGF0ZVRlc3RDb25maWc9Qi52YWxpZGF0ZVNlcnZpY2VDb25maWc9Qi52YWxpZGF0ZUJ1aWxkQ29uZmlnPUIudmFs'@;
put 'aWRhdGVBdXRoQ29uZmlnU2FzOT1CLnZhbGlkYXRlQXV0aENvbmZpZz1CLnZhbGlkYXRlRG9jQ29uZmlnPUIudmFsaWRhdGVBcHBMb2M9Qi52YWxpZGF0ZUh0dHBzQWdlbnRPcHRpb25zPUIudmFsaWRhdGVTZXJ2ZXJVcmw9Qi52YWxpZGF0ZVRhcmdldE5hbWU9Qi52YWxpZGF0ZVNlcnZlclR5'@;
put 'cGU9dm9pZCAwO3ZhciBKPUsoTCg0ODEpKSxJPUwoMzkwMCk7Qi52YWxpZGF0ZVNlcnZlclR5cGU9ZnVuY3Rpb24oUil7aWYoIVIpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHNlcnZlciB0eXBlOiBgc2VydmVyVHlwZWAgY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO2lmKFIhPT1J'@;
put 'LlNlcnZlclR5cGUuU2FzOSYmUiE9PUkuU2VydmVyVHlwZS5TYXNWaXlhJiZSIT09SS5TZXJ2ZXJUeXBlLlNhc2pzKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzZXJ2ZXIgdHlwZTogU3VwcG9ydGVkIHZhbHVlcyBmb3IgIGBzZXJ2ZXJUeXBlYCBhcmUgIi5jb25jYXQoSS5TZXJ2ZXJUeXBl'@;
put 'LlNhc1ZpeWEsIiwgIikuY29uY2F0KEkuU2VydmVyVHlwZS5TYXM5LCIgYW5kICIpLmNvbmNhdChJLlNlcnZlclR5cGUuU2FzanMsIi4iKSk7cmV0dXJuIFJ9LEIudmFsaWRhdGVUYXJnZXROYW1lPWZ1bmN0aW9uKFIpe2lmKCFSKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB0YXJnZXQgbmFt'@;
put 'ZTogYG5hbWVgIGNhbm5vdCBiZSBlbXB0eSwgbnVsbCBvciB1bmRlZmluZWQuIik7aWYoUi50cmltKCkuaW5jbHVkZXMoIiAiKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdGFyZ2V0IG5hbWU6IGBuYW1lYCBjYW5ub3QgaW5jbHVkZSBzcGFjZXMuIik7aWYoIS9eW2EtekEtWjAtOVwtXSsk'@;
put 'L2kudGVzdChSKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdGFyZ2V0IG5hbWU6IGBuYW1lYCBjYW4gb25seSBjb250YWluIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCBkYXNoZXMuIik7cmV0dXJuIFJ9LEIudmFsaWRhdGVTZXJ2ZXJVcmw9ZnVuY3Rpb24oUil7aWYobnVsbD09UiYm'@;
put 'KFI9IiIpLCIiIT09UiYmIUouZGVmYXVsdC5pc0h0dHBVcmkoUikmJiFKLmRlZmF1bHQuaXNIdHRwc1VyaShSKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc2VydmVyIFVSTDogYHNlcnZlclVybGAgc2hvdWxkIGVpdGhlciBiZSBhbiBlbXB0eSBzdHJpbmcgb3IgYSB2YWxpZCBVUkwgb2Yg'@;
put 'dGhlIGZvcm0gaHR0cChzKTovL3lvdXItc2VydmVyLmNvbSg6cG9ydCkuIik7cmV0dXJuIFJ9LEIudmFsaWRhdGVIdHRwc0FnZW50T3B0aW9ucz1mdW5jdGlvbihSKXtpZihSKXtpZigib2JqZWN0IiE9dHlwZW9mIFIpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHZhbHVlOiBgaHR0cHNBZ2Vu'@;
put 'dE9wdGlvbnNgIHNob3VsZCBlaXRoZXIgYmUgYW4gZW1wdHkgb3IgYW4gb2JqZWN0IG9mIGBIdHRwc0FnZW50T3B0aW9uc2AiKTtpZihudWxsPT1SLmFsbG93SW5zZWN1cmVSZXF1ZXN0cylSLmFsbG93SW5zZWN1cmVSZXF1ZXN0cz0hMTtlbHNlIGlmKCJib29sZWFuIiE9dHlwZW9mIFIuYWxs'@;
put 'b3dJbnNlY3VyZVJlcXVlc3RzKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB2YWx1ZTogYGh0dHBzQWdlbnRPcHRpb25zLmFsbG93SW5zZWN1cmVSZXF1ZXN0c2Agc2hvdWxkIGVpdGhlciBiZSBhbiBlbXB0eSBvciBhIGJvb2xlYW4iKTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIFIuY2FQYXRo'@;
put 'JiYoUi5jYVBhdGg9dm9pZCAwKSwic3RyaW5nIiE9dHlwZW9mIFIua2V5UGF0aCYmKFIua2V5UGF0aD12b2lkIDApLCJzdHJpbmciIT10eXBlb2YgUi5jZXJ0UGF0aCYmKFIuY2VydFBhdGg9dm9pZCAwKSxSfX0sQi52YWxpZGF0ZUFwcExvYz1mdW5jdGlvbihSKXtpZighUil0aHJvdyBuZXcg'@;
put 'RXJyb3IoIkludmFsaWQgYXBwIGxvY2F0aW9uOiBgYXBwTG9jYCBjYW5ub3QgYmUgZW1wdHksIG51bGwgb3IgdW5kZWZpbmVkLiIpO2lmKCFSLnN0YXJ0c1dpdGgoIi8iKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYXBwIGxvY2F0aW9uOiBgYXBwTG9jYCBtdXN0IHN0YXJ0IHdpdGggYSBg'@;
put 'L2AuIik7cmV0dXJuIFJ9LEIudmFsaWRhdGVEb2NDb25maWc9ZnVuY3Rpb24oUil7aWYoUnx8KFI9e30pLCJib29sZWFuIiE9dHlwZW9mIFIuZGlzcGxheU1hY3JvQ29yZSYmKFIuZGlzcGxheU1hY3JvQ29yZT12b2lkIDApLCJib29sZWFuIiE9dHlwZW9mIFIuZW5hYmxlTGluZWFnZSYmKFIu'@;
put 'ZW5hYmxlTGluZWFnZT12b2lkIDApLCJzdHJpbmciIT10eXBlb2YgUi5vdXREaXJlY3RvcnkmJihSLm91dERpcmVjdG9yeT12b2lkIDApLCJzdHJpbmciPT10eXBlb2YgUi5kYXRhQ29udHJvbGxlclVybCl7aWYoIiIhPT1SLmRhdGFDb250cm9sbGVyVXJsJiYhSi5kZWZhdWx0LmlzSHR0cFVy'@;
put 'aShSLmRhdGFDb250cm9sbGVyVXJsKSYmIUouZGVmYXVsdC5pc0h0dHBzVXJpKFIuZGF0YUNvbnRyb2xsZXJVcmwpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBEYXRhIENvbnRyb2xsZXIgVXJsOiBgZGF0YUNvbnRyb2xsZXJVcmxgIHNob3VsZCBlaXRoZXIgYmUgYW4gZW1wdHkgc3RyaW5n'@;
put 'IG9yIGEgdmFsaWQgVVJMIG9mIHRoZSBmb3JtIGh0dHAocyk6Ly95b3VyLXNlcnZlci5jb20oOnBvcnQpLiIpfWVsc2UgUi5kYXRhQ29udHJvbGxlclVybD12b2lkIDA7cmV0dXJuIFJ9LEIudmFsaWRhdGVBdXRoQ29uZmlnPWZ1bmN0aW9uKFIpe2lmKCFSKXRocm93IG5ldyBFcnJvcigiSW52'@;
put 'YWxpZCBhdXRoIGNvbmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuIFJ9LEIudmFsaWRhdGVBdXRoQ29uZmlnU2FzOT1mdW5jdGlvbihSKXtpZighUil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYXV0aCBjb25maWcgZm9yIHNhczk6IEpTT04gY2Fubm90'@;
put 'IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO2lmKCFSLnVzZXJOYW1lfHwhUi5wYXNzd29yZCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYXV0aCBjb25maWcgZm9yIHNhczk6IHVzZXJOYW1lIGFuZCBwYXNzd29yZCBjYW4gbm90IGJlIGVtcHR5Iik7cmV0dXJuIFJ9LEIudmFsaWRhdGVCdWls'@;
put 'ZENvbmZpZz1mdW5jdGlvbihSLEUpe2lmKCFSKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBidWlsZCBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBSLmJ1aWxkUmVzdWx0c0ZvbGRlcnx8KFIuYnVpbGRSZXN1bHRzRm9sZGVyPSJzYXNqc3Jlc3Vs'@;
put 'dHMiKSxSLmJ1aWxkT3V0cHV0Rm9sZGVyfHwoUi5idWlsZE91dHB1dEZvbGRlcj0ic2FzanNidWlsZCIpLFIuYnVpbGRPdXRwdXRGaWxlTmFtZXx8KFIuYnVpbGRPdXRwdXRGaWxlTmFtZT0iIi5jb25jYXQoRSwiLnNhcyIpKSxSLmluaXRQcm9ncmFtfHwoUi5pbml0UHJvZ3JhbT0iIiksUi50'@;
put 'ZXJtUHJvZ3JhbXx8KFIudGVybVByb2dyYW09IiIpLFIubWFjcm9WYXJzfHwoUi5tYWNyb1ZhcnM9e30pLFJ9LEIudmFsaWRhdGVTZXJ2aWNlQ29uZmlnPWZ1bmN0aW9uKFIpe2lmKCFSKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzZXJ2aWNlIGNvbmZpZzogSlNPTiBjYW5ub3QgYmUgbnVs'@;
put 'bCBvciB1bmRlZmluZWQuIik7cmV0dXJuIFIuaW5pdFByb2dyYW18fChSLmluaXRQcm9ncmFtPSIiKSxSLnRlcm1Qcm9ncmFtfHwoUi50ZXJtUHJvZ3JhbT0iIiksUi5zZXJ2aWNlRm9sZGVyc3x8KFIuc2VydmljZUZvbGRlcnM9W10pLFIubWFjcm9WYXJzfHwoUi5tYWNyb1ZhcnM9e30pLFJ9'@;
put 'LEIudmFsaWRhdGVUZXN0Q29uZmlnPWZ1bmN0aW9uKFIpe2lmKCFSKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB0ZXN0IGNvbmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuIFIuaW5pdFByb2dyYW18fChSLmluaXRQcm9ncmFtPSIiKSxSLnRlcm1Qcm9n'@;
put 'cmFtfHwoUi50ZXJtUHJvZ3JhbT0iIiksUi5tYWNyb1ZhcnN8fChSLm1hY3JvVmFycz17fSksUi50ZXN0U2V0VXB8fChSLnRlc3RTZXRVcD0iIiksUi50ZXN0VGVhckRvd258fChSLnRlc3RUZWFyRG93bj0iIiksUn0sQi52YWxpZGF0ZUpvYkNvbmZpZz1mdW5jdGlvbihSKXtpZighUil0aHJv'@;
put 'dyBuZXcgRXJyb3IoIkludmFsaWQgam9iIGNvbmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuIFIuaW5pdFByb2dyYW18fChSLmluaXRQcm9ncmFtPSIiKSxSLnRlcm1Qcm9ncmFtfHwoUi50ZXJtUHJvZ3JhbT0iIiksUi5qb2JGb2xkZXJzfHwoUi5qb2JG'@;
put 'b2xkZXJzPVtdKSxSLm1hY3JvVmFyc3x8KFIubWFjcm9WYXJzPXt9KSxSfSxCLnZhbGlkYXRlRGVwbG95Q29uZmlnPWZ1bmN0aW9uKFIpe2lmKCFSKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBkZXBsb3kgY29uZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1'@;
put 'cm4gUi5kZXBsb3lTZXJ2aWNlUGFjaz0hIVIuZGVwbG95U2VydmljZVBhY2ssUi5kZXBsb3lTY3JpcHRzfHwoUi5kZXBsb3lTY3JpcHRzPVtdKSxSfSxCLnZhbGlkYXRlU3RyZWFtQ29uZmlnPWZ1bmN0aW9uKFIpe2lmKCFSKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJlYW0gY29uZmln'@;
put 'OiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtpZighMCE9PVIuc3RyZWFtV2ViJiYhMSE9PVIuc3RyZWFtV2ViKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJlYW0gY29uZmlnOiBgc3RyZWFtV2ViYCBjYW5ub3QgYmUgYSBub24tYm9vbGVhbiB2YWx1ZS4iKTtpZihS'@;
put 'LnN0cmVhbVdlYiYmIVIuc3RyZWFtV2ViRm9sZGVyKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJlYW0gY29uZmlnOiBgc3RyZWFtV2ViRm9sZGVyYCBjYW5ub3QgYmUgZW1wdHksIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gYHN0cmVhbVdlYmAgaXMgdHJ1ZS4iKTtpZihSLnN0cmVhbVdl'@;
put 'YiYmIVIud2ViU291cmNlUGF0aCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyZWFtIGNvbmZpZzogYHdlYlNvdXJjZVBhdGhgIGNhbm5vdCBiZSBlbXB0eSwgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuIFIuc3RyZWFtTG9nbyYmInN0cmluZyIhPXR5cGVvZiBSLnN0cmVhbUxvZ28m'@;
put 'JihSLnN0cmVhbUxvZ289dm9pZCAwKSxSLmFzc2V0UGF0aHN8fChSLmFzc2V0UGF0aHM9W10pLFIuc3RyZWFtU2VydmljZU5hbWV8fChSLnN0cmVhbVNlcnZpY2VOYW1lPSJjbGlja21lIiksUn0sQi52YWxpZGF0ZUNvbnRleHROYW1lPWZ1bmN0aW9uKFIsRSl7cmV0dXJuIEUhPT1JLlNlcnZl'@;
put 'clR5cGUuU2FzVml5YXx8Uj9SOiJTQVMgSm9iIEV4ZWN1dGlvbiBjb21wdXRlIGNvbnRleHQifSxCLnZhbGlkYXRlU2VydmVyTmFtZT1mdW5jdGlvbihSLEUpe3JldHVybiBFIT09SS5TZXJ2ZXJUeXBlLlNhczl8fFI/UjoiU0FTQXBwIn0sQi52YWxpZGF0ZVN5bmNGb2xkZXI9ZnVuY3Rpb24o'@;
put 'Uil7aWYoInN0cmluZyI9PXR5cGVvZiBSJiZSKXJldHVybiBSfSxCLnZhbGlkYXRlUmVwb3NpdG9yeU5hbWU9ZnVuY3Rpb24oUixFKXtyZXR1cm4gRSE9PUkuU2VydmVyVHlwZS5TYXM5fHxSP1I6IkZvdW5kYXRpb24ifSxCLnZhbGlkYXRlU3luY0RpcmVjdG9yaWVzPWZ1bmN0aW9uKFIpe2lm'@;
put 'KCFSKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzeW5jRGlyZWN0b3JpZXMgY29uZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4gUi5mb3JFYWNoKGZ1bmN0aW9uKEUpe2lmKCFFLmxvY2FsfHwhRS5yZW1vdGUpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlk'@;
put 'IHN5bmNEaXJlY3RvcnkgY29uZmlnOiB2YWx1ZXMgb2YgcHJvcGVydHkgJ2xvY2FsJyBhbmQgJ3JlbW90ZSBjYW4gbm90IGJlIGVtcHR5IG9yIHVuZGVmaW5lZCIpfSksUn19LDI5Mjc6ZnVuY3Rpb24oSCxCLEwpeyJ1c2Ugc3RyaWN0Ijt2YXIgSz1MKDg3NjQpLkJ1ZmZlcixKPXRoaXMmJnRo'@;
put 'aXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihFKXtyZXR1cm4gRSYmRS5fX2VzTW9kdWxlP0U6e2RlZmF1bHQ6RX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxCLmRlY29kZUZyb21CYXNlNjQ9Qi5lbmNvZGVUb0Jhc2U2ND12b2lkIDA7dmFy'@;
put 'IEk9SihMKDU4MzUpKSxSPSJ7c2FzanNfZW5jb2RlZH0iO0IuZW5jb2RlVG9CYXNlNjQ9ZnVuY3Rpb24oRSl7dmFyIHo9SS5kZWZhdWx0LnJhbmRvbUJ5dGVzKDEwMCkudG9TdHJpbmcoImhleCIpLGo9Sy5mcm9tKHorRSkudG9TdHJpbmcoImJhc2U2NCIpO3JldHVybiBSK2p9LEIuZGVjb2Rl'@;
put 'RnJvbUJhc2U2ND1mdW5jdGlvbihFKXtyZXR1cm4gRS5zdGFydHNXaXRoKFIpPyhFPUUucmVwbGFjZSgvXntzYXNqc19lbmNvZGVkfS8sIiIpLEsuZnJvbShFLCJiYXNlNjQiKS50b1N0cmluZygpLnN1YnN0cmluZygyMDApKTpFfX0sNTgxOihILEIpPT57InVzZSBzdHJpY3QiO09iamVjdC5k'@;
put 'ZWZpbmVQcm9wZXJ0eShCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxCLmJ5dGVzVG9TaXplPXZvaWQgMCxCLmJ5dGVzVG9TaXplPWZ1bmN0aW9uKEwsSyxKKXtpZih2b2lkIDA9PT1LJiYoSz0xKSx2b2lkIDA9PT1KJiYoSj0xMDk5NTExNjI3Nzc2KSwwPT09TClyZXR1cm4iMCBCIjtMPUw+'@;
put 'Sj9KOkw7dmFyIEk9SzwwPzA6SyxSPU1hdGguZmxvb3IoTWF0aC5sb2coTCkvTWF0aC5sb2coMTAyNCkpO3JldHVybihML01hdGgucG93KDEwMjQsUikpLnRvRml4ZWQoSSkrIiAiK1siQiIsIktCIiwiTUIiLCJHQiIsIlRCIl1bUl19fSw4NjUzOihILEIpPT57InVzZSBzdHJpY3QiO09iamVj'@;
put 'dC5kZWZpbmVQcm9wZXJ0eShCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxCLmNodW5rPXZvaWQgMCxCLmNodW5rPWZ1bmN0aW9uKEwsSyl7cmV0dXJuIHZvaWQgMD09PUsmJihLPTIyMCksTC5sZW5ndGg8PUs/W0xdOihMLm1hdGNoKG5ldyBSZWdFeHAoIi57MSwiK0srIn0iLCJnIikpfHxb'@;
put 'XSkuZmlsdGVyKGZ1bmN0aW9uKEope3JldHVybiEhSn0pfX0sNjQ1NzpmdW5jdGlvbihILEIpeyJ1c2Ugc3RyaWN0Ijt2YXIgTD10aGlzJiZ0aGlzLl9fcmVhZHx8ZnVuY3Rpb24oSixJKXt2YXIgUj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZKW1N5bWJvbC5pdGVyYXRvcl07aWYoIVIp'@;
put 'cmV0dXJuIEo7dmFyIEUseixqPVIuY2FsbChKKSxWPVtdO3RyeXtmb3IoOyh2b2lkIDA9PT1JfHxJLS0gPjApJiYhKEU9ai5uZXh0KCkpLmRvbmU7KVYucHVzaChFLnZhbHVlKX1jYXRjaChHKXt6PXtlcnJvcjpHfX1maW5hbGx5e3RyeXtFJiYhRS5kb25lJiYoUj1qLnJldHVybikmJlIuY2Fs'@;
put 'bChqKX1maW5hbGx5e2lmKHopdGhyb3cgei5lcnJvcn19cmV0dXJuIFZ9LEs9dGhpcyYmdGhpcy5fX3NwcmVhZEFycmF5fHxmdW5jdGlvbihKLEksUil7aWYoUnx8Mj09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKHZhciBFLHo9MCxqPUkubGVuZ3RoO3o8ajt6KyspIUUmJnogaW4gSXx8KEV8fChF'@;
put 'PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKEksMCx6KSksRVt6XT1JW3pdKTtyZXR1cm4gSi5jb25jYXQoRXx8QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoSSkpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQi5kaWZmPXZvaWQgMCxCLmRp'@;
put 'ZmY9ZnVuY3Rpb24oSixJKXt2YXIgUj1KLmZpbHRlcihmdW5jdGlvbih6KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHo/IUpTT04uc3RyaW5naWZ5KEkpLmluY2x1ZGVzKEpTT04uc3RyaW5naWZ5KHopKTohSS5pbmNsdWRlcyh6KX0pLEU9SS5maWx0ZXIoZnVuY3Rpb24oeil7cmV0dXJuIm9i'@;
put 'amVjdCI9PXR5cGVvZiB6PyFKU09OLnN0cmluZ2lmeShKKS5pbmNsdWRlcyhKU09OLnN0cmluZ2lmeSh6KSk6IUouaW5jbHVkZXMoeil9KTtyZXR1cm4gSyhLKFtdLEwoUiksITEpLEwoRSksITEpfX0sMTUyOTooSCxCKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwi'@;
put 'X19lc01vZHVsZSIse3ZhbHVlOiEwfSksQi5nZXRFeGVjdXRvclBhdGg9dm9pZCAwO3ZhciBMPXtTQVNWSVlBOiIvU0FTSm9iRXhlY3V0aW9uIixTQVM5OiIvU0FTU3RvcmVkUHJvY2Vzcy9kbyJ9O0IuZ2V0RXhlY3V0b3JQYXRoPWZ1bmN0aW9uKEspe3JldHVybiBLPyhLPUsudG9VcHBlckNh'@;
put 'c2UoKSxMW0tdfHwiIik6IiJ9fSwzMzE2OihILEIsTCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEIuZ2V0VHJlZUV4YW1wbGU9Qi5pc0ZpbGVUcmVlPXZvaWQgMDt2YXIgSz1MKDM5MDApO0IuaXNGaWxlVHJlZT1mdW5j'@;
put 'dGlvbihFKXtyZXR1cm4gRSYmRS5tZW1iZXJzJiZBcnJheS5pc0FycmF5KEUubWVtYmVycykmJjA9PT1FLm1lbWJlcnMuZmlsdGVyKGZ1bmN0aW9uKHope3JldHVybiFKKHopJiYhSSh6KSYmIVIoeil9KS5sZW5ndGh9O3ZhciBKPWZ1bmN0aW9uKEUpe3JldHVybiBFJiYic3RyaW5nIj09dHlw'@;
put 'ZW9mIEUubmFtZSYmRS50eXBlPT09Sy5NZW1iZXJUeXBlLnNlcnZpY2UmJiJzdHJpbmciPT10eXBlb2YgRS5jb2RlfSxJPWZ1bmN0aW9uKEUpe3JldHVybiBFJiYic3RyaW5nIj09dHlwZW9mIEUubmFtZSYmRS50eXBlPT09Sy5NZW1iZXJUeXBlLmZpbGUmJiJzdHJpbmciPT10eXBlb2YgRS5j'@;
put 'b2RlfSxSPWZ1bmN0aW9uKEUpe3JldHVybiBFJiYic3RyaW5nIj09dHlwZW9mIEUubmFtZSYmRS50eXBlPT09Sy5NZW1iZXJUeXBlLmZvbGRlciYmRS5tZW1iZXJzJiZBcnJheS5pc0FycmF5KEUubWVtYmVycykmJjA9PT1FLm1lbWJlcnMuZmlsdGVyKGZ1bmN0aW9uKHope3JldHVybiFKKHop'@;
put 'JiYhSSh6KSYmIVIoeil9KS5sZW5ndGh9O0IuZ2V0VHJlZUV4YW1wbGU9ZnVuY3Rpb24oKXtyZXR1cm57bWVtYmVyczpbe25hbWU6ImpvYnMiLHR5cGU6Sy5NZW1iZXJUeXBlLmZvbGRlcixtZW1iZXJzOlt7bmFtZToiZXh0cmFjdCIsdHlwZTpLLk1lbWJlclR5cGUuZm9sZGVyLG1lbWJlcnM6'@;
put 'W3tuYW1lOiJtYWtlZGF0YTEiLHR5cGU6Sy5NZW1iZXJUeXBlLnNlcnZpY2UsY29kZToiJXB1dCBIZWxsbyBXb3JsZCE7In1dfV19XX19fSw2MjY2OmZ1bmN0aW9uKEgsQixMKXsidXNlIHN0cmljdCI7dmFyIEs9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1'@;
put 'bmN0aW9uKFcsVSxxLHRlKXt2b2lkIDA9PT10ZSYmKHRlPXEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXLHRlLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBVW3FdfX0pfTpmdW5jdGlvbihXLFUscSx0ZSl7dm9pZCAwPT09dGUmJih0ZT1xKSxXW3RlXT1VW3FdfSksSj10'@;
put 'aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oVyxVKXtmb3IodmFyIHEgaW4gVykiZGVmYXVsdCI9PT1xfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVSxxKXx8SyhVLFcscSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJfX2VzTW9kdWxlIix7dmFsdWU6'@;
put 'ITB9KSxCLmNodW5rPUIuZGlmZj1CLmJ5dGVzVG9TaXplPUIuZ2V0RXhlY3V0b3JQYXRoPUIuZGVjb2RlRnJvbUJhc2U2ND1CLmVuY29kZVRvQmFzZTY0PUIudXJsT3JpZ2luPUIuZ2VuZXJhdGVQYXRoRm9yU2FzPUIuZ2V0TWFjcm9zUGF0aD1CLmVzY2FwZVdpblNsYXNoZXM9Qi5pc0xpbnV4'@;
put 'PUIuaXNXaW5kb3dzPUIudW5pcUFycmF5PUIuYXN5bmNGb3JFYWNoPUIudXVpZHY0PXZvaWQgMDt2YXIgST1MKDExMzEpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJ1dWlkdjQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLnV1aWR2NH19KSxPYmplY3QuZGVmaW5l'@;
put 'UHJvcGVydHkoQiwiYXN5bmNGb3JFYWNoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5hc3luY0ZvckVhY2h9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEIsInVuaXFBcnJheSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkudW5pcUFycmF5'@;
put 'fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJpc1dpbmRvd3MiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmlzV2luZG93c319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiaXNMaW51eCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEku'@;
put 'aXNMaW51eH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiZXNjYXBlV2luU2xhc2hlcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuZXNjYXBlV2luU2xhc2hlc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiZ2V0TWFjcm9zUGF0aCIse2VudW1lcmFibGU6'@;
put 'ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuZ2V0TWFjcm9zUGF0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiZ2VuZXJhdGVQYXRoRm9yU2FzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5nZW5lcmF0ZVBhdGhGb3JTYXN9fSksSihMKDMzMTYpLEIpO3Zh'@;
put 'ciBSPUwoOTY1Mik7T2JqZWN0LmRlZmluZVByb3BlcnR5KEIsInVybE9yaWdpbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFIudXJsT3JpZ2lufX0pO3ZhciBFPUwoMjkyNyk7T2JqZWN0LmRlZmluZVByb3BlcnR5KEIsImVuY29kZVRvQmFzZTY0Iix7ZW51bWVyYWJs'@;
put 'ZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRS5lbmNvZGVUb0Jhc2U2NH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiZGVjb2RlRnJvbUJhc2U2NCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEUuZGVjb2RlRnJvbUJhc2U2NH19KTt2YXIgej1MKDE1MjkpO09i'@;
put 'amVjdC5kZWZpbmVQcm9wZXJ0eShCLCJnZXRFeGVjdXRvclBhdGgiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB6LmdldEV4ZWN1dG9yUGF0aH19KTt2YXIgaj1MKDU4MSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KEIsImJ5dGVzVG9TaXplIix7ZW51bWVyYWJsZTohMCxn'@;
put 'ZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gai5ieXRlc1RvU2l6ZX19KTt2YXIgVj1MKDY0NTcpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJkaWZmIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gVi5kaWZmfX0pO3ZhciBHPUwoODY1Myk7T2JqZWN0LmRlZmluZVByb3BlcnR5'@;
put 'KEIsImNodW5rIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRy5jaHVua319KX0sOTY1MjooSCxCKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQi51cmxPcmlnaW49dm9pZCAwLEIudXJsT3JpZ2lu'@;
put 'PWZ1bmN0aW9uKEwpe2lmKCIiPT09TClyZXR1cm4gTDt2YXIgSzt0cnl7Sz1uZXcgVVJMKEwpLm9yaWdpbn1jYXRjaHt0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgVVJMLiIpfXJldHVybiBLfX0sMTEzMTpmdW5jdGlvbihILEIsTCl7InVzZSBzdHJpY3QiO3ZhciBLPUwoNDE1NSksSj10aGlz'@;
put 'JiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oeixqLFYsRyl7cmV0dXJuIG5ldyhWfHwoVj1Qcm9taXNlKSkoZnVuY3Rpb24oVyxVKXtmdW5jdGlvbiBxKGllKXt0cnl7bmUoRy5uZXh0KGllKSl9Y2F0Y2gobGUpe1UobGUpfX1mdW5jdGlvbiB0ZShpZSl7dHJ5e25lKEcudGhyb3coaWUpKX1j'@;
put 'YXRjaChsZSl7VShsZSl9fWZ1bmN0aW9uIG5lKGllKXt2YXIgbGU7aWUuZG9uZT9XKGllLnZhbHVlKToobGU9aWUudmFsdWUsbGUgaW5zdGFuY2VvZiBWP2xlOm5ldyBWKGZ1bmN0aW9uKGRlKXtkZShsZSl9KSkudGhlbihxLHRlKX1uZSgoRz1HLmFwcGx5KHosanx8W10pKS5uZXh0KCkpfSl9'@;
put 'LEk9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oeixqKXt2YXIgVixHLFcsVSxxPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJldbMF0pdGhyb3cgV1sxXTtyZXR1cm4gV1sxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBVPXtuZXh0OnRlKDApLHRocm93OnRlKDEpLHJl'@;
put 'dHVybjp0ZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKFVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksVTtmdW5jdGlvbiB0ZShuZSl7cmV0dXJuIGZ1bmN0aW9uKGllKXtyZXR1cm4gZnVuY3Rpb24obGUpe2lmKFYpdGhyb3cgbmV3IFR5cGVFcnJv'@;
put 'cigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7cTspdHJ5e2lmKFY9MSxHJiYoVz0yJmxlWzBdP0cucmV0dXJuOmxlWzBdP0cudGhyb3d8fCgoVz1HLnJldHVybikmJlcuY2FsbChHKSwwKTpHLm5leHQpJiYhKFc9Vy5jYWxsKEcsbGVbMV0pKS5kb25lKXJldHVybiBX'@;
put 'O3N3aXRjaChHPTAsVyYmKGxlPVsyJmxlWzBdLFcudmFsdWVdKSxsZVswXSl7Y2FzZSAwOmNhc2UgMTpXPWxlO2JyZWFrO2Nhc2UgNDpyZXR1cm4gcS5sYWJlbCsrLHt2YWx1ZTpsZVsxXSxkb25lOiExfTtjYXNlIDU6cS5sYWJlbCsrLEc9bGVbMV0sbGU9WzBdO2NvbnRpbnVlO2Nhc2UgNzps'@;
put 'ZT1xLm9wcy5wb3AoKSxxLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChXPShXPXEudHJ5cykubGVuZ3RoPjAmJldbVy5sZW5ndGgtMV0pfHw2IT09bGVbMF0mJjIhPT1sZVswXSkpe3E9MDtjb250aW51ZX1pZigzPT09bGVbMF0mJighV3x8bGVbMV0+V1swXSYmbGVbMV08V1sz'@;
put 'XSkpe3EubGFiZWw9bGVbMV07YnJlYWt9aWYoNj09PWxlWzBdJiZxLmxhYmVsPFdbMV0pe3EubGFiZWw9V1sxXSxXPWxlO2JyZWFrfWlmKFcmJnEubGFiZWw8V1syXSl7cS5sYWJlbD1XWzJdLHEub3BzLnB1c2gobGUpO2JyZWFrfVdbMl0mJnEub3BzLnBvcCgpLHEudHJ5cy5wb3AoKTtjb250'@;
put 'aW51ZX1sZT1qLmNhbGwoeixxKX1jYXRjaChkZSl7bGU9WzYsZGVdLEc9MH1maW5hbGx5e1Y9Vz0wfWlmKDUmbGVbMF0pdGhyb3cgbGVbMV07cmV0dXJue3ZhbHVlOmxlWzBdP2xlWzFdOnZvaWQgMCxkb25lOiEwfX0oW25lLGllXSl9fX0sUj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8'@;
put 'ZnVuY3Rpb24oeil7cmV0dXJuIHomJnouX19lc01vZHVsZT96OntkZWZhdWx0Onp9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQi5nZW5lcmF0ZVBhdGhGb3JTYXM9Qi5nZXRNYWNyb3NQYXRoPUIuZXNjYXBlV2luU2xhc2hlcz1CLmlzTGludXg9'@;
put 'Qi5pc1dpbmRvd3M9Qi51bmlxQXJyYXk9Qi51dWlkdjQ9Qi5hc3luY0ZvckVhY2g9dm9pZCAwO3ZhciBFPVIoTCgyNTIwKSk7Qi5hc3luY0ZvckVhY2g9ZnVuY3Rpb24oeixqKXtyZXR1cm4gSih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgVjtyZXR1cm4gSSh0aGlzLGZ1bmN0'@;
put 'aW9uKEcpe3N3aXRjaChHLmxhYmVsKXtjYXNlIDA6Vj0wLEcubGFiZWw9MTtjYXNlIDE6cmV0dXJuIFY8ei5sZW5ndGg/WzQsaih6W1ZdLFYseildOlszLDRdO2Nhc2UgMjpHLnNlbnQoKSxHLmxhYmVsPTM7Y2FzZSAzOnJldHVybiBWKyssWzMsMV07Y2FzZSA0OnJldHVyblsyXX19KX0pfSxC'@;
put 'LnV1aWR2ND1mdW5jdGlvbigpe3JldHVybiJ4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHgiLnJlcGxhY2UoL1t4eV0vZyxmdW5jdGlvbih6KXt2YXIgaj0xNipNYXRoLnJhbmRvbSgpfDA7cmV0dXJuKCJ4Ij09ej9qOjMmanw4KS50b1N0cmluZygxNil9KX0sQi51bmlxQXJy'@;
put 'YXk9ZnVuY3Rpb24oeil7cmV0dXJuIEFycmF5LmZyb20obmV3IFNldCh6KSl9LEIuaXNXaW5kb3dzPWZ1bmN0aW9uKCl7cmV0dXJuIndpbjMyIj09PUsucGxhdGZvcm19LEIuaXNMaW51eD1mdW5jdGlvbigpe3JldHVybiJsaW51eCI9PT1LLnBsYXRmb3JtfSxCLmVzY2FwZVdpblNsYXNoZXM9'@;
put 'ZnVuY3Rpb24oeil7cmV0dXJuKDAsQi5pc1dpbmRvd3MpKCk/ei5yZXBsYWNlKC9cXC9nLCJcXFxcIik6en0sQi5nZXRNYWNyb3NQYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIEUuZGVmYXVsdC5qb2luKCIvIiwiLi4iLCJtYWNyb3MiKX0sQi5nZW5lcmF0ZVBhdGhGb3JTYXM9ZnVuY3Rpb24oeil7'@;
put 'cmV0dXJuIHoucmVwbGFjZSgvXFwvZywiLyIpfX0sOTgwOTooSCxCLEwpPT57InVzZSBzdHJpY3QiO2NvbnN0IEs9QjtLLmJpZ251bT1MKDQ1OTApLEsuZGVmaW5lPUwoMjUwMCkuZGVmaW5lLEsuYmFzZT1MKDE5NzkpLEsuY29uc3RhbnRzPUwoNjgyNiksSy5kZWNvZGVycz1MKDgzMDcpLEsu'@;
put 'ZW5jb2RlcnM9TCg2NTc5KX0sMjUwMDooSCxCLEwpPT57InVzZSBzdHJpY3QiO2NvbnN0IEs9TCg2NTc5KSxKPUwoODMwNyksST1MKDU3MTcpO2Z1bmN0aW9uIFIoRSx6KXt0aGlzLm5hbWU9RSx0aGlzLmJvZHk9eix0aGlzLmRlY29kZXJzPXt9LHRoaXMuZW5jb2RlcnM9e319Qi5kZWZpbmU9'@;
put 'ZnVuY3Rpb24oRSx6KXtyZXR1cm4gbmV3IFIoRSx6KX0sUi5wcm90b3R5cGUuX2NyZWF0ZU5hbWVkPWZ1bmN0aW9uKEUpe2NvbnN0IHo9dGhpcy5uYW1lO2Z1bmN0aW9uIGooVil7dGhpcy5faW5pdE5hbWVkKFYseil9cmV0dXJuIEkoaixFKSxqLnByb3RvdHlwZS5faW5pdE5hbWVkPWZ1bmN0'@;
put 'aW9uKFYsRyl7RS5jYWxsKHRoaXMsVixHKX0sbmV3IGoodGhpcyl9LFIucHJvdG90eXBlLl9nZXREZWNvZGVyPWZ1bmN0aW9uKEUpe3JldHVybiB0aGlzLmRlY29kZXJzLmhhc093blByb3BlcnR5KEU9RXx8ImRlciIpfHwodGhpcy5kZWNvZGVyc1tFXT10aGlzLl9jcmVhdGVOYW1lZChKW0Vd'@;
put 'KSksdGhpcy5kZWNvZGVyc1tFXX0sUi5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKEUseixqKXtyZXR1cm4gdGhpcy5fZ2V0RGVjb2Rlcih6KS5kZWNvZGUoRSxqKX0sUi5wcm90b3R5cGUuX2dldEVuY29kZXI9ZnVuY3Rpb24oRSl7cmV0dXJuIHRoaXMuZW5jb2RlcnMuaGFzT3duUHJvcGVy'@;
put 'dHkoRT1FfHwiZGVyIil8fCh0aGlzLmVuY29kZXJzW0VdPXRoaXMuX2NyZWF0ZU5hbWVkKEtbRV0pKSx0aGlzLmVuY29kZXJzW0VdfSxSLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oRSx6LGope3JldHVybiB0aGlzLl9nZXRFbmNvZGVyKHopLmVuY29kZShFLGopfX0sNjYyNTooSCxCLEwp'@;
put 'PT57InVzZSBzdHJpY3QiO2NvbnN0IEs9TCg1NzE3KSxKPUwoODQ2NSkuYixJPUwoMjM5OSkuQnVmZmVyO2Z1bmN0aW9uIFIoeixqKXtKLmNhbGwodGhpcyxqKSxJLmlzQnVmZmVyKHopPyh0aGlzLmJhc2U9eix0aGlzLm9mZnNldD0wLHRoaXMubGVuZ3RoPXoubGVuZ3RoKTp0aGlzLmVycm9y'@;
put 'KCJJbnB1dCBub3QgQnVmZmVyIil9ZnVuY3Rpb24gRSh6LGope2lmKEFycmF5LmlzQXJyYXkoeikpdGhpcy5sZW5ndGg9MCx0aGlzLnZhbHVlPXoubWFwKGZ1bmN0aW9uKFYpe3JldHVybiBFLmlzRW5jb2RlckJ1ZmZlcihWKXx8KFY9bmV3IEUoVixqKSksdGhpcy5sZW5ndGgrPVYubGVuZ3Ro'@;
put 'LFZ9LHRoaXMpO2Vsc2UgaWYoIm51bWJlciI9PXR5cGVvZiB6KXtpZighKDA8PXomJno8PTI1NSkpcmV0dXJuIGouZXJyb3IoIm5vbi1ieXRlIEVuY29kZXJCdWZmZXIgdmFsdWUiKTt0aGlzLnZhbHVlPXosdGhpcy5sZW5ndGg9MX1lbHNlIGlmKCJzdHJpbmciPT10eXBlb2Ygeil0aGlzLnZh'@;
put 'bHVlPXosdGhpcy5sZW5ndGg9SS5ieXRlTGVuZ3RoKHopO2Vsc2V7aWYoIUkuaXNCdWZmZXIoeikpcmV0dXJuIGouZXJyb3IoIlVuc3VwcG9ydGVkIHR5cGU6ICIrdHlwZW9mIHopO3RoaXMudmFsdWU9eix0aGlzLmxlbmd0aD16Lmxlbmd0aH19SyhSLEopLEIuQz1SLFIuaXNEZWNvZGVyQnVm'@;
put 'ZmVyPWZ1bmN0aW9uKHope3JldHVybiB6IGluc3RhbmNlb2YgUnx8Im9iamVjdCI9PXR5cGVvZiB6JiZJLmlzQnVmZmVyKHouYmFzZSkmJiJEZWNvZGVyQnVmZmVyIj09PXouY29uc3RydWN0b3IubmFtZSYmIm51bWJlciI9PXR5cGVvZiB6Lm9mZnNldCYmIm51bWJlciI9PXR5cGVvZiB6Lmxl'@;
put 'bmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIHouc2F2ZSYmImZ1bmN0aW9uIj09dHlwZW9mIHoucmVzdG9yZSYmImZ1bmN0aW9uIj09dHlwZW9mIHouaXNFbXB0eSYmImZ1bmN0aW9uIj09dHlwZW9mIHoucmVhZFVJbnQ4JiYiZnVuY3Rpb24iPT10eXBlb2Ygei5za2lwJiYiZnVuY3Rpb24iPT10'@;
put 'eXBlb2Ygei5yYXd9LFIucHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24oKXtyZXR1cm57b2Zmc2V0OnRoaXMub2Zmc2V0LHJlcG9ydGVyOkoucHJvdG90eXBlLnNhdmUuY2FsbCh0aGlzKX19LFIucHJvdG90eXBlLnJlc3RvcmU9ZnVuY3Rpb24oeil7Y29uc3Qgaj1uZXcgUih0aGlzLmJhc2UpO3Jl'@;
put 'dHVybiBqLm9mZnNldD16Lm9mZnNldCxqLmxlbmd0aD10aGlzLm9mZnNldCx0aGlzLm9mZnNldD16Lm9mZnNldCxKLnByb3RvdHlwZS5yZXN0b3JlLmNhbGwodGhpcyx6LnJlcG9ydGVyKSxqfSxSLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub2Zmc2V0PT09dGhp'@;
put 'cy5sZW5ndGh9LFIucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbih6KXtyZXR1cm4gdGhpcy5vZmZzZXQrMTw9dGhpcy5sZW5ndGg/dGhpcy5iYXNlLnJlYWRVSW50OCh0aGlzLm9mZnNldCsrLCEwKTp0aGlzLmVycm9yKHp8fCJEZWNvZGVyQnVmZmVyIG92ZXJydW4iKX0sUi5wcm90b3R5'@;
put 'cGUuc2tpcD1mdW5jdGlvbih6LGope2lmKCEodGhpcy5vZmZzZXQrejw9dGhpcy5sZW5ndGgpKXJldHVybiB0aGlzLmVycm9yKGp8fCJEZWNvZGVyQnVmZmVyIG92ZXJydW4iKTtjb25zdCBWPW5ldyBSKHRoaXMuYmFzZSk7cmV0dXJuIFYuX3JlcG9ydGVyU3RhdGU9dGhpcy5fcmVwb3J0ZXJT'@;
put 'dGF0ZSxWLm9mZnNldD10aGlzLm9mZnNldCxWLmxlbmd0aD10aGlzLm9mZnNldCt6LHRoaXMub2Zmc2V0Kz16LFZ9LFIucHJvdG90eXBlLnJhdz1mdW5jdGlvbih6KXtyZXR1cm4gdGhpcy5iYXNlLnNsaWNlKHo/ei5vZmZzZXQ6dGhpcy5vZmZzZXQsdGhpcy5sZW5ndGgpfSxCLlI9RSxFLmlz'@;
put 'RW5jb2RlckJ1ZmZlcj1mdW5jdGlvbih6KXtyZXR1cm4geiBpbnN0YW5jZW9mIEV8fCJvYmplY3QiPT10eXBlb2YgeiYmIkVuY29kZXJCdWZmZXIiPT09ei5jb25zdHJ1Y3Rvci5uYW1lJiYibnVtYmVyIj09dHlwZW9mIHoubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2Ygei5qb2lufSxFLnBy'@;
put 'b3RvdHlwZS5qb2luPWZ1bmN0aW9uKHosail7cmV0dXJuIHp8fCh6PUkuYWxsb2ModGhpcy5sZW5ndGgpKSxqfHwoaj0wKSwwPT09dGhpcy5sZW5ndGh8fChBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpP3RoaXMudmFsdWUuZm9yRWFjaChmdW5jdGlvbihWKXtWLmpvaW4oeixqKSxqKz1WLmxl'@;
put 'bmd0aH0pOigibnVtYmVyIj09dHlwZW9mIHRoaXMudmFsdWU/eltqXT10aGlzLnZhbHVlOiJzdHJpbmciPT10eXBlb2YgdGhpcy52YWx1ZT96LndyaXRlKHRoaXMudmFsdWUsaik6SS5pc0J1ZmZlcih0aGlzLnZhbHVlKSYmdGhpcy52YWx1ZS5jb3B5KHosaiksais9dGhpcy5sZW5ndGgpKSx6'@;
put 'fX0sMTk3OTooSCxCLEwpPT57InVzZSBzdHJpY3QiO2NvbnN0IEs9QjtLLlJlcG9ydGVyPUwoODQ2NSkuYixLLkRlY29kZXJCdWZmZXI9TCg2NjI1KS5DLEsuRW5jb2RlckJ1ZmZlcj1MKDY2MjUpLlIsSy5Ob2RlPUwoMTk0OSl9LDE5NDk6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBL'@;
put 'PUwoODQ2NSkuYixKPUwoNjYyNSkuUixJPUwoNjYyNSkuQyxSPUwoOTc0NiksRT1bInNlcSIsInNlcW9mIiwic2V0Iiwic2V0b2YiLCJvYmppZCIsImJvb2wiLCJnZW50aW1lIiwidXRjdGltZSIsIm51bGxfIiwiZW51bSIsImludCIsIm9iakRlc2MiLCJiaXRzdHIiLCJibXBzdHIiLCJjaGFy'@;
put 'c3RyIiwiZ2Vuc3RyIiwiZ3JhcGhzdHIiLCJpYTVzdHIiLCJpc282NDZzdHIiLCJudW1zdHIiLCJvY3RzdHIiLCJwcmludHN0ciIsInQ2MXN0ciIsInVuaXN0ciIsInV0ZjhzdHIiLCJ2aWRlb3N0ciJdLHo9WyJrZXkiLCJvYmoiLCJ1c2UiLCJvcHRpb25hbCIsImV4cGxpY2l0IiwiaW1wbGlj'@;
put 'aXQiLCJkZWYiLCJjaG9pY2UiLCJhbnkiLCJjb250YWlucyJdLmNvbmNhdChFKTtmdW5jdGlvbiBqKEcsVyxVKXtjb25zdCBxPXt9O3RoaXMuX2Jhc2VTdGF0ZT1xLHEubmFtZT1VLHEuZW5jPUcscS5wYXJlbnQ9V3x8bnVsbCxxLmNoaWxkcmVuPW51bGwscS50YWc9bnVsbCxxLmFyZ3M9bnVs'@;
put 'bCxxLnJldmVyc2VBcmdzPW51bGwscS5jaG9pY2U9bnVsbCxxLm9wdGlvbmFsPSExLHEuYW55PSExLHEub2JqPSExLHEudXNlPW51bGwscS51c2VEZWNvZGVyPW51bGwscS5rZXk9bnVsbCxxLmRlZmF1bHQ9bnVsbCxxLmV4cGxpY2l0PW51bGwscS5pbXBsaWNpdD1udWxsLHEuY29udGFpbnM9'@;
put 'bnVsbCxxLnBhcmVudHx8KHEuY2hpbGRyZW49W10sdGhpcy5fd3JhcCgpKX1ILmV4cG9ydHM9ajtjb25zdCBWPVsiZW5jIiwicGFyZW50IiwiY2hpbGRyZW4iLCJ0YWciLCJhcmdzIiwicmV2ZXJzZUFyZ3MiLCJjaG9pY2UiLCJvcHRpb25hbCIsImFueSIsIm9iaiIsInVzZSIsImFsdGVyZWRV'@;
put 'c2UiLCJrZXkiLCJkZWZhdWx0IiwiZXhwbGljaXQiLCJpbXBsaWNpdCIsImNvbnRhaW5zIl07ai5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtjb25zdCBHPXRoaXMuX2Jhc2VTdGF0ZSxXPXt9O1YuZm9yRWFjaChmdW5jdGlvbihxKXtXW3FdPUdbcV19KTtjb25zdCBVPW5ldyB0aGlzLmNv'@;
put 'bnN0cnVjdG9yKFcucGFyZW50KTtyZXR1cm4gVS5fYmFzZVN0YXRlPVcsVX0sai5wcm90b3R5cGUuX3dyYXA9ZnVuY3Rpb24oKXtjb25zdCBHPXRoaXMuX2Jhc2VTdGF0ZTt6LmZvckVhY2goZnVuY3Rpb24oVyl7dGhpc1tXXT1mdW5jdGlvbigpe2NvbnN0IFU9bmV3IHRoaXMuY29uc3RydWN0'@;
put 'b3IodGhpcyk7cmV0dXJuIEcuY2hpbGRyZW4ucHVzaChVKSxVW1ddLmFwcGx5KFUsYXJndW1lbnRzKX19LHRoaXMpfSxqLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihHKXtjb25zdCBXPXRoaXMuX2Jhc2VTdGF0ZTtSKG51bGw9PT1XLnBhcmVudCksRy5jYWxsKHRoaXMpLFcuY2hpbGRyZW49'@;
put 'Vy5jaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24oVSl7cmV0dXJuIFUuX2Jhc2VTdGF0ZS5wYXJlbnQ9PT10aGlzfSx0aGlzKSxSLmVxdWFsKFcuY2hpbGRyZW4ubGVuZ3RoLDEsIlJvb3Qgbm9kZSBjYW4gaGF2ZSBvbmx5IG9uZSBjaGlsZCIpfSxqLnByb3RvdHlwZS5fdXNlQXJncz1mdW5jdGlv'@;
put 'bihHKXtjb25zdCBXPXRoaXMuX2Jhc2VTdGF0ZSxVPUcuZmlsdGVyKGZ1bmN0aW9uKHEpe3JldHVybiBxIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcn0sdGhpcyk7Rz1HLmZpbHRlcihmdW5jdGlvbihxKXtyZXR1cm4hKHEgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKX0sdGhpcyks'@;
put 'MCE9PVUubGVuZ3RoJiYoUihudWxsPT09Vy5jaGlsZHJlbiksVy5jaGlsZHJlbj1VLFUuZm9yRWFjaChmdW5jdGlvbihxKXtxLl9iYXNlU3RhdGUucGFyZW50PXRoaXN9LHRoaXMpKSwwIT09Ry5sZW5ndGgmJihSKG51bGw9PT1XLmFyZ3MpLFcuYXJncz1HLFcucmV2ZXJzZUFyZ3M9Ry5tYXAo'@;
put 'ZnVuY3Rpb24ocSl7aWYoIm9iamVjdCIhPXR5cGVvZiBxfHxxLmNvbnN0cnVjdG9yIT09T2JqZWN0KXJldHVybiBxO2NvbnN0IHRlPXt9O3JldHVybiBPYmplY3Qua2V5cyhxKS5mb3JFYWNoKGZ1bmN0aW9uKG5lKXtuZT09KDB8bmUpJiYobmV8PTApLHRlW3FbbmVdXT1uZX0pLHRlfSkpfSxb'@;
put 'Il9wZWVrVGFnIiwiX2RlY29kZVRhZyIsIl91c2UiLCJfZGVjb2RlU3RyIiwiX2RlY29kZU9iamlkIiwiX2RlY29kZVRpbWUiLCJfZGVjb2RlTnVsbCIsIl9kZWNvZGVJbnQiLCJfZGVjb2RlQm9vbCIsIl9kZWNvZGVMaXN0IiwiX2VuY29kZUNvbXBvc2l0ZSIsIl9lbmNvZGVTdHIiLCJfZW5j'@;
put 'b2RlT2JqaWQiLCJfZW5jb2RlVGltZSIsIl9lbmNvZGVOdWxsIiwiX2VuY29kZUludCIsIl9lbmNvZGVCb29sIl0uZm9yRWFjaChmdW5jdGlvbihHKXtqLnByb3RvdHlwZVtHXT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihHKyIgbm90IGltcGxlbWVudGVkIGZvciBlbmNvZGluZzogIit0'@;
put 'aGlzLl9iYXNlU3RhdGUuZW5jKX19KSxFLmZvckVhY2goZnVuY3Rpb24oRyl7ai5wcm90b3R5cGVbR109ZnVuY3Rpb24oKXtjb25zdCBXPXRoaXMuX2Jhc2VTdGF0ZSxVPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIFIobnVsbD09PVcudGFnKSxXLnRhZz1H'@;
put 'LHRoaXMuX3VzZUFyZ3MoVSksdGhpc319KSxqLnByb3RvdHlwZS51c2U9ZnVuY3Rpb24oRyl7UihHKTtjb25zdCBXPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gUihudWxsPT09Vy51c2UpLFcudXNlPUcsdGhpc30sai5wcm90b3R5cGUub3B0aW9uYWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5f'@;
put 'YmFzZVN0YXRlLm9wdGlvbmFsPSEwLHRoaXN9LGoucHJvdG90eXBlLmRlZj1mdW5jdGlvbihHKXtjb25zdCBXPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gUihudWxsPT09Vy5kZWZhdWx0KSxXLmRlZmF1bHQ9RyxXLm9wdGlvbmFsPSEwLHRoaXN9LGoucHJvdG90eXBlLmV4cGxpY2l0PWZ1bmN0'@;
put 'aW9uKEcpe2NvbnN0IFc9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBSKG51bGw9PT1XLmV4cGxpY2l0JiZudWxsPT09Vy5pbXBsaWNpdCksVy5leHBsaWNpdD1HLHRoaXN9LGoucHJvdG90eXBlLmltcGxpY2l0PWZ1bmN0aW9uKEcpe2NvbnN0IFc9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBSKG51'@;
put 'bGw9PT1XLmV4cGxpY2l0JiZudWxsPT09Vy5pbXBsaWNpdCksVy5pbXBsaWNpdD1HLHRoaXN9LGoucHJvdG90eXBlLm9iaj1mdW5jdGlvbigpe2NvbnN0IEc9dGhpcy5fYmFzZVN0YXRlLFc9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gRy5vYmo9ITAsMCE9'@;
put 'PVcubGVuZ3RoJiZ0aGlzLl91c2VBcmdzKFcpLHRoaXN9LGoucHJvdG90eXBlLmtleT1mdW5jdGlvbihHKXtjb25zdCBXPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gUihudWxsPT09Vy5rZXkpLFcua2V5PUcsdGhpc30sai5wcm90b3R5cGUuYW55PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Jh'@;
put 'c2VTdGF0ZS5hbnk9ITAsdGhpc30sai5wcm90b3R5cGUuY2hvaWNlPWZ1bmN0aW9uKEcpe2NvbnN0IFc9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBSKG51bGw9PT1XLmNob2ljZSksVy5jaG9pY2U9Ryx0aGlzLl91c2VBcmdzKE9iamVjdC5rZXlzKEcpLm1hcChmdW5jdGlvbihVKXtyZXR1cm4g'@;
put 'R1tVXX0pKSx0aGlzfSxqLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbihHKXtjb25zdCBXPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gUihudWxsPT09Vy51c2UpLFcuY29udGFpbnM9Ryx0aGlzfSxqLnByb3RvdHlwZS5fZGVjb2RlPWZ1bmN0aW9uKEcsVyl7Y29uc3QgVT10aGlzLl9iYXNl'@;
put 'U3RhdGU7aWYobnVsbD09PVUucGFyZW50KXJldHVybiBHLndyYXBSZXN1bHQoVS5jaGlsZHJlblswXS5fZGVjb2RlKEcsVykpO2xldCBxLHRlPVUuZGVmYXVsdCxuZT0hMCxpZT1udWxsO2lmKG51bGwhPT1VLmtleSYmKGllPUcuZW50ZXJLZXkoVS5rZXkpKSxVLm9wdGlvbmFsKXtsZXQgbGU9'@;
put 'bnVsbDtpZihudWxsIT09VS5leHBsaWNpdD9sZT1VLmV4cGxpY2l0Om51bGwhPT1VLmltcGxpY2l0P2xlPVUuaW1wbGljaXQ6bnVsbCE9PVUudGFnJiYobGU9VS50YWcpLG51bGwhPT1sZXx8VS5hbnkpe2lmKG5lPXRoaXMuX3BlZWtUYWcoRyxsZSxVLmFueSksRy5pc0Vycm9yKG5lKSlyZXR1'@;
put 'cm4gbmV9ZWxzZXtjb25zdCBkZT1HLnNhdmUoKTt0cnl7bnVsbD09PVUuY2hvaWNlP3RoaXMuX2RlY29kZUdlbmVyaWMoVS50YWcsRyxXKTp0aGlzLl9kZWNvZGVDaG9pY2UoRyxXKSxuZT0hMH1jYXRjaHtuZT0hMX1HLnJlc3RvcmUoZGUpfX1pZihVLm9iaiYmbmUmJihxPUcuZW50ZXJPYmpl'@;
put 'Y3QoKSksbmUpe2lmKG51bGwhPT1VLmV4cGxpY2l0KXtjb25zdCBkZT10aGlzLl9kZWNvZGVUYWcoRyxVLmV4cGxpY2l0KTtpZihHLmlzRXJyb3IoZGUpKXJldHVybiBkZTtHPWRlfWNvbnN0IGxlPUcub2Zmc2V0O2lmKG51bGw9PT1VLnVzZSYmbnVsbD09PVUuY2hvaWNlKXtsZXQgZGU7VS5h'@;
put 'bnkmJihkZT1HLnNhdmUoKSk7Y29uc3QgdWU9dGhpcy5fZGVjb2RlVGFnKEcsbnVsbCE9PVUuaW1wbGljaXQ/VS5pbXBsaWNpdDpVLnRhZyxVLmFueSk7aWYoRy5pc0Vycm9yKHVlKSlyZXR1cm4gdWU7VS5hbnk/dGU9Ry5yYXcoZGUpOkc9dWV9aWYoVyYmVy50cmFjayYmbnVsbCE9PVUudGFn'@;
put 'JiZXLnRyYWNrKEcucGF0aCgpLGxlLEcubGVuZ3RoLCJ0YWdnZWQiKSxXJiZXLnRyYWNrJiZudWxsIT09VS50YWcmJlcudHJhY2soRy5wYXRoKCksRy5vZmZzZXQsRy5sZW5ndGgsImNvbnRlbnQiKSxVLmFueXx8KHRlPW51bGw9PT1VLmNob2ljZT90aGlzLl9kZWNvZGVHZW5lcmljKFUudGFn'@;
put 'LEcsVyk6dGhpcy5fZGVjb2RlQ2hvaWNlKEcsVykpLEcuaXNFcnJvcih0ZSkpcmV0dXJuIHRlO2lmKFUuYW55fHxudWxsIT09VS5jaG9pY2V8fG51bGw9PT1VLmNoaWxkcmVufHxVLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oZGUpe2RlLl9kZWNvZGUoRyxXKX0pLFUuY29udGFpbnMmJigi'@;
put 'b2N0c3RyIj09PVUudGFnfHwiYml0c3RyIj09PVUudGFnKSl7Y29uc3QgZGU9bmV3IEkodGUpO3RlPXRoaXMuX2dldFVzZShVLmNvbnRhaW5zLEcuX3JlcG9ydGVyU3RhdGUub2JqKS5fZGVjb2RlKGRlLFcpfX1yZXR1cm4gVS5vYmomJm5lJiYodGU9Ry5sZWF2ZU9iamVjdChxKSksbnVsbD09'@;
put 'PVUua2V5fHxudWxsPT09dGUmJiEwIT09bmU/bnVsbCE9PWllJiZHLmV4aXRLZXkoaWUpOkcubGVhdmVLZXkoaWUsVS5rZXksdGUpLHRlfSxqLnByb3RvdHlwZS5fZGVjb2RlR2VuZXJpYz1mdW5jdGlvbihHLFcsVSl7Y29uc3QgcT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuInNlcSI9PT1HfHwi'@;
put 'c2V0Ij09PUc/bnVsbDoic2Vxb2YiPT09R3x8InNldG9mIj09PUc/dGhpcy5fZGVjb2RlTGlzdChXLEcscS5hcmdzWzBdLFUpOi9zdHIkLy50ZXN0KEcpP3RoaXMuX2RlY29kZVN0cihXLEcsVSk6Im9iamlkIj09PUcmJnEuYXJncz90aGlzLl9kZWNvZGVPYmppZChXLHEuYXJnc1swXSxxLmFy'@;
put 'Z3NbMV0sVSk6Im9iamlkIj09PUc/dGhpcy5fZGVjb2RlT2JqaWQoVyxudWxsLG51bGwsVSk6ImdlbnRpbWUiPT09R3x8InV0Y3RpbWUiPT09Rz90aGlzLl9kZWNvZGVUaW1lKFcsRyxVKToibnVsbF8iPT09Rz90aGlzLl9kZWNvZGVOdWxsKFcsVSk6ImJvb2wiPT09Rz90aGlzLl9kZWNvZGVC'@;
put 'b29sKFcsVSk6Im9iakRlc2MiPT09Rz90aGlzLl9kZWNvZGVTdHIoVyxHLFUpOiJpbnQiPT09R3x8ImVudW0iPT09Rz90aGlzLl9kZWNvZGVJbnQoVyxxLmFyZ3MmJnEuYXJnc1swXSxVKTpudWxsIT09cS51c2U/dGhpcy5fZ2V0VXNlKHEudXNlLFcuX3JlcG9ydGVyU3RhdGUub2JqKS5fZGVj'@;
put 'b2RlKFcsVSk6Vy5lcnJvcigidW5rbm93biB0YWc6ICIrRyl9LGoucHJvdG90eXBlLl9nZXRVc2U9ZnVuY3Rpb24oRyxXKXtjb25zdCBVPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gVS51c2VEZWNvZGVyPXRoaXMuX3VzZShHLFcpLFIobnVsbD09PVUudXNlRGVjb2Rlci5fYmFzZVN0YXRlLnBh'@;
put 'cmVudCksVS51c2VEZWNvZGVyPVUudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmNoaWxkcmVuWzBdLFUuaW1wbGljaXQhPT1VLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5pbXBsaWNpdCYmKFUudXNlRGVjb2Rlcj1VLnVzZURlY29kZXIuY2xvbmUoKSxVLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5pbXBs'@;
put 'aWNpdD1VLmltcGxpY2l0KSxVLnVzZURlY29kZXJ9LGoucHJvdG90eXBlLl9kZWNvZGVDaG9pY2U9ZnVuY3Rpb24oRyxXKXtjb25zdCBVPXRoaXMuX2Jhc2VTdGF0ZTtsZXQgcT1udWxsLHRlPSExO3JldHVybiBPYmplY3Qua2V5cyhVLmNob2ljZSkuc29tZShmdW5jdGlvbihuZSl7Y29uc3Qg'@;
put 'aWU9Ry5zYXZlKCksbGU9VS5jaG9pY2VbbmVdO3RyeXtjb25zdCBkZT1sZS5fZGVjb2RlKEcsVyk7aWYoRy5pc0Vycm9yKGRlKSlyZXR1cm4hMTtxPXt0eXBlOm5lLHZhbHVlOmRlfSx0ZT0hMH1jYXRjaHtyZXR1cm4gRy5yZXN0b3JlKGllKSwhMX1yZXR1cm4hMH0sdGhpcyksdGU/cTpHLmVy'@;
put 'cm9yKCJDaG9pY2Ugbm90IG1hdGNoZWQiKX0sai5wcm90b3R5cGUuX2NyZWF0ZUVuY29kZXJCdWZmZXI9ZnVuY3Rpb24oRyl7cmV0dXJuIG5ldyBKKEcsdGhpcy5yZXBvcnRlcil9LGoucHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24oRyxXLFUpe2NvbnN0IHE9dGhpcy5fYmFzZVN0YXRlO2lm'@;
put 'KG51bGwhPT1xLmRlZmF1bHQmJnEuZGVmYXVsdD09PUcpcmV0dXJuO2NvbnN0IHRlPXRoaXMuX2VuY29kZVZhbHVlKEcsVyxVKTtyZXR1cm4gdm9pZCAwPT09dGV8fHRoaXMuX3NraXBEZWZhdWx0KHRlLFcsVSk/dm9pZCAwOnRlfSxqLnByb3RvdHlwZS5fZW5jb2RlVmFsdWU9ZnVuY3Rpb24o'@;
put 'RyxXLFUpe2NvbnN0IHE9dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1xLnBhcmVudClyZXR1cm4gcS5jaGlsZHJlblswXS5fZW5jb2RlKEcsV3x8bmV3IEspO2xldCB0ZT1udWxsO2lmKHRoaXMucmVwb3J0ZXI9VyxxLm9wdGlvbmFsJiZ2b2lkIDA9PT1HKXtpZihudWxsPT09cS5kZWZhdWx0'@;
put 'KXJldHVybjtHPXEuZGVmYXVsdH1sZXQgbmU9bnVsbCxpZT0hMTtpZihxLmFueSl0ZT10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEcpO2Vsc2UgaWYocS5jaG9pY2UpdGU9dGhpcy5fZW5jb2RlQ2hvaWNlKEcsVyk7ZWxzZSBpZihxLmNvbnRhaW5zKW5lPXRoaXMuX2dldFVzZShxLmNvbnRh'@;
put 'aW5zLFUpLl9lbmNvZGUoRyxXKSxpZT0hMDtlbHNlIGlmKHEuY2hpbGRyZW4pbmU9cS5jaGlsZHJlbi5tYXAoZnVuY3Rpb24obGUpe2lmKCJudWxsXyI9PT1sZS5fYmFzZVN0YXRlLnRhZylyZXR1cm4gbGUuX2VuY29kZShudWxsLFcsRyk7aWYobnVsbD09PWxlLl9iYXNlU3RhdGUua2V5KXJl'@;
put 'dHVybiBXLmVycm9yKCJDaGlsZCBzaG91bGQgaGF2ZSBhIGtleSIpO2NvbnN0IGRlPVcuZW50ZXJLZXkobGUuX2Jhc2VTdGF0ZS5rZXkpO2lmKCJvYmplY3QiIT10eXBlb2YgRylyZXR1cm4gVy5lcnJvcigiQ2hpbGQgZXhwZWN0ZWQsIGJ1dCBpbnB1dCBpcyBub3Qgb2JqZWN0Iik7Y29uc3Qg'@;
put 'dWU9bGUuX2VuY29kZShHW2xlLl9iYXNlU3RhdGUua2V5XSxXLEcpO3JldHVybiBXLmxlYXZlS2V5KGRlKSx1ZX0sdGhpcykuZmlsdGVyKGZ1bmN0aW9uKGxlKXtyZXR1cm4gbGV9KSxuZT10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKG5lKTtlbHNlIGlmKCJzZXFvZiI9PT1xLnRhZ3x8InNl'@;
put 'dG9mIj09PXEudGFnKXtpZighcS5hcmdzfHwxIT09cS5hcmdzLmxlbmd0aClyZXR1cm4gVy5lcnJvcigiVG9vIG1hbnkgYXJncyBmb3IgOiAiK3EudGFnKTtpZighQXJyYXkuaXNBcnJheShHKSlyZXR1cm4gVy5lcnJvcigic2Vxb2Yvc2V0b2YsIGJ1dCBkYXRhIGlzIG5vdCBBcnJheSIpO2Nv'@;
put 'bnN0IGxlPXRoaXMuY2xvbmUoKTtsZS5fYmFzZVN0YXRlLmltcGxpY2l0PW51bGwsbmU9dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihHLm1hcChmdW5jdGlvbihkZSl7cmV0dXJuIHRoaXMuX2dldFVzZSh0aGlzLl9iYXNlU3RhdGUuYXJnc1swXSxHKS5fZW5jb2RlKGRlLFcpfSxsZSkpfWVs'@;
put 'c2UgbnVsbCE9PXEudXNlP3RlPXRoaXMuX2dldFVzZShxLnVzZSxVKS5fZW5jb2RlKEcsVyk6KG5lPXRoaXMuX2VuY29kZVByaW1pdGl2ZShxLnRhZyxHKSxpZT0hMCk7aWYoIXEuYW55JiZudWxsPT09cS5jaG9pY2Upe2NvbnN0IGxlPW51bGwhPT1xLmltcGxpY2l0P3EuaW1wbGljaXQ6cS50'@;
put 'YWcsZGU9bnVsbD09PXEuaW1wbGljaXQ/InVuaXZlcnNhbCI6ImNvbnRleHQiO251bGw9PT1sZT9udWxsPT09cS51c2UmJlcuZXJyb3IoIlRhZyBjb3VsZCBiZSBvbWl0dGVkIG9ubHkgZm9yIC51c2UoKSIpOm51bGw9PT1xLnVzZSYmKHRlPXRoaXMuX2VuY29kZUNvbXBvc2l0ZShsZSxpZSxk'@;
put 'ZSxuZSkpfXJldHVybiBudWxsIT09cS5leHBsaWNpdCYmKHRlPXRoaXMuX2VuY29kZUNvbXBvc2l0ZShxLmV4cGxpY2l0LCExLCJjb250ZXh0Iix0ZSkpLHRlfSxqLnByb3RvdHlwZS5fZW5jb2RlQ2hvaWNlPWZ1bmN0aW9uKEcsVyl7Y29uc3QgVT10aGlzLl9iYXNlU3RhdGUscT1VLmNob2lj'@;
put 'ZVtHLnR5cGVdO3JldHVybiBxfHxSKCExLEcudHlwZSsiIG5vdCBmb3VuZCBpbiAiK0pTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKFUuY2hvaWNlKSkpLHEuX2VuY29kZShHLnZhbHVlLFcpfSxqLnByb3RvdHlwZS5fZW5jb2RlUHJpbWl0aXZlPWZ1bmN0aW9uKEcsVyl7Y29uc3QgVT10aGlz'@;
put 'Ll9iYXNlU3RhdGU7aWYoL3N0ciQvLnRlc3QoRykpcmV0dXJuIHRoaXMuX2VuY29kZVN0cihXLEcpO2lmKCJvYmppZCI9PT1HJiZVLmFyZ3MpcmV0dXJuIHRoaXMuX2VuY29kZU9iamlkKFcsVS5yZXZlcnNlQXJnc1swXSxVLmFyZ3NbMV0pO2lmKCJvYmppZCI9PT1HKXJldHVybiB0aGlzLl9l'@;
put 'bmNvZGVPYmppZChXLG51bGwsbnVsbCk7aWYoImdlbnRpbWUiPT09R3x8InV0Y3RpbWUiPT09RylyZXR1cm4gdGhpcy5fZW5jb2RlVGltZShXLEcpO2lmKCJudWxsXyI9PT1HKXJldHVybiB0aGlzLl9lbmNvZGVOdWxsKCk7aWYoImludCI9PT1HfHwiZW51bSI9PT1HKXJldHVybiB0aGlzLl9l'@;
put 'bmNvZGVJbnQoVyxVLmFyZ3MmJlUucmV2ZXJzZUFyZ3NbMF0pO2lmKCJib29sIj09PUcpcmV0dXJuIHRoaXMuX2VuY29kZUJvb2woVyk7aWYoIm9iakRlc2MiPT09RylyZXR1cm4gdGhpcy5fZW5jb2RlU3RyKFcsRyk7dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCB0YWc6ICIrRyl9LGou'@;
put 'cHJvdG90eXBlLl9pc051bXN0cj1mdW5jdGlvbihHKXtyZXR1cm4vXlswLTkgXSokLy50ZXN0KEcpfSxqLnByb3RvdHlwZS5faXNQcmludHN0cj1mdW5jdGlvbihHKXtyZXR1cm4vXltBLVphLXowLTkgJygpKywtLi86PT9dKiQvLnRlc3QoRyl9fSw4NDY1OihILEIsTCk9PnsidXNlIHN0cmlj'@;
put 'dCI7Y29uc3QgSz1MKDU3MTcpO2Z1bmN0aW9uIEooUil7dGhpcy5fcmVwb3J0ZXJTdGF0ZT17b2JqOm51bGwscGF0aDpbXSxvcHRpb25zOlJ8fHt9LGVycm9yczpbXX19ZnVuY3Rpb24gSShSLEUpe3RoaXMucGF0aD1SLHRoaXMucmV0aHJvdyhFKX1CLmI9SixKLnByb3RvdHlwZS5pc0Vycm9y'@;
put 'PWZ1bmN0aW9uKFIpe3JldHVybiBSIGluc3RhbmNlb2YgSX0sSi5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbigpe2NvbnN0IFI9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtyZXR1cm57b2JqOlIub2JqLHBhdGhMZW46Ui5wYXRoLmxlbmd0aH19LEoucHJvdG90eXBlLnJlc3RvcmU9ZnVuY3Rpb24oUil7'@;
put 'Y29uc3QgRT10aGlzLl9yZXBvcnRlclN0YXRlO0Uub2JqPVIub2JqLEUucGF0aD1FLnBhdGguc2xpY2UoMCxSLnBhdGhMZW4pfSxKLnByb3RvdHlwZS5lbnRlcktleT1mdW5jdGlvbihSKXtyZXR1cm4gdGhpcy5fcmVwb3J0ZXJTdGF0ZS5wYXRoLnB1c2goUil9LEoucHJvdG90eXBlLmV4aXRL'@;
put 'ZXk9ZnVuY3Rpb24oUil7Y29uc3QgRT10aGlzLl9yZXBvcnRlclN0YXRlO0UucGF0aD1FLnBhdGguc2xpY2UoMCxSLTEpfSxKLnByb3RvdHlwZS5sZWF2ZUtleT1mdW5jdGlvbihSLEUseil7Y29uc3Qgaj10aGlzLl9yZXBvcnRlclN0YXRlO3RoaXMuZXhpdEtleShSKSxudWxsIT09ai5vYmom'@;
put 'JihqLm9ialtFXT16KX0sSi5wcm90b3R5cGUucGF0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXBvcnRlclN0YXRlLnBhdGguam9pbigiLyIpfSxKLnByb3RvdHlwZS5lbnRlck9iamVjdD1mdW5jdGlvbigpe2NvbnN0IFI9dGhpcy5fcmVwb3J0ZXJTdGF0ZSxFPVIub2JqO3JldHVybiBS'@;
put 'Lm9iaj17fSxFfSxKLnByb3RvdHlwZS5sZWF2ZU9iamVjdD1mdW5jdGlvbihSKXtjb25zdCBFPXRoaXMuX3JlcG9ydGVyU3RhdGUsej1FLm9iajtyZXR1cm4gRS5vYmo9Uix6fSxKLnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbihSKXtsZXQgRTtjb25zdCB6PXRoaXMuX3JlcG9ydGVyU3RhdGUs'@;
put 'aj1SIGluc3RhbmNlb2YgSTtpZihFPWo/UjpuZXcgSSh6LnBhdGgubWFwKGZ1bmN0aW9uKFYpe3JldHVybiJbIitKU09OLnN0cmluZ2lmeShWKSsiXSJ9KS5qb2luKCIiKSxSLm1lc3NhZ2V8fFIsUi5zdGFjayksIXoub3B0aW9ucy5wYXJ0aWFsKXRocm93IEU7cmV0dXJuIGp8fHouZXJyb3Jz'@;
put 'LnB1c2goRSksRX0sSi5wcm90b3R5cGUud3JhcFJlc3VsdD1mdW5jdGlvbihSKXtjb25zdCBFPXRoaXMuX3JlcG9ydGVyU3RhdGU7cmV0dXJuIEUub3B0aW9ucy5wYXJ0aWFsP3tyZXN1bHQ6dGhpcy5pc0Vycm9yKFIpP251bGw6UixlcnJvcnM6RS5lcnJvcnN9OlJ9LEsoSSxFcnJvciksSS5w'@;
put 'cm90b3R5cGUucmV0aHJvdz1mdW5jdGlvbihSKXtpZih0aGlzLm1lc3NhZ2U9UisiIGF0OiAiKyh0aGlzLnBhdGh8fCIoc2hhbGxvdykiKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSYmRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyxJKSwhdGhpcy5zdGFjayl0cnl7dGhyb3cgbmV3IEVy'@;
put 'cm9yKHRoaXMubWVzc2FnZSl9Y2F0Y2goRSl7dGhpcy5zdGFjaz1FLnN0YWNrfXJldHVybiB0aGlzfX0sMTYwOihILEIpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEwoSyl7Y29uc3QgSj17fTtyZXR1cm4gT2JqZWN0LmtleXMoSykuZm9yRWFjaChmdW5jdGlvbihJKXsoMHxJKT09SSYmKEl8'@;
put 'PTApLEpbS1tJXV09SX0pLEp9Qi50YWdDbGFzcz17MDoidW5pdmVyc2FsIiwxOiJhcHBsaWNhdGlvbiIsMjoiY29udGV4dCIsMzoicHJpdmF0ZSJ9LEIudGFnQ2xhc3NCeU5hbWU9TChCLnRhZ0NsYXNzKSxCLnRhZz17MDoiZW5kIiwxOiJib29sIiwyOiJpbnQiLDM6ImJpdHN0ciIsNDoib2N0'@;
put 'c3RyIiw1OiJudWxsXyIsNjoib2JqaWQiLDc6Im9iakRlc2MiLDg6ImV4dGVybmFsIiw5OiJyZWFsIiwxMDoiZW51bSIsMTE6ImVtYmVkIiwxMjoidXRmOHN0ciIsMTM6InJlbGF0aXZlT2lkIiwxNjoic2VxIiwxNzoic2V0IiwxODoibnVtc3RyIiwxOToicHJpbnRzdHIiLDIwOiJ0NjFzdHIi'@;
put 'LDIxOiJ2aWRlb3N0ciIsMjI6ImlhNXN0ciIsMjM6InV0Y3RpbWUiLDI0OiJnZW50aW1lIiwyNToiZ3JhcGhzdHIiLDI2OiJpc282NDZzdHIiLDI3OiJnZW5zdHIiLDI4OiJ1bmlzdHIiLDI5OiJjaGFyc3RyIiwzMDoiYm1wc3RyIn0sQi50YWdCeU5hbWU9TChCLnRhZyl9LDY4MjY6KEgsQixM'@;
put 'KT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBLPUI7Sy5fcmV2ZXJzZT1mdW5jdGlvbihKKXtjb25zdCBJPXt9O3JldHVybiBPYmplY3Qua2V5cyhKKS5mb3JFYWNoKGZ1bmN0aW9uKFIpeygwfFIpPT1SJiYoUnw9MCksSVtKW1JdXT1SfSksSX0sSy5kZXI9TCgxNjApfSwxNjcxOihILEIsTCk9Pnsi'@;
put 'dXNlIHN0cmljdCI7Y29uc3QgSz1MKDU3MTcpLEo9TCg0NTkwKSxJPUwoNjYyNSkuQyxSPUwoMTk0OSksRT1MKDE2MCk7ZnVuY3Rpb24geihXKXt0aGlzLmVuYz0iZGVyIix0aGlzLm5hbWU9Vy5uYW1lLHRoaXMuZW50aXR5PVcsdGhpcy50cmVlPW5ldyBqLHRoaXMudHJlZS5faW5pdChXLmJv'@;
put 'ZHkpfWZ1bmN0aW9uIGooVyl7Ui5jYWxsKHRoaXMsImRlciIsVyl9ZnVuY3Rpb24gVihXLFUpe2xldCBxPVcucmVhZFVJbnQ4KFUpO2lmKFcuaXNFcnJvcihxKSlyZXR1cm4gcTtjb25zdCB0ZT1FLnRhZ0NsYXNzW3E+PjZdLG5lPTA9PSgzMiZxKTtpZigzMT09KDMxJnEpKXtsZXQgaWU9cTtm'@;
put 'b3IocT0wOzEyOD09KDEyOCZpZSk7KXtpZihpZT1XLnJlYWRVSW50OChVKSxXLmlzRXJyb3IoaWUpKXJldHVybiBpZTtxPDw9NyxxfD0xMjcmaWV9fWVsc2UgcSY9MzE7cmV0dXJue2Nsczp0ZSxwcmltaXRpdmU6bmUsdGFnOnEsdGFnU3RyOkUudGFnW3FdfX1mdW5jdGlvbiBHKFcsVSxxKXts'@;
put 'ZXQgdGU9Vy5yZWFkVUludDgocSk7aWYoVy5pc0Vycm9yKHRlKSlyZXR1cm4gdGU7aWYoIVUmJjEyOD09PXRlKXJldHVybiBudWxsO2lmKCEoMTI4JnRlKSlyZXR1cm4gdGU7Y29uc3QgbmU9MTI3JnRlO2lmKG5lPjQpcmV0dXJuIFcuZXJyb3IoImxlbmd0aCBvY3RlY3QgaXMgdG9vIGxvbmci'@;
put 'KTt0ZT0wO2ZvcihsZXQgaWU9MDtpZTxuZTtpZSsrKXt0ZTw8PTg7Y29uc3QgbGU9Vy5yZWFkVUludDgocSk7aWYoVy5pc0Vycm9yKGxlKSlyZXR1cm4gbGU7dGV8PWxlfXJldHVybiB0ZX1ILmV4cG9ydHM9eix6LnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24oVyxVKXtyZXR1cm4gSS5pc0Rl'@;
put 'Y29kZXJCdWZmZXIoVyl8fChXPW5ldyBJKFcsVSkpLHRoaXMudHJlZS5fZGVjb2RlKFcsVSl9LEsoaixSKSxqLnByb3RvdHlwZS5fcGVla1RhZz1mdW5jdGlvbihXLFUscSl7aWYoVy5pc0VtcHR5KCkpcmV0dXJuITE7Y29uc3QgdGU9Vy5zYXZlKCksbmU9VihXLCdGYWlsZWQgdG8gcGVlayB0'@;
put 'YWc6ICInK1UrJyInKTtyZXR1cm4gVy5pc0Vycm9yKG5lKT9uZTooVy5yZXN0b3JlKHRlKSxuZS50YWc9PT1VfHxuZS50YWdTdHI9PT1VfHxuZS50YWdTdHIrIm9mIj09PVV8fHEpfSxqLnByb3RvdHlwZS5fZGVjb2RlVGFnPWZ1bmN0aW9uKFcsVSxxKXtjb25zdCB0ZT1WKFcsJ0ZhaWxlZCB0'@;
put 'byBkZWNvZGUgdGFnIG9mICInK1UrJyInKTtpZihXLmlzRXJyb3IodGUpKXJldHVybiB0ZTtsZXQgbmU9RyhXLHRlLnByaW1pdGl2ZSwnRmFpbGVkIHRvIGdldCBsZW5ndGggb2YgIicrVSsnIicpO2lmKFcuaXNFcnJvcihuZSkpcmV0dXJuIG5lO2lmKCFxJiZ0ZS50YWchPT1VJiZ0ZS50YWdT'@;
put 'dHIhPT1VJiZ0ZS50YWdTdHIrIm9mIiE9PVUpcmV0dXJuIFcuZXJyb3IoJ0ZhaWxlZCB0byBtYXRjaCB0YWc6ICInK1UrJyInKTtpZih0ZS5wcmltaXRpdmV8fG51bGwhPT1uZSlyZXR1cm4gVy5za2lwKG5lLCdGYWlsZWQgdG8gbWF0Y2ggYm9keSBvZjogIicrVSsnIicpO2NvbnN0IGllPVcu'@;
put 'c2F2ZSgpLGxlPXRoaXMuX3NraXBVbnRpbEVuZChXLCdGYWlsZWQgdG8gc2tpcCBpbmRlZmluaXRlIGxlbmd0aCBib2R5OiAiJyt0aGlzLnRhZysnIicpO3JldHVybiBXLmlzRXJyb3IobGUpP2xlOihuZT1XLm9mZnNldC1pZS5vZmZzZXQsVy5yZXN0b3JlKGllKSxXLnNraXAobmUsJ0ZhaWxl'@;
put 'ZCB0byBtYXRjaCBib2R5IG9mOiAiJytVKyciJykpfSxqLnByb3RvdHlwZS5fc2tpcFVudGlsRW5kPWZ1bmN0aW9uKFcsVSl7Zm9yKDs7KXtjb25zdCBxPVYoVyxVKTtpZihXLmlzRXJyb3IocSkpcmV0dXJuIHE7Y29uc3QgdGU9RyhXLHEucHJpbWl0aXZlLFUpO2lmKFcuaXNFcnJvcih0ZSkp'@;
put 'cmV0dXJuIHRlO2xldCBuZTtpZihuZT1xLnByaW1pdGl2ZXx8bnVsbCE9PXRlP1cuc2tpcCh0ZSk6dGhpcy5fc2tpcFVudGlsRW5kKFcsVSksVy5pc0Vycm9yKG5lKSlyZXR1cm4gbmU7aWYoImVuZCI9PT1xLnRhZ1N0cilicmVha319LGoucHJvdG90eXBlLl9kZWNvZGVMaXN0PWZ1bmN0aW9u'@;
put 'KFcsVSxxLHRlKXtjb25zdCBuZT1bXTtmb3IoOyFXLmlzRW1wdHkoKTspe2NvbnN0IGllPXRoaXMuX3BlZWtUYWcoVywiZW5kIik7aWYoVy5pc0Vycm9yKGllKSlyZXR1cm4gaWU7Y29uc3QgbGU9cS5kZWNvZGUoVywiZGVyIix0ZSk7aWYoVy5pc0Vycm9yKGxlKSYmaWUpYnJlYWs7bmUucHVz'@;
put 'aChsZSl9cmV0dXJuIG5lfSxqLnByb3RvdHlwZS5fZGVjb2RlU3RyPWZ1bmN0aW9uKFcsVSl7aWYoImJpdHN0ciI9PT1VKXtjb25zdCBxPVcucmVhZFVJbnQ4KCk7cmV0dXJuIFcuaXNFcnJvcihxKT9xOnt1bnVzZWQ6cSxkYXRhOlcucmF3KCl9fWlmKCJibXBzdHIiPT09VSl7Y29uc3QgcT1X'@;
put 'LnJhdygpO2lmKHEubGVuZ3RoJTI9PTEpcmV0dXJuIFcuZXJyb3IoIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiBibXBzdHIgbGVuZ3RoIG1pc21hdGNoIik7bGV0IHRlPSIiO2ZvcihsZXQgbmU9MDtuZTxxLmxlbmd0aC8yO25lKyspdGUrPVN0cmluZy5mcm9tQ2hhckNvZGUocS5yZWFkVUlu'@;
put 'dDE2QkUoMipuZSkpO3JldHVybiB0ZX1pZigibnVtc3RyIj09PVUpe2NvbnN0IHE9Vy5yYXcoKS50b1N0cmluZygiYXNjaWkiKTtyZXR1cm4gdGhpcy5faXNOdW1zdHIocSk/cTpXLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogbnVtc3RyIHVuc3VwcG9ydGVkIGNoYXJhY3RlcnMi'@;
put 'KX1pZigib2N0c3RyIj09PVV8fCJvYmpEZXNjIj09PVUpcmV0dXJuIFcucmF3KCk7aWYoInByaW50c3RyIj09PVUpe2NvbnN0IHE9Vy5yYXcoKS50b1N0cmluZygiYXNjaWkiKTtyZXR1cm4gdGhpcy5faXNQcmludHN0cihxKT9xOlcuZXJyb3IoIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiBw'@;
put 'cmludHN0ciB1bnN1cHBvcnRlZCBjaGFyYWN0ZXJzIil9cmV0dXJuL3N0ciQvLnRlc3QoVSk/Vy5yYXcoKS50b1N0cmluZygpOlcuZXJyb3IoIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiAiK1UrIiB1bnN1cHBvcnRlZCIpfSxqLnByb3RvdHlwZS5fZGVjb2RlT2JqaWQ9ZnVuY3Rpb24oVyxV'@;
put 'LHEpe2xldCB0ZTtjb25zdCBuZT1bXTtsZXQgaWU9MCxsZT0wO2Zvcig7IVcuaXNFbXB0eSgpOylsZT1XLnJlYWRVSW50OCgpLGllPDw9NyxpZXw9MTI3JmxlLCEoMTI4JmxlKSYmKG5lLnB1c2goaWUpLGllPTApO2lmKDEyOCZsZSYmbmUucHVzaChpZSksdGU9cT9uZTpbbmVbMF0vNDB8MCxu'@;
put 'ZVswXSU0MF0uY29uY2F0KG5lLnNsaWNlKDEpKSxVKXtsZXQgY2U9VVt0ZS5qb2luKCIgIildO3ZvaWQgMD09PWNlJiYoY2U9VVt0ZS5qb2luKCIuIildKSx2b2lkIDAhPT1jZSYmKHRlPWNlKX1yZXR1cm4gdGV9LGoucHJvdG90eXBlLl9kZWNvZGVUaW1lPWZ1bmN0aW9uKFcsVSl7Y29uc3Qg'@;
put 'cT1XLnJhdygpLnRvU3RyaW5nKCk7bGV0IHRlLG5lLGllLGxlLGRlLHVlO2lmKCJnZW50aW1lIj09PVUpdGU9MHxxLnNsaWNlKDAsNCksbmU9MHxxLnNsaWNlKDQsNiksaWU9MHxxLnNsaWNlKDYsOCksbGU9MHxxLnNsaWNlKDgsMTApLGRlPTB8cS5zbGljZSgxMCwxMiksdWU9MHxxLnNsaWNl'@;
put 'KDEyLDE0KTtlbHNle2lmKCJ1dGN0aW1lIiE9PVUpcmV0dXJuIFcuZXJyb3IoIkRlY29kaW5nICIrVSsiIHRpbWUgaXMgbm90IHN1cHBvcnRlZCB5ZXQiKTt0ZT0wfHEuc2xpY2UoMCwyKSxuZT0wfHEuc2xpY2UoMiw0KSxpZT0wfHEuc2xpY2UoNCw2KSxsZT0wfHEuc2xpY2UoNiw4KSxkZT0w'@;
put 'fHEuc2xpY2UoOCwxMCksdWU9MHxxLnNsaWNlKDEwLDEyKSx0ZT10ZTw3MD8yZTMrdGU6MTkwMCt0ZX1yZXR1cm4gRGF0ZS5VVEModGUsbmUtMSxpZSxsZSxkZSx1ZSwwKX0sai5wcm90b3R5cGUuX2RlY29kZU51bGw9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sai5wcm90b3R5cGUuX2RlY29k'@;
put 'ZUJvb2w9ZnVuY3Rpb24oVyl7Y29uc3QgVT1XLnJlYWRVSW50OCgpO3JldHVybiBXLmlzRXJyb3IoVSk/VTowIT09VX0sai5wcm90b3R5cGUuX2RlY29kZUludD1mdW5jdGlvbihXLFUpe2NvbnN0IHE9Vy5yYXcoKTtsZXQgdGU9bmV3IEoocSk7cmV0dXJuIFUmJih0ZT1VW3RlLnRvU3RyaW5n'@;
put 'KDEwKV18fHRlKSx0ZX0sai5wcm90b3R5cGUuX3VzZT1mdW5jdGlvbihXLFUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBXJiYoVz1XKFUpKSxXLl9nZXREZWNvZGVyKCJkZXIiKS50cmVlfX0sODMwNzooSCxCLEwpPT57InVzZSBzdHJpY3QiO2NvbnN0IEs9QjtLLmRlcj1MKDE2NzEpLEsu'@;
put 'cGVtPUwoOTYzMSl9LDk2MzE6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBLPUwoNTcxNyksSj1MKDIzOTkpLkJ1ZmZlcixJPUwoMTY3MSk7ZnVuY3Rpb24gUihFKXtJLmNhbGwodGhpcyxFKSx0aGlzLmVuYz0icGVtIn1LKFIsSSksSC5leHBvcnRzPVIsUi5wcm90b3R5cGUuZGVjb2Rl'@;
put 'PWZ1bmN0aW9uKEUseil7Y29uc3Qgaj1FLnRvU3RyaW5nKCkuc3BsaXQoL1tcclxuXSsvZyksVj16LmxhYmVsLnRvVXBwZXJDYXNlKCksRz0vXi0tLS0tKEJFR0lOfEVORCkgKFteLV0rKS0tLS0tJC87bGV0IFc9LTEsVT0tMTtmb3IobGV0IG5lPTA7bmU8ai5sZW5ndGg7bmUrKyl7Y29uc3Qg'@;
put 'aWU9altuZV0ubWF0Y2goRyk7aWYobnVsbCE9PWllJiZpZVsyXT09PVYpe2lmKC0xIT09Vyl7aWYoIkVORCIhPT1pZVsxXSlicmVhaztVPW5lO2JyZWFrfWlmKCJCRUdJTiIhPT1pZVsxXSlicmVhaztXPW5lfX1pZigtMT09PVd8fC0xPT09VSl0aHJvdyBuZXcgRXJyb3IoIlBFTSBzZWN0aW9u'@;
put 'IG5vdCBmb3VuZCBmb3I6ICIrVik7Y29uc3QgcT1qLnNsaWNlKFcrMSxVKS5qb2luKCIiKTtxLnJlcGxhY2UoL1teYS16MC05Ky89XSsvZ2ksIiIpO2NvbnN0IHRlPUouZnJvbShxLCJiYXNlNjQiKTtyZXR1cm4gSS5wcm90b3R5cGUuZGVjb2RlLmNhbGwodGhpcyx0ZSx6KX19LDY5ODQ6KEgs'@;
put 'QixMKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBLPUwoNTcxNyksSj1MKDIzOTkpLkJ1ZmZlcixJPUwoMTk0OSksUj1MKDE2MCk7ZnVuY3Rpb24gRShWKXt0aGlzLmVuYz0iZGVyIix0aGlzLm5hbWU9Vi5uYW1lLHRoaXMuZW50aXR5PVYsdGhpcy50cmVlPW5ldyB6LHRoaXMudHJlZS5faW5pdChW'@;
put 'LmJvZHkpfWZ1bmN0aW9uIHooVil7SS5jYWxsKHRoaXMsImRlciIsVil9ZnVuY3Rpb24gaihWKXtyZXR1cm4gVjwxMD8iMCIrVjpWfUguZXhwb3J0cz1FLEUucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbihWLEcpe3JldHVybiB0aGlzLnRyZWUuX2VuY29kZShWLEcpLmpvaW4oKX0sSyh6LEkp'@;
put 'LHoucHJvdG90eXBlLl9lbmNvZGVDb21wb3NpdGU9ZnVuY3Rpb24oVixHLFcsVSl7Y29uc3QgcT1mdW5jdGlvbihpZSxsZSxkZSx1ZSl7bGV0IGNlO2lmKCJzZXFvZiI9PT1pZT9pZT0ic2VxIjoic2V0b2YiPT09aWUmJihpZT0ic2V0IiksUi50YWdCeU5hbWUuaGFzT3duUHJvcGVydHkoaWUp'@;
put 'KWNlPVIudGFnQnlOYW1lW2llXTtlbHNle2lmKCJudW1iZXIiIT10eXBlb2YgaWV8fCgwfGllKSE9PWllKXJldHVybiB1ZS5lcnJvcigiVW5rbm93biB0YWc6ICIraWUpO2NlPWllfXJldHVybiBjZT49MzE/dWUuZXJyb3IoIk11bHRpLW9jdGV0IHRhZyBlbmNvZGluZyB1bnN1cHBvcnRlZCIp'@;
put 'OihsZXx8KGNlfD0zMiksY2V8PVIudGFnQ2xhc3NCeU5hbWVbZGV8fCJ1bml2ZXJzYWwiXTw8NixjZSl9KFYsRyxXLHRoaXMucmVwb3J0ZXIpO2lmKFUubGVuZ3RoPDEyOCl7Y29uc3QgaWU9Si5hbGxvYygyKTtyZXR1cm4gaWVbMF09cSxpZVsxXT1VLmxlbmd0aCx0aGlzLl9jcmVhdGVFbmNv'@;
put 'ZGVyQnVmZmVyKFtpZSxVXSl9bGV0IHRlPTE7Zm9yKGxldCBpZT1VLmxlbmd0aDtpZT49MjU2O2llPj49OCl0ZSsrO2NvbnN0IG5lPUouYWxsb2MoMit0ZSk7bmVbMF09cSxuZVsxXT0xMjh8dGU7Zm9yKGxldCBpZT0xK3RlLGxlPVUubGVuZ3RoO2xlPjA7aWUtLSxsZT4+PTgpbmVbaWVdPTI1'@;
put 'NSZsZTtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbbmUsVV0pfSx6LnByb3RvdHlwZS5fZW5jb2RlU3RyPWZ1bmN0aW9uKFYsRyl7aWYoImJpdHN0ciI9PT1HKXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFswfFYudW51c2VkLFYuZGF0YV0pO2lmKCJibXBzdHIi'@;
put 'PT09Ryl7Y29uc3QgVz1KLmFsbG9jKDIqVi5sZW5ndGgpO2ZvcihsZXQgVT0wO1U8Vi5sZW5ndGg7VSsrKVcud3JpdGVVSW50MTZCRShWLmNoYXJDb2RlQXQoVSksMipVKTtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihXKX1yZXR1cm4ibnVtc3RyIj09PUc/dGhpcy5faXNOdW1z'@;
put 'dHIoVik/dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihWKTp0aGlzLnJlcG9ydGVyLmVycm9yKCJFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogbnVtc3RyIHN1cHBvcnRzIG9ubHkgZGlnaXRzIGFuZCBzcGFjZSIpOiJwcmludHN0ciI9PT1HP3RoaXMuX2lzUHJpbnRzdHIoVik/dGhpcy5fY3Jl'@;
put 'YXRlRW5jb2RlckJ1ZmZlcihWKTp0aGlzLnJlcG9ydGVyLmVycm9yKCJFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogcHJpbnRzdHIgc3VwcG9ydHMgb25seSBsYXRpbiB1cHBlciBhbmQgbG93ZXIgY2FzZSBsZXR0ZXJzLCBkaWdpdHMsIHNwYWNlLCBhcG9zdHJvcGhlLCBsZWZ0IGFuZCByaWd0'@;
put 'aCBwYXJlbnRoZXNpcywgcGx1cyBzaWduLCBjb21tYSwgaHlwaGVuLCBkb3QsIHNsYXNoLCBjb2xvbiwgZXF1YWwgc2lnbiwgcXVlc3Rpb24gbWFyayIpOi9zdHIkLy50ZXN0KEcpfHwib2JqRGVzYyI9PT1HP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoVik6dGhpcy5yZXBvcnRlci5lcnJv'@;
put 'cigiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6ICIrRysiIHVuc3VwcG9ydGVkIil9LHoucHJvdG90eXBlLl9lbmNvZGVPYmppZD1mdW5jdGlvbihWLEcsVyl7aWYoInN0cmluZyI9PXR5cGVvZiBWKXtpZighRylyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigic3RyaW5nIG9iamlkIGdpdmVu'@;
put 'LCBidXQgbm8gdmFsdWVzIG1hcCBmb3VuZCIpO2lmKCFHLmhhc093blByb3BlcnR5KFYpKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJvYmppZCBub3QgZm91bmQgaW4gdmFsdWVzIG1hcCIpO1Y9R1tWXS5zcGxpdCgvW1xzLl0rL2cpO2ZvcihsZXQgbmU9MDtuZTxWLmxlbmd0aDtuZSsr'@;
put 'KVZbbmVdfD0wfWVsc2UgaWYoQXJyYXkuaXNBcnJheShWKSl7Vj1WLnNsaWNlKCk7Zm9yKGxldCBuZT0wO25lPFYubGVuZ3RoO25lKyspVltuZV18PTB9aWYoIUFycmF5LmlzQXJyYXkoVikpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIm9iamlkKCkgc2hvdWxkIGJlIGVpdGhlciBhcnJh'@;
put 'eSBvciBzdHJpbmcsIGdvdDogIitKU09OLnN0cmluZ2lmeShWKSk7aWYoIVcpe2lmKFZbMV0+PTQwKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJTZWNvbmQgb2JqaWQgaWRlbnRpZmllciBPT0IiKTtWLnNwbGljZSgwLDIsNDAqVlswXStWWzFdKX1sZXQgVT0wO2ZvcihsZXQgbmU9MDtu'@;
put 'ZTxWLmxlbmd0aDtuZSsrKXtsZXQgaWU9VltuZV07Zm9yKFUrKztpZT49MTI4O2llPj49NylVKyt9Y29uc3QgcT1KLmFsbG9jKFUpO2xldCB0ZT1xLmxlbmd0aC0xO2ZvcihsZXQgbmU9Vi5sZW5ndGgtMTtuZT49MDtuZS0tKXtsZXQgaWU9VltuZV07Zm9yKHFbdGUtLV09MTI3JmllOyhpZT4+'@;
put 'PTcpPjA7KXFbdGUtLV09MTI4fDEyNyZpZX1yZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihxKX0sei5wcm90b3R5cGUuX2VuY29kZVRpbWU9ZnVuY3Rpb24oVixHKXtsZXQgVztjb25zdCBVPW5ldyBEYXRlKFYpO3JldHVybiJnZW50aW1lIj09PUc/Vz1baihVLmdldFVUQ0Z1bGxZ'@;
put 'ZWFyKCkpLGooVS5nZXRVVENNb250aCgpKzEpLGooVS5nZXRVVENEYXRlKCkpLGooVS5nZXRVVENIb3VycygpKSxqKFUuZ2V0VVRDTWludXRlcygpKSxqKFUuZ2V0VVRDU2Vjb25kcygpKSwiWiJdLmpvaW4oIiIpOiJ1dGN0aW1lIj09PUc/Vz1baihVLmdldFVUQ0Z1bGxZZWFyKCklMTAwKSxq'@;
put 'KFUuZ2V0VVRDTW9udGgoKSsxKSxqKFUuZ2V0VVRDRGF0ZSgpKSxqKFUuZ2V0VVRDSG91cnMoKSksaihVLmdldFVUQ01pbnV0ZXMoKSksaihVLmdldFVUQ1NlY29uZHMoKSksIloiXS5qb2luKCIiKTp0aGlzLnJlcG9ydGVyLmVycm9yKCJFbmNvZGluZyAiK0crIiB0aW1lIGlzIG5vdCBzdXBw'@;
put 'b3J0ZWQgeWV0IiksdGhpcy5fZW5jb2RlU3RyKFcsIm9jdHN0ciIpfSx6LnByb3RvdHlwZS5fZW5jb2RlTnVsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKCIiKX0sei5wcm90b3R5cGUuX2VuY29kZUludD1mdW5jdGlvbihWLEcpe2lmKCJzdHJpbmciPT10'@;
put 'eXBlb2YgVil7aWYoIUcpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIlN0cmluZyBpbnQgb3IgZW51bSBnaXZlbiwgYnV0IG5vIHZhbHVlcyBtYXAiKTtpZighRy5oYXNPd25Qcm9wZXJ0eShWKSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigiVmFsdWVzIG1hcCBkb2Vzbid0IGNvbnRh'@;
put 'aW46ICIrSlNPTi5zdHJpbmdpZnkoVikpO1Y9R1tWXX1pZigibnVtYmVyIiE9dHlwZW9mIFYmJiFKLmlzQnVmZmVyKFYpKXtjb25zdCBxPVYudG9BcnJheSgpOyFWLnNpZ24mJjEyOCZxWzBdJiZxLnVuc2hpZnQoMCksVj1KLmZyb20ocSl9aWYoSi5pc0J1ZmZlcihWKSl7bGV0IHE9Vi5sZW5n'@;
put 'dGg7MD09PVYubGVuZ3RoJiZxKys7Y29uc3QgdGU9Si5hbGxvYyhxKTtyZXR1cm4gVi5jb3B5KHRlKSwwPT09Vi5sZW5ndGgmJih0ZVswXT0wKSx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHRlKX1pZihWPDEyOClyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihWKTtpZihWPDI1'@;
put 'NilyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbMCxWXSk7bGV0IFc9MTtmb3IobGV0IHE9VjtxPj0yNTY7cT4+PTgpVysrO2NvbnN0IFU9bmV3IEFycmF5KFcpO2ZvcihsZXQgcT1VLmxlbmd0aC0xO3E+PTA7cS0tKVVbcV09MjU1JlYsVj4+PTg7cmV0dXJuIDEyOCZVWzBdJiZV'@;
put 'LnVuc2hpZnQoMCksdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihKLmZyb20oVSkpfSx6LnByb3RvdHlwZS5fZW5jb2RlQm9vbD1mdW5jdGlvbihWKXtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihWPzI1NTowKX0sei5wcm90b3R5cGUuX3VzZT1mdW5jdGlvbihWLEcpe3JldHVy'@;
put 'biJmdW5jdGlvbiI9PXR5cGVvZiBWJiYoVj1WKEcpKSxWLl9nZXRFbmNvZGVyKCJkZXIiKS50cmVlfSx6LnByb3RvdHlwZS5fc2tpcERlZmF1bHQ9ZnVuY3Rpb24oVixHLFcpe2NvbnN0IFU9dGhpcy5fYmFzZVN0YXRlO2xldCBxO2lmKG51bGw9PT1VLmRlZmF1bHQpcmV0dXJuITE7Y29uc3Qg'@;
put 'dGU9Vi5qb2luKCk7aWYodm9pZCAwPT09VS5kZWZhdWx0QnVmZmVyJiYoVS5kZWZhdWx0QnVmZmVyPXRoaXMuX2VuY29kZVZhbHVlKFUuZGVmYXVsdCxHLFcpLmpvaW4oKSksdGUubGVuZ3RoIT09VS5kZWZhdWx0QnVmZmVyLmxlbmd0aClyZXR1cm4hMTtmb3IocT0wO3E8dGUubGVuZ3RoO3Er'@;
put 'KylpZih0ZVtxXSE9PVUuZGVmYXVsdEJ1ZmZlcltxXSlyZXR1cm4hMTtyZXR1cm4hMH19LDY1Nzk6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBLPUI7Sy5kZXI9TCg2OTg0KSxLLnBlbT1MKDI4ODMpfSwyODgzOihILEIsTCk9PnsidXNlIHN0cmljdCI7Y29uc3QgSz1MKDU3MTcpLEo9'@;
put 'TCg2OTg0KTtmdW5jdGlvbiBJKFIpe0ouY2FsbCh0aGlzLFIpLHRoaXMuZW5jPSJwZW0ifUsoSSxKKSxILmV4cG9ydHM9SSxJLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oUixFKXtjb25zdCB6PUoucHJvdG90eXBlLmVuY29kZS5jYWxsKHRoaXMsUikudG9TdHJpbmcoImJhc2U2NCIpLGo9'@;
put 'WyItLS0tLUJFR0lOICIrRS5sYWJlbCsiLS0tLS0iXTtmb3IobGV0IFY9MDtWPHoubGVuZ3RoO1YrPTY0KWoucHVzaCh6LnNsaWNlKFYsVis2NCkpO3JldHVybiBqLnB1c2goIi0tLS0tRU5EICIrRS5sYWJlbCsiLS0tLS0iKSxqLmpvaW4oIlxuIil9fSw0NTkwOmZ1bmN0aW9uKEgsQixMKXsh'@;
put 'ZnVuY3Rpb24oSyxKKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gSShnLEMpe2lmKCFnKXRocm93IG5ldyBFcnJvcihDfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIFIoZyxDKXtnLnN1cGVyXz1DO3ZhciBNPWZ1bmN0aW9uKCl7fTtNLnByb3RvdHlwZT1DLnByb3RvdHlwZSxnLnByb3Rv'@;
put 'dHlwZT1uZXcgTSxnLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1nfWZ1bmN0aW9uIEUoZyxDLE0pe2lmKEUuaXNCTihnKSlyZXR1cm4gZzt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09ZyYmKCJsZSIhPT1DJiYiYmUiIT09'@;
put 'Q3x8KE09QyxDPTEwKSx0aGlzLl9pbml0KGd8fDAsQ3x8MTAsTXx8ImJlIikpfXZhciB6OyJvYmplY3QiPT10eXBlb2YgSz9LLmV4cG9ydHM9RTpKLkJOPUUsRS5CTj1FLEUud29yZFNpemU9MjY7dHJ5e3o9dHlwZW9mIHdpbmRvdzwidSImJnZvaWQgMCE9PXdpbmRvdy5CdWZmZXI/d2luZG93'@;
put 'LkJ1ZmZlcjpMKDk1MCkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBqKGcsQyl7dmFyIE09Zy5jaGFyQ29kZUF0KEMpO3JldHVybiBNPj02NSYmTTw9NzA/TS01NTpNPj05NyYmTTw9MTAyP00tODc6TS00OCYxNX1mdW5jdGlvbiBWKGcsQyxNKXt2YXIgeT1qKGcsTSk7cmV0dXJuIE0tMT49QyYm'@;
put 'KHl8PWooZyxNLTEpPDw0KSx5fWZ1bmN0aW9uIEcoZyxDLE0seSl7Zm9yKHZhciBwPTAsUz1NYXRoLm1pbihnLmxlbmd0aCxNKSxRPUM7UTxTO1ErKyl7dmFyIHJlPWcuY2hhckNvZGVBdChRKS00ODtwKj15LHArPXJlPj00OT9yZS00OSsxMDpyZT49MTc/cmUtMTcrMTA6cmV9cmV0dXJuIHB9'@;
put 'RS5pc0JOPWZ1bmN0aW9uKGcpe3JldHVybiBnIGluc3RhbmNlb2YgRXx8bnVsbCE9PWcmJiJvYmplY3QiPT10eXBlb2YgZyYmZy5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PUUud29yZFNpemUmJkFycmF5LmlzQXJyYXkoZy53b3Jkcyl9LEUubWF4PWZ1bmN0aW9uKGcsQyl7cmV0dXJuIGcuY21w'@;
put 'KEMpPjA/ZzpDfSxFLm1pbj1mdW5jdGlvbihnLEMpe3JldHVybiBnLmNtcChDKTwwP2c6Q30sRS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oZyxDLE0pe2lmKCJudW1iZXIiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdE51bWJlcihnLEMsTSk7aWYoIm9iamVjdCI9PXR5cGVvZiBnKXJl'@;
put 'dHVybiB0aGlzLl9pbml0QXJyYXkoZyxDLE0pOyJoZXgiPT09QyYmKEM9MTYpLEkoQz09PSgwfEMpJiZDPj0yJiZDPD0zNik7dmFyIHk9MDsiLSI9PT0oZz1nLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKHkrKyx0aGlzLm5lZ2F0aXZlPTEpLHk8Zy5sZW5ndGgmJigxNj09'@;
put 'PUM/dGhpcy5fcGFyc2VIZXgoZyx5LE0pOih0aGlzLl9wYXJzZUJhc2UoZyxDLHkpLCJsZSI9PT1NJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksQyxNKSkpfSxFLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihnLEMsTSl7ZzwwJiYodGhpcy5uZWdhdGl2ZT0xLGc9LWcp'@;
put 'LGc8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJmddLHRoaXMubGVuZ3RoPTEpOmc8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooSShnPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9'@;
put 'WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09TSYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEMsTSl9LEUucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oZyxDLE0pe2lmKEkoIm51bWJlciI9PXR5cGVvZiBnLmxlbmd0'@;
put 'aCksZy5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoZy5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGg7eSsrKXRoaXMud29yZHNb'@;
put 'eV09MDt2YXIgcCxTLFE9MDtpZigiYmUiPT09TSlmb3IoeT1nLmxlbmd0aC0xLHA9MDt5Pj0wO3ktPTMpdGhpcy53b3Jkc1twXXw9KFM9Z1t5XXxnW3ktMV08PDh8Z1t5LTJdPDwxNik8PFEmNjcxMDg4NjMsdGhpcy53b3Jkc1twKzFdPVM+Pj4yNi1RJjY3MTA4ODYzLChRKz0yNCk+PTI2JiYo'@;
put 'US09MjYscCsrKTtlbHNlIGlmKCJsZSI9PT1NKWZvcih5PTAscD0wO3k8Zy5sZW5ndGg7eSs9Myl0aGlzLndvcmRzW3BdfD0oUz1nW3ldfGdbeSsxXTw8OHxnW3krMl08PDE2KTw8USY2NzEwODg2Myx0aGlzLndvcmRzW3ArMV09Uz4+PjI2LVEmNjcxMDg4NjMsKFErPTI0KT49MjYmJihRLT0y'@;
put 'NixwKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihnLEMsTSl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChnLmxlbmd0aC1DKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciB5PTA7eTx0aGlzLmxlbmd0aDt5'@;
put 'KyspdGhpcy53b3Jkc1t5XT0wO3ZhciBwLFM9MCxRPTA7aWYoImJlIj09PU0pZm9yKHk9Zy5sZW5ndGgtMTt5Pj1DO3ktPTIpcD1WKGcsQyx5KTw8Uyx0aGlzLndvcmRzW1FdfD02NzEwODg2MyZwLFM+PTE4PyhTLT0xOCx0aGlzLndvcmRzW1ErPTFdfD1wPj4+MjYpOlMrPTg7ZWxzZSBmb3Io'@;
put 'eT0oZy5sZW5ndGgtQyklMj09MD9DKzE6Qzt5PGcubGVuZ3RoO3krPTIpcD1WKGcsQyx5KTw8Uyx0aGlzLndvcmRzW1FdfD02NzEwODg2MyZwLFM+PTE4PyhTLT0xOCx0aGlzLndvcmRzW1ErPTFdfD1wPj4+MjYpOlMrPTg7dGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1'@;
put 'bmN0aW9uKGcsQyxNKXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgeT0wLHA9MTtwPD02NzEwODg2MztwKj1DKXkrKzt5LS0scD1wL0N8MDtmb3IodmFyIFM9Zy5sZW5ndGgtTSxRPVMleSxyZT1NYXRoLm1pbihTLFMtUSkrTSxmZT0wLG1lPU07bWU8cmU7bWUrPXkpZmU9'@;
put 'RyhnLG1lLG1lK3ksQyksdGhpcy5pbXVsbihwKSx0aGlzLndvcmRzWzBdK2ZlPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPWZlOnRoaXMuX2lhZGRuKGZlKTtpZigwIT09USl7dmFyIGtlPTE7Zm9yKGZlPUcoZyxtZSxnLmxlbmd0aCxDKSxtZT0wO21lPFE7bWUrKylrZSo9Qzt0aGlzLmltdWxu'@;
put 'KGtlKSx0aGlzLndvcmRzWzBdK2ZlPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPWZlOnRoaXMuX2lhZGRuKGZlKX10aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZyl7Zy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7'@;
put 'QysrKWcud29yZHNbQ109dGhpcy53b3Jkc1tDXTtnLmxlbmd0aD10aGlzLmxlbmd0aCxnLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsZy5yZWQ9dGhpcy5yZWR9LEUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IEUobnVsbCk7cmV0dXJuIHRoaXMuY29weShnKSxnfSxFLnBy'@;
put 'b3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8ZzspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxFLnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgt'@;
put 'MV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LEUucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSxFLnByb3RvdHlwZS5pbnNwZWN0PWZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBXPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAw'@;
put 'MDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAw'@;
put 'MDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLFU9WzAsMCwyNSwxNiwxMiwx'@;
put 'MSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0scT1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgw'@;
put 'OCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0'@;
put 'NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiB0ZShnLEMsTSl7TS5uZWdhdGl2ZT1DLm5lZ2F0aXZlXmcubmVnYXRpdmU7dmFyIHk9Zy5sZW5ndGgrQy5sZW5ndGh8MDtNLmxlbmd0aD15LHk9eS0xfDA7dmFyIHA9MHxnLndvcmRzWzBdLFM9MHxDLndv'@;
put 'cmRzWzBdLFE9cCpTLGZlPVEvNjcxMDg4NjR8MDtNLndvcmRzWzBdPTY3MTA4ODYzJlE7Zm9yKHZhciBtZT0xO21lPHk7bWUrKyl7Zm9yKHZhciBrZT1mZT4+PjI2LFRlPTY3MTA4ODYzJmZlLFBlPU1hdGgubWluKG1lLEMubGVuZ3RoLTEpLEZlPU1hdGgubWF4KDAsbWUtZy5sZW5ndGgrMSk7'@;
put 'RmU8PVBlO0ZlKyspa2UrPShRPShwPTB8Zy53b3Jkc1ttZS1GZXwwXSkqKFM9MHxDLndvcmRzW0ZlXSkrVGUpLzY3MTA4ODY0fDAsVGU9NjcxMDg4NjMmUTtNLndvcmRzW21lXT0wfFRlLGZlPTB8a2V9cmV0dXJuIDAhPT1mZT9NLndvcmRzW21lXT0wfGZlOk0ubGVuZ3RoLS0sTS5zdHJpcCgp'@;
put 'fUUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGcsQyl7dmFyIE07aWYoQz0wfEN8fDEsMTY9PT0oZz1nfHwxMCl8fCJoZXgiPT09Zyl7TT0iIjtmb3IodmFyIHk9MCxwPTAsUz0wO1M8dGhpcy5sZW5ndGg7UysrKXt2YXIgUT10aGlzLndvcmRzW1NdLHJlPSgxNjc3NzIxNSYoUTw8eXxw'@;
put 'KSkudG9TdHJpbmcoMTYpO009MCE9KHA9UT4+PjI0LXkmMTY3NzcyMTUpfHxTIT09dGhpcy5sZW5ndGgtMT9XWzYtcmUubGVuZ3RoXStyZStNOnJlK00sKHkrPTIpPj0yNiYmKHktPTI2LFMtLSl9Zm9yKDAhPT1wJiYoTT1wLnRvU3RyaW5nKDE2KStNKTtNLmxlbmd0aCVDIT0wOylNPSIwIitN'@;
put 'O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKE09Ii0iK00pLE19aWYoZz09PSgwfGcpJiZnPj0yJiZnPD0zNil7dmFyIGZlPVVbZ10sbWU9cVtnXTtNPSIiO3ZhciBrZT10aGlzLmNsb25lKCk7Zm9yKGtlLm5lZ2F0aXZlPTA7IWtlLmlzWmVybygpOyl7dmFyIFRlPWtlLm1vZG4obWUpLnRv'@;
put 'U3RyaW5nKGcpO009KGtlPWtlLmlkaXZuKG1lKSkuaXNaZXJvKCk/VGUrTTpXW2ZlLVRlLmxlbmd0aF0rVGUrTX1mb3IodGhpcy5pc1plcm8oKSYmKE09IjAiK00pO00ubGVuZ3RoJUMhPTA7KU09IjAiK007cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoTT0iLSIrTSksTX1JKCExLCJCYXNl'@;
put 'IHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LEUucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIGc9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP2crPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1sy'@;
put 'XT9nKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmSSghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LWc6Z30sRS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxFLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihnLEMpe3JldHVybiBJKHZvaWQgMCE9PXopLHRoaXMudG9BcnJheUxpa2UoeixnLEMpfSxFLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2Uo'@;
put 'QXJyYXksZyxDKX0sRS5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oZyxDLE0pe3ZhciB5PXRoaXMuYnl0ZUxlbmd0aCgpLHA9TXx8TWF0aC5tYXgoMSx5KTtJKHk8PXAsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxJKHA+MCwiUmVxdWVzdGVkIGFycmF5'@;
put 'IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBTLFEscmU9ImxlIj09PUMsZmU9bmV3IGcocCksbWU9dGhpcy5jbG9uZSgpO2lmKHJlKXtmb3IoUT0wOyFtZS5pc1plcm8oKTtRKyspUz1tZS5hbmRsbigyNTUpLG1lLml1c2hybig4KSxmZVtRXT1TO2Zvcig7UTxwO1ErKylmZVtRXT0w'@;
put 'fWVsc2V7Zm9yKFE9MDtRPHAteTtRKyspZmVbUV09MDtmb3IoUT0wOyFtZS5pc1plcm8oKTtRKyspUz1tZS5hbmRsbigyNTUpLG1lLml1c2hybig4KSxmZVtwLVEtMV09U31yZXR1cm4gZmV9LEUucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihnKXtyZXR1cm4gMzIt'@;
put 'TWF0aC5jbHozMihnKX06ZnVuY3Rpb24oZyl7dmFyIEM9ZyxNPTA7cmV0dXJuIEM+PTQwOTYmJihNKz0xMyxDPj4+PTEzKSxDPj02NCYmKE0rPTcsQz4+Pj03KSxDPj04JiYoTSs9NCxDPj4+PTQpLEM+PTImJihNKz0yLEM+Pj49MiksTStDfSxFLnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rp'@;
put 'b24oZyl7aWYoMD09PWcpcmV0dXJuIDI2O3ZhciBDPWcsTT0wO3JldHVybiEoODE5MSZDKSYmKE0rPTEzLEM+Pj49MTMpLCEoMTI3JkMpJiYoTSs9NyxDPj4+PTcpLCEoMTUmQykmJihNKz00LEM+Pj49NCksISgzJkMpJiYoTSs9MixDPj4+PTIpLCEoMSZDKSYmTSsrLE19LEUucHJvdG90eXBl'@;
put 'LmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBDPXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK0N9LEUucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFy'@;
put 'IGc9MCxDPTA7Qzx0aGlzLmxlbmd0aDtDKyspe3ZhciBNPXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbQ10pO2lmKGcrPU0sMjYhPT1NKWJyZWFrfXJldHVybiBnfSxFLnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgp'@;
put 'fSxFLnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4oZykuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSxFLnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy50ZXN0bihnLTEpP3RoaXMubm90'@;
put 'bihnKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSxFLnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sRS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LEUucHJvdG90eXBlLmluZWc9ZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LEUucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgQz0wO0M8Zy5sZW5ndGg7Qysr'@;
put 'KXRoaXMud29yZHNbQ109dGhpcy53b3Jkc1tDXXxnLndvcmRzW0NdO3JldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlvcj1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT0odGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdW9yKGcpfSxFLnByb3RvdHlwZS5vcj1mdW5jdGlv'@;
put 'bihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihnKTpnLmNsb25lKCkuaW9yKHRoaXMpfSxFLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKGcpOmcuY2xvbmUoKS5pdW9y'@;
put 'KHRoaXMpfSxFLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihnKXt2YXIgQztDPXRoaXMubGVuZ3RoPmcubGVuZ3RoP2c6dGhpcztmb3IodmFyIE09MDtNPEMubGVuZ3RoO00rKyl0aGlzLndvcmRzW01dPXRoaXMud29yZHNbTV0mZy53b3Jkc1tNXTtyZXR1cm4gdGhpcy5sZW5ndGg9Qy5sZW5n'@;
put 'dGgsdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKGcpe3JldHVybiBJKDA9PSh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1YW5kKGcpfSxFLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xv'@;
put 'bmUoKS5pYW5kKGcpOmcuY2xvbmUoKS5pYW5kKHRoaXMpfSxFLnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoZyk6Zy5jbG9uZSgpLml1YW5kKHRoaXMpfSxFLnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihn'@;
put 'KXt2YXIgQyxNO3RoaXMubGVuZ3RoPmcubGVuZ3RoPyhDPXRoaXMsTT1nKTooQz1nLE09dGhpcyk7Zm9yKHZhciB5PTA7eTxNLmxlbmd0aDt5KyspdGhpcy53b3Jkc1t5XT1DLndvcmRzW3ldXk0ud29yZHNbeV07aWYodGhpcyE9PUMpZm9yKDt5PEMubGVuZ3RoO3krKyl0aGlzLndvcmRzW3ld'@;
put 'PUMud29yZHNbeV07cmV0dXJuIHRoaXMubGVuZ3RoPUMubGVuZ3RoLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT0odGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihnKX0sRS5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKGcp'@;
put 'e3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihnKTpnLmNsb25lKCkuaXhvcih0aGlzKX0sRS5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKGcpOmcuY2xvbmUoKS5pdXhv'@;
put 'cih0aGlzKX0sRS5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBDPTB8TWF0aC5jZWlsKGcvMjYpLE09ZyUyNjt0aGlzLl9leHBhbmQoQyksTT4wJiZDLS07Zm9yKHZhciB5PTA7eTxDO3krKyl0aGlzLndvcmRzW3ldPTY3MTA4ODYz'@;
put 'Jn50aGlzLndvcmRzW3ldO3JldHVybiBNPjAmJih0aGlzLndvcmRzW3ldPX50aGlzLndvcmRzW3ldJjY3MTA4ODYzPj4yNi1NKSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihnKX0sRS5wcm90b3R5cGUuc2V0bj1m'@;
put 'dW5jdGlvbihnLEMpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgTT1nLzI2fDAseT1nJTI2O3JldHVybiB0aGlzLl9leHBhbmQoTSsxKSx0aGlzLndvcmRzW01dPUM/dGhpcy53b3Jkc1tNXXwxPDx5OnRoaXMud29yZHNbTV0mfigxPDx5KSx0aGlzLnN0cmlwKCl9LEUucHJvdG90'@;
put 'eXBlLmlhZGQ9ZnVuY3Rpb24oZyl7dmFyIEMsTSx5O2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLEM9dGhpcy5pc3ViKGcpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9'@;
put 'PWcubmVnYXRpdmUpcmV0dXJuIGcubmVnYXRpdmU9MCxDPXRoaXMuaXN1YihnKSxnLm5lZ2F0aXZlPTEsQy5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oTT10aGlzLHk9Zyk6KE09Zyx5PXRoaXMpO2Zvcih2YXIgcD0wLFM9MDtTPHkubGVuZ3RoO1MrKyl0aGlzLndvcmRzW1Nd'@;
put 'PTY3MTA4ODYzJihDPSgwfE0ud29yZHNbU10pKygwfHkud29yZHNbU10pK3ApLHA9Qz4+PjI2O2Zvcig7MCE9PXAmJlM8TS5sZW5ndGg7UysrKXRoaXMud29yZHNbU109NjcxMDg4NjMmKEM9KDB8TS53b3Jkc1tTXSkrcCkscD1DPj4+MjY7aWYodGhpcy5sZW5ndGg9TS5sZW5ndGgsMCE9PXAp'@;
put 'dGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09cCx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoTSE9PXRoaXMpZm9yKDtTPE0ubGVuZ3RoO1MrKyl0aGlzLndvcmRzW1NdPU0ud29yZHNbU107cmV0dXJuIHRoaXN9LEUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnKXt2YXIgQztyZXR1cm4gMCE9PWcubmVn'@;
put 'YXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhnLm5lZ2F0aXZlPTAsQz10aGlzLnN1YihnKSxnLm5lZ2F0aXZlXj0xLEMpOjA9PT1nLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLEM9Zy5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLEMpOnRoaXMubGVuZ3Ro'@;
put 'PmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKGcpOmcuY2xvbmUoKS5pYWRkKHRoaXMpfSxFLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcpe2lmKDAhPT1nLm5lZ2F0aXZlKXtnLm5lZ2F0aXZlPTA7dmFyIEM9dGhpcy5pYWRkKGcpO3JldHVybiBnLm5lZ2F0aXZlPTEsQy5fbm9ybVNpZ24o'@;
put 'KX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgTSx5LHA9dGhpcy5jbXAoZyk7aWYoMD09PXApcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMu'@;
put 'd29yZHNbMF09MCx0aGlzO3A+MD8oTT10aGlzLHk9Zyk6KE09Zyx5PXRoaXMpO2Zvcih2YXIgUz0wLFE9MDtRPHkubGVuZ3RoO1ErKylTPShDPSgwfE0ud29yZHNbUV0pLSgwfHkud29yZHNbUV0pK1MpPj4yNix0aGlzLndvcmRzW1FdPTY3MTA4ODYzJkM7Zm9yKDswIT09UyYmUTxNLmxlbmd0'@;
put 'aDtRKyspUz0oQz0oMHxNLndvcmRzW1FdKStTKT4+MjYsdGhpcy53b3Jkc1tRXT02NzEwODg2MyZDO2lmKDA9PT1TJiZRPE0ubGVuZ3RoJiZNIT09dGhpcylmb3IoO1E8TS5sZW5ndGg7USsrKXRoaXMud29yZHNbUV09TS53b3Jkc1tRXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhp'@;
put 'cy5sZW5ndGgsUSksTSE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihnKX07dmFyIG5lPWZ1bmN0aW9uKGcsQyxNKXt2YXIgeSxwLFMsUT1nLndvcmRzLHJlPUMud29yZHMs'@;
put 'ZmU9TS53b3JkcyxtZT0wLGtlPTB8UVswXSxUZT04MTkxJmtlLFBlPWtlPj4+MTMsRmU9MHxRWzFdLE5lPTgxOTEmRmUsTGU9RmU+Pj4xMyxCZT0wfFFbMl0sSGU9ODE5MSZCZSxRZT1CZT4+PjEzLG10PTB8UVszXSxLZT04MTkxJm10LHdlPW10Pj4+MTMsSWU9MHxRWzRdLE9lPTgxOTEmSWUs'@;
put 'ZXQ9SWU+Pj4xMyxudD0wfFFbNV0scWU9ODE5MSZudCxodD1udD4+PjEzLEVlPTB8UVs2XSxEZT04MTkxJkVlLCRlPUVlPj4+MTMsYXQ9MHxRWzddLGN0PTgxOTEmYXQsT3Q9YXQ+Pj4xMyxQdD0wfFFbOF0sQXQ9ODE5MSZQdCxKdD1QdD4+PjEzLG1uPTB8UVs5XSxOdD04MTkxJm1uLGJuPW1u'@;
put 'Pj4+MTMsR249MHxyZVswXSxvbj04MTkxJkduLCRuPUduPj4+MTMsTm49MHxyZVsxXSxwdD04MTkxJk5uLHBuPU5uPj4+MTMsaG49MHxyZVsyXSxDdD04MTkxJmhuLGVuPWhuPj4+MTMsX3Q9MHxyZVszXSxWdD04MTkxJl90LF9uPV90Pj4+MTMsb3Q9MHxyZVs0XSxJdD04MTkxJm90LG5uPW90'@;
put 'Pj4+MTMsRHQ9MHxyZVs1XSx2dD04MTkxJkR0LEd0PUR0Pj4+MTMsTG49MHxyZVs2XSx6dD04MTkxJkxuLE1uPUxuPj4+MTMsVG49MHxyZVs3XSxzbj04MTkxJlRuLEJuPVRuPj4+MTMsRm49MHxyZVs4XSxxdD04MTkxJkZuLEhuPUZuPj4+MTMsaWk9MHxyZVs5XSxjbj04MTkxJmlpLGpuPWlp'@;
put 'Pj4+MTM7TS5uZWdhdGl2ZT1nLm5lZ2F0aXZlXkMubmVnYXRpdmUsTS5sZW5ndGg9MTk7dmFyIFhyPShtZSsoeT1NYXRoLmltdWwoVGUsb24pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKFRlLCRuKSkrTWF0aC5pbXVsKFBlLG9uKXwwKSk8PDEzKXwwO21lPSgoUz1NYXRoLmltdWwoUGUs'@;
put 'JG4pKSsocD4+PjEzKXwwKSsoWHI+Pj4yNil8MCxYciY9NjcxMDg4NjMseT1NYXRoLmltdWwoTmUsb24pLHA9KHA9TWF0aC5pbXVsKE5lLCRuKSkrTWF0aC5pbXVsKExlLG9uKXwwLFM9TWF0aC5pbXVsKExlLCRuKTt2YXIgdmk9KG1lKyh5PXkrTWF0aC5pbXVsKFRlLHB0KXwwKXwwKSsoKDgx'@;
put 'OTEmKHA9KHA9cCtNYXRoLmltdWwoVGUscG4pfDApK01hdGguaW11bChQZSxwdCl8MCkpPDwxMyl8MDttZT0oKFM9UytNYXRoLmltdWwoUGUscG4pfDApKyhwPj4+MTMpfDApKyh2aT4+PjI2KXwwLHZpJj02NzEwODg2Myx5PU1hdGguaW11bChIZSxvbikscD0ocD1NYXRoLmltdWwoSGUsJG4p'@;
put 'KStNYXRoLmltdWwoUWUsb24pfDAsUz1NYXRoLmltdWwoUWUsJG4pLHk9eStNYXRoLmltdWwoTmUscHQpfDAscD0ocD1wK01hdGguaW11bChOZSxwbil8MCkrTWF0aC5pbXVsKExlLHB0KXwwLFM9UytNYXRoLmltdWwoTGUscG4pfDA7dmFyIEVyPShtZSsoeT15K01hdGguaW11bChUZSxDdCl8'@;
put 'MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFRlLGVuKXwwKStNYXRoLmltdWwoUGUsQ3QpfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKFBlLGVuKXwwKSsocD4+PjEzKXwwKSsoRXI+Pj4yNil8MCxFciY9NjcxMDg4NjMseT1NYXRoLmltdWwoS2Usb24pLHA9KHA9TWF0aC5p'@;
put 'bXVsKEtlLCRuKSkrTWF0aC5pbXVsKHdlLG9uKXwwLFM9TWF0aC5pbXVsKHdlLCRuKSx5PXkrTWF0aC5pbXVsKEhlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoSGUscG4pfDApK01hdGguaW11bChRZSxwdCl8MCxTPVMrTWF0aC5pbXVsKFFlLHBuKXwwLHk9eStNYXRoLmltdWwoTmUsQ3QpfDAs'@;
put 'cD0ocD1wK01hdGguaW11bChOZSxlbil8MCkrTWF0aC5pbXVsKExlLEN0KXwwLFM9UytNYXRoLmltdWwoTGUsZW4pfDA7dmFyIFlpPShtZSsoeT15K01hdGguaW11bChUZSxWdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFRlLF9uKXwwKStNYXRoLmltdWwoUGUsVnQpfDApKTw8'@;
put 'MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKFBlLF9uKXwwKSsocD4+PjEzKXwwKSsoWWk+Pj4yNil8MCxZaSY9NjcxMDg4NjMseT1NYXRoLmltdWwoT2Usb24pLHA9KHA9TWF0aC5pbXVsKE9lLCRuKSkrTWF0aC5pbXVsKGV0LG9uKXwwLFM9TWF0aC5pbXVsKGV0LCRuKSx5PXkrTWF0aC5pbXVs'@;
put 'KEtlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoS2UscG4pfDApK01hdGguaW11bCh3ZSxwdCl8MCxTPVMrTWF0aC5pbXVsKHdlLHBuKXwwLHk9eStNYXRoLmltdWwoSGUsQ3QpfDAscD0ocD1wK01hdGguaW11bChIZSxlbil8MCkrTWF0aC5pbXVsKFFlLEN0KXwwLFM9UytNYXRoLmltdWwoUWUs'@;
put 'ZW4pfDAseT15K01hdGguaW11bChOZSxWdCl8MCxwPShwPXArTWF0aC5pbXVsKE5lLF9uKXwwKStNYXRoLmltdWwoTGUsVnQpfDAsUz1TK01hdGguaW11bChMZSxfbil8MDt2YXIgSnI9KG1lKyh5PXkrTWF0aC5pbXVsKFRlLEl0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoVGUs'@;
put 'bm4pfDApK01hdGguaW11bChQZSxJdCl8MCkpPDwxMyl8MDttZT0oKFM9UytNYXRoLmltdWwoUGUsbm4pfDApKyhwPj4+MTMpfDApKyhKcj4+PjI2KXwwLEpyJj02NzEwODg2Myx5PU1hdGguaW11bChxZSxvbikscD0ocD1NYXRoLmltdWwocWUsJG4pKStNYXRoLmltdWwoaHQsb24pfDAsUz1N'@;
put 'YXRoLmltdWwoaHQsJG4pLHk9eStNYXRoLmltdWwoT2UscHQpfDAscD0ocD1wK01hdGguaW11bChPZSxwbil8MCkrTWF0aC5pbXVsKGV0LHB0KXwwLFM9UytNYXRoLmltdWwoZXQscG4pfDAseT15K01hdGguaW11bChLZSxDdCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLGVuKXwwKStNYXRoLmlt'@;
put 'dWwod2UsQ3QpfDAsUz1TK01hdGguaW11bCh3ZSxlbil8MCx5PXkrTWF0aC5pbXVsKEhlLFZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoSGUsX24pfDApK01hdGguaW11bChRZSxWdCl8MCxTPVMrTWF0aC5pbXVsKFFlLF9uKXwwLHk9eStNYXRoLmltdWwoTmUsSXQpfDAscD0ocD1wK01hdGguaW11'@;
put 'bChOZSxubil8MCkrTWF0aC5pbXVsKExlLEl0KXwwLFM9UytNYXRoLmltdWwoTGUsbm4pfDA7dmFyIGFvPShtZSsoeT15K01hdGguaW11bChUZSx2dCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFRlLEd0KXwwKStNYXRoLmltdWwoUGUsdnQpfDApKTw8MTMpfDA7bWU9KChTPVMr'@;
put 'TWF0aC5pbXVsKFBlLEd0KXwwKSsocD4+PjEzKXwwKSsoYW8+Pj4yNil8MCxhbyY9NjcxMDg4NjMseT1NYXRoLmltdWwoRGUsb24pLHA9KHA9TWF0aC5pbXVsKERlLCRuKSkrTWF0aC5pbXVsKCRlLG9uKXwwLFM9TWF0aC5pbXVsKCRlLCRuKSx5PXkrTWF0aC5pbXVsKHFlLHB0KXwwLHA9KHA9'@;
put 'cCtNYXRoLmltdWwocWUscG4pfDApK01hdGguaW11bChodCxwdCl8MCxTPVMrTWF0aC5pbXVsKGh0LHBuKXwwLHk9eStNYXRoLmltdWwoT2UsQ3QpfDAscD0ocD1wK01hdGguaW11bChPZSxlbil8MCkrTWF0aC5pbXVsKGV0LEN0KXwwLFM9UytNYXRoLmltdWwoZXQsZW4pfDAseT15K01hdGgu'@;
put 'aW11bChLZSxWdCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLF9uKXwwKStNYXRoLmltdWwod2UsVnQpfDAsUz1TK01hdGguaW11bCh3ZSxfbil8MCx5PXkrTWF0aC5pbXVsKEhlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoSGUsbm4pfDApK01hdGguaW11bChRZSxJdCl8MCxTPVMrTWF0aC5pbXVs'@;
put 'KFFlLG5uKXwwLHk9eStNYXRoLmltdWwoTmUsdnQpfDAscD0ocD1wK01hdGguaW11bChOZSxHdCl8MCkrTWF0aC5pbXVsKExlLHZ0KXwwLFM9UytNYXRoLmltdWwoTGUsR3QpfDA7dmFyIEJyPShtZSsoeT15K01hdGguaW11bChUZSx6dCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVs'@;
put 'KFRlLE1uKXwwKStNYXRoLmltdWwoUGUsenQpfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKFBlLE1uKXwwKSsocD4+PjEzKXwwKSsoQnI+Pj4yNil8MCxCciY9NjcxMDg4NjMseT1NYXRoLmltdWwoY3Qsb24pLHA9KHA9TWF0aC5pbXVsKGN0LCRuKSkrTWF0aC5pbXVsKE90LG9uKXww'@;
put 'LFM9TWF0aC5pbXVsKE90LCRuKSx5PXkrTWF0aC5pbXVsKERlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUscG4pfDApK01hdGguaW11bCgkZSxwdCl8MCxTPVMrTWF0aC5pbXVsKCRlLHBuKXwwLHk9eStNYXRoLmltdWwocWUsQ3QpfDAscD0ocD1wK01hdGguaW11bChxZSxlbil8MCkrTWF0'@;
put 'aC5pbXVsKGh0LEN0KXwwLFM9UytNYXRoLmltdWwoaHQsZW4pfDAseT15K01hdGguaW11bChPZSxWdCl8MCxwPShwPXArTWF0aC5pbXVsKE9lLF9uKXwwKStNYXRoLmltdWwoZXQsVnQpfDAsUz1TK01hdGguaW11bChldCxfbil8MCx5PXkrTWF0aC5pbXVsKEtlLEl0KXwwLHA9KHA9cCtNYXRo'@;
put 'LmltdWwoS2Usbm4pfDApK01hdGguaW11bCh3ZSxJdCl8MCxTPVMrTWF0aC5pbXVsKHdlLG5uKXwwLHk9eStNYXRoLmltdWwoSGUsdnQpfDAscD0ocD1wK01hdGguaW11bChIZSxHdCl8MCkrTWF0aC5pbXVsKFFlLHZ0KXwwLFM9UytNYXRoLmltdWwoUWUsR3QpfDAseT15K01hdGguaW11bChO'@;
put 'ZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKE5lLE1uKXwwKStNYXRoLmltdWwoTGUsenQpfDAsUz1TK01hdGguaW11bChMZSxNbil8MDt2YXIgSmk9KG1lKyh5PXkrTWF0aC5pbXVsKFRlLHNuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoVGUsQm4pfDApK01hdGguaW11bChQZSxz'@;
put 'bil8MCkpPDwxMyl8MDttZT0oKFM9UytNYXRoLmltdWwoUGUsQm4pfDApKyhwPj4+MTMpfDApKyhKaT4+PjI2KXwwLEppJj02NzEwODg2Myx5PU1hdGguaW11bChBdCxvbikscD0ocD1NYXRoLmltdWwoQXQsJG4pKStNYXRoLmltdWwoSnQsb24pfDAsUz1NYXRoLmltdWwoSnQsJG4pLHk9eStN'@;
put 'YXRoLmltdWwoY3QscHQpfDAscD0ocD1wK01hdGguaW11bChjdCxwbil8MCkrTWF0aC5pbXVsKE90LHB0KXwwLFM9UytNYXRoLmltdWwoT3QscG4pfDAseT15K01hdGguaW11bChEZSxDdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLGVuKXwwKStNYXRoLmltdWwoJGUsQ3QpfDAsUz1TK01hdGgu'@;
put 'aW11bCgkZSxlbil8MCx5PXkrTWF0aC5pbXVsKHFlLFZ0KXwwLHA9KHA9cCtNYXRoLmltdWwocWUsX24pfDApK01hdGguaW11bChodCxWdCl8MCxTPVMrTWF0aC5pbXVsKGh0LF9uKXwwLHk9eStNYXRoLmltdWwoT2UsSXQpfDAscD0ocD1wK01hdGguaW11bChPZSxubil8MCkrTWF0aC5pbXVs'@;
put 'KGV0LEl0KXwwLFM9UytNYXRoLmltdWwoZXQsbm4pfDAseT15K01hdGguaW11bChLZSx2dCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLEd0KXwwKStNYXRoLmltdWwod2UsdnQpfDAsUz1TK01hdGguaW11bCh3ZSxHdCl8MCx5PXkrTWF0aC5pbXVsKEhlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwo'@;
put 'SGUsTW4pfDApK01hdGguaW11bChRZSx6dCl8MCxTPVMrTWF0aC5pbXVsKFFlLE1uKXwwLHk9eStNYXRoLmltdWwoTmUsc24pfDAscD0ocD1wK01hdGguaW11bChOZSxCbil8MCkrTWF0aC5pbXVsKExlLHNuKXwwLFM9UytNYXRoLmltdWwoTGUsQm4pfDA7dmFyIHRvPShtZSsoeT15K01hdGgu'@;
put 'aW11bChUZSxxdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFRlLEhuKXwwKStNYXRoLmltdWwoUGUscXQpfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKFBlLEhuKXwwKSsocD4+PjEzKXwwKSsodG8+Pj4yNil8MCx0byY9NjcxMDg4NjMseT1NYXRoLmltdWwoTnQsb24p'@;
put 'LHA9KHA9TWF0aC5pbXVsKE50LCRuKSkrTWF0aC5pbXVsKGJuLG9uKXwwLFM9TWF0aC5pbXVsKGJuLCRuKSx5PXkrTWF0aC5pbXVsKEF0LHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoQXQscG4pfDApK01hdGguaW11bChKdCxwdCl8MCxTPVMrTWF0aC5pbXVsKEp0LHBuKXwwLHk9eStNYXRoLmlt'@;
put 'dWwoY3QsQ3QpfDAscD0ocD1wK01hdGguaW11bChjdCxlbil8MCkrTWF0aC5pbXVsKE90LEN0KXwwLFM9UytNYXRoLmltdWwoT3QsZW4pfDAseT15K01hdGguaW11bChEZSxWdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLF9uKXwwKStNYXRoLmltdWwoJGUsVnQpfDAsUz1TK01hdGguaW11bCgk'@;
put 'ZSxfbil8MCx5PXkrTWF0aC5pbXVsKHFlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwocWUsbm4pfDApK01hdGguaW11bChodCxJdCl8MCxTPVMrTWF0aC5pbXVsKGh0LG5uKXwwLHk9eStNYXRoLmltdWwoT2UsdnQpfDAscD0ocD1wK01hdGguaW11bChPZSxHdCl8MCkrTWF0aC5pbXVsKGV0LHZ0'@;
put 'KXwwLFM9UytNYXRoLmltdWwoZXQsR3QpfDAseT15K01hdGguaW11bChLZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLE1uKXwwKStNYXRoLmltdWwod2UsenQpfDAsUz1TK01hdGguaW11bCh3ZSxNbil8MCx5PXkrTWF0aC5pbXVsKEhlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoSGUsQm4p'@;
put 'fDApK01hdGguaW11bChRZSxzbil8MCxTPVMrTWF0aC5pbXVsKFFlLEJuKXwwLHk9eStNYXRoLmltdWwoTmUscXQpfDAscD0ocD1wK01hdGguaW11bChOZSxIbil8MCkrTWF0aC5pbXVsKExlLHF0KXwwLFM9UytNYXRoLmltdWwoTGUsSG4pfDA7dmFyIGNvPShtZSsoeT15K01hdGguaW11bChU'@;
put 'ZSxjbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFRlLGpuKXwwKStNYXRoLmltdWwoUGUsY24pfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKFBlLGpuKXwwKSsocD4+PjEzKXwwKSsoY28+Pj4yNil8MCxjbyY9NjcxMDg4NjMseT1NYXRoLmltdWwoTnQscHQpLHA9KHA9'@;
put 'TWF0aC5pbXVsKE50LHBuKSkrTWF0aC5pbXVsKGJuLHB0KXwwLFM9TWF0aC5pbXVsKGJuLHBuKSx5PXkrTWF0aC5pbXVsKEF0LEN0KXwwLHA9KHA9cCtNYXRoLmltdWwoQXQsZW4pfDApK01hdGguaW11bChKdCxDdCl8MCxTPVMrTWF0aC5pbXVsKEp0LGVuKXwwLHk9eStNYXRoLmltdWwoY3Qs'@;
put 'VnQpfDAscD0ocD1wK01hdGguaW11bChjdCxfbil8MCkrTWF0aC5pbXVsKE90LFZ0KXwwLFM9UytNYXRoLmltdWwoT3QsX24pfDAseT15K01hdGguaW11bChEZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLG5uKXwwKStNYXRoLmltdWwoJGUsSXQpfDAsUz1TK01hdGguaW11bCgkZSxubil8'@;
put 'MCx5PXkrTWF0aC5pbXVsKHFlLHZ0KXwwLHA9KHA9cCtNYXRoLmltdWwocWUsR3QpfDApK01hdGguaW11bChodCx2dCl8MCxTPVMrTWF0aC5pbXVsKGh0LEd0KXwwLHk9eStNYXRoLmltdWwoT2UsenQpfDAscD0ocD1wK01hdGguaW11bChPZSxNbil8MCkrTWF0aC5pbXVsKGV0LHp0KXwwLFM9'@;
put 'UytNYXRoLmltdWwoZXQsTW4pfDAseT15K01hdGguaW11bChLZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKEtlLEJuKXwwKStNYXRoLmltdWwod2Usc24pfDAsUz1TK01hdGguaW11bCh3ZSxCbil8MCx5PXkrTWF0aC5pbXVsKEhlLHF0KXwwLHA9KHA9cCtNYXRoLmltdWwoSGUsSG4pfDApK01h'@;
put 'dGguaW11bChRZSxxdCl8MCxTPVMrTWF0aC5pbXVsKFFlLEhuKXwwO3ZhciBsbz0obWUrKHk9eStNYXRoLmltdWwoTmUsY24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChOZSxqbil8MCkrTWF0aC5pbXVsKExlLGNuKXwwKSk8PDEzKXwwO21lPSgoUz1TK01hdGguaW11bChMZSxq'@;
put 'bil8MCkrKHA+Pj4xMyl8MCkrKGxvPj4+MjYpfDAsbG8mPTY3MTA4ODYzLHk9TWF0aC5pbXVsKE50LEN0KSxwPShwPU1hdGguaW11bChOdCxlbikpK01hdGguaW11bChibixDdCl8MCxTPU1hdGguaW11bChibixlbikseT15K01hdGguaW11bChBdCxWdCl8MCxwPShwPXArTWF0aC5pbXVsKEF0'@;
put 'LF9uKXwwKStNYXRoLmltdWwoSnQsVnQpfDAsUz1TK01hdGguaW11bChKdCxfbil8MCx5PXkrTWF0aC5pbXVsKGN0LEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoY3Qsbm4pfDApK01hdGguaW11bChPdCxJdCl8MCxTPVMrTWF0aC5pbXVsKE90LG5uKXwwLHk9eStNYXRoLmltdWwoRGUsdnQpfDAs'@;
put 'cD0ocD1wK01hdGguaW11bChEZSxHdCl8MCkrTWF0aC5pbXVsKCRlLHZ0KXwwLFM9UytNYXRoLmltdWwoJGUsR3QpfDAseT15K01hdGguaW11bChxZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKHFlLE1uKXwwKStNYXRoLmltdWwoaHQsenQpfDAsUz1TK01hdGguaW11bChodCxNbil8MCx5PXkr'@;
put 'TWF0aC5pbXVsKE9lLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoT2UsQm4pfDApK01hdGguaW11bChldCxzbil8MCxTPVMrTWF0aC5pbXVsKGV0LEJuKXwwLHk9eStNYXRoLmltdWwoS2UscXQpfDAscD0ocD1wK01hdGguaW11bChLZSxIbil8MCkrTWF0aC5pbXVsKHdlLHF0KXwwLFM9UytNYXRo'@;
put 'LmltdWwod2UsSG4pfDA7dmFyIHNvPShtZSsoeT15K01hdGguaW11bChIZSxjbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKEhlLGpuKXwwKStNYXRoLmltdWwoUWUsY24pfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKFFlLGpuKXwwKSsocD4+PjEzKXwwKSsoc28+Pj4y'@;
put 'Nil8MCxzbyY9NjcxMDg4NjMseT1NYXRoLmltdWwoTnQsVnQpLHA9KHA9TWF0aC5pbXVsKE50LF9uKSkrTWF0aC5pbXVsKGJuLFZ0KXwwLFM9TWF0aC5pbXVsKGJuLF9uKSx5PXkrTWF0aC5pbXVsKEF0LEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoQXQsbm4pfDApK01hdGguaW11bChKdCxJdCl8'@;
put 'MCxTPVMrTWF0aC5pbXVsKEp0LG5uKXwwLHk9eStNYXRoLmltdWwoY3QsdnQpfDAscD0ocD1wK01hdGguaW11bChjdCxHdCl8MCkrTWF0aC5pbXVsKE90LHZ0KXwwLFM9UytNYXRoLmltdWwoT3QsR3QpfDAseT15K01hdGguaW11bChEZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKERlLE1uKXww'@;
put 'KStNYXRoLmltdWwoJGUsenQpfDAsUz1TK01hdGguaW11bCgkZSxNbil8MCx5PXkrTWF0aC5pbXVsKHFlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwocWUsQm4pfDApK01hdGguaW11bChodCxzbil8MCxTPVMrTWF0aC5pbXVsKGh0LEJuKXwwLHk9eStNYXRoLmltdWwoT2UscXQpfDAscD0ocD1w'@;
put 'K01hdGguaW11bChPZSxIbil8MCkrTWF0aC5pbXVsKGV0LHF0KXwwLFM9UytNYXRoLmltdWwoZXQsSG4pfDA7dmFyIFhpPShtZSsoeT15K01hdGguaW11bChLZSxjbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKEtlLGpuKXwwKStNYXRoLmltdWwod2UsY24pfDApKTw8MTMpfDA7'@;
put 'bWU9KChTPVMrTWF0aC5pbXVsKHdlLGpuKXwwKSsocD4+PjEzKXwwKSsoWGk+Pj4yNil8MCxYaSY9NjcxMDg4NjMseT1NYXRoLmltdWwoTnQsSXQpLHA9KHA9TWF0aC5pbXVsKE50LG5uKSkrTWF0aC5pbXVsKGJuLEl0KXwwLFM9TWF0aC5pbXVsKGJuLG5uKSx5PXkrTWF0aC5pbXVsKEF0LHZ0'@;
put 'KXwwLHA9KHA9cCtNYXRoLmltdWwoQXQsR3QpfDApK01hdGguaW11bChKdCx2dCl8MCxTPVMrTWF0aC5pbXVsKEp0LEd0KXwwLHk9eStNYXRoLmltdWwoY3QsenQpfDAscD0ocD1wK01hdGguaW11bChjdCxNbil8MCkrTWF0aC5pbXVsKE90LHp0KXwwLFM9UytNYXRoLmltdWwoT3QsTW4pfDAs'@;
put 'eT15K01hdGguaW11bChEZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKERlLEJuKXwwKStNYXRoLmltdWwoJGUsc24pfDAsUz1TK01hdGguaW11bCgkZSxCbil8MCx5PXkrTWF0aC5pbXVsKHFlLHF0KXwwLHA9KHA9cCtNYXRoLmltdWwocWUsSG4pfDApK01hdGguaW11bChodCxxdCl8MCxTPVMr'@;
put 'TWF0aC5pbXVsKGh0LEhuKXwwO3ZhciBwbz0obWUrKHk9eStNYXRoLmltdWwoT2UsY24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChPZSxqbil8MCkrTWF0aC5pbXVsKGV0LGNuKXwwKSk8PDEzKXwwO21lPSgoUz1TK01hdGguaW11bChldCxqbil8MCkrKHA+Pj4xMyl8MCkrKHBv'@;
put 'Pj4+MjYpfDAscG8mPTY3MTA4ODYzLHk9TWF0aC5pbXVsKE50LHZ0KSxwPShwPU1hdGguaW11bChOdCxHdCkpK01hdGguaW11bChibix2dCl8MCxTPU1hdGguaW11bChibixHdCkseT15K01hdGguaW11bChBdCx6dCl8MCxwPShwPXArTWF0aC5pbXVsKEF0LE1uKXwwKStNYXRoLmltdWwoSnQs'@;
put 'enQpfDAsUz1TK01hdGguaW11bChKdCxNbil8MCx5PXkrTWF0aC5pbXVsKGN0LHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoY3QsQm4pfDApK01hdGguaW11bChPdCxzbil8MCxTPVMrTWF0aC5pbXVsKE90LEJuKXwwLHk9eStNYXRoLmltdWwoRGUscXQpfDAscD0ocD1wK01hdGguaW11bChEZSxI'@;
put 'bil8MCkrTWF0aC5pbXVsKCRlLHF0KXwwLFM9UytNYXRoLmltdWwoJGUsSG4pfDA7dmFyIF9yPShtZSsoeT15K01hdGguaW11bChxZSxjbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKHFlLGpuKXwwKStNYXRoLmltdWwoaHQsY24pfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5p'@;
put 'bXVsKGh0LGpuKXwwKSsocD4+PjEzKXwwKSsoX3I+Pj4yNil8MCxfciY9NjcxMDg4NjMseT1NYXRoLmltdWwoTnQsenQpLHA9KHA9TWF0aC5pbXVsKE50LE1uKSkrTWF0aC5pbXVsKGJuLHp0KXwwLFM9TWF0aC5pbXVsKGJuLE1uKSx5PXkrTWF0aC5pbXVsKEF0LHNuKXwwLHA9KHA9cCtNYXRo'@;
put 'LmltdWwoQXQsQm4pfDApK01hdGguaW11bChKdCxzbil8MCxTPVMrTWF0aC5pbXVsKEp0LEJuKXwwLHk9eStNYXRoLmltdWwoY3QscXQpfDAscD0ocD1wK01hdGguaW11bChjdCxIbil8MCkrTWF0aC5pbXVsKE90LHF0KXwwLFM9UytNYXRoLmltdWwoT3QsSG4pfDA7dmFyIEZpPShtZSsoeT15'@;
put 'K01hdGguaW11bChEZSxjbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKERlLGpuKXwwKStNYXRoLmltdWwoJGUsY24pfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKCRlLGpuKXwwKSsocD4+PjEzKXwwKSsoRmk+Pj4yNil8MCxGaSY9NjcxMDg4NjMseT1NYXRoLmltdWwo'@;
put 'TnQsc24pLHA9KHA9TWF0aC5pbXVsKE50LEJuKSkrTWF0aC5pbXVsKGJuLHNuKXwwLFM9TWF0aC5pbXVsKGJuLEJuKSx5PXkrTWF0aC5pbXVsKEF0LHF0KXwwLHA9KHA9cCtNYXRoLmltdWwoQXQsSG4pfDApK01hdGguaW11bChKdCxxdCl8MCxTPVMrTWF0aC5pbXVsKEp0LEhuKXwwO3ZhciBI'@;
put 'bz0obWUrKHk9eStNYXRoLmltdWwoY3QsY24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChjdCxqbil8MCkrTWF0aC5pbXVsKE90LGNuKXwwKSk8PDEzKXwwO21lPSgoUz1TK01hdGguaW11bChPdCxqbil8MCkrKHA+Pj4xMyl8MCkrKEhvPj4+MjYpfDAsSG8mPTY3MTA4ODYzLHk9'@;
put 'TWF0aC5pbXVsKE50LHF0KSxwPShwPU1hdGguaW11bChOdCxIbikpK01hdGguaW11bChibixxdCl8MCxTPU1hdGguaW11bChibixIbik7dmFyIGdhPShtZSsoeT15K01hdGguaW11bChBdCxjbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKEF0LGpuKXwwKStNYXRoLmltdWwoSnQs'@;
put 'Y24pfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKEp0LGpuKXwwKSsocD4+PjEzKXwwKSsoZ2E+Pj4yNil8MCxnYSY9NjcxMDg4NjM7dmFyIGxhPShtZSsoeT1NYXRoLmltdWwoTnQsY24pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKE50LGpuKSkrTWF0aC5pbXVsKGJuLGNuKXww'@;
put 'KSk8PDEzKXwwO3JldHVybiBtZT0oKFM9TWF0aC5pbXVsKGJuLGpuKSkrKHA+Pj4xMyl8MCkrKGxhPj4+MjYpfDAsbGEmPTY3MTA4ODYzLGZlWzBdPVhyLGZlWzFdPXZpLGZlWzJdPUVyLGZlWzNdPVlpLGZlWzRdPUpyLGZlWzVdPWFvLGZlWzZdPUJyLGZlWzddPUppLGZlWzhdPXRvLGZlWzld'@;
put 'PWNvLGZlWzEwXT1sbyxmZVsxMV09c28sZmVbMTJdPVhpLGZlWzEzXT1wbyxmZVsxNF09X3IsZmVbMTVdPUZpLGZlWzE2XT1IbyxmZVsxN109Z2EsZmVbMThdPWxhLDAhPT1tZSYmKGZlWzE5XT1tZSxNLmxlbmd0aCsrKSxNfTtmdW5jdGlvbiBpZShnLEMsTSl7cmV0dXJuKG5ldyBsZSkubXVs'@;
put 'cChnLEMsTSl9ZnVuY3Rpb24gbGUoZyxDKXt0aGlzLng9Zyx0aGlzLnk9Q31NYXRoLmltdWx8fChuZT10ZSksRS5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oZyxDKXt2YXIgeT10aGlzLmxlbmd0aCtnLmxlbmd0aDtyZXR1cm4gMTA9PT10aGlzLmxlbmd0aCYmMTA9PT1nLmxlbmd0aD9uZSh0'@;
put 'aGlzLGcsQyk6eTw2Mz90ZSh0aGlzLGcsQyk6eTwxMDI0P2Z1bmN0aW9uKHAsUyxRKXtRLm5lZ2F0aXZlPVMubmVnYXRpdmVecC5uZWdhdGl2ZSxRLmxlbmd0aD1wLmxlbmd0aCtTLmxlbmd0aDtmb3IodmFyIHJlPTAsZmU9MCxtZT0wO21lPFEubGVuZ3RoLTE7bWUrKyl7dmFyIGtlPWZlO2Zl'@;
put 'PTA7Zm9yKHZhciBUZT02NzEwODg2MyZyZSxQZT1NYXRoLm1pbihtZSxTLmxlbmd0aC0xKSxGZT1NYXRoLm1heCgwLG1lLXAubGVuZ3RoKzEpO0ZlPD1QZTtGZSsrKXt2YXIgTGU9KDB8cC53b3Jkc1ttZS1GZV0pKigwfFMud29yZHNbRmVdKSxCZT02NzEwODg2MyZMZTtUZT02NzEwODg2MyYo'@;
put 'QmU9QmUrVGV8MCksZmUrPShrZT0oa2U9a2UrKExlLzY3MTA4ODY0fDApfDApKyhCZT4+PjI2KXwwKT4+PjI2LGtlJj02NzEwODg2M31RLndvcmRzW21lXT1UZSxyZT1rZSxrZT1mZX1yZXR1cm4gMCE9PXJlP1Eud29yZHNbbWVdPXJlOlEubGVuZ3RoLS0sUS5zdHJpcCgpfSh0aGlzLGcsQyk6'@;
put 'aWUodGhpcyxnLEMpfSxsZS5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihnKXtmb3IodmFyIEM9bmV3IEFycmF5KGcpLE09RS5wcm90b3R5cGUuX2NvdW50Qml0cyhnKS0xLHk9MDt5PGc7eSsrKUNbeV09dGhpcy5yZXZCaW4oeSxNLGcpO3JldHVybiBDfSxsZS5wcm90b3R5cGUucmV2Qmlu'@;
put 'PWZ1bmN0aW9uKGcsQyxNKXtpZigwPT09Z3x8Zz09PU0tMSlyZXR1cm4gZztmb3IodmFyIHk9MCxwPTA7cDxDO3ArKyl5fD0oMSZnKTw8Qy1wLTEsZz4+PTE7cmV0dXJuIHl9LGxlLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKGcsQyxNLHkscCxTKXtmb3IodmFyIFE9MDtRPFM7USsrKXlb'@;
put 'UV09Q1tnW1FdXSxwW1FdPU1bZ1tRXV19LGxlLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oZyxDLE0seSxwLFMpe3RoaXMucGVybXV0ZShTLGcsQyxNLHkscCk7Zm9yKHZhciBRPTE7UTxwO1E8PD0xKWZvcih2YXIgcmU9UTw8MSxmZT1NYXRoLmNvcygyKk1hdGguUEkvcmUpLG1lPU1h'@;
put 'dGguc2luKDIqTWF0aC5QSS9yZSksa2U9MDtrZTxwO2tlKz1yZSlmb3IodmFyIFRlPWZlLFBlPW1lLEZlPTA7RmU8UTtGZSsrKXt2YXIgTmU9TVtrZStGZV0sTGU9eVtrZStGZV0sQmU9TVtrZStGZStRXSxIZT15W2tlK0ZlK1FdLFFlPVRlKkJlLVBlKkhlO0hlPVRlKkhlK1BlKkJlLE1ba2Ur'@;
put 'RmVdPU5lKyhCZT1RZSkseVtrZStGZV09TGUrSGUsTVtrZStGZStRXT1OZS1CZSx5W2tlK0ZlK1FdPUxlLUhlLEZlIT09cmUmJihRZT1mZSpUZS1tZSpQZSxQZT1mZSpQZSttZSpUZSxUZT1RZSl9fSxsZS5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oZyxDKXt2YXIgTT0xfE1hdGgu'@;
put 'bWF4KEMsZykseT0xJk0scD0wO2ZvcihNPU0vMnwwO007TT4+Pj0xKXArKztyZXR1cm4gMTw8cCsxK3l9LGxlLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oZyxDLE0pe2lmKCEoTTw9MSkpZm9yKHZhciB5PTA7eTxNLzI7eSsrKXt2YXIgcD1nW3ldO2dbeV09Z1tNLXktMV0sZ1tNLXkt'@;
put 'MV09cCxwPUNbeV0sQ1t5XT0tQ1tNLXktMV0sQ1tNLXktMV09LXB9fSxsZS5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKGcsQyl7Zm9yKHZhciBNPTAseT0wO3k8Qy8yO3krKyl7dmFyIHA9ODE5MipNYXRoLnJvdW5kKGdbMip5KzFdL0MpK01hdGgucm91bmQoZ1syKnldL0MpK007'@;
put 'Z1t5XT02NzEwODg2MyZwLE09cDw2NzEwODg2ND8wOnAvNjcxMDg4NjR8MH1yZXR1cm4gZ30sbGUucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oZyxDLE0seSl7Zm9yKHZhciBwPTAsUz0wO1M8QztTKyspTVsyKlNdPTgxOTEmKHArPTB8Z1tTXSksTVsyKlMrMV09ODE5MSYocD4+Pj0x'@;
put 'MykscD4+Pj0xMztmb3IoUz0yKkM7Uzx5OysrUylNW1NdPTA7SSgwPT09cCksSSgwPT0oLTgxOTImcCkpfSxsZS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihnKXtmb3IodmFyIEM9bmV3IEFycmF5KGcpLE09MDtNPGc7TSsrKUNbTV09MDtyZXR1cm4gQ30sbGUucHJvdG90eXBlLm11bHA9ZnVu'@;
put 'Y3Rpb24oZyxDLE0pe3ZhciB5PTIqdGhpcy5ndWVzc0xlbjEzYihnLmxlbmd0aCxDLmxlbmd0aCkscD10aGlzLm1ha2VSQlQoeSksUz10aGlzLnN0dWIoeSksUT1uZXcgQXJyYXkoeSkscmU9bmV3IEFycmF5KHkpLGZlPW5ldyBBcnJheSh5KSxtZT1uZXcgQXJyYXkoeSksa2U9bmV3IEFycmF5'@;
put 'KHkpLFRlPW5ldyBBcnJheSh5KSxQZT1NLndvcmRzO1BlLmxlbmd0aD15LHRoaXMuY29udmVydDEzYihnLndvcmRzLGcubGVuZ3RoLFEseSksdGhpcy5jb252ZXJ0MTNiKEMud29yZHMsQy5sZW5ndGgsbWUseSksdGhpcy50cmFuc2Zvcm0oUSxTLHJlLGZlLHkscCksdGhpcy50cmFuc2Zvcm0o'@;
put 'bWUsUyxrZSxUZSx5LHApO2Zvcih2YXIgRmU9MDtGZTx5O0ZlKyspe3ZhciBOZT1yZVtGZV0qa2VbRmVdLWZlW0ZlXSpUZVtGZV07ZmVbRmVdPXJlW0ZlXSpUZVtGZV0rZmVbRmVdKmtlW0ZlXSxyZVtGZV09TmV9cmV0dXJuIHRoaXMuY29uanVnYXRlKHJlLGZlLHkpLHRoaXMudHJhbnNmb3Jt'@;
put 'KHJlLGZlLFBlLFMseSxwKSx0aGlzLmNvbmp1Z2F0ZShQZSxTLHkpLHRoaXMubm9ybWFsaXplMTNiKFBlLHkpLE0ubmVnYXRpdmU9Zy5uZWdhdGl2ZV5DLm5lZ2F0aXZlLE0ubGVuZ3RoPWcubGVuZ3RoK0MubGVuZ3RoLE0uc3RyaXAoKX0sRS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcpe3Zh'@;
put 'ciBDPW5ldyBFKG51bGwpO3JldHVybiBDLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksdGhpcy5tdWxUbyhnLEMpfSxFLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKGcpe3ZhciBDPW5ldyBFKG51bGwpO3JldHVybiBDLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtn'@;
put 'Lmxlbmd0aCksaWUodGhpcyxnLEMpfSxFLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oZyx0aGlzKX0sRS5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCk7Zm9yKHZhciBDPTAs'@;
put 'TT0wO008dGhpcy5sZW5ndGg7TSsrKXt2YXIgeT0oMHx0aGlzLndvcmRzW01dKSpnLHA9KDY3MTA4ODYzJnkpKyg2NzEwODg2MyZDKTtDPj49MjYsQys9eS82NzEwODg2NHwwLEMrPXA+Pj4yNix0aGlzLndvcmRzW01dPTY3MTA4ODYzJnB9cmV0dXJuIDAhPT1DJiYodGhpcy53b3Jkc1tNXT1D'@;
put 'LHRoaXMubGVuZ3RoKyspLHRoaXN9LEUucHJvdG90eXBlLm11bG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihnKX0sRS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxFLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSxFLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyl7dmFyIEM9ZnVuY3Rpb24oUyl7Zm9yKHZhciBRPW5ldyBBcnJheShTLmJpdExlbmd0aCgpKSxyZT0wO3JlPFEubGVuZ3RoO3JlKyspe3ZhciBtZT1yZSUyNjtRW3JlXT0oUy53b3Jkc1tyZS8yNnww'@;
put 'XSYxPDxtZSk+Pj5tZX1yZXR1cm4gUX0oZyk7aWYoMD09PUMubGVuZ3RoKXJldHVybiBuZXcgRSgxKTtmb3IodmFyIE09dGhpcyx5PTA7eTxDLmxlbmd0aCYmMD09PUNbeV07eSsrLE09TS5zcXIoKSk7aWYoKyt5PEMubGVuZ3RoKWZvcih2YXIgcD1NLnNxcigpO3k8Qy5sZW5ndGg7eSsrLHA9'@;
put 'cC5zcXIoKSkwIT09Q1t5XSYmKE09TS5tdWwocCkpO3JldHVybiBNfSxFLnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBDLE09ZyUyNix5PShnLU0pLzI2LHA9NjcxMDg4NjM+Pj4yNi1NPDwyNi1NO2lmKDAhPT1NKXt2YXIgUz0w'@;
put 'O2ZvcihDPTA7Qzx0aGlzLmxlbmd0aDtDKyspe3ZhciBRPXRoaXMud29yZHNbQ10mcDt0aGlzLndvcmRzW0NdPSgwfHRoaXMud29yZHNbQ10pLVE8PE18UyxTPVE+Pj4yNi1NfVMmJih0aGlzLndvcmRzW0NdPVMsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PXkpe2ZvcihDPXRoaXMubGVuZ3RoLTE7'@;
put 'Qz49MDtDLS0pdGhpcy53b3Jkc1tDK3ldPXRoaXMud29yZHNbQ107Zm9yKEM9MDtDPHk7QysrKXRoaXMud29yZHNbQ109MDt0aGlzLmxlbmd0aCs9eX1yZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT09dGhpcy5uZWdhdGl2ZSks'@;
put 'dGhpcy5pdXNobG4oZyl9LEUucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihnLEMsTSl7dmFyIHk7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApLHk9Qz8oQy1DJTI2KS8yNjowO3ZhciBwPWclMjYsUz1NYXRoLm1pbigoZy1wKS8yNix0aGlzLmxlbmd0aCksUT02NzEwODg2M142NzEwODg2'@;
put 'Mz4+PnA8PHAscmU9TTtpZih5LT1TLHk9TWF0aC5tYXgoMCx5KSxyZSl7Zm9yKHZhciBmZT0wO2ZlPFM7ZmUrKylyZS53b3Jkc1tmZV09dGhpcy53b3Jkc1tmZV07cmUubGVuZ3RoPVN9aWYoMCE9PVMpaWYodGhpcy5sZW5ndGg+Uylmb3IodGhpcy5sZW5ndGgtPVMsZmU9MDtmZTx0aGlzLmxl'@;
put 'bmd0aDtmZSsrKXRoaXMud29yZHNbZmVdPXRoaXMud29yZHNbZmUrU107ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgbWU9MDtmb3IoZmU9dGhpcy5sZW5ndGgtMTtmZT49MCYmKDAhPT1tZXx8ZmU+PXkpO2ZlLS0pe3ZhciBrZT0wfHRoaXMud29yZHNbZmVdO3RoaXMu'@;
put 'd29yZHNbZmVdPW1lPDwyNi1wfGtlPj4+cCxtZT1rZSZRfXJldHVybiByZSYmMCE9PW1lJiYocmUud29yZHNbcmUubGVuZ3RoKytdPW1lKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pc2hybj1mdW5j'@;
put 'dGlvbihnLEMsTSl7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKGcsQyxNKX0sRS5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKGcpfSxFLnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9u'@;
put 'ZSgpLml1c2hsbihnKX0sRS5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKGcpfSxFLnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihnKX0sRS5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24oZyl7'@;
put 'SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBDPWclMjYsTT0oZy1DKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD1NfHwhKHRoaXMud29yZHNbTV0mMTw8QykpfSxFLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBDPWcl'@;
put 'MjYsTT0oZy1DKS8yNjtyZXR1cm4gSSgwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PU0/dGhpczooMCE9PUMmJk0rKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihNLHRoaXMubGVuZ3RoKSwwIT09QyYmKHRoaXMu'@;
put 'd29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+Qzw8QyksdGhpcy5zdHJpcCgpKX0sRS5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oZyl9LEUucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKGcpe3JldHVybiBJKCJu'@;
put 'dW1iZXIiPT10eXBlb2YgZyksSShnPDY3MTA4ODY0KSxnPDA/dGhpcy5pc3VibigtZyk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxnPyh0aGlzLndvcmRzWzBdPWctKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0'@;
put 'aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4oZyl9LEUucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihnKXt0aGlzLndvcmRzWzBdKz1nO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbQ10+PTY3MTA4ODY0'@;
put 'O0MrKyl0aGlzLndvcmRzW0NdLT02NzEwODg2NCxDPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW0MrMV09MTp0aGlzLndvcmRzW0MrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsQysxKSx0aGlzfSxFLnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihnKXtp'@;
put 'ZihJKCJudW1iZXIiPT10eXBlb2YgZyksSShnPDY3MTA4ODY0KSxnPDApcmV0dXJuIHRoaXMuaWFkZG4oLWcpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1nLDE9'@;
put 'PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tDXTwwO0MrKyl0aGlzLndvcmRzW0NdKz02NzEwODg2NCx0aGlzLndvcmRzW0Mr'@;
put 'MV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKGcpfSxFLnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4oZyl9LEUucHJvdG90eXBlLmlhYnM9ZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LEUucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSxFLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oZyxDLE0pe3ZhciB5LHA7dGhpcy5fZXhwYW5kKGcubGVuZ3RoK00p'@;
put 'O3ZhciBRPTA7Zm9yKHk9MDt5PGcubGVuZ3RoO3krKyl7cD0oMHx0aGlzLndvcmRzW3krTV0pK1E7dmFyIHJlPSgwfGcud29yZHNbeV0pKkM7UT0oKHAtPTY3MTA4ODYzJnJlKT4+MjYpLShyZS82NzEwODg2NHwwKSx0aGlzLndvcmRzW3krTV09NjcxMDg4NjMmcH1mb3IoO3k8dGhpcy5sZW5n'@;
put 'dGgtTTt5KyspUT0ocD0oMHx0aGlzLndvcmRzW3krTV0pK1EpPj4yNix0aGlzLndvcmRzW3krTV09NjcxMDg4NjMmcDtpZigwPT09USlyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihJKC0xPT09USksUT0wLHk9MDt5PHRoaXMubGVuZ3RoO3krKylRPShwPS0oMHx0aGlzLndvcmRzW3ldKStRKT4+'@;
put 'MjYsdGhpcy53b3Jkc1t5XT02NzEwODg2MyZwO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihnLEMpe3ZhciBNLHk9dGhpcy5jbG9uZSgpLHA9ZyxTPTB8cC53b3Jkc1twLmxlbmd0aC0xXTswIT0oTT0yNi10aGlzLl9j'@;
put 'b3VudEJpdHMoUykpJiYocD1wLnVzaGxuKE0pLHkuaXVzaGxuKE0pLFM9MHxwLndvcmRzW3AubGVuZ3RoLTFdKTt2YXIgUSxyZT15Lmxlbmd0aC1wLmxlbmd0aDtpZigibW9kIiE9PUMpeyhRPW5ldyBFKG51bGwpKS5sZW5ndGg9cmUrMSxRLndvcmRzPW5ldyBBcnJheShRLmxlbmd0aCk7Zm9y'@;
put 'KHZhciBmZT0wO2ZlPFEubGVuZ3RoO2ZlKyspUS53b3Jkc1tmZV09MH12YXIgbWU9eS5jbG9uZSgpLl9pc2hsbnN1Ym11bChwLDEscmUpOzA9PT1tZS5uZWdhdGl2ZSYmKHk9bWUsUSYmKFEud29yZHNbcmVdPTEpKTtmb3IodmFyIGtlPXJlLTE7a2U+PTA7a2UtLSl7dmFyIFRlPTY3MTA4ODY0'@;
put 'KigwfHkud29yZHNbcC5sZW5ndGgra2VdKSsoMHx5LndvcmRzW3AubGVuZ3RoK2tlLTFdKTtmb3IoVGU9TWF0aC5taW4oVGUvU3wwLDY3MTA4ODYzKSx5Ll9pc2hsbnN1Ym11bChwLFRlLGtlKTswIT09eS5uZWdhdGl2ZTspVGUtLSx5Lm5lZ2F0aXZlPTAseS5faXNobG5zdWJtdWwocCwxLGtl'@;
put 'KSx5LmlzWmVybygpfHwoeS5uZWdhdGl2ZV49MSk7USYmKFEud29yZHNba2VdPVRlKX1yZXR1cm4gUSYmUS5zdHJpcCgpLHkuc3RyaXAoKSwiZGl2IiE9PUMmJjAhPT1NJiZ5Lml1c2hybihNKSx7ZGl2OlF8fG51bGwsbW9kOnl9fSxFLnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24oZyxDLE0p'@;
put 'e3JldHVybiBJKCFnLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IEUoMCksbW9kOm5ldyBFKDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmU/KFM9dGhpcy5uZWcoKS5kaXZtb2QoZyxDKSwibW9kIiE9PUMmJih5PVMuZGl2Lm5lZygpKSwiZGl2IiE9PUMmJihw'@;
put 'PVMubW9kLm5lZygpLE0mJjAhPT1wLm5lZ2F0aXZlJiZwLmlhZGQoZykpLHtkaXY6eSxtb2Q6cH0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZT8oUz10aGlzLmRpdm1vZChnLm5lZygpLEMpLCJtb2QiIT09QyYmKHk9Uy5kaXYubmVnKCkpLHtkaXY6eSxtb2Q6Uy5tb2R9KTp0'@;
put 'aGlzLm5lZ2F0aXZlJmcubmVnYXRpdmU/KFM9dGhpcy5uZWcoKS5kaXZtb2QoZy5uZWcoKSxDKSwiZGl2IiE9PUMmJihwPVMubW9kLm5lZygpLE0mJjAhPT1wLm5lZ2F0aXZlJiZwLmlzdWIoZykpLHtkaXY6Uy5kaXYsbW9kOnB9KTpnLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAoZyk8'@;
put 'MD97ZGl2Om5ldyBFKDApLG1vZDp0aGlzfToxPT09Zy5sZW5ndGg/ImRpdiI9PT1DP3tkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PUM/e2RpdjpudWxsLG1vZDpuZXcgRSh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBd'@;
put 'KSxtb2Q6bmV3IEUodGhpcy5tb2RuKGcud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihnLEMpO3ZhciB5LHAsU30sRS5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJkaXYiLCExKS5kaXZ9LEUucHJvdG90eXBlLm1vZD1mdW5jdGlvbihnKXtyZXR1cm4g'@;
put 'dGhpcy5kaXZtb2QoZywibW9kIiwhMSkubW9kfSxFLnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJtb2QiLCEwKS5tb2R9LEUucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKGcpe3ZhciBDPXRoaXMuZGl2bW9kKGcpO2lmKEMubW9kLmlzWmVybygp'@;
put 'KXJldHVybiBDLmRpdjt2YXIgTT0wIT09Qy5kaXYubmVnYXRpdmU/Qy5tb2QuaXN1YihnKTpDLm1vZCx5PWcudXNocm4oMSkscD1nLmFuZGxuKDEpLFM9TS5jbXAoeSk7cmV0dXJuIFM8MHx8MT09PXAmJjA9PT1TP0MuZGl2OjAhPT1DLmRpdi5uZWdhdGl2ZT9DLmRpdi5pc3VibigxKTpDLmRp'@;
put 'di5pYWRkbigxKX0sRS5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihnKXtJKGc8PTY3MTA4ODYzKTtmb3IodmFyIEM9NjcxMDg4NjQlZyxNPTAseT10aGlzLmxlbmd0aC0xO3k+PTA7eS0tKU09KEMqTSsoMHx0aGlzLndvcmRzW3ldKSklZztyZXR1cm4gTX0sRS5wcm90b3R5cGUuaWRpdm49ZnVu'@;
put 'Y3Rpb24oZyl7SShnPD02NzEwODg2Myk7Zm9yKHZhciBDPTAsTT10aGlzLmxlbmd0aC0xO00+PTA7TS0tKXt2YXIgeT0oMHx0aGlzLndvcmRzW01dKSs2NzEwODg2NCpDO3RoaXMud29yZHNbTV09eS9nfDAsQz15JWd9cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuZGl2bj1mdW5j'@;
put 'dGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKGcpfSxFLnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKGcpe0koMD09PWcubmVnYXRpdmUpLEkoIWcuaXNaZXJvKCkpO3ZhciBDPXRoaXMsTT1nLmNsb25lKCk7Qz0wIT09Qy5uZWdhdGl2ZT9DLnVtb2QoZyk6Qy5jbG9uZSgpO2Zvcih2'@;
put 'YXIgeT1uZXcgRSgxKSxwPW5ldyBFKDApLFM9bmV3IEUoMCksUT1uZXcgRSgxKSxyZT0wO0MuaXNFdmVuKCkmJk0uaXNFdmVuKCk7KUMuaXVzaHJuKDEpLE0uaXVzaHJuKDEpLCsrcmU7Zm9yKHZhciBmZT1NLmNsb25lKCksbWU9Qy5jbG9uZSgpOyFDLmlzWmVybygpOyl7Zm9yKHZhciBrZT0w'@;
put 'LFRlPTE7IShDLndvcmRzWzBdJlRlKSYma2U8MjY7KytrZSxUZTw8PTEpO2lmKGtlPjApZm9yKEMuaXVzaHJuKGtlKTtrZS0tID4wOykoeS5pc09kZCgpfHxwLmlzT2RkKCkpJiYoeS5pYWRkKGZlKSxwLmlzdWIobWUpKSx5Lml1c2hybigxKSxwLml1c2hybigxKTtmb3IodmFyIFBlPTAsRmU9'@;
put 'MTshKE0ud29yZHNbMF0mRmUpJiZQZTwyNjsrK1BlLEZlPDw9MSk7aWYoUGU+MClmb3IoTS5pdXNocm4oUGUpO1BlLS0gPjA7KShTLmlzT2RkKCl8fFEuaXNPZGQoKSkmJihTLmlhZGQoZmUpLFEuaXN1YihtZSkpLFMuaXVzaHJuKDEpLFEuaXVzaHJuKDEpO0MuY21wKE0pPj0wPyhDLmlzdWIo'@;
put 'TSkseS5pc3ViKFMpLHAuaXN1YihRKSk6KE0uaXN1YihDKSxTLmlzdWIoeSksUS5pc3ViKHApKX1yZXR1cm57YTpTLGI6USxnY2Q6TS5pdXNobG4ocmUpfX0sRS5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKGcpe0koMD09PWcubmVnYXRpdmUpLEkoIWcuaXNaZXJvKCkpO3ZhciBDPXRoaXMs'@;
put 'TT1nLmNsb25lKCk7Qz0wIT09Qy5uZWdhdGl2ZT9DLnVtb2QoZyk6Qy5jbG9uZSgpO2Zvcih2YXIgeSxwPW5ldyBFKDEpLFM9bmV3IEUoMCksUT1NLmNsb25lKCk7Qy5jbXBuKDEpPjAmJk0uY21wbigxKT4wOyl7Zm9yKHZhciByZT0wLGZlPTE7IShDLndvcmRzWzBdJmZlKSYmcmU8MjY7Kyty'@;
put 'ZSxmZTw8PTEpO2lmKHJlPjApZm9yKEMuaXVzaHJuKHJlKTtyZS0tID4wOylwLmlzT2RkKCkmJnAuaWFkZChRKSxwLml1c2hybigxKTtmb3IodmFyIG1lPTAsa2U9MTshKE0ud29yZHNbMF0ma2UpJiZtZTwyNjsrK21lLGtlPDw9MSk7aWYobWU+MClmb3IoTS5pdXNocm4obWUpO21lLS0gPjA7'@;
put 'KVMuaXNPZGQoKSYmUy5pYWRkKFEpLFMuaXVzaHJuKDEpO0MuY21wKE0pPj0wPyhDLmlzdWIoTSkscC5pc3ViKFMpKTooTS5pc3ViKEMpLFMuaXN1YihwKSl9cmV0dXJuKHk9MD09PUMuY21wbigxKT9wOlMpLmNtcG4oMCk8MCYmeS5pYWRkKGcpLHl9LEUucHJvdG90eXBlLmdjZD1mdW5jdGlv'@;
put 'bihnKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBnLmFicygpO2lmKGcuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIEM9dGhpcy5jbG9uZSgpLE09Zy5jbG9uZSgpO0MubmVnYXRpdmU9MCxNLm5lZ2F0aXZlPTA7Zm9yKHZhciB5PTA7Qy5pc0V2ZW4oKSYmTS5pc0V2ZW4oKTt5Kysp'@;
put 'Qy5pdXNocm4oMSksTS5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO0MuaXNFdmVuKCk7KUMuaXVzaHJuKDEpO2Zvcig7TS5pc0V2ZW4oKTspTS5pdXNocm4oMSk7dmFyIHA9Qy5jbXAoTSk7aWYocDwwKXt2YXIgUz1DO0M9TSxNPVN9ZWxzZSBpZigwPT09cHx8MD09PU0uY21wbigxKSlicmVhaztD'@;
put 'LmlzdWIoTSl9cmV0dXJuIE0uaXVzaGxuKHkpfSxFLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmVnY2QoZykuYS51bW9kKGcpfSxFLnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09KDEmdGhpcy53b3Jkc1swXSl9LEUucHJvdG90eXBlLmlzT2Rk'@;
put 'PWZ1bmN0aW9uKCl7cmV0dXJuIDE9PSgxJnRoaXMud29yZHNbMF0pfSxFLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZnfSxFLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyk7dmFyIEM9ZyUyNixNPShnLUMp'@;
put 'LzI2LHk9MTw8QztpZih0aGlzLmxlbmd0aDw9TSlyZXR1cm4gdGhpcy5fZXhwYW5kKE0rMSksdGhpcy53b3Jkc1tNXXw9eSx0aGlzO2Zvcih2YXIgcD15LFM9TTswIT09cCYmUzx0aGlzLmxlbmd0aDtTKyspe3ZhciBRPTB8dGhpcy53b3Jkc1tTXTtwPShRKz1wKT4+PjI2LHRoaXMud29yZHNb'@;
put 'U109USY9NjcxMDg4NjN9cmV0dXJuIDAhPT1wJiYodGhpcy53b3Jkc1tTXT1wLHRoaXMubGVuZ3RoKyspLHRoaXN9LEUucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxFLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9u'@;
put 'KGcpe3ZhciBDLE09ZzwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhTSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmTSlyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSlDPTE7ZWxzZXtNJiYoZz0tZyksSShnPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWci'@;
put 'KTt2YXIgeT0wfHRoaXMud29yZHNbMF07Qz15PT09Zz8wOnk8Zz8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1DOkN9LEUucHJvdG90eXBlLmNtcD1mdW5jdGlvbihnKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVn'@;
put 'YXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBDPXRoaXMudWNtcChnKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtQzpDfSxFLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKGcpe2lmKHRoaXMubGVuZ3RoPmcubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPGcubGVu'@;
put 'Z3RoKXJldHVybi0xO2Zvcih2YXIgQz0wLE09dGhpcy5sZW5ndGgtMTtNPj0wO00tLSl7dmFyIHk9MHx0aGlzLndvcmRzW01dLHA9MHxnLndvcmRzW01dO2lmKHkhPT1wKXt5PHA/Qz0tMTp5PnAmJihDPTEpO2JyZWFrfX1yZXR1cm4gQ30sRS5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKGcpe3Jl'@;
put 'dHVybiAxPT09dGhpcy5jbXBuKGcpfSxFLnByb3RvdHlwZS5ndD1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wKGcpfSxFLnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk+PTB9LEUucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhp'@;
put 'cy5jbXAoZyk+PTB9LEUucHJvdG90eXBlLmx0bj1mdW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMuY21wbihnKX0sRS5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcChnKX0sRS5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcp'@;
put 'PD0wfSxFLnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcpPD0wfSxFLnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcG4oZyl9LEUucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXAoZyl9LEUucmVk'@;
put 'PWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgTihnKX0sRS5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksSSgwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3Np'@;
put 'dGl2ZXMiKSxnLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQoZyl9LEUucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9t'@;
put 'KHRoaXMpfSxFLnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucmVkPWcsdGhpc30sRS5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5f'@;
put 'Zm9yY2VSZWQoZyl9LEUucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRo'@;
put 'aXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQu'@;
put 'c3ViKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24oZyl7cmV0dXJuIEko'@;
put 'dGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQu'@;
put 'X3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5tdWwodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQuaW11'@;
put 'bCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sRS5wcm90b3R5cGUucmVkSVNxcj1mdW5j'@;
put 'dGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LEUucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU3Fy'@;
put 'dCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSxFLnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiks'@;
put 'dGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sRS5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5u'@;
put 'ZWcodGhpcyl9LEUucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCYmIWcucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLGcpfTt2YXIgZGU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5'@;
put 'MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiB1ZShnLEMpe3RoaXMubmFtZT1nLHRoaXMucD1uZXcgRShDLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgRSgxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rp'@;
put 'b24gY2UoKXt1ZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIFkoKXt1ZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBm'@;
put 'ZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIGIoKXt1ZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIHgoKXt1ZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2Zm'@;
put 'ZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIE4oZyl7aWYoInN0cmluZyI9PXR5cGVvZiBnKXt2YXIgQz1FLl9wcmltZShnKTt0aGlzLm09Qy5wLHRoaXMucHJpbWU9Q31lbHNlIEkoZy5ndG4oMSksIm1v'@;
put 'ZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1nLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBGKGcpe04uY2FsbCh0aGlzLGcpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0'@;
put 'aGlzLnI9bmV3IEUoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlz'@;
put 'Lm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9dWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgZz1uZXcgRShudWxsKTtyZXR1cm4gZy53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLGd9LHVlLnByb3RvdHlwZS5pcmVk'@;
put 'dWNlPWZ1bmN0aW9uKGcpe3ZhciBDLE09Zztkb3t0aGlzLnNwbGl0KE0sdGhpcy50bXApLEM9KE09KE09dGhpcy5pbXVsSyhNKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKEM+dGhpcy5uKTt2YXIgeT1DPHRoaXMubj8tMTpNLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PXk/'@;
put 'KE0ud29yZHNbMF09MCxNLmxlbmd0aD0xKTp5PjA/TS5pc3ViKHRoaXMucCk6dm9pZCAwIT09TS5zdHJpcD9NLnN0cmlwKCk6TS5fc3RyaXAoKSxNfSx1ZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyxDKXtnLml1c2hybih0aGlzLm4sMCxDKX0sdWUucHJvdG90eXBlLmltdWxLPWZ1bmN0'@;
put 'aW9uKGcpe3JldHVybiBnLmltdWwodGhpcy5rKX0sUihjZSx1ZSksY2UucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcsQyl7Zm9yKHZhciBNPTQxOTQzMDMseT1NYXRoLm1pbihnLmxlbmd0aCw5KSxwPTA7cDx5O3ArKylDLndvcmRzW3BdPWcud29yZHNbcF07aWYoQy5sZW5ndGg9eSxnLmxl'@;
put 'bmd0aDw9OSlyZXR1cm4gZy53b3Jkc1swXT0wLHZvaWQoZy5sZW5ndGg9MSk7dmFyIFM9Zy53b3Jkc1s5XTtmb3IoQy53b3Jkc1tDLmxlbmd0aCsrXT1TJk0scD0xMDtwPGcubGVuZ3RoO3ArKyl7dmFyIFE9MHxnLndvcmRzW3BdO2cud29yZHNbcC0xMF09KFEmTSk8PDR8Uz4+PjIyLFM9UX1n'@;
put 'LndvcmRzW3AtMTBdPVM+Pj49MjIsZy5sZW5ndGgtPTA9PT1TJiZnLmxlbmd0aD4xMD8xMDo5fSxjZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zy53b3Jkc1tnLmxlbmd0aF09MCxnLndvcmRzW2cubGVuZ3RoKzFdPTAsZy5sZW5ndGgrPTI7Zm9yKHZhciBDPTAsTT0wO008Zy5sZW5n'@;
put 'dGg7TSsrKXt2YXIgeT0wfGcud29yZHNbTV07Zy53b3Jkc1tNXT02NzEwODg2MyYoQys9OTc3KnkpLEM9NjQqeSsoQy82NzEwODg2NHwwKX1yZXR1cm4gMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJihnLmxlbmd0aC0tLDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiZnLmxlbmd0aC0tKSxnfSxS'@;
put 'KFksdWUpLFIoYix1ZSksUih4LHVlKSx4LnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtmb3IodmFyIEM9MCxNPTA7TTxnLmxlbmd0aDtNKyspe3ZhciB5PTE5KigwfGcud29yZHNbTV0pK0MscD02NzEwODg2MyZ5O3k+Pj49MjYsZy53b3Jkc1tNXT1wLEM9eX1yZXR1cm4gMCE9PUMmJihn'@;
put 'LndvcmRzW2cubGVuZ3RoKytdPUMpLGd9LEUuX3ByaW1lPWZ1bmN0aW9uKGcpe2lmKGRlW2ddKXJldHVybiBkZVtnXTt2YXIgQztpZigiazI1NiI9PT1nKUM9bmV3IGNlO2Vsc2UgaWYoInAyMjQiPT09ZylDPW5ldyBZO2Vsc2UgaWYoInAxOTIiPT09ZylDPW5ldyBiO2Vsc2V7aWYoInAyNTUx'@;
put 'OSIhPT1nKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK2cpO0M9bmV3IHh9cmV0dXJuIGRlW2ddPUMsQ30sTi5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oZyl7SSgwPT09Zy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxJKGcucmVkLCJyZWQg'@;
put 'd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LE4ucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKGcsQyl7SSgwPT0oZy5uZWdhdGl2ZXxDLm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxJKGcucmVkJiZnLnJlZD09PUMucmVkLCJyZWQgd29ya3Mgb25s'@;
put 'eSB3aXRoIHJlZCBudW1iZXJzIil9LE4ucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKGcpLl9mb3JjZVJlZCh0aGlzKTpnLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LE4ucHJvdG90eXBlLm5lZz1mdW5jdGlvbihn'@;
put 'KXtyZXR1cm4gZy5pc1plcm8oKT9nLmNsb25lKCk6dGhpcy5tLnN1YihnKS5fZm9yY2VSZWQodGhpcyl9LE4ucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnLEMpe3RoaXMuX3ZlcmlmeTIoZyxDKTt2YXIgTT1nLmFkZChDKTtyZXR1cm4gTS5jbXAodGhpcy5tKT49MCYmTS5pc3ViKHRoaXMubSks'@;
put 'TS5fZm9yY2VSZWQodGhpcyl9LE4ucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIE09Zy5pYWRkKEMpO3JldHVybiBNLmNtcCh0aGlzLm0pPj0wJiZNLmlzdWIodGhpcy5tKSxNfSxOLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZyxDKXt0aGlzLl92'@;
put 'ZXJpZnkyKGcsQyk7dmFyIE09Zy5zdWIoQyk7cmV0dXJuIE0uY21wbigwKTwwJiZNLmlhZGQodGhpcy5tKSxNLl9mb3JjZVJlZCh0aGlzKX0sTi5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnLEMpe3RoaXMuX3ZlcmlmeTIoZyxDKTt2YXIgTT1nLmlzdWIoQyk7cmV0dXJuIE0uY21wbigwKTww'@;
put 'JiZNLmlhZGQodGhpcy5tKSxNfSxOLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShnKSx0aGlzLmltb2QoZy51c2hsbihDKSl9LE4ucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLEMpLHRoaXMuaW1vZChn'@;
put 'LmltdWwoQykpfSxOLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLEMpLHRoaXMuaW1vZChnLm11bChDKSl9LE4ucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW11bChnLGcuY2xvbmUoKSl9LE4ucHJvdG90eXBlLnNxcj1m'@;
put 'dW5jdGlvbihnKXtyZXR1cm4gdGhpcy5tdWwoZyxnKX0sTi5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihnKXtpZihnLmlzWmVybygpKXJldHVybiBnLmNsb25lKCk7dmFyIEM9dGhpcy5tLmFuZGxuKDMpO2lmKEkoQyUyPT0xKSwzPT09Qyl7dmFyIE09dGhpcy5tLmFkZChuZXcgRSgxKSkuaXVz'@;
put 'aHJuKDIpO3JldHVybiB0aGlzLnBvdyhnLE0pfWZvcih2YXIgeT10aGlzLm0uc3VibigxKSxwPTA7IXkuaXNaZXJvKCkmJjA9PT15LmFuZGxuKDEpOylwKysseS5pdXNocm4oMSk7SSgheS5pc1plcm8oKSk7dmFyIFM9bmV3IEUoMSkudG9SZWQodGhpcyksUT1TLnJlZE5lZygpLHJlPXRoaXMu'@;
put 'bS5zdWJuKDEpLml1c2hybigxKSxmZT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKGZlPW5ldyBFKDIqZmUqZmUpLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhmZSxyZSkuY21wKFEpOylmZS5yZWRJQWRkKFEpO2Zvcih2YXIgbWU9dGhpcy5wb3coZmUseSksa2U9dGhpcy5wb3coZyx5LmFkZG4o'@;
put 'MSkuaXVzaHJuKDEpKSxUZT10aGlzLnBvdyhnLHkpLFBlPXA7MCE9PVRlLmNtcChTKTspe2Zvcih2YXIgRmU9VGUsTmU9MDswIT09RmUuY21wKFMpO05lKyspRmU9RmUucmVkU3FyKCk7SShOZTxQZSk7dmFyIExlPXRoaXMucG93KG1lLG5ldyBFKDEpLml1c2hsbihQZS1OZS0xKSk7a2U9a2Uu'@;
put 'cmVkTXVsKExlKSxtZT1MZS5yZWRTcXIoKSxUZT1UZS5yZWRNdWwobWUpLFBlPU5lfXJldHVybiBrZX0sTi5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXt2YXIgQz1nLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09Qy5uZWdhdGl2ZT8oQy5uZWdhdGl2ZT0wLHRoaXMuaW1vZChDKS5yZWRO'@;
put 'ZWcoKSk6dGhpcy5pbW9kKEMpfSxOLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyxDKXtpZihDLmlzWmVybygpKXJldHVybiBuZXcgRSgxKS50b1JlZCh0aGlzKTtpZigwPT09Qy5jbXBuKDEpKXJldHVybiBnLmNsb25lKCk7dmFyIE09bmV3IEFycmF5KDE2KTtNWzBdPW5ldyBFKDEpLnRvUmVk'@;
put 'KHRoaXMpLE1bMV09Zztmb3IodmFyIHk9Mjt5PE0ubGVuZ3RoO3krKylNW3ldPXRoaXMubXVsKE1beS0xXSxnKTt2YXIgcD1NWzBdLFM9MCxRPTAscmU9Qy5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PXJlJiYocmU9MjYpLHk9Qy5sZW5ndGgtMTt5Pj0wO3ktLSl7Zm9yKHZhciBmZT1DLndvcmRz'@;
put 'W3ldLG1lPXJlLTE7bWU+PTA7bWUtLSl7dmFyIGtlPWZlPj5tZSYxO3AhPT1NWzBdJiYocD10aGlzLnNxcihwKSksMCE9PWtlfHwwIT09Uz8oUzw8PTEsU3w9a2UsKDQ9PSsrUXx8MD09PXkmJjA9PT1tZSkmJihwPXRoaXMubXVsKHAsTVtTXSksUT0wLFM9MCkpOlE9MH1yZT0yNn1yZXR1cm4g'@;
put 'cH0sTi5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3ZhciBDPWcudW1vZCh0aGlzLm0pO3JldHVybiBDPT09Zz9DLmNsb25lKCk6Q30sTi5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIEM9Zy5jbG9uZSgpO3JldHVybiBDLnJlZD1udWxsLEN9LEUubW9udD1m'@;
put 'dW5jdGlvbihnKXtyZXR1cm4gbmV3IEYoZyl9LFIoRixOKSxGLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLnVzaGxuKHRoaXMuc2hpZnQpKX0sRi5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIEM9dGhpcy5pbW9kKGcubXVs'@;
put 'KHRoaXMucmludikpO3JldHVybiBDLnJlZD1udWxsLEN9LEYucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyxDKXtpZihnLmlzWmVybygpfHxDLmlzWmVybygpKXJldHVybiBnLndvcmRzWzBdPTAsZy5sZW5ndGg9MSxnO3ZhciBNPWcuaW11bChDKSx5PU0ubWFza24odGhpcy5zaGlmdCkubXVs'@;
put 'KHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLHA9TS5pc3ViKHkpLml1c2hybih0aGlzLnNoaWZ0KSxTPXA7cmV0dXJuIHAuY21wKHRoaXMubSk+PTA/Uz1wLmlzdWIodGhpcy5tKTpwLmNtcG4oMCk8MCYmKFM9cC5pYWRkKHRoaXMubSkpLFMuX2ZvcmNlUmVkKHRo'@;
put 'aXMpfSxGLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyxDKXtpZihnLmlzWmVybygpfHxDLmlzWmVybygpKXJldHVybiBuZXcgRSgwKS5fZm9yY2VSZWQodGhpcyk7dmFyIE09Zy5tdWwoQykseT1NLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5t'@;
put 'dWwodGhpcy5tKSxwPU0uaXN1Yih5KS5pdXNocm4odGhpcy5zaGlmdCksUz1wO3JldHVybiBwLmNtcCh0aGlzLm0pPj0wP1M9cC5pc3ViKHRoaXMubSk6cC5jbXBuKDApPDAmJihTPXAuaWFkZCh0aGlzLm0pKSxTLl9mb3JjZVJlZCh0aGlzKX0sRi5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihn'@;
put 'KXtyZXR1cm4gdGhpcy5pbW9kKGcuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShIPUwubm1kKEgpLHRoaXMpfSw5MjgyOihILEIsTCk9PnsidXNlIHN0cmljdCI7dmFyIEs9TCg0MTU1KSxKPUwoNTEwOCk7ZnVuY3Rpb24gSShtZSl7cmV0dXJuKEk9ImZ1'@;
put 'bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oa2Upe3JldHVybiB0eXBlb2Yga2V9OmZ1bmN0aW9uKGtlKXtyZXR1cm4ga2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmtlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZr'@;
put 'ZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGtlfSkobWUpfXZhciBSLEUsej1MKDIxMzYpLmNvZGVzLGo9ei5FUlJfQU1CSUdVT1VTX0FSR1VNRU5ULFY9ei5FUlJfSU5WQUxJRF9BUkdfVFlQRSxHPXouRVJSX0lOVkFMSURfQVJHX1ZBTFVFLFc9ei5FUlJfSU5WQUxJRF9S'@;
put 'RVRVUk5fVkFMVUUsVT16LkVSUl9NSVNTSU5HX0FSR1MscT1MKDU5NjEpLHRlPUwoOTUzOSkuaW5zcGVjdCxuZT1MKDk1MzkpLnR5cGVzLGllPW5lLmlzUHJvbWlzZSxsZT1uZS5pc1JlZ0V4cCxkZT1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ246TCg4MDkxKS5hc3NpZ24sdWU9T2JqZWN0'@;
put 'LmlzP09iamVjdC5pczpMKDYwOSk7ZnVuY3Rpb24gY2UoKXt2YXIgbWU9TCg5MTU4KTtSPW1lLmlzRGVlcEVxdWFsLEU9bWUuaXNEZWVwU3RyaWN0RXF1YWx9dmFyIFk9ITEsYj1ILmV4cG9ydHM9Zyx4PXt9O2Z1bmN0aW9uIE4obWUpe3Rocm93IG1lLm1lc3NhZ2UgaW5zdGFuY2VvZiBFcnJv'@;
put 'cj9tZS5tZXNzYWdlOm5ldyBxKG1lKX1mdW5jdGlvbiBGKG1lLGtlLFRlLFBlKXtpZighVGUpe3ZhciBGZT0hMTtpZigwPT09a2UpRmU9ITAsUGU9Ik5vIHZhbHVlIGFyZ3VtZW50IHBhc3NlZCB0byBgYXNzZXJ0Lm9rKClgIjtlbHNlIGlmKFBlIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgUGU7'@;
put 'dmFyIE5lPW5ldyBxKHthY3R1YWw6VGUsZXhwZWN0ZWQ6ITAsbWVzc2FnZTpQZSxvcGVyYXRvcjoiPT0iLHN0YWNrU3RhcnRGbjptZX0pO3Rocm93IE5lLmdlbmVyYXRlZE1lc3NhZ2U9RmUsTmV9fWZ1bmN0aW9uIGcoKXtmb3IodmFyIG1lPWFyZ3VtZW50cy5sZW5ndGgsa2U9bmV3IEFycmF5'@;
put 'KG1lKSxUZT0wO1RlPG1lO1RlKyspa2VbVGVdPWFyZ3VtZW50c1tUZV07Ri5hcHBseSh2b2lkIDAsW2csa2UubGVuZ3RoXS5jb25jYXQoa2UpKX1iLmZhaWw9ZnVuY3Rpb24gbWUoa2UsVGUsUGUsRmUsTmUpe3ZhciBMZSxCZT1hcmd1bWVudHMubGVuZ3RoO2lmKDA9PT1CZT9MZT0iRmFpbGVk'@;
put 'IjoxPT09QmU/KFBlPWtlLGtlPXZvaWQgMCk6KCExPT09WSYmKFk9ITAsKEsuZW1pdFdhcm5pbmc/Sy5lbWl0V2FybmluZzpKLndhcm4uYmluZChKKSkoImFzc2VydC5mYWlsKCkgd2l0aCBtb3JlIHRoYW4gb25lIGFyZ3VtZW50IGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgYXNzZXJ0LnN0'@;
put 'cmljdEVxdWFsKCkgaW5zdGVhZCBvciBvbmx5IHBhc3MgYSBtZXNzYWdlLiIsIkRlcHJlY2F0aW9uV2FybmluZyIsIkRFUDAwOTQiKSksMj09PUJlJiYoRmU9IiE9IikpLFBlIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgUGU7dmFyIEhlPXthY3R1YWw6a2UsZXhwZWN0ZWQ6VGUsb3BlcmF0b3I6'@;
put 'dm9pZCAwPT09RmU/ImZhaWwiOkZlLHN0YWNrU3RhcnRGbjpOZXx8bWV9O3ZvaWQgMCE9PVBlJiYoSGUubWVzc2FnZT1QZSk7dmFyIFFlPW5ldyBxKEhlKTt0aHJvdyBMZSYmKFFlLm1lc3NhZ2U9TGUsUWUuZ2VuZXJhdGVkTWVzc2FnZT0hMCksUWV9LGIuQXNzZXJ0aW9uRXJyb3I9cSxiLm9r'@;
put 'PWcsYi5lcXVhbD1mdW5jdGlvbiBtZShrZSxUZSxQZSl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyBVKCJhY3R1YWwiLCJleHBlY3RlZCIpO2tlIT1UZSYmTih7YWN0dWFsOmtlLGV4cGVjdGVkOlRlLG1lc3NhZ2U6UGUsb3BlcmF0b3I6Ij09IixzdGFja1N0YXJ0Rm46bWV9KX0s'@;
put 'Yi5ub3RFcXVhbD1mdW5jdGlvbiBtZShrZSxUZSxQZSl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyBVKCJhY3R1YWwiLCJleHBlY3RlZCIpO2tlPT1UZSYmTih7YWN0dWFsOmtlLGV4cGVjdGVkOlRlLG1lc3NhZ2U6UGUsb3BlcmF0b3I6IiE9IixzdGFja1N0YXJ0Rm46bWV9KX0s'@;
put 'Yi5kZWVwRXF1YWw9ZnVuY3Rpb24gbWUoa2UsVGUsUGUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgVSgiYWN0dWFsIiwiZXhwZWN0ZWQiKTt2b2lkIDA9PT1SJiZjZSgpLFIoa2UsVGUpfHxOKHthY3R1YWw6a2UsZXhwZWN0ZWQ6VGUsbWVzc2FnZTpQZSxvcGVyYXRvcjoiZGVl'@;
put 'cEVxdWFsIixzdGFja1N0YXJ0Rm46bWV9KX0sYi5ub3REZWVwRXF1YWw9ZnVuY3Rpb24gbWUoa2UsVGUsUGUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgVSgiYWN0dWFsIiwiZXhwZWN0ZWQiKTt2b2lkIDA9PT1SJiZjZSgpLFIoa2UsVGUpJiZOKHthY3R1YWw6a2UsZXhwZWN0'@;
put 'ZWQ6VGUsbWVzc2FnZTpQZSxvcGVyYXRvcjoibm90RGVlcEVxdWFsIixzdGFja1N0YXJ0Rm46bWV9KX0sYi5kZWVwU3RyaWN0RXF1YWw9ZnVuY3Rpb24gbWUoa2UsVGUsUGUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgVSgiYWN0dWFsIiwiZXhwZWN0ZWQiKTt2b2lkIDA9PT1S'@;
put 'JiZjZSgpLEUoa2UsVGUpfHxOKHthY3R1YWw6a2UsZXhwZWN0ZWQ6VGUsbWVzc2FnZTpQZSxvcGVyYXRvcjoiZGVlcFN0cmljdEVxdWFsIixzdGFja1N0YXJ0Rm46bWV9KX0sYi5ub3REZWVwU3RyaWN0RXF1YWw9ZnVuY3Rpb24gbWUoa2UsVGUsUGUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0'@;
put 'aHJvdyBuZXcgVSgiYWN0dWFsIiwiZXhwZWN0ZWQiKTt2b2lkIDA9PT1SJiZjZSgpLEUoa2UsVGUpJiZOKHthY3R1YWw6a2UsZXhwZWN0ZWQ6VGUsbWVzc2FnZTpQZSxvcGVyYXRvcjoibm90RGVlcFN0cmljdEVxdWFsIixzdGFja1N0YXJ0Rm46bWV9KX0sYi5zdHJpY3RFcXVhbD1mdW5jdGlv'@;
put 'biBtZShrZSxUZSxQZSl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyBVKCJhY3R1YWwiLCJleHBlY3RlZCIpO3VlKGtlLFRlKXx8Tih7YWN0dWFsOmtlLGV4cGVjdGVkOlRlLG1lc3NhZ2U6UGUsb3BlcmF0b3I6InN0cmljdEVxdWFsIixzdGFja1N0YXJ0Rm46bWV9KX0sYi5ub3RT'@;
put 'dHJpY3RFcXVhbD1mdW5jdGlvbiBtZShrZSxUZSxQZSl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyBVKCJhY3R1YWwiLCJleHBlY3RlZCIpO3VlKGtlLFRlKSYmTih7YWN0dWFsOmtlLGV4cGVjdGVkOlRlLG1lc3NhZ2U6UGUsb3BlcmF0b3I6Im5vdFN0cmljdEVxdWFsIixzdGFj'@;
put 'a1N0YXJ0Rm46bWV9KX07dmFyIEM9ZnVuY3Rpb24gbWUoa2UsVGUsUGUpe3ZhciBGZT10aGlzOyhmdW5jdGlvbihOZSxMZSl7aWYoIShOZSBpbnN0YW5jZW9mIExlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsbWUpLFRl'@;
put 'LmZvckVhY2goZnVuY3Rpb24oTmUpe05lIGluIGtlJiYoRmVbTmVdPXZvaWQgMCE9PVBlJiYic3RyaW5nIj09dHlwZW9mIFBlW05lXSYmbGUoa2VbTmVdKSYma2VbTmVdLnRlc3QoUGVbTmVdKT9QZVtOZV06a2VbTmVdKX0pfTtmdW5jdGlvbiBNKG1lLGtlLFRlLFBlKXtpZigiZnVuY3Rpb24i'@;
put 'IT10eXBlb2Yga2Upe2lmKGxlKGtlKSlyZXR1cm4ga2UudGVzdChtZSk7aWYoMj09PWFyZ3VtZW50cy5sZW5ndGgpdGhyb3cgbmV3IFYoImV4cGVjdGVkIixbIkZ1bmN0aW9uIiwiUmVnRXhwIl0sa2UpO2lmKCJvYmplY3QiIT09SShtZSl8fG51bGw9PT1tZSl7dmFyIEZlPW5ldyBxKHthY3R1'@;
put 'YWw6bWUsZXhwZWN0ZWQ6a2UsbWVzc2FnZTpUZSxvcGVyYXRvcjoiZGVlcFN0cmljdEVxdWFsIixzdGFja1N0YXJ0Rm46UGV9KTt0aHJvdyBGZS5vcGVyYXRvcj1QZS5uYW1lLEZlfXZhciBOZT1PYmplY3Qua2V5cyhrZSk7aWYoa2UgaW5zdGFuY2VvZiBFcnJvcilOZS5wdXNoKCJuYW1lIiwi'@;
put 'bWVzc2FnZSIpO2Vsc2UgaWYoMD09PU5lLmxlbmd0aCl0aHJvdyBuZXcgRygiZXJyb3IiLGtlLCJtYXkgbm90IGJlIGFuIGVtcHR5IG9iamVjdCIpO3JldHVybiB2b2lkIDA9PT1SJiZjZSgpLE5lLmZvckVhY2goZnVuY3Rpb24oTGUpeyJzdHJpbmciPT10eXBlb2YgbWVbTGVdJiZsZShrZVtM'@;
put 'ZV0pJiZrZVtMZV0udGVzdChtZVtMZV0pfHxmdW5jdGlvbihCZSxIZSxRZSxtdCxLZSx3ZSl7aWYoIShRZSBpbiBCZSl8fCFFKEJlW1FlXSxIZVtRZV0pKXtpZighbXQpe3ZhciBJZT1uZXcgQyhCZSxLZSksT2U9bmV3IEMoSGUsS2UsQmUpLGV0PW5ldyBxKHthY3R1YWw6SWUsZXhwZWN0ZWQ6'@;
put 'T2Usb3BlcmF0b3I6ImRlZXBTdHJpY3RFcXVhbCIsc3RhY2tTdGFydEZuOndlfSk7dGhyb3cgZXQuYWN0dWFsPUJlLGV0LmV4cGVjdGVkPUhlLGV0Lm9wZXJhdG9yPXdlLm5hbWUsZXR9Tih7YWN0dWFsOkJlLGV4cGVjdGVkOkhlLG1lc3NhZ2U6bXQsb3BlcmF0b3I6d2UubmFtZSxzdGFja1N0'@;
put 'YXJ0Rm46d2V9KX19KG1lLGtlLExlLFRlLE5lLFBlKX0pLCEwfXJldHVybiB2b2lkIDAhPT1rZS5wcm90b3R5cGUmJm1lIGluc3RhbmNlb2Yga2V8fCFFcnJvci5pc1Byb3RvdHlwZU9mKGtlKSYmITA9PT1rZS5jYWxsKHt9LG1lKX1mdW5jdGlvbiB5KG1lKXtpZigiZnVuY3Rpb24iIT10eXBl'@;
put 'b2YgbWUpdGhyb3cgbmV3IFYoImZuIiwiRnVuY3Rpb24iLG1lKTt0cnl7bWUoKX1jYXRjaChrZSl7cmV0dXJuIGtlfXJldHVybiB4fWZ1bmN0aW9uIHAobWUpe3JldHVybiBpZShtZSl8fG51bGwhPT1tZSYmIm9iamVjdCI9PT1JKG1lKSYmImZ1bmN0aW9uIj09dHlwZW9mIG1lLnRoZW4mJiJm'@;
put 'dW5jdGlvbiI9PXR5cGVvZiBtZS5jYXRjaH1mdW5jdGlvbiBTKG1lKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe3ZhciBrZTtpZigiZnVuY3Rpb24iPT10eXBlb2YgbWUpe2lmKCFwKGtlPW1lKCkpKXRocm93IG5ldyBXKCJpbnN0YW5jZSBvZiBQcm9taXNlIiwi'@;
put 'cHJvbWlzZUZuIixrZSl9ZWxzZXtpZighcChtZSkpdGhyb3cgbmV3IFYoInByb21pc2VGbiIsWyJGdW5jdGlvbiIsIlByb21pc2UiXSxtZSk7a2U9bWV9cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4ga2V9KS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHh9'@;
put 'KS5jYXRjaChmdW5jdGlvbihUZSl7cmV0dXJuIFRlfSl9KX1mdW5jdGlvbiBRKG1lLGtlLFRlLFBlKXtpZigic3RyaW5nIj09dHlwZW9mIFRlKXtpZig0PT09YXJndW1lbnRzLmxlbmd0aCl0aHJvdyBuZXcgVigiZXJyb3IiLFsiT2JqZWN0IiwiRXJyb3IiLCJGdW5jdGlvbiIsIlJlZ0V4cCJd'@;
put 'LFRlKTtpZigib2JqZWN0Ij09PUkoa2UpJiZudWxsIT09a2Upe2lmKGtlLm1lc3NhZ2U9PT1UZSl0aHJvdyBuZXcgaigiZXJyb3IvbWVzc2FnZSIsJ1RoZSBlcnJvciBtZXNzYWdlICInLmNvbmNhdChrZS5tZXNzYWdlLCciIGlzIGlkZW50aWNhbCB0byB0aGUgbWVzc2FnZS4nKSl9ZWxzZSBp'@;
put 'ZihrZT09PVRlKXRocm93IG5ldyBqKCJlcnJvci9tZXNzYWdlIiwnVGhlIGVycm9yICInLmNvbmNhdChrZSwnIiBpcyBpZGVudGljYWwgdG8gdGhlIG1lc3NhZ2UuJykpO1BlPVRlLFRlPXZvaWQgMH1lbHNlIGlmKG51bGwhPVRlJiYib2JqZWN0IiE9PUkoVGUpJiYiZnVuY3Rpb24iIT10eXBl'@;
put 'b2YgVGUpdGhyb3cgbmV3IFYoImVycm9yIixbIk9iamVjdCIsIkVycm9yIiwiRnVuY3Rpb24iLCJSZWdFeHAiXSxUZSk7aWYoa2U9PT14KXt2YXIgRmU9IiI7VGUmJlRlLm5hbWUmJihGZSs9IiAoIi5jb25jYXQoVGUubmFtZSwiKSIpKSxGZSs9UGU/IjogIi5jb25jYXQoUGUpOiIuIixOKHth'@;
put 'Y3R1YWw6dm9pZCAwLGV4cGVjdGVkOlRlLG9wZXJhdG9yOm1lLm5hbWUsbWVzc2FnZToiTWlzc2luZyBleHBlY3RlZCAiLmNvbmNhdCgicmVqZWN0cyI9PT1tZS5uYW1lPyJyZWplY3Rpb24iOiJleGNlcHRpb24iKS5jb25jYXQoRmUpLHN0YWNrU3RhcnRGbjptZX0pfWlmKFRlJiYhTShrZSxU'@;
put 'ZSxQZSxtZSkpdGhyb3cga2V9ZnVuY3Rpb24gcmUobWUsa2UsVGUsUGUpe2lmKGtlIT09eCl7aWYoInN0cmluZyI9PXR5cGVvZiBUZSYmKFBlPVRlLFRlPXZvaWQgMCksIVRlfHxNKGtlLFRlKSl7dmFyIEZlPVBlPyI6ICIuY29uY2F0KFBlKToiLiI7Tih7YWN0dWFsOmtlLGV4cGVjdGVkOlRl'@;
put 'LG9wZXJhdG9yOm1lLm5hbWUsbWVzc2FnZToiR290IHVud2FudGVkICIuY29uY2F0KCJkb2VzTm90UmVqZWN0Ij09PW1lLm5hbWU/InJlamVjdGlvbiI6ImV4Y2VwdGlvbiIpLmNvbmNhdChGZSwiXG4iKSsnQWN0dWFsIG1lc3NhZ2U6ICInLmNvbmNhdChrZSYma2UubWVzc2FnZSwnIicpLHN0'@;
put 'YWNrU3RhcnRGbjptZX0pfXRocm93IGtlfX1mdW5jdGlvbiBmZSgpe2Zvcih2YXIgbWU9YXJndW1lbnRzLmxlbmd0aCxrZT1uZXcgQXJyYXkobWUpLFRlPTA7VGU8bWU7VGUrKylrZVtUZV09YXJndW1lbnRzW1RlXTtGLmFwcGx5KHZvaWQgMCxbZmUsa2UubGVuZ3RoXS5jb25jYXQoa2UpKX1i'@;
put 'LnRocm93cz1mdW5jdGlvbiBtZShrZSl7Zm9yKHZhciBUZT1hcmd1bWVudHMubGVuZ3RoLFBlPW5ldyBBcnJheShUZT4xP1RlLTE6MCksRmU9MTtGZTxUZTtGZSsrKVBlW0ZlLTFdPWFyZ3VtZW50c1tGZV07US5hcHBseSh2b2lkIDAsW21lLHkoa2UpXS5jb25jYXQoUGUpKX0sYi5yZWplY3Rz'@;
put 'PWZ1bmN0aW9uIG1lKGtlKXtmb3IodmFyIFRlPWFyZ3VtZW50cy5sZW5ndGgsUGU9bmV3IEFycmF5KFRlPjE/VGUtMTowKSxGZT0xO0ZlPFRlO0ZlKyspUGVbRmUtMV09YXJndW1lbnRzW0ZlXTtyZXR1cm4gUyhrZSkudGhlbihmdW5jdGlvbihOZSl7cmV0dXJuIFEuYXBwbHkodm9pZCAwLFtt'@;
put 'ZSxOZV0uY29uY2F0KFBlKSl9KX0sYi5kb2VzTm90VGhyb3c9ZnVuY3Rpb24gbWUoa2Upe2Zvcih2YXIgVGU9YXJndW1lbnRzLmxlbmd0aCxQZT1uZXcgQXJyYXkoVGU+MT9UZS0xOjApLEZlPTE7RmU8VGU7RmUrKylQZVtGZS0xXT1hcmd1bWVudHNbRmVdO3JlLmFwcGx5KHZvaWQgMCxbbWUs'@;
put 'eShrZSldLmNvbmNhdChQZSkpfSxiLmRvZXNOb3RSZWplY3Q9ZnVuY3Rpb24gbWUoa2Upe2Zvcih2YXIgVGU9YXJndW1lbnRzLmxlbmd0aCxQZT1uZXcgQXJyYXkoVGU+MT9UZS0xOjApLEZlPTE7RmU8VGU7RmUrKylQZVtGZS0xXT1hcmd1bWVudHNbRmVdO3JldHVybiBTKGtlKS50aGVuKGZ1'@;
put 'bmN0aW9uKE5lKXtyZXR1cm4gcmUuYXBwbHkodm9pZCAwLFttZSxOZV0uY29uY2F0KFBlKSl9KX0sYi5pZkVycm9yPWZ1bmN0aW9uIG1lKGtlKXtpZihudWxsIT1rZSl7dmFyIFRlPSJpZkVycm9yIGdvdCB1bndhbnRlZCBleGNlcHRpb246ICI7Im9iamVjdCI9PT1JKGtlKSYmInN0cmluZyI9'@;
put 'PXR5cGVvZiBrZS5tZXNzYWdlP1RlKz0wPT09a2UubWVzc2FnZS5sZW5ndGgmJmtlLmNvbnN0cnVjdG9yP2tlLmNvbnN0cnVjdG9yLm5hbWU6a2UubWVzc2FnZTpUZSs9dGUoa2UpO3ZhciBQZT1uZXcgcSh7YWN0dWFsOmtlLGV4cGVjdGVkOm51bGwsb3BlcmF0b3I6ImlmRXJyb3IiLG1lc3Nh'@;
put 'Z2U6VGUsc3RhY2tTdGFydEZuOm1lfSksRmU9a2Uuc3RhY2s7aWYoInN0cmluZyI9PXR5cGVvZiBGZSl7dmFyIE5lPUZlLnNwbGl0KCJcbiIpO05lLnNoaWZ0KCk7Zm9yKHZhciBMZT1QZS5zdGFjay5zcGxpdCgiXG4iKSxCZT0wO0JlPE5lLmxlbmd0aDtCZSsrKXt2YXIgSGU9TGUuaW5kZXhP'@;
put 'ZihOZVtCZV0pO2lmKC0xIT09SGUpe0xlPUxlLnNsaWNlKDAsSGUpO2JyZWFrfX1QZS5zdGFjaz0iIi5jb25jYXQoTGUuam9pbigiXG4iKSwiXG4iKS5jb25jYXQoTmUuam9pbigiXG4iKSl9dGhyb3cgUGV9fSxiLnN0cmljdD1kZShmZSxiLHtlcXVhbDpiLnN0cmljdEVxdWFsLGRlZXBFcXVh'@;
put 'bDpiLmRlZXBTdHJpY3RFcXVhbCxub3RFcXVhbDpiLm5vdFN0cmljdEVxdWFsLG5vdERlZXBFcXVhbDpiLm5vdERlZXBTdHJpY3RFcXVhbH0pLGIuc3RyaWN0LnN0cmljdD1iLnN0cmljdH0sNTk2MTooSCxCLEwpPT57InVzZSBzdHJpY3QiO3ZhciBLPUwoNDE1NSk7ZnVuY3Rpb24gSihGLGcs'@;
put 'Qyl7cmV0dXJuIGcgaW4gRj9PYmplY3QuZGVmaW5lUHJvcGVydHkoRixnLHt2YWx1ZTpDLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6RltnXT1DLEZ9ZnVuY3Rpb24gUihGLGcpe3JldHVybiFnfHwib2JqZWN0IiE9PVcoZykmJiJmdW5jdGlvbiIhPXR5cGVv'@;
put 'ZiBnP0UoRik6Z31mdW5jdGlvbiBFKEYpe2lmKHZvaWQgMD09PUYpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gRn1mdW5jdGlvbiB6KEYpe3ZhciBnPSJmdW5jdGlvbiI9'@;
put 'PXR5cGVvZiBNYXA/bmV3IE1hcDp2b2lkIDA7cmV0dXJuIHo9ZnVuY3Rpb24oQyl7aWYobnVsbD09PUN8fC0xPT09RnVuY3Rpb24udG9TdHJpbmcuY2FsbChDKS5pbmRleE9mKCJbbmF0aXZlIGNvZGVdIikpcmV0dXJuIEM7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIEMpdGhyb3cgbmV3IFR5cGVF'@;
put 'cnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtpZih2b2lkIDAhPT1nKXtpZihnLmhhcyhDKSlyZXR1cm4gZy5nZXQoQyk7Zy5zZXQoQyx5KX1mdW5jdGlvbiB5KCl7cmV0dXJuIGooQyxhcmd1bWVudHMsRyh0aGlzKS5jb25zdHJ1Y3Rv'@;
put 'cil9cmV0dXJuIHkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQy5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp5LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLFYoeSxDKX0seihGKX1mdW5jdGlvbiBqKEYsZyxDKXtyZXR1cm4oaj1mdW5jdGlvbigp'@;
put 'e2lmKHR5cGVvZiBSZWZsZWN0PiJ1Inx8IVJlZmxlY3QuY29uc3RydWN0fHxSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoUmVmbGVjdC5jb25z'@;
put 'dHJ1Y3QoRGF0ZSxbXSxmdW5jdGlvbigpe30pKSwhMH1jYXRjaHtyZXR1cm4hMX19KCk/UmVmbGVjdC5jb25zdHJ1Y3Q6ZnVuY3Rpb24oTSx5LHApe3ZhciBTPVtudWxsXTtTLnB1c2guYXBwbHkoUyx5KTt2YXIgUT1uZXcoRnVuY3Rpb24uYmluZC5hcHBseShNLFMpKTtyZXR1cm4gcCYmVihR'@;
put 'LHAucHJvdG90eXBlKSxRfSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfWZ1bmN0aW9uIFYoRixnKXtyZXR1cm4oVj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKEMsTSl7cmV0dXJuIEMuX19wcm90b19fPU0sQ30pKEYsZyl9ZnVuY3Rpb24gRyhGKXtyZXR1cm4oRz1PYmplY3Quc2V0'@;
put 'UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGcpe3JldHVybiBnLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGcpfSkoRil9ZnVuY3Rpb24gVyhGKXtyZXR1cm4oVz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5'@;
put 'bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihnKXtyZXR1cm4gdHlwZW9mIGd9OmZ1bmN0aW9uKGcpe3JldHVybiBnJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZnLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZnIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZ30pKEYpfXZhciBV'@;
put 'PUwoOTUzOSkuaW5zcGVjdCxxPUwoMjEzNikuY29kZXMuRVJSX0lOVkFMSURfQVJHX1RZUEU7ZnVuY3Rpb24gdGUoRixnLEMpe3JldHVybih2b2lkIDA9PT1DfHxDPkYubGVuZ3RoKSYmKEM9Ri5sZW5ndGgpLEYuc3Vic3RyaW5nKEMtZy5sZW5ndGgsQyk9PT1nfXZhciBuZT0iIixpZT0iIixs'@;
put 'ZT0iIixkZT0iIix1ZT17ZGVlcFN0cmljdEVxdWFsOiJFeHBlY3RlZCB2YWx1ZXMgdG8gYmUgc3RyaWN0bHkgZGVlcC1lcXVhbDoiLHN0cmljdEVxdWFsOiJFeHBlY3RlZCB2YWx1ZXMgdG8gYmUgc3RyaWN0bHkgZXF1YWw6IixzdHJpY3RFcXVhbE9iamVjdDonRXhwZWN0ZWQgImFjdHVhbCIg'@;
put 'dG8gYmUgcmVmZXJlbmNlLWVxdWFsIHRvICJleHBlY3RlZCI6JyxkZWVwRXF1YWw6IkV4cGVjdGVkIHZhbHVlcyB0byBiZSBsb29zZWx5IGRlZXAtZXF1YWw6IixlcXVhbDoiRXhwZWN0ZWQgdmFsdWVzIHRvIGJlIGxvb3NlbHkgZXF1YWw6Iixub3REZWVwU3RyaWN0RXF1YWw6J0V4cGVjdGVk'@;
put 'ICJhY3R1YWwiIG5vdCB0byBiZSBzdHJpY3RseSBkZWVwLWVxdWFsIHRvOicsbm90U3RyaWN0RXF1YWw6J0V4cGVjdGVkICJhY3R1YWwiIHRvIGJlIHN0cmljdGx5IHVuZXF1YWwgdG86Jyxub3RTdHJpY3RFcXVhbE9iamVjdDonRXhwZWN0ZWQgImFjdHVhbCIgbm90IHRvIGJlIHJlZmVyZW5j'@;
put 'ZS1lcXVhbCB0byAiZXhwZWN0ZWQiOicsbm90RGVlcEVxdWFsOidFeHBlY3RlZCAiYWN0dWFsIiBub3QgdG8gYmUgbG9vc2VseSBkZWVwLWVxdWFsIHRvOicsbm90RXF1YWw6J0V4cGVjdGVkICJhY3R1YWwiIHRvIGJlIGxvb3NlbHkgdW5lcXVhbCB0bzonLG5vdElkZW50aWNhbDoiVmFsdWVz'@;
put 'IGlkZW50aWNhbCBidXQgbm90IHJlZmVyZW5jZS1lcXVhbDoifTtmdW5jdGlvbiBZKEYpe3ZhciBnPU9iamVjdC5rZXlzKEYpLEM9T2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YoRikpO3JldHVybiBnLmZvckVhY2goZnVuY3Rpb24oTSl7Q1tNXT1GW01dfSksT2JqZWN0LmRl'@;
put 'ZmluZVByb3BlcnR5KEMsIm1lc3NhZ2UiLHt2YWx1ZTpGLm1lc3NhZ2V9KSxDfWZ1bmN0aW9uIGIoRil7cmV0dXJuIFUoRix7Y29tcGFjdDohMSxjdXN0b21JbnNwZWN0OiExLGRlcHRoOjFlMyxtYXhBcnJheUxlbmd0aDoxLzAsc2hvd0hpZGRlbjohMSxicmVha0xlbmd0aDoxLzAsc2hvd1By'@;
put 'b3h5OiExLHNvcnRlZDohMCxnZXR0ZXJzOiEwfSl9dmFyIE49ZnVuY3Rpb24oRil7ZnVuY3Rpb24gZyhwKXt2YXIgUztpZihmdW5jdGlvbihIZSxRZSl7aWYoIShIZSBpbnN0YW5jZW9mIFFlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24i'@;
put 'KX0odGhpcyxnKSwib2JqZWN0IiE9PVcocCl8fG51bGw9PT1wKXRocm93IG5ldyBxKCJvcHRpb25zIiwiT2JqZWN0IixwKTt2YXIgUT1wLm1lc3NhZ2UscmU9cC5vcGVyYXRvcixmZT1wLnN0YWNrU3RhcnRGbixtZT1wLmFjdHVhbCxrZT1wLmV4cGVjdGVkLFRlPUVycm9yLnN0YWNrVHJhY2VM'@;
put 'aW1pdDtpZihFcnJvci5zdGFja1RyYWNlTGltaXQ9MCxudWxsIT1RKVM9Uih0aGlzLEcoZykuY2FsbCh0aGlzLFN0cmluZyhRKSkpO2Vsc2UgaWYoSy5zdGRlcnImJksuc3RkZXJyLmlzVFRZJiYoSy5zdGRlcnImJksuc3RkZXJyLmdldENvbG9yRGVwdGgmJjEhPT1LLnN0ZGVyci5nZXRDb2xv'@;
put 'ckRlcHRoKCk/KG5lPSJceDFiWzM0bSIsaWU9Ilx4MWJbMzJtIixkZT0iXHgxYlszOW0iLGxlPSJceDFiWzMxbSIpOihuZT0iIixpZT0iIixkZT0iIixsZT0iIikpLCJvYmplY3QiPT09VyhtZSkmJm51bGwhPT1tZSYmIm9iamVjdCI9PT1XKGtlKSYmbnVsbCE9PWtlJiYic3RhY2siaW4gbWUm'@;
put 'Jm1lIGluc3RhbmNlb2YgRXJyb3ImJiJzdGFjayJpbiBrZSYma2UgaW5zdGFuY2VvZiBFcnJvciYmKG1lPVkobWUpLGtlPVkoa2UpKSwiZGVlcFN0cmljdEVxdWFsIj09PXJlfHwic3RyaWN0RXF1YWwiPT09cmUpUz1SKHRoaXMsRyhnKS5jYWxsKHRoaXMsZnVuY3Rpb24geChGLGcsQyl7dmFy'@;
put 'IE09IiIseT0iIixwPTAsUz0iIixRPSExLHJlPWIoRiksZmU9cmUuc3BsaXQoIlxuIiksbWU9YihnKS5zcGxpdCgiXG4iKSxrZT0wLFRlPSIiO2lmKCJzdHJpY3RFcXVhbCI9PT1DJiYib2JqZWN0Ij09PVcoRikmJiJvYmplY3QiPT09VyhnKSYmbnVsbCE9PUYmJm51bGwhPT1nJiYoQz0ic3Ry'@;
put 'aWN0RXF1YWxPYmplY3QiKSwxPT09ZmUubGVuZ3RoJiYxPT09bWUubGVuZ3RoJiZmZVswXSE9PW1lWzBdKXt2YXIgUGU9ZmVbMF0ubGVuZ3RoK21lWzBdLmxlbmd0aDtpZihQZTw9MTApe2lmKCEoIm9iamVjdCI9PT1XKEYpJiZudWxsIT09Rnx8Im9iamVjdCI9PT1XKGcpJiZudWxsIT09Z3x8'@;
put 'MD09PUYmJjA9PT1nKSlyZXR1cm4iIi5jb25jYXQodWVbQ10sIlxuXG4iKSsiIi5jb25jYXQoZmVbMF0sIiAhPT0gIikuY29uY2F0KG1lWzBdLCJcbiIpfWVsc2UgaWYoInN0cmljdEVxdWFsT2JqZWN0IiE9PUMmJlBlPChLLnN0ZGVyciYmSy5zdGRlcnIuaXNUVFk/Sy5zdGRlcnIuY29sdW1u'@;
put 'czo4MCkpe2Zvcig7ZmVbMF1ba2VdPT09bWVbMF1ba2VdOylrZSsrO2tlPjImJihUZT0iXG4gICIuY29uY2F0KGZ1bmN0aW9uKGV0LG50KXtpZihudD1NYXRoLmZsb29yKG50KSwwPT1ldC5sZW5ndGh8fDA9PW50KXJldHVybiIiO3ZhciBxZT1ldC5sZW5ndGgqbnQ7Zm9yKG50PU1hdGguZmxv'@;
put 'b3IoTWF0aC5sb2cobnQpL01hdGgubG9nKDIpKTtudDspZXQrPWV0LG50LS07cmV0dXJuIGV0K2V0LnN1YnN0cmluZygwLHFlLWV0Lmxlbmd0aCl9KCIgIixrZSksIl4iKSxrZT0wKX19Zm9yKHZhciBGZT1mZVtmZS5sZW5ndGgtMV0sTmU9bWVbbWUubGVuZ3RoLTFdO0ZlPT09TmUmJihrZSsr'@;
put 'PDI/Uz0iXG4gICIuY29uY2F0KEZlKS5jb25jYXQoUyk6TT1GZSxmZS5wb3AoKSxtZS5wb3AoKSwwIT09ZmUubGVuZ3RoJiYwIT09bWUubGVuZ3RoKTspRmU9ZmVbZmUubGVuZ3RoLTFdLE5lPW1lW21lLmxlbmd0aC0xXTt2YXIgTGU9TWF0aC5tYXgoZmUubGVuZ3RoLG1lLmxlbmd0aCk7aWYo'@;
put 'MD09PUxlKXt2YXIgQmU9cmUuc3BsaXQoIlxuIik7aWYoQmUubGVuZ3RoPjMwKWZvcihCZVsyNl09IiIuY29uY2F0KG5lLCIuLi4iKS5jb25jYXQoZGUpO0JlLmxlbmd0aD4yNzspQmUucG9wKCk7cmV0dXJuIiIuY29uY2F0KHVlLm5vdElkZW50aWNhbCwiXG5cbiIpLmNvbmNhdChCZS5qb2lu'@;
put 'KCJcbiIpLCJcbiIpfWtlPjMmJihTPSJcbiIuY29uY2F0KG5lLCIuLi4iKS5jb25jYXQoZGUpLmNvbmNhdChTKSxRPSEwKSwiIiE9PU0mJihTPSJcbiAgIi5jb25jYXQoTSkuY29uY2F0KFMpLE09IiIpO3ZhciBIZT0wLFFlPXVlW0NdKyJcbiIuY29uY2F0KGllLCIrIGFjdHVhbCIpLmNvbmNh'@;
put 'dChkZSwiICIpLmNvbmNhdChsZSwiLSBleHBlY3RlZCIpLmNvbmNhdChkZSksbXQ9IiAiLmNvbmNhdChuZSwiLi4uIikuY29uY2F0KGRlLCIgTGluZXMgc2tpcHBlZCIpO2ZvcihrZT0wO2tlPExlO2tlKyspe3ZhciBLZT1rZS1wO2lmKGZlLmxlbmd0aDxrZSsxKUtlPjEmJmtlPjImJihLZT40'@;
put 'Pyh5Kz0iXG4iLmNvbmNhdChuZSwiLi4uIikuY29uY2F0KGRlKSxRPSEwKTpLZT4zJiYoeSs9IlxuICAiLmNvbmNhdChtZVtrZS0yXSksSGUrKykseSs9IlxuICAiLmNvbmNhdChtZVtrZS0xXSksSGUrKykscD1rZSxNKz0iXG4iLmNvbmNhdChsZSwiLSIpLmNvbmNhdChkZSwiICIpLmNvbmNh'@;
put 'dChtZVtrZV0pLEhlKys7ZWxzZSBpZihtZS5sZW5ndGg8a2UrMSlLZT4xJiZrZT4yJiYoS2U+ND8oeSs9IlxuIi5jb25jYXQobmUsIi4uLiIpLmNvbmNhdChkZSksUT0hMCk6S2U+MyYmKHkrPSJcbiAgIi5jb25jYXQoZmVba2UtMl0pLEhlKyspLHkrPSJcbiAgIi5jb25jYXQoZmVba2UtMV0p'@;
put 'LEhlKyspLHA9a2UseSs9IlxuIi5jb25jYXQoaWUsIisiKS5jb25jYXQoZGUsIiAiKS5jb25jYXQoZmVba2VdKSxIZSsrO2Vsc2V7dmFyIHdlPW1lW2tlXSxJZT1mZVtrZV0sT2U9SWUhPT13ZSYmKCF0ZShJZSwiLCIpfHxJZS5zbGljZSgwLC0xKSE9PXdlKTtPZSYmdGUod2UsIiwiKSYmd2Uu'@;
put 'c2xpY2UoMCwtMSk9PT1JZSYmKE9lPSExLEllKz0iLCIpLE9lPyhLZT4xJiZrZT4yJiYoS2U+ND8oeSs9IlxuIi5jb25jYXQobmUsIi4uLiIpLmNvbmNhdChkZSksUT0hMCk6S2U+MyYmKHkrPSJcbiAgIi5jb25jYXQoZmVba2UtMl0pLEhlKyspLHkrPSJcbiAgIi5jb25jYXQoZmVba2UtMV0p'@;
put 'LEhlKyspLHA9a2UseSs9IlxuIi5jb25jYXQoaWUsIisiKS5jb25jYXQoZGUsIiAiKS5jb25jYXQoSWUpLE0rPSJcbiIuY29uY2F0KGxlLCItIikuY29uY2F0KGRlLCIgIikuY29uY2F0KHdlKSxIZSs9Mik6KHkrPU0sTT0iIiwxIT09S2UmJjAhPT1rZXx8KHkrPSJcbiAgIi5jb25jYXQoSWUp'@;
put 'LEhlKyspKX1pZihIZT4yMCYma2U8TGUtMilyZXR1cm4iIi5jb25jYXQoUWUpLmNvbmNhdChtdCwiXG4iKS5jb25jYXQoeSwiXG4iKS5jb25jYXQobmUsIi4uLiIpLmNvbmNhdChkZSkuY29uY2F0KE0sIlxuIikrIiIuY29uY2F0KG5lLCIuLi4iKS5jb25jYXQoZGUpfXJldHVybiIiLmNvbmNh'@;
put 'dChRZSkuY29uY2F0KFE/bXQ6IiIsIlxuIikuY29uY2F0KHkpLmNvbmNhdChNKS5jb25jYXQoUykuY29uY2F0KFRlKX0obWUsa2UscmUpKSk7ZWxzZSBpZigibm90RGVlcFN0cmljdEVxdWFsIj09PXJlfHwibm90U3RyaWN0RXF1YWwiPT09cmUpe3ZhciBQZT11ZVtyZV0sRmU9YihtZSkuc3Bs'@;
put 'aXQoIlxuIik7aWYoIm5vdFN0cmljdEVxdWFsIj09PXJlJiYib2JqZWN0Ij09PVcobWUpJiZudWxsIT09bWUmJihQZT11ZS5ub3RTdHJpY3RFcXVhbE9iamVjdCksRmUubGVuZ3RoPjMwKWZvcihGZVsyNl09IiIuY29uY2F0KG5lLCIuLi4iKS5jb25jYXQoZGUpO0ZlLmxlbmd0aD4yNzspRmUu'@;
put 'cG9wKCk7Uz1SKHRoaXMsMT09PUZlLmxlbmd0aD9HKGcpLmNhbGwodGhpcywiIi5jb25jYXQoUGUsIiAiKS5jb25jYXQoRmVbMF0pKTpHKGcpLmNhbGwodGhpcywiIi5jb25jYXQoUGUsIlxuXG4iKS5jb25jYXQoRmUuam9pbigiXG4iKSwiXG4iKSkpfWVsc2V7dmFyIE5lPWIobWUpLExlPSIi'@;
put 'LEJlPXVlW3JlXTsibm90RGVlcEVxdWFsIj09PXJlfHwibm90RXF1YWwiPT09cmU/KE5lPSIiLmNvbmNhdCh1ZVtyZV0sIlxuXG4iKS5jb25jYXQoTmUpKS5sZW5ndGg+MTAyNCYmKE5lPSIiLmNvbmNhdChOZS5zbGljZSgwLDEwMjEpLCIuLi4iKSk6KExlPSIiLmNvbmNhdChiKGtlKSksTmUu'@;
put 'bGVuZ3RoPjUxMiYmKE5lPSIiLmNvbmNhdChOZS5zbGljZSgwLDUwOSksIi4uLiIpKSxMZS5sZW5ndGg+NTEyJiYoTGU9IiIuY29uY2F0KExlLnNsaWNlKDAsNTA5KSwiLi4uIikpLCJkZWVwRXF1YWwiPT09cmV8fCJlcXVhbCI9PT1yZT9OZT0iIi5jb25jYXQoQmUsIlxuXG4iKS5jb25jYXQo'@;
put 'TmUsIlxuXG5zaG91bGQgZXF1YWxcblxuIik6TGU9IiAiLmNvbmNhdChyZSwiICIpLmNvbmNhdChMZSkpLFM9Uih0aGlzLEcoZykuY2FsbCh0aGlzLCIiLmNvbmNhdChOZSkuY29uY2F0KExlKSkpfXJldHVybiBFcnJvci5zdGFja1RyYWNlTGltaXQ9VGUsUy5nZW5lcmF0ZWRNZXNzYWdlPSFR'@;
put 'LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFKFMpLCJuYW1lIix7dmFsdWU6IkFzc2VydGlvbkVycm9yIFtFUlJfQVNTRVJUSU9OXSIsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxTLmNvZGU9IkVSUl9BU1NFUlRJT04iLFMuYWN0dWFsPW1lLFMuZXhwZWN0ZWQ9'@;
put 'a2UsUy5vcGVyYXRvcj1yZSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSYmRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoRShTKSxmZSksUy5uYW1lPSJBc3NlcnRpb25FcnJvciIsUihTKX12YXIgTTtyZXR1cm4gZnVuY3Rpb24ocCxTKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgUyYmbnVsbCE9PVMp'@;
put 'dGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtwLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFMmJlMucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6cCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9'@;
put 'fSksUyYmVihwLFMpfShnLEYpLE09W3trZXk6InRvU3RyaW5nIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiIiLmNvbmNhdCh0aGlzLm5hbWUsIiBbIikuY29uY2F0KHRoaXMuY29kZSwiXTogIikuY29uY2F0KHRoaXMubWVzc2FnZSl9fSx7a2V5OlUuY3VzdG9tLHZhbHVlOmZ1bmN0aW9uKHAs'@;
put 'Uyl7cmV0dXJuIFUodGhpcyxmdW5jdGlvbihRKXtmb3IodmFyIHJlPTE7cmU8YXJndW1lbnRzLmxlbmd0aDtyZSsrKXt2YXIgZmU9bnVsbCE9YXJndW1lbnRzW3JlXT9hcmd1bWVudHNbcmVdOnt9LG1lPU9iamVjdC5rZXlzKGZlKTsiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmdldE93blBy'@;
put 'b3BlcnR5U3ltYm9scyYmKG1lPW1lLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGZlKS5maWx0ZXIoZnVuY3Rpb24oa2Upe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGZlLGtlKS5lbnVtZXJhYmxlfSkpKSxtZS5mb3JFYWNoKGZ1bmN0aW9uKGtl'@;
put 'KXtKKFEsa2UsZmVba2VdKX0pfXJldHVybiBRfSh7fSxTLHtjdXN0b21JbnNwZWN0OiExLGRlcHRoOjB9KSl9fV0sTSYmZnVuY3Rpb24gSShGLGcpe2Zvcih2YXIgQz0wO0M8Zy5sZW5ndGg7QysrKXt2YXIgTT1nW0NdO00uZW51bWVyYWJsZT1NLmVudW1lcmFibGV8fCExLE0uY29uZmlndXJh'@;
put 'YmxlPSEwLCJ2YWx1ZSJpbiBNJiYoTS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYsTS5rZXksTSl9fShnLnByb3RvdHlwZSxNKSxnfSh6KEVycm9yKSk7SC5leHBvcnRzPU59LDIxMzY6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBLKFcpe3JldHVybihLPSJm'@;
put 'dW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKFUpe3JldHVybiB0eXBlb2YgVX06ZnVuY3Rpb24oVSl7cmV0dXJuIFUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlUuY29uc3RydWN0b3I9PT1TeW1ib2wmJlUhPT1T'@;
put 'eW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBVfSkoVyl9ZnVuY3Rpb24gSShXKXtyZXR1cm4oST1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKFUpe3JldHVybiBVLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKFUpfSko'@;
put 'Vyl9ZnVuY3Rpb24gUihXLFUpe3JldHVybihSPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24ocSx0ZSl7cmV0dXJuIHEuX19wcm90b19fPXRlLHF9KShXLFUpfXZhciBFLHosaj17fTtmdW5jdGlvbiBWKFcsVSxxKXtxfHwocT1FcnJvcik7dmFyIHRlPWZ1bmN0aW9uKG5lKXtmdW5j'@;
put 'dGlvbiBpZShsZSxkZSx1ZSl7dmFyIGNlO3JldHVybiBmdW5jdGlvbihZLGIpe2lmKCEoWSBpbnN0YW5jZW9mIGIpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGllKSxjZT1mdW5jdGlvbiBKKFcsVSl7cmV0dXJuIVV8fCJv'@;
put 'YmplY3QiIT09SyhVKSYmImZ1bmN0aW9uIiE9dHlwZW9mIFU/ZnVuY3Rpb24ocSl7aWYodm9pZCAwPT09cSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBxfShXKTpVfSh0'@;
put 'aGlzLEkoaWUpLmNhbGwodGhpcywic3RyaW5nIj09dHlwZW9mIFU/VTpVKGxlLGRlLHVlKSkpLGNlLmNvZGU9VyxjZX1yZXR1cm4gZnVuY3Rpb24obGUsZGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBkZSYmbnVsbCE9PWRlKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24g'@;
put 'bXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7bGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZGUmJmRlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmxlLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxkZSYmUihsZSxkZSl9KGllLG5lKSxpZX0ocSk7altX'@;
put 'XT10ZX1mdW5jdGlvbiBHKFcsVSl7aWYoQXJyYXkuaXNBcnJheShXKSl7dmFyIHE9Vy5sZW5ndGg7cmV0dXJuIFc9Vy5tYXAoZnVuY3Rpb24odGUpe3JldHVybiBTdHJpbmcodGUpfSkscT4yPyJvbmUgb2YgIi5jb25jYXQoVSwiICIpLmNvbmNhdChXLnNsaWNlKDAscS0xKS5qb2luKCIsICIp'@;
put 'LCIsIG9yICIpK1dbcS0xXToyPT09cT8ib25lIG9mICIuY29uY2F0KFUsIiAiKS5jb25jYXQoV1swXSwiIG9yICIpLmNvbmNhdChXWzFdKToib2YgIi5jb25jYXQoVSwiICIpLmNvbmNhdChXWzBdKX1yZXR1cm4ib2YgIi5jb25jYXQoVSwiICIpLmNvbmNhdChTdHJpbmcoVykpfVYoIkVSUl9B'@;
put 'TUJJR1VPVVNfQVJHVU1FTlQiLCdUaGUgIiVzIiBhcmd1bWVudCBpcyBhbWJpZ3VvdXMuICVzJyxUeXBlRXJyb3IpLFYoIkVSUl9JTlZBTElEX0FSR19UWVBFIixmdW5jdGlvbihXLFUscSl7dmFyIHRlLGxlLHVlLFk7aWYodm9pZCAwPT09RSYmKEU9TCg5MjgyKSksRSgic3RyaW5nIj09dHlw'@;
put 'ZW9mIFcsIiduYW1lJyBtdXN0IGJlIGEgc3RyaW5nIiksInN0cmluZyI9PXR5cGVvZiBVJiYibm90ICI9PT1VLnN1YnN0cigwLDQpPyh0ZT0ibXVzdCBub3QgYmUiLFU9VS5yZXBsYWNlKC9ebm90IC8sIiIpKTp0ZT0ibXVzdCBiZSIsdWU9Vywodm9pZCAwPT09WXx8WT51ZS5sZW5ndGgpJiYo'@;
put 'WT11ZS5sZW5ndGgpLCIgYXJndW1lbnQiPT09dWUuc3Vic3RyaW5nKFktOSxZKSlsZT0iVGhlICIuY29uY2F0KFcsIiAiKS5jb25jYXQodGUsIiAiKS5jb25jYXQoRyhVLCJ0eXBlIikpO2Vsc2V7dmFyIGRlPWZ1bmN0aW9uKHVlLGNlLFkpe3JldHVybiJudW1iZXIiIT10eXBlb2YgWSYmKFk9'@;
put 'MCksIShZKzE+dWUubGVuZ3RoKSYmLTEhPT11ZS5pbmRleE9mKCIuIixZKX0oVyk/InByb3BlcnR5IjoiYXJndW1lbnQiO2xlPSdUaGUgIicuY29uY2F0KFcsJyIgJykuY29uY2F0KGRlLCIgIikuY29uY2F0KHRlLCIgIikuY29uY2F0KEcoVSwidHlwZSIpKX1yZXR1cm4gbGUrIi4gUmVjZWl2'@;
put 'ZWQgdHlwZSAiLmNvbmNhdChLKHEpKX0sVHlwZUVycm9yKSxWKCJFUlJfSU5WQUxJRF9BUkdfVkFMVUUiLGZ1bmN0aW9uKFcsVSl7dmFyIHE9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOiJpcyBpbnZhbGlkIjt2b2lkIDA9PT16JiYoej1M'@;
put 'KDk1MzkpKTt2YXIgdGU9ei5pbnNwZWN0KFUpO3JldHVybiB0ZS5sZW5ndGg+MTI4JiYodGU9IiIuY29uY2F0KHRlLnNsaWNlKDAsMTI4KSwiLi4uIikpLCJUaGUgYXJndW1lbnQgJyIuY29uY2F0KFcsIicgIikuY29uY2F0KHEsIi4gUmVjZWl2ZWQgIikuY29uY2F0KHRlKX0sVHlwZUVycm9y'@;
put 'LFJhbmdlRXJyb3IpLFYoIkVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSIsZnVuY3Rpb24oVyxVLHEpe3ZhciB0ZTtyZXR1cm4gdGU9cSYmcS5jb25zdHJ1Y3RvciYmcS5jb25zdHJ1Y3Rvci5uYW1lPyJpbnN0YW5jZSBvZiAiLmNvbmNhdChxLmNvbnN0cnVjdG9yLm5hbWUpOiJ0eXBlICIuY29u'@;
put 'Y2F0KEsocSkpLCJFeHBlY3RlZCAiLmNvbmNhdChXLCcgdG8gYmUgcmV0dXJuZWQgZnJvbSB0aGUgIicpLmNvbmNhdChVLCciJykrIiBmdW5jdGlvbiBidXQgZ290ICIuY29uY2F0KHRlLCIuIil9LFR5cGVFcnJvciksVigiRVJSX01JU1NJTkdfQVJHUyIsZnVuY3Rpb24oKXtmb3IodmFyIFc9'@;
put 'YXJndW1lbnRzLmxlbmd0aCxVPW5ldyBBcnJheShXKSxxPTA7cTxXO3ErKylVW3FdPWFyZ3VtZW50c1txXTt2b2lkIDA9PT1FJiYoRT1MKDkyODIpKSxFKFUubGVuZ3RoPjAsIkF0IGxlYXN0IG9uZSBhcmcgbmVlZHMgdG8gYmUgc3BlY2lmaWVkIik7dmFyIHRlPSJUaGUgIixuZT1VLmxlbmd0'@;
put 'aDtzd2l0Y2goVT1VLm1hcChmdW5jdGlvbihpZSl7cmV0dXJuJyInLmNvbmNhdChpZSwnIicpfSksbmUpe2Nhc2UgMTp0ZSs9IiIuY29uY2F0KFVbMF0sIiBhcmd1bWVudCIpO2JyZWFrO2Nhc2UgMjp0ZSs9IiIuY29uY2F0KFVbMF0sIiBhbmQgIikuY29uY2F0KFVbMV0sIiBhcmd1bWVudHMi'@;
put 'KTticmVhaztkZWZhdWx0OnRlKz1VLnNsaWNlKDAsbmUtMSkuam9pbigiLCAiKSx0ZSs9IiwgYW5kICIuY29uY2F0KFVbbmUtMV0sIiBhcmd1bWVudHMiKX1yZXR1cm4iIi5jb25jYXQodGUsIiBtdXN0IGJlIHNwZWNpZmllZCIpfSxUeXBlRXJyb3IpLEguZXhwb3J0cy5jb2Rlcz1qfSw5MTU4'@;
put 'OihILEIsTCk9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gSyh3ZSxJZSl7cmV0dXJuIGZ1bmN0aW9uKE9lKXtpZihBcnJheS5pc0FycmF5KE9lKSlyZXR1cm4gT2V9KHdlKXx8ZnVuY3Rpb24oT2UsZXQpe3ZhciBudD1bXSxxZT0hMCxodD0hMSxFZT12b2lkIDA7dHJ5e2Zvcih2YXIgRGUsJGU9'@;
put 'T2VbU3ltYm9sLml0ZXJhdG9yXSgpOyEocWU9KERlPSRlLm5leHQoKSkuZG9uZSkmJihudC5wdXNoKERlLnZhbHVlKSwhZXR8fG50Lmxlbmd0aCE9PWV0KTtxZT0hMCk7fWNhdGNoKGF0KXtodD0hMCxFZT1hdH1maW5hbGx5e3RyeXtxZXx8bnVsbD09JGUucmV0dXJufHwkZS5yZXR1cm4oKX1m'@;
put 'aW5hbGx5e2lmKGh0KXRocm93IEVlfX1yZXR1cm4gbnR9KHdlLEllKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9KCl9ZnVuY3Rpb24gSih3ZSl7cmV0dXJuKEo9ImZ1bmN0aW9u'@;
put 'Ij09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oSWUpe3JldHVybiB0eXBlb2YgSWV9OmZ1bmN0aW9uKEllKXtyZXR1cm4gSWUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJkllLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZJZSE9PVN5'@;
put 'bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIEllfSkod2UpfXZhciBJPXZvaWQgMCE9PS9hL2cuZmxhZ3MsUj1mdW5jdGlvbih3ZSl7dmFyIEllPVtdO3JldHVybiB3ZS5mb3JFYWNoKGZ1bmN0aW9uKE9lKXtyZXR1cm4gSWUucHVzaChPZSl9KSxJZX0sRT1mdW5jdGlvbih3ZSl7dmFy'@;
put 'IEllPVtdO3JldHVybiB3ZS5mb3JFYWNoKGZ1bmN0aW9uKE9lLGV0KXtyZXR1cm4gSWUucHVzaChbZXQsT2VdKX0pLEllfSx6PU9iamVjdC5pcz9PYmplY3QuaXM6TCg2MDkpLGo9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz9PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzOmZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuW119LFY9TnVtYmVyLmlzTmFOP051bWJlci5pc05hTjpMKDM2MCk7ZnVuY3Rpb24gRyh3ZSl7cmV0dXJuIHdlLmNhbGwuYmluZCh3ZSl9dmFyIFc9RyhPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KSxVPUcoT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51'@;
put 'bWVyYWJsZSkscT1HKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcpLHRlPUwoOTUzOSkudHlwZXMsbmU9dGUuaXNBbnlBcnJheUJ1ZmZlcixpZT10ZS5pc0FycmF5QnVmZmVyVmlldyxsZT10ZS5pc0RhdGUsZGU9dGUuaXNNYXAsdWU9dGUuaXNSZWdFeHAsY2U9dGUuaXNTZXQsWT10ZS5pc05h'@;
put 'dGl2ZUVycm9yLGI9dGUuaXNCb3hlZFByaW1pdGl2ZSx4PXRlLmlzTnVtYmVyT2JqZWN0LE49dGUuaXNTdHJpbmdPYmplY3QsRj10ZS5pc0Jvb2xlYW5PYmplY3QsZz10ZS5pc0JpZ0ludE9iamVjdCxDPXRlLmlzU3ltYm9sT2JqZWN0LE09dGUuaXNGbG9hdDMyQXJyYXkseT10ZS5pc0Zsb2F0'@;
put 'NjRBcnJheTtmdW5jdGlvbiBwKHdlKXtpZigwPT09d2UubGVuZ3RofHx3ZS5sZW5ndGg+MTApcmV0dXJuITA7Zm9yKHZhciBJZT0wO0llPHdlLmxlbmd0aDtJZSsrKXt2YXIgT2U9d2UuY2hhckNvZGVBdChJZSk7aWYoT2U8NDh8fE9lPjU3KXJldHVybiEwfXJldHVybiAxMD09PXdlLmxlbmd0'@;
put 'aCYmd2U+PU1hdGgucG93KDIsMzIpfWZ1bmN0aW9uIFMod2Upe3JldHVybiBPYmplY3Qua2V5cyh3ZSkuZmlsdGVyKHApLmNvbmNhdChqKHdlKS5maWx0ZXIoT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5iaW5kKHdlKSkpfWZ1bmN0aW9uIFEod2UsSWUpe2lmKHdlPT09'@;
put 'SWUpcmV0dXJuIDA7Zm9yKHZhciBPZT13ZS5sZW5ndGgsZXQ9SWUubGVuZ3RoLG50PTAscWU9TWF0aC5taW4oT2UsZXQpO250PHFlOysrbnQpaWYod2VbbnRdIT09SWVbbnRdKXtPZT13ZVtudF0sZXQ9SWVbbnRdO2JyZWFrfXJldHVybiBPZTxldD8tMTpldDxPZT8xOjB9dmFyIG1lPTAsa2U9'@;
put 'MSxUZT0yLFBlPTM7ZnVuY3Rpb24gRmUod2UsSWUsT2UsZXQpe2lmKHdlPT09SWUpcmV0dXJuIDAhPT13ZXx8IU9lfHx6KHdlLEllKTtpZihPZSl7aWYoIm9iamVjdCIhPT1KKHdlKSlyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHdlJiZWKHdlKSYmVihJZSk7aWYoIm9iamVjdCIhPT1KKEllKXx8'@;
put 'bnVsbD09PXdlfHxudWxsPT09SWV8fE9iamVjdC5nZXRQcm90b3R5cGVPZih3ZSkhPT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoSWUpKXJldHVybiExfWVsc2V7aWYobnVsbD09PXdlfHwib2JqZWN0IiE9PUood2UpKXJldHVybihudWxsPT09SWV8fCJvYmplY3QiIT09SihJZSkpJiZ3ZT09SWU7'@;
put 'aWYobnVsbD09PUllfHwib2JqZWN0IiE9PUooSWUpKXJldHVybiExfXZhciBudCxxZSxodCxFZSxQdCxBdCxEZT1xKHdlKTtpZihEZSE9PXEoSWUpKXJldHVybiExO2lmKEFycmF5LmlzQXJyYXkod2UpKXtpZih3ZS5sZW5ndGghPT1JZS5sZW5ndGgpcmV0dXJuITE7dmFyICRlPVMod2UpLGF0'@;
put 'PVMoSWUpO3JldHVybiAkZS5sZW5ndGg9PT1hdC5sZW5ndGgmJkxlKHdlLEllLE9lLGV0LGtlLCRlKX1pZigiW29iamVjdCBPYmplY3RdIj09PURlJiYoIWRlKHdlKSYmZGUoSWUpfHwhY2Uod2UpJiZjZShJZSkpKXJldHVybiExO2lmKGxlKHdlKSl7aWYoIWxlKEllKXx8RGF0ZS5wcm90b3R5'@;
put 'cGUuZ2V0VGltZS5jYWxsKHdlKSE9PURhdGUucHJvdG90eXBlLmdldFRpbWUuY2FsbChJZSkpcmV0dXJuITF9ZWxzZSBpZih1ZSh3ZSkpe2lmKCF1ZShJZSl8fChodD13ZSxFZT1JZSwhKEk/aHQuc291cmNlPT09RWUuc291cmNlJiZodC5mbGFncz09PUVlLmZsYWdzOlJlZ0V4cC5wcm90b3R5'@;
put 'cGUudG9TdHJpbmcuY2FsbChodCk9PT1SZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoRWUpKSkpcmV0dXJuITF9ZWxzZSBpZihZKHdlKXx8d2UgaW5zdGFuY2VvZiBFcnJvcil7aWYod2UubWVzc2FnZSE9PUllLm1lc3NhZ2V8fHdlLm5hbWUhPT1JZS5uYW1lKXJldHVybiExfWVsc2V7'@;
put 'aWYoaWUod2UpKXtpZihPZXx8IU0od2UpJiYheSh3ZSkpe2lmKChQdD13ZSkuYnl0ZUxlbmd0aCE9PShBdD1JZSkuYnl0ZUxlbmd0aHx8MCE9PVEobmV3IFVpbnQ4QXJyYXkoUHQuYnVmZmVyLFB0LmJ5dGVPZmZzZXQsUHQuYnl0ZUxlbmd0aCksbmV3IFVpbnQ4QXJyYXkoQXQuYnVmZmVyLEF0'@;
put 'LmJ5dGVPZmZzZXQsQXQuYnl0ZUxlbmd0aCkpKXJldHVybiExfWVsc2UgaWYoIWZ1bmN0aW9uKFB0LEF0KXtpZihQdC5ieXRlTGVuZ3RoIT09QXQuYnl0ZUxlbmd0aClyZXR1cm4hMTtmb3IodmFyIEp0PTA7SnQ8UHQuYnl0ZUxlbmd0aDtKdCsrKWlmKFB0W0p0XSE9PUF0W0p0XSlyZXR1cm4h'@;
put 'MTtyZXR1cm4hMH0od2UsSWUpKXJldHVybiExO3ZhciBjdD1TKHdlKSxPdD1TKEllKTtyZXR1cm4gY3QubGVuZ3RoPT09T3QubGVuZ3RoJiZMZSh3ZSxJZSxPZSxldCxtZSxjdCl9aWYoY2Uod2UpKXJldHVybiEoIWNlKEllKXx8d2Uuc2l6ZSE9PUllLnNpemUpJiZMZSh3ZSxJZSxPZSxldCxU'@;
put 'ZSk7aWYoZGUod2UpKXJldHVybiEoIWRlKEllKXx8d2Uuc2l6ZSE9PUllLnNpemUpJiZMZSh3ZSxJZSxPZSxldCxQZSk7aWYobmUod2UpKXtpZigobnQ9d2UpLmJ5dGVMZW5ndGghPT0ocWU9SWUpLmJ5dGVMZW5ndGh8fDAhPT1RKG5ldyBVaW50OEFycmF5KG50KSxuZXcgVWludDhBcnJheShx'@;
put 'ZSkpKXJldHVybiExfWVsc2UgaWYoYih3ZSkmJiFmdW5jdGlvbihQdCxBdCl7cmV0dXJuIHgoUHQpP3goQXQpJiZ6KE51bWJlci5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFB0KSxOdW1iZXIucHJvdG90eXBlLnZhbHVlT2YuY2FsbChBdCkpOk4oUHQpP04oQXQpJiZTdHJpbmcucHJvdG90eXBl'@;
put 'LnZhbHVlT2YuY2FsbChQdCk9PT1TdHJpbmcucHJvdG90eXBlLnZhbHVlT2YuY2FsbChBdCk6RihQdCk/RihBdCkmJkJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChQdCk9PT1Cb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoQXQpOmcoUHQpP2coQXQpJiZCaWdJbnQucHJvdG90'@;
put 'eXBlLnZhbHVlT2YuY2FsbChQdCk9PT1CaWdJbnQucHJvdG90eXBlLnZhbHVlT2YuY2FsbChBdCk6QyhBdCkmJlN5bWJvbC5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFB0KT09PVN5bWJvbC5wcm90b3R5cGUudmFsdWVPZi5jYWxsKEF0KX0od2UsSWUpKXJldHVybiExfXJldHVybiBMZSh3ZSxJ'@;
put 'ZSxPZSxldCxtZSl9ZnVuY3Rpb24gTmUod2UsSWUpe3JldHVybiBJZS5maWx0ZXIoZnVuY3Rpb24oT2Upe3JldHVybiBVKHdlLE9lKX0pfWZ1bmN0aW9uIExlKHdlLEllLE9lLGV0LG50LHFlKXtpZig1PT09YXJndW1lbnRzLmxlbmd0aCl7cWU9T2JqZWN0LmtleXMod2UpO3ZhciBodD1PYmpl'@;
put 'Y3Qua2V5cyhJZSk7aWYocWUubGVuZ3RoIT09aHQubGVuZ3RoKXJldHVybiExfWZvcih2YXIgRWU9MDtFZTxxZS5sZW5ndGg7RWUrKylpZighVyhJZSxxZVtFZV0pKXJldHVybiExO2lmKE9lJiY1PT09YXJndW1lbnRzLmxlbmd0aCl7dmFyIERlPWood2UpO2lmKDAhPT1EZS5sZW5ndGgpe3Zh'@;
put 'ciAkZT0wO2ZvcihFZT0wO0VlPERlLmxlbmd0aDtFZSsrKXt2YXIgYXQ9RGVbRWVdO2lmKFUod2UsYXQpKXtpZighVShJZSxhdCkpcmV0dXJuITE7cWUucHVzaChhdCksJGUrK31lbHNlIGlmKFUoSWUsYXQpKXJldHVybiExfXZhciBjdD1qKEllKTtpZihEZS5sZW5ndGghPT1jdC5sZW5ndGgm'@;
put 'Jk5lKEllLGN0KS5sZW5ndGghPT0kZSlyZXR1cm4hMX1lbHNle3ZhciBPdD1qKEllKTtpZigwIT09T3QubGVuZ3RoJiYwIT09TmUoSWUsT3QpLmxlbmd0aClyZXR1cm4hMX19aWYoMD09PXFlLmxlbmd0aCYmKG50PT09bWV8fG50PT09a2UmJjA9PT13ZS5sZW5ndGh8fDA9PT13ZS5zaXplKSly'@;
put 'ZXR1cm4hMDtpZih2b2lkIDA9PT1ldClldD17dmFsMTpuZXcgTWFwLHZhbDI6bmV3IE1hcCxwb3NpdGlvbjowfTtlbHNle3ZhciBQdD1ldC52YWwxLmdldCh3ZSk7aWYodm9pZCAwIT09UHQpe3ZhciBBdD1ldC52YWwyLmdldChJZSk7aWYodm9pZCAwIT09QXQpcmV0dXJuIFB0PT09QXR9ZXQu'@;
put 'cG9zaXRpb24rK31ldC52YWwxLnNldCh3ZSxldC5wb3NpdGlvbiksZXQudmFsMi5zZXQoSWUsZXQucG9zaXRpb24pO3ZhciBKdD1mdW5jdGlvbihtbixOdCxibixHbixvbiwkbil7dmFyIE5uPTA7aWYoJG49PT1UZSl7aWYoIWZ1bmN0aW9uKEN0LGVuLF90LFZ0KXtmb3IodmFyIF9uPW51bGws'@;
put 'b3Q9UihDdCksSXQ9MDtJdDxvdC5sZW5ndGg7SXQrKyl7dmFyIG5uPW90W0l0XTtpZigib2JqZWN0Ij09PUoobm4pJiZudWxsIT09bm4pbnVsbD09PV9uJiYoX249bmV3IFNldCksX24uYWRkKG5uKTtlbHNlIGlmKCFlbi5oYXMobm4pKXtpZihfdHx8IVFlKEN0LGVuLG5uKSlyZXR1cm4hMTtu'@;
put 'dWxsPT09X24mJihfbj1uZXcgU2V0KSxfbi5hZGQobm4pfX1pZihudWxsIT09X24pe2Zvcih2YXIgRHQ9UihlbiksdnQ9MDt2dDxEdC5sZW5ndGg7dnQrKyl7dmFyIEd0PUR0W3Z0XTtpZigib2JqZWN0Ij09PUooR3QpJiZudWxsIT09R3Qpe2lmKCFCZShfbixHdCxfdCxWdCkpcmV0dXJuITF9'@;
put 'ZWxzZSBpZighX3QmJiFDdC5oYXMoR3QpJiYhQmUoX24sR3QsX3QsVnQpKXJldHVybiExfXJldHVybiAwPT09X24uc2l6ZX1yZXR1cm4hMH0obW4sTnQsYm4sb24pKXJldHVybiExfWVsc2UgaWYoJG49PT1QZSl7aWYoIWZ1bmN0aW9uKEN0LGVuLF90LFZ0KXtmb3IodmFyIF9uPW51bGwsb3Q9'@;
put 'RShDdCksSXQ9MDtJdDxvdC5sZW5ndGg7SXQrKyl7dmFyIG5uPUsob3RbSXRdLDIpLER0PW5uWzBdLHZ0PW5uWzFdO2lmKCJvYmplY3QiPT09SihEdCkmJm51bGwhPT1EdCludWxsPT09X24mJihfbj1uZXcgU2V0KSxfbi5hZGQoRHQpO2Vsc2V7dmFyIEd0PWVuLmdldChEdCk7aWYodm9pZCAw'@;
put 'PT09R3QmJiFlbi5oYXMoRHQpfHwhRmUodnQsR3QsX3QsVnQpKXtpZihfdHx8IW10KEN0LGVuLER0LHZ0LFZ0KSlyZXR1cm4hMTtudWxsPT09X24mJihfbj1uZXcgU2V0KSxfbi5hZGQoRHQpfX19aWYobnVsbCE9PV9uKXtmb3IodmFyIExuPUUoZW4pLHp0PTA7enQ8TG4ubGVuZ3RoO3p0Kysp'@;
put 'e3ZhciBNbj1LKExuW3p0XSwyKSxUbj0oRHQ9TW5bMF0sTW5bMV0pO2lmKCJvYmplY3QiPT09SihEdCkmJm51bGwhPT1EdCl7aWYoIUtlKF9uLEN0LER0LFRuLF90LFZ0KSlyZXR1cm4hMX1lbHNlIGlmKCEoX3R8fEN0LmhhcyhEdCkmJkZlKEN0LmdldChEdCksVG4sITEsVnQpfHxLZShfbixD'@;
put 'dCxEdCxUbiwhMSxWdCkpKXJldHVybiExfXJldHVybiAwPT09X24uc2l6ZX1yZXR1cm4hMH0obW4sTnQsYm4sb24pKXJldHVybiExfWVsc2UgaWYoJG49PT1rZSlmb3IoO05uPG1uLmxlbmd0aDtObisrKXtpZighVyhtbixObikpe2lmKFcoTnQsTm4pKXJldHVybiExO2Zvcih2YXIgcHQ9T2Jq'@;
put 'ZWN0LmtleXMobW4pO05uPHB0Lmxlbmd0aDtObisrKXt2YXIgcG49cHRbTm5dO2lmKCFXKE50LHBuKXx8IUZlKG1uW3BuXSxOdFtwbl0sYm4sb24pKXJldHVybiExfXJldHVybiBwdC5sZW5ndGg9PT1PYmplY3Qua2V5cyhOdCkubGVuZ3RofWlmKCFXKE50LE5uKXx8IUZlKG1uW05uXSxOdFtO'@;
put 'bl0sYm4sb24pKXJldHVybiExfWZvcihObj0wO05uPEduLmxlbmd0aDtObisrKXt2YXIgaG49R25bTm5dO2lmKCFGZShtbltobl0sTnRbaG5dLGJuLG9uKSlyZXR1cm4hMX1yZXR1cm4hMH0od2UsSWUsT2UscWUsZXQsbnQpO3JldHVybiBldC52YWwxLmRlbGV0ZSh3ZSksZXQudmFsMi5kZWxl'@;
put 'dGUoSWUpLEp0fWZ1bmN0aW9uIEJlKHdlLEllLE9lLGV0KXtmb3IodmFyIG50PVIod2UpLHFlPTA7cWU8bnQubGVuZ3RoO3FlKyspe3ZhciBodD1udFtxZV07aWYoRmUoSWUsaHQsT2UsZXQpKXJldHVybiB3ZS5kZWxldGUoaHQpLCEwfXJldHVybiExfWZ1bmN0aW9uIEhlKHdlKXtzd2l0Y2go'@;
put 'Sih3ZSkpe2Nhc2UidW5kZWZpbmVkIjpyZXR1cm4gbnVsbDtjYXNlIm9iamVjdCI6cmV0dXJuO2Nhc2Uic3ltYm9sIjpyZXR1cm4hMTtjYXNlInN0cmluZyI6d2U9K3dlO2Nhc2UibnVtYmVyIjppZihWKHdlKSlyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBRZSh3ZSxJZSxPZSl7dmFyIGV0'@;
put 'PUhlKE9lKTtyZXR1cm4gZXQ/PyhJZS5oYXMoZXQpJiYhd2UuaGFzKGV0KSl9ZnVuY3Rpb24gbXQod2UsSWUsT2UsZXQsbnQpe3ZhciBxZT1IZShPZSk7aWYobnVsbCE9cWUpcmV0dXJuIHFlO3ZhciBodD1JZS5nZXQocWUpO3JldHVybiEodm9pZCAwPT09aHQmJiFJZS5oYXMocWUpfHwhRmUo'@;
put 'ZXQsaHQsITEsbnQpKSYmIXdlLmhhcyhxZSkmJkZlKGV0LGh0LCExLG50KX1mdW5jdGlvbiBLZSh3ZSxJZSxPZSxldCxudCxxZSl7Zm9yKHZhciBodD1SKHdlKSxFZT0wO0VlPGh0Lmxlbmd0aDtFZSsrKXt2YXIgRGU9aHRbRWVdO2lmKEZlKE9lLERlLG50LHFlKSYmRmUoZXQsSWUuZ2V0KERl'@;
put 'KSxudCxxZSkpcmV0dXJuIHdlLmRlbGV0ZShEZSksITB9cmV0dXJuITF9SC5leHBvcnRzPXtpc0RlZXBFcXVhbDpmdW5jdGlvbih3ZSxJZSl7cmV0dXJuIEZlKHdlLEllLCExKX0saXNEZWVwU3RyaWN0RXF1YWw6ZnVuY3Rpb24od2UsSWUpe3JldHVybiBGZSh3ZSxJZSwhMCl9fX0sODIyNDpI'@;
put 'PT57InVzZSBzdHJpY3QiO0guZXhwb3J0cz1mdW5jdGlvbihCKXtyZXR1cm4gQn19LDk2Njk6KEgsQixMKT0+e0guZXhwb3J0cz1MKDE2MDkpfSw1NDQ4OihILEIsTCk9PnsidXNlIHN0cmljdCI7dmFyIEs9TCg0ODY3KSxKPUwoNjAyNiksST1MKDQzNzIpLFI9TCg1MzI3KSxFPUwoNDA5Nyks'@;
put 'ej1MKDQxMDkpLGo9TCg3OTg1KSxWPUwoNzg3NCksRz1MKDI2NDgpLFc9TCg2NDQpLFU9TCgyMDUpO0guZXhwb3J0cz1mdW5jdGlvbihxKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odGUsbmUpe3ZhciBpZSxsZT1xLmRhdGEsZGU9cS5oZWFkZXJzLHVlPXEucmVzcG9uc2VUeXBlO2Z1'@;
put 'bmN0aW9uIGNlKCl7cS5jYW5jZWxUb2tlbiYmcS5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShpZSkscS5zaWduYWwmJnEuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixpZSl9Sy5pc0Zvcm1EYXRhKGxlKSYmSy5pc1N0YW5kYXJkQnJvd3NlckVudigpJiZkZWxldGUgZGVbIkNv'@;
put 'bnRlbnQtVHlwZSJdO3ZhciBZPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihxLmF1dGgpe3ZhciBiPXEuYXV0aC51c2VybmFtZXx8IiIseD1xLmF1dGgucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KHEuYXV0aC5wYXNzd29yZCkpOiIiO2RlLkF1dGhvcml6YXRpb249IkJhc2lj'@;
put 'ICIrYnRvYShiKyI6Iit4KX12YXIgTj1FKHEuYmFzZVVSTCxxLnVybCk7ZnVuY3Rpb24gRigpe2lmKFkpe3ZhciBNPSJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gWT96KFkuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpOm51bGw7SihmdW5jdGlvbihwKXt0ZShwKSxjZSgpfSxmdW5jdGlvbihw'@;
put 'KXtuZShwKSxjZSgpfSx7ZGF0YTp1ZSYmInRleHQiIT09dWUmJiJqc29uIiE9PXVlP1kucmVzcG9uc2U6WS5yZXNwb25zZVRleHQsc3RhdHVzOlkuc3RhdHVzLHN0YXR1c1RleHQ6WS5zdGF0dXNUZXh0LGhlYWRlcnM6TSxjb25maWc6cSxyZXF1ZXN0Oll9KSxZPW51bGx9fWlmKFkub3Blbihx'@;
put 'Lm1ldGhvZC50b1VwcGVyQ2FzZSgpLFIoTixxLnBhcmFtcyxxLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxZLnRpbWVvdXQ9cS50aW1lb3V0LCJvbmxvYWRlbmQiaW4gWT9ZLm9ubG9hZGVuZD1GOlkub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7WSYmND09PVkucmVhZHlTdGF0ZSYmKDAh'@;
put 'PT1ZLnN0YXR1c3x8WS5yZXNwb25zZVVSTCYmMD09PVkucmVzcG9uc2VVUkwuaW5kZXhPZigiZmlsZToiKSkmJnNldFRpbWVvdXQoRil9LFkub25hYm9ydD1mdW5jdGlvbigpe1kmJihuZShuZXcgRygiUmVxdWVzdCBhYm9ydGVkIixHLkVDT05OQUJPUlRFRCxxLFkpKSxZPW51bGwpfSxZLm9u'@;
put 'ZXJyb3I9ZnVuY3Rpb24oKXtuZShuZXcgRygiTmV0d29yayBFcnJvciIsRy5FUlJfTkVUV09SSyxxLFksWSkpLFk9bnVsbH0sWS5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXt2YXIgTT1xLnRpbWVvdXQ/InRpbWVvdXQgb2YgIitxLnRpbWVvdXQrIm1zIGV4Y2VlZGVkIjoidGltZW91dCBleGNlZWRl'@;
put 'ZCI7cS50aW1lb3V0RXJyb3JNZXNzYWdlJiYoTT1xLnRpbWVvdXRFcnJvck1lc3NhZ2UpLG5lKG5ldyBHKE0sKHEudHJhbnNpdGlvbmFsfHxWKS5jbGFyaWZ5VGltZW91dEVycm9yP0cuRVRJTUVET1VUOkcuRUNPTk5BQk9SVEVELHEsWSkpLFk9bnVsbH0sSy5pc1N0YW5kYXJkQnJvd3NlckVu'@;
put 'digpKXt2YXIgZz0ocS53aXRoQ3JlZGVudGlhbHN8fGooTikpJiZxLnhzcmZDb29raWVOYW1lP0kucmVhZChxLnhzcmZDb29raWVOYW1lKTp2b2lkIDA7ZyYmKGRlW3EueHNyZkhlYWRlck5hbWVdPWcpfSJzZXRSZXF1ZXN0SGVhZGVyImluIFkmJksuZm9yRWFjaChkZSxmdW5jdGlvbihNLHkp'@;
put 'e3ZvaWQgMD09PWxlJiYiY29udGVudC10eXBlIj09PXkudG9Mb3dlckNhc2UoKT9kZWxldGUgZGVbeV06WS5zZXRSZXF1ZXN0SGVhZGVyKHksTSl9KSxLLmlzVW5kZWZpbmVkKHEud2l0aENyZWRlbnRpYWxzKXx8KFkud2l0aENyZWRlbnRpYWxzPSEhcS53aXRoQ3JlZGVudGlhbHMpLHVlJiYi'@;
put 'anNvbiIhPT11ZSYmKFkucmVzcG9uc2VUeXBlPXEucmVzcG9uc2VUeXBlKSwiZnVuY3Rpb24iPT10eXBlb2YgcS5vbkRvd25sb2FkUHJvZ3Jlc3MmJlkuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHEub25Eb3dubG9hZFByb2dyZXNzKSwiZnVuY3Rpb24iPT10eXBlb2YgcS5vblVwbG9h'@;
put 'ZFByb2dyZXNzJiZZLnVwbG9hZCYmWS51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHEub25VcGxvYWRQcm9ncmVzcyksKHEuY2FuY2VsVG9rZW58fHEuc2lnbmFsKSYmKGllPWZ1bmN0aW9uKE0pe1kmJihuZSghTXx8TSYmTS50eXBlP25ldyBXOk0pLFkuYWJvcnQoKSxZPW51'@;
put 'bGwpfSxxLmNhbmNlbFRva2VuJiZxLmNhbmNlbFRva2VuLnN1YnNjcmliZShpZSkscS5zaWduYWwmJihxLnNpZ25hbC5hYm9ydGVkP2llKCk6cS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGllKSkpLGxlfHwobGU9bnVsbCk7dmFyIEM9VShOKTtDJiYtMT09PVsiaHR0cCIsImh0'@;
put 'dHBzIiwiZmlsZSJdLmluZGV4T2YoQyk/bmUobmV3IEcoIlVuc3VwcG9ydGVkIHByb3RvY29sICIrQysiOiIsRy5FUlJfQkFEX1JFUVVFU1QscSkpOlkuc2VuZChsZSl9KX19LDE2MDk6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSz1MKDQ4NjcpLEo9TCgxODQ5KSxJPUwoMzIxKSxSPUwo'@;
put 'NzE4NSksRT1mdW5jdGlvbiB6KGope3ZhciBWPW5ldyBJKGopLEc9SihJLnByb3RvdHlwZS5yZXF1ZXN0LFYpO3JldHVybiBLLmV4dGVuZChHLEkucHJvdG90eXBlLFYpLEsuZXh0ZW5kKEcsViksRy5jcmVhdGU9ZnVuY3Rpb24oVyl7cmV0dXJuIHooUihqLFcpKX0sR30oTCg1NTQ2KSk7RS5B'@;
put 'eGlvcz1JLEUuQ2FuY2VsZWRFcnJvcj1MKDY0NCksRS5DYW5jZWxUb2tlbj1MKDQ5NzIpLEUuaXNDYW5jZWw9TCg2NTAyKSxFLlZFUlNJT049TCg3Mjg4KS52ZXJzaW9uLEUudG9Gb3JtRGF0YT1MKDc2NzUpLEUuQXhpb3NFcnJvcj1MKDI2NDgpLEUuQ2FuY2VsPUUuQ2FuY2VsZWRFcnJvcixF'@;
put 'LmFsbD1mdW5jdGlvbih6KXtyZXR1cm4gUHJvbWlzZS5hbGwoeil9LEUuc3ByZWFkPUwoODcxMyksRS5pc0F4aW9zRXJyb3I9TCg2MjY4KSxILmV4cG9ydHM9RSxILmV4cG9ydHMuZGVmYXVsdD1FfSw0OTcyOihILEIsTCk9PnsidXNlIHN0cmljdCI7dmFyIEs9TCg2NDQpO2Z1bmN0aW9uIEoo'@;
put 'SSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIEkpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO3ZhciBSO3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbih6KXtSPXp9KTt2YXIgRT10aGlzO3RoaXMucHJvbWlzZS50aGVuKGZ1bmN0aW9u'@;
put 'KHope2lmKEUuX2xpc3RlbmVycyl7dmFyIGosVj1FLl9saXN0ZW5lcnMubGVuZ3RoO2ZvcihqPTA7ajxWO2orKylFLl9saXN0ZW5lcnNbal0oeik7RS5fbGlzdGVuZXJzPW51bGx9fSksdGhpcy5wcm9taXNlLnRoZW49ZnVuY3Rpb24oeil7dmFyIGosVj1uZXcgUHJvbWlzZShmdW5jdGlvbihH'@;
put 'KXtFLnN1YnNjcmliZShHKSxqPUd9KS50aGVuKHopO3JldHVybiBWLmNhbmNlbD1mdW5jdGlvbigpe0UudW5zdWJzY3JpYmUoail9LFZ9LEkoZnVuY3Rpb24oeil7RS5yZWFzb258fChFLnJlYXNvbj1uZXcgSyh6KSxSKEUucmVhc29uKSl9KX1KLnByb3RvdHlwZS50aHJvd0lmUmVxdWVzdGVk'@;
put 'PWZ1bmN0aW9uKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259LEoucHJvdG90eXBlLnN1YnNjcmliZT1mdW5jdGlvbihJKXt0aGlzLnJlYXNvbj9JKHRoaXMucmVhc29uKTp0aGlzLl9saXN0ZW5lcnM/dGhpcy5fbGlzdGVuZXJzLnB1c2goSSk6dGhpcy5fbGlzdGVuZXJzPVtJ'@;
put 'XX0sSi5wcm90b3R5cGUudW5zdWJzY3JpYmU9ZnVuY3Rpb24oSSl7aWYodGhpcy5fbGlzdGVuZXJzKXt2YXIgUj10aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihJKTstMSE9PVImJnRoaXMuX2xpc3RlbmVycy5zcGxpY2UoUiwxKX19LEouc291cmNlPWZ1bmN0aW9uKCl7dmFyIEk7cmV0dXJue3Rv'@;
put 'a2VuOm5ldyBKKGZ1bmN0aW9uKFIpe0k9Un0pLGNhbmNlbDpJfX0sSC5leHBvcnRzPUp9LDY0NDooSCxCLEwpPT57InVzZSBzdHJpY3QiO3ZhciBLPUwoMjY0OCk7ZnVuY3Rpb24gSihJKXtLLmNhbGwodGhpcyxJPz8iY2FuY2VsZWQiLEsuRVJSX0NBTkNFTEVEKSx0aGlzLm5hbWU9IkNhbmNl'@;
put 'bGVkRXJyb3IifUwoNDg2NykuaW5oZXJpdHMoSixLLHtfX0NBTkNFTF9fOiEwfSksSC5leHBvcnRzPUp9LDY1MDI6SD0+eyJ1c2Ugc3RyaWN0IjtILmV4cG9ydHM9ZnVuY3Rpb24oQil7cmV0dXJuISghQnx8IUIuX19DQU5DRUxfXyl9fSwzMjE6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIg'@;
put 'Sz1MKDQ4NjcpLEo9TCg1MzI3KSxJPUwoNzgyKSxSPUwoMzU3MiksRT1MKDcxODUpLHo9TCg0MDk3KSxqPUwoNDg3NSksVj1qLnZhbGlkYXRvcnM7ZnVuY3Rpb24gRyhXKXt0aGlzLmRlZmF1bHRzPVcsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IEkscmVzcG9uc2U6bmV3IEl9fUcu'@;
put 'cHJvdG90eXBlLnJlcXVlc3Q9ZnVuY3Rpb24oVyxVKXsic3RyaW5nIj09dHlwZW9mIFc/KFU9VXx8e30pLnVybD1XOlU9V3x8e30sVS5tZXRob2Q9KFU9RSh0aGlzLmRlZmF1bHRzLFUpKS5tZXRob2Q/VS5tZXRob2QudG9Mb3dlckNhc2UoKTp0aGlzLmRlZmF1bHRzLm1ldGhvZD90aGlzLmRl'@;
put 'ZmF1bHRzLm1ldGhvZC50b0xvd2VyQ2FzZSgpOiJnZXQiO3ZhciBxPVUudHJhbnNpdGlvbmFsO3ZvaWQgMCE9PXEmJmouYXNzZXJ0T3B0aW9ucyhxLHtzaWxlbnRKU09OUGFyc2luZzpWLnRyYW5zaXRpb25hbChWLmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOlYudHJhbnNpdGlvbmFsKFYu'@;
put 'Ym9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjpWLnRyYW5zaXRpb25hbChWLmJvb2xlYW4pfSwhMSk7dmFyIHRlPVtdLG5lPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbihiKXsiZnVuY3Rpb24iPT10eXBlb2YgYi5ydW5XaGVuJiYhMT09PWIucnVuV2hl'@;
put 'bihVKXx8KG5lPW5lJiZiLnN5bmNocm9ub3VzLHRlLnVuc2hpZnQoYi5mdWxmaWxsZWQsYi5yZWplY3RlZCkpfSk7dmFyIGllLGxlPVtdO2lmKHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24oYil7bGUucHVzaChiLmZ1bGZpbGxlZCxiLnJlamVjdGVkKX0pLCFu'@;
put 'ZSl7dmFyIGRlPVtSLHZvaWQgMF07Zm9yKEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KGRlLHRlKSxkZT1kZS5jb25jYXQobGUpLGllPVByb21pc2UucmVzb2x2ZShVKTtkZS5sZW5ndGg7KWllPWllLnRoZW4oZGUuc2hpZnQoKSxkZS5zaGlmdCgpKTtyZXR1cm4gaWV9Zm9yKHZhciB1'@;
put 'ZT1VO3RlLmxlbmd0aDspe3ZhciBjZT10ZS5zaGlmdCgpLFk9dGUuc2hpZnQoKTt0cnl7dWU9Y2UodWUpfWNhdGNoKGIpe1koYik7YnJlYWt9fXRyeXtpZT1SKHVlKX1jYXRjaChiKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoYil9Zm9yKDtsZS5sZW5ndGg7KWllPWllLnRoZW4obGUuc2hpZnQo'@;
put 'KSxsZS5zaGlmdCgpKTtyZXR1cm4gaWV9LEcucHJvdG90eXBlLmdldFVyaT1mdW5jdGlvbihXKXtXPUUodGhpcy5kZWZhdWx0cyxXKTt2YXIgVT16KFcuYmFzZVVSTCxXLnVybCk7cmV0dXJuIEooVSxXLnBhcmFtcyxXLnBhcmFtc1NlcmlhbGl6ZXIpfSxLLmZvckVhY2goWyJkZWxldGUiLCJn'@;
put 'ZXQiLCJoZWFkIiwib3B0aW9ucyJdLGZ1bmN0aW9uKFcpe0cucHJvdG90eXBlW1ddPWZ1bmN0aW9uKFUscSl7cmV0dXJuIHRoaXMucmVxdWVzdChFKHF8fHt9LHttZXRob2Q6Vyx1cmw6VSxkYXRhOihxfHx7fSkuZGF0YX0pKX19KSxLLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxm'@;
put 'dW5jdGlvbihXKXtmdW5jdGlvbiBVKHEpe3JldHVybiBmdW5jdGlvbih0ZSxuZSxpZSl7cmV0dXJuIHRoaXMucmVxdWVzdChFKGllfHx7fSx7bWV0aG9kOlcsaGVhZGVyczpxP3siQ29udGVudC1UeXBlIjoibXVsdGlwYXJ0L2Zvcm0tZGF0YSJ9Ont9LHVybDp0ZSxkYXRhOm5lfSkpfX1HLnBy'@;
put 'b3RvdHlwZVtXXT1VKCksRy5wcm90b3R5cGVbVysiRm9ybSJdPVUoITApfSksSC5leHBvcnRzPUd9LDI2NDg6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSz1MKDQ4NjcpO2Z1bmN0aW9uIEooRSx6LGosVixHKXtFcnJvci5jYWxsKHRoaXMpLHRoaXMubWVzc2FnZT1FLHRoaXMubmFtZT0i'@;
put 'QXhpb3NFcnJvciIseiYmKHRoaXMuY29kZT16KSxqJiYodGhpcy5jb25maWc9aiksViYmKHRoaXMucmVxdWVzdD1WKSxHJiYodGhpcy5yZXNwb25zZT1HKX1LLmluaGVyaXRzKEosRXJyb3Ise3RvSlNPTjpmdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMu'@;
put 'bmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzp0aGlzLmNv'@;
put 'bmZpZyxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19fSk7dmFyIEk9Si5wcm90b3R5cGUsUj17fTtbIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwiRVJSX0JBRF9PUFRJT04iLCJFQ09OTkFC'@;
put 'T1JURUQiLCJFVElNRURPVVQiLCJFUlJfTkVUV09SSyIsIkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMiLCJFUlJfREVQUkVDQVRFRCIsIkVSUl9CQURfUkVTUE9OU0UiLCJFUlJfQkFEX1JFUVVFU1QiLCJFUlJfQ0FOQ0VMRUQiXS5mb3JFYWNoKGZ1bmN0aW9uKEUpe1JbRV09e3ZhbHVlOkV9'@;
put 'fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoSixSKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSSwiaXNBeGlvc0Vycm9yIix7dmFsdWU6ITB9KSxKLmZyb209ZnVuY3Rpb24oRSx6LGosVixHLFcpe3ZhciBVPU9iamVjdC5jcmVhdGUoSSk7cmV0dXJuIEsudG9GbGF0T2JqZWN0KEUsVSxmdW5j'@;
put 'dGlvbihxKXtyZXR1cm4gcSE9PUVycm9yLnByb3RvdHlwZX0pLEouY2FsbChVLEUubWVzc2FnZSx6LGosVixHKSxVLm5hbWU9RS5uYW1lLFcmJk9iamVjdC5hc3NpZ24oVSxXKSxVfSxILmV4cG9ydHM9Sn0sNzgyOihILEIsTCk9PnsidXNlIHN0cmljdCI7dmFyIEs9TCg0ODY3KTtmdW5jdGlv'@;
put 'biBKKCl7dGhpcy5oYW5kbGVycz1bXX1KLnByb3RvdHlwZS51c2U9ZnVuY3Rpb24oSSxSLEUpe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDpJLHJlamVjdGVkOlIsc3luY2hyb25vdXM6ISFFJiZFLnN5bmNocm9ub3VzLHJ1bldoZW46RT9FLnJ1bldoZW46bnVsbH0pLHRo'@;
put 'aXMuaGFuZGxlcnMubGVuZ3RoLTF9LEoucHJvdG90eXBlLmVqZWN0PWZ1bmN0aW9uKEkpe3RoaXMuaGFuZGxlcnNbSV0mJih0aGlzLmhhbmRsZXJzW0ldPW51bGwpfSxKLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKEkpe0suZm9yRWFjaCh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKFIpe251'@;
put 'bGwhPT1SJiZJKFIpfSl9LEguZXhwb3J0cz1KfSw0MDk3OihILEIsTCk9PnsidXNlIHN0cmljdCI7dmFyIEs9TCgxNzkzKSxKPUwoNzMwMyk7SC5leHBvcnRzPWZ1bmN0aW9uKEksUil7cmV0dXJuIEkmJiFLKFIpP0ooSSxSKTpSfX0sMzU3MjooSCxCLEwpPT57InVzZSBzdHJpY3QiO3ZhciBL'@;
put 'PUwoNDg2NyksSj1MKDg1MjcpLEk9TCg2NTAyKSxSPUwoNTU0NiksRT1MKDY0NCk7ZnVuY3Rpb24geihqKXtpZihqLmNhbmNlbFRva2VuJiZqLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKSxqLnNpZ25hbCYmai5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgRX1ILmV4cG9ydHM9ZnVu'@;
put 'Y3Rpb24oail7cmV0dXJuIHooaiksai5oZWFkZXJzPWouaGVhZGVyc3x8e30sai5kYXRhPUouY2FsbChqLGouZGF0YSxqLmhlYWRlcnMsai50cmFuc2Zvcm1SZXF1ZXN0KSxqLmhlYWRlcnM9Sy5tZXJnZShqLmhlYWRlcnMuY29tbW9ufHx7fSxqLmhlYWRlcnNbai5tZXRob2RdfHx7fSxqLmhl'@;
put 'YWRlcnMpLEsuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSxmdW5jdGlvbihWKXtkZWxldGUgai5oZWFkZXJzW1ZdfSksKGouYWRhcHRlcnx8Ui5hZGFwdGVyKShqKS50aGVuKGZ1bmN0aW9uKFYpe3JldHVybiB6KGopLFYuZGF0'@;
put 'YT1KLmNhbGwoaixWLmRhdGEsVi5oZWFkZXJzLGoudHJhbnNmb3JtUmVzcG9uc2UpLFZ9LGZ1bmN0aW9uKFYpe3JldHVybiBJKFYpfHwoeihqKSxWJiZWLnJlc3BvbnNlJiYoVi5yZXNwb25zZS5kYXRhPUouY2FsbChqLFYucmVzcG9uc2UuZGF0YSxWLnJlc3BvbnNlLmhlYWRlcnMsai50cmFu'@;
put 'c2Zvcm1SZXNwb25zZSkpKSxQcm9taXNlLnJlamVjdChWKX0pfX0sNzE4NTooSCxCLEwpPT57InVzZSBzdHJpY3QiO3ZhciBLPUwoNDg2Nyk7SC5leHBvcnRzPWZ1bmN0aW9uKEosSSl7ST1JfHx7fTt2YXIgUj17fTtmdW5jdGlvbiBFKFUscSl7cmV0dXJuIEsuaXNQbGFpbk9iamVjdChVKSYm'@;
put 'Sy5pc1BsYWluT2JqZWN0KHEpP0subWVyZ2UoVSxxKTpLLmlzUGxhaW5PYmplY3QocSk/Sy5tZXJnZSh7fSxxKTpLLmlzQXJyYXkocSk/cS5zbGljZSgpOnF9ZnVuY3Rpb24geihVKXtyZXR1cm4gSy5pc1VuZGVmaW5lZChJW1VdKT9LLmlzVW5kZWZpbmVkKEpbVV0pP3ZvaWQgMDpFKHZvaWQg'@;
put 'MCxKW1VdKTpFKEpbVV0sSVtVXSl9ZnVuY3Rpb24gaihVKXtpZighSy5pc1VuZGVmaW5lZChJW1VdKSlyZXR1cm4gRSh2b2lkIDAsSVtVXSl9ZnVuY3Rpb24gVihVKXtyZXR1cm4gSy5pc1VuZGVmaW5lZChJW1VdKT9LLmlzVW5kZWZpbmVkKEpbVV0pP3ZvaWQgMDpFKHZvaWQgMCxKW1VdKTpF'@;
put 'KHZvaWQgMCxJW1VdKX1mdW5jdGlvbiBHKFUpe3JldHVybiBVIGluIEk/RShKW1VdLElbVV0pOlUgaW4gSj9FKHZvaWQgMCxKW1VdKTp2b2lkIDB9dmFyIFc9e3VybDpqLG1ldGhvZDpqLGRhdGE6aixiYXNlVVJMOlYsdHJhbnNmb3JtUmVxdWVzdDpWLHRyYW5zZm9ybVJlc3BvbnNlOlYscGFy'@;
put 'YW1zU2VyaWFsaXplcjpWLHRpbWVvdXQ6Vix0aW1lb3V0TWVzc2FnZTpWLHdpdGhDcmVkZW50aWFsczpWLGFkYXB0ZXI6VixyZXNwb25zZVR5cGU6Vix4c3JmQ29va2llTmFtZTpWLHhzcmZIZWFkZXJOYW1lOlYsb25VcGxvYWRQcm9ncmVzczpWLG9uRG93bmxvYWRQcm9ncmVzczpWLGRlY29t'@;
put 'cHJlc3M6VixtYXhDb250ZW50TGVuZ3RoOlYsbWF4Qm9keUxlbmd0aDpWLGJlZm9yZVJlZGlyZWN0OlYsdHJhbnNwb3J0OlYsaHR0cEFnZW50OlYsaHR0cHNBZ2VudDpWLGNhbmNlbFRva2VuOlYsc29ja2V0UGF0aDpWLHJlc3BvbnNlRW5jb2Rpbmc6Vix2YWxpZGF0ZVN0YXR1czpHfTtyZXR1'@;
put 'cm4gSy5mb3JFYWNoKE9iamVjdC5rZXlzKEopLmNvbmNhdChPYmplY3Qua2V5cyhJKSksZnVuY3Rpb24oVSl7dmFyIHE9V1tVXXx8eix0ZT1xKFUpO0suaXNVbmRlZmluZWQodGUpJiZxIT09R3x8KFJbVV09dGUpfSksUn19LDYwMjY6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSz1MKDI2'@;
put 'NDgpO0guZXhwb3J0cz1mdW5jdGlvbihKLEksUil7dmFyIEU9Ui5jb25maWcudmFsaWRhdGVTdGF0dXM7Ui5zdGF0dXMmJkUmJiFFKFIuc3RhdHVzKT9JKG5ldyBLKCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrUi5zdGF0dXMsW0suRVJSX0JBRF9SRVFVRVNULEsuRVJSX0JB'@;
put 'RF9SRVNQT05TRV1bTWF0aC5mbG9vcihSLnN0YXR1cy8xMDApLTRdLFIuY29uZmlnLFIucmVxdWVzdCxSKSk6SihSKX19LDg1Mjc6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSz1MKDQ4NjcpLEo9TCg1NTQ2KTtILmV4cG9ydHM9ZnVuY3Rpb24oSSxSLEUpe3ZhciB6PXRoaXN8fEo7cmV0'@;
put 'dXJuIEsuZm9yRWFjaChFLGZ1bmN0aW9uKGope0k9ai5jYWxsKHosSSxSKX0pLEl9fSw1NTQ2OihILEIsTCk9PnsidXNlIHN0cmljdCI7dmFyIEs9TCg0MTU1KSxKPUwoNDg2NyksST1MKDYwMTYpLFI9TCgyNjQ4KSxFPUwoNzg3NCksej1MKDc2NzUpLGo9eyJDb250ZW50LVR5cGUiOiJhcHBs'@;
put 'aWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQifTtmdW5jdGlvbiBWKFUscSl7IUouaXNVbmRlZmluZWQoVSkmJkouaXNVbmRlZmluZWQoVVsiQ29udGVudC1UeXBlIl0pJiYoVVsiQ29udGVudC1UeXBlIl09cSl9dmFyIEcsVz17dHJhbnNpdGlvbmFsOkUsYWRhcHRlcjooKHR5cGVvZiBY'@;
put 'TUxIdHRwUmVxdWVzdDwidSJ8fHZvaWQgMCE9PUsmJiJbb2JqZWN0IHByb2Nlc3NdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChLKSkmJihHPUwoNTQ0OCkpLEcpLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKFUscSl7aWYoSShxLCJBY2NlcHQiKSxJKHEsIkNvbnRlbnQt'@;
put 'VHlwZSIpLEouaXNGb3JtRGF0YShVKXx8Si5pc0FycmF5QnVmZmVyKFUpfHxKLmlzQnVmZmVyKFUpfHxKLmlzU3RyZWFtKFUpfHxKLmlzRmlsZShVKXx8Si5pc0Jsb2IoVSkpcmV0dXJuIFU7aWYoSi5pc0FycmF5QnVmZmVyVmlldyhVKSlyZXR1cm4gVS5idWZmZXI7aWYoSi5pc1VSTFNlYXJj'@;
put 'aFBhcmFtcyhVKSlyZXR1cm4gVihxLCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIpLFUudG9TdHJpbmcoKTt2YXIgdGUsbmU9Si5pc09iamVjdChVKSxpZT1xJiZxWyJDb250ZW50LVR5cGUiXTtpZigodGU9Si5pc0ZpbGVMaXN0KFUpKXx8bmUmJiJt'@;
put 'dWx0aXBhcnQvZm9ybS1kYXRhIj09PWllKXt2YXIgbGU9dGhpcy5lbnYmJnRoaXMuZW52LkZvcm1EYXRhO3JldHVybiB6KHRlP3siZmlsZXNbXSI6VX06VSxsZSYmbmV3IGxlKX1yZXR1cm4gbmV8fCJhcHBsaWNhdGlvbi9qc29uIj09PWllPyhWKHEsImFwcGxpY2F0aW9uL2pzb24iKSxmdW5j'@;
put 'dGlvbihkZSx1ZSxjZSl7aWYoSi5pc1N0cmluZyhkZSkpdHJ5e3JldHVybigwLEpTT04ucGFyc2UpKGRlKSxKLnRyaW0oZGUpfWNhdGNoKFkpe2lmKCJTeW50YXhFcnJvciIhPT1ZLm5hbWUpdGhyb3cgWX1yZXR1cm4oMCxKU09OLnN0cmluZ2lmeSkoZGUpfShVKSk6VX1dLHRyYW5zZm9ybVJl'@;
put 'c3BvbnNlOltmdW5jdGlvbihVKXt2YXIgcT10aGlzLnRyYW5zaXRpb25hbHx8Vy50cmFuc2l0aW9uYWwsaWU9IShxJiZxLnNpbGVudEpTT05QYXJzaW5nKSYmImpzb24iPT09dGhpcy5yZXNwb25zZVR5cGU7aWYoaWV8fHEmJnEuZm9yY2VkSlNPTlBhcnNpbmcmJkouaXNTdHJpbmcoVSkmJlUu'@;
put 'bGVuZ3RoKXRyeXtyZXR1cm4gSlNPTi5wYXJzZShVKX1jYXRjaChsZSl7aWYoaWUpdGhyb3ciU3ludGF4RXJyb3IiPT09bGUubmFtZT9SLmZyb20obGUsUi5FUlJfQkFEX1JFU1BPTlNFLHRoaXMsbnVsbCx0aGlzLnJlc3BvbnNlKTpsZX1yZXR1cm4gVX1dLHRpbWVvdXQ6MCx4c3JmQ29va2ll'@;
put 'TmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLGVudjp7Rm9ybURhdGE6TCgxNjIzKX0sdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24oVSl7cmV0dXJuIFU+PTIwMCYmVTwzMDB9LGhlYWRlcnM6'@;
put 'e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoifX19O0ouZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiXSxmdW5jdGlvbihVKXtXLmhlYWRlcnNbVV09e319KSxKLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbihVKXtX'@;
put 'LmhlYWRlcnNbVV09Si5tZXJnZShqKX0pLEguZXhwb3J0cz1XfSw3ODc0Okg9PnsidXNlIHN0cmljdCI7SC5leHBvcnRzPXtzaWxlbnRKU09OUGFyc2luZzohMCxmb3JjZWRKU09OUGFyc2luZzohMCxjbGFyaWZ5VGltZW91dEVycm9yOiExfX0sNzI4ODpIPT57SC5leHBvcnRzPXt2ZXJzaW9u'@;
put 'OiIwLjI3LjIifX0sMTg0OTpIPT57InVzZSBzdHJpY3QiO0guZXhwb3J0cz1mdW5jdGlvbihCLEwpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgSz1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCksSj0wO0o8Sy5sZW5ndGg7SisrKUtbSl09YXJndW1lbnRzW0pdO3JldHVybiBCLmFwcGx5'@;
put 'KEwsSyl9fX0sNTMyNzooSCxCLEwpPT57InVzZSBzdHJpY3QiO3ZhciBLPUwoNDg2Nyk7ZnVuY3Rpb24gSihJKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEkpLnJlcGxhY2UoLyUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNC9nLCIkIikucmVwbGFjZSgvJTJDL2dpLCIsIikucmVwbGFjZSgv'@;
put 'JTIwL2csIisiKS5yZXBsYWNlKC8lNUIvZ2ksIlsiKS5yZXBsYWNlKC8lNUQvZ2ksIl0iKX1ILmV4cG9ydHM9ZnVuY3Rpb24oSSxSLEUpe2lmKCFSKXJldHVybiBJO3ZhciB6O2lmKEUpej1FKFIpO2Vsc2UgaWYoSy5pc1VSTFNlYXJjaFBhcmFtcyhSKSl6PVIudG9TdHJpbmcoKTtlbHNle3Zh'@;
put 'ciBqPVtdO0suZm9yRWFjaChSLGZ1bmN0aW9uKEcsVyl7bnVsbCE9RyYmKEsuaXNBcnJheShHKT9XKz0iW10iOkc9W0ddLEsuZm9yRWFjaChHLGZ1bmN0aW9uKFUpe0suaXNEYXRlKFUpP1U9VS50b0lTT1N0cmluZygpOksuaXNPYmplY3QoVSkmJihVPUpTT04uc3RyaW5naWZ5KFUpKSxqLnB1'@;
put 'c2goSihXKSsiPSIrSihVKSl9KSl9KSx6PWouam9pbigiJiIpfWlmKHope3ZhciBWPUkuaW5kZXhPZigiIyIpOy0xIT09ViYmKEk9SS5zbGljZSgwLFYpKSxJKz0oLTE9PT1JLmluZGV4T2YoIj8iKT8iPyI6IiYiKSt6fXJldHVybiBJfX0sNzMwMzpIPT57InVzZSBzdHJpY3QiO0guZXhwb3J0'@;
put 'cz1mdW5jdGlvbihCLEwpe3JldHVybiBMP0IucmVwbGFjZSgvXC8rJC8sIiIpKyIvIitMLnJlcGxhY2UoL15cLysvLCIiKTpCfX0sNDM3MjooSCxCLEwpPT57InVzZSBzdHJpY3QiO3ZhciBLPUwoNDg2Nyk7SC5leHBvcnRzPUsuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKT97d3JpdGU6ZnVuY3Rp'@;
put 'b24oSixJLFIsRSx6LGope3ZhciBWPVtdO1YucHVzaChKKyI9IitlbmNvZGVVUklDb21wb25lbnQoSSkpLEsuaXNOdW1iZXIoUikmJlYucHVzaCgiZXhwaXJlcz0iK25ldyBEYXRlKFIpLnRvR01UU3RyaW5nKCkpLEsuaXNTdHJpbmcoRSkmJlYucHVzaCgicGF0aD0iK0UpLEsuaXNTdHJpbmco'@;
put 'eikmJlYucHVzaCgiZG9tYWluPSIreiksITA9PT1qJiZWLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1WLmpvaW4oIjsgIil9LHJlYWQ6ZnVuY3Rpb24oSil7dmFyIEk9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXHMqKSgiK0orIik9KFteO10qKSIpKTty'@;
put 'ZXR1cm4gST9kZWNvZGVVUklDb21wb25lbnQoSVszXSk6bnVsbH0scmVtb3ZlOmZ1bmN0aW9uKEope3RoaXMud3JpdGUoSiwiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZTpmdW5jdGlvbigpe30scmVhZDpmdW5jdGlvbigpe3JldHVybiBudWxsfSxyZW1vdmU6ZnVuY3Rpb24oKXt9fX0s'@;
put 'MTc5MzpIPT57InVzZSBzdHJpY3QiO0guZXhwb3J0cz1mdW5jdGlvbihCKXtyZXR1cm4vXihbYS16XVthLXpcZCtcLS5dKjopP1wvXC8vaS50ZXN0KEIpfX0sNjI2ODooSCxCLEwpPT57InVzZSBzdHJpY3QiO3ZhciBLPUwoNDg2Nyk7SC5leHBvcnRzPWZ1bmN0aW9uKEope3JldHVybiBLLmlz'@;
put 'T2JqZWN0KEopJiYhMD09PUouaXNBeGlvc0Vycm9yfX0sNzk4NTooSCxCLEwpPT57InVzZSBzdHJpY3QiO3ZhciBLPUwoNDg2Nyk7SC5leHBvcnRzPUsuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKT9mdW5jdGlvbigpe3ZhciBKLEk9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNl'@;
put 'ckFnZW50KSxSPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtmdW5jdGlvbiBFKHope3ZhciBqPXo7cmV0dXJuIEkmJihSLnNldEF0dHJpYnV0ZSgiaHJlZiIsaiksaj1SLmhyZWYpLFIuc2V0QXR0cmlidXRlKCJocmVmIixqKSx7aHJlZjpSLmhyZWYscHJvdG9jb2w6Ui5wcm90b2NvbD9S'@;
put 'LnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDpSLmhvc3Qsc2VhcmNoOlIuc2VhcmNoP1Iuc2VhcmNoLnJlcGxhY2UoL15cPy8sIiIpOiIiLGhhc2g6Ui5oYXNoP1IuaGFzaC5yZXBsYWNlKC9eIy8sIiIpOiIiLGhvc3RuYW1lOlIuaG9zdG5hbWUscG9ydDpSLnBvcnQscGF0aG5h'@;
put 'bWU6Ii8iPT09Ui5wYXRobmFtZS5jaGFyQXQoMCk/Ui5wYXRobmFtZToiLyIrUi5wYXRobmFtZX19cmV0dXJuIEo9RSh3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24oeil7dmFyIGo9Sy5pc1N0cmluZyh6KT9FKHopOno7cmV0dXJuIGoucHJvdG9jb2w9PT1KLnByb3RvY29sJiZqLmhv'@;
put 'c3Q9PT1KLmhvc3R9fSgpOmZ1bmN0aW9uKCl7cmV0dXJuITB9fSw2MDE2OihILEIsTCk9PnsidXNlIHN0cmljdCI7dmFyIEs9TCg0ODY3KTtILmV4cG9ydHM9ZnVuY3Rpb24oSixJKXtLLmZvckVhY2goSixmdW5jdGlvbihSLEUpe0UhPT1JJiZFLnRvVXBwZXJDYXNlKCk9PT1JLnRvVXBwZXJD'@;
put 'YXNlKCkmJihKW0ldPVIsZGVsZXRlIEpbRV0pfSl9fSwxNjIzOkg9PntILmV4cG9ydHM9bnVsbH0sNDEwOTooSCxCLEwpPT57InVzZSBzdHJpY3QiO3ZhciBLPUwoNDg2NyksSj1bImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJl'@;
put 'eHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJd'@;
put 'O0guZXhwb3J0cz1mdW5jdGlvbihJKXt2YXIgUixFLHosaj17fTtyZXR1cm4gSSYmSy5mb3JFYWNoKEkuc3BsaXQoIlxuIiksZnVuY3Rpb24oVil7aWYoej1WLmluZGV4T2YoIjoiKSxSPUsudHJpbShWLnN1YnN0cigwLHopKS50b0xvd2VyQ2FzZSgpLEU9Sy50cmltKFYuc3Vic3RyKHorMSkp'@;
put 'LFIpe2lmKGpbUl0mJkouaW5kZXhPZihSKT49MClyZXR1cm47altSXT0ic2V0LWNvb2tpZSI9PT1SPyhqW1JdP2pbUl06W10pLmNvbmNhdChbRV0pOmpbUl0/altSXSsiLCAiK0U6RX19KSxqfX0sMjA1Okg9PnsidXNlIHN0cmljdCI7SC5leHBvcnRzPWZ1bmN0aW9uKEIpe3ZhciBMPS9eKFst'@;
put 'K1x3XXsxLDI1fSkoOj9cL1wvfDopLy5leGVjKEIpO3JldHVybiBMJiZMWzFdfHwiIn19LDg3MTM6SD0+eyJ1c2Ugc3RyaWN0IjtILmV4cG9ydHM9ZnVuY3Rpb24oQil7cmV0dXJuIGZ1bmN0aW9uKEwpe3JldHVybiBCLmFwcGx5KG51bGwsTCl9fX0sNzY3NTooSCxCLEwpPT57InVzZSBzdHJp'@;
put 'Y3QiO3ZhciBLPUwoODc2NCkuQnVmZmVyLEo9TCg0ODY3KTtILmV4cG9ydHM9ZnVuY3Rpb24oSSxSKXtSPVJ8fG5ldyBGb3JtRGF0YTt2YXIgRT1bXTtmdW5jdGlvbiB6KGope3JldHVybiBudWxsPT09aj8iIjpKLmlzRGF0ZShqKT9qLnRvSVNPU3RyaW5nKCk6Si5pc0FycmF5QnVmZmVyKGop'@;
put 'fHxKLmlzVHlwZWRBcnJheShqKT8iZnVuY3Rpb24iPT10eXBlb2YgQmxvYj9uZXcgQmxvYihbal0pOksuZnJvbShqKTpqfXJldHVybiBmdW5jdGlvbiBqKFYsRyl7aWYoSi5pc1BsYWluT2JqZWN0KFYpfHxKLmlzQXJyYXkoVikpe2lmKC0xIT09RS5pbmRleE9mKFYpKXRocm93IEVycm9yKCJD'@;
put 'aXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gIitHKTtFLnB1c2goViksSi5mb3JFYWNoKFYsZnVuY3Rpb24oVyxVKXtpZighSi5pc1VuZGVmaW5lZChXKSl7dmFyIHEsdGU9Rz9HKyIuIitVOlU7aWYoVyYmIUcmJiJvYmplY3QiPT10eXBlb2YgVylpZihKLmVuZHNXaXRoKFUsInt9Iikp'@;
put 'Vz1KU09OLnN0cmluZ2lmeShXKTtlbHNlIGlmKEouZW5kc1dpdGgoVSwiW10iKSYmKHE9Si50b0FycmF5KFcpKSlyZXR1cm4gdm9pZCBxLmZvckVhY2goZnVuY3Rpb24obmUpeyFKLmlzVW5kZWZpbmVkKG5lKSYmUi5hcHBlbmQodGUseihuZSkpfSk7aihXLHRlKX19KSxFLnBvcCgpfWVsc2Ug'@;
put 'Ui5hcHBlbmQoRyx6KFYpKX0oSSksUn19LDQ4NzU6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSz1MKDUxMDgpLEo9TCg3Mjg4KS52ZXJzaW9uLEk9TCgyNjQ4KSxSPXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFj'@;
put 'aChmdW5jdGlvbih6LGope1Jbel09ZnVuY3Rpb24oVil7cmV0dXJuIHR5cGVvZiBWPT09enx8ImEiKyhqPDE/Im4gIjoiICIpK3p9fSk7dmFyIEU9e307Ui50cmFuc2l0aW9uYWw9ZnVuY3Rpb24oeixqLFYpe2Z1bmN0aW9uIEcoVyxVKXtyZXR1cm4iW0F4aW9zIHYiK0orIl0gVHJhbnNpdGlv'@;
put 'bmFsIG9wdGlvbiAnIitXKyInIitVKyhWPyIuICIrVjoiIil9cmV0dXJuIGZ1bmN0aW9uKFcsVSxxKXtpZighMT09PXopdGhyb3cgbmV3IEkoRyhVLCIgaGFzIGJlZW4gcmVtb3ZlZCIrKGo/IiBpbiAiK2o6IiIpKSxJLkVSUl9ERVBSRUNBVEVEKTtyZXR1cm4gaiYmIUVbVV0mJihFW1VdPSEw'@;
put 'LEsud2FybihHKFUsIiBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYiK2orIiBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSIpKSksIXp8fHooVyxVLHEpfX0sSC5leHBvcnRzPXthc3NlcnRPcHRpb25zOmZ1bmN0aW9uKHosaixWKXtpZigib2JqZWN0IiE9dHlwZW9m'@;
put 'IHopdGhyb3cgbmV3IEkoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiLEkuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2Zvcih2YXIgRz1PYmplY3Qua2V5cyh6KSxXPUcubGVuZ3RoO1ctLSA+MDspe3ZhciBVPUdbV10scT1qW1VdO2lmKHEpe3ZhciB0ZT16W1VdLG5lPXZvaWQgMD09PXRlfHxx'@;
put 'KHRlLFUseik7aWYoITAhPT1uZSl0aHJvdyBuZXcgSSgib3B0aW9uICIrVSsiIG11c3QgYmUgIituZSxJLkVSUl9CQURfT1BUSU9OX1ZBTFVFKX1lbHNlIGlmKCEwIT09Vil0aHJvdyBuZXcgSSgiVW5rbm93biBvcHRpb24gIitVLEkuRVJSX0JBRF9PUFRJT04pfX0sdmFsaWRhdG9yczpSfX0s'@;
put 'NDg2NzooSCxCLEwpPT57InVzZSBzdHJpY3QiO3ZhciBLLEo9TCgxODQ5KSxJPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsUj0oSz1PYmplY3QuY3JlYXRlKG51bGwpLGZ1bmN0aW9uKFkpe3ZhciBiPUkuY2FsbChZKTtyZXR1cm4gS1tiXXx8KEtbYl09Yi5zbGljZSg4LC0xKS50b0xvd2Vy'@;
put 'Q2FzZSgpKX0pO2Z1bmN0aW9uIEUoWSl7cmV0dXJuIFk9WS50b0xvd2VyQ2FzZSgpLGZ1bmN0aW9uKGIpe3JldHVybiBSKGIpPT09WX19ZnVuY3Rpb24geihZKXtyZXR1cm4gQXJyYXkuaXNBcnJheShZKX1mdW5jdGlvbiBqKFkpe3JldHVybiB2b2lkIDA9PT1ZfXZhciBWPUUoIkFycmF5QnVm'@;
put 'ZmVyIik7ZnVuY3Rpb24gRyhZKXtyZXR1cm4gbnVsbCE9PVkmJiJvYmplY3QiPT10eXBlb2YgWX1mdW5jdGlvbiBXKFkpe2lmKCJvYmplY3QiIT09UihZKSlyZXR1cm4hMTt2YXIgYj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoWSk7cmV0dXJuIG51bGw9PT1ifHxiPT09T2JqZWN0LnByb3RvdHlw'@;
put 'ZX12YXIgVT1FKCJEYXRlIikscT1FKCJGaWxlIiksdGU9RSgiQmxvYiIpLG5lPUUoIkZpbGVMaXN0Iik7ZnVuY3Rpb24gaWUoWSl7cmV0dXJuIltvYmplY3QgRnVuY3Rpb25dIj09PUkuY2FsbChZKX12YXIgbGU9RSgiVVJMU2VhcmNoUGFyYW1zIik7ZnVuY3Rpb24gZGUoWSxiKXtpZihudWxs'@;
put 'IT1ZKWlmKCJvYmplY3QiIT10eXBlb2YgWSYmKFk9W1ldKSx6KFkpKWZvcih2YXIgeD0wLE49WS5sZW5ndGg7eDxOO3grKyliLmNhbGwobnVsbCxZW3hdLHgsWSk7ZWxzZSBmb3IodmFyIEYgaW4gWSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoWSxGKSYmYi5jYWxsKG51'@;
put 'bGwsWVtGXSxGLFkpfXZhciB1ZSxjZT0odWU9dHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YoVWludDhBcnJheSksZnVuY3Rpb24oWSl7cmV0dXJuIHVlJiZZIGluc3RhbmNlb2YgdWV9KTtILmV4cG9ydHM9e2lzQXJyYXk6eixpc0FycmF5QnVmZmVyOlYsaXNC'@;
put 'dWZmZXI6ZnVuY3Rpb24oWSl7cmV0dXJuIG51bGwhPT1ZJiYhaihZKSYmbnVsbCE9PVkuY29uc3RydWN0b3ImJiFqKFkuY29uc3RydWN0b3IpJiYiZnVuY3Rpb24iPT10eXBlb2YgWS5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmWS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihZKX0saXNGb3JtRGF0YTpm'@;
put 'dW5jdGlvbihZKXt2YXIgYj0iW29iamVjdCBGb3JtRGF0YV0iO3JldHVybiBZJiYoImZ1bmN0aW9uIj09dHlwZW9mIEZvcm1EYXRhJiZZIGluc3RhbmNlb2YgRm9ybURhdGF8fEkuY2FsbChZKT09PWJ8fGllKFkudG9TdHJpbmcpJiZZLnRvU3RyaW5nKCk9PT1iKX0saXNBcnJheUJ1ZmZlclZp'@;
put 'ZXc6ZnVuY3Rpb24oWSl7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkFycmF5QnVmZmVyLmlzVmlldz9BcnJheUJ1ZmZlci5pc1ZpZXcoWSk6WSYmWS5idWZmZXImJlYoWS5idWZmZXIpfSxpc1N0cmluZzpmdW5jdGlvbihZKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIFl9LGlzTnVt'@;
put 'YmVyOmZ1bmN0aW9uKFkpe3JldHVybiJudW1iZXIiPT10eXBlb2YgWX0saXNPYmplY3Q6Ryxpc1BsYWluT2JqZWN0OlcsaXNVbmRlZmluZWQ6aixpc0RhdGU6VSxpc0ZpbGU6cSxpc0Jsb2I6dGUsaXNGdW5jdGlvbjppZSxpc1N0cmVhbTpmdW5jdGlvbihZKXtyZXR1cm4gRyhZKSYmaWUoWS5w'@;
put 'aXBlKX0saXNVUkxTZWFyY2hQYXJhbXM6bGUsaXNTdGFuZGFyZEJyb3dzZXJFbnY6ZnVuY3Rpb24oKXtyZXR1cm4odHlwZW9mIG5hdmlnYXRvcj4idSJ8fCJSZWFjdE5hdGl2ZSIhPT1uYXZpZ2F0b3IucHJvZHVjdCYmIk5hdGl2ZVNjcmlwdCIhPT1uYXZpZ2F0b3IucHJvZHVjdCYmIk5TIiE9'@;
put 'PW5hdmlnYXRvci5wcm9kdWN0KSYmdHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiBkb2N1bWVudDwidSJ9LGZvckVhY2g6ZGUsbWVyZ2U6ZnVuY3Rpb24gWSgpe3ZhciBiPXt9O2Z1bmN0aW9uIHgoZyxDKXtiW0NdPVcoYltDXSkmJlcoZyk/WShiW0NdLGcpOlcoZyk/WSh7fSxnKTp6KGcpP2cu'@;
put 'c2xpY2UoKTpnfWZvcih2YXIgTj0wLEY9YXJndW1lbnRzLmxlbmd0aDtOPEY7TisrKWRlKGFyZ3VtZW50c1tOXSx4KTtyZXR1cm4gYn0sZXh0ZW5kOmZ1bmN0aW9uKFksYix4KXtyZXR1cm4gZGUoYixmdW5jdGlvbihOLEYpe1lbRl09eCYmImZ1bmN0aW9uIj09dHlwZW9mIE4/SihOLHgpOk59'@;
put 'KSxZfSx0cmltOmZ1bmN0aW9uKFkpe3JldHVybiBZLnRyaW0/WS50cmltKCk6WS5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIil9LHN0cmlwQk9NOmZ1bmN0aW9uKFkpe3JldHVybiA2NTI3OT09PVkuY2hhckNvZGVBdCgwKSYmKFk9WS5zbGljZSgxKSksWX0saW5oZXJpdHM6ZnVuY3Rpb24oWSxi'@;
put 'LHgsTil7WS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShiLnByb3RvdHlwZSxOKSxZLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1ZLHgmJk9iamVjdC5hc3NpZ24oWS5wcm90b3R5cGUseCl9LHRvRmxhdE9iamVjdDpmdW5jdGlvbihZLGIseCl7dmFyIE4sRixnLEM9e307Yj1ifHx7fTtkb3tmb3Io'@;
put 'Rj0oTj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhZKSkubGVuZ3RoO0YtLSA+MDspQ1tnPU5bRl1dfHwoYltnXT1ZW2ddLENbZ109ITApO1k9T2JqZWN0LmdldFByb3RvdHlwZU9mKFkpfXdoaWxlKFkmJigheHx8eChZLGIpKSYmWSE9PU9iamVjdC5wcm90b3R5cGUpO3JldHVybiBifSxr'@;
put 'aW5kT2Y6UixraW5kT2ZUZXN0OkUsZW5kc1dpdGg6ZnVuY3Rpb24oWSxiLHgpe1k9U3RyaW5nKFkpLCh2b2lkIDA9PT14fHx4PlkubGVuZ3RoKSYmKHg9WS5sZW5ndGgpO3ZhciBOPVkuaW5kZXhPZihiLHgtPWIubGVuZ3RoKTtyZXR1cm4tMSE9PU4mJk49PT14fSx0b0FycmF5OmZ1bmN0aW9u'@;
put 'KFkpe2lmKCFZKXJldHVybiBudWxsO3ZhciBiPVkubGVuZ3RoO2lmKGooYikpcmV0dXJuIG51bGw7Zm9yKHZhciB4PW5ldyBBcnJheShiKTtiLS0gPjA7KXhbYl09WVtiXTtyZXR1cm4geH0saXNUeXBlZEFycmF5OmNlLGlzRmlsZUxpc3Q6bmV9fSw1NjIzOkg9PnsidXNlIHN0cmljdCI7ZnVu'@;
put 'Y3Rpb24gQihKLEksUil7SiBpbnN0YW5jZW9mIFJlZ0V4cCYmKEo9TChKLFIpKSxJIGluc3RhbmNlb2YgUmVnRXhwJiYoST1MKEksUikpO3ZhciBFPUsoSixJLFIpO3JldHVybiBFJiZ7c3RhcnQ6RVswXSxlbmQ6RVsxXSxwcmU6Ui5zbGljZSgwLEVbMF0pLGJvZHk6Ui5zbGljZShFWzBdK0ou'@;
put 'bGVuZ3RoLEVbMV0pLHBvc3Q6Ui5zbGljZShFWzFdK0kubGVuZ3RoKX19ZnVuY3Rpb24gTChKLEkpe3ZhciBSPUkubWF0Y2goSik7cmV0dXJuIFI/UlswXTpudWxsfWZ1bmN0aW9uIEsoSixJLFIpe3ZhciBFLHosaixWLEcsVz1SLmluZGV4T2YoSiksVT1SLmluZGV4T2YoSSxXKzEpLHE9Vztp'@;
put 'ZihXPj0wJiZVPjApe2lmKEo9PT1JKXJldHVybltXLFVdO2ZvcihFPVtdLGo9Ui5sZW5ndGg7cT49MCYmIUc7KXE9PVc/KEUucHVzaChxKSxXPVIuaW5kZXhPZihKLHErMSkpOjE9PUUubGVuZ3RoP0c9W0UucG9wKCksVV06KCh6PUUucG9wKCkpPGomJihqPXosVj1VKSxVPVIuaW5kZXhPZihJ'@;
put 'LHErMSkpLHE9VzxVJiZXPj0wP1c6VTtFLmxlbmd0aCYmKEc9W2osVl0pfXJldHVybiBHfUguZXhwb3J0cz1CLEIucmFuZ2U9S30sOTc0MjooSCxCKT0+eyJ1c2Ugc3RyaWN0IjtCLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oVil7dmFyIEc9eihWKSxVPUdbMV07cmV0dXJuIDMqKEdbMF0rVSkvNC1V'@;
put 'fSxCLnRvQnl0ZUFycmF5PWZ1bmN0aW9uKFYpe3ZhciBHLFcsY2UsVT16KFYpLHE9VVswXSx0ZT1VWzFdLG5lPW5ldyBKKDMqKHErKGNlPXRlKSkvNC1jZSksaWU9MCxsZT10ZT4wP3EtNDpxO2ZvcihXPTA7VzxsZTtXKz00KUc9S1tWLmNoYXJDb2RlQXQoVyldPDwxOHxLW1YuY2hhckNvZGVB'@;
put 'dChXKzEpXTw8MTJ8S1tWLmNoYXJDb2RlQXQoVysyKV08PDZ8S1tWLmNoYXJDb2RlQXQoVyszKV0sbmVbaWUrK109Rz4+MTYmMjU1LG5lW2llKytdPUc+PjgmMjU1LG5lW2llKytdPTI1NSZHO3JldHVybiAyPT09dGUmJihHPUtbVi5jaGFyQ29kZUF0KFcpXTw8MnxLW1YuY2hhckNvZGVBdChX'@;
put 'KzEpXT4+NCxuZVtpZSsrXT0yNTUmRyksMT09PXRlJiYoRz1LW1YuY2hhckNvZGVBdChXKV08PDEwfEtbVi5jaGFyQ29kZUF0KFcrMSldPDw0fEtbVi5jaGFyQ29kZUF0KFcrMildPj4yLG5lW2llKytdPUc+PjgmMjU1LG5lW2llKytdPTI1NSZHKSxuZX0sQi5mcm9tQnl0ZUFycmF5PWZ1bmN0'@;
put 'aW9uKFYpe2Zvcih2YXIgRyxXPVYubGVuZ3RoLFU9VyUzLHE9W10sbmU9MCxpZT1XLVU7bmU8aWU7bmUrPTE2MzgzKXEucHVzaChqKFYsbmUsbmUrMTYzODM+aWU/aWU6bmUrMTYzODMpKTtyZXR1cm4gMT09PVU/cS5wdXNoKExbKEc9VltXLTFdKT4+Ml0rTFtHPDw0JjYzXSsiPT0iKToyPT09'@;
put 'VSYmcS5wdXNoKExbKEc9KFZbVy0yXTw8OCkrVltXLTFdKT4+MTBdK0xbRz4+NCY2M10rTFtHPDwyJjYzXSsiPSIpLHEuam9pbigiIil9O2Zvcih2YXIgTD1bXSxLPVtdLEo9dHlwZW9mIFVpbnQ4QXJyYXk8InUiP1VpbnQ4QXJyYXk6QXJyYXksST0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldY'@;
put 'WVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIsUj0wO1I8NjQ7KytSKUxbUl09SVtSXSxLW0kuY2hhckNvZGVBdChSKV09UjtmdW5jdGlvbiB6KFYpe3ZhciBHPVYubGVuZ3RoO2lmKEclND4wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJpbmcuIExlbmd0aCBt'@;
put 'dXN0IGJlIGEgbXVsdGlwbGUgb2YgNCIpO3ZhciBXPVYuaW5kZXhPZigiPSIpO3JldHVybi0xPT09VyYmKFc9RyksW1csVz09PUc/MDo0LVclNF19ZnVuY3Rpb24gaihWLEcsVyl7Zm9yKHZhciBxLHRlPVtdLG5lPUc7bmU8VztuZSs9Myl0ZS5wdXNoKExbKHE9KFZbbmVdPDwxNiYxNjcxMTY4'@;
put 'MCkrKFZbbmUrMV08PDgmNjUyODApKygyNTUmVltuZSsyXSkpPj4xOCY2M10rTFtxPj4xMiY2M10rTFtxPj42JjYzXStMWzYzJnFdKTtyZXR1cm4gdGUuam9pbigiIil9S1siLSIuY2hhckNvZGVBdCgwKV09NjIsS1siXyIuY2hhckNvZGVBdCgwKV09NjN9LDM1NTA6ZnVuY3Rpb24oSCxCLEwp'@;
put 'eyFmdW5jdGlvbihLLEopeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBJKHkscCl7aWYoIXkpdGhyb3cgbmV3IEVycm9yKHB8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gUih5LHApe3kuc3VwZXJfPXA7dmFyIFM9ZnVuY3Rpb24oKXt9O1MucHJvdG90eXBlPXAucHJvdG90eXBlLHkucHJv'@;
put 'dG90eXBlPW5ldyBTLHkucHJvdG90eXBlLmNvbnN0cnVjdG9yPXl9ZnVuY3Rpb24gRSh5LHAsUyl7aWYoRS5pc0JOKHkpKXJldHVybiB5O3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT15JiYoImxlIiE9PXAmJiJiZSIh'@;
put 'PT1wfHwoUz1wLHA9MTApLHRoaXMuX2luaXQoeXx8MCxwfHwxMCxTfHwiYmUiKSl9dmFyIHo7Im9iamVjdCI9PXR5cGVvZiBLP0suZXhwb3J0cz1FOkouQk49RSxFLkJOPUUsRS53b3JkU2l6ZT0yNjt0cnl7ej10eXBlb2Ygd2luZG93PCJ1IiYmdm9pZCAwIT09d2luZG93LkJ1ZmZlcj93aW5k'@;
put 'b3cuQnVmZmVyOkwoNjYwMSkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBqKHkscCl7dmFyIFM9eS5jaGFyQ29kZUF0KHApO3JldHVybiBTPj00OCYmUzw9NTc/Uy00ODpTPj02NSYmUzw9NzA/Uy01NTpTPj05NyYmUzw9MTAyP1MtODc6dm9pZCBJKCExLCJJbnZhbGlkIGNoYXJhY3RlciBpbiAi'@;
put 'K3kpfWZ1bmN0aW9uIFYoeSxwLFMpe3ZhciBRPWooeSxTKTtyZXR1cm4gUy0xPj1wJiYoUXw9aih5LFMtMSk8PDQpLFF9ZnVuY3Rpb24gRyh5LHAsUyxRKXtmb3IodmFyIHJlPTAsZmU9MCxtZT1NYXRoLm1pbih5Lmxlbmd0aCxTKSxrZT1wO2tlPG1lO2tlKyspe3ZhciBUZT15LmNoYXJDb2Rl'@;
put 'QXQoa2UpLTQ4O3JlKj1RLGZlPVRlPj00OT9UZS00OSsxMDpUZT49MTc/VGUtMTcrMTA6VGUsSShUZT49MCYmZmU8USwiSW52YWxpZCBjaGFyYWN0ZXIiKSxyZSs9ZmV9cmV0dXJuIHJlfWZ1bmN0aW9uIFcoeSxwKXt5LndvcmRzPXAud29yZHMseS5sZW5ndGg9cC5sZW5ndGgseS5uZWdhdGl2'@;
put 'ZT1wLm5lZ2F0aXZlLHkucmVkPXAucmVkfWlmKEUuaXNCTj1mdW5jdGlvbih5KXtyZXR1cm4geSBpbnN0YW5jZW9mIEV8fG51bGwhPT15JiYib2JqZWN0Ij09dHlwZW9mIHkmJnkuY29uc3RydWN0b3Iud29yZFNpemU9PT1FLndvcmRTaXplJiZBcnJheS5pc0FycmF5KHkud29yZHMpfSxFLm1h'@;
put 'eD1mdW5jdGlvbih5LHApe3JldHVybiB5LmNtcChwKT4wP3k6cH0sRS5taW49ZnVuY3Rpb24oeSxwKXtyZXR1cm4geS5jbXAocCk8MD95OnB9LEUucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHkscCxTKXtpZigibnVtYmVyIj09dHlwZW9mIHkpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIoeSxw'@;
put 'LFMpO2lmKCJvYmplY3QiPT10eXBlb2YgeSlyZXR1cm4gdGhpcy5faW5pdEFycmF5KHkscCxTKTsiaGV4Ij09PXAmJihwPTE2KSxJKHA9PT0oMHxwKSYmcD49MiYmcDw9MzYpO3ZhciBRPTA7Ii0iPT09KHk9eS50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihRKyssdGhpcy5u'@;
put 'ZWdhdGl2ZT0xKSxRPHkubGVuZ3RoJiYoMTY9PT1wP3RoaXMuX3BhcnNlSGV4KHksUSxTKToodGhpcy5fcGFyc2VCYXNlKHkscCxRKSwibGUiPT09UyYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLHAsUykpKX0sRS5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oeSxwLFMp'@;
put 'e3k8MCYmKHRoaXMubmVnYXRpdmU9MSx5PS15KSx5PDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZ5XSx0aGlzLmxlbmd0aD0xKTp5PDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJnkseS82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KEkoeTw5'@;
put 'MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZ5LHkvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PVMmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxwLFMpfSxFLnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKHkscCxTKXtp'@;
put 'ZihJKCJudW1iZXIiPT10eXBlb2YgeS5sZW5ndGgpLHkubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKHkubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIFE9MDtR'@;
put 'PHRoaXMubGVuZ3RoO1ErKyl0aGlzLndvcmRzW1FdPTA7dmFyIHJlLGZlLG1lPTA7aWYoImJlIj09PVMpZm9yKFE9eS5sZW5ndGgtMSxyZT0wO1E+PTA7US09Myl0aGlzLndvcmRzW3JlXXw9KGZlPXlbUV18eVtRLTFdPDw4fHlbUS0yXTw8MTYpPDxtZSY2NzEwODg2Myx0aGlzLndvcmRzW3Jl'@;
put 'KzFdPWZlPj4+MjYtbWUmNjcxMDg4NjMsKG1lKz0yNCk+PTI2JiYobWUtPTI2LHJlKyspO2Vsc2UgaWYoImxlIj09PVMpZm9yKFE9MCxyZT0wO1E8eS5sZW5ndGg7USs9Myl0aGlzLndvcmRzW3JlXXw9KGZlPXlbUV18eVtRKzFdPDw4fHlbUSsyXTw8MTYpPDxtZSY2NzEwODg2Myx0aGlzLndv'@;
put 'cmRzW3JlKzFdPWZlPj4+MjYtbWUmNjcxMDg4NjMsKG1lKz0yNCk+PTI2JiYobWUtPTI2LHJlKyspO3JldHVybiB0aGlzLl9zdHJpcCgpfSxFLnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oeSxwLFMpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoeS5sZW5ndGgtcCkvNiksdGhpcy53b3Jk'@;
put 'cz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgUT0wO1E8dGhpcy5sZW5ndGg7USsrKXRoaXMud29yZHNbUV09MDt2YXIgcmUsZmU9MCxtZT0wO2lmKCJiZSI9PT1TKWZvcihRPXkubGVuZ3RoLTE7UT49cDtRLT0yKXJlPVYoeSxwLFEpPDxmZSx0aGlzLndvcmRzW21lXXw9NjcxMDg4'@;
put 'NjMmcmUsZmU+PTE4PyhmZS09MTgsdGhpcy53b3Jkc1ttZSs9MV18PXJlPj4+MjYpOmZlKz04O2Vsc2UgZm9yKFE9KHkubGVuZ3RoLXApJTI9PTA/cCsxOnA7UTx5Lmxlbmd0aDtRKz0yKXJlPVYoeSxwLFEpPDxmZSx0aGlzLndvcmRzW21lXXw9NjcxMDg4NjMmcmUsZmU+PTE4PyhmZS09MTgs'@;
put 'dGhpcy53b3Jkc1ttZSs9MV18PXJlPj4+MjYpOmZlKz04O3RoaXMuX3N0cmlwKCl9LEUucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oeSxwLFMpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBRPTAscmU9MTtyZTw9NjcxMDg4NjM7cmUqPXApUSsrO1EtLSxyZT1y'@;
put 'ZS9wfDA7Zm9yKHZhciBmZT15Lmxlbmd0aC1TLG1lPWZlJVEsa2U9TWF0aC5taW4oZmUsZmUtbWUpK1MsVGU9MCxQZT1TO1BlPGtlO1BlKz1RKVRlPUcoeSxQZSxQZStRLHApLHRoaXMuaW11bG4ocmUpLHRoaXMud29yZHNbMF0rVGU8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9VGU6dGhpcy5f'@;
put 'aWFkZG4oVGUpO2lmKDAhPT1tZSl7dmFyIEZlPTE7Zm9yKFRlPUcoeSxQZSx5Lmxlbmd0aCxwKSxQZT0wO1BlPG1lO1BlKyspRmUqPXA7dGhpcy5pbXVsbihGZSksdGhpcy53b3Jkc1swXStUZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1UZTp0aGlzLl9pYWRkbihUZSl9dGhpcy5fc3RyaXAo'@;
put 'KX0sRS5wcm90b3R5cGUuY29weT1mdW5jdGlvbih5KXt5LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBwPTA7cDx0aGlzLmxlbmd0aDtwKyspeS53b3Jkc1twXT10aGlzLndvcmRzW3BdO3kubGVuZ3RoPXRoaXMubGVuZ3RoLHkubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSx5'@;
put 'LnJlZD10aGlzLnJlZH0sRS5wcm90b3R5cGUuX21vdmU9ZnVuY3Rpb24oeSl7Vyh5LHRoaXMpfSxFLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciB5PW5ldyBFKG51bGwpO3JldHVybiB0aGlzLmNvcHkoeSkseX0sRS5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbih5KXtmb3IoO3Ro'@;
put 'aXMubGVuZ3RoPHk7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sRS5wcm90b3R5cGUuX3N0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9y'@;
put 'bVNpZ24oKX0sRS5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LHR5cGVvZiBTeW1ib2w8InUiJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sLmZvcil0cnl7RS5w'@;
put 'cm90b3R5cGVbU3ltYm9sLmZvcigibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20iKV09VX1jYXRjaHtFLnByb3RvdHlwZS5pbnNwZWN0PVV9ZWxzZSBFLnByb3RvdHlwZS5pbnNwZWN0PVU7ZnVuY3Rpb24gVSgpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0'@;
put 'cmluZygxNikrIj4ifXZhciBxPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAw'@;
put 'MDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAw'@;
put 'MDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLHRlPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUs'@;
put 'NSw1LDUsNSw1LDVdLG5lPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIy'@;
put 'MjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIGll'@;
put 'KHkscCxTKXtTLm5lZ2F0aXZlPXAubmVnYXRpdmVeeS5uZWdhdGl2ZTt2YXIgUT15Lmxlbmd0aCtwLmxlbmd0aHwwO1MubGVuZ3RoPVEsUT1RLTF8MDt2YXIgcmU9MHx5LndvcmRzWzBdLGZlPTB8cC53b3Jkc1swXSxtZT1yZSpmZSxUZT1tZS82NzEwODg2NHwwO1Mud29yZHNbMF09NjcxMDg4'@;
put 'NjMmbWU7Zm9yKHZhciBQZT0xO1BlPFE7UGUrKyl7Zm9yKHZhciBGZT1UZT4+PjI2LE5lPTY3MTA4ODYzJlRlLExlPU1hdGgubWluKFBlLHAubGVuZ3RoLTEpLEJlPU1hdGgubWF4KDAsUGUteS5sZW5ndGgrMSk7QmU8PUxlO0JlKyspRmUrPShtZT0ocmU9MHx5LndvcmRzW1BlLUJlfDBdKSoo'@;
put 'ZmU9MHxwLndvcmRzW0JlXSkrTmUpLzY3MTA4ODY0fDAsTmU9NjcxMDg4NjMmbWU7Uy53b3Jkc1tQZV09MHxOZSxUZT0wfEZlfXJldHVybiAwIT09VGU/Uy53b3Jkc1tQZV09MHxUZTpTLmxlbmd0aC0tLFMuX3N0cmlwKCl9RS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oeSxwKXt2YXIg'@;
put 'UztpZihwPTB8cHx8MSwxNj09PSh5PXl8fDEwKXx8ImhleCI9PT15KXtTPSIiO2Zvcih2YXIgUT0wLHJlPTAsZmU9MDtmZTx0aGlzLmxlbmd0aDtmZSsrKXt2YXIgbWU9dGhpcy53b3Jkc1tmZV0sa2U9KDE2Nzc3MjE1JihtZTw8UXxyZSkpLnRvU3RyaW5nKDE2KTtyZT1tZT4+PjI0LVEmMTY3'@;
put 'NzcyMTUsKFErPTIpPj0yNiYmKFEtPTI2LGZlLS0pLFM9MCE9PXJlfHxmZSE9PXRoaXMubGVuZ3RoLTE/cVs2LWtlLmxlbmd0aF0ra2UrUzprZStTfWZvcigwIT09cmUmJihTPXJlLnRvU3RyaW5nKDE2KStTKTtTLmxlbmd0aCVwIT0wOylTPSIwIitTO3JldHVybiAwIT09dGhpcy5uZWdhdGl2'@;
put 'ZSYmKFM9Ii0iK1MpLFN9aWYoeT09PSgwfHkpJiZ5Pj0yJiZ5PD0zNil7dmFyIFRlPXRlW3ldLFBlPW5lW3ldO1M9IiI7dmFyIEZlPXRoaXMuY2xvbmUoKTtmb3IoRmUubmVnYXRpdmU9MDshRmUuaXNaZXJvKCk7KXt2YXIgTmU9RmUubW9kcm4oUGUpLnRvU3RyaW5nKHkpO1M9KEZlPUZlLmlk'@;
put 'aXZuKFBlKSkuaXNaZXJvKCk/TmUrUzpxW1RlLU5lLmxlbmd0aF0rTmUrU31mb3IodGhpcy5pc1plcm8oKSYmKFM9IjAiK1MpO1MubGVuZ3RoJXAhPTA7KVM9IjAiK1M7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoUz0iLSIrUyksU31JKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIg'@;
put 'YW5kIDM2Iil9LEUucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP3krPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT95Kz00NTAzNTk5NjI3MzcwNDk2'@;
put 'KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmSSghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LXk6eX0sRS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmco'@;
put 'MTYsMil9LHomJihFLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbih5LHApe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKHoseSxwKX0pLEUucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oeSxwKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSx5LHApfSxFLnByb3RvdHlwZS50b0Fy'@;
put 'cmF5TGlrZT1mdW5jdGlvbih5LHAsUyl7dGhpcy5fc3RyaXAoKTt2YXIgUT10aGlzLmJ5dGVMZW5ndGgoKSxyZT1TfHxNYXRoLm1heCgxLFEpO0koUTw9cmUsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxJKHJlPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0g'@;
put 'MCIpO3ZhciBtZSxrZSxmZT0oa2U9cmUsKG1lPXkpLmFsbG9jVW5zYWZlP21lLmFsbG9jVW5zYWZlKGtlKTpuZXcgbWUoa2UpKTtyZXR1cm4gdGhpc1siX3RvQXJyYXlMaWtlIisoImxlIj09PXA/IkxFIjoiQkUiKV0oZmUsUSksZmV9LEUucHJvdG90eXBlLl90b0FycmF5TGlrZUxFPWZ1bmN0'@;
put 'aW9uKHkscCl7Zm9yKHZhciBTPTAsUT0wLHJlPTAsZmU9MDtyZTx0aGlzLmxlbmd0aDtyZSsrKXt2YXIgbWU9dGhpcy53b3Jkc1tyZV08PGZlfFE7eVtTKytdPTI1NSZtZSxTPHkubGVuZ3RoJiYoeVtTKytdPW1lPj44JjI1NSksUzx5Lmxlbmd0aCYmKHlbUysrXT1tZT4+MTYmMjU1KSw2PT09'@;
put 'ZmU/KFM8eS5sZW5ndGgmJih5W1MrK109bWU+PjI0JjI1NSksUT0wLGZlPTApOihRPW1lPj4+MjQsZmUrPTIpfWlmKFM8eS5sZW5ndGgpZm9yKHlbUysrXT1RO1M8eS5sZW5ndGg7KXlbUysrXT0wfSxFLnByb3RvdHlwZS5fdG9BcnJheUxpa2VCRT1mdW5jdGlvbih5LHApe2Zvcih2YXIgUz15'@;
put 'Lmxlbmd0aC0xLFE9MCxyZT0wLGZlPTA7cmU8dGhpcy5sZW5ndGg7cmUrKyl7dmFyIG1lPXRoaXMud29yZHNbcmVdPDxmZXxRO3lbUy0tXT0yNTUmbWUsUz49MCYmKHlbUy0tXT1tZT4+OCYyNTUpLFM+PTAmJih5W1MtLV09bWU+PjE2JjI1NSksNj09PWZlPyhTPj0wJiYoeVtTLS1dPW1lPj4y'@;
put 'NCYyNTUpLFE9MCxmZT0wKTooUT1tZT4+PjI0LGZlKz0yKX1pZihTPj0wKWZvcih5W1MtLV09UTtTPj0wOyl5W1MtLV09MH0sRS5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKHkpe3JldHVybiAzMi1NYXRoLmNsejMyKHkpfTpmdW5jdGlvbih5KXt2YXIgcD15LFM9'@;
put 'MDtyZXR1cm4gcD49NDA5NiYmKFMrPTEzLHA+Pj49MTMpLHA+PTY0JiYoUys9NyxwPj4+PTcpLHA+PTgmJihTKz00LHA+Pj49NCkscD49MiYmKFMrPTIscD4+Pj0yKSxTK3B9LEUucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbih5KXtpZigwPT09eSlyZXR1cm4gMjY7dmFyIHA9eSxTPTA7'@;
put 'cmV0dXJuISg4MTkxJnApJiYoUys9MTMscD4+Pj0xMyksISgxMjcmcCkmJihTKz03LHA+Pj49NyksISgxNSZwKSYmKFMrPTQscD4+Pj00KSwhKDMmcCkmJihTKz0yLHA+Pj49MiksISgxJnApJiZTKyssU30sRS5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIHA9dGhpcy5fY291'@;
put 'bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrcH0sRS5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgeT0wLHA9MDtwPHRoaXMubGVuZ3RoO3ArKyl7dmFyIFM9dGhp'@;
put 'cy5femVyb0JpdHModGhpcy53b3Jkc1twXSk7aWYoeSs9UywyNiE9PVMpYnJlYWt9cmV0dXJuIHl9LEUucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LEUucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbih5KXtyZXR1'@;
put 'cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bih5KS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LEUucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLnRlc3RuKHktMSk/dGhpcy5ub3RuKHkpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LEUu'@;
put 'cHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxFLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sRS5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5u'@;
put 'ZWdhdGl2ZV49MSksdGhpc30sRS5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbih5KXtmb3IoO3RoaXMubGVuZ3RoPHkubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBwPTA7cDx5Lmxlbmd0aDtwKyspdGhpcy53b3Jkc1twXT10aGlzLndvcmRzW3BdfHkud29yZHNb'@;
put 'cF07cmV0dXJuIHRoaXMuX3N0cmlwKCl9LEUucHJvdG90eXBlLmlvcj1mdW5jdGlvbih5KXtyZXR1cm4gSSgwPT0odGhpcy5uZWdhdGl2ZXx5Lm5lZ2F0aXZlKSksdGhpcy5pdW9yKHkpfSxFLnByb3RvdHlwZS5vcj1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5sZW5ndGg+eS5sZW5ndGg/dGhp'@;
put 'cy5jbG9uZSgpLmlvcih5KTp5LmNsb25lKCkuaW9yKHRoaXMpfSxFLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMubGVuZ3RoPnkubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKHkpOnkuY2xvbmUoKS5pdW9yKHRoaXMpfSxFLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbih5'@;
put 'KXt2YXIgcDtwPXRoaXMubGVuZ3RoPnkubGVuZ3RoP3k6dGhpcztmb3IodmFyIFM9MDtTPHAubGVuZ3RoO1MrKyl0aGlzLndvcmRzW1NdPXRoaXMud29yZHNbU10meS53b3Jkc1tTXTtyZXR1cm4gdGhpcy5sZW5ndGg9cC5sZW5ndGgsdGhpcy5fc3RyaXAoKX0sRS5wcm90b3R5cGUuaWFuZD1m'@;
put 'dW5jdGlvbih5KXtyZXR1cm4gSSgwPT0odGhpcy5uZWdhdGl2ZXx5Lm5lZ2F0aXZlKSksdGhpcy5pdWFuZCh5KX0sRS5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLmxlbmd0aD55Lmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZCh5KTp5LmNsb25lKCkuaWFuZCh0aGlzKX0s'@;
put 'RS5wcm90b3R5cGUudWFuZD1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5sZW5ndGg+eS5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKHkpOnkuY2xvbmUoKS5pdWFuZCh0aGlzKX0sRS5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oeSl7dmFyIHAsUzt0aGlzLmxlbmd0aD55Lmxlbmd0aD8ocD10'@;
put 'aGlzLFM9eSk6KHA9eSxTPXRoaXMpO2Zvcih2YXIgUT0wO1E8Uy5sZW5ndGg7USsrKXRoaXMud29yZHNbUV09cC53b3Jkc1tRXV5TLndvcmRzW1FdO2lmKHRoaXMhPT1wKWZvcig7UTxwLmxlbmd0aDtRKyspdGhpcy53b3Jkc1tRXT1wLndvcmRzW1FdO3JldHVybiB0aGlzLmxlbmd0aD1wLmxl'@;
put 'bmd0aCx0aGlzLl9zdHJpcCgpfSxFLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKHkpe3JldHVybiBJKDA9PSh0aGlzLm5lZ2F0aXZlfHkubmVnYXRpdmUpKSx0aGlzLml1eG9yKHkpfSxFLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMubGVuZ3RoPnkubGVuZ3RoP3RoaXMu'@;
put 'Y2xvbmUoKS5peG9yKHkpOnkuY2xvbmUoKS5peG9yKHRoaXMpfSxFLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLmxlbmd0aD55Lmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IoeSk6eS5jbG9uZSgpLml1eG9yKHRoaXMpfSxFLnByb3RvdHlwZS5pbm90bj1mdW5jdGlv'@;
put 'bih5KXtJKCJudW1iZXIiPT10eXBlb2YgeSYmeT49MCk7dmFyIHA9MHxNYXRoLmNlaWwoeS8yNiksUz15JTI2O3RoaXMuX2V4cGFuZChwKSxTPjAmJnAtLTtmb3IodmFyIFE9MDtRPHA7USsrKXRoaXMud29yZHNbUV09NjcxMDg4NjMmfnRoaXMud29yZHNbUV07cmV0dXJuIFM+MCYmKHRoaXMu'@;
put 'd29yZHNbUV09fnRoaXMud29yZHNbUV0mNjcxMDg4NjM+PjI2LVMpLHRoaXMuX3N0cmlwKCl9LEUucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bih5KX0sRS5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbih5LHApe0koIm51bWJlciI9PXR5cGVvZiB5'@;
put 'JiZ5Pj0wKTt2YXIgUz15LzI2fDAsUT15JTI2O3JldHVybiB0aGlzLl9leHBhbmQoUysxKSx0aGlzLndvcmRzW1NdPXA/dGhpcy53b3Jkc1tTXXwxPDxROnRoaXMud29yZHNbU10mfigxPDxRKSx0aGlzLl9zdHJpcCgpfSxFLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHkpe3ZhciBwLFMsUTtp'@;
put 'ZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXkubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxwPXRoaXMuaXN1Yih5KSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT15Lm5lZ2F0aXZlKXJldHVybiB5Lm5lZ2F0aXZlPTAs'@;
put 'cD10aGlzLmlzdWIoeSkseS5uZWdhdGl2ZT0xLHAuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+eS5sZW5ndGg/KFM9dGhpcyxRPXkpOihTPXksUT10aGlzKTtmb3IodmFyIHJlPTAsZmU9MDtmZTxRLmxlbmd0aDtmZSsrKXRoaXMud29yZHNbZmVdPTY3MTA4ODYzJihwPSgwfFMud29yZHNbZmVd'@;
put 'KSsoMHxRLndvcmRzW2ZlXSkrcmUpLHJlPXA+Pj4yNjtmb3IoOzAhPT1yZSYmZmU8Uy5sZW5ndGg7ZmUrKyl0aGlzLndvcmRzW2ZlXT02NzEwODg2MyYocD0oMHxTLndvcmRzW2ZlXSkrcmUpLHJlPXA+Pj4yNjtpZih0aGlzLmxlbmd0aD1TLmxlbmd0aCwwIT09cmUpdGhpcy53b3Jkc1t0aGlz'@;
put 'Lmxlbmd0aF09cmUsdGhpcy5sZW5ndGgrKztlbHNlIGlmKFMhPT10aGlzKWZvcig7ZmU8Uy5sZW5ndGg7ZmUrKyl0aGlzLndvcmRzW2ZlXT1TLndvcmRzW2ZlXTtyZXR1cm4gdGhpc30sRS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHkpe3ZhciBwO3JldHVybiAwIT09eS5uZWdhdGl2ZSYmMD09'@;
put 'PXRoaXMubmVnYXRpdmU/KHkubmVnYXRpdmU9MCxwPXRoaXMuc3ViKHkpLHkubmVnYXRpdmVePTEscCk6MD09PXkubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAscD15LnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEscCk6dGhpcy5sZW5ndGg+eS5sZW5ndGg/'@;
put 'dGhpcy5jbG9uZSgpLmlhZGQoeSk6eS5jbG9uZSgpLmlhZGQodGhpcyl9LEUucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oeSl7aWYoMCE9PXkubmVnYXRpdmUpe3kubmVnYXRpdmU9MDt2YXIgcD10aGlzLmlhZGQoeSk7cmV0dXJuIHkubmVnYXRpdmU9MSxwLl9ub3JtU2lnbigpfWlmKDAhPT10'@;
put 'aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKHkpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBTLFEscmU9dGhpcy5jbXAoeSk7aWYoMD09PXJlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBd'@;
put 'PTAsdGhpcztyZT4wPyhTPXRoaXMsUT15KTooUz15LFE9dGhpcyk7Zm9yKHZhciBmZT0wLG1lPTA7bWU8US5sZW5ndGg7bWUrKylmZT0ocD0oMHxTLndvcmRzW21lXSktKDB8US53b3Jkc1ttZV0pK2ZlKT4+MjYsdGhpcy53b3Jkc1ttZV09NjcxMDg4NjMmcDtmb3IoOzAhPT1mZSYmbWU8Uy5s'@;
put 'ZW5ndGg7bWUrKylmZT0ocD0oMHxTLndvcmRzW21lXSkrZmUpPj4yNix0aGlzLndvcmRzW21lXT02NzEwODg2MyZwO2lmKDA9PT1mZSYmbWU8Uy5sZW5ndGgmJlMhPT10aGlzKWZvcig7bWU8Uy5sZW5ndGg7bWUrKyl0aGlzLndvcmRzW21lXT1TLndvcmRzW21lXTtyZXR1cm4gdGhpcy5sZW5n'@;
put 'dGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsbWUpLFMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLl9zdHJpcCgpfSxFLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKHkpfTt2YXIgbGU9ZnVuY3Rpb24oeSxwLFMpe3ZhciBRLHJlLGZlLG1l'@;
put 'PXkud29yZHMsa2U9cC53b3JkcyxUZT1TLndvcmRzLFBlPTAsRmU9MHxtZVswXSxOZT04MTkxJkZlLExlPUZlPj4+MTMsQmU9MHxtZVsxXSxIZT04MTkxJkJlLFFlPUJlPj4+MTMsbXQ9MHxtZVsyXSxLZT04MTkxJm10LHdlPW10Pj4+MTMsSWU9MHxtZVszXSxPZT04MTkxJkllLGV0PUllPj4+'@;
put 'MTMsbnQ9MHxtZVs0XSxxZT04MTkxJm50LGh0PW50Pj4+MTMsRWU9MHxtZVs1XSxEZT04MTkxJkVlLCRlPUVlPj4+MTMsYXQ9MHxtZVs2XSxjdD04MTkxJmF0LE90PWF0Pj4+MTMsUHQ9MHxtZVs3XSxBdD04MTkxJlB0LEp0PVB0Pj4+MTMsbW49MHxtZVs4XSxOdD04MTkxJm1uLGJuPW1uPj4+'@;
put 'MTMsR249MHxtZVs5XSxvbj04MTkxJkduLCRuPUduPj4+MTMsTm49MHxrZVswXSxwdD04MTkxJk5uLHBuPU5uPj4+MTMsaG49MHxrZVsxXSxDdD04MTkxJmhuLGVuPWhuPj4+MTMsX3Q9MHxrZVsyXSxWdD04MTkxJl90LF9uPV90Pj4+MTMsb3Q9MHxrZVszXSxJdD04MTkxJm90LG5uPW90Pj4+'@;
put 'MTMsRHQ9MHxrZVs0XSx2dD04MTkxJkR0LEd0PUR0Pj4+MTMsTG49MHxrZVs1XSx6dD04MTkxJkxuLE1uPUxuPj4+MTMsVG49MHxrZVs2XSxzbj04MTkxJlRuLEJuPVRuPj4+MTMsRm49MHxrZVs3XSxxdD04MTkxJkZuLEhuPUZuPj4+MTMsaWk9MHxrZVs4XSxjbj04MTkxJmlpLGpuPWlpPj4+'@;
put 'MTMsWHI9MHxrZVs5XSx2aT04MTkxJlhyLEVyPVhyPj4+MTM7Uy5uZWdhdGl2ZT15Lm5lZ2F0aXZlXnAubmVnYXRpdmUsUy5sZW5ndGg9MTk7dmFyIFlpPShQZSsoUT1NYXRoLmltdWwoTmUscHQpKXwwKSsoKDgxOTEmKHJlPShyZT1NYXRoLmltdWwoTmUscG4pKStNYXRoLmltdWwoTGUscHQp'@;
put 'fDApKTw8MTMpfDA7UGU9KChmZT1NYXRoLmltdWwoTGUscG4pKSsocmU+Pj4xMyl8MCkrKFlpPj4+MjYpfDAsWWkmPTY3MTA4ODYzLFE9TWF0aC5pbXVsKEhlLHB0KSxyZT0ocmU9TWF0aC5pbXVsKEhlLHBuKSkrTWF0aC5pbXVsKFFlLHB0KXwwLGZlPU1hdGguaW11bChRZSxwbik7dmFyIEpy'@;
put 'PShQZSsoUT1RK01hdGguaW11bChOZSxDdCl8MCl8MCkrKCg4MTkxJihyZT0ocmU9cmUrTWF0aC5pbXVsKE5lLGVuKXwwKStNYXRoLmltdWwoTGUsQ3QpfDApKTw8MTMpfDA7UGU9KChmZT1mZStNYXRoLmltdWwoTGUsZW4pfDApKyhyZT4+PjEzKXwwKSsoSnI+Pj4yNil8MCxKciY9NjcxMDg4'@;
put 'NjMsUT1NYXRoLmltdWwoS2UscHQpLHJlPShyZT1NYXRoLmltdWwoS2UscG4pKStNYXRoLmltdWwod2UscHQpfDAsZmU9TWF0aC5pbXVsKHdlLHBuKSxRPVErTWF0aC5pbXVsKEhlLEN0KXwwLHJlPShyZT1yZStNYXRoLmltdWwoSGUsZW4pfDApK01hdGguaW11bChRZSxDdCl8MCxmZT1mZStN'@;
put 'YXRoLmltdWwoUWUsZW4pfDA7dmFyIGFvPShQZSsoUT1RK01hdGguaW11bChOZSxWdCl8MCl8MCkrKCg4MTkxJihyZT0ocmU9cmUrTWF0aC5pbXVsKE5lLF9uKXwwKStNYXRoLmltdWwoTGUsVnQpfDApKTw8MTMpfDA7UGU9KChmZT1mZStNYXRoLmltdWwoTGUsX24pfDApKyhyZT4+PjEzKXww'@;
put 'KSsoYW8+Pj4yNil8MCxhbyY9NjcxMDg4NjMsUT1NYXRoLmltdWwoT2UscHQpLHJlPShyZT1NYXRoLmltdWwoT2UscG4pKStNYXRoLmltdWwoZXQscHQpfDAsZmU9TWF0aC5pbXVsKGV0LHBuKSxRPVErTWF0aC5pbXVsKEtlLEN0KXwwLHJlPShyZT1yZStNYXRoLmltdWwoS2UsZW4pfDApK01h'@;
put 'dGguaW11bCh3ZSxDdCl8MCxmZT1mZStNYXRoLmltdWwod2UsZW4pfDAsUT1RK01hdGguaW11bChIZSxWdCl8MCxyZT0ocmU9cmUrTWF0aC5pbXVsKEhlLF9uKXwwKStNYXRoLmltdWwoUWUsVnQpfDAsZmU9ZmUrTWF0aC5pbXVsKFFlLF9uKXwwO3ZhciBCcj0oUGUrKFE9UStNYXRoLmltdWwo'@;
put 'TmUsSXQpfDApfDApKygoODE5MSYocmU9KHJlPXJlK01hdGguaW11bChOZSxubil8MCkrTWF0aC5pbXVsKExlLEl0KXwwKSk8PDEzKXwwO1BlPSgoZmU9ZmUrTWF0aC5pbXVsKExlLG5uKXwwKSsocmU+Pj4xMyl8MCkrKEJyPj4+MjYpfDAsQnImPTY3MTA4ODYzLFE9TWF0aC5pbXVsKHFlLHB0'@;
put 'KSxyZT0ocmU9TWF0aC5pbXVsKHFlLHBuKSkrTWF0aC5pbXVsKGh0LHB0KXwwLGZlPU1hdGguaW11bChodCxwbiksUT1RK01hdGguaW11bChPZSxDdCl8MCxyZT0ocmU9cmUrTWF0aC5pbXVsKE9lLGVuKXwwKStNYXRoLmltdWwoZXQsQ3QpfDAsZmU9ZmUrTWF0aC5pbXVsKGV0LGVuKXwwLFE9'@;
put 'UStNYXRoLmltdWwoS2UsVnQpfDAscmU9KHJlPXJlK01hdGguaW11bChLZSxfbil8MCkrTWF0aC5pbXVsKHdlLFZ0KXwwLGZlPWZlK01hdGguaW11bCh3ZSxfbil8MCxRPVErTWF0aC5pbXVsKEhlLEl0KXwwLHJlPShyZT1yZStNYXRoLmltdWwoSGUsbm4pfDApK01hdGguaW11bChRZSxJdCl8'@;
put 'MCxmZT1mZStNYXRoLmltdWwoUWUsbm4pfDA7dmFyIEppPShQZSsoUT1RK01hdGguaW11bChOZSx2dCl8MCl8MCkrKCg4MTkxJihyZT0ocmU9cmUrTWF0aC5pbXVsKE5lLEd0KXwwKStNYXRoLmltdWwoTGUsdnQpfDApKTw8MTMpfDA7UGU9KChmZT1mZStNYXRoLmltdWwoTGUsR3QpfDApKyhy'@;
put 'ZT4+PjEzKXwwKSsoSmk+Pj4yNil8MCxKaSY9NjcxMDg4NjMsUT1NYXRoLmltdWwoRGUscHQpLHJlPShyZT1NYXRoLmltdWwoRGUscG4pKStNYXRoLmltdWwoJGUscHQpfDAsZmU9TWF0aC5pbXVsKCRlLHBuKSxRPVErTWF0aC5pbXVsKHFlLEN0KXwwLHJlPShyZT1yZStNYXRoLmltdWwocWUs'@;
put 'ZW4pfDApK01hdGguaW11bChodCxDdCl8MCxmZT1mZStNYXRoLmltdWwoaHQsZW4pfDAsUT1RK01hdGguaW11bChPZSxWdCl8MCxyZT0ocmU9cmUrTWF0aC5pbXVsKE9lLF9uKXwwKStNYXRoLmltdWwoZXQsVnQpfDAsZmU9ZmUrTWF0aC5pbXVsKGV0LF9uKXwwLFE9UStNYXRoLmltdWwoS2Us'@;
put 'SXQpfDAscmU9KHJlPXJlK01hdGguaW11bChLZSxubil8MCkrTWF0aC5pbXVsKHdlLEl0KXwwLGZlPWZlK01hdGguaW11bCh3ZSxubil8MCxRPVErTWF0aC5pbXVsKEhlLHZ0KXwwLHJlPShyZT1yZStNYXRoLmltdWwoSGUsR3QpfDApK01hdGguaW11bChRZSx2dCl8MCxmZT1mZStNYXRoLmlt'@;
put 'dWwoUWUsR3QpfDA7dmFyIHRvPShQZSsoUT1RK01hdGguaW11bChOZSx6dCl8MCl8MCkrKCg4MTkxJihyZT0ocmU9cmUrTWF0aC5pbXVsKE5lLE1uKXwwKStNYXRoLmltdWwoTGUsenQpfDApKTw8MTMpfDA7UGU9KChmZT1mZStNYXRoLmltdWwoTGUsTW4pfDApKyhyZT4+PjEzKXwwKSsodG8+'@;
put 'Pj4yNil8MCx0byY9NjcxMDg4NjMsUT1NYXRoLmltdWwoY3QscHQpLHJlPShyZT1NYXRoLmltdWwoY3QscG4pKStNYXRoLmltdWwoT3QscHQpfDAsZmU9TWF0aC5pbXVsKE90LHBuKSxRPVErTWF0aC5pbXVsKERlLEN0KXwwLHJlPShyZT1yZStNYXRoLmltdWwoRGUsZW4pfDApK01hdGguaW11'@;
put 'bCgkZSxDdCl8MCxmZT1mZStNYXRoLmltdWwoJGUsZW4pfDAsUT1RK01hdGguaW11bChxZSxWdCl8MCxyZT0ocmU9cmUrTWF0aC5pbXVsKHFlLF9uKXwwKStNYXRoLmltdWwoaHQsVnQpfDAsZmU9ZmUrTWF0aC5pbXVsKGh0LF9uKXwwLFE9UStNYXRoLmltdWwoT2UsSXQpfDAscmU9KHJlPXJl'@;
put 'K01hdGguaW11bChPZSxubil8MCkrTWF0aC5pbXVsKGV0LEl0KXwwLGZlPWZlK01hdGguaW11bChldCxubil8MCxRPVErTWF0aC5pbXVsKEtlLHZ0KXwwLHJlPShyZT1yZStNYXRoLmltdWwoS2UsR3QpfDApK01hdGguaW11bCh3ZSx2dCl8MCxmZT1mZStNYXRoLmltdWwod2UsR3QpfDAsUT1R'@;
put 'K01hdGguaW11bChIZSx6dCl8MCxyZT0ocmU9cmUrTWF0aC5pbXVsKEhlLE1uKXwwKStNYXRoLmltdWwoUWUsenQpfDAsZmU9ZmUrTWF0aC5pbXVsKFFlLE1uKXwwO3ZhciBjbz0oUGUrKFE9UStNYXRoLmltdWwoTmUsc24pfDApfDApKygoODE5MSYocmU9KHJlPXJlK01hdGguaW11bChOZSxC'@;
put 'bil8MCkrTWF0aC5pbXVsKExlLHNuKXwwKSk8PDEzKXwwO1BlPSgoZmU9ZmUrTWF0aC5pbXVsKExlLEJuKXwwKSsocmU+Pj4xMyl8MCkrKGNvPj4+MjYpfDAsY28mPTY3MTA4ODYzLFE9TWF0aC5pbXVsKEF0LHB0KSxyZT0ocmU9TWF0aC5pbXVsKEF0LHBuKSkrTWF0aC5pbXVsKEp0LHB0KXww'@;
put 'LGZlPU1hdGguaW11bChKdCxwbiksUT1RK01hdGguaW11bChjdCxDdCl8MCxyZT0ocmU9cmUrTWF0aC5pbXVsKGN0LGVuKXwwKStNYXRoLmltdWwoT3QsQ3QpfDAsZmU9ZmUrTWF0aC5pbXVsKE90LGVuKXwwLFE9UStNYXRoLmltdWwoRGUsVnQpfDAscmU9KHJlPXJlK01hdGguaW11bChEZSxf'@;
put 'bil8MCkrTWF0aC5pbXVsKCRlLFZ0KXwwLGZlPWZlK01hdGguaW11bCgkZSxfbil8MCxRPVErTWF0aC5pbXVsKHFlLEl0KXwwLHJlPShyZT1yZStNYXRoLmltdWwocWUsbm4pfDApK01hdGguaW11bChodCxJdCl8MCxmZT1mZStNYXRoLmltdWwoaHQsbm4pfDAsUT1RK01hdGguaW11bChPZSx2'@;
put 'dCl8MCxyZT0ocmU9cmUrTWF0aC5pbXVsKE9lLEd0KXwwKStNYXRoLmltdWwoZXQsdnQpfDAsZmU9ZmUrTWF0aC5pbXVsKGV0LEd0KXwwLFE9UStNYXRoLmltdWwoS2UsenQpfDAscmU9KHJlPXJlK01hdGguaW11bChLZSxNbil8MCkrTWF0aC5pbXVsKHdlLHp0KXwwLGZlPWZlK01hdGguaW11'@;
put 'bCh3ZSxNbil8MCxRPVErTWF0aC5pbXVsKEhlLHNuKXwwLHJlPShyZT1yZStNYXRoLmltdWwoSGUsQm4pfDApK01hdGguaW11bChRZSxzbil8MCxmZT1mZStNYXRoLmltdWwoUWUsQm4pfDA7dmFyIGxvPShQZSsoUT1RK01hdGguaW11bChOZSxxdCl8MCl8MCkrKCg4MTkxJihyZT0ocmU9cmUr'@;
put 'TWF0aC5pbXVsKE5lLEhuKXwwKStNYXRoLmltdWwoTGUscXQpfDApKTw8MTMpfDA7UGU9KChmZT1mZStNYXRoLmltdWwoTGUsSG4pfDApKyhyZT4+PjEzKXwwKSsobG8+Pj4yNil8MCxsbyY9NjcxMDg4NjMsUT1NYXRoLmltdWwoTnQscHQpLHJlPShyZT1NYXRoLmltdWwoTnQscG4pKStNYXRo'@;
put 'LmltdWwoYm4scHQpfDAsZmU9TWF0aC5pbXVsKGJuLHBuKSxRPVErTWF0aC5pbXVsKEF0LEN0KXwwLHJlPShyZT1yZStNYXRoLmltdWwoQXQsZW4pfDApK01hdGguaW11bChKdCxDdCl8MCxmZT1mZStNYXRoLmltdWwoSnQsZW4pfDAsUT1RK01hdGguaW11bChjdCxWdCl8MCxyZT0ocmU9cmUr'@;
put 'TWF0aC5pbXVsKGN0LF9uKXwwKStNYXRoLmltdWwoT3QsVnQpfDAsZmU9ZmUrTWF0aC5pbXVsKE90LF9uKXwwLFE9UStNYXRoLmltdWwoRGUsSXQpfDAscmU9KHJlPXJlK01hdGguaW11bChEZSxubil8MCkrTWF0aC5pbXVsKCRlLEl0KXwwLGZlPWZlK01hdGguaW11bCgkZSxubil8MCxRPVEr'@;
put 'TWF0aC5pbXVsKHFlLHZ0KXwwLHJlPShyZT1yZStNYXRoLmltdWwocWUsR3QpfDApK01hdGguaW11bChodCx2dCl8MCxmZT1mZStNYXRoLmltdWwoaHQsR3QpfDAsUT1RK01hdGguaW11bChPZSx6dCl8MCxyZT0ocmU9cmUrTWF0aC5pbXVsKE9lLE1uKXwwKStNYXRoLmltdWwoZXQsenQpfDAs'@;
put 'ZmU9ZmUrTWF0aC5pbXVsKGV0LE1uKXwwLFE9UStNYXRoLmltdWwoS2Usc24pfDAscmU9KHJlPXJlK01hdGguaW11bChLZSxCbil8MCkrTWF0aC5pbXVsKHdlLHNuKXwwLGZlPWZlK01hdGguaW11bCh3ZSxCbil8MCxRPVErTWF0aC5pbXVsKEhlLHF0KXwwLHJlPShyZT1yZStNYXRoLmltdWwo'@;
put 'SGUsSG4pfDApK01hdGguaW11bChRZSxxdCl8MCxmZT1mZStNYXRoLmltdWwoUWUsSG4pfDA7dmFyIHNvPShQZSsoUT1RK01hdGguaW11bChOZSxjbil8MCl8MCkrKCg4MTkxJihyZT0ocmU9cmUrTWF0aC5pbXVsKE5lLGpuKXwwKStNYXRoLmltdWwoTGUsY24pfDApKTw8MTMpfDA7UGU9KChm'@;
put 'ZT1mZStNYXRoLmltdWwoTGUsam4pfDApKyhyZT4+PjEzKXwwKSsoc28+Pj4yNil8MCxzbyY9NjcxMDg4NjMsUT1NYXRoLmltdWwob24scHQpLHJlPShyZT1NYXRoLmltdWwob24scG4pKStNYXRoLmltdWwoJG4scHQpfDAsZmU9TWF0aC5pbXVsKCRuLHBuKSxRPVErTWF0aC5pbXVsKE50LEN0'@;
put 'KXwwLHJlPShyZT1yZStNYXRoLmltdWwoTnQsZW4pfDApK01hdGguaW11bChibixDdCl8MCxmZT1mZStNYXRoLmltdWwoYm4sZW4pfDAsUT1RK01hdGguaW11bChBdCxWdCl8MCxyZT0ocmU9cmUrTWF0aC5pbXVsKEF0LF9uKXwwKStNYXRoLmltdWwoSnQsVnQpfDAsZmU9ZmUrTWF0aC5pbXVs'@;
put 'KEp0LF9uKXwwLFE9UStNYXRoLmltdWwoY3QsSXQpfDAscmU9KHJlPXJlK01hdGguaW11bChjdCxubil8MCkrTWF0aC5pbXVsKE90LEl0KXwwLGZlPWZlK01hdGguaW11bChPdCxubil8MCxRPVErTWF0aC5pbXVsKERlLHZ0KXwwLHJlPShyZT1yZStNYXRoLmltdWwoRGUsR3QpfDApK01hdGgu'@;
put 'aW11bCgkZSx2dCl8MCxmZT1mZStNYXRoLmltdWwoJGUsR3QpfDAsUT1RK01hdGguaW11bChxZSx6dCl8MCxyZT0ocmU9cmUrTWF0aC5pbXVsKHFlLE1uKXwwKStNYXRoLmltdWwoaHQsenQpfDAsZmU9ZmUrTWF0aC5pbXVsKGh0LE1uKXwwLFE9UStNYXRoLmltdWwoT2Usc24pfDAscmU9KHJl'@;
put 'PXJlK01hdGguaW11bChPZSxCbil8MCkrTWF0aC5pbXVsKGV0LHNuKXwwLGZlPWZlK01hdGguaW11bChldCxCbil8MCxRPVErTWF0aC5pbXVsKEtlLHF0KXwwLHJlPShyZT1yZStNYXRoLmltdWwoS2UsSG4pfDApK01hdGguaW11bCh3ZSxxdCl8MCxmZT1mZStNYXRoLmltdWwod2UsSG4pfDAs'@;
put 'UT1RK01hdGguaW11bChIZSxjbil8MCxyZT0ocmU9cmUrTWF0aC5pbXVsKEhlLGpuKXwwKStNYXRoLmltdWwoUWUsY24pfDAsZmU9ZmUrTWF0aC5pbXVsKFFlLGpuKXwwO3ZhciBYaT0oUGUrKFE9UStNYXRoLmltdWwoTmUsdmkpfDApfDApKygoODE5MSYocmU9KHJlPXJlK01hdGguaW11bChO'@;
put 'ZSxFcil8MCkrTWF0aC5pbXVsKExlLHZpKXwwKSk8PDEzKXwwO1BlPSgoZmU9ZmUrTWF0aC5pbXVsKExlLEVyKXwwKSsocmU+Pj4xMyl8MCkrKFhpPj4+MjYpfDAsWGkmPTY3MTA4ODYzLFE9TWF0aC5pbXVsKG9uLEN0KSxyZT0ocmU9TWF0aC5pbXVsKG9uLGVuKSkrTWF0aC5pbXVsKCRuLEN0'@;
put 'KXwwLGZlPU1hdGguaW11bCgkbixlbiksUT1RK01hdGguaW11bChOdCxWdCl8MCxyZT0ocmU9cmUrTWF0aC5pbXVsKE50LF9uKXwwKStNYXRoLmltdWwoYm4sVnQpfDAsZmU9ZmUrTWF0aC5pbXVsKGJuLF9uKXwwLFE9UStNYXRoLmltdWwoQXQsSXQpfDAscmU9KHJlPXJlK01hdGguaW11bChB'@;
put 'dCxubil8MCkrTWF0aC5pbXVsKEp0LEl0KXwwLGZlPWZlK01hdGguaW11bChKdCxubil8MCxRPVErTWF0aC5pbXVsKGN0LHZ0KXwwLHJlPShyZT1yZStNYXRoLmltdWwoY3QsR3QpfDApK01hdGguaW11bChPdCx2dCl8MCxmZT1mZStNYXRoLmltdWwoT3QsR3QpfDAsUT1RK01hdGguaW11bChE'@;
put 'ZSx6dCl8MCxyZT0ocmU9cmUrTWF0aC5pbXVsKERlLE1uKXwwKStNYXRoLmltdWwoJGUsenQpfDAsZmU9ZmUrTWF0aC5pbXVsKCRlLE1uKXwwLFE9UStNYXRoLmltdWwocWUsc24pfDAscmU9KHJlPXJlK01hdGguaW11bChxZSxCbil8MCkrTWF0aC5pbXVsKGh0LHNuKXwwLGZlPWZlK01hdGgu'@;
put 'aW11bChodCxCbil8MCxRPVErTWF0aC5pbXVsKE9lLHF0KXwwLHJlPShyZT1yZStNYXRoLmltdWwoT2UsSG4pfDApK01hdGguaW11bChldCxxdCl8MCxmZT1mZStNYXRoLmltdWwoZXQsSG4pfDAsUT1RK01hdGguaW11bChLZSxjbil8MCxyZT0ocmU9cmUrTWF0aC5pbXVsKEtlLGpuKXwwKStN'@;
put 'YXRoLmltdWwod2UsY24pfDAsZmU9ZmUrTWF0aC5pbXVsKHdlLGpuKXwwO3ZhciBwbz0oUGUrKFE9UStNYXRoLmltdWwoSGUsdmkpfDApfDApKygoODE5MSYocmU9KHJlPXJlK01hdGguaW11bChIZSxFcil8MCkrTWF0aC5pbXVsKFFlLHZpKXwwKSk8PDEzKXwwO1BlPSgoZmU9ZmUrTWF0aC5p'@;
put 'bXVsKFFlLEVyKXwwKSsocmU+Pj4xMyl8MCkrKHBvPj4+MjYpfDAscG8mPTY3MTA4ODYzLFE9TWF0aC5pbXVsKG9uLFZ0KSxyZT0ocmU9TWF0aC5pbXVsKG9uLF9uKSkrTWF0aC5pbXVsKCRuLFZ0KXwwLGZlPU1hdGguaW11bCgkbixfbiksUT1RK01hdGguaW11bChOdCxJdCl8MCxyZT0ocmU9'@;
put 'cmUrTWF0aC5pbXVsKE50LG5uKXwwKStNYXRoLmltdWwoYm4sSXQpfDAsZmU9ZmUrTWF0aC5pbXVsKGJuLG5uKXwwLFE9UStNYXRoLmltdWwoQXQsdnQpfDAscmU9KHJlPXJlK01hdGguaW11bChBdCxHdCl8MCkrTWF0aC5pbXVsKEp0LHZ0KXwwLGZlPWZlK01hdGguaW11bChKdCxHdCl8MCxR'@;
put 'PVErTWF0aC5pbXVsKGN0LHp0KXwwLHJlPShyZT1yZStNYXRoLmltdWwoY3QsTW4pfDApK01hdGguaW11bChPdCx6dCl8MCxmZT1mZStNYXRoLmltdWwoT3QsTW4pfDAsUT1RK01hdGguaW11bChEZSxzbil8MCxyZT0ocmU9cmUrTWF0aC5pbXVsKERlLEJuKXwwKStNYXRoLmltdWwoJGUsc24p'@;
put 'fDAsZmU9ZmUrTWF0aC5pbXVsKCRlLEJuKXwwLFE9UStNYXRoLmltdWwocWUscXQpfDAscmU9KHJlPXJlK01hdGguaW11bChxZSxIbil8MCkrTWF0aC5pbXVsKGh0LHF0KXwwLGZlPWZlK01hdGguaW11bChodCxIbil8MCxRPVErTWF0aC5pbXVsKE9lLGNuKXwwLHJlPShyZT1yZStNYXRoLmlt'@;
put 'dWwoT2Usam4pfDApK01hdGguaW11bChldCxjbil8MCxmZT1mZStNYXRoLmltdWwoZXQsam4pfDA7dmFyIF9yPShQZSsoUT1RK01hdGguaW11bChLZSx2aSl8MCl8MCkrKCg4MTkxJihyZT0ocmU9cmUrTWF0aC5pbXVsKEtlLEVyKXwwKStNYXRoLmltdWwod2UsdmkpfDApKTw8MTMpfDA7UGU9'@;
put 'KChmZT1mZStNYXRoLmltdWwod2UsRXIpfDApKyhyZT4+PjEzKXwwKSsoX3I+Pj4yNil8MCxfciY9NjcxMDg4NjMsUT1NYXRoLmltdWwob24sSXQpLHJlPShyZT1NYXRoLmltdWwob24sbm4pKStNYXRoLmltdWwoJG4sSXQpfDAsZmU9TWF0aC5pbXVsKCRuLG5uKSxRPVErTWF0aC5pbXVsKE50'@;
put 'LHZ0KXwwLHJlPShyZT1yZStNYXRoLmltdWwoTnQsR3QpfDApK01hdGguaW11bChibix2dCl8MCxmZT1mZStNYXRoLmltdWwoYm4sR3QpfDAsUT1RK01hdGguaW11bChBdCx6dCl8MCxyZT0ocmU9cmUrTWF0aC5pbXVsKEF0LE1uKXwwKStNYXRoLmltdWwoSnQsenQpfDAsZmU9ZmUrTWF0aC5p'@;
put 'bXVsKEp0LE1uKXwwLFE9UStNYXRoLmltdWwoY3Qsc24pfDAscmU9KHJlPXJlK01hdGguaW11bChjdCxCbil8MCkrTWF0aC5pbXVsKE90LHNuKXwwLGZlPWZlK01hdGguaW11bChPdCxCbil8MCxRPVErTWF0aC5pbXVsKERlLHF0KXwwLHJlPShyZT1yZStNYXRoLmltdWwoRGUsSG4pfDApK01h'@;
put 'dGguaW11bCgkZSxxdCl8MCxmZT1mZStNYXRoLmltdWwoJGUsSG4pfDAsUT1RK01hdGguaW11bChxZSxjbil8MCxyZT0ocmU9cmUrTWF0aC5pbXVsKHFlLGpuKXwwKStNYXRoLmltdWwoaHQsY24pfDAsZmU9ZmUrTWF0aC5pbXVsKGh0LGpuKXwwO3ZhciBGaT0oUGUrKFE9UStNYXRoLmltdWwo'@;
put 'T2UsdmkpfDApfDApKygoODE5MSYocmU9KHJlPXJlK01hdGguaW11bChPZSxFcil8MCkrTWF0aC5pbXVsKGV0LHZpKXwwKSk8PDEzKXwwO1BlPSgoZmU9ZmUrTWF0aC5pbXVsKGV0LEVyKXwwKSsocmU+Pj4xMyl8MCkrKEZpPj4+MjYpfDAsRmkmPTY3MTA4ODYzLFE9TWF0aC5pbXVsKG9uLHZ0'@;
put 'KSxyZT0ocmU9TWF0aC5pbXVsKG9uLEd0KSkrTWF0aC5pbXVsKCRuLHZ0KXwwLGZlPU1hdGguaW11bCgkbixHdCksUT1RK01hdGguaW11bChOdCx6dCl8MCxyZT0ocmU9cmUrTWF0aC5pbXVsKE50LE1uKXwwKStNYXRoLmltdWwoYm4senQpfDAsZmU9ZmUrTWF0aC5pbXVsKGJuLE1uKXwwLFE9'@;
put 'UStNYXRoLmltdWwoQXQsc24pfDAscmU9KHJlPXJlK01hdGguaW11bChBdCxCbil8MCkrTWF0aC5pbXVsKEp0LHNuKXwwLGZlPWZlK01hdGguaW11bChKdCxCbil8MCxRPVErTWF0aC5pbXVsKGN0LHF0KXwwLHJlPShyZT1yZStNYXRoLmltdWwoY3QsSG4pfDApK01hdGguaW11bChPdCxxdCl8'@;
put 'MCxmZT1mZStNYXRoLmltdWwoT3QsSG4pfDAsUT1RK01hdGguaW11bChEZSxjbil8MCxyZT0ocmU9cmUrTWF0aC5pbXVsKERlLGpuKXwwKStNYXRoLmltdWwoJGUsY24pfDAsZmU9ZmUrTWF0aC5pbXVsKCRlLGpuKXwwO3ZhciBIbz0oUGUrKFE9UStNYXRoLmltdWwocWUsdmkpfDApfDApKygo'@;
put 'ODE5MSYocmU9KHJlPXJlK01hdGguaW11bChxZSxFcil8MCkrTWF0aC5pbXVsKGh0LHZpKXwwKSk8PDEzKXwwO1BlPSgoZmU9ZmUrTWF0aC5pbXVsKGh0LEVyKXwwKSsocmU+Pj4xMyl8MCkrKEhvPj4+MjYpfDAsSG8mPTY3MTA4ODYzLFE9TWF0aC5pbXVsKG9uLHp0KSxyZT0ocmU9TWF0aC5p'@;
put 'bXVsKG9uLE1uKSkrTWF0aC5pbXVsKCRuLHp0KXwwLGZlPU1hdGguaW11bCgkbixNbiksUT1RK01hdGguaW11bChOdCxzbil8MCxyZT0ocmU9cmUrTWF0aC5pbXVsKE50LEJuKXwwKStNYXRoLmltdWwoYm4sc24pfDAsZmU9ZmUrTWF0aC5pbXVsKGJuLEJuKXwwLFE9UStNYXRoLmltdWwoQXQs'@;
put 'cXQpfDAscmU9KHJlPXJlK01hdGguaW11bChBdCxIbil8MCkrTWF0aC5pbXVsKEp0LHF0KXwwLGZlPWZlK01hdGguaW11bChKdCxIbil8MCxRPVErTWF0aC5pbXVsKGN0LGNuKXwwLHJlPShyZT1yZStNYXRoLmltdWwoY3Qsam4pfDApK01hdGguaW11bChPdCxjbil8MCxmZT1mZStNYXRoLmlt'@;
put 'dWwoT3Qsam4pfDA7dmFyIGdhPShQZSsoUT1RK01hdGguaW11bChEZSx2aSl8MCl8MCkrKCg4MTkxJihyZT0ocmU9cmUrTWF0aC5pbXVsKERlLEVyKXwwKStNYXRoLmltdWwoJGUsdmkpfDApKTw8MTMpfDA7UGU9KChmZT1mZStNYXRoLmltdWwoJGUsRXIpfDApKyhyZT4+PjEzKXwwKSsoZ2E+'@;
put 'Pj4yNil8MCxnYSY9NjcxMDg4NjMsUT1NYXRoLmltdWwob24sc24pLHJlPShyZT1NYXRoLmltdWwob24sQm4pKStNYXRoLmltdWwoJG4sc24pfDAsZmU9TWF0aC5pbXVsKCRuLEJuKSxRPVErTWF0aC5pbXVsKE50LHF0KXwwLHJlPShyZT1yZStNYXRoLmltdWwoTnQsSG4pfDApK01hdGguaW11'@;
put 'bChibixxdCl8MCxmZT1mZStNYXRoLmltdWwoYm4sSG4pfDAsUT1RK01hdGguaW11bChBdCxjbil8MCxyZT0ocmU9cmUrTWF0aC5pbXVsKEF0LGpuKXwwKStNYXRoLmltdWwoSnQsY24pfDAsZmU9ZmUrTWF0aC5pbXVsKEp0LGpuKXwwO3ZhciBsYT0oUGUrKFE9UStNYXRoLmltdWwoY3Qsdmkp'@;
put 'fDApfDApKygoODE5MSYocmU9KHJlPXJlK01hdGguaW11bChjdCxFcil8MCkrTWF0aC5pbXVsKE90LHZpKXwwKSk8PDEzKXwwO1BlPSgoZmU9ZmUrTWF0aC5pbXVsKE90LEVyKXwwKSsocmU+Pj4xMyl8MCkrKGxhPj4+MjYpfDAsbGEmPTY3MTA4ODYzLFE9TWF0aC5pbXVsKG9uLHF0KSxyZT0o'@;
put 'cmU9TWF0aC5pbXVsKG9uLEhuKSkrTWF0aC5pbXVsKCRuLHF0KXwwLGZlPU1hdGguaW11bCgkbixIbiksUT1RK01hdGguaW11bChOdCxjbil8MCxyZT0ocmU9cmUrTWF0aC5pbXVsKE50LGpuKXwwKStNYXRoLmltdWwoYm4sY24pfDAsZmU9ZmUrTWF0aC5pbXVsKGJuLGpuKXwwO3ZhciBWdT0o'@;
put 'UGUrKFE9UStNYXRoLmltdWwoQXQsdmkpfDApfDApKygoODE5MSYocmU9KHJlPXJlK01hdGguaW11bChBdCxFcil8MCkrTWF0aC5pbXVsKEp0LHZpKXwwKSk8PDEzKXwwO1BlPSgoZmU9ZmUrTWF0aC5pbXVsKEp0LEVyKXwwKSsocmU+Pj4xMyl8MCkrKFZ1Pj4+MjYpfDAsVnUmPTY3MTA4ODYz'@;
put 'LFE9TWF0aC5pbXVsKG9uLGNuKSxyZT0ocmU9TWF0aC5pbXVsKG9uLGpuKSkrTWF0aC5pbXVsKCRuLGNuKXwwLGZlPU1hdGguaW11bCgkbixqbik7dmFyIGdzPShQZSsoUT1RK01hdGguaW11bChOdCx2aSl8MCl8MCkrKCg4MTkxJihyZT0ocmU9cmUrTWF0aC5pbXVsKE50LEVyKXwwKStNYXRo'@;
put 'LmltdWwoYm4sdmkpfDApKTw8MTMpfDA7UGU9KChmZT1mZStNYXRoLmltdWwoYm4sRXIpfDApKyhyZT4+PjEzKXwwKSsoZ3M+Pj4yNil8MCxncyY9NjcxMDg4NjM7dmFyIEJ1PShQZSsoUT1NYXRoLmltdWwob24sdmkpKXwwKSsoKDgxOTEmKHJlPShyZT1NYXRoLmltdWwob24sRXIpKStNYXRo'@;
put 'LmltdWwoJG4sdmkpfDApKTw8MTMpfDA7cmV0dXJuIFBlPSgoZmU9TWF0aC5pbXVsKCRuLEVyKSkrKHJlPj4+MTMpfDApKyhCdT4+PjI2KXwwLEJ1Jj02NzEwODg2MyxUZVswXT1ZaSxUZVsxXT1KcixUZVsyXT1hbyxUZVszXT1CcixUZVs0XT1KaSxUZVs1XT10byxUZVs2XT1jbyxUZVs3XT1s'@;
put 'byxUZVs4XT1zbyxUZVs5XT1YaSxUZVsxMF09cG8sVGVbMTFdPV9yLFRlWzEyXT1GaSxUZVsxM109SG8sVGVbMTRdPWdhLFRlWzE1XT1sYSxUZVsxNl09VnUsVGVbMTddPWdzLFRlWzE4XT1CdSwwIT09UGUmJihUZVsxOV09UGUsUy5sZW5ndGgrKyksU307ZnVuY3Rpb24gZGUoeSxwLFMpe1Mu'@;
put 'bmVnYXRpdmU9cC5uZWdhdGl2ZV55Lm5lZ2F0aXZlLFMubGVuZ3RoPXkubGVuZ3RoK3AubGVuZ3RoO2Zvcih2YXIgUT0wLHJlPTAsZmU9MDtmZTxTLmxlbmd0aC0xO2ZlKyspe3ZhciBtZT1yZTtyZT0wO2Zvcih2YXIga2U9NjcxMDg4NjMmUSxUZT1NYXRoLm1pbihmZSxwLmxlbmd0aC0xKSxQ'@;
put 'ZT1NYXRoLm1heCgwLGZlLXkubGVuZ3RoKzEpO1BlPD1UZTtQZSsrKXt2YXIgTmU9KDB8eS53b3Jkc1tmZS1QZV0pKigwfHAud29yZHNbUGVdKSxMZT02NzEwODg2MyZOZTtrZT02NzEwODg2MyYoTGU9TGUra2V8MCkscmUrPShtZT0obWU9bWUrKE5lLzY3MTA4ODY0fDApfDApKyhMZT4+PjI2'@;
put 'KXwwKT4+PjI2LG1lJj02NzEwODg2M31TLndvcmRzW2ZlXT1rZSxRPW1lLG1lPXJlfXJldHVybiAwIT09UT9TLndvcmRzW2ZlXT1ROlMubGVuZ3RoLS0sUy5fc3RyaXAoKX1mdW5jdGlvbiB1ZSh5LHAsUyl7cmV0dXJuIGRlKHkscCxTKX1mdW5jdGlvbiBjZSh5LHApe3RoaXMueD15LHRoaXMu'@;
put 'eT1wfU1hdGguaW11bHx8KGxlPWllKSxFLnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbih5LHApe3ZhciBTPXRoaXMubGVuZ3RoK3kubGVuZ3RoO3JldHVybiAxMD09PXRoaXMubGVuZ3RoJiYxMD09PXkubGVuZ3RoP2xlKHRoaXMseSxwKTpTPDYzP2llKHRoaXMseSxwKTpTPDEwMjQ/ZGUodGhp'@;
put 'cyx5LHApOnVlKHRoaXMseSxwKX0sY2UucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oeSl7Zm9yKHZhciBwPW5ldyBBcnJheSh5KSxTPUUucHJvdG90eXBlLl9jb3VudEJpdHMoeSktMSxRPTA7UTx5O1ErKylwW1FdPXRoaXMucmV2QmluKFEsUyx5KTtyZXR1cm4gcH0sY2UucHJvdG90eXBl'@;
put 'LnJldkJpbj1mdW5jdGlvbih5LHAsUyl7aWYoMD09PXl8fHk9PT1TLTEpcmV0dXJuIHk7Zm9yKHZhciBRPTAscmU9MDtyZTxwO3JlKyspUXw9KDEmeSk8PHAtcmUtMSx5Pj49MTtyZXR1cm4gUX0sY2UucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oeSxwLFMsUSxyZSxmZSl7Zm9yKHZhciBt'@;
put 'ZT0wO21lPGZlO21lKyspUVttZV09cFt5W21lXV0scmVbbWVdPVNbeVttZV1dfSxjZS5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHkscCxTLFEscmUsZmUpe3RoaXMucGVybXV0ZShmZSx5LHAsUyxRLHJlKTtmb3IodmFyIG1lPTE7bWU8cmU7bWU8PD0xKWZvcih2YXIga2U9bWU8PDEs'@;
put 'VGU9TWF0aC5jb3MoMipNYXRoLlBJL2tlKSxQZT1NYXRoLnNpbigyKk1hdGguUEkva2UpLEZlPTA7RmU8cmU7RmUrPWtlKWZvcih2YXIgTmU9VGUsTGU9UGUsQmU9MDtCZTxtZTtCZSsrKXt2YXIgSGU9U1tGZStCZV0sUWU9UVtGZStCZV0sbXQ9U1tGZStCZSttZV0sS2U9UVtGZStCZSttZV0s'@;
put 'd2U9TmUqbXQtTGUqS2U7S2U9TmUqS2UrTGUqbXQsU1tGZStCZV09SGUrKG10PXdlKSxRW0ZlK0JlXT1RZStLZSxTW0ZlK0JlK21lXT1IZS1tdCxRW0ZlK0JlK21lXT1RZS1LZSxCZSE9PWtlJiYod2U9VGUqTmUtUGUqTGUsTGU9VGUqTGUrUGUqTmUsTmU9d2UpfX0sY2UucHJvdG90eXBlLmd1'@;
put 'ZXNzTGVuMTNiPWZ1bmN0aW9uKHkscCl7dmFyIFM9MXxNYXRoLm1heChwLHkpLFE9MSZTLHJlPTA7Zm9yKFM9Uy8yfDA7UztTPj4+PTEpcmUrKztyZXR1cm4gMTw8cmUrMStRfSxjZS5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKHkscCxTKXtpZighKFM8PTEpKWZvcih2YXIgUT0wO1E8'@;
put 'Uy8yO1ErKyl7dmFyIHJlPXlbUV07eVtRXT15W1MtUS0xXSx5W1MtUS0xXT1yZSxyZT1wW1FdLHBbUV09LXBbUy1RLTFdLHBbUy1RLTFdPS1yZX19LGNlLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oeSxwKXtmb3IodmFyIFM9MCxRPTA7UTxwLzI7USsrKXt2YXIgcmU9ODE5MipN'@;
put 'YXRoLnJvdW5kKHlbMipRKzFdL3ApK01hdGgucm91bmQoeVsyKlFdL3ApK1M7eVtRXT02NzEwODg2MyZyZSxTPXJlPDY3MTA4ODY0PzA6cmUvNjcxMDg4NjR8MH1yZXR1cm4geX0sY2UucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oeSxwLFMsUSl7Zm9yKHZhciByZT0wLGZlPTA7ZmU8'@;
put 'cDtmZSsrKVNbMipmZV09ODE5MSYocmUrPTB8eVtmZV0pLFNbMipmZSsxXT04MTkxJihyZT4+Pj0xMykscmU+Pj49MTM7Zm9yKGZlPTIqcDtmZTxROysrZmUpU1tmZV09MDtJKDA9PT1yZSksSSgwPT0oLTgxOTImcmUpKX0sY2UucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oeSl7Zm9yKHZhciBw'@;
put 'PW5ldyBBcnJheSh5KSxTPTA7Uzx5O1MrKylwW1NdPTA7cmV0dXJuIHB9LGNlLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKHkscCxTKXt2YXIgUT0yKnRoaXMuZ3Vlc3NMZW4xM2IoeS5sZW5ndGgscC5sZW5ndGgpLHJlPXRoaXMubWFrZVJCVChRKSxmZT10aGlzLnN0dWIoUSksbWU9bmV3IEFy'@;
put 'cmF5KFEpLGtlPW5ldyBBcnJheShRKSxUZT1uZXcgQXJyYXkoUSksUGU9bmV3IEFycmF5KFEpLEZlPW5ldyBBcnJheShRKSxOZT1uZXcgQXJyYXkoUSksTGU9Uy53b3JkcztMZS5sZW5ndGg9USx0aGlzLmNvbnZlcnQxM2IoeS53b3Jkcyx5Lmxlbmd0aCxtZSxRKSx0aGlzLmNvbnZlcnQxM2Io'@;
put 'cC53b3JkcyxwLmxlbmd0aCxQZSxRKSx0aGlzLnRyYW5zZm9ybShtZSxmZSxrZSxUZSxRLHJlKSx0aGlzLnRyYW5zZm9ybShQZSxmZSxGZSxOZSxRLHJlKTtmb3IodmFyIEJlPTA7QmU8UTtCZSsrKXt2YXIgSGU9a2VbQmVdKkZlW0JlXS1UZVtCZV0qTmVbQmVdO1RlW0JlXT1rZVtCZV0qTmVb'@;
put 'QmVdK1RlW0JlXSpGZVtCZV0sa2VbQmVdPUhlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShrZSxUZSxRKSx0aGlzLnRyYW5zZm9ybShrZSxUZSxMZSxmZSxRLHJlKSx0aGlzLmNvbmp1Z2F0ZShMZSxmZSxRKSx0aGlzLm5vcm1hbGl6ZTEzYihMZSxRKSxTLm5lZ2F0aXZlPXkubmVnYXRpdmVecC5u'@;
put 'ZWdhdGl2ZSxTLmxlbmd0aD15Lmxlbmd0aCtwLmxlbmd0aCxTLl9zdHJpcCgpfSxFLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oeSl7dmFyIHA9bmV3IEUobnVsbCk7cmV0dXJuIHAud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3kubGVuZ3RoKSx0aGlzLm11bFRvKHkscCl9LEUucHJvdG90'@;
put 'eXBlLm11bGY9ZnVuY3Rpb24oeSl7dmFyIHA9bmV3IEUobnVsbCk7cmV0dXJuIHAud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3kubGVuZ3RoKSx1ZSh0aGlzLHkscCl9LEUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyh5LHRoaXMpfSxF'@;
put 'LnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbih5KXt2YXIgcD15PDA7cCYmKHk9LXkpLEkoIm51bWJlciI9PXR5cGVvZiB5KSxJKHk8NjcxMDg4NjQpO2Zvcih2YXIgUz0wLFE9MDtRPHRoaXMubGVuZ3RoO1ErKyl7dmFyIHJlPSgwfHRoaXMud29yZHNbUV0pKnksZmU9KDY3MTA4ODYzJnJlKSso'@;
put 'NjcxMDg4NjMmUyk7Uz4+PTI2LFMrPXJlLzY3MTA4ODY0fDAsUys9ZmU+Pj4yNix0aGlzLndvcmRzW1FdPTY3MTA4ODYzJmZlfXJldHVybiAwIT09UyYmKHRoaXMud29yZHNbUV09Uyx0aGlzLmxlbmd0aCsrKSxwP3RoaXMuaW5lZygpOnRoaXN9LEUucHJvdG90eXBlLm11bG49ZnVuY3Rpb24o'@;
put 'eSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbih5KX0sRS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxFLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSxFLnByb3RvdHlwZS5wb3c9ZnVuY3Rp'@;
put 'b24oeSl7dmFyIHA9ZnVuY3Rpb24oZmUpe2Zvcih2YXIgbWU9bmV3IEFycmF5KGZlLmJpdExlbmd0aCgpKSxrZT0wO2tlPG1lLmxlbmd0aDtrZSsrKW1lW2tlXT1mZS53b3Jkc1trZS8yNnwwXT4+PmtlJTI2JjE7cmV0dXJuIG1lfSh5KTtpZigwPT09cC5sZW5ndGgpcmV0dXJuIG5ldyBFKDEp'@;
put 'O2Zvcih2YXIgUz10aGlzLFE9MDtRPHAubGVuZ3RoJiYwPT09cFtRXTtRKyssUz1TLnNxcigpKTtpZigrK1E8cC5sZW5ndGgpZm9yKHZhciByZT1TLnNxcigpO1E8cC5sZW5ndGg7USsrLHJlPXJlLnNxcigpKTAhPT1wW1FdJiYoUz1TLm11bChyZSkpO3JldHVybiBTfSxFLnByb3RvdHlwZS5p'@;
put 'dXNobG49ZnVuY3Rpb24oeSl7SSgibnVtYmVyIj09dHlwZW9mIHkmJnk+PTApO3ZhciBwLFM9eSUyNixRPSh5LVMpLzI2LHJlPTY3MTA4ODYzPj4+MjYtUzw8MjYtUztpZigwIT09Uyl7dmFyIGZlPTA7Zm9yKHA9MDtwPHRoaXMubGVuZ3RoO3ArKyl7dmFyIG1lPXRoaXMud29yZHNbcF0mcmU7'@;
put 'dGhpcy53b3Jkc1twXT0oMHx0aGlzLndvcmRzW3BdKS1tZTw8U3xmZSxmZT1tZT4+PjI2LVN9ZmUmJih0aGlzLndvcmRzW3BdPWZlLHRoaXMubGVuZ3RoKyspfWlmKDAhPT1RKXtmb3IocD10aGlzLmxlbmd0aC0xO3A+PTA7cC0tKXRoaXMud29yZHNbcCtRXT10aGlzLndvcmRzW3BdO2Zvcihw'@;
put 'PTA7cDxRO3ArKyl0aGlzLndvcmRzW3BdPTA7dGhpcy5sZW5ndGgrPVF9cmV0dXJuIHRoaXMuX3N0cmlwKCl9LEUucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKHkpe3JldHVybiBJKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbih5KX0sRS5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9u'@;
put 'KHkscCxTKXt2YXIgUTtJKCJudW1iZXIiPT10eXBlb2YgeSYmeT49MCksUT1wPyhwLXAlMjYpLzI2OjA7dmFyIHJlPXklMjYsZmU9TWF0aC5taW4oKHktcmUpLzI2LHRoaXMubGVuZ3RoKSxtZT02NzEwODg2M142NzEwODg2Mz4+PnJlPDxyZSxrZT1TO2lmKFEtPWZlLFE9TWF0aC5tYXgoMCxR'@;
put 'KSxrZSl7Zm9yKHZhciBUZT0wO1RlPGZlO1RlKyspa2Uud29yZHNbVGVdPXRoaXMud29yZHNbVGVdO2tlLmxlbmd0aD1mZX1pZigwIT09ZmUpaWYodGhpcy5sZW5ndGg+ZmUpZm9yKHRoaXMubGVuZ3RoLT1mZSxUZT0wO1RlPHRoaXMubGVuZ3RoO1RlKyspdGhpcy53b3Jkc1tUZV09dGhpcy53'@;
put 'b3Jkc1tUZStmZV07ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgUGU9MDtmb3IoVGU9dGhpcy5sZW5ndGgtMTtUZT49MCYmKDAhPT1QZXx8VGU+PVEpO1RlLS0pe3ZhciBGZT0wfHRoaXMud29yZHNbVGVdO3RoaXMud29yZHNbVGVdPVBlPDwyNi1yZXxGZT4+PnJlLFBl'@;
put 'PUZlJm1lfXJldHVybiBrZSYmMCE9PVBlJiYoa2Uud29yZHNba2UubGVuZ3RoKytdPVBlKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5fc3RyaXAoKX0sRS5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oeSxwLFMpe3JldHVybiBJKDA9PT10'@;
put 'aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybih5LHAsUyl9LEUucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbih5KX0sRS5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oeSl9LEUucHJvdG90eXBl'@;
put 'LnNocm49ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybih5KX0sRS5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oeSl9LEUucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKHkpe0koIm51bWJlciI9PXR5cGVvZiB5JiZ5Pj0w'@;
put 'KTt2YXIgcD15JTI2LFM9KHktcCkvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9U3x8ISh0aGlzLndvcmRzW1NdJjE8PHApKX0sRS5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKHkpe0koIm51bWJlciI9PXR5cGVvZiB5JiZ5Pj0wKTt2YXIgcD15JTI2LFM9KHktcCkvMjY7cmV0dXJuIEkoMD09'@;
put 'PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD1TP3RoaXM6KDAhPT1wJiZTKyssdGhpcy5sZW5ndGg9TWF0aC5taW4oUyx0aGlzLmxlbmd0aCksMCE9PXAmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEw'@;
put 'ODg2M142NzEwODg2Mz4+PnA8PHApLHRoaXMuX3N0cmlwKCkpfSxFLnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbih5KX0sRS5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oeSl7cmV0dXJuIEkoIm51bWJlciI9PXR5cGVvZiB5KSxJKHk8Njcx'@;
put 'MDg4NjQpLHk8MD90aGlzLmlzdWJuKC15KTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPD15Pyh0aGlzLndvcmRzWzBdPXktKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3Vi'@;
put 'bih5KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4oeSl9LEUucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbih5KXt0aGlzLndvcmRzWzBdKz15O2Zvcih2YXIgcD0wO3A8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbcF0+PTY3MTA4ODY0O3ArKyl0aGlzLndvcmRzW3BdLT02NzEw'@;
put 'ODg2NCxwPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW3ArMV09MTp0aGlzLndvcmRzW3ArMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgscCsxKSx0aGlzfSxFLnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbih5KXtpZihJKCJudW1iZXIiPT10eXBlb2YgeSks'@;
put 'SSh5PDY3MTA4ODY0KSx5PDApcmV0dXJuIHRoaXMuaWFkZG4oLXkpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbih5KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT15LDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jk'@;
put 'c1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBwPTA7cDx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1twXTwwO3ArKyl0aGlzLndvcmRzW3BdKz02NzEwODg2NCx0aGlzLndvcmRzW3ArMV0tPTE7cmV0dXJuIHRoaXMuX3N0cmlw'@;
put 'KCl9LEUucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbih5KX0sRS5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKHkpfSxFLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVn'@;
put 'YXRpdmU9MCx0aGlzfSxFLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sRS5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKHkscCxTKXt2YXIgUSxyZTt0aGlzLl9leHBhbmQoeS5sZW5ndGgrUyk7dmFyIG1lPTA7Zm9yKFE9MDtRPHku'@;
put 'bGVuZ3RoO1ErKyl7cmU9KDB8dGhpcy53b3Jkc1tRK1NdKSttZTt2YXIga2U9KDB8eS53b3Jkc1tRXSkqcDttZT0oKHJlLT02NzEwODg2MyZrZSk+PjI2KS0oa2UvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tRK1NdPTY3MTA4ODYzJnJlfWZvcig7UTx0aGlzLmxlbmd0aC1TO1ErKyltZT0ocmU9'@;
put 'KDB8dGhpcy53b3Jkc1tRK1NdKSttZSk+PjI2LHRoaXMud29yZHNbUStTXT02NzEwODg2MyZyZTtpZigwPT09bWUpcmV0dXJuIHRoaXMuX3N0cmlwKCk7Zm9yKEkoLTE9PT1tZSksbWU9MCxRPTA7UTx0aGlzLmxlbmd0aDtRKyspbWU9KHJlPS0oMHx0aGlzLndvcmRzW1FdKSttZSk+PjI2LHRo'@;
put 'aXMud29yZHNbUV09NjcxMDg4NjMmcmU7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLl9zdHJpcCgpfSxFLnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbih5LHApe3ZhciBTLFE9dGhpcy5jbG9uZSgpLHJlPXksZmU9MHxyZS53b3Jkc1tyZS5sZW5ndGgtMV07MCE9KFM9MjYtdGhpcy5f'@;
put 'Y291bnRCaXRzKGZlKSkmJihyZT1yZS51c2hsbihTKSxRLml1c2hsbihTKSxmZT0wfHJlLndvcmRzW3JlLmxlbmd0aC0xXSk7dmFyIG1lLGtlPVEubGVuZ3RoLXJlLmxlbmd0aDtpZigibW9kIiE9PXApeyhtZT1uZXcgRShudWxsKSkubGVuZ3RoPWtlKzEsbWUud29yZHM9bmV3IEFycmF5KG1l'@;
put 'Lmxlbmd0aCk7Zm9yKHZhciBUZT0wO1RlPG1lLmxlbmd0aDtUZSsrKW1lLndvcmRzW1RlXT0wfXZhciBQZT1RLmNsb25lKCkuX2lzaGxuc3VibXVsKHJlLDEsa2UpOzA9PT1QZS5uZWdhdGl2ZSYmKFE9UGUsbWUmJihtZS53b3Jkc1trZV09MSkpO2Zvcih2YXIgRmU9a2UtMTtGZT49MDtGZS0t'@;
put 'KXt2YXIgTmU9NjcxMDg4NjQqKDB8US53b3Jkc1tyZS5sZW5ndGgrRmVdKSsoMHxRLndvcmRzW3JlLmxlbmd0aCtGZS0xXSk7Zm9yKE5lPU1hdGgubWluKE5lL2ZlfDAsNjcxMDg4NjMpLFEuX2lzaGxuc3VibXVsKHJlLE5lLEZlKTswIT09US5uZWdhdGl2ZTspTmUtLSxRLm5lZ2F0aXZlPTAs'@;
put 'US5faXNobG5zdWJtdWwocmUsMSxGZSksUS5pc1plcm8oKXx8KFEubmVnYXRpdmVePTEpO21lJiYobWUud29yZHNbRmVdPU5lKX1yZXR1cm4gbWUmJm1lLl9zdHJpcCgpLFEuX3N0cmlwKCksImRpdiIhPT1wJiYwIT09UyYmUS5pdXNocm4oUykse2RpdjptZXx8bnVsbCxtb2Q6UX19LEUucHJv'@;
put 'dG90eXBlLmRpdm1vZD1mdW5jdGlvbih5LHAsUyl7cmV0dXJuIEkoIXkuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgRSgwKSxtb2Q6bmV3IEUoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09eS5uZWdhdGl2ZT8oZmU9dGhpcy5uZWcoKS5kaXZtb2QoeSxwKSwibW9kIiE9PXAm'@;
put 'JihRPWZlLmRpdi5uZWcoKSksImRpdiIhPT1wJiYocmU9ZmUubW9kLm5lZygpLFMmJjAhPT1yZS5uZWdhdGl2ZSYmcmUuaWFkZCh5KSkse2RpdjpRLG1vZDpyZX0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09eS5uZWdhdGl2ZT8oZmU9dGhpcy5kaXZtb2QoeS5uZWcoKSxwKSwibW9kIiE9PXAm'@;
put 'JihRPWZlLmRpdi5uZWcoKSkse2RpdjpRLG1vZDpmZS5tb2R9KTp0aGlzLm5lZ2F0aXZlJnkubmVnYXRpdmU/KGZlPXRoaXMubmVnKCkuZGl2bW9kKHkubmVnKCkscCksImRpdiIhPT1wJiYocmU9ZmUubW9kLm5lZygpLFMmJjAhPT1yZS5uZWdhdGl2ZSYmcmUuaXN1Yih5KSkse2RpdjpmZS5k'@;
put 'aXYsbW9kOnJlfSk6eS5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKHkpPDA/e2RpdjpuZXcgRSgwKSxtb2Q6dGhpc306MT09PXkubGVuZ3RoPyJkaXYiPT09cD97ZGl2OnRoaXMuZGl2bih5LndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1wP3tkaXY6bnVsbCxtb2Q6bmV3IEUodGhp'@;
put 'cy5tb2Rybih5LndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKHkud29yZHNbMF0pLG1vZDpuZXcgRSh0aGlzLm1vZHJuKHkud29yZHNbMF0pKX06dGhpcy5fd29yZERpdih5LHApO3ZhciBRLHJlLGZlfSxFLnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMuZGl2bW9kKHks'@;
put 'ImRpdiIsITEpLmRpdn0sRS5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLmRpdm1vZCh5LCJtb2QiLCExKS5tb2R9LEUucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMuZGl2bW9kKHksIm1vZCIsITApLm1vZH0sRS5wcm90b3R5cGUuZGl2Um91bmQ9'@;
put 'ZnVuY3Rpb24oeSl7dmFyIHA9dGhpcy5kaXZtb2QoeSk7aWYocC5tb2QuaXNaZXJvKCkpcmV0dXJuIHAuZGl2O3ZhciBTPTAhPT1wLmRpdi5uZWdhdGl2ZT9wLm1vZC5pc3ViKHkpOnAubW9kLFE9eS51c2hybigxKSxyZT15LmFuZGxuKDEpLGZlPVMuY21wKFEpO3JldHVybiBmZTwwfHwxPT09'@;
put 'cmUmJjA9PT1mZT9wLmRpdjowIT09cC5kaXYubmVnYXRpdmU/cC5kaXYuaXN1Ym4oMSk6cC5kaXYuaWFkZG4oMSl9LEUucHJvdG90eXBlLm1vZHJuPWZ1bmN0aW9uKHkpe3ZhciBwPXk8MDtwJiYoeT0teSksSSh5PD02NzEwODg2Myk7Zm9yKHZhciBTPTY3MTA4ODY0JXksUT0wLHJlPXRoaXMu'@;
put 'bGVuZ3RoLTE7cmU+PTA7cmUtLSlRPShTKlErKDB8dGhpcy53b3Jkc1tyZV0pKSV5O3JldHVybiBwPy1ROlF9LEUucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMubW9kcm4oeSl9LEUucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKHkpe3ZhciBwPXk8MDtwJiYoeT0teSks'@;
put 'SSh5PD02NzEwODg2Myk7Zm9yKHZhciBTPTAsUT10aGlzLmxlbmd0aC0xO1E+PTA7US0tKXt2YXIgcmU9KDB8dGhpcy53b3Jkc1tRXSkrNjcxMDg4NjQqUzt0aGlzLndvcmRzW1FdPXJlL3l8MCxTPXJlJXl9cmV0dXJuIHRoaXMuX3N0cmlwKCkscD90aGlzLmluZWcoKTp0aGlzfSxFLnByb3Rv'@;
put 'dHlwZS5kaXZuPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4oeSl9LEUucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24oeSl7SSgwPT09eS5uZWdhdGl2ZSksSSgheS5pc1plcm8oKSk7dmFyIHA9dGhpcyxTPXkuY2xvbmUoKTtwPTAhPT1wLm5lZ2F0aXZlP3AudW1vZCh5KTpw'@;
put 'LmNsb25lKCk7Zm9yKHZhciBRPW5ldyBFKDEpLHJlPW5ldyBFKDApLGZlPW5ldyBFKDApLG1lPW5ldyBFKDEpLGtlPTA7cC5pc0V2ZW4oKSYmUy5pc0V2ZW4oKTspcC5pdXNocm4oMSksUy5pdXNocm4oMSksKytrZTtmb3IodmFyIFRlPVMuY2xvbmUoKSxQZT1wLmNsb25lKCk7IXAuaXNaZXJv'@;
put 'KCk7KXtmb3IodmFyIEZlPTAsTmU9MTshKHAud29yZHNbMF0mTmUpJiZGZTwyNjsrK0ZlLE5lPDw9MSk7aWYoRmU+MClmb3IocC5pdXNocm4oRmUpO0ZlLS0gPjA7KShRLmlzT2RkKCl8fHJlLmlzT2RkKCkpJiYoUS5pYWRkKFRlKSxyZS5pc3ViKFBlKSksUS5pdXNocm4oMSkscmUuaXVzaHJu'@;
put 'KDEpO2Zvcih2YXIgTGU9MCxCZT0xOyEoUy53b3Jkc1swXSZCZSkmJkxlPDI2OysrTGUsQmU8PD0xKTtpZihMZT4wKWZvcihTLml1c2hybihMZSk7TGUtLSA+MDspKGZlLmlzT2RkKCl8fG1lLmlzT2RkKCkpJiYoZmUuaWFkZChUZSksbWUuaXN1YihQZSkpLGZlLml1c2hybigxKSxtZS5pdXNo'@;
put 'cm4oMSk7cC5jbXAoUyk+PTA/KHAuaXN1YihTKSxRLmlzdWIoZmUpLHJlLmlzdWIobWUpKTooUy5pc3ViKHApLGZlLmlzdWIoUSksbWUuaXN1YihyZSkpfXJldHVybnthOmZlLGI6bWUsZ2NkOlMuaXVzaGxuKGtlKX19LEUucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbih5KXtJKDA9PT15Lm5l'@;
put 'Z2F0aXZlKSxJKCF5LmlzWmVybygpKTt2YXIgcD10aGlzLFM9eS5jbG9uZSgpO3A9MCE9PXAubmVnYXRpdmU/cC51bW9kKHkpOnAuY2xvbmUoKTtmb3IodmFyIFEscmU9bmV3IEUoMSksZmU9bmV3IEUoMCksbWU9Uy5jbG9uZSgpO3AuY21wbigxKT4wJiZTLmNtcG4oMSk+MDspe2Zvcih2YXIg'@;
put 'a2U9MCxUZT0xOyEocC53b3Jkc1swXSZUZSkmJmtlPDI2Oysra2UsVGU8PD0xKTtpZihrZT4wKWZvcihwLml1c2hybihrZSk7a2UtLSA+MDspcmUuaXNPZGQoKSYmcmUuaWFkZChtZSkscmUuaXVzaHJuKDEpO2Zvcih2YXIgUGU9MCxGZT0xOyEoUy53b3Jkc1swXSZGZSkmJlBlPDI2OysrUGUs'@;
put 'RmU8PD0xKTtpZihQZT4wKWZvcihTLml1c2hybihQZSk7UGUtLSA+MDspZmUuaXNPZGQoKSYmZmUuaWFkZChtZSksZmUuaXVzaHJuKDEpO3AuY21wKFMpPj0wPyhwLmlzdWIoUykscmUuaXN1YihmZSkpOihTLmlzdWIocCksZmUuaXN1YihyZSkpfXJldHVybihRPTA9PT1wLmNtcG4oMSk/cmU6'@;
put 'ZmUpLmNtcG4oMCk8MCYmUS5pYWRkKHkpLFF9LEUucHJvdG90eXBlLmdjZD1mdW5jdGlvbih5KXtpZih0aGlzLmlzWmVybygpKXJldHVybiB5LmFicygpO2lmKHkuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIHA9dGhpcy5jbG9uZSgpLFM9eS5jbG9uZSgpO3AubmVnYXRpdmU9MCxT'@;
put 'Lm5lZ2F0aXZlPTA7Zm9yKHZhciBRPTA7cC5pc0V2ZW4oKSYmUy5pc0V2ZW4oKTtRKyspcC5pdXNocm4oMSksUy5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO3AuaXNFdmVuKCk7KXAuaXVzaHJuKDEpO2Zvcig7Uy5pc0V2ZW4oKTspUy5pdXNocm4oMSk7dmFyIHJlPXAuY21wKFMpO2lmKHJlPDAp'@;
put 'e3ZhciBmZT1wO3A9UyxTPWZlfWVsc2UgaWYoMD09PXJlfHwwPT09Uy5jbXBuKDEpKWJyZWFrO3AuaXN1YihTKX1yZXR1cm4gUy5pdXNobG4oUSl9LEUucHJvdG90eXBlLmludm09ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMuZWdjZCh5KS5hLnVtb2QoeSl9LEUucHJvdG90eXBlLmlzRXZlbj1m'@;
put 'dW5jdGlvbigpe3JldHVybiAwPT0oMSZ0aGlzLndvcmRzWzBdKX0sRS5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gMT09KDEmdGhpcy53b3Jkc1swXSl9LEUucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLndvcmRzWzBdJnl9LEUucHJvdG90eXBlLmJp'@;
put 'bmNuPWZ1bmN0aW9uKHkpe0koIm51bWJlciI9PXR5cGVvZiB5KTt2YXIgcD15JTI2LFM9KHktcCkvMjYsUT0xPDxwO2lmKHRoaXMubGVuZ3RoPD1TKXJldHVybiB0aGlzLl9leHBhbmQoUysxKSx0aGlzLndvcmRzW1NdfD1RLHRoaXM7Zm9yKHZhciByZT1RLGZlPVM7MCE9PXJlJiZmZTx0aGlz'@;
put 'Lmxlbmd0aDtmZSsrKXt2YXIgbWU9MHx0aGlzLndvcmRzW2ZlXTtyZT0obWUrPXJlKT4+PjI2LHRoaXMud29yZHNbZmVdPW1lJj02NzEwODg2M31yZXR1cm4gMCE9PXJlJiYodGhpcy53b3Jkc1tmZV09cmUsdGhpcy5sZW5ndGgrKyksdGhpc30sRS5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LEUucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24oeSl7dmFyIHAsUz15PDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFTKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZTKXJldHVybiAxO2lmKHRoaXMuX3N0'@;
put 'cmlwKCksdGhpcy5sZW5ndGg+MSlwPTE7ZWxzZXtTJiYoeT0teSksSSh5PD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgUT0wfHRoaXMud29yZHNbMF07cD1RPT09eT8wOlE8eT8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1wOnB9LEUucHJvdG90eXBlLmNtcD1m'@;
put 'dW5jdGlvbih5KXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXkubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT15Lm5lZ2F0aXZlKXJldHVybiAxO3ZhciBwPXRoaXMudWNtcCh5KTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtcDpwfSxFLnByb3RvdHlw'@;
put 'ZS51Y21wPWZ1bmN0aW9uKHkpe2lmKHRoaXMubGVuZ3RoPnkubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPHkubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgcD0wLFM9dGhpcy5sZW5ndGgtMTtTPj0wO1MtLSl7dmFyIFE9MHx0aGlzLndvcmRzW1NdLHJlPTB8eS53b3Jkc1tTXTtpZihR'@;
put 'IT09cmUpe1E8cmU/cD0tMTpRPnJlJiYocD0xKTticmVha319cmV0dXJuIHB9LEUucHJvdG90eXBlLmd0bj1mdW5jdGlvbih5KXtyZXR1cm4gMT09PXRoaXMuY21wbih5KX0sRS5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oeSl7cmV0dXJuIDE9PT10aGlzLmNtcCh5KX0sRS5wcm90b3R5cGUuZ3Rl'@;
put 'bj1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5jbXBuKHkpPj0wfSxFLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMuY21wKHkpPj0wfSxFLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oeSl7cmV0dXJuLTE9PT10aGlzLmNtcG4oeSl9LEUucHJvdG90eXBlLmx0PWZ1bmN0aW9u'@;
put 'KHkpe3JldHVybi0xPT09dGhpcy5jbXAoeSl9LEUucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMuY21wbih5KTw9MH0sRS5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLmNtcCh5KTw9MH0sRS5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKHkpe3JldHVy'@;
put 'biAwPT09dGhpcy5jbXBuKHkpfSxFLnByb3RvdHlwZS5lcT1mdW5jdGlvbih5KXtyZXR1cm4gMD09PXRoaXMuY21wKHkpfSxFLnJlZD1mdW5jdGlvbih5KXtyZXR1cm4gbmV3IEMoeSl9LEUucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHkpe3JldHVybiBJKCF0aGlzLnJlZCwiQWxyZWFkeSBh'@;
put 'IG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLEkoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikseS5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHkpfSxFLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQs'@;
put 'ImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sRS5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLnJlZD15LHRoaXN9LEUucHJvdG90eXBlLmZvcmNlUmVkPWZ1'@;
put 'bmN0aW9uKHkpe3JldHVybiBJKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKHkpfSxFLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oeSl7cmV0dXJuIEkodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVk'@;
put 'IG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyx5KX0sRS5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbih5KXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMseSl9LEUucHJvdG90eXBlLnJlZFN1Yj1m'@;
put 'dW5jdGlvbih5KXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLHkpfSxFLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHkpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCBy'@;
put 'ZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyx5KX0sRS5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKHkpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMseSl9LEUucHJvdG90eXBlLnJlZE11bD1m'@;
put 'dW5jdGlvbih5KXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMseSksdGhpcy5yZWQubXVsKHRoaXMseSl9LEUucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oeSl7cmV0dXJuIEkodGhpcy5yZWQs'@;
put 'InJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHkpLHRoaXMucmVkLmltdWwodGhpcyx5KX0sRS5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51'@;
put 'bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LEUucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0'@;
put 'aGlzLnJlZC5pc3FyKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sRS5wcm90b3R5cGUu'@;
put 'cmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LEUucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMu'@;
put 'cmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oeSl7cmV0dXJuIEkodGhpcy5yZWQmJiF5LnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0'@;
put 'aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyx5KX07dmFyIFk9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBiKHkscCl7dGhpcy5uYW1lPXksdGhpcy5wPW5ldyBFKHAsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3Ro'@;
put 'KCksdGhpcy5rPW5ldyBFKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiB4KCl7Yi5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBm'@;
put 'ZmZmZmMyZiIpfWZ1bmN0aW9uIE4oKXtiLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gRigpe2IuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZm'@;
put 'ZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBnKCl7Yi5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIEMoeSl7aWYoInN0cmluZyI9PXR5'@;
put 'cGVvZiB5KXt2YXIgcD1FLl9wcmltZSh5KTt0aGlzLm09cC5wLHRoaXMucHJpbWU9cH1lbHNlIEkoeS5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT15LHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBNKHkpe0MuY2FsbCh0aGlzLHkpLHRoaXMuc2hpZnQ9'@;
put 'dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IEUoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5t'@;
put 'KSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9Yi5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciB5PW5ldyBFKG51bGwp'@;
put 'O3JldHVybiB5LndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSkseX0sYi5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbih5KXt2YXIgcCxTPXk7ZG97dGhpcy5zcGxpdChTLHRoaXMudG1wKSxwPShTPShTPXRoaXMuaW11bEsoUykpLmlhZGQodGhpcy50bXApKS5iaXRMZW5n'@;
put 'dGgoKX13aGlsZShwPnRoaXMubik7dmFyIFE9cDx0aGlzLm4/LTE6Uy51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1RPyhTLndvcmRzWzBdPTAsUy5sZW5ndGg9MSk6UT4wP1MuaXN1Yih0aGlzLnApOnZvaWQgMCE9PVMuc3RyaXA/Uy5zdHJpcCgpOlMuX3N0cmlwKCksU30sYi5wcm90b3R5cGUu'@;
put 'c3BsaXQ9ZnVuY3Rpb24oeSxwKXt5Lml1c2hybih0aGlzLm4sMCxwKX0sYi5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oeSl7cmV0dXJuIHkuaW11bCh0aGlzLmspfSxSKHgsYikseC5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oeSxwKXtmb3IodmFyIFM9NDE5NDMwMyxRPU1hdGgubWluKHku'@;
put 'bGVuZ3RoLDkpLHJlPTA7cmU8UTtyZSsrKXAud29yZHNbcmVdPXkud29yZHNbcmVdO2lmKHAubGVuZ3RoPVEseS5sZW5ndGg8PTkpcmV0dXJuIHkud29yZHNbMF09MCx2b2lkKHkubGVuZ3RoPTEpO3ZhciBmZT15LndvcmRzWzldO2ZvcihwLndvcmRzW3AubGVuZ3RoKytdPWZlJlMscmU9MTA7'@;
put 'cmU8eS5sZW5ndGg7cmUrKyl7dmFyIG1lPTB8eS53b3Jkc1tyZV07eS53b3Jkc1tyZS0xMF09KG1lJlMpPDw0fGZlPj4+MjIsZmU9bWV9eS53b3Jkc1tyZS0xMF09ZmU+Pj49MjIseS5sZW5ndGgtPTA9PT1mZSYmeS5sZW5ndGg+MTA/MTA6OX0seC5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24o'@;
put 'eSl7eS53b3Jkc1t5Lmxlbmd0aF09MCx5LndvcmRzW3kubGVuZ3RoKzFdPTAseS5sZW5ndGgrPTI7Zm9yKHZhciBwPTAsUz0wO1M8eS5sZW5ndGg7UysrKXt2YXIgUT0wfHkud29yZHNbU107eS53b3Jkc1tTXT02NzEwODg2MyYocCs9OTc3KlEpLHA9NjQqUSsocC82NzEwODg2NHwwKX1yZXR1'@;
put 'cm4gMD09PXkud29yZHNbeS5sZW5ndGgtMV0mJih5Lmxlbmd0aC0tLDA9PT15LndvcmRzW3kubGVuZ3RoLTFdJiZ5Lmxlbmd0aC0tKSx5fSxSKE4sYiksUihGLGIpLFIoZyxiKSxnLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbih5KXtmb3IodmFyIHA9MCxTPTA7Uzx5Lmxlbmd0aDtTKyspe3Zh'@;
put 'ciBRPTE5KigwfHkud29yZHNbU10pK3AscmU9NjcxMDg4NjMmUTtRPj4+PTI2LHkud29yZHNbU109cmUscD1RfXJldHVybiAwIT09cCYmKHkud29yZHNbeS5sZW5ndGgrK109cCkseX0sRS5fcHJpbWU9ZnVuY3Rpb24oeSl7aWYoWVt5XSlyZXR1cm4gWVt5XTt2YXIgcDtpZigiazI1NiI9PT15'@;
put 'KXA9bmV3IHg7ZWxzZSBpZigicDIyNCI9PT15KXA9bmV3IE47ZWxzZSBpZigicDE5MiI9PT15KXA9bmV3IEY7ZWxzZXtpZigicDI1NTE5IiE9PXkpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIreSk7cD1uZXcgZ31yZXR1cm4gWVt5XT1wLHB9LEMucHJvdG90eXBlLl92ZXJpZnkx'@;
put 'PWZ1bmN0aW9uKHkpe0koMD09PXkubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksSSh5LnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxDLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbih5LHApe0koMD09KHkubmVnYXRpdmV8cC5uZWdh'@;
put 'dGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksSSh5LnJlZCYmeS5yZWQ9PT1wLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxDLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZSh5'@;
put 'KS5fZm9yY2VSZWQodGhpcyk6KFcoeSx5LnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcykpLHkpfSxDLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oeSl7cmV0dXJuIHkuaXNaZXJvKCk/eS5jbG9uZSgpOnRoaXMubS5zdWIoeSkuX2ZvcmNlUmVkKHRoaXMpfSxDLnByb3RvdHlwZS5hZGQ9ZnVu'@;
put 'Y3Rpb24oeSxwKXt0aGlzLl92ZXJpZnkyKHkscCk7dmFyIFM9eS5hZGQocCk7cmV0dXJuIFMuY21wKHRoaXMubSk+PTAmJlMuaXN1Yih0aGlzLm0pLFMuX2ZvcmNlUmVkKHRoaXMpfSxDLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHkscCl7dGhpcy5fdmVyaWZ5Mih5LHApO3ZhciBTPXkuaWFk'@;
put 'ZChwKTtyZXR1cm4gUy5jbXAodGhpcy5tKT49MCYmUy5pc3ViKHRoaXMubSksU30sQy5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHkscCl7dGhpcy5fdmVyaWZ5Mih5LHApO3ZhciBTPXkuc3ViKHApO3JldHVybiBTLmNtcG4oMCk8MCYmUy5pYWRkKHRoaXMubSksUy5fZm9yY2VSZWQodGhpcyl9'@;
put 'LEMucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oeSxwKXt0aGlzLl92ZXJpZnkyKHkscCk7dmFyIFM9eS5pc3ViKHApO3JldHVybiBTLmNtcG4oMCk8MCYmUy5pYWRkKHRoaXMubSksU30sQy5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKHkscCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoeSksdGhpcy5p'@;
put 'bW9kKHkudXNobG4ocCkpfSxDLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHkscCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoeSxwKSx0aGlzLmltb2QoeS5pbXVsKHApKX0sQy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHkscCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoeSxwKSx0aGlzLmltb2QoeS5t'@;
put 'dWwocCkpfSxDLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLmltdWwoeSx5LmNsb25lKCkpfSxDLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMubXVsKHkseSl9LEMucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oeSl7aWYoeS5pc1plcm8oKSlyZXR1'@;
put 'cm4geS5jbG9uZSgpO3ZhciBwPXRoaXMubS5hbmRsbigzKTtpZihJKHAlMj09MSksMz09PXApe3ZhciBTPXRoaXMubS5hZGQobmV3IEUoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coeSxTKX1mb3IodmFyIFE9dGhpcy5tLnN1Ym4oMSkscmU9MDshUS5pc1plcm8oKSYmMD09PVEuYW5k'@;
put 'bG4oMSk7KXJlKyssUS5pdXNocm4oMSk7SSghUS5pc1plcm8oKSk7dmFyIGZlPW5ldyBFKDEpLnRvUmVkKHRoaXMpLG1lPWZlLnJlZE5lZygpLGtlPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxUZT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKFRlPW5ldyBFKDIqVGUqVGUpLnRvUmVkKHRoaXMp'@;
put 'OzAhPT10aGlzLnBvdyhUZSxrZSkuY21wKG1lKTspVGUucmVkSUFkZChtZSk7Zm9yKHZhciBQZT10aGlzLnBvdyhUZSxRKSxGZT10aGlzLnBvdyh5LFEuYWRkbigxKS5pdXNocm4oMSkpLE5lPXRoaXMucG93KHksUSksTGU9cmU7MCE9PU5lLmNtcChmZSk7KXtmb3IodmFyIEJlPU5lLEhlPTA7'@;
put 'MCE9PUJlLmNtcChmZSk7SGUrKylCZT1CZS5yZWRTcXIoKTtJKEhlPExlKTt2YXIgUWU9dGhpcy5wb3coUGUsbmV3IEUoMSkuaXVzaGxuKExlLUhlLTEpKTtGZT1GZS5yZWRNdWwoUWUpLFBlPVFlLnJlZFNxcigpLE5lPU5lLnJlZE11bChQZSksTGU9SGV9cmV0dXJuIEZlfSxDLnByb3RvdHlw'@;
put 'ZS5pbnZtPWZ1bmN0aW9uKHkpe3ZhciBwPXkuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1wLm5lZ2F0aXZlPyhwLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKHApLnJlZE5lZygpKTp0aGlzLmltb2QocCl9LEMucHJvdG90eXBlLnBvdz1mdW5jdGlvbih5LHApe2lmKHAuaXNaZXJvKCkpcmV0dXJu'@;
put 'IG5ldyBFKDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1wLmNtcG4oMSkpcmV0dXJuIHkuY2xvbmUoKTt2YXIgUz1uZXcgQXJyYXkoMTYpO1NbMF09bmV3IEUoMSkudG9SZWQodGhpcyksU1sxXT15O2Zvcih2YXIgUT0yO1E8Uy5sZW5ndGg7USsrKVNbUV09dGhpcy5tdWwoU1tRLTFdLHkpO3ZhciBy'@;
put 'ZT1TWzBdLGZlPTAsbWU9MCxrZT1wLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09a2UmJihrZT0yNiksUT1wLmxlbmd0aC0xO1E+PTA7US0tKXtmb3IodmFyIFRlPXAud29yZHNbUV0sUGU9a2UtMTtQZT49MDtQZS0tKXt2YXIgRmU9VGU+PlBlJjE7cmUhPT1TWzBdJiYocmU9dGhpcy5zcXIocmUp'@;
put 'KSwwIT09RmV8fDAhPT1mZT8oZmU8PD0xLGZlfD1GZSwoND09KyttZXx8MD09PVEmJjA9PT1QZSkmJihyZT10aGlzLm11bChyZSxTW2ZlXSksbWU9MCxmZT0wKSk6bWU9MH1rZT0yNn1yZXR1cm4gcmV9LEMucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbih5KXt2YXIgcD15LnVtb2QodGhp'@;
put 'cy5tKTtyZXR1cm4gcD09PXk/cC5jbG9uZSgpOnB9LEMucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHkpe3ZhciBwPXkuY2xvbmUoKTtyZXR1cm4gcC5yZWQ9bnVsbCxwfSxFLm1vbnQ9ZnVuY3Rpb24oeSl7cmV0dXJuIG5ldyBNKHkpfSxSKE0sQyksTS5wcm90b3R5cGUuY29udmVy'@;
put 'dFRvPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLmltb2QoeS51c2hsbih0aGlzLnNoaWZ0KSl9LE0ucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHkpe3ZhciBwPXRoaXMuaW1vZCh5Lm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gcC5yZWQ9bnVsbCxwfSxNLnByb3RvdHlwZS5pbXVsPWZ1'@;
put 'bmN0aW9uKHkscCl7aWYoeS5pc1plcm8oKXx8cC5pc1plcm8oKSlyZXR1cm4geS53b3Jkc1swXT0wLHkubGVuZ3RoPTEseTt2YXIgUz15LmltdWwocCksUT1TLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxyZT1TLmlzdWIo'@;
put 'USkuaXVzaHJuKHRoaXMuc2hpZnQpLGZlPXJlO3JldHVybiByZS5jbXAodGhpcy5tKT49MD9mZT1yZS5pc3ViKHRoaXMubSk6cmUuY21wbigwKTwwJiYoZmU9cmUuaWFkZCh0aGlzLm0pKSxmZS5fZm9yY2VSZWQodGhpcyl9LE0ucHJvdG90eXBlLm11bD1mdW5jdGlvbih5LHApe2lmKHkuaXNa'@;
put 'ZXJvKCl8fHAuaXNaZXJvKCkpcmV0dXJuIG5ldyBFKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgUz15Lm11bChwKSxRPVMubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLHJlPVMuaXN1YihRKS5pdXNocm4odGhpcy5zaGlmdCks'@;
put 'ZmU9cmU7cmV0dXJuIHJlLmNtcCh0aGlzLm0pPj0wP2ZlPXJlLmlzdWIodGhpcy5tKTpyZS5jbXBuKDApPDAmJihmZT1yZS5pYWRkKHRoaXMubSkpLGZlLl9mb3JjZVJlZCh0aGlzKX0sTS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5pbW9kKHkuX2ludm1wKHRoaXMu'@;
put 'bSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShIPUwubm1kKEgpLHRoaXMpfSwzNjQ0OihILEIsTCk9Pnt2YXIgSz1MKDEwNDgpLEo9TCg1NjIzKTtILmV4cG9ydHM9ZnVuY3Rpb24obGUpe3JldHVybiBsZT8oInt9Ij09PWxlLnN1YnN0cigwLDIpJiYobGU9Ilxce1xcfSIrbGUu'@;
put 'c3Vic3RyKDIpKSxpZSgoZGU9bGUsZGUuc3BsaXQoIlxcXFwiKS5qb2luKEkpLnNwbGl0KCJcXHsiKS5qb2luKFIpLnNwbGl0KCJcXH0iKS5qb2luKEUpLnNwbGl0KCJcXCwiKS5qb2luKHopLnNwbGl0KCJcXC4iKS5qb2luKGopKSwhMCkubWFwKEcpKTpbXTt2YXIgZGV9O3ZhciBJPSJcMFNM'@;
put 'QVNIIitNYXRoLnJhbmRvbSgpKyJcMCIsUj0iXDBPUEVOIitNYXRoLnJhbmRvbSgpKyJcMCIsRT0iXDBDTE9TRSIrTWF0aC5yYW5kb20oKSsiXDAiLHo9IlwwQ09NTUEiK01hdGgucmFuZG9tKCkrIlwwIixqPSJcMFBFUklPRCIrTWF0aC5yYW5kb20oKSsiXDAiO2Z1bmN0aW9uIFYobGUpe3Jl'@;
put 'dHVybiBwYXJzZUludChsZSwxMCk9PWxlP3BhcnNlSW50KGxlLDEwKTpsZS5jaGFyQ29kZUF0KDApfWZ1bmN0aW9uIEcobGUpe3JldHVybiBsZS5zcGxpdChJKS5qb2luKCJcXCIpLnNwbGl0KFIpLmpvaW4oInsiKS5zcGxpdChFKS5qb2luKCJ9Iikuc3BsaXQoeikuam9pbigiLCIpLnNwbGl0'@;
put 'KGopLmpvaW4oIi4iKX1mdW5jdGlvbiBXKGxlKXtpZighbGUpcmV0dXJuWyIiXTt2YXIgZGU9W10sdWU9SigieyIsIn0iLGxlKTtpZighdWUpcmV0dXJuIGxlLnNwbGl0KCIsIik7dmFyIFk9dWUuYm9keSxiPXVlLnBvc3QseD11ZS5wcmUuc3BsaXQoIiwiKTt4W3gubGVuZ3RoLTFdKz0ieyIr'@;
put 'WSsifSI7dmFyIE49VyhiKTtyZXR1cm4gYi5sZW5ndGgmJih4W3gubGVuZ3RoLTFdKz1OLnNoaWZ0KCkseC5wdXNoLmFwcGx5KHgsTikpLGRlLnB1c2guYXBwbHkoZGUseCksZGV9ZnVuY3Rpb24gVShsZSl7cmV0dXJuInsiK2xlKyJ9In1mdW5jdGlvbiBxKGxlKXtyZXR1cm4vXi0/MFxkLy50'@;
put 'ZXN0KGxlKX1mdW5jdGlvbiB0ZShsZSxkZSl7cmV0dXJuIGxlPD1kZX1mdW5jdGlvbiBuZShsZSxkZSl7cmV0dXJuIGxlPj1kZX1mdW5jdGlvbiBpZShsZSxkZSl7dmFyIHVlPVtdLGNlPUooInsiLCJ9IixsZSk7aWYoIWNlfHwvXCQkLy50ZXN0KGNlLnByZSkpcmV0dXJuW2xlXTt2YXIgWSxi'@;
put 'PS9eLT9cZCtcLlwuLT9cZCsoPzpcLlwuLT9cZCspPyQvLnRlc3QoY2UuYm9keSkseD0vXlthLXpBLVpdXC5cLlthLXpBLVpdKD86XC5cLi0/XGQrKT8kLy50ZXN0KGNlLmJvZHkpLE49Ynx8eCxGPWNlLmJvZHkuaW5kZXhPZigiLCIpPj0wO2lmKCFOJiYhRilyZXR1cm4gY2UucG9zdC5tYXRj'@;
put 'aCgvLC4qXH0vKT9pZShsZT1jZS5wcmUrInsiK2NlLmJvZHkrRStjZS5wb3N0KTpbbGVdO2lmKE4pWT1jZS5ib2R5LnNwbGl0KC9cLlwuLyk7ZWxzZSBpZigxPT09KFk9VyhjZS5ib2R5KSkubGVuZ3RoJiYxPT09KFk9aWUoWVswXSwhMSkubWFwKFUpKS5sZW5ndGgpcmV0dXJuKE09Y2UucG9z'@;
put 'dC5sZW5ndGg/aWUoY2UucG9zdCwhMSk6WyIiXSkubWFwKGZ1bmN0aW9uKEJlKXtyZXR1cm4gY2UucHJlK1lbMF0rQmV9KTt2YXIgZyxDPWNlLnByZSxNPWNlLnBvc3QubGVuZ3RoP2llKGNlLnBvc3QsITEpOlsiIl07aWYoTil7dmFyIHk9VihZWzBdKSxwPVYoWVsxXSksUz1NYXRoLm1heChZ'@;
put 'WzBdLmxlbmd0aCxZWzFdLmxlbmd0aCksUT0zPT1ZLmxlbmd0aD9NYXRoLmFicyhWKFlbMl0pKToxLHJlPXRlO3A8eSYmKFEqPS0xLHJlPW5lKTt2YXIgZmU9WS5zb21lKHEpO2c9W107Zm9yKHZhciBtZT15O3JlKG1lLHApO21lKz1RKXt2YXIga2U7aWYoeCkiXFwiPT09KGtlPVN0cmluZy5m'@;
put 'cm9tQ2hhckNvZGUobWUpKSYmKGtlPSIiKTtlbHNlIGlmKGtlPVN0cmluZyhtZSksZmUpe3ZhciBUZT1TLWtlLmxlbmd0aDtpZihUZT4wKXt2YXIgUGU9bmV3IEFycmF5KFRlKzEpLmpvaW4oIjAiKTtrZT1tZTwwPyItIitQZStrZS5zbGljZSgxKTpQZStrZX19Zy5wdXNoKGtlKX19ZWxzZSBn'@;
put 'PUsoWSxmdW5jdGlvbihCZSl7cmV0dXJuIGllKEJlLCExKX0pO2Zvcih2YXIgRmU9MDtGZTxnLmxlbmd0aDtGZSsrKWZvcih2YXIgTmU9MDtOZTxNLmxlbmd0aDtOZSsrKXt2YXIgTGU9QytnW0ZlXStNW05lXTsoIWRlfHxOfHxMZSkmJnVlLnB1c2goTGUpfXJldHVybiB1ZX19LDk5MzE6KEgs'@;
put 'QixMKT0+e3ZhciBLO2Z1bmN0aW9uIEooUil7dGhpcy5yYW5kPVJ9aWYoSC5leHBvcnRzPWZ1bmN0aW9uKFIpe3JldHVybiBLfHwoSz1uZXcgSihudWxsKSksSy5nZW5lcmF0ZShSKX0sSC5leHBvcnRzLlJhbmQ9SixKLnByb3RvdHlwZS5nZW5lcmF0ZT1mdW5jdGlvbihSKXtyZXR1cm4gdGhp'@;
put 'cy5fcmFuZChSKX0sSi5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24oUil7aWYodGhpcy5yYW5kLmdldEJ5dGVzKXJldHVybiB0aGlzLnJhbmQuZ2V0Qnl0ZXMoUik7Zm9yKHZhciBFPW5ldyBVaW50OEFycmF5KFIpLHo9MDt6PEUubGVuZ3RoO3orKylFW3pdPXRoaXMucmFuZC5nZXRCeXRlKCk7'@;
put 'cmV0dXJuIEV9LCJvYmplY3QiPT10eXBlb2Ygc2VsZilzZWxmLmNyeXB0byYmc2VsZi5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzP0oucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKFIpe3ZhciBFPW5ldyBVaW50OEFycmF5KFIpO3JldHVybiBzZWxmLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoRSks'@;
put 'RX06c2VsZi5tc0NyeXB0byYmc2VsZi5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXM/Si5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24oUil7dmFyIEU9bmV3IFVpbnQ4QXJyYXkoUik7cmV0dXJuIHNlbGYubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKEUpLEV9OiJvYmplY3QiPT10eXBlb2Ygd2lu'@;
put 'ZG93JiYoSi5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCB5ZXQiKX0pO2Vsc2UgdHJ5e3ZhciBJPUwoOTIxNCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIEkucmFuZG9tQnl0ZXMpdGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVk'@;
put 'Iik7Si5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24oUil7cmV0dXJuIEkucmFuZG9tQnl0ZXMoUil9fWNhdGNoe319LDQ0OTc6KEgsQixMKT0+e3ZhciBLPUwoOTUwOSkuQnVmZmVyO2Z1bmN0aW9uIEooVil7Sy5pc0J1ZmZlcihWKXx8KFY9Sy5mcm9tKFYpKTtmb3IodmFyIEc9Vi5sZW5ndGgv'@;
put 'NHwwLFc9bmV3IEFycmF5KEcpLFU9MDtVPEc7VSsrKVdbVV09Vi5yZWFkVUludDMyQkUoNCpVKTtyZXR1cm4gV31mdW5jdGlvbiBJKFYpe2Zvcig7MDxWLmxlbmd0aDtWKyspVlswXT0wfWZ1bmN0aW9uIFIoVixHLFcsVSxxKXtmb3IodmFyIHRlLG5lLGllLGxlLGRlPVdbMF0sdWU9V1sxXSxj'@;
put 'ZT1XWzJdLFk9V1szXSxiPVZbMF1eR1swXSx4PVZbMV1eR1sxXSxOPVZbMl1eR1syXSxGPVZbM11eR1szXSxnPTQsQz0xO0M8cTtDKyspdGU9ZGVbYj4+PjI0XV51ZVt4Pj4+MTYmMjU1XV5jZVtOPj4+OCYyNTVdXllbMjU1JkZdXkdbZysrXSxuZT1kZVt4Pj4+MjRdXnVlW04+Pj4xNiYyNTVd'@;
put 'XmNlW0Y+Pj44JjI1NV1eWVsyNTUmYl1eR1tnKytdLGllPWRlW04+Pj4yNF1edWVbRj4+PjE2JjI1NV1eY2VbYj4+PjgmMjU1XV5ZWzI1NSZ4XV5HW2crK10sbGU9ZGVbRj4+PjI0XV51ZVtiPj4+MTYmMjU1XV5jZVt4Pj4+OCYyNTVdXllbMjU1Jk5dXkdbZysrXSxiPXRlLHg9bmUsTj1pZSxG'@;
put 'PWxlO3JldHVybiB0ZT0oVVtiPj4+MjRdPDwyNHxVW3g+Pj4xNiYyNTVdPDwxNnxVW04+Pj44JjI1NV08PDh8VVsyNTUmRl0pXkdbZysrXSxuZT0oVVt4Pj4+MjRdPDwyNHxVW04+Pj4xNiYyNTVdPDwxNnxVW0Y+Pj44JjI1NV08PDh8VVsyNTUmYl0pXkdbZysrXSxpZT0oVVtOPj4+MjRdPDwy'@;
put 'NHxVW0Y+Pj4xNiYyNTVdPDwxNnxVW2I+Pj44JjI1NV08PDh8VVsyNTUmeF0pXkdbZysrXSxsZT0oVVtGPj4+MjRdPDwyNHxVW2I+Pj4xNiYyNTVdPDwxNnxVW3g+Pj44JjI1NV08PDh8VVsyNTUmTl0pXkdbZysrXSxbdGU+Pj49MCxuZT4+Pj0wLGllPj4+PTAsbGU+Pj49MF19dmFyIEU9WzAs'@;
put 'MSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTRdLHo9ZnVuY3Rpb24oKXtmb3IodmFyIFY9bmV3IEFycmF5KDI1NiksRz0wO0c8MjU2O0crKylWW0ddPUc8MTI4P0c8PDE6Rzw8MV4yODM7Zm9yKHZhciBXPVtdLFU9W10scT1bW10sW10sW10sW11dLHRlPVtbXSxbXSxbXSxbXV0sbmU9MCxpZT0w'@;
put 'LGxlPTA7bGU8MjU2OysrbGUpe3ZhciBkZT1pZV5pZTw8MV5pZTw8Ml5pZTw8M15pZTw8NDtXW25lXT1kZT1kZT4+PjheMjU1JmRlXjk5LFVbZGVdPW5lO3ZhciB1ZT1WW25lXSxjZT1WW3VlXSxZPVZbY2VdLGI9MjU3KlZbZGVdXjE2ODQzMDA4KmRlO3FbMF1bbmVdPWI8PDI0fGI+Pj44LHFb'@;
put 'MV1bbmVdPWI8PDE2fGI+Pj4xNixxWzJdW25lXT1iPDw4fGI+Pj4yNCxxWzNdW25lXT1iLHRlWzBdW2RlXT0oYj0xNjg0MzAwOSpZXjY1NTM3KmNlXjI1Nyp1ZV4xNjg0MzAwOCpuZSk8PDI0fGI+Pj44LHRlWzFdW2RlXT1iPDwxNnxiPj4+MTYsdGVbMl1bZGVdPWI8PDh8Yj4+PjI0LHRlWzNd'@;
put 'W2RlXT1iLDA9PT1uZT9uZT1pZT0xOihuZT11ZV5WW1ZbVltZXnVlXV1dLGllXj1WW1ZbaWVdXSl9cmV0dXJue1NCT1g6VyxJTlZfU0JPWDpVLFNVQl9NSVg6cSxJTlZfU1VCX01JWDp0ZX19KCk7ZnVuY3Rpb24gaihWKXt0aGlzLl9rZXk9SihWKSx0aGlzLl9yZXNldCgpfWouYmxvY2tTaXpl'@;
put 'PTE2LGoua2V5U2l6ZT0zMixqLnByb3RvdHlwZS5ibG9ja1NpemU9ai5ibG9ja1NpemUsai5wcm90b3R5cGUua2V5U2l6ZT1qLmtleVNpemUsai5wcm90b3R5cGUuX3Jlc2V0PWZ1bmN0aW9uKCl7Zm9yKHZhciBWPXRoaXMuX2tleSxHPVYubGVuZ3RoLFc9Rys2LFU9NCooVysxKSxxPVtdLHRl'@;
put 'PTA7dGU8Rzt0ZSsrKXFbdGVdPVZbdGVdO2Zvcih0ZT1HO3RlPFU7dGUrKyl7dmFyIG5lPXFbdGUtMV07dGUlRz09MD8obmU9ei5TQk9YWyhuZT1uZTw8OHxuZT4+PjI0KT4+PjI0XTw8MjR8ei5TQk9YW25lPj4+MTYmMjU1XTw8MTZ8ei5TQk9YW25lPj4+OCYyNTVdPDw4fHouU0JPWFsyNTUm'@;
put 'bmVdLG5lXj1FW3RlL0d8MF08PDI0KTpHPjYmJnRlJUc9PTQmJihuZT16LlNCT1hbbmU+Pj4yNF08PDI0fHouU0JPWFtuZT4+PjE2JjI1NV08PDE2fHouU0JPWFtuZT4+PjgmMjU1XTw8OHx6LlNCT1hbMjU1Jm5lXSkscVt0ZV09cVt0ZS1HXV5uZX1mb3IodmFyIGllPVtdLGxlPTA7bGU8VTts'@;
put 'ZSsrKXt2YXIgZGU9VS1sZSx1ZT1xW2RlLShsZSU0PzA6NCldO2llW2xlXT1sZTw0fHxkZTw9ND91ZTp6LklOVl9TVUJfTUlYWzBdW3ouU0JPWFt1ZT4+PjI0XV1eei5JTlZfU1VCX01JWFsxXVt6LlNCT1hbdWU+Pj4xNiYyNTVdXV56LklOVl9TVUJfTUlYWzJdW3ouU0JPWFt1ZT4+PjgmMjU1'@;
put 'XV1eei5JTlZfU1VCX01JWFszXVt6LlNCT1hbMjU1JnVlXV19dGhpcy5fblJvdW5kcz1XLHRoaXMuX2tleVNjaGVkdWxlPXEsdGhpcy5faW52S2V5U2NoZWR1bGU9aWV9LGoucHJvdG90eXBlLmVuY3J5cHRCbG9ja1Jhdz1mdW5jdGlvbihWKXtyZXR1cm4gUihWPUooViksdGhpcy5fa2V5U2No'@;
put 'ZWR1bGUsei5TVUJfTUlYLHouU0JPWCx0aGlzLl9uUm91bmRzKX0sai5wcm90b3R5cGUuZW5jcnlwdEJsb2NrPWZ1bmN0aW9uKFYpe3ZhciBHPXRoaXMuZW5jcnlwdEJsb2NrUmF3KFYpLFc9Sy5hbGxvY1Vuc2FmZSgxNik7cmV0dXJuIFcud3JpdGVVSW50MzJCRShHWzBdLDApLFcud3JpdGVV'@;
put 'SW50MzJCRShHWzFdLDQpLFcud3JpdGVVSW50MzJCRShHWzJdLDgpLFcud3JpdGVVSW50MzJCRShHWzNdLDEyKSxXfSxqLnByb3RvdHlwZS5kZWNyeXB0QmxvY2s9ZnVuY3Rpb24oVil7dmFyIEc9KFY9SihWKSlbMV07VlsxXT1WWzNdLFZbM109Rzt2YXIgVz1SKFYsdGhpcy5faW52S2V5U2No'@;
put 'ZWR1bGUsei5JTlZfU1VCX01JWCx6LklOVl9TQk9YLHRoaXMuX25Sb3VuZHMpLFU9Sy5hbGxvY1Vuc2FmZSgxNik7cmV0dXJuIFUud3JpdGVVSW50MzJCRShXWzBdLDApLFUud3JpdGVVSW50MzJCRShXWzNdLDQpLFUud3JpdGVVSW50MzJCRShXWzJdLDgpLFUud3JpdGVVSW50MzJCRShXWzFd'@;
put 'LDEyKSxVfSxqLnByb3RvdHlwZS5zY3J1Yj1mdW5jdGlvbigpe0kodGhpcy5fa2V5U2NoZWR1bGUpLEkodGhpcy5faW52S2V5U2NoZWR1bGUpLEkodGhpcy5fa2V5KX0sSC5leHBvcnRzLkFFUz1qfSw0ODQ4OihILEIsTCk9Pnt2YXIgSz1MKDQ0OTcpLEo9TCg5NTA5KS5CdWZmZXIsST1MKDEw'@;
put 'MjcpLFI9TCg1NzE3KSxFPUwoMzI4OCksej1MKDcyOTUpLGo9TCg2ODUpO2Z1bmN0aW9uIFYoRyxXLFUscSl7SS5jYWxsKHRoaXMpO3ZhciB0ZT1KLmFsbG9jKDQsMCk7dGhpcy5fY2lwaGVyPW5ldyBLLkFFUyhXKTt2YXIgbmU9dGhpcy5fY2lwaGVyLmVuY3J5cHRCbG9jayh0ZSk7dGhpcy5f'@;
put 'Z2hhc2g9bmV3IEUobmUpLFU9ZnVuY3Rpb24oaWUsbGUsZGUpe2lmKDEyPT09bGUubGVuZ3RoKXJldHVybiBpZS5fZmluSUQ9Si5jb25jYXQoW2xlLEouZnJvbShbMCwwLDAsMV0pXSksSi5jb25jYXQoW2xlLEouZnJvbShbMCwwLDAsMl0pXSk7dmFyIHVlPW5ldyBFKGRlKSxjZT1sZS5sZW5n'@;
put 'dGgsWT1jZSUxNjt1ZS51cGRhdGUobGUpLFkmJnVlLnVwZGF0ZShKLmFsbG9jKFk9MTYtWSwwKSksdWUudXBkYXRlKEouYWxsb2MoOCwwKSk7dmFyIGI9OCpjZSx4PUouYWxsb2MoOCk7eC53cml0ZVVJbnRCRShiLDAsOCksdWUudXBkYXRlKHgpLGllLl9maW5JRD11ZS5zdGF0ZTt2YXIgTj1K'@;
put 'LmZyb20oaWUuX2ZpbklEKTtyZXR1cm4gaihOKSxOfSh0aGlzLFUsbmUpLHRoaXMuX3ByZXY9Si5mcm9tKFUpLHRoaXMuX2NhY2hlPUouYWxsb2NVbnNhZmUoMCksdGhpcy5fc2VjQ2FjaGU9Si5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9kZWNyeXB0PXEsdGhpcy5fYWxlbj0wLHRoaXMuX2xlbj0w'@;
put 'LHRoaXMuX21vZGU9Ryx0aGlzLl9hdXRoVGFnPW51bGwsdGhpcy5fY2FsbGVkPSExfVIoVixJKSxWLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEcpe2lmKCF0aGlzLl9jYWxsZWQmJnRoaXMuX2FsZW4pe3ZhciBXPTE2LXRoaXMuX2FsZW4lMTY7VzwxNiYmKFc9Si5hbGxvYyhXLDApLHRo'@;
put 'aXMuX2doYXNoLnVwZGF0ZShXKSl9dGhpcy5fY2FsbGVkPSEwO3ZhciBVPXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLEcpO3JldHVybiB0aGlzLl9naGFzaC51cGRhdGUodGhpcy5fZGVjcnlwdD9HOlUpLHRoaXMuX2xlbis9Ry5sZW5ndGgsVX0sVi5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9u'@;
put 'KCl7aWYodGhpcy5fZGVjcnlwdCYmIXRoaXMuX2F1dGhUYWcpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBzdGF0ZSBvciB1bmFibGUgdG8gYXV0aGVudGljYXRlIGRhdGEiKTt2YXIgRz16KHRoaXMuX2doYXNoLmZpbmFsKDgqdGhpcy5fYWxlbiw4KnRoaXMuX2xlbiksdGhpcy5fY2lw'@;
put 'aGVyLmVuY3J5cHRCbG9jayh0aGlzLl9maW5JRCkpO2lmKHRoaXMuX2RlY3J5cHQmJmZ1bmN0aW9uKFcsVSl7dmFyIHE9MDtXLmxlbmd0aCE9PVUubGVuZ3RoJiZxKys7Zm9yKHZhciB0ZT1NYXRoLm1pbihXLmxlbmd0aCxVLmxlbmd0aCksbmU9MDtuZTx0ZTsrK25lKXErPVdbbmVdXlVbbmVd'@;
put 'O3JldHVybiBxfShHLHRoaXMuX2F1dGhUYWcpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgc3RhdGUgb3IgdW5hYmxlIHRvIGF1dGhlbnRpY2F0ZSBkYXRhIik7dGhpcy5fYXV0aFRhZz1HLHRoaXMuX2NpcGhlci5zY3J1YigpfSxWLnByb3RvdHlwZS5nZXRBdXRoVGFnPWZ1bmN0aW9u'@;
put 'KCl7aWYodGhpcy5fZGVjcnlwdHx8IUouaXNCdWZmZXIodGhpcy5fYXV0aFRhZykpdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0aW5nIHRvIGdldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpO3JldHVybiB0aGlzLl9hdXRoVGFnfSxWLnByb3RvdHlwZS5zZXRBdXRoVGFnPWZ1bmN0'@;
put 'aW9uKEcpe2lmKCF0aGlzLl9kZWNyeXB0KXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGluZyB0byBzZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKTt0aGlzLl9hdXRoVGFnPUd9LFYucHJvdG90eXBlLnNldEFBRD1mdW5jdGlvbihHKXtpZih0aGlzLl9jYWxsZWQpdGhyb3cgbmV3'@;
put 'IEVycm9yKCJBdHRlbXB0aW5nIHRvIHNldCBBQUQgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKTt0aGlzLl9naGFzaC51cGRhdGUoRyksdGhpcy5fYWxlbis9Ry5sZW5ndGh9LEguZXhwb3J0cz1WfSw0Njk2OihILEIsTCk9Pnt2YXIgSz1MKDE0OTQpLEo9TCg2MTkzKSxJPUwoNDk0Nik7Qi5jcmVh'@;
put 'dGVDaXBoZXI9Qi5DaXBoZXI9Sy5jcmVhdGVDaXBoZXIsQi5jcmVhdGVDaXBoZXJpdj1CLkNpcGhlcml2PUsuY3JlYXRlQ2lwaGVyaXYsQi5jcmVhdGVEZWNpcGhlcj1CLkRlY2lwaGVyPUouY3JlYXRlRGVjaXBoZXIsQi5jcmVhdGVEZWNpcGhlcml2PUIuRGVjaXBoZXJpdj1KLmNyZWF0ZURl'@;
put 'Y2lwaGVyaXYsQi5saXN0Q2lwaGVycz1CLmdldENpcGhlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXMoSSl9fSw2MTkzOihILEIsTCk9Pnt2YXIgSz1MKDQ4NDgpLEo9TCg5NTA5KS5CdWZmZXIsST1MKDQ1KSxSPUwoNTk2OSksRT1MKDEwMjcpLHo9TCg0NDk3KSxqPUwoMzA0OCk7'@;
put 'ZnVuY3Rpb24gVihVLHEsdGUpe0UuY2FsbCh0aGlzKSx0aGlzLl9jYWNoZT1uZXcgRyx0aGlzLl9sYXN0PXZvaWQgMCx0aGlzLl9jaXBoZXI9bmV3IHouQUVTKHEpLHRoaXMuX3ByZXY9Si5mcm9tKHRlKSx0aGlzLl9tb2RlPVUsdGhpcy5fYXV0b3BhZGRpbmc9ITB9ZnVuY3Rpb24gRygpe3Ro'@;
put 'aXMuY2FjaGU9Si5hbGxvY1Vuc2FmZSgwKX1mdW5jdGlvbiBXKFUscSx0ZSl7dmFyIG5lPUlbVS50b0xvd2VyQ2FzZSgpXTtpZighbmUpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7aWYoInN0cmluZyI9PXR5cGVvZiB0ZSYmKHRlPUouZnJvbSh0ZSkpLCJHQ00i'@;
put 'IT09bmUubW9kZSYmdGUubGVuZ3RoIT09bmUuaXYpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBpdiBsZW5ndGggIit0ZS5sZW5ndGgpO2lmKCJzdHJpbmciPT10eXBlb2YgcSYmKHE9Si5mcm9tKHEpKSxxLmxlbmd0aCE9PW5lLmtleS84KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFs'@;
put 'aWQga2V5IGxlbmd0aCAiK3EubGVuZ3RoKTtyZXR1cm4ic3RyZWFtIj09PW5lLnR5cGU/bmV3IFIobmUubW9kdWxlLHEsdGUsITApOiJhdXRoIj09PW5lLnR5cGU/bmV3IEsobmUubW9kdWxlLHEsdGUsITApOm5ldyBWKG5lLm1vZHVsZSxxLHRlKX1MKDU3MTcpKFYsRSksVi5wcm90b3R5cGUu'@;
put 'X3VwZGF0ZT1mdW5jdGlvbihVKXt2YXIgcSx0ZTt0aGlzLl9jYWNoZS5hZGQoVSk7Zm9yKHZhciBuZT1bXTtxPXRoaXMuX2NhY2hlLmdldCh0aGlzLl9hdXRvcGFkZGluZyk7KXRlPXRoaXMuX21vZGUuZGVjcnlwdCh0aGlzLHEpLG5lLnB1c2godGUpO3JldHVybiBKLmNvbmNhdChuZSl9LFYu'@;
put 'cHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBVPXRoaXMuX2NhY2hlLmZsdXNoKCk7aWYodGhpcy5fYXV0b3BhZGRpbmcpcmV0dXJuIGZ1bmN0aW9uKHEpe3ZhciB0ZT1xWzE1XTtpZih0ZTwxfHx0ZT4xNil0aHJvdyBuZXcgRXJyb3IoInVuYWJsZSB0byBkZWNyeXB0IGRhdGEiKTtm'@;
put 'b3IodmFyIG5lPS0xOysrbmU8dGU7KWlmKHFbbmUrKDE2LXRlKV0hPT10ZSl0aHJvdyBuZXcgRXJyb3IoInVuYWJsZSB0byBkZWNyeXB0IGRhdGEiKTtpZigxNiE9PXRlKXJldHVybiBxLnNsaWNlKDAsMTYtdGUpfSh0aGlzLl9tb2RlLmRlY3J5cHQodGhpcyxVKSk7aWYoVSl0aHJvdyBuZXcg'@;
put 'RXJyb3IoImRhdGEgbm90IG11bHRpcGxlIG9mIGJsb2NrIGxlbmd0aCIpfSxWLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbihVKXtyZXR1cm4gdGhpcy5fYXV0b3BhZGRpbmc9ISFVLHRoaXN9LEcucHJvdG90eXBlLmFkZD1mdW5jdGlvbihVKXt0aGlzLmNhY2hlPUouY29uY2F0'@;
put 'KFt0aGlzLmNhY2hlLFVdKX0sRy5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKFUpe3ZhciBxO2lmKFUpe2lmKHRoaXMuY2FjaGUubGVuZ3RoPjE2KXJldHVybiBxPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxxfWVsc2UgaWYodGhpcy5jYWNo'@;
put 'ZS5sZW5ndGg+PTE2KXJldHVybiBxPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxxO3JldHVybiBudWxsfSxHLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe2lmKHRoaXMuY2FjaGUubGVuZ3RoKXJldHVybiB0aGlzLmNhY2hlfSxCLmNy'@;
put 'ZWF0ZURlY2lwaGVyPWZ1bmN0aW9uKFUscSl7dmFyIHRlPUlbVS50b0xvd2VyQ2FzZSgpXTtpZighdGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7dmFyIG5lPWoocSwhMSx0ZS5rZXksdGUuaXYpO3JldHVybiBXKFUsbmUua2V5LG5lLml2KX0sQi5jcmVhdGVE'@;
put 'ZWNpcGhlcml2PVd9LDE0OTQ6KEgsQixMKT0+e3ZhciBLPUwoNDUpLEo9TCg0ODQ4KSxJPUwoOTUwOSkuQnVmZmVyLFI9TCg1OTY5KSxFPUwoMTAyNyksej1MKDQ0OTcpLGo9TCgzMDQ4KTtmdW5jdGlvbiBWKHEsdGUsbmUpe0UuY2FsbCh0aGlzKSx0aGlzLl9jYWNoZT1uZXcgVyx0aGlzLl9j'@;
put 'aXBoZXI9bmV3IHouQUVTKHRlKSx0aGlzLl9wcmV2PUkuZnJvbShuZSksdGhpcy5fbW9kZT1xLHRoaXMuX2F1dG9wYWRkaW5nPSEwfUwoNTcxNykoVixFKSxWLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHEpe3ZhciB0ZSxuZTt0aGlzLl9jYWNoZS5hZGQocSk7Zm9yKHZhciBpZT1bXTt0'@;
put 'ZT10aGlzLl9jYWNoZS5nZXQoKTspbmU9dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsdGUpLGllLnB1c2gobmUpO3JldHVybiBJLmNvbmNhdChpZSl9O3ZhciBHPUkuYWxsb2MoMTYsMTYpO2Z1bmN0aW9uIFcoKXt0aGlzLmNhY2hlPUkuYWxsb2NVbnNhZmUoMCl9ZnVuY3Rpb24gVShxLHRlLG5l'@;
put 'KXt2YXIgaWU9S1txLnRvTG93ZXJDYXNlKCldO2lmKCFpZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTtpZigic3RyaW5nIj09dHlwZW9mIHRlJiYodGU9SS5mcm9tKHRlKSksdGUubGVuZ3RoIT09aWUua2V5LzgpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxp'@;
put 'ZCBrZXkgbGVuZ3RoICIrdGUubGVuZ3RoKTtpZigic3RyaW5nIj09dHlwZW9mIG5lJiYobmU9SS5mcm9tKG5lKSksIkdDTSIhPT1pZS5tb2RlJiZuZS5sZW5ndGghPT1pZS5pdil0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGl2IGxlbmd0aCAiK25lLmxlbmd0aCk7cmV0dXJuInN0cmVh'@;
put 'bSI9PT1pZS50eXBlP25ldyBSKGllLm1vZHVsZSx0ZSxuZSk6ImF1dGgiPT09aWUudHlwZT9uZXcgSihpZS5tb2R1bGUsdGUsbmUpOm5ldyBWKGllLm1vZHVsZSx0ZSxuZSl9Vi5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIHE9dGhpcy5fY2FjaGUuZmx1c2goKTtpZih0aGlzLl9h'@;
put 'dXRvcGFkZGluZylyZXR1cm4gcT10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxxKSx0aGlzLl9jaXBoZXIuc2NydWIoKSxxO2lmKCFxLmVxdWFscyhHKSl0aHJvdyB0aGlzLl9jaXBoZXIuc2NydWIoKSxuZXcgRXJyb3IoImRhdGEgbm90IG11bHRpcGxlIG9mIGJsb2NrIGxlbmd0aCIpfSxWLnBy'@;
put 'b3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbihxKXtyZXR1cm4gdGhpcy5fYXV0b3BhZGRpbmc9ISFxLHRoaXN9LFcucHJvdG90eXBlLmFkZD1mdW5jdGlvbihxKXt0aGlzLmNhY2hlPUkuY29uY2F0KFt0aGlzLmNhY2hlLHFdKX0sVy5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7aWYo'@;
put 'dGhpcy5jYWNoZS5sZW5ndGg+MTUpe3ZhciBxPXRoaXMuY2FjaGUuc2xpY2UoMCwxNik7cmV0dXJuIHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNikscX1yZXR1cm4gbnVsbH0sVy5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXtmb3IodmFyIHE9MTYtdGhpcy5jYWNoZS5sZW5ndGgs'@;
put 'dGU9SS5hbGxvY1Vuc2FmZShxKSxuZT0tMTsrK25lPHE7KXRlLndyaXRlVUludDgocSxuZSk7cmV0dXJuIEkuY29uY2F0KFt0aGlzLmNhY2hlLHRlXSl9LEIuY3JlYXRlQ2lwaGVyaXY9VSxCLmNyZWF0ZUNpcGhlcj1mdW5jdGlvbihxLHRlKXt2YXIgbmU9S1txLnRvTG93ZXJDYXNlKCldO2lm'@;
put 'KCFuZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTt2YXIgaWU9aih0ZSwhMSxuZS5rZXksbmUuaXYpO3JldHVybiBVKHEsaWUua2V5LGllLml2KX19LDMyODg6KEgsQixMKT0+e3ZhciBLPUwoOTUwOSkuQnVmZmVyLEo9Sy5hbGxvYygxNiwwKTtmdW5jdGlvbiBJ'@;
put 'KEUpe3ZhciB6PUsuYWxsb2NVbnNhZmUoMTYpO3JldHVybiB6LndyaXRlVUludDMyQkUoRVswXT4+PjAsMCksei53cml0ZVVJbnQzMkJFKEVbMV0+Pj4wLDQpLHoud3JpdGVVSW50MzJCRShFWzJdPj4+MCw4KSx6LndyaXRlVUludDMyQkUoRVszXT4+PjAsMTIpLHp9ZnVuY3Rpb24gUihFKXt0'@;
put 'aGlzLmg9RSx0aGlzLnN0YXRlPUsuYWxsb2MoMTYsMCksdGhpcy5jYWNoZT1LLmFsbG9jVW5zYWZlKDApfVIucHJvdG90eXBlLmdoYXNoPWZ1bmN0aW9uKEUpe2Zvcih2YXIgej0tMTsrK3o8RS5sZW5ndGg7KXRoaXMuc3RhdGVbel1ePUVbel07dGhpcy5fbXVsdGlwbHkoKX0sUi5wcm90b3R5'@;
put 'cGUuX211bHRpcGx5PWZ1bmN0aW9uKCl7Zm9yKHZhciBFLHosaixWPVsoRT10aGlzLmgpLnJlYWRVSW50MzJCRSgwKSxFLnJlYWRVSW50MzJCRSg0KSxFLnJlYWRVSW50MzJCRSg4KSxFLnJlYWRVSW50MzJCRSgxMildLEc9WzAsMCwwLDBdLFc9LTE7KytXPDEyODspe2Zvcih0aGlzLnN0YXRl'@;
put 'W35+KFcvOCldJjE8PDctVyU4JiYoR1swXV49VlswXSxHWzFdXj1WWzFdLEdbMl1ePVZbMl0sR1szXV49VlszXSksaj0wIT0oMSZWWzNdKSx6PTM7ej4wO3otLSlWW3pdPVZbel0+Pj4xfCgxJlZbei0xXSk8PDMxO1ZbMF09VlswXT4+PjEsaiYmKFZbMF09LTUyMDA5MzY5Nl5WWzBdKX10aGlz'@;
put 'LnN0YXRlPUkoRyl9LFIucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihFKXt2YXIgejtmb3IodGhpcy5jYWNoZT1LLmNvbmNhdChbdGhpcy5jYWNoZSxFXSk7dGhpcy5jYWNoZS5sZW5ndGg+PTE2Oyl6PXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNl'@;
put 'KDE2KSx0aGlzLmdoYXNoKHopfSxSLnByb3RvdHlwZS5maW5hbD1mdW5jdGlvbihFLHope3JldHVybiB0aGlzLmNhY2hlLmxlbmd0aCYmdGhpcy5naGFzaChLLmNvbmNhdChbdGhpcy5jYWNoZSxKXSwxNikpLHRoaXMuZ2hhc2goSShbMCxFLDAsel0pKSx0aGlzLnN0YXRlfSxILmV4cG9ydHM9'@;
put 'Un0sNjg1Okg9PntILmV4cG9ydHM9ZnVuY3Rpb24oQil7Zm9yKHZhciBMLEs9Qi5sZW5ndGg7Sy0tOyl7aWYoMjU1IT09KEw9Qi5yZWFkVUludDgoSykpKXtMKyssQi53cml0ZVVJbnQ4KEwsSyk7YnJlYWt9Qi53cml0ZVVJbnQ4KDAsSyl9fX0sNTI5MjooSCxCLEwpPT57dmFyIEs9TCg3Mjk1'@;
put 'KTtCLmVuY3J5cHQ9ZnVuY3Rpb24oSixJKXt2YXIgUj1LKEksSi5fcHJldik7cmV0dXJuIEouX3ByZXY9Si5fY2lwaGVyLmVuY3J5cHRCbG9jayhSKSxKLl9wcmV2fSxCLmRlY3J5cHQ9ZnVuY3Rpb24oSixJKXt2YXIgUj1KLl9wcmV2O0ouX3ByZXY9STt2YXIgRT1KLl9jaXBoZXIuZGVjcnlw'@;
put 'dEJsb2NrKEkpO3JldHVybiBLKEUsUil9fSw2MzExOihILEIsTCk9Pnt2YXIgSz1MKDk1MDkpLkJ1ZmZlcixKPUwoNzI5NSk7ZnVuY3Rpb24gSShSLEUseil7dmFyIGo9RS5sZW5ndGgsVj1KKEUsUi5fY2FjaGUpO3JldHVybiBSLl9jYWNoZT1SLl9jYWNoZS5zbGljZShqKSxSLl9wcmV2PUsu'@;
put 'Y29uY2F0KFtSLl9wcmV2LHo/RTpWXSksVn1CLmVuY3J5cHQ9ZnVuY3Rpb24oUixFLHope2Zvcih2YXIgaixWPUsuYWxsb2NVbnNhZmUoMCk7RS5sZW5ndGg7KXtpZigwPT09Ui5fY2FjaGUubGVuZ3RoJiYoUi5fY2FjaGU9Ui5fY2lwaGVyLmVuY3J5cHRCbG9jayhSLl9wcmV2KSxSLl9wcmV2'@;
put 'PUsuYWxsb2NVbnNhZmUoMCkpLCEoUi5fY2FjaGUubGVuZ3RoPD1FLmxlbmd0aCkpe1Y9Sy5jb25jYXQoW1YsSShSLEUseildKTticmVha31WPUsuY29uY2F0KFtWLEkoUixFLnNsaWNlKDAsaj1SLl9jYWNoZS5sZW5ndGgpLHopXSksRT1FLnNsaWNlKGopfXJldHVybiBWfX0sMTUxMDooSCxC'@;
put 'LEwpPT57dmFyIEs9TCg5NTA5KS5CdWZmZXI7ZnVuY3Rpb24gSihSLEUseil7Zm9yKHZhciBqLFYsRz0tMSxXPTA7KytHPDg7KWo9RSYxPDw3LUc/MTI4OjAsVys9KDEyOCYoVj1SLl9jaXBoZXIuZW5jcnlwdEJsb2NrKFIuX3ByZXYpWzBdXmopKT4+RyU4LFIuX3ByZXY9SShSLl9wcmV2LHo/'@;
put 'ajpWKTtyZXR1cm4gV31mdW5jdGlvbiBJKFIsRSl7dmFyIHo9Ui5sZW5ndGgsaj0tMSxWPUsuYWxsb2NVbnNhZmUoUi5sZW5ndGgpO2ZvcihSPUsuY29uY2F0KFtSLEsuZnJvbShbRV0pXSk7KytqPHo7KVZbal09UltqXTw8MXxSW2orMV0+Pjc7cmV0dXJuIFZ9Qi5lbmNyeXB0PWZ1bmN0aW9u'@;
put 'KFIsRSx6KXtmb3IodmFyIGo9RS5sZW5ndGgsVj1LLmFsbG9jVW5zYWZlKGopLEc9LTE7KytHPGo7KVZbR109SihSLEVbR10seik7cmV0dXJuIFZ9fSwxOTY0OihILEIsTCk9Pnt2YXIgSz1MKDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiBKKEksUixFKXt2YXIgej1JLl9jaXBoZXIuZW5jcnlwdEJs'@;
put 'b2NrKEkuX3ByZXYpWzBdXlI7cmV0dXJuIEkuX3ByZXY9Sy5jb25jYXQoW0kuX3ByZXYuc2xpY2UoMSksSy5mcm9tKFtFP1I6el0pXSksen1CLmVuY3J5cHQ9ZnVuY3Rpb24oSSxSLEUpe2Zvcih2YXIgej1SLmxlbmd0aCxqPUsuYWxsb2NVbnNhZmUoeiksVj0tMTsrK1Y8ejspaltWXT1KKEks'@;
put 'UltWXSxFKTtyZXR1cm4gan19LDYwMDk6KEgsQixMKT0+e3ZhciBLPUwoNzI5NSksSj1MKDk1MDkpLkJ1ZmZlcixJPUwoNjg1KTtmdW5jdGlvbiBSKEUpe3ZhciB6PUUuX2NpcGhlci5lbmNyeXB0QmxvY2tSYXcoRS5fcHJldik7cmV0dXJuIEkoRS5fcHJldiksen1CLmVuY3J5cHQ9ZnVuY3Rp'@;
put 'b24oRSx6KXt2YXIgaj1NYXRoLmNlaWwoei5sZW5ndGgvMTYpLFY9RS5fY2FjaGUubGVuZ3RoO0UuX2NhY2hlPUouY29uY2F0KFtFLl9jYWNoZSxKLmFsbG9jVW5zYWZlKDE2KmopXSk7Zm9yKHZhciBHPTA7RzxqO0crKyl7dmFyIFc9UihFKSxVPVYrMTYqRztFLl9jYWNoZS53cml0ZVVJbnQz'@;
put 'MkJFKFdbMF0sVSswKSxFLl9jYWNoZS53cml0ZVVJbnQzMkJFKFdbMV0sVSs0KSxFLl9jYWNoZS53cml0ZVVJbnQzMkJFKFdbMl0sVSs4KSxFLl9jYWNoZS53cml0ZVVJbnQzMkJFKFdbM10sVSsxMil9dmFyIHE9RS5fY2FjaGUuc2xpY2UoMCx6Lmxlbmd0aCk7cmV0dXJuIEUuX2NhY2hlPUUu'@;
put 'X2NhY2hlLnNsaWNlKHoubGVuZ3RoKSxLKHoscSl9fSwxMDg0OihILEIpPT57Qi5lbmNyeXB0PWZ1bmN0aW9uKEwsSyl7cmV0dXJuIEwuX2NpcGhlci5lbmNyeXB0QmxvY2soSyl9LEIuZGVjcnlwdD1mdW5jdGlvbihMLEspe3JldHVybiBMLl9jaXBoZXIuZGVjcnlwdEJsb2NrKEspfX0sNDU6'@;
put 'KEgsQixMKT0+e3ZhciBLPXtFQ0I6TCgxMDg0KSxDQkM6TCg1MjkyKSxDRkI6TCg2MzExKSxDRkI4OkwoMTk2NCksQ0ZCMTpMKDE1MTApLE9GQjpMKDg4NjEpLENUUjpMKDYwMDkpLEdDTTpMKDYwMDkpfSxKPUwoNDk0Nik7Zm9yKHZhciBJIGluIEopSltJXS5tb2R1bGU9S1tKW0ldLm1vZGVd'@;
put 'O0guZXhwb3J0cz1KfSw4ODYxOihILEIsTCk9Pnt2YXIgSz1MKDg3NjQpLkJ1ZmZlcixKPUwoNzI5NSk7ZnVuY3Rpb24gSShSKXtyZXR1cm4gUi5fcHJldj1SLl9jaXBoZXIuZW5jcnlwdEJsb2NrKFIuX3ByZXYpLFIuX3ByZXZ9Qi5lbmNyeXB0PWZ1bmN0aW9uKFIsRSl7Zm9yKDtSLl9jYWNo'@;
put 'ZS5sZW5ndGg8RS5sZW5ndGg7KVIuX2NhY2hlPUsuY29uY2F0KFtSLl9jYWNoZSxJKFIpXSk7dmFyIHo9Ui5fY2FjaGUuc2xpY2UoMCxFLmxlbmd0aCk7cmV0dXJuIFIuX2NhY2hlPVIuX2NhY2hlLnNsaWNlKEUubGVuZ3RoKSxKKEUseil9fSw1OTY5OihILEIsTCk9Pnt2YXIgSz1MKDQ0OTcp'@;
put 'LEo9TCg5NTA5KS5CdWZmZXIsST1MKDEwMjcpO2Z1bmN0aW9uIFIoRSx6LGosVil7SS5jYWxsKHRoaXMpLHRoaXMuX2NpcGhlcj1uZXcgSy5BRVMoeiksdGhpcy5fcHJldj1KLmZyb20oaiksdGhpcy5fY2FjaGU9Si5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9zZWNDYWNoZT1KLmFsbG9jVW5zYWZl'@;
put 'KDApLHRoaXMuX2RlY3J5cHQ9Vix0aGlzLl9tb2RlPUV9TCg1NzE3KShSLEkpLFIucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oRSl7cmV0dXJuIHRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLEUsdGhpcy5fZGVjcnlwdCl9LFIucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3RoaXMuX2Np'@;
put 'cGhlci5zY3J1YigpfSxILmV4cG9ydHM9Un0sMzYxNDooSCxCLEwpPT57dmFyIEs9TCg3NjY3KSxKPUwoNDY5NiksST1MKDQ1KSxSPUwoOTcxNSksRT1MKDMwNDgpO2Z1bmN0aW9uIHooVixHLFcpe2lmKFY9Vi50b0xvd2VyQ2FzZSgpLElbVl0pcmV0dXJuIEouY3JlYXRlQ2lwaGVyaXYoVixH'@;
put 'LFcpO2lmKFJbVl0pcmV0dXJuIG5ldyBLKHtrZXk6RyxpdjpXLG1vZGU6Vn0pO3Rocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpfWZ1bmN0aW9uIGooVixHLFcpe2lmKFY9Vi50b0xvd2VyQ2FzZSgpLElbVl0pcmV0dXJuIEouY3JlYXRlRGVjaXBoZXJpdihWLEcsVyk7'@;
put 'aWYoUltWXSlyZXR1cm4gbmV3IEsoe2tleTpHLGl2OlcsbW9kZTpWLGRlY3J5cHQ6ITB9KTt0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKX1CLmNyZWF0ZUNpcGhlcj1CLkNpcGhlcj1mdW5jdGlvbihWLEcpe3ZhciBXLFU7aWYoVj1WLnRvTG93ZXJDYXNlKCksSVtW'@;
put 'XSlXPUlbVl0ua2V5LFU9SVtWXS5pdjtlbHNle2lmKCFSW1ZdKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO1c9OCpSW1ZdLmtleSxVPVJbVl0uaXZ9dmFyIHE9RShHLCExLFcsVSk7cmV0dXJuIHooVixxLmtleSxxLml2KX0sQi5jcmVhdGVDaXBoZXJpdj1CLkNp'@;
put 'cGhlcml2PXosQi5jcmVhdGVEZWNpcGhlcj1CLkRlY2lwaGVyPWZ1bmN0aW9uKFYsRyl7dmFyIFcsVTtpZihWPVYudG9Mb3dlckNhc2UoKSxJW1ZdKVc9SVtWXS5rZXksVT1JW1ZdLml2O2Vsc2V7aWYoIVJbVl0pdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7Vz04'@;
put 'KlJbVl0ua2V5LFU9UltWXS5pdn12YXIgcT1FKEcsITEsVyxVKTtyZXR1cm4gaihWLHEua2V5LHEuaXYpfSxCLmNyZWF0ZURlY2lwaGVyaXY9Qi5EZWNpcGhlcml2PWosQi5saXN0Q2lwaGVycz1CLmdldENpcGhlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXMoUikuY29uY2F0KEou'@;
put 'Z2V0Q2lwaGVycygpKX19LDc2Njc6KEgsQixMKT0+e3ZhciBLPUwoMTAyNyksSj1MKDUyNTEpLEk9TCg1NzE3KSxSPUwoOTUwOSkuQnVmZmVyLEU9eyJkZXMtZWRlMy1jYmMiOkouQ0JDLmluc3RhbnRpYXRlKEouRURFKSwiZGVzLWVkZTMiOkouRURFLCJkZXMtZWRlLWNiYyI6Si5DQkMuaW5z'@;
put 'dGFudGlhdGUoSi5FREUpLCJkZXMtZWRlIjpKLkVERSwiZGVzLWNiYyI6Si5DQkMuaW5zdGFudGlhdGUoSi5ERVMpLCJkZXMtZWNiIjpKLkRFU307ZnVuY3Rpb24geihqKXtLLmNhbGwodGhpcyk7dmFyIFYsRz1qLm1vZGUudG9Mb3dlckNhc2UoKSxXPUVbR107Vj1qLmRlY3J5cHQ/ImRlY3J5'@;
put 'cHQiOiJlbmNyeXB0Ijt2YXIgVT1qLmtleTtSLmlzQnVmZmVyKFUpfHwoVT1SLmZyb20oVSkpLCJkZXMtZWRlIiE9PUcmJiJkZXMtZWRlLWNiYyIhPT1HfHwoVT1SLmNvbmNhdChbVSxVLnNsaWNlKDAsOCldKSk7dmFyIHE9ai5pdjtSLmlzQnVmZmVyKHEpfHwocT1SLmZyb20ocSkpLHRoaXMu'@;
put 'X2Rlcz1XLmNyZWF0ZSh7a2V5OlUsaXY6cSx0eXBlOlZ9KX1FLmRlcz1FWyJkZXMtY2JjIl0sRS5kZXMzPUVbImRlcy1lZGUzLWNiYyJdLEguZXhwb3J0cz16LEkoeixLKSx6LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGope3JldHVybiBSLmZyb20odGhpcy5fZGVzLnVwZGF0ZShqKSl9'@;
put 'LHoucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3JldHVybiBSLmZyb20odGhpcy5fZGVzLmZpbmFsKCkpfX0sOTcxNTooSCxCKT0+e0JbImRlcy1lY2IiXT17a2V5OjgsaXY6MH0sQlsiZGVzLWNiYyJdPUIuZGVzPXtrZXk6OCxpdjo4fSxCWyJkZXMtZWRlMy1jYmMiXT1CLmRlczM9e2tl'@;
put 'eToyNCxpdjo4fSxCWyJkZXMtZWRlMyJdPXtrZXk6MjQsaXY6MH0sQlsiZGVzLWVkZS1jYmMiXT17a2V5OjE2LGl2Ojh9LEJbImRlcy1lZGUiXT17a2V5OjE2LGl2OjB9fSwzNjYzOihILEIsTCk9Pnt2YXIgSz1MKDg3NjQpLkJ1ZmZlcixKPUwoMzU1MCksST1MKDE3OTgpO2Z1bmN0aW9uIFIo'@;
put 'eil7dmFyIGosVj16Lm1vZHVsdXMuYnl0ZUxlbmd0aCgpO2Rve2o9bmV3IEooSShWKSl9d2hpbGUoai5jbXAoei5tb2R1bHVzKT49MHx8IWoudW1vZCh6LnByaW1lMSl8fCFqLnVtb2Qoei5wcmltZTIpKTtyZXR1cm4gan1mdW5jdGlvbiBFKHosail7dmFyIGNlLFksVj17YmxpbmRlcjooWT1S'@;
put 'KGNlPWopKS50b1JlZChKLm1vbnQoY2UubW9kdWx1cykpLnJlZFBvdyhuZXcgSihjZS5wdWJsaWNFeHBvbmVudCkpLmZyb21SZWQoKSx1bmJsaW5kZXI6WS5pbnZtKGNlLm1vZHVsdXMpfSxHPWoubW9kdWx1cy5ieXRlTGVuZ3RoKCksVz1uZXcgSih6KS5tdWwoVi5ibGluZGVyKS51bW9kKGou'@;
put 'bW9kdWx1cyksVT1XLnRvUmVkKEoubW9udChqLnByaW1lMSkpLHE9Vy50b1JlZChKLm1vbnQoai5wcmltZTIpKSx0ZT1qLmNvZWZmaWNpZW50LG5lPWoucHJpbWUxLGllPWoucHJpbWUyLGxlPVUucmVkUG93KGouZXhwb25lbnQxKS5mcm9tUmVkKCksZGU9cS5yZWRQb3coai5leHBvbmVudDIp'@;
put 'LmZyb21SZWQoKSx1ZT1sZS5pc3ViKGRlKS5pbXVsKHRlKS51bW9kKG5lKS5pbXVsKGllKTtyZXR1cm4gZGUuaWFkZCh1ZSkuaW11bChWLnVuYmxpbmRlcikudW1vZChqLm1vZHVsdXMpLnRvQXJyYXlMaWtlKEssImJlIixHKX1FLmdldHI9UixILmV4cG9ydHM9RX0sNjA0MjooSCxCLEwpPT57'@;
put 'SC5leHBvcnRzPUwoNTIwNyl9LDQ3NDM6KEgsQixMKT0+e3ZhciBLPUwoOTUwOSkuQnVmZmVyLEo9TCgzNDgyKSxJPUwoODQ3MyksUj1MKDU3MTcpLEU9TCgyOTU3KSx6PUwoNzc1Myksaj1MKDUyMDcpO2Z1bmN0aW9uIFYocSl7SS5Xcml0YWJsZS5jYWxsKHRoaXMpO3ZhciB0ZT1qW3FdO2lm'@;
put 'KCF0ZSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gbWVzc2FnZSBkaWdlc3QiKTt0aGlzLl9oYXNoVHlwZT10ZS5oYXNoLHRoaXMuX2hhc2g9Sih0ZS5oYXNoKSx0aGlzLl90YWc9dGUuaWQsdGhpcy5fc2lnblR5cGU9dGUuc2lnbn1mdW5jdGlvbiBHKHEpe0kuV3JpdGFibGUuY2FsbCh0aGlz'@;
put 'KTt2YXIgdGU9altxXTtpZighdGUpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIG1lc3NhZ2UgZGlnZXN0Iik7dGhpcy5faGFzaD1KKHRlLmhhc2gpLHRoaXMuX3RhZz10ZS5pZCx0aGlzLl9zaWduVHlwZT10ZS5zaWdufWZ1bmN0aW9uIFcocSl7cmV0dXJuIG5ldyBWKHEpfWZ1bmN0aW9uIFUo'@;
put 'cSl7cmV0dXJuIG5ldyBHKHEpfU9iamVjdC5rZXlzKGopLmZvckVhY2goZnVuY3Rpb24ocSl7altxXS5pZD1LLmZyb20oaltxXS5pZCwiaGV4IiksaltxLnRvTG93ZXJDYXNlKCldPWpbcV19KSxSKFYsSS5Xcml0YWJsZSksVi5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKHEsdGUsbmUpe3Ro'@;
put 'aXMuX2hhc2gudXBkYXRlKHEpLG5lKCl9LFYucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihxLHRlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHEmJihxPUsuZnJvbShxLHRlKSksdGhpcy5faGFzaC51cGRhdGUocSksdGhpc30sVi5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihxLHRlKXt0aGlz'@;
put 'LmVuZCgpO3ZhciBuZT10aGlzLl9oYXNoLmRpZ2VzdCgpLGllPUUobmUscSx0aGlzLl9oYXNoVHlwZSx0aGlzLl9zaWduVHlwZSx0aGlzLl90YWcpO3JldHVybiB0ZT9pZS50b1N0cmluZyh0ZSk6aWV9LFIoRyxJLldyaXRhYmxlKSxHLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24ocSx0ZSxu'@;
put 'ZSl7dGhpcy5faGFzaC51cGRhdGUocSksbmUoKX0sRy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHEsdGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgcSYmKHE9Sy5mcm9tKHEsdGUpKSx0aGlzLl9oYXNoLnVwZGF0ZShxKSx0aGlzfSxHLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24ocSx0'@;
put 'ZSxuZSl7InN0cmluZyI9PXR5cGVvZiB0ZSYmKHRlPUsuZnJvbSh0ZSxuZSkpLHRoaXMuZW5kKCk7dmFyIGllPXRoaXMuX2hhc2guZGlnZXN0KCk7cmV0dXJuIHoodGUsaWUscSx0aGlzLl9zaWduVHlwZSx0aGlzLl90YWcpfSxILmV4cG9ydHM9e1NpZ246VyxWZXJpZnk6VSxjcmVhdGVTaWdu'@;
put 'OlcsY3JlYXRlVmVyaWZ5OlV9fSwyOTU3OihILEIsTCk9Pnt2YXIgSz1MKDk1MDkpLkJ1ZmZlcixKPUwoODM1NSksST1MKDM2NjMpLFI9TCg2OTQ4KS5lYyxFPUwoMzU1MCksej1MKDk4MCksaj1MKDEzMDgpO2Z1bmN0aW9uIFYocSx0ZSxuZSxpZSl7aWYoKHE9Sy5mcm9tKHEudG9BcnJheSgp'@;
put 'KSkubGVuZ3RoPHRlLmJ5dGVMZW5ndGgoKSl7dmFyIGxlPUsuYWxsb2ModGUuYnl0ZUxlbmd0aCgpLXEubGVuZ3RoKTtxPUsuY29uY2F0KFtsZSxxXSl9dmFyIGRlPW5lLmxlbmd0aCx1ZT1mdW5jdGlvbihiLHgpe2I9KGI9RyhiLHgpKS5tb2QoeCk7dmFyIE49Sy5mcm9tKGIudG9BcnJheSgp'@;
put 'KTtpZihOLmxlbmd0aDx4LmJ5dGVMZW5ndGgoKSl7dmFyIEY9Sy5hbGxvYyh4LmJ5dGVMZW5ndGgoKS1OLmxlbmd0aCk7Tj1LLmNvbmNhdChbRixOXSl9cmV0dXJuIE59KG5lLHRlKSxjZT1LLmFsbG9jKGRlKTtjZS5maWxsKDEpO3ZhciBZPUsuYWxsb2MoZGUpO3JldHVybiBZPUooaWUsWSku'@;
put 'dXBkYXRlKGNlKS51cGRhdGUoSy5mcm9tKFswXSkpLnVwZGF0ZShxKS51cGRhdGUodWUpLmRpZ2VzdCgpLGNlPUooaWUsWSkudXBkYXRlKGNlKS5kaWdlc3QoKSx7azpZPUooaWUsWSkudXBkYXRlKGNlKS51cGRhdGUoSy5mcm9tKFsxXSkpLnVwZGF0ZShxKS51cGRhdGUodWUpLmRpZ2VzdCgp'@;
put 'LHY6Y2U9SihpZSxZKS51cGRhdGUoY2UpLmRpZ2VzdCgpfX1mdW5jdGlvbiBHKHEsdGUpe3ZhciBuZT1uZXcgRShxKSxpZT0ocS5sZW5ndGg8PDMpLXRlLmJpdExlbmd0aCgpO3JldHVybiBpZT4wJiZuZS5pc2hybihpZSksbmV9ZnVuY3Rpb24gVyhxLHRlLG5lKXt2YXIgaWUsbGU7ZG97Zm9y'@;
put 'KGllPUsuYWxsb2MoMCk7OCppZS5sZW5ndGg8cS5iaXRMZW5ndGgoKTspdGUudj1KKG5lLHRlLmspLnVwZGF0ZSh0ZS52KS5kaWdlc3QoKSxpZT1LLmNvbmNhdChbaWUsdGUudl0pO2xlPUcoaWUscSksdGUuaz1KKG5lLHRlLmspLnVwZGF0ZSh0ZS52KS51cGRhdGUoSy5mcm9tKFswXSkpLmRp'@;
put 'Z2VzdCgpLHRlLnY9SihuZSx0ZS5rKS51cGRhdGUodGUudikuZGlnZXN0KCl9d2hpbGUoLTEhPT1sZS5jbXAocSkpO3JldHVybiBsZX1mdW5jdGlvbiBVKHEsdGUsbmUsaWUpe3JldHVybiBxLnRvUmVkKEUubW9udChuZSkpLnJlZFBvdyh0ZSkuZnJvbVJlZCgpLm1vZChpZSl9SC5leHBvcnRz'@;
put 'PWZ1bmN0aW9uKHEsdGUsbmUsaWUsbGUpe3ZhciBkZT16KHRlKTtpZihkZS5jdXJ2ZSl7aWYoImVjZHNhIiE9PWllJiYiZWNkc2EvcnNhIiE9PWllKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbihiLHgpe3ZhciBOPWpbeC5jdXJ2ZS5q'@;
put 'b2luKCIuIildO2lmKCFOKXRocm93IG5ldyBFcnJvcigidW5rbm93biBjdXJ2ZSAiK3guY3VydmUuam9pbigiLiIpKTt2YXIgZz1uZXcgUihOKS5rZXlGcm9tUHJpdmF0ZSh4LnByaXZhdGVLZXkpLnNpZ24oYik7cmV0dXJuIEsuZnJvbShnLnRvREVSKCkpfShxLGRlKX1pZigiZHNhIj09PWRl'@;
put 'LnR5cGUpe2lmKCJkc2EiIT09aWUpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwcml2YXRlIGtleSB0eXBlIik7cmV0dXJuIGZ1bmN0aW9uKGIseCxOKXtmb3IodmFyIEYsZz14LnBhcmFtcy5wcml2X2tleSxDPXgucGFyYW1zLnAsTT14LnBhcmFtcy5xLHk9eC5wYXJhbXMuZyxwPW5ldyBFKDAp'@;
put 'LFM9RyhiLE0pLm1vZChNKSxRPSExLHJlPVYoZyxNLGIsTik7ITE9PT1ROylwPVUoeSxGPVcoTSxyZSxOKSxDLE0pLDA9PT0oUT1GLmludm0oTSkuaW11bChTLmFkZChnLm11bChwKSkpLm1vZChNKSkuY21wbigwKSYmKFE9ITEscD1uZXcgRSgwKSk7cmV0dXJuIGZ1bmN0aW9uKGZlLG1lKXtm'@;
put 'ZT1mZS50b0FycmF5KCksbWU9bWUudG9BcnJheSgpLDEyOCZmZVswXSYmKGZlPVswXS5jb25jYXQoZmUpKSwxMjgmbWVbMF0mJihtZT1bMF0uY29uY2F0KG1lKSk7dmFyIFRlPVs0OCxmZS5sZW5ndGgrbWUubGVuZ3RoKzQsMixmZS5sZW5ndGhdO3JldHVybiBUZT1UZS5jb25jYXQoZmUsWzIs'@;
put 'bWUubGVuZ3RoXSxtZSksSy5mcm9tKFRlKX0ocCxRKX0ocSxkZSxuZSl9aWYoInJzYSIhPT1pZSYmImVjZHNhL3JzYSIhPT1pZSl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHByaXZhdGUga2V5IHR5cGUiKTtxPUsuY29uY2F0KFtsZSxxXSk7Zm9yKHZhciB1ZT1kZS5tb2R1bHVzLmJ5dGVMZW5n'@;
put 'dGgoKSxjZT1bMCwxXTtxLmxlbmd0aCtjZS5sZW5ndGgrMTx1ZTspY2UucHVzaCgyNTUpO2NlLnB1c2goMCk7Zm9yKHZhciBZPS0xOysrWTxxLmxlbmd0aDspY2UucHVzaChxW1ldKTtyZXR1cm4gSShjZSxkZSl9LEguZXhwb3J0cy5nZXRLZXk9VixILmV4cG9ydHMubWFrZUtleT1XfSw3NzUz'@;
put 'OihILEIsTCk9Pnt2YXIgSz1MKDk1MDkpLkJ1ZmZlcixKPUwoMzU1MCksST1MKDY5NDgpLmVjLFI9TCg5ODApLEU9TCgxMzA4KTtmdW5jdGlvbiB6KGosVil7aWYoai5jbXBuKDApPD0wKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaWciKTtpZihqLmNtcChWKT49Vil0aHJvdyBuZXcgRXJy'@;
put 'b3IoImludmFsaWQgc2lnIil9SC5leHBvcnRzPWZ1bmN0aW9uKGosVixHLFcsVSl7dmFyIHE9UihHKTtpZigiZWMiPT09cS50eXBlKXtpZigiZWNkc2EiIT09VyYmImVjZHNhL3JzYSIhPT1XKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHVibGljIGtleSB0eXBlIik7cmV0dXJuIGZ1bmN0aW9u'@;
put 'KGNlLFksYil7dmFyIHg9RVtiLmRhdGEuYWxnb3JpdGhtLmN1cnZlLmpvaW4oIi4iKV07aWYoIXgpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGN1cnZlICIrYi5kYXRhLmFsZ29yaXRobS5jdXJ2ZS5qb2luKCIuIikpO3JldHVybiBuZXcgSSh4KS52ZXJpZnkoWSxjZSxiLmRhdGEuc3ViamVj'@;
put 'dFByaXZhdGVLZXkuZGF0YSl9KGosVixxKX1pZigiZHNhIj09PXEudHlwZSl7aWYoImRzYSIhPT1XKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHVibGljIGtleSB0eXBlIik7cmV0dXJuIGZ1bmN0aW9uKGNlLFksYil7dmFyIHg9Yi5kYXRhLnAsTj1iLmRhdGEucSxGPWIuZGF0YS5nLGc9Yi5k'@;
put 'YXRhLnB1Yl9rZXksQz1SLnNpZ25hdHVyZS5kZWNvZGUoY2UsImRlciIpLE09Qy5zLHk9Qy5yO3ooTSxOKSx6KHksTik7dmFyIHA9Si5tb250KHgpLFM9TS5pbnZtKE4pO3JldHVybiAwPT09Ri50b1JlZChwKS5yZWRQb3cobmV3IEooWSkubXVsKFMpLm1vZChOKSkuZnJvbVJlZCgpLm11bChn'@;
put 'LnRvUmVkKHApLnJlZFBvdyh5Lm11bChTKS5tb2QoTikpLmZyb21SZWQoKSkubW9kKHgpLm1vZChOKS5jbXAoeSl9KGosVixxKX1pZigicnNhIiE9PVcmJiJlY2RzYS9yc2EiIT09Vyl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHB1YmxpYyBrZXkgdHlwZSIpO1Y9Sy5jb25jYXQoW1UsVl0pO2Zv'@;
put 'cih2YXIgdGU9cS5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxuZT1bMV0saWU9MDtWLmxlbmd0aCtuZS5sZW5ndGgrMjx0ZTspbmUucHVzaCgyNTUpLGllKys7bmUucHVzaCgwKTtmb3IodmFyIGxlPS0xOysrbGU8Vi5sZW5ndGg7KW5lLnB1c2goVltsZV0pO25lPUsuZnJvbShuZSk7dmFyIGRlPUou'@;
put 'bW9udChxLm1vZHVsdXMpO2o9KGo9bmV3IEooaikudG9SZWQoZGUpKS5yZWRQb3cobmV3IEoocS5wdWJsaWNFeHBvbmVudCkpLGo9Sy5mcm9tKGouZnJvbVJlZCgpLnRvQXJyYXkoKSk7dmFyIHVlPWllPDg/MTowO2Zvcih0ZT1NYXRoLm1pbihqLmxlbmd0aCxuZS5sZW5ndGgpLGoubGVuZ3Ro'@;
put 'IT09bmUubGVuZ3RoJiYodWU9MSksbGU9LTE7KytsZTx0ZTspdWV8PWpbbGVdXm5lW2xlXTtyZXR1cm4gMD09PXVlfX0sNzI5NTooSCxCLEwpPT57dmFyIEs9TCg4NzY0KS5CdWZmZXI7SC5leHBvcnRzPWZ1bmN0aW9uKEosSSl7Zm9yKHZhciBSPU1hdGgubWluKEoubGVuZ3RoLEkubGVuZ3Ro'@;
put 'KSxFPW5ldyBLKFIpLHo9MDt6PFI7Kyt6KUVbel09Slt6XV5JW3pdO3JldHVybiBFfX0sODc2NDooSCxCLEwpPT57InVzZSBzdHJpY3QiO3ZhciBLPUwoNTEwOCk7Y29uc3QgSj1MKDk3NDIpLEk9TCg2NDUpLFI9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmImZ1bmN0aW9uIj09dHlwZW9m'@;
put 'IFN5bWJvbC5mb3I/U3ltYm9sLmZvcigibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20iKTpudWxsO0IuQnVmZmVyPWosQi5TbG93QnVmZmVyPWZ1bmN0aW9uKEVlKXtyZXR1cm4rRWUhPUVlJiYoRWU9MCksai5hbGxvYygrRWUpfSxCLklOU1BFQ1RfTUFYX0JZVEVTPTUwO2NvbnN0IEU9MjE0'@;
put 'NzQ4MzY0NztmdW5jdGlvbiB6KEVlKXtpZihFZT5FKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicrRWUrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpO2NvbnN0IERlPW5ldyBVaW50OEFycmF5KEVlKTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKERlLGou'@;
put 'cHJvdG90eXBlKSxEZX1mdW5jdGlvbiBqKEVlLERlLCRlKXtpZigibnVtYmVyIj09dHlwZW9mIEVlKXtpZigic3RyaW5nIj09dHlwZW9mIERlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAic3RyaW5nIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLiBSZWNlaXZlZCB0eXBlIG51'@;
put 'bWJlcicpO3JldHVybiBXKEVlKX1yZXR1cm4gVihFZSxEZSwkZSl9ZnVuY3Rpb24gVihFZSxEZSwkZSl7aWYoInN0cmluZyI9PXR5cGVvZiBFZSlyZXR1cm4gZnVuY3Rpb24oT3QsUHQpe2lmKCJzdHJpbmciPT10eXBlb2YgUHQmJiIiIT09UHR8fChQdD0idXRmOCIpLCFqLmlzRW5jb2Rpbmco'@;
put 'UHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrUHQpO2NvbnN0IEF0PTB8bmUoT3QsUHQpO2xldCBKdD16KEF0KTtjb25zdCBtbj1KdC53cml0ZShPdCxQdCk7cmV0dXJuIG1uIT09QXQmJihKdD1KdC5zbGljZSgwLG1uKSksSnR9KEVlLERlKTtpZihBcnJheUJ1'@;
put 'ZmZlci5pc1ZpZXcoRWUpKXJldHVybiBmdW5jdGlvbihPdCl7aWYoT2UoT3QsVWludDhBcnJheSkpe2NvbnN0IFB0PW5ldyBVaW50OEFycmF5KE90KTtyZXR1cm4gcShQdC5idWZmZXIsUHQuYnl0ZU9mZnNldCxQdC5ieXRlTGVuZ3RoKX1yZXR1cm4gVShPdCl9KEVlKTtpZihudWxsPT1FZSl0'@;
put 'aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiBFZSk7aWYoT2UoRWUsQXJyYXlCdWZmZXIp'@;
put 'fHxFZSYmT2UoRWUuYnVmZmVyLEFycmF5QnVmZmVyKXx8dHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyPCJ1IiYmKE9lKEVlLFNoYXJlZEFycmF5QnVmZmVyKXx8RWUmJk9lKEVlLmJ1ZmZlcixTaGFyZWRBcnJheUJ1ZmZlcikpKXJldHVybiBxKEVlLERlLCRlKTtpZigibnVtYmVyIj09dHlwZW9m'@;
put 'IEVlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlIG51bWJlcicpO2NvbnN0IGF0PUVlLnZhbHVlT2YmJkVlLnZhbHVlT2YoKTtpZihudWxsIT1hdCYmYXQhPT1FZSlyZXR1cm4gai5mcm9t'@;
put 'KGF0LERlLCRlKTtjb25zdCBjdD1mdW5jdGlvbihPdCl7aWYoai5pc0J1ZmZlcihPdCkpe2NvbnN0IFB0PTB8dGUoT3QubGVuZ3RoKSxBdD16KFB0KTtyZXR1cm4gMD09PUF0Lmxlbmd0aHx8T3QuY29weShBdCwwLDAsUHQpLEF0fXJldHVybiB2b2lkIDAhPT1PdC5sZW5ndGg/Im51bWJlciIh'@;
put 'PXR5cGVvZiBPdC5sZW5ndGh8fGV0KE90Lmxlbmd0aCk/eigwKTpVKE90KToiQnVmZmVyIj09PU90LnR5cGUmJkFycmF5LmlzQXJyYXkoT3QuZGF0YSk/VShPdC5kYXRhKTp2b2lkIDB9KEVlKTtpZihjdClyZXR1cm4gY3Q7aWYodHlwZW9mIFN5bWJvbDwidSImJm51bGwhPVN5bWJvbC50b1By'@;
put 'aW1pdGl2ZSYmImZ1bmN0aW9uIj09dHlwZW9mIEVlW1N5bWJvbC50b1ByaW1pdGl2ZV0pcmV0dXJuIGouZnJvbShFZVtTeW1ib2wudG9QcmltaXRpdmVdKCJzdHJpbmciKSxEZSwkZSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUg'@;
put 'c3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgRWUpfWZ1bmN0aW9uIEcoRWUpe2lmKCJudW1iZXIiIT10eXBlb2YgRWUpdGhyb3cgbmV3IFR5cGVFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3Qg'@;
put 'YmUgb2YgdHlwZSBudW1iZXInKTtpZihFZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicrRWUrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpfWZ1bmN0aW9uIFcoRWUpe3JldHVybiBHKEVlKSx6KEVlPDA/MDowfHRlKEVlKSl9ZnVuY3Rpb24gVShFZSl7Y29u'@;
put 'c3QgRGU9RWUubGVuZ3RoPDA/MDowfHRlKEVlLmxlbmd0aCksJGU9eihEZSk7Zm9yKGxldCBhdD0wO2F0PERlO2F0Kz0xKSRlW2F0XT0yNTUmRWVbYXRdO3JldHVybiAkZX1mdW5jdGlvbiBxKEVlLERlLCRlKXtpZihEZTwwfHxFZS5ieXRlTGVuZ3RoPERlKXRocm93IG5ldyBSYW5nZUVycm9y'@;
put 'KCcib2Zmc2V0IiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTtpZihFZS5ieXRlTGVuZ3RoPERlKygkZXx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJsZW5ndGgiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpO2xldCBhdDtyZXR1cm4gYXQ9dm9pZCAwPT09RGUmJnZvaWQg'@;
put 'MD09PSRlP25ldyBVaW50OEFycmF5KEVlKTp2b2lkIDA9PT0kZT9uZXcgVWludDhBcnJheShFZSxEZSk6bmV3IFVpbnQ4QXJyYXkoRWUsRGUsJGUpLE9iamVjdC5zZXRQcm90b3R5cGVPZihhdCxqLnByb3RvdHlwZSksYXR9ZnVuY3Rpb24gdGUoRWUpe2lmKEVlPj1FKXRocm93IG5ldyBSYW5n'@;
put 'ZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4IitFLnRvU3RyaW5nKDE2KSsiIGJ5dGVzIik7cmV0dXJuIDB8RWV9ZnVuY3Rpb24gbmUoRWUsRGUpe2lmKGouaXNCdWZmZXIoRWUpKXJldHVybiBFZS5sZW5ndGg7aWYoQXJyYXlC'@;
put 'dWZmZXIuaXNWaWV3KEVlKXx8T2UoRWUsQXJyYXlCdWZmZXIpKXJldHVybiBFZS5ieXRlTGVuZ3RoO2lmKCJzdHJpbmciIT10eXBlb2YgRWUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJzdHJpbmciIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIG9yIEFy'@;
put 'cmF5QnVmZmVyLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIEVlKTtjb25zdCAkZT1FZS5sZW5ndGgsYXQ9YXJndW1lbnRzLmxlbmd0aD4yJiYhMD09PWFyZ3VtZW50c1syXTtpZighYXQmJjA9PT0kZSlyZXR1cm4gMDtsZXQgY3Q9ITE7Zm9yKDs7KXN3aXRjaChEZSl7Y2FzZSJhc2NpaSI6Y2Fz'@;
put 'ZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gJGU7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gS2UoRWUpLmxlbmd0aDtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIDIqJGU7Y2FzZSJoZXgiOnJldHVybiAkZT4+PjE7'@;
put 'Y2FzZSJiYXNlNjQiOnJldHVybiB3ZShFZSkubGVuZ3RoO2RlZmF1bHQ6aWYoY3QpcmV0dXJuIGF0Py0xOktlKEVlKS5sZW5ndGg7RGU9KCIiK0RlKS50b0xvd2VyQ2FzZSgpLGN0PSEwfX1mdW5jdGlvbiBpZShFZSxEZSwkZSl7bGV0IGF0PSExO2lmKCh2b2lkIDA9PT1EZXx8RGU8MCkmJihE'@;
put 'ZT0wKSxEZT50aGlzLmxlbmd0aHx8KCh2b2lkIDA9PT0kZXx8JGU+dGhpcy5sZW5ndGgpJiYoJGU9dGhpcy5sZW5ndGgpLCRlPD0wKXx8KCRlPj4+PTApPD0oRGU+Pj49MCkpcmV0dXJuIiI7Zm9yKEVlfHwoRWU9InV0ZjgiKTs7KXN3aXRjaChFZSl7Y2FzZSJoZXgiOnJldHVybiBwKHRoaXMs'@;
put 'RGUsJGUpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIGcodGhpcyxEZSwkZSk7Y2FzZSJhc2NpaSI6cmV0dXJuIE0odGhpcyxEZSwkZSk7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4geSh0aGlzLERlLCRlKTtjYXNlImJhc2U2NCI6cmV0dXJuIEYodGhpcyxEZSwkZSk7'@;
put 'Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBTKHRoaXMsRGUsJGUpO2RlZmF1bHQ6aWYoYXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitFZSk7RWU9KEVlKyIiKS50b0xvd2VyQ2FzZSgpLGF0PSEwfX1m'@;
put 'dW5jdGlvbiBsZShFZSxEZSwkZSl7Y29uc3QgYXQ9RWVbRGVdO0VlW0RlXT1FZVskZV0sRWVbJGVdPWF0fWZ1bmN0aW9uIGRlKEVlLERlLCRlLGF0LGN0KXtpZigwPT09RWUubGVuZ3RoKXJldHVybi0xO2lmKCJzdHJpbmciPT10eXBlb2YgJGU/KGF0PSRlLCRlPTApOiRlPjIxNDc0ODM2NDc/'@;
put 'JGU9MjE0NzQ4MzY0NzokZTwtMjE0NzQ4MzY0OCYmKCRlPS0yMTQ3NDgzNjQ4KSxldCgkZT0rJGUpJiYoJGU9Y3Q/MDpFZS5sZW5ndGgtMSksJGU8MCYmKCRlPUVlLmxlbmd0aCskZSksJGU+PUVlLmxlbmd0aCl7aWYoY3QpcmV0dXJuLTE7JGU9RWUubGVuZ3RoLTF9ZWxzZSBpZigkZTwwKXtp'@;
put 'ZighY3QpcmV0dXJuLTE7JGU9MH1pZigic3RyaW5nIj09dHlwZW9mIERlJiYoRGU9ai5mcm9tKERlLGF0KSksai5pc0J1ZmZlcihEZSkpcmV0dXJuIDA9PT1EZS5sZW5ndGg/LTE6dWUoRWUsRGUsJGUsYXQsY3QpO2lmKCJudW1iZXIiPT10eXBlb2YgRGUpcmV0dXJuIERlJj0yNTUsImZ1bmN0'@;
put 'aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/Y3Q/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKEVlLERlLCRlKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKEVlLERlLCRlKTp1ZShFZSxbRGVdLCRlLGF0LGN0KTt0aHJvdyBu'@;
put 'ZXcgVHlwZUVycm9yKCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXIiKX1mdW5jdGlvbiB1ZShFZSxEZSwkZSxhdCxjdCl7bGV0IE90LFB0PTEsQXQ9RWUubGVuZ3RoLEp0PURlLmxlbmd0aDtpZih2b2lkIDAhPT1hdCYmKCJ1Y3MyIj09PShhdD1TdHJpbmcoYXQpLnRvTG93'@;
put 'ZXJDYXNlKCkpfHwidWNzLTIiPT09YXR8fCJ1dGYxNmxlIj09PWF0fHwidXRmLTE2bGUiPT09YXQpKXtpZihFZS5sZW5ndGg8Mnx8RGUubGVuZ3RoPDIpcmV0dXJuLTE7UHQ9MixBdC89MixKdC89MiwkZS89Mn1mdW5jdGlvbiBtbihOdCxibil7cmV0dXJuIDE9PT1QdD9OdFtibl06TnQucmVh'@;
put 'ZFVJbnQxNkJFKGJuKlB0KX1pZihjdCl7bGV0IE50PS0xO2ZvcihPdD0kZTtPdDxBdDtPdCsrKWlmKG1uKEVlLE90KT09PW1uKERlLC0xPT09TnQ/MDpPdC1OdCkpe2lmKC0xPT09TnQmJihOdD1PdCksT3QtTnQrMT09PUp0KXJldHVybiBOdCpQdH1lbHNlLTEhPT1OdCYmKE90LT1PdC1OdCks'@;
put 'TnQ9LTF9ZWxzZSBmb3IoJGUrSnQ+QXQmJigkZT1BdC1KdCksT3Q9JGU7T3Q+PTA7T3QtLSl7bGV0IE50PSEwO2ZvcihsZXQgYm49MDtibjxKdDtibisrKWlmKG1uKEVlLE90K2JuKSE9PW1uKERlLGJuKSl7TnQ9ITE7YnJlYWt9aWYoTnQpcmV0dXJuIE90fXJldHVybi0xfWZ1bmN0aW9uIGNl'@;
put 'KEVlLERlLCRlLGF0KXskZT1OdW1iZXIoJGUpfHwwO2NvbnN0IGN0PUVlLmxlbmd0aC0kZTthdD8oYXQ9TnVtYmVyKGF0KSk+Y3QmJihhdD1jdCk6YXQ9Y3Q7Y29uc3QgT3Q9RGUubGVuZ3RoO2xldCBQdDtmb3IoYXQ+T3QvMiYmKGF0PU90LzIpLFB0PTA7UHQ8YXQ7KytQdCl7Y29uc3QgQXQ9'@;
put 'cGFyc2VJbnQoRGUuc3Vic3RyKDIqUHQsMiksMTYpO2lmKGV0KEF0KSlyZXR1cm4gUHQ7RWVbJGUrUHRdPUF0fXJldHVybiBQdH1mdW5jdGlvbiBZKEVlLERlLCRlLGF0KXtyZXR1cm4gSWUoS2UoRGUsRWUubGVuZ3RoLSRlKSxFZSwkZSxhdCl9ZnVuY3Rpb24gYihFZSxEZSwkZSxhdCl7cmV0'@;
put 'dXJuIEllKGZ1bmN0aW9uKGN0KXtjb25zdCBPdD1bXTtmb3IobGV0IFB0PTA7UHQ8Y3QubGVuZ3RoOysrUHQpT3QucHVzaCgyNTUmY3QuY2hhckNvZGVBdChQdCkpO3JldHVybiBPdH0oRGUpLEVlLCRlLGF0KX1mdW5jdGlvbiB4KEVlLERlLCRlLGF0KXtyZXR1cm4gSWUod2UoRGUpLEVlLCRl'@;
put 'LGF0KX1mdW5jdGlvbiBOKEVlLERlLCRlLGF0KXtyZXR1cm4gSWUoZnVuY3Rpb24oY3QsT3Qpe2xldCBQdCxBdCxKdDtjb25zdCBtbj1bXTtmb3IobGV0IE50PTA7TnQ8Y3QubGVuZ3RoJiYhKChPdC09Mik8MCk7KytOdClQdD1jdC5jaGFyQ29kZUF0KE50KSxBdD1QdD4+OCxKdD1QdCUyNTYs'@;
put 'bW4ucHVzaChKdCksbW4ucHVzaChBdCk7cmV0dXJuIG1ufShEZSxFZS5sZW5ndGgtJGUpLEVlLCRlLGF0KX1mdW5jdGlvbiBGKEVlLERlLCRlKXtyZXR1cm4gSi5mcm9tQnl0ZUFycmF5KDA9PT1EZSYmJGU9PT1FZS5sZW5ndGg/RWU6RWUuc2xpY2UoRGUsJGUpKX1mdW5jdGlvbiBnKEVlLERl'@;
put 'LCRlKXskZT1NYXRoLm1pbihFZS5sZW5ndGgsJGUpO2NvbnN0IGF0PVtdO2xldCBjdD1EZTtmb3IoO2N0PCRlOyl7Y29uc3QgT3Q9RWVbY3RdO2xldCBQdD1udWxsLEF0PU90PjIzOT80Ok90PjIyMz8zOk90PjE5MT8yOjE7aWYoY3QrQXQ8PSRlKXtsZXQgSnQsbW4sTnQsYm47c3dpdGNoKEF0'@;
put 'KXtjYXNlIDE6T3Q8MTI4JiYoUHQ9T3QpO2JyZWFrO2Nhc2UgMjpKdD1FZVtjdCsxXSwxMjg9PSgxOTImSnQpJiYoYm49KDMxJk90KTw8Nnw2MyZKdCxibj4xMjcmJihQdD1ibikpO2JyZWFrO2Nhc2UgMzpKdD1FZVtjdCsxXSxtbj1FZVtjdCsyXSwxMjg9PSgxOTImSnQpJiYxMjg9PSgxOTIm'@;
put 'bW4pJiYoYm49KDE1Jk90KTw8MTJ8KDYzJkp0KTw8Nnw2MyZtbixibj4yMDQ3JiYoYm48NTUyOTZ8fGJuPjU3MzQzKSYmKFB0PWJuKSk7YnJlYWs7Y2FzZSA0Okp0PUVlW2N0KzFdLG1uPUVlW2N0KzJdLE50PUVlW2N0KzNdLDEyOD09KDE5MiZKdCkmJjEyOD09KDE5MiZtbikmJjEyOD09KDE5'@;
put 'MiZOdCkmJihibj0oMTUmT3QpPDwxOHwoNjMmSnQpPDwxMnwoNjMmbW4pPDw2fDYzJk50LGJuPjY1NTM1JiZibjwxMTE0MTEyJiYoUHQ9Ym4pKX19bnVsbD09PVB0PyhQdD02NTUzMyxBdD0xKTpQdD42NTUzNSYmKFB0LT02NTUzNixhdC5wdXNoKFB0Pj4+MTAmMTAyM3w1NTI5NiksUHQ9NTYz'@;
put 'MjB8MTAyMyZQdCksYXQucHVzaChQdCksY3QrPUF0fXJldHVybiBmdW5jdGlvbihPdCl7Y29uc3QgUHQ9T3QubGVuZ3RoO2lmKFB0PD1DKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxPdCk7bGV0IEF0PSIiLEp0PTA7Zm9yKDtKdDxQdDspQXQrPVN0cmluZy5mcm9t'@;
put 'Q2hhckNvZGUuYXBwbHkoU3RyaW5nLE90LnNsaWNlKEp0LEp0Kz1DKSk7cmV0dXJuIEF0fShhdCl9Qi5rTWF4TGVuZ3RoPUUsKGouVFlQRURfQVJSQVlfU1VQUE9SVD1mdW5jdGlvbigpe3RyeXtjb25zdCBFZT1uZXcgVWludDhBcnJheSgxKSxEZT17Zm9vOmZ1bmN0aW9uKCl7cmV0dXJuIDQy'@;
put 'fX07cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihEZSxVaW50OEFycmF5LnByb3RvdHlwZSksT2JqZWN0LnNldFByb3RvdHlwZU9mKEVlLERlKSw0Mj09PUVlLmZvbygpfWNhdGNoe3JldHVybiExfX0oKSl8fHZvaWQgMD09PUt8fCJmdW5jdGlvbiIhPXR5cGVvZiBLLmVycm9yfHxLLmVy'@;
put 'cm9yKCJUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgYGJ1ZmZlcmAgdjUueC4gVXNlIGBidWZmZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3VwcG9ydC4iKSxPYmplY3QuZGVmaW5lUHJv'@;
put 'cGVydHkoai5wcm90b3R5cGUsInBhcmVudCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYoai5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5idWZmZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGoucHJvdG90eXBlLCJvZmZzZXQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5j'@;
put 'dGlvbigpe2lmKGouaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnl0ZU9mZnNldH19KSxqLnBvb2xTaXplPTgxOTIsai5mcm9tPWZ1bmN0aW9uKEVlLERlLCRlKXtyZXR1cm4gVihFZSxEZSwkZSl9LE9iamVjdC5zZXRQcm90b3R5cGVPZihqLnByb3RvdHlwZSxVaW50OEFycmF5LnByb3Rv'@;
put 'dHlwZSksT2JqZWN0LnNldFByb3RvdHlwZU9mKGosVWludDhBcnJheSksai5hbGxvYz1mdW5jdGlvbihFZSxEZSwkZSl7cmV0dXJuIGN0PURlLE90PSRlLEcoYXQ9RWUpLGF0PD0wP3ooYXQpOnZvaWQgMCE9PWN0PyJzdHJpbmciPT10eXBlb2YgT3Q/eihhdCkuZmlsbChjdCxPdCk6eihhdCku'@;
put 'ZmlsbChjdCk6eihhdCk7dmFyIGF0LGN0LE90fSxqLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKEVlKXtyZXR1cm4gVyhFZSl9LGouYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKEVlKXtyZXR1cm4gVyhFZSl9LGouaXNCdWZmZXI9ZnVuY3Rpb24oRWUpe3JldHVybiBudWxsIT1FZSYmITA9PT1FZS5f'@;
put 'aXNCdWZmZXImJkVlIT09ai5wcm90b3R5cGV9LGouY29tcGFyZT1mdW5jdGlvbihFZSxEZSl7aWYoT2UoRWUsVWludDhBcnJheSkmJihFZT1qLmZyb20oRWUsRWUub2Zmc2V0LEVlLmJ5dGVMZW5ndGgpKSxPZShEZSxVaW50OEFycmF5KSYmKERlPWouZnJvbShEZSxEZS5vZmZzZXQsRGUuYnl0'@;
put 'ZUxlbmd0aCkpLCFqLmlzQnVmZmVyKEVlKXx8IWouaXNCdWZmZXIoRGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiYnVmMSIsICJidWYyIiBhcmd1bWVudHMgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheScpO2lmKEVlPT09RGUpcmV0dXJuIDA7bGV0ICRlPUVl'@;
put 'Lmxlbmd0aCxhdD1EZS5sZW5ndGg7Zm9yKGxldCBjdD0wLE90PU1hdGgubWluKCRlLGF0KTtjdDxPdDsrK2N0KWlmKEVlW2N0XSE9PURlW2N0XSl7JGU9RWVbY3RdLGF0PURlW2N0XTticmVha31yZXR1cm4gJGU8YXQ/LTE6YXQ8JGU/MTowfSxqLmlzRW5jb2Rpbmc9ZnVuY3Rpb24oRWUpe3N3'@;
put 'aXRjaChTdHJpbmcoRWUpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxl'@;
put 'IjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0sai5jb25jYXQ9ZnVuY3Rpb24oRWUsRGUpe2lmKCFBcnJheS5pc0FycmF5KEVlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PUVlLmxlbmd0aClyZXR1'@;
put 'cm4gai5hbGxvYygwKTtsZXQgJGU7aWYodm9pZCAwPT09RGUpZm9yKERlPTAsJGU9MDskZTxFZS5sZW5ndGg7KyskZSlEZSs9RWVbJGVdLmxlbmd0aDtjb25zdCBhdD1qLmFsbG9jVW5zYWZlKERlKTtsZXQgY3Q9MDtmb3IoJGU9MDskZTxFZS5sZW5ndGg7KyskZSl7bGV0IE90PUVlWyRlXTtp'@;
put 'ZihPZShPdCxVaW50OEFycmF5KSljdCtPdC5sZW5ndGg+YXQubGVuZ3RoPyhqLmlzQnVmZmVyKE90KXx8KE90PWouZnJvbShPdCkpLE90LmNvcHkoYXQsY3QpKTpVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChhdCxPdCxjdCk7ZWxzZXtpZighai5pc0J1ZmZlcihPdCkpdGhyb3cgbmV3'@;
put 'IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO090LmNvcHkoYXQsY3QpfWN0Kz1PdC5sZW5ndGh9cmV0dXJuIGF0fSxqLmJ5dGVMZW5ndGg9bmUsai5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLGoucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlv'@;
put 'bigpe2NvbnN0IEVlPXRoaXMubGVuZ3RoO2lmKEVlJTIhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzIik7Zm9yKGxldCBEZT0wO0RlPEVlO0RlKz0yKWxlKHRoaXMsRGUsRGUrMSk7cmV0dXJuIHRoaXN9LGoucHJvdG90'@;
put 'eXBlLnN3YXAzMj1mdW5jdGlvbigpe2NvbnN0IEVlPXRoaXMubGVuZ3RoO2lmKEVlJTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKGxldCBEZT0wO0RlPEVlO0RlKz00KWxlKHRoaXMsRGUsRGUrMyksbGUo'@;
put 'dGhpcyxEZSsxLERlKzIpO3JldHVybiB0aGlzfSxqLnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24oKXtjb25zdCBFZT10aGlzLmxlbmd0aDtpZihFZSU4IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cyIpO2ZvcihsZXQg'@;
put 'RGU9MDtEZTxFZTtEZSs9OClsZSh0aGlzLERlLERlKzcpLGxlKHRoaXMsRGUrMSxEZSs2KSxsZSh0aGlzLERlKzIsRGUrNSksbGUodGhpcyxEZSszLERlKzQpO3JldHVybiB0aGlzfSxqLnByb3RvdHlwZS50b0xvY2FsZVN0cmluZz1qLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe2Nv'@;
put 'bnN0IEVlPXRoaXMubGVuZ3RoO3JldHVybiAwPT09RWU/IiI6MD09PWFyZ3VtZW50cy5sZW5ndGg/Zyh0aGlzLDAsRWUpOmllLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sai5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKEVlKXtpZighai5pc0J1ZmZlcihFZSkpdGhyb3cgbmV3IFR5cGVFcnJv'@;
put 'cigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3JldHVybiB0aGlzPT09RWV8fDA9PT1qLmNvbXBhcmUodGhpcyxFZSl9LGoucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtsZXQgRWU9IiI7Y29uc3QgRGU9Qi5JTlNQRUNUX01BWF9CWVRFUztyZXR1cm4gRWU9dGhpcy50b1N0cmlu'@;
put 'ZygiaGV4IiwwLERlKS5yZXBsYWNlKC8oLnsyfSkvZywiJDEgIikudHJpbSgpLHRoaXMubGVuZ3RoPkRlJiYoRWUrPSIgLi4uICIpLCI8QnVmZmVyICIrRWUrIj4ifSxSJiYoai5wcm90b3R5cGVbUl09ai5wcm90b3R5cGUuaW5zcGVjdCksai5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbihF'@;
put 'ZSxEZSwkZSxhdCxjdCl7aWYoT2UoRWUsVWludDhBcnJheSkmJihFZT1qLmZyb20oRWUsRWUub2Zmc2V0LEVlLmJ5dGVMZW5ndGgpKSwhai5pc0J1ZmZlcihFZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ0YXJnZXQiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9y'@;
put 'IFVpbnQ4QXJyYXkuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgRWUpO2lmKHZvaWQgMD09PURlJiYoRGU9MCksdm9pZCAwPT09JGUmJigkZT1FZT9FZS5sZW5ndGg6MCksdm9pZCAwPT09YXQmJihhdD0wKSx2b2lkIDA9PT1jdCYmKGN0PXRoaXMubGVuZ3RoKSxEZTwwfHwkZT5FZS5sZW5ndGh8'@;
put 'fGF0PDB8fGN0PnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJvdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihhdD49Y3QmJkRlPj0kZSlyZXR1cm4gMDtpZihhdD49Y3QpcmV0dXJuLTE7aWYoRGU+PSRlKXJldHVybiAxO2lmKHRoaXM9PT1FZSlyZXR1cm4gMDtsZXQgT3Q9KGN0Pj4+'@;
put 'PTApLShhdD4+Pj0wKSxQdD0oJGU+Pj49MCktKERlPj4+PTApO2NvbnN0IEF0PU1hdGgubWluKE90LFB0KSxKdD10aGlzLnNsaWNlKGF0LGN0KSxtbj1FZS5zbGljZShEZSwkZSk7Zm9yKGxldCBOdD0wO050PEF0OysrTnQpaWYoSnRbTnRdIT09bW5bTnRdKXtPdD1KdFtOdF0sUHQ9bW5bTnRd'@;
put 'O2JyZWFrfXJldHVybiBPdDxQdD8tMTpQdDxPdD8xOjB9LGoucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKEVlLERlLCRlKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihFZSxEZSwkZSl9LGoucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oRWUsRGUsJGUpe3JldHVybiBkZSh0aGlzLEVl'@;
put 'LERlLCRlLCEwKX0sai5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24oRWUsRGUsJGUpe3JldHVybiBkZSh0aGlzLEVlLERlLCRlLCExKX0sai5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oRWUsRGUsJGUsYXQpe2lmKHZvaWQgMD09PURlKWF0PSJ1dGY4IiwkZT10aGlzLmxlbmd0aCxE'@;
put 'ZT0wO2Vsc2UgaWYodm9pZCAwPT09JGUmJiJzdHJpbmciPT10eXBlb2YgRGUpYXQ9RGUsJGU9dGhpcy5sZW5ndGgsRGU9MDtlbHNle2lmKCFpc0Zpbml0ZShEZSkpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8g'@;
put 'bG9uZ2VyIHN1cHBvcnRlZCIpO0RlPj4+PTAsaXNGaW5pdGUoJGUpPygkZT4+Pj0wLHZvaWQgMD09PWF0JiYoYXQ9InV0ZjgiKSk6KGF0PSRlLCRlPXZvaWQgMCl9Y29uc3QgY3Q9dGhpcy5sZW5ndGgtRGU7aWYoKHZvaWQgMD09PSRlfHwkZT5jdCkmJigkZT1jdCksRWUubGVuZ3RoPjAmJigk'@;
put 'ZTwwfHxEZTwwKXx8RGU+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7YXR8fChhdD0idXRmOCIpO2xldCBPdD0hMTtmb3IoOzspc3dpdGNoKGF0KXtjYXNlImhleCI6cmV0dXJuIGNlKHRoaXMsRWUsRGUs'@;
put 'JGUpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIFkodGhpcyxFZSxEZSwkZSk7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gYih0aGlzLEVlLERlLCRlKTtjYXNlImJhc2U2NCI6cmV0dXJuIHgodGhpcyxFZSxEZSwkZSk7Y2FzZSJ1Y3MyIjpjYXNl'@;
put 'InVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBOKHRoaXMsRWUsRGUsJGUpO2RlZmF1bHQ6aWYoT3QpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIithdCk7YXQ9KCIiK2F0KS50b0xvd2VyQ2FzZSgpLE90PSEwfX0sai5wcm90b3R5cGUu'@;
put 'dG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IkJ1ZmZlciIsZGF0YTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnJ8fHRoaXMsMCl9fTtjb25zdCBDPTQwOTY7ZnVuY3Rpb24gTShFZSxEZSwkZSl7bGV0IGF0PSIiOyRlPU1hdGgubWluKEVlLmxlbmd0aCwkZSk7Zm9y'@;
put 'KGxldCBjdD1EZTtjdDwkZTsrK2N0KWF0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKDEyNyZFZVtjdF0pO3JldHVybiBhdH1mdW5jdGlvbiB5KEVlLERlLCRlKXtsZXQgYXQ9IiI7JGU9TWF0aC5taW4oRWUubGVuZ3RoLCRlKTtmb3IobGV0IGN0PURlO2N0PCRlOysrY3QpYXQrPVN0cmluZy5mcm9t'@;
put 'Q2hhckNvZGUoRWVbY3RdKTtyZXR1cm4gYXR9ZnVuY3Rpb24gcChFZSxEZSwkZSl7Y29uc3QgYXQ9RWUubGVuZ3RoOyghRGV8fERlPDApJiYoRGU9MCksKCEkZXx8JGU8MHx8JGU+YXQpJiYoJGU9YXQpO2xldCBjdD0iIjtmb3IobGV0IE90PURlO090PCRlOysrT3QpY3QrPW50W0VlW090XV07'@;
put 'cmV0dXJuIGN0fWZ1bmN0aW9uIFMoRWUsRGUsJGUpe2NvbnN0IGF0PUVlLnNsaWNlKERlLCRlKTtsZXQgY3Q9IiI7Zm9yKGxldCBPdD0wO090PGF0Lmxlbmd0aC0xO090Kz0yKWN0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKGF0W090XSsyNTYqYXRbT3QrMV0pO3JldHVybiBjdH1mdW5jdGlvbiBR'@;
put 'KEVlLERlLCRlKXtpZihFZSUxIT0wfHxFZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgaXMgbm90IHVpbnQiKTtpZihFZStEZT4kZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCIpfWZ1bmN0aW9uIHJlKEVlLERlLCRl'@;
put 'LGF0LGN0LE90KXtpZighai5pc0J1ZmZlcihFZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZmZlciIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKERlPmN0fHxEZTxPdCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInZhbHVlIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91'@;
put 'bmRzJyk7aWYoJGUrYXQ+RWUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBmZShFZSxEZSwkZSxhdCxjdCl7QmUoRGUsYXQsY3QsRWUsJGUsNyk7bGV0IE90PU51bWJlcihEZSZCaWdJbnQoNDI5NDk2NzI5NSkpO0VlWyRlKytdPU90'@;
put 'LE90Pj49OCxFZVskZSsrXT1PdCxPdD4+PTgsRWVbJGUrK109T3QsT3Q+Pj04LEVlWyRlKytdPU90O2xldCBQdD1OdW1iZXIoRGU+PkJpZ0ludCgzMikmQmlnSW50KDQyOTQ5NjcyOTUpKTtyZXR1cm4gRWVbJGUrK109UHQsUHQ+Pj04LEVlWyRlKytdPVB0LFB0Pj49OCxFZVskZSsrXT1QdCxQ'@;
put 'dD4+PTgsRWVbJGUrK109UHQsJGV9ZnVuY3Rpb24gbWUoRWUsRGUsJGUsYXQsY3Qpe0JlKERlLGF0LGN0LEVlLCRlLDcpO2xldCBPdD1OdW1iZXIoRGUmQmlnSW50KDQyOTQ5NjcyOTUpKTtFZVskZSs3XT1PdCxPdD4+PTgsRWVbJGUrNl09T3QsT3Q+Pj04LEVlWyRlKzVdPU90LE90Pj49OCxF'@;
put 'ZVskZSs0XT1PdDtsZXQgUHQ9TnVtYmVyKERlPj5CaWdJbnQoMzIpJkJpZ0ludCg0Mjk0OTY3Mjk1KSk7cmV0dXJuIEVlWyRlKzNdPVB0LFB0Pj49OCxFZVskZSsyXT1QdCxQdD4+PTgsRWVbJGUrMV09UHQsUHQ+Pj04LEVlWyRlXT1QdCwkZSs4fWZ1bmN0aW9uIGtlKEVlLERlLCRlLGF0LGN0'@;
put 'LE90KXtpZigkZSthdD5FZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKCRlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIFRlKEVlLERlLCRlLGF0LGN0KXtyZXR1cm4gRGU9K0RlLCRlPj4+'@;
put 'PTAsY3R8fGtlKEVlLDAsJGUsNCksSS53cml0ZShFZSxEZSwkZSxhdCwyMyw0KSwkZSs0fWZ1bmN0aW9uIFBlKEVlLERlLCRlLGF0LGN0KXtyZXR1cm4gRGU9K0RlLCRlPj4+PTAsY3R8fGtlKEVlLDAsJGUsOCksSS53cml0ZShFZSxEZSwkZSxhdCw1Miw4KSwkZSs4fWoucHJvdG90eXBlLnNs'@;
put 'aWNlPWZ1bmN0aW9uKEVlLERlKXtjb25zdCAkZT10aGlzLmxlbmd0aDsoRWU9fn5FZSk8MD8oRWUrPSRlKTwwJiYoRWU9MCk6RWU+JGUmJihFZT0kZSksKERlPXZvaWQgMD09PURlPyRlOn5+RGUpPDA/KERlKz0kZSk8MCYmKERlPTApOkRlPiRlJiYoRGU9JGUpLERlPEVlJiYoRGU9RWUpO2Nv'@;
put 'bnN0IGF0PXRoaXMuc3ViYXJyYXkoRWUsRGUpO3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YoYXQsai5wcm90b3R5cGUpLGF0fSxqLnByb3RvdHlwZS5yZWFkVWludExFPWoucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24oRWUsRGUsJGUpe0VlPj4+PTAsRGU+Pj49MCwkZXx8UShF'@;
put 'ZSxEZSx0aGlzLmxlbmd0aCk7bGV0IGF0PXRoaXNbRWVdLGN0PTEsT3Q9MDtmb3IoOysrT3Q8RGUmJihjdCo9MjU2KTspYXQrPXRoaXNbRWUrT3RdKmN0O3JldHVybiBhdH0sai5wcm90b3R5cGUucmVhZFVpbnRCRT1qLnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKEVlLERlLCRlKXtF'@;
put 'ZT4+Pj0wLERlPj4+PTAsJGV8fFEoRWUsRGUsdGhpcy5sZW5ndGgpO2xldCBhdD10aGlzW0VlKy0tRGVdLGN0PTE7Zm9yKDtEZT4wJiYoY3QqPTI1Nik7KWF0Kz10aGlzW0VlKy0tRGVdKmN0O3JldHVybiBhdH0sai5wcm90b3R5cGUucmVhZFVpbnQ4PWoucHJvdG90eXBlLnJlYWRVSW50OD1m'@;
put 'dW5jdGlvbihFZSxEZSl7cmV0dXJuIEVlPj4+PTAsRGV8fFEoRWUsMSx0aGlzLmxlbmd0aCksdGhpc1tFZV19LGoucHJvdG90eXBlLnJlYWRVaW50MTZMRT1qLnByb3RvdHlwZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24oRWUsRGUpe3JldHVybiBFZT4+Pj0wLERlfHxRKEVlLDIsdGhpcy5sZW5n'@;
put 'dGgpLHRoaXNbRWVdfHRoaXNbRWUrMV08PDh9LGoucHJvdG90eXBlLnJlYWRVaW50MTZCRT1qLnByb3RvdHlwZS5yZWFkVUludDE2QkU9ZnVuY3Rpb24oRWUsRGUpe3JldHVybiBFZT4+Pj0wLERlfHxRKEVlLDIsdGhpcy5sZW5ndGgpLHRoaXNbRWVdPDw4fHRoaXNbRWUrMV19LGoucHJvdG90'@;
put 'eXBlLnJlYWRVaW50MzJMRT1qLnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24oRWUsRGUpe3JldHVybiBFZT4+Pj0wLERlfHxRKEVlLDQsdGhpcy5sZW5ndGgpLCh0aGlzW0VlXXx0aGlzW0VlKzFdPDw4fHRoaXNbRWUrMl08PDE2KSsxNjc3NzIxNip0aGlzW0VlKzNdfSxqLnByb3Rv'@;
put 'dHlwZS5yZWFkVWludDMyQkU9ai5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKEVlLERlKXtyZXR1cm4gRWU+Pj49MCxEZXx8UShFZSw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW0VlXSsodGhpc1tFZSsxXTw8MTZ8dGhpc1tFZSsyXTw8OHx0aGlzW0VlKzNdKX0sai5wcm90'@;
put 'b3R5cGUucmVhZEJpZ1VJbnQ2NExFPXFlKGZ1bmN0aW9uKEVlKXtIZShFZT4+Pj0wLCJvZmZzZXQiKTtjb25zdCBEZT10aGlzW0VlXSwkZT10aGlzW0VlKzddO3ZvaWQgMCE9PURlJiZ2b2lkIDAhPT0kZXx8UWUoRWUsdGhpcy5sZW5ndGgtOCk7Y29uc3QgYXQ9RGUrMjU2KnRoaXNbKytFZV0r'@;
put 'NjU1MzYqdGhpc1srK0VlXSt0aGlzWysrRWVdKjIqKjI0LGN0PXRoaXNbKytFZV0rMjU2KnRoaXNbKytFZV0rNjU1MzYqdGhpc1srK0VlXSskZSoyKioyNDtyZXR1cm4gQmlnSW50KGF0KSsoQmlnSW50KGN0KTw8QmlnSW50KDMyKSl9KSxqLnByb3RvdHlwZS5yZWFkQmlnVUludDY0QkU9cWUo'@;
put 'ZnVuY3Rpb24oRWUpe0hlKEVlPj4+PTAsIm9mZnNldCIpO2NvbnN0IERlPXRoaXNbRWVdLCRlPXRoaXNbRWUrN107dm9pZCAwIT09RGUmJnZvaWQgMCE9PSRlfHxRZShFZSx0aGlzLmxlbmd0aC04KTtjb25zdCBhdD1EZSoyKioyNCs2NTUzNip0aGlzWysrRWVdKzI1Nip0aGlzWysrRWVdK3Ro'@;
put 'aXNbKytFZV0sY3Q9dGhpc1srK0VlXSoyKioyNCs2NTUzNip0aGlzWysrRWVdKzI1Nip0aGlzWysrRWVdKyRlO3JldHVybihCaWdJbnQoYXQpPDxCaWdJbnQoMzIpKStCaWdJbnQoY3QpfSksai5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKEVlLERlLCRlKXtFZT4+Pj0wLERlPj4+PTAs'@;
put 'JGV8fFEoRWUsRGUsdGhpcy5sZW5ndGgpO2xldCBhdD10aGlzW0VlXSxjdD0xLE90PTA7Zm9yKDsrK090PERlJiYoY3QqPTI1Nik7KWF0Kz10aGlzW0VlK090XSpjdDtyZXR1cm4gY3QqPTEyOCxhdD49Y3QmJihhdC09TWF0aC5wb3coMiw4KkRlKSksYXR9LGoucHJvdG90eXBlLnJlYWRJbnRC'@;
put 'RT1mdW5jdGlvbihFZSxEZSwkZSl7RWU+Pj49MCxEZT4+Pj0wLCRlfHxRKEVlLERlLHRoaXMubGVuZ3RoKTtsZXQgYXQ9RGUsY3Q9MSxPdD10aGlzW0VlKy0tYXRdO2Zvcig7YXQ+MCYmKGN0Kj0yNTYpOylPdCs9dGhpc1tFZSstLWF0XSpjdDtyZXR1cm4gY3QqPTEyOCxPdD49Y3QmJihPdC09'@;
put 'TWF0aC5wb3coMiw4KkRlKSksT3R9LGoucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKEVlLERlKXtyZXR1cm4gRWU+Pj49MCxEZXx8UShFZSwxLHRoaXMubGVuZ3RoKSwxMjgmdGhpc1tFZV0/LTEqKDI1NS10aGlzW0VlXSsxKTp0aGlzW0VlXX0sai5wcm90b3R5cGUucmVhZEludDE2TEU9'@;
put 'ZnVuY3Rpb24oRWUsRGUpe0VlPj4+PTAsRGV8fFEoRWUsMix0aGlzLmxlbmd0aCk7Y29uc3QgJGU9dGhpc1tFZV18dGhpc1tFZSsxXTw8ODtyZXR1cm4gMzI3NjgmJGU/NDI5NDkwMTc2MHwkZTokZX0sai5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24oRWUsRGUpe0VlPj4+PTAsRGV8'@;
put 'fFEoRWUsMix0aGlzLmxlbmd0aCk7Y29uc3QgJGU9dGhpc1tFZSsxXXx0aGlzW0VlXTw8ODtyZXR1cm4gMzI3NjgmJGU/NDI5NDkwMTc2MHwkZTokZX0sai5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24oRWUsRGUpe3JldHVybiBFZT4+Pj0wLERlfHxRKEVlLDQsdGhpcy5sZW5ndGgp'@;
put 'LHRoaXNbRWVdfHRoaXNbRWUrMV08PDh8dGhpc1tFZSsyXTw8MTZ8dGhpc1tFZSszXTw8MjR9LGoucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKEVlLERlKXtyZXR1cm4gRWU+Pj49MCxEZXx8UShFZSw0LHRoaXMubGVuZ3RoKSx0aGlzW0VlXTw8MjR8dGhpc1tFZSsxXTw8MTZ8dGhp'@;
put 'c1tFZSsyXTw8OHx0aGlzW0VlKzNdfSxqLnByb3RvdHlwZS5yZWFkQmlnSW50NjRMRT1xZShmdW5jdGlvbihFZSl7SGUoRWU+Pj49MCwib2Zmc2V0Iik7Y29uc3QgRGU9dGhpc1tFZV0sJGU9dGhpc1tFZSs3XTtyZXR1cm4gdm9pZCAwIT09RGUmJnZvaWQgMCE9PSRlfHxRZShFZSx0aGlzLmxl'@;
put 'bmd0aC04KSwoQmlnSW50KHRoaXNbRWUrNF0rMjU2KnRoaXNbRWUrNV0rNjU1MzYqdGhpc1tFZSs2XSsoJGU8PDI0KSk8PEJpZ0ludCgzMikpK0JpZ0ludChEZSsyNTYqdGhpc1srK0VlXSs2NTUzNip0aGlzWysrRWVdKzE2Nzc3MjE2KnRoaXNbKytFZV0pfSksai5wcm90b3R5cGUucmVhZEJp'@;
put 'Z0ludDY0QkU9cWUoZnVuY3Rpb24oRWUpe0hlKEVlPj4+PTAsIm9mZnNldCIpO2NvbnN0IERlPXRoaXNbRWVdLCRlPXRoaXNbRWUrN107dm9pZCAwIT09RGUmJnZvaWQgMCE9PSRlfHxRZShFZSx0aGlzLmxlbmd0aC04KTtjb25zdCBhdD0oRGU8PDI0KSs2NTUzNip0aGlzWysrRWVdKzI1Nip0'@;
put 'aGlzWysrRWVdK3RoaXNbKytFZV07cmV0dXJuKEJpZ0ludChhdCk8PEJpZ0ludCgzMikpK0JpZ0ludCgxNjc3NzIxNip0aGlzWysrRWVdKzY1NTM2KnRoaXNbKytFZV0rMjU2KnRoaXNbKytFZV0rJGUpfSksai5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24oRWUsRGUpe3JldHVybiBF'@;
put 'ZT4+Pj0wLERlfHxRKEVlLDQsdGhpcy5sZW5ndGgpLEkucmVhZCh0aGlzLEVlLCEwLDIzLDQpfSxqLnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbihFZSxEZSl7cmV0dXJuIEVlPj4+PTAsRGV8fFEoRWUsNCx0aGlzLmxlbmd0aCksSS5yZWFkKHRoaXMsRWUsITEsMjMsNCl9LGoucHJv'@;
put 'dG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbihFZSxEZSl7cmV0dXJuIEVlPj4+PTAsRGV8fFEoRWUsOCx0aGlzLmxlbmd0aCksSS5yZWFkKHRoaXMsRWUsITAsNTIsOCl9LGoucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbihFZSxEZSl7cmV0dXJuIEVlPj4+PTAsRGV8fFEoRWUs'@;
put 'OCx0aGlzLmxlbmd0aCksSS5yZWFkKHRoaXMsRWUsITEsNTIsOCl9LGoucHJvdG90eXBlLndyaXRlVWludExFPWoucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKEVlLERlLCRlLGF0KXtFZT0rRWUsRGU+Pj49MCwkZT4+Pj0wLCFhdCYmcmUodGhpcyxFZSxEZSwkZSxNYXRoLnBvdygy'@;
put 'LDgqJGUpLTEsMCk7bGV0IGN0PTEsT3Q9MDtmb3IodGhpc1tEZV09MjU1JkVlOysrT3Q8JGUmJihjdCo9MjU2KTspdGhpc1tEZStPdF09RWUvY3QmMjU1O3JldHVybiBEZSskZX0sai5wcm90b3R5cGUud3JpdGVVaW50QkU9ai5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24oRWUsRGUs'@;
put 'JGUsYXQpe0VlPStFZSxEZT4+Pj0wLCRlPj4+PTAsIWF0JiZyZSh0aGlzLEVlLERlLCRlLE1hdGgucG93KDIsOCokZSktMSwwKTtsZXQgY3Q9JGUtMSxPdD0xO2Zvcih0aGlzW0RlK2N0XT0yNTUmRWU7LS1jdD49MCYmKE90Kj0yNTYpOyl0aGlzW0RlK2N0XT1FZS9PdCYyNTU7cmV0dXJuIERl'@;
put 'KyRlfSxqLnByb3RvdHlwZS53cml0ZVVpbnQ4PWoucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24oRWUsRGUsJGUpe3JldHVybiBFZT0rRWUsRGU+Pj49MCwkZXx8cmUodGhpcyxFZSxEZSwxLDI1NSwwKSx0aGlzW0RlXT0yNTUmRWUsRGUrMX0sai5wcm90b3R5cGUud3JpdGVVaW50MTZM'@;
put 'RT1qLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKEVlLERlLCRlKXtyZXR1cm4gRWU9K0VlLERlPj4+PTAsJGV8fHJlKHRoaXMsRWUsRGUsMiw2NTUzNSwwKSx0aGlzW0RlXT0yNTUmRWUsdGhpc1tEZSsxXT1FZT4+PjgsRGUrMn0sai5wcm90b3R5cGUud3JpdGVVaW50MTZCRT1q'@;
put 'LnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKEVlLERlLCRlKXtyZXR1cm4gRWU9K0VlLERlPj4+PTAsJGV8fHJlKHRoaXMsRWUsRGUsMiw2NTUzNSwwKSx0aGlzW0RlXT1FZT4+PjgsdGhpc1tEZSsxXT0yNTUmRWUsRGUrMn0sai5wcm90b3R5cGUud3JpdGVVaW50MzJMRT1qLnBy'@;
put 'b3RvdHlwZS53cml0ZVVJbnQzMkxFPWZ1bmN0aW9uKEVlLERlLCRlKXtyZXR1cm4gRWU9K0VlLERlPj4+PTAsJGV8fHJlKHRoaXMsRWUsRGUsNCw0Mjk0OTY3Mjk1LDApLHRoaXNbRGUrM109RWU+Pj4yNCx0aGlzW0RlKzJdPUVlPj4+MTYsdGhpc1tEZSsxXT1FZT4+PjgsdGhpc1tEZV09MjU1'@;
put 'JkVlLERlKzR9LGoucHJvdG90eXBlLndyaXRlVWludDMyQkU9ai5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbihFZSxEZSwkZSl7cmV0dXJuIEVlPStFZSxEZT4+Pj0wLCRlfHxyZSh0aGlzLEVlLERlLDQsNDI5NDk2NzI5NSwwKSx0aGlzW0RlXT1FZT4+PjI0LHRoaXNbRGUrMV09'@;
put 'RWU+Pj4xNix0aGlzW0RlKzJdPUVlPj4+OCx0aGlzW0RlKzNdPTI1NSZFZSxEZSs0fSxqLnByb3RvdHlwZS53cml0ZUJpZ1VJbnQ2NExFPXFlKGZ1bmN0aW9uKEVlLERlPTApe3JldHVybiBmZSh0aGlzLEVlLERlLEJpZ0ludCgwKSxCaWdJbnQoIjB4ZmZmZmZmZmZmZmZmZmZmZiIpKX0pLGou'@;
put 'cHJvdG90eXBlLndyaXRlQmlnVUludDY0QkU9cWUoZnVuY3Rpb24oRWUsRGU9MCl7cmV0dXJuIG1lKHRoaXMsRWUsRGUsQmlnSW50KDApLEJpZ0ludCgiMHhmZmZmZmZmZmZmZmZmZmZmIikpfSksai5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbihFZSxEZSwkZSxhdCl7aWYoRWU9K0Vl'@;
put 'LERlPj4+PTAsIWF0KXtjb25zdCBBdD1NYXRoLnBvdygyLDgqJGUtMSk7cmUodGhpcyxFZSxEZSwkZSxBdC0xLC1BdCl9bGV0IGN0PTAsT3Q9MSxQdD0wO2Zvcih0aGlzW0RlXT0yNTUmRWU7KytjdDwkZSYmKE90Kj0yNTYpOylFZTwwJiYwPT09UHQmJjAhPT10aGlzW0RlK2N0LTFdJiYoUHQ9'@;
put 'MSksdGhpc1tEZStjdF09KEVlL090Pj4wKS1QdCYyNTU7cmV0dXJuIERlKyRlfSxqLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKEVlLERlLCRlLGF0KXtpZihFZT0rRWUsRGU+Pj49MCwhYXQpe2NvbnN0IEF0PU1hdGgucG93KDIsOCokZS0xKTtyZSh0aGlzLEVlLERlLCRlLEF0LTEs'@;
put 'LUF0KX1sZXQgY3Q9JGUtMSxPdD0xLFB0PTA7Zm9yKHRoaXNbRGUrY3RdPTI1NSZFZTstLWN0Pj0wJiYoT3QqPTI1Nik7KUVlPDAmJjA9PT1QdCYmMCE9PXRoaXNbRGUrY3QrMV0mJihQdD0xKSx0aGlzW0RlK2N0XT0oRWUvT3Q+PjApLVB0JjI1NTtyZXR1cm4gRGUrJGV9LGoucHJvdG90eXBl'@;
put 'LndyaXRlSW50OD1mdW5jdGlvbihFZSxEZSwkZSl7cmV0dXJuIEVlPStFZSxEZT4+Pj0wLCRlfHxyZSh0aGlzLEVlLERlLDEsMTI3LC0xMjgpLEVlPDAmJihFZT0yNTUrRWUrMSksdGhpc1tEZV09MjU1JkVlLERlKzF9LGoucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihFZSxEZSwk'@;
put 'ZSl7cmV0dXJuIEVlPStFZSxEZT4+Pj0wLCRlfHxyZSh0aGlzLEVlLERlLDIsMzI3NjcsLTMyNzY4KSx0aGlzW0RlXT0yNTUmRWUsdGhpc1tEZSsxXT1FZT4+PjgsRGUrMn0sai5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKEVlLERlLCRlKXtyZXR1cm4gRWU9K0VlLERlPj4+PTAs'@;
put 'JGV8fHJlKHRoaXMsRWUsRGUsMiwzMjc2NywtMzI3NjgpLHRoaXNbRGVdPUVlPj4+OCx0aGlzW0RlKzFdPTI1NSZFZSxEZSsyfSxqLnByb3RvdHlwZS53cml0ZUludDMyTEU9ZnVuY3Rpb24oRWUsRGUsJGUpe3JldHVybiBFZT0rRWUsRGU+Pj49MCwkZXx8cmUodGhpcyxFZSxEZSw0LDIxNDc0'@;
put 'ODM2NDcsLTIxNDc0ODM2NDgpLHRoaXNbRGVdPTI1NSZFZSx0aGlzW0RlKzFdPUVlPj4+OCx0aGlzW0RlKzJdPUVlPj4+MTYsdGhpc1tEZSszXT1FZT4+PjI0LERlKzR9LGoucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbihFZSxEZSwkZSl7cmV0dXJuIEVlPStFZSxEZT4+Pj0wLCRl'@;
put 'fHxyZSh0aGlzLEVlLERlLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksRWU8MCYmKEVlPTQyOTQ5NjcyOTUrRWUrMSksdGhpc1tEZV09RWU+Pj4yNCx0aGlzW0RlKzFdPUVlPj4+MTYsdGhpc1tEZSsyXT1FZT4+PjgsdGhpc1tEZSszXT0yNTUmRWUsRGUrNH0sai5wcm90b3R5cGUud3JpdGVC'@;
put 'aWdJbnQ2NExFPXFlKGZ1bmN0aW9uKEVlLERlPTApe3JldHVybiBmZSh0aGlzLEVlLERlLC1CaWdJbnQoIjB4ODAwMDAwMDAwMDAwMDAwMCIpLEJpZ0ludCgiMHg3ZmZmZmZmZmZmZmZmZmZmIikpfSksai5wcm90b3R5cGUud3JpdGVCaWdJbnQ2NEJFPXFlKGZ1bmN0aW9uKEVlLERlPTApe3Jl'@;
put 'dHVybiBtZSh0aGlzLEVlLERlLC1CaWdJbnQoIjB4ODAwMDAwMDAwMDAwMDAwMCIpLEJpZ0ludCgiMHg3ZmZmZmZmZmZmZmZmZmZmIikpfSksai5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKEVlLERlLCRlKXtyZXR1cm4gVGUodGhpcyxFZSxEZSwhMCwkZSl9LGoucHJvdG90eXBl'@;
put 'LndyaXRlRmxvYXRCRT1mdW5jdGlvbihFZSxEZSwkZSl7cmV0dXJuIFRlKHRoaXMsRWUsRGUsITEsJGUpfSxqLnByb3RvdHlwZS53cml0ZURvdWJsZUxFPWZ1bmN0aW9uKEVlLERlLCRlKXtyZXR1cm4gUGUodGhpcyxFZSxEZSwhMCwkZSl9LGoucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVu'@;
put 'Y3Rpb24oRWUsRGUsJGUpe3JldHVybiBQZSh0aGlzLEVlLERlLCExLCRlKX0sai5wcm90b3R5cGUuY29weT1mdW5jdGlvbihFZSxEZSwkZSxhdCl7aWYoIWouaXNCdWZmZXIoRWUpKXRocm93IG5ldyBUeXBlRXJyb3IoImFyZ3VtZW50IHNob3VsZCBiZSBhIEJ1ZmZlciIpO2lmKCRlfHwoJGU9'@;
put 'MCksYXR8fDA9PT1hdHx8KGF0PXRoaXMubGVuZ3RoKSxEZT49RWUubGVuZ3RoJiYoRGU9RWUubGVuZ3RoKSxEZXx8KERlPTApLGF0PjAmJmF0PCRlJiYoYXQ9JGUpLGF0PT09JGV8fDA9PT1FZS5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZihEZTwwKXRocm93IG5ldyBSYW5n'@;
put 'ZUVycm9yKCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzIik7aWYoJGU8MHx8JGU+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihhdDwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO2F0PnRo'@;
put 'aXMubGVuZ3RoJiYoYXQ9dGhpcy5sZW5ndGgpLEVlLmxlbmd0aC1EZTxhdC0kZSYmKGF0PUVlLmxlbmd0aC1EZSskZSk7Y29uc3QgY3Q9YXQtJGU7cmV0dXJuIHRoaXM9PT1FZSYmImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4/dGhpcy5jb3B5V2l0'@;
put 'aGluKERlLCRlLGF0KTpVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChFZSx0aGlzLnN1YmFycmF5KCRlLGF0KSxEZSksY3R9LGoucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oRWUsRGUsJGUsYXQpe2lmKCJzdHJpbmciPT10eXBlb2YgRWUpe2lmKCJzdHJpbmciPT10eXBlb2YgRGU/KGF0'@;
put 'PURlLERlPTAsJGU9dGhpcy5sZW5ndGgpOiJzdHJpbmciPT10eXBlb2YgJGUmJihhdD0kZSwkZT10aGlzLmxlbmd0aCksdm9pZCAwIT09YXQmJiJzdHJpbmciIT10eXBlb2YgYXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpO2lmKCJzdHJpbmciPT10'@;
put 'eXBlb2YgYXQmJiFqLmlzRW5jb2RpbmcoYXQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrYXQpO2lmKDE9PT1FZS5sZW5ndGgpe2NvbnN0IE90PUVlLmNoYXJDb2RlQXQoMCk7KCJ1dGY4Ij09PWF0JiZPdDwxMjh8fCJsYXRpbjEiPT09YXQpJiYoRWU9T3QpfX1l'@;
put 'bHNlIm51bWJlciI9PXR5cGVvZiBFZT9FZSY9MjU1OiJib29sZWFuIj09dHlwZW9mIEVlJiYoRWU9TnVtYmVyKEVlKSk7aWYoRGU8MHx8dGhpcy5sZW5ndGg8RGV8fHRoaXMubGVuZ3RoPCRlKXRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZigkZTw9RGUpcmV0'@;
put 'dXJuIHRoaXM7bGV0IGN0O2lmKERlPj4+PTAsJGU9dm9pZCAwPT09JGU/dGhpcy5sZW5ndGg6JGU+Pj4wLEVlfHwoRWU9MCksIm51bWJlciI9PXR5cGVvZiBFZSlmb3IoY3Q9RGU7Y3Q8JGU7KytjdCl0aGlzW2N0XT1FZTtlbHNle2NvbnN0IE90PWouaXNCdWZmZXIoRWUpP0VlOmouZnJvbShF'@;
put 'ZSxhdCksUHQ9T3QubGVuZ3RoO2lmKDA9PT1QdCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgdmFsdWUgIicrRWUrJyIgaXMgaW52YWxpZCBmb3IgYXJndW1lbnQgInZhbHVlIicpO2ZvcihjdD0wO2N0PCRlLURlOysrY3QpdGhpc1tjdCtEZV09T3RbY3QlUHRdfXJldHVybiB0aGlzfTtjb25z'@;
put 'dCBGZT17fTtmdW5jdGlvbiBOZShFZSxEZSwkZSl7RmVbRWVdPWNsYXNzIGV4dGVuZHMgJGV7Y29uc3RydWN0b3IoKXtzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJtZXNzYWdlIix7dmFsdWU6RGUuYXBwbHkodGhpcyxhcmd1bWVudHMpLHdyaXRhYmxlOiEwLGNvbmZpZ3Vy'@;
put 'YWJsZTohMH0pLHRoaXMubmFtZT1gJHt0aGlzLm5hbWV9IFske0VlfV1gLGRlbGV0ZSB0aGlzLm5hbWV9Z2V0IGNvZGUoKXtyZXR1cm4gRWV9c2V0IGNvZGUoYXQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJjb2RlIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6'@;
put 'YXQsd3JpdGFibGU6ITB9KX10b1N0cmluZygpe3JldHVybmAke3RoaXMubmFtZX0gWyR7RWV9XTogJHt0aGlzLm1lc3NhZ2V9YH19fWZ1bmN0aW9uIExlKEVlKXtsZXQgRGU9IiIsJGU9RWUubGVuZ3RoO2NvbnN0IGF0PSItIj09PUVlWzBdPzE6MDtmb3IoOyRlPj1hdCs0OyRlLT0zKURlPWBf'@;
put 'JHtFZS5zbGljZSgkZS0zLCRlKX0ke0RlfWA7cmV0dXJuYCR7RWUuc2xpY2UoMCwkZSl9JHtEZX1gfWZ1bmN0aW9uIEJlKEVlLERlLCRlLGF0LGN0LE90KXtpZihFZT4kZXx8RWU8RGUpe2NvbnN0IFB0PSJiaWdpbnQiPT10eXBlb2YgRGU/Im4iOiIiO2xldCBBdDt0aHJvdyBBdD1PdD4zPzA9'@;
put 'PT1EZXx8RGU9PT1CaWdJbnQoMCk/YD49IDAke1B0fSBhbmQgPCAyJHtQdH0gKiogJHs4KihPdCsxKX0ke1B0fWA6YD49IC0oMiR7UHR9ICoqICR7OCooT3QrMSktMX0ke1B0fSkgYW5kIDwgMiAqKiAkezgqKE90KzEpLTF9JHtQdH1gOmA+PSAke0RlfSR7UHR9IGFuZCA8PSAkeyRlfSR7UHR9'@;
put 'YCxuZXcgRmUuRVJSX09VVF9PRl9SQU5HRSgidmFsdWUiLEF0LEVlKX12YXIgUHQsQXQsSnQ7UHQ9YXQsSnQ9T3QsSGUoQXQ9Y3QsIm9mZnNldCIpLHZvaWQgMCE9PVB0W0F0XSYmdm9pZCAwIT09UHRbQXQrSnRdfHxRZShBdCxQdC5sZW5ndGgtKEp0KzEpKX1mdW5jdGlvbiBIZShFZSxEZSl7'@;
put 'aWYoIm51bWJlciIhPXR5cGVvZiBFZSl0aHJvdyBuZXcgRmUuRVJSX0lOVkFMSURfQVJHX1RZUEUoRGUsIm51bWJlciIsRWUpfWZ1bmN0aW9uIFFlKEVlLERlLCRlKXt0aHJvdyBNYXRoLmZsb29yKEVlKSE9PUVlPyhIZShFZSwkZSksbmV3IEZlLkVSUl9PVVRfT0ZfUkFOR0UoJGV8fCJvZmZz'@;
put 'ZXQiLCJhbiBpbnRlZ2VyIixFZSkpOkRlPDA/bmV3IEZlLkVSUl9CVUZGRVJfT1VUX09GX0JPVU5EUzpuZXcgRmUuRVJSX09VVF9PRl9SQU5HRSgkZXx8Im9mZnNldCIsYD49ICR7JGU/MTowfSBhbmQgPD0gJHtEZX1gLEVlKX1OZSgiRVJSX0JVRkZFUl9PVVRfT0ZfQk9VTkRTIixmdW5jdGlv'@;
put 'bihFZSl7cmV0dXJuIEVlP2Ake0VlfSBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHNgOiJBdHRlbXB0IHRvIGFjY2VzcyBtZW1vcnkgb3V0c2lkZSBidWZmZXIgYm91bmRzIn0sUmFuZ2VFcnJvciksTmUoIkVSUl9JTlZBTElEX0FSR19UWVBFIixmdW5jdGlvbihFZSxEZSl7cmV0dXJuYFRo'@;
put 'ZSAiJHtFZX0iIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgJHt0eXBlb2YgRGV9YH0sVHlwZUVycm9yKSxOZSgiRVJSX09VVF9PRl9SQU5HRSIsZnVuY3Rpb24oRWUsRGUsJGUpe2xldCBhdD1gVGhlIHZhbHVlIG9mICIke0VlfSIgaXMgb3V0IG9mIHJh'@;
put 'bmdlLmAsY3Q9JGU7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoJGUpJiZNYXRoLmFicygkZSk+NDI5NDk2NzI5Nj9jdD1MZShTdHJpbmcoJGUpKToiYmlnaW50Ij09dHlwZW9mICRlJiYoY3Q9U3RyaW5nKCRlKSwoJGU+QmlnSW50KDIpKipCaWdJbnQoMzIpfHwkZTwtKEJpZ0ludCgyKSoqQmln'@;
put 'SW50KDMyKSkpJiYoY3Q9TGUoY3QpKSxjdCs9Im4iKSxhdCs9YCBJdCBtdXN0IGJlICR7RGV9LiBSZWNlaXZlZCAke2N0fWAsYXR9LFJhbmdlRXJyb3IpO2NvbnN0IG10PS9bXisvMC05QS1aYS16LV9dL2c7ZnVuY3Rpb24gS2UoRWUsRGUpe2xldCAkZTtEZT1EZXx8MS8wO2NvbnN0IGF0PUVl'@;
put 'Lmxlbmd0aDtsZXQgY3Q9bnVsbDtjb25zdCBPdD1bXTtmb3IobGV0IFB0PTA7UHQ8YXQ7KytQdCl7aWYoJGU9RWUuY2hhckNvZGVBdChQdCksJGU+NTUyOTUmJiRlPDU3MzQ0KXtpZighY3Qpe2lmKCRlPjU2MzE5KXsoRGUtPTMpPi0xJiZPdC5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1p'@;
put 'ZihQdCsxPT09YXQpeyhEZS09Myk+LTEmJk90LnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWN0PSRlO2NvbnRpbnVlfWlmKCRlPDU2MzIwKXsoRGUtPTMpPi0xJiZPdC5wdXNoKDIzOSwxOTEsMTg5KSxjdD0kZTtjb250aW51ZX0kZT02NTUzNisoY3QtNTUyOTY8PDEwfCRlLTU2MzIwKX1l'@;
put 'bHNlIGN0JiYoRGUtPTMpPi0xJiZPdC5wdXNoKDIzOSwxOTEsMTg5KTtpZihjdD1udWxsLCRlPDEyOCl7aWYoKERlLT0xKTwwKWJyZWFrO090LnB1c2goJGUpfWVsc2UgaWYoJGU8MjA0OCl7aWYoKERlLT0yKTwwKWJyZWFrO090LnB1c2goJGU+PjZ8MTkyLDYzJiRlfDEyOCl9ZWxzZSBpZigk'@;
put 'ZTw2NTUzNil7aWYoKERlLT0zKTwwKWJyZWFrO090LnB1c2goJGU+PjEyfDIyNCwkZT4+NiY2M3wxMjgsNjMmJGV8MTI4KX1lbHNle2lmKCEoJGU8MTExNDExMikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigoRGUtPTQpPDApYnJlYWs7T3QucHVzaCgkZT4+MTh8'@;
put 'MjQwLCRlPj4xMiY2M3wxMjgsJGU+PjYmNjN8MTI4LDYzJiRlfDEyOCl9fXJldHVybiBPdH1mdW5jdGlvbiB3ZShFZSl7cmV0dXJuIEoudG9CeXRlQXJyYXkoZnVuY3Rpb24oRGUpe2lmKChEZT0oRGU9RGUuc3BsaXQoIj0iKVswXSkudHJpbSgpLnJlcGxhY2UobXQsIiIpKS5sZW5ndGg8Mily'@;
put 'ZXR1cm4iIjtmb3IoO0RlLmxlbmd0aCU0IT0wOylEZSs9Ij0iO3JldHVybiBEZX0oRWUpKX1mdW5jdGlvbiBJZShFZSxEZSwkZSxhdCl7bGV0IGN0O2ZvcihjdD0wO2N0PGF0JiYhKGN0KyRlPj1EZS5sZW5ndGh8fGN0Pj1FZS5sZW5ndGgpOysrY3QpRGVbY3QrJGVdPUVlW2N0XTtyZXR1cm4g'@;
put 'Y3R9ZnVuY3Rpb24gT2UoRWUsRGUpe3JldHVybiBFZSBpbnN0YW5jZW9mIERlfHxudWxsIT1FZSYmbnVsbCE9RWUuY29uc3RydWN0b3ImJm51bGwhPUVlLmNvbnN0cnVjdG9yLm5hbWUmJkVlLmNvbnN0cnVjdG9yLm5hbWU9PT1EZS5uYW1lfWZ1bmN0aW9uIGV0KEVlKXtyZXR1cm4gRWUhPUVl'@;
put 'fWNvbnN0IG50PWZ1bmN0aW9uKCl7Y29uc3QgRWU9IjAxMjM0NTY3ODlhYmNkZWYiLERlPW5ldyBBcnJheSgyNTYpO2ZvcihsZXQgJGU9MDskZTwxNjsrKyRlKXtjb25zdCBhdD0xNiokZTtmb3IobGV0IGN0PTA7Y3Q8MTY7KytjdClEZVthdCtjdF09RWVbJGVdK0VlW2N0XX1yZXR1cm4gRGV9'@;
put 'KCk7ZnVuY3Rpb24gcWUoRWUpe3JldHVybiB0eXBlb2YgQmlnSW50PiJ1Ij9odDpFZX1mdW5jdGlvbiBodCgpe3Rocm93IG5ldyBFcnJvcigiQmlnSW50IG5vdCBzdXBwb3J0ZWQiKX19LDE5MjQ6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSz1MKDIxMCksSj1MKDU1NTkpLEk9SihLKCJT'@;
put 'dHJpbmcucHJvdG90eXBlLmluZGV4T2YiKSk7SC5leHBvcnRzPWZ1bmN0aW9uKFIsRSl7dmFyIHo9SyhSLCEhRSk7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHomJkkoUiwiLnByb3RvdHlwZS4iKT4tMT9KKHopOnp9fSw1NTU5OihILEIsTCk9PnsidXNlIHN0cmljdCI7dmFyIEs9TCg4NjEy'@;
put 'KSxKPUwoMjEwKSxJPUooIiVGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHklIiksUj1KKCIlRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwlIiksRT1KKCIlUmVmbGVjdC5hcHBseSUiLCEwKXx8Sy5jYWxsKFIsSSksej1KKCIlT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciUiLCEwKSxqPUoo'@;
put 'IiVPYmplY3QuZGVmaW5lUHJvcGVydHklIiwhMCksVj1KKCIlTWF0aC5tYXglIik7aWYoail0cnl7aih7fSwiYSIse3ZhbHVlOjF9KX1jYXRjaHtqPW51bGx9SC5leHBvcnRzPWZ1bmN0aW9uKFcpe3ZhciBVPUUoSyxSLGFyZ3VtZW50cyk7cmV0dXJuIHomJmomJnooVSwibGVuZ3RoIikuY29u'@;
put 'ZmlndXJhYmxlJiZqKFUsImxlbmd0aCIse3ZhbHVlOjErVigwLFcubGVuZ3RoLShhcmd1bWVudHMubGVuZ3RoLTEpKX0pLFV9O3ZhciBHPWZ1bmN0aW9uKCl7cmV0dXJuIEUoSyxJLGFyZ3VtZW50cyl9O2o/aihILmV4cG9ydHMsImFwcGx5Iix7dmFsdWU6R30pOkguZXhwb3J0cy5hcHBseT1H'@;
put 'fSwxMDI3OihILEIsTCk9Pnt2YXIgSz1MKDk1MDkpLkJ1ZmZlcixKPUwoMjgzMCkuVHJhbnNmb3JtLEk9TCgyNTUzKS5TdHJpbmdEZWNvZGVyO2Z1bmN0aW9uIFIoRSl7Si5jYWxsKHRoaXMpLHRoaXMuaGFzaE1vZGU9InN0cmluZyI9PXR5cGVvZiBFLHRoaXMuaGFzaE1vZGU/dGhpc1tFXT10'@;
put 'aGlzLl9maW5hbE9yRGlnZXN0OnRoaXMuZmluYWw9dGhpcy5fZmluYWxPckRpZ2VzdCx0aGlzLl9maW5hbCYmKHRoaXMuX19maW5hbD10aGlzLl9maW5hbCx0aGlzLl9maW5hbD1udWxsKSx0aGlzLl9kZWNvZGVyPW51bGwsdGhpcy5fZW5jb2Rpbmc9bnVsbH1MKDU3MTcpKFIsSiksUi5wcm90'@;
put 'b3R5cGUudXBkYXRlPWZ1bmN0aW9uKEUseixqKXsic3RyaW5nIj09dHlwZW9mIEUmJihFPUsuZnJvbShFLHopKTt2YXIgVj10aGlzLl91cGRhdGUoRSk7cmV0dXJuIHRoaXMuaGFzaE1vZGU/dGhpczooaiYmKFY9dGhpcy5fdG9TdHJpbmcoVixqKSksVil9LFIucHJvdG90eXBlLnNldEF1dG9Q'@;
put 'YWRkaW5nPWZ1bmN0aW9uKCl7fSxSLnByb3RvdHlwZS5nZXRBdXRoVGFnPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJ0cnlpbmcgdG8gZ2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIil9LFIucHJvdG90eXBlLnNldEF1dGhUYWc9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJy'@;
put 'b3IoInRyeWluZyB0byBzZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKX0sUi5wcm90b3R5cGUuc2V0QUFEPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJ0cnlpbmcgdG8gc2V0IGFhZCBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpfSxSLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1'@;
put 'bmN0aW9uKEUseixqKXt2YXIgVjt0cnl7dGhpcy5oYXNoTW9kZT90aGlzLl91cGRhdGUoRSk6dGhpcy5wdXNoKHRoaXMuX3VwZGF0ZShFKSl9Y2F0Y2goRyl7Vj1HfWZpbmFsbHl7aihWKX19LFIucHJvdG90eXBlLl9mbHVzaD1mdW5jdGlvbihFKXt2YXIgejt0cnl7dGhpcy5wdXNoKHRoaXMu'@;
put 'X19maW5hbCgpKX1jYXRjaChqKXt6PWp9RSh6KX0sUi5wcm90b3R5cGUuX2ZpbmFsT3JEaWdlc3Q9ZnVuY3Rpb24oRSl7dmFyIHo9dGhpcy5fX2ZpbmFsKCl8fEsuYWxsb2MoMCk7cmV0dXJuIEUmJih6PXRoaXMuX3RvU3RyaW5nKHosRSwhMCkpLHp9LFIucHJvdG90eXBlLl90b1N0cmluZz1m'@;
put 'dW5jdGlvbihFLHosail7aWYodGhpcy5fZGVjb2Rlcnx8KHRoaXMuX2RlY29kZXI9bmV3IEkoeiksdGhpcy5fZW5jb2Rpbmc9eiksdGhpcy5fZW5jb2RpbmchPT16KXRocm93IG5ldyBFcnJvcigiY2FuJ3Qgc3dpdGNoIGVuY29kaW5ncyIpO3ZhciBWPXRoaXMuX2RlY29kZXIud3JpdGUoRSk7'@;
put 'cmV0dXJuIGomJihWKz10aGlzLl9kZWNvZGVyLmVuZCgpKSxWfSxILmV4cG9ydHM9Un0sMTA0ODpIPT57SC5leHBvcnRzPWZ1bmN0aW9uKEwsSyl7Zm9yKHZhciBKPVtdLEk9MDtJPEwubGVuZ3RoO0krKyl7dmFyIFI9SyhMW0ldLEkpO0IoUik/Si5wdXNoLmFwcGx5KEosUik6Si5wdXNoKFIp'@;
put 'fXJldHVybiBKfTt2YXIgQj1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihMKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKEwpfX0sNTEwODooSCxCLEwpPT57dmFyIEs9TCg5NTM5KSxKPUwoOTI4Mik7ZnVuY3Rpb24gSSgpe3JldHVybihu'@;
put 'ZXcgRGF0ZSkuZ2V0VGltZSgpfXZhciBSLEU9QXJyYXkucHJvdG90eXBlLnNsaWNlLHo9e307Uj12b2lkIDAhPT1MLmcmJkwuZy5jb25zb2xlP0wuZy5jb25zb2xlOnR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuY29uc29sZT93aW5kb3cuY29uc29sZTp7fTtmb3IodmFyIGo9W1tmdW5jdGlv'@;
put 'bigpe30sImxvZyJdLFtmdW5jdGlvbigpe1IubG9nLmFwcGx5KFIsYXJndW1lbnRzKX0sImluZm8iXSxbZnVuY3Rpb24oKXtSLmxvZy5hcHBseShSLGFyZ3VtZW50cyl9LCJ3YXJuIl0sW2Z1bmN0aW9uKCl7Ui53YXJuLmFwcGx5KFIsYXJndW1lbnRzKX0sImVycm9yIl0sW2Z1bmN0aW9uKHEp'@;
put 'e3pbcV09SSgpfSwidGltZSJdLFtmdW5jdGlvbihxKXt2YXIgdGU9eltxXTtpZighdGUpdGhyb3cgbmV3IEVycm9yKCJObyBzdWNoIGxhYmVsOiAiK3EpO2RlbGV0ZSB6W3FdO3ZhciBuZT1JKCktdGU7Ui5sb2cocSsiOiAiK25lKyJtcyIpfSwidGltZUVuZCJdLFtmdW5jdGlvbigpe3ZhciBx'@;
put 'PW5ldyBFcnJvcjtxLm5hbWU9IlRyYWNlIixxLm1lc3NhZ2U9Sy5mb3JtYXQuYXBwbHkobnVsbCxhcmd1bWVudHMpLFIuZXJyb3IocS5zdGFjayl9LCJ0cmFjZSJdLFtmdW5jdGlvbihxKXtSLmxvZyhLLmluc3BlY3QocSkrIlxuIil9LCJkaXIiXSxbZnVuY3Rpb24ocSl7aWYoIXEpe3ZhciB0'@;
put 'ZT1FLmNhbGwoYXJndW1lbnRzLDEpO0oub2soITEsSy5mb3JtYXQuYXBwbHkobnVsbCx0ZSkpfX0sImFzc2VydCJdXSxWPTA7VjxqLmxlbmd0aDtWKyspe3ZhciBHPWpbVl0sVT1HWzFdO1JbVV18fChSW1VdPUdbMF0pfUguZXhwb3J0cz1SfSw2MzkzOihILEIsTCk9Pnt2YXIgSz1MKDg3NjQp'@;
put 'LkJ1ZmZlcixKPUwoNjk0OCksST1MKDY0MjYpO0guZXhwb3J0cz1mdW5jdGlvbihqKXtyZXR1cm4gbmV3IEUoail9O3ZhciBSPXtzZWNwMjU2azE6e25hbWU6InNlY3AyNTZrMSIsYnl0ZUxlbmd0aDozMn0sc2VjcDIyNHIxOntuYW1lOiJwMjI0IixieXRlTGVuZ3RoOjI4fSxwcmltZTI1NnYx'@;
put 'OntuYW1lOiJwMjU2IixieXRlTGVuZ3RoOjMyfSxwcmltZTE5MnYxOntuYW1lOiJwMTkyIixieXRlTGVuZ3RoOjI0fSxlZDI1NTE5OntuYW1lOiJlZDI1NTE5IixieXRlTGVuZ3RoOjMyfSxzZWNwMzg0cjE6e25hbWU6InAzODQiLGJ5dGVMZW5ndGg6NDh9LHNlY3A1MjFyMTp7bmFtZToicDUy'@;
put 'MSIsYnl0ZUxlbmd0aDo2Nn19O2Z1bmN0aW9uIEUoail7dGhpcy5jdXJ2ZVR5cGU9UltqXSx0aGlzLmN1cnZlVHlwZXx8KHRoaXMuY3VydmVUeXBlPXtuYW1lOmp9KSx0aGlzLmN1cnZlPW5ldyBKLmVjKHRoaXMuY3VydmVUeXBlLm5hbWUpLHRoaXMua2V5cz12b2lkIDB9ZnVuY3Rpb24geihq'@;
put 'LFYsRyl7QXJyYXkuaXNBcnJheShqKXx8KGo9ai50b0FycmF5KCkpO3ZhciBXPW5ldyBLKGopO2lmKEcmJlcubGVuZ3RoPEcpe3ZhciBVPW5ldyBLKEctVy5sZW5ndGgpO1UuZmlsbCgwKSxXPUsuY29uY2F0KFtVLFddKX1yZXR1cm4gVj9XLnRvU3RyaW5nKFYpOld9Ui5wMjI0PVIuc2VjcDIy'@;
put 'NHIxLFIucDI1Nj1SLnNlY3AyNTZyMT1SLnByaW1lMjU2djEsUi5wMTkyPVIuc2VjcDE5MnIxPVIucHJpbWUxOTJ2MSxSLnAzODQ9Ui5zZWNwMzg0cjEsUi5wNTIxPVIuc2VjcDUyMXIxLEUucHJvdG90eXBlLmdlbmVyYXRlS2V5cz1mdW5jdGlvbihqLFYpe3JldHVybiB0aGlzLmtleXM9dGhp'@;
put 'cy5jdXJ2ZS5nZW5LZXlQYWlyKCksdGhpcy5nZXRQdWJsaWNLZXkoaixWKX0sRS5wcm90b3R5cGUuY29tcHV0ZVNlY3JldD1mdW5jdGlvbihqLFYsRyl7cmV0dXJuIFY9Vnx8InV0ZjgiLEsuaXNCdWZmZXIoail8fChqPW5ldyBLKGosVikpLHoodGhpcy5jdXJ2ZS5rZXlGcm9tUHVibGljKGop'@;
put 'LmdldFB1YmxpYygpLm11bCh0aGlzLmtleXMuZ2V0UHJpdmF0ZSgpKS5nZXRYKCksRyx0aGlzLmN1cnZlVHlwZS5ieXRlTGVuZ3RoKX0sRS5wcm90b3R5cGUuZ2V0UHVibGljS2V5PWZ1bmN0aW9uKGosVil7dmFyIEc9dGhpcy5rZXlzLmdldFB1YmxpYygiY29tcHJlc3NlZCI9PT1WLCEwKTty'@;
put 'ZXR1cm4iaHlicmlkIj09PVYmJihHWzBdPUdbRy5sZW5ndGgtMV0lMj83OjYpLHooRyxqKX0sRS5wcm90b3R5cGUuZ2V0UHJpdmF0ZUtleT1mdW5jdGlvbihqKXtyZXR1cm4geih0aGlzLmtleXMuZ2V0UHJpdmF0ZSgpLGopfSxFLnByb3RvdHlwZS5zZXRQdWJsaWNLZXk9ZnVuY3Rpb24oaixW'@;
put 'KXtyZXR1cm4gVj1WfHwidXRmOCIsSy5pc0J1ZmZlcihqKXx8KGo9bmV3IEsoaixWKSksdGhpcy5rZXlzLl9pbXBvcnRQdWJsaWMoaiksdGhpc30sRS5wcm90b3R5cGUuc2V0UHJpdmF0ZUtleT1mdW5jdGlvbihqLFYpe1Y9Vnx8InV0ZjgiLEsuaXNCdWZmZXIoail8fChqPW5ldyBLKGosVikp'@;
put 'O3ZhciBHPW5ldyBJKGopO3JldHVybiBHPUcudG9TdHJpbmcoMTYpLHRoaXMua2V5cz10aGlzLmN1cnZlLmdlbktleVBhaXIoKSx0aGlzLmtleXMuX2ltcG9ydFByaXZhdGUoRyksdGhpc319LDY0MjY6ZnVuY3Rpb24oSCxCLEwpeyFmdW5jdGlvbihLLEopeyJ1c2Ugc3RyaWN0IjtmdW5jdGlv'@;
put 'biBJKGcsQyl7aWYoIWcpdGhyb3cgbmV3IEVycm9yKEN8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gUihnLEMpe2cuc3VwZXJfPUM7dmFyIE09ZnVuY3Rpb24oKXt9O00ucHJvdG90eXBlPUMucHJvdG90eXBlLGcucHJvdG90eXBlPW5ldyBNLGcucHJvdG90eXBlLmNvbnN0cnVjdG9y'@;
put 'PWd9ZnVuY3Rpb24gRShnLEMsTSl7aWYoRS5pc0JOKGcpKXJldHVybiBnO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1nJiYoImxlIiE9PUMmJiJiZSIhPT1DfHwoTT1DLEM9MTApLHRoaXMuX2luaXQoZ3x8MCxDfHwx'@;
put 'MCxNfHwiYmUiKSl9dmFyIHo7Im9iamVjdCI9PXR5cGVvZiBLP0suZXhwb3J0cz1FOkouQk49RSxFLkJOPUUsRS53b3JkU2l6ZT0yNjt0cnl7ej10eXBlb2Ygd2luZG93PCJ1IiYmdm9pZCAwIT09d2luZG93LkJ1ZmZlcj93aW5kb3cuQnVmZmVyOkwoODYyMykuQnVmZmVyfWNhdGNoe31mdW5j'@;
put 'dGlvbiBqKGcsQyl7dmFyIE09Zy5jaGFyQ29kZUF0KEMpO3JldHVybiBNPj02NSYmTTw9NzA/TS01NTpNPj05NyYmTTw9MTAyP00tODc6TS00OCYxNX1mdW5jdGlvbiBWKGcsQyxNKXt2YXIgeT1qKGcsTSk7cmV0dXJuIE0tMT49QyYmKHl8PWooZyxNLTEpPDw0KSx5fWZ1bmN0aW9uIEcoZyxD'@;
put 'LE0seSl7Zm9yKHZhciBwPTAsUz1NYXRoLm1pbihnLmxlbmd0aCxNKSxRPUM7UTxTO1ErKyl7dmFyIHJlPWcuY2hhckNvZGVBdChRKS00ODtwKj15LHArPXJlPj00OT9yZS00OSsxMDpyZT49MTc/cmUtMTcrMTA6cmV9cmV0dXJuIHB9RS5pc0JOPWZ1bmN0aW9uKGcpe3JldHVybiBnIGluc3Rh'@;
put 'bmNlb2YgRXx8bnVsbCE9PWcmJiJvYmplY3QiPT10eXBlb2YgZyYmZy5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PUUud29yZFNpemUmJkFycmF5LmlzQXJyYXkoZy53b3Jkcyl9LEUubWF4PWZ1bmN0aW9uKGcsQyl7cmV0dXJuIGcuY21wKEMpPjA/ZzpDfSxFLm1pbj1mdW5jdGlvbihnLEMpe3Jl'@;
put 'dHVybiBnLmNtcChDKTwwP2c6Q30sRS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oZyxDLE0pe2lmKCJudW1iZXIiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdE51bWJlcihnLEMsTSk7aWYoIm9iamVjdCI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0QXJyYXkoZyxDLE0pOyJoZXgi'@;
put 'PT09QyYmKEM9MTYpLEkoQz09PSgwfEMpJiZDPj0yJiZDPD0zNik7dmFyIHk9MDsiLSI9PT0oZz1nLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKHkrKyx0aGlzLm5lZ2F0aXZlPTEpLHk8Zy5sZW5ndGgmJigxNj09PUM/dGhpcy5fcGFyc2VIZXgoZyx5LE0pOih0aGlzLl9w'@;
put 'YXJzZUJhc2UoZyxDLHkpLCJsZSI9PT1NJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksQyxNKSkpfSxFLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihnLEMsTSl7ZzwwJiYodGhpcy5uZWdhdGl2ZT0xLGc9LWcpLGc8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYz'@;
put 'JmddLHRoaXMubGVuZ3RoPTEpOmc8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooSShnPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2Mywx'@;
put 'XSx0aGlzLmxlbmd0aD0zKSwibGUiPT09TSYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEMsTSl9LEUucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oZyxDLE0pe2lmKEkoIm51bWJlciI9PXR5cGVvZiBnLmxlbmd0aCksZy5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9'@;
put 'WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoZy5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGg7eSsrKXRoaXMud29yZHNbeV09MDt2YXIgcCxTLFE9MDtpZigiYmUiPT09TSlmb3Io'@;
put 'eT1nLmxlbmd0aC0xLHA9MDt5Pj0wO3ktPTMpdGhpcy53b3Jkc1twXXw9KFM9Z1t5XXxnW3ktMV08PDh8Z1t5LTJdPDwxNik8PFEmNjcxMDg4NjMsdGhpcy53b3Jkc1twKzFdPVM+Pj4yNi1RJjY3MTA4ODYzLChRKz0yNCk+PTI2JiYoUS09MjYscCsrKTtlbHNlIGlmKCJsZSI9PT1NKWZvcih5'@;
put 'PTAscD0wO3k8Zy5sZW5ndGg7eSs9Myl0aGlzLndvcmRzW3BdfD0oUz1nW3ldfGdbeSsxXTw8OHxnW3krMl08PDE2KTw8USY2NzEwODg2Myx0aGlzLndvcmRzW3ArMV09Uz4+PjI2LVEmNjcxMDg4NjMsKFErPTI0KT49MjYmJihRLT0yNixwKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LEUucHJv'@;
put 'dG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihnLEMsTSl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChnLmxlbmd0aC1DKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciB5PTA7eTx0aGlzLmxlbmd0aDt5KyspdGhpcy53b3Jkc1t5XT0wO3ZhciBwLFM9MCxRPTA7'@;
put 'aWYoImJlIj09PU0pZm9yKHk9Zy5sZW5ndGgtMTt5Pj1DO3ktPTIpcD1WKGcsQyx5KTw8Uyx0aGlzLndvcmRzW1FdfD02NzEwODg2MyZwLFM+PTE4PyhTLT0xOCx0aGlzLndvcmRzW1ErPTFdfD1wPj4+MjYpOlMrPTg7ZWxzZSBmb3IoeT0oZy5sZW5ndGgtQyklMj09MD9DKzE6Qzt5PGcubGVu'@;
put 'Z3RoO3krPTIpcD1WKGcsQyx5KTw8Uyx0aGlzLndvcmRzW1FdfD02NzEwODg2MyZwLFM+PTE4PyhTLT0xOCx0aGlzLndvcmRzW1ErPTFdfD1wPj4+MjYpOlMrPTg7dGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKGcsQyxNKXt0aGlzLndvcmRzPVswXSx0aGlz'@;
put 'Lmxlbmd0aD0xO2Zvcih2YXIgeT0wLHA9MTtwPD02NzEwODg2MztwKj1DKXkrKzt5LS0scD1wL0N8MDtmb3IodmFyIFM9Zy5sZW5ndGgtTSxRPVMleSxyZT1NYXRoLm1pbihTLFMtUSkrTSxmZT0wLG1lPU07bWU8cmU7bWUrPXkpZmU9RyhnLG1lLG1lK3ksQyksdGhpcy5pbXVsbihwKSx0aGlz'@;
put 'LndvcmRzWzBdK2ZlPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPWZlOnRoaXMuX2lhZGRuKGZlKTtpZigwIT09USl7dmFyIGtlPTE7Zm9yKGZlPUcoZyxtZSxnLmxlbmd0aCxDKSxtZT0wO21lPFE7bWUrKylrZSo9Qzt0aGlzLmltdWxuKGtlKSx0aGlzLndvcmRzWzBdK2ZlPDY3MTA4ODY0P3Ro'@;
put 'aXMud29yZHNbMF0rPWZlOnRoaXMuX2lhZGRuKGZlKX10aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZyl7Zy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKWcud29yZHNbQ109dGhpcy53b3Jkc1tDXTtnLmxl'@;
put 'bmd0aD10aGlzLmxlbmd0aCxnLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsZy5yZWQ9dGhpcy5yZWR9LEUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IEUobnVsbCk7cmV0dXJuIHRoaXMuY29weShnKSxnfSxFLnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKGcpe2Zvcig7'@;
put 'dGhpcy5sZW5ndGg8ZzspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxFLnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25v'@;
put 'cm1TaWduKCl9LEUucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSxFLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjog'@;
put 'IjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBXPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAw'@;
put 'MDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAw'@;
put 'MDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLFU9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYs'@;
put 'NSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0scT1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3'@;
put 'MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYw'@;
put 'NDY2MTc2XTtmdW5jdGlvbiB0ZShnLEMsTSl7TS5uZWdhdGl2ZT1DLm5lZ2F0aXZlXmcubmVnYXRpdmU7dmFyIHk9Zy5sZW5ndGgrQy5sZW5ndGh8MDtNLmxlbmd0aD15LHk9eS0xfDA7dmFyIHA9MHxnLndvcmRzWzBdLFM9MHxDLndvcmRzWzBdLFE9cCpTLGZlPVEvNjcxMDg4NjR8MDtNLndv'@;
put 'cmRzWzBdPTY3MTA4ODYzJlE7Zm9yKHZhciBtZT0xO21lPHk7bWUrKyl7Zm9yKHZhciBrZT1mZT4+PjI2LFRlPTY3MTA4ODYzJmZlLFBlPU1hdGgubWluKG1lLEMubGVuZ3RoLTEpLEZlPU1hdGgubWF4KDAsbWUtZy5sZW5ndGgrMSk7RmU8PVBlO0ZlKyspa2UrPShRPShwPTB8Zy53b3Jkc1tt'@;
put 'ZS1GZXwwXSkqKFM9MHxDLndvcmRzW0ZlXSkrVGUpLzY3MTA4ODY0fDAsVGU9NjcxMDg4NjMmUTtNLndvcmRzW21lXT0wfFRlLGZlPTB8a2V9cmV0dXJuIDAhPT1mZT9NLndvcmRzW21lXT0wfGZlOk0ubGVuZ3RoLS0sTS5zdHJpcCgpfUUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGcs'@;
put 'Qyl7dmFyIE07aWYoQz0wfEN8fDEsMTY9PT0oZz1nfHwxMCl8fCJoZXgiPT09Zyl7TT0iIjtmb3IodmFyIHk9MCxwPTAsUz0wO1M8dGhpcy5sZW5ndGg7UysrKXt2YXIgUT10aGlzLndvcmRzW1NdLHJlPSgxNjc3NzIxNSYoUTw8eXxwKSkudG9TdHJpbmcoMTYpO009MCE9KHA9UT4+PjI0LXkm'@;
put 'MTY3NzcyMTUpfHxTIT09dGhpcy5sZW5ndGgtMT9XWzYtcmUubGVuZ3RoXStyZStNOnJlK00sKHkrPTIpPj0yNiYmKHktPTI2LFMtLSl9Zm9yKDAhPT1wJiYoTT1wLnRvU3RyaW5nKDE2KStNKTtNLmxlbmd0aCVDIT0wOylNPSIwIitNO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKE09Ii0i'@;
put 'K00pLE19aWYoZz09PSgwfGcpJiZnPj0yJiZnPD0zNil7dmFyIGZlPVVbZ10sbWU9cVtnXTtNPSIiO3ZhciBrZT10aGlzLmNsb25lKCk7Zm9yKGtlLm5lZ2F0aXZlPTA7IWtlLmlzWmVybygpOyl7dmFyIFRlPWtlLm1vZG4obWUpLnRvU3RyaW5nKGcpO009KGtlPWtlLmlkaXZuKG1lKSkuaXNa'@;
put 'ZXJvKCk/VGUrTTpXW2ZlLVRlLmxlbmd0aF0rVGUrTX1mb3IodGhpcy5pc1plcm8oKSYmKE09IjAiK00pO00ubGVuZ3RoJUMhPTA7KU09IjAiK007cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoTT0iLSIrTSksTX1JKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LEUu'@;
put 'cHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIGc9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP2crPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9nKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRo'@;
put 'aXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmSSghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LWc6Z30sRS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxFLnByb3Rv'@;
put 'dHlwZS50b0J1ZmZlcj1mdW5jdGlvbihnLEMpe3JldHVybiBJKHZvaWQgMCE9PXopLHRoaXMudG9BcnJheUxpa2UoeixnLEMpfSxFLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksZyxDKX0sRS5wcm90b3R5cGUudG9BcnJheUxp'@;
put 'a2U9ZnVuY3Rpb24oZyxDLE0pe3ZhciB5PXRoaXMuYnl0ZUxlbmd0aCgpLHA9TXx8TWF0aC5tYXgoMSx5KTtJKHk8PXAsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxJKHA+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBT'@;
put 'LFEscmU9ImxlIj09PUMsZmU9bmV3IGcocCksbWU9dGhpcy5jbG9uZSgpO2lmKHJlKXtmb3IoUT0wOyFtZS5pc1plcm8oKTtRKyspUz1tZS5hbmRsbigyNTUpLG1lLml1c2hybig4KSxmZVtRXT1TO2Zvcig7UTxwO1ErKylmZVtRXT0wfWVsc2V7Zm9yKFE9MDtRPHAteTtRKyspZmVbUV09MDtm'@;
put 'b3IoUT0wOyFtZS5pc1plcm8oKTtRKyspUz1tZS5hbmRsbigyNTUpLG1lLml1c2hybig4KSxmZVtwLVEtMV09U31yZXR1cm4gZmV9LEUucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihnKXtyZXR1cm4gMzItTWF0aC5jbHozMihnKX06ZnVuY3Rpb24oZyl7dmFyIEM9'@;
put 'ZyxNPTA7cmV0dXJuIEM+PTQwOTYmJihNKz0xMyxDPj4+PTEzKSxDPj02NCYmKE0rPTcsQz4+Pj03KSxDPj04JiYoTSs9NCxDPj4+PTQpLEM+PTImJihNKz0yLEM+Pj49MiksTStDfSxFLnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oZyl7aWYoMD09PWcpcmV0dXJuIDI2O3ZhciBDPWcs'@;
put 'TT0wO3JldHVybiEoODE5MSZDKSYmKE0rPTEzLEM+Pj49MTMpLCEoMTI3JkMpJiYoTSs9NyxDPj4+PTcpLCEoMTUmQykmJihNKz00LEM+Pj49NCksISgzJkMpJiYoTSs9MixDPj4+PTIpLCEoMSZDKSYmTSsrLE19LEUucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBDPXRoaXMu'@;
put 'X2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK0N9LEUucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIGc9MCxDPTA7Qzx0aGlzLmxlbmd0aDtDKyspe3ZhciBN'@;
put 'PXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbQ10pO2lmKGcrPU0sMjYhPT1NKWJyZWFrfXJldHVybiBnfSxFLnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSxFLnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24oZyl7'@;
put 'cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4oZykuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSxFLnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy50ZXN0bihnLTEpP3RoaXMubm90bihnKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgp'@;
put 'fSxFLnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sRS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LEUucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRo'@;
put 'aXMubmVnYXRpdmVePTEpLHRoaXN9LEUucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgQz0wO0M8Zy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109dGhpcy53b3Jkc1tDXXxnLndv'@;
put 'cmRzW0NdO3JldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlvcj1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT0odGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdW9yKGcpfSxFLnByb3RvdHlwZS5vcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/'@;
put 'dGhpcy5jbG9uZSgpLmlvcihnKTpnLmNsb25lKCkuaW9yKHRoaXMpfSxFLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKGcpOmcuY2xvbmUoKS5pdW9yKHRoaXMpfSxFLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlv'@;
put 'bihnKXt2YXIgQztDPXRoaXMubGVuZ3RoPmcubGVuZ3RoP2c6dGhpcztmb3IodmFyIE09MDtNPEMubGVuZ3RoO00rKyl0aGlzLndvcmRzW01dPXRoaXMud29yZHNbTV0mZy53b3Jkc1tNXTtyZXR1cm4gdGhpcy5sZW5ndGg9Qy5sZW5ndGgsdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pYW5k'@;
put 'PWZ1bmN0aW9uKGcpe3JldHVybiBJKDA9PSh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1YW5kKGcpfSxFLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKGcpOmcuY2xvbmUoKS5pYW5kKHRoaXMp'@;
put 'fSxFLnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoZyk6Zy5jbG9uZSgpLml1YW5kKHRoaXMpfSxFLnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihnKXt2YXIgQyxNO3RoaXMubGVuZ3RoPmcubGVuZ3RoPyhD'@;
put 'PXRoaXMsTT1nKTooQz1nLE09dGhpcyk7Zm9yKHZhciB5PTA7eTxNLmxlbmd0aDt5KyspdGhpcy53b3Jkc1t5XT1DLndvcmRzW3ldXk0ud29yZHNbeV07aWYodGhpcyE9PUMpZm9yKDt5PEMubGVuZ3RoO3krKyl0aGlzLndvcmRzW3ldPUMud29yZHNbeV07cmV0dXJuIHRoaXMubGVuZ3RoPUMu'@;
put 'bGVuZ3RoLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT0odGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihnKX0sRS5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlz'@;
put 'LmNsb25lKCkuaXhvcihnKTpnLmNsb25lKCkuaXhvcih0aGlzKX0sRS5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKGcpOmcuY2xvbmUoKS5pdXhvcih0aGlzKX0sRS5wcm90b3R5cGUuaW5vdG49ZnVuY3Rp'@;
put 'b24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBDPTB8TWF0aC5jZWlsKGcvMjYpLE09ZyUyNjt0aGlzLl9leHBhbmQoQyksTT4wJiZDLS07Zm9yKHZhciB5PTA7eTxDO3krKyl0aGlzLndvcmRzW3ldPTY3MTA4ODYzJn50aGlzLndvcmRzW3ldO3JldHVybiBNPjAmJih0aGlz'@;
put 'LndvcmRzW3ldPX50aGlzLndvcmRzW3ldJjY3MTA4ODYzPj4yNi1NKSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihnKX0sRS5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihnLEMpe0koIm51bWJlciI9PXR5cGVvZiBn'@;
put 'JiZnPj0wKTt2YXIgTT1nLzI2fDAseT1nJTI2O3JldHVybiB0aGlzLl9leHBhbmQoTSsxKSx0aGlzLndvcmRzW01dPUM/dGhpcy53b3Jkc1tNXXwxPDx5OnRoaXMud29yZHNbTV0mfigxPDx5KSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyl7dmFyIEMsTSx5O2lm'@;
put 'KDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLEM9dGhpcy5pc3ViKGcpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIGcubmVnYXRpdmU9MCxD'@;
put 'PXRoaXMuaXN1YihnKSxnLm5lZ2F0aXZlPTEsQy5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oTT10aGlzLHk9Zyk6KE09Zyx5PXRoaXMpO2Zvcih2YXIgcD0wLFM9MDtTPHkubGVuZ3RoO1MrKyl0aGlzLndvcmRzW1NdPTY3MTA4ODYzJihDPSgwfE0ud29yZHNbU10pKygwfHku'@;
put 'd29yZHNbU10pK3ApLHA9Qz4+PjI2O2Zvcig7MCE9PXAmJlM8TS5sZW5ndGg7UysrKXRoaXMud29yZHNbU109NjcxMDg4NjMmKEM9KDB8TS53b3Jkc1tTXSkrcCkscD1DPj4+MjY7aWYodGhpcy5sZW5ndGg9TS5sZW5ndGgsMCE9PXApdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09cCx0aGlzLmxl'@;
put 'bmd0aCsrO2Vsc2UgaWYoTSE9PXRoaXMpZm9yKDtTPE0ubGVuZ3RoO1MrKyl0aGlzLndvcmRzW1NdPU0ud29yZHNbU107cmV0dXJuIHRoaXN9LEUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnKXt2YXIgQztyZXR1cm4gMCE9PWcubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhnLm5lZ2F0'@;
put 'aXZlPTAsQz10aGlzLnN1YihnKSxnLm5lZ2F0aXZlXj0xLEMpOjA9PT1nLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLEM9Zy5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLEMpOnRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKGcpOmcu'@;
put 'Y2xvbmUoKS5pYWRkKHRoaXMpfSxFLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcpe2lmKDAhPT1nLm5lZ2F0aXZlKXtnLm5lZ2F0aXZlPTA7dmFyIEM9dGhpcy5pYWRkKGcpO3JldHVybiBnLm5lZ2F0aXZlPTEsQy5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhp'@;
put 'cy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgTSx5LHA9dGhpcy5jbXAoZyk7aWYoMD09PXApcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3A+MD8oTT10aGlzLHk9Zyk6'@;
put 'KE09Zyx5PXRoaXMpO2Zvcih2YXIgUz0wLFE9MDtRPHkubGVuZ3RoO1ErKylTPShDPSgwfE0ud29yZHNbUV0pLSgwfHkud29yZHNbUV0pK1MpPj4yNix0aGlzLndvcmRzW1FdPTY3MTA4ODYzJkM7Zm9yKDswIT09UyYmUTxNLmxlbmd0aDtRKyspUz0oQz0oMHxNLndvcmRzW1FdKStTKT4+MjYs'@;
put 'dGhpcy53b3Jkc1tRXT02NzEwODg2MyZDO2lmKDA9PT1TJiZRPE0ubGVuZ3RoJiZNIT09dGhpcylmb3IoO1E8TS5sZW5ndGg7USsrKXRoaXMud29yZHNbUV09TS53b3Jkc1tRXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsUSksTSE9PXRoaXMmJih0aGlzLm5lZ2F0'@;
put 'aXZlPTEpLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihnKX07dmFyIG5lPWZ1bmN0aW9uKGcsQyxNKXt2YXIgeSxwLFMsUT1nLndvcmRzLHJlPUMud29yZHMsZmU9TS53b3JkcyxtZT0wLGtlPTB8UVswXSxUZT04MTkx'@;
put 'JmtlLFBlPWtlPj4+MTMsRmU9MHxRWzFdLE5lPTgxOTEmRmUsTGU9RmU+Pj4xMyxCZT0wfFFbMl0sSGU9ODE5MSZCZSxRZT1CZT4+PjEzLG10PTB8UVszXSxLZT04MTkxJm10LHdlPW10Pj4+MTMsSWU9MHxRWzRdLE9lPTgxOTEmSWUsZXQ9SWU+Pj4xMyxudD0wfFFbNV0scWU9ODE5MSZudCxo'@;
put 'dD1udD4+PjEzLEVlPTB8UVs2XSxEZT04MTkxJkVlLCRlPUVlPj4+MTMsYXQ9MHxRWzddLGN0PTgxOTEmYXQsT3Q9YXQ+Pj4xMyxQdD0wfFFbOF0sQXQ9ODE5MSZQdCxKdD1QdD4+PjEzLG1uPTB8UVs5XSxOdD04MTkxJm1uLGJuPW1uPj4+MTMsR249MHxyZVswXSxvbj04MTkxJkduLCRuPUdu'@;
put 'Pj4+MTMsTm49MHxyZVsxXSxwdD04MTkxJk5uLHBuPU5uPj4+MTMsaG49MHxyZVsyXSxDdD04MTkxJmhuLGVuPWhuPj4+MTMsX3Q9MHxyZVszXSxWdD04MTkxJl90LF9uPV90Pj4+MTMsb3Q9MHxyZVs0XSxJdD04MTkxJm90LG5uPW90Pj4+MTMsRHQ9MHxyZVs1XSx2dD04MTkxJkR0LEd0PUR0'@;
put 'Pj4+MTMsTG49MHxyZVs2XSx6dD04MTkxJkxuLE1uPUxuPj4+MTMsVG49MHxyZVs3XSxzbj04MTkxJlRuLEJuPVRuPj4+MTMsRm49MHxyZVs4XSxxdD04MTkxJkZuLEhuPUZuPj4+MTMsaWk9MHxyZVs5XSxjbj04MTkxJmlpLGpuPWlpPj4+MTM7TS5uZWdhdGl2ZT1nLm5lZ2F0aXZlXkMubmVn'@;
put 'YXRpdmUsTS5sZW5ndGg9MTk7dmFyIFhyPShtZSsoeT1NYXRoLmltdWwoVGUsb24pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKFRlLCRuKSkrTWF0aC5pbXVsKFBlLG9uKXwwKSk8PDEzKXwwO21lPSgoUz1NYXRoLmltdWwoUGUsJG4pKSsocD4+PjEzKXwwKSsoWHI+Pj4yNil8MCxYciY9'@;
put 'NjcxMDg4NjMseT1NYXRoLmltdWwoTmUsb24pLHA9KHA9TWF0aC5pbXVsKE5lLCRuKSkrTWF0aC5pbXVsKExlLG9uKXwwLFM9TWF0aC5pbXVsKExlLCRuKTt2YXIgdmk9KG1lKyh5PXkrTWF0aC5pbXVsKFRlLHB0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoVGUscG4pfDApK01h'@;
put 'dGguaW11bChQZSxwdCl8MCkpPDwxMyl8MDttZT0oKFM9UytNYXRoLmltdWwoUGUscG4pfDApKyhwPj4+MTMpfDApKyh2aT4+PjI2KXwwLHZpJj02NzEwODg2Myx5PU1hdGguaW11bChIZSxvbikscD0ocD1NYXRoLmltdWwoSGUsJG4pKStNYXRoLmltdWwoUWUsb24pfDAsUz1NYXRoLmltdWwo'@;
put 'UWUsJG4pLHk9eStNYXRoLmltdWwoTmUscHQpfDAscD0ocD1wK01hdGguaW11bChOZSxwbil8MCkrTWF0aC5pbXVsKExlLHB0KXwwLFM9UytNYXRoLmltdWwoTGUscG4pfDA7dmFyIEVyPShtZSsoeT15K01hdGguaW11bChUZSxDdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFRl'@;
put 'LGVuKXwwKStNYXRoLmltdWwoUGUsQ3QpfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKFBlLGVuKXwwKSsocD4+PjEzKXwwKSsoRXI+Pj4yNil8MCxFciY9NjcxMDg4NjMseT1NYXRoLmltdWwoS2Usb24pLHA9KHA9TWF0aC5pbXVsKEtlLCRuKSkrTWF0aC5pbXVsKHdlLG9uKXwwLFM9'@;
put 'TWF0aC5pbXVsKHdlLCRuKSx5PXkrTWF0aC5pbXVsKEhlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoSGUscG4pfDApK01hdGguaW11bChRZSxwdCl8MCxTPVMrTWF0aC5pbXVsKFFlLHBuKXwwLHk9eStNYXRoLmltdWwoTmUsQ3QpfDAscD0ocD1wK01hdGguaW11bChOZSxlbil8MCkrTWF0aC5p'@;
put 'bXVsKExlLEN0KXwwLFM9UytNYXRoLmltdWwoTGUsZW4pfDA7dmFyIFlpPShtZSsoeT15K01hdGguaW11bChUZSxWdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFRlLF9uKXwwKStNYXRoLmltdWwoUGUsVnQpfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKFBlLF9uKXww'@;
put 'KSsocD4+PjEzKXwwKSsoWWk+Pj4yNil8MCxZaSY9NjcxMDg4NjMseT1NYXRoLmltdWwoT2Usb24pLHA9KHA9TWF0aC5pbXVsKE9lLCRuKSkrTWF0aC5pbXVsKGV0LG9uKXwwLFM9TWF0aC5pbXVsKGV0LCRuKSx5PXkrTWF0aC5pbXVsKEtlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoS2UscG4p'@;
put 'fDApK01hdGguaW11bCh3ZSxwdCl8MCxTPVMrTWF0aC5pbXVsKHdlLHBuKXwwLHk9eStNYXRoLmltdWwoSGUsQ3QpfDAscD0ocD1wK01hdGguaW11bChIZSxlbil8MCkrTWF0aC5pbXVsKFFlLEN0KXwwLFM9UytNYXRoLmltdWwoUWUsZW4pfDAseT15K01hdGguaW11bChOZSxWdCl8MCxwPShw'@;
put 'PXArTWF0aC5pbXVsKE5lLF9uKXwwKStNYXRoLmltdWwoTGUsVnQpfDAsUz1TK01hdGguaW11bChMZSxfbil8MDt2YXIgSnI9KG1lKyh5PXkrTWF0aC5pbXVsKFRlLEl0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoVGUsbm4pfDApK01hdGguaW11bChQZSxJdCl8MCkpPDwxMyl8'@;
put 'MDttZT0oKFM9UytNYXRoLmltdWwoUGUsbm4pfDApKyhwPj4+MTMpfDApKyhKcj4+PjI2KXwwLEpyJj02NzEwODg2Myx5PU1hdGguaW11bChxZSxvbikscD0ocD1NYXRoLmltdWwocWUsJG4pKStNYXRoLmltdWwoaHQsb24pfDAsUz1NYXRoLmltdWwoaHQsJG4pLHk9eStNYXRoLmltdWwoT2Us'@;
put 'cHQpfDAscD0ocD1wK01hdGguaW11bChPZSxwbil8MCkrTWF0aC5pbXVsKGV0LHB0KXwwLFM9UytNYXRoLmltdWwoZXQscG4pfDAseT15K01hdGguaW11bChLZSxDdCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLGVuKXwwKStNYXRoLmltdWwod2UsQ3QpfDAsUz1TK01hdGguaW11bCh3ZSxlbil8'@;
put 'MCx5PXkrTWF0aC5pbXVsKEhlLFZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoSGUsX24pfDApK01hdGguaW11bChRZSxWdCl8MCxTPVMrTWF0aC5pbXVsKFFlLF9uKXwwLHk9eStNYXRoLmltdWwoTmUsSXQpfDAscD0ocD1wK01hdGguaW11bChOZSxubil8MCkrTWF0aC5pbXVsKExlLEl0KXwwLFM9'@;
put 'UytNYXRoLmltdWwoTGUsbm4pfDA7dmFyIGFvPShtZSsoeT15K01hdGguaW11bChUZSx2dCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFRlLEd0KXwwKStNYXRoLmltdWwoUGUsdnQpfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKFBlLEd0KXwwKSsocD4+PjEzKXwwKSso'@;
put 'YW8+Pj4yNil8MCxhbyY9NjcxMDg4NjMseT1NYXRoLmltdWwoRGUsb24pLHA9KHA9TWF0aC5pbXVsKERlLCRuKSkrTWF0aC5pbXVsKCRlLG9uKXwwLFM9TWF0aC5pbXVsKCRlLCRuKSx5PXkrTWF0aC5pbXVsKHFlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwocWUscG4pfDApK01hdGguaW11bCho'@;
put 'dCxwdCl8MCxTPVMrTWF0aC5pbXVsKGh0LHBuKXwwLHk9eStNYXRoLmltdWwoT2UsQ3QpfDAscD0ocD1wK01hdGguaW11bChPZSxlbil8MCkrTWF0aC5pbXVsKGV0LEN0KXwwLFM9UytNYXRoLmltdWwoZXQsZW4pfDAseT15K01hdGguaW11bChLZSxWdCl8MCxwPShwPXArTWF0aC5pbXVsKEtl'@;
put 'LF9uKXwwKStNYXRoLmltdWwod2UsVnQpfDAsUz1TK01hdGguaW11bCh3ZSxfbil8MCx5PXkrTWF0aC5pbXVsKEhlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoSGUsbm4pfDApK01hdGguaW11bChRZSxJdCl8MCxTPVMrTWF0aC5pbXVsKFFlLG5uKXwwLHk9eStNYXRoLmltdWwoTmUsdnQpfDAs'@;
put 'cD0ocD1wK01hdGguaW11bChOZSxHdCl8MCkrTWF0aC5pbXVsKExlLHZ0KXwwLFM9UytNYXRoLmltdWwoTGUsR3QpfDA7dmFyIEJyPShtZSsoeT15K01hdGguaW11bChUZSx6dCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFRlLE1uKXwwKStNYXRoLmltdWwoUGUsenQpfDApKTw8'@;
put 'MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKFBlLE1uKXwwKSsocD4+PjEzKXwwKSsoQnI+Pj4yNil8MCxCciY9NjcxMDg4NjMseT1NYXRoLmltdWwoY3Qsb24pLHA9KHA9TWF0aC5pbXVsKGN0LCRuKSkrTWF0aC5pbXVsKE90LG9uKXwwLFM9TWF0aC5pbXVsKE90LCRuKSx5PXkrTWF0aC5pbXVs'@;
put 'KERlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUscG4pfDApK01hdGguaW11bCgkZSxwdCl8MCxTPVMrTWF0aC5pbXVsKCRlLHBuKXwwLHk9eStNYXRoLmltdWwocWUsQ3QpfDAscD0ocD1wK01hdGguaW11bChxZSxlbil8MCkrTWF0aC5pbXVsKGh0LEN0KXwwLFM9UytNYXRoLmltdWwoaHQs'@;
put 'ZW4pfDAseT15K01hdGguaW11bChPZSxWdCl8MCxwPShwPXArTWF0aC5pbXVsKE9lLF9uKXwwKStNYXRoLmltdWwoZXQsVnQpfDAsUz1TK01hdGguaW11bChldCxfbil8MCx5PXkrTWF0aC5pbXVsKEtlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoS2Usbm4pfDApK01hdGguaW11bCh3ZSxJdCl8'@;
put 'MCxTPVMrTWF0aC5pbXVsKHdlLG5uKXwwLHk9eStNYXRoLmltdWwoSGUsdnQpfDAscD0ocD1wK01hdGguaW11bChIZSxHdCl8MCkrTWF0aC5pbXVsKFFlLHZ0KXwwLFM9UytNYXRoLmltdWwoUWUsR3QpfDAseT15K01hdGguaW11bChOZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKE5lLE1uKXww'@;
put 'KStNYXRoLmltdWwoTGUsenQpfDAsUz1TK01hdGguaW11bChMZSxNbil8MDt2YXIgSmk9KG1lKyh5PXkrTWF0aC5pbXVsKFRlLHNuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoVGUsQm4pfDApK01hdGguaW11bChQZSxzbil8MCkpPDwxMyl8MDttZT0oKFM9UytNYXRoLmltdWwo'@;
put 'UGUsQm4pfDApKyhwPj4+MTMpfDApKyhKaT4+PjI2KXwwLEppJj02NzEwODg2Myx5PU1hdGguaW11bChBdCxvbikscD0ocD1NYXRoLmltdWwoQXQsJG4pKStNYXRoLmltdWwoSnQsb24pfDAsUz1NYXRoLmltdWwoSnQsJG4pLHk9eStNYXRoLmltdWwoY3QscHQpfDAscD0ocD1wK01hdGguaW11'@;
put 'bChjdCxwbil8MCkrTWF0aC5pbXVsKE90LHB0KXwwLFM9UytNYXRoLmltdWwoT3QscG4pfDAseT15K01hdGguaW11bChEZSxDdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLGVuKXwwKStNYXRoLmltdWwoJGUsQ3QpfDAsUz1TK01hdGguaW11bCgkZSxlbil8MCx5PXkrTWF0aC5pbXVsKHFlLFZ0'@;
put 'KXwwLHA9KHA9cCtNYXRoLmltdWwocWUsX24pfDApK01hdGguaW11bChodCxWdCl8MCxTPVMrTWF0aC5pbXVsKGh0LF9uKXwwLHk9eStNYXRoLmltdWwoT2UsSXQpfDAscD0ocD1wK01hdGguaW11bChPZSxubil8MCkrTWF0aC5pbXVsKGV0LEl0KXwwLFM9UytNYXRoLmltdWwoZXQsbm4pfDAs'@;
put 'eT15K01hdGguaW11bChLZSx2dCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLEd0KXwwKStNYXRoLmltdWwod2UsdnQpfDAsUz1TK01hdGguaW11bCh3ZSxHdCl8MCx5PXkrTWF0aC5pbXVsKEhlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoSGUsTW4pfDApK01hdGguaW11bChRZSx6dCl8MCxTPVMr'@;
put 'TWF0aC5pbXVsKFFlLE1uKXwwLHk9eStNYXRoLmltdWwoTmUsc24pfDAscD0ocD1wK01hdGguaW11bChOZSxCbil8MCkrTWF0aC5pbXVsKExlLHNuKXwwLFM9UytNYXRoLmltdWwoTGUsQm4pfDA7dmFyIHRvPShtZSsoeT15K01hdGguaW11bChUZSxxdCl8MCl8MCkrKCg4MTkxJihwPShwPXAr'@;
put 'TWF0aC5pbXVsKFRlLEhuKXwwKStNYXRoLmltdWwoUGUscXQpfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKFBlLEhuKXwwKSsocD4+PjEzKXwwKSsodG8+Pj4yNil8MCx0byY9NjcxMDg4NjMseT1NYXRoLmltdWwoTnQsb24pLHA9KHA9TWF0aC5pbXVsKE50LCRuKSkrTWF0aC5pbXVs'@;
put 'KGJuLG9uKXwwLFM9TWF0aC5pbXVsKGJuLCRuKSx5PXkrTWF0aC5pbXVsKEF0LHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoQXQscG4pfDApK01hdGguaW11bChKdCxwdCl8MCxTPVMrTWF0aC5pbXVsKEp0LHBuKXwwLHk9eStNYXRoLmltdWwoY3QsQ3QpfDAscD0ocD1wK01hdGguaW11bChjdCxl'@;
put 'bil8MCkrTWF0aC5pbXVsKE90LEN0KXwwLFM9UytNYXRoLmltdWwoT3QsZW4pfDAseT15K01hdGguaW11bChEZSxWdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLF9uKXwwKStNYXRoLmltdWwoJGUsVnQpfDAsUz1TK01hdGguaW11bCgkZSxfbil8MCx5PXkrTWF0aC5pbXVsKHFlLEl0KXwwLHA9'@;
put 'KHA9cCtNYXRoLmltdWwocWUsbm4pfDApK01hdGguaW11bChodCxJdCl8MCxTPVMrTWF0aC5pbXVsKGh0LG5uKXwwLHk9eStNYXRoLmltdWwoT2UsdnQpfDAscD0ocD1wK01hdGguaW11bChPZSxHdCl8MCkrTWF0aC5pbXVsKGV0LHZ0KXwwLFM9UytNYXRoLmltdWwoZXQsR3QpfDAseT15K01h'@;
put 'dGguaW11bChLZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLE1uKXwwKStNYXRoLmltdWwod2UsenQpfDAsUz1TK01hdGguaW11bCh3ZSxNbil8MCx5PXkrTWF0aC5pbXVsKEhlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoSGUsQm4pfDApK01hdGguaW11bChRZSxzbil8MCxTPVMrTWF0aC5p'@;
put 'bXVsKFFlLEJuKXwwLHk9eStNYXRoLmltdWwoTmUscXQpfDAscD0ocD1wK01hdGguaW11bChOZSxIbil8MCkrTWF0aC5pbXVsKExlLHF0KXwwLFM9UytNYXRoLmltdWwoTGUsSG4pfDA7dmFyIGNvPShtZSsoeT15K01hdGguaW11bChUZSxjbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5p'@;
put 'bXVsKFRlLGpuKXwwKStNYXRoLmltdWwoUGUsY24pfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKFBlLGpuKXwwKSsocD4+PjEzKXwwKSsoY28+Pj4yNil8MCxjbyY9NjcxMDg4NjMseT1NYXRoLmltdWwoTnQscHQpLHA9KHA9TWF0aC5pbXVsKE50LHBuKSkrTWF0aC5pbXVsKGJuLHB0'@;
put 'KXwwLFM9TWF0aC5pbXVsKGJuLHBuKSx5PXkrTWF0aC5pbXVsKEF0LEN0KXwwLHA9KHA9cCtNYXRoLmltdWwoQXQsZW4pfDApK01hdGguaW11bChKdCxDdCl8MCxTPVMrTWF0aC5pbXVsKEp0LGVuKXwwLHk9eStNYXRoLmltdWwoY3QsVnQpfDAscD0ocD1wK01hdGguaW11bChjdCxfbil8MCkr'@;
put 'TWF0aC5pbXVsKE90LFZ0KXwwLFM9UytNYXRoLmltdWwoT3QsX24pfDAseT15K01hdGguaW11bChEZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLG5uKXwwKStNYXRoLmltdWwoJGUsSXQpfDAsUz1TK01hdGguaW11bCgkZSxubil8MCx5PXkrTWF0aC5pbXVsKHFlLHZ0KXwwLHA9KHA9cCtN'@;
put 'YXRoLmltdWwocWUsR3QpfDApK01hdGguaW11bChodCx2dCl8MCxTPVMrTWF0aC5pbXVsKGh0LEd0KXwwLHk9eStNYXRoLmltdWwoT2UsenQpfDAscD0ocD1wK01hdGguaW11bChPZSxNbil8MCkrTWF0aC5pbXVsKGV0LHp0KXwwLFM9UytNYXRoLmltdWwoZXQsTW4pfDAseT15K01hdGguaW11'@;
put 'bChLZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKEtlLEJuKXwwKStNYXRoLmltdWwod2Usc24pfDAsUz1TK01hdGguaW11bCh3ZSxCbil8MCx5PXkrTWF0aC5pbXVsKEhlLHF0KXwwLHA9KHA9cCtNYXRoLmltdWwoSGUsSG4pfDApK01hdGguaW11bChRZSxxdCl8MCxTPVMrTWF0aC5pbXVsKFFl'@;
put 'LEhuKXwwO3ZhciBsbz0obWUrKHk9eStNYXRoLmltdWwoTmUsY24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChOZSxqbil8MCkrTWF0aC5pbXVsKExlLGNuKXwwKSk8PDEzKXwwO21lPSgoUz1TK01hdGguaW11bChMZSxqbil8MCkrKHA+Pj4xMyl8MCkrKGxvPj4+MjYpfDAsbG8m'@;
put 'PTY3MTA4ODYzLHk9TWF0aC5pbXVsKE50LEN0KSxwPShwPU1hdGguaW11bChOdCxlbikpK01hdGguaW11bChibixDdCl8MCxTPU1hdGguaW11bChibixlbikseT15K01hdGguaW11bChBdCxWdCl8MCxwPShwPXArTWF0aC5pbXVsKEF0LF9uKXwwKStNYXRoLmltdWwoSnQsVnQpfDAsUz1TK01h'@;
put 'dGguaW11bChKdCxfbil8MCx5PXkrTWF0aC5pbXVsKGN0LEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoY3Qsbm4pfDApK01hdGguaW11bChPdCxJdCl8MCxTPVMrTWF0aC5pbXVsKE90LG5uKXwwLHk9eStNYXRoLmltdWwoRGUsdnQpfDAscD0ocD1wK01hdGguaW11bChEZSxHdCl8MCkrTWF0aC5p'@;
put 'bXVsKCRlLHZ0KXwwLFM9UytNYXRoLmltdWwoJGUsR3QpfDAseT15K01hdGguaW11bChxZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKHFlLE1uKXwwKStNYXRoLmltdWwoaHQsenQpfDAsUz1TK01hdGguaW11bChodCxNbil8MCx5PXkrTWF0aC5pbXVsKE9lLHNuKXwwLHA9KHA9cCtNYXRoLmlt'@;
put 'dWwoT2UsQm4pfDApK01hdGguaW11bChldCxzbil8MCxTPVMrTWF0aC5pbXVsKGV0LEJuKXwwLHk9eStNYXRoLmltdWwoS2UscXQpfDAscD0ocD1wK01hdGguaW11bChLZSxIbil8MCkrTWF0aC5pbXVsKHdlLHF0KXwwLFM9UytNYXRoLmltdWwod2UsSG4pfDA7dmFyIHNvPShtZSsoeT15K01h'@;
put 'dGguaW11bChIZSxjbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKEhlLGpuKXwwKStNYXRoLmltdWwoUWUsY24pfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKFFlLGpuKXwwKSsocD4+PjEzKXwwKSsoc28+Pj4yNil8MCxzbyY9NjcxMDg4NjMseT1NYXRoLmltdWwoTnQs'@;
put 'VnQpLHA9KHA9TWF0aC5pbXVsKE50LF9uKSkrTWF0aC5pbXVsKGJuLFZ0KXwwLFM9TWF0aC5pbXVsKGJuLF9uKSx5PXkrTWF0aC5pbXVsKEF0LEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoQXQsbm4pfDApK01hdGguaW11bChKdCxJdCl8MCxTPVMrTWF0aC5pbXVsKEp0LG5uKXwwLHk9eStNYXRo'@;
put 'LmltdWwoY3QsdnQpfDAscD0ocD1wK01hdGguaW11bChjdCxHdCl8MCkrTWF0aC5pbXVsKE90LHZ0KXwwLFM9UytNYXRoLmltdWwoT3QsR3QpfDAseT15K01hdGguaW11bChEZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKERlLE1uKXwwKStNYXRoLmltdWwoJGUsenQpfDAsUz1TK01hdGguaW11'@;
put 'bCgkZSxNbil8MCx5PXkrTWF0aC5pbXVsKHFlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwocWUsQm4pfDApK01hdGguaW11bChodCxzbil8MCxTPVMrTWF0aC5pbXVsKGh0LEJuKXwwLHk9eStNYXRoLmltdWwoT2UscXQpfDAscD0ocD1wK01hdGguaW11bChPZSxIbil8MCkrTWF0aC5pbXVsKGV0'@;
put 'LHF0KXwwLFM9UytNYXRoLmltdWwoZXQsSG4pfDA7dmFyIFhpPShtZSsoeT15K01hdGguaW11bChLZSxjbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKEtlLGpuKXwwKStNYXRoLmltdWwod2UsY24pfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKHdlLGpuKXwwKSsocD4+'@;
put 'PjEzKXwwKSsoWGk+Pj4yNil8MCxYaSY9NjcxMDg4NjMseT1NYXRoLmltdWwoTnQsSXQpLHA9KHA9TWF0aC5pbXVsKE50LG5uKSkrTWF0aC5pbXVsKGJuLEl0KXwwLFM9TWF0aC5pbXVsKGJuLG5uKSx5PXkrTWF0aC5pbXVsKEF0LHZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoQXQsR3QpfDApK01h'@;
put 'dGguaW11bChKdCx2dCl8MCxTPVMrTWF0aC5pbXVsKEp0LEd0KXwwLHk9eStNYXRoLmltdWwoY3QsenQpfDAscD0ocD1wK01hdGguaW11bChjdCxNbil8MCkrTWF0aC5pbXVsKE90LHp0KXwwLFM9UytNYXRoLmltdWwoT3QsTW4pfDAseT15K01hdGguaW11bChEZSxzbil8MCxwPShwPXArTWF0'@;
put 'aC5pbXVsKERlLEJuKXwwKStNYXRoLmltdWwoJGUsc24pfDAsUz1TK01hdGguaW11bCgkZSxCbil8MCx5PXkrTWF0aC5pbXVsKHFlLHF0KXwwLHA9KHA9cCtNYXRoLmltdWwocWUsSG4pfDApK01hdGguaW11bChodCxxdCl8MCxTPVMrTWF0aC5pbXVsKGh0LEhuKXwwO3ZhciBwbz0obWUrKHk9'@;
put 'eStNYXRoLmltdWwoT2UsY24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChPZSxqbil8MCkrTWF0aC5pbXVsKGV0LGNuKXwwKSk8PDEzKXwwO21lPSgoUz1TK01hdGguaW11bChldCxqbil8MCkrKHA+Pj4xMyl8MCkrKHBvPj4+MjYpfDAscG8mPTY3MTA4ODYzLHk9TWF0aC5pbXVs'@;
put 'KE50LHZ0KSxwPShwPU1hdGguaW11bChOdCxHdCkpK01hdGguaW11bChibix2dCl8MCxTPU1hdGguaW11bChibixHdCkseT15K01hdGguaW11bChBdCx6dCl8MCxwPShwPXArTWF0aC5pbXVsKEF0LE1uKXwwKStNYXRoLmltdWwoSnQsenQpfDAsUz1TK01hdGguaW11bChKdCxNbil8MCx5PXkr'@;
put 'TWF0aC5pbXVsKGN0LHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoY3QsQm4pfDApK01hdGguaW11bChPdCxzbil8MCxTPVMrTWF0aC5pbXVsKE90LEJuKXwwLHk9eStNYXRoLmltdWwoRGUscXQpfDAscD0ocD1wK01hdGguaW11bChEZSxIbil8MCkrTWF0aC5pbXVsKCRlLHF0KXwwLFM9UytNYXRo'@;
put 'LmltdWwoJGUsSG4pfDA7dmFyIF9yPShtZSsoeT15K01hdGguaW11bChxZSxjbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKHFlLGpuKXwwKStNYXRoLmltdWwoaHQsY24pfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKGh0LGpuKXwwKSsocD4+PjEzKXwwKSsoX3I+Pj4y'@;
put 'Nil8MCxfciY9NjcxMDg4NjMseT1NYXRoLmltdWwoTnQsenQpLHA9KHA9TWF0aC5pbXVsKE50LE1uKSkrTWF0aC5pbXVsKGJuLHp0KXwwLFM9TWF0aC5pbXVsKGJuLE1uKSx5PXkrTWF0aC5pbXVsKEF0LHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoQXQsQm4pfDApK01hdGguaW11bChKdCxzbil8'@;
put 'MCxTPVMrTWF0aC5pbXVsKEp0LEJuKXwwLHk9eStNYXRoLmltdWwoY3QscXQpfDAscD0ocD1wK01hdGguaW11bChjdCxIbil8MCkrTWF0aC5pbXVsKE90LHF0KXwwLFM9UytNYXRoLmltdWwoT3QsSG4pfDA7dmFyIEZpPShtZSsoeT15K01hdGguaW11bChEZSxjbil8MCl8MCkrKCg4MTkxJihw'@;
put 'PShwPXArTWF0aC5pbXVsKERlLGpuKXwwKStNYXRoLmltdWwoJGUsY24pfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKCRlLGpuKXwwKSsocD4+PjEzKXwwKSsoRmk+Pj4yNil8MCxGaSY9NjcxMDg4NjMseT1NYXRoLmltdWwoTnQsc24pLHA9KHA9TWF0aC5pbXVsKE50LEJuKSkrTWF0'@;
put 'aC5pbXVsKGJuLHNuKXwwLFM9TWF0aC5pbXVsKGJuLEJuKSx5PXkrTWF0aC5pbXVsKEF0LHF0KXwwLHA9KHA9cCtNYXRoLmltdWwoQXQsSG4pfDApK01hdGguaW11bChKdCxxdCl8MCxTPVMrTWF0aC5pbXVsKEp0LEhuKXwwO3ZhciBIbz0obWUrKHk9eStNYXRoLmltdWwoY3QsY24pfDApfDAp'@;
put 'KygoODE5MSYocD0ocD1wK01hdGguaW11bChjdCxqbil8MCkrTWF0aC5pbXVsKE90LGNuKXwwKSk8PDEzKXwwO21lPSgoUz1TK01hdGguaW11bChPdCxqbil8MCkrKHA+Pj4xMyl8MCkrKEhvPj4+MjYpfDAsSG8mPTY3MTA4ODYzLHk9TWF0aC5pbXVsKE50LHF0KSxwPShwPU1hdGguaW11bChO'@;
put 'dCxIbikpK01hdGguaW11bChibixxdCl8MCxTPU1hdGguaW11bChibixIbik7dmFyIGdhPShtZSsoeT15K01hdGguaW11bChBdCxjbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKEF0LGpuKXwwKStNYXRoLmltdWwoSnQsY24pfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVs'@;
put 'KEp0LGpuKXwwKSsocD4+PjEzKXwwKSsoZ2E+Pj4yNil8MCxnYSY9NjcxMDg4NjM7dmFyIGxhPShtZSsoeT1NYXRoLmltdWwoTnQsY24pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKE50LGpuKSkrTWF0aC5pbXVsKGJuLGNuKXwwKSk8PDEzKXwwO3JldHVybiBtZT0oKFM9TWF0aC5pbXVs'@;
put 'KGJuLGpuKSkrKHA+Pj4xMyl8MCkrKGxhPj4+MjYpfDAsbGEmPTY3MTA4ODYzLGZlWzBdPVhyLGZlWzFdPXZpLGZlWzJdPUVyLGZlWzNdPVlpLGZlWzRdPUpyLGZlWzVdPWFvLGZlWzZdPUJyLGZlWzddPUppLGZlWzhdPXRvLGZlWzldPWNvLGZlWzEwXT1sbyxmZVsxMV09c28sZmVbMTJdPVhp'@;
put 'LGZlWzEzXT1wbyxmZVsxNF09X3IsZmVbMTVdPUZpLGZlWzE2XT1IbyxmZVsxN109Z2EsZmVbMThdPWxhLDAhPT1tZSYmKGZlWzE5XT1tZSxNLmxlbmd0aCsrKSxNfTtmdW5jdGlvbiBpZShnLEMsTSl7cmV0dXJuKG5ldyBsZSkubXVscChnLEMsTSl9ZnVuY3Rpb24gbGUoZyxDKXt0aGlzLng9'@;
put 'Zyx0aGlzLnk9Q31NYXRoLmltdWx8fChuZT10ZSksRS5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oZyxDKXt2YXIgeT10aGlzLmxlbmd0aCtnLmxlbmd0aDtyZXR1cm4gMTA9PT10aGlzLmxlbmd0aCYmMTA9PT1nLmxlbmd0aD9uZSh0aGlzLGcsQyk6eTw2Mz90ZSh0aGlzLGcsQyk6eTwxMDI0'@;
put 'P2Z1bmN0aW9uKHAsUyxRKXtRLm5lZ2F0aXZlPVMubmVnYXRpdmVecC5uZWdhdGl2ZSxRLmxlbmd0aD1wLmxlbmd0aCtTLmxlbmd0aDtmb3IodmFyIHJlPTAsZmU9MCxtZT0wO21lPFEubGVuZ3RoLTE7bWUrKyl7dmFyIGtlPWZlO2ZlPTA7Zm9yKHZhciBUZT02NzEwODg2MyZyZSxQZT1NYXRo'@;
put 'Lm1pbihtZSxTLmxlbmd0aC0xKSxGZT1NYXRoLm1heCgwLG1lLXAubGVuZ3RoKzEpO0ZlPD1QZTtGZSsrKXt2YXIgTGU9KDB8cC53b3Jkc1ttZS1GZV0pKigwfFMud29yZHNbRmVdKSxCZT02NzEwODg2MyZMZTtUZT02NzEwODg2MyYoQmU9QmUrVGV8MCksZmUrPShrZT0oa2U9a2UrKExlLzY3'@;
put 'MTA4ODY0fDApfDApKyhCZT4+PjI2KXwwKT4+PjI2LGtlJj02NzEwODg2M31RLndvcmRzW21lXT1UZSxyZT1rZSxrZT1mZX1yZXR1cm4gMCE9PXJlP1Eud29yZHNbbWVdPXJlOlEubGVuZ3RoLS0sUS5zdHJpcCgpfSh0aGlzLGcsQyk6aWUodGhpcyxnLEMpfSxsZS5wcm90b3R5cGUubWFrZVJC'@;
put 'VD1mdW5jdGlvbihnKXtmb3IodmFyIEM9bmV3IEFycmF5KGcpLE09RS5wcm90b3R5cGUuX2NvdW50Qml0cyhnKS0xLHk9MDt5PGc7eSsrKUNbeV09dGhpcy5yZXZCaW4oeSxNLGcpO3JldHVybiBDfSxsZS5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKGcsQyxNKXtpZigwPT09Z3x8Zz09PU0t'@;
put 'MSlyZXR1cm4gZztmb3IodmFyIHk9MCxwPTA7cDxDO3ArKyl5fD0oMSZnKTw8Qy1wLTEsZz4+PTE7cmV0dXJuIHl9LGxlLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKGcsQyxNLHkscCxTKXtmb3IodmFyIFE9MDtRPFM7USsrKXlbUV09Q1tnW1FdXSxwW1FdPU1bZ1tRXV19LGxlLnByb3Rv'@;
put 'dHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oZyxDLE0seSxwLFMpe3RoaXMucGVybXV0ZShTLGcsQyxNLHkscCk7Zm9yKHZhciBRPTE7UTxwO1E8PD0xKWZvcih2YXIgcmU9UTw8MSxmZT1NYXRoLmNvcygyKk1hdGguUEkvcmUpLG1lPU1hdGguc2luKDIqTWF0aC5QSS9yZSksa2U9MDtrZTxwO2tl'@;
put 'Kz1yZSlmb3IodmFyIFRlPWZlLFBlPW1lLEZlPTA7RmU8UTtGZSsrKXt2YXIgTmU9TVtrZStGZV0sTGU9eVtrZStGZV0sQmU9TVtrZStGZStRXSxIZT15W2tlK0ZlK1FdLFFlPVRlKkJlLVBlKkhlO0hlPVRlKkhlK1BlKkJlLE1ba2UrRmVdPU5lKyhCZT1RZSkseVtrZStGZV09TGUrSGUsTVtr'@;
put 'ZStGZStRXT1OZS1CZSx5W2tlK0ZlK1FdPUxlLUhlLEZlIT09cmUmJihRZT1mZSpUZS1tZSpQZSxQZT1mZSpQZSttZSpUZSxUZT1RZSl9fSxsZS5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oZyxDKXt2YXIgTT0xfE1hdGgubWF4KEMsZykseT0xJk0scD0wO2ZvcihNPU0vMnwwO007'@;
put 'TT4+Pj0xKXArKztyZXR1cm4gMTw8cCsxK3l9LGxlLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oZyxDLE0pe2lmKCEoTTw9MSkpZm9yKHZhciB5PTA7eTxNLzI7eSsrKXt2YXIgcD1nW3ldO2dbeV09Z1tNLXktMV0sZ1tNLXktMV09cCxwPUNbeV0sQ1t5XT0tQ1tNLXktMV0sQ1tNLXkt'@;
put 'MV09LXB9fSxsZS5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKGcsQyl7Zm9yKHZhciBNPTAseT0wO3k8Qy8yO3krKyl7dmFyIHA9ODE5MipNYXRoLnJvdW5kKGdbMip5KzFdL0MpK01hdGgucm91bmQoZ1syKnldL0MpK007Z1t5XT02NzEwODg2MyZwLE09cDw2NzEwODg2ND8wOnAv'@;
put 'NjcxMDg4NjR8MH1yZXR1cm4gZ30sbGUucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oZyxDLE0seSl7Zm9yKHZhciBwPTAsUz0wO1M8QztTKyspTVsyKlNdPTgxOTEmKHArPTB8Z1tTXSksTVsyKlMrMV09ODE5MSYocD4+Pj0xMykscD4+Pj0xMztmb3IoUz0yKkM7Uzx5OysrUylNW1Nd'@;
put 'PTA7SSgwPT09cCksSSgwPT0oLTgxOTImcCkpfSxsZS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihnKXtmb3IodmFyIEM9bmV3IEFycmF5KGcpLE09MDtNPGc7TSsrKUNbTV09MDtyZXR1cm4gQ30sbGUucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oZyxDLE0pe3ZhciB5PTIqdGhpcy5ndWVzc0xl'@;
put 'bjEzYihnLmxlbmd0aCxDLmxlbmd0aCkscD10aGlzLm1ha2VSQlQoeSksUz10aGlzLnN0dWIoeSksUT1uZXcgQXJyYXkoeSkscmU9bmV3IEFycmF5KHkpLGZlPW5ldyBBcnJheSh5KSxtZT1uZXcgQXJyYXkoeSksa2U9bmV3IEFycmF5KHkpLFRlPW5ldyBBcnJheSh5KSxQZT1NLndvcmRzO1Bl'@;
put 'Lmxlbmd0aD15LHRoaXMuY29udmVydDEzYihnLndvcmRzLGcubGVuZ3RoLFEseSksdGhpcy5jb252ZXJ0MTNiKEMud29yZHMsQy5sZW5ndGgsbWUseSksdGhpcy50cmFuc2Zvcm0oUSxTLHJlLGZlLHkscCksdGhpcy50cmFuc2Zvcm0obWUsUyxrZSxUZSx5LHApO2Zvcih2YXIgRmU9MDtGZTx5'@;
put 'O0ZlKyspe3ZhciBOZT1yZVtGZV0qa2VbRmVdLWZlW0ZlXSpUZVtGZV07ZmVbRmVdPXJlW0ZlXSpUZVtGZV0rZmVbRmVdKmtlW0ZlXSxyZVtGZV09TmV9cmV0dXJuIHRoaXMuY29uanVnYXRlKHJlLGZlLHkpLHRoaXMudHJhbnNmb3JtKHJlLGZlLFBlLFMseSxwKSx0aGlzLmNvbmp1Z2F0ZShQ'@;
put 'ZSxTLHkpLHRoaXMubm9ybWFsaXplMTNiKFBlLHkpLE0ubmVnYXRpdmU9Zy5uZWdhdGl2ZV5DLm5lZ2F0aXZlLE0ubGVuZ3RoPWcubGVuZ3RoK0MubGVuZ3RoLE0uc3RyaXAoKX0sRS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcpe3ZhciBDPW5ldyBFKG51bGwpO3JldHVybiBDLndvcmRzPW5l'@;
put 'dyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksdGhpcy5tdWxUbyhnLEMpfSxFLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKGcpe3ZhciBDPW5ldyBFKG51bGwpO3JldHVybiBDLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksaWUodGhpcyxnLEMpfSxFLnByb3RvdHlw'@;
put 'ZS5pbXVsPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oZyx0aGlzKX0sRS5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCk7Zm9yKHZhciBDPTAsTT0wO008dGhpcy5sZW5ndGg7TSsrKXt2YXIgeT0oMHx0'@;
put 'aGlzLndvcmRzW01dKSpnLHA9KDY3MTA4ODYzJnkpKyg2NzEwODg2MyZDKTtDPj49MjYsQys9eS82NzEwODg2NHwwLEMrPXA+Pj4yNix0aGlzLndvcmRzW01dPTY3MTA4ODYzJnB9cmV0dXJuIDAhPT1DJiYodGhpcy53b3Jkc1tNXT1DLHRoaXMubGVuZ3RoKyspLHRoaXN9LEUucHJvdG90eXBl'@;
put 'Lm11bG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihnKX0sRS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxFLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSxFLnByb3Rv'@;
put 'dHlwZS5wb3c9ZnVuY3Rpb24oZyl7dmFyIEM9ZnVuY3Rpb24oUyl7Zm9yKHZhciBRPW5ldyBBcnJheShTLmJpdExlbmd0aCgpKSxyZT0wO3JlPFEubGVuZ3RoO3JlKyspe3ZhciBtZT1yZSUyNjtRW3JlXT0oUy53b3Jkc1tyZS8yNnwwXSYxPDxtZSk+Pj5tZX1yZXR1cm4gUX0oZyk7aWYoMD09'@;
put 'PUMubGVuZ3RoKXJldHVybiBuZXcgRSgxKTtmb3IodmFyIE09dGhpcyx5PTA7eTxDLmxlbmd0aCYmMD09PUNbeV07eSsrLE09TS5zcXIoKSk7aWYoKyt5PEMubGVuZ3RoKWZvcih2YXIgcD1NLnNxcigpO3k8Qy5sZW5ndGg7eSsrLHA9cC5zcXIoKSkwIT09Q1t5XSYmKE09TS5tdWwocCkpO3Jl'@;
put 'dHVybiBNfSxFLnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBDLE09ZyUyNix5PShnLU0pLzI2LHA9NjcxMDg4NjM+Pj4yNi1NPDwyNi1NO2lmKDAhPT1NKXt2YXIgUz0wO2ZvcihDPTA7Qzx0aGlzLmxlbmd0aDtDKyspe3ZhciBR'@;
put 'PXRoaXMud29yZHNbQ10mcDt0aGlzLndvcmRzW0NdPSgwfHRoaXMud29yZHNbQ10pLVE8PE18UyxTPVE+Pj4yNi1NfVMmJih0aGlzLndvcmRzW0NdPVMsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PXkpe2ZvcihDPXRoaXMubGVuZ3RoLTE7Qz49MDtDLS0pdGhpcy53b3Jkc1tDK3ldPXRoaXMud29y'@;
put 'ZHNbQ107Zm9yKEM9MDtDPHk7QysrKXRoaXMud29yZHNbQ109MDt0aGlzLmxlbmd0aCs9eX1yZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oZyl9LEUucHJvdG90eXBlLml1c2hy'@;
put 'bj1mdW5jdGlvbihnLEMsTSl7dmFyIHk7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApLHk9Qz8oQy1DJTI2KS8yNjowO3ZhciBwPWclMjYsUz1NYXRoLm1pbigoZy1wKS8yNix0aGlzLmxlbmd0aCksUT02NzEwODg2M142NzEwODg2Mz4+PnA8PHAscmU9TTtpZih5LT1TLHk9TWF0aC5tYXgo'@;
put 'MCx5KSxyZSl7Zm9yKHZhciBmZT0wO2ZlPFM7ZmUrKylyZS53b3Jkc1tmZV09dGhpcy53b3Jkc1tmZV07cmUubGVuZ3RoPVN9aWYoMCE9PVMpaWYodGhpcy5sZW5ndGg+Uylmb3IodGhpcy5sZW5ndGgtPVMsZmU9MDtmZTx0aGlzLmxlbmd0aDtmZSsrKXRoaXMud29yZHNbZmVdPXRoaXMud29y'@;
put 'ZHNbZmUrU107ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgbWU9MDtmb3IoZmU9dGhpcy5sZW5ndGgtMTtmZT49MCYmKDAhPT1tZXx8ZmU+PXkpO2ZlLS0pe3ZhciBrZT0wfHRoaXMud29yZHNbZmVdO3RoaXMud29yZHNbZmVdPW1lPDwyNi1wfGtlPj4+cCxtZT1rZSZR'@;
put 'fXJldHVybiByZSYmMCE9PW1lJiYocmUud29yZHNbcmUubGVuZ3RoKytdPW1lKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihnLEMsTSl7cmV0dXJuIEkoMD09PXRoaXMubmVn'@;
put 'YXRpdmUpLHRoaXMuaXVzaHJuKGcsQyxNKX0sRS5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKGcpfSxFLnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihnKX0sRS5wcm90b3R5cGUuc2hybj1m'@;
put 'dW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKGcpfSxFLnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihnKX0sRS5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBD'@;
put 'PWclMjYsTT0oZy1DKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD1NfHwhKHRoaXMud29yZHNbTV0mMTw8QykpfSxFLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBDPWclMjYsTT0oZy1DKS8yNjtyZXR1cm4gSSgwPT09dGhpcy5u'@;
put 'ZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PU0/dGhpczooMCE9PUMmJk0rKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihNLHRoaXMubGVuZ3RoKSwwIT09QyYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3'@;
put 'MTA4ODYzPj4+Qzw8QyksdGhpcy5zdHJpcCgpKX0sRS5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oZyl9LEUucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKGcpe3JldHVybiBJKCJudW1iZXIiPT10eXBlb2YgZyksSShnPDY3MTA4ODY0KSxn'@;
put 'PDA/dGhpcy5pc3VibigtZyk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxnPyh0aGlzLndvcmRzWzBdPWctKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihnKSx0aGlz'@;
put 'Lm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4oZyl9LEUucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihnKXt0aGlzLndvcmRzWzBdKz1nO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbQ10+PTY3MTA4ODY0O0MrKyl0aGlzLndvcmRzW0NdLT02NzEwODg2NCxDPT09'@;
put 'dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW0MrMV09MTp0aGlzLndvcmRzW0MrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsQysxKSx0aGlzfSxFLnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihnKXtpZihJKCJudW1iZXIiPT10eXBlb2YgZyksSShnPDY3MTA4'@;
put 'ODY0KSxnPDApcmV0dXJuIHRoaXMuaWFkZG4oLWcpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1nLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRo'@;
put 'aXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tDXTwwO0MrKyl0aGlzLndvcmRzW0NdKz02NzEwODg2NCx0aGlzLndvcmRzW0MrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90'@;
put 'b3R5cGUuYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKGcpfSxFLnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4oZyl9LEUucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRo'@;
put 'aXN9LEUucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSxFLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oZyxDLE0pe3ZhciB5LHA7dGhpcy5fZXhwYW5kKGcubGVuZ3RoK00pO3ZhciBRPTA7Zm9yKHk9MDt5PGcubGVuZ3RoO3krKyl7'@;
put 'cD0oMHx0aGlzLndvcmRzW3krTV0pK1E7dmFyIHJlPSgwfGcud29yZHNbeV0pKkM7UT0oKHAtPTY3MTA4ODYzJnJlKT4+MjYpLShyZS82NzEwODg2NHwwKSx0aGlzLndvcmRzW3krTV09NjcxMDg4NjMmcH1mb3IoO3k8dGhpcy5sZW5ndGgtTTt5KyspUT0ocD0oMHx0aGlzLndvcmRzW3krTV0p'@;
put 'K1EpPj4yNix0aGlzLndvcmRzW3krTV09NjcxMDg4NjMmcDtpZigwPT09USlyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihJKC0xPT09USksUT0wLHk9MDt5PHRoaXMubGVuZ3RoO3krKylRPShwPS0oMHx0aGlzLndvcmRzW3ldKStRKT4+MjYsdGhpcy53b3Jkc1t5XT02NzEwODg2MyZwO3JldHVy'@;
put 'biB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihnLEMpe3ZhciBNLHk9dGhpcy5jbG9uZSgpLHA9ZyxTPTB8cC53b3Jkc1twLmxlbmd0aC0xXTswIT0oTT0yNi10aGlzLl9jb3VudEJpdHMoUykpJiYocD1wLnVzaGxuKE0pLHkuaXVz'@;
put 'aGxuKE0pLFM9MHxwLndvcmRzW3AubGVuZ3RoLTFdKTt2YXIgUSxyZT15Lmxlbmd0aC1wLmxlbmd0aDtpZigibW9kIiE9PUMpeyhRPW5ldyBFKG51bGwpKS5sZW5ndGg9cmUrMSxRLndvcmRzPW5ldyBBcnJheShRLmxlbmd0aCk7Zm9yKHZhciBmZT0wO2ZlPFEubGVuZ3RoO2ZlKyspUS53b3Jk'@;
put 'c1tmZV09MH12YXIgbWU9eS5jbG9uZSgpLl9pc2hsbnN1Ym11bChwLDEscmUpOzA9PT1tZS5uZWdhdGl2ZSYmKHk9bWUsUSYmKFEud29yZHNbcmVdPTEpKTtmb3IodmFyIGtlPXJlLTE7a2U+PTA7a2UtLSl7dmFyIFRlPTY3MTA4ODY0KigwfHkud29yZHNbcC5sZW5ndGgra2VdKSsoMHx5Lndv'@;
put 'cmRzW3AubGVuZ3RoK2tlLTFdKTtmb3IoVGU9TWF0aC5taW4oVGUvU3wwLDY3MTA4ODYzKSx5Ll9pc2hsbnN1Ym11bChwLFRlLGtlKTswIT09eS5uZWdhdGl2ZTspVGUtLSx5Lm5lZ2F0aXZlPTAseS5faXNobG5zdWJtdWwocCwxLGtlKSx5LmlzWmVybygpfHwoeS5uZWdhdGl2ZV49MSk7USYm'@;
put 'KFEud29yZHNba2VdPVRlKX1yZXR1cm4gUSYmUS5zdHJpcCgpLHkuc3RyaXAoKSwiZGl2IiE9PUMmJjAhPT1NJiZ5Lml1c2hybihNKSx7ZGl2OlF8fG51bGwsbW9kOnl9fSxFLnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24oZyxDLE0pe3JldHVybiBJKCFnLmlzWmVybygpKSx0aGlzLmlzWmVy'@;
put 'bygpP3tkaXY6bmV3IEUoMCksbW9kOm5ldyBFKDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmU/KFM9dGhpcy5uZWcoKS5kaXZtb2QoZyxDKSwibW9kIiE9PUMmJih5PVMuZGl2Lm5lZygpKSwiZGl2IiE9PUMmJihwPVMubW9kLm5lZygpLE0mJjAhPT1wLm5lZ2F0aXZlJiZw'@;
put 'LmlhZGQoZykpLHtkaXY6eSxtb2Q6cH0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZT8oUz10aGlzLmRpdm1vZChnLm5lZygpLEMpLCJtb2QiIT09QyYmKHk9Uy5kaXYubmVnKCkpLHtkaXY6eSxtb2Q6Uy5tb2R9KTp0aGlzLm5lZ2F0aXZlJmcubmVnYXRpdmU/KFM9dGhpcy5u'@;
put 'ZWcoKS5kaXZtb2QoZy5uZWcoKSxDKSwiZGl2IiE9PUMmJihwPVMubW9kLm5lZygpLE0mJjAhPT1wLm5lZ2F0aXZlJiZwLmlzdWIoZykpLHtkaXY6Uy5kaXYsbW9kOnB9KTpnLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAoZyk8MD97ZGl2Om5ldyBFKDApLG1vZDp0aGlzfToxPT09Zy5s'@;
put 'ZW5ndGg/ImRpdiI9PT1DP3tkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PUM/e2RpdjpudWxsLG1vZDpuZXcgRSh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bmV3IEUodGhpcy5tb2RuKGcud29yZHNbMF0p'@;
put 'KX06dGhpcy5fd29yZERpdihnLEMpO3ZhciB5LHAsU30sRS5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJkaXYiLCExKS5kaXZ9LEUucHJvdG90eXBlLm1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMSkubW9kfSxFLnBy'@;
put 'b3RvdHlwZS51bW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJtb2QiLCEwKS5tb2R9LEUucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKGcpe3ZhciBDPXRoaXMuZGl2bW9kKGcpO2lmKEMubW9kLmlzWmVybygpKXJldHVybiBDLmRpdjt2YXIgTT0wIT09Qy5kaXYubmVn'@;
put 'YXRpdmU/Qy5tb2QuaXN1YihnKTpDLm1vZCx5PWcudXNocm4oMSkscD1nLmFuZGxuKDEpLFM9TS5jbXAoeSk7cmV0dXJuIFM8MHx8MT09PXAmJjA9PT1TP0MuZGl2OjAhPT1DLmRpdi5uZWdhdGl2ZT9DLmRpdi5pc3VibigxKTpDLmRpdi5pYWRkbigxKX0sRS5wcm90b3R5cGUubW9kbj1mdW5j'@;
put 'dGlvbihnKXtJKGc8PTY3MTA4ODYzKTtmb3IodmFyIEM9NjcxMDg4NjQlZyxNPTAseT10aGlzLmxlbmd0aC0xO3k+PTA7eS0tKU09KEMqTSsoMHx0aGlzLndvcmRzW3ldKSklZztyZXR1cm4gTX0sRS5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24oZyl7SShnPD02NzEwODg2Myk7Zm9yKHZhciBD'@;
put 'PTAsTT10aGlzLmxlbmd0aC0xO00+PTA7TS0tKXt2YXIgeT0oMHx0aGlzLndvcmRzW01dKSs2NzEwODg2NCpDO3RoaXMud29yZHNbTV09eS9nfDAsQz15JWd9cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZu'@;
put 'KGcpfSxFLnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKGcpe0koMD09PWcubmVnYXRpdmUpLEkoIWcuaXNaZXJvKCkpO3ZhciBDPXRoaXMsTT1nLmNsb25lKCk7Qz0wIT09Qy5uZWdhdGl2ZT9DLnVtb2QoZyk6Qy5jbG9uZSgpO2Zvcih2YXIgeT1uZXcgRSgxKSxwPW5ldyBFKDApLFM9bmV3IEUo'@;
put 'MCksUT1uZXcgRSgxKSxyZT0wO0MuaXNFdmVuKCkmJk0uaXNFdmVuKCk7KUMuaXVzaHJuKDEpLE0uaXVzaHJuKDEpLCsrcmU7Zm9yKHZhciBmZT1NLmNsb25lKCksbWU9Qy5jbG9uZSgpOyFDLmlzWmVybygpOyl7Zm9yKHZhciBrZT0wLFRlPTE7IShDLndvcmRzWzBdJlRlKSYma2U8MjY7Kytr'@;
put 'ZSxUZTw8PTEpO2lmKGtlPjApZm9yKEMuaXVzaHJuKGtlKTtrZS0tID4wOykoeS5pc09kZCgpfHxwLmlzT2RkKCkpJiYoeS5pYWRkKGZlKSxwLmlzdWIobWUpKSx5Lml1c2hybigxKSxwLml1c2hybigxKTtmb3IodmFyIFBlPTAsRmU9MTshKE0ud29yZHNbMF0mRmUpJiZQZTwyNjsrK1BlLEZl'@;
put 'PDw9MSk7aWYoUGU+MClmb3IoTS5pdXNocm4oUGUpO1BlLS0gPjA7KShTLmlzT2RkKCl8fFEuaXNPZGQoKSkmJihTLmlhZGQoZmUpLFEuaXN1YihtZSkpLFMuaXVzaHJuKDEpLFEuaXVzaHJuKDEpO0MuY21wKE0pPj0wPyhDLmlzdWIoTSkseS5pc3ViKFMpLHAuaXN1YihRKSk6KE0uaXN1YihD'@;
put 'KSxTLmlzdWIoeSksUS5pc3ViKHApKX1yZXR1cm57YTpTLGI6USxnY2Q6TS5pdXNobG4ocmUpfX0sRS5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKGcpe0koMD09PWcubmVnYXRpdmUpLEkoIWcuaXNaZXJvKCkpO3ZhciBDPXRoaXMsTT1nLmNsb25lKCk7Qz0wIT09Qy5uZWdhdGl2ZT9DLnVt'@;
put 'b2QoZyk6Qy5jbG9uZSgpO2Zvcih2YXIgeSxwPW5ldyBFKDEpLFM9bmV3IEUoMCksUT1NLmNsb25lKCk7Qy5jbXBuKDEpPjAmJk0uY21wbigxKT4wOyl7Zm9yKHZhciByZT0wLGZlPTE7IShDLndvcmRzWzBdJmZlKSYmcmU8MjY7KytyZSxmZTw8PTEpO2lmKHJlPjApZm9yKEMuaXVzaHJuKHJl'@;
put 'KTtyZS0tID4wOylwLmlzT2RkKCkmJnAuaWFkZChRKSxwLml1c2hybigxKTtmb3IodmFyIG1lPTAsa2U9MTshKE0ud29yZHNbMF0ma2UpJiZtZTwyNjsrK21lLGtlPDw9MSk7aWYobWU+MClmb3IoTS5pdXNocm4obWUpO21lLS0gPjA7KVMuaXNPZGQoKSYmUy5pYWRkKFEpLFMuaXVzaHJuKDEp'@;
put 'O0MuY21wKE0pPj0wPyhDLmlzdWIoTSkscC5pc3ViKFMpKTooTS5pc3ViKEMpLFMuaXN1YihwKSl9cmV0dXJuKHk9MD09PUMuY21wbigxKT9wOlMpLmNtcG4oMCk8MCYmeS5pYWRkKGcpLHl9LEUucHJvdG90eXBlLmdjZD1mdW5jdGlvbihnKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBnLmFi'@;
put 'cygpO2lmKGcuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIEM9dGhpcy5jbG9uZSgpLE09Zy5jbG9uZSgpO0MubmVnYXRpdmU9MCxNLm5lZ2F0aXZlPTA7Zm9yKHZhciB5PTA7Qy5pc0V2ZW4oKSYmTS5pc0V2ZW4oKTt5KyspQy5pdXNocm4oMSksTS5pdXNocm4oMSk7Zm9yKDs7KXtm'@;
put 'b3IoO0MuaXNFdmVuKCk7KUMuaXVzaHJuKDEpO2Zvcig7TS5pc0V2ZW4oKTspTS5pdXNocm4oMSk7dmFyIHA9Qy5jbXAoTSk7aWYocDwwKXt2YXIgUz1DO0M9TSxNPVN9ZWxzZSBpZigwPT09cHx8MD09PU0uY21wbigxKSlicmVhaztDLmlzdWIoTSl9cmV0dXJuIE0uaXVzaGxuKHkpfSxFLnBy'@;
put 'b3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmVnY2QoZykuYS51bW9kKGcpfSxFLnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09KDEmdGhpcy53b3Jkc1swXSl9LEUucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PSgxJnRoaXMud29y'@;
put 'ZHNbMF0pfSxFLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZnfSxFLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyk7dmFyIEM9ZyUyNixNPShnLUMpLzI2LHk9MTw8QztpZih0aGlzLmxlbmd0aDw9TSlyZXR1'@;
put 'cm4gdGhpcy5fZXhwYW5kKE0rMSksdGhpcy53b3Jkc1tNXXw9eSx0aGlzO2Zvcih2YXIgcD15LFM9TTswIT09cCYmUzx0aGlzLmxlbmd0aDtTKyspe3ZhciBRPTB8dGhpcy53b3Jkc1tTXTtwPShRKz1wKT4+PjI2LHRoaXMud29yZHNbU109USY9NjcxMDg4NjN9cmV0dXJuIDAhPT1wJiYodGhp'@;
put 'cy53b3Jkc1tTXT1wLHRoaXMubGVuZ3RoKyspLHRoaXN9LEUucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxFLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKGcpe3ZhciBDLE09ZzwwO2lmKDAhPT10aGlzLm5lZ2F0'@;
put 'aXZlJiYhTSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmTSlyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSlDPTE7ZWxzZXtNJiYoZz0tZyksSShnPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgeT0wfHRoaXMud29yZHNbMF07Qz15PT09Zz8w'@;
put 'Onk8Zz8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1DOkN9LEUucHJvdG90eXBlLmNtcD1mdW5jdGlvbihnKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiAxO3Zh'@;
put 'ciBDPXRoaXMudWNtcChnKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtQzpDfSxFLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKGcpe2lmKHRoaXMubGVuZ3RoPmcubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPGcubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgQz0wLE09dGhpcy5s'@;
put 'ZW5ndGgtMTtNPj0wO00tLSl7dmFyIHk9MHx0aGlzLndvcmRzW01dLHA9MHxnLndvcmRzW01dO2lmKHkhPT1wKXt5PHA/Qz0tMTp5PnAmJihDPTEpO2JyZWFrfX1yZXR1cm4gQ30sRS5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5jbXBuKGcpfSxFLnByb3RvdHlw'@;
put 'ZS5ndD1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wKGcpfSxFLnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk+PTB9LEUucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAoZyk+PTB9LEUucHJvdG90eXBlLmx0bj1mdW5j'@;
put 'dGlvbihnKXtyZXR1cm4tMT09PXRoaXMuY21wbihnKX0sRS5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcChnKX0sRS5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPD0wfSxFLnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oZyl7'@;
put 'cmV0dXJuIHRoaXMuY21wKGcpPD0wfSxFLnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcG4oZyl9LEUucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXAoZyl9LEUucmVkPWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgTihnKX0sRS5w'@;
put 'cm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksSSgwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VS'@;
put 'ZWQoZyl9LEUucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSxFLnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVu'@;
put 'Y3Rpb24oZyl7cmV0dXJuIHRoaXMucmVkPWcsdGhpc30sRS5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQoZyl9LEUucHJvdG90eXBlLnJlZEFkZD1m'@;
put 'dW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCBy'@;
put 'ZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZElTdWI9'@;
put 'ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGgg'@;
put 'cmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5tdWwodGhp'@;
put 'cyxnKX0sRS5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQuaW11bCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRTcXI9ZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sRS5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJU3Fy'@;
put 'IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LEUucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0'@;
put 'aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSxFLnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQu'@;
put 'aW52bSh0aGlzKX0sRS5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LEUucHJvdG90eXBlLnJlZFBvdz1mdW5j'@;
put 'dGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCYmIWcucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLGcpfTt2YXIgZGU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiB1ZShn'@;
put 'LEMpe3RoaXMubmFtZT1nLHRoaXMucD1uZXcgRShDLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgRSgxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gY2UoKXt1ZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZm'@;
put 'ZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIFkoKXt1ZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAw'@;
put 'MSIpfWZ1bmN0aW9uIGIoKXt1ZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIHgoKXt1ZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZm'@;
put 'ZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIE4oZyl7aWYoInN0cmluZyI9PXR5cGVvZiBnKXt2YXIgQz1FLl9wcmltZShnKTt0aGlzLm09Qy5wLHRoaXMucHJpbWU9Q31lbHNlIEkoZy5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRo'@;
put 'aXMubT1nLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBGKGcpe04uY2FsbCh0aGlzLGcpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IEUoMSkuaXVzaGxuKHRoaXMuc2hpZnQp'@;
put 'LHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlz'@;
put 'LnIuc3ViKHRoaXMubWludil9dWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgZz1uZXcgRShudWxsKTtyZXR1cm4gZy53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLGd9LHVlLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKGcpe3ZhciBDLE09Zztkb3t0aGlz'@;
put 'LnNwbGl0KE0sdGhpcy50bXApLEM9KE09KE09dGhpcy5pbXVsSyhNKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKEM+dGhpcy5uKTt2YXIgeT1DPHRoaXMubj8tMTpNLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PXk/KE0ud29yZHNbMF09MCxNLmxlbmd0aD0xKTp5PjA/TS5p'@;
put 'c3ViKHRoaXMucCk6dm9pZCAwIT09TS5zdHJpcD9NLnN0cmlwKCk6TS5fc3RyaXAoKSxNfSx1ZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyxDKXtnLml1c2hybih0aGlzLm4sMCxDKX0sdWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe3JldHVybiBnLmltdWwodGhpcy5rKX0sUihj'@;
put 'ZSx1ZSksY2UucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcsQyl7Zm9yKHZhciBNPTQxOTQzMDMseT1NYXRoLm1pbihnLmxlbmd0aCw5KSxwPTA7cDx5O3ArKylDLndvcmRzW3BdPWcud29yZHNbcF07aWYoQy5sZW5ndGg9eSxnLmxlbmd0aDw9OSlyZXR1cm4gZy53b3Jkc1swXT0wLHZvaWQo'@;
put 'Zy5sZW5ndGg9MSk7dmFyIFM9Zy53b3Jkc1s5XTtmb3IoQy53b3Jkc1tDLmxlbmd0aCsrXT1TJk0scD0xMDtwPGcubGVuZ3RoO3ArKyl7dmFyIFE9MHxnLndvcmRzW3BdO2cud29yZHNbcC0xMF09KFEmTSk8PDR8Uz4+PjIyLFM9UX1nLndvcmRzW3AtMTBdPVM+Pj49MjIsZy5sZW5ndGgtPTA9'@;
put 'PT1TJiZnLmxlbmd0aD4xMD8xMDo5fSxjZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zy53b3Jkc1tnLmxlbmd0aF09MCxnLndvcmRzW2cubGVuZ3RoKzFdPTAsZy5sZW5ndGgrPTI7Zm9yKHZhciBDPTAsTT0wO008Zy5sZW5ndGg7TSsrKXt2YXIgeT0wfGcud29yZHNbTV07Zy53b3Jk'@;
put 'c1tNXT02NzEwODg2MyYoQys9OTc3KnkpLEM9NjQqeSsoQy82NzEwODg2NHwwKX1yZXR1cm4gMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJihnLmxlbmd0aC0tLDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiZnLmxlbmd0aC0tKSxnfSxSKFksdWUpLFIoYix1ZSksUih4LHVlKSx4LnByb3RvdHlw'@;
put 'ZS5pbXVsSz1mdW5jdGlvbihnKXtmb3IodmFyIEM9MCxNPTA7TTxnLmxlbmd0aDtNKyspe3ZhciB5PTE5KigwfGcud29yZHNbTV0pK0MscD02NzEwODg2MyZ5O3k+Pj49MjYsZy53b3Jkc1tNXT1wLEM9eX1yZXR1cm4gMCE9PUMmJihnLndvcmRzW2cubGVuZ3RoKytdPUMpLGd9LEUuX3ByaW1l'@;
put 'PWZ1bmN0aW9uKGcpe2lmKGRlW2ddKXJldHVybiBkZVtnXTt2YXIgQztpZigiazI1NiI9PT1nKUM9bmV3IGNlO2Vsc2UgaWYoInAyMjQiPT09ZylDPW5ldyBZO2Vsc2UgaWYoInAxOTIiPT09ZylDPW5ldyBiO2Vsc2V7aWYoInAyNTUxOSIhPT1nKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBw'@;
put 'cmltZSAiK2cpO0M9bmV3IHh9cmV0dXJuIGRlW2ddPUMsQ30sTi5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oZyl7SSgwPT09Zy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxJKGcucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LE4u'@;
put 'cHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKGcsQyl7SSgwPT0oZy5uZWdhdGl2ZXxDLm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxJKGcucmVkJiZnLnJlZD09PUMucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LE4ucHJvdG90eXBl'@;
put 'Lmltb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKGcpLl9mb3JjZVJlZCh0aGlzKTpnLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LE4ucHJvdG90eXBlLm5lZz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pc1plcm8oKT9nLmNsb25lKCk6dGhp'@;
put 'cy5tLnN1YihnKS5fZm9yY2VSZWQodGhpcyl9LE4ucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnLEMpe3RoaXMuX3ZlcmlmeTIoZyxDKTt2YXIgTT1nLmFkZChDKTtyZXR1cm4gTS5jbXAodGhpcy5tKT49MCYmTS5pc3ViKHRoaXMubSksTS5fZm9yY2VSZWQodGhpcyl9LE4ucHJvdG90eXBlLmlh'@;
put 'ZGQ9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIE09Zy5pYWRkKEMpO3JldHVybiBNLmNtcCh0aGlzLm0pPj0wJiZNLmlzdWIodGhpcy5tKSxNfSxOLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIE09Zy5zdWIoQyk7cmV0dXJu'@;
put 'IE0uY21wbigwKTwwJiZNLmlhZGQodGhpcy5tKSxNLl9mb3JjZVJlZCh0aGlzKX0sTi5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnLEMpe3RoaXMuX3ZlcmlmeTIoZyxDKTt2YXIgTT1nLmlzdWIoQyk7cmV0dXJuIE0uY21wbigwKTwwJiZNLmlhZGQodGhpcy5tKSxNfSxOLnByb3RvdHlwZS5z'@;
put 'aGw9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShnKSx0aGlzLmltb2QoZy51c2hsbihDKSl9LE4ucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLEMpLHRoaXMuaW1vZChnLmltdWwoQykpfSxOLnByb3RvdHlwZS5tdWw9ZnVuY3Rp'@;
put 'b24oZyxDKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLEMpLHRoaXMuaW1vZChnLm11bChDKSl9LE4ucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW11bChnLGcuY2xvbmUoKSl9LE4ucHJvdG90eXBlLnNxcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5tdWwoZyxnKX0s'@;
put 'Ti5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihnKXtpZihnLmlzWmVybygpKXJldHVybiBnLmNsb25lKCk7dmFyIEM9dGhpcy5tLmFuZGxuKDMpO2lmKEkoQyUyPT0xKSwzPT09Qyl7dmFyIE09dGhpcy5tLmFkZChuZXcgRSgxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhnLE0pfWZvcih2'@;
put 'YXIgeT10aGlzLm0uc3VibigxKSxwPTA7IXkuaXNaZXJvKCkmJjA9PT15LmFuZGxuKDEpOylwKysseS5pdXNocm4oMSk7SSgheS5pc1plcm8oKSk7dmFyIFM9bmV3IEUoMSkudG9SZWQodGhpcyksUT1TLnJlZE5lZygpLHJlPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxmZT10aGlzLm0uYml0'@;
put 'TGVuZ3RoKCk7Zm9yKGZlPW5ldyBFKDIqZmUqZmUpLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhmZSxyZSkuY21wKFEpOylmZS5yZWRJQWRkKFEpO2Zvcih2YXIgbWU9dGhpcy5wb3coZmUseSksa2U9dGhpcy5wb3coZyx5LmFkZG4oMSkuaXVzaHJuKDEpKSxUZT10aGlzLnBvdyhnLHkpLFBl'@;
put 'PXA7MCE9PVRlLmNtcChTKTspe2Zvcih2YXIgRmU9VGUsTmU9MDswIT09RmUuY21wKFMpO05lKyspRmU9RmUucmVkU3FyKCk7SShOZTxQZSk7dmFyIExlPXRoaXMucG93KG1lLG5ldyBFKDEpLml1c2hsbihQZS1OZS0xKSk7a2U9a2UucmVkTXVsKExlKSxtZT1MZS5yZWRTcXIoKSxUZT1UZS5y'@;
put 'ZWRNdWwobWUpLFBlPU5lfXJldHVybiBrZX0sTi5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXt2YXIgQz1nLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09Qy5uZWdhdGl2ZT8oQy5uZWdhdGl2ZT0wLHRoaXMuaW1vZChDKS5yZWROZWcoKSk6dGhpcy5pbW9kKEMpfSxOLnByb3RvdHlwZS5w'@;
put 'b3c9ZnVuY3Rpb24oZyxDKXtpZihDLmlzWmVybygpKXJldHVybiBuZXcgRSgxKS50b1JlZCh0aGlzKTtpZigwPT09Qy5jbXBuKDEpKXJldHVybiBnLmNsb25lKCk7dmFyIE09bmV3IEFycmF5KDE2KTtNWzBdPW5ldyBFKDEpLnRvUmVkKHRoaXMpLE1bMV09Zztmb3IodmFyIHk9Mjt5PE0ubGVu'@;
put 'Z3RoO3krKylNW3ldPXRoaXMubXVsKE1beS0xXSxnKTt2YXIgcD1NWzBdLFM9MCxRPTAscmU9Qy5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PXJlJiYocmU9MjYpLHk9Qy5sZW5ndGgtMTt5Pj0wO3ktLSl7Zm9yKHZhciBmZT1DLndvcmRzW3ldLG1lPXJlLTE7bWU+PTA7bWUtLSl7dmFyIGtlPWZl'@;
put 'Pj5tZSYxO3AhPT1NWzBdJiYocD10aGlzLnNxcihwKSksMCE9PWtlfHwwIT09Uz8oUzw8PTEsU3w9a2UsKDQ9PSsrUXx8MD09PXkmJjA9PT1tZSkmJihwPXRoaXMubXVsKHAsTVtTXSksUT0wLFM9MCkpOlE9MH1yZT0yNn1yZXR1cm4gcH0sTi5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9u'@;
put 'KGcpe3ZhciBDPWcudW1vZCh0aGlzLm0pO3JldHVybiBDPT09Zz9DLmNsb25lKCk6Q30sTi5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIEM9Zy5jbG9uZSgpO3JldHVybiBDLnJlZD1udWxsLEN9LEUubW9udD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IEYoZyl9LFIoRixO'@;
put 'KSxGLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLnVzaGxuKHRoaXMuc2hpZnQpKX0sRi5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIEM9dGhpcy5pbW9kKGcubXVsKHRoaXMucmludikpO3JldHVybiBDLnJlZD1udWxsLEN9'@;
put 'LEYucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyxDKXtpZihnLmlzWmVybygpfHxDLmlzWmVybygpKXJldHVybiBnLndvcmRzWzBdPTAsZy5sZW5ndGg9MSxnO3ZhciBNPWcuaW11bChDKSx5PU0ubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11'@;
put 'bCh0aGlzLm0pLHA9TS5pc3ViKHkpLml1c2hybih0aGlzLnNoaWZ0KSxTPXA7cmV0dXJuIHAuY21wKHRoaXMubSk+PTA/Uz1wLmlzdWIodGhpcy5tKTpwLmNtcG4oMCk8MCYmKFM9cC5pYWRkKHRoaXMubSkpLFMuX2ZvcmNlUmVkKHRoaXMpfSxGLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyxD'@;
put 'KXtpZihnLmlzWmVybygpfHxDLmlzWmVybygpKXJldHVybiBuZXcgRSgwKS5fZm9yY2VSZWQodGhpcyk7dmFyIE09Zy5tdWwoQykseT1NLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxwPU0uaXN1Yih5KS5pdXNocm4odGhp'@;
put 'cy5zaGlmdCksUz1wO3JldHVybiBwLmNtcCh0aGlzLm0pPj0wP1M9cC5pc3ViKHRoaXMubSk6cC5jbXBuKDApPDAmJihTPXAuaWFkZCh0aGlzLm0pKSxTLl9mb3JjZVJlZCh0aGlzKX0sRi5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcuX2ludm1wKHRoaXMu'@;
put 'bSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShIPUwubm1kKEgpLHRoaXMpfSwzNDgyOihILEIsTCk9PnsidXNlIHN0cmljdCI7dmFyIEs9TCg1NzE3KSxKPUwoMjMxOCksST1MKDk3ODUpLFI9TCg5MDcyKSxFPUwoMTAyNyk7ZnVuY3Rpb24geihqKXtFLmNhbGwodGhpcywiZGln'@;
put 'ZXN0IiksdGhpcy5faGFzaD1qfUsoeixFKSx6LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGope3RoaXMuX2hhc2gudXBkYXRlKGopfSx6LnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faGFzaC5kaWdlc3QoKX0sSC5leHBvcnRzPWZ1bmN0aW9uKGope3JldHVy'@;
put 'biJtZDUiPT09KGo9ai50b0xvd2VyQ2FzZSgpKT9uZXcgSjoicm1kMTYwIj09PWp8fCJyaXBlbWQxNjAiPT09aj9uZXcgSTpuZXcgeihSKGopKX19LDgwMjg6KEgsQixMKT0+e3ZhciBLPUwoMjMxOCk7SC5leHBvcnRzPWZ1bmN0aW9uKEope3JldHVybihuZXcgSykudXBkYXRlKEopLmRpZ2Vz'@;
put 'dCgpfX0sODM1NTooSCxCLEwpPT57InVzZSBzdHJpY3QiO3ZhciBLPUwoNTcxNyksSj1MKDEwMzEpLEk9TCgxMDI3KSxSPUwoOTUwOSkuQnVmZmVyLEU9TCg4MDI4KSx6PUwoOTc4NSksaj1MKDkwNzIpLFY9Ui5hbGxvYygxMjgpO2Z1bmN0aW9uIEcoVyxVKXtJLmNhbGwodGhpcywiZGlnZXN0'@;
put 'IiksInN0cmluZyI9PXR5cGVvZiBVJiYoVT1SLmZyb20oVSkpO3ZhciBxPSJzaGE1MTIiPT09V3x8InNoYTM4NCI9PT1XPzEyODo2NDt0aGlzLl9hbGc9Vyx0aGlzLl9rZXk9VSxVLmxlbmd0aD5xP1U9KCJybWQxNjAiPT09Vz9uZXcgejpqKFcpKS51cGRhdGUoVSkuZGlnZXN0KCk6VS5sZW5n'@;
put 'dGg8cSYmKFU9Ui5jb25jYXQoW1UsVl0scSkpO2Zvcih2YXIgdGU9dGhpcy5faXBhZD1SLmFsbG9jVW5zYWZlKHEpLG5lPXRoaXMuX29wYWQ9Ui5hbGxvY1Vuc2FmZShxKSxpZT0wO2llPHE7aWUrKyl0ZVtpZV09NTReVVtpZV0sbmVbaWVdPTkyXlVbaWVdO3RoaXMuX2hhc2g9InJtZDE2MCI9'@;
put 'PT1XP25ldyB6OmooVyksdGhpcy5faGFzaC51cGRhdGUodGUpfUsoRyxJKSxHLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFcpe3RoaXMuX2hhc2gudXBkYXRlKFcpfSxHLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgVz10aGlzLl9oYXNoLmRpZ2VzdCgpO3JldHVybigicm1k'@;
put 'MTYwIj09PXRoaXMuX2FsZz9uZXcgejpqKHRoaXMuX2FsZykpLnVwZGF0ZSh0aGlzLl9vcGFkKS51cGRhdGUoVykuZGlnZXN0KCl9LEguZXhwb3J0cz1mdW5jdGlvbihXLFUpe3JldHVybiJybWQxNjAiPT09KFc9Vy50b0xvd2VyQ2FzZSgpKXx8InJpcGVtZDE2MCI9PT1XP25ldyBHKCJybWQx'@;
put 'NjAiLFUpOiJtZDUiPT09Vz9uZXcgSihFLFUpOm5ldyBHKFcsVSl9fSwxMDMxOihILEIsTCk9PnsidXNlIHN0cmljdCI7dmFyIEs9TCg1NzE3KSxKPUwoOTUwOSkuQnVmZmVyLEk9TCgxMDI3KSxSPUouYWxsb2MoMTI4KSxFPTY0O2Z1bmN0aW9uIHooaixWKXtJLmNhbGwodGhpcywiZGlnZXN0'@;
put 'IiksInN0cmluZyI9PXR5cGVvZiBWJiYoVj1KLmZyb20oVikpLHRoaXMuX2FsZz1qLHRoaXMuX2tleT1WLFYubGVuZ3RoPkU/Vj1qKFYpOlYubGVuZ3RoPEUmJihWPUouY29uY2F0KFtWLFJdLEUpKTtmb3IodmFyIEc9dGhpcy5faXBhZD1KLmFsbG9jVW5zYWZlKEUpLFc9dGhpcy5fb3BhZD1K'@;
put 'LmFsbG9jVW5zYWZlKEUpLFU9MDtVPEU7VSsrKUdbVV09NTReVltVXSxXW1VdPTkyXlZbVV07dGhpcy5faGFzaD1bR119Syh6LEkpLHoucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oail7dGhpcy5faGFzaC5wdXNoKGopfSx6LnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgaj10'@;
put 'aGlzLl9hbGcoSi5jb25jYXQodGhpcy5faGFzaCkpO3JldHVybiB0aGlzLl9hbGcoSi5jb25jYXQoW3RoaXMuX29wYWQsal0pKX0sSC5leHBvcnRzPXp9LDU4MzU6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0IjtCLnJhbmRvbUJ5dGVzPUIucm5nPUIucHNldWRvUmFuZG9tQnl0ZXM9Qi5wcm5nPUwo'@;
put 'MTc5OCksQi5jcmVhdGVIYXNoPUIuSGFzaD1MKDM0ODIpLEIuY3JlYXRlSG1hYz1CLkhtYWM9TCg4MzU1KTt2YXIgSz1MKDYwNDIpLEo9T2JqZWN0LmtleXMoSyksST1bInNoYTEiLCJzaGEyMjQiLCJzaGEyNTYiLCJzaGEzODQiLCJzaGE1MTIiLCJtZDUiLCJybWQxNjAiXS5jb25jYXQoSik7'@;
put 'Qi5nZXRIYXNoZXM9ZnVuY3Rpb24oKXtyZXR1cm4gSX07dmFyIFI9TCg1NjMyKTtCLnBia2RmMj1SLnBia2RmMixCLnBia2RmMlN5bmM9Ui5wYmtkZjJTeW5jO3ZhciBFPUwoMzYxNCk7Qi5DaXBoZXI9RS5DaXBoZXIsQi5jcmVhdGVDaXBoZXI9RS5jcmVhdGVDaXBoZXIsQi5DaXBoZXJpdj1F'@;
put 'LkNpcGhlcml2LEIuY3JlYXRlQ2lwaGVyaXY9RS5jcmVhdGVDaXBoZXJpdixCLkRlY2lwaGVyPUUuRGVjaXBoZXIsQi5jcmVhdGVEZWNpcGhlcj1FLmNyZWF0ZURlY2lwaGVyLEIuRGVjaXBoZXJpdj1FLkRlY2lwaGVyaXYsQi5jcmVhdGVEZWNpcGhlcml2PUUuY3JlYXRlRGVjaXBoZXJpdixC'@;
put 'LmdldENpcGhlcnM9RS5nZXRDaXBoZXJzLEIubGlzdENpcGhlcnM9RS5saXN0Q2lwaGVyczt2YXIgej1MKDI2MDcpO0IuRGlmZmllSGVsbG1hbkdyb3VwPXouRGlmZmllSGVsbG1hbkdyb3VwLEIuY3JlYXRlRGlmZmllSGVsbG1hbkdyb3VwPXouY3JlYXRlRGlmZmllSGVsbG1hbkdyb3VwLEIu'@;
put 'Z2V0RGlmZmllSGVsbG1hbj16LmdldERpZmZpZUhlbGxtYW4sQi5jcmVhdGVEaWZmaWVIZWxsbWFuPXouY3JlYXRlRGlmZmllSGVsbG1hbixCLkRpZmZpZUhlbGxtYW49ei5EaWZmaWVIZWxsbWFuO3ZhciBqPUwoNDc0Myk7Qi5jcmVhdGVTaWduPWouY3JlYXRlU2lnbixCLlNpZ249ai5TaWdu'@;
put 'LEIuY3JlYXRlVmVyaWZ5PWouY3JlYXRlVmVyaWZ5LEIuVmVyaWZ5PWouVmVyaWZ5LEIuY3JlYXRlRUNESD1MKDYzOTMpO3ZhciBWPUwoNzkwMCk7Qi5wdWJsaWNFbmNyeXB0PVYucHVibGljRW5jcnlwdCxCLnByaXZhdGVFbmNyeXB0PVYucHJpdmF0ZUVuY3J5cHQsQi5wdWJsaWNEZWNyeXB0'@;
put 'PVYucHVibGljRGVjcnlwdCxCLnByaXZhdGVEZWNyeXB0PVYucHJpdmF0ZURlY3J5cHQ7dmFyIEc9TCg3OTYzKTtCLnJhbmRvbUZpbGw9Ry5yYW5kb21GaWxsLEIucmFuZG9tRmlsbFN5bmM9Ry5yYW5kb21GaWxsU3luYyxCLmNyZWF0ZUNyZWRlbnRpYWxzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3'@;
put 'IEVycm9yKFsic29ycnksIGNyZWF0ZUNyZWRlbnRpYWxzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCJ3ZSBhY2NlcHQgcHVsbCByZXF1ZXN0cyIsImh0dHBzOi8vZ2l0aHViLmNvbS9jcnlwdG8tYnJvd3NlcmlmeS9jcnlwdG8tYnJvd3NlcmlmeSJdLmpvaW4oIlxuIikpfSxCLmNvbnN0YW50'@;
put 'cz17REhfQ0hFQ0tfUF9OT1RfU0FGRV9QUklNRToyLERIX0NIRUNLX1BfTk9UX1BSSU1FOjEsREhfVU5BQkxFX1RPX0NIRUNLX0dFTkVSQVRPUjo0LERIX05PVF9TVUlUQUJMRV9HRU5FUkFUT1I6OCxOUE5fRU5BQkxFRDoxLEFMUE5fRU5BQkxFRDoxLFJTQV9QS0NTMV9QQURESU5HOjEsUlNB'@;
put 'X1NTTFYyM19QQURESU5HOjIsUlNBX05PX1BBRERJTkc6MyxSU0FfUEtDUzFfT0FFUF9QQURESU5HOjQsUlNBX1g5MzFfUEFERElORzo1LFJTQV9QS0NTMV9QU1NfUEFERElORzo2LFBPSU5UX0NPTlZFUlNJT05fQ09NUFJFU1NFRDoyLFBPSU5UX0NPTlZFUlNJT05fVU5DT01QUkVTU0VEOjQs'@;
put 'UE9JTlRfQ09OVkVSU0lPTl9IWUJSSUQ6Nn19LDUwNTY6KEgsQixMKT0+e3ZhciBLPUwoODc2NCkuQnVmZmVyO2NvbnN0e1RyYW5zZm9ybTpKfT1MKDI4MzApLEk9Sy5mcm9tKFsyMzksMTg3LDE5MV0pO2NsYXNzIFIgZXh0ZW5kcyBKe2NvbnN0cnVjdG9yKGNlPXt9KXtzdXBlcih7d3JpdGFi'@;
put 'bGVPYmplY3RNb2RlOiEwLC4uLmNlfSk7Y29uc3QgWT17fTtsZXQgYjtmb3IobGV0IHggaW4gY2UpWVtWKHgpXT1jZVt4XTtpZihiPXRoaXMubm9ybWFsaXplKFkpKXRocm93IGI7c3dpdGNoKFkucmVjb3JkX2RlbGltaXRlcil7Y2FzZSJhdXRvIjpZLnJlY29yZF9kZWxpbWl0ZXI9bnVsbDti'@;
put 'cmVhaztjYXNlInVuaXgiOlkucmVjb3JkX2RlbGltaXRlcj0iXG4iO2JyZWFrO2Nhc2UibWFjIjpZLnJlY29yZF9kZWxpbWl0ZXI9IlxyIjticmVhaztjYXNlIndpbmRvd3MiOlkucmVjb3JkX2RlbGltaXRlcj0iXHJcbiI7YnJlYWs7Y2FzZSJhc2NpaSI6WS5yZWNvcmRfZGVsaW1pdGVyPSJc'@;
put 'eDFlIjticmVhaztjYXNlInVuaWNvZGUiOlkucmVjb3JkX2RlbGltaXRlcj0iXHUyMDI4In10aGlzLm9wdGlvbnM9WSx0aGlzLnN0YXRlPXtzdG9wOiExfSx0aGlzLmluZm89e3JlY29yZHM6MH19bm9ybWFsaXplKGNlKXtpZihudWxsPT1jZS5ib218fCExPT09Y2UuYm9tKWNlLmJvbT0hMTtl'@;
put 'bHNlIGlmKCEwIT09Y2UuYm9tKXJldHVybiBuZXcgeigiQ1NWX09QVElPTl9CT09MRUFOX0lOVkFMSURfVFlQRSIsWyJvcHRpb24gYGJvbWAgaXMgb3B0aW9uYWwgYW5kIG11c3QgYmUgYSBib29sZWFuIHZhbHVlLCIsYGdvdCAke0pTT04uc3RyaW5naWZ5KGNlLmJvbSl9YF0pO2lmKG51bGw9'@;
put 'PWNlLmRlbGltaXRlciljZS5kZWxpbWl0ZXI9IiwiO2Vsc2UgaWYoSy5pc0J1ZmZlcihjZS5kZWxpbWl0ZXIpKWNlLmRlbGltaXRlcj1jZS5kZWxpbWl0ZXIudG9TdHJpbmcoKTtlbHNlIGlmKCJzdHJpbmciIT10eXBlb2YgY2UuZGVsaW1pdGVyKXJldHVybiBuZXcgeigiQ1NWX09QVElPTl9E'@;
put 'RUxJTUlURVJfSU5WQUxJRF9UWVBFIixbIm9wdGlvbiBgZGVsaW1pdGVyYCBtdXN0IGJlIGEgYnVmZmVyIG9yIGEgc3RyaW5nLCIsYGdvdCAke0pTT04uc3RyaW5naWZ5KGNlLmRlbGltaXRlcil9YF0pO2lmKG51bGw9PWNlLnF1b3RlKWNlLnF1b3RlPSciJztlbHNlIGlmKCEwPT09Y2UucXVv'@;
put 'dGUpY2UucXVvdGU9JyInO2Vsc2UgaWYoITE9PT1jZS5xdW90ZSljZS5xdW90ZT0iIjtlbHNlIGlmKEsuaXNCdWZmZXIoY2UucXVvdGUpKWNlLnF1b3RlPWNlLnF1b3RlLnRvU3RyaW5nKCk7ZWxzZSBpZigic3RyaW5nIiE9dHlwZW9mIGNlLnF1b3RlKXJldHVybiBuZXcgeigiQ1NWX09QVElP'@;
put 'Tl9RVU9URV9JTlZBTElEX1RZUEUiLFsib3B0aW9uIGBxdW90ZWAgbXVzdCBiZSBhIGJvb2xlYW4sIGEgYnVmZmVyIG9yIGEgc3RyaW5nLCIsYGdvdCAke0pTT04uc3RyaW5naWZ5KGNlLnF1b3RlKX1gXSk7aWYobnVsbCE9Y2UucXVvdGVkfHwoY2UucXVvdGVkPSExKSxudWxsIT1jZS5xdW90'@;
put 'ZWRfZW1wdHl8fChjZS5xdW90ZWRfZW1wdHk9dm9pZCAwKSxudWxsPT1jZS5xdW90ZWRfbWF0Y2h8fCExPT09Y2UucXVvdGVkX21hdGNoP2NlLnF1b3RlZF9tYXRjaD1udWxsOkFycmF5LmlzQXJyYXkoY2UucXVvdGVkX21hdGNoKXx8KGNlLnF1b3RlZF9tYXRjaD1bY2UucXVvdGVkX21hdGNo'@;
put 'XSksY2UucXVvdGVkX21hdGNoKWZvcihsZXQgWSBvZiBjZS5xdW90ZWRfbWF0Y2gpe2NvbnN0IGI9WSBpbnN0YW5jZW9mIFJlZ0V4cDtpZigic3RyaW5nIiE9dHlwZW9mIFkmJiFiKXJldHVybiBFcnJvcihgSW52YWxpZCBPcHRpb246IHF1b3RlZF9tYXRjaCBtdXN0IGJlIGEgc3RyaW5nIG9y'@;
put 'IGEgcmVnZXgsIGdvdCAke0pTT04uc3RyaW5naWZ5KFkpfWApfWlmKG51bGwhPWNlLnF1b3RlZF9zdHJpbmd8fChjZS5xdW90ZWRfc3RyaW5nPSExKSxudWxsIT1jZS5lb2Z8fChjZS5lb2Y9ITApLG51bGw9PWNlLmVzY2FwZSljZS5lc2NhcGU9JyInO2Vsc2UgaWYoSy5pc0J1ZmZlcihjZS5l'@;
put 'c2NhcGUpKWNlLmVzY2FwZT1jZS5lc2NhcGUudG9TdHJpbmcoKTtlbHNlIGlmKCJzdHJpbmciIT10eXBlb2YgY2UuZXNjYXBlKXJldHVybiBFcnJvcihgSW52YWxpZCBPcHRpb246IGVzY2FwZSBtdXN0IGJlIGEgYnVmZmVyIG9yIGEgc3RyaW5nLCBnb3QgJHtKU09OLnN0cmluZ2lmeShjZS5l'@;
put 'c2NhcGUpfWApO2lmKGNlLmVzY2FwZS5sZW5ndGg+MSlyZXR1cm4gRXJyb3IoYEludmFsaWQgT3B0aW9uOiBlc2NhcGUgbXVzdCBiZSBvbmUgY2hhcmFjdGVyLCBnb3QgJHtjZS5lc2NhcGUubGVuZ3RofSBjaGFyYWN0ZXJzYCk7aWYobnVsbCE9Y2UuaGVhZGVyfHwoY2UuaGVhZGVyPSExKSxj'@;
put 'ZS5jb2x1bW5zPXRoaXMubm9ybWFsaXplX2NvbHVtbnMoY2UuY29sdW1ucyksbnVsbCE9Y2UucXVvdGVkfHwoY2UucXVvdGVkPSExKSxudWxsIT1jZS5jYXN0fHwoY2UuY2FzdD17fSksbnVsbCE9Y2UuY2FzdC5iaWdpbnR8fChjZS5jYXN0LmJpZ2ludD1ZPT4iIitZKSxudWxsIT1jZS5jYXN0'@;
put 'LmJvb2xlYW58fChjZS5jYXN0LmJvb2xlYW49WT0+WT8iMSI6IiIpLG51bGwhPWNlLmNhc3QuZGF0ZXx8KGNlLmNhc3QuZGF0ZT1ZPT4iIitZLmdldFRpbWUoKSksbnVsbCE9Y2UuY2FzdC5udW1iZXJ8fChjZS5jYXN0Lm51bWJlcj1ZPT4iIitZKSxudWxsIT1jZS5jYXN0Lm9iamVjdHx8KGNl'@;
put 'LmNhc3Qub2JqZWN0PVk9PkpTT04uc3RyaW5naWZ5KFkpKSxudWxsIT1jZS5jYXN0LnN0cmluZ3x8KGNlLmNhc3Quc3RyaW5nPWZ1bmN0aW9uKFkpe3JldHVybiBZfSksbnVsbD09Y2UucmVjb3JkX2RlbGltaXRlciljZS5yZWNvcmRfZGVsaW1pdGVyPSJcbiI7ZWxzZSBpZihLLmlzQnVmZmVy'@;
put 'KGNlLnJlY29yZF9kZWxpbWl0ZXIpKWNlLnJlY29yZF9kZWxpbWl0ZXI9Y2UucmVjb3JkX2RlbGltaXRlci50b1N0cmluZygpO2Vsc2UgaWYoInN0cmluZyIhPXR5cGVvZiBjZS5yZWNvcmRfZGVsaW1pdGVyKXJldHVybiBFcnJvcihgSW52YWxpZCBPcHRpb246IHJlY29yZF9kZWxpbWl0ZXIg'@;
put 'bXVzdCBiZSBhIGJ1ZmZlciBvciBhIHN0cmluZywgZ290ICR7SlNPTi5zdHJpbmdpZnkoY2UucmVjb3JkX2RlbGltaXRlcil9YCl9X3RyYW5zZm9ybShjZSxZLGIpe2lmKCEwPT09dGhpcy5zdGF0ZS5zdG9wKXJldHVybjtpZighQXJyYXkuaXNBcnJheShjZSkmJiJvYmplY3QiIT10eXBlb2Yg'@;
put 'Y2UpcmV0dXJuIHRoaXMuc3RhdGUuc3RvcD0hMCxiKEVycm9yKGBJbnZhbGlkIFJlY29yZDogZXhwZWN0IGFuIGFycmF5IG9yIGFuIG9iamVjdCwgZ290ICR7SlNPTi5zdHJpbmdpZnkoY2UpfWApKTtpZigwPT09dGhpcy5pbmZvLnJlY29yZHMpaWYoQXJyYXkuaXNBcnJheShjZSkpe2lmKCEw'@;
put 'PT09dGhpcy5vcHRpb25zLmhlYWRlciYmIXRoaXMub3B0aW9ucy5jb2x1bW5zKXJldHVybiB0aGlzLnN0YXRlLnN0b3A9ITAsYihFcnJvcigiVW5kaXNjb3ZlcmFibGUgQ29sdW1uczogaGVhZGVyIG9wdGlvbiByZXF1aXJlcyBjb2x1bW4gb3B0aW9uIG9yIG9iamVjdCByZWNvcmRzIikpfWVs'@;
put 'c2UgbnVsbCE9dGhpcy5vcHRpb25zLmNvbHVtbnN8fCh0aGlzLm9wdGlvbnMuY29sdW1ucz10aGlzLm5vcm1hbGl6ZV9jb2x1bW5zKE9iamVjdC5rZXlzKGNlKSkpOzA9PT10aGlzLmluZm8ucmVjb3JkcyYmKHRoaXMuYm9tKCksdGhpcy5oZWFkZXJzKCkpO3RyeXt0aGlzLmVtaXQoInJlY29y'@;
put 'ZCIsY2UsdGhpcy5pbmZvLnJlY29yZHMpfWNhdGNoKE4pe3JldHVybiB0aGlzLnN0YXRlLnN0b3A9ITAsdGhpcy5lbWl0KCJlcnJvciIsTil9bGV0IHg7aWYodGhpcy5vcHRpb25zLmVvZil7aWYoeD10aGlzLnN0cmluZ2lmeShjZSksdm9pZCAwPT09eClyZXR1cm47eCs9dGhpcy5vcHRpb25z'@;
put 'LnJlY29yZF9kZWxpbWl0ZXJ9ZWxzZXtpZih4PXRoaXMuc3RyaW5naWZ5KGNlKSx2b2lkIDA9PT14KXJldHVybjsodGhpcy5vcHRpb25zLmhlYWRlcnx8dGhpcy5pbmZvLnJlY29yZHMpJiYoeD10aGlzLm9wdGlvbnMucmVjb3JkX2RlbGltaXRlcit4KX10aGlzLmluZm8ucmVjb3JkcysrLHRo'@;
put 'aXMucHVzaCh4KSxiKCl9X2ZsdXNoKGNlKXswPT09dGhpcy5pbmZvLnJlY29yZHMmJih0aGlzLmJvbSgpLHRoaXMuaGVhZGVycygpKSxjZSgpfXN0cmluZ2lmeShjZSxZPSExKXtpZigib2JqZWN0IiE9dHlwZW9mIGNlKXJldHVybiBjZTtjb25zdHtjb2x1bW5zOmJ9PXRoaXMub3B0aW9ucyxO'@;
put 'PVtdO2lmKEFycmF5LmlzQXJyYXkoY2UpKXtiJiZjZS5zcGxpY2UoYi5sZW5ndGgpO2ZvcihsZXQgZz0wO2c8Y2UubGVuZ3RoO2crKyl7Y29uc3QgQz1jZVtnXSxbTSx5XT10aGlzLl9fY2FzdChDLHtpbmRleDpnLGNvbHVtbjpnLHJlY29yZHM6dGhpcy5pbmZvLnJlY29yZHMsaGVhZGVyOll9'@;
put 'KTtpZihNKXJldHVybiB2b2lkIHRoaXMuZW1pdCgiZXJyb3IiLE0pO05bZ109W3ksQ119fWVsc2UgaWYoYilmb3IobGV0IGc9MDtnPGIubGVuZ3RoO2crKyl7Y29uc3QgQz1kZShjZSxiW2ddLmtleSksW00seV09dGhpcy5fX2Nhc3QoQyx7aW5kZXg6Zyxjb2x1bW46YltnXS5rZXkscmVjb3Jk'@;
put 'czp0aGlzLmluZm8ucmVjb3JkcyxoZWFkZXI6WX0pO2lmKE0pcmV0dXJuIHZvaWQgdGhpcy5lbWl0KCJlcnJvciIsTSk7TltnXT1beSxDXX1lbHNlIGZvcihsZXQgZyBvZiBjZSl7Y29uc3QgQz1jZVtnXSxbTSx5XT10aGlzLl9fY2FzdChDLHtpbmRleDppLGNvbHVtbjpiW2ldLmtleSxyZWNv'@;
put 'cmRzOnRoaXMuaW5mby5yZWNvcmRzLGhlYWRlcjpZfSk7aWYoTSlyZXR1cm4gdm9pZCB0aGlzLmVtaXQoImVycm9yIixNKTtOLnB1c2goW3ksQ10pfWxldCBGPSIiO2ZvcihsZXQgZz0wO2c8Ti5sZW5ndGg7ZysrKXtsZXQgQyxNLFt5LHBdPU5bZ107aWYoInN0cmluZyI9PXR5cGVvZiB5KUM9'@;
put 'dGhpcy5vcHRpb25zO2Vsc2UgaWYoaih5KSl7aWYoQz15LHk9Qy52YWx1ZSxkZWxldGUgQy52YWx1ZSwic3RyaW5nIiE9dHlwZW9mIHkmJm51bGwhPXkpcmV0dXJuIHZvaWQgdGhpcy5lbWl0KCJlcnJvciIsRXJyb3IoYEludmFsaWQgQ2FzdGluZyBWYWx1ZTogcmV0dXJuZWQgdmFsdWUgbXVz'@;
put 'dCByZXR1cm4gYSBzdHJpbmcsIG51bGwgb3IgdW5kZWZpbmVkLCBnb3QgJHtKU09OLnN0cmluZ2lmeSh5KX1gKSk7aWYoQz17Li4udGhpcy5vcHRpb25zLC4uLkN9LE09dGhpcy5ub3JtYWxpemUoQykpcmV0dXJuIHZvaWQgdGhpcy5lbWl0KCJlcnJvciIsTSl9ZWxzZXtpZihudWxsIT15KXJl'@;
put 'dHVybiB2b2lkIHRoaXMuZW1pdCgiZXJyb3IiLEVycm9yKGBJbnZhbGlkIENhc3RpbmcgVmFsdWU6IHJldHVybmVkIHZhbHVlIG11c3QgcmV0dXJuIGEgc3RyaW5nLCBhbiBvYmplY3QsIG51bGwgb3IgdW5kZWZpbmVkLCBnb3QgJHtKU09OLnN0cmluZ2lmeSh5KX1gKSk7Qz10aGlzLm9wdGlv'@;
put 'bnN9Y29uc3R7ZGVsaW1pdGVyOlMsZXNjYXBlOlEscXVvdGU6cmUscXVvdGVkOmZlLHF1b3RlZF9lbXB0eTptZSxxdW90ZWRfc3RyaW5nOmtlLHF1b3RlZF9tYXRjaDpUZSxyZWNvcmRfZGVsaW1pdGVyOlBlfT1DO2lmKHkpe2lmKCJzdHJpbmciIT10eXBlb2YgeSlyZXR1cm4gdGhpcy5lbWl0'@;
put 'KCJlcnJvciIsRXJyb3IoYEZvcm1hdHRlciBtdXN0IHJldHVybiBhIHN0cmluZywgbnVsbCBvciB1bmRlZmluZWQsIGdvdCAke0pTT04uc3RyaW5naWZ5KHkpfWApKSxudWxsO2NvbnN0IEZlPVMubGVuZ3RoJiZ5LmluZGV4T2YoUyk+PTAsTmU9IiIhPT1yZSYmeS5pbmRleE9mKHJlKT49MCxM'@;
put 'ZT15LmluZGV4T2YoUSk+PTAmJlEhPT1yZSxCZT15LmluZGV4T2YoUGUpPj0wLEhlPWtlJiYic3RyaW5nIj09dHlwZW9mIHA7bGV0IFFlPVRlJiZUZS5maWx0ZXIoS2U9PiJzdHJpbmciPT10eXBlb2YgS2U/LTEhPT15LmluZGV4T2YoS2UpOktlLnRlc3QoeSkpO1FlPVFlJiZRZS5sZW5ndGg+'@;
put 'MDtjb25zdCBtdD0hMD09PU5lfHxGZXx8QmV8fGZlfHxIZXx8UWU7aWYoITA9PT1tdCYmITA9PT1MZSl7Y29uc3QgS2U9IlxcIj09PVE/bmV3IFJlZ0V4cChRK1EsImciKTpuZXcgUmVnRXhwKFEsImciKTt5PXkucmVwbGFjZShLZSxRK1EpfWlmKCEwPT09TmUpe2NvbnN0IEtlPW5ldyBSZWdF'@;
put 'eHAocmUsImciKTt5PXkucmVwbGFjZShLZSxRK3JlKX0hMD09PW10JiYoeT1yZSt5K3JlKSxGKz15fWVsc2UoITA9PT1tZXx8IiI9PT1wJiYhMD09PWtlJiYhMSE9PW1lKSYmKEYrPXJlK3JlKTtnIT09Ti5sZW5ndGgtMSYmKEYrPVMpfXJldHVybiBGfWJvbSgpeyEwPT09dGhpcy5vcHRpb25z'@;
put 'LmJvbSYmdGhpcy5wdXNoKEkpfWhlYWRlcnMoKXtpZighMT09PXRoaXMub3B0aW9ucy5oZWFkZXJ8fHZvaWQgMD09PXRoaXMub3B0aW9ucy5jb2x1bW5zKXJldHVybjtsZXQgY2U9dGhpcy5vcHRpb25zLmNvbHVtbnMubWFwKFk9PlkuaGVhZGVyKTtjZT10aGlzLm9wdGlvbnMuZW9mP3RoaXMu'@;
put 'c3RyaW5naWZ5KGNlLCEwKSt0aGlzLm9wdGlvbnMucmVjb3JkX2RlbGltaXRlcjp0aGlzLnN0cmluZ2lmeShjZSksdGhpcy5wdXNoKGNlKX1fX2Nhc3QoY2UsWSl7Y29uc3QgYj10eXBlb2YgY2U7dHJ5e3JldHVybiJzdHJpbmciPT09Yj9bdm9pZCAwLHRoaXMub3B0aW9ucy5jYXN0LnN0cmlu'@;
put 'ZyhjZSxZKV06ImJpZ2ludCI9PT1iP1t2b2lkIDAsdGhpcy5vcHRpb25zLmNhc3QuYmlnaW50KGNlLFkpXToibnVtYmVyIj09PWI/W3ZvaWQgMCx0aGlzLm9wdGlvbnMuY2FzdC5udW1iZXIoY2UsWSldOiJib29sZWFuIj09PWI/W3ZvaWQgMCx0aGlzLm9wdGlvbnMuY2FzdC5ib29sZWFuKGNl'@;
put 'LFkpXTpjZSBpbnN0YW5jZW9mIERhdGU/W3ZvaWQgMCx0aGlzLm9wdGlvbnMuY2FzdC5kYXRlKGNlLFkpXToib2JqZWN0Ij09PWImJm51bGwhPT1jZT9bdm9pZCAwLHRoaXMub3B0aW9ucy5jYXN0Lm9iamVjdChjZSxZKV06W3ZvaWQgMCxjZSxjZV19Y2F0Y2goeCl7cmV0dXJuW3hdfX1ub3Jt'@;
put 'YWxpemVfY29sdW1ucyhjZSl7aWYobnVsbCE9Y2Upe2lmKCJvYmplY3QiIT10eXBlb2YgY2UpdGhyb3cgRXJyb3IoJ0ludmFsaWQgb3B0aW9uICJjb2x1bW5zIjogZXhwZWN0IGFuIGFycmF5IG9yIGFuIG9iamVjdCcpO2lmKEFycmF5LmlzQXJyYXkoY2UpKXtjb25zdCBZPVtdO2ZvcihsZXQg'@;
put 'YiBvZiBjZSlpZigic3RyaW5nIj09dHlwZW9mIGIpWS5wdXNoKHtrZXk6YixoZWFkZXI6Yn0pO2Vsc2V7aWYoIm9iamVjdCIhPXR5cGVvZiBifHx2b2lkIDA9PT1ifHxBcnJheS5pc0FycmF5KGIpKXRocm93IEVycm9yKCJJbnZhbGlkIGNvbHVtbiBkZWZpbml0aW9uOiBleHBlY3QgYSBzdHJp'@;
put 'bmcgb3IgYW4gb2JqZWN0Iik7aWYoIWIua2V5KXRocm93IEVycm9yKCdJbnZhbGlkIGNvbHVtbiBkZWZpbml0aW9uOiBwcm9wZXJ0eSAia2V5IiBpcyByZXF1aXJlZCcpO3ZvaWQgMD09PWIuaGVhZGVyJiYoYi5oZWFkZXI9Yi5rZXkpLFkucHVzaChiKX1jZT1ZfWVsc2V7Y29uc3QgWT1bXTtm'@;
put 'b3IobGV0IGIgaW4gY2UpWS5wdXNoKHtrZXk6YixoZWFkZXI6Y2VbYl19KTtjZT1ZfXJldHVybiBjZX19fWNvbnN0IEU9ZnVuY3Rpb24oKXtsZXQgdWUsY2UsWTtmb3IobGV0IHggaW4gYXJndW1lbnRzKXtjb25zdCBOPWFyZ3VtZW50c1t4XSxGPXR5cGVvZiBOO2lmKHZvaWQgMD09PXVlJiZB'@;
put 'cnJheS5pc0FycmF5KE4pKXVlPU47ZWxzZSBpZih2b2lkIDA9PT1jZSYmaihOKSljZT1OO2Vsc2V7aWYodm9pZCAwIT09WXx8ImZ1bmN0aW9uIiE9PUYpdGhyb3cgbmV3IHooIkNTVl9JTlZBTElEX0FSR1VNRU5UIixbIkludmFsaWQgYXJndW1lbnQ6IixgZ290ICR7SlNPTi5zdHJpbmdpZnko'@;
put 'Til9IGF0IGluZGV4ICR7eH1gXSk7WT1OfX1jb25zdCBiPW5ldyBSKGNlKTtpZihZKXtjb25zdCB4PVtdO2Iub24oInJlYWRhYmxlIixmdW5jdGlvbigpe2xldCBOO2Zvcig7bnVsbCE9PShOPXRoaXMucmVhZCgpKTspeC5wdXNoKE4pfSksYi5vbigiZXJyb3IiLGZ1bmN0aW9uKE4pe1koTil9'@;
put 'KSxiLm9uKCJlbmQiLGZ1bmN0aW9uKCl7WSh2b2lkIDAseC5qb2luKCIiKSl9KX1pZih2b2lkIDAhPT11ZSlpZigiZnVuY3Rpb24iPT10eXBlb2Ygc2V0SW1tZWRpYXRlKXNldEltbWVkaWF0ZShmdW5jdGlvbigpe2ZvcihsZXQgeCBvZiB1ZSliLndyaXRlKHgpO2IuZW5kKCl9KTtlbHNle2Zv'@;
put 'cihsZXQgeCBvZiB1ZSliLndyaXRlKHgpO2IuZW5kKCl9cmV0dXJuIGJ9O2NsYXNzIHogZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihjZSxZLC4uLmIpe0FycmF5LmlzQXJyYXkoWSkmJihZPVkuam9pbigiICIpKSxzdXBlcihZKSx2b2lkIDAhPT1FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSYm'@;
put 'RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx6KSx0aGlzLmNvZGU9Y2U7Zm9yKGNvbnN0IHggb2YgYilmb3IoY29uc3QgTiBpbiB4KXtjb25zdCBGPXhbTl07dGhpc1tOXT1LLmlzQnVmZmVyKEYpP0YudG9TdHJpbmcoKTpudWxsPT1GP0Y6SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShG'@;
put 'KSl9fX1FLlN0cmluZ2lmaWVyPVIsRS5Dc3ZFcnJvcj16LEguZXhwb3J0cz1FO2NvbnN0IGo9ZnVuY3Rpb24odWUpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdWUmJm51bGwhPT11ZSYmIUFycmF5LmlzQXJyYXkodWUpfSxWPWZ1bmN0aW9uKHVlKXtyZXR1cm4gdWUucmVwbGFjZSgvKFtBLVpd'@;
put 'KS9nLGZ1bmN0aW9uKGNlLFkpe3JldHVybiJfIitZLnRvTG93ZXJDYXNlKCl9KX0sRz0iLiIuY2hhckNvZGVBdCgwKSxXPS9cXChcXCk/L2csVT1SZWdFeHAoIlteLltcXF1dK3xcXFsoPzooW15cIiddW15bXSopfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKj8pXFwyKVxcXXwo'@;
put 'Pz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JCkpIiwiZyIpLHE9L1wufFxbKD86W15bXF1dKnwoWyInXSkoPzooPyFcMSlbXlxcXXxcXC4pKj9cMSlcXS8sdGU9L15cdyokLyxuZT1mdW5jdGlvbih1ZSl7Y29uc3QgY2U9dHlwZW9mIHVlO3JldHVybiJzeW1ib2wiPT09Y2V8fCJvYmpl'@;
put 'Y3QiPT09Y2UmJnVlJiYiW29iamVjdCBTeW1ib2xdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh1ZSl9LGxlPWZ1bmN0aW9uKHVlKXtpZigic3RyaW5nIj09dHlwZW9mIHVlfHxuZSh1ZSkpcmV0dXJuIHVlO2NvbnN0IGNlPWAke3VlfWA7cmV0dXJuIjAiPT1jZSYmMS91ZT09'@;
put 'LUlORklOSVRZPyItMCI6Y2V9LGRlPWZ1bmN0aW9uKHVlLGNlKXtsZXQgWT0wO2NvbnN0IGI9KGNlPWZ1bmN0aW9uKHVlLGNlKXtyZXR1cm4gQXJyYXkuaXNBcnJheSh1ZSk/dWU6ZnVuY3Rpb24oWSxiKXtpZihBcnJheS5pc0FycmF5KFkpKXJldHVybiExO2NvbnN0IHg9dHlwZW9mIFk7cmV0'@;
put 'dXJuISgibnVtYmVyIiE9PXgmJiJzeW1ib2wiIT09eCYmImJvb2xlYW4iIT09eCYmWSYmIW5lKFkpKXx8dGUudGVzdChZKXx8IXEudGVzdChZKXx8bnVsbCE9YiYmWSBpbiBPYmplY3QoYil9KHVlLGNlKT9bdWVdOmZ1bmN0aW9uKFkpe2NvbnN0IGI9W107cmV0dXJuIFkuY2hhckNvZGVBdCgw'@;
put 'KT09PUcmJmIucHVzaCgiIiksWS5yZXBsYWNlKFUsZnVuY3Rpb24oeCxOLEYsZyl7bGV0IEM9eDtGP0M9Zy5yZXBsYWNlKFcsIiQxIik6TiYmKEM9Ti50cmltKCkpLGIucHVzaChDKX0pLGJ9KHVlKX0oY2UsdWUpKS5sZW5ndGg7Zm9yKDtudWxsIT11ZSYmWTxiOyl1ZT11ZVtsZShjZVtZKytd'@;
put 'KV07cmV0dXJuIFkmJlk9PT1iP3VlOnZvaWQgMH19LDc1NjU6KEgsQixMKT0+e3ZhciBLPUwoODc2NCkuQnVmZmVyO2NvbnN0IEo9TCg1MDU2KSx7U3RyaW5nRGVjb2RlcjpJfT1MKDI1NTMpO0guZXhwb3J0cz1mdW5jdGlvbihSLEU9e30pe2NvbnN0IHo9W107ZnVuY3Rpb24gaihHKXtHJiZ6'@;
put 'LnB1c2goRy50b1N0cmluZygpKX1LLmlzQnVmZmVyKFIpJiYoUj0obmV3IEkpLndyaXRlKFIpKTtsZXQgVj1uZXcgSi5TdHJpbmdpZmllcihFKTtWLm9uKCJkYXRhIixqKTtmb3IobGV0IEcgb2YgUilWLndyaXRlKEcpO3JldHVybiBWLmVuZCgpLFYub2ZmKCJkYXRhIixqKSx6LmpvaW4oIiIp'@;
put 'fX0sNDI4OTooSCxCLEwpPT57InVzZSBzdHJpY3QiO3ZhciBLPUwoMjIxNSksSj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbCgiZm9vIiksST1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLFI9QXJyYXkucHJvdG90eXBlLmNvbmNhdCxFPU9iamVj'@;
put 'dC5kZWZpbmVQcm9wZXJ0eSx6PUwoMTA0NCkoKSxqPUUmJnosVj1mdW5jdGlvbihXLFUscSx0ZSl7aWYoVSBpbiBXKWlmKCEwPT09dGUpe2lmKFdbVV09PT1xKXJldHVybn1lbHNlIGlmKCJmdW5jdGlvbiIhPXR5cGVvZihuZT10ZSl8fCJbb2JqZWN0IEZ1bmN0aW9uXSIhPT1JLmNhbGwobmUp'@;
put 'fHwhdGUoKSlyZXR1cm47dmFyIG5lO2o/RShXLFUse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOnEsd3JpdGFibGU6ITB9KTpXW1VdPXF9LEc9ZnVuY3Rpb24oVyxVKXt2YXIgcT1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnt9LHRlPUsoVSk7SiYmKHRlPVIu'@;
put 'Y2FsbCh0ZSxPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKFUpKSk7Zm9yKHZhciBuZT0wO25lPHRlLmxlbmd0aDtuZSs9MSlWKFcsdGVbbmVdLFVbdGVbbmVdXSxxW3RlW25lXV0pfTtHLnN1cHBvcnRzRGVzY3JpcHRvcnM9ISFqLEguZXhwb3J0cz1HfSw1MjUxOihILEIsTCk9PnsidXNl'@;
put 'IHN0cmljdCI7Qi51dGlscz1MKDEyNzgpLEIuQ2lwaGVyPUwoNTc1NiksQi5ERVM9TCgzMjcpLEIuQ0JDPUwoOTA1MSksQi5FREU9TCg2NTEpfSw5MDUxOihILEIsTCk9PnsidXNlIHN0cmljdCI7dmFyIEs9TCg5NzQ2KSxKPUwoNTcxNyksST17fTtmdW5jdGlvbiBSKEUpe0suZXF1YWwoRS5s'@;
put 'ZW5ndGgsOCwiSW52YWxpZCBJViBsZW5ndGgiKSx0aGlzLml2PW5ldyBBcnJheSg4KTtmb3IodmFyIHo9MDt6PHRoaXMuaXYubGVuZ3RoO3orKyl0aGlzLml2W3pdPUVbel19Qi5pbnN0YW50aWF0ZT1mdW5jdGlvbihFKXtmdW5jdGlvbiB6KFcpe0UuY2FsbCh0aGlzLFcpLHRoaXMuX2NiY0lu'@;
put 'aXQoKX1KKHosRSk7Zm9yKHZhciBqPU9iamVjdC5rZXlzKEkpLFY9MDtWPGoubGVuZ3RoO1YrKyl7dmFyIEc9altWXTt6LnByb3RvdHlwZVtHXT1JW0ddfXJldHVybiB6LmNyZWF0ZT1mdW5jdGlvbihXKXtyZXR1cm4gbmV3IHooVyl9LHp9LEkuX2NiY0luaXQ9ZnVuY3Rpb24oKXt2YXIgRT1u'@;
put 'ZXcgUih0aGlzLm9wdGlvbnMuaXYpO3RoaXMuX2NiY1N0YXRlPUV9LEkuX3VwZGF0ZT1mdW5jdGlvbihFLHosaixWKXt2YXIgVz10aGlzLmNvbnN0cnVjdG9yLnN1cGVyXy5wcm90b3R5cGUsVT10aGlzLl9jYmNTdGF0ZS5pdjtpZigiZW5jcnlwdCI9PT10aGlzLnR5cGUpe2Zvcih2YXIgcT0w'@;
put 'O3E8dGhpcy5ibG9ja1NpemU7cSsrKVVbcV1ePUVbeitxXTtmb3IoVy5fdXBkYXRlLmNhbGwodGhpcyxVLDAsaixWKSxxPTA7cTx0aGlzLmJsb2NrU2l6ZTtxKyspVVtxXT1qW1YrcV19ZWxzZXtmb3IoVy5fdXBkYXRlLmNhbGwodGhpcyxFLHosaixWKSxxPTA7cTx0aGlzLmJsb2NrU2l6ZTtx'@;
put 'KyspaltWK3FdXj1VW3FdO2ZvcihxPTA7cTx0aGlzLmJsb2NrU2l6ZTtxKyspVVtxXT1FW3orcV19fX0sNTc1NjooSCxCLEwpPT57InVzZSBzdHJpY3QiO3ZhciBLPUwoOTc0Nik7ZnVuY3Rpb24gSihJKXt0aGlzLm9wdGlvbnM9SSx0aGlzLnR5cGU9dGhpcy5vcHRpb25zLnR5cGUsdGhpcy5i'@;
put 'bG9ja1NpemU9OCx0aGlzLl9pbml0KCksdGhpcy5idWZmZXI9bmV3IEFycmF5KHRoaXMuYmxvY2tTaXplKSx0aGlzLmJ1ZmZlck9mZj0wfUguZXhwb3J0cz1KLEoucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKCl7fSxKLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oSSl7cmV0dXJuIDA9PT1J'@;
put 'Lmxlbmd0aD9bXToiZGVjcnlwdCI9PT10aGlzLnR5cGU/dGhpcy5fdXBkYXRlRGVjcnlwdChJKTp0aGlzLl91cGRhdGVFbmNyeXB0KEkpfSxKLnByb3RvdHlwZS5fYnVmZmVyPWZ1bmN0aW9uKEksUil7Zm9yKHZhciBFPU1hdGgubWluKHRoaXMuYnVmZmVyLmxlbmd0aC10aGlzLmJ1ZmZlck9m'@;
put 'ZixJLmxlbmd0aC1SKSx6PTA7ejxFO3orKyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlck9mZit6XT1JW1Irel07cmV0dXJuIHRoaXMuYnVmZmVyT2ZmKz1FLEV9LEoucHJvdG90eXBlLl9mbHVzaEJ1ZmZlcj1mdW5jdGlvbihJLFIpe3JldHVybiB0aGlzLl91cGRhdGUodGhpcy5idWZmZXIsMCxJ'@;
put 'LFIpLHRoaXMuYnVmZmVyT2ZmPTAsdGhpcy5ibG9ja1NpemV9LEoucHJvdG90eXBlLl91cGRhdGVFbmNyeXB0PWZ1bmN0aW9uKEkpe3ZhciBSPTAsRT0wLGo9bmV3IEFycmF5KCgodGhpcy5idWZmZXJPZmYrSS5sZW5ndGgpL3RoaXMuYmxvY2tTaXplfDApKnRoaXMuYmxvY2tTaXplKTswIT09'@;
put 'dGhpcy5idWZmZXJPZmYmJihSKz10aGlzLl9idWZmZXIoSSxSKSx0aGlzLmJ1ZmZlck9mZj09PXRoaXMuYnVmZmVyLmxlbmd0aCYmKEUrPXRoaXMuX2ZsdXNoQnVmZmVyKGosRSkpKTtmb3IodmFyIFY9SS5sZW5ndGgtKEkubGVuZ3RoLVIpJXRoaXMuYmxvY2tTaXplO1I8VjtSKz10aGlzLmJs'@;
put 'b2NrU2l6ZSl0aGlzLl91cGRhdGUoSSxSLGosRSksRSs9dGhpcy5ibG9ja1NpemU7Zm9yKDtSPEkubGVuZ3RoO1IrKyx0aGlzLmJ1ZmZlck9mZisrKXRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyT2ZmXT1JW1JdO3JldHVybiBqfSxKLnByb3RvdHlwZS5fdXBkYXRlRGVjcnlwdD1mdW5jdGlvbihJ'@;
put 'KXtmb3IodmFyIFI9MCxFPTAsej1NYXRoLmNlaWwoKHRoaXMuYnVmZmVyT2ZmK0kubGVuZ3RoKS90aGlzLmJsb2NrU2l6ZSktMSxqPW5ldyBBcnJheSh6KnRoaXMuYmxvY2tTaXplKTt6PjA7ei0tKVIrPXRoaXMuX2J1ZmZlcihJLFIpLEUrPXRoaXMuX2ZsdXNoQnVmZmVyKGosRSk7cmV0dXJu'@;
put 'IFIrPXRoaXMuX2J1ZmZlcihJLFIpLGp9LEoucHJvdG90eXBlLmZpbmFsPWZ1bmN0aW9uKEkpe3ZhciBSLEU7cmV0dXJuIEkmJihSPXRoaXMudXBkYXRlKEkpKSxFPSJlbmNyeXB0Ij09PXRoaXMudHlwZT90aGlzLl9maW5hbEVuY3J5cHQoKTp0aGlzLl9maW5hbERlY3J5cHQoKSxSP1IuY29u'@;
put 'Y2F0KEUpOkV9LEoucHJvdG90eXBlLl9wYWQ9ZnVuY3Rpb24oSSxSKXtpZigwPT09UilyZXR1cm4hMTtmb3IoO1I8SS5sZW5ndGg7KUlbUisrXT0wO3JldHVybiEwfSxKLnByb3RvdHlwZS5fZmluYWxFbmNyeXB0PWZ1bmN0aW9uKCl7aWYoIXRoaXMuX3BhZCh0aGlzLmJ1ZmZlcix0aGlzLmJ1'@;
put 'ZmZlck9mZikpcmV0dXJuW107dmFyIEk9bmV3IEFycmF5KHRoaXMuYmxvY2tTaXplKTtyZXR1cm4gdGhpcy5fdXBkYXRlKHRoaXMuYnVmZmVyLDAsSSwwKSxJfSxKLnByb3RvdHlwZS5fdW5wYWQ9ZnVuY3Rpb24oSSl7cmV0dXJuIEl9LEoucHJvdG90eXBlLl9maW5hbERlY3J5cHQ9ZnVuY3Rp'@;
put 'b24oKXtLLmVxdWFsKHRoaXMuYnVmZmVyT2ZmLHRoaXMuYmxvY2tTaXplLCJOb3QgZW5vdWdoIGRhdGEgdG8gZGVjcnlwdCIpO3ZhciBJPW5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSk7cmV0dXJuIHRoaXMuX2ZsdXNoQnVmZmVyKEksMCksdGhpcy5fdW5wYWQoSSl9fSwzMjc6KEgsQixMKT0+'@;
put 'eyJ1c2Ugc3RyaWN0Ijt2YXIgSz1MKDk3NDYpLEo9TCg1NzE3KSxJPUwoMTI3OCksUj1MKDU3NTYpO2Z1bmN0aW9uIEUoKXt0aGlzLnRtcD1uZXcgQXJyYXkoMiksdGhpcy5rZXlzPW51bGx9ZnVuY3Rpb24geihWKXtSLmNhbGwodGhpcyxWKTt2YXIgRz1uZXcgRTt0aGlzLl9kZXNTdGF0ZT1H'@;
put 'LHRoaXMuZGVyaXZlS2V5cyhHLFYua2V5KX1KKHosUiksSC5leHBvcnRzPXosei5jcmVhdGU9ZnVuY3Rpb24oVil7cmV0dXJuIG5ldyB6KFYpfTt2YXIgaj1bMSwxLDIsMiwyLDIsMiwyLDEsMiwyLDIsMiwyLDIsMV07ei5wcm90b3R5cGUuZGVyaXZlS2V5cz1mdW5jdGlvbihWLEcpe1Yua2V5'@;
put 'cz1uZXcgQXJyYXkoMzIpLEsuZXF1YWwoRy5sZW5ndGgsdGhpcy5ibG9ja1NpemUsIkludmFsaWQga2V5IGxlbmd0aCIpO3ZhciBXPUkucmVhZFVJbnQzMkJFKEcsMCksVT1JLnJlYWRVSW50MzJCRShHLDQpO0kucGMxKFcsVSxWLnRtcCwwKSxXPVYudG1wWzBdLFU9Vi50bXBbMV07Zm9yKHZh'@;
put 'ciBxPTA7cTxWLmtleXMubGVuZ3RoO3ErPTIpe3ZhciB0ZT1qW3E+Pj4xXTtXPUkucjI4c2hsKFcsdGUpLFU9SS5yMjhzaGwoVSx0ZSksSS5wYzIoVyxVLFYua2V5cyxxKX19LHoucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oVixHLFcsVSl7dmFyIHE9dGhpcy5fZGVzU3RhdGUsdGU9SS5y'@;
put 'ZWFkVUludDMyQkUoVixHKSxuZT1JLnJlYWRVSW50MzJCRShWLEcrNCk7SS5pcCh0ZSxuZSxxLnRtcCwwKSx0ZT1xLnRtcFswXSxuZT1xLnRtcFsxXSwiZW5jcnlwdCI9PT10aGlzLnR5cGU/dGhpcy5fZW5jcnlwdChxLHRlLG5lLHEudG1wLDApOnRoaXMuX2RlY3J5cHQocSx0ZSxuZSxxLnRt'@;
put 'cCwwKSxuZT1xLnRtcFsxXSxJLndyaXRlVUludDMyQkUoVyx0ZT1xLnRtcFswXSxVKSxJLndyaXRlVUludDMyQkUoVyxuZSxVKzQpfSx6LnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKFYsRyl7Zm9yKHZhciBXPVYubGVuZ3RoLUcsVT1HO1U8Vi5sZW5ndGg7VSsrKVZbVV09VztyZXR1cm4hMH0s'@;
put 'ei5wcm90b3R5cGUuX3VucGFkPWZ1bmN0aW9uKFYpe2Zvcih2YXIgRz1WW1YubGVuZ3RoLTFdLFc9Vi5sZW5ndGgtRztXPFYubGVuZ3RoO1crKylLLmVxdWFsKFZbV10sRyk7cmV0dXJuIFYuc2xpY2UoMCxWLmxlbmd0aC1HKX0sei5wcm90b3R5cGUuX2VuY3J5cHQ9ZnVuY3Rpb24oVixHLFcs'@;
put 'VSxxKXtmb3IodmFyIHRlPUcsbmU9VyxpZT0wO2llPFYua2V5cy5sZW5ndGg7aWUrPTIpe3ZhciBsZT1WLmtleXNbaWVdLGRlPVYua2V5c1tpZSsxXTtJLmV4cGFuZChuZSxWLnRtcCwwKTt2YXIgdWU9SS5zdWJzdGl0dXRlKGxlXj1WLnRtcFswXSxkZV49Vi50bXBbMV0pLGNlPW5lO25lPSh0'@;
put 'ZV5JLnBlcm11dGUodWUpKT4+PjAsdGU9Y2V9SS5yaXAobmUsdGUsVSxxKX0sei5wcm90b3R5cGUuX2RlY3J5cHQ9ZnVuY3Rpb24oVixHLFcsVSxxKXtmb3IodmFyIHRlPVcsbmU9RyxpZT1WLmtleXMubGVuZ3RoLTI7aWU+PTA7aWUtPTIpe3ZhciBsZT1WLmtleXNbaWVdLGRlPVYua2V5c1tp'@;
put 'ZSsxXTtJLmV4cGFuZCh0ZSxWLnRtcCwwKTt2YXIgdWU9SS5zdWJzdGl0dXRlKGxlXj1WLnRtcFswXSxkZV49Vi50bXBbMV0pLGNlPXRlO3RlPShuZV5JLnBlcm11dGUodWUpKT4+PjAsbmU9Y2V9SS5yaXAodGUsbmUsVSxxKX19LDY1MTooSCxCLEwpPT57InVzZSBzdHJpY3QiO3ZhciBLPUwo'@;
put 'OTc0NiksSj1MKDU3MTcpLEk9TCg1NzU2KSxSPUwoMzI3KTtmdW5jdGlvbiBFKGosVil7Sy5lcXVhbChWLmxlbmd0aCwyNCwiSW52YWxpZCBrZXkgbGVuZ3RoIik7dmFyIEc9Vi5zbGljZSgwLDgpLFc9Vi5zbGljZSg4LDE2KSxVPVYuc2xpY2UoMTYsMjQpO3RoaXMuY2lwaGVycz0iZW5jcnlw'@;
put 'dCI9PT1qP1tSLmNyZWF0ZSh7dHlwZToiZW5jcnlwdCIsa2V5Okd9KSxSLmNyZWF0ZSh7dHlwZToiZGVjcnlwdCIsa2V5Old9KSxSLmNyZWF0ZSh7dHlwZToiZW5jcnlwdCIsa2V5OlV9KV06W1IuY3JlYXRlKHt0eXBlOiJkZWNyeXB0IixrZXk6VX0pLFIuY3JlYXRlKHt0eXBlOiJlbmNyeXB0'@;
put 'IixrZXk6V30pLFIuY3JlYXRlKHt0eXBlOiJkZWNyeXB0IixrZXk6R30pXX1mdW5jdGlvbiB6KGope0kuY2FsbCh0aGlzLGopO3ZhciBWPW5ldyBFKHRoaXMudHlwZSx0aGlzLm9wdGlvbnMua2V5KTt0aGlzLl9lZGVTdGF0ZT1WfUooeixJKSxILmV4cG9ydHM9eix6LmNyZWF0ZT1mdW5jdGlv'@;
put 'bihqKXtyZXR1cm4gbmV3IHooail9LHoucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oaixWLEcsVyl7dmFyIFU9dGhpcy5fZWRlU3RhdGU7VS5jaXBoZXJzWzBdLl91cGRhdGUoaixWLEcsVyksVS5jaXBoZXJzWzFdLl91cGRhdGUoRyxXLEcsVyksVS5jaXBoZXJzWzJdLl91cGRhdGUoRyxX'@;
put 'LEcsVyl9LHoucHJvdG90eXBlLl9wYWQ9Ui5wcm90b3R5cGUuX3BhZCx6LnByb3RvdHlwZS5fdW5wYWQ9Ui5wcm90b3R5cGUuX3VucGFkfSwxMjc4OihILEIpPT57InVzZSBzdHJpY3QiO0IucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKEksUil7cmV0dXJuKElbMCtSXTw8MjR8SVsxK1JdPDwxNnxJ'@;
put 'WzIrUl08PDh8SVszK1JdKT4+PjB9LEIud3JpdGVVSW50MzJCRT1mdW5jdGlvbihJLFIsRSl7SVswK0VdPVI+Pj4yNCxJWzErRV09Uj4+PjE2JjI1NSxJWzIrRV09Uj4+PjgmMjU1LElbMytFXT0yNTUmUn0sQi5pcD1mdW5jdGlvbihJLFIsRSx6KXtmb3IodmFyIGo9MCxWPTAsRz02O0c+PTA7'@;
put 'Ry09Mil7Zm9yKHZhciBXPTA7Vzw9MjQ7Vys9OClqPDw9MSxqfD1SPj4+VytHJjE7Zm9yKFc9MDtXPD0yNDtXKz04KWo8PD0xLGp8PUk+Pj5XK0cmMX1mb3IoRz02O0c+PTA7Ry09Mil7Zm9yKFc9MTtXPD0yNTtXKz04KVY8PD0xLFZ8PVI+Pj5XK0cmMTtmb3IoVz0xO1c8PTI1O1crPTgpVjw8'@;
put 'PTEsVnw9ST4+PlcrRyYxfUVbeiswXT1qPj4+MCxFW3orMV09Vj4+PjB9LEIucmlwPWZ1bmN0aW9uKEksUixFLHope2Zvcih2YXIgaj0wLFY9MCxHPTA7Rzw0O0crKylmb3IodmFyIFc9MjQ7Vz49MDtXLT04KWo8PD0xLGp8PVI+Pj5XK0cmMSxqPDw9MSxqfD1JPj4+VytHJjE7Zm9yKEc9NDtH'@;
put 'PDg7RysrKWZvcihXPTI0O1c+PTA7Vy09OClWPDw9MSxWfD1SPj4+VytHJjEsVjw8PTEsVnw9ST4+PlcrRyYxO0VbeiswXT1qPj4+MCxFW3orMV09Vj4+PjB9LEIucGMxPWZ1bmN0aW9uKEksUixFLHope2Zvcih2YXIgaj0wLFY9MCxHPTc7Rz49NTtHLS0pe2Zvcih2YXIgVz0wO1c8PTI0O1cr'@;
put 'PTgpajw8PTEsanw9Uj4+VytHJjE7Zm9yKFc9MDtXPD0yNDtXKz04KWo8PD0xLGp8PUk+PlcrRyYxfWZvcihXPTA7Vzw9MjQ7Vys9OClqPDw9MSxqfD1SPj5XK0cmMTtmb3IoRz0xO0c8PTM7RysrKXtmb3IoVz0wO1c8PTI0O1crPTgpVjw8PTEsVnw9Uj4+VytHJjE7Zm9yKFc9MDtXPD0yNDtX'@;
put 'Kz04KVY8PD0xLFZ8PUk+PlcrRyYxfWZvcihXPTA7Vzw9MjQ7Vys9OClWPDw9MSxWfD1JPj5XK0cmMTtFW3orMF09aj4+PjAsRVt6KzFdPVY+Pj4wfSxCLnIyOHNobD1mdW5jdGlvbihJLFIpe3JldHVybiBJPDxSJjI2ODQzNTQ1NXxJPj4+MjgtUn07dmFyIEw9WzE0LDExLDE3LDQsMjcsMjMs'@;
put 'MjUsMCwxMywyMiw3LDE4LDUsOSwxNiwyNCwyLDIwLDEyLDIxLDEsOCwxNSwyNiwxNSw0LDI1LDE5LDksMSwyNiwxNiw1LDExLDIzLDgsMTIsNywxNywwLDIyLDMsMTAsMTQsNiwyMCwyNywyNF07Qi5wYzI9ZnVuY3Rpb24oSSxSLEUseil7Zm9yKHZhciBqPTAsVj0wLEc9TC5sZW5ndGg+Pj4x'@;
put 'LFc9MDtXPEc7VysrKWo8PD0xLGp8PUk+Pj5MW1ddJjE7Zm9yKFc9RztXPEwubGVuZ3RoO1crKylWPDw9MSxWfD1SPj4+TFtXXSYxO0VbeiswXT1qPj4+MCxFW3orMV09Vj4+PjB9LEIuZXhwYW5kPWZ1bmN0aW9uKEksUixFKXt2YXIgej0wLGo9MDt6PSgxJkkpPDw1fEk+Pj4yNztmb3IodmFy'@;
put 'IFY9MjM7Vj49MTU7Vi09NCl6PDw9Nix6fD1JPj4+ViY2Mztmb3IoVj0xMTtWPj0zO1YtPTQpanw9ST4+PlYmNjMsajw8PTY7anw9KDMxJkkpPDwxfEk+Pj4zMSxSW0UrMF09ej4+PjAsUltFKzFdPWo+Pj4wfTt2YXIgSz1bMTQsMCw0LDE1LDEzLDcsMSw0LDIsMTQsMTUsMiwxMSwxMyw4LDEs'@;
put 'MywxMCwxMCw2LDYsMTIsMTIsMTEsNSw5LDksNSwwLDMsNyw4LDQsMTUsMSwxMiwxNCw4LDgsMiwxMyw0LDYsOSwyLDEsMTEsNywxNSw1LDEyLDExLDksMyw3LDE0LDMsMTAsMTAsMCw1LDYsMCwxMywxNSwzLDEsMTMsOCw0LDE0LDcsNiwxNSwxMSwyLDMsOCw0LDE0LDksMTIsNywwLDIsMSwx'@;
put 'MywxMCwxMiw2LDAsOSw1LDExLDEwLDUsMCwxMywxNCw4LDcsMTAsMTEsMSwxMCwzLDQsMTUsMTMsNCwxLDIsNSwxMSw4LDYsMTIsNyw2LDEyLDksMCwzLDUsMiwxNCwxNSw5LDEwLDEzLDAsNyw5LDAsMTQsOSw2LDMsMyw0LDE1LDYsNSwxMCwxLDIsMTMsOCwxMiw1LDcsMTQsMTEsMTIsNCwx'@;
put 'MSwyLDE1LDgsMSwxMywxLDYsMTAsNCwxMyw5LDAsOCw2LDE1LDksMyw4LDAsNywxMSw0LDEsMTUsMiwxNCwxMiwzLDUsMTEsMTAsNSwxNCwyLDcsMTIsNywxMywxMyw4LDE0LDExLDMsNSwwLDYsNiwxNSw5LDAsMTAsMywxLDQsMiw3LDgsMiw1LDEyLDExLDEsMTIsMTAsNCwxNCwxNSw5LDEw'@;
put 'LDMsNiwxNSw5LDAsMCw2LDEyLDEwLDExLDEsNywxMywxMyw4LDE1LDksMSw0LDMsNSwxNCwxMSw1LDEyLDIsNyw4LDIsNCwxNCwyLDE0LDEyLDExLDQsMiwxLDEyLDcsNCwxMCw3LDExLDEzLDYsMSw4LDUsNSwwLDMsMTUsMTUsMTAsMTMsMywwLDksMTQsOCw5LDYsNCwxMSwyLDgsMSwxMiwx'@;
put 'MSw3LDEwLDEsMTMsMTQsNywyLDgsMTMsMTUsNiw5LDE1LDEyLDAsNSw5LDYsMTAsMyw0LDAsNSwxNCwzLDEyLDEwLDEsMTUsMTAsNCwxNSwyLDksNywyLDEyLDYsOSw4LDUsMCw2LDEzLDEsMywxMyw0LDE0LDE0LDAsNywxMSw1LDMsMTEsOCw5LDQsMTQsMywxNSwyLDUsMTIsMiw5LDgsNSwx'@;
put 'MiwxNSwzLDEwLDcsMTEsMCwxNCw0LDEsMTAsNywxLDYsMTMsMCwxMSw4LDYsMTMsNCwxMywxMSwwLDIsMTEsMTQsNywxNSw0LDAsOSw4LDEsMTMsMTAsMywxNCwxMiwzLDksNSw3LDEyLDUsMiwxMCwxNSw2LDgsMSw2LDEsNiw0LDExLDExLDEzLDEzLDgsMTIsMSwzLDQsNywxMCwxNCw3LDEw'@;
put 'LDksMTUsNSw2LDAsOCwxNSwwLDE0LDUsMiw5LDMsMiwxMiwxMywxLDIsMTUsOCwxMyw0LDgsNiwxMCwxNSwzLDExLDcsMSw0LDEwLDEyLDksNSwzLDYsMTQsMTEsNSwwLDAsMTQsMTIsOSw3LDIsNywyLDExLDEsNCwxNCwxLDcsOSw0LDEyLDEwLDE0LDgsMiwxMywwLDE1LDYsMTIsMTAsOSwx'@;
put 'MywwLDE1LDMsMyw1LDUsNiw4LDExXTtCLnN1YnN0aXR1dGU9ZnVuY3Rpb24oSSxSKXtmb3IodmFyIEU9MCx6PTA7ejw0O3orKylFPDw9NCxFfD1LWzY0KnorKEk+Pj4xOC02KnomNjMpXTtmb3Ioej0wO3o8NDt6KyspRTw8PTQsRXw9S1syNTYrNjQqeisoUj4+PjE4LTYqeiY2MyldO3JldHVy'@;
put 'biBFPj4+MH07dmFyIEo9WzE2LDI1LDEyLDExLDMsMjAsNCwxNSwzMSwxNyw5LDYsMjcsMTQsMSwyMiwzMCwyNCw4LDE4LDAsNSwyOSwyMywxMywxOSwyLDI2LDEwLDIxLDI4LDddO0IucGVybXV0ZT1mdW5jdGlvbihJKXtmb3IodmFyIFI9MCxFPTA7RTxKLmxlbmd0aDtFKyspUjw8PTEsUnw9'@;
put 'ST4+PkpbRV0mMTtyZXR1cm4gUj4+PjB9LEIucGFkU3BsaXQ9ZnVuY3Rpb24oSSxSLEUpe2Zvcih2YXIgej1JLnRvU3RyaW5nKDIpO3oubGVuZ3RoPFI7KXo9IjAiK3o7Zm9yKHZhciBqPVtdLFY9MDtWPFI7Vis9RSlqLnB1c2goei5zbGljZShWLFYrRSkpO3JldHVybiBqLmpvaW4oIiAiKX19'@;
put 'LDI2MDc6KEgsQixMKT0+e3ZhciBLPUwoODc2NCkuQnVmZmVyLEo9TCgzNTkwKSxJPUwoOTc5OSksUj1MKDc0MjYpLEU9e2JpbmFyeTohMCxoZXg6ITAsYmFzZTY0OiEwfTtCLkRpZmZpZUhlbGxtYW5Hcm91cD1CLmNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cD1CLmdldERpZmZpZUhlbGxtYW49'@;
put 'ZnVuY3Rpb24oeil7dmFyIGo9bmV3IEsoSVt6XS5wcmltZSwiaGV4IiksVj1uZXcgSyhJW3pdLmdlbiwiaGV4Iik7cmV0dXJuIG5ldyBSKGosVil9LEIuY3JlYXRlRGlmZmllSGVsbG1hbj1CLkRpZmZpZUhlbGxtYW49ZnVuY3Rpb24geihqLFYsRyxXKXtyZXR1cm4gSy5pc0J1ZmZlcihWKXx8'@;
put 'dm9pZCAwPT09RVtWXT96KGosImJpbmFyeSIsVixHKTooVj1WfHwiYmluYXJ5IixXPVd8fCJiaW5hcnkiLEc9R3x8bmV3IEsoWzJdKSxLLmlzQnVmZmVyKEcpfHwoRz1uZXcgSyhHLFcpKSwibnVtYmVyIj09dHlwZW9mIGo/bmV3IFIoSihqLEcpLEcsITApOihLLmlzQnVmZmVyKGopfHwoaj1u'@;
put 'ZXcgSyhqLFYpKSxuZXcgUihqLEcsITApKSl9fSw3NDI2OihILEIsTCk9Pnt2YXIgSz1MKDg3NjQpLkJ1ZmZlcixKPUwoMzYyMCksST1uZXcoTCgzMDQ3KSksUj1uZXcgSigyNCksRT1uZXcgSigxMSksej1uZXcgSigxMCksaj1uZXcgSigzKSxWPW5ldyBKKDcpLEc9TCgzNTkwKSxXPUwoMTc5'@;
put 'OCk7ZnVuY3Rpb24gVShsZSxkZSl7cmV0dXJuIGRlPWRlfHwidXRmOCIsSy5pc0J1ZmZlcihsZSl8fChsZT1uZXcgSyhsZSxkZSkpLHRoaXMuX3B1Yj1uZXcgSihsZSksdGhpc31mdW5jdGlvbiBxKGxlLGRlKXtyZXR1cm4gZGU9ZGV8fCJ1dGY4IixLLmlzQnVmZmVyKGxlKXx8KGxlPW5ldyBL'@;
put 'KGxlLGRlKSksdGhpcy5fcHJpdj1uZXcgSihsZSksdGhpc31ILmV4cG9ydHM9bmU7dmFyIHRlPXt9O2Z1bmN0aW9uIG5lKGxlLGRlLHVlKXt0aGlzLnNldEdlbmVyYXRvcihkZSksdGhpcy5fX3ByaW1lPW5ldyBKKGxlKSx0aGlzLl9wcmltZT1KLm1vbnQodGhpcy5fX3ByaW1lKSx0aGlzLl9w'@;
put 'cmltZUxlbj1sZS5sZW5ndGgsdGhpcy5fcHViPXZvaWQgMCx0aGlzLl9wcml2PXZvaWQgMCx0aGlzLl9wcmltZUNvZGU9dm9pZCAwLHVlPyh0aGlzLnNldFB1YmxpY0tleT1VLHRoaXMuc2V0UHJpdmF0ZUtleT1xKTp0aGlzLl9wcmltZUNvZGU9OH1mdW5jdGlvbiBpZShsZSxkZSl7dmFyIHVl'@;
put 'PW5ldyBLKGxlLnRvQXJyYXkoKSk7cmV0dXJuIGRlP3VlLnRvU3RyaW5nKGRlKTp1ZX1PYmplY3QuZGVmaW5lUHJvcGVydHkobmUucHJvdG90eXBlLCJ2ZXJpZnlFcnJvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIm51bWJlciIhPXR5cGVvZiB0aGlzLl9wcmltZUNv'@;
put 'ZGUmJih0aGlzLl9wcmltZUNvZGU9ZnVuY3Rpb24obGUsZGUpe3ZhciB1ZT1kZS50b1N0cmluZygiaGV4IiksY2U9W3VlLGxlLnRvU3RyaW5nKDE2KV0uam9pbigiXyIpO2lmKGNlIGluIHRlKXJldHVybiB0ZVtjZV07dmFyIFksYj0wO2lmKGxlLmlzRXZlbigpfHwhRy5zaW1wbGVTaWV2ZXx8'@;
put 'IUcuZmVybWF0VGVzdChsZSl8fCFJLnRlc3QobGUpKXJldHVybiBiKz0xLHRlW2NlXT1iKz0iMDIiPT09dWV8fCIwNSI9PT11ZT84OjQsYjtzd2l0Y2goSS50ZXN0KGxlLnNocm4oMSkpfHwoYis9MiksdWUpe2Nhc2UiMDIiOmxlLm1vZChSKS5jbXAoRSkmJihiKz04KTticmVhaztjYXNlIjA1'@;
put 'IjooWT1sZS5tb2QoeikpLmNtcChqKSYmWS5jbXAoVikmJihiKz04KTticmVhaztkZWZhdWx0OmIrPTR9cmV0dXJuIHRlW2NlXT1iLGJ9KHRoaXMuX19wcmltZSx0aGlzLl9fZ2VuKSksdGhpcy5fcHJpbWVDb2RlfX0pLG5lLnByb3RvdHlwZS5nZW5lcmF0ZUtleXM9ZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gdGhpcy5fcHJpdnx8KHRoaXMuX3ByaXY9bmV3IEooVyh0aGlzLl9wcmltZUxlbikpKSx0aGlzLl9wdWI9dGhpcy5fZ2VuLnRvUmVkKHRoaXMuX3ByaW1lKS5yZWRQb3codGhpcy5fcHJpdikuZnJvbVJlZCgpLHRoaXMuZ2V0UHVibGljS2V5KCl9LG5lLnByb3RvdHlwZS5jb21wdXRlU2Vj'@;
put 'cmV0PWZ1bmN0aW9uKGxlKXt2YXIgZGU9KGxlPShsZT1uZXcgSihsZSkpLnRvUmVkKHRoaXMuX3ByaW1lKSkucmVkUG93KHRoaXMuX3ByaXYpLmZyb21SZWQoKSx1ZT1uZXcgSyhkZS50b0FycmF5KCkpLGNlPXRoaXMuZ2V0UHJpbWUoKTtpZih1ZS5sZW5ndGg8Y2UubGVuZ3RoKXt2YXIgWT1u'@;
put 'ZXcgSyhjZS5sZW5ndGgtdWUubGVuZ3RoKTtZLmZpbGwoMCksdWU9Sy5jb25jYXQoW1ksdWVdKX1yZXR1cm4gdWV9LG5lLnByb3RvdHlwZS5nZXRQdWJsaWNLZXk9ZnVuY3Rpb24obGUpe3JldHVybiBpZSh0aGlzLl9wdWIsbGUpfSxuZS5wcm90b3R5cGUuZ2V0UHJpdmF0ZUtleT1mdW5jdGlv'@;
put 'bihsZSl7cmV0dXJuIGllKHRoaXMuX3ByaXYsbGUpfSxuZS5wcm90b3R5cGUuZ2V0UHJpbWU9ZnVuY3Rpb24obGUpe3JldHVybiBpZSh0aGlzLl9fcHJpbWUsbGUpfSxuZS5wcm90b3R5cGUuZ2V0R2VuZXJhdG9yPWZ1bmN0aW9uKGxlKXtyZXR1cm4gaWUodGhpcy5fZ2VuLGxlKX0sbmUucHJv'@;
put 'dG90eXBlLnNldEdlbmVyYXRvcj1mdW5jdGlvbihsZSxkZSl7cmV0dXJuIGRlPWRlfHwidXRmOCIsSy5pc0J1ZmZlcihsZSl8fChsZT1uZXcgSyhsZSxkZSkpLHRoaXMuX19nZW49bGUsdGhpcy5fZ2VuPW5ldyBKKGxlKSx0aGlzfX0sMzU5MDooSCxCLEwpPT57dmFyIEs9TCgxNzk4KTtILmV4'@;
put 'cG9ydHM9bGUsbGUuc2ltcGxlU2lldmU9bmUsbGUuZmVybWF0VGVzdD1pZTt2YXIgSj1MKDM2MjApLEk9bmV3IEooMjQpLFI9bmV3KEwoMzA0NykpLEU9bmV3IEooMSksej1uZXcgSigyKSxqPW5ldyBKKDUpLFY9KG5ldyBKKDE2KSxuZXcgSig4KSxuZXcgSigxMCkpLEc9bmV3IEooMyksVz0o'@;
put 'bmV3IEooNyksbmV3IEooMTEpKSxVPW5ldyBKKDQpLHE9KG5ldyBKKDEyKSxudWxsKTtmdW5jdGlvbiBuZShkZSl7Zm9yKHZhciB1ZT1mdW5jdGlvbiB0ZSgpe2lmKG51bGwhPT1xKXJldHVybiBxO3ZhciBkZT1bXTtkZVswXT0yO2Zvcih2YXIgdWU9MSxjZT0zO2NlPDEwNDg1NzY7Y2UrPTIp'@;
put 'e2Zvcih2YXIgWT1NYXRoLmNlaWwoTWF0aC5zcXJ0KGNlKSksYj0wO2I8dWUmJmRlW2JdPD1ZJiZjZSVkZVtiXSE9MDtiKyspO3VlIT09YiYmZGVbYl08PVl8fChkZVt1ZSsrXT1jZSl9cmV0dXJuIHE9ZGUsZGV9KCksY2U9MDtjZTx1ZS5sZW5ndGg7Y2UrKylpZigwPT09ZGUubW9kbih1ZVtj'@;
put 'ZV0pKXJldHVybiAwPT09ZGUuY21wbih1ZVtjZV0pO3JldHVybiEwfWZ1bmN0aW9uIGllKGRlKXt2YXIgdWU9Si5tb250KGRlKTtyZXR1cm4gMD09PXoudG9SZWQodWUpLnJlZFBvdyhkZS5zdWJuKDEpKS5mcm9tUmVkKCkuY21wbigxKX1mdW5jdGlvbiBsZShkZSx1ZSl7aWYoZGU8MTYpcmV0'@;
put 'dXJuIG5ldyBKKDI9PT11ZXx8NT09PXVlP1sxNDAsMTIzXTpbMTQwLDM5XSk7dmFyIGNlLFk7Zm9yKHVlPW5ldyBKKHVlKTs7KXtmb3IoY2U9bmV3IEooSyhNYXRoLmNlaWwoZGUvOCkpKTtjZS5iaXRMZW5ndGgoKT5kZTspY2UuaXNocm4oMSk7aWYoY2UuaXNFdmVuKCkmJmNlLmlhZGQoRSks'@;
put 'Y2UudGVzdG4oMSl8fGNlLmlhZGQoeiksdWUuY21wKHopKXtpZighdWUuY21wKGopKWZvcig7Y2UubW9kKFYpLmNtcChHKTspY2UuaWFkZChVKX1lbHNlIGZvcig7Y2UubW9kKEkpLmNtcChXKTspY2UuaWFkZChVKTtpZihuZShZPWNlLnNocm4oMSkpJiZuZShjZSkmJmllKFkpJiZpZShjZSkm'@;
put 'JlIudGVzdChZKSYmUi50ZXN0KGNlKSlyZXR1cm4gY2V9fX0sMzYyMDpmdW5jdGlvbihILEIsTCl7IWZ1bmN0aW9uKEssSil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEkoZyxDKXtpZighZyl0aHJvdyBuZXcgRXJyb3IoQ3x8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBSKGcsQyl7Zy5z'@;
put 'dXBlcl89Qzt2YXIgTT1mdW5jdGlvbigpe307TS5wcm90b3R5cGU9Qy5wcm90b3R5cGUsZy5wcm90b3R5cGU9bmV3IE0sZy5wcm90b3R5cGUuY29uc3RydWN0b3I9Z31mdW5jdGlvbiBFKGcsQyxNKXtpZihFLmlzQk4oZykpcmV0dXJuIGc7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVs'@;
put 'bCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PWcmJigibGUiIT09QyYmImJlIiE9PUN8fChNPUMsQz0xMCksdGhpcy5faW5pdChnfHwwLEN8fDEwLE18fCJiZSIpKX12YXIgejsib2JqZWN0Ij09dHlwZW9mIEs/Sy5leHBvcnRzPUU6Si5CTj1FLEUuQk49RSxFLndvcmRTaXpl'@;
put 'PTI2O3RyeXt6PXR5cGVvZiB3aW5kb3c8InUiJiZ2b2lkIDAhPT13aW5kb3cuQnVmZmVyP3dpbmRvdy5CdWZmZXI6TCg3NzQ4KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIGooZyxDKXt2YXIgTT1nLmNoYXJDb2RlQXQoQyk7cmV0dXJuIE0+PTY1JiZNPD03MD9NLTU1Ok0+PTk3JiZNPD0xMDI/'@;
put 'TS04NzpNLTQ4JjE1fWZ1bmN0aW9uIFYoZyxDLE0pe3ZhciB5PWooZyxNKTtyZXR1cm4gTS0xPj1DJiYoeXw9aihnLE0tMSk8PDQpLHl9ZnVuY3Rpb24gRyhnLEMsTSx5KXtmb3IodmFyIHA9MCxTPU1hdGgubWluKGcubGVuZ3RoLE0pLFE9QztRPFM7USsrKXt2YXIgcmU9Zy5jaGFyQ29kZUF0'@;
put 'KFEpLTQ4O3AqPXkscCs9cmU+PTQ5P3JlLTQ5KzEwOnJlPj0xNz9yZS0xNysxMDpyZX1yZXR1cm4gcH1FLmlzQk49ZnVuY3Rpb24oZyl7cmV0dXJuIGcgaW5zdGFuY2VvZiBFfHxudWxsIT09ZyYmIm9iamVjdCI9PXR5cGVvZiBnJiZnLmNvbnN0cnVjdG9yLndvcmRTaXplPT09RS53b3JkU2l6'@;
put 'ZSYmQXJyYXkuaXNBcnJheShnLndvcmRzKX0sRS5tYXg9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gZy5jbXAoQyk+MD9nOkN9LEUubWluPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIGcuY21wKEMpPDA/ZzpDfSxFLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihnLEMsTSl7aWYoIm51bWJlciI9PXR5cGVv'@;
put 'ZiBnKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKGcsQyxNKTtpZigib2JqZWN0Ij09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXRBcnJheShnLEMsTSk7ImhleCI9PT1DJiYoQz0xNiksSShDPT09KDB8QykmJkM+PTImJkM8PTM2KTt2YXIgeT0wOyItIj09PShnPWcudG9TdHJpbmcoKS5yZXBs'@;
put 'YWNlKC9ccysvZywiIikpWzBdJiYoeSsrLHRoaXMubmVnYXRpdmU9MSkseTxnLmxlbmd0aCYmKDE2PT09Qz90aGlzLl9wYXJzZUhleChnLHksTSk6KHRoaXMuX3BhcnNlQmFzZShnLEMseSksImxlIj09PU0mJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxDLE0pKSl9LEUucHJvdG90'@;
put 'eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKGcsQyxNKXtnPDAmJih0aGlzLm5lZ2F0aXZlPTEsZz0tZyksZzw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZ10sdGhpcy5sZW5ndGg9MSk6Zzw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQm'@;
put 'NjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihJKGc8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT1NJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksQyxNKX0sRS5wcm90b3R5'@;
put 'cGUuX2luaXRBcnJheT1mdW5jdGlvbihnLEMsTSl7aWYoSSgibnVtYmVyIj09dHlwZW9mIGcubGVuZ3RoKSxnLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChnLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBB'@;
put 'cnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciB5PTA7eTx0aGlzLmxlbmd0aDt5KyspdGhpcy53b3Jkc1t5XT0wO3ZhciBwLFMsUT0wO2lmKCJiZSI9PT1NKWZvcih5PWcubGVuZ3RoLTEscD0wO3k+PTA7eS09Myl0aGlzLndvcmRzW3BdfD0oUz1nW3ldfGdbeS0xXTw8OHxnW3ktMl08PDE2KTw8'@;
put 'USY2NzEwODg2Myx0aGlzLndvcmRzW3ArMV09Uz4+PjI2LVEmNjcxMDg4NjMsKFErPTI0KT49MjYmJihRLT0yNixwKyspO2Vsc2UgaWYoImxlIj09PU0pZm9yKHk9MCxwPTA7eTxnLmxlbmd0aDt5Kz0zKXRoaXMud29yZHNbcF18PShTPWdbeV18Z1t5KzFdPDw4fGdbeSsyXTw8MTYpPDxRJjY3'@;
put 'MTA4ODYzLHRoaXMud29yZHNbcCsxXT1TPj4+MjYtUSY2NzEwODg2MywoUSs9MjQpPj0yNiYmKFEtPTI2LHArKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKGcsQyxNKXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKGcubGVuZ3RoLUMpLzYpLHRo'@;
put 'aXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHk9MDt5PHRoaXMubGVuZ3RoO3krKyl0aGlzLndvcmRzW3ldPTA7dmFyIHAsUz0wLFE9MDtpZigiYmUiPT09TSlmb3IoeT1nLmxlbmd0aC0xO3k+PUM7eS09MilwPVYoZyxDLHkpPDxTLHRoaXMud29yZHNbUV18PTY3MTA4'@;
put 'ODYzJnAsUz49MTg/KFMtPTE4LHRoaXMud29yZHNbUSs9MV18PXA+Pj4yNik6Uys9ODtlbHNlIGZvcih5PShnLmxlbmd0aC1DKSUyPT0wP0MrMTpDO3k8Zy5sZW5ndGg7eSs9MilwPVYoZyxDLHkpPDxTLHRoaXMud29yZHNbUV18PTY3MTA4ODYzJnAsUz49MTg/KFMtPTE4LHRoaXMud29yZHNb'@;
put 'USs9MV18PXA+Pj4yNik6Uys9ODt0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oZyxDLE0pe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciB5PTAscD0xO3A8PTY3MTA4ODYzO3AqPUMpeSsrO3ktLSxwPXAvQ3wwO2Zvcih2YXIgUz1nLmxl'@;
put 'bmd0aC1NLFE9UyV5LHJlPU1hdGgubWluKFMsUy1RKStNLGZlPTAsbWU9TTttZTxyZTttZSs9eSlmZT1HKGcsbWUsbWUreSxDKSx0aGlzLmltdWxuKHApLHRoaXMud29yZHNbMF0rZmU8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9ZmU6dGhpcy5faWFkZG4oZmUpO2lmKDAhPT1RKXt2YXIga2U9'@;
put 'MTtmb3IoZmU9RyhnLG1lLGcubGVuZ3RoLEMpLG1lPTA7bWU8UTttZSsrKWtlKj1DO3RoaXMuaW11bG4oa2UpLHRoaXMud29yZHNbMF0rZmU8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9ZmU6dGhpcy5faWFkZG4oZmUpfXRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuY29weT1mdW5jdGlvbihn'@;
put 'KXtnLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspZy53b3Jkc1tDXT10aGlzLndvcmRzW0NdO2cubGVuZ3RoPXRoaXMubGVuZ3RoLGcubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxnLnJlZD10aGlzLnJlZH0sRS5wcm90b3R5cGUuY2xv'@;
put 'bmU9ZnVuY3Rpb24oKXt2YXIgZz1uZXcgRShudWxsKTtyZXR1cm4gdGhpcy5jb3B5KGcpLGd9LEUucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LEUucHJvdG90eXBlLnN0cmlw'@;
put 'PWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sRS5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRo'@;
put 'aXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LEUucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIFc9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAi'@;
put 'LCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAw'@;
put 'MDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAw'@;
put 'MDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sVT1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxxPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4Mjgx'@;
put 'MjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2'@;
put 'MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIHRlKGcsQyxNKXtNLm5lZ2F0aXZlPUMubmVnYXRpdmVeZy5uZWdhdGl2ZTt2YXIgeT1nLmxlbmd0'@;
put 'aCtDLmxlbmd0aHwwO00ubGVuZ3RoPXkseT15LTF8MDt2YXIgcD0wfGcud29yZHNbMF0sUz0wfEMud29yZHNbMF0sUT1wKlMsZmU9US82NzEwODg2NHwwO00ud29yZHNbMF09NjcxMDg4NjMmUTtmb3IodmFyIG1lPTE7bWU8eTttZSsrKXtmb3IodmFyIGtlPWZlPj4+MjYsVGU9NjcxMDg4NjMm'@;
put 'ZmUsUGU9TWF0aC5taW4obWUsQy5sZW5ndGgtMSksRmU9TWF0aC5tYXgoMCxtZS1nLmxlbmd0aCsxKTtGZTw9UGU7RmUrKylrZSs9KFE9KHA9MHxnLndvcmRzW21lLUZlfDBdKSooUz0wfEMud29yZHNbRmVdKStUZSkvNjcxMDg4NjR8MCxUZT02NzEwODg2MyZRO00ud29yZHNbbWVdPTB8VGUs'@;
put 'ZmU9MHxrZX1yZXR1cm4gMCE9PWZlP00ud29yZHNbbWVdPTB8ZmU6TS5sZW5ndGgtLSxNLnN0cmlwKCl9RS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZyxDKXt2YXIgTTtpZihDPTB8Q3x8MSwxNj09PShnPWd8fDEwKXx8ImhleCI9PT1nKXtNPSIiO2Zvcih2YXIgeT0wLHA9MCxTPTA7'@;
put 'Uzx0aGlzLmxlbmd0aDtTKyspe3ZhciBRPXRoaXMud29yZHNbU10scmU9KDE2Nzc3MjE1JihRPDx5fHApKS50b1N0cmluZygxNik7TT0wIT0ocD1RPj4+MjQteSYxNjc3NzIxNSl8fFMhPT10aGlzLmxlbmd0aC0xP1dbNi1yZS5sZW5ndGhdK3JlK006cmUrTSwoeSs9Mik+PTI2JiYoeS09MjYs'@;
put 'Uy0tKX1mb3IoMCE9PXAmJihNPXAudG9TdHJpbmcoMTYpK00pO00ubGVuZ3RoJUMhPTA7KU09IjAiK007cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoTT0iLSIrTSksTX1pZihnPT09KDB8ZykmJmc+PTImJmc8PTM2KXt2YXIgZmU9VVtnXSxtZT1xW2ddO009IiI7dmFyIGtlPXRoaXMuY2xv'@;
put 'bmUoKTtmb3Ioa2UubmVnYXRpdmU9MDsha2UuaXNaZXJvKCk7KXt2YXIgVGU9a2UubW9kbihtZSkudG9TdHJpbmcoZyk7TT0oa2U9a2UuaWRpdm4obWUpKS5pc1plcm8oKT9UZStNOldbZmUtVGUubGVuZ3RoXStUZStNfWZvcih0aGlzLmlzWmVybygpJiYoTT0iMCIrTSk7TS5sZW5ndGglQyE9'@;
put 'MDspTT0iMCIrTTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihNPSItIitNKSxNfUkoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sRS5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgZz10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/'@;
put 'Zys9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2crPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZJKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJp'@;
put 'dHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tZzpnfSxFLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LEUucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIEkodm9pZCAwIT09eiksdGhpcy50b0FycmF5TGlrZSh6LGcsQyl9'@;
put 'LEUucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxnLEMpfSxFLnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihnLEMsTSl7dmFyIHk9dGhpcy5ieXRlTGVuZ3RoKCkscD1NfHxNYXRoLm1heCgxLHkpO0koeTw9cCwiYnl0'@;
put 'ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLEkocD4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIFMsUSxyZT0ibGUiPT09QyxmZT1uZXcgZyhwKSxtZT10aGlzLmNsb25lKCk7aWYocmUpe2ZvcihRPTA7IW1lLmlzWmVybygpO1Er'@;
put 'KylTPW1lLmFuZGxuKDI1NSksbWUuaXVzaHJuKDgpLGZlW1FdPVM7Zm9yKDtRPHA7USsrKWZlW1FdPTB9ZWxzZXtmb3IoUT0wO1E8cC15O1ErKylmZVtRXT0wO2ZvcihRPTA7IW1lLmlzWmVybygpO1ErKylTPW1lLmFuZGxuKDI1NSksbWUuaXVzaHJuKDgpLGZlW3AtUS0xXT1TfXJldHVybiBm'@;
put 'ZX0sRS5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKGcpe3JldHVybiAzMi1NYXRoLmNsejMyKGcpfTpmdW5jdGlvbihnKXt2YXIgQz1nLE09MDtyZXR1cm4gQz49NDA5NiYmKE0rPTEzLEM+Pj49MTMpLEM+PTY0JiYoTSs9NyxDPj4+PTcpLEM+PTgmJihNKz00LEM+'@;
put 'Pj49NCksQz49MiYmKE0rPTIsQz4+Pj0yKSxNK0N9LEUucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihnKXtpZigwPT09ZylyZXR1cm4gMjY7dmFyIEM9ZyxNPTA7cmV0dXJuISg4MTkxJkMpJiYoTSs9MTMsQz4+Pj0xMyksISgxMjcmQykmJihNKz03LEM+Pj49NyksISgxNSZDKSYmKE0r'@;
put 'PTQsQz4+Pj00KSwhKDMmQykmJihNKz0yLEM+Pj49MiksISgxJkMpJiZNKyssTX0sRS5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIEM9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrQ30sRS5wcm90'@;
put 'b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgZz0wLEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl7dmFyIE09dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tDXSk7aWYoZys9TSwyNiE9PU0pYnJlYWt9cmV0dXJuIGd9LEUucHJvdG90eXBl'@;
put 'LmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LEUucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihnKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LEUucHJv'@;
put 'dG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnRlc3RuKGctMSk/dGhpcy5ub3RuKGcpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LEUucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxFLnByb3RvdHlwZS5uZWc9'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sRS5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sRS5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGcubGVu'@;
put 'Z3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBDPTA7QzxnLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT10aGlzLndvcmRzW0NdfGcud29yZHNbQ107cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKGcpe3JldHVybiBJKDA9PSh0aGlz'@;
put 'Lm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1b3IoZyl9LEUucHJvdG90eXBlLm9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKGcpOmcuY2xvbmUoKS5pb3IodGhpcyl9LEUucHJvdG90eXBlLnVvcj1mdW5jdGlvbihnKXtyZXR1'@;
put 'cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoZyk6Zy5jbG9uZSgpLml1b3IodGhpcyl9LEUucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKGcpe3ZhciBDO0M9dGhpcy5sZW5ndGg+Zy5sZW5ndGg/Zzp0aGlzO2Zvcih2YXIgTT0wO008Qy5sZW5ndGg7TSsrKXRoaXMu'@;
put 'd29yZHNbTV09dGhpcy53b3Jkc1tNXSZnLndvcmRzW01dO3JldHVybiB0aGlzLmxlbmd0aD1DLmxlbmd0aCx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09KHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoZyl9LEUucHJv'@;
put 'dG90eXBlLmFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoZyk6Zy5jbG9uZSgpLmlhbmQodGhpcyl9LEUucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5p'@;
put 'dWFuZChnKTpnLmNsb25lKCkuaXVhbmQodGhpcyl9LEUucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKGcpe3ZhciBDLE07dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KEM9dGhpcyxNPWcpOihDPWcsTT10aGlzKTtmb3IodmFyIHk9MDt5PE0ubGVuZ3RoO3krKyl0aGlzLndvcmRzW3ldPUMud29yZHNb'@;
put 'eV1eTS53b3Jkc1t5XTtpZih0aGlzIT09Qylmb3IoO3k8Qy5sZW5ndGg7eSsrKXRoaXMud29yZHNbeV09Qy53b3Jkc1t5XTtyZXR1cm4gdGhpcy5sZW5ndGg9Qy5sZW5ndGgsdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKGcpe3JldHVybiBJKDA9PSh0aGlzLm5lZ2F0'@;
put 'aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1eG9yKGcpfSxFLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKGcpOmcuY2xvbmUoKS5peG9yKHRoaXMpfSxFLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKGcpe3JldHVy'@;
put 'biB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IoZyk6Zy5jbG9uZSgpLml1eG9yKHRoaXMpfSxFLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIEM9MHxNYXRoLmNlaWwoZy8yNiksTT1nJTI2O3RoaXMuX2V4'@;
put 'cGFuZChDKSxNPjAmJkMtLTtmb3IodmFyIHk9MDt5PEM7eSsrKXRoaXMud29yZHNbeV09NjcxMDg4NjMmfnRoaXMud29yZHNbeV07cmV0dXJuIE0+MCYmKHRoaXMud29yZHNbeV09fnRoaXMud29yZHNbeV0mNjcxMDg4NjM+PjI2LU0pLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUubm90bj1m'@;
put 'dW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKGcpfSxFLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKGcsQyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBNPWcvMjZ8MCx5PWclMjY7cmV0dXJuIHRoaXMuX2V4cGFuZChNKzEpLHRoaXMud29yZHNbTV09Qz90aGlz'@;
put 'LndvcmRzW01dfDE8PHk6dGhpcy53b3Jkc1tNXSZ+KDE8PHkpLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihnKXt2YXIgQyxNLHk7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsQz10aGlzLmlzdWIoZyks'@;
put 'dGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gZy5uZWdhdGl2ZT0wLEM9dGhpcy5pc3ViKGcpLGcubmVnYXRpdmU9MSxDLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPmcubGVuZ3RoPyhNPXRoaXMseT1n'@;
put 'KTooTT1nLHk9dGhpcyk7Zm9yKHZhciBwPTAsUz0wO1M8eS5sZW5ndGg7UysrKXRoaXMud29yZHNbU109NjcxMDg4NjMmKEM9KDB8TS53b3Jkc1tTXSkrKDB8eS53b3Jkc1tTXSkrcCkscD1DPj4+MjY7Zm9yKDswIT09cCYmUzxNLmxlbmd0aDtTKyspdGhpcy53b3Jkc1tTXT02NzEwODg2MyYo'@;
put 'Qz0oMHxNLndvcmRzW1NdKStwKSxwPUM+Pj4yNjtpZih0aGlzLmxlbmd0aD1NLmxlbmd0aCwwIT09cCl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1wLHRoaXMubGVuZ3RoKys7ZWxzZSBpZihNIT09dGhpcylmb3IoO1M8TS5sZW5ndGg7UysrKXRoaXMud29yZHNbU109TS53b3Jkc1tTXTtyZXR1'@;
put 'cm4gdGhpc30sRS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcpe3ZhciBDO3JldHVybiAwIT09Zy5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KGcubmVnYXRpdmU9MCxDPXRoaXMuc3ViKGcpLGcubmVnYXRpdmVePTEsQyk6MD09PWcubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0'@;
put 'aGlzLm5lZ2F0aXZlPTAsQz1nLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsQyk6dGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQoZyk6Zy5jbG9uZSgpLmlhZGQodGhpcyl9LEUucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyl7aWYoMCE9PWcubmVnYXRpdmUpe2cubmVn'@;
put 'YXRpdmU9MDt2YXIgQz10aGlzLmlhZGQoZyk7cmV0dXJuIGcubmVnYXRpdmU9MSxDLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBNLHkscD10aGlz'@;
put 'LmNtcChnKTtpZigwPT09cClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7cD4wPyhNPXRoaXMseT1nKTooTT1nLHk9dGhpcyk7Zm9yKHZhciBTPTAsUT0wO1E8eS5sZW5ndGg7USsrKVM9KEM9KDB8TS53b3Jkc1tRXSktKDB8eS53b3Jk'@;
put 'c1tRXSkrUyk+PjI2LHRoaXMud29yZHNbUV09NjcxMDg4NjMmQztmb3IoOzAhPT1TJiZRPE0ubGVuZ3RoO1ErKylTPShDPSgwfE0ud29yZHNbUV0pK1MpPj4yNix0aGlzLndvcmRzW1FdPTY3MTA4ODYzJkM7aWYoMD09PVMmJlE8TS5sZW5ndGgmJk0hPT10aGlzKWZvcig7UTxNLmxlbmd0aDtR'@;
put 'KyspdGhpcy53b3Jkc1tRXT1NLndvcmRzW1FdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxRKSxNIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3Vi'@;
put 'KGcpfTt2YXIgbmU9ZnVuY3Rpb24oZyxDLE0pe3ZhciB5LHAsUyxRPWcud29yZHMscmU9Qy53b3JkcyxmZT1NLndvcmRzLG1lPTAsa2U9MHxRWzBdLFRlPTgxOTEma2UsUGU9a2U+Pj4xMyxGZT0wfFFbMV0sTmU9ODE5MSZGZSxMZT1GZT4+PjEzLEJlPTB8UVsyXSxIZT04MTkxJkJlLFFlPUJl'@;
put 'Pj4+MTMsbXQ9MHxRWzNdLEtlPTgxOTEmbXQsd2U9bXQ+Pj4xMyxJZT0wfFFbNF0sT2U9ODE5MSZJZSxldD1JZT4+PjEzLG50PTB8UVs1XSxxZT04MTkxJm50LGh0PW50Pj4+MTMsRWU9MHxRWzZdLERlPTgxOTEmRWUsJGU9RWU+Pj4xMyxhdD0wfFFbN10sY3Q9ODE5MSZhdCxPdD1hdD4+PjEz'@;
put 'LFB0PTB8UVs4XSxBdD04MTkxJlB0LEp0PVB0Pj4+MTMsbW49MHxRWzldLE50PTgxOTEmbW4sYm49bW4+Pj4xMyxHbj0wfHJlWzBdLG9uPTgxOTEmR24sJG49R24+Pj4xMyxObj0wfHJlWzFdLHB0PTgxOTEmTm4scG49Tm4+Pj4xMyxobj0wfHJlWzJdLEN0PTgxOTEmaG4sZW49aG4+Pj4xMyxf'@;
put 'dD0wfHJlWzNdLFZ0PTgxOTEmX3QsX249X3Q+Pj4xMyxvdD0wfHJlWzRdLEl0PTgxOTEmb3Qsbm49b3Q+Pj4xMyxEdD0wfHJlWzVdLHZ0PTgxOTEmRHQsR3Q9RHQ+Pj4xMyxMbj0wfHJlWzZdLHp0PTgxOTEmTG4sTW49TG4+Pj4xMyxUbj0wfHJlWzddLHNuPTgxOTEmVG4sQm49VG4+Pj4xMyxG'@;
put 'bj0wfHJlWzhdLHF0PTgxOTEmRm4sSG49Rm4+Pj4xMyxpaT0wfHJlWzldLGNuPTgxOTEmaWksam49aWk+Pj4xMztNLm5lZ2F0aXZlPWcubmVnYXRpdmVeQy5uZWdhdGl2ZSxNLmxlbmd0aD0xOTt2YXIgWHI9KG1lKyh5PU1hdGguaW11bChUZSxvbikpfDApKygoODE5MSYocD0ocD1NYXRoLmlt'@;
put 'dWwoVGUsJG4pKStNYXRoLmltdWwoUGUsb24pfDApKTw8MTMpfDA7bWU9KChTPU1hdGguaW11bChQZSwkbikpKyhwPj4+MTMpfDApKyhYcj4+PjI2KXwwLFhyJj02NzEwODg2Myx5PU1hdGguaW11bChOZSxvbikscD0ocD1NYXRoLmltdWwoTmUsJG4pKStNYXRoLmltdWwoTGUsb24pfDAsUz1N'@;
put 'YXRoLmltdWwoTGUsJG4pO3ZhciB2aT0obWUrKHk9eStNYXRoLmltdWwoVGUscHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChUZSxwbil8MCkrTWF0aC5pbXVsKFBlLHB0KXwwKSk8PDEzKXwwO21lPSgoUz1TK01hdGguaW11bChQZSxwbil8MCkrKHA+Pj4xMyl8MCkrKHZpPj4+'@;
put 'MjYpfDAsdmkmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKEhlLG9uKSxwPShwPU1hdGguaW11bChIZSwkbikpK01hdGguaW11bChRZSxvbil8MCxTPU1hdGguaW11bChRZSwkbikseT15K01hdGguaW11bChOZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKE5lLHBuKXwwKStNYXRoLmltdWwoTGUscHQp'@;
put 'fDAsUz1TK01hdGguaW11bChMZSxwbil8MDt2YXIgRXI9KG1lKyh5PXkrTWF0aC5pbXVsKFRlLEN0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoVGUsZW4pfDApK01hdGguaW11bChQZSxDdCl8MCkpPDwxMyl8MDttZT0oKFM9UytNYXRoLmltdWwoUGUsZW4pfDApKyhwPj4+MTMp'@;
put 'fDApKyhFcj4+PjI2KXwwLEVyJj02NzEwODg2Myx5PU1hdGguaW11bChLZSxvbikscD0ocD1NYXRoLmltdWwoS2UsJG4pKStNYXRoLmltdWwod2Usb24pfDAsUz1NYXRoLmltdWwod2UsJG4pLHk9eStNYXRoLmltdWwoSGUscHQpfDAscD0ocD1wK01hdGguaW11bChIZSxwbil8MCkrTWF0aC5p'@;
put 'bXVsKFFlLHB0KXwwLFM9UytNYXRoLmltdWwoUWUscG4pfDAseT15K01hdGguaW11bChOZSxDdCl8MCxwPShwPXArTWF0aC5pbXVsKE5lLGVuKXwwKStNYXRoLmltdWwoTGUsQ3QpfDAsUz1TK01hdGguaW11bChMZSxlbil8MDt2YXIgWWk9KG1lKyh5PXkrTWF0aC5pbXVsKFRlLFZ0KXwwKXww'@;
put 'KSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoVGUsX24pfDApK01hdGguaW11bChQZSxWdCl8MCkpPDwxMyl8MDttZT0oKFM9UytNYXRoLmltdWwoUGUsX24pfDApKyhwPj4+MTMpfDApKyhZaT4+PjI2KXwwLFlpJj02NzEwODg2Myx5PU1hdGguaW11bChPZSxvbikscD0ocD1NYXRoLmltdWwo'@;
put 'T2UsJG4pKStNYXRoLmltdWwoZXQsb24pfDAsUz1NYXRoLmltdWwoZXQsJG4pLHk9eStNYXRoLmltdWwoS2UscHQpfDAscD0ocD1wK01hdGguaW11bChLZSxwbil8MCkrTWF0aC5pbXVsKHdlLHB0KXwwLFM9UytNYXRoLmltdWwod2UscG4pfDAseT15K01hdGguaW11bChIZSxDdCl8MCxwPShw'@;
put 'PXArTWF0aC5pbXVsKEhlLGVuKXwwKStNYXRoLmltdWwoUWUsQ3QpfDAsUz1TK01hdGguaW11bChRZSxlbil8MCx5PXkrTWF0aC5pbXVsKE5lLFZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoTmUsX24pfDApK01hdGguaW11bChMZSxWdCl8MCxTPVMrTWF0aC5pbXVsKExlLF9uKXwwO3ZhciBKcj0o'@;
put 'bWUrKHk9eStNYXRoLmltdWwoVGUsSXQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChUZSxubil8MCkrTWF0aC5pbXVsKFBlLEl0KXwwKSk8PDEzKXwwO21lPSgoUz1TK01hdGguaW11bChQZSxubil8MCkrKHA+Pj4xMyl8MCkrKEpyPj4+MjYpfDAsSnImPTY3MTA4ODYzLHk9TWF0'@;
put 'aC5pbXVsKHFlLG9uKSxwPShwPU1hdGguaW11bChxZSwkbikpK01hdGguaW11bChodCxvbil8MCxTPU1hdGguaW11bChodCwkbikseT15K01hdGguaW11bChPZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKE9lLHBuKXwwKStNYXRoLmltdWwoZXQscHQpfDAsUz1TK01hdGguaW11bChldCxwbil8'@;
put 'MCx5PXkrTWF0aC5pbXVsKEtlLEN0KXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsZW4pfDApK01hdGguaW11bCh3ZSxDdCl8MCxTPVMrTWF0aC5pbXVsKHdlLGVuKXwwLHk9eStNYXRoLmltdWwoSGUsVnQpfDAscD0ocD1wK01hdGguaW11bChIZSxfbil8MCkrTWF0aC5pbXVsKFFlLFZ0KXwwLFM9'@;
put 'UytNYXRoLmltdWwoUWUsX24pfDAseT15K01hdGguaW11bChOZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKE5lLG5uKXwwKStNYXRoLmltdWwoTGUsSXQpfDAsUz1TK01hdGguaW11bChMZSxubil8MDt2YXIgYW89KG1lKyh5PXkrTWF0aC5pbXVsKFRlLHZ0KXwwKXwwKSsoKDgxOTEmKHA9KHA9'@;
put 'cCtNYXRoLmltdWwoVGUsR3QpfDApK01hdGguaW11bChQZSx2dCl8MCkpPDwxMyl8MDttZT0oKFM9UytNYXRoLmltdWwoUGUsR3QpfDApKyhwPj4+MTMpfDApKyhhbz4+PjI2KXwwLGFvJj02NzEwODg2Myx5PU1hdGguaW11bChEZSxvbikscD0ocD1NYXRoLmltdWwoRGUsJG4pKStNYXRoLmlt'@;
put 'dWwoJGUsb24pfDAsUz1NYXRoLmltdWwoJGUsJG4pLHk9eStNYXRoLmltdWwocWUscHQpfDAscD0ocD1wK01hdGguaW11bChxZSxwbil8MCkrTWF0aC5pbXVsKGh0LHB0KXwwLFM9UytNYXRoLmltdWwoaHQscG4pfDAseT15K01hdGguaW11bChPZSxDdCl8MCxwPShwPXArTWF0aC5pbXVsKE9l'@;
put 'LGVuKXwwKStNYXRoLmltdWwoZXQsQ3QpfDAsUz1TK01hdGguaW11bChldCxlbil8MCx5PXkrTWF0aC5pbXVsKEtlLFZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsX24pfDApK01hdGguaW11bCh3ZSxWdCl8MCxTPVMrTWF0aC5pbXVsKHdlLF9uKXwwLHk9eStNYXRoLmltdWwoSGUsSXQpfDAs'@;
put 'cD0ocD1wK01hdGguaW11bChIZSxubil8MCkrTWF0aC5pbXVsKFFlLEl0KXwwLFM9UytNYXRoLmltdWwoUWUsbm4pfDAseT15K01hdGguaW11bChOZSx2dCl8MCxwPShwPXArTWF0aC5pbXVsKE5lLEd0KXwwKStNYXRoLmltdWwoTGUsdnQpfDAsUz1TK01hdGguaW11bChMZSxHdCl8MDt2YXIg'@;
put 'QnI9KG1lKyh5PXkrTWF0aC5pbXVsKFRlLHp0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoVGUsTW4pfDApK01hdGguaW11bChQZSx6dCl8MCkpPDwxMyl8MDttZT0oKFM9UytNYXRoLmltdWwoUGUsTW4pfDApKyhwPj4+MTMpfDApKyhCcj4+PjI2KXwwLEJyJj02NzEwODg2Myx5'@;
put 'PU1hdGguaW11bChjdCxvbikscD0ocD1NYXRoLmltdWwoY3QsJG4pKStNYXRoLmltdWwoT3Qsb24pfDAsUz1NYXRoLmltdWwoT3QsJG4pLHk9eStNYXRoLmltdWwoRGUscHQpfDAscD0ocD1wK01hdGguaW11bChEZSxwbil8MCkrTWF0aC5pbXVsKCRlLHB0KXwwLFM9UytNYXRoLmltdWwoJGUs'@;
put 'cG4pfDAseT15K01hdGguaW11bChxZSxDdCl8MCxwPShwPXArTWF0aC5pbXVsKHFlLGVuKXwwKStNYXRoLmltdWwoaHQsQ3QpfDAsUz1TK01hdGguaW11bChodCxlbil8MCx5PXkrTWF0aC5pbXVsKE9lLFZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoT2UsX24pfDApK01hdGguaW11bChldCxWdCl8'@;
put 'MCxTPVMrTWF0aC5pbXVsKGV0LF9uKXwwLHk9eStNYXRoLmltdWwoS2UsSXQpfDAscD0ocD1wK01hdGguaW11bChLZSxubil8MCkrTWF0aC5pbXVsKHdlLEl0KXwwLFM9UytNYXRoLmltdWwod2Usbm4pfDAseT15K01hdGguaW11bChIZSx2dCl8MCxwPShwPXArTWF0aC5pbXVsKEhlLEd0KXww'@;
put 'KStNYXRoLmltdWwoUWUsdnQpfDAsUz1TK01hdGguaW11bChRZSxHdCl8MCx5PXkrTWF0aC5pbXVsKE5lLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoTmUsTW4pfDApK01hdGguaW11bChMZSx6dCl8MCxTPVMrTWF0aC5pbXVsKExlLE1uKXwwO3ZhciBKaT0obWUrKHk9eStNYXRoLmltdWwoVGUs'@;
put 'c24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChUZSxCbil8MCkrTWF0aC5pbXVsKFBlLHNuKXwwKSk8PDEzKXwwO21lPSgoUz1TK01hdGguaW11bChQZSxCbil8MCkrKHA+Pj4xMyl8MCkrKEppPj4+MjYpfDAsSmkmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKEF0LG9uKSxwPShwPU1h'@;
put 'dGguaW11bChBdCwkbikpK01hdGguaW11bChKdCxvbil8MCxTPU1hdGguaW11bChKdCwkbikseT15K01hdGguaW11bChjdCxwdCl8MCxwPShwPXArTWF0aC5pbXVsKGN0LHBuKXwwKStNYXRoLmltdWwoT3QscHQpfDAsUz1TK01hdGguaW11bChPdCxwbil8MCx5PXkrTWF0aC5pbXVsKERlLEN0'@;
put 'KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsZW4pfDApK01hdGguaW11bCgkZSxDdCl8MCxTPVMrTWF0aC5pbXVsKCRlLGVuKXwwLHk9eStNYXRoLmltdWwocWUsVnQpfDAscD0ocD1wK01hdGguaW11bChxZSxfbil8MCkrTWF0aC5pbXVsKGh0LFZ0KXwwLFM9UytNYXRoLmltdWwoaHQsX24pfDAs'@;
put 'eT15K01hdGguaW11bChPZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKE9lLG5uKXwwKStNYXRoLmltdWwoZXQsSXQpfDAsUz1TK01hdGguaW11bChldCxubil8MCx5PXkrTWF0aC5pbXVsKEtlLHZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsR3QpfDApK01hdGguaW11bCh3ZSx2dCl8MCxTPVMr'@;
put 'TWF0aC5pbXVsKHdlLEd0KXwwLHk9eStNYXRoLmltdWwoSGUsenQpfDAscD0ocD1wK01hdGguaW11bChIZSxNbil8MCkrTWF0aC5pbXVsKFFlLHp0KXwwLFM9UytNYXRoLmltdWwoUWUsTW4pfDAseT15K01hdGguaW11bChOZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKE5lLEJuKXwwKStNYXRo'@;
put 'LmltdWwoTGUsc24pfDAsUz1TK01hdGguaW11bChMZSxCbil8MDt2YXIgdG89KG1lKyh5PXkrTWF0aC5pbXVsKFRlLHF0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoVGUsSG4pfDApK01hdGguaW11bChQZSxxdCl8MCkpPDwxMyl8MDttZT0oKFM9UytNYXRoLmltdWwoUGUsSG4p'@;
put 'fDApKyhwPj4+MTMpfDApKyh0bz4+PjI2KXwwLHRvJj02NzEwODg2Myx5PU1hdGguaW11bChOdCxvbikscD0ocD1NYXRoLmltdWwoTnQsJG4pKStNYXRoLmltdWwoYm4sb24pfDAsUz1NYXRoLmltdWwoYm4sJG4pLHk9eStNYXRoLmltdWwoQXQscHQpfDAscD0ocD1wK01hdGguaW11bChBdCxw'@;
put 'bil8MCkrTWF0aC5pbXVsKEp0LHB0KXwwLFM9UytNYXRoLmltdWwoSnQscG4pfDAseT15K01hdGguaW11bChjdCxDdCl8MCxwPShwPXArTWF0aC5pbXVsKGN0LGVuKXwwKStNYXRoLmltdWwoT3QsQ3QpfDAsUz1TK01hdGguaW11bChPdCxlbil8MCx5PXkrTWF0aC5pbXVsKERlLFZ0KXwwLHA9'@;
put 'KHA9cCtNYXRoLmltdWwoRGUsX24pfDApK01hdGguaW11bCgkZSxWdCl8MCxTPVMrTWF0aC5pbXVsKCRlLF9uKXwwLHk9eStNYXRoLmltdWwocWUsSXQpfDAscD0ocD1wK01hdGguaW11bChxZSxubil8MCkrTWF0aC5pbXVsKGh0LEl0KXwwLFM9UytNYXRoLmltdWwoaHQsbm4pfDAseT15K01h'@;
put 'dGguaW11bChPZSx2dCl8MCxwPShwPXArTWF0aC5pbXVsKE9lLEd0KXwwKStNYXRoLmltdWwoZXQsdnQpfDAsUz1TK01hdGguaW11bChldCxHdCl8MCx5PXkrTWF0aC5pbXVsKEtlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsTW4pfDApK01hdGguaW11bCh3ZSx6dCl8MCxTPVMrTWF0aC5p'@;
put 'bXVsKHdlLE1uKXwwLHk9eStNYXRoLmltdWwoSGUsc24pfDAscD0ocD1wK01hdGguaW11bChIZSxCbil8MCkrTWF0aC5pbXVsKFFlLHNuKXwwLFM9UytNYXRoLmltdWwoUWUsQm4pfDAseT15K01hdGguaW11bChOZSxxdCl8MCxwPShwPXArTWF0aC5pbXVsKE5lLEhuKXwwKStNYXRoLmltdWwo'@;
put 'TGUscXQpfDAsUz1TK01hdGguaW11bChMZSxIbil8MDt2YXIgY289KG1lKyh5PXkrTWF0aC5pbXVsKFRlLGNuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoVGUsam4pfDApK01hdGguaW11bChQZSxjbil8MCkpPDwxMyl8MDttZT0oKFM9UytNYXRoLmltdWwoUGUsam4pfDApKyhw'@;
put 'Pj4+MTMpfDApKyhjbz4+PjI2KXwwLGNvJj02NzEwODg2Myx5PU1hdGguaW11bChOdCxwdCkscD0ocD1NYXRoLmltdWwoTnQscG4pKStNYXRoLmltdWwoYm4scHQpfDAsUz1NYXRoLmltdWwoYm4scG4pLHk9eStNYXRoLmltdWwoQXQsQ3QpfDAscD0ocD1wK01hdGguaW11bChBdCxlbil8MCkr'@;
put 'TWF0aC5pbXVsKEp0LEN0KXwwLFM9UytNYXRoLmltdWwoSnQsZW4pfDAseT15K01hdGguaW11bChjdCxWdCl8MCxwPShwPXArTWF0aC5pbXVsKGN0LF9uKXwwKStNYXRoLmltdWwoT3QsVnQpfDAsUz1TK01hdGguaW11bChPdCxfbil8MCx5PXkrTWF0aC5pbXVsKERlLEl0KXwwLHA9KHA9cCtN'@;
put 'YXRoLmltdWwoRGUsbm4pfDApK01hdGguaW11bCgkZSxJdCl8MCxTPVMrTWF0aC5pbXVsKCRlLG5uKXwwLHk9eStNYXRoLmltdWwocWUsdnQpfDAscD0ocD1wK01hdGguaW11bChxZSxHdCl8MCkrTWF0aC5pbXVsKGh0LHZ0KXwwLFM9UytNYXRoLmltdWwoaHQsR3QpfDAseT15K01hdGguaW11'@;
put 'bChPZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKE9lLE1uKXwwKStNYXRoLmltdWwoZXQsenQpfDAsUz1TK01hdGguaW11bChldCxNbil8MCx5PXkrTWF0aC5pbXVsKEtlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsQm4pfDApK01hdGguaW11bCh3ZSxzbil8MCxTPVMrTWF0aC5pbXVsKHdl'@;
put 'LEJuKXwwLHk9eStNYXRoLmltdWwoSGUscXQpfDAscD0ocD1wK01hdGguaW11bChIZSxIbil8MCkrTWF0aC5pbXVsKFFlLHF0KXwwLFM9UytNYXRoLmltdWwoUWUsSG4pfDA7dmFyIGxvPShtZSsoeT15K01hdGguaW11bChOZSxjbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKE5l'@;
put 'LGpuKXwwKStNYXRoLmltdWwoTGUsY24pfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKExlLGpuKXwwKSsocD4+PjEzKXwwKSsobG8+Pj4yNil8MCxsbyY9NjcxMDg4NjMseT1NYXRoLmltdWwoTnQsQ3QpLHA9KHA9TWF0aC5pbXVsKE50LGVuKSkrTWF0aC5pbXVsKGJuLEN0KXwwLFM9'@;
put 'TWF0aC5pbXVsKGJuLGVuKSx5PXkrTWF0aC5pbXVsKEF0LFZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoQXQsX24pfDApK01hdGguaW11bChKdCxWdCl8MCxTPVMrTWF0aC5pbXVsKEp0LF9uKXwwLHk9eStNYXRoLmltdWwoY3QsSXQpfDAscD0ocD1wK01hdGguaW11bChjdCxubil8MCkrTWF0aC5p'@;
put 'bXVsKE90LEl0KXwwLFM9UytNYXRoLmltdWwoT3Qsbm4pfDAseT15K01hdGguaW11bChEZSx2dCl8MCxwPShwPXArTWF0aC5pbXVsKERlLEd0KXwwKStNYXRoLmltdWwoJGUsdnQpfDAsUz1TK01hdGguaW11bCgkZSxHdCl8MCx5PXkrTWF0aC5pbXVsKHFlLHp0KXwwLHA9KHA9cCtNYXRoLmlt'@;
put 'dWwocWUsTW4pfDApK01hdGguaW11bChodCx6dCl8MCxTPVMrTWF0aC5pbXVsKGh0LE1uKXwwLHk9eStNYXRoLmltdWwoT2Usc24pfDAscD0ocD1wK01hdGguaW11bChPZSxCbil8MCkrTWF0aC5pbXVsKGV0LHNuKXwwLFM9UytNYXRoLmltdWwoZXQsQm4pfDAseT15K01hdGguaW11bChLZSxx'@;
put 'dCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLEhuKXwwKStNYXRoLmltdWwod2UscXQpfDAsUz1TK01hdGguaW11bCh3ZSxIbil8MDt2YXIgc289KG1lKyh5PXkrTWF0aC5pbXVsKEhlLGNuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoSGUsam4pfDApK01hdGguaW11bChRZSxjbil8'@;
put 'MCkpPDwxMyl8MDttZT0oKFM9UytNYXRoLmltdWwoUWUsam4pfDApKyhwPj4+MTMpfDApKyhzbz4+PjI2KXwwLHNvJj02NzEwODg2Myx5PU1hdGguaW11bChOdCxWdCkscD0ocD1NYXRoLmltdWwoTnQsX24pKStNYXRoLmltdWwoYm4sVnQpfDAsUz1NYXRoLmltdWwoYm4sX24pLHk9eStNYXRo'@;
put 'LmltdWwoQXQsSXQpfDAscD0ocD1wK01hdGguaW11bChBdCxubil8MCkrTWF0aC5pbXVsKEp0LEl0KXwwLFM9UytNYXRoLmltdWwoSnQsbm4pfDAseT15K01hdGguaW11bChjdCx2dCl8MCxwPShwPXArTWF0aC5pbXVsKGN0LEd0KXwwKStNYXRoLmltdWwoT3QsdnQpfDAsUz1TK01hdGguaW11'@;
put 'bChPdCxHdCl8MCx5PXkrTWF0aC5pbXVsKERlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsTW4pfDApK01hdGguaW11bCgkZSx6dCl8MCxTPVMrTWF0aC5pbXVsKCRlLE1uKXwwLHk9eStNYXRoLmltdWwocWUsc24pfDAscD0ocD1wK01hdGguaW11bChxZSxCbil8MCkrTWF0aC5pbXVsKGh0'@;
put 'LHNuKXwwLFM9UytNYXRoLmltdWwoaHQsQm4pfDAseT15K01hdGguaW11bChPZSxxdCl8MCxwPShwPXArTWF0aC5pbXVsKE9lLEhuKXwwKStNYXRoLmltdWwoZXQscXQpfDAsUz1TK01hdGguaW11bChldCxIbil8MDt2YXIgWGk9KG1lKyh5PXkrTWF0aC5pbXVsKEtlLGNuKXwwKXwwKSsoKDgx'@;
put 'OTEmKHA9KHA9cCtNYXRoLmltdWwoS2Usam4pfDApK01hdGguaW11bCh3ZSxjbil8MCkpPDwxMyl8MDttZT0oKFM9UytNYXRoLmltdWwod2Usam4pfDApKyhwPj4+MTMpfDApKyhYaT4+PjI2KXwwLFhpJj02NzEwODg2Myx5PU1hdGguaW11bChOdCxJdCkscD0ocD1NYXRoLmltdWwoTnQsbm4p'@;
put 'KStNYXRoLmltdWwoYm4sSXQpfDAsUz1NYXRoLmltdWwoYm4sbm4pLHk9eStNYXRoLmltdWwoQXQsdnQpfDAscD0ocD1wK01hdGguaW11bChBdCxHdCl8MCkrTWF0aC5pbXVsKEp0LHZ0KXwwLFM9UytNYXRoLmltdWwoSnQsR3QpfDAseT15K01hdGguaW11bChjdCx6dCl8MCxwPShwPXArTWF0'@;
put 'aC5pbXVsKGN0LE1uKXwwKStNYXRoLmltdWwoT3QsenQpfDAsUz1TK01hdGguaW11bChPdCxNbil8MCx5PXkrTWF0aC5pbXVsKERlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsQm4pfDApK01hdGguaW11bCgkZSxzbil8MCxTPVMrTWF0aC5pbXVsKCRlLEJuKXwwLHk9eStNYXRoLmltdWwo'@;
put 'cWUscXQpfDAscD0ocD1wK01hdGguaW11bChxZSxIbil8MCkrTWF0aC5pbXVsKGh0LHF0KXwwLFM9UytNYXRoLmltdWwoaHQsSG4pfDA7dmFyIHBvPShtZSsoeT15K01hdGguaW11bChPZSxjbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKE9lLGpuKXwwKStNYXRoLmltdWwoZXQs'@;
put 'Y24pfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKGV0LGpuKXwwKSsocD4+PjEzKXwwKSsocG8+Pj4yNil8MCxwbyY9NjcxMDg4NjMseT1NYXRoLmltdWwoTnQsdnQpLHA9KHA9TWF0aC5pbXVsKE50LEd0KSkrTWF0aC5pbXVsKGJuLHZ0KXwwLFM9TWF0aC5pbXVsKGJuLEd0KSx5PXkr'@;
put 'TWF0aC5pbXVsKEF0LHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoQXQsTW4pfDApK01hdGguaW11bChKdCx6dCl8MCxTPVMrTWF0aC5pbXVsKEp0LE1uKXwwLHk9eStNYXRoLmltdWwoY3Qsc24pfDAscD0ocD1wK01hdGguaW11bChjdCxCbil8MCkrTWF0aC5pbXVsKE90LHNuKXwwLFM9UytNYXRo'@;
put 'LmltdWwoT3QsQm4pfDAseT15K01hdGguaW11bChEZSxxdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLEhuKXwwKStNYXRoLmltdWwoJGUscXQpfDAsUz1TK01hdGguaW11bCgkZSxIbil8MDt2YXIgX3I9KG1lKyh5PXkrTWF0aC5pbXVsKHFlLGNuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRo'@;
put 'LmltdWwocWUsam4pfDApK01hdGguaW11bChodCxjbil8MCkpPDwxMyl8MDttZT0oKFM9UytNYXRoLmltdWwoaHQsam4pfDApKyhwPj4+MTMpfDApKyhfcj4+PjI2KXwwLF9yJj02NzEwODg2Myx5PU1hdGguaW11bChOdCx6dCkscD0ocD1NYXRoLmltdWwoTnQsTW4pKStNYXRoLmltdWwoYm4s'@;
put 'enQpfDAsUz1NYXRoLmltdWwoYm4sTW4pLHk9eStNYXRoLmltdWwoQXQsc24pfDAscD0ocD1wK01hdGguaW11bChBdCxCbil8MCkrTWF0aC5pbXVsKEp0LHNuKXwwLFM9UytNYXRoLmltdWwoSnQsQm4pfDAseT15K01hdGguaW11bChjdCxxdCl8MCxwPShwPXArTWF0aC5pbXVsKGN0LEhuKXww'@;
put 'KStNYXRoLmltdWwoT3QscXQpfDAsUz1TK01hdGguaW11bChPdCxIbil8MDt2YXIgRmk9KG1lKyh5PXkrTWF0aC5pbXVsKERlLGNuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoRGUsam4pfDApK01hdGguaW11bCgkZSxjbil8MCkpPDwxMyl8MDttZT0oKFM9UytNYXRoLmltdWwo'@;
put 'JGUsam4pfDApKyhwPj4+MTMpfDApKyhGaT4+PjI2KXwwLEZpJj02NzEwODg2Myx5PU1hdGguaW11bChOdCxzbikscD0ocD1NYXRoLmltdWwoTnQsQm4pKStNYXRoLmltdWwoYm4sc24pfDAsUz1NYXRoLmltdWwoYm4sQm4pLHk9eStNYXRoLmltdWwoQXQscXQpfDAscD0ocD1wK01hdGguaW11'@;
put 'bChBdCxIbil8MCkrTWF0aC5pbXVsKEp0LHF0KXwwLFM9UytNYXRoLmltdWwoSnQsSG4pfDA7dmFyIEhvPShtZSsoeT15K01hdGguaW11bChjdCxjbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKGN0LGpuKXwwKStNYXRoLmltdWwoT3QsY24pfDApKTw8MTMpfDA7bWU9KChTPVMr'@;
put 'TWF0aC5pbXVsKE90LGpuKXwwKSsocD4+PjEzKXwwKSsoSG8+Pj4yNil8MCxIbyY9NjcxMDg4NjMseT1NYXRoLmltdWwoTnQscXQpLHA9KHA9TWF0aC5pbXVsKE50LEhuKSkrTWF0aC5pbXVsKGJuLHF0KXwwLFM9TWF0aC5pbXVsKGJuLEhuKTt2YXIgZ2E9KG1lKyh5PXkrTWF0aC5pbXVsKEF0'@;
put 'LGNuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoQXQsam4pfDApK01hdGguaW11bChKdCxjbil8MCkpPDwxMyl8MDttZT0oKFM9UytNYXRoLmltdWwoSnQsam4pfDApKyhwPj4+MTMpfDApKyhnYT4+PjI2KXwwLGdhJj02NzEwODg2Mzt2YXIgbGE9KG1lKyh5PU1hdGguaW11bChO'@;
put 'dCxjbikpfDApKygoODE5MSYocD0ocD1NYXRoLmltdWwoTnQsam4pKStNYXRoLmltdWwoYm4sY24pfDApKTw8MTMpfDA7cmV0dXJuIG1lPSgoUz1NYXRoLmltdWwoYm4sam4pKSsocD4+PjEzKXwwKSsobGE+Pj4yNil8MCxsYSY9NjcxMDg4NjMsZmVbMF09WHIsZmVbMV09dmksZmVbMl09RXIs'@;
put 'ZmVbM109WWksZmVbNF09SnIsZmVbNV09YW8sZmVbNl09QnIsZmVbN109SmksZmVbOF09dG8sZmVbOV09Y28sZmVbMTBdPWxvLGZlWzExXT1zbyxmZVsxMl09WGksZmVbMTNdPXBvLGZlWzE0XT1fcixmZVsxNV09RmksZmVbMTZdPUhvLGZlWzE3XT1nYSxmZVsxOF09bGEsMCE9PW1lJiYoZmVb'@;
put 'MTldPW1lLE0ubGVuZ3RoKyspLE19O2Z1bmN0aW9uIGllKGcsQyxNKXtyZXR1cm4obmV3IGxlKS5tdWxwKGcsQyxNKX1mdW5jdGlvbiBsZShnLEMpe3RoaXMueD1nLHRoaXMueT1DfU1hdGguaW11bHx8KG5lPXRlKSxFLnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihnLEMpe3ZhciB5PXRoaXMu'@;
put 'bGVuZ3RoK2cubGVuZ3RoO3JldHVybiAxMD09PXRoaXMubGVuZ3RoJiYxMD09PWcubGVuZ3RoP25lKHRoaXMsZyxDKTp5PDYzP3RlKHRoaXMsZyxDKTp5PDEwMjQ/ZnVuY3Rpb24ocCxTLFEpe1EubmVnYXRpdmU9Uy5uZWdhdGl2ZV5wLm5lZ2F0aXZlLFEubGVuZ3RoPXAubGVuZ3RoK1MubGVu'@;
put 'Z3RoO2Zvcih2YXIgcmU9MCxmZT0wLG1lPTA7bWU8US5sZW5ndGgtMTttZSsrKXt2YXIga2U9ZmU7ZmU9MDtmb3IodmFyIFRlPTY3MTA4ODYzJnJlLFBlPU1hdGgubWluKG1lLFMubGVuZ3RoLTEpLEZlPU1hdGgubWF4KDAsbWUtcC5sZW5ndGgrMSk7RmU8PVBlO0ZlKyspe3ZhciBMZT0oMHxw'@;
put 'LndvcmRzW21lLUZlXSkqKDB8Uy53b3Jkc1tGZV0pLEJlPTY3MTA4ODYzJkxlO1RlPTY3MTA4ODYzJihCZT1CZStUZXwwKSxmZSs9KGtlPShrZT1rZSsoTGUvNjcxMDg4NjR8MCl8MCkrKEJlPj4+MjYpfDApPj4+MjYsa2UmPTY3MTA4ODYzfVEud29yZHNbbWVdPVRlLHJlPWtlLGtlPWZlfXJl'@;
put 'dHVybiAwIT09cmU/US53b3Jkc1ttZV09cmU6US5sZW5ndGgtLSxRLnN0cmlwKCl9KHRoaXMsZyxDKTppZSh0aGlzLGcsQyl9LGxlLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKGcpe2Zvcih2YXIgQz1uZXcgQXJyYXkoZyksTT1FLnByb3RvdHlwZS5fY291bnRCaXRzKGcpLTEseT0wO3k8'@;
put 'Zzt5KyspQ1t5XT10aGlzLnJldkJpbih5LE0sZyk7cmV0dXJuIEN9LGxlLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oZyxDLE0pe2lmKDA9PT1nfHxnPT09TS0xKXJldHVybiBnO2Zvcih2YXIgeT0wLHA9MDtwPEM7cCsrKXl8PSgxJmcpPDxDLXAtMSxnPj49MTtyZXR1cm4geX0sbGUucHJv'@;
put 'dG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oZyxDLE0seSxwLFMpe2Zvcih2YXIgUT0wO1E8UztRKyspeVtRXT1DW2dbUV1dLHBbUV09TVtnW1FdXX0sbGUucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihnLEMsTSx5LHAsUyl7dGhpcy5wZXJtdXRlKFMsZyxDLE0seSxwKTtmb3IodmFyIFE9'@;
put 'MTtRPHA7UTw8PTEpZm9yKHZhciByZT1RPDwxLGZlPU1hdGguY29zKDIqTWF0aC5QSS9yZSksbWU9TWF0aC5zaW4oMipNYXRoLlBJL3JlKSxrZT0wO2tlPHA7a2UrPXJlKWZvcih2YXIgVGU9ZmUsUGU9bWUsRmU9MDtGZTxRO0ZlKyspe3ZhciBOZT1NW2tlK0ZlXSxMZT15W2tlK0ZlXSxCZT1N'@;
put 'W2tlK0ZlK1FdLEhlPXlba2UrRmUrUV0sUWU9VGUqQmUtUGUqSGU7SGU9VGUqSGUrUGUqQmUsTVtrZStGZV09TmUrKEJlPVFlKSx5W2tlK0ZlXT1MZStIZSxNW2tlK0ZlK1FdPU5lLUJlLHlba2UrRmUrUV09TGUtSGUsRmUhPT1yZSYmKFFlPWZlKlRlLW1lKlBlLFBlPWZlKlBlK21lKlRlLFRl'@;
put 'PVFlKX19LGxlLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihnLEMpe3ZhciBNPTF8TWF0aC5tYXgoQyxnKSx5PTEmTSxwPTA7Zm9yKE09TS8yfDA7TTtNPj4+PTEpcCsrO3JldHVybiAxPDxwKzEreX0sbGUucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihnLEMsTSl7aWYoIShN'@;
put 'PD0xKSlmb3IodmFyIHk9MDt5PE0vMjt5Kyspe3ZhciBwPWdbeV07Z1t5XT1nW00teS0xXSxnW00teS0xXT1wLHA9Q1t5XSxDW3ldPS1DW00teS0xXSxDW00teS0xXT0tcH19LGxlLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oZyxDKXtmb3IodmFyIE09MCx5PTA7eTxDLzI7eSsr'@;
put 'KXt2YXIgcD04MTkyKk1hdGgucm91bmQoZ1syKnkrMV0vQykrTWF0aC5yb3VuZChnWzIqeV0vQykrTTtnW3ldPTY3MTA4ODYzJnAsTT1wPDY3MTA4ODY0PzA6cC82NzEwODg2NHwwfXJldHVybiBnfSxsZS5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihnLEMsTSx5KXtmb3IodmFyIHA9'@;
put 'MCxTPTA7UzxDO1MrKylNWzIqU109ODE5MSYocCs9MHxnW1NdKSxNWzIqUysxXT04MTkxJihwPj4+PTEzKSxwPj4+PTEzO2ZvcihTPTIqQztTPHk7KytTKU1bU109MDtJKDA9PT1wKSxJKDA9PSgtODE5MiZwKSl9LGxlLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKGcpe2Zvcih2YXIgQz1uZXcg'@;
put 'QXJyYXkoZyksTT0wO008ZztNKyspQ1tNXT0wO3JldHVybiBDfSxsZS5wcm90b3R5cGUubXVscD1mdW5jdGlvbihnLEMsTSl7dmFyIHk9Mip0aGlzLmd1ZXNzTGVuMTNiKGcubGVuZ3RoLEMubGVuZ3RoKSxwPXRoaXMubWFrZVJCVCh5KSxTPXRoaXMuc3R1Yih5KSxRPW5ldyBBcnJheSh5KSxy'@;
put 'ZT1uZXcgQXJyYXkoeSksZmU9bmV3IEFycmF5KHkpLG1lPW5ldyBBcnJheSh5KSxrZT1uZXcgQXJyYXkoeSksVGU9bmV3IEFycmF5KHkpLFBlPU0ud29yZHM7UGUubGVuZ3RoPXksdGhpcy5jb252ZXJ0MTNiKGcud29yZHMsZy5sZW5ndGgsUSx5KSx0aGlzLmNvbnZlcnQxM2IoQy53b3JkcyxD'@;
put 'Lmxlbmd0aCxtZSx5KSx0aGlzLnRyYW5zZm9ybShRLFMscmUsZmUseSxwKSx0aGlzLnRyYW5zZm9ybShtZSxTLGtlLFRlLHkscCk7Zm9yKHZhciBGZT0wO0ZlPHk7RmUrKyl7dmFyIE5lPXJlW0ZlXSprZVtGZV0tZmVbRmVdKlRlW0ZlXTtmZVtGZV09cmVbRmVdKlRlW0ZlXStmZVtGZV0qa2Vb'@;
put 'RmVdLHJlW0ZlXT1OZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUocmUsZmUseSksdGhpcy50cmFuc2Zvcm0ocmUsZmUsUGUsUyx5LHApLHRoaXMuY29uanVnYXRlKFBlLFMseSksdGhpcy5ub3JtYWxpemUxM2IoUGUseSksTS5uZWdhdGl2ZT1nLm5lZ2F0aXZlXkMubmVnYXRpdmUsTS5sZW5ndGg9'@;
put 'Zy5sZW5ndGgrQy5sZW5ndGgsTS5zdHJpcCgpfSxFLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyl7dmFyIEM9bmV3IEUobnVsbCk7cmV0dXJuIEMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2cubGVuZ3RoKSx0aGlzLm11bFRvKGcsQyl9LEUucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24o'@;
put 'Zyl7dmFyIEM9bmV3IEUobnVsbCk7cmV0dXJuIEMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2cubGVuZ3RoKSxpZSh0aGlzLGcsQyl9LEUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhnLHRoaXMpfSxFLnByb3RvdHlwZS5pbXVsbj1m'@;
put 'dW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyksSShnPDY3MTA4ODY0KTtmb3IodmFyIEM9MCxNPTA7TTx0aGlzLmxlbmd0aDtNKyspe3ZhciB5PSgwfHRoaXMud29yZHNbTV0pKmcscD0oNjcxMDg4NjMmeSkrKDY3MTA4ODYzJkMpO0M+Pj0yNixDKz15LzY3MTA4ODY0fDAsQys9cD4+'@;
put 'PjI2LHRoaXMud29yZHNbTV09NjcxMDg4NjMmcH1yZXR1cm4gMCE9PUMmJih0aGlzLndvcmRzW01dPUMsdGhpcy5sZW5ndGgrKyksdGhpc30sRS5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKGcpfSxFLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LEUucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LEUucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnKXt2YXIgQz1mdW5jdGlvbihTKXtmb3IodmFyIFE9bmV3IEFycmF5KFMuYml0TGVuZ3RoKCkp'@;
put 'LHJlPTA7cmU8US5sZW5ndGg7cmUrKyl7dmFyIG1lPXJlJTI2O1FbcmVdPShTLndvcmRzW3JlLzI2fDBdJjE8PG1lKT4+Pm1lfXJldHVybiBRfShnKTtpZigwPT09Qy5sZW5ndGgpcmV0dXJuIG5ldyBFKDEpO2Zvcih2YXIgTT10aGlzLHk9MDt5PEMubGVuZ3RoJiYwPT09Q1t5XTt5KyssTT1N'@;
put 'LnNxcigpKTtpZigrK3k8Qy5sZW5ndGgpZm9yKHZhciBwPU0uc3FyKCk7eTxDLmxlbmd0aDt5KysscD1wLnNxcigpKTAhPT1DW3ldJiYoTT1NLm11bChwKSk7cmV0dXJuIE19LEUucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIEMs'@;
put 'TT1nJTI2LHk9KGctTSkvMjYscD02NzEwODg2Mz4+PjI2LU08PDI2LU07aWYoMCE9PU0pe3ZhciBTPTA7Zm9yKEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl7dmFyIFE9dGhpcy53b3Jkc1tDXSZwO3RoaXMud29yZHNbQ109KDB8dGhpcy53b3Jkc1tDXSktUTw8TXxTLFM9UT4+PjI2LU19UyYmKHRo'@;
put 'aXMud29yZHNbQ109Uyx0aGlzLmxlbmd0aCsrKX1pZigwIT09eSl7Zm9yKEM9dGhpcy5sZW5ndGgtMTtDPj0wO0MtLSl0aGlzLndvcmRzW0MreV09dGhpcy53b3Jkc1tDXTtmb3IoQz0wO0M8eTtDKyspdGhpcy53b3Jkc1tDXT0wO3RoaXMubGVuZ3RoKz15fXJldHVybiB0aGlzLnN0cmlwKCl9'@;
put 'LEUucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiBJKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihnKX0sRS5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKGcsQyxNKXt2YXIgeTtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCkseT1DPyhDLUMlMjYpLzI2OjA7dmFy'@;
put 'IHA9ZyUyNixTPU1hdGgubWluKChnLXApLzI2LHRoaXMubGVuZ3RoKSxRPTY3MTA4ODYzXjY3MTA4ODYzPj4+cDw8cCxyZT1NO2lmKHktPVMseT1NYXRoLm1heCgwLHkpLHJlKXtmb3IodmFyIGZlPTA7ZmU8UztmZSsrKXJlLndvcmRzW2ZlXT10aGlzLndvcmRzW2ZlXTtyZS5sZW5ndGg9U31p'@;
put 'ZigwIT09UylpZih0aGlzLmxlbmd0aD5TKWZvcih0aGlzLmxlbmd0aC09UyxmZT0wO2ZlPHRoaXMubGVuZ3RoO2ZlKyspdGhpcy53b3Jkc1tmZV09dGhpcy53b3Jkc1tmZStTXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBtZT0wO2ZvcihmZT10aGlzLmxlbmd0aC0x'@;
put 'O2ZlPj0wJiYoMCE9PW1lfHxmZT49eSk7ZmUtLSl7dmFyIGtlPTB8dGhpcy53b3Jkc1tmZV07dGhpcy53b3Jkc1tmZV09bWU8PDI2LXB8a2U+Pj5wLG1lPWtlJlF9cmV0dXJuIHJlJiYwIT09bWUmJihyZS53b3Jkc1tyZS5sZW5ndGgrK109bWUpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29y'@;
put 'ZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKGcsQyxNKXtyZXR1cm4gSSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4oZyxDLE0pfSxFLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25l'@;
put 'KCkuaXNobG4oZyl9LEUucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKGcpfSxFLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oZyl9LEUucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKGcpe3Jl'@;
put 'dHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKGcpfSxFLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIEM9ZyUyNixNPShnLUMpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PU18fCEodGhpcy53b3Jkc1tNXSYxPDxDKSl9LEUucHJvdG90'@;
put 'eXBlLmltYXNrbj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIEM9ZyUyNixNPShnLUMpLzI2O3JldHVybiBJKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9TT90aGlzOigw'@;
put 'IT09QyYmTSsrLHRoaXMubGVuZ3RoPU1hdGgubWluKE0sdGhpcy5sZW5ndGgpLDAhPT1DJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5DPDxDKSx0aGlzLnN0cmlwKCkpfSxFLnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5j'@;
put 'bG9uZSgpLmltYXNrbihnKX0sRS5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIEkoIm51bWJlciI9PXR5cGVvZiBnKSxJKGc8NjcxMDg4NjQpLGc8MD90aGlzLmlzdWJuKC1nKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPGc/'@;
put 'KHRoaXMud29yZHNbMF09Zy0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihnKX0sRS5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKGcpe3RoaXMud29y'@;
put 'ZHNbMF0rPWc7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tDXT49NjcxMDg4NjQ7QysrKXRoaXMud29yZHNbQ10tPTY3MTA4ODY0LEM9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbQysxXT0xOnRoaXMud29yZHNbQysxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRo'@;
put 'Lm1heCh0aGlzLmxlbmd0aCxDKzEpLHRoaXN9LEUucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKGcpe2lmKEkoIm51bWJlciI9PXR5cGVvZiBnKSxJKGc8NjcxMDg4NjQpLGc8MClyZXR1cm4gdGhpcy5pYWRkbigtZyk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9'@;
put 'MCx0aGlzLmlhZGRuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPWcsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3Ro'@;
put 'JiZ0aGlzLndvcmRzW0NdPDA7QysrKXRoaXMud29yZHNbQ10rPTY3MTA4ODY0LHRoaXMud29yZHNbQysxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4oZyl9LEUucHJvdG90eXBlLnN1Ym49ZnVu'@;
put 'Y3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihnKX0sRS5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sRS5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LEUucHJvdG90eXBlLl9p'@;
put 'c2hsbnN1Ym11bD1mdW5jdGlvbihnLEMsTSl7dmFyIHkscDt0aGlzLl9leHBhbmQoZy5sZW5ndGgrTSk7dmFyIFE9MDtmb3IoeT0wO3k8Zy5sZW5ndGg7eSsrKXtwPSgwfHRoaXMud29yZHNbeStNXSkrUTt2YXIgcmU9KDB8Zy53b3Jkc1t5XSkqQztRPSgocC09NjcxMDg4NjMmcmUpPj4yNikt'@;
put 'KHJlLzY3MTA4ODY0fDApLHRoaXMud29yZHNbeStNXT02NzEwODg2MyZwfWZvcig7eTx0aGlzLmxlbmd0aC1NO3krKylRPShwPSgwfHRoaXMud29yZHNbeStNXSkrUSk+PjI2LHRoaXMud29yZHNbeStNXT02NzEwODg2MyZwO2lmKDA9PT1RKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKEkoLTE9'@;
put 'PT1RKSxRPTAseT0wO3k8dGhpcy5sZW5ndGg7eSsrKVE9KHA9LSgwfHRoaXMud29yZHNbeV0pK1EpPj4yNix0aGlzLndvcmRzW3ldPTY3MTA4ODYzJnA7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKGcsQyl7dmFyIE0s'@;
put 'eT10aGlzLmNsb25lKCkscD1nLFM9MHxwLndvcmRzW3AubGVuZ3RoLTFdOzAhPShNPTI2LXRoaXMuX2NvdW50Qml0cyhTKSkmJihwPXAudXNobG4oTSkseS5pdXNobG4oTSksUz0wfHAud29yZHNbcC5sZW5ndGgtMV0pO3ZhciBRLHJlPXkubGVuZ3RoLXAubGVuZ3RoO2lmKCJtb2QiIT09Qyl7'@;
put 'KFE9bmV3IEUobnVsbCkpLmxlbmd0aD1yZSsxLFEud29yZHM9bmV3IEFycmF5KFEubGVuZ3RoKTtmb3IodmFyIGZlPTA7ZmU8US5sZW5ndGg7ZmUrKylRLndvcmRzW2ZlXT0wfXZhciBtZT15LmNsb25lKCkuX2lzaGxuc3VibXVsKHAsMSxyZSk7MD09PW1lLm5lZ2F0aXZlJiYoeT1tZSxRJiYo'@;
put 'US53b3Jkc1tyZV09MSkpO2Zvcih2YXIga2U9cmUtMTtrZT49MDtrZS0tKXt2YXIgVGU9NjcxMDg4NjQqKDB8eS53b3Jkc1twLmxlbmd0aCtrZV0pKygwfHkud29yZHNbcC5sZW5ndGgra2UtMV0pO2ZvcihUZT1NYXRoLm1pbihUZS9TfDAsNjcxMDg4NjMpLHkuX2lzaGxuc3VibXVsKHAsVGUs'@;
put 'a2UpOzAhPT15Lm5lZ2F0aXZlOylUZS0tLHkubmVnYXRpdmU9MCx5Ll9pc2hsbnN1Ym11bChwLDEsa2UpLHkuaXNaZXJvKCl8fCh5Lm5lZ2F0aXZlXj0xKTtRJiYoUS53b3Jkc1trZV09VGUpfXJldHVybiBRJiZRLnN0cmlwKCkseS5zdHJpcCgpLCJkaXYiIT09QyYmMCE9PU0mJnkuaXVzaHJu'@;
put 'KE0pLHtkaXY6UXx8bnVsbCxtb2Q6eX19LEUucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihnLEMsTSl7cmV0dXJuIEkoIWcuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgRSgwKSxtb2Q6bmV3IEUoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZT8oUz10aGlz'@;
put 'Lm5lZygpLmRpdm1vZChnLEMpLCJtb2QiIT09QyYmKHk9Uy5kaXYubmVnKCkpLCJkaXYiIT09QyYmKHA9Uy5tb2QubmVnKCksTSYmMCE9PXAubmVnYXRpdmUmJnAuaWFkZChnKSkse2Rpdjp5LG1vZDpwfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlPyhTPXRoaXMuZGl2bW9k'@;
put 'KGcubmVnKCksQyksIm1vZCIhPT1DJiYoeT1TLmRpdi5uZWcoKSkse2Rpdjp5LG1vZDpTLm1vZH0pOnRoaXMubmVnYXRpdmUmZy5uZWdhdGl2ZT8oUz10aGlzLm5lZygpLmRpdm1vZChnLm5lZygpLEMpLCJkaXYiIT09QyYmKHA9Uy5tb2QubmVnKCksTSYmMCE9PXAubmVnYXRpdmUmJnAuaXN1'@;
put 'YihnKSkse2RpdjpTLmRpdixtb2Q6cH0pOmcubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChnKTwwP3tkaXY6bmV3IEUoMCksbW9kOnRoaXN9OjE9PT1nLmxlbmd0aD8iZGl2Ij09PUM/e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09Qz97ZGl2Om51bGws'@;
put 'bW9kOm5ldyBFKHRoaXMubW9kbihnLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpuZXcgRSh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KGcsQyk7dmFyIHkscCxTfSxFLnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMu'@;
put 'ZGl2bW9kKGcsImRpdiIsITEpLmRpdn0sRS5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJtb2QiLCExKS5tb2R9LEUucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITApLm1vZH0sRS5wcm90b3R5cGUu'@;
put 'ZGl2Um91bmQ9ZnVuY3Rpb24oZyl7dmFyIEM9dGhpcy5kaXZtb2QoZyk7aWYoQy5tb2QuaXNaZXJvKCkpcmV0dXJuIEMuZGl2O3ZhciBNPTAhPT1DLmRpdi5uZWdhdGl2ZT9DLm1vZC5pc3ViKGcpOkMubW9kLHk9Zy51c2hybigxKSxwPWcuYW5kbG4oMSksUz1NLmNtcCh5KTtyZXR1cm4gUzww'@;
put 'fHwxPT09cCYmMD09PVM/Qy5kaXY6MCE9PUMuZGl2Lm5lZ2F0aXZlP0MuZGl2LmlzdWJuKDEpOkMuZGl2LmlhZGRuKDEpfSxFLnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKGcpe0koZzw9NjcxMDg4NjMpO2Zvcih2YXIgQz02NzEwODg2NCVnLE09MCx5PXRoaXMubGVuZ3RoLTE7eT49MDt5LS0p'@;
put 'TT0oQypNKygwfHRoaXMud29yZHNbeV0pKSVnO3JldHVybiBNfSxFLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihnKXtJKGc8PTY3MTA4ODYzKTtmb3IodmFyIEM9MCxNPXRoaXMubGVuZ3RoLTE7TT49MDtNLS0pe3ZhciB5PSgwfHRoaXMud29yZHNbTV0pKzY3MTA4ODY0KkM7dGhpcy53b3Jk'@;
put 'c1tNXT15L2d8MCxDPXklZ31yZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4oZyl9LEUucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24oZyl7SSgwPT09Zy5uZWdhdGl2ZSksSSghZy5pc1plcm8oKSk7dmFyIEM9'@;
put 'dGhpcyxNPWcuY2xvbmUoKTtDPTAhPT1DLm5lZ2F0aXZlP0MudW1vZChnKTpDLmNsb25lKCk7Zm9yKHZhciB5PW5ldyBFKDEpLHA9bmV3IEUoMCksUz1uZXcgRSgwKSxRPW5ldyBFKDEpLHJlPTA7Qy5pc0V2ZW4oKSYmTS5pc0V2ZW4oKTspQy5pdXNocm4oMSksTS5pdXNocm4oMSksKytyZTtm'@;
put 'b3IodmFyIGZlPU0uY2xvbmUoKSxtZT1DLmNsb25lKCk7IUMuaXNaZXJvKCk7KXtmb3IodmFyIGtlPTAsVGU9MTshKEMud29yZHNbMF0mVGUpJiZrZTwyNjsrK2tlLFRlPDw9MSk7aWYoa2U+MClmb3IoQy5pdXNocm4oa2UpO2tlLS0gPjA7KSh5LmlzT2RkKCl8fHAuaXNPZGQoKSkmJih5Lmlh'@;
put 'ZGQoZmUpLHAuaXN1YihtZSkpLHkuaXVzaHJuKDEpLHAuaXVzaHJuKDEpO2Zvcih2YXIgUGU9MCxGZT0xOyEoTS53b3Jkc1swXSZGZSkmJlBlPDI2OysrUGUsRmU8PD0xKTtpZihQZT4wKWZvcihNLml1c2hybihQZSk7UGUtLSA+MDspKFMuaXNPZGQoKXx8US5pc09kZCgpKSYmKFMuaWFkZChm'@;
put 'ZSksUS5pc3ViKG1lKSksUy5pdXNocm4oMSksUS5pdXNocm4oMSk7Qy5jbXAoTSk+PTA/KEMuaXN1YihNKSx5LmlzdWIoUykscC5pc3ViKFEpKTooTS5pc3ViKEMpLFMuaXN1Yih5KSxRLmlzdWIocCkpfXJldHVybnthOlMsYjpRLGdjZDpNLml1c2hsbihyZSl9fSxFLnByb3RvdHlwZS5faW52'@;
put 'bXA9ZnVuY3Rpb24oZyl7SSgwPT09Zy5uZWdhdGl2ZSksSSghZy5pc1plcm8oKSk7dmFyIEM9dGhpcyxNPWcuY2xvbmUoKTtDPTAhPT1DLm5lZ2F0aXZlP0MudW1vZChnKTpDLmNsb25lKCk7Zm9yKHZhciB5LHA9bmV3IEUoMSksUz1uZXcgRSgwKSxRPU0uY2xvbmUoKTtDLmNtcG4oMSk+MCYm'@;
put 'TS5jbXBuKDEpPjA7KXtmb3IodmFyIHJlPTAsZmU9MTshKEMud29yZHNbMF0mZmUpJiZyZTwyNjsrK3JlLGZlPDw9MSk7aWYocmU+MClmb3IoQy5pdXNocm4ocmUpO3JlLS0gPjA7KXAuaXNPZGQoKSYmcC5pYWRkKFEpLHAuaXVzaHJuKDEpO2Zvcih2YXIgbWU9MCxrZT0xOyEoTS53b3Jkc1sw'@;
put 'XSZrZSkmJm1lPDI2OysrbWUsa2U8PD0xKTtpZihtZT4wKWZvcihNLml1c2hybihtZSk7bWUtLSA+MDspUy5pc09kZCgpJiZTLmlhZGQoUSksUy5pdXNocm4oMSk7Qy5jbXAoTSk+PTA/KEMuaXN1YihNKSxwLmlzdWIoUykpOihNLmlzdWIoQyksUy5pc3ViKHApKX1yZXR1cm4oeT0wPT09Qy5j'@;
put 'bXBuKDEpP3A6UykuY21wbigwKTwwJiZ5LmlhZGQoZykseX0sRS5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKGcpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIGcuYWJzKCk7aWYoZy5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgQz10aGlzLmNsb25lKCksTT1nLmNsb25lKCk7Qy5uZWdh'@;
put 'dGl2ZT0wLE0ubmVnYXRpdmU9MDtmb3IodmFyIHk9MDtDLmlzRXZlbigpJiZNLmlzRXZlbigpO3krKylDLml1c2hybigxKSxNLml1c2hybigxKTtmb3IoOzspe2Zvcig7Qy5pc0V2ZW4oKTspQy5pdXNocm4oMSk7Zm9yKDtNLmlzRXZlbigpOylNLml1c2hybigxKTt2YXIgcD1DLmNtcChNKTtp'@;
put 'ZihwPDApe3ZhciBTPUM7Qz1NLE09U31lbHNlIGlmKDA9PT1wfHwwPT09TS5jbXBuKDEpKWJyZWFrO0MuaXN1YihNKX1yZXR1cm4gTS5pdXNobG4oeSl9LEUucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZWdjZChnKS5hLnVtb2QoZyl9LEUucHJvdG90eXBlLmlzRXZl'@;
put 'bj1mdW5jdGlvbigpe3JldHVybiAwPT0oMSZ0aGlzLndvcmRzWzBdKX0sRS5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gMT09KDEmdGhpcy53b3Jkc1swXSl9LEUucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLndvcmRzWzBdJmd9LEUucHJvdG90eXBl'@;
put 'LmJpbmNuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnKTt2YXIgQz1nJTI2LE09KGctQykvMjYseT0xPDxDO2lmKHRoaXMubGVuZ3RoPD1NKXJldHVybiB0aGlzLl9leHBhbmQoTSsxKSx0aGlzLndvcmRzW01dfD15LHRoaXM7Zm9yKHZhciBwPXksUz1NOzAhPT1wJiZTPHRoaXMu'@;
put 'bGVuZ3RoO1MrKyl7dmFyIFE9MHx0aGlzLndvcmRzW1NdO3A9KFErPXApPj4+MjYsdGhpcy53b3Jkc1tTXT1RJj02NzEwODg2M31yZXR1cm4gMCE9PXAmJih0aGlzLndvcmRzW1NdPXAsdGhpcy5sZW5ndGgrKyksdGhpc30sRS5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9'@;
put 'PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LEUucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24oZyl7dmFyIEMsTT1nPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFNKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZNKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxl'@;
put 'bmd0aD4xKUM9MTtlbHNle00mJihnPS1nKSxJKGc8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciB5PTB8dGhpcy53b3Jkc1swXTtDPXk9PT1nPzA6eTxnPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUM6Q30sRS5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKGcpe2lm'@;
put 'KDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIDE7dmFyIEM9dGhpcy51Y21wKGcpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1DOkN9LEUucHJvdG90eXBlLnVjbXA9ZnVuY3Rp'@;
put 'b24oZyl7aWYodGhpcy5sZW5ndGg+Zy5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8Zy5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBDPTAsTT10aGlzLmxlbmd0aC0xO00+PTA7TS0tKXt2YXIgeT0wfHRoaXMud29yZHNbTV0scD0wfGcud29yZHNbTV07aWYoeSE9PXApe3k8cD9DPS0x'@;
put 'Onk+cCYmKEM9MSk7YnJlYWt9fXJldHVybiBDfSxFLnByb3RvdHlwZS5ndG49ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcG4oZyl9LEUucHJvdG90eXBlLmd0PWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5jbXAoZyl9LEUucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oZyl7cmV0'@;
put 'dXJuIHRoaXMuY21wbihnKT49MH0sRS5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKT49MH0sRS5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXBuKGcpfSxFLnByb3RvdHlwZS5sdD1mdW5jdGlvbihnKXtyZXR1cm4tMT09PXRo'@;
put 'aXMuY21wKGcpfSxFLnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk8PTB9LEUucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAoZyk8PTB9LEUucHJvdG90eXBlLmVxbj1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wbihn'@;
put 'KX0sRS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcChnKX0sRS5yZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBOKGcpfSxFLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihnKXtyZXR1cm4gSSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0'@;
put 'aW9uIGNvbnRleHQiKSxJKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChnKX0sRS5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9u'@;
put 'bHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LEUucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5yZWQ9Zyx0aGlzfSxFLnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4g'@;
put 'SSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChnKX0sRS5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5y'@;
put 'ZWQuYWRkKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oZyl7cmV0dXJu'@;
put 'IEkodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlz'@;
put 'LnJlZC5pc3ViKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oZyl7cmV0dXJu'@;
put 'IEkodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLm11bCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25s'@;
put 'eSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5pbXVsKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQu'@;
put 'X3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlz'@;
put 'KX0sRS5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LEUucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxFLnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkTmVnIHdvcmtz'@;
put 'IG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sRS5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkJiYhZy5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEo'@;
put 'dGhpcyksdGhpcy5yZWQucG93KHRoaXMsZyl9O3ZhciBkZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIHVlKGcsQyl7dGhpcy5uYW1lPWcsdGhpcy5wPW5ldyBFKEMsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBF'@;
put 'KDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBjZSgpe3VlLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVu'@;
put 'Y3Rpb24gWSgpe3VlLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gYigpe3VlLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZl'@;
put 'IGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24geCgpe3VlLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gTihnKXtpZigic3RyaW5nIj09dHlwZW9mIGcpe3Zh'@;
put 'ciBDPUUuX3ByaW1lKGcpO3RoaXMubT1DLnAsdGhpcy5wcmltZT1DfWVsc2UgSShnLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPWcsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIEYoZyl7Ti5jYWxsKHRoaXMsZyksdGhpcy5zaGlmdD10aGlzLm0uYml0'@;
put 'TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgRSgxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWlu'@;
put 'dj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX11ZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBnPW5ldyBFKG51bGwpO3JldHVybiBn'@;
put 'LndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksZ30sdWUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24oZyl7dmFyIEMsTT1nO2Rve3RoaXMuc3BsaXQoTSx0aGlzLnRtcCksQz0oTT0oTT10aGlzLmltdWxLKE0pKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hp'@;
put 'bGUoQz50aGlzLm4pO3ZhciB5PUM8dGhpcy5uPy0xOk0udWNtcCh0aGlzLnApO3JldHVybiAwPT09eT8oTS53b3Jkc1swXT0wLE0ubGVuZ3RoPTEpOnk+MD9NLmlzdWIodGhpcy5wKTp2b2lkIDAhPT1NLnN0cmlwP00uc3RyaXAoKTpNLl9zdHJpcCgpLE19LHVlLnByb3RvdHlwZS5zcGxpdD1m'@;
put 'dW5jdGlvbihnLEMpe2cuaXVzaHJuKHRoaXMubiwwLEMpfSx1ZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaW11bCh0aGlzLmspfSxSKGNlLHVlKSxjZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyxDKXtmb3IodmFyIE09NDE5NDMwMyx5PU1hdGgubWluKGcubGVu'@;
put 'Z3RoLDkpLHA9MDtwPHk7cCsrKUMud29yZHNbcF09Zy53b3Jkc1twXTtpZihDLmxlbmd0aD15LGcubGVuZ3RoPD05KXJldHVybiBnLndvcmRzWzBdPTAsdm9pZChnLmxlbmd0aD0xKTt2YXIgUz1nLndvcmRzWzldO2ZvcihDLndvcmRzW0MubGVuZ3RoKytdPVMmTSxwPTEwO3A8Zy5sZW5ndGg7'@;
put 'cCsrKXt2YXIgUT0wfGcud29yZHNbcF07Zy53b3Jkc1twLTEwXT0oUSZNKTw8NHxTPj4+MjIsUz1RfWcud29yZHNbcC0xMF09Uz4+Pj0yMixnLmxlbmd0aC09MD09PVMmJmcubGVuZ3RoPjEwPzEwOjl9LGNlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtnLndvcmRzW2cubGVuZ3RoXT0w'@;
put 'LGcud29yZHNbZy5sZW5ndGgrMV09MCxnLmxlbmd0aCs9Mjtmb3IodmFyIEM9MCxNPTA7TTxnLmxlbmd0aDtNKyspe3ZhciB5PTB8Zy53b3Jkc1tNXTtnLndvcmRzW01dPTY3MTA4ODYzJihDKz05NzcqeSksQz02NCp5KyhDLzY3MTA4ODY0fDApfXJldHVybiAwPT09Zy53b3Jkc1tnLmxlbmd0'@;
put 'aC0xXSYmKGcubGVuZ3RoLS0sMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJmcubGVuZ3RoLS0pLGd9LFIoWSx1ZSksUihiLHVlKSxSKHgsdWUpLHgucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2Zvcih2YXIgQz0wLE09MDtNPGcubGVuZ3RoO00rKyl7dmFyIHk9MTkqKDB8Zy53b3Jkc1tN'@;
put 'XSkrQyxwPTY3MTA4ODYzJnk7eT4+Pj0yNixnLndvcmRzW01dPXAsQz15fXJldHVybiAwIT09QyYmKGcud29yZHNbZy5sZW5ndGgrK109QyksZ30sRS5fcHJpbWU9ZnVuY3Rpb24oZyl7aWYoZGVbZ10pcmV0dXJuIGRlW2ddO3ZhciBDO2lmKCJrMjU2Ij09PWcpQz1uZXcgY2U7ZWxzZSBpZigi'@;
put 'cDIyNCI9PT1nKUM9bmV3IFk7ZWxzZSBpZigicDE5MiI9PT1nKUM9bmV3IGI7ZWxzZXtpZigicDI1NTE5IiE9PWcpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrZyk7Qz1uZXcgeH1yZXR1cm4gZGVbZ109QyxDfSxOLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihnKXtJKDA9'@;
put 'PT1nLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLEkoZy5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sTi5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oZyxDKXtJKDA9PShnLm5lZ2F0aXZlfEMubmVnYXRpdmUpLCJyZWQgd29ya3Mg'@;
put 'b25seSB3aXRoIHBvc2l0aXZlcyIpLEkoZy5yZWQmJmcucmVkPT09Qy5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sTi5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoZykuX2ZvcmNlUmVkKHRoaXMp'@;
put 'OmcudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sTi5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKGcpe3JldHVybiBnLmlzWmVybygpP2cuY2xvbmUoKTp0aGlzLm0uc3ViKGcpLl9mb3JjZVJlZCh0aGlzKX0sTi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5Mihn'@;
put 'LEMpO3ZhciBNPWcuYWRkKEMpO3JldHVybiBNLmNtcCh0aGlzLm0pPj0wJiZNLmlzdWIodGhpcy5tKSxNLl9mb3JjZVJlZCh0aGlzKX0sTi5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihnLEMpe3RoaXMuX3ZlcmlmeTIoZyxDKTt2YXIgTT1nLmlhZGQoQyk7cmV0dXJuIE0uY21wKHRoaXMubSk+'@;
put 'PTAmJk0uaXN1Yih0aGlzLm0pLE19LE4ucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnLEMpe3RoaXMuX3ZlcmlmeTIoZyxDKTt2YXIgTT1nLnN1YihDKTtyZXR1cm4gTS5jbXBuKDApPDAmJk0uaWFkZCh0aGlzLm0pLE0uX2ZvcmNlUmVkKHRoaXMpfSxOLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9u'@;
put 'KGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBNPWcuaXN1YihDKTtyZXR1cm4gTS5jbXBuKDApPDAmJk0uaWFkZCh0aGlzLm0pLE19LE4ucHJvdG90eXBlLnNobD1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlzLl92ZXJpZnkxKGcpLHRoaXMuaW1vZChnLnVzaGxuKEMpKX0sTi5wcm90b3R5'@;
put 'cGUuaW11bD1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcsQyksdGhpcy5pbW9kKGcuaW11bChDKSl9LE4ucHJvdG90eXBlLm11bD1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcsQyksdGhpcy5pbW9kKGcubXVsKEMpKX0sTi5wcm90b3R5cGUuaXNxcj1m'@;
put 'dW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbXVsKGcsZy5jbG9uZSgpKX0sTi5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLm11bChnLGcpfSxOLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKGcpe2lmKGcuaXNaZXJvKCkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgQz10aGlzLm0u'@;
put 'YW5kbG4oMyk7aWYoSShDJTI9PTEpLDM9PT1DKXt2YXIgTT10aGlzLm0uYWRkKG5ldyBFKDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KGcsTSl9Zm9yKHZhciB5PXRoaXMubS5zdWJuKDEpLHA9MDsheS5pc1plcm8oKSYmMD09PXkuYW5kbG4oMSk7KXArKyx5Lml1c2hybigxKTtJKCF5'@;
put 'LmlzWmVybygpKTt2YXIgUz1uZXcgRSgxKS50b1JlZCh0aGlzKSxRPVMucmVkTmVnKCkscmU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLGZlPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IoZmU9bmV3IEUoMipmZSpmZSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KGZlLHJlKS5jbXAoUSk7KWZl'@;
put 'LnJlZElBZGQoUSk7Zm9yKHZhciBtZT10aGlzLnBvdyhmZSx5KSxrZT10aGlzLnBvdyhnLHkuYWRkbigxKS5pdXNocm4oMSkpLFRlPXRoaXMucG93KGcseSksUGU9cDswIT09VGUuY21wKFMpOyl7Zm9yKHZhciBGZT1UZSxOZT0wOzAhPT1GZS5jbXAoUyk7TmUrKylGZT1GZS5yZWRTcXIoKTtJ'@;
put 'KE5lPFBlKTt2YXIgTGU9dGhpcy5wb3cobWUsbmV3IEUoMSkuaXVzaGxuKFBlLU5lLTEpKTtrZT1rZS5yZWRNdWwoTGUpLG1lPUxlLnJlZFNxcigpLFRlPVRlLnJlZE11bChtZSksUGU9TmV9cmV0dXJuIGtlfSxOLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3ZhciBDPWcuX2ludm1wKHRo'@;
put 'aXMubSk7cmV0dXJuIDAhPT1DLm5lZ2F0aXZlPyhDLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKEMpLnJlZE5lZygpKTp0aGlzLmltb2QoQyl9LE4ucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnLEMpe2lmKEMuaXNaZXJvKCkpcmV0dXJuIG5ldyBFKDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1DLmNtcG4o'@;
put 'MSkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgTT1uZXcgQXJyYXkoMTYpO01bMF09bmV3IEUoMSkudG9SZWQodGhpcyksTVsxXT1nO2Zvcih2YXIgeT0yO3k8TS5sZW5ndGg7eSsrKU1beV09dGhpcy5tdWwoTVt5LTFdLGcpO3ZhciBwPU1bMF0sUz0wLFE9MCxyZT1DLmJpdExlbmd0aCgpJTI2O2Zv'@;
put 'cigwPT09cmUmJihyZT0yNikseT1DLmxlbmd0aC0xO3k+PTA7eS0tKXtmb3IodmFyIGZlPUMud29yZHNbeV0sbWU9cmUtMTttZT49MDttZS0tKXt2YXIga2U9ZmU+Pm1lJjE7cCE9PU1bMF0mJihwPXRoaXMuc3FyKHApKSwwIT09a2V8fDAhPT1TPyhTPDw9MSxTfD1rZSwoND09KytRfHwwPT09'@;
put 'eSYmMD09PW1lKSYmKHA9dGhpcy5tdWwocCxNW1NdKSxRPTAsUz0wKSk6UT0wfXJlPTI2fXJldHVybiBwfSxOLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7dmFyIEM9Zy51bW9kKHRoaXMubSk7cmV0dXJuIEM9PT1nP0MuY2xvbmUoKTpDfSxOLnByb3RvdHlwZS5jb252ZXJ0RnJv'@;
put 'bT1mdW5jdGlvbihnKXt2YXIgQz1nLmNsb25lKCk7cmV0dXJuIEMucmVkPW51bGwsQ30sRS5tb250PWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgRihnKX0sUihGLE4pLEYucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcudXNobG4odGhpcy5zaGlmdCkp'@;
put 'fSxGLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgQz10aGlzLmltb2QoZy5tdWwodGhpcy5yaW52KSk7cmV0dXJuIEMucmVkPW51bGwsQ30sRi5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnLEMpe2lmKGcuaXNaZXJvKCl8fEMuaXNaZXJvKCkpcmV0dXJuIGcud29yZHNb'@;
put 'MF09MCxnLmxlbmd0aD0xLGc7dmFyIE09Zy5pbXVsKEMpLHk9TS5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSkscD1NLmlzdWIoeSkuaXVzaHJuKHRoaXMuc2hpZnQpLFM9cDtyZXR1cm4gcC5jbXAodGhpcy5tKT49MD9TPXAu'@;
put 'aXN1Yih0aGlzLm0pOnAuY21wbigwKTwwJiYoUz1wLmlhZGQodGhpcy5tKSksUy5fZm9yY2VSZWQodGhpcyl9LEYucHJvdG90eXBlLm11bD1mdW5jdGlvbihnLEMpe2lmKGcuaXNaZXJvKCl8fEMuaXNaZXJvKCkpcmV0dXJuIG5ldyBFKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgTT1nLm11bChD'@;
put 'KSx5PU0ubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLHA9TS5pc3ViKHkpLml1c2hybih0aGlzLnNoaWZ0KSxTPXA7cmV0dXJuIHAuY21wKHRoaXMubSk+PTA/Uz1wLmlzdWIodGhpcy5tKTpwLmNtcG4oMCk8MCYmKFM9cC5p'@;
put 'YWRkKHRoaXMubSkpLFMuX2ZvcmNlUmVkKHRoaXMpfSxGLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KEg9TC5ubWQoSCksdGhpcyl9LDY5NDg6KEgsQixMKT0+eyJ1c2Ug'@;
put 'c3RyaWN0Ijt2YXIgSz1CO0sudmVyc2lvbj1MKDg1OTcpLmk4LEsudXRpbHM9TCg5NTMpLEsucmFuZD1MKDk5MzEpLEsuY3VydmU9TCg4MjU0KSxLLmN1cnZlcz1MKDU0MjcpLEsuZWM9TCg3OTU0KSxLLmVkZHNhPUwoNTk4MCl9LDQ5MTg6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSz1M'@;
put 'KDM3ODUpLEo9TCg5NTMpLEk9Si5nZXROQUYsUj1KLmdldEpTRixFPUouYXNzZXJ0O2Z1bmN0aW9uIHooVixHKXt0aGlzLnR5cGU9Vix0aGlzLnA9bmV3IEsoRy5wLDE2KSx0aGlzLnJlZD1HLnByaW1lP0sucmVkKEcucHJpbWUpOksubW9udCh0aGlzLnApLHRoaXMuemVybz1uZXcgSygwKS50'@;
put 'b1JlZCh0aGlzLnJlZCksdGhpcy5vbmU9bmV3IEsoMSkudG9SZWQodGhpcy5yZWQpLHRoaXMudHdvPW5ldyBLKDIpLnRvUmVkKHRoaXMucmVkKSx0aGlzLm49Ry5uJiZuZXcgSyhHLm4sMTYpLHRoaXMuZz1HLmcmJnRoaXMucG9pbnRGcm9tSlNPTihHLmcsRy5nUmVkKSx0aGlzLl93bmFmVDE9'@;
put 'bmV3IEFycmF5KDQpLHRoaXMuX3duYWZUMj1uZXcgQXJyYXkoNCksdGhpcy5fd25hZlQzPW5ldyBBcnJheSg0KSx0aGlzLl93bmFmVDQ9bmV3IEFycmF5KDQpLHRoaXMuX2JpdExlbmd0aD10aGlzLm4/dGhpcy5uLmJpdExlbmd0aCgpOjA7dmFyIFc9dGhpcy5uJiZ0aGlzLnAuZGl2KHRoaXMu'@;
put 'bik7IVd8fFcuY21wbigxMDApPjA/dGhpcy5yZWROPW51bGw6KHRoaXMuX21heHdlbGxUcmljaz0hMCx0aGlzLnJlZE49dGhpcy5uLnRvUmVkKHRoaXMucmVkKSl9ZnVuY3Rpb24gaihWLEcpe3RoaXMuY3VydmU9Vix0aGlzLnR5cGU9Ryx0aGlzLnByZWNvbXB1dGVkPW51bGx9SC5leHBvcnRz'@;
put 'PXosei5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfSx6LnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9LHoucHJvdG90eXBlLl9maXhlZE5hZk11bD1mdW5j'@;
put 'dGlvbihWLEcpe0UoVi5wcmVjb21wdXRlZCk7dmFyIFc9Vi5fZ2V0RG91YmxlcygpLFU9SShHLDEsdGhpcy5fYml0TGVuZ3RoKSxxPSgxPDxXLnN0ZXArMSktKFcuc3RlcCUyPT0wPzI6MSk7cS89Mzt2YXIgdGUsbmUsaWU9W107Zm9yKHRlPTA7dGU8VS5sZW5ndGg7dGUrPVcuc3RlcCl7bmU9'@;
put 'MDtmb3IodmFyIGxlPXRlK1cuc3RlcC0xO2xlPj10ZTtsZS0tKW5lPShuZTw8MSkrVVtsZV07aWUucHVzaChuZSl9Zm9yKHZhciBkZT10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCksdWU9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLGNlPXE7Y2U+MDtjZS0tKXtmb3IodGU9MDt0ZTxp'@;
put 'ZS5sZW5ndGg7dGUrKykobmU9aWVbdGVdKT09PWNlP3VlPXVlLm1peGVkQWRkKFcucG9pbnRzW3RlXSk6bmU9PT0tY2UmJih1ZT11ZS5taXhlZEFkZChXLnBvaW50c1t0ZV0ubmVnKCkpKTtkZT1kZS5hZGQodWUpfXJldHVybiBkZS50b1AoKX0sei5wcm90b3R5cGUuX3duYWZNdWw9ZnVuY3Rp'@;
put 'b24oVixHKXtmb3IodmFyIFc9NCxVPVYuX2dldE5BRlBvaW50cyhXKSxxPVUucG9pbnRzLHRlPUkoRyxXPVUud25kLHRoaXMuX2JpdExlbmd0aCksbmU9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLGllPXRlLmxlbmd0aC0xO2llPj0wO2llLS0pe2Zvcih2YXIgbGU9MDtpZT49MCYmMD09'@;
put 'PXRlW2llXTtpZS0tKWxlKys7aWYoaWU+PTAmJmxlKyssbmU9bmUuZGJscChsZSksaWU8MClicmVhazt2YXIgZGU9dGVbaWVdO0UoMCE9PWRlKSxuZT0iYWZmaW5lIj09PVYudHlwZT9uZS5taXhlZEFkZChkZT4wP3FbZGUtMT4+MV06cVstZGUtMT4+MV0ubmVnKCkpOm5lLmFkZChkZT4wP3Fb'@;
put 'ZGUtMT4+MV06cVstZGUtMT4+MV0ubmVnKCkpfXJldHVybiJhZmZpbmUiPT09Vi50eXBlP25lLnRvUCgpOm5lfSx6LnByb3RvdHlwZS5fd25hZk11bEFkZD1mdW5jdGlvbihWLEcsVyxVLHEpe3ZhciB0ZSxuZSxpZSxsZT10aGlzLl93bmFmVDEsZGU9dGhpcy5fd25hZlQyLHVlPXRoaXMuX3du'@;
put 'YWZUMyxjZT0wO2Zvcih0ZT0wO3RlPFU7dGUrKyl7dmFyIFk9KGllPUdbdGVdKS5fZ2V0TkFGUG9pbnRzKFYpO2xlW3RlXT1ZLnduZCxkZVt0ZV09WS5wb2ludHN9Zm9yKHRlPVUtMTt0ZT49MTt0ZS09Mil7dmFyIGI9dGUtMSx4PXRlO2lmKDE9PT1sZVtiXSYmMT09PWxlW3hdKXt2YXIgTj1b'@;
put 'R1tiXSxudWxsLG51bGwsR1t4XV07MD09PUdbYl0ueS5jbXAoR1t4XS55KT8oTlsxXT1HW2JdLmFkZChHW3hdKSxOWzJdPUdbYl0udG9KKCkubWl4ZWRBZGQoR1t4XS5uZWcoKSkpOjA9PT1HW2JdLnkuY21wKEdbeF0ueS5yZWROZWcoKSk/KE5bMV09R1tiXS50b0ooKS5taXhlZEFkZChHW3hd'@;
put 'KSxOWzJdPUdbYl0uYWRkKEdbeF0ubmVnKCkpKTooTlsxXT1HW2JdLnRvSigpLm1peGVkQWRkKEdbeF0pLE5bMl09R1tiXS50b0ooKS5taXhlZEFkZChHW3hdLm5lZygpKSk7dmFyIEY9Wy0zLC0xLC01LC03LDAsNyw1LDEsM10sZz1SKFdbYl0sV1t4XSk7Zm9yKGNlPU1hdGgubWF4KGdbMF0u'@;
put 'bGVuZ3RoLGNlKSx1ZVtiXT1uZXcgQXJyYXkoY2UpLHVlW3hdPW5ldyBBcnJheShjZSksbmU9MDtuZTxjZTtuZSsrKXVlW2JdW25lXT1GWzMqKDErKDB8Z1swXVtuZV0pKSsoMSsoMHxnWzFdW25lXSkpXSx1ZVt4XVtuZV09MCxkZVtiXT1OfWVsc2UgdWVbYl09SShXW2JdLGxlW2JdLHRoaXMu'@;
put 'X2JpdExlbmd0aCksdWVbeF09SShXW3hdLGxlW3hdLHRoaXMuX2JpdExlbmd0aCksY2U9TWF0aC5tYXgodWVbYl0ubGVuZ3RoLGNlKSxjZT1NYXRoLm1heCh1ZVt4XS5sZW5ndGgsY2UpfXZhciB5PXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxwPXRoaXMuX3duYWZUNDtmb3IodGU9Y2U7'@;
put 'dGU+PTA7dGUtLSl7Zm9yKHZhciBTPTA7dGU+PTA7KXt2YXIgUT0hMDtmb3IobmU9MDtuZTxVO25lKyspcFtuZV09MHx1ZVtuZV1bdGVdLDAhPT1wW25lXSYmKFE9ITEpO2lmKCFRKWJyZWFrO1MrKyx0ZS0tfWlmKHRlPj0wJiZTKysseT15LmRibHAoUyksdGU8MClicmVhaztmb3IobmU9MDtu'@;
put 'ZTxVO25lKyspe3ZhciByZT1wW25lXTswIT09cmUmJihyZT4wP2llPWRlW25lXVtyZS0xPj4xXTpyZTwwJiYoaWU9ZGVbbmVdWy1yZS0xPj4xXS5uZWcoKSkseT0iYWZmaW5lIj09PWllLnR5cGU/eS5taXhlZEFkZChpZSk6eS5hZGQoaWUpKX19Zm9yKHRlPTA7dGU8VTt0ZSsrKWRlW3RlXT1u'@;
put 'dWxsO3JldHVybiBxP3k6eS50b1AoKX0sei5CYXNlUG9pbnQ9aixqLnByb3RvdHlwZS5lcT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9LGoucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VydmUudmFsaWRhdGUodGhpcyl9'@;
put 'LHoucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uKFYsRyl7Vj1KLnRvQXJyYXkoVixHKTt2YXIgVz10aGlzLnAuYnl0ZUxlbmd0aCgpO2lmKCg0PT09VlswXXx8Nj09PVZbMF18fDc9PT1WWzBdKSYmVi5sZW5ndGgtMT09MipXKXJldHVybiA2PT09VlswXT9FKFZbVi5sZW5ndGgtMV0l'@;
put 'Mj09MCk6Nz09PVZbMF0mJkUoVltWLmxlbmd0aC0xXSUyPT0xKSx0aGlzLnBvaW50KFYuc2xpY2UoMSwxK1cpLFYuc2xpY2UoMStXLDErMipXKSk7aWYoKDI9PT1WWzBdfHwzPT09VlswXSkmJlYubGVuZ3RoLTE9PT1XKXJldHVybiB0aGlzLnBvaW50RnJvbVgoVi5zbGljZSgxLDErVyksMz09'@;
put 'PVZbMF0pO3Rocm93IG5ldyBFcnJvcigiVW5rbm93biBwb2ludCBmb3JtYXQiKX0sai5wcm90b3R5cGUuZW5jb2RlQ29tcHJlc3NlZD1mdW5jdGlvbihWKXtyZXR1cm4gdGhpcy5lbmNvZGUoViwhMCl9LGoucHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24oVil7dmFyIEc9dGhpcy5jdXJ2ZS5w'@;
put 'LmJ5dGVMZW5ndGgoKSxXPXRoaXMuZ2V0WCgpLnRvQXJyYXkoImJlIixHKTtyZXR1cm4gVj9bdGhpcy5nZXRZKCkuaXNFdmVuKCk/MjozXS5jb25jYXQoVyk6WzRdLmNvbmNhdChXLHRoaXMuZ2V0WSgpLnRvQXJyYXkoImJlIixHKSl9LGoucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbihWLEcp'@;
put 'e3JldHVybiBKLmVuY29kZSh0aGlzLl9lbmNvZGUoRyksVil9LGoucHJvdG90eXBlLnByZWNvbXB1dGU9ZnVuY3Rpb24oVil7aWYodGhpcy5wcmVjb21wdXRlZClyZXR1cm4gdGhpczt2YXIgRz17ZG91YmxlczpudWxsLG5hZjpudWxsLGJldGE6bnVsbH07cmV0dXJuIEcubmFmPXRoaXMuX2dl'@;
put 'dE5BRlBvaW50cyg4KSxHLmRvdWJsZXM9dGhpcy5fZ2V0RG91Ymxlcyg0LFYpLEcuYmV0YT10aGlzLl9nZXRCZXRhKCksdGhpcy5wcmVjb21wdXRlZD1HLHRoaXN9LGoucHJvdG90eXBlLl9oYXNEb3VibGVzPWZ1bmN0aW9uKFYpe2lmKCF0aGlzLnByZWNvbXB1dGVkKXJldHVybiExO3ZhciBH'@;
put 'PXRoaXMucHJlY29tcHV0ZWQuZG91YmxlcztyZXR1cm4hIUcmJkcucG9pbnRzLmxlbmd0aD49TWF0aC5jZWlsKChWLmJpdExlbmd0aCgpKzEpL0cuc3RlcCl9LGoucHJvdG90eXBlLl9nZXREb3VibGVzPWZ1bmN0aW9uKFYsRyl7aWYodGhpcy5wcmVjb21wdXRlZCYmdGhpcy5wcmVjb21wdXRl'@;
put 'ZC5kb3VibGVzKXJldHVybiB0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXM7Zm9yKHZhciBXPVt0aGlzXSxVPXRoaXMscT0wO3E8RztxKz1WKXtmb3IodmFyIHRlPTA7dGU8Vjt0ZSsrKVU9VS5kYmwoKTtXLnB1c2goVSl9cmV0dXJue3N0ZXA6Vixwb2ludHM6V319LGoucHJvdG90eXBlLl9nZXRO'@;
put 'QUZQb2ludHM9ZnVuY3Rpb24oVil7aWYodGhpcy5wcmVjb21wdXRlZCYmdGhpcy5wcmVjb21wdXRlZC5uYWYpcmV0dXJuIHRoaXMucHJlY29tcHV0ZWQubmFmO2Zvcih2YXIgRz1bdGhpc10sVz0oMTw8ViktMSxVPTE9PT1XP251bGw6dGhpcy5kYmwoKSxxPTE7cTxXO3ErKylHW3FdPUdbcS0x'@;
put 'XS5hZGQoVSk7cmV0dXJue3duZDpWLHBvaW50czpHfX0sai5wcm90b3R5cGUuX2dldEJldGE9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sai5wcm90b3R5cGUuZGJscD1mdW5jdGlvbihWKXtmb3IodmFyIEc9dGhpcyxXPTA7VzxWO1crKylHPUcuZGJsKCk7cmV0dXJuIEd9fSwxMTM4OihILEIs'@;
put 'TCk9PnsidXNlIHN0cmljdCI7dmFyIEs9TCg5NTMpLEo9TCgzNzg1KSxJPUwoNTcxNyksUj1MKDQ5MTgpLEU9Sy5hc3NlcnQ7ZnVuY3Rpb24geihWKXt0aGlzLnR3aXN0ZWQ9MSE9KDB8Vi5hKSx0aGlzLm1PbmVBPXRoaXMudHdpc3RlZCYmLTE9PSgwfFYuYSksdGhpcy5leHRlbmRlZD10aGlz'@;
put 'Lm1PbmVBLFIuY2FsbCh0aGlzLCJlZHdhcmRzIixWKSx0aGlzLmE9bmV3IEooVi5hLDE2KS51bW9kKHRoaXMucmVkLm0pLHRoaXMuYT10aGlzLmEudG9SZWQodGhpcy5yZWQpLHRoaXMuYz1uZXcgSihWLmMsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmMyPXRoaXMuYy5yZWRTcXIoKSx0aGlz'@;
put 'LmQ9bmV3IEooVi5kLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5kZD10aGlzLmQucmVkQWRkKHRoaXMuZCksRSghdGhpcy50d2lzdGVkfHwwPT09dGhpcy5jLmZyb21SZWQoKS5jbXBuKDEpKSx0aGlzLm9uZUM9MT09KDB8Vi5jKX1mdW5jdGlvbiBqKFYsRyxXLFUscSl7Ui5CYXNlUG9pbnQu'@;
put 'Y2FsbCh0aGlzLFYsInByb2plY3RpdmUiKSxudWxsPT09RyYmbnVsbD09PVcmJm51bGw9PT1VPyh0aGlzLng9dGhpcy5jdXJ2ZS56ZXJvLHRoaXMueT10aGlzLmN1cnZlLm9uZSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpcy50PXRoaXMuY3VydmUuemVybyx0aGlzLnpPbmU9ITApOih0aGlz'@;
put 'Lng9bmV3IEooRywxNiksdGhpcy55PW5ldyBKKFcsMTYpLHRoaXMuej1VP25ldyBKKFUsMTYpOnRoaXMuY3VydmUub25lLHRoaXMudD1xJiZuZXcgSihxLDE2KSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueS5yZWR8fCh0aGlzLnk9dGhp'@;
put 'cy55LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnQmJiF0aGlzLnQucmVkJiYodGhpcy50PXRoaXMudC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuek9uZT10aGlzLno9PT10aGlzLmN1cnZl'@;
put 'Lm9uZSx0aGlzLmN1cnZlLmV4dGVuZGVkJiYhdGhpcy50JiYodGhpcy50PXRoaXMueC5yZWRNdWwodGhpcy55KSx0aGlzLnpPbmV8fCh0aGlzLnQ9dGhpcy50LnJlZE11bCh0aGlzLnoucmVkSW52bSgpKSkpKX1JKHosUiksSC5leHBvcnRzPXosei5wcm90b3R5cGUuX211bEE9ZnVuY3Rpb24o'@;
put 'Vil7cmV0dXJuIHRoaXMubU9uZUE/Vi5yZWROZWcoKTp0aGlzLmEucmVkTXVsKFYpfSx6LnByb3RvdHlwZS5fbXVsQz1mdW5jdGlvbihWKXtyZXR1cm4gdGhpcy5vbmVDP1Y6dGhpcy5jLnJlZE11bChWKX0sei5wcm90b3R5cGUuanBvaW50PWZ1bmN0aW9uKFYsRyxXLFUpe3JldHVybiB0aGlz'@;
put 'LnBvaW50KFYsRyxXLFUpfSx6LnByb3RvdHlwZS5wb2ludEZyb21YPWZ1bmN0aW9uKFYsRyl7KFY9bmV3IEooViwxNikpLnJlZHx8KFY9Vi50b1JlZCh0aGlzLnJlZCkpO3ZhciBXPVYucmVkU3FyKCksVT10aGlzLmMyLnJlZFN1Yih0aGlzLmEucmVkTXVsKFcpKSxxPXRoaXMub25lLnJlZFN1'@;
put 'Yih0aGlzLmMyLnJlZE11bCh0aGlzLmQpLnJlZE11bChXKSksdGU9VS5yZWRNdWwocS5yZWRJbnZtKCkpLG5lPXRlLnJlZFNxcnQoKTtpZigwIT09bmUucmVkU3FyKCkucmVkU3ViKHRlKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTt2YXIgaWU9bmUu'@;
put 'ZnJvbVJlZCgpLmlzT2RkKCk7cmV0dXJuKEcmJiFpZXx8IUcmJmllKSYmKG5lPW5lLnJlZE5lZygpKSx0aGlzLnBvaW50KFYsbmUpfSx6LnByb3RvdHlwZS5wb2ludEZyb21ZPWZ1bmN0aW9uKFYsRyl7KFY9bmV3IEooViwxNikpLnJlZHx8KFY9Vi50b1JlZCh0aGlzLnJlZCkpO3ZhciBXPVYu'@;
put 'cmVkU3FyKCksVT1XLnJlZFN1Yih0aGlzLmMyKSxxPVcucmVkTXVsKHRoaXMuZCkucmVkTXVsKHRoaXMuYzIpLnJlZFN1Yih0aGlzLmEpLHRlPVUucmVkTXVsKHEucmVkSW52bSgpKTtpZigwPT09dGUuY21wKHRoaXMuemVybykpe2lmKEcpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50'@;
put 'Iik7cmV0dXJuIHRoaXMucG9pbnQodGhpcy56ZXJvLFYpfXZhciBuZT10ZS5yZWRTcXJ0KCk7aWYoMCE9PW5lLnJlZFNxcigpLnJlZFN1Yih0ZSkuY21wKHRoaXMuemVybykpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7cmV0dXJuIG5lLmZyb21SZWQoKS5pc09kZCgpIT09RyYm'@;
put 'KG5lPW5lLnJlZE5lZygpKSx0aGlzLnBvaW50KG5lLFYpfSx6LnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbihWKXtpZihWLmlzSW5maW5pdHkoKSlyZXR1cm4hMDtWLm5vcm1hbGl6ZSgpO3ZhciBHPVYueC5yZWRTcXIoKSxXPVYueS5yZWRTcXIoKSxVPUcucmVkTXVsKHRoaXMuYSkucmVk'@;
put 'QWRkKFcpLHE9dGhpcy5jMi5yZWRNdWwodGhpcy5vbmUucmVkQWRkKHRoaXMuZC5yZWRNdWwoRykucmVkTXVsKFcpKSk7cmV0dXJuIDA9PT1VLmNtcChxKX0sSShqLFIuQmFzZVBvaW50KSx6LnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1bmN0aW9uKFYpe3JldHVybiBqLmZyb21KU09OKHRo'@;
put 'aXMsVil9LHoucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKFYsRyxXLFUpe3JldHVybiBuZXcgaih0aGlzLFYsRyxXLFUpfSxqLmZyb21KU09OPWZ1bmN0aW9uKFYsRyl7cmV0dXJuIG5ldyBqKFYsR1swXSxHWzFdLEdbMl0pfSxqLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgUG9pbnQgSW5maW5pdHk+IjoiPEVDIFBvaW50IHg6ICIrdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiIHk6ICIrdGhpcy55LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiIHo6ICIrdGhpcy56LmZyb21SZWQoKS50b1N0cmluZygxNiwy'@;
put 'KSsiPiJ9LGoucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMueC5jbXBuKDApJiYoMD09PXRoaXMueS5jbXAodGhpcy56KXx8dGhpcy56T25lJiYwPT09dGhpcy55LmNtcCh0aGlzLmN1cnZlLmMpKX0sai5wcm90b3R5cGUuX2V4dERibD1mdW5jdGlvbigp'@;
put 'e3ZhciBWPXRoaXMueC5yZWRTcXIoKSxHPXRoaXMueS5yZWRTcXIoKSxXPXRoaXMuei5yZWRTcXIoKTtXPVcucmVkSUFkZChXKTt2YXIgVT10aGlzLmN1cnZlLl9tdWxBKFYpLHE9dGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZFNxcigpLnJlZElTdWIoVikucmVkSVN1YihHKSx0ZT1VLnJlZEFk'@;
put 'ZChHKSxuZT10ZS5yZWRTdWIoVyksaWU9VS5yZWRTdWIoRyksbGU9cS5yZWRNdWwobmUpLGRlPXRlLnJlZE11bChpZSksdWU9cS5yZWRNdWwoaWUpLGNlPW5lLnJlZE11bCh0ZSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQobGUsZGUsY2UsdWUpfSxqLnByb3RvdHlwZS5fcHJvakRibD1mdW5j'@;
put 'dGlvbigpe3ZhciBWLEcsVyxVLHEsdGUsbmU9dGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZFNxcigpLGllPXRoaXMueC5yZWRTcXIoKSxsZT10aGlzLnkucmVkU3FyKCk7aWYodGhpcy5jdXJ2ZS50d2lzdGVkKXt2YXIgZGU9KFU9dGhpcy5jdXJ2ZS5fbXVsQShpZSkpLnJlZEFkZChsZSk7dGhp'@;
put 'cy56T25lPyhWPW5lLnJlZFN1YihpZSkucmVkU3ViKGxlKS5yZWRNdWwoZGUucmVkU3ViKHRoaXMuY3VydmUudHdvKSksRz1kZS5yZWRNdWwoVS5yZWRTdWIobGUpKSxXPWRlLnJlZFNxcigpLnJlZFN1YihkZSkucmVkU3ViKGRlKSk6KHE9dGhpcy56LnJlZFNxcigpLHRlPWRlLnJlZFN1Yihx'@;
put 'KS5yZWRJU3ViKHEpLFY9bmUucmVkU3ViKGllKS5yZWRJU3ViKGxlKS5yZWRNdWwodGUpLEc9ZGUucmVkTXVsKFUucmVkU3ViKGxlKSksVz1kZS5yZWRNdWwodGUpKX1lbHNlIFU9aWUucmVkQWRkKGxlKSxxPXRoaXMuY3VydmUuX211bEModGhpcy56KS5yZWRTcXIoKSx0ZT1VLnJlZFN1Yihx'@;
put 'KS5yZWRTdWIocSksVj10aGlzLmN1cnZlLl9tdWxDKG5lLnJlZElTdWIoVSkpLnJlZE11bCh0ZSksRz10aGlzLmN1cnZlLl9tdWxDKFUpLnJlZE11bChpZS5yZWRJU3ViKGxlKSksVz1VLnJlZE11bCh0ZSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoVixHLFcpfSxqLnByb3RvdHlwZS5kYmw9'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLmV4dGVuZGVkP3RoaXMuX2V4dERibCgpOnRoaXMuX3Byb2pEYmwoKX0sai5wcm90b3R5cGUuX2V4dEFkZD1mdW5jdGlvbihWKXt2YXIgRz10aGlzLnkucmVkU3ViKHRoaXMueCkucmVkTXVsKFYueS5y'@;
put 'ZWRTdWIoVi54KSksVz10aGlzLnkucmVkQWRkKHRoaXMueCkucmVkTXVsKFYueS5yZWRBZGQoVi54KSksVT10aGlzLnQucmVkTXVsKHRoaXMuY3VydmUuZGQpLnJlZE11bChWLnQpLHE9dGhpcy56LnJlZE11bChWLnoucmVkQWRkKFYueikpLHRlPVcucmVkU3ViKEcpLG5lPXEucmVkU3ViKFUp'@;
put 'LGllPXEucmVkQWRkKFUpLGxlPVcucmVkQWRkKEcpLGRlPXRlLnJlZE11bChuZSksdWU9aWUucmVkTXVsKGxlKSxjZT10ZS5yZWRNdWwobGUpLFk9bmUucmVkTXVsKGllKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChkZSx1ZSxZLGNlKX0sai5wcm90b3R5cGUuX3Byb2pBZGQ9ZnVuY3Rpb24o'@;
put 'Vil7dmFyIEcsVyxVPXRoaXMuei5yZWRNdWwoVi56KSxxPVUucmVkU3FyKCksdGU9dGhpcy54LnJlZE11bChWLngpLG5lPXRoaXMueS5yZWRNdWwoVi55KSxpZT10aGlzLmN1cnZlLmQucmVkTXVsKHRlKS5yZWRNdWwobmUpLGxlPXEucmVkU3ViKGllKSxkZT1xLnJlZEFkZChpZSksdWU9dGhp'@;
put 'cy54LnJlZEFkZCh0aGlzLnkpLnJlZE11bChWLngucmVkQWRkKFYueSkpLnJlZElTdWIodGUpLnJlZElTdWIobmUpLGNlPVUucmVkTXVsKGxlKS5yZWRNdWwodWUpO3JldHVybiB0aGlzLmN1cnZlLnR3aXN0ZWQ/KEc9VS5yZWRNdWwoZGUpLnJlZE11bChuZS5yZWRTdWIodGhpcy5jdXJ2ZS5f'@;
put 'bXVsQSh0ZSkpKSxXPWxlLnJlZE11bChkZSkpOihHPVUucmVkTXVsKGRlKS5yZWRNdWwobmUucmVkU3ViKHRlKSksVz10aGlzLmN1cnZlLl9tdWxDKGxlKS5yZWRNdWwoZGUpKSx0aGlzLmN1cnZlLnBvaW50KGNlLEcsVyl9LGoucHJvdG90eXBlLmFkZD1mdW5jdGlvbihWKXtyZXR1cm4gdGhp'@;
put 'cy5pc0luZmluaXR5KCk/VjpWLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuZXh0ZW5kZWQ/dGhpcy5fZXh0QWRkKFYpOnRoaXMuX3Byb2pBZGQoVil9LGoucHJvdG90eXBlLm11bD1mdW5jdGlvbihWKXtyZXR1cm4gdGhpcy5faGFzRG91YmxlcyhWKT90aGlzLmN1cnZlLl9maXhlZE5h'@;
put 'Zk11bCh0aGlzLFYpOnRoaXMuY3VydmUuX3duYWZNdWwodGhpcyxWKX0sai5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKFYsRyxXKXtyZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLFt0aGlzLEddLFtWLFddLDIsITEpfSxqLnByb3RvdHlwZS5qbXVsQWRkPWZ1bmN0aW9uKFYsRyxX'@;
put 'KXtyZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLFt0aGlzLEddLFtWLFddLDIsITApfSxqLnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oKXtpZih0aGlzLnpPbmUpcmV0dXJuIHRoaXM7dmFyIFY9dGhpcy56LnJlZEludm0oKTtyZXR1cm4gdGhpcy54PXRoaXMueC5yZWRNdWwo'@;
put 'ViksdGhpcy55PXRoaXMueS5yZWRNdWwoViksdGhpcy50JiYodGhpcy50PXRoaXMudC5yZWRNdWwoVikpLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzLnpPbmU9ITAsdGhpc30sai5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQodGhpcy54LnJlZE5l'@;
put 'ZygpLHRoaXMueSx0aGlzLnosdGhpcy50JiZ0aGlzLnQucmVkTmVnKCkpfSxqLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCksdGhpcy54LmZyb21SZWQoKX0sai5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgp'@;
put 'LHRoaXMueS5mcm9tUmVkKCl9LGoucHJvdG90eXBlLmVxPWZ1bmN0aW9uKFYpe3JldHVybiB0aGlzPT09Vnx8MD09PXRoaXMuZ2V0WCgpLmNtcChWLmdldFgoKSkmJjA9PT10aGlzLmdldFkoKS5jbXAoVi5nZXRZKCkpfSxqLnByb3RvdHlwZS5lcVhUb1A9ZnVuY3Rpb24oVil7dmFyIEc9Vi50'@;
put 'b1JlZCh0aGlzLmN1cnZlLnJlZCkucmVkTXVsKHRoaXMueik7aWYoMD09PXRoaXMueC5jbXAoRykpcmV0dXJuITA7Zm9yKHZhciBXPVYuY2xvbmUoKSxVPXRoaXMuY3VydmUucmVkTi5yZWRNdWwodGhpcy56KTs7KXtpZihXLmlhZGQodGhpcy5jdXJ2ZS5uKSxXLmNtcCh0aGlzLmN1cnZlLnAp'@;
put 'Pj0wKXJldHVybiExO2lmKEcucmVkSUFkZChVKSwwPT09dGhpcy54LmNtcChHKSlyZXR1cm4hMH19LGoucHJvdG90eXBlLnRvUD1qLnByb3RvdHlwZS5ub3JtYWxpemUsai5wcm90b3R5cGUubWl4ZWRBZGQ9ai5wcm90b3R5cGUuYWRkfSw4MjU0OihILEIsTCk9PnsidXNlIHN0cmljdCI7dmFy'@;
put 'IEs9QjtLLmJhc2U9TCg0OTE4KSxLLnNob3J0PUwoNjY3MyksSy5tb250PUwoMjg4MSksSy5lZHdhcmRzPUwoMTEzOCl9LDI4ODE6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSz1MKDM3ODUpLEo9TCg1NzE3KSxJPUwoNDkxOCksUj1MKDk1Myk7ZnVuY3Rpb24gRShqKXtJLmNhbGwodGhp'@;
put 'cywibW9udCIsaiksdGhpcy5hPW5ldyBLKGouYSwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYj1uZXcgSyhqLmIsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmk0PW5ldyBLKDQpLnRvUmVkKHRoaXMucmVkKS5yZWRJbnZtKCksdGhpcy50d289bmV3IEsoMikudG9SZWQodGhpcy5yZWQpLHRo'@;
put 'aXMuYTI0PXRoaXMuaTQucmVkTXVsKHRoaXMuYS5yZWRBZGQodGhpcy50d28pKX1mdW5jdGlvbiB6KGosVixHKXtJLkJhc2VQb2ludC5jYWxsKHRoaXMsaiwicHJvamVjdGl2ZSIpLG51bGw9PT1WJiZudWxsPT09Rz8odGhpcy54PXRoaXMuY3VydmUub25lLHRoaXMuej10aGlzLmN1cnZlLnpl'@;
put 'cm8pOih0aGlzLng9bmV3IEsoViwxNiksdGhpcy56PW5ldyBLKEcsMTYpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSl9SihFLEkpLEguZXhwb3J0cz1FLEUu'@;
put 'cHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKGope3ZhciBWPWoubm9ybWFsaXplKCkueCxHPVYucmVkU3FyKCksVz1HLnJlZE11bChWKS5yZWRBZGQoRy5yZWRNdWwodGhpcy5hKSkucmVkQWRkKFYpO3JldHVybiAwPT09Vy5yZWRTcXJ0KCkucmVkU3FyKCkuY21wKFcpfSxKKHosSS5CYXNl'@;
put 'UG9pbnQpLEUucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uKGosVil7cmV0dXJuIHRoaXMucG9pbnQoUi50b0FycmF5KGosViksMSl9LEUucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKGosVil7cmV0dXJuIG5ldyB6KHRoaXMsaixWKX0sRS5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1m'@;
put 'dW5jdGlvbihqKXtyZXR1cm4gei5mcm9tSlNPTih0aGlzLGopfSx6LnByb3RvdHlwZS5wcmVjb21wdXRlPWZ1bmN0aW9uKCl7fSx6LnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0WCgpLnRvQXJyYXkoImJlIix0aGlzLmN1cnZlLnAuYnl0ZUxlbmd0aCgpKX0s'@;
put 'ei5mcm9tSlNPTj1mdW5jdGlvbihqLFYpe3JldHVybiBuZXcgeihqLFZbMF0sVlsxXXx8ai5vbmUpfSx6LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgUG9pbnQgSW5maW5pdHk+IjoiPEVDIFBvaW50IHg6ICIrdGhpcy54LmZyb21S'@;
put 'ZWQoKS50b1N0cmluZygxNiwyKSsiIHo6ICIrdGhpcy56LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiPiJ9LHoucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuei5jbXBuKDApfSx6LnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXt2YXIgaj10aGlzLngu'@;
put 'cmVkQWRkKHRoaXMueikucmVkU3FyKCksVj10aGlzLngucmVkU3ViKHRoaXMueikucmVkU3FyKCksRz1qLnJlZFN1YihWKSxXPWoucmVkTXVsKFYpLFU9Ry5yZWRNdWwoVi5yZWRBZGQodGhpcy5jdXJ2ZS5hMjQucmVkTXVsKEcpKSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoVyxVKX0sei5w'@;
put 'cm90b3R5cGUuYWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUiKX0sei5wcm90b3R5cGUuZGlmZkFkZD1mdW5jdGlvbihqLFYpe3ZhciBHPXRoaXMueC5yZWRBZGQodGhpcy56KSxXPXRoaXMueC5yZWRTdWIodGhpcy56KSxV'@;
put 'PWoueC5yZWRBZGQoai56KSxxPWoueC5yZWRTdWIoai56KS5yZWRNdWwoRyksdGU9VS5yZWRNdWwoVyksbmU9Vi56LnJlZE11bChxLnJlZEFkZCh0ZSkucmVkU3FyKCkpLGllPVYueC5yZWRNdWwocS5yZWRJU3ViKHRlKS5yZWRTcXIoKSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQobmUsaWUp'@;
put 'fSx6LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oail7Zm9yKHZhciBWPWouY2xvbmUoKSxHPXRoaXMsVz10aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCksVT1bXTswIT09Vi5jbXBuKDApO1YuaXVzaHJuKDEpKVUucHVzaChWLmFuZGxuKDEpKTtmb3IodmFyIHE9VS5sZW5ndGgtMTtxPj0wO3Et'@;
put 'LSkwPT09VVtxXT8oRz1HLmRpZmZBZGQoVyx0aGlzKSxXPVcuZGJsKCkpOihXPUcuZGlmZkFkZChXLHRoaXMpLEc9Ry5kYmwoKSk7cmV0dXJuIFd9LHoucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZl'@;
put 'Iil9LHoucHJvdG90eXBlLmp1bWxBZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZSIpfSx6LnByb3RvdHlwZS5lcT1mdW5jdGlvbihqKXtyZXR1cm4gMD09PXRoaXMuZ2V0WCgpLmNtcChqLmdldFgoKSl9LHoucHJvdG90eXBl'@;
put 'Lm5vcm1hbGl6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLng9dGhpcy54LnJlZE11bCh0aGlzLnoucmVkSW52bSgpKSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpc30sei5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueC5mcm9tUmVkKCl9'@;
put 'fSw2NjczOihILEIsTCk9PnsidXNlIHN0cmljdCI7dmFyIEs9TCg5NTMpLEo9TCgzNzg1KSxJPUwoNTcxNyksUj1MKDQ5MTgpLEU9Sy5hc3NlcnQ7ZnVuY3Rpb24geihHKXtSLmNhbGwodGhpcywic2hvcnQiLEcpLHRoaXMuYT1uZXcgSihHLmEsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmI9'@;
put 'bmV3IEooRy5iLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy50aW52PXRoaXMudHdvLnJlZEludm0oKSx0aGlzLnplcm9BPTA9PT10aGlzLmEuZnJvbVJlZCgpLmNtcG4oMCksdGhpcy50aHJlZUE9MD09PXRoaXMuYS5mcm9tUmVkKCkuc3ViKHRoaXMucCkuY21wbigtMyksdGhpcy5lbmRvPXRo'@;
put 'aXMuX2dldEVuZG9tb3JwaGlzbShHKSx0aGlzLl9lbmRvV25hZlQxPW5ldyBBcnJheSg0KSx0aGlzLl9lbmRvV25hZlQyPW5ldyBBcnJheSg0KX1mdW5jdGlvbiBqKEcsVyxVLHEpe1IuQmFzZVBvaW50LmNhbGwodGhpcyxHLCJhZmZpbmUiKSxudWxsPT09VyYmbnVsbD09PVU/KHRoaXMueD1u'@;
put 'dWxsLHRoaXMueT1udWxsLHRoaXMuaW5mPSEwKToodGhpcy54PW5ldyBKKFcsMTYpLHRoaXMueT1uZXcgSihVLDE2KSxxJiYodGhpcy54LmZvcmNlUmVkKHRoaXMuY3VydmUucmVkKSx0aGlzLnkuZm9yY2VSZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50'@;
put 'b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueS5yZWR8fCh0aGlzLnk9dGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy5pbmY9ITEpfWZ1bmN0aW9uIFYoRyxXLFUscSl7Ui5CYXNlUG9pbnQuY2FsbCh0aGlzLEcsImphY29iaWFuIiksbnVsbD09PVcmJm51bGw9PT1VJiZudWxs'@;
put 'PT09cT8odGhpcy54PXRoaXMuY3VydmUub25lLHRoaXMueT10aGlzLmN1cnZlLm9uZSx0aGlzLno9bmV3IEooMCkpOih0aGlzLng9bmV3IEooVywxNiksdGhpcy55PW5ldyBKKFUsMTYpLHRoaXMuej1uZXcgSihxLDE2KSksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5j'@;
put 'dXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56T25lPXRoaXMuej09PXRoaXMuY3VydmUub25lfUkoeixSKSxILmV4cG9ydHM9eix6'@;
put 'LnByb3RvdHlwZS5fZ2V0RW5kb21vcnBoaXNtPWZ1bmN0aW9uKEcpe2lmKHRoaXMuemVyb0EmJnRoaXMuZyYmdGhpcy5uJiYxPT09dGhpcy5wLm1vZG4oMykpe3ZhciBXLFU7aWYoRy5iZXRhKVc9bmV3IEooRy5iZXRhLDE2KS50b1JlZCh0aGlzLnJlZCk7ZWxzZXt2YXIgcT10aGlzLl9nZXRF'@;
put 'bmRvUm9vdHModGhpcy5wKTtXPShXPXFbMF0uY21wKHFbMV0pPDA/cVswXTpxWzFdKS50b1JlZCh0aGlzLnJlZCl9aWYoRy5sYW1iZGEpVT1uZXcgSihHLmxhbWJkYSwxNik7ZWxzZXt2YXIgdGU9dGhpcy5fZ2V0RW5kb1Jvb3RzKHRoaXMubik7MD09PXRoaXMuZy5tdWwodGVbMF0pLnguY21w'@;
put 'KHRoaXMuZy54LnJlZE11bChXKSk/VT10ZVswXTpFKDA9PT10aGlzLmcubXVsKFU9dGVbMV0pLnguY21wKHRoaXMuZy54LnJlZE11bChXKSkpfXJldHVybntiZXRhOlcsbGFtYmRhOlUsYmFzaXM6Ry5iYXNpcz9HLmJhc2lzLm1hcChmdW5jdGlvbihuZSl7cmV0dXJue2E6bmV3IEoobmUuYSwx'@;
put 'NiksYjpuZXcgSihuZS5iLDE2KX19KTp0aGlzLl9nZXRFbmRvQmFzaXMoVSl9fX0sei5wcm90b3R5cGUuX2dldEVuZG9Sb290cz1mdW5jdGlvbihHKXt2YXIgVz1HPT09dGhpcy5wP3RoaXMucmVkOkoubW9udChHKSxVPW5ldyBKKDIpLnRvUmVkKFcpLnJlZEludm0oKSxxPVUucmVkTmVnKCks'@;
put 'dGU9bmV3IEooMykudG9SZWQoVykucmVkTmVnKCkucmVkU3FydCgpLnJlZE11bChVKTtyZXR1cm5bcS5yZWRBZGQodGUpLmZyb21SZWQoKSxxLnJlZFN1Yih0ZSkuZnJvbVJlZCgpXX0sei5wcm90b3R5cGUuX2dldEVuZG9CYXNpcz1mdW5jdGlvbihHKXtmb3IodmFyIFcsVSxxLHRlLG5lLGll'@;
put 'LGxlLGRlLHVlLGNlPXRoaXMubi51c2hybihNYXRoLmZsb29yKHRoaXMubi5iaXRMZW5ndGgoKS8yKSksWT1HLGI9dGhpcy5uLmNsb25lKCkseD1uZXcgSigxKSxOPW5ldyBKKDApLEY9bmV3IEooMCksZz1uZXcgSigxKSxDPTA7MCE9PVkuY21wbigwKTspe3ZhciBNPWIuZGl2KFkpO2RlPWIu'@;
put 'c3ViKE0ubXVsKFkpKSx1ZT1GLnN1YihNLm11bCh4KSk7dmFyIHk9Zy5zdWIoTS5tdWwoTikpO2lmKCFxJiZkZS5jbXAoY2UpPDApVz1sZS5uZWcoKSxVPXgscT1kZS5uZWcoKSx0ZT11ZTtlbHNlIGlmKHEmJjI9PSsrQylicmVhaztsZT1kZSxiPVksWT1kZSxGPXgseD11ZSxnPU4sTj15fW5l'@;
put 'PWRlLm5lZygpLGllPXVlO3ZhciBwPXEuc3FyKCkuYWRkKHRlLnNxcigpKTtyZXR1cm4gbmUuc3FyKCkuYWRkKGllLnNxcigpKS5jbXAocCk+PTAmJihuZT1XLGllPVUpLHEubmVnYXRpdmUmJihxPXEubmVnKCksdGU9dGUubmVnKCkpLG5lLm5lZ2F0aXZlJiYobmU9bmUubmVnKCksaWU9aWUu'@;
put 'bmVnKCkpLFt7YTpxLGI6dGV9LHthOm5lLGI6aWV9XX0sei5wcm90b3R5cGUuX2VuZG9TcGxpdD1mdW5jdGlvbihHKXt2YXIgVz10aGlzLmVuZG8uYmFzaXMsVT1XWzBdLHE9V1sxXSx0ZT1xLmIubXVsKEcpLmRpdlJvdW5kKHRoaXMubiksbmU9VS5iLm5lZygpLm11bChHKS5kaXZSb3VuZCh0'@;
put 'aGlzLm4pLGllPXRlLm11bChVLmEpLGxlPW5lLm11bChxLmEpLGRlPXRlLm11bChVLmIpLHVlPW5lLm11bChxLmIpO3JldHVybntrMTpHLnN1YihpZSkuc3ViKGxlKSxrMjpkZS5hZGQodWUpLm5lZygpfX0sei5wcm90b3R5cGUucG9pbnRGcm9tWD1mdW5jdGlvbihHLFcpeyhHPW5ldyBKKEcs'@;
put 'MTYpKS5yZWR8fChHPUcudG9SZWQodGhpcy5yZWQpKTt2YXIgVT1HLnJlZFNxcigpLnJlZE11bChHKS5yZWRJQWRkKEcucmVkTXVsKHRoaXMuYSkpLnJlZElBZGQodGhpcy5iKSxxPVUucmVkU3FydCgpO2lmKDAhPT1xLnJlZFNxcigpLnJlZFN1YihVKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBu'@;
put 'ZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTt2YXIgdGU9cS5mcm9tUmVkKCkuaXNPZGQoKTtyZXR1cm4oVyYmIXRlfHwhVyYmdGUpJiYocT1xLnJlZE5lZygpKSx0aGlzLnBvaW50KEcscSl9LHoucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKEcpe2lmKEcuaW5mKXJldHVybiEwO3ZhciBX'@;
put 'PUcueCxVPUcueSxxPXRoaXMuYS5yZWRNdWwoVyksdGU9Vy5yZWRTcXIoKS5yZWRNdWwoVykucmVkSUFkZChxKS5yZWRJQWRkKHRoaXMuYik7cmV0dXJuIDA9PT1VLnJlZFNxcigpLnJlZElTdWIodGUpLmNtcG4oMCl9LHoucHJvdG90eXBlLl9lbmRvV25hZk11bEFkZD1mdW5jdGlvbihHLFcs'@;
put 'VSl7Zm9yKHZhciBxPXRoaXMuX2VuZG9XbmFmVDEsdGU9dGhpcy5fZW5kb1duYWZUMixuZT0wO25lPEcubGVuZ3RoO25lKyspe3ZhciBpZT10aGlzLl9lbmRvU3BsaXQoV1tuZV0pLGxlPUdbbmVdLGRlPWxlLl9nZXRCZXRhKCk7aWUuazEubmVnYXRpdmUmJihpZS5rMS5pbmVnKCksbGU9bGUu'@;
put 'bmVnKCEwKSksaWUuazIubmVnYXRpdmUmJihpZS5rMi5pbmVnKCksZGU9ZGUubmVnKCEwKSkscVsyKm5lXT1sZSxxWzIqbmUrMV09ZGUsdGVbMipuZV09aWUuazEsdGVbMipuZSsxXT1pZS5rMn1mb3IodmFyIHVlPXRoaXMuX3duYWZNdWxBZGQoMSxxLHRlLDIqbmUsVSksY2U9MDtjZTwyKm5l'@;
put 'O2NlKyspcVtjZV09bnVsbCx0ZVtjZV09bnVsbDtyZXR1cm4gdWV9LEkoaixSLkJhc2VQb2ludCksei5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oRyxXLFUpe3JldHVybiBuZXcgaih0aGlzLEcsVyxVKX0sei5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbihHLFcpe3JldHVybiBq'@;
put 'LmZyb21KU09OKHRoaXMsRyxXKX0sai5wcm90b3R5cGUuX2dldEJldGE9ZnVuY3Rpb24oKXtpZih0aGlzLmN1cnZlLmVuZG8pe3ZhciBHPXRoaXMucHJlY29tcHV0ZWQ7aWYoRyYmRy5iZXRhKXJldHVybiBHLmJldGE7dmFyIFc9dGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngucmVkTXVsKHRoaXMu'@;
put 'Y3VydmUuZW5kby5iZXRhKSx0aGlzLnkpO2lmKEcpe3ZhciBVPXRoaXMuY3VydmUscT1mdW5jdGlvbih0ZSl7cmV0dXJuIFUucG9pbnQodGUueC5yZWRNdWwoVS5lbmRvLmJldGEpLHRlLnkpfTtHLmJldGE9VyxXLnByZWNvbXB1dGVkPXtiZXRhOm51bGwsbmFmOkcubmFmJiZ7d25kOkcubmFm'@;
put 'LnduZCxwb2ludHM6Ry5uYWYucG9pbnRzLm1hcChxKX0sZG91YmxlczpHLmRvdWJsZXMmJntzdGVwOkcuZG91Ymxlcy5zdGVwLHBvaW50czpHLmRvdWJsZXMucG9pbnRzLm1hcChxKX19fXJldHVybiBXfX0sai5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJlY29t'@;
put 'cHV0ZWQ/W3RoaXMueCx0aGlzLnksdGhpcy5wcmVjb21wdXRlZCYme2RvdWJsZXM6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzJiZ7c3RlcDp0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMuc3RlcCxwb2ludHM6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzLnBvaW50cy5zbGljZSgxKX0sbmFmOnRo'@;
put 'aXMucHJlY29tcHV0ZWQubmFmJiZ7d25kOnRoaXMucHJlY29tcHV0ZWQubmFmLnduZCxwb2ludHM6dGhpcy5wcmVjb21wdXRlZC5uYWYucG9pbnRzLnNsaWNlKDEpfX1dOlt0aGlzLngsdGhpcy55XX0sai5mcm9tSlNPTj1mdW5jdGlvbihHLFcsVSl7InN0cmluZyI9PXR5cGVvZiBXJiYoVz1K'@;
put 'U09OLnBhcnNlKFcpKTt2YXIgcT1HLnBvaW50KFdbMF0sV1sxXSxVKTtpZighV1syXSlyZXR1cm4gcTtmdW5jdGlvbiB0ZShpZSl7cmV0dXJuIEcucG9pbnQoaWVbMF0saWVbMV0sVSl9dmFyIG5lPVdbMl07cmV0dXJuIHEucHJlY29tcHV0ZWQ9e2JldGE6bnVsbCxkb3VibGVzOm5lLmRvdWJs'@;
put 'ZXMmJntzdGVwOm5lLmRvdWJsZXMuc3RlcCxwb2ludHM6W3FdLmNvbmNhdChuZS5kb3VibGVzLnBvaW50cy5tYXAodGUpKX0sbmFmOm5lLm5hZiYme3duZDpuZS5uYWYud25kLHBvaW50czpbcV0uY29uY2F0KG5lLm5hZi5wb2ludHMubWFwKHRlKSl9fSxxfSxqLnByb3RvdHlwZS5pbnNwZWN0'@;
put 'PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgUG9pbnQgSW5maW5pdHk+IjoiPEVDIFBvaW50IHg6ICIrdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiIHk6ICIrdGhpcy55LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiPiJ9LGoucHJvdG90eXBlLmlz'@;
put 'SW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmZ9LGoucHJvdG90eXBlLmFkZD1mdW5jdGlvbihHKXtpZih0aGlzLmluZilyZXR1cm4gRztpZihHLmluZilyZXR1cm4gdGhpcztpZih0aGlzLmVxKEcpKXJldHVybiB0aGlzLmRibCgpO2lmKHRoaXMubmVnKCkuZXEoRykpcmV0dXJu'@;
put 'IHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTtpZigwPT09dGhpcy54LmNtcChHLngpKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7dmFyIFc9dGhpcy55LnJlZFN1YihHLnkpOzAhPT1XLmNtcG4oMCkmJihXPVcucmVkTXVsKHRoaXMueC5yZWRTdWIoRy54KS5yZWRJbnZt'@;
put 'KCkpKTt2YXIgVT1XLnJlZFNxcigpLnJlZElTdWIodGhpcy54KS5yZWRJU3ViKEcueCkscT1XLnJlZE11bCh0aGlzLngucmVkU3ViKFUpKS5yZWRJU3ViKHRoaXMueSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoVSxxKX0sai5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7aWYodGhpcy5pbmYp'@;
put 'cmV0dXJuIHRoaXM7dmFyIEc9dGhpcy55LnJlZEFkZCh0aGlzLnkpO2lmKDA9PT1HLmNtcG4oMCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgVz10aGlzLmN1cnZlLmEsVT10aGlzLngucmVkU3FyKCkscT1HLnJlZEludm0oKSx0ZT1VLnJlZEFkZChVKS5yZWRJQWRk'@;
put 'KFUpLnJlZElBZGQoVykucmVkTXVsKHEpLG5lPXRlLnJlZFNxcigpLnJlZElTdWIodGhpcy54LnJlZEFkZCh0aGlzLngpKSxpZT10ZS5yZWRNdWwodGhpcy54LnJlZFN1YihuZSkpLnJlZElTdWIodGhpcy55KTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChuZSxpZSl9LGoucHJvdG90eXBlLmdl'@;
put 'dFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54LmZyb21SZWQoKX0sai5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnkuZnJvbVJlZCgpfSxqLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oRyl7cmV0dXJuIEc9bmV3IEooRywxNiksdGhpcy5pc0luZmluaXR5KCk/dGhpczp0'@;
put 'aGlzLl9oYXNEb3VibGVzKEcpP3RoaXMuY3VydmUuX2ZpeGVkTmFmTXVsKHRoaXMsRyk6dGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKFt0aGlzXSxbR10pOnRoaXMuY3VydmUuX3duYWZNdWwodGhpcyxHKX0sai5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKEcs'@;
put 'VyxVKXt2YXIgcT1bdGhpcyxXXSx0ZT1bRyxVXTtyZXR1cm4gdGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKHEsdGUpOnRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxxLHRlLDIpfSxqLnByb3RvdHlwZS5qbXVsQWRkPWZ1bmN0aW9uKEcsVyxVKXt2YXIgcT1bdGhp'@;
put 'cyxXXSx0ZT1bRyxVXTtyZXR1cm4gdGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKHEsdGUsITApOnRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxxLHRlLDIsITApfSxqLnByb3RvdHlwZS5lcT1mdW5jdGlvbihHKXtyZXR1cm4gdGhpcz09PUd8fHRoaXMuaW5mPT09'@;
put 'Ry5pbmYmJih0aGlzLmluZnx8MD09PXRoaXMueC5jbXAoRy54KSYmMD09PXRoaXMueS5jbXAoRy55KSl9LGoucHJvdG90eXBlLm5lZz1mdW5jdGlvbihHKXtpZih0aGlzLmluZilyZXR1cm4gdGhpczt2YXIgVz10aGlzLmN1cnZlLnBvaW50KHRoaXMueCx0aGlzLnkucmVkTmVnKCkpO2lmKEcm'@;
put 'JnRoaXMucHJlY29tcHV0ZWQpe3ZhciBVPXRoaXMucHJlY29tcHV0ZWQscT1mdW5jdGlvbih0ZSl7cmV0dXJuIHRlLm5lZygpfTtXLnByZWNvbXB1dGVkPXtuYWY6VS5uYWYmJnt3bmQ6VS5uYWYud25kLHBvaW50czpVLm5hZi5wb2ludHMubWFwKHEpfSxkb3VibGVzOlUuZG91YmxlcyYme3N0'@;
put 'ZXA6VS5kb3VibGVzLnN0ZXAscG9pbnRzOlUuZG91Ymxlcy5wb2ludHMubWFwKHEpfX19cmV0dXJuIFd9LGoucHJvdG90eXBlLnRvSj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmluZj90aGlzLmN1cnZlLmpwb2ludChudWxsLG51bGwsbnVsbCk6dGhpcy5jdXJ2ZS5qcG9pbnQodGhpcy54LHRo'@;
put 'aXMueSx0aGlzLmN1cnZlLm9uZSl9LEkoVixSLkJhc2VQb2ludCksei5wcm90b3R5cGUuanBvaW50PWZ1bmN0aW9uKEcsVyxVKXtyZXR1cm4gbmV3IFYodGhpcyxHLFcsVSl9LFYucHJvdG90eXBlLnRvUD1mdW5jdGlvbigpe2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzLmN1cnZl'@;
put 'LnBvaW50KG51bGwsbnVsbCk7dmFyIEc9dGhpcy56LnJlZEludm0oKSxXPUcucmVkU3FyKCksVT10aGlzLngucmVkTXVsKFcpLHE9dGhpcy55LnJlZE11bChXKS5yZWRNdWwoRyk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoVSxxKX0sVi5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IHRoaXMuY3VydmUuanBvaW50KHRoaXMueCx0aGlzLnkucmVkTmVnKCksdGhpcy56KX0sVi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKEcpe2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiBHO2lmKEcuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO3ZhciBXPUcuei5yZWRTcXIoKSxVPXRoaXMu'@;
put 'ei5yZWRTcXIoKSxxPXRoaXMueC5yZWRNdWwoVyksdGU9Ry54LnJlZE11bChVKSxuZT10aGlzLnkucmVkTXVsKFcucmVkTXVsKEcueikpLGllPUcueS5yZWRNdWwoVS5yZWRNdWwodGhpcy56KSksbGU9cS5yZWRTdWIodGUpLGRlPW5lLnJlZFN1YihpZSk7aWYoMD09PWxlLmNtcG4oMCkpcmV0'@;
put 'dXJuIDAhPT1kZS5jbXBuKDApP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmRibCgpO3ZhciB1ZT1sZS5yZWRTcXIoKSxjZT11ZS5yZWRNdWwobGUpLFk9cS5yZWRNdWwodWUpLGI9ZGUucmVkU3FyKCkucmVkSUFkZChjZSkucmVkSVN1YihZKS5yZWRJU3ViKFkpLHg9'@;
put 'ZGUucmVkTXVsKFkucmVkSVN1YihiKSkucmVkSVN1YihuZS5yZWRNdWwoY2UpKSxOPXRoaXMuei5yZWRNdWwoRy56KS5yZWRNdWwobGUpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChiLHgsTil9LFYucHJvdG90eXBlLm1peGVkQWRkPWZ1bmN0aW9uKEcpe2lmKHRoaXMuaXNJbmZpbml0eSgp'@;
put 'KXJldHVybiBHLnRvSigpO2lmKEcuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO3ZhciBXPXRoaXMuei5yZWRTcXIoKSxVPXRoaXMueCxxPUcueC5yZWRNdWwoVyksdGU9dGhpcy55LG5lPUcueS5yZWRNdWwoVykucmVkTXVsKHRoaXMueiksaWU9VS5yZWRTdWIocSksbGU9dGUucmVkU3ViKG5l'@;
put 'KTtpZigwPT09aWUuY21wbigwKSlyZXR1cm4gMCE9PWxlLmNtcG4oMCk/dGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpOnRoaXMuZGJsKCk7dmFyIGRlPWllLnJlZFNxcigpLHVlPWRlLnJlZE11bChpZSksY2U9VS5yZWRNdWwoZGUpLFk9bGUucmVkU3FyKCkucmVkSUFkZCh1ZSku'@;
put 'cmVkSVN1YihjZSkucmVkSVN1YihjZSksYj1sZS5yZWRNdWwoY2UucmVkSVN1YihZKSkucmVkSVN1Yih0ZS5yZWRNdWwodWUpKSx4PXRoaXMuei5yZWRNdWwoaWUpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChZLGIseCl9LFYucHJvdG90eXBlLmRibHA9ZnVuY3Rpb24oRyl7aWYoMD09PUcp'@;
put 'cmV0dXJuIHRoaXM7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXM7aWYoIUcpcmV0dXJuIHRoaXMuZGJsKCk7dmFyIFc7aWYodGhpcy5jdXJ2ZS56ZXJvQXx8dGhpcy5jdXJ2ZS50aHJlZUEpe3ZhciBVPXRoaXM7Zm9yKFc9MDtXPEc7VysrKVU9VS5kYmwoKTtyZXR1cm4gVX12YXIg'@;
put 'cT10aGlzLmN1cnZlLmEsdGU9dGhpcy5jdXJ2ZS50aW52LG5lPXRoaXMueCxpZT10aGlzLnksbGU9dGhpcy56LGRlPWxlLnJlZFNxcigpLnJlZFNxcigpLHVlPWllLnJlZEFkZChpZSk7Zm9yKFc9MDtXPEc7VysrKXt2YXIgY2U9bmUucmVkU3FyKCksWT11ZS5yZWRTcXIoKSxiPVkucmVkU3Fy'@;
put 'KCkseD1jZS5yZWRBZGQoY2UpLnJlZElBZGQoY2UpLnJlZElBZGQocS5yZWRNdWwoZGUpKSxOPW5lLnJlZE11bChZKSxGPXgucmVkU3FyKCkucmVkSVN1YihOLnJlZEFkZChOKSksZz1OLnJlZElTdWIoRiksQz14LnJlZE11bChnKTtDPUMucmVkSUFkZChDKS5yZWRJU3ViKGIpO3ZhciBNPXVl'@;
put 'LnJlZE11bChsZSk7VysxPEcmJihkZT1kZS5yZWRNdWwoYikpLG5lPUYsbGU9TSx1ZT1DfXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChuZSx1ZS5yZWRNdWwodGUpLGxlKX0sVi5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5jdXJ2'@;
put 'ZS56ZXJvQT90aGlzLl96ZXJvRGJsKCk6dGhpcy5jdXJ2ZS50aHJlZUE/dGhpcy5fdGhyZWVEYmwoKTp0aGlzLl9kYmwoKX0sVi5wcm90b3R5cGUuX3plcm9EYmw9ZnVuY3Rpb24oKXt2YXIgRyxXLFU7aWYodGhpcy56T25lKXt2YXIgcT10aGlzLngucmVkU3FyKCksdGU9dGhpcy55LnJlZFNx'@;
put 'cigpLG5lPXRlLnJlZFNxcigpLGllPXRoaXMueC5yZWRBZGQodGUpLnJlZFNxcigpLnJlZElTdWIocSkucmVkSVN1YihuZSk7aWU9aWUucmVkSUFkZChpZSk7dmFyIGxlPXEucmVkQWRkKHEpLnJlZElBZGQocSksZGU9bGUucmVkU3FyKCkucmVkSVN1YihpZSkucmVkSVN1YihpZSksdWU9bmUu'@;
put 'cmVkSUFkZChuZSk7dWU9KHVlPXVlLnJlZElBZGQodWUpKS5yZWRJQWRkKHVlKSxHPWRlLFc9bGUucmVkTXVsKGllLnJlZElTdWIoZGUpKS5yZWRJU3ViKHVlKSxVPXRoaXMueS5yZWRBZGQodGhpcy55KX1lbHNle3ZhciBjZT10aGlzLngucmVkU3FyKCksWT10aGlzLnkucmVkU3FyKCksYj1Z'@;
put 'LnJlZFNxcigpLHg9dGhpcy54LnJlZEFkZChZKS5yZWRTcXIoKS5yZWRJU3ViKGNlKS5yZWRJU3ViKGIpO3g9eC5yZWRJQWRkKHgpO3ZhciBOPWNlLnJlZEFkZChjZSkucmVkSUFkZChjZSksRj1OLnJlZFNxcigpLGc9Yi5yZWRJQWRkKGIpO2c9KGc9Zy5yZWRJQWRkKGcpKS5yZWRJQWRkKGcp'@;
put 'LEc9Ri5yZWRJU3ViKHgpLnJlZElTdWIoeCksVz1OLnJlZE11bCh4LnJlZElTdWIoRykpLnJlZElTdWIoZyksVT0oVT10aGlzLnkucmVkTXVsKHRoaXMueikpLnJlZElBZGQoVSl9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KEcsVyxVKX0sVi5wcm90b3R5cGUuX3RocmVlRGJsPWZ1bmN0aW9u'@;
put 'KCl7dmFyIEcsVyxVO2lmKHRoaXMuek9uZSl7dmFyIHE9dGhpcy54LnJlZFNxcigpLHRlPXRoaXMueS5yZWRTcXIoKSxuZT10ZS5yZWRTcXIoKSxpZT10aGlzLngucmVkQWRkKHRlKS5yZWRTcXIoKS5yZWRJU3ViKHEpLnJlZElTdWIobmUpO2llPWllLnJlZElBZGQoaWUpO3ZhciBsZT1xLnJl'@;
put 'ZEFkZChxKS5yZWRJQWRkKHEpLnJlZElBZGQodGhpcy5jdXJ2ZS5hKSxkZT1sZS5yZWRTcXIoKS5yZWRJU3ViKGllKS5yZWRJU3ViKGllKTtHPWRlO3ZhciB1ZT1uZS5yZWRJQWRkKG5lKTt1ZT0odWU9dWUucmVkSUFkZCh1ZSkpLnJlZElBZGQodWUpLFc9bGUucmVkTXVsKGllLnJlZElTdWIo'@;
put 'ZGUpKS5yZWRJU3ViKHVlKSxVPXRoaXMueS5yZWRBZGQodGhpcy55KX1lbHNle3ZhciBjZT10aGlzLnoucmVkU3FyKCksWT10aGlzLnkucmVkU3FyKCksYj10aGlzLngucmVkTXVsKFkpLHg9dGhpcy54LnJlZFN1YihjZSkucmVkTXVsKHRoaXMueC5yZWRBZGQoY2UpKTt4PXgucmVkQWRkKHgp'@;
put 'LnJlZElBZGQoeCk7dmFyIE49Yi5yZWRJQWRkKGIpLEY9KE49Ti5yZWRJQWRkKE4pKS5yZWRBZGQoTik7Rz14LnJlZFNxcigpLnJlZElTdWIoRiksVT10aGlzLnkucmVkQWRkKHRoaXMueikucmVkU3FyKCkucmVkSVN1YihZKS5yZWRJU3ViKGNlKTt2YXIgZz1ZLnJlZFNxcigpO2c9KGc9KGc9'@;
put 'Zy5yZWRJQWRkKGcpKS5yZWRJQWRkKGcpKS5yZWRJQWRkKGcpLFc9eC5yZWRNdWwoTi5yZWRJU3ViKEcpKS5yZWRJU3ViKGcpfXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChHLFcsVSl9LFYucHJvdG90eXBlLl9kYmw9ZnVuY3Rpb24oKXt2YXIgRz10aGlzLmN1cnZlLmEsVz10aGlzLngsVT10'@;
put 'aGlzLnkscT10aGlzLnosdGU9cS5yZWRTcXIoKS5yZWRTcXIoKSxuZT1XLnJlZFNxcigpLGllPVUucmVkU3FyKCksbGU9bmUucmVkQWRkKG5lKS5yZWRJQWRkKG5lKS5yZWRJQWRkKEcucmVkTXVsKHRlKSksZGU9Vy5yZWRBZGQoVyksdWU9KGRlPWRlLnJlZElBZGQoZGUpKS5yZWRNdWwoaWUp'@;
put 'LGNlPWxlLnJlZFNxcigpLnJlZElTdWIodWUucmVkQWRkKHVlKSksWT11ZS5yZWRJU3ViKGNlKSxiPWllLnJlZFNxcigpO2I9KGI9KGI9Yi5yZWRJQWRkKGIpKS5yZWRJQWRkKGIpKS5yZWRJQWRkKGIpO3ZhciB4PWxlLnJlZE11bChZKS5yZWRJU3ViKGIpLE49VS5yZWRBZGQoVSkucmVkTXVs'@;
put 'KHEpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChjZSx4LE4pfSxWLnByb3RvdHlwZS50cnBsPWZ1bmN0aW9uKCl7aWYoIXRoaXMuY3VydmUuemVyb0EpcmV0dXJuIHRoaXMuZGJsKCkuYWRkKHRoaXMpO3ZhciBHPXRoaXMueC5yZWRTcXIoKSxXPXRoaXMueS5yZWRTcXIoKSxVPXRoaXMuei5y'@;
put 'ZWRTcXIoKSxxPVcucmVkU3FyKCksdGU9Ry5yZWRBZGQoRykucmVkSUFkZChHKSxuZT10ZS5yZWRTcXIoKSxpZT10aGlzLngucmVkQWRkKFcpLnJlZFNxcigpLnJlZElTdWIoRykucmVkSVN1YihxKSxsZT0oaWU9KGllPShpZT1pZS5yZWRJQWRkKGllKSkucmVkQWRkKGllKS5yZWRJQWRkKGll'@;
put 'KSkucmVkSVN1YihuZSkpLnJlZFNxcigpLGRlPXEucmVkSUFkZChxKTtkZT0oZGU9KGRlPWRlLnJlZElBZGQoZGUpKS5yZWRJQWRkKGRlKSkucmVkSUFkZChkZSk7dmFyIHVlPXRlLnJlZElBZGQoaWUpLnJlZFNxcigpLnJlZElTdWIobmUpLnJlZElTdWIobGUpLnJlZElTdWIoZGUpLGNlPVcu'@;
put 'cmVkTXVsKHVlKTtjZT0oY2U9Y2UucmVkSUFkZChjZSkpLnJlZElBZGQoY2UpO3ZhciBZPXRoaXMueC5yZWRNdWwobGUpLnJlZElTdWIoY2UpO1k9KFk9WS5yZWRJQWRkKFkpKS5yZWRJQWRkKFkpO3ZhciBiPXRoaXMueS5yZWRNdWwodWUucmVkTXVsKGRlLnJlZElTdWIodWUpKS5yZWRJU3Vi'@;
put 'KGllLnJlZE11bChsZSkpKTtiPShiPShiPWIucmVkSUFkZChiKSkucmVkSUFkZChiKSkucmVkSUFkZChiKTt2YXIgeD10aGlzLnoucmVkQWRkKGllKS5yZWRTcXIoKS5yZWRJU3ViKFUpLnJlZElTdWIobGUpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChZLGIseCl9LFYucHJvdG90eXBlLm11'@;
put 'bD1mdW5jdGlvbihHLFcpe3JldHVybiBHPW5ldyBKKEcsVyksdGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLEcpfSxWLnByb3RvdHlwZS5lcT1mdW5jdGlvbihHKXtpZigiYWZmaW5lIj09PUcudHlwZSlyZXR1cm4gdGhpcy5lcShHLnRvSigpKTtpZih0aGlzPT09RylyZXR1cm4hMDt2YXIgVz10'@;
put 'aGlzLnoucmVkU3FyKCksVT1HLnoucmVkU3FyKCk7aWYoMCE9PXRoaXMueC5yZWRNdWwoVSkucmVkSVN1YihHLngucmVkTXVsKFcpKS5jbXBuKDApKXJldHVybiExO3ZhciBxPVcucmVkTXVsKHRoaXMueiksdGU9VS5yZWRNdWwoRy56KTtyZXR1cm4gMD09PXRoaXMueS5yZWRNdWwodGUpLnJl'@;
put 'ZElTdWIoRy55LnJlZE11bChxKSkuY21wbigwKX0sVi5wcm90b3R5cGUuZXFYVG9QPWZ1bmN0aW9uKEcpe3ZhciBXPXRoaXMuei5yZWRTcXIoKSxVPUcudG9SZWQodGhpcy5jdXJ2ZS5yZWQpLnJlZE11bChXKTtpZigwPT09dGhpcy54LmNtcChVKSlyZXR1cm4hMDtmb3IodmFyIHE9Ry5jbG9u'@;
put 'ZSgpLHRlPXRoaXMuY3VydmUucmVkTi5yZWRNdWwoVyk7Oyl7aWYocS5pYWRkKHRoaXMuY3VydmUubikscS5jbXAodGhpcy5jdXJ2ZS5wKT49MClyZXR1cm4hMTtpZihVLnJlZElBZGQodGUpLDA9PT10aGlzLnguY21wKFUpKXJldHVybiEwfX0sVi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlv'@;
put 'bigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIEpQb2ludCBJbmZpbml0eT4iOiI8RUMgSlBvaW50IHg6ICIrdGhpcy54LnRvU3RyaW5nKDE2LDIpKyIgeTogIit0aGlzLnkudG9TdHJpbmcoMTYsMikrIiB6OiAiK3RoaXMuei50b1N0cmluZygxNiwyKSsiPiJ9LFYucHJvdG90eXBl'@;
put 'LmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuei5jbXBuKDApfX0sNTQyNzooSCxCLEwpPT57InVzZSBzdHJpY3QiO3ZhciBLLEo9QixJPUwoMzcxNSksUj1MKDgyNTQpLEU9TCg5NTMpLmFzc2VydDtmdW5jdGlvbiB6KFYpe3RoaXMuY3VydmU9InNob3J0Ij09PVYudHlw'@;
put 'ZT9uZXcgUi5zaG9ydChWKToiZWR3YXJkcyI9PT1WLnR5cGU/bmV3IFIuZWR3YXJkcyhWKTpuZXcgUi5tb250KFYpLHRoaXMuZz10aGlzLmN1cnZlLmcsdGhpcy5uPXRoaXMuY3VydmUubix0aGlzLmhhc2g9Vi5oYXNoLEUodGhpcy5nLnZhbGlkYXRlKCksIkludmFsaWQgY3VydmUiKSxFKHRo'@;
put 'aXMuZy5tdWwodGhpcy5uKS5pc0luZmluaXR5KCksIkludmFsaWQgY3VydmUsIEcqTiAhPSBPIil9ZnVuY3Rpb24gaihWLEcpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLFYse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3ZhciBXPW5ldyB6KEcpO3JldHVy'@;
put 'biBPYmplY3QuZGVmaW5lUHJvcGVydHkoSixWLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpXfSksV319KX1KLlByZXNldEN1cnZlPXosaigicDE5MiIse3R5cGU6InNob3J0IixwcmltZToicDE5MiIscDoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUg'@;
put 'ZmZmZmZmZmYgZmZmZmZmZmYiLGE6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZjIixiOiI2NDIxMDUxOSBlNTljODBlNyAwZmE3ZTlhYiA3MjI0MzA0OSBmZWI4ZGVlYyBjMTQ2YjliMSIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYg'@;
put 'OTlkZWY4MzYgMTQ2YmM5YjEgYjRkMjI4MzEiLGhhc2g6SS5zaGEyNTYsZ1JlZDohMSxnOlsiMTg4ZGE4MGUgYjAzMDkwZjYgN2NiZjIwZWIgNDNhMTg4MDAgZjRmZjBhZmQgODJmZjEwMTIiLCIwNzE5MmI5NSBmZmM4ZGE3OCA2MzEwMTFlZCA2YjI0Y2RkNSA3M2Y5NzdhMSAxZTc5NDgxMSJd'@;
put 'fSksaigicDIyNCIse3R5cGU6InNob3J0IixwcmltZToicDIyNCIscDoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiLGE6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIGZm'@;
put 'ZmZmZmZlIixiOiJiNDA1MGE4NSAwYzA0YjNhYiBmNTQxMzI1NiA1MDQ0YjBiNyBkN2JmZDhiYSAyNzBiMzk0MyAyMzU1ZmZiNCIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZjE2YTIgZTBiOGYwM2UgMTNkZDI5NDUgNWM1YzJhM2QiLGhhc2g6SS5zaGEyNTYsZ1JlZDohMSxn'@;
put 'OlsiYjcwZTBjYmQgNmJiNGJmN2YgMzIxMzkwYjkgNGEwM2MxZDMgNTZjMjExMjIgMzQzMjgwZDYgMTE1YzFkMjEiLCJiZDM3NjM4OCBiNWY3MjNmYiA0YzIyZGZlNiBjZDQzNzVhMCA1YTA3NDc2NCA0NGQ1ODE5OSA4NTAwN2UzNCJdfSksaigicDI1NiIse3R5cGU6InNob3J0IixwcmltZTpu'@;
put 'dWxsLHA6ImZmZmZmZmZmIDAwMDAwMDAxIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIixhOiJmZmZmZmZmZiAwMDAwMDAwMSAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmYyIsYjoiNWFjNjM1'@;
put 'ZDggYWEzYTkzZTcgYjNlYmJkNTUgNzY5ODg2YmMgNjUxZDA2YjAgY2M1M2IwZjYgM2JjZTNjM2UgMjdkMjYwNGIiLG46ImZmZmZmZmZmIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGJjZTZmYWFkIGE3MTc5ZTg0IGYzYjljYWMyIGZjNjMyNTUxIixoYXNoOkkuc2hhMjU2LGdSZWQ6ITEs'@;
put 'ZzpbIjZiMTdkMWYyIGUxMmM0MjQ3IGY4YmNlNmU1IDYzYTQ0MGYyIDc3MDM3ZDgxIDJkZWIzM2EwIGY0YTEzOTQ1IGQ4OThjMjk2IiwiNGZlMzQyZTIgZmUxYTdmOWIgOGVlN2ViNGEgN2MwZjllMTYgMmJjZTMzNTcgNmIzMTVlY2UgY2JiNjQwNjggMzdiZjUxZjUiXX0pLGooInAzODQiLHt0'@;
put 'eXBlOiJzaG9ydCIscHJpbWU6bnVsbCxwOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiIsYToiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYg'@;
put 'ZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmMiLGI6ImIzMzEyZmE3IGUyM2VlN2U0IDk4OGUwNTZiIGUzZjgyZDE5IDE4MWQ5YzZlIGZlODE0MTEyIDAzMTQwODhmIDUwMTM4NzVhIGM2NTYzOThk'@;
put 'IDhhMmVkMTlkIDJhODVjOGVkIGQzZWMyYWVmIixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBjNzYzNGQ4MSBmNDM3MmRkZiA1ODFhMGRiMiA0OGIwYTc3YSBlY2VjMTk2YSBjY2M1Mjk3MyIsaGFzaDpJLnNoYTM4NCxnUmVkOiExLGc6'@;
put 'WyJhYTg3Y2EyMiBiZThiMDUzNyA4ZWIxYzcxZSBmMzIwYWQ3NCA2ZTFkM2I2MiA4YmE3OWI5OCA1OWY3NDFlMCA4MjU0MmEzOCA1NTAyZjI1ZCBiZjU1Mjk2YyAzYTU0NWUzOCA3Mjc2MGFiNyIsIjM2MTdkZTRhIDk2MjYyYzZmIDVkOWU5OGJmIDkyOTJkYzI5IGY4ZjQxZGJkIDI4OWExNDdj'@;
put 'IGU5ZGEzMTEzIGI1ZjBiOGMwIDBhNjBiMWNlIDFkN2U4MTlkIDdhNDMxZDdjIDkwZWEwZTVmIl19KSxqKCJwNTIxIix7dHlwZToic2hvcnQiLHByaW1lOm51bGwscDoiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZm'@;
put 'ZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYiLGE6IjAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZm'@;
put 'ZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZjIixiOiIwMDAwMDA1MSA5NTNlYjk2MSA4ZTFjOWExZiA5MjlhMjFhMCBiNjg1NDBlZSBhMmRhNzI1YiA5OWIzMTVmMyBiOGI0ODk5MSA4ZWYxMDllMSA1NjE5'@;
put 'Mzk1MSBlYzdlOTM3YiAxNjUyYzBiZCAzYmIxYmYwNyAzNTczZGY4OCAzZDJjMzRmMSBlZjQ1MWZkNCA2YjUwM2YwMCIsbjoiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmEgNTE4Njg3ODMgYmYy'@;
put 'Zjk2NmIgN2ZjYzAxNDggZjcwOWE1ZDAgM2JiNWM5YjggODk5YzQ3YWUgYmI2ZmI3MWUgOTEzODY0MDkiLGhhc2g6SS5zaGE1MTIsZ1JlZDohMSxnOlsiMDAwMDAwYzYgODU4ZTA2YjcgMDQwNGU5Y2QgOWUzZWNiNjYgMjM5NWI0NDIgOWM2NDgxMzkgMDUzZmI1MjEgZjgyOGFmNjAgNmI0ZDNk'@;
put 'YmEgYTE0YjVlNzcgZWZlNzU5MjggZmUxZGMxMjcgYTJmZmE4ZGUgMzM0OGIzYzEgODU2YTQyOWIgZjk3ZTdlMzEgYzJlNWJkNjYiLCIwMDAwMDExOCAzOTI5NmE3OCA5YTNiYzAwNCA1YzhhNWZiNCAyYzdkMWJkOSA5OGY1NDQ0OSA1NzliNDQ2OCAxN2FmYmQxNyAyNzNlNjYyYyA5N2VlNzI5'@;
put 'OSA1ZWY0MjY0MCBjNTUwYjkwMSAzZmFkMDc2MSAzNTNjNzA4NiBhMjcyYzI0MCA4OGJlOTQ3NiA5ZmQxNjY1MCJdfSksaigiY3VydmUyNTUxOSIse3R5cGU6Im1vbnQiLHByaW1lOiJwMjU1MTkiLHA6IjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZm'@;
put 'IGZmZmZmZmZmZmZmZmZmZWQiLGE6Ijc2ZDA2IixiOiIxIixuOiIxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgMTRkZWY5ZGVhMmY3OWNkNiA1ODEyNjMxYTVjZjVkM2VkIixoYXNoOkkuc2hhMjU2LGdSZWQ6ITEsZzpbIjkiXX0pLGooImVkMjU1MTkiLHt0eXBlOiJlZHdhcmRz'@;
put 'IixwcmltZToicDI1NTE5IixwOiI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIixhOiItMSIsYzoiMSIsZDoiNTIwMzZjZWUyYjZmZmU3MyA4Y2M3NDA3OTc3NzllODk4IDAwNzAwYTRkNDE0MWQ4YWIgNzVlYjRkY2Ex'@;
put 'MzU5NzhhMyIsbjoiMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIDE0ZGVmOWRlYTJmNzljZDYgNTgxMjYzMWE1Y2Y1ZDNlZCIsaGFzaDpJLnNoYTI1NixnUmVkOiExLGc6WyIyMTY5MzZkM2NkNmU1M2ZlYzBhNGUyMzFmZGQ2ZGM1YzY5MmNjNzYwOTUyNWE3YjJjOTU2MmQ2MDhm'@;
put 'MjVkNTFhIiwiNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY1OCJdfSk7dHJ5e0s9TCgxMDM3KX1jYXRjaHtLPXZvaWQgMH1qKCJzZWNwMjU2azEiLHt0eXBlOiJzaG9ydCIscHJpbWU6ImsyNTYiLHA6ImZmZmZmZmZmIGZmZmZm'@;
put 'ZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIixhOiIwIixiOiI3IixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBiYWFlZGNlNiBhZjQ4YTAzYiBiZmQyNWU4YyBkMDM2NDE0MSIsaDoiMSIsaGFzaDpJLnNoYTI1'@;
put 'NixiZXRhOiI3YWU5NmEyYjY1N2MwNzEwNmU2NDQ3OWVhYzM0MzRlOTljZjA0OTc1MTJmNTg5OTVjMTM5NmMyODcxOTUwMWVlIixsYW1iZGE6IjUzNjNhZDRjYzA1YzMwZTBhNTI2MWMwMjg4MTI2NDVhMTIyZTIyZWEyMDgxNjY3OGRmMDI5NjdjMWIyM2JkNzIiLGJhc2lzOlt7YToiMzA4NmQy'@;
put 'MjFhN2Q0NmJjZGU4NmM5MGU0OTI4NGViMTUiLGI6Ii1lNDQzN2VkNjAxMGU4ODI4NmY1NDdmYTkwYWJmZTRjMyJ9LHthOiIxMTRjYTUwZjdhOGUyZjNmNjU3YzExMDhkOWQ0NGNmZDgiLGI6IjMwODZkMjIxYTdkNDZiY2RlODZjOTBlNDkyODRlYjE1In1dLGdSZWQ6ITEsZzpbIjc5YmU2Njdl'@;
put 'ZjlkY2JiYWM1NWEwNjI5NWNlODcwYjA3MDI5YmZjZGIyZGNlMjhkOTU5ZjI4MTViMTZmODE3OTgiLCI0ODNhZGE3NzI2YTNjNDY1NWRhNGZiZmMwZTExMDhhOGZkMTdiNDQ4YTY4NTU0MTk5YzQ3ZDA4ZmZiMTBkNGI4IixLXX0pfSw3OTU0OihILEIsTCk9PnsidXNlIHN0cmljdCI7dmFyIEs9'@;
put 'TCgzNzg1KSxKPUwoMjE1NiksST1MKDk1MyksUj1MKDU0MjcpLEU9TCg5OTMxKSx6PUkuYXNzZXJ0LGo9TCgxMjUxKSxWPUwoNjExKTtmdW5jdGlvbiBHKFcpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEcpKXJldHVybiBuZXcgRyhXKTsic3RyaW5nIj09dHlwZW9mIFcmJih6KE9iamVjdC5wcm90'@;
put 'b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChSLFcpLCJVbmtub3duIGN1cnZlICIrVyksVz1SW1ddKSxXIGluc3RhbmNlb2YgUi5QcmVzZXRDdXJ2ZSYmKFc9e2N1cnZlOld9KSx0aGlzLmN1cnZlPVcuY3VydmUuY3VydmUsdGhpcy5uPXRoaXMuY3VydmUubix0aGlzLm5oPXRoaXMubi51c2hy'@;
put 'bigxKSx0aGlzLmc9dGhpcy5jdXJ2ZS5nLHRoaXMuZz1XLmN1cnZlLmcsdGhpcy5nLnByZWNvbXB1dGUoVy5jdXJ2ZS5uLmJpdExlbmd0aCgpKzEpLHRoaXMuaGFzaD1XLmhhc2h8fFcuY3VydmUuaGFzaH1ILmV4cG9ydHM9RyxHLnByb3RvdHlwZS5rZXlQYWlyPWZ1bmN0aW9uKFcpe3JldHVy'@;
put 'biBuZXcgaih0aGlzLFcpfSxHLnByb3RvdHlwZS5rZXlGcm9tUHJpdmF0ZT1mdW5jdGlvbihXLFUpe3JldHVybiBqLmZyb21Qcml2YXRlKHRoaXMsVyxVKX0sRy5wcm90b3R5cGUua2V5RnJvbVB1YmxpYz1mdW5jdGlvbihXLFUpe3JldHVybiBqLmZyb21QdWJsaWModGhpcyxXLFUpfSxHLnBy'@;
put 'b3RvdHlwZS5nZW5LZXlQYWlyPWZ1bmN0aW9uKFcpe1d8fChXPXt9KTtmb3IodmFyIFU9bmV3IEooe2hhc2g6dGhpcy5oYXNoLHBlcnM6Vy5wZXJzLHBlcnNFbmM6Vy5wZXJzRW5jfHwidXRmOCIsZW50cm9weTpXLmVudHJvcHl8fEUodGhpcy5oYXNoLmhtYWNTdHJlbmd0aCksZW50cm9weUVu'@;
put 'YzpXLmVudHJvcHkmJlcuZW50cm9weUVuY3x8InV0ZjgiLG5vbmNlOnRoaXMubi50b0FycmF5KCl9KSxxPXRoaXMubi5ieXRlTGVuZ3RoKCksdGU9dGhpcy5uLnN1YihuZXcgSygyKSk7Oyl7dmFyIG5lPW5ldyBLKFUuZ2VuZXJhdGUocSkpO2lmKCEobmUuY21wKHRlKT4wKSlyZXR1cm4gbmUu'@;
put 'aWFkZG4oMSksdGhpcy5rZXlGcm9tUHJpdmF0ZShuZSl9fSxHLnByb3RvdHlwZS5fdHJ1bmNhdGVUb049ZnVuY3Rpb24oVyxVKXt2YXIgcT04KlcuYnl0ZUxlbmd0aCgpLXRoaXMubi5iaXRMZW5ndGgoKTtyZXR1cm4gcT4wJiYoVz1XLnVzaHJuKHEpKSwhVSYmVy5jbXAodGhpcy5uKT49MD9X'@;
put 'LnN1Yih0aGlzLm4pOld9LEcucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oVyxVLHEsdGUpeyJvYmplY3QiPT10eXBlb2YgcSYmKHRlPXEscT1udWxsKSx0ZXx8KHRlPXt9KSxVPXRoaXMua2V5RnJvbVByaXZhdGUoVSxxKSxXPXRoaXMuX3RydW5jYXRlVG9OKG5ldyBLKFcsMTYpKTtmb3IodmFy'@;
put 'IG5lPXRoaXMubi5ieXRlTGVuZ3RoKCksaWU9VS5nZXRQcml2YXRlKCkudG9BcnJheSgiYmUiLG5lKSxsZT1XLnRvQXJyYXkoImJlIixuZSksZGU9bmV3IEooe2hhc2g6dGhpcy5oYXNoLGVudHJvcHk6aWUsbm9uY2U6bGUscGVyczp0ZS5wZXJzLHBlcnNFbmM6dGUucGVyc0VuY3x8InV0Zjgi'@;
put 'fSksdWU9dGhpcy5uLnN1YihuZXcgSygxKSksY2U9MDs7Y2UrKyl7dmFyIFk9dGUuaz90ZS5rKGNlKTpuZXcgSyhkZS5nZW5lcmF0ZSh0aGlzLm4uYnl0ZUxlbmd0aCgpKSk7aWYoISgoWT10aGlzLl90cnVuY2F0ZVRvTihZLCEwKSkuY21wbigxKTw9MHx8WS5jbXAodWUpPj0wKSl7dmFyIGI9'@;
put 'dGhpcy5nLm11bChZKTtpZighYi5pc0luZmluaXR5KCkpe3ZhciB4PWIuZ2V0WCgpLE49eC51bW9kKHRoaXMubik7aWYoMCE9PU4uY21wbigwKSl7dmFyIEY9WS5pbnZtKHRoaXMubikubXVsKE4ubXVsKFUuZ2V0UHJpdmF0ZSgpKS5pYWRkKFcpKTtpZigwIT09KEY9Ri51bW9kKHRoaXMubikp'@;
put 'LmNtcG4oMCkpe3ZhciBnPShiLmdldFkoKS5pc09kZCgpPzE6MCl8KDAhPT14LmNtcChOKT8yOjApO3JldHVybiB0ZS5jYW5vbmljYWwmJkYuY21wKHRoaXMubmgpPjAmJihGPXRoaXMubi5zdWIoRiksZ149MSksbmV3IFYoe3I6TixzOkYscmVjb3ZlcnlQYXJhbTpnfSl9fX19fX0sRy5wcm90'@;
put 'b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKFcsVSxxLHRlKXtXPXRoaXMuX3RydW5jYXRlVG9OKG5ldyBLKFcsMTYpKSxxPXRoaXMua2V5RnJvbVB1YmxpYyhxLHRlKTt2YXIgbmU9KFU9bmV3IFYoVSwiaGV4IikpLnIsaWU9VS5zO2lmKG5lLmNtcG4oMSk8MHx8bmUuY21wKHRoaXMubik+PTB8fGll'@;
put 'LmNtcG4oMSk8MHx8aWUuY21wKHRoaXMubik+PTApcmV0dXJuITE7dmFyIGxlLGRlPWllLmludm0odGhpcy5uKSx1ZT1kZS5tdWwoVykudW1vZCh0aGlzLm4pLGNlPWRlLm11bChuZSkudW1vZCh0aGlzLm4pO3JldHVybiB0aGlzLmN1cnZlLl9tYXh3ZWxsVHJpY2s/IShsZT10aGlzLmcuam11'@;
put 'bEFkZCh1ZSxxLmdldFB1YmxpYygpLGNlKSkuaXNJbmZpbml0eSgpJiZsZS5lcVhUb1AobmUpOiEobGU9dGhpcy5nLm11bEFkZCh1ZSxxLmdldFB1YmxpYygpLGNlKSkuaXNJbmZpbml0eSgpJiYwPT09bGUuZ2V0WCgpLnVtb2QodGhpcy5uKS5jbXAobmUpfSxHLnByb3RvdHlwZS5yZWNvdmVy'@;
put 'UHViS2V5PWZ1bmN0aW9uKFcsVSxxLHRlKXt6KCgzJnEpPT09cSwiVGhlIHJlY292ZXJ5IHBhcmFtIGlzIG1vcmUgdGhhbiB0d28gYml0cyIpLFU9bmV3IFYoVSx0ZSk7dmFyIG5lPXRoaXMubixpZT1uZXcgSyhXKSxsZT1VLnIsZGU9VS5zLHVlPTEmcSxjZT1xPj4xO2lmKGxlLmNtcCh0aGlz'@;
put 'LmN1cnZlLnAudW1vZCh0aGlzLmN1cnZlLm4pKT49MCYmY2UpdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gZmluZCBzZW5jb25kIGtleSBjYW5kaW5hdGUiKTtsZT10aGlzLmN1cnZlLnBvaW50RnJvbVgoY2U/bGUuYWRkKHRoaXMuY3VydmUubik6bGUsdWUpO3ZhciBZPVUuci5pbnZtKG5l'@;
put 'KSxiPW5lLnN1YihpZSkubXVsKFkpLnVtb2QobmUpLHg9ZGUubXVsKFkpLnVtb2QobmUpO3JldHVybiB0aGlzLmcubXVsQWRkKGIsbGUseCl9LEcucHJvdG90eXBlLmdldEtleVJlY292ZXJ5UGFyYW09ZnVuY3Rpb24oVyxVLHEsdGUpe2lmKG51bGwhPT0oVT1uZXcgVihVLHRlKSkucmVjb3Zl'@;
put 'cnlQYXJhbSlyZXR1cm4gVS5yZWNvdmVyeVBhcmFtO2Zvcih2YXIgbmU9MDtuZTw0O25lKyspe3ZhciBpZTt0cnl7aWU9dGhpcy5yZWNvdmVyUHViS2V5KFcsVSxuZSl9Y2F0Y2h7Y29udGludWV9aWYoaWUuZXEocSkpcmV0dXJuIG5lfXRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIGZpbmQg'@;
put 'dmFsaWQgcmVjb3ZlcnkgZmFjdG9yIil9fSwxMjUxOihILEIsTCk9PnsidXNlIHN0cmljdCI7dmFyIEs9TCgzNzg1KSxKPUwoOTUzKS5hc3NlcnQ7ZnVuY3Rpb24gSShSLEUpe3RoaXMuZWM9Uix0aGlzLnByaXY9bnVsbCx0aGlzLnB1Yj1udWxsLEUucHJpdiYmdGhpcy5faW1wb3J0UHJpdmF0'@;
put 'ZShFLnByaXYsRS5wcml2RW5jKSxFLnB1YiYmdGhpcy5faW1wb3J0UHVibGljKEUucHViLEUucHViRW5jKX1ILmV4cG9ydHM9SSxJLmZyb21QdWJsaWM9ZnVuY3Rpb24oUixFLHope3JldHVybiBFIGluc3RhbmNlb2YgST9FOm5ldyBJKFIse3B1YjpFLHB1YkVuYzp6fSl9LEkuZnJvbVByaXZh'@;
put 'dGU9ZnVuY3Rpb24oUixFLHope3JldHVybiBFIGluc3RhbmNlb2YgST9FOm5ldyBJKFIse3ByaXY6RSxwcml2RW5jOnp9KX0sSS5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXt2YXIgUj10aGlzLmdldFB1YmxpYygpO3JldHVybiBSLmlzSW5maW5pdHkoKT97cmVzdWx0OiExLHJlYXNv'@;
put 'bjoiSW52YWxpZCBwdWJsaWMga2V5In06Ui52YWxpZGF0ZSgpP1IubXVsKHRoaXMuZWMuY3VydmUubikuaXNJbmZpbml0eSgpP3tyZXN1bHQ6ITAscmVhc29uOm51bGx9OntyZXN1bHQ6ITEscmVhc29uOiJQdWJsaWMga2V5ICogTiAhPSBPIn06e3Jlc3VsdDohMSxyZWFzb246IlB1YmxpYyBr'@;
put 'ZXkgaXMgbm90IGEgcG9pbnQifX0sSS5wcm90b3R5cGUuZ2V0UHVibGljPWZ1bmN0aW9uKFIsRSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBSJiYoRT1SLFI9bnVsbCksdGhpcy5wdWJ8fCh0aGlzLnB1Yj10aGlzLmVjLmcubXVsKHRoaXMucHJpdikpLEU/dGhpcy5wdWIuZW5jb2RlKEUsUik6'@;
put 'dGhpcy5wdWJ9LEkucHJvdG90eXBlLmdldFByaXZhdGU9ZnVuY3Rpb24oUil7cmV0dXJuImhleCI9PT1SP3RoaXMucHJpdi50b1N0cmluZygxNiwyKTp0aGlzLnByaXZ9LEkucHJvdG90eXBlLl9pbXBvcnRQcml2YXRlPWZ1bmN0aW9uKFIsRSl7dGhpcy5wcml2PW5ldyBLKFIsRXx8MTYpLHRo'@;
put 'aXMucHJpdj10aGlzLnByaXYudW1vZCh0aGlzLmVjLmN1cnZlLm4pfSxJLnByb3RvdHlwZS5faW1wb3J0UHVibGljPWZ1bmN0aW9uKFIsRSl7aWYoUi54fHxSLnkpcmV0dXJuIm1vbnQiPT09dGhpcy5lYy5jdXJ2ZS50eXBlP0ooUi54LCJOZWVkIHggY29vcmRpbmF0ZSIpOiJzaG9ydCIhPT10'@;
put 'aGlzLmVjLmN1cnZlLnR5cGUmJiJlZHdhcmRzIiE9PXRoaXMuZWMuY3VydmUudHlwZXx8SihSLngmJlIueSwiTmVlZCBib3RoIHggYW5kIHkgY29vcmRpbmF0ZSIpLHZvaWQodGhpcy5wdWI9dGhpcy5lYy5jdXJ2ZS5wb2ludChSLngsUi55KSk7dGhpcy5wdWI9dGhpcy5lYy5jdXJ2ZS5kZWNv'@;
put 'ZGVQb2ludChSLEUpfSxJLnByb3RvdHlwZS5kZXJpdmU9ZnVuY3Rpb24oUil7cmV0dXJuIFIudmFsaWRhdGUoKXx8SihSLnZhbGlkYXRlKCksInB1YmxpYyBwb2ludCBub3QgdmFsaWRhdGVkIiksUi5tdWwodGhpcy5wcml2KS5nZXRYKCl9LEkucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oUixF'@;
put 'LHope3JldHVybiB0aGlzLmVjLnNpZ24oUix0aGlzLEUseil9LEkucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihSLEUpe3JldHVybiB0aGlzLmVjLnZlcmlmeShSLEUsdGhpcyl9LEkucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4iPEtleSBwcml2OiAiKyh0aGlzLnByaXYm'@;
put 'JnRoaXMucHJpdi50b1N0cmluZygxNiwyKSkrIiBwdWI6ICIrKHRoaXMucHViJiZ0aGlzLnB1Yi5pbnNwZWN0KCkpKyIgPiJ9fSw2MTE6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSz1MKDM3ODUpLEo9TCg5NTMpLEk9Si5hc3NlcnQ7ZnVuY3Rpb24gUihHLFcpe2lmKEcgaW5zdGFuY2Vv'@;
put 'ZiBSKXJldHVybiBHO3RoaXMuX2ltcG9ydERFUihHLFcpfHwoSShHLnImJkcucywiU2lnbmF0dXJlIHdpdGhvdXQgciBvciBzIiksdGhpcy5yPW5ldyBLKEcuciwxNiksdGhpcy5zPW5ldyBLKEcucywxNiksdGhpcy5yZWNvdmVyeVBhcmFtPXZvaWQgMD09PUcucmVjb3ZlcnlQYXJhbT9udWxs'@;
put 'OkcucmVjb3ZlcnlQYXJhbSl9ZnVuY3Rpb24gRSgpe3RoaXMucGxhY2U9MH1mdW5jdGlvbiB6KEcsVyl7dmFyIFU9R1tXLnBsYWNlKytdO2lmKCEoMTI4JlUpKXJldHVybiBVO3ZhciBxPTE1JlU7aWYoMD09PXF8fHE+NClyZXR1cm4hMTtmb3IodmFyIHRlPTAsbmU9MCxpZT1XLnBsYWNlO25l'@;
put 'PHE7bmUrKyxpZSsrKXRlPDw9OCx0ZXw9R1tpZV0sdGU+Pj49MDtyZXR1cm4hKHRlPD0xMjcpJiYoVy5wbGFjZT1pZSx0ZSl9ZnVuY3Rpb24gaihHKXtmb3IodmFyIFc9MCxVPUcubGVuZ3RoLTE7IUdbV10mJiEoMTI4JkdbVysxXSkmJlc8VTspVysrO3JldHVybiAwPT09Vz9HOkcuc2xpY2Uo'@;
put 'Vyl9ZnVuY3Rpb24gVihHLFcpe2lmKFc8MTI4KUcucHVzaChXKTtlbHNle3ZhciBVPTErKE1hdGgubG9nKFcpL01hdGguTE4yPj4+Myk7Zm9yKEcucHVzaCgxMjh8VSk7LS1VOylHLnB1c2goVz4+PihVPDwzKSYyNTUpO0cucHVzaChXKX19SC5leHBvcnRzPVIsUi5wcm90b3R5cGUuX2ltcG9y'@;
put 'dERFUj1mdW5jdGlvbihHLFcpe0c9Si50b0FycmF5KEcsVyk7dmFyIFU9bmV3IEU7aWYoNDghPT1HW1UucGxhY2UrK10pcmV0dXJuITE7dmFyIHE9eihHLFUpO2lmKCExPT09cXx8cStVLnBsYWNlIT09Ry5sZW5ndGh8fDIhPT1HW1UucGxhY2UrK10pcmV0dXJuITE7dmFyIHRlPXooRyxVKTtp'@;
put 'ZighMT09PXRlKXJldHVybiExO3ZhciBuZT1HLnNsaWNlKFUucGxhY2UsdGUrVS5wbGFjZSk7aWYoVS5wbGFjZSs9dGUsMiE9PUdbVS5wbGFjZSsrXSlyZXR1cm4hMTt2YXIgaWU9eihHLFUpO2lmKCExPT09aWV8fEcubGVuZ3RoIT09aWUrVS5wbGFjZSlyZXR1cm4hMTt2YXIgbGU9Ry5zbGlj'@;
put 'ZShVLnBsYWNlLGllK1UucGxhY2UpO2lmKDA9PT1uZVswXSl7aWYoISgxMjgmbmVbMV0pKXJldHVybiExO25lPW5lLnNsaWNlKDEpfWlmKDA9PT1sZVswXSl7aWYoISgxMjgmbGVbMV0pKXJldHVybiExO2xlPWxlLnNsaWNlKDEpfXJldHVybiB0aGlzLnI9bmV3IEsobmUpLHRoaXMucz1uZXcg'@;
put 'SyhsZSksdGhpcy5yZWNvdmVyeVBhcmFtPW51bGwsITB9LFIucHJvdG90eXBlLnRvREVSPWZ1bmN0aW9uKEcpe3ZhciBXPXRoaXMuci50b0FycmF5KCksVT10aGlzLnMudG9BcnJheSgpO2ZvcigxMjgmV1swXSYmKFc9WzBdLmNvbmNhdChXKSksMTI4JlVbMF0mJihVPVswXS5jb25jYXQoVSkp'@;
put 'LFc9aihXKSxVPWooVSk7IShVWzBdfHwxMjgmVVsxXSk7KVU9VS5zbGljZSgxKTt2YXIgcT1bMl07VihxLFcubGVuZ3RoKSwocT1xLmNvbmNhdChXKSkucHVzaCgyKSxWKHEsVS5sZW5ndGgpO3ZhciB0ZT1xLmNvbmNhdChVKSxuZT1bNDhdO3JldHVybiBWKG5lLHRlLmxlbmd0aCksbmU9bmUu'@;
put 'Y29uY2F0KHRlKSxKLmVuY29kZShuZSxHKX19LDU5ODA6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSz1MKDM3MTUpLEo9TCg1NDI3KSxJPUwoOTUzKSxSPUkuYXNzZXJ0LEU9SS5wYXJzZUJ5dGVzLHo9TCg5MDg3KSxqPUwoMzYyMik7ZnVuY3Rpb24gVihHKXtpZihSKCJlZDI1NTE5Ij09'@;
put 'PUcsIm9ubHkgdGVzdGVkIHdpdGggZWQyNTUxOSBzbyBmYXIiKSwhKHRoaXMgaW5zdGFuY2VvZiBWKSlyZXR1cm4gbmV3IFYoRyk7dGhpcy5jdXJ2ZT1HPUpbR10uY3VydmUsdGhpcy5nPUcuZyx0aGlzLmcucHJlY29tcHV0ZShHLm4uYml0TGVuZ3RoKCkrMSksdGhpcy5wb2ludENsYXNzPUcu'@;
put 'cG9pbnQoKS5jb25zdHJ1Y3Rvcix0aGlzLmVuY29kaW5nTGVuZ3RoPU1hdGguY2VpbChHLm4uYml0TGVuZ3RoKCkvOCksdGhpcy5oYXNoPUsuc2hhNTEyfUguZXhwb3J0cz1WLFYucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oRyxXKXtHPUUoRyk7dmFyIFU9dGhpcy5rZXlGcm9tU2VjcmV0KFcp'@;
put 'LHE9dGhpcy5oYXNoSW50KFUubWVzc2FnZVByZWZpeCgpLEcpLHRlPXRoaXMuZy5tdWwocSksbmU9dGhpcy5lbmNvZGVQb2ludCh0ZSksaWU9dGhpcy5oYXNoSW50KG5lLFUucHViQnl0ZXMoKSxHKS5tdWwoVS5wcml2KCkpLGxlPXEuYWRkKGllKS51bW9kKHRoaXMuY3VydmUubik7cmV0dXJu'@;
put 'IHRoaXMubWFrZVNpZ25hdHVyZSh7Ujp0ZSxTOmxlLFJlbmNvZGVkOm5lfSl9LFYucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihHLFcsVSl7Rz1FKEcpLFc9dGhpcy5tYWtlU2lnbmF0dXJlKFcpO3ZhciBxPXRoaXMua2V5RnJvbVB1YmxpYyhVKSx0ZT10aGlzLmhhc2hJbnQoVy5SZW5jb2Rl'@;
put 'ZCgpLHEucHViQnl0ZXMoKSxHKSxuZT10aGlzLmcubXVsKFcuUygpKTtyZXR1cm4gVy5SKCkuYWRkKHEucHViKCkubXVsKHRlKSkuZXEobmUpfSxWLnByb3RvdHlwZS5oYXNoSW50PWZ1bmN0aW9uKCl7Zm9yKHZhciBHPXRoaXMuaGFzaCgpLFc9MDtXPGFyZ3VtZW50cy5sZW5ndGg7VysrKUcu'@;
put 'dXBkYXRlKGFyZ3VtZW50c1tXXSk7cmV0dXJuIEkuaW50RnJvbUxFKEcuZGlnZXN0KCkpLnVtb2QodGhpcy5jdXJ2ZS5uKX0sVi5wcm90b3R5cGUua2V5RnJvbVB1YmxpYz1mdW5jdGlvbihHKXtyZXR1cm4gei5mcm9tUHVibGljKHRoaXMsRyl9LFYucHJvdG90eXBlLmtleUZyb21TZWNyZXQ9'@;
put 'ZnVuY3Rpb24oRyl7cmV0dXJuIHouZnJvbVNlY3JldCh0aGlzLEcpfSxWLnByb3RvdHlwZS5tYWtlU2lnbmF0dXJlPWZ1bmN0aW9uKEcpe3JldHVybiBHIGluc3RhbmNlb2Ygaj9HOm5ldyBqKHRoaXMsRyl9LFYucHJvdG90eXBlLmVuY29kZVBvaW50PWZ1bmN0aW9uKEcpe3ZhciBXPUcuZ2V0'@;
put 'WSgpLnRvQXJyYXkoImxlIix0aGlzLmVuY29kaW5nTGVuZ3RoKTtyZXR1cm4gV1t0aGlzLmVuY29kaW5nTGVuZ3RoLTFdfD1HLmdldFgoKS5pc09kZCgpPzEyODowLFd9LFYucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uKEcpe3ZhciBXPShHPUkucGFyc2VCeXRlcyhHKSkubGVuZ3Ro'@;
put 'LTEsVT1HLnNsaWNlKDAsVykuY29uY2F0KC0xMjkmR1tXXSkscT0wIT0oMTI4JkdbV10pLHRlPUkuaW50RnJvbUxFKFUpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50RnJvbVkodGUscSl9LFYucHJvdG90eXBlLmVuY29kZUludD1mdW5jdGlvbihHKXtyZXR1cm4gRy50b0FycmF5KCJsZSIsdGhp'@;
put 'cy5lbmNvZGluZ0xlbmd0aCl9LFYucHJvdG90eXBlLmRlY29kZUludD1mdW5jdGlvbihHKXtyZXR1cm4gSS5pbnRGcm9tTEUoRyl9LFYucHJvdG90eXBlLmlzUG9pbnQ9ZnVuY3Rpb24oRyl7cmV0dXJuIEcgaW5zdGFuY2VvZiB0aGlzLnBvaW50Q2xhc3N9fSw5MDg3OihILEIsTCk9PnsidXNl'@;
put 'IHN0cmljdCI7dmFyIEs9TCg5NTMpLEo9Sy5hc3NlcnQsST1LLnBhcnNlQnl0ZXMsUj1LLmNhY2hlZFByb3BlcnR5O2Z1bmN0aW9uIEUoeixqKXt0aGlzLmVkZHNhPXosdGhpcy5fc2VjcmV0PUkoai5zZWNyZXQpLHouaXNQb2ludChqLnB1Yik/dGhpcy5fcHViPWoucHViOnRoaXMuX3B1YkJ5'@;
put 'dGVzPUkoai5wdWIpfUUuZnJvbVB1YmxpYz1mdW5jdGlvbih6LGope3JldHVybiBqIGluc3RhbmNlb2YgRT9qOm5ldyBFKHose3B1YjpqfSl9LEUuZnJvbVNlY3JldD1mdW5jdGlvbih6LGope3JldHVybiBqIGluc3RhbmNlb2YgRT9qOm5ldyBFKHose3NlY3JldDpqfSl9LEUucHJvdG90eXBl'@;
put 'LnNlY3JldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZWNyZXR9LFIoRSwicHViQnl0ZXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlUG9pbnQodGhpcy5wdWIoKSl9KSxSKEUsInB1YiIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHViQnl0ZXM/dGhpcy5lZGRzYS5k'@;
put 'ZWNvZGVQb2ludCh0aGlzLl9wdWJCeXRlcyk6dGhpcy5lZGRzYS5nLm11bCh0aGlzLnByaXYoKSl9KSxSKEUsInByaXZCeXRlcyIsZnVuY3Rpb24oKXt2YXIgej10aGlzLmVkZHNhLGo9dGhpcy5oYXNoKCksVj16LmVuY29kaW5nTGVuZ3RoLTEsRz1qLnNsaWNlKDAsei5lbmNvZGluZ0xlbmd0'@;
put 'aCk7cmV0dXJuIEdbMF0mPTI0OCxHW1ZdJj0xMjcsR1tWXXw9NjQsR30pLFIoRSwicHJpdiIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVJbnQodGhpcy5wcml2Qnl0ZXMoKSl9KSxSKEUsImhhc2giLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuaGFzaCgpLnVwZGF0'@;
put 'ZSh0aGlzLnNlY3JldCgpKS5kaWdlc3QoKX0pLFIoRSwibWVzc2FnZVByZWZpeCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNoKCkuc2xpY2UodGhpcy5lZGRzYS5lbmNvZGluZ0xlbmd0aCl9KSxFLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKHope3JldHVybiBKKHRoaXMuX3NlY3JldCwi'@;
put 'S2V5UGFpciBjYW4gb25seSB2ZXJpZnkiKSx0aGlzLmVkZHNhLnNpZ24oeix0aGlzKX0sRS5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKHosail7cmV0dXJuIHRoaXMuZWRkc2EudmVyaWZ5KHosaix0aGlzKX0sRS5wcm90b3R5cGUuZ2V0U2VjcmV0PWZ1bmN0aW9uKHope3JldHVybiBKKHRo'@;
put 'aXMuX3NlY3JldCwiS2V5UGFpciBpcyBwdWJsaWMgb25seSIpLEsuZW5jb2RlKHRoaXMuc2VjcmV0KCkseil9LEUucHJvdG90eXBlLmdldFB1YmxpYz1mdW5jdGlvbih6KXtyZXR1cm4gSy5lbmNvZGUodGhpcy5wdWJCeXRlcygpLHopfSxILmV4cG9ydHM9RX0sMzYyMjooSCxCLEwpPT57InVz'@;
put 'ZSBzdHJpY3QiO3ZhciBLPUwoMzc4NSksSj1MKDk1MyksST1KLmFzc2VydCxSPUouY2FjaGVkUHJvcGVydHksRT1KLnBhcnNlQnl0ZXM7ZnVuY3Rpb24geihqLFYpe3RoaXMuZWRkc2E9aiwib2JqZWN0IiE9dHlwZW9mIFYmJihWPUUoVikpLEFycmF5LmlzQXJyYXkoVikmJihWPXtSOlYuc2xp'@;
put 'Y2UoMCxqLmVuY29kaW5nTGVuZ3RoKSxTOlYuc2xpY2Uoai5lbmNvZGluZ0xlbmd0aCl9KSxJKFYuUiYmVi5TLCJTaWduYXR1cmUgd2l0aG91dCBSIG9yIFMiKSxqLmlzUG9pbnQoVi5SKSYmKHRoaXMuX1I9Vi5SKSxWLlMgaW5zdGFuY2VvZiBLJiYodGhpcy5fUz1WLlMpLHRoaXMuX1JlbmNv'@;
put 'ZGVkPUFycmF5LmlzQXJyYXkoVi5SKT9WLlI6Vi5SZW5jb2RlZCx0aGlzLl9TZW5jb2RlZD1BcnJheS5pc0FycmF5KFYuUyk/Vi5TOlYuU2VuY29kZWR9Uih6LCJTIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZUludCh0aGlzLlNlbmNvZGVkKCkpfSksUih6LCJSIixmdW5j'@;
put 'dGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZVBvaW50KHRoaXMuUmVuY29kZWQoKSl9KSxSKHosIlJlbmNvZGVkIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZVBvaW50KHRoaXMuUigpKX0pLFIoeiwiU2VuY29kZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRk'@;
put 'c2EuZW5jb2RlSW50KHRoaXMuUygpKX0pLHoucHJvdG90eXBlLnRvQnl0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5SZW5jb2RlZCgpLmNvbmNhdCh0aGlzLlNlbmNvZGVkKCkpfSx6LnByb3RvdHlwZS50b0hleD1mdW5jdGlvbigpe3JldHVybiBKLmVuY29kZSh0aGlzLnRvQnl0ZXMoKSwi'@;
put 'aGV4IikudG9VcHBlckNhc2UoKX0sSC5leHBvcnRzPXp9LDEwMzc6SD0+e0guZXhwb3J0cz17ZG91Ymxlczp7c3RlcDo0LHBvaW50czpbWyJlNjBmY2U5M2I1OWU5ZWM1MzAxMWFhYmMyMWMyM2U5N2IyYTMxMzY5Yjg3YTVhZTljNDRlZTg5ZTJhNmRlYzBhIiwiZjdlMzUwNzM5OWU1OTU5Mjlk'@;
put 'Yjk5ZjM0ZjU3OTM3MTAxMjk2ODkxZTQ0ZDIzZjBiZTFmMzJjY2U2OTYxNjgyMSJdLFsiODI4MjI2MzIxMmM2MDlkOWVhMmE2ZTNlMTcyZGUyMzhkOGMzOWNhYmQ1YWMxY2ExMDY0NmUyM2ZkNWY1MTUwOCIsIjExZjhhODA5ODU1N2RmZTQ1ZTgyNTZlODMwYjYwYWNlNjJkNjEzYWMyZjdiMTdi'@;
put 'ZWQzMWI2ZWFmZjZlMjZjYWYiXSxbIjE3NWUxNTlmNzI4Yjg2NWE3MmY5OWNjNmM2ZmM4NDZkZTBiOTM4MzNmZDIyMjJlZDczZmNlNWI1NTFlNWI3MzkiLCJkMzUwNmUwZDllM2M3OWViYTRlZjk3YTUxZmY3MWY1ZWFjYjU5NTVhZGQyNDM0NWM2ZWZhNmZmZWU5ZmVkNjk1Il0sWyIzNjNkOTBk'@;
put 'NDQ3YjAwYzljOTljZWFjMDViNjI2MmVlMDUzNDQxYzdlNTU1NTJmZmU1MjZiYWQ4ZjgzZmY0NjQwIiwiNGUyNzNhZGZjNzMyMjIxOTUzYjQ0NTM5N2YzMzYzMTQ1YjlhODkwMDgxOTllY2I2MjAwM2M3ZjNiZWU5ZGU5Il0sWyI4YjRiNWYxNjVkZjNjMmJlOGM2MjQ0YjViNzQ1NjM4ODQzZTRh'@;
put 'NzgxYTE1YmNkMWI2OWY3OWE1NWRmZmRmODBjIiwiNGFhZDBhNmY2OGQzMDhiNGIzZmJkNzgxM2FiMGRhMDRmOWUzMzY1NDYxNjJlZTU2YjNlZmYwYzY1ZmQ0ZmQzNiJdLFsiNzIzY2JhYTZlNWRiOTk2ZDZiZjc3MWMwMGJkNTQ4YzdiNzAwZGJmZmE2YzBlNzdiY2I2MTE1OTI1MjMyZmNkYSIs'@;
put 'Ijk2ZTg2N2I1NTk1Y2M0OThhOTIxMTM3NDg4ODI0ZDZlMjY2MGEwNjUzNzc5NDk0ODAxZGMwNjlkOWViMzlmNWYiXSxbImVlYmZhNGQ0OTNiZWJmOThiYTVmZWVjODEyYzJkM2I1MDk0Nzk2MTIzN2E5MTk4MzlhNTMzZWNhMGU3ZGQ3ZmEiLCI1ZDlhOGNhMzk3MGVmMGYyNjllZTdlZGFmMTc4'@;
put 'MDg5ZDlhZTRjZGMzYTcxMWY3MTJkZGZkNGZkYWUxZGU4OTk5Il0sWyIxMDBmNDRkYTY5NmU3MTY3Mjc5MWQwYTA5YjdiZGU0NTlmMTIxNWEyOWIzYzAzYmZlZmQ3ODM1YjM5YTQ4ZGIwIiwiY2RkOWUxMzE5MmEwMGI3NzJlYzhmMzMwMGMwOTA2NjZiN2ZmNGExOGZmNTE5NWFjMGZiZDVjZDYy'@;
put 'YmM2NWEwOSJdLFsiZTEwMzFiZTI2MmM3ZWQxYjFkYzkyMjdhNGEwNGMwMTdhNzdmOGQ0NDY0ZjNiMzg1MmM4YWNkZTZlNTM0ZmQyZCIsIjlkNzA2MTkyODk0MDQwNWU2YmI2YTQxNzY1OTc1MzVhZjI5MmRkNDE5ZTFjZWQ3OWE0NGYxOGYyOTQ1NmEwMGQiXSxbImZlZWE2Y2FlNDZkNTViNTMw'@;
put 'YWMyODM5ZjE0M2JkN2VjNWNmOGIyNjZhNDFkNmFmNTJkNWU2ODhkOTA5NDY5NmQiLCJlNTdjNmI2Yzk3ZGNlMWJhYjA2ZTRlMTJiZjNlY2Q1Yzk4MWM4OTU3Y2M0MTQ0MmQzMTU1ZGViZjE4MDkwMDg4Il0sWyJkYTY3YTkxZDkxMDQ5Y2RjYjM2N2JlNGJlNmZmY2EzY2ZlZWQ2NTdkODA4NTgz'@;
put 'ZGUzM2ZhOTc4YmMxZWM2Y2IxIiwiOWJhY2FhMzU0ODE2NDJiYzQxZjQ2M2Y3ZWM5NzgwZTVkZWM3YWRjNTA4Zjc0MGExN2U5ZWE4ZTI3YTY4YmUxZCJdLFsiNTM5MDRmYWEwYjMzNGNkZGE2ZTAwMDkzNWVmMjIxNTFlYzA4ZDBmN2JiMTEwNjlmNTc1NDVjY2MxYTM3YjdjMCIsIjViYzA4N2Qw'@;
put 'YmM4MDEwNmQ4OGM5ZWNjYWMyMGQzYzFjMTM5OTk5ODFlMTQ0MzQ2OTlkY2IwOTZiMDIyNzcxYzgiXSxbIjhlN2JjZDBiZDM1OTgzYTc3MTljY2E3NzY0Y2E5MDY3NzliNTNhMDQzYTliOGJjYWVmZjk1OWY0M2FkODYwNDciLCIxMGI3NzcwYjJhM2RhNGIzOTQwMzEwNDIwY2E5NTE0NTc5ZTg4'@;
put 'ZTJlNDdmZDY4YjNlYTEwMDQ3ZTg0NjAzNzJhIl0sWyIzODVlZWQzNGMxY2RmZjIxZTZkMDgxODY4OWI4MWJkZTcxYTdmNGYxODM5N2U2NjkwYTg0MWUxNTk5YzQzODYyIiwiMjgzYmViYzNlOGVhMjNmNTY3MDFkZTE5ZTllYmY0NTc2YjMwNGVlYzIwODZkYzhjYzA0NThmZTU1NDJlNTQ1MyJd'@;
put 'LFsiNmY5ZDliODAzZWNmMTkxNjM3YzczYTQ0MTNkZmExODBmZGRmODRhNTk0N2ZiYzljNjA2ZWQ4NmMzZmFjM2E3IiwiN2M4MGM2OGU2MDMwNTliYTY5YjhlMmEzMGU0NWM0ZDQ3ZWE0ZGQyZjVjMjgxMDAyZDg2ODkwNjAzYTg0MjE2MCJdLFsiMzMyMmQ0MDEyNDNjNGUyNTgyYTIxNDdjMTA0'@;
put 'ZDZlY2JmNzc0ZDE2M2RiMGY1ZTUzMTNiN2UwZTc0MmQwZTZiZCIsIjU2ZTcwNzk3ZTk2NjRlZjViZmIwMTliYzRkZGFmOWI3MjgwNWY2M2VhMjg3M2FmNjI0ZjNhMmU5NmMyOGIyYTAiXSxbIjg1NjcyYzdkMmRlMGI3ZGEyYmQxNzcwZDg5NjY1ODY4NzQxYjNmOWFmNzY0MzM5NzcyMWQ3NGQy'@;
put 'ODEzNGFiODMiLCI3YzQ4MWI5YjViNDNiMmViNjM3NDA0OWJmYTYyYzJlNWU3N2YxN2ZjYzUyOThmNDRjOGUzMDk0Zjc5MDMxM2E2Il0sWyI5NDhiZjgwOWIxOTg4YTQ2YjA2YzlmMTkxOTQxM2IxMGY5MjI2YzYwZjY2ODgzMmZmZDk1OWFmNjBjODJhMGEiLCI1M2E1NjI4NTZkY2I2NjQ2ZGM2'@;
put 'Yjc0YzVkMWMzNDE4YzZkNGRmZjA4Yzk3Y2QyYmVkNGNiN2Y4OGQ4YzhlNTg5Il0sWyI2MjYwY2U3ZjQ2MTgwMWMzNGYwNjdjZTBmMDI4NzNhOGYxYjBlNDRkZmM2OTc1MmFjY2VjZDgxOWYzOGZkOGU4IiwiYmMyZGE4MmI2ZmE1YjU3MWE3ZjA5MDQ5Nzc2YTFlZjdlY2QyOTIyMzgwNTFjMTk4'@;
put 'YzFhODRlOTViMmI0YWUxNyJdLFsiZTUwMzdkZTBhZmMxZDhkNDNkODM0ODQxNGJiZjQxMDMwNDNlYzhmNTc1YmZkYzQzMjk1M2NjOGQyMDM3ZmEyZCIsIjQ1NzE1MzRiYWE5NGQzYjVmOWY5OGQwOWZiOTkwYmRkYmQ1ZjViMDNlYzQ4MWYxMGUwZTVkYzg0MWQ3NTViZGEiXSxbImUwNjM3MmIw'@;
put 'ZjRhMjA3YWRmNWVhOTA1ZThmMTc3MWI0ZTdlOGRiZDFjNmE2YzViNzI1ODY2YTBhZTRmY2U3MjUiLCI3YTkwODk3NGJjZTE4Y2ZlMTJhMjdiYjJhZDVhNDg4Y2Q3NDg0YTc3ODcxMDQ4NzBiMjcwMzRmOTRlZWUzMWRkIl0sWyIyMTNjN2E3MTVjZDVkNDUzNThkMGJiZjlkYzBjZTAyMjA0YjEw'@;
put 'YmRkZTJhM2Y1ODU0MGFkNjkwOGQwNTU5NzU0IiwiNGI2ZGFkMGI1YWU0NjI1MDcwMTNhZDA2MjQ1YmExOTBiYjQ4NTBmNWYzNmE3ZWVkZGZmMmMyNzUzNGI0NThmMiJdLFsiNGU3YzI3MmE3YWY0YjM0ZThkYmI5MzUyYTU0MTlhODdlMjgzOGM3MGFkYzYyY2RkZjBjYzNhM2IwOGZiZDUzYyIs'@;
put 'IjE3NzQ5Yzc2NmM5ZDBiMThlMTZmZDA5ZjZkZWY2ODFiNTMwYjk2MTRiZmY3ZGQzM2UwYjM5NDE4MTdkY2FhZTYiXSxbImZlYTc0ZTNkYmU3NzhiMWIxMGYyMzhhZDYxNjg2YWE1Yzc2ZTNkYjJiZTQzMDU3NjMyNDI3ZTI4NDBmYjI3YjYiLCI2ZTA1NjhkYjliMGIxMzI5N2NmNjc0ZGVjY2I2'@;
put 'YWY5MzEyNmI1OTZiOTczZjdiNzc3MDFkM2RiN2YyM2NiOTZmIl0sWyI3NmU2NDExM2Y2NzdjZjBlMTBhMjU3MGQ1OTk5NjhkMzE1NDRlMTc5Yjc2MDQzMjk1MmMwMmE0NDE3YmRkZTM5IiwiYzkwZGRmOGRlZTRlOTVjZjU3NzA2NmQ3MDY4MWYwZDM1ZTJhMzNkMmI1NmQyMDMyYjRiMTc1MmQx'@;
put 'OTAxYWMwMSJdLFsiYzczOGM1NmIwM2IyYWJlMWU4MjgxYmFhNzQzZjhmOWE4ZjdjYzY0M2RmMjZjYmVlM2FiMTUwMjQyYmNiYjg5MSIsIjg5M2ZiNTc4OTUxYWQyNTM3ZjcxOGYyZWFjYmZiYmJiODIzMTRlZWY3ODgwY2ZlOTE3ZTczNWQ5Njk5YTg0YzMiXSxbImQ4OTU2MjY1NDhiNjViODFl'@;
put 'MjY0Yzc2MzdjOTcyODc3ZDFkNzJlNWYzYTkyNTAxNDM3MmU5ZjY1ODhmNmMxNGIiLCJmZWJmYWEzOGYyYmM3ZWFlNzI4ZWM2MDgxOGMzNDBlYjAzNDI4ZDYzMmJiMDY3ZTE3OTM2M2VkNzVkN2Q5OTFmIl0sWyJiOGRhOTQwMzJhOTU3NTE4ZWIwZjY0MzM1NzFlODc2MWNlZmZjNzM2OTNlODRl'@;
put 'ZGQ0OTE1MGE1NjRmNjc2ZTAzIiwiMjgwNGRmYTQ0ODA1YTFlNGQ3Yzk5Y2M5NzYyODA4YjA5MmNjNTg0ZDk1ZmYzYjUxMTQ4OGU0ZTc0ZWZkZjZlNyJdLFsiZTgwZmVhMTQ0NDFmYjMzYTdkOGFkYWI5NDc1ZDdmYWIyMDE5ZWZmYjUxNTZhNzkyZjFhMTE3NzhlM2MwZGY1ZCIsImVlZDFkZTdm'@;
put 'NjM4ZTAwNzcxZTg5NzY4Y2EzY2E5NDQ3MmQxNTVlODBhZjMyMmVhOWZjYjQyOTFiNmFjOWVjNzgiXSxbImEzMDE2OTdiZGZjZDcwNDMxM2JhNDhlNTFkNTY3NTQzZjJhMTgyMDMxZWZkNjkxNWRkYzA3YmJjYzRlMTYwNzAiLCI3MzcwZjkxY2ZiNjdlNGY1MDgxODA5ZmEyNWQ0MGY5YjE3MzVk'@;
put 'YmY3YzBhMTFhMTMwYzBkMWEwNDFlMTc3ZWExIl0sWyI5MGFkODViMzg5ZDZiOTM2NDYzZjlkMDUxMjY3OGRlMjA4Y2MzMzBiMTEzMDdmZmZhYjdhYzYzZTNmYjA0ZWQ0IiwiZTUwN2EzNjIwYTM4MjYxYWZmZGNiZDk0MjcyMjJiODM5YWVmYWJlMTU4Mjg5NGQ5OTFkNGQ0OGNiNmVmMTUwIl0s'@;
put 'WyI4ZjY4YjlkMmY2M2I1ZjMzOTIzOWMxYWQ5ODFmMTYyZWU4OGM1Njc4NzIzZWEzMzUxYjdiNDQ0YzllYzRjMGRhIiwiNjYyYTlmMmRiYTA2Mzk4NmRlMWQ5MGMyYjZiZTIxNWRiYmVhMmNmZTk1NTEwYmZkZjIzY2JmNzk1MDFmZmY4MiJdLFsiZTRmM2ZiMDE3NmFmODVkNjVmZjk5ZmY5MTk4'@;
put 'YzM2MDkxZjQ4ZTg2NTAzNjgxZTNlNjY4NmZkNTA1MzIzMWUxMSIsIjFlNjM2MzNhZDBlZjRmMWMxNjYxYTZkMGVhMDJiNzI4NmNjN2U3NGVjOTUxZDFjOTgyMmMzODU3NmZlYjczYmMiXSxbIjhjMDBmYTliMThlYmYzMzFlYjk2MTUzN2E0NWE0MjY2YzcwMzRmMmYwZDRlMWQwNzE2ZmI2ZWFl'@;
put 'MjBlYWUyOWUiLCJlZmE0NzI2N2ZlYTUyMWExYTlkYzM0M2EzNzM2Yzk3NGMyZmFkYWZhODFlMzZjNTRlN2QyYTRjNjY3MDI0MTRiIl0sWyJlN2EyNmNlNjlkZDQ4MjlmM2UxMGNlYzBhOWU5OGVkMzE0M2QwODRmMzA4YjkyYzA5OTdmZGRmYzYwY2IzZTQxIiwiMmE3NThlMzAwZmE3OTg0YjQ3'@;
put 'MWIwMDZhMWFhZmJiMThkMGE2YjJjMDQyMGU4M2UyMGU4YTk0MjFjZjJjZmQ1MSJdLFsiYjY0NTllMGVlMzY2MmVjOGQyMzU0MGMyMjNiY2JkYzU3MWNiY2I5NjdkNzk0MjRmM2NmMjllYjNkZTZiODBlZiIsIjY3Yzg3NmQwNmYzZTA2ZGUxZGFkZjE2ZTU2NjFkYjNjNGIzYWU2ZDQ4ZTM1YjJm'@;
put 'ZjMwYmYwYjYxYTcxYmE0NSJdLFsiZDY4YTgwYzgyODBiYjg0MDc5MzIzNGFhMTE4ZjA2MjMxZDZmMWZjNjdlNzNjNWE1ZGVkYTBmNWI0OTY5NDNlOCIsImRiOGJhOWZmZjRiNTg2ZDAwYzRiMWY5MTc3YjBlMjhiNWIwZTdiOGY3ODQ1Mjk1YTI5NGM4NDI2NmIxMzMxMjAiXSxbIjMyNGFlZDdk'@;
put 'ZjY1YzgwNDI1MmRjMDI3MDkwN2EzMGIwOTYxMmFlYjk3MzQ0OWNlYTQwOTU5ODBmYzI4ZDNkNWQiLCI2NDhhMzY1Nzc0YjYxZjJmZjEzMGMwYzM1YWVjMWY0ZjE5MjEzYjBjN2UzMzI4NDM5NjcyMjRhZjk2YWI3Yzg0Il0sWyI0ZGY5YzE0OTE5Y2RlNjFmNmQ1MWRmZGJlNWZlZTVkY2VlYzQx'@;
put 'NDNiYThkMWNhODg4ZThiZDM3M2ZkMDU0Yzk2IiwiMzVlYzUxMDkyZDg3MjgwNTA5NzRjMjNhMWQ4NWQ0YjVkNTA2Y2RjMjg4NDkwMTkyZWJhYzA2Y2FkMTBkNWQiXSxbIjljMzkxOWE4NGE0NzQ4NzBmYWVkOGE5YzFjYzY2MDIxNTIzNDg5MDU0ZDdmMDMwOGNiZmM5OWM4YWMxZjk4Y2QiLCJk'@;
put 'ZGI4NGYwZjRhNGRkZDU3NTg0ZjA0NGJmMjYwZTY0MTkwNTMyNmY3NmM2NGM4ZTZiZTdlNWUwM2Q0ZmM1OTlkIl0sWyI2MDU3MTcwYjFkZDEyZmRmOGRlMDVmMjgxZDhlMDZiYjkxZTE0OTNhOGI5MWQ0Y2M1YTIxMzgyMTIwYTk1OWU1IiwiOWExYWYwYjI2YTZhNDgwN2FkZDlhMmRhZjcxZGYy'@;
put 'NjI0NjUxNTJiYzNlZTI0YzY1ZTg5OWJlOTMyMzg1YTJhOCJdLFsiYTU3NmRmOGUyM2EwODQxMTQyMTQzOWE0NTE4ZGEzMTg4MGNlZjBmYmE3ZDRkZjEyYjFhNjk3M2VlY2I5NDI2NiIsIjQwYTZiZjIwZTc2NjQwYjJjOTJiOTdhZmU1OGNkODJjNDMyZTEwYTdmNTE0ZDlmM2VlOGJlMTFhZTFi'@;
put 'MjhlYzgiXSxbIjc3NzhhNzhjMjhkZWMzZTMwYTA1ZmU5NjI5ZGU4YzM4YmIzMGQxZjVjZjlhM2EyMDhmNzYzODg5YmU1OGFkNzEiLCIzNDYyNmQ5YWI1YTViMjJmZjcwOThlMTJmMmZmNTgwMDg3YjM4NDExZmYyNGFjNTYzYjUxM2ZjMWZkOWY0M2FjIl0sWyI5Mjg5NTVlZTYzN2E4NDQ2Mzcy'@;
put 'OWZkMzBlN2FmZDJlZDVmOTYyNzRlNWFkN2U1Y2IwOWVkYTljMDZkOTAzYWMiLCJjMjU2MjEwMDNkM2Y0MmE4MjdiNzhhMTMwOTNhOTVlZWFjM2QyNmVmYThhOGQ4M2ZjNTE4MGU5MzViY2QwOTFmIl0sWyI4NWQwZmVmM2VjNmRiMTA5Mzk5MDY0ZjNhMGUzYjI4NTU2NDViNGE5MDdhZDM1NDUy'@;
put 'N2FhZTc1MTYzZDgyNzUxIiwiMWYwMzY0ODQxM2EzOGMwYmUyOWQ0OTZlNTgyY2Y1NjYzZTg3NTFlOTY4NzczMzE1ODJjMjM3YTI0ZWIxZjk2MiJdLFsiZmYyYjBkY2U5N2VlY2U5N2MxYzliNjA0MTc5OGI4NWRmZGZiNmQ4ODgyZGEyMDMwOGY1NDA0ODI0NTI2MDg3ZSIsIjQ5M2QxM2ZlZjUy'@;
put 'NGJhMTg4YWY0YzRkYzU0ZDA3OTM2YzdiN2VkNmZiOTBlMmNlYjJjOTUxZTAxZjBjMjk5MDciXSxbIjgyN2ZiYmU0YjFlODgwZWE5ZWQyYjJlNjMwMWIyMTJiNTdmMWVlMTQ4Y2Q2ZGQyODc4MGU1ZTJjZjg1NmUyNDEiLCJjNjBmOWM5MjNjNzI3YjBiNzFiZWYyYzY3ZDFkMTI2ODdmZjdhNjMx'@;
put 'ODY5MDMxNjZkNjA1YjY4YmFlYzI5M2VjIl0sWyJlYWE2NDlmMjFmNTFiZGJhZTdiZTRhZTM0Y2U2ZTUyMTdhNThmZGNlN2Y0N2Y5YWE3ZjNiNThmYTIxMjBlMmIzIiwiYmUzMjc5ZWQ1YmJiYjAzYWM2OWE4MGY4OTg3OWFhNWEwMWE2Yjk2NWYxM2Y3ZTU5ZDQ3YTUzMDViYTVhZDkzZCJdLFsi'@;
put 'ZTRhNDJkNDNjNWNmMTY5ZDkzOTFkZjZkZWNmNDJlZTU0MWI2ZDhmMGM5YTEzNzQwMWUyMzYzMmRkYTM0ZDI0ZiIsIjRkOWY5MmU3MTZkMWM3MzUyNmZjOTljY2ZiOGFkMzRjZTg4NmVlZGZhOGQ4ZTRmMTNhN2Y3MTMxZGViYTk0MTQiXSxbIjFlYzgwZmVmMzYwY2JkZDk1NDE2MGZhZGFiMzUy'@;
put 'YjZiOTJiNTM1NzZhODhmZWE0OTQ3MTczYjlkNDMwMGJmMTkiLCJhZWVmZTkzNzU2YjUzNDBkMmYzYTQ5NThhN2FiYmY1ZTAxNDZlNzdmNjI5NWEwN2I2NzFjZGMxY2MxMDdjZWZkIl0sWyIxNDZhNzc4YzA0NjcwYzJmOTFiMDBhZjQ2ODBkZmE4YmNlMzQ5MDcxN2Q1OGJhODg5ZGRiNTkyODM2'@;
put 'NjY0MmJlIiwiYjMxOGUwZWMzMzU0MDI4YWRkNjY5ODI3ZjlkNGIyODcwYWFhOTcxZDJmN2U1ZWQxZDBiMjk3NDgzZDgzZWZkMCJdLFsiZmE1MGMwZjYxZDIyZTVmMDdlM2FjZWJiMWFhMDdiMTI4ZDAwMTIyMDlhMjhiOTc3NmQ3NmE4NzkzMTgwZWVmOSIsIjZiODRjNjkyMjM5N2ViYTliNzJj'@;
put 'ZDI4NzIyODFhNjhhNWU2ODMyOTNhNTdhMjEzYjM4Y2Q4ZDdkM2Y0ZjI4MTEiXSxbImRhMWQ2MWQwY2E3MjFhMTFiMWE1YmY2YjdkODhlODQyMWEyODhhYjVkNWJiYTUyMjBlNTNkMzJiNWYwNjdlYzIiLCI4MTU3ZjU1YTdjOTkzMDZjNzljMDc2NjE2MWM5MWUyOTY2YTczODk5ZDI3OWI0OGE2'@;
put 'NTVmYmEwZjFhZDgzNmYxIl0sWyJhOGUyODJmZjBjOTcwNjkwNzIxNWZmOThlOGZkNDE2NjE1MzExZGUwNDQ2ZjFlMDYyYTczYjA2MTBkMDY0ZTEzIiwiN2Y5NzM1NWI4ZGI4MWMwOWFiZmI3ZjNjNWIyNTE1ODg4YjY3OWEzZTUwZGQ2YmQ2Y2VmN2M3MzExMWY0Y2MwYyJdLFsiMTc0YTUzYjlj'@;
put 'OWEyODU4NzJkMzllNTZlNjkxM2NhYjE1ZDU5YjFmYTUxMjUwOGMwMjJmMzgyZGU4MzE5NDk3YyIsImNjYzlkYzM3YWJmYzljMTY1N2I0MTU1ZjJjNDdmOWU2NjQ2YjNhMWQ4Y2I5ODU0MzgzZGExM2FjMDc5YWZhNzMiXSxbIjk1OTM5Njk4MTk0Mzc4NWMzZDNlNTdlZGY1MDE4Y2RiZTAzOWU3'@;
put 'MzBlNDkxOGIzZDg4NGZkZmYwOTQ3NWI3YmEiLCIyZTdlNTUyODg4YzMzMWRkOGJhMDM4NmE0YjljZDY4NDljNjUzZjY0Yzg3MDkzODVlOWI4YWJmODc1MjRmMmZkIl0sWyJkMmE2M2E1MGFlNDAxZTU2ZDY0NWExMTUzYjEwOWE4ZmNjYTBhNDNkNTYxZmJhMmRiYjUxMzQwYzlkODJiMTUxIiwi'@;
put 'ZTgyZDg2ZmI2NDQzZmNiNzU2NWFlZTU4YjI5NDgyMjBhNzBmNzUwYWY0ODRjYTUyZDQxNDIxNzRkY2Y4OTQwNSJdLFsiNjQ1ODdlMjMzNTQ3MWViODkwZWU3ODk2ZDdjZmRjODY2YmFjYmRiZDM4MzkzMTdiMzQzNmY5YjQ1NjE3ZTA3MyIsImQ5OWZjZGQ1YmY2OTAyZTJhZTk2ZGQ2NDQ3YzI5'@;
put 'OWExODViOTBhMzkxMzNhZWFiMzU4Mjk5ZTVlOWZhZjY1ODkiXSxbIjg0ODFiZGUwZTRlNGQ4ODViM2E1NDZkM2U1NDlkZTA0MmYwYWE2Y2VhMjUwZTdmZDM1OGQ2Yzg2ZGQ0NWU0NTgiLCIzOGVlN2I4Y2JhNTQwNGRkODRhMjViZjM5Y2VjYjJjYTkwMGE3OWM0MmIyNjJlNTU2ZDY0YjFiNTk3'@;
put 'NzkwNTdlIl0sWyIxMzQ2NGE1N2E3ODEwMmFhNjJiNjk3OWFlODE3ZjQ2MzdmZmNmZWQzYzRiMWNlMzBiY2Q2MzAzZjZjYWY2NjZiIiwiNjliZTE1OTAwNDYxNDU4MGVmN2U0MzM0NTNjY2IwY2E0OGYzMDBhODFkMDk0MmUxM2Y0OTVhOTA3ZjZlY2MyNyJdLFsiYmM0YTlkZjViNzEzZmUyZTlh'@;
put 'ZWY0MzBiY2MxZGM5N2EwY2Q5Y2NlZGUyZjI4NTg4Y2FkYTNhMGQyZDgzZjM2NiIsImQzYTgxY2E2ZTc4NWMwNjM4MzkzN2FkZjRiNzk4Y2FhNmU4YTlmYmZhNTQ3YjE2ZDc1OGQ2NjY1ODFmMzNjMSJdLFsiOGMyOGE5N2JmODI5OGJjMGQyM2Q4Yzc0OTQ1MmEzMmU2OTRiNjVlMzBhOTQ3MmEz'@;
put 'OTU0YWIzMGZlNTMyNGNhYSIsIjQwYTMwNDYzYTMzMDUxOTMzNzhmZWRmMzFmN2NjMGViN2FlNzg0ZjA0NTFjYjk0NTllNzFkYzczY2JlZjk0ODIiXSxbIjhlYTk2NjYxMzk1MjdhOGMxZGQ5NGNlNGYwNzFmZDIzYzhiMzUwYzVhNGJiMzM3NDhjNGJhMTExZmFjY2FlMCIsIjYyMGVmYWJiYzhl'@;
put 'ZTI3ODJlMjRlN2MwY2ZiOTVjNWQ3MzViNzgzYmU5Y2YwZjhlOTU1YWYzNGEzMGU2MmI5NDUiXSxbImRkMzYyNWZhZWY1YmEwNjA3NDY2OTcxNmJiZDM3ODhkODliZGRlODE1OTU5OTY4MDkyZjc2Y2M0ZWI5YTk3ODciLCI3YTE4OGZhMzUyMGUzMGQ0NjFkYTI1MDEwNDU3MzFjYTk0MTQ2MTk4'@;
put 'Mjg4MzM5NTkzN2Y2OGQwMGM2NDRhNTczIl0sWyJmNzEwZDc5ZDllYjk2MjI5N2U0ZjYyMzJiNDBlOGY3ZmViMmJjNjM4MTQ2MTRkNjkyYzEyZGU3NTI0MDgyMjFlIiwiZWE5OGU2NzIzMmQzYjMyOTVkM2I1MzU1MzIxMTVjY2FjODYxMmM3MjE4NTE2MTc1MjZhZTQ3YTljNzdiZmM4MiJdXX0s'@;
put 'bmFmOnt3bmQ6Nyxwb2ludHM6W1siZjkzMDhhMDE5MjU4YzMxMDQ5MzQ0Zjg1Zjg5ZDUyMjliNTMxYzg0NTgzNmY5OWIwODYwMWYxMTNiY2UwMzZmOSIsIjM4OGY3YjBmNjMyZGU4MTQwZmUzMzdlNjJhMzdmMzU2NjUwMGE5OTkzNGMyMjMxYjZjYjlmZDc1ODRiOGU2NzIiXSxbIjJmOGJkZTRk'@;
put 'MWEwNzIwOTM1NWI0YTcyNTBhNWM1MTI4ZTg4Yjg0YmRkYzYxOWFiN2NiYThkNTY5YjI0MGVmZTQiLCJkOGFjMjIyNjM2ZTVlM2Q2ZDRkYmE5ZGRhNmM5YzQyNmY3ODgyNzFiYWIwZDY4NDBkY2E4N2QzYWE2YWM2MmQ2Il0sWyI1Y2JkZjA2NDZlNWRiNGVhYTM5OGYzNjVmMmVhN2EwZTNkNDE5'@;
put 'YjdlMDMzMGUzOWNlOTJiZGRlZGNhYzRmOWJjIiwiNmFlYmNhNDBiYTI1NTk2MGEzMTc4ZDZkODYxYTU0ZGJhODEzZDBiODEzZmRlN2I1YTUwODI2MjgwODcyNjRkYSJdLFsiYWNkNDg0ZTJmMGM3ZjY1MzA5YWQxNzhhOWY1NTlhYmRlMDk3OTY5NzRjNTdlNzE0YzM1ZjExMGRmYzI3Y2NiZSIs'@;
put 'ImNjMzM4OTIxYjBhN2Q5ZmQ2NDM4MDk3MTc2M2I2MWU5YWRkODg4YTQzNzVmOGUwZjA1Y2MyNjJhYzY0ZjljMzciXSxbIjc3NGFlN2Y4NThhOTQxMWU1ZWY0MjQ2YjcwYzY1YWFjNTY0OTk4MGJlNWMxNzg5MWJiZWMxNzg5NWRhMDA4Y2IiLCJkOTg0YTAzMmViNmI1ZTE5MDI0M2RkNTZkN2I3'@;
put 'YjM2NTM3MmRiMWUyZGZmOWQ2YTgzMDFkNzRjOWM5NTNjNjFiIl0sWyJmMjg3NzNjMmQ5NzUyODhiYzdkMWQyMDVjMzc0ODY1MWIwNzVmYmM2NjEwZTU4Y2RkZWVkZGY4ZjE5NDA1YWE4IiwiYWIwOTAyZThkODgwYTg5NzU4MjEyZWI2NWNkYWY0NzNhMWEwNmRhNTIxZmE5MWYyOWI1Y2I1MmRi'@;
put 'MDNlZDgxIl0sWyJkNzkyNGQ0ZjdkNDNlYTk2NWE0NjVhZTMwOTVmZjQxMTMxZTU5NDZmM2M4NWY3OWU0NGFkYmNmOGUyN2UwODBlIiwiNTgxZTI4NzJhODZjNzJhNjgzODQyZWMyMjhjYzZkZWZlYTQwYWYyYmQ4OTZkM2E1YzUwNGRjOWZmNmEyNmI1OCJdLFsiZGVmZGVhNGNkYjY3Nzc1MGE0'@;
put 'MjBmZWU4MDdlYWNmMjFlYjk4OThhZTc5Yjk3Njg3NjZlNGZhYTA0YTJkNGEzNCIsIjQyMTFhYjA2OTQ2MzUxNjhlOTk3YjBlYWQyYTkzZGFlY2VkMWY0YTA0YTk1YzBmNmNmYjE5OWY2OWU1NmViNzciXSxbIjJiNGVhMGE3OTdhNDQzZDI5M2VmNWNmZjQ0NGY0OTc5ZjA2YWNmZWJkN2U4NmQy'@;
put 'Nzc0NzU2NTYxMzgzODViNmMiLCI4NWU4OWJjMDM3OTQ1ZDkzYjM0MzA4M2I1YTFjODYxMzFhMDFmNjBjNTAyNjk3NjNiNTcwYzg1NGU1YzA5YjdhIl0sWyIzNTJiYmY0YTRjZGQxMjU2NGY5M2ZhMzMyY2UzMzMzMDFkOWFkNDAyNzFmODEwNzE4MTM0MGFlZjI1YmU1OWQ1IiwiMzIxZWI0MDc1'@;
put 'MzQ4ZjUzNGQ1OWMxODI1OWRkYTNlMWY0YTFiM2IyZTcxYjEwMzljNjdiZDNkOGJjZjgxOTk4YyJdLFsiMmZhMjEwNGQ2YjM4ZDExYjAyMzAwMTA1NTk4NzkxMjRlNDJhYjhkZmVmZjVmZjI5ZGM5Y2RhZGQ0ZWNhY2MzZiIsIjJkZTEwNjgyOTVkZDg2NWI2NDU2OTMzNWJkNWRkODAxODFkNzBl'@;
put 'Y2ZjODgyNjQ4NDIzYmE3NmI1MzJiN2Q2NyJdLFsiOTI0ODI3OWIwOWI0ZDY4ZGFiMjFhOWIwNjZlZGRhODMyNjNjM2Q4NGUwOTU3MmUyNjljYTBjZDdmNTQ1MzcxNCIsIjczMDE2ZjdiZjIzNGFhZGU1ZDFhYTcxYmRlYTJiMWZmM2ZjMGRlMmE4ODc5MTJmZmU1NGEzMmNlOTdjYjM0MDIiXSxb'@;
put 'ImRhZWQ0ZjJiZTNhOGJmMjc4ZTcwMTMyZmIwYmViNzUyMmY1NzBlMTQ0YmY2MTVjMDdlOTk2ZDQ0M2RlZTg3MjkiLCJhNjlkY2U0YTdkNmM5OGU4ZDRhMWFjYTg3ZWY4ZDcwMDNmODNjMjMwZjNhZmE3MjZhYjQwZTUyMjkwYmUxYzU1Il0sWyJjNDRkMTJjNzA2NWQ4MTJlOGFjZjI4ZDdjYmIx'@;
put 'OWY5MDExZWNkOWU5ZmRmMjgxYjBlNmEzYjVlODdkMjJlN2RiIiwiMjExOWE0NjBjZTMyNmNkYzc2YzQ1OTI2Yzk4MmZkYWMwZTEwNmU4NjFlZGY2MWM1YTAzOTA2M2YwZTBlNjQ4MiJdLFsiNmEyNDViZjZkYzY5ODUwNGM4OWEyMGNmZGVkNjA4NTMxNTJiNjk1MzM2YzI4MDYzYjYxYzY1Y2Jk'@;
put 'MjY5ZTZiNCIsImUwMjJjZjQyYzJiZDRhNzA4YjNmNTEyNmYxNmEyNGFkOGIzM2JhNDhkMDQyM2I2ZWZkNWU2MzQ4MTAwZDhhODIiXSxbIjE2OTdmZmE2ZmQ5ZGU2MjdjMDc3ZTNkMmZlNTQxMDg0Y2UxMzMwMGIwYmVjMTE0NmY5NWFlNTdmMGQwYmQ2YTUiLCJiOWMzOThmMTg2ODA2ZjVkMjc1'@;
put 'NjE1MDZlNDU1NzQzM2EyY2YxNTAwOWU0OThhZTdhZGVlOWQ2M2QwMWIyMzk2Il0sWyI2MDViZGIwMTk5ODE3MThiOTg2ZDBmMDdlODM0Y2IwZDlkZWI4MzYwZmZiN2Y2MWRmOTgyMzQ1ZWYyN2E3NDc5IiwiMjk3MmQyZGU0ZjhkMjA2ODFhNzhkOTNlYzk2ZmUyM2MyNmJmYWU4NGZiMTRkYjQz'@;
put 'YjAxZTFlOTA1NmI4YzQ5Il0sWyI2MmQxNGRhYjQxNTBiZjQ5NzQwMmZkYzQ1YTIxNWUxMGRjYjAxYzM1NDk1OWIxMGNmZTMxYzdlOWQ4N2ZmMzNkIiwiODBmYzA2YmQ4Y2M1YjAxMDk4MDg4YTE5NTBlZWQwZGIwMWFhMTMyOTY3YWI0NzIyMzVmNTY0MjQ4M2IyNWVhZiJdLFsiODBjNjBhZDAw'@;
put 'NDBmMjdkYWRlNWI0YjA2YzQwOGU1NmIyYzUwZTlmNTZiOWI4YjQyNWU1NTVjMmY4NjMwOGI2ZiIsIjFjMzgzMDNmMWNjNWMzMGYyNmU2NmJhZDdmZTcyZjcwYTY1ZWVkNGNiZTcwMjRlYjFhYTAxZjU2NDMwYmQ1N2EiXSxbIjdhOTM3NWFkNjE2N2FkNTRhYTc0YzYzNDhjYzU0ZDM0NGNjNWRj'@;
put 'OTQ4N2Q4NDcwNDlkNWVhYmIwZmEwM2M4ZmIiLCJkMGUzZmE5ZWNhODcyNjkwOTU1OWUwZDc5MjY5MDQ2YmRjNTllYTEwYzcwY2UyYjAyZDQ5OWVjMjI0ZGM3ZjciXSxbImQ1MjhlY2Q5YjY5NmI1NGM5MDdhOWVkMDQ1NDQ3YTc5YmI0MDhlYzM5YjY4ZGY1MDRiYjUxZjQ1OWJjM2ZmYzkiLCJl'@;
put 'ZWNmNDEyNTMxMzZlNWY5OTk2NmYyMTg4MWZkNjU2ZWJjNDM0NTQwNWM1MjBkYmMwNjM0NjViNTIxNDA5OTMzIl0sWyI0OTM3MGE0YjVmNDM0MTJlYTI1ZjUxNGU4ZWNkYWQwNTI2NjExNWU0YTdlY2IxMzg3MjMxODA4ZjhiNDU5NjMiLCI3NThmM2Y0MWFmZDZlZDQyOGIzMDgxYjA1MTJmZDYy'@;
put 'YTU0YzNmM2FmYmI1YjY3NjRiNjUzMDUyYTEyOTQ5YzlhIl0sWyI3N2YyMzA5MzZlZTg4Y2JiZDczZGY5MzBkNjQ3MDJlZjg4MWQ4MTFlMGUxNDk4ZTJmMWMxM2ViMWZjMzQ1ZDc0IiwiOTU4ZWY0MmE3ODg2YjY0MDBhMDgyNjZlOWJhMWIzNzg5NmM5NTMzMGQ5NzA3N2NiYmU4ZWIzYzc2NzFj'@;
put 'NjBkNiJdLFsiZjJkYWM5OTFjYzRjZTRiOWVhNDQ4ODdlNWM3YzBiY2U1OGM4MDA3NGFiOWQ0ZGJhZWIyODUzMWI3NzM5ZjUzMCIsImUwZGVkYzliM2IyZjhkYWQ0ZGExZjMyZGVjMjUzMWRmOWViNWZiZWIwNTk4ZTRmZDFhMTE3ZGJhNzAzYTNjMzciXSxbIjQ2M2IzZDlmNjYyNjIxZmIxYjRi'@;
put 'ZThmYmJlMjUyMDEyNWEyMTZjZGZjOWRhZTNkZWJjYmE0ODUwYzY5MGQ0NWIiLCI1ZWQ0MzBkNzhjMjk2YzM1NDMxMTQzMDZkZDg2MjJkN2M2MjJlMjdjOTcwYTFkZTMxY2IzNzdiMDFhZjczMDdlIl0sWyJmMTZmODA0MjQ0ZTQ2ZTJhMDkyMzJkNGFmZjNiNTk5NzZiOThmYWMxNDMyOGEyZDFh'@;
put 'MzI0OTZiNDk5OThmMjQ3IiwiY2VkYWJkOWI4MjIwM2Y3ZTEzZDIwNmZjZGY0ZTMzZDkyYTZjNTNjMjZlNWNjZTI2ZDY1Nzk5NjJjNGUzMWRmNiJdLFsiY2FmNzU0MjcyZGM4NDU2M2IwMzUyYjdhMTQzMTFhZjU1ZDI0NTMxNWFjZTI3YzY1MzY5ZTE1ZjcxNTFkNDFkMSIsImNiNDc0NjYwZWYz'@;
put 'NWY1ZjJhNDFiNjQzZmE1ZTQ2MDU3NWY0ZmE5Yjc5NjIyMzJhNWMzMmY5MDgzMThhMDQ0NzYiXSxbIjI2MDBjYTRiMjgyY2I5ODZmODVkMGYxNzA5OTc5ZDhiNDRhMDljMDdjYjg2ZDdjMTI0NDk3YmM4NmYwODIxMjAiLCI0MTE5Yjg4NzUzYzE1YmQ2YTY5M2IwM2ZjZGRiYjQ1ZDVhYzZiZTc0'@;
put 'YWI1ZjBlZjQ0YjBiZTk0NzVhN2U0YjQwIl0sWyI3NjM1Y2E3MmQ3ZTg0MzJjMzM4ZWM1M2NkMTIyMjBiYzAxYzQ4Njg1ZTI0ZjdkYzhjNjAyYTc3NDY5OThlNDM1IiwiOTFiNjQ5NjA5NDg5ZDYxM2QxZDVlNTkwZjc4ZTZkNzRlY2ZjMDYxZDU3MDQ4YmFkOWU3NmYzMDJjNWI5YzYxIl0sWyI3'@;
put 'NTRlMzIzOWYzMjU1NzBjZGJiZjRhODdkZWVlOGE2NmI3ZjJiMzM0NzlkNDY4ZmJjMWE1MDc0M2JmNTZjYzE4IiwiNjczZmI4NmU1YmRhMzBmYjNjZDBlZDMwNGVhNDlhMDIzZWUzM2QwMTk3YTY5NWQwYzVkOTgwOTNjNTM2NjgzIl0sWyJlM2U2YmQxMDcxYTFlOTZhZmY1Nzg1OWM4MmQ1NzBm'@;
put 'MDMzMDgwMDY2MWQxYzk1MmY5ZmUyNjk0NjkxZDliOWU4IiwiNTljOWUwYmJhMzk0ZTc2ZjQwYzBhYTU4Mzc5YTNjYjZhNWEyMjgzOTkzZTkwYzQxNjcwMDJhZjQ5MjBlMzdmNSJdLFsiMTg2YjQ4M2QwNTZhMDMzODI2YWU3M2Q4OGY3MzI5ODVjNGNjYjFmMzJiYTM1ZjRiNGNjNDdmZGNmMDRh'@;
put 'YTZlYiIsIjNiOTUyZDMyYzY3Y2Y3N2UyZTE3NDQ2ZTIwNDE4MGFiMjFmYjgwOTA4OTUxMzhiNGE0YTc5N2Y4NmU4MDg4OGIiXSxbImRmOWQ3MGE2Yjk4NzZjZTU0NGM5ODU2MWY0YmU0ZjcyNTQ0MmU2ZDJiNzM3ZDljOTFhODMyMTcyNGNlMDk2M2YiLCI1NWViMmRhZmQ4NGQ2Y2NkNWY4NjJi'@;
put 'Nzg1ZGMzOWQ0YWIxNTcyMjI3MjBlZjlkYTIxN2I4YzQ1Y2YyYmEyNDE3Il0sWyI1ZWRkNWNjMjNjNTFlODdhNDk3Y2E4MTVkNWRjZTBmOGFiNTI1NTRmODQ5ZWQ4OTk1ZGU2NGM1ZjM0Y2U3MTQzIiwiZWZhZTljOGRiYzE0MTMwNjYxZThjZWMwMzBjODlhZDBjMTNjNjZjMGQxN2EyOTA1Y2Rj'@;
put 'NzA2YWI3Mzk5YTg2OCJdLFsiMjkwNzk4YzJiNjQ3NjgzMGRhMTJmZTAyMjg3ZTllNzc3YWEzZmJhMWMzNTViMTdhNzIyZDM2MmY4NDYxNGZiYSIsImUzOGRhNzZkY2Q0NDA2MjE5ODhkMDBiY2Y3OWFmMjVkNWIyOWMwOTRkYjJhMjMxNDZkMDAzYWZkNDE5NDNlN2EiXSxbImFmM2M0MjNhOTVk'@;
put 'OWY1YjMwNTQ3NTRlZmExNTBhYzM5Y2QyOTU1MmZlMzYwMjU3MzYyZGZkZWNlZjQwNTNiNDUiLCJmOThhM2ZkODMxZWIyYjc0OWE5M2IwZTZmMzVjZmI0MGM4Y2Q1YWE2NjdhMTU1ODFiYzJmZWRlZDQ5OGZkOWM2Il0sWyI3NjZkYmIyNGQxMzRlNzQ1Y2NjYWEyOGM5OWJmMjc0OTA2YmI2NmIy'@;
put 'NmRjZjk4ZGY4ZDJmZWQ1MGQ4ODQyNDlhIiwiNzQ0YjExNTJlYWNiZTVlMzhkY2M4ODc5ODBkYTM4Yjg5NzU4NGE2NWZhMDZjZWRkMmM5MjRmOTdjYmFjNTk5NiJdLFsiNTlkYmY0NmY4Yzk0NzU5YmEyMTI3N2MzMzc4NGY0MTY0NWY3YjQ0ZjZjNTk2YTU4Y2U5MmU2NjYxOTFhYmUzZSIsImM1'@;
put 'MzRhZDQ0MTc1ZmJjMzAwZjRlYTZjZTY0ODMwOWEwNDJjZTczOWE3OTE5Nzk4Y2Q4NWUyMTZjNGEzMDdmNmUiXSxbImYxM2FkYTk1MTAzYzQ1MzczMDVlNjkxZTc0ZTlhNGE4ZGQ2NDdlNzExYTk1ZTczY2I2MmRjNjAxOGNmZDg3YjgiLCJlMTM4MTdiNDRlZTE0ZGU2NjNiZjRiYzgwODM0MWYz'@;
put 'MjY5NDllMjFhNmE3NWMyNTcwNzc4NDE5YmRhZjU3MzNkIl0sWyI3NzU0YjRmYTBlOGFjZWQwNmQ0MTY3YTJjNTljY2E0Y2RhMTg2OWMwNmViYWRmYjY0ODg1NTAwMTVhODg1MjJjIiwiMzBlOTNlODY0ZTY2OWQ4MjIyNGI5NjdjMzAyMGI4ZmE4ZDFlNGUzNTBiNmNiY2M1MzdhNDhiNTc4NDEx'@;
put 'NjNhMiJdLFsiOTQ4ZGNhZGY1OTkwZTA0OGFhMzg3NGQ0NmFiZWY5ZDcwMTg1OGY5NWRlODA0MWQyYTY4MjhjOTllMjI2MjUxOSIsImU0OTFhNDI1MzdmNmU1OTdkNWQyOGEzMjI0YjFiYzI1ZGY5MTU0ZWZiZDJlZjFkMmNiYmEyY2FlNTM0N2Q1N2UiXSxbIjc5NjI0MTQ0NTBjNzZjMTY4OWM3'@;
put 'YjQ4ZjgyMDJlYzM3ZmIyMjRjZjVhYzBiZmExNTcwMzI4YThhM2Q3Yzc3YWIiLCIxMDBiNjEwZWM0ZmZiNDc2MGQ1YzFmYzEzM2VmNmY2YjEyNTA3YTA1MWYwNGFjNTc2MGFmYTViMjlkYjgzNDM3Il0sWyIzNTE0MDg3ODM0OTY0YjU0YjE1YjE2MDY0NGQ5MTU0ODVhMTY5NzcyMjViODg0N2Ji'@;
put 'MGRkMDg1MTM3ZWM0N2NhIiwiZWYwYWZiYjIwNTYyMDU0NDhlMTY1MmM0OGU4MTI3ZmM2MDM5ZTc3YzE1YzIzNzhiN2U3ZDE1YTBkZTI5MzMxMSJdLFsiZDNjYzMwYWQ2YjQ4M2U0YmM3OWNlMmM5ZGQ4YmM1NDk5M2U5NDdlYjhkZjc4N2I0NDI5NDNkM2Y3YjUyN2VhZiIsIjhiMzc4YTIyZDgy'@;
put 'NzI3OGQ4OWM1ZTliZThmOTUwOGFlM2MyYWQ0NjI5MDM1ODYzMGFmYjM0ZGIwNGVlZGUwYTQiXSxbIjE2MjRkODQ3ODA3MzI4NjBjZTFjNzhmY2JmZWZlMDhiMmIyOTgyM2RiOTEzZjY0OTM5NzViYTBmZjQ4NDc2MTAiLCI2ODY1MWNmOWI2ZGE5MDNlMDkxNDQ0OGM2Y2Q5ZDRjYTg5Njg3OGY1'@;
put 'MjgyYmU0YzhjYzA2ZTJhNDA0MDc4NTc1Il0sWyI3MzNjZTgwZGE5NTVhOGEyNjkwMmM5NTYzM2U2MmE5ODUxOTI0NzRiNWFmMjA3ZGE2ZGY3YjRmZDVmYzYxY2Q0IiwiZjU0MzVhMmJkMmJhZGY3ZDQ4NWE0ZDhiOGRiOWZjY2UzZTFlZjhlMDIwMWU0NTc4YzU0NjczYmMxZGM1ZWExZCJdLFsi'@;
put 'MTVkOTQ0MTI1NDk0NTA2NGNmMWExYzMzYmJkM2I0OWY4OTY2YzUwOTIxNzFlNjk5ZWYyNThkZmFiODFjMDQ1YyIsImQ1NmViMzBiNjk0NjNlNzIzNGY1MTM3YjczYjg0MTc3NDM0ODAwYmFjZWJmYzY4NWZjMzdiYmU5ZWZlNDA3MGQiXSxbImExZDBmY2YyZWM5ZGU2NzViNjEyMTM2ZTVjZTcw'@;
put 'ZDI3MWMyMTQxN2M5ZDJiOGFhYWFjMTM4NTk5ZDA3MTc5NDAiLCJlZGQ3N2Y1MGJjYjVhM2NhYjJlOTA3MzczMDk2NjdmMjY0MTQ2MmE1NDA3MGYzZDUxOTIxMmQzOWMxOTdhNjI5Il0sWyJlMjJmYmUxNWMwYWY4Y2NjNTc4MGMwNzM1Zjg0ZGJlOWE3OTBiYWRlZTgyNDVjMDZjN2NhMzczMzFj'@;
put 'YjM2OTgwIiwiYTg1NWJhYmFkNWNkNjBjODhiNDMwYTY5ZjUzYTFhN2EzODI4OTE1NDk2NDc5OWJlNDNkMDZkNzdkMzFkYTA2Il0sWyIzMTEwOTFkZDk4NjBlOGUyMGVlMTM0NzNjMTE1NWY1ZjY5NjM1ZTM5NDcwNGVhYTc0MDA5NDUyMjQ2Y2ZhOWIzIiwiNjZkYjY1NmY4N2QxZjA0ZmZmZDFm'@;
put 'MDQ3ODhjMDY4MzA4NzFlYzVhNjRmZWVlNjg1YmQ4MGYwYjEyODZkODM3NCJdLFsiMzRjMWZkMDRkMzAxYmU4OWIzMWMwNDQyZDNlNmFjMjQ4ODM5MjhiNDVhOTM0MDc4MTg2N2Q0MjMyZWMyZGJkZiIsIjk0MTQ2ODVlOTdiMWI1OTU0YmQ0NmY3MzAxNzQxMzZkNTdmMWNlZWI0ODc0NDNkYzUz'@;
put 'MjE4NTdiYTczYWJlZSJdLFsiZjIxOWVhNWQ2YjU0NzAxYzFjMTRkZTViNTU3ZWI0MmE4ZDEzZjNhYmJjZDA4YWZmY2MyYTVlNmIwNDliOGQ2MyIsIjRjYjk1OTU3ZTgzZDQwYjBmNzNhZjQ1NDRjY2NmNmIxZjRiMDhkM2MwN2IyN2ZiOGQ4YzI5NjJhNDAwNzY2ZDEiXSxbImQ3Yjg3NDBmNzRh'@;
put 'OGZiYWFiMWY2ODNkYjhmNDVkZTI2NTQzYTU0OTBiY2E2MjcwODcyMzY5MTI0NjlhMGI0NDgiLCJmYTc3OTY4MTI4ZDljOTJlZTEwMTBmMzM3YWQ0NzE3ZWZmMTVkYjVlZDNjMDQ5YjM0MTFlMDMxNWVhYTQ1OTNiIl0sWyIzMmQzMWMyMjJmOGY2ZjBlZjg2ZjdjOThkM2EzMzM1ZWFkNWJjZDMy'@;
put 'YWJkZDk0Mjg5ZmU0ZDMwOTFhYTgyNGJmIiwiNWYzMDMyZjU4OTIxNTZlMzljY2QzZDc5MTViOWUxZGEyZTZkYWM5ZTZmMjZlOTYxMTE4ZDE0Yjg0NjJlMTY2MSJdLFsiNzQ2MWYzNzE5MTRhYjMyNjcxMDQ1YTE1NWQ5ODMxZWE4NzkzZDc3Y2Q1OTU5MmM0MzQwZjg2Y2JjMTgzNDdiNSIsIjhl'@;
put 'YzBiYTIzOGI5NmJlYzBjYmRkZGNhZTBhYTQ0MjU0MmVlZTFmZjUwYzk4NmVhNmIzOTg0N2IzY2MwOTJmZjYiXSxbImVlMDc5YWRiMWRmMTg2MDA3NDM1NmEyNWFhMzgyMDZhNmQ3MTZiMmMzZTY3NDUzZDI4NzY5OGJhZDdiMmIyZDYiLCI4ZGMyNDEyYWFmZTNiZTVjNGM1ZjM3ZTBlY2M1Zjlm'@;
put 'NmE0NDY5ODlhZjA0YzRlMjVlYmFhYzQ3OWVjMWM4YzFlIl0sWyIxNmVjOTNlNDQ3ZWM4M2YwNDY3YjE4MzAyZWU2MjBmN2U2NWRlMzMxODc0YzlkYzcyYmZkODYxNmJhOWRhNmI1IiwiNWU0NjMxMTUwZTYyZmI0MGQwZThjMmE3Y2E1ODA0YTM5ZDU4MTg2YTUwZTQ5NzEzOTYyNjc3OGUyNWIw'@;
put 'Njc0ZCJdLFsiZWFhNWY5ODBjMjQ1ZjZmMDM4OTc4MjkwYWZhNzBiNmJkODg1NTg5N2Y5OGI2YWE0ODViOTYwNjVkNTM3YmQ5OSIsImY2NWY1ZDNlMjkyYzJlMDgxOWE1MjgzOTFjOTk0NjI0ZDc4NDg2OWQ3ZTZlYTY3ZmIxODA0MTAyNGVkYzA3ZGMiXSxbIjc4Yzk0MDc1NDRhYzEzMjY5MmVl'@;
put 'MTkxMGEwMjQzOTk1OGFlMDQ4NzcxNTEzNDJlYTk2YzRiNmIzNWE0OWY1MSIsImYzZTAzMTkxNjllYjliODVkNTQwNDc5NTUzOWE1ZTY4ZmExZmJkNTgzYzA2NGQyNDYyYjY3NWYxOTRhM2RkYjQiXSxbIjQ5NGY0YmUyMTlhMWE3NzAxNmRjZDgzODQzMWFlYTAwMDFjZGM4YWU3YTZmYzY4ODcy'@;
put 'NjU3OGQ5NzAyODU3YTUiLCI0MjI0MmE5NjkyODNhNWYzMzliYTdmMDc1ZTM2YmEyYWY5MjVjZTMwZDc2N2VkNmU1NWY0YjAzMTg4MGQ1NjJjIl0sWyJhNTk4YTgwMzBkYTZkODZjNmJjN2YyZjUxNDRlYTU0OWQyODIxMWVhNThmYWE3MGViZjRjMWU2NjVjMWZlOWI1IiwiMjA0YjVkNmY4NDgy'@;
put 'MmMzMDdlNGI0YTcxNDA3MzdhZWMyM2ZjNjNiNjViMzVmODZhMTAwMjZkYmQyZDg2NGU2YiJdLFsiYzQxOTE2MzY1YWJiMmI1ZDA5MTkyZjVmMmRiZWFmZWMyMDhmMDIwZjEyNTcwYTE4NGRiYWRjM2U1ODU5NTk5NyIsIjRmMTQzNTFkMDA4N2VmYTQ5ZDI0NWIzMjg5ODQ5ODlkNWNhZjk0NTBm'@;
put 'MzRiZmMwZWQxNmU5NmI1OGZhOTkxMyJdLFsiODQxZDYwNjNhNTg2ZmE0NzVhNzI0NjA0ZGEwM2JjNWI5MmEyZTBkMmUwYTM2YWNmZTRjNzNhNTUxNDc0Mjg4MSIsIjczODY3ZjU5YzA2NTllODE5MDRmOWExYzc1NDM2OThlNjI1NjJkNjc0NGMxNjljZTdhMzZkZTAxYThkNjE1NCJdLFsiNWU5'@;
put 'NWJiMzk5YTY5NzFkMzc2MDI2OTQ3Zjg5YmRlMmYyODJiMzM4MTA5MjhiZTRkZWQxMTJhYzRkNzBlMjBkNSIsIjM5ZjIzZjM2NjgwOTA4NWJlZWJmYzcxMTgxMzEzNzc1YTk5YzlhZWQ3ZDhiYTM4YjE2MTM4NGM3NDYwMTI4NjUiXSxbIjM2ZTQ2NDFhNTM5NDhmZDQ3NmMzOWY4YTk5ZmQ5NzRl'@;
put 'NWVjMDc1NjRiNTMxNWQ4YmY5OTQ3MWJjYTBlZjJmNjYiLCJkMjQyNGIxYjFhYmU0ZWI4MTY0MjI3YjA4NWM5YWE5NDU2ZWExMzQ5M2ZkNTYzZTA2ZmQ1MWNmNTY5NGM3OGZjIl0sWyIzMzY1ODFlYTdiZmJiYjI5MGMxOTFhMmY1MDdhNDFjZjU2NDM4NDIxNzBlOTE0ZmFlYWIyN2MyYzU3OWY3'@;
put 'MjYiLCJlYWQxMjE2ODU5NWZlMWJlOTkyNTIxMjliNmU1NmIzMzkxZjdhYjE0MTBjZDFlMGVmM2RjZGNhYmQyZmRhMjI0Il0sWyI4YWI4OTgxNmRhZGZkNmI2YTFmMjYzNGZjZjAwZWM4NDAzNzgxMDI1ZWQ2ODkwYzQ4NDk3NDI3MDZiZDQzZWRlIiwiNmZkY2VmMDlmMmY2ZDBhMDQ0ZTY1NGFl'@;
put 'ZjYyNDEzNmY1MDNkNDU5YzNlODk4NDU4NThhNDdhOTEyOWNkZDI0ZSJdLFsiMWUzM2YxYTc0NmM5YzU3NzgxMzMzNDRkOTI5OWZjYWEyMGIwOTM4ZThhY2ZmMjU0NGJiNDAyODRiOGM1ZmI5NCIsIjYwNjYwMjU3ZGQxMWIzYWE5YzhlZDYxOGQyNGVkZmYyMzA2ZDMyMGYxZDAzMDEwZTMzYTdk'@;
put 'MjA1N2YzYjNiNiJdLFsiODViN2MxZGNiM2NlYzFiN2VlN2YzMGRlZDc5ZGQyMGEwZWQxZjRjYzE4Y2JjZmNmYTQxMDM2MWZkOGYwOGYzMSIsIjNkOThhOWNkZDAyNmRkNDNmMzkwNDhmMjVhODg0N2Y0ZmNhZmFkMTg5NWQ3YTYzM2M2ZmVkM2MzNWU5OTk1MTEiXSxbIjI5ZGY5ZmJkOGQ5ZTQ2'@;
put 'NTA5Mjc1ZjRiMTI1ZDZkNDVkN2ZiZTlhM2I4NzhhN2FmODcyYTI4MDA2NjFhYzVmNTEiLCJiNGM0ZmU5OWM3NzVhNjA2ZTJkODg2MjE3OTEzOWZmZGE2MWRjODYxYzAxOWU1NWNkMjg3NmViMmEyN2Q4NGIiXSxbImEwYjFjYWUwNmIwYTg0N2EzZmVhNmU2NzFhYWY4YWRmZGZlNThjYTJmNzY4'@;
put 'MTA1YzgwODJiMmU0NDlmY2UyNTIiLCJhZTQzNDEwMmVkZGUwOTU4ZWM0YjE5ZDkxN2E2YTI4ZTZiNzJkYTE4MzRhZmYwZTY1MGYwNDk1MDNhMjk2Y2YyIl0sWyI0ZThjZWFmYjliM2U5YTEzNmRjN2ZmNjdlODQwMjk1YjQ5OWRmYjNiMjEzM2U0YmExMTNmMmU0YzBlMTIxZTUiLCJjZjIxNzQx'@;
put 'MThjOGI2ZDdhNGI0OGY2ZDUzNGNlNWM3OTQyMmMwODZhNjM0NjA1MDJiODI3Y2U2MmEzMjY2ODNjIl0sWyJkMjRhNDRlMDQ3ZTE5YjZmNWFmYjgxYzdjYTJmNjkwODBhNTA3NjY4OWEwMTA5MTlmNDI3MjVjMmI3ODlhMzNiIiwiNmZiOGQ1NTkxYjQ2NmY4ZmM2M2RiNTBmMWMwZjFjNjkwMTNm'@;
put 'OTk2ODg3YjgyNDRkMmNkZWM0MTdhZmVhOGZhMyJdLFsiZWEwMTYwNmE3YTZjOWNkZDI0OWZkZmNmYWNiOTk1ODQwMDFlZGQyOGFiYmFiNzdiNTEwNGU5OGU4ZTNiMzVkNCIsIjMyMmFmNDkwOGM3MzEyYjBjZmJmZTM2OWY3YTdiM2NkYjdkNDQ5NGJjMjgyMzcwMGNmZDY1MjE4OGEzZWE5OGQi'@;
put 'XSxbImFmOGFkZGJmMmI2NjFjOGE2YzYzMjg2NTVlYjk2NjUxMjUyMDA3ZDhjNWVhMzFiZTRhZDE5NmRlOGNlMjEzMWYiLCI2NzQ5ZTY3YzAyOWI4NWY1MmEwMzRlYWZkMDk2ODM2YjI1MjA4MTg2ODBlMjZhYzhmM2RmYmNkYjcxNzQ5NzAwIl0sWyJlM2FlMTk3NDU2NmNhMDZjYzUxNmQ0N2Uw'@;
put 'ZmIxNjVhNjc0YTNkYWJjZmNhMTVlNzIyZjBlMzQ1MGY0NTg4OSIsIjJhZWFiZTdlNDUzMTUxMDExNjIxN2YwN2JmNGQwNzMwMGRlOTdlNDg3NGY4MWY1MzM0MjBhNzJlZWIwYmQ2YTQiXSxbIjU5MWVlMzU1MzEzZDk5NzIxY2Y2OTkzZmZlZDFlM2UzMDE5OTNmZjNlZDI1ODgwMjA3NWVhOGNl'@;
put 'ZDM5N2UyNDYiLCJiMGVhNTU4YTExM2MzMGJlYTYwZmM0Nzc1NDYwYzc5MDFmZjBiMDUzZDI1Y2EyYmRlZWU5OGYxYTRiZTVkMTk2Il0sWyIxMTM5NmQ1NWZkYTU0YzQ5ZjE5YWE5NzMxOGQ4ZGE2MWZhODU4NGU0N2IwODQ5NDUwNzdjZjAzMjU1YjUyOTg0IiwiOTk4Yzc0YThjZDQ1YWMwMTI4'@;
put 'OWQ1ODMzYTdiZWI0NzQ0ZmY1MzZiMDFiMjU3YmU0YzU3NjdiZWE5M2VhNTdhNCJdLFsiM2M1ZDJhMWJhMzljNWExNzkwMDAwNzM4YzllMGM0MGI4ZGNkZmQ1NDY4NzU0YjY0MDU1NDAxNTdlMDE3YWE3YSIsImIyMjg0Mjc5OTk1YTM0ZTJmOWQ0ZGU3Mzk2ZmMxOGI4MGY5YjhiOWZkZDI3MGY2'@;
put 'NjYxZjc5Y2E0YzgxYmQyNTciXSxbImNjODcwNGI4YTYwYTBkZWZhM2E5OWE3Mjk5ZjJlOWMzZmJjMzk1YWZiMDRhYzA3ODQyNWVmOGExNzkzY2MwMzAiLCJiZGQ0NjAzOWZlZWQxNzg4MWQxZTA4NjJkYjM0N2Y4Y2YzOTViNzRmYzRiY2RjNGU5NDBiNzRlM2FjMWYxYjEzIl0sWyJjNTMzZTRm'@;
put 'N2VhODU1NWFhY2Q5Nzc3YWM1Y2FkMjliOTdkZDRkZWZjY2M1M2VlN2VhMjA0MTE5YjI4ODliMTk3IiwiNmYwYTI1NmJjNWVmZGY0MjlhMmZiNjI0MmYxYTQzYTJkOWI5MjViYjRhNGIzYTI2YmI4ZTBmNDVlYjU5NjA5NiJdLFsiYzE0ZjhmMmNjYjI3ZDZmMTA5ZjZkMDhkMDNjYzk2YTY5YmE4'@;
put 'YzM0ZWVjMDdiYmNmNTY2ZDQ4ZTMzZGE2NTkzIiwiYzM1OWQ2OTIzYmIzOThmN2ZkNDQ3M2UxNmZlMWMyODQ3NWI3NDBkZDA5ODA3NWU2YzBlODY0OTExM2RjM2EzOCJdLFsiYTZjYmMzMDQ2YmM2YTQ1MGJhYzI0Nzg5ZmExNzExNWE0Yzk3MzllZDc1ZjhmMjFjZTQ0MWY3MmUwYjkwZTZlZiIs'@;
put 'IjIxYWU3ZjQ2ODBlODg5YmIxMzA2MTllMmMwZjk1YTM2MGNlYjU3M2M3MDYwMzEzOTg2MmFmZDYxN2ZhOWI5ZiJdLFsiMzQ3ZDZkOWEwMmM0ODkyN2ViZmI4NmMxMzU5YjFjYWYxMzBhM2MwMjY3ZDExY2U2MzQ0YjM5Zjk5ZDQzY2MzOCIsIjYwZWE3ZjYxYTM1MzUyNGQxYzk4N2Y2ZWNlYzky'@;
put 'ZjA4NmQ1NjVhYjY4Nzg3MGNiMTI2ODlmZjFlMzFjNzQ0NDgiXSxbImRhNjU0NWQyMTgxZGI4ZDk4M2Y3ZGNiMzc1ZWY1ODY2ZDQ3YzY3YjFiZjMxYzhjZjg1NWVmNzQzN2I3MjY1NmEiLCI0OWI5NjcxNWFiNjg3OGE3OWU3OGYwN2NlNTY4MGM1ZDY2NzMwNTFiNDkzNWJkODk3ZmVhODI0Yjc3'@;
put 'ZGMyMDhhIl0sWyJjNDA3NDdjYzlkMDEyY2IxYTEzYjgxNDgzMDljNmRlN2VjMjVkNjk0NWQ2NTcxNDZiOWQ1OTk0YjhmZWIxMTExIiwiNWNhNTYwNzUzYmUyYTEyZmM2ZGU2Y2FmMmNiNDg5NTY1ZGI5MzYxNTZiOTUxNGUxYmI1ZTgzMDM3ZTBmYTJkNCJdLFsiNGU0MmM4ZWM4MmM5OTc5OGNj'@;
put 'ZjNhNjEwYmU4NzBlNzgzMzhjN2Y3MTMzNDhiZDM0YzgyMDNlZjQwMzdmMzUwMiIsIjc1NzFkNzRlZTVlMGZiOTJhN2E4YjMzYTA3NzgzMzQxYTU0OTIxNDRjYzU0YmNjNDBhOTQ0NzM2OTM2MDY0MzciXSxbIjM3NzVhYjcwODliYzZhZjgyM2FiYTJlMWFmNzBiMjM2ZDI1MWNhZGIwYzg2NzQz'@;
put 'Mjg3NTIyYTFiM2IwZGVkZWEiLCJiZTUyZDEwN2JjZmEwOWQ4YmNiOTczNmE4MjhjZmE3ZmFjOGRiMTdiZjdhNzZhMmM0MmFkOTYxNDA5MDE4Y2Y3Il0sWyJjZWUzMWNiZjdlMzRlYzM3OWQ5NGZiODE0ZDNkNzc1YWQ5NTQ1OTVkMTMxNGJhODg0Njk1OWUzZTgyZjc0ZTI2IiwiOGZkNjRhMTRj'@;
put 'MDZiNTg5YzI2Yjk0N2FlMmJjZjZiZmEwMTQ5ZWYwYmUxNGVkNGQ4MGY0NDhhMDFjNDNiMWM2ZCJdLFsiYjRmOWVhZWEwOWI2OTE3NjE5ZjZlYTZhNGViNTQ2NGVmZGRiNThmZDQ1YjFlYmVmY2RjMWEwMWQwOGI0Nzk4NiIsIjM5ZTVjOTkyNWI1YTU0YjA3NDMzYTRmMThjNjE3MjZmOGJiMTMx'@;
put 'YzAxMmNhNTQyZWIyNGE4YWMwNzIwMDY4MmEiXSxbImQ0MjYzZGZjM2QyZGY5MjNhMDE3OWE0ODk2NmQzMGNlODRlMjUxNWFmYzNkY2NjMWI3NzkwNzc5MmViY2M2MGUiLCI2MmRmYWYwN2EwZjc4ZmViMzBlMzBkNjI5NTg1M2NlMTg5ZTEyNzc2MGFkNmNmN2ZhZTE2NGUxMjJhMjA4ZDU0Il0s'@;
put 'WyI0ODQ1NzUyNDgyMGZhNjVhNGY4ZDM1ZWI2OTMwODU3YzAwMzJhY2MwYTRhMmRlNDIyMjMzZWVkYTg5NzYxMmM0IiwiMjVhNzQ4YWIzNjc5NzlkOTg3MzNjMzhhMWZhMWMyZTdkYzZjYzA3ZGIyZDYwYTlhZTdhNzZhYWE0OWJkMGY3NyJdLFsiZGZlZWVmMTg4MTEwMWYyY2IxMTY0NGYzYTJh'@;
put 'ZmRmYzIwNDVlMTk5MTkxNTI5MjNmMzY3YTE3NjdjMTFjY2VkYSIsImVjZmI3MDU2Y2YxZGUwNDJmOTQyMGJhYjM5Njc5M2MwYzM5MGJkZTc0YjRiYmRmZjE2YTgzYWUwOWE5YTc1MTciXSxbIjZkN2VmNmIxNzU0M2Y4MzczYzU3M2Y0NGUxZjM4OTgzNWQ4OWJjYmM2MDYyY2VkMzZjODJkZjgz'@;
put 'YjhmYWU4NTkiLCJjZDQ1MGVjMzM1NDM4OTg2ZGZlZmExMGM1N2ZlYTliY2M1MjFhMDk1OWIyZDgwYmJmNzRiMTkwZGNhNzEyZDEwIl0sWyJlNzU2MDVkNTkxMDJhNWEyNjg0NTAwZDNiOTkxZjJlM2YzYzg4YjkzMjI1NTQ3MDM1YWYyNWFmNjZlMDQ1NDFmIiwiZjVjNTQ3NTRhOGY3MWVlNTQw'@;
put 'YjliNDg3Mjg0NzNlMzE0ZjcyOWFjNTMwOGIwNjkzODM2MDk5MGUyYmZhZDEyNSJdLFsiZWI5ODY2MGY0YzRkZmFhMDZhMmJlNDUzZDUwMjBiYzk5YTBjMmU2MGFiZTM4ODQ1N2RkNDNmZWZiMWVkNjIwYyIsIjZjYjlhODg3NmQ5Y2I4NTIwNjA5YWYzYWRkMjZjZDIwYTBhN2NkOGE5NDExMTMx'@;
put 'Y2U4NWY0NDEwMDA5OTIyM2UiXSxbIjEzZTg3YjAyN2Q4NTE0ZDM1OTM5ZjJlNjg5MmIxOTkyMjE1NDU5Njk0MTg4ODMzNmRjMzU2M2UzYjhkYmE5NDIiLCJmZWY1YTNjNjgwNTlhNmRlYzVkNjI0MTE0YmYxZTkxYWFjMmI5ZGE1NjhkNmFiZWIyNTcwZDU1NjQ2YjhhZGYxIl0sWyJlZTE2MzAy'@;
put 'NmU5ZmQ2ZmUwMTdjMzhmMDZhNWJlNmZjMTI1NDI0YjM3MWNlMjcwOGU3YmY0NDkxNjkxZTU3NjRhIiwiMWFjYjI1MGYyNTVkZDYxYzQzZDk0Y2NjNjcwZDBmNThmNDlhZTNmYTE1Yjk2NjIzZTU0MzBkYTBhZDZjNjJiMiJdLFsiYjI2OGY1ZWY5YWQ1MWU0ZDc4ZGUzYTc1MGMyZGM4OWIxZTYy'@;
put 'NmQ0MzUwNTg2Nzk5OTkzMmU1ZGIzM2FmM2Q4MCIsIjVmMzEwZDRiM2M5OWI5ZWJiMTlmNzdkNDFjMWRlZTAxOGNmMGQzNGZkNDE5MTYxNDAwM2U5NDVhMTIxNmU0MjMiXSxbImZmMDdmMzExOGE5ZGYwMzVlOWZhZDg1ZWI2YzdiZmU0MmIwMmYwMWNhOTljZWVhM2JmN2ZmZGJhOTNjNDc1MGQi'@;
put 'LCI0MzgxMzZkNjAzZTg1OGEzYTVjNDQwYzM4ZWNjYmFkZGMxZDI5NDIxMTRlMmVkZGQ0NzQwZDA5OGNlZDFmMGQ4Il0sWyI4ZDhiOTg1NWM3YzA1MmEzNDE0NmZkMjBmZmI2NThiZWE0YjlmNjllMGQ4MjVlYmVjMTZlOGMzY2UyYjUyNmExIiwiY2RiNTU5ZWVkYzJkNzlmOTI2YmFmNDRmYjg0'@;
put 'ZWE0ZDQ0YmNmNTBmZWU1MWQ3Y2ViMzBlMmU3ZjQ2MzAzNjc1OCJdLFsiNTJkYjBiNTM4NGRmYmYwNWJmYTlkNDcyZDdhZTI2ZGZlNGI4NTFjZWNhOTFiMWViYTU0MjYzMTgwZGEzMmI2MyIsImMzYjk5N2QwNTBlZTVkNDIzZWJhZjY2YTZkYjlmNTdiMzE4MGM5MDI4NzU2NzlkZTkyNGI2OWQ4'@;
put 'NGE3YjM3NSJdLFsiZTYyZjk0OTBkM2Q1MWRhNjM5NWVmZDI0ZTgwOTE5Y2M3ZDBmMjljM2YzZmE0OGM2ZmZmNTQzYmVjYmQ0MzM1MiIsIjZkODlhZDdiYTQ4NzZiMGIyMmMyY2EyODBjNjgyODYyZjM0MmM4NTkxZjFkYWY1MTcwZTA3YmZkOWNjYWZhN2QiXSxbIjdmMzBlYTI0NzZiMzk5YjQ5'@;
put 'NTc1MDljODhmNzdkMDE5MWFmYTJmZjVjYjdiMTRmZDZkOGU3ZDY1YWFhYjExOTMiLCJjYTVlZjdkNGIyMzFjOTRjM2IxNTM4OWE1ZjYzMTFlOWRhZmY3YmI2N2IxMDNlOTg4MGVmNGJmZjYzN2FjYWVjIl0sWyI1MDk4ZmYxZTFkOWYxNGZiNDZhMjEwZmFkYTZjOTAzZmVmMGZiN2I0YTFkZDFk'@;
put 'OWFjNjBhMDM2MTgwMGI3YTAwIiwiOTczMTE0MWQ4MWZjOGY4MDg0ZDM3YzZlNzU0MjAwNmIzZWUxYjQwZDYwZGZlNTM2MmE1YjEzMmZkMTdkZGMwIl0sWyIzMmI3OGM3ZGU5ZWU1MTJhNzI4OTViZTZiOWNiZWZhNmUyZjNjNGNjY2U0NDVjOTZiOWYyYzgxZTI3NzhhZDU4IiwiZWUxODQ5ZjUx'@;
put 'M2RmNzFlMzJlZmMzODk2ZWUyODI2MGM3M2JiODA1NDdhZTIyNzViYTQ5NzIzNzc5NGM4NzUzYyJdLFsiZTJjYjc0ZmRkYzhlOWZiY2QwNzZlZWYyYTdjNzJiMGNlMzdkNTBmMDgyNjlkZmMwNzRiNTgxNTUwNTQ3YTRmNyIsImQzYWEyZWQ3MWM5ZGQyMjQ3YTYyZGYwNjI3MzZlYjBiYWRkZWE5'@;
put 'ZTM2MTIyZDJiZTg2NDFhYmNiMDA1Y2M0YTQiXSxbIjg0Mzg0NDc1NjZkNGQ3YmVkYWRjMjk5NDk2YWIzNTc0MjYwMDlhMzVmMjM1Y2IxNDFiZTBkOTljZDEwYWUzYTgiLCJjNGUxMDIwOTE2OTgwYTRkYTVkMDFhYzVlNmFkMzMwNzM0ZWYwZDc5MDY2MzFjNGYyMzkwNDI2YjJlZGQ3OTFmIl0s'@;
put 'WyI0MTYyZDQ4OGI4OTQwMjAzOWI1ODRjNmZjNmMzMDg4NzA1ODdkOWM0NmY2NjBiODc4YWI2NWM4MmM3MTFkNjdlIiwiNjcxNjNlOTAzMjM2Mjg5Zjc3NmYyMmMyNWZiOGEzYWZjMTczMmYyYjg0YjRlOTVkYmRhNDdhZTVhMDg1MjY0OSJdLFsiM2ZhZDNmYTg0Y2FmMGYzNGYwZjg5YmZkMmRj'@;
put 'ZjU0ZmMxNzVkNzY3YWVjM2U1MDY4NGYzYmE0YTRiZjVmNjgzZCIsImNkMWJjN2NiNmNjNDA3YmIyZjBjYTY0N2M3MThhNzMwY2Y3MTg3MmU3ZDBkMmE1M2ZhMjBlZmNkZmU2MTgyNiJdLFsiNjc0ZjI2MDBhMzAwN2EwMDU2OGMxYTdjZTA1ZDA4MTZjMWZiODRiZjEzNzA3OThmMWM2OTUzMmZh'@;
put 'ZWIxYTg2YiIsIjI5OWQyMWY5NDEzZjMzYjNlZGY0M2IyNTcwMDQ1ODBiNzBkYjU3ZGEwYjE4MjI1OWUwOWVlY2M2OWUwZDM4YTUiXSxbImQzMmY0ZGE1NGFkZTc0YWJiODFiODE1YWQxZmIzYjI2M2Q4MmQ2YzY5MjcxNGJjZmY4N2QyOWJkNWVlOWYwOGYiLCJmOTQyOWU3MzhiOGU1M2I5Njhl'@;
put 'OTkwMTZjMDU5NzA3NzgyZTE0ZjQ1MzUzNTlkNTgyZmM0MTY5MTBiM2VlYTg3Il0sWyIzMGU0ZTY3MDQzNTM4NTU1NmU1OTM2NTcxMzU4NDVkMzZmYmI2OTMxZjcyYjA4Y2IxZWQ5NTRmMWUzY2UzZmY2IiwiNDYyZjliY2U2MTk4OTg2Mzg0OTkzNTAxMTNiYmM5YjEwYTg3OGQzNWRhNzA3NDBk'@;
put 'YzY5NWE1NTllYjg4ZGI3YiJdLFsiYmUyMDYyMDAzYzUxY2MzMDA0NjgyOTA0MzMwZTRkZWU3ZjNkY2QxMGIwMWU1ODBiZjE5NzFiMDRkNGNhZDI5NyIsIjYyMTg4YmM0OWQ2MWU1NDI4NTczZDQ4YTc0ZTFjNjU1YjFjNjEwOTA5MDU2ODJhMGQ1NTU4ZWQ3MmRjY2I5YmMiXSxbIjkzMTQ0NDIz'@;
put 'YWNlMzQ1MWVkMjllMGZiOWFjMmFmMjExY2I2ZTg0YTYwMWRmNTk5M2M0MTk4NTlmZmY1ZGYwNGEiLCI3YzEwZGZiMTY0YzM0MjVmNWM3MWEzZjlkNzk5MjAzOGYxMDY1MjI0ZjcyYmI5ZDFkOTAyYTZkMTMwMzdiNDdjIl0sWyJiMDE1ZjgwNDRmNWZjYmRjZjIxY2EyNmQ2YzM0ZmI4MTk3ODI5'@;
put 'MjA1YzdiN2QyYTdjYjY2NDE4YzE1N2IxMTJjIiwiYWI4YzFlMDg2ZDA0ZTgxMzc0NGE2NTViMmRmOGQ1ZjgzYjNjZGM2ZmFhMzA4OGMxZDNhZWExNDU0ZTNhMWQ1ZiJdLFsiZDVlOWUxZGE2NDlkOTdkODllNDg2ODExN2E0NjVhM2E0ZjhhMThkZTU3YTE0MGQzNmIzZjJhZjM0MWEyMWI1MiIs'@;
put 'IjRjYjA0NDM3ZjM5MWVkNzMxMTFhMTNjYzFkNGRkMGRiMTY5MzQ2NWMyMjQwNDgwZDg5NTVlODU5MmYyNzQ0N2EiXSxbImQzYWU0MTA0N2RkN2NhMDY1ZGJmOGVkNzdiOTkyNDM5OTgzMDA1Y2Q3MmUxNmQ2Zjk5NmE1MzE2ZDM2OTY2YmIiLCJiZDFhZWIyMWFkMjJlYmIyMmExMGYwMzAzNDE3'@;
put 'YzZkOTY0ZjhjZGQ3ZGYwYWNhNjE0YjEwZGMxNGQxMjVhYzQ2Il0sWyI0NjNlMjc2M2Q4ODVmOTU4ZmM2NmNkZDIyODAwZjBhNDg3MTk3ZDBhODJlMzc3YjQ5ZjgwYWY4N2M4OTdiMDY1IiwiYmZlZmFjZGIwZTVkMGZkN2RmM2EzMTFhOTRkZTA2MmIyNmI4MGM2MWZiYzk3NTA4Yjc5OTkyNjcx'@;
put 'ZWY3Y2E3ZiJdLFsiNzk4NWZkZmQxMjdjMDU2N2M2ZjUzZWMxYmI2M2VjMzE1OGU1OTdjNDBiZmU3NDdjODNjZGRmYzkxMDY0MTkxNyIsIjYwM2MxMmRhZjNkOTg2MmVmMmIyNWZlMWRlMjg5YWVkMjRlZDI5MWUwZWM2NzA4NzAzYTViZDU2N2YzMmVkMDMiXSxbIjc0YTFhZDZiNWY3NmUzOWRi'@;
put 'MmRkMjQ5NDEwZWFjN2Y5OWU3NGM1OWNiODNkMmQwZWQ1ZmYxNTQzZGE3NzAzZTkiLCJjYzYxNTdlZjE4YzljNjNjZDYxOTNkODM2MzFiYmVhMDA5M2UwOTY4OTQyZThjMzNkNTczN2ZkNzkwZTBkYjA4Il0sWyIzMDY4MmE1MDcwMzM3NWY2MDJkNDE2NjY0YmExOWI3ZmM5YmFiNDJjNzI3NDc0'@;
put 'NjNhNzFkMDg5NmIyMmY2ZGEzIiwiNTUzZTA0ZjZiMDE4YjRmYTZjOGYzOWU3ZjMxMWQzMTc2MjkwZDBlMGYxOWNhNzNmMTc3MTRkOTk3N2EyMmZmOCJdLFsiOWUyMTU4ZjBkN2MwZDVmMjZjMzc5MWVmZWZhNzk1OTc2NTRlN2EyYjI0NjRmNTJiMWVlNmMxMzQ3NzY5ZWY1NyIsIjcxMmZjZGQx'@;
put 'YjkwNTNmMDkwMDNhMzQ4MWZhNzc2MmU5ZmZkN2M4ZWYzNWEzODUwOWUyZmJmMjYyOTAwODM3MyJdLFsiMTc2ZTI2OTg5YTQzYzljZmViYTQwMjljMjAyNTM4YzI4MTcyZTU2NmUzYzRmY2U3MzIyODU3ZjNiZTMyN2Q2NiIsImVkOGNjOWQwNGIyOWViODc3ZDI3MGI0ODc4ZGM0M2MxOWFlZmQz'@;
put 'MWY0ZWVlMDllZTdiNDc4MzRjMWZhNGIxYzMiXSxbIjc1ZDQ2ZWZlYTM3NzFlNmU2OGFiYjg5YTEzYWQ3NDdlY2YxODkyMzkzZGZjNGYxYjcwMDQ3ODhjNTAzNzRkYTgiLCI5ODUyMzkwYTk5NTA3Njc5ZmQwYjg2ZmQyYjM5YTg2OGQ3ZWZjMjIxNTEzNDZlMWEzY2E0NzI2NTg2YTZiZWQ4Il0s'@;
put 'WyI4MDlhMjBjNjdkNjQ5MDBmZmI2OThjNGM4MjVmNmQ1ZjIzMTBmYjA0NTFjODY5MzQ1YjczMTlmNjQ1NjA1NzIxIiwiOWU5OTQ5ODBkOTkxN2UyMmI3NmIwNjE5MjdmYTA0MTQzZDA5NmNjYzU0OTYzZTZhNWViZmE1ZjNmOGUyODZjMSJdLFsiMWIzODkwM2E0M2Y3ZjExNGVkNDUwMGI0ZWFj'@;
put 'NzA4M2ZkZWZlY2UxY2YyOWM2MzUyOGQ1NjM0NDZmOTcyYzE4MCIsIjQwMzZlZGM5MzFhNjBhZTg4OTM1M2Y3N2ZkNTNkZTRhMjcwOGIyNmI2ZjVkYTcyYWQzMzk0MTE5ZGFmNDA4ZjkiXV19fX0sOTUzOihILEIsTCk9PnsidXNlIHN0cmljdCI7dmFyIEs9QixKPUwoMzc4NSksST1MKDk3NDYp'@;
put 'LFI9TCg0NTA0KTtLLmFzc2VydD1JLEsudG9BcnJheT1SLnRvQXJyYXksSy56ZXJvMj1SLnplcm8yLEsudG9IZXg9Ui50b0hleCxLLmVuY29kZT1SLmVuY29kZSxLLmdldE5BRj1mdW5jdGlvbihFLHosail7dmFyIFY9bmV3IEFycmF5KE1hdGgubWF4KEUuYml0TGVuZ3RoKCksaikrMSk7Vi5m'@;
put 'aWxsKDApO2Zvcih2YXIgRz0xPDx6KzEsVz1FLmNsb25lKCksVT0wO1U8Vi5sZW5ndGg7VSsrKXt2YXIgcSx0ZT1XLmFuZGxuKEctMSk7Vy5pc09kZCgpP1cuaXN1Ym4ocT10ZT4oRz4+MSktMT8oRz4+MSktdGU6dGUpOnE9MCxWW1VdPXEsVy5pdXNocm4oMSl9cmV0dXJuIFZ9LEsuZ2V0SlNG'@;
put 'PWZ1bmN0aW9uKEUseil7dmFyIGo9W1tdLFtdXTtFPUUuY2xvbmUoKSx6PXouY2xvbmUoKTtmb3IodmFyIFYsRz0wLFc9MDtFLmNtcG4oLUcpPjB8fHouY21wbigtVyk+MDspe3ZhciBVLHEsdGU9RS5hbmRsbigzKStHJjMsbmU9ei5hbmRsbigzKStXJjM7Mz09PXRlJiYodGU9LTEpLDM9PT1u'@;
put 'ZSYmKG5lPS0xKSxVPTEmdGU/MyE9KFY9RS5hbmRsbig3KStHJjcpJiY1IT09Vnx8MiE9PW5lP3RlOi10ZTowLGpbMF0ucHVzaChVKSxxPTEmbmU/MyE9KFY9ei5hbmRsbig3KStXJjcpJiY1IT09Vnx8MiE9PXRlP25lOi1uZTowLGpbMV0ucHVzaChxKSwyKkc9PT1VKzEmJihHPTEtRyksMipX'@;
put 'PT09cSsxJiYoVz0xLVcpLEUuaXVzaHJuKDEpLHouaXVzaHJuKDEpfXJldHVybiBqfSxLLmNhY2hlZFByb3BlcnR5PWZ1bmN0aW9uKEUseixqKXt2YXIgVj0iXyIrejtFLnByb3RvdHlwZVt6XT1mdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzW1ZdP3RoaXNbVl06dGhpc1tWXT1qLmNh'@;
put 'bGwodGhpcyl9fSxLLnBhcnNlQnl0ZXM9ZnVuY3Rpb24oRSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBFP0sudG9BcnJheShFLCJoZXgiKTpFfSxLLmludEZyb21MRT1mdW5jdGlvbihFKXtyZXR1cm4gbmV3IEooRSwiaGV4IiwibGUiKX19LDM3ODU6ZnVuY3Rpb24oSCxCLEwpeyFmdW5jdGlv'@;
put 'bihLLEopeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBJKGcsQyl7aWYoIWcpdGhyb3cgbmV3IEVycm9yKEN8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gUihnLEMpe2cuc3VwZXJfPUM7dmFyIE09ZnVuY3Rpb24oKXt9O00ucHJvdG90eXBlPUMucHJvdG90eXBlLGcucHJvdG90eXBlPW5l'@;
put 'dyBNLGcucHJvdG90eXBlLmNvbnN0cnVjdG9yPWd9ZnVuY3Rpb24gRShnLEMsTSl7aWYoRS5pc0JOKGcpKXJldHVybiBnO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1nJiYoImxlIiE9PUMmJiJiZSIhPT1DfHwoTT1D'@;
put 'LEM9MTApLHRoaXMuX2luaXQoZ3x8MCxDfHwxMCxNfHwiYmUiKSl9dmFyIHo7Im9iamVjdCI9PXR5cGVvZiBLP0suZXhwb3J0cz1FOkouQk49RSxFLkJOPUUsRS53b3JkU2l6ZT0yNjt0cnl7ej10eXBlb2Ygd2luZG93PCJ1IiYmdm9pZCAwIT09d2luZG93LkJ1ZmZlcj93aW5kb3cuQnVmZmVy'@;
put 'OkwoNTU2OCkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBqKGcsQyl7dmFyIE09Zy5jaGFyQ29kZUF0KEMpO3JldHVybiBNPj02NSYmTTw9NzA/TS01NTpNPj05NyYmTTw9MTAyP00tODc6TS00OCYxNX1mdW5jdGlvbiBWKGcsQyxNKXt2YXIgeT1qKGcsTSk7cmV0dXJuIE0tMT49QyYmKHl8PWoo'@;
put 'ZyxNLTEpPDw0KSx5fWZ1bmN0aW9uIEcoZyxDLE0seSl7Zm9yKHZhciBwPTAsUz1NYXRoLm1pbihnLmxlbmd0aCxNKSxRPUM7UTxTO1ErKyl7dmFyIHJlPWcuY2hhckNvZGVBdChRKS00ODtwKj15LHArPXJlPj00OT9yZS00OSsxMDpyZT49MTc/cmUtMTcrMTA6cmV9cmV0dXJuIHB9RS5pc0JO'@;
put 'PWZ1bmN0aW9uKGcpe3JldHVybiBnIGluc3RhbmNlb2YgRXx8bnVsbCE9PWcmJiJvYmplY3QiPT10eXBlb2YgZyYmZy5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PUUud29yZFNpemUmJkFycmF5LmlzQXJyYXkoZy53b3Jkcyl9LEUubWF4PWZ1bmN0aW9uKGcsQyl7cmV0dXJuIGcuY21wKEMpPjA/'@;
put 'ZzpDfSxFLm1pbj1mdW5jdGlvbihnLEMpe3JldHVybiBnLmNtcChDKTwwP2c6Q30sRS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oZyxDLE0pe2lmKCJudW1iZXIiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdE51bWJlcihnLEMsTSk7aWYoIm9iamVjdCI9PXR5cGVvZiBnKXJldHVybiB0'@;
put 'aGlzLl9pbml0QXJyYXkoZyxDLE0pOyJoZXgiPT09QyYmKEM9MTYpLEkoQz09PSgwfEMpJiZDPj0yJiZDPD0zNik7dmFyIHk9MDsiLSI9PT0oZz1nLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKHkrKyx0aGlzLm5lZ2F0aXZlPTEpLHk8Zy5sZW5ndGgmJigxNj09PUM/dGhp'@;
put 'cy5fcGFyc2VIZXgoZyx5LE0pOih0aGlzLl9wYXJzZUJhc2UoZyxDLHkpLCJsZSI9PT1NJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksQyxNKSkpfSxFLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihnLEMsTSl7ZzwwJiYodGhpcy5uZWdhdGl2ZT0xLGc9LWcpLGc8Njcx'@;
put 'MDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJmddLHRoaXMubGVuZ3RoPTEpOmc8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooSShnPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4'@;
put 'ODYzJmcsZy82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09TSYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEMsTSl9LEUucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oZyxDLE0pe2lmKEkoIm51bWJlciI9PXR5cGVvZiBnLmxlbmd0aCksZy5s'@;
put 'ZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoZy5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGg7eSsrKXRoaXMud29yZHNbeV09MDt2'@;
put 'YXIgcCxTLFE9MDtpZigiYmUiPT09TSlmb3IoeT1nLmxlbmd0aC0xLHA9MDt5Pj0wO3ktPTMpdGhpcy53b3Jkc1twXXw9KFM9Z1t5XXxnW3ktMV08PDh8Z1t5LTJdPDwxNik8PFEmNjcxMDg4NjMsdGhpcy53b3Jkc1twKzFdPVM+Pj4yNi1RJjY3MTA4ODYzLChRKz0yNCk+PTI2JiYoUS09MjYs'@;
put 'cCsrKTtlbHNlIGlmKCJsZSI9PT1NKWZvcih5PTAscD0wO3k8Zy5sZW5ndGg7eSs9Myl0aGlzLndvcmRzW3BdfD0oUz1nW3ldfGdbeSsxXTw8OHxnW3krMl08PDE2KTw8USY2NzEwODg2Myx0aGlzLndvcmRzW3ArMV09Uz4+PjI2LVEmNjcxMDg4NjMsKFErPTI0KT49MjYmJihRLT0yNixwKysp'@;
put 'O3JldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihnLEMsTSl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChnLmxlbmd0aC1DKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciB5PTA7eTx0aGlzLmxlbmd0aDt5KyspdGhp'@;
put 'cy53b3Jkc1t5XT0wO3ZhciBwLFM9MCxRPTA7aWYoImJlIj09PU0pZm9yKHk9Zy5sZW5ndGgtMTt5Pj1DO3ktPTIpcD1WKGcsQyx5KTw8Uyx0aGlzLndvcmRzW1FdfD02NzEwODg2MyZwLFM+PTE4PyhTLT0xOCx0aGlzLndvcmRzW1ErPTFdfD1wPj4+MjYpOlMrPTg7ZWxzZSBmb3IoeT0oZy5s'@;
put 'ZW5ndGgtQyklMj09MD9DKzE6Qzt5PGcubGVuZ3RoO3krPTIpcD1WKGcsQyx5KTw8Uyx0aGlzLndvcmRzW1FdfD02NzEwODg2MyZwLFM+PTE4PyhTLT0xOCx0aGlzLndvcmRzW1ErPTFdfD1wPj4+MjYpOlMrPTg7dGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9u'@;
put 'KGcsQyxNKXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgeT0wLHA9MTtwPD02NzEwODg2MztwKj1DKXkrKzt5LS0scD1wL0N8MDtmb3IodmFyIFM9Zy5sZW5ndGgtTSxRPVMleSxyZT1NYXRoLm1pbihTLFMtUSkrTSxmZT0wLG1lPU07bWU8cmU7bWUrPXkpZmU9RyhnLG1l'@;
put 'LG1lK3ksQyksdGhpcy5pbXVsbihwKSx0aGlzLndvcmRzWzBdK2ZlPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPWZlOnRoaXMuX2lhZGRuKGZlKTtpZigwIT09USl7dmFyIGtlPTE7Zm9yKGZlPUcoZyxtZSxnLmxlbmd0aCxDKSxtZT0wO21lPFE7bWUrKylrZSo9Qzt0aGlzLmltdWxuKGtlKSx0'@;
put 'aGlzLndvcmRzWzBdK2ZlPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPWZlOnRoaXMuX2lhZGRuKGZlKX10aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZyl7Zy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKWcu'@;
put 'd29yZHNbQ109dGhpcy53b3Jkc1tDXTtnLmxlbmd0aD10aGlzLmxlbmd0aCxnLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsZy5yZWQ9dGhpcy5yZWR9LEUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IEUobnVsbCk7cmV0dXJuIHRoaXMuY29weShnKSxnfSxFLnByb3RvdHlw'@;
put 'ZS5fZXhwYW5kPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8ZzspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxFLnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRo'@;
put 'aXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LEUucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSxFLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBXPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAw'@;
put 'MDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAw'@;
put 'MDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLFU9WzAsMCwyNSwxNiwxMiwxMSwxMCw5'@;
put 'LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0scT1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0'@;
put 'ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5'@;
put 'MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiB0ZShnLEMsTSl7TS5uZWdhdGl2ZT1DLm5lZ2F0aXZlXmcubmVnYXRpdmU7dmFyIHk9Zy5sZW5ndGgrQy5sZW5ndGh8MDtNLmxlbmd0aD15LHk9eS0xfDA7dmFyIHA9MHxnLndvcmRzWzBdLFM9MHxDLndvcmRzWzBd'@;
put 'LFE9cCpTLGZlPVEvNjcxMDg4NjR8MDtNLndvcmRzWzBdPTY3MTA4ODYzJlE7Zm9yKHZhciBtZT0xO21lPHk7bWUrKyl7Zm9yKHZhciBrZT1mZT4+PjI2LFRlPTY3MTA4ODYzJmZlLFBlPU1hdGgubWluKG1lLEMubGVuZ3RoLTEpLEZlPU1hdGgubWF4KDAsbWUtZy5sZW5ndGgrMSk7RmU8PVBl'@;
put 'O0ZlKyspa2UrPShRPShwPTB8Zy53b3Jkc1ttZS1GZXwwXSkqKFM9MHxDLndvcmRzW0ZlXSkrVGUpLzY3MTA4ODY0fDAsVGU9NjcxMDg4NjMmUTtNLndvcmRzW21lXT0wfFRlLGZlPTB8a2V9cmV0dXJuIDAhPT1mZT9NLndvcmRzW21lXT0wfGZlOk0ubGVuZ3RoLS0sTS5zdHJpcCgpfUUucHJv'@;
put 'dG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGcsQyl7dmFyIE07aWYoQz0wfEN8fDEsMTY9PT0oZz1nfHwxMCl8fCJoZXgiPT09Zyl7TT0iIjtmb3IodmFyIHk9MCxwPTAsUz0wO1M8dGhpcy5sZW5ndGg7UysrKXt2YXIgUT10aGlzLndvcmRzW1NdLHJlPSgxNjc3NzIxNSYoUTw8eXxwKSkudG9T'@;
put 'dHJpbmcoMTYpO009MCE9KHA9UT4+PjI0LXkmMTY3NzcyMTUpfHxTIT09dGhpcy5sZW5ndGgtMT9XWzYtcmUubGVuZ3RoXStyZStNOnJlK00sKHkrPTIpPj0yNiYmKHktPTI2LFMtLSl9Zm9yKDAhPT1wJiYoTT1wLnRvU3RyaW5nKDE2KStNKTtNLmxlbmd0aCVDIT0wOylNPSIwIitNO3JldHVy'@;
put 'biAwIT09dGhpcy5uZWdhdGl2ZSYmKE09Ii0iK00pLE19aWYoZz09PSgwfGcpJiZnPj0yJiZnPD0zNil7dmFyIGZlPVVbZ10sbWU9cVtnXTtNPSIiO3ZhciBrZT10aGlzLmNsb25lKCk7Zm9yKGtlLm5lZ2F0aXZlPTA7IWtlLmlzWmVybygpOyl7dmFyIFRlPWtlLm1vZG4obWUpLnRvU3RyaW5n'@;
put 'KGcpO009KGtlPWtlLmlkaXZuKG1lKSkuaXNaZXJvKCk/VGUrTTpXW2ZlLVRlLmxlbmd0aF0rVGUrTX1mb3IodGhpcy5pc1plcm8oKSYmKE09IjAiK00pO00ubGVuZ3RoJUMhPTA7KU09IjAiK007cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoTT0iLSIrTSksTX1JKCExLCJCYXNlIHNob3Vs'@;
put 'ZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LEUucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIGc9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP2crPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9nKz00'@;
put 'NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmSSghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LWc6Z30sRS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IHRoaXMudG9TdHJpbmcoMTYpfSxFLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihnLEMpe3JldHVybiBJKHZvaWQgMCE9PXopLHRoaXMudG9BcnJheUxpa2UoeixnLEMpfSxFLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXks'@;
put 'ZyxDKX0sRS5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oZyxDLE0pe3ZhciB5PXRoaXMuYnl0ZUxlbmd0aCgpLHA9TXx8TWF0aC5tYXgoMSx5KTtJKHk8PXAsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxJKHA+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0'@;
put 'aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBTLFEscmU9ImxlIj09PUMsZmU9bmV3IGcocCksbWU9dGhpcy5jbG9uZSgpO2lmKHJlKXtmb3IoUT0wOyFtZS5pc1plcm8oKTtRKyspUz1tZS5hbmRsbigyNTUpLG1lLml1c2hybig4KSxmZVtRXT1TO2Zvcig7UTxwO1ErKylmZVtRXT0wfWVsc2V7'@;
put 'Zm9yKFE9MDtRPHAteTtRKyspZmVbUV09MDtmb3IoUT0wOyFtZS5pc1plcm8oKTtRKyspUz1tZS5hbmRsbigyNTUpLG1lLml1c2hybig4KSxmZVtwLVEtMV09U31yZXR1cm4gZmV9LEUucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihnKXtyZXR1cm4gMzItTWF0aC5j'@;
put 'bHozMihnKX06ZnVuY3Rpb24oZyl7dmFyIEM9ZyxNPTA7cmV0dXJuIEM+PTQwOTYmJihNKz0xMyxDPj4+PTEzKSxDPj02NCYmKE0rPTcsQz4+Pj03KSxDPj04JiYoTSs9NCxDPj4+PTQpLEM+PTImJihNKz0yLEM+Pj49MiksTStDfSxFLnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oZyl7'@;
put 'aWYoMD09PWcpcmV0dXJuIDI2O3ZhciBDPWcsTT0wO3JldHVybiEoODE5MSZDKSYmKE0rPTEzLEM+Pj49MTMpLCEoMTI3JkMpJiYoTSs9NyxDPj4+PTcpLCEoMTUmQykmJihNKz00LEM+Pj49NCksISgzJkMpJiYoTSs9MixDPj4+PTIpLCEoMSZDKSYmTSsrLE19LEUucHJvdG90eXBlLmJpdExl'@;
put 'bmd0aD1mdW5jdGlvbigpe3ZhciBDPXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK0N9LEUucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIGc9MCxD'@;
put 'PTA7Qzx0aGlzLmxlbmd0aDtDKyspe3ZhciBNPXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbQ10pO2lmKGcrPU0sMjYhPT1NKWJyZWFrfXJldHVybiBnfSxFLnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSxFLnBy'@;
put 'b3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4oZykuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSxFLnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy50ZXN0bihnLTEpP3RoaXMubm90bihnKS5p'@;
put 'YWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSxFLnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sRS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LEUucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LEUucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgQz0wO0M8Zy5sZW5ndGg7QysrKXRoaXMu'@;
put 'd29yZHNbQ109dGhpcy53b3Jkc1tDXXxnLndvcmRzW0NdO3JldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlvcj1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT0odGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdW9yKGcpfSxFLnByb3RvdHlwZS5vcj1mdW5jdGlvbihnKXty'@;
put 'ZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihnKTpnLmNsb25lKCkuaW9yKHRoaXMpfSxFLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKGcpOmcuY2xvbmUoKS5pdW9yKHRoaXMp'@;
put 'fSxFLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihnKXt2YXIgQztDPXRoaXMubGVuZ3RoPmcubGVuZ3RoP2c6dGhpcztmb3IodmFyIE09MDtNPEMubGVuZ3RoO00rKyl0aGlzLndvcmRzW01dPXRoaXMud29yZHNbTV0mZy53b3Jkc1tNXTtyZXR1cm4gdGhpcy5sZW5ndGg9Qy5sZW5ndGgsdGhp'@;
put 'cy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKGcpe3JldHVybiBJKDA9PSh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1YW5kKGcpfSxFLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5p'@;
put 'YW5kKGcpOmcuY2xvbmUoKS5pYW5kKHRoaXMpfSxFLnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoZyk6Zy5jbG9uZSgpLml1YW5kKHRoaXMpfSxFLnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihnKXt2YXIg'@;
put 'QyxNO3RoaXMubGVuZ3RoPmcubGVuZ3RoPyhDPXRoaXMsTT1nKTooQz1nLE09dGhpcyk7Zm9yKHZhciB5PTA7eTxNLmxlbmd0aDt5KyspdGhpcy53b3Jkc1t5XT1DLndvcmRzW3ldXk0ud29yZHNbeV07aWYodGhpcyE9PUMpZm9yKDt5PEMubGVuZ3RoO3krKyl0aGlzLndvcmRzW3ldPUMud29y'@;
put 'ZHNbeV07cmV0dXJuIHRoaXMubGVuZ3RoPUMubGVuZ3RoLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT0odGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihnKX0sRS5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKGcpe3JldHVy'@;
put 'biB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihnKTpnLmNsb25lKCkuaXhvcih0aGlzKX0sRS5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKGcpOmcuY2xvbmUoKS5pdXhvcih0aGlz'@;
put 'KX0sRS5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBDPTB8TWF0aC5jZWlsKGcvMjYpLE09ZyUyNjt0aGlzLl9leHBhbmQoQyksTT4wJiZDLS07Zm9yKHZhciB5PTA7eTxDO3krKyl0aGlzLndvcmRzW3ldPTY3MTA4ODYzJn50aGlz'@;
put 'LndvcmRzW3ldO3JldHVybiBNPjAmJih0aGlzLndvcmRzW3ldPX50aGlzLndvcmRzW3ldJjY3MTA4ODYzPj4yNi1NKSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihnKX0sRS5wcm90b3R5cGUuc2V0bj1mdW5jdGlv'@;
put 'bihnLEMpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgTT1nLzI2fDAseT1nJTI2O3JldHVybiB0aGlzLl9leHBhbmQoTSsxKSx0aGlzLndvcmRzW01dPUM/dGhpcy53b3Jkc1tNXXwxPDx5OnRoaXMud29yZHNbTV0mfigxPDx5KSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlh'@;
put 'ZGQ9ZnVuY3Rpb24oZyl7dmFyIEMsTSx5O2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLEM9dGhpcy5pc3ViKGcpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVn'@;
put 'YXRpdmUpcmV0dXJuIGcubmVnYXRpdmU9MCxDPXRoaXMuaXN1YihnKSxnLm5lZ2F0aXZlPTEsQy5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oTT10aGlzLHk9Zyk6KE09Zyx5PXRoaXMpO2Zvcih2YXIgcD0wLFM9MDtTPHkubGVuZ3RoO1MrKyl0aGlzLndvcmRzW1NdPTY3MTA4'@;
put 'ODYzJihDPSgwfE0ud29yZHNbU10pKygwfHkud29yZHNbU10pK3ApLHA9Qz4+PjI2O2Zvcig7MCE9PXAmJlM8TS5sZW5ndGg7UysrKXRoaXMud29yZHNbU109NjcxMDg4NjMmKEM9KDB8TS53b3Jkc1tTXSkrcCkscD1DPj4+MjY7aWYodGhpcy5sZW5ndGg9TS5sZW5ndGgsMCE9PXApdGhpcy53'@;
put 'b3Jkc1t0aGlzLmxlbmd0aF09cCx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoTSE9PXRoaXMpZm9yKDtTPE0ubGVuZ3RoO1MrKyl0aGlzLndvcmRzW1NdPU0ud29yZHNbU107cmV0dXJuIHRoaXN9LEUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnKXt2YXIgQztyZXR1cm4gMCE9PWcubmVnYXRpdmUm'@;
put 'JjA9PT10aGlzLm5lZ2F0aXZlPyhnLm5lZ2F0aXZlPTAsQz10aGlzLnN1YihnKSxnLm5lZ2F0aXZlXj0xLEMpOjA9PT1nLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLEM9Zy5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLEMpOnRoaXMubGVuZ3RoPmcubGVu'@;
put 'Z3RoP3RoaXMuY2xvbmUoKS5pYWRkKGcpOmcuY2xvbmUoKS5pYWRkKHRoaXMpfSxFLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcpe2lmKDAhPT1nLm5lZ2F0aXZlKXtnLm5lZ2F0aXZlPTA7dmFyIEM9dGhpcy5pYWRkKGcpO3JldHVybiBnLm5lZ2F0aXZlPTEsQy5fbm9ybVNpZ24oKX1pZigw'@;
put 'IT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgTSx5LHA9dGhpcy5jbXAoZyk7aWYoMD09PXApcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNb'@;
put 'MF09MCx0aGlzO3A+MD8oTT10aGlzLHk9Zyk6KE09Zyx5PXRoaXMpO2Zvcih2YXIgUz0wLFE9MDtRPHkubGVuZ3RoO1ErKylTPShDPSgwfE0ud29yZHNbUV0pLSgwfHkud29yZHNbUV0pK1MpPj4yNix0aGlzLndvcmRzW1FdPTY3MTA4ODYzJkM7Zm9yKDswIT09UyYmUTxNLmxlbmd0aDtRKysp'@;
put 'Uz0oQz0oMHxNLndvcmRzW1FdKStTKT4+MjYsdGhpcy53b3Jkc1tRXT02NzEwODg2MyZDO2lmKDA9PT1TJiZRPE0ubGVuZ3RoJiZNIT09dGhpcylmb3IoO1E8TS5sZW5ndGg7USsrKXRoaXMud29yZHNbUV09TS53b3Jkc1tRXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5n'@;
put 'dGgsUSksTSE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihnKX07dmFyIG5lPWZ1bmN0aW9uKGcsQyxNKXt2YXIgeSxwLFMsUT1nLndvcmRzLHJlPUMud29yZHMsZmU9TS53'@;
put 'b3JkcyxtZT0wLGtlPTB8UVswXSxUZT04MTkxJmtlLFBlPWtlPj4+MTMsRmU9MHxRWzFdLE5lPTgxOTEmRmUsTGU9RmU+Pj4xMyxCZT0wfFFbMl0sSGU9ODE5MSZCZSxRZT1CZT4+PjEzLG10PTB8UVszXSxLZT04MTkxJm10LHdlPW10Pj4+MTMsSWU9MHxRWzRdLE9lPTgxOTEmSWUsZXQ9SWU+'@;
put 'Pj4xMyxudD0wfFFbNV0scWU9ODE5MSZudCxodD1udD4+PjEzLEVlPTB8UVs2XSxEZT04MTkxJkVlLCRlPUVlPj4+MTMsYXQ9MHxRWzddLGN0PTgxOTEmYXQsT3Q9YXQ+Pj4xMyxQdD0wfFFbOF0sQXQ9ODE5MSZQdCxKdD1QdD4+PjEzLG1uPTB8UVs5XSxOdD04MTkxJm1uLGJuPW1uPj4+MTMs'@;
put 'R249MHxyZVswXSxvbj04MTkxJkduLCRuPUduPj4+MTMsTm49MHxyZVsxXSxwdD04MTkxJk5uLHBuPU5uPj4+MTMsaG49MHxyZVsyXSxDdD04MTkxJmhuLGVuPWhuPj4+MTMsX3Q9MHxyZVszXSxWdD04MTkxJl90LF9uPV90Pj4+MTMsb3Q9MHxyZVs0XSxJdD04MTkxJm90LG5uPW90Pj4+MTMs'@;
put 'RHQ9MHxyZVs1XSx2dD04MTkxJkR0LEd0PUR0Pj4+MTMsTG49MHxyZVs2XSx6dD04MTkxJkxuLE1uPUxuPj4+MTMsVG49MHxyZVs3XSxzbj04MTkxJlRuLEJuPVRuPj4+MTMsRm49MHxyZVs4XSxxdD04MTkxJkZuLEhuPUZuPj4+MTMsaWk9MHxyZVs5XSxjbj04MTkxJmlpLGpuPWlpPj4+MTM7'@;
put 'TS5uZWdhdGl2ZT1nLm5lZ2F0aXZlXkMubmVnYXRpdmUsTS5sZW5ndGg9MTk7dmFyIFhyPShtZSsoeT1NYXRoLmltdWwoVGUsb24pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKFRlLCRuKSkrTWF0aC5pbXVsKFBlLG9uKXwwKSk8PDEzKXwwO21lPSgoUz1NYXRoLmltdWwoUGUsJG4pKSso'@;
put 'cD4+PjEzKXwwKSsoWHI+Pj4yNil8MCxYciY9NjcxMDg4NjMseT1NYXRoLmltdWwoTmUsb24pLHA9KHA9TWF0aC5pbXVsKE5lLCRuKSkrTWF0aC5pbXVsKExlLG9uKXwwLFM9TWF0aC5pbXVsKExlLCRuKTt2YXIgdmk9KG1lKyh5PXkrTWF0aC5pbXVsKFRlLHB0KXwwKXwwKSsoKDgxOTEmKHA9'@;
put 'KHA9cCtNYXRoLmltdWwoVGUscG4pfDApK01hdGguaW11bChQZSxwdCl8MCkpPDwxMyl8MDttZT0oKFM9UytNYXRoLmltdWwoUGUscG4pfDApKyhwPj4+MTMpfDApKyh2aT4+PjI2KXwwLHZpJj02NzEwODg2Myx5PU1hdGguaW11bChIZSxvbikscD0ocD1NYXRoLmltdWwoSGUsJG4pKStNYXRo'@;
put 'LmltdWwoUWUsb24pfDAsUz1NYXRoLmltdWwoUWUsJG4pLHk9eStNYXRoLmltdWwoTmUscHQpfDAscD0ocD1wK01hdGguaW11bChOZSxwbil8MCkrTWF0aC5pbXVsKExlLHB0KXwwLFM9UytNYXRoLmltdWwoTGUscG4pfDA7dmFyIEVyPShtZSsoeT15K01hdGguaW11bChUZSxDdCl8MCl8MCkr'@;
put 'KCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFRlLGVuKXwwKStNYXRoLmltdWwoUGUsQ3QpfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKFBlLGVuKXwwKSsocD4+PjEzKXwwKSsoRXI+Pj4yNil8MCxFciY9NjcxMDg4NjMseT1NYXRoLmltdWwoS2Usb24pLHA9KHA9TWF0aC5pbXVsKEtl'@;
put 'LCRuKSkrTWF0aC5pbXVsKHdlLG9uKXwwLFM9TWF0aC5pbXVsKHdlLCRuKSx5PXkrTWF0aC5pbXVsKEhlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoSGUscG4pfDApK01hdGguaW11bChRZSxwdCl8MCxTPVMrTWF0aC5pbXVsKFFlLHBuKXwwLHk9eStNYXRoLmltdWwoTmUsQ3QpfDAscD0ocD1w'@;
put 'K01hdGguaW11bChOZSxlbil8MCkrTWF0aC5pbXVsKExlLEN0KXwwLFM9UytNYXRoLmltdWwoTGUsZW4pfDA7dmFyIFlpPShtZSsoeT15K01hdGguaW11bChUZSxWdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFRlLF9uKXwwKStNYXRoLmltdWwoUGUsVnQpfDApKTw8MTMpfDA7'@;
put 'bWU9KChTPVMrTWF0aC5pbXVsKFBlLF9uKXwwKSsocD4+PjEzKXwwKSsoWWk+Pj4yNil8MCxZaSY9NjcxMDg4NjMseT1NYXRoLmltdWwoT2Usb24pLHA9KHA9TWF0aC5pbXVsKE9lLCRuKSkrTWF0aC5pbXVsKGV0LG9uKXwwLFM9TWF0aC5pbXVsKGV0LCRuKSx5PXkrTWF0aC5pbXVsKEtlLHB0'@;
put 'KXwwLHA9KHA9cCtNYXRoLmltdWwoS2UscG4pfDApK01hdGguaW11bCh3ZSxwdCl8MCxTPVMrTWF0aC5pbXVsKHdlLHBuKXwwLHk9eStNYXRoLmltdWwoSGUsQ3QpfDAscD0ocD1wK01hdGguaW11bChIZSxlbil8MCkrTWF0aC5pbXVsKFFlLEN0KXwwLFM9UytNYXRoLmltdWwoUWUsZW4pfDAs'@;
put 'eT15K01hdGguaW11bChOZSxWdCl8MCxwPShwPXArTWF0aC5pbXVsKE5lLF9uKXwwKStNYXRoLmltdWwoTGUsVnQpfDAsUz1TK01hdGguaW11bChMZSxfbil8MDt2YXIgSnI9KG1lKyh5PXkrTWF0aC5pbXVsKFRlLEl0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoVGUsbm4pfDAp'@;
put 'K01hdGguaW11bChQZSxJdCl8MCkpPDwxMyl8MDttZT0oKFM9UytNYXRoLmltdWwoUGUsbm4pfDApKyhwPj4+MTMpfDApKyhKcj4+PjI2KXwwLEpyJj02NzEwODg2Myx5PU1hdGguaW11bChxZSxvbikscD0ocD1NYXRoLmltdWwocWUsJG4pKStNYXRoLmltdWwoaHQsb24pfDAsUz1NYXRoLmlt'@;
put 'dWwoaHQsJG4pLHk9eStNYXRoLmltdWwoT2UscHQpfDAscD0ocD1wK01hdGguaW11bChPZSxwbil8MCkrTWF0aC5pbXVsKGV0LHB0KXwwLFM9UytNYXRoLmltdWwoZXQscG4pfDAseT15K01hdGguaW11bChLZSxDdCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLGVuKXwwKStNYXRoLmltdWwod2Us'@;
put 'Q3QpfDAsUz1TK01hdGguaW11bCh3ZSxlbil8MCx5PXkrTWF0aC5pbXVsKEhlLFZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoSGUsX24pfDApK01hdGguaW11bChRZSxWdCl8MCxTPVMrTWF0aC5pbXVsKFFlLF9uKXwwLHk9eStNYXRoLmltdWwoTmUsSXQpfDAscD0ocD1wK01hdGguaW11bChOZSxu'@;
put 'bil8MCkrTWF0aC5pbXVsKExlLEl0KXwwLFM9UytNYXRoLmltdWwoTGUsbm4pfDA7dmFyIGFvPShtZSsoeT15K01hdGguaW11bChUZSx2dCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFRlLEd0KXwwKStNYXRoLmltdWwoUGUsdnQpfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5p'@;
put 'bXVsKFBlLEd0KXwwKSsocD4+PjEzKXwwKSsoYW8+Pj4yNil8MCxhbyY9NjcxMDg4NjMseT1NYXRoLmltdWwoRGUsb24pLHA9KHA9TWF0aC5pbXVsKERlLCRuKSkrTWF0aC5pbXVsKCRlLG9uKXwwLFM9TWF0aC5pbXVsKCRlLCRuKSx5PXkrTWF0aC5pbXVsKHFlLHB0KXwwLHA9KHA9cCtNYXRo'@;
put 'LmltdWwocWUscG4pfDApK01hdGguaW11bChodCxwdCl8MCxTPVMrTWF0aC5pbXVsKGh0LHBuKXwwLHk9eStNYXRoLmltdWwoT2UsQ3QpfDAscD0ocD1wK01hdGguaW11bChPZSxlbil8MCkrTWF0aC5pbXVsKGV0LEN0KXwwLFM9UytNYXRoLmltdWwoZXQsZW4pfDAseT15K01hdGguaW11bChL'@;
put 'ZSxWdCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLF9uKXwwKStNYXRoLmltdWwod2UsVnQpfDAsUz1TK01hdGguaW11bCh3ZSxfbil8MCx5PXkrTWF0aC5pbXVsKEhlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoSGUsbm4pfDApK01hdGguaW11bChRZSxJdCl8MCxTPVMrTWF0aC5pbXVsKFFlLG5u'@;
put 'KXwwLHk9eStNYXRoLmltdWwoTmUsdnQpfDAscD0ocD1wK01hdGguaW11bChOZSxHdCl8MCkrTWF0aC5pbXVsKExlLHZ0KXwwLFM9UytNYXRoLmltdWwoTGUsR3QpfDA7dmFyIEJyPShtZSsoeT15K01hdGguaW11bChUZSx6dCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFRlLE1u'@;
put 'KXwwKStNYXRoLmltdWwoUGUsenQpfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKFBlLE1uKXwwKSsocD4+PjEzKXwwKSsoQnI+Pj4yNil8MCxCciY9NjcxMDg4NjMseT1NYXRoLmltdWwoY3Qsb24pLHA9KHA9TWF0aC5pbXVsKGN0LCRuKSkrTWF0aC5pbXVsKE90LG9uKXwwLFM9TWF0'@;
put 'aC5pbXVsKE90LCRuKSx5PXkrTWF0aC5pbXVsKERlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUscG4pfDApK01hdGguaW11bCgkZSxwdCl8MCxTPVMrTWF0aC5pbXVsKCRlLHBuKXwwLHk9eStNYXRoLmltdWwocWUsQ3QpfDAscD0ocD1wK01hdGguaW11bChxZSxlbil8MCkrTWF0aC5pbXVs'@;
put 'KGh0LEN0KXwwLFM9UytNYXRoLmltdWwoaHQsZW4pfDAseT15K01hdGguaW11bChPZSxWdCl8MCxwPShwPXArTWF0aC5pbXVsKE9lLF9uKXwwKStNYXRoLmltdWwoZXQsVnQpfDAsUz1TK01hdGguaW11bChldCxfbil8MCx5PXkrTWF0aC5pbXVsKEtlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwo'@;
put 'S2Usbm4pfDApK01hdGguaW11bCh3ZSxJdCl8MCxTPVMrTWF0aC5pbXVsKHdlLG5uKXwwLHk9eStNYXRoLmltdWwoSGUsdnQpfDAscD0ocD1wK01hdGguaW11bChIZSxHdCl8MCkrTWF0aC5pbXVsKFFlLHZ0KXwwLFM9UytNYXRoLmltdWwoUWUsR3QpfDAseT15K01hdGguaW11bChOZSx6dCl8'@;
put 'MCxwPShwPXArTWF0aC5pbXVsKE5lLE1uKXwwKStNYXRoLmltdWwoTGUsenQpfDAsUz1TK01hdGguaW11bChMZSxNbil8MDt2YXIgSmk9KG1lKyh5PXkrTWF0aC5pbXVsKFRlLHNuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoVGUsQm4pfDApK01hdGguaW11bChQZSxzbil8MCkp'@;
put 'PDwxMyl8MDttZT0oKFM9UytNYXRoLmltdWwoUGUsQm4pfDApKyhwPj4+MTMpfDApKyhKaT4+PjI2KXwwLEppJj02NzEwODg2Myx5PU1hdGguaW11bChBdCxvbikscD0ocD1NYXRoLmltdWwoQXQsJG4pKStNYXRoLmltdWwoSnQsb24pfDAsUz1NYXRoLmltdWwoSnQsJG4pLHk9eStNYXRoLmlt'@;
put 'dWwoY3QscHQpfDAscD0ocD1wK01hdGguaW11bChjdCxwbil8MCkrTWF0aC5pbXVsKE90LHB0KXwwLFM9UytNYXRoLmltdWwoT3QscG4pfDAseT15K01hdGguaW11bChEZSxDdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLGVuKXwwKStNYXRoLmltdWwoJGUsQ3QpfDAsUz1TK01hdGguaW11bCgk'@;
put 'ZSxlbil8MCx5PXkrTWF0aC5pbXVsKHFlLFZ0KXwwLHA9KHA9cCtNYXRoLmltdWwocWUsX24pfDApK01hdGguaW11bChodCxWdCl8MCxTPVMrTWF0aC5pbXVsKGh0LF9uKXwwLHk9eStNYXRoLmltdWwoT2UsSXQpfDAscD0ocD1wK01hdGguaW11bChPZSxubil8MCkrTWF0aC5pbXVsKGV0LEl0'@;
put 'KXwwLFM9UytNYXRoLmltdWwoZXQsbm4pfDAseT15K01hdGguaW11bChLZSx2dCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLEd0KXwwKStNYXRoLmltdWwod2UsdnQpfDAsUz1TK01hdGguaW11bCh3ZSxHdCl8MCx5PXkrTWF0aC5pbXVsKEhlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoSGUsTW4p'@;
put 'fDApK01hdGguaW11bChRZSx6dCl8MCxTPVMrTWF0aC5pbXVsKFFlLE1uKXwwLHk9eStNYXRoLmltdWwoTmUsc24pfDAscD0ocD1wK01hdGguaW11bChOZSxCbil8MCkrTWF0aC5pbXVsKExlLHNuKXwwLFM9UytNYXRoLmltdWwoTGUsQm4pfDA7dmFyIHRvPShtZSsoeT15K01hdGguaW11bChU'@;
put 'ZSxxdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFRlLEhuKXwwKStNYXRoLmltdWwoUGUscXQpfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKFBlLEhuKXwwKSsocD4+PjEzKXwwKSsodG8+Pj4yNil8MCx0byY9NjcxMDg4NjMseT1NYXRoLmltdWwoTnQsb24pLHA9KHA9'@;
put 'TWF0aC5pbXVsKE50LCRuKSkrTWF0aC5pbXVsKGJuLG9uKXwwLFM9TWF0aC5pbXVsKGJuLCRuKSx5PXkrTWF0aC5pbXVsKEF0LHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoQXQscG4pfDApK01hdGguaW11bChKdCxwdCl8MCxTPVMrTWF0aC5pbXVsKEp0LHBuKXwwLHk9eStNYXRoLmltdWwoY3Qs'@;
put 'Q3QpfDAscD0ocD1wK01hdGguaW11bChjdCxlbil8MCkrTWF0aC5pbXVsKE90LEN0KXwwLFM9UytNYXRoLmltdWwoT3QsZW4pfDAseT15K01hdGguaW11bChEZSxWdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLF9uKXwwKStNYXRoLmltdWwoJGUsVnQpfDAsUz1TK01hdGguaW11bCgkZSxfbil8'@;
put 'MCx5PXkrTWF0aC5pbXVsKHFlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwocWUsbm4pfDApK01hdGguaW11bChodCxJdCl8MCxTPVMrTWF0aC5pbXVsKGh0LG5uKXwwLHk9eStNYXRoLmltdWwoT2UsdnQpfDAscD0ocD1wK01hdGguaW11bChPZSxHdCl8MCkrTWF0aC5pbXVsKGV0LHZ0KXwwLFM9'@;
put 'UytNYXRoLmltdWwoZXQsR3QpfDAseT15K01hdGguaW11bChLZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLE1uKXwwKStNYXRoLmltdWwod2UsenQpfDAsUz1TK01hdGguaW11bCh3ZSxNbil8MCx5PXkrTWF0aC5pbXVsKEhlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoSGUsQm4pfDApK01h'@;
put 'dGguaW11bChRZSxzbil8MCxTPVMrTWF0aC5pbXVsKFFlLEJuKXwwLHk9eStNYXRoLmltdWwoTmUscXQpfDAscD0ocD1wK01hdGguaW11bChOZSxIbil8MCkrTWF0aC5pbXVsKExlLHF0KXwwLFM9UytNYXRoLmltdWwoTGUsSG4pfDA7dmFyIGNvPShtZSsoeT15K01hdGguaW11bChUZSxjbil8'@;
put 'MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFRlLGpuKXwwKStNYXRoLmltdWwoUGUsY24pfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKFBlLGpuKXwwKSsocD4+PjEzKXwwKSsoY28+Pj4yNil8MCxjbyY9NjcxMDg4NjMseT1NYXRoLmltdWwoTnQscHQpLHA9KHA9TWF0aC5p'@;
put 'bXVsKE50LHBuKSkrTWF0aC5pbXVsKGJuLHB0KXwwLFM9TWF0aC5pbXVsKGJuLHBuKSx5PXkrTWF0aC5pbXVsKEF0LEN0KXwwLHA9KHA9cCtNYXRoLmltdWwoQXQsZW4pfDApK01hdGguaW11bChKdCxDdCl8MCxTPVMrTWF0aC5pbXVsKEp0LGVuKXwwLHk9eStNYXRoLmltdWwoY3QsVnQpfDAs'@;
put 'cD0ocD1wK01hdGguaW11bChjdCxfbil8MCkrTWF0aC5pbXVsKE90LFZ0KXwwLFM9UytNYXRoLmltdWwoT3QsX24pfDAseT15K01hdGguaW11bChEZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLG5uKXwwKStNYXRoLmltdWwoJGUsSXQpfDAsUz1TK01hdGguaW11bCgkZSxubil8MCx5PXkr'@;
put 'TWF0aC5pbXVsKHFlLHZ0KXwwLHA9KHA9cCtNYXRoLmltdWwocWUsR3QpfDApK01hdGguaW11bChodCx2dCl8MCxTPVMrTWF0aC5pbXVsKGh0LEd0KXwwLHk9eStNYXRoLmltdWwoT2UsenQpfDAscD0ocD1wK01hdGguaW11bChPZSxNbil8MCkrTWF0aC5pbXVsKGV0LHp0KXwwLFM9UytNYXRo'@;
put 'LmltdWwoZXQsTW4pfDAseT15K01hdGguaW11bChLZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKEtlLEJuKXwwKStNYXRoLmltdWwod2Usc24pfDAsUz1TK01hdGguaW11bCh3ZSxCbil8MCx5PXkrTWF0aC5pbXVsKEhlLHF0KXwwLHA9KHA9cCtNYXRoLmltdWwoSGUsSG4pfDApK01hdGguaW11'@;
put 'bChRZSxxdCl8MCxTPVMrTWF0aC5pbXVsKFFlLEhuKXwwO3ZhciBsbz0obWUrKHk9eStNYXRoLmltdWwoTmUsY24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChOZSxqbil8MCkrTWF0aC5pbXVsKExlLGNuKXwwKSk8PDEzKXwwO21lPSgoUz1TK01hdGguaW11bChMZSxqbil8MCkr'@;
put 'KHA+Pj4xMyl8MCkrKGxvPj4+MjYpfDAsbG8mPTY3MTA4ODYzLHk9TWF0aC5pbXVsKE50LEN0KSxwPShwPU1hdGguaW11bChOdCxlbikpK01hdGguaW11bChibixDdCl8MCxTPU1hdGguaW11bChibixlbikseT15K01hdGguaW11bChBdCxWdCl8MCxwPShwPXArTWF0aC5pbXVsKEF0LF9uKXww'@;
put 'KStNYXRoLmltdWwoSnQsVnQpfDAsUz1TK01hdGguaW11bChKdCxfbil8MCx5PXkrTWF0aC5pbXVsKGN0LEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoY3Qsbm4pfDApK01hdGguaW11bChPdCxJdCl8MCxTPVMrTWF0aC5pbXVsKE90LG5uKXwwLHk9eStNYXRoLmltdWwoRGUsdnQpfDAscD0ocD1w'@;
put 'K01hdGguaW11bChEZSxHdCl8MCkrTWF0aC5pbXVsKCRlLHZ0KXwwLFM9UytNYXRoLmltdWwoJGUsR3QpfDAseT15K01hdGguaW11bChxZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKHFlLE1uKXwwKStNYXRoLmltdWwoaHQsenQpfDAsUz1TK01hdGguaW11bChodCxNbil8MCx5PXkrTWF0aC5p'@;
put 'bXVsKE9lLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoT2UsQm4pfDApK01hdGguaW11bChldCxzbil8MCxTPVMrTWF0aC5pbXVsKGV0LEJuKXwwLHk9eStNYXRoLmltdWwoS2UscXQpfDAscD0ocD1wK01hdGguaW11bChLZSxIbil8MCkrTWF0aC5pbXVsKHdlLHF0KXwwLFM9UytNYXRoLmltdWwo'@;
put 'd2UsSG4pfDA7dmFyIHNvPShtZSsoeT15K01hdGguaW11bChIZSxjbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKEhlLGpuKXwwKStNYXRoLmltdWwoUWUsY24pfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKFFlLGpuKXwwKSsocD4+PjEzKXwwKSsoc28+Pj4yNil8MCxz'@;
put 'byY9NjcxMDg4NjMseT1NYXRoLmltdWwoTnQsVnQpLHA9KHA9TWF0aC5pbXVsKE50LF9uKSkrTWF0aC5pbXVsKGJuLFZ0KXwwLFM9TWF0aC5pbXVsKGJuLF9uKSx5PXkrTWF0aC5pbXVsKEF0LEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoQXQsbm4pfDApK01hdGguaW11bChKdCxJdCl8MCxTPVMr'@;
put 'TWF0aC5pbXVsKEp0LG5uKXwwLHk9eStNYXRoLmltdWwoY3QsdnQpfDAscD0ocD1wK01hdGguaW11bChjdCxHdCl8MCkrTWF0aC5pbXVsKE90LHZ0KXwwLFM9UytNYXRoLmltdWwoT3QsR3QpfDAseT15K01hdGguaW11bChEZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKERlLE1uKXwwKStNYXRo'@;
put 'LmltdWwoJGUsenQpfDAsUz1TK01hdGguaW11bCgkZSxNbil8MCx5PXkrTWF0aC5pbXVsKHFlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwocWUsQm4pfDApK01hdGguaW11bChodCxzbil8MCxTPVMrTWF0aC5pbXVsKGh0LEJuKXwwLHk9eStNYXRoLmltdWwoT2UscXQpfDAscD0ocD1wK01hdGgu'@;
put 'aW11bChPZSxIbil8MCkrTWF0aC5pbXVsKGV0LHF0KXwwLFM9UytNYXRoLmltdWwoZXQsSG4pfDA7dmFyIFhpPShtZSsoeT15K01hdGguaW11bChLZSxjbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKEtlLGpuKXwwKStNYXRoLmltdWwod2UsY24pfDApKTw8MTMpfDA7bWU9KChT'@;
put 'PVMrTWF0aC5pbXVsKHdlLGpuKXwwKSsocD4+PjEzKXwwKSsoWGk+Pj4yNil8MCxYaSY9NjcxMDg4NjMseT1NYXRoLmltdWwoTnQsSXQpLHA9KHA9TWF0aC5pbXVsKE50LG5uKSkrTWF0aC5pbXVsKGJuLEl0KXwwLFM9TWF0aC5pbXVsKGJuLG5uKSx5PXkrTWF0aC5pbXVsKEF0LHZ0KXwwLHA9'@;
put 'KHA9cCtNYXRoLmltdWwoQXQsR3QpfDApK01hdGguaW11bChKdCx2dCl8MCxTPVMrTWF0aC5pbXVsKEp0LEd0KXwwLHk9eStNYXRoLmltdWwoY3QsenQpfDAscD0ocD1wK01hdGguaW11bChjdCxNbil8MCkrTWF0aC5pbXVsKE90LHp0KXwwLFM9UytNYXRoLmltdWwoT3QsTW4pfDAseT15K01h'@;
put 'dGguaW11bChEZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKERlLEJuKXwwKStNYXRoLmltdWwoJGUsc24pfDAsUz1TK01hdGguaW11bCgkZSxCbil8MCx5PXkrTWF0aC5pbXVsKHFlLHF0KXwwLHA9KHA9cCtNYXRoLmltdWwocWUsSG4pfDApK01hdGguaW11bChodCxxdCl8MCxTPVMrTWF0aC5p'@;
put 'bXVsKGh0LEhuKXwwO3ZhciBwbz0obWUrKHk9eStNYXRoLmltdWwoT2UsY24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChPZSxqbil8MCkrTWF0aC5pbXVsKGV0LGNuKXwwKSk8PDEzKXwwO21lPSgoUz1TK01hdGguaW11bChldCxqbil8MCkrKHA+Pj4xMyl8MCkrKHBvPj4+MjYp'@;
put 'fDAscG8mPTY3MTA4ODYzLHk9TWF0aC5pbXVsKE50LHZ0KSxwPShwPU1hdGguaW11bChOdCxHdCkpK01hdGguaW11bChibix2dCl8MCxTPU1hdGguaW11bChibixHdCkseT15K01hdGguaW11bChBdCx6dCl8MCxwPShwPXArTWF0aC5pbXVsKEF0LE1uKXwwKStNYXRoLmltdWwoSnQsenQpfDAs'@;
put 'Uz1TK01hdGguaW11bChKdCxNbil8MCx5PXkrTWF0aC5pbXVsKGN0LHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoY3QsQm4pfDApK01hdGguaW11bChPdCxzbil8MCxTPVMrTWF0aC5pbXVsKE90LEJuKXwwLHk9eStNYXRoLmltdWwoRGUscXQpfDAscD0ocD1wK01hdGguaW11bChEZSxIbil8MCkr'@;
put 'TWF0aC5pbXVsKCRlLHF0KXwwLFM9UytNYXRoLmltdWwoJGUsSG4pfDA7dmFyIF9yPShtZSsoeT15K01hdGguaW11bChxZSxjbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKHFlLGpuKXwwKStNYXRoLmltdWwoaHQsY24pfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKGh0'@;
put 'LGpuKXwwKSsocD4+PjEzKXwwKSsoX3I+Pj4yNil8MCxfciY9NjcxMDg4NjMseT1NYXRoLmltdWwoTnQsenQpLHA9KHA9TWF0aC5pbXVsKE50LE1uKSkrTWF0aC5pbXVsKGJuLHp0KXwwLFM9TWF0aC5pbXVsKGJuLE1uKSx5PXkrTWF0aC5pbXVsKEF0LHNuKXwwLHA9KHA9cCtNYXRoLmltdWwo'@;
put 'QXQsQm4pfDApK01hdGguaW11bChKdCxzbil8MCxTPVMrTWF0aC5pbXVsKEp0LEJuKXwwLHk9eStNYXRoLmltdWwoY3QscXQpfDAscD0ocD1wK01hdGguaW11bChjdCxIbil8MCkrTWF0aC5pbXVsKE90LHF0KXwwLFM9UytNYXRoLmltdWwoT3QsSG4pfDA7dmFyIEZpPShtZSsoeT15K01hdGgu'@;
put 'aW11bChEZSxjbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKERlLGpuKXwwKStNYXRoLmltdWwoJGUsY24pfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKCRlLGpuKXwwKSsocD4+PjEzKXwwKSsoRmk+Pj4yNil8MCxGaSY9NjcxMDg4NjMseT1NYXRoLmltdWwoTnQsc24p'@;
put 'LHA9KHA9TWF0aC5pbXVsKE50LEJuKSkrTWF0aC5pbXVsKGJuLHNuKXwwLFM9TWF0aC5pbXVsKGJuLEJuKSx5PXkrTWF0aC5pbXVsKEF0LHF0KXwwLHA9KHA9cCtNYXRoLmltdWwoQXQsSG4pfDApK01hdGguaW11bChKdCxxdCl8MCxTPVMrTWF0aC5pbXVsKEp0LEhuKXwwO3ZhciBIbz0obWUr'@;
put 'KHk9eStNYXRoLmltdWwoY3QsY24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChjdCxqbil8MCkrTWF0aC5pbXVsKE90LGNuKXwwKSk8PDEzKXwwO21lPSgoUz1TK01hdGguaW11bChPdCxqbil8MCkrKHA+Pj4xMyl8MCkrKEhvPj4+MjYpfDAsSG8mPTY3MTA4ODYzLHk9TWF0aC5p'@;
put 'bXVsKE50LHF0KSxwPShwPU1hdGguaW11bChOdCxIbikpK01hdGguaW11bChibixxdCl8MCxTPU1hdGguaW11bChibixIbik7dmFyIGdhPShtZSsoeT15K01hdGguaW11bChBdCxjbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKEF0LGpuKXwwKStNYXRoLmltdWwoSnQsY24pfDAp'@;
put 'KTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKEp0LGpuKXwwKSsocD4+PjEzKXwwKSsoZ2E+Pj4yNil8MCxnYSY9NjcxMDg4NjM7dmFyIGxhPShtZSsoeT1NYXRoLmltdWwoTnQsY24pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKE50LGpuKSkrTWF0aC5pbXVsKGJuLGNuKXwwKSk8PDEz'@;
put 'KXwwO3JldHVybiBtZT0oKFM9TWF0aC5pbXVsKGJuLGpuKSkrKHA+Pj4xMyl8MCkrKGxhPj4+MjYpfDAsbGEmPTY3MTA4ODYzLGZlWzBdPVhyLGZlWzFdPXZpLGZlWzJdPUVyLGZlWzNdPVlpLGZlWzRdPUpyLGZlWzVdPWFvLGZlWzZdPUJyLGZlWzddPUppLGZlWzhdPXRvLGZlWzldPWNvLGZl'@;
put 'WzEwXT1sbyxmZVsxMV09c28sZmVbMTJdPVhpLGZlWzEzXT1wbyxmZVsxNF09X3IsZmVbMTVdPUZpLGZlWzE2XT1IbyxmZVsxN109Z2EsZmVbMThdPWxhLDAhPT1tZSYmKGZlWzE5XT1tZSxNLmxlbmd0aCsrKSxNfTtmdW5jdGlvbiBpZShnLEMsTSl7cmV0dXJuKG5ldyBsZSkubXVscChnLEMs'@;
put 'TSl9ZnVuY3Rpb24gbGUoZyxDKXt0aGlzLng9Zyx0aGlzLnk9Q31NYXRoLmltdWx8fChuZT10ZSksRS5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oZyxDKXt2YXIgeT10aGlzLmxlbmd0aCtnLmxlbmd0aDtyZXR1cm4gMTA9PT10aGlzLmxlbmd0aCYmMTA9PT1nLmxlbmd0aD9uZSh0aGlzLGcs'@;
put 'Qyk6eTw2Mz90ZSh0aGlzLGcsQyk6eTwxMDI0P2Z1bmN0aW9uKHAsUyxRKXtRLm5lZ2F0aXZlPVMubmVnYXRpdmVecC5uZWdhdGl2ZSxRLmxlbmd0aD1wLmxlbmd0aCtTLmxlbmd0aDtmb3IodmFyIHJlPTAsZmU9MCxtZT0wO21lPFEubGVuZ3RoLTE7bWUrKyl7dmFyIGtlPWZlO2ZlPTA7Zm9y'@;
put 'KHZhciBUZT02NzEwODg2MyZyZSxQZT1NYXRoLm1pbihtZSxTLmxlbmd0aC0xKSxGZT1NYXRoLm1heCgwLG1lLXAubGVuZ3RoKzEpO0ZlPD1QZTtGZSsrKXt2YXIgTGU9KDB8cC53b3Jkc1ttZS1GZV0pKigwfFMud29yZHNbRmVdKSxCZT02NzEwODg2MyZMZTtUZT02NzEwODg2MyYoQmU9QmUr'@;
put 'VGV8MCksZmUrPShrZT0oa2U9a2UrKExlLzY3MTA4ODY0fDApfDApKyhCZT4+PjI2KXwwKT4+PjI2LGtlJj02NzEwODg2M31RLndvcmRzW21lXT1UZSxyZT1rZSxrZT1mZX1yZXR1cm4gMCE9PXJlP1Eud29yZHNbbWVdPXJlOlEubGVuZ3RoLS0sUS5zdHJpcCgpfSh0aGlzLGcsQyk6aWUodGhp'@;
put 'cyxnLEMpfSxsZS5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihnKXtmb3IodmFyIEM9bmV3IEFycmF5KGcpLE09RS5wcm90b3R5cGUuX2NvdW50Qml0cyhnKS0xLHk9MDt5PGc7eSsrKUNbeV09dGhpcy5yZXZCaW4oeSxNLGcpO3JldHVybiBDfSxsZS5wcm90b3R5cGUucmV2QmluPWZ1bmN0'@;
put 'aW9uKGcsQyxNKXtpZigwPT09Z3x8Zz09PU0tMSlyZXR1cm4gZztmb3IodmFyIHk9MCxwPTA7cDxDO3ArKyl5fD0oMSZnKTw8Qy1wLTEsZz4+PTE7cmV0dXJuIHl9LGxlLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKGcsQyxNLHkscCxTKXtmb3IodmFyIFE9MDtRPFM7USsrKXlbUV09Q1tn'@;
put 'W1FdXSxwW1FdPU1bZ1tRXV19LGxlLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oZyxDLE0seSxwLFMpe3RoaXMucGVybXV0ZShTLGcsQyxNLHkscCk7Zm9yKHZhciBRPTE7UTxwO1E8PD0xKWZvcih2YXIgcmU9UTw8MSxmZT1NYXRoLmNvcygyKk1hdGguUEkvcmUpLG1lPU1hdGguc2lu'@;
put 'KDIqTWF0aC5QSS9yZSksa2U9MDtrZTxwO2tlKz1yZSlmb3IodmFyIFRlPWZlLFBlPW1lLEZlPTA7RmU8UTtGZSsrKXt2YXIgTmU9TVtrZStGZV0sTGU9eVtrZStGZV0sQmU9TVtrZStGZStRXSxIZT15W2tlK0ZlK1FdLFFlPVRlKkJlLVBlKkhlO0hlPVRlKkhlK1BlKkJlLE1ba2UrRmVdPU5l'@;
put 'KyhCZT1RZSkseVtrZStGZV09TGUrSGUsTVtrZStGZStRXT1OZS1CZSx5W2tlK0ZlK1FdPUxlLUhlLEZlIT09cmUmJihRZT1mZSpUZS1tZSpQZSxQZT1mZSpQZSttZSpUZSxUZT1RZSl9fSxsZS5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oZyxDKXt2YXIgTT0xfE1hdGgubWF4KEMs'@;
put 'ZykseT0xJk0scD0wO2ZvcihNPU0vMnwwO007TT4+Pj0xKXArKztyZXR1cm4gMTw8cCsxK3l9LGxlLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oZyxDLE0pe2lmKCEoTTw9MSkpZm9yKHZhciB5PTA7eTxNLzI7eSsrKXt2YXIgcD1nW3ldO2dbeV09Z1tNLXktMV0sZ1tNLXktMV09cCxw'@;
put 'PUNbeV0sQ1t5XT0tQ1tNLXktMV0sQ1tNLXktMV09LXB9fSxsZS5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKGcsQyl7Zm9yKHZhciBNPTAseT0wO3k8Qy8yO3krKyl7dmFyIHA9ODE5MipNYXRoLnJvdW5kKGdbMip5KzFdL0MpK01hdGgucm91bmQoZ1syKnldL0MpK007Z1t5XT02'@;
put 'NzEwODg2MyZwLE09cDw2NzEwODg2ND8wOnAvNjcxMDg4NjR8MH1yZXR1cm4gZ30sbGUucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oZyxDLE0seSl7Zm9yKHZhciBwPTAsUz0wO1M8QztTKyspTVsyKlNdPTgxOTEmKHArPTB8Z1tTXSksTVsyKlMrMV09ODE5MSYocD4+Pj0xMykscD4+'@;
put 'Pj0xMztmb3IoUz0yKkM7Uzx5OysrUylNW1NdPTA7SSgwPT09cCksSSgwPT0oLTgxOTImcCkpfSxsZS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihnKXtmb3IodmFyIEM9bmV3IEFycmF5KGcpLE09MDtNPGc7TSsrKUNbTV09MDtyZXR1cm4gQ30sbGUucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24o'@;
put 'ZyxDLE0pe3ZhciB5PTIqdGhpcy5ndWVzc0xlbjEzYihnLmxlbmd0aCxDLmxlbmd0aCkscD10aGlzLm1ha2VSQlQoeSksUz10aGlzLnN0dWIoeSksUT1uZXcgQXJyYXkoeSkscmU9bmV3IEFycmF5KHkpLGZlPW5ldyBBcnJheSh5KSxtZT1uZXcgQXJyYXkoeSksa2U9bmV3IEFycmF5KHkpLFRl'@;
put 'PW5ldyBBcnJheSh5KSxQZT1NLndvcmRzO1BlLmxlbmd0aD15LHRoaXMuY29udmVydDEzYihnLndvcmRzLGcubGVuZ3RoLFEseSksdGhpcy5jb252ZXJ0MTNiKEMud29yZHMsQy5sZW5ndGgsbWUseSksdGhpcy50cmFuc2Zvcm0oUSxTLHJlLGZlLHkscCksdGhpcy50cmFuc2Zvcm0obWUsUyxr'@;
put 'ZSxUZSx5LHApO2Zvcih2YXIgRmU9MDtGZTx5O0ZlKyspe3ZhciBOZT1yZVtGZV0qa2VbRmVdLWZlW0ZlXSpUZVtGZV07ZmVbRmVdPXJlW0ZlXSpUZVtGZV0rZmVbRmVdKmtlW0ZlXSxyZVtGZV09TmV9cmV0dXJuIHRoaXMuY29uanVnYXRlKHJlLGZlLHkpLHRoaXMudHJhbnNmb3JtKHJlLGZl'@;
put 'LFBlLFMseSxwKSx0aGlzLmNvbmp1Z2F0ZShQZSxTLHkpLHRoaXMubm9ybWFsaXplMTNiKFBlLHkpLE0ubmVnYXRpdmU9Zy5uZWdhdGl2ZV5DLm5lZ2F0aXZlLE0ubGVuZ3RoPWcubGVuZ3RoK0MubGVuZ3RoLE0uc3RyaXAoKX0sRS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcpe3ZhciBDPW5l'@;
put 'dyBFKG51bGwpO3JldHVybiBDLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksdGhpcy5tdWxUbyhnLEMpfSxFLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKGcpe3ZhciBDPW5ldyBFKG51bGwpO3JldHVybiBDLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0'@;
put 'aCksaWUodGhpcyxnLEMpfSxFLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oZyx0aGlzKX0sRS5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCk7Zm9yKHZhciBDPTAsTT0wO008'@;
put 'dGhpcy5sZW5ndGg7TSsrKXt2YXIgeT0oMHx0aGlzLndvcmRzW01dKSpnLHA9KDY3MTA4ODYzJnkpKyg2NzEwODg2MyZDKTtDPj49MjYsQys9eS82NzEwODg2NHwwLEMrPXA+Pj4yNix0aGlzLndvcmRzW01dPTY3MTA4ODYzJnB9cmV0dXJuIDAhPT1DJiYodGhpcy53b3Jkc1tNXT1DLHRoaXMu'@;
put 'bGVuZ3RoKyspLHRoaXN9LEUucHJvdG90eXBlLm11bG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihnKX0sRS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxFLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu'@;
put 'aW11bCh0aGlzLmNsb25lKCkpfSxFLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyl7dmFyIEM9ZnVuY3Rpb24oUyl7Zm9yKHZhciBRPW5ldyBBcnJheShTLmJpdExlbmd0aCgpKSxyZT0wO3JlPFEubGVuZ3RoO3JlKyspe3ZhciBtZT1yZSUyNjtRW3JlXT0oUy53b3Jkc1tyZS8yNnwwXSYxPDxt'@;
put 'ZSk+Pj5tZX1yZXR1cm4gUX0oZyk7aWYoMD09PUMubGVuZ3RoKXJldHVybiBuZXcgRSgxKTtmb3IodmFyIE09dGhpcyx5PTA7eTxDLmxlbmd0aCYmMD09PUNbeV07eSsrLE09TS5zcXIoKSk7aWYoKyt5PEMubGVuZ3RoKWZvcih2YXIgcD1NLnNxcigpO3k8Qy5sZW5ndGg7eSsrLHA9cC5zcXIo'@;
put 'KSkwIT09Q1t5XSYmKE09TS5tdWwocCkpO3JldHVybiBNfSxFLnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBDLE09ZyUyNix5PShnLU0pLzI2LHA9NjcxMDg4NjM+Pj4yNi1NPDwyNi1NO2lmKDAhPT1NKXt2YXIgUz0wO2ZvcihD'@;
put 'PTA7Qzx0aGlzLmxlbmd0aDtDKyspe3ZhciBRPXRoaXMud29yZHNbQ10mcDt0aGlzLndvcmRzW0NdPSgwfHRoaXMud29yZHNbQ10pLVE8PE18UyxTPVE+Pj4yNi1NfVMmJih0aGlzLndvcmRzW0NdPVMsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PXkpe2ZvcihDPXRoaXMubGVuZ3RoLTE7Qz49MDtD'@;
put 'LS0pdGhpcy53b3Jkc1tDK3ldPXRoaXMud29yZHNbQ107Zm9yKEM9MDtDPHk7QysrKXRoaXMud29yZHNbQ109MDt0aGlzLmxlbmd0aCs9eX1yZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5p'@;
put 'dXNobG4oZyl9LEUucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihnLEMsTSl7dmFyIHk7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApLHk9Qz8oQy1DJTI2KS8yNjowO3ZhciBwPWclMjYsUz1NYXRoLm1pbigoZy1wKS8yNix0aGlzLmxlbmd0aCksUT02NzEwODg2M142NzEwODg2Mz4+PnA8'@;
put 'PHAscmU9TTtpZih5LT1TLHk9TWF0aC5tYXgoMCx5KSxyZSl7Zm9yKHZhciBmZT0wO2ZlPFM7ZmUrKylyZS53b3Jkc1tmZV09dGhpcy53b3Jkc1tmZV07cmUubGVuZ3RoPVN9aWYoMCE9PVMpaWYodGhpcy5sZW5ndGg+Uylmb3IodGhpcy5sZW5ndGgtPVMsZmU9MDtmZTx0aGlzLmxlbmd0aDtm'@;
put 'ZSsrKXRoaXMud29yZHNbZmVdPXRoaXMud29yZHNbZmUrU107ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgbWU9MDtmb3IoZmU9dGhpcy5sZW5ndGgtMTtmZT49MCYmKDAhPT1tZXx8ZmU+PXkpO2ZlLS0pe3ZhciBrZT0wfHRoaXMud29yZHNbZmVdO3RoaXMud29yZHNb'@;
put 'ZmVdPW1lPDwyNi1wfGtlPj4+cCxtZT1rZSZRfXJldHVybiByZSYmMCE9PW1lJiYocmUud29yZHNbcmUubGVuZ3RoKytdPW1lKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihn'@;
put 'LEMsTSl7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKGcsQyxNKX0sRS5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKGcpfSxFLnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1'@;
put 'c2hsbihnKX0sRS5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKGcpfSxFLnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihnKX0sRS5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24oZyl7SSgibnVt'@;
put 'YmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBDPWclMjYsTT0oZy1DKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD1NfHwhKHRoaXMud29yZHNbTV0mMTw8QykpfSxFLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBDPWclMjYsTT0o'@;
put 'Zy1DKS8yNjtyZXR1cm4gSSgwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PU0/dGhpczooMCE9PUMmJk0rKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihNLHRoaXMubGVuZ3RoKSwwIT09QyYmKHRoaXMud29yZHNb'@;
put 'dGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+Qzw8QyksdGhpcy5zdHJpcCgpKX0sRS5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oZyl9LEUucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKGcpe3JldHVybiBJKCJudW1iZXIi'@;
put 'PT10eXBlb2YgZyksSShnPDY3MTA4ODY0KSxnPDA/dGhpcy5pc3VibigtZyk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxnPyh0aGlzLndvcmRzWzBdPWctKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5l'@;
put 'Z2F0aXZlPTAsdGhpcy5pc3VibihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4oZyl9LEUucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihnKXt0aGlzLndvcmRzWzBdKz1nO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbQ10+PTY3MTA4ODY0O0MrKyl0'@;
put 'aGlzLndvcmRzW0NdLT02NzEwODg2NCxDPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW0MrMV09MTp0aGlzLndvcmRzW0MrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsQysxKSx0aGlzfSxFLnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihnKXtpZihJKCJu'@;
put 'dW1iZXIiPT10eXBlb2YgZyksSShnPDY3MTA4ODY0KSxnPDApcmV0dXJuIHRoaXMuaWFkZG4oLWcpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1nLDE9PT10aGlz'@;
put 'Lmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tDXTwwO0MrKyl0aGlzLndvcmRzW0NdKz02NzEwODg2NCx0aGlzLndvcmRzW0MrMV0tPTE7'@;
put 'cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKGcpfSxFLnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4oZyl9LEUucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LEUucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSxFLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oZyxDLE0pe3ZhciB5LHA7dGhpcy5fZXhwYW5kKGcubGVuZ3RoK00pO3ZhciBR'@;
put 'PTA7Zm9yKHk9MDt5PGcubGVuZ3RoO3krKyl7cD0oMHx0aGlzLndvcmRzW3krTV0pK1E7dmFyIHJlPSgwfGcud29yZHNbeV0pKkM7UT0oKHAtPTY3MTA4ODYzJnJlKT4+MjYpLShyZS82NzEwODg2NHwwKSx0aGlzLndvcmRzW3krTV09NjcxMDg4NjMmcH1mb3IoO3k8dGhpcy5sZW5ndGgtTTt5'@;
put 'KyspUT0ocD0oMHx0aGlzLndvcmRzW3krTV0pK1EpPj4yNix0aGlzLndvcmRzW3krTV09NjcxMDg4NjMmcDtpZigwPT09USlyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihJKC0xPT09USksUT0wLHk9MDt5PHRoaXMubGVuZ3RoO3krKylRPShwPS0oMHx0aGlzLndvcmRzW3ldKStRKT4+MjYsdGhp'@;
put 'cy53b3Jkc1t5XT02NzEwODg2MyZwO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihnLEMpe3ZhciBNLHk9dGhpcy5jbG9uZSgpLHA9ZyxTPTB8cC53b3Jkc1twLmxlbmd0aC0xXTswIT0oTT0yNi10aGlzLl9jb3VudEJp'@;
put 'dHMoUykpJiYocD1wLnVzaGxuKE0pLHkuaXVzaGxuKE0pLFM9MHxwLndvcmRzW3AubGVuZ3RoLTFdKTt2YXIgUSxyZT15Lmxlbmd0aC1wLmxlbmd0aDtpZigibW9kIiE9PUMpeyhRPW5ldyBFKG51bGwpKS5sZW5ndGg9cmUrMSxRLndvcmRzPW5ldyBBcnJheShRLmxlbmd0aCk7Zm9yKHZhciBm'@;
put 'ZT0wO2ZlPFEubGVuZ3RoO2ZlKyspUS53b3Jkc1tmZV09MH12YXIgbWU9eS5jbG9uZSgpLl9pc2hsbnN1Ym11bChwLDEscmUpOzA9PT1tZS5uZWdhdGl2ZSYmKHk9bWUsUSYmKFEud29yZHNbcmVdPTEpKTtmb3IodmFyIGtlPXJlLTE7a2U+PTA7a2UtLSl7dmFyIFRlPTY3MTA4ODY0KigwfHku'@;
put 'd29yZHNbcC5sZW5ndGgra2VdKSsoMHx5LndvcmRzW3AubGVuZ3RoK2tlLTFdKTtmb3IoVGU9TWF0aC5taW4oVGUvU3wwLDY3MTA4ODYzKSx5Ll9pc2hsbnN1Ym11bChwLFRlLGtlKTswIT09eS5uZWdhdGl2ZTspVGUtLSx5Lm5lZ2F0aXZlPTAseS5faXNobG5zdWJtdWwocCwxLGtlKSx5Lmlz'@;
put 'WmVybygpfHwoeS5uZWdhdGl2ZV49MSk7USYmKFEud29yZHNba2VdPVRlKX1yZXR1cm4gUSYmUS5zdHJpcCgpLHkuc3RyaXAoKSwiZGl2IiE9PUMmJjAhPT1NJiZ5Lml1c2hybihNKSx7ZGl2OlF8fG51bGwsbW9kOnl9fSxFLnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24oZyxDLE0pe3JldHVy'@;
put 'biBJKCFnLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IEUoMCksbW9kOm5ldyBFKDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmU/KFM9dGhpcy5uZWcoKS5kaXZtb2QoZyxDKSwibW9kIiE9PUMmJih5PVMuZGl2Lm5lZygpKSwiZGl2IiE9PUMmJihwPVMubW9k'@;
put 'Lm5lZygpLE0mJjAhPT1wLm5lZ2F0aXZlJiZwLmlhZGQoZykpLHtkaXY6eSxtb2Q6cH0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZT8oUz10aGlzLmRpdm1vZChnLm5lZygpLEMpLCJtb2QiIT09QyYmKHk9Uy5kaXYubmVnKCkpLHtkaXY6eSxtb2Q6Uy5tb2R9KTp0aGlzLm5l'@;
put 'Z2F0aXZlJmcubmVnYXRpdmU/KFM9dGhpcy5uZWcoKS5kaXZtb2QoZy5uZWcoKSxDKSwiZGl2IiE9PUMmJihwPVMubW9kLm5lZygpLE0mJjAhPT1wLm5lZ2F0aXZlJiZwLmlzdWIoZykpLHtkaXY6Uy5kaXYsbW9kOnB9KTpnLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAoZyk8MD97ZGl2'@;
put 'Om5ldyBFKDApLG1vZDp0aGlzfToxPT09Zy5sZW5ndGg/ImRpdiI9PT1DP3tkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PUM/e2RpdjpudWxsLG1vZDpuZXcgRSh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6'@;
put 'bmV3IEUodGhpcy5tb2RuKGcud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihnLEMpO3ZhciB5LHAsU30sRS5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJkaXYiLCExKS5kaXZ9LEUucHJvdG90eXBlLm1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5k'@;
put 'aXZtb2QoZywibW9kIiwhMSkubW9kfSxFLnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJtb2QiLCEwKS5tb2R9LEUucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKGcpe3ZhciBDPXRoaXMuZGl2bW9kKGcpO2lmKEMubW9kLmlzWmVybygpKXJldHVy'@;
put 'biBDLmRpdjt2YXIgTT0wIT09Qy5kaXYubmVnYXRpdmU/Qy5tb2QuaXN1YihnKTpDLm1vZCx5PWcudXNocm4oMSkscD1nLmFuZGxuKDEpLFM9TS5jbXAoeSk7cmV0dXJuIFM8MHx8MT09PXAmJjA9PT1TP0MuZGl2OjAhPT1DLmRpdi5uZWdhdGl2ZT9DLmRpdi5pc3VibigxKTpDLmRpdi5pYWRk'@;
put 'bigxKX0sRS5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihnKXtJKGc8PTY3MTA4ODYzKTtmb3IodmFyIEM9NjcxMDg4NjQlZyxNPTAseT10aGlzLmxlbmd0aC0xO3k+PTA7eS0tKU09KEMqTSsoMHx0aGlzLndvcmRzW3ldKSklZztyZXR1cm4gTX0sRS5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24o'@;
put 'Zyl7SShnPD02NzEwODg2Myk7Zm9yKHZhciBDPTAsTT10aGlzLmxlbmd0aC0xO00+PTA7TS0tKXt2YXIgeT0oMHx0aGlzLndvcmRzW01dKSs2NzEwODg2NCpDO3RoaXMud29yZHNbTV09eS9nfDAsQz15JWd9cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihn'@;
put 'KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKGcpfSxFLnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKGcpe0koMD09PWcubmVnYXRpdmUpLEkoIWcuaXNaZXJvKCkpO3ZhciBDPXRoaXMsTT1nLmNsb25lKCk7Qz0wIT09Qy5uZWdhdGl2ZT9DLnVtb2QoZyk6Qy5jbG9uZSgpO2Zvcih2YXIgeT1u'@;
put 'ZXcgRSgxKSxwPW5ldyBFKDApLFM9bmV3IEUoMCksUT1uZXcgRSgxKSxyZT0wO0MuaXNFdmVuKCkmJk0uaXNFdmVuKCk7KUMuaXVzaHJuKDEpLE0uaXVzaHJuKDEpLCsrcmU7Zm9yKHZhciBmZT1NLmNsb25lKCksbWU9Qy5jbG9uZSgpOyFDLmlzWmVybygpOyl7Zm9yKHZhciBrZT0wLFRlPTE7'@;
put 'IShDLndvcmRzWzBdJlRlKSYma2U8MjY7KytrZSxUZTw8PTEpO2lmKGtlPjApZm9yKEMuaXVzaHJuKGtlKTtrZS0tID4wOykoeS5pc09kZCgpfHxwLmlzT2RkKCkpJiYoeS5pYWRkKGZlKSxwLmlzdWIobWUpKSx5Lml1c2hybigxKSxwLml1c2hybigxKTtmb3IodmFyIFBlPTAsRmU9MTshKE0u'@;
put 'd29yZHNbMF0mRmUpJiZQZTwyNjsrK1BlLEZlPDw9MSk7aWYoUGU+MClmb3IoTS5pdXNocm4oUGUpO1BlLS0gPjA7KShTLmlzT2RkKCl8fFEuaXNPZGQoKSkmJihTLmlhZGQoZmUpLFEuaXN1YihtZSkpLFMuaXVzaHJuKDEpLFEuaXVzaHJuKDEpO0MuY21wKE0pPj0wPyhDLmlzdWIoTSkseS5p'@;
put 'c3ViKFMpLHAuaXN1YihRKSk6KE0uaXN1YihDKSxTLmlzdWIoeSksUS5pc3ViKHApKX1yZXR1cm57YTpTLGI6USxnY2Q6TS5pdXNobG4ocmUpfX0sRS5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKGcpe0koMD09PWcubmVnYXRpdmUpLEkoIWcuaXNaZXJvKCkpO3ZhciBDPXRoaXMsTT1nLmNs'@;
put 'b25lKCk7Qz0wIT09Qy5uZWdhdGl2ZT9DLnVtb2QoZyk6Qy5jbG9uZSgpO2Zvcih2YXIgeSxwPW5ldyBFKDEpLFM9bmV3IEUoMCksUT1NLmNsb25lKCk7Qy5jbXBuKDEpPjAmJk0uY21wbigxKT4wOyl7Zm9yKHZhciByZT0wLGZlPTE7IShDLndvcmRzWzBdJmZlKSYmcmU8MjY7KytyZSxmZTw8'@;
put 'PTEpO2lmKHJlPjApZm9yKEMuaXVzaHJuKHJlKTtyZS0tID4wOylwLmlzT2RkKCkmJnAuaWFkZChRKSxwLml1c2hybigxKTtmb3IodmFyIG1lPTAsa2U9MTshKE0ud29yZHNbMF0ma2UpJiZtZTwyNjsrK21lLGtlPDw9MSk7aWYobWU+MClmb3IoTS5pdXNocm4obWUpO21lLS0gPjA7KVMuaXNP'@;
put 'ZGQoKSYmUy5pYWRkKFEpLFMuaXVzaHJuKDEpO0MuY21wKE0pPj0wPyhDLmlzdWIoTSkscC5pc3ViKFMpKTooTS5pc3ViKEMpLFMuaXN1YihwKSl9cmV0dXJuKHk9MD09PUMuY21wbigxKT9wOlMpLmNtcG4oMCk8MCYmeS5pYWRkKGcpLHl9LEUucHJvdG90eXBlLmdjZD1mdW5jdGlvbihnKXtp'@;
put 'Zih0aGlzLmlzWmVybygpKXJldHVybiBnLmFicygpO2lmKGcuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIEM9dGhpcy5jbG9uZSgpLE09Zy5jbG9uZSgpO0MubmVnYXRpdmU9MCxNLm5lZ2F0aXZlPTA7Zm9yKHZhciB5PTA7Qy5pc0V2ZW4oKSYmTS5pc0V2ZW4oKTt5KyspQy5pdXNo'@;
put 'cm4oMSksTS5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO0MuaXNFdmVuKCk7KUMuaXVzaHJuKDEpO2Zvcig7TS5pc0V2ZW4oKTspTS5pdXNocm4oMSk7dmFyIHA9Qy5jbXAoTSk7aWYocDwwKXt2YXIgUz1DO0M9TSxNPVN9ZWxzZSBpZigwPT09cHx8MD09PU0uY21wbigxKSlicmVhaztDLmlzdWIo'@;
put 'TSl9cmV0dXJuIE0uaXVzaGxuKHkpfSxFLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmVnY2QoZykuYS51bW9kKGcpfSxFLnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09KDEmdGhpcy53b3Jkc1swXSl9LEUucHJvdG90eXBlLmlzT2RkPWZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIDE9PSgxJnRoaXMud29yZHNbMF0pfSxFLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZnfSxFLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyk7dmFyIEM9ZyUyNixNPShnLUMpLzI2LHk9'@;
put 'MTw8QztpZih0aGlzLmxlbmd0aDw9TSlyZXR1cm4gdGhpcy5fZXhwYW5kKE0rMSksdGhpcy53b3Jkc1tNXXw9eSx0aGlzO2Zvcih2YXIgcD15LFM9TTswIT09cCYmUzx0aGlzLmxlbmd0aDtTKyspe3ZhciBRPTB8dGhpcy53b3Jkc1tTXTtwPShRKz1wKT4+PjI2LHRoaXMud29yZHNbU109USY9'@;
put 'NjcxMDg4NjN9cmV0dXJuIDAhPT1wJiYodGhpcy53b3Jkc1tTXT1wLHRoaXMubGVuZ3RoKyspLHRoaXN9LEUucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxFLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKGcpe3Zh'@;
put 'ciBDLE09ZzwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhTSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmTSlyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSlDPTE7ZWxzZXtNJiYoZz0tZyksSShnPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIg'@;
put 'eT0wfHRoaXMud29yZHNbMF07Qz15PT09Zz8wOnk8Zz8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1DOkN9LEUucHJvdG90eXBlLmNtcD1mdW5jdGlvbihnKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUm'@;
put 'JjAhPT1nLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBDPXRoaXMudWNtcChnKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtQzpDfSxFLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKGcpe2lmKHRoaXMubGVuZ3RoPmcubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPGcubGVuZ3RoKXJl'@;
put 'dHVybi0xO2Zvcih2YXIgQz0wLE09dGhpcy5sZW5ndGgtMTtNPj0wO00tLSl7dmFyIHk9MHx0aGlzLndvcmRzW01dLHA9MHxnLndvcmRzW01dO2lmKHkhPT1wKXt5PHA/Qz0tMTp5PnAmJihDPTEpO2JyZWFrfX1yZXR1cm4gQ30sRS5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKGcpe3JldHVybiAx'@;
put 'PT09dGhpcy5jbXBuKGcpfSxFLnByb3RvdHlwZS5ndD1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wKGcpfSxFLnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk+PTB9LEUucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAo'@;
put 'Zyk+PTB9LEUucHJvdG90eXBlLmx0bj1mdW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMuY21wbihnKX0sRS5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcChnKX0sRS5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPD0wfSxF'@;
put 'LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcpPD0wfSxFLnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcG4oZyl9LEUucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXAoZyl9LEUucmVkPWZ1bmN0'@;
put 'aW9uKGcpe3JldHVybiBuZXcgTihnKX0sRS5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksSSgwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMi'@;
put 'KSxnLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQoZyl9LEUucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMp'@;
put 'fSxFLnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucmVkPWcsdGhpc30sRS5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VS'@;
put 'ZWQoZyl9LEUucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVk'@;
put 'LCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRo'@;
put 'aXMsZyl9LEUucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5y'@;
put 'ZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3Zlcmlm'@;
put 'eTIodGhpcyxnKSx0aGlzLnJlZC5tdWwodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQuaW11bCh0aGlz'@;
put 'LGcpfSxFLnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sRS5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigp'@;
put 'e3JldHVybiBJKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LEUucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU3FydCB3b3Jr'@;
put 'cyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSxFLnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5y'@;
put 'ZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sRS5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhp'@;
put 'cyl9LEUucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCYmIWcucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLGcpfTt2YXIgZGU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxs'@;
put 'LHAyNTUxOTpudWxsfTtmdW5jdGlvbiB1ZShnLEMpe3RoaXMubmFtZT1nLHRoaXMucD1uZXcgRShDLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgRSgxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gY2Uo'@;
put 'KXt1ZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIFkoKXt1ZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZm'@;
put 'ZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIGIoKXt1ZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIHgoKXt1ZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZm'@;
put 'ZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIE4oZyl7aWYoInN0cmluZyI9PXR5cGVvZiBnKXt2YXIgQz1FLl9wcmltZShnKTt0aGlzLm09Qy5wLHRoaXMucHJpbWU9Q31lbHNlIEkoZy5ndG4oMSksIm1vZHVsdXMg'@;
put 'bXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1nLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBGKGcpe04uY2FsbCh0aGlzLGcpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9'@;
put 'bmV3IEUoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYu'@;
put 'dW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9dWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgZz1uZXcgRShudWxsKTtyZXR1cm4gZy53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLGd9LHVlLnByb3RvdHlwZS5pcmVkdWNlPWZ1'@;
put 'bmN0aW9uKGcpe3ZhciBDLE09Zztkb3t0aGlzLnNwbGl0KE0sdGhpcy50bXApLEM9KE09KE09dGhpcy5pbXVsSyhNKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKEM+dGhpcy5uKTt2YXIgeT1DPHRoaXMubj8tMTpNLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PXk/KE0ud29y'@;
put 'ZHNbMF09MCxNLmxlbmd0aD0xKTp5PjA/TS5pc3ViKHRoaXMucCk6dm9pZCAwIT09TS5zdHJpcD9NLnN0cmlwKCk6TS5fc3RyaXAoKSxNfSx1ZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyxDKXtnLml1c2hybih0aGlzLm4sMCxDKX0sdWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcp'@;
put 'e3JldHVybiBnLmltdWwodGhpcy5rKX0sUihjZSx1ZSksY2UucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcsQyl7Zm9yKHZhciBNPTQxOTQzMDMseT1NYXRoLm1pbihnLmxlbmd0aCw5KSxwPTA7cDx5O3ArKylDLndvcmRzW3BdPWcud29yZHNbcF07aWYoQy5sZW5ndGg9eSxnLmxlbmd0aDw9'@;
put 'OSlyZXR1cm4gZy53b3Jkc1swXT0wLHZvaWQoZy5sZW5ndGg9MSk7dmFyIFM9Zy53b3Jkc1s5XTtmb3IoQy53b3Jkc1tDLmxlbmd0aCsrXT1TJk0scD0xMDtwPGcubGVuZ3RoO3ArKyl7dmFyIFE9MHxnLndvcmRzW3BdO2cud29yZHNbcC0xMF09KFEmTSk8PDR8Uz4+PjIyLFM9UX1nLndvcmRz'@;
put 'W3AtMTBdPVM+Pj49MjIsZy5sZW5ndGgtPTA9PT1TJiZnLmxlbmd0aD4xMD8xMDo5fSxjZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zy53b3Jkc1tnLmxlbmd0aF09MCxnLndvcmRzW2cubGVuZ3RoKzFdPTAsZy5sZW5ndGgrPTI7Zm9yKHZhciBDPTAsTT0wO008Zy5sZW5ndGg7TSsr'@;
put 'KXt2YXIgeT0wfGcud29yZHNbTV07Zy53b3Jkc1tNXT02NzEwODg2MyYoQys9OTc3KnkpLEM9NjQqeSsoQy82NzEwODg2NHwwKX1yZXR1cm4gMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJihnLmxlbmd0aC0tLDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiZnLmxlbmd0aC0tKSxnfSxSKFksdWUp'@;
put 'LFIoYix1ZSksUih4LHVlKSx4LnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtmb3IodmFyIEM9MCxNPTA7TTxnLmxlbmd0aDtNKyspe3ZhciB5PTE5KigwfGcud29yZHNbTV0pK0MscD02NzEwODg2MyZ5O3k+Pj49MjYsZy53b3Jkc1tNXT1wLEM9eX1yZXR1cm4gMCE9PUMmJihnLndvcmRz'@;
put 'W2cubGVuZ3RoKytdPUMpLGd9LEUuX3ByaW1lPWZ1bmN0aW9uKGcpe2lmKGRlW2ddKXJldHVybiBkZVtnXTt2YXIgQztpZigiazI1NiI9PT1nKUM9bmV3IGNlO2Vsc2UgaWYoInAyMjQiPT09ZylDPW5ldyBZO2Vsc2UgaWYoInAxOTIiPT09ZylDPW5ldyBiO2Vsc2V7aWYoInAyNTUxOSIhPT1n'@;
put 'KXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK2cpO0M9bmV3IHh9cmV0dXJuIGRlW2ddPUMsQ30sTi5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oZyl7SSgwPT09Zy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxJKGcucmVkLCJyZWQgd29ya3Mg'@;
put 'b25seSB3aXRoIHJlZCBudW1iZXJzIil9LE4ucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKGcsQyl7SSgwPT0oZy5uZWdhdGl2ZXxDLm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxJKGcucmVkJiZnLnJlZD09PUMucmVkLCJyZWQgd29ya3Mgb25seSB3aXRo'@;
put 'IHJlZCBudW1iZXJzIil9LE4ucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKGcpLl9mb3JjZVJlZCh0aGlzKTpnLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LE4ucHJvdG90eXBlLm5lZz1mdW5jdGlvbihnKXtyZXR1'@;
put 'cm4gZy5pc1plcm8oKT9nLmNsb25lKCk6dGhpcy5tLnN1YihnKS5fZm9yY2VSZWQodGhpcyl9LE4ucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnLEMpe3RoaXMuX3ZlcmlmeTIoZyxDKTt2YXIgTT1nLmFkZChDKTtyZXR1cm4gTS5jbXAodGhpcy5tKT49MCYmTS5pc3ViKHRoaXMubSksTS5fZm9y'@;
put 'Y2VSZWQodGhpcyl9LE4ucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIE09Zy5pYWRkKEMpO3JldHVybiBNLmNtcCh0aGlzLm0pPj0wJiZNLmlzdWIodGhpcy5tKSxNfSxOLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnky'@;
put 'KGcsQyk7dmFyIE09Zy5zdWIoQyk7cmV0dXJuIE0uY21wbigwKTwwJiZNLmlhZGQodGhpcy5tKSxNLl9mb3JjZVJlZCh0aGlzKX0sTi5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnLEMpe3RoaXMuX3ZlcmlmeTIoZyxDKTt2YXIgTT1nLmlzdWIoQyk7cmV0dXJuIE0uY21wbigwKTwwJiZNLmlh'@;
put 'ZGQodGhpcy5tKSxNfSxOLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShnKSx0aGlzLmltb2QoZy51c2hsbihDKSl9LE4ucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLEMpLHRoaXMuaW1vZChnLmltdWwo'@;
put 'QykpfSxOLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLEMpLHRoaXMuaW1vZChnLm11bChDKSl9LE4ucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW11bChnLGcuY2xvbmUoKSl9LE4ucHJvdG90eXBlLnNxcj1mdW5jdGlv'@;
put 'bihnKXtyZXR1cm4gdGhpcy5tdWwoZyxnKX0sTi5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihnKXtpZihnLmlzWmVybygpKXJldHVybiBnLmNsb25lKCk7dmFyIEM9dGhpcy5tLmFuZGxuKDMpO2lmKEkoQyUyPT0xKSwzPT09Qyl7dmFyIE09dGhpcy5tLmFkZChuZXcgRSgxKSkuaXVzaHJuKDIp'@;
put 'O3JldHVybiB0aGlzLnBvdyhnLE0pfWZvcih2YXIgeT10aGlzLm0uc3VibigxKSxwPTA7IXkuaXNaZXJvKCkmJjA9PT15LmFuZGxuKDEpOylwKysseS5pdXNocm4oMSk7SSgheS5pc1plcm8oKSk7dmFyIFM9bmV3IEUoMSkudG9SZWQodGhpcyksUT1TLnJlZE5lZygpLHJlPXRoaXMubS5zdWJu'@;
put 'KDEpLml1c2hybigxKSxmZT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKGZlPW5ldyBFKDIqZmUqZmUpLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhmZSxyZSkuY21wKFEpOylmZS5yZWRJQWRkKFEpO2Zvcih2YXIgbWU9dGhpcy5wb3coZmUseSksa2U9dGhpcy5wb3coZyx5LmFkZG4oMSkuaXVz'@;
put 'aHJuKDEpKSxUZT10aGlzLnBvdyhnLHkpLFBlPXA7MCE9PVRlLmNtcChTKTspe2Zvcih2YXIgRmU9VGUsTmU9MDswIT09RmUuY21wKFMpO05lKyspRmU9RmUucmVkU3FyKCk7SShOZTxQZSk7dmFyIExlPXRoaXMucG93KG1lLG5ldyBFKDEpLml1c2hsbihQZS1OZS0xKSk7a2U9a2UucmVkTXVs'@;
put 'KExlKSxtZT1MZS5yZWRTcXIoKSxUZT1UZS5yZWRNdWwobWUpLFBlPU5lfXJldHVybiBrZX0sTi5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXt2YXIgQz1nLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09Qy5uZWdhdGl2ZT8oQy5uZWdhdGl2ZT0wLHRoaXMuaW1vZChDKS5yZWROZWcoKSk6'@;
put 'dGhpcy5pbW9kKEMpfSxOLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyxDKXtpZihDLmlzWmVybygpKXJldHVybiBuZXcgRSgxKS50b1JlZCh0aGlzKTtpZigwPT09Qy5jbXBuKDEpKXJldHVybiBnLmNsb25lKCk7dmFyIE09bmV3IEFycmF5KDE2KTtNWzBdPW5ldyBFKDEpLnRvUmVkKHRoaXMp'@;
put 'LE1bMV09Zztmb3IodmFyIHk9Mjt5PE0ubGVuZ3RoO3krKylNW3ldPXRoaXMubXVsKE1beS0xXSxnKTt2YXIgcD1NWzBdLFM9MCxRPTAscmU9Qy5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PXJlJiYocmU9MjYpLHk9Qy5sZW5ndGgtMTt5Pj0wO3ktLSl7Zm9yKHZhciBmZT1DLndvcmRzW3ldLG1l'@;
put 'PXJlLTE7bWU+PTA7bWUtLSl7dmFyIGtlPWZlPj5tZSYxO3AhPT1NWzBdJiYocD10aGlzLnNxcihwKSksMCE9PWtlfHwwIT09Uz8oUzw8PTEsU3w9a2UsKDQ9PSsrUXx8MD09PXkmJjA9PT1tZSkmJihwPXRoaXMubXVsKHAsTVtTXSksUT0wLFM9MCkpOlE9MH1yZT0yNn1yZXR1cm4gcH0sTi5w'@;
put 'cm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3ZhciBDPWcudW1vZCh0aGlzLm0pO3JldHVybiBDPT09Zz9DLmNsb25lKCk6Q30sTi5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIEM9Zy5jbG9uZSgpO3JldHVybiBDLnJlZD1udWxsLEN9LEUubW9udD1mdW5jdGlv'@;
put 'bihnKXtyZXR1cm4gbmV3IEYoZyl9LFIoRixOKSxGLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLnVzaGxuKHRoaXMuc2hpZnQpKX0sRi5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIEM9dGhpcy5pbW9kKGcubXVsKHRoaXMu'@;
put 'cmludikpO3JldHVybiBDLnJlZD1udWxsLEN9LEYucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyxDKXtpZihnLmlzWmVybygpfHxDLmlzWmVybygpKXJldHVybiBnLndvcmRzWzBdPTAsZy5sZW5ndGg9MSxnO3ZhciBNPWcuaW11bChDKSx5PU0ubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMu'@;
put 'bWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLHA9TS5pc3ViKHkpLml1c2hybih0aGlzLnNoaWZ0KSxTPXA7cmV0dXJuIHAuY21wKHRoaXMubSk+PTA/Uz1wLmlzdWIodGhpcy5tKTpwLmNtcG4oMCk8MCYmKFM9cC5pYWRkKHRoaXMubSkpLFMuX2ZvcmNlUmVkKHRoaXMpfSxG'@;
put 'LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyxDKXtpZihnLmlzWmVybygpfHxDLmlzWmVybygpKXJldHVybiBuZXcgRSgwKS5fZm9yY2VSZWQodGhpcyk7dmFyIE09Zy5tdWwoQykseT1NLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhp'@;
put 'cy5tKSxwPU0uaXN1Yih5KS5pdXNocm4odGhpcy5zaGlmdCksUz1wO3JldHVybiBwLmNtcCh0aGlzLm0pPj0wP1M9cC5pc3ViKHRoaXMubSk6cC5jbXBuKDApPDAmJihTPXAuaWFkZCh0aGlzLm0pKSxTLl9mb3JjZVJlZCh0aGlzKX0sRi5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1'@;
put 'cm4gdGhpcy5pbW9kKGcuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShIPUwubm1kKEgpLHRoaXMpfSw4MDkxOkg9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gQihMLEspe2lmKG51bGw9PUwpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNvbnZlcnQg'@;
put 'Zmlyc3QgYXJndW1lbnQgdG8gb2JqZWN0Iik7Zm9yKHZhciBKPU9iamVjdChMKSxJPTE7STxhcmd1bWVudHMubGVuZ3RoO0krKyl7dmFyIFI9YXJndW1lbnRzW0ldO2lmKG51bGwhPVIpZm9yKHZhciBFPU9iamVjdC5rZXlzKE9iamVjdChSKSksej0wLGo9RS5sZW5ndGg7ejxqO3orKyl7dmFy'@;
put 'IFY9RVt6XSxHPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoUixWKTt2b2lkIDAhPT1HJiZHLmVudW1lcmFibGUmJihKW1ZdPVJbVl0pfX1yZXR1cm4gSn1ILmV4cG9ydHM9e2Fzc2lnbjpCLHBvbHlmaWxsOmZ1bmN0aW9uKCl7T2JqZWN0LmFzc2lnbnx8T2JqZWN0LmRlZmluZVBy'@;
put 'b3BlcnR5KE9iamVjdCwiYXNzaWduIix7ZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Qn0pfX19LDcxODc6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSyxKPUwoNTEwOCksST0ib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3Q/UmVmbGVjdDpudWxsLFI9'@;
put 'SSYmImZ1bmN0aW9uIj09dHlwZW9mIEkuYXBwbHk/SS5hcHBseTpmdW5jdGlvbihkZSx1ZSxjZSl7cmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKGRlLHVlLGNlKX07Sz1JJiYiZnVuY3Rpb24iPT10eXBlb2YgSS5vd25LZXlzP0kub3duS2V5czpPYmplY3QuZ2V0T3duUHJv'@;
put 'cGVydHlTeW1ib2xzP2Z1bmN0aW9uKGRlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZGUpLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGRlKSl9OmZ1bmN0aW9uKGRlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZGUpfTt2YXIgRT1O'@;
put 'dW1iZXIuaXNOYU58fGZ1bmN0aW9uKGRlKXtyZXR1cm4gZGUhPWRlfTtmdW5jdGlvbiB6KCl7ei5pbml0LmNhbGwodGhpcyl9SC5leHBvcnRzPXosSC5leHBvcnRzLm9uY2U9ZnVuY3Rpb24oZGUsdWUpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihjZSxZKXtmdW5jdGlvbiBiKE4pe2Rl'@;
put 'LnJlbW92ZUxpc3RlbmVyKHVlLHgpLFkoTil9ZnVuY3Rpb24geCgpeyJmdW5jdGlvbiI9PXR5cGVvZiBkZS5yZW1vdmVMaXN0ZW5lciYmZGUucmVtb3ZlTGlzdGVuZXIoImVycm9yIixiKSxjZShbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpfXZhciBOO2xlKGRlLHVlLHgse29uY2U6ITB9KSwi'@;
put 'ZXJyb3IiIT09dWUmJiJmdW5jdGlvbiI9PXR5cGVvZihOPWRlKS5vbiYmbGUoTiwiZXJyb3IiLGIse29uY2U6ITB9KX0pfSx6LkV2ZW50RW1pdHRlcj16LHoucHJvdG90eXBlLl9ldmVudHM9dm9pZCAwLHoucHJvdG90eXBlLl9ldmVudHNDb3VudD0wLHoucHJvdG90eXBlLl9tYXhMaXN0ZW5l'@;
put 'cnM9dm9pZCAwO3ZhciBqPTEwO2Z1bmN0aW9uIFYoZGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBkZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImxpc3RlbmVyIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgZGUpfWZ1bmN0aW9u'@;
put 'IEcoZGUpe3JldHVybiB2b2lkIDA9PT1kZS5fbWF4TGlzdGVuZXJzP3ouZGVmYXVsdE1heExpc3RlbmVyczpkZS5fbWF4TGlzdGVuZXJzfWZ1bmN0aW9uIFcoZGUsdWUsY2UsWSl7dmFyIGIseCxOO2lmKFYoY2UpLHZvaWQgMD09PSh4PWRlLl9ldmVudHMpPyh4PWRlLl9ldmVudHM9T2JqZWN0'@;
put 'LmNyZWF0ZShudWxsKSxkZS5fZXZlbnRzQ291bnQ9MCk6KHZvaWQgMCE9PXgubmV3TGlzdGVuZXImJihkZS5lbWl0KCJuZXdMaXN0ZW5lciIsdWUsY2UubGlzdGVuZXI/Y2UubGlzdGVuZXI6Y2UpLHg9ZGUuX2V2ZW50cyksTj14W3VlXSksdm9pZCAwPT09TilOPXhbdWVdPWNlLCsrZGUuX2V2'@;
put 'ZW50c0NvdW50O2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIE4/Tj14W3VlXT1ZP1tjZSxOXTpbTixjZV06WT9OLnVuc2hpZnQoY2UpOk4ucHVzaChjZSksKGI9RyhkZSkpPjAmJk4ubGVuZ3RoPmImJiFOLndhcm5lZCl7Ti53YXJuZWQ9ITA7dmFyIGc9bmV3IEVycm9yKCJQb3NzaWJsZSBF'@;
put 'dmVudEVtaXR0ZXIgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQuICIrTi5sZW5ndGgrIiAiK1N0cmluZyh1ZSkrIiBsaXN0ZW5lcnMgYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvIGluY3JlYXNlIGxpbWl0Iik7Zy5uYW1lPSJNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmci'@;
put 'LGcuZW1pdHRlcj1kZSxnLnR5cGU9dWUsZy5jb3VudD1OLmxlbmd0aCxKJiZKLndhcm4mJkoud2FybihnKX1yZXR1cm4gZGV9ZnVuY3Rpb24gVSgpe2lmKCF0aGlzLmZpcmVkKXJldHVybiB0aGlzLnRhcmdldC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsdGhpcy53cmFwRm4pLHRoaXMuZmly'@;
put 'ZWQ9ITAsMD09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0KTp0aGlzLmxpc3RlbmVyLmFwcGx5KHRoaXMudGFyZ2V0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gcShkZSx1ZSxjZSl7dmFyIFk9e2ZpcmVkOiExLHdyYXBGbjp2b2lkIDAsdGFyZ2V0OmRlLHR5'@;
put 'cGU6dWUsbGlzdGVuZXI6Y2V9LGI9VS5iaW5kKFkpO3JldHVybiBiLmxpc3RlbmVyPWNlLFkud3JhcEZuPWIsYn1mdW5jdGlvbiB0ZShkZSx1ZSxjZSl7dmFyIFk9ZGUuX2V2ZW50cztpZih2b2lkIDA9PT1ZKXJldHVybltdO3ZhciBiPVlbdWVdO3JldHVybiB2b2lkIDA9PT1iP1tdOiJmdW5j'@;
put 'dGlvbiI9PXR5cGVvZiBiP2NlP1tiLmxpc3RlbmVyfHxiXTpbYl06Y2U/ZnVuY3Rpb24oeCl7Zm9yKHZhciBOPW5ldyBBcnJheSh4Lmxlbmd0aCksRj0wO0Y8Ti5sZW5ndGg7KytGKU5bRl09eFtGXS5saXN0ZW5lcnx8eFtGXTtyZXR1cm4gTn0oYik6aWUoYixiLmxlbmd0aCl9ZnVuY3Rpb24g'@;
put 'bmUoZGUpe3ZhciB1ZT10aGlzLl9ldmVudHM7aWYodm9pZCAwIT09dWUpe3ZhciBjZT11ZVtkZV07aWYoImZ1bmN0aW9uIj09dHlwZW9mIGNlKXJldHVybiAxO2lmKHZvaWQgMCE9PWNlKXJldHVybiBjZS5sZW5ndGh9cmV0dXJuIDB9ZnVuY3Rpb24gaWUoZGUsdWUpe2Zvcih2YXIgY2U9bmV3'@;
put 'IEFycmF5KHVlKSxZPTA7WTx1ZTsrK1kpY2VbWV09ZGVbWV07cmV0dXJuIGNlfWZ1bmN0aW9uIGxlKGRlLHVlLGNlLFkpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBkZS5vbilZLm9uY2U/ZGUub25jZSh1ZSxjZSk6ZGUub24odWUsY2UpO2Vsc2V7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGRlLmFk'@;
put 'ZEV2ZW50TGlzdGVuZXIpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJlbWl0dGVyIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRXZlbnRFbWl0dGVyLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIGRlKTtkZS5hZGRFdmVudExpc3RlbmVyKHVlLGZ1bmN0aW9uIGIoeCl7WS5vbmNlJiZkZS5y'@;
put 'ZW1vdmVFdmVudExpc3RlbmVyKHVlLGIpLGNlKHgpfSl9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh6LCJkZWZhdWx0TWF4TGlzdGVuZXJzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gan0sc2V0OmZ1bmN0aW9uKGRlKXtpZigibnVtYmVyIiE9dHlwZW9mIGRlfHxkZTww'@;
put 'fHxFKGRlKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mICJkZWZhdWx0TWF4TGlzdGVuZXJzIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnK2RlKyIuIik7aj1kZX19KSx6LmluaXQ9ZnVuY3Rpb24oKXt2b2lk'@;
put 'IDAhPT10aGlzLl9ldmVudHMmJnRoaXMuX2V2ZW50cyE9PU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5fZXZlbnRzfHwodGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCksdGhpcy5fbWF4TGlzdGVuZXJzPXRoaXMuX21heExpc3RlbmVyc3x8'@;
put 'dm9pZCAwfSx6LnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24oZGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZGV8fGRlPDB8fEUoZGUpKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgIm4iIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2'@;
put 'ZSBudW1iZXIuIFJlY2VpdmVkICcrZGUrIi4iKTtyZXR1cm4gdGhpcy5fbWF4TGlzdGVuZXJzPWRlLHRoaXN9LHoucHJvdG90eXBlLmdldE1heExpc3RlbmVycz1mdW5jdGlvbigpe3JldHVybiBHKHRoaXMpfSx6LnByb3RvdHlwZS5lbWl0PWZ1bmN0aW9uKGRlKXtmb3IodmFyIHVlPVtdLGNl'@;
put 'PTE7Y2U8YXJndW1lbnRzLmxlbmd0aDtjZSsrKXVlLnB1c2goYXJndW1lbnRzW2NlXSk7dmFyIFk9ImVycm9yIj09PWRlLGI9dGhpcy5fZXZlbnRzO2lmKHZvaWQgMCE9PWIpWT1ZJiZ2b2lkIDA9PT1iLmVycm9yO2Vsc2UgaWYoIVkpcmV0dXJuITE7aWYoWSl7dmFyIHg7aWYodWUubGVuZ3Ro'@;
put 'PjAmJih4PXVlWzBdKSx4IGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgeDt2YXIgTj1uZXcgRXJyb3IoIlVuaGFuZGxlZCBlcnJvci4iKyh4PyIgKCIreC5tZXNzYWdlKyIpIjoiIikpO3Rocm93IE4uY29udGV4dD14LE59dmFyIEY9YltkZV07aWYodm9pZCAwPT09RilyZXR1cm4hMTtpZigiZnVu'@;
put 'Y3Rpb24iPT10eXBlb2YgRilSKEYsdGhpcyx1ZSk7ZWxzZXt2YXIgZz1GLmxlbmd0aCxDPWllKEYsZyk7Zm9yKGNlPTA7Y2U8ZzsrK2NlKVIoQ1tjZV0sdGhpcyx1ZSl9cmV0dXJuITB9LHoucHJvdG90eXBlLm9uPXoucHJvdG90eXBlLmFkZExpc3RlbmVyPWZ1bmN0aW9uKGRlLHVlKXtyZXR1'@;
put 'cm4gVyh0aGlzLGRlLHVlLCExKX0sei5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyPWZ1bmN0aW9uKGRlLHVlKXtyZXR1cm4gVyh0aGlzLGRlLHVlLCEwKX0sei5wcm90b3R5cGUub25jZT1mdW5jdGlvbihkZSx1ZSl7cmV0dXJuIFYodWUpLHRoaXMub24oZGUscSh0aGlzLGRlLHVlKSksdGhp'@;
put 'c30sei5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lcj1mdW5jdGlvbihkZSx1ZSl7cmV0dXJuIFYodWUpLHRoaXMucHJlcGVuZExpc3RlbmVyKGRlLHEodGhpcyxkZSx1ZSkpLHRoaXN9LHoucHJvdG90eXBlLm9mZj16LnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbihkZSx1'@;
put 'ZSl7dmFyIGNlLFksYix4LE47aWYoVih1ZSksdm9pZCAwPT09KFk9dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZih2b2lkIDA9PT0oY2U9WVtkZV0pKXJldHVybiB0aGlzO2lmKGNlPT09dWV8fGNlLmxpc3RlbmVyPT09dWUpMD09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9'@;
put 'T2JqZWN0LmNyZWF0ZShudWxsKTooZGVsZXRlIFlbZGVdLFkucmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdCgicmVtb3ZlTGlzdGVuZXIiLGRlLGNlLmxpc3RlbmVyfHx1ZSkpO2Vsc2UgaWYoImZ1bmN0aW9uIiE9dHlwZW9mIGNlKXtmb3IoYj0tMSx4PWNlLmxlbmd0aC0xO3g+PTA7eC0tKWlm'@;
put 'KGNlW3hdPT09dWV8fGNlW3hdLmxpc3RlbmVyPT09dWUpe049Y2VbeF0ubGlzdGVuZXIsYj14O2JyZWFrfWlmKGI8MClyZXR1cm4gdGhpczswPT09Yj9jZS5zaGlmdCgpOmZ1bmN0aW9uKEYsZyl7Zm9yKDtnKzE8Ri5sZW5ndGg7ZysrKUZbZ109RltnKzFdO0YucG9wKCl9KGNlLGIpLDE9PT1j'@;
put 'ZS5sZW5ndGgmJihZW2RlXT1jZVswXSksdm9pZCAwIT09WS5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KCJyZW1vdmVMaXN0ZW5lciIsZGUsTnx8dWUpfXJldHVybiB0aGlzfSx6LnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24oZGUpe3ZhciB1ZSxjZSxZO2lmKHZvaWQg'@;
put 'MD09PShjZT10aGlzLl9ldmVudHMpKXJldHVybiB0aGlzO2lmKHZvaWQgMD09PWNlLnJlbW92ZUxpc3RlbmVyKXJldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aD8odGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCk6dm9pZCAwIT09Y2VbZGVdJiYo'@;
put 'MD09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKTpkZWxldGUgY2VbZGVdKSx0aGlzO2lmKDA9PT1hcmd1bWVudHMubGVuZ3RoKXt2YXIgYix4PU9iamVjdC5rZXlzKGNlKTtmb3IoWT0wO1k8eC5sZW5ndGg7KytZKSJyZW1vdmVMaXN0ZW5lciIh'@;
put 'PT0oYj14W1ldKSYmdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoYik7cmV0dXJuIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCJyZW1vdmVMaXN0ZW5lciIpLHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTAsdGhpc31pZigiZnVuY3Rpb24iPT10eXBl'@;
put 'b2YodWU9Y2VbZGVdKSl0aGlzLnJlbW92ZUxpc3RlbmVyKGRlLHVlKTtlbHNlIGlmKHZvaWQgMCE9PXVlKWZvcihZPXVlLmxlbmd0aC0xO1k+PTA7WS0tKXRoaXMucmVtb3ZlTGlzdGVuZXIoZGUsdWVbWV0pO3JldHVybiB0aGlzfSx6LnByb3RvdHlwZS5saXN0ZW5lcnM9ZnVuY3Rpb24oZGUp'@;
put 'e3JldHVybiB0ZSh0aGlzLGRlLCEwKX0sei5wcm90b3R5cGUucmF3TGlzdGVuZXJzPWZ1bmN0aW9uKGRlKXtyZXR1cm4gdGUodGhpcyxkZSwhMSl9LHoubGlzdGVuZXJDb3VudD1mdW5jdGlvbihkZSx1ZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGRlLmxpc3RlbmVyQ291bnQ/ZGUubGlz'@;
put 'dGVuZXJDb3VudCh1ZSk6bmUuY2FsbChkZSx1ZSl9LHoucHJvdG90eXBlLmxpc3RlbmVyQ291bnQ9bmUsei5wcm90b3R5cGUuZXZlbnROYW1lcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ldmVudHNDb3VudD4wP0sodGhpcy5fZXZlbnRzKTpbXX19LDMwNDg6KEgsQixMKT0+e3ZhciBLPUwo'@;
put 'OTUwOSkuQnVmZmVyLEo9TCgyMzE4KTtILmV4cG9ydHM9ZnVuY3Rpb24oSSxSLEUseil7aWYoSy5pc0J1ZmZlcihJKXx8KEk9Sy5mcm9tKEksImJpbmFyeSIpKSxSJiYoSy5pc0J1ZmZlcihSKXx8KFI9Sy5mcm9tKFIsImJpbmFyeSIpKSw4IT09Ui5sZW5ndGgpKXRocm93IG5ldyBSYW5nZUVy'@;
put 'cm9yKCJzYWx0IHNob3VsZCBiZSBCdWZmZXIgd2l0aCA4IGJ5dGUgbGVuZ3RoIik7Zm9yKHZhciBqPUUvOCxWPUsuYWxsb2MoaiksRz1LLmFsbG9jKHp8fDApLFc9Sy5hbGxvYygwKTtqPjB8fHo+MDspe3ZhciBVPW5ldyBKO1UudXBkYXRlKFcpLFUudXBkYXRlKEkpLFImJlUudXBkYXRlKFIp'@;
put 'LFc9VS5kaWdlc3QoKTt2YXIgcT0wO2lmKGo+MCl7dmFyIHRlPVYubGVuZ3RoLWo7cT1NYXRoLm1pbihqLFcubGVuZ3RoKSxXLmNvcHkoVix0ZSwwLHEpLGotPXF9aWYocTxXLmxlbmd0aCYmej4wKXt2YXIgbmU9Ry5sZW5ndGgteixpZT1NYXRoLm1pbih6LFcubGVuZ3RoLXEpO1cuY29weShH'@;
put 'LG5lLHEscStpZSksei09aWV9fXJldHVybiBXLmZpbGwoMCkse2tleTpWLGl2Okd9fX0sNDAyOTooSCxCLEwpPT57InVzZSBzdHJpY3QiO3ZhciBLPUwoNTMyMCksSj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLEk9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtILmV4cG9ydHM9'@;
put 'ZnVuY3Rpb24oUixFLHope2lmKCFLKEUpKXRocm93IG5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIG11c3QgYmUgYSBmdW5jdGlvbiIpO3ZhciBqO2FyZ3VtZW50cy5sZW5ndGg+PTMmJihqPXopLCJbb2JqZWN0IEFycmF5XSI9PT1KLmNhbGwoUik/ZnVuY3Rpb24oVixHLFcpe2Zvcih2YXIgVT0w'@;
put 'LHE9Vi5sZW5ndGg7VTxxO1UrKylJLmNhbGwoVixVKSYmKG51bGw9PVc/RyhWW1VdLFUsVik6Ry5jYWxsKFcsVltVXSxVLFYpKX0oUixFLGopOiJzdHJpbmciPT10eXBlb2YgUj9mdW5jdGlvbihWLEcsVyl7Zm9yKHZhciBVPTAscT1WLmxlbmd0aDtVPHE7VSsrKW51bGw9PVc/RyhWLmNoYXJB'@;
put 'dChVKSxVLFYpOkcuY2FsbChXLFYuY2hhckF0KFUpLFUsVil9KFIsRSxqKTpmdW5jdGlvbihWLEcsVyl7Zm9yKHZhciBVIGluIFYpSS5jYWxsKFYsVSkmJihudWxsPT1XP0coVltVXSxVLFYpOkcuY2FsbChXLFZbVV0sVSxWKSl9KFIsRSxqKX19LDYyMzA6SD0+e0guZXhwb3J0cz0ib2JqZWN0'@;
put 'Ij09dHlwZW9mIHNlbGY/c2VsZi5Gb3JtRGF0YTp3aW5kb3cuRm9ybURhdGF9LDUzMDI6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSz1MKDQxNTUpLEo9TCg1MTA4KTtjb25zdCBJPUwoNzcpLFI9TCgyNTIwKSxFPUwoMTM4MSkubWtkaXJzU3luYyx6PUwoMzE4KS51dGltZXNNaWxsaXNT'@;
put 'eW5jLGo9TCgyNzMzKTtmdW5jdGlvbiBWKHEsdGUsbmUsaWUpe2NvbnN0IGxlPShpZS5kZXJlZmVyZW5jZT9JLnN0YXRTeW5jOkkubHN0YXRTeW5jKSh0ZSk7aWYobGUuaXNEaXJlY3RvcnkoKSlyZXR1cm4gZGU9bGUsY2U9dGUsWT1uZSxiPWllLHE/VShjZSxZLGIpOih4PWRlLm1vZGUsTj1j'@;
put 'ZSxnPWIsSS5ta2RpclN5bmMoRj1ZKSxVKE4sRixnKSxXKEYseCkpO3ZhciBkZSxjZSxZLGIseCxOLEYsZztpZihsZS5pc0ZpbGUoKXx8bGUuaXNDaGFyYWN0ZXJEZXZpY2UoKXx8bGUuaXNCbG9ja0RldmljZSgpKXJldHVybiBmdW5jdGlvbihkZSx1ZSxjZSxZLGIpe3JldHVybiB1ZT9mdW5j'@;
put 'dGlvbih4LE4sRixnKXtpZihnLm92ZXJ3cml0ZSlyZXR1cm4gSS51bmxpbmtTeW5jKEYpLEcoeCxOLEYsZyk7aWYoZy5lcnJvck9uRXhpc3QpdGhyb3cgbmV3IEVycm9yKGAnJHtGfScgYWxyZWFkeSBleGlzdHNgKX0oZGUsY2UsWSxiKTpHKGRlLGNlLFksYil9KGxlLHEsdGUsbmUsaWUpO2lm'@;
put 'KGxlLmlzU3ltYm9saWNMaW5rKCkpcmV0dXJuIGZ1bmN0aW9uKGRlLHVlLGNlLFkpe2xldCBiPUkucmVhZGxpbmtTeW5jKHVlKTtpZihZLmRlcmVmZXJlbmNlJiYoYj1SLnJlc29sdmUoSy5jd2QoKSxiKSksZGUpe2xldCB4O3RyeXt4PUkucmVhZGxpbmtTeW5jKGNlKX1jYXRjaChOKXtpZigi'@;
put 'RUlOVkFMIj09PU4uY29kZXx8IlVOS05PV04iPT09Ti5jb2RlKXJldHVybiBJLnN5bWxpbmtTeW5jKGIsY2UpO3Rocm93IE59aWYoWS5kZXJlZmVyZW5jZSYmKHg9Ui5yZXNvbHZlKEsuY3dkKCkseCkpLGouaXNTcmNTdWJkaXIoYix4KSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb3B5ICck'@;
put 'e2J9JyB0byBhIHN1YmRpcmVjdG9yeSBvZiBpdHNlbGYsICcke3h9Jy5gKTtpZihJLnN0YXRTeW5jKGNlKS5pc0RpcmVjdG9yeSgpJiZqLmlzU3JjU3ViZGlyKHgsYikpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlICcke3h9JyB3aXRoICcke2J9Jy5gKTtyZXR1cm4gZnVuY3Rp'@;
put 'b24oTixGKXtyZXR1cm4gSS51bmxpbmtTeW5jKEYpLEkuc3ltbGlua1N5bmMoTixGKX0oYixjZSl9cmV0dXJuIEkuc3ltbGlua1N5bmMoYixjZSl9KHEsdGUsbmUsaWUpO3Rocm93IGxlLmlzU29ja2V0KCk/bmV3IEVycm9yKGBDYW5ub3QgY29weSBhIHNvY2tldCBmaWxlOiAke3RlfWApOmxl'@;
put 'LmlzRklGTygpP25ldyBFcnJvcihgQ2Fubm90IGNvcHkgYSBGSUZPIHBpcGU6ICR7dGV9YCk6bmV3IEVycm9yKGBVbmtub3duIGZpbGU6ICR7dGV9YCl9ZnVuY3Rpb24gRyhxLHRlLG5lLGllKXtyZXR1cm4gSS5jb3B5RmlsZVN5bmModGUsbmUpLGllLnByZXNlcnZlVGltZXN0YW1wcyYmKGRl'@;
put 'PXRlLHVlPW5lLDA9PSgxMjgmKGxlPXEubW9kZSkpJiZXKHVlLDEyOHxsZSksZnVuY3Rpb24oY2UsWSl7Y29uc3QgYj1JLnN0YXRTeW5jKGNlKTt6KFksYi5hdGltZSxiLm10aW1lKX0oZGUsdWUpKSxXKG5lLHEubW9kZSk7dmFyIGxlLGRlLHVlfWZ1bmN0aW9uIFcocSx0ZSl7cmV0dXJuIEku'@;
put 'Y2htb2RTeW5jKHEsdGUpfWZ1bmN0aW9uIFUocSx0ZSxuZSl7SS5yZWFkZGlyU3luYyhxKS5mb3JFYWNoKGllPT5mdW5jdGlvbihsZSxkZSx1ZSxjZSl7Y29uc3QgWT1SLmpvaW4oZGUsbGUpLGI9Ui5qb2luKHVlLGxlKSx7ZGVzdFN0YXQ6eH09ai5jaGVja1BhdGhzU3luYyhZLGIsImNvcHki'@;
put 'LGNlKTtyZXR1cm4gZnVuY3Rpb24oTixGLGcsQyl7aWYoIUMuZmlsdGVyfHxDLmZpbHRlcihGLGcpKXJldHVybiBWKE4sRixnLEMpfSh4LFksYixjZSl9KGllLHEsdGUsbmUpKX1ILmV4cG9ydHM9ZnVuY3Rpb24ocSx0ZSxuZSl7ImZ1bmN0aW9uIj09dHlwZW9mIG5lJiYobmU9e2ZpbHRlcjpu'@;
put 'ZX0pLChuZT1uZXx8e30pLmNsb2JiZXI9ISgiY2xvYmJlciJpbiBuZSl8fCEhbmUuY2xvYmJlcixuZS5vdmVyd3JpdGU9Im92ZXJ3cml0ZSJpbiBuZT8hIW5lLm92ZXJ3cml0ZTpuZS5jbG9iYmVyLG5lLnByZXNlcnZlVGltZXN0YW1wcyYmImlhMzIiPT09Sy5hcmNoJiZKLndhcm4oImZzLWV4'@;
put 'dHJhOiBVc2luZyB0aGUgcHJlc2VydmVUaW1lc3RhbXBzIG9wdGlvbiBpbiAzMi1iaXQgbm9kZSBpcyBub3QgcmVjb21tZW5kZWQ7XG5cbiAgICBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pwcmljaGFyZHNvbi9ub2RlLWZzLWV4dHJhL2lzc3Vlcy8yNjkiKTtjb25zdHtzcmNTdGF0OmllLGRl'@;
put 'c3RTdGF0OmxlfT1qLmNoZWNrUGF0aHNTeW5jKHEsdGUsImNvcHkiLG5lKTtyZXR1cm4gai5jaGVja1BhcmVudFBhdGhzU3luYyhxLGllLHRlLCJjb3B5IiksZnVuY3Rpb24oZGUsdWUsY2UsWSl7aWYoWS5maWx0ZXImJiFZLmZpbHRlcih1ZSxjZSkpcmV0dXJuO2NvbnN0IGI9Ui5kaXJuYW1l'@;
put 'KGNlKTtyZXR1cm4gSS5leGlzdHNTeW5jKGIpfHxFKGIpLFYoZGUsdWUsY2UsWSl9KGxlLHEsdGUsbmUpfX0sODY5MDooSCxCLEwpPT57InVzZSBzdHJpY3QiO0guZXhwb3J0cz17Y29weVN5bmM6TCg1MzAyKX19LDcxODk6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSz1MKDQxNTUpLEo9'@;
put 'TCg1MTA4KTtjb25zdCBJPUwoNzcpLFI9TCgyNTIwKSxFPUwoMTM4MSkubWtkaXJzLHo9TCg5MjU3KS5wYXRoRXhpc3RzLGo9TCgzMTgpLnV0aW1lc01pbGxpcyxWPUwoMjczMyk7ZnVuY3Rpb24gRyh1ZSxjZSxZLGIseCl7Y29uc3QgTj1SLmRpcm5hbWUoWSk7eihOLChGLGcpPT5GP3goRik6'@;
put 'Zz9VKHVlLGNlLFksYix4KTp2b2lkIEUoTixDPT5DP3goQyk6VSh1ZSxjZSxZLGIseCkpKX1mdW5jdGlvbiBXKHVlLGNlLFksYix4LE4pe1Byb21pc2UucmVzb2x2ZSh4LmZpbHRlcihZLGIpKS50aGVuKEY9PkY/dWUoY2UsWSxiLHgsTik6TigpLEY9Pk4oRikpfWZ1bmN0aW9uIFUodWUsY2Us'@;
put 'WSxiLHgpeyhiLmRlcmVmZXJlbmNlP0kuc3RhdDpJLmxzdGF0KShjZSwoTixGKT0+e3JldHVybiBOP3goTik6Ri5pc0RpcmVjdG9yeSgpPyhnPUYsTT1jZSx5PVkscD1iLFM9eCx1ZT9pZShNLHkscCxTKTooUT1nLm1vZGUscmU9TSxtZT1wLGtlPVMsdm9pZCBJLm1rZGlyKGZlPXksVGU9Pntp'@;
put 'ZihUZSlyZXR1cm4ga2UoVGUpO2llKHJlLGZlLG1lLFBlPT5QZT9rZShQZSk6bmUoZmUsUSxrZSkpfSkpKTpGLmlzRmlsZSgpfHxGLmlzQ2hhcmFjdGVyRGV2aWNlKCl8fEYuaXNCbG9ja0RldmljZSgpP2Z1bmN0aW9uKGcsQyxNLHkscCxTKXtyZXR1cm4gQz9mdW5jdGlvbihRLHJlLGZlLG1l'@;
put 'LGtlKXtpZighbWUub3ZlcndyaXRlKXJldHVybiBtZS5lcnJvck9uRXhpc3Q/a2UobmV3IEVycm9yKGAnJHtmZX0nIGFscmVhZHkgZXhpc3RzYCkpOmtlKCk7SS51bmxpbmsoZmUsVGU9PlRlP2tlKFRlKTpxKFEscmUsZmUsbWUsa2UpKX0oZyxNLHkscCxTKTpxKGcsTSx5LHAsUyl9KEYsdWUs'@;
put 'Y2UsWSxiLHgpOkYuaXNTeW1ib2xpY0xpbmsoKT9mdW5jdGlvbiBkZSh1ZSxjZSxZLGIseCl7SS5yZWFkbGluayhjZSwoTixGKT0+Tj94KE4pOihiLmRlcmVmZXJlbmNlJiYoRj1SLnJlc29sdmUoSy5jd2QoKSxGKSksdWU/dm9pZCBJLnJlYWRsaW5rKFksKGcsQyk9Pmc/IkVJTlZBTCI9PT1n'@;
put 'LmNvZGV8fCJVTktOT1dOIj09PWcuY29kZT9JLnN5bWxpbmsoRixZLHgpOngoZyk6KGIuZGVyZWZlcmVuY2UmJihDPVIucmVzb2x2ZShLLmN3ZCgpLEMpKSxWLmlzU3JjU3ViZGlyKEYsQyk/eChuZXcgRXJyb3IoYENhbm5vdCBjb3B5ICcke0Z9JyB0byBhIHN1YmRpcmVjdG9yeSBvZiBpdHNl'@;
put 'bGYsICcke0N9Jy5gKSk6dWUuaXNEaXJlY3RvcnkoKSYmVi5pc1NyY1N1YmRpcihDLEYpP3gobmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlICcke0N9JyB3aXRoICcke0Z9Jy5gKSk6ZnVuY3Rpb24oTSx5LHApe0kudW5saW5rKHksUz0+Uz9wKFMpOkkuc3ltbGluayhNLHkscCkpfShGLFks'@;
put 'eCkpKTpJLnN5bWxpbmsoRixZLHgpKSl9KHVlLGNlLFksYix4KTpGLmlzU29ja2V0KCk/eChuZXcgRXJyb3IoYENhbm5vdCBjb3B5IGEgc29ja2V0IGZpbGU6ICR7Y2V9YCkpOkYuaXNGSUZPKCk/eChuZXcgRXJyb3IoYENhbm5vdCBjb3B5IGEgRklGTyBwaXBlOiAke2NlfWApKTp4KG5ldyBF'@;
put 'cnJvcihgVW5rbm93biBmaWxlOiAke2NlfWApKTt2YXIgZyxNLHkscCxTLFEscmUsZmUsbWUsa2V9KX1mdW5jdGlvbiBxKHVlLGNlLFksYix4KXtJLmNvcHlGaWxlKGNlLFksTj0+e3JldHVybiBOP3goTik6Yi5wcmVzZXJ2ZVRpbWVzdGFtcHM/KGc9Y2UsQz1ZLE09eCwwPT0oMTI4JihGPXVl'@;
put 'Lm1vZGUpKT9uZShDLDEyOHxGLHk9Pnk/TSh5KTp0ZShGLGcsQyxNKSk6dGUoRixnLEMsTSkpOm5lKFksdWUubW9kZSx4KTt2YXIgRixnLEMsTX0pfWZ1bmN0aW9uIHRlKHVlLGNlLFksYil7dmFyIE4sRjtOPVksRj14PT54P2IoeCk6bmUoWSx1ZSxiKSxJLnN0YXQoY2UsKGcsQyk9Pmc/Rihn'@;
put 'KTpqKE4sQy5hdGltZSxDLm10aW1lLEYpKX1mdW5jdGlvbiBuZSh1ZSxjZSxZKXtyZXR1cm4gSS5jaG1vZCh1ZSxjZSxZKX1mdW5jdGlvbiBpZSh1ZSxjZSxZLGIpe0kucmVhZGRpcih1ZSwoeCxOKT0+eD9iKHgpOmxlKE4sdWUsY2UsWSxiKSl9ZnVuY3Rpb24gbGUodWUsY2UsWSxiLHgpe2Nv'@;
put 'bnN0IE49dWUucG9wKCk7cmV0dXJuIE4/ZnVuY3Rpb24oRixnLEMsTSx5LHApe2NvbnN0IFM9Ui5qb2luKEMsZyksUT1SLmpvaW4oTSxnKTtWLmNoZWNrUGF0aHMoUyxRLCJjb3B5Iix5LChyZSxmZSk9PntpZihyZSlyZXR1cm4gcChyZSk7Y29uc3R7ZGVzdFN0YXQ6bWV9PWZlO3ZhciBrZSxU'@;
put 'ZSxQZSxGZSxOZTtrZT1tZSxUZT1TLFBlPVEsTmU9a2U9PmtlP3Aoa2UpOmxlKEYsQyxNLHkscCksKEZlPXkpLmZpbHRlcj9XKFUsa2UsVGUsUGUsRmUsTmUpOlUoa2UsVGUsUGUsRmUsTmUpfSl9KHVlLE4sY2UsWSxiLHgpOngoKX1ILmV4cG9ydHM9ZnVuY3Rpb24odWUsY2UsWSxiKXsiZnVu'@;
put 'Y3Rpb24iIT10eXBlb2YgWXx8Yj8iZnVuY3Rpb24iPT10eXBlb2YgWSYmKFk9e2ZpbHRlcjpZfSk6KGI9WSxZPXt9KSxiPWJ8fGZ1bmN0aW9uKCl7fSwoWT1ZfHx7fSkuY2xvYmJlcj0hKCJjbG9iYmVyImluIFkpfHwhIVkuY2xvYmJlcixZLm92ZXJ3cml0ZT0ib3ZlcndyaXRlImluIFk/ISFZ'@;
put 'Lm92ZXJ3cml0ZTpZLmNsb2JiZXIsWS5wcmVzZXJ2ZVRpbWVzdGFtcHMmJiJpYTMyIj09PUsuYXJjaCYmSi53YXJuKCJmcy1leHRyYTogVXNpbmcgdGhlIHByZXNlcnZlVGltZXN0YW1wcyBvcHRpb24gaW4gMzItYml0IG5vZGUgaXMgbm90IHJlY29tbWVuZGVkO1xuXG4gICAgc2VlIGh0dHBz'@;
put 'Oi8vZ2l0aHViLmNvbS9qcHJpY2hhcmRzb24vbm9kZS1mcy1leHRyYS9pc3N1ZXMvMjY5IiksVi5jaGVja1BhdGhzKHVlLGNlLCJjb3B5IixZLCh4LE4pPT57aWYoeClyZXR1cm4gYih4KTtjb25zdHtzcmNTdGF0OkYsZGVzdFN0YXQ6Z309TjtWLmNoZWNrUGFyZW50UGF0aHModWUsRixjZSwi'@;
put 'Y29weSIsQz0+Qz9iKEMpOlkuZmlsdGVyP1coRyxnLHVlLGNlLFksYik6RyhnLHVlLGNlLFksYikpfSl9fSw2NDY0OihILEIsTCk9PnsidXNlIHN0cmljdCI7Y29uc3QgSz1MKDg5ODEpLmZyb21DYWxsYmFjaztILmV4cG9ydHM9e2NvcHk6SyhMKDcxODkpKX19LDU1OTA6KEgsQixMKT0+eyJ1'@;
put 'c2Ugc3RyaWN0Ijtjb25zdCBLPUwoODk4MSkuZnJvbVByb21pc2UsSj1MKDc3NDkpLEk9TCgyNTIwKSxSPUwoMTM4MSksRT1MKDQ1NDIpLHo9SyhmdW5jdGlvbigpe3ZhciBWPXNlKGZ1bmN0aW9uKihHKXtsZXQgVzt0cnl7Vz15aWVsZCBKLnJlYWRkaXIoRyl9Y2F0Y2h7cmV0dXJuIFIubWtk'@;
put 'aXJzKEcpfXJldHVybiBQcm9taXNlLmFsbChXLm1hcChVPT5FLnJlbW92ZShJLmpvaW4oRyxVKSkpKX0pO3JldHVybiBmdW5jdGlvbihHKXtyZXR1cm4gVi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKTtmdW5jdGlvbiBqKFYpe2xldCBHO3RyeXtHPUoucmVhZGRpclN5bmMoVil9Y2F0Y2h7'@;
put 'cmV0dXJuIFIubWtkaXJzU3luYyhWKX1HLmZvckVhY2goVz0+e1c9SS5qb2luKFYsVyksRS5yZW1vdmVTeW5jKFcpfSl9SC5leHBvcnRzPXtlbXB0eURpclN5bmM6aixlbXB0eWRpclN5bmM6aixlbXB0eURpcjp6LGVtcHR5ZGlyOnp9fSw2NTMwOihILEIsTCk9PnsidXNlIHN0cmljdCI7Y29u'@;
put 'c3QgSz1MKDg5ODEpLmZyb21DYWxsYmFjayxKPUwoMjUyMCksST1MKDc3KSxSPUwoMTM4MSk7SC5leHBvcnRzPXtjcmVhdGVGaWxlOksoZnVuY3Rpb24oRSx6KXtmdW5jdGlvbiBqKCl7SS53cml0ZUZpbGUoRSwiIixWPT57aWYoVilyZXR1cm4geihWKTt6KCl9KX1JLnN0YXQoRSwoVixHKT0+'@;
put 'e2lmKCFWJiZHLmlzRmlsZSgpKXJldHVybiB6KCk7Y29uc3QgVz1KLmRpcm5hbWUoRSk7SS5zdGF0KFcsKFUscSk9PntpZihVKXJldHVybiJFTk9FTlQiPT09VS5jb2RlP1IubWtkaXJzKFcsdGU9PntpZih0ZSlyZXR1cm4geih0ZSk7aigpfSk6eihVKTtxLmlzRGlyZWN0b3J5KCk/aigpOkku'@;
put 'cmVhZGRpcihXLHRlPT57aWYodGUpcmV0dXJuIHoodGUpfSl9KX0pfSksY3JlYXRlRmlsZVN5bmM6ZnVuY3Rpb24oRSl7bGV0IHo7dHJ5e3o9SS5zdGF0U3luYyhFKX1jYXRjaHt9aWYoeiYmei5pc0ZpbGUoKSlyZXR1cm47Y29uc3Qgaj1KLmRpcm5hbWUoRSk7dHJ5e0kuc3RhdFN5bmMoaiku'@;
put 'aXNEaXJlY3RvcnkoKXx8SS5yZWFkZGlyU3luYyhqKX1jYXRjaChWKXtpZighVnx8IkVOT0VOVCIhPT1WLmNvZGUpdGhyb3cgVjtSLm1rZGlyc1N5bmMoail9SS53cml0ZUZpbGVTeW5jKEUsIiIpfX19LDE3MjA6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBLPUwoNjUzMCksSj1MKDQx'@;
put 'NDcpLEk9TCgzNjM1KTtILmV4cG9ydHM9e2NyZWF0ZUZpbGU6Sy5jcmVhdGVGaWxlLGNyZWF0ZUZpbGVTeW5jOksuY3JlYXRlRmlsZVN5bmMsZW5zdXJlRmlsZTpLLmNyZWF0ZUZpbGUsZW5zdXJlRmlsZVN5bmM6Sy5jcmVhdGVGaWxlU3luYyxjcmVhdGVMaW5rOkouY3JlYXRlTGluayxjcmVh'@;
put 'dGVMaW5rU3luYzpKLmNyZWF0ZUxpbmtTeW5jLGVuc3VyZUxpbms6Si5jcmVhdGVMaW5rLGVuc3VyZUxpbmtTeW5jOkouY3JlYXRlTGlua1N5bmMsY3JlYXRlU3ltbGluazpJLmNyZWF0ZVN5bWxpbmssY3JlYXRlU3ltbGlua1N5bmM6SS5jcmVhdGVTeW1saW5rU3luYyxlbnN1cmVTeW1saW5r'@;
put 'OkkuY3JlYXRlU3ltbGluayxlbnN1cmVTeW1saW5rU3luYzpJLmNyZWF0ZVN5bWxpbmtTeW5jfX0sNDE0NzooSCxCLEwpPT57InVzZSBzdHJpY3QiO2NvbnN0IEs9TCg4OTgxKS5mcm9tQ2FsbGJhY2ssSj1MKDI1MjApLEk9TCg3NyksUj1MKDEzODEpLEU9TCg5MjU3KS5wYXRoRXhpc3RzLHth'@;
put 'cmVJZGVudGljYWw6en09TCgyNzMzKTtILmV4cG9ydHM9e2NyZWF0ZUxpbms6SyhmdW5jdGlvbihqLFYsRyl7ZnVuY3Rpb24gVyhVLHEpe0kubGluayhVLHEsdGU9PntpZih0ZSlyZXR1cm4gRyh0ZSk7RyhudWxsKX0pfUkubHN0YXQoViwoVSxxKT0+e0kubHN0YXQoaiwodGUsbmUpPT57aWYo'@;
put 'dGUpcmV0dXJuIHRlLm1lc3NhZ2U9dGUubWVzc2FnZS5yZXBsYWNlKCJsc3RhdCIsImVuc3VyZUxpbmsiKSxHKHRlKTtpZihxJiZ6KG5lLHEpKXJldHVybiBHKG51bGwpO2NvbnN0IGllPUouZGlybmFtZShWKTtFKGllLChsZSxkZSk9PmxlP0cobGUpOmRlP1coaixWKTp2b2lkIFIubWtkaXJz'@;
put 'KGllLHVlPT57aWYodWUpcmV0dXJuIEcodWUpO1coaixWKX0pKX0pfSl9KSxjcmVhdGVMaW5rU3luYzpmdW5jdGlvbihqLFYpe2xldCBHO3RyeXtHPUkubHN0YXRTeW5jKFYpfWNhdGNoe310cnl7Y29uc3QgVT1JLmxzdGF0U3luYyhqKTtpZihHJiZ6KFUsRykpcmV0dXJufWNhdGNoKFUpe3Ro'@;
put 'cm93IFUubWVzc2FnZT1VLm1lc3NhZ2UucmVwbGFjZSgibHN0YXQiLCJlbnN1cmVMaW5rIiksVX1jb25zdCBXPUouZGlybmFtZShWKTtyZXR1cm4gSS5leGlzdHNTeW5jKFcpfHxSLm1rZGlyc1N5bmMoVyksSS5saW5rU3luYyhqLFYpfX19LDYwNzI6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0Ijtj'@;
put 'b25zdCBLPUwoMjUyMCksSj1MKDc3KSxJPUwoOTI1NykucGF0aEV4aXN0cztILmV4cG9ydHM9e3N5bWxpbmtQYXRoczpmdW5jdGlvbihSLEUseil7aWYoSy5pc0Fic29sdXRlKFIpKXJldHVybiBKLmxzdGF0KFIsaj0+aj8oai5tZXNzYWdlPWoubWVzc2FnZS5yZXBsYWNlKCJsc3RhdCIsImVu'@;
put 'c3VyZVN5bWxpbmsiKSx6KGopKTp6KG51bGwse3RvQ3dkOlIsdG9Ec3Q6Un0pKTt7Y29uc3Qgaj1LLmRpcm5hbWUoRSksVj1LLmpvaW4oaixSKTtyZXR1cm4gSShWLChHLFcpPT5HP3ooRyk6Vz96KG51bGwse3RvQ3dkOlYsdG9Ec3Q6Un0pOkoubHN0YXQoUixVPT5VPyhVLm1lc3NhZ2U9VS5t'@;
put 'ZXNzYWdlLnJlcGxhY2UoImxzdGF0IiwiZW5zdXJlU3ltbGluayIpLHooVSkpOnoobnVsbCx7dG9Dd2Q6Uix0b0RzdDpLLnJlbGF0aXZlKGosUil9KSkpfX0sc3ltbGlua1BhdGhzU3luYzpmdW5jdGlvbihSLEUpe2xldCB6O2lmKEsuaXNBYnNvbHV0ZShSKSl7aWYoej1KLmV4aXN0c1N5bmMo'@;
put 'UiksIXopdGhyb3cgbmV3IEVycm9yKCJhYnNvbHV0ZSBzcmNwYXRoIGRvZXMgbm90IGV4aXN0Iik7cmV0dXJue3RvQ3dkOlIsdG9Ec3Q6Un19e2NvbnN0IGo9Sy5kaXJuYW1lKEUpLFY9Sy5qb2luKGosUik7aWYoej1KLmV4aXN0c1N5bmMoVikseilyZXR1cm57dG9Dd2Q6Vix0b0RzdDpSfTtp'@;
put 'Zih6PUouZXhpc3RzU3luYyhSKSwheil0aHJvdyBuZXcgRXJyb3IoInJlbGF0aXZlIHNyY3BhdGggZG9lcyBub3QgZXhpc3QiKTtyZXR1cm57dG9Dd2Q6Uix0b0RzdDpLLnJlbGF0aXZlKGosUil9fX19fSw5MjU5OihILEIsTCk9PnsidXNlIHN0cmljdCI7Y29uc3QgSz1MKDc3KTtILmV4cG9y'@;
put 'dHM9e3N5bWxpbmtUeXBlOmZ1bmN0aW9uKEosSSxSKXtpZihSPSJmdW5jdGlvbiI9PXR5cGVvZiBJP0k6UixJPSJmdW5jdGlvbiIhPXR5cGVvZiBJJiZJKXJldHVybiBSKG51bGwsSSk7Sy5sc3RhdChKLChFLHopPT57aWYoRSlyZXR1cm4gUihudWxsLCJmaWxlIik7ST16JiZ6LmlzRGlyZWN0'@;
put 'b3J5KCk/ImRpciI6ImZpbGUiLFIobnVsbCxJKX0pfSxzeW1saW5rVHlwZVN5bmM6ZnVuY3Rpb24oSixJKXtsZXQgUjtpZihJKXJldHVybiBJO3RyeXtSPUsubHN0YXRTeW5jKEopfWNhdGNoe3JldHVybiJmaWxlIn1yZXR1cm4gUiYmUi5pc0RpcmVjdG9yeSgpPyJkaXIiOiJmaWxlIn19fSwz'@;
put 'NjM1OihILEIsTCk9PnsidXNlIHN0cmljdCI7Y29uc3QgSz1MKDg5ODEpLmZyb21DYWxsYmFjayxKPUwoMjUyMCksST1MKDc3NDkpLFI9TCgxMzgxKSxFPVIubWtkaXJzLHo9Ui5ta2RpcnNTeW5jLGo9TCg2MDcyKSxWPWouc3ltbGlua1BhdGhzLEc9ai5zeW1saW5rUGF0aHNTeW5jLFc9TCg5'@;
put 'MjU5KSxVPVcuc3ltbGlua1R5cGUscT1XLnN5bWxpbmtUeXBlU3luYyx0ZT1MKDkyNTcpLnBhdGhFeGlzdHMse2FyZUlkZW50aWNhbDpuZX09TCgyNzMzKTtmdW5jdGlvbiBpZShsZSxkZSx1ZSxjZSl7VihsZSxkZSwoWSxiKT0+e2lmKFkpcmV0dXJuIGNlKFkpO2xlPWIudG9Ec3QsVShiLnRv'@;
put 'Q3dkLHVlLCh4LE4pPT57aWYoeClyZXR1cm4gY2UoeCk7Y29uc3QgRj1KLmRpcm5hbWUoZGUpO3RlKEYsKGcsQyk9Pmc/Y2UoZyk6Qz9JLnN5bWxpbmsobGUsZGUsTixjZSk6dm9pZCBFKEYsTT0+e2lmKE0pcmV0dXJuIGNlKE0pO0kuc3ltbGluayhsZSxkZSxOLGNlKX0pKX0pfSl9SC5leHBv'@;
put 'cnRzPXtjcmVhdGVTeW1saW5rOksoZnVuY3Rpb24obGUsZGUsdWUsY2Upe2NlPSJmdW5jdGlvbiI9PXR5cGVvZiB1ZT91ZTpjZSx1ZT0iZnVuY3Rpb24iIT10eXBlb2YgdWUmJnVlLEkubHN0YXQoZGUsKFksYik9PnshWSYmYi5pc1N5bWJvbGljTGluaygpP1Byb21pc2UuYWxsKFtJLnN0YXQo'@;
put 'bGUpLEkuc3RhdChkZSldKS50aGVuKChbeCxOXSk9PntpZihuZSh4LE4pKXJldHVybiBjZShudWxsKTtpZShsZSxkZSx1ZSxjZSl9KTppZShsZSxkZSx1ZSxjZSl9KX0pLGNyZWF0ZVN5bWxpbmtTeW5jOmZ1bmN0aW9uKGxlLGRlLHVlKXtsZXQgY2U7dHJ5e2NlPUkubHN0YXRTeW5jKGRlKX1j'@;
put 'YXRjaHt9aWYoY2UmJmNlLmlzU3ltYm9saWNMaW5rKCkpe2NvbnN0IHg9SS5zdGF0U3luYyhsZSksTj1JLnN0YXRTeW5jKGRlKTtpZihuZSh4LE4pKXJldHVybn1jb25zdCBZPUcobGUsZGUpO2xlPVkudG9Ec3QsdWU9cShZLnRvQ3dkLHVlKTtjb25zdCBiPUouZGlybmFtZShkZSk7cmV0dXJu'@;
put 'IEkuZXhpc3RzU3luYyhiKXx8eihiKSxJLnN5bWxpbmtTeW5jKGxlLGRlLHVlKX19fSw3NzQ5OihILEIsTCk9PnsidXNlIHN0cmljdCI7Y29uc3QgSz1MKDg5ODEpLmZyb21DYWxsYmFjayxKPUwoNzcpLEk9WyJhY2Nlc3MiLCJhcHBlbmRGaWxlIiwiY2htb2QiLCJjaG93biIsImNsb3NlIiwi'@;
put 'Y29weUZpbGUiLCJmY2htb2QiLCJmY2hvd24iLCJmZGF0YXN5bmMiLCJmc3RhdCIsImZzeW5jIiwiZnRydW5jYXRlIiwiZnV0aW1lcyIsImxjaG1vZCIsImxjaG93biIsImxpbmsiLCJsc3RhdCIsIm1rZGlyIiwibWtkdGVtcCIsIm9wZW4iLCJvcGVuZGlyIiwicmVhZGRpciIsInJlYWRGaWxl'@;
put 'IiwicmVhZGxpbmsiLCJyZWFscGF0aCIsInJlbmFtZSIsInJtIiwicm1kaXIiLCJzdGF0Iiwic3ltbGluayIsInRydW5jYXRlIiwidW5saW5rIiwidXRpbWVzIiwid3JpdGVGaWxlIl0uZmlsdGVyKFI9PiJmdW5jdGlvbiI9PXR5cGVvZiBKW1JdKTtPYmplY3QuYXNzaWduKEIsSiksSS5mb3JF'@;
put 'YWNoKFI9PntCW1JdPUsoSltSXSl9KSxCLnJlYWxwYXRoLm5hdGl2ZT1LKEoucmVhbHBhdGgubmF0aXZlKSxCLmV4aXN0cz1mdW5jdGlvbihSLEUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBFP0ouZXhpc3RzKFIsRSk6bmV3IFByb21pc2Uoej0+Si5leGlzdHMoUix6KSl9LEIucmVhZD1m'@;
put 'dW5jdGlvbihSLEUseixqLFYsRyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEc/Si5yZWFkKFIsRSx6LGosVixHKTpuZXcgUHJvbWlzZSgoVyxVKT0+e0oucmVhZChSLEUseixqLFYsKHEsdGUsbmUpPT57aWYocSlyZXR1cm4gVShxKTtXKHtieXRlc1JlYWQ6dGUsYnVmZmVyOm5lfSl9KX0p'@;
put 'fSxCLndyaXRlPWZ1bmN0aW9uKFIsRSwuLi56KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygelt6Lmxlbmd0aC0xXT9KLndyaXRlKFIsRSwuLi56KTpuZXcgUHJvbWlzZSgoaixWKT0+e0oud3JpdGUoUixFLC4uLnosKEcsVyxVKT0+e2lmKEcpcmV0dXJuIFYoRyk7aih7Ynl0ZXNXcml0dGVu'@;
put 'OlcsYnVmZmVyOlV9KX0pfSl9LCJmdW5jdGlvbiI9PXR5cGVvZiBKLndyaXRldiYmKEIud3JpdGV2PWZ1bmN0aW9uKFIsRSwuLi56KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygelt6Lmxlbmd0aC0xXT9KLndyaXRldihSLEUsLi4ueik6bmV3IFByb21pc2UoKGosVik9PntKLndyaXRldihS'@;
put 'LEUsLi4ueiwoRyxXLFUpPT57aWYoRylyZXR1cm4gVihHKTtqKHtieXRlc1dyaXR0ZW46VyxidWZmZXJzOlV9KX0pfSl9KX0sNTY3NDooSCxCLEwpPT57InVzZSBzdHJpY3QiO0guZXhwb3J0cz17Li4uTCg3NzQ5KSwuLi5MKDg2OTApLC4uLkwoNjQ2NCksLi4uTCg1NTkwKSwuLi5MKDE3MjAp'@;
put 'LC4uLkwoNjU3MyksLi4uTCgxMzgxKSwuLi5MKDQwMjYpLC4uLkwoNTMwKSwuLi5MKDEzMTUpLC4uLkwoOTI1NyksLi4uTCg0NTQyKX19LDY1NzM6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBLPUwoODk4MSkuZnJvbVByb21pc2UsSj1MKDcxODMpO0oub3V0cHV0SnNvbj1LKEwoMzUw'@;
put 'OCkpLEoub3V0cHV0SnNvblN5bmM9TCg5NTc4KSxKLm91dHB1dEpTT049Si5vdXRwdXRKc29uLEoub3V0cHV0SlNPTlN5bmM9Si5vdXRwdXRKc29uU3luYyxKLndyaXRlSlNPTj1KLndyaXRlSnNvbixKLndyaXRlSlNPTlN5bmM9Si53cml0ZUpzb25TeW5jLEoucmVhZEpTT049Si5yZWFkSnNv'@;
put 'bixKLnJlYWRKU09OU3luYz1KLnJlYWRKc29uU3luYyxILmV4cG9ydHM9Sn0sNzE4MzooSCxCLEwpPT57InVzZSBzdHJpY3QiO2NvbnN0IEs9TCg2ODEzKTtILmV4cG9ydHM9e3JlYWRKc29uOksucmVhZEZpbGUscmVhZEpzb25TeW5jOksucmVhZEZpbGVTeW5jLHdyaXRlSnNvbjpLLndyaXRl'@;
put 'RmlsZSx3cml0ZUpzb25TeW5jOksud3JpdGVGaWxlU3luY319LDk1Nzg6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdHtzdHJpbmdpZnk6S309TCg2NzgwKSx7b3V0cHV0RmlsZVN5bmM6Sn09TCgxMzE1KTtILmV4cG9ydHM9ZnVuY3Rpb24oSSxSLEUpe2NvbnN0IHo9SyhSLEUpO0ooSSx6'@;
put 'LEUpfX0sMzUwODooSCxCLEwpPT57InVzZSBzdHJpY3QiO2NvbnN0e3N0cmluZ2lmeTpLfT1MKDY3ODApLHtvdXRwdXRGaWxlOkp9PUwoMTMxNSk7SC5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIEk9c2UoZnVuY3Rpb24qKFIsRSx6PXt9KXtjb25zdCBqPUsoRSx6KTt5aWVsZCBKKFIsaix6KX0p'@;
put 'O3JldHVybiBmdW5jdGlvbihSLEUpe3JldHVybiBJLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCl9LDEzODE6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBLPUwoODk4MSkuZnJvbVByb21pc2Use21ha2VEaXI6SixtYWtlRGlyU3luYzpJfT1MKDgyMzMpLFI9SyhKKTtILmV4cG9ydHM9'@;
put 'e21rZGlyczpSLG1rZGlyc1N5bmM6SSxta2RpcnA6Uixta2RpcnBTeW5jOkksZW5zdXJlRGlyOlIsZW5zdXJlRGlyU3luYzpJfX0sODIzMzooSCxCLEwpPT57InVzZSBzdHJpY3QiO2NvbnN0IEs9TCg3NzQ5KSx7Y2hlY2tQYXRoOkp9PUwoMzQ2OCksST1SPT4ibnVtYmVyIj09dHlwZW9mIFI/'@;
put 'Ujp7bW9kZTo1MTEsLi4uUn0ubW9kZTtILmV4cG9ydHMubWFrZURpcj1mdW5jdGlvbigpe3ZhciBSPXNlKGZ1bmN0aW9uKihFLHope3JldHVybiBKKEUpLEsubWtkaXIoRSx7bW9kZTpJKHopLHJlY3Vyc2l2ZTohMH0pfSk7cmV0dXJuIGZ1bmN0aW9uKEUseil7cmV0dXJuIFIuYXBwbHkodGhp'@;
put 'cyxhcmd1bWVudHMpfX0oKSxILmV4cG9ydHMubWFrZURpclN5bmM9KFIsRSk9PihKKFIpLEsubWtkaXJTeW5jKFIse21vZGU6SShFKSxyZWN1cnNpdmU6ITB9KSl9LDM0Njg6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSz1MKDQxNTUpO2NvbnN0IEo9TCgyNTIwKTtILmV4cG9ydHMuY2hl'@;
put 'Y2tQYXRoPWZ1bmN0aW9uKEkpe2lmKCJ3aW4zMiI9PT1LLnBsYXRmb3JtJiYvWzw+OiJ8PypdLy50ZXN0KEkucmVwbGFjZShKLnBhcnNlKEkpLnJvb3QsIiIpKSl7Y29uc3QgUj1uZXcgRXJyb3IoYFBhdGggY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzOiAke0l9YCk7dGhyb3cgUi5jb2Rl'@;
put 'PSJFSU5WQUwiLFJ9fX0sNDAyNjooSCxCLEwpPT57InVzZSBzdHJpY3QiO0guZXhwb3J0cz17bW92ZVN5bmM6TCg2MDA2KX19LDYwMDY6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBLPUwoNzcpLEo9TCgyNTIwKSxJPUwoODY5MCkuY29weVN5bmMsUj1MKDQ1NDIpLnJlbW92ZVN5bmMs'@;
put 'RT1MKDEzODEpLm1rZGlycFN5bmMsej1MKDI3MzMpO2Z1bmN0aW9uIGooVixHLFcpe3RyeXtLLnJlbmFtZVN5bmMoVixHKX1jYXRjaChVKXtpZigiRVhERVYiIT09VS5jb2RlKXRocm93IFU7cmV0dXJuIEkocT1WLEcse292ZXJ3cml0ZTpXLGVycm9yT25FeGlzdDohMH0pLFIocSl9dmFyIHF9'@;
put 'SC5leHBvcnRzPWZ1bmN0aW9uKFYsRyxXKXtjb25zdCBVPShXPVd8fHt9KS5vdmVyd3JpdGV8fFcuY2xvYmJlcnx8ITEse3NyY1N0YXQ6cSxpc0NoYW5naW5nQ2FzZTp0ZT0hMX09ei5jaGVja1BhdGhzU3luYyhWLEcsIm1vdmUiLFcpO3JldHVybiB6LmNoZWNrUGFyZW50UGF0aHNTeW5jKFYs'@;
put 'cSxHLCJtb3ZlIiksZnVuY3Rpb24obmUpe2NvbnN0IGllPUouZGlybmFtZShuZSk7cmV0dXJuIEoucGFyc2UoaWUpLnJvb3Q9PT1pZX0oRyl8fEUoSi5kaXJuYW1lKEcpKSxmdW5jdGlvbihuZSxpZSxsZSxkZSl7aWYoZGUpcmV0dXJuIGoobmUsaWUsbGUpO2lmKGxlKXJldHVybiBSKGllKSxq'@;
put 'KG5lLGllLGxlKTtpZihLLmV4aXN0c1N5bmMoaWUpKXRocm93IG5ldyBFcnJvcigiZGVzdCBhbHJlYWR5IGV4aXN0cy4iKTtyZXR1cm4gaihuZSxpZSxsZSl9KFYsRyxVLHRlKX19LDUzMDooSCxCLEwpPT57InVzZSBzdHJpY3QiO2NvbnN0IEs9TCg4OTgxKS5mcm9tQ2FsbGJhY2s7SC5leHBv'@;
put 'cnRzPXttb3ZlOksoTCg0MzYpKX19LDQzNjooSCxCLEwpPT57InVzZSBzdHJpY3QiO2NvbnN0IEs9TCg3NyksSj1MKDI1MjApLEk9TCg2NDY0KS5jb3B5LFI9TCg0NTQyKS5yZW1vdmUsRT1MKDEzODEpLm1rZGlycCx6PUwoOTI1NykucGF0aEV4aXN0cyxqPUwoMjczMyk7ZnVuY3Rpb24gVihX'@;
put 'LFUscSx0ZSxuZSl7cmV0dXJuIHRlP0coVyxVLHEsbmUpOnE/UihVLGllPT5pZT9uZShpZSk6RyhXLFUscSxuZSkpOnZvaWQgeihVLChpZSxsZSk9PmllP25lKGllKTpsZT9uZShuZXcgRXJyb3IoImRlc3QgYWxyZWFkeSBleGlzdHMuIikpOkcoVyxVLHEsbmUpKX1mdW5jdGlvbiBHKFcsVSxx'@;
put 'LHRlKXtLLnJlbmFtZShXLFUsbmU9PntyZXR1cm4gbmU/IkVYREVWIiE9PW5lLmNvZGU/dGUobmUpOih1ZT10ZSx2b2lkIEkoaWU9VyxVLHtvdmVyd3JpdGU6cSxlcnJvck9uRXhpc3Q6ITB9LFk9Plk/dWUoWSk6UihpZSx1ZSkpKTp0ZSgpO3ZhciBpZSx1ZX0pfUguZXhwb3J0cz1mdW5jdGlv'@;
put 'bihXLFUscSx0ZSl7ImZ1bmN0aW9uIj09dHlwZW9mIHEmJih0ZT1xLHE9e30pO2NvbnN0IG5lPXEub3ZlcndyaXRlfHxxLmNsb2JiZXJ8fCExO2ouY2hlY2tQYXRocyhXLFUsIm1vdmUiLHEsKGllLGxlKT0+e2lmKGllKXJldHVybiB0ZShpZSk7Y29uc3R7c3JjU3RhdDpkZSxpc0NoYW5naW5n'@;
put 'Q2FzZTp1ZT0hMX09bGU7ai5jaGVja1BhcmVudFBhdGhzKFcsZGUsVSwibW92ZSIsY2U9PmNlP3RlKGNlKTpmdW5jdGlvbihZKXtjb25zdCBiPUouZGlybmFtZShZKTtyZXR1cm4gSi5wYXJzZShiKS5yb290PT09Yn0oVSk/VihXLFUsbmUsdWUsdGUpOnZvaWQgRShKLmRpcm5hbWUoVSksWT0+'@;
put 'WT90ZShZKTpWKFcsVSxuZSx1ZSx0ZSkpKX0pfX0sMTMxNTooSCxCLEwpPT57InVzZSBzdHJpY3QiO2NvbnN0IEs9TCg4OTgxKS5mcm9tQ2FsbGJhY2ssSj1MKDc3KSxJPUwoMjUyMCksUj1MKDEzODEpLEU9TCg5MjU3KS5wYXRoRXhpc3RzO0guZXhwb3J0cz17b3V0cHV0RmlsZTpLKGZ1bmN0'@;
put 'aW9uKHosaixWLEcpeyJmdW5jdGlvbiI9PXR5cGVvZiBWJiYoRz1WLFY9InV0ZjgiKTtjb25zdCBXPUkuZGlybmFtZSh6KTtFKFcsKFUscSk9PlU/RyhVKTpxP0oud3JpdGVGaWxlKHosaixWLEcpOnZvaWQgUi5ta2RpcnMoVyx0ZT0+e2lmKHRlKXJldHVybiBHKHRlKTtKLndyaXRlRmlsZSh6'@;
put 'LGosVixHKX0pKX0pLG91dHB1dEZpbGVTeW5jOmZ1bmN0aW9uKHosLi4uail7Y29uc3QgVj1JLmRpcm5hbWUoeik7aWYoSi5leGlzdHNTeW5jKFYpKXJldHVybiBKLndyaXRlRmlsZVN5bmMoeiwuLi5qKTtSLm1rZGlyc1N5bmMoViksSi53cml0ZUZpbGVTeW5jKHosLi4uail9fX0sOTI1Nzoo'@;
put 'SCxCLEwpPT57InVzZSBzdHJpY3QiO2NvbnN0IEs9TCg4OTgxKS5mcm9tUHJvbWlzZSxKPUwoNzc0OSk7SC5leHBvcnRzPXtwYXRoRXhpc3RzOksoZnVuY3Rpb24oSSl7cmV0dXJuIEouYWNjZXNzKEkpLnRoZW4oKCk9PiEwKS5jYXRjaCgoKT0+ITEpfSkscGF0aEV4aXN0c1N5bmM6Si5leGlz'@;
put 'dHNTeW5jfX0sNDU0MjooSCxCLEwpPT57InVzZSBzdHJpY3QiO2NvbnN0IEs9TCg3NyksSj1MKDg5ODEpLmZyb21DYWxsYmFjayxJPUwoMzQ1Nik7SC5leHBvcnRzPXtyZW1vdmU6SihmdW5jdGlvbihSLEUpe2lmKEsucm0pcmV0dXJuIEsucm0oUix7cmVjdXJzaXZlOiEwLGZvcmNlOiEwfSxF'@;
put 'KTtJKFIsRSl9KSxyZW1vdmVTeW5jOmZ1bmN0aW9uKFIpe2lmKEsucm1TeW5jKXJldHVybiBLLnJtU3luYyhSLHtyZWN1cnNpdmU6ITAsZm9yY2U6ITB9KTtJLnN5bmMoUil9fX0sMzQ1NjooSCxCLEwpPT57InVzZSBzdHJpY3QiO3ZhciBLPUwoNDE1NSk7Y29uc3QgSj1MKDc3KSxJPUwoMjUy'@;
put 'MCksUj1MKDkyODIpLEU9IndpbjMyIj09PUsucGxhdGZvcm07ZnVuY3Rpb24geihuZSl7WyJ1bmxpbmsiLCJjaG1vZCIsInN0YXQiLCJsc3RhdCIsInJtZGlyIiwicmVhZGRpciJdLmZvckVhY2goaWU9PntuZVtpZV09bmVbaWVdfHxKW2llXSxuZVtpZSs9IlN5bmMiXT1uZVtpZV18fEpbaWVd'@;
put 'fSksbmUubWF4QnVzeVRyaWVzPW5lLm1heEJ1c3lUcmllc3x8M31mdW5jdGlvbiBqKG5lLGllLGxlKXtsZXQgZGU9MDsiZnVuY3Rpb24iPT10eXBlb2YgaWUmJihsZT1pZSxpZT17fSksUihuZSwicmltcmFmOiBtaXNzaW5nIHBhdGgiKSxSLnN0cmljdEVxdWFsKHR5cGVvZiBuZSwic3RyaW5n'@;
put 'IiwicmltcmFmOiBwYXRoIHNob3VsZCBiZSBhIHN0cmluZyIpLFIuc3RyaWN0RXF1YWwodHlwZW9mIGxlLCJmdW5jdGlvbiIsInJpbXJhZjogY2FsbGJhY2sgZnVuY3Rpb24gcmVxdWlyZWQiKSxSKGllLCJyaW1yYWY6IGludmFsaWQgb3B0aW9ucyBhcmd1bWVudCBwcm92aWRlZCIpLFIuc3Ry'@;
put 'aWN0RXF1YWwodHlwZW9mIGllLCJvYmplY3QiLCJyaW1yYWY6IG9wdGlvbnMgc2hvdWxkIGJlIG9iamVjdCIpLHooaWUpLFYobmUsaWUsZnVuY3Rpb24gdWUoY2Upe2lmKGNlKXtpZigoIkVCVVNZIj09PWNlLmNvZGV8fCJFTk9URU1QVFkiPT09Y2UuY29kZXx8IkVQRVJNIj09PWNlLmNvZGUp'@;
put 'JiZkZTxpZS5tYXhCdXN5VHJpZXMpcmV0dXJuIGRlKyssc2V0VGltZW91dCgoKT0+VihuZSxpZSx1ZSksMTAwKmRlKTsiRU5PRU5UIj09PWNlLmNvZGUmJihjZT1udWxsKX1sZShjZSl9KX1mdW5jdGlvbiBWKG5lLGllLGxlKXtSKG5lKSxSKGllKSxSKCJmdW5jdGlvbiI9PXR5cGVvZiBsZSks'@;
put 'aWUubHN0YXQobmUsKGRlLHVlKT0+ZGUmJiJFTk9FTlQiPT09ZGUuY29kZT9sZShudWxsKTpkZSYmIkVQRVJNIj09PWRlLmNvZGUmJkU/RyhuZSxpZSxkZSxsZSk6dWUmJnVlLmlzRGlyZWN0b3J5KCk/VShuZSxpZSxkZSxsZSk6dm9pZCBpZS51bmxpbmsobmUsY2U9PntpZihjZSl7aWYoIkVO'@;
put 'T0VOVCI9PT1jZS5jb2RlKXJldHVybiBsZShudWxsKTtpZigiRVBFUk0iPT09Y2UuY29kZSlyZXR1cm4gRT9HKG5lLGllLGNlLGxlKTpVKG5lLGllLGNlLGxlKTtpZigiRUlTRElSIj09PWNlLmNvZGUpcmV0dXJuIFUobmUsaWUsY2UsbGUpfXJldHVybiBsZShjZSl9KSl9ZnVuY3Rpb24gRyhu'@;
put 'ZSxpZSxsZSxkZSl7UihuZSksUihpZSksUigiZnVuY3Rpb24iPT10eXBlb2YgZGUpLGllLmNobW9kKG5lLDQzOCx1ZT0+e3VlP2RlKCJFTk9FTlQiPT09dWUuY29kZT9udWxsOmxlKTppZS5zdGF0KG5lLChjZSxZKT0+e2NlP2RlKCJFTk9FTlQiPT09Y2UuY29kZT9udWxsOmxlKTpZLmlzRGly'@;
put 'ZWN0b3J5KCk/VShuZSxpZSxsZSxkZSk6aWUudW5saW5rKG5lLGRlKX0pfSl9ZnVuY3Rpb24gVyhuZSxpZSxsZSl7bGV0IGRlO1IobmUpLFIoaWUpO3RyeXtpZS5jaG1vZFN5bmMobmUsNDM4KX1jYXRjaCh1ZSl7aWYoIkVOT0VOVCI9PT11ZS5jb2RlKXJldHVybjt0aHJvdyBsZX10cnl7ZGU9'@;
put 'aWUuc3RhdFN5bmMobmUpfWNhdGNoKHVlKXtpZigiRU5PRU5UIj09PXVlLmNvZGUpcmV0dXJuO3Rocm93IGxlfWRlLmlzRGlyZWN0b3J5KCk/dGUobmUsaWUsbGUpOmllLnVubGlua1N5bmMobmUpfWZ1bmN0aW9uIFUobmUsaWUsbGUsZGUpe1IobmUpLFIoaWUpLFIoImZ1bmN0aW9uIj09dHlw'@;
put 'ZW9mIGRlKSxpZS5ybWRpcihuZSx1ZT0+e3ZhciBjZSxZLGI7IXVlfHwiRU5PVEVNUFRZIiE9PXVlLmNvZGUmJiJFRVhJU1QiIT09dWUuY29kZSYmIkVQRVJNIiE9PXVlLmNvZGU/ZGUodWUmJiJFTk9URElSIj09PXVlLmNvZGU/bGU6dWUpOihZPWllLGI9ZGUsUihjZT1uZSksUihZKSxSKCJm'@;
put 'dW5jdGlvbiI9PXR5cGVvZiBiKSxZLnJlYWRkaXIoY2UsKHgsTik9PntpZih4KXJldHVybiBiKHgpO2xldCBGLGc9Ti5sZW5ndGg7aWYoMD09PWcpcmV0dXJuIFkucm1kaXIoY2UsYik7Ti5mb3JFYWNoKEM9PntqKEkuam9pbihjZSxDKSxZLE09PntpZighRilyZXR1cm4gTT9iKEY9TSk6dm9p'@;
put 'ZCgwPT0tLWcmJlkucm1kaXIoY2UsYikpfSl9KX0pKX0pfWZ1bmN0aW9uIHEobmUsaWUpe2xldCBsZTt6KGllPWllfHx7fSksUihuZSwicmltcmFmOiBtaXNzaW5nIHBhdGgiKSxSLnN0cmljdEVxdWFsKHR5cGVvZiBuZSwic3RyaW5nIiwicmltcmFmOiBwYXRoIHNob3VsZCBiZSBhIHN0cmlu'@;
put 'ZyIpLFIoaWUsInJpbXJhZjogbWlzc2luZyBvcHRpb25zIiksUi5zdHJpY3RFcXVhbCh0eXBlb2YgaWUsIm9iamVjdCIsInJpbXJhZjogb3B0aW9ucyBzaG91bGQgYmUgb2JqZWN0Iik7dHJ5e2xlPWllLmxzdGF0U3luYyhuZSl9Y2F0Y2goZGUpe2lmKCJFTk9FTlQiPT09ZGUuY29kZSlyZXR1'@;
put 'cm47IkVQRVJNIj09PWRlLmNvZGUmJkUmJlcobmUsaWUsZGUpfXRyeXtsZSYmbGUuaXNEaXJlY3RvcnkoKT90ZShuZSxpZSxudWxsKTppZS51bmxpbmtTeW5jKG5lKX1jYXRjaChkZSl7aWYoIkVOT0VOVCI9PT1kZS5jb2RlKXJldHVybjtpZigiRVBFUk0iPT09ZGUuY29kZSlyZXR1cm4gRT9X'@;
put 'KG5lLGllLGRlKTp0ZShuZSxpZSxkZSk7aWYoIkVJU0RJUiIhPT1kZS5jb2RlKXRocm93IGRlO3RlKG5lLGllLGRlKX19ZnVuY3Rpb24gdGUobmUsaWUsbGUpe1IobmUpLFIoaWUpO3RyeXtpZS5ybWRpclN5bmMobmUpfWNhdGNoKGRlKXtpZigiRU5PVERJUiI9PT1kZS5jb2RlKXRocm93IGxl'@;
put 'O2lmKCJFTk9URU1QVFkiPT09ZGUuY29kZXx8IkVFWElTVCI9PT1kZS5jb2RlfHwiRVBFUk0iPT09ZGUuY29kZSkhZnVuY3Rpb24odWUsY2Upe2lmKFIodWUpLFIoY2UpLGNlLnJlYWRkaXJTeW5jKHVlKS5mb3JFYWNoKFk9PnEoSS5qb2luKHVlLFkpLGNlKSksIUUpcmV0dXJuIGNlLnJtZGly'@;
put 'U3luYyh1ZSxjZSk7e2NvbnN0IFk9RGF0ZS5ub3coKTtkb3t0cnl7cmV0dXJuIGNlLnJtZGlyU3luYyh1ZSxjZSl9Y2F0Y2h7fX13aGlsZShEYXRlLm5vdygpLVk8NTAwKX19KG5lLGllKTtlbHNlIGlmKCJFTk9FTlQiIT09ZGUuY29kZSl0aHJvdyBkZX19SC5leHBvcnRzPWosai5zeW5jPXF9'@;
put 'LDI3MzM6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBLPUwoNzc0OSksSj1MKDI1MjApLEk9TCg5NTM5KTtmdW5jdGlvbiBSKFYsRyxXKXtjb25zdCBVPVcuZGVyZWZlcmVuY2U/cT0+Sy5zdGF0KHEse2JpZ2ludDohMH0pOnE9PksubHN0YXQocSx7YmlnaW50OiEwfSk7cmV0dXJuIFBy'@;
put 'b21pc2UuYWxsKFtVKFYpLFUoRykuY2F0Y2gocT0+e2lmKCJFTk9FTlQiPT09cS5jb2RlKXJldHVybiBudWxsO3Rocm93IHF9KV0pLnRoZW4oKFtxLHRlXSk9Pih7c3JjU3RhdDpxLGRlc3RTdGF0OnRlfSkpfWZ1bmN0aW9uIEUoVixHKXtyZXR1cm4gRy5pbm8mJkcuZGV2JiZHLmlubz09PVYu'@;
put 'aW5vJiZHLmRldj09PVYuZGV2fWZ1bmN0aW9uIHooVixHKXtjb25zdCBXPUoucmVzb2x2ZShWKS5zcGxpdChKLnNlcCkuZmlsdGVyKHE9PnEpLFU9Si5yZXNvbHZlKEcpLnNwbGl0KEouc2VwKS5maWx0ZXIocT0+cSk7cmV0dXJuIFcucmVkdWNlKChxLHRlLG5lKT0+cSYmVVtuZV09PT10ZSwh'@;
put 'MCl9ZnVuY3Rpb24gaihWLEcsVyl7cmV0dXJuYENhbm5vdCAke1d9ICcke1Z9JyB0byBhIHN1YmRpcmVjdG9yeSBvZiBpdHNlbGYsICcke0d9Jy5gfUguZXhwb3J0cz17Y2hlY2tQYXRoczpmdW5jdGlvbihWLEcsVyxVLHEpe0kuY2FsbGJhY2tpZnkoUikoVixHLFUsKHRlLG5lKT0+e2lmKHRl'@;
put 'KXJldHVybiBxKHRlKTtjb25zdHtzcmNTdGF0OmllLGRlc3RTdGF0OmxlfT1uZTtpZihsZSl7aWYoRShpZSxsZSkpe2NvbnN0IGRlPUouYmFzZW5hbWUoViksdWU9Si5iYXNlbmFtZShHKTtyZXR1cm4ibW92ZSI9PT1XJiZkZSE9PXVlJiZkZS50b0xvd2VyQ2FzZSgpPT09dWUudG9Mb3dlckNh'@;
put 'c2UoKT9xKG51bGwse3NyY1N0YXQ6aWUsZGVzdFN0YXQ6bGUsaXNDaGFuZ2luZ0Nhc2U6ITB9KTpxKG5ldyBFcnJvcigiU291cmNlIGFuZCBkZXN0aW5hdGlvbiBtdXN0IG5vdCBiZSB0aGUgc2FtZS4iKSl9aWYoaWUuaXNEaXJlY3RvcnkoKSYmIWxlLmlzRGlyZWN0b3J5KCkpcmV0dXJuIHEo'@;
put 'bmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlIG5vbi1kaXJlY3RvcnkgJyR7R30nIHdpdGggZGlyZWN0b3J5ICcke1Z9Jy5gKSk7aWYoIWllLmlzRGlyZWN0b3J5KCkmJmxlLmlzRGlyZWN0b3J5KCkpcmV0dXJuIHEobmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlIGRpcmVjdG9yeSAnJHtH'@;
put 'fScgd2l0aCBub24tZGlyZWN0b3J5ICcke1Z9Jy5gKSl9cmV0dXJuIGllLmlzRGlyZWN0b3J5KCkmJnooVixHKT9xKG5ldyBFcnJvcihqKFYsRyxXKSkpOnEobnVsbCx7c3JjU3RhdDppZSxkZXN0U3RhdDpsZX0pfSl9LGNoZWNrUGF0aHNTeW5jOmZ1bmN0aW9uKFYsRyxXLFUpe2NvbnN0e3Ny'@;
put 'Y1N0YXQ6cSxkZXN0U3RhdDp0ZX09ZnVuY3Rpb24obmUsaWUsbGUpe2xldCBkZTtjb25zdCB1ZT1sZS5kZXJlZmVyZW5jZT9ZPT5LLnN0YXRTeW5jKFkse2JpZ2ludDohMH0pOlk9PksubHN0YXRTeW5jKFkse2JpZ2ludDohMH0pLGNlPXVlKG5lKTt0cnl7ZGU9dWUoaWUpfWNhdGNoKFkpe2lm'@;
put 'KCJFTk9FTlQiPT09WS5jb2RlKXJldHVybntzcmNTdGF0OmNlLGRlc3RTdGF0Om51bGx9O3Rocm93IFl9cmV0dXJue3NyY1N0YXQ6Y2UsZGVzdFN0YXQ6ZGV9fShWLEcsVSk7aWYodGUpe2lmKEUocSx0ZSkpe2NvbnN0IG5lPUouYmFzZW5hbWUoViksaWU9Si5iYXNlbmFtZShHKTtpZigibW92'@;
put 'ZSI9PT1XJiZuZSE9PWllJiZuZS50b0xvd2VyQ2FzZSgpPT09aWUudG9Mb3dlckNhc2UoKSlyZXR1cm57c3JjU3RhdDpxLGRlc3RTdGF0OnRlLGlzQ2hhbmdpbmdDYXNlOiEwfTt0aHJvdyBuZXcgRXJyb3IoIlNvdXJjZSBhbmQgZGVzdGluYXRpb24gbXVzdCBub3QgYmUgdGhlIHNhbWUuIil9'@;
put 'aWYocS5pc0RpcmVjdG9yeSgpJiYhdGUuaXNEaXJlY3RvcnkoKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgbm9uLWRpcmVjdG9yeSAnJHtHfScgd2l0aCBkaXJlY3RvcnkgJyR7Vn0nLmApO2lmKCFxLmlzRGlyZWN0b3J5KCkmJnRlLmlzRGlyZWN0b3J5KCkpdGhyb3cgbmV3'@;
put 'IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlIGRpcmVjdG9yeSAnJHtHfScgd2l0aCBub24tZGlyZWN0b3J5ICcke1Z9Jy5gKX1pZihxLmlzRGlyZWN0b3J5KCkmJnooVixHKSl0aHJvdyBuZXcgRXJyb3IoaihWLEcsVykpO3JldHVybntzcmNTdGF0OnEsZGVzdFN0YXQ6dGV9fSxjaGVja1BhcmVu'@;
put 'dFBhdGhzOmZ1bmN0aW9uIFYoRyxXLFUscSx0ZSl7Y29uc3QgbmU9Si5yZXNvbHZlKEouZGlybmFtZShHKSksaWU9Si5yZXNvbHZlKEouZGlybmFtZShVKSk7aWYoaWU9PT1uZXx8aWU9PT1KLnBhcnNlKGllKS5yb290KXJldHVybiB0ZSgpO0suc3RhdChpZSx7YmlnaW50OiEwfSwobGUsZGUp'@;
put 'PT5sZT8iRU5PRU5UIj09PWxlLmNvZGU/dGUoKTp0ZShsZSk6RShXLGRlKT90ZShuZXcgRXJyb3IoaihHLFUscSkpKTpWKEcsVyxpZSxxLHRlKSl9LGNoZWNrUGFyZW50UGF0aHNTeW5jOmZ1bmN0aW9uIFYoRyxXLFUscSl7Y29uc3QgdGU9Si5yZXNvbHZlKEouZGlybmFtZShHKSksbmU9Si5y'@;
put 'ZXNvbHZlKEouZGlybmFtZShVKSk7aWYobmU9PT10ZXx8bmU9PT1KLnBhcnNlKG5lKS5yb290KXJldHVybjtsZXQgaWU7dHJ5e2llPUsuc3RhdFN5bmMobmUse2JpZ2ludDohMH0pfWNhdGNoKGxlKXtpZigiRU5PRU5UIj09PWxlLmNvZGUpcmV0dXJuO3Rocm93IGxlfWlmKEUoVyxpZSkpdGhy'@;
put 'b3cgbmV3IEVycm9yKGooRyxVLHEpKTtyZXR1cm4gVihHLFcsbmUscSl9LGlzU3JjU3ViZGlyOnosYXJlSWRlbnRpY2FsOkV9fSwzMTg6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBLPUwoNzcpO0guZXhwb3J0cz17dXRpbWVzTWlsbGlzOmZ1bmN0aW9uKEosSSxSLEUpe0sub3BlbihK'@;
put 'LCJyKyIsKHosaik9PntpZih6KXJldHVybiBFKHopO0suZnV0aW1lcyhqLEksUixWPT57Sy5jbG9zZShqLEc9PntFJiZFKFZ8fEcpfSl9KX0pfSx1dGltZXNNaWxsaXNTeW5jOmZ1bmN0aW9uKEosSSxSKXtjb25zdCBFPUsub3BlblN5bmMoSiwicisiKTtyZXR1cm4gSy5mdXRpbWVzU3luYyhF'@;
put 'LEksUiksSy5jbG9zZVN5bmMoRSl9fX0sNzMzNDooSCxCLEwpPT57dmFyIEs9TCg0MTU1KTtILmV4cG9ydHM9RyxHLnJlYWxwYXRoPUcsRy5zeW5jPVcsRy5yZWFscGF0aFN5bmM9VyxHLm1vbmtleXBhdGNoPWZ1bmN0aW9uKCl7Si5yZWFscGF0aD1HLEoucmVhbHBhdGhTeW5jPVd9LEcudW5t'@;
put 'b25rZXlwYXRjaD1mdW5jdGlvbigpe0oucmVhbHBhdGg9SSxKLnJlYWxwYXRoU3luYz1SfTt2YXIgSj1MKDI1MzUpLEk9Si5yZWFscGF0aCxSPUoucmVhbHBhdGhTeW5jLHo9L152WzAtNV1cLi8udGVzdChLLnZlcnNpb24pLGo9TCg3MDU5KTtmdW5jdGlvbiBWKFUpe3JldHVybiBVJiYicmVh'@;
put 'bHBhdGgiPT09VS5zeXNjYWxsJiYoIkVMT09QIj09PVUuY29kZXx8IkVOT01FTSI9PT1VLmNvZGV8fCJFTkFNRVRPT0xPTkciPT09VS5jb2RlKX1mdW5jdGlvbiBHKFUscSx0ZSl7aWYoeilyZXR1cm4gSShVLHEsdGUpOyJmdW5jdGlvbiI9PXR5cGVvZiBxJiYodGU9cSxxPW51bGwpLEkoVSxx'@;
put 'LGZ1bmN0aW9uKG5lLGllKXtWKG5lKT9qLnJlYWxwYXRoKFUscSx0ZSk6dGUobmUsaWUpfSl9ZnVuY3Rpb24gVyhVLHEpe2lmKHopcmV0dXJuIFIoVSxxKTt0cnl7cmV0dXJuIFIoVSxxKX1jYXRjaCh0ZSl7aWYoVih0ZSkpcmV0dXJuIGoucmVhbHBhdGhTeW5jKFUscSk7dGhyb3cgdGV9fX0s'@;
put 'NzA1OTooSCxCLEwpPT57dmFyIEs9TCg0MTU1KSxKPUwoNTEwOCksST1MKDI1MjApLFI9IndpbjMyIj09PUsucGxhdGZvcm0sRT1MKDI1MzUpLHo9Sy5lbnYuTk9ERV9ERUJVRyYmL2ZzLy50ZXN0KEsuZW52Lk5PREVfREVCVUcpO2lmKFIpdmFyIFY9LyguKj8pKD86W1wvXFxdK3wkKS9nO2Vs'@;
put 'c2UgVj0vKC4qPykoPzpbXC9dK3wkKS9nO2lmKFIpdmFyIEc9L14oPzpbYS16QS1aXTp8W1xcXC9dezJ9W15cXFwvXStbXFxcL11bXlxcXC9dKyk/W1xcXC9dKi87ZWxzZSBHPS9eW1wvXSovO0IucmVhbHBhdGhTeW5jPWZ1bmN0aW9uKFcsVSl7aWYoVz1JLnJlc29sdmUoVyksVSYmT2JqZWN0'@;
put 'LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFUsVykpcmV0dXJuIFVbV107dmFyIHEsdGUsbmUsaWUsbGU9VyxkZT17fSx1ZT17fTtmdW5jdGlvbiBjZSgpe3ZhciBnPUcuZXhlYyhXKTtxPWdbMF0ubGVuZ3RoLHRlPWdbMF0sbmU9Z1swXSxpZT0iIixSJiYhdWVbbmVdJiYoRS5sc3Rh'@;
put 'dFN5bmMobmUpLHVlW25lXT0hMCl9Zm9yKGNlKCk7cTxXLmxlbmd0aDspe1YubGFzdEluZGV4PXE7dmFyIFk9Vi5leGVjKFcpO2lmKGllPXRlLHRlKz1ZWzBdLHE9Vi5sYXN0SW5kZXgsISh1ZVtuZT1pZStZWzFdXXx8VSYmVVtuZV09PT1uZSkpe3ZhciBiO2lmKFUmJk9iamVjdC5wcm90b3R5'@;
put 'cGUuaGFzT3duUHJvcGVydHkuY2FsbChVLG5lKSliPVVbbmVdO2Vsc2V7dmFyIHg9RS5sc3RhdFN5bmMobmUpO2lmKCF4LmlzU3ltYm9saWNMaW5rKCkpe3VlW25lXT0hMCxVJiYoVVtuZV09bmUpO2NvbnRpbnVlfXZhciBOPW51bGw7aWYoIVIpe3ZhciBGPXguZGV2LnRvU3RyaW5nKDMyKSsi'@;
put 'OiIreC5pbm8udG9TdHJpbmcoMzIpO2RlLmhhc093blByb3BlcnR5KEYpJiYoTj1kZVtGXSl9bnVsbD09PU4mJihFLnN0YXRTeW5jKG5lKSxOPUUucmVhZGxpbmtTeW5jKG5lKSksYj1JLnJlc29sdmUoaWUsTiksVSYmKFVbbmVdPWIpLFJ8fChkZVtGXT1OKX1XPUkucmVzb2x2ZShiLFcuc2xp'@;
put 'Y2UocSkpLGNlKCl9fXJldHVybiBVJiYoVVtsZV09VyksV30sQi5yZWFscGF0aD1mdW5jdGlvbihXLFUscSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHEmJihxPWZ1bmN0aW9uIGooVyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFc/VzpmdW5jdGlvbigpe3ZhciBVO2lmKHope3ZhciBxPW5l'@;
put 'dyBFcnJvcjtVPWZ1bmN0aW9uKG5lKXtuZSYmKHEubWVzc2FnZT1uZS5tZXNzYWdlLHRlKG5lPXEpKX19ZWxzZSBVPXRlO3JldHVybiBVO2Z1bmN0aW9uIHRlKG5lKXtpZihuZSl7aWYoSy50aHJvd0RlcHJlY2F0aW9uKXRocm93IG5lO2lmKCFLLm5vRGVwcmVjYXRpb24pe3ZhciBpZT0iZnM6'@;
put 'IG1pc3NpbmcgY2FsbGJhY2sgIisobmUuc3RhY2t8fG5lLm1lc3NhZ2UpO0sudHJhY2VEZXByZWNhdGlvbj9KLnRyYWNlKGllKTpKLmVycm9yKGllKX19fX0oKX0oVSksVT1udWxsKSxXPUkucmVzb2x2ZShXKSxVJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVSxXKSly'@;
put 'ZXR1cm4gSy5uZXh0VGljayhxLmJpbmQobnVsbCxudWxsLFVbV10pKTt2YXIgdGUsbmUsaWUsbGUsZGU9Vyx1ZT17fSxjZT17fTtmdW5jdGlvbiBZKCl7dmFyIGc9Ry5leGVjKFcpO3RlPWdbMF0ubGVuZ3RoLG5lPWdbMF0saWU9Z1swXSxsZT0iIixSJiYhY2VbaWVdP0UubHN0YXQoaWUsZnVu'@;
put 'Y3Rpb24oQyl7aWYoQylyZXR1cm4gcShDKTtjZVtpZV09ITAsYigpfSk6Sy5uZXh0VGljayhiKX1mdW5jdGlvbiBiKCl7aWYodGU+PVcubGVuZ3RoKXJldHVybiBVJiYoVVtkZV09VykscShudWxsLFcpO1YubGFzdEluZGV4PXRlO3ZhciBnPVYuZXhlYyhXKTtyZXR1cm4gbGU9bmUsbmUrPWdb'@;
put 'MF0sdGU9Vi5sYXN0SW5kZXgsY2VbaWU9bGUrZ1sxXV18fFUmJlVbaWVdPT09aWU/Sy5uZXh0VGljayhiKTpVJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVSxpZSk/RihVW2llXSk6RS5sc3RhdChpZSx4KX1mdW5jdGlvbiB4KGcsQyl7aWYoZylyZXR1cm4gcShnKTtp'@;
put 'ZighQy5pc1N5bWJvbGljTGluaygpKXJldHVybiBjZVtpZV09ITAsVSYmKFVbaWVdPWllKSxLLm5leHRUaWNrKGIpO2lmKCFSKXt2YXIgTT1DLmRldi50b1N0cmluZygzMikrIjoiK0MuaW5vLnRvU3RyaW5nKDMyKTtpZih1ZS5oYXNPd25Qcm9wZXJ0eShNKSlyZXR1cm4gTihudWxsLHVlW01d'@;
put 'LGllKX1FLnN0YXQoaWUsZnVuY3Rpb24oeSl7aWYoeSlyZXR1cm4gcSh5KTtFLnJlYWRsaW5rKGllLGZ1bmN0aW9uKHAsUyl7Unx8KHVlW01dPVMpLE4ocCxTKX0pfSl9ZnVuY3Rpb24gTihnLEMsTSl7aWYoZylyZXR1cm4gcShnKTt2YXIgeT1JLnJlc29sdmUobGUsQyk7VSYmKFVbTV09eSks'@;
put 'Rih5KX1mdW5jdGlvbiBGKGcpe1c9SS5yZXNvbHZlKGcsVy5zbGljZSh0ZSkpLFkoKX1ZKCl9fSw3NjQ4Okg9PnsidXNlIHN0cmljdCI7dmFyIEI9QXJyYXkucHJvdG90eXBlLnNsaWNlLEw9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztILmV4cG9ydHM9ZnVuY3Rpb24oSyl7dmFyIEo9dGhp'@;
put 'cztpZigiZnVuY3Rpb24iIT10eXBlb2YgSnx8IltvYmplY3QgRnVuY3Rpb25dIiE9PUwuY2FsbChKKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICIrSik7Zm9yKHZhciBJLFI9Qi5jYWxsKGFyZ3VtZW50cywxKSxF'@;
put 'PU1hdGgubWF4KDAsSi5sZW5ndGgtUi5sZW5ndGgpLHo9W10saj0wO2o8RTtqKyspei5wdXNoKCIkIitqKTtpZihJPUZ1bmN0aW9uKCJiaW5kZXIiLCJyZXR1cm4gZnVuY3Rpb24gKCIrei5qb2luKCIsIikrIil7IHJldHVybiBiaW5kZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpOyB9IikoZnVu'@;
put 'Y3Rpb24oKXtpZih0aGlzIGluc3RhbmNlb2YgSSl7dmFyIEc9Si5hcHBseSh0aGlzLFIuY29uY2F0KEIuY2FsbChhcmd1bWVudHMpKSk7cmV0dXJuIE9iamVjdChHKT09PUc/Rzp0aGlzfXJldHVybiBKLmFwcGx5KEssUi5jb25jYXQoQi5jYWxsKGFyZ3VtZW50cykpKX0pLEoucHJvdG90eXBl'@;
put 'KXt2YXIgVj1mdW5jdGlvbigpe307Vi5wcm90b3R5cGU9Si5wcm90b3R5cGUsSS5wcm90b3R5cGU9bmV3IFYsVi5wcm90b3R5cGU9bnVsbH1yZXR1cm4gSX19LDg2MTI6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSz1MKDc2NDgpO0guZXhwb3J0cz1GdW5jdGlvbi5wcm90b3R5cGUuYmlu'@;
put 'ZHx8S30sMjEwOihILEIsTCk9PnsidXNlIHN0cmljdCI7dmFyIEssSj1TeW50YXhFcnJvcixJPUZ1bmN0aW9uLFI9VHlwZUVycm9yLEU9ZnVuY3Rpb24oTSl7dHJ5e3JldHVybiBJKCcidXNlIHN0cmljdCI7IHJldHVybiAoJytNKyIpLmNvbnN0cnVjdG9yOyIpKCl9Y2F0Y2h7fX0sej1PYmpl'@;
put 'Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO2lmKHopdHJ5e3ooe30sIiIpfWNhdGNoe3o9bnVsbH12YXIgaj1mdW5jdGlvbigpe3Rocm93IG5ldyBSfSxWPXo/ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIGp9Y2F0Y2h7dHJ5e3JldHVybiB6KGFyZ3VtZW50cywiY2FsbGVlIikuZ2V0fWNhdGNo'@;
put 'e3JldHVybiBqfX19KCk6aixHPUwoMTQwNSkoKSxXPU9iamVjdC5nZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oTSl7cmV0dXJuIE0uX19wcm90b19ffSxVPXt9LHE9dHlwZW9mIFVpbnQ4QXJyYXk+InUiP0s6VyhVaW50OEFycmF5KSx0ZT17IiVBZ2dyZWdhdGVFcnJvciUiOnR5cGVvZiBBZ2dy'@;
put 'ZWdhdGVFcnJvcj4idSI/SzpBZ2dyZWdhdGVFcnJvciwiJUFycmF5JSI6QXJyYXksIiVBcnJheUJ1ZmZlciUiOnR5cGVvZiBBcnJheUJ1ZmZlcj4idSI/SzpBcnJheUJ1ZmZlciwiJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlIjpHP1coW11bU3ltYm9sLml0ZXJhdG9yXSgpKTpLLCIlQXN5bmNG'@;
put 'cm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlJSI6SywiJUFzeW5jRnVuY3Rpb24lIjpVLCIlQXN5bmNHZW5lcmF0b3IlIjpVLCIlQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUiOlUsIiVBc3luY0l0ZXJhdG9yUHJvdG90eXBlJSI6VSwiJUF0b21pY3MlIjp0eXBlb2YgQXRvbWljcz4idSI/SzpBdG9t'@;
put 'aWNzLCIlQmlnSW50JSI6dHlwZW9mIEJpZ0ludD4idSI/SzpCaWdJbnQsIiVCaWdJbnQ2NEFycmF5JSI6dHlwZW9mIEJpZ0ludDY0QXJyYXk+InUiP0s6QmlnSW50NjRBcnJheSwiJUJpZ1VpbnQ2NEFycmF5JSI6dHlwZW9mIEJpZ1VpbnQ2NEFycmF5PiJ1Ij9LOkJpZ1VpbnQ2NEFycmF5LCIl'@;
put 'Qm9vbGVhbiUiOkJvb2xlYW4sIiVEYXRhVmlldyUiOnR5cGVvZiBEYXRhVmlldz4idSI/SzpEYXRhVmlldywiJURhdGUlIjpEYXRlLCIlZGVjb2RlVVJJJSI6ZGVjb2RlVVJJLCIlZGVjb2RlVVJJQ29tcG9uZW50JSI6ZGVjb2RlVVJJQ29tcG9uZW50LCIlZW5jb2RlVVJJJSI6ZW5jb2RlVVJJ'@;
put 'LCIlZW5jb2RlVVJJQ29tcG9uZW50JSI6ZW5jb2RlVVJJQ29tcG9uZW50LCIlRXJyb3IlIjpFcnJvciwiJWV2YWwlIjpldmFsLCIlRXZhbEVycm9yJSI6RXZhbEVycm9yLCIlRmxvYXQzMkFycmF5JSI6dHlwZW9mIEZsb2F0MzJBcnJheT4idSI/SzpGbG9hdDMyQXJyYXksIiVGbG9hdDY0QXJy'@;
put 'YXklIjp0eXBlb2YgRmxvYXQ2NEFycmF5PiJ1Ij9LOkZsb2F0NjRBcnJheSwiJUZpbmFsaXphdGlvblJlZ2lzdHJ5JSI6dHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5PiJ1Ij9LOkZpbmFsaXphdGlvblJlZ2lzdHJ5LCIlRnVuY3Rpb24lIjpJLCIlR2VuZXJhdG9yRnVuY3Rpb24lIjpVLCIl'@;
put 'SW50OEFycmF5JSI6dHlwZW9mIEludDhBcnJheT4idSI/SzpJbnQ4QXJyYXksIiVJbnQxNkFycmF5JSI6dHlwZW9mIEludDE2QXJyYXk+InUiP0s6SW50MTZBcnJheSwiJUludDMyQXJyYXklIjp0eXBlb2YgSW50MzJBcnJheT4idSI/SzpJbnQzMkFycmF5LCIlaXNGaW5pdGUlIjppc0Zpbml0'@;
put 'ZSwiJWlzTmFOJSI6aXNOYU4sIiVJdGVyYXRvclByb3RvdHlwZSUiOkc/VyhXKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkpOkssIiVKU09OJSI6Im9iamVjdCI9PXR5cGVvZiBKU09OP0pTT046SywiJU1hcCUiOnR5cGVvZiBNYXA+InUiP0s6TWFwLCIlTWFwSXRlcmF0b3JQcm90b3R5cGUlIjp0'@;
put 'eXBlb2YgTWFwPCJ1IiYmRz9XKChuZXcgTWFwKVtTeW1ib2wuaXRlcmF0b3JdKCkpOkssIiVNYXRoJSI6TWF0aCwiJU51bWJlciUiOk51bWJlciwiJU9iamVjdCUiOk9iamVjdCwiJXBhcnNlRmxvYXQlIjpwYXJzZUZsb2F0LCIlcGFyc2VJbnQlIjpwYXJzZUludCwiJVByb21pc2UlIjp0eXBl'@;
put 'b2YgUHJvbWlzZT4idSI/SzpQcm9taXNlLCIlUHJveHklIjp0eXBlb2YgUHJveHk+InUiP0s6UHJveHksIiVSYW5nZUVycm9yJSI6UmFuZ2VFcnJvciwiJVJlZmVyZW5jZUVycm9yJSI6UmVmZXJlbmNlRXJyb3IsIiVSZWZsZWN0JSI6dHlwZW9mIFJlZmxlY3Q+InUiP0s6UmVmbGVjdCwiJVJl'@;
put 'Z0V4cCUiOlJlZ0V4cCwiJVNldCUiOnR5cGVvZiBTZXQ+InUiP0s6U2V0LCIlU2V0SXRlcmF0b3JQcm90b3R5cGUlIjp0eXBlb2YgU2V0PCJ1IiYmRz9XKChuZXcgU2V0KVtTeW1ib2wuaXRlcmF0b3JdKCkpOkssIiVTaGFyZWRBcnJheUJ1ZmZlciUiOnR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZl'@;
put 'cj4idSI/SzpTaGFyZWRBcnJheUJ1ZmZlciwiJVN0cmluZyUiOlN0cmluZywiJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJSI6Rz9XKCIiW1N5bWJvbC5pdGVyYXRvcl0oKSk6SywiJVN5bWJvbCUiOkc/U3ltYm9sOkssIiVTeW50YXhFcnJvciUiOkosIiVUaHJvd1R5cGVFcnJvciUiOlYsIiVU'@;
put 'eXBlZEFycmF5JSI6cSwiJVR5cGVFcnJvciUiOlIsIiVVaW50OEFycmF5JSI6dHlwZW9mIFVpbnQ4QXJyYXk+InUiP0s6VWludDhBcnJheSwiJVVpbnQ4Q2xhbXBlZEFycmF5JSI6dHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5PiJ1Ij9LOlVpbnQ4Q2xhbXBlZEFycmF5LCIlVWludDE2QXJyYXkl'@;
put 'Ijp0eXBlb2YgVWludDE2QXJyYXk+InUiP0s6VWludDE2QXJyYXksIiVVaW50MzJBcnJheSUiOnR5cGVvZiBVaW50MzJBcnJheT4idSI/SzpVaW50MzJBcnJheSwiJVVSSUVycm9yJSI6VVJJRXJyb3IsIiVXZWFrTWFwJSI6dHlwZW9mIFdlYWtNYXA+InUiP0s6V2Vha01hcCwiJVdlYWtSZWYl'@;
put 'Ijp0eXBlb2YgV2Vha1JlZj4idSI/SzpXZWFrUmVmLCIlV2Vha1NldCUiOnR5cGVvZiBXZWFrU2V0PiJ1Ij9LOldlYWtTZXR9O3RyeXtudWxsLmVycm9yfWNhdGNoKE0pe3ZhciBuZT1XKFcoTSkpO3RlWyIlRXJyb3IucHJvdG90eXBlJSJdPW5lfXZhciBpZT1mdW5jdGlvbiBNKHkpe3ZhciBw'@;
put 'O2lmKCIlQXN5bmNGdW5jdGlvbiUiPT09eSlwPUUoImFzeW5jIGZ1bmN0aW9uICgpIHt9Iik7ZWxzZSBpZigiJUdlbmVyYXRvckZ1bmN0aW9uJSI9PT15KXA9RSgiZnVuY3Rpb24qICgpIHt9Iik7ZWxzZSBpZigiJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lIj09PXkpcD1FKCJhc3luYyBmdW5j'@;
put 'dGlvbiogKCkge30iKTtlbHNlIGlmKCIlQXN5bmNHZW5lcmF0b3IlIj09PXkpe3ZhciBTPU0oIiVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJSIpO1MmJihwPVMucHJvdG90eXBlKX1lbHNlIGlmKCIlQXN5bmNJdGVyYXRvclByb3RvdHlwZSUiPT09eSl7dmFyIFE9TSgiJUFzeW5jR2VuZXJhdG9y'@;
put 'JSIpO1EmJihwPVcoUS5wcm90b3R5cGUpKX1yZXR1cm4gdGVbeV09cCxwfSxsZT17IiVBcnJheUJ1ZmZlclByb3RvdHlwZSUiOlsiQXJyYXlCdWZmZXIiLCJwcm90b3R5cGUiXSwiJUFycmF5UHJvdG90eXBlJSI6WyJBcnJheSIsInByb3RvdHlwZSJdLCIlQXJyYXlQcm90b19lbnRyaWVzJSI6'@;
put 'WyJBcnJheSIsInByb3RvdHlwZSIsImVudHJpZXMiXSwiJUFycmF5UHJvdG9fZm9yRWFjaCUiOlsiQXJyYXkiLCJwcm90b3R5cGUiLCJmb3JFYWNoIl0sIiVBcnJheVByb3RvX2tleXMlIjpbIkFycmF5IiwicHJvdG90eXBlIiwia2V5cyJdLCIlQXJyYXlQcm90b192YWx1ZXMlIjpbIkFycmF5'@;
put 'IiwicHJvdG90eXBlIiwidmFsdWVzIl0sIiVBc3luY0Z1bmN0aW9uUHJvdG90eXBlJSI6WyJBc3luY0Z1bmN0aW9uIiwicHJvdG90eXBlIl0sIiVBc3luY0dlbmVyYXRvciUiOlsiQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiIsInByb3RvdHlwZSJdLCIlQXN5bmNHZW5lcmF0b3JQcm90b3R5cGUl'@;
put 'IjpbIkFzeW5jR2VuZXJhdG9yRnVuY3Rpb24iLCJwcm90b3R5cGUiLCJwcm90b3R5cGUiXSwiJUJvb2xlYW5Qcm90b3R5cGUlIjpbIkJvb2xlYW4iLCJwcm90b3R5cGUiXSwiJURhdGFWaWV3UHJvdG90eXBlJSI6WyJEYXRhVmlldyIsInByb3RvdHlwZSJdLCIlRGF0ZVByb3RvdHlwZSUiOlsi'@;
put 'RGF0ZSIsInByb3RvdHlwZSJdLCIlRXJyb3JQcm90b3R5cGUlIjpbIkVycm9yIiwicHJvdG90eXBlIl0sIiVFdmFsRXJyb3JQcm90b3R5cGUlIjpbIkV2YWxFcnJvciIsInByb3RvdHlwZSJdLCIlRmxvYXQzMkFycmF5UHJvdG90eXBlJSI6WyJGbG9hdDMyQXJyYXkiLCJwcm90b3R5cGUiXSwi'@;
put 'JUZsb2F0NjRBcnJheVByb3RvdHlwZSUiOlsiRmxvYXQ2NEFycmF5IiwicHJvdG90eXBlIl0sIiVGdW5jdGlvblByb3RvdHlwZSUiOlsiRnVuY3Rpb24iLCJwcm90b3R5cGUiXSwiJUdlbmVyYXRvciUiOlsiR2VuZXJhdG9yRnVuY3Rpb24iLCJwcm90b3R5cGUiXSwiJUdlbmVyYXRvclByb3Rv'@;
put 'dHlwZSUiOlsiR2VuZXJhdG9yRnVuY3Rpb24iLCJwcm90b3R5cGUiLCJwcm90b3R5cGUiXSwiJUludDhBcnJheVByb3RvdHlwZSUiOlsiSW50OEFycmF5IiwicHJvdG90eXBlIl0sIiVJbnQxNkFycmF5UHJvdG90eXBlJSI6WyJJbnQxNkFycmF5IiwicHJvdG90eXBlIl0sIiVJbnQzMkFycmF5'@;
put 'UHJvdG90eXBlJSI6WyJJbnQzMkFycmF5IiwicHJvdG90eXBlIl0sIiVKU09OUGFyc2UlIjpbIkpTT04iLCJwYXJzZSJdLCIlSlNPTlN0cmluZ2lmeSUiOlsiSlNPTiIsInN0cmluZ2lmeSJdLCIlTWFwUHJvdG90eXBlJSI6WyJNYXAiLCJwcm90b3R5cGUiXSwiJU51bWJlclByb3RvdHlwZSUi'@;
put 'OlsiTnVtYmVyIiwicHJvdG90eXBlIl0sIiVPYmplY3RQcm90b3R5cGUlIjpbIk9iamVjdCIsInByb3RvdHlwZSJdLCIlT2JqUHJvdG9fdG9TdHJpbmclIjpbIk9iamVjdCIsInByb3RvdHlwZSIsInRvU3RyaW5nIl0sIiVPYmpQcm90b192YWx1ZU9mJSI6WyJPYmplY3QiLCJwcm90b3R5cGUi'@;
put 'LCJ2YWx1ZU9mIl0sIiVQcm9taXNlUHJvdG90eXBlJSI6WyJQcm9taXNlIiwicHJvdG90eXBlIl0sIiVQcm9taXNlUHJvdG9fdGhlbiUiOlsiUHJvbWlzZSIsInByb3RvdHlwZSIsInRoZW4iXSwiJVByb21pc2VfYWxsJSI6WyJQcm9taXNlIiwiYWxsIl0sIiVQcm9taXNlX3JlamVjdCUiOlsi'@;
put 'UHJvbWlzZSIsInJlamVjdCJdLCIlUHJvbWlzZV9yZXNvbHZlJSI6WyJQcm9taXNlIiwicmVzb2x2ZSJdLCIlUmFuZ2VFcnJvclByb3RvdHlwZSUiOlsiUmFuZ2VFcnJvciIsInByb3RvdHlwZSJdLCIlUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlIjpbIlJlZmVyZW5jZUVycm9yIiwicHJvdG90'@;
put 'eXBlIl0sIiVSZWdFeHBQcm90b3R5cGUlIjpbIlJlZ0V4cCIsInByb3RvdHlwZSJdLCIlU2V0UHJvdG90eXBlJSI6WyJTZXQiLCJwcm90b3R5cGUiXSwiJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSI6WyJTaGFyZWRBcnJheUJ1ZmZlciIsInByb3RvdHlwZSJdLCIlU3RyaW5nUHJvdG90'@;
put 'eXBlJSI6WyJTdHJpbmciLCJwcm90b3R5cGUiXSwiJVN5bWJvbFByb3RvdHlwZSUiOlsiU3ltYm9sIiwicHJvdG90eXBlIl0sIiVTeW50YXhFcnJvclByb3RvdHlwZSUiOlsiU3ludGF4RXJyb3IiLCJwcm90b3R5cGUiXSwiJVR5cGVkQXJyYXlQcm90b3R5cGUlIjpbIlR5cGVkQXJyYXkiLCJw'@;
put 'cm90b3R5cGUiXSwiJVR5cGVFcnJvclByb3RvdHlwZSUiOlsiVHlwZUVycm9yIiwicHJvdG90eXBlIl0sIiVVaW50OEFycmF5UHJvdG90eXBlJSI6WyJVaW50OEFycmF5IiwicHJvdG90eXBlIl0sIiVVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSUiOlsiVWludDhDbGFtcGVkQXJyYXkiLCJw'@;
put 'cm90b3R5cGUiXSwiJVVpbnQxNkFycmF5UHJvdG90eXBlJSI6WyJVaW50MTZBcnJheSIsInByb3RvdHlwZSJdLCIlVWludDMyQXJyYXlQcm90b3R5cGUlIjpbIlVpbnQzMkFycmF5IiwicHJvdG90eXBlIl0sIiVVUklFcnJvclByb3RvdHlwZSUiOlsiVVJJRXJyb3IiLCJwcm90b3R5cGUiXSwi'@;
put 'JVdlYWtNYXBQcm90b3R5cGUlIjpbIldlYWtNYXAiLCJwcm90b3R5cGUiXSwiJVdlYWtTZXRQcm90b3R5cGUlIjpbIldlYWtTZXQiLCJwcm90b3R5cGUiXX0sZGU9TCg4NjEyKSx1ZT1MKDc2NDIpLGNlPWRlLmNhbGwoRnVuY3Rpb24uY2FsbCxBcnJheS5wcm90b3R5cGUuY29uY2F0KSxZPWRl'@;
put 'LmNhbGwoRnVuY3Rpb24uYXBwbHksQXJyYXkucHJvdG90eXBlLnNwbGljZSksYj1kZS5jYWxsKEZ1bmN0aW9uLmNhbGwsU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKSx4PWRlLmNhbGwoRnVuY3Rpb24uY2FsbCxTdHJpbmcucHJvdG90eXBlLnNsaWNlKSxOPWRlLmNhbGwoRnVuY3Rpb24uY2Fs'@;
put 'bCxSZWdFeHAucHJvdG90eXBlLmV4ZWMpLEY9L1teJS5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxcXXxcXC4pKj8pXDIpXF18KD89KD86XC58XFtcXSkoPzpcLnxcW1xdfCUkKSkvZyxnPS9cXChcXCk/L2csQz1mdW5jdGlvbihNLHkpe3ZhciBwLFM9'@;
put 'TTtpZih1ZShsZSxTKSYmKFM9IiUiKyhwPWxlW1NdKVswXSsiJSIpLHVlKHRlLFMpKXt2YXIgUT10ZVtTXTtpZihRPT09VSYmKFE9aWUoUykpLHZvaWQgMD09PVEmJiF5KXRocm93IG5ldyBSKCJpbnRyaW5zaWMgIitNKyIgZXhpc3RzLCBidXQgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGZp'@;
put 'bGUgYW4gaXNzdWUhIik7cmV0dXJue2FsaWFzOnAsbmFtZTpTLHZhbHVlOlF9fXRocm93IG5ldyBKKCJpbnRyaW5zaWMgIitNKyIgZG9lcyBub3QgZXhpc3QhIil9O0guZXhwb3J0cz1mdW5jdGlvbihNLHkpe2lmKCJzdHJpbmciIT10eXBlb2YgTXx8MD09PU0ubGVuZ3RoKXRocm93IG5ldyBS'@;
put 'KCJpbnRyaW5zaWMgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyIpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSYmImJvb2xlYW4iIT10eXBlb2YgeSl0aHJvdyBuZXcgUignImFsbG93TWlzc2luZyIgYXJndW1lbnQgbXVzdCBiZSBhIGJvb2xlYW4nKTtpZihudWxsPT09TigvXiU/W14l'@;
put 'XSolPyQvLE0pKXRocm93IG5ldyBKKCJgJWAgbWF5IG5vdCBiZSBwcmVzZW50IGFueXdoZXJlIGJ1dCBhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgdGhlIGludHJpbnNpYyBuYW1lIik7dmFyIHA9ZnVuY3Rpb24oSGUpe3ZhciBRZT14KEhlLDAsMSksbXQ9eChIZSwtMSk7aWYoIiUiPT09'@;
put 'UWUmJiIlIiE9PW10KXRocm93IG5ldyBKKCJpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIGNsb3NpbmcgYCVgIik7aWYoIiUiPT09bXQmJiIlIiE9PVFlKXRocm93IG5ldyBKKCJpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIG9wZW5pbmcgYCVgIik7dmFyIEtl'@;
put 'PVtdO3JldHVybiBiKEhlLEYsZnVuY3Rpb24od2UsSWUsT2UsZXQpe0tlW0tlLmxlbmd0aF09T2U/YihldCxnLCIkMSIpOkllfHx3ZX0pLEtlfShNKSxTPXAubGVuZ3RoPjA/cFswXToiIixRPUMoIiUiK1MrIiUiLHkpLHJlPVEubmFtZSxmZT1RLnZhbHVlLG1lPSExLGtlPVEuYWxpYXM7a2Um'@;
put 'JihTPWtlWzBdLFkocCxjZShbMCwxXSxrZSkpKTtmb3IodmFyIFRlPTEsUGU9ITA7VGU8cC5sZW5ndGg7VGUrPTEpe3ZhciBGZT1wW1RlXSxOZT14KEZlLDAsMSksTGU9eChGZSwtMSk7aWYoKCciJz09PU5lfHwiJyI9PT1OZXx8ImAiPT09TmV8fCciJz09PUxlfHwiJyI9PT1MZXx8ImAiPT09'@;
put 'TGUpJiZOZSE9PUxlKXRocm93IG5ldyBKKCJwcm9wZXJ0eSBuYW1lcyB3aXRoIHF1b3RlcyBtdXN0IGhhdmUgbWF0Y2hpbmcgcXVvdGVzIik7aWYoImNvbnN0cnVjdG9yIiE9PUZlJiZQZXx8KG1lPSEwKSx1ZSh0ZSxyZT0iJSIrKFMrPSIuIitGZSkrIiUiKSlmZT10ZVtyZV07ZWxzZSBpZihu'@;
put 'dWxsIT1mZSl7aWYoIShGZSBpbiBmZSkpe2lmKCF5KXRocm93IG5ldyBSKCJiYXNlIGludHJpbnNpYyBmb3IgIitNKyIgZXhpc3RzLCBidXQgdGhlIHByb3BlcnR5IGlzIG5vdCBhdmFpbGFibGUuIik7cmV0dXJufWlmKHomJlRlKzE+PXAubGVuZ3RoKXt2YXIgQmU9eihmZSxGZSk7ZmU9KFBl'@;
put 'PSEhQmUpJiYiZ2V0ImluIEJlJiYhKCJvcmlnaW5hbFZhbHVlImluIEJlLmdldCk/QmUuZ2V0OmZlW0ZlXX1lbHNlIFBlPXVlKGZlLEZlKSxmZT1mZVtGZV07UGUmJiFtZSYmKHRlW3JlXT1mZSl9fXJldHVybiBmZX19LDY3NzI6KEgsQixMKT0+e3ZhciBLPUwoNDE1NSk7ZnVuY3Rpb24gSihx'@;
put 'LHRlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHEsdGUpfUIuc2V0b3B0cz1mdW5jdGlvbihxLHRlLG5lKXtpZihuZXx8KG5lPXt9KSxuZS5tYXRjaEJhc2UmJi0xPT09dGUuaW5kZXhPZigiLyIpKXtpZihuZS5ub2dsb2JzdGFyKXRocm93IG5ldyBFcnJv'@;
put 'cigiYmFzZSBtYXRjaGluZyByZXF1aXJlcyBnbG9ic3RhciIpO3RlPSIqKi8iK3RlfXZhciBsZTtxLnNpbGVudD0hIW5lLnNpbGVudCxxLnBhdHRlcm49dGUscS5zdHJpY3Q9ITEhPT1uZS5zdHJpY3QscS5yZWFscGF0aD0hIW5lLnJlYWxwYXRoLHEucmVhbHBhdGhDYWNoZT1uZS5yZWFscGF0'@;
put 'aENhY2hlfHxPYmplY3QuY3JlYXRlKG51bGwpLHEuZm9sbG93PSEhbmUuZm9sbG93LHEuZG90PSEhbmUuZG90LHEubWFyaz0hIW5lLm1hcmsscS5ub2Rpcj0hIW5lLm5vZGlyLHEubm9kaXImJihxLm1hcms9ITApLHEuc3luYz0hIW5lLnN5bmMscS5ub3VuaXF1ZT0hIW5lLm5vdW5pcXVlLHEu'@;
put 'bm9udWxsPSEhbmUubm9udWxsLHEubm9zb3J0PSEhbmUubm9zb3J0LHEubm9jYXNlPSEhbmUubm9jYXNlLHEuc3RhdD0hIW5lLnN0YXQscS5ub3Byb2Nlc3M9ISFuZS5ub3Byb2Nlc3MscS5hYnNvbHV0ZT0hIW5lLmFic29sdXRlLHEuZnM9bmUuZnN8fEkscS5tYXhMZW5ndGg9bmUubWF4TGVu'@;
put 'Z3RofHwxLzAscS5jYWNoZT1uZS5jYWNoZXx8T2JqZWN0LmNyZWF0ZShudWxsKSxxLnN0YXRDYWNoZT1uZS5zdGF0Q2FjaGV8fE9iamVjdC5jcmVhdGUobnVsbCkscS5zeW1saW5rcz1uZS5zeW1saW5rc3x8T2JqZWN0LmNyZWF0ZShudWxsKSwobGU9cSkuaWdub3JlPW5lLmlnbm9yZXx8W10s'@;
put 'QXJyYXkuaXNBcnJheShsZS5pZ25vcmUpfHwobGUuaWdub3JlPVtsZS5pZ25vcmVdKSxsZS5pZ25vcmUubGVuZ3RoJiYobGUuaWdub3JlPWxlLmlnbm9yZS5tYXAoRykpLHEuY2hhbmdlZEN3ZD0hMTt2YXIgaWU9Sy5jd2QoKTtKKG5lLCJjd2QiKT8ocS5jd2Q9Ui5yZXNvbHZlKG5lLmN3ZCks'@;
put 'cS5jaGFuZ2VkQ3dkPXEuY3dkIT09aWUpOnEuY3dkPWllLHEucm9vdD1uZS5yb290fHxSLnJlc29sdmUocS5jd2QsIi8iKSxxLnJvb3Q9Ui5yZXNvbHZlKHEucm9vdCksIndpbjMyIj09PUsucGxhdGZvcm0mJihxLnJvb3Q9cS5yb290LnJlcGxhY2UoL1xcL2csIi8iKSkscS5jd2RBYnM9eihx'@;
put 'LmN3ZCk/cS5jd2Q6VyhxLHEuY3dkKSwid2luMzIiPT09Sy5wbGF0Zm9ybSYmKHEuY3dkQWJzPXEuY3dkQWJzLnJlcGxhY2UoL1xcL2csIi8iKSkscS5ub21vdW50PSEhbmUubm9tb3VudCxuZS5ub25lZ2F0ZT0hMCxuZS5ub2NvbW1lbnQ9ITAsbmUuYWxsb3dXaW5kb3dzRXNjYXBlPSExLHEu'@;
put 'bWluaW1hdGNoPW5ldyBqKHRlLG5lKSxxLm9wdGlvbnM9cS5taW5pbWF0Y2gub3B0aW9uc30sQi5vd25Qcm9wPUosQi5tYWtlQWJzPVcsQi5maW5pc2g9ZnVuY3Rpb24ocSl7Zm9yKHZhciB0ZT1xLm5vdW5pcXVlLG5lPXRlP1tdOk9iamVjdC5jcmVhdGUobnVsbCksaWU9MCxsZT1xLm1hdGNo'@;
put 'ZXMubGVuZ3RoO2llPGxlO2llKyspe3ZhciBkZT1xLm1hdGNoZXNbaWVdO2lmKGRlJiYwIT09T2JqZWN0LmtleXMoZGUpLmxlbmd0aCl7dmFyIHVlPU9iamVjdC5rZXlzKGRlKTt0ZT9uZS5wdXNoLmFwcGx5KG5lLHVlKTp1ZS5mb3JFYWNoKGZ1bmN0aW9uKFkpe25lW1ldPSEwfSl9ZWxzZSBp'@;
put 'ZihxLm5vbnVsbCl7dmFyIGNlPXEubWluaW1hdGNoLmdsb2JTZXRbaWVdO3RlP25lLnB1c2goY2UpOm5lW2NlXT0hMH19aWYodGV8fChuZT1PYmplY3Qua2V5cyhuZSkpLHEubm9zb3J0fHwobmU9bmUuc29ydChWKSkscS5tYXJrKXtmb3IoaWU9MDtpZTxuZS5sZW5ndGg7aWUrKyluZVtpZV09'@;
put 'cS5fbWFyayhuZVtpZV0pO3Eubm9kaXImJihuZT1uZS5maWx0ZXIoZnVuY3Rpb24oWSl7dmFyIGI9IS9cLyQvLnRlc3QoWSkseD1xLmNhY2hlW1ldfHxxLmNhY2hlW1cocSxZKV07cmV0dXJuIGImJngmJihiPSJESVIiIT09eCYmIUFycmF5LmlzQXJyYXkoeCkpLGJ9KSl9cS5pZ25vcmUubGVu'@;
put 'Z3RoJiYobmU9bmUuZmlsdGVyKGZ1bmN0aW9uKFkpe3JldHVybiFVKHEsWSl9KSkscS5mb3VuZD1uZX0sQi5tYXJrPWZ1bmN0aW9uKHEsdGUpe3ZhciBuZT1XKHEsdGUpLGllPXEuY2FjaGVbbmVdLGxlPXRlO2lmKGllKXt2YXIgZGU9IkRJUiI9PT1pZXx8QXJyYXkuaXNBcnJheShpZSksdWU9'@;
put 'Ii8iPT09dGUuc2xpY2UoLTEpO2lmKGRlJiYhdWU/bGUrPSIvIjohZGUmJnVlJiYobGU9bGUuc2xpY2UoMCwtMSkpLGxlIT09dGUpe3ZhciBjZT1XKHEsbGUpO3Euc3RhdENhY2hlW2NlXT1xLnN0YXRDYWNoZVtuZV0scS5jYWNoZVtjZV09cS5jYWNoZVtuZV19fXJldHVybiBsZX0sQi5pc0ln'@;
put 'bm9yZWQ9VSxCLmNoaWxkcmVuSWdub3JlZD1mdW5jdGlvbihxLHRlKXtyZXR1cm4hIXEuaWdub3JlLmxlbmd0aCYmcS5pZ25vcmUuc29tZShmdW5jdGlvbihuZSl7cmV0dXJuISghbmUuZ21hdGNoZXJ8fCFuZS5nbWF0Y2hlci5tYXRjaCh0ZSkpfSl9O3ZhciBJPUwoMzcxMCksUj1MKDI1MjAp'@;
put 'LEU9TCgxMTcxKSx6PUwoNDA5NSksaj1FLk1pbmltYXRjaDtmdW5jdGlvbiBWKHEsdGUpe3JldHVybiBxLmxvY2FsZUNvbXBhcmUodGUsImVuIil9ZnVuY3Rpb24gRyhxKXt2YXIgdGU9bnVsbDtpZigiLyoqIj09PXEuc2xpY2UoLTMpKXt2YXIgbmU9cS5yZXBsYWNlKC8oXC9cKlwqKSskLywi'@;
put 'Iik7dGU9bmV3IGoobmUse2RvdDohMH0pfXJldHVybnttYXRjaGVyOm5ldyBqKHEse2RvdDohMH0pLGdtYXRjaGVyOnRlfX1mdW5jdGlvbiBXKHEsdGUpe3ZhciBuZT10ZTtyZXR1cm4gbmU9Ii8iPT09dGUuY2hhckF0KDApP1Iuam9pbihxLnJvb3QsdGUpOnoodGUpfHwiIj09PXRlP3RlOnEu'@;
put 'Y2hhbmdlZEN3ZD9SLnJlc29sdmUocS5jd2QsdGUpOlIucmVzb2x2ZSh0ZSksIndpbjMyIj09PUsucGxhdGZvcm0mJihuZT1uZS5yZXBsYWNlKC9cXC9nLCIvIikpLG5lfWZ1bmN0aW9uIFUocSx0ZSl7cmV0dXJuISFxLmlnbm9yZS5sZW5ndGgmJnEuaWdub3JlLnNvbWUoZnVuY3Rpb24obmUp'@;
put 'e3JldHVybiBuZS5tYXRjaGVyLm1hdGNoKHRlKXx8ISghbmUuZ21hdGNoZXJ8fCFuZS5nbWF0Y2hlci5tYXRjaCh0ZSkpfSl9fSwyODg0OihILEIsTCk9Pnt2YXIgSz1MKDQxNTUpLEo9TCg1MTA4KTtILmV4cG9ydHM9dWU7dmFyIEk9TCg3MzM0KSxSPUwoMTE3MSksRT1MKDU3MTcpLHo9TCg3'@;
put 'MTg3KS5FdmVudEVtaXR0ZXIsaj1MKDI1MjApLFY9TCg5MjgyKSxHPUwoNDA5NSksVz1MKDQ3NTEpLFU9TCg2NzcyKSxxPVUuc2V0b3B0cyx0ZT1VLm93blByb3AsbmU9TCg3ODQ0KSxpZT0oTCg5NTM5KSxVLmNoaWxkcmVuSWdub3JlZCksbGU9VS5pc0lnbm9yZWQsZGU9TCg3NzgpO2Z1bmN0'@;
put 'aW9uIHVlKGIseCxOKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgeCYmKE49eCx4PXt9KSx4fHwoeD17fSkseC5zeW5jKXtpZihOKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIHByb3ZpZGVkIHRvIHN5bmMgZ2xvYiIpO3JldHVybiBXKGIseCl9cmV0dXJuIG5ldyBZKGIseCxOKX11ZS5z'@;
put 'eW5jPVc7dmFyIGNlPXVlLkdsb2JTeW5jPVcuR2xvYlN5bmM7ZnVuY3Rpb24gWShiLHgsTil7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHgmJihOPXgseD1udWxsKSx4JiZ4LnN5bmMpe2lmKE4pdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgcHJvdmlkZWQgdG8gc3luYyBnbG9iIik7cmV0'@;
put 'dXJuIG5ldyBjZShiLHgpfWlmKCEodGhpcyBpbnN0YW5jZW9mIFkpKXJldHVybiBuZXcgWShiLHgsTik7cSh0aGlzLGIseCksdGhpcy5fZGlkUmVhbFBhdGg9ITE7dmFyIEY9dGhpcy5taW5pbWF0Y2guc2V0Lmxlbmd0aDt0aGlzLm1hdGNoZXM9bmV3IEFycmF5KEYpLCJmdW5jdGlvbiI9PXR5'@;
put 'cGVvZiBOJiYoTj1kZShOKSx0aGlzLm9uKCJlcnJvciIsTiksdGhpcy5vbigiZW5kIixmdW5jdGlvbihwKXtOKG51bGwscCl9KSk7dmFyIGc9dGhpcztpZih0aGlzLl9wcm9jZXNzaW5nPTAsdGhpcy5fZW1pdFF1ZXVlPVtdLHRoaXMuX3Byb2Nlc3NRdWV1ZT1bXSx0aGlzLnBhdXNlZD0hMSx0'@;
put 'aGlzLm5vcHJvY2VzcylyZXR1cm4gdGhpcztpZigwPT09RilyZXR1cm4geSgpO2Zvcih2YXIgQz0hMCxNPTA7TTxGO00rKyl0aGlzLl9wcm9jZXNzKHRoaXMubWluaW1hdGNoLnNldFtNXSxNLCExLHkpO2Z1bmN0aW9uIHkoKXstLWcuX3Byb2Nlc3NpbmcsZy5fcHJvY2Vzc2luZzw9MCYmKEM/'@;
put 'Sy5uZXh0VGljayhmdW5jdGlvbigpe2cuX2ZpbmlzaCgpfSk6Zy5fZmluaXNoKCkpfUM9ITF9dWUuZ2xvYj11ZSx1ZS5oYXNNYWdpYz1mdW5jdGlvbihiLHgpe3ZhciBOPWZ1bmN0aW9uKEMsTSl7aWYobnVsbD09PU18fCJvYmplY3QiIT10eXBlb2YgTSlyZXR1cm4gQztmb3IodmFyIHk9T2Jq'@;
put 'ZWN0LmtleXMoTSkscD15Lmxlbmd0aDtwLS07KUNbeVtwXV09TVt5W3BdXTtyZXR1cm4gQ30oe30seCk7Ti5ub3Byb2Nlc3M9ITA7dmFyIEY9bmV3IFkoYixOKS5taW5pbWF0Y2guc2V0O2lmKCFiKXJldHVybiExO2lmKEYubGVuZ3RoPjEpcmV0dXJuITA7Zm9yKHZhciBnPTA7ZzxGWzBdLmxl'@;
put 'bmd0aDtnKyspaWYoInN0cmluZyIhPXR5cGVvZiBGWzBdW2ddKXJldHVybiEwO3JldHVybiExfSx1ZS5HbG9iPVksRShZLHopLFkucHJvdG90eXBlLl9maW5pc2g9ZnVuY3Rpb24oKXtpZihWKHRoaXMgaW5zdGFuY2VvZiBZKSwhdGhpcy5hYm9ydGVkKXtpZih0aGlzLnJlYWxwYXRoJiYhdGhp'@;
put 'cy5fZGlkUmVhbHBhdGgpcmV0dXJuIHRoaXMuX3JlYWxwYXRoKCk7VS5maW5pc2godGhpcyksdGhpcy5lbWl0KCJlbmQiLHRoaXMuZm91bmQpfX0sWS5wcm90b3R5cGUuX3JlYWxwYXRoPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2RpZFJlYWxwYXRoKXt0aGlzLl9kaWRSZWFscGF0aD0hMDt2YXIg'@;
put 'Yj10aGlzLm1hdGNoZXMubGVuZ3RoO2lmKDA9PT1iKXJldHVybiB0aGlzLl9maW5pc2goKTtmb3IodmFyIHg9dGhpcyxOPTA7Tjx0aGlzLm1hdGNoZXMubGVuZ3RoO04rKyl0aGlzLl9yZWFscGF0aFNldChOLEYpfWZ1bmN0aW9uIEYoKXswPT0tLWImJnguX2ZpbmlzaCgpfX0sWS5wcm90b3R5'@;
put 'cGUuX3JlYWxwYXRoU2V0PWZ1bmN0aW9uKGIseCl7dmFyIE49dGhpcy5tYXRjaGVzW2JdO2lmKCFOKXJldHVybiB4KCk7dmFyIEY9T2JqZWN0LmtleXMoTiksZz10aGlzLEM9Ri5sZW5ndGg7aWYoMD09PUMpcmV0dXJuIHgoKTt2YXIgTT10aGlzLm1hdGNoZXNbYl09T2JqZWN0LmNyZWF0ZShu'@;
put 'dWxsKTtGLmZvckVhY2goZnVuY3Rpb24oeSxwKXt5PWcuX21ha2VBYnMoeSksSS5yZWFscGF0aCh5LGcucmVhbHBhdGhDYWNoZSxmdW5jdGlvbihTLFEpe1M/InN0YXQiPT09Uy5zeXNjYWxsP01beV09ITA6Zy5lbWl0KCJlcnJvciIsUyk6TVtRXT0hMCwwPT0tLUMmJihnLm1hdGNoZXNbYl09'@;
put 'TSx4KCkpfSl9KX0sWS5wcm90b3R5cGUuX21hcms9ZnVuY3Rpb24oYil7cmV0dXJuIFUubWFyayh0aGlzLGIpfSxZLnByb3RvdHlwZS5fbWFrZUFicz1mdW5jdGlvbihiKXtyZXR1cm4gVS5tYWtlQWJzKHRoaXMsYil9LFkucHJvdG90eXBlLmFib3J0PWZ1bmN0aW9uKCl7dGhpcy5hYm9ydGVk'@;
put 'PSEwLHRoaXMuZW1pdCgiYWJvcnQiKX0sWS5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXt0aGlzLnBhdXNlZHx8KHRoaXMucGF1c2VkPSEwLHRoaXMuZW1pdCgicGF1c2UiKSl9LFkucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlvbigpe2lmKHRoaXMucGF1c2VkKXtpZih0aGlzLmVtaXQoInJl'@;
put 'c3VtZSIpLHRoaXMucGF1c2VkPSExLHRoaXMuX2VtaXRRdWV1ZS5sZW5ndGgpe3ZhciBiPXRoaXMuX2VtaXRRdWV1ZS5zbGljZSgwKTt0aGlzLl9lbWl0UXVldWUubGVuZ3RoPTA7Zm9yKHZhciB4PTA7eDxiLmxlbmd0aDt4Kyspe3ZhciBOPWJbeF07dGhpcy5fZW1pdE1hdGNoKE5bMF0sTlsx'@;
put 'XSl9fWlmKHRoaXMuX3Byb2Nlc3NRdWV1ZS5sZW5ndGgpe3ZhciBGPXRoaXMuX3Byb2Nlc3NRdWV1ZS5zbGljZSgwKTtmb3IodGhpcy5fcHJvY2Vzc1F1ZXVlLmxlbmd0aD0wLHg9MDt4PEYubGVuZ3RoO3grKyl7dmFyIGc9Rlt4XTt0aGlzLl9wcm9jZXNzaW5nLS0sdGhpcy5fcHJvY2Vzcyhn'@;
put 'WzBdLGdbMV0sZ1syXSxnWzNdKX19fX0sWS5wcm90b3R5cGUuX3Byb2Nlc3M9ZnVuY3Rpb24oYix4LE4sRil7aWYoVih0aGlzIGluc3RhbmNlb2YgWSksVigiZnVuY3Rpb24iPT10eXBlb2YgRiksIXRoaXMuYWJvcnRlZClpZih0aGlzLl9wcm9jZXNzaW5nKyssdGhpcy5wYXVzZWQpdGhpcy5f'@;
put 'cHJvY2Vzc1F1ZXVlLnB1c2goW2IseCxOLEZdKTtlbHNle2Zvcih2YXIgZyxDPTA7InN0cmluZyI9PXR5cGVvZiBiW0NdOylDKys7c3dpdGNoKEMpe2Nhc2UgYi5sZW5ndGg6cmV0dXJuIHZvaWQgdGhpcy5fcHJvY2Vzc1NpbXBsZShiLmpvaW4oIi8iKSx4LEYpO2Nhc2UgMDpnPW51bGw7YnJl'@;
put 'YWs7ZGVmYXVsdDpnPWIuc2xpY2UoMCxDKS5qb2luKCIvIil9dmFyIE0seT1iLnNsaWNlKEMpO251bGw9PT1nP009Ii4iOigoRyhnKXx8RyhiLm1hcChmdW5jdGlvbihTKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIFM/UzoiWypdIn0pLmpvaW4oIi8iKSkpJiYoZyYmRyhnKXx8KGc9Ii8iK2cp'@;
put 'KSxNPWcpO3ZhciBwPXRoaXMuX21ha2VBYnMoTSk7aWYoaWUodGhpcyxNKSlyZXR1cm4gRigpO3lbMF09PT1SLkdMT0JTVEFSP3RoaXMuX3Byb2Nlc3NHbG9iU3RhcihnLE0scCx5LHgsTixGKTp0aGlzLl9wcm9jZXNzUmVhZGRpcihnLE0scCx5LHgsTixGKX19LFkucHJvdG90eXBlLl9wcm9j'@;
put 'ZXNzUmVhZGRpcj1mdW5jdGlvbihiLHgsTixGLGcsQyxNKXt2YXIgeT10aGlzO3RoaXMuX3JlYWRkaXIoTixDLGZ1bmN0aW9uKHAsUyl7cmV0dXJuIHkuX3Byb2Nlc3NSZWFkZGlyMihiLHgsTixGLGcsQyxTLE0pfSl9LFkucHJvdG90eXBlLl9wcm9jZXNzUmVhZGRpcjI9ZnVuY3Rpb24oYix4'@;
put 'LE4sRixnLEMsTSx5KXtpZighTSlyZXR1cm4geSgpO2Zvcih2YXIgcD1GWzBdLFM9ISF0aGlzLm1pbmltYXRjaC5uZWdhdGUscmU9dGhpcy5kb3R8fCIuIj09PXAuX2dsb2IuY2hhckF0KDApLGZlPVtdLG1lPTA7bWU8TS5sZW5ndGg7bWUrKykoIi4iIT09KFRlPU1bbWVdKS5jaGFyQXQoMCl8'@;
put 'fHJlKSYmKFMmJiFiPyFUZS5tYXRjaChwKTpUZS5tYXRjaChwKSkmJmZlLnB1c2goVGUpO3ZhciBrZT1mZS5sZW5ndGg7aWYoMD09PWtlKXJldHVybiB5KCk7aWYoMT09PUYubGVuZ3RoJiYhdGhpcy5tYXJrJiYhdGhpcy5zdGF0KXtmb3IodGhpcy5tYXRjaGVzW2ddfHwodGhpcy5tYXRjaGVz'@;
put 'W2ddPU9iamVjdC5jcmVhdGUobnVsbCkpLG1lPTA7bWU8a2U7bWUrKyl7dmFyIFRlPWZlW21lXTtiJiYoVGU9Ii8iIT09Yj9iKyIvIitUZTpiK1RlKSwiLyIhPT1UZS5jaGFyQXQoMCl8fHRoaXMubm9tb3VudHx8KFRlPWouam9pbih0aGlzLnJvb3QsVGUpKSx0aGlzLl9lbWl0TWF0Y2goZyxU'@;
put 'ZSl9cmV0dXJuIHkoKX1mb3IoRi5zaGlmdCgpLG1lPTA7bWU8a2U7bWUrKylUZT1mZVttZV0sYiYmKFRlPSIvIiE9PWI/YisiLyIrVGU6YitUZSksdGhpcy5fcHJvY2VzcyhbVGVdLmNvbmNhdChGKSxnLEMseSk7eSgpfSxZLnByb3RvdHlwZS5fZW1pdE1hdGNoPWZ1bmN0aW9uKGIseCl7aWYo'@;
put 'IXRoaXMuYWJvcnRlZCYmIWxlKHRoaXMseCkpaWYodGhpcy5wYXVzZWQpdGhpcy5fZW1pdFF1ZXVlLnB1c2goW2IseF0pO2Vsc2V7dmFyIE49Ryh4KT94OnRoaXMuX21ha2VBYnMoeCk7aWYodGhpcy5tYXJrJiYoeD10aGlzLl9tYXJrKHgpKSx0aGlzLmFic29sdXRlJiYoeD1OKSwhdGhpcy5t'@;
put 'YXRjaGVzW2JdW3hdKXtpZih0aGlzLm5vZGlyKXt2YXIgRj10aGlzLmNhY2hlW05dO2lmKCJESVIiPT09Rnx8QXJyYXkuaXNBcnJheShGKSlyZXR1cm59dGhpcy5tYXRjaGVzW2JdW3hdPSEwO3ZhciBnPXRoaXMuc3RhdENhY2hlW05dO2cmJnRoaXMuZW1pdCgic3RhdCIseCxnKSx0aGlzLmVt'@;
put 'aXQoIm1hdGNoIix4KX19fSxZLnByb3RvdHlwZS5fcmVhZGRpckluR2xvYlN0YXI9ZnVuY3Rpb24oYix4KXtpZighdGhpcy5hYm9ydGVkKXtpZih0aGlzLmZvbGxvdylyZXR1cm4gdGhpcy5fcmVhZGRpcihiLCExLHgpO3ZhciBOPXRoaXMsRj1uZSgibHN0YXRcMCIrYixmdW5jdGlvbihnLEMp'@;
put 'e2lmKGcmJiJFTk9FTlQiPT09Zy5jb2RlKXJldHVybiB4KCk7dmFyIE09QyYmQy5pc1N5bWJvbGljTGluaygpO04uc3ltbGlua3NbYl09TSxNfHwhQ3x8Qy5pc0RpcmVjdG9yeSgpP04uX3JlYWRkaXIoYiwhMSx4KTooTi5jYWNoZVtiXT0iRklMRSIseCgpKX0pO0YmJk4uZnMubHN0YXQoYixG'@;
put 'KX19LFkucHJvdG90eXBlLl9yZWFkZGlyPWZ1bmN0aW9uKGIseCxOKXtpZighdGhpcy5hYm9ydGVkJiYoTj1uZSgicmVhZGRpclwwIitiKyJcMCIreCxOKSkpe2lmKHgmJiF0ZSh0aGlzLnN5bWxpbmtzLGIpKXJldHVybiB0aGlzLl9yZWFkZGlySW5HbG9iU3RhcihiLE4pO2lmKHRlKHRoaXMu'@;
put 'Y2FjaGUsYikpe3ZhciBGPXRoaXMuY2FjaGVbYl07aWYoIUZ8fCJGSUxFIj09PUYpcmV0dXJuIE4oKTtpZihBcnJheS5pc0FycmF5KEYpKXJldHVybiBOKG51bGwsRil9dGhpcy5mcy5yZWFkZGlyKGIsKGc9dGhpcyxDPWIsTT1OLGZ1bmN0aW9uKHkscCl7eT9nLl9yZWFkZGlyRXJyb3IoQyx5'@;
put 'LE0pOmcuX3JlYWRkaXJFbnRyaWVzKEMscCxNKX0pKX12YXIgZyxDLE19LFkucHJvdG90eXBlLl9yZWFkZGlyRW50cmllcz1mdW5jdGlvbihiLHgsTil7aWYoIXRoaXMuYWJvcnRlZCl7aWYoIXRoaXMubWFyayYmIXRoaXMuc3RhdClmb3IodmFyIEY9MDtGPHgubGVuZ3RoO0YrKyl7dmFyIGc9'@;
put 'eFtGXTt0aGlzLmNhY2hlW2c9Ii8iPT09Yj9iK2c6YisiLyIrZ109ITB9cmV0dXJuIHRoaXMuY2FjaGVbYl09eCxOKG51bGwseCl9fSxZLnByb3RvdHlwZS5fcmVhZGRpckVycm9yPWZ1bmN0aW9uKGIseCxOKXtpZighdGhpcy5hYm9ydGVkKXtzd2l0Y2goeC5jb2RlKXtjYXNlIkVOT1RTVVAi'@;
put 'OmNhc2UiRU5PVERJUiI6dmFyIEY9dGhpcy5fbWFrZUFicyhiKTtpZih0aGlzLmNhY2hlW0ZdPSJGSUxFIixGPT09dGhpcy5jd2RBYnMpe3ZhciBnPW5ldyBFcnJvcih4LmNvZGUrIiBpbnZhbGlkIGN3ZCAiK3RoaXMuY3dkKTtnLnBhdGg9dGhpcy5jd2QsZy5jb2RlPXguY29kZSx0aGlzLmVt'@;
put 'aXQoImVycm9yIixnKSx0aGlzLmFib3J0KCl9YnJlYWs7Y2FzZSJFTk9FTlQiOmNhc2UiRUxPT1AiOmNhc2UiRU5BTUVUT09MT05HIjpjYXNlIlVOS05PV04iOnRoaXMuY2FjaGVbdGhpcy5fbWFrZUFicyhiKV09ITE7YnJlYWs7ZGVmYXVsdDp0aGlzLmNhY2hlW3RoaXMuX21ha2VBYnMoYild'@;
put 'PSExLHRoaXMuc3RyaWN0JiYodGhpcy5lbWl0KCJlcnJvciIseCksdGhpcy5hYm9ydCgpKSx0aGlzLnNpbGVudHx8Si5lcnJvcigiZ2xvYiBlcnJvciIseCl9cmV0dXJuIE4oKX19LFkucHJvdG90eXBlLl9wcm9jZXNzR2xvYlN0YXI9ZnVuY3Rpb24oYix4LE4sRixnLEMsTSl7dmFyIHk9dGhp'@;
put 'czt0aGlzLl9yZWFkZGlyKE4sQyxmdW5jdGlvbihwLFMpe3kuX3Byb2Nlc3NHbG9iU3RhcjIoYix4LE4sRixnLEMsUyxNKX0pfSxZLnByb3RvdHlwZS5fcHJvY2Vzc0dsb2JTdGFyMj1mdW5jdGlvbihiLHgsTixGLGcsQyxNLHkpe2lmKCFNKXJldHVybiB5KCk7dmFyIHA9Ri5zbGljZSgxKSxT'@;
put 'PWI/W2JdOltdLFE9Uy5jb25jYXQocCk7dGhpcy5fcHJvY2VzcyhRLGcsITEseSk7dmFyIGZlPU0ubGVuZ3RoO2lmKHRoaXMuc3ltbGlua3NbTl0mJkMpcmV0dXJuIHkoKTtmb3IodmFyIG1lPTA7bWU8ZmU7bWUrKylpZigiLiIhPT1NW21lXS5jaGFyQXQoMCl8fHRoaXMuZG90KXt2YXIga2U9'@;
put 'Uy5jb25jYXQoTVttZV0scCk7dGhpcy5fcHJvY2VzcyhrZSxnLCEwLHkpO3ZhciBUZT1TLmNvbmNhdChNW21lXSxGKTt0aGlzLl9wcm9jZXNzKFRlLGcsITAseSl9eSgpfSxZLnByb3RvdHlwZS5fcHJvY2Vzc1NpbXBsZT1mdW5jdGlvbihiLHgsTil7dmFyIEY9dGhpczt0aGlzLl9zdGF0KGIs'@;
put 'ZnVuY3Rpb24oZyxDKXtGLl9wcm9jZXNzU2ltcGxlMihiLHgsZyxDLE4pfSl9LFkucHJvdG90eXBlLl9wcm9jZXNzU2ltcGxlMj1mdW5jdGlvbihiLHgsTixGLGcpe2lmKHRoaXMubWF0Y2hlc1t4XXx8KHRoaXMubWF0Y2hlc1t4XT1PYmplY3QuY3JlYXRlKG51bGwpKSwhRilyZXR1cm4gZygp'@;
put 'O2lmKGImJkcoYikmJiF0aGlzLm5vbW91bnQpe3ZhciBDPS9bXC9cXF0kLy50ZXN0KGIpOyIvIj09PWIuY2hhckF0KDApP2I9ai5qb2luKHRoaXMucm9vdCxiKTooYj1qLnJlc29sdmUodGhpcy5yb290LGIpLEMmJihiKz0iLyIpKX0id2luMzIiPT09Sy5wbGF0Zm9ybSYmKGI9Yi5yZXBsYWNl'@;
put 'KC9cXC9nLCIvIikpLHRoaXMuX2VtaXRNYXRjaCh4LGIpLGcoKX0sWS5wcm90b3R5cGUuX3N0YXQ9ZnVuY3Rpb24oYix4KXt2YXIgTj10aGlzLl9tYWtlQWJzKGIpLEY9Ii8iPT09Yi5zbGljZSgtMSk7aWYoYi5sZW5ndGg+dGhpcy5tYXhMZW5ndGgpcmV0dXJuIHgoKTtpZighdGhpcy5zdGF0'@;
put 'JiZ0ZSh0aGlzLmNhY2hlLE4pKXt2YXIgZz10aGlzLmNhY2hlW05dO2lmKEFycmF5LmlzQXJyYXkoZykmJihnPSJESVIiKSwhRnx8IkRJUiI9PT1nKXJldHVybiB4KG51bGwsZyk7aWYoRiYmIkZJTEUiPT09ZylyZXR1cm4geCgpfXZhciBDPXRoaXMuc3RhdENhY2hlW05dO2lmKHZvaWQgMCE9'@;
put 'PUMpe2lmKCExPT09QylyZXR1cm4geChudWxsLEMpO3ZhciBNPUMuaXNEaXJlY3RvcnkoKT8iRElSIjoiRklMRSI7cmV0dXJuIEYmJiJGSUxFIj09PU0/eCgpOngobnVsbCxNLEMpfXZhciB5PXRoaXMscD1uZSgic3RhdFwwIitOLGZ1bmN0aW9uKFMsUSl7aWYoUSYmUS5pc1N5bWJvbGljTGlu'@;
put 'aygpKXJldHVybiB5LmZzLnN0YXQoTixmdW5jdGlvbihyZSxmZSl7cmU/eS5fc3RhdDIoYixOLG51bGwsUSx4KTp5Ll9zdGF0MihiLE4scmUsZmUseCl9KTt5Ll9zdGF0MihiLE4sUyxRLHgpfSk7cCYmeS5mcy5sc3RhdChOLHApfSxZLnByb3RvdHlwZS5fc3RhdDI9ZnVuY3Rpb24oYix4LE4s'@;
put 'RixnKXtpZihOJiYoIkVOT0VOVCI9PT1OLmNvZGV8fCJFTk9URElSIj09PU4uY29kZSkpcmV0dXJuIHRoaXMuc3RhdENhY2hlW3hdPSExLGcoKTt2YXIgQz0iLyI9PT1iLnNsaWNlKC0xKTtpZih0aGlzLnN0YXRDYWNoZVt4XT1GLCIvIj09PXguc2xpY2UoLTEpJiZGJiYhRi5pc0RpcmVjdG9y'@;
put 'eSgpKXJldHVybiBnKG51bGwsITEsRik7dmFyIE09ITA7cmV0dXJuIEYmJihNPUYuaXNEaXJlY3RvcnkoKT8iRElSIjoiRklMRSIpLHRoaXMuY2FjaGVbeF09dGhpcy5jYWNoZVt4XXx8TSxDJiYiRklMRSI9PT1NP2coKTpnKG51bGwsTSxGKX19LDQ3NTE6KEgsQixMKT0+e3ZhciBLPUwoNTEw'@;
put 'OCksSj1MKDQxNTUpO0guZXhwb3J0cz10ZSx0ZS5HbG9iU3luYz1uZTt2YXIgST1MKDczMzQpLFI9TCgxMTcxKSxFPShMKDI4ODQpLEwoOTUzOSksTCgyNTIwKSksej1MKDkyODIpLGo9TCg0MDk1KSxWPUwoNjc3MiksRz1WLnNldG9wdHMsVz1WLm93blByb3AsVT1WLmNoaWxkcmVuSWdub3Jl'@;
put 'ZCxxPVYuaXNJZ25vcmVkO2Z1bmN0aW9uIHRlKGllLGxlKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgbGV8fDM9PT1hcmd1bWVudHMubGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIHByb3ZpZGVkIHRvIHN5bmMgZ2xvYlxuU2VlOiBodHRwczovL2dpdGh1Yi5jb20vaXNhYWNz'@;
put 'L25vZGUtZ2xvYi9pc3N1ZXMvMTY3Iik7cmV0dXJuIG5ldyBuZShpZSxsZSkuZm91bmR9ZnVuY3Rpb24gbmUoaWUsbGUpe2lmKCFpZSl0aHJvdyBuZXcgRXJyb3IoIm11c3QgcHJvdmlkZSBwYXR0ZXJuIik7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGxlfHwzPT09YXJndW1lbnRzLmxlbmd0aCl0'@;
put 'aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBwcm92aWRlZCB0byBzeW5jIGdsb2JcblNlZTogaHR0cHM6Ly9naXRodWIuY29tL2lzYWFjcy9ub2RlLWdsb2IvaXNzdWVzLzE2NyIpO2lmKCEodGhpcyBpbnN0YW5jZW9mIG5lKSlyZXR1cm4gbmV3IG5lKGllLGxlKTtpZihHKHRoaXMsaWUs'@;
put 'bGUpLHRoaXMubm9wcm9jZXNzKXJldHVybiB0aGlzO3ZhciBkZT10aGlzLm1pbmltYXRjaC5zZXQubGVuZ3RoO3RoaXMubWF0Y2hlcz1uZXcgQXJyYXkoZGUpO2Zvcih2YXIgdWU9MDt1ZTxkZTt1ZSsrKXRoaXMuX3Byb2Nlc3ModGhpcy5taW5pbWF0Y2guc2V0W3VlXSx1ZSwhMSk7dGhpcy5f'@;
put 'ZmluaXNoKCl9bmUucHJvdG90eXBlLl9maW5pc2g9ZnVuY3Rpb24oKXtpZih6Lm9rKHRoaXMgaW5zdGFuY2VvZiBuZSksdGhpcy5yZWFscGF0aCl7dmFyIGllPXRoaXM7dGhpcy5tYXRjaGVzLmZvckVhY2goZnVuY3Rpb24obGUsZGUpe3ZhciB1ZT1pZS5tYXRjaGVzW2RlXT1PYmplY3QuY3Jl'@;
put 'YXRlKG51bGwpO2Zvcih2YXIgY2UgaW4gbGUpdHJ5e2NlPWllLl9tYWtlQWJzKGNlKSx1ZVtJLnJlYWxwYXRoU3luYyhjZSxpZS5yZWFscGF0aENhY2hlKV09ITB9Y2F0Y2goWSl7aWYoInN0YXQiIT09WS5zeXNjYWxsKXRocm93IFk7dWVbaWUuX21ha2VBYnMoY2UpXT0hMH19KX1WLmZpbmlz'@;
put 'aCh0aGlzKX0sbmUucHJvdG90eXBlLl9wcm9jZXNzPWZ1bmN0aW9uKGllLGxlLGRlKXt6Lm9rKHRoaXMgaW5zdGFuY2VvZiBuZSk7Zm9yKHZhciB1ZSxjZT0wOyJzdHJpbmciPT10eXBlb2YgaWVbY2VdOyljZSsrO3N3aXRjaChjZSl7Y2FzZSBpZS5sZW5ndGg6cmV0dXJuIHZvaWQgdGhpcy5f'@;
put 'cHJvY2Vzc1NpbXBsZShpZS5qb2luKCIvIiksbGUpO2Nhc2UgMDp1ZT1udWxsO2JyZWFrO2RlZmF1bHQ6dWU9aWUuc2xpY2UoMCxjZSkuam9pbigiLyIpfXZhciBZLGI9aWUuc2xpY2UoY2UpO251bGw9PT11ZT9ZPSIuIjooKGoodWUpfHxqKGllLm1hcChmdW5jdGlvbihOKXtyZXR1cm4ic3Ry'@;
put 'aW5nIj09dHlwZW9mIE4/TjoiWypdIn0pLmpvaW4oIi8iKSkpJiYodWUmJmoodWUpfHwodWU9Ii8iK3VlKSksWT11ZSk7dmFyIHg9dGhpcy5fbWFrZUFicyhZKTtVKHRoaXMsWSl8fChiWzBdPT09Ui5HTE9CU1RBUj90aGlzLl9wcm9jZXNzR2xvYlN0YXIodWUsWSx4LGIsbGUsZGUpOnRoaXMu'@;
put 'X3Byb2Nlc3NSZWFkZGlyKHVlLFkseCxiLGxlLGRlKSl9LG5lLnByb3RvdHlwZS5fcHJvY2Vzc1JlYWRkaXI9ZnVuY3Rpb24oaWUsbGUsZGUsdWUsY2UsWSl7dmFyIGI9dGhpcy5fcmVhZGRpcihkZSxZKTtpZihiKXtmb3IodmFyIHg9dWVbMF0sTj0hIXRoaXMubWluaW1hdGNoLm5lZ2F0ZSxn'@;
put 'PXRoaXMuZG90fHwiLiI9PT14Ll9nbG9iLmNoYXJBdCgwKSxDPVtdLE09MDtNPGIubGVuZ3RoO00rKykoIi4iIT09KFM9YltNXSkuY2hhckF0KDApfHxnKSYmKE4mJiFpZT8hUy5tYXRjaCh4KTpTLm1hdGNoKHgpKSYmQy5wdXNoKFMpO3ZhciB5PUMubGVuZ3RoO2lmKDAhPT15KWlmKDEhPT11'@;
put 'ZS5sZW5ndGh8fHRoaXMubWFya3x8dGhpcy5zdGF0KWZvcih1ZS5zaGlmdCgpLE09MDtNPHk7TSsrKVM9Q1tNXSx0aGlzLl9wcm9jZXNzKChpZT9baWUsU106W1NdKS5jb25jYXQodWUpLGNlLFkpO2Vsc2UgZm9yKHRoaXMubWF0Y2hlc1tjZV18fCh0aGlzLm1hdGNoZXNbY2VdPU9iamVjdC5j'@;
put 'cmVhdGUobnVsbCkpLE09MDtNPHk7TSsrKXt2YXIgUz1DW01dO2llJiYoUz0iLyIhPT1pZS5zbGljZSgtMSk/aWUrIi8iK1M6aWUrUyksIi8iIT09Uy5jaGFyQXQoMCl8fHRoaXMubm9tb3VudHx8KFM9RS5qb2luKHRoaXMucm9vdCxTKSksdGhpcy5fZW1pdE1hdGNoKGNlLFMpfX19LG5lLnBy'@;
put 'b3RvdHlwZS5fZW1pdE1hdGNoPWZ1bmN0aW9uKGllLGxlKXtpZighcSh0aGlzLGxlKSl7dmFyIGRlPXRoaXMuX21ha2VBYnMobGUpO2lmKHRoaXMubWFyayYmKGxlPXRoaXMuX21hcmsobGUpKSx0aGlzLmFic29sdXRlJiYobGU9ZGUpLCF0aGlzLm1hdGNoZXNbaWVdW2xlXSl7aWYodGhpcy5u'@;
put 'b2Rpcil7dmFyIHVlPXRoaXMuY2FjaGVbZGVdO2lmKCJESVIiPT09dWV8fEFycmF5LmlzQXJyYXkodWUpKXJldHVybn10aGlzLm1hdGNoZXNbaWVdW2xlXT0hMCx0aGlzLnN0YXQmJnRoaXMuX3N0YXQobGUpfX19LG5lLnByb3RvdHlwZS5fcmVhZGRpckluR2xvYlN0YXI9ZnVuY3Rpb24oaWUp'@;
put 'e2lmKHRoaXMuZm9sbG93KXJldHVybiB0aGlzLl9yZWFkZGlyKGllLCExKTt2YXIgbGUsZGU7dHJ5e2RlPXRoaXMuZnMubHN0YXRTeW5jKGllKX1jYXRjaChjZSl7aWYoIkVOT0VOVCI9PT1jZS5jb2RlKXJldHVybiBudWxsfXZhciB1ZT1kZSYmZGUuaXNTeW1ib2xpY0xpbmsoKTtyZXR1cm4g'@;
put 'dGhpcy5zeW1saW5rc1tpZV09dWUsdWV8fCFkZXx8ZGUuaXNEaXJlY3RvcnkoKT9sZT10aGlzLl9yZWFkZGlyKGllLCExKTp0aGlzLmNhY2hlW2llXT0iRklMRSIsbGV9LG5lLnByb3RvdHlwZS5fcmVhZGRpcj1mdW5jdGlvbihpZSxsZSl7aWYobGUmJiFXKHRoaXMuc3ltbGlua3MsaWUpKXJl'@;
put 'dHVybiB0aGlzLl9yZWFkZGlySW5HbG9iU3RhcihpZSk7aWYoVyh0aGlzLmNhY2hlLGllKSl7dmFyIGRlPXRoaXMuY2FjaGVbaWVdO2lmKCFkZXx8IkZJTEUiPT09ZGUpcmV0dXJuIG51bGw7aWYoQXJyYXkuaXNBcnJheShkZSkpcmV0dXJuIGRlfXRyeXtyZXR1cm4gdGhpcy5fcmVhZGRpckVu'@;
put 'dHJpZXMoaWUsdGhpcy5mcy5yZWFkZGlyU3luYyhpZSkpfWNhdGNoKHVlKXtyZXR1cm4gdGhpcy5fcmVhZGRpckVycm9yKGllLHVlKSxudWxsfX0sbmUucHJvdG90eXBlLl9yZWFkZGlyRW50cmllcz1mdW5jdGlvbihpZSxsZSl7aWYoIXRoaXMubWFyayYmIXRoaXMuc3RhdClmb3IodmFyIGRl'@;
put 'PTA7ZGU8bGUubGVuZ3RoO2RlKyspe3ZhciB1ZT1sZVtkZV07dGhpcy5jYWNoZVt1ZT0iLyI9PT1pZT9pZSt1ZTppZSsiLyIrdWVdPSEwfXJldHVybiB0aGlzLmNhY2hlW2llXT1sZSxsZX0sbmUucHJvdG90eXBlLl9yZWFkZGlyRXJyb3I9ZnVuY3Rpb24oaWUsbGUpe3N3aXRjaChsZS5jb2Rl'@;
put 'KXtjYXNlIkVOT1RTVVAiOmNhc2UiRU5PVERJUiI6dmFyIGRlPXRoaXMuX21ha2VBYnMoaWUpO2lmKHRoaXMuY2FjaGVbZGVdPSJGSUxFIixkZT09PXRoaXMuY3dkQWJzKXt2YXIgdWU9bmV3IEVycm9yKGxlLmNvZGUrIiBpbnZhbGlkIGN3ZCAiK3RoaXMuY3dkKTt0aHJvdyB1ZS5wYXRoPXRo'@;
put 'aXMuY3dkLHVlLmNvZGU9bGUuY29kZSx1ZX1icmVhaztjYXNlIkVOT0VOVCI6Y2FzZSJFTE9PUCI6Y2FzZSJFTkFNRVRPT0xPTkciOmNhc2UiVU5LTk9XTiI6dGhpcy5jYWNoZVt0aGlzLl9tYWtlQWJzKGllKV09ITE7YnJlYWs7ZGVmYXVsdDppZih0aGlzLmNhY2hlW3RoaXMuX21ha2VBYnMo'@;
put 'aWUpXT0hMSx0aGlzLnN0cmljdCl0aHJvdyBsZTt0aGlzLnNpbGVudHx8Sy5lcnJvcigiZ2xvYiBlcnJvciIsbGUpfX0sbmUucHJvdG90eXBlLl9wcm9jZXNzR2xvYlN0YXI9ZnVuY3Rpb24oaWUsbGUsZGUsdWUsY2UsWSl7dmFyIGI9dGhpcy5fcmVhZGRpcihkZSxZKTtpZihiKXt2YXIgeD11'@;
put 'ZS5zbGljZSgxKSxOPWllP1tpZV06W10sRj1OLmNvbmNhdCh4KTt0aGlzLl9wcm9jZXNzKEYsY2UsITEpO3ZhciBnPWIubGVuZ3RoO2lmKCF0aGlzLnN5bWxpbmtzW2RlXXx8IVkpZm9yKHZhciBDPTA7QzxnO0MrKylpZigiLiIhPT1iW0NdLmNoYXJBdCgwKXx8dGhpcy5kb3Qpe3ZhciBNPU4u'@;
put 'Y29uY2F0KGJbQ10seCk7dGhpcy5fcHJvY2VzcyhNLGNlLCEwKTt2YXIgeT1OLmNvbmNhdChiW0NdLHVlKTt0aGlzLl9wcm9jZXNzKHksY2UsITApfX19LG5lLnByb3RvdHlwZS5fcHJvY2Vzc1NpbXBsZT1mdW5jdGlvbihpZSxsZSl7dmFyIGRlPXRoaXMuX3N0YXQoaWUpO2lmKHRoaXMubWF0'@;
put 'Y2hlc1tsZV18fCh0aGlzLm1hdGNoZXNbbGVdPU9iamVjdC5jcmVhdGUobnVsbCkpLGRlKXtpZihpZSYmaihpZSkmJiF0aGlzLm5vbW91bnQpe3ZhciB1ZT0vW1wvXFxdJC8udGVzdChpZSk7Ii8iPT09aWUuY2hhckF0KDApP2llPUUuam9pbih0aGlzLnJvb3QsaWUpOihpZT1FLnJlc29sdmUo'@;
put 'dGhpcy5yb290LGllKSx1ZSYmKGllKz0iLyIpKX0id2luMzIiPT09Si5wbGF0Zm9ybSYmKGllPWllLnJlcGxhY2UoL1xcL2csIi8iKSksdGhpcy5fZW1pdE1hdGNoKGxlLGllKX19LG5lLnByb3RvdHlwZS5fc3RhdD1mdW5jdGlvbihpZSl7dmFyIGxlPXRoaXMuX21ha2VBYnMoaWUpLGRlPSIv'@;
put 'Ij09PWllLnNsaWNlKC0xKTtpZihpZS5sZW5ndGg+dGhpcy5tYXhMZW5ndGgpcmV0dXJuITE7aWYoIXRoaXMuc3RhdCYmVyh0aGlzLmNhY2hlLGxlKSl7dmFyIHVlPXRoaXMuY2FjaGVbbGVdO2lmKEFycmF5LmlzQXJyYXkodWUpJiYodWU9IkRJUiIpLCFkZXx8IkRJUiI9PT11ZSlyZXR1cm4g'@;
put 'dWU7aWYoZGUmJiJGSUxFIj09PXVlKXJldHVybiExfXZhciBjZT10aGlzLnN0YXRDYWNoZVtsZV07aWYoIWNlKXt2YXIgWTt0cnl7WT10aGlzLmZzLmxzdGF0U3luYyhsZSl9Y2F0Y2goYil7aWYoYiYmKCJFTk9FTlQiPT09Yi5jb2RlfHwiRU5PVERJUiI9PT1iLmNvZGUpKXJldHVybiB0aGlz'@;
put 'LnN0YXRDYWNoZVtsZV09ITEsITF9aWYoWSYmWS5pc1N5bWJvbGljTGluaygpKXRyeXtjZT10aGlzLmZzLnN0YXRTeW5jKGxlKX1jYXRjaHtjZT1ZfWVsc2UgY2U9WX1yZXR1cm4gdGhpcy5zdGF0Q2FjaGVbbGVdPWNlLHVlPSEwLGNlJiYodWU9Y2UuaXNEaXJlY3RvcnkoKT8iRElSIjoiRklM'@;
put 'RSIpLHRoaXMuY2FjaGVbbGVdPXRoaXMuY2FjaGVbbGVdfHx1ZSwoIWRlfHwiRklMRSIhPT11ZSkmJnVlfSxuZS5wcm90b3R5cGUuX21hcms9ZnVuY3Rpb24oaWUpe3JldHVybiBWLm1hcmsodGhpcyxpZSl9LG5lLnByb3RvdHlwZS5fbWFrZUFicz1mdW5jdGlvbihpZSl7cmV0dXJuIFYubWFr'@;
put 'ZUFicyh0aGlzLGllKX19LDcyOTY6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSz1MKDIxMCkoIiVPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJSIsITApO2lmKEspdHJ5e0soW10sImxlbmd0aCIpfWNhdGNoe0s9bnVsbH1ILmV4cG9ydHM9S30sNjQ1ODpIPT57InVzZSBzdHJp'@;
put 'Y3QiO0guZXhwb3J0cz1mdW5jdGlvbihMKXtpZihudWxsPT09THx8Im9iamVjdCIhPXR5cGVvZiBMKXJldHVybiBMO2lmKEwgaW5zdGFuY2VvZiBPYmplY3QpdmFyIEs9e19fcHJvdG9fXzpCKEwpfTtlbHNlIEs9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gT2JqZWN0LmdldE93blByb3Bl'@;
put 'cnR5TmFtZXMoTCkuZm9yRWFjaChmdW5jdGlvbihKKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoSyxKLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTCxKKSl9KSxLfTt2YXIgQj1PYmplY3QuZ2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKEwpe3JldHVybiBMLl9fcHJvdG9fX319LDc3'@;
put 'OihILEIsTCk9Pnt2YXIgSyxKLEk9TCg0MTU1KSxSPUwoNTEwOCksRT1MKDU0NDMpLHo9TCgyMTYxKSxqPUwoODUyMCksVj1MKDY0NTgpLEc9TCg5NTM5KTtmdW5jdGlvbiBXKHVlLGNlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodWUsSyx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNlfX0pfSJm'@;
put 'dW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wuZm9yPyhLPVN5bWJvbC5mb3IoImdyYWNlZnVsLWZzLnF1ZXVlIiksSj1TeW1ib2wuZm9yKCJncmFjZWZ1bC1mcy5wcmV2aW91cyIpKTooSz0iX19fZ3JhY2VmdWwtZnMucXVldWUiLEo9Il9fX2dyYWNl'@;
put 'ZnVsLWZzLnByZXZpb3VzIik7dmFyIFUscT1mdW5jdGlvbigpe307ZnVuY3Rpb24gbmUodWUpe3oodWUpLHVlLmdyYWNlZnVsaWZ5PW5lLHVlLmNyZWF0ZVJlYWRTdHJlYW09ZnVuY3Rpb24obWUsa2Upe3JldHVybiBuZXcgdWUuUmVhZFN0cmVhbShtZSxrZSl9LHVlLmNyZWF0ZVdyaXRlU3Ry'@;
put 'ZWFtPWZ1bmN0aW9uKG1lLGtlKXtyZXR1cm4gbmV3IHVlLldyaXRlU3RyZWFtKG1lLGtlKX07dmFyIGNlPXVlLnJlYWRGaWxlO3VlLnJlYWRGaWxlPWZ1bmN0aW9uKG1lLGtlLFRlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Yga2UmJihUZT1rZSxrZT1udWxsKSxmdW5jdGlvbiBQZShGZSxO'@;
put 'ZSxMZSxCZSl7cmV0dXJuIGNlKEZlLE5lLGZ1bmN0aW9uKEhlKXshSGV8fCJFTUZJTEUiIT09SGUuY29kZSYmIkVORklMRSIhPT1IZS5jb2RlPyJmdW5jdGlvbiI9PXR5cGVvZiBMZSYmTGUuYXBwbHkodGhpcyxhcmd1bWVudHMpOmllKFtQZSxbRmUsTmUsTGVdLEhlLEJlfHxEYXRlLm5vdygp'@;
put 'LERhdGUubm93KCldKX0pfShtZSxrZSxUZSl9O3ZhciBZPXVlLndyaXRlRmlsZTt1ZS53cml0ZUZpbGU9ZnVuY3Rpb24obWUsa2UsVGUsUGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBUZSYmKFBlPVRlLFRlPW51bGwpLGZ1bmN0aW9uIEZlKE5lLExlLEJlLEhlLFFlKXtyZXR1cm4gWShO'@;
put 'ZSxMZSxCZSxmdW5jdGlvbihtdCl7IW10fHwiRU1GSUxFIiE9PW10LmNvZGUmJiJFTkZJTEUiIT09bXQuY29kZT8iZnVuY3Rpb24iPT10eXBlb2YgSGUmJkhlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTppZShbRmUsW05lLExlLEJlLEhlXSxtdCxRZXx8RGF0ZS5ub3coKSxEYXRlLm5vdygpXSl9'@;
put 'KX0obWUsa2UsVGUsUGUpfTt2YXIgYj11ZS5hcHBlbmRGaWxlO2ImJih1ZS5hcHBlbmRGaWxlPWZ1bmN0aW9uKG1lLGtlLFRlLFBlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgVGUmJihQZT1UZSxUZT1udWxsKSxmdW5jdGlvbiBGZShOZSxMZSxCZSxIZSxRZSl7cmV0dXJuIGIoTmUsTGUs'@;
put 'QmUsZnVuY3Rpb24obXQpeyFtdHx8IkVNRklMRSIhPT1tdC5jb2RlJiYiRU5GSUxFIiE9PW10LmNvZGU/ImZ1bmN0aW9uIj09dHlwZW9mIEhlJiZIZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6aWUoW0ZlLFtOZSxMZSxCZSxIZV0sbXQsUWV8fERhdGUubm93KCksRGF0ZS5ub3coKV0pfSl9KG1l'@;
put 'LGtlLFRlLFBlKX0pO3ZhciB4PXVlLmNvcHlGaWxlO3gmJih1ZS5jb3B5RmlsZT1mdW5jdGlvbihtZSxrZSxUZSxQZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFRlJiYoUGU9VGUsVGU9MCksZnVuY3Rpb24gRmUoTmUsTGUsQmUsSGUsUWUpe3JldHVybiB4KE5lLExlLEJlLGZ1bmN0aW9u'@;
put 'KG10KXshbXR8fCJFTUZJTEUiIT09bXQuY29kZSYmIkVORklMRSIhPT1tdC5jb2RlPyJmdW5jdGlvbiI9PXR5cGVvZiBIZSYmSGUuYXBwbHkodGhpcyxhcmd1bWVudHMpOmllKFtGZSxbTmUsTGUsQmUsSGVdLG10LFFlfHxEYXRlLm5vdygpLERhdGUubm93KCldKX0pfShtZSxrZSxUZSxQZSl9'@;
put 'KTt2YXIgTj11ZS5yZWFkZGlyO3VlLnJlYWRkaXI9ZnVuY3Rpb24obWUsa2UsVGUpeyJmdW5jdGlvbiI9PXR5cGVvZiBrZSYmKFRlPWtlLGtlPW51bGwpO3ZhciBQZT1GLnRlc3QoSS52ZXJzaW9uKT9mdW5jdGlvbihOZSxMZSxCZSxIZSl7cmV0dXJuIE4oTmUsRmUoTmUsTGUsQmUsSGUpKX06'@;
put 'ZnVuY3Rpb24oTmUsTGUsQmUsSGUpe3JldHVybiBOKE5lLExlLEZlKE5lLExlLEJlLEhlKSl9O3JldHVybiBQZShtZSxrZSxUZSk7ZnVuY3Rpb24gRmUoTmUsTGUsQmUsSGUpe3JldHVybiBmdW5jdGlvbihRZSxtdCl7IVFlfHwiRU1GSUxFIiE9PVFlLmNvZGUmJiJFTkZJTEUiIT09UWUuY29k'@;
put 'ZT8obXQmJm10LnNvcnQmJm10LnNvcnQoKSwiZnVuY3Rpb24iPT10eXBlb2YgQmUmJkJlLmNhbGwodGhpcyxRZSxtdCkpOmllKFtQZSxbTmUsTGUsQmVdLFFlLEhlfHxEYXRlLm5vdygpLERhdGUubm93KCldKX19fTt2YXIgRj0vXnZbMC01XVwuLztpZigidjAuOCI9PT1JLnZlcnNpb24uc3Vi'@;
put 'c3RyKDAsNCkpe3ZhciBnPWoodWUpO1M9Zy5SZWFkU3RyZWFtLFE9Zy5Xcml0ZVN0cmVhbX12YXIgQz11ZS5SZWFkU3RyZWFtO0MmJihTLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEMucHJvdG90eXBlKSxTLnByb3RvdHlwZS5vcGVuPWZ1bmN0aW9uKCl7dmFyIG1lPXRoaXM7ZmUobWUucGF0'@;
put 'aCxtZS5mbGFncyxtZS5tb2RlLGZ1bmN0aW9uKGtlLFRlKXtrZT8obWUuYXV0b0Nsb3NlJiZtZS5kZXN0cm95KCksbWUuZW1pdCgiZXJyb3IiLGtlKSk6KG1lLmZkPVRlLG1lLmVtaXQoIm9wZW4iLFRlKSxtZS5yZWFkKCkpfSl9KTt2YXIgTT11ZS5Xcml0ZVN0cmVhbTtNJiYoUS5wcm90b3R5'@;
put 'cGU9T2JqZWN0LmNyZWF0ZShNLnByb3RvdHlwZSksUS5wcm90b3R5cGUub3Blbj1mdW5jdGlvbigpe3ZhciBtZT10aGlzO2ZlKG1lLnBhdGgsbWUuZmxhZ3MsbWUubW9kZSxmdW5jdGlvbihrZSxUZSl7a2U/KG1lLmRlc3Ryb3koKSxtZS5lbWl0KCJlcnJvciIsa2UpKToobWUuZmQ9VGUsbWUu'@;
put 'ZW1pdCgib3BlbiIsVGUpKX0pfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHVlLCJSZWFkU3RyZWFtIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFN9LHNldDpmdW5jdGlvbihtZSl7Uz1tZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodWUs'@;
put 'IldyaXRlU3RyZWFtIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFF9LHNldDpmdW5jdGlvbihtZSl7UT1tZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KTt2YXIgeT1TO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh1ZSwiRmlsZVJlYWRTdHJlYW0iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4geX0sc2V0OmZ1bmN0aW9uKG1lKXt5PW1lfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pO3ZhciBwPVE7ZnVuY3Rpb24gUyhtZSxrZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBTPyhDLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzKTpTLmFwcGx5KE9iamVjdC5jcmVhdGUo'@;
put 'Uy5wcm90b3R5cGUpLGFyZ3VtZW50cyl9ZnVuY3Rpb24gUShtZSxrZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBRPyhNLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzKTpRLmFwcGx5KE9iamVjdC5jcmVhdGUoUS5wcm90b3R5cGUpLGFyZ3VtZW50cyl9T2JqZWN0LmRlZmluZVByb3BlcnR5'@;
put 'KHVlLCJGaWxlV3JpdGVTdHJlYW0iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcH0sc2V0OmZ1bmN0aW9uKG1lKXtwPW1lfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pO3ZhciByZT11ZS5vcGVuO2Z1bmN0aW9uIGZlKG1lLGtlLFRlLFBlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBl'@;
put 'b2YgVGUmJihQZT1UZSxUZT1udWxsKSxmdW5jdGlvbiBGZShOZSxMZSxCZSxIZSxRZSl7cmV0dXJuIHJlKE5lLExlLEJlLGZ1bmN0aW9uKG10LEtlKXshbXR8fCJFTUZJTEUiIT09bXQuY29kZSYmIkVORklMRSIhPT1tdC5jb2RlPyJmdW5jdGlvbiI9PXR5cGVvZiBIZSYmSGUuYXBwbHkodGhp'@;
put 'cyxhcmd1bWVudHMpOmllKFtGZSxbTmUsTGUsQmUsSGVdLG10LFFlfHxEYXRlLm5vdygpLERhdGUubm93KCldKX0pfShtZSxrZSxUZSxQZSl9cmV0dXJuIHVlLm9wZW49ZmUsdWV9ZnVuY3Rpb24gaWUodWUpe3EoIkVOUVVFVUUiLHVlWzBdLm5hbWUsdWVbMV0pLEVbS10ucHVzaCh1ZSksZGUo'@;
put 'KX1mdW5jdGlvbiBsZSgpe2Zvcih2YXIgdWU9RGF0ZS5ub3coKSxjZT0wO2NlPEVbS10ubGVuZ3RoOysrY2UpRVtLXVtjZV0ubGVuZ3RoPjImJihFW0tdW2NlXVszXT11ZSxFW0tdW2NlXVs0XT11ZSk7ZGUoKX1mdW5jdGlvbiBkZSgpe2lmKGNsZWFyVGltZW91dChVKSxVPXZvaWQgMCwwIT09'@;
put 'RVtLXS5sZW5ndGgpe3ZhciB1ZT1FW0tdLnNoaWZ0KCksY2U9dWVbMF0sWT11ZVsxXSxiPXVlWzJdLHg9dWVbM10sTj11ZVs0XTtpZih2b2lkIDA9PT14KXEoIlJFVFJZIixjZS5uYW1lLFkpLGNlLmFwcGx5KG51bGwsWSk7ZWxzZSBpZihEYXRlLm5vdygpLXg+PTZlNCl7cSgiVElNRU9VVCIs'@;
put 'Y2UubmFtZSxZKTt2YXIgRj1ZLnBvcCgpOyJmdW5jdGlvbiI9PXR5cGVvZiBGJiZGLmNhbGwobnVsbCxiKX1lbHNle3ZhciBnPURhdGUubm93KCktTixDPU1hdGgubWF4KE4teCwxKTtnPj1NYXRoLm1pbigxLjIqQywxMDApPyhxKCJSRVRSWSIsY2UubmFtZSxZKSxjZS5hcHBseShudWxsLFku'@;
put 'Y29uY2F0KFt4XSkpKTpFW0tdLnB1c2godWUpfXZvaWQgMD09PVUmJihVPXNldFRpbWVvdXQoZGUsMCkpfX1HLmRlYnVnbG9nP3E9Ry5kZWJ1Z2xvZygiZ2ZzNCIpOi9cYmdmczRcYi9pLnRlc3QoSS5lbnYuTk9ERV9ERUJVR3x8IiIpJiYocT1mdW5jdGlvbigpe3ZhciB1ZT1HLmZvcm1hdC5h'@;
put 'cHBseShHLGFyZ3VtZW50cyk7dWU9IkdGUzQ6ICIrdWUuc3BsaXQoL1xuLykuam9pbigiXG5HRlM0OiAiKSxSLmVycm9yKHVlKX0pLEVbS118fChXKEUsTC5nW0tdfHxbXSksRS5jbG9zZT1mdW5jdGlvbih1ZSl7ZnVuY3Rpb24gY2UoWSxiKXtyZXR1cm4gdWUuY2FsbChFLFksZnVuY3Rpb24o'@;
put 'eCl7eHx8bGUoKSwiZnVuY3Rpb24iPT10eXBlb2YgYiYmYi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNlLEose3ZhbHVlOnVlfSksY2V9KEUuY2xvc2UpLEUuY2xvc2VTeW5jPWZ1bmN0aW9uKHVlKXtmdW5jdGlvbiBjZShZKXt1ZS5hcHBs'@;
put 'eShFLGFyZ3VtZW50cyksbGUoKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNlLEose3ZhbHVlOnVlfSksY2V9KEUuY2xvc2VTeW5jKSwvXGJnZnM0XGIvaS50ZXN0KEkuZW52Lk5PREVfREVCVUd8fCIiKSYmSS5vbigiZXhpdCIsZnVuY3Rpb24oKXtxKEVbS10pLEwoOTI4MikuZXF1'@;
put 'YWwoRVtLXS5sZW5ndGgsMCl9KSksTC5nW0tdfHxXKEwuZyxFW0tdKSxILmV4cG9ydHM9bmUoVihFKSksSS5lbnYuVEVTVF9HUkFDRUZVTF9GU19HTE9CQUxfUEFUQ0gmJiFFLl9fcGF0Y2hlZCYmKEguZXhwb3J0cz1uZShFKSxFLl9fcGF0Y2hlZD0hMCl9LDg1MjA6KEgsQixMKT0+e3ZhciBL'@;
put 'PUwoNDE1NSksSj1MKDI4MzApLlN0cmVhbTtILmV4cG9ydHM9ZnVuY3Rpb24oSSl7cmV0dXJue1JlYWRTdHJlYW06ZnVuY3Rpb24gUihFLHope2lmKCEodGhpcyBpbnN0YW5jZW9mIFIpKXJldHVybiBuZXcgUihFLHopO0ouY2FsbCh0aGlzKTt2YXIgaj10aGlzO3RoaXMucGF0aD1FLHRoaXMu'@;
put 'ZmQ9bnVsbCx0aGlzLnJlYWRhYmxlPSEwLHRoaXMucGF1c2VkPSExLHRoaXMuZmxhZ3M9InIiLHRoaXMubW9kZT00MzgsdGhpcy5idWZmZXJTaXplPTY1NTM2LHo9enx8e307Zm9yKHZhciBWPU9iamVjdC5rZXlzKHopLEc9MCxXPVYubGVuZ3RoO0c8VztHKyspe3ZhciBVPVZbR107dGhpc1tV'@;
put 'XT16W1VdfWlmKHRoaXMuZW5jb2RpbmcmJnRoaXMuc2V0RW5jb2RpbmcodGhpcy5lbmNvZGluZyksdm9pZCAwIT09dGhpcy5zdGFydCl7aWYoIm51bWJlciIhPXR5cGVvZiB0aGlzLnN0YXJ0KXRocm93IFR5cGVFcnJvcigic3RhcnQgbXVzdCBiZSBhIE51bWJlciIpO2lmKHZvaWQgMD09PXRo'@;
put 'aXMuZW5kKXRoaXMuZW5kPTEvMDtlbHNlIGlmKCJudW1iZXIiIT10eXBlb2YgdGhpcy5lbmQpdGhyb3cgVHlwZUVycm9yKCJlbmQgbXVzdCBiZSBhIE51bWJlciIpO2lmKHRoaXMuc3RhcnQ+dGhpcy5lbmQpdGhyb3cgbmV3IEVycm9yKCJzdGFydCBtdXN0IGJlIDw9IGVuZCIpO3RoaXMucG9z'@;
put 'PXRoaXMuc3RhcnR9bnVsbD09PXRoaXMuZmQ/SS5vcGVuKHRoaXMucGF0aCx0aGlzLmZsYWdzLHRoaXMubW9kZSxmdW5jdGlvbihxLHRlKXtpZihxKXJldHVybiBqLmVtaXQoImVycm9yIixxKSx2b2lkKGoucmVhZGFibGU9ITEpO2ouZmQ9dGUsai5lbWl0KCJvcGVuIix0ZSksai5fcmVhZCgp'@;
put 'fSk6Sy5uZXh0VGljayhmdW5jdGlvbigpe2ouX3JlYWQoKX0pfSxXcml0ZVN0cmVhbTpmdW5jdGlvbiBSKEUseil7aWYoISh0aGlzIGluc3RhbmNlb2YgUikpcmV0dXJuIG5ldyBSKEUseik7Si5jYWxsKHRoaXMpLHRoaXMucGF0aD1FLHRoaXMuZmQ9bnVsbCx0aGlzLndyaXRhYmxlPSEwLHRo'@;
put 'aXMuZmxhZ3M9InciLHRoaXMuZW5jb2Rpbmc9ImJpbmFyeSIsdGhpcy5tb2RlPTQzOCx0aGlzLmJ5dGVzV3JpdHRlbj0wLHo9enx8e307Zm9yKHZhciBqPU9iamVjdC5rZXlzKHopLFY9MCxHPWoubGVuZ3RoO1Y8RztWKyspe3ZhciBXPWpbVl07dGhpc1tXXT16W1ddfWlmKHZvaWQgMCE9PXRo'@;
put 'aXMuc3RhcnQpe2lmKCJudW1iZXIiIT10eXBlb2YgdGhpcy5zdGFydCl0aHJvdyBUeXBlRXJyb3IoInN0YXJ0IG11c3QgYmUgYSBOdW1iZXIiKTtpZih0aGlzLnN0YXJ0PDApdGhyb3cgbmV3IEVycm9yKCJzdGFydCBtdXN0IGJlID49IHplcm8iKTt0aGlzLnBvcz10aGlzLnN0YXJ0fXRoaXMu'@;
put 'YnVzeT0hMSx0aGlzLl9xdWV1ZT1bXSxudWxsPT09dGhpcy5mZCYmKHRoaXMuX29wZW49SS5vcGVuLHRoaXMuX3F1ZXVlLnB1c2goW3RoaXMuX29wZW4sdGhpcy5wYXRoLHRoaXMuZmxhZ3MsdGhpcy5tb2RlLHZvaWQgMF0pLHRoaXMuZmx1c2goKSl9fX19LDIxNjE6KEgsQixMKT0+e3ZhciBL'@;
put 'PUwoNDE1NSksSj1MKDMyMDgpLEk9Sy5jd2QsUj1udWxsLEU9Sy5lbnYuR1JBQ0VGVUxfRlNfUExBVEZPUk18fEsucGxhdGZvcm07Sy5jd2Q9ZnVuY3Rpb24oKXtyZXR1cm4gUnx8KFI9SS5jYWxsKEspKSxSfTt0cnl7Sy5jd2QoKX1jYXRjaHt9aWYoImZ1bmN0aW9uIj09dHlwZW9mIEsuY2hk'@;
put 'aXIpe3ZhciB6PUsuY2hkaXI7Sy5jaGRpcj1mdW5jdGlvbihqKXtSPW51bGwsei5jYWxsKEssail9LE9iamVjdC5zZXRQcm90b3R5cGVPZiYmT2JqZWN0LnNldFByb3RvdHlwZU9mKEsuY2hkaXIseil9SC5leHBvcnRzPWZ1bmN0aW9uKGope3ZhciBsZSxpZTtmdW5jdGlvbiBWKGxlKXtyZXR1'@;
put 'cm4gbGUmJmZ1bmN0aW9uKGRlLHVlLGNlKXtyZXR1cm4gbGUuY2FsbChqLGRlLHVlLGZ1bmN0aW9uKFkpe25lKFkpJiYoWT1udWxsKSxjZSYmY2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9fWZ1bmN0aW9uIEcobGUpe3JldHVybiBsZSYmZnVuY3Rpb24oZGUsdWUpe3RyeXtyZXR1cm4gbGUu'@;
put 'Y2FsbChqLGRlLHVlKX1jYXRjaChjZSl7aWYoIW5lKGNlKSl0aHJvdyBjZX19fWZ1bmN0aW9uIFcobGUpe3JldHVybiBsZSYmZnVuY3Rpb24oZGUsdWUsY2UsWSl7cmV0dXJuIGxlLmNhbGwoaixkZSx1ZSxjZSxmdW5jdGlvbihiKXtuZShiKSYmKGI9bnVsbCksWSYmWS5hcHBseSh0aGlzLGFy'@;
put 'Z3VtZW50cyl9KX19ZnVuY3Rpb24gVShsZSl7cmV0dXJuIGxlJiZmdW5jdGlvbihkZSx1ZSxjZSl7dHJ5e3JldHVybiBsZS5jYWxsKGosZGUsdWUsY2UpfWNhdGNoKFkpe2lmKCFuZShZKSl0aHJvdyBZfX19ZnVuY3Rpb24gcShsZSl7cmV0dXJuIGxlJiZmdW5jdGlvbihkZSx1ZSxjZSl7ZnVu'@;
put 'Y3Rpb24gWShiLHgpe3gmJih4LnVpZDwwJiYoeC51aWQrPTQyOTQ5NjcyOTYpLHguZ2lkPDAmJih4LmdpZCs9NDI5NDk2NzI5NikpLGNlJiZjZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHVlJiYoY2U9dWUsdWU9bnVsbCksdWU/bGUuY2FsbChqLGRl'@;
put 'LHVlLFkpOmxlLmNhbGwoaixkZSxZKX19ZnVuY3Rpb24gdGUobGUpe3JldHVybiBsZSYmZnVuY3Rpb24oZGUsdWUpe3ZhciBjZT11ZT9sZS5jYWxsKGosZGUsdWUpOmxlLmNhbGwoaixkZSk7cmV0dXJuIGNlJiYoY2UudWlkPDAmJihjZS51aWQrPTQyOTQ5NjcyOTYpLGNlLmdpZDwwJiYoY2Uu'@;
put 'Z2lkKz00Mjk0OTY3Mjk2KSksY2V9fWZ1bmN0aW9uIG5lKGxlKXtyZXR1cm4hbGV8fCJFTk9TWVMiPT09bGUuY29kZXx8IShLLmdldHVpZCYmMD09PUsuZ2V0dWlkKCl8fCJFSU5WQUwiIT09bGUuY29kZSYmIkVQRVJNIiE9PWxlLmNvZGUpfUouaGFzT3duUHJvcGVydHkoIk9fU1lNTElOSyIp'@;
put 'JiZLLnZlcnNpb24ubWF0Y2goL152MFwuNlwuWzAtMl18XnYwXC41XC4vKSYmKChsZT1qKS5sY2htb2Q9ZnVuY3Rpb24oZGUsdWUsY2Upe2xlLm9wZW4oZGUsSi5PX1dST05MWXxKLk9fU1lNTElOSyx1ZSxmdW5jdGlvbihZLGIpe1k/Y2UmJmNlKFkpOmxlLmZjaG1vZChiLHVlLGZ1bmN0aW9u'@;
put 'KHgpe2xlLmNsb3NlKGIsZnVuY3Rpb24oTil7Y2UmJmNlKHh8fE4pfSl9KX0pfSxsZS5sY2htb2RTeW5jPWZ1bmN0aW9uKGRlLHVlKXt2YXIgY2UsWT1sZS5vcGVuU3luYyhkZSxKLk9fV1JPTkxZfEouT19TWU1MSU5LLHVlKSxiPSEwO3RyeXtjZT1sZS5mY2htb2RTeW5jKFksdWUpLGI9ITF9'@;
put 'ZmluYWxseXtpZihiKXRyeXtsZS5jbG9zZVN5bmMoWSl9Y2F0Y2h7fWVsc2UgbGUuY2xvc2VTeW5jKFkpfXJldHVybiBjZX0pLGoubHV0aW1lc3x8ZnVuY3Rpb24obGUpe0ouaGFzT3duUHJvcGVydHkoIk9fU1lNTElOSyIpJiZsZS5mdXRpbWVzPyhsZS5sdXRpbWVzPWZ1bmN0aW9uKGRlLHVl'@;
put 'LGNlLFkpe2xlLm9wZW4oZGUsSi5PX1NZTUxJTkssZnVuY3Rpb24oYix4KXtiP1kmJlkoYik6bGUuZnV0aW1lcyh4LHVlLGNlLGZ1bmN0aW9uKE4pe2xlLmNsb3NlKHgsZnVuY3Rpb24oRil7WSYmWShOfHxGKX0pfSl9KX0sbGUubHV0aW1lc1N5bmM9ZnVuY3Rpb24oZGUsdWUsY2Upe3ZhciBZ'@;
put 'LGI9bGUub3BlblN5bmMoZGUsSi5PX1NZTUxJTkspLHg9ITA7dHJ5e1k9bGUuZnV0aW1lc1N5bmMoYix1ZSxjZSkseD0hMX1maW5hbGx5e2lmKHgpdHJ5e2xlLmNsb3NlU3luYyhiKX1jYXRjaHt9ZWxzZSBsZS5jbG9zZVN5bmMoYil9cmV0dXJuIFl9KTpsZS5mdXRpbWVzJiYobGUubHV0aW1l'@;
put 'cz1mdW5jdGlvbihkZSx1ZSxjZSxZKXtZJiZLLm5leHRUaWNrKFkpfSxsZS5sdXRpbWVzU3luYz1mdW5jdGlvbigpe30pfShqKSxqLmNob3duPVcoai5jaG93biksai5mY2hvd249VyhqLmZjaG93biksai5sY2hvd249VyhqLmxjaG93biksai5jaG1vZD1WKGouY2htb2QpLGouZmNobW9kPVYo'@;
put 'ai5mY2htb2QpLGoubGNobW9kPVYoai5sY2htb2QpLGouY2hvd25TeW5jPVUoai5jaG93blN5bmMpLGouZmNob3duU3luYz1VKGouZmNob3duU3luYyksai5sY2hvd25TeW5jPVUoai5sY2hvd25TeW5jKSxqLmNobW9kU3luYz1HKGouY2htb2RTeW5jKSxqLmZjaG1vZFN5bmM9RyhqLmZjaG1v'@;
put 'ZFN5bmMpLGoubGNobW9kU3luYz1HKGoubGNobW9kU3luYyksai5zdGF0PXEoai5zdGF0KSxqLmZzdGF0PXEoai5mc3RhdCksai5sc3RhdD1xKGoubHN0YXQpLGouc3RhdFN5bmM9dGUoai5zdGF0U3luYyksai5mc3RhdFN5bmM9dGUoai5mc3RhdFN5bmMpLGoubHN0YXRTeW5jPXRlKGoubHN0'@;
put 'YXRTeW5jKSxqLmNobW9kJiYhai5sY2htb2QmJihqLmxjaG1vZD1mdW5jdGlvbihsZSxkZSx1ZSl7dWUmJksubmV4dFRpY2sodWUpfSxqLmxjaG1vZFN5bmM9ZnVuY3Rpb24oKXt9KSxqLmNob3duJiYhai5sY2hvd24mJihqLmxjaG93bj1mdW5jdGlvbihsZSxkZSx1ZSxjZSl7Y2UmJksubmV4'@;
put 'dFRpY2soY2UpfSxqLmxjaG93blN5bmM9ZnVuY3Rpb24oKXt9KSwid2luMzIiPT09RSYmKGoucmVuYW1lPSJmdW5jdGlvbiIhPXR5cGVvZiBqLnJlbmFtZT9qLnJlbmFtZTpmdW5jdGlvbihsZSl7ZnVuY3Rpb24gZGUodWUsY2UsWSl7dmFyIGI9RGF0ZS5ub3coKSx4PTA7bGUodWUsY2UsZnVu'@;
put 'Y3Rpb24gTihGKXtpZihGJiYoIkVBQ0NFUyI9PT1GLmNvZGV8fCJFUEVSTSI9PT1GLmNvZGUpJiZEYXRlLm5vdygpLWI8NmU0KXJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ai5zdGF0KGNlLGZ1bmN0aW9uKGcsQyl7ZyYmIkVOT0VOVCI9PT1nLmNvZGU/bGUodWUsY2UsTik6WShGKX0p'@;
put 'fSx4KSx2b2lkKHg8MTAwJiYoeCs9MTApKTtZJiZZKEYpfSl9cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZiYmT2JqZWN0LnNldFByb3RvdHlwZU9mKGRlLGxlKSxkZX0oai5yZW5hbWUpKSxqLnJlYWQ9ImZ1bmN0aW9uIiE9dHlwZW9mIGoucmVhZD9qLnJlYWQ6ZnVuY3Rpb24obGUpe2Z1'@;
put 'bmN0aW9uIGRlKHVlLGNlLFksYix4LE4pe3ZhciBGO2lmKE4mJiJmdW5jdGlvbiI9PXR5cGVvZiBOKXt2YXIgZz0wO0Y9ZnVuY3Rpb24oQyxNLHkpe2lmKEMmJiJFQUdBSU4iPT09Qy5jb2RlJiZnPDEwKXJldHVybiBnKyssbGUuY2FsbChqLHVlLGNlLFksYix4LEYpO04uYXBwbHkodGhpcyxh'@;
put 'cmd1bWVudHMpfX1yZXR1cm4gbGUuY2FsbChqLHVlLGNlLFksYix4LEYpfXJldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YmJk9iamVjdC5zZXRQcm90b3R5cGVPZihkZSxsZSksZGV9KGoucmVhZCksai5yZWFkU3luYz0iZnVuY3Rpb24iIT10eXBlb2Ygai5yZWFkU3luYz9qLnJlYWRTeW5j'@;
put 'OihpZT1qLnJlYWRTeW5jLGZ1bmN0aW9uKGxlLGRlLHVlLGNlLFkpe2Zvcih2YXIgYj0wOzspdHJ5e3JldHVybiBpZS5jYWxsKGosbGUsZGUsdWUsY2UsWSl9Y2F0Y2goeCl7aWYoIkVBR0FJTiI9PT14LmNvZGUmJmI8MTApe2IrKztjb250aW51ZX10aHJvdyB4fX0pfX0sMTA0NDooSCxCLEwp'@;
put 'PT57InVzZSBzdHJpY3QiO3ZhciBLPUwoMjEwKSgiJU9iamVjdC5kZWZpbmVQcm9wZXJ0eSUiLCEwKSxKPWZ1bmN0aW9uKCl7aWYoSyl0cnl7cmV0dXJuIEsoe30sImEiLHt2YWx1ZToxfSksITB9Y2F0Y2h7cmV0dXJuITF9cmV0dXJuITF9O0ouaGFzQXJyYXlMZW5ndGhEZWZpbmVCdWc9ZnVu'@;
put 'Y3Rpb24oKXtpZighSigpKXJldHVybiBudWxsO3RyeXtyZXR1cm4gMSE9PUsoW10sImxlbmd0aCIse3ZhbHVlOjF9KS5sZW5ndGh9Y2F0Y2h7cmV0dXJuITB9fSxILmV4cG9ydHM9Sn0sMTQwNTooSCxCLEwpPT57InVzZSBzdHJpY3QiO3ZhciBLPXR5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2ws'@;
put 'Sj1MKDU0MTkpO0guZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBLJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIEsoImZvbyIpJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbCgiYmFyIikmJkooKX19LDU0MTk6SD0+eyJ1c2Ug'@;
put 'c3RyaWN0IjtILmV4cG9ydHM9ZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgU3ltYm9sfHwiZnVuY3Rpb24iIT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scylyZXR1cm4hMTtpZigic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcilyZXR1cm4hMDt2YXIg'@;
put 'Qj17fSxMPVN5bWJvbCgidGVzdCIpLEs9T2JqZWN0KEwpO2lmKCJzdHJpbmciPT10eXBlb2YgTHx8IltvYmplY3QgU3ltYm9sXSIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoTCl8fCJbb2JqZWN0IFN5bWJvbF0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKEsp'@;
put 'KXJldHVybiExO2ZvcihMIGluIEJbTF09NDIsQilyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmtleXMmJjAhPT1PYmplY3Qua2V5cyhCKS5sZW5ndGh8fCJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyYmMCE9PU9iamVjdC5nZXRPd25Q'@;
put 'cm9wZXJ0eU5hbWVzKEIpLmxlbmd0aClyZXR1cm4hMTt2YXIgSj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKEIpO2lmKDEhPT1KLmxlbmd0aHx8SlswXSE9PUx8fCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoQixMKSlyZXR1cm4hMTtpZigiZnVuY3Rp'@;
put 'b24iPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcil7dmFyIEk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihCLEwpO2lmKDQyIT09SS52YWx1ZXx8ITAhPT1JLmVudW1lcmFibGUpcmV0dXJuITF9cmV0dXJuITB9fSw2NDEwOihILEIsTCk9PnsidXNlIHN0'@;
put 'cmljdCI7dmFyIEs9TCg1NDE5KTtILmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gSygpJiYhIVN5bWJvbC50b1N0cmluZ1RhZ319LDc2NDI6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSz1MKDg2MTIpO0guZXhwb3J0cz1LLmNhbGwoRnVuY3Rpb24uY2FsbCxPYmplY3QucHJvdG90eXBl'@;
put 'Lmhhc093blByb3BlcnR5KX0sMzM0OTooSCxCLEwpPT57InVzZSBzdHJpY3QiO3ZhciBLPUwoOTUwOSkuQnVmZmVyLEo9TCg4NDczKS5UcmFuc2Zvcm07ZnVuY3Rpb24gSShSKXtKLmNhbGwodGhpcyksdGhpcy5fYmxvY2s9Sy5hbGxvY1Vuc2FmZShSKSx0aGlzLl9ibG9ja1NpemU9Uix0aGlz'@;
put 'Ll9ibG9ja09mZnNldD0wLHRoaXMuX2xlbmd0aD1bMCwwLDAsMF0sdGhpcy5fZmluYWxpemVkPSExfUwoNTcxNykoSSxKKSxJLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKFIsRSx6KXt2YXIgaj1udWxsO3RyeXt0aGlzLnVwZGF0ZShSLEUpfWNhdGNoKFYpe2o9Vn16KGopfSxJLnBy'@;
put 'b3RvdHlwZS5fZmx1c2g9ZnVuY3Rpb24oUil7dmFyIEU9bnVsbDt0cnl7dGhpcy5wdXNoKHRoaXMuZGlnZXN0KCkpfWNhdGNoKHope0U9en1SKEUpfSxJLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oUixFKXtpZihmdW5jdGlvbihVLHEpe2lmKCFLLmlzQnVmZmVyKFUpJiYic3RyaW5nIiE9'@;
put 'dHlwZW9mIFUpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGF0YSBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgYnVmZmVyIil9KFIpLHRoaXMuX2ZpbmFsaXplZCl0aHJvdyBuZXcgRXJyb3IoIkRpZ2VzdCBhbHJlYWR5IGNhbGxlZCIpO0suaXNCdWZmZXIoUil8fChSPUsuZnJvbShSLEUpKTtmb3IodmFy'@;
put 'IHo9dGhpcy5fYmxvY2ssaj0wO3RoaXMuX2Jsb2NrT2Zmc2V0K1IubGVuZ3RoLWo+PXRoaXMuX2Jsb2NrU2l6ZTspe2Zvcih2YXIgVj10aGlzLl9ibG9ja09mZnNldDtWPHRoaXMuX2Jsb2NrU2l6ZTspeltWKytdPVJbaisrXTt0aGlzLl91cGRhdGUoKSx0aGlzLl9ibG9ja09mZnNldD0wfWZv'@;
put 'cig7ajxSLmxlbmd0aDspelt0aGlzLl9ibG9ja09mZnNldCsrXT1SW2orK107Zm9yKHZhciBHPTAsVz04KlIubGVuZ3RoO1c+MDsrK0cpdGhpcy5fbGVuZ3RoW0ddKz1XLChXPXRoaXMuX2xlbmd0aFtHXS80Mjk0OTY3Mjk2fDApPjAmJih0aGlzLl9sZW5ndGhbR10tPTQyOTQ5NjcyOTYqVyk7'@;
put 'cmV0dXJuIHRoaXN9LEkucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIl91cGRhdGUgaXMgbm90IGltcGxlbWVudGVkIil9LEkucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbihSKXtpZih0aGlzLl9maW5hbGl6ZWQpdGhyb3cgbmV3IEVycm9yKCJEaWdlc3Qg'@;
put 'YWxyZWFkeSBjYWxsZWQiKTt0aGlzLl9maW5hbGl6ZWQ9ITA7dmFyIEU9dGhpcy5fZGlnZXN0KCk7dm9pZCAwIT09UiYmKEU9RS50b1N0cmluZyhSKSksdGhpcy5fYmxvY2suZmlsbCgwKSx0aGlzLl9ibG9ja09mZnNldD0wO2Zvcih2YXIgej0wO3o8NDsrK3opdGhpcy5fbGVuZ3RoW3pdPTA7'@;
put 'cmV0dXJuIEV9LEkucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIl9kaWdlc3QgaXMgbm90IGltcGxlbWVudGVkIil9LEguZXhwb3J0cz1JfSwzNzE1OihILEIsTCk9Pnt2YXIgSz1CO0sudXRpbHM9TCg2NDM2KSxLLmNvbW1vbj1MKDU3NzIpLEsuc2hhPUwo'@;
put 'OTA0MSksSy5yaXBlbWQ9TCgyOTQ5KSxLLmhtYWM9TCgyMzQ0KSxLLnNoYTE9Sy5zaGEuc2hhMSxLLnNoYTI1Nj1LLnNoYS5zaGEyNTYsSy5zaGEyMjQ9Sy5zaGEuc2hhMjI0LEsuc2hhMzg0PUsuc2hhLnNoYTM4NCxLLnNoYTUxMj1LLnNoYS5zaGE1MTIsSy5yaXBlbWQxNjA9Sy5yaXBlbWQu'@;
put 'cmlwZW1kMTYwfSw1NzcyOihILEIsTCk9PnsidXNlIHN0cmljdCI7dmFyIEs9TCg2NDM2KSxKPUwoOTc0Nik7ZnVuY3Rpb24gSSgpe3RoaXMucGVuZGluZz1udWxsLHRoaXMucGVuZGluZ1RvdGFsPTAsdGhpcy5ibG9ja1NpemU9dGhpcy5jb25zdHJ1Y3Rvci5ibG9ja1NpemUsdGhpcy5vdXRT'@;
put 'aXplPXRoaXMuY29uc3RydWN0b3Iub3V0U2l6ZSx0aGlzLmhtYWNTdHJlbmd0aD10aGlzLmNvbnN0cnVjdG9yLmhtYWNTdHJlbmd0aCx0aGlzLnBhZExlbmd0aD10aGlzLmNvbnN0cnVjdG9yLnBhZExlbmd0aC84LHRoaXMuZW5kaWFuPSJiaWciLHRoaXMuX2RlbHRhOD10aGlzLmJsb2NrU2l6'@;
put 'ZS84LHRoaXMuX2RlbHRhMzI9dGhpcy5ibG9ja1NpemUvMzJ9Qi5CbG9ja0hhc2g9SSxJLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oUixFKXtpZihSPUsudG9BcnJheShSLEUpLHRoaXMucGVuZGluZz10aGlzLnBlbmRpbmc/dGhpcy5wZW5kaW5nLmNvbmNhdChSKTpSLHRoaXMucGVuZGlu'@;
put 'Z1RvdGFsKz1SLmxlbmd0aCx0aGlzLnBlbmRpbmcubGVuZ3RoPj10aGlzLl9kZWx0YTgpe3ZhciB6PShSPXRoaXMucGVuZGluZykubGVuZ3RoJXRoaXMuX2RlbHRhODt0aGlzLnBlbmRpbmc9Ui5zbGljZShSLmxlbmd0aC16LFIubGVuZ3RoKSwwPT09dGhpcy5wZW5kaW5nLmxlbmd0aCYmKHRo'@;
put 'aXMucGVuZGluZz1udWxsKSxSPUsuam9pbjMyKFIsMCxSLmxlbmd0aC16LHRoaXMuZW5kaWFuKTtmb3IodmFyIGo9MDtqPFIubGVuZ3RoO2orPXRoaXMuX2RlbHRhMzIpdGhpcy5fdXBkYXRlKFIsaixqK3RoaXMuX2RlbHRhMzIpfXJldHVybiB0aGlzfSxJLnByb3RvdHlwZS5kaWdlc3Q9ZnVu'@;
put 'Y3Rpb24oUil7cmV0dXJuIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKSxKKG51bGw9PT10aGlzLnBlbmRpbmcpLHRoaXMuX2RpZ2VzdChSKX0sSS5wcm90b3R5cGUuX3BhZD1mdW5jdGlvbigpe3ZhciBSPXRoaXMucGVuZGluZ1RvdGFsLEU9dGhpcy5fZGVsdGE4LHo9RS0oUit0aGlzLnBhZExl'@;
put 'bmd0aCklRSxqPW5ldyBBcnJheSh6K3RoaXMucGFkTGVuZ3RoKTtqWzBdPTEyODtmb3IodmFyIFY9MTtWPHo7VisrKWpbVl09MDtpZihSPDw9MywiYmlnIj09PXRoaXMuZW5kaWFuKXtmb3IodmFyIEc9ODtHPHRoaXMucGFkTGVuZ3RoO0crKylqW1YrK109MDtqW1YrK109MCxqW1YrK109MCxq'@;
put 'W1YrK109MCxqW1YrK109MCxqW1YrK109Uj4+PjI0JjI1NSxqW1YrK109Uj4+PjE2JjI1NSxqW1YrK109Uj4+PjgmMjU1LGpbVisrXT0yNTUmUn1lbHNlIGZvcihqW1YrK109MjU1JlIsaltWKytdPVI+Pj44JjI1NSxqW1YrK109Uj4+PjE2JjI1NSxqW1YrK109Uj4+PjI0JjI1NSxqW1YrK109'@;
put 'MCxqW1YrK109MCxqW1YrK109MCxqW1YrK109MCxHPTg7Rzx0aGlzLnBhZExlbmd0aDtHKyspaltWKytdPTA7cmV0dXJuIGp9fSwyMzQ0OihILEIsTCk9PnsidXNlIHN0cmljdCI7dmFyIEs9TCg2NDM2KSxKPUwoOTc0Nik7ZnVuY3Rpb24gSShSLEUseil7aWYoISh0aGlzIGluc3RhbmNlb2Yg'@;
put 'SSkpcmV0dXJuIG5ldyBJKFIsRSx6KTt0aGlzLkhhc2g9Uix0aGlzLmJsb2NrU2l6ZT1SLmJsb2NrU2l6ZS84LHRoaXMub3V0U2l6ZT1SLm91dFNpemUvOCx0aGlzLmlubmVyPW51bGwsdGhpcy5vdXRlcj1udWxsLHRoaXMuX2luaXQoSy50b0FycmF5KEUseikpfUguZXhwb3J0cz1JLEkucHJv'@;
put 'dG90eXBlLl9pbml0PWZ1bmN0aW9uKFIpe1IubGVuZ3RoPnRoaXMuYmxvY2tTaXplJiYoUj0obmV3IHRoaXMuSGFzaCkudXBkYXRlKFIpLmRpZ2VzdCgpKSxKKFIubGVuZ3RoPD10aGlzLmJsb2NrU2l6ZSk7Zm9yKHZhciBFPVIubGVuZ3RoO0U8dGhpcy5ibG9ja1NpemU7RSsrKVIucHVzaCgw'@;
put 'KTtmb3IoRT0wO0U8Ui5sZW5ndGg7RSsrKVJbRV1ePTU0O2Zvcih0aGlzLmlubmVyPShuZXcgdGhpcy5IYXNoKS51cGRhdGUoUiksRT0wO0U8Ui5sZW5ndGg7RSsrKVJbRV1ePTEwNjt0aGlzLm91dGVyPShuZXcgdGhpcy5IYXNoKS51cGRhdGUoUil9LEkucHJvdG90eXBlLnVwZGF0ZT1mdW5j'@;
put 'dGlvbihSLEUpe3JldHVybiB0aGlzLmlubmVyLnVwZGF0ZShSLEUpLHRoaXN9LEkucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbihSKXtyZXR1cm4gdGhpcy5vdXRlci51cGRhdGUodGhpcy5pbm5lci5kaWdlc3QoKSksdGhpcy5vdXRlci5kaWdlc3QoUil9fSwyOTQ5OihILEIsTCk9PnsidXNl'@;
put 'IHN0cmljdCI7dmFyIEs9TCg2NDM2KSxKPUwoNTc3MiksST1LLnJvdGwzMixSPUsuc3VtMzIsRT1LLnN1bTMyXzMsej1LLnN1bTMyXzQsaj1KLkJsb2NrSGFzaDtmdW5jdGlvbiBWKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgVikpcmV0dXJuIG5ldyBWO2ouY2FsbCh0aGlzKSx0aGlzLmg9WzE3'@;
put 'MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OCwzMjg1Mzc3NTIwXSx0aGlzLmVuZGlhbj0ibGl0dGxlIn1mdW5jdGlvbiBHKGxlLGRlLHVlLGNlKXtyZXR1cm4gbGU8PTE1P2RlXnVlXmNlOmxlPD0zMT9kZSZ1ZXx+ZGUmY2U6bGU8PTQ3PyhkZXx+dWUpXmNlOmxlPD02'@;
put 'Mz9kZSZjZXx1ZSZ+Y2U6ZGVeKHVlfH5jZSl9ZnVuY3Rpb24gVyhsZSl7cmV0dXJuIGxlPD0xNT8wOmxlPD0zMT8xNTE4NTAwMjQ5OmxlPD00Nz8xODU5Nzc1MzkzOmxlPD02Mz8yNDAwOTU5NzA4OjI4NDA4NTM4Mzh9ZnVuY3Rpb24gVShsZSl7cmV0dXJuIGxlPD0xNT8xMzUyODI5OTI2Omxl'@;
put 'PD0zMT8xNTQ4NjAzNjg0OmxlPD00Nz8xODM2MDcyNjkxOmxlPD02Mz8yMDUzOTk0MjE3OjB9Sy5pbmhlcml0cyhWLGopLEIucmlwZW1kMTYwPVYsVi5ibG9ja1NpemU9NTEyLFYub3V0U2l6ZT0xNjAsVi5obWFjU3RyZW5ndGg9MTkyLFYucGFkTGVuZ3RoPTY0LFYucHJvdG90eXBlLl91cGRh'@;
put 'dGU9ZnVuY3Rpb24obGUsZGUpe2Zvcih2YXIgdWU9dGhpcy5oWzBdLGNlPXRoaXMuaFsxXSxZPXRoaXMuaFsyXSxiPXRoaXMuaFszXSx4PXRoaXMuaFs0XSxOPXVlLEY9Y2UsZz1ZLEM9YixNPXgseT0wO3k8ODA7eSsrKXt2YXIgcD1SKEkoeih1ZSxHKHksY2UsWSxiKSxsZVtxW3ldK2RlXSxX'@;
put 'KHkpKSxuZVt5XSkseCk7dWU9eCx4PWIsYj1JKFksMTApLFk9Y2UsY2U9cCxwPVIoSSh6KE4sRyg3OS15LEYsZyxDKSxsZVt0ZVt5XStkZV0sVSh5KSksaWVbeV0pLE0pLE49TSxNPUMsQz1JKGcsMTApLGc9RixGPXB9cD1FKHRoaXMuaFsxXSxZLEMpLHRoaXMuaFsxXT1FKHRoaXMuaFsyXSxi'@;
put 'LE0pLHRoaXMuaFsyXT1FKHRoaXMuaFszXSx4LE4pLHRoaXMuaFszXT1FKHRoaXMuaFs0XSx1ZSxGKSx0aGlzLmhbNF09RSh0aGlzLmhbMF0sY2UsZyksdGhpcy5oWzBdPXB9LFYucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24obGUpe3JldHVybiJoZXgiPT09bGU/Sy50b0hleDMyKHRoaXMu'@;
put 'aCwibGl0dGxlIik6Sy5zcGxpdDMyKHRoaXMuaCwibGl0dGxlIil9O3ZhciBxPVswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDcsNCwxMywxLDEwLDYsMTUsMywxMiwwLDksNSwyLDE0LDExLDgsMywxMCwxNCw0LDksMTUsOCwxLDIsNywwLDYsMTMsMTEsNSwxMiwxLDks'@;
put 'MTEsMTAsMCw4LDEyLDQsMTMsMyw3LDE1LDE0LDUsNiwyLDQsMCw1LDksNywxMiwyLDEwLDE0LDEsMyw4LDExLDYsMTUsMTNdLHRlPVs1LDE0LDcsMCw5LDIsMTEsNCwxMyw2LDE1LDgsMSwxMCwzLDEyLDYsMTEsMyw3LDAsMTMsNSwxMCwxNCwxNSw4LDEyLDQsOSwxLDIsMTUsNSwxLDMsNywx'@;
put 'NCw2LDksMTEsOCwxMiwyLDEwLDAsNCwxMyw4LDYsNCwxLDMsMTEsMTUsMCw1LDEyLDIsMTMsOSw3LDEwLDE0LDEyLDE1LDEwLDQsMSw1LDgsNyw2LDIsMTMsMTQsMCwzLDksMTFdLG5lPVsxMSwxNCwxNSwxMiw1LDgsNyw5LDExLDEzLDE0LDE1LDYsNyw5LDgsNyw2LDgsMTMsMTEsOSw3LDE1'@;
put 'LDcsMTIsMTUsOSwxMSw3LDEzLDEyLDExLDEzLDYsNywxNCw5LDEzLDE1LDE0LDgsMTMsNiw1LDEyLDcsNSwxMSwxMiwxNCwxNSwxNCwxNSw5LDgsOSwxNCw1LDYsOCw2LDUsMTIsOSwxNSw1LDExLDYsOCwxMywxMiw1LDEyLDEzLDE0LDExLDgsNSw2XSxpZT1bOCw5LDksMTEsMTMsMTUsMTUs'@;
put 'NSw3LDcsOCwxMSwxNCwxNCwxMiw2LDksMTMsMTUsNywxMiw4LDksMTEsNyw3LDEyLDcsNiwxNSwxMywxMSw5LDcsMTUsMTEsOCw2LDYsMTQsMTIsMTMsNSwxNCwxMywxMyw3LDUsMTUsNSw4LDExLDE0LDE0LDYsMTQsNiw5LDEyLDksMTIsNSwxNSw4LDgsNSwxMiw5LDEyLDUsMTQsNiw4LDEz'@;
put 'LDYsNSwxNSwxMywxMSwxMV19LDkwNDE6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0IjtCLnNoYTE9TCg0NzYxKSxCLnNoYTIyND1MKDc5OSksQi5zaGEyNTY9TCg5MzQ0KSxCLnNoYTM4ND1MKDc3MiksQi5zaGE1MTI9TCg1OTAwKX0sNDc2MTooSCxCLEwpPT57InVzZSBzdHJpY3QiO3ZhciBLPUwo'@;
put 'NjQzNiksSj1MKDU3NzIpLEk9TCg3MDM4KSxSPUsucm90bDMyLEU9Sy5zdW0zMix6PUsuc3VtMzJfNSxqPUkuZnRfMSxWPUouQmxvY2tIYXNoLEc9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywyNDAwOTU5NzA4LDMzOTU0Njk3ODJdO2Z1bmN0aW9uIFcoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBX'@;
put 'KSlyZXR1cm4gbmV3IFc7Vi5jYWxsKHRoaXMpLHRoaXMuaD1bMTczMjU4NDE5Myw0MDIzMjMzNDE3LDI1NjIzODMxMDIsMjcxNzMzODc4LDMyODUzNzc1MjBdLHRoaXMuVz1uZXcgQXJyYXkoODApfUsuaW5oZXJpdHMoVyxWKSxILmV4cG9ydHM9VyxXLmJsb2NrU2l6ZT01MTIsVy5vdXRTaXpl'@;
put 'PTE2MCxXLmhtYWNTdHJlbmd0aD04MCxXLnBhZExlbmd0aD02NCxXLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFUscSl7Zm9yKHZhciB0ZT10aGlzLlcsbmU9MDtuZTwxNjtuZSsrKXRlW25lXT1VW3ErbmVdO2Zvcig7bmU8dGUubGVuZ3RoO25lKyspdGVbbmVdPVIodGVbbmUtM11edGVb'@;
put 'bmUtOF1edGVbbmUtMTRdXnRlW25lLTE2XSwxKTt2YXIgaWU9dGhpcy5oWzBdLGxlPXRoaXMuaFsxXSxkZT10aGlzLmhbMl0sdWU9dGhpcy5oWzNdLGNlPXRoaXMuaFs0XTtmb3IobmU9MDtuZTx0ZS5sZW5ndGg7bmUrKyl7dmFyIFk9fn4obmUvMjApLGI9eihSKGllLDUpLGooWSxsZSxkZSx1'@;
put 'ZSksY2UsdGVbbmVdLEdbWV0pO2NlPXVlLHVlPWRlLGRlPVIobGUsMzApLGxlPWllLGllPWJ9dGhpcy5oWzBdPUUodGhpcy5oWzBdLGllKSx0aGlzLmhbMV09RSh0aGlzLmhbMV0sbGUpLHRoaXMuaFsyXT1FKHRoaXMuaFsyXSxkZSksdGhpcy5oWzNdPUUodGhpcy5oWzNdLHVlKSx0aGlzLmhb'@;
put 'NF09RSh0aGlzLmhbNF0sY2UpfSxXLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKFUpe3JldHVybiJoZXgiPT09VT9LLnRvSGV4MzIodGhpcy5oLCJiaWciKTpLLnNwbGl0MzIodGhpcy5oLCJiaWciKX19LDc5OTooSCxCLEwpPT57InVzZSBzdHJpY3QiO3ZhciBLPUwoNjQzNiksSj1MKDkz'@;
put 'NDQpO2Z1bmN0aW9uIEkoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBJKSlyZXR1cm4gbmV3IEk7Si5jYWxsKHRoaXMpLHRoaXMuaD1bMzIzODM3MTAzMiw5MTQxNTA2NjMsODEyNzAyOTk5LDQxNDQ5MTI2OTcsNDI5MDc3NTg1NywxNzUwNjAzMDI1LDE2OTQwNzY4MzksMzIwNDA3NTQyOF19Sy5p'@;
put 'bmhlcml0cyhJLEopLEguZXhwb3J0cz1JLEkuYmxvY2tTaXplPTUxMixJLm91dFNpemU9MjI0LEkuaG1hY1N0cmVuZ3RoPTE5MixJLnBhZExlbmd0aD02NCxJLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKFIpe3JldHVybiJoZXgiPT09Uj9LLnRvSGV4MzIodGhpcy5oLnNsaWNlKDAsNyks'@;
put 'ImJpZyIpOksuc3BsaXQzMih0aGlzLmguc2xpY2UoMCw3KSwiYmlnIil9fSw5MzQ0OihILEIsTCk9PnsidXNlIHN0cmljdCI7dmFyIEs9TCg2NDM2KSxKPUwoNTc3MiksST1MKDcwMzgpLFI9TCg5NzQ2KSxFPUsuc3VtMzIsej1LLnN1bTMyXzQsaj1LLnN1bTMyXzUsVj1JLmNoMzIsRz1JLm1h'@;
put 'ajMyLFc9SS5zMF8yNTYsVT1JLnMxXzI1NixxPUkuZzBfMjU2LHRlPUkuZzFfMjU2LG5lPUouQmxvY2tIYXNoLGllPVsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgw'@;
put 'LDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0'@;
put 'MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYw'@;
put 'MzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0'@;
put 'Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdO2Z1bmN0aW9uIGxlKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgbGUpKXJldHVybiBuZXcgbGU7bmUuY2FsbCh0aGlzKSx0'@;
put 'aGlzLmg9WzE3NzkwMzM3MDMsMzE0NDEzNDI3NywxMDEzOTA0MjQyLDI3NzM0ODA3NjIsMTM1OTg5MzExOSwyNjAwODIyOTI0LDUyODczNDYzNSwxNTQxNDU5MjI1XSx0aGlzLms9aWUsdGhpcy5XPW5ldyBBcnJheSg2NCl9Sy5pbmhlcml0cyhsZSxuZSksSC5leHBvcnRzPWxlLGxlLmJsb2Nr'@;
put 'U2l6ZT01MTIsbGUub3V0U2l6ZT0yNTYsbGUuaG1hY1N0cmVuZ3RoPTE5MixsZS5wYWRMZW5ndGg9NjQsbGUucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oZGUsdWUpe2Zvcih2YXIgY2U9dGhpcy5XLFk9MDtZPDE2O1krKyljZVtZXT1kZVt1ZStZXTtmb3IoO1k8Y2UubGVuZ3RoO1krKylj'@;
put 'ZVtZXT16KHRlKGNlW1ktMl0pLGNlW1ktN10scShjZVtZLTE1XSksY2VbWS0xNl0pO3ZhciBiPXRoaXMuaFswXSx4PXRoaXMuaFsxXSxOPXRoaXMuaFsyXSxGPXRoaXMuaFszXSxnPXRoaXMuaFs0XSxDPXRoaXMuaFs1XSxNPXRoaXMuaFs2XSx5PXRoaXMuaFs3XTtmb3IoUih0aGlzLmsubGVu'@;
put 'Z3RoPT09Y2UubGVuZ3RoKSxZPTA7WTxjZS5sZW5ndGg7WSsrKXt2YXIgcD1qKHksVShnKSxWKGcsQyxNKSx0aGlzLmtbWV0sY2VbWV0pLFM9RShXKGIpLEcoYix4LE4pKTt5PU0sTT1DLEM9ZyxnPUUoRixwKSxGPU4sTj14LHg9YixiPUUocCxTKX10aGlzLmhbMF09RSh0aGlzLmhbMF0sYiks'@;
put 'dGhpcy5oWzFdPUUodGhpcy5oWzFdLHgpLHRoaXMuaFsyXT1FKHRoaXMuaFsyXSxOKSx0aGlzLmhbM109RSh0aGlzLmhbM10sRiksdGhpcy5oWzRdPUUodGhpcy5oWzRdLGcpLHRoaXMuaFs1XT1FKHRoaXMuaFs1XSxDKSx0aGlzLmhbNl09RSh0aGlzLmhbNl0sTSksdGhpcy5oWzddPUUodGhp'@;
put 'cy5oWzddLHkpfSxsZS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihkZSl7cmV0dXJuImhleCI9PT1kZT9LLnRvSGV4MzIodGhpcy5oLCJiaWciKTpLLnNwbGl0MzIodGhpcy5oLCJiaWciKX19LDc3MjooSCxCLEwpPT57InVzZSBzdHJpY3QiO3ZhciBLPUwoNjQzNiksSj1MKDU5MDApO2Z1'@;
put 'bmN0aW9uIEkoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBJKSlyZXR1cm4gbmV3IEk7Si5jYWxsKHRoaXMpLHRoaXMuaD1bMzQxODA3MDM2NSwzMjM4MzcxMDMyLDE2NTQyNzAyNTAsOTE0MTUwNjYzLDI0Mzg1MjkzNzAsODEyNzAyOTk5LDM1NTQ2MjM2MCw0MTQ0OTEyNjk3LDE3MzE0MDU0MTUs'@;
put 'NDI5MDc3NTg1NywyMzk0MTgwMjMxLDE3NTA2MDMwMjUsMzY3NTAwODUyNSwxNjk0MDc2ODM5LDEyMDMwNjI4MTMsMzIwNDA3NTQyOF19Sy5pbmhlcml0cyhJLEopLEguZXhwb3J0cz1JLEkuYmxvY2tTaXplPTEwMjQsSS5vdXRTaXplPTM4NCxJLmhtYWNTdHJlbmd0aD0xOTIsSS5wYWRMZW5n'@;
put 'dGg9MTI4LEkucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oUil7cmV0dXJuImhleCI9PT1SP0sudG9IZXgzMih0aGlzLmguc2xpY2UoMCwxMiksImJpZyIpOksuc3BsaXQzMih0aGlzLmguc2xpY2UoMCwxMiksImJpZyIpfX0sNTkwMDooSCxCLEwpPT57InVzZSBzdHJpY3QiO3ZhciBLPUwo'@;
put 'NjQzNiksSj1MKDU3NzIpLEk9TCg5NzQ2KSxSPUsucm90cjY0X2hpLEU9Sy5yb3RyNjRfbG8sej1LLnNocjY0X2hpLGo9Sy5zaHI2NF9sbyxWPUsuc3VtNjQsRz1LLnN1bTY0X2hpLFc9Sy5zdW02NF9sbyxVPUsuc3VtNjRfNF9oaSxxPUsuc3VtNjRfNF9sbyx0ZT1LLnN1bTY0XzVfaGksbmU9'@;
put 'Sy5zdW02NF81X2xvLGllPUouQmxvY2tIYXNoLGxlPVsxMTE2MzUyNDA4LDM2MDk3Njc0NTgsMTg5OTQ0NzQ0MSw2MDI4OTE3MjUsMzA0OTMyMzQ3MSwzOTY0NDg0Mzk5LDM5MjEwMDk1NzMsMjE3MzI5NTU0OCw5NjE5ODcxNjMsNDA4MTYyODQ3MiwxNTA4OTcwOTkzLDMwNTM4MzQyNjUsMjQ1'@;
put 'MzYzNTc0OCwyOTM3NjcxNTc5LDI4NzA3NjMyMjEsMzY2NDYwOTU2MCwzNjI0MzgxMDgwLDI3MzQ4ODMzOTQsMzEwNTk4NDAxLDExNjQ5OTY1NDIsNjA3MjI1Mjc4LDEzMjM2MTA3NjQsMTQyNjg4MTk4NywzNTkwMzA0OTk0LDE5MjUwNzgzODgsNDA2ODE4MjM4MywyMTYyMDc4MjA2LDk5MTMz'@;
put 'NjExMywyNjE0ODg4MTAzLDYzMzgwMzMxNywzMjQ4MjIyNTgwLDM0Nzk3NzQ4NjgsMzgzNTM5MDQwMSwyNjY2NjEzNDU4LDQwMjIyMjQ3NzQsOTQ0NzExMTM5LDI2NDM0NzA3OCwyMzQxMjYyNzczLDYwNDgwNzYyOCwyMDA3ODAwOTMzLDc3MDI1NTk4MywxNDk1OTkwOTAxLDEyNDkxNTAxMjIs'@;
put 'MTg1NjQzMTIzNSwxNTU1MDgxNjkyLDMxNzUyMTgxMzIsMTk5NjA2NDk4NiwyMTk4OTUwODM3LDI1NTQyMjA4ODIsMzk5OTcxOTMzOSwyODIxODM0MzQ5LDc2Njc4NDAxNiwyOTUyOTk2ODA4LDI1NjY1OTQ4NzksMzIxMDMxMzY3MSwzMjAzMzM3OTU2LDMzMzY1NzE4OTEsMTAzNDQ1NzAyNiwz'@;
put 'NTg0NTI4NzExLDI0NjY5NDg5MDEsMTEzOTI2OTkzLDM3NTgzMjYzODMsMzM4MjQxODk1LDE2ODcxNzkzNiw2NjYzMDcyMDUsMTE4ODE3OTk2NCw3NzM1Mjk5MTIsMTU0NjA0NTczNCwxMjk0NzU3MzcyLDE1MjI4MDU0ODUsMTM5NjE4MjI5MSwyNjQzODMzODIzLDE2OTUxODM3MDAsMjM0MzUy'@;
put 'NzM5MCwxOTg2NjYxMDUxLDEwMTQ0Nzc0ODAsMjE3NzAyNjM1MCwxMjA2NzU5MTQyLDI0NTY5NTYwMzcsMzQ0MDc3NjI3LDI3MzA0ODU5MjEsMTI5MDg2MzQ2MCwyODIwMzAyNDExLDMxNTg0NTQyNzMsMzI1OTczMDgwMCwzNTA1OTUyNjU3LDMzNDU3NjQ3NzEsMTA2MjE3MDA4LDM1MTYwNjU4'@;
put 'MTcsMzYwNjAwODM0NCwzNjAwMzUyODA0LDE0MzI3MjU3NzYsNDA5NDU3MTkwOSwxNDY3MDMxNTk0LDI3NTQyMzM0NCw4NTExNjk3MjAsNDMwMjI3NzM0LDMxMDA4MjM3NTIsNTA2OTQ4NjE2LDEzNjMyNTgxOTUsNjU5MDYwNTU2LDM3NTA2ODU1OTMsODgzOTk3ODc3LDM3ODUwNTAyODAsOTU4'@;
put 'MTM5NTcxLDMzMTgzMDc0MjcsMTMyMjgyMjIxOCwzODEyNzIzNDAzLDE1MzcwMDIwNjMsMjAwMzAzNDk5NSwxNzQ3ODczNzc5LDM2MDIwMzY4OTksMTk1NTU2MjIyMiwxNTc1OTkwMDEyLDIwMjQxMDQ4MTUsMTEyNTU5MjkyOCwyMjI3NzMwNDUyLDI3MTY5MDQzMDYsMjM2MTg1MjQyNCw0NDI3'@;
put 'NzYwNDQsMjQyODQzNjQ3NCw1OTM2OTgzNDQsMjc1NjczNDE4NywzNzMzMTEwMjQ5LDMyMDQwMzE0NzksMjk5OTM1MTU3MywzMzI5MzI1Mjk4LDM4MTU5MjA0MjcsMzM5MTU2OTYxNCwzOTI4MzgzOTAwLDM1MTUyNjcyNzEsNTY2MjgwNzExLDM5NDAxODc2MDYsMzQ1NDA2OTUzNCw0MTE4NjMw'@;
put 'MjcxLDQwMDAyMzk5OTIsMTE2NDE4NDc0LDE5MTQxMzg1NTQsMTc0MjkyNDIxLDI3MzEwNTUyNzAsMjg5MzgwMzU2LDMyMDM5OTMwMDYsNDYwMzkzMjY5LDMyMDYyMDMxNSw2ODU0NzE3MzMsNTg3NDk2ODM2LDg1MjE0Mjk3MSwxMDg2NzkyODUxLDEwMTcwMzYyOTgsMzY1NTQzMTAwLDExMjYw'@;
put 'MDA1ODAsMjYxODI5NzY3NiwxMjg4MDMzNDcwLDM0MDk4NTUxNTgsMTUwMTUwNTk0OCw0MjM0NTA5ODY2LDE2MDcxNjc5MTUsOTg3MTY3NDY4LDE4MTY0MDIzMTYsMTI0NjE4OTU5MV07ZnVuY3Rpb24gZGUoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBkZSkpcmV0dXJuIG5ldyBkZTtpZS5jYWxs'@;
put 'KHRoaXMpLHRoaXMuaD1bMTc3OTAzMzcwMyw0MDg5MjM1NzIwLDMxNDQxMzQyNzcsMjIyNzg3MzU5NSwxMDEzOTA0MjQyLDQyNzExNzU3MjMsMjc3MzQ4MDc2MiwxNTk1NzUwMTI5LDEzNTk4OTMxMTksMjkxNzU2NTEzNywyNjAwODIyOTI0LDcyNTUxMTE5OSw1Mjg3MzQ2MzUsNDIxNTM4OTU0'@;
put 'NywxNTQxNDU5MjI1LDMyNzAzMzIwOV0sdGhpcy5rPWxlLHRoaXMuVz1uZXcgQXJyYXkoMTYwKX1mdW5jdGlvbiB1ZShTLFEscmUsZmUsbWUpe3ZhciBrZT1TJnJlXn5TJm1lO3JldHVybiBrZTwwJiYoa2UrPTQyOTQ5NjcyOTYpLGtlfWZ1bmN0aW9uIGNlKFMsUSxyZSxmZSxtZSxrZSl7dmFy'@;
put 'IFRlPVEmZmVeflEma2U7cmV0dXJuIFRlPDAmJihUZSs9NDI5NDk2NzI5NiksVGV9ZnVuY3Rpb24gWShTLFEscmUsZmUsbWUpe3ZhciBrZT1TJnJlXlMmbWVecmUmbWU7cmV0dXJuIGtlPDAmJihrZSs9NDI5NDk2NzI5Niksa2V9ZnVuY3Rpb24gYihTLFEscmUsZmUsbWUsa2Upe3ZhciBUZT1R'@;
put 'JmZlXlEma2VeZmUma2U7cmV0dXJuIFRlPDAmJihUZSs9NDI5NDk2NzI5NiksVGV9ZnVuY3Rpb24geChTLFEpe3ZhciByZT1SKFMsUSwyOCleUihRLFMsMileUihRLFMsNyk7cmV0dXJuIHJlPDAmJihyZSs9NDI5NDk2NzI5NikscmV9ZnVuY3Rpb24gTihTLFEpe3ZhciByZT1FKFMsUSwyOCle'@;
put 'RShRLFMsMileRShRLFMsNyk7cmV0dXJuIHJlPDAmJihyZSs9NDI5NDk2NzI5NikscmV9ZnVuY3Rpb24gRihTLFEpe3ZhciByZT1SKFMsUSwxNCleUihTLFEsMTgpXlIoUSxTLDkpO3JldHVybiByZTwwJiYocmUrPTQyOTQ5NjcyOTYpLHJlfWZ1bmN0aW9uIGcoUyxRKXt2YXIgcmU9RShTLFEs'@;
put 'MTQpXkUoUyxRLDE4KV5FKFEsUyw5KTtyZXR1cm4gcmU8MCYmKHJlKz00Mjk0OTY3Mjk2KSxyZX1mdW5jdGlvbiBDKFMsUSl7dmFyIHJlPVIoUyxRLDEpXlIoUyxRLDgpXnooUyxRLDcpO3JldHVybiByZTwwJiYocmUrPTQyOTQ5NjcyOTYpLHJlfWZ1bmN0aW9uIE0oUyxRKXt2YXIgcmU9RShT'@;
put 'LFEsMSleRShTLFEsOCleaihTLFEsNyk7cmV0dXJuIHJlPDAmJihyZSs9NDI5NDk2NzI5NikscmV9ZnVuY3Rpb24geShTLFEpe3ZhciByZT1SKFMsUSwxOSleUihRLFMsMjkpXnooUyxRLDYpO3JldHVybiByZTwwJiYocmUrPTQyOTQ5NjcyOTYpLHJlfWZ1bmN0aW9uIHAoUyxRKXt2YXIgcmU9'@;
put 'RShTLFEsMTkpXkUoUSxTLDI5KV5qKFMsUSw2KTtyZXR1cm4gcmU8MCYmKHJlKz00Mjk0OTY3Mjk2KSxyZX1LLmluaGVyaXRzKGRlLGllKSxILmV4cG9ydHM9ZGUsZGUuYmxvY2tTaXplPTEwMjQsZGUub3V0U2l6ZT01MTIsZGUuaG1hY1N0cmVuZ3RoPTE5MixkZS5wYWRMZW5ndGg9MTI4LGRl'@;
put 'LnByb3RvdHlwZS5fcHJlcGFyZUJsb2NrPWZ1bmN0aW9uKFMsUSl7Zm9yKHZhciByZT10aGlzLlcsZmU9MDtmZTwzMjtmZSsrKXJlW2ZlXT1TW1ErZmVdO2Zvcig7ZmU8cmUubGVuZ3RoO2ZlKz0yKXt2YXIgbWU9eShyZVtmZS00XSxyZVtmZS0zXSksa2U9cChyZVtmZS00XSxyZVtmZS0zXSks'@;
put 'VGU9cmVbZmUtMTRdLFBlPXJlW2ZlLTEzXSxGZT1DKHJlW2ZlLTMwXSxyZVtmZS0yOV0pLE5lPU0ocmVbZmUtMzBdLHJlW2ZlLTI5XSksTGU9cmVbZmUtMzJdLEJlPXJlW2ZlLTMxXTtyZVtmZV09VShtZSxrZSxUZSxQZSxGZSxOZSxMZSxCZSkscmVbZmUrMV09cShtZSxrZSxUZSxQZSxGZSxO'@;
put 'ZSxMZSxCZSl9fSxkZS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihTLFEpe3RoaXMuX3ByZXBhcmVCbG9jayhTLFEpO3ZhciByZT10aGlzLlcsZmU9dGhpcy5oWzBdLG1lPXRoaXMuaFsxXSxrZT10aGlzLmhbMl0sVGU9dGhpcy5oWzNdLFBlPXRoaXMuaFs0XSxGZT10aGlzLmhbNV0sTmU9'@;
put 'dGhpcy5oWzZdLExlPXRoaXMuaFs3XSxCZT10aGlzLmhbOF0sSGU9dGhpcy5oWzldLFFlPXRoaXMuaFsxMF0sbXQ9dGhpcy5oWzExXSxLZT10aGlzLmhbMTJdLHdlPXRoaXMuaFsxM10sSWU9dGhpcy5oWzE0XSxPZT10aGlzLmhbMTVdO0kodGhpcy5rLmxlbmd0aD09PXJlLmxlbmd0aCk7Zm9y'@;
put 'KHZhciBldD0wO2V0PHJlLmxlbmd0aDtldCs9Mil7dmFyIG50PUllLHFlPU9lLGh0PUYoQmUsSGUpLEVlPWcoQmUsSGUpLERlPXVlKEJlLDAsUWUsMCxLZSksJGU9Y2UoMCxIZSwwLG10LDAsd2UpLGF0PXRoaXMua1tldF0sY3Q9dGhpcy5rW2V0KzFdLE90PXJlW2V0XSxQdD1yZVtldCsxXSxB'@;
put 'dD10ZShudCxxZSxodCxFZSxEZSwkZSxhdCxjdCxPdCxQdCksSnQ9bmUobnQscWUsaHQsRWUsRGUsJGUsYXQsY3QsT3QsUHQpO250PXgoZmUsbWUpLHFlPU4oZmUsbWUpLGh0PVkoZmUsMCxrZSwwLFBlKSxFZT1iKDAsbWUsMCxUZSwwLEZlKTt2YXIgbW49RyhudCxxZSxodCxFZSksTnQ9Vyhu'@;
put 'dCxxZSxodCxFZSk7SWU9S2UsT2U9d2UsS2U9UWUsd2U9bXQsUWU9QmUsbXQ9SGUsQmU9RyhOZSxMZSxBdCxKdCksSGU9VyhMZSxMZSxBdCxKdCksTmU9UGUsTGU9RmUsUGU9a2UsRmU9VGUsa2U9ZmUsVGU9bWUsZmU9RyhBdCxKdCxtbixOdCksbWU9VyhBdCxKdCxtbixOdCl9Vih0aGlzLmgs'@;
put 'MCxmZSxtZSksVih0aGlzLmgsMixrZSxUZSksVih0aGlzLmgsNCxQZSxGZSksVih0aGlzLmgsNixOZSxMZSksVih0aGlzLmgsOCxCZSxIZSksVih0aGlzLmgsMTAsUWUsbXQpLFYodGhpcy5oLDEyLEtlLHdlKSxWKHRoaXMuaCwxNCxJZSxPZSl9LGRlLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0'@;
put 'aW9uKFMpe3JldHVybiJoZXgiPT09Uz9LLnRvSGV4MzIodGhpcy5oLCJiaWciKTpLLnNwbGl0MzIodGhpcy5oLCJiaWciKX19LDcwMzg6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSz1MKDY0MzYpLnJvdHIzMjtmdW5jdGlvbiBKKEUseixqKXtyZXR1cm4gRSZ6Xn5FJmp9ZnVuY3Rpb24g'@;
put 'SShFLHosail7cmV0dXJuIEUmel5FJmpeeiZqfWZ1bmN0aW9uIFIoRSx6LGope3JldHVybiBFXnpean1CLmZ0XzE9ZnVuY3Rpb24oRSx6LGosVil7cmV0dXJuIDA9PT1FP0ooeixqLFYpOjE9PT1FfHwzPT09RT9SKHosaixWKToyPT09RT9JKHosaixWKTp2b2lkIDB9LEIuY2gzMj1KLEIubWFq'@;
put 'MzI9SSxCLnAzMj1SLEIuczBfMjU2PWZ1bmN0aW9uKEUpe3JldHVybiBLKEUsMileSyhFLDEzKV5LKEUsMjIpfSxCLnMxXzI1Nj1mdW5jdGlvbihFKXtyZXR1cm4gSyhFLDYpXksoRSwxMSleSyhFLDI1KX0sQi5nMF8yNTY9ZnVuY3Rpb24oRSl7cmV0dXJuIEsoRSw3KV5LKEUsMTgpXkU+Pj4z'@;
put 'fSxCLmcxXzI1Nj1mdW5jdGlvbihFKXtyZXR1cm4gSyhFLDE3KV5LKEUsMTkpXkU+Pj4xMH19LDY0MzY6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSz1MKDk3NDYpLEo9TCg1NzE3KTtmdW5jdGlvbiBJKGosVil7cmV0dXJuIDU1Mjk2PT0oNjQ1MTImai5jaGFyQ29kZUF0KFYpKSYmIShW'@;
put 'PDB8fFYrMT49ai5sZW5ndGgpJiY1NjMyMD09KDY0NTEyJmouY2hhckNvZGVBdChWKzEpKX1mdW5jdGlvbiBSKGope3JldHVybihqPj4+MjR8aj4+PjgmNjUyODB8ajw8OCYxNjcxMTY4MHwoMjU1JmopPDwyNCk+Pj4wfWZ1bmN0aW9uIEUoail7cmV0dXJuIDE9PT1qLmxlbmd0aD8iMCIrajpq'@;
put 'fWZ1bmN0aW9uIHooail7cmV0dXJuIDc9PT1qLmxlbmd0aD8iMCIrajo2PT09ai5sZW5ndGg/IjAwIitqOjU9PT1qLmxlbmd0aD8iMDAwIitqOjQ9PT1qLmxlbmd0aD8iMDAwMCIrajozPT09ai5sZW5ndGg/IjAwMDAwIitqOjI9PT1qLmxlbmd0aD8iMDAwMDAwIitqOjE9PT1qLmxlbmd0aD8i'@;
put 'MDAwMDAwMCIrajpqfUIuaW5oZXJpdHM9SixCLnRvQXJyYXk9ZnVuY3Rpb24oaixWKXtpZihBcnJheS5pc0FycmF5KGopKXJldHVybiBqLnNsaWNlKCk7aWYoIWopcmV0dXJuW107dmFyIEc9W107aWYoInN0cmluZyI9PXR5cGVvZiBqKWlmKFYpe2lmKCJoZXgiPT09Vilmb3IoKGo9ai5yZXBs'@;
put 'YWNlKC9bXmEtejAtOV0rL2dpLCIiKSkubGVuZ3RoJTIhPTAmJihqPSIwIitqKSxVPTA7VTxqLmxlbmd0aDtVKz0yKUcucHVzaChwYXJzZUludChqW1VdK2pbVSsxXSwxNikpfWVsc2UgZm9yKHZhciBXPTAsVT0wO1U8ai5sZW5ndGg7VSsrKXt2YXIgcT1qLmNoYXJDb2RlQXQoVSk7cTwxMjg/'@;
put 'R1tXKytdPXE6cTwyMDQ4PyhHW1crK109cT4+NnwxOTIsR1tXKytdPTYzJnF8MTI4KTpJKGosVSk/KHE9NjU1MzYrKCgxMDIzJnEpPDwxMCkrKDEwMjMmai5jaGFyQ29kZUF0KCsrVSkpLEdbVysrXT1xPj4xOHwyNDAsR1tXKytdPXE+PjEyJjYzfDEyOCxHW1crK109cT4+NiY2M3wxMjgsR1tX'@;
put 'KytdPTYzJnF8MTI4KTooR1tXKytdPXE+PjEyfDIyNCxHW1crK109cT4+NiY2M3wxMjgsR1tXKytdPTYzJnF8MTI4KX1lbHNlIGZvcihVPTA7VTxqLmxlbmd0aDtVKyspR1tVXT0wfGpbVV07cmV0dXJuIEd9LEIudG9IZXg9ZnVuY3Rpb24oail7Zm9yKHZhciBWPSIiLEc9MDtHPGoubGVuZ3Ro'@;
put 'O0crKylWKz1FKGpbR10udG9TdHJpbmcoMTYpKTtyZXR1cm4gVn0sQi5odG9ubD1SLEIudG9IZXgzMj1mdW5jdGlvbihqLFYpe2Zvcih2YXIgRz0iIixXPTA7VzxqLmxlbmd0aDtXKyspe3ZhciBVPWpbV107ImxpdHRsZSI9PT1WJiYoVT1SKFUpKSxHKz16KFUudG9TdHJpbmcoMTYpKX1yZXR1'@;
put 'cm4gR30sQi56ZXJvMj1FLEIuemVybzg9eixCLmpvaW4zMj1mdW5jdGlvbihqLFYsRyxXKXt2YXIgVT1HLVY7SyhVJTQ9PTApO2Zvcih2YXIgcT1uZXcgQXJyYXkoVS80KSx0ZT0wLG5lPVY7dGU8cS5sZW5ndGg7dGUrKyxuZSs9NClxW3RlXT0oImJpZyI9PT1XP2pbbmVdPDwyNHxqW25lKzFd'@;
put 'PDwxNnxqW25lKzJdPDw4fGpbbmUrM106altuZSszXTw8MjR8altuZSsyXTw8MTZ8altuZSsxXTw8OHxqW25lXSk+Pj4wO3JldHVybiBxfSxCLnNwbGl0MzI9ZnVuY3Rpb24oaixWKXtmb3IodmFyIEc9bmV3IEFycmF5KDQqai5sZW5ndGgpLFc9MCxVPTA7VzxqLmxlbmd0aDtXKyssVSs9NCl7'@;
put 'dmFyIHE9altXXTsiYmlnIj09PVY/KEdbVV09cT4+PjI0LEdbVSsxXT1xPj4+MTYmMjU1LEdbVSsyXT1xPj4+OCYyNTUsR1tVKzNdPTI1NSZxKTooR1tVKzNdPXE+Pj4yNCxHW1UrMl09cT4+PjE2JjI1NSxHW1UrMV09cT4+PjgmMjU1LEdbVV09MjU1JnEpfXJldHVybiBHfSxCLnJvdHIzMj1m'@;
put 'dW5jdGlvbihqLFYpe3JldHVybiBqPj4+VnxqPDwzMi1WfSxCLnJvdGwzMj1mdW5jdGlvbihqLFYpe3JldHVybiBqPDxWfGo+Pj4zMi1WfSxCLnN1bTMyPWZ1bmN0aW9uKGosVil7cmV0dXJuIGorVj4+PjB9LEIuc3VtMzJfMz1mdW5jdGlvbihqLFYsRyl7cmV0dXJuIGorVitHPj4+MH0sQi5z'@;
put 'dW0zMl80PWZ1bmN0aW9uKGosVixHLFcpe3JldHVybiBqK1YrRytXPj4+MH0sQi5zdW0zMl81PWZ1bmN0aW9uKGosVixHLFcsVSl7cmV0dXJuIGorVitHK1crVT4+PjB9LEIuc3VtNjQ9ZnVuY3Rpb24oaixWLEcsVyl7dmFyIHE9VytqW1YrMV0+Pj4wO2pbVl09KHE8Vz8xOjApK0craltWXT4+'@;
put 'PjAsaltWKzFdPXF9LEIuc3VtNjRfaGk9ZnVuY3Rpb24oaixWLEcsVyl7cmV0dXJuKFYrVz4+PjA8Vj8xOjApK2orRz4+PjB9LEIuc3VtNjRfbG89ZnVuY3Rpb24oaixWLEcsVyl7cmV0dXJuIFYrVz4+PjB9LEIuc3VtNjRfNF9oaT1mdW5jdGlvbihqLFYsRyxXLFUscSx0ZSxuZSl7dmFyIGll'@;
put 'PTAsbGU9VjtyZXR1cm4gaWUrPShsZT1sZStXPj4+MCk8Vj8xOjAsaWUrPShsZT1sZStxPj4+MCk8cT8xOjAsaitHK1UrdGUrKGllKz0obGU9bGUrbmU+Pj4wKTxuZT8xOjApPj4+MH0sQi5zdW02NF80X2xvPWZ1bmN0aW9uKGosVixHLFcsVSxxLHRlLG5lKXtyZXR1cm4gVitXK3ErbmU+Pj4w'@;
put 'fSxCLnN1bTY0XzVfaGk9ZnVuY3Rpb24oaixWLEcsVyxVLHEsdGUsbmUsaWUsbGUpe3ZhciBkZT0wLHVlPVY7cmV0dXJuIGRlKz0odWU9dWUrVz4+PjApPFY/MTowLGRlKz0odWU9dWUrcT4+PjApPHE/MTowLGRlKz0odWU9dWUrbmU+Pj4wKTxuZT8xOjAsaitHK1UrdGUraWUrKGRlKz0odWU9'@;
put 'dWUrbGU+Pj4wKTxsZT8xOjApPj4+MH0sQi5zdW02NF81X2xvPWZ1bmN0aW9uKGosVixHLFcsVSxxLHRlLG5lLGllLGxlKXtyZXR1cm4gVitXK3ErbmUrbGU+Pj4wfSxCLnJvdHI2NF9oaT1mdW5jdGlvbihqLFYsRyl7cmV0dXJuKFY8PDMyLUd8aj4+PkcpPj4+MH0sQi5yb3RyNjRfbG89ZnVu'@;
put 'Y3Rpb24oaixWLEcpe3JldHVybihqPDwzMi1HfFY+Pj5HKT4+PjB9LEIuc2hyNjRfaGk9ZnVuY3Rpb24oaixWLEcpe3JldHVybiBqPj4+R30sQi5zaHI2NF9sbz1mdW5jdGlvbihqLFYsRyl7cmV0dXJuKGo8PDMyLUd8Vj4+PkcpPj4+MH19LDIxNTY6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0Ijt2'@;
put 'YXIgSz1MKDM3MTUpLEo9TCg0NTA0KSxJPUwoOTc0Nik7ZnVuY3Rpb24gUihFKXtpZighKHRoaXMgaW5zdGFuY2VvZiBSKSlyZXR1cm4gbmV3IFIoRSk7dGhpcy5oYXNoPUUuaGFzaCx0aGlzLnByZWRSZXNpc3Q9ISFFLnByZWRSZXNpc3QsdGhpcy5vdXRMZW49dGhpcy5oYXNoLm91dFNpemUs'@;
put 'dGhpcy5taW5FbnRyb3B5PUUubWluRW50cm9weXx8dGhpcy5oYXNoLmhtYWNTdHJlbmd0aCx0aGlzLl9yZXNlZWQ9bnVsbCx0aGlzLnJlc2VlZEludGVydmFsPW51bGwsdGhpcy5LPW51bGwsdGhpcy5WPW51bGw7dmFyIHo9Si50b0FycmF5KEUuZW50cm9weSxFLmVudHJvcHlFbmN8fCJoZXgi'@;
put 'KSxqPUoudG9BcnJheShFLm5vbmNlLEUubm9uY2VFbmN8fCJoZXgiKSxWPUoudG9BcnJheShFLnBlcnMsRS5wZXJzRW5jfHwiaGV4Iik7SSh6Lmxlbmd0aD49dGhpcy5taW5FbnRyb3B5LzgsIk5vdCBlbm91Z2ggZW50cm9weS4gTWluaW11bSBpczogIit0aGlzLm1pbkVudHJvcHkrIiBiaXRz'@;
put 'IiksdGhpcy5faW5pdCh6LGosVil9SC5leHBvcnRzPVIsUi5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oRSx6LGope3ZhciBWPUUuY29uY2F0KHopLmNvbmNhdChqKTt0aGlzLks9bmV3IEFycmF5KHRoaXMub3V0TGVuLzgpLHRoaXMuVj1uZXcgQXJyYXkodGhpcy5vdXRMZW4vOCk7Zm9yKHZh'@;
put 'ciBHPTA7Rzx0aGlzLlYubGVuZ3RoO0crKyl0aGlzLktbR109MCx0aGlzLlZbR109MTt0aGlzLl91cGRhdGUoViksdGhpcy5fcmVzZWVkPTEsdGhpcy5yZXNlZWRJbnRlcnZhbD0yODE0NzQ5NzY3MTA2NTZ9LFIucHJvdG90eXBlLl9obWFjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBLLmhtYWMo'@;
put 'dGhpcy5oYXNoLHRoaXMuSyl9LFIucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oRSl7dmFyIHo9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLnVwZGF0ZShbMF0pO0UmJih6PXoudXBkYXRlKEUpKSx0aGlzLks9ei5kaWdlc3QoKSx0aGlzLlY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlz'@;
put 'LlYpLmRpZ2VzdCgpLEUmJih0aGlzLks9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLnVwZGF0ZShbMV0pLnVwZGF0ZShFKS5kaWdlc3QoKSx0aGlzLlY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpKX0sUi5wcm90b3R5cGUucmVzZWVkPWZ1bmN0aW9uKEUseixqLFYp'@;
put 'eyJzdHJpbmciIT10eXBlb2YgeiYmKFY9aixqPXosej1udWxsKSxFPUoudG9BcnJheShFLHopLGo9Si50b0FycmF5KGosViksSShFLmxlbmd0aD49dGhpcy5taW5FbnRyb3B5LzgsIk5vdCBlbm91Z2ggZW50cm9weS4gTWluaW11bSBpczogIit0aGlzLm1pbkVudHJvcHkrIiBiaXRzIiksdGhp'@;
put 'cy5fdXBkYXRlKEUuY29uY2F0KGp8fFtdKSksdGhpcy5fcmVzZWVkPTF9LFIucHJvdG90eXBlLmdlbmVyYXRlPWZ1bmN0aW9uKEUseixqLFYpe2lmKHRoaXMuX3Jlc2VlZD50aGlzLnJlc2VlZEludGVydmFsKXRocm93IG5ldyBFcnJvcigiUmVzZWVkIGlzIHJlcXVpcmVkIik7InN0cmluZyIh'@;
put 'PXR5cGVvZiB6JiYoVj1qLGo9eix6PW51bGwpLGomJihqPUoudG9BcnJheShqLFZ8fCJoZXgiKSx0aGlzLl91cGRhdGUoaikpO2Zvcih2YXIgRz1bXTtHLmxlbmd0aDxFOyl0aGlzLlY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpLEc9Ry5jb25jYXQodGhpcy5WKTt2YXIg'@;
put 'Vz1HLnNsaWNlKDAsRSk7cmV0dXJuIHRoaXMuX3VwZGF0ZShqKSx0aGlzLl9yZXNlZWQrKyxKLmVuY29kZShXLHopfX0sNjQ1OihILEIpPT57Qi5yZWFkPWZ1bmN0aW9uKEwsSyxKLEksUil7dmFyIEUseixqPTgqUi1JLTEsVj0oMTw8aiktMSxHPVY+PjEsVz0tNyxVPUo/Ui0xOjAscT1KPy0x'@;
put 'OjEsdGU9TFtLK1VdO2ZvcihVKz1xLEU9dGUmKDE8PC1XKS0xLHRlPj49LVcsVys9ajtXPjA7RT0yNTYqRStMW0srVV0sVSs9cSxXLT04KTtmb3Ioej1FJigxPDwtVyktMSxFPj49LVcsVys9STtXPjA7ej0yNTYqeitMW0srVV0sVSs9cSxXLT04KTtpZigwPT09RSlFPTEtRztlbHNle2lmKEU9'@;
put 'PT1WKXJldHVybiB6P05hTjoxLzAqKHRlPy0xOjEpO3orPU1hdGgucG93KDIsSSksRS09R31yZXR1cm4odGU/LTE6MSkqeipNYXRoLnBvdygyLEUtSSl9LEIud3JpdGU9ZnVuY3Rpb24oTCxLLEosSSxSLEUpe3ZhciB6LGosVixHPTgqRS1SLTEsVz0oMTw8RyktMSxVPVc+PjEscT0yMz09PVI/'@;
put 'TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowLHRlPUk/MDpFLTEsbmU9ST8xOi0xLGllPUs8MHx8MD09PUsmJjEvSzwwPzE6MDtmb3IoSz1NYXRoLmFicyhLKSxpc05hTihLKXx8Sz09PTEvMD8oaj1pc05hTihLKT8xOjAsej1XKTooej1NYXRoLmZsb29yKE1hdGgubG9nKEspL01h'@;
put 'dGguTE4yKSxLKihWPU1hdGgucG93KDIsLXopKTwxJiYoei0tLFYqPTIpLChLKz16K1U+PTE/cS9WOnEqTWF0aC5wb3coMiwxLVUpKSpWPj0yJiYoeisrLFYvPTIpLHorVT49Vz8oaj0wLHo9Vyk6eitVPj0xPyhqPShLKlYtMSkqTWF0aC5wb3coMixSKSx6Kz1VKTooaj1LKk1hdGgucG93KDIs'@;
put 'VS0xKSpNYXRoLnBvdygyLFIpLHo9MCkpO1I+PTg7TFtKK3RlXT0yNTUmaix0ZSs9bmUsai89MjU2LFItPTgpO2Zvcih6PXo8PFJ8aixHKz1SO0c+MDtMW0ordGVdPTI1NSZ6LHRlKz1uZSx6Lz0yNTYsRy09OCk7TFtKK3RlLW5lXXw9MTI4KmllfX0sNzg0NDooSCxCLEwpPT57dmFyIEs9TCg0'@;
put 'MTU1KSxKPUwoMjQ3OSksST1PYmplY3QuY3JlYXRlKG51bGwpLFI9TCg3NzgpO0guZXhwb3J0cz1KKGZ1bmN0aW9uKEUseil7cmV0dXJuIElbRV0/KElbRV0ucHVzaCh6KSxudWxsKTooSVtFXT1bel0saj1FLFIoZnVuY3Rpb24gVigpe3ZhciBHPUlbal0sVz1HLmxlbmd0aCxVPWZ1bmN0aW9u'@;
put 'KHRlKXtmb3IodmFyIG5lPXRlLmxlbmd0aCxpZT1bXSxsZT0wO2xlPG5lO2xlKyspaWVbbGVdPXRlW2xlXTtyZXR1cm4gaWV9KGFyZ3VtZW50cyk7dHJ5e2Zvcih2YXIgcT0wO3E8VztxKyspR1txXS5hcHBseShudWxsLFUpfWZpbmFsbHl7Ry5sZW5ndGg+Vz8oRy5zcGxpY2UoMCxXKSxLLm5l'@;
put 'eHRUaWNrKGZ1bmN0aW9uKCl7Vi5hcHBseShudWxsLFUpfSkpOmRlbGV0ZSBJW2pdfX0pKTt2YXIgan0pfSw1NzE3Okg9PntILmV4cG9ydHM9ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oQixMKXtMJiYoQi5zdXBlcl89TCxCLnByb3RvdHlwZT1PYmplY3QuY3Jl'@;
put 'YXRlKEwucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6QixlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSl9OmZ1bmN0aW9uKEIsTCl7aWYoTCl7Qi5zdXBlcl89TDt2YXIgSz1mdW5jdGlvbigpe307Sy5wcm90b3R5cGU9TC5wcm90b3R5cGUsQi5wcm90'@;
put 'b3R5cGU9bmV3IEssQi5wcm90b3R5cGUuY29uc3RydWN0b3I9Qn19fSwyNTg0OihILEIsTCk9PnsidXNlIHN0cmljdCI7dmFyIEs9TCg2NDEwKSgpLEo9TCgxOTI0KSgiT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyIpLEk9ZnVuY3Rpb24oeil7cmV0dXJuIShLJiZ6JiYib2JqZWN0Ij09dHlw'@;
put 'ZW9mIHomJlN5bWJvbC50b1N0cmluZ1RhZyBpbiB6KSYmIltvYmplY3QgQXJndW1lbnRzXSI9PT1KKHopfSxSPWZ1bmN0aW9uKHope3JldHVybiEhSSh6KXx8bnVsbCE9PXomJiJvYmplY3QiPT10eXBlb2YgeiYmIm51bWJlciI9PXR5cGVvZiB6Lmxlbmd0aCYmei5sZW5ndGg+PTAmJiJbb2Jq'@;
put 'ZWN0IEFycmF5XSIhPT1KKHopJiYiW29iamVjdCBGdW5jdGlvbl0iPT09Sih6LmNhbGxlZSl9LEU9ZnVuY3Rpb24oKXtyZXR1cm4gSShhcmd1bWVudHMpfSgpO0kuaXNMZWdhY3lBcmd1bWVudHM9UixILmV4cG9ydHM9RT9JOlJ9LDUzMjA6SD0+eyJ1c2Ugc3RyaWN0Ijt2YXIgQixMLEs9RnVu'@;
put 'Y3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLEo9Im9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiZudWxsIT09UmVmbGVjdCYmUmVmbGVjdC5hcHBseTtpZigiZnVuY3Rpb24iPT10eXBlb2YgSiYmImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSl0cnl7Qj1PYmplY3QuZGVm'@;
put 'aW5lUHJvcGVydHkoe30sImxlbmd0aCIse2dldDpmdW5jdGlvbigpe3Rocm93IEx9fSksTD17fSxKKGZ1bmN0aW9uKCl7dGhyb3cgNDJ9LG51bGwsQil9Y2F0Y2goVSl7VSE9PUwmJihKPW51bGwpfWVsc2UgSj1udWxsO3ZhciBJPS9eXHMqY2xhc3NcYi8sUj1mdW5jdGlvbihVKXt0cnl7dmFy'@;
put 'IHE9Sy5jYWxsKFUpO3JldHVybiBJLnRlc3QocSl9Y2F0Y2h7cmV0dXJuITF9fSxFPWZ1bmN0aW9uKFUpe3RyeXtyZXR1cm4hUihVKSYmKEsuY2FsbChVKSwhMCl9Y2F0Y2h7cmV0dXJuITF9fSx6PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsaj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9s'@;
put 'JiYhIVN5bWJvbC50b1N0cmluZ1RhZyxWPSEoMCBpblssXSksRz1mdW5jdGlvbigpe3JldHVybiExfTtpZigib2JqZWN0Ij09dHlwZW9mIGRvY3VtZW50KXt2YXIgVz1kb2N1bWVudC5hbGw7ei5jYWxsKFcpPT09ei5jYWxsKGRvY3VtZW50LmFsbCkmJihHPWZ1bmN0aW9uKFUpe2lmKChWfHwh'@;
put 'VSkmJih2b2lkIDA9PT1VfHwib2JqZWN0Ij09dHlwZW9mIFUpKXRyeXt2YXIgcT16LmNhbGwoVSk7cmV0dXJuKCJbb2JqZWN0IEhUTUxBbGxDb2xsZWN0aW9uXSI9PT1xfHwiW29iamVjdCBIVE1MIGRvY3VtZW50LmFsbCBjbGFzc10iPT09cXx8IltvYmplY3QgSFRNTENvbGxlY3Rpb25dIj09'@;
put 'PXF8fCJbb2JqZWN0IE9iamVjdF0iPT09cSkmJm51bGw9PVUoIiIpfWNhdGNoe31yZXR1cm4hMX0pfUguZXhwb3J0cz1KP2Z1bmN0aW9uKFUpe2lmKEcoVSkpcmV0dXJuITA7aWYoIVV8fCJmdW5jdGlvbiIhPXR5cGVvZiBVJiYib2JqZWN0IiE9dHlwZW9mIFUpcmV0dXJuITE7dHJ5e0ooVSxu'@;
put 'dWxsLEIpfWNhdGNoKHEpe2lmKHEhPT1MKXJldHVybiExfXJldHVybiFSKFUpJiZFKFUpfTpmdW5jdGlvbihVKXtpZihHKFUpKXJldHVybiEwO2lmKCFVfHwiZnVuY3Rpb24iIT10eXBlb2YgVSYmIm9iamVjdCIhPXR5cGVvZiBVKXJldHVybiExO2lmKGopcmV0dXJuIEUoVSk7aWYoUihVKSly'@;
put 'ZXR1cm4hMTt2YXIgcT16LmNhbGwoVSk7cmV0dXJuISgiW29iamVjdCBGdW5jdGlvbl0iIT09cSYmIltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIiE9PXEmJiEvXlxbb2JqZWN0IEhUTUwvLnRlc3QocSkpJiZFKFUpfX0sODY2MjooSCxCLEwpPT57InVzZSBzdHJpY3QiO3ZhciBLLEo9T2Jq'@;
put 'ZWN0LnByb3RvdHlwZS50b1N0cmluZyxJPUZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyxSPS9eXHMqKD86ZnVuY3Rpb24pP1wqLyxFPUwoNjQxMCkoKSx6PU9iamVjdC5nZXRQcm90b3R5cGVPZjtILmV4cG9ydHM9ZnVuY3Rpb24oail7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGopcmV0dXJu'@;
put 'ITE7aWYoUi50ZXN0KEkuY2FsbChqKSkpcmV0dXJuITA7aWYoIUUpcmV0dXJuIltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIj09PUouY2FsbChqKTtpZigheilyZXR1cm4hMTtpZih2b2lkIDA9PT1LKXt2YXIgVj1mdW5jdGlvbigpe2lmKCFFKXJldHVybiExO3RyeXtyZXR1cm4gRnVuY3Rp'@;
put 'b24oInJldHVybiBmdW5jdGlvbiooKSB7fSIpKCl9Y2F0Y2h7fX0oKTtLPSEhViYmeihWKX1yZXR1cm4geihqKT09PUt9fSw4NjExOkg9PnsidXNlIHN0cmljdCI7SC5leHBvcnRzPWZ1bmN0aW9uKEIpe3JldHVybiBCIT1CfX0sMzYwOihILEIsTCk9PnsidXNlIHN0cmljdCI7dmFyIEs9TCg1'@;
put 'NTU5KSxKPUwoNDI4OSksST1MKDg2MTEpLFI9TCg5NDE1KSxFPUwoMzE5NCksej1LKFIoKSxOdW1iZXIpO0ooeix7Z2V0UG9seWZpbGw6UixpbXBsZW1lbnRhdGlvbjpJLHNoaW06RX0pLEguZXhwb3J0cz16fSw5NDE1OihILEIsTCk9PnsidXNlIHN0cmljdCI7dmFyIEs9TCg4NjExKTtILmV4'@;
put 'cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gTnVtYmVyLmlzTmFOJiZOdW1iZXIuaXNOYU4oTmFOKSYmIU51bWJlci5pc05hTigiYSIpP051bWJlci5pc05hTjpLfX0sMzE5NDooSCxCLEwpPT57InVzZSBzdHJpY3QiO3ZhciBLPUwoNDI4OSksSj1MKDk0MTUpO0guZXhwb3J0cz1mdW5jdGlvbigp'@;
put 'e3ZhciBJPUooKTtyZXR1cm4gSyhOdW1iZXIse2lzTmFOOkl9LHtpc05hTjpmdW5jdGlvbigpe3JldHVybiBOdW1iZXIuaXNOYU4hPT1JfX0pLEl9fSw1NjkyOihILEIsTCk9PnsidXNlIHN0cmljdCI7dmFyIEs9TCg0MDI5KSxKPUwoMzA4MyksST1MKDE5MjQpLFI9SSgiT2JqZWN0LnByb3Rv'@;
put 'dHlwZS50b1N0cmluZyIpLEU9TCg2NDEwKSgpLHo9TCg3Mjk2KSxqPXR5cGVvZiBnbG9iYWxUaGlzPiJ1Ij9MLmc6Z2xvYmFsVGhpcyxWPUooKSxHPUkoIkFycmF5LnByb3RvdHlwZS5pbmRleE9mIiwhMCl8fGZ1bmN0aW9uKHRlLG5lKXtmb3IodmFyIGllPTA7aWU8dGUubGVuZ3RoO2llKz0x'@;
put 'KWlmKHRlW2llXT09PW5lKXJldHVybiBpZTtyZXR1cm4tMX0sVz1JKCJTdHJpbmcucHJvdG90eXBlLnNsaWNlIiksVT17fSxxPU9iamVjdC5nZXRQcm90b3R5cGVPZjtFJiZ6JiZxJiZLKFYsZnVuY3Rpb24odGUpe3ZhciBuZT1uZXcgalt0ZV07aWYoU3ltYm9sLnRvU3RyaW5nVGFnIGluIG5l'@;
put 'KXt2YXIgaWU9cShuZSksbGU9eihpZSxTeW1ib2wudG9TdHJpbmdUYWcpO2lmKCFsZSl7dmFyIGRlPXEoaWUpO2xlPXooZGUsU3ltYm9sLnRvU3RyaW5nVGFnKX1VW3RlXT1sZS5nZXR9fSksSC5leHBvcnRzPWZ1bmN0aW9uKHRlKXtpZighdGV8fCJvYmplY3QiIT10eXBlb2YgdGUpcmV0dXJu'@;
put 'ITE7aWYoIUV8fCEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIHRlKSl7dmFyIG5lPVcoUih0ZSksOCwtMSk7cmV0dXJuIEcoVixuZSk+LTF9cmV0dXJuISF6JiYoaWU9dGUsbGU9ITEsSyhVLGZ1bmN0aW9uKGRlLHVlKXtpZighbGUpdHJ5e2xlPWRlLmNhbGwoaWUpPT09dWV9Y2F0Y2h7fX0pLGxl'@;
put 'KTt2YXIgaWUsbGV9fSw2ODEzOihILEIsTCk9PntsZXQgSzt0cnl7Sz1MKDc3KX1jYXRjaHtLPUwoNDEyOSl9Y29uc3QgSj1MKDg5ODEpLHtzdHJpbmdpZnk6SSxzdHJpcEJvbTpSfT1MKDY3ODApLEU9e3JlYWRGaWxlOkouZnJvbVByb21pc2UoZnVuY3Rpb24oKXt2YXIgej1zZShmdW5jdGlv'@;
put 'biooaixWPXt9KXsic3RyaW5nIj09dHlwZW9mIFYmJihWPXtlbmNvZGluZzpWfSk7Y29uc3QgRz1WLmZzfHxLLFc9ISgidGhyb3dzImluIFYpfHxWLnRocm93cztsZXQgVSxxPXlpZWxkIEouZnJvbUNhbGxiYWNrKEcucmVhZEZpbGUpKGosVik7cT1SKHEpO3RyeXtVPUpTT04ucGFyc2UocSxW'@;
put 'P1YucmV2aXZlcjpudWxsKX1jYXRjaCh0ZSl7aWYoVyl0aHJvdyB0ZS5tZXNzYWdlPWAke2p9OiAke3RlLm1lc3NhZ2V9YCx0ZTtyZXR1cm4gbnVsbH1yZXR1cm4gVX0pO3JldHVybiBmdW5jdGlvbihqKXtyZXR1cm4gei5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKSxyZWFkRmlsZVN5bmM6'@;
put 'ZnVuY3Rpb24oeixqPXt9KXsic3RyaW5nIj09dHlwZW9mIGomJihqPXtlbmNvZGluZzpqfSk7Y29uc3QgVj1qLmZzfHxLLEc9ISgidGhyb3dzImluIGopfHxqLnRocm93czt0cnl7bGV0IFc9Vi5yZWFkRmlsZVN5bmMoeixqKTtyZXR1cm4gVz1SKFcpLEpTT04ucGFyc2UoVyxqLnJldml2ZXIp'@;
put 'fWNhdGNoKFcpe2lmKEcpdGhyb3cgVy5tZXNzYWdlPWAke3p9OiAke1cubWVzc2FnZX1gLFc7cmV0dXJuIG51bGx9fSx3cml0ZUZpbGU6Si5mcm9tUHJvbWlzZShmdW5jdGlvbigpe3ZhciB6PXNlKGZ1bmN0aW9uKihqLFYsRz17fSl7Y29uc3QgVz1HLmZzfHxLLFU9SShWLEcpO3lpZWxkIEou'@;
put 'ZnJvbUNhbGxiYWNrKFcud3JpdGVGaWxlKShqLFUsRyl9KTtyZXR1cm4gZnVuY3Rpb24oaixWKXtyZXR1cm4gei5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKSx3cml0ZUZpbGVTeW5jOmZ1bmN0aW9uKHosaixWPXt9KXtjb25zdCBHPVYuZnN8fEssVz1JKGosVik7cmV0dXJuIEcud3JpdGVG'@;
put 'aWxlU3luYyh6LFcsVil9fTtILmV4cG9ydHM9RX0sNjc4MDooSCxCLEwpPT57dmFyIEs9TCg4NzY0KS5CdWZmZXI7SC5leHBvcnRzPXtzdHJpbmdpZnk6ZnVuY3Rpb24oSix7RU9MOkk9IlxuIixmaW5hbEVPTDpSPSEwLHJlcGxhY2VyOkU9bnVsbCxzcGFjZXM6en09e30pe2NvbnN0IGo9Uj9J'@;
put 'OiIiO3JldHVybiBKU09OLnN0cmluZ2lmeShKLEUseikucmVwbGFjZSgvXG4vZyxJKStqfSxzdHJpcEJvbTpmdW5jdGlvbihKKXtyZXR1cm4gSy5pc0J1ZmZlcihKKSYmKEo9Si50b1N0cmluZygidXRmOCIpKSxKLnJlcGxhY2UoL15cdUZFRkYvLCIiKX19fSw2MjQ1OihILEIsTCk9PnsidXNl'@;
put 'IHN0cmljdCI7ZnVuY3Rpb24gSyh6KXt0aGlzLm1lc3NhZ2U9en1MLnIoQiksTC5kKEIse0ludmFsaWRUb2tlbkVycm9yOigpPT5SLGRlZmF1bHQ6KCk9PkV9KSwoSy5wcm90b3R5cGU9bmV3IEVycm9yKS5uYW1lPSJJbnZhbGlkQ2hhcmFjdGVyRXJyb3IiO3ZhciBKPXR5cGVvZiB3aW5kb3c8'@;
put 'InUiJiZ3aW5kb3cuYXRvYiYmd2luZG93LmF0b2IuYmluZCh3aW5kb3cpfHxmdW5jdGlvbih6KXt2YXIgaj1TdHJpbmcoeikucmVwbGFjZSgvPSskLywiIik7aWYoai5sZW5ndGglND09MSl0aHJvdyBuZXcgSygiJ2F0b2InIGZhaWxlZDogVGhlIHN0cmluZyB0byBiZSBkZWNvZGVkIGlzIG5v'@;
put 'dCBjb3JyZWN0bHkgZW5jb2RlZC4iKTtmb3IodmFyIFYsRyxXPTAsVT0wLHE9IiI7Rz1qLmNoYXJBdChVKyspO35HJiYoVj1XJTQ/NjQqVitHOkcsVysrJTQpP3ErPVN0cmluZy5mcm9tQ2hhckNvZGUoMjU1JlY+PigtMipXJjYpKTowKUc9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJj'@;
put 'ZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89Ii5pbmRleE9mKEcpO3JldHVybiBxfTtmdW5jdGlvbiBSKHope3RoaXMubWVzc2FnZT16fShSLnByb3RvdHlwZT1uZXcgRXJyb3IpLm5hbWU9IkludmFsaWRUb2tlbkVycm9yIjtjb25zdCBFPWZ1bmN0aW9uKHosail7aWYoInN0'@;
put 'cmluZyIhPXR5cGVvZiB6KXRocm93IG5ldyBSKCJJbnZhbGlkIHRva2VuIHNwZWNpZmllZCIpO3ZhciBWPSEwPT09KGo9anx8e30pLmhlYWRlcj8wOjE7dHJ5e3JldHVybiBKU09OLnBhcnNlKGZ1bmN0aW9uIEkoeil7dmFyIGo9ei5yZXBsYWNlKC8tL2csIisiKS5yZXBsYWNlKC9fL2csIi8i'@;
put 'KTtzd2l0Y2goai5sZW5ndGglNCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMjpqKz0iPT0iO2JyZWFrO2Nhc2UgMzpqKz0iPSI7YnJlYWs7ZGVmYXVsdDp0aHJvdyJJbGxlZ2FsIGJhc2U2NHVybCBzdHJpbmchIn10cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChKKGopLnJlcGxhY2UoLyguKS9n'@;
put 'LGZ1bmN0aW9uKEcsVyl7dmFyIFU9Vy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO3JldHVybiBVLmxlbmd0aDwyJiYoVT0iMCIrVSksIiUiK1V9KSl9Y2F0Y2h7cmV0dXJuIEooail9fSh6LnNwbGl0KCIuIilbVl0pKX1jYXRjaChHKXt0aHJvdyBuZXcgUigiSW52'@;
put 'YWxpZCB0b2tlbiBzcGVjaWZpZWQ6ICIrRy5tZXNzYWdlKX19fSwyMzE4OihILEIsTCk9PnsidXNlIHN0cmljdCI7dmFyIEs9TCg1NzE3KSxKPUwoMzM0OSksST1MKDk1MDkpLkJ1ZmZlcixSPW5ldyBBcnJheSgxNik7ZnVuY3Rpb24gRSgpe0ouY2FsbCh0aGlzLDY0KSx0aGlzLl9hPTE3MzI1'@;
put 'ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OH1mdW5jdGlvbiB6KFUscSl7cmV0dXJuIFU8PHF8VT4+PjMyLXF9ZnVuY3Rpb24gaihVLHEsdGUsbmUsaWUsbGUsZGUpe3JldHVybiB6KFUrKHEmdGV8fnEmbmUpK2llK2xlfDAsZGUp'@;
put 'K3F8MH1mdW5jdGlvbiBWKFUscSx0ZSxuZSxpZSxsZSxkZSl7cmV0dXJuIHooVSsocSZuZXx0ZSZ+bmUpK2llK2xlfDAsZGUpK3F8MH1mdW5jdGlvbiBHKFUscSx0ZSxuZSxpZSxsZSxkZSl7cmV0dXJuIHooVSsocV50ZV5uZSkraWUrbGV8MCxkZSkrcXwwfWZ1bmN0aW9uIFcoVSxxLHRlLG5l'@;
put 'LGllLGxlLGRlKXtyZXR1cm4geihVKyh0ZV4ocXx+bmUpKStpZStsZXwwLGRlKStxfDB9SyhFLEopLEUucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXtmb3IodmFyIFU9UixxPTA7cTwxNjsrK3EpVVtxXT10aGlzLl9ibG9jay5yZWFkSW50MzJMRSg0KnEpO3ZhciB0ZT10aGlzLl9hLG5l'@;
put 'PXRoaXMuX2IsaWU9dGhpcy5fYyxsZT10aGlzLl9kO3RlPWoodGUsbmUsaWUsbGUsVVswXSwzNjE0MDkwMzYwLDcpLGxlPWoobGUsdGUsbmUsaWUsVVsxXSwzOTA1NDAyNzEwLDEyKSxpZT1qKGllLGxlLHRlLG5lLFVbMl0sNjA2MTA1ODE5LDE3KSxuZT1qKG5lLGllLGxlLHRlLFVbM10sMzI1'@;
put 'MDQ0MTk2NiwyMiksdGU9aih0ZSxuZSxpZSxsZSxVWzRdLDQxMTg1NDgzOTksNyksbGU9aihsZSx0ZSxuZSxpZSxVWzVdLDEyMDAwODA0MjYsMTIpLGllPWooaWUsbGUsdGUsbmUsVVs2XSwyODIxNzM1OTU1LDE3KSxuZT1qKG5lLGllLGxlLHRlLFVbN10sNDI0OTI2MTMxMywyMiksdGU9aih0'@;
put 'ZSxuZSxpZSxsZSxVWzhdLDE3NzAwMzU0MTYsNyksbGU9aihsZSx0ZSxuZSxpZSxVWzldLDIzMzY1NTI4NzksMTIpLGllPWooaWUsbGUsdGUsbmUsVVsxMF0sNDI5NDkyNTIzMywxNyksbmU9aihuZSxpZSxsZSx0ZSxVWzExXSwyMzA0NTYzMTM0LDIyKSx0ZT1qKHRlLG5lLGllLGxlLFVbMTJd'@;
put 'LDE4MDQ2MDM2ODIsNyksbGU9aihsZSx0ZSxuZSxpZSxVWzEzXSw0MjU0NjI2MTk1LDEyKSxpZT1qKGllLGxlLHRlLG5lLFVbMTRdLDI3OTI5NjUwMDYsMTcpLHRlPVYodGUsbmU9aihuZSxpZSxsZSx0ZSxVWzE1XSwxMjM2NTM1MzI5LDIyKSxpZSxsZSxVWzFdLDQxMjkxNzA3ODYsNSksbGU9'@;
put 'VihsZSx0ZSxuZSxpZSxVWzZdLDMyMjU0NjU2NjQsOSksaWU9VihpZSxsZSx0ZSxuZSxVWzExXSw2NDM3MTc3MTMsMTQpLG5lPVYobmUsaWUsbGUsdGUsVVswXSwzOTIxMDY5OTk0LDIwKSx0ZT1WKHRlLG5lLGllLGxlLFVbNV0sMzU5MzQwODYwNSw1KSxsZT1WKGxlLHRlLG5lLGllLFVbMTBd'@;
put 'LDM4MDE2MDgzLDkpLGllPVYoaWUsbGUsdGUsbmUsVVsxNV0sMzYzNDQ4ODk2MSwxNCksbmU9VihuZSxpZSxsZSx0ZSxVWzRdLDM4ODk0Mjk0NDgsMjApLHRlPVYodGUsbmUsaWUsbGUsVVs5XSw1Njg0NDY0MzgsNSksbGU9VihsZSx0ZSxuZSxpZSxVWzE0XSwzMjc1MTYzNjA2LDkpLGllPVYo'@;
put 'aWUsbGUsdGUsbmUsVVszXSw0MTA3NjAzMzM1LDE0KSxuZT1WKG5lLGllLGxlLHRlLFVbOF0sMTE2MzUzMTUwMSwyMCksdGU9Vih0ZSxuZSxpZSxsZSxVWzEzXSwyODUwMjg1ODI5LDUpLGxlPVYobGUsdGUsbmUsaWUsVVsyXSw0MjQzNTYzNTEyLDkpLGllPVYoaWUsbGUsdGUsbmUsVVs3XSwx'@;
put 'NzM1MzI4NDczLDE0KSx0ZT1HKHRlLG5lPVYobmUsaWUsbGUsdGUsVVsxMl0sMjM2ODM1OTU2MiwyMCksaWUsbGUsVVs1XSw0Mjk0NTg4NzM4LDQpLGxlPUcobGUsdGUsbmUsaWUsVVs4XSwyMjcyMzkyODMzLDExKSxpZT1HKGllLGxlLHRlLG5lLFVbMTFdLDE4MzkwMzA1NjIsMTYpLG5lPUco'@;
put 'bmUsaWUsbGUsdGUsVVsxNF0sNDI1OTY1Nzc0MCwyMyksdGU9Ryh0ZSxuZSxpZSxsZSxVWzFdLDI3NjM5NzUyMzYsNCksbGU9RyhsZSx0ZSxuZSxpZSxVWzRdLDEyNzI4OTMzNTMsMTEpLGllPUcoaWUsbGUsdGUsbmUsVVs3XSw0MTM5NDY5NjY0LDE2KSxuZT1HKG5lLGllLGxlLHRlLFVbMTBd'@;
put 'LDMyMDAyMzY2NTYsMjMpLHRlPUcodGUsbmUsaWUsbGUsVVsxM10sNjgxMjc5MTc0LDQpLGxlPUcobGUsdGUsbmUsaWUsVVswXSwzOTM2NDMwMDc0LDExKSxpZT1HKGllLGxlLHRlLG5lLFVbM10sMzU3MjQ0NTMxNywxNiksbmU9RyhuZSxpZSxsZSx0ZSxVWzZdLDc2MDI5MTg5LDIzKSx0ZT1H'@;
put 'KHRlLG5lLGllLGxlLFVbOV0sMzY1NDYwMjgwOSw0KSxsZT1HKGxlLHRlLG5lLGllLFVbMTJdLDM4NzMxNTE0NjEsMTEpLGllPUcoaWUsbGUsdGUsbmUsVVsxNV0sNTMwNzQyNTIwLDE2KSx0ZT1XKHRlLG5lPUcobmUsaWUsbGUsdGUsVVsyXSwzMjk5NjI4NjQ1LDIzKSxpZSxsZSxVWzBdLDQw'@;
put 'OTYzMzY0NTIsNiksbGU9VyhsZSx0ZSxuZSxpZSxVWzddLDExMjY4OTE0MTUsMTApLGllPVcoaWUsbGUsdGUsbmUsVVsxNF0sMjg3ODYxMjM5MSwxNSksbmU9VyhuZSxpZSxsZSx0ZSxVWzVdLDQyMzc1MzMyNDEsMjEpLHRlPVcodGUsbmUsaWUsbGUsVVsxMl0sMTcwMDQ4NTU3MSw2KSxsZT1X'@;
put 'KGxlLHRlLG5lLGllLFVbM10sMjM5OTk4MDY5MCwxMCksaWU9VyhpZSxsZSx0ZSxuZSxVWzEwXSw0MjkzOTE1NzczLDE1KSxuZT1XKG5lLGllLGxlLHRlLFVbMV0sMjI0MDA0NDQ5NywyMSksdGU9Vyh0ZSxuZSxpZSxsZSxVWzhdLDE4NzMzMTMzNTksNiksbGU9VyhsZSx0ZSxuZSxpZSxVWzE1'@;
put 'XSw0MjY0MzU1NTUyLDEwKSxpZT1XKGllLGxlLHRlLG5lLFVbNl0sMjczNDc2ODkxNiwxNSksbmU9VyhuZSxpZSxsZSx0ZSxVWzEzXSwxMzA5MTUxNjQ5LDIxKSx0ZT1XKHRlLG5lLGllLGxlLFVbNF0sNDE0OTQ0NDIyNiw2KSxsZT1XKGxlLHRlLG5lLGllLFVbMTFdLDMxNzQ3NTY5MTcsMTAp'@;
put 'LGllPVcoaWUsbGUsdGUsbmUsVVsyXSw3MTg3ODcyNTksMTUpLG5lPVcobmUsaWUsbGUsdGUsVVs5XSwzOTUxNDgxNzQ1LDIxKSx0aGlzLl9hPXRoaXMuX2ErdGV8MCx0aGlzLl9iPXRoaXMuX2IrbmV8MCx0aGlzLl9jPXRoaXMuX2MraWV8MCx0aGlzLl9kPXRoaXMuX2QrbGV8MH0sRS5wcm90'@;
put 'b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigpe3RoaXMuX2Jsb2NrW3RoaXMuX2Jsb2NrT2Zmc2V0KytdPTEyOCx0aGlzLl9ibG9ja09mZnNldD41NiYmKHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw2NCksdGhpcy5fdXBkYXRlKCksdGhpcy5fYmxvY2tPZmZzZXQ9MCksdGhp'@;
put 'cy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0LDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFswXSw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMV0sNjApLHRoaXMuX3VwZGF0ZSgpO3ZhciBVPUkuYWxsb2NVbnNhZmUo'@;
put 'MTYpO3JldHVybiBVLndyaXRlSW50MzJMRSh0aGlzLl9hLDApLFUud3JpdGVJbnQzMkxFKHRoaXMuX2IsNCksVS53cml0ZUludDMyTEUodGhpcy5fYyw4KSxVLndyaXRlSW50MzJMRSh0aGlzLl9kLDEyKSxVfSxILmV4cG9ydHM9RX0sMzA0NzooSCxCLEwpPT57dmFyIEs9TCg2MjQwKSxKPUwo'@;
put 'OTkzMSk7ZnVuY3Rpb24gSShSKXt0aGlzLnJhbmQ9Unx8bmV3IEouUmFuZH1ILmV4cG9ydHM9SSxJLmNyZWF0ZT1mdW5jdGlvbihSKXtyZXR1cm4gbmV3IEkoUil9LEkucHJvdG90eXBlLl9yYW5kYmVsb3c9ZnVuY3Rpb24oUil7dmFyIEU9Ui5iaXRMZW5ndGgoKSx6PU1hdGguY2VpbChFLzgp'@;
put 'O2Rve3ZhciBqPW5ldyBLKHRoaXMucmFuZC5nZW5lcmF0ZSh6KSl9d2hpbGUoai5jbXAoUik+PTApO3JldHVybiBqfSxJLnByb3RvdHlwZS5fcmFuZHJhbmdlPWZ1bmN0aW9uKFIsRSl7dmFyIHo9RS5zdWIoUik7cmV0dXJuIFIuYWRkKHRoaXMuX3JhbmRiZWxvdyh6KSl9LEkucHJvdG90eXBl'@;
put 'LnRlc3Q9ZnVuY3Rpb24oUixFLHope3ZhciBqPVIuYml0TGVuZ3RoKCksVj1LLm1vbnQoUiksRz1uZXcgSygxKS50b1JlZChWKTtFfHwoRT1NYXRoLm1heCgxLGovNDh8MCkpO2Zvcih2YXIgVz1SLnN1Ym4oMSksVT0wOyFXLnRlc3RuKFUpO1UrKyk7Zm9yKHZhciBxPVIuc2hybihVKSx0ZT1X'@;
put 'LnRvUmVkKFYpO0U+MDtFLS0pe3ZhciBuZT10aGlzLl9yYW5kcmFuZ2UobmV3IEsoMiksVyk7eiYmeihuZSk7dmFyIGllPW5lLnRvUmVkKFYpLnJlZFBvdyhxKTtpZigwIT09aWUuY21wKEcpJiYwIT09aWUuY21wKHRlKSl7Zm9yKHZhciBsZT0xO2xlPFU7bGUrKyl7aWYoMD09PShpZT1pZS5y'@;
put 'ZWRTcXIoKSkuY21wKEcpKXJldHVybiExO2lmKDA9PT1pZS5jbXAodGUpKWJyZWFrfWlmKGxlPT09VSlyZXR1cm4hMX19cmV0dXJuITB9LEkucHJvdG90eXBlLmdldERpdmlzb3I9ZnVuY3Rpb24oUixFKXt2YXIgej1SLmJpdExlbmd0aCgpLGo9Sy5tb250KFIpLFY9bmV3IEsoMSkudG9SZWQo'@;
put 'aik7RXx8KEU9TWF0aC5tYXgoMSx6LzQ4fDApKTtmb3IodmFyIEc9Ui5zdWJuKDEpLFc9MDshRy50ZXN0bihXKTtXKyspO2Zvcih2YXIgVT1SLnNocm4oVykscT1HLnRvUmVkKGopO0U+MDtFLS0pe3ZhciB0ZT10aGlzLl9yYW5kcmFuZ2UobmV3IEsoMiksRyksbmU9Ui5nY2QodGUpO2lmKDAh'@;
put 'PT1uZS5jbXBuKDEpKXJldHVybiBuZTt2YXIgaWU9dGUudG9SZWQoaikucmVkUG93KFUpO2lmKDAhPT1pZS5jbXAoVikmJjAhPT1pZS5jbXAocSkpe2Zvcih2YXIgbGU9MTtsZTxXO2xlKyspe2lmKDA9PT0oaWU9aWUucmVkU3FyKCkpLmNtcChWKSlyZXR1cm4gaWUuZnJvbVJlZCgpLnN1Ym4o'@;
put 'MSkuZ2NkKFIpO2lmKDA9PT1pZS5jbXAocSkpYnJlYWt9aWYobGU9PT1XKXJldHVybihpZT1pZS5yZWRTcXIoKSkuZnJvbVJlZCgpLnN1Ym4oMSkuZ2NkKFIpfX1yZXR1cm4hMX19LDYyNDA6ZnVuY3Rpb24oSCxCLEwpeyFmdW5jdGlvbihLLEopeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBJKGcs'@;
put 'Qyl7aWYoIWcpdGhyb3cgbmV3IEVycm9yKEN8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gUihnLEMpe2cuc3VwZXJfPUM7dmFyIE09ZnVuY3Rpb24oKXt9O00ucHJvdG90eXBlPUMucHJvdG90eXBlLGcucHJvdG90eXBlPW5ldyBNLGcucHJvdG90eXBlLmNvbnN0cnVjdG9yPWd9ZnVu'@;
put 'Y3Rpb24gRShnLEMsTSl7aWYoRS5pc0JOKGcpKXJldHVybiBnO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1nJiYoImxlIiE9PUMmJiJiZSIhPT1DfHwoTT1DLEM9MTApLHRoaXMuX2luaXQoZ3x8MCxDfHwxMCxNfHwi'@;
put 'YmUiKSl9dmFyIHo7Im9iamVjdCI9PXR5cGVvZiBLP0suZXhwb3J0cz1FOkouQk49RSxFLkJOPUUsRS53b3JkU2l6ZT0yNjt0cnl7ej10eXBlb2Ygd2luZG93PCJ1IiYmdm9pZCAwIT09d2luZG93LkJ1ZmZlcj93aW5kb3cuQnVmZmVyOkwoNjYxOSkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBq'@;
put 'KGcsQyl7dmFyIE09Zy5jaGFyQ29kZUF0KEMpO3JldHVybiBNPj02NSYmTTw9NzA/TS01NTpNPj05NyYmTTw9MTAyP00tODc6TS00OCYxNX1mdW5jdGlvbiBWKGcsQyxNKXt2YXIgeT1qKGcsTSk7cmV0dXJuIE0tMT49QyYmKHl8PWooZyxNLTEpPDw0KSx5fWZ1bmN0aW9uIEcoZyxDLE0seSl7'@;
put 'Zm9yKHZhciBwPTAsUz1NYXRoLm1pbihnLmxlbmd0aCxNKSxRPUM7UTxTO1ErKyl7dmFyIHJlPWcuY2hhckNvZGVBdChRKS00ODtwKj15LHArPXJlPj00OT9yZS00OSsxMDpyZT49MTc/cmUtMTcrMTA6cmV9cmV0dXJuIHB9RS5pc0JOPWZ1bmN0aW9uKGcpe3JldHVybiBnIGluc3RhbmNlb2Yg'@;
put 'RXx8bnVsbCE9PWcmJiJvYmplY3QiPT10eXBlb2YgZyYmZy5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PUUud29yZFNpemUmJkFycmF5LmlzQXJyYXkoZy53b3Jkcyl9LEUubWF4PWZ1bmN0aW9uKGcsQyl7cmV0dXJuIGcuY21wKEMpPjA/ZzpDfSxFLm1pbj1mdW5jdGlvbihnLEMpe3JldHVybiBn'@;
put 'LmNtcChDKTwwP2c6Q30sRS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oZyxDLE0pe2lmKCJudW1iZXIiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdE51bWJlcihnLEMsTSk7aWYoIm9iamVjdCI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0QXJyYXkoZyxDLE0pOyJoZXgiPT09QyYm'@;
put 'KEM9MTYpLEkoQz09PSgwfEMpJiZDPj0yJiZDPD0zNik7dmFyIHk9MDsiLSI9PT0oZz1nLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKHkrKyx0aGlzLm5lZ2F0aXZlPTEpLHk8Zy5sZW5ndGgmJigxNj09PUM/dGhpcy5fcGFyc2VIZXgoZyx5LE0pOih0aGlzLl9wYXJzZUJh'@;
put 'c2UoZyxDLHkpLCJsZSI9PT1NJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksQyxNKSkpfSxFLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihnLEMsTSl7ZzwwJiYodGhpcy5uZWdhdGl2ZT0xLGc9LWcpLGc8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJmddLHRo'@;
put 'aXMubGVuZ3RoPTEpOmc8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooSShnPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2MywxXSx0aGlz'@;
put 'Lmxlbmd0aD0zKSwibGUiPT09TSYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEMsTSl9LEUucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oZyxDLE0pe2lmKEkoIm51bWJlciI9PXR5cGVvZiBnLmxlbmd0aCksZy5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRo'@;
put 'aXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoZy5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGg7eSsrKXRoaXMud29yZHNbeV09MDt2YXIgcCxTLFE9MDtpZigiYmUiPT09TSlmb3IoeT1nLmxl'@;
put 'bmd0aC0xLHA9MDt5Pj0wO3ktPTMpdGhpcy53b3Jkc1twXXw9KFM9Z1t5XXxnW3ktMV08PDh8Z1t5LTJdPDwxNik8PFEmNjcxMDg4NjMsdGhpcy53b3Jkc1twKzFdPVM+Pj4yNi1RJjY3MTA4ODYzLChRKz0yNCk+PTI2JiYoUS09MjYscCsrKTtlbHNlIGlmKCJsZSI9PT1NKWZvcih5PTAscD0w'@;
put 'O3k8Zy5sZW5ndGg7eSs9Myl0aGlzLndvcmRzW3BdfD0oUz1nW3ldfGdbeSsxXTw8OHxnW3krMl08PDE2KTw8USY2NzEwODg2Myx0aGlzLndvcmRzW3ArMV09Uz4+PjI2LVEmNjcxMDg4NjMsKFErPTI0KT49MjYmJihRLT0yNixwKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBl'@;
put 'Ll9wYXJzZUhleD1mdW5jdGlvbihnLEMsTSl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChnLmxlbmd0aC1DKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciB5PTA7eTx0aGlzLmxlbmd0aDt5KyspdGhpcy53b3Jkc1t5XT0wO3ZhciBwLFM9MCxRPTA7aWYoImJl'@;
put 'Ij09PU0pZm9yKHk9Zy5sZW5ndGgtMTt5Pj1DO3ktPTIpcD1WKGcsQyx5KTw8Uyx0aGlzLndvcmRzW1FdfD02NzEwODg2MyZwLFM+PTE4PyhTLT0xOCx0aGlzLndvcmRzW1ErPTFdfD1wPj4+MjYpOlMrPTg7ZWxzZSBmb3IoeT0oZy5sZW5ndGgtQyklMj09MD9DKzE6Qzt5PGcubGVuZ3RoO3kr'@;
put 'PTIpcD1WKGcsQyx5KTw8Uyx0aGlzLndvcmRzW1FdfD02NzEwODg2MyZwLFM+PTE4PyhTLT0xOCx0aGlzLndvcmRzW1ErPTFdfD1wPj4+MjYpOlMrPTg7dGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKGcsQyxNKXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0'@;
put 'aD0xO2Zvcih2YXIgeT0wLHA9MTtwPD02NzEwODg2MztwKj1DKXkrKzt5LS0scD1wL0N8MDtmb3IodmFyIFM9Zy5sZW5ndGgtTSxRPVMleSxyZT1NYXRoLm1pbihTLFMtUSkrTSxmZT0wLG1lPU07bWU8cmU7bWUrPXkpZmU9RyhnLG1lLG1lK3ksQyksdGhpcy5pbXVsbihwKSx0aGlzLndvcmRz'@;
put 'WzBdK2ZlPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPWZlOnRoaXMuX2lhZGRuKGZlKTtpZigwIT09USl7dmFyIGtlPTE7Zm9yKGZlPUcoZyxtZSxnLmxlbmd0aCxDKSxtZT0wO21lPFE7bWUrKylrZSo9Qzt0aGlzLmltdWxuKGtlKSx0aGlzLndvcmRzWzBdK2ZlPDY3MTA4ODY0P3RoaXMud29y'@;
put 'ZHNbMF0rPWZlOnRoaXMuX2lhZGRuKGZlKX10aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZyl7Zy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKWcud29yZHNbQ109dGhpcy53b3Jkc1tDXTtnLmxlbmd0aD10'@;
put 'aGlzLmxlbmd0aCxnLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsZy5yZWQ9dGhpcy5yZWR9LEUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IEUobnVsbCk7cmV0dXJuIHRoaXMuY29weShnKSxnfSxFLnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5s'@;
put 'ZW5ndGg8ZzspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxFLnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWdu'@;
put 'KCl9LEUucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSxFLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJO'@;
put 'OiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBXPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAw'@;
put 'MCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAw'@;
put 'IiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLFU9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUs'@;
put 'NSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0scT1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0'@;
put 'MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2'@;
put 'XTtmdW5jdGlvbiB0ZShnLEMsTSl7TS5uZWdhdGl2ZT1DLm5lZ2F0aXZlXmcubmVnYXRpdmU7dmFyIHk9Zy5sZW5ndGgrQy5sZW5ndGh8MDtNLmxlbmd0aD15LHk9eS0xfDA7dmFyIHA9MHxnLndvcmRzWzBdLFM9MHxDLndvcmRzWzBdLFE9cCpTLGZlPVEvNjcxMDg4NjR8MDtNLndvcmRzWzBd'@;
put 'PTY3MTA4ODYzJlE7Zm9yKHZhciBtZT0xO21lPHk7bWUrKyl7Zm9yKHZhciBrZT1mZT4+PjI2LFRlPTY3MTA4ODYzJmZlLFBlPU1hdGgubWluKG1lLEMubGVuZ3RoLTEpLEZlPU1hdGgubWF4KDAsbWUtZy5sZW5ndGgrMSk7RmU8PVBlO0ZlKyspa2UrPShRPShwPTB8Zy53b3Jkc1ttZS1GZXww'@;
put 'XSkqKFM9MHxDLndvcmRzW0ZlXSkrVGUpLzY3MTA4ODY0fDAsVGU9NjcxMDg4NjMmUTtNLndvcmRzW21lXT0wfFRlLGZlPTB8a2V9cmV0dXJuIDAhPT1mZT9NLndvcmRzW21lXT0wfGZlOk0ubGVuZ3RoLS0sTS5zdHJpcCgpfUUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGcsQyl7dmFy'@;
put 'IE07aWYoQz0wfEN8fDEsMTY9PT0oZz1nfHwxMCl8fCJoZXgiPT09Zyl7TT0iIjtmb3IodmFyIHk9MCxwPTAsUz0wO1M8dGhpcy5sZW5ndGg7UysrKXt2YXIgUT10aGlzLndvcmRzW1NdLHJlPSgxNjc3NzIxNSYoUTw8eXxwKSkudG9TdHJpbmcoMTYpO009MCE9KHA9UT4+PjI0LXkmMTY3Nzcy'@;
put 'MTUpfHxTIT09dGhpcy5sZW5ndGgtMT9XWzYtcmUubGVuZ3RoXStyZStNOnJlK00sKHkrPTIpPj0yNiYmKHktPTI2LFMtLSl9Zm9yKDAhPT1wJiYoTT1wLnRvU3RyaW5nKDE2KStNKTtNLmxlbmd0aCVDIT0wOylNPSIwIitNO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKE09Ii0iK00pLE19'@;
put 'aWYoZz09PSgwfGcpJiZnPj0yJiZnPD0zNil7dmFyIGZlPVVbZ10sbWU9cVtnXTtNPSIiO3ZhciBrZT10aGlzLmNsb25lKCk7Zm9yKGtlLm5lZ2F0aXZlPTA7IWtlLmlzWmVybygpOyl7dmFyIFRlPWtlLm1vZG4obWUpLnRvU3RyaW5nKGcpO009KGtlPWtlLmlkaXZuKG1lKSkuaXNaZXJvKCk/'@;
put 'VGUrTTpXW2ZlLVRlLmxlbmd0aF0rVGUrTX1mb3IodGhpcy5pc1plcm8oKSYmKE09IjAiK00pO00ubGVuZ3RoJUMhPTA7KU09IjAiK007cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoTT0iLSIrTSksTX1JKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LEUucHJvdG90'@;
put 'eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIGc9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP2crPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9nKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29y'@;
put 'ZHNbMV06dGhpcy5sZW5ndGg+MiYmSSghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LWc6Z30sRS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxFLnByb3RvdHlwZS50'@;
put 'b0J1ZmZlcj1mdW5jdGlvbihnLEMpe3JldHVybiBJKHZvaWQgMCE9PXopLHRoaXMudG9BcnJheUxpa2UoeixnLEMpfSxFLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksZyxDKX0sRS5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVu'@;
put 'Y3Rpb24oZyxDLE0pe3ZhciB5PXRoaXMuYnl0ZUxlbmd0aCgpLHA9TXx8TWF0aC5tYXgoMSx5KTtJKHk8PXAsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxJKHA+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBTLFEscmU9'@;
put 'ImxlIj09PUMsZmU9bmV3IGcocCksbWU9dGhpcy5jbG9uZSgpO2lmKHJlKXtmb3IoUT0wOyFtZS5pc1plcm8oKTtRKyspUz1tZS5hbmRsbigyNTUpLG1lLml1c2hybig4KSxmZVtRXT1TO2Zvcig7UTxwO1ErKylmZVtRXT0wfWVsc2V7Zm9yKFE9MDtRPHAteTtRKyspZmVbUV09MDtmb3IoUT0w'@;
put 'OyFtZS5pc1plcm8oKTtRKyspUz1tZS5hbmRsbigyNTUpLG1lLml1c2hybig4KSxmZVtwLVEtMV09U31yZXR1cm4gZmV9LEUucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihnKXtyZXR1cm4gMzItTWF0aC5jbHozMihnKX06ZnVuY3Rpb24oZyl7dmFyIEM9ZyxNPTA7'@;
put 'cmV0dXJuIEM+PTQwOTYmJihNKz0xMyxDPj4+PTEzKSxDPj02NCYmKE0rPTcsQz4+Pj03KSxDPj04JiYoTSs9NCxDPj4+PTQpLEM+PTImJihNKz0yLEM+Pj49MiksTStDfSxFLnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oZyl7aWYoMD09PWcpcmV0dXJuIDI2O3ZhciBDPWcsTT0wO3Jl'@;
put 'dHVybiEoODE5MSZDKSYmKE0rPTEzLEM+Pj49MTMpLCEoMTI3JkMpJiYoTSs9NyxDPj4+PTcpLCEoMTUmQykmJihNKz00LEM+Pj49NCksISgzJkMpJiYoTSs9MixDPj4+PTIpLCEoMSZDKSYmTSsrLE19LEUucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBDPXRoaXMuX2NvdW50'@;
put 'Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK0N9LEUucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIGc9MCxDPTA7Qzx0aGlzLmxlbmd0aDtDKyspe3ZhciBNPXRoaXMu'@;
put 'X3plcm9CaXRzKHRoaXMud29yZHNbQ10pO2lmKGcrPU0sMjYhPT1NKWJyZWFrfXJldHVybiBnfSxFLnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSxFLnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24oZyl7cmV0dXJu'@;
put 'IDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4oZykuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSxFLnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy50ZXN0bihnLTEpP3RoaXMubm90bihnKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSxFLnBy'@;
put 'b3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sRS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LEUucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVn'@;
put 'YXRpdmVePTEpLHRoaXN9LEUucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgQz0wO0M8Zy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109dGhpcy53b3Jkc1tDXXxnLndvcmRzW0Nd'@;
put 'O3JldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlvcj1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT0odGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdW9yKGcpfSxFLnByb3RvdHlwZS5vcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5j'@;
put 'bG9uZSgpLmlvcihnKTpnLmNsb25lKCkuaW9yKHRoaXMpfSxFLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKGcpOmcuY2xvbmUoKS5pdW9yKHRoaXMpfSxFLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihnKXt2'@;
put 'YXIgQztDPXRoaXMubGVuZ3RoPmcubGVuZ3RoP2c6dGhpcztmb3IodmFyIE09MDtNPEMubGVuZ3RoO00rKyl0aGlzLndvcmRzW01dPXRoaXMud29yZHNbTV0mZy53b3Jkc1tNXTtyZXR1cm4gdGhpcy5sZW5ndGg9Qy5sZW5ndGgsdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pYW5kPWZ1bmN0'@;
put 'aW9uKGcpe3JldHVybiBJKDA9PSh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1YW5kKGcpfSxFLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKGcpOmcuY2xvbmUoKS5pYW5kKHRoaXMpfSxFLnBy'@;
put 'b3RvdHlwZS51YW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoZyk6Zy5jbG9uZSgpLml1YW5kKHRoaXMpfSxFLnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihnKXt2YXIgQyxNO3RoaXMubGVuZ3RoPmcubGVuZ3RoPyhDPXRoaXMs'@;
put 'TT1nKTooQz1nLE09dGhpcyk7Zm9yKHZhciB5PTA7eTxNLmxlbmd0aDt5KyspdGhpcy53b3Jkc1t5XT1DLndvcmRzW3ldXk0ud29yZHNbeV07aWYodGhpcyE9PUMpZm9yKDt5PEMubGVuZ3RoO3krKyl0aGlzLndvcmRzW3ldPUMud29yZHNbeV07cmV0dXJuIHRoaXMubGVuZ3RoPUMubGVuZ3Ro'@;
put 'LHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT0odGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihnKX0sRS5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25l'@;
put 'KCkuaXhvcihnKTpnLmNsb25lKCkuaXhvcih0aGlzKX0sRS5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKGcpOmcuY2xvbmUoKS5pdXhvcih0aGlzKX0sRS5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24oZyl7'@;
put 'SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBDPTB8TWF0aC5jZWlsKGcvMjYpLE09ZyUyNjt0aGlzLl9leHBhbmQoQyksTT4wJiZDLS07Zm9yKHZhciB5PTA7eTxDO3krKyl0aGlzLndvcmRzW3ldPTY3MTA4ODYzJn50aGlzLndvcmRzW3ldO3JldHVybiBNPjAmJih0aGlzLndvcmRz'@;
put 'W3ldPX50aGlzLndvcmRzW3ldJjY3MTA4ODYzPj4yNi1NKSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihnKX0sRS5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihnLEMpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0w'@;
put 'KTt2YXIgTT1nLzI2fDAseT1nJTI2O3JldHVybiB0aGlzLl9leHBhbmQoTSsxKSx0aGlzLndvcmRzW01dPUM/dGhpcy53b3Jkc1tNXXwxPDx5OnRoaXMud29yZHNbTV0mfigxPDx5KSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyl7dmFyIEMsTSx5O2lmKDAhPT10'@;
put 'aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLEM9dGhpcy5pc3ViKGcpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIGcubmVnYXRpdmU9MCxDPXRoaXMu'@;
put 'aXN1YihnKSxnLm5lZ2F0aXZlPTEsQy5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oTT10aGlzLHk9Zyk6KE09Zyx5PXRoaXMpO2Zvcih2YXIgcD0wLFM9MDtTPHkubGVuZ3RoO1MrKyl0aGlzLndvcmRzW1NdPTY3MTA4ODYzJihDPSgwfE0ud29yZHNbU10pKygwfHkud29yZHNb'@;
put 'U10pK3ApLHA9Qz4+PjI2O2Zvcig7MCE9PXAmJlM8TS5sZW5ndGg7UysrKXRoaXMud29yZHNbU109NjcxMDg4NjMmKEM9KDB8TS53b3Jkc1tTXSkrcCkscD1DPj4+MjY7aWYodGhpcy5sZW5ndGg9TS5sZW5ndGgsMCE9PXApdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09cCx0aGlzLmxlbmd0aCsr'@;
put 'O2Vsc2UgaWYoTSE9PXRoaXMpZm9yKDtTPE0ubGVuZ3RoO1MrKyl0aGlzLndvcmRzW1NdPU0ud29yZHNbU107cmV0dXJuIHRoaXN9LEUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnKXt2YXIgQztyZXR1cm4gMCE9PWcubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhnLm5lZ2F0aXZlPTAs'@;
put 'Qz10aGlzLnN1YihnKSxnLm5lZ2F0aXZlXj0xLEMpOjA9PT1nLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLEM9Zy5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLEMpOnRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKGcpOmcuY2xvbmUo'@;
put 'KS5pYWRkKHRoaXMpfSxFLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcpe2lmKDAhPT1nLm5lZ2F0aXZlKXtnLm5lZ2F0aXZlPTA7dmFyIEM9dGhpcy5pYWRkKGcpO3JldHVybiBnLm5lZ2F0aXZlPTEsQy5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdh'@;
put 'dGl2ZT0wLHRoaXMuaWFkZChnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgTSx5LHA9dGhpcy5jbXAoZyk7aWYoMD09PXApcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3A+MD8oTT10aGlzLHk9Zyk6KE09Zyx5'@;
put 'PXRoaXMpO2Zvcih2YXIgUz0wLFE9MDtRPHkubGVuZ3RoO1ErKylTPShDPSgwfE0ud29yZHNbUV0pLSgwfHkud29yZHNbUV0pK1MpPj4yNix0aGlzLndvcmRzW1FdPTY3MTA4ODYzJkM7Zm9yKDswIT09UyYmUTxNLmxlbmd0aDtRKyspUz0oQz0oMHxNLndvcmRzW1FdKStTKT4+MjYsdGhpcy53'@;
put 'b3Jkc1tRXT02NzEwODg2MyZDO2lmKDA9PT1TJiZRPE0ubGVuZ3RoJiZNIT09dGhpcylmb3IoO1E8TS5sZW5ndGg7USsrKXRoaXMud29yZHNbUV09TS53b3Jkc1tRXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsUSksTSE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEp'@;
put 'LHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihnKX07dmFyIG5lPWZ1bmN0aW9uKGcsQyxNKXt2YXIgeSxwLFMsUT1nLndvcmRzLHJlPUMud29yZHMsZmU9TS53b3JkcyxtZT0wLGtlPTB8UVswXSxUZT04MTkxJmtlLFBl'@;
put 'PWtlPj4+MTMsRmU9MHxRWzFdLE5lPTgxOTEmRmUsTGU9RmU+Pj4xMyxCZT0wfFFbMl0sSGU9ODE5MSZCZSxRZT1CZT4+PjEzLG10PTB8UVszXSxLZT04MTkxJm10LHdlPW10Pj4+MTMsSWU9MHxRWzRdLE9lPTgxOTEmSWUsZXQ9SWU+Pj4xMyxudD0wfFFbNV0scWU9ODE5MSZudCxodD1udD4+'@;
put 'PjEzLEVlPTB8UVs2XSxEZT04MTkxJkVlLCRlPUVlPj4+MTMsYXQ9MHxRWzddLGN0PTgxOTEmYXQsT3Q9YXQ+Pj4xMyxQdD0wfFFbOF0sQXQ9ODE5MSZQdCxKdD1QdD4+PjEzLG1uPTB8UVs5XSxOdD04MTkxJm1uLGJuPW1uPj4+MTMsR249MHxyZVswXSxvbj04MTkxJkduLCRuPUduPj4+MTMs'@;
put 'Tm49MHxyZVsxXSxwdD04MTkxJk5uLHBuPU5uPj4+MTMsaG49MHxyZVsyXSxDdD04MTkxJmhuLGVuPWhuPj4+MTMsX3Q9MHxyZVszXSxWdD04MTkxJl90LF9uPV90Pj4+MTMsb3Q9MHxyZVs0XSxJdD04MTkxJm90LG5uPW90Pj4+MTMsRHQ9MHxyZVs1XSx2dD04MTkxJkR0LEd0PUR0Pj4+MTMs'@;
put 'TG49MHxyZVs2XSx6dD04MTkxJkxuLE1uPUxuPj4+MTMsVG49MHxyZVs3XSxzbj04MTkxJlRuLEJuPVRuPj4+MTMsRm49MHxyZVs4XSxxdD04MTkxJkZuLEhuPUZuPj4+MTMsaWk9MHxyZVs5XSxjbj04MTkxJmlpLGpuPWlpPj4+MTM7TS5uZWdhdGl2ZT1nLm5lZ2F0aXZlXkMubmVnYXRpdmUs'@;
put 'TS5sZW5ndGg9MTk7dmFyIFhyPShtZSsoeT1NYXRoLmltdWwoVGUsb24pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKFRlLCRuKSkrTWF0aC5pbXVsKFBlLG9uKXwwKSk8PDEzKXwwO21lPSgoUz1NYXRoLmltdWwoUGUsJG4pKSsocD4+PjEzKXwwKSsoWHI+Pj4yNil8MCxYciY9NjcxMDg4'@;
put 'NjMseT1NYXRoLmltdWwoTmUsb24pLHA9KHA9TWF0aC5pbXVsKE5lLCRuKSkrTWF0aC5pbXVsKExlLG9uKXwwLFM9TWF0aC5pbXVsKExlLCRuKTt2YXIgdmk9KG1lKyh5PXkrTWF0aC5pbXVsKFRlLHB0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoVGUscG4pfDApK01hdGguaW11'@;
put 'bChQZSxwdCl8MCkpPDwxMyl8MDttZT0oKFM9UytNYXRoLmltdWwoUGUscG4pfDApKyhwPj4+MTMpfDApKyh2aT4+PjI2KXwwLHZpJj02NzEwODg2Myx5PU1hdGguaW11bChIZSxvbikscD0ocD1NYXRoLmltdWwoSGUsJG4pKStNYXRoLmltdWwoUWUsb24pfDAsUz1NYXRoLmltdWwoUWUsJG4p'@;
put 'LHk9eStNYXRoLmltdWwoTmUscHQpfDAscD0ocD1wK01hdGguaW11bChOZSxwbil8MCkrTWF0aC5pbXVsKExlLHB0KXwwLFM9UytNYXRoLmltdWwoTGUscG4pfDA7dmFyIEVyPShtZSsoeT15K01hdGguaW11bChUZSxDdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFRlLGVuKXww'@;
put 'KStNYXRoLmltdWwoUGUsQ3QpfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKFBlLGVuKXwwKSsocD4+PjEzKXwwKSsoRXI+Pj4yNil8MCxFciY9NjcxMDg4NjMseT1NYXRoLmltdWwoS2Usb24pLHA9KHA9TWF0aC5pbXVsKEtlLCRuKSkrTWF0aC5pbXVsKHdlLG9uKXwwLFM9TWF0aC5p'@;
put 'bXVsKHdlLCRuKSx5PXkrTWF0aC5pbXVsKEhlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoSGUscG4pfDApK01hdGguaW11bChRZSxwdCl8MCxTPVMrTWF0aC5pbXVsKFFlLHBuKXwwLHk9eStNYXRoLmltdWwoTmUsQ3QpfDAscD0ocD1wK01hdGguaW11bChOZSxlbil8MCkrTWF0aC5pbXVsKExl'@;
put 'LEN0KXwwLFM9UytNYXRoLmltdWwoTGUsZW4pfDA7dmFyIFlpPShtZSsoeT15K01hdGguaW11bChUZSxWdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFRlLF9uKXwwKStNYXRoLmltdWwoUGUsVnQpfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKFBlLF9uKXwwKSsocD4+'@;
put 'PjEzKXwwKSsoWWk+Pj4yNil8MCxZaSY9NjcxMDg4NjMseT1NYXRoLmltdWwoT2Usb24pLHA9KHA9TWF0aC5pbXVsKE9lLCRuKSkrTWF0aC5pbXVsKGV0LG9uKXwwLFM9TWF0aC5pbXVsKGV0LCRuKSx5PXkrTWF0aC5pbXVsKEtlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoS2UscG4pfDApK01h'@;
put 'dGguaW11bCh3ZSxwdCl8MCxTPVMrTWF0aC5pbXVsKHdlLHBuKXwwLHk9eStNYXRoLmltdWwoSGUsQ3QpfDAscD0ocD1wK01hdGguaW11bChIZSxlbil8MCkrTWF0aC5pbXVsKFFlLEN0KXwwLFM9UytNYXRoLmltdWwoUWUsZW4pfDAseT15K01hdGguaW11bChOZSxWdCl8MCxwPShwPXArTWF0'@;
put 'aC5pbXVsKE5lLF9uKXwwKStNYXRoLmltdWwoTGUsVnQpfDAsUz1TK01hdGguaW11bChMZSxfbil8MDt2YXIgSnI9KG1lKyh5PXkrTWF0aC5pbXVsKFRlLEl0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoVGUsbm4pfDApK01hdGguaW11bChQZSxJdCl8MCkpPDwxMyl8MDttZT0o'@;
put 'KFM9UytNYXRoLmltdWwoUGUsbm4pfDApKyhwPj4+MTMpfDApKyhKcj4+PjI2KXwwLEpyJj02NzEwODg2Myx5PU1hdGguaW11bChxZSxvbikscD0ocD1NYXRoLmltdWwocWUsJG4pKStNYXRoLmltdWwoaHQsb24pfDAsUz1NYXRoLmltdWwoaHQsJG4pLHk9eStNYXRoLmltdWwoT2UscHQpfDAs'@;
put 'cD0ocD1wK01hdGguaW11bChPZSxwbil8MCkrTWF0aC5pbXVsKGV0LHB0KXwwLFM9UytNYXRoLmltdWwoZXQscG4pfDAseT15K01hdGguaW11bChLZSxDdCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLGVuKXwwKStNYXRoLmltdWwod2UsQ3QpfDAsUz1TK01hdGguaW11bCh3ZSxlbil8MCx5PXkr'@;
put 'TWF0aC5pbXVsKEhlLFZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoSGUsX24pfDApK01hdGguaW11bChRZSxWdCl8MCxTPVMrTWF0aC5pbXVsKFFlLF9uKXwwLHk9eStNYXRoLmltdWwoTmUsSXQpfDAscD0ocD1wK01hdGguaW11bChOZSxubil8MCkrTWF0aC5pbXVsKExlLEl0KXwwLFM9UytNYXRo'@;
put 'LmltdWwoTGUsbm4pfDA7dmFyIGFvPShtZSsoeT15K01hdGguaW11bChUZSx2dCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFRlLEd0KXwwKStNYXRoLmltdWwoUGUsdnQpfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKFBlLEd0KXwwKSsocD4+PjEzKXwwKSsoYW8+Pj4y'@;
put 'Nil8MCxhbyY9NjcxMDg4NjMseT1NYXRoLmltdWwoRGUsb24pLHA9KHA9TWF0aC5pbXVsKERlLCRuKSkrTWF0aC5pbXVsKCRlLG9uKXwwLFM9TWF0aC5pbXVsKCRlLCRuKSx5PXkrTWF0aC5pbXVsKHFlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwocWUscG4pfDApK01hdGguaW11bChodCxwdCl8'@;
put 'MCxTPVMrTWF0aC5pbXVsKGh0LHBuKXwwLHk9eStNYXRoLmltdWwoT2UsQ3QpfDAscD0ocD1wK01hdGguaW11bChPZSxlbil8MCkrTWF0aC5pbXVsKGV0LEN0KXwwLFM9UytNYXRoLmltdWwoZXQsZW4pfDAseT15K01hdGguaW11bChLZSxWdCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLF9uKXww'@;
put 'KStNYXRoLmltdWwod2UsVnQpfDAsUz1TK01hdGguaW11bCh3ZSxfbil8MCx5PXkrTWF0aC5pbXVsKEhlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoSGUsbm4pfDApK01hdGguaW11bChRZSxJdCl8MCxTPVMrTWF0aC5pbXVsKFFlLG5uKXwwLHk9eStNYXRoLmltdWwoTmUsdnQpfDAscD0ocD1w'@;
put 'K01hdGguaW11bChOZSxHdCl8MCkrTWF0aC5pbXVsKExlLHZ0KXwwLFM9UytNYXRoLmltdWwoTGUsR3QpfDA7dmFyIEJyPShtZSsoeT15K01hdGguaW11bChUZSx6dCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFRlLE1uKXwwKStNYXRoLmltdWwoUGUsenQpfDApKTw8MTMpfDA7'@;
put 'bWU9KChTPVMrTWF0aC5pbXVsKFBlLE1uKXwwKSsocD4+PjEzKXwwKSsoQnI+Pj4yNil8MCxCciY9NjcxMDg4NjMseT1NYXRoLmltdWwoY3Qsb24pLHA9KHA9TWF0aC5pbXVsKGN0LCRuKSkrTWF0aC5pbXVsKE90LG9uKXwwLFM9TWF0aC5pbXVsKE90LCRuKSx5PXkrTWF0aC5pbXVsKERlLHB0'@;
put 'KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUscG4pfDApK01hdGguaW11bCgkZSxwdCl8MCxTPVMrTWF0aC5pbXVsKCRlLHBuKXwwLHk9eStNYXRoLmltdWwocWUsQ3QpfDAscD0ocD1wK01hdGguaW11bChxZSxlbil8MCkrTWF0aC5pbXVsKGh0LEN0KXwwLFM9UytNYXRoLmltdWwoaHQsZW4pfDAs'@;
put 'eT15K01hdGguaW11bChPZSxWdCl8MCxwPShwPXArTWF0aC5pbXVsKE9lLF9uKXwwKStNYXRoLmltdWwoZXQsVnQpfDAsUz1TK01hdGguaW11bChldCxfbil8MCx5PXkrTWF0aC5pbXVsKEtlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoS2Usbm4pfDApK01hdGguaW11bCh3ZSxJdCl8MCxTPVMr'@;
put 'TWF0aC5pbXVsKHdlLG5uKXwwLHk9eStNYXRoLmltdWwoSGUsdnQpfDAscD0ocD1wK01hdGguaW11bChIZSxHdCl8MCkrTWF0aC5pbXVsKFFlLHZ0KXwwLFM9UytNYXRoLmltdWwoUWUsR3QpfDAseT15K01hdGguaW11bChOZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKE5lLE1uKXwwKStNYXRo'@;
put 'LmltdWwoTGUsenQpfDAsUz1TK01hdGguaW11bChMZSxNbil8MDt2YXIgSmk9KG1lKyh5PXkrTWF0aC5pbXVsKFRlLHNuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoVGUsQm4pfDApK01hdGguaW11bChQZSxzbil8MCkpPDwxMyl8MDttZT0oKFM9UytNYXRoLmltdWwoUGUsQm4p'@;
put 'fDApKyhwPj4+MTMpfDApKyhKaT4+PjI2KXwwLEppJj02NzEwODg2Myx5PU1hdGguaW11bChBdCxvbikscD0ocD1NYXRoLmltdWwoQXQsJG4pKStNYXRoLmltdWwoSnQsb24pfDAsUz1NYXRoLmltdWwoSnQsJG4pLHk9eStNYXRoLmltdWwoY3QscHQpfDAscD0ocD1wK01hdGguaW11bChjdCxw'@;
put 'bil8MCkrTWF0aC5pbXVsKE90LHB0KXwwLFM9UytNYXRoLmltdWwoT3QscG4pfDAseT15K01hdGguaW11bChEZSxDdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLGVuKXwwKStNYXRoLmltdWwoJGUsQ3QpfDAsUz1TK01hdGguaW11bCgkZSxlbil8MCx5PXkrTWF0aC5pbXVsKHFlLFZ0KXwwLHA9'@;
put 'KHA9cCtNYXRoLmltdWwocWUsX24pfDApK01hdGguaW11bChodCxWdCl8MCxTPVMrTWF0aC5pbXVsKGh0LF9uKXwwLHk9eStNYXRoLmltdWwoT2UsSXQpfDAscD0ocD1wK01hdGguaW11bChPZSxubil8MCkrTWF0aC5pbXVsKGV0LEl0KXwwLFM9UytNYXRoLmltdWwoZXQsbm4pfDAseT15K01h'@;
put 'dGguaW11bChLZSx2dCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLEd0KXwwKStNYXRoLmltdWwod2UsdnQpfDAsUz1TK01hdGguaW11bCh3ZSxHdCl8MCx5PXkrTWF0aC5pbXVsKEhlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoSGUsTW4pfDApK01hdGguaW11bChRZSx6dCl8MCxTPVMrTWF0aC5p'@;
put 'bXVsKFFlLE1uKXwwLHk9eStNYXRoLmltdWwoTmUsc24pfDAscD0ocD1wK01hdGguaW11bChOZSxCbil8MCkrTWF0aC5pbXVsKExlLHNuKXwwLFM9UytNYXRoLmltdWwoTGUsQm4pfDA7dmFyIHRvPShtZSsoeT15K01hdGguaW11bChUZSxxdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5p'@;
put 'bXVsKFRlLEhuKXwwKStNYXRoLmltdWwoUGUscXQpfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKFBlLEhuKXwwKSsocD4+PjEzKXwwKSsodG8+Pj4yNil8MCx0byY9NjcxMDg4NjMseT1NYXRoLmltdWwoTnQsb24pLHA9KHA9TWF0aC5pbXVsKE50LCRuKSkrTWF0aC5pbXVsKGJuLG9u'@;
put 'KXwwLFM9TWF0aC5pbXVsKGJuLCRuKSx5PXkrTWF0aC5pbXVsKEF0LHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoQXQscG4pfDApK01hdGguaW11bChKdCxwdCl8MCxTPVMrTWF0aC5pbXVsKEp0LHBuKXwwLHk9eStNYXRoLmltdWwoY3QsQ3QpfDAscD0ocD1wK01hdGguaW11bChjdCxlbil8MCkr'@;
put 'TWF0aC5pbXVsKE90LEN0KXwwLFM9UytNYXRoLmltdWwoT3QsZW4pfDAseT15K01hdGguaW11bChEZSxWdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLF9uKXwwKStNYXRoLmltdWwoJGUsVnQpfDAsUz1TK01hdGguaW11bCgkZSxfbil8MCx5PXkrTWF0aC5pbXVsKHFlLEl0KXwwLHA9KHA9cCtN'@;
put 'YXRoLmltdWwocWUsbm4pfDApK01hdGguaW11bChodCxJdCl8MCxTPVMrTWF0aC5pbXVsKGh0LG5uKXwwLHk9eStNYXRoLmltdWwoT2UsdnQpfDAscD0ocD1wK01hdGguaW11bChPZSxHdCl8MCkrTWF0aC5pbXVsKGV0LHZ0KXwwLFM9UytNYXRoLmltdWwoZXQsR3QpfDAseT15K01hdGguaW11'@;
put 'bChLZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLE1uKXwwKStNYXRoLmltdWwod2UsenQpfDAsUz1TK01hdGguaW11bCh3ZSxNbil8MCx5PXkrTWF0aC5pbXVsKEhlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoSGUsQm4pfDApK01hdGguaW11bChRZSxzbil8MCxTPVMrTWF0aC5pbXVsKFFl'@;
put 'LEJuKXwwLHk9eStNYXRoLmltdWwoTmUscXQpfDAscD0ocD1wK01hdGguaW11bChOZSxIbil8MCkrTWF0aC5pbXVsKExlLHF0KXwwLFM9UytNYXRoLmltdWwoTGUsSG4pfDA7dmFyIGNvPShtZSsoeT15K01hdGguaW11bChUZSxjbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFRl'@;
put 'LGpuKXwwKStNYXRoLmltdWwoUGUsY24pfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKFBlLGpuKXwwKSsocD4+PjEzKXwwKSsoY28+Pj4yNil8MCxjbyY9NjcxMDg4NjMseT1NYXRoLmltdWwoTnQscHQpLHA9KHA9TWF0aC5pbXVsKE50LHBuKSkrTWF0aC5pbXVsKGJuLHB0KXwwLFM9'@;
put 'TWF0aC5pbXVsKGJuLHBuKSx5PXkrTWF0aC5pbXVsKEF0LEN0KXwwLHA9KHA9cCtNYXRoLmltdWwoQXQsZW4pfDApK01hdGguaW11bChKdCxDdCl8MCxTPVMrTWF0aC5pbXVsKEp0LGVuKXwwLHk9eStNYXRoLmltdWwoY3QsVnQpfDAscD0ocD1wK01hdGguaW11bChjdCxfbil8MCkrTWF0aC5p'@;
put 'bXVsKE90LFZ0KXwwLFM9UytNYXRoLmltdWwoT3QsX24pfDAseT15K01hdGguaW11bChEZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLG5uKXwwKStNYXRoLmltdWwoJGUsSXQpfDAsUz1TK01hdGguaW11bCgkZSxubil8MCx5PXkrTWF0aC5pbXVsKHFlLHZ0KXwwLHA9KHA9cCtNYXRoLmlt'@;
put 'dWwocWUsR3QpfDApK01hdGguaW11bChodCx2dCl8MCxTPVMrTWF0aC5pbXVsKGh0LEd0KXwwLHk9eStNYXRoLmltdWwoT2UsenQpfDAscD0ocD1wK01hdGguaW11bChPZSxNbil8MCkrTWF0aC5pbXVsKGV0LHp0KXwwLFM9UytNYXRoLmltdWwoZXQsTW4pfDAseT15K01hdGguaW11bChLZSxz'@;
put 'bil8MCxwPShwPXArTWF0aC5pbXVsKEtlLEJuKXwwKStNYXRoLmltdWwod2Usc24pfDAsUz1TK01hdGguaW11bCh3ZSxCbil8MCx5PXkrTWF0aC5pbXVsKEhlLHF0KXwwLHA9KHA9cCtNYXRoLmltdWwoSGUsSG4pfDApK01hdGguaW11bChRZSxxdCl8MCxTPVMrTWF0aC5pbXVsKFFlLEhuKXww'@;
put 'O3ZhciBsbz0obWUrKHk9eStNYXRoLmltdWwoTmUsY24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChOZSxqbil8MCkrTWF0aC5pbXVsKExlLGNuKXwwKSk8PDEzKXwwO21lPSgoUz1TK01hdGguaW11bChMZSxqbil8MCkrKHA+Pj4xMyl8MCkrKGxvPj4+MjYpfDAsbG8mPTY3MTA4'@;
put 'ODYzLHk9TWF0aC5pbXVsKE50LEN0KSxwPShwPU1hdGguaW11bChOdCxlbikpK01hdGguaW11bChibixDdCl8MCxTPU1hdGguaW11bChibixlbikseT15K01hdGguaW11bChBdCxWdCl8MCxwPShwPXArTWF0aC5pbXVsKEF0LF9uKXwwKStNYXRoLmltdWwoSnQsVnQpfDAsUz1TK01hdGguaW11'@;
put 'bChKdCxfbil8MCx5PXkrTWF0aC5pbXVsKGN0LEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoY3Qsbm4pfDApK01hdGguaW11bChPdCxJdCl8MCxTPVMrTWF0aC5pbXVsKE90LG5uKXwwLHk9eStNYXRoLmltdWwoRGUsdnQpfDAscD0ocD1wK01hdGguaW11bChEZSxHdCl8MCkrTWF0aC5pbXVsKCRl'@;
put 'LHZ0KXwwLFM9UytNYXRoLmltdWwoJGUsR3QpfDAseT15K01hdGguaW11bChxZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKHFlLE1uKXwwKStNYXRoLmltdWwoaHQsenQpfDAsUz1TK01hdGguaW11bChodCxNbil8MCx5PXkrTWF0aC5pbXVsKE9lLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoT2Us'@;
put 'Qm4pfDApK01hdGguaW11bChldCxzbil8MCxTPVMrTWF0aC5pbXVsKGV0LEJuKXwwLHk9eStNYXRoLmltdWwoS2UscXQpfDAscD0ocD1wK01hdGguaW11bChLZSxIbil8MCkrTWF0aC5pbXVsKHdlLHF0KXwwLFM9UytNYXRoLmltdWwod2UsSG4pfDA7dmFyIHNvPShtZSsoeT15K01hdGguaW11'@;
put 'bChIZSxjbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKEhlLGpuKXwwKStNYXRoLmltdWwoUWUsY24pfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKFFlLGpuKXwwKSsocD4+PjEzKXwwKSsoc28+Pj4yNil8MCxzbyY9NjcxMDg4NjMseT1NYXRoLmltdWwoTnQsVnQpLHA9'@;
put 'KHA9TWF0aC5pbXVsKE50LF9uKSkrTWF0aC5pbXVsKGJuLFZ0KXwwLFM9TWF0aC5pbXVsKGJuLF9uKSx5PXkrTWF0aC5pbXVsKEF0LEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoQXQsbm4pfDApK01hdGguaW11bChKdCxJdCl8MCxTPVMrTWF0aC5pbXVsKEp0LG5uKXwwLHk9eStNYXRoLmltdWwo'@;
put 'Y3QsdnQpfDAscD0ocD1wK01hdGguaW11bChjdCxHdCl8MCkrTWF0aC5pbXVsKE90LHZ0KXwwLFM9UytNYXRoLmltdWwoT3QsR3QpfDAseT15K01hdGguaW11bChEZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKERlLE1uKXwwKStNYXRoLmltdWwoJGUsenQpfDAsUz1TK01hdGguaW11bCgkZSxN'@;
put 'bil8MCx5PXkrTWF0aC5pbXVsKHFlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwocWUsQm4pfDApK01hdGguaW11bChodCxzbil8MCxTPVMrTWF0aC5pbXVsKGh0LEJuKXwwLHk9eStNYXRoLmltdWwoT2UscXQpfDAscD0ocD1wK01hdGguaW11bChPZSxIbil8MCkrTWF0aC5pbXVsKGV0LHF0KXww'@;
put 'LFM9UytNYXRoLmltdWwoZXQsSG4pfDA7dmFyIFhpPShtZSsoeT15K01hdGguaW11bChLZSxjbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKEtlLGpuKXwwKStNYXRoLmltdWwod2UsY24pfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKHdlLGpuKXwwKSsocD4+PjEzKXww'@;
put 'KSsoWGk+Pj4yNil8MCxYaSY9NjcxMDg4NjMseT1NYXRoLmltdWwoTnQsSXQpLHA9KHA9TWF0aC5pbXVsKE50LG5uKSkrTWF0aC5pbXVsKGJuLEl0KXwwLFM9TWF0aC5pbXVsKGJuLG5uKSx5PXkrTWF0aC5pbXVsKEF0LHZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoQXQsR3QpfDApK01hdGguaW11'@;
put 'bChKdCx2dCl8MCxTPVMrTWF0aC5pbXVsKEp0LEd0KXwwLHk9eStNYXRoLmltdWwoY3QsenQpfDAscD0ocD1wK01hdGguaW11bChjdCxNbil8MCkrTWF0aC5pbXVsKE90LHp0KXwwLFM9UytNYXRoLmltdWwoT3QsTW4pfDAseT15K01hdGguaW11bChEZSxzbil8MCxwPShwPXArTWF0aC5pbXVs'@;
put 'KERlLEJuKXwwKStNYXRoLmltdWwoJGUsc24pfDAsUz1TK01hdGguaW11bCgkZSxCbil8MCx5PXkrTWF0aC5pbXVsKHFlLHF0KXwwLHA9KHA9cCtNYXRoLmltdWwocWUsSG4pfDApK01hdGguaW11bChodCxxdCl8MCxTPVMrTWF0aC5pbXVsKGh0LEhuKXwwO3ZhciBwbz0obWUrKHk9eStNYXRo'@;
put 'LmltdWwoT2UsY24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChPZSxqbil8MCkrTWF0aC5pbXVsKGV0LGNuKXwwKSk8PDEzKXwwO21lPSgoUz1TK01hdGguaW11bChldCxqbil8MCkrKHA+Pj4xMyl8MCkrKHBvPj4+MjYpfDAscG8mPTY3MTA4ODYzLHk9TWF0aC5pbXVsKE50LHZ0'@;
put 'KSxwPShwPU1hdGguaW11bChOdCxHdCkpK01hdGguaW11bChibix2dCl8MCxTPU1hdGguaW11bChibixHdCkseT15K01hdGguaW11bChBdCx6dCl8MCxwPShwPXArTWF0aC5pbXVsKEF0LE1uKXwwKStNYXRoLmltdWwoSnQsenQpfDAsUz1TK01hdGguaW11bChKdCxNbil8MCx5PXkrTWF0aC5p'@;
put 'bXVsKGN0LHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoY3QsQm4pfDApK01hdGguaW11bChPdCxzbil8MCxTPVMrTWF0aC5pbXVsKE90LEJuKXwwLHk9eStNYXRoLmltdWwoRGUscXQpfDAscD0ocD1wK01hdGguaW11bChEZSxIbil8MCkrTWF0aC5pbXVsKCRlLHF0KXwwLFM9UytNYXRoLmltdWwo'@;
put 'JGUsSG4pfDA7dmFyIF9yPShtZSsoeT15K01hdGguaW11bChxZSxjbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKHFlLGpuKXwwKStNYXRoLmltdWwoaHQsY24pfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKGh0LGpuKXwwKSsocD4+PjEzKXwwKSsoX3I+Pj4yNil8MCxf'@;
put 'ciY9NjcxMDg4NjMseT1NYXRoLmltdWwoTnQsenQpLHA9KHA9TWF0aC5pbXVsKE50LE1uKSkrTWF0aC5pbXVsKGJuLHp0KXwwLFM9TWF0aC5pbXVsKGJuLE1uKSx5PXkrTWF0aC5pbXVsKEF0LHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoQXQsQm4pfDApK01hdGguaW11bChKdCxzbil8MCxTPVMr'@;
put 'TWF0aC5pbXVsKEp0LEJuKXwwLHk9eStNYXRoLmltdWwoY3QscXQpfDAscD0ocD1wK01hdGguaW11bChjdCxIbil8MCkrTWF0aC5pbXVsKE90LHF0KXwwLFM9UytNYXRoLmltdWwoT3QsSG4pfDA7dmFyIEZpPShtZSsoeT15K01hdGguaW11bChEZSxjbil8MCl8MCkrKCg4MTkxJihwPShwPXAr'@;
put 'TWF0aC5pbXVsKERlLGpuKXwwKStNYXRoLmltdWwoJGUsY24pfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKCRlLGpuKXwwKSsocD4+PjEzKXwwKSsoRmk+Pj4yNil8MCxGaSY9NjcxMDg4NjMseT1NYXRoLmltdWwoTnQsc24pLHA9KHA9TWF0aC5pbXVsKE50LEJuKSkrTWF0aC5pbXVs'@;
put 'KGJuLHNuKXwwLFM9TWF0aC5pbXVsKGJuLEJuKSx5PXkrTWF0aC5pbXVsKEF0LHF0KXwwLHA9KHA9cCtNYXRoLmltdWwoQXQsSG4pfDApK01hdGguaW11bChKdCxxdCl8MCxTPVMrTWF0aC5pbXVsKEp0LEhuKXwwO3ZhciBIbz0obWUrKHk9eStNYXRoLmltdWwoY3QsY24pfDApfDApKygoODE5'@;
put 'MSYocD0ocD1wK01hdGguaW11bChjdCxqbil8MCkrTWF0aC5pbXVsKE90LGNuKXwwKSk8PDEzKXwwO21lPSgoUz1TK01hdGguaW11bChPdCxqbil8MCkrKHA+Pj4xMyl8MCkrKEhvPj4+MjYpfDAsSG8mPTY3MTA4ODYzLHk9TWF0aC5pbXVsKE50LHF0KSxwPShwPU1hdGguaW11bChOdCxIbikp'@;
put 'K01hdGguaW11bChibixxdCl8MCxTPU1hdGguaW11bChibixIbik7dmFyIGdhPShtZSsoeT15K01hdGguaW11bChBdCxjbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKEF0LGpuKXwwKStNYXRoLmltdWwoSnQsY24pfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKEp0LGpu'@;
put 'KXwwKSsocD4+PjEzKXwwKSsoZ2E+Pj4yNil8MCxnYSY9NjcxMDg4NjM7dmFyIGxhPShtZSsoeT1NYXRoLmltdWwoTnQsY24pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKE50LGpuKSkrTWF0aC5pbXVsKGJuLGNuKXwwKSk8PDEzKXwwO3JldHVybiBtZT0oKFM9TWF0aC5pbXVsKGJuLGpu'@;
put 'KSkrKHA+Pj4xMyl8MCkrKGxhPj4+MjYpfDAsbGEmPTY3MTA4ODYzLGZlWzBdPVhyLGZlWzFdPXZpLGZlWzJdPUVyLGZlWzNdPVlpLGZlWzRdPUpyLGZlWzVdPWFvLGZlWzZdPUJyLGZlWzddPUppLGZlWzhdPXRvLGZlWzldPWNvLGZlWzEwXT1sbyxmZVsxMV09c28sZmVbMTJdPVhpLGZlWzEz'@;
put 'XT1wbyxmZVsxNF09X3IsZmVbMTVdPUZpLGZlWzE2XT1IbyxmZVsxN109Z2EsZmVbMThdPWxhLDAhPT1tZSYmKGZlWzE5XT1tZSxNLmxlbmd0aCsrKSxNfTtmdW5jdGlvbiBpZShnLEMsTSl7cmV0dXJuKG5ldyBsZSkubXVscChnLEMsTSl9ZnVuY3Rpb24gbGUoZyxDKXt0aGlzLng9Zyx0aGlz'@;
put 'Lnk9Q31NYXRoLmltdWx8fChuZT10ZSksRS5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oZyxDKXt2YXIgeT10aGlzLmxlbmd0aCtnLmxlbmd0aDtyZXR1cm4gMTA9PT10aGlzLmxlbmd0aCYmMTA9PT1nLmxlbmd0aD9uZSh0aGlzLGcsQyk6eTw2Mz90ZSh0aGlzLGcsQyk6eTwxMDI0P2Z1bmN0'@;
put 'aW9uKHAsUyxRKXtRLm5lZ2F0aXZlPVMubmVnYXRpdmVecC5uZWdhdGl2ZSxRLmxlbmd0aD1wLmxlbmd0aCtTLmxlbmd0aDtmb3IodmFyIHJlPTAsZmU9MCxtZT0wO21lPFEubGVuZ3RoLTE7bWUrKyl7dmFyIGtlPWZlO2ZlPTA7Zm9yKHZhciBUZT02NzEwODg2MyZyZSxQZT1NYXRoLm1pbiht'@;
put 'ZSxTLmxlbmd0aC0xKSxGZT1NYXRoLm1heCgwLG1lLXAubGVuZ3RoKzEpO0ZlPD1QZTtGZSsrKXt2YXIgTGU9KDB8cC53b3Jkc1ttZS1GZV0pKigwfFMud29yZHNbRmVdKSxCZT02NzEwODg2MyZMZTtUZT02NzEwODg2MyYoQmU9QmUrVGV8MCksZmUrPShrZT0oa2U9a2UrKExlLzY3MTA4ODY0'@;
put 'fDApfDApKyhCZT4+PjI2KXwwKT4+PjI2LGtlJj02NzEwODg2M31RLndvcmRzW21lXT1UZSxyZT1rZSxrZT1mZX1yZXR1cm4gMCE9PXJlP1Eud29yZHNbbWVdPXJlOlEubGVuZ3RoLS0sUS5zdHJpcCgpfSh0aGlzLGcsQyk6aWUodGhpcyxnLEMpfSxsZS5wcm90b3R5cGUubWFrZVJCVD1mdW5j'@;
put 'dGlvbihnKXtmb3IodmFyIEM9bmV3IEFycmF5KGcpLE09RS5wcm90b3R5cGUuX2NvdW50Qml0cyhnKS0xLHk9MDt5PGc7eSsrKUNbeV09dGhpcy5yZXZCaW4oeSxNLGcpO3JldHVybiBDfSxsZS5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKGcsQyxNKXtpZigwPT09Z3x8Zz09PU0tMSlyZXR1'@;
put 'cm4gZztmb3IodmFyIHk9MCxwPTA7cDxDO3ArKyl5fD0oMSZnKTw8Qy1wLTEsZz4+PTE7cmV0dXJuIHl9LGxlLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKGcsQyxNLHkscCxTKXtmb3IodmFyIFE9MDtRPFM7USsrKXlbUV09Q1tnW1FdXSxwW1FdPU1bZ1tRXV19LGxlLnByb3RvdHlwZS50'@;
put 'cmFuc2Zvcm09ZnVuY3Rpb24oZyxDLE0seSxwLFMpe3RoaXMucGVybXV0ZShTLGcsQyxNLHkscCk7Zm9yKHZhciBRPTE7UTxwO1E8PD0xKWZvcih2YXIgcmU9UTw8MSxmZT1NYXRoLmNvcygyKk1hdGguUEkvcmUpLG1lPU1hdGguc2luKDIqTWF0aC5QSS9yZSksa2U9MDtrZTxwO2tlKz1yZSlm'@;
put 'b3IodmFyIFRlPWZlLFBlPW1lLEZlPTA7RmU8UTtGZSsrKXt2YXIgTmU9TVtrZStGZV0sTGU9eVtrZStGZV0sQmU9TVtrZStGZStRXSxIZT15W2tlK0ZlK1FdLFFlPVRlKkJlLVBlKkhlO0hlPVRlKkhlK1BlKkJlLE1ba2UrRmVdPU5lKyhCZT1RZSkseVtrZStGZV09TGUrSGUsTVtrZStGZStR'@;
put 'XT1OZS1CZSx5W2tlK0ZlK1FdPUxlLUhlLEZlIT09cmUmJihRZT1mZSpUZS1tZSpQZSxQZT1mZSpQZSttZSpUZSxUZT1RZSl9fSxsZS5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oZyxDKXt2YXIgTT0xfE1hdGgubWF4KEMsZykseT0xJk0scD0wO2ZvcihNPU0vMnwwO007TT4+Pj0x'@;
put 'KXArKztyZXR1cm4gMTw8cCsxK3l9LGxlLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oZyxDLE0pe2lmKCEoTTw9MSkpZm9yKHZhciB5PTA7eTxNLzI7eSsrKXt2YXIgcD1nW3ldO2dbeV09Z1tNLXktMV0sZ1tNLXktMV09cCxwPUNbeV0sQ1t5XT0tQ1tNLXktMV0sQ1tNLXktMV09LXB9'@;
put 'fSxsZS5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKGcsQyl7Zm9yKHZhciBNPTAseT0wO3k8Qy8yO3krKyl7dmFyIHA9ODE5MipNYXRoLnJvdW5kKGdbMip5KzFdL0MpK01hdGgucm91bmQoZ1syKnldL0MpK007Z1t5XT02NzEwODg2MyZwLE09cDw2NzEwODg2ND8wOnAvNjcxMDg4'@;
put 'NjR8MH1yZXR1cm4gZ30sbGUucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oZyxDLE0seSl7Zm9yKHZhciBwPTAsUz0wO1M8QztTKyspTVsyKlNdPTgxOTEmKHArPTB8Z1tTXSksTVsyKlMrMV09ODE5MSYocD4+Pj0xMykscD4+Pj0xMztmb3IoUz0yKkM7Uzx5OysrUylNW1NdPTA7SSgw'@;
put 'PT09cCksSSgwPT0oLTgxOTImcCkpfSxsZS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihnKXtmb3IodmFyIEM9bmV3IEFycmF5KGcpLE09MDtNPGc7TSsrKUNbTV09MDtyZXR1cm4gQ30sbGUucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oZyxDLE0pe3ZhciB5PTIqdGhpcy5ndWVzc0xlbjEzYihn'@;
put 'Lmxlbmd0aCxDLmxlbmd0aCkscD10aGlzLm1ha2VSQlQoeSksUz10aGlzLnN0dWIoeSksUT1uZXcgQXJyYXkoeSkscmU9bmV3IEFycmF5KHkpLGZlPW5ldyBBcnJheSh5KSxtZT1uZXcgQXJyYXkoeSksa2U9bmV3IEFycmF5KHkpLFRlPW5ldyBBcnJheSh5KSxQZT1NLndvcmRzO1BlLmxlbmd0'@;
put 'aD15LHRoaXMuY29udmVydDEzYihnLndvcmRzLGcubGVuZ3RoLFEseSksdGhpcy5jb252ZXJ0MTNiKEMud29yZHMsQy5sZW5ndGgsbWUseSksdGhpcy50cmFuc2Zvcm0oUSxTLHJlLGZlLHkscCksdGhpcy50cmFuc2Zvcm0obWUsUyxrZSxUZSx5LHApO2Zvcih2YXIgRmU9MDtGZTx5O0ZlKysp'@;
put 'e3ZhciBOZT1yZVtGZV0qa2VbRmVdLWZlW0ZlXSpUZVtGZV07ZmVbRmVdPXJlW0ZlXSpUZVtGZV0rZmVbRmVdKmtlW0ZlXSxyZVtGZV09TmV9cmV0dXJuIHRoaXMuY29uanVnYXRlKHJlLGZlLHkpLHRoaXMudHJhbnNmb3JtKHJlLGZlLFBlLFMseSxwKSx0aGlzLmNvbmp1Z2F0ZShQZSxTLHkp'@;
put 'LHRoaXMubm9ybWFsaXplMTNiKFBlLHkpLE0ubmVnYXRpdmU9Zy5uZWdhdGl2ZV5DLm5lZ2F0aXZlLE0ubGVuZ3RoPWcubGVuZ3RoK0MubGVuZ3RoLE0uc3RyaXAoKX0sRS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcpe3ZhciBDPW5ldyBFKG51bGwpO3JldHVybiBDLndvcmRzPW5ldyBBcnJh'@;
put 'eSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksdGhpcy5tdWxUbyhnLEMpfSxFLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKGcpe3ZhciBDPW5ldyBFKG51bGwpO3JldHVybiBDLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksaWUodGhpcyxnLEMpfSxFLnByb3RvdHlwZS5pbXVs'@;
put 'PWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oZyx0aGlzKX0sRS5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCk7Zm9yKHZhciBDPTAsTT0wO008dGhpcy5sZW5ndGg7TSsrKXt2YXIgeT0oMHx0aGlzLndv'@;
put 'cmRzW01dKSpnLHA9KDY3MTA4ODYzJnkpKyg2NzEwODg2MyZDKTtDPj49MjYsQys9eS82NzEwODg2NHwwLEMrPXA+Pj4yNix0aGlzLndvcmRzW01dPTY3MTA4ODYzJnB9cmV0dXJuIDAhPT1DJiYodGhpcy53b3Jkc1tNXT1DLHRoaXMubGVuZ3RoKyspLHRoaXN9LEUucHJvdG90eXBlLm11bG49'@;
put 'ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihnKX0sRS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxFLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSxFLnByb3RvdHlwZS5w'@;
put 'b3c9ZnVuY3Rpb24oZyl7dmFyIEM9ZnVuY3Rpb24oUyl7Zm9yKHZhciBRPW5ldyBBcnJheShTLmJpdExlbmd0aCgpKSxyZT0wO3JlPFEubGVuZ3RoO3JlKyspe3ZhciBtZT1yZSUyNjtRW3JlXT0oUy53b3Jkc1tyZS8yNnwwXSYxPDxtZSk+Pj5tZX1yZXR1cm4gUX0oZyk7aWYoMD09PUMubGVu'@;
put 'Z3RoKXJldHVybiBuZXcgRSgxKTtmb3IodmFyIE09dGhpcyx5PTA7eTxDLmxlbmd0aCYmMD09PUNbeV07eSsrLE09TS5zcXIoKSk7aWYoKyt5PEMubGVuZ3RoKWZvcih2YXIgcD1NLnNxcigpO3k8Qy5sZW5ndGg7eSsrLHA9cC5zcXIoKSkwIT09Q1t5XSYmKE09TS5tdWwocCkpO3JldHVybiBN'@;
put 'fSxFLnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBDLE09ZyUyNix5PShnLU0pLzI2LHA9NjcxMDg4NjM+Pj4yNi1NPDwyNi1NO2lmKDAhPT1NKXt2YXIgUz0wO2ZvcihDPTA7Qzx0aGlzLmxlbmd0aDtDKyspe3ZhciBRPXRoaXMu'@;
put 'd29yZHNbQ10mcDt0aGlzLndvcmRzW0NdPSgwfHRoaXMud29yZHNbQ10pLVE8PE18UyxTPVE+Pj4yNi1NfVMmJih0aGlzLndvcmRzW0NdPVMsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PXkpe2ZvcihDPXRoaXMubGVuZ3RoLTE7Qz49MDtDLS0pdGhpcy53b3Jkc1tDK3ldPXRoaXMud29yZHNbQ107'@;
put 'Zm9yKEM9MDtDPHk7QysrKXRoaXMud29yZHNbQ109MDt0aGlzLmxlbmd0aCs9eX1yZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oZyl9LEUucHJvdG90eXBlLml1c2hybj1mdW5j'@;
put 'dGlvbihnLEMsTSl7dmFyIHk7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApLHk9Qz8oQy1DJTI2KS8yNjowO3ZhciBwPWclMjYsUz1NYXRoLm1pbigoZy1wKS8yNix0aGlzLmxlbmd0aCksUT02NzEwODg2M142NzEwODg2Mz4+PnA8PHAscmU9TTtpZih5LT1TLHk9TWF0aC5tYXgoMCx5KSxy'@;
put 'ZSl7Zm9yKHZhciBmZT0wO2ZlPFM7ZmUrKylyZS53b3Jkc1tmZV09dGhpcy53b3Jkc1tmZV07cmUubGVuZ3RoPVN9aWYoMCE9PVMpaWYodGhpcy5sZW5ndGg+Uylmb3IodGhpcy5sZW5ndGgtPVMsZmU9MDtmZTx0aGlzLmxlbmd0aDtmZSsrKXRoaXMud29yZHNbZmVdPXRoaXMud29yZHNbZmUr'@;
put 'U107ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgbWU9MDtmb3IoZmU9dGhpcy5sZW5ndGgtMTtmZT49MCYmKDAhPT1tZXx8ZmU+PXkpO2ZlLS0pe3ZhciBrZT0wfHRoaXMud29yZHNbZmVdO3RoaXMud29yZHNbZmVdPW1lPDwyNi1wfGtlPj4+cCxtZT1rZSZRfXJldHVy'@;
put 'biByZSYmMCE9PW1lJiYocmUud29yZHNbcmUubGVuZ3RoKytdPW1lKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihnLEMsTSl7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUp'@;
put 'LHRoaXMuaXVzaHJuKGcsQyxNKX0sRS5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKGcpfSxFLnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihnKX0sRS5wcm90b3R5cGUuc2hybj1mdW5jdGlv'@;
put 'bihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKGcpfSxFLnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihnKX0sRS5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBDPWclMjYs'@;
put 'TT0oZy1DKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD1NfHwhKHRoaXMud29yZHNbTV0mMTw8QykpfSxFLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBDPWclMjYsTT0oZy1DKS8yNjtyZXR1cm4gSSgwPT09dGhpcy5uZWdhdGl2'@;
put 'ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PU0/dGhpczooMCE9PUMmJk0rKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihNLHRoaXMubGVuZ3RoKSwwIT09QyYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYz'@;
put 'Pj4+Qzw8QyksdGhpcy5zdHJpcCgpKX0sRS5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oZyl9LEUucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKGcpe3JldHVybiBJKCJudW1iZXIiPT10eXBlb2YgZyksSShnPDY3MTA4ODY0KSxnPDA/dGhp'@;
put 'cy5pc3VibigtZyk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxnPyh0aGlzLndvcmRzWzBdPWctKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihnKSx0aGlzLm5lZ2F0'@;
put 'aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4oZyl9LEUucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihnKXt0aGlzLndvcmRzWzBdKz1nO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbQ10+PTY3MTA4ODY0O0MrKyl0aGlzLndvcmRzW0NdLT02NzEwODg2NCxDPT09dGhpcy5s'@;
put 'ZW5ndGgtMT90aGlzLndvcmRzW0MrMV09MTp0aGlzLndvcmRzW0MrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsQysxKSx0aGlzfSxFLnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihnKXtpZihJKCJudW1iZXIiPT10eXBlb2YgZyksSShnPDY3MTA4ODY0KSxn'@;
put 'PDApcmV0dXJuIHRoaXMuaWFkZG4oLWcpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1nLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29y'@;
put 'ZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tDXTwwO0MrKyl0aGlzLndvcmRzW0NdKz02NzEwODg2NCx0aGlzLndvcmRzW0MrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUu'@;
put 'YWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKGcpfSxFLnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4oZyl9LEUucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LEUu'@;
put 'cHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSxFLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oZyxDLE0pe3ZhciB5LHA7dGhpcy5fZXhwYW5kKGcubGVuZ3RoK00pO3ZhciBRPTA7Zm9yKHk9MDt5PGcubGVuZ3RoO3krKyl7cD0oMHx0'@;
put 'aGlzLndvcmRzW3krTV0pK1E7dmFyIHJlPSgwfGcud29yZHNbeV0pKkM7UT0oKHAtPTY3MTA4ODYzJnJlKT4+MjYpLShyZS82NzEwODg2NHwwKSx0aGlzLndvcmRzW3krTV09NjcxMDg4NjMmcH1mb3IoO3k8dGhpcy5sZW5ndGgtTTt5KyspUT0ocD0oMHx0aGlzLndvcmRzW3krTV0pK1EpPj4y'@;
put 'Nix0aGlzLndvcmRzW3krTV09NjcxMDg4NjMmcDtpZigwPT09USlyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihJKC0xPT09USksUT0wLHk9MDt5PHRoaXMubGVuZ3RoO3krKylRPShwPS0oMHx0aGlzLndvcmRzW3ldKStRKT4+MjYsdGhpcy53b3Jkc1t5XT02NzEwODg2MyZwO3JldHVybiB0aGlz'@;
put 'Lm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihnLEMpe3ZhciBNLHk9dGhpcy5jbG9uZSgpLHA9ZyxTPTB8cC53b3Jkc1twLmxlbmd0aC0xXTswIT0oTT0yNi10aGlzLl9jb3VudEJpdHMoUykpJiYocD1wLnVzaGxuKE0pLHkuaXVzaGxuKE0p'@;
put 'LFM9MHxwLndvcmRzW3AubGVuZ3RoLTFdKTt2YXIgUSxyZT15Lmxlbmd0aC1wLmxlbmd0aDtpZigibW9kIiE9PUMpeyhRPW5ldyBFKG51bGwpKS5sZW5ndGg9cmUrMSxRLndvcmRzPW5ldyBBcnJheShRLmxlbmd0aCk7Zm9yKHZhciBmZT0wO2ZlPFEubGVuZ3RoO2ZlKyspUS53b3Jkc1tmZV09'@;
put 'MH12YXIgbWU9eS5jbG9uZSgpLl9pc2hsbnN1Ym11bChwLDEscmUpOzA9PT1tZS5uZWdhdGl2ZSYmKHk9bWUsUSYmKFEud29yZHNbcmVdPTEpKTtmb3IodmFyIGtlPXJlLTE7a2U+PTA7a2UtLSl7dmFyIFRlPTY3MTA4ODY0KigwfHkud29yZHNbcC5sZW5ndGgra2VdKSsoMHx5LndvcmRzW3Au'@;
put 'bGVuZ3RoK2tlLTFdKTtmb3IoVGU9TWF0aC5taW4oVGUvU3wwLDY3MTA4ODYzKSx5Ll9pc2hsbnN1Ym11bChwLFRlLGtlKTswIT09eS5uZWdhdGl2ZTspVGUtLSx5Lm5lZ2F0aXZlPTAseS5faXNobG5zdWJtdWwocCwxLGtlKSx5LmlzWmVybygpfHwoeS5uZWdhdGl2ZV49MSk7USYmKFEud29y'@;
put 'ZHNba2VdPVRlKX1yZXR1cm4gUSYmUS5zdHJpcCgpLHkuc3RyaXAoKSwiZGl2IiE9PUMmJjAhPT1NJiZ5Lml1c2hybihNKSx7ZGl2OlF8fG51bGwsbW9kOnl9fSxFLnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24oZyxDLE0pe3JldHVybiBJKCFnLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tk'@;
put 'aXY6bmV3IEUoMCksbW9kOm5ldyBFKDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmU/KFM9dGhpcy5uZWcoKS5kaXZtb2QoZyxDKSwibW9kIiE9PUMmJih5PVMuZGl2Lm5lZygpKSwiZGl2IiE9PUMmJihwPVMubW9kLm5lZygpLE0mJjAhPT1wLm5lZ2F0aXZlJiZwLmlhZGQo'@;
put 'ZykpLHtkaXY6eSxtb2Q6cH0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZT8oUz10aGlzLmRpdm1vZChnLm5lZygpLEMpLCJtb2QiIT09QyYmKHk9Uy5kaXYubmVnKCkpLHtkaXY6eSxtb2Q6Uy5tb2R9KTp0aGlzLm5lZ2F0aXZlJmcubmVnYXRpdmU/KFM9dGhpcy5uZWcoKS5k'@;
put 'aXZtb2QoZy5uZWcoKSxDKSwiZGl2IiE9PUMmJihwPVMubW9kLm5lZygpLE0mJjAhPT1wLm5lZ2F0aXZlJiZwLmlzdWIoZykpLHtkaXY6Uy5kaXYsbW9kOnB9KTpnLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAoZyk8MD97ZGl2Om5ldyBFKDApLG1vZDp0aGlzfToxPT09Zy5sZW5ndGg/'@;
put 'ImRpdiI9PT1DP3tkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PUM/e2RpdjpudWxsLG1vZDpuZXcgRSh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bmV3IEUodGhpcy5tb2RuKGcud29yZHNbMF0pKX06dGhp'@;
put 'cy5fd29yZERpdihnLEMpO3ZhciB5LHAsU30sRS5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJkaXYiLCExKS5kaXZ9LEUucHJvdG90eXBlLm1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMSkubW9kfSxFLnByb3RvdHlw'@;
put 'ZS51bW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJtb2QiLCEwKS5tb2R9LEUucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKGcpe3ZhciBDPXRoaXMuZGl2bW9kKGcpO2lmKEMubW9kLmlzWmVybygpKXJldHVybiBDLmRpdjt2YXIgTT0wIT09Qy5kaXYubmVnYXRpdmU/'@;
put 'Qy5tb2QuaXN1YihnKTpDLm1vZCx5PWcudXNocm4oMSkscD1nLmFuZGxuKDEpLFM9TS5jbXAoeSk7cmV0dXJuIFM8MHx8MT09PXAmJjA9PT1TP0MuZGl2OjAhPT1DLmRpdi5uZWdhdGl2ZT9DLmRpdi5pc3VibigxKTpDLmRpdi5pYWRkbigxKX0sRS5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihn'@;
put 'KXtJKGc8PTY3MTA4ODYzKTtmb3IodmFyIEM9NjcxMDg4NjQlZyxNPTAseT10aGlzLmxlbmd0aC0xO3k+PTA7eS0tKU09KEMqTSsoMHx0aGlzLndvcmRzW3ldKSklZztyZXR1cm4gTX0sRS5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24oZyl7SShnPD02NzEwODg2Myk7Zm9yKHZhciBDPTAsTT10'@;
put 'aGlzLmxlbmd0aC0xO00+PTA7TS0tKXt2YXIgeT0oMHx0aGlzLndvcmRzW01dKSs2NzEwODg2NCpDO3RoaXMud29yZHNbTV09eS9nfDAsQz15JWd9cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKGcpfSxF'@;
put 'LnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKGcpe0koMD09PWcubmVnYXRpdmUpLEkoIWcuaXNaZXJvKCkpO3ZhciBDPXRoaXMsTT1nLmNsb25lKCk7Qz0wIT09Qy5uZWdhdGl2ZT9DLnVtb2QoZyk6Qy5jbG9uZSgpO2Zvcih2YXIgeT1uZXcgRSgxKSxwPW5ldyBFKDApLFM9bmV3IEUoMCksUT1u'@;
put 'ZXcgRSgxKSxyZT0wO0MuaXNFdmVuKCkmJk0uaXNFdmVuKCk7KUMuaXVzaHJuKDEpLE0uaXVzaHJuKDEpLCsrcmU7Zm9yKHZhciBmZT1NLmNsb25lKCksbWU9Qy5jbG9uZSgpOyFDLmlzWmVybygpOyl7Zm9yKHZhciBrZT0wLFRlPTE7IShDLndvcmRzWzBdJlRlKSYma2U8MjY7KytrZSxUZTw8'@;
put 'PTEpO2lmKGtlPjApZm9yKEMuaXVzaHJuKGtlKTtrZS0tID4wOykoeS5pc09kZCgpfHxwLmlzT2RkKCkpJiYoeS5pYWRkKGZlKSxwLmlzdWIobWUpKSx5Lml1c2hybigxKSxwLml1c2hybigxKTtmb3IodmFyIFBlPTAsRmU9MTshKE0ud29yZHNbMF0mRmUpJiZQZTwyNjsrK1BlLEZlPDw9MSk7'@;
put 'aWYoUGU+MClmb3IoTS5pdXNocm4oUGUpO1BlLS0gPjA7KShTLmlzT2RkKCl8fFEuaXNPZGQoKSkmJihTLmlhZGQoZmUpLFEuaXN1YihtZSkpLFMuaXVzaHJuKDEpLFEuaXVzaHJuKDEpO0MuY21wKE0pPj0wPyhDLmlzdWIoTSkseS5pc3ViKFMpLHAuaXN1YihRKSk6KE0uaXN1YihDKSxTLmlz'@;
put 'dWIoeSksUS5pc3ViKHApKX1yZXR1cm57YTpTLGI6USxnY2Q6TS5pdXNobG4ocmUpfX0sRS5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKGcpe0koMD09PWcubmVnYXRpdmUpLEkoIWcuaXNaZXJvKCkpO3ZhciBDPXRoaXMsTT1nLmNsb25lKCk7Qz0wIT09Qy5uZWdhdGl2ZT9DLnVtb2QoZyk6'@;
put 'Qy5jbG9uZSgpO2Zvcih2YXIgeSxwPW5ldyBFKDEpLFM9bmV3IEUoMCksUT1NLmNsb25lKCk7Qy5jbXBuKDEpPjAmJk0uY21wbigxKT4wOyl7Zm9yKHZhciByZT0wLGZlPTE7IShDLndvcmRzWzBdJmZlKSYmcmU8MjY7KytyZSxmZTw8PTEpO2lmKHJlPjApZm9yKEMuaXVzaHJuKHJlKTtyZS0t'@;
put 'ID4wOylwLmlzT2RkKCkmJnAuaWFkZChRKSxwLml1c2hybigxKTtmb3IodmFyIG1lPTAsa2U9MTshKE0ud29yZHNbMF0ma2UpJiZtZTwyNjsrK21lLGtlPDw9MSk7aWYobWU+MClmb3IoTS5pdXNocm4obWUpO21lLS0gPjA7KVMuaXNPZGQoKSYmUy5pYWRkKFEpLFMuaXVzaHJuKDEpO0MuY21w'@;
put 'KE0pPj0wPyhDLmlzdWIoTSkscC5pc3ViKFMpKTooTS5pc3ViKEMpLFMuaXN1YihwKSl9cmV0dXJuKHk9MD09PUMuY21wbigxKT9wOlMpLmNtcG4oMCk8MCYmeS5pYWRkKGcpLHl9LEUucHJvdG90eXBlLmdjZD1mdW5jdGlvbihnKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBnLmFicygpO2lm'@;
put 'KGcuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIEM9dGhpcy5jbG9uZSgpLE09Zy5jbG9uZSgpO0MubmVnYXRpdmU9MCxNLm5lZ2F0aXZlPTA7Zm9yKHZhciB5PTA7Qy5pc0V2ZW4oKSYmTS5pc0V2ZW4oKTt5KyspQy5pdXNocm4oMSksTS5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO0Mu'@;
put 'aXNFdmVuKCk7KUMuaXVzaHJuKDEpO2Zvcig7TS5pc0V2ZW4oKTspTS5pdXNocm4oMSk7dmFyIHA9Qy5jbXAoTSk7aWYocDwwKXt2YXIgUz1DO0M9TSxNPVN9ZWxzZSBpZigwPT09cHx8MD09PU0uY21wbigxKSlicmVhaztDLmlzdWIoTSl9cmV0dXJuIE0uaXVzaGxuKHkpfSxFLnByb3RvdHlw'@;
put 'ZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmVnY2QoZykuYS51bW9kKGcpfSxFLnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09KDEmdGhpcy53b3Jkc1swXSl9LEUucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PSgxJnRoaXMud29yZHNbMF0p'@;
put 'fSxFLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZnfSxFLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyk7dmFyIEM9ZyUyNixNPShnLUMpLzI2LHk9MTw8QztpZih0aGlzLmxlbmd0aDw9TSlyZXR1cm4gdGhp'@;
put 'cy5fZXhwYW5kKE0rMSksdGhpcy53b3Jkc1tNXXw9eSx0aGlzO2Zvcih2YXIgcD15LFM9TTswIT09cCYmUzx0aGlzLmxlbmd0aDtTKyspe3ZhciBRPTB8dGhpcy53b3Jkc1tTXTtwPShRKz1wKT4+PjI2LHRoaXMud29yZHNbU109USY9NjcxMDg4NjN9cmV0dXJuIDAhPT1wJiYodGhpcy53b3Jk'@;
put 'c1tTXT1wLHRoaXMubGVuZ3RoKyspLHRoaXN9LEUucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxFLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKGcpe3ZhciBDLE09ZzwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYh'@;
put 'TSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmTSlyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSlDPTE7ZWxzZXtNJiYoZz0tZyksSShnPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgeT0wfHRoaXMud29yZHNbMF07Qz15PT09Zz8wOnk8Zz8t'@;
put 'MToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1DOkN9LEUucHJvdG90eXBlLmNtcD1mdW5jdGlvbihnKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBDPXRo'@;
put 'aXMudWNtcChnKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtQzpDfSxFLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKGcpe2lmKHRoaXMubGVuZ3RoPmcubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPGcubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgQz0wLE09dGhpcy5sZW5ndGgt'@;
put 'MTtNPj0wO00tLSl7dmFyIHk9MHx0aGlzLndvcmRzW01dLHA9MHxnLndvcmRzW01dO2lmKHkhPT1wKXt5PHA/Qz0tMTp5PnAmJihDPTEpO2JyZWFrfX1yZXR1cm4gQ30sRS5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5jbXBuKGcpfSxFLnByb3RvdHlwZS5ndD1m'@;
put 'dW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wKGcpfSxFLnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk+PTB9LEUucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAoZyk+PTB9LEUucHJvdG90eXBlLmx0bj1mdW5jdGlvbihn'@;
put 'KXtyZXR1cm4tMT09PXRoaXMuY21wbihnKX0sRS5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcChnKX0sRS5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPD0wfSxFLnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oZyl7cmV0dXJu'@;
put 'IHRoaXMuY21wKGcpPD0wfSxFLnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcG4oZyl9LEUucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXAoZyl9LEUucmVkPWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgTihnKX0sRS5wcm90b3R5'@;
put 'cGUudG9SZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksSSgwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQoZyl9'@;
put 'LEUucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSxFLnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24o'@;
put 'Zyl7cmV0dXJuIHRoaXMucmVkPWcsdGhpc30sRS5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQoZyl9LEUucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlv'@;
put 'bihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVt'@;
put 'YmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rp'@;
put 'b24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51'@;
put 'bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5tdWwodGhpcyxnKX0s'@;
put 'RS5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQuaW11bCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sRS5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtz'@;
put 'IG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LEUucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJl'@;
put 'ZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSxFLnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0'@;
put 'aGlzKX0sRS5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LEUucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihn'@;
put 'KXtyZXR1cm4gSSh0aGlzLnJlZCYmIWcucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLGcpfTt2YXIgZGU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiB1ZShnLEMpe3Ro'@;
put 'aXMubmFtZT1nLHRoaXMucD1uZXcgRShDLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgRSgxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gY2UoKXt1ZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBm'@;
put 'ZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIFkoKXt1ZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1'@;
put 'bmN0aW9uIGIoKXt1ZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIHgoKXt1ZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZm'@;
put 'ZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIE4oZyl7aWYoInN0cmluZyI9PXR5cGVvZiBnKXt2YXIgQz1FLl9wcmltZShnKTt0aGlzLm09Qy5wLHRoaXMucHJpbWU9Q31lbHNlIEkoZy5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1n'@;
put 'LHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBGKGcpe04uY2FsbCh0aGlzLGcpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IEUoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMu'@;
put 'cjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3Vi'@;
put 'KHRoaXMubWludil9dWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgZz1uZXcgRShudWxsKTtyZXR1cm4gZy53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLGd9LHVlLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKGcpe3ZhciBDLE09Zztkb3t0aGlzLnNwbGl0'@;
put 'KE0sdGhpcy50bXApLEM9KE09KE09dGhpcy5pbXVsSyhNKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKEM+dGhpcy5uKTt2YXIgeT1DPHRoaXMubj8tMTpNLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PXk/KE0ud29yZHNbMF09MCxNLmxlbmd0aD0xKTp5PjA/TS5pc3ViKHRo'@;
put 'aXMucCk6dm9pZCAwIT09TS5zdHJpcD9NLnN0cmlwKCk6TS5fc3RyaXAoKSxNfSx1ZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyxDKXtnLml1c2hybih0aGlzLm4sMCxDKX0sdWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe3JldHVybiBnLmltdWwodGhpcy5rKX0sUihjZSx1ZSks'@;
put 'Y2UucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcsQyl7Zm9yKHZhciBNPTQxOTQzMDMseT1NYXRoLm1pbihnLmxlbmd0aCw5KSxwPTA7cDx5O3ArKylDLndvcmRzW3BdPWcud29yZHNbcF07aWYoQy5sZW5ndGg9eSxnLmxlbmd0aDw9OSlyZXR1cm4gZy53b3Jkc1swXT0wLHZvaWQoZy5sZW5n'@;
put 'dGg9MSk7dmFyIFM9Zy53b3Jkc1s5XTtmb3IoQy53b3Jkc1tDLmxlbmd0aCsrXT1TJk0scD0xMDtwPGcubGVuZ3RoO3ArKyl7dmFyIFE9MHxnLndvcmRzW3BdO2cud29yZHNbcC0xMF09KFEmTSk8PDR8Uz4+PjIyLFM9UX1nLndvcmRzW3AtMTBdPVM+Pj49MjIsZy5sZW5ndGgtPTA9PT1TJiZn'@;
put 'Lmxlbmd0aD4xMD8xMDo5fSxjZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zy53b3Jkc1tnLmxlbmd0aF09MCxnLndvcmRzW2cubGVuZ3RoKzFdPTAsZy5sZW5ndGgrPTI7Zm9yKHZhciBDPTAsTT0wO008Zy5sZW5ndGg7TSsrKXt2YXIgeT0wfGcud29yZHNbTV07Zy53b3Jkc1tNXT02'@;
put 'NzEwODg2MyYoQys9OTc3KnkpLEM9NjQqeSsoQy82NzEwODg2NHwwKX1yZXR1cm4gMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJihnLmxlbmd0aC0tLDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiZnLmxlbmd0aC0tKSxnfSxSKFksdWUpLFIoYix1ZSksUih4LHVlKSx4LnByb3RvdHlwZS5pbXVs'@;
put 'Sz1mdW5jdGlvbihnKXtmb3IodmFyIEM9MCxNPTA7TTxnLmxlbmd0aDtNKyspe3ZhciB5PTE5KigwfGcud29yZHNbTV0pK0MscD02NzEwODg2MyZ5O3k+Pj49MjYsZy53b3Jkc1tNXT1wLEM9eX1yZXR1cm4gMCE9PUMmJihnLndvcmRzW2cubGVuZ3RoKytdPUMpLGd9LEUuX3ByaW1lPWZ1bmN0'@;
put 'aW9uKGcpe2lmKGRlW2ddKXJldHVybiBkZVtnXTt2YXIgQztpZigiazI1NiI9PT1nKUM9bmV3IGNlO2Vsc2UgaWYoInAyMjQiPT09ZylDPW5ldyBZO2Vsc2UgaWYoInAxOTIiPT09ZylDPW5ldyBiO2Vsc2V7aWYoInAyNTUxOSIhPT1nKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAi'@;
put 'K2cpO0M9bmV3IHh9cmV0dXJuIGRlW2ddPUMsQ30sTi5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oZyl7SSgwPT09Zy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxJKGcucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LE4ucHJvdG90'@;
put 'eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKGcsQyl7SSgwPT0oZy5uZWdhdGl2ZXxDLm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxJKGcucmVkJiZnLnJlZD09PUMucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LE4ucHJvdG90eXBlLmltb2Q9'@;
put 'ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKGcpLl9mb3JjZVJlZCh0aGlzKTpnLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LE4ucHJvdG90eXBlLm5lZz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pc1plcm8oKT9nLmNsb25lKCk6dGhpcy5tLnN1'@;
put 'YihnKS5fZm9yY2VSZWQodGhpcyl9LE4ucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnLEMpe3RoaXMuX3ZlcmlmeTIoZyxDKTt2YXIgTT1nLmFkZChDKTtyZXR1cm4gTS5jbXAodGhpcy5tKT49MCYmTS5pc3ViKHRoaXMubSksTS5fZm9yY2VSZWQodGhpcyl9LE4ucHJvdG90eXBlLmlhZGQ9ZnVu'@;
put 'Y3Rpb24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIE09Zy5pYWRkKEMpO3JldHVybiBNLmNtcCh0aGlzLm0pPj0wJiZNLmlzdWIodGhpcy5tKSxNfSxOLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIE09Zy5zdWIoQyk7cmV0dXJuIE0uY21w'@;
put 'bigwKTwwJiZNLmlhZGQodGhpcy5tKSxNLl9mb3JjZVJlZCh0aGlzKX0sTi5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnLEMpe3RoaXMuX3ZlcmlmeTIoZyxDKTt2YXIgTT1nLmlzdWIoQyk7cmV0dXJuIE0uY21wbigwKTwwJiZNLmlhZGQodGhpcy5tKSxNfSxOLnByb3RvdHlwZS5zaGw9ZnVu'@;
put 'Y3Rpb24oZyxDKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShnKSx0aGlzLmltb2QoZy51c2hsbihDKSl9LE4ucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLEMpLHRoaXMuaW1vZChnLmltdWwoQykpfSxOLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyxD'@;
put 'KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLEMpLHRoaXMuaW1vZChnLm11bChDKSl9LE4ucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW11bChnLGcuY2xvbmUoKSl9LE4ucHJvdG90eXBlLnNxcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5tdWwoZyxnKX0sTi5wcm90'@;
put 'b3R5cGUuc3FydD1mdW5jdGlvbihnKXtpZihnLmlzWmVybygpKXJldHVybiBnLmNsb25lKCk7dmFyIEM9dGhpcy5tLmFuZGxuKDMpO2lmKEkoQyUyPT0xKSwzPT09Qyl7dmFyIE09dGhpcy5tLmFkZChuZXcgRSgxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhnLE0pfWZvcih2YXIgeT10'@;
put 'aGlzLm0uc3VibigxKSxwPTA7IXkuaXNaZXJvKCkmJjA9PT15LmFuZGxuKDEpOylwKysseS5pdXNocm4oMSk7SSgheS5pc1plcm8oKSk7dmFyIFM9bmV3IEUoMSkudG9SZWQodGhpcyksUT1TLnJlZE5lZygpLHJlPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxmZT10aGlzLm0uYml0TGVuZ3Ro'@;
put 'KCk7Zm9yKGZlPW5ldyBFKDIqZmUqZmUpLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhmZSxyZSkuY21wKFEpOylmZS5yZWRJQWRkKFEpO2Zvcih2YXIgbWU9dGhpcy5wb3coZmUseSksa2U9dGhpcy5wb3coZyx5LmFkZG4oMSkuaXVzaHJuKDEpKSxUZT10aGlzLnBvdyhnLHkpLFBlPXA7MCE9'@;
put 'PVRlLmNtcChTKTspe2Zvcih2YXIgRmU9VGUsTmU9MDswIT09RmUuY21wKFMpO05lKyspRmU9RmUucmVkU3FyKCk7SShOZTxQZSk7dmFyIExlPXRoaXMucG93KG1lLG5ldyBFKDEpLml1c2hsbihQZS1OZS0xKSk7a2U9a2UucmVkTXVsKExlKSxtZT1MZS5yZWRTcXIoKSxUZT1UZS5yZWRNdWwo'@;
put 'bWUpLFBlPU5lfXJldHVybiBrZX0sTi5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXt2YXIgQz1nLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09Qy5uZWdhdGl2ZT8oQy5uZWdhdGl2ZT0wLHRoaXMuaW1vZChDKS5yZWROZWcoKSk6dGhpcy5pbW9kKEMpfSxOLnByb3RvdHlwZS5wb3c9ZnVu'@;
put 'Y3Rpb24oZyxDKXtpZihDLmlzWmVybygpKXJldHVybiBuZXcgRSgxKS50b1JlZCh0aGlzKTtpZigwPT09Qy5jbXBuKDEpKXJldHVybiBnLmNsb25lKCk7dmFyIE09bmV3IEFycmF5KDE2KTtNWzBdPW5ldyBFKDEpLnRvUmVkKHRoaXMpLE1bMV09Zztmb3IodmFyIHk9Mjt5PE0ubGVuZ3RoO3kr'@;
put 'KylNW3ldPXRoaXMubXVsKE1beS0xXSxnKTt2YXIgcD1NWzBdLFM9MCxRPTAscmU9Qy5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PXJlJiYocmU9MjYpLHk9Qy5sZW5ndGgtMTt5Pj0wO3ktLSl7Zm9yKHZhciBmZT1DLndvcmRzW3ldLG1lPXJlLTE7bWU+PTA7bWUtLSl7dmFyIGtlPWZlPj5tZSYx'@;
put 'O3AhPT1NWzBdJiYocD10aGlzLnNxcihwKSksMCE9PWtlfHwwIT09Uz8oUzw8PTEsU3w9a2UsKDQ9PSsrUXx8MD09PXkmJjA9PT1tZSkmJihwPXRoaXMubXVsKHAsTVtTXSksUT0wLFM9MCkpOlE9MH1yZT0yNn1yZXR1cm4gcH0sTi5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3Zh'@;
put 'ciBDPWcudW1vZCh0aGlzLm0pO3JldHVybiBDPT09Zz9DLmNsb25lKCk6Q30sTi5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIEM9Zy5jbG9uZSgpO3JldHVybiBDLnJlZD1udWxsLEN9LEUubW9udD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IEYoZyl9LFIoRixOKSxGLnBy'@;
put 'b3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLnVzaGxuKHRoaXMuc2hpZnQpKX0sRi5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIEM9dGhpcy5pbW9kKGcubXVsKHRoaXMucmludikpO3JldHVybiBDLnJlZD1udWxsLEN9LEYucHJv'@;
put 'dG90eXBlLmltdWw9ZnVuY3Rpb24oZyxDKXtpZihnLmlzWmVybygpfHxDLmlzWmVybygpKXJldHVybiBnLndvcmRzWzBdPTAsZy5sZW5ndGg9MSxnO3ZhciBNPWcuaW11bChDKSx5PU0ubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlz'@;
put 'Lm0pLHA9TS5pc3ViKHkpLml1c2hybih0aGlzLnNoaWZ0KSxTPXA7cmV0dXJuIHAuY21wKHRoaXMubSk+PTA/Uz1wLmlzdWIodGhpcy5tKTpwLmNtcG4oMCk8MCYmKFM9cC5pYWRkKHRoaXMubSkpLFMuX2ZvcmNlUmVkKHRoaXMpfSxGLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyxDKXtpZihn'@;
put 'LmlzWmVybygpfHxDLmlzWmVybygpKXJldHVybiBuZXcgRSgwKS5fZm9yY2VSZWQodGhpcyk7dmFyIE09Zy5tdWwoQykseT1NLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxwPU0uaXN1Yih5KS5pdXNocm4odGhpcy5zaGlm'@;
put 'dCksUz1wO3JldHVybiBwLmNtcCh0aGlzLm0pPj0wP1M9cC5pc3ViKHRoaXMubSk6cC5jbXBuKDApPDAmJihTPXAuaWFkZCh0aGlzLm0pKSxTLl9mb3JjZVJlZCh0aGlzKX0sRi5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcuX2ludm1wKHRoaXMubSkubXVs'@;
put 'KHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShIPUwubm1kKEgpLHRoaXMpfSw5NzQ2Okg9PntmdW5jdGlvbiBCKEwsSyl7aWYoIUwpdGhyb3cgbmV3IEVycm9yKEt8fCJBc3NlcnRpb24gZmFpbGVkIil9SC5leHBvcnRzPUIsQi5lcXVhbD1mdW5jdGlvbihMLEssSil7aWYoTCE9Syl0aHJv'@;
put 'dyBuZXcgRXJyb3IoSnx8IkFzc2VydGlvbiBmYWlsZWQ6ICIrTCsiICE9ICIrSyl9fSw0NTA0OihILEIpPT57InVzZSBzdHJpY3QiO3ZhciBMPUI7ZnVuY3Rpb24gSyhJKXtyZXR1cm4gMT09PUkubGVuZ3RoPyIwIitJOkl9ZnVuY3Rpb24gSihJKXtmb3IodmFyIFI9IiIsRT0wO0U8SS5sZW5n'@;
put 'dGg7RSsrKVIrPUsoSVtFXS50b1N0cmluZygxNikpO3JldHVybiBSfUwudG9BcnJheT1mdW5jdGlvbihJLFIpe2lmKEFycmF5LmlzQXJyYXkoSSkpcmV0dXJuIEkuc2xpY2UoKTtpZighSSlyZXR1cm5bXTt2YXIgRT1bXTtpZigic3RyaW5nIiE9dHlwZW9mIEkpe2Zvcih2YXIgej0wO3o8SS5s'@;
put 'ZW5ndGg7eisrKUVbel09MHxJW3pdO3JldHVybiBFfWlmKCJoZXgiPT09Uilmb3IoKEk9SS5yZXBsYWNlKC9bXmEtejAtOV0rL2dpLCIiKSkubGVuZ3RoJTIhPTAmJihJPSIwIitJKSx6PTA7ejxJLmxlbmd0aDt6Kz0yKUUucHVzaChwYXJzZUludChJW3pdK0lbeisxXSwxNikpO2Vsc2UgZm9y'@;
put 'KHo9MDt6PEkubGVuZ3RoO3orKyl7dmFyIGo9SS5jaGFyQ29kZUF0KHopLFY9aj4+OCxHPTI1NSZqO1Y/RS5wdXNoKFYsRyk6RS5wdXNoKEcpfXJldHVybiBFfSxMLnplcm8yPUssTC50b0hleD1KLEwuZW5jb2RlPWZ1bmN0aW9uKEksUil7cmV0dXJuImhleCI9PT1SP0ooSSk6SX19LDExNzE6'@;
put 'KEgsQixMKT0+e3ZhciBLPUwoNTEwOCk7SC5leHBvcnRzPXRlLHRlLk1pbmltYXRjaD1uZTt2YXIgSj1mdW5jdGlvbigpe3RyeXtyZXR1cm4gTCgyNTIwKX1jYXRjaHt9fSgpfHx7c2VwOiIvIn07dGUuc2VwPUouc2VwO3ZhciBJPXRlLkdMT0JTVEFSPW5lLkdMT0JTVEFSPXt9LFI9TCgzNjQ0'@;
put 'KSxFPXsiISI6e29wZW46Iig/Oig/ISg/OiIsY2xvc2U6IikpW14vXSo/KSJ9LCI/Ijp7b3BlbjoiKD86IixjbG9zZToiKT8ifSwiKyI6e29wZW46Iig/OiIsY2xvc2U6IikrIn0sIioiOntvcGVuOiIoPzoiLGNsb3NlOiIpKiJ9LCJAIjp7b3BlbjoiKD86IixjbG9zZToiKSJ9fSx6PSJbXi9d'@;
put 'IixqPXorIio/IixXPSIoKS4qe30rP1tdXiRcXCEiLnNwbGl0KCIiKS5yZWR1Y2UoZnVuY3Rpb24odWUsY2Upe3JldHVybiB1ZVtjZV09ITAsdWV9LHt9KSxVPS9cLysvO2Z1bmN0aW9uIHEodWUsY2Upe2NlPWNlfHx7fTt2YXIgWT17fTtyZXR1cm4gT2JqZWN0LmtleXModWUpLmZvckVhY2go'@;
put 'ZnVuY3Rpb24oYil7WVtiXT11ZVtiXX0pLE9iamVjdC5rZXlzKGNlKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe1lbYl09Y2VbYl19KSxZfWZ1bmN0aW9uIHRlKHVlLGNlLFkpe3JldHVybiBsZShjZSksWXx8KFk9e30pLCEoIVkubm9jb21tZW50JiYiIyI9PT1jZS5jaGFyQXQoMCkpJiZuZXcgbmUo'@;
put 'Y2UsWSkubWF0Y2godWUpfWZ1bmN0aW9uIG5lKHVlLGNlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBuZSkpcmV0dXJuIG5ldyBuZSh1ZSxjZSk7bGUodWUpLGNlfHwoY2U9e30pLHVlPXVlLnRyaW0oKSxjZS5hbGxvd1dpbmRvd3NFc2NhcGV8fCIvIj09PUouc2VwfHwodWU9dWUuc3BsaXQoSi5z'@;
put 'ZXApLmpvaW4oIi8iKSksdGhpcy5vcHRpb25zPWNlLHRoaXMuc2V0PVtdLHRoaXMucGF0dGVybj11ZSx0aGlzLnJlZ2V4cD1udWxsLHRoaXMubmVnYXRlPSExLHRoaXMuY29tbWVudD0hMSx0aGlzLmVtcHR5PSExLHRoaXMucGFydGlhbD0hIWNlLnBhcnRpYWwsdGhpcy5tYWtlKCl9ZnVuY3Rp'@;
put 'b24gaWUodWUsY2Upe3JldHVybiBjZXx8KGNlPXRoaXMgaW5zdGFuY2VvZiBuZT90aGlzLm9wdGlvbnM6e30pLGxlKHVlPXZvaWQgMD09PXVlP3RoaXMucGF0dGVybjp1ZSksY2Uubm9icmFjZXx8IS9ceyg/Oig/IVx7KS4pKlx9Ly50ZXN0KHVlKT9bdWVdOlIodWUpfXRlLmZpbHRlcj1mdW5j'@;
put 'dGlvbih1ZSxjZSl7cmV0dXJuIGNlPWNlfHx7fSxmdW5jdGlvbihZLGIseCl7cmV0dXJuIHRlKFksdWUsY2UpfX0sdGUuZGVmYXVsdHM9ZnVuY3Rpb24odWUpe2lmKCF1ZXx8Im9iamVjdCIhPXR5cGVvZiB1ZXx8IU9iamVjdC5rZXlzKHVlKS5sZW5ndGgpcmV0dXJuIHRlO3ZhciBjZT10ZSxZ'@;
put 'PWZ1bmN0aW9uKGIseCxOKXtyZXR1cm4gY2UoYix4LHEodWUsTikpfTtyZXR1cm4oWS5NaW5pbWF0Y2g9ZnVuY3Rpb24oYix4KXtyZXR1cm4gbmV3IGNlLk1pbmltYXRjaChiLHEodWUseCkpfSkuZGVmYXVsdHM9ZnVuY3Rpb24oYil7cmV0dXJuIGNlLmRlZmF1bHRzKHEodWUsYikpLk1pbmlt'@;
put 'YXRjaH0sWS5maWx0ZXI9ZnVuY3Rpb24oYix4KXtyZXR1cm4gY2UuZmlsdGVyKGIscSh1ZSx4KSl9LFkuZGVmYXVsdHM9ZnVuY3Rpb24oYil7cmV0dXJuIGNlLmRlZmF1bHRzKHEodWUsYikpfSxZLm1ha2VSZT1mdW5jdGlvbihiLHgpe3JldHVybiBjZS5tYWtlUmUoYixxKHVlLHgpKX0sWS5i'@;
put 'cmFjZUV4cGFuZD1mdW5jdGlvbihiLHgpe3JldHVybiBjZS5icmFjZUV4cGFuZChiLHEodWUseCkpfSxZLm1hdGNoPWZ1bmN0aW9uKGIseCxOKXtyZXR1cm4gY2UubWF0Y2goYix4LHEodWUsTikpfSxZfSxuZS5kZWZhdWx0cz1mdW5jdGlvbih1ZSl7cmV0dXJuIHRlLmRlZmF1bHRzKHVlKS5N'@;
put 'aW5pbWF0Y2h9LG5lLnByb3RvdHlwZS5kZWJ1Zz1mdW5jdGlvbigpe30sbmUucHJvdG90eXBlLm1ha2U9ZnVuY3Rpb24oKXt2YXIgdWU9dGhpcy5wYXR0ZXJuLGNlPXRoaXMub3B0aW9ucztpZihjZS5ub2NvbW1lbnR8fCIjIiE9PXVlLmNoYXJBdCgwKSlpZih1ZSl7dGhpcy5wYXJzZU5lZ2F0'@;
put 'ZSgpO3ZhciBZPXRoaXMuZ2xvYlNldD10aGlzLmJyYWNlRXhwYW5kKCk7Y2UuZGVidWcmJih0aGlzLmRlYnVnPWZ1bmN0aW9uKCl7Sy5lcnJvci5hcHBseShLLGFyZ3VtZW50cyl9KSx0aGlzLmRlYnVnKHRoaXMucGF0dGVybixZKSxZPXRoaXMuZ2xvYlBhcnRzPVkubWFwKGZ1bmN0aW9uKGIp'@;
put 'e3JldHVybiBiLnNwbGl0KFUpfSksdGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sWSksWT1ZLm1hcChmdW5jdGlvbihiLHgsTil7cmV0dXJuIGIubWFwKHRoaXMucGFyc2UsdGhpcyl9LHRoaXMpLHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLFkpLFk9WS5maWx0ZXIoZnVuY3Rpb24oYil7cmV0dXJu'@;
put 'LTE9PT1iLmluZGV4T2YoITEpfSksdGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sWSksdGhpcy5zZXQ9WX1lbHNlIHRoaXMuZW1wdHk9ITA7ZWxzZSB0aGlzLmNvbW1lbnQ9ITB9LG5lLnByb3RvdHlwZS5wYXJzZU5lZ2F0ZT1mdW5jdGlvbigpe3ZhciB1ZT10aGlzLnBhdHRlcm4sY2U9ITEsYj0w'@;
put 'O2lmKCF0aGlzLm9wdGlvbnMubm9uZWdhdGUpe2Zvcih2YXIgeD0wLE49dWUubGVuZ3RoO3g8TiYmIiEiPT09dWUuY2hhckF0KHgpO3grKyljZT0hY2UsYisrO2ImJih0aGlzLnBhdHRlcm49dWUuc3Vic3RyKGIpKSx0aGlzLm5lZ2F0ZT1jZX19LHRlLmJyYWNlRXhwYW5kPWZ1bmN0aW9uKHVl'@;
put 'LGNlKXtyZXR1cm4gaWUodWUsY2UpfSxuZS5wcm90b3R5cGUuYnJhY2VFeHBhbmQ9aWU7dmFyIGxlPWZ1bmN0aW9uKHVlKXtpZigic3RyaW5nIiE9dHlwZW9mIHVlKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgcGF0dGVybiIpO2lmKHVlLmxlbmd0aD42NTUzNil0aHJvdyBuZXcgVHlw'@;
put 'ZUVycm9yKCJwYXR0ZXJuIGlzIHRvbyBsb25nIil9O25lLnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbih1ZSxjZSl7bGUodWUpO3ZhciBZPXRoaXMub3B0aW9ucztpZigiKioiPT09dWUpe2lmKCFZLm5vZ2xvYnN0YXIpcmV0dXJuIEk7dWU9IioifWlmKCIiPT09dWUpcmV0dXJuIiI7dmFyIGIs'@;
put 'eD0iIixOPSEhWS5ub2Nhc2UsRj0hMSxnPVtdLEM9W10sTT0hMSx5PS0xLHA9LTEsUz0iLiI9PT11ZS5jaGFyQXQoMCk/IiI6WS5kb3Q/Iig/ISg/Ol58XFwvKVxcLnsxLDJ9KD86JHxcXC8pKSI6Iig/IVxcLikiLFE9dGhpcztmdW5jdGlvbiByZSgpe2lmKGIpe3N3aXRjaChiKXtjYXNlIioi'@;
put 'OngrPWosTj0hMDticmVhaztjYXNlIj8iOngrPXosTj0hMDticmVhaztkZWZhdWx0OngrPSJcXCIrYn1RLmRlYnVnKCJjbGVhclN0YXRlQ2hhciAlaiAlaiIsYix4KSxiPSExfX1mb3IodmFyIGZlLG1lPTAsa2U9dWUubGVuZ3RoO21lPGtlJiYoZmU9dWUuY2hhckF0KG1lKSk7bWUrKylpZih0'@;
put 'aGlzLmRlYnVnKCIlc1x0JXMgJXMgJWoiLHVlLG1lLHgsZmUpLEYmJldbZmVdKXgrPSJcXCIrZmUsRj0hMTtlbHNlIHN3aXRjaChmZSl7Y2FzZSIvIjpyZXR1cm4hMTtjYXNlIlxcIjpyZSgpLEY9ITA7Y29udGludWU7Y2FzZSI/IjpjYXNlIioiOmNhc2UiKyI6Y2FzZSJAIjpjYXNlIiEiOmlm'@;
put 'KHRoaXMuZGVidWcoIiVzXHQlcyAlcyAlaiA8LS0gc3RhdGVDaGFyIix1ZSxtZSx4LGZlKSxNKXt0aGlzLmRlYnVnKCIgIGluIGNsYXNzIiksIiEiPT09ZmUmJm1lPT09cCsxJiYoZmU9Il4iKSx4Kz1mZTtjb250aW51ZX1RLmRlYnVnKCJjYWxsIGNsZWFyU3RhdGVDaGFyICVqIixiKSxyZSgp'@;
put 'LGI9ZmUsWS5ub2V4dCYmcmUoKTtjb250aW51ZTtjYXNlIigiOmlmKE0pe3grPSIoIjtjb250aW51ZX1pZighYil7eCs9IlxcKCI7Y29udGludWV9Zy5wdXNoKHt0eXBlOmIsc3RhcnQ6bWUtMSxyZVN0YXJ0OngubGVuZ3RoLG9wZW46RVtiXS5vcGVuLGNsb3NlOkVbYl0uY2xvc2V9KSx0aGlz'@;
put 'LmRlYnVnKCJwbFR5cGUgJWogJWoiLGIseCs9IiEiPT09Yj8iKD86KD8hKD86IjoiKD86IiksYj0hMTtjb250aW51ZTtjYXNlIikiOmlmKE18fCFnLmxlbmd0aCl7eCs9IlxcKSI7Y29udGludWV9cmUoKSxOPSEwO3ZhciBUZT1nLnBvcCgpO3grPVRlLmNsb3NlLCIhIj09PVRlLnR5cGUmJkMu'@;
put 'cHVzaChUZSksVGUucmVFbmQ9eC5sZW5ndGg7Y29udGludWU7Y2FzZSJ8IjppZihNfHwhZy5sZW5ndGh8fEYpe3grPSJcXHwiLEY9ITE7Y29udGludWV9cmUoKSx4Kz0ifCI7Y29udGludWU7Y2FzZSJbIjppZihyZSgpLE0pe3grPSJcXCIrZmU7Y29udGludWV9TT0hMCxwPW1lLHk9eC5sZW5n'@;
put 'dGgseCs9ZmU7Y29udGludWU7Y2FzZSJdIjppZihtZT09PXArMXx8IU0pe3grPSJcXCIrZmUsRj0hMTtjb250aW51ZX12YXIgUGU9dWUuc3Vic3RyaW5nKHArMSxtZSk7dHJ5e1JlZ0V4cCgiWyIrUGUrIl0iKX1jYXRjaHt2YXIgRmU9dGhpcy5wYXJzZShQZSxkZSk7eD14LnN1YnN0cigwLHkp'@;
put 'KyJcXFsiK0ZlWzBdKyJcXF0iLE49Tnx8RmVbMV0sTT0hMTtjb250aW51ZX1OPSEwLE09ITEseCs9ZmU7Y29udGludWU7ZGVmYXVsdDpyZSgpLEY/Rj0hMTohV1tmZV18fCJeIj09PWZlJiZNfHwoeCs9IlxcIikseCs9ZmV9Zm9yKE0mJihQZT11ZS5zdWJzdHIocCsxKSxGZT10aGlzLnBhcnNl'@;
put 'KFBlLGRlKSx4PXguc3Vic3RyKDAseSkrIlxcWyIrRmVbMF0sTj1OfHxGZVsxXSksVGU9Zy5wb3AoKTtUZTtUZT1nLnBvcCgpKXt2YXIgTmU9eC5zbGljZShUZS5yZVN0YXJ0K1RlLm9wZW4ubGVuZ3RoKTt0aGlzLmRlYnVnKCJzZXR0aW5nIHRhaWwiLHgsVGUpLE5lPU5lLnJlcGxhY2UoLygo'@;
put 'PzpcXHsyfSl7MCw2NH0pKFxcPylcfC9nLGZ1bmN0aW9uKEVlLERlLCRlKXtyZXR1cm4gJGV8fCgkZT0iXFwiKSxEZStEZSskZSsifCJ9KSx0aGlzLmRlYnVnKCJ0YWlsPSVqXG4gICAlcyIsTmUsTmUsVGUseCk7dmFyIExlPSIqIj09PVRlLnR5cGU/ajoiPyI9PT1UZS50eXBlP3o6IlxcIitU'@;
put 'ZS50eXBlO049ITAseD14LnNsaWNlKDAsVGUucmVTdGFydCkrTGUrIlxcKCIrTmV9cmUoKSxGJiYoeCs9IlxcXFwiKTt2YXIgQmU9ITE7c3dpdGNoKHguY2hhckF0KDApKXtjYXNlIlsiOmNhc2UiLiI6Y2FzZSIoIjpCZT0hMH1mb3IodmFyIEhlPUMubGVuZ3RoLTE7SGU+LTE7SGUtLSl7dmFy'@;
put 'IFFlPUNbSGVdLG10PXguc2xpY2UoMCxRZS5yZVN0YXJ0KSxLZT14LnNsaWNlKFFlLnJlU3RhcnQsUWUucmVFbmQtOCksd2U9eC5zbGljZShRZS5yZUVuZC04LFFlLnJlRW5kKSxJZT14LnNsaWNlKFFlLnJlRW5kKTt3ZSs9SWU7dmFyIE9lPW10LnNwbGl0KCIoIikubGVuZ3RoLTEsZXQ9SWU7'@;
put 'Zm9yKG1lPTA7bWU8T2U7bWUrKylldD1ldC5yZXBsYWNlKC9cKVsrKj9dPy8sIiIpO3ZhciBudD0iIjsiIj09PShJZT1ldCkmJmNlIT09ZGUmJihudD0iJCIpLHg9bXQrS2UrSWUrbnQrd2V9aWYoIiIhPT14JiZOJiYoeD0iKD89LikiK3gpLEJlJiYoeD1TK3gpLGNlPT09ZGUpcmV0dXJuW3gs'@;
put 'Tl07aWYoIU4pcmV0dXJuIHVlLnJlcGxhY2UoL1xcKC4pL2csIiQxIik7dmFyIHFlPVkubm9jYXNlPyJpIjoiIjt0cnl7dmFyIGh0PW5ldyBSZWdFeHAoIl4iK3grIiQiLHFlKX1jYXRjaHtyZXR1cm4gbmV3IFJlZ0V4cCgiJC4iKX1yZXR1cm4gaHQuX2dsb2I9dWUsaHQuX3NyYz14LGh0fTt2'@;
put 'YXIgZGU9e307dGUubWFrZVJlPWZ1bmN0aW9uKHVlLGNlKXtyZXR1cm4gbmV3IG5lKHVlLGNlfHx7fSkubWFrZVJlKCl9LG5lLnByb3RvdHlwZS5tYWtlUmU9ZnVuY3Rpb24oKXtpZih0aGlzLnJlZ2V4cHx8ITE9PT10aGlzLnJlZ2V4cClyZXR1cm4gdGhpcy5yZWdleHA7dmFyIHVlPXRoaXMu'@;
put 'c2V0O2lmKCF1ZS5sZW5ndGgpcmV0dXJuIHRoaXMucmVnZXhwPSExLHRoaXMucmVnZXhwO3ZhciBjZT10aGlzLm9wdGlvbnMsWT1jZS5ub2dsb2JzdGFyP2o6Y2UuZG90PyIoPzooPyEoPzpcXC98XikoPzpcXC57MSwyfSkoJHxcXC8pKS4pKj8iOiIoPzooPyEoPzpcXC98XilcXC4pLikqPyIs'@;
put 'Yj1jZS5ub2Nhc2U/ImkiOiIiLHg9dWUubWFwKGZ1bmN0aW9uKE4pe3JldHVybiBOLm1hcChmdW5jdGlvbihGKXtyZXR1cm4gRj09PUk/WToic3RyaW5nIj09dHlwZW9mIEY/Ri5yZXBsYWNlKC9bLVtcXXt9KCkqKz8uLFxcXiR8I1xzXS9nLCJcXCQmIik6Ri5fc3JjfSkuam9pbigiXFwvIil9'@;
put 'KS5qb2luKCJ8Iik7eD0iXig/OiIreCsiKSQiLHRoaXMubmVnYXRlJiYoeD0iXig/ISIreCsiKS4qJCIpO3RyeXt0aGlzLnJlZ2V4cD1uZXcgUmVnRXhwKHgsYil9Y2F0Y2h7dGhpcy5yZWdleHA9ITF9cmV0dXJuIHRoaXMucmVnZXhwfSx0ZS5tYXRjaD1mdW5jdGlvbih1ZSxjZSxZKXt2YXIg'@;
put 'Yj1uZXcgbmUoY2UsWT1ZfHx7fSk7cmV0dXJuIHVlPXVlLmZpbHRlcihmdW5jdGlvbih4KXtyZXR1cm4gYi5tYXRjaCh4KX0pLGIub3B0aW9ucy5ub251bGwmJiF1ZS5sZW5ndGgmJnVlLnB1c2goY2UpLHVlfSxuZS5wcm90b3R5cGUubWF0Y2g9ZnVuY3Rpb24odWUsY2Upe2lmKHZvaWQgMD09'@;
put 'PWNlJiYoY2U9dGhpcy5wYXJ0aWFsKSx0aGlzLmRlYnVnKCJtYXRjaCIsdWUsdGhpcy5wYXR0ZXJuKSx0aGlzLmNvbW1lbnQpcmV0dXJuITE7aWYodGhpcy5lbXB0eSlyZXR1cm4iIj09PXVlO2lmKCIvIj09PXVlJiZjZSlyZXR1cm4hMDt2YXIgWT10aGlzLm9wdGlvbnM7Ii8iIT09Si5zZXAm'@;
put 'Jih1ZT11ZS5zcGxpdChKLnNlcCkuam9pbigiLyIpKSx1ZT11ZS5zcGxpdChVKSx0aGlzLmRlYnVnKHRoaXMucGF0dGVybiwic3BsaXQiLHVlKTt2YXIgYix4LE49dGhpcy5zZXQ7Zm9yKHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCJzZXQiLE4pLHg9dWUubGVuZ3RoLTE7eD49MCYmIShiPXVl'@;
put 'W3hdKTt4LS0pO2Zvcih4PTA7eDxOLmxlbmd0aDt4Kyspe3ZhciBGPU5beF0sZz11ZTtpZihZLm1hdGNoQmFzZSYmMT09PUYubGVuZ3RoJiYoZz1bYl0pLHRoaXMubWF0Y2hPbmUoZyxGLGNlKSlyZXR1cm4hIVkuZmxpcE5lZ2F0ZXx8IXRoaXMubmVnYXRlfXJldHVybiFZLmZsaXBOZWdhdGUm'@;
put 'JnRoaXMubmVnYXRlfSxuZS5wcm90b3R5cGUubWF0Y2hPbmU9ZnVuY3Rpb24odWUsY2UsWSl7dmFyIGI9dGhpcy5vcHRpb25zO3RoaXMuZGVidWcoIm1hdGNoT25lIix7dGhpczp0aGlzLGZpbGU6dWUscGF0dGVybjpjZX0pLHRoaXMuZGVidWcoIm1hdGNoT25lIix1ZS5sZW5ndGgsY2UubGVu'@;
put 'Z3RoKTtmb3IodmFyIHg9MCxOPTAsRj11ZS5sZW5ndGgsZz1jZS5sZW5ndGg7eDxGJiZOPGc7eCsrLE4rKyl7dGhpcy5kZWJ1ZygibWF0Y2hPbmUgbG9vcCIpO3ZhciBDLE09Y2VbTl0seT11ZVt4XTtpZih0aGlzLmRlYnVnKGNlLE0seSksITE9PT1NKXJldHVybiExO2lmKE09PT1JKXt0aGlz'@;
put 'LmRlYnVnKCJHTE9CU1RBUiIsW2NlLE0seV0pO3ZhciBwPXgsUz1OKzE7aWYoUz09PWcpe2Zvcih0aGlzLmRlYnVnKCIqKiBhdCB0aGUgZW5kIik7eDxGO3grKylpZigiLiI9PT11ZVt4XXx8Ii4uIj09PXVlW3hdfHwhYi5kb3QmJiIuIj09PXVlW3hdLmNoYXJBdCgwKSlyZXR1cm4hMTtyZXR1'@;
put 'cm4hMH1mb3IoO3A8Rjspe3ZhciBRPXVlW3BdO2lmKHRoaXMuZGVidWcoIlxuZ2xvYnN0YXIgd2hpbGUiLHVlLHAsY2UsUyxRKSx0aGlzLm1hdGNoT25lKHVlLnNsaWNlKHApLGNlLnNsaWNlKFMpLFkpKXJldHVybiB0aGlzLmRlYnVnKCJnbG9ic3RhciBmb3VuZCBtYXRjaCEiLHAsRixRKSwh'@;
put 'MDtpZigiLiI9PT1RfHwiLi4iPT09UXx8IWIuZG90JiYiLiI9PT1RLmNoYXJBdCgwKSl7dGhpcy5kZWJ1ZygiZG90IGRldGVjdGVkISIsdWUscCxjZSxTKTticmVha310aGlzLmRlYnVnKCJnbG9ic3RhciBzd2FsbG93IGEgc2VnbWVudCwgYW5kIGNvbnRpbnVlIikscCsrfXJldHVybiEoIVl8'@;
put 'fCh0aGlzLmRlYnVnKCJcbj4+PiBubyBtYXRjaCwgcGFydGlhbD8iLHVlLHAsY2UsUykscCE9PUYpKX1pZigic3RyaW5nIj09dHlwZW9mIE0/dGhpcy5kZWJ1Zygic3RyaW5nIG1hdGNoIixNLHksQz15PT09TSk6KEM9eS5tYXRjaChNKSx0aGlzLmRlYnVnKCJwYXR0ZXJuIG1hdGNoIixNLHks'@;
put 'QykpLCFDKXJldHVybiExfWlmKHg9PT1GJiZOPT09ZylyZXR1cm4hMDtpZih4PT09RilyZXR1cm4gWTtpZihOPT09ZylyZXR1cm4geD09PUYtMSYmIiI9PT11ZVt4XTt0aHJvdyBuZXcgRXJyb3IoInd0Zj8iKX19LDQyNDQ6SD0+eyJ1c2Ugc3RyaWN0Ijt2YXIgQj1mdW5jdGlvbihMKXtyZXR1'@;
put 'cm4gTCE9TH07SC5leHBvcnRzPWZ1bmN0aW9uKEwsSyl7cmV0dXJuIDA9PT1MJiYwPT09Sz8xL0w9PTEvSzpMPT09S3x8ISghQihMKXx8IUIoSykpfX0sNjA5OihILEIsTCk9PnsidXNlIHN0cmljdCI7dmFyIEs9TCg0Mjg5KSxKPUwoNTU1OSksST1MKDQyNDQpLFI9TCg1NjI0KSxFPUwoMjI4'@;
put 'MSksej1KKFIoKSxPYmplY3QpO0soeix7Z2V0UG9seWZpbGw6UixpbXBsZW1lbnRhdGlvbjpJLHNoaW06RX0pLEguZXhwb3J0cz16fSw1NjI0OihILEIsTCk9PnsidXNlIHN0cmljdCI7dmFyIEs9TCg0MjQ0KTtILmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Yg'@;
put 'T2JqZWN0LmlzP09iamVjdC5pczpLfX0sMjI4MTooSCxCLEwpPT57InVzZSBzdHJpY3QiO3ZhciBLPUwoNTYyNCksSj1MKDQyODkpO0guZXhwb3J0cz1mdW5jdGlvbigpe3ZhciBJPUsoKTtyZXR1cm4gSihPYmplY3Qse2lzOkl9LHtpczpmdW5jdGlvbigpe3JldHVybiBPYmplY3QuaXMhPT1J'@;
put 'fX0pLEl9fSw4OTg3OihILEIsTCk9PnsidXNlIHN0cmljdCI7dmFyIEs7aWYoIU9iamVjdC5rZXlzKXt2YXIgSj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LEk9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxSPUwoMTQxNCksRT1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNF'@;
put 'bnVtZXJhYmxlLHo9IUUuY2FsbCh7dG9TdHJpbmc6bnVsbH0sInRvU3RyaW5nIiksaj1FLmNhbGwoZnVuY3Rpb24oKXt9LCJwcm90b3R5cGUiKSxWPVsidG9TdHJpbmciLCJ0b0xvY2FsZVN0cmluZyIsInZhbHVlT2YiLCJoYXNPd25Qcm9wZXJ0eSIsImlzUHJvdG90eXBlT2YiLCJwcm9wZXJ0'@;
put 'eUlzRW51bWVyYWJsZSIsImNvbnN0cnVjdG9yIl0sRz1mdW5jdGlvbihxKXt2YXIgdGU9cS5jb25zdHJ1Y3RvcjtyZXR1cm4gdGUmJnRlLnByb3RvdHlwZT09PXF9LFc9eyRhcHBsaWNhdGlvbkNhY2hlOiEwLCRjb25zb2xlOiEwLCRleHRlcm5hbDohMCwkZnJhbWU6ITAsJGZyYW1lRWxlbWVu'@;
put 'dDohMCwkZnJhbWVzOiEwLCRpbm5lckhlaWdodDohMCwkaW5uZXJXaWR0aDohMCwkb25tb3pmdWxsc2NyZWVuY2hhbmdlOiEwLCRvbm1vemZ1bGxzY3JlZW5lcnJvcjohMCwkb3V0ZXJIZWlnaHQ6ITAsJG91dGVyV2lkdGg6ITAsJHBhZ2VYT2Zmc2V0OiEwLCRwYWdlWU9mZnNldDohMCwkcGFy'@;
put 'ZW50OiEwLCRzY3JvbGxMZWZ0OiEwLCRzY3JvbGxUb3A6ITAsJHNjcm9sbFg6ITAsJHNjcm9sbFk6ITAsJHNlbGY6ITAsJHdlYmtpdEluZGV4ZWREQjohMCwkd2Via2l0U3RvcmFnZUluZm86ITAsJHdpbmRvdzohMH0sVT1mdW5jdGlvbigpe2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiEx'@;
put 'O2Zvcih2YXIgcSBpbiB3aW5kb3cpdHJ5e2lmKCFXWyIkIitxXSYmSi5jYWxsKHdpbmRvdyxxKSYmbnVsbCE9PXdpbmRvd1txXSYmIm9iamVjdCI9PXR5cGVvZiB3aW5kb3dbcV0pdHJ5e0cod2luZG93W3FdKX1jYXRjaHtyZXR1cm4hMH19Y2F0Y2h7cmV0dXJuITB9cmV0dXJuITF9KCk7Sz1m'@;
put 'dW5jdGlvbihxKXt2YXIgdGU9bnVsbCE9PXEmJiJvYmplY3QiPT10eXBlb2YgcSxuZT0iW29iamVjdCBGdW5jdGlvbl0iPT09SS5jYWxsKHEpLGllPVIocSksbGU9dGUmJiJbb2JqZWN0IFN0cmluZ10iPT09SS5jYWxsKHEpLGRlPVtdO2lmKCF0ZSYmIW5lJiYhaWUpdGhyb3cgbmV3IFR5cGVF'@;
put 'cnJvcigiT2JqZWN0LmtleXMgY2FsbGVkIG9uIGEgbm9uLW9iamVjdCIpO3ZhciB1ZT1qJiZuZTtpZihsZSYmcS5sZW5ndGg+MCYmIUouY2FsbChxLDApKWZvcih2YXIgY2U9MDtjZTxxLmxlbmd0aDsrK2NlKWRlLnB1c2goU3RyaW5nKGNlKSk7aWYoaWUmJnEubGVuZ3RoPjApZm9yKHZhciBZ'@;
put 'PTA7WTxxLmxlbmd0aDsrK1kpZGUucHVzaChTdHJpbmcoWSkpO2Vsc2UgZm9yKHZhciBiIGluIHEpdWUmJiJwcm90b3R5cGUiPT09Ynx8IUouY2FsbChxLGIpfHxkZS5wdXNoKFN0cmluZyhiKSk7aWYoeilmb3IodmFyIHg9ZnVuY3Rpb24oRil7aWYodHlwZW9mIHdpbmRvdz4idSJ8fCFVKXJl'@;
put 'dHVybiBHKEYpO3RyeXtyZXR1cm4gRyhGKX1jYXRjaHtyZXR1cm4hMX19KHEpLE49MDtOPFYubGVuZ3RoOysrTil4JiYiY29uc3RydWN0b3IiPT09VltOXXx8IUouY2FsbChxLFZbTl0pfHxkZS5wdXNoKFZbTl0pO3JldHVybiBkZX19SC5leHBvcnRzPUt9LDIyMTU6KEgsQixMKT0+eyJ1c2Ug'@;
put 'c3RyaWN0Ijt2YXIgSz1BcnJheS5wcm90b3R5cGUuc2xpY2UsSj1MKDE0MTQpLEk9T2JqZWN0LmtleXMsUj1JP2Z1bmN0aW9uKHope3JldHVybiBJKHopfTpMKDg5ODcpLEU9T2JqZWN0LmtleXM7Ui5zaGltPWZ1bmN0aW9uKCl7aWYoT2JqZWN0LmtleXMpe3ZhciB6PWZ1bmN0aW9uKCl7dmFy'@;
put 'IGo9T2JqZWN0LmtleXMoYXJndW1lbnRzKTtyZXR1cm4gaiYmai5sZW5ndGg9PT1hcmd1bWVudHMubGVuZ3RofSgxLDIpO3p8fChPYmplY3Qua2V5cz1mdW5jdGlvbihqKXtyZXR1cm4gSihqKT9FKEsuY2FsbChqKSk6RShqKX0pfWVsc2UgT2JqZWN0LmtleXM9UjtyZXR1cm4gT2JqZWN0Lmtl'@;
put 'eXN8fFJ9LEguZXhwb3J0cz1SfSwxNDE0Okg9PnsidXNlIHN0cmljdCI7dmFyIEI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztILmV4cG9ydHM9ZnVuY3Rpb24oTCl7dmFyIEs9Qi5jYWxsKEwpLEo9IltvYmplY3QgQXJndW1lbnRzXSI9PT1LO3JldHVybiBKfHwoSj0iW29iamVjdCBBcnJh'@;
put 'eV0iIT09SyYmbnVsbCE9PUwmJiJvYmplY3QiPT10eXBlb2YgTCYmIm51bWJlciI9PXR5cGVvZiBMLmxlbmd0aCYmTC5sZW5ndGg+PTAmJiJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1CLmNhbGwoTC5jYWxsZWUpKSxKfX0sNzc4OihILEIsTCk9Pnt2YXIgSz1MKDI0NzkpO2Z1bmN0aW9uIEooUil7'@;
put 'dmFyIEU9ZnVuY3Rpb24oKXtyZXR1cm4gRS5jYWxsZWQ/RS52YWx1ZTooRS5jYWxsZWQ9ITAsRS52YWx1ZT1SLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9O3JldHVybiBFLmNhbGxlZD0hMSxFfWZ1bmN0aW9uIEkoUil7dmFyIEU9ZnVuY3Rpb24oKXtpZihFLmNhbGxlZCl0aHJvdyBuZXcgRXJy'@;
put 'b3IoRS5vbmNlRXJyb3IpO3JldHVybiBFLmNhbGxlZD0hMCxFLnZhbHVlPVIuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtyZXR1cm4gRS5vbmNlRXJyb3I9KFIubmFtZXx8IkZ1bmN0aW9uIHdyYXBwZWQgd2l0aCBgb25jZWAiKSsiIHNob3VsZG4ndCBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2Ui'@;
put 'LEUuY2FsbGVkPSExLEV9SC5leHBvcnRzPUsoSiksSC5leHBvcnRzLnN0cmljdD1LKEkpLEoucHJvdG89SihmdW5jdGlvbigpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShGdW5jdGlvbi5wcm90b3R5cGUsIm9uY2UiLHt2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBKKHRoaXMpfSxjb25maWd1cmFi'@;
put 'bGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRnVuY3Rpb24ucHJvdG90eXBlLCJvbmNlU3RyaWN0Iix7dmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzKX0sY29uZmlndXJhYmxlOiEwfSl9KX0sNzQzNTooSCxCKT0+e0IuZW5kaWFubmVzcz1mdW5jdGlvbigpe3JldHVybiJMRSJ9'@;
put 'LEIuaG9zdG5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIGxvY2F0aW9uPCJ1Ij9sb2NhdGlvbi5ob3N0bmFtZToiIn0sQi5sb2FkYXZnPWZ1bmN0aW9uKCl7cmV0dXJuW119LEIudXB0aW1lPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LEIuZnJlZW1lbT1mdW5jdGlvbigpe3JldHVybiBOdW1i'@;
put 'ZXIuTUFYX1ZBTFVFfSxCLnRvdGFsbWVtPWZ1bmN0aW9uKCl7cmV0dXJuIE51bWJlci5NQVhfVkFMVUV9LEIuY3B1cz1mdW5jdGlvbigpe3JldHVybltdfSxCLnR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4iQnJvd3NlciJ9LEIucmVsZWFzZT1mdW5jdGlvbigpe3JldHVybiB0eXBlb2YgbmF2aWdh'@;
put 'dG9yPCJ1Ij9uYXZpZ2F0b3IuYXBwVmVyc2lvbjoiIn0sQi5uZXR3b3JrSW50ZXJmYWNlcz1CLmdldE5ldHdvcmtJbnRlcmZhY2VzPWZ1bmN0aW9uKCl7cmV0dXJue319LEIuYXJjaD1mdW5jdGlvbigpe3JldHVybiJqYXZhc2NyaXB0In0sQi5wbGF0Zm9ybT1mdW5jdGlvbigpe3JldHVybiJi'@;
put 'cm93c2VyIn0sQi50bXBkaXI9Qi50bXBEaXI9ZnVuY3Rpb24oKXtyZXR1cm4iL3RtcCJ9LEIuRU9MPSJcbiIsQi5ob21lZGlyPWZ1bmN0aW9uKCl7cmV0dXJuIi8ifX0sMjgxODooSCxCLEwpPT57InVzZSBzdHJpY3QiO3ZhciBLPUwoOTgwOSk7Qi5jZXJ0aWZpY2F0ZT1MKDE5MzQpO3ZhciBK'@;
put 'PUsuZGVmaW5lKCJSU0FQcml2YXRlS2V5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoIm1vZHVsdXMiKS5pbnQoKSx0aGlzLmtleSgicHVibGljRXhwb25lbnQiKS5pbnQoKSx0aGlzLmtleSgicHJpdmF0ZUV4cG9uZW50Iiku'@;
put 'aW50KCksdGhpcy5rZXkoInByaW1lMSIpLmludCgpLHRoaXMua2V5KCJwcmltZTIiKS5pbnQoKSx0aGlzLmtleSgiZXhwb25lbnQxIikuaW50KCksdGhpcy5rZXkoImV4cG9uZW50MiIpLmludCgpLHRoaXMua2V5KCJjb2VmZmljaWVudCIpLmludCgpKX0pO0IuUlNBUHJpdmF0ZUtleT1KO3Zh'@;
put 'ciBJPUsuZGVmaW5lKCJSU0FQdWJsaWNLZXkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoIm1vZHVsdXMiKS5pbnQoKSx0aGlzLmtleSgicHVibGljRXhwb25lbnQiKS5pbnQoKSl9KTtCLlJTQVB1YmxpY0tleT1JO3ZhciBSPUsuZGVmaW5lKCJTdWJqZWN0UHVibGljS2V5'@;
put 'SW5mbyIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikudXNlKEUpLHRoaXMua2V5KCJzdWJqZWN0UHVibGljS2V5IikuYml0c3RyKCkpfSk7Qi5QdWJsaWNLZXk9Ujt2YXIgRT1LLmRlZmluZSgiQWxnb3JpdGhtSWRlbnRpZmllciIsZnVuY3Rpb24oKXt0'@;
put 'aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikub2JqaWQoKSx0aGlzLmtleSgibm9uZSIpLm51bGxfKCkub3B0aW9uYWwoKSx0aGlzLmtleSgiY3VydmUiKS5vYmppZCgpLm9wdGlvbmFsKCksdGhpcy5rZXkoInBhcmFtcyIpLnNlcSgpLm9iaih0aGlzLmtleSgicCIpLmludCgp'@;
put 'LHRoaXMua2V5KCJxIikuaW50KCksdGhpcy5rZXkoImciKS5pbnQoKSkub3B0aW9uYWwoKSl9KSx6PUsuZGVmaW5lKCJQcml2YXRlS2V5SW5mbyIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmludCgpLHRoaXMua2V5KCJhbGdvcml0aG0iKS51c2UoRSks'@;
put 'dGhpcy5rZXkoInN1YmplY3RQcml2YXRlS2V5Iikub2N0c3RyKCkpfSk7Qi5Qcml2YXRlS2V5PXo7dmFyIGo9Sy5kZWZpbmUoIkVuY3J5cHRlZFByaXZhdGVLZXlJbmZvIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS5zZXEoKS5vYmoodGhpcy5rZXko'@;
put 'ImlkIikub2JqaWQoKSx0aGlzLmtleSgiZGVjcnlwdCIpLnNlcSgpLm9iaih0aGlzLmtleSgia2RlIikuc2VxKCkub2JqKHRoaXMua2V5KCJpZCIpLm9iamlkKCksdGhpcy5rZXkoImtkZXBhcmFtcyIpLnNlcSgpLm9iaih0aGlzLmtleSgic2FsdCIpLm9jdHN0cigpLHRoaXMua2V5KCJpdGVy'@;
put 'cyIpLmludCgpKSksdGhpcy5rZXkoImNpcGhlciIpLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnbyIpLm9iamlkKCksdGhpcy5rZXkoIml2Iikub2N0c3RyKCkpKSksdGhpcy5rZXkoInN1YmplY3RQcml2YXRlS2V5Iikub2N0c3RyKCkpfSk7Qi5FbmNyeXB0ZWRQcml2YXRlS2V5PWo7dmFyIFY9'@;
put 'Sy5kZWZpbmUoIkRTQVByaXZhdGVLZXkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5pbnQoKSx0aGlzLmtleSgicCIpLmludCgpLHRoaXMua2V5KCJxIikuaW50KCksdGhpcy5rZXkoImciKS5pbnQoKSx0aGlzLmtleSgicHViX2tleSIpLmludCgpLHRo'@;
put 'aXMua2V5KCJwcml2X2tleSIpLmludCgpKX0pO0IuRFNBUHJpdmF0ZUtleT1WLEIuRFNBcGFyYW09Sy5kZWZpbmUoIkRTQXBhcmFtIixmdW5jdGlvbigpe3RoaXMuaW50KCl9KTt2YXIgRz1LLmRlZmluZSgiRUNQcml2YXRlS2V5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5'@;
put 'KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoInByaXZhdGVLZXkiKS5vY3RzdHIoKSx0aGlzLmtleSgicGFyYW1ldGVycyIpLm9wdGlvbmFsKCkuZXhwbGljaXQoMCkudXNlKFcpLHRoaXMua2V5KCJwdWJsaWNLZXkiKS5vcHRpb25hbCgpLmV4cGxpY2l0KDEpLmJpdHN0cigpKX0pO0IuRUNQ'@;
put 'cml2YXRlS2V5PUc7dmFyIFc9Sy5kZWZpbmUoIkVDUGFyYW1ldGVycyIsZnVuY3Rpb24oKXt0aGlzLmNob2ljZSh7bmFtZWRDdXJ2ZTp0aGlzLm9iamlkKCl9KX0pO0Iuc2lnbmF0dXJlPUsuZGVmaW5lKCJzaWduYXR1cmUiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInIi'@;
put 'KS5pbnQoKSx0aGlzLmtleSgicyIpLmludCgpKX0pfSwxOTM0OihILEIsTCk9PnsidXNlIHN0cmljdCI7dmFyIEs9TCg5ODA5KSxKPUsuZGVmaW5lKCJUaW1lIixmdW5jdGlvbigpe3RoaXMuY2hvaWNlKHt1dGNUaW1lOnRoaXMudXRjdGltZSgpLGdlbmVyYWxUaW1lOnRoaXMuZ2VudGltZSgp'@;
put 'fSl9KSxJPUsuZGVmaW5lKCJBdHRyaWJ1dGVUeXBlVmFsdWUiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInR5cGUiKS5vYmppZCgpLHRoaXMua2V5KCJ2YWx1ZSIpLmFueSgpKX0pLFI9Sy5kZWZpbmUoIkFsZ29yaXRobUlkZW50aWZpZXIiLGZ1bmN0aW9uKCl7dGhpcy5z'@;
put 'ZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLm9iamlkKCksdGhpcy5rZXkoInBhcmFtZXRlcnMiKS5vcHRpb25hbCgpLHRoaXMua2V5KCJjdXJ2ZSIpLm9iamlkKCkub3B0aW9uYWwoKSl9KSxFPUsuZGVmaW5lKCJTdWJqZWN0UHVibGljS2V5SW5mbyIsZnVuY3Rpb24oKXt0aGlzLnNl'@;
put 'cSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikudXNlKFIpLHRoaXMua2V5KCJzdWJqZWN0UHVibGljS2V5IikuYml0c3RyKCkpfSksej1LLmRlZmluZSgiUmVsYXRpdmVEaXN0aW5ndWlzaGVkTmFtZSIsZnVuY3Rpb24oKXt0aGlzLnNldG9mKEkpfSksaj1LLmRlZmluZSgiUkROU2VxdWVu'@;
put 'Y2UiLGZ1bmN0aW9uKCl7dGhpcy5zZXFvZih6KX0pLFY9Sy5kZWZpbmUoIk5hbWUiLGZ1bmN0aW9uKCl7dGhpcy5jaG9pY2Uoe3JkblNlcXVlbmNlOnRoaXMudXNlKGopfSl9KSxHPUsuZGVmaW5lKCJWYWxpZGl0eSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgibm90QmVm'@;
put 'b3JlIikudXNlKEopLHRoaXMua2V5KCJub3RBZnRlciIpLnVzZShKKSl9KSxXPUsuZGVmaW5lKCJFeHRlbnNpb24iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImV4dG5JRCIpLm9iamlkKCksdGhpcy5rZXkoImNyaXRpY2FsIikuYm9vbCgpLmRlZighMSksdGhpcy5rZXko'@;
put 'ImV4dG5WYWx1ZSIpLm9jdHN0cigpKX0pLFU9Sy5kZWZpbmUoIlRCU0NlcnRpZmljYXRlIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuZXhwbGljaXQoMCkuaW50KCkub3B0aW9uYWwoKSx0aGlzLmtleSgic2VyaWFsTnVtYmVyIikuaW50KCksdGhpcy5r'@;
put 'ZXkoInNpZ25hdHVyZSIpLnVzZShSKSx0aGlzLmtleSgiaXNzdWVyIikudXNlKFYpLHRoaXMua2V5KCJ2YWxpZGl0eSIpLnVzZShHKSx0aGlzLmtleSgic3ViamVjdCIpLnVzZShWKSx0aGlzLmtleSgic3ViamVjdFB1YmxpY0tleUluZm8iKS51c2UoRSksdGhpcy5rZXkoImlzc3VlclVuaXF1'@;
put 'ZUlEIikuaW1wbGljaXQoMSkuYml0c3RyKCkub3B0aW9uYWwoKSx0aGlzLmtleSgic3ViamVjdFVuaXF1ZUlEIikuaW1wbGljaXQoMikuYml0c3RyKCkub3B0aW9uYWwoKSx0aGlzLmtleSgiZXh0ZW5zaW9ucyIpLmV4cGxpY2l0KDMpLnNlcW9mKFcpLm9wdGlvbmFsKCkpfSkscT1LLmRlZmlu'@;
put 'ZSgiWDUwOUNlcnRpZmljYXRlIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ0YnNDZXJ0aWZpY2F0ZSIpLnVzZShVKSx0aGlzLmtleSgic2lnbmF0dXJlQWxnb3JpdGhtIikudXNlKFIpLHRoaXMua2V5KCJzaWduYXR1cmVWYWx1ZSIpLmJpdHN0cigpKX0pO0guZXhwb3J0'@;
put 'cz1xfSw3NjMxOihILEIsTCk9Pnt2YXIgSz0vUHJvYy1UeXBlOiA0LEVOQ1JZUFRFRFtcblxyXStERUstSW5mbzogQUVTLSgoPzoxMjgpfCg/OjE5Mil8KD86MjU2KSktQ0JDLChbMC05QS1IXSspW1xuXHJdKyhbMC05QS16XG5ccisvPV0rKVtcblxyXSsvbSxKPS9eLS0tLS1CRUdJTiAoKD86'@;
put 'Lio/IEtFWSl8Q0VSVElGSUNBVEUpLS0tLS0vbSxJPS9eLS0tLS1CRUdJTiAoKD86Lio/IEtFWSl8Q0VSVElGSUNBVEUpLS0tLS0oWzAtOUEtelxuXHIrLz1dKyktLS0tLUVORCBcMS0tLS0tJC9tLFI9TCgzMDQ4KSxFPUwoNDY5Niksej1MKDk1MDkpLkJ1ZmZlcjtILmV4cG9ydHM9ZnVuY3Rp'@;
put 'b24oaixWKXt2YXIgRyxXPWoudG9TdHJpbmcoKSxVPVcubWF0Y2goSyk7aWYoVSl7dmFyIHE9ImFlcyIrVVsxXSx0ZT16LmZyb20oVVsyXSwiaGV4IiksbmU9ei5mcm9tKFVbM10ucmVwbGFjZSgvW1xyXG5dL2csIiIpLCJiYXNlNjQiKSxpZT1SKFYsdGUuc2xpY2UoMCw4KSxwYXJzZUludChV'@;
put 'WzFdLDEwKSkua2V5LGxlPVtdLGRlPUUuY3JlYXRlRGVjaXBoZXJpdihxLGllLHRlKTtsZS5wdXNoKGRlLnVwZGF0ZShuZSkpLGxlLnB1c2goZGUuZmluYWwoKSksRz16LmNvbmNhdChsZSl9ZWxzZXt2YXIgdWU9Vy5tYXRjaChJKTtHPXouZnJvbSh1ZVsyXS5yZXBsYWNlKC9bXHJcbl0vZywi'@;
put 'IiksImJhc2U2NCIpfXJldHVybnt0YWc6Vy5tYXRjaChKKVsxXSxkYXRhOkd9fX0sOTgwOihILEIsTCk9Pnt2YXIgSz1MKDI4MTgpLEo9TCgyNTYyKSxJPUwoNzYzMSksUj1MKDQ2OTYpLEU9TCg1NjMyKSx6PUwoOTUwOSkuQnVmZmVyO2Z1bmN0aW9uIGooVil7dmFyIEc7Im9iamVjdCIhPXR5'@;
put 'cGVvZiBWfHx6LmlzQnVmZmVyKFYpfHwoRz1WLnBhc3NwaHJhc2UsVj1WLmtleSksInN0cmluZyI9PXR5cGVvZiBWJiYoVj16LmZyb20oVikpO3ZhciBXLFUsaWUsbGUsZGUsdWUsY2UsWSxiLHgsTixGLGcscT1JKFYsRyksdGU9cS50YWcsbmU9cS5kYXRhO3N3aXRjaCh0ZSl7Y2FzZSJDRVJU'@;
put 'SUZJQ0FURSI6VT1LLmNlcnRpZmljYXRlLmRlY29kZShuZSwiZGVyIikudGJzQ2VydGlmaWNhdGUuc3ViamVjdFB1YmxpY0tleUluZm87Y2FzZSJQVUJMSUMgS0VZIjpzd2l0Y2goVXx8KFU9Sy5QdWJsaWNLZXkuZGVjb2RlKG5lLCJkZXIiKSksVz1VLmFsZ29yaXRobS5hbGdvcml0aG0uam9p'@;
put 'bigiLiIpKXtjYXNlIjEuMi44NDAuMTEzNTQ5LjEuMS4xIjpyZXR1cm4gSy5SU0FQdWJsaWNLZXkuZGVjb2RlKFUuc3ViamVjdFB1YmxpY0tleS5kYXRhLCJkZXIiKTtjYXNlIjEuMi44NDAuMTAwNDUuMi4xIjpyZXR1cm4gVS5zdWJqZWN0UHJpdmF0ZUtleT1VLnN1YmplY3RQdWJsaWNLZXks'@;
put 'e3R5cGU6ImVjIixkYXRhOlV9O2Nhc2UiMS4yLjg0MC4xMDA0MC40LjEiOnJldHVybiBVLmFsZ29yaXRobS5wYXJhbXMucHViX2tleT1LLkRTQXBhcmFtLmRlY29kZShVLnN1YmplY3RQdWJsaWNLZXkuZGF0YSwiZGVyIikse3R5cGU6ImRzYSIsZGF0YTpVLmFsZ29yaXRobS5wYXJhbXN9O2Rl'@;
put 'ZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGtleSBpZCAiK1cpfWNhc2UiRU5DUllQVEVEIFBSSVZBVEUgS0VZIjpsZT1HLGRlPShpZT1uZT1LLkVuY3J5cHRlZFByaXZhdGVLZXkuZGVjb2RlKG5lLCJkZXIiKSkuYWxnb3JpdGhtLmRlY3J5cHQua2RlLmtkZXBhcmFtcy5zYWx0LHVl'@;
put 'PXBhcnNlSW50KGllLmFsZ29yaXRobS5kZWNyeXB0LmtkZS5rZGVwYXJhbXMuaXRlcnMudG9TdHJpbmcoKSwxMCksY2U9SltpZS5hbGdvcml0aG0uZGVjcnlwdC5jaXBoZXIuYWxnby5qb2luKCIuIildLFk9aWUuYWxnb3JpdGhtLmRlY3J5cHQuY2lwaGVyLml2LGI9aWUuc3ViamVjdFByaXZh'@;
put 'dGVLZXkseD1wYXJzZUludChjZS5zcGxpdCgiLSIpWzFdLDEwKS84LE49RS5wYmtkZjJTeW5jKGxlLGRlLHVlLHgsInNoYTEiKSxGPVIuY3JlYXRlRGVjaXBoZXJpdihjZSxOLFkpLChnPVtdKS5wdXNoKEYudXBkYXRlKGIpKSxnLnB1c2goRi5maW5hbCgpKSxuZT16LmNvbmNhdChnKTtjYXNl'@;
put 'IlBSSVZBVEUgS0VZIjpzd2l0Y2goVz0oVT1LLlByaXZhdGVLZXkuZGVjb2RlKG5lLCJkZXIiKSkuYWxnb3JpdGhtLmFsZ29yaXRobS5qb2luKCIuIikpe2Nhc2UiMS4yLjg0MC4xMTM1NDkuMS4xLjEiOnJldHVybiBLLlJTQVByaXZhdGVLZXkuZGVjb2RlKFUuc3ViamVjdFByaXZhdGVLZXks'@;
put 'ImRlciIpO2Nhc2UiMS4yLjg0MC4xMDA0NS4yLjEiOnJldHVybntjdXJ2ZTpVLmFsZ29yaXRobS5jdXJ2ZSxwcml2YXRlS2V5OksuRUNQcml2YXRlS2V5LmRlY29kZShVLnN1YmplY3RQcml2YXRlS2V5LCJkZXIiKS5wcml2YXRlS2V5fTtjYXNlIjEuMi44NDAuMTAwNDAuNC4xIjpyZXR1cm4g'@;
put 'VS5hbGdvcml0aG0ucGFyYW1zLnByaXZfa2V5PUsuRFNBcGFyYW0uZGVjb2RlKFUuc3ViamVjdFByaXZhdGVLZXksImRlciIpLHt0eXBlOiJkc2EiLHBhcmFtczpVLmFsZ29yaXRobS5wYXJhbXN9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGtleSBpZCAiK1cpfWNhc2UiUlNB'@;
put 'IFBVQkxJQyBLRVkiOnJldHVybiBLLlJTQVB1YmxpY0tleS5kZWNvZGUobmUsImRlciIpO2Nhc2UiUlNBIFBSSVZBVEUgS0VZIjpyZXR1cm4gSy5SU0FQcml2YXRlS2V5LmRlY29kZShuZSwiZGVyIik7Y2FzZSJEU0EgUFJJVkFURSBLRVkiOnJldHVybnt0eXBlOiJkc2EiLHBhcmFtczpLLkRT'@;
put 'QVByaXZhdGVLZXkuZGVjb2RlKG5lLCJkZXIiKX07Y2FzZSJFQyBQUklWQVRFIEtFWSI6cmV0dXJue2N1cnZlOihuZT1LLkVDUHJpdmF0ZUtleS5kZWNvZGUobmUsImRlciIpKS5wYXJhbWV0ZXJzLnZhbHVlLHByaXZhdGVLZXk6bmUucHJpdmF0ZUtleX07ZGVmYXVsdDp0aHJvdyBuZXcgRXJy'@;
put 'b3IoInVua25vd24ga2V5IHR5cGUgIit0ZSl9fUguZXhwb3J0cz1qLGouc2lnbmF0dXJlPUsuc2lnbmF0dXJlfSw0MDk1OihILEIsTCk9PnsidXNlIHN0cmljdCI7dmFyIEs9TCg0MTU1KTtmdW5jdGlvbiBKKFIpe3JldHVybiIvIj09PVIuY2hhckF0KDApfWZ1bmN0aW9uIEkoUil7dmFyIEU9'@;
put 'L14oW2EtekEtWl06fFtcXFwvXXsyfVteXFxcL10rW1xcXC9dK1teXFxcL10rKT8oW1xcXC9dKT8oW1xzXFNdKj8pJC8uZXhlYyhSKSx6PUVbMV18fCIiLGo9ISghenx8IjoiPT09ei5jaGFyQXQoMSkpO3JldHVybiEoIUVbMl0mJiFqKX1ILmV4cG9ydHM9IndpbjMyIj09PUsucGxhdGZvcm0/'@;
put 'STpKLEguZXhwb3J0cy5wb3NpeD1KLEguZXhwb3J0cy53aW4zMj1JfSwxNzI1Okg9PntILmV4cG9ydHM9ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oQixMKXtCLnN1cGVyXz1MLEIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTC5wcm90b3R5cGUse2NvbnN0cnVj'@;
put 'dG9yOnt2YWx1ZTpCLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pfTpmdW5jdGlvbihCLEwpe0Iuc3VwZXJfPUw7dmFyIEs9ZnVuY3Rpb24oKXt9O0sucHJvdG90eXBlPUwucHJvdG90eXBlLEIucHJvdG90eXBlPW5ldyBLLEIucHJvdG90eXBlLmNvbnN0cnVj'@;
put 'dG9yPUJ9fSwyOTc0Okg9PntILmV4cG9ydHM9ZnVuY3Rpb24oQil7cmV0dXJuIEImJiJvYmplY3QiPT10eXBlb2YgQiYmImZ1bmN0aW9uIj09dHlwZW9mIEIuY29weSYmImZ1bmN0aW9uIj09dHlwZW9mIEIuZmlsbCYmImZ1bmN0aW9uIj09dHlwZW9mIEIucmVhZFVJbnQ4fX0sODA1OTooSCxC'@;
put 'LEwpPT57dmFyIEs9TCg0MTU1KSxKPUwoNTEwOCksST0vJVtzZGolXS9nO0IuZm9ybWF0PWZ1bmN0aW9uKE0pe2lmKCFsZShNKSl7Zm9yKHZhciB5PVtdLHA9MDtwPGFyZ3VtZW50cy5sZW5ndGg7cCsrKXkucHVzaCh6KGFyZ3VtZW50c1twXSkpO3JldHVybiB5LmpvaW4oIiAiKX1wPTE7Zm9y'@;
put 'KHZhciBTPWFyZ3VtZW50cyxRPVMubGVuZ3RoLHJlPVN0cmluZyhNKS5yZXBsYWNlKEksZnVuY3Rpb24obWUpe2lmKCIlJSI9PT1tZSlyZXR1cm4iJSI7aWYocD49USlyZXR1cm4gbWU7c3dpdGNoKG1lKXtjYXNlIiVzIjpyZXR1cm4gU3RyaW5nKFNbcCsrXSk7Y2FzZSIlZCI6cmV0dXJuIE51'@;
put 'bWJlcihTW3ArK10pO2Nhc2UiJWoiOnRyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoU1twKytdKX1jYXRjaHtyZXR1cm4iW0NpcmN1bGFyXSJ9ZGVmYXVsdDpyZXR1cm4gbWV9fSksZmU9U1twXTtwPFE7ZmU9U1srK3BdKW5lKGZlKXx8IWNlKGZlKT9yZSs9IiAiK2ZlOnJlKz0iICIreihmZSk7'@;
put 'cmV0dXJuIHJlfSxCLmRlcHJlY2F0ZT1mdW5jdGlvbihNLHkpe2lmKGRlKEwuZy5wcm9jZXNzKSlyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQi5kZXByZWNhdGUoTSx5KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2lmKCEwPT09Sy5ub0RlcHJlY2F0aW9uKXJldHVybiBNO3ZhciBwPSExO3Jl'@;
put 'dHVybiBmdW5jdGlvbigpe2lmKCFwKXtpZihLLnRocm93RGVwcmVjYXRpb24pdGhyb3cgbmV3IEVycm9yKHkpO0sudHJhY2VEZXByZWNhdGlvbj9KLnRyYWNlKHkpOkouZXJyb3IoeSkscD0hMH1yZXR1cm4gTS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fTt2YXIgUixFPXt9O2Z1bmN0aW9uIHoo'@;
put 'TSx5KXt2YXIgcD17c2VlbjpbXSxzdHlsaXplOlZ9O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj0zJiYocC5kZXB0aD1hcmd1bWVudHNbMl0pLGFyZ3VtZW50cy5sZW5ndGg+PTQmJihwLmNvbG9ycz1hcmd1bWVudHNbM10pLHRlKHkpP3Auc2hvd0hpZGRlbj15OnkmJkIuX2V4dGVuZChwLHkp'@;
put 'LGRlKHAuc2hvd0hpZGRlbikmJihwLnNob3dIaWRkZW49ITEpLGRlKHAuZGVwdGgpJiYocC5kZXB0aD0yKSxkZShwLmNvbG9ycykmJihwLmNvbG9ycz0hMSksZGUocC5jdXN0b21JbnNwZWN0KSYmKHAuY3VzdG9tSW5zcGVjdD0hMCkscC5jb2xvcnMmJihwLnN0eWxpemU9aiksRyhwLE0scC5k'@;
put 'ZXB0aCl9ZnVuY3Rpb24gaihNLHkpe3ZhciBwPXouc3R5bGVzW3ldO3JldHVybiBwPyJceDFiWyIrei5jb2xvcnNbcF1bMF0rIm0iK00rIlx4MWJbIit6LmNvbG9yc1twXVsxXSsibSI6TX1mdW5jdGlvbiBWKE0seSl7cmV0dXJuIE19ZnVuY3Rpb24gRyhNLHkscCl7aWYoTS5jdXN0b21JbnNw'@;
put 'ZWN0JiZ5JiZ4KHkuaW5zcGVjdCkmJnkuaW5zcGVjdCE9PUIuaW5zcGVjdCYmKCF5LmNvbnN0cnVjdG9yfHx5LmNvbnN0cnVjdG9yLnByb3RvdHlwZSE9PXkpKXt2YXIgUz15Lmluc3BlY3QocCxNKTtyZXR1cm4gbGUoUyl8fChTPUcoTSxTLHApKSxTfXZhciBRPWZ1bmN0aW9uKE5lLExlKXtp'@;
put 'ZihkZShMZSkpcmV0dXJuIE5lLnN0eWxpemUoInVuZGVmaW5lZCIsInVuZGVmaW5lZCIpO2lmKGxlKExlKSl7dmFyIEJlPSInIitKU09OLnN0cmluZ2lmeShMZSkucmVwbGFjZSgvXiJ8IiQvZywiIikucmVwbGFjZSgvJy9nLCJcXCciKS5yZXBsYWNlKC9cXCIvZywnIicpKyInIjtyZXR1cm4g'@;
put 'TmUuc3R5bGl6ZShCZSwic3RyaW5nIil9cmV0dXJuIGllKExlKT9OZS5zdHlsaXplKCIiK0xlLCJudW1iZXIiKTp0ZShMZSk/TmUuc3R5bGl6ZSgiIitMZSwiYm9vbGVhbiIpOm5lKExlKT9OZS5zdHlsaXplKCJudWxsIiwibnVsbCIpOnZvaWQgMH0oTSx5KTtpZihRKXJldHVybiBRO3ZhciBM'@;
put 'ZSxyZT1PYmplY3Qua2V5cyh5KSxmZT0oTGU9e30scmUuZm9yRWFjaChmdW5jdGlvbihCZSxIZSl7TGVbQmVdPSEwfSksTGUpO2lmKE0uc2hvd0hpZGRlbiYmKHJlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHkpKSxiKHkpJiYocmUuaW5kZXhPZigibWVzc2FnZSIpPj0wfHxyZS5pbmRl'@;
put 'eE9mKCJkZXNjcmlwdGlvbiIpPj0wKSlyZXR1cm4gVyh5KTtpZigwPT09cmUubGVuZ3RoKXtpZih4KHkpKXJldHVybiBNLnN0eWxpemUoIltGdW5jdGlvbiIrKHkubmFtZT8iOiAiK3kubmFtZToiIikrIl0iLCJzcGVjaWFsIik7aWYodWUoeSkpcmV0dXJuIE0uc3R5bGl6ZShSZWdFeHAucHJv'@;
put 'dG90eXBlLnRvU3RyaW5nLmNhbGwoeSksInJlZ2V4cCIpO2lmKFkoeSkpcmV0dXJuIE0uc3R5bGl6ZShEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHkpLCJkYXRlIik7aWYoYih5KSlyZXR1cm4gVyh5KX12YXIga2UsVGU9IiIsUGU9ITEsRmU9WyJ7IiwifSJdO3JldHVybiBxKHkpJiYo'@;
put 'UGU9ITAsRmU9WyJbIiwiXSJdKSx4KHkpJiYoVGU9IiBbRnVuY3Rpb24iKyh5Lm5hbWU/IjogIit5Lm5hbWU6IiIpKyJdIiksdWUoeSkmJihUZT0iICIrUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHkpKSxZKHkpJiYoVGU9IiAiK0RhdGUucHJvdG90eXBlLnRvVVRDU3RyaW5nLmNh'@;
put 'bGwoeSkpLGIoeSkmJihUZT0iICIrVyh5KSksMCE9PXJlLmxlbmd0aHx8UGUmJjAhPXkubGVuZ3RoP3A8MD91ZSh5KT9NLnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHkpLCJyZWdleHAiKTpNLnN0eWxpemUoIltPYmplY3RdIiwic3BlY2lhbCIpOihNLnNlZW4ucHVz'@;
put 'aCh5KSxrZT1QZT9mdW5jdGlvbihOZSxMZSxCZSxIZSxRZSl7Zm9yKHZhciBtdD1bXSxLZT0wLHdlPUxlLmxlbmd0aDtLZTx3ZTsrK0tlKUMoTGUsU3RyaW5nKEtlKSk/bXQucHVzaChVKE5lLExlLEJlLEhlLFN0cmluZyhLZSksITApKTptdC5wdXNoKCIiKTtyZXR1cm4gUWUuZm9yRWFjaChm'@;
put 'dW5jdGlvbihJZSl7SWUubWF0Y2goL15cZCskLyl8fG10LnB1c2goVShOZSxMZSxCZSxIZSxJZSwhMCkpfSksbXR9KE0seSxwLGZlLHJlKTpyZS5tYXAoZnVuY3Rpb24oTmUpe3JldHVybiBVKE0seSxwLGZlLE5lLFBlKX0pLE0uc2Vlbi5wb3AoKSxmdW5jdGlvbihOZSxMZSxCZSl7cmV0dXJu'@;
put 'IE5lLnJlZHVjZShmdW5jdGlvbihRZSxtdCl7cmV0dXJuIG10LmluZGV4T2YoIlxuIiksUWUrbXQucmVwbGFjZSgvXHUwMDFiXFtcZFxkP20vZywiIikubGVuZ3RoKzF9LDApPjYwP0JlWzBdKygiIj09PUxlPyIiOkxlKyJcbiAiKSsiICIrTmUuam9pbigiLFxuICAiKSsiICIrQmVbMV06QmVb'@;
put 'MF0rTGUrIiAiK05lLmpvaW4oIiwgIikrIiAiK0JlWzFdfShrZSxUZSxGZSkpOkZlWzBdK1RlK0ZlWzFdfWZ1bmN0aW9uIFcoTSl7cmV0dXJuIlsiK0Vycm9yLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKE0pKyJdIn1mdW5jdGlvbiBVKE0seSxwLFMsUSxyZSl7dmFyIGZlLG1lLGtlO2lmKChr'@;
put 'ZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHksUSl8fHt2YWx1ZTp5W1FdfSkuZ2V0P21lPU0uc3R5bGl6ZShrZS5zZXQ/IltHZXR0ZXIvU2V0dGVyXSI6IltHZXR0ZXJdIiwic3BlY2lhbCIpOmtlLnNldCYmKG1lPU0uc3R5bGl6ZSgiW1NldHRlcl0iLCJzcGVjaWFsIikpLEMo'@;
put 'UyxRKXx8KGZlPSJbIitRKyJdIiksbWV8fChNLnNlZW4uaW5kZXhPZihrZS52YWx1ZSk8MD8obWU9bmUocCk/RyhNLGtlLnZhbHVlLG51bGwpOkcoTSxrZS52YWx1ZSxwLTEpKS5pbmRleE9mKCJcbiIpPi0xJiYobWU9cmU/bWUuc3BsaXQoIlxuIikubWFwKGZ1bmN0aW9uKFRlKXtyZXR1cm4i'@;
put 'ICAiK1RlfSkuam9pbigiXG4iKS5zdWJzdHIoMik6IlxuIittZS5zcGxpdCgiXG4iKS5tYXAoZnVuY3Rpb24oVGUpe3JldHVybiIgICAiK1RlfSkuam9pbigiXG4iKSk6bWU9TS5zdHlsaXplKCJbQ2lyY3VsYXJdIiwic3BlY2lhbCIpKSxkZShmZSkpe2lmKHJlJiZRLm1hdGNoKC9eXGQrJC8p'@;
put 'KXJldHVybiBtZTsoZmU9SlNPTi5zdHJpbmdpZnkoIiIrUSkpLm1hdGNoKC9eIihbYS16QS1aX11bYS16QS1aXzAtOV0qKSIkLyk/KGZlPWZlLnN1YnN0cigxLGZlLmxlbmd0aC0yKSxmZT1NLnN0eWxpemUoZmUsIm5hbWUiKSk6KGZlPWZlLnJlcGxhY2UoLycvZywiXFwnIikucmVwbGFjZSgv'@;
put 'XFwiL2csJyInKS5yZXBsYWNlKC8oXiJ8IiQpL2csIiciKSxmZT1NLnN0eWxpemUoZmUsInN0cmluZyIpKX1yZXR1cm4gZmUrIjogIittZX1mdW5jdGlvbiBxKE0pe3JldHVybiBBcnJheS5pc0FycmF5KE0pfWZ1bmN0aW9uIHRlKE0pe3JldHVybiJib29sZWFuIj09dHlwZW9mIE19ZnVuY3Rp'@;
put 'b24gbmUoTSl7cmV0dXJuIG51bGw9PT1NfWZ1bmN0aW9uIGllKE0pe3JldHVybiJudW1iZXIiPT10eXBlb2YgTX1mdW5jdGlvbiBsZShNKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIE19ZnVuY3Rpb24gZGUoTSl7cmV0dXJuIHZvaWQgMD09PU19ZnVuY3Rpb24gdWUoTSl7cmV0dXJuIGNlKE0p'@;
put 'JiYiW29iamVjdCBSZWdFeHBdIj09PU4oTSl9ZnVuY3Rpb24gY2UoTSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBNJiZudWxsIT09TX1mdW5jdGlvbiBZKE0pe3JldHVybiBjZShNKSYmIltvYmplY3QgRGF0ZV0iPT09TihNKX1mdW5jdGlvbiBiKE0pe3JldHVybiBjZShNKSYmKCJbb2JqZWN0'@;
put 'IEVycm9yXSI9PT1OKE0pfHxNIGluc3RhbmNlb2YgRXJyb3IpfWZ1bmN0aW9uIHgoTSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIE19ZnVuY3Rpb24gTihNKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKE0pfWZ1bmN0aW9uIEYoTSl7cmV0dXJuIE08MTA/IjAiK00u'@;
put 'dG9TdHJpbmcoMTApOk0udG9TdHJpbmcoMTApfUIuZGVidWdsb2c9ZnVuY3Rpb24oTSl7aWYoZGUoUikmJihSPUsuZW52Lk5PREVfREVCVUd8fCIiKSxNPU0udG9VcHBlckNhc2UoKSwhRVtNXSlpZihuZXcgUmVnRXhwKCJcXGIiK00rIlxcYiIsImkiKS50ZXN0KFIpKXt2YXIgeT1LLnBpZDtF'@;
put 'W01dPWZ1bmN0aW9uKCl7dmFyIHA9Qi5mb3JtYXQuYXBwbHkoQixhcmd1bWVudHMpO0ouZXJyb3IoIiVzICVkOiAlcyIsTSx5LHApfX1lbHNlIEVbTV09ZnVuY3Rpb24oKXt9O3JldHVybiBFW01dfSxCLmluc3BlY3Q9eix6LmNvbG9ycz17Ym9sZDpbMSwyMl0saXRhbGljOlszLDIzXSx1bmRl'@;
put 'cmxpbmU6WzQsMjRdLGludmVyc2U6WzcsMjddLHdoaXRlOlszNywzOV0sZ3JleTpbOTAsMzldLGJsYWNrOlszMCwzOV0sYmx1ZTpbMzQsMzldLGN5YW46WzM2LDM5XSxncmVlbjpbMzIsMzldLG1hZ2VudGE6WzM1LDM5XSxyZWQ6WzMxLDM5XSx5ZWxsb3c6WzMzLDM5XX0sei5zdHlsZXM9e3Nw'@;
put 'ZWNpYWw6ImN5YW4iLG51bWJlcjoieWVsbG93Iixib29sZWFuOiJ5ZWxsb3ciLHVuZGVmaW5lZDoiZ3JleSIsbnVsbDoiYm9sZCIsc3RyaW5nOiJncmVlbiIsZGF0ZToibWFnZW50YSIscmVnZXhwOiJyZWQifSxCLmlzQXJyYXk9cSxCLmlzQm9vbGVhbj10ZSxCLmlzTnVsbD1uZSxCLmlzTnVs'@;
put 'bE9yVW5kZWZpbmVkPWZ1bmN0aW9uKE0pe3JldHVybiBudWxsPT1NfSxCLmlzTnVtYmVyPWllLEIuaXNTdHJpbmc9bGUsQi5pc1N5bWJvbD1mdW5jdGlvbihNKXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIE19LEIuaXNVbmRlZmluZWQ9ZGUsQi5pc1JlZ0V4cD11ZSxCLmlzT2JqZWN0PWNlLEIu'@;
put 'aXNEYXRlPVksQi5pc0Vycm9yPWIsQi5pc0Z1bmN0aW9uPXgsQi5pc1ByaW1pdGl2ZT1mdW5jdGlvbihNKXtyZXR1cm4gbnVsbD09PU18fCJib29sZWFuIj09dHlwZW9mIE18fCJudW1iZXIiPT10eXBlb2YgTXx8InN0cmluZyI9PXR5cGVvZiBNfHwic3ltYm9sIj09dHlwZW9mIE18fHZvaWQg'@;
put 'MD09PU19LEIuaXNCdWZmZXI9TCgyOTc0KTt2YXIgZz1bIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdO2Z1bmN0aW9uIEMoTSx5KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxs'@;
put 'KE0seSl9Qi5sb2c9ZnVuY3Rpb24oKXt2YXIgTSx5O0oubG9nKCIlcyAtICVzIiwoeT1bRigoTT1uZXcgRGF0ZSkuZ2V0SG91cnMoKSksRihNLmdldE1pbnV0ZXMoKSksRihNLmdldFNlY29uZHMoKSldLmpvaW4oIjoiKSxbTS5nZXREYXRlKCksZ1tNLmdldE1vbnRoKCldLHldLmpvaW4oIiAi'@;
put 'KSksQi5mb3JtYXQuYXBwbHkoQixhcmd1bWVudHMpKX0sQi5pbmhlcml0cz1MKDE3MjUpLEIuX2V4dGVuZD1mdW5jdGlvbihNLHkpe2lmKCF5fHwhY2UoeSkpcmV0dXJuIE07Zm9yKHZhciBwPU9iamVjdC5rZXlzKHkpLFM9cC5sZW5ndGg7Uy0tOylNW3BbU11dPXlbcFtTXV07cmV0dXJuIE19'@;
put 'fSwyNTIwOihILEIsTCk9PnsidXNlIHN0cmljdCI7dmFyIEs9TCg0MTU1KSxKPSJ3aW4zMiI9PT1LLnBsYXRmb3JtLEk9TCg4MDU5KTtmdW5jdGlvbiBSKGllLGxlKXtmb3IodmFyIGRlPVtdLHVlPTA7dWU8aWUubGVuZ3RoO3VlKyspe3ZhciBjZT1pZVt1ZV07Y2UmJiIuIiE9PWNlJiYoIi4u'@;
put 'Ij09PWNlP2RlLmxlbmd0aCYmIi4uIiE9PWRlW2RlLmxlbmd0aC0xXT9kZS5wb3AoKTpsZSYmZGUucHVzaCgiLi4iKTpkZS5wdXNoKGNlKSl9cmV0dXJuIGRlfWZ1bmN0aW9uIEUoaWUpe2Zvcih2YXIgbGU9aWUubGVuZ3RoLTEsZGU9MDtkZTw9bGUmJiFpZVtkZV07ZGUrKyk7Zm9yKHZhciB1'@;
put 'ZT1sZTt1ZT49MCYmIWllW3VlXTt1ZS0tKTtyZXR1cm4gMD09PWRlJiZ1ZT09PWxlP2llOmRlPnVlP1tdOmllLnNsaWNlKGRlLHVlKzEpfXZhciB6PS9eKFthLXpBLVpdOnxbXFxcL117Mn1bXlxcXC9dK1tcXFwvXStbXlxcXC9dKyk/KFtcXFwvXSk/KFtcc1xTXSo/KSQvLGo9L14oW1xzXFNd'@;
put 'Kj8pKCg/OlwuezEsMn18W15cXFwvXSs/fCkoXC5bXi5cL1xcXSp8KSkoPzpbXFxcL10qKSQvLFY9e307ZnVuY3Rpb24gRyhpZSl7dmFyIGxlPXouZXhlYyhpZSksZGU9KGxlWzFdfHwiIikrKGxlWzJdfHwiIiksY2U9ai5leGVjKGxlWzNdfHwiIik7cmV0dXJuW2RlLGNlWzFdLGNlWzJdLGNl'@;
put 'WzNdXX1mdW5jdGlvbiBXKGllKXt2YXIgbGU9ei5leGVjKGllKSxkZT1sZVsxXXx8IiIsdWU9ISFkZSYmIjoiIT09ZGVbMV07cmV0dXJue2RldmljZTpkZSxpc1VuYzp1ZSxpc0Fic29sdXRlOnVlfHwhIWxlWzJdLHRhaWw6bGVbM119fWZ1bmN0aW9uIFUoaWUpe3JldHVybiJcXFxcIitpZS5y'@;
put 'ZXBsYWNlKC9eW1xcXC9dKy8sIiIpLnJlcGxhY2UoL1tcXFwvXSsvZywiXFwiKX1WLnJlc29sdmU9ZnVuY3Rpb24oKXtmb3IodmFyIGllPSIiLGxlPSIiLGRlPSExLHVlPWFyZ3VtZW50cy5sZW5ndGgtMTt1ZT49LTE7dWUtLSl7dmFyIGNlO2lmKHVlPj0wP2NlPWFyZ3VtZW50c1t1ZV06aWU/'@;
put 'KGNlPUsuZW52WyI9IitpZV0pJiZjZS5zdWJzdHIoMCwzKS50b0xvd2VyQ2FzZSgpPT09aWUudG9Mb3dlckNhc2UoKSsiXFwifHwoY2U9aWUrIlxcIik6Y2U9Sy5jd2QoKSwhSS5pc1N0cmluZyhjZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRvIHBhdGgucmVzb2x2ZSBtdXN0'@;
put 'IGJlIHN0cmluZ3MiKTtpZihjZSl7dmFyIFk9VyhjZSksYj1ZLmRldmljZSx4PVkuaXNVbmMsTj1ZLmlzQWJzb2x1dGUsRj1ZLnRhaWw7aWYoKCFifHwhaWV8fGIudG9Mb3dlckNhc2UoKT09PWllLnRvTG93ZXJDYXNlKCkpJiYoaWV8fChpZT1iKSxkZXx8KGxlPUYrIlxcIitsZSxkZT1OKSxp'@;
put 'ZSYmZGUpKWJyZWFrfX1yZXR1cm4geCYmKGllPVUoaWUpKSxpZSsoZGU/IlxcIjoiIikrKGxlPVIobGUuc3BsaXQoL1tcXFwvXSsvKSwhZGUpLmpvaW4oIlxcIikpfHwiLiJ9LFYubm9ybWFsaXplPWZ1bmN0aW9uKGllKXt2YXIgbGU9VyhpZSksZGU9bGUuZGV2aWNlLHVlPWxlLmlzVW5jLGNl'@;
put 'PWxlLmlzQWJzb2x1dGUsWT1sZS50YWlsLGI9L1tcXFwvXSQvLnRlc3QoWSk7cmV0dXJuKFk9UihZLnNwbGl0KC9bXFxcL10rLyksIWNlKS5qb2luKCJcXCIpKXx8Y2V8fChZPSIuIiksWSYmYiYmKFkrPSJcXCIpLHVlJiYoZGU9VShkZSkpLGRlKyhjZT8iXFwiOiIiKStZfSxWLmlzQWJzb2x1'@;
put 'dGU9ZnVuY3Rpb24oaWUpe3JldHVybiBXKGllKS5pc0Fic29sdXRlfSxWLmpvaW49ZnVuY3Rpb24oKXtmb3IodmFyIGllPVtdLGxlPTA7bGU8YXJndW1lbnRzLmxlbmd0aDtsZSsrKXt2YXIgZGU9YXJndW1lbnRzW2xlXTtpZighSS5pc1N0cmluZyhkZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigi'@;
put 'QXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MiKTtkZSYmaWUucHVzaChkZSl9dmFyIHVlPWllLmpvaW4oIlxcIik7cmV0dXJuL15bXFxcL117Mn1bXlxcXC9dLy50ZXN0KGllWzBdKXx8KHVlPXVlLnJlcGxhY2UoL15bXFxcL117Mix9LywiXFwiKSksVi5ub3JtYWxpemUo'@;
put 'dWUpfSxWLnJlbGF0aXZlPWZ1bmN0aW9uKGllLGxlKXtpZT1WLnJlc29sdmUoaWUpLGxlPVYucmVzb2x2ZShsZSk7Zm9yKHZhciBkZT1pZS50b0xvd2VyQ2FzZSgpLHVlPWxlLnRvTG93ZXJDYXNlKCksY2U9RShsZS5zcGxpdCgiXFwiKSksWT1FKGRlLnNwbGl0KCJcXCIpKSxiPUUodWUuc3Bs'@;
put 'aXQoIlxcIikpLHg9TWF0aC5taW4oWS5sZW5ndGgsYi5sZW5ndGgpLE49eCxGPTA7Rjx4O0YrKylpZihZW0ZdIT09YltGXSl7Tj1GO2JyZWFrfWlmKDA9PU4pcmV0dXJuIGxlO3ZhciBnPVtdO2ZvcihGPU47RjxZLmxlbmd0aDtGKyspZy5wdXNoKCIuLiIpO3JldHVybihnPWcuY29uY2F0KGNl'@;
put 'LnNsaWNlKE4pKSkuam9pbigiXFwiKX0sVi5fbWFrZUxvbmc9ZnVuY3Rpb24oaWUpe2lmKCFJLmlzU3RyaW5nKGllKSlyZXR1cm4gaWU7aWYoIWllKXJldHVybiIiO3ZhciBsZT1WLnJlc29sdmUoaWUpO3JldHVybi9eW2EtekEtWl1cOlxcLy50ZXN0KGxlKT8iXFxcXD9cXCIrbGU6L15cXFxc'@;
put 'W14/Ll0vLnRlc3QobGUpPyJcXFxcP1xcVU5DXFwiK2xlLnN1YnN0cmluZygyKTppZX0sVi5kaXJuYW1lPWZ1bmN0aW9uKGllKXt2YXIgbGU9RyhpZSksZGU9bGVbMF0sdWU9bGVbMV07cmV0dXJuIGRlfHx1ZT8odWUmJih1ZT11ZS5zdWJzdHIoMCx1ZS5sZW5ndGgtMSkpLGRlK3VlKToiLiJ9'@;
put 'LFYuYmFzZW5hbWU9ZnVuY3Rpb24oaWUsbGUpe3ZhciBkZT1HKGllKVsyXTtyZXR1cm4gbGUmJmRlLnN1YnN0cigtMSpsZS5sZW5ndGgpPT09bGUmJihkZT1kZS5zdWJzdHIoMCxkZS5sZW5ndGgtbGUubGVuZ3RoKSksZGV9LFYuZXh0bmFtZT1mdW5jdGlvbihpZSl7cmV0dXJuIEcoaWUpWzNd'@;
put 'fSxWLmZvcm1hdD1mdW5jdGlvbihpZSl7aWYoIUkuaXNPYmplY3QoaWUpKXRocm93IG5ldyBUeXBlRXJyb3IoIlBhcmFtZXRlciAncGF0aE9iamVjdCcgbXVzdCBiZSBhbiBvYmplY3QsIG5vdCAiK3R5cGVvZiBpZSk7aWYoIUkuaXNTdHJpbmcoaWUucm9vdHx8IiIpKXRocm93IG5ldyBUeXBl'@;
put 'RXJyb3IoIidwYXRoT2JqZWN0LnJvb3QnIG11c3QgYmUgYSBzdHJpbmcgb3IgdW5kZWZpbmVkLCBub3QgIit0eXBlb2YgaWUucm9vdCk7dmFyIGRlPWllLmRpcix1ZT1pZS5iYXNlfHwiIjtyZXR1cm4gZGU/ZGVbZGUubGVuZ3RoLTFdPT09Vi5zZXA/ZGUrdWU6ZGUrVi5zZXArdWU6dWV9LFYu'@;
put 'cGFyc2U9ZnVuY3Rpb24oaWUpe2lmKCFJLmlzU3RyaW5nKGllKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQYXJhbWV0ZXIgJ3BhdGhTdHJpbmcnIG11c3QgYmUgYSBzdHJpbmcsIG5vdCAiK3R5cGVvZiBpZSk7dmFyIGxlPUcoaWUpO2lmKCFsZXx8NCE9PWxlLmxlbmd0aCl0aHJvdyBuZXcgVHlw'@;
put 'ZUVycm9yKCJJbnZhbGlkIHBhdGggJyIraWUrIiciKTtyZXR1cm57cm9vdDpsZVswXSxkaXI6bGVbMF0rbGVbMV0uc2xpY2UoMCwtMSksYmFzZTpsZVsyXSxleHQ6bGVbM10sbmFtZTpsZVsyXS5zbGljZSgwLGxlWzJdLmxlbmd0aC1sZVszXS5sZW5ndGgpfX0sVi5zZXA9IlxcIixWLmRlbGlt'@;
put 'aXRlcj0iOyI7dmFyIHE9L14oXC8/fCkoW1xzXFNdKj8pKCg/OlwuezEsMn18W15cL10rP3wpKFwuW14uXC9dKnwpKSg/OltcL10qKSQvLHRlPXt9O2Z1bmN0aW9uIG5lKGllKXtyZXR1cm4gcS5leGVjKGllKS5zbGljZSgxKX10ZS5yZXNvbHZlPWZ1bmN0aW9uKCl7Zm9yKHZhciBpZT0iIixs'@;
put 'ZT0hMSxkZT1hcmd1bWVudHMubGVuZ3RoLTE7ZGU+PS0xJiYhbGU7ZGUtLSl7dmFyIHVlPWRlPj0wP2FyZ3VtZW50c1tkZV06Sy5jd2QoKTtpZighSS5pc1N0cmluZyh1ZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRvIHBhdGgucmVzb2x2ZSBtdXN0IGJlIHN0cmluZ3MiKTt1'@;
put 'ZSYmKGllPXVlKyIvIitpZSxsZT0iLyI9PT11ZVswXSl9cmV0dXJuKGxlPyIvIjoiIikrKGllPVIoaWUuc3BsaXQoIi8iKSwhbGUpLmpvaW4oIi8iKSl8fCIuIn0sdGUubm9ybWFsaXplPWZ1bmN0aW9uKGllKXt2YXIgbGU9dGUuaXNBYnNvbHV0ZShpZSksZGU9aWUmJiIvIj09PWllW2llLmxl'@;
put 'bmd0aC0xXTtyZXR1cm4oaWU9UihpZS5zcGxpdCgiLyIpLCFsZSkuam9pbigiLyIpKXx8bGV8fChpZT0iLiIpLGllJiZkZSYmKGllKz0iLyIpLChsZT8iLyI6IiIpK2llfSx0ZS5pc0Fic29sdXRlPWZ1bmN0aW9uKGllKXtyZXR1cm4iLyI9PT1pZS5jaGFyQXQoMCl9LHRlLmpvaW49ZnVuY3Rp'@;
put 'b24oKXtmb3IodmFyIGllPSIiLGxlPTA7bGU8YXJndW1lbnRzLmxlbmd0aDtsZSsrKXt2YXIgZGU9YXJndW1lbnRzW2xlXTtpZighSS5pc1N0cmluZyhkZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MiKTtkZSYmKGllKz1pZT8i'@;
put 'LyIrZGU6ZGUpfXJldHVybiB0ZS5ub3JtYWxpemUoaWUpfSx0ZS5yZWxhdGl2ZT1mdW5jdGlvbihpZSxsZSl7aWU9dGUucmVzb2x2ZShpZSkuc3Vic3RyKDEpLGxlPXRlLnJlc29sdmUobGUpLnN1YnN0cigxKTtmb3IodmFyIGRlPUUoaWUuc3BsaXQoIi8iKSksdWU9RShsZS5zcGxpdCgiLyIp'@;
put 'KSxjZT1NYXRoLm1pbihkZS5sZW5ndGgsdWUubGVuZ3RoKSxZPWNlLGI9MDtiPGNlO2IrKylpZihkZVtiXSE9PXVlW2JdKXtZPWI7YnJlYWt9dmFyIHg9W107Zm9yKGI9WTtiPGRlLmxlbmd0aDtiKyspeC5wdXNoKCIuLiIpO3JldHVybih4PXguY29uY2F0KHVlLnNsaWNlKFkpKSkuam9pbigi'@;
put 'LyIpfSx0ZS5fbWFrZUxvbmc9ZnVuY3Rpb24oaWUpe3JldHVybiBpZX0sdGUuZGlybmFtZT1mdW5jdGlvbihpZSl7dmFyIGxlPW5lKGllKSxkZT1sZVswXSx1ZT1sZVsxXTtyZXR1cm4gZGV8fHVlPyh1ZSYmKHVlPXVlLnN1YnN0cigwLHVlLmxlbmd0aC0xKSksZGUrdWUpOiIuIn0sdGUuYmFz'@;
put 'ZW5hbWU9ZnVuY3Rpb24oaWUsbGUpe3ZhciBkZT1uZShpZSlbMl07cmV0dXJuIGxlJiZkZS5zdWJzdHIoLTEqbGUubGVuZ3RoKT09PWxlJiYoZGU9ZGUuc3Vic3RyKDAsZGUubGVuZ3RoLWxlLmxlbmd0aCkpLGRlfSx0ZS5leHRuYW1lPWZ1bmN0aW9uKGllKXtyZXR1cm4gbmUoaWUpWzNdfSx0'@;
put 'ZS5mb3JtYXQ9ZnVuY3Rpb24oaWUpe2lmKCFJLmlzT2JqZWN0KGllKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQYXJhbWV0ZXIgJ3BhdGhPYmplY3QnIG11c3QgYmUgYW4gb2JqZWN0LCBub3QgIit0eXBlb2YgaWUpO2lmKCFJLmlzU3RyaW5nKGllLnJvb3R8fCIiKSl0aHJvdyBuZXcgVHlwZUVy'@;
put 'cm9yKCIncGF0aE9iamVjdC5yb290JyBtdXN0IGJlIGEgc3RyaW5nIG9yIHVuZGVmaW5lZCwgbm90ICIrdHlwZW9mIGllLnJvb3QpO3JldHVybihpZS5kaXI/aWUuZGlyK3RlLnNlcDoiIikrKGllLmJhc2V8fCIiKX0sdGUucGFyc2U9ZnVuY3Rpb24oaWUpe2lmKCFJLmlzU3RyaW5nKGllKSl0'@;
put 'aHJvdyBuZXcgVHlwZUVycm9yKCJQYXJhbWV0ZXIgJ3BhdGhTdHJpbmcnIG11c3QgYmUgYSBzdHJpbmcsIG5vdCAiK3R5cGVvZiBpZSk7dmFyIGxlPW5lKGllKTtpZighbGV8fDQhPT1sZS5sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBwYXRoICciK2llKyInIik7cmV0dXJu'@;
put 'IGxlWzFdPWxlWzFdfHwiIixsZVsyXT1sZVsyXXx8IiIsbGVbM109bGVbM118fCIiLHtyb290OmxlWzBdLGRpcjpsZVswXStsZVsxXS5zbGljZSgwLC0xKSxiYXNlOmxlWzJdLGV4dDpsZVszXSxuYW1lOmxlWzJdLnNsaWNlKDAsbGVbMl0ubGVuZ3RoLWxlWzNdLmxlbmd0aCl9fSx0ZS5zZXA9'@;
put 'Ii8iLHRlLmRlbGltaXRlcj0iOiIsSC5leHBvcnRzPUo/Vjp0ZSxILmV4cG9ydHMucG9zaXg9dGUsSC5leHBvcnRzLndpbjMyPVZ9LDU2MzI6KEgsQixMKT0+e0IucGJrZGYyPUwoODYzOCksQi5wYmtkZjJTeW5jPUwoMTI1Nyl9LDg2Mzg6KEgsQixMKT0+e3ZhciBLLEosST1MKDk1MDkpLkJ1'@;
put 'ZmZlcixSPUwoNzM1NyksRT1MKDIzNjgpLHo9TCgxMjU3KSxqPUwoNzc3NyksVj1MLmcuY3J5cHRvJiZMLmcuY3J5cHRvLnN1YnRsZSxHPXtzaGE6IlNIQS0xIiwic2hhLTEiOiJTSEEtMSIsc2hhMToiU0hBLTEiLHNoYTI1NjoiU0hBLTI1NiIsInNoYS0yNTYiOiJTSEEtMjU2IixzaGEzODQ6'@;
put 'IlNIQS0zODQiLCJzaGEtMzg0IjoiU0hBLTM4NCIsInNoYS01MTIiOiJTSEEtNTEyIixzaGE1MTI6IlNIQS01MTIifSxXPVtdO2Z1bmN0aW9uIFUoKXtyZXR1cm4gSnx8KEo9TC5nLnByb2Nlc3MmJkwuZy5wcm9jZXNzLm5leHRUaWNrP0wuZy5wcm9jZXNzLm5leHRUaWNrOkwuZy5xdWV1ZU1p'@;
put 'Y3JvdGFzaz9MLmcucXVldWVNaWNyb3Rhc2s6TC5nLnNldEltbWVkaWF0ZT9MLmcuc2V0SW1tZWRpYXRlOkwuZy5zZXRUaW1lb3V0KX1mdW5jdGlvbiBxKHRlLG5lLGllLGxlLGRlKXtyZXR1cm4gVi5pbXBvcnRLZXkoInJhdyIsdGUse25hbWU6IlBCS0RGMiJ9LCExLFsiZGVyaXZlQml0cyJd'@;
put 'KS50aGVuKGZ1bmN0aW9uKHVlKXtyZXR1cm4gVi5kZXJpdmVCaXRzKHtuYW1lOiJQQktERjIiLHNhbHQ6bmUsaXRlcmF0aW9uczppZSxoYXNoOntuYW1lOmRlfX0sdWUsbGU8PDMpfSkudGhlbihmdW5jdGlvbih1ZSl7cmV0dXJuIEkuZnJvbSh1ZSl9KX1ILmV4cG9ydHM9ZnVuY3Rpb24odGUs'@;
put 'bmUsaWUsbGUsZGUsdWUpeyJmdW5jdGlvbiI9PXR5cGVvZiBkZSYmKHVlPWRlLGRlPXZvaWQgMCk7dmFyIFksYixjZT1HWyhkZT1kZXx8InNoYTEiKS50b0xvd2VyQ2FzZSgpXTtpZihjZSYmImZ1bmN0aW9uIj09dHlwZW9mIEwuZy5Qcm9taXNlKXtpZihSKGllLGxlKSx0ZT1qKHRlLEUsIlBh'@;
put 'c3N3b3JkIiksbmU9aihuZSxFLCJTYWx0IiksImZ1bmN0aW9uIiE9dHlwZW9mIHVlKXRocm93IG5ldyBFcnJvcigiTm8gY2FsbGJhY2sgcHJvdmlkZWQgdG8gcGJrZGYyIik7WT1mdW5jdGlvbihZKXtpZihMLmcucHJvY2VzcyYmIUwuZy5wcm9jZXNzLmJyb3dzZXJ8fCFWfHwhVi5pbXBvcnRL'@;
put 'ZXl8fCFWLmRlcml2ZUJpdHMpcmV0dXJuIFByb21pc2UucmVzb2x2ZSghMSk7aWYodm9pZCAwIT09V1tZXSlyZXR1cm4gV1tZXTt2YXIgYj1xKEs9S3x8SS5hbGxvYyg4KSxLLDEwLDEyOCxZKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuITB9KS5jYXRjaChmdW5jdGlvbigpe3JldHVybiExfSk7'@;
put 'cmV0dXJuIFdbWV09YixifShjZSkudGhlbihmdW5jdGlvbihZKXtyZXR1cm4gWT9xKHRlLG5lLGllLGxlLGNlKTp6KHRlLG5lLGllLGxlLGRlKX0pLGI9dWUsWS50aGVuKGZ1bmN0aW9uKHgpe1UoKShmdW5jdGlvbigpe2IobnVsbCx4KX0pfSxmdW5jdGlvbih4KXtVKCkoZnVuY3Rpb24oKXti'@;
put 'KHgpfSl9KX1lbHNlIFUoKShmdW5jdGlvbigpe3ZhciBZO3RyeXtZPXoodGUsbmUsaWUsbGUsZGUpfWNhdGNoKGIpe3JldHVybiB1ZShiKX11ZShudWxsLFkpfSl9fSwyMzY4OihILEIsTCk9Pnt2YXIgSyxKPUwoNDE1NSk7Sz1MLmcucHJvY2VzcyYmTC5nLnByb2Nlc3MuYnJvd3Nlcj8idXRm'@;
put 'LTgiOkwuZy5wcm9jZXNzJiZMLmcucHJvY2Vzcy52ZXJzaW9uP3BhcnNlSW50KEoudmVyc2lvbi5zcGxpdCgiLiIpWzBdLnNsaWNlKDEpLDEwKT49Nj8idXRmLTgiOiJiaW5hcnkiOiJ1dGYtOCIsSC5leHBvcnRzPUt9LDczNTc6SD0+e3ZhciBCPU1hdGgucG93KDIsMzApLTE7SC5leHBvcnRz'@;
put 'PWZ1bmN0aW9uKEwsSyl7aWYoIm51bWJlciIhPXR5cGVvZiBMKXRocm93IG5ldyBUeXBlRXJyb3IoIkl0ZXJhdGlvbnMgbm90IGEgbnVtYmVyIik7aWYoTDwwKXRocm93IG5ldyBUeXBlRXJyb3IoIkJhZCBpdGVyYXRpb25zIik7aWYoIm51bWJlciIhPXR5cGVvZiBLKXRocm93IG5ldyBUeXBl'@;
put 'RXJyb3IoIktleSBsZW5ndGggbm90IGEgbnVtYmVyIik7aWYoSzwwfHxLPkJ8fEshPUspdGhyb3cgbmV3IFR5cGVFcnJvcigiQmFkIGtleSBsZW5ndGgiKX19LDEyNTc6KEgsQixMKT0+e3ZhciBLPUwoODAyOCksSj1MKDk3ODUpLEk9TCg5MDcyKSxSPUwoOTUwOSkuQnVmZmVyLEU9TCg3MzU3'@;
put 'KSx6PUwoMjM2OCksaj1MKDc3NzcpLFY9Ui5hbGxvYygxMjgpLEc9e21kNToxNixzaGExOjIwLHNoYTIyNDoyOCxzaGEyNTY6MzIsc2hhMzg0OjQ4LHNoYTUxMjo2NCxybWQxNjA6MjAscmlwZW1kMTYwOjIwfTtmdW5jdGlvbiBXKFUscSx0ZSl7dmFyIFksbmU9InJtZDE2MCI9PT0oWT1VKXx8'@;
put 'InJpcGVtZDE2MCI9PT1ZP2Z1bmN0aW9uIHgoTil7cmV0dXJuKG5ldyBKKS51cGRhdGUoTikuZGlnZXN0KCl9OiJtZDUiPT09WT9LOmZ1bmN0aW9uIGIoTil7cmV0dXJuIEkoWSkudXBkYXRlKE4pLmRpZ2VzdCgpfSxpZT0ic2hhNTEyIj09PVV8fCJzaGEzODQiPT09VT8xMjg6NjQ7cS5sZW5n'@;
put 'dGg+aWU/cT1uZShxKTpxLmxlbmd0aDxpZSYmKHE9Ui5jb25jYXQoW3EsVl0saWUpKTtmb3IodmFyIGxlPVIuYWxsb2NVbnNhZmUoaWUrR1tVXSksZGU9Ui5hbGxvY1Vuc2FmZShpZStHW1VdKSx1ZT0wO3VlPGllO3VlKyspbGVbdWVdPTU0XnFbdWVdLGRlW3VlXT05Ml5xW3VlXTt2YXIgY2U9'@;
put 'Ui5hbGxvY1Vuc2FmZShpZSt0ZSs0KTtsZS5jb3B5KGNlLDAsMCxpZSksdGhpcy5pcGFkMT1jZSx0aGlzLmlwYWQyPWxlLHRoaXMub3BhZD1kZSx0aGlzLmFsZz1VLHRoaXMuYmxvY2tzaXplPWllLHRoaXMuaGFzaD1uZSx0aGlzLnNpemU9R1tVXX1XLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24o'@;
put 'VSxxKXtyZXR1cm4gVS5jb3B5KHEsdGhpcy5ibG9ja3NpemUpLHRoaXMuaGFzaChxKS5jb3B5KHRoaXMub3BhZCx0aGlzLmJsb2Nrc2l6ZSksdGhpcy5oYXNoKHRoaXMub3BhZCl9LEguZXhwb3J0cz1mdW5jdGlvbihVLHEsdGUsbmUsaWUpe0UodGUsbmUpO3ZhciBsZT1uZXcgVyhpZT1pZXx8'@;
put 'InNoYTEiLFU9aihVLHosIlBhc3N3b3JkIiksKHE9aihxLHosIlNhbHQiKSkubGVuZ3RoKSxkZT1SLmFsbG9jVW5zYWZlKG5lKSx1ZT1SLmFsbG9jVW5zYWZlKHEubGVuZ3RoKzQpO3EuY29weSh1ZSwwLDAscS5sZW5ndGgpO2Zvcih2YXIgY2U9MCxZPUdbaWVdLGI9TWF0aC5jZWlsKG5lL1kp'@;
put 'LHg9MTt4PD1iO3grKyl7dWUud3JpdGVVSW50MzJCRSh4LHEubGVuZ3RoKTtmb3IodmFyIE49bGUucnVuKHVlLGxlLmlwYWQxKSxGPU4sZz0xO2c8dGU7ZysrKXtGPWxlLnJ1bihGLGxlLmlwYWQyKTtmb3IodmFyIEM9MDtDPFk7QysrKU5bQ11ePUZbQ119Ti5jb3B5KGRlLGNlKSxjZSs9WX1y'@;
put 'ZXR1cm4gZGV9fSw3Nzc3OihILEIsTCk9Pnt2YXIgSz1MKDk1MDkpLkJ1ZmZlcjtILmV4cG9ydHM9ZnVuY3Rpb24oSixJLFIpe2lmKEsuaXNCdWZmZXIoSikpcmV0dXJuIEo7aWYoInN0cmluZyI9PXR5cGVvZiBKKXJldHVybiBLLmZyb20oSixJKTtpZihBcnJheUJ1ZmZlci5pc1ZpZXcoSikp'@;
put 'cmV0dXJuIEsuZnJvbShKLmJ1ZmZlcik7dGhyb3cgbmV3IFR5cGVFcnJvcihSKyIgbXVzdCBiZSBhIHN0cmluZywgYSBCdWZmZXIsIGEgdHlwZWQgYXJyYXkgb3IgYSBEYXRhVmlldyIpfX0sNDE1NTpIPT57dmFyIEIsTCxLPUguZXhwb3J0cz17fTtmdW5jdGlvbiBKKCl7dGhyb3cgbmV3IEVy'@;
put 'cm9yKCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gSSgpe3Rocm93IG5ldyBFcnJvcigiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gUih0ZSl7aWYoQj09PXNldFRpbWVvdXQpcmV0dXJuIHNldFRpbWVvdXQodGUsMCk7aWYo'@;
put 'KEI9PT1KfHwhQikmJnNldFRpbWVvdXQpcmV0dXJuIEI9c2V0VGltZW91dCxzZXRUaW1lb3V0KHRlLDApO3RyeXtyZXR1cm4gQih0ZSwwKX1jYXRjaHt0cnl7cmV0dXJuIEIuY2FsbChudWxsLHRlLDApfWNhdGNoe3JldHVybiBCLmNhbGwodGhpcyx0ZSwwKX19fSFmdW5jdGlvbigpe3RyeXtC'@;
put 'PSJmdW5jdGlvbiI9PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6Sn1jYXRjaHtCPUp9dHJ5e0w9ImZ1bmN0aW9uIj09dHlwZW9mIGNsZWFyVGltZW91dD9jbGVhclRpbWVvdXQ6SX1jYXRjaHtMPUl9fSgpO3ZhciBFLHo9W10saj0hMSxWPS0xO2Z1bmN0aW9uIEcoKXtqJiZFJiYoaj0h'@;
put 'MSxFLmxlbmd0aD96PUUuY29uY2F0KHopOlY9LTEsei5sZW5ndGgmJlcoKSl9ZnVuY3Rpb24gVygpe2lmKCFqKXt2YXIgdGU9UihHKTtqPSEwO2Zvcih2YXIgbmU9ei5sZW5ndGg7bmU7KXtmb3IoRT16LHo9W107KytWPG5lOylFJiZFW1ZdLnJ1bigpO1Y9LTEsbmU9ei5sZW5ndGh9RT1udWxs'@;
put 'LGo9ITEsZnVuY3Rpb24oaWUpe2lmKEw9PT1jbGVhclRpbWVvdXQpcmV0dXJuIGNsZWFyVGltZW91dChpZSk7aWYoKEw9PT1JfHwhTCkmJmNsZWFyVGltZW91dClyZXR1cm4gTD1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KGllKTt0cnl7cmV0dXJuIEwoaWUpfWNhdGNoe3RyeXtyZXR1cm4g'@;
put 'TC5jYWxsKG51bGwsaWUpfWNhdGNoe3JldHVybiBMLmNhbGwodGhpcyxpZSl9fX0odGUpfX1mdW5jdGlvbiBVKHRlLG5lKXt0aGlzLmZ1bj10ZSx0aGlzLmFycmF5PW5lfWZ1bmN0aW9uIHEoKXt9Sy5uZXh0VGljaz1mdW5jdGlvbih0ZSl7dmFyIG5lPW5ldyBBcnJheShhcmd1bWVudHMubGVu'@;
put 'Z3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIGllPTE7aWU8YXJndW1lbnRzLmxlbmd0aDtpZSsrKW5lW2llLTFdPWFyZ3VtZW50c1tpZV07ei5wdXNoKG5ldyBVKHRlLG5lKSksMSE9PXoubGVuZ3RofHxqfHxSKFcpfSxVLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlz'@;
put 'LmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfSxLLnRpdGxlPSJicm93c2VyIixLLmJyb3dzZXI9ITAsSy5lbnY9e30sSy5hcmd2PVtdLEsudmVyc2lvbj0iIixLLnZlcnNpb25zPXt9LEsub249cSxLLmFkZExpc3RlbmVyPXEsSy5vbmNlPXEsSy5vZmY9cSxLLnJlbW92ZUxpc3RlbmVyPXEs'@;
put 'Sy5yZW1vdmVBbGxMaXN0ZW5lcnM9cSxLLmVtaXQ9cSxLLnByZXBlbmRMaXN0ZW5lcj1xLEsucHJlcGVuZE9uY2VMaXN0ZW5lcj1xLEsubGlzdGVuZXJzPWZ1bmN0aW9uKHRlKXtyZXR1cm5bXX0sSy5iaW5kaW5nPWZ1bmN0aW9uKHRlKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuYmluZGlu'@;
put 'ZyBpcyBub3Qgc3VwcG9ydGVkIil9LEsuY3dkPWZ1bmN0aW9uKCl7cmV0dXJuIi8ifSxLLmNoZGlyPWZ1bmN0aW9uKHRlKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIpfSxLLnVtYXNrPWZ1bmN0aW9uKCl7cmV0dXJuIDB9fSw2MjQ0OihILEIsTCk9'@;
put 'PnsidXNlIHN0cmljdCI7dmFyIEs9TCgzNjg5KSxKPXt9O0oucnVsZXM9TCgzNzA0KS5tYXAoZnVuY3Rpb24oSSl7cmV0dXJue3J1bGU6SSxzdWZmaXg6SS5yZXBsYWNlKC9eKFwqXC58XCEpLywiIikscHVueVN1ZmZpeDotMSx3aWxkY2FyZDoiKiI9PT1JLmNoYXJBdCgwKSxleGNlcHRpb246'@;
put 'IiEiPT09SS5jaGFyQXQoMCl9fSksSi5lbmRzV2l0aD1mdW5jdGlvbihJLFIpe3JldHVybi0xIT09SS5pbmRleE9mKFIsSS5sZW5ndGgtUi5sZW5ndGgpfSxKLmZpbmRSdWxlPWZ1bmN0aW9uKEkpe3ZhciBSPUsudG9BU0NJSShJKTtyZXR1cm4gSi5ydWxlcy5yZWR1Y2UoZnVuY3Rpb24oRSx6'@;
put 'KXtyZXR1cm4tMT09PXoucHVueVN1ZmZpeCYmKHoucHVueVN1ZmZpeD1LLnRvQVNDSUkoei5zdWZmaXgpKSxKLmVuZHNXaXRoKFIsIi4iK3oucHVueVN1ZmZpeCl8fFI9PT16LnB1bnlTdWZmaXg/ejpFfSxudWxsKX0sQi5lcnJvckNvZGVzPXtET01BSU5fVE9PX1NIT1JUOiJEb21haW4gbmFt'@;
put 'ZSB0b28gc2hvcnQuIixET01BSU5fVE9PX0xPTkc6IkRvbWFpbiBuYW1lIHRvbyBsb25nLiBJdCBzaG91bGQgYmUgbm8gbW9yZSB0aGFuIDI1NSBjaGFycy4iLExBQkVMX1NUQVJUU19XSVRIX0RBU0g6IkRvbWFpbiBuYW1lIGxhYmVsIGNhbiBub3Qgc3RhcnQgd2l0aCBhIGRhc2guIixMQUJF'@;
put 'TF9FTkRTX1dJVEhfREFTSDoiRG9tYWluIG5hbWUgbGFiZWwgY2FuIG5vdCBlbmQgd2l0aCBhIGRhc2guIixMQUJFTF9UT09fTE9ORzoiRG9tYWluIG5hbWUgbGFiZWwgc2hvdWxkIGJlIGF0IG1vc3QgNjMgY2hhcnMgbG9uZy4iLExBQkVMX1RPT19TSE9SVDoiRG9tYWluIG5hbWUgbGFiZWwg'@;
put 'c2hvdWxkIGJlIGF0IGxlYXN0IDEgY2hhcmFjdGVyIGxvbmcuIixMQUJFTF9JTlZBTElEX0NIQVJTOiJEb21haW4gbmFtZSBsYWJlbCBjYW4gb25seSBjb250YWluIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIG9yIGRhc2hlcy4ifSxKLnZhbGlkYXRlPWZ1bmN0aW9uKEkpe3ZhciBSPUsudG9B'@;
put 'U0NJSShJKTtpZihSLmxlbmd0aDwxKXJldHVybiJET01BSU5fVE9PX1NIT1JUIjtpZihSLmxlbmd0aD4yNTUpcmV0dXJuIkRPTUFJTl9UT09fTE9ORyI7Zm9yKHZhciBFLHo9Ui5zcGxpdCgiLiIpLGo9MDtqPHoubGVuZ3RoOysrail7aWYoIShFPXpbal0pLmxlbmd0aClyZXR1cm4iTEFCRUxf'@;
put 'VE9PX1NIT1JUIjtpZihFLmxlbmd0aD42MylyZXR1cm4iTEFCRUxfVE9PX0xPTkciO2lmKCItIj09PUUuY2hhckF0KDApKXJldHVybiJMQUJFTF9TVEFSVFNfV0lUSF9EQVNIIjtpZigiLSI9PT1FLmNoYXJBdChFLmxlbmd0aC0xKSlyZXR1cm4iTEFCRUxfRU5EU19XSVRIX0RBU0giO2lmKCEv'@;
put 'XlthLXowLTlcLV0rJC8udGVzdChFKSlyZXR1cm4iTEFCRUxfSU5WQUxJRF9DSEFSUyJ9fSxCLnBhcnNlPWZ1bmN0aW9uKEkpe2lmKCJzdHJpbmciIT10eXBlb2YgSSl0aHJvdyBuZXcgVHlwZUVycm9yKCJEb21haW4gbmFtZSBtdXN0IGJlIGEgc3RyaW5nLiIpO3ZhciBSPUkuc2xpY2UoMCku'@;
put 'dG9Mb3dlckNhc2UoKTsiLiI9PT1SLmNoYXJBdChSLmxlbmd0aC0xKSYmKFI9Ui5zbGljZSgwLFIubGVuZ3RoLTEpKTt2YXIgRT1KLnZhbGlkYXRlKFIpO2lmKEUpcmV0dXJue2lucHV0OkksZXJyb3I6e21lc3NhZ2U6Qi5lcnJvckNvZGVzW0VdLGNvZGU6RX19O3ZhciB6PXtpbnB1dDpJLHRs'@;
put 'ZDpudWxsLHNsZDpudWxsLGRvbWFpbjpudWxsLHN1YmRvbWFpbjpudWxsLGxpc3RlZDohMX0saj1SLnNwbGl0KCIuIik7aWYoImxvY2FsIj09PWpbai5sZW5ndGgtMV0pcmV0dXJuIHo7dmFyIFY9ZnVuY3Rpb24oKXtyZXR1cm4veG4tLS8udGVzdChSKSYmKHouZG9tYWluJiYoei5kb21haW49'@;
put 'Sy50b0FTQ0lJKHouZG9tYWluKSksei5zdWJkb21haW4mJih6LnN1YmRvbWFpbj1LLnRvQVNDSUkoei5zdWJkb21haW4pKSksen0sRz1KLmZpbmRSdWxlKFIpO2lmKCFHKXJldHVybiBqLmxlbmd0aDwyP3o6KHoudGxkPWoucG9wKCksei5zbGQ9ai5wb3AoKSx6LmRvbWFpbj1bei5zbGQsei50'@;
put 'bGRdLmpvaW4oIi4iKSxqLmxlbmd0aCYmKHouc3ViZG9tYWluPWoucG9wKCkpLFYoKSk7ei5saXN0ZWQ9ITA7dmFyIFc9Ry5zdWZmaXguc3BsaXQoIi4iKSxVPWouc2xpY2UoMCxqLmxlbmd0aC1XLmxlbmd0aCk7cmV0dXJuIEcuZXhjZXB0aW9uJiZVLnB1c2goVy5zaGlmdCgpKSx6LnRsZD1X'@;
put 'LmpvaW4oIi4iKSxVLmxlbmd0aD8oRy53aWxkY2FyZCYmKFcudW5zaGlmdChVLnBvcCgpKSx6LnRsZD1XLmpvaW4oIi4iKSksVS5sZW5ndGgmJih6LnNsZD1VLnBvcCgpLHouZG9tYWluPVt6LnNsZCx6LnRsZF0uam9pbigiLiIpLFUubGVuZ3RoJiYoei5zdWJkb21haW49VS5qb2luKCIuIikp'@;
put 'KSxWKCkpOlYoKX0sQi5nZXQ9ZnVuY3Rpb24oSSl7cmV0dXJuIEkmJkIucGFyc2UoSSkuZG9tYWlufHxudWxsfSxCLmlzVmFsaWQ9ZnVuY3Rpb24oSSl7dmFyIFI9Qi5wYXJzZShJKTtyZXR1cm4hKCFSLmRvbWFpbnx8IVIubGlzdGVkKX19LDc5MDA6KEgsQixMKT0+e0IucHVibGljRW5jcnlw'@;
put 'dD1MKDY1NTkpLEIucHJpdmF0ZURlY3J5cHQ9TCg2MTM4KSxCLnByaXZhdGVFbmNyeXB0PWZ1bmN0aW9uKEssSil7cmV0dXJuIEIucHVibGljRW5jcnlwdChLLEosITApfSxCLnB1YmxpY0RlY3J5cHQ9ZnVuY3Rpb24oSyxKKXtyZXR1cm4gQi5wcml2YXRlRGVjcnlwdChLLEosITApfX0sOTE5'@;
put 'OTooSCxCLEwpPT57dmFyIEs9TCgzNDgyKSxKPUwoOTUwOSkuQnVmZmVyO2Z1bmN0aW9uIEkoUil7dmFyIEU9Si5hbGxvY1Vuc2FmZSg0KTtyZXR1cm4gRS53cml0ZVVJbnQzMkJFKFIsMCksRX1ILmV4cG9ydHM9ZnVuY3Rpb24oUixFKXtmb3IodmFyIHosaj1KLmFsbG9jKDApLFY9MDtqLmxl'@;
put 'bmd0aDxFOyl6PUkoVisrKSxqPUouY29uY2F0KFtqLEsoInNoYTEiKS51cGRhdGUoUikudXBkYXRlKHopLmRpZ2VzdCgpXSk7cmV0dXJuIGouc2xpY2UoMCxFKX19LDIxNDQ6ZnVuY3Rpb24oSCxCLEwpeyFmdW5jdGlvbihLLEopeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBJKGcsQyl7aWYoIWcp'@;
put 'dGhyb3cgbmV3IEVycm9yKEN8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gUihnLEMpe2cuc3VwZXJfPUM7dmFyIE09ZnVuY3Rpb24oKXt9O00ucHJvdG90eXBlPUMucHJvdG90eXBlLGcucHJvdG90eXBlPW5ldyBNLGcucHJvdG90eXBlLmNvbnN0cnVjdG9yPWd9ZnVuY3Rpb24gRShn'@;
put 'LEMsTSl7aWYoRS5pc0JOKGcpKXJldHVybiBnO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1nJiYoImxlIiE9PUMmJiJiZSIhPT1DfHwoTT1DLEM9MTApLHRoaXMuX2luaXQoZ3x8MCxDfHwxMCxNfHwiYmUiKSl9dmFy'@;
put 'IHo7Im9iamVjdCI9PXR5cGVvZiBLP0suZXhwb3J0cz1FOkouQk49RSxFLkJOPUUsRS53b3JkU2l6ZT0yNjt0cnl7ej10eXBlb2Ygd2luZG93PCJ1IiYmdm9pZCAwIT09d2luZG93LkJ1ZmZlcj93aW5kb3cuQnVmZmVyOkwoNzEwOCkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBqKGcsQyl7dmFy'@;
put 'IE09Zy5jaGFyQ29kZUF0KEMpO3JldHVybiBNPj02NSYmTTw9NzA/TS01NTpNPj05NyYmTTw9MTAyP00tODc6TS00OCYxNX1mdW5jdGlvbiBWKGcsQyxNKXt2YXIgeT1qKGcsTSk7cmV0dXJuIE0tMT49QyYmKHl8PWooZyxNLTEpPDw0KSx5fWZ1bmN0aW9uIEcoZyxDLE0seSl7Zm9yKHZhciBw'@;
put 'PTAsUz1NYXRoLm1pbihnLmxlbmd0aCxNKSxRPUM7UTxTO1ErKyl7dmFyIHJlPWcuY2hhckNvZGVBdChRKS00ODtwKj15LHArPXJlPj00OT9yZS00OSsxMDpyZT49MTc/cmUtMTcrMTA6cmV9cmV0dXJuIHB9RS5pc0JOPWZ1bmN0aW9uKGcpe3JldHVybiBnIGluc3RhbmNlb2YgRXx8bnVsbCE9'@;
put 'PWcmJiJvYmplY3QiPT10eXBlb2YgZyYmZy5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PUUud29yZFNpemUmJkFycmF5LmlzQXJyYXkoZy53b3Jkcyl9LEUubWF4PWZ1bmN0aW9uKGcsQyl7cmV0dXJuIGcuY21wKEMpPjA/ZzpDfSxFLm1pbj1mdW5jdGlvbihnLEMpe3JldHVybiBnLmNtcChDKTww'@;
put 'P2c6Q30sRS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oZyxDLE0pe2lmKCJudW1iZXIiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdE51bWJlcihnLEMsTSk7aWYoIm9iamVjdCI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0QXJyYXkoZyxDLE0pOyJoZXgiPT09QyYmKEM9MTYpLEko'@;
put 'Qz09PSgwfEMpJiZDPj0yJiZDPD0zNik7dmFyIHk9MDsiLSI9PT0oZz1nLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKHkrKyx0aGlzLm5lZ2F0aXZlPTEpLHk8Zy5sZW5ndGgmJigxNj09PUM/dGhpcy5fcGFyc2VIZXgoZyx5LE0pOih0aGlzLl9wYXJzZUJhc2UoZyxDLHkp'@;
put 'LCJsZSI9PT1NJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksQyxNKSkpfSxFLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihnLEMsTSl7ZzwwJiYodGhpcy5uZWdhdGl2ZT0xLGc9LWcpLGc8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJmddLHRoaXMubGVuZ3Ro'@;
put 'PTEpOmc8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooSShnPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0z'@;
put 'KSwibGUiPT09TSYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEMsTSl9LEUucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oZyxDLE0pe2lmKEkoIm51bWJlciI9PXR5cGVvZiBnLmxlbmd0aCksZy5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3Ro'@;
put 'PTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoZy5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGg7eSsrKXRoaXMud29yZHNbeV09MDt2YXIgcCxTLFE9MDtpZigiYmUiPT09TSlmb3IoeT1nLmxlbmd0aC0xLHA9'@;
put 'MDt5Pj0wO3ktPTMpdGhpcy53b3Jkc1twXXw9KFM9Z1t5XXxnW3ktMV08PDh8Z1t5LTJdPDwxNik8PFEmNjcxMDg4NjMsdGhpcy53b3Jkc1twKzFdPVM+Pj4yNi1RJjY3MTA4ODYzLChRKz0yNCk+PTI2JiYoUS09MjYscCsrKTtlbHNlIGlmKCJsZSI9PT1NKWZvcih5PTAscD0wO3k8Zy5sZW5n'@;
put 'dGg7eSs9Myl0aGlzLndvcmRzW3BdfD0oUz1nW3ldfGdbeSsxXTw8OHxnW3krMl08PDE2KTw8USY2NzEwODg2Myx0aGlzLndvcmRzW3ArMV09Uz4+PjI2LVEmNjcxMDg4NjMsKFErPTI0KT49MjYmJihRLT0yNixwKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLl9wYXJzZUhl'@;
put 'eD1mdW5jdGlvbihnLEMsTSl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChnLmxlbmd0aC1DKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciB5PTA7eTx0aGlzLmxlbmd0aDt5KyspdGhpcy53b3Jkc1t5XT0wO3ZhciBwLFM9MCxRPTA7aWYoImJlIj09PU0pZm9y'@;
put 'KHk9Zy5sZW5ndGgtMTt5Pj1DO3ktPTIpcD1WKGcsQyx5KTw8Uyx0aGlzLndvcmRzW1FdfD02NzEwODg2MyZwLFM+PTE4PyhTLT0xOCx0aGlzLndvcmRzW1ErPTFdfD1wPj4+MjYpOlMrPTg7ZWxzZSBmb3IoeT0oZy5sZW5ndGgtQyklMj09MD9DKzE6Qzt5PGcubGVuZ3RoO3krPTIpcD1WKGcs'@;
put 'Qyx5KTw8Uyx0aGlzLndvcmRzW1FdfD02NzEwODg2MyZwLFM+PTE4PyhTLT0xOCx0aGlzLndvcmRzW1ErPTFdfD1wPj4+MjYpOlMrPTg7dGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKGcsQyxNKXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2'@;
put 'YXIgeT0wLHA9MTtwPD02NzEwODg2MztwKj1DKXkrKzt5LS0scD1wL0N8MDtmb3IodmFyIFM9Zy5sZW5ndGgtTSxRPVMleSxyZT1NYXRoLm1pbihTLFMtUSkrTSxmZT0wLG1lPU07bWU8cmU7bWUrPXkpZmU9RyhnLG1lLG1lK3ksQyksdGhpcy5pbXVsbihwKSx0aGlzLndvcmRzWzBdK2ZlPDY3'@;
put 'MTA4ODY0P3RoaXMud29yZHNbMF0rPWZlOnRoaXMuX2lhZGRuKGZlKTtpZigwIT09USl7dmFyIGtlPTE7Zm9yKGZlPUcoZyxtZSxnLmxlbmd0aCxDKSxtZT0wO21lPFE7bWUrKylrZSo9Qzt0aGlzLmltdWxuKGtlKSx0aGlzLndvcmRzWzBdK2ZlPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPWZl'@;
put 'OnRoaXMuX2lhZGRuKGZlKX10aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZyl7Zy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKWcud29yZHNbQ109dGhpcy53b3Jkc1tDXTtnLmxlbmd0aD10aGlzLmxlbmd0'@;
put 'aCxnLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsZy5yZWQ9dGhpcy5yZWR9LEUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IEUobnVsbCk7cmV0dXJuIHRoaXMuY29weShnKSxnfSxFLnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8Zzsp'@;
put 'dGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxFLnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LEUucHJv'@;
put 'dG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSxFLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlz'@;
put 'LnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBXPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAw'@;
put 'MDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAw'@;
put 'MDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLFU9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1'@;
put 'LDUsNSw1LDUsNSw1LDUsNV0scT1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0'@;
put 'MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlv'@;
put 'biB0ZShnLEMsTSl7TS5uZWdhdGl2ZT1DLm5lZ2F0aXZlXmcubmVnYXRpdmU7dmFyIHk9Zy5sZW5ndGgrQy5sZW5ndGh8MDtNLmxlbmd0aD15LHk9eS0xfDA7dmFyIHA9MHxnLndvcmRzWzBdLFM9MHxDLndvcmRzWzBdLFE9cCpTLGZlPVEvNjcxMDg4NjR8MDtNLndvcmRzWzBdPTY3MTA4ODYz'@;
put 'JlE7Zm9yKHZhciBtZT0xO21lPHk7bWUrKyl7Zm9yKHZhciBrZT1mZT4+PjI2LFRlPTY3MTA4ODYzJmZlLFBlPU1hdGgubWluKG1lLEMubGVuZ3RoLTEpLEZlPU1hdGgubWF4KDAsbWUtZy5sZW5ndGgrMSk7RmU8PVBlO0ZlKyspa2UrPShRPShwPTB8Zy53b3Jkc1ttZS1GZXwwXSkqKFM9MHxD'@;
put 'LndvcmRzW0ZlXSkrVGUpLzY3MTA4ODY0fDAsVGU9NjcxMDg4NjMmUTtNLndvcmRzW21lXT0wfFRlLGZlPTB8a2V9cmV0dXJuIDAhPT1mZT9NLndvcmRzW21lXT0wfGZlOk0ubGVuZ3RoLS0sTS5zdHJpcCgpfUUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGcsQyl7dmFyIE07aWYoQz0w'@;
put 'fEN8fDEsMTY9PT0oZz1nfHwxMCl8fCJoZXgiPT09Zyl7TT0iIjtmb3IodmFyIHk9MCxwPTAsUz0wO1M8dGhpcy5sZW5ndGg7UysrKXt2YXIgUT10aGlzLndvcmRzW1NdLHJlPSgxNjc3NzIxNSYoUTw8eXxwKSkudG9TdHJpbmcoMTYpO009MCE9KHA9UT4+PjI0LXkmMTY3NzcyMTUpfHxTIT09'@;
put 'dGhpcy5sZW5ndGgtMT9XWzYtcmUubGVuZ3RoXStyZStNOnJlK00sKHkrPTIpPj0yNiYmKHktPTI2LFMtLSl9Zm9yKDAhPT1wJiYoTT1wLnRvU3RyaW5nKDE2KStNKTtNLmxlbmd0aCVDIT0wOylNPSIwIitNO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKE09Ii0iK00pLE19aWYoZz09PSgw'@;
put 'fGcpJiZnPj0yJiZnPD0zNil7dmFyIGZlPVVbZ10sbWU9cVtnXTtNPSIiO3ZhciBrZT10aGlzLmNsb25lKCk7Zm9yKGtlLm5lZ2F0aXZlPTA7IWtlLmlzWmVybygpOyl7dmFyIFRlPWtlLm1vZG4obWUpLnRvU3RyaW5nKGcpO009KGtlPWtlLmlkaXZuKG1lKSkuaXNaZXJvKCk/VGUrTTpXW2Zl'@;
put 'LVRlLmxlbmd0aF0rVGUrTX1mb3IodGhpcy5pc1plcm8oKSYmKE09IjAiK00pO00ubGVuZ3RoJUMhPTA7KU09IjAiK007cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoTT0iLSIrTSksTX1JKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LEUucHJvdG90eXBlLnRvTnVt'@;
put 'YmVyPWZ1bmN0aW9uKCl7dmFyIGc9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP2crPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9nKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhp'@;
put 'cy5sZW5ndGg+MiYmSSghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LWc6Z30sRS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxFLnByb3RvdHlwZS50b0J1ZmZlcj1m'@;
put 'dW5jdGlvbihnLEMpe3JldHVybiBJKHZvaWQgMCE9PXopLHRoaXMudG9BcnJheUxpa2UoeixnLEMpfSxFLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksZyxDKX0sRS5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oZyxD'@;
put 'LE0pe3ZhciB5PXRoaXMuYnl0ZUxlbmd0aCgpLHA9TXx8TWF0aC5tYXgoMSx5KTtJKHk8PXAsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxJKHA+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBTLFEscmU9ImxlIj09PUMs'@;
put 'ZmU9bmV3IGcocCksbWU9dGhpcy5jbG9uZSgpO2lmKHJlKXtmb3IoUT0wOyFtZS5pc1plcm8oKTtRKyspUz1tZS5hbmRsbigyNTUpLG1lLml1c2hybig4KSxmZVtRXT1TO2Zvcig7UTxwO1ErKylmZVtRXT0wfWVsc2V7Zm9yKFE9MDtRPHAteTtRKyspZmVbUV09MDtmb3IoUT0wOyFtZS5pc1pl'@;
put 'cm8oKTtRKyspUz1tZS5hbmRsbigyNTUpLG1lLml1c2hybig4KSxmZVtwLVEtMV09U31yZXR1cm4gZmV9LEUucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihnKXtyZXR1cm4gMzItTWF0aC5jbHozMihnKX06ZnVuY3Rpb24oZyl7dmFyIEM9ZyxNPTA7cmV0dXJuIEM+'@;
put 'PTQwOTYmJihNKz0xMyxDPj4+PTEzKSxDPj02NCYmKE0rPTcsQz4+Pj03KSxDPj04JiYoTSs9NCxDPj4+PTQpLEM+PTImJihNKz0yLEM+Pj49MiksTStDfSxFLnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oZyl7aWYoMD09PWcpcmV0dXJuIDI2O3ZhciBDPWcsTT0wO3JldHVybiEoODE5'@;
put 'MSZDKSYmKE0rPTEzLEM+Pj49MTMpLCEoMTI3JkMpJiYoTSs9NyxDPj4+PTcpLCEoMTUmQykmJihNKz00LEM+Pj49NCksISgzJkMpJiYoTSs9MixDPj4+PTIpLCEoMSZDKSYmTSsrLE19LEUucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBDPXRoaXMuX2NvdW50Qml0cyh0aGlz'@;
put 'LndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK0N9LEUucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIGc9MCxDPTA7Qzx0aGlzLmxlbmd0aDtDKyspe3ZhciBNPXRoaXMuX3plcm9CaXRz'@;
put 'KHRoaXMud29yZHNbQ10pO2lmKGcrPU0sMjYhPT1NKWJyZWFrfXJldHVybiBnfSxFLnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSxFLnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIDAhPT10aGlz'@;
put 'Lm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4oZykuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSxFLnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy50ZXN0bihnLTEpP3RoaXMubm90bihnKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSxFLnByb3RvdHlwZS5p'@;
put 'c05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sRS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LEUucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEp'@;
put 'LHRoaXN9LEUucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgQz0wO0M8Zy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109dGhpcy53b3Jkc1tDXXxnLndvcmRzW0NdO3JldHVybiB0'@;
put 'aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlvcj1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT0odGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdW9yKGcpfSxFLnByb3RvdHlwZS5vcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlv'@;
put 'cihnKTpnLmNsb25lKCkuaW9yKHRoaXMpfSxFLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKGcpOmcuY2xvbmUoKS5pdW9yKHRoaXMpfSxFLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihnKXt2YXIgQztDPXRo'@;
put 'aXMubGVuZ3RoPmcubGVuZ3RoP2c6dGhpcztmb3IodmFyIE09MDtNPEMubGVuZ3RoO00rKyl0aGlzLndvcmRzW01dPXRoaXMud29yZHNbTV0mZy53b3Jkc1tNXTtyZXR1cm4gdGhpcy5sZW5ndGg9Qy5sZW5ndGgsdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKGcpe3Jl'@;
put 'dHVybiBJKDA9PSh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1YW5kKGcpfSxFLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKGcpOmcuY2xvbmUoKS5pYW5kKHRoaXMpfSxFLnByb3RvdHlwZS51'@;
put 'YW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoZyk6Zy5jbG9uZSgpLml1YW5kKHRoaXMpfSxFLnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihnKXt2YXIgQyxNO3RoaXMubGVuZ3RoPmcubGVuZ3RoPyhDPXRoaXMsTT1nKTooQz1n'@;
put 'LE09dGhpcyk7Zm9yKHZhciB5PTA7eTxNLmxlbmd0aDt5KyspdGhpcy53b3Jkc1t5XT1DLndvcmRzW3ldXk0ud29yZHNbeV07aWYodGhpcyE9PUMpZm9yKDt5PEMubGVuZ3RoO3krKyl0aGlzLndvcmRzW3ldPUMud29yZHNbeV07cmV0dXJuIHRoaXMubGVuZ3RoPUMubGVuZ3RoLHRoaXMuc3Ry'@;
put 'aXAoKX0sRS5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT0odGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihnKX0sRS5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihn'@;
put 'KTpnLmNsb25lKCkuaXhvcih0aGlzKX0sRS5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKGcpOmcuY2xvbmUoKS5pdXhvcih0aGlzKX0sRS5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24oZyl7SSgibnVtYmVy'@;
put 'Ij09dHlwZW9mIGcmJmc+PTApO3ZhciBDPTB8TWF0aC5jZWlsKGcvMjYpLE09ZyUyNjt0aGlzLl9leHBhbmQoQyksTT4wJiZDLS07Zm9yKHZhciB5PTA7eTxDO3krKyl0aGlzLndvcmRzW3ldPTY3MTA4ODYzJn50aGlzLndvcmRzW3ldO3JldHVybiBNPjAmJih0aGlzLndvcmRzW3ldPX50aGlz'@;
put 'LndvcmRzW3ldJjY3MTA4ODYzPj4yNi1NKSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihnKX0sRS5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihnLEMpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgTT1n'@;
put 'LzI2fDAseT1nJTI2O3JldHVybiB0aGlzLl9leHBhbmQoTSsxKSx0aGlzLndvcmRzW01dPUM/dGhpcy53b3Jkc1tNXXwxPDx5OnRoaXMud29yZHNbTV0mfigxPDx5KSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyl7dmFyIEMsTSx5O2lmKDAhPT10aGlzLm5lZ2F0'@;
put 'aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLEM9dGhpcy5pc3ViKGcpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIGcubmVnYXRpdmU9MCxDPXRoaXMuaXN1YihnKSxn'@;
put 'Lm5lZ2F0aXZlPTEsQy5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oTT10aGlzLHk9Zyk6KE09Zyx5PXRoaXMpO2Zvcih2YXIgcD0wLFM9MDtTPHkubGVuZ3RoO1MrKyl0aGlzLndvcmRzW1NdPTY3MTA4ODYzJihDPSgwfE0ud29yZHNbU10pKygwfHkud29yZHNbU10pK3ApLHA9'@;
put 'Qz4+PjI2O2Zvcig7MCE9PXAmJlM8TS5sZW5ndGg7UysrKXRoaXMud29yZHNbU109NjcxMDg4NjMmKEM9KDB8TS53b3Jkc1tTXSkrcCkscD1DPj4+MjY7aWYodGhpcy5sZW5ndGg9TS5sZW5ndGgsMCE9PXApdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09cCx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYo'@;
put 'TSE9PXRoaXMpZm9yKDtTPE0ubGVuZ3RoO1MrKyl0aGlzLndvcmRzW1NdPU0ud29yZHNbU107cmV0dXJuIHRoaXN9LEUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnKXt2YXIgQztyZXR1cm4gMCE9PWcubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhnLm5lZ2F0aXZlPTAsQz10aGlzLnN1'@;
put 'YihnKSxnLm5lZ2F0aXZlXj0xLEMpOjA9PT1nLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLEM9Zy5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLEMpOnRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKGcpOmcuY2xvbmUoKS5pYWRkKHRo'@;
put 'aXMpfSxFLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcpe2lmKDAhPT1nLm5lZ2F0aXZlKXtnLm5lZ2F0aXZlPTA7dmFyIEM9dGhpcy5pYWRkKGcpO3JldHVybiBnLm5lZ2F0aXZlPTEsQy5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRo'@;
put 'aXMuaWFkZChnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgTSx5LHA9dGhpcy5jbXAoZyk7aWYoMD09PXApcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3A+MD8oTT10aGlzLHk9Zyk6KE09Zyx5PXRoaXMpO2Zv'@;
put 'cih2YXIgUz0wLFE9MDtRPHkubGVuZ3RoO1ErKylTPShDPSgwfE0ud29yZHNbUV0pLSgwfHkud29yZHNbUV0pK1MpPj4yNix0aGlzLndvcmRzW1FdPTY3MTA4ODYzJkM7Zm9yKDswIT09UyYmUTxNLmxlbmd0aDtRKyspUz0oQz0oMHxNLndvcmRzW1FdKStTKT4+MjYsdGhpcy53b3Jkc1tRXT02'@;
put 'NzEwODg2MyZDO2lmKDA9PT1TJiZRPE0ubGVuZ3RoJiZNIT09dGhpcylmb3IoO1E8TS5sZW5ndGg7USsrKXRoaXMud29yZHNbUV09TS53b3Jkc1tRXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsUSksTSE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3Ry'@;
put 'aXAoKX0sRS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihnKX07dmFyIG5lPWZ1bmN0aW9uKGcsQyxNKXt2YXIgeSxwLFMsUT1nLndvcmRzLHJlPUMud29yZHMsZmU9TS53b3JkcyxtZT0wLGtlPTB8UVswXSxUZT04MTkxJmtlLFBlPWtlPj4+MTMs'@;
put 'RmU9MHxRWzFdLE5lPTgxOTEmRmUsTGU9RmU+Pj4xMyxCZT0wfFFbMl0sSGU9ODE5MSZCZSxRZT1CZT4+PjEzLG10PTB8UVszXSxLZT04MTkxJm10LHdlPW10Pj4+MTMsSWU9MHxRWzRdLE9lPTgxOTEmSWUsZXQ9SWU+Pj4xMyxudD0wfFFbNV0scWU9ODE5MSZudCxodD1udD4+PjEzLEVlPTB8'@;
put 'UVs2XSxEZT04MTkxJkVlLCRlPUVlPj4+MTMsYXQ9MHxRWzddLGN0PTgxOTEmYXQsT3Q9YXQ+Pj4xMyxQdD0wfFFbOF0sQXQ9ODE5MSZQdCxKdD1QdD4+PjEzLG1uPTB8UVs5XSxOdD04MTkxJm1uLGJuPW1uPj4+MTMsR249MHxyZVswXSxvbj04MTkxJkduLCRuPUduPj4+MTMsTm49MHxyZVsx'@;
put 'XSxwdD04MTkxJk5uLHBuPU5uPj4+MTMsaG49MHxyZVsyXSxDdD04MTkxJmhuLGVuPWhuPj4+MTMsX3Q9MHxyZVszXSxWdD04MTkxJl90LF9uPV90Pj4+MTMsb3Q9MHxyZVs0XSxJdD04MTkxJm90LG5uPW90Pj4+MTMsRHQ9MHxyZVs1XSx2dD04MTkxJkR0LEd0PUR0Pj4+MTMsTG49MHxyZVs2'@;
put 'XSx6dD04MTkxJkxuLE1uPUxuPj4+MTMsVG49MHxyZVs3XSxzbj04MTkxJlRuLEJuPVRuPj4+MTMsRm49MHxyZVs4XSxxdD04MTkxJkZuLEhuPUZuPj4+MTMsaWk9MHxyZVs5XSxjbj04MTkxJmlpLGpuPWlpPj4+MTM7TS5uZWdhdGl2ZT1nLm5lZ2F0aXZlXkMubmVnYXRpdmUsTS5sZW5ndGg9'@;
put 'MTk7dmFyIFhyPShtZSsoeT1NYXRoLmltdWwoVGUsb24pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKFRlLCRuKSkrTWF0aC5pbXVsKFBlLG9uKXwwKSk8PDEzKXwwO21lPSgoUz1NYXRoLmltdWwoUGUsJG4pKSsocD4+PjEzKXwwKSsoWHI+Pj4yNil8MCxYciY9NjcxMDg4NjMseT1NYXRo'@;
put 'LmltdWwoTmUsb24pLHA9KHA9TWF0aC5pbXVsKE5lLCRuKSkrTWF0aC5pbXVsKExlLG9uKXwwLFM9TWF0aC5pbXVsKExlLCRuKTt2YXIgdmk9KG1lKyh5PXkrTWF0aC5pbXVsKFRlLHB0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoVGUscG4pfDApK01hdGguaW11bChQZSxwdCl8'@;
put 'MCkpPDwxMyl8MDttZT0oKFM9UytNYXRoLmltdWwoUGUscG4pfDApKyhwPj4+MTMpfDApKyh2aT4+PjI2KXwwLHZpJj02NzEwODg2Myx5PU1hdGguaW11bChIZSxvbikscD0ocD1NYXRoLmltdWwoSGUsJG4pKStNYXRoLmltdWwoUWUsb24pfDAsUz1NYXRoLmltdWwoUWUsJG4pLHk9eStNYXRo'@;
put 'LmltdWwoTmUscHQpfDAscD0ocD1wK01hdGguaW11bChOZSxwbil8MCkrTWF0aC5pbXVsKExlLHB0KXwwLFM9UytNYXRoLmltdWwoTGUscG4pfDA7dmFyIEVyPShtZSsoeT15K01hdGguaW11bChUZSxDdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFRlLGVuKXwwKStNYXRoLmlt'@;
put 'dWwoUGUsQ3QpfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKFBlLGVuKXwwKSsocD4+PjEzKXwwKSsoRXI+Pj4yNil8MCxFciY9NjcxMDg4NjMseT1NYXRoLmltdWwoS2Usb24pLHA9KHA9TWF0aC5pbXVsKEtlLCRuKSkrTWF0aC5pbXVsKHdlLG9uKXwwLFM9TWF0aC5pbXVsKHdlLCRu'@;
put 'KSx5PXkrTWF0aC5pbXVsKEhlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoSGUscG4pfDApK01hdGguaW11bChRZSxwdCl8MCxTPVMrTWF0aC5pbXVsKFFlLHBuKXwwLHk9eStNYXRoLmltdWwoTmUsQ3QpfDAscD0ocD1wK01hdGguaW11bChOZSxlbil8MCkrTWF0aC5pbXVsKExlLEN0KXwwLFM9'@;
put 'UytNYXRoLmltdWwoTGUsZW4pfDA7dmFyIFlpPShtZSsoeT15K01hdGguaW11bChUZSxWdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFRlLF9uKXwwKStNYXRoLmltdWwoUGUsVnQpfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKFBlLF9uKXwwKSsocD4+PjEzKXwwKSso'@;
put 'WWk+Pj4yNil8MCxZaSY9NjcxMDg4NjMseT1NYXRoLmltdWwoT2Usb24pLHA9KHA9TWF0aC5pbXVsKE9lLCRuKSkrTWF0aC5pbXVsKGV0LG9uKXwwLFM9TWF0aC5pbXVsKGV0LCRuKSx5PXkrTWF0aC5pbXVsKEtlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoS2UscG4pfDApK01hdGguaW11bCh3'@;
put 'ZSxwdCl8MCxTPVMrTWF0aC5pbXVsKHdlLHBuKXwwLHk9eStNYXRoLmltdWwoSGUsQ3QpfDAscD0ocD1wK01hdGguaW11bChIZSxlbil8MCkrTWF0aC5pbXVsKFFlLEN0KXwwLFM9UytNYXRoLmltdWwoUWUsZW4pfDAseT15K01hdGguaW11bChOZSxWdCl8MCxwPShwPXArTWF0aC5pbXVsKE5l'@;
put 'LF9uKXwwKStNYXRoLmltdWwoTGUsVnQpfDAsUz1TK01hdGguaW11bChMZSxfbil8MDt2YXIgSnI9KG1lKyh5PXkrTWF0aC5pbXVsKFRlLEl0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoVGUsbm4pfDApK01hdGguaW11bChQZSxJdCl8MCkpPDwxMyl8MDttZT0oKFM9UytNYXRo'@;
put 'LmltdWwoUGUsbm4pfDApKyhwPj4+MTMpfDApKyhKcj4+PjI2KXwwLEpyJj02NzEwODg2Myx5PU1hdGguaW11bChxZSxvbikscD0ocD1NYXRoLmltdWwocWUsJG4pKStNYXRoLmltdWwoaHQsb24pfDAsUz1NYXRoLmltdWwoaHQsJG4pLHk9eStNYXRoLmltdWwoT2UscHQpfDAscD0ocD1wK01h'@;
put 'dGguaW11bChPZSxwbil8MCkrTWF0aC5pbXVsKGV0LHB0KXwwLFM9UytNYXRoLmltdWwoZXQscG4pfDAseT15K01hdGguaW11bChLZSxDdCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLGVuKXwwKStNYXRoLmltdWwod2UsQ3QpfDAsUz1TK01hdGguaW11bCh3ZSxlbil8MCx5PXkrTWF0aC5pbXVs'@;
put 'KEhlLFZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoSGUsX24pfDApK01hdGguaW11bChRZSxWdCl8MCxTPVMrTWF0aC5pbXVsKFFlLF9uKXwwLHk9eStNYXRoLmltdWwoTmUsSXQpfDAscD0ocD1wK01hdGguaW11bChOZSxubil8MCkrTWF0aC5pbXVsKExlLEl0KXwwLFM9UytNYXRoLmltdWwoTGUs'@;
put 'bm4pfDA7dmFyIGFvPShtZSsoeT15K01hdGguaW11bChUZSx2dCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFRlLEd0KXwwKStNYXRoLmltdWwoUGUsdnQpfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKFBlLEd0KXwwKSsocD4+PjEzKXwwKSsoYW8+Pj4yNil8MCxhbyY9'@;
put 'NjcxMDg4NjMseT1NYXRoLmltdWwoRGUsb24pLHA9KHA9TWF0aC5pbXVsKERlLCRuKSkrTWF0aC5pbXVsKCRlLG9uKXwwLFM9TWF0aC5pbXVsKCRlLCRuKSx5PXkrTWF0aC5pbXVsKHFlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwocWUscG4pfDApK01hdGguaW11bChodCxwdCl8MCxTPVMrTWF0'@;
put 'aC5pbXVsKGh0LHBuKXwwLHk9eStNYXRoLmltdWwoT2UsQ3QpfDAscD0ocD1wK01hdGguaW11bChPZSxlbil8MCkrTWF0aC5pbXVsKGV0LEN0KXwwLFM9UytNYXRoLmltdWwoZXQsZW4pfDAseT15K01hdGguaW11bChLZSxWdCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLF9uKXwwKStNYXRoLmlt'@;
put 'dWwod2UsVnQpfDAsUz1TK01hdGguaW11bCh3ZSxfbil8MCx5PXkrTWF0aC5pbXVsKEhlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoSGUsbm4pfDApK01hdGguaW11bChRZSxJdCl8MCxTPVMrTWF0aC5pbXVsKFFlLG5uKXwwLHk9eStNYXRoLmltdWwoTmUsdnQpfDAscD0ocD1wK01hdGguaW11'@;
put 'bChOZSxHdCl8MCkrTWF0aC5pbXVsKExlLHZ0KXwwLFM9UytNYXRoLmltdWwoTGUsR3QpfDA7dmFyIEJyPShtZSsoeT15K01hdGguaW11bChUZSx6dCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFRlLE1uKXwwKStNYXRoLmltdWwoUGUsenQpfDApKTw8MTMpfDA7bWU9KChTPVMr'@;
put 'TWF0aC5pbXVsKFBlLE1uKXwwKSsocD4+PjEzKXwwKSsoQnI+Pj4yNil8MCxCciY9NjcxMDg4NjMseT1NYXRoLmltdWwoY3Qsb24pLHA9KHA9TWF0aC5pbXVsKGN0LCRuKSkrTWF0aC5pbXVsKE90LG9uKXwwLFM9TWF0aC5pbXVsKE90LCRuKSx5PXkrTWF0aC5pbXVsKERlLHB0KXwwLHA9KHA9'@;
put 'cCtNYXRoLmltdWwoRGUscG4pfDApK01hdGguaW11bCgkZSxwdCl8MCxTPVMrTWF0aC5pbXVsKCRlLHBuKXwwLHk9eStNYXRoLmltdWwocWUsQ3QpfDAscD0ocD1wK01hdGguaW11bChxZSxlbil8MCkrTWF0aC5pbXVsKGh0LEN0KXwwLFM9UytNYXRoLmltdWwoaHQsZW4pfDAseT15K01hdGgu'@;
put 'aW11bChPZSxWdCl8MCxwPShwPXArTWF0aC5pbXVsKE9lLF9uKXwwKStNYXRoLmltdWwoZXQsVnQpfDAsUz1TK01hdGguaW11bChldCxfbil8MCx5PXkrTWF0aC5pbXVsKEtlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoS2Usbm4pfDApK01hdGguaW11bCh3ZSxJdCl8MCxTPVMrTWF0aC5pbXVs'@;
put 'KHdlLG5uKXwwLHk9eStNYXRoLmltdWwoSGUsdnQpfDAscD0ocD1wK01hdGguaW11bChIZSxHdCl8MCkrTWF0aC5pbXVsKFFlLHZ0KXwwLFM9UytNYXRoLmltdWwoUWUsR3QpfDAseT15K01hdGguaW11bChOZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKE5lLE1uKXwwKStNYXRoLmltdWwoTGUs'@;
put 'enQpfDAsUz1TK01hdGguaW11bChMZSxNbil8MDt2YXIgSmk9KG1lKyh5PXkrTWF0aC5pbXVsKFRlLHNuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoVGUsQm4pfDApK01hdGguaW11bChQZSxzbil8MCkpPDwxMyl8MDttZT0oKFM9UytNYXRoLmltdWwoUGUsQm4pfDApKyhwPj4+'@;
put 'MTMpfDApKyhKaT4+PjI2KXwwLEppJj02NzEwODg2Myx5PU1hdGguaW11bChBdCxvbikscD0ocD1NYXRoLmltdWwoQXQsJG4pKStNYXRoLmltdWwoSnQsb24pfDAsUz1NYXRoLmltdWwoSnQsJG4pLHk9eStNYXRoLmltdWwoY3QscHQpfDAscD0ocD1wK01hdGguaW11bChjdCxwbil8MCkrTWF0'@;
put 'aC5pbXVsKE90LHB0KXwwLFM9UytNYXRoLmltdWwoT3QscG4pfDAseT15K01hdGguaW11bChEZSxDdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLGVuKXwwKStNYXRoLmltdWwoJGUsQ3QpfDAsUz1TK01hdGguaW11bCgkZSxlbil8MCx5PXkrTWF0aC5pbXVsKHFlLFZ0KXwwLHA9KHA9cCtNYXRo'@;
put 'LmltdWwocWUsX24pfDApK01hdGguaW11bChodCxWdCl8MCxTPVMrTWF0aC5pbXVsKGh0LF9uKXwwLHk9eStNYXRoLmltdWwoT2UsSXQpfDAscD0ocD1wK01hdGguaW11bChPZSxubil8MCkrTWF0aC5pbXVsKGV0LEl0KXwwLFM9UytNYXRoLmltdWwoZXQsbm4pfDAseT15K01hdGguaW11bChL'@;
put 'ZSx2dCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLEd0KXwwKStNYXRoLmltdWwod2UsdnQpfDAsUz1TK01hdGguaW11bCh3ZSxHdCl8MCx5PXkrTWF0aC5pbXVsKEhlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoSGUsTW4pfDApK01hdGguaW11bChRZSx6dCl8MCxTPVMrTWF0aC5pbXVsKFFlLE1u'@;
put 'KXwwLHk9eStNYXRoLmltdWwoTmUsc24pfDAscD0ocD1wK01hdGguaW11bChOZSxCbil8MCkrTWF0aC5pbXVsKExlLHNuKXwwLFM9UytNYXRoLmltdWwoTGUsQm4pfDA7dmFyIHRvPShtZSsoeT15K01hdGguaW11bChUZSxxdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFRlLEhu'@;
put 'KXwwKStNYXRoLmltdWwoUGUscXQpfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKFBlLEhuKXwwKSsocD4+PjEzKXwwKSsodG8+Pj4yNil8MCx0byY9NjcxMDg4NjMseT1NYXRoLmltdWwoTnQsb24pLHA9KHA9TWF0aC5pbXVsKE50LCRuKSkrTWF0aC5pbXVsKGJuLG9uKXwwLFM9TWF0'@;
put 'aC5pbXVsKGJuLCRuKSx5PXkrTWF0aC5pbXVsKEF0LHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoQXQscG4pfDApK01hdGguaW11bChKdCxwdCl8MCxTPVMrTWF0aC5pbXVsKEp0LHBuKXwwLHk9eStNYXRoLmltdWwoY3QsQ3QpfDAscD0ocD1wK01hdGguaW11bChjdCxlbil8MCkrTWF0aC5pbXVs'@;
put 'KE90LEN0KXwwLFM9UytNYXRoLmltdWwoT3QsZW4pfDAseT15K01hdGguaW11bChEZSxWdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLF9uKXwwKStNYXRoLmltdWwoJGUsVnQpfDAsUz1TK01hdGguaW11bCgkZSxfbil8MCx5PXkrTWF0aC5pbXVsKHFlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwo'@;
put 'cWUsbm4pfDApK01hdGguaW11bChodCxJdCl8MCxTPVMrTWF0aC5pbXVsKGh0LG5uKXwwLHk9eStNYXRoLmltdWwoT2UsdnQpfDAscD0ocD1wK01hdGguaW11bChPZSxHdCl8MCkrTWF0aC5pbXVsKGV0LHZ0KXwwLFM9UytNYXRoLmltdWwoZXQsR3QpfDAseT15K01hdGguaW11bChLZSx6dCl8'@;
put 'MCxwPShwPXArTWF0aC5pbXVsKEtlLE1uKXwwKStNYXRoLmltdWwod2UsenQpfDAsUz1TK01hdGguaW11bCh3ZSxNbil8MCx5PXkrTWF0aC5pbXVsKEhlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoSGUsQm4pfDApK01hdGguaW11bChRZSxzbil8MCxTPVMrTWF0aC5pbXVsKFFlLEJuKXwwLHk9'@;
put 'eStNYXRoLmltdWwoTmUscXQpfDAscD0ocD1wK01hdGguaW11bChOZSxIbil8MCkrTWF0aC5pbXVsKExlLHF0KXwwLFM9UytNYXRoLmltdWwoTGUsSG4pfDA7dmFyIGNvPShtZSsoeT15K01hdGguaW11bChUZSxjbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFRlLGpuKXwwKStN'@;
put 'YXRoLmltdWwoUGUsY24pfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKFBlLGpuKXwwKSsocD4+PjEzKXwwKSsoY28+Pj4yNil8MCxjbyY9NjcxMDg4NjMseT1NYXRoLmltdWwoTnQscHQpLHA9KHA9TWF0aC5pbXVsKE50LHBuKSkrTWF0aC5pbXVsKGJuLHB0KXwwLFM9TWF0aC5pbXVs'@;
put 'KGJuLHBuKSx5PXkrTWF0aC5pbXVsKEF0LEN0KXwwLHA9KHA9cCtNYXRoLmltdWwoQXQsZW4pfDApK01hdGguaW11bChKdCxDdCl8MCxTPVMrTWF0aC5pbXVsKEp0LGVuKXwwLHk9eStNYXRoLmltdWwoY3QsVnQpfDAscD0ocD1wK01hdGguaW11bChjdCxfbil8MCkrTWF0aC5pbXVsKE90LFZ0'@;
put 'KXwwLFM9UytNYXRoLmltdWwoT3QsX24pfDAseT15K01hdGguaW11bChEZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLG5uKXwwKStNYXRoLmltdWwoJGUsSXQpfDAsUz1TK01hdGguaW11bCgkZSxubil8MCx5PXkrTWF0aC5pbXVsKHFlLHZ0KXwwLHA9KHA9cCtNYXRoLmltdWwocWUsR3Qp'@;
put 'fDApK01hdGguaW11bChodCx2dCl8MCxTPVMrTWF0aC5pbXVsKGh0LEd0KXwwLHk9eStNYXRoLmltdWwoT2UsenQpfDAscD0ocD1wK01hdGguaW11bChPZSxNbil8MCkrTWF0aC5pbXVsKGV0LHp0KXwwLFM9UytNYXRoLmltdWwoZXQsTW4pfDAseT15K01hdGguaW11bChLZSxzbil8MCxwPShw'@;
put 'PXArTWF0aC5pbXVsKEtlLEJuKXwwKStNYXRoLmltdWwod2Usc24pfDAsUz1TK01hdGguaW11bCh3ZSxCbil8MCx5PXkrTWF0aC5pbXVsKEhlLHF0KXwwLHA9KHA9cCtNYXRoLmltdWwoSGUsSG4pfDApK01hdGguaW11bChRZSxxdCl8MCxTPVMrTWF0aC5pbXVsKFFlLEhuKXwwO3ZhciBsbz0o'@;
put 'bWUrKHk9eStNYXRoLmltdWwoTmUsY24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChOZSxqbil8MCkrTWF0aC5pbXVsKExlLGNuKXwwKSk8PDEzKXwwO21lPSgoUz1TK01hdGguaW11bChMZSxqbil8MCkrKHA+Pj4xMyl8MCkrKGxvPj4+MjYpfDAsbG8mPTY3MTA4ODYzLHk9TWF0'@;
put 'aC5pbXVsKE50LEN0KSxwPShwPU1hdGguaW11bChOdCxlbikpK01hdGguaW11bChibixDdCl8MCxTPU1hdGguaW11bChibixlbikseT15K01hdGguaW11bChBdCxWdCl8MCxwPShwPXArTWF0aC5pbXVsKEF0LF9uKXwwKStNYXRoLmltdWwoSnQsVnQpfDAsUz1TK01hdGguaW11bChKdCxfbil8'@;
put 'MCx5PXkrTWF0aC5pbXVsKGN0LEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoY3Qsbm4pfDApK01hdGguaW11bChPdCxJdCl8MCxTPVMrTWF0aC5pbXVsKE90LG5uKXwwLHk9eStNYXRoLmltdWwoRGUsdnQpfDAscD0ocD1wK01hdGguaW11bChEZSxHdCl8MCkrTWF0aC5pbXVsKCRlLHZ0KXwwLFM9'@;
put 'UytNYXRoLmltdWwoJGUsR3QpfDAseT15K01hdGguaW11bChxZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKHFlLE1uKXwwKStNYXRoLmltdWwoaHQsenQpfDAsUz1TK01hdGguaW11bChodCxNbil8MCx5PXkrTWF0aC5pbXVsKE9lLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoT2UsQm4pfDApK01h'@;
put 'dGguaW11bChldCxzbil8MCxTPVMrTWF0aC5pbXVsKGV0LEJuKXwwLHk9eStNYXRoLmltdWwoS2UscXQpfDAscD0ocD1wK01hdGguaW11bChLZSxIbil8MCkrTWF0aC5pbXVsKHdlLHF0KXwwLFM9UytNYXRoLmltdWwod2UsSG4pfDA7dmFyIHNvPShtZSsoeT15K01hdGguaW11bChIZSxjbil8'@;
put 'MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKEhlLGpuKXwwKStNYXRoLmltdWwoUWUsY24pfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKFFlLGpuKXwwKSsocD4+PjEzKXwwKSsoc28+Pj4yNil8MCxzbyY9NjcxMDg4NjMseT1NYXRoLmltdWwoTnQsVnQpLHA9KHA9TWF0aC5p'@;
put 'bXVsKE50LF9uKSkrTWF0aC5pbXVsKGJuLFZ0KXwwLFM9TWF0aC5pbXVsKGJuLF9uKSx5PXkrTWF0aC5pbXVsKEF0LEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoQXQsbm4pfDApK01hdGguaW11bChKdCxJdCl8MCxTPVMrTWF0aC5pbXVsKEp0LG5uKXwwLHk9eStNYXRoLmltdWwoY3QsdnQpfDAs'@;
put 'cD0ocD1wK01hdGguaW11bChjdCxHdCl8MCkrTWF0aC5pbXVsKE90LHZ0KXwwLFM9UytNYXRoLmltdWwoT3QsR3QpfDAseT15K01hdGguaW11bChEZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKERlLE1uKXwwKStNYXRoLmltdWwoJGUsenQpfDAsUz1TK01hdGguaW11bCgkZSxNbil8MCx5PXkr'@;
put 'TWF0aC5pbXVsKHFlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwocWUsQm4pfDApK01hdGguaW11bChodCxzbil8MCxTPVMrTWF0aC5pbXVsKGh0LEJuKXwwLHk9eStNYXRoLmltdWwoT2UscXQpfDAscD0ocD1wK01hdGguaW11bChPZSxIbil8MCkrTWF0aC5pbXVsKGV0LHF0KXwwLFM9UytNYXRo'@;
put 'LmltdWwoZXQsSG4pfDA7dmFyIFhpPShtZSsoeT15K01hdGguaW11bChLZSxjbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKEtlLGpuKXwwKStNYXRoLmltdWwod2UsY24pfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKHdlLGpuKXwwKSsocD4+PjEzKXwwKSsoWGk+Pj4y'@;
put 'Nil8MCxYaSY9NjcxMDg4NjMseT1NYXRoLmltdWwoTnQsSXQpLHA9KHA9TWF0aC5pbXVsKE50LG5uKSkrTWF0aC5pbXVsKGJuLEl0KXwwLFM9TWF0aC5pbXVsKGJuLG5uKSx5PXkrTWF0aC5pbXVsKEF0LHZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoQXQsR3QpfDApK01hdGguaW11bChKdCx2dCl8'@;
put 'MCxTPVMrTWF0aC5pbXVsKEp0LEd0KXwwLHk9eStNYXRoLmltdWwoY3QsenQpfDAscD0ocD1wK01hdGguaW11bChjdCxNbil8MCkrTWF0aC5pbXVsKE90LHp0KXwwLFM9UytNYXRoLmltdWwoT3QsTW4pfDAseT15K01hdGguaW11bChEZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKERlLEJuKXww'@;
put 'KStNYXRoLmltdWwoJGUsc24pfDAsUz1TK01hdGguaW11bCgkZSxCbil8MCx5PXkrTWF0aC5pbXVsKHFlLHF0KXwwLHA9KHA9cCtNYXRoLmltdWwocWUsSG4pfDApK01hdGguaW11bChodCxxdCl8MCxTPVMrTWF0aC5pbXVsKGh0LEhuKXwwO3ZhciBwbz0obWUrKHk9eStNYXRoLmltdWwoT2Us'@;
put 'Y24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChPZSxqbil8MCkrTWF0aC5pbXVsKGV0LGNuKXwwKSk8PDEzKXwwO21lPSgoUz1TK01hdGguaW11bChldCxqbil8MCkrKHA+Pj4xMyl8MCkrKHBvPj4+MjYpfDAscG8mPTY3MTA4ODYzLHk9TWF0aC5pbXVsKE50LHZ0KSxwPShwPU1h'@;
put 'dGguaW11bChOdCxHdCkpK01hdGguaW11bChibix2dCl8MCxTPU1hdGguaW11bChibixHdCkseT15K01hdGguaW11bChBdCx6dCl8MCxwPShwPXArTWF0aC5pbXVsKEF0LE1uKXwwKStNYXRoLmltdWwoSnQsenQpfDAsUz1TK01hdGguaW11bChKdCxNbil8MCx5PXkrTWF0aC5pbXVsKGN0LHNu'@;
put 'KXwwLHA9KHA9cCtNYXRoLmltdWwoY3QsQm4pfDApK01hdGguaW11bChPdCxzbil8MCxTPVMrTWF0aC5pbXVsKE90LEJuKXwwLHk9eStNYXRoLmltdWwoRGUscXQpfDAscD0ocD1wK01hdGguaW11bChEZSxIbil8MCkrTWF0aC5pbXVsKCRlLHF0KXwwLFM9UytNYXRoLmltdWwoJGUsSG4pfDA7'@;
put 'dmFyIF9yPShtZSsoeT15K01hdGguaW11bChxZSxjbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKHFlLGpuKXwwKStNYXRoLmltdWwoaHQsY24pfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKGh0LGpuKXwwKSsocD4+PjEzKXwwKSsoX3I+Pj4yNil8MCxfciY9NjcxMDg4'@;
put 'NjMseT1NYXRoLmltdWwoTnQsenQpLHA9KHA9TWF0aC5pbXVsKE50LE1uKSkrTWF0aC5pbXVsKGJuLHp0KXwwLFM9TWF0aC5pbXVsKGJuLE1uKSx5PXkrTWF0aC5pbXVsKEF0LHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoQXQsQm4pfDApK01hdGguaW11bChKdCxzbil8MCxTPVMrTWF0aC5pbXVs'@;
put 'KEp0LEJuKXwwLHk9eStNYXRoLmltdWwoY3QscXQpfDAscD0ocD1wK01hdGguaW11bChjdCxIbil8MCkrTWF0aC5pbXVsKE90LHF0KXwwLFM9UytNYXRoLmltdWwoT3QsSG4pfDA7dmFyIEZpPShtZSsoeT15K01hdGguaW11bChEZSxjbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVs'@;
put 'KERlLGpuKXwwKStNYXRoLmltdWwoJGUsY24pfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKCRlLGpuKXwwKSsocD4+PjEzKXwwKSsoRmk+Pj4yNil8MCxGaSY9NjcxMDg4NjMseT1NYXRoLmltdWwoTnQsc24pLHA9KHA9TWF0aC5pbXVsKE50LEJuKSkrTWF0aC5pbXVsKGJuLHNuKXww'@;
put 'LFM9TWF0aC5pbXVsKGJuLEJuKSx5PXkrTWF0aC5pbXVsKEF0LHF0KXwwLHA9KHA9cCtNYXRoLmltdWwoQXQsSG4pfDApK01hdGguaW11bChKdCxxdCl8MCxTPVMrTWF0aC5pbXVsKEp0LEhuKXwwO3ZhciBIbz0obWUrKHk9eStNYXRoLmltdWwoY3QsY24pfDApfDApKygoODE5MSYocD0ocD1w'@;
put 'K01hdGguaW11bChjdCxqbil8MCkrTWF0aC5pbXVsKE90LGNuKXwwKSk8PDEzKXwwO21lPSgoUz1TK01hdGguaW11bChPdCxqbil8MCkrKHA+Pj4xMyl8MCkrKEhvPj4+MjYpfDAsSG8mPTY3MTA4ODYzLHk9TWF0aC5pbXVsKE50LHF0KSxwPShwPU1hdGguaW11bChOdCxIbikpK01hdGguaW11'@;
put 'bChibixxdCl8MCxTPU1hdGguaW11bChibixIbik7dmFyIGdhPShtZSsoeT15K01hdGguaW11bChBdCxjbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKEF0LGpuKXwwKStNYXRoLmltdWwoSnQsY24pfDApKTw8MTMpfDA7bWU9KChTPVMrTWF0aC5pbXVsKEp0LGpuKXwwKSsocD4+'@;
put 'PjEzKXwwKSsoZ2E+Pj4yNil8MCxnYSY9NjcxMDg4NjM7dmFyIGxhPShtZSsoeT1NYXRoLmltdWwoTnQsY24pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKE50LGpuKSkrTWF0aC5pbXVsKGJuLGNuKXwwKSk8PDEzKXwwO3JldHVybiBtZT0oKFM9TWF0aC5pbXVsKGJuLGpuKSkrKHA+Pj4x'@;
put 'Myl8MCkrKGxhPj4+MjYpfDAsbGEmPTY3MTA4ODYzLGZlWzBdPVhyLGZlWzFdPXZpLGZlWzJdPUVyLGZlWzNdPVlpLGZlWzRdPUpyLGZlWzVdPWFvLGZlWzZdPUJyLGZlWzddPUppLGZlWzhdPXRvLGZlWzldPWNvLGZlWzEwXT1sbyxmZVsxMV09c28sZmVbMTJdPVhpLGZlWzEzXT1wbyxmZVsx'@;
put 'NF09X3IsZmVbMTVdPUZpLGZlWzE2XT1IbyxmZVsxN109Z2EsZmVbMThdPWxhLDAhPT1tZSYmKGZlWzE5XT1tZSxNLmxlbmd0aCsrKSxNfTtmdW5jdGlvbiBpZShnLEMsTSl7cmV0dXJuKG5ldyBsZSkubXVscChnLEMsTSl9ZnVuY3Rpb24gbGUoZyxDKXt0aGlzLng9Zyx0aGlzLnk9Q31NYXRo'@;
put 'LmltdWx8fChuZT10ZSksRS5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oZyxDKXt2YXIgeT10aGlzLmxlbmd0aCtnLmxlbmd0aDtyZXR1cm4gMTA9PT10aGlzLmxlbmd0aCYmMTA9PT1nLmxlbmd0aD9uZSh0aGlzLGcsQyk6eTw2Mz90ZSh0aGlzLGcsQyk6eTwxMDI0P2Z1bmN0aW9uKHAsUyxR'@;
put 'KXtRLm5lZ2F0aXZlPVMubmVnYXRpdmVecC5uZWdhdGl2ZSxRLmxlbmd0aD1wLmxlbmd0aCtTLmxlbmd0aDtmb3IodmFyIHJlPTAsZmU9MCxtZT0wO21lPFEubGVuZ3RoLTE7bWUrKyl7dmFyIGtlPWZlO2ZlPTA7Zm9yKHZhciBUZT02NzEwODg2MyZyZSxQZT1NYXRoLm1pbihtZSxTLmxlbmd0'@;
put 'aC0xKSxGZT1NYXRoLm1heCgwLG1lLXAubGVuZ3RoKzEpO0ZlPD1QZTtGZSsrKXt2YXIgTGU9KDB8cC53b3Jkc1ttZS1GZV0pKigwfFMud29yZHNbRmVdKSxCZT02NzEwODg2MyZMZTtUZT02NzEwODg2MyYoQmU9QmUrVGV8MCksZmUrPShrZT0oa2U9a2UrKExlLzY3MTA4ODY0fDApfDApKyhC'@;
put 'ZT4+PjI2KXwwKT4+PjI2LGtlJj02NzEwODg2M31RLndvcmRzW21lXT1UZSxyZT1rZSxrZT1mZX1yZXR1cm4gMCE9PXJlP1Eud29yZHNbbWVdPXJlOlEubGVuZ3RoLS0sUS5zdHJpcCgpfSh0aGlzLGcsQyk6aWUodGhpcyxnLEMpfSxsZS5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihnKXtm'@;
put 'b3IodmFyIEM9bmV3IEFycmF5KGcpLE09RS5wcm90b3R5cGUuX2NvdW50Qml0cyhnKS0xLHk9MDt5PGc7eSsrKUNbeV09dGhpcy5yZXZCaW4oeSxNLGcpO3JldHVybiBDfSxsZS5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKGcsQyxNKXtpZigwPT09Z3x8Zz09PU0tMSlyZXR1cm4gZztmb3Io'@;
put 'dmFyIHk9MCxwPTA7cDxDO3ArKyl5fD0oMSZnKTw8Qy1wLTEsZz4+PTE7cmV0dXJuIHl9LGxlLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKGcsQyxNLHkscCxTKXtmb3IodmFyIFE9MDtRPFM7USsrKXlbUV09Q1tnW1FdXSxwW1FdPU1bZ1tRXV19LGxlLnByb3RvdHlwZS50cmFuc2Zvcm09'@;
put 'ZnVuY3Rpb24oZyxDLE0seSxwLFMpe3RoaXMucGVybXV0ZShTLGcsQyxNLHkscCk7Zm9yKHZhciBRPTE7UTxwO1E8PD0xKWZvcih2YXIgcmU9UTw8MSxmZT1NYXRoLmNvcygyKk1hdGguUEkvcmUpLG1lPU1hdGguc2luKDIqTWF0aC5QSS9yZSksa2U9MDtrZTxwO2tlKz1yZSlmb3IodmFyIFRl'@;
put 'PWZlLFBlPW1lLEZlPTA7RmU8UTtGZSsrKXt2YXIgTmU9TVtrZStGZV0sTGU9eVtrZStGZV0sQmU9TVtrZStGZStRXSxIZT15W2tlK0ZlK1FdLFFlPVRlKkJlLVBlKkhlO0hlPVRlKkhlK1BlKkJlLE1ba2UrRmVdPU5lKyhCZT1RZSkseVtrZStGZV09TGUrSGUsTVtrZStGZStRXT1OZS1CZSx5'@;
put 'W2tlK0ZlK1FdPUxlLUhlLEZlIT09cmUmJihRZT1mZSpUZS1tZSpQZSxQZT1mZSpQZSttZSpUZSxUZT1RZSl9fSxsZS5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oZyxDKXt2YXIgTT0xfE1hdGgubWF4KEMsZykseT0xJk0scD0wO2ZvcihNPU0vMnwwO007TT4+Pj0xKXArKztyZXR1'@;
put 'cm4gMTw8cCsxK3l9LGxlLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oZyxDLE0pe2lmKCEoTTw9MSkpZm9yKHZhciB5PTA7eTxNLzI7eSsrKXt2YXIgcD1nW3ldO2dbeV09Z1tNLXktMV0sZ1tNLXktMV09cCxwPUNbeV0sQ1t5XT0tQ1tNLXktMV0sQ1tNLXktMV09LXB9fSxsZS5wcm90'@;
put 'b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKGcsQyl7Zm9yKHZhciBNPTAseT0wO3k8Qy8yO3krKyl7dmFyIHA9ODE5MipNYXRoLnJvdW5kKGdbMip5KzFdL0MpK01hdGgucm91bmQoZ1syKnldL0MpK007Z1t5XT02NzEwODg2MyZwLE09cDw2NzEwODg2ND8wOnAvNjcxMDg4NjR8MH1yZXR1'@;
put 'cm4gZ30sbGUucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oZyxDLE0seSl7Zm9yKHZhciBwPTAsUz0wO1M8QztTKyspTVsyKlNdPTgxOTEmKHArPTB8Z1tTXSksTVsyKlMrMV09ODE5MSYocD4+Pj0xMykscD4+Pj0xMztmb3IoUz0yKkM7Uzx5OysrUylNW1NdPTA7SSgwPT09cCksSSgw'@;
put 'PT0oLTgxOTImcCkpfSxsZS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihnKXtmb3IodmFyIEM9bmV3IEFycmF5KGcpLE09MDtNPGc7TSsrKUNbTV09MDtyZXR1cm4gQ30sbGUucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oZyxDLE0pe3ZhciB5PTIqdGhpcy5ndWVzc0xlbjEzYihnLmxlbmd0aCxD'@;
put 'Lmxlbmd0aCkscD10aGlzLm1ha2VSQlQoeSksUz10aGlzLnN0dWIoeSksUT1uZXcgQXJyYXkoeSkscmU9bmV3IEFycmF5KHkpLGZlPW5ldyBBcnJheSh5KSxtZT1uZXcgQXJyYXkoeSksa2U9bmV3IEFycmF5KHkpLFRlPW5ldyBBcnJheSh5KSxQZT1NLndvcmRzO1BlLmxlbmd0aD15LHRoaXMu'@;
put 'Y29udmVydDEzYihnLndvcmRzLGcubGVuZ3RoLFEseSksdGhpcy5jb252ZXJ0MTNiKEMud29yZHMsQy5sZW5ndGgsbWUseSksdGhpcy50cmFuc2Zvcm0oUSxTLHJlLGZlLHkscCksdGhpcy50cmFuc2Zvcm0obWUsUyxrZSxUZSx5LHApO2Zvcih2YXIgRmU9MDtGZTx5O0ZlKyspe3ZhciBOZT1y'@;
put 'ZVtGZV0qa2VbRmVdLWZlW0ZlXSpUZVtGZV07ZmVbRmVdPXJlW0ZlXSpUZVtGZV0rZmVbRmVdKmtlW0ZlXSxyZVtGZV09TmV9cmV0dXJuIHRoaXMuY29uanVnYXRlKHJlLGZlLHkpLHRoaXMudHJhbnNmb3JtKHJlLGZlLFBlLFMseSxwKSx0aGlzLmNvbmp1Z2F0ZShQZSxTLHkpLHRoaXMubm9y'@;
put 'bWFsaXplMTNiKFBlLHkpLE0ubmVnYXRpdmU9Zy5uZWdhdGl2ZV5DLm5lZ2F0aXZlLE0ubGVuZ3RoPWcubGVuZ3RoK0MubGVuZ3RoLE0uc3RyaXAoKX0sRS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcpe3ZhciBDPW5ldyBFKG51bGwpO3JldHVybiBDLndvcmRzPW5ldyBBcnJheSh0aGlzLmxl'@;
put 'bmd0aCtnLmxlbmd0aCksdGhpcy5tdWxUbyhnLEMpfSxFLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKGcpe3ZhciBDPW5ldyBFKG51bGwpO3JldHVybiBDLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksaWUodGhpcyxnLEMpfSxFLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9u'@;
put 'KGcpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oZyx0aGlzKX0sRS5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCk7Zm9yKHZhciBDPTAsTT0wO008dGhpcy5sZW5ndGg7TSsrKXt2YXIgeT0oMHx0aGlzLndvcmRzW01dKSpn'@;
put 'LHA9KDY3MTA4ODYzJnkpKyg2NzEwODg2MyZDKTtDPj49MjYsQys9eS82NzEwODg2NHwwLEMrPXA+Pj4yNix0aGlzLndvcmRzW01dPTY3MTA4ODYzJnB9cmV0dXJuIDAhPT1DJiYodGhpcy53b3Jkc1tNXT1DLHRoaXMubGVuZ3RoKyspLHRoaXN9LEUucHJvdG90eXBlLm11bG49ZnVuY3Rpb24o'@;
put 'Zyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihnKX0sRS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxFLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSxFLnByb3RvdHlwZS5wb3c9ZnVuY3Rp'@;
put 'b24oZyl7dmFyIEM9ZnVuY3Rpb24oUyl7Zm9yKHZhciBRPW5ldyBBcnJheShTLmJpdExlbmd0aCgpKSxyZT0wO3JlPFEubGVuZ3RoO3JlKyspe3ZhciBtZT1yZSUyNjtRW3JlXT0oUy53b3Jkc1tyZS8yNnwwXSYxPDxtZSk+Pj5tZX1yZXR1cm4gUX0oZyk7aWYoMD09PUMubGVuZ3RoKXJldHVy'@;
put 'biBuZXcgRSgxKTtmb3IodmFyIE09dGhpcyx5PTA7eTxDLmxlbmd0aCYmMD09PUNbeV07eSsrLE09TS5zcXIoKSk7aWYoKyt5PEMubGVuZ3RoKWZvcih2YXIgcD1NLnNxcigpO3k8Qy5sZW5ndGg7eSsrLHA9cC5zcXIoKSkwIT09Q1t5XSYmKE09TS5tdWwocCkpO3JldHVybiBNfSxFLnByb3Rv'@;
put 'dHlwZS5pdXNobG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBDLE09ZyUyNix5PShnLU0pLzI2LHA9NjcxMDg4NjM+Pj4yNi1NPDwyNi1NO2lmKDAhPT1NKXt2YXIgUz0wO2ZvcihDPTA7Qzx0aGlzLmxlbmd0aDtDKyspe3ZhciBRPXRoaXMud29yZHNbQ10m'@;
put 'cDt0aGlzLndvcmRzW0NdPSgwfHRoaXMud29yZHNbQ10pLVE8PE18UyxTPVE+Pj4yNi1NfVMmJih0aGlzLndvcmRzW0NdPVMsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PXkpe2ZvcihDPXRoaXMubGVuZ3RoLTE7Qz49MDtDLS0pdGhpcy53b3Jkc1tDK3ldPXRoaXMud29yZHNbQ107Zm9yKEM9MDtD'@;
put 'PHk7QysrKXRoaXMud29yZHNbQ109MDt0aGlzLmxlbmd0aCs9eX1yZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oZyl9LEUucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihnLEMs'@;
put 'TSl7dmFyIHk7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApLHk9Qz8oQy1DJTI2KS8yNjowO3ZhciBwPWclMjYsUz1NYXRoLm1pbigoZy1wKS8yNix0aGlzLmxlbmd0aCksUT02NzEwODg2M142NzEwODg2Mz4+PnA8PHAscmU9TTtpZih5LT1TLHk9TWF0aC5tYXgoMCx5KSxyZSl7Zm9yKHZh'@;
put 'ciBmZT0wO2ZlPFM7ZmUrKylyZS53b3Jkc1tmZV09dGhpcy53b3Jkc1tmZV07cmUubGVuZ3RoPVN9aWYoMCE9PVMpaWYodGhpcy5sZW5ndGg+Uylmb3IodGhpcy5sZW5ndGgtPVMsZmU9MDtmZTx0aGlzLmxlbmd0aDtmZSsrKXRoaXMud29yZHNbZmVdPXRoaXMud29yZHNbZmUrU107ZWxzZSB0'@;
put 'aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgbWU9MDtmb3IoZmU9dGhpcy5sZW5ndGgtMTtmZT49MCYmKDAhPT1tZXx8ZmU+PXkpO2ZlLS0pe3ZhciBrZT0wfHRoaXMud29yZHNbZmVdO3RoaXMud29yZHNbZmVdPW1lPDwyNi1wfGtlPj4+cCxtZT1rZSZRfXJldHVybiByZSYmMCE9'@;
put 'PW1lJiYocmUud29yZHNbcmUubGVuZ3RoKytdPW1lKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihnLEMsTSl7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVz'@;
put 'aHJuKGcsQyxNKX0sRS5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKGcpfSxFLnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihnKX0sRS5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihnKXtyZXR1'@;
put 'cm4gdGhpcy5jbG9uZSgpLmlzaHJuKGcpfSxFLnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihnKX0sRS5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBDPWclMjYsTT0oZy1DKS8y'@;
put 'NjtyZXR1cm4hKHRoaXMubGVuZ3RoPD1NfHwhKHRoaXMud29yZHNbTV0mMTw8QykpfSxFLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBDPWclMjYsTT0oZy1DKS8yNjtyZXR1cm4gSSgwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tu'@;
put 'IHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PU0/dGhpczooMCE9PUMmJk0rKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihNLHRoaXMubGVuZ3RoKSwwIT09QyYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+Qzw8Qyks'@;
put 'dGhpcy5zdHJpcCgpKX0sRS5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oZyl9LEUucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKGcpe3JldHVybiBJKCJudW1iZXIiPT10eXBlb2YgZyksSShnPDY3MTA4ODY0KSxnPDA/dGhpcy5pc3Vibigt'@;
put 'Zyk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxnPyh0aGlzLndvcmRzWzBdPWctKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhp'@;
put 'cyk6dGhpcy5faWFkZG4oZyl9LEUucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihnKXt0aGlzLndvcmRzWzBdKz1nO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbQ10+PTY3MTA4ODY0O0MrKyl0aGlzLndvcmRzW0NdLT02NzEwODg2NCxDPT09dGhpcy5sZW5ndGgtMT90'@;
put 'aGlzLndvcmRzW0MrMV09MTp0aGlzLndvcmRzW0MrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsQysxKSx0aGlzfSxFLnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihnKXtpZihJKCJudW1iZXIiPT10eXBlb2YgZyksSShnPDY3MTA4ODY0KSxnPDApcmV0dXJu'@;
put 'IHRoaXMuaWFkZG4oLWcpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1nLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRo'@;
put 'aXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tDXTwwO0MrKyl0aGlzLndvcmRzW0NdKz02NzEwODg2NCx0aGlzLndvcmRzW0MrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuYWRkbj1mdW5j'@;
put 'dGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKGcpfSxFLnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4oZyl9LEUucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LEUucHJvdG90eXBl'@;
put 'LmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSxFLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oZyxDLE0pe3ZhciB5LHA7dGhpcy5fZXhwYW5kKGcubGVuZ3RoK00pO3ZhciBRPTA7Zm9yKHk9MDt5PGcubGVuZ3RoO3krKyl7cD0oMHx0aGlzLndvcmRz'@;
put 'W3krTV0pK1E7dmFyIHJlPSgwfGcud29yZHNbeV0pKkM7UT0oKHAtPTY3MTA4ODYzJnJlKT4+MjYpLShyZS82NzEwODg2NHwwKSx0aGlzLndvcmRzW3krTV09NjcxMDg4NjMmcH1mb3IoO3k8dGhpcy5sZW5ndGgtTTt5KyspUT0ocD0oMHx0aGlzLndvcmRzW3krTV0pK1EpPj4yNix0aGlzLndv'@;
put 'cmRzW3krTV09NjcxMDg4NjMmcDtpZigwPT09USlyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihJKC0xPT09USksUT0wLHk9MDt5PHRoaXMubGVuZ3RoO3krKylRPShwPS0oMHx0aGlzLndvcmRzW3ldKStRKT4+MjYsdGhpcy53b3Jkc1t5XT02NzEwODg2MyZwO3JldHVybiB0aGlzLm5lZ2F0aXZl'@;
put 'PTEsdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihnLEMpe3ZhciBNLHk9dGhpcy5jbG9uZSgpLHA9ZyxTPTB8cC53b3Jkc1twLmxlbmd0aC0xXTswIT0oTT0yNi10aGlzLl9jb3VudEJpdHMoUykpJiYocD1wLnVzaGxuKE0pLHkuaXVzaGxuKE0pLFM9MHxwLndv'@;
put 'cmRzW3AubGVuZ3RoLTFdKTt2YXIgUSxyZT15Lmxlbmd0aC1wLmxlbmd0aDtpZigibW9kIiE9PUMpeyhRPW5ldyBFKG51bGwpKS5sZW5ndGg9cmUrMSxRLndvcmRzPW5ldyBBcnJheShRLmxlbmd0aCk7Zm9yKHZhciBmZT0wO2ZlPFEubGVuZ3RoO2ZlKyspUS53b3Jkc1tmZV09MH12YXIgbWU9'@;
put 'eS5jbG9uZSgpLl9pc2hsbnN1Ym11bChwLDEscmUpOzA9PT1tZS5uZWdhdGl2ZSYmKHk9bWUsUSYmKFEud29yZHNbcmVdPTEpKTtmb3IodmFyIGtlPXJlLTE7a2U+PTA7a2UtLSl7dmFyIFRlPTY3MTA4ODY0KigwfHkud29yZHNbcC5sZW5ndGgra2VdKSsoMHx5LndvcmRzW3AubGVuZ3RoK2tl'@;
put 'LTFdKTtmb3IoVGU9TWF0aC5taW4oVGUvU3wwLDY3MTA4ODYzKSx5Ll9pc2hsbnN1Ym11bChwLFRlLGtlKTswIT09eS5uZWdhdGl2ZTspVGUtLSx5Lm5lZ2F0aXZlPTAseS5faXNobG5zdWJtdWwocCwxLGtlKSx5LmlzWmVybygpfHwoeS5uZWdhdGl2ZV49MSk7USYmKFEud29yZHNba2VdPVRl'@;
put 'KX1yZXR1cm4gUSYmUS5zdHJpcCgpLHkuc3RyaXAoKSwiZGl2IiE9PUMmJjAhPT1NJiZ5Lml1c2hybihNKSx7ZGl2OlF8fG51bGwsbW9kOnl9fSxFLnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24oZyxDLE0pe3JldHVybiBJKCFnLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IEUo'@;
put 'MCksbW9kOm5ldyBFKDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmU/KFM9dGhpcy5uZWcoKS5kaXZtb2QoZyxDKSwibW9kIiE9PUMmJih5PVMuZGl2Lm5lZygpKSwiZGl2IiE9PUMmJihwPVMubW9kLm5lZygpLE0mJjAhPT1wLm5lZ2F0aXZlJiZwLmlhZGQoZykpLHtkaXY6'@;
put 'eSxtb2Q6cH0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZT8oUz10aGlzLmRpdm1vZChnLm5lZygpLEMpLCJtb2QiIT09QyYmKHk9Uy5kaXYubmVnKCkpLHtkaXY6eSxtb2Q6Uy5tb2R9KTp0aGlzLm5lZ2F0aXZlJmcubmVnYXRpdmU/KFM9dGhpcy5uZWcoKS5kaXZtb2QoZy5u'@;
put 'ZWcoKSxDKSwiZGl2IiE9PUMmJihwPVMubW9kLm5lZygpLE0mJjAhPT1wLm5lZ2F0aXZlJiZwLmlzdWIoZykpLHtkaXY6Uy5kaXYsbW9kOnB9KTpnLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAoZyk8MD97ZGl2Om5ldyBFKDApLG1vZDp0aGlzfToxPT09Zy5sZW5ndGg/ImRpdiI9PT1D'@;
put 'P3tkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PUM/e2RpdjpudWxsLG1vZDpuZXcgRSh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bmV3IEUodGhpcy5tb2RuKGcud29yZHNbMF0pKX06dGhpcy5fd29yZERp'@;
put 'dihnLEMpO3ZhciB5LHAsU30sRS5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJkaXYiLCExKS5kaXZ9LEUucHJvdG90eXBlLm1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMSkubW9kfSxFLnByb3RvdHlwZS51bW9kPWZ1'@;
put 'bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJtb2QiLCEwKS5tb2R9LEUucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKGcpe3ZhciBDPXRoaXMuZGl2bW9kKGcpO2lmKEMubW9kLmlzWmVybygpKXJldHVybiBDLmRpdjt2YXIgTT0wIT09Qy5kaXYubmVnYXRpdmU/Qy5tb2QuaXN1'@;
put 'YihnKTpDLm1vZCx5PWcudXNocm4oMSkscD1nLmFuZGxuKDEpLFM9TS5jbXAoeSk7cmV0dXJuIFM8MHx8MT09PXAmJjA9PT1TP0MuZGl2OjAhPT1DLmRpdi5uZWdhdGl2ZT9DLmRpdi5pc3VibigxKTpDLmRpdi5pYWRkbigxKX0sRS5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihnKXtJKGc8PTY3'@;
put 'MTA4ODYzKTtmb3IodmFyIEM9NjcxMDg4NjQlZyxNPTAseT10aGlzLmxlbmd0aC0xO3k+PTA7eS0tKU09KEMqTSsoMHx0aGlzLndvcmRzW3ldKSklZztyZXR1cm4gTX0sRS5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24oZyl7SShnPD02NzEwODg2Myk7Zm9yKHZhciBDPTAsTT10aGlzLmxlbmd0'@;
put 'aC0xO00+PTA7TS0tKXt2YXIgeT0oMHx0aGlzLndvcmRzW01dKSs2NzEwODg2NCpDO3RoaXMud29yZHNbTV09eS9nfDAsQz15JWd9cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKGcpfSxFLnByb3RvdHlw'@;
put 'ZS5lZ2NkPWZ1bmN0aW9uKGcpe0koMD09PWcubmVnYXRpdmUpLEkoIWcuaXNaZXJvKCkpO3ZhciBDPXRoaXMsTT1nLmNsb25lKCk7Qz0wIT09Qy5uZWdhdGl2ZT9DLnVtb2QoZyk6Qy5jbG9uZSgpO2Zvcih2YXIgeT1uZXcgRSgxKSxwPW5ldyBFKDApLFM9bmV3IEUoMCksUT1uZXcgRSgxKSxy'@;
put 'ZT0wO0MuaXNFdmVuKCkmJk0uaXNFdmVuKCk7KUMuaXVzaHJuKDEpLE0uaXVzaHJuKDEpLCsrcmU7Zm9yKHZhciBmZT1NLmNsb25lKCksbWU9Qy5jbG9uZSgpOyFDLmlzWmVybygpOyl7Zm9yKHZhciBrZT0wLFRlPTE7IShDLndvcmRzWzBdJlRlKSYma2U8MjY7KytrZSxUZTw8PTEpO2lmKGtl'@;
put 'PjApZm9yKEMuaXVzaHJuKGtlKTtrZS0tID4wOykoeS5pc09kZCgpfHxwLmlzT2RkKCkpJiYoeS5pYWRkKGZlKSxwLmlzdWIobWUpKSx5Lml1c2hybigxKSxwLml1c2hybigxKTtmb3IodmFyIFBlPTAsRmU9MTshKE0ud29yZHNbMF0mRmUpJiZQZTwyNjsrK1BlLEZlPDw9MSk7aWYoUGU+MClm'@;
put 'b3IoTS5pdXNocm4oUGUpO1BlLS0gPjA7KShTLmlzT2RkKCl8fFEuaXNPZGQoKSkmJihTLmlhZGQoZmUpLFEuaXN1YihtZSkpLFMuaXVzaHJuKDEpLFEuaXVzaHJuKDEpO0MuY21wKE0pPj0wPyhDLmlzdWIoTSkseS5pc3ViKFMpLHAuaXN1YihRKSk6KE0uaXN1YihDKSxTLmlzdWIoeSksUS5p'@;
put 'c3ViKHApKX1yZXR1cm57YTpTLGI6USxnY2Q6TS5pdXNobG4ocmUpfX0sRS5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKGcpe0koMD09PWcubmVnYXRpdmUpLEkoIWcuaXNaZXJvKCkpO3ZhciBDPXRoaXMsTT1nLmNsb25lKCk7Qz0wIT09Qy5uZWdhdGl2ZT9DLnVtb2QoZyk6Qy5jbG9uZSgp'@;
put 'O2Zvcih2YXIgeSxwPW5ldyBFKDEpLFM9bmV3IEUoMCksUT1NLmNsb25lKCk7Qy5jbXBuKDEpPjAmJk0uY21wbigxKT4wOyl7Zm9yKHZhciByZT0wLGZlPTE7IShDLndvcmRzWzBdJmZlKSYmcmU8MjY7KytyZSxmZTw8PTEpO2lmKHJlPjApZm9yKEMuaXVzaHJuKHJlKTtyZS0tID4wOylwLmlz'@;
put 'T2RkKCkmJnAuaWFkZChRKSxwLml1c2hybigxKTtmb3IodmFyIG1lPTAsa2U9MTshKE0ud29yZHNbMF0ma2UpJiZtZTwyNjsrK21lLGtlPDw9MSk7aWYobWU+MClmb3IoTS5pdXNocm4obWUpO21lLS0gPjA7KVMuaXNPZGQoKSYmUy5pYWRkKFEpLFMuaXVzaHJuKDEpO0MuY21wKE0pPj0wPyhD'@;
put 'LmlzdWIoTSkscC5pc3ViKFMpKTooTS5pc3ViKEMpLFMuaXN1YihwKSl9cmV0dXJuKHk9MD09PUMuY21wbigxKT9wOlMpLmNtcG4oMCk8MCYmeS5pYWRkKGcpLHl9LEUucHJvdG90eXBlLmdjZD1mdW5jdGlvbihnKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBnLmFicygpO2lmKGcuaXNaZXJv'@;
put 'KCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIEM9dGhpcy5jbG9uZSgpLE09Zy5jbG9uZSgpO0MubmVnYXRpdmU9MCxNLm5lZ2F0aXZlPTA7Zm9yKHZhciB5PTA7Qy5pc0V2ZW4oKSYmTS5pc0V2ZW4oKTt5KyspQy5pdXNocm4oMSksTS5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO0MuaXNFdmVuKCk7'@;
put 'KUMuaXVzaHJuKDEpO2Zvcig7TS5pc0V2ZW4oKTspTS5pdXNocm4oMSk7dmFyIHA9Qy5jbXAoTSk7aWYocDwwKXt2YXIgUz1DO0M9TSxNPVN9ZWxzZSBpZigwPT09cHx8MD09PU0uY21wbigxKSlicmVhaztDLmlzdWIoTSl9cmV0dXJuIE0uaXVzaGxuKHkpfSxFLnByb3RvdHlwZS5pbnZtPWZ1'@;
put 'bmN0aW9uKGcpe3JldHVybiB0aGlzLmVnY2QoZykuYS51bW9kKGcpfSxFLnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09KDEmdGhpcy53b3Jkc1swXSl9LEUucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PSgxJnRoaXMud29yZHNbMF0pfSxFLnByb3Rv'@;
put 'dHlwZS5hbmRsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZnfSxFLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyk7dmFyIEM9ZyUyNixNPShnLUMpLzI2LHk9MTw8QztpZih0aGlzLmxlbmd0aDw9TSlyZXR1cm4gdGhpcy5fZXhwYW5k'@;
put 'KE0rMSksdGhpcy53b3Jkc1tNXXw9eSx0aGlzO2Zvcih2YXIgcD15LFM9TTswIT09cCYmUzx0aGlzLmxlbmd0aDtTKyspe3ZhciBRPTB8dGhpcy53b3Jkc1tTXTtwPShRKz1wKT4+PjI2LHRoaXMud29yZHNbU109USY9NjcxMDg4NjN9cmV0dXJuIDAhPT1wJiYodGhpcy53b3Jkc1tTXT1wLHRo'@;
put 'aXMubGVuZ3RoKyspLHRoaXN9LEUucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxFLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKGcpe3ZhciBDLE09ZzwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhTSlyZXR1cm4t'@;
put 'MTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmTSlyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSlDPTE7ZWxzZXtNJiYoZz0tZyksSShnPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgeT0wfHRoaXMud29yZHNbMF07Qz15PT09Zz8wOnk8Zz8tMToxfXJldHVy'@;
put 'biAwIT09dGhpcy5uZWdhdGl2ZT8wfC1DOkN9LEUucHJvdG90eXBlLmNtcD1mdW5jdGlvbihnKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBDPXRoaXMudWNtcChn'@;
put 'KTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtQzpDfSxFLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKGcpe2lmKHRoaXMubGVuZ3RoPmcubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPGcubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgQz0wLE09dGhpcy5sZW5ndGgtMTtNPj0wO00t'@;
put 'LSl7dmFyIHk9MHx0aGlzLndvcmRzW01dLHA9MHxnLndvcmRzW01dO2lmKHkhPT1wKXt5PHA/Qz0tMTp5PnAmJihDPTEpO2JyZWFrfX1yZXR1cm4gQ30sRS5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5jbXBuKGcpfSxFLnByb3RvdHlwZS5ndD1mdW5jdGlvbihn'@;
put 'KXtyZXR1cm4gMT09PXRoaXMuY21wKGcpfSxFLnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk+PTB9LEUucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAoZyk+PTB9LEUucHJvdG90eXBlLmx0bj1mdW5jdGlvbihnKXtyZXR1cm4t'@;
put 'MT09PXRoaXMuY21wbihnKX0sRS5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcChnKX0sRS5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPD0wfSxFLnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21w'@;
put 'KGcpPD0wfSxFLnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcG4oZyl9LEUucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXAoZyl9LEUucmVkPWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgTihnKX0sRS5wcm90b3R5cGUudG9SZWQ9'@;
put 'ZnVuY3Rpb24oZyl7cmV0dXJuIEkoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksSSgwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQoZyl9LEUucHJvdG90'@;
put 'eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSxFLnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJu'@;
put 'IHRoaXMucmVkPWcsdGhpc30sRS5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQoZyl9LEUucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihnKXtyZXR1'@;
put 'cm4gSSh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRo'@;
put 'aXMucmVkLmlhZGQodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24oZyl7cmV0'@;
put 'dXJuIEkodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0'@;
put 'aGlzLnJlZC5zaGwodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5tdWwodGhpcyxnKX0sRS5wcm90b3R5'@;
put 'cGUucmVkSU11bD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQuaW11bCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4g'@;
put 'SSh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sRS5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0'@;
put 'aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LEUucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5'@;
put 'MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSxFLnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sRS5w'@;
put 'cm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LEUucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihnKXtyZXR1cm4g'@;
put 'SSh0aGlzLnJlZCYmIWcucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLGcpfTt2YXIgZGU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiB1ZShnLEMpe3RoaXMubmFtZT1n'@;
put 'LHRoaXMucD1uZXcgRShDLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgRSgxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gY2UoKXt1ZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBm'@;
put 'ZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIFkoKXt1ZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIGIo'@;
put 'KXt1ZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIHgoKXt1ZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYg'@;
put 'ZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIE4oZyl7aWYoInN0cmluZyI9PXR5cGVvZiBnKXt2YXIgQz1FLl9wcmltZShnKTt0aGlzLm09Qy5wLHRoaXMucHJpbWU9Q31lbHNlIEkoZy5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1nLHRoaXMucHJp'@;
put 'bWU9bnVsbH1mdW5jdGlvbiBGKGcpe04uY2FsbCh0aGlzLGcpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IEUoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5p'@;
put 'bW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWlu'@;
put 'dil9dWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgZz1uZXcgRShudWxsKTtyZXR1cm4gZy53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLGd9LHVlLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKGcpe3ZhciBDLE09Zztkb3t0aGlzLnNwbGl0KE0sdGhpcy50'@;
put 'bXApLEM9KE09KE09dGhpcy5pbXVsSyhNKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKEM+dGhpcy5uKTt2YXIgeT1DPHRoaXMubj8tMTpNLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PXk/KE0ud29yZHNbMF09MCxNLmxlbmd0aD0xKTp5PjA/TS5pc3ViKHRoaXMucCk6dm9p'@;
put 'ZCAwIT09TS5zdHJpcD9NLnN0cmlwKCk6TS5fc3RyaXAoKSxNfSx1ZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyxDKXtnLml1c2hybih0aGlzLm4sMCxDKX0sdWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe3JldHVybiBnLmltdWwodGhpcy5rKX0sUihjZSx1ZSksY2UucHJvdG90'@;
put 'eXBlLnNwbGl0PWZ1bmN0aW9uKGcsQyl7Zm9yKHZhciBNPTQxOTQzMDMseT1NYXRoLm1pbihnLmxlbmd0aCw5KSxwPTA7cDx5O3ArKylDLndvcmRzW3BdPWcud29yZHNbcF07aWYoQy5sZW5ndGg9eSxnLmxlbmd0aDw9OSlyZXR1cm4gZy53b3Jkc1swXT0wLHZvaWQoZy5sZW5ndGg9MSk7dmFy'@;
put 'IFM9Zy53b3Jkc1s5XTtmb3IoQy53b3Jkc1tDLmxlbmd0aCsrXT1TJk0scD0xMDtwPGcubGVuZ3RoO3ArKyl7dmFyIFE9MHxnLndvcmRzW3BdO2cud29yZHNbcC0xMF09KFEmTSk8PDR8Uz4+PjIyLFM9UX1nLndvcmRzW3AtMTBdPVM+Pj49MjIsZy5sZW5ndGgtPTA9PT1TJiZnLmxlbmd0aD4x'@;
put 'MD8xMDo5fSxjZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zy53b3Jkc1tnLmxlbmd0aF09MCxnLndvcmRzW2cubGVuZ3RoKzFdPTAsZy5sZW5ndGgrPTI7Zm9yKHZhciBDPTAsTT0wO008Zy5sZW5ndGg7TSsrKXt2YXIgeT0wfGcud29yZHNbTV07Zy53b3Jkc1tNXT02NzEwODg2MyYo'@;
put 'Qys9OTc3KnkpLEM9NjQqeSsoQy82NzEwODg2NHwwKX1yZXR1cm4gMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJihnLmxlbmd0aC0tLDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiZnLmxlbmd0aC0tKSxnfSxSKFksdWUpLFIoYix1ZSksUih4LHVlKSx4LnByb3RvdHlwZS5pbXVsSz1mdW5jdGlv'@;
put 'bihnKXtmb3IodmFyIEM9MCxNPTA7TTxnLmxlbmd0aDtNKyspe3ZhciB5PTE5KigwfGcud29yZHNbTV0pK0MscD02NzEwODg2MyZ5O3k+Pj49MjYsZy53b3Jkc1tNXT1wLEM9eX1yZXR1cm4gMCE9PUMmJihnLndvcmRzW2cubGVuZ3RoKytdPUMpLGd9LEUuX3ByaW1lPWZ1bmN0aW9uKGcpe2lm'@;
put 'KGRlW2ddKXJldHVybiBkZVtnXTt2YXIgQztpZigiazI1NiI9PT1nKUM9bmV3IGNlO2Vsc2UgaWYoInAyMjQiPT09ZylDPW5ldyBZO2Vsc2UgaWYoInAxOTIiPT09ZylDPW5ldyBiO2Vsc2V7aWYoInAyNTUxOSIhPT1nKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK2cpO0M9bmV3'@;
put 'IHh9cmV0dXJuIGRlW2ddPUMsQ30sTi5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oZyl7SSgwPT09Zy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxJKGcucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LE4ucHJvdG90eXBlLl92ZXJp'@;
put 'ZnkyPWZ1bmN0aW9uKGcsQyl7SSgwPT0oZy5uZWdhdGl2ZXxDLm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxJKGcucmVkJiZnLnJlZD09PUMucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LE4ucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24o'@;
put 'Zyl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKGcpLl9mb3JjZVJlZCh0aGlzKTpnLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LE4ucHJvdG90eXBlLm5lZz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pc1plcm8oKT9nLmNsb25lKCk6dGhpcy5tLnN1YihnKS5fZm9y'@;
put 'Y2VSZWQodGhpcyl9LE4ucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnLEMpe3RoaXMuX3ZlcmlmeTIoZyxDKTt2YXIgTT1nLmFkZChDKTtyZXR1cm4gTS5jbXAodGhpcy5tKT49MCYmTS5pc3ViKHRoaXMubSksTS5fZm9yY2VSZWQodGhpcyl9LE4ucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyxD'@;
put 'KXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIE09Zy5pYWRkKEMpO3JldHVybiBNLmNtcCh0aGlzLm0pPj0wJiZNLmlzdWIodGhpcy5tKSxNfSxOLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIE09Zy5zdWIoQyk7cmV0dXJuIE0uY21wbigwKTwwJiZN'@;
put 'LmlhZGQodGhpcy5tKSxNLl9mb3JjZVJlZCh0aGlzKX0sTi5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnLEMpe3RoaXMuX3ZlcmlmeTIoZyxDKTt2YXIgTT1nLmlzdWIoQyk7cmV0dXJuIE0uY21wbigwKTwwJiZNLmlhZGQodGhpcy5tKSxNfSxOLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24oZyxD'@;
put 'KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShnKSx0aGlzLmltb2QoZy51c2hsbihDKSl9LE4ucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLEMpLHRoaXMuaW1vZChnLmltdWwoQykpfSxOLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyxDKXtyZXR1cm4g'@;
put 'dGhpcy5fdmVyaWZ5MihnLEMpLHRoaXMuaW1vZChnLm11bChDKSl9LE4ucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW11bChnLGcuY2xvbmUoKSl9LE4ucHJvdG90eXBlLnNxcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5tdWwoZyxnKX0sTi5wcm90b3R5cGUuc3Fy'@;
put 'dD1mdW5jdGlvbihnKXtpZihnLmlzWmVybygpKXJldHVybiBnLmNsb25lKCk7dmFyIEM9dGhpcy5tLmFuZGxuKDMpO2lmKEkoQyUyPT0xKSwzPT09Qyl7dmFyIE09dGhpcy5tLmFkZChuZXcgRSgxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhnLE0pfWZvcih2YXIgeT10aGlzLm0uc3Vi'@;
put 'bigxKSxwPTA7IXkuaXNaZXJvKCkmJjA9PT15LmFuZGxuKDEpOylwKysseS5pdXNocm4oMSk7SSgheS5pc1plcm8oKSk7dmFyIFM9bmV3IEUoMSkudG9SZWQodGhpcyksUT1TLnJlZE5lZygpLHJlPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxmZT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKGZl'@;
put 'PW5ldyBFKDIqZmUqZmUpLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhmZSxyZSkuY21wKFEpOylmZS5yZWRJQWRkKFEpO2Zvcih2YXIgbWU9dGhpcy5wb3coZmUseSksa2U9dGhpcy5wb3coZyx5LmFkZG4oMSkuaXVzaHJuKDEpKSxUZT10aGlzLnBvdyhnLHkpLFBlPXA7MCE9PVRlLmNtcChT'@;
put 'KTspe2Zvcih2YXIgRmU9VGUsTmU9MDswIT09RmUuY21wKFMpO05lKyspRmU9RmUucmVkU3FyKCk7SShOZTxQZSk7dmFyIExlPXRoaXMucG93KG1lLG5ldyBFKDEpLml1c2hsbihQZS1OZS0xKSk7a2U9a2UucmVkTXVsKExlKSxtZT1MZS5yZWRTcXIoKSxUZT1UZS5yZWRNdWwobWUpLFBlPU5l'@;
put 'fXJldHVybiBrZX0sTi5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXt2YXIgQz1nLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09Qy5uZWdhdGl2ZT8oQy5uZWdhdGl2ZT0wLHRoaXMuaW1vZChDKS5yZWROZWcoKSk6dGhpcy5pbW9kKEMpfSxOLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyxD'@;
put 'KXtpZihDLmlzWmVybygpKXJldHVybiBuZXcgRSgxKS50b1JlZCh0aGlzKTtpZigwPT09Qy5jbXBuKDEpKXJldHVybiBnLmNsb25lKCk7dmFyIE09bmV3IEFycmF5KDE2KTtNWzBdPW5ldyBFKDEpLnRvUmVkKHRoaXMpLE1bMV09Zztmb3IodmFyIHk9Mjt5PE0ubGVuZ3RoO3krKylNW3ldPXRo'@;
put 'aXMubXVsKE1beS0xXSxnKTt2YXIgcD1NWzBdLFM9MCxRPTAscmU9Qy5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PXJlJiYocmU9MjYpLHk9Qy5sZW5ndGgtMTt5Pj0wO3ktLSl7Zm9yKHZhciBmZT1DLndvcmRzW3ldLG1lPXJlLTE7bWU+PTA7bWUtLSl7dmFyIGtlPWZlPj5tZSYxO3AhPT1NWzBd'@;
put 'JiYocD10aGlzLnNxcihwKSksMCE9PWtlfHwwIT09Uz8oUzw8PTEsU3w9a2UsKDQ9PSsrUXx8MD09PXkmJjA9PT1tZSkmJihwPXRoaXMubXVsKHAsTVtTXSksUT0wLFM9MCkpOlE9MH1yZT0yNn1yZXR1cm4gcH0sTi5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3ZhciBDPWcudW1v'@;
put 'ZCh0aGlzLm0pO3JldHVybiBDPT09Zz9DLmNsb25lKCk6Q30sTi5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIEM9Zy5jbG9uZSgpO3JldHVybiBDLnJlZD1udWxsLEN9LEUubW9udD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IEYoZyl9LFIoRixOKSxGLnByb3RvdHlwZS5j'@;
put 'b252ZXJ0VG89ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLnVzaGxuKHRoaXMuc2hpZnQpKX0sRi5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIEM9dGhpcy5pbW9kKGcubXVsKHRoaXMucmludikpO3JldHVybiBDLnJlZD1udWxsLEN9LEYucHJvdG90eXBlLmlt'@;
put 'dWw9ZnVuY3Rpb24oZyxDKXtpZihnLmlzWmVybygpfHxDLmlzWmVybygpKXJldHVybiBnLndvcmRzWzBdPTAsZy5sZW5ndGg9MSxnO3ZhciBNPWcuaW11bChDKSx5PU0ubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLHA9TS5p'@;
put 'c3ViKHkpLml1c2hybih0aGlzLnNoaWZ0KSxTPXA7cmV0dXJuIHAuY21wKHRoaXMubSk+PTA/Uz1wLmlzdWIodGhpcy5tKTpwLmNtcG4oMCk8MCYmKFM9cC5pYWRkKHRoaXMubSkpLFMuX2ZvcmNlUmVkKHRoaXMpfSxGLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyxDKXtpZihnLmlzWmVybygp'@;
put 'fHxDLmlzWmVybygpKXJldHVybiBuZXcgRSgwKS5fZm9yY2VSZWQodGhpcyk7dmFyIE09Zy5tdWwoQykseT1NLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxwPU0uaXN1Yih5KS5pdXNocm4odGhpcy5zaGlmdCksUz1wO3Jl'@;
put 'dHVybiBwLmNtcCh0aGlzLm0pPj0wP1M9cC5pc3ViKHRoaXMubSk6cC5jbXBuKDApPDAmJihTPXAuaWFkZCh0aGlzLm0pKSxTLl9mb3JjZVJlZCh0aGlzKX0sRi5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIp'@;
put 'KS5fZm9yY2VSZWQodGhpcyl9fShIPUwubm1kKEgpLHRoaXMpfSw2MTM4OihILEIsTCk9Pnt2YXIgSz1MKDk4MCksSj1MKDkxOTkpLEk9TCg3ODU5KSxSPUwoMjE0NCksRT1MKDM2NjMpLHo9TCgzNDgyKSxqPUwoNDgxOCksVj1MKDk1MDkpLkJ1ZmZlcjtILmV4cG9ydHM9ZnVuY3Rpb24oRyxX'@;
put 'LFUpe3ZhciBxO3E9Ry5wYWRkaW5nP0cucGFkZGluZzpVPzE6NDt2YXIgdGUsbmU9SyhHKSxpZT1uZS5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtpZihXLmxlbmd0aD5pZXx8bmV3IFIoVykuY21wKG5lLm1vZHVsdXMpPj0wKXRocm93IG5ldyBFcnJvcigiZGVjcnlwdGlvbiBlcnJvciIpO3RlPVU/'@;
put 'aihuZXcgUihXKSxuZSk6RShXLG5lKTt2YXIgbGU9Vi5hbGxvYyhpZS10ZS5sZW5ndGgpO2lmKHRlPVYuY29uY2F0KFtsZSx0ZV0saWUpLDQ9PT1xKXJldHVybiBmdW5jdGlvbihkZSx1ZSl7dmFyIGNlPWRlLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLFk9eigic2hhMSIpLnVwZGF0ZShWLmFsbG9j'@;
put 'KDApKS5kaWdlc3QoKSxiPVkubGVuZ3RoO2lmKDAhPT11ZVswXSl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTt2YXIgeD11ZS5zbGljZSgxLGIrMSksTj11ZS5zbGljZShiKzEpLEY9SSh4LEooTixiKSksZz1JKE4sSihGLGNlLWItMSkpO2lmKGZ1bmN0aW9uKE0seSl7TT1W'@;
put 'LmZyb20oTSkseT1WLmZyb20oeSk7dmFyIHA9MCxTPU0ubGVuZ3RoO00ubGVuZ3RoIT09eS5sZW5ndGgmJihwKyssUz1NYXRoLm1pbihNLmxlbmd0aCx5Lmxlbmd0aCkpO2Zvcih2YXIgUT0tMTsrK1E8UzspcCs9TVtRXV55W1FdO3JldHVybiBwfShZLGcuc2xpY2UoMCxiKSkpdGhyb3cgbmV3'@;
put 'IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7Zm9yKHZhciBDPWI7MD09PWdbQ107KUMrKztpZigxIT09Z1tDKytdKXRocm93IG5ldyBFcnJvcigiZGVjcnlwdGlvbiBlcnJvciIpO3JldHVybiBnLnNsaWNlKEMpfShuZSx0ZSk7aWYoMT09PXEpcmV0dXJuIGZ1bmN0aW9uKGRlLHVlLGNlKXtm'@;
put 'b3IodmFyIFk9dWUuc2xpY2UoMCwyKSxiPTIseD0wOzAhPT11ZVtiKytdOylpZihiPj11ZS5sZW5ndGgpe3grKzticmVha312YXIgTj11ZS5zbGljZSgyLGItMSk7aWYoKCIwMDAyIiE9PVkudG9TdHJpbmcoImhleCIpJiYhY2V8fCIwMDAxIiE9PVkudG9TdHJpbmcoImhleCIpJiZjZSkmJngr'@;
put 'KyxOLmxlbmd0aDw4JiZ4KysseCl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTtyZXR1cm4gdWUuc2xpY2UoYil9KDAsdGUsVSk7aWYoMz09PXEpcmV0dXJuIHRlO3Rocm93IG5ldyBFcnJvcigidW5rbm93biBwYWRkaW5nIil9fSw2NTU5OihILEIsTCk9Pnt2YXIgSz1MKDk4'@;
put 'MCksSj1MKDE3OTgpLEk9TCgzNDgyKSxSPUwoOTE5OSksRT1MKDc4NTkpLHo9TCgyMTQ0KSxqPUwoNDgxOCksVj1MKDM2NjMpLEc9TCg5NTA5KS5CdWZmZXI7SC5leHBvcnRzPWZ1bmN0aW9uKFcsVSxxKXt2YXIgdGU7dGU9Vy5wYWRkaW5nP1cucGFkZGluZzpxPzE6NDt2YXIgbmUsaWU9SyhX'@;
put 'KTtpZig0PT09dGUpbmU9ZnVuY3Rpb24obGUsZGUpe3ZhciB1ZT1sZS5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxjZT1kZS5sZW5ndGgsWT1JKCJzaGExIikudXBkYXRlKEcuYWxsb2MoMCkpLmRpZ2VzdCgpLGI9WS5sZW5ndGgseD0yKmI7aWYoY2U+dWUteC0yKXRocm93IG5ldyBFcnJvcigibWVz'@;
put 'c2FnZSB0b28gbG9uZyIpO3ZhciBOPUcuYWxsb2ModWUtY2UteC0yKSxGPXVlLWItMSxnPUooYiksQz1FKEcuY29uY2F0KFtZLE4sRy5hbGxvYygxLDEpLGRlXSxGKSxSKGcsRikpLE09RShnLFIoQyxiKSk7cmV0dXJuIG5ldyB6KEcuY29uY2F0KFtHLmFsbG9jKDEpLE0sQ10sdWUpKX0oaWUs'@;
put 'VSk7ZWxzZSBpZigxPT09dGUpbmU9ZnVuY3Rpb24obGUsZGUsdWUpe3ZhciBjZSxZPWRlLmxlbmd0aCxiPWxlLm1vZHVsdXMuYnl0ZUxlbmd0aCgpO2lmKFk+Yi0xMSl0aHJvdyBuZXcgRXJyb3IoIm1lc3NhZ2UgdG9vIGxvbmciKTtyZXR1cm4gY2U9dWU/Ry5hbGxvYyhiLVktMywyNTUpOmZ1'@;
put 'bmN0aW9uKHgpe2Zvcih2YXIgTixGPUcuYWxsb2NVbnNhZmUoeCksZz0wLEM9SigyKngpLE09MDtnPHg7KU09PT1DLmxlbmd0aCYmKEM9SigyKngpLE09MCksKE49Q1tNKytdKSYmKEZbZysrXT1OKTtyZXR1cm4gRn0oYi1ZLTMpLG5ldyB6KEcuY29uY2F0KFtHLmZyb20oWzAsdWU/MToyXSks'@;
put 'Y2UsRy5hbGxvYygxKSxkZV0sYikpfShpZSxVLHEpO2Vsc2V7aWYoMyE9PXRlKXRocm93IG5ldyBFcnJvcigidW5rbm93biBwYWRkaW5nIik7aWYoKG5lPW5ldyB6KFUpKS5jbXAoaWUubW9kdWx1cyk+PTApdGhyb3cgbmV3IEVycm9yKCJkYXRhIHRvbyBsb25nIGZvciBtb2R1bHVzIil9cmV0'@;
put 'dXJuIHE/VihuZSxpZSk6aihuZSxpZSl9fSw0ODE4OihILEIsTCk9Pnt2YXIgSz1MKDIxNDQpLEo9TCg5NTA5KS5CdWZmZXI7SC5leHBvcnRzPWZ1bmN0aW9uKEksUil7cmV0dXJuIEouZnJvbShJLnRvUmVkKEsubW9udChSLm1vZHVsdXMpKS5yZWRQb3cobmV3IEsoUi5wdWJsaWNFeHBvbmVu'@;
put 'dCkpLmZyb21SZWQoKS50b0FycmF5KCkpfX0sNzg1OTpIPT57SC5leHBvcnRzPWZ1bmN0aW9uKEIsTCl7Zm9yKHZhciBLPUIubGVuZ3RoLEo9LTE7KytKPEs7KUJbSl1ePUxbSl07cmV0dXJuIEJ9fSwzNjg5OihILEIsTCk9PnsidXNlIHN0cmljdCI7TC5yKEIpLEwuZChCLHtkZWNvZGU6KCk9'@;
put 'PmllLGRlZmF1bHQ6KCk9PmNlLGVuY29kZTooKT0+bGUsdG9BU0NJSTooKT0+dWUsdG9Vbmljb2RlOigpPT5kZSx1Y3MyZGVjb2RlOigpPT5VLHVjczJlbmNvZGU6KCk9PnF9KTtjb25zdCBLPTIxNDc0ODM2NDcsSj0zNixJPS9eeG4tLS8sUj0vW15cMC1ceDdGXS8sRT0vW1x4MkVcdTMwMDJc'@;
put 'dUZGMEVcdUZGNjFdL2csej17b3ZlcmZsb3c6Ik92ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzIiwibm90LWJhc2ljIjoiSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KSIsImludmFsaWQtaW5wdXQiOiJJbnZhbGlkIGlu'@;
put 'cHV0In0saj1NYXRoLmZsb29yLFY9U3RyaW5nLmZyb21DaGFyQ29kZTtmdW5jdGlvbiBHKFkpe3Rocm93IG5ldyBSYW5nZUVycm9yKHpbWV0pfWZ1bmN0aW9uIFcoWSxiKXtjb25zdCB4PVkuc3BsaXQoIkAiKTtsZXQgTj0iIjtyZXR1cm4geC5sZW5ndGg+MSYmKE49eFswXSsiQCIsWT14WzFd'@;
put 'KSxOK2Z1bmN0aW9uKGcsQyl7Y29uc3QgTT1bXTtsZXQgeT1nLmxlbmd0aDtmb3IoO3ktLTspTVt5XT1DKGdbeV0pO3JldHVybiBNfSgoWT1ZLnJlcGxhY2UoRSwiLiIpKS5zcGxpdCgiLiIpLGIpLmpvaW4oIi4iKX1mdW5jdGlvbiBVKFkpe2NvbnN0IGI9W107bGV0IHg9MDtjb25zdCBOPVku'@;
put 'bGVuZ3RoO2Zvcig7eDxOOyl7Y29uc3QgRj1ZLmNoYXJDb2RlQXQoeCsrKTtpZihGPj01NTI5NiYmRjw9NTYzMTkmJng8Til7Y29uc3QgZz1ZLmNoYXJDb2RlQXQoeCsrKTs1NjMyMD09KDY0NTEyJmcpP2IucHVzaCgoKDEwMjMmRik8PDEwKSsoMTAyMyZnKSs2NTUzNik6KGIucHVzaChGKSx4'@;
put 'LS0pfWVsc2UgYi5wdXNoKEYpfXJldHVybiBifWNvbnN0IHE9WT0+U3RyaW5nLmZyb21Db2RlUG9pbnQoLi4uWSksdGU9ZnVuY3Rpb24oWSxiKXtyZXR1cm4gWSsyMis3NSooWTwyNiktKCgwIT1iKTw8NSl9LG5lPWZ1bmN0aW9uKFksYix4KXtsZXQgTj0wO2ZvcihZPXg/aihZLzcwMCk6WT4+'@;
put 'MSxZKz1qKFkvYik7WT40NTU7Tis9SilZPWooWS8zNSk7cmV0dXJuIGooTiszNipZLyhZKzM4KSl9LGllPWZ1bmN0aW9uKFkpe2NvbnN0IGI9W10seD1ZLmxlbmd0aDtsZXQgTj0wLEY9MTI4LGc9NzIsQz1ZLmxhc3RJbmRleE9mKCItIik7QzwwJiYoQz0wKTtmb3IobGV0IHk9MDt5PEM7Kyt5'@;
put 'KVkuY2hhckNvZGVBdCh5KT49MTI4JiZHKCJub3QtYmFzaWMiKSxiLnB1c2goWS5jaGFyQ29kZUF0KHkpKTtmb3IobGV0IHk9Qz4wP0MrMTowO3k8eDspe2NvbnN0IHA9Tjtmb3IobGV0IFE9MSxyZT1KOztyZSs9Sil7eT49eCYmRygiaW52YWxpZC1pbnB1dCIpO2NvbnN0IGZlPShNPVkuY2hh'@;
put 'ckNvZGVBdCh5KyspKT49NDgmJk08NTg/TS00OCsyNjpNPj02NSYmTTw5MT9NLTY1Ok0+PTk3JiZNPDEyMz9NLTk3Oko7ZmU+PUomJkcoImludmFsaWQtaW5wdXQiKSxmZT5qKChLLU4pL1EpJiZHKCJvdmVyZmxvdyIpLE4rPWZlKlE7Y29uc3QgbWU9cmU8PWc/MTpyZT49ZysyNj8yNjpyZS1n'@;
put 'O2lmKGZlPG1lKWJyZWFrO2NvbnN0IGtlPUotbWU7UT5qKEsva2UpJiZHKCJvdmVyZmxvdyIpLFEqPWtlfWNvbnN0IFM9Yi5sZW5ndGgrMTtnPW5lKE4tcCxTLDA9PXApLGooTi9TKT5LLUYmJkcoIm92ZXJmbG93IiksRis9aihOL1MpLE4lPVMsYi5zcGxpY2UoTisrLDAsRil9dmFyIE07cmV0'@;
put 'dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KC4uLmIpfSxsZT1mdW5jdGlvbihZKXtjb25zdCBiPVtdLHg9KFk9VShZKSkubGVuZ3RoO2xldCBOPTEyOCxGPTAsZz03Mjtmb3IoY29uc3QgeSBvZiBZKXk8MTI4JiZiLnB1c2goVih5KSk7Y29uc3QgQz1iLmxlbmd0aDtsZXQgTT1DO2ZvcihDJiZi'@;
put 'LnB1c2goIi0iKTtNPHg7KXtsZXQgeT1LO2Zvcihjb25zdCBTIG9mIFkpUz49TiYmUzx5JiYoeT1TKTtjb25zdCBwPU0rMTt5LU4+aigoSy1GKS9wKSYmRygib3ZlcmZsb3ciKSxGKz0oeS1OKSpwLE49eTtmb3IoY29uc3QgUyBvZiBZKWlmKFM8TiYmKytGPksmJkcoIm92ZXJmbG93IiksUz09'@;
put 'PU4pe2xldCBRPUY7Zm9yKGxldCByZT1KOztyZSs9Sil7Y29uc3QgZmU9cmU8PWc/MTpyZT49ZysyNj8yNjpyZS1nO2lmKFE8ZmUpYnJlYWs7Y29uc3QgbWU9US1mZSxrZT1KLWZlO2IucHVzaChWKHRlKGZlK21lJWtlLDApKSksUT1qKG1lL2tlKX1iLnB1c2goVih0ZShRLDApKSksZz1uZShG'@;
put 'LHAsTT09PUMpLEY9MCwrK019KytGLCsrTn1yZXR1cm4gYi5qb2luKCIiKX0sZGU9ZnVuY3Rpb24oWSl7cmV0dXJuIFcoWSxmdW5jdGlvbihiKXtyZXR1cm4gSS50ZXN0KGIpP2llKGIuc2xpY2UoNCkudG9Mb3dlckNhc2UoKSk6Yn0pfSx1ZT1mdW5jdGlvbihZKXtyZXR1cm4gVyhZLGZ1bmN0'@;
put 'aW9uKGIpe3JldHVybiBSLnRlc3QoYik/InhuLS0iK2xlKGIpOmJ9KX0sY2U9e3ZlcnNpb246IjIuMS4wIix1Y3MyOntkZWNvZGU6VSxlbmNvZGU6cX0sZGVjb2RlOmllLGVuY29kZTpsZSx0b0FTQ0lJOnVlLHRvVW5pY29kZTpkZX19LDI1ODc6SD0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBC'@;
put 'KEwsSyl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChMLEspfUguZXhwb3J0cz1mdW5jdGlvbihMLEssSixJKXtKPUp8fCI9Ijt2YXIgUj17fTtpZigic3RyaW5nIiE9dHlwZW9mIEx8fDA9PT1MLmxlbmd0aClyZXR1cm4gUjt2YXIgRT0vXCsvZztMPUwuc3Bs'@;
put 'aXQoSz1LfHwiJiIpO3ZhciB6PTFlMztJJiYibnVtYmVyIj09dHlwZW9mIEkubWF4S2V5cyYmKHo9SS5tYXhLZXlzKTt2YXIgaj1MLmxlbmd0aDt6PjAmJmo+eiYmKGo9eik7Zm9yKHZhciBWPTA7VjxqOysrVil7dmFyIEcsVyxVLHEsdGU9TFtWXS5yZXBsYWNlKEUsIiUyMCIpLG5lPXRlLmlu'@;
put 'ZGV4T2YoSik7bmU+PTA/KEc9dGUuc3Vic3RyKDAsbmUpLFc9dGUuc3Vic3RyKG5lKzEpKTooRz10ZSxXPSIiKSxVPWRlY29kZVVSSUNvbXBvbmVudChHKSxxPWRlY29kZVVSSUNvbXBvbmVudChXKSxCKFIsVSk/QXJyYXkuaXNBcnJheShSW1VdKT9SW1VdLnB1c2gocSk6UltVXT1bUltVXSxx'@;
put 'XTpSW1VdPXF9cmV0dXJuIFJ9fSwyMTgyOkg9PnsidXNlIHN0cmljdCI7dmFyIEI9ZnVuY3Rpb24oTCl7c3dpdGNoKHR5cGVvZiBMKXtjYXNlInN0cmluZyI6cmV0dXJuIEw7Y2FzZSJib29sZWFuIjpyZXR1cm4gTD8idHJ1ZSI6ImZhbHNlIjtjYXNlIm51bWJlciI6cmV0dXJuIGlzRmluaXRl'@;
put 'KEwpP0w6IiI7ZGVmYXVsdDpyZXR1cm4iIn19O0guZXhwb3J0cz1mdW5jdGlvbihMLEssSixJKXtyZXR1cm4gSz1LfHwiJiIsSj1KfHwiPSIsbnVsbD09PUwmJihMPXZvaWQgMCksIm9iamVjdCI9PXR5cGVvZiBMP09iamVjdC5rZXlzKEwpLm1hcChmdW5jdGlvbihSKXt2YXIgRT1lbmNvZGVV'@;
put 'UklDb21wb25lbnQoQihSKSkrSjtyZXR1cm4gQXJyYXkuaXNBcnJheShMW1JdKT9MW1JdLm1hcChmdW5jdGlvbih6KXtyZXR1cm4gRStlbmNvZGVVUklDb21wb25lbnQoQih6KSl9KS5qb2luKEspOkUrZW5jb2RlVVJJQ29tcG9uZW50KEIoTFtSXSkpfSkuam9pbihLKTpJP2VuY29kZVVSSUNv'@;
put 'bXBvbmVudChCKEkpKStKK2VuY29kZVVSSUNvbXBvbmVudChCKEwpKToiIn19LDc2NzM6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0IjtCLmRlY29kZT1CLnBhcnNlPUwoMjU4NyksQi5lbmNvZGU9Qi5zdHJpbmdpZnk9TCgyMTgyKX0sMTc5ODooSCxCLEwpPT57InVzZSBzdHJpY3QiO3ZhciBLPUwo'@;
put 'NDE1NSksSj02NTUzNixSPUwoOTUwOSkuQnVmZmVyLEU9TC5nLmNyeXB0b3x8TC5nLm1zQ3J5cHRvO0guZXhwb3J0cz1FJiZFLmdldFJhbmRvbVZhbHVlcz9mdW5jdGlvbih6LGope2lmKHo+NDI5NDk2NzI5NSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigicmVxdWVzdGVkIHRvbyBtYW55IHJhbmRv'@;
put 'bSBieXRlcyIpO3ZhciBWPVIuYWxsb2NVbnNhZmUoeik7aWYoej4wKWlmKHo+Silmb3IodmFyIEc9MDtHPHo7Rys9SilFLmdldFJhbmRvbVZhbHVlcyhWLnNsaWNlKEcsRytKKSk7ZWxzZSBFLmdldFJhbmRvbVZhbHVlcyhWKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygaj9LLm5leHRUaWNr'@;
put 'KGZ1bmN0aW9uKCl7aihudWxsLFYpfSk6Vn06ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXIuXG5Vc2UgQ2hyb21lLCBGaXJlZm94IG9yIEludGVybmV0IEV4cGxvcmVyIDEx'@;
put 'Iil9fSw3OTYzOihILEIsTCk9PnsidXNlIHN0cmljdCI7dmFyIEs9TCg0MTU1KTtmdW5jdGlvbiBKKCl7dGhyb3cgbmV3IEVycm9yKCJzZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyXG51c2UgY2hyb21lLCBGaXJlRm94IG9yIElu'@;
put 'dGVybmV0IEV4cGxvcmVyIDExIil9dmFyIEk9TCg5NTA5KSxSPUwoMTc5OCksRT1JLkJ1ZmZlcix6PUkua01heExlbmd0aCxqPUwuZy5jcnlwdG98fEwuZy5tc0NyeXB0byxWPU1hdGgucG93KDIsMzIpLTE7ZnVuY3Rpb24gRyhxLHRlKXtpZigibnVtYmVyIiE9dHlwZW9mIHF8fHEhPXEpdGhy'@;
put 'b3cgbmV3IFR5cGVFcnJvcigib2Zmc2V0IG11c3QgYmUgYSBudW1iZXIiKTtpZihxPlZ8fHE8MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJvZmZzZXQgbXVzdCBiZSBhIHVpbnQzMiIpO2lmKHE+enx8cT50ZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib2Zmc2V0IG91dCBvZiByYW5nZSIpfWZ1bmN0'@;
put 'aW9uIFcocSx0ZSxuZSl7aWYoIm51bWJlciIhPXR5cGVvZiBxfHxxIT1xKXRocm93IG5ldyBUeXBlRXJyb3IoInNpemUgbXVzdCBiZSBhIG51bWJlciIpO2lmKHE+Vnx8cTwwKXRocm93IG5ldyBUeXBlRXJyb3IoInNpemUgbXVzdCBiZSBhIHVpbnQzMiIpO2lmKHErdGU+bmV8fHE+eil0aHJv'@;
put 'dyBuZXcgUmFuZ2VFcnJvcigiYnVmZmVyIHRvbyBzbWFsbCIpfWZ1bmN0aW9uIFUocSx0ZSxuZSxpZSl7aWYoSy5icm93c2VyKXt2YXIgZGU9bmV3IFVpbnQ4QXJyYXkocS5idWZmZXIsdGUsbmUpO3JldHVybiBqLmdldFJhbmRvbVZhbHVlcyhkZSksaWU/dm9pZCBLLm5leHRUaWNrKGZ1bmN0'@;
put 'aW9uKCl7aWUobnVsbCxxKX0pOnF9aWYoIWllKXJldHVybiBSKG5lKS5jb3B5KHEsdGUpLHE7UihuZSxmdW5jdGlvbih1ZSxjZSl7aWYodWUpcmV0dXJuIGllKHVlKTtjZS5jb3B5KHEsdGUpLGllKG51bGwscSl9KX1qJiZqLmdldFJhbmRvbVZhbHVlc3x8IUsuYnJvd3Nlcj8oQi5yYW5kb21G'@;
put 'aWxsPWZ1bmN0aW9uKHEsdGUsbmUsaWUpe2lmKCEoRS5pc0J1ZmZlcihxKXx8cSBpbnN0YW5jZW9mIEwuZy5VaW50OEFycmF5KSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIG9yIFVpbnQ4QXJyYXknKTtpZigiZnVuY3Rpb24iPT10eXBlb2Yg'@;
put 'dGUpaWU9dGUsdGU9MCxuZT1xLmxlbmd0aDtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiBuZSlpZT1uZSxuZT1xLmxlbmd0aC10ZTtlbHNlIGlmKCJmdW5jdGlvbiIhPXR5cGVvZiBpZSl0aHJvdyBuZXcgVHlwZUVycm9yKCciY2IiIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO3Jl'@;
put 'dHVybiBHKHRlLHEubGVuZ3RoKSxXKG5lLHRlLHEubGVuZ3RoKSxVKHEsdGUsbmUsaWUpfSxCLnJhbmRvbUZpbGxTeW5jPWZ1bmN0aW9uKHEsdGUsbmUpe2lmKHZvaWQgMD09PXRlJiYodGU9MCksIShFLmlzQnVmZmVyKHEpfHxxIGluc3RhbmNlb2YgTC5nLlVpbnQ4QXJyYXkpKXRocm93IG5l'@;
put 'dyBUeXBlRXJyb3IoJyJidWYiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgb3IgVWludDhBcnJheScpO3JldHVybiBHKHRlLHEubGVuZ3RoKSx2b2lkIDA9PT1uZSYmKG5lPXEubGVuZ3RoLXRlKSxXKG5lLHRlLHEubGVuZ3RoKSxVKHEsdGUsbmUpfSk6KEIucmFuZG9tRmlsbD1KLEIucmFu'@;
put 'ZG9tRmlsbFN5bmM9Sil9LDQyODE6SD0+eyJ1c2Ugc3RyaWN0Ijt2YXIgQj17fTtmdW5jdGlvbiBMKEosSSxSKXtSfHwoUj1FcnJvcik7dmFyIEU9ZnVuY3Rpb24oeil7dmFyIGosVjtmdW5jdGlvbiBHKFcsVSxxKXtyZXR1cm4gei5jYWxsKHRoaXMsInN0cmluZyI9PXR5cGVvZiBJP0k6SShX'@;
put 'LFUscSkpfHx0aGlzfXJldHVybiBWPXosKGo9RykucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoVi5wcm90b3R5cGUpLGoucHJvdG90eXBlLmNvbnN0cnVjdG9yPWosai5fX3Byb3RvX189VixHfShSKTtFLnByb3RvdHlwZS5uYW1lPVIubmFtZSxFLnByb3RvdHlwZS5jb2RlPUosQltKXT1FfWZ1'@;
put 'bmN0aW9uIEsoSixJKXtpZihBcnJheS5pc0FycmF5KEopKXt2YXIgUj1KLmxlbmd0aDtyZXR1cm4gSj1KLm1hcChmdW5jdGlvbihFKXtyZXR1cm4gU3RyaW5nKEUpfSksUj4yPyJvbmUgb2YgIi5jb25jYXQoSSwiICIpLmNvbmNhdChKLnNsaWNlKDAsUi0xKS5qb2luKCIsICIpLCIsIG9yICIp'@;
put 'K0pbUi0xXToyPT09Uj8ib25lIG9mICIuY29uY2F0KEksIiAiKS5jb25jYXQoSlswXSwiIG9yICIpLmNvbmNhdChKWzFdKToib2YgIi5jb25jYXQoSSwiICIpLmNvbmNhdChKWzBdKX1yZXR1cm4ib2YgIi5jb25jYXQoSSwiICIpLmNvbmNhdChTdHJpbmcoSikpfUwoIkVSUl9JTlZBTElEX09Q'@;
put 'VF9WQUxVRSIsZnVuY3Rpb24oSixJKXtyZXR1cm4nVGhlIHZhbHVlICInK0krJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICInK0orJyInfSxUeXBlRXJyb3IpLEwoIkVSUl9JTlZBTElEX0FSR19UWVBFIixmdW5jdGlvbihKLEksUil7dmFyIEUsVixXLHE7aWYoInN0cmluZyI9PXR5cGVvZiBJ'@;
put 'JiYibm90ICI9PT1JLnN1YnN0cigwLDQpPyhFPSJtdXN0IG5vdCBiZSIsST1JLnJlcGxhY2UoL15ub3QgLywiIikpOkU9Im11c3QgYmUiLFc9Siwodm9pZCAwPT09cXx8cT5XLmxlbmd0aCkmJihxPVcubGVuZ3RoKSwiIGFyZ3VtZW50Ij09PVcuc3Vic3RyaW5nKHEtOSxxKSlWPSJUaGUgIi5j'@;
put 'b25jYXQoSiwiICIpLmNvbmNhdChFLCIgIikuY29uY2F0KEsoSSwidHlwZSIpKTtlbHNle3ZhciBHPWZ1bmN0aW9uKFcsVSxxKXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHEmJihxPTApLCEocSsxPlcubGVuZ3RoKSYmLTEhPT1XLmluZGV4T2YoIi4iLHEpfShKKT8icHJvcGVydHkiOiJhcmd1'@;
put 'bWVudCI7Vj0nVGhlICInLmNvbmNhdChKLCciICcpLmNvbmNhdChHLCIgIikuY29uY2F0KEUsIiAiKS5jb25jYXQoSyhJLCJ0eXBlIikpfXJldHVybiBWKyIuIFJlY2VpdmVkIHR5cGUgIi5jb25jYXQodHlwZW9mIFIpfSxUeXBlRXJyb3IpLEwoIkVSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0Yi'@;
put 'LCJzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRiIpLEwoIkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEIixmdW5jdGlvbihKKXtyZXR1cm4iVGhlICIrSisiIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQifSksTCgiRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UiLCJQcmVtYXR1cmUgY2xvc2Ui'@;
put 'KSxMKCJFUlJfU1RSRUFNX0RFU1RST1lFRCIsZnVuY3Rpb24oSil7cmV0dXJuIkNhbm5vdCBjYWxsICIrSisiIGFmdGVyIGEgc3RyZWFtIHdhcyBkZXN0cm95ZWQifSksTCgiRVJSX01VTFRJUExFX0NBTExCQUNLIiwiQ2FsbGJhY2sgY2FsbGVkIG11bHRpcGxlIHRpbWVzIiksTCgiRVJSX1NU'@;
put 'UkVBTV9DQU5OT1RfUElQRSIsIkNhbm5vdCBwaXBlLCBub3QgcmVhZGFibGUiKSxMKCJFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCIsIndyaXRlIGFmdGVyIGVuZCIpLEwoIkVSUl9TVFJFQU1fTlVMTF9WQUxVRVMiLCJNYXkgbm90IHdyaXRlIG51bGwgdmFsdWVzIHRvIHN0cmVhbSIsVHlw'@;
put 'ZUVycm9yKSxMKCJFUlJfVU5LTk9XTl9FTkNPRElORyIsZnVuY3Rpb24oSil7cmV0dXJuIlVua25vd24gZW5jb2Rpbmc6ICIrSn0sVHlwZUVycm9yKSxMKCJFUlJfU1RSRUFNX1VOU0hJRlRfQUZURVJfRU5EX0VWRU5UIiwic3RyZWFtLnVuc2hpZnQoKSBhZnRlciBlbmQgZXZlbnQiKSxILmV4'@;
put 'cG9ydHMucT1CfSw2NzUzOihILEIsTCk9PnsidXNlIHN0cmljdCI7dmFyIEs9TCg0MTU1KSxKPU9iamVjdC5rZXlzfHxmdW5jdGlvbihVKXt2YXIgcT1bXTtmb3IodmFyIHRlIGluIFUpcS5wdXNoKHRlKTtyZXR1cm4gcX07SC5leHBvcnRzPVY7dmFyIEk9TCg5NDgxKSxSPUwoNDIyOSk7TCg1'@;
put 'NzE3KShWLEkpO2Zvcih2YXIgRT1KKFIucHJvdG90eXBlKSx6PTA7ejxFLmxlbmd0aDt6Kyspe3ZhciBqPUVbel07Vi5wcm90b3R5cGVbal18fChWLnByb3RvdHlwZVtqXT1SLnByb3RvdHlwZVtqXSl9ZnVuY3Rpb24gVihVKXtpZighKHRoaXMgaW5zdGFuY2VvZiBWKSlyZXR1cm4gbmV3IFYo'@;
put 'VSk7SS5jYWxsKHRoaXMsVSksUi5jYWxsKHRoaXMsVSksdGhpcy5hbGxvd0hhbGZPcGVuPSEwLFUmJighMT09PVUucmVhZGFibGUmJih0aGlzLnJlYWRhYmxlPSExKSwhMT09PVUud3JpdGFibGUmJih0aGlzLndyaXRhYmxlPSExKSwhMT09PVUuYWxsb3dIYWxmT3BlbiYmKHRoaXMuYWxsb3dI'@;
put 'YWxmT3Blbj0hMSx0aGlzLm9uY2UoImVuZCIsRykpKX1mdW5jdGlvbiBHKCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZHx8Sy5uZXh0VGljayhXLHRoaXMpfWZ1bmN0aW9uIFcoVSl7VS5lbmQoKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoVi5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVy'@;
put 'TWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVi5wcm90b3R5cGUsIndyaXRhYmxlQnVmZmVyIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIoKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVi5wcm90b3R5cGUsIndyaXRhYmxlTGVuZ3RoIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0'@;
put 'ZS5sZW5ndGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFYucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ2b2lkIDAhPT10aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl9yZWFk'@;
put 'YWJsZVN0YXRlLmRlc3Ryb3llZCYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbihVKXt2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ2b2lkIDAhPT10aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9VSx0aGlz'@;
put 'Ll93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD1VKX19KX0sMjcyNTooSCxCLEwpPT57InVzZSBzdHJpY3QiO0guZXhwb3J0cz1KO3ZhciBLPUwoNDYwNSk7ZnVuY3Rpb24gSihJKXtpZighKHRoaXMgaW5zdGFuY2VvZiBKKSlyZXR1cm4gbmV3IEooSSk7Sy5jYWxsKHRoaXMsSSl9TCg1NzE3KShK'@;
put 'LEspLEoucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oSSxSLEUpe0UobnVsbCxJKX19LDk0ODE6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSyxKPUwoNDE1NSk7SC5leHBvcnRzPU4sTi5SZWFkYWJsZVN0YXRlPXgsTCg3MTg3KTt2YXIgaixJPWZ1bmN0aW9uKExlLEJlKXtyZXR1'@;
put 'cm4gTGUubGlzdGVuZXJzKEJlKS5sZW5ndGh9LFI9TCgyNTAzKSxFPUwoODc2NCkuQnVmZmVyLHo9KHZvaWQgMCE9PUwuZz9MLmc6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9KS5VaW50OEFycmF5fHxmdW5jdGlvbigpe30sVj1MKDQ2MTYpO2o9ViYm'@;
put 'Vi5kZWJ1Z2xvZz9WLmRlYnVnbG9nKCJzdHJlYW0iKTpmdW5jdGlvbigpe307dmFyIEcsVyxVLHE9TCg3MzI3KSx0ZT1MKDExOTUpLG5lPUwoMjQ1NykuZ2V0SGlnaFdhdGVyTWFyayxpZT1MKDQyODEpLnEsbGU9aWUuRVJSX0lOVkFMSURfQVJHX1RZUEUsZGU9aWUuRVJSX1NUUkVBTV9QVVNI'@;
put 'X0FGVEVSX0VPRix1ZT1pZS5FUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCxjZT1pZS5FUlJfU1RSRUFNX1VOU0hJRlRfQUZURVJfRU5EX0VWRU5UO0woNTcxNykoTixSKTt2YXIgWT10ZS5lcnJvck9yRGVzdHJveSxiPVsiZXJyb3IiLCJjbG9zZSIsImRlc3Ryb3kiLCJwYXVzZSIsInJlc3Vt'@;
put 'ZSJdO2Z1bmN0aW9uIHgoTGUsQmUsSGUpe0s9S3x8TCg2NzUzKSwiYm9vbGVhbiIhPXR5cGVvZiBIZSYmKEhlPUJlIGluc3RhbmNlb2YgSyksdGhpcy5vYmplY3RNb2RlPSEhKExlPUxlfHx7fSkub2JqZWN0TW9kZSxIZSYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhTGUu'@;
put 'cmVhZGFibGVPYmplY3RNb2RlKSx0aGlzLmhpZ2hXYXRlck1hcms9bmUodGhpcyxMZSwicmVhZGFibGVIaWdoV2F0ZXJNYXJrIixIZSksdGhpcy5idWZmZXI9bmV3IHEsdGhpcy5sZW5ndGg9MCx0aGlzLnBpcGVzPW51bGwsdGhpcy5waXBlc0NvdW50PTAsdGhpcy5mbG93aW5nPW51bGwsdGhp'@;
put 'cy5lbmRlZD0hMSx0aGlzLmVuZEVtaXR0ZWQ9ITEsdGhpcy5yZWFkaW5nPSExLHRoaXMuc3luYz0hMCx0aGlzLm5lZWRSZWFkYWJsZT0hMSx0aGlzLmVtaXR0ZWRSZWFkYWJsZT0hMSx0aGlzLnJlYWRhYmxlTGlzdGVuaW5nPSExLHRoaXMucmVzdW1lU2NoZWR1bGVkPSExLHRoaXMucGF1c2Vk'@;
put 'PSEwLHRoaXMuZW1pdENsb3NlPSExIT09TGUuZW1pdENsb3NlLHRoaXMuYXV0b0Rlc3Ryb3k9ISFMZS5hdXRvRGVzdHJveSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmRlZmF1bHRFbmNvZGluZz1MZS5kZWZhdWx0RW5jb2Rpbmd8fCJ1dGY4Iix0aGlzLmF3YWl0RHJhaW49MCx0aGlzLnJlYWRp'@;
put 'bmdNb3JlPSExLHRoaXMuZGVjb2Rlcj1udWxsLHRoaXMuZW5jb2Rpbmc9bnVsbCxMZS5lbmNvZGluZyYmKEd8fChHPUwoMjU1MykuU3RyaW5nRGVjb2RlciksdGhpcy5kZWNvZGVyPW5ldyBHKExlLmVuY29kaW5nKSx0aGlzLmVuY29kaW5nPUxlLmVuY29kaW5nKX1mdW5jdGlvbiBOKExlKXtp'@;
put 'ZihLPUt8fEwoNjc1MyksISh0aGlzIGluc3RhbmNlb2YgTikpcmV0dXJuIG5ldyBOKExlKTt0aGlzLl9yZWFkYWJsZVN0YXRlPW5ldyB4KExlLHRoaXMsdGhpcyBpbnN0YW5jZW9mIEspLHRoaXMucmVhZGFibGU9ITAsTGUmJigiZnVuY3Rpb24iPT10eXBlb2YgTGUucmVhZCYmKHRoaXMuX3Jl'@;
put 'YWQ9TGUucmVhZCksImZ1bmN0aW9uIj09dHlwZW9mIExlLmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PUxlLmRlc3Ryb3kpKSxSLmNhbGwodGhpcyl9ZnVuY3Rpb24gRihMZSxCZSxIZSxRZSxtdCl7aigicmVhZGFibGVBZGRDaHVuayIsQmUpO3ZhciBLZSxJZSxPZSxldCxudCx3ZT1MZS5fcmVh'@;
put 'ZGFibGVTdGF0ZTtpZihudWxsPT09QmUpd2UucmVhZGluZz0hMSxmdW5jdGlvbihJZSxPZSl7aWYoaigib25Fb2ZDaHVuayIpLCFPZS5lbmRlZCl7aWYoT2UuZGVjb2Rlcil7dmFyIGV0PU9lLmRlY29kZXIuZW5kKCk7ZXQmJmV0Lmxlbmd0aCYmKE9lLmJ1ZmZlci5wdXNoKGV0KSxPZS5sZW5n'@;
put 'dGgrPU9lLm9iamVjdE1vZGU/MTpldC5sZW5ndGgpfU9lLmVuZGVkPSEwLE9lLnN5bmM/eShJZSk6KE9lLm5lZWRSZWFkYWJsZT0hMSxPZS5lbWl0dGVkUmVhZGFibGV8fChPZS5lbWl0dGVkUmVhZGFibGU9ITAscChJZSkpKX19KExlLHdlKTtlbHNlIGlmKG10fHwoSWU9d2UsRS5pc0J1ZmZl'@;
put 'cihudD1PZT1CZSl8fG50IGluc3RhbmNlb2Ygenx8InN0cmluZyI9PXR5cGVvZiBPZXx8dm9pZCAwPT09T2V8fEllLm9iamVjdE1vZGV8fChldD1uZXcgbGUoImNodW5rIixbInN0cmluZyIsIkJ1ZmZlciIsIlVpbnQ4QXJyYXkiXSxPZSkpLEtlPWV0KSxLZSlZKExlLEtlKTtlbHNlIGlmKHdl'@;
put 'Lm9iamVjdE1vZGV8fEJlJiZCZS5sZW5ndGg+MClpZigic3RyaW5nIj09dHlwZW9mIEJlfHx3ZS5vYmplY3RNb2RlfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoQmUpPT09RS5wcm90b3R5cGV8fChCZT1mdW5jdGlvbihJZSl7cmV0dXJuIEUuZnJvbShJZSl9KEJlKSksUWUpd2UuZW5kRW1pdHRl'@;
put 'ZD9ZKExlLG5ldyBjZSk6ZyhMZSx3ZSxCZSwhMCk7ZWxzZSBpZih3ZS5lbmRlZClZKExlLG5ldyBkZSk7ZWxzZXtpZih3ZS5kZXN0cm95ZWQpcmV0dXJuITE7d2UucmVhZGluZz0hMSx3ZS5kZWNvZGVyJiYhSGU/KEJlPXdlLmRlY29kZXIud3JpdGUoQmUpLHdlLm9iamVjdE1vZGV8fDAhPT1C'@;
put 'ZS5sZW5ndGg/ZyhMZSx3ZSxCZSwhMSk6UyhMZSx3ZSkpOmcoTGUsd2UsQmUsITEpfWVsc2UgUWV8fCh3ZS5yZWFkaW5nPSExLFMoTGUsd2UpKTtyZXR1cm4hd2UuZW5kZWQmJih3ZS5sZW5ndGg8d2UuaGlnaFdhdGVyTWFya3x8MD09PXdlLmxlbmd0aCl9ZnVuY3Rpb24gZyhMZSxCZSxIZSxR'@;
put 'ZSl7QmUuZmxvd2luZyYmMD09PUJlLmxlbmd0aCYmIUJlLnN5bmM/KEJlLmF3YWl0RHJhaW49MCxMZS5lbWl0KCJkYXRhIixIZSkpOihCZS5sZW5ndGgrPUJlLm9iamVjdE1vZGU/MTpIZS5sZW5ndGgsUWU/QmUuYnVmZmVyLnVuc2hpZnQoSGUpOkJlLmJ1ZmZlci5wdXNoKEhlKSxCZS5uZWVk'@;
put 'UmVhZGFibGUmJnkoTGUpKSxTKExlLEJlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoTi5wcm90b3R5cGUsImRlc3Ryb3llZCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJv'@;
put 'eWVkfSxzZXQ6ZnVuY3Rpb24oTGUpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD1MZSl9fSksTi5wcm90b3R5cGUuZGVzdHJveT10ZS5kZXN0cm95LE4ucHJvdG90eXBlLl91bmRlc3Ryb3k9dGUudW5kZXN0cm95LE4ucHJvdG90eXBlLl9kZXN0'@;
put 'cm95PWZ1bmN0aW9uKExlLEJlKXtCZShMZSl9LE4ucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oTGUsQmUpe3ZhciBIZSxRZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiBRZS5vYmplY3RNb2RlP0hlPSEwOiJzdHJpbmciPT10eXBlb2YgTGUmJigoQmU9QmV8fFFlLmRlZmF1bHRFbmNvZGlu'@;
put 'ZykhPT1RZS5lbmNvZGluZyYmKExlPUUuZnJvbShMZSxCZSksQmU9IiIpLEhlPSEwKSxGKHRoaXMsTGUsQmUsITEsSGUpfSxOLnByb3RvdHlwZS51bnNoaWZ0PWZ1bmN0aW9uKExlKXtyZXR1cm4gRih0aGlzLExlLG51bGwsITAsITEpfSxOLnByb3RvdHlwZS5pc1BhdXNlZD1mdW5jdGlvbigp'@;
put 'e3JldHVybiExPT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nfSxOLnByb3RvdHlwZS5zZXRFbmNvZGluZz1mdW5jdGlvbihMZSl7R3x8KEc9TCgyNTUzKS5TdHJpbmdEZWNvZGVyKTt2YXIgQmU9bmV3IEcoTGUpO3RoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlcj1CZSx0aGlzLl9yZWFk'@;
put 'YWJsZVN0YXRlLmVuY29kaW5nPXRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlci5lbmNvZGluZztmb3IodmFyIEhlPXRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLmhlYWQsUWU9IiI7bnVsbCE9PUhlOylRZSs9QmUud3JpdGUoSGUuZGF0YSksSGU9SGUubmV4dDtyZXR1cm4gdGhpcy5fcmVh'@;
put 'ZGFibGVTdGF0ZS5idWZmZXIuY2xlYXIoKSwiIiE9PVFlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5wdXNoKFFlKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmxlbmd0aD1RZS5sZW5ndGgsdGhpc307dmFyIEM9MTA3Mzc0MTgyNDtmdW5jdGlvbiBNKExlLEJlKXtyZXR1cm4gTGU8PTB8fDA9'@;
put 'PT1CZS5sZW5ndGgmJkJlLmVuZGVkPzA6QmUub2JqZWN0TW9kZT8xOkxlIT1MZT9CZS5mbG93aW5nJiZCZS5sZW5ndGg/QmUuYnVmZmVyLmhlYWQuZGF0YS5sZW5ndGg6QmUubGVuZ3RoOihMZT5CZS5oaWdoV2F0ZXJNYXJrJiYoQmUuaGlnaFdhdGVyTWFyaz0oKEhlPUxlKT49Qz9IZT1DOihI'@;
put 'ZS0tLEhlfD1IZT4+PjEsSGV8PUhlPj4+MixIZXw9SGU+Pj40LEhlfD1IZT4+PjgsSGV8PUhlPj4+MTYsSGUrKyksSGUpKSxMZTw9QmUubGVuZ3RoP0xlOkJlLmVuZGVkP0JlLmxlbmd0aDooQmUubmVlZFJlYWRhYmxlPSEwLDApKTt2YXIgSGV9ZnVuY3Rpb24geShMZSl7dmFyIEJlPUxlLl9y'@;
put 'ZWFkYWJsZVN0YXRlO2ooImVtaXRSZWFkYWJsZSIsQmUubmVlZFJlYWRhYmxlLEJlLmVtaXR0ZWRSZWFkYWJsZSksQmUubmVlZFJlYWRhYmxlPSExLEJlLmVtaXR0ZWRSZWFkYWJsZXx8KGooImVtaXRSZWFkYWJsZSIsQmUuZmxvd2luZyksQmUuZW1pdHRlZFJlYWRhYmxlPSEwLEoubmV4dFRp'@;
put 'Y2socCxMZSkpfWZ1bmN0aW9uIHAoTGUpe3ZhciBCZT1MZS5fcmVhZGFibGVTdGF0ZTtqKCJlbWl0UmVhZGFibGVfIixCZS5kZXN0cm95ZWQsQmUubGVuZ3RoLEJlLmVuZGVkKSxCZS5kZXN0cm95ZWR8fCFCZS5sZW5ndGgmJiFCZS5lbmRlZHx8KExlLmVtaXQoInJlYWRhYmxlIiksQmUuZW1p'@;
put 'dHRlZFJlYWRhYmxlPSExKSxCZS5uZWVkUmVhZGFibGU9IUJlLmZsb3dpbmcmJiFCZS5lbmRlZCYmQmUubGVuZ3RoPD1CZS5oaWdoV2F0ZXJNYXJrLGtlKExlKX1mdW5jdGlvbiBTKExlLEJlKXtCZS5yZWFkaW5nTW9yZXx8KEJlLnJlYWRpbmdNb3JlPSEwLEoubmV4dFRpY2soUSxMZSxCZSkp'@;
put 'fWZ1bmN0aW9uIFEoTGUsQmUpe2Zvcig7IUJlLnJlYWRpbmcmJiFCZS5lbmRlZCYmKEJlLmxlbmd0aDxCZS5oaWdoV2F0ZXJNYXJrfHxCZS5mbG93aW5nJiYwPT09QmUubGVuZ3RoKTspe3ZhciBIZT1CZS5sZW5ndGg7aWYoaigibWF5YmVSZWFkTW9yZSByZWFkIDAiKSxMZS5yZWFkKDApLEhl'@;
put 'PT09QmUubGVuZ3RoKWJyZWFrfUJlLnJlYWRpbmdNb3JlPSExfWZ1bmN0aW9uIHJlKExlKXt2YXIgQmU9TGUuX3JlYWRhYmxlU3RhdGU7QmUucmVhZGFibGVMaXN0ZW5pbmc9TGUubGlzdGVuZXJDb3VudCgicmVhZGFibGUiKT4wLEJlLnJlc3VtZVNjaGVkdWxlZCYmIUJlLnBhdXNlZD9CZS5m'@;
put 'bG93aW5nPSEwOkxlLmxpc3RlbmVyQ291bnQoImRhdGEiKT4wJiZMZS5yZXN1bWUoKX1mdW5jdGlvbiBmZShMZSl7aigicmVhZGFibGUgbmV4dHRpY2sgcmVhZCAwIiksTGUucmVhZCgwKX1mdW5jdGlvbiBtZShMZSxCZSl7aigicmVzdW1lIixCZS5yZWFkaW5nKSxCZS5yZWFkaW5nfHxMZS5y'@;
put 'ZWFkKDApLEJlLnJlc3VtZVNjaGVkdWxlZD0hMSxMZS5lbWl0KCJyZXN1bWUiKSxrZShMZSksQmUuZmxvd2luZyYmIUJlLnJlYWRpbmcmJkxlLnJlYWQoMCl9ZnVuY3Rpb24ga2UoTGUpe3ZhciBCZT1MZS5fcmVhZGFibGVTdGF0ZTtmb3IoaigiZmxvdyIsQmUuZmxvd2luZyk7QmUuZmxvd2lu'@;
put 'ZyYmbnVsbCE9PUxlLnJlYWQoKTspO31mdW5jdGlvbiBUZShMZSxCZSl7cmV0dXJuIDA9PT1CZS5sZW5ndGg/bnVsbDooQmUub2JqZWN0TW9kZT9IZT1CZS5idWZmZXIuc2hpZnQoKTohTGV8fExlPj1CZS5sZW5ndGg/KEhlPUJlLmRlY29kZXI/QmUuYnVmZmVyLmpvaW4oIiIpOjE9PT1CZS5i'@;
put 'dWZmZXIubGVuZ3RoP0JlLmJ1ZmZlci5maXJzdCgpOkJlLmJ1ZmZlci5jb25jYXQoQmUubGVuZ3RoKSxCZS5idWZmZXIuY2xlYXIoKSk6SGU9QmUuYnVmZmVyLmNvbnN1bWUoTGUsQmUuZGVjb2RlciksSGUpO3ZhciBIZX1mdW5jdGlvbiBQZShMZSl7dmFyIEJlPUxlLl9yZWFkYWJsZVN0YXRl'@;
put 'O2ooImVuZFJlYWRhYmxlIixCZS5lbmRFbWl0dGVkKSxCZS5lbmRFbWl0dGVkfHwoQmUuZW5kZWQ9ITAsSi5uZXh0VGljayhGZSxCZSxMZSkpfWZ1bmN0aW9uIEZlKExlLEJlKXtpZihqKCJlbmRSZWFkYWJsZU5UIixMZS5lbmRFbWl0dGVkLExlLmxlbmd0aCksIUxlLmVuZEVtaXR0ZWQmJjA9'@;
put 'PT1MZS5sZW5ndGgmJihMZS5lbmRFbWl0dGVkPSEwLEJlLnJlYWRhYmxlPSExLEJlLmVtaXQoImVuZCIpLExlLmF1dG9EZXN0cm95KSl7dmFyIEhlPUJlLl93cml0YWJsZVN0YXRlOyghSGV8fEhlLmF1dG9EZXN0cm95JiZIZS5maW5pc2hlZCkmJkJlLmRlc3Ryb3koKX19ZnVuY3Rpb24gTmUo'@;
put 'TGUsQmUpe2Zvcih2YXIgSGU9MCxRZT1MZS5sZW5ndGg7SGU8UWU7SGUrKylpZihMZVtIZV09PT1CZSlyZXR1cm4gSGU7cmV0dXJuLTF9Ti5wcm90b3R5cGUucmVhZD1mdW5jdGlvbihMZSl7aigicmVhZCIsTGUpLExlPXBhcnNlSW50KExlLDEwKTt2YXIgQmU9dGhpcy5fcmVhZGFibGVTdGF0'@;
put 'ZSxIZT1MZTtpZigwIT09TGUmJihCZS5lbWl0dGVkUmVhZGFibGU9ITEpLDA9PT1MZSYmQmUubmVlZFJlYWRhYmxlJiYoKDAhPT1CZS5oaWdoV2F0ZXJNYXJrP0JlLmxlbmd0aD49QmUuaGlnaFdhdGVyTWFyazpCZS5sZW5ndGg+MCl8fEJlLmVuZGVkKSlyZXR1cm4gaigicmVhZDogZW1pdFJl'@;
put 'YWRhYmxlIixCZS5sZW5ndGgsQmUuZW5kZWQpLDA9PT1CZS5sZW5ndGgmJkJlLmVuZGVkP1BlKHRoaXMpOnkodGhpcyksbnVsbDtpZigwPT09KExlPU0oTGUsQmUpKSYmQmUuZW5kZWQpcmV0dXJuIDA9PT1CZS5sZW5ndGgmJlBlKHRoaXMpLG51bGw7dmFyIFFlLG10PUJlLm5lZWRSZWFkYWJs'@;
put 'ZTtyZXR1cm4gaigibmVlZCByZWFkYWJsZSIsbXQpLCgwPT09QmUubGVuZ3RofHxCZS5sZW5ndGgtTGU8QmUuaGlnaFdhdGVyTWFyaykmJmooImxlbmd0aCBsZXNzIHRoYW4gd2F0ZXJtYXJrIixtdD0hMCksQmUuZW5kZWR8fEJlLnJlYWRpbmc/aigicmVhZGluZyBvciBlbmRlZCIsbXQ9ITEp'@;
put 'Om10JiYoaigiZG8gcmVhZCIpLEJlLnJlYWRpbmc9ITAsQmUuc3luYz0hMCwwPT09QmUubGVuZ3RoJiYoQmUubmVlZFJlYWRhYmxlPSEwKSx0aGlzLl9yZWFkKEJlLmhpZ2hXYXRlck1hcmspLEJlLnN5bmM9ITEsQmUucmVhZGluZ3x8KExlPU0oSGUsQmUpKSksbnVsbD09PShRZT1MZT4wP1Rl'@;
put 'KExlLEJlKTpudWxsKT8oQmUubmVlZFJlYWRhYmxlPUJlLmxlbmd0aDw9QmUuaGlnaFdhdGVyTWFyayxMZT0wKTooQmUubGVuZ3RoLT1MZSxCZS5hd2FpdERyYWluPTApLDA9PT1CZS5sZW5ndGgmJihCZS5lbmRlZHx8KEJlLm5lZWRSZWFkYWJsZT0hMCksSGUhPT1MZSYmQmUuZW5kZWQmJlBl'@;
put 'KHRoaXMpKSxudWxsIT09UWUmJnRoaXMuZW1pdCgiZGF0YSIsUWUpLFFlfSxOLnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbihMZSl7WSh0aGlzLG5ldyB1ZSgiX3JlYWQoKSIpKX0sTi5wcm90b3R5cGUucGlwZT1mdW5jdGlvbihMZSxCZSl7dmFyIEhlPXRoaXMsUWU9dGhpcy5fcmVhZGFibGVT'@;
put 'dGF0ZTtzd2l0Y2goUWUucGlwZXNDb3VudCl7Y2FzZSAwOlFlLnBpcGVzPUxlO2JyZWFrO2Nhc2UgMTpRZS5waXBlcz1bUWUucGlwZXMsTGVdO2JyZWFrO2RlZmF1bHQ6UWUucGlwZXMucHVzaChMZSl9UWUucGlwZXNDb3VudCs9MSxqKCJwaXBlIGNvdW50PSVkIG9wdHM9JWoiLFFlLnBpcGVz'@;
put 'Q291bnQsQmUpO3ZhciBtdD1CZSYmITE9PT1CZS5lbmR8fExlPT09Si5zdGRvdXR8fExlPT09Si5zdGRlcnI/RWU6d2U7ZnVuY3Rpb24gd2UoKXtqKCJvbmVuZCIpLExlLmVuZCgpfVFlLmVuZEVtaXR0ZWQ/Si5uZXh0VGljayhtdCk6SGUub25jZSgiZW5kIixtdCksTGUub24oInVucGlwZSIs'@;
put 'ZnVuY3Rpb24gS2UoRGUsJGUpe2ooIm9udW5waXBlIiksRGU9PT1IZSYmJGUmJiExPT09JGUuaGFzVW5waXBlZCYmKCRlLmhhc1VucGlwZWQ9ITAsaigiY2xlYW51cCIpLExlLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIscWUpLExlLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLGh0KSxMZS5yZW1v'@;
put 'dmVMaXN0ZW5lcigiZHJhaW4iLEllKSxMZS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLG50KSxMZS5yZW1vdmVMaXN0ZW5lcigidW5waXBlIixLZSksSGUucmVtb3ZlTGlzdGVuZXIoImVuZCIsd2UpLEhlLnJlbW92ZUxpc3RlbmVyKCJlbmQiLEVlKSxIZS5yZW1vdmVMaXN0ZW5lcigiZGF0YSIs'@;
put 'ZXQpLE9lPSEwLCFRZS5hd2FpdERyYWlufHxMZS5fd3JpdGFibGVTdGF0ZSYmIUxlLl93cml0YWJsZVN0YXRlLm5lZWREcmFpbnx8SWUoKSl9KTt2YXIgRGUsSWU9KERlPUhlLGZ1bmN0aW9uKCl7dmFyICRlPURlLl9yZWFkYWJsZVN0YXRlO2ooInBpcGVPbkRyYWluIiwkZS5hd2FpdERyYWlu'@;
put 'KSwkZS5hd2FpdERyYWluJiYkZS5hd2FpdERyYWluLS0sMD09PSRlLmF3YWl0RHJhaW4mJkkoRGUsImRhdGEiKSYmKCRlLmZsb3dpbmc9ITAsa2UoRGUpKX0pO0xlLm9uKCJkcmFpbiIsSWUpO3ZhciBPZT0hMTtmdW5jdGlvbiBldChEZSl7aigib25kYXRhIik7dmFyICRlPUxlLndyaXRlKERl'@;
put 'KTtqKCJkZXN0LndyaXRlIiwkZSksITE9PT0kZSYmKCgxPT09UWUucGlwZXNDb3VudCYmUWUucGlwZXM9PT1MZXx8UWUucGlwZXNDb3VudD4xJiYtMSE9PU5lKFFlLnBpcGVzLExlKSkmJiFPZSYmKGooImZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZSIsUWUuYXdhaXREcmFpbiksUWUuYXdh'@;
put 'aXREcmFpbisrKSxIZS5wYXVzZSgpKX1mdW5jdGlvbiBudChEZSl7aigib25lcnJvciIsRGUpLEVlKCksTGUucmVtb3ZlTGlzdGVuZXIoImVycm9yIixudCksMD09PUkoTGUsImVycm9yIikmJlkoTGUsRGUpfWZ1bmN0aW9uIHFlKCl7TGUucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsaHQpLEVl'@;
put 'KCl9ZnVuY3Rpb24gaHQoKXtqKCJvbmZpbmlzaCIpLExlLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIscWUpLEVlKCl9ZnVuY3Rpb24gRWUoKXtqKCJ1bnBpcGUiKSxIZS51bnBpcGUoTGUpfXJldHVybiBIZS5vbigiZGF0YSIsZXQpLGZ1bmN0aW9uKERlLCRlLGF0KXtpZigiZnVuY3Rpb24iPT10'@;
put 'eXBlb2YgRGUucHJlcGVuZExpc3RlbmVyKXJldHVybiBEZS5wcmVwZW5kTGlzdGVuZXIoJGUsYXQpO0RlLl9ldmVudHMmJkRlLl9ldmVudHNbJGVdP0FycmF5LmlzQXJyYXkoRGUuX2V2ZW50c1skZV0pP0RlLl9ldmVudHNbJGVdLnVuc2hpZnQoYXQpOkRlLl9ldmVudHNbJGVdPVthdCxEZS5f'@;
put 'ZXZlbnRzWyRlXV06RGUub24oJGUsYXQpfShMZSwiZXJyb3IiLG50KSxMZS5vbmNlKCJjbG9zZSIscWUpLExlLm9uY2UoImZpbmlzaCIsaHQpLExlLmVtaXQoInBpcGUiLEhlKSxRZS5mbG93aW5nfHwoaigicGlwZSByZXN1bWUiKSxIZS5yZXN1bWUoKSksTGV9LE4ucHJvdG90eXBlLnVucGlw'@;
put 'ZT1mdW5jdGlvbihMZSl7dmFyIEJlPXRoaXMuX3JlYWRhYmxlU3RhdGUsSGU9e2hhc1VucGlwZWQ6ITF9O2lmKDA9PT1CZS5waXBlc0NvdW50KXJldHVybiB0aGlzO2lmKDE9PT1CZS5waXBlc0NvdW50KXJldHVybiBMZSYmTGUhPT1CZS5waXBlc3x8KExlfHwoTGU9QmUucGlwZXMpLEJlLnBp'@;
put 'cGVzPW51bGwsQmUucGlwZXNDb3VudD0wLEJlLmZsb3dpbmc9ITEsTGUmJkxlLmVtaXQoInVucGlwZSIsdGhpcyxIZSkpLHRoaXM7aWYoIUxlKXt2YXIgUWU9QmUucGlwZXMsbXQ9QmUucGlwZXNDb3VudDtCZS5waXBlcz1udWxsLEJlLnBpcGVzQ291bnQ9MCxCZS5mbG93aW5nPSExO2Zvcih2'@;
put 'YXIgS2U9MDtLZTxtdDtLZSsrKVFlW0tlXS5lbWl0KCJ1bnBpcGUiLHRoaXMse2hhc1VucGlwZWQ6ITF9KTtyZXR1cm4gdGhpc312YXIgd2U9TmUoQmUucGlwZXMsTGUpO3JldHVybi0xPT09d2V8fChCZS5waXBlcy5zcGxpY2Uod2UsMSksQmUucGlwZXNDb3VudC09MSwxPT09QmUucGlwZXND'@;
put 'b3VudCYmKEJlLnBpcGVzPUJlLnBpcGVzWzBdKSxMZS5lbWl0KCJ1bnBpcGUiLHRoaXMsSGUpKSx0aGlzfSxOLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1OLnByb3RvdHlwZS5vbj1mdW5jdGlvbihMZSxCZSl7dmFyIEhlPVIucHJvdG90eXBlLm9uLmNhbGwodGhpcyxMZSxCZSksUWU9dGhpcy5f'@;
put 'cmVhZGFibGVTdGF0ZTtyZXR1cm4iZGF0YSI9PT1MZT8oUWUucmVhZGFibGVMaXN0ZW5pbmc9dGhpcy5saXN0ZW5lckNvdW50KCJyZWFkYWJsZSIpPjAsITEhPT1RZS5mbG93aW5nJiZ0aGlzLnJlc3VtZSgpKToicmVhZGFibGUiPT09TGUmJihRZS5lbmRFbWl0dGVkfHxRZS5yZWFkYWJsZUxp'@;
put 'c3RlbmluZ3x8KFFlLnJlYWRhYmxlTGlzdGVuaW5nPVFlLm5lZWRSZWFkYWJsZT0hMCxRZS5mbG93aW5nPSExLFFlLmVtaXR0ZWRSZWFkYWJsZT0hMSxqKCJvbiByZWFkYWJsZSIsUWUubGVuZ3RoLFFlLnJlYWRpbmcpLFFlLmxlbmd0aD95KHRoaXMpOlFlLnJlYWRpbmd8fEoubmV4dFRpY2so'@;
put 'ZmUsdGhpcykpKSxIZX0sTi5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oTGUsQmUpe3ZhciBIZT1SLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lci5jYWxsKHRoaXMsTGUsQmUpO3JldHVybiJyZWFkYWJsZSI9PT1MZSYmSi5uZXh0VGljayhyZSx0aGlzKSxIZX0sTi5wcm90b3R5'@;
put 'cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKExlKXt2YXIgQmU9Ui5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4icmVhZGFibGUiIT09TGUmJnZvaWQgMCE9PUxlfHxKLm5leHRUaWNrKHJlLHRoaXMpLEJlfSxOLnByb3RvdHlw'@;
put 'ZS5yZXN1bWU9ZnVuY3Rpb24oKXt2YXIgSGUsTGU9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gTGUuZmxvd2luZ3x8KGooInJlc3VtZSIpLExlLmZsb3dpbmc9IUxlLnJlYWRhYmxlTGlzdGVuaW5nLChIZT1MZSkucmVzdW1lU2NoZWR1bGVkfHwoSGUucmVzdW1lU2NoZWR1bGVkPSEwLEou'@;
put 'bmV4dFRpY2sobWUsdGhpcyxIZSkpKSxMZS5wYXVzZWQ9ITEsdGhpc30sTi5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXtyZXR1cm4gaigiY2FsbCBwYXVzZSBmbG93aW5nPSVqIix0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpLCExIT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5n'@;
put 'JiYoaigicGF1c2UiKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9ITEsdGhpcy5lbWl0KCJwYXVzZSIpKSx0aGlzLl9yZWFkYWJsZVN0YXRlLnBhdXNlZD0hMCx0aGlzfSxOLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKExlKXt2YXIgQmU9dGhpcyxIZT10aGlzLl9yZWFkYWJsZVN0YXRl'@;
put 'LFFlPSExO2Zvcih2YXIgbXQgaW4gTGUub24oImVuZCIsZnVuY3Rpb24oKXtpZihqKCJ3cmFwcGVkIGVuZCIpLEhlLmRlY29kZXImJiFIZS5lbmRlZCl7dmFyIHdlPUhlLmRlY29kZXIuZW5kKCk7d2UmJndlLmxlbmd0aCYmQmUucHVzaCh3ZSl9QmUucHVzaChudWxsKX0pLExlLm9uKCJkYXRh'@;
put 'IixmdW5jdGlvbih3ZSl7aigid3JhcHBlZCBkYXRhIiksSGUuZGVjb2RlciYmKHdlPUhlLmRlY29kZXIud3JpdGUod2UpKSxIZS5vYmplY3RNb2RlJiZudWxsPT13ZXx8KEhlLm9iamVjdE1vZGV8fHdlJiZ3ZS5sZW5ndGgpJiYoQmUucHVzaCh3ZSl8fChRZT0hMCxMZS5wYXVzZSgpKSl9KSxM'@;
put 'ZSl2b2lkIDA9PT10aGlzW210XSYmImZ1bmN0aW9uIj09dHlwZW9mIExlW210XSYmKHRoaXNbbXRdPWZ1bmN0aW9uKHdlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTGVbd2VdLmFwcGx5KExlLGFyZ3VtZW50cyl9fShtdCkpO2Zvcih2YXIgS2U9MDtLZTxiLmxlbmd0aDtLZSsrKUxlLm9u'@;
put 'KGJbS2VdLHRoaXMuZW1pdC5iaW5kKHRoaXMsYltLZV0pKTtyZXR1cm4gdGhpcy5fcmVhZD1mdW5jdGlvbih3ZSl7aigid3JhcHBlZCBfcmVhZCIsd2UpLFFlJiYoUWU9ITEsTGUucmVzdW1lKCkpfSx0aGlzfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoTi5wcm90b3R5cGVbU3ltYm9s'@;
put 'LmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PVcmJihXPUwoNTg1MCkpLFcodGhpcyl9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTi5wcm90b3R5cGUsInJlYWRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRo'@;
put 'aXMuX3JlYWRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTi5wcm90b3R5cGUsInJlYWRhYmxlQnVmZmVyIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5i'@;
put 'dWZmZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE4ucHJvdG90eXBlLCJyZWFkYWJsZUZsb3dpbmciLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmd9LHNldDpmdW5jdGlvbihMZSl7dGhpcy5fcmVhZGFibGVTdGF0ZSYm'@;
put 'KHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz1MZSl9fSksTi5fZnJvbUxpc3Q9VGUsT2JqZWN0LmRlZmluZVByb3BlcnR5KE4ucHJvdG90eXBlLCJyZWFkYWJsZUxlbmd0aCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUubGVuZ3Ro'@;
put 'fX0pLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihOLmZyb209ZnVuY3Rpb24oTGUsQmUpe3JldHVybiB2b2lkIDA9PT1VJiYoVT1MKDUxNjcpKSxVKE4sTGUsQmUpfSl9LDQ2MDU6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0IjtILmV4cG9ydHM9Vjt2YXIgSz1MKDQyODEpLnEsSj1LLkVSUl9N'@;
put 'RVRIT0RfTk9UX0lNUExFTUVOVEVELEk9Sy5FUlJfTVVMVElQTEVfQ0FMTEJBQ0ssUj1LLkVSUl9UUkFOU0ZPUk1fQUxSRUFEWV9UUkFOU0ZPUk1JTkcsRT1LLkVSUl9UUkFOU0ZPUk1fV0lUSF9MRU5HVEhfMCx6PUwoNjc1Myk7ZnVuY3Rpb24gaihVLHEpe3ZhciB0ZT10aGlzLl90cmFuc2Zv'@;
put 'cm1TdGF0ZTt0ZS50cmFuc2Zvcm1pbmc9ITE7dmFyIG5lPXRlLndyaXRlY2I7aWYobnVsbD09PW5lKXJldHVybiB0aGlzLmVtaXQoImVycm9yIixuZXcgSSk7dGUud3JpdGVjaHVuaz1udWxsLHRlLndyaXRlY2I9bnVsbCxudWxsIT1xJiZ0aGlzLnB1c2gocSksbmUoVSk7dmFyIGllPXRoaXMu'@;
put 'X3JlYWRhYmxlU3RhdGU7aWUucmVhZGluZz0hMSwoaWUubmVlZFJlYWRhYmxlfHxpZS5sZW5ndGg8aWUuaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQoaWUuaGlnaFdhdGVyTWFyayl9ZnVuY3Rpb24gVihVKXtpZighKHRoaXMgaW5zdGFuY2VvZiBWKSlyZXR1cm4gbmV3IFYoVSk7ei5jYWxs'@;
put 'KHRoaXMsVSksdGhpcy5fdHJhbnNmb3JtU3RhdGU9e2FmdGVyVHJhbnNmb3JtOmouYmluZCh0aGlzKSxuZWVkVHJhbnNmb3JtOiExLHRyYW5zZm9ybWluZzohMSx3cml0ZWNiOm51bGwsd3JpdGVjaHVuazpudWxsLHdyaXRlZW5jb2Rpbmc6bnVsbH0sdGhpcy5fcmVhZGFibGVTdGF0ZS5uZWVk'@;
put 'UmVhZGFibGU9ITAsdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jPSExLFUmJigiZnVuY3Rpb24iPT10eXBlb2YgVS50cmFuc2Zvcm0mJih0aGlzLl90cmFuc2Zvcm09VS50cmFuc2Zvcm0pLCJmdW5jdGlvbiI9PXR5cGVvZiBVLmZsdXNoJiYodGhpcy5fZmx1c2g9VS5mbHVzaCkpLHRoaXMub24o'@;
put 'InByZWZpbmlzaCIsRyl9ZnVuY3Rpb24gRygpe3ZhciBVPXRoaXM7ImZ1bmN0aW9uIiE9dHlwZW9mIHRoaXMuX2ZsdXNofHx0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD9XKHRoaXMsbnVsbCxudWxsKTp0aGlzLl9mbHVzaChmdW5jdGlvbihxLHRlKXtXKFUscSx0ZSl9KX1mdW5jdGlv'@;
put 'biBXKFUscSx0ZSl7aWYocSlyZXR1cm4gVS5lbWl0KCJlcnJvciIscSk7aWYobnVsbCE9dGUmJlUucHVzaCh0ZSksVS5fd3JpdGFibGVTdGF0ZS5sZW5ndGgpdGhyb3cgbmV3IEU7aWYoVS5fdHJhbnNmb3JtU3RhdGUudHJhbnNmb3JtaW5nKXRocm93IG5ldyBSO3JldHVybiBVLnB1c2gobnVs'@;
put 'bCl9TCg1NzE3KShWLHopLFYucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oVSxxKXtyZXR1cm4gdGhpcy5fdHJhbnNmb3JtU3RhdGUubmVlZFRyYW5zZm9ybT0hMSx6LnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcyxVLHEpfSxWLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKFUscSx0ZSl7'@;
put 'dGUobmV3IEooIl90cmFuc2Zvcm0oKSIpKX0sVi5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKFUscSx0ZSl7dmFyIG5lPXRoaXMuX3RyYW5zZm9ybVN0YXRlO2lmKG5lLndyaXRlY2I9dGUsbmUud3JpdGVjaHVuaz1VLG5lLndyaXRlZW5jb2Rpbmc9cSwhbmUudHJhbnNmb3JtaW5nKXt2YXIg'@;
put 'aWU9dGhpcy5fcmVhZGFibGVTdGF0ZTsobmUubmVlZFRyYW5zZm9ybXx8aWUubmVlZFJlYWRhYmxlfHxpZS5sZW5ndGg8aWUuaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQoaWUuaGlnaFdhdGVyTWFyayl9fSxWLnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbihVKXt2YXIgcT10aGlzLl90cmFu'@;
put 'c2Zvcm1TdGF0ZTtudWxsPT09cS53cml0ZWNodW5rfHxxLnRyYW5zZm9ybWluZz9xLm5lZWRUcmFuc2Zvcm09ITA6KHEudHJhbnNmb3JtaW5nPSEwLHRoaXMuX3RyYW5zZm9ybShxLndyaXRlY2h1bmsscS53cml0ZWVuY29kaW5nLHEuYWZ0ZXJUcmFuc2Zvcm0pKX0sVi5wcm90b3R5cGUuX2Rl'@;
put 'c3Ryb3k9ZnVuY3Rpb24oVSxxKXt6LnByb3RvdHlwZS5fZGVzdHJveS5jYWxsKHRoaXMsVSxmdW5jdGlvbih0ZSl7cSh0ZSl9KX19LDQyMjk6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSyxKPUwoNDE1NSk7ZnVuY3Rpb24gSShTKXt2YXIgUT10aGlzO3RoaXMubmV4dD1udWxsLHRoaXMu'@;
put 'ZW50cnk9bnVsbCx0aGlzLmZpbmlzaD1mdW5jdGlvbigpeyFmdW5jdGlvbihyZSxmZSxtZSl7dmFyIGtlPXJlLmVudHJ5O2ZvcihyZS5lbnRyeT1udWxsO2tlOyl7dmFyIFRlPWtlLmNhbGxiYWNrO2ZlLnBlbmRpbmdjYi0tLFRlKHZvaWQgMCksa2U9a2UubmV4dH1mZS5jb3JrZWRSZXF1ZXN0'@;
put 'c0ZyZWUubmV4dD1yZX0oUSxTKX19SC5leHBvcnRzPU4sTi5Xcml0YWJsZVN0YXRlPXg7dmFyIFYsUj17ZGVwcmVjYXRlOkwoNDkyNyl9LEU9TCgyNTAzKSx6PUwoODc2NCkuQnVmZmVyLGo9KHZvaWQgMCE9PUwuZz9MLmc6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBzZWxmPCJ1'@;
put 'Ij9zZWxmOnt9KS5VaW50OEFycmF5fHxmdW5jdGlvbigpe30sRz1MKDExOTUpLFc9TCgyNDU3KS5nZXRIaWdoV2F0ZXJNYXJrLFU9TCg0MjgxKS5xLHE9VS5FUlJfSU5WQUxJRF9BUkdfVFlQRSx0ZT1VLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELG5lPVUuRVJSX01VTFRJUExFX0NBTExC'@;
put 'QUNLLGllPVUuRVJSX1NUUkVBTV9DQU5OT1RfUElQRSxsZT1VLkVSUl9TVFJFQU1fREVTVFJPWUVELGRlPVUuRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUyx1ZT1VLkVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5ELGNlPVUuRVJSX1VOS05PV05fRU5DT0RJTkcsWT1HLmVycm9yT3JEZXN0cm95O2Z1'@;
put 'bmN0aW9uIGIoKXt9ZnVuY3Rpb24geChTLFEscmUpe0s9S3x8TCg2NzUzKSwiYm9vbGVhbiIhPXR5cGVvZiByZSYmKHJlPVEgaW5zdGFuY2VvZiBLKSx0aGlzLm9iamVjdE1vZGU9ISEoUz1TfHx7fSkub2JqZWN0TW9kZSxyZSYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEh'@;
put 'Uy53cml0YWJsZU9iamVjdE1vZGUpLHRoaXMuaGlnaFdhdGVyTWFyaz1XKHRoaXMsUywid3JpdGFibGVIaWdoV2F0ZXJNYXJrIixyZSksdGhpcy5maW5hbENhbGxlZD0hMSx0aGlzLm5lZWREcmFpbj0hMSx0aGlzLmVuZGluZz0hMSx0aGlzLmVuZGVkPSExLHRoaXMuZmluaXNoZWQ9ITEsdGhp'@;
put 'cy5kZXN0cm95ZWQ9ITEsdGhpcy5kZWNvZGVTdHJpbmdzPSEoITE9PT1TLmRlY29kZVN0cmluZ3MpLHRoaXMuZGVmYXVsdEVuY29kaW5nPVMuZGVmYXVsdEVuY29kaW5nfHwidXRmOCIsdGhpcy5sZW5ndGg9MCx0aGlzLndyaXRpbmc9ITEsdGhpcy5jb3JrZWQ9MCx0aGlzLnN5bmM9ITAsdGhp'@;
put 'cy5idWZmZXJQcm9jZXNzaW5nPSExLHRoaXMub253cml0ZT1mdW5jdGlvbihtZSl7IWZ1bmN0aW9uKGtlLFRlKXt2YXIgQmUsUGU9a2UuX3dyaXRhYmxlU3RhdGUsRmU9UGUuc3luYyxOZT1QZS53cml0ZWNiO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBOZSl0aHJvdyBuZXcgbmU7aWYoKEJlPVBl'@;
put 'KS53cml0aW5nPSExLEJlLndyaXRlY2I9bnVsbCxCZS5sZW5ndGgtPUJlLndyaXRlbGVuLEJlLndyaXRlbGVuPTAsVGUpIWZ1bmN0aW9uKEJlLEhlLFFlLG10LEtlKXstLUhlLnBlbmRpbmdjYixRZT8oSi5uZXh0VGljayhLZSxtdCksSi5uZXh0VGljayhwLEJlLEhlKSxCZS5fd3JpdGFibGVT'@;
put 'dGF0ZS5lcnJvckVtaXR0ZWQ9ITAsWShCZSxtdCkpOihLZShtdCksQmUuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLFkoQmUsbXQpLHAoQmUsSGUpKX0oa2UsUGUsRmUsVGUsTmUpO2Vsc2V7dmFyIExlPU0oUGUpfHxrZS5kZXN0cm95ZWQ7TGV8fFBlLmNvcmtlZHx8UGUuYnVmZmVy'@;
put 'UHJvY2Vzc2luZ3x8IVBlLmJ1ZmZlcmVkUmVxdWVzdHx8QyhrZSxQZSksRmU/Si5uZXh0VGljayhnLGtlLFBlLExlLE5lKTpnKGtlLFBlLExlLE5lKX19KFEsbWUpfSx0aGlzLndyaXRlY2I9bnVsbCx0aGlzLndyaXRlbGVuPTAsdGhpcy5idWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLmxhc3RC'@;
put 'dWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLnBlbmRpbmdjYj0wLHRoaXMucHJlZmluaXNoZWQ9ITEsdGhpcy5lcnJvckVtaXR0ZWQ9ITEsdGhpcy5lbWl0Q2xvc2U9ITEhPT1TLmVtaXRDbG9zZSx0aGlzLmF1dG9EZXN0cm95PSEhUy5hdXRvRGVzdHJveSx0aGlzLmJ1ZmZlcmVkUmVxdWVzdENv'@;
put 'dW50PTAsdGhpcy5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IEkodGhpcyl9ZnVuY3Rpb24gTihTKXt2YXIgUT10aGlzIGluc3RhbmNlb2YoSz1LfHxMKDY3NTMpKTtpZighUSYmIVYuY2FsbChOLHRoaXMpKXJldHVybiBuZXcgTihTKTt0aGlzLl93cml0YWJsZVN0YXRlPW5ldyB4KFMsdGhpcyxR'@;
put 'KSx0aGlzLndyaXRhYmxlPSEwLFMmJigiZnVuY3Rpb24iPT10eXBlb2YgUy53cml0ZSYmKHRoaXMuX3dyaXRlPVMud3JpdGUpLCJmdW5jdGlvbiI9PXR5cGVvZiBTLndyaXRldiYmKHRoaXMuX3dyaXRldj1TLndyaXRldiksImZ1bmN0aW9uIj09dHlwZW9mIFMuZGVzdHJveSYmKHRoaXMuX2Rl'@;
put 'c3Ryb3k9Uy5kZXN0cm95KSwiZnVuY3Rpb24iPT10eXBlb2YgUy5maW5hbCYmKHRoaXMuX2ZpbmFsPVMuZmluYWwpKSxFLmNhbGwodGhpcyl9ZnVuY3Rpb24gRihTLFEscmUsZmUsbWUsa2UsVGUpe1Eud3JpdGVsZW49ZmUsUS53cml0ZWNiPVRlLFEud3JpdGluZz0hMCxRLnN5bmM9ITAsUS5k'@;
put 'ZXN0cm95ZWQ/US5vbndyaXRlKG5ldyBsZSgid3JpdGUiKSk6cmU/Uy5fd3JpdGV2KG1lLFEub253cml0ZSk6Uy5fd3JpdGUobWUsa2UsUS5vbndyaXRlKSxRLnN5bmM9ITF9ZnVuY3Rpb24gZyhTLFEscmUsZmUpe3ZhciBtZSxrZTtyZXx8KG1lPVMsMD09PShrZT1RKS5sZW5ndGgmJmtlLm5l'@;
put 'ZWREcmFpbiYmKGtlLm5lZWREcmFpbj0hMSxtZS5lbWl0KCJkcmFpbiIpKSksUS5wZW5kaW5nY2ItLSxmZSgpLHAoUyxRKX1mdW5jdGlvbiBDKFMsUSl7US5idWZmZXJQcm9jZXNzaW5nPSEwO3ZhciByZT1RLmJ1ZmZlcmVkUmVxdWVzdDtpZihTLl93cml0ZXYmJnJlJiZyZS5uZXh0KXt2YXIg'@;
put 'bWU9bmV3IEFycmF5KFEuYnVmZmVyZWRSZXF1ZXN0Q291bnQpLGtlPVEuY29ya2VkUmVxdWVzdHNGcmVlO2tlLmVudHJ5PXJlO2Zvcih2YXIgVGU9MCxQZT0hMDtyZTspbWVbVGVdPXJlLHJlLmlzQnVmfHwoUGU9ITEpLHJlPXJlLm5leHQsVGUrPTE7bWUuYWxsQnVmZmVycz1QZSxGKFMsUSwh'@;
put 'MCxRLmxlbmd0aCxtZSwiIixrZS5maW5pc2gpLFEucGVuZGluZ2NiKyssUS5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwsa2UubmV4dD8oUS5jb3JrZWRSZXF1ZXN0c0ZyZWU9a2UubmV4dCxrZS5uZXh0PW51bGwpOlEuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBJKFEpLFEuYnVmZmVyZWRSZXF1'@;
put 'ZXN0Q291bnQ9MH1lbHNle2Zvcig7cmU7KXt2YXIgRmU9cmUuY2h1bms7aWYoRihTLFEsITEsUS5vYmplY3RNb2RlPzE6RmUubGVuZ3RoLEZlLHJlLmVuY29kaW5nLHJlLmNhbGxiYWNrKSxyZT1yZS5uZXh0LFEuYnVmZmVyZWRSZXF1ZXN0Q291bnQtLSxRLndyaXRpbmcpYnJlYWt9bnVsbD09'@;
put 'PXJlJiYoUS5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwpfVEuYnVmZmVyZWRSZXF1ZXN0PXJlLFEuYnVmZmVyUHJvY2Vzc2luZz0hMX1mdW5jdGlvbiBNKFMpe3JldHVybiBTLmVuZGluZyYmMD09PVMubGVuZ3RoJiZudWxsPT09Uy5idWZmZXJlZFJlcXVlc3QmJiFTLmZpbmlzaGVkJiYhUy53'@;
put 'cml0aW5nfWZ1bmN0aW9uIHkoUyxRKXtTLl9maW5hbChmdW5jdGlvbihyZSl7US5wZW5kaW5nY2ItLSxyZSYmWShTLHJlKSxRLnByZWZpbmlzaGVkPSEwLFMuZW1pdCgicHJlZmluaXNoIikscChTLFEpfSl9ZnVuY3Rpb24gcChTLFEpe3ZhciBtZSxrZSxyZT1NKFEpO2lmKHJlJiYobWU9Uywo'@;
put 'a2U9USkucHJlZmluaXNoZWR8fGtlLmZpbmFsQ2FsbGVkfHwoImZ1bmN0aW9uIiE9dHlwZW9mIG1lLl9maW5hbHx8a2UuZGVzdHJveWVkPyhrZS5wcmVmaW5pc2hlZD0hMCxtZS5lbWl0KCJwcmVmaW5pc2giKSk6KGtlLnBlbmRpbmdjYisrLGtlLmZpbmFsQ2FsbGVkPSEwLEoubmV4dFRpY2so'@;
put 'eSxtZSxrZSkpKSwwPT09US5wZW5kaW5nY2ImJihRLmZpbmlzaGVkPSEwLFMuZW1pdCgiZmluaXNoIiksUS5hdXRvRGVzdHJveSkpKXt2YXIgZmU9Uy5fcmVhZGFibGVTdGF0ZTsoIWZlfHxmZS5hdXRvRGVzdHJveSYmZmUuZW5kRW1pdHRlZCkmJlMuZGVzdHJveSgpfXJldHVybiByZX1MKDU3'@;
put 'MTcpKE4sRSkseC5wcm90b3R5cGUuZ2V0QnVmZmVyPWZ1bmN0aW9uKCl7Zm9yKHZhciBTPXRoaXMuYnVmZmVyZWRSZXF1ZXN0LFE9W107UzspUS5wdXNoKFMpLFM9Uy5uZXh0O3JldHVybiBRfSxmdW5jdGlvbigpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoeC5wcm90b3R5cGUsImJ1ZmZl'@;
put 'ciIse2dldDpSLmRlcHJlY2F0ZShmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEJ1ZmZlcigpfSwiX3dyaXRhYmxlU3RhdGUuYnVmZmVyIGlzIGRlcHJlY2F0ZWQuIFVzZSBfd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIgaW5zdGVhZC4iLCJERVAwMDAzIil9KX1jYXRjaHt9fSgpLCJmdW5jdGlv'@;
put 'biI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5oYXNJbnN0YW5jZSYmImZ1bmN0aW9uIj09dHlwZW9mIEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdPyhWPUZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOLFN5'@;
put 'bWJvbC5oYXNJbnN0YW5jZSx7dmFsdWU6ZnVuY3Rpb24oUyl7cmV0dXJuISFWLmNhbGwodGhpcyxTKXx8dGhpcz09PU4mJlMmJlMuX3dyaXRhYmxlU3RhdGUgaW5zdGFuY2VvZiB4fX0pKTpWPWZ1bmN0aW9uKFMpe3JldHVybiBTIGluc3RhbmNlb2YgdGhpc30sTi5wcm90b3R5cGUucGlwZT1m'@;
put 'dW5jdGlvbigpe1kodGhpcyxuZXcgaWUpfSxOLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihTLFEscmUpe3ZhciBmZSxQZSxGZSxOZSxtZT10aGlzLl93cml0YWJsZVN0YXRlLGtlPSExLFRlPSFtZS5vYmplY3RNb2RlJiYoei5pc0J1ZmZlcihmZT1TKXx8ZmUgaW5zdGFuY2VvZiBqKTtyZXR1'@;
put 'cm4gVGUmJiF6LmlzQnVmZmVyKFMpJiYoUz16LmZyb20oUykpLCJmdW5jdGlvbiI9PXR5cGVvZiBRJiYocmU9USxRPW51bGwpLFRlP1E9ImJ1ZmZlciI6UXx8KFE9bWUuZGVmYXVsdEVuY29kaW5nKSwiZnVuY3Rpb24iIT10eXBlb2YgcmUmJihyZT1iKSxtZS5lbmRpbmc/KFBlPXRoaXMsRmU9'@;
put 'cmUsTmU9bmV3IHVlLFkoUGUsTmUpLEoubmV4dFRpY2soRmUsTmUpKTooVGV8fGZ1bmN0aW9uKFBlLEZlLE5lLExlKXt2YXIgQmU7cmV0dXJuIG51bGw9PT1OZT9CZT1uZXcgZGU6InN0cmluZyI9PXR5cGVvZiBOZXx8RmUub2JqZWN0TW9kZXx8KEJlPW5ldyBxKCJjaHVuayIsWyJzdHJpbmci'@;
put 'LCJCdWZmZXIiXSxOZSkpLCFCZXx8KFkoUGUsQmUpLEoubmV4dFRpY2soTGUsQmUpLCExKX0odGhpcyxtZSxTLHJlKSkmJihtZS5wZW5kaW5nY2IrKyxrZT1mdW5jdGlvbihQZSxGZSxOZSxMZSxCZSxIZSl7aWYoIU5lKXt2YXIgUWU9KE9lPUxlLChJZT1GZSkub2JqZWN0TW9kZXx8ITE9PT1J'@;
put 'ZS5kZWNvZGVTdHJpbmdzfHwic3RyaW5nIiE9dHlwZW9mIE9lfHwoT2U9ei5mcm9tKE9lLEJlKSksT2UpO0xlIT09UWUmJihOZT0hMCxCZT0iYnVmZmVyIixMZT1RZSl9dmFyIEllLE9lLG10PUZlLm9iamVjdE1vZGU/MTpMZS5sZW5ndGg7RmUubGVuZ3RoKz1tdDt2YXIgS2U9RmUubGVuZ3Ro'@;
put 'PEZlLmhpZ2hXYXRlck1hcms7aWYoS2V8fChGZS5uZWVkRHJhaW49ITApLEZlLndyaXRpbmd8fEZlLmNvcmtlZCl7dmFyIHdlPUZlLmxhc3RCdWZmZXJlZFJlcXVlc3Q7RmUubGFzdEJ1ZmZlcmVkUmVxdWVzdD17Y2h1bms6TGUsZW5jb2Rpbmc6QmUsaXNCdWY6TmUsY2FsbGJhY2s6SGUsbmV4'@;
put 'dDpudWxsfSx3ZT93ZS5uZXh0PUZlLmxhc3RCdWZmZXJlZFJlcXVlc3Q6RmUuYnVmZmVyZWRSZXF1ZXN0PUZlLmxhc3RCdWZmZXJlZFJlcXVlc3QsRmUuYnVmZmVyZWRSZXF1ZXN0Q291bnQrPTF9ZWxzZSBGKFBlLEZlLCExLG10LExlLEJlLEhlKTtyZXR1cm4gS2V9KHRoaXMsbWUsVGUsUyxR'@;
put 'LHJlKSksa2V9LE4ucHJvdG90eXBlLmNvcms9ZnVuY3Rpb24oKXt0aGlzLl93cml0YWJsZVN0YXRlLmNvcmtlZCsrfSxOLnByb3RvdHlwZS51bmNvcms9ZnVuY3Rpb24oKXt2YXIgUz10aGlzLl93cml0YWJsZVN0YXRlO1MuY29ya2VkJiYoUy5jb3JrZWQtLSxTLndyaXRpbmd8fFMuY29ya2Vk'@;
put 'fHxTLmJ1ZmZlclByb2Nlc3Npbmd8fCFTLmJ1ZmZlcmVkUmVxdWVzdHx8Qyh0aGlzLFMpKX0sTi5wcm90b3R5cGUuc2V0RGVmYXVsdEVuY29kaW5nPWZ1bmN0aW9uKFMpe2lmKCJzdHJpbmciPT10eXBlb2YgUyYmKFM9Uy50b0xvd2VyQ2FzZSgpKSwhKFsiaGV4IiwidXRmOCIsInV0Zi04Iiwi'@;
put 'YXNjaWkiLCJiaW5hcnkiLCJiYXNlNjQiLCJ1Y3MyIiwidWNzLTIiLCJ1dGYxNmxlIiwidXRmLTE2bGUiLCJyYXciXS5pbmRleE9mKChTKyIiKS50b0xvd2VyQ2FzZSgpKT4tMSkpdGhyb3cgbmV3IGNlKFMpO3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmRlZmF1bHRFbmNvZGluZz1TLHRo'@;
put 'aXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOLnByb3RvdHlwZSwid3JpdGFibGVCdWZmZXIiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpfX0pLE9iamVjdC5kZWZpbmVQcm9w'@;
put 'ZXJ0eShOLnByb3RvdHlwZSwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLE4ucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihTLFEscmUpe3JlKG5ldyB0ZSgiX3dy'@;
put 'aXRlKCkiKSl9LE4ucHJvdG90eXBlLl93cml0ZXY9bnVsbCxOLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oUyxRLHJlKXt2YXIga2UsVGUsZmU9dGhpcy5fd3JpdGFibGVTdGF0ZTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgUz8ocmU9UyxTPW51bGwsUT1udWxsKToiZnVuY3Rpb24iPT10eXBl'@;
put 'b2YgUSYmKHJlPVEsUT1udWxsKSxudWxsIT1TJiZ0aGlzLndyaXRlKFMsUSksZmUuY29ya2VkJiYoZmUuY29ya2VkPTEsdGhpcy51bmNvcmsoKSksZmUuZW5kaW5nfHwoVGU9cmUsKGtlPWZlKS5lbmRpbmc9ITAscCh0aGlzLGtlKSxUZSYmKGtlLmZpbmlzaGVkP0oubmV4dFRpY2soVGUpOnRo'@;
put 'aXMub25jZSgiZmluaXNoIixUZSkpLGtlLmVuZGVkPSEwLHRoaXMud3JpdGFibGU9ITEpLHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOLnByb3RvdHlwZSwid3JpdGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRl'@;
put 'Lmxlbmd0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTi5wcm90b3R5cGUsImRlc3Ryb3llZCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rp'@;
put 'b24oUyl7dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPVMpfX0pLE4ucHJvdG90eXBlLmRlc3Ryb3k9Ry5kZXN0cm95LE4ucHJvdG90eXBlLl91bmRlc3Ryb3k9Ry51bmRlc3Ryb3ksTi5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oUyxRKXtR'@;
put 'KFMpfX0sNTg1MDooSCxCLEwpPT57InVzZSBzdHJpY3QiO3ZhciBLLEo9TCg0MTU1KTtmdW5jdGlvbiBJKGRlLHVlLGNlKXtyZXR1cm4odWU9InN5bWJvbCI9PXR5cGVvZihiPWZ1bmN0aW9uKHgsTil7aWYoIm9iamVjdCIhPXR5cGVvZiB4fHxudWxsPT09eClyZXR1cm4geDt2YXIgRj14W1N5'@;
put 'bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09Ril7dmFyIGc9Ri5jYWxsKHgsInN0cmluZyIpO2lmKCJvYmplY3QiIT10eXBlb2YgZylyZXR1cm4gZzt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBT'@;
put 'dHJpbmcoeCl9KHVlKSk/YjpTdHJpbmcoYikpaW4gZGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGRlLHVlLHt2YWx1ZTpjZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmRlW3VlXT1jZSxkZTt2YXIgYn12YXIgUj1MKDg2MTApLEU9U3ltYm9sKCJsYXN0UmVz'@;
put 'b2x2ZSIpLHo9U3ltYm9sKCJsYXN0UmVqZWN0Iiksaj1TeW1ib2woImVycm9yIiksVj1TeW1ib2woImVuZGVkIiksRz1TeW1ib2woImxhc3RQcm9taXNlIiksVz1TeW1ib2woImhhbmRsZVByb21pc2UiKSxVPVN5bWJvbCgic3RyZWFtIik7ZnVuY3Rpb24gcShkZSx1ZSl7cmV0dXJue3ZhbHVl'@;
put 'OmRlLGRvbmU6dWV9fWZ1bmN0aW9uIHRlKGRlKXt2YXIgdWU9ZGVbRV07aWYobnVsbCE9PXVlKXt2YXIgY2U9ZGVbVV0ucmVhZCgpO251bGwhPT1jZSYmKGRlW0ddPW51bGwsZGVbRV09bnVsbCxkZVt6XT1udWxsLHVlKHEoY2UsITEpKSl9fWZ1bmN0aW9uIG5lKGRlKXtKLm5leHRUaWNrKHRl'@;
put 'LGRlKX12YXIgaWU9T2JqZWN0LmdldFByb3RvdHlwZU9mKGZ1bmN0aW9uKCl7fSksbGU9T2JqZWN0LnNldFByb3RvdHlwZU9mKChJKEs9e2dldCBzdHJlYW0oKXtyZXR1cm4gdGhpc1tVXX0sbmV4dDpmdW5jdGlvbigpe3ZhciBkZT10aGlzLHVlPXRoaXNbal07aWYobnVsbCE9PXVlKXJldHVy'@;
put 'biBQcm9taXNlLnJlamVjdCh1ZSk7aWYodGhpc1tWXSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHEodm9pZCAwLCEwKSk7aWYodGhpc1tVXS5kZXN0cm95ZWQpcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHgsTil7Si5uZXh0VGljayhmdW5jdGlvbigpe2RlW2pdP04oZGVbal0pOngocSh2'@;
put 'b2lkIDAsITApKX0pfSk7dmFyIGNlLHgsTixZPXRoaXNbR107aWYoWSljZT1uZXcgUHJvbWlzZSgoeD1ZLE49dGhpcyxmdW5jdGlvbihGLGcpe3gudGhlbihmdW5jdGlvbigpe05bVl0/RihxKHZvaWQgMCwhMCkpOk5bV10oRixnKX0sZyl9KSk7ZWxzZXt2YXIgYj10aGlzW1VdLnJlYWQoKTtp'@;
put 'ZihudWxsIT09YilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHEoYiwhMSkpO2NlPW5ldyBQcm9taXNlKHRoaXNbV10pfXJldHVybiB0aGlzW0ddPWNlLGNlfX0sU3ltYm9sLmFzeW5jSXRlcmF0b3IsZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLEkoSywicmV0dXJuIixmdW5jdGlvbigpe3ZhciBk'@;
put 'ZT10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih1ZSxjZSl7ZGVbVV0uZGVzdHJveShudWxsLGZ1bmN0aW9uKFkpe1k/Y2UoWSk6dWUocSh2b2lkIDAsITApKX0pfSl9KSxLKSxpZSk7SC5leHBvcnRzPWZ1bmN0aW9uKGRlKXt2YXIgdWUsY2U9T2JqZWN0LmNyZWF0ZShsZSwoSSh1'@;
put 'ZT17fSxVLHt2YWx1ZTpkZSx3cml0YWJsZTohMH0pLEkodWUsRSx7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pLEkodWUseix7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pLEkodWUsaix7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pLEkodWUsVix7dmFsdWU6ZGUuX3JlYWRhYmxlU3RhdGUuZW5k'@;
put 'RW1pdHRlZCx3cml0YWJsZTohMH0pLEkodWUsVyx7dmFsdWU6ZnVuY3Rpb24oWSxiKXt2YXIgeD1jZVtVXS5yZWFkKCk7eD8oY2VbR109bnVsbCxjZVtFXT1udWxsLGNlW3pdPW51bGwsWShxKHgsITEpKSk6KGNlW0VdPVksY2Vbel09Yil9LHdyaXRhYmxlOiEwfSksdWUpKTtyZXR1cm4gY2Vb'@;
put 'R109bnVsbCxSKGRlLGZ1bmN0aW9uKFkpe2lmKFkmJiJFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSIhPT1ZLmNvZGUpe3ZhciBiPWNlW3pdO3JldHVybiBudWxsIT09YiYmKGNlW0ddPW51bGwsY2VbRV09bnVsbCxjZVt6XT1udWxsLGIoWSkpLHZvaWQoY2Vbal09WSl9dmFyIHg9Y2VbRV07'@;
put 'bnVsbCE9PXgmJihjZVtHXT1udWxsLGNlW0VdPW51bGwsY2Vbel09bnVsbCx4KHEodm9pZCAwLCEwKSkpLGNlW1ZdPSEwfSksZGUub24oInJlYWRhYmxlIixuZS5iaW5kKG51bGwsY2UpKSxjZX19LDczMjc6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBLKEcsVyl7dmFyIFU9T2Jq'@;
put 'ZWN0LmtleXMoRyk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhHKTtXJiYocT1xLmZpbHRlcihmdW5jdGlvbih0ZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRyx0ZSkuZW51bWVyYWJs'@;
put 'ZX0pKSxVLnB1c2guYXBwbHkoVSxxKX1yZXR1cm4gVX1mdW5jdGlvbiBKKEcpe2Zvcih2YXIgVz0xO1c8YXJndW1lbnRzLmxlbmd0aDtXKyspe3ZhciBVPW51bGwhPWFyZ3VtZW50c1tXXT9hcmd1bWVudHNbV106e307VyUyP0soT2JqZWN0KFUpLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKHEpe0ko'@;
put 'RyxxLFVbcV0pfSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRyxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhVKSk6SyhPYmplY3QoVSkpLmZvckVhY2goZnVuY3Rpb24ocSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEcs'@;
put 'cSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFUscSkpfSl9cmV0dXJuIEd9ZnVuY3Rpb24gSShHLFcsVSl7cmV0dXJuKFc9RShXKSlpbiBHP09iamVjdC5kZWZpbmVQcm9wZXJ0eShHLFcse3ZhbHVlOlUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9'@;
put 'KTpHW1ddPVUsR31mdW5jdGlvbiBFKEcpe3ZhciBXPWZ1bmN0aW9uKFUscSl7aWYoIm9iamVjdCIhPXR5cGVvZiBVfHxudWxsPT09VSlyZXR1cm4gVTt2YXIgdGU9VVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXRlKXt2YXIgbmU9dGUuY2FsbChVLCJzdHJpbmciKTtpZigib2Jq'@;
put 'ZWN0IiE9dHlwZW9mIG5lKXJldHVybiBuZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoVSl9KEcpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgVz9XOlN0cmluZyhXKX12YXIgej1MKDg3NjQp'@;
put 'LkJ1ZmZlcixqPUwoMjM2MSkuaW5zcGVjdCxWPWomJmouY3VzdG9tfHwiaW5zcGVjdCI7SC5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gRygpeyhmdW5jdGlvbih0ZSxuZSl7aWYoISh0ZSBpbnN0YW5jZW9mIG5lKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNz'@;
put 'IGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsRyksdGhpcy5oZWFkPW51bGwsdGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH12YXIgVyxVO3JldHVybiBXPUcsKFU9W3trZXk6InB1c2giLHZhbHVlOmZ1bmN0aW9uKHRlKXt2YXIgbmU9e2RhdGE6dGUsbmV4dDpudWxsfTt0aGlzLmxlbmd0aD4w'@;
put 'P3RoaXMudGFpbC5uZXh0PW5lOnRoaXMuaGVhZD1uZSx0aGlzLnRhaWw9bmUsKyt0aGlzLmxlbmd0aH19LHtrZXk6InVuc2hpZnQiLHZhbHVlOmZ1bmN0aW9uKHRlKXt2YXIgbmU9e2RhdGE6dGUsbmV4dDp0aGlzLmhlYWR9OzA9PT10aGlzLmxlbmd0aCYmKHRoaXMudGFpbD1uZSksdGhpcy5o'@;
put 'ZWFkPW5lLCsrdGhpcy5sZW5ndGh9fSx7a2V5OiJzaGlmdCIsdmFsdWU6ZnVuY3Rpb24oKXtpZigwIT09dGhpcy5sZW5ndGgpe3ZhciB0ZT10aGlzLmhlYWQuZGF0YTtyZXR1cm4gdGhpcy5oZWFkPTE9PT10aGlzLmxlbmd0aD90aGlzLnRhaWw9bnVsbDp0aGlzLmhlYWQubmV4dCwtLXRoaXMu'@;
put 'bGVuZ3RoLHRlfX19LHtrZXk6ImNsZWFyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuaGVhZD10aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wfX0se2tleToiam9pbiIsdmFsdWU6ZnVuY3Rpb24odGUpe2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm4iIjtmb3IodmFyIG5lPXRoaXMuaGVhZCxp'@;
put 'ZT0iIituZS5kYXRhO25lPW5lLm5leHQ7KWllKz10ZStuZS5kYXRhO3JldHVybiBpZX19LHtrZXk6ImNvbmNhdCIsdmFsdWU6ZnVuY3Rpb24odGUpe2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm4gei5hbGxvYygwKTtmb3IodmFyIGRlPXouYWxsb2NVbnNhZmUodGU+Pj4wKSx1ZT10aGlzLmhl'@;
put 'YWQsY2U9MDt1ZTspei5wcm90b3R5cGUuY29weS5jYWxsKHVlLmRhdGEsZGUsY2UpLGNlKz11ZS5kYXRhLmxlbmd0aCx1ZT11ZS5uZXh0O3JldHVybiBkZX19LHtrZXk6ImNvbnN1bWUiLHZhbHVlOmZ1bmN0aW9uKHRlLG5lKXt2YXIgaWU7cmV0dXJuIHRlPHRoaXMuaGVhZC5kYXRhLmxlbmd0'@;
put 'aD8oaWU9dGhpcy5oZWFkLmRhdGEuc2xpY2UoMCx0ZSksdGhpcy5oZWFkLmRhdGE9dGhpcy5oZWFkLmRhdGEuc2xpY2UodGUpKTppZT10ZT09PXRoaXMuaGVhZC5kYXRhLmxlbmd0aD90aGlzLnNoaWZ0KCk6bmU/dGhpcy5fZ2V0U3RyaW5nKHRlKTp0aGlzLl9nZXRCdWZmZXIodGUpLGllfX0s'@;
put 'e2tleToiZmlyc3QiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGVhZC5kYXRhfX0se2tleToiX2dldFN0cmluZyIsdmFsdWU6ZnVuY3Rpb24odGUpe3ZhciBuZT10aGlzLmhlYWQsaWU9MSxsZT1uZS5kYXRhO2Zvcih0ZS09bGUubGVuZ3RoO25lPW5lLm5leHQ7KXt2YXIgZGU9bmUu'@;
put 'ZGF0YSx1ZT10ZT5kZS5sZW5ndGg/ZGUubGVuZ3RoOnRlO2lmKGxlKz11ZT09PWRlLmxlbmd0aD9kZTpkZS5zbGljZSgwLHRlKSwwPT0odGUtPXVlKSl7dWU9PT1kZS5sZW5ndGg/KCsraWUsdGhpcy5oZWFkPW5lLm5leHQ/bmUubmV4dDp0aGlzLnRhaWw9bnVsbCk6KHRoaXMuaGVhZD1uZSxu'@;
put 'ZS5kYXRhPWRlLnNsaWNlKHVlKSk7YnJlYWt9KytpZX1yZXR1cm4gdGhpcy5sZW5ndGgtPWllLGxlfX0se2tleToiX2dldEJ1ZmZlciIsdmFsdWU6ZnVuY3Rpb24odGUpe3ZhciBuZT16LmFsbG9jVW5zYWZlKHRlKSxpZT10aGlzLmhlYWQsbGU9MTtmb3IoaWUuZGF0YS5jb3B5KG5lKSx0ZS09'@;
put 'aWUuZGF0YS5sZW5ndGg7aWU9aWUubmV4dDspe3ZhciBkZT1pZS5kYXRhLHVlPXRlPmRlLmxlbmd0aD9kZS5sZW5ndGg6dGU7aWYoZGUuY29weShuZSxuZS5sZW5ndGgtdGUsMCx1ZSksMD09KHRlLT11ZSkpe3VlPT09ZGUubGVuZ3RoPygrK2xlLHRoaXMuaGVhZD1pZS5uZXh0P2llLm5leHQ6'@;
put 'dGhpcy50YWlsPW51bGwpOih0aGlzLmhlYWQ9aWUsaWUuZGF0YT1kZS5zbGljZSh1ZSkpO2JyZWFrfSsrbGV9cmV0dXJuIHRoaXMubGVuZ3RoLT1sZSxuZX19LHtrZXk6Vix2YWx1ZTpmdW5jdGlvbih0ZSxuZSl7cmV0dXJuIGoodGhpcyxKKEooe30sbmUpLHt9LHtkZXB0aDowLGN1c3RvbUlu'@;
put 'c3BlY3Q6ITF9KSl9fV0pJiZmdW5jdGlvbiBSKEcsVyl7Zm9yKHZhciBVPTA7VTxXLmxlbmd0aDtVKyspe3ZhciBxPVdbVV07cS5lbnVtZXJhYmxlPXEuZW51bWVyYWJsZXx8ITEscS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHEmJihxLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJv'@;
put 'cGVydHkoRyxFKHEua2V5KSxxKX19KFcucHJvdG90eXBlLFUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLEd9KCl9LDExOTU6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSz1MKDQxNTUpO2Z1bmN0aW9uIEooRSx6KXtSKEUseiksSShFKX1m'@;
put 'dW5jdGlvbiBJKEUpe0UuX3dyaXRhYmxlU3RhdGUmJiFFLl93cml0YWJsZVN0YXRlLmVtaXRDbG9zZXx8RS5fcmVhZGFibGVTdGF0ZSYmIUUuX3JlYWRhYmxlU3RhdGUuZW1pdENsb3NlfHxFLmVtaXQoImNsb3NlIil9ZnVuY3Rpb24gUihFLHope0UuZW1pdCgiZXJyb3IiLHopfUguZXhwb3J0'@;
put 'cz17ZGVzdHJveTpmdW5jdGlvbihFLHope3ZhciBqPXRoaXM7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkfHx0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD8oej96KEUpOkUmJih0aGlzLl93'@;
put 'cml0YWJsZVN0YXRlP3RoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkfHwodGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsSy5uZXh0VGljayhSLHRoaXMsRSkpOksubmV4dFRpY2soUix0aGlzLEUpKSx0aGlzKToodGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3Jl'@;
put 'YWRhYmxlU3RhdGUuZGVzdHJveWVkPSEwKSx0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX2Rlc3Ryb3koRXx8bnVsbCxmdW5jdGlvbihXKXsheiYmVz9qLl93cml0YWJsZVN0YXRlP2ouX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0'@;
put 'dGVkP0submV4dFRpY2soSSxqKTooai5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsSy5uZXh0VGljayhKLGosVykpOksubmV4dFRpY2soSixqLFcpOno/KEsubmV4dFRpY2soSSxqKSx6KFcpKTpLLm5leHRUaWNrKEksail9KSx0aGlzKX0sdW5kZXN0cm95OmZ1bmN0aW9uKCl7dGhp'@;
put 'cy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGluZz0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZD0hMSksdGhpcy5fd3JpdGFibGVTdGF0'@;
put 'ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmc9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5hbENhbGxlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLnByZWZpbmlzaGVkPSEx'@;
put 'LHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITEpfSxlcnJvck9yRGVzdHJveTpmdW5jdGlvbihFLHope3ZhciBqPUUuX3JlYWRhYmxlU3RhdGUsVj1FLl93cml0YWJsZVN0YXRlO2omJmouYXV0b0Rlc3Ryb3l8fFYmJlYu'@;
put 'YXV0b0Rlc3Ryb3k/RS5kZXN0cm95KHopOkUuZW1pdCgiZXJyb3IiLHopfX19LDg2MTA6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSz1MKDQyODEpLnEuRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0U7ZnVuY3Rpb24gSigpe31ILmV4cG9ydHM9ZnVuY3Rpb24gSShSLEUseil7aWYoImZ1'@;
put 'bmN0aW9uIj09dHlwZW9mIEUpcmV0dXJuIEkoUixudWxsLEUpO3ZhciBkZSx1ZTtFfHwoRT17fSksZGU9enx8Six1ZT0hMSx6PWZ1bmN0aW9uKCl7aWYoIXVlKXt1ZT0hMDtmb3IodmFyIGNlPWFyZ3VtZW50cy5sZW5ndGgsWT1uZXcgQXJyYXkoY2UpLGI9MDtiPGNlO2IrKylZW2JdPWFyZ3Vt'@;
put 'ZW50c1tiXTtkZS5hcHBseSh0aGlzLFkpfX07dmFyIGo9RS5yZWFkYWJsZXx8ITEhPT1FLnJlYWRhYmxlJiZSLnJlYWRhYmxlLFY9RS53cml0YWJsZXx8ITEhPT1FLndyaXRhYmxlJiZSLndyaXRhYmxlLEc9ZnVuY3Rpb24oKXtSLndyaXRhYmxlfHxVKCl9LFc9Ui5fd3JpdGFibGVTdGF0ZSYm'@;
put 'Ui5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZCxVPWZ1bmN0aW9uKCl7Vj0hMSxXPSEwLGp8fHouY2FsbChSKX0scT1SLl9yZWFkYWJsZVN0YXRlJiZSLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQsdGU9ZnVuY3Rpb24oKXtqPSExLHE9ITAsVnx8ei5jYWxsKFIpfSxuZT1mdW5jdGlvbihkZSl7'@;
put 'ei5jYWxsKFIsZGUpfSxpZT1mdW5jdGlvbigpe3ZhciBkZTtyZXR1cm4gaiYmIXE/KFIuX3JlYWRhYmxlU3RhdGUmJlIuX3JlYWRhYmxlU3RhdGUuZW5kZWR8fChkZT1uZXcgSyksei5jYWxsKFIsZGUpKTpWJiYhVz8oUi5fd3JpdGFibGVTdGF0ZSYmUi5fd3JpdGFibGVTdGF0ZS5lbmRlZHx8'@;
put 'KGRlPW5ldyBLKSx6LmNhbGwoUixkZSkpOnZvaWQgMH0sbGU9ZnVuY3Rpb24oKXtSLnJlcS5vbigiZmluaXNoIixVKX07cmV0dXJuIGZ1bmN0aW9uKGRlKXtyZXR1cm4gZGUuc2V0SGVhZGVyJiYiZnVuY3Rpb24iPT10eXBlb2YgZGUuYWJvcnR9KFIpPyhSLm9uKCJjb21wbGV0ZSIsVSksUi5v'@;
put 'bigiYWJvcnQiLGllKSxSLnJlcT9sZSgpOlIub24oInJlcXVlc3QiLGxlKSk6ViYmIVIuX3dyaXRhYmxlU3RhdGUmJihSLm9uKCJlbmQiLEcpLFIub24oImNsb3NlIixHKSksUi5vbigiZW5kIix0ZSksUi5vbigiZmluaXNoIixVKSwhMSE9PUUuZXJyb3ImJlIub24oImVycm9yIixuZSksUi5v'@;
put 'bigiY2xvc2UiLGllKSxmdW5jdGlvbigpe1IucmVtb3ZlTGlzdGVuZXIoImNvbXBsZXRlIixVKSxSLnJlbW92ZUxpc3RlbmVyKCJhYm9ydCIsaWUpLFIucmVtb3ZlTGlzdGVuZXIoInJlcXVlc3QiLGxlKSxSLnJlcSYmUi5yZXEucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsVSksUi5yZW1vdmVM'@;
put 'aXN0ZW5lcigiZW5kIixHKSxSLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsRyksUi5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixVKSxSLnJlbW92ZUxpc3RlbmVyKCJlbmQiLHRlKSxSLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsbmUpLFIucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixpZSl9fX0sNTE2'@;
put 'NzpIPT57SC5leHBvcnRzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJSZWFkYWJsZS5mcm9tIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJyb3dzZXIiKX19LDk5NDY6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSyxKPUwoNDI4MSkucSxJPUouRVJSX01JU1NJTkdfQVJHUyxSPUou'@;
put 'RVJSX1NUUkVBTV9ERVNUUk9ZRUQ7ZnVuY3Rpb24gRShWKXtpZihWKXRocm93IFZ9ZnVuY3Rpb24geihWKXtWKCl9ZnVuY3Rpb24gaihWLEcpe3JldHVybiBWLnBpcGUoRyl9SC5leHBvcnRzPWZ1bmN0aW9uKCl7Zm9yKHZhciBWPWFyZ3VtZW50cy5sZW5ndGgsRz1uZXcgQXJyYXkoViksVz0w'@;
put 'O1c8VjtXKyspR1tXXT1hcmd1bWVudHNbV107dmFyIFUsbmUscT0obmU9RykubGVuZ3RoPyJmdW5jdGlvbiIhPXR5cGVvZiBuZVtuZS5sZW5ndGgtMV0/RTpuZS5wb3AoKTpFO2lmKEFycmF5LmlzQXJyYXkoR1swXSkmJihHPUdbMF0pLEcubGVuZ3RoPDIpdGhyb3cgbmV3IEkoInN0cmVhbXMi'@;
put 'KTt2YXIgdGU9Ry5tYXAoZnVuY3Rpb24obmUsaWUpe3ZhciBsZT1pZTxHLmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihkZSx1ZSxjZSxZKXt2YXIgTixGO049WSxGPSExLFk9ZnVuY3Rpb24oKXtGfHwoRj0hMCxOLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpKX07dmFyIGI9ITE7ZGUub24oImNs'@;
put 'b3NlIixmdW5jdGlvbigpe2I9ITB9KSx2b2lkIDA9PT1LJiYoSz1MKDg2MTApKSxLKGRlLHtyZWFkYWJsZTp1ZSx3cml0YWJsZTpjZX0sZnVuY3Rpb24oTil7aWYoTilyZXR1cm4gWShOKTtiPSEwLFkoKX0pO3ZhciB4PSExO3JldHVybiBmdW5jdGlvbihOKXtpZighYiYmIXgpcmV0dXJuIHg9'@;
put 'ITAsZnVuY3Rpb24oRil7cmV0dXJuIEYuc2V0SGVhZGVyJiYiZnVuY3Rpb24iPT10eXBlb2YgRi5hYm9ydH0oZGUpP2RlLmFib3J0KCk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlLmRlc3Ryb3k/ZGUuZGVzdHJveSgpOnZvaWQgWShOfHxuZXcgUigicGlwZSIpKX19KG5lLGxlLGllPjAsZnVuY3Rp'@;
put 'b24oZGUpe1V8fChVPWRlKSxkZSYmdGUuZm9yRWFjaCh6KSxsZXx8KHRlLmZvckVhY2goeikscShVKSl9KX0pO3JldHVybiBHLnJlZHVjZShqKX19LDI0NTc6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSz1MKDQyODEpLnEuRVJSX0lOVkFMSURfT1BUX1ZBTFVFO0guZXhwb3J0cz17Z2V0'@;
put 'SGlnaFdhdGVyTWFyazpmdW5jdGlvbihKLEksUixFKXt2YXIgaix6PW51bGwhPShqPUkpLmhpZ2hXYXRlck1hcms/ai5oaWdoV2F0ZXJNYXJrOkU/altSXTpudWxsO2lmKG51bGwhPXope2lmKCFpc0Zpbml0ZSh6KXx8TWF0aC5mbG9vcih6KSE9PXp8fHo8MCl0aHJvdyBuZXcgSyhFP1I6Imhp'@;
put 'Z2hXYXRlck1hcmsiLHopO3JldHVybiBNYXRoLmZsb29yKHopfXJldHVybiBKLm9iamVjdE1vZGU/MTY6MTYzODR9fX0sMjUwMzooSCxCLEwpPT57SC5leHBvcnRzPUwoNzE4NykuRXZlbnRFbWl0dGVyfSw4NDczOihILEIsTCk9PnsoQj1ILmV4cG9ydHM9TCg5NDgxKSkuU3RyZWFtPUIsQi5S'@;
put 'ZWFkYWJsZT1CLEIuV3JpdGFibGU9TCg0MjI5KSxCLkR1cGxleD1MKDY3NTMpLEIuVHJhbnNmb3JtPUwoNDYwNSksQi5QYXNzVGhyb3VnaD1MKDI3MjUpLEIuZmluaXNoZWQ9TCg4NjEwKSxCLnBpcGVsaW5lPUwoOTk0Nil9LDk4NDooSCxCLEwpPT57dmFyIEs9TCg0MTU1KTtjb25zdCBKPUwo'@;
put 'OTI4MiksST1MKDI1MjApLFI9TCg3MjE3KTtsZXQgRTt0cnl7RT1MKDI4ODQpfWNhdGNoe31jb25zdCB6PXtub3NvcnQ6ITAsc2lsZW50OiEwfTtsZXQgaj0wO2NvbnN0IFY9IndpbjMyIj09PUsucGxhdGZvcm0sRz1jZT0+e2lmKFsidW5saW5rIiwiY2htb2QiLCJzdGF0IiwibHN0YXQiLCJy'@;
put 'bWRpciIsInJlYWRkaXIiXS5mb3JFYWNoKFk9PntjZVtZXT1jZVtZXXx8UltZXSxjZVtZKz0iU3luYyJdPWNlW1ldfHxSW1ldfSksY2UubWF4QnVzeVRyaWVzPWNlLm1heEJ1c3lUcmllc3x8MyxjZS5lbWZpbGVXYWl0PWNlLmVtZmlsZVdhaXR8fDFlMywhMT09PWNlLmdsb2ImJihjZS5kaXNh'@;
put 'YmxlR2xvYj0hMCksITAhPT1jZS5kaXNhYmxlR2xvYiYmdm9pZCAwPT09RSl0aHJvdyBFcnJvcigiZ2xvYiBkZXBlbmRlbmN5IG5vdCBmb3VuZCwgc2V0IGBvcHRpb25zLmRpc2FibGVHbG9iID0gdHJ1ZWAgaWYgaW50ZW50aW9uYWwiKTtjZS5kaXNhYmxlR2xvYj1jZS5kaXNhYmxlR2xvYnx8'@;
put 'ITEsY2UuZ2xvYj1jZS5nbG9ifHx6fSxXPShjZSxZLGIpPT57ImZ1bmN0aW9uIj09dHlwZW9mIFkmJihiPVksWT17fSksSihjZSwicmltcmFmOiBtaXNzaW5nIHBhdGgiKSxKLmVxdWFsKHR5cGVvZiBjZSwic3RyaW5nIiwicmltcmFmOiBwYXRoIHNob3VsZCBiZSBhIHN0cmluZyIpLEouZXF1'@;
put 'YWwodHlwZW9mIGIsImZ1bmN0aW9uIiwicmltcmFmOiBjYWxsYmFjayBmdW5jdGlvbiByZXF1aXJlZCIpLEooWSwicmltcmFmOiBpbnZhbGlkIG9wdGlvbnMgYXJndW1lbnQgcHJvdmlkZWQiKSxKLmVxdWFsKHR5cGVvZiBZLCJvYmplY3QiLCJyaW1yYWY6IG9wdGlvbnMgc2hvdWxkIGJlIG9i'@;
put 'amVjdCIpLEcoWSk7bGV0IHg9MCxOPW51bGwsRj0wO2NvbnN0IGc9KEMsTSk9PkM/YihDKTooRj1NLmxlbmd0aCwwPT09Rj9iKCk6dm9pZCBNLmZvckVhY2goeT0+e2NvbnN0IHA9Uz0+e2lmKFMpe2lmKCgiRUJVU1kiPT09Uy5jb2RlfHwiRU5PVEVNUFRZIj09PVMuY29kZXx8IkVQRVJNIj09'@;
put 'PVMuY29kZSkmJng8WS5tYXhCdXN5VHJpZXMpcmV0dXJuIHgrKyxzZXRUaW1lb3V0KCgpPT5VKHksWSxwKSwxMDAqeCk7aWYoIkVNRklMRSI9PT1TLmNvZGUmJmo8WS5lbWZpbGVXYWl0KXJldHVybiBzZXRUaW1lb3V0KCgpPT5VKHksWSxwKSxqKyspOyJFTk9FTlQiPT09Uy5jb2RlJiYoUz1u'@;
put 'dWxsKX1qPTAsTj1OfHxTLDA9PS0tRiYmYihOKX07VSh5LFkscCl9KSk7aWYoWS5kaXNhYmxlR2xvYnx8IUUuaGFzTWFnaWMoY2UpKXJldHVybiBnKG51bGwsW2NlXSk7WS5sc3RhdChjZSwoQyxNKT0+e2lmKCFDKXJldHVybiBnKG51bGwsW2NlXSk7RShjZSxZLmdsb2IsZyl9KX0sVT0oY2Us'@;
put 'WSxiKT0+e0ooY2UpLEooWSksSigiZnVuY3Rpb24iPT10eXBlb2YgYiksWS5sc3RhdChjZSwoeCxOKT0+eCYmIkVOT0VOVCI9PT14LmNvZGU/YihudWxsKTooeCYmIkVQRVJNIj09PXguY29kZSYmViYmcShjZSxZLHgsYiksTiYmTi5pc0RpcmVjdG9yeSgpP25lKGNlLFkseCxiKTp2b2lkIFku'@;
put 'dW5saW5rKGNlLEY9PntpZihGKXtpZigiRU5PRU5UIj09PUYuY29kZSlyZXR1cm4gYihudWxsKTtpZigiRVBFUk0iPT09Ri5jb2RlKXJldHVybiBWP3EoY2UsWSxGLGIpOm5lKGNlLFksRixiKTtpZigiRUlTRElSIj09PUYuY29kZSlyZXR1cm4gbmUoY2UsWSxGLGIpfXJldHVybiBiKEYpfSkp'@;
put 'KX0scT0oY2UsWSxiLHgpPT57SihjZSksSihZKSxKKCJmdW5jdGlvbiI9PXR5cGVvZiB4KSxZLmNobW9kKGNlLDQzOCxOPT57Tj94KCJFTk9FTlQiPT09Ti5jb2RlP251bGw6Yik6WS5zdGF0KGNlLChGLGcpPT57Rj94KCJFTk9FTlQiPT09Ri5jb2RlP251bGw6Yik6Zy5pc0RpcmVjdG9yeSgp'@;
put 'P25lKGNlLFksYix4KTpZLnVubGluayhjZSx4KX0pfSl9LHRlPShjZSxZLGIpPT57SihjZSksSihZKTt0cnl7WS5jaG1vZFN5bmMoY2UsNDM4KX1jYXRjaChOKXtpZigiRU5PRU5UIj09PU4uY29kZSlyZXR1cm47dGhyb3cgYn1sZXQgeDt0cnl7eD1ZLnN0YXRTeW5jKGNlKX1jYXRjaChOKXtp'@;
put 'ZigiRU5PRU5UIj09PU4uY29kZSlyZXR1cm47dGhyb3cgYn14LmlzRGlyZWN0b3J5KCk/ZGUoY2UsWSxiKTpZLnVubGlua1N5bmMoY2UpfSxuZT0oY2UsWSxiLHgpPT57SihjZSksSihZKSxKKCJmdW5jdGlvbiI9PXR5cGVvZiB4KSxZLnJtZGlyKGNlLE49PnshTnx8IkVOT1RFTVBUWSIhPT1O'@;
put 'LmNvZGUmJiJFRVhJU1QiIT09Ti5jb2RlJiYiRVBFUk0iIT09Ti5jb2RlP3goTiYmIkVOT1RESVIiPT09Ti5jb2RlP2I6Tik6aWUoY2UsWSx4KX0pfSxpZT0oY2UsWSxiKT0+e0ooY2UpLEooWSksSigiZnVuY3Rpb24iPT10eXBlb2YgYiksWS5yZWFkZGlyKGNlLCh4LE4pPT57aWYoeClyZXR1'@;
put 'cm4gYih4KTtsZXQgRixnPU4ubGVuZ3RoO2lmKDA9PT1nKXJldHVybiBZLnJtZGlyKGNlLGIpO04uZm9yRWFjaChDPT57VyhJLmpvaW4oY2UsQyksWSxNPT57aWYoIUYpcmV0dXJuIE0/YihGPU0pOnZvaWQoMD09LS1nJiZZLnJtZGlyKGNlLGIpKX0pfSl9KX0sbGU9KGNlLFkpPT57bGV0IGI7'@;
put 'aWYoRyhZPVl8fHt9KSxKKGNlLCJyaW1yYWY6IG1pc3NpbmcgcGF0aCIpLEouZXF1YWwodHlwZW9mIGNlLCJzdHJpbmciLCJyaW1yYWY6IHBhdGggc2hvdWxkIGJlIGEgc3RyaW5nIiksSihZLCJyaW1yYWY6IG1pc3Npbmcgb3B0aW9ucyIpLEouZXF1YWwodHlwZW9mIFksIm9iamVjdCIsInJp'@;
put 'bXJhZjogb3B0aW9ucyBzaG91bGQgYmUgb2JqZWN0IiksWS5kaXNhYmxlR2xvYnx8IUUuaGFzTWFnaWMoY2UpKWI9W2NlXTtlbHNlIHRyeXtZLmxzdGF0U3luYyhjZSksYj1bY2VdfWNhdGNoe2I9RS5zeW5jKGNlLFkuZ2xvYil9aWYoYi5sZW5ndGgpZm9yKGxldCB4PTA7eDxiLmxlbmd0aDt4'@;
put 'Kyspe2NvbnN0IE49Ylt4XTtsZXQgRjt0cnl7Rj1ZLmxzdGF0U3luYyhOKX1jYXRjaChnKXtpZigiRU5PRU5UIj09PWcuY29kZSlyZXR1cm47IkVQRVJNIj09PWcuY29kZSYmViYmdGUoTixZLGcpfXRyeXtGJiZGLmlzRGlyZWN0b3J5KCk/ZGUoTixZLG51bGwpOlkudW5saW5rU3luYyhOKX1j'@;
put 'YXRjaChnKXtpZigiRU5PRU5UIj09PWcuY29kZSlyZXR1cm47aWYoIkVQRVJNIj09PWcuY29kZSlyZXR1cm4gVj90ZShOLFksZyk6ZGUoTixZLGcpO2lmKCJFSVNESVIiIT09Zy5jb2RlKXRocm93IGc7ZGUoTixZLGcpfX19LGRlPShjZSxZLGIpPT57SihjZSksSihZKTt0cnl7WS5ybWRpclN5'@;
put 'bmMoY2UpfWNhdGNoKHgpe2lmKCJFTk9FTlQiPT09eC5jb2RlKXJldHVybjtpZigiRU5PVERJUiI9PT14LmNvZGUpdGhyb3cgYjsiRU5PVEVNUFRZIiE9PXguY29kZSYmIkVFWElTVCIhPT14LmNvZGUmJiJFUEVSTSIhPT14LmNvZGV8fHVlKGNlLFkpfX0sdWU9KGNlLFkpPT57SihjZSksSihZ'@;
put 'KSxZLnJlYWRkaXJTeW5jKGNlKS5mb3JFYWNoKE49PmxlKEkuam9pbihjZSxOKSxZKSk7Y29uc3QgYj1WPzEwMDoxO2xldCB4PTA7Zm9yKDs7KXtsZXQgTj0hMDt0cnl7Y29uc3QgRj1ZLnJtZGlyU3luYyhjZSxZKTtyZXR1cm4gTj0hMSxGfWZpbmFsbHl7aWYoKyt4PGImJk4pY29udGludWV9'@;
put 'fX07SC5leHBvcnRzPVcsVy5zeW5jPWxlfSw5Nzg1OihILEIsTCk9PnsidXNlIHN0cmljdCI7dmFyIEs9TCg4NzY0KS5CdWZmZXIsSj1MKDU3MTcpLEk9TCgzMzQ5KSxSPW5ldyBBcnJheSgxNiksRT1bMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSw3LDQsMTMsMSwxMCw2'@;
put 'LDE1LDMsMTIsMCw5LDUsMiwxNCwxMSw4LDMsMTAsMTQsNCw5LDE1LDgsMSwyLDcsMCw2LDEzLDExLDUsMTIsMSw5LDExLDEwLDAsOCwxMiw0LDEzLDMsNywxNSwxNCw1LDYsMiw0LDAsNSw5LDcsMTIsMiwxMCwxNCwxLDMsOCwxMSw2LDE1LDEzXSx6PVs1LDE0LDcsMCw5LDIsMTEsNCwxMyw2'@;
put 'LDE1LDgsMSwxMCwzLDEyLDYsMTEsMyw3LDAsMTMsNSwxMCwxNCwxNSw4LDEyLDQsOSwxLDIsMTUsNSwxLDMsNywxNCw2LDksMTEsOCwxMiwyLDEwLDAsNCwxMyw4LDYsNCwxLDMsMTEsMTUsMCw1LDEyLDIsMTMsOSw3LDEwLDE0LDEyLDE1LDEwLDQsMSw1LDgsNyw2LDIsMTMsMTQsMCwzLDks'@;
put 'MTFdLGo9WzExLDE0LDE1LDEyLDUsOCw3LDksMTEsMTMsMTQsMTUsNiw3LDksOCw3LDYsOCwxMywxMSw5LDcsMTUsNywxMiwxNSw5LDExLDcsMTMsMTIsMTEsMTMsNiw3LDE0LDksMTMsMTUsMTQsOCwxMyw2LDUsMTIsNyw1LDExLDEyLDE0LDE1LDE0LDE1LDksOCw5LDE0LDUsNiw4LDYsNSwx'@;
put 'Miw5LDE1LDUsMTEsNiw4LDEzLDEyLDUsMTIsMTMsMTQsMTEsOCw1LDZdLFY9WzgsOSw5LDExLDEzLDE1LDE1LDUsNyw3LDgsMTEsMTQsMTQsMTIsNiw5LDEzLDE1LDcsMTIsOCw5LDExLDcsNywxMiw3LDYsMTUsMTMsMTEsOSw3LDE1LDExLDgsNiw2LDE0LDEyLDEzLDUsMTQsMTMsMTMsNyw1'@;
put 'LDE1LDUsOCwxMSwxNCwxNCw2LDE0LDYsOSwxMiw5LDEyLDUsMTUsOCw4LDUsMTIsOSwxMiw1LDE0LDYsOCwxMyw2LDUsMTUsMTMsMTEsMTFdLEc9WzAsMTUxODUwMDI0OSwxODU5Nzc1MzkzLDI0MDA5NTk3MDgsMjg0MDg1MzgzOF0sVz1bMTM1MjgyOTkyNiwxNTQ4NjAzNjg0LDE4MzYwNzI2'@;
put 'OTEsMjA1Mzk5NDIxNywwXTtmdW5jdGlvbiBVKCl7SS5jYWxsKHRoaXMsNjQpLHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMH1mdW5jdGlvbiBxKHVlLGNlKXtyZXR1cm4g'@;
put 'dWU8PGNlfHVlPj4+MzItY2V9ZnVuY3Rpb24gdGUodWUsY2UsWSxiLHgsTixGLGcpe3JldHVybiBxKHVlKyhjZV5ZXmIpK04rRnwwLGcpK3h8MH1mdW5jdGlvbiBuZSh1ZSxjZSxZLGIseCxOLEYsZyl7cmV0dXJuIHEodWUrKGNlJll8fmNlJmIpK04rRnwwLGcpK3h8MH1mdW5jdGlvbiBpZSh1'@;
put 'ZSxjZSxZLGIseCxOLEYsZyl7cmV0dXJuIHEodWUrKChjZXx+WSleYikrTitGfDAsZykreHwwfWZ1bmN0aW9uIGxlKHVlLGNlLFksYix4LE4sRixnKXtyZXR1cm4gcSh1ZSsoY2UmYnxZJn5iKStOK0Z8MCxnKSt4fDB9ZnVuY3Rpb24gZGUodWUsY2UsWSxiLHgsTixGLGcpe3JldHVybiBxKHVl'@;
put 'KyhjZV4oWXx+YikpK04rRnwwLGcpK3h8MH1KKFUsSSksVS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe2Zvcih2YXIgdWU9UixjZT0wO2NlPDE2OysrY2UpdWVbY2VdPXRoaXMuX2Jsb2NrLnJlYWRJbnQzMkxFKDQqY2UpO2Zvcih2YXIgWT0wfHRoaXMuX2EsYj0wfHRoaXMuX2IseD0w'@;
put 'fHRoaXMuX2MsTj0wfHRoaXMuX2QsRj0wfHRoaXMuX2UsZz0wfHRoaXMuX2EsQz0wfHRoaXMuX2IsTT0wfHRoaXMuX2MseT0wfHRoaXMuX2QscD0wfHRoaXMuX2UsUz0wO1M8ODA7Uys9MSl7dmFyIFEscmU7UzwxNj8oUT10ZShZLGIseCxOLEYsdWVbRVtTXV0sR1swXSxqW1NdKSxyZT1kZShn'@;
put 'LEMsTSx5LHAsdWVbeltTXV0sV1swXSxWW1NdKSk6UzwzMj8oUT1uZShZLGIseCxOLEYsdWVbRVtTXV0sR1sxXSxqW1NdKSxyZT1sZShnLEMsTSx5LHAsdWVbeltTXV0sV1sxXSxWW1NdKSk6Uzw0OD8oUT1pZShZLGIseCxOLEYsdWVbRVtTXV0sR1syXSxqW1NdKSxyZT1pZShnLEMsTSx5LHAs'@;
put 'dWVbeltTXV0sV1syXSxWW1NdKSk6Uzw2ND8oUT1sZShZLGIseCxOLEYsdWVbRVtTXV0sR1szXSxqW1NdKSxyZT1uZShnLEMsTSx5LHAsdWVbeltTXV0sV1szXSxWW1NdKSk6KFE9ZGUoWSxiLHgsTixGLHVlW0VbU11dLEdbNF0saltTXSkscmU9dGUoZyxDLE0seSxwLHVlW3pbU11dLFdbNF0s'@;
put 'VltTXSkpLFk9RixGPU4sTj1xKHgsMTApLHg9YixiPVEsZz1wLHA9eSx5PXEoTSwxMCksTT1DLEM9cmV9dmFyIGZlPXRoaXMuX2IreCt5fDA7dGhpcy5fYj10aGlzLl9jK04rcHwwLHRoaXMuX2M9dGhpcy5fZCtGK2d8MCx0aGlzLl9kPXRoaXMuX2UrWStDfDAsdGhpcy5fZT10aGlzLl9hK2Ir'@;
put 'TXwwLHRoaXMuX2E9ZmV9LFUucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oKXt0aGlzLl9ibG9ja1t0aGlzLl9ibG9ja09mZnNldCsrXT0xMjgsdGhpcy5fYmxvY2tPZmZzZXQ+NTYmJih0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNjQpLHRoaXMuX3VwZGF0ZSgpLHRo'@;
put 'aXMuX2Jsb2NrT2Zmc2V0PTApLHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMF0sNTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzFdLDYwKSx0aGlzLl91cGRhdGUo'@;
put 'KTt2YXIgdWU9Sy5hbGxvYz9LLmFsbG9jKDIwKTpuZXcgSygyMCk7cmV0dXJuIHVlLndyaXRlSW50MzJMRSh0aGlzLl9hLDApLHVlLndyaXRlSW50MzJMRSh0aGlzLl9iLDQpLHVlLndyaXRlSW50MzJMRSh0aGlzLl9jLDgpLHVlLndyaXRlSW50MzJMRSh0aGlzLl9kLDEyKSx1ZS53cml0ZUlu'@;
put 'dDMyTEUodGhpcy5fZSwxNiksdWV9LEguZXhwb3J0cz1VfSw5NTA5OihILEIsTCk9Pnt2YXIgSz1MKDg3NjQpLEo9Sy5CdWZmZXI7ZnVuY3Rpb24gSShFLHope2Zvcih2YXIgaiBpbiBFKXpbal09RVtqXX1mdW5jdGlvbiBSKEUseixqKXtyZXR1cm4gSihFLHosail9Si5mcm9tJiZKLmFsbG9j'@;
put 'JiZKLmFsbG9jVW5zYWZlJiZKLmFsbG9jVW5zYWZlU2xvdz9ILmV4cG9ydHM9SzooSShLLEIpLEIuQnVmZmVyPVIpLFIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSi5wcm90b3R5cGUpLEkoSixSKSxSLmZyb209ZnVuY3Rpb24oRSx6LGope2lmKCJudW1iZXIiPT10eXBlb2YgRSl0aHJvdyBu'@;
put 'ZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlciIpO3JldHVybiBKKEUseixqKX0sUi5hbGxvYz1mdW5jdGlvbihFLHosail7aWYoIm51bWJlciIhPXR5cGVvZiBFKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTt2YXIgVj1K'@;
put 'KEUpO3JldHVybiB2b2lkIDAhPT16PyJzdHJpbmciPT10eXBlb2Ygaj9WLmZpbGwoeixqKTpWLmZpbGwoeik6Vi5maWxsKDApLFZ9LFIuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oRSl7aWYoIm51bWJlciIhPXR5cGVvZiBFKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBu'@;
put 'dW1iZXIiKTtyZXR1cm4gSihFKX0sUi5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oRSl7aWYoIm51bWJlciIhPXR5cGVvZiBFKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gSy5TbG93QnVmZmVyKEUpfX0sMjM5OTooSCxCLEwpPT57InVz'@;
put 'ZSBzdHJpY3QiO3ZhciBLLEo9TCg0MTU1KSxJPUwoODc2NCksUj1JLkJ1ZmZlcixFPXt9O2ZvcihLIGluIEkpSS5oYXNPd25Qcm9wZXJ0eShLKSYmIlNsb3dCdWZmZXIiIT09SyYmIkJ1ZmZlciIhPT1LJiYoRVtLXT1JW0tdKTt2YXIgej1FLkJ1ZmZlcj17fTtmb3IoSyBpbiBSKVIuaGFzT3du'@;
put 'UHJvcGVydHkoSykmJiJhbGxvY1Vuc2FmZSIhPT1LJiYiYWxsb2NVbnNhZmVTbG93IiE9PUsmJih6W0tdPVJbS10pO2lmKEUuQnVmZmVyLnByb3RvdHlwZT1SLnByb3RvdHlwZSx6LmZyb20mJnouZnJvbSE9PVVpbnQ4QXJyYXkuZnJvbXx8KHouZnJvbT1mdW5jdGlvbihqLFYsRyl7aWYoIm51'@;
put 'bWJlciI9PXR5cGVvZiBqKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIGopO2lmKGomJnZvaWQgMD09PWoubGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBmaXJz'@;
put 'dCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICIrdHlwZW9mIGopO3JldHVybiBSKGosVixHKX0pLHouYWxsb2N8fCh6LmFsbG9jPWZ1bmN0aW9uKGosVixH'@;
put 'KXtpZigibnVtYmVyIiE9dHlwZW9mIGopdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJzaXplIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIGopO2lmKGo8MHx8aj49MjE0NzQ4MzY0OCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZh'@;
put 'bHVlICInK2orJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpO3ZhciBXPVIoaik7cmV0dXJuIFYmJjAhPT1WLmxlbmd0aD8ic3RyaW5nIj09dHlwZW9mIEc/Vy5maWxsKFYsRyk6Vy5maWxsKFYpOlcuZmlsbCgwKSxXfSksIUUua1N0cmluZ01heExlbmd0aCl0cnl7RS5rU3RyaW5n'@;
put 'TWF4TGVuZ3RoPUouYmluZGluZygiYnVmZmVyIikua1N0cmluZ01heExlbmd0aH1jYXRjaHt9RS5jb25zdGFudHN8fChFLmNvbnN0YW50cz17TUFYX0xFTkdUSDpFLmtNYXhMZW5ndGh9LEUua1N0cmluZ01heExlbmd0aCYmKEUuY29uc3RhbnRzLk1BWF9TVFJJTkdfTEVOR1RIPUUua1N0cmlu'@;
put 'Z01heExlbmd0aCkpLEguZXhwb3J0cz1FfSw0MTg5OihILEIsTCk9Pnt2YXIgSz1MKDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiBKKEksUil7dGhpcy5fYmxvY2s9Sy5hbGxvYyhJKSx0aGlzLl9maW5hbFNpemU9Uix0aGlzLl9ibG9ja1NpemU9SSx0aGlzLl9sZW49MH1KLnByb3RvdHlwZS51cGRh'@;
put 'dGU9ZnVuY3Rpb24oSSxSKXsic3RyaW5nIj09dHlwZW9mIEkmJihJPUsuZnJvbShJLFI9Unx8InV0ZjgiKSk7Zm9yKHZhciBFPXRoaXMuX2Jsb2NrLHo9dGhpcy5fYmxvY2tTaXplLGo9SS5sZW5ndGgsVj10aGlzLl9sZW4sRz0wO0c8ajspe2Zvcih2YXIgVz1WJXosVT1NYXRoLm1pbihqLUcs'@;
put 'ei1XKSxxPTA7cTxVO3ErKylFW1crcV09SVtHK3FdO0crPVUsKFYrPVUpJXo9PTAmJnRoaXMuX3VwZGF0ZShFKX1yZXR1cm4gdGhpcy5fbGVuKz1qLHRoaXN9LEoucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbihJKXt2YXIgUj10aGlzLl9sZW4ldGhpcy5fYmxvY2tTaXplO3RoaXMuX2Jsb2Nr'@;
put 'W1JdPTEyOCx0aGlzLl9ibG9jay5maWxsKDAsUisxKSxSPj10aGlzLl9maW5hbFNpemUmJih0aGlzLl91cGRhdGUodGhpcy5fYmxvY2spLHRoaXMuX2Jsb2NrLmZpbGwoMCkpO3ZhciBFPTgqdGhpcy5fbGVuO2lmKEU8PTQyOTQ5NjcyOTUpdGhpcy5fYmxvY2sud3JpdGVVSW50MzJCRShFLHRo'@;
put 'aXMuX2Jsb2NrU2l6ZS00KTtlbHNle3ZhciB6PSg0Mjk0OTY3Mjk1JkUpPj4+MDt0aGlzLl9ibG9jay53cml0ZVVJbnQzMkJFKChFLXopLzQyOTQ5NjcyOTYsdGhpcy5fYmxvY2tTaXplLTgpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyQkUoeix0aGlzLl9ibG9ja1NpemUtNCl9dGhpcy5fdXBk'@;
put 'YXRlKHRoaXMuX2Jsb2NrKTt2YXIgVj10aGlzLl9oYXNoKCk7cmV0dXJuIEk/Vi50b1N0cmluZyhJKTpWfSxKLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJfdXBkYXRlIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3MiKX0sSC5leHBvcnRzPUp9'@;
put 'LDkwNzI6KEgsQixMKT0+e3ZhciBLPUguZXhwb3J0cz1mdW5jdGlvbihKKXtKPUoudG9Mb3dlckNhc2UoKTt2YXIgST1LW0pdO2lmKCFJKXRocm93IG5ldyBFcnJvcihKKyIgaXMgbm90IHN1cHBvcnRlZCAod2UgYWNjZXB0IHB1bGwgcmVxdWVzdHMpIik7cmV0dXJuIG5ldyBJfTtLLnNoYT1M'@;
put 'KDQ0NDgpLEsuc2hhMT1MKDgzMzYpLEsuc2hhMjI0PUwoODQzMiksSy5zaGEyNTY9TCg3NDk5KSxLLnNoYTM4ND1MKDE2ODYpLEsuc2hhNTEyPUwoNzgxNil9LDQ0NDg6KEgsQixMKT0+e3ZhciBLPUwoNTcxNyksSj1MKDQxODkpLEk9TCg5NTA5KS5CdWZmZXIsUj1bMTUxODUwMDI0OSwxODU5'@;
put 'Nzc1MzkzLC0xODk0MDA3NTg4LC04OTk0OTc1MTRdLEU9bmV3IEFycmF5KDgwKTtmdW5jdGlvbiB6KCl7dGhpcy5pbml0KCksdGhpcy5fdz1FLEouY2FsbCh0aGlzLDY0LDU2KX1mdW5jdGlvbiBqKEcpe3JldHVybiBHPDwzMHxHPj4+Mn1mdW5jdGlvbiBWKEcsVyxVLHEpe3JldHVybiAwPT09'@;
put 'Rz9XJlV8flcmcToyPT09Rz9XJlV8VyZxfFUmcTpXXlVecX1LKHosSiksei5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OCx0aGlzLl9lPTMyODUz'@;
put 'Nzc1MjAsdGhpc30sei5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihHKXtmb3IodmFyIFcsVT10aGlzLl93LHE9MHx0aGlzLl9hLHRlPTB8dGhpcy5fYixuZT0wfHRoaXMuX2MsaWU9MHx0aGlzLl9kLGxlPTB8dGhpcy5fZSxkZT0wO2RlPDE2OysrZGUpVVtkZV09Ry5yZWFkSW50MzJCRSg0'@;
put 'KmRlKTtmb3IoO2RlPDgwOysrZGUpVVtkZV09VVtkZS0zXV5VW2RlLThdXlVbZGUtMTRdXlVbZGUtMTZdO2Zvcih2YXIgdWU9MDt1ZTw4MDsrK3VlKXt2YXIgY2U9fn4odWUvMjApLFk9MHwoKFc9cSk8PDV8Vz4+PjI3KStWKGNlLHRlLG5lLGllKStsZStVW3VlXStSW2NlXTtsZT1pZSxpZT1u'@;
put 'ZSxuZT1qKHRlKSx0ZT1xLHE9WX10aGlzLl9hPXErdGhpcy5fYXwwLHRoaXMuX2I9dGUrdGhpcy5fYnwwLHRoaXMuX2M9bmUrdGhpcy5fY3wwLHRoaXMuX2Q9aWUrdGhpcy5fZHwwLHRoaXMuX2U9bGUrdGhpcy5fZXwwfSx6LnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBHPUkuYWxs'@;
put 'b2NVbnNhZmUoMjApO3JldHVybiBHLndyaXRlSW50MzJCRSgwfHRoaXMuX2EsMCksRy53cml0ZUludDMyQkUoMHx0aGlzLl9iLDQpLEcud3JpdGVJbnQzMkJFKDB8dGhpcy5fYyw4KSxHLndyaXRlSW50MzJCRSgwfHRoaXMuX2QsMTIpLEcud3JpdGVJbnQzMkJFKDB8dGhpcy5fZSwxNiksR30s'@;
put 'SC5leHBvcnRzPXp9LDgzMzY6KEgsQixMKT0+e3ZhciBLPUwoNTcxNyksSj1MKDQxODkpLEk9TCg5NTA5KS5CdWZmZXIsUj1bMTUxODUwMDI0OSwxODU5Nzc1MzkzLC0xODk0MDA3NTg4LC04OTk0OTc1MTRdLEU9bmV3IEFycmF5KDgwKTtmdW5jdGlvbiB6KCl7dGhpcy5pbml0KCksdGhpcy5f'@;
put 'dz1FLEouY2FsbCh0aGlzLDY0LDU2KX1mdW5jdGlvbiBqKFcpe3JldHVybiBXPDw1fFc+Pj4yN31mdW5jdGlvbiBWKFcpe3JldHVybiBXPDwzMHxXPj4+Mn1mdW5jdGlvbiBHKFcsVSxxLHRlKXtyZXR1cm4gMD09PVc/VSZxfH5VJnRlOjI9PT1XP1UmcXxVJnRlfHEmdGU6VV5xXnRlfUsoeixK'@;
put 'KSx6LnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMCx0aGlzfSx6LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9u'@;
put 'KFcpe2Zvcih2YXIgVSxxPXRoaXMuX3csdGU9MHx0aGlzLl9hLG5lPTB8dGhpcy5fYixpZT0wfHRoaXMuX2MsbGU9MHx0aGlzLl9kLGRlPTB8dGhpcy5fZSx1ZT0wO3VlPDE2OysrdWUpcVt1ZV09Vy5yZWFkSW50MzJCRSg0KnVlKTtmb3IoO3VlPDgwOysrdWUpcVt1ZV09KFU9cVt1ZS0zXV5x'@;
put 'W3VlLThdXnFbdWUtMTRdXnFbdWUtMTZdKTw8MXxVPj4+MzE7Zm9yKHZhciBjZT0wO2NlPDgwOysrY2Upe3ZhciBZPX5+KGNlLzIwKSxiPWoodGUpK0coWSxuZSxpZSxsZSkrZGUrcVtjZV0rUltZXXwwO2RlPWxlLGxlPWllLGllPVYobmUpLG5lPXRlLHRlPWJ9dGhpcy5fYT10ZSt0aGlzLl9h'@;
put 'fDAsdGhpcy5fYj1uZSt0aGlzLl9ifDAsdGhpcy5fYz1pZSt0aGlzLl9jfDAsdGhpcy5fZD1sZSt0aGlzLl9kfDAsdGhpcy5fZT1kZSt0aGlzLl9lfDB9LHoucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIFc9SS5hbGxvY1Vuc2FmZSgyMCk7cmV0dXJuIFcud3JpdGVJbnQzMkJFKDB8'@;
put 'dGhpcy5fYSwwKSxXLndyaXRlSW50MzJCRSgwfHRoaXMuX2IsNCksVy53cml0ZUludDMyQkUoMHx0aGlzLl9jLDgpLFcud3JpdGVJbnQzMkJFKDB8dGhpcy5fZCwxMiksVy53cml0ZUludDMyQkUoMHx0aGlzLl9lLDE2KSxXfSxILmV4cG9ydHM9en0sODQzMjooSCxCLEwpPT57dmFyIEs9TCg1'@;
put 'NzE3KSxKPUwoNzQ5OSksST1MKDQxODkpLFI9TCg5NTA5KS5CdWZmZXIsRT1uZXcgQXJyYXkoNjQpO2Z1bmN0aW9uIHooKXt0aGlzLmluaXQoKSx0aGlzLl93PUUsSS5jYWxsKHRoaXMsNjQsNTYpfUsoeixKKSx6LnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MzIz'@;
put 'ODM3MTAzMix0aGlzLl9iPTkxNDE1MDY2Myx0aGlzLl9jPTgxMjcwMjk5OSx0aGlzLl9kPTQxNDQ5MTI2OTcsdGhpcy5fZT00MjkwNzc1ODU3LHRoaXMuX2Y9MTc1MDYwMzAyNSx0aGlzLl9nPTE2OTQwNzY4MzksdGhpcy5faD0zMjA0MDc1NDI4LHRoaXN9LHoucHJvdG90eXBlLl9oYXNoPWZ1'@;
put 'bmN0aW9uKCl7dmFyIGo9Ui5hbGxvY1Vuc2FmZSgyOCk7cmV0dXJuIGoud3JpdGVJbnQzMkJFKHRoaXMuX2EsMCksai53cml0ZUludDMyQkUodGhpcy5fYiw0KSxqLndyaXRlSW50MzJCRSh0aGlzLl9jLDgpLGoud3JpdGVJbnQzMkJFKHRoaXMuX2QsMTIpLGoud3JpdGVJbnQzMkJFKHRoaXMu'@;
put 'X2UsMTYpLGoud3JpdGVJbnQzMkJFKHRoaXMuX2YsMjApLGoud3JpdGVJbnQzMkJFKHRoaXMuX2csMjQpLGp9LEguZXhwb3J0cz16fSw3NDk5OihILEIsTCk9Pnt2YXIgSz1MKDU3MTcpLEo9TCg0MTg5KSxJPUwoOTUwOSkuQnVmZmVyLFI9WzExMTYzNTI0MDgsMTg5OTQ0NzQ0MSwzMDQ5MzIz'@;
put 'NDcxLDM5MjEwMDk1NzMsOTYxOTg3MTYzLDE1MDg5NzA5OTMsMjQ1MzYzNTc0OCwyODcwNzYzMjIxLDM2MjQzODEwODAsMzEwNTk4NDAxLDYwNzIyNTI3OCwxNDI2ODgxOTg3LDE5MjUwNzgzODgsMjE2MjA3ODIwNiwyNjE0ODg4MTAzLDMyNDgyMjI1ODAsMzgzNTM5MDQwMSw0MDIyMjI0Nzc0'@;
put 'LDI2NDM0NzA3OCw2MDQ4MDc2MjgsNzcwMjU1OTgzLDEyNDkxNTAxMjIsMTU1NTA4MTY5MiwxOTk2MDY0OTg2LDI1NTQyMjA4ODIsMjgyMTgzNDM0OSwyOTUyOTk2ODA4LDMyMTAzMTM2NzEsMzMzNjU3MTg5MSwzNTg0NTI4NzExLDExMzkyNjk5MywzMzgyNDE4OTUsNjY2MzA3MjA1LDc3MzUy'@;
put 'OTkxMiwxMjk0NzU3MzcyLDEzOTYxODIyOTEsMTY5NTE4MzcwMCwxOTg2NjYxMDUxLDIxNzcwMjYzNTAsMjQ1Njk1NjAzNywyNzMwNDg1OTIxLDI4MjAzMDI0MTEsMzI1OTczMDgwMCwzMzQ1NzY0NzcxLDM1MTYwNjU4MTcsMzYwMDM1MjgwNCw0MDk0NTcxOTA5LDI3NTQyMzM0NCw0MzAyMjc3'@;
put 'MzQsNTA2OTQ4NjE2LDY1OTA2MDU1Niw4ODM5OTc4NzcsOTU4MTM5NTcxLDEzMjI4MjIyMTgsMTUzNzAwMjA2MywxNzQ3ODczNzc5LDE5NTU1NjIyMjIsMjAyNDEwNDgxNSwyMjI3NzMwNDUyLDIzNjE4NTI0MjQsMjQyODQzNjQ3NCwyNzU2NzM0MTg3LDMyMDQwMzE0NzksMzMyOTMyNTI5OF0s'@;
put 'RT1uZXcgQXJyYXkoNjQpO2Z1bmN0aW9uIHooKXt0aGlzLmluaXQoKSx0aGlzLl93PUUsSi5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9uIGoocSx0ZSxuZSl7cmV0dXJuIG5lXnEmKHRlXm5lKX1mdW5jdGlvbiBWKHEsdGUsbmUpe3JldHVybiBxJnRlfG5lJihxfHRlKX1mdW5jdGlvbiBHKHEp'@;
put 'e3JldHVybihxPj4+MnxxPDwzMCleKHE+Pj4xM3xxPDwxOSleKHE+Pj4yMnxxPDwxMCl9ZnVuY3Rpb24gVyhxKXtyZXR1cm4ocT4+PjZ8cTw8MjYpXihxPj4+MTF8cTw8MjEpXihxPj4+MjV8cTw8Nyl9ZnVuY3Rpb24gVShxKXtyZXR1cm4ocT4+Pjd8cTw8MjUpXihxPj4+MTh8cTw8MTQpXnE+'@;
put 'Pj4zfUsoeixKKSx6LnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MTc3OTAzMzcwMyx0aGlzLl9iPTMxNDQxMzQyNzcsdGhpcy5fYz0xMDEzOTA0MjQyLHRoaXMuX2Q9Mjc3MzQ4MDc2Mix0aGlzLl9lPTEzNTk4OTMxMTksdGhpcy5fZj0yNjAwODIyOTI0LHRoaXMu'@;
put 'X2c9NTI4NzM0NjM1LHRoaXMuX2g9MTU0MTQ1OTIyNSx0aGlzfSx6LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHEpe2Zvcih2YXIgdGUsbmU9dGhpcy5fdyxpZT0wfHRoaXMuX2EsbGU9MHx0aGlzLl9iLGRlPTB8dGhpcy5fYyx1ZT0wfHRoaXMuX2QsY2U9MHx0aGlzLl9lLFk9MHx0aGlz'@;
put 'Ll9mLGI9MHx0aGlzLl9nLHg9MHx0aGlzLl9oLE49MDtOPDE2OysrTiluZVtOXT1xLnJlYWRJbnQzMkJFKDQqTik7Zm9yKDtOPDY0OysrTiluZVtOXT0wfCgoKHRlPW5lW04tMl0pPj4+MTd8dGU8PDE1KV4odGU+Pj4xOXx0ZTw8MTMpXnRlPj4+MTApK25lW04tN10rVShuZVtOLTE1XSkrbmVb'@;
put 'Ti0xNl07Zm9yKHZhciBGPTA7Rjw2NDsrK0Ype3ZhciBnPXgrVyhjZSkraihjZSxZLGIpK1JbRl0rbmVbRl18MCxDPUcoaWUpK1YoaWUsbGUsZGUpfDA7eD1iLGI9WSxZPWNlLGNlPXVlK2d8MCx1ZT1kZSxkZT1sZSxsZT1pZSxpZT1nK0N8MH10aGlzLl9hPWllK3RoaXMuX2F8MCx0aGlzLl9i'@;
put 'PWxlK3RoaXMuX2J8MCx0aGlzLl9jPWRlK3RoaXMuX2N8MCx0aGlzLl9kPXVlK3RoaXMuX2R8MCx0aGlzLl9lPWNlK3RoaXMuX2V8MCx0aGlzLl9mPVkrdGhpcy5fZnwwLHRoaXMuX2c9Yit0aGlzLl9nfDAsdGhpcy5faD14K3RoaXMuX2h8MH0sei5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24o'@;
put 'KXt2YXIgcT1JLmFsbG9jVW5zYWZlKDMyKTtyZXR1cm4gcS53cml0ZUludDMyQkUodGhpcy5fYSwwKSxxLndyaXRlSW50MzJCRSh0aGlzLl9iLDQpLHEud3JpdGVJbnQzMkJFKHRoaXMuX2MsOCkscS53cml0ZUludDMyQkUodGhpcy5fZCwxMikscS53cml0ZUludDMyQkUodGhpcy5fZSwxNiks'@;
put 'cS53cml0ZUludDMyQkUodGhpcy5fZiwyMCkscS53cml0ZUludDMyQkUodGhpcy5fZywyNCkscS53cml0ZUludDMyQkUodGhpcy5faCwyOCkscX0sSC5leHBvcnRzPXp9LDE2ODY6KEgsQixMKT0+e3ZhciBLPUwoNTcxNyksSj1MKDc4MTYpLEk9TCg0MTg5KSxSPUwoOTUwOSkuQnVmZmVyLEU9'@;
put 'bmV3IEFycmF5KDE2MCk7ZnVuY3Rpb24geigpe3RoaXMuaW5pdCgpLHRoaXMuX3c9RSxJLmNhbGwodGhpcywxMjgsMTEyKX1LKHosSiksei5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9haD0zNDE4MDcwMzY1LHRoaXMuX2JoPTE2NTQyNzAyNTAsdGhpcy5fY2g9MjQz'@;
put 'ODUyOTM3MCx0aGlzLl9kaD0zNTU0NjIzNjAsdGhpcy5fZWg9MTczMTQwNTQxNSx0aGlzLl9maD0yMzk0MTgwMjMxLHRoaXMuX2doPTM2NzUwMDg1MjUsdGhpcy5faGg9MTIwMzA2MjgxMyx0aGlzLl9hbD0zMjM4MzcxMDMyLHRoaXMuX2JsPTkxNDE1MDY2Myx0aGlzLl9jbD04MTI3MDI5OTks'@;
put 'dGhpcy5fZGw9NDE0NDkxMjY5Nyx0aGlzLl9lbD00MjkwNzc1ODU3LHRoaXMuX2ZsPTE3NTA2MDMwMjUsdGhpcy5fZ2w9MTY5NDA3NjgzOSx0aGlzLl9obD0zMjA0MDc1NDI4LHRoaXN9LHoucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIGo9Ui5hbGxvY1Vuc2FmZSg0OCk7ZnVuY3Rp'@;
put 'b24gVihHLFcsVSl7ai53cml0ZUludDMyQkUoRyxVKSxqLndyaXRlSW50MzJCRShXLFUrNCl9cmV0dXJuIFYodGhpcy5fYWgsdGhpcy5fYWwsMCksVih0aGlzLl9iaCx0aGlzLl9ibCw4KSxWKHRoaXMuX2NoLHRoaXMuX2NsLDE2KSxWKHRoaXMuX2RoLHRoaXMuX2RsLDI0KSxWKHRoaXMuX2Vo'@;
put 'LHRoaXMuX2VsLDMyKSxWKHRoaXMuX2ZoLHRoaXMuX2ZsLDQwKSxqfSxILmV4cG9ydHM9en0sNzgxNjooSCxCLEwpPT57dmFyIEs9TCg1NzE3KSxKPUwoNDE4OSksST1MKDk1MDkpLkJ1ZmZlcixSPVsxMTE2MzUyNDA4LDM2MDk3Njc0NTgsMTg5OTQ0NzQ0MSw2MDI4OTE3MjUsMzA0OTMyMzQ3'@;
put 'MSwzOTY0NDg0Mzk5LDM5MjEwMDk1NzMsMjE3MzI5NTU0OCw5NjE5ODcxNjMsNDA4MTYyODQ3MiwxNTA4OTcwOTkzLDMwNTM4MzQyNjUsMjQ1MzYzNTc0OCwyOTM3NjcxNTc5LDI4NzA3NjMyMjEsMzY2NDYwOTU2MCwzNjI0MzgxMDgwLDI3MzQ4ODMzOTQsMzEwNTk4NDAxLDExNjQ5OTY1NDIs'@;
put 'NjA3MjI1Mjc4LDEzMjM2MTA3NjQsMTQyNjg4MTk4NywzNTkwMzA0OTk0LDE5MjUwNzgzODgsNDA2ODE4MjM4MywyMTYyMDc4MjA2LDk5MTMzNjExMywyNjE0ODg4MTAzLDYzMzgwMzMxNywzMjQ4MjIyNTgwLDM0Nzk3NzQ4NjgsMzgzNTM5MDQwMSwyNjY2NjEzNDU4LDQwMjIyMjQ3NzQsOTQ0'@;
put 'NzExMTM5LDI2NDM0NzA3OCwyMzQxMjYyNzczLDYwNDgwNzYyOCwyMDA3ODAwOTMzLDc3MDI1NTk4MywxNDk1OTkwOTAxLDEyNDkxNTAxMjIsMTg1NjQzMTIzNSwxNTU1MDgxNjkyLDMxNzUyMTgxMzIsMTk5NjA2NDk4NiwyMTk4OTUwODM3LDI1NTQyMjA4ODIsMzk5OTcxOTMzOSwyODIxODM0'@;
put 'MzQ5LDc2Njc4NDAxNiwyOTUyOTk2ODA4LDI1NjY1OTQ4NzksMzIxMDMxMzY3MSwzMjAzMzM3OTU2LDMzMzY1NzE4OTEsMTAzNDQ1NzAyNiwzNTg0NTI4NzExLDI0NjY5NDg5MDEsMTEzOTI2OTkzLDM3NTgzMjYzODMsMzM4MjQxODk1LDE2ODcxNzkzNiw2NjYzMDcyMDUsMTE4ODE3OTk2NCw3'@;
put 'NzM1Mjk5MTIsMTU0NjA0NTczNCwxMjk0NzU3MzcyLDE1MjI4MDU0ODUsMTM5NjE4MjI5MSwyNjQzODMzODIzLDE2OTUxODM3MDAsMjM0MzUyNzM5MCwxOTg2NjYxMDUxLDEwMTQ0Nzc0ODAsMjE3NzAyNjM1MCwxMjA2NzU5MTQyLDI0NTY5NTYwMzcsMzQ0MDc3NjI3LDI3MzA0ODU5MjEsMTI5'@;
put 'MDg2MzQ2MCwyODIwMzAyNDExLDMxNTg0NTQyNzMsMzI1OTczMDgwMCwzNTA1OTUyNjU3LDMzNDU3NjQ3NzEsMTA2MjE3MDA4LDM1MTYwNjU4MTcsMzYwNjAwODM0NCwzNjAwMzUyODA0LDE0MzI3MjU3NzYsNDA5NDU3MTkwOSwxNDY3MDMxNTk0LDI3NTQyMzM0NCw4NTExNjk3MjAsNDMwMjI3'@;
put 'NzM0LDMxMDA4MjM3NTIsNTA2OTQ4NjE2LDEzNjMyNTgxOTUsNjU5MDYwNTU2LDM3NTA2ODU1OTMsODgzOTk3ODc3LDM3ODUwNTAyODAsOTU4MTM5NTcxLDMzMTgzMDc0MjcsMTMyMjgyMjIxOCwzODEyNzIzNDAzLDE1MzcwMDIwNjMsMjAwMzAzNDk5NSwxNzQ3ODczNzc5LDM2MDIwMzY4OTks'@;
put 'MTk1NTU2MjIyMiwxNTc1OTkwMDEyLDIwMjQxMDQ4MTUsMTEyNTU5MjkyOCwyMjI3NzMwNDUyLDI3MTY5MDQzMDYsMjM2MTg1MjQyNCw0NDI3NzYwNDQsMjQyODQzNjQ3NCw1OTM2OTgzNDQsMjc1NjczNDE4NywzNzMzMTEwMjQ5LDMyMDQwMzE0NzksMjk5OTM1MTU3MywzMzI5MzI1Mjk4LDM4'@;
put 'MTU5MjA0MjcsMzM5MTU2OTYxNCwzOTI4MzgzOTAwLDM1MTUyNjcyNzEsNTY2MjgwNzExLDM5NDAxODc2MDYsMzQ1NDA2OTUzNCw0MTE4NjMwMjcxLDQwMDAyMzk5OTIsMTE2NDE4NDc0LDE5MTQxMzg1NTQsMTc0MjkyNDIxLDI3MzEwNTUyNzAsMjg5MzgwMzU2LDMyMDM5OTMwMDYsNDYwMzkz'@;
put 'MjY5LDMyMDYyMDMxNSw2ODU0NzE3MzMsNTg3NDk2ODM2LDg1MjE0Mjk3MSwxMDg2NzkyODUxLDEwMTcwMzYyOTgsMzY1NTQzMTAwLDExMjYwMDA1ODAsMjYxODI5NzY3NiwxMjg4MDMzNDcwLDM0MDk4NTUxNTgsMTUwMTUwNTk0OCw0MjM0NTA5ODY2LDE2MDcxNjc5MTUsOTg3MTY3NDY4LDE4'@;
put 'MTY0MDIzMTYsMTI0NjE4OTU5MV0sRT1uZXcgQXJyYXkoMTYwKTtmdW5jdGlvbiB6KCl7dGhpcy5pbml0KCksdGhpcy5fdz1FLEouY2FsbCh0aGlzLDEyOCwxMTIpfWZ1bmN0aW9uIGoobGUsZGUsdWUpe3JldHVybiB1ZV5sZSYoZGVedWUpfWZ1bmN0aW9uIFYobGUsZGUsdWUpe3JldHVybiBs'@;
put 'ZSZkZXx1ZSYobGV8ZGUpfWZ1bmN0aW9uIEcobGUsZGUpe3JldHVybihsZT4+PjI4fGRlPDw0KV4oZGU+Pj4yfGxlPDwzMCleKGRlPj4+N3xsZTw8MjUpfWZ1bmN0aW9uIFcobGUsZGUpe3JldHVybihsZT4+PjE0fGRlPDwxOCleKGxlPj4+MTh8ZGU8PDE0KV4oZGU+Pj45fGxlPDwyMyl9ZnVu'@;
put 'Y3Rpb24gVShsZSxkZSl7cmV0dXJuKGxlPj4+MXxkZTw8MzEpXihsZT4+Pjh8ZGU8PDI0KV5sZT4+Pjd9ZnVuY3Rpb24gcShsZSxkZSl7cmV0dXJuKGxlPj4+MXxkZTw8MzEpXihsZT4+Pjh8ZGU8PDI0KV4obGU+Pj43fGRlPDwyNSl9ZnVuY3Rpb24gdGUobGUsZGUpe3JldHVybihsZT4+PjE5'@;
put 'fGRlPDwxMyleKGRlPj4+Mjl8bGU8PDMpXmxlPj4+Nn1mdW5jdGlvbiBuZShsZSxkZSl7cmV0dXJuKGxlPj4+MTl8ZGU8PDEzKV4oZGU+Pj4yOXxsZTw8MyleKGxlPj4+NnxkZTw8MjYpfWZ1bmN0aW9uIGllKGxlLGRlKXtyZXR1cm4gbGU+Pj4wPGRlPj4+MD8xOjB9Syh6LEopLHoucHJvdG90'@;
put 'eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWg9MTc3OTAzMzcwMyx0aGlzLl9iaD0zMTQ0MTM0Mjc3LHRoaXMuX2NoPTEwMTM5MDQyNDIsdGhpcy5fZGg9Mjc3MzQ4MDc2Mix0aGlzLl9laD0xMzU5ODkzMTE5LHRoaXMuX2ZoPTI2MDA4MjI5MjQsdGhpcy5fZ2g9NTI4NzM0NjM1'@;
put 'LHRoaXMuX2hoPTE1NDE0NTkyMjUsdGhpcy5fYWw9NDA4OTIzNTcyMCx0aGlzLl9ibD0yMjI3ODczNTk1LHRoaXMuX2NsPTQyNzExNzU3MjMsdGhpcy5fZGw9MTU5NTc1MDEyOSx0aGlzLl9lbD0yOTE3NTY1MTM3LHRoaXMuX2ZsPTcyNTUxMTE5OSx0aGlzLl9nbD00MjE1Mzg5NTQ3LHRoaXMu'@;
put 'X2hsPTMyNzAzMzIwOSx0aGlzfSx6LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGxlKXtmb3IodmFyIGRlPXRoaXMuX3csdWU9MHx0aGlzLl9haCxjZT0wfHRoaXMuX2JoLFk9MHx0aGlzLl9jaCxiPTB8dGhpcy5fZGgseD0wfHRoaXMuX2VoLE49MHx0aGlzLl9maCxGPTB8dGhpcy5fZ2gs'@;
put 'Zz0wfHRoaXMuX2hoLEM9MHx0aGlzLl9hbCxNPTB8dGhpcy5fYmwseT0wfHRoaXMuX2NsLHA9MHx0aGlzLl9kbCxTPTB8dGhpcy5fZWwsUT0wfHRoaXMuX2ZsLHJlPTB8dGhpcy5fZ2wsZmU9MHx0aGlzLl9obCxtZT0wO21lPDMyO21lKz0yKWRlW21lXT1sZS5yZWFkSW50MzJCRSg0Km1lKSxk'@;
put 'ZVttZSsxXT1sZS5yZWFkSW50MzJCRSg0Km1lKzQpO2Zvcig7bWU8MTYwO21lKz0yKXt2YXIga2U9ZGVbbWUtMzBdLFRlPWRlW21lLTMwKzFdLFBlPVUoa2UsVGUpLEZlPXEoVGUsa2UpLE5lPXRlKGtlPWRlW21lLTRdLFRlPWRlW21lLTQrMV0pLExlPW5lKFRlLGtlKSxRZT1kZVttZS0zMl0s'@;
put 'bXQ9ZGVbbWUtMzIrMV0sS2U9RmUrZGVbbWUtMTQrMV18MCx3ZT1QZStkZVttZS0xNF0raWUoS2UsRmUpfDA7d2U9KHdlPXdlK05lK2llKEtlPUtlK0xlfDAsTGUpfDApK1FlK2llKEtlPUtlK210fDAsbXQpfDAsZGVbbWVdPXdlLGRlW21lKzFdPUtlfWZvcih2YXIgSWU9MDtJZTwxNjA7SWUr'@;
put 'PTIpe3dlPWRlW0llXSxLZT1kZVtJZSsxXTt2YXIgT2U9Vih1ZSxjZSxZKSxldD1WKEMsTSx5KSxudD1HKHVlLEMpLHFlPUcoQyx1ZSksaHQ9Vyh4LFMpLEVlPVcoUyx4KSxEZT1SW0llXSwkZT1SW0llKzFdLGF0PWooeCxOLEYpLGN0PWooUyxRLHJlKSxPdD1mZStFZXwwLFB0PWcraHQraWUo'@;
put 'T3QsZmUpfDA7UHQ9KFB0PShQdD1QdCthdCtpZShPdD1PdCtjdHwwLGN0KXwwKStEZStpZShPdD1PdCskZXwwLCRlKXwwKSt3ZStpZShPdD1PdCtLZXwwLEtlKXwwO3ZhciBBdD1xZStldHwwLEp0PW50K09lK2llKEF0LHFlKXwwO2c9RixmZT1yZSxGPU4scmU9USxOPXgsUT1TLHg9YitQdCtp'@;
put 'ZShTPXArT3R8MCxwKXwwLGI9WSxwPXksWT1jZSx5PU0sY2U9dWUsTT1DLHVlPVB0K0p0K2llKEM9T3QrQXR8MCxPdCl8MH10aGlzLl9hbD10aGlzLl9hbCtDfDAsdGhpcy5fYmw9dGhpcy5fYmwrTXwwLHRoaXMuX2NsPXRoaXMuX2NsK3l8MCx0aGlzLl9kbD10aGlzLl9kbCtwfDAsdGhpcy5f'@;
put 'ZWw9dGhpcy5fZWwrU3wwLHRoaXMuX2ZsPXRoaXMuX2ZsK1F8MCx0aGlzLl9nbD10aGlzLl9nbCtyZXwwLHRoaXMuX2hsPXRoaXMuX2hsK2ZlfDAsdGhpcy5fYWg9dGhpcy5fYWgrdWUraWUodGhpcy5fYWwsQyl8MCx0aGlzLl9iaD10aGlzLl9iaCtjZStpZSh0aGlzLl9ibCxNKXwwLHRoaXMu'@;
put 'X2NoPXRoaXMuX2NoK1kraWUodGhpcy5fY2wseSl8MCx0aGlzLl9kaD10aGlzLl9kaCtiK2llKHRoaXMuX2RsLHApfDAsdGhpcy5fZWg9dGhpcy5fZWgreCtpZSh0aGlzLl9lbCxTKXwwLHRoaXMuX2ZoPXRoaXMuX2ZoK04raWUodGhpcy5fZmwsUSl8MCx0aGlzLl9naD10aGlzLl9naCtGK2ll'@;
put 'KHRoaXMuX2dsLHJlKXwwLHRoaXMuX2hoPXRoaXMuX2hoK2craWUodGhpcy5faGwsZmUpfDB9LHoucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIGxlPUkuYWxsb2NVbnNhZmUoNjQpO2Z1bmN0aW9uIGRlKHVlLGNlLFkpe2xlLndyaXRlSW50MzJCRSh1ZSxZKSxsZS53cml0ZUludDMy'@;
put 'QkUoY2UsWSs0KX1yZXR1cm4gZGUodGhpcy5fYWgsdGhpcy5fYWwsMCksZGUodGhpcy5fYmgsdGhpcy5fYmwsOCksZGUodGhpcy5fY2gsdGhpcy5fY2wsMTYpLGRlKHRoaXMuX2RoLHRoaXMuX2RsLDI0KSxkZSh0aGlzLl9laCx0aGlzLl9lbCwzMiksZGUodGhpcy5fZmgsdGhpcy5fZmwsNDAp'@;
put 'LGRlKHRoaXMuX2doLHRoaXMuX2dsLDQ4KSxkZSh0aGlzLl9oaCx0aGlzLl9obCw1NiksbGV9LEguZXhwb3J0cz16fSwyODMwOihILEIsTCk9PntILmV4cG9ydHM9Sjt2YXIgSz1MKDcxODcpLkV2ZW50RW1pdHRlcjtmdW5jdGlvbiBKKCl7Sy5jYWxsKHRoaXMpfUwoNTcxNykoSixLKSxKLlJl'@;
put 'YWRhYmxlPUwoOTQ4MSksSi5Xcml0YWJsZT1MKDQyMjkpLEouRHVwbGV4PUwoNjc1MyksSi5UcmFuc2Zvcm09TCg0NjA1KSxKLlBhc3NUaHJvdWdoPUwoMjcyNSksSi5maW5pc2hlZD1MKDg2MTApLEoucGlwZWxpbmU9TCg5OTQ2KSxKLlN0cmVhbT1KLEoucHJvdG90eXBlLnBpcGU9ZnVuY3Rp'@;
put 'b24oSSxSKXt2YXIgRT10aGlzO2Z1bmN0aW9uIHoodGUpe0kud3JpdGFibGUmJiExPT09SS53cml0ZSh0ZSkmJkUucGF1c2UmJkUucGF1c2UoKX1mdW5jdGlvbiBqKCl7RS5yZWFkYWJsZSYmRS5yZXN1bWUmJkUucmVzdW1lKCl9RS5vbigiZGF0YSIseiksSS5vbigiZHJhaW4iLGopLEkuX2lz'@;
put 'U3RkaW98fFImJiExPT09Ui5lbmR8fChFLm9uKCJlbmQiLEcpLEUub24oImNsb3NlIixXKSk7dmFyIFY9ITE7ZnVuY3Rpb24gRygpe1Z8fChWPSEwLEkuZW5kKCkpfWZ1bmN0aW9uIFcoKXtWfHwoVj0hMCwiZnVuY3Rpb24iPT10eXBlb2YgSS5kZXN0cm95JiZJLmRlc3Ryb3koKSl9ZnVuY3Rp'@;
put 'b24gVSh0ZSl7aWYocSgpLDA9PT1LLmxpc3RlbmVyQ291bnQodGhpcywiZXJyb3IiKSl0aHJvdyB0ZX1mdW5jdGlvbiBxKCl7RS5yZW1vdmVMaXN0ZW5lcigiZGF0YSIseiksSS5yZW1vdmVMaXN0ZW5lcigiZHJhaW4iLGopLEUucmVtb3ZlTGlzdGVuZXIoImVuZCIsRyksRS5yZW1vdmVMaXN0'@;
put 'ZW5lcigiY2xvc2UiLFcpLEUucmVtb3ZlTGlzdGVuZXIoImVycm9yIixVKSxJLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsVSksRS5yZW1vdmVMaXN0ZW5lcigiZW5kIixxKSxFLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIscSksSS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLHEpfXJldHVybiBFLm9u'@;
put 'KCJlcnJvciIsVSksSS5vbigiZXJyb3IiLFUpLEUub24oImVuZCIscSksRS5vbigiY2xvc2UiLHEpLEkub24oImNsb3NlIixxKSxJLmVtaXQoInBpcGUiLEUpLEl9fSwyNTUzOihILEIsTCk9PnsidXNlIHN0cmljdCI7dmFyIEs9TCg5NTA5KS5CdWZmZXIsSj1LLmlzRW5jb2Rpbmd8fGZ1bmN0'@;
put 'aW9uKHEpe3N3aXRjaCgocT0iIitxKSYmcS50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpj'@;
put 'YXNlInJhdyI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19O2Z1bmN0aW9uIEkocSl7dmFyIHRlO3N3aXRjaCh0aGlzLmVuY29kaW5nPWZ1bmN0aW9uKG5lKXt2YXIgaWU9ZnVuY3Rpb24obGUpe2lmKCFsZSlyZXR1cm4idXRmOCI7Zm9yKHZhciBkZTs7KXN3aXRjaChsZSl7Y2FzZSJ1dGY4'@;
put 'IjpjYXNlInV0Zi04IjpyZXR1cm4idXRmOCI7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiJ1dGYxNmxlIjtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiJsYXRpbjEiO2Nhc2UiYmFzZTY0IjpjYXNlImFzY2lpIjpjYXNl'@;
put 'ImhleCI6cmV0dXJuIGxlO2RlZmF1bHQ6aWYoZGUpcmV0dXJuO2xlPSgiIitsZSkudG9Mb3dlckNhc2UoKSxkZT0hMH19KG5lKTtpZigic3RyaW5nIiE9dHlwZW9mIGllJiYoSy5pc0VuY29kaW5nPT09Snx8IUoobmUpKSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrbmUp'@;
put 'O3JldHVybiBpZXx8bmV9KHEpLHRoaXMuZW5jb2Rpbmcpe2Nhc2UidXRmMTZsZSI6dGhpcy50ZXh0PXosdGhpcy5lbmQ9aix0ZT00O2JyZWFrO2Nhc2UidXRmOCI6dGhpcy5maWxsTGFzdD1FLHRlPTQ7YnJlYWs7Y2FzZSJiYXNlNjQiOnRoaXMudGV4dD1WLHRoaXMuZW5kPUcsdGU9MzticmVh'@;
put 'aztkZWZhdWx0OnJldHVybiB0aGlzLndyaXRlPVcsdm9pZCh0aGlzLmVuZD1VKX10aGlzLmxhc3ROZWVkPTAsdGhpcy5sYXN0VG90YWw9MCx0aGlzLmxhc3RDaGFyPUsuYWxsb2NVbnNhZmUodGUpfWZ1bmN0aW9uIFIocSl7cmV0dXJuIHE8PTEyNz8wOnE+PjU9PTY/MjpxPj40PT0xND8zOnE+'@;
put 'PjM9PTMwPzQ6cT4+Nj09Mj8tMTotMn1mdW5jdGlvbiBFKHEpe3ZhciB0ZT10aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLG5lPWZ1bmN0aW9uKGllLGxlLGRlKXtpZigxMjghPSgxOTImbGVbMF0pKXJldHVybiBpZS5sYXN0TmVlZD0wLCJcdWZmZmQiO2lmKGllLmxhc3ROZWVkPjEmJmxl'@;
put 'Lmxlbmd0aD4xKXtpZigxMjghPSgxOTImbGVbMV0pKXJldHVybiBpZS5sYXN0TmVlZD0xLCJcdWZmZmQiO2lmKGllLmxhc3ROZWVkPjImJmxlLmxlbmd0aD4yJiYxMjghPSgxOTImbGVbMl0pKXJldHVybiBpZS5sYXN0TmVlZD0yLCJcdWZmZmQifX0odGhpcyxxKTtyZXR1cm4gdm9pZCAwIT09'@;
put 'bmU/bmU6dGhpcy5sYXN0TmVlZDw9cS5sZW5ndGg/KHEuY29weSh0aGlzLmxhc3RDaGFyLHRlLDAsdGhpcy5sYXN0TmVlZCksdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsdGhpcy5sYXN0VG90YWwpKToocS5jb3B5KHRoaXMubGFzdENoYXIsdGUsMCxxLmxlbmd0aCks'@;
put 'dm9pZCh0aGlzLmxhc3ROZWVkLT1xLmxlbmd0aCkpfWZ1bmN0aW9uIHoocSx0ZSl7aWYoKHEubGVuZ3RoLXRlKSUyPT0wKXt2YXIgbmU9cS50b1N0cmluZygidXRmMTZsZSIsdGUpO2lmKG5lKXt2YXIgaWU9bmUuY2hhckNvZGVBdChuZS5sZW5ndGgtMSk7aWYoaWU+PTU1Mjk2JiZpZTw9NTYz'@;
put 'MTkpcmV0dXJuIHRoaXMubGFzdE5lZWQ9Mix0aGlzLmxhc3RUb3RhbD00LHRoaXMubGFzdENoYXJbMF09cVtxLmxlbmd0aC0yXSx0aGlzLmxhc3RDaGFyWzFdPXFbcS5sZW5ndGgtMV0sbmUuc2xpY2UoMCwtMSl9cmV0dXJuIG5lfXJldHVybiB0aGlzLmxhc3ROZWVkPTEsdGhpcy5sYXN0VG90'@;
put 'YWw9Mix0aGlzLmxhc3RDaGFyWzBdPXFbcS5sZW5ndGgtMV0scS50b1N0cmluZygidXRmMTZsZSIsdGUscS5sZW5ndGgtMSl9ZnVuY3Rpb24gaihxKXt2YXIgdGU9cSYmcS5sZW5ndGg/dGhpcy53cml0ZShxKToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD90ZSt0aGlzLmxhc3RDaGFyLnRvU3Ry'@;
put 'aW5nKCJ1dGYxNmxlIiwwLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQpOnRlfWZ1bmN0aW9uIFYocSx0ZSl7dmFyIG5lPShxLmxlbmd0aC10ZSklMztyZXR1cm4gMD09PW5lP3EudG9TdHJpbmcoImJhc2U2NCIsdGUpOih0aGlzLmxhc3ROZWVkPTMtbmUsdGhpcy5sYXN0VG90YWw9Mywx'@;
put 'PT09bmU/dGhpcy5sYXN0Q2hhclswXT1xW3EubGVuZ3RoLTFdOih0aGlzLmxhc3RDaGFyWzBdPXFbcS5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT1xW3EubGVuZ3RoLTFdKSxxLnRvU3RyaW5nKCJiYXNlNjQiLHRlLHEubGVuZ3RoLW5lKSl9ZnVuY3Rpb24gRyhxKXt2YXIgdGU9cSYmcS5s'@;
put 'ZW5ndGg/dGhpcy53cml0ZShxKToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD90ZSt0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKCJiYXNlNjQiLDAsMy10aGlzLmxhc3ROZWVkKTp0ZX1mdW5jdGlvbiBXKHEpe3JldHVybiBxLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcpfWZ1bmN0aW9uIFUocSl7cmV0'@;
put 'dXJuIHEmJnEubGVuZ3RoP3RoaXMud3JpdGUocSk6IiJ9Qi5TdHJpbmdEZWNvZGVyPUksSS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24ocSl7aWYoMD09PXEubGVuZ3RoKXJldHVybiIiO3ZhciB0ZSxuZTtpZih0aGlzLmxhc3ROZWVkKXtpZih2b2lkIDA9PT0odGU9dGhpcy5maWxsTGFzdChx'@;
put 'KSkpcmV0dXJuIiI7bmU9dGhpcy5sYXN0TmVlZCx0aGlzLmxhc3ROZWVkPTB9ZWxzZSBuZT0wO3JldHVybiBuZTxxLmxlbmd0aD90ZT90ZSt0aGlzLnRleHQocSxuZSk6dGhpcy50ZXh0KHEsbmUpOnRlfHwiIn0sSS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKHEpe3ZhciB0ZT1xJiZxLmxlbmd0'@;
put 'aD90aGlzLndyaXRlKHEpOiIiO3JldHVybiB0aGlzLmxhc3ROZWVkP3RlKyJcdWZmZmQiOnRlfSxJLnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uKHEsdGUpe3ZhciBuZT1mdW5jdGlvbihsZSxkZSx1ZSl7dmFyIGNlPWRlLmxlbmd0aC0xO2lmKGNlPHVlKXJldHVybiAwO3ZhciBZPVIoZGVbY2Vd'@;
put 'KTtyZXR1cm4gWT49MD8oWT4wJiYobGUubGFzdE5lZWQ9WS0xKSxZKTotLWNlPHVlfHwtMj09PVk/MDooWT1SKGRlW2NlXSkpPj0wPyhZPjAmJihsZS5sYXN0TmVlZD1ZLTIpLFkpOi0tY2U8dWV8fC0yPT09WT8wOihZPVIoZGVbY2VdKSk+PTA/KFk+MCYmKDI9PT1ZP1k9MDpsZS5sYXN0TmVl'@;
put 'ZD1ZLTMpLFkpOjB9KHRoaXMscSx0ZSk7aWYoIXRoaXMubGFzdE5lZWQpcmV0dXJuIHEudG9TdHJpbmcoInV0ZjgiLHRlKTt0aGlzLmxhc3RUb3RhbD1uZTt2YXIgaWU9cS5sZW5ndGgtKG5lLXRoaXMubGFzdE5lZWQpO3JldHVybiBxLmNvcHkodGhpcy5sYXN0Q2hhciwwLGllKSxxLnRvU3Ry'@;
put 'aW5nKCJ1dGY4Iix0ZSxpZSl9LEkucHJvdG90eXBlLmZpbGxMYXN0PWZ1bmN0aW9uKHEpe2lmKHRoaXMubGFzdE5lZWQ8PXEubGVuZ3RoKXJldHVybiBxLmNvcHkodGhpcy5sYXN0Q2hhcix0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLDAsdGhpcy5sYXN0TmVlZCksdGhpcy5sYXN0Q2hh'@;
put 'ci50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsdGhpcy5sYXN0VG90YWwpO3EuY29weSh0aGlzLmxhc3RDaGFyLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsMCxxLmxlbmd0aCksdGhpcy5sYXN0TmVlZC09cS5sZW5ndGh9fSw3ODU3OihILEIsTCk9PnsidXNlIHN0cmljdCI7Y29uc3Qg'@;
put 'Sz1MKDM2ODkpLEo9TCg4NTc1KS5RYyxJPUwoOTUzOSksUj1MKDc1MiksRT1MKDIyMjQpLnksej1MKDU3NjEpLm0saj1MKDg5NzEpLlUsVj1MKDQ1Nikse2Zyb21DYWxsYmFjazpHfT1MKDcwNDEpLFc9L15bXHgyMVx4MjMtXHgyQlx4MkQtXHgzQVx4M0MtXHg1Qlx4NUQtXHg3RV0rJC8sVT0v'@;
put 'W1x4MDAtXHgxRl0vLHE9WyJcbiIsIlxyIiwiXDAiXSx0ZT0vW1x4MjAtXHgzQVx4M0MtXHg3RV0rLyxuZT0vW1x4MDlceDIwLVx4MkZceDNCLVx4NDBceDVCLVx4NjBceDdCLVx4N0VdLyxpZT17amFuOjAsZmViOjEsbWFyOjIsYXByOjMsbWF5OjQsanVuOjUsanVsOjYsYXVnOjcsc2VwOjgs'@;
put 'b2N0Ojksbm92OjEwLGRlYzoxMX0sbGU9MjE0NzQ4MzY0N2UzLGRlPSdJbnZhbGlkIHNhbWVTaXRlQ29udGV4dCBvcHRpb24gZm9yIGdldENvb2tpZXMoKTsgZXhwZWN0ZWQgb25lIG9mICJzdHJpY3QiLCAibGF4Iiwgb3IgIm5vbmUiJztmdW5jdGlvbiB1ZShOZSl7Y29uc3QgTGU9U3RyaW5n'@;
put 'KE5lKS50b0xvd2VyQ2FzZSgpO3JldHVybiJub25lIj09PUxlfHwibGF4Ij09PUxlfHwic3RyaWN0Ij09PUxlP0xlOm51bGx9Y29uc3QgY2U9T2JqZWN0LmZyZWV6ZSh7U0lMRU5UOiJzaWxlbnQiLFNUUklDVDoic3RyaWN0IixESVNBQkxFRDoidW5zYWZlLWRpc2FibGVkIn0pO3ZhciBZPS8o'@;
put 'PzpeKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M30kKXwoPzpeKD86KD86W2EtZlxkXXsxLDR9Oil7N30oPzpbYS1mXGRdezEsNH18Oil8KD86W2EtZlxkXXsxLDR9Oil7Nn0oPzooPzoyNVsw'@;
put 'LTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKD86XC4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKXszfXw6W2EtZlxkXXsxLDR9fDopfCg/OlthLWZcZF17MSw0fTopezV9KD86Oig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1'@;
put 'WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9fCg/OjpbYS1mXGRdezEsNH0pezEsMn18Oil8KD86W2EtZlxkXXsxLDR9Oil7NH0oPzooPzo6W2EtZlxkXXsxLDR9KXswLDF9Oig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18Mlsw'@;
put 'LTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9fCg/OjpbYS1mXGRdezEsNH0pezEsM318Oil8KD86W2EtZlxkXXsxLDR9Oil7M30oPzooPzo6W2EtZlxkXXsxLDR9KXswLDJ9Oig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxk'@;
put 'XGR8WzEtOV1cZHxcZCkpezN9fCg/OjpbYS1mXGRdezEsNH0pezEsNH18Oil8KD86W2EtZlxkXXsxLDR9Oil7Mn0oPzooPzo6W2EtZlxkXXsxLDR9KXswLDN9Oig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1c'@;
put 'ZHxcZCkpezN9fCg/OjpbYS1mXGRdezEsNH0pezEsNX18Oil8KD86W2EtZlxkXXsxLDR9Oil7MX0oPzooPzo6W2EtZlxkXXsxLDR9KXswLDR9Oig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9'@;
put 'fCg/OjpbYS1mXGRdezEsNH0pezEsNn18Oil8KD86Oig/Oig/OjpbYS1mXGRdezEsNH0pezAsNX06KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M318KD86OlthLWZcZF17MSw0fSl7MSw3fXw6'@;
put 'KSkpJCkvO2Z1bmN0aW9uIGIoTmUsTGUsQmUsSGUpe2xldCBRZT0wO2Zvcig7UWU8TmUubGVuZ3RoOyl7Y29uc3QgbXQ9TmUuY2hhckNvZGVBdChRZSk7aWYobXQ8PTQ3fHxtdD49NTgpYnJlYWs7UWUrK31yZXR1cm4gUWU8TGV8fFFlPkJlP251bGw6SGV8fFFlPT1OZS5sZW5ndGg/cGFyc2VJ'@;
put 'bnQoTmUuc3Vic3RyKDAsUWUpLDEwKTpudWxsfWZ1bmN0aW9uIHgoTmUpe2NvbnN0IExlPU5lLnNwbGl0KCI6IiksQmU9WzAsMCwwXTtpZigzIT09TGUubGVuZ3RoKXJldHVybiBudWxsO2ZvcihsZXQgSGU9MDtIZTwzO0hlKyspe2NvbnN0IG10PWIoTGVbSGVdLDEsMiwyPT1IZSk7aWYobnVs'@;
put 'bD09PW10KXJldHVybiBudWxsO0JlW0hlXT1tdH1yZXR1cm4gQmV9ZnVuY3Rpb24gTihOZSl7TmU9U3RyaW5nKE5lKS5zdWJzdHIoMCwzKS50b0xvd2VyQ2FzZSgpO2NvbnN0IExlPWllW05lXTtyZXR1cm4gTGU+PTA/TGU6bnVsbH1mdW5jdGlvbiBGKE5lKXtpZighTmUpcmV0dXJuO2NvbnN0'@;
put 'IExlPU5lLnNwbGl0KG5lKTtpZighTGUpcmV0dXJuO2xldCBCZT1udWxsLEhlPW51bGwsUWU9bnVsbCxtdD1udWxsLEtlPW51bGwsd2U9bnVsbDtmb3IobGV0IEllPTA7SWU8TGUubGVuZ3RoO0llKyspe2NvbnN0IE9lPUxlW0llXS50cmltKCk7aWYoIU9lLmxlbmd0aCljb250aW51ZTtsZXQg'@;
put 'ZXQ7bnVsbD09PVFlJiYoZXQ9eChPZSksZXQpPyhCZT1ldFswXSxIZT1ldFsxXSxRZT1ldFsyXSk6bnVsbCE9PW10fHwoZXQ9YihPZSwxLDIsITApLG51bGw9PT1ldCk/bnVsbCE9PUtlfHwoZXQ9TihPZSksbnVsbD09PWV0KT9udWxsPT09d2UmJihldD1iKE9lLDIsNCwhMCksbnVsbCE9PWV0'@;
put 'JiYod2U9ZXQsd2U+PTcwJiZ3ZTw9OTk/d2UrPTE5MDA6d2U+PTAmJndlPD02OSYmKHdlKz0yZTMpKSk6S2U9ZXQ6bXQ9ZXR9cmV0dXJuIG51bGw9PT1tdHx8bnVsbD09PUtlfHxudWxsPT09d2V8fG51bGw9PT1RZXx8bXQ8MXx8bXQ+MzF8fHdlPDE2MDF8fEJlPjIzfHxIZT41OXx8UWU+NTk/'@;
put 'dm9pZCAwOm5ldyBEYXRlKERhdGUuVVRDKHdlLEtlLG10LEJlLEhlLFFlKSl9ZnVuY3Rpb24gZyhOZSl7cmV0dXJuIE5lLnRvVVRDU3RyaW5nKCl9ZnVuY3Rpb24gQyhOZSl7cmV0dXJuIG51bGw9PU5lP251bGw6KE5lPU5lLnRyaW0oKS5yZXBsYWNlKC9eXC4vLCIiKSxLJiYvW15cdTAwMDEt'@;
put 'XHUwMDdmXS8udGVzdChOZSkmJihOZT1LLnRvQVNDSUkoTmUpKSxOZS50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiBNKE5lLExlLEJlKXtpZihudWxsPT1OZXx8bnVsbD09TGUpcmV0dXJuIG51bGw7aWYoITEhPT1CZSYmKE5lPUMoTmUpLExlPUMoTGUpKSxOZT09TGUpcmV0dXJuITA7Y29uc3Qg'@;
put 'SGU9TmUuaW5kZXhPZihMZSk7cmV0dXJuIShIZTw9MHx8TmUubGVuZ3RoIT09TGUubGVuZ3RoK0hlfHwiLiIhPT1OZS5zdWJzdHIoSGUtMSwxKXx8WS50ZXN0KE5lKSl9ZnVuY3Rpb24geShOZSl7aWYoIU5lfHwiLyIhPT1OZS5zdWJzdHIoMCwxKSlyZXR1cm4iLyI7aWYoIi8iPT09TmUpcmV0'@;
put 'dXJuIE5lO2NvbnN0IExlPU5lLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuIDA9PT1MZT8iLyI6TmUuc2xpY2UoMCxMZSl9ZnVuY3Rpb24gUyhOZSxMZSl7TGUmJiJvYmplY3QiPT10eXBlb2YgTGV8fChMZT17fSk7Y29uc3QgQmU9KE5lPU5lLnRyaW0oKSkuaW5kZXhPZigiOyIpLEhlPWZ1bmN0'@;
put 'aW9uIHAoTmUsTGUpe2xldCBCZSxIZSxRZT0oTmU9ZnVuY3Rpb24oS2Upe2ZvcihsZXQgd2U9MDt3ZTxxLmxlbmd0aDt3ZSsrKXtjb25zdCBJZT1LZS5pbmRleE9mKHFbd2VdKTstMSE9PUllJiYoS2U9S2Uuc3Vic3RyKDAsSWUpKX1yZXR1cm4gS2V9KE5lKSkuaW5kZXhPZigiPSIpO2lmKExl'@;
put 'KTA9PT1RZSYmKFFlPShOZT1OZS5zdWJzdHIoMSkpLmluZGV4T2YoIj0iKSk7ZWxzZSBpZihRZTw9MClyZXR1cm47aWYoUWU8PTA/KEJlPSIiLEhlPU5lLnRyaW0oKSk6KEJlPU5lLnN1YnN0cigwLFFlKS50cmltKCksSGU9TmUuc3Vic3RyKFFlKzEpLnRyaW0oKSksVS50ZXN0KEJlKXx8VS50'@;
put 'ZXN0KEhlKSlyZXR1cm47Y29uc3QgbXQ9bmV3IFRlO3JldHVybiBtdC5rZXk9QmUsbXQudmFsdWU9SGUsbXR9KC0xPT09QmU/TmU6TmUuc3Vic3RyKDAsQmUpLCEhTGUubG9vc2UpO2lmKCFIZSlyZXR1cm47aWYoLTE9PT1CZSlyZXR1cm4gSGU7Y29uc3QgUWU9TmUuc2xpY2UoQmUrMSkudHJp'@;
put 'bSgpO2lmKDA9PT1RZS5sZW5ndGgpcmV0dXJuIEhlO2NvbnN0IG10PVFlLnNwbGl0KCI7Iik7Zm9yKDttdC5sZW5ndGg7KXtjb25zdCBLZT1tdC5zaGlmdCgpLnRyaW0oKTtpZigwPT09S2UubGVuZ3RoKWNvbnRpbnVlO2NvbnN0IHdlPUtlLmluZGV4T2YoIj0iKTtsZXQgSWUsT2U7c3dpdGNo'@;
put 'KC0xPT09d2U/KEllPUtlLE9lPW51bGwpOihJZT1LZS5zdWJzdHIoMCx3ZSksT2U9S2Uuc3Vic3RyKHdlKzEpKSxJZT1JZS50cmltKCkudG9Mb3dlckNhc2UoKSxPZSYmKE9lPU9lLnRyaW0oKSksSWUpe2Nhc2UiZXhwaXJlcyI6aWYoT2Upe2NvbnN0IGV0PUYoT2UpO2V0JiYoSGUuZXhwaXJl'@;
put 'cz1ldCl9YnJlYWs7Y2FzZSJtYXgtYWdlIjppZihPZSYmL14tP1swLTldKyQvLnRlc3QoT2UpKXtjb25zdCBldD1wYXJzZUludChPZSwxMCk7SGUuc2V0TWF4QWdlKGV0KX1icmVhaztjYXNlImRvbWFpbiI6aWYoT2Upe2NvbnN0IGV0PU9lLnRyaW0oKS5yZXBsYWNlKC9eXC4vLCIiKTtldCYm'@;
put 'KEhlLmRvbWFpbj1ldC50b0xvd2VyQ2FzZSgpKX1icmVhaztjYXNlInBhdGgiOkhlLnBhdGg9T2UmJiIvIj09PU9lWzBdP09lOm51bGw7YnJlYWs7Y2FzZSJzZWN1cmUiOkhlLnNlY3VyZT0hMDticmVhaztjYXNlImh0dHBvbmx5IjpIZS5odHRwT25seT0hMDticmVhaztjYXNlInNhbWVzaXRl'@;
put 'Ijpzd2l0Y2goT2U/T2UudG9Mb3dlckNhc2UoKToiIil7Y2FzZSJzdHJpY3QiOkhlLnNhbWVTaXRlPSJzdHJpY3QiO2JyZWFrO2Nhc2UibGF4IjpIZS5zYW1lU2l0ZT0ibGF4In1icmVhaztkZWZhdWx0OkhlLmV4dGVuc2lvbnM9SGUuZXh0ZW5zaW9uc3x8W10sSGUuZXh0ZW5zaW9ucy5wdXNo'@;
put 'KEtlKX19cmV0dXJuIEhlfWZ1bmN0aW9uIFEoTmUpe2xldCBMZTt0cnl7TGU9SlNPTi5wYXJzZShOZSl9Y2F0Y2goQmUpe3JldHVybiBCZX1yZXR1cm4gTGV9ZnVuY3Rpb24gcmUoTmUpe2lmKCFOZSlyZXR1cm4gbnVsbDtsZXQgTGU7aWYoInN0cmluZyI9PXR5cGVvZiBOZSl7aWYoTGU9UShO'@;
put 'ZSksTGUgaW5zdGFuY2VvZiBFcnJvcilyZXR1cm4gbnVsbH1lbHNlIExlPU5lO2NvbnN0IEJlPW5ldyBUZTtmb3IobGV0IEhlPTA7SGU8VGUuc2VyaWFsaXphYmxlUHJvcGVydGllcy5sZW5ndGg7SGUrKyl7Y29uc3QgUWU9VGUuc2VyaWFsaXphYmxlUHJvcGVydGllc1tIZV07dm9pZCAwIT09'@;
put 'TGVbUWVdJiZMZVtRZV0hPT1rZVtRZV0mJihCZVtRZV09ImV4cGlyZXMiPT09UWV8fCJjcmVhdGlvbiI9PT1RZXx8Imxhc3RBY2Nlc3NlZCI9PT1RZT9udWxsPT09TGVbUWVdP251bGw6IkluZmluaXR5Ij09TGVbUWVdPyJJbmZpbml0eSI6bmV3IERhdGUoTGVbUWVdKTpMZVtRZV0pfXJldHVy'@;
put 'biBCZX1mdW5jdGlvbiBmZShOZSxMZSl7bGV0IEJlPTA7cmV0dXJuIEJlPShMZS5wYXRoP0xlLnBhdGgubGVuZ3RoOjApLShOZS5wYXRoP05lLnBhdGgubGVuZ3RoOjApLDAhPT1CZXx8KEJlPShOZS5jcmVhdGlvbj9OZS5jcmVhdGlvbi5nZXRUaW1lKCk6bGUpLShMZS5jcmVhdGlvbj9MZS5j'@;
put 'cmVhdGlvbi5nZXRUaW1lKCk6bGUpLDAhPT1CZXx8KEJlPU5lLmNyZWF0aW9uSW5kZXgtTGUuY3JlYXRpb25JbmRleCkpLEJlfWZ1bmN0aW9uIG1lKE5lKXtpZihOZSBpbnN0YW5jZW9mIE9iamVjdClyZXR1cm4gTmU7dHJ5e05lPWRlY29kZVVSSShOZSl9Y2F0Y2h7fXJldHVybiBKKE5lKX1j'@;
put 'b25zdCBrZT17a2V5OiIiLHZhbHVlOiIiLGV4cGlyZXM6IkluZmluaXR5IixtYXhBZ2U6bnVsbCxkb21haW46bnVsbCxwYXRoOm51bGwsc2VjdXJlOiExLGh0dHBPbmx5OiExLGV4dGVuc2lvbnM6bnVsbCxob3N0T25seTpudWxsLHBhdGhJc0RlZmF1bHQ6bnVsbCxjcmVhdGlvbjpudWxsLGxh'@;
put 'c3RBY2Nlc3NlZDpudWxsLHNhbWVTaXRlOiJub25lIn07Y2xhc3MgVGV7Y29uc3RydWN0b3IoTGU9e30pe0kuaW5zcGVjdC5jdXN0b20mJih0aGlzW0kuaW5zcGVjdC5jdXN0b21dPXRoaXMuaW5zcGVjdCksT2JqZWN0LmFzc2lnbih0aGlzLGtlLExlKSx0aGlzLmNyZWF0aW9uPXRoaXMuY3Jl'@;
put 'YXRpb258fG5ldyBEYXRlLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJjcmVhdGlvbkluZGV4Iix7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsdmFsdWU6KytUZS5jb29raWVzQ3JlYXRlZH0pfWluc3BlY3QoKXtjb25zdCBMZT1EYXRlLm5vdygpLEJlPW51'@;
put 'bGwhPXRoaXMuaG9zdE9ubHk/dGhpcy5ob3N0T25seToiPyIsSGU9dGhpcy5jcmVhdGlvbj9MZS10aGlzLmNyZWF0aW9uLmdldFRpbWUoKSsibXMiOiI/IixRZT10aGlzLmxhc3RBY2Nlc3NlZD9MZS10aGlzLmxhc3RBY2Nlc3NlZC5nZXRUaW1lKCkrIm1zIjoiPyI7cmV0dXJuYENvb2tpZT0i'@;
put 'JHt0aGlzLnRvU3RyaW5nKCl9OyBob3N0T25seT0ke0JlfTsgYUFnZT0ke1FlfTsgY0FnZT0ke0hlfSJgfXRvSlNPTigpe2NvbnN0IExlPXt9O2Zvcihjb25zdCBCZSBvZiBUZS5zZXJpYWxpemFibGVQcm9wZXJ0aWVzKXRoaXNbQmVdIT09a2VbQmVdJiYoImV4cGlyZXMiPT09QmV8fCJjcmVh'@;
put 'dGlvbiI9PT1CZXx8Imxhc3RBY2Nlc3NlZCI9PT1CZT9MZVtCZV09bnVsbD09PXRoaXNbQmVdP251bGw6IkluZmluaXR5Ij09dGhpc1tCZV0/IkluZmluaXR5Ijp0aGlzW0JlXS50b0lTT1N0cmluZygpOiJtYXhBZ2UiPT09QmU/bnVsbCE9PXRoaXNbQmVdJiYoTGVbQmVdPXRoaXNbQmVdPT0x'@;
put 'LzB8fHRoaXNbQmVdPT0tMS8wP3RoaXNbQmVdLnRvU3RyaW5nKCk6dGhpc1tCZV0pOnRoaXNbQmVdIT09a2VbQmVdJiYoTGVbQmVdPXRoaXNbQmVdKSk7cmV0dXJuIExlfWNsb25lKCl7cmV0dXJuIHJlKHRoaXMudG9KU09OKCkpfXZhbGlkYXRlKCl7aWYoIVcudGVzdCh0aGlzLnZhbHVlKXx8'@;
put 'ISh0aGlzLmV4cGlyZXM9PTEvMHx8dGhpcy5leHBpcmVzIGluc3RhbmNlb2YgRGF0ZXx8Rih0aGlzLmV4cGlyZXMpKXx8bnVsbCE9dGhpcy5tYXhBZ2UmJnRoaXMubWF4QWdlPD0wfHxudWxsIT10aGlzLnBhdGgmJiF0ZS50ZXN0KHRoaXMucGF0aCkpcmV0dXJuITE7Y29uc3QgTGU9dGhpcy5j'@;
put 'ZG9tYWluKCk7cmV0dXJuIShMZSYmKExlLm1hdGNoKC9cLiQvKXx8bnVsbD09Ui5nZXRQdWJsaWNTdWZmaXgoTGUpKSl9c2V0RXhwaXJlcyhMZSl7dGhpcy5leHBpcmVzPUxlIGluc3RhbmNlb2YgRGF0ZT9MZTpGKExlKXx8IkluZmluaXR5In1zZXRNYXhBZ2UoTGUpe3RoaXMubWF4QWdlPUxl'@;
put 'PT09MS8wfHxMZT09PS0xLzA/TGUudG9TdHJpbmcoKTpMZX1jb29raWVTdHJpbmcoKXtsZXQgTGU9dGhpcy52YWx1ZTtyZXR1cm4gbnVsbD09TGUmJihMZT0iIiksIiI9PT10aGlzLmtleT9MZTpgJHt0aGlzLmtleX09JHtMZX1gfXRvU3RyaW5nKCl7bGV0IExlPXRoaXMuY29va2llU3RyaW5n'@;
put 'KCk7aWYodGhpcy5leHBpcmVzIT0xLzAmJih0aGlzLmV4cGlyZXMgaW5zdGFuY2VvZiBEYXRlP0xlKz1gOyBFeHBpcmVzPSR7Zyh0aGlzLmV4cGlyZXMpfWA6TGUrPWA7IEV4cGlyZXM9JHt0aGlzLmV4cGlyZXN9YCksbnVsbCE9dGhpcy5tYXhBZ2UmJnRoaXMubWF4QWdlIT0xLzAmJihMZSs9'@;
put 'YDsgTWF4LUFnZT0ke3RoaXMubWF4QWdlfWApLHRoaXMuZG9tYWluJiYhdGhpcy5ob3N0T25seSYmKExlKz1gOyBEb21haW49JHt0aGlzLmRvbWFpbn1gKSx0aGlzLnBhdGgmJihMZSs9YDsgUGF0aD0ke3RoaXMucGF0aH1gKSx0aGlzLnNlY3VyZSYmKExlKz0iOyBTZWN1cmUiKSx0aGlzLmh0'@;
put 'dHBPbmx5JiYoTGUrPSI7IEh0dHBPbmx5IiksdGhpcy5zYW1lU2l0ZSYmIm5vbmUiIT09dGhpcy5zYW1lU2l0ZSl7Y29uc3QgQmU9VGUuc2FtZVNpdGVDYW5vbmljYWxbdGhpcy5zYW1lU2l0ZS50b0xvd2VyQ2FzZSgpXTtMZSs9YDsgU2FtZVNpdGU9JHtCZXx8dGhpcy5zYW1lU2l0ZX1gfXJl'@;
put 'dHVybiB0aGlzLmV4dGVuc2lvbnMmJnRoaXMuZXh0ZW5zaW9ucy5mb3JFYWNoKEJlPT57TGUrPWA7ICR7QmV9YH0pLExlfVRUTChMZSl7aWYobnVsbCE9dGhpcy5tYXhBZ2UpcmV0dXJuIHRoaXMubWF4QWdlPD0wPzA6MWUzKnRoaXMubWF4QWdlO2xldCBCZT10aGlzLmV4cGlyZXM7cmV0dXJu'@;
put 'IEJlIT0xLzA/KEJlIGluc3RhbmNlb2YgRGF0ZXx8KEJlPUYoQmUpfHwxLzApLEJlPT0xLzA/MS8wOkJlLmdldFRpbWUoKS0oTGV8fERhdGUubm93KCkpKToxLzB9ZXhwaXJ5VGltZShMZSl7aWYobnVsbCE9dGhpcy5tYXhBZ2Upe2NvbnN0IEhlPXRoaXMubWF4QWdlPD0wPy0xLzA6MWUzKnRo'@;
put 'aXMubWF4QWdlO3JldHVybihMZXx8dGhpcy5jcmVhdGlvbnx8bmV3IERhdGUpLmdldFRpbWUoKStIZX1yZXR1cm4gdGhpcy5leHBpcmVzPT0xLzA/MS8wOnRoaXMuZXhwaXJlcy5nZXRUaW1lKCl9ZXhwaXJ5RGF0ZShMZSl7Y29uc3QgQmU9dGhpcy5leHBpcnlUaW1lKExlKTtyZXR1cm4gQmU9'@;
put 'PTEvMD9uZXcgRGF0ZShsZSk6QmU9PS0xLzA/bmV3IERhdGUoMCk6bmV3IERhdGUoQmUpfWlzUGVyc2lzdGVudCgpe3JldHVybiBudWxsIT10aGlzLm1heEFnZXx8dGhpcy5leHBpcmVzIT0xLzB9Y2Fub25pY2FsaXplZERvbWFpbigpe3JldHVybiBudWxsPT10aGlzLmRvbWFpbj9udWxsOkMo'@;
put 'dGhpcy5kb21haW4pfWNkb21haW4oKXtyZXR1cm4gdGhpcy5jYW5vbmljYWxpemVkRG9tYWluKCl9fVRlLmNvb2tpZXNDcmVhdGVkPTAsVGUucGFyc2U9UyxUZS5mcm9tSlNPTj1yZSxUZS5zZXJpYWxpemFibGVQcm9wZXJ0aWVzPU9iamVjdC5rZXlzKGtlKSxUZS5zYW1lU2l0ZUxldmVsPXtz'@;
put 'dHJpY3Q6MyxsYXg6Mixub25lOjF9LFRlLnNhbWVTaXRlQ2Fub25pY2FsPXtzdHJpY3Q6IlN0cmljdCIsbGF4OiJMYXgifTtjbGFzcyBQZXtjb25zdHJ1Y3RvcihMZSxCZT17cmVqZWN0UHVibGljU3VmZml4ZXM6ITB9KXsiYm9vbGVhbiI9PXR5cGVvZiBCZSYmKEJlPXtyZWplY3RQdWJsaWNT'@;
put 'dWZmaXhlczpCZX0pLHRoaXMucmVqZWN0UHVibGljU3VmZml4ZXM9QmUucmVqZWN0UHVibGljU3VmZml4ZXMsdGhpcy5lbmFibGVMb29zZU1vZGU9ISFCZS5sb29zZU1vZGUsdGhpcy5hbGxvd1NwZWNpYWxVc2VEb21haW49ISFCZS5hbGxvd1NwZWNpYWxVc2VEb21haW4sdGhpcy5zdG9yZT1M'@;
put 'ZXx8bmV3IHosdGhpcy5wcmVmaXhTZWN1cml0eT1mdW5jdGlvbihIZSl7aWYobnVsbCE9SGUpe2NvbnN0IFFlPUhlLnRvTG93ZXJDYXNlKCk7c3dpdGNoKFFlKXtjYXNlIGNlLlNUUklDVDpjYXNlIGNlLlNJTEVOVDpjYXNlIGNlLkRJU0FCTEVEOnJldHVybiBRZX19cmV0dXJuIGNlLlNJTEVO'@;
put 'VH0oQmUucHJlZml4U2VjdXJpdHkpLHRoaXMuX2Nsb25lU3luYz1GZSgiY2xvbmUiKSx0aGlzLl9pbXBvcnRDb29raWVzU3luYz1GZSgiX2ltcG9ydENvb2tpZXMiKSx0aGlzLmdldENvb2tpZXNTeW5jPUZlKCJnZXRDb29raWVzIiksdGhpcy5nZXRDb29raWVTdHJpbmdTeW5jPUZlKCJnZXRD'@;
put 'b29raWVTdHJpbmciKSx0aGlzLmdldFNldENvb2tpZVN0cmluZ3NTeW5jPUZlKCJnZXRTZXRDb29raWVTdHJpbmdzIiksdGhpcy5yZW1vdmVBbGxDb29raWVzU3luYz1GZSgicmVtb3ZlQWxsQ29va2llcyIpLHRoaXMuc2V0Q29va2llU3luYz1GZSgic2V0Q29va2llIiksdGhpcy5zZXJpYWxp'@;
put 'emVTeW5jPUZlKCJzZXJpYWxpemUiKX1zZXRDb29raWUoTGUsQmUsSGUsUWUpe2xldCBtdDtjb25zdCBLZT1tZShCZSk7ImZ1bmN0aW9uIj09dHlwZW9mIEhlJiYoUWU9SGUsSGU9e30pO2NvbnN0IHdlPUMoS2UuaG9zdG5hbWUpLEllPUhlLmxvb3NlfHx0aGlzLmVuYWJsZUxvb3NlTW9kZTts'@;
put 'ZXQgT2U9bnVsbDtpZihIZS5zYW1lU2l0ZUNvbnRleHQmJihPZT11ZShIZS5zYW1lU2l0ZUNvbnRleHQpLCFPZSkpcmV0dXJuIFFlKG5ldyBFcnJvcihkZSkpO2lmKCJzdHJpbmciPT10eXBlb2YgTGV8fExlIGluc3RhbmNlb2YgU3RyaW5nKXtpZighKExlPVRlLnBhcnNlKExlLHtsb29zZTpJ'@;
put 'ZX0pKSlyZXR1cm4gbXQ9bmV3IEVycm9yKCJDb29raWUgZmFpbGVkIHRvIHBhcnNlIiksUWUoSGUuaWdub3JlRXJyb3I/bnVsbDptdCl9ZWxzZSBpZighKExlIGluc3RhbmNlb2YgVGUpKXJldHVybiBtdD1uZXcgRXJyb3IoIkZpcnN0IGFyZ3VtZW50IHRvIHNldENvb2tpZSBtdXN0IGJlIGEg'@;
put 'Q29va2llIG9iamVjdCBvciBzdHJpbmciKSxRZShIZS5pZ25vcmVFcnJvcj9udWxsOm10KTtjb25zdCBldD1IZS5ub3d8fG5ldyBEYXRlO2lmKHRoaXMucmVqZWN0UHVibGljU3VmZml4ZXMmJkxlLmRvbWFpbiYmbnVsbD09Ui5nZXRQdWJsaWNTdWZmaXgoTGUuY2RvbWFpbigpKSlyZXR1cm4g'@;
put 'bXQ9bmV3IEVycm9yKCJDb29raWUgaGFzIGRvbWFpbiBzZXQgdG8gYSBwdWJsaWMgc3VmZml4IiksUWUoSGUuaWdub3JlRXJyb3I/bnVsbDptdCk7aWYoTGUuZG9tYWluKXtpZighTSh3ZSxMZS5jZG9tYWluKCksITEpKXJldHVybiBtdD1uZXcgRXJyb3IoYENvb2tpZSBub3QgaW4gdGhpcyBo'@;
put 'b3N0J3MgZG9tYWluLiBDb29raWU6JHtMZS5jZG9tYWluKCl9IFJlcXVlc3Q6JHt3ZX1gKSxRZShIZS5pZ25vcmVFcnJvcj9udWxsOm10KTtudWxsPT1MZS5ob3N0T25seSYmKExlLmhvc3RPbmx5PSExKX1lbHNlIExlLmhvc3RPbmx5PSEwLExlLmRvbWFpbj13ZTtpZihMZS5wYXRoJiYiLyI9'@;
put 'PT1MZS5wYXRoWzBdfHwoTGUucGF0aD15KEtlLnBhdGhuYW1lKSxMZS5wYXRoSXNEZWZhdWx0PSEwKSwhMT09PUhlLmh0dHAmJkxlLmh0dHBPbmx5KXJldHVybiBtdD1uZXcgRXJyb3IoIkNvb2tpZSBpcyBIdHRwT25seSBhbmQgdGhpcyBpc24ndCBhbiBIVFRQIEFQSSIpLFFlKEhlLmlnbm9y'@;
put 'ZUVycm9yP251bGw6bXQpO2lmKCJub25lIiE9PUxlLnNhbWVTaXRlJiZPZSYmIm5vbmUiPT09T2UpcmV0dXJuIG10PW5ldyBFcnJvcigiQ29va2llIGlzIFNhbWVTaXRlIGJ1dCB0aGlzIGlzIGEgY3Jvc3Mtb3JpZ2luIHJlcXVlc3QiKSxRZShIZS5pZ25vcmVFcnJvcj9udWxsOm10KTtjb25z'@;
put 'dCBudD10aGlzLnByZWZpeFNlY3VyaXR5PT09Y2UuU0lMRU5UO2lmKHRoaXMucHJlZml4U2VjdXJpdHkhPT1jZS5ESVNBQkxFRCl7bGV0IGh0LEVlPSExO2lmKCEoRGU9TGUpLmtleS5zdGFydHNXaXRoKCJfX1NlY3VyZS0iKXx8RGUuc2VjdXJlP2Z1bmN0aW9uKERlKXtyZXR1cm4hRGUua2V5'@;
put 'LnN0YXJ0c1dpdGgoIl9fSG9zdC0iKXx8RGUuc2VjdXJlJiZEZS5ob3N0T25seSYmbnVsbCE9RGUucGF0aCYmIi8iPT09RGUucGF0aH0oTGUpfHwoRWU9ITAsaHQ9IkNvb2tpZSBoYXMgX19Ib3N0IHByZWZpeCBidXQgZWl0aGVyIFNlY3VyZSBvciBIb3N0T25seSBhdHRyaWJ1dGUgaXMgbm90'@;
put 'IHNldCBvciBQYXRoIGlzIG5vdCAnLyciKTooRWU9ITAsaHQ9IkNvb2tpZSBoYXMgX19TZWN1cmUgcHJlZml4IGJ1dCBTZWN1cmUgYXR0cmlidXRlIGlzIG5vdCBzZXQiKSxFZSlyZXR1cm4gUWUoSGUuaWdub3JlRXJyb3J8fG50P251bGw6bmV3IEVycm9yKGh0KSl9dmFyIERlO2NvbnN0IHFl'@;
put 'PXRoaXMuc3RvcmU7cWUudXBkYXRlQ29va2llfHwocWUudXBkYXRlQ29va2llPWZ1bmN0aW9uKGh0LEVlLERlKXt0aGlzLnB1dENvb2tpZShFZSxEZSl9KSxxZS5maW5kQ29va2llKExlLmRvbWFpbixMZS5wYXRoLExlLmtleSxmdW5jdGlvbihodCxFZSl7aWYoaHQpcmV0dXJuIFFlKGh0KTtj'@;
put 'b25zdCBEZT1mdW5jdGlvbigkZSl7aWYoJGUpcmV0dXJuIFFlKCRlKTtRZShudWxsLExlKX07aWYoRWUpe2lmKCExPT09SGUuaHR0cCYmRWUuaHR0cE9ubHkpcmV0dXJuIGh0PW5ldyBFcnJvcigib2xkIENvb2tpZSBpcyBIdHRwT25seSBhbmQgdGhpcyBpc24ndCBhbiBIVFRQIEFQSSIpLFFl'@;
put 'KEhlLmlnbm9yZUVycm9yP251bGw6aHQpO0xlLmNyZWF0aW9uPUVlLmNyZWF0aW9uLExlLmNyZWF0aW9uSW5kZXg9RWUuY3JlYXRpb25JbmRleCxMZS5sYXN0QWNjZXNzZWQ9ZXQscWUudXBkYXRlQ29va2llKEVlLExlLERlKX1lbHNlIExlLmNyZWF0aW9uPUxlLmxhc3RBY2Nlc3NlZD1ldCxx'@;
put 'ZS5wdXRDb29raWUoTGUsRGUpfSl9Z2V0Q29va2llcyhMZSxCZSxIZSl7Y29uc3QgUWU9bWUoTGUpOyJmdW5jdGlvbiI9PXR5cGVvZiBCZSYmKEhlPUJlLEJlPXt9KTtjb25zdCBtdD1DKFFlLmhvc3RuYW1lKSxLZT1RZS5wYXRobmFtZXx8Ii8iO2xldCB3ZT1CZS5zZWN1cmU7bnVsbCE9d2V8'@;
put 'fCFRZS5wcm90b2NvbHx8Imh0dHBzOiIhPVFlLnByb3RvY29sJiYid3NzOiIhPVFlLnByb3RvY29sfHwod2U9ITApO2xldCBJZT0wO2lmKEJlLnNhbWVTaXRlQ29udGV4dCl7Y29uc3QgRGU9dWUoQmUuc2FtZVNpdGVDb250ZXh0KTtpZihJZT1UZS5zYW1lU2l0ZUxldmVsW0RlXSwhSWUpcmV0'@;
put 'dXJuIEhlKG5ldyBFcnJvcihkZSkpfWxldCBPZT1CZS5odHRwO251bGw9PU9lJiYoT2U9ITApO2NvbnN0IGV0PUJlLm5vd3x8RGF0ZS5ub3coKSxudD0hMSE9PUJlLmV4cGlyZSxxZT0hIUJlLmFsbFBhdGhzLGh0PXRoaXMuc3RvcmU7ZnVuY3Rpb24gRWUoRGUpe2lmKERlLmhvc3RPbmx5KXtp'@;
put 'ZihEZS5kb21haW4hPW10KXJldHVybiExfWVsc2UgaWYoIU0obXQsRGUuZG9tYWluLCExKSlyZXR1cm4hMTtyZXR1cm4hKCFxZSYmIWooS2UsRGUucGF0aCl8fERlLnNlY3VyZSYmIXdlfHxEZS5odHRwT25seSYmIU9lfHxJZSYmVGUuc2FtZVNpdGVMZXZlbFtEZS5zYW1lU2l0ZXx8Im5vbmUi'@;
put 'XT5JZXx8bnQmJkRlLmV4cGlyeVRpbWUoKTw9ZXQmJihodC5yZW1vdmVDb29raWUoRGUuZG9tYWluLERlLnBhdGgsRGUua2V5LCgpPT57fSksMSkpfWh0LmZpbmRDb29raWVzKG10LHFlP251bGw6S2UsdGhpcy5hbGxvd1NwZWNpYWxVc2VEb21haW4sKERlLCRlKT0+e2lmKERlKXJldHVybiBI'@;
put 'ZShEZSk7JGU9JGUuZmlsdGVyKEVlKSwhMSE9PUJlLnNvcnQmJigkZT0kZS5zb3J0KGZlKSk7Y29uc3QgYXQ9bmV3IERhdGU7Zm9yKGNvbnN0IGN0IG9mICRlKWN0Lmxhc3RBY2Nlc3NlZD1hdDtIZShudWxsLCRlKX0pfWdldENvb2tpZVN0cmluZyguLi5MZSl7Y29uc3QgQmU9TGUucG9wKCk7'@;
put 'TGUucHVzaChmdW5jdGlvbihIZSxRZSl7SGU/QmUoSGUpOkJlKG51bGwsUWUuc29ydChmZSkubWFwKG10PT5tdC5jb29raWVTdHJpbmcoKSkuam9pbigiOyAiKSl9KSx0aGlzLmdldENvb2tpZXMuYXBwbHkodGhpcyxMZSl9Z2V0U2V0Q29va2llU3RyaW5ncyguLi5MZSl7Y29uc3QgQmU9TGUu'@;
put 'cG9wKCk7TGUucHVzaChmdW5jdGlvbihIZSxRZSl7SGU/QmUoSGUpOkJlKG51bGwsUWUubWFwKG10PT5tdC50b1N0cmluZygpKSl9KSx0aGlzLmdldENvb2tpZXMuYXBwbHkodGhpcyxMZSl9c2VyaWFsaXplKExlKXtsZXQgQmU9dGhpcy5zdG9yZS5jb25zdHJ1Y3Rvci5uYW1lOyJPYmplY3Qi'@;
put 'PT09QmUmJihCZT1udWxsKTtjb25zdCBIZT17dmVyc2lvbjpgdG91Z2gtY29va2llQCR7Vn1gLHN0b3JlVHlwZTpCZSxyZWplY3RQdWJsaWNTdWZmaXhlczohIXRoaXMucmVqZWN0UHVibGljU3VmZml4ZXMsY29va2llczpbXX07aWYoIXRoaXMuc3RvcmUuZ2V0QWxsQ29va2llc3x8ImZ1bmN0'@;
put 'aW9uIiE9dHlwZW9mIHRoaXMuc3RvcmUuZ2V0QWxsQ29va2llcylyZXR1cm4gTGUobmV3IEVycm9yKCJzdG9yZSBkb2VzIG5vdCBzdXBwb3J0IGdldEFsbENvb2tpZXMgYW5kIGNhbm5vdCBiZSBzZXJpYWxpemVkIikpO3RoaXMuc3RvcmUuZ2V0QWxsQ29va2llcygoUWUsbXQpPT5RZT9MZShR'@;
put 'ZSk6KEhlLmNvb2tpZXM9bXQubWFwKEtlPT4oZGVsZXRlKEtlPUtlIGluc3RhbmNlb2YgVGU/S2UudG9KU09OKCk6S2UpLmNyZWF0aW9uSW5kZXgsS2UpKSxMZShudWxsLEhlKSkpfXRvSlNPTigpe3JldHVybiB0aGlzLnNlcmlhbGl6ZVN5bmMoKX1faW1wb3J0Q29va2llcyhMZSxCZSl7bGV0'@;
put 'IEhlPUxlLmNvb2tpZXM7aWYoIUhlfHwhQXJyYXkuaXNBcnJheShIZSkpcmV0dXJuIEJlKG5ldyBFcnJvcigic2VyaWFsaXplZCBqYXIgaGFzIG5vIGNvb2tpZXMgYXJyYXkiKSk7SGU9SGUuc2xpY2UoKTtjb25zdCBRZT1tdD0+e2lmKG10KXJldHVybiBCZShtdCk7aWYoIUhlLmxlbmd0aCly'@;
put 'ZXR1cm4gQmUobXQsdGhpcyk7bGV0IEtlO3RyeXtLZT1yZShIZS5zaGlmdCgpKX1jYXRjaCh3ZSl7cmV0dXJuIEJlKHdlKX1pZihudWxsPT09S2UpcmV0dXJuIFFlKG51bGwpO3RoaXMuc3RvcmUucHV0Q29va2llKEtlLFFlKX07UWUoKX1jbG9uZShMZSxCZSl7MT09PWFyZ3VtZW50cy5sZW5n'@;
put 'dGgmJihCZT1MZSxMZT1udWxsKSx0aGlzLnNlcmlhbGl6ZSgoSGUsUWUpPT57aWYoSGUpcmV0dXJuIEJlKEhlKTtQZS5kZXNlcmlhbGl6ZShRZSxMZSxCZSl9KX1jbG9uZVN5bmMoTGUpe2lmKDA9PT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiB0aGlzLl9jbG9uZVN5bmMoKTtpZighTGUuc3lu'@;
put 'Y2hyb25vdXMpdGhyb3cgbmV3IEVycm9yKCJDb29raWVKYXIgY2xvbmUgZGVzdGluYXRpb24gc3RvcmUgaXMgbm90IHN5bmNocm9ub3VzOyB1c2UgYXN5bmMgQVBJIGluc3RlYWQuIik7cmV0dXJuIHRoaXMuX2Nsb25lU3luYyhMZSl9cmVtb3ZlQWxsQ29va2llcyhMZSl7Y29uc3QgQmU9dGhp'@;
put 'cy5zdG9yZTtpZigiZnVuY3Rpb24iPT10eXBlb2YgQmUucmVtb3ZlQWxsQ29va2llcyYmQmUucmVtb3ZlQWxsQ29va2llcyE9PUUucHJvdG90eXBlLnJlbW92ZUFsbENvb2tpZXMpcmV0dXJuIEJlLnJlbW92ZUFsbENvb2tpZXMoTGUpO0JlLmdldEFsbENvb2tpZXMoKEhlLFFlKT0+e2lmKEhl'@;
put 'KXJldHVybiBMZShIZSk7aWYoMD09PVFlLmxlbmd0aClyZXR1cm4gTGUobnVsbCk7bGV0IG10PTA7Y29uc3QgS2U9W107ZnVuY3Rpb24gd2UoSWUpe2lmKEllJiZLZS5wdXNoKEllKSxtdCsrLG10PT09UWUubGVuZ3RoKXJldHVybiBMZShLZS5sZW5ndGg/S2VbMF06bnVsbCl9UWUuZm9yRWFj'@;
put 'aChJZT0+e0JlLnJlbW92ZUNvb2tpZShJZS5kb21haW4sSWUucGF0aCxJZS5rZXksd2UpfSl9KX1zdGF0aWMgZGVzZXJpYWxpemUoTGUsQmUsSGUpe2xldCBRZTtpZigzIT09YXJndW1lbnRzLmxlbmd0aCYmKEhlPUJlLEJlPW51bGwpLCJzdHJpbmciPT10eXBlb2YgTGUpe2lmKFFlPVEoTGUp'@;
put 'LFFlIGluc3RhbmNlb2YgRXJyb3IpcmV0dXJuIEhlKFFlKX1lbHNlIFFlPUxlO2NvbnN0IG10PW5ldyBQZShCZSxRZS5yZWplY3RQdWJsaWNTdWZmaXhlcyk7bXQuX2ltcG9ydENvb2tpZXMoUWUsS2U9PntpZihLZSlyZXR1cm4gSGUoS2UpO0hlKG51bGwsbXQpfSl9c3RhdGljIGRlc2VyaWFs'@;
put 'aXplU3luYyhMZSxCZSl7Y29uc3QgSGU9InN0cmluZyI9PXR5cGVvZiBMZT9KU09OLnBhcnNlKExlKTpMZSxRZT1uZXcgUGUoQmUsSGUucmVqZWN0UHVibGljU3VmZml4ZXMpO2lmKCFRZS5zdG9yZS5zeW5jaHJvbm91cyl0aHJvdyBuZXcgRXJyb3IoIkNvb2tpZUphciBzdG9yZSBpcyBub3Qg'@;
put 'c3luY2hyb25vdXM7IHVzZSBhc3luYyBBUEkgaW5zdGVhZC4iKTtyZXR1cm4gUWUuX2ltcG9ydENvb2tpZXNTeW5jKEhlKSxRZX19ZnVuY3Rpb24gRmUoTmUpe3JldHVybiBmdW5jdGlvbiguLi5MZSl7aWYoIXRoaXMuc3RvcmUuc3luY2hyb25vdXMpdGhyb3cgbmV3IEVycm9yKCJDb29raWVK'@;
put 'YXIgc3RvcmUgaXMgbm90IHN5bmNocm9ub3VzOyB1c2UgYXN5bmMgQVBJIGluc3RlYWQuIik7bGV0IEJlLEhlO2lmKHRoaXNbTmVdKC4uLkxlLChRZSxtdCk9PntCZT1RZSxIZT1tdH0pLEJlKXRocm93IEJlO3JldHVybiBIZX19UGUuZnJvbUpTT049UGUuZGVzZXJpYWxpemVTeW5jLFsiX2lt'@;
put 'cG9ydENvb2tpZXMiLCJjbG9uZSIsImdldENvb2tpZXMiLCJnZXRDb29raWVTdHJpbmciLCJnZXRTZXRDb29raWVTdHJpbmdzIiwicmVtb3ZlQWxsQ29va2llcyIsInNlcmlhbGl6ZSIsInNldENvb2tpZSJdLmZvckVhY2goTmU9PntQZS5wcm90b3R5cGVbTmVdPUcoUGUucHJvdG90eXBlW05l'@;
put 'XSl9KSxQZS5kZXNlcmlhbGl6ZT1HKFBlLmRlc2VyaWFsaXplKSxCLnZlcnNpb249VixCLkNvb2tpZUphcj1QZSxCLkNvb2tpZT1UZSxCLlN0b3JlPUUsQi5NZW1vcnlDb29raWVTdG9yZT16LEIucGFyc2VEYXRlPUYsQi5mb3JtYXREYXRlPWcsQi5wYXJzZT1TLEIuZnJvbUpTT049cmUsQi5k'@;
put 'b21haW5NYXRjaD1NLEIuZGVmYXVsdFBhdGg9eSxCLnBhdGhNYXRjaD1qLEIuZ2V0UHVibGljU3VmZml4PVIuZ2V0UHVibGljU3VmZml4LEIuY29va2llQ29tcGFyZT1mZSxCLnBlcm11dGVEb21haW49TCg3MzI0KS5wZXJtdXRlRG9tYWluLEIucGVybXV0ZVBhdGg9ZnVuY3Rpb24oTmUpe2lm'@;
put 'KCIvIj09PU5lKXJldHVyblsiLyJdO2NvbnN0IExlPVtOZV07Zm9yKDtOZS5sZW5ndGg+MTspe2NvbnN0IEJlPU5lLmxhc3RJbmRleE9mKCIvIik7aWYoMD09PUJlKWJyZWFrO05lPU5lLnN1YnN0cigwLEJlKSxMZS5wdXNoKE5lKX1yZXR1cm4gTGUucHVzaCgiLyIpLExlfSxCLmNhbm9uaWNh'@;
put 'bERvbWFpbj1DLEIuUHJlZml4U2VjdXJpdHlFbnVtPWNlfSw1NzYxOihILEIsTCk9PnsidXNlIHN0cmljdCI7Y29uc3R7ZnJvbUNhbGxiYWNrOkt9PUwoNzA0MSksSj1MKDIyMjQpLnksST1MKDczMjQpLnBlcm11dGVEb21haW4sUj1MKDg5NzEpLlUsRT1MKDk1MzkpO2NsYXNzIHogZXh0ZW5k'@;
put 'cyBKe2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnN5bmNocm9ub3VzPSEwLHRoaXMuaWR4PXt9LEUuaW5zcGVjdC5jdXN0b20mJih0aGlzW0UuaW5zcGVjdC5jdXN0b21dPXRoaXMuaW5zcGVjdCl9aW5zcGVjdCgpe3JldHVybmB7IGlkeDogJHtFLmluc3BlY3QodGhpcy5pZHgsITEsMil9'@;
put 'IH1gfWZpbmRDb29raWUoVixHLFcsVSl7cmV0dXJuIFUobnVsbCx0aGlzLmlkeFtWXSYmdGhpcy5pZHhbVl1bR10/dGhpcy5pZHhbVl1bR11bV118fG51bGw6dm9pZCAwKX1maW5kQ29va2llcyhWLEcsVyxVKXtjb25zdCBxPVtdO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBXJiYoVT1XLFc9ITEp'@;
put 'LCFWKXJldHVybiBVKG51bGwsW10pO2xldCB0ZTt0ZT1HP2Z1bmN0aW9uKGxlKXtPYmplY3Qua2V5cyhsZSkuZm9yRWFjaChkZT0+e2lmKFIoRyxkZSkpe2NvbnN0IHVlPWxlW2RlXTtmb3IoY29uc3QgY2UgaW4gdWUpcS5wdXNoKHVlW2NlXSl9fSl9OmZ1bmN0aW9uKGxlKXtmb3IoY29uc3Qg'@;
put 'ZGUgaW4gbGUpe2NvbnN0IHVlPWxlW2RlXTtmb3IoY29uc3QgY2UgaW4gdWUpcS5wdXNoKHVlW2NlXSl9fTtjb25zdCBuZT1JKFYsVyl8fFtWXSxpZT10aGlzLmlkeDtuZS5mb3JFYWNoKGxlPT57Y29uc3QgZGU9aWVbbGVdO2RlJiZ0ZShkZSl9KSxVKG51bGwscSl9cHV0Q29va2llKFYsRyl7'@;
put 'dGhpcy5pZHhbVi5kb21haW5dfHwodGhpcy5pZHhbVi5kb21haW5dPXt9KSx0aGlzLmlkeFtWLmRvbWFpbl1bVi5wYXRoXXx8KHRoaXMuaWR4W1YuZG9tYWluXVtWLnBhdGhdPXt9KSx0aGlzLmlkeFtWLmRvbWFpbl1bVi5wYXRoXVtWLmtleV09VixHKG51bGwpfXVwZGF0ZUNvb2tpZShWLEcs'@;
put 'Vyl7dGhpcy5wdXRDb29raWUoRyxXKX1yZW1vdmVDb29raWUoVixHLFcsVSl7dGhpcy5pZHhbVl0mJnRoaXMuaWR4W1ZdW0ddJiZ0aGlzLmlkeFtWXVtHXVtXXSYmZGVsZXRlIHRoaXMuaWR4W1ZdW0ddW1ddLFUobnVsbCl9cmVtb3ZlQ29va2llcyhWLEcsVyl7cmV0dXJuIHRoaXMuaWR4W1Zd'@;
put 'JiYoRz9kZWxldGUgdGhpcy5pZHhbVl1bR106ZGVsZXRlIHRoaXMuaWR4W1ZdKSxXKG51bGwpfXJlbW92ZUFsbENvb2tpZXMoVil7cmV0dXJuIHRoaXMuaWR4PXt9LFYobnVsbCl9Z2V0QWxsQ29va2llcyhWKXtjb25zdCBHPVtdLFc9dGhpcy5pZHg7T2JqZWN0LmtleXMoVykuZm9yRWFjaChV'@;
put 'PT57T2JqZWN0LmtleXMoV1tVXSkuZm9yRWFjaChxPT57T2JqZWN0LmtleXMoV1tVXVtxXSkuZm9yRWFjaCh0ZT0+e251bGwhPT10ZSYmRy5wdXNoKFdbVV1bcV1bdGVdKX0pfSl9KSxHLnNvcnQoKFUscSk9PihVLmNyZWF0aW9uSW5kZXh8fDApLShxLmNyZWF0aW9uSW5kZXh8fDApKSxWKG51'@;
put 'bGwsRyl9fVsiZmluZENvb2tpZSIsImZpbmRDb29raWVzIiwicHV0Q29va2llIiwidXBkYXRlQ29va2llIiwicmVtb3ZlQ29va2llIiwicmVtb3ZlQ29va2llcyIsInJlbW92ZUFsbENvb2tpZXMiLCJnZXRBbGxDb29raWVzIl0uZm9yRWFjaChqPT57eltqXT1LKHoucHJvdG90eXBlW2pdKX0p'@;
put 'LEIubT16fSw4OTcxOihILEIpPT57InVzZSBzdHJpY3QiO0IuVT1mdW5jdGlvbihMLEspe3JldHVybiBLPT09THx8MD09PUwuaW5kZXhPZihLKSYmKCIvIj09PUsuc3Vic3RyKC0xKXx8Ii8iPT09TC5zdWJzdHIoSy5sZW5ndGgsMSkpfX0sNzMyNDooSCxCLEwpPT57InVzZSBzdHJpY3QiO2Nv'@;
put 'bnN0IEs9TCg3NTIpLEo9WyJsb2NhbCJdO0IucGVybXV0ZURvbWFpbj1mdW5jdGlvbihJLFIpe2xldCBFPW51bGw7aWYoUil7Y29uc3QgRz1JLnNwbGl0KCIuIik7RT1KLmluY2x1ZGVzKEdbRy5sZW5ndGgtMV0pP2Ake0dbRy5sZW5ndGgtMl19LiR7R1tHLmxlbmd0aC0xXX1gOksuZ2V0UHVi'@;
put 'bGljU3VmZml4KEkpfWVsc2UgRT1LLmdldFB1YmxpY1N1ZmZpeChJKTtpZighRSlyZXR1cm4gbnVsbDtpZihFPT1JKXJldHVybltJXTtjb25zdCB6PUkuc2xpY2UoMCwtKEUubGVuZ3RoKzEpKS5zcGxpdCgiLiIpLnJldmVyc2UoKTtsZXQgaj1FO2NvbnN0IFY9W2pdO2Zvcig7ei5sZW5ndGg7'@;
put 'KWo9YCR7ei5zaGlmdCgpfS4ke2p9YCxWLnB1c2goaik7cmV0dXJuIFZ9fSw3NTI6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBLPUwoNjI0NCk7Qi5nZXRQdWJsaWNTdWZmaXg9ZnVuY3Rpb24oSil7cmV0dXJuIEsuZ2V0KEopfX0sMjIyNDooSCxCKT0+eyJ1c2Ugc3RyaWN0IjtCLnk9'@;
put 'Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnN5bmNocm9ub3VzPSExfWZpbmRDb29raWUoTCxLLEosSSl7dGhyb3cgbmV3IEVycm9yKCJmaW5kQ29va2llIGlzIG5vdCBpbXBsZW1lbnRlZCIpfWZpbmRDb29raWVzKEwsSyxKLEkpe3Rocm93IG5ldyBFcnJvcigiZmluZENvb2tpZXMgaXMgbm90'@;
put 'IGltcGxlbWVudGVkIil9cHV0Q29va2llKEwsSyl7dGhyb3cgbmV3IEVycm9yKCJwdXRDb29raWUgaXMgbm90IGltcGxlbWVudGVkIil9dXBkYXRlQ29va2llKEwsSyxKKXt0aHJvdyBuZXcgRXJyb3IoInVwZGF0ZUNvb2tpZSBpcyBub3QgaW1wbGVtZW50ZWQiKX1yZW1vdmVDb29raWUoTCxL'@;
put 'LEosSSl7dGhyb3cgbmV3IEVycm9yKCJyZW1vdmVDb29raWUgaXMgbm90IGltcGxlbWVudGVkIil9cmVtb3ZlQ29va2llcyhMLEssSil7dGhyb3cgbmV3IEVycm9yKCJyZW1vdmVDb29raWVzIGlzIG5vdCBpbXBsZW1lbnRlZCIpfXJlbW92ZUFsbENvb2tpZXMoTCl7dGhyb3cgbmV3IEVycm9y'@;
put 'KCJyZW1vdmVBbGxDb29raWVzIGlzIG5vdCBpbXBsZW1lbnRlZCIpfWdldEFsbENvb2tpZXMoTCl7dGhyb3cgbmV3IEVycm9yKCJnZXRBbGxDb29raWVzIGlzIG5vdCBpbXBsZW1lbnRlZCAodGhlcmVmb3JlIGphciBjYW5ub3QgYmUgc2VyaWFsaXplZCkiKX19fSw0NTY6SD0+e0guZXhwb3J0'@;
put 'cz0iNC4wLjAifSw3MDQxOihILEIpPT57InVzZSBzdHJpY3QiO0IuZnJvbUNhbGxiYWNrPWZ1bmN0aW9uKEwpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV0pcmV0dXJuIG5l'@;
put 'dyBQcm9taXNlKChLLEopPT57YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGhdPShJLFIpPT57aWYoSSlyZXR1cm4gSihJKTtLKFIpfSxhcmd1bWVudHMubGVuZ3RoKyssTC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KTtMLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sIm5hbWUiLHt2YWx1ZTpMLm5h'@;
put 'bWV9KX0sQi5mcm9tUHJvbWlzZT1mdW5jdGlvbihMKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uKCl7Y29uc3QgSz1hcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXTtpZigiZnVuY3Rpb24iIT10eXBlb2YgSylyZXR1cm4gTC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7'@;
put 'TC5hcHBseSh0aGlzLGFyZ3VtZW50cykudGhlbihKPT5LKG51bGwsSiksSyl9LCJuYW1lIix7dmFsdWU6TC5uYW1lfSl9fSw2NzI6ZnVuY3Rpb24oSCxCLEwpeyJ1c2Ugc3RyaWN0Ijt2YXIgSz10aGlzJiZ0aGlzLl9fYXNzaWdufHxmdW5jdGlvbigpe3JldHVybiBLPU9iamVjdC5hc3NpZ258'@;
put 'fGZ1bmN0aW9uKGope2Zvcih2YXIgVixHPTEsVz1hcmd1bWVudHMubGVuZ3RoO0c8VztHKyspZm9yKHZhciBVIGluIFY9YXJndW1lbnRzW0ddKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWLFUpJiYoaltVXT1WW1VdKTtyZXR1cm4gan0sSy5hcHBseSh0aGlzLGFyZ3Vt'@;
put 'ZW50cyl9LEo9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGosVixHLFcpe3JldHVybiBuZXcoR3x8KEc9UHJvbWlzZSkpKGZ1bmN0aW9uKFUscSl7ZnVuY3Rpb24gdGUobGUpe3RyeXtpZShXLm5leHQobGUpKX1jYXRjaChkZSl7cShkZSl9fWZ1bmN0aW9uIG5lKGxlKXt0cnl7aWUo'@;
put 'Vy50aHJvdyhsZSkpfWNhdGNoKGRlKXtxKGRlKX19ZnVuY3Rpb24gaWUobGUpe3ZhciBkZTtsZS5kb25lP1UobGUudmFsdWUpOihkZT1sZS52YWx1ZSxkZSBpbnN0YW5jZW9mIEc/ZGU6bmV3IEcoZnVuY3Rpb24odWUpe3VlKGRlKX0pKS50aGVuKHRlLG5lKX1pZSgoVz1XLmFwcGx5KGosVnx8'@;
put 'W10pKS5uZXh0KCkpfSl9LEk9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oaixWKXt2YXIgRyxXLFUscSx0ZT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZVWzBdKXRocm93IFVbMV07cmV0dXJuIFVbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gcT17bmV4dDpuZSgw'@;
put 'KSx0aHJvdzpuZSgxKSxyZXR1cm46bmUoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihxW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHE7ZnVuY3Rpb24gbmUoaWUpe3JldHVybiBmdW5jdGlvbihsZSl7cmV0dXJuIGZ1bmN0aW9uKGRlKXtpZihHKXRo'@;
put 'cm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3RlOyl0cnl7aWYoRz0xLFcmJihVPTImZGVbMF0/Vy5yZXR1cm46ZGVbMF0/Vy50aHJvd3x8KChVPVcucmV0dXJuKSYmVS5jYWxsKFcpLDApOlcubmV4dCkmJiEoVT1VLmNhbGwoVyxkZVsx'@;
put 'XSkpLmRvbmUpcmV0dXJuIFU7c3dpdGNoKFc9MCxVJiYoZGU9WzImZGVbMF0sVS52YWx1ZV0pLGRlWzBdKXtjYXNlIDA6Y2FzZSAxOlU9ZGU7YnJlYWs7Y2FzZSA0OnJldHVybiB0ZS5sYWJlbCsrLHt2YWx1ZTpkZVsxXSxkb25lOiExfTtjYXNlIDU6dGUubGFiZWwrKyxXPWRlWzFdLGRlPVsw'@;
put 'XTtjb250aW51ZTtjYXNlIDc6ZGU9dGUub3BzLnBvcCgpLHRlLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChVPShVPXRlLnRyeXMpLmxlbmd0aD4wJiZVW1UubGVuZ3RoLTFdKXx8NiE9PWRlWzBdJiYyIT09ZGVbMF0pKXt0ZT0wO2NvbnRpbnVlfWlmKDM9PT1kZVswXSYmKCFV'@;
put 'fHxkZVsxXT5VWzBdJiZkZVsxXTxVWzNdKSl7dGUubGFiZWw9ZGVbMV07YnJlYWt9aWYoNj09PWRlWzBdJiZ0ZS5sYWJlbDxVWzFdKXt0ZS5sYWJlbD1VWzFdLFU9ZGU7YnJlYWt9aWYoVSYmdGUubGFiZWw8VVsyXSl7dGUubGFiZWw9VVsyXSx0ZS5vcHMucHVzaChkZSk7YnJlYWt9VVsyXSYm'@;
put 'dGUub3BzLnBvcCgpLHRlLnRyeXMucG9wKCk7Y29udGludWV9ZGU9Vi5jYWxsKGosdGUpfWNhdGNoKHVlKXtkZT1bNix1ZV0sVz0wfWZpbmFsbHl7Rz1VPTB9aWYoNSZkZVswXSl0aHJvdyBkZVsxXTtyZXR1cm57dmFsdWU6ZGVbMF0/ZGVbMV06dm9pZCAwLGRvbmU6ITB9fShbaWUsbGVdKX19'@;
put 'fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQi5Db250ZXh0TWFuYWdlcj12b2lkIDA7dmFyIFI9TCg1OTI4KSxFPUwoOTc3OCksej1mdW5jdGlvbigpe2Z1bmN0aW9uIGooVixHKXt0aGlzLnNlcnZlclVybD1WLHRoaXMucmVxdWVzdENsaWVudD1H'@;
put 'LHRoaXMuZGVmYXVsdENvbXB1dGVDb250ZXh0cz1bIkNBUyBGb3JtYXRzIHNlcnZpY2UgY29tcHV0ZSBjb250ZXh0IiwiRGF0YSBNaW5pbmcgY29tcHV0ZSBjb250ZXh0IiwiSW1wb3J0IDkgc2VydmljZSBjb21wdXRlIGNvbnRleHQiLCJTQVMgSm9iIEV4ZWN1dGlvbiBjb21wdXRlIGNvbnRl'@;
put 'eHQiLCJTQVMgTW9kZWwgTWFuYWdlciBjb21wdXRlIGNvbnRleHQiLCJTQVMgU3R1ZGlvIGNvbXB1dGUgY29udGV4dCIsIlNBUyBWaXN1YWwgRm9yZWNhc3RpbmcgY29tcHV0ZSBjb250ZXh0Il0sdGhpcy5kZWZhdWx0TGF1bmNoZXJDb250ZXh0cz1bIkNBUyBGb3JtYXRzIHNlcnZpY2UgbGF1'@;
put 'bmNoZXIgY29udGV4dCIsIkRhdGEgTWluaW5nIGxhdW5jaGVyIGNvbnRleHQiLCJJbXBvcnQgOSBzZXJ2aWNlIGxhdW5jaGVyIGNvbnRleHQiLCJKb2IgRmxvdyBFeGVjdXRpb24gbGF1bmNoZXIgY29udGV4dCIsIlNBUyBKb2IgRXhlY3V0aW9uIGxhdW5jaGVyIGNvbnRleHQiLCJTQVMgTW9k'@;
put 'ZWwgTWFuYWdlciBsYXVuY2hlciBjb250ZXh0IiwiU0FTIFN0dWRpbyBsYXVuY2hlciBjb250ZXh0IiwiU0FTIFZpc3VhbCBGb3JlY2FzdGluZyBsYXVuY2hlciBjb250ZXh0Il0sViYmKDAsUi5pc1VybCkoVil9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLnByb3RvdHlwZSwiZ2V0'@;
put 'RGVmYXVsdENvbXB1dGVDb250ZXh0cyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmF1bHRDb21wdXRlQ29udGV4dHN9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGoucHJvdG90eXBlLCJnZXREZWZhdWx0TGF1bmNoZXJDb250'@;
put 'ZXh0cyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmF1bHRMYXVuY2hlckNvbnRleHRzfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGoucHJvdG90eXBlLmdldENvbXB1dGVDb250ZXh0cz1mdW5jdGlvbihWKXtyZXR1cm4gSih0aGlzLHZvaWQgMCx2b2lkIDAsZnVu'@;
put 'Y3Rpb24oKXt2YXIgRztyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKFcpe3N3aXRjaChXLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9jb21wdXRlL2NvbnRleHRzP2xpbWl0PTEwMDAwIiksVikuY2F0Y2goZnVu'@;
put 'Y3Rpb24oVSl7dGhyb3coMCxFLnByZWZpeE1lc3NhZ2UpKFUsIkVycm9yIHdoaWxlIGdldHRpbmcgY29tcHV0ZSBjb250ZXh0cy4gIil9KV07Y2FzZSAxOnJldHVyblsyLCgoRz1XLnNlbnQoKS5yZXN1bHQpJiZHLml0ZW1zP0cuaXRlbXM6W10pLm1hcChmdW5jdGlvbihVKXtyZXR1cm57Y3Jl'@;
put 'YXRlZEJ5OlUuY3JlYXRlZEJ5LGlkOlUuaWQsbmFtZTpVLm5hbWUsdmVyc2lvbjpVLnZlcnNpb24sYXR0cmlidXRlczp7fX19KV19fSl9KX0sai5wcm90b3R5cGUuZ2V0TGF1bmNoZXJDb250ZXh0cz1mdW5jdGlvbihWKXtyZXR1cm4gSih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2'@;
put 'YXIgRztyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKFcpe3N3aXRjaChXLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9sYXVuY2hlci9jb250ZXh0cz9saW1pdD0xMDAwMCIpLFYpLmNhdGNoKGZ1bmN0aW9uKFUp'@;
put 'e3Rocm93KDAsRS5wcmVmaXhNZXNzYWdlKShVLCJFcnJvciB3aGlsZSBnZXR0aW5nIGxhdW5jaGVyIGNvbnRleHRzLiAiKX0pXTtjYXNlIDE6cmV0dXJuWzIsKChHPVcuc2VudCgpLnJlc3VsdCkmJkcuaXRlbXM/Ry5pdGVtczpbXSkubWFwKGZ1bmN0aW9uKFUpe3JldHVybntjcmVhdGVkQnk6'@;
put 'VS5jcmVhdGVkQnksaWQ6VS5pZCxuYW1lOlUubmFtZSx2ZXJzaW9uOlUudmVyc2lvbixhdHRyaWJ1dGVzOnt9fX0pXX19KX0pfSxqLnByb3RvdHlwZS5jcmVhdGVDb21wdXRlQ29udGV4dD1mdW5jdGlvbihWLEcsVyxVLHEsdGUpe3JldHVybiBKKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlv'@;
put 'bigpe3ZhciBuZSxpZSxsZSxkZSx1ZTtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKGNlKXtzd2l0Y2goY2UubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy52YWxpZGF0ZUNvbnRleHROYW1lKFYpLHRoaXMuaXNEZWZhdWx0Q29udGV4dChWLHRoaXMuZGVmYXVsdENvbXB1dGVDb250ZXh0cywiQ29t'@;
put 'cHV0ZSBjb250ZXh0ICciLmNvbmNhdChWLCInIGFscmVhZHkgZXhpc3RzLiIpKSxbNCx0aGlzLmdldENvbXB1dGVDb250ZXh0cyhxKV07Y2FzZSAxOmlmKGNlLnNlbnQoKS5maW5kKGZ1bmN0aW9uKFkpe3JldHVybiBZLm5hbWU9PT1WfSkpdGhyb3cgbmV3IEVycm9yKCJDb21wdXRlIGNvbnRl'@;
put 'eHQgJyIuY29uY2F0KFYsIicgYWxyZWFkeSBleGlzdHMuIikpO3JldHVybiBHP3RoaXMuZGVmYXVsdExhdW5jaGVyQ29udGV4dHMuaW5jbHVkZXMoRyk/WzMsNF06WzQsdGhpcy5nZXRMYXVuY2hlckNvbnRleHRzKHEpXTpbMyw0XTtjYXNlIDI6cmV0dXJuIGNlLnNlbnQoKS5maW5kKGZ1bmN0'@;
put 'aW9uKFkpe3JldHVybiBZLm5hbWU9PT1HfSk/WzMsNF06KG5lPSJUaGUgbGF1bmNoZXIgY29udGV4dCBmb3IgIi5jb25jYXQoRyksWzQsdGhpcy5jcmVhdGVMYXVuY2hlckNvbnRleHQoRyxuZSwiZGlyZWN0IixxKS5jYXRjaChmdW5jdGlvbihZKXt0aHJvdyBuZXcgRXJyb3IoIkVycm9yIHdo'@;
put 'aWxlIGNyZWF0aW5nIGxhdW5jaGVyIGNvbnRleHQuICIuY29uY2F0KFkpKX0pXSk7Y2FzZSAzOmlmKCEoaWU9Y2Uuc2VudCgpKXx8IWllLm5hbWUpdGhyb3cgbmV3IEVycm9yKCJFcnJvciB3aGlsZSBjcmVhdGluZyBsYXVuY2hlciBjb250ZXh0LiIpO0c9aWUubmFtZSxjZS5sYWJlbD00O2Nh'@;
put 'c2UgNDpyZXR1cm4gbGU9eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0scSYmKGxlLkF1dGhvcml6YXRpb249IkJlYXJlciAiLmNvbmNhdChxKSksZGU9e3JldXNlU2VydmVyUHJvY2Vzc2VzOiEwfSxXJiYoZGU9SyhLKHt9LGRlKSx7cnVuU2VydmVyQXM6V30pKSx1ZT17bmFt'@;
put 'ZTpWLGxhdW5jaENvbnRleHQ6e2NvbnRleHROYW1lOkd8fCIifSxhdHRyaWJ1dGVzOmRlfSx0ZSYmdGUubGVuZ3RoP3VlLmF1dGhvcml6ZWRVc2Vycz10ZTp1ZS5hdXRob3JpemVBbGxBdXRoZW50aWNhdGVkVXNlcnM9ITAsVSYmKHVlLmVudmlyb25tZW50PXthdXRvRXhlY0xpbmVzOlV9KSxb'@;
put 'NCx0aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9jb21wdXRlL2NvbnRleHRzIiksdWUscSkuY2F0Y2goZnVuY3Rpb24oWSl7dGhyb3coMCxFLnByZWZpeE1lc3NhZ2UpKFksIkVycm9yIHdoaWxlIGNyZWF0aW5nIGNvbXB1dGUgY29udGV4dC4gIil9'@;
put 'KV07Y2FzZSA1OnJldHVyblsyLGNlLnNlbnQoKS5yZXN1bHRdfX0pfSl9LGoucHJvdG90eXBlLmNyZWF0ZUxhdW5jaGVyQ29udGV4dD1mdW5jdGlvbihWLEcsVyxVKXtyZXR1cm4gdm9pZCAwPT09VyYmKFc9ImRpcmVjdCIpLEoodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHEs'@;
put 'dGU7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihuZSl7c3dpdGNoKG5lLmxhYmVsKXtjYXNlIDA6aWYoIVYpdGhyb3cgbmV3IEVycm9yKCJDb250ZXh0IG5hbWUgaXMgcmVxdWlyZWQuIik7cmV0dXJuIHRoaXMuaXNEZWZhdWx0Q29udGV4dChWLHRoaXMuZGVmYXVsdExhdW5jaGVyQ29udGV4dHMs'@;
put 'IkxhdW5jaGVyIGNvbnRleHQgJyIuY29uY2F0KFYsIicgYWxyZWFkeSBleGlzdHMuIikpLFs0LHRoaXMuZ2V0TGF1bmNoZXJDb250ZXh0cyhVKV07Y2FzZSAxOmlmKG5lLnNlbnQoKS5maW5kKGZ1bmN0aW9uKGllKXtyZXR1cm4gaWUubmFtZT09PVZ9KSl0aHJvdyBuZXcgRXJyb3IoIkxhdW5j'@;
put 'aGVyIGNvbnRleHQgJyIuY29uY2F0KFYsIicgYWxyZWFkeSBleGlzdHMuIikpO3JldHVybiBxPXsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LFUmJihxLkF1dGhvcml6YXRpb249IkJlYXJlciAiLmNvbmNhdChVKSksdGU9e25hbWU6VixkZXNjcmlwdGlvbjpHLGxhdW5jaFR5'@;
put 'cGU6V30sWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoIiIuY29uY2F0KHRoaXMuc2VydmVyVXJsLCIvbGF1bmNoZXIvY29udGV4dHMiKSx0ZSxVKS5jYXRjaChmdW5jdGlvbihpZSl7dGhyb3coMCxFLnByZWZpeE1lc3NhZ2UpKGllLCJFcnJvciB3aGlsZSBjcmVhdGluZyBsYXVuY2hlciBj'@;
put 'b250ZXh0LiAiKX0pXTtjYXNlIDI6cmV0dXJuWzIsbmUuc2VudCgpLnJlc3VsdF19fSl9KX0sai5wcm90b3R5cGUuZWRpdENvbXB1dGVDb250ZXh0PWZ1bmN0aW9uKFYsRyxXKXtyZXR1cm4gSih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgVSxxLHRlLG5lO3JldHVybiBJKHRo'@;
put 'aXMsZnVuY3Rpb24oaWUpe3N3aXRjaChpZS5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLnZhbGlkYXRlQ29udGV4dE5hbWUoViksdGhpcy5pc0RlZmF1bHRDb250ZXh0KFYsdGhpcy5kZWZhdWx0Q29tcHV0ZUNvbnRleHRzLCJFZGl0aW5nIGRlZmF1bHQgU0FTIGNvbXB1dGUgY29udGV4dHMg'@;
put 'aXMgbm90IGFsbG93ZWQuIiwhMCksWzQsdGhpcy5nZXRDb21wdXRlQ29udGV4dEJ5TmFtZShWLFcpXTtjYXNlIDE6cmV0dXJuKFU9aWUuc2VudCgpKT9bMywzXTpbNCx0aGlzLmdldENvbXB1dGVDb250ZXh0QnlJZChHLmlkLFcpXTtjYXNlIDI6VT1pZS5zZW50KCksaWUubGFiZWw9MztjYXNl'@;
put 'IDM6cmV0dXJuWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9jb21wdXRlL2NvbnRleHRzLyIpLmNvbmNhdChVLmlkKSxXKS5jYXRjaChmdW5jdGlvbihsZSl7dGhyb3cgbGUmJjQwND09PWxlLnN0YXR1cz9uZXcgRXJyb3IoIlRoZSBjb250ZXh0'@;
put 'ICciLmNvbmNhdChWLCInIHdhcyBub3QgZm91bmQgb24gdGhpcyBzZXJ2ZXIuIikpOmxlfSldO2Nhc2UgNDpyZXR1cm4gcT1pZS5zZW50KCksbmU9cS5ldGFnLFs0LHRoaXMucmVxdWVzdENsaWVudC5wdXQoIi9jb21wdXRlL2NvbnRleHRzLyIuY29uY2F0KCh0ZT1xLnJlc3VsdCkuaWQpLEso'@;
put 'SyhLKHt9LHRlKSxHKSx7YXR0cmlidXRlczpLKEsoe30sdGUuYXR0cmlidXRlcyksRy5hdHRyaWJ1dGVzKX0pLFcseyJJZi1NYXRjaCI6bmV9KV07Y2FzZSA1OnJldHVyblsyLGllLnNlbnQoKV19fSl9KX0sai5wcm90b3R5cGUuZ2V0Q29tcHV0ZUNvbnRleHRCeU5hbWU9ZnVuY3Rpb24oVixH'@;
put 'KXtyZXR1cm4gSih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgVztyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKFUpe3N3aXRjaChVLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsJy9jb21wdXRlL2Nv'@;
put 'bnRleHRzP2ZpbHRlcj1lcShuYW1lLCAiJykuY29uY2F0KFYsJyIpJyksRykuY2F0Y2goZnVuY3Rpb24ocSl7dGhyb3coMCxFLnByZWZpeE1lc3NhZ2UpKHEsIkVycm9yIHdoaWxlIGdldHRpbmcgY29tcHV0ZSBjb250ZXh0IGJ5IG5hbWUuICIpfSldO2Nhc2UgMTppZighKFc9VS5zZW50KCku'@;
put 'cmVzdWx0KXx8IVcuaXRlbXN8fCFXLml0ZW1zLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBjb250ZXh0ICciLmNvbmNhdChWLCInIHdhcyBub3QgZm91bmQgYXQgJyIpLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiJy4iKSk7cmV0dXJuWzIsVy5pdGVtc1swXV19fSl9KX0sai5wcm90b3R5'@;
put 'cGUuZ2V0Q29tcHV0ZUNvbnRleHRCeUlkPWZ1bmN0aW9uKFYsRyl7cmV0dXJuIEoodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihXKXtzd2l0Y2goVy5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMucmVxdWVzdENsaWVudC5nZXQoIiIuY29u'@;
put 'Y2F0KHRoaXMuc2VydmVyVXJsLCIvY29tcHV0ZS9jb250ZXh0cy8iKS5jb25jYXQoViksRykuY2F0Y2goZnVuY3Rpb24oVSl7dGhyb3coMCxFLnByZWZpeE1lc3NhZ2UpKFUsIkVycm9yIHdoaWxlIGdldHRpbmcgY29tcHV0ZSBjb250ZXh0IGJ5IGlkLiAiKX0pXTtjYXNlIDE6cmV0dXJuWzIs'@;
put 'Vy5zZW50KCkucmVzdWx0XX19KX0pfSxqLnByb3RvdHlwZS5nZXRFeGVjdXRhYmxlQ29udGV4dHM9ZnVuY3Rpb24oVixHKXtyZXR1cm4gSih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgVyxVLHEsdGUsbmUsaWUsbGUsdWUsY2U7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihZKXtz'@;
put 'd2l0Y2goWS5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMucmVxdWVzdENsaWVudC5nZXQoIiIuY29uY2F0KHRoaXMuc2VydmVyVXJsLCIvY29tcHV0ZS9jb250ZXh0cz9saW1pdD0xMDAwMCIpLEc/LmFjY2Vzc190b2tlbikuY2F0Y2goZnVuY3Rpb24oYil7dGhyb3coMCxFLnByZWZpeE1l'@;
put 'c3NhZ2UpKGIsIkVycm9yIHdoaWxlIGZldGNoaW5nIGNvbXB1dGUgY29udGV4dHMuIil9KV07Y2FzZSAxOlc9WS5zZW50KCkucmVzdWx0LHE9W10sdGU9KFU9Vy5pdGVtc3x8W10pLm1hcChmdW5jdGlvbihiKXt2YXIgeD1bIiVwdXQgJj1zeXN1c2VyaWQ7Il07cmV0dXJuIGZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIFYoInRlc3QtIi5jb25jYXQoYi5uYW1lKSx4LGIubmFtZSxHLG51bGwsITEsITAsITApLmNhdGNoKGZ1bmN0aW9uKE4pe3JldHVybiBOfSl9fSksbmU9W10saWU9MCxsZT10ZSxZLmxhYmVsPTI7Y2FzZSAyOnJldHVybiBpZTxsZS5sZW5ndGg/KGNlPSh1ZT1uZSkucHVzaCxbNCwo'@;
put 'MCxsZVtpZV0pKCldKTpbMyw1XTtjYXNlIDM6Y2UuYXBwbHkodWUsW1kuc2VudCgpXSksWS5sYWJlbD00O2Nhc2UgNDpyZXR1cm4gaWUrKyxbMywyXTtjYXNlIDU6cmV0dXJuIG5lLmZvckVhY2goZnVuY3Rpb24oYix4KXtpZihiJiZiLmxvZyl0cnl7dmFyIEY9IiIsZz1iLmxvZy5zcGxpdCgi'@;
put 'XG4iKS5maW5kKGZ1bmN0aW9uKEMpe3JldHVybiBDLnN0YXJ0c1dpdGgoIlNZU1VTRVJJRD0iKX0pO2cmJihGPWcucmVwbGFjZSgiU1lTVVNFUklEPSIsIiIpLHEucHVzaCh7Y3JlYXRlZEJ5OlVbeF0uY3JlYXRlZEJ5LGlkOlVbeF0uaWQsbmFtZTpVW3hdLm5hbWUsdmVyc2lvbjpVW3hdLnZl'@;
put 'cnNpb24sYXR0cmlidXRlczp7c3lzVXNlcklkOkZ9fSkpfWNhdGNoKEMpe3Rocm93IEN9fSksWzIscV19fSl9KX0sai5wcm90b3R5cGUuZGVsZXRlQ29tcHV0ZUNvbnRleHQ9ZnVuY3Rpb24oVixHKXtyZXR1cm4gSih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgVyxVO3JldHVy'@;
put 'biBJKHRoaXMsZnVuY3Rpb24ocSl7c3dpdGNoKHEubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy52YWxpZGF0ZUNvbnRleHROYW1lKFYpLHRoaXMuaXNEZWZhdWx0Q29udGV4dChWLHRoaXMuZGVmYXVsdENvbXB1dGVDb250ZXh0cywiRGVsZXRpbmcgZGVmYXVsdCBTQVMgY29tcHV0ZSBjb250'@;
put 'ZXh0cyBpcyBub3QgYWxsb3dlZC4iLCEwKSxXPXsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LEcmJihXLkF1dGhvcml6YXRpb249IkJlYXJlciAiLmNvbmNhdChHKSksWzQsdGhpcy5nZXRDb21wdXRlQ29udGV4dEJ5TmFtZShWLEcpXTtjYXNlIDE6cmV0dXJuIFU9cS5zZW50'@;
put 'KCksWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmRlbGV0ZSgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9jb21wdXRlL2NvbnRleHRzLyIpLmNvbmNhdChVLmlkKSxHKV07Y2FzZSAyOnJldHVyblsyLHEuc2VudCgpXX19KX0pfSxqLnByb3RvdHlwZS52YWxpZGF0ZUNvbnRleHROYW1lPWZ1bmN0'@;
put 'aW9uKFYpe2lmKCFWKXRocm93IG5ldyBFcnJvcigiQ29udGV4dCBuYW1lIGlzIHJlcXVpcmVkLiIpfSxqLnByb3RvdHlwZS5pc0RlZmF1bHRDb250ZXh0PWZ1bmN0aW9uKFYsRyxXLFUpe2lmKHZvaWQgMD09PUcmJihHPXRoaXMuZGVmYXVsdENvbXB1dGVDb250ZXh0cyksdm9pZCAwPT09VyYm'@;
put 'KFc9IiIpLHZvaWQgMD09PVUmJihVPSExKSxHLmluY2x1ZGVzKFYpKXRocm93IG5ldyBFcnJvcigiIi5jb25jYXQoVykuY29uY2F0KFU/IlxuRGVmYXVsdCBjb250ZXh0czoiK0cubWFwKGZ1bmN0aW9uKHEsdGUpe3JldHVybiJcbiIuY29uY2F0KHRlKzEsIi4gIikuY29uY2F0KHEpfSk6IiIp'@;
put 'KX0san0oKTtCLkNvbnRleHRNYW5hZ2VyPXp9LDgzMDY6ZnVuY3Rpb24oSCxCLEwpeyJ1c2Ugc3RyaWN0Ijt2YXIgSz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oVyxVLHEsdGUpe3JldHVybiBuZXcocXx8KHE9UHJvbWlzZSkpKGZ1bmN0aW9uKG5lLGllKXtmdW5jdGlvbiBsZShj'@;
put 'ZSl7dHJ5e3VlKHRlLm5leHQoY2UpKX1jYXRjaChZKXtpZShZKX19ZnVuY3Rpb24gZGUoY2Upe3RyeXt1ZSh0ZS50aHJvdyhjZSkpfWNhdGNoKFkpe2llKFkpfX1mdW5jdGlvbiB1ZShjZSl7dmFyIFk7Y2UuZG9uZT9uZShjZS52YWx1ZSk6KFk9Y2UudmFsdWUsWSBpbnN0YW5jZW9mIHE/WTpu'@;
put 'ZXcgcShmdW5jdGlvbihiKXtiKFkpfSkpLnRoZW4obGUsZGUpfXVlKCh0ZT10ZS5hcHBseShXLFV8fFtdKSkubmV4dCgpKX0pfSxKPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKFcsVSl7dmFyIHEsdGUsbmUsaWUsbGU9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmbmVb'@;
put 'MF0pdGhyb3cgbmVbMV07cmV0dXJuIG5lWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIGllPXtuZXh0OmRlKDApLHRocm93OmRlKDEpLHJldHVybjpkZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKGllW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30p'@;
put 'LGllO2Z1bmN0aW9uIGRlKHVlKXtyZXR1cm4gZnVuY3Rpb24oY2Upe3JldHVybiBmdW5jdGlvbihZKXtpZihxKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO2xlOyl0cnl7aWYocT0xLHRlJiYobmU9MiZZWzBdP3RlLnJldHVybjpZ'@;
put 'WzBdP3RlLnRocm93fHwoKG5lPXRlLnJldHVybikmJm5lLmNhbGwodGUpLDApOnRlLm5leHQpJiYhKG5lPW5lLmNhbGwodGUsWVsxXSkpLmRvbmUpcmV0dXJuIG5lO3N3aXRjaCh0ZT0wLG5lJiYoWT1bMiZZWzBdLG5lLnZhbHVlXSksWVswXSl7Y2FzZSAwOmNhc2UgMTpuZT1ZO2JyZWFrO2Nh'@;
put 'c2UgNDpyZXR1cm4gbGUubGFiZWwrKyx7dmFsdWU6WVsxXSxkb25lOiExfTtjYXNlIDU6bGUubGFiZWwrKyx0ZT1ZWzFdLFk9WzBdO2NvbnRpbnVlO2Nhc2UgNzpZPWxlLm9wcy5wb3AoKSxsZS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgobmU9KG5lPWxlLnRyeXMpLmxlbmd0'@;
put 'aD4wJiZuZVtuZS5sZW5ndGgtMV0pfHw2IT09WVswXSYmMiE9PVlbMF0pKXtsZT0wO2NvbnRpbnVlfWlmKDM9PT1ZWzBdJiYoIW5lfHxZWzFdPm5lWzBdJiZZWzFdPG5lWzNdKSl7bGUubGFiZWw9WVsxXTticmVha31pZig2PT09WVswXSYmbGUubGFiZWw8bmVbMV0pe2xlLmxhYmVsPW5lWzFd'@;
put 'LG5lPVk7YnJlYWt9aWYobmUmJmxlLmxhYmVsPG5lWzJdKXtsZS5sYWJlbD1uZVsyXSxsZS5vcHMucHVzaChZKTticmVha31uZVsyXSYmbGUub3BzLnBvcCgpLGxlLnRyeXMucG9wKCk7Y29udGludWV9WT1VLmNhbGwoVyxsZSl9Y2F0Y2goYil7WT1bNixiXSx0ZT0wfWZpbmFsbHl7cT1uZT0w'@;
put 'fWlmKDUmWVswXSl0aHJvdyBZWzFdO3JldHVybnt2YWx1ZTpZWzBdP1lbMV06dm9pZCAwLGRvbmU6ITB9fShbdWUsY2VdKX19fSxJPXRoaXMmJnRoaXMuX19zcHJlYWRBcnJheXx8ZnVuY3Rpb24oVyxVLHEpe2lmKHF8fDI9PT1hcmd1bWVudHMubGVuZ3RoKWZvcih2YXIgdGUsbmU9MCxpZT1V'@;
put 'Lmxlbmd0aDtuZTxpZTtuZSsrKSF0ZSYmbmUgaW4gVXx8KHRlfHwodGU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoVSwwLG5lKSksdGVbbmVdPVVbbmVdKTtyZXR1cm4gVy5jb25jYXQodGV8fEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKFUpKX07T2JqZWN0LmRlZmluZVByb3BlcnR5'@;
put 'KEIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEIuU0FTOUFwaUNsaWVudD12b2lkIDA7dmFyIFI9TCg3NzU3KSxFPUwoNjIzMCksej1MKDc5NSksaj1MKDU5MjgpLFY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBXKFUscSx0ZSl7dGhpcy5zZXJ2ZXJVcmw9VSx0aGlzLmpvYnNQYXRoPXEsVSYmKDAs'@;
put 'ai5pc1VybCkoVSksdGhpcy5yZXF1ZXN0Q2xpZW50PW5ldyB6LlNhczlSZXF1ZXN0Q2xpZW50KFUsdGUpfXJldHVybiBXLnByb3RvdHlwZS5nZXRDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm57c2VydmVyVXJsOnRoaXMuc2VydmVyVXJsfX0sVy5wcm90b3R5cGUuc2V0Q29uZmlnPWZ1bmN0aW9u'@;
put 'KFUpe1UmJih0aGlzLnNlcnZlclVybD1VKX0sVy5wcm90b3R5cGUuZXhlY3V0ZVNjcmlwdD1mdW5jdGlvbihVLHEsdGUpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBuZSxpZSxsZSxkZSx1ZSxjZSxZO3JldHVybiBKKHRoaXMsZnVuY3Rpb24oYil7c3dpdGNo'@;
put 'KGIubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLnJlcXVlc3RDbGllbnQubG9naW4ocSx0ZSx0aGlzLmpvYnNQYXRoKV07Y2FzZSAxOnJldHVybiBiLnNlbnQoKSxuZT1bImRhdGEgX251bGxfOyIsImZpbGUgX3dlYm91dDsiLCJwdXQgJ0V4ZWN1dGVkIHNhc2pzIHJ1bic7IiwicnVuOyJd'@;
put 'LGllPUcoSShJKFtdLFUsITApLG5lLCEwKS5qb2luKCJcbiIpKSxsZT0iL1VzZXIgRm9sZGVycy8iLmNvbmNhdChxLCIvTXkgRm9sZGVyL3Nhc2pzL3J1bm5lciIpLGRlPSJtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0iK2llLmdldEJvdW5kYXJ5KCksdWU9aWUuZ2V0TGVuZ3RoU3lu'@;
put 'YygpLGNlPXsiY2FjaGUtY29udHJvbCI6Im5vLWNhY2hlIixBY2NlcHQ6IiovKiIsIkNvbnRlbnQtVHlwZSI6ZGUsIkNvbnRlbnQtTGVuZ3RoIjp1ZSxDb25uZWN0aW9uOiJrZWVwLWFsaXZlIn0sWT0iIi5jb25jYXQodGhpcy5qb2JzUGF0aCwiLz8iKS5jb25jYXQoIl9wcm9ncmFtPSIrbGUr'@;
put 'IiZfZGVidWc9bG9nIiksWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoWSxpZSx2b2lkIDAsZGUsY2UpXTtjYXNlIDI6cmV0dXJuWzIsYi5zZW50KCkucmVzdWx0XX19KX0pfSxXfSgpO0IuU0FTOUFwaUNsaWVudD1WO3ZhciBHPWZ1bmN0aW9uKFcpe3ZhciBVPW5ldyBFLHE9InNhc2pzLWV4'@;
put 'ZWN1dGUtc2FzOS0iLmNvbmNhdCgoMCxSLmdlbmVyYXRlVGltZXN0YW1wKSgiIiksIi5zYXMiKTtyZXR1cm4gVS5hcHBlbmQocSxXLHtmaWxlbmFtZTpxLGNvbnRlbnRUeXBlOiJ0ZXh0L3BsYWluIn0pLFV9fSw5ODIxOmZ1bmN0aW9uKEgsQixMKXsidXNlIHN0cmljdCI7dmFyIEs9TCg0MTU1'@;
put 'KSxKPUwoNTEwOCksST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oY2UsWSxiLHgpe3JldHVybiBuZXcoYnx8KGI9UHJvbWlzZSkpKGZ1bmN0aW9uKE4sRil7ZnVuY3Rpb24gZyh5KXt0cnl7TSh4Lm5leHQoeSkpfWNhdGNoKHApe0YocCl9fWZ1bmN0aW9uIEMoeSl7dHJ5e00oeC50'@;
put 'aHJvdyh5KSl9Y2F0Y2gocCl7RihwKX19ZnVuY3Rpb24gTSh5KXt2YXIgcDt5LmRvbmU/Tih5LnZhbHVlKToocD15LnZhbHVlLHAgaW5zdGFuY2VvZiBiP3A6bmV3IGIoZnVuY3Rpb24oUyl7UyhwKX0pKS50aGVuKGcsQyl9TSgoeD14LmFwcGx5KGNlLFl8fFtdKSkubmV4dCgpKX0pfSxSPXRo'@;
put 'aXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKGNlLFkpe3ZhciBiLHgsTixGLGc9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmTlswXSl0aHJvdyBOWzFdO3JldHVybiBOWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIEY9e25leHQ6QygwKSx0aHJvdzpDKDEpLHJldHVybjpD'@;
put 'KDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoRltTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxGO2Z1bmN0aW9uIEMoTSl7cmV0dXJuIGZ1bmN0aW9uKHkpe3JldHVybiBmdW5jdGlvbihwKXtpZihiKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRv'@;
put 'ciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO2c7KXRyeXtpZihiPTEseCYmKE49MiZwWzBdP3gucmV0dXJuOnBbMF0/eC50aHJvd3x8KChOPXgucmV0dXJuKSYmTi5jYWxsKHgpLDApOngubmV4dCkmJiEoTj1OLmNhbGwoeCxwWzFdKSkuZG9uZSlyZXR1cm4gTjtzd2l0Y2goeD0wLE4m'@;
put 'JihwPVsyJnBbMF0sTi52YWx1ZV0pLHBbMF0pe2Nhc2UgMDpjYXNlIDE6Tj1wO2JyZWFrO2Nhc2UgNDpyZXR1cm4gZy5sYWJlbCsrLHt2YWx1ZTpwWzFdLGRvbmU6ITF9O2Nhc2UgNTpnLmxhYmVsKysseD1wWzFdLHA9WzBdO2NvbnRpbnVlO2Nhc2UgNzpwPWcub3BzLnBvcCgpLGcudHJ5cy5w'@;
put 'b3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKE49KE49Zy50cnlzKS5sZW5ndGg+MCYmTltOLmxlbmd0aC0xXSl8fDYhPT1wWzBdJiYyIT09cFswXSkpe2c9MDtjb250aW51ZX1pZigzPT09cFswXSYmKCFOfHxwWzFdPk5bMF0mJnBbMV08TlszXSkpe2cubGFiZWw9cFsxXTticmVha31pZig2'@;
put 'PT09cFswXSYmZy5sYWJlbDxOWzFdKXtnLmxhYmVsPU5bMV0sTj1wO2JyZWFrfWlmKE4mJmcubGFiZWw8TlsyXSl7Zy5sYWJlbD1OWzJdLGcub3BzLnB1c2gocCk7YnJlYWt9TlsyXSYmZy5vcHMucG9wKCksZy50cnlzLnBvcCgpO2NvbnRpbnVlfXA9WS5jYWxsKGNlLGcpfWNhdGNoKFMpe3A9'@;
put 'WzYsU10seD0wfWZpbmFsbHl7Yj1OPTB9aWYoNSZwWzBdKXRocm93IHBbMV07cmV0dXJue3ZhbHVlOnBbMF0/cFsxXTp2b2lkIDAsZG9uZTohMH19KFtNLHldKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQi5TQVNWaXlhQXBpQ2xpZW50PXZv'@;
put 'aWQgMDt2YXIgRT1MKDU5MjgpLHo9TCg2MjMwKSxqPUwoMTM5NSksVj1MKDY5MDMpLEc9TCg2NzIpLFc9TCg5MDk3KSxVPUwoOTc3OCkscT1MKDEzNDMpLHRlPUwoNzA0KSxuZT1MKDY0OTYpLGllPUwoNTQwMSksbGU9TCgzNTY5KSxkZT1MKDM2NiksdWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBj'@;
put 'ZShZLGIseCxOKXt0aGlzLnNlcnZlclVybD1ZLHRoaXMucm9vdEZvbGRlck5hbWU9Yix0aGlzLmNvbnRleHROYW1lPXgsdGhpcy5yZXF1ZXN0Q2xpZW50PU4sdGhpcy5fZGVidWc9ITEsdGhpcy5zZXNzaW9uTWFuYWdlcj1uZXcgVi5TZXNzaW9uTWFuYWdlcih0aGlzLnNlcnZlclVybCx0aGlz'@;
put 'LmNvbnRleHROYW1lLHRoaXMucmVxdWVzdENsaWVudCksdGhpcy5jb250ZXh0TWFuYWdlcj1uZXcgRy5Db250ZXh0TWFuYWdlcih0aGlzLnNlcnZlclVybCx0aGlzLnJlcXVlc3RDbGllbnQpLHRoaXMuZm9sZGVyTWFwPW5ldyBNYXAsWSYmKDAsRS5pc1VybCkoWSl9cmV0dXJuIGNlLnByb3Rv'@;
put 'dHlwZS5hcHBlbmRSZXF1ZXN0PWZ1bmN0aW9uKFksYix4KXt0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChZLGIseCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjZS5wcm90b3R5cGUsImRlYnVnIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlYnVnfSxzZXQ6ZnVuY3Rp'@;
put 'b24oWSl7dGhpcy5fZGVidWc9WSx0aGlzLnNlc3Npb25NYW5hZ2VyJiYodGhpcy5zZXNzaW9uTWFuYWdlci5kZWJ1Zz1ZKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxjZS5wcm90b3R5cGUuZ2V0Sm9ic0luRm9sZGVyPWZ1bmN0aW9uKFkpe3JldHVybiBJKHRoaXMsdm9pZCAw'@;
put 'LHZvaWQgMCxmdW5jdGlvbigpe3ZhciBiO3JldHVybiBSKHRoaXMsZnVuY3Rpb24oeCl7c3dpdGNoKHgubGFiZWwpe2Nhc2UgMDpyZXR1cm4gYj0oMCxFLmlzUmVsYXRpdmVQYXRoKShZKT8iIi5jb25jYXQodGhpcy5yb290Rm9sZGVyTmFtZSwiLyIpLmNvbmNhdChZKTpZLHRoaXMuZm9sZGVy'@;
put 'TWFwLmdldChiKT9bMix0aGlzLmZvbGRlck1hcC5nZXQoYildOls0LHRoaXMucG9wdWxhdGVGb2xkZXJNYXAoYildO2Nhc2UgMTpyZXR1cm4geC5zZW50KCksWzIsdGhpcy5mb2xkZXJNYXAuZ2V0KGIpXX19KX0pfSxjZS5wcm90b3R5cGUuZ2V0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJue3Nl'@;
put 'cnZlclVybDp0aGlzLnNlcnZlclVybCxyb290Rm9sZGVyTmFtZTp0aGlzLnJvb3RGb2xkZXJOYW1lfX0sY2UucHJvdG90eXBlLnNldENvbmZpZz1mdW5jdGlvbihZLGIpe1kmJih0aGlzLnNlcnZlclVybD1ZKSxiJiYodGhpcy5yb290Rm9sZGVyTmFtZT1iKX0sY2UucHJvdG90eXBlLmdldENv'@;
put 'bXB1dGVDb250ZXh0cz1mdW5jdGlvbihZKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gUih0aGlzLGZ1bmN0aW9uKGIpe3N3aXRjaChiLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5jb250ZXh0TWFuYWdlci5nZXRDb21wdXRlQ29udGV4dHMoWSld'@;
put 'O2Nhc2UgMTpyZXR1cm5bMixiLnNlbnQoKV19fSl9KX0sY2UucHJvdG90eXBlLmdldERlZmF1bHRDb21wdXRlQ29udGV4dHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250ZXh0TWFuYWdlci5nZXREZWZhdWx0Q29tcHV0ZUNvbnRleHRzfSxjZS5wcm90b3R5cGUuZ2V0TGF1bmNoZXJDb250'@;
put 'ZXh0cz1mdW5jdGlvbihZKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gUih0aGlzLGZ1bmN0aW9uKGIpe3N3aXRjaChiLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5jb250ZXh0TWFuYWdlci5nZXRMYXVuY2hlckNvbnRleHRzKFkpXTtjYXNlIDE6'@;
put 'cmV0dXJuWzIsYi5zZW50KCldfX0pfSl9LGNlLnByb3RvdHlwZS5nZXRFeGVjdXRhYmxlQ29udGV4dHM9ZnVuY3Rpb24oWSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGI7cmV0dXJuIFIodGhpcyxmdW5jdGlvbih4KXtzd2l0Y2goeC5sYWJlbCl7Y2FzZSAw'@;
put 'OnJldHVybiBiPXRoaXMuZXhlY3V0ZVNjcmlwdC5iaW5kKHRoaXMpLFs0LHRoaXMuY29udGV4dE1hbmFnZXIuZ2V0RXhlY3V0YWJsZUNvbnRleHRzKGIsWSldO2Nhc2UgMTpyZXR1cm5bMix4LnNlbnQoKV19fSl9KX0sY2UucHJvdG90eXBlLmNyZWF0ZVNlc3Npb249ZnVuY3Rpb24oWSxiKXty'@;
put 'ZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgeCxOLEY7cmV0dXJuIFIodGhpcyxmdW5jdGlvbihnKXtzd2l0Y2goZy5sYWJlbCl7Y2FzZSAwOnJldHVybiB4PXsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGImJih4LkF1dGhvcml6YXRpb249IkJl'@;
put 'YXJlciAiLmNvbmNhdChiKSksWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiL2NvbXB1dGUvY29udGV4dHM/bGltaXQ9MTAwMDAiLGIpXTtjYXNlIDE6aWYoTj1nLnNlbnQoKS5yZXN1bHQsIShGPU4uaXRlbXMmJk4uaXRlbXMubGVuZ3RoP04uaXRlbXMuZmluZChmdW5jdGlvbihDKXtyZXR1'@;
put 'cm4gQy5uYW1lPT09WX0pOm51bGwpKXRocm93IG5ldyBFcnJvcigiRXhlY3V0aW9uIGNvbnRleHQgIi5jb25jYXQoWSwiIG5vdCBmb3VuZC4iKSk7cmV0dXJuWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoIi9jb21wdXRlL2NvbnRleHRzLyIuY29uY2F0KEYuaWQsIi9zZXNzaW9ucyIpLHt9'@;
put 'LGIpXTtjYXNlIDI6cmV0dXJuWzIsZy5zZW50KCkucmVzdWx0XX19KX0pfSxjZS5wcm90b3R5cGUuY3JlYXRlQ29tcHV0ZUNvbnRleHQ9ZnVuY3Rpb24oWSxiLHgsTixGLGcpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBSKHRoaXMsZnVuY3Rpb24oQyl7'@;
put 'c3dpdGNoKEMubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmNvbnRleHRNYW5hZ2VyLmNyZWF0ZUNvbXB1dGVDb250ZXh0KFksYix4LE4sRixnKV07Y2FzZSAxOnJldHVyblsyLEMuc2VudCgpXX19KX0pfSxjZS5wcm90b3R5cGUuY3JlYXRlTGF1bmNoZXJDb250ZXh0PWZ1bmN0aW9uKFks'@;
put 'Yix4LE4pe3JldHVybiB2b2lkIDA9PT14JiYoeD0iZGlyZWN0IiksSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gUih0aGlzLGZ1bmN0aW9uKEYpe3N3aXRjaChGLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5jb250ZXh0TWFuYWdlci5jcmVhdGVMYXVuY2hlckNv'@;
put 'bnRleHQoWSxiLHgsTildO2Nhc2UgMTpyZXR1cm5bMixGLnNlbnQoKV19fSl9KX0sY2UucHJvdG90eXBlLmVkaXRDb21wdXRlQ29udGV4dD1mdW5jdGlvbihZLGIseCl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIFIodGhpcyxmdW5jdGlvbihOKXtzd2l0'@;
put 'Y2goTi5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMuY29udGV4dE1hbmFnZXIuZWRpdENvbXB1dGVDb250ZXh0KFksYix4KV07Y2FzZSAxOnJldHVyblsyLE4uc2VudCgpXX19KX0pfSxjZS5wcm90b3R5cGUuZGVsZXRlQ29tcHV0ZUNvbnRleHQ9ZnVuY3Rpb24oWSxiKXtyZXR1cm4gSSh0'@;
put 'aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gUih0aGlzLGZ1bmN0aW9uKHgpe3N3aXRjaCh4LmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5jb250ZXh0TWFuYWdlci5kZWxldGVDb21wdXRlQ29udGV4dChZLGIpXTtjYXNlIDE6cmV0dXJuWzIseC5zZW50KCldfX0pfSl9'@;
put 'LGNlLnByb3RvdHlwZS5leGVjdXRlU2NyaXB0PWZ1bmN0aW9uKFksYix4LE4sRixnLEMsTSx5LHAsUyl7cmV0dXJuIHZvaWQgMD09PUYmJihGPW51bGwpLHZvaWQgMD09PWcmJihnPSExKSx2b2lkIDA9PT1DJiYoQz0hMSksdm9pZCAwPT09TSYmKE09ITApLHZvaWQgMD09PXAmJihwPSExKSxJ'@;
put 'KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBSKHRoaXMsZnVuY3Rpb24oUSl7cmV0dXJuWzIsKDAsaWUuZXhlY3V0ZVNjcmlwdCkodGhpcy5yZXF1ZXN0Q2xpZW50LHRoaXMuc2Vzc2lvbk1hbmFnZXIsdGhpcy5yb290Rm9sZGVyTmFtZSxZLGIseCxOLEYsZyxDLE0seSxw'@;
put 'LFMpXX0pfSl9LGNlLnByb3RvdHlwZS5nZXRGb2xkZXI9ZnVuY3Rpb24oWSxiKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gUih0aGlzLGZ1bmN0aW9uKHgpe3N3aXRjaCh4LmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5yZXF1ZXN0Q2xpZW50Lmdl'@;
put 'dCgiL2ZvbGRlcnMvZm9sZGVycy9AaXRlbT9wYXRoPSIuY29uY2F0KFkpLGIpLnRoZW4oZnVuY3Rpb24oTil7cmV0dXJuIE4ucmVzdWx0fSldO2Nhc2UgMTpyZXR1cm5bMix4LnNlbnQoKV19fSl9KX0sY2UucHJvdG90eXBlLmNyZWF0ZUZpbGU9ZnVuY3Rpb24oWSxiLHgsTixGKXtyZXR1cm4g'@;
put 'SSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgZyxDO3JldHVybiBSKHRoaXMsZnVuY3Rpb24oTSl7c3dpdGNoKE0ubGFiZWwpe2Nhc2UgMDppZigheCYmIU4pdGhyb3cgbmV3IEVycm9yKCJQYXRoIG9yIFVSSSBvZiB0aGUgcGFyZW50IGZvbGRlciBpcyByZXF1aXJlZC4iKTty'@;
put 'ZXR1cm4gTnx8IXg/WzMsMl06WzQsdGhpcy5nZXRGb2xkZXJVcmkoeCxGKV07Y2FzZSAxOk49TS5zZW50KCksTS5sYWJlbD0yO2Nhc2UgMjpyZXR1cm4gZz17QWNjZXB0OiJhcHBsaWNhdGlvbi92bmQuc2FzLmZpbGUranNvbiIsIkNvbnRlbnQtRGlzcG9zaXRpb24iOidmaWxlbmFtZT0iJy5j'@;
put 'b25jYXQoWSwnIjsnKX0sKEM9bmV3IHopLmFwcGVuZCgiZmlsZSIsYixZKSxbNCx0aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiL2ZpbGVzL2ZpbGVzP3BhcmVudEZvbGRlclVyaT0iLmNvbmNhdChOLCImdHlwZURlZk5hbWU9ZmlsZSNyYXdVcGxvYWQiKSxDLEYsIm11bHRpcGFydC9mb3JtLWRh'@;
put 'dGE7IGJvdW5kYXJ5PSIrQy5fYm91bmRhcnksZyldO2Nhc2UgMzpyZXR1cm5bMixNLnNlbnQoKS5yZXN1bHRdfX0pfSl9LGNlLnByb3RvdHlwZS5jcmVhdGVGb2xkZXI9ZnVuY3Rpb24oWSxiLHgsTixGKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgZyxDLE0s'@;
put 'eSxTO3JldHVybiBSKHRoaXMsZnVuY3Rpb24oUSl7c3dpdGNoKFEubGFiZWwpe2Nhc2UgMDppZihnPUsubG9nZ2VyfHxKLCFiJiYheCl0aHJvdyBuZXcgRXJyb3IoIlBhdGggb3IgVVJJIG9mIHRoZSBwYXJlbnQgZm9sZGVyIGlzIHJlcXVpcmVkLiIpO3JldHVybiB4fHwhYj9bMyw2XTpbNCx0'@;
put 'aGlzLmdldEZvbGRlclVyaShiLE4pXTtjYXNlIDE6aWYoeD1RLnNlbnQoKSlyZXR1cm5bMywzXTtpZihnLmluZm8oIlBhcmVudCBmb2xkZXIgYXQgcGF0aCAnIi5jb25jYXQoYiwiJyBpcyBub3QgcHJlc2VudC4iKSksQz1iLnN1YnN0cmluZygwLGIubGFzdEluZGV4T2YoIi8iKSksTT0iIi5j'@;
put 'b25jYXQoYi5zcGxpdCgiLyIpLnBvcCgpKSwiIj09PUMpdGhyb3cgbmV3IGouUm9vdEZvbGRlck5vdEZvdW5kRXJyb3IoYix0aGlzLnNlcnZlclVybCxOKTtyZXR1cm4gZy5pbmZvKCJDcmVhdGluZyBwYXJlbnQgZm9sZGVyOlxuJyIuY29uY2F0KE0sIicgaW4gJyIpLmNvbmNhdChDLCInIikp'@;
put 'LFs0LHRoaXMuY3JlYXRlRm9sZGVyKE0sQyx2b2lkIDAsTildO2Nhc2UgMjpyZXR1cm4geT1RLnNlbnQoKSxnLmluZm8oIlBhcmVudCBmb2xkZXIgJyIuY29uY2F0KE0sIicgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQuIikpLHg9Ii9mb2xkZXJzL2ZvbGRlcnMvIi5jb25jYXQoeS5p'@;
put 'ZCksWzMsNl07Y2FzZSAzOnJldHVybiBGP1s0LHRoaXMuZ2V0Rm9sZGVyVXJpKGIrIi8iK1ksTildOlszLDZdO2Nhc2UgNDpyZXR1cm4gUS5zZW50KCk/WzQsdGhpcy5kZWxldGVGb2xkZXIoYisiLyIrWSxOKV06WzMsNl07Y2FzZSA1OlEuc2VudCgpLFEubGFiZWw9NjtjYXNlIDY6cmV0dXJu'@;
put 'WzQsdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoIi9mb2xkZXJzL2ZvbGRlcnM/cGFyZW50Rm9sZGVyVXJpPSIuY29uY2F0KHgpLHtuYW1lOlksdHlwZToiZm9sZGVyIn0sTikuY2F0Y2goZnVuY3Rpb24ocmUpe3ZhciBmZT1yZS5tZXNzYWdlLG1lPXJlLnJlc3BvbnNlO2lmKGZlJiZtZSYmbWUu'@;
put 'ZGF0YSYmbWUuZGF0YS5tZXNzYWdlKXt2YXIga2U9bWUuc3RhdHVzLFRlPVtmZSxtZS5kYXRhLm1lc3NhZ2VdLm1hcChmdW5jdGlvbihQZSl7cmV0dXJuL1wuJC8udGVzdChQZSk/UGU6IiIuY29uY2F0KFBlLCIuIil9KTt0aHJvdyBGfHw0MDkhPT1rZXx8VGUucHVzaCgnVG8gb3ZlcnJpZGUs'@;
put 'IHBsZWFzZSBzZXQgImlzRm9yY2VkIiB0byAidHJ1ZSIuJyksVGUuam9pbigiICIpfXRocm93IHJlfSldO2Nhc2UgNzpyZXR1cm4gUz1RLnNlbnQoKS5yZXN1bHQsWzQsdGhpcy5wb3B1bGF0ZUZvbGRlck1hcCgiIi5jb25jYXQoYiwiLyIpLmNvbmNhdChZKSxOKV07Y2FzZSA4OnJldHVybiBR'@;
put 'LnNlbnQoKSxbMixTXX19KX0pfSxjZS5wcm90b3R5cGUuY3JlYXRlSm9iRGVmaW5pdGlvbj1mdW5jdGlvbihZLGIseCxOLEYpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBSKHRoaXMsZnVuY3Rpb24oZyl7c3dpdGNoKGcubGFiZWwpe2Nhc2UgMDppZigh'@;
put 'eCYmIU4pdGhyb3cgbmV3IEVycm9yKCJQYXRoIHRvIG9yIFVSSSBvZiB0aGUgcGFyZW50IGZvbGRlciBpcyByZXF1aXJlZC4iKTtyZXR1cm4gTnx8IXg/WzMsMl06WzQsdGhpcy5nZXRGb2xkZXJVcmkoeCxGKV07Y2FzZSAxOk49Zy5zZW50KCksZy5sYWJlbD0yO2Nhc2UgMjpyZXR1cm5bNCx0'@;
put 'aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9qb2JEZWZpbml0aW9ucy9kZWZpbml0aW9ucz9wYXJlbnRGb2xkZXJVcmk9IikuY29uY2F0KE4pLHtuYW1lOlkscGFyYW1ldGVyczpbe25hbWU6Il9hZGRqZXNiZWdpbmVuZG1hY3JvcyIsdHlwZToiQ0hB'@;
put 'UkFDVEVSIixkZWZhdWx0VmFsdWU6ImZhbHNlIn1dLHR5cGU6IkNvbXB1dGUiLGNvZGU6Yn0sRildO2Nhc2UgMzpyZXR1cm5bMixnLnNlbnQoKV19fSl9KX0sY2UucHJvdG90eXBlLmdldEF1dGhDb2RlPWZ1bmN0aW9uKFkpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigp'@;
put 'e3ZhciBiLHg9dGhpcztyZXR1cm4gUih0aGlzLGZ1bmN0aW9uKE4pe3N3aXRjaChOLmxhYmVsKXtjYXNlIDA6cmV0dXJuIGI9IiIuY29uY2F0KHRoaXMuc2VydmVyVXJsLCIvU0FTTG9nb24vb2F1dGgvYXV0aG9yaXplP2NsaWVudF9pZD0iKS5jb25jYXQoWSwiJnJlc3BvbnNlX3R5cGU9Y29k'@;
put 'ZSIpLFs0LHRoaXMucmVxdWVzdENsaWVudC5nZXQoYix2b2lkIDAsInRleHQvcGxhaW4iKS50aGVuKGZ1bmN0aW9uKEYpe3JldHVybiBGLnJlc3VsdH0pLnRoZW4oZnVuY3Rpb24oRil7cmV0dXJuIEkoeCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGcsQyxNLHk7cmV0dXJuIFIodGhp'@;
put 'cyxmdW5jdGlvbihwKXtzd2l0Y2gocC5sYWJlbCl7Y2FzZSAwOnJldHVybiBnPSIiLCgwLFcuaXNBdXRob3JpemVGb3JtUmVxdWlyZWQpKEYpP1s0LHRoaXMucmVxdWVzdENsaWVudC5hdXRob3JpemUoRildOlszLDJdO2Nhc2UgMTpyZXR1cm4gQz1wLnNlbnQoKSxNPUMuc3BsaXQoIjxib2R5'@;
put 'PiIpWzFdLnNwbGl0KCI8L2JvZHk+IilbMF0sKHk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLmlubmVySFRNTD1NLFsyLGc9eS5xdWVyeVNlbGVjdG9yKCIuaW5mb2JveCBoNCIpLmlubmVyVGV4dF07Y2FzZSAyOnJldHVybiBNPUYuc3BsaXQoIjxib2R5PiIpWzFdLnNwbGl0KCI8'@;
put 'L2JvZHk+IilbMF0sKHk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLmlubmVySFRNTD1NLHkmJihnPXkucXVlcnlTZWxlY3RvcigiLmluZm9ib3ggaDQiKS5pbm5lclRleHQpLFsyLGddfX0pfSl9KS5jYXRjaChmdW5jdGlvbigpe3JldHVybiBudWxsfSldO2Nhc2UgMTpyZXR1cm5b'@;
put 'MixOLnNlbnQoKV19fSl9KX0sY2UucHJvdG90eXBlLmdldEFjY2Vzc1Rva2VuPWZ1bmN0aW9uKFksYix4KXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gUih0aGlzLGZ1bmN0aW9uKE4pe3JldHVyblsyLCgwLGxlLmdldEFjY2Vzc1Rva2VuRm9yVml5YSko'@;
put 'dGhpcy5yZXF1ZXN0Q2xpZW50LFksYix4KV19KX0pfSxjZS5wcm90b3R5cGUucmVmcmVzaFRva2Vucz1mdW5jdGlvbihZLGIseCl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIFIodGhpcyxmdW5jdGlvbihOKXtyZXR1cm5bMiwoMCxkZS5yZWZyZXNoVG9r'@;
put 'ZW5zRm9yVml5YSkodGhpcy5yZXF1ZXN0Q2xpZW50LFksYix4KV19KX0pfSxjZS5wcm90b3R5cGUuZGVsZXRlQ2xpZW50PWZ1bmN0aW9uKFksYil7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHgsTjtyZXR1cm4gUih0aGlzLGZ1bmN0aW9uKEYpe3N3aXRjaChG'@;
put 'LmxhYmVsKXtjYXNlIDA6cmV0dXJuIHg9dGhpcy5zZXJ2ZXJVcmwrIi9vYXV0aC9jbGllbnRzLyIuY29uY2F0KFkpLE49e30sYiYmKE4uQXV0aG9yaXphdGlvbj0iQmVhcmVyICIuY29uY2F0KGIpKSxbNCx0aGlzLnJlcXVlc3RDbGllbnQuZGVsZXRlKHgsYildO2Nhc2UgMTpyZXR1cm5bMixG'@;
put 'LnNlbnQoKS5yZXN1bHRdfX0pfSl9LGNlLnByb3RvdHlwZS5leGVjdXRlQ29tcHV0ZUpvYj1mdW5jdGlvbihZLGIseCxOLEYsZyxDLE0seSxwKXtyZXR1cm4gdm9pZCAwPT09ZyYmKGc9ITApLHZvaWQgMD09PUMmJihDPSExKSx2b2lkIDA9PT15JiYoeT0hMSksSSh0aGlzLHZvaWQgMCx2b2lk'@;
put 'IDAsZnVuY3Rpb24oKXt2YXIgUyxRLHJlLGZlLG1lLGtlLFRlLFBlLEZlLE5lLExlO3JldHVybiBSKHRoaXMsZnVuY3Rpb24oQmUpe3N3aXRjaChCZS5sYWJlbCl7Y2FzZSAwOnJldHVybiBTPShGfHx7fSkuYWNjZXNzX3Rva2VuLEY/WzQsKDAsdGUuZ2V0VG9rZW5zKSh0aGlzLnJlcXVlc3RD'@;
put 'bGllbnQsRildOlszLDJdO2Nhc2UgMTpTPUJlLnNlbnQoKS5hY2Nlc3NfdG9rZW4sQmUubGFiZWw9MjtjYXNlIDI6aWYoKDAsRS5pc1JlbGF0aXZlUGF0aCkoWSkmJiF0aGlzLnJvb3RGb2xkZXJOYW1lKXRocm93IG5ldyBFcnJvcigiUmVsYXRpdmUgcGF0aHMgY2Fubm90IGJlIHVzZWQgd2l0'@;
put 'aG91dCBzcGVjaWZ5aW5nIGEgcm9vdCBmb2xkZXIgbmFtZSIpO3JldHVybiBRPVkuc3BsaXQoIi8iKSxyZT1RLnBvcCgpLGZlPVEuam9pbigiLyIpLG1lPSgwLEUuaXNSZWxhdGl2ZVBhdGgpKFkpPyIiLmNvbmNhdCh0aGlzLnJvb3RGb2xkZXJOYW1lLCIvIikuY29uY2F0KGZlKTpmZSxbNCx0'@;
put 'aGlzLnBvcHVsYXRlRm9sZGVyTWFwKG1lLFMpLmNhdGNoKGZ1bmN0aW9uKEhlKXt0aHJvdygwLFUucHJlZml4TWVzc2FnZSkoSGUsIkVycm9yIHdoaWxlIHBvcHVsYXRpbmcgZm9sZGVyIG1hcC4gIil9KV07Y2FzZSAzOmlmKEJlLnNlbnQoKSwhKGtlPXRoaXMuZm9sZGVyTWFwLmdldChtZSkp'@;
put 'KXRocm93IG5ldyBFcnJvcigiVGhlIGZvbGRlciAnIi5jb25jYXQobWUsIicgd2FzIG5vdCBmb3VuZCBvbiAnIikuY29uY2F0KHRoaXMuc2VydmVyVXJsLCInIikpO2lmKCEoVGU9a2U/LmZpbmQoZnVuY3Rpb24oSGUpe3JldHVybiBIZS5uYW1lPT09cmV9KSkpdGhyb3cgbmV3IEVycm9yKCJK'@;
put 'b2Igd2FzIG5vdCBmb3VuZC4iKTtpZihQZT1UZT8uY29kZSlyZXR1cm5bMyw1XTtpZighKEZlPVRlPy5saW5rcy5maW5kKGZ1bmN0aW9uKEhlKXtyZXR1cm4iZ2V0UmVzb3VyY2UiPT09SGUucmVsfSkpKXRocm93IG5ldyBFcnJvcigiVVJJIG9mIGpvYiBkZWZpbml0aW9uIHdhcyBub3QgZm91'@;
put 'bmQuIik7cmV0dXJuWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwpLmNvbmNhdChGZS5ocmVmKSxTKS5jYXRjaChmdW5jdGlvbihIZSl7dGhyb3coMCxVLnByZWZpeE1lc3NhZ2UpKEhlLCJFcnJvciB3aGlsZSBnZXR0aW5nIGpvYiBkZWZpbml0aW9u'@;
put 'LiAiKX0pXTtjYXNlIDQ6TmU9QmUuc2VudCgpLnJlc3VsdCxUZS5jb2RlPVBlPU5lLmNvZGUsQmUubGFiZWw9NTtjYXNlIDU6cmV0dXJuIFBlfHwoUGU9IiIpLExlPVBlLnJlcGxhY2UoL1xyXG4vZywiXG4iKS5zcGxpdCgiXG4iKSxbNCx0aGlzLmV4ZWN1dGVTY3JpcHQoWSxMZSxiLEYsTix4'@;
put 'LEMsZyxNLHkscCldO2Nhc2UgNjpyZXR1cm5bMixCZS5zZW50KCldfX0pfSl9LGNlLnByb3RvdHlwZS5leGVjdXRlSm9iPWZ1bmN0aW9uKFksYix4LE4sRil7dmFyIGcsQyxNO3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciB5LHAsUyxRLHJlLGZlLG1lLGtlLFRl'@;
put 'LFBlLEZlLE5lLExlLEJlLEhlLFFlLG10LEtlLHdlO3JldHVybiBSKHRoaXMsZnVuY3Rpb24oSWUpe3N3aXRjaChJZS5sYWJlbCl7Y2FzZSAwOnJldHVybiB5PShGfHx7fSkuYWNjZXNzX3Rva2VuLEY/WzQsKDAsdGUuZ2V0VG9rZW5zKSh0aGlzLnJlcXVlc3RDbGllbnQsRildOlszLDJdO2Nh'@;
put 'c2UgMTp5PUllLnNlbnQoKS5hY2Nlc3NfdG9rZW4sSWUubGFiZWw9MjtjYXNlIDI6aWYoKDAsRS5pc1JlbGF0aXZlUGF0aCkoWSkmJiF0aGlzLnJvb3RGb2xkZXJOYW1lKXRocm93IG5ldyBFcnJvcigiUmVsYXRpdmUgcGF0aHMgY2Fubm90IGJlIHVzZWQgd2l0aG91dCBzcGVjaWZ5aW5nIGEg'@;
put 'cm9vdCBmb2xkZXIgbmFtZS4iKTtyZXR1cm4gcD1ZLnNwbGl0KCIvIiksUz1wLnBvcCgpLFE9cC5qb2luKCIvIikscmU9KDAsRS5pc1JlbGF0aXZlUGF0aCkoWSk/IiIuY29uY2F0KHRoaXMucm9vdEZvbGRlck5hbWUsIi8iKS5jb25jYXQoUSk6USxbNCx0aGlzLnBvcHVsYXRlRm9sZGVyTWFw'@;
put 'KHJlLHkpXTtjYXNlIDM6aWYoSWUuc2VudCgpLCEoZmU9dGhpcy5mb2xkZXJNYXAuZ2V0KHJlKSkpdGhyb3cgbmV3IEVycm9yKCJUaGUgZm9sZGVyICciLmNvbmNhdChyZSwiJyB3YXMgbm90IGZvdW5kIG9uICciKS5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIicuIikpO3JldHVybiBtZT1mZT8u'@;
put 'ZmluZChmdW5jdGlvbihPZSl7cmV0dXJuIE9lLm5hbWU9PT1TfSksa2U9W10sTiYmT2JqZWN0LmtleXMoTikubGVuZ3RoP1s0LHRoaXMudXBsb2FkVGFibGVzKE4seSldOlszLDVdO2Nhc2UgNDprZT1JZS5zZW50KCksSWUubGFiZWw9NTtjYXNlIDU6aWYoIW1lKXRocm93IG5ldyBFcnJvcigi'@;
put 'Sm9iIHdhcyBub3QgZm91bmQuIik7cmV0dXJuIFRlPW51bGw9PT0oZz1tZT8ubGlua3MuZmluZChmdW5jdGlvbihPZSl7cmV0dXJuImdldFJlc291cmNlIj09PU9lLnJlbH0pKXx8dm9pZCAwPT09Zz92b2lkIDA6Zy5ocmVmLFs0LHRoaXMucmVxdWVzdENsaWVudC5nZXQoIiIuY29uY2F0KHRo'@;
put 'aXMuc2VydmVyVXJsKS5jb25jYXQoVGUpLHkpXTtjYXNlIDY6cmV0dXJuIFBlPUllLnNlbnQoKS5yZXN1bHQsRmU9e19jb250ZXh0TmFtZTpiLF9wcm9ncmFtOiIiLmNvbmNhdChyZSwiLyIpLmNvbmNhdChTKSxfd2ViaW5fZmlsZV9jb3VudDprZS5sZW5ndGgsX09NSVRKU09OTElTVElORzoh'@;
put 'MCxfT01JVEpTT05MT0c6ITAsX09NSVRTRVNTSU9OUkVTVUxUUzohMCxfT01JVFRFWFRMSVNUSU5HOiEwLF9PTUlUVEVYVExPRzohMH0seCYmKEZlLl9PTUlUVEVYVExPRz0iZmFsc2UiLEZlLl9PTUlUU0VTU0lPTlJFU1VMVFM9ImZhbHNlIixGZS5fREVCVUc9MTMxKSxrZS5mb3JFYWNoKGZ1'@;
put 'bmN0aW9uKE9lLGV0KXtGZVsiX3dlYmluX2ZpbGV1cmkiLmNvbmNhdChldCsxKV09Ii9maWxlcy9maWxlcy8iLmNvbmNhdChPZS5maWxlLmlkKSxGZVsiX3dlYmluX25hbWUiLmNvbmNhdChldCsxKV09T2UudGFibGVOYW1lfSksTmU9e25hbWU6ImV4ZWMtIi5jb25jYXQoUyksZGVzY3JpcHRp'@;
put 'b246IlBvd2VyZWQgYnkgU0FTanMiLGpvYkRlZmluaXRpb246UGUsYXJndW1lbnRzOkZlfSxbNCx0aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9qb2JFeGVjdXRpb24vam9icz9fYWN0aW9uPXdhaXQiKSxOZSx5KV07Y2FzZSA3OnJldHVybiBMZT1J'@;
put 'ZS5zZW50KCkucmVzdWx0LFs0LHRoaXMucG9sbEpvYlN0YXRlKExlLEYpLmNhdGNoKGZ1bmN0aW9uKE9lKXt0aHJvdygwLFUucHJlZml4TWVzc2FnZSkoT2UsIkVycm9yIHdoaWxlIHBvbGxpbmcgam9iIHN0YXR1cy4gIil9KV07Y2FzZSA4OnJldHVybiBCZT1JZS5zZW50KCksWzQsdGhpcy5y'@;
put 'ZXF1ZXN0Q2xpZW50LmdldCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9qb2JFeGVjdXRpb24vam9icy8iKS5jb25jYXQoTGUuaWQpLHkpXTtjYXNlIDk6cmV0dXJuIEhlPUllLnNlbnQoKS5yZXN1bHQsS2U9SGUucmVzdWx0c1siX3dlYm91dC5qc29uIl0sd2U9SGUubGlua3MuZmluZChm'@;
put 'dW5jdGlvbihPZSl7cmV0dXJuImxvZyI9PT1PZS5yZWx9KSxLZT9bNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCkuY29uY2F0KEtlLCIvY29udGVudCIpLHksInRleHQvcGxhaW4iKV06WzMsMTFdO2Nhc2UgMTA6UWU9SWUuc2VudCgpLEllLmxhYmVs'@;
put 'PTExO2Nhc2UgMTE6cmV0dXJuIHgmJndlP1s0LHRoaXMucmVxdWVzdENsaWVudC5nZXQoIiIuY29uY2F0KHRoaXMuc2VydmVyVXJsKS5jb25jYXQod2UuaHJlZiwiL2NvbnRlbnQiKSx5KS50aGVuKGZ1bmN0aW9uKE9lKXtyZXR1cm4gT2UucmVzdWx0Lml0ZW1zLm1hcChmdW5jdGlvbihldCl7'@;
put 'cmV0dXJuIGV0LmxpbmV9KS5qb2luKCJcbiIpfSldOlszLDEzXTtjYXNlIDEyOm10PUllLnNlbnQoKSxJZS5sYWJlbD0xMztjYXNlIDEzOmlmKCJmYWlsZWQiPT09QmUpdGhyb3cgbmV3IGouSm9iRXhlY3V0aW9uRXJyb3IobnVsbD09PShDPUhlLmVycm9yKXx8dm9pZCAwPT09Qz92b2lkIDA6'@;
put 'Qy5lcnJvckNvZGUsbnVsbD09PShNPUhlLmVycm9yKXx8dm9pZCAwPT09TT92b2lkIDA6TS5tZXNzYWdlLG10KTtyZXR1cm5bMix7cmVzdWx0OlFlPy5yZXN1bHQsbG9nOm10fV19fSl9KX0sY2UucHJvdG90eXBlLnBvcHVsYXRlRm9sZGVyTWFwPWZ1bmN0aW9uKFksYil7cmV0dXJuIEkodGhp'@;
put 'cyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHgsRixnO3JldHVybiBSKHRoaXMsZnVuY3Rpb24oTSl7c3dpdGNoKE0ubGFiZWwpe2Nhc2UgMDpyZXR1cm4geD0oMCxFLmlzUmVsYXRpdmVQYXRoKShZKT8iIi5jb25jYXQodGhpcy5yb290Rm9sZGVyTmFtZSwiLyIpLmNvbmNhdChZKTpZ'@;
put 'LHRoaXMuZm9sZGVyTWFwLmdldCh4KT9bMl06WzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiIi5jb25jYXQoIi9mb2xkZXJzL2ZvbGRlcnMvQGl0ZW0/cGF0aD0iK3gpLGIpLmNhdGNoKGZ1bmN0aW9uKHkpe3Rocm93KDAsVS5wcmVmaXhNZXNzYWdlKSh5LCJFcnJvciB3aGlsZSBnZXR0aW5n'@;
put 'IGZvbGRlci4gIil9KV07Y2FzZSAxOmlmKCEoRj1NLnNlbnQoKS5yZXN1bHQpKXRocm93IG5ldyBFcnJvcigiVGhlIHBhdGggIi5jb25jYXQoeCwiIGRvZXMgbm90IGV4aXN0IG9uICIpLmNvbmNhdCh0aGlzLnNlcnZlclVybCkpO3JldHVybls0LHRoaXMucmVxdWVzdENsaWVudC5nZXQoIi9m'@;
put 'b2xkZXJzL2ZvbGRlcnMvIi5jb25jYXQoRi5pZCwiL21lbWJlcnM/bGltaXQ9IikuY29uY2F0KEYubWVtYmVyQ291bnQ8NTAwPzUwMDpGLm1lbWJlckNvdW50KSxiKS5jYXRjaChmdW5jdGlvbih5KXt0aHJvdygwLFUucHJlZml4TWVzc2FnZSkoeSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBtZW1i'@;
put 'ZXJzLiAiKX0pXTtjYXNlIDI6cmV0dXJuIGc9TS5zZW50KCkucmVzdWx0LHRoaXMuZm9sZGVyTWFwLnNldCh4LGcuaXRlbXMpLFsyXX19KX0pfSxjZS5wcm90b3R5cGUucG9sbEpvYlN0YXRlPWZ1bmN0aW9uKFksYix4KXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gUih0aGlzLGZ1bmN0aW9uKE4pe3JldHVyblsyLCgwLHEucG9sbEpvYlN0YXRlKSh0aGlzLnJlcXVlc3RDbGllbnQsWSx0aGlzLmRlYnVnLGIseCldfSl9KX0sY2UucHJvdG90eXBlLnVwbG9hZFRhYmxlcz1mdW5jdGlvbihZLGIpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxm'@;
put 'dW5jdGlvbigpe3JldHVybiBSKHRoaXMsZnVuY3Rpb24oeCl7cmV0dXJuWzIsKDAsbmUudXBsb2FkVGFibGVzKSh0aGlzLnJlcXVlc3RDbGllbnQsWSxiKV19KX0pfSxjZS5wcm90b3R5cGUuZ2V0Rm9sZGVyRGV0YWlscz1mdW5jdGlvbihZLGIpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQg'@;
put 'MCxmdW5jdGlvbigpe3ZhciB4LE47cmV0dXJuIFIodGhpcyxmdW5jdGlvbihGKXtzd2l0Y2goRi5sYWJlbCl7Y2FzZSAwOnJldHVybiB4PSgwLEUuaXNVcmkpKFkpP1k6Ii9mb2xkZXJzL2ZvbGRlcnMvQGl0ZW0/cGF0aD0iLmNvbmNhdChZKSxbNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIi'@;
put 'LmNvbmNhdCh0aGlzLnNlcnZlclVybCkuY29uY2F0KHgpLGIpLmNhdGNoKGZ1bmN0aW9uKGcpe2lmKGcgaW5zdGFuY2VvZiBqLkNlcnRpZmljYXRlRXJyb3IpdGhyb3cgZztyZXR1cm57cmVzdWx0Om51bGx9fSldO2Nhc2UgMTpyZXR1cm4oTj1GLnNlbnQoKS5yZXN1bHQpP1syLE5dOlsyLHZv'@;
put 'aWQgMF19fSl9KX0sY2UucHJvdG90eXBlLmdldEZvbGRlclVyaT1mdW5jdGlvbihZLGIpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciB4O3JldHVybiBSKHRoaXMsZnVuY3Rpb24oTil7c3dpdGNoKE4ubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmdldEZv'@;
put 'bGRlckRldGFpbHMoWSxiKV07Y2FzZSAxOnJldHVybih4PU4uc2VudCgpKT9bMiwiL2ZvbGRlcnMvZm9sZGVycy8iLmNvbmNhdCh4LmlkKV06WzIsdm9pZCAwXX19KX0pfSxjZS5wcm90b3R5cGUuZ2V0UmVjeWNsZUJpblVyaT1mdW5jdGlvbihZKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lk'@;
put 'IDAsZnVuY3Rpb24oKXt2YXIgYjtyZXR1cm4gUih0aGlzLGZ1bmN0aW9uKHgpe3N3aXRjaCh4LmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwpLmNvbmNhdCgiL2ZvbGRlcnMvZm9sZGVycy9AbXlSZWN5Y2xlQmlu'@;
put 'IiksWSkuY2F0Y2goZnVuY3Rpb24oTil7aWYoTiBpbnN0YW5jZW9mIGouQ2VydGlmaWNhdGVFcnJvcil0aHJvdyBOO3JldHVybntyZXN1bHQ6bnVsbH19KV07Y2FzZSAxOnJldHVybihiPXguc2VudCgpLnJlc3VsdCk/WzIsIi9mb2xkZXJzL2ZvbGRlcnMvIi5jb25jYXQoYi5pZCldOlsyLHZv'@;
put 'aWQgMF19fSl9KX0sY2UucHJvdG90eXBlLmdldENvbXB1dGVDb250ZXh0QnlOYW1lPWZ1bmN0aW9uKFksYil7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIFIodGhpcyxmdW5jdGlvbih4KXtzd2l0Y2goeC5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMu'@;
put 'Y29udGV4dE1hbmFnZXIuZ2V0Q29tcHV0ZUNvbnRleHRCeU5hbWUoWSxiKV07Y2FzZSAxOnJldHVyblsyLHguc2VudCgpXX19KX0pfSxjZS5wcm90b3R5cGUuZ2V0Q29tcHV0ZUNvbnRleHRCeUlkPWZ1bmN0aW9uKFksYil7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIFIodGhpcyxmdW5jdGlvbih4KXtzd2l0Y2goeC5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMuY29udGV4dE1hbmFnZXIuZ2V0Q29tcHV0ZUNvbnRleHRCeUlkKFksYildO2Nhc2UgMTpyZXR1cm5bMix4LnNlbnQoKV19fSl9KX0sY2UucHJvdG90eXBlLmxpc3RGb2xkZXI9ZnVu'@;
put 'Y3Rpb24oWSxiLHgpe3JldHVybiB2b2lkIDA9PT14JiYoeD0yMCksSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgTixGLGc7cmV0dXJuIFIodGhpcyxmdW5jdGlvbihDKXtzd2l0Y2goQy5sYWJlbCl7Y2FzZSAwOnJldHVybigwLEUuaXNVcmkpKFkpPyhGPVksWzMsM10pOlsz'@;
put 'LDFdO2Nhc2UgMTpyZXR1cm5bNCx0aGlzLmdldEZvbGRlclVyaShZLGIpXTtjYXNlIDI6Rj1DLnNlbnQoKSxDLmxhYmVsPTM7Y2FzZSAzOnJldHVybiBOPUYsWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwpLmNvbmNhdChOLCIvbWVtYmVycz9saW1p'@;
put 'dD0iKS5jb25jYXQoeCksYildO2Nhc2UgNDpyZXR1cm4oZz1DLnNlbnQoKS5yZXN1bHQpJiZnLml0ZW1zP1syLGcuaXRlbXMubWFwKGZ1bmN0aW9uKE0pe3JldHVybiBNLm5hbWV9KV06WzIsW11dfX0pfSl9LGNlLnByb3RvdHlwZS5tb3ZlRm9sZGVyPWZ1bmN0aW9uKFksYix4LE4pe3JldHVy'@;
put 'biBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBGLGcsQyxNLHkscDtyZXR1cm4gUih0aGlzLGZ1bmN0aW9uKFMpe3N3aXRjaChTLmxhYmVsKXtjYXNlIDA6cmV0dXJuIEY9WS5zcGxpdCgiLyIpLnBvcCgpLFs0LHRoaXMuZ2V0Rm9sZGVyRGV0YWlscyhiLE4pXTtjYXNlIDE6'@;
put 'cmV0dXJuIFMuc2VudCgpP3g9RjooKGc9Yi5zcGxpdCgiLyIpKS5zcGxpY2UoZy5sZW5ndGgtMSwxKSxiPWcuam9pbigiLyIpKSxbNCx0aGlzLmdldEZvbGRlclVyaShZLE4pXTtjYXNlIDI6cmV0dXJuIEM9Uy5zZW50KCksWzQsdGhpcy5nZXRGb2xkZXJVcmkoYixOKV07Y2FzZSAzOnJldHVy'@;
put 'biBNPVMuc2VudCgpLEM/KHk9Qz8uc3BsaXQoIi8iKS5wb3AoKSxbNCx0aGlzLnJlcXVlc3RDbGllbnQucGF0Y2goIiIuY29uY2F0KHRoaXMuc2VydmVyVXJsKS5jb25jYXQoQykse2lkOnksbmFtZTp4LHBhcmVudEZvbGRlclVyaTpNfSxOKS5jYXRjaChmdW5jdGlvbihRKXt0aHJvdyBRLmNv'@;
put 'ZGUmJiJFTk9URk9VTkQiPT09US5jb2RlP3tib2R5OnttZXNzYWdlOiJGb2xkZXIgJyIuY29uY2F0KFkuc3BsaXQoIi8iKS5wb3AoKSwiJyB3YXMgbm90IGZvdW5kLiIpfX06UX0pXSk6WzIsdm9pZCAwXTtjYXNlIDQ6cmV0dXJuKHA9Uy5zZW50KCkucmVzdWx0KT9bMixwXTpbMix2b2lkIDBd'@;
put 'fX0pfSl9LGNlLnByb3RvdHlwZS5kZWxldGVGb2xkZXI9ZnVuY3Rpb24oWSxiKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgeCxOLEYsZztyZXR1cm4gUih0aGlzLGZ1bmN0aW9uKE0pe3N3aXRjaChNLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5nZXRS'@;
put 'ZWN5Y2xlQmluVXJpKGIpXTtjYXNlIDE6cmV0dXJuIHg9TS5zZW50KCksTj1ZLnNwbGl0KCIvIikucG9wKCl8fCIiLGc9KEY9bmV3IERhdGUpLnRvTG9jYWxlRGF0ZVN0cmluZygpKyIgIitGLnRvTG9jYWxlVGltZVN0cmluZygpLFs0LHRoaXMubW92ZUZvbGRlcihZLHgsTisiICIrZyxiKV07'@;
put 'Y2FzZSAyOnJldHVyblsyLE0uc2VudCgpXX19KX0pfSxjZX0oKTtCLlNBU1ZpeWFBcGlDbGllbnQ9dWV9LDU5NTY6ZnVuY3Rpb24oSCxCLEwpeyJ1c2Ugc3RyaWN0Ijt2YXIgSz10aGlzJiZ0aGlzLl9fYXNzaWdufHxmdW5jdGlvbigpe3JldHVybiBLPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9u'@;
put 'KHVlKXtmb3IodmFyIGNlLFk9MSxiPWFyZ3VtZW50cy5sZW5ndGg7WTxiO1krKylmb3IodmFyIHggaW4gY2U9YXJndW1lbnRzW1ldKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjZSx4KSYmKHVlW3hdPWNlW3hdKTtyZXR1cm4gdWV9LEsuYXBwbHkodGhpcyxhcmd1bWVu'@;
put 'dHMpfSxKPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbih1ZSxjZSxZLGIpe3JldHVybiBuZXcoWXx8KFk9UHJvbWlzZSkpKGZ1bmN0aW9uKHgsTil7ZnVuY3Rpb24gRihNKXt0cnl7QyhiLm5leHQoTSkpfWNhdGNoKHkpe04oeSl9fWZ1bmN0aW9uIGcoTSl7dHJ5e0MoYi50aHJvdyhN'@;
put 'KSl9Y2F0Y2goeSl7Tih5KX19ZnVuY3Rpb24gQyhNKXt2YXIgeTtNLmRvbmU/eChNLnZhbHVlKTooeT1NLnZhbHVlLHkgaW5zdGFuY2VvZiBZP3k6bmV3IFkoZnVuY3Rpb24ocCl7cCh5KX0pKS50aGVuKEYsZyl9QygoYj1iLmFwcGx5KHVlLGNlfHxbXSkpLm5leHQoKSl9KX0sST10aGlzJiZ0'@;
put 'aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbih1ZSxjZSl7dmFyIFksYix4LE4sRj17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZ4WzBdKXRocm93IHhbMV07cmV0dXJuIHhbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gTj17bmV4dDpnKDApLHRocm93OmcoMSkscmV0dXJuOmcoMil9'@;
put 'LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihOW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLE47ZnVuY3Rpb24gZyhDKXtyZXR1cm4gZnVuY3Rpb24oTSl7cmV0dXJuIGZ1bmN0aW9uKHkpe2lmKFkpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlz'@;
put 'IGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7RjspdHJ5e2lmKFk9MSxiJiYoeD0yJnlbMF0/Yi5yZXR1cm46eVswXT9iLnRocm93fHwoKHg9Yi5yZXR1cm4pJiZ4LmNhbGwoYiksMCk6Yi5uZXh0KSYmISh4PXguY2FsbChiLHlbMV0pKS5kb25lKXJldHVybiB4O3N3aXRjaChiPTAseCYmKHk9'@;
put 'WzImeVswXSx4LnZhbHVlXSkseVswXSl7Y2FzZSAwOmNhc2UgMTp4PXk7YnJlYWs7Y2FzZSA0OnJldHVybiBGLmxhYmVsKysse3ZhbHVlOnlbMV0sZG9uZTohMX07Y2FzZSA1OkYubGFiZWwrKyxiPXlbMV0seT1bMF07Y29udGludWU7Y2FzZSA3Onk9Ri5vcHMucG9wKCksRi50cnlzLnBvcCgp'@;
put 'O2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoeD0oeD1GLnRyeXMpLmxlbmd0aD4wJiZ4W3gubGVuZ3RoLTFdKXx8NiE9PXlbMF0mJjIhPT15WzBdKSl7Rj0wO2NvbnRpbnVlfWlmKDM9PT15WzBdJiYoIXh8fHlbMV0+eFswXSYmeVsxXTx4WzNdKSl7Ri5sYWJlbD15WzFdO2JyZWFrfWlmKDY9PT15'@;
put 'WzBdJiZGLmxhYmVsPHhbMV0pe0YubGFiZWw9eFsxXSx4PXk7YnJlYWt9aWYoeCYmRi5sYWJlbDx4WzJdKXtGLmxhYmVsPXhbMl0sRi5vcHMucHVzaCh5KTticmVha314WzJdJiZGLm9wcy5wb3AoKSxGLnRyeXMucG9wKCk7Y29udGludWV9eT1jZS5jYWxsKHVlLEYpfWNhdGNoKHApe3k9WzYs'@;
put 'cF0sYj0wfWZpbmFsbHl7WT14PTB9aWYoNSZ5WzBdKXRocm93IHlbMV07cmV0dXJue3ZhbHVlOnlbMF0/eVsxXTp2b2lkIDAsZG9uZTohMH19KFtDLE1dKX19fSxSPXRoaXMmJnRoaXMuX19zcHJlYWRBcnJheXx8ZnVuY3Rpb24odWUsY2UsWSl7aWYoWXx8Mj09PWFyZ3VtZW50cy5sZW5ndGgp'@;
put 'Zm9yKHZhciBiLHg9MCxOPWNlLmxlbmd0aDt4PE47eCsrKSFiJiZ4IGluIGNlfHwoYnx8KGI9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoY2UsMCx4KSksYlt4XT1jZVt4XSk7cmV0dXJuIHVlLmNvbmNhdChifHxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChjZSkpfTtPYmplY3QuZGVm'@;
put 'aW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEU9TCg1OTI4KSx6PUwoMTIzMCksaj1MKDk4MjEpLFY9TCg4MzA2KSxHPUwoMzQ2NyksVz1MKDE1MjcpLFU9TCgzOTAwKSxxPUwoNDU4OCksdGU9TCgzNjAyKSxuZT1MKDgyMTcpLGllPUwoMTM5NSksbGU9e3NlcnZl'@;
put 'clVybDoiIixwYXRoU0FTSlM6Ii9TQVNqc0FwaS9zdHAvZXhlY3V0ZSIscGF0aFNBUzk6Ii9TQVNTdG9yZWRQcm9jZXNzL2RvIixwYXRoU0FTVml5YToiL1NBU0pvYkV4ZWN1dGlvbiIsYXBwTG9jOiIvUHVibGljL3NlZWRhcHAiLHNlcnZlclR5cGU6VS5TZXJ2ZXJUeXBlLlNhc1ZpeWEsZGVi'@;
put 'dWc6ITEsY29udGV4dE5hbWU6IlNBUyBKb2IgRXhlY3V0aW9uIGNvbXB1dGUgY29udGV4dCIsdXNlQ29tcHV0ZUFwaTpudWxsLGxvZ2luTWVjaGFuaXNtOnouTG9naW5NZWNoYW5pc20uRGVmYXVsdH0sZGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB1ZShjZSl7dmFyIFk9dGhpczt0aGlzLnNhc2pz'@;
put 'Q29uZmlnPW5ldyB6LlNBU2pzQ29uZmlnLHRoaXMuam9ic1BhdGg9IiIsdGhpcy5zYXNWaXlhQXBpQ2xpZW50PW51bGwsdGhpcy5zYXM5QXBpQ2xpZW50PW51bGwsdGhpcy5zYXNKU0FwaUNsaWVudD1udWxsLHRoaXMuZmlsZVVwbG9hZGVyPW51bGwsdGhpcy5hdXRoTWFuYWdlcj1udWxsLHRo'@;
put 'aXMucmVxdWVzdENsaWVudD1udWxsLHRoaXMud2ViSm9iRXhlY3V0b3I9bnVsbCx0aGlzLnNhc2pzSm9iRXhlY3V0b3I9bnVsbCx0aGlzLmNvbXB1dGVKb2JFeGVjdXRvcj1udWxsLHRoaXMuamVzSm9iRXhlY3V0b3I9bnVsbCx0aGlzLnNhczlKb2JFeGVjdXRvcj1udWxsLHRoaXMucmVzZW5k'@;
put 'V2FpdGluZ1JlcXVlc3RzPWZ1bmN0aW9uKCl7cmV0dXJuIEooWSx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGIseCxOLEYsZztyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKEMpe3N3aXRjaChDLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsbnVsbD09PShiPXRoaXMud2ViSm9iRXhlY3V0b3Ip'@;
put 'fHx2b2lkIDA9PT1iP3ZvaWQgMDpiLnJlc2VuZFdhaXRpbmdSZXF1ZXN0cygpXTtjYXNlIDE6cmV0dXJuIEMuc2VudCgpLFs0LG51bGw9PT0oeD10aGlzLmNvbXB1dGVKb2JFeGVjdXRvcil8fHZvaWQgMD09PXg/dm9pZCAwOngucmVzZW5kV2FpdGluZ1JlcXVlc3RzKCldO2Nhc2UgMjpyZXR1'@;
put 'cm4gQy5zZW50KCksWzQsbnVsbD09PShOPXRoaXMuamVzSm9iRXhlY3V0b3IpfHx2b2lkIDA9PT1OP3ZvaWQgMDpOLnJlc2VuZFdhaXRpbmdSZXF1ZXN0cygpXTtjYXNlIDM6cmV0dXJuIEMuc2VudCgpLFs0LG51bGw9PT0oRj10aGlzLmZpbGVVcGxvYWRlcil8fHZvaWQgMD09PUY/dm9pZCAw'@;
put 'OkYucmVzZW5kV2FpdGluZ1JlcXVlc3RzKCldO2Nhc2UgNDpyZXR1cm4gQy5zZW50KCksWzQsbnVsbD09PShnPXRoaXMuc2FzanNKb2JFeGVjdXRvcil8fHZvaWQgMD09PWc/dm9pZCAwOmcucmVzZW5kV2FpdGluZ1JlcXVlc3RzKCldO2Nhc2UgNTpyZXR1cm4gQy5zZW50KCksWzJdfX0pfSl9'@;
put 'LHRoaXMuc2FzanNDb25maWc9SyhLKHt9LGxlKSxjZSksdGhpcy5zZXR1cENvbmZpZ3VyYXRpb24oKX1yZXR1cm4gdWUucHJvdG90eXBlLmdldENzcmZUb2tlbj1mdW5jdGlvbihjZSl7dmFyIFk7cmV0dXJuIHZvaWQgMD09PWNlJiYoY2U9ImdlbmVyYWwiKSxudWxsPT09KFk9dGhpcy5yZXF1'@;
put 'ZXN0Q2xpZW50KXx8dm9pZCAwPT09WT92b2lkIDA6WS5nZXRDc3JmVG9rZW4oY2UpfSx1ZS5wcm90b3R5cGUuZXhlY3V0ZVNjcmlwdD1mdW5jdGlvbihjZSl7dmFyIFksYix4PWNlLmxpbmVzT2ZDb2RlLE49Y2UuZmlsZU5hbWUsRj1jZS5jb250ZXh0TmFtZSxnPWNlLnJ1blRpbWUsQz1jZS5h'@;
put 'dXRoQ29uZmlnLE09Y2UuYXV0aENvbmZpZ1NhczkseT1jZS5kZWJ1ZztyZXR1cm4gSih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKHApe3N3aXRjaChwLmxhYmVsKXtjYXNlIDA6aWYodGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZXhlY3V0ZVNj'@;
put 'cmlwdCIsW1UuU2VydmVyVHlwZS5TYXM5LFUuU2VydmVyVHlwZS5TYXNqcyxVLlNlcnZlclR5cGUuU2FzVml5YV0pLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSE9PVUuU2VydmVyVHlwZS5TYXM5KXJldHVyblszLDJdO2lmKCFNKXRocm93IG5ldyBFcnJvcigiQXV0aCBjb25maWcgZm9y'@;
put 'IHNhczkgaXMgbm90IHByb3ZpZGVkIik7cmV0dXJuWzQsbnVsbD09PShZPXRoaXMuc2FzOUFwaUNsaWVudCl8fHZvaWQgMD09PVk/dm9pZCAwOlkuZXhlY3V0ZVNjcmlwdCh4LE0udXNlck5hbWUsTS5wYXNzd29yZCldO2Nhc2UgMTpjYXNlIDM6Y2FzZSA1OnJldHVyblsyLHAuc2VudCgpXTtj'@;
put 'YXNlIDI6cmV0dXJuIHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSE9PVUuU2VydmVyVHlwZS5TYXNqcz9bMyw0XTpbNCxudWxsPT09KGI9dGhpcy5zYXNKU0FwaUNsaWVudCl8fHZvaWQgMD09PWI/dm9pZCAwOmIuZXhlY3V0ZVNjcmlwdCh4LmpvaW4oIlxuIiksZyxDKV07Y2FzZSA0Omlm'@;
put 'KHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSE9PVUuU2VydmVyVHlwZS5TYXNWaXlhKXJldHVyblszLDZdO2lmKCEoRj1GfHx0aGlzLnNhc2pzQ29uZmlnLmNvbnRleHROYW1lKSl0aHJvdyBuZXcgRXJyb3IoIkNvbnRleHQgbmFtZSBpcyB1bmRlZmluZWQuIFBsZWFzZSBzZXQgYSBgY29u'@;
put 'dGV4dE5hbWVgIGluIHlvdXIgU0FTanMgb3Igb3ZlcnJpZGUgY29uZmlnLiIpO2lmKCFOKXRocm93IG5ldyBFcnJvcigiRmlsZSBuYW1lIGlzIHJlcXVpcmVkIGluIGNhc2Ugb2YgU0FTIFZJWUEuIFBsZWFzZSBwcm92aWRlIGEgYGZpbGVOYW1lYC4iKTtyZXR1cm5bNCx0aGlzLnNhc1ZpeWFB'@;
put 'cGlDbGllbnQuZXhlY3V0ZVNjcmlwdChOLHgsRixDLG51bGwseXx8dGhpcy5zYXNqc0NvbmZpZy5kZWJ1ZyldO2Nhc2UgNjpyZXR1cm5bMl19fSl9KX0sdWUucHJvdG90eXBlLmdldENvbXB1dGVDb250ZXh0cz1mdW5jdGlvbihjZSl7cmV0dXJuIEoodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihZKXtzd2l0Y2goWS5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXRDb21wdXRlQ29udGV4dHMiLFtVLlNlcnZlclR5cGUuU2FzVml5YV0pLFs0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRDb21wdXRl'@;
put 'Q29udGV4dHMoY2UpXTtjYXNlIDE6cmV0dXJuWzIsWS5zZW50KCldfX0pfSl9LHVlLnByb3RvdHlwZS5nZXRMYXVuY2hlckNvbnRleHRzPWZ1bmN0aW9uKGNlKXtyZXR1cm4gSih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKFkpe3N3aXRjaChZ'@;
put 'LmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldExhdW5jaGVyQ29udGV4dHMiLFtVLlNlcnZlclR5cGUuU2FzVml5YV0pLFs0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRMYXVuY2hlckNvbnRleHRzKGNlKV07Y2FzZSAxOnJldHVyblsyLFkuc2VudCgp'@;
put 'XX19KX0pfSx1ZS5wcm90b3R5cGUuZ2V0RGVmYXVsdENvbXB1dGVDb250ZXh0cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXREZWZhdWx0Q29tcHV0ZUNvbnRleHRzIixbVS5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0'@;
put 'RGVmYXVsdENvbXB1dGVDb250ZXh0cygpfSx1ZS5wcm90b3R5cGUuZ2V0RXhlY3V0YWJsZUNvbnRleHRzPWZ1bmN0aW9uKGNlKXtyZXR1cm4gSih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKFkpe3N3aXRjaChZLmxhYmVsKXtjYXNlIDA6cmV0'@;
put 'dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldEV4ZWN1dGFibGVDb250ZXh0cyIsW1UuU2VydmVyVHlwZS5TYXNWaXlhXSksWzQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldEV4ZWN1dGFibGVDb250ZXh0cyhjZSldO2Nhc2UgMTpyZXR1cm5bMixZLnNlbnQoKV19fSl9KX0sdWUucHJv'@;
put 'dG90eXBlLmNyZWF0ZUNvbXB1dGVDb250ZXh0PWZ1bmN0aW9uKGNlLFksYix4LE4sRil7cmV0dXJuIEoodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihnKXtzd2l0Y2goZy5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9y'@;
put 'dGVkKCJjcmVhdGVDb21wdXRlQ29udGV4dCIsW1UuU2VydmVyVHlwZS5TYXNWaXlhXSksWzQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmNyZWF0ZUNvbXB1dGVDb250ZXh0KGNlLFksYix4LE4sRildO2Nhc2UgMTpyZXR1cm5bMixnLnNlbnQoKV19fSl9KX0sdWUucHJvdG90eXBlLmNyZWF0ZUxh'@;
put 'dW5jaGVyQ29udGV4dD1mdW5jdGlvbihjZSxZLGIseCl7cmV0dXJuIEoodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihOKXtzd2l0Y2goTi5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJjcmVhdGVMYXVuY2hl'@;
put 'ckNvbnRleHQiLFtVLlNlcnZlclR5cGUuU2FzVml5YV0pLFs0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5jcmVhdGVMYXVuY2hlckNvbnRleHQoY2UsWSxiLHgpXTtjYXNlIDE6cmV0dXJuWzIsTi5zZW50KCldfX0pfSl9LHVlLnByb3RvdHlwZS5lZGl0Q29tcHV0ZUNvbnRleHQ9ZnVuY3Rpb24o'@;
put 'Y2UsWSxiKXtyZXR1cm4gSih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKHgpe3N3aXRjaCh4LmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImVkaXRDb21wdXRlQ29udGV4dCIsW1UuU2VydmVyVHlwZS5TYXNW'@;
put 'aXlhXSksWzQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmVkaXRDb21wdXRlQ29udGV4dChjZSxZLGIpXTtjYXNlIDE6cmV0dXJuWzIseC5zZW50KCldfX0pfSl9LHVlLnByb3RvdHlwZS5kZWxldGVDb21wdXRlQ29udGV4dD1mdW5jdGlvbihjZSxZKXtyZXR1cm4gSih0aGlzLHZvaWQgMCx2b2lk'@;
put 'IDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKGIpe3N3aXRjaChiLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImRlbGV0ZUNvbXB1dGVDb250ZXh0IixbVS5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSxbNCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQu'@;
put 'ZGVsZXRlQ29tcHV0ZUNvbnRleHQoY2UsWSldO2Nhc2UgMTpyZXR1cm5bMixiLnNlbnQoKV19fSl9KX0sdWUucHJvdG90eXBlLmdldENvbXB1dGVDb250ZXh0QnlOYW1lPWZ1bmN0aW9uKGNlLFkpe3JldHVybiBKKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMs'@;
put 'ZnVuY3Rpb24oYil7c3dpdGNoKGIubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0Q29tcHV0ZUNvbnRleHRCeU5hbWUiLFtVLlNlcnZlclR5cGUuU2FzVml5YV0pLFs0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRDb21wdXRlQ29udGV4dEJ5TmFtZShj'@;
put 'ZSxZKV07Y2FzZSAxOnJldHVyblsyLGIuc2VudCgpXX19KX0pfSx1ZS5wcm90b3R5cGUuZ2V0Q29tcHV0ZUNvbnRleHRCeUlkPWZ1bmN0aW9uKGNlLFkpe3JldHVybiBKKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oYil7c3dpdGNoKGIubGFi'@;
put 'ZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0Q29tcHV0ZUNvbnRleHRCeUlkIixbVS5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSxbNCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0Q29tcHV0ZUNvbnRleHRCeUlkKGNlLFkpXTtjYXNlIDE6cmV0dXJuWzIsYi5zZW50'@;
put 'KCldfX0pfSl9LHVlLnByb3RvdHlwZS5jcmVhdGVTZXNzaW9uPWZ1bmN0aW9uKGNlLFkpe3JldHVybiBKKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oYil7c3dpdGNoKGIubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBv'@;
put 'cnRlZCgiY3JlYXRlU2Vzc2lvbiIsW1UuU2VydmVyVHlwZS5TYXNWaXlhXSksWzQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmNyZWF0ZVNlc3Npb24oY2UsWSldO2Nhc2UgMTpyZXR1cm5bMixiLnNlbnQoKV19fSl9KX0sdWUucHJvdG90eXBlLmNyZWF0ZUZvbGRlcj1mdW5jdGlvbihjZSxZLGIs'@;
put 'eCxOLEYpe3JldHVybiBKKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oZyl7c3dpdGNoKGcubGFiZWwpe2Nhc2UgMDpyZXR1cm4gTj9bNCxOLmNyZWF0ZUZvbGRlcihjZSxZLGIseCxGKV06WzMsMl07Y2FzZSAxOmNhc2UgMzpyZXR1cm5bMixn'@;
put 'LnNlbnQoKV07Y2FzZSAyOnJldHVybls0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5jcmVhdGVGb2xkZXIoY2UsWSxiLHgsRildfX0pfSl9LHVlLnByb3RvdHlwZS5jcmVhdGVGaWxlPWZ1bmN0aW9uKGNlLFksYix4LE4sRil7cmV0dXJuIEoodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIEkodGhpcyxmdW5jdGlvbihnKXtzd2l0Y2goZy5sYWJlbCl7Y2FzZSAwOnJldHVybiBGP1s0LEYuY3JlYXRlRmlsZShjZSxZLGIseCxOKV06WzMsMl07Y2FzZSAxOmNhc2UgMzpyZXR1cm5bMixnLnNlbnQoKV07Y2FzZSAyOnJldHVybls0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5j'@;
put 'cmVhdGVGaWxlKGNlLFksYix4LE4pXX19KX0pfSx1ZS5wcm90b3R5cGUuZ2V0Rm9sZGVyPWZ1bmN0aW9uKGNlLFkpe3JldHVybiBKKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oYil7c3dpdGNoKGIubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhp'@;
put 'cy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0Rm9sZGVyIixbVS5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSxbNCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0Rm9sZGVyKGNlLFkpXTtjYXNlIDE6cmV0dXJuWzIsYi5zZW50KCldfX0pfSl9LHVlLnByb3RvdHlwZS5kZWxldGVGb2xkZXI9ZnVuY3Rpb24o'@;
put 'Y2UsWSl7dmFyIGI7cmV0dXJuIEoodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbih4KXtzd2l0Y2goeC5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJkZWxldGVGb2xkZXIiLFtVLlNlcnZlclR5cGUuU2FzVml5'@;
put 'YV0pLFs0LG51bGw9PT0oYj10aGlzLnNhc1ZpeWFBcGlDbGllbnQpfHx2b2lkIDA9PT1iP3ZvaWQgMDpiLmRlbGV0ZUZvbGRlcihjZSxZKV07Y2FzZSAxOnJldHVyblsyLHguc2VudCgpXX19KX0pfSx1ZS5wcm90b3R5cGUubGlzdEZvbGRlcj1mdW5jdGlvbihjZSxZLGIpe3ZhciB4O3JldHVy'@;
put 'biBKKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oTil7c3dpdGNoKE4ubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgibGlzdEZvbGRlciIsW1UuU2VydmVyVHlwZS5TYXNWaXlhXSksWzQsbnVsbD09PSh4PXRo'@;
put 'aXMuc2FzVml5YUFwaUNsaWVudCl8fHZvaWQgMD09PXg/dm9pZCAwOngubGlzdEZvbGRlcihjZSxZLGIpXTtjYXNlIDE6cmV0dXJuWzIsTi5zZW50KCldfX0pfSl9LHVlLnByb3RvdHlwZS5tb3ZlRm9sZGVyPWZ1bmN0aW9uKGNlLFksYix4KXt2YXIgTjtyZXR1cm4gSih0aGlzLHZvaWQgMCx2'@;
put 'b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKEYpe3N3aXRjaChGLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoIm1vdmVGb2xkZXIiLFtVLlNlcnZlclR5cGUuU2FzVml5YV0pLFs0LG51bGw9PT0oTj10aGlzLnNhc1ZpeWFBcGlDbGll'@;
put 'bnQpfHx2b2lkIDA9PT1OP3ZvaWQgMDpOLm1vdmVGb2xkZXIoY2UsWSxiLHgpXTtjYXNlIDE6cmV0dXJuWzIsRi5zZW50KCldfX0pfSl9LHVlLnByb3RvdHlwZS5jcmVhdGVKb2JEZWZpbml0aW9uPWZ1bmN0aW9uKGNlLFksYix4LE4sRil7cmV0dXJuIEoodGhpcyx2b2lkIDAsdm9pZCAwLGZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihnKXtzd2l0Y2goZy5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJjcmVhdGVKb2JEZWZpbml0aW9uIixbVS5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSxGP1s0LEYuY3JlYXRlSm9iRGVmaW5pdGlvbihjZSxZ'@;
put 'LGIseCxOKV06WzMsMl07Y2FzZSAxOmNhc2UgMzpyZXR1cm5bMixnLnNlbnQoKV07Y2FzZSAyOnJldHVybls0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5jcmVhdGVKb2JEZWZpbml0aW9uKGNlLFksYix4LE4pXX19KX0pfSx1ZS5wcm90b3R5cGUuZ2V0QXV0aENvZGU9ZnVuY3Rpb24oY2Upe3Jl'@;
put 'dHVybiBKKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oWSl7c3dpdGNoKFkubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0QXV0aENvZGUiLFtVLlNlcnZlclR5cGUuU2FzVml5YV0pLFs0LHRoaXMuc2Fz'@;
put 'Vml5YUFwaUNsaWVudC5nZXRBdXRoQ29kZShjZSldO2Nhc2UgMTpyZXR1cm5bMixZLnNlbnQoKV19fSl9KX0sdWUucHJvdG90eXBlLmdldEFjY2Vzc1Rva2VuPWZ1bmN0aW9uKGNlLFksYil7cmV0dXJuIEoodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5j'@;
put 'dGlvbih4KXtzd2l0Y2goeC5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXRBY2Nlc3NUb2tlbiIsW1UuU2VydmVyVHlwZS5TYXNWaXlhLFUuU2VydmVyVHlwZS5TYXNqc10pLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSE9PVUuU2VydmVyVHlwZS5T'@;
put 'YXNqcz9bMywyXTpbNCx0aGlzLnNhc0pTQXBpQ2xpZW50LmdldEFjY2Vzc1Rva2VuKGNlLGIpXTtjYXNlIDE6Y2FzZSAzOnJldHVyblsyLHguc2VudCgpXTtjYXNlIDI6cmV0dXJuWzQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldEFjY2Vzc1Rva2VuKGNlLFksYildfX0pfSl9LHVlLnByb3Rv'@;
put 'dHlwZS5yZWZyZXNoVG9rZW5zPWZ1bmN0aW9uKGNlLFksYil7cmV0dXJuIEoodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbih4KXtzd2l0Y2goeC5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJyZWZyZXNoVG9r'@;
put 'ZW5zIixbVS5TZXJ2ZXJUeXBlLlNhc1ZpeWEsVS5TZXJ2ZXJUeXBlLlNhc2pzXSksdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlIT09VS5TZXJ2ZXJUeXBlLlNhc2pzP1szLDJdOls0LHRoaXMuc2FzSlNBcGlDbGllbnQucmVmcmVzaFRva2VucyhiKV07Y2FzZSAxOmNhc2UgMzpyZXR1cm5b'@;
put 'Mix4LnNlbnQoKV07Y2FzZSAyOnJldHVybls0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5yZWZyZXNoVG9rZW5zKGNlLFksYildfX0pfSl9LHVlLnByb3RvdHlwZS5kZWxldGVDbGllbnQ9ZnVuY3Rpb24oY2UsWSl7cmV0dXJuIEoodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IEkodGhpcyxmdW5jdGlvbihiKXtzd2l0Y2goYi5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJkZWxldGVDbGllbnQiLFtVLlNlcnZlclR5cGUuU2FzVml5YV0pLFs0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5kZWxldGVDbGllbnQoY2UsWSldO2Nhc2UgMTpy'@;
put 'ZXR1cm5bMixiLnNlbnQoKV19fSl9KX0sdWUucHJvdG90eXBlLmdldFNhc2pzQ29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2FzanNDb25maWd9LHVlLnByb3RvdHlwZS5nZXRVc2VyTmFtZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF1dGhNYW5hZ2VyLnVzZXJOYW1lfSx1ZS5wcm90'@;
put 'b3R5cGUuc2V0U0FTanNDb25maWc9ZnVuY3Rpb24oY2Upe3JldHVybiBKKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oWSl7cmV0dXJuIHRoaXMuc2FzanNDb25maWc9SyhLKHt9LHRoaXMuc2FzanNDb25maWcpLGNlKSx0aGlzLnNldHVwQ29u'@;
put 'ZmlndXJhdGlvbigpLFsyXX0pfSl9LHVlLnByb3RvdHlwZS5zZXREZWJ1Z1N0YXRlPWZ1bmN0aW9uKGNlKXt0aGlzLnNhc2pzQ29uZmlnLmRlYnVnPWNlLHRoaXMuc2FzVml5YUFwaUNsaWVudCYmKHRoaXMuc2FzVml5YUFwaUNsaWVudC5kZWJ1Zz1jZSl9LHVlLnByb3RvdHlwZS5jaGVja1Nl'@;
put 'c3Npb249ZnVuY3Rpb24oKXtyZXR1cm4gSih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKGNlKXtyZXR1cm5bMix0aGlzLmF1dGhNYW5hZ2VyLmNoZWNrU2Vzc2lvbigpXX0pfSl9LHVlLnByb3RvdHlwZS5sb2dJbj1mdW5jdGlvbihjZSxZLGIs'@;
put 'eCl7cmV0dXJuIHZvaWQgMD09PXgmJih4PXt9KSxKKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oTil7aWYodGhpcy5zYXNqc0NvbmZpZy5sb2dpbk1lY2hhbmlzbT09PXouTG9naW5NZWNoYW5pc20uRGVmYXVsdCl7aWYoIWNlfHwhWSl0aHJv'@;
put 'dyBuZXcgRXJyb3IoIkEgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGFyZSByZXF1aXJlZCB3aGVuIHVzaW5nIHRoZSBkZWZhdWx0IGxvZ2luIG1lY2hhbmlzbS4iKTtyZXR1cm5bMix0aGlzLmF1dGhNYW5hZ2VyLmxvZ0luKGNlLFkpXX1pZih0eXBlb2Ygd2luZG93PiJ1Iil0aHJvdyBuZXcgRXJy'@;
put 'b3IoIlRoZSByZWRpcmVjdGVkIGxvZ2luIG1lY2hhbmlzbSBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgdXNlIGluIHRoZSBicm93c2VyLiIpO3JldHVyblsyLHRoaXMuYXV0aE1hbmFnZXIucmVkaXJlY3RlZExvZ0luKHgpXX0pfSl9LHVlLnByb3RvdHlwZS5sb2dPdXQ9ZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gdGhpcy5hdXRoTWFuYWdlci5sb2dPdXQoKX0sdWUucHJvdG90eXBlLnVwbG9hZEZpbGU9ZnVuY3Rpb24oY2UsWSxiLHgsTil7cmV0dXJuIHZvaWQgMD09PXgmJih4PXt9KSxKKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oZyl7c3dpdGNo'@;
put 'KGcubGFiZWwpe2Nhc2UgMDpyZXR1cm4geD1LKEsoe30sdGhpcy5zYXNqc0NvbmZpZykseCksWzQsdGhpcy5maWxlVXBsb2FkZXIuZXhlY3V0ZShjZSx7ZmlsZXM6WSxwYXJhbXM6Yn0seCxOKV07Y2FzZSAxOnJldHVyblsyLGcuc2VudCgpXX19KX0pfSx1ZS5wcm90b3R5cGUucmVxdWVzdD1m'@;
put 'dW5jdGlvbihjZSxZLGIseCxOLEYpe3JldHVybiB2b2lkIDA9PT1iJiYoYj17fSksdm9pZCAwPT09RiYmKEY9W10pLEoodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGc7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihDKXtzd2l0Y2goQy5sYWJlbCl7Y2FzZSAwOnJldHVybiBiPUso'@;
put 'Syh7fSx0aGlzLnNhc2pzQ29uZmlnKSxiKSwoZz0oMCxFLnZhbGlkYXRlSW5wdXQpKFkpKS5zdGF0dXM/Yi5zZXJ2ZXJUeXBlIT09VS5TZXJ2ZXJUeXBlLlNhc2pzP1szLDJdOls0LHRoaXMuc2FzanNKb2JFeGVjdXRvci5leGVjdXRlKGNlLFksYix4LE4sRildOlszLDEyXTtjYXNlIDE6Y2Fz'@;
put 'ZSAzOmNhc2UgNTpjYXNlIDg6Y2FzZSAxMDpyZXR1cm5bMixDLnNlbnQoKV07Y2FzZSAyOnJldHVybiBiLnNlcnZlclR5cGUhPT1VLlNlcnZlclR5cGUuU2FzVml5YXx8bnVsbD09Yi51c2VDb21wdXRlQXBpP1szLDddOmIudXNlQ29tcHV0ZUFwaT9bNCx0aGlzLmNvbXB1dGVKb2JFeGVjdXRv'@;
put 'ci5leGVjdXRlKGNlLFksYix4LE4pXTpbMyw0XTtjYXNlIDQ6cmV0dXJuIGIuY29udGV4dE5hbWV8fChiPUsoSyh7fSxiKSx7Y29udGV4dE5hbWU6IlNBUyBKb2IgRXhlY3V0aW9uIGNvbXB1dGUgY29udGV4dCJ9KSksWzQsdGhpcy5qZXNKb2JFeGVjdXRvci5leGVjdXRlKGNlLFksYix4LE4s'@;
put 'RildO2Nhc2UgNjpyZXR1cm5bMywxMV07Y2FzZSA3OnJldHVybiBiLnNlcnZlclR5cGU9PT1VLlNlcnZlclR5cGUuU2FzOSYmYi51c2VybmFtZSYmYi5wYXNzd29yZD9bNCx0aGlzLnNhczlKb2JFeGVjdXRvci5leGVjdXRlKGNlLFksYildOlszLDldO2Nhc2UgOTpyZXR1cm5bNCx0aGlzLndl'@;
put 'YkpvYkV4ZWN1dG9yLmV4ZWN1dGUoY2UsWSxiLHgsTixGKV07Y2FzZSAxMTpyZXR1cm5bMywxM107Y2FzZSAxMjpyZXR1cm5bMixQcm9taXNlLnJlamVjdChuZXcgaWUuRXJyb3JSZXNwb25zZShnLm1zZykpXTtjYXNlIDEzOnJldHVyblsyXX19KX0pfSx1ZS5wcm90b3R5cGUuZGVwbG95U2Vy'@;
put 'dmljZVBhY2s9ZnVuY3Rpb24oY2UsWSxiLHgsTil7cmV0dXJuIHZvaWQgMD09PU4mJihOPSExKSxKKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBGLGc7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihNKXtzd2l0Y2goTS5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9k'@;
put 'U3VwcG9ydGVkKCJkZXBsb3lTZXJ2aWNlUGFjayIsW1UuU2VydmVyVHlwZS5TYXNWaXlhXSksRj1udWxsLGJ8fFk/KGJ8fChiPXRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKSxZfHwoWT10aGlzLnNhc2pzQ29uZmlnLmFwcExvYyksdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09VS5T'@;
put 'ZXJ2ZXJUeXBlLlNhc1ZpeWE/KEY9bmV3IGouU0FTVml5YUFwaUNsaWVudChiLFksdGhpcy5zYXNqc0NvbmZpZy5jb250ZXh0TmFtZSx0aGlzLnJlcXVlc3RDbGllbnQpKS5kZWJ1Zz10aGlzLnNhc2pzQ29uZmlnLmRlYnVnOnRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PVUuU2VydmVy'@;
put 'VHlwZS5TYXM5JiYoRj1uZXcgVi5TQVM5QXBpQ2xpZW50KGIsdGhpcy5qb2JzUGF0aCx0aGlzLnNhc2pzQ29uZmlnLmh0dHBzQWdlbnRPcHRpb25zKSkpOihnPW51bGwsdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09VS5TZXJ2ZXJUeXBlLlNhc1ZpeWE/Zz10aGlzLnNhc1ZpeWFBcGlD'@;
put 'bGllbnQuZ2V0Q29uZmlnKCk6dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09VS5TZXJ2ZXJUeXBlLlNhczkmJihnPXRoaXMuc2FzOUFwaUNsaWVudC5nZXRDb25maWcoKSksYj1nLnNlcnZlclVybCxZPWcucm9vdEZvbGRlck5hbWUpLGNlLm1lbWJlcnNbMF0ubWVtYmVycyYmY2UubWVt'@;
put 'YmVyc1swXS5tZW1iZXJzLnNvcnQoZnVuY3Rpb24oeSl7cmV0dXJuImZvbGRlciI9PT15LnR5cGU/LTE6MX0pLFs0LHRoaXMuY3JlYXRlRm9sZGVyc0FuZFNlcnZpY2VzKFksY2UubWVtYmVycyx4LEYsTildO2Nhc2UgMTpyZXR1cm4gTS5zZW50KCksWzJdfX0pfSl9LHVlLnByb3RvdHlwZS5z'@;
put 'dGFydENvbXB1dGVKb2I9ZnVuY3Rpb24oY2UsWSxiLHgsTixGLGcsQyl7dmFyIE07cmV0dXJuIHZvaWQgMD09PWImJihiPXt9KSx2b2lkIDA9PT1nJiYoZz0hMSksSih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKHkpe2lmKGI9SyhLKHt9LHRo'@;
put 'aXMuc2FzanNDb25maWcpLGIpLHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoInN0YXJ0Q29tcHV0ZUpvYiIsW1UuU2VydmVyVHlwZS5TYXNWaXlhXSksIWIuY29udGV4dE5hbWUpdGhyb3cgbmV3IEVycm9yKCJDb250ZXh0IG5hbWUgaXMgdW5kZWZpbmVkLiBQbGVhc2Ugc2V0IGEgYGNvbnRleHRO'@;
put 'YW1lYCBpbiB5b3VyIFNBU2pzIG9yIG92ZXJyaWRlIGNvbmZpZy4iKTtyZXR1cm5bMixudWxsPT09KE09dGhpcy5zYXNWaXlhQXBpQ2xpZW50KXx8dm9pZCAwPT09TT92b2lkIDA6TS5leGVjdXRlQ29tcHV0ZUpvYihjZSxiLmNvbnRleHROYW1lLGIuZGVidWcsWSx4LCEhTiwhMSxGLGcsQyld'@;
put 'fSl9KX0sdWUucHJvdG90eXBlLmZldGNoTG9nRmlsZUNvbnRlbnQ9ZnVuY3Rpb24oY2UsWSl7cmV0dXJuIEoodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihiKXtzd2l0Y2goYi5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMucmVxdWVzdENs'@;
put 'aWVudC5nZXQoY2UsWSkudGhlbihmdW5jdGlvbih4KXtpZigheClyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IGllLkVycm9yUmVzcG9uc2UoIkVycm9yIHdoaWxlIGZldGNoaW5nIGxvZy4gUmVzcG9uc2Ugd2FzIG5vdCBwcm92aWRlZC4iKSk7dHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeSh4'@;
put 'LnJlc3VsdCl9Y2F0Y2goTil7cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBpZS5FcnJvclJlc3BvbnNlKCJFcnJvciB3aGlsZSBmZXRjaGluZyBsb2cuIFRoZSByZXN1bHQgaXMgbm90IHZhbGlkLiIsTikpfX0pXTtjYXNlIDE6cmV0dXJuWzIsYi5zZW50KCldfX0pfSl9LHVlLnByb3RvdHlw'@;
put 'ZS5nZXRTYXNSZXF1ZXN0cz1mdW5jdGlvbigpe3JldHVybiBSKFtdLHRoaXMucmVxdWVzdENsaWVudC5nZXRSZXF1ZXN0cygpLCEwKS5zb3J0KEUuY29tcGFyZVRpbWVzdGFtcHMpfSx1ZS5wcm90b3R5cGUuY2xlYXJTYXNSZXF1ZXN0cz1mdW5jdGlvbigpe3RoaXMucmVxdWVzdENsaWVudC5j'@;
put 'bGVhclJlcXVlc3RzKCl9LHVlLnByb3RvdHlwZS5zZXR1cENvbmZpZ3VyYXRpb249ZnVuY3Rpb24oKXtpZih2b2lkIDA9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybHx8IiI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybClpZih0eXBlb2YgbG9jYXRpb248InUiKXt2YXIgY2U9IiIu'@;
put 'Y29uY2F0KGxvY2F0aW9uLnByb3RvY29sLCIvLyIpLmNvbmNhdChsb2NhdGlvbi5ob3N0bmFtZSk7bG9jYXRpb24ucG9ydCYmKGNlPSIiLmNvbmNhdChjZSwiOiIpLmNvbmNhdChsb2NhdGlvbi5wb3J0KSksdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmw9Y2V9ZWxzZSB0aGlzLnNhc2pzQ29u'@;
put 'ZmlnLnNlcnZlclVybD0iIjsiLyI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybC5zbGljZSgtMSkmJih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybD10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybC5zbGljZSgwLC0xKSksdGhpcy5yZXF1ZXN0Q2xpZW50P3RoaXMucmVxdWVzdENsaWVu'@;
put 'dC5zZXRDb25maWcodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNqc0NvbmZpZy5odHRwc0FnZW50T3B0aW9ucyk6dGhpcy5yZXF1ZXN0Q2xpZW50PW5ldyh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1VLlNlcnZlclR5cGUuU2FzanM/dGUuU2FzanNSZXF1ZXN0Q2xp'@;
put 'ZW50OnEuUmVxdWVzdENsaWVudCkodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNqc0NvbmZpZy5odHRwc0FnZW50T3B0aW9ucyx0aGlzLnNhc2pzQ29uZmlnLnJlcXVlc3RIaXN0b3J5TGltaXQpLHRoaXMuam9ic1BhdGg9dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09'@;
put 'VS5TZXJ2ZXJUeXBlLlNhc1ZpeWE/dGhpcy5zYXNqc0NvbmZpZy5wYXRoU0FTVml5YTp0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1VLlNlcnZlclR5cGUuU2FzOT90aGlzLnNhc2pzQ29uZmlnLnBhdGhTQVM5OnRoaXMuc2FzanNDb25maWcucGF0aFNBU0pTLHRoaXMuYXV0aE1hbmFn'@;
put 'ZXI9bmV3IFcuQXV0aE1hbmFnZXIodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlLHRoaXMucmVxdWVzdENsaWVudCx0aGlzLnJlc2VuZFdhaXRpbmdSZXF1ZXN0cyksdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09VS5TZXJ2ZXJUeXBl'@;
put 'LlNhc1ZpeWEmJih0aGlzLnNhc1ZpeWFBcGlDbGllbnQ/dGhpcy5zYXNWaXlhQXBpQ2xpZW50LnNldENvbmZpZyh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLmFwcExvYyk6dGhpcy5zYXNWaXlhQXBpQ2xpZW50PW5ldyBqLlNBU1ZpeWFBcGlDbGllbnQodGhp'@;
put 'cy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNqc0NvbmZpZy5hcHBMb2MsdGhpcy5zYXNqc0NvbmZpZy5jb250ZXh0TmFtZSx0aGlzLnJlcXVlc3RDbGllbnQpLHRoaXMuc2FzVml5YUFwaUNsaWVudC5kZWJ1Zz10aGlzLnNhc2pzQ29uZmlnLmRlYnVnKSx0aGlzLnNhc2pzQ29uZmln'@;
put 'LnNlcnZlclR5cGU9PT1VLlNlcnZlclR5cGUuU2FzOSYmKHRoaXMuc2FzOUFwaUNsaWVudD90aGlzLnNhczlBcGlDbGllbnQuc2V0Q29uZmlnKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKTp0aGlzLnNhczlBcGlDbGllbnQ9bmV3IFYuU0FTOUFwaUNsaWVudCh0aGlzLnNhc2pzQ29uZmln'@;
put 'LnNlcnZlclVybCx0aGlzLmpvYnNQYXRoLHRoaXMuc2FzanNDb25maWcuaHR0cHNBZ2VudE9wdGlvbnMpKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1VLlNlcnZlclR5cGUuU2FzanMmJih0aGlzLnNhc0pTQXBpQ2xpZW50fHwodGhpcy5zYXNKU0FwaUNsaWVudD1uZXcgRy5TQVNq'@;
put 'c0FwaUNsaWVudCh0aGlzLnJlcXVlc3RDbGllbnQpKSksdGhpcy5maWxlVXBsb2FkZXI9bmV3IG5lLkZpbGVVcGxvYWRlcih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUsdGhpcy5qb2JzUGF0aCx0aGlzLnJlcXVlc3RDbGllbnQpLHRoaXMu'@;
put 'd2ViSm9iRXhlY3V0b3I9bmV3IG5lLldlYkpvYkV4ZWN1dG9yKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSx0aGlzLmpvYnNQYXRoLHRoaXMucmVxdWVzdENsaWVudCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQpLHRoaXMuc2FzanNKb2JFeGVj'@;
put 'dXRvcj1uZXcgbmUuU2FzanNKb2JFeGVjdXRvcih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLmpvYnNQYXRoLHRoaXMucmVxdWVzdENsaWVudCksdGhpcy5zYXM5Sm9iRXhlY3V0b3I9bmV3IG5lLlNhczlKb2JFeGVjdXRvcih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlz'@;
put 'LnNhc2pzQ29uZmlnLnNlcnZlclR5cGUsdGhpcy5qb2JzUGF0aCx0aGlzLnJlcXVlc3RDbGllbnQsdGhpcy5zYXNqc0NvbmZpZy5odHRwc0FnZW50T3B0aW9ucyksdGhpcy5jb21wdXRlSm9iRXhlY3V0b3I9bmV3IG5lLkNvbXB1dGVKb2JFeGVjdXRvcih0aGlzLnNhc2pzQ29uZmlnLnNlcnZl'@;
put 'clVybCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQpLHRoaXMuamVzSm9iRXhlY3V0b3I9bmV3IG5lLkplc0pvYkV4ZWN1dG9yKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzVml5YUFwaUNsaWVudCl9LHVlLnByb3RvdHlwZS5jcmVhdGVGb2xkZXJzQW5kU2VydmljZXM9ZnVuY3Rp'@;
put 'b24oY2UsWSxiLHgsTil7cmV0dXJuIEoodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEY9dGhpcztyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKGcpe3N3aXRjaChnLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsKDAsRS5hc3luY0ZvckVhY2gpKFksZnVuY3Rpb24oQyl7cmV0dXJuIEoo'@;
put 'Rix2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihNKXtzd2l0Y2goTS5sYWJlbCl7Y2FzZSAwOnN3aXRjaChDLnR5cGUpe2Nhc2UiZm9sZGVyIjpyZXR1cm5bMywxXTtjYXNlImZpbGUiOnJldHVyblszLDNdO2Nhc2Uic2VydmljZSI6cmV0dXJuWzMsNV19'@;
put 'cmV0dXJuWzMsN107Y2FzZSAxOnJldHVybls0LHRoaXMuY3JlYXRlRm9sZGVyKEMubmFtZSxjZSx2b2lkIDAsYix4LE4pXTtjYXNlIDI6cmV0dXJuIE0uc2VudCgpLFszLDhdO2Nhc2UgMzpyZXR1cm5bNCx0aGlzLmNyZWF0ZUZpbGUoQy5uYW1lLEMuY29kZSxjZSx2b2lkIDAsYix4KV07Y2Fz'@;
put 'ZSA0OnJldHVybiBNLnNlbnQoKSxbMyw4XTtjYXNlIDU6cmV0dXJuWzQsdGhpcy5jcmVhdGVKb2JEZWZpbml0aW9uKEMubmFtZSxDLmNvZGUsY2Usdm9pZCAwLGIseCldO2Nhc2UgNjpyZXR1cm4gTS5zZW50KCksWzMsOF07Y2FzZSA3OnRocm93IG5ldyBFcnJvcigiVW5pZGVudGlmaWVkIG1l'@;
put 'bWJlciAnIi5jb25jYXQoQy5uYW1lLCInIHByb3ZpZGVkLiIpKTtjYXNlIDg6cmV0dXJuImZvbGRlciI9PT1DLnR5cGUmJkMubWVtYmVycyYmQy5tZW1iZXJzLmxlbmd0aD9bNCx0aGlzLmNyZWF0ZUZvbGRlcnNBbmRTZXJ2aWNlcygiIi5jb25jYXQoY2UsIi8iKS5jb25jYXQoQy5uYW1lKSxD'@;
put 'Lm1lbWJlcnMsYix4LE4pXTpbMywxMF07Y2FzZSA5Ok0uc2VudCgpLE0ubGFiZWw9MTA7Y2FzZSAxMDpyZXR1cm5bMl19fSl9KX0pXTtjYXNlIDE6cmV0dXJuIGcuc2VudCgpLFsyXX19KX0pfSx1ZS5wcm90b3R5cGUuaXNNZXRob2RTdXBwb3J0ZWQ9ZnVuY3Rpb24oY2UsWSl7aWYoIXRoaXMu'@;
put 'c2FzanNDb25maWcuc2VydmVyVHlwZXx8IVkuaW5jbHVkZXModGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlKSl0aHJvdyBuZXcgRXJyb3IoIk1ldGhvZCAnIi5jb25jYXQoY2UsIicgaXMgb25seSBzdXBwb3J0ZWQgb24gIikuY29uY2F0KFkuam9pbigiLCAiKSwiIHNlcnZlcnMuIikpfSx1'@;
put 'ZX0oKTtCLmRlZmF1bHQ9ZGV9LDM0Njc6ZnVuY3Rpb24oSCxCLEwpeyJ1c2Ugc3RyaWN0Ijt2YXIgSz10aGlzJiZ0aGlzLl9fYXNzaWdufHxmdW5jdGlvbigpe3JldHVybiBLPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKFUpe2Zvcih2YXIgcSx0ZT0xLG5lPWFyZ3VtZW50cy5sZW5ndGg7dGU8'@;
put 'bmU7dGUrKylmb3IodmFyIGllIGluIHE9YXJndW1lbnRzW3RlXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocSxpZSkmJihVW2llXT1xW2llXSk7cmV0dXJuIFV9LEsuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxKPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihV'@;
put 'LHEsdGUsbmUpe3JldHVybiBuZXcodGV8fCh0ZT1Qcm9taXNlKSkoZnVuY3Rpb24oaWUsbGUpe2Z1bmN0aW9uIGRlKFkpe3RyeXtjZShuZS5uZXh0KFkpKX1jYXRjaChiKXtsZShiKX19ZnVuY3Rpb24gdWUoWSl7dHJ5e2NlKG5lLnRocm93KFkpKX1jYXRjaChiKXtsZShiKX19ZnVuY3Rpb24g'@;
put 'Y2UoWSl7dmFyIGI7WS5kb25lP2llKFkudmFsdWUpOihiPVkudmFsdWUsYiBpbnN0YW5jZW9mIHRlP2I6bmV3IHRlKGZ1bmN0aW9uKHgpe3goYil9KSkudGhlbihkZSx1ZSl9Y2UoKG5lPW5lLmFwcGx5KFUscXx8W10pKS5uZXh0KCkpfSl9LEk9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVu'@;
put 'Y3Rpb24oVSxxKXt2YXIgdGUsbmUsaWUsbGUsZGU9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmaWVbMF0pdGhyb3cgaWVbMV07cmV0dXJuIGllWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIGxlPXtuZXh0OnVlKDApLHRocm93OnVlKDEpLHJldHVybjp1ZSgyKX0sImZ1bmN0aW9u'@;
put 'Ij09dHlwZW9mIFN5bWJvbCYmKGxlW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGxlO2Z1bmN0aW9uIHVlKGNlKXtyZXR1cm4gZnVuY3Rpb24oWSl7cmV0dXJuIGZ1bmN0aW9uKGIpe2lmKHRlKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJl'@;
put 'YWR5IGV4ZWN1dGluZy4iKTtmb3IoO2RlOyl0cnl7aWYodGU9MSxuZSYmKGllPTImYlswXT9uZS5yZXR1cm46YlswXT9uZS50aHJvd3x8KChpZT1uZS5yZXR1cm4pJiZpZS5jYWxsKG5lKSwwKTpuZS5uZXh0KSYmIShpZT1pZS5jYWxsKG5lLGJbMV0pKS5kb25lKXJldHVybiBpZTtzd2l0Y2go'@;
put 'bmU9MCxpZSYmKGI9WzImYlswXSxpZS52YWx1ZV0pLGJbMF0pe2Nhc2UgMDpjYXNlIDE6aWU9YjticmVhaztjYXNlIDQ6cmV0dXJuIGRlLmxhYmVsKysse3ZhbHVlOmJbMV0sZG9uZTohMX07Y2FzZSA1OmRlLmxhYmVsKyssbmU9YlsxXSxiPVswXTtjb250aW51ZTtjYXNlIDc6Yj1kZS5vcHMu'@;
put 'cG9wKCksZGUudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKGllPShpZT1kZS50cnlzKS5sZW5ndGg+MCYmaWVbaWUubGVuZ3RoLTFdKXx8NiE9PWJbMF0mJjIhPT1iWzBdKSl7ZGU9MDtjb250aW51ZX1pZigzPT09YlswXSYmKCFpZXx8YlsxXT5pZVswXSYmYlsxXTxpZVszXSkp'@;
put 'e2RlLmxhYmVsPWJbMV07YnJlYWt9aWYoNj09PWJbMF0mJmRlLmxhYmVsPGllWzFdKXtkZS5sYWJlbD1pZVsxXSxpZT1iO2JyZWFrfWlmKGllJiZkZS5sYWJlbDxpZVsyXSl7ZGUubGFiZWw9aWVbMl0sZGUub3BzLnB1c2goYik7YnJlYWt9aWVbMl0mJmRlLm9wcy5wb3AoKSxkZS50cnlzLnBv'@;
put 'cCgpO2NvbnRpbnVlfWI9cS5jYWxsKFUsZGUpfWNhdGNoKHgpe2I9WzYseF0sbmU9MH1maW5hbGx5e3RlPWllPTB9aWYoNSZiWzBdKXRocm93IGJbMV07cmV0dXJue3ZhbHVlOmJbMF0/YlsxXTp2b2lkIDAsZG9uZTohMH19KFtjZSxZXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEIsIl9f'@;
put 'ZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEIuU0FTanNBcGlDbGllbnQ9dm9pZCAwO3ZhciBSPUwoNjIzMCksRT1MKDM5MDApLHo9TCg5Nzc4KSxqPUwoNTcpLFY9TCgyNDkpLEc9TCg3MDQpLFc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBVKHEpe3RoaXMucmVxdWVzdENsaWVudD1xfXJldHVybiBVLnBy'@;
put 'b3RvdHlwZS5nZXRBY2Nlc3NUb2tlbkZvclJlcXVlc3Q9ZnVuY3Rpb24ocSl7cmV0dXJuIEoodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbih0ZSl7c3dpdGNoKHRlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHE/WzQsKDAsRy5nZXRUb2tlbnMpKHRo'@;
put 'aXMucmVxdWVzdENsaWVudCxxLEUuU2VydmVyVHlwZS5TYXNqcyldOlszLDJdO2Nhc2UgMTpyZXR1cm5bMix0ZS5zZW50KCkuYWNjZXNzX3Rva2VuXTtjYXNlIDI6cmV0dXJuWzJdfX0pfSl9LFUucHJvdG90eXBlLmRlcGxveT1mdW5jdGlvbihxLHRlLG5lKXtyZXR1cm4gSih0aGlzLHZvaWQg'@;
put 'MCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgaWUsbGU7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihkZSl7c3dpdGNoKGRlLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5nZXRBY2Nlc3NUb2tlbkZvclJlcXVlc3QobmUpXTtjYXNlIDE6cmV0dXJuIGllPWRlLnNlbnQoKSxxLmFwcExvYz1xLmFw'@;
put 'cExvY3x8dGUsWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoIlNBU2pzQXBpL2RyaXZlL2RlcGxveSIscSxpZSx2b2lkIDAse30se21heENvbnRlbnRMZW5ndGg6MS8wLG1heEJvZHlMZW5ndGg6MS8wfSldO2Nhc2UgMjpyZXR1cm4gbGU9ZGUuc2VudCgpLnJlc3VsdCxbMixQcm9taXNlLnJl'@;
put 'c29sdmUobGUpXX19KX0pfSxVLnByb3RvdHlwZS5kZXBsb3laaXBGaWxlPWZ1bmN0aW9uKHEsdGUpe3JldHVybiBKKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBuZSxpZSxsZSxkZSx1ZSxjZTtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKFkpe3N3aXRjaChZLmxhYmVsKXtjYXNl'@;
put 'IDA6cmV0dXJuIG5lPUwoMjk3NSkuY3JlYXRlUmVhZFN0cmVhbSxbNCx0aGlzLmdldEFjY2Vzc1Rva2VuRm9yUmVxdWVzdCh0ZSldO2Nhc2UgMTpyZXR1cm4gaWU9WS5zZW50KCksWzQsbmUocSldO2Nhc2UgMjpyZXR1cm4gbGU9WS5zZW50KCksKGRlPW5ldyBSKS5hcHBlbmQoImZpbGUiLGxl'@;
put 'KSx1ZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9Ii5jb25jYXQoZGUuZ2V0Qm91bmRhcnkoKSksWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoIlNBU2pzQXBpL2RyaXZlL2RlcGxveS91cGxvYWQiLGRlLGllLHVlLHt9LHttYXhDb250ZW50TGVuZ3RoOjEvMCxtYXhCb2R5TGVu'@;
put 'Z3RoOjEvMH0pXTtjYXNlIDM6cmV0dXJuIGNlPVkuc2VudCgpLnJlc3VsdCxbMixQcm9taXNlLnJlc29sdmUoY2UpXX19KX0pfSxVLnByb3RvdHlwZS5leGVjdXRlSm9iPWZ1bmN0aW9uKHEsdGUsbmUpe3JldHVybiBKKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBpZSxsZSxk'@;
put 'ZTtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKHVlKXtzd2l0Y2godWUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gaWU9bmU/bmUuYWNjZXNzX3Rva2VuOnZvaWQgMCxsZT1xLl9wcm9ncmFtLnN0YXJ0c1dpdGgoIi8iKT9xLl9wcm9ncmFtOiIiLmNvbmNhdCh0ZSwiLyIpLmNvbmNhdChxLl9wcm9ncmFt'@;
put 'KSxbNCx0aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiU0FTanNBcGkvc3RwL2V4ZWN1dGUiLEsoSyh7X2RlYnVnOjEzMX0scSkse19wcm9ncmFtOmxlfSksaWUpXTtjYXNlIDE6cmV0dXJuWzIse3Jlc3VsdDooZGU9dWUuc2VudCgpKS5yZXN1bHQsbG9nOmRlLmxvZ31dfX0pfSl9LFUucHJvdG90'@;
put 'eXBlLmV4ZWN1dGVTY3JpcHQ9ZnVuY3Rpb24ocSx0ZSxuZSl7cmV0dXJuIHZvaWQgMD09PXRlJiYodGU9InNhcyIpLEoodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGllLGxlO3JldHVybiBJKHRoaXMsZnVuY3Rpb24oZGUpe3N3aXRjaChkZS5sYWJlbCl7Y2FzZSAwOnJldHVy'@;
put 'bls0LHRoaXMuZ2V0QWNjZXNzVG9rZW5Gb3JSZXF1ZXN0KG5lKV07Y2FzZSAxOnJldHVybiBpZT1kZS5zZW50KCksbGU9e2xvZzoiIn0sWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoIlNBU2pzQXBpL2NvZGUvZXhlY3V0ZSIse2NvZGU6cSxydW5UaW1lOnRlfSxpZSkudGhlbihmdW5jdGlv'@;
put 'bih1ZSl7dmFyIFk9dWUucHJpbnRPdXRwdXQsYj11ZS5yZXN1bHQ7bGUubG9nPXVlLmxvZyxZJiYobGUucHJpbnRPdXRwdXQ9WSksYiYmKGxlLndlYm91dD1iKX0pLmNhdGNoKGZ1bmN0aW9uKHVlKXt0aHJvdygwLHoucHJlZml4TWVzc2FnZSkodWUsIkVycm9yIHdoaWxlIHNlbmRpbmcgUE9T'@;
put 'VCByZXF1ZXN0IHRvIGV4ZWN1dGUgY29kZS4gIil9KV07Y2FzZSAyOnJldHVybiBkZS5zZW50KCksWzIsbGVdfX0pfSl9LFUucHJvdG90eXBlLmdldEFjY2Vzc1Rva2VuPWZ1bmN0aW9uKHEsdGUpe3JldHVybiBKKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMs'@;
put 'ZnVuY3Rpb24obmUpe3JldHVyblsyLCgwLGouZ2V0QWNjZXNzVG9rZW5Gb3JTYXNqcykodGhpcy5yZXF1ZXN0Q2xpZW50LHEsdGUpXX0pfSl9LFUucHJvdG90eXBlLnJlZnJlc2hUb2tlbnM9ZnVuY3Rpb24ocSl7cmV0dXJuIEoodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IEkodGhpcyxmdW5jdGlvbih0ZSl7cmV0dXJuWzIsKDAsVi5yZWZyZXNoVG9rZW5zRm9yU2FzanMpKHRoaXMucmVxdWVzdENsaWVudCxxKV19KX0pfSxVfSgpO0IuU0FTanNBcGlDbGllbnQ9V30sNjkwMzpmdW5jdGlvbihILEIsTCl7InVzZSBzdHJpY3QiO3ZhciBLPUwoNDE1NSksSj1MKDUx'@;
put 'MDgpLEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEcsVyxVLHEpe3JldHVybiBuZXcoVXx8KFU9UHJvbWlzZSkpKGZ1bmN0aW9uKHRlLG5lKXtmdW5jdGlvbiBpZSh1ZSl7dHJ5e2RlKHEubmV4dCh1ZSkpfWNhdGNoKGNlKXtuZShjZSl9fWZ1bmN0aW9uIGxlKHVlKXt0cnl7ZGUo'@;
put 'cS50aHJvdyh1ZSkpfWNhdGNoKGNlKXtuZShjZSl9fWZ1bmN0aW9uIGRlKHVlKXt2YXIgY2U7dWUuZG9uZT90ZSh1ZS52YWx1ZSk6KGNlPXVlLnZhbHVlLGNlIGluc3RhbmNlb2YgVT9jZTpuZXcgVShmdW5jdGlvbihZKXtZKGNlKX0pKS50aGVuKGllLGxlKX1kZSgocT1xLmFwcGx5KEcsV3x8'@;
put 'W10pKS5uZXh0KCkpfSl9LFI9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oRyxXKXt2YXIgVSxxLHRlLG5lLGllPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJnRlWzBdKXRocm93IHRlWzFdO3JldHVybiB0ZVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBuZT17bmV4'@;
put 'dDpsZSgwKSx0aHJvdzpsZSgxKSxyZXR1cm46bGUoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihuZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxuZTtmdW5jdGlvbiBsZShkZSl7cmV0dXJuIGZ1bmN0aW9uKHVlKXtyZXR1cm4gZnVuY3Rpb24oY2Up'@;
put 'e2lmKFUpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7aWU7KXRyeXtpZihVPTEscSYmKHRlPTImY2VbMF0/cS5yZXR1cm46Y2VbMF0/cS50aHJvd3x8KCh0ZT1xLnJldHVybikmJnRlLmNhbGwocSksMCk6cS5uZXh0KSYmISh0ZT10'@;
put 'ZS5jYWxsKHEsY2VbMV0pKS5kb25lKXJldHVybiB0ZTtzd2l0Y2gocT0wLHRlJiYoY2U9WzImY2VbMF0sdGUudmFsdWVdKSxjZVswXSl7Y2FzZSAwOmNhc2UgMTp0ZT1jZTticmVhaztjYXNlIDQ6cmV0dXJuIGllLmxhYmVsKysse3ZhbHVlOmNlWzFdLGRvbmU6ITF9O2Nhc2UgNTppZS5sYWJl'@;
put 'bCsrLHE9Y2VbMV0sY2U9WzBdO2NvbnRpbnVlO2Nhc2UgNzpjZT1pZS5vcHMucG9wKCksaWUudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKHRlPSh0ZT1pZS50cnlzKS5sZW5ndGg+MCYmdGVbdGUubGVuZ3RoLTFdKXx8NiE9PWNlWzBdJiYyIT09Y2VbMF0pKXtpZT0wO2NvbnRp'@;
put 'bnVlfWlmKDM9PT1jZVswXSYmKCF0ZXx8Y2VbMV0+dGVbMF0mJmNlWzFdPHRlWzNdKSl7aWUubGFiZWw9Y2VbMV07YnJlYWt9aWYoNj09PWNlWzBdJiZpZS5sYWJlbDx0ZVsxXSl7aWUubGFiZWw9dGVbMV0sdGU9Y2U7YnJlYWt9aWYodGUmJmllLmxhYmVsPHRlWzJdKXtpZS5sYWJlbD10ZVsy'@;
put 'XSxpZS5vcHMucHVzaChjZSk7YnJlYWt9dGVbMl0mJmllLm9wcy5wb3AoKSxpZS50cnlzLnBvcCgpO2NvbnRpbnVlfWNlPVcuY2FsbChHLGllKX1jYXRjaChZKXtjZT1bNixZXSxxPTB9ZmluYWxseXtVPXRlPTB9aWYoNSZjZVswXSl0aHJvdyBjZVsxXTtyZXR1cm57dmFsdWU6Y2VbMF0/Y2Vb'@;
put 'MV06dm9pZCAwLGRvbmU6ITB9fShbZGUsdWVdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQi5TZXNzaW9uTWFuYWdlcj12b2lkIDA7dmFyIEU9TCgxMzk1KSx6PUwoNTkyOCksaj1MKDk3NzgpLFY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBHKFcs'@;
put 'VSxxKXt0aGlzLnNlcnZlclVybD1XLHRoaXMuY29udGV4dE5hbWU9VSx0aGlzLnJlcXVlc3RDbGllbnQ9cSx0aGlzLmxvZ2dlZEVycm9ycz1bXSx0aGlzLnNlc3Npb25zPVtdLHRoaXMuY3VycmVudENvbnRleHQ9bnVsbCx0aGlzLnNldHRpbmdDb250ZXh0PSExLHRoaXMuX2RlYnVnPSExLHRo'@;
put 'aXMucHJpbnRlZFNlc3Npb25TdGF0ZT17cHJpbnRlZDohMSxzdGF0ZToiIn0sVyYmKDAsei5pc1VybCkoVyl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShHLnByb3RvdHlwZSwiZGVidWciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVidWd9LHNldDpmdW5jdGlvbihXKXt0'@;
put 'aGlzLl9kZWJ1Zz1XfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLEcucHJvdG90eXBlLmlzU2Vzc2lvblZhbGlkPWZ1bmN0aW9uKFcpe2lmKCFXKXJldHVybiExO3ZhciBVPSgobmV3IERhdGUpLmdldFRpbWUoKS1uZXcgRGF0ZShXLmNyZWF0aW9uVGltZVN0YW1wKS5nZXRUaW1l'@;
put 'KCkpLzFlMztyZXR1cm4hKCFXLmF0dHJpYnV0ZXN8fFU+PVcuYXR0cmlidXRlcy5zZXNzaW9uSW5hY3RpdmVUaW1lb3V0KX0sRy5wcm90b3R5cGUucmVtb3ZlU2Vzc2lvbkZyb21Qb29sPWZ1bmN0aW9uKFcpe3RoaXMuc2Vzc2lvbnM9dGhpcy5zZXNzaW9ucy5maWx0ZXIoZnVuY3Rpb24oVSl7'@;
put 'cmV0dXJuIFUuaWQhPT1XLmlkfSl9LEcucHJvdG90eXBlLnJlbW92ZUV4cGlyZWRTZXNzaW9ucz1mdW5jdGlvbigpe3ZhciBXPXRoaXM7dGhpcy5zZXNzaW9ucz10aGlzLnNlc3Npb25zLmZpbHRlcihmdW5jdGlvbihVKXtyZXR1cm4gVy5pc1Nlc3Npb25WYWxpZChVKX0pfSxHLnByb3RvdHlw'@;
put 'ZS50aHJvd0Vycm9ycz1mdW5jdGlvbihXLFUpe3Rocm93IFU/KDAsai5wcmVmaXhNZXNzYWdlKShuZXcgRXJyb3IoVy5qb2luKCIuICIpKSxVKTpuZXcgRXJyb3IoVy5tYXAoZnVuY3Rpb24ocSl7cmV0dXJuIHEubWVzc2FnZT9xLm1lc3NhZ2U6cX0pLmpvaW4oIi4gIikpfSxHLnByb3RvdHlw'@;
put 'ZS5nZXRTZXNzaW9uPWZ1bmN0aW9uKFcpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBVLHEsdGUsbmUsaWU9dGhpcztyZXR1cm4gUih0aGlzLGZ1bmN0aW9uKGxlKXtzd2l0Y2gobGUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gVT1bXSxxPSExLHRlPWZ1bmN0aW9u'@;
put 'KCl7VS5sZW5ndGgmJiFxJiYocT0hMCxpZS50aHJvd0Vycm9ycyhVKSl9LHRoaXMucmVtb3ZlRXhwaXJlZFNlc3Npb25zKCksdGhpcy5zZXNzaW9ucy5sZW5ndGg/KHRoaXMucmVtb3ZlU2Vzc2lvbkZyb21Qb29sKG5lPXRoaXMuc2Vzc2lvbnNbMF0pLHRoaXMuY3JlYXRlU2Vzc2lvbnMoVyku'@;
put 'Y2F0Y2goZnVuY3Rpb24oZGUpe1UucHVzaChkZSl9KSx0aGlzLmNyZWF0ZUFuZFdhaXRGb3JTZXNzaW9uKFcpLmNhdGNoKGZ1bmN0aW9uKGRlKXtVLnB1c2goZGUpfSksdGUoKSxbMixuZV0pOlszLDFdO2Nhc2UgMTpyZXR1cm4gdGhpcy5jcmVhdGVTZXNzaW9ucyhXKS5jYXRjaChmdW5jdGlv'@;
put 'bihkZSl7VS5wdXNoKGRlKX0pLFs0LHRoaXMuY3JlYXRlQW5kV2FpdEZvclNlc3Npb24oVykuY2F0Y2goZnVuY3Rpb24oZGUpe1UucHVzaChkZSl9KV07Y2FzZSAyOnJldHVybiBsZS5zZW50KCksdGhpcy5yZW1vdmVFeHBpcmVkU2Vzc2lvbnMoKSxuZT10aGlzLnNlc3Npb25zLnBvcCgpLHRo'@;
put 'aXMucmVtb3ZlU2Vzc2lvbkZyb21Qb29sKG5lKSx0ZSgpLFsyLG5lXX19KX0pfSxHLnByb3RvdHlwZS5nZXRFcnJvck1lc3NhZ2U9ZnVuY3Rpb24oVyxVLHEpe3JldHVybiIiLmNvbmNhdChxLCIgcmVxdWVzdCB0byAiKS5jb25jYXQoVSwiIGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIpLmNv'@;
put 'bmNhdChXLnJlc3BvbnNlLnN0YXR1c3x8InVua25vd24iLCIuICIpK1cucmVzcG9uc2UuZGF0YS5tZXNzYWdlfHwiIn0sRy5wcm90b3R5cGUuY2xlYXJTZXNzaW9uPWZ1bmN0aW9uKFcsVSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHEsdGU9dGhpcztyZXR1'@;
put 'cm4gUih0aGlzLGZ1bmN0aW9uKG5lKXtzd2l0Y2gobmUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gcT0iL2NvbXB1dGUvc2Vzc2lvbnMvIi5jb25jYXQoVyksWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmRlbGV0ZShxLFUpLnRoZW4oZnVuY3Rpb24oKXt0ZS5zZXNzaW9ucz10ZS5zZXNzaW9ucy5maWx0'@;
put 'ZXIoZnVuY3Rpb24oaWUpe3JldHVybiBpZS5pZCE9PVd9KX0pLmNhdGNoKGZ1bmN0aW9uKGllKXt0aHJvdygwLGoucHJlZml4TWVzc2FnZSkodGUuZ2V0RXJyb3JNZXNzYWdlKGllLHEsIkRFTEVURSIpLCJFcnJvciB3aGlsZSBkZWxldGluZyBzZXNzaW9uLiAiKX0pXTtjYXNlIDE6cmV0dXJu'@;
put 'WzIsbmUuc2VudCgpXX19KX0pfSxHLnByb3RvdHlwZS5jcmVhdGVTZXNzaW9ucz1mdW5jdGlvbihXKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgVSxxPXRoaXM7cmV0dXJuIFIodGhpcyxmdW5jdGlvbih0ZSl7c3dpdGNoKHRlLmxhYmVsKXtjYXNlIDA6cmV0'@;
put 'dXJuIFU9W10sdGhpcy5zZXNzaW9ucy5sZW5ndGg/WzMsMl06WzQsKDAsei5hc3luY0ZvckVhY2gpKG5ldyBBcnJheSgxKSxmdW5jdGlvbigpe3JldHVybiBJKHEsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBSKHRoaXMsZnVuY3Rpb24obmUpe3N3aXRjaChuZS5sYWJlbCl7Y2Fz'@;
put 'ZSAwOnJldHVybls0LHRoaXMuY3JlYXRlQW5kV2FpdEZvclNlc3Npb24oVykuY2F0Y2goZnVuY3Rpb24oaWUpe1UucHVzaChpZSl9KV07Y2FzZSAxOnJldHVybiBuZS5zZW50KCksWzJdfX0pfSl9KV07Y2FzZSAxOnRlLnNlbnQoKSx0ZS5sYWJlbD0yO2Nhc2UgMjpyZXR1cm4gVS5sZW5ndGgm'@;
put 'JnRoaXMudGhyb3dFcnJvcnMoVSwiRXJyb3Igd2hpbGUgY3JlYXRpbmcgc2Vzc2lvbi4gIiksWzJdfX0pfSl9LEcucHJvdG90eXBlLndhaXRGb3JDdXJyZW50Q29udGV4dD1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBXPXRoaXM7cmV0dXJu'@;
put 'IFIodGhpcyxmdW5jdGlvbihVKXtyZXR1cm5bMixuZXcgUHJvbWlzZShmdW5jdGlvbihxKXt2YXIgdGU9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtXLmN1cnJlbnRDb250ZXh0JiYoVy5zZXR0aW5nQ29udGV4dD0hMSxjbGVhckludGVydmFsKHRlKSxxKCkpfSwxMDApfSldfSl9KX0sRy5wcm90'@;
put 'b3R5cGUuY3JlYXRlQW5kV2FpdEZvclNlc3Npb249ZnVuY3Rpb24oVyl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIFUscSx0ZSxpZT10aGlzO3JldHVybiBSKHRoaXMsZnVuY3Rpb24obGUpe3N3aXRjaChsZS5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmN1'@;
put 'cnJlbnRDb250ZXh0P1szLDRdOnRoaXMuc2V0dGluZ0NvbnRleHQ/WzMsMl06WzQsdGhpcy5zZXRDdXJyZW50Q29udGV4dChXKV07Y2FzZSAxOnJldHVybiBsZS5zZW50KCksWzMsNF07Y2FzZSAyOnJldHVybls0LHRoaXMud2FpdEZvckN1cnJlbnRDb250ZXh0KCldO2Nhc2UgMzpsZS5zZW50'@;
put 'KCksbGUubGFiZWw9NDtjYXNlIDQ6cmV0dXJuIFU9IiIuY29uY2F0KHRoaXMuc2VydmVyVXJsLCIvY29tcHV0ZS9jb250ZXh0cy8iKS5jb25jYXQodGhpcy5jdXJyZW50Q29udGV4dC5pZCwiL3Nlc3Npb25zIiksWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoVSx7fSxXKS5jYXRjaChmdW5j'@;
put 'dGlvbihkZSl7dGhyb3coMCxqLnByZWZpeE1lc3NhZ2UpKGllLmdldEVycm9yTWVzc2FnZShkZSxVLCJQT1NUIiksIkVycm9yIHdoaWxlIGNyZWF0aW5nIHNlc3Npb24uICIpfSldO2Nhc2UgNTpyZXR1cm4gcT1sZS5zZW50KCksWzQsdGhpcy53YWl0Rm9yU2Vzc2lvbih0ZT1xLnJlc3VsdCxx'@;
put 'LmV0YWcsVyldO2Nhc2UgNjpyZXR1cm4gbGUuc2VudCgpLHRoaXMuc2Vzc2lvbnMucHVzaCh0ZSksWzIsdGVdfX0pfSl9LEcucHJvdG90eXBlLnNldEN1cnJlbnRDb250ZXh0PWZ1bmN0aW9uKFcpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBVLHEsbmUsaWU9'@;
put 'dGhpcztyZXR1cm4gUih0aGlzLGZ1bmN0aW9uKGxlKXtzd2l0Y2gobGUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5jdXJyZW50Q29udGV4dD9bMywyXTooVT0iIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9jb21wdXRlL2NvbnRleHRzP2xpbWl0PTEwMDAwIiksdGhpcy5zZXR0aW5nQ29u'@;
put 'dGV4dD0hMCxbNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KFUsVykuY2F0Y2goZnVuY3Rpb24oZGUpe3Rocm93KDAsai5wcmVmaXhNZXNzYWdlKShpZS5nZXRFcnJvck1lc3NhZ2UoZGUsVSwiR0VUIiksIkVycm9yIHdoaWxlIGdldHRpbmcgbGlzdCBvZiBjb250ZXh0cy4gIil9KV0pO2Nhc2Ug'@;
put 'MTppZihxPWxlLnNlbnQoKS5yZXN1bHQsIShuZT0ocSYmcS5pdGVtcyYmcS5pdGVtcy5sZW5ndGg/cS5pdGVtczpbXSkuZmluZChmdW5jdGlvbihkZSl7cmV0dXJuIGRlLm5hbWU9PT1pZS5jb250ZXh0TmFtZX0pKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBjb250ZXh0ICciLmNvbmNhdCh0aGlz'@;
put 'LmNvbnRleHROYW1lLCInIHdhcyBub3QgZm91bmQgb24gdGhlIHNlcnZlciAiKS5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi4iKSk7dGhpcy5jdXJyZW50Q29udGV4dD1uZSxQcm9taXNlLnJlc29sdmUoKSxsZS5sYWJlbD0yO2Nhc2UgMjpyZXR1cm5bMl19fSl9KX0sRy5wcm90b3R5cGUud2Fp'@;
put 'dEZvclNlc3Npb249ZnVuY3Rpb24oVyxVLHEpe3ZhciB0ZTtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgbmUsaWUsbGUsZGUsdWUsWSxiO3JldHVybiBSKHRoaXMsZnVuY3Rpb24oeCl7c3dpdGNoKHgubGFiZWwpe2Nhc2UgMDpyZXR1cm4gbmU9Sy5sb2dnZXJ8'@;
put 'fEosaWU9Vy5zdGF0ZSxsZT1XLmxpbmtzLmZpbmQoZnVuY3Rpb24oTil7cmV0dXJuInN0YXRlIj09PU4ucmVsfSksInBlbmRpbmciIT09aWUmJiJydW5uaW5nIiE9PWllJiYiIiE9PWllP1szLDZdOmxlPyh0aGlzLmRlYnVnJiYhdGhpcy5wcmludGVkU2Vzc2lvblN0YXRlLnByaW50ZWQmJihu'@;
put 'ZS5pbmZvKCJQb2xsaW5nOiAiLmNvbmNhdCh0aGlzLnNlcnZlclVybCtsZS5ocmVmKSksdGhpcy5wcmludGVkU2Vzc2lvblN0YXRlLnByaW50ZWQ9ITApLGRlPSIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCkuY29uY2F0KGxlLmhyZWYsIj93YWl0PTMwIiksWzQsdGhpcy5nZXRTZXNzaW9uU3Rh'@;
put 'dGUoZGUsVSxxKS5jYXRjaChmdW5jdGlvbihOKXt0aHJvdygwLGoucHJlZml4TWVzc2FnZSkoTiwiRXJyb3Igd2hpbGUgd2FpdGluZyBmb3Igc2Vzc2lvbi4gIil9KV0pOlszLDRdO2Nhc2UgMTpyZXR1cm4gdWU9eC5zZW50KCksWT11ZS5yZXNwb25zZVN0YXR1cyxpZT11ZS5yZXN1bHQudHJp'@;
put 'bSgpLHRoaXMuZGVidWcmJnRoaXMucHJpbnRlZFNlc3Npb25TdGF0ZS5zdGF0ZSE9PWllJiYobmUuaW5mbygiQ3VycmVudCBzZXNzaW9uIHN0YXRlIGlzICciLmNvbmNhdChpZSwiJyIpKSx0aGlzLnByaW50ZWRTZXNzaW9uU3RhdGUuc3RhdGU9aWUsdGhpcy5wcmludGVkU2Vzc2lvblN0YXRl'@;
put 'LnByaW50ZWQ9ITEpLGllP1szLDNdOihiPW5ldyBFLk5vU2Vzc2lvblN0YXRlRXJyb3IoWSx0aGlzLnNlcnZlclVybCtsZS5ocmVmLG51bGw9PT0odGU9Vy5saW5rcy5maW5kKGZ1bmN0aW9uKE4pe3JldHVybiJsb2ciPT09Ti5yZWx9KSl8fHZvaWQgMD09PXRlP3ZvaWQgMDp0ZS5ocmVmKSx0'@;
put 'aGlzLmxvZ2dlZEVycm9ycy5maW5kKGZ1bmN0aW9uKE4pe3JldHVybiBOLnNlcnZlclJlc3BvbnNlU3RhdHVzPT09Yi5zZXJ2ZXJSZXNwb25zZVN0YXR1c30pfHwodGhpcy5sb2dnZWRFcnJvcnMucHVzaChiKSxuZS5pbmZvKGIubWVzc2FnZSkpLFs0LHRoaXMud2FpdEZvclNlc3Npb24oVyxV'@;
put 'LHEpXSk7Y2FzZSAyOnJldHVyblsyLHguc2VudCgpXTtjYXNlIDM6Y2FzZSA2OnJldHVybiB0aGlzLmxvZ2dlZEVycm9ycz1bXSxbMixpZV07Y2FzZSA0OnRocm93IkVycm9yIHdoaWxlIGdldHRpbmcgc2Vzc2lvbiBzdGF0ZSBsaW5rLiAiO2Nhc2UgNTpyZXR1cm5bMyw3XTtjYXNlIDc6cmV0'@;
put 'dXJuWzJdfX0pfSl9LEcucHJvdG90eXBlLmdldFNlc3Npb25TdGF0ZT1mdW5jdGlvbihXLFUscSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHRlPXRoaXM7cmV0dXJuIFIodGhpcyxmdW5jdGlvbihuZSl7c3dpdGNoKG5lLmxhYmVsKXtjYXNlIDA6cmV0dXJu'@;
put 'WzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChXLHEsInRleHQvcGxhaW4iLHsiSWYtTm9uZS1NYXRjaCI6VX0pLnRoZW4oZnVuY3Rpb24oaWUpe3JldHVybntyZXN1bHQ6aWUucmVzdWx0LHJlc3BvbnNlU3RhdHVzOmllLnN0YXR1c319KS5jYXRjaChmdW5jdGlvbihpZSl7dGhyb3coMCxqLnBy'@;
put 'ZWZpeE1lc3NhZ2UpKHRlLmdldEVycm9yTWVzc2FnZShpZSxXLCJHRVQiKSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBzZXNzaW9uIHN0YXRlLiAiKX0pXTtjYXNlIDE6cmV0dXJuWzIsbmUuc2VudCgpXX19KX0pfSxHLnByb3RvdHlwZS5nZXRWYXJpYWJsZT1mdW5jdGlvbihXLFUscSl7cmV0dXJu'@;
put 'IEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHRlLG5lPXRoaXM7cmV0dXJuIFIodGhpcyxmdW5jdGlvbihpZSl7c3dpdGNoKGllLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRlPSIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiL2NvbXB1dGUvc2Vzc2lvbnMvIikuY29uY2F0KFcs'@;
put 'Ii92YXJpYWJsZXMvIikuY29uY2F0KFUpLFs0LHRoaXMucmVxdWVzdENsaWVudC5nZXQodGUscSkuY2F0Y2goZnVuY3Rpb24obGUpe3Rocm93KDAsai5wcmVmaXhNZXNzYWdlKShuZS5nZXRFcnJvck1lc3NhZ2UobGUsdGUsIkdFVCIpLCJFcnJvciB3aGlsZSBmZXRjaGluZyBzZXNzaW9uIHZh'@;
put 'cmlhYmxlICciLmNvbmNhdChVLCInLiAiKSl9KV07Y2FzZSAxOnJldHVyblsyLGllLnNlbnQoKV19fSl9KX0sR30oKTtCLlNlc3Npb25NYW5hZ2VyPVZ9LDU0MDE6ZnVuY3Rpb24oSCxCLEwpeyJ1c2Ugc3RyaWN0Ijt2YXIgSz1MKDQxNTUpLEo9TCg1MTA4KSxJPXRoaXMmJnRoaXMuX19hc3Np'@;
put 'Z258fGZ1bmN0aW9uKCl7cmV0dXJuIEk9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24obmUpe2Zvcih2YXIgaWUsbGU9MSxkZT1hcmd1bWVudHMubGVuZ3RoO2xlPGRlO2xlKyspZm9yKHZhciB1ZSBpbiBpZT1hcmd1bWVudHNbbGVdKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2Fs'@;
put 'bChpZSx1ZSkmJihuZVt1ZV09aWVbdWVdKTtyZXR1cm4gbmV9LEkuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxSPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihuZSxpZSxsZSxkZSl7cmV0dXJuIG5ldyhsZXx8KGxlPVByb21pc2UpKShmdW5jdGlvbih1ZSxjZSl7ZnVuY3Rpb24gWShO'@;
put 'KXt0cnl7eChkZS5uZXh0KE4pKX1jYXRjaChGKXtjZShGKX19ZnVuY3Rpb24gYihOKXt0cnl7eChkZS50aHJvdyhOKSl9Y2F0Y2goRil7Y2UoRil9fWZ1bmN0aW9uIHgoTil7dmFyIEY7Ti5kb25lP3VlKE4udmFsdWUpOihGPU4udmFsdWUsRiBpbnN0YW5jZW9mIGxlP0Y6bmV3IGxlKGZ1bmN0'@;
put 'aW9uKGcpe2coRil9KSkudGhlbihZLGIpfXgoKGRlPWRlLmFwcGx5KG5lLGllfHxbXSkpLm5leHQoKSl9KX0sRT10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihuZSxpZSl7dmFyIGxlLGRlLHVlLGNlLFk9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmdWVbMF0pdGhyb3cg'@;
put 'dWVbMV07cmV0dXJuIHVlWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIGNlPXtuZXh0OmIoMCksdGhyb3c6YigxKSxyZXR1cm46YigyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKGNlW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGNlO2Z1bmN0aW9u'@;
put 'IGIoeCl7cmV0dXJuIGZ1bmN0aW9uKE4pe3JldHVybiBmdW5jdGlvbihGKXtpZihsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtZOyl0cnl7aWYobGU9MSxkZSYmKHVlPTImRlswXT9kZS5yZXR1cm46RlswXT9kZS50aHJvd3x8'@;
put 'KCh1ZT1kZS5yZXR1cm4pJiZ1ZS5jYWxsKGRlKSwwKTpkZS5uZXh0KSYmISh1ZT11ZS5jYWxsKGRlLEZbMV0pKS5kb25lKXJldHVybiB1ZTtzd2l0Y2goZGU9MCx1ZSYmKEY9WzImRlswXSx1ZS52YWx1ZV0pLEZbMF0pe2Nhc2UgMDpjYXNlIDE6dWU9RjticmVhaztjYXNlIDQ6cmV0dXJuIFku'@;
put 'bGFiZWwrKyx7dmFsdWU6RlsxXSxkb25lOiExfTtjYXNlIDU6WS5sYWJlbCsrLGRlPUZbMV0sRj1bMF07Y29udGludWU7Y2FzZSA3OkY9WS5vcHMucG9wKCksWS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgodWU9KHVlPVkudHJ5cykubGVuZ3RoPjAmJnVlW3VlLmxlbmd0aC0x'@;
put 'XSl8fDYhPT1GWzBdJiYyIT09RlswXSkpe1k9MDtjb250aW51ZX1pZigzPT09RlswXSYmKCF1ZXx8RlsxXT51ZVswXSYmRlsxXTx1ZVszXSkpe1kubGFiZWw9RlsxXTticmVha31pZig2PT09RlswXSYmWS5sYWJlbDx1ZVsxXSl7WS5sYWJlbD11ZVsxXSx1ZT1GO2JyZWFrfWlmKHVlJiZZLmxh'@;
put 'YmVsPHVlWzJdKXtZLmxhYmVsPXVlWzJdLFkub3BzLnB1c2goRik7YnJlYWt9dWVbMl0mJlkub3BzLnBvcCgpLFkudHJ5cy5wb3AoKTtjb250aW51ZX1GPWllLmNhbGwobmUsWSl9Y2F0Y2goZyl7Rj1bNixnXSxkZT0wfWZpbmFsbHl7bGU9dWU9MH1pZig1JkZbMF0pdGhyb3cgRlsxXTtyZXR1'@;
put 'cm57dmFsdWU6RlswXT9GWzFdOnZvaWQgMCxkb25lOiEwfX0oW3gsTl0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxCLmV4ZWN1dGVTY3JpcHQ9dm9pZCAwO3ZhciB6PUwoNzc1Nyksaj1MKDk3NzgpLFY9TCgzNjA3KSxHPUwoNzA0KSxXPUwo'@;
put 'NTkyOCksVT1MKDcxNCkscT1MKDEzNDMpLHRlPUwoNjQ5Nik7Qi5leGVjdXRlU2NyaXB0PWZ1bmN0aW9uIG5lKGllLGxlLGRlLHVlLGNlLFksYix4LE4sRixnLEMsTSx5KXt2YXIgcCxTO3JldHVybiB2b2lkIDA9PT14JiYoeD1udWxsKSx2b2lkIDA9PT1OJiYoTj0hMSksdm9pZCAwPT09RiYm'@;
put 'KEY9ITEpLHZvaWQgMD09PWcmJihnPSEwKSx2b2lkIDA9PT1NJiYoTT0hMSksUih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgUSxyZSxmZSxtZSxrZSxUZSxQZSxGZSxOZSxMZSxCZSxIZSxRZSxtdCxLZSx3ZSxJZSxPZSxldCxudCxxZSxodCxFZSxEZT10aGlzO3JldHVybiBF'@;
put 'KHRoaXMsZnVuY3Rpb24oJGUpe3N3aXRjaCgkZS5sYWJlbCl7Y2FzZSAwOnJldHVybiBRPShifHx7fSkuYWNjZXNzX3Rva2VuLGI/WzQsKDAsRy5nZXRUb2tlbnMpKGllLGIpXTpbMywyXTtjYXNlIDE6UT0kZS5zZW50KCkuYWNjZXNzX3Rva2VuLCRlLmxhYmVsPTI7Y2FzZSAyOnJlPUsubG9n'@;
put 'Z2VyfHxKLCRlLmxhYmVsPTM7Y2FzZSAzOnJldHVybiAkZS50cnlzLnB1c2goWzMsMTksLDIwXSksZmU9dm9pZCAwLFs0LGxlLmdldFNlc3Npb24oUSkuY2F0Y2goZnVuY3Rpb24oYXQpe3Rocm93KDAsai5wcmVmaXhNZXNzYWdlKShhdCwiRXJyb3Igd2hpbGUgZ2V0dGluZyBzZXNzaW9uLiAi'@;
put 'KX0pXTtjYXNlIDQ6cmV0dXJuIG1lPSRlLnNlbnQoKSxmZT1tZS5pZCxNP1s0LGxlLmdldFZhcmlhYmxlKGZlLCJTWVNKT0JJRCIsUSkuY2F0Y2goZnVuY3Rpb24oYXQpe3Rocm93KDAsai5wcmVmaXhNZXNzYWdlKShhdCwiRXJyb3Igd2hpbGUgZ2V0dGluZyBzZXNzaW9uIHZhcmlhYmxlLiAi'@;
put 'KX0pXTpbMyw2XTtjYXNlIDU6KGtlPSRlLnNlbnQoKS5yZXN1bHQpJiZrZS52YWx1ZSYmKFRlPWRlP3VlLnNwbGl0KGRlKS5qb2luKCIiKS5yZXBsYWNlKC9eXC8vLCIiKTp1ZSwoSy5sb2dnZXJ8fEopLmluZm8oIlRyaWdnZXJlZCAnIi5jb25jYXQoVGUsIicgd2l0aCBQSUQgIikuY29uY2F0'@;
put 'KGtlLnZhbHVlLCIgYXQgIikuY29uY2F0KCgwLHoudGltZXN0YW1wVG9ZWVlZTU1EREhITU1TUykoKSkpKSwkZS5sYWJlbD02O2Nhc2UgNjpyZXR1cm4gUGU9e19jb250ZXh0TmFtZTpZLF9PTUlUSlNPTkxJU1RJTkc6ITAsX09NSVRKU09OTE9HOiEwLF9PTUlUU0VTU0lPTlJFU1VMVFM6ITAs'@;
put 'X09NSVRURVhUTElTVElORzohMCxfT01JVFRFWFRMT0c6ITB9LE4mJihQZS5fT01JVFRFWFRMT0c9ITEsUGUuX09NSVRTRVNTSU9OUkVTVUxUUz0hMSksRmU9dm9pZCAwLCgwLFcuaXNSZWxhdGl2ZVBhdGgpKHVlKT9GZT0iZXhlYy0iLmNvbmNhdCh1ZS5pbmNsdWRlcygiLyIpP3VlLnNwbGl0'@;
put 'KCIvIilbMV06dWUpOihOZT11ZS5zcGxpdCgiLyIpLEZlPU5lLnBvcCgpKSxMZT17U1lTX0pFU19KT0JfVVJJOiIiLF9wcm9ncmFtOigwLFcuaXNSZWxhdGl2ZVBhdGgpKHVlKT9kZSsiLyIrdWU6dWV9LHkmJihMZT1JKEkoe30sTGUpLHkpKSxOJiYoTGU9SShJKHt9LExlKSx7X0RFQlVHOjEz'@;
put 'MX0pKSxCZT1bXSx4P0pTT04uc3RyaW5naWZ5KHgpLmluY2x1ZGVzKCI7Iik/WzQsKDAsdGUudXBsb2FkVGFibGVzKShpZSx4LFEpLmNhdGNoKGZ1bmN0aW9uKGF0KXt0aHJvdygwLGoucHJlZml4TWVzc2FnZSkoYXQsIkVycm9yIHdoaWxlIHVwbG9hZGluZyB0YWJsZXMuICIpfSldOlszLDhd'@;
put 'OlszLDldO2Nhc2UgNzpyZXR1cm4gQmU9JGUuc2VudCgpLExlLl93ZWJpbl9maWxlX2NvdW50PUJlLmxlbmd0aCxCZS5mb3JFYWNoKGZ1bmN0aW9uKGF0LGN0KXtMZVsiX3dlYmluX2ZpbGV1cmkiLmNvbmNhdChjdCsxKV09Ii9maWxlcy9maWxlcy8iLmNvbmNhdChhdC5maWxlLmlkKSxMZVsi'@;
put 'X3dlYmluX25hbWUiLmNvbmNhdChjdCsxKV09YXQudGFibGVOYW1lfSksWzMsOV07Y2FzZSA4OkxlPUkoSSh7fSxMZSksKDAsVS5mb3JtYXREYXRhRm9yUmVxdWVzdCkoeCkpLCRlLmxhYmVsPTk7Y2FzZSA5OnJldHVybiBIZT17bmFtZTpGZSxkZXNjcmlwdGlvbjoiUG93ZXJlZCBieSBTQVNq'@;
put 'cyIsY29kZTpjZSx2YXJpYWJsZXM6TGUsYXJndW1lbnRzOlBlfSxbNCxpZS5wb3N0KCIvY29tcHV0ZS9zZXNzaW9ucy8iLmNvbmNhdChmZSwiL2pvYnMiKSxIZSxRKS5jYXRjaChmdW5jdGlvbihhdCl7dGhyb3coMCxqLnByZWZpeE1lc3NhZ2UpKGF0LCJFcnJvciB3aGlsZSBwb3N0aW5nIGpv'@;
put 'Yi4gIil9KV07Y2FzZSAxMDpyZXR1cm4gUWU9JGUuc2VudCgpLG10PVFlLnJlc3VsdCxnPyhOJiYocmUuaW5mbygiSm9iIGhhcyBiZWVuIHN1Ym1pdHRlZCBmb3IgJyIuY29uY2F0KEZlLCInLiIpKSxyZS5pbmZvKCJZb3UgY2FuIG1vbml0b3IgdGhlIGpvYiBwcm9ncmVzcyBhdCAnIi5jb25j'@;
put 'YXQoaWUuZ2V0QmFzZVVybCgpKS5jb25jYXQobXQubGlua3MuZmluZChmdW5jdGlvbihhdCl7cmV0dXJuInN0YXRlIj09PWF0LnJlbH0pLmhyZWYsIicuIikpKSxbNCwoMCxxLnBvbGxKb2JTdGF0ZSkoaWUsbXQsTixiLEMpLmNhdGNoKGZ1bmN0aW9uKGF0KXtyZXR1cm4gUihEZSx2b2lkIDAs'@;
put 'dm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGN0LE90LFB0LEF0LEp0LG1uO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oTnQpe3N3aXRjaChOdC5sYWJlbCl7Y2FzZSAwOnJldHVybiBjdD1udWxsPT09KEp0PWF0Py5yZXNwb25zZSl8fHZvaWQgMD09PUp0P3ZvaWQgMDpKdC5kYXRhLE90PS9lcnI9WzAt'@;
put 'OV0qLC8uZXhlYyhjdCksIjUxMTMiIT09KG51bGw9PT0obW49T3Q/LlswXSl8fHZvaWQgMD09PW1uP3ZvaWQgMDptbi5zbGljZSg0LC0xKSk/WzMsMl06KFB0PW10LmxpbmtzLmZpbmQoZnVuY3Rpb24oYm4pe3JldHVybiJ1cCI9PT1ibi5yZWx9KS5ocmVmKyIvbG9nIixBdD1hdCxbNCwoMCxX'@;
put 'LmZldGNoTG9nQnlDaHVua3MpKGllLFEsUHQsMWU2KV0pO2Nhc2UgMTpBdC5sb2c9TnQuc2VudCgpLE50LmxhYmVsPTI7Y2FzZSAyOnRocm93KDAsai5wcmVmaXhNZXNzYWdlKShhdCwiRXJyb3Igd2hpbGUgcG9sbGluZyBqb2Igc3RhdHVzLiAiKX19KX0pfSldKTpbMixtZV07Y2FzZSAxMTpy'@;
put 'ZXR1cm4gS2U9JGUuc2VudCgpLGI/WzQsKDAsRy5nZXRUb2tlbnMpKGllLGIpXTpbMywxM107Y2FzZSAxMjpRPSRlLnNlbnQoKS5hY2Nlc3NfdG9rZW4sJGUubGFiZWw9MTM7Y2FzZSAxMzpyZXR1cm5bNCxpZS5nZXQoIi9jb21wdXRlL3Nlc3Npb25zLyIuY29uY2F0KGZlLCIvam9icy8iKS5j'@;
put 'b25jYXQobXQuaWQpLFEpLmNhdGNoKGZ1bmN0aW9uKGF0KXt0aHJvdygwLGoucHJlZml4TWVzc2FnZSkoYXQsIkVycm9yIHdoaWxlIGdldHRpbmcgam9iLiAiKX0pXTtjYXNlIDE0OnJldHVybiB3ZT0kZS5zZW50KCkucmVzdWx0LEllPXZvaWQgMCxPZT0iIixldD13ZS5saW5rcy5maW5kKGZ1'@;
put 'bmN0aW9uKGF0KXtyZXR1cm4ibG9nIj09PWF0LnJlbH0pLE4mJmV0PyhudD0iIi5jb25jYXQoZXQuaHJlZiwiL2NvbnRlbnQiKSxxZT1udWxsIT09KFM9bnVsbD09PShwPXdlLmxvZ1N0YXRpc3RpY3MpfHx2b2lkIDA9PT1wP3ZvaWQgMDpwLmxpbmVDb3VudCkmJnZvaWQgMCE9PVM/UzoxZTYs'@;
put 'WzQsKDAsVy5mZXRjaExvZ0J5Q2h1bmtzKShpZSxRLG50LHFlKV0pOlszLDE2XTtjYXNlIDE1Ok9lPSRlLnNlbnQoKSwkZS5sYWJlbD0xNjtjYXNlIDE2OmlmKCJmYWlsZWQiPT09S2V8fCJlcnJvciI9PT1LZSl0aHJvdyBuZXcgVi5Db21wdXRlSm9iRXhlY3V0aW9uRXJyb3Iod2UsT2UpO3Jl'@;
put 'dHVybiBGPyhodD0iL2NvbXB1dGUvc2Vzc2lvbnMvIi5jb25jYXQoZmUsIi9maWxlcmVmcy9fd2Vib3V0L2NvbnRlbnQiKSxbNCxpZS5nZXQoaHQsUSwidGV4dC9wbGFpbiIpLmNhdGNoKGZ1bmN0aW9uKGF0KXtyZXR1cm4gUihEZSx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGN0LE90'@;
put 'LFB0LEF0O3JldHVybiBFKHRoaXMsZnVuY3Rpb24oSnQpe3N3aXRjaChKdC5sYWJlbCl7Y2FzZSAwOnJldHVybiBhdCBpbnN0YW5jZW9mIFYuTm90Rm91bmRFcnJvciYmZXQ/KGN0PSIiLmNvbmNhdChldC5ocmVmLCIvY29udGVudCIpLE90PW51bGwhPT0oQXQ9bnVsbD09PShQdD13ZS5sb2dT'@;
put 'dGF0aXN0aWNzKXx8dm9pZCAwPT09UHQ/dm9pZCAwOlB0LmxpbmVDb3VudCkmJnZvaWQgMCE9PUF0P0F0OjFlNixbNCwoMCxXLmZldGNoTG9nQnlDaHVua3MpKGllLFEsY3QsT3QpXSk6WzMsMl07Y2FzZSAxOnJldHVybiBPZT1KdC5zZW50KCksWzIsUHJvbWlzZS5yZWplY3Qoe3N0YXR1czo1'@;
put 'MDAsbG9nOk9lfSldO2Nhc2UgMjpyZXR1cm5bMix7cmVzdWx0OkpTT04uc3RyaW5naWZ5KGF0KX1dfX0pfSl9KV0pOlsyLHtqb2I6d2UsbG9nOk9lfV07Y2FzZSAxNzpyZXR1cm4gSWU9JGUuc2VudCgpLFs0LGxlLmNsZWFyU2Vzc2lvbihmZSxRKS5jYXRjaChmdW5jdGlvbihhdCl7dGhyb3co'@;
put 'MCxqLnByZWZpeE1lc3NhZ2UpKGF0LCJFcnJvciB3aGlsZSBjbGVhcmluZyBzZXNzaW9uLiAiKX0pXTtjYXNlIDE4OnJldHVybiAkZS5zZW50KCksWzIse3Jlc3VsdDpJZT8ucmVzdWx0LGxvZzpPZX1dO2Nhc2UgMTk6aWYoNDA0PT09KEVlPSRlLnNlbnQoKSkuc3RhdHVzKXJldHVyblsyLG5l'@;
put 'KGllLGxlLGRlLHVlLGNlLFksYix4LE4sITEsITApXTt0aHJvdygwLGoucHJlZml4TWVzc2FnZSkoRWUsIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBzY3JpcHQuICIpO2Nhc2UgMjA6cmV0dXJuWzJdfX0pfSl9fSw3NDU4OmZ1bmN0aW9uKEgsQixMKXsidXNlIHN0cmljdCI7dmFyIEs9TCg0MTU1'@;
put 'KSxKPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbih6LGosVixHKXtyZXR1cm4gbmV3KFZ8fChWPVByb21pc2UpKShmdW5jdGlvbihXLFUpe2Z1bmN0aW9uIHEoaWUpe3RyeXtuZShHLm5leHQoaWUpKX1jYXRjaChsZSl7VShsZSl9fWZ1bmN0aW9uIHRlKGllKXt0cnl7bmUoRy50aHJv'@;
put 'dyhpZSkpfWNhdGNoKGxlKXtVKGxlKX19ZnVuY3Rpb24gbmUoaWUpe3ZhciBsZTtpZS5kb25lP1coaWUudmFsdWUpOihsZT1pZS52YWx1ZSxsZSBpbnN0YW5jZW9mIFY/bGU6bmV3IFYoZnVuY3Rpb24oZGUpe2RlKGxlKX0pKS50aGVuKHEsdGUpfW5lKChHPUcuYXBwbHkoeixqfHxbXSkpLm5l'@;
put 'eHQoKSl9KX0sST10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbih6LGope3ZhciBWLEcsVyxVLHE9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmV1swXSl0aHJvdyBXWzFdO3JldHVybiBXWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIFU9e25leHQ6dGUoMCksdGhyb3c6'@;
put 'dGUoMSkscmV0dXJuOnRlKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoVVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxVO2Z1bmN0aW9uIHRlKG5lKXtyZXR1cm4gZnVuY3Rpb24oaWUpe3JldHVybiBmdW5jdGlvbihsZSl7aWYoVil0aHJvdyBuZXcg'@;
put 'VHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtxOyl0cnl7aWYoVj0xLEcmJihXPTImbGVbMF0/Ry5yZXR1cm46bGVbMF0/Ry50aHJvd3x8KChXPUcucmV0dXJuKSYmVy5jYWxsKEcpLDApOkcubmV4dCkmJiEoVz1XLmNhbGwoRyxsZVsxXSkpLmRvbmUp'@;
put 'cmV0dXJuIFc7c3dpdGNoKEc9MCxXJiYobGU9WzImbGVbMF0sVy52YWx1ZV0pLGxlWzBdKXtjYXNlIDA6Y2FzZSAxOlc9bGU7YnJlYWs7Y2FzZSA0OnJldHVybiBxLmxhYmVsKysse3ZhbHVlOmxlWzFdLGRvbmU6ITF9O2Nhc2UgNTpxLmxhYmVsKyssRz1sZVsxXSxsZT1bMF07Y29udGludWU7'@;
put 'Y2FzZSA3OmxlPXEub3BzLnBvcCgpLHEudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKFc9KFc9cS50cnlzKS5sZW5ndGg+MCYmV1tXLmxlbmd0aC0xXSl8fDYhPT1sZVswXSYmMiE9PWxlWzBdKSl7cT0wO2NvbnRpbnVlfWlmKDM9PT1sZVswXSYmKCFXfHxsZVsxXT5XWzBdJiZs'@;
put 'ZVsxXTxXWzNdKSl7cS5sYWJlbD1sZVsxXTticmVha31pZig2PT09bGVbMF0mJnEubGFiZWw8V1sxXSl7cS5sYWJlbD1XWzFdLFc9bGU7YnJlYWt9aWYoVyYmcS5sYWJlbDxXWzJdKXtxLmxhYmVsPVdbMl0scS5vcHMucHVzaChsZSk7YnJlYWt9V1syXSYmcS5vcHMucG9wKCkscS50cnlzLnBv'@;
put 'cCgpO2NvbnRpbnVlfWxlPWouY2FsbCh6LHEpfWNhdGNoKGRlKXtsZT1bNixkZV0sRz0wfWZpbmFsbHl7Vj1XPTB9aWYoNSZsZVswXSl0aHJvdyBsZVsxXTtyZXR1cm57dmFsdWU6bGVbMF0/bGVbMV06dm9pZCAwLGRvbmU6ITB9fShbbmUsaWVdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHko'@;
put 'QiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQi5nZXRGaWxlU3RyZWFtPXZvaWQgMDt2YXIgUj1MKDI5NzUpLEU9TCg3NzU3KTtCLmdldEZpbGVTdHJlYW09ZnVuY3Rpb24oeixqKXtyZXR1cm4gSih2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBWLEcsVyxVLHE7cmV0dXJu'@;
put 'IEkodGhpcyxmdW5jdGlvbih0ZSl7c3dpdGNoKHRlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIFY9TCgyOTc1KS5jcmVhdGVXcml0ZVN0cmVhbSxHPWp8fEsuY3dkKCksWzQsKDAsUi5pc0ZvbGRlcikoRyldO2Nhc2UgMTpyZXR1cm4gdGUuc2VudCgpPyhXPSIiLmNvbmNhdCh6Lm5hbWV8fCJqb2Ii'@;
put 'LCItIikuY29uY2F0KCgwLEUuZ2VuZXJhdGVUaW1lc3RhbXApKCksIi5sb2ciKSxVPUwoMjUyMCkscT1VLmpvaW4oanx8Sy5jd2QoKSxXKSxbNCxWKHEpXSk6WzMsM107Y2FzZSAyOmNhc2UgNDpyZXR1cm5bMix0ZS5zZW50KCldO2Nhc2UgMzpyZXR1cm5bNCxWKEcpXX19KX0pfX0sMTM0Mzpm'@;
put 'dW5jdGlvbihILEIsTCl7InVzZSBzdHJpY3QiO3ZhciBLPUwoNDE1NSksSj1MKDUxMDgpLEk9dGhpcyYmdGhpcy5fX2Fzc2lnbnx8ZnVuY3Rpb24oKXtyZXR1cm4gST1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihxKXtmb3IodmFyIHRlLG5lPTEsaWU9YXJndW1lbnRzLmxlbmd0aDtuZTxpZTtu'@;
put 'ZSsrKWZvcih2YXIgbGUgaW4gdGU9YXJndW1lbnRzW25lXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGUsbGUpJiYocVtsZV09dGVbbGVdKTtyZXR1cm4gcX0sSS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LFI9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKHEs'@;
put 'dGUsbmUsaWUpe3JldHVybiBuZXcobmV8fChuZT1Qcm9taXNlKSkoZnVuY3Rpb24obGUsZGUpe2Z1bmN0aW9uIHVlKGIpe3RyeXtZKGllLm5leHQoYikpfWNhdGNoKHgpe2RlKHgpfX1mdW5jdGlvbiBjZShiKXt0cnl7WShpZS50aHJvdyhiKSl9Y2F0Y2goeCl7ZGUoeCl9fWZ1bmN0aW9uIFko'@;
put 'Yil7dmFyIHg7Yi5kb25lP2xlKGIudmFsdWUpOih4PWIudmFsdWUseCBpbnN0YW5jZW9mIG5lP3g6bmV3IG5lKGZ1bmN0aW9uKE4pe04oeCl9KSkudGhlbih1ZSxjZSl9WSgoaWU9aWUuYXBwbHkocSx0ZXx8W10pKS5uZXh0KCkpfSl9LEU9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rp'@;
put 'b24ocSx0ZSl7dmFyIG5lLGllLGxlLGRlLHVlPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJmxlWzBdKXRocm93IGxlWzFdO3JldHVybiBsZVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBkZT17bmV4dDpjZSgwKSx0aHJvdzpjZSgxKSxyZXR1cm46Y2UoMil9LCJmdW5jdGlvbiI9'@;
put 'PXR5cGVvZiBTeW1ib2wmJihkZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxkZTtmdW5jdGlvbiBjZShZKXtyZXR1cm4gZnVuY3Rpb24oYil7cmV0dXJuIGZ1bmN0aW9uKHgpe2lmKG5lKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5'@;
put 'IGV4ZWN1dGluZy4iKTtmb3IoO3VlOyl0cnl7aWYobmU9MSxpZSYmKGxlPTImeFswXT9pZS5yZXR1cm46eFswXT9pZS50aHJvd3x8KChsZT1pZS5yZXR1cm4pJiZsZS5jYWxsKGllKSwwKTppZS5uZXh0KSYmIShsZT1sZS5jYWxsKGllLHhbMV0pKS5kb25lKXJldHVybiBsZTtzd2l0Y2goaWU9'@;
put 'MCxsZSYmKHg9WzImeFswXSxsZS52YWx1ZV0pLHhbMF0pe2Nhc2UgMDpjYXNlIDE6bGU9eDticmVhaztjYXNlIDQ6cmV0dXJuIHVlLmxhYmVsKysse3ZhbHVlOnhbMV0sZG9uZTohMX07Y2FzZSA1OnVlLmxhYmVsKyssaWU9eFsxXSx4PVswXTtjb250aW51ZTtjYXNlIDc6eD11ZS5vcHMucG9w'@;
put 'KCksdWUudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKGxlPShsZT11ZS50cnlzKS5sZW5ndGg+MCYmbGVbbGUubGVuZ3RoLTFdKXx8NiE9PXhbMF0mJjIhPT14WzBdKSl7dWU9MDtjb250aW51ZX1pZigzPT09eFswXSYmKCFsZXx8eFsxXT5sZVswXSYmeFsxXTxsZVszXSkpe3Vl'@;
put 'LmxhYmVsPXhbMV07YnJlYWt9aWYoNj09PXhbMF0mJnVlLmxhYmVsPGxlWzFdKXt1ZS5sYWJlbD1sZVsxXSxsZT14O2JyZWFrfWlmKGxlJiZ1ZS5sYWJlbDxsZVsyXSl7dWUubGFiZWw9bGVbMl0sdWUub3BzLnB1c2goeCk7YnJlYWt9bGVbMl0mJnVlLm9wcy5wb3AoKSx1ZS50cnlzLnBvcCgp'@;
put 'O2NvbnRpbnVlfXg9dGUuY2FsbChxLHVlKX1jYXRjaChOKXt4PVs2LE5dLGllPTB9ZmluYWxseXtuZT1sZT0wfWlmKDUmeFswXSl0aHJvdyB4WzFdO3JldHVybnt2YWx1ZTp4WzBdP3hbMV06dm9pZCAwLGRvbmU6ITB9fShbWSxiXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEIsIl9fZXNN'@;
put 'b2R1bGUiLHt2YWx1ZTohMH0pLEIucG9sbEpvYlN0YXRlPXZvaWQgMDt2YXIgej1MKDcwNCksaj1MKDEzOTUpLFY9TCg1OTI4KTtCLnBvbGxKb2JTdGF0ZT1mdW5jdGlvbihxLHRlLG5lLGllLGxlKXtyZXR1cm4gUih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgZGUsdWUsY2Us'@;
put 'WSxiLHgsTjtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKEYpe3N3aXRjaChGLmxhYmVsKXtjYXNlIDA6aWYoZGU9Sy5sb2dnZXJ8fEosbGU9SShJKHt9LHttYXhQb2xsQ291bnQ6MWUzLHBvbGxJbnRlcnZhbDozMDAsc3RyZWFtTG9nOiExfSksbGV8fHt9KSwhKHVlPXRlLmxpbmtzLmZpbmQoZnVu'@;
put 'Y3Rpb24oZyl7cmV0dXJuInN0YXRlIj09PWcucmVsfSkpKXRocm93IG5ldyBFcnJvcigiSm9iIHN0YXRlIGxpbmsgd2FzIG5vdCBmb3VuZC4iKTtyZXR1cm5bNCxHKHEsdGUsIiIsbmUsaWUpLmNhdGNoKGZ1bmN0aW9uKGcpe3JldHVybiBkZS5lcnJvcigiRXJyb3IgZmV0Y2hpbmcgam9iIHN0'@;
put 'YXRlIGZyb20gIi5jb25jYXQodWUuaHJlZiwiLiBTdGFydGluZyBwb2xsLCBhc3N1bWluZyBqb2IgdG8gYmUgcnVubmluZy4iKSxnKSwidW5hdmFpbGFibGUifSldO2Nhc2UgMTpyZXR1cm4gY2U9Ri5zZW50KCksWT0wLCJjb21wbGV0ZWQiPT09Y2U/WzIsUHJvbWlzZS5yZXNvbHZlKGNlKV06'@;
put 'bGUuc3RyZWFtTG9nJiYoMCxWLmlzTm9kZSkoKT9bNCwoMCxMKDc0NTgpLmdldEZpbGVTdHJlYW0pKHRlLGxlLmxvZ0ZvbGRlclBhdGgpXTpbMywzXTtjYXNlIDI6Yj1GLnNlbnQoKSxGLmxhYmVsPTM7Y2FzZSAzOnJldHVybls0LFUocSx0ZSxjZSxuZSxZLGllLEkoSSh7fSxsZSkse21heFBv'@;
put 'bGxDb3VudDpsZS5tYXhQb2xsQ291bnQ8PTEwMD9sZS5tYXhQb2xsQ291bnQ6MTAwfSksYildO2Nhc2UgNDpyZXR1cm4geD1GLnNlbnQoKSxZPXgucG9sbENvdW50LCFXKGNlPXguc3RhdGUpfHxZPj1sZS5tYXhQb2xsQ291bnQ/WzIsY2VdOihOPXttYXhQb2xsQ291bnQ6MTQ0MCxwb2xsSW50'@;
put 'ZXJ2YWw6NmU0LHN0cmVhbUxvZzohMX0sbGUmJihOLnN0cmVhbUxvZz1sZS5zdHJlYW1Mb2csTi5sb2dGb2xkZXJQYXRoPWxlLmxvZ0ZvbGRlclBhdGgpLFs0LFUocSx0ZSxjZSxuZSxZLGllLE4sYildKTtjYXNlIDU6cmV0dXJuIHg9Ri5zZW50KCksY2U9eC5zdGF0ZSxZPXgucG9sbENvdW50'@;
put 'LGImJmIuZW5kKCksWzIsY2VdfX0pfSl9O3ZhciBHPWZ1bmN0aW9uKHEsdGUsbmUsaWUsbGUpe3JldHVybiBSKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGRlLHVlO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oY2Upe3N3aXRjaChjZS5sYWJlbCl7Y2FzZSAwOmlmKCEoZGU9'@;
put 'dGUubGlua3MuZmluZChmdW5jdGlvbihZKXtyZXR1cm4ic3RhdGUiPT09WS5yZWx9KSkpdGhyb3cgbmV3IEVycm9yKCJKb2Igc3RhdGUgbGluayB3YXMgbm90IGZvdW5kLiIpO3JldHVybiBXKG5lKT8odWU9dm9pZCAwLGxlP1s0LCgwLHouZ2V0VG9rZW5zKShxLGxlKV06WzMsMl0pOlszLDRd'@;
put 'O2Nhc2UgMTp1ZT1jZS5zZW50KCksY2UubGFiZWw9MjtjYXNlIDI6cmV0dXJuWzQscS5nZXQoIiIuY29uY2F0KGRlLmhyZWYsIj9fYWN0aW9uPXdhaXQmd2FpdD0zMDAiKSx1ZT8uYWNjZXNzX3Rva2VuLCJ0ZXh0L3BsYWluIix7fSxpZSkuY2F0Y2goZnVuY3Rpb24oWSl7dGhyb3cgbmV3IGou'@;
put 'Sm9iU3RhdGVQb2xsRXJyb3IodGUuaWQsWSl9KV07Y2FzZSAzOnJldHVyblsyLGNlLnNlbnQoKS5yZXN1bHQudHJpbSgpXTtjYXNlIDQ6cmV0dXJuWzIsbmVdfX0pfSl9LFc9ZnVuY3Rpb24ocSl7cmV0dXJuInJ1bm5pbmciPT09cXx8IiI9PT1xfHwicGVuZGluZyI9PT1xfHwidW5hdmFpbGFi'@;
put 'bGUiPT09cX0sVT1mdW5jdGlvbihxLHRlLG5lLGllLGxlLGRlLHVlLGNlKXtyZXR1cm4gUih2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBZLGIseCxOLEYsZyxDLE0seSxwLFMsUSxyZSxmZSxtZTtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKGtlKXtzd2l0Y2goa2UubGFiZWwp'@;
put 'e2Nhc2UgMDppZihZPTMwMCxiPTFlMyx4PTUsTj0wLEY9bmUsZz0iIixDPTAsTT1LLmxvZ2dlcnx8Six1ZSYmKFk9dWUucG9sbEludGVydmFsfHxZLGI9dWUubWF4UG9sbENvdW50fHxiKSwhKHk9dGUubGlua3MuZmluZChmdW5jdGlvbihUZSl7cmV0dXJuInN0YXRlIj09PVRlLnJlbH0pKSl0'@;
put 'aHJvdyBuZXcgRXJyb3IoIkpvYiBzdGF0ZSBsaW5rIHdhcyBub3QgZm91bmQuIik7a2UubGFiZWw9MTtjYXNlIDE6cmV0dXJuIFcoRikmJmxlPD1iP1s0LEcocSx0ZSxGLGllLGRlKS5jYXRjaChmdW5jdGlvbihUZSl7aWYoTisrLGxlPj1ifHxOPj14KXRocm93IFRlO3JldHVybiBNLmVycm9y'@;
put 'KCJFcnJvciBmZXRjaGluZyBqb2Igc3RhdGUgZnJvbSAiLmNvbmNhdCh5LmhyZWYsIi4gUmVzdW1pbmcgcG9sbCwgYXNzdW1pbmcgam9iIHRvIGJlIHJ1bm5pbmcuIiksVGUpLCJ1bmF2YWlsYWJsZSJ9KV06WzMsOF07Y2FzZSAyOnJldHVybiBGPWtlLnNlbnQoKSxsZSsrLHA9dGUubGlua3Mu'@;
put 'ZmluZChmdW5jdGlvbihUZSl7cmV0dXJuInNlbGYiPT09VGUucmVsfSkuaHJlZix1ZT8uc3RyZWFtTG9nP1s0LHEuZ2V0KHAsZGU/LmFjY2Vzc190b2tlbildOlszLDZdO2Nhc2UgMzpyZXR1cm4gUz1rZS5zZW50KCkucmVzdWx0LFE9bnVsbCE9PShtZT1udWxsPT09KGZlPVMubG9nU3RhdGlz'@;
put 'dGljcyl8fHZvaWQgMD09PWZlP3ZvaWQgMDpmZS5saW5lQ291bnQpJiZ2b2lkIDAhPT1tZT9tZToxZTYsKHJlPSgoMCxWLmlzTm9kZSkoKT9MKDIwODApOntzYXZlTG9nOm51bGx9KS5zYXZlTG9nKT9bNCxyZSh0ZSxxLEMsUSxjZSxkZT8uYWNjZXNzX3Rva2VuKV06WzMsNV07Y2FzZSA0Omtl'@;
put 'LnNlbnQoKSxrZS5sYWJlbD01O2Nhc2UgNTpDKz1RLGtlLmxhYmVsPTY7Y2FzZSA2OnJldHVybiBpZSYmZyE9PUYmJihNLmluZm8oIlBvbGxpbmc6ICIuY29uY2F0KHEuZ2V0QmFzZVVybCgpK3AsIi9zdGF0ZSIpKSxNLmluZm8oIkN1cnJlbnQgam9iIHN0YXRlOiAiLmNvbmNhdChGKSksZz1G'@;
put 'KSwidW5hdmFpbGFibGUiIT1GJiZOPjAmJihOPTApLFs0LCgwLFYuZGVsYXkpKFkpXTtjYXNlIDc6cmV0dXJuIGtlLnNlbnQoKSxbMywxXTtjYXNlIDg6cmV0dXJuWzIse3N0YXRlOkYscG9sbENvdW50OmxlfV19fSl9KX19LDIwODA6ZnVuY3Rpb24oSCxCLEwpeyJ1c2Ugc3RyaWN0Ijt2YXIg'@;
put 'Sz1MKDQxNTUpLEo9TCg1MTA4KSxJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihqLFYsRyxXKXtyZXR1cm4gbmV3KEd8fChHPVByb21pc2UpKShmdW5jdGlvbihVLHEpe2Z1bmN0aW9uIHRlKGxlKXt0cnl7aWUoVy5uZXh0KGxlKSl9Y2F0Y2goZGUpe3EoZGUpfX1mdW5jdGlvbiBu'@;
put 'ZShsZSl7dHJ5e2llKFcudGhyb3cobGUpKX1jYXRjaChkZSl7cShkZSl9fWZ1bmN0aW9uIGllKGxlKXt2YXIgZGU7bGUuZG9uZT9VKGxlLnZhbHVlKTooZGU9bGUudmFsdWUsZGUgaW5zdGFuY2VvZiBHP2RlOm5ldyBHKGZ1bmN0aW9uKHVlKXt1ZShkZSl9KSkudGhlbih0ZSxuZSl9aWUoKFc9'@;
put 'Vy5hcHBseShqLFZ8fFtdKSkubmV4dCgpKX0pfSxSPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKGosVil7dmFyIEcsVyxVLHEsdGU9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmVVswXSl0aHJvdyBVWzFdO3JldHVybiBVWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJu'@;
put 'IHE9e25leHQ6bmUoMCksdGhyb3c6bmUoMSkscmV0dXJuOm5lKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYocVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxxO2Z1bmN0aW9uIG5lKGllKXtyZXR1cm4gZnVuY3Rpb24obGUpe3JldHVybiBmdW5jdGlv'@;
put 'bihkZSl7aWYoRyl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDt0ZTspdHJ5e2lmKEc9MSxXJiYoVT0yJmRlWzBdP1cucmV0dXJuOmRlWzBdP1cudGhyb3d8fCgoVT1XLnJldHVybikmJlUuY2FsbChXKSwwKTpXLm5leHQpJiYhKFU9'@;
put 'VS5jYWxsKFcsZGVbMV0pKS5kb25lKXJldHVybiBVO3N3aXRjaChXPTAsVSYmKGRlPVsyJmRlWzBdLFUudmFsdWVdKSxkZVswXSl7Y2FzZSAwOmNhc2UgMTpVPWRlO2JyZWFrO2Nhc2UgNDpyZXR1cm4gdGUubGFiZWwrKyx7dmFsdWU6ZGVbMV0sZG9uZTohMX07Y2FzZSA1OnRlLmxhYmVsKyss'@;
put 'Vz1kZVsxXSxkZT1bMF07Y29udGludWU7Y2FzZSA3OmRlPXRlLm9wcy5wb3AoKSx0ZS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoVT0oVT10ZS50cnlzKS5sZW5ndGg+MCYmVVtVLmxlbmd0aC0xXSl8fDYhPT1kZVswXSYmMiE9PWRlWzBdKSl7dGU9MDtjb250aW51ZX1pZigz'@;
put 'PT09ZGVbMF0mJighVXx8ZGVbMV0+VVswXSYmZGVbMV08VVszXSkpe3RlLmxhYmVsPWRlWzFdO2JyZWFrfWlmKDY9PT1kZVswXSYmdGUubGFiZWw8VVsxXSl7dGUubGFiZWw9VVsxXSxVPWRlO2JyZWFrfWlmKFUmJnRlLmxhYmVsPFVbMl0pe3RlLmxhYmVsPVVbMl0sdGUub3BzLnB1c2goZGUp'@;
put 'O2JyZWFrfVVbMl0mJnRlLm9wcy5wb3AoKSx0ZS50cnlzLnBvcCgpO2NvbnRpbnVlfWRlPVYuY2FsbChqLHRlKX1jYXRjaCh1ZSl7ZGU9WzYsdWVdLFc9MH1maW5hbGx5e0c9VT0wfWlmKDUmZGVbMF0pdGhyb3cgZGVbMV07cmV0dXJue3ZhbHVlOmRlWzBdP2RlWzFdOnZvaWQgMCxkb25lOiEw'@;
put 'fX0oW2llLGxlXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEIuc2F2ZUxvZz12b2lkIDA7dmFyIEU9TCg1OTI4KSx6PUwoNjEzMSk7Qi5zYXZlTG9nPWZ1bmN0aW9uKGosVixHLFcsVSxxKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAs'@;
put 'ZnVuY3Rpb24oKXt2YXIgdGUsbmUsaWU7cmV0dXJuIFIodGhpcyxmdW5jdGlvbihsZSl7c3dpdGNoKGxlLmxhYmVsKXtjYXNlIDA6aWYoIXEpdGhyb3cgbmV3IEVycm9yKCJMb2dzIGZvciBqb2IgIi5jb25jYXQoai5pZCwiIGNhbm5vdCBiZSBmZXRjaGVkIHdpdGhvdXQgYSB2YWxpZCBhY2Nl'@;
put 'c3MgdG9rZW4uIikpO2lmKCFVKXRocm93IG5ldyBFcnJvcigiTG9ncyBmb3Igam9iICIuY29uY2F0KGouaWQsIiBjYW5ub3QgYmUgd3JpdHRlbiB3aXRob3V0IGEgdmFsaWQgd3JpdGUgc3RyZWFtLiIpKTtpZih0ZT1LLmxvZ2dlcnx8SiwhKG5lPWoubGlua3MuZmluZChmdW5jdGlvbihkZSl7'@;
put 'cmV0dXJuImxvZyI9PT1kZS5yZWx9KSkpdGhyb3cgbmV3IEVycm9yKCJMb2cgVVJMIGZvciBqb2IgIi5jb25jYXQoai5pZCwiIHdhcyBub3QgZm91bmQuIikpO3JldHVybls0LCgwLEUuZmV0Y2hMb2cpKFYscSwiIi5jb25jYXQobmUuaHJlZiwiL2NvbnRlbnQiKSxHLFcpXTtjYXNlIDE6cmV0'@;
put 'dXJuIGllPWxlLnNlbnQoKSx0ZS5pbmZvKCJXcml0aW5nIGxvZ3MgdG8gIi5jb25jYXQoVS5wYXRoKSksWzQsKDAsei53cml0ZVN0cmVhbSkoVSxpZXx8IiIpXTtjYXNlIDI6cmV0dXJuIGxlLnNlbnQoKSxbMl19fSl9KX19LDY0OTY6ZnVuY3Rpb24oSCxCLEwpeyJ1c2Ugc3RyaWN0Ijt2YXIg'@;
put 'Sz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oRSx6LGosVil7cmV0dXJuIG5ldyhqfHwoaj1Qcm9taXNlKSkoZnVuY3Rpb24oRyxXKXtmdW5jdGlvbiBVKG5lKXt0cnl7dGUoVi5uZXh0KG5lKSl9Y2F0Y2goaWUpe1coaWUpfX1mdW5jdGlvbiBxKG5lKXt0cnl7dGUoVi50aHJvdyhu'@;
put 'ZSkpfWNhdGNoKGllKXtXKGllKX19ZnVuY3Rpb24gdGUobmUpe3ZhciBpZTtuZS5kb25lP0cobmUudmFsdWUpOihpZT1uZS52YWx1ZSxpZSBpbnN0YW5jZW9mIGo/aWU6bmV3IGooZnVuY3Rpb24obGUpe2xlKGllKX0pKS50aGVuKFUscSl9dGUoKFY9Vi5hcHBseShFLHp8fFtdKSkubmV4dCgp'@;
put 'KX0pfSxKPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKEUseil7dmFyIGosVixHLFcsVT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZHWzBdKXRocm93IEdbMV07cmV0dXJuIEdbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gVz17bmV4dDpxKDApLHRocm93OnEoMSks'@;
put 'cmV0dXJuOnEoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihXW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLFc7ZnVuY3Rpb24gcSh0ZSl7cmV0dXJuIGZ1bmN0aW9uKG5lKXtyZXR1cm4gZnVuY3Rpb24oaWUpe2lmKGopdGhyb3cgbmV3IFR5cGVFcnJv'@;
put 'cigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7VTspdHJ5e2lmKGo9MSxWJiYoRz0yJmllWzBdP1YucmV0dXJuOmllWzBdP1YudGhyb3d8fCgoRz1WLnJldHVybikmJkcuY2FsbChWKSwwKTpWLm5leHQpJiYhKEc9Ry5jYWxsKFYsaWVbMV0pKS5kb25lKXJldHVybiBH'@;
put 'O3N3aXRjaChWPTAsRyYmKGllPVsyJmllWzBdLEcudmFsdWVdKSxpZVswXSl7Y2FzZSAwOmNhc2UgMTpHPWllO2JyZWFrO2Nhc2UgNDpyZXR1cm4gVS5sYWJlbCsrLHt2YWx1ZTppZVsxXSxkb25lOiExfTtjYXNlIDU6VS5sYWJlbCsrLFY9aWVbMV0saWU9WzBdO2NvbnRpbnVlO2Nhc2UgNzpp'@;
put 'ZT1VLm9wcy5wb3AoKSxVLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChHPShHPVUudHJ5cykubGVuZ3RoPjAmJkdbRy5sZW5ndGgtMV0pfHw2IT09aWVbMF0mJjIhPT1pZVswXSkpe1U9MDtjb250aW51ZX1pZigzPT09aWVbMF0mJighR3x8aWVbMV0+R1swXSYmaWVbMV08R1sz'@;
put 'XSkpe1UubGFiZWw9aWVbMV07YnJlYWt9aWYoNj09PWllWzBdJiZVLmxhYmVsPEdbMV0pe1UubGFiZWw9R1sxXSxHPWllO2JyZWFrfWlmKEcmJlUubGFiZWw8R1syXSl7VS5sYWJlbD1HWzJdLFUub3BzLnB1c2goaWUpO2JyZWFrfUdbMl0mJlUub3BzLnBvcCgpLFUudHJ5cy5wb3AoKTtjb250'@;
put 'aW51ZX1pZT16LmNhbGwoRSxVKX1jYXRjaChsZSl7aWU9WzYsbGVdLFY9MH1maW5hbGx5e2o9Rz0wfWlmKDUmaWVbMF0pdGhyb3cgaWVbMV07cmV0dXJue3ZhbHVlOmllWzBdP2llWzFdOnZvaWQgMCxkb25lOiEwfX0oW3RlLG5lXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEIsIl9fZXNN'@;
put 'b2R1bGUiLHt2YWx1ZTohMH0pLEIudXBsb2FkVGFibGVzPXZvaWQgMDt2YXIgST1MKDk3NzgpLFI9TCgyNDAyKTtCLnVwbG9hZFRhYmxlcz1mdW5jdGlvbihFLHosail7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIFYsRyxXLFUscSx0ZSxuZTtyZXR1cm4gSih0'@;
put 'aGlzLGZ1bmN0aW9uKGllKXtzd2l0Y2goaWUubGFiZWwpe2Nhc2UgMDpmb3IoVyBpbiBWPVtdLEc9W10seilHLnB1c2goVyk7VT0wLGllLmxhYmVsPTE7Y2FzZSAxOmlmKCEoVTxHLmxlbmd0aCkpcmV0dXJuWzMsNF07aWYoIkVSUk9SOiBMQVJHRSBTVFJJTkcgTEVOR1RIIj09PSh0ZT0oMCxS'@;
put 'LmNvbnZlcnRUb0NTVikoeixxPUdbVV0pKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBtYXggbGVuZ3RoIG9mIGEgc3RyaW5nIHZhbHVlIGluIFNBU2pzIGlzIDMyNzY1IGNoYXJhY3RlcnMuIik7cmV0dXJuWzQsRS51cGxvYWRGaWxlKCIvZmlsZXMvZmlsZXMjcmF3VXBsb2FkIix0ZSxqKS5jYXRj'@;
put 'aChmdW5jdGlvbihsZSl7dGhyb3coMCxJLnByZWZpeE1lc3NhZ2UpKGxlLCJFcnJvciB3aGlsZSB1cGxvYWRpbmcgZmlsZS4gIil9KV07Y2FzZSAyOm5lPWllLnNlbnQoKSxWLnB1c2goe3RhYmxlTmFtZTpxLGZpbGU6bmUucmVzdWx0fSksaWUubGFiZWw9MztjYXNlIDM6cmV0dXJuIFUrKyxb'@;
put 'MywxXTtjYXNlIDQ6cmV0dXJuWzIsVl19fSl9KX19LDYxMzE6ZnVuY3Rpb24oSCxCKXsidXNlIHN0cmljdCI7dmFyIEw9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEosSSxSLEUpe3JldHVybiBuZXcoUnx8KFI9UHJvbWlzZSkpKGZ1bmN0aW9uKHosail7ZnVuY3Rpb24gVihVKXt0'@;
put 'cnl7VyhFLm5leHQoVSkpfWNhdGNoKHEpe2oocSl9fWZ1bmN0aW9uIEcoVSl7dHJ5e1coRS50aHJvdyhVKSl9Y2F0Y2gocSl7aihxKX19ZnVuY3Rpb24gVyhVKXt2YXIgcTtVLmRvbmU/eihVLnZhbHVlKToocT1VLnZhbHVlLHEgaW5zdGFuY2VvZiBSP3E6bmV3IFIoZnVuY3Rpb24odGUpe3Rl'@;
put 'KHEpfSkpLnRoZW4oVixHKX1XKChFPUUuYXBwbHkoSixJfHxbXSkpLm5leHQoKSl9KX0sSz10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihKLEkpe3ZhciBSLEUseixqLFY9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmelswXSl0aHJvdyB6WzFdO3JldHVybiB6WzFdfSx0'@;
put 'cnlzOltdLG9wczpbXX07cmV0dXJuIGo9e25leHQ6RygwKSx0aHJvdzpHKDEpLHJldHVybjpHKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoaltTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxqO2Z1bmN0aW9uIEcoVyl7cmV0dXJuIGZ1bmN0aW9uKFUp'@;
put 'e3JldHVybiBmdW5jdGlvbihxKXtpZihSKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO1Y7KXRyeXtpZihSPTEsRSYmKHo9MiZxWzBdP0UucmV0dXJuOnFbMF0/RS50aHJvd3x8KCh6PUUucmV0dXJuKSYmei5jYWxsKEUpLDApOkUu'@;
put 'bmV4dCkmJiEoej16LmNhbGwoRSxxWzFdKSkuZG9uZSlyZXR1cm4gejtzd2l0Y2goRT0wLHomJihxPVsyJnFbMF0sei52YWx1ZV0pLHFbMF0pe2Nhc2UgMDpjYXNlIDE6ej1xO2JyZWFrO2Nhc2UgNDpyZXR1cm4gVi5sYWJlbCsrLHt2YWx1ZTpxWzFdLGRvbmU6ITF9O2Nhc2UgNTpWLmxhYmVs'@;
put 'KyssRT1xWzFdLHE9WzBdO2NvbnRpbnVlO2Nhc2UgNzpxPVYub3BzLnBvcCgpLFYudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKHo9KHo9Vi50cnlzKS5sZW5ndGg+MCYmelt6Lmxlbmd0aC0xXSl8fDYhPT1xWzBdJiYyIT09cVswXSkpe1Y9MDtjb250aW51ZX1pZigzPT09cVsw'@;
put 'XSYmKCF6fHxxWzFdPnpbMF0mJnFbMV08elszXSkpe1YubGFiZWw9cVsxXTticmVha31pZig2PT09cVswXSYmVi5sYWJlbDx6WzFdKXtWLmxhYmVsPXpbMV0sej1xO2JyZWFrfWlmKHomJlYubGFiZWw8elsyXSl7Vi5sYWJlbD16WzJdLFYub3BzLnB1c2gocSk7YnJlYWt9elsyXSYmVi5vcHMu'@;
put 'cG9wKCksVi50cnlzLnBvcCgpO2NvbnRpbnVlfXE9SS5jYWxsKEosVil9Y2F0Y2godGUpe3E9WzYsdGVdLEU9MH1maW5hbGx5e1I9ej0wfWlmKDUmcVswXSl0aHJvdyBxWzFdO3JldHVybnt2YWx1ZTpxWzBdP3FbMV06dm9pZCAwLGRvbmU6ITB9fShbVyxVXSl9fX07T2JqZWN0LmRlZmluZVBy'@;
put 'b3BlcnR5KEIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEIud3JpdGVTdHJlYW09dm9pZCAwLEIud3JpdGVTdHJlYW09ZnVuY3Rpb24oSixJKXtyZXR1cm4gTCh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBLKHRoaXMsZnVuY3Rpb24oUil7cmV0dXJuWzIsSi53cml0'@;
put 'ZShJKyJcbiIsZnVuY3Rpb24oRSl7cmV0dXJuIEU/UHJvbWlzZS5yZWplY3QoRSk6UHJvbWlzZS5yZXNvbHZlKCl9KV19KX0pfX0sMjg1MTpmdW5jdGlvbihILEIsTCl7InVzZSBzdHJpY3QiO3ZhciBLPUwoNTEwOCksSj1MKDQxNTUpLEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9u'@;
put 'KGllLGxlLGRlLHVlKXtyZXR1cm4gbmV3KGRlfHwoZGU9UHJvbWlzZSkpKGZ1bmN0aW9uKGNlLFkpe2Z1bmN0aW9uIGIoRil7dHJ5e04odWUubmV4dChGKSl9Y2F0Y2goZyl7WShnKX19ZnVuY3Rpb24geChGKXt0cnl7Tih1ZS50aHJvdyhGKSl9Y2F0Y2goZyl7WShnKX19ZnVuY3Rpb24gTihG'@;
put 'KXt2YXIgZztGLmRvbmU/Y2UoRi52YWx1ZSk6KGc9Ri52YWx1ZSxnIGluc3RhbmNlb2YgZGU/ZzpuZXcgZGUoZnVuY3Rpb24oQyl7QyhnKX0pKS50aGVuKGIseCl9TigodWU9dWUuYXBwbHkoaWUsbGV8fFtdKSkubmV4dCgpKX0pfSxSPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9u'@;
put 'KGllLGxlKXt2YXIgZGUsdWUsY2UsWSxiPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJmNlWzBdKXRocm93IGNlWzFdO3JldHVybiBjZVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBZPXtuZXh0OngoMCksdGhyb3c6eCgxKSxyZXR1cm46eCgyKX0sImZ1bmN0aW9uIj09dHlwZW9m'@;
put 'IFN5bWJvbCYmKFlbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksWTtmdW5jdGlvbiB4KE4pe3JldHVybiBmdW5jdGlvbihGKXtyZXR1cm4gZnVuY3Rpb24oZyl7aWYoZGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5n'@;
put 'LiIpO2Zvcig7YjspdHJ5e2lmKGRlPTEsdWUmJihjZT0yJmdbMF0/dWUucmV0dXJuOmdbMF0/dWUudGhyb3d8fCgoY2U9dWUucmV0dXJuKSYmY2UuY2FsbCh1ZSksMCk6dWUubmV4dCkmJiEoY2U9Y2UuY2FsbCh1ZSxnWzFdKSkuZG9uZSlyZXR1cm4gY2U7c3dpdGNoKHVlPTAsY2UmJihnPVsy'@;
put 'JmdbMF0sY2UudmFsdWVdKSxnWzBdKXtjYXNlIDA6Y2FzZSAxOmNlPWc7YnJlYWs7Y2FzZSA0OnJldHVybiBiLmxhYmVsKysse3ZhbHVlOmdbMV0sZG9uZTohMX07Y2FzZSA1OmIubGFiZWwrKyx1ZT1nWzFdLGc9WzBdO2NvbnRpbnVlO2Nhc2UgNzpnPWIub3BzLnBvcCgpLGIudHJ5cy5wb3Ao'@;
put 'KTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKGNlPShjZT1iLnRyeXMpLmxlbmd0aD4wJiZjZVtjZS5sZW5ndGgtMV0pfHw2IT09Z1swXSYmMiE9PWdbMF0pKXtiPTA7Y29udGludWV9aWYoMz09PWdbMF0mJighY2V8fGdbMV0+Y2VbMF0mJmdbMV08Y2VbM10pKXtiLmxhYmVsPWdbMV07YnJlYWt9'@;
put 'aWYoNj09PWdbMF0mJmIubGFiZWw8Y2VbMV0pe2IubGFiZWw9Y2VbMV0sY2U9ZzticmVha31pZihjZSYmYi5sYWJlbDxjZVsyXSl7Yi5sYWJlbD1jZVsyXSxiLm9wcy5wdXNoKGcpO2JyZWFrfWNlWzJdJiZiLm9wcy5wb3AoKSxiLnRyeXMucG9wKCk7Y29udGludWV9Zz1sZS5jYWxsKGllLGIp'@;
put 'fWNhdGNoKEMpe2c9WzYsQ10sdWU9MH1maW5hbGx5e2RlPWNlPTB9aWYoNSZnWzBdKXRocm93IGdbMV07cmV0dXJue3ZhbHVlOmdbMF0/Z1sxXTp2b2lkIDAsZG9uZTohMH19KFtOLEZdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQi5BdXRo'@;
put 'TWFuYWdlcj12b2lkIDA7dmFyIEU9TCgzOTAwKSx6PUwoMTM5NSksaj1MKDU5MjgpLFY9TCgxMTcwKSxHPUwoNTQxOCksVz1MKDQ1ODIpLFU9TCg2NTQ3KSxxPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gaWUobGUsZGUsdWUsY2Upe3ZhciBZPXRoaXM7dGhpcy5zZXJ2ZXJVcmw9bGUsdGhpcy5zZXJ2'@;
put 'ZXJUeXBlPWRlLHRoaXMucmVxdWVzdENsaWVudD11ZSx0aGlzLmxvZ2luQ2FsbGJhY2s9Y2UsdGhpcy51c2VyTmFtZT0iIix0aGlzLnVzZXJMb25nTmFtZT0iIix0aGlzLnJlZGlyZWN0ZWRMb2dpblVybD0iL1NBU0xvZ29uIix0aGlzLmV4dHJhY3RVc2VyTmFtZT1mdW5jdGlvbihiKXtzd2l0'@;
put 'Y2goWS5zZXJ2ZXJUeXBlKXtjYXNlIEUuU2VydmVyVHlwZS5TYXNWaXlhOnJldHVybiBiPy5pZDtjYXNlIEUuU2VydmVyVHlwZS5TYXM5OnJldHVybiIiO2Nhc2UgRS5TZXJ2ZXJUeXBlLlNhc2pzOnJldHVybiBiPy51c2VybmFtZTtkZWZhdWx0OnJldHVybiBLLmVycm9yKCJTZXJ2ZXIgVHlw'@;
put 'ZSBub3QgZm91bmQgaW4gZXh0cmFjdFVzZXJOYW1lIGZ1bmN0aW9uIiksIiJ9fSx0aGlzLmV4dHJhY3RVc2VyTG9uZ05hbWU9ZnVuY3Rpb24oYil7c3dpdGNoKFkuc2VydmVyVHlwZSl7Y2FzZSBFLlNlcnZlclR5cGUuU2FzVml5YTpyZXR1cm4gYj8ubmFtZTtjYXNlIEUuU2VydmVyVHlwZS5T'@;
put 'YXM5OnJldHVybigwLFYuZXh0cmFjdFVzZXJMb25nTmFtZVNhczkpKGIpO2Nhc2UgRS5TZXJ2ZXJUeXBlLlNhc2pzOnJldHVybiBiPy5kaXNwbGF5TmFtZTtkZWZhdWx0OnJldHVybiBLLmVycm9yKCJTZXJ2ZXIgVHlwZSBub3QgZm91bmQgaW4gZXh0cmFjdFVzZXJOYW1lIGZ1bmN0aW9uIiks'@;
put 'IiJ9fSx0aGlzLnNldExvZ2luVXJsPWZ1bmN0aW9uKGIpe3ZhciB4PWJbMV0ucmVwbGFjZSgvXD8uKi8sIiIpO2lmKCIvIj09PXhbMF0pe3g9eC5zdWJzdHIoMSk7dmFyIE49WS5zZXJ2ZXJVcmw/IiIuY29uY2F0KFkuc2VydmVyVXJsLCIvIikuY29uY2F0KHgpOiIiLmNvbmNhdCh4KTtZLmxv'@;
put 'Z2luVXJsPVkuc2VydmVyVHlwZT09PUUuU2VydmVyVHlwZS5TYXNWaXlhP046Ti5yZXBsYWNlKCIvU0FTTG9nb24vbG9naW4uZG8iLCIvU0FTTG9nb24vbG9naW4iKX19LHRoaXMubG9naW5Vcmw9Ii9TQVNMb2dvbi9sb2dpbiIsdGhpcy5sb2dvdXRVcmw9dGhpcy5zZXJ2ZXJUeXBlPT09RS5T'@;
put 'ZXJ2ZXJUeXBlLlNhczk/Ii9TQVNMb2dvbi9sb2dvdXQ/Ijp0aGlzLnNlcnZlclR5cGU9PT1FLlNlcnZlclR5cGUuU2FzVml5YT8iL1NBU0xvZ29uL2xvZ291dC5kbz8iOiIvU0FTTG9nb24vbG9nb3V0In1yZXR1cm4gaWUucHJvdG90eXBlLnJlZGlyZWN0ZWRMb2dJbj1mdW5jdGlvbihsZSl7'@;
put 'dmFyIGRlPWxlLm9uTG9nZ2VkT3V0O3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciB1ZSxZLGIseCxOLEYsZyxDLE07cmV0dXJuIFIodGhpcyxmdW5jdGlvbih5KXtzd2l0Y2goeS5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMuZmV0Y2hVc2VyTmFtZSgpXTtj'@;
put 'YXNlIDE6cmV0dXJuIHVlPXkuc2VudCgpLFk9dWUudXNlck5hbWUsYj11ZS51c2VyTG9uZ05hbWUsdWUuaXNMb2dnZWRJbj8oKEoubG9nZ2VyfHxLKS5sb2coImxvZ2luIHdhcyBub3QgYXR0ZW1wdGVkIGFzIGEgdmFsaWQgc2Vzc2lvbiBhbHJlYWR5IGV4aXN0cyIpLFs0LHRoaXMubG9naW5D'@;
put 'YWxsYmFjaygpXSk6WzMsM107Y2FzZSAyOnJldHVybiB5LnNlbnQoKSxbMix7aXNMb2dnZWRJbjohMCx1c2VyTmFtZTpZLHVzZXJMb25nTmFtZTpifV07Y2FzZSAzOnJldHVybls0LCgwLEcub3BlbldlYlBhZ2UpKHRoaXMucmVkaXJlY3RlZExvZ2luVXJsLCJTQVNMb2dvbiIse3dpZHRoOjUw'@;
put 'MCxoZWlnaHQ6NjAwfSxkZSldO2Nhc2UgNDpyZXR1cm4oeD15LnNlbnQoKSk/dGhpcy5zZXJ2ZXJUeXBlIT09RS5TZXJ2ZXJUeXBlLlNhc1ZpeWE/WzMsNl06WzQsKDAsVS52ZXJpZnlTYXNWaXlhTG9naW4pKHgpXTpbMix7aXNMb2dnZWRJbjohMSx1c2VyTmFtZToiIix1c2VyTG9uZ05hbWU6'@;
put 'IiJ9XTtjYXNlIDU6cmV0dXJuIEY9eS5zZW50KCksWzMsOF07Y2FzZSA2OnJldHVybls0LCgwLFcudmVyaWZ5U2FzOUxvZ2luKSh4KV07Y2FzZSA3OkY9eS5zZW50KCkseS5sYWJlbD04O2Nhc2UgODpyZXR1cm4gTj1GLmlzTG9nZ2VkSW4seC5jbG9zZSgpLE4/dGhpcy5zZXJ2ZXJUeXBlIT09'@;
put 'RS5TZXJ2ZXJUeXBlLlNhczk/WzMsMTBdOls0LHRoaXMucGVyZm9ybUNBU1NlY3VyaXR5Q2hlY2soKV06WzMsMTNdO2Nhc2UgOTp5LnNlbnQoKSx5LmxhYmVsPTEwO2Nhc2UgMTA6cmV0dXJuWzQsdGhpcy5mZXRjaFVzZXJOYW1lKCldO2Nhc2UgMTE6cmV0dXJuIGc9eS5zZW50KCksQz1nLnVz'@;
put 'ZXJOYW1lLE09Zy51c2VyTG9uZ05hbWUsWzQsdGhpcy5sb2dpbkNhbGxiYWNrKCldO2Nhc2UgMTI6cmV0dXJuIHkuc2VudCgpLFsyLHtpc0xvZ2dlZEluOiEwLHVzZXJOYW1lOkMsdXNlckxvbmdOYW1lOk19XTtjYXNlIDEzOnJldHVyblsyLHtpc0xvZ2dlZEluOiExLHVzZXJOYW1lOiIiLHVz'@;
put 'ZXJMb25nTmFtZToiIn1dfX0pfSl9LGllLnByb3RvdHlwZS5sb2dJbj1mdW5jdGlvbihsZSxkZSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHVlLGNlLGIseCxOLEYsZyxDO3JldHVybiBSKHRoaXMsZnVuY3Rpb24oTSl7c3dpdGNoKE0ubGFiZWwpe2Nhc2Ug'@;
put 'MDpyZXR1cm4gdWU9e19zZXJ2aWNlOiJkZWZhdWx0Iix1c2VybmFtZTpsZSxwYXNzd29yZDpkZX0sdGhpcy51c2VyTmFtZT0iIix0aGlzLnVzZXJMb25nTmFtZT0iIixbNCx0aGlzLmNoZWNrU2Vzc2lvbigpXTtjYXNlIDE6cmV0dXJuIGNlPU0uc2VudCgpLGI9Y2UubG9naW5Gb3JtLHg9Y2Uu'@;
put 'dXNlckxvbmdOYW1lLGNlLmlzTG9nZ2VkSW4/KChKLmxvZ2dlcnx8SykubG9nKCJsb2dpbiB3YXMgbm90IGF0dGVtcHRlZCBhcyBhIHZhbGlkIHNlc3Npb24gYWxyZWFkeSBleGlzdHMiKSxbNCx0aGlzLmxvZ2luQ2FsbGJhY2soKV0pOlszLDNdO2Nhc2UgMjpyZXR1cm4gTS5zZW50KCksdGhp'@;
put 'cy51c2VyTmFtZT11ZS51c2VybmFtZSx0aGlzLnVzZXJMb25nTmFtZT14LFsyLHtpc0xvZ2dlZEluOiEwLHVzZXJOYW1lOnRoaXMudXNlck5hbWUsdXNlckxvbmdOYW1lOnRoaXMudXNlckxvbmdOYW1lfV07Y2FzZSAzOnJldHVybls0LHRoaXMuc2VuZExvZ2luUmVxdWVzdChiLHVlKV07Y2Fz'@;
put 'ZSA0OnJldHVybiBOPU0uc2VudCgpLChGPW5lKHRoaXMuc2VydmVyVHlwZSxOKSk/WzMsOV06dGUoTik/WzQsdGhpcy5nZXRMb2dpbkZvcm0oTildOlszLDddO2Nhc2UgNTpyZXR1cm4gZz1NLnNlbnQoKSxbNCx0aGlzLnNlbmRMb2dpblJlcXVlc3QoZyx1ZSldO2Nhc2UgNjpOPU0uc2VudCgp'@;
put 'LE0ubGFiZWw9NztjYXNlIDc6cmV0dXJuWzQsdGhpcy5jaGVja1Nlc3Npb24oKV07Y2FzZSA4OkM9TS5zZW50KCksRj1DLmlzTG9nZ2VkSW4sdGhpcy51c2VyTG9uZ05hbWU9Qy51c2VyTG9uZ05hbWUsTS5sYWJlbD05O2Nhc2UgOTpyZXR1cm4gRj90aGlzLnNlcnZlclR5cGUhPT1FLlNlcnZl'@;
put 'clR5cGUuU2FzOT9bMywxMV06WzQsdGhpcy5wZXJmb3JtQ0FTU2VjdXJpdHlDaGVjaygpXTpbMywxMl07Y2FzZSAxMDpNLnNlbnQoKSxNLmxhYmVsPTExO2Nhc2UgMTE6dGhpcy5sb2dpbkNhbGxiYWNrKCksdGhpcy51c2VyTmFtZT11ZS51c2VybmFtZSxNLmxhYmVsPTEyO2Nhc2UgMTI6cmV0'@;
put 'dXJuWzIse2lzTG9nZ2VkSW46Rix1c2VyTmFtZTp0aGlzLnVzZXJOYW1lLHVzZXJMb25nTmFtZTp0aGlzLnVzZXJMb25nTmFtZX1dfX0pfSl9LGllLnByb3RvdHlwZS5wZXJmb3JtQ0FTU2VjdXJpdHlDaGVjaz1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlv'@;
put 'bigpe3ZhciBsZTtyZXR1cm4gUih0aGlzLGZ1bmN0aW9uKGRlKXtzd2l0Y2goZGUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gbGU9IiIuY29uY2F0KHRoaXMuc2VydmVyVXJsLCIvU0FTU3RvcmVkUHJvY2Vzcy9qX3NwcmluZ19jYXNfc2VjdXJpdHlfY2hlY2siKSxbNCx0aGlzLnJlcXVlc3RDbGll'@;
put 'bnQuZ2V0KCIvU0FTTG9nb24vbG9naW4/c2VydmljZT0iLmNvbmNhdChsZSksdm9pZCAwKS5jYXRjaChmdW5jdGlvbih1ZSl7aWYoISh1ZSBpbnN0YW5jZW9mIHouTm90Rm91bmRFcnJvcikpdGhyb3cgdWV9KV07Y2FzZSAxOnJldHVybiBkZS5zZW50KCksWzJdfX0pfSl9LGllLnByb3RvdHlw'@;
put 'ZS5zZW5kTG9naW5SZXF1ZXN0PWZ1bmN0aW9uKGxlLGRlKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgWSxiO3JldHVybiBSKHRoaXMsZnVuY3Rpb24oeCl7c3dpdGNoKHgubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5zZXJ2ZXJUeXBlIT09RS5TZXJ2ZXJU'@;
put 'eXBlLlNhc2pzP1szLDJdOls0LHRoaXMucmVxdWVzdENsaWVudC5wb3N0KHRoaXMubG9naW5Vcmwse3VzZXJuYW1lOmRlLnVzZXJuYW1lLHBhc3N3b3JkOmRlLnBhc3N3b3JkfSx2b2lkIDApXTtjYXNlIDE6Y2FzZSAzOnJldHVyblsyLHguc2VudCgpLnJlc3VsdF07Y2FzZSAyOmZvcihZIGlu'@;
put 'IGxlKWRlW1ldPWxlW1ldO3JldHVybiBiPSgwLGouc2VyaWFsaXplKShkZSksWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QodGhpcy5sb2dpblVybCxiLHZvaWQgMCwidGV4dC9wbGFpbiIseyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLEFjY2Vw'@;
put 'dDoiKi8qIn0pXX19KX0pfSxpZS5wcm90b3R5cGUuY2hlY2tTZXNzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGxlLGRlLHVlLGNlLFk7cmV0dXJuIFIodGhpcyxmdW5jdGlvbihiKXtzd2l0Y2goYi5sYWJlbCl7Y2FzZSAwOnJldHVy'@;
put 'bls0LHRoaXMuZmV0Y2hVc2VyTmFtZSgpXTtjYXNlIDE6cmV0dXJuIGxlPWIuc2VudCgpLHVlPWxlLnVzZXJOYW1lLGNlPWxlLnVzZXJMb25nTmFtZSxZPW51bGwsKGRlPWxlLmlzTG9nZ2VkSW4pP1szLDRdOls0LHRoaXMubG9nT3V0KCldO2Nhc2UgMjpyZXR1cm4gYi5zZW50KCksWzQsdGhp'@;
put 'cy5nZXROZXdMb2dpbkZvcm0oKV07Y2FzZSAzOlk9Yi5zZW50KCksYi5sYWJlbD00O2Nhc2UgNDpyZXR1cm5bMixQcm9taXNlLnJlc29sdmUoe2lzTG9nZ2VkSW46ZGUsdXNlck5hbWU6dWUsdXNlckxvbmdOYW1lOmNlLGxvZ2luRm9ybTpZfSldfX0pfSl9LGllLnByb3RvdHlwZS5nZXROZXdM'@;
put 'b2dpbkZvcm09ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgbGU7cmV0dXJuIFIodGhpcyxmdW5jdGlvbihkZSl7c3dpdGNoKGRlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuc2VydmVyVHlwZT09PUUuU2VydmVyVHlwZS5TYXNqcz9bMix0'@;
put 'aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIvIix2b2lkIDApLnRoZW4oZnVuY3Rpb24odWUpe3ZhciBjZSxiPW51bGw9PT0oY2U9LzxzY3JpcHQ+ZG9jdW1lbnQuY29va2llID0gJyhYU1JGLVRPS0VOPS4qOyBNYXgtQWdlPTg2NDAwOyBTYW1lU2l0ZT1TdHJpY3Q7IFBhdGg9XC87KSc8XC9zY3Jp'@;
put 'cHQ+Ly5leGVjKHVlLnJlc3VsdCkpfHx2b2lkIDA9PT1jZT92b2lkIDA6Y2VbMV07YiYmKGRvY3VtZW50LmNvb2tpZT1iKX0pXTpbNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KHRoaXMubG9naW5VcmwucmVwbGFjZSgiL1NBU0xvZ29uL2xvZ2luLmRvIiwiL1NBU0xvZ29uL2xvZ2luIiksdm9p'@;
put 'ZCAwLCJ0ZXh0L3BsYWluIildO2Nhc2UgMTpyZXR1cm4gbGU9ZGUuc2VudCgpLnJlc3VsdCxbNCx0aGlzLmdldExvZ2luRm9ybShsZSldO2Nhc2UgMjpyZXR1cm5bMixkZS5zZW50KCldfX0pfSl9LGllLnByb3RvdHlwZS5mZXRjaFVzZXJOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyx2'@;
put 'b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGxlLGRlLHVlO3JldHVybiBSKHRoaXMsZnVuY3Rpb24oY2Upe3N3aXRjaChjZS5sYWJlbCl7Y2FzZSAwOnJldHVybiBsZT0iIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsdGhpcy5zZXJ2ZXJUeXBlPT09RS5TZXJ2ZXJUeXBlLlNhc1ZpeWE/Ii9p'@;
put 'ZGVudGl0aWVzL3VzZXJzL0BjdXJyZW50VXNlciI6dGhpcy5zZXJ2ZXJUeXBlPT09RS5TZXJ2ZXJUeXBlLlNhczk/Ii9TQVNTdG9yZWRQcm9jZXNzIjoiL1NBU2pzQXBpL3Nlc3Npb24iKSxbNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGxlLHZvaWQgMCwidGV4dC9wbGFpbiIpLmNhdGNoKGZ1'@;
put 'bmN0aW9uKFkpe3JldHVybntyZXN1bHQ6ImF1dGhFcnIifX0pXTtjYXNlIDE6cmV0dXJuIGRlPWNlLnNlbnQoKS5yZXN1bHQsKHVlPSJhdXRoRXJyIiE9PWRlKT9bMywzXTpbNCx0aGlzLmxvZ091dCgpXTtjYXNlIDI6cmV0dXJuIGNlLnNlbnQoKSxbMix7aXNMb2dnZWRJbjp1ZSx1c2VyTmFt'@;
put 'ZToiIix1c2VyTG9uZ05hbWU6IiJ9XTtjYXNlIDM6cmV0dXJuWzIse2lzTG9nZ2VkSW46dWUsdXNlck5hbWU6dGhpcy5leHRyYWN0VXNlck5hbWUoZGUpLHVzZXJMb25nTmFtZTp0aGlzLmV4dHJhY3RVc2VyTG9uZ05hbWUoZGUpfV19fSl9KX0saWUucHJvdG90eXBlLmdldExvZ2luRm9ybT1m'@;
put 'dW5jdGlvbihsZSl7dmFyIGRlPS88Zm9ybS4rYWN0aW9uPSIoLiooTG9nb258bG9naW4pW14iXSopLio+Ly5leGVjKGxlKSx1ZT17fTtpZihkZSYmZGUubGVuZ3RoKXt0aGlzLnNldExvZ2luVXJsKGRlKTt2YXIgY2U9KGxlPWxlLnJlcGxhY2UoLzxpbnB1dC9nLCJcbjxpbnB1dCIpKS5tYXRj'@;
put 'aCgvPGlucHV0LioiaGlkZGVuIltePl0qPi9nKTtjZSYmY2UuZm9yRWFjaChmdW5jdGlvbihZKXt2YXIgYj1ZLm1hdGNoKC9uYW1lPSIoW14iXSopIlxzdmFsdWU9IihbXiJdKikvKTtiJiZiLmxlbmd0aCYmKHVlW2JbMV1dPWJbMl0pfSl9cmV0dXJuIE9iamVjdC5rZXlzKHVlKS5sZW5ndGg/'@;
put 'dWU6bnVsbH0saWUucHJvdG90eXBlLmxvZ091dD1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBSKHRoaXMsZnVuY3Rpb24obGUpe3JldHVybiB0aGlzLnJlcXVlc3RDbGllbnQuY2xlYXJDc3JmVG9rZW5zKCksWzIsdGhpcy5yZXF1ZXN0'@;
put 'Q2xpZW50LmdldCh0aGlzLmxvZ291dFVybCx2b2lkIDApLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4hMH0pXX0pfSl9LGllfSgpO0IuQXV0aE1hbmFnZXI9cTt2YXIgdGU9ZnVuY3Rpb24oaWUpe3JldHVybi9BbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0aGUgc3lzdGVtIHdhcyB2ZXJpZnlpbmcg'@;
put 'eW91ciBjcmVkZW50aWFscy4gUGxlYXNlIGVudGVyIHlvdXIgY3JlZGVudGlhbHMgYWdhaW4uL2dtLnRlc3QoaWUpfSxuZT1mdW5jdGlvbihpZSxsZSl7cmV0dXJuIGllPT09RS5TZXJ2ZXJUeXBlLlNhc2pzP2xlPy5sb2dnZWRpbjovWW91IGhhdmUgc2lnbmVkIGluL2dtLnRlc3QobGUpfX0s'@;
put 'NTc6ZnVuY3Rpb24oSCxCLEwpeyJ1c2Ugc3RyaWN0Ijt2YXIgSz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oUixFLHosail7cmV0dXJuIG5ldyh6fHwoej1Qcm9taXNlKSkoZnVuY3Rpb24oVixHKXtmdW5jdGlvbiBXKHRlKXt0cnl7cShqLm5leHQodGUpKX1jYXRjaChuZSl7Ryhu'@;
put 'ZSl9fWZ1bmN0aW9uIFUodGUpe3RyeXtxKGoudGhyb3codGUpKX1jYXRjaChuZSl7RyhuZSl9fWZ1bmN0aW9uIHEodGUpe3ZhciBuZTt0ZS5kb25lP1YodGUudmFsdWUpOihuZT10ZS52YWx1ZSxuZSBpbnN0YW5jZW9mIHo/bmU6bmV3IHooZnVuY3Rpb24oaWUpe2llKG5lKX0pKS50aGVuKFcs'@;
put 'VSl9cSgoaj1qLmFwcGx5KFIsRXx8W10pKS5uZXh0KCkpfSl9LEo9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oUixFKXt2YXIgeixqLFYsRyxXPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJlZbMF0pdGhyb3cgVlsxXTtyZXR1cm4gVlsxXX0sdHJ5czpbXSxvcHM6W119'@;
put 'O3JldHVybiBHPXtuZXh0OlUoMCksdGhyb3c6VSgxKSxyZXR1cm46VSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKEdbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksRztmdW5jdGlvbiBVKHEpe3JldHVybiBmdW5jdGlvbih0ZSl7cmV0dXJuIGZ1bmN0'@;
put 'aW9uKG5lKXtpZih6KXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO1c7KXRyeXtpZih6PTEsaiYmKFY9MiZuZVswXT9qLnJldHVybjpuZVswXT9qLnRocm93fHwoKFY9ai5yZXR1cm4pJiZWLmNhbGwoaiksMCk6ai5uZXh0KSYmIShW'@;
put 'PVYuY2FsbChqLG5lWzFdKSkuZG9uZSlyZXR1cm4gVjtzd2l0Y2goaj0wLFYmJihuZT1bMiZuZVswXSxWLnZhbHVlXSksbmVbMF0pe2Nhc2UgMDpjYXNlIDE6Vj1uZTticmVhaztjYXNlIDQ6cmV0dXJuIFcubGFiZWwrKyx7dmFsdWU6bmVbMV0sZG9uZTohMX07Y2FzZSA1OlcubGFiZWwrKyxq'@;
put 'PW5lWzFdLG5lPVswXTtjb250aW51ZTtjYXNlIDc6bmU9Vy5vcHMucG9wKCksVy50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoVj0oVj1XLnRyeXMpLmxlbmd0aD4wJiZWW1YubGVuZ3RoLTFdKXx8NiE9PW5lWzBdJiYyIT09bmVbMF0pKXtXPTA7Y29udGludWV9aWYoMz09PW5l'@;
put 'WzBdJiYoIVZ8fG5lWzFdPlZbMF0mJm5lWzFdPFZbM10pKXtXLmxhYmVsPW5lWzFdO2JyZWFrfWlmKDY9PT1uZVswXSYmVy5sYWJlbDxWWzFdKXtXLmxhYmVsPVZbMV0sVj1uZTticmVha31pZihWJiZXLmxhYmVsPFZbMl0pe1cubGFiZWw9VlsyXSxXLm9wcy5wdXNoKG5lKTticmVha31WWzJd'@;
put 'JiZXLm9wcy5wb3AoKSxXLnRyeXMucG9wKCk7Y29udGludWV9bmU9RS5jYWxsKFIsVyl9Y2F0Y2goaWUpe25lPVs2LGllXSxqPTB9ZmluYWxseXt6PVY9MH1pZig1Jm5lWzBdKXRocm93IG5lWzFdO3JldHVybnt2YWx1ZTpuZVswXT9uZVsxXTp2b2lkIDAsZG9uZTohMH19KFtxLHRlXSl9fX07'@;
put 'T2JqZWN0LmRlZmluZVByb3BlcnR5KEIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEIuZ2V0QWNjZXNzVG9rZW5Gb3JTYXNqcz12b2lkIDA7dmFyIEk9TCg5Nzc4KTtCLmdldEFjY2Vzc1Rva2VuRm9yU2FzanM9ZnVuY3Rpb24oUixFLHope3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxm'@;
put 'dW5jdGlvbigpe3JldHVybiBKKHRoaXMsZnVuY3Rpb24oVil7c3dpdGNoKFYubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCxSLnBvc3QoIi9TQVNqc0FwaS9hdXRoL3Rva2VuIix7Y2xpZW50SWQ6RSxjb2RlOnp9LHZvaWQgMCkudGhlbihmdW5jdGlvbihHKXt2YXIgVz1HLnJlc3VsdDtyZXR1cm57'@;
put 'YWNjZXNzX3Rva2VuOlcuYWNjZXNzVG9rZW4scmVmcmVzaF90b2tlbjpXLnJlZnJlc2hUb2tlbn19KS5jYXRjaChmdW5jdGlvbihHKXt0aHJvdygwLEkucHJlZml4TWVzc2FnZSkoRywiRXJyb3Igd2hpbGUgZ2V0dGluZyBhY2Nlc3MgdG9rZW4uICIpfSldO2Nhc2UgMTpyZXR1cm5bMixWLnNl'@;
put 'bnQoKV19fSl9KX19LDM1Njk6ZnVuY3Rpb24oSCxCLEwpeyJ1c2Ugc3RyaWN0Ijt2YXIgSz1MKDg3NjQpLkJ1ZmZlcixKPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbih6LGosVixHKXtyZXR1cm4gbmV3KFZ8fChWPVByb21pc2UpKShmdW5jdGlvbihXLFUpe2Z1bmN0aW9uIHEoaWUp'@;
put 'e3RyeXtuZShHLm5leHQoaWUpKX1jYXRjaChsZSl7VShsZSl9fWZ1bmN0aW9uIHRlKGllKXt0cnl7bmUoRy50aHJvdyhpZSkpfWNhdGNoKGxlKXtVKGxlKX19ZnVuY3Rpb24gbmUoaWUpe3ZhciBsZTtpZS5kb25lP1coaWUudmFsdWUpOihsZT1pZS52YWx1ZSxsZSBpbnN0YW5jZW9mIFY/bGU6'@;
put 'bmV3IFYoZnVuY3Rpb24oZGUpe2RlKGxlKX0pKS50aGVuKHEsdGUpfW5lKChHPUcuYXBwbHkoeixqfHxbXSkpLm5leHQoKSl9KX0sST10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbih6LGope3ZhciBWLEcsVyxVLHE9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmV1swXSl0'@;
put 'aHJvdyBXWzFdO3JldHVybiBXWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIFU9e25leHQ6dGUoMCksdGhyb3c6dGUoMSkscmV0dXJuOnRlKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoVVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxVO2Z1bmN0'@;
put 'aW9uIHRlKG5lKXtyZXR1cm4gZnVuY3Rpb24oaWUpe3JldHVybiBmdW5jdGlvbihsZSl7aWYoVil0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtxOyl0cnl7aWYoVj0xLEcmJihXPTImbGVbMF0/Ry5yZXR1cm46bGVbMF0/Ry50aHJv'@;
put 'd3x8KChXPUcucmV0dXJuKSYmVy5jYWxsKEcpLDApOkcubmV4dCkmJiEoVz1XLmNhbGwoRyxsZVsxXSkpLmRvbmUpcmV0dXJuIFc7c3dpdGNoKEc9MCxXJiYobGU9WzImbGVbMF0sVy52YWx1ZV0pLGxlWzBdKXtjYXNlIDA6Y2FzZSAxOlc9bGU7YnJlYWs7Y2FzZSA0OnJldHVybiBxLmxhYmVs'@;
put 'Kysse3ZhbHVlOmxlWzFdLGRvbmU6ITF9O2Nhc2UgNTpxLmxhYmVsKyssRz1sZVsxXSxsZT1bMF07Y29udGludWU7Y2FzZSA3OmxlPXEub3BzLnBvcCgpLHEudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKFc9KFc9cS50cnlzKS5sZW5ndGg+MCYmV1tXLmxlbmd0aC0xXSl8fDYh'@;
put 'PT1sZVswXSYmMiE9PWxlWzBdKSl7cT0wO2NvbnRpbnVlfWlmKDM9PT1sZVswXSYmKCFXfHxsZVsxXT5XWzBdJiZsZVsxXTxXWzNdKSl7cS5sYWJlbD1sZVsxXTticmVha31pZig2PT09bGVbMF0mJnEubGFiZWw8V1sxXSl7cS5sYWJlbD1XWzFdLFc9bGU7YnJlYWt9aWYoVyYmcS5sYWJlbDxX'@;
put 'WzJdKXtxLmxhYmVsPVdbMl0scS5vcHMucHVzaChsZSk7YnJlYWt9V1syXSYmcS5vcHMucG9wKCkscS50cnlzLnBvcCgpO2NvbnRpbnVlfWxlPWouY2FsbCh6LHEpfWNhdGNoKGRlKXtsZT1bNixkZV0sRz0wfWZpbmFsbHl7Vj1XPTB9aWYoNSZsZVswXSl0aHJvdyBsZVsxXTtyZXR1cm57dmFs'@;
put 'dWU6bGVbMF0/bGVbMV06dm9pZCAwLGRvbmU6ITB9fShbbmUsaWVdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQi5nZXRBY2Nlc3NUb2tlbkZvclZpeWE9dm9pZCAwO3ZhciBSPUwoOTc3OCksRT1MKDEzOTUpO0IuZ2V0QWNjZXNzVG9rZW5G'@;
put 'b3JWaXlhPWZ1bmN0aW9uKHosaixWLEcpe3JldHVybiBKKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBXLFUscTtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKHRlKXtzd2l0Y2godGUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gVz12b2lkIDA9PT1LP2J0b2EoaisiOiIrVik6Sy5mcm9t'@;
put 'KGorIjoiK1YpLnRvU3RyaW5nKCJiYXNlNjQiKSxVPXtBdXRob3JpemF0aW9uOiJCYXNpYyAiK1csQWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn0scT1uZXcgVVJMU2VhcmNoUGFyYW1zKHtncmFudF90eXBlOiJhdXRob3JpemF0aW9uX2NvZGUiLGNvZGU6R30pLFs0LHoucG9zdCgiL1NBU0xv'@;
put 'Z29uL29hdXRoL3Rva2VuIixxLHZvaWQgMCwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIixVKS50aGVuKGZ1bmN0aW9uKG5lKXtyZXR1cm4gbmUucmVzdWx0fSkuY2F0Y2goZnVuY3Rpb24obmUpe3Rocm93IG5lIGluc3RhbmNlb2YgRS5DZXJ0aWZpY2F0ZUVycm9yP25lOigw'@;
put 'LFIucHJlZml4TWVzc2FnZSkobmUsIkVycm9yIHdoaWxlIGdldHRpbmcgYWNjZXNzIHRva2VuLiAiKX0pXTtjYXNlIDE6cmV0dXJuWzIsdGUuc2VudCgpXX19KX0pfX0sNzA0OmZ1bmN0aW9uKEgsQixMKXsidXNlIHN0cmljdCI7dmFyIEs9TCg0MTU1KSxKPUwoNTEwOCksST10aGlzJiZ0aGlz'@;
put 'Ll9fYXdhaXRlcnx8ZnVuY3Rpb24oRyxXLFUscSl7cmV0dXJuIG5ldyhVfHwoVT1Qcm9taXNlKSkoZnVuY3Rpb24odGUsbmUpe2Z1bmN0aW9uIGllKHVlKXt0cnl7ZGUocS5uZXh0KHVlKSl9Y2F0Y2goY2Upe25lKGNlKX19ZnVuY3Rpb24gbGUodWUpe3RyeXtkZShxLnRocm93KHVlKSl9Y2F0'@;
put 'Y2goY2Upe25lKGNlKX19ZnVuY3Rpb24gZGUodWUpe3ZhciBjZTt1ZS5kb25lP3RlKHVlLnZhbHVlKTooY2U9dWUudmFsdWUsY2UgaW5zdGFuY2VvZiBVP2NlOm5ldyBVKGZ1bmN0aW9uKFkpe1koY2UpfSkpLnRoZW4oaWUsbGUpfWRlKChxPXEuYXBwbHkoRyxXfHxbXSkpLm5leHQoKSl9KX0s'@;
put 'Uj10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihHLFcpe3ZhciBVLHEsdGUsbmUsaWU9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmdGVbMF0pdGhyb3cgdGVbMV07cmV0dXJuIHRlWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIG5lPXtuZXh0OmxlKDApLHRocm93Omxl'@;
put 'KDEpLHJldHVybjpsZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKG5lW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLG5lO2Z1bmN0aW9uIGxlKGRlKXtyZXR1cm4gZnVuY3Rpb24odWUpe3JldHVybiBmdW5jdGlvbihjZSl7aWYoVSl0aHJvdyBuZXcg'@;
put 'VHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtpZTspdHJ5e2lmKFU9MSxxJiYodGU9MiZjZVswXT9xLnJldHVybjpjZVswXT9xLnRocm93fHwoKHRlPXEucmV0dXJuKSYmdGUuY2FsbChxKSwwKTpxLm5leHQpJiYhKHRlPXRlLmNhbGwocSxjZVsxXSkp'@;
put 'LmRvbmUpcmV0dXJuIHRlO3N3aXRjaChxPTAsdGUmJihjZT1bMiZjZVswXSx0ZS52YWx1ZV0pLGNlWzBdKXtjYXNlIDA6Y2FzZSAxOnRlPWNlO2JyZWFrO2Nhc2UgNDpyZXR1cm4gaWUubGFiZWwrKyx7dmFsdWU6Y2VbMV0sZG9uZTohMX07Y2FzZSA1OmllLmxhYmVsKysscT1jZVsxXSxjZT1b'@;
put 'MF07Y29udGludWU7Y2FzZSA3OmNlPWllLm9wcy5wb3AoKSxpZS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgodGU9KHRlPWllLnRyeXMpLmxlbmd0aD4wJiZ0ZVt0ZS5sZW5ndGgtMV0pfHw2IT09Y2VbMF0mJjIhPT1jZVswXSkpe2llPTA7Y29udGludWV9aWYoMz09PWNlWzBd'@;
put 'JiYoIXRlfHxjZVsxXT50ZVswXSYmY2VbMV08dGVbM10pKXtpZS5sYWJlbD1jZVsxXTticmVha31pZig2PT09Y2VbMF0mJmllLmxhYmVsPHRlWzFdKXtpZS5sYWJlbD10ZVsxXSx0ZT1jZTticmVha31pZih0ZSYmaWUubGFiZWw8dGVbMl0pe2llLmxhYmVsPXRlWzJdLGllLm9wcy5wdXNoKGNl'@;
put 'KTticmVha310ZVsyXSYmaWUub3BzLnBvcCgpLGllLnRyeXMucG9wKCk7Y29udGludWV9Y2U9Vy5jYWxsKEcsaWUpfWNhdGNoKFkpe2NlPVs2LFldLHE9MH1maW5hbGx5e1U9dGU9MH1pZig1JmNlWzBdKXRocm93IGNlWzFdO3JldHVybnt2YWx1ZTpjZVswXT9jZVsxXTp2b2lkIDAsZG9uZToh'@;
put 'MH19KFtkZSx1ZV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxCLmdldFRva2Vucz12b2lkIDA7dmFyIEU9TCg2Nzk5KSx6PUwoMzkwMCksaj1MKDM2NiksVj1MKDI0OSk7Qi5nZXRUb2tlbnM9ZnVuY3Rpb24oRyxXLFUpe3JldHVybiB2b2lk'@;
put 'IDA9PT1VJiYoVT16LlNlcnZlclR5cGUuU2FzVml5YSksSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgcSx0ZSxuZSxpZSxsZSx1ZSxjZTtyZXR1cm4gUih0aGlzLGZ1bmN0aW9uKFkpe3N3aXRjaChZLmxhYmVsKXtjYXNlIDA6aWYocT1LLmxvZ2dlcnx8SixuZT1XLnJlZnJl'@;
put 'c2hfdG9rZW4saWU9Vy5jbGllbnQsbGU9Vy5zZWNyZXQsISgwLEUuaXNBY2Nlc3NUb2tlbkV4cGlyaW5nKSh0ZT1XLmFjY2Vzc190b2tlbikmJiEoMCxFLmlzUmVmcmVzaFRva2VuRXhwaXJpbmcpKG5lKSlyZXR1cm5bMyw1XTtpZigoMCxFLmhhc1Rva2VuRXhwaXJlZCkobmUpKXRocm93IHEu'@;
put 'ZXJyb3IoIlVuYWJsZSB0byBvYnRhaW4gbmV3IGFjY2VzcyB0b2tlbi4gWW91ciByZWZyZXNoIHRva2VuIGhhcyBleHBpcmVkLiIpLG5ldyBFcnJvcigiVW5hYmxlIHRvIG9idGFpbiBuZXcgYWNjZXNzIHRva2VuLiBZb3VyIHJlZnJlc2ggdG9rZW4gaGFzIGV4cGlyZWQuIik7cmV0dXJuIHEu'@;
put 'aW5mbygiUmVmcmVzaGluZyBhY2Nlc3MgYW5kIHJlZnJlc2ggdG9rZW5zLiIpLFUhPT16LlNlcnZlclR5cGUuU2FzVml5YT9bMywyXTpbNCwoMCxqLnJlZnJlc2hUb2tlbnNGb3JWaXlhKShHLGllLGxlLG5lKV07Y2FzZSAxOnJldHVybiBjZT1ZLnNlbnQoKSxbMyw0XTtjYXNlIDI6cmV0dXJu'@;
put 'WzQsKDAsVi5yZWZyZXNoVG9rZW5zRm9yU2FzanMpKEcsbmUpXTtjYXNlIDM6Y2U9WS5zZW50KCksWS5sYWJlbD00O2Nhc2UgNDp0ZT0odWU9Y2UpLmFjY2Vzc190b2tlbixuZT11ZS5yZWZyZXNoX3Rva2VuLFkubGFiZWw9NTtjYXNlIDU6cmV0dXJuWzIse2FjY2Vzc190b2tlbjp0ZSxyZWZy'@;
put 'ZXNoX3Rva2VuOm5lLGNsaWVudDppZSxzZWNyZXQ6bGV9XX19KX0pfX0sMTUyNzpmdW5jdGlvbihILEIsTCl7InVzZSBzdHJpY3QiO3ZhciBLPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihJLFIsRSx6KXt2b2lkIDA9PT16JiYoej1FKTt2YXIg'@;
put 'aj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFIsRSk7aiYmISgiZ2V0ImluIGo/IVIuX19lc01vZHVsZTpqLndyaXRhYmxlfHxqLmNvbmZpZ3VyYWJsZSl8fChqPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBSW0VdfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0'@;
put 'eShJLHosail9OmZ1bmN0aW9uKEksUixFLHope3ZvaWQgMD09PXomJih6PUUpLElbel09UltFXX0pLEo9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKEksUil7Zm9yKHZhciBFIGluIEkpImRlZmF1bHQiPT09RXx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxs'@;
put 'KFIsRSl8fEsoUixJLEUpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSihMKDI4NTEpLEIpLEooTCg5MDk3KSxCKSxKKEwoOTE2NiksQil9LDkwOTc6KEgsQik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEIsIl9fZXNNb2R1'@;
put 'bGUiLHt2YWx1ZTohMH0pLEIuaXNBdXRob3JpemVGb3JtUmVxdWlyZWQ9dm9pZCAwLEIuaXNBdXRob3JpemVGb3JtUmVxdWlyZWQ9ZnVuY3Rpb24oTCl7cmV0dXJuLzxmb3JtLithY3Rpb249IiguKkxvZ29uXC9vYXV0aFwvYXV0aG9yaXplW14iXSopLio+L2dtLnRlc3QoTCl9fSw5MTY2OihI'@;
put 'LEIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxCLmlzTG9nSW5SZXF1aXJlZD12b2lkIDAsQi5pc0xvZ0luUmVxdWlyZWQ9ZnVuY3Rpb24oTCl7cmV0dXJuLzxmb3JtLithY3Rpb249IiguKihMb2dvbil8KGxvZ2luKVte'@;
put 'Il0qKS4qPi9nbS50ZXN0KEwpfX0sNTQxODpmdW5jdGlvbihILEIsTCl7InVzZSBzdHJpY3QiO3ZhciBLPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihFLHosaixWKXtyZXR1cm4gbmV3KGp8fChqPVByb21pc2UpKShmdW5jdGlvbihHLFcpe2Z1bmN0aW9uIFUobmUpe3RyeXt0ZShW'@;
put 'Lm5leHQobmUpKX1jYXRjaChpZSl7VyhpZSl9fWZ1bmN0aW9uIHEobmUpe3RyeXt0ZShWLnRocm93KG5lKSl9Y2F0Y2goaWUpe1coaWUpfX1mdW5jdGlvbiB0ZShuZSl7dmFyIGllO25lLmRvbmU/RyhuZS52YWx1ZSk6KGllPW5lLnZhbHVlLGllIGluc3RhbmNlb2Ygaj9pZTpuZXcgaihmdW5j'@;
put 'dGlvbihsZSl7bGUoaWUpfSkpLnRoZW4oVSxxKX10ZSgoVj1WLmFwcGx5KEUsenx8W10pKS5uZXh0KCkpfSl9LEo9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oRSx6KXt2YXIgaixWLEcsVyxVPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJkdbMF0pdGhyb3cgR1sxXTty'@;
put 'ZXR1cm4gR1sxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBXPXtuZXh0OnEoMCksdGhyb3c6cSgxKSxyZXR1cm46cSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKFdbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksVztmdW5jdGlvbiBxKHRlKXtyZXR1'@;
put 'cm4gZnVuY3Rpb24obmUpe3JldHVybiBmdW5jdGlvbihpZSl7aWYoail0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtVOyl0cnl7aWYoaj0xLFYmJihHPTImaWVbMF0/Vi5yZXR1cm46aWVbMF0/Vi50aHJvd3x8KChHPVYucmV0dXJu'@;
put 'KSYmRy5jYWxsKFYpLDApOlYubmV4dCkmJiEoRz1HLmNhbGwoVixpZVsxXSkpLmRvbmUpcmV0dXJuIEc7c3dpdGNoKFY9MCxHJiYoaWU9WzImaWVbMF0sRy52YWx1ZV0pLGllWzBdKXtjYXNlIDA6Y2FzZSAxOkc9aWU7YnJlYWs7Y2FzZSA0OnJldHVybiBVLmxhYmVsKysse3ZhbHVlOmllWzFd'@;
put 'LGRvbmU6ITF9O2Nhc2UgNTpVLmxhYmVsKyssVj1pZVsxXSxpZT1bMF07Y29udGludWU7Y2FzZSA3OmllPVUub3BzLnBvcCgpLFUudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKEc9KEc9VS50cnlzKS5sZW5ndGg+MCYmR1tHLmxlbmd0aC0xXSl8fDYhPT1pZVswXSYmMiE9PWll'@;
put 'WzBdKSl7VT0wO2NvbnRpbnVlfWlmKDM9PT1pZVswXSYmKCFHfHxpZVsxXT5HWzBdJiZpZVsxXTxHWzNdKSl7VS5sYWJlbD1pZVsxXTticmVha31pZig2PT09aWVbMF0mJlUubGFiZWw8R1sxXSl7VS5sYWJlbD1HWzFdLEc9aWU7YnJlYWt9aWYoRyYmVS5sYWJlbDxHWzJdKXtVLmxhYmVsPUdb'@;
put 'Ml0sVS5vcHMucHVzaChpZSk7YnJlYWt9R1syXSYmVS5vcHMucG9wKCksVS50cnlzLnBvcCgpO2NvbnRpbnVlfWllPXouY2FsbChFLFUpfWNhdGNoKGxlKXtpZT1bNixsZV0sVj0wfWZpbmFsbHl7aj1HPTB9aWYoNSZpZVswXSl0aHJvdyBpZVsxXTtyZXR1cm57dmFsdWU6aWVbMF0/aWVbMV06'@;
put 'dm9pZCAwLGRvbmU6ITB9fShbdGUsbmVdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQi5vcGVuV2ViUGFnZT12b2lkIDA7dmFyIEk9TCgxMjEwKSxSPXt3aWR0aDo1MDAsaGVpZ2h0OjYwMH07Qi5vcGVuV2ViUGFnZT1mdW5jdGlvbihFLHos'@;
put 'aixWKXtyZXR1cm4gdm9pZCAwPT09eiYmKHo9IiIpLHZvaWQgMD09PWomJihqPVIpLEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEcsVyxVLHEsdGU7cmV0dXJuIEoodGhpcyxmdW5jdGlvbihuZSl7c3dpdGNoKG5lLmxhYmVsKXtjYXNlIDA6cmV0dXJuIEc9ai53aWR0aCxX'@;
put 'PWouaGVpZ2h0LFU9c2NyZWVuLndpZHRoLzItRy8yLHE9c2NyZWVuLmhlaWdodC8yLVcvMiwodGU9d2luZG93Lm9wZW4oRSx6LCJ0b29sYmFyPTAsbG9jYXRpb249MCxtZW51YmFyPTAsd2lkdGg9Ii5jb25jYXQoRywiLGhlaWdodD0iKS5jb25jYXQoVywiLGxlZnQ9IikuY29uY2F0KFUsIix0'@;
put 'b3A9IikuY29uY2F0KHEpKSk/WzMsMl06WzQsKFY/P0kub3BlbkxvZ2luUHJvbXB0KSgpXTtjYXNlIDE6cmV0dXJuWzIsbmUuc2VudCgpP3dpbmRvdy5vcGVuKEUseiwidG9vbGJhcj0wLGxvY2F0aW9uPTAsbWVudWJhcj0wLHdpZHRoPSIuY29uY2F0KEcsIixoZWlnaHQ9IikuY29uY2F0KFcs'@;
put 'IixsZWZ0PSIpLmNvbmNhdChVLCIsdG9wPSIpLmNvbmNhdChxKSk6bnVsbF07Y2FzZSAyOnJldHVyblsyLHRlXX19KX0pfX0sMjQ5OmZ1bmN0aW9uKEgsQixMKXsidXNlIHN0cmljdCI7dmFyIEs9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFIsRSx6LGope3JldHVybiBuZXcoenx8'@;
put 'KHo9UHJvbWlzZSkpKGZ1bmN0aW9uKFYsRyl7ZnVuY3Rpb24gVyh0ZSl7dHJ5e3Eoai5uZXh0KHRlKSl9Y2F0Y2gobmUpe0cobmUpfX1mdW5jdGlvbiBVKHRlKXt0cnl7cShqLnRocm93KHRlKSl9Y2F0Y2gobmUpe0cobmUpfX1mdW5jdGlvbiBxKHRlKXt2YXIgbmU7dGUuZG9uZT9WKHRlLnZh'@;
put 'bHVlKToobmU9dGUudmFsdWUsbmUgaW5zdGFuY2VvZiB6P25lOm5ldyB6KGZ1bmN0aW9uKGllKXtpZShuZSl9KSkudGhlbihXLFUpfXEoKGo9ai5hcHBseShSLEV8fFtdKSkubmV4dCgpKX0pfSxKPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKFIsRSl7dmFyIHosaixWLEcsVz17'@;
put 'bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZWWzBdKXRocm93IFZbMV07cmV0dXJuIFZbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gRz17bmV4dDpVKDApLHRocm93OlUoMSkscmV0dXJuOlUoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihHW1N5bWJvbC5pdGVyYXRvcl09'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLEc7ZnVuY3Rpb24gVShxKXtyZXR1cm4gZnVuY3Rpb24odGUpe3JldHVybiBmdW5jdGlvbihuZSl7aWYoeil0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtXOyl0cnl7aWYoej0xLGomJihW'@;
put 'PTImbmVbMF0/ai5yZXR1cm46bmVbMF0/ai50aHJvd3x8KChWPWoucmV0dXJuKSYmVi5jYWxsKGopLDApOmoubmV4dCkmJiEoVj1WLmNhbGwoaixuZVsxXSkpLmRvbmUpcmV0dXJuIFY7c3dpdGNoKGo9MCxWJiYobmU9WzImbmVbMF0sVi52YWx1ZV0pLG5lWzBdKXtjYXNlIDA6Y2FzZSAxOlY9'@;
put 'bmU7YnJlYWs7Y2FzZSA0OnJldHVybiBXLmxhYmVsKysse3ZhbHVlOm5lWzFdLGRvbmU6ITF9O2Nhc2UgNTpXLmxhYmVsKyssaj1uZVsxXSxuZT1bMF07Y29udGludWU7Y2FzZSA3Om5lPVcub3BzLnBvcCgpLFcudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKFY9KFY9Vy50cnlz'@;
put 'KS5sZW5ndGg+MCYmVltWLmxlbmd0aC0xXSl8fDYhPT1uZVswXSYmMiE9PW5lWzBdKSl7Vz0wO2NvbnRpbnVlfWlmKDM9PT1uZVswXSYmKCFWfHxuZVsxXT5WWzBdJiZuZVsxXTxWWzNdKSl7Vy5sYWJlbD1uZVsxXTticmVha31pZig2PT09bmVbMF0mJlcubGFiZWw8VlsxXSl7Vy5sYWJlbD1W'@;
put 'WzFdLFY9bmU7YnJlYWt9aWYoViYmVy5sYWJlbDxWWzJdKXtXLmxhYmVsPVZbMl0sVy5vcHMucHVzaChuZSk7YnJlYWt9VlsyXSYmVy5vcHMucG9wKCksVy50cnlzLnBvcCgpO2NvbnRpbnVlfW5lPUUuY2FsbChSLFcpfWNhdGNoKGllKXtuZT1bNixpZV0saj0wfWZpbmFsbHl7ej1WPTB9aWYo'@;
put 'NSZuZVswXSl0aHJvdyBuZVsxXTtyZXR1cm57dmFsdWU6bmVbMF0/bmVbMV06dm9pZCAwLGRvbmU6ITB9fShbcSx0ZV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxCLnJlZnJlc2hUb2tlbnNGb3JTYXNqcz12b2lkIDA7dmFyIEk9TCg5Nzc4'@;
put 'KTtCLnJlZnJlc2hUb2tlbnNGb3JTYXNqcz1mdW5jdGlvbihSLEUpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBKKHRoaXMsZnVuY3Rpb24oail7c3dpdGNoKGoubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCxSLnBvc3QoIi9TQVNqc0FwaS9hdXRoL3JlZnJl'@;
put 'c2giLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHtBdXRob3JpemF0aW9uOiJCZWFyZXIgIitFfSkudGhlbihmdW5jdGlvbihWKXt2YXIgRz1WLnJlc3VsdDtyZXR1cm57YWNjZXNzX3Rva2VuOkcuYWNjZXNzVG9rZW4scmVmcmVzaF90b2tlbjpHLnJlZnJlc2hUb2tlbn19KS5jYXRjaChmdW5jdGlv'@;
put 'bihWKXt0aHJvdygwLEkucHJlZml4TWVzc2FnZSkoViwiRXJyb3Igd2hpbGUgcmVmcmVzaGluZyB0b2tlbnM6ICIpfSldO2Nhc2UgMTpyZXR1cm5bMixqLnNlbnQoKV19fSl9KX19LDM2NjpmdW5jdGlvbihILEIsTCl7InVzZSBzdHJpY3QiO3ZhciBLPUwoODc2NCkuQnVmZmVyLEo9dGhpcyYm'@;
put 'dGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGosVixHLFcpe3JldHVybiBuZXcoR3x8KEc9UHJvbWlzZSkpKGZ1bmN0aW9uKFUscSl7ZnVuY3Rpb24gdGUobGUpe3RyeXtpZShXLm5leHQobGUpKX1jYXRjaChkZSl7cShkZSl9fWZ1bmN0aW9uIG5lKGxlKXt0cnl7aWUoVy50aHJvdyhsZSkpfWNh'@;
put 'dGNoKGRlKXtxKGRlKX19ZnVuY3Rpb24gaWUobGUpe3ZhciBkZTtsZS5kb25lP1UobGUudmFsdWUpOihkZT1sZS52YWx1ZSxkZSBpbnN0YW5jZW9mIEc/ZGU6bmV3IEcoZnVuY3Rpb24odWUpe3VlKGRlKX0pKS50aGVuKHRlLG5lKX1pZSgoVz1XLmFwcGx5KGosVnx8W10pKS5uZXh0KCkpfSl9'@;
put 'LEk9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oaixWKXt2YXIgRyxXLFUscSx0ZT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZVWzBdKXRocm93IFVbMV07cmV0dXJuIFVbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gcT17bmV4dDpuZSgwKSx0aHJvdzpuZSgxKSxy'@;
put 'ZXR1cm46bmUoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihxW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHE7ZnVuY3Rpb24gbmUoaWUpe3JldHVybiBmdW5jdGlvbihsZSl7cmV0dXJuIGZ1bmN0aW9uKGRlKXtpZihHKXRocm93IG5ldyBUeXBlRXJy'@;
put 'b3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3RlOyl0cnl7aWYoRz0xLFcmJihVPTImZGVbMF0/Vy5yZXR1cm46ZGVbMF0/Vy50aHJvd3x8KChVPVcucmV0dXJuKSYmVS5jYWxsKFcpLDApOlcubmV4dCkmJiEoVT1VLmNhbGwoVyxkZVsxXSkpLmRvbmUpcmV0dXJu'@;
put 'IFU7c3dpdGNoKFc9MCxVJiYoZGU9WzImZGVbMF0sVS52YWx1ZV0pLGRlWzBdKXtjYXNlIDA6Y2FzZSAxOlU9ZGU7YnJlYWs7Y2FzZSA0OnJldHVybiB0ZS5sYWJlbCsrLHt2YWx1ZTpkZVsxXSxkb25lOiExfTtjYXNlIDU6dGUubGFiZWwrKyxXPWRlWzFdLGRlPVswXTtjb250aW51ZTtjYXNl'@;
put 'IDc6ZGU9dGUub3BzLnBvcCgpLHRlLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChVPShVPXRlLnRyeXMpLmxlbmd0aD4wJiZVW1UubGVuZ3RoLTFdKXx8NiE9PWRlWzBdJiYyIT09ZGVbMF0pKXt0ZT0wO2NvbnRpbnVlfWlmKDM9PT1kZVswXSYmKCFVfHxkZVsxXT5VWzBdJiZk'@;
put 'ZVsxXTxVWzNdKSl7dGUubGFiZWw9ZGVbMV07YnJlYWt9aWYoNj09PWRlWzBdJiZ0ZS5sYWJlbDxVWzFdKXt0ZS5sYWJlbD1VWzFdLFU9ZGU7YnJlYWt9aWYoVSYmdGUubGFiZWw8VVsyXSl7dGUubGFiZWw9VVsyXSx0ZS5vcHMucHVzaChkZSk7YnJlYWt9VVsyXSYmdGUub3BzLnBvcCgpLHRl'@;
put 'LnRyeXMucG9wKCk7Y29udGludWV9ZGU9Vi5jYWxsKGosdGUpfWNhdGNoKHVlKXtkZT1bNix1ZV0sVz0wfWZpbmFsbHl7Rz1VPTB9aWYoNSZkZVswXSl0aHJvdyBkZVsxXTtyZXR1cm57dmFsdWU6ZGVbMF0/ZGVbMV06dm9pZCAwLGRvbmU6ITB9fShbaWUsbGVdKX19fTtPYmplY3QuZGVmaW5l'@;
put 'UHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQi5yZWZyZXNoVG9rZW5zRm9yVml5YT12b2lkIDA7dmFyIFI9TCg5Nzc4KSxFPUwoNjIzMCksej1MKDU5MjgpO0IucmVmcmVzaFRva2Vuc0ZvclZpeWE9ZnVuY3Rpb24oaixWLEcsVyl7cmV0dXJuIEoodGhpcyx2b2lkIDAsdm9p'@;
put 'ZCAwLGZ1bmN0aW9uKCl7dmFyIFUscSx0ZTtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKG5lKXtzd2l0Y2gobmUubGFiZWwpe2Nhc2UgMDppZighKDAsei5pc05vZGUpKCkpdGhyb3cgbmV3IEVycm9yKCJNZXRob2QgJ3JlZnJlc2hUb2tlbnNGb3JWaXlhJyBjYW4gb25seSBiZSB1c2VkIGJ5IE5v'@;
put 'ZGUuIik7cmV0dXJuIFU9dm9pZCAwPT09Sz9idG9hKFYrIjoiK0cpOksuZnJvbShWKyI6IitHKS50b1N0cmluZygiYmFzZTY0IikscT17QXV0aG9yaXphdGlvbjoiQmFzaWMgIitVfSwodGU9bmV3IEUpLmFwcGVuZCgiZ3JhbnRfdHlwZSIsInJlZnJlc2hfdG9rZW4iKSx0ZS5hcHBlbmQoInJl'@;
put 'ZnJlc2hfdG9rZW4iLFcpLFs0LGoucG9zdCgiL1NBU0xvZ29uL29hdXRoL3Rva2VuIix0ZSx2b2lkIDAsIm11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSIrdGUuX2JvdW5kYXJ5LHEpLnRoZW4oZnVuY3Rpb24oaWUpe3JldHVybiBpZS5yZXN1bHR9KS5jYXRjaChmdW5jdGlvbihpZSl7'@;
put 'dGhyb3coMCxSLnByZWZpeE1lc3NhZ2UpKGllLCJFcnJvciB3aGlsZSByZWZyZXNoaW5nIHRva2VuczogIil9KV07Y2FzZSAxOnJldHVyblsyLG5lLnNlbnQoKV19fSl9KX19LDQ1ODI6ZnVuY3Rpb24oSCxCLEwpeyJ1c2Ugc3RyaWN0Ijt2YXIgSz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVu'@;
put 'Y3Rpb24oUixFLHosail7cmV0dXJuIG5ldyh6fHwoej1Qcm9taXNlKSkoZnVuY3Rpb24oVixHKXtmdW5jdGlvbiBXKHRlKXt0cnl7cShqLm5leHQodGUpKX1jYXRjaChuZSl7RyhuZSl9fWZ1bmN0aW9uIFUodGUpe3RyeXtxKGoudGhyb3codGUpKX1jYXRjaChuZSl7RyhuZSl9fWZ1bmN0aW9u'@;
put 'IHEodGUpe3ZhciBuZTt0ZS5kb25lP1YodGUudmFsdWUpOihuZT10ZS52YWx1ZSxuZSBpbnN0YW5jZW9mIHo/bmU6bmV3IHooZnVuY3Rpb24oaWUpe2llKG5lKX0pKS50aGVuKFcsVSl9cSgoaj1qLmFwcGx5KFIsRXx8W10pKS5uZXh0KCkpfSl9LEo9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8'@;
put 'ZnVuY3Rpb24oUixFKXt2YXIgeixqLFYsRyxXPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJlZbMF0pdGhyb3cgVlsxXTtyZXR1cm4gVlsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBHPXtuZXh0OlUoMCksdGhyb3c6VSgxKSxyZXR1cm46VSgyKX0sImZ1bmN0aW9uIj09dHlwZW9m'@;
put 'IFN5bWJvbCYmKEdbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksRztmdW5jdGlvbiBVKHEpe3JldHVybiBmdW5jdGlvbih0ZSl7cmV0dXJuIGZ1bmN0aW9uKG5lKXtpZih6KXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGlu'@;
put 'Zy4iKTtmb3IoO1c7KXRyeXtpZih6PTEsaiYmKFY9MiZuZVswXT9qLnJldHVybjpuZVswXT9qLnRocm93fHwoKFY9ai5yZXR1cm4pJiZWLmNhbGwoaiksMCk6ai5uZXh0KSYmIShWPVYuY2FsbChqLG5lWzFdKSkuZG9uZSlyZXR1cm4gVjtzd2l0Y2goaj0wLFYmJihuZT1bMiZuZVswXSxWLnZh'@;
put 'bHVlXSksbmVbMF0pe2Nhc2UgMDpjYXNlIDE6Vj1uZTticmVhaztjYXNlIDQ6cmV0dXJuIFcubGFiZWwrKyx7dmFsdWU6bmVbMV0sZG9uZTohMX07Y2FzZSA1OlcubGFiZWwrKyxqPW5lWzFdLG5lPVswXTtjb250aW51ZTtjYXNlIDc6bmU9Vy5vcHMucG9wKCksVy50cnlzLnBvcCgpO2NvbnRp'@;
put 'bnVlO2RlZmF1bHQ6aWYoISgoVj0oVj1XLnRyeXMpLmxlbmd0aD4wJiZWW1YubGVuZ3RoLTFdKXx8NiE9PW5lWzBdJiYyIT09bmVbMF0pKXtXPTA7Y29udGludWV9aWYoMz09PW5lWzBdJiYoIVZ8fG5lWzFdPlZbMF0mJm5lWzFdPFZbM10pKXtXLmxhYmVsPW5lWzFdO2JyZWFrfWlmKDY9PT1u'@;
put 'ZVswXSYmVy5sYWJlbDxWWzFdKXtXLmxhYmVsPVZbMV0sVj1uZTticmVha31pZihWJiZXLmxhYmVsPFZbMl0pe1cubGFiZWw9VlsyXSxXLm9wcy5wdXNoKG5lKTticmVha31WWzJdJiZXLm9wcy5wb3AoKSxXLnRyeXMucG9wKCk7Y29udGludWV9bmU9RS5jYWxsKFIsVyl9Y2F0Y2goaWUpe25l'@;
put 'PVs2LGllXSxqPTB9ZmluYWxseXt6PVY9MH1pZig1Jm5lWzBdKXRocm93IG5lWzFdO3JldHVybnt2YWx1ZTpuZVswXT9uZVsxXTp2b2lkIDAsZG9uZTohMH19KFtxLHRlXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEIudmVyaWZ5U2FzOUxv'@;
put 'Z2luPXZvaWQgMDt2YXIgST1MKDU5MjgpO0IudmVyaWZ5U2FzOUxvZ2luPWZ1bmN0aW9uKFIpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBFLHosajtyZXR1cm4gSih0aGlzLGZ1bmN0aW9uKFYpe3N3aXRjaChWLmxhYmVsKXtjYXNlIDA6RT0hMSx6PW5ldyBE'@;
put 'YXRlLGo9MCxWLmxhYmVsPTE7Y2FzZSAxOnJldHVybls0LCgwLEkuZGVsYXkpKDFlMyldO2Nhc2UgMjppZihWLnNlbnQoKSxSLmNsb3NlZClyZXR1cm5bMyw0XTtFPVIud2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoIlNBU0xvZ29uIikmJlIud2luZG93LmRvY3VtZW50LmJvZHkuaW5u'@;
put 'ZXJUZXh0LmluY2x1ZGVzKCJZb3UgaGF2ZSBzaWduZWQgaW4uIiksaj0oKG5ldyBEYXRlKS52YWx1ZU9mKCktei52YWx1ZU9mKCkpLzFlMyxWLmxhYmVsPTM7Y2FzZSAzOmlmKCFFJiZqPDMwMClyZXR1cm5bMywxXTtWLmxhYmVsPTQ7Y2FzZSA0OnJldHVyblsyLHtpc0xvZ2dlZEluOkV9XX19'@;
put 'KX0pfX0sNjU0NzpmdW5jdGlvbihILEIsTCl7InVzZSBzdHJpY3QiO3ZhciBLPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihSLEUseixqKXtyZXR1cm4gbmV3KHp8fCh6PVByb21pc2UpKShmdW5jdGlvbihWLEcpe2Z1bmN0aW9uIFcodGUpe3RyeXtxKGoubmV4dCh0ZSkpfWNhdGNo'@;
put 'KG5lKXtHKG5lKX19ZnVuY3Rpb24gVSh0ZSl7dHJ5e3Eoai50aHJvdyh0ZSkpfWNhdGNoKG5lKXtHKG5lKX19ZnVuY3Rpb24gcSh0ZSl7dmFyIG5lO3RlLmRvbmU/Vih0ZS52YWx1ZSk6KG5lPXRlLnZhbHVlLG5lIGluc3RhbmNlb2Ygej9uZTpuZXcgeihmdW5jdGlvbihpZSl7aWUobmUpfSkp'@;
put 'LnRoZW4oVyxVKX1xKChqPWouYXBwbHkoUixFfHxbXSkpLm5leHQoKSl9KX0sSj10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihSLEUpe3ZhciB6LGosVixHLFc9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmVlswXSl0aHJvdyBWWzFdO3JldHVybiBWWzFdfSx0cnlzOltd'@;
put 'LG9wczpbXX07cmV0dXJuIEc9e25leHQ6VSgwKSx0aHJvdzpVKDEpLHJldHVybjpVKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoR1tTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxHO2Z1bmN0aW9uIFUocSl7cmV0dXJuIGZ1bmN0aW9uKHRlKXtyZXR1'@;
put 'cm4gZnVuY3Rpb24obmUpe2lmKHopdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7VzspdHJ5e2lmKHo9MSxqJiYoVj0yJm5lWzBdP2oucmV0dXJuOm5lWzBdP2oudGhyb3d8fCgoVj1qLnJldHVybikmJlYuY2FsbChqKSwwKTpqLm5l'@;
put 'eHQpJiYhKFY9Vi5jYWxsKGosbmVbMV0pKS5kb25lKXJldHVybiBWO3N3aXRjaChqPTAsViYmKG5lPVsyJm5lWzBdLFYudmFsdWVdKSxuZVswXSl7Y2FzZSAwOmNhc2UgMTpWPW5lO2JyZWFrO2Nhc2UgNDpyZXR1cm4gVy5sYWJlbCsrLHt2YWx1ZTpuZVsxXSxkb25lOiExfTtjYXNlIDU6Vy5s'@;
put 'YWJlbCsrLGo9bmVbMV0sbmU9WzBdO2NvbnRpbnVlO2Nhc2UgNzpuZT1XLm9wcy5wb3AoKSxXLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChWPShWPVcudHJ5cykubGVuZ3RoPjAmJlZbVi5sZW5ndGgtMV0pfHw2IT09bmVbMF0mJjIhPT1uZVswXSkpe1c9MDtjb250aW51ZX1p'@;
put 'ZigzPT09bmVbMF0mJighVnx8bmVbMV0+VlswXSYmbmVbMV08VlszXSkpe1cubGFiZWw9bmVbMV07YnJlYWt9aWYoNj09PW5lWzBdJiZXLmxhYmVsPFZbMV0pe1cubGFiZWw9VlsxXSxWPW5lO2JyZWFrfWlmKFYmJlcubGFiZWw8VlsyXSl7Vy5sYWJlbD1WWzJdLFcub3BzLnB1c2gobmUpO2Jy'@;
put 'ZWFrfVZbMl0mJlcub3BzLnBvcCgpLFcudHJ5cy5wb3AoKTtjb250aW51ZX1uZT1FLmNhbGwoUixXKX1jYXRjaChpZSl7bmU9WzYsaWVdLGo9MH1maW5hbGx5e3o9Vj0wfWlmKDUmbmVbMF0pdGhyb3cgbmVbMV07cmV0dXJue3ZhbHVlOm5lWzBdP25lWzFdOnZvaWQgMCxkb25lOiEwfX0oW3Es'@;
put 'dGVdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQi5pc0xvZ2dlZEluU0FTVklZQT1CLnZlcmlmeVNhc1ZpeWFMb2dpbj12b2lkIDA7dmFyIEk9TCg1OTI4KTtCLnZlcmlmeVNhc1ZpeWFMb2dpbj1mdW5jdGlvbihSKXt2YXIgRSx6O3JldHVy'@;
put 'biBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBqLFYsRyxXO3JldHVybiBKKHRoaXMsZnVuY3Rpb24oVSl7c3dpdGNoKFUubGFiZWwpe2Nhc2UgMDpqPSExLFY9bmV3IERhdGUsRz0wLFUubGFiZWw9MTtjYXNlIDE6cmV0dXJuWzQsKDAsSS5kZWxheSkoMWUzKV07Y2FzZSAy'@;
put 'OmlmKFUuc2VudCgpLFIuY2xvc2VkKXJldHVyblszLDRdO2o9KDAsQi5pc0xvZ2dlZEluU0FTVklZQSkoKSxHPSgobmV3IERhdGUpLnZhbHVlT2YoKS1WLnZhbHVlT2YoKSkvMWUzLFUubGFiZWw9MztjYXNlIDM6aWYoIWomJkc8MzAwKXJldHVyblszLDFdO1UubGFiZWw9NDtjYXNlIDQ6Vz0h'@;
put 'MSxWPW5ldyBEYXRlLFUubGFiZWw9NTtjYXNlIDU6cmV0dXJuWzQsKDAsSS5kZWxheSkoMWUzKV07Y2FzZSA2OmlmKFUuc2VudCgpLFIuY2xvc2VkKXJldHVyblszLDhdO1c9Ui53aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygiU0FTTG9nb24iKXx8KG51bGw9PT0oej1udWxsPT09KEU9'@;
put 'Ui53aW5kb3cuZG9jdW1lbnQuYm9keSl8fHZvaWQgMD09PUU/dm9pZCAwOkUuaW5uZXJUZXh0KXx8dm9pZCAwPT09ej92b2lkIDA6ei5pbmNsdWRlcygiWW91IGhhdmUgc2lnbmVkIGluLiIpKSxHPSgobmV3IERhdGUpLnZhbHVlT2YoKS1WLnZhbHVlT2YoKSkvMWUzLFUubGFiZWw9NztjYXNl'@;
put 'IDc6aWYoIVcmJkc8MzAwKXJldHVyblszLDVdO1UubGFiZWw9ODtjYXNlIDg6cmV0dXJuWzIse2lzTG9nZ2VkSW46aiYmV31dfX0pfSl9LEIuaXNMb2dnZWRJblNBU1ZJWUE9ZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQuY29va2llLmluY2x1ZGVzKCJDdXJyZW50LVVzZXIiKSYmZG9jdW1l'@;
put 'bnQuY29va2llLmluY2x1ZGVzKCJ1c2VySWQiKX19LDQwMzc6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQi5nZW5lcmF0ZUZpbGVVcGxvYWRGb3JtPXZvaWQgMDt2YXIgSz1MKDYyMzApLEo9TCgyNDAyKTtC'@;
put 'LmdlbmVyYXRlRmlsZVVwbG9hZEZvcm09ZnVuY3Rpb24oSSxSKXtmb3IodmFyIEUgaW4gUilpZihBcnJheS5pc0FycmF5KFJbRV0pKXt2YXIgej1FLGo9KDAsSi5jb252ZXJ0VG9DU1YpKFIsRSk7aWYoIkVSUk9SOiBMQVJHRSBTVFJJTkcgTEVOR1RIIj09PWopdGhyb3cgbmV3IEVycm9yKCJU'@;
put 'aGUgbWF4IGxlbmd0aCBvZiBhIHN0cmluZyB2YWx1ZSBpbiBTQVNqcyBpcyAzMjc2NSBjaGFyYWN0ZXJzLiIpO2lmKHR5cGVvZiBGb3JtRGF0YT4idSImJkkgaW5zdGFuY2VvZiBLKUkuYXBwZW5kKHosaix7ZmlsZW5hbWU6IiIuY29uY2F0KHosIi5jc3YiKSxjb250ZW50VHlwZToiYXBwbGlj'@;
put 'YXRpb24vY3N2In0pO2Vsc2V7dmFyIFY9bmV3IEJsb2IoW2pdLHt0eXBlOiJhcHBsaWNhdGlvbi9jc3YifSk7SS5hcHBlbmQoeixWLCIiLmNvbmNhdCh6LCIuY3N2IikpfX1yZXR1cm4gSX19LDIxNzA6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19l'@;
put 'c01vZHVsZSIse3ZhbHVlOiEwfSksQi5nZW5lcmF0ZVRhYmxlVXBsb2FkRm9ybT12b2lkIDA7dmFyIEs9TCgyNDAyKSxKPUwoNDc5OSk7Qi5nZW5lcmF0ZVRhYmxlVXBsb2FkRm9ybT1mdW5jdGlvbihJLFIpe3ZhciBFPVtdLHo9e30saj0wO2Zvcih2YXIgViBpbiBSKXtqKyssKDAsSy5pc0Zv'@;
put 'cm1hdHNUYWJsZSkoVil8fEUucHVzaChWKTt2YXIgRz0oMCxLLmNvbnZlcnRUb0NTVikoUixWKTtpZigiRVJST1I6IExBUkdFIFNUUklORyBMRU5HVEgiPT09Ryl0aHJvdyBuZXcgRXJyb3IoIlRoZSBtYXggbGVuZ3RoIG9mIGEgc3RyaW5nIHZhbHVlIGluIFNBU2pzIGlzIDMyNzY1IGNoYXJh'@;
put 'Y3RlcnMuIik7Ry5sZW5ndGg+MTZlMz8oMCxKLnNwbGl0Q2h1bmtzKShHKS5tYXAoZnVuY3Rpb24oVyl7SS5hcHBlbmQoInNhc2pzIi5jb25jYXQoaiwiZGF0YSIpLFcpfSk6elsic2FzanMiLmNvbmNhdChqLCJkYXRhIildPUd9cmV0dXJuIHouc2FzanNfdGFibGVzPUUuam9pbigiICIpLHtm'@;
put 'b3JtRGF0YTpJLHJlcXVlc3RQYXJhbXM6en19fSwzNjA3OmZ1bmN0aW9uKEgsQixMKXsidXNlIHN0cmljdCI7dmFyIEs9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKFIsRSx6LGope3ZvaWQgMD09PWomJihqPXopO3ZhciBWPU9iamVjdC5nZXRP'@;
put 'd25Qcm9wZXJ0eURlc2NyaXB0b3IoRSx6KTtWJiYhKCJnZXQiaW4gVj8hRS5fX2VzTW9kdWxlOlYud3JpdGFibGV8fFYuY29uZmlndXJhYmxlKXx8KFY9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEVbel19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFIsaixWKX06ZnVu'@;
put 'Y3Rpb24oUixFLHosail7dm9pZCAwPT09aiYmKGo9eiksUltqXT1FW3pdfSksSj10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oUixFKXtmb3IodmFyIHogaW4gUikiZGVmYXVsdCI9PT16fHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoRSx6KXx8SyhFLFIs'@;
put 'eil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgST1MKDU5NTYpO0ooTCgxMjMwKSxCKSxKKEwoMTM5NSksQiksSihMKDk4MjEpLEIpLEooTCg4MzA2KSxCKSxKKEwoMzQ2NyksQiksSihMKDM2MDIpLEIpLEIuZGVmYXVsdD1JLmRlZmF1bHR9'@;
put 'LDE1NzA6ZnVuY3Rpb24oSCxCLEwpeyJ1c2Ugc3RyaWN0Ijt2YXIgSyxKPXRoaXMmJnRoaXMuX19leHRlbmRzfHwoSz1mdW5jdGlvbihWLEcpe3JldHVybihLPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihXLFUpe1cuX19w'@;
put 'cm90b19fPVV9fHxmdW5jdGlvbihXLFUpe2Zvcih2YXIgcSBpbiBVKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVLHEpJiYoV1txXT1VW3FdKX0pKFYsRyl9LGZ1bmN0aW9uKFYsRyl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIEcmJm51bGwhPT1HKXRocm93IG5ldyBUeXBl'@;
put 'RXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoRykrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gVygpe3RoaXMuY29uc3RydWN0b3I9Vn1LKFYsRyksVi5wcm90b3R5cGU9bnVsbD09PUc/T2JqZWN0LmNyZWF0ZShHKTooVy5wcm90b3R5cGU9Ry5w'@;
put 'cm90b3R5cGUsbmV3IFcpfSksST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oVixHLFcsVSl7cmV0dXJuIG5ldyhXfHwoVz1Qcm9taXNlKSkoZnVuY3Rpb24ocSx0ZSl7ZnVuY3Rpb24gbmUoZGUpe3RyeXtsZShVLm5leHQoZGUpKX1jYXRjaCh1ZSl7dGUodWUpfX1mdW5jdGlvbiBp'@;
put 'ZShkZSl7dHJ5e2xlKFUudGhyb3coZGUpKX1jYXRjaCh1ZSl7dGUodWUpfX1mdW5jdGlvbiBsZShkZSl7dmFyIHVlO2RlLmRvbmU/cShkZS52YWx1ZSk6KHVlPWRlLnZhbHVlLHVlIGluc3RhbmNlb2YgVz91ZTpuZXcgVyhmdW5jdGlvbihjZSl7Y2UodWUpfSkpLnRoZW4obmUsaWUpfWxlKChV'@;
put 'PVUuYXBwbHkoVixHfHxbXSkpLm5leHQoKSl9KX0sUj10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihWLEcpe3ZhciBXLFUscSx0ZSxuZT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZxWzBdKXRocm93IHFbMV07cmV0dXJuIHFbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1'@;
put 'cm4gdGU9e25leHQ6aWUoMCksdGhyb3c6aWUoMSkscmV0dXJuOmllKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYodGVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksdGU7ZnVuY3Rpb24gaWUobGUpe3JldHVybiBmdW5jdGlvbihkZSl7cmV0dXJuIGZ1'@;
put 'bmN0aW9uKHVlKXtpZihXKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO25lOyl0cnl7aWYoVz0xLFUmJihxPTImdWVbMF0/VS5yZXR1cm46dWVbMF0/VS50aHJvd3x8KChxPVUucmV0dXJuKSYmcS5jYWxsKFUpLDApOlUubmV4dCkm'@;
put 'JiEocT1xLmNhbGwoVSx1ZVsxXSkpLmRvbmUpcmV0dXJuIHE7c3dpdGNoKFU9MCxxJiYodWU9WzImdWVbMF0scS52YWx1ZV0pLHVlWzBdKXtjYXNlIDA6Y2FzZSAxOnE9dWU7YnJlYWs7Y2FzZSA0OnJldHVybiBuZS5sYWJlbCsrLHt2YWx1ZTp1ZVsxXSxkb25lOiExfTtjYXNlIDU6bmUubGFi'@;
put 'ZWwrKyxVPXVlWzFdLHVlPVswXTtjb250aW51ZTtjYXNlIDc6dWU9bmUub3BzLnBvcCgpLG5lLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChxPShxPW5lLnRyeXMpLmxlbmd0aD4wJiZxW3EubGVuZ3RoLTFdKXx8NiE9PXVlWzBdJiYyIT09dWVbMF0pKXtuZT0wO2NvbnRpbnVl'@;
put 'fWlmKDM9PT11ZVswXSYmKCFxfHx1ZVsxXT5xWzBdJiZ1ZVsxXTxxWzNdKSl7bmUubGFiZWw9dWVbMV07YnJlYWt9aWYoNj09PXVlWzBdJiZuZS5sYWJlbDxxWzFdKXtuZS5sYWJlbD1xWzFdLHE9dWU7YnJlYWt9aWYocSYmbmUubGFiZWw8cVsyXSl7bmUubGFiZWw9cVsyXSxuZS5vcHMucHVz'@;
put 'aCh1ZSk7YnJlYWt9cVsyXSYmbmUub3BzLnBvcCgpLG5lLnRyeXMucG9wKCk7Y29udGludWV9dWU9Ry5jYWxsKFYsbmUpfWNhdGNoKGNlKXt1ZT1bNixjZV0sVT0wfWZpbmFsbHl7Vz1xPTB9aWYoNSZ1ZVswXSl0aHJvdyB1ZVsxXTtyZXR1cm57dmFsdWU6dWVbMF0/dWVbMV06dm9pZCAwLGRv'@;
put 'bmU6ITB9fShbbGUsZGVdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQi5Db21wdXRlSm9iRXhlY3V0b3I9dm9pZCAwO3ZhciBFPUwoMzkwMCksej1MKDEzOTUpLGo9ZnVuY3Rpb24oVil7ZnVuY3Rpb24gRyhXLFUpe3ZhciBxPVYuY2FsbCh0'@;
put 'aGlzLFcsRS5TZXJ2ZXJUeXBlLlNhc1ZpeWEpfHx0aGlzO3JldHVybiBxLnNhc1ZpeWFBcGlDbGllbnQ9VSxxfXJldHVybiBKKEcsViksRy5wcm90b3R5cGUuZXhlY3V0ZT1mdW5jdGlvbihXLFUscSx0ZSxuZSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGll'@;
put 'LGRlPXRoaXM7cmV0dXJuIFIodGhpcyxmdW5jdGlvbih1ZSl7cmV0dXJuIGllPXRlfHxmdW5jdGlvbigpe3JldHVybiBQcm9taXNlLnJlc29sdmUoKX0sWzIsbmV3IFByb21pc2UoZnVuY3Rpb24oY2UsWSl7dmFyIGI7bnVsbD09PShiPWRlLnNhc1ZpeWFBcGlDbGllbnQpfHx2b2lkIDA9PT1i'@;
put 'fHxiLmV4ZWN1dGVDb21wdXRlSm9iKFcscS5jb250ZXh0TmFtZSxxLmRlYnVnLFUsbmUsITAsITApLnRoZW4oZnVuY3Rpb24oeCl7ZGUuc2FzVml5YUFwaUNsaWVudC5hcHBlbmRSZXF1ZXN0KHgsVyxxLmRlYnVnKSxjZSh4LnJlc3VsdCl9KS5jYXRjaChmdW5jdGlvbih4KXtyZXR1cm4gSShk'@;
put 'ZSx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIE49dGhpcztyZXR1cm4gUih0aGlzLGZ1bmN0aW9uKEYpe3N3aXRjaChGLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHggaW5zdGFuY2VvZiB6LkNvbXB1dGVKb2JFeGVjdXRpb25FcnJvciYmKHRoaXMuc2FzVml5YUFwaUNsaWVudC5hcHBlbmRS'@;
put 'ZXF1ZXN0KHgsVyxxLmRlYnVnKSxZKG5ldyB6LkVycm9yUmVzcG9uc2UoeD8ubWVzc2FnZSx4KSkpLHggaW5zdGFuY2VvZiB6LkxvZ2luUmVxdWlyZWRFcnJvcj8odGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdChmdW5jdGlvbigpe3JldHVybiBOLmV4ZWN1dGUoVyxVLHEsdGUpLnRoZW4oZnVu'@;
put 'Y3Rpb24oZyl7Y2UoZyl9LGZ1bmN0aW9uKGcpe1koZyl9KX0pLFs0LGllKCldKTpbMywyXTtjYXNlIDE6cmV0dXJuIEYuc2VudCgpLFszLDNdO2Nhc2UgMjpZKG5ldyB6LkVycm9yUmVzcG9uc2UoeD8ubWVzc2FnZSx4KSksRi5sYWJlbD0zO2Nhc2UgMzpyZXR1cm5bMl19fSl9KX0pfSldfSl9'@;
put 'KX0sR30oTCg2MTE4KS5CYXNlSm9iRXhlY3V0b3IpO0IuQ29tcHV0ZUpvYkV4ZWN1dG9yPWp9LDM0OTE6ZnVuY3Rpb24oSCxCLEwpeyJ1c2Ugc3RyaWN0Ijt2YXIgSyxKPXRoaXMmJnRoaXMuX19leHRlbmRzfHwoSz1mdW5jdGlvbihHLFcpe3JldHVybihLPU9iamVjdC5zZXRQcm90b3R5cGVP'@;
put 'Znx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihVLHEpe1UuX19wcm90b19fPXF9fHxmdW5jdGlvbihVLHEpe2Zvcih2YXIgdGUgaW4gcSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocSx0ZSkmJihVW3RlXT1xW3RlXSl9KShHLFcpfSxmdW5j'@;
put 'dGlvbihHLFcpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBXJiZudWxsIT09Vyl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKFcpKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIFUoKXt0aGlzLmNvbnN0cnVjdG9yPUd9SyhH'@;
put 'LFcpLEcucHJvdG90eXBlPW51bGw9PT1XP09iamVjdC5jcmVhdGUoVyk6KFUucHJvdG90eXBlPVcucHJvdG90eXBlLG5ldyBVKX0pLEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEcsVyxVLHEpe3JldHVybiBuZXcoVXx8KFU9UHJvbWlzZSkpKGZ1bmN0aW9uKHRlLG5lKXtmdW5j'@;
put 'dGlvbiBpZSh1ZSl7dHJ5e2RlKHEubmV4dCh1ZSkpfWNhdGNoKGNlKXtuZShjZSl9fWZ1bmN0aW9uIGxlKHVlKXt0cnl7ZGUocS50aHJvdyh1ZSkpfWNhdGNoKGNlKXtuZShjZSl9fWZ1bmN0aW9uIGRlKHVlKXt2YXIgY2U7dWUuZG9uZT90ZSh1ZS52YWx1ZSk6KGNlPXVlLnZhbHVlLGNlIGlu'@;
put 'c3RhbmNlb2YgVT9jZTpuZXcgVShmdW5jdGlvbihZKXtZKGNlKX0pKS50aGVuKGllLGxlKX1kZSgocT1xLmFwcGx5KEcsV3x8W10pKS5uZXh0KCkpfSl9LFI9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oRyxXKXt2YXIgVSxxLHRlLG5lLGllPXtsYWJlbDowLHNlbnQ6ZnVuY3Rp'@;
put 'b24oKXtpZigxJnRlWzBdKXRocm93IHRlWzFdO3JldHVybiB0ZVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBuZT17bmV4dDpsZSgwKSx0aHJvdzpsZSgxKSxyZXR1cm46bGUoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihuZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIHRoaXN9KSxuZTtmdW5jdGlvbiBsZShkZSl7cmV0dXJuIGZ1bmN0aW9uKHVlKXtyZXR1cm4gZnVuY3Rpb24oY2Upe2lmKFUpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7aWU7KXRyeXtpZihVPTEscSYmKHRlPTImY2Vb'@;
put 'MF0/cS5yZXR1cm46Y2VbMF0/cS50aHJvd3x8KCh0ZT1xLnJldHVybikmJnRlLmNhbGwocSksMCk6cS5uZXh0KSYmISh0ZT10ZS5jYWxsKHEsY2VbMV0pKS5kb25lKXJldHVybiB0ZTtzd2l0Y2gocT0wLHRlJiYoY2U9WzImY2VbMF0sdGUudmFsdWVdKSxjZVswXSl7Y2FzZSAwOmNhc2UgMTp0'@;
put 'ZT1jZTticmVhaztjYXNlIDQ6cmV0dXJuIGllLmxhYmVsKysse3ZhbHVlOmNlWzFdLGRvbmU6ITF9O2Nhc2UgNTppZS5sYWJlbCsrLHE9Y2VbMV0sY2U9WzBdO2NvbnRpbnVlO2Nhc2UgNzpjZT1pZS5vcHMucG9wKCksaWUudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKHRlPSh0'@;
put 'ZT1pZS50cnlzKS5sZW5ndGg+MCYmdGVbdGUubGVuZ3RoLTFdKXx8NiE9PWNlWzBdJiYyIT09Y2VbMF0pKXtpZT0wO2NvbnRpbnVlfWlmKDM9PT1jZVswXSYmKCF0ZXx8Y2VbMV0+dGVbMF0mJmNlWzFdPHRlWzNdKSl7aWUubGFiZWw9Y2VbMV07YnJlYWt9aWYoNj09PWNlWzBdJiZpZS5sYWJl'@;
put 'bDx0ZVsxXSl7aWUubGFiZWw9dGVbMV0sdGU9Y2U7YnJlYWt9aWYodGUmJmllLmxhYmVsPHRlWzJdKXtpZS5sYWJlbD10ZVsyXSxpZS5vcHMucHVzaChjZSk7YnJlYWt9dGVbMl0mJmllLm9wcy5wb3AoKSxpZS50cnlzLnBvcCgpO2NvbnRpbnVlfWNlPVcuY2FsbChHLGllKX1jYXRjaChZKXtj'@;
put 'ZT1bNixZXSxxPTB9ZmluYWxseXtVPXRlPTB9aWYoNSZjZVswXSl0aHJvdyBjZVsxXTtyZXR1cm57dmFsdWU6Y2VbMF0/Y2VbMV06dm9pZCAwLGRvbmU6ITB9fShbZGUsdWVdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQi5GaWxlVXBsb2Fk'@;
put 'ZXI9dm9pZCAwO3ZhciBFPUwoNTkyOCksej1MKDEzOTUpLGo9TCgzOTAwKSxWPWZ1bmN0aW9uKEcpe2Z1bmN0aW9uIFcoVSxxLHRlLG5lKXt2YXIgaWU9Ry5jYWxsKHRoaXMsVSxxKXx8dGhpcztyZXR1cm4gaWUuam9ic1BhdGg9dGUsaWUucmVxdWVzdENsaWVudD1uZSxpZX1yZXR1cm4gSihX'@;
put 'LEcpLFcucHJvdG90eXBlLmV4ZWN1dGU9ZnVuY3Rpb24oVSxxLHRlLG5lKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgaWUsbGUsZGUsdWUsY2UsWSxiLHgsTixGLGcsQyxNLHA9dGhpcztyZXR1cm4gUih0aGlzLGZ1bmN0aW9uKFMpe2lmKGllPXEuZmlsZXMs'@;
put 'bGU9cS5wYXJhbXMsZGU9bmV8fGZ1bmN0aW9uKCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpfSwhaWU/Lmxlbmd0aCl0aHJvdyBuZXcgei5FcnJvclJlc3BvbnNlKCJBdCBsZWFzdCBvbmUgZmlsZSBtdXN0IGJlIHByb3ZpZGVkLiIpO2lmKCFVfHwiIj09PVUpdGhyb3cgbmV3IHouRXJyb3JS'@;
put 'ZXNwb25zZSgic2FzSm9iIG11c3QgYmUgcHJvdmlkZWQuIik7Zm9yKGNlIGluIHVlPSIiLGxlKWxlLmhhc093blByb3BlcnR5KGNlKSYmKHVlKz0iJiIuY29uY2F0KGNlLCI9IikuY29uY2F0KGxlW2NlXSkpO2ZvcihZPXRlLmFwcExvYz90ZS5hcHBMb2MucmVwbGFjZSgvXC8/JC8sIi8iKStV'@;
put 'LnJlcGxhY2UoL15cLy8sIiIpOlUsYj0iIi5jb25jYXQodGhpcy5qb2JzUGF0aCwiLz8iKS5jb25jYXQoIl9wcm9ncmFtPSIrWSkuY29uY2F0KHVlKSx4PW5ldyBGb3JtRGF0YSxOPTAsRj1pZTtOPEYubGVuZ3RoO04rKyl4LmFwcGVuZCgiZmlsZSIsKGc9RltOXSkuZmlsZSxnLmZpbGVOYW1l'@;
put 'KTtyZXR1cm4oQz10aGlzLnJlcXVlc3RDbGllbnQuZ2V0Q3NyZlRva2VuKCJmaWxlIikpJiZ4LmFwcGVuZCgiX2NzcmYiLEMudmFsdWUpLHRlLmRlYnVnJiZ4LmFwcGVuZCgiX2RlYnVnIiwiMTMxIiksdGUuc2VydmVyVHlwZT09PWouU2VydmVyVHlwZS5TYXNWaXlhJiZ0ZS5jb250ZXh0TmFt'@;
put 'ZSYmeC5hcHBlbmQoIl9jb250ZXh0bmFtZSIsdGUuY29udGV4dE5hbWUpLE09eyJjYWNoZS1jb250cm9sIjoibm8tY2FjaGUiLEFjY2VwdDoiKi8qIiwiQ29udGVudC1UeXBlIjoidGV4dC9wbGFpbiJ9LFsyLG5ldyBQcm9taXNlKGZ1bmN0aW9uKFEscmUpe3AucmVxdWVzdENsaWVudC5wb3N0'@;
put 'KGIseCx2b2lkIDAsImFwcGxpY2F0aW9uL2pzb24iLE0pLnRoZW4oZnVuY3Rpb24oZmUpe3JldHVybiBJKHAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBtZTtyZXR1cm4gUih0aGlzLGZ1bmN0aW9uKGtlKXtzd2l0Y2goa2UubGFiZWwpe2Nhc2UgMDppZih0aGlzLnJlcXVlc3RDbGll'@;
put 'bnQuYXBwZW5kUmVxdWVzdChmZSxVLHRlLmRlYnVnKSxtZT1mZS5yZXN1bHQsIXRlLmRlYnVnKXJldHVyblszLDVdO3N3aXRjaCh0aGlzLnNlcnZlclR5cGUpe2Nhc2Ugai5TZXJ2ZXJUeXBlLlNhc1ZpeWE6cmV0dXJuWzMsMV07Y2FzZSBqLlNlcnZlclR5cGUuU2FzOTpyZXR1cm5bMywzXX1y'@;
put 'ZXR1cm5bMyw0XTtjYXNlIDE6cmV0dXJuWzQsKDAsRS5wYXJzZVNhc1ZpeWFEZWJ1Z1Jlc3BvbnNlKShmZS5yZXN1bHQsdGhpcy5yZXF1ZXN0Q2xpZW50LHRlLnNlcnZlclVybCldO2Nhc2UgMjpyZXR1cm4gbWU9a2Uuc2VudCgpLFszLDRdO2Nhc2UgMzpyZXR1cm4gbWU9InN0cmluZyI9PXR5'@;
put 'cGVvZiBmZS5yZXN1bHQ/KDAsRS5wYXJzZVdlYm91dFJlc3BvbnNlKShmZS5yZXN1bHQsYik6ZmUucmVzdWx0LFszLDRdO2Nhc2UgNDpyZXR1cm5bMyw2XTtjYXNlIDU6dGhpcy5zZXJ2ZXJUeXBlIT09ai5TZXJ2ZXJUeXBlLlNhc2pzJiYobWU9InN0cmluZyI9PXR5cGVvZiBmZS5yZXN1bHQ/'@;
put 'KDAsRS5nZXRWYWxpZEpzb24pKGZlLnJlc3VsdCk6ZmUucmVzdWx0KSxrZS5sYWJlbD02O2Nhc2UgNjpyZXR1cm4gUShtZSksWzJdfX0pfSl9KS5jYXRjaChmdW5jdGlvbihmZSl7cmV0dXJuIEkocCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIG1lPXRoaXM7cmV0dXJuIFIodGhpcyxm'@;
put 'dW5jdGlvbihrZSl7c3dpdGNoKGtlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIGZlIGluc3RhbmNlb2Ygei5Kb2JFeGVjdXRpb25FcnJvciYmKHRoaXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KGZlLFUsdGUuZGVidWcpLHJlKG5ldyB6LkVycm9yUmVzcG9uc2UoZmU/Lm1lc3NhZ2UsZmUp'@;
put 'KSksZmUgaW5zdGFuY2VvZiB6LkxvZ2luUmVxdWlyZWRFcnJvcj8odGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdChmdW5jdGlvbigpe3JldHVybiBtZS5leGVjdXRlKFUscSx0ZSxuZSkudGhlbihmdW5jdGlvbihUZSl7UShUZSl9LGZ1bmN0aW9uKFRlKXtyZShUZSl9KX0pLFs0LGRlKCldKTpb'@;
put 'MywyXTtjYXNlIDE6cmV0dXJuIGtlLnNlbnQoKSxbMywzXTtjYXNlIDI6cmUobmV3IHouRXJyb3JSZXNwb25zZSgiRmlsZSB1cGxvYWQgcmVxdWVzdCBmYWlsZWQuIixmZSkpLGtlLmxhYmVsPTM7Y2FzZSAzOnJldHVyblsyXX19KX0pfSl9KV19KX0pfSxXfShMKDYxMTgpLkJhc2VKb2JFeGVj'@;
put 'dXRvcik7Qi5GaWxlVXBsb2FkZXI9Vn0sNDQ0NjpmdW5jdGlvbihILEIsTCl7InVzZSBzdHJpY3QiO3ZhciBLLEo9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChLPWZ1bmN0aW9uKFcsVSl7cmV0dXJuKEs9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJy'@;
put 'YXkmJmZ1bmN0aW9uKHEsdGUpe3EuX19wcm90b19fPXRlfXx8ZnVuY3Rpb24ocSx0ZSl7Zm9yKHZhciBuZSBpbiB0ZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGUsbmUpJiYocVtuZV09dGVbbmVdKX0pKFcsVSl9LGZ1bmN0aW9uKFcsVSl7aWYoImZ1bmN0aW9uIiE9'@;
put 'dHlwZW9mIFUmJm51bGwhPT1VKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoVSkrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gcSgpe3RoaXMuY29uc3RydWN0b3I9V31LKFcsVSksVy5wcm90b3R5cGU9bnVsbD09PVU/'@;
put 'T2JqZWN0LmNyZWF0ZShVKToocS5wcm90b3R5cGU9VS5wcm90b3R5cGUsbmV3IHEpfSksST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oVyxVLHEsdGUpe3JldHVybiBuZXcocXx8KHE9UHJvbWlzZSkpKGZ1bmN0aW9uKG5lLGllKXtmdW5jdGlvbiBsZShjZSl7dHJ5e3VlKHRlLm5l'@;
put 'eHQoY2UpKX1jYXRjaChZKXtpZShZKX19ZnVuY3Rpb24gZGUoY2Upe3RyeXt1ZSh0ZS50aHJvdyhjZSkpfWNhdGNoKFkpe2llKFkpfX1mdW5jdGlvbiB1ZShjZSl7dmFyIFk7Y2UuZG9uZT9uZShjZS52YWx1ZSk6KFk9Y2UudmFsdWUsWSBpbnN0YW5jZW9mIHE/WTpuZXcgcShmdW5jdGlvbihi'@;
put 'KXtiKFkpfSkpLnRoZW4obGUsZGUpfXVlKCh0ZT10ZS5hcHBseShXLFV8fFtdKSkubmV4dCgpKX0pfSxSPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKFcsVSl7dmFyIHEsdGUsbmUsaWUsbGU9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmbmVbMF0pdGhyb3cgbmVbMV07'@;
put 'cmV0dXJuIG5lWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIGllPXtuZXh0OmRlKDApLHRocm93OmRlKDEpLHJldHVybjpkZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKGllW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGllO2Z1bmN0aW9uIGRl'@;
put 'KHVlKXtyZXR1cm4gZnVuY3Rpb24oY2Upe3JldHVybiBmdW5jdGlvbihZKXtpZihxKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO2xlOyl0cnl7aWYocT0xLHRlJiYobmU9MiZZWzBdP3RlLnJldHVybjpZWzBdP3RlLnRocm93fHwo'@;
put 'KG5lPXRlLnJldHVybikmJm5lLmNhbGwodGUpLDApOnRlLm5leHQpJiYhKG5lPW5lLmNhbGwodGUsWVsxXSkpLmRvbmUpcmV0dXJuIG5lO3N3aXRjaCh0ZT0wLG5lJiYoWT1bMiZZWzBdLG5lLnZhbHVlXSksWVswXSl7Y2FzZSAwOmNhc2UgMTpuZT1ZO2JyZWFrO2Nhc2UgNDpyZXR1cm4gbGUu'@;
put 'bGFiZWwrKyx7dmFsdWU6WVsxXSxkb25lOiExfTtjYXNlIDU6bGUubGFiZWwrKyx0ZT1ZWzFdLFk9WzBdO2NvbnRpbnVlO2Nhc2UgNzpZPWxlLm9wcy5wb3AoKSxsZS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgobmU9KG5lPWxlLnRyeXMpLmxlbmd0aD4wJiZuZVtuZS5sZW5n'@;
put 'dGgtMV0pfHw2IT09WVswXSYmMiE9PVlbMF0pKXtsZT0wO2NvbnRpbnVlfWlmKDM9PT1ZWzBdJiYoIW5lfHxZWzFdPm5lWzBdJiZZWzFdPG5lWzNdKSl7bGUubGFiZWw9WVsxXTticmVha31pZig2PT09WVswXSYmbGUubGFiZWw8bmVbMV0pe2xlLmxhYmVsPW5lWzFdLG5lPVk7YnJlYWt9aWYo'@;
put 'bmUmJmxlLmxhYmVsPG5lWzJdKXtsZS5sYWJlbD1uZVsyXSxsZS5vcHMucHVzaChZKTticmVha31uZVsyXSYmbGUub3BzLnBvcCgpLGxlLnRyeXMucG9wKCk7Y29udGludWV9WT1VLmNhbGwoVyxsZSl9Y2F0Y2goYil7WT1bNixiXSx0ZT0wfWZpbmFsbHl7cT1uZT0wfWlmKDUmWVswXSl0aHJv'@;
put 'dyBZWzFdO3JldHVybnt2YWx1ZTpZWzBdP1lbMV06dm9pZCAwLGRvbmU6ITB9fShbdWUsY2VdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQi5KZXNKb2JFeGVjdXRvcj12b2lkIDA7dmFyIEU9TCgzOTAwKSx6PUwoMTM5NSksaj1MKDYxMTgp'@;
put 'LFY9TCg1OTI4KSxHPWZ1bmN0aW9uKFcpe2Z1bmN0aW9uIFUocSx0ZSl7dmFyIG5lPVcuY2FsbCh0aGlzLHEsRS5TZXJ2ZXJUeXBlLlNhc1ZpeWEpfHx0aGlzO3JldHVybiBuZS5zYXNWaXlhQXBpQ2xpZW50PXRlLG5lfXJldHVybiBKKFUsVyksVS5wcm90b3R5cGUuZXhlY3V0ZT1mdW5jdGlv'@;
put 'bihxLHRlLG5lLGllLGxlLGRlKXtyZXR1cm4gdm9pZCAwPT09ZGUmJihkZT1bXSksSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgdWUsWT10aGlzO3JldHVybiBSKHRoaXMsZnVuY3Rpb24oYil7cmV0dXJuIHVlPWllfHxmdW5jdGlvbigpe3JldHVybiBQcm9taXNlLnJlc29s'@;
put 'dmUoKX0sWzIsbmV3IFByb21pc2UoZnVuY3Rpb24oeCxOKXt2YXIgRjtudWxsPT09KEY9WS5zYXNWaXlhQXBpQ2xpZW50KXx8dm9pZCAwPT09Rnx8Ri5leGVjdXRlSm9iKHEsbmUuY29udGV4dE5hbWUsbmUuZGVidWcsdGUsbGUpLnRoZW4oZnVuY3Rpb24oZyl7WS5zYXNWaXlhQXBpQ2xpZW50'@;
put 'LmFwcGVuZFJlcXVlc3QoZyxxLG5lLmRlYnVnKTt2YXIgQz0oMCxWLmFwcGVuZEV4dHJhUmVzcG9uc2VBdHRyaWJ1dGVzKShnLGRlKTt4KEMpfSkuY2F0Y2goZnVuY3Rpb24oZyl7cmV0dXJuIEkoWSx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEM9dGhpcztyZXR1cm4gUih0aGlzLGZ1'@;
put 'bmN0aW9uKE0pe3N3aXRjaChNLmxhYmVsKXtjYXNlIDA6cmV0dXJuIGcgaW5zdGFuY2VvZiB6LkpvYkV4ZWN1dGlvbkVycm9yJiYodGhpcy5zYXNWaXlhQXBpQ2xpZW50LmFwcGVuZFJlcXVlc3QoZyxxLG5lLmRlYnVnKSxOKG5ldyB6LkVycm9yUmVzcG9uc2UoZz8ubWVzc2FnZSxnKSkpLGcg'@;
put 'aW5zdGFuY2VvZiB6LkxvZ2luUmVxdWlyZWRFcnJvcj8odGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdChmdW5jdGlvbigpe3JldHVybiBDLmV4ZWN1dGUocSx0ZSxuZSxpZSxsZSxkZSkudGhlbihmdW5jdGlvbih5KXt4KHkpfSxmdW5jdGlvbih5KXtOKHkpfSl9KSxbNCx1ZSgpXSk6WzMsMl07'@;
put 'Y2FzZSAxOnJldHVybiBNLnNlbnQoKSxbMywzXTtjYXNlIDI6TihuZXcgei5FcnJvclJlc3BvbnNlKGc/Lm1lc3NhZ2UsZykpLE0ubGFiZWw9MztjYXNlIDM6cmV0dXJuWzJdfX0pfSl9KX0pXX0pfSl9LFV9KGouQmFzZUpvYkV4ZWN1dG9yKTtCLkplc0pvYkV4ZWN1dG9yPUd9LDYxMTg6ZnVu'@;
put 'Y3Rpb24oSCxCLEwpeyJ1c2Ugc3RyaWN0Ijt2YXIgSz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oRSx6LGosVil7cmV0dXJuIG5ldyhqfHwoaj1Qcm9taXNlKSkoZnVuY3Rpb24oRyxXKXtmdW5jdGlvbiBVKG5lKXt0cnl7dGUoVi5uZXh0KG5lKSl9Y2F0Y2goaWUpe1coaWUpfX1m'@;
put 'dW5jdGlvbiBxKG5lKXt0cnl7dGUoVi50aHJvdyhuZSkpfWNhdGNoKGllKXtXKGllKX19ZnVuY3Rpb24gdGUobmUpe3ZhciBpZTtuZS5kb25lP0cobmUudmFsdWUpOihpZT1uZS52YWx1ZSxpZSBpbnN0YW5jZW9mIGo/aWU6bmV3IGooZnVuY3Rpb24obGUpe2xlKGllKX0pKS50aGVuKFUscSl9'@;
put 'dGUoKFY9Vi5hcHBseShFLHp8fFtdKSkubmV4dCgpKX0pfSxKPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKEUseil7dmFyIGosVixHLFcsVT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZHWzBdKXRocm93IEdbMV07cmV0dXJuIEdbMV19LHRyeXM6W10sb3BzOltdfTty'@;
put 'ZXR1cm4gVz17bmV4dDpxKDApLHRocm93OnEoMSkscmV0dXJuOnEoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihXW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLFc7ZnVuY3Rpb24gcSh0ZSl7cmV0dXJuIGZ1bmN0aW9uKG5lKXtyZXR1cm4gZnVuY3Rp'@;
put 'b24oaWUpe2lmKGopdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7VTspdHJ5e2lmKGo9MSxWJiYoRz0yJmllWzBdP1YucmV0dXJuOmllWzBdP1YudGhyb3d8fCgoRz1WLnJldHVybikmJkcuY2FsbChWKSwwKTpWLm5leHQpJiYhKEc9'@;
put 'Ry5jYWxsKFYsaWVbMV0pKS5kb25lKXJldHVybiBHO3N3aXRjaChWPTAsRyYmKGllPVsyJmllWzBdLEcudmFsdWVdKSxpZVswXSl7Y2FzZSAwOmNhc2UgMTpHPWllO2JyZWFrO2Nhc2UgNDpyZXR1cm4gVS5sYWJlbCsrLHt2YWx1ZTppZVsxXSxkb25lOiExfTtjYXNlIDU6VS5sYWJlbCsrLFY9'@;
put 'aWVbMV0saWU9WzBdO2NvbnRpbnVlO2Nhc2UgNzppZT1VLm9wcy5wb3AoKSxVLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChHPShHPVUudHJ5cykubGVuZ3RoPjAmJkdbRy5sZW5ndGgtMV0pfHw2IT09aWVbMF0mJjIhPT1pZVswXSkpe1U9MDtjb250aW51ZX1pZigzPT09aWVb'@;
put 'MF0mJighR3x8aWVbMV0+R1swXSYmaWVbMV08R1szXSkpe1UubGFiZWw9aWVbMV07YnJlYWt9aWYoNj09PWllWzBdJiZVLmxhYmVsPEdbMV0pe1UubGFiZWw9R1sxXSxHPWllO2JyZWFrfWlmKEcmJlUubGFiZWw8R1syXSl7VS5sYWJlbD1HWzJdLFUub3BzLnB1c2goaWUpO2JyZWFrfUdbMl0m'@;
put 'JlUub3BzLnBvcCgpLFUudHJ5cy5wb3AoKTtjb250aW51ZX1pZT16LmNhbGwoRSxVKX1jYXRjaChsZSl7aWU9WzYsbGVdLFY9MH1maW5hbGx5e2o9Rz0wfWlmKDUmaWVbMF0pdGhyb3cgaWVbMV07cmV0dXJue3ZhbHVlOmllWzBdP2llWzFdOnZvaWQgMCxkb25lOiEwfX0oW3RlLG5lXSl9fX07'@;
put 'T2JqZWN0LmRlZmluZVByb3BlcnR5KEIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEIuQmFzZUpvYkV4ZWN1dG9yPXZvaWQgMDt2YXIgST1MKDU5MjgpLFI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBFKHosail7dmFyIFY9dGhpczt0aGlzLnNlcnZlclVybD16LHRoaXMuc2VydmVyVHlwZT1qLHRo'@;
put 'aXMud2FpdGluZ1JlcXVlc3RzPVtdLHRoaXMucmVzZW5kV2FpdGluZ1JlcXVlc3RzPWZ1bmN0aW9uKCl7cmV0dXJuIEsoVix2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEc9dGhpcztyZXR1cm4gSih0aGlzLGZ1bmN0aW9uKFcpe3N3aXRjaChXLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQs'@;
put 'KDAsSS5hc3luY0ZvckVhY2gpKHRoaXMud2FpdGluZ1JlcXVlc3RzLGZ1bmN0aW9uKFUpe3JldHVybiBLKEcsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBKKHRoaXMsZnVuY3Rpb24ocSl7c3dpdGNoKHEubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCxVKCldO2Nhc2UgMTpyZXR1cm4g'@;
put 'cS5zZW50KCksWzJdfX0pfSl9KV07Y2FzZSAxOnJldHVybiBXLnNlbnQoKSx0aGlzLndhaXRpbmdSZXF1ZXN0cz1bXSxbMl19fSl9KX19cmV0dXJuIEUucHJvdG90eXBlLmFwcGVuZFdhaXRpbmdSZXF1ZXN0PWZ1bmN0aW9uKHope3RoaXMud2FpdGluZ1JlcXVlc3RzLnB1c2goeil9LEUucHJv'@;
put 'dG90eXBlLmdldFJlcXVlc3RQYXJhbXM9ZnVuY3Rpb24oeil7dmFyIGo9e307cmV0dXJuIHouZGVidWcmJihqLl9vbWl0dGV4dGxvZz0iZmFsc2UiLGouX29taXRzZXNzaW9ucmVzdWx0cz0iZmFsc2UiLGouX2RlYnVnPTEzMSksan0sRX0oKTtCLkJhc2VKb2JFeGVjdXRvcj1SfSwyNjkzOmZ1'@;
put 'bmN0aW9uKEgsQixMKXsidXNlIHN0cmljdCI7dmFyIEssSj10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KEs9ZnVuY3Rpb24odGUsbmUpe3JldHVybihLPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihpZSxsZSl7aWUuX19wcm90'@;
put 'b19fPWxlfXx8ZnVuY3Rpb24oaWUsbGUpe2Zvcih2YXIgZGUgaW4gbGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGxlLGRlKSYmKGllW2RlXT1sZVtkZV0pfSkodGUsbmUpfSxmdW5jdGlvbih0ZSxuZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG5lJiZudWxsIT09bmUp'@;
put 'dGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhuZSkrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gaWUoKXt0aGlzLmNvbnN0cnVjdG9yPXRlfUsodGUsbmUpLHRlLnByb3RvdHlwZT1udWxsPT09bmU/T2JqZWN0LmNyZWF0'@;
put 'ZShuZSk6KGllLnByb3RvdHlwZT1uZS5wcm90b3R5cGUsbmV3IGllKX0pLEk9dGhpcyYmdGhpcy5fX2Fzc2lnbnx8ZnVuY3Rpb24oKXtyZXR1cm4gST1PYmplY3QuYXNzaWdufHxmdW5jdGlvbih0ZSl7Zm9yKHZhciBuZSxpZT0xLGxlPWFyZ3VtZW50cy5sZW5ndGg7aWU8bGU7aWUrKylmb3Io'@;
put 'dmFyIGRlIGluIG5lPWFyZ3VtZW50c1tpZV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5lLGRlKSYmKHRlW2RlXT1uZVtkZV0pO3JldHVybiB0ZX0sSS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LFI9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKHRlLG5lLGll'@;
put 'LGxlKXtyZXR1cm4gbmV3KGllfHwoaWU9UHJvbWlzZSkpKGZ1bmN0aW9uKGRlLHVlKXtmdW5jdGlvbiBjZSh4KXt0cnl7YihsZS5uZXh0KHgpKX1jYXRjaChOKXt1ZShOKX19ZnVuY3Rpb24gWSh4KXt0cnl7YihsZS50aHJvdyh4KSl9Y2F0Y2goTil7dWUoTil9fWZ1bmN0aW9uIGIoeCl7dmFy'@;
put 'IE47eC5kb25lP2RlKHgudmFsdWUpOihOPXgudmFsdWUsTiBpbnN0YW5jZW9mIGllP046bmV3IGllKGZ1bmN0aW9uKEYpe0YoTil9KSkudGhlbihjZSxZKX1iKChsZT1sZS5hcHBseSh0ZSxuZXx8W10pKS5uZXh0KCkpfSl9LEU9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24odGUs'@;
put 'bmUpe3ZhciBpZSxsZSxkZSx1ZSxjZT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZkZVswXSl0aHJvdyBkZVsxXTtyZXR1cm4gZGVbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gdWU9e25leHQ6WSgwKSx0aHJvdzpZKDEpLHJldHVybjpZKDIpfSwiZnVuY3Rpb24iPT10eXBlb2Yg'@;
put 'U3ltYm9sJiYodWVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksdWU7ZnVuY3Rpb24gWShiKXtyZXR1cm4gZnVuY3Rpb24oeCl7cmV0dXJuIGZ1bmN0aW9uKE4pe2lmKGllKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGlu'@;
put 'Zy4iKTtmb3IoO2NlOyl0cnl7aWYoaWU9MSxsZSYmKGRlPTImTlswXT9sZS5yZXR1cm46TlswXT9sZS50aHJvd3x8KChkZT1sZS5yZXR1cm4pJiZkZS5jYWxsKGxlKSwwKTpsZS5uZXh0KSYmIShkZT1kZS5jYWxsKGxlLE5bMV0pKS5kb25lKXJldHVybiBkZTtzd2l0Y2gobGU9MCxkZSYmKE49'@;
put 'WzImTlswXSxkZS52YWx1ZV0pLE5bMF0pe2Nhc2UgMDpjYXNlIDE6ZGU9TjticmVhaztjYXNlIDQ6cmV0dXJuIGNlLmxhYmVsKysse3ZhbHVlOk5bMV0sZG9uZTohMX07Y2FzZSA1OmNlLmxhYmVsKyssbGU9TlsxXSxOPVswXTtjb250aW51ZTtjYXNlIDc6Tj1jZS5vcHMucG9wKCksY2UudHJ5'@;
put 'cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKGRlPShkZT1jZS50cnlzKS5sZW5ndGg+MCYmZGVbZGUubGVuZ3RoLTFdKXx8NiE9PU5bMF0mJjIhPT1OWzBdKSl7Y2U9MDtjb250aW51ZX1pZigzPT09TlswXSYmKCFkZXx8TlsxXT5kZVswXSYmTlsxXTxkZVszXSkpe2NlLmxhYmVsPU5b'@;
put 'MV07YnJlYWt9aWYoNj09PU5bMF0mJmNlLmxhYmVsPGRlWzFdKXtjZS5sYWJlbD1kZVsxXSxkZT1OO2JyZWFrfWlmKGRlJiZjZS5sYWJlbDxkZVsyXSl7Y2UubGFiZWw9ZGVbMl0sY2Uub3BzLnB1c2goTik7YnJlYWt9ZGVbMl0mJmNlLm9wcy5wb3AoKSxjZS50cnlzLnBvcCgpO2NvbnRpbnVl'@;
put 'fU49bmUuY2FsbCh0ZSxjZSl9Y2F0Y2goRil7Tj1bNixGXSxsZT0wfWZpbmFsbHl7aWU9ZGU9MH1pZig1Jk5bMF0pdGhyb3cgTlsxXTtyZXR1cm57dmFsdWU6TlswXT9OWzFdOnZvaWQgMCxkb25lOiEwfX0oW2IseF0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJfX2VzTW9kdWxlIix7'@;
put 'dmFsdWU6ITB9KSxCLlNhczlKb2JFeGVjdXRvcj12b2lkIDA7dmFyIHo9TCg2MjMwKSxqPUwoMTM5NSksVj1MKDU5MjgpLEc9TCg2MTE4KSxXPUwoNzk1KSxVPWZ1bmN0aW9uKHRlKXtmdW5jdGlvbiBuZShpZSxsZSxkZSx1ZSxjZSl7dmFyIFk9dGUuY2FsbCh0aGlzLGllLGxlKXx8dGhpczty'@;
put 'ZXR1cm4gWS5qb2JzUGF0aD1kZSxZLnJlcXVlc3RDbGllbnQ9dWUsWS5zYXM5UmVxdWVzdENsaWVudD1uZXcgVy5TYXM5UmVxdWVzdENsaWVudChpZSxjZSksWX1yZXR1cm4gSihuZSx0ZSksbmUucHJvdG90eXBlLmV4ZWN1dGU9ZnVuY3Rpb24oaWUsbGUsZGUpe3JldHVybiBSKHRoaXMsdm9p'@;
put 'ZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciB1ZSxjZSxZLGIseCxOLEY9dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKGcpe3N3aXRjaChnLmxhYmVsKXtjYXNlIDA6aWYodWU9KDAsVi5pc1JlbGF0aXZlUGF0aCkoaWUpJiZkZS5hcHBMb2M/ZGUuYXBwTG9jLnJlcGxhY2UoL1wvPyQvLCIv'@;
put 'IikraWUucmVwbGFjZSgvXlwvLywiIik6aWUsY2U9IiIuY29uY2F0KGRlLnNlcnZlclVybCkuY29uY2F0KHRoaXMuam9ic1BhdGgsIj8iKS5jb25jYXQoIl9wcm9ncmFtPSIrdWUpLGNlPSIiLmNvbmNhdChjZSkuY29uY2F0KGRlLnVzZXJuYW1lJiZkZS5wYXNzd29yZD8iJl91c2VybmFtZT0i'@;
put 'K2RlLnVzZXJuYW1lKyImX3Bhc3N3b3JkPSIrZGUucGFzc3dvcmQ6IiIpLGNlPSIiLmNvbmNhdChjZSkuY29uY2F0KGRlLmRlYnVnPyImX2RlYnVnPTEzMSI6IiIpLFk9SSh7fSx0aGlzLmdldFJlcXVlc3RQYXJhbXMoZGUpKSxiPW5ldyB6LGxlKXRyeXtiPXEoYixsZSl9Y2F0Y2goQyl7cmV0'@;
put 'dXJuWzIsUHJvbWlzZS5yZWplY3QobmV3IGouRXJyb3JSZXNwb25zZShDPy5tZXNzYWdlLEMpKV19ZWxzZSBsZT0iIjtmb3IoeCBpbiBZKVkuaGFzT3duUHJvcGVydHkoeCkmJmIuYXBwZW5kKHgsWVt4XSk7cmV0dXJuWzQsdGhpcy5zYXM5UmVxdWVzdENsaWVudC5sb2dpbihkZS51c2VybmFt'@;
put 'ZSxkZS5wYXNzd29yZCx0aGlzLmpvYnNQYXRoKV07Y2FzZSAxOnJldHVybiBnLnNlbnQoKSxOPWxlJiZPYmplY3Qua2V5cyhsZSkubGVuZ3RoPyJtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0iK2IuX2JvdW5kYXJ5OiJ0ZXh0L3BsYWluIixbMixuZXcgUHJvbWlzZShmdW5jdGlvbihD'@;
put 'LE0pe3JldHVybiBGLnNhczlSZXF1ZXN0Q2xpZW50LnBvc3QoY2UsYix2b2lkIDAsTix7QWNjZXB0OiIqLyoiLENvbm5lY3Rpb246IktlZXAtQWxpdmUifSkudGhlbihmdW5jdGlvbih5KXtGLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdCh5LGllLGRlLmRlYnVnKSxDKHkpfSkuY2F0Y2go'@;
put 'ZnVuY3Rpb24oeSl7dmFyIHA9eTt5LnJlc3VsdCYmIiIhPT15LnJlc3VsdD9wPXkucmVzdWx0OnkubWVzc2FnZSYmKHA9eS5tZXNzYWdlKSxGLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChwLGllLGRlLmRlYnVnKSxNKG5ldyBqLkVycm9yUmVzcG9uc2UoeT8ubWVzc2FnZSx5KSl9KX0p'@;
put 'XX19KX0pfSxuZS5wcm90b3R5cGUuZ2V0UmVxdWVzdFBhcmFtcz1mdW5jdGlvbihpZSl7dmFyIGxlPXt9O3JldHVybiBpZS5kZWJ1ZyYmKGxlLl9kZWJ1Zz0xMzEpLGxlfSxuZX0oRy5CYXNlSm9iRXhlY3V0b3IpO0IuU2FzOUpvYkV4ZWN1dG9yPVU7dmFyIHE9ZnVuY3Rpb24odGUsbmUpe2Zv'@;
put 'cih2YXIgaWUgaW4gbmUpe3ZhciBsZT1pZSxkZT0oMCxWLmNvbnZlcnRUb0NTVikobmUsaWUpO2lmKCJFUlJPUjogTEFSR0UgU1RSSU5HIExFTkdUSCI9PT1kZSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBtYXggbGVuZ3RoIG9mIGEgc3RyaW5nIHZhbHVlIGluIFNBU2pzIGlzIDMyNzY1IGNoYXJh'@;
put 'Y3RlcnMuIik7dGUuYXBwZW5kKGxlLGRlLHtmaWxlbmFtZToiIi5jb25jYXQobGUsIi5jc3YiKSxjb250ZW50VHlwZToiYXBwbGljYXRpb24vY3N2In0pfXJldHVybiB0ZX19LDEwNjU6ZnVuY3Rpb24oSCxCLEwpeyJ1c2Ugc3RyaWN0Ijt2YXIgSyxKPXRoaXMmJnRoaXMuX19leHRlbmRzfHwo'@;
put 'Sz1mdW5jdGlvbihxLHRlKXtyZXR1cm4oSz1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24obmUsaWUpe25lLl9fcHJvdG9fXz1pZX18fGZ1bmN0aW9uKG5lLGllKXtmb3IodmFyIGxlIGluIGllKU9iamVjdC5wcm90b3R5cGUu'@;
put 'aGFzT3duUHJvcGVydHkuY2FsbChpZSxsZSkmJihuZVtsZV09aWVbbGVdKX0pKHEsdGUpfSxmdW5jdGlvbihxLHRlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdGUmJm51bGwhPT10ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKHRlKSsiIGlzIG5v'@;
put 'dCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBuZSgpe3RoaXMuY29uc3RydWN0b3I9cX1LKHEsdGUpLHEucHJvdG90eXBlPW51bGw9PT10ZT9PYmplY3QuY3JlYXRlKHRlKToobmUucHJvdG90eXBlPXRlLnByb3RvdHlwZSxuZXcgbmUpfSksST10aGlzJiZ0aGlzLl9fYXNzaWdu'@;
put 'fHxmdW5jdGlvbigpe3JldHVybiBJPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKHEpe2Zvcih2YXIgdGUsbmU9MSxpZT1hcmd1bWVudHMubGVuZ3RoO25lPGllO25lKyspZm9yKHZhciBsZSBpbiB0ZT1hcmd1bWVudHNbbmVdKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0'@;
put 'ZSxsZSkmJihxW2xlXT10ZVtsZV0pO3JldHVybiBxfSxJLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sUj10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24ocSx0ZSxuZSxpZSl7cmV0dXJuIG5ldyhuZXx8KG5lPVByb21pc2UpKShmdW5jdGlvbihsZSxkZSl7ZnVuY3Rpb24gdWUoYil7dHJ5'@;
put 'e1koaWUubmV4dChiKSl9Y2F0Y2goeCl7ZGUoeCl9fWZ1bmN0aW9uIGNlKGIpe3RyeXtZKGllLnRocm93KGIpKX1jYXRjaCh4KXtkZSh4KX19ZnVuY3Rpb24gWShiKXt2YXIgeDtiLmRvbmU/bGUoYi52YWx1ZSk6KHg9Yi52YWx1ZSx4IGluc3RhbmNlb2YgbmU/eDpuZXcgbmUoZnVuY3Rpb24o'@;
put 'Til7Tih4KX0pKS50aGVuKHVlLGNlKX1ZKChpZT1pZS5hcHBseShxLHRlfHxbXSkpLm5leHQoKSl9KX0sRT10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihxLHRlKXt2YXIgbmUsaWUsbGUsZGUsdWU9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmbGVbMF0pdGhyb3cgbGVb'@;
put 'MV07cmV0dXJuIGxlWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIGRlPXtuZXh0OmNlKDApLHRocm93OmNlKDEpLHJldHVybjpjZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKGRlW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGRlO2Z1bmN0aW9u'@;
put 'IGNlKFkpe3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gZnVuY3Rpb24oeCl7aWYobmUpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7dWU7KXRyeXtpZihuZT0xLGllJiYobGU9MiZ4WzBdP2llLnJldHVybjp4WzBdP2llLnRocm93'@;
put 'fHwoKGxlPWllLnJldHVybikmJmxlLmNhbGwoaWUpLDApOmllLm5leHQpJiYhKGxlPWxlLmNhbGwoaWUseFsxXSkpLmRvbmUpcmV0dXJuIGxlO3N3aXRjaChpZT0wLGxlJiYoeD1bMiZ4WzBdLGxlLnZhbHVlXSkseFswXSl7Y2FzZSAwOmNhc2UgMTpsZT14O2JyZWFrO2Nhc2UgNDpyZXR1cm4g'@;
put 'dWUubGFiZWwrKyx7dmFsdWU6eFsxXSxkb25lOiExfTtjYXNlIDU6dWUubGFiZWwrKyxpZT14WzFdLHg9WzBdO2NvbnRpbnVlO2Nhc2UgNzp4PXVlLm9wcy5wb3AoKSx1ZS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgobGU9KGxlPXVlLnRyeXMpLmxlbmd0aD4wJiZsZVtsZS5s'@;
put 'ZW5ndGgtMV0pfHw2IT09eFswXSYmMiE9PXhbMF0pKXt1ZT0wO2NvbnRpbnVlfWlmKDM9PT14WzBdJiYoIWxlfHx4WzFdPmxlWzBdJiZ4WzFdPGxlWzNdKSl7dWUubGFiZWw9eFsxXTticmVha31pZig2PT09eFswXSYmdWUubGFiZWw8bGVbMV0pe3VlLmxhYmVsPWxlWzFdLGxlPXg7YnJlYWt9'@;
put 'aWYobGUmJnVlLmxhYmVsPGxlWzJdKXt1ZS5sYWJlbD1sZVsyXSx1ZS5vcHMucHVzaCh4KTticmVha31sZVsyXSYmdWUub3BzLnBvcCgpLHVlLnRyeXMucG9wKCk7Y29udGludWV9eD10ZS5jYWxsKHEsdWUpfWNhdGNoKE4pe3g9WzYsTl0saWU9MH1maW5hbGx5e25lPWxlPTB9aWYoNSZ4WzBd'@;
put 'KXRocm93IHhbMV07cmV0dXJue3ZhbHVlOnhbMF0/eFsxXTp2b2lkIDAsZG9uZTohMH19KFtZLGJdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQi5TYXNqc0pvYkV4ZWN1dG9yPXZvaWQgMDt2YXIgej1MKDYyMzApLGo9TCgzOTAwKSxWPUwo'@;
put 'MTM5NSksRz1MKDQwMzcpLFc9TCg1OTI4KSxVPWZ1bmN0aW9uKHEpe2Z1bmN0aW9uIHRlKG5lLGllLGxlKXt2YXIgZGU9cS5jYWxsKHRoaXMsbmUsai5TZXJ2ZXJUeXBlLlNhc2pzKXx8dGhpcztyZXR1cm4gZGUuam9ic1BhdGg9aWUsZGUucmVxdWVzdENsaWVudD1sZSxkZX1yZXR1cm4gSih0'@;
put 'ZSxxKSx0ZS5wcm90b3R5cGUuZXhlY3V0ZT1mdW5jdGlvbihuZSxpZSxsZSxkZSx1ZSxjZSl7cmV0dXJuIHZvaWQgMD09PWNlJiYoY2U9W10pLFIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIFksYix4LE4sRixnLEMseT10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24ocCl7'@;
put 'aWYoWT1kZSxiPSgwLFcuaXNSZWxhdGl2ZVBhdGgpKG5lKSYmbGUuYXBwTG9jP2xlLmFwcExvYy5yZXBsYWNlKC9cLz8kLywiLyIpK25lLnJlcGxhY2UoL15cLy8sIiIpOm5lLHg9IiIuY29uY2F0KGxlLnNlcnZlclVybCkuY29uY2F0KHRoaXMuam9ic1BhdGgsIi8/IikuY29uY2F0KCJfcHJv'@;
put 'Z3JhbT0iK2IpLE49SSh7fSx0aGlzLmdldFJlcXVlc3RQYXJhbXMobGUpKSxGPXR5cGVvZiBGb3JtRGF0YT4idSI/bmV3IHo6bmV3IEZvcm1EYXRhLGllKXRyeXtGPSgwLEcuZ2VuZXJhdGVGaWxlVXBsb2FkRm9ybSkoRixpZSl9Y2F0Y2goUyl7cmV0dXJuWzIsUHJvbWlzZS5yZWplY3QobmV3'@;
put 'IFYuRXJyb3JSZXNwb25zZShTPy5tZXNzYWdlLFMpKV19Zm9yKGcgaW4gTilOLmhhc093blByb3BlcnR5KGcpJiZGLmFwcGVuZChnLE5bZ10pO3JldHVybiBDPUYgaW5zdGFuY2VvZiB6JiZ0eXBlb2YgRm9ybURhdGE+InUiPyJtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0iLmNvbmNh'@;
put 'dChGLmdldEJvdW5kYXJ5KCkpOnZvaWQgMCxbMixuZXcgUHJvbWlzZShmdW5jdGlvbihTLFEpe3kucmVxdWVzdENsaWVudC5wb3N0KHgsRix1ZT8uYWNjZXNzX3Rva2VuLEMpLnRoZW4oZnVuY3Rpb24ocmUpe3JldHVybiBSKHksdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBmZSxtZTty'@;
put 'ZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKGtlKXtpZihPYmplY3QuZW50cmllcyhyZS5yZXN1bHQpLmxlbmd0aDwxKXRocm93IG5ldyBWLkpvYkV4ZWN1dGlvbkVycm9yKDAsIk5vIHdlYm91dCB3YXMgcmV0dXJuZWQgYnkgam9iICIuY29uY2F0KGIsIi4gIFBsZWFzZSBjaGVjayB0aGUgU0FTIGxv'@;
put 'ZyBmb3IgbW9yZSBpbmZvLiIpLHJlLmxvZyk7cmV0dXJuKGZlPXJlLnJlc3VsdCkmJiJzdHJpbmciPT10eXBlb2YgZmUmJmZlLnRyaW0oKSYmKHJlLnJlc3VsdD0oMCxXLmdldFZhbGlkSnNvbikoZmUpKSx0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChyZSxuZSxsZS5kZWJ1Zyks'@;
put 'bWU9KDAsVy5hcHBlbmRFeHRyYVJlc3BvbnNlQXR0cmlidXRlcykocmUsY2UpLFMobWUpLFsyXX0pfSl9KS5jYXRjaChmdW5jdGlvbihyZSl7cmV0dXJuIFIoeSx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGZlPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihtZSl7c3dpdGNoKG1l'@;
put 'LmxhYmVsKXtjYXNlIDA6cmV0dXJuIHJlIGluc3RhbmNlb2YgVi5Kb2JFeGVjdXRpb25FcnJvciYmKHRoaXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KHJlLG5lLGxlLmRlYnVnKSxRKG5ldyBWLkVycm9yUmVzcG9uc2UocmU/Lm1lc3NhZ2UscmUpKSkscmUgaW5zdGFuY2VvZiBWLkxv'@;
put 'Z2luUmVxdWlyZWRFcnJvcj8oZGV8fFEobmV3IFYuRXJyb3JSZXNwb25zZSgiUmVxdWVzdCBpcyBub3QgYXV0aGVudGljYXRlZC4gTWFrZSBzdXJlIC5lbnYgZmlsZSBleGlzdHMgd2l0aCB2YWxpZCBjcmVkZW50aWFscy4iLHJlKSksdGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdChmdW5jdGlv'@;
put 'bigpe3JldHVybiBmZS5leGVjdXRlKG5lLGllLGxlLGRlLHVlLGNlKS50aGVuKGZ1bmN0aW9uKGtlKXtTKGtlKX0sZnVuY3Rpb24oa2Upe1Eoa2UpfSl9KSxZP1s0LFkoKV06WzMsMl0pOlszLDNdO2Nhc2UgMTptZS5zZW50KCksbWUubGFiZWw9MjtjYXNlIDI6cmV0dXJuWzMsNF07Y2FzZSAz'@;
put 'OlEobmV3IFYuRXJyb3JSZXNwb25zZShyZT8ubWVzc2FnZSxyZSkpLG1lLmxhYmVsPTQ7Y2FzZSA0OnJldHVyblsyXX19KX0pfSl9KV19KX0pfSx0ZX0oTCg2MTE4KS5CYXNlSm9iRXhlY3V0b3IpO0IuU2FzanNKb2JFeGVjdXRvcj1VfSw2MDg0OmZ1bmN0aW9uKEgsQixMKXsidXNlIHN0cmlj'@;
put 'dCI7dmFyIEssSj10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KEs9ZnVuY3Rpb24oaWUsbGUpe3JldHVybihLPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihkZSx1ZSl7ZGUuX19wcm90b19fPXVlfXx8ZnVuY3Rpb24oZGUsdWUp'@;
put 'e2Zvcih2YXIgY2UgaW4gdWUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHVlLGNlKSYmKGRlW2NlXT11ZVtjZV0pfSkoaWUsbGUpfSxmdW5jdGlvbihpZSxsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGxlJiZudWxsIT09bGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xh'@;
put 'c3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhsZSkrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gZGUoKXt0aGlzLmNvbnN0cnVjdG9yPWllfUsoaWUsbGUpLGllLnByb3RvdHlwZT1udWxsPT09bGU/T2JqZWN0LmNyZWF0ZShsZSk6KGRlLnByb3RvdHlwZT1sZS5w'@;
put 'cm90b3R5cGUsbmV3IGRlKX0pLEk9dGhpcyYmdGhpcy5fX2Fzc2lnbnx8ZnVuY3Rpb24oKXtyZXR1cm4gST1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihpZSl7Zm9yKHZhciBsZSxkZT0xLHVlPWFyZ3VtZW50cy5sZW5ndGg7ZGU8dWU7ZGUrKylmb3IodmFyIGNlIGluIGxlPWFyZ3VtZW50c1tk'@;
put 'ZV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGxlLGNlKSYmKGllW2NlXT1sZVtjZV0pO3JldHVybiBpZX0sSS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LFI9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGllLGxlLGRlLHVlKXtyZXR1cm4gbmV3KGRlfHwoZGU9'@;
put 'UHJvbWlzZSkpKGZ1bmN0aW9uKGNlLFkpe2Z1bmN0aW9uIGIoRil7dHJ5e04odWUubmV4dChGKSl9Y2F0Y2goZyl7WShnKX19ZnVuY3Rpb24geChGKXt0cnl7Tih1ZS50aHJvdyhGKSl9Y2F0Y2goZyl7WShnKX19ZnVuY3Rpb24gTihGKXt2YXIgZztGLmRvbmU/Y2UoRi52YWx1ZSk6KGc9Ri52'@;
put 'YWx1ZSxnIGluc3RhbmNlb2YgZGU/ZzpuZXcgZGUoZnVuY3Rpb24oQyl7QyhnKX0pKS50aGVuKGIseCl9TigodWU9dWUuYXBwbHkoaWUsbGV8fFtdKSkubmV4dCgpKX0pfSxFPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKGllLGxlKXt2YXIgZGUsdWUsY2UsWSxiPXtsYWJlbDow'@;
put 'LHNlbnQ6ZnVuY3Rpb24oKXtpZigxJmNlWzBdKXRocm93IGNlWzFdO3JldHVybiBjZVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBZPXtuZXh0OngoMCksdGhyb3c6eCgxKSxyZXR1cm46eCgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKFlbU3ltYm9sLml0ZXJhdG9yXT1mdW5j'@;
put 'dGlvbigpe3JldHVybiB0aGlzfSksWTtmdW5jdGlvbiB4KE4pe3JldHVybiBmdW5jdGlvbihGKXtyZXR1cm4gZnVuY3Rpb24oZyl7aWYoZGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7YjspdHJ5e2lmKGRlPTEsdWUmJihjZT0y'@;
put 'JmdbMF0/dWUucmV0dXJuOmdbMF0/dWUudGhyb3d8fCgoY2U9dWUucmV0dXJuKSYmY2UuY2FsbCh1ZSksMCk6dWUubmV4dCkmJiEoY2U9Y2UuY2FsbCh1ZSxnWzFdKSkuZG9uZSlyZXR1cm4gY2U7c3dpdGNoKHVlPTAsY2UmJihnPVsyJmdbMF0sY2UudmFsdWVdKSxnWzBdKXtjYXNlIDA6Y2Fz'@;
put 'ZSAxOmNlPWc7YnJlYWs7Y2FzZSA0OnJldHVybiBiLmxhYmVsKysse3ZhbHVlOmdbMV0sZG9uZTohMX07Y2FzZSA1OmIubGFiZWwrKyx1ZT1nWzFdLGc9WzBdO2NvbnRpbnVlO2Nhc2UgNzpnPWIub3BzLnBvcCgpLGIudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKGNlPShjZT1i'@;
put 'LnRyeXMpLmxlbmd0aD4wJiZjZVtjZS5sZW5ndGgtMV0pfHw2IT09Z1swXSYmMiE9PWdbMF0pKXtiPTA7Y29udGludWV9aWYoMz09PWdbMF0mJighY2V8fGdbMV0+Y2VbMF0mJmdbMV08Y2VbM10pKXtiLmxhYmVsPWdbMV07YnJlYWt9aWYoNj09PWdbMF0mJmIubGFiZWw8Y2VbMV0pe2IubGFi'@;
put 'ZWw9Y2VbMV0sY2U9ZzticmVha31pZihjZSYmYi5sYWJlbDxjZVsyXSl7Yi5sYWJlbD1jZVsyXSxiLm9wcy5wdXNoKGcpO2JyZWFrfWNlWzJdJiZiLm9wcy5wb3AoKSxiLnRyeXMucG9wKCk7Y29udGludWV9Zz1sZS5jYWxsKGllLGIpfWNhdGNoKEMpe2c9WzYsQ10sdWU9MH1maW5hbGx5e2Rl'@;
put 'PWNlPTB9aWYoNSZnWzBdKXRocm93IGdbMV07cmV0dXJue3ZhbHVlOmdbMF0/Z1sxXTp2b2lkIDAsZG9uZTohMH19KFtOLEZdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQi5XZWJKb2JFeGVjdXRvcj12b2lkIDA7dmFyIHo9TCg2MjMwKSxq'@;
put 'PUwoMzkwMCksVj1MKDEzOTUpLEc9TCg0MDM3KSxXPUwoMjE3MCksVT1MKDU5MjgpLHE9TCg2MTE4KSx0ZT1MKDI4MTMpLG5lPWZ1bmN0aW9uKGllKXtmdW5jdGlvbiBsZShkZSx1ZSxjZSxZLGIpe3ZhciB4PWllLmNhbGwodGhpcyxkZSx1ZSl8fHRoaXM7cmV0dXJuIHguam9ic1BhdGg9Y2Us'@;
put 'eC5yZXF1ZXN0Q2xpZW50PVkseC5zYXNWaXlhQXBpQ2xpZW50PWIseH1yZXR1cm4gSihsZSxpZSksbGUucHJvdG90eXBlLmV4ZWN1dGU9ZnVuY3Rpb24oZGUsdWUsY2UsWSxiLHgpe3JldHVybiB2b2lkIDA9PT14JiYoeD1bXSksUih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIg'@;
put 'TixGLGcsQyxNLHkscCxTLFEsZmUsbWUsa2UsUGU9dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKEZlKXtzd2l0Y2goRmUubGFiZWwpe2Nhc2UgMDppZihOPVksRj0oMCxVLmlzUmVsYXRpdmVQYXRoKShkZSkmJmNlLmFwcExvYz9jZS5hcHBMb2MucmVwbGFjZSgvXC8/JC8sIi8iKStkZS5y'@;
put 'ZXBsYWNlKC9eXC8vLCIiKTpkZSxnPSIiLmNvbmNhdChjZS5zZXJ2ZXJVcmwpLmNvbmNhdCh0aGlzLmpvYnNQYXRoLCIvPyIpLmNvbmNhdCgiX3Byb2dyYW09IitGKSxjZS5zZXJ2ZXJUeXBlIT09ai5TZXJ2ZXJUeXBlLlNhc1ZpeWEpcmV0dXJuWzMsNV07Qz12b2lkIDAsRmUubGFiZWw9MTtj'@;
put 'YXNlIDE6cmV0dXJuIEZlLnRyeXMucHVzaChbMSwzLCw0XSksWzQsdGhpcy5nZXRKb2JVcmkoZGUpXTtjYXNlIDI6cmV0dXJuIEM9RmUuc2VudCgpLFszLDRdO2Nhc2UgMzpyZXR1cm4gTT1GZS5zZW50KCksWzIsbmV3IFByb21pc2UoZnVuY3Rpb24oTmUsTGUpe3JldHVybiBSKFBlLHZvaWQg'@;
put 'MCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgQmU9dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKEhlKXtzd2l0Y2goSGUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gTSBpbnN0YW5jZW9mIFYuTG9naW5SZXF1aXJlZEVycm9yPyh0aGlzLmFwcGVuZFdhaXRpbmdSZXF1ZXN0KGZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIEJlLmV4ZWN1dGUoZGUsdWUsY2UsWSxiLHgpLnRoZW4oZnVuY3Rpb24oUWUpe05lKFFlKX0sZnVuY3Rpb24oUWUpe0xlKFFlKX0pfSksTj9bNCxOKCldOlszLDJdKTpbMywzXTtjYXNlIDE6SGUuc2VudCgpLEhlLmxhYmVsPTI7Y2FzZSAyOnJldHVyblszLDRdO2Nhc2UgMzpMZShuZXcg'@;
put 'Vi5FcnJvclJlc3BvbnNlKE0/Lm1lc3NhZ2UsTSkpLEhlLmxhYmVsPTQ7Y2FzZSA0OnJldHVyblsyXX19KX0pfSldO2Nhc2UgNDpnKz1DLmxlbmd0aD4wPyImX2pvYj0iK0M6IiIsQy5sZW5ndGg+MCYmKGc9KGcrPSImX2pvYj0iK0MpLnJlcGxhY2UoIl9wcm9ncmFtPSIsIl9fcHJvZ3JhbT0i'@;
put 'KSksZys9Y2UuY29udGV4dE5hbWUmJiEvXHMvLnRlc3QoY2UuY29udGV4dE5hbWUpPyImX2NvbnRleHRuYW1lPSIuY29uY2F0KGNlLmNvbnRleHROYW1lKToiIixGZS5sYWJlbD01O2Nhc2UgNTppZih5PUkoe30sdGhpcy5nZXRSZXF1ZXN0UGFyYW1zKGNlKSkscD10eXBlb2YgRm9ybURhdGE+'@;
put 'InUiP25ldyB6Om5ldyBGb3JtRGF0YSx1ZSlpZihTPUpTT04uc3RyaW5naWZ5KHVlKSxjZS5zZXJ2ZXJUeXBlPT09ai5TZXJ2ZXJUeXBlLlNhczl8fFMubGVuZ3RoPjVlNXx8Uy5pbmNsdWRlcygiOyIpKXRyeXtwPSgwLEcuZ2VuZXJhdGVGaWxlVXBsb2FkRm9ybSkocCx1ZSl9Y2F0Y2goTmUp'@;
put 'e3JldHVyblsyLFByb21pc2UucmVqZWN0KG5ldyBWLkVycm9yUmVzcG9uc2UoTmU/Lm1lc3NhZ2UsTmUpKV19ZWxzZSB0cnl7UT0oMCxXLmdlbmVyYXRlVGFibGVVcGxvYWRGb3JtKShwLHVlKSxmZT1RLnJlcXVlc3RQYXJhbXMscD1RLmZvcm1EYXRhLHk9SShJKHt9LHkpLGZlKX1jYXRjaChO'@;
put 'ZSl7cmV0dXJuWzIsUHJvbWlzZS5yZWplY3QobmV3IFYuRXJyb3JSZXNwb25zZShOZT8ubWVzc2FnZSxOZSkpXX1mb3IobWUgaW4geSl5Lmhhc093blByb3BlcnR5KG1lKSYmcC5hcHBlbmQobWUseVttZV0pO3JldHVybiBrZT1wIGluc3RhbmNlb2YgeiYmdHlwZW9mIEZvcm1EYXRhPiJ1Ij8i'@;
put 'bXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9Ii5jb25jYXQocC5nZXRCb3VuZGFyeSgpKTp2b2lkIDAsWzIsbmV3IFByb21pc2UoZnVuY3Rpb24oTmUsTGUpe1BlLnJlcXVlc3RDbGllbnQucG9zdChnLHAsYj8uYWNjZXNzX3Rva2VuLGtlKS50aGVuKGZ1bmN0aW9uKEJlKXtyZXR1cm4g'@;
put 'UihQZSx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEhlLFFlO3JldHVybiBFKHRoaXMsZnVuY3Rpb24obXQpe3N3aXRjaChtdC5sYWJlbCl7Y2FzZSAwOmlmKHRoaXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KEJlLGRlLGNlLmRlYnVnKSxIZT1CZS5yZXN1bHQsIWNlLmRlYnVn'@;
put 'KXJldHVyblszLDRdO3N3aXRjaCh0aGlzLnNlcnZlclR5cGUpe2Nhc2Ugai5TZXJ2ZXJUeXBlLlNhc1ZpeWE6cmV0dXJuWzMsMV07Y2FzZSBqLlNlcnZlclR5cGUuU2FzOTpyZXR1cm5bMywzXX1yZXR1cm5bMyw0XTtjYXNlIDE6cmV0dXJuWzQsKDAsVS5wYXJzZVNhc1ZpeWFEZWJ1Z1Jlc3Bv'@;
put 'bnNlKShCZS5yZXN1bHQsdGhpcy5yZXF1ZXN0Q2xpZW50LHRoaXMuc2VydmVyVXJsKV07Y2FzZSAyOnJldHVybiBIZT1tdC5zZW50KCksWzMsNF07Y2FzZSAzOnJldHVybiBIZT0ic3RyaW5nIj09dHlwZW9mIEJlLnJlc3VsdD8oMCx0ZS5wYXJzZVdlYm91dFJlc3BvbnNlKShCZS5yZXN1bHQs'@;
put 'Zyk6QmUucmVzdWx0LFszLDRdO2Nhc2UgNDpyZXR1cm4gUWU9KDAsVS5hcHBlbmRFeHRyYVJlc3BvbnNlQXR0cmlidXRlcykoe3Jlc3VsdDpIZSxsb2c6QmUubG9nfSx4KSxOZShRZSksWzJdfX0pfSl9KS5jYXRjaChmdW5jdGlvbihCZSl7cmV0dXJuIFIoUGUsdm9pZCAwLHZvaWQgMCxmdW5j'@;
put 'dGlvbigpe3ZhciBIZT10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oUWUpe3N3aXRjaChRZS5sYWJlbCl7Y2FzZSAwOnJldHVybiBCZSBpbnN0YW5jZW9mIFYuSm9iRXhlY3V0aW9uRXJyb3ImJih0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChCZSxkZSxjZS5kZWJ1ZyksTGUo'@;
put 'bmV3IFYuRXJyb3JSZXNwb25zZShCZT8ubWVzc2FnZSxCZSkpKSxCZSBpbnN0YW5jZW9mIFYuTG9naW5SZXF1aXJlZEVycm9yPyhZfHxMZShuZXcgVi5FcnJvclJlc3BvbnNlKCJSZXF1ZXN0IGlzIG5vdCBhdXRoZW50aWNhdGVkLiBNYWtlIHN1cmUgLmVudiBmaWxlIGV4aXN0cyB3aXRoIHZh'@;
put 'bGlkIGNyZWRlbnRpYWxzLiIsQmUpKSx0aGlzLmFwcGVuZFdhaXRpbmdSZXF1ZXN0KGZ1bmN0aW9uKCl7cmV0dXJuIEhlLmV4ZWN1dGUoZGUsdWUsY2UsWSxiLHgpLnRoZW4oZnVuY3Rpb24obXQpe05lKG10KX0sZnVuY3Rpb24obXQpe0xlKG10KX0pfSksTj9bNCxOKCldOlszLDJdKTpbMywz'@;
put 'XTtjYXNlIDE6UWUuc2VudCgpLFFlLmxhYmVsPTI7Y2FzZSAyOnJldHVyblszLDRdO2Nhc2UgMzpMZShuZXcgVi5FcnJvclJlc3BvbnNlKEJlPy5tZXNzYWdlLEJlKSksUWUubGFiZWw9NDtjYXNlIDQ6cmV0dXJuWzJdfX0pfSl9KX0pXX19KX0pfSxsZS5wcm90b3R5cGUuZ2V0Sm9iVXJpPWZ1'@;
put 'bmN0aW9uKGRlKXtyZXR1cm4gUih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgdWUsY2UsWSxiLHgsTjtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKEYpe3N3aXRjaChGLmxhYmVsKXtjYXNlIDA6aWYoIXRoaXMuc2FzVml5YUFwaUNsaWVudClyZXR1cm5bMiwiIl07aWYodWU9IiIs'@;
put 'KDAsVS5pc1JlbGF0aXZlUGF0aCkoZGUpPyhiPWRlLnNwbGl0KCIvIiksY2U9Yi5sZW5ndGg+MT9iWzBdOiIiLFk9Yi5sZW5ndGg+MT9iWzFdOiIiKTooYj1kZS5zcGxpdCgiLyIpLFk9Yi5wb3AoKXx8IiIsY2U9Yi5qb2luKCIvIikpLCFZKXRocm93IG5ldyBFcnJvcigiSm9iIG5hbWUgaXMg'@;
put 'ZW1wdHksIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybls0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRKb2JzSW5Gb2xkZXIoY2UpXTtjYXNlIDE6cmV0dXJuKHg9Ri5zZW50KCkpJiYoTj14LmZpbmQoZnVuY3Rpb24oZyl7cmV0dXJuIGcubmFtZT09PVkmJiJqb2JEZWZpbml0aW9uIj09'@;
put 'PWcuY29udGVudFR5cGV9KSkmJih1ZT1OLnVyaSksWzIsdWVdfX0pfSl9LGxlfShxLkJhc2VKb2JFeGVjdXRvcik7Qi5XZWJKb2JFeGVjdXRvcj1uZX0sODIxNzpmdW5jdGlvbihILEIsTCl7InVzZSBzdHJpY3QiO3ZhciBLPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNy'@;
put 'ZWF0ZT9mdW5jdGlvbihJLFIsRSx6KXt2b2lkIDA9PT16JiYoej1FKTt2YXIgaj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFIsRSk7aiYmISgiZ2V0ImluIGo/IVIuX19lc01vZHVsZTpqLndyaXRhYmxlfHxqLmNvbmZpZ3VyYWJsZSl8fChqPXtlbnVtZXJhYmxlOiEwLGdldDpm'@;
put 'dW5jdGlvbigpe3JldHVybiBSW0VdfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJLHosail9OmZ1bmN0aW9uKEksUixFLHope3ZvaWQgMD09PXomJih6PUUpLElbel09UltFXX0pLEo9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKEksUil7Zm9yKHZhciBFIGluIEkpImRlZmF1'@;
put 'bHQiPT09RXx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFIsRSl8fEsoUixJLEUpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSihMKDE1NzApLEIpLEooTCgzNDkxKSxCKSxKKEwoNDQ0NiksQiksSihMKDYxMTgpLEIpLEoo'@;
put 'TCgyNjkzKSxCKSxKKEwoNjA4NCksQiksSihMKDEwNjUpLEIpfSw0NTg4OmZ1bmN0aW9uKEgsQixMKXsidXNlIHN0cmljdCI7dmFyIEs9TCg0MTU1KSxKPUwoNTEwOCksST10aGlzJiZ0aGlzLl9fYXNzaWdufHxmdW5jdGlvbigpe3JldHVybiBJPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGxl'@;
put 'KXtmb3IodmFyIGRlLHVlPTEsY2U9YXJndW1lbnRzLmxlbmd0aDt1ZTxjZTt1ZSsrKWZvcih2YXIgWSBpbiBkZT1hcmd1bWVudHNbdWVdKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkZSxZKSYmKGxlW1ldPWRlW1ldKTtyZXR1cm4gbGV9LEkuYXBwbHkodGhpcyxhcmd1'@;
put 'bWVudHMpfSxSPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihsZSxkZSx1ZSxjZSl7cmV0dXJuIG5ldyh1ZXx8KHVlPVByb21pc2UpKShmdW5jdGlvbihZLGIpe2Z1bmN0aW9uIHgoZyl7dHJ5e0YoY2UubmV4dChnKSl9Y2F0Y2goQyl7YihDKX19ZnVuY3Rpb24gTihnKXt0cnl7Rihj'@;
put 'ZS50aHJvdyhnKSl9Y2F0Y2goQyl7YihDKX19ZnVuY3Rpb24gRihnKXt2YXIgQztnLmRvbmU/WShnLnZhbHVlKTooQz1nLnZhbHVlLEMgaW5zdGFuY2VvZiB1ZT9DOm5ldyB1ZShmdW5jdGlvbihNKXtNKEMpfSkpLnRoZW4oeCxOKX1GKChjZT1jZS5hcHBseShsZSxkZXx8W10pKS5uZXh0KCkp'@;
put 'fSl9LEU9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24obGUsZGUpe3ZhciB1ZSxjZSxZLGIseD17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZZWzBdKXRocm93IFlbMV07cmV0dXJuIFlbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gYj17bmV4dDpOKDApLHRocm93Ok4o'@;
put 'MSkscmV0dXJuOk4oMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihiW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGI7ZnVuY3Rpb24gTihGKXtyZXR1cm4gZnVuY3Rpb24oZyl7cmV0dXJuIGZ1bmN0aW9uKEMpe2lmKHVlKXRocm93IG5ldyBUeXBlRXJy'@;
put 'b3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3g7KXRyeXtpZih1ZT0xLGNlJiYoWT0yJkNbMF0/Y2UucmV0dXJuOkNbMF0/Y2UudGhyb3d8fCgoWT1jZS5yZXR1cm4pJiZZLmNhbGwoY2UpLDApOmNlLm5leHQpJiYhKFk9WS5jYWxsKGNlLENbMV0pKS5kb25lKXJl'@;
put 'dHVybiBZO3N3aXRjaChjZT0wLFkmJihDPVsyJkNbMF0sWS52YWx1ZV0pLENbMF0pe2Nhc2UgMDpjYXNlIDE6WT1DO2JyZWFrO2Nhc2UgNDpyZXR1cm4geC5sYWJlbCsrLHt2YWx1ZTpDWzFdLGRvbmU6ITF9O2Nhc2UgNTp4LmxhYmVsKyssY2U9Q1sxXSxDPVswXTtjb250aW51ZTtjYXNlIDc6'@;
put 'Qz14Lm9wcy5wb3AoKSx4LnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChZPShZPXgudHJ5cykubGVuZ3RoPjAmJllbWS5sZW5ndGgtMV0pfHw2IT09Q1swXSYmMiE9PUNbMF0pKXt4PTA7Y29udGludWV9aWYoMz09PUNbMF0mJighWXx8Q1sxXT5ZWzBdJiZDWzFdPFlbM10pKXt4'@;
put 'LmxhYmVsPUNbMV07YnJlYWt9aWYoNj09PUNbMF0mJngubGFiZWw8WVsxXSl7eC5sYWJlbD1ZWzFdLFk9QzticmVha31pZihZJiZ4LmxhYmVsPFlbMl0pe3gubGFiZWw9WVsyXSx4Lm9wcy5wdXNoKEMpO2JyZWFrfVlbMl0mJngub3BzLnBvcCgpLHgudHJ5cy5wb3AoKTtjb250aW51ZX1DPWRl'@;
put 'LmNhbGwobGUseCl9Y2F0Y2goTSl7Qz1bNixNXSxjZT0wfWZpbmFsbHl7dWU9WT0wfWlmKDUmQ1swXSl0aHJvdyBDWzFdO3JldHVybnt2YWx1ZTpDWzBdP0NbMV06dm9pZCAwLGRvbmU6ITB9fShbRixnXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEIsIl9fZXNNb2R1bGUiLHt2YWx1ZToh'@;
put 'MH0pLEIudGhyb3dJZkVycm9yPUIuUmVxdWVzdENsaWVudD12b2lkIDA7dmFyIHo9TCg4MzczKSxqPUwoMTUyNyksVj1MKDEzOTUpLEc9TCgyODEzKSxXPUwoOTc3OCksVT1MKDk1MjYpLHE9TCg1OTI4KSx0ZT1MKDEwMDUpLG5lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbGUoZGUsdWUsY2Upe3Zh'@;
put 'ciBZPXRoaXM7dGhpcy5iYXNlVXJsPWRlLHRoaXMucmVxdWVzdHM9W10sdGhpcy5yZXF1ZXN0c0xpbWl0PTEwLHRoaXMuY3NyZlRva2VuPXtoZWFkZXJOYW1lOiIiLHZhbHVlOiIifSx0aGlzLmdldFJlcXVlc3RzPWZ1bmN0aW9uKCl7cmV0dXJuIFkucmVxdWVzdHN9LHRoaXMuY2xlYXJSZXF1'@;
put 'ZXN0cz1mdW5jdGlvbigpe1kucmVxdWVzdHM9W119LHRoaXMuYXV0aG9yaXplPWZ1bmN0aW9uKGIpe3JldHVybiBSKFksdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciB4LE4sRixnLEMsTSx5LHAsUyxRLHJlLGZlO3JldHVybiBFKHRoaXMsZnVuY3Rpb24obWUpe3N3aXRjaChtZS5sYWJl'@;
put 'bCl7Y2FzZSAwOmZvcihOPXt9LEY9Yi5zcGxpdCgiPGJvZHk+IilbMV0uc3BsaXQoIjwvYm9keT4iKVswXSwoZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSkuaW5uZXJIVE1MPUYsQz1nLnF1ZXJ5U2VsZWN0b3IoIiNhcHBsaWNhdGlvbl9hdXRob3JpemF0aW9uIikseD1DP3RoaXMu'@;
put 'YmFzZVVybCtDLmdldEF0dHJpYnV0ZSgiYWN0aW9uIik6bnVsbCxNPUM/LnF1ZXJ5U2VsZWN0b3JBbGwoImlucHV0IikseT0wLHA9TTt5PHAubGVuZ3RoO3krKykidXNlcl9vYXV0aF9hcHByb3ZhbCI9PT0oUz1wW3ldKS5uYW1lJiYoUy52YWx1ZT0idHJ1ZSIpLE5bUy5uYW1lXT1TLnZhbHVl'@;
put 'O2ZvcihmZSBpbihRPU9iamVjdC5rZXlzKE4pLmZpbmQoZnVuY3Rpb24oa2Upe3JldHVybiBrZT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcygiY3NyZiIpfSkpJiYodGhpcy5jc3JmVG9rZW4udmFsdWU9TltRXSx0aGlzLmNzcmZUb2tlbi5oZWFkZXJOYW1lPXRoaXMuY3NyZlRva2VuLmhlYWRl'@;
put 'ck5hbWV8fCJ4LWNzcmYtdG9rZW4iKSxyZT1uZXcgRm9ybURhdGEsTilOLmhhc093blByb3BlcnR5KGZlKSYmcmUuYXBwZW5kKGZlLE5bZmVdKTtpZigheCl0aHJvdyBuZXcgRXJyb3IoIkF1dGggRm9ybSBVUkwgaXMgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuWzQsdGhpcy5odHRwQ2xp'@;
put 'ZW50LnBvc3QoeCxyZSx7cmVzcG9uc2VUeXBlOiJ0ZXh0IixoZWFkZXJzOntBY2NlcHQ6IiovKiIsIkNvbnRlbnQtVHlwZSI6InRleHQvcGxhaW4ifX0pLnRoZW4oZnVuY3Rpb24oa2Upe3JldHVybiBrZS5kYXRhfSkuY2F0Y2goZnVuY3Rpb24oa2UpeyhLLmxvZ2dlcnx8SikuZXJyb3Ioa2Up'@;
put 'fSldO2Nhc2UgMTpyZXR1cm5bMixtZS5zZW50KCldfX0pfSl9LHRoaXMuZ2V0SGVhZGVycz1mdW5jdGlvbihiLHgpe3ZhciBOPXt9O3JldHVybiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiIT09eCYmKE5bIkNvbnRlbnQtVHlwZSJdPXgpLE4uQWNjZXB0PSJhcHBsaWNhdGlv'@;
put 'bi9qc29uIj09PXg/ImFwcGxpY2F0aW9uL2pzb24iOiIqLyoiLGImJihOLkF1dGhvcml6YXRpb249IkJlYXJlciAiLmNvbmNhdChiKSksWS5jc3JmVG9rZW4uaGVhZGVyTmFtZSYmWS5jc3JmVG9rZW4udmFsdWUmJihOW1kuY3NyZlRva2VuLmhlYWRlck5hbWVdPVkuY3NyZlRva2VuLnZhbHVl'@;
put 'KSxOfSx0aGlzLnBhcnNlQW5kU2V0RmlsZVVwbG9hZENzcmZUb2tlbj1mdW5jdGlvbihiKXt2YXIgeD1ZLnBhcnNlQ3NyZlRva2VuKGIpO3gmJihZLmZpbGVVcGxvYWRDc3JmVG9rZW49eCl9LHRoaXMucGFyc2VBbmRTZXRDc3JmVG9rZW49ZnVuY3Rpb24oYil7dmFyIHg9WS5wYXJzZUNzcmZU'@;
put 'b2tlbihiKTt4JiYoWS5jc3JmVG9rZW49eCl9LHRoaXMucGFyc2VDc3JmVG9rZW49ZnVuY3Rpb24oYil7dmFyIHgsTj1udWxsPT09KHg9Yi5oZWFkZXJzWyJ4LWNzcmYtaGVhZGVyIl0pfHx2b2lkIDA9PT14P3ZvaWQgMDp4LnRvTG93ZXJDYXNlKCk7aWYoTilyZXR1cm57aGVhZGVyTmFtZTpO'@;
put 'LHZhbHVlOmIuaGVhZGVyc1tOXXx8IiJ9fSx0aGlzLmhhbmRsZUVycm9yPWZ1bmN0aW9uKGIseCxOKXtyZXR1cm4gdm9pZCAwPT09TiYmKE49ITEpLFIoWSx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEYsZztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKEMpe3N3aXRjaChDLmxhYmVsKXtj'@;
put 'YXNlIDA6cmV0dXJuIEY9Yi5yZXNwb25zZSxiIGluc3RhbmNlb2YgVi5BdXRob3JpemVFcnJvcj9bNCx0aGlzLmh0dHBDbGllbnQuZ2V0KGIuY29uZmlybVVybCx7cmVzcG9uc2VUeXBlOiJ0ZXh0IixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoidGV4dC9wbGFpbiIsQWNjZXB0OiIqLyoifX0p'@;
put 'LmNhdGNoKGZ1bmN0aW9uKE0pe3Rocm93KDAsVy5wcmVmaXhNZXNzYWdlKShNLCJFcnJvciB3aGlsZSBnZXR0aW5nIGVycm9yIGNvbmZpcm1VcmwuICIpfSldOlszLDVdO2Nhc2UgMTpyZXR1cm4gZz1DLnNlbnQoKSwoMCxqLmlzQXV0aG9yaXplRm9ybVJlcXVpcmVkKShnPy5kYXRhKT9bNCx0'@;
put 'aGlzLmF1dGhvcml6ZShnLmRhdGEpLmNhdGNoKGZ1bmN0aW9uKE0pe3Rocm93KDAsVy5wcmVmaXhNZXNzYWdlKShNLCJFcnJvciB3aGlsZSBhdXRob3JpemluZyByZXF1ZXN0LiAiKX0pXTpbMywzXTtjYXNlIDI6Qy5zZW50KCksQy5sYWJlbD0zO2Nhc2UgMzpyZXR1cm5bNCx4KCkuY2F0Y2go'@;
put 'ZnVuY3Rpb24oTSl7dGhyb3coMCxXLnByZWZpeE1lc3NhZ2UpKE0sIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBjYWxsYmFjayBpbiBoYW5kbGVFcnJvci4gIil9KV07Y2FzZSA0OnJldHVyblsyLEMuc2VudCgpXTtjYXNlIDU6aWYoYiBpbnN0YW5jZW9mIFYuTG9naW5SZXF1aXJlZEVycm9yKXRo'@;
put 'cm93IHRoaXMuY2xlYXJDc3JmVG9rZW5zKCksYjtyZXR1cm4gYiBpbnN0YW5jZW9mIHRlLkludmFsaWRTQVNqc0NzcmZFcnJvcj9bNCx0aGlzLmh0dHBDbGllbnQuZ2V0KCIvIix7d2l0aENyZWRlbnRpYWxzOiEwfSkudGhlbihmdW5jdGlvbihNKXt2YXIgeSxwPW51bGw9PT0oeT0vPHNjcmlw'@;
put 'dD5kb2N1bWVudC5jb29raWUgPSAnKFhTUkYtVE9LRU49Lio7IE1heC1BZ2U9ODY0MDA7IFNhbWVTaXRlPVN0cmljdDsgUGF0aD1cLzspJzxcL3NjcmlwdD4vLmV4ZWMoTS5kYXRhKSl8fHZvaWQgMD09PXk/dm9pZCAwOnlbMV07cCYmKGRvY3VtZW50LmNvb2tpZT1wKX0pLmNhdGNoKGZ1bmN0'@;
put 'aW9uKE0pe3Rocm93KDAsVy5wcmVmaXhNZXNzYWdlKShNLCJFcnJvciB3aGlsZSByZS1mZXRjaGluZyBDU1JGIHRva2VuLiIpfSldOlszLDhdO2Nhc2UgNjpyZXR1cm4gQy5zZW50KCksWzQseCgpLmNhdGNoKGZ1bmN0aW9uKE0pe3Rocm93KDAsVy5wcmVmaXhNZXNzYWdlKShNLCJFcnJvciB3'@;
put 'aGlsZSBleGVjdXRpbmcgY2FsbGJhY2sgaW4gaGFuZGxlRXJyb3IuICIpfSldO2Nhc2UgNzpyZXR1cm5bMixDLnNlbnQoKV07Y2FzZSA4OnJldHVybiA0MDMhPT1GPy5zdGF0dXMmJjQ0OSE9PUY/LnN0YXR1cz9bMywxMV06KHRoaXMucGFyc2VBbmRTZXRDc3JmVG9rZW4oRiksdGhpcy5jc3Jm'@;
put 'VG9rZW4uaGVhZGVyTmFtZSYmdGhpcy5jc3JmVG9rZW4udmFsdWU/WzQseCgpLmNhdGNoKGZ1bmN0aW9uKE0pe3Rocm93KDAsVy5wcmVmaXhNZXNzYWdlKShNLCJFcnJvciB3aGlsZSBleGVjdXRpbmcgY2FsbGJhY2sgaW4gaGFuZGxlRXJyb3IuICIpfSldOlszLDEwXSk7Y2FzZSA5OnJldHVy'@;
put 'blsyLEMuc2VudCgpXTtjYXNlIDEwOnRocm93IGI7Y2FzZSAxMTppZig0MDQ9PT1GPy5zdGF0dXMpdGhyb3cgbmV3IFYuTm90Rm91bmRFcnJvcihGLmNvbmZpZy51cmwpO2lmKDUwMj09PUY/LnN0YXR1cyl7aWYoTil0aHJvdyBuZXcgVi5JbnRlcm5hbFNlcnZlckVycm9yO3JldHVyblsyXX1D'@;
put 'LmxhYmVsPTEyO2Nhc2UgMTI6dGhyb3cgYi5pc0F4aW9zRXJyb3ImJiJVTkFCTEVfVE9fVkVSSUZZX0xFQUZfU0lHTkFUVVJFIj09PWIuY29kZT9uZXcgVi5DZXJ0aWZpY2F0ZUVycm9yKGIubWVzc2FnZSk6Yi5tZXNzYWdlP2I6KDAsVy5wcmVmaXhNZXNzYWdlKShiLCJFcnJvciB3aGlsZSBo'@;
put 'YW5kbGluZyBlcnJvci4gIil9fSl9KX0sdGhpcy5jcmVhdGVIdHRwQ2xpZW50KGRlLHVlKSxjZSYmKHRoaXMucmVxdWVzdHNMaW1pdD1jZSl9cmV0dXJuIGxlLnByb3RvdHlwZS5zZXRDb25maWc9ZnVuY3Rpb24oZGUsdWUpe3RoaXMuY3JlYXRlSHR0cENsaWVudChkZSx1ZSl9LGxlLnByb3Rv'@;
put 'dHlwZS5zYXZlTG9jYWxTdG9yYWdlVG9rZW49ZnVuY3Rpb24oZGUsdWUpe2xvY2FsU3RvcmFnZS5zZXRJdGVtKCJhY2Nlc3NUb2tlbiIsZGUpLGxvY2FsU3RvcmFnZS5zZXRJdGVtKCJyZWZyZXNoVG9rZW4iLHVlKX0sbGUucHJvdG90eXBlLmdldENzcmZUb2tlbj1mdW5jdGlvbihkZSl7cmV0'@;
put 'dXJuIHZvaWQgMD09PWRlJiYoZGU9ImdlbmVyYWwiKSwiZmlsZSI9PT1kZT90aGlzLmZpbGVVcGxvYWRDc3JmVG9rZW46dGhpcy5jc3JmVG9rZW59LGxlLnByb3RvdHlwZS5jbGVhckNzcmZUb2tlbnM9ZnVuY3Rpb24oKXt0aGlzLmNzcmZUb2tlbj17aGVhZGVyTmFtZToiIix2YWx1ZToiIn0s'@;
put 'dGhpcy5maWxlVXBsb2FkQ3NyZlRva2VuPXtoZWFkZXJOYW1lOiIiLHZhbHVlOiIifX0sbGUucHJvdG90eXBlLmNsZWFyTG9jYWxTdG9yYWdlVG9rZW5zPWZ1bmN0aW9uKCl7bG9jYWxTdG9yYWdlLnNldEl0ZW0oImFjY2Vzc1Rva2VuIiwiIiksbG9jYWxTdG9yYWdlLnNldEl0ZW0oInJlZnJl'@;
put 'c2hUb2tlbiIsIiIpfSxsZS5wcm90b3R5cGUuZ2V0QmFzZVVybD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmh0dHBDbGllbnQuZGVmYXVsdHMuYmFzZVVSTHx8IiJ9LGxlLnByb3RvdHlwZS5hcHBlbmRSZXF1ZXN0PWZ1bmN0aW9uKGRlLHVlLGNlKXt2YXIgWT0iIixiPSIiLHg9bnVsbDtjZSYm'@;
put 'KGRlPy5sb2c/KFk9KDAscS5wYXJzZVNvdXJjZUNvZGUpKGRlLmxvZyksYj0oMCxxLnBhcnNlR2VuZXJhdGVkQ29kZSkoZGUubG9nKSx4PWRlPy5yZXN1bHQ/ZGUucmVzdWx0LldPUks6ZGUubG9nKTpkZT8ucmVzdWx0JiYoInN0cmluZyI9PXR5cGVvZiBkZS5yZXN1bHQmJihZPSgwLHEucGFy'@;
put 'c2VTb3VyY2VDb2RlKShkZS5yZXN1bHQpLGI9KDAscS5wYXJzZUdlbmVyYXRlZENvZGUpKGRlLnJlc3VsdCkpLHg9ZGUucmVzdWx0LldPUkspKTt2YXIgTj0ic3RyaW5nIj09dHlwZW9mIGRlPy5yZXN1bHQ/ZGU/LnJlc3VsdDpKU09OLnN0cmluZ2lmeShkZT8ucmVzdWx0LG51bGwsMik7dGhp'@;
put 'cy5yZXF1ZXN0cy5wdXNoKHtsb2dGaWxlOmRlPy5sb2d8fE58fGRlLHNlcnZpY2VMaW5rOnVlLHRpbWVzdGFtcDpuZXcgRGF0ZSxzb3VyY2VDb2RlOlksZ2VuZXJhdGVkQ29kZTpiLFNBU1dPUks6eH0pLHRoaXMucmVxdWVzdHMubGVuZ3RoPnRoaXMucmVxdWVzdHNMaW1pdCYmdGhpcy5yZXF1'@;
put 'ZXN0cy5zcGxpY2UoMCwxKX0sbGUucHJvdG90eXBlLmdldD1mdW5jdGlvbihkZSx1ZSxjZSxZLGIpe3JldHVybiB2b2lkIDA9PT1jZSYmKGNlPSJhcHBsaWNhdGlvbi9qc29uIiksdm9pZCAwPT09WSYmKFk9e30pLHZvaWQgMD09PWImJihiPSExKSxSKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5j'@;
put 'dGlvbigpe3ZhciB4LE4sRj10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oZyl7cmV0dXJuIHg9SShJKHt9LHRoaXMuZ2V0SGVhZGVycyh1ZSxjZSkpLFkpLE49e2hlYWRlcnM6eCxyZXNwb25zZVR5cGU6InRleHQvcGxhaW4iPT09Y2U/InRleHQiOiJqc29uIix3aXRoQ3JlZGVudGlhbHM6'@;
put 'ITB9LCJ0ZXh0L3BsYWluIj09PWNlJiYoTi50cmFuc2Zvcm1SZXNwb25zZT12b2lkIDApLFsyLHRoaXMuaHR0cENsaWVudC5nZXQoZGUsTikudGhlbihmdW5jdGlvbihDKXtyZXR1cm4oMCxCLnRocm93SWZFcnJvcikoQyksRi5wYXJzZVJlc3BvbnNlKEMpfSkuY2F0Y2goZnVuY3Rpb24oQyl7'@;
put 'cmV0dXJuIFIoRix2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIE09dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKHkpe3N3aXRjaCh5LmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5oYW5kbGVFcnJvcihDLGZ1bmN0aW9uKCl7cmV0dXJuIE0uZ2V0KGRlLHVlLGNlLFkpLmNhdGNo'@;
put 'KGZ1bmN0aW9uKHApe3Rocm93KDAsVy5wcmVmaXhNZXNzYWdlKShwLCJFcnJvciB3aGlsZSBleGVjdXRpbmcgaGFuZGxlIGVycm9yIGNhbGxiYWNrLiAiKX0pfSxiKV07Y2FzZSAxOnJldHVyblsyLHkuc2VudCgpXX19KX0pfSldfSl9KX0sbGUucHJvdG90eXBlLnBvc3Q9ZnVuY3Rpb24oZGUs'@;
put 'dWUsY2UsWSxiLHgpe3JldHVybiB2b2lkIDA9PT1ZJiYoWT0iYXBwbGljYXRpb24vanNvbiIpLHZvaWQgMD09PWImJihiPXt9KSx2b2lkIDA9PT14JiYoeD17fSksUih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgTixGPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihnKXty'@;
put 'ZXR1cm4gTj1JKEkoe30sdGhpcy5nZXRIZWFkZXJzKGNlLFkpKSxiKSxbMix0aGlzLmh0dHBDbGllbnQucG9zdChkZSx1ZSxJKHtoZWFkZXJzOk4sd2l0aENyZWRlbnRpYWxzOiEwfSx4KSkudGhlbihmdW5jdGlvbihDKXtyZXR1cm4oMCxCLnRocm93SWZFcnJvcikoQyksRi5wYXJzZVJlc3Bv'@;
put 'bnNlKEMpfSkuY2F0Y2goZnVuY3Rpb24oQyl7cmV0dXJuIFIoRix2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIE09dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKHkpe3N3aXRjaCh5LmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5oYW5kbGVFcnJvcihDLGZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIE0ucG9zdChkZSx1ZSxjZSxZLGIpfSldO2Nhc2UgMTpyZXR1cm5bMix5LnNlbnQoKV19fSl9KX0pXX0pfSl9LGxlLnByb3RvdHlwZS5wdXQ9ZnVuY3Rpb24oZGUsdWUsY2UsWSl7cmV0dXJuIHZvaWQgMD09PVkmJihZPXt9KSxSKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3Zh'@;
put 'ciBiLHg9dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKE4pe3JldHVybiBiPUkoSSh7fSx0aGlzLmdldEhlYWRlcnMoY2UsImFwcGxpY2F0aW9uL2pzb24iKSksWSksWzIsdGhpcy5odHRwQ2xpZW50LnB1dChkZSx1ZSx7aGVhZGVyczpiLHdpdGhDcmVkZW50aWFsczohMH0pLnRoZW4oZnVu'@;
put 'Y3Rpb24oRil7cmV0dXJuKDAsQi50aHJvd0lmRXJyb3IpKEYpLHgucGFyc2VSZXNwb25zZShGKX0pLmNhdGNoKGZ1bmN0aW9uKEYpe3JldHVybiBSKHgsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBnPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihDKXtzd2l0Y2goQy5sYWJlbCl7'@;
put 'Y2FzZSAwOnJldHVybls0LHRoaXMuaGFuZGxlRXJyb3IoRixmdW5jdGlvbigpe3JldHVybiBnLnB1dChkZSx1ZSxjZSxZKX0pXTtjYXNlIDE6cmV0dXJuWzIsQy5zZW50KCldfX0pfSl9KV19KX0pfSxsZS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGRlLHVlKXtyZXR1cm4gUih0aGlzLHZv'@;
put 'aWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgY2UsWT10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oYil7cmV0dXJuIGNlPXRoaXMuZ2V0SGVhZGVycyh1ZSwiYXBwbGljYXRpb24vanNvbiIpLFsyLHRoaXMuaHR0cENsaWVudC5kZWxldGUoZGUse2hlYWRlcnM6Y2Usd2l0aENyZWRlbnRp'@;
put 'YWxzOiEwfSkudGhlbihmdW5jdGlvbih4KXtyZXR1cm4oMCxCLnRocm93SWZFcnJvcikoeCksWS5wYXJzZVJlc3BvbnNlKHgpfSkuY2F0Y2goZnVuY3Rpb24oeCl7cmV0dXJuIFIoWSx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIE49dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKEYp'@;
put 'e3N3aXRjaChGLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5oYW5kbGVFcnJvcih4LGZ1bmN0aW9uKCl7cmV0dXJuIE4uZGVsZXRlKGRlLHVlKX0pXTtjYXNlIDE6cmV0dXJuWzIsRi5zZW50KCldfX0pfSl9KV19KX0pfSxsZS5wcm90b3R5cGUucGF0Y2g9ZnVuY3Rpb24oZGUsdWUsY2Up'@;
put 'e3JldHVybiB2b2lkIDA9PT11ZSYmKHVlPXt9KSxSKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBZLGI9dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKHgpe3JldHVybiBZPXRoaXMuZ2V0SGVhZGVycyhjZSwiYXBwbGljYXRpb24vanNvbiIpLFsyLHRoaXMuaHR0cENsaWVu'@;
put 'dC5wYXRjaChkZSx1ZSx7aGVhZGVyczpZLHdpdGhDcmVkZW50aWFsczohMH0pLnRoZW4oZnVuY3Rpb24oTil7cmV0dXJuKDAsQi50aHJvd0lmRXJyb3IpKE4pLGIucGFyc2VSZXNwb25zZShOKX0pLmNhdGNoKGZ1bmN0aW9uKE4pe3JldHVybiBSKGIsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigp'@;
put 'e3ZhciBGPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihnKXtzd2l0Y2goZy5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMuaGFuZGxlRXJyb3IoTixmdW5jdGlvbigpe3JldHVybiBGLnBhdGNoKGRlLHVlLGNlKX0pXTtjYXNlIDE6cmV0dXJuWzIsZy5zZW50KCldfX0pfSl9KV19KX0p'@;
put 'fSxsZS5wcm90b3R5cGUudXBsb2FkRmlsZT1mdW5jdGlvbihkZSx1ZSxjZSl7dmFyIFk7cmV0dXJuIFIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGIseCxOO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oRil7c3dpdGNoKEYubGFiZWwpe2Nhc2UgMDpiPXRoaXMuZ2V0SGVhZGVy'@;
put 'cyhjZSwiYXBwbGljYXRpb24vanNvbiIpLCEobnVsbD09PShZPXRoaXMuZmlsZVVwbG9hZENzcmZUb2tlbil8fHZvaWQgMD09PVkpJiZZLnZhbHVlJiYoYlt0aGlzLmZpbGVVcGxvYWRDc3JmVG9rZW4uaGVhZGVyTmFtZV09dGhpcy5maWxlVXBsb2FkQ3NyZlRva2VuLnZhbHVlKSxGLmxhYmVs'@;
put 'PTE7Y2FzZSAxOnJldHVybiBGLnRyeXMucHVzaChbMSwzLCw0XSksWzQsdGhpcy5odHRwQ2xpZW50LnBvc3QoZGUsdWUse2hlYWRlcnM6Yix0cmFuc2Zvcm1SZXF1ZXN0OmZ1bmN0aW9uKGcpe3JldHVybiBnfX0pXTtjYXNlIDI6cmV0dXJuWzIse3Jlc3VsdDooTj1GLnNlbnQoKSkuZGF0YSxl'@;
put 'dGFnOk4uaGVhZGVycy5ldGFnfV07Y2FzZSAzOmlmKHg9Ri5zZW50KCksNDAzPT09KG51bGw9PShOPXgucmVzcG9uc2UpP3ZvaWQgMDpOLnN0YXR1cyl8fDQ0OT09PU4/LnN0YXR1cyl7aWYodGhpcy5wYXJzZUFuZFNldEZpbGVVcGxvYWRDc3JmVG9rZW4oTiksdGhpcy5maWxlVXBsb2FkQ3Ny'@;
put 'ZlRva2VuKXJldHVyblsyLHRoaXMudXBsb2FkRmlsZShkZSx1ZSxjZSldO3Rocm93IHh9dGhyb3cgeDtjYXNlIDQ6cmV0dXJuWzJdfX0pfSl9LGxlLnByb3RvdHlwZS5wYXJzZVJlc3BvbnNlPWZ1bmN0aW9uKGRlKXt2YXIgdWUsY2U9ZGU/LmhlYWRlcnM/ZGUuaGVhZGVycy5ldGFnOiIiLFk9'@;
put 'ITE7dHJ5e3VlPSJzdHJpbmciPT10eXBlb2YgZGUuZGF0YT9KU09OLnBhcnNlKGRlLmRhdGEpOmRlLmRhdGF9Y2F0Y2h7dHJ5e3VlPUpTT04ucGFyc2UoKDAsRy5wYXJzZVdlYm91dFJlc3BvbnNlKShkZS5kYXRhKSl9Y2F0Y2h7dWU9ZGUuZGF0YX1ZPSEwfXZhciBiPXtyZXN1bHQ6dWUsZXRh'@;
put 'ZzpjZSxzdGF0dXM6ZGUuc3RhdHVzfTtyZXR1cm4gWSYmKGIubG9nPWRlLmRhdGEpLGJ9LGxlLnByb3RvdHlwZS5jcmVhdGVIdHRwQ2xpZW50PWZ1bmN0aW9uKGRlLHVlKXt2YXIgY2U9dWU/bmV3IHouQWdlbnQodWUpOnZvaWQgMDt0aGlzLmh0dHBDbGllbnQ9KDAscS5jcmVhdGVBeGlvc0lu'@;
put 'c3RhbmNlKShkZSxjZSksdGhpcy5odHRwQ2xpZW50LmRlZmF1bHRzLnZhbGlkYXRlU3RhdHVzPWZ1bmN0aW9uKFkpe3JldHVybiBZPj0yMDAmJlk8PTQwMX19LGxlfSgpO0IuUmVxdWVzdENsaWVudD1uZSxCLnRocm93SWZFcnJvcj1mdW5jdGlvbihsZSl7dmFyIGRlLHVlLGNlLFksYix4LE47'@;
put 'c3dpdGNoKGxlLnN0YXR1cyl7Y2FzZSA0MDA6aWYoIm9iamVjdCI9PXR5cGVvZiBsZS5kYXRhJiYiaW52YWxpZF9ncmFudCI9PT1sZS5kYXRhLmVycm9yKXRocm93IG5ldyBWLkxvZ2luUmVxdWlyZWRFcnJvcihsZS5kYXRhKTtpZigic3RyaW5nIj09dHlwZW9mIGxlLmRhdGEmJiJpbnZhbGlk'@;
put 'IGNzcmYgdG9rZW4hIj09PWxlLmRhdGEudG9Mb3dlckNhc2UoKSl0aHJvdyBuZXcgdGUuSW52YWxpZFNBU2pzQ3NyZkVycm9yO2JyZWFrO2Nhc2UgNDAxOnRocm93Im9iamVjdCI9PXR5cGVvZiBsZS5kYXRhP25ldyBWLkxvZ2luUmVxdWlyZWRFcnJvcihsZS5kYXRhKTpuZXcgVi5Mb2dpblJl'@;
put 'cXVpcmVkRXJyb3J9aWYobnVsbCE9PSh1ZT1udWxsPT09KGRlPWxlLmRhdGEpfHx2b2lkIDA9PT1kZT92b2lkIDA6ZGUuZW50aXR5SUQpJiZ2b2lkIDAhPT11ZSYmdWUuaW5jbHVkZXMoImxvZ2luIikpdGhyb3cgbmV3IFYuTG9naW5SZXF1aXJlZEVycm9yO2lmKCJzdHJpbmciPT10eXBlb2Yg'@;
put 'bGUuZGF0YSYmKDAsai5pc0F1dGhvcml6ZUZvcm1SZXF1aXJlZCkobGUuZGF0YSkpdGhyb3cgbmV3IFYuQXV0aG9yaXplRXJyb3IoIkF1dGhvcml6YXRpb24gcmVxdWlyZWQiLGxlLnJlcXVlc3QucmVzcG9uc2VVUkwpO2lmKCJzdHJpbmciPT10eXBlb2YgbGUuZGF0YSYmKDAsai5pc0xvZ0lu'@;
put 'UmVxdWlyZWQpKGxlLmRhdGEpJiYobnVsbD09PShZPW51bGw9PT0oY2U9bGUuY29uZmlnKXx8dm9pZCAwPT09Y2U/dm9pZCAwOmNlLnVybCl8fHZvaWQgMD09PVl8fCFZLmluY2x1ZGVzKCIvU0FTTG9nb24vbG9naW4iKSkpdGhyb3cgbmV3IFYuTG9naW5SZXF1aXJlZEVycm9yO2lmKG51bGwh'@;
put 'PT0oYj1sZS5kYXRhKSYmdm9pZCAwIT09YiYmYi5hdXRoX3JlcXVlc3QpdGhyb3cgbmV3IFYuQXV0aG9yaXplRXJyb3IobGUuZGF0YS5tZXNzYWdlLGxlLnJlcXVlc3QucmVzcG9uc2VVUkwpO2lmKG51bGwhPT0oTj1udWxsPT09KHg9bGUuY29uZmlnKXx8dm9pZCAwPT09eD92b2lkIDA6eC51'@;
put 'cmwpJiZ2b2lkIDAhPT1OJiZOLmluY2x1ZGVzKCJzYXNBdXRoRXJyb3IiKSl0aHJvdyBuZXcgVS5TQVM5QXV0aEVycm9yO3ZhciBnPWllKGxlLmRhdGEpO2lmKGcpdGhyb3cgZ307dmFyIGllPWZ1bmN0aW9uKGxlKXtpZighbGUpcmV0dXJuIG51bGw7dHJ5e3ZhciBkZT1KU09OLnBhcnNlKGxl'@;
put 'Py5yZXBsYWNlKC9bXG5ccl0vZywiICIpKTtpZihkZS5lcnJvckNvZGUmJmRlLm1lc3NhZ2UpcmV0dXJuIG5ldyBWLkpvYkV4ZWN1dGlvbkVycm9yKGRlLmVycm9yQ29kZSxkZS5tZXNzYWdlLGxlPy5yZXBsYWNlKC9bXG5ccl0vZywiICIpKX1jYXRjaHt9dHJ5e2lmKGxlPy5pbmNsdWRlcygn'@;
put 'eyJlcnJvckNvZGUnKSYmKHg9bGUuc3BsaXQoJ3siZXJyb3JDb2RlJykpLmxlbmd0aD4xKXt2YXIgdWU9J3siZXJyb3JDb2RlJyt4WzFdLnNwbGl0KCcifScpWzBdKycifScsY2U9SlNPTi5wYXJzZSh1ZS5yZXBsYWNlKC9bXG5ccl0vZywiICIpKTtyZXR1cm4gbmV3IFYuSm9iRXhlY3V0aW9u'@;
put 'RXJyb3IoY2UuZXJyb3JDb2RlLGNlLm1lc3NhZ2UsbGU/LnJlcGxhY2UoL1tcblxyXS9nLCJcbiIpKX19Y2F0Y2h7fXRyeXtpZihsZT8ubWF0Y2goL3N0b3JlZCBwcm9jZXNzIG5vdCBmb3VuZDogL2kpJiYoeD1sZS5zcGxpdCgvc3RvcmVkIHByb2Nlc3Mgbm90IGZvdW5kOiAvaSkpLmxlbmd0'@;
put 'aD4xKXt2YXIgWT14WzFdLnNwbGl0KCI8aT4iKVsxXS5zcGxpdCgiPC9pPiIpWzBdLGI9WS5lbmRzV2l0aCgicnVubmVyIik/IlNBU0pTIHJ1bm5lciBub3QgZm91bmQuIEhlcmUncyB0aGUgbGluayAoaHR0cHM6Ly9jbGkuc2FzanMuaW8vYXV0aC8jc2FzanMtcnVubmVyKSB0byB0aGUgU0FT'@;
put 'IGNvZGUgZm9yIHJlZ2lzdGVyaW5nIHRoZSBTQVNqcyBydW5uZXIiOiJTdG9yZWQgcHJvY2VzcyBub3QgZm91bmQ6ICIuY29uY2F0KFkpO3JldHVybiBuZXcgVi5Kb2JFeGVjdXRpb25FcnJvcig1MDAsYiwiIil9fWNhdGNoe310cnl7dmFyIHg7aWYoIWxlPy5tYXRjaCgvPj53ZWJvdXRCRUdJ'@;
put 'Tjw8LykmJmxlPy5tYXRjaCgvU3RvcmVkIFByb2Nlc3MgRXJyb3IvaSkmJmxlPy5tYXRjaCgvVGhpcyByZXF1ZXN0IGNvbXBsZXRlZCB3aXRoIGVycm9ycy4vaSkmJih4PWxlLnNwbGl0KCI8aDI+U0FTIExvZzwvaDI+IikpLmxlbmd0aD4xKXt2YXIgTj14WzFdLnNwbGl0KCI8cHJlPiIpWzFd'@;
put 'LnNwbGl0KCI8L3ByZT4iKVswXTtyZXR1cm4gbmV3IFYuSm9iRXhlY3V0aW9uRXJyb3IoNTAwLGI9IlRoaXMgcmVxdWVzdCBjb21wbGV0ZWQgd2l0aCBlcnJvcnMuIixOKX19Y2F0Y2h7fXJldHVybiBudWxsfX0sNzk1OmZ1bmN0aW9uKEgsQixMKXsidXNlIHN0cmljdCI7dmFyIEssSj10aGlz'@;
put 'JiZ0aGlzLl9fZXh0ZW5kc3x8KEs9ZnVuY3Rpb24ocSx0ZSl7cmV0dXJuKEs9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKG5lLGllKXtuZS5fX3Byb3RvX189aWV9fHxmdW5jdGlvbihuZSxpZSl7Zm9yKHZhciBsZSBpbiBp'@;
put 'ZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaWUsbGUpJiYobmVbbGVdPWllW2xlXSl9KShxLHRlKX0sZnVuY3Rpb24ocSx0ZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHRlJiZudWxsIT09dGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAi'@;
put 'K1N0cmluZyh0ZSkrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gbmUoKXt0aGlzLmNvbnN0cnVjdG9yPXF9SyhxLHRlKSxxLnByb3RvdHlwZT1udWxsPT09dGU/T2JqZWN0LmNyZWF0ZSh0ZSk6KG5lLnByb3RvdHlwZT10ZS5wcm90b3R5cGUsbmV3IG5lKX0pLEk9'@;
put 'dGhpcyYmdGhpcy5fX2Fzc2lnbnx8ZnVuY3Rpb24oKXtyZXR1cm4gST1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihxKXtmb3IodmFyIHRlLG5lPTEsaWU9YXJndW1lbnRzLmxlbmd0aDtuZTxpZTtuZSsrKWZvcih2YXIgbGUgaW4gdGU9YXJndW1lbnRzW25lXSlPYmplY3QucHJvdG90eXBlLmhh'@;
put 'c093blByb3BlcnR5LmNhbGwodGUsbGUpJiYocVtsZV09dGVbbGVdKTtyZXR1cm4gcX0sSS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LFI9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKHEsdGUsbmUsaWUpe3JldHVybiBuZXcobmV8fChuZT1Qcm9taXNlKSkoZnVuY3Rpb24obGUsZGUp'@;
put 'e2Z1bmN0aW9uIHVlKGIpe3RyeXtZKGllLm5leHQoYikpfWNhdGNoKHgpe2RlKHgpfX1mdW5jdGlvbiBjZShiKXt0cnl7WShpZS50aHJvdyhiKSl9Y2F0Y2goeCl7ZGUoeCl9fWZ1bmN0aW9uIFkoYil7dmFyIHg7Yi5kb25lP2xlKGIudmFsdWUpOih4PWIudmFsdWUseCBpbnN0YW5jZW9mIG5l'@;
put 'P3g6bmV3IG5lKGZ1bmN0aW9uKE4pe04oeCl9KSkudGhlbih1ZSxjZSl9WSgoaWU9aWUuYXBwbHkocSx0ZXx8W10pKS5uZXh0KCkpfSl9LEU9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24ocSx0ZSl7dmFyIG5lLGllLGxlLGRlLHVlPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtp'@;
put 'ZigxJmxlWzBdKXRocm93IGxlWzFdO3JldHVybiBsZVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBkZT17bmV4dDpjZSgwKSx0aHJvdzpjZSgxKSxyZXR1cm46Y2UoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihkZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IHRoaXN9KSxkZTtmdW5jdGlvbiBjZShZKXtyZXR1cm4gZnVuY3Rpb24oYil7cmV0dXJuIGZ1bmN0aW9uKHgpe2lmKG5lKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3VlOyl0cnl7aWYobmU9MSxpZSYmKGxlPTImeFswXT9pZS5y'@;
put 'ZXR1cm46eFswXT9pZS50aHJvd3x8KChsZT1pZS5yZXR1cm4pJiZsZS5jYWxsKGllKSwwKTppZS5uZXh0KSYmIShsZT1sZS5jYWxsKGllLHhbMV0pKS5kb25lKXJldHVybiBsZTtzd2l0Y2goaWU9MCxsZSYmKHg9WzImeFswXSxsZS52YWx1ZV0pLHhbMF0pe2Nhc2UgMDpjYXNlIDE6bGU9eDti'@;
put 'cmVhaztjYXNlIDQ6cmV0dXJuIHVlLmxhYmVsKysse3ZhbHVlOnhbMV0sZG9uZTohMX07Y2FzZSA1OnVlLmxhYmVsKyssaWU9eFsxXSx4PVswXTtjb250aW51ZTtjYXNlIDc6eD11ZS5vcHMucG9wKCksdWUudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKGxlPShsZT11ZS50cnlz'@;
put 'KS5sZW5ndGg+MCYmbGVbbGUubGVuZ3RoLTFdKXx8NiE9PXhbMF0mJjIhPT14WzBdKSl7dWU9MDtjb250aW51ZX1pZigzPT09eFswXSYmKCFsZXx8eFsxXT5sZVswXSYmeFsxXTxsZVszXSkpe3VlLmxhYmVsPXhbMV07YnJlYWt9aWYoNj09PXhbMF0mJnVlLmxhYmVsPGxlWzFdKXt1ZS5sYWJl'@;
put 'bD1sZVsxXSxsZT14O2JyZWFrfWlmKGxlJiZ1ZS5sYWJlbDxsZVsyXSl7dWUubGFiZWw9bGVbMl0sdWUub3BzLnB1c2goeCk7YnJlYWt9bGVbMl0mJnVlLm9wcy5wb3AoKSx1ZS50cnlzLnBvcCgpO2NvbnRpbnVlfXg9dGUuY2FsbChxLHVlKX1jYXRjaChOKXt4PVs2LE5dLGllPTB9ZmluYWxs'@;
put 'eXtuZT1sZT0wfWlmKDUmeFswXSl0aHJvdyB4WzFdO3JldHVybnt2YWx1ZTp4WzBdP3hbMV06dm9pZCAwLGRvbmU6ITB9fShbWSxiXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEIuU2FzOVJlcXVlc3RDbGllbnQ9dm9pZCAwO3ZhciB6PUwo'@;
put 'ODIyNCksaj1MKDc4NTcpLFY9TCg5Nzc4KSxHPUwoNDU4OCksVz1MKDEzOTUpLFU9ZnVuY3Rpb24ocSl7ZnVuY3Rpb24gdGUobmUsaWUpe3ZhciBsZT1xLmNhbGwodGhpcyxuZSxpZSl8fHRoaXM7cmV0dXJuIGxlLmh0dHBDbGllbnQuZGVmYXVsdHMubWF4UmVkaXJlY3RzPTAsbGUuaHR0cENs'@;
put 'aWVudC5kZWZhdWx0cy52YWxpZGF0ZVN0YXR1cz1mdW5jdGlvbihkZSl7cmV0dXJuIGRlPj0yMDAmJmRlPDMwM30sei5kZWZhdWx0JiYoKDAsei5kZWZhdWx0KShsZS5odHRwQ2xpZW50KSxsZS5odHRwQ2xpZW50LmRlZmF1bHRzLmphcj1uZXcgai5Db29raWVKYXIpLGxlfXJldHVybiBKKHRl'@;
put 'LHEpLHRlLnByb3RvdHlwZS5sb2dpbj1mdW5jdGlvbihuZSxpZSxsZSl7cmV0dXJuIFIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGRlO3JldHVybiBFKHRoaXMsZnVuY3Rpb24odWUpe3N3aXRjaCh1ZS5sYWJlbCl7Y2FzZSAwOnJldHVybiBkZT0iL1VzZXIgRm9sZGVycy8i'@;
put 'LmNvbmNhdChuZSwiL015IEZvbGRlci9zYXNqcy9ydW5uZXIiKSx0aGlzLmh0dHBDbGllbnQuZGVmYXVsdHMuamFyPyh0aGlzLmh0dHBDbGllbnQuZGVmYXVsdHMuamFyLnJlbW92ZUFsbENvb2tpZXMoKSxbNCx0aGlzLmdldCgiIi5jb25jYXQobGUsIj9fcHJvZ3JhbT0iKS5jb25jYXQoZGUs'@;
put 'IiZfdXNlcm5hbWU9IikuY29uY2F0KG5lLCImX3Bhc3N3b3JkPSIpLmNvbmNhdChpZSksdm9pZCAwLCJ0ZXh0L3BsYWluIildKTpbMywyXTtjYXNlIDE6dWUuc2VudCgpLHVlLmxhYmVsPTI7Y2FzZSAyOnJldHVyblsyXX19KX0pfSx0ZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKG5lLGllLGxl'@;
put 'LGRlLHVlKXtyZXR1cm4gdm9pZCAwPT09bGUmJihsZT0iYXBwbGljYXRpb24vanNvbiIpLHZvaWQgMD09PWRlJiYoZGU9e30pLHZvaWQgMD09PXVlJiYodWU9ITEpLFIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGNlLFksYj10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24o'@;
put 'eCl7cmV0dXJuIGNlPUkoSSh7fSx0aGlzLmdldEhlYWRlcnMoaWUsbGUpKSxkZSksWT17aGVhZGVyczpjZSxyZXNwb25zZVR5cGU6InRleHQvcGxhaW4iPT09bGU/InRleHQiOiJqc29uIix3aXRoQ3JlZGVudGlhbHM6ITB9LCJ0ZXh0L3BsYWluIj09PWxlJiYoWS50cmFuc2Zvcm1SZXNwb25z'@;
put 'ZT12b2lkIDApLFsyLHRoaXMuaHR0cENsaWVudC5nZXQobmUsWSkudGhlbihmdW5jdGlvbihOKXtyZXR1cm4gMzAyPT09Ti5zdGF0dXM/Yi5nZXQoTi5oZWFkZXJzLmxvY2F0aW9uLGllLGxlKTooKDAsRy50aHJvd0lmRXJyb3IpKE4pLGIucGFyc2VSZXNwb25zZShOKSl9KS5jYXRjaChmdW5j'@;
put 'dGlvbihOKXtyZXR1cm4gUihiLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgRj10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oZyl7c3dpdGNoKGcubGFiZWwpe2Nhc2UgMDppZihOIGluc3RhbmNlb2YgVy5Kb2JFeGVjdXRpb25FcnJvcil0aHJvdyBOO3JldHVybls0LHRoaXMuaGFu'@;
put 'ZGxlRXJyb3IoTixmdW5jdGlvbigpe3JldHVybiBGLmdldChuZSxpZSxsZSxkZSkuY2F0Y2goZnVuY3Rpb24oQyl7dGhyb3coMCxWLnByZWZpeE1lc3NhZ2UpKEMsIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBoYW5kbGUgZXJyb3IgY2FsbGJhY2suICIpfSl9LHVlKS5jYXRjaChmdW5jdGlvbihD'@;
put 'KXt0aHJvdygwLFYucHJlZml4TWVzc2FnZSkoQywiRXJyb3Igd2hpbGUgaGFuZGxpbmcgZXJyb3IuICIpfSldO2Nhc2UgMTpyZXR1cm5bMixnLnNlbnQoKV19fSl9KX0pXX0pfSl9LHRlLnByb3RvdHlwZS5wb3N0PWZ1bmN0aW9uKG5lLGllLGxlLGRlLHVlKXtyZXR1cm4gdm9pZCAwPT09ZGUm'@;
put 'JihkZT0iYXBwbGljYXRpb24vanNvbiIpLHZvaWQgMD09PXVlJiYodWU9e30pLFIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGNlLFk9dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKGIpe3JldHVybiBjZT1JKEkoe30sdGhpcy5nZXRIZWFkZXJzKGxlLGRlKSksdWUpLFsy'@;
put 'LHRoaXMuaHR0cENsaWVudC5wb3N0KG5lLGllLHtoZWFkZXJzOmNlLHdpdGhDcmVkZW50aWFsczohMH0pLnRoZW4oZnVuY3Rpb24oeCl7cmV0dXJuIFIoWSx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihOKXtzd2l0Y2goTi5sYWJlbCl7Y2FzZSAwOnJl'@;
put 'dHVybiAzMDIhPT14LnN0YXR1cz9bMywyXTpbNCx0aGlzLmdldCh4LmhlYWRlcnMubG9jYXRpb24sdm9pZCAwLGRlLHVlKV07Y2FzZSAxOnJldHVyblsyLE4uc2VudCgpXTtjYXNlIDI6cmV0dXJuKDAsRy50aHJvd0lmRXJyb3IpKHgpLFsyLHRoaXMucGFyc2VSZXNwb25zZSh4KV19fSl9KX0p'@;
put 'LmNhdGNoKGZ1bmN0aW9uKHgpe3JldHVybiBSKFksdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBOPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihGKXtzd2l0Y2goRi5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMuaGFuZGxlRXJyb3IoeCxmdW5jdGlvbigpe3JldHVybiBOLnBv'@;
put 'c3QobmUsaWUsbGUsZGUsdWUpfSldO2Nhc2UgMTpyZXR1cm5bMixGLnNlbnQoKV19fSl9KX0pXX0pfSl9LHRlfShHLlJlcXVlc3RDbGllbnQpO0IuU2FzOVJlcXVlc3RDbGllbnQ9VX0sMzYwMjpmdW5jdGlvbihILEIsTCl7InVzZSBzdHJpY3QiO3ZhciBLLEo9dGhpcyYmdGhpcy5fX2V4dGVu'@;
put 'ZHN8fChLPWZ1bmN0aW9uKHosail7cmV0dXJuKEs9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKFYsRyl7Vi5fX3Byb3RvX189R318fGZ1bmN0aW9uKFYsRyl7Zm9yKHZhciBXIGluIEcpT2JqZWN0LnByb3RvdHlwZS5oYXNP'@;
put 'd25Qcm9wZXJ0eS5jYWxsKEcsVykmJihWW1ddPUdbV10pfSkoeixqKX0sZnVuY3Rpb24oeixqKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgaiYmbnVsbCE9PWopdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhqKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9y'@;
put 'IG9yIG51bGwiKTtmdW5jdGlvbiBWKCl7dGhpcy5jb25zdHJ1Y3Rvcj16fUsoeixqKSx6LnByb3RvdHlwZT1udWxsPT09aj9PYmplY3QuY3JlYXRlKGopOihWLnByb3RvdHlwZT1qLnByb3RvdHlwZSxuZXcgVil9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVl'@;
put 'OiEwfSksQi5TYXNqc1JlcXVlc3RDbGllbnQ9dm9pZCAwO3ZhciBJPUwoNDU4OCksUj1MKDU5MjgpLEU9ZnVuY3Rpb24oeil7ZnVuY3Rpb24gaigpe3ZhciBWPW51bGwhPT16JiZ6LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gVi5nZXRIZWFkZXJzPWZ1bmN0aW9uKEcsVyl7'@;
put 'dmFyIFUscT17fTtyZXR1cm4iYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiE9PVcmJihxWyJDb250ZW50LVR5cGUiXT1XKSxxLkFjY2VwdD0iYXBwbGljYXRpb24vanNvbiI9PT1XP1c6IiovKiIsR3x8dHlwZW9mIHdpbmRvdz4idSJ8fChHPW51bGwhPT0oVT1sb2NhbFN0b3Jh'@;
put 'Z2UuZ2V0SXRlbSgiYWNjZXNzVG9rZW4iKSkmJnZvaWQgMCE9PVU/VTp2b2lkIDApLEcmJihxLkF1dGhvcml6YXRpb249IkJlYXJlciAiLmNvbmNhdChHKSkscX0sVn1yZXR1cm4gSihqLHopLGoucHJvdG90eXBlLnBhcnNlUmVzcG9uc2U9ZnVuY3Rpb24oVil7dmFyIEcsVyxVLHE9Vj8uaGVh'@;
put 'ZGVycz9WLmhlYWRlcnMuZXRhZzoiIix0ZT17fTt0cnl7dGU9InN0cmluZyI9PXR5cGVvZiBWLmRhdGE/SlNPTi5wYXJzZShWLmRhdGEpOlYuZGF0YX1jYXRjaHtpZihWLmRhdGEuaW5jbHVkZXMoUi5TQVNKU19MT0dTX1NFUEFSQVRPUikpe3ZhciBuZT1WLmRhdGEuc3BsaXQoUi5TQVNKU19M'@;
put 'T0dTX1NFUEFSQVRPUik7dm9pZCAwIT09KEc9bmVbMF0pJiYodGU9RyksVz1uZVsxXSxVPW5lWzJdfWVsc2UgdGU9Vi5kYXRhfXZhciBpZT17cmVzdWx0OnRlLGxvZzpXLGV0YWc6cSxzdGF0dXM6Vi5zdGF0dXN9O3JldHVybiBVJiYoaWUucHJpbnRPdXRwdXQ9VSksaWV9LGp9KEkuUmVxdWVz'@;
put 'dENsaWVudCk7Qi5TYXNqc1JlcXVlc3RDbGllbnQ9RX0sNDcwOihILEIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNDY2NjooSCxCKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01v'@;
put 'ZHVsZSIse3ZhbHVlOiEwfSl9LDYxNzc6KEgsQik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw1NzY2OihILEIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJfX2VzTW9kdWxlIix7dmFsdWU6'@;
put 'ITB9KX0sNDk3NTooSCxCKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDIxNTooSCxCKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDQ3ODI6KEgs'@;
put 'Qik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw0MTY4OihILEIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sODUxNjooSCxCKT0+eyJ1c2Ugc3Ry'@;
put 'aWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDMxNTM6KEgsQik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw1ODQxOihILEIpPT57InVzZSBzdHJpY3QiO3ZhciBMLEo7'@;
put 'T2JqZWN0LmRlZmluZVByb3BlcnR5KEIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEIuTG9naW5NZWNoYW5pc209Qi5TQVNqc0NvbmZpZz12b2lkIDAsQi5TQVNqc0NvbmZpZz1mdW5jdGlvbigpe3RoaXMuc2VydmVyVXJsPSIiLHRoaXMucGF0aFNBU0pTPSIiLHRoaXMucGF0aFNBUzk9IiIs'@;
put 'dGhpcy5wYXRoU0FTVml5YT0iIix0aGlzLmFwcExvYz0iIix0aGlzLnNlcnZlclR5cGU9bnVsbCx0aGlzLmRlYnVnPSEwLHRoaXMuY29udGV4dE5hbWU9IiIsdGhpcy51c2VDb21wdXRlQXBpPW51bGwsdGhpcy5sb2dpbk1lY2hhbmlzbT1MLkRlZmF1bHQsdGhpcy5yZXF1ZXN0SGlzdG9yeUxp'@;
put 'bWl0PTEwfSwoSj1MPUIuTG9naW5NZWNoYW5pc218fChCLkxvZ2luTWVjaGFuaXNtPXt9KSkuRGVmYXVsdD0iRGVmYXVsdCIsSi5SZWRpcmVjdGVkPSJSZWRpcmVjdGVkIn0sMjQ5MzooSCxCKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3Zh'@;
put 'bHVlOiEwfSl9LDYwMzg6KEgsQik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw5NDkzOihILEIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sODY1'@;
put 'MDooSCxCKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDEyNDpmdW5jdGlvbihILEIpeyJ1c2Ugc3RyaWN0Ijt2YXIgTCxLPXRoaXMmJnRoaXMuX19leHRlbmRzfHwoTD1mdW5jdGlvbihJLFIpe3JldHVybihMPU9iamVj'@;
put 'dC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihFLHope0UuX19wcm90b19fPXp9fHxmdW5jdGlvbihFLHope2Zvcih2YXIgaiBpbiB6KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh6LGopJiYoRVtqXT16W2pdKX0p'@;
put 'KEksUil9LGZ1bmN0aW9uKEksUil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFImJm51bGwhPT1SKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoUikrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gRSgpe3RoaXMuY29uc3Ry'@;
put 'dWN0b3I9SX1MKEksUiksSS5wcm90b3R5cGU9bnVsbD09PVI/T2JqZWN0LmNyZWF0ZShSKTooRS5wcm90b3R5cGU9Ui5wcm90b3R5cGUsbmV3IEUpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KEIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEIuQXV0aG9yaXplRXJyb3I9dm9pZCAwO3ZhciBK'@;
put 'PWZ1bmN0aW9uKEkpe2Z1bmN0aW9uIFIoRSx6KXt2YXIgaj1JLmNhbGwodGhpcyxFKXx8dGhpcztyZXR1cm4gai5tZXNzYWdlPUUsai5jb25maXJtVXJsPXosai5uYW1lPSJBdXRob3JpemVFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKGosUi5wcm90b3R5cGUpLGp9cmV0dXJuIEsoUixJ'@;
put 'KSxSfShFcnJvcik7Qi5BdXRob3JpemVFcnJvcj1KfSw5NDY1OmZ1bmN0aW9uKEgsQil7InVzZSBzdHJpY3QiO3ZhciBMLEs9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChMPWZ1bmN0aW9uKEksUil7cmV0dXJuKEw9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNl'@;
put 'b2YgQXJyYXkmJmZ1bmN0aW9uKEUseil7RS5fX3Byb3RvX189en18fGZ1bmN0aW9uKEUseil7Zm9yKHZhciBqIGluIHopT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHosaikmJihFW2pdPXpbal0pfSkoSSxSKX0sZnVuY3Rpb24oSSxSKXtpZigiZnVuY3Rpb24iIT10eXBl'@;
put 'b2YgUiYmbnVsbCE9PVIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhSKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBFKCl7dGhpcy5jb25zdHJ1Y3Rvcj1JfUwoSSxSKSxJLnByb3RvdHlwZT1udWxsPT09Uj9PYmpl'@;
put 'Y3QuY3JlYXRlKFIpOihFLnByb3RvdHlwZT1SLnByb3RvdHlwZSxuZXcgRSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQi5DZXJ0aWZpY2F0ZUVycm9yPXZvaWQgMDt2YXIgSj1mdW5jdGlvbihJKXtmdW5jdGlvbiBSKEUpe3ZhciB6PUkuY2Fs'@;
put 'bCh0aGlzLCIiLmNvbmNhdChFLCJcblBsZWFzZSB2aXNpdCB0aGUgbGluayBiZWxvdyBmb3IgZnVydGhlciBpbmZvcm1hdGlvbiBvbiB0aGlzIGlzc3VlOlxuLSAiKS5jb25jYXQoImh0dHBzOi8vZ2l0aHViLmNvbS9zYXNqcy9jbGkvaXNzdWVzLzExODEjaXNzdWVjb21tZW50LTEwOTA2Mzg1'@;
put 'ODQiLCJcbiIpKXx8dGhpcztyZXR1cm4gei5uYW1lPSJDZXJ0aWZpY2F0ZUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YoeixSLnByb3RvdHlwZSksen1yZXR1cm4gSyhSLEkpLFJ9KEVycm9yKTtCLkNlcnRpZmljYXRlRXJyb3I9Sn0sNTI2NzpmdW5jdGlvbihILEIpeyJ1c2Ugc3RyaWN0'@;
put 'Ijt2YXIgTCxLPXRoaXMmJnRoaXMuX19leHRlbmRzfHwoTD1mdW5jdGlvbihJLFIpe3JldHVybihMPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihFLHope0UuX19wcm90b19fPXp9fHxmdW5jdGlvbihFLHope2Zvcih2YXIg'@;
put 'aiBpbiB6KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh6LGopJiYoRVtqXT16W2pdKX0pKEksUil9LGZ1bmN0aW9uKEksUil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFImJm51bGwhPT1SKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJp'@;
put 'bmcoUikrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gRSgpe3RoaXMuY29uc3RydWN0b3I9SX1MKEksUiksSS5wcm90b3R5cGU9bnVsbD09PVI/T2JqZWN0LmNyZWF0ZShSKTooRS5wcm90b3R5cGU9Ui5wcm90b3R5cGUsbmV3IEUpfSk7T2JqZWN0LmRlZmluZVBy'@;
put 'b3BlcnR5KEIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEIuQ29tcHV0ZUpvYkV4ZWN1dGlvbkVycm9yPXZvaWQgMDt2YXIgSj1mdW5jdGlvbihJKXtmdW5jdGlvbiBSKEUseil7dmFyIGo9SS5jYWxsKHRoaXMsIkVycm9yOiBKb2IgZXhlY3V0aW9uIGZhaWxlZCIpfHx0aGlzO3JldHVybiBq'@;
put 'LmpvYj1FLGoubG9nPXosai5uYW1lPSJDb21wdXRlSm9iRXhlY3V0aW9uRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZihqLFIucHJvdG90eXBlKSxqfXJldHVybiBLKFIsSSksUn0oRXJyb3IpO0IuQ29tcHV0ZUpvYkV4ZWN1dGlvbkVycm9yPUp9LDkyMzI6KEgsQik9PnsidXNlIHN0cmlj'@;
put 'dCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEIuRXJyb3JSZXNwb25zZT12b2lkIDAsQi5FcnJvclJlc3BvbnNlPWZ1bmN0aW9uKEssSixJKXt2YXIgUj1KO2lmKCJvYmplY3QiIT10eXBlb2YgSil0cnl7Uj1KU09OLnBhcnNlKEopfWNhdGNoe0k9'@;
put 'SixSPSIifXRoaXMuZXJyb3I9e21lc3NhZ2U6SyxkZXRhaWxzOlIscmF3Okl9fX0sNTEwOTpmdW5jdGlvbihILEIpeyJ1c2Ugc3RyaWN0Ijt2YXIgTCxLPXRoaXMmJnRoaXMuX19leHRlbmRzfHwoTD1mdW5jdGlvbihJLFIpe3JldHVybihMPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJv'@;
put 'dG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihFLHope0UuX19wcm90b19fPXp9fHxmdW5jdGlvbihFLHope2Zvcih2YXIgaiBpbiB6KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh6LGopJiYoRVtqXT16W2pdKX0pKEksUil9LGZ1bmN0aW9uKEksUil7aWYo'@;
put 'ImZ1bmN0aW9uIiE9dHlwZW9mIFImJm51bGwhPT1SKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoUikrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gRSgpe3RoaXMuY29uc3RydWN0b3I9SX1MKEksUiksSS5wcm90b3R5'@;
put 'cGU9bnVsbD09PVI/T2JqZWN0LmNyZWF0ZShSKTooRS5wcm90b3R5cGU9Ui5wcm90b3R5cGUsbmV3IEUpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KEIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEIuSW50ZXJuYWxTZXJ2ZXJFcnJvcj12b2lkIDA7dmFyIEo9ZnVuY3Rpb24oSSl7ZnVuY3Rp'@;
put 'b24gUigpe3ZhciBFPUkuY2FsbCh0aGlzLCJFcnJvcjogSW50ZXJuYWwgc2VydmVyIGVycm9yLiIpfHx0aGlzO3JldHVybiBFLm5hbWU9IkludGVybmFsU2VydmVyRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZihFLFIucHJvdG90eXBlKSxFfXJldHVybiBLKFIsSSksUn0oRXJyb3IpO0Iu'@;
put 'SW50ZXJuYWxTZXJ2ZXJFcnJvcj1KfSw1NTE4OmZ1bmN0aW9uKEgsQil7InVzZSBzdHJpY3QiO3ZhciBMLEs9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChMPWZ1bmN0aW9uKEksUil7cmV0dXJuKEw9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkm'@;
put 'JmZ1bmN0aW9uKEUseil7RS5fX3Byb3RvX189en18fGZ1bmN0aW9uKEUseil7Zm9yKHZhciBqIGluIHopT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHosaikmJihFW2pdPXpbal0pfSkoSSxSKX0sZnVuY3Rpb24oSSxSKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgUiYmbnVs'@;
put 'bCE9PVIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhSKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBFKCl7dGhpcy5jb25zdHJ1Y3Rvcj1JfUwoSSxSKSxJLnByb3RvdHlwZT1udWxsPT09Uj9PYmplY3QuY3JlYXRl'@;
put 'KFIpOihFLnByb3RvdHlwZT1SLnByb3RvdHlwZSxuZXcgRSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQi5JbnZhbGlkSnNvbkVycm9yPXZvaWQgMDt2YXIgSj1mdW5jdGlvbihJKXtmdW5jdGlvbiBSKCl7dmFyIEU9SS5jYWxsKHRoaXMsIkVy'@;
put 'cm9yOiBpbnZhbGlkIEpzb24gc3RyaW5nIil8fHRoaXM7cmV0dXJuIEUubmFtZT0iSW52YWxpZEpzb25FcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKEUsUi5wcm90b3R5cGUpLEV9cmV0dXJuIEsoUixJKSxSfShFcnJvcik7Qi5JbnZhbGlkSnNvbkVycm9yPUp9LDEwMDU6ZnVuY3Rpb24o'@;
put 'SCxCKXsidXNlIHN0cmljdCI7dmFyIEwsSz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KEw9ZnVuY3Rpb24oSSxSKXtyZXR1cm4oTD1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oRSx6KXtFLl9fcHJvdG9fXz16fXx8ZnVuY3Rp'@;
put 'b24oRSx6KXtmb3IodmFyIGogaW4geilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeixqKSYmKEVbal09eltqXSl9KShJLFIpfSxmdW5jdGlvbihJLFIpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBSJiZudWxsIT09Uil0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRl'@;
put 'bmRzIHZhbHVlICIrU3RyaW5nKFIpKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIEUoKXt0aGlzLmNvbnN0cnVjdG9yPUl9TChJLFIpLEkucHJvdG90eXBlPW51bGw9PT1SP09iamVjdC5jcmVhdGUoUik6KEUucHJvdG90eXBlPVIucHJvdG90eXBlLG5ldyBFKX0p'@;
put 'O09iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxCLkludmFsaWRTQVNqc0NzcmZFcnJvcj12b2lkIDA7dmFyIEo9ZnVuY3Rpb24oSSl7ZnVuY3Rpb24gUigpe3ZhciBFPXRoaXM7cmV0dXJuKEU9SS5jYWxsKHRoaXMsIkF1dGggZXJyb3I6ICIuY29uY2F0'@;
put 'KCJJbnZhbGlkIENTUkYgdG9rZW4hIikpfHx0aGlzKS5uYW1lPSJJbnZhbGlkU0FTanNDc3JmRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZihFLFIucHJvdG90eXBlKSxFfXJldHVybiBLKFIsSSksUn0oRXJyb3IpO0IuSW52YWxpZFNBU2pzQ3NyZkVycm9yPUp9LDg1MzE6ZnVuY3Rpb24o'@;
put 'SCxCKXsidXNlIHN0cmljdCI7dmFyIEwsSz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KEw9ZnVuY3Rpb24oSSxSKXtyZXR1cm4oTD1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oRSx6KXtFLl9fcHJvdG9fXz16fXx8ZnVuY3Rp'@;
put 'b24oRSx6KXtmb3IodmFyIGogaW4geilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeixqKSYmKEVbal09eltqXSl9KShJLFIpfSxmdW5jdGlvbihJLFIpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBSJiZudWxsIT09Uil0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRl'@;
put 'bmRzIHZhbHVlICIrU3RyaW5nKFIpKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIEUoKXt0aGlzLmNvbnN0cnVjdG9yPUl9TChJLFIpLEkucHJvdG90eXBlPW51bGw9PT1SP09iamVjdC5jcmVhdGUoUik6KEUucHJvdG90eXBlPVIucHJvdG90eXBlLG5ldyBFKX0p'@;
put 'O09iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxCLkpvYkV4ZWN1dGlvbkVycm9yPXZvaWQgMDt2YXIgSj1mdW5jdGlvbihJKXtmdW5jdGlvbiBSKEUseixqKXt2YXIgVj1JLmNhbGwodGhpcywiRXJyb3IgQ29kZSAiLmNvbmNhdChFLCI6ICIpLmNvbmNh'@;
put 'dCh6KSl8fHRoaXM7cmV0dXJuIFYuZXJyb3JDb2RlPUUsVi5lcnJvck1lc3NhZ2U9eixWLnJlc3VsdD1qLFYubmFtZT0iSm9iRXhlY3V0aW9uRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZihWLFIucHJvdG90eXBlKSxWfXJldHVybiBLKFIsSSksUn0oRXJyb3IpO0IuSm9iRXhlY3V0aW9u'@;
put 'RXJyb3I9Sn0sOTA3OTpmdW5jdGlvbihILEIpeyJ1c2Ugc3RyaWN0Ijt2YXIgTCxLPXRoaXMmJnRoaXMuX19leHRlbmRzfHwoTD1mdW5jdGlvbihJLFIpe3JldHVybihMPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihFLHop'@;
put 'e0UuX19wcm90b19fPXp9fHxmdW5jdGlvbihFLHope2Zvcih2YXIgaiBpbiB6KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh6LGopJiYoRVtqXT16W2pdKX0pKEksUil9LGZ1bmN0aW9uKEksUil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFImJm51bGwhPT1SKXRocm93IG5l'@;
put 'dyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoUikrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gRSgpe3RoaXMuY29uc3RydWN0b3I9SX1MKEksUiksSS5wcm90b3R5cGU9bnVsbD09PVI/T2JqZWN0LmNyZWF0ZShSKTooRS5wcm90b3R5'@;
put 'cGU9Ui5wcm90b3R5cGUsbmV3IEUpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KEIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEIuSm9iU3RhdGVQb2xsRXJyb3I9dm9pZCAwO3ZhciBKPWZ1bmN0aW9uKEkpe2Z1bmN0aW9uIFIoRSx6KXt2YXIgaj1JLmNhbGwodGhpcywiRXJyb3Igd2hpbGUg'@;
put 'cG9sbGluZyBqb2Igc3RhdGUgZm9yIGpvYiAiLmNvbmNhdChFLCI6ICIpLmNvbmNhdCh6Lm1lc3NhZ2V8fHopKXx8dGhpcztyZXR1cm4gai5vcmlnaW5hbEVycm9yPXosai5uYW1lPSJKb2JTdGF0ZVBvbGxFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKGosUi5wcm90b3R5cGUpLGp9cmV0'@;
put 'dXJuIEsoUixJKSxSfShFcnJvcik7Qi5Kb2JTdGF0ZVBvbGxFcnJvcj1KfSwzMDk2OmZ1bmN0aW9uKEgsQil7InVzZSBzdHJpY3QiO3ZhciBMLEs9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChMPWZ1bmN0aW9uKEksUil7cmV0dXJuKEw9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19f'@;
put 'OltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKEUseil7RS5fX3Byb3RvX189en18fGZ1bmN0aW9uKEUseil7Zm9yKHZhciBqIGluIHopT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHosaikmJihFW2pdPXpbal0pfSkoSSxSKX0sZnVuY3Rpb24oSSxSKXtpZigiZnVu'@;
put 'Y3Rpb24iIT10eXBlb2YgUiYmbnVsbCE9PVIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhSKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBFKCl7dGhpcy5jb25zdHJ1Y3Rvcj1JfUwoSSxSKSxJLnByb3RvdHlwZT1u'@;
put 'dWxsPT09Uj9PYmplY3QuY3JlYXRlKFIpOihFLnByb3RvdHlwZT1SLnByb3RvdHlwZSxuZXcgRSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQi5Kc29uUGFyc2VBcnJheUVycm9yPXZvaWQgMDt2YXIgSj1mdW5jdGlvbihJKXtmdW5jdGlvbiBS'@;
put 'KCl7dmFyIEU9SS5jYWxsKHRoaXMsIkNhbiBub3QgcGFyc2UgYXJyYXkgb2JqZWN0IHRvIGpzb24uIil8fHRoaXM7cmV0dXJuIEUubmFtZT0iSnNvblBhcnNlQXJyYXlFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKEUsUi5wcm90b3R5cGUpLEV9cmV0dXJuIEsoUixJKSxSfShFcnJvcik7'@;
put 'Qi5Kc29uUGFyc2VBcnJheUVycm9yPUp9LDY3NDM6ZnVuY3Rpb24oSCxCKXsidXNlIHN0cmljdCI7dmFyIEwsSz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KEw9ZnVuY3Rpb24oSSxSKXtyZXR1cm4oTD1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJh'@;
put 'eSYmZnVuY3Rpb24oRSx6KXtFLl9fcHJvdG9fXz16fXx8ZnVuY3Rpb24oRSx6KXtmb3IodmFyIGogaW4geilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeixqKSYmKEVbal09eltqXSl9KShJLFIpfSxmdW5jdGlvbihJLFIpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBSJiZu'@;
put 'dWxsIT09Uil0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKFIpKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIEUoKXt0aGlzLmNvbnN0cnVjdG9yPUl9TChJLFIpLEkucHJvdG90eXBlPW51bGw9PT1SP09iamVjdC5jcmVh'@;
put 'dGUoUik6KEUucHJvdG90eXBlPVIucHJvdG90eXBlLG5ldyBFKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxCLkxvZ2luUmVxdWlyZWRFcnJvcj12b2lkIDA7dmFyIEo9ZnVuY3Rpb24oSSl7ZnVuY3Rpb24gUihFKXt2YXIgej10aGlzLGo9RT9K'@;
put 'U09OLnN0cmluZ2lmeShFLG51bGwsMik6IllvdSBtdXN0IGJlIGxvZ2dlZCBpbiB0byBhY2Nlc3MgdGhpcyByZXNvdXJjZSI7cmV0dXJuKHo9SS5jYWxsKHRoaXMsIkF1dGggZXJyb3I6ICIuY29uY2F0KGopKXx8dGhpcykubmFtZT0iTG9naW5SZXF1aXJlZEVycm9yIixPYmplY3Quc2V0UHJv'@;
put 'dG90eXBlT2YoeixSLnByb3RvdHlwZSksen1yZXR1cm4gSyhSLEkpLFJ9KEVycm9yKTtCLkxvZ2luUmVxdWlyZWRFcnJvcj1KfSw3ODY0OmZ1bmN0aW9uKEgsQil7InVzZSBzdHJpY3QiO3ZhciBMLEs9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChMPWZ1bmN0aW9uKEksUil7cmV0dXJuKEw9T2Jq'@;
put 'ZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKEUseil7RS5fX3Byb3RvX189en18fGZ1bmN0aW9uKEUseil7Zm9yKHZhciBqIGluIHopT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHosaikmJihFW2pdPXpbal0p'@;
put 'fSkoSSxSKX0sZnVuY3Rpb24oSSxSKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgUiYmbnVsbCE9PVIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhSKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBFKCl7dGhpcy5jb25z'@;
put 'dHJ1Y3Rvcj1JfUwoSSxSKSxJLnByb3RvdHlwZT1udWxsPT09Uj9PYmplY3QuY3JlYXRlKFIpOihFLnByb3RvdHlwZT1SLnByb3RvdHlwZSxuZXcgRSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQi5Ob1Nlc3Npb25TdGF0ZUVycm9yPXZvaWQg'@;
put 'MDt2YXIgSj1mdW5jdGlvbihJKXtmdW5jdGlvbiBSKEUseixqKXt2YXIgVj1JLmNhbGwodGhpcywiQ291bGQgbm90IGdldCBzZXNzaW9uIHN0YXRlLiBTZXJ2ZXIgcmVzcG9uZGVkIHdpdGggIi5jb25jYXQoRSwiIHdoaWxzdCBjaGVja2luZyBzdGF0ZTogIikuY29uY2F0KHopKXx8dGhpczty'@;
put 'ZXR1cm4gVi5zZXJ2ZXJSZXNwb25zZVN0YXR1cz1FLFYuc2Vzc2lvblN0YXRlVXJsPXosVi5sb2dVcmw9aixWLm5hbWU9Ik5vU2Vzc2lvblN0YXR1cyIsT2JqZWN0LnNldFByb3RvdHlwZU9mKFYsUi5wcm90b3R5cGUpLFZ9cmV0dXJuIEsoUixJKSxSfShFcnJvcik7Qi5Ob1Nlc3Npb25TdGF0'@;
put 'ZUVycm9yPUp9LDk1Nzc6ZnVuY3Rpb24oSCxCKXsidXNlIHN0cmljdCI7dmFyIEwsSz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KEw9ZnVuY3Rpb24oSSxSKXtyZXR1cm4oTD1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oRSx6'@;
put 'KXtFLl9fcHJvdG9fXz16fXx8ZnVuY3Rpb24oRSx6KXtmb3IodmFyIGogaW4geilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeixqKSYmKEVbal09eltqXSl9KShJLFIpfSxmdW5jdGlvbihJLFIpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBSJiZudWxsIT09Uil0aHJvdyBu'@;
put 'ZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKFIpKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIEUoKXt0aGlzLmNvbnN0cnVjdG9yPUl9TChJLFIpLEkucHJvdG90eXBlPW51bGw9PT1SP09iamVjdC5jcmVhdGUoUik6KEUucHJvdG90'@;
put 'eXBlPVIucHJvdG90eXBlLG5ldyBFKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxCLk5vdEZvdW5kRXJyb3I9dm9pZCAwO3ZhciBKPWZ1bmN0aW9uKEkpe2Z1bmN0aW9uIFIoRSl7dmFyIHo9SS5jYWxsKHRoaXMsIkVycm9yOiBSZXNvdXJjZSBh'@;
put 'dCAiLmNvbmNhdChFLCIgd2FzIG5vdCBmb3VuZCIpKXx8dGhpcztyZXR1cm4gei51cmw9RSx6Lm5hbWU9Ik5vdEZvdW5kRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih6LFIucHJvdG90eXBlKSx6fXJldHVybiBLKFIsSSksUn0oRXJyb3IpO0IuTm90Rm91bmRFcnJvcj1KfSw5Mjc5OmZ1'@;
put 'bmN0aW9uKEgsQixMKXsidXNlIHN0cmljdCI7dmFyIEssSj10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KEs9ZnVuY3Rpb24oRSx6KXtyZXR1cm4oSz1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oaixWKXtqLl9fcHJvdG9fXz1W'@;
put 'fXx8ZnVuY3Rpb24oaixWKXtmb3IodmFyIEcgaW4gVilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVixHKSYmKGpbR109VltHXSl9KShFLHopfSxmdW5jdGlvbihFLHope2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB6JiZudWxsIT09eil0aHJvdyBuZXcgVHlwZUVycm9yKCJD'@;
put 'bGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKHopKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIGooKXt0aGlzLmNvbnN0cnVjdG9yPUV9SyhFLHopLEUucHJvdG90eXBlPW51bGw9PT16P09iamVjdC5jcmVhdGUoeik6KGoucHJvdG90eXBlPXoucHJvdG90eXBl'@;
put 'LG5ldyBqKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxCLlJvb3RGb2xkZXJOb3RGb3VuZEVycm9yPXZvaWQgMDt2YXIgST1MKDY3OTkpLFI9ZnVuY3Rpb24oRSl7ZnVuY3Rpb24geihqLFYsRyl7dmFyIFc9dGhpcyxVPSJSb290IGZvbGRlciAi'@;
put 'LmNvbmNhdChqLCIgd2FzIG5vdCBmb3VuZC4iKSsiXG5QbGVhc2UgY2hlY2sgIi5jb25jYXQoViwiL1NBU0RyaXZlLiIpKyJcbklmIHRoZSBmb2xkZXIgRE9FUyBleGlzdCB0aGVuIGl0IGlzIGxpa2VseSBhIHBlcm1pc3Npb24gcHJvYmxlbS5cbiI7aWYoRyl7dmFyIHE9KDAsSS5kZWNvZGVU'@;
put 'b2tlbikoRykuc2NvcGU7VSs9IllvdXIgYWNjZXNzIHRva2VuIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgc2NvcGVzOlxuIisocT1xLm1hcChmdW5jdGlvbih0ZSl7cmV0dXJuIiogIit0ZX0pKS5qb2luKCJcbiIpfXJldHVybihXPUUuY2FsbCh0aGlzLFUpfHx0aGlzKS5uYW1lPSJSb290Rm9s'@;
put 'ZGVyTm90Rm91bmRFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKFcsei5wcm90b3R5cGUpLFd9cmV0dXJuIEooeixFKSx6fShFcnJvcik7Qi5Sb290Rm9sZGVyTm90Rm91bmRFcnJvcj1SfSw5NTI2OmZ1bmN0aW9uKEgsQil7InVzZSBzdHJpY3QiO3ZhciBMLEs9dGhpcyYmdGhpcy5fX2V4'@;
put 'dGVuZHN8fChMPWZ1bmN0aW9uKEksUil7cmV0dXJuKEw9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKEUseil7RS5fX3Byb3RvX189en18fGZ1bmN0aW9uKEUseil7Zm9yKHZhciBqIGluIHopT2JqZWN0LnByb3RvdHlwZS5o'@;
put 'YXNPd25Qcm9wZXJ0eS5jYWxsKHosaikmJihFW2pdPXpbal0pfSkoSSxSKX0sZnVuY3Rpb24oSSxSKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgUiYmbnVsbCE9PVIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhSKSsiIGlzIG5vdCBhIGNvbnN0cnVj'@;
put 'dG9yIG9yIG51bGwiKTtmdW5jdGlvbiBFKCl7dGhpcy5jb25zdHJ1Y3Rvcj1JfUwoSSxSKSxJLnByb3RvdHlwZT1udWxsPT09Uj9PYmplY3QuY3JlYXRlKFIpOihFLnByb3RvdHlwZT1SLnByb3RvdHlwZSxuZXcgRSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3Zh'@;
put 'bHVlOiEwfSksQi5TQVM5QXV0aEVycm9yPXZvaWQgMDt2YXIgSj1mdW5jdGlvbihJKXtmdW5jdGlvbiBSKCl7dmFyIEU9SS5jYWxsKHRoaXMsIlRoZSBjcmVkZW50aWFscyB5b3UgcHJvdmlkZWQgY2Fubm90IGJlIGF1dGhlbnRpY2F0ZWQuIFBsZWFzZSBwcm92aWRlIGEgdmFsaWQgc2V0IG9m'@;
put 'IGNyZWRlbnRpYWxzLiIpfHx0aGlzO3JldHVybiBFLm5hbWU9IkF1dGhvcml6ZUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YoRSxSLnByb3RvdHlwZSksRX1yZXR1cm4gSyhSLEkpLFJ9KEVycm9yKTtCLlNBUzlBdXRoRXJyb3I9Sn0sODg3NTpmdW5jdGlvbihILEIpeyJ1c2Ugc3RyaWN0'@;
put 'Ijt2YXIgTCxLPXRoaXMmJnRoaXMuX19leHRlbmRzfHwoTD1mdW5jdGlvbihJLFIpe3JldHVybihMPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihFLHope0UuX19wcm90b19fPXp9fHxmdW5jdGlvbihFLHope2Zvcih2YXIg'@;
put 'aiBpbiB6KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh6LGopJiYoRVtqXT16W2pdKX0pKEksUil9LGZ1bmN0aW9uKEksUil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFImJm51bGwhPT1SKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJp'@;
put 'bmcoUikrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gRSgpe3RoaXMuY29uc3RydWN0b3I9SX1MKEksUiksSS5wcm90b3R5cGU9bnVsbD09PVI/T2JqZWN0LmNyZWF0ZShSKTooRS5wcm90b3R5cGU9Ui5wcm90b3R5cGUsbmV3IEUpfSk7T2JqZWN0LmRlZmluZVBy'@;
put 'b3BlcnR5KEIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEIuV2Vib3V0UmVzcG9uc2VFcnJvcj12b2lkIDA7dmFyIEo9ZnVuY3Rpb24oSSl7ZnVuY3Rpb24gUihFKXt2YXIgej1JLmNhbGwodGhpcywiRXJyb3I6IGVycm9yIHdoaWxlIHBhcnNpbmcgcmVzcG9uc2UgZnJvbSAiLmNvbmNhdChF'@;
put 'KSl8fHRoaXM7cmV0dXJuIHoudXJsPUUsei5uYW1lPSJXZWJvdXRSZXNwb25zZUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YoeixSLnByb3RvdHlwZSksen1yZXR1cm4gSyhSLEkpLFJ9KEVycm9yKTtCLldlYm91dFJlc3BvbnNlRXJyb3I9Sn0sMTM5NTpmdW5jdGlvbihILEIsTCl7InVz'@;
put 'ZSBzdHJpY3QiO3ZhciBLPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihJLFIsRSx6KXt2b2lkIDA9PT16JiYoej1FKTt2YXIgaj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFIsRSk7aiYmISgiZ2V0ImluIGo/IVIuX19lc01vZHVs'@;
put 'ZTpqLndyaXRhYmxlfHxqLmNvbmZpZ3VyYWJsZSl8fChqPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBSW0VdfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJLHosail9OmZ1bmN0aW9uKEksUixFLHope3ZvaWQgMD09PXomJih6PUUpLElbel09UltFXX0pLEo9dGhpcyYm'@;
put 'dGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKEksUil7Zm9yKHZhciBFIGluIEkpImRlZmF1bHQiPT09RXx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFIsRSl8fEsoUixJLEUpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSks'@;
put 'SihMKDEyNCksQiksSihMKDk0NjUpLEIpLEooTCg1MjY3KSxCKSxKKEwoOTIzMiksQiksSihMKDUxMDkpLEIpLEooTCg1NTE4KSxCKSxKKEwoODUzMSksQiksSihMKDkwNzkpLEIpLEooTCgzMDk2KSxCKSxKKEwoNjc0MyksQiksSihMKDc4NjQpLEIpLEooTCg5NTc3KSxCKSxKKEwoOTI3OSks'@;
put 'QiksSihMKDg4NzUpLEIpfSwxMjMwOmZ1bmN0aW9uKEgsQixMKXsidXNlIHN0cmljdCI7dmFyIEs9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKEksUixFLHope3ZvaWQgMD09PXomJih6PUUpO3ZhciBqPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURl'@;
put 'c2NyaXB0b3IoUixFKTtqJiYhKCJnZXQiaW4gaj8hUi5fX2VzTW9kdWxlOmoud3JpdGFibGV8fGouY29uZmlndXJhYmxlKXx8KGo9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFJbRV19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEkseixqKX06ZnVuY3Rpb24oSSxSLEUs'@;
put 'eil7dm9pZCAwPT09eiYmKHo9RSksSVt6XT1SW0VdfSksSj10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oSSxSKXtmb3IodmFyIEUgaW4gSSkiZGVmYXVsdCI9PT1FfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUixFKXx8SyhSLEksRSl9O09iamVjdC5k'@;
put 'ZWZpbmVQcm9wZXJ0eShCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKKEwoNDcwKSxCKSxKKEwoNDY2NiksQiksSihMKDQ5NzUpLEIpLEooTCg1NzY2KSxCKSxKKEwoMjE1KSxCKSxKKEwoNDc4MiksQiksSihMKDQxNjgpLEIpLEooTCg4NTE2KSxCKSxKKEwoNTg0MSksQiksSihMKDI0OTMp'@;
put 'LEIpLEooTCg2MDM4KSxCKSxKKEwoOTQ5MyksQiksSihMKDMxNTMpLEIpLEooTCg4NjUwKSxCKSxKKEwoNjE3NyksQil9LDMzMDI6ZnVuY3Rpb24oSCxCKXsidXNlIHN0cmljdCI7dmFyIEw9dGhpcyYmdGhpcy5fX2Fzc2lnbnx8ZnVuY3Rpb24oKXtyZXR1cm4gTD1PYmplY3QuYXNzaWdufHxm'@;
put 'dW5jdGlvbihJKXtmb3IodmFyIFIsRT0xLHo9YXJndW1lbnRzLmxlbmd0aDtFPHo7RSsrKWZvcih2YXIgaiBpbiBSPWFyZ3VtZW50c1tFXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUixqKSYmKElbal09UltqXSk7cmV0dXJuIEl9LEwuYXBwbHkodGhpcyxhcmd1bWVu'@;
put 'dHMpfSxLPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihJLFIsRSx6KXtyZXR1cm4gbmV3KEV8fChFPVByb21pc2UpKShmdW5jdGlvbihqLFYpe2Z1bmN0aW9uIEcocSl7dHJ5e1Uoei5uZXh0KHEpKX1jYXRjaCh0ZSl7Vih0ZSl9fWZ1bmN0aW9uIFcocSl7dHJ5e1Uoei50aHJvdyhx'@;
put 'KSl9Y2F0Y2godGUpe1YodGUpfX1mdW5jdGlvbiBVKHEpe3ZhciB0ZTtxLmRvbmU/aihxLnZhbHVlKToodGU9cS52YWx1ZSx0ZSBpbnN0YW5jZW9mIEU/dGU6bmV3IEUoZnVuY3Rpb24obmUpe25lKHRlKX0pKS50aGVuKEcsVyl9VSgoej16LmFwcGx5KEksUnx8W10pKS5uZXh0KCkpfSl9LEo9'@;
put 'dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oSSxSKXt2YXIgRSx6LGosVixHPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJmpbMF0pdGhyb3cgalsxXTtyZXR1cm4galsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBWPXtuZXh0OlcoMCksdGhyb3c6VygxKSxyZXR1cm46'@;
put 'VygyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKFZbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksVjtmdW5jdGlvbiBXKFUpe3JldHVybiBmdW5jdGlvbihxKXtyZXR1cm4gZnVuY3Rpb24odGUpe2lmKEUpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJh'@;
put 'dG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7RzspdHJ5e2lmKEU9MSx6JiYoaj0yJnRlWzBdP3oucmV0dXJuOnRlWzBdP3oudGhyb3d8fCgoaj16LnJldHVybikmJmouY2FsbCh6KSwwKTp6Lm5leHQpJiYhKGo9ai5jYWxsKHosdGVbMV0pKS5kb25lKXJldHVybiBqO3N3aXRjaCh6'@;
put 'PTAsaiYmKHRlPVsyJnRlWzBdLGoudmFsdWVdKSx0ZVswXSl7Y2FzZSAwOmNhc2UgMTpqPXRlO2JyZWFrO2Nhc2UgNDpyZXR1cm4gRy5sYWJlbCsrLHt2YWx1ZTp0ZVsxXSxkb25lOiExfTtjYXNlIDU6Ry5sYWJlbCsrLHo9dGVbMV0sdGU9WzBdO2NvbnRpbnVlO2Nhc2UgNzp0ZT1HLm9wcy5w'@;
put 'b3AoKSxHLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChqPShqPUcudHJ5cykubGVuZ3RoPjAmJmpbai5sZW5ndGgtMV0pfHw2IT09dGVbMF0mJjIhPT10ZVswXSkpe0c9MDtjb250aW51ZX1pZigzPT09dGVbMF0mJighanx8dGVbMV0+alswXSYmdGVbMV08alszXSkpe0cubGFi'@;
put 'ZWw9dGVbMV07YnJlYWt9aWYoNj09PXRlWzBdJiZHLmxhYmVsPGpbMV0pe0cubGFiZWw9alsxXSxqPXRlO2JyZWFrfWlmKGomJkcubGFiZWw8alsyXSl7Ry5sYWJlbD1qWzJdLEcub3BzLnB1c2godGUpO2JyZWFrfWpbMl0mJkcub3BzLnBvcCgpLEcudHJ5cy5wb3AoKTtjb250aW51ZX10ZT1S'@;
put 'LmNhbGwoSSxHKX1jYXRjaChuZSl7dGU9WzYsbmVdLHo9MH1maW5hbGx5e0U9aj0wfWlmKDUmdGVbMF0pdGhyb3cgdGVbMV07cmV0dXJue3ZhbHVlOnRlWzBdP3RlWzFdOnZvaWQgMCxkb25lOiEwfX0oW1UscV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJfX2VzTW9kdWxlIix7dmFs'@;
put 'dWU6ITB9KSxCLmFwcGVuZEV4dHJhUmVzcG9uc2VBdHRyaWJ1dGVzPXZvaWQgMCxCLmFwcGVuZEV4dHJhUmVzcG9uc2VBdHRyaWJ1dGVzPWZ1bmN0aW9uKEksUil7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEUsejtyZXR1cm4gSih0aGlzLGZ1bmN0aW9uKGop'@;
put 'e3JldHVybiBFPXt9LFI/Lmxlbmd0aD8oej1SLnJlZHVjZShmdW5jdGlvbihWLEcpe3JldHVybiBWW0ddPUlbR10sVn0se30pLEU9TCh7cmVzdWx0OkkucmVzdWx0fSx6KSk6RT1JLnJlc3VsdCxbMixFXX0pfSl9fSw3OTIyOmZ1bmN0aW9uKEgsQil7InVzZSBzdHJpY3QiO3ZhciBMPXRoaXMm'@;
put 'JnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihKLEksUixFKXtyZXR1cm4gbmV3KFJ8fChSPVByb21pc2UpKShmdW5jdGlvbih6LGope2Z1bmN0aW9uIFYoVSl7dHJ5e1coRS5uZXh0KFUpKX1jYXRjaChxKXtqKHEpfX1mdW5jdGlvbiBHKFUpe3RyeXtXKEUudGhyb3coVSkpfWNhdGNoKHEpe2oo'@;
put 'cSl9fWZ1bmN0aW9uIFcoVSl7dmFyIHE7VS5kb25lP3ooVS52YWx1ZSk6KHE9VS52YWx1ZSxxIGluc3RhbmNlb2YgUj9xOm5ldyBSKGZ1bmN0aW9uKHRlKXt0ZShxKX0pKS50aGVuKFYsRyl9VygoRT1FLmFwcGx5KEosSXx8W10pKS5uZXh0KCkpfSl9LEs9dGhpcyYmdGhpcy5fX2dlbmVyYXRv'@;
put 'cnx8ZnVuY3Rpb24oSixJKXt2YXIgUixFLHosaixWPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJnpbMF0pdGhyb3cgelsxXTtyZXR1cm4gelsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBqPXtuZXh0OkcoMCksdGhyb3c6RygxKSxyZXR1cm46RygyKX0sImZ1bmN0aW9uIj09dHlw'@;
put 'ZW9mIFN5bWJvbCYmKGpbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksajtmdW5jdGlvbiBHKFcpe3JldHVybiBmdW5jdGlvbihVKXtyZXR1cm4gZnVuY3Rpb24ocSl7aWYoUil0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRp'@;
put 'bmcuIik7Zm9yKDtWOyl0cnl7aWYoUj0xLEUmJih6PTImcVswXT9FLnJldHVybjpxWzBdP0UudGhyb3d8fCgoej1FLnJldHVybikmJnouY2FsbChFKSwwKTpFLm5leHQpJiYhKHo9ei5jYWxsKEUscVsxXSkpLmRvbmUpcmV0dXJuIHo7c3dpdGNoKEU9MCx6JiYocT1bMiZxWzBdLHoudmFsdWVd'@;
put 'KSxxWzBdKXtjYXNlIDA6Y2FzZSAxOno9cTticmVhaztjYXNlIDQ6cmV0dXJuIFYubGFiZWwrKyx7dmFsdWU6cVsxXSxkb25lOiExfTtjYXNlIDU6Vi5sYWJlbCsrLEU9cVsxXSxxPVswXTtjb250aW51ZTtjYXNlIDc6cT1WLm9wcy5wb3AoKSxWLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVs'@;
put 'dDppZighKCh6PSh6PVYudHJ5cykubGVuZ3RoPjAmJnpbei5sZW5ndGgtMV0pfHw2IT09cVswXSYmMiE9PXFbMF0pKXtWPTA7Y29udGludWV9aWYoMz09PXFbMF0mJighenx8cVsxXT56WzBdJiZxWzFdPHpbM10pKXtWLmxhYmVsPXFbMV07YnJlYWt9aWYoNj09PXFbMF0mJlYubGFiZWw8elsx'@;
put 'XSl7Vi5sYWJlbD16WzFdLHo9cTticmVha31pZih6JiZWLmxhYmVsPHpbMl0pe1YubGFiZWw9elsyXSxWLm9wcy5wdXNoKHEpO2JyZWFrfXpbMl0mJlYub3BzLnBvcCgpLFYudHJ5cy5wb3AoKTtjb250aW51ZX1xPUkuY2FsbChKLFYpfWNhdGNoKHRlKXtxPVs2LHRlXSxFPTB9ZmluYWxseXtS'@;
put 'PXo9MH1pZig1JnFbMF0pdGhyb3cgcVsxXTtyZXR1cm57dmFsdWU6cVswXT9xWzFdOnZvaWQgMCxkb25lOiEwfX0oW1csVV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxCLmFzeW5jRm9yRWFjaD12b2lkIDAsQi5hc3luY0ZvckVhY2g9ZnVu'@;
put 'Y3Rpb24oSixJKXtyZXR1cm4gTCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgUjtyZXR1cm4gSyh0aGlzLGZ1bmN0aW9uKEUpe3N3aXRjaChFLmxhYmVsKXtjYXNlIDA6Uj0wLEUubGFiZWw9MTtjYXNlIDE6cmV0dXJuIFI8Si5sZW5ndGg/WzQsSShKW1JdLFIsSildOlszLDRd'@;
put 'O2Nhc2UgMjpFLnNlbnQoKSxFLmxhYmVsPTM7Y2FzZSAzOnJldHVybiBSKyssWzMsMV07Y2FzZSA0OnJldHVyblsyXX19KX0pfX0sMzc5MzooSCxCKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQi5jb21wYXJlVGltZXN0'@;
put 'YW1wcz12b2lkIDAsQi5jb21wYXJlVGltZXN0YW1wcz1mdW5jdGlvbihMLEspe3JldHVybiBLLnRpbWVzdGFtcC5nZXRUaW1lKCktTC50aW1lc3RhbXAuZ2V0VGltZSgpfX0sMzU1MzooSCxCKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3Zh'@;
put 'bHVlOiEwfSksQi5TQVNKU19MT0dTX1NFUEFSQVRPUj12b2lkIDAsQi5TQVNKU19MT0dTX1NFUEFSQVRPUj0iU0FTSlNfTE9HU19TRVBBUkFUT1JfMTYzZWUxN2I2ZmYyNGYwMjg5Mjg5NzJkODBhMjY3ODQifSwyNDAyOihILEIsTCk9PnsidXNlIHN0cmljdCI7dmFyIEs9TCg1MTA4KTtPYmpl'@;
put 'Y3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQi5pc0Zvcm1hdHNUYWJsZT1CLmNvbnZlcnRUb0NTVj12b2lkIDA7dmFyIEo9TCg2NDY3KSxJPUwoOTc3OCk7Qi5jb252ZXJ0VG9DU1Y9ZnVuY3Rpb24oRSx6KXt2YXIgajtpZighRVt6XSl0aHJvdygwLEkucHJl'@;
put 'Zml4TWVzc2FnZSkoIk5vIHRhYmxlIHByb3ZpZGVkIHRvIGJlIGNvbnZlcnRlZCB0byBDU1YuIiwiRXJyb3Igd2hpbGUgY29udmVydGluZyB0byBDU1YuICIpO3ZhciBWPUVbel07aWYoIUFycmF5LmlzQXJyYXkoVikpcmV0dXJuIiI7dmFyIEcsVz1udWxsPT09KGo9RVsiJCIuY29uY2F0KHop'@;
put 'XSl8fHZvaWQgMD09PWo/dm9pZCAwOmouZm9ybWF0cyxVPVtdLHE9ITE7VyYmKFU9T2JqZWN0LmtleXMoVykubWFwKGZ1bmN0aW9uKG5lKXtyZXR1cm4iIi5jb25jYXQobmUsIjoiKS5jb25jYXQoV1tuZV0pfSkpO3ZhciB0ZT1PYmplY3Qua2V5cyhWWzBdKTtyZXR1cm4gdGUuZm9yRWFjaChm'@;
put 'dW5jdGlvbihuZSl7aWYoIVd8fCFPYmplY3Qua2V5cyhXKS5pbmNsdWRlcyhuZSkpe3ZhciBpZT0hMSxsZT0hMTtpZihWLmZvckVhY2goZnVuY3Rpb24oYil7bnVsbD09PWJbbmVdfHwibnVtYmVyIj09dHlwZW9mIGJbbmVdP2llPSEwOiJzdHJpbmciPT10eXBlb2YgYltuZV0mJigwLEouaXNT'@;
put 'cGVjaWFsTWlzc2luZykoYltuZV0pJiYobGU9ITApfSksaWUmJmxlKVUucHVzaCgiIi5jb25jYXQobmUsIjpiZXN0LiIpKSxXfHwoVz17fSksV1tuZV09ImJlc3QuIjtlbHNle3ZhciBkZT1udWxsLHVlPSExLGNlPS0xLFk9Vi5tYXAoZnVuY3Rpb24oYix4KXtpZihiW25lXXx8IiI9PT1iW25l'@;
put 'XSl7ZGU/dWV8fChjZT0odWU9KCIiPT09YltuZV18fCJzdHJpbmciPT10eXBlb2YgYltuZV0/ImNoYXJzIjoibnVtYmVyIikhPT1kZSk/eCsxOi0xKTpkZT0iIj09PWJbbmVdfHwic3RyaW5nIj09dHlwZW9mIGJbbmVdPyJjaGFycyI6Im51bWJlciI7dmFyIEY9dm9pZCAwO3JldHVybiJzdHJp'@;
put 'bmciPT10eXBlb2YgYltuZV0mJihGPVIoYltuZV0pKSxGfX0pLnNvcnQoZnVuY3Rpb24oYix4KXtyZXR1cm4geC1ifSlbMF07WSYmWT4zMjc2NSYmKHE9ITApLHVlJiZLLmVycm9yKCJSb3cgKCIuY29uY2F0KGNlLCIpLCBDb2x1bW4gKCIpLmNvbmNhdChuZSwiKSBoYXMgbWl4ZWQgdHlwZXM6'@;
put 'IEVSUk9SIikpLFUucHVzaCgiIi5jb25jYXQobmUsIjoiKS5jb25jYXQoImNoYXJzIj09PWRlPyIkY2hhciI6IiIpLmNvbmNhdChZfHwoImNoYXJzIj09PWRlPyIxIjoiYmVzdCIpLCIuIikpfX19KSxXJiYoVT1VLnNvcnQoZnVuY3Rpb24obmUsaWUpe3JldHVybiB0ZS5pbmRleE9mKG5lLnJl'@;
put 'cGxhY2UoLzouKi8sIiIpKS10ZS5pbmRleE9mKGllLnJlcGxhY2UoLzouKi8sIiIpKX0pKSxxPyJFUlJPUjogTEFSR0UgU1RSSU5HIExFTkdUSCI6KEc9Vi5tYXAoZnVuY3Rpb24obmUpe3JldHVybiBPYmplY3Qua2V5cyhuZSkubWFwKGZ1bmN0aW9uKGllLGxlKXt2YXIgZGUsdWU9bmVbaWVd'@;
put 'O2lmKCJudW1iZXIiPT10eXBlb2YgdWUpcmV0dXJuIHVlO2lmKGRlPW51bGw9PT11ZT8iIjp1ZSxXJiYiYmVzdC4iPT09V1tpZV0pe2lmKGRlJiYhKDAsSi5pc1NwZWNpYWxNaXNzaW5nKShkZSkpdGhyb3cgbmV3IEVycm9yKCJBIFNwZWNpYWwgbWlzc2luZyB2YWx1ZSBjYW4gb25seSBiZSBh'@;
put 'IHNpbmdsZSBjaGFyYWN0ZXIgZnJvbSAnQScgdG8gJ1onLCAnXycsICcuW2Etel0nLCAnLl8nIik7dmFyIGNlPWRlLmluY2x1ZGVzKCIuIik/IiI6Ii4iO3JldHVybiIiLmNvbmNhdChjZSkuY29uY2F0KGRlLnRvTG93ZXJDYXNlKCkpfXJldHVybiBkZT1kZS5yZXBsYWNlKC8iL2csJyIiJyks'@;
put 'KGRlPSciJy5jb25jYXQoZGUsJyInKSkuc3Vic3RyaW5nKDEsZGUubGVuZ3RoLTEpLnNlYXJjaCgvKFx0fFxufFxyfCx8XCd8XCIpL2dtKTwwJiYoZGU9ZGUuc3Vic3RyaW5nKDEsZGUubGVuZ3RoLTEpKSwiIj09PShkZT1kZS5yZXBsYWNlKC9cclxuL2dtLCJcbiIpKSYmVVtsZV0uaW5jbHVk'@;
put 'ZXMoImJlc3QiKSYmKGRlPSIuIiksZGV9KS5qb2luKCIsIil9KSxVLmpvaW4oIiwiKS5yZXBsYWNlKC8sL2csIiAiKSsiXHJcbiIrRy5qb2luKCJcclxuIikpfSxCLmlzRm9ybWF0c1RhYmxlPWZ1bmN0aW9uKEUpe3JldHVybi9eXCQuKi8udGVzdChFKX07dmFyIFI9ZnVuY3Rpb24oRSl7Zm9y'@;
put 'KHZhciB6PUUubGVuZ3RoLGo9RS5sZW5ndGgtMTtqPj0wO2otLSl7dmFyIFY9RS5jaGFyQ29kZUF0KGopO1Y+MTI3JiZWPD0yMDQ3P3orKzpWPjIwNDcmJlY8PTY1NTM1JiYoeis9MiksVj49NTYzMjAmJlY8PTU3MzQzJiZqLS19cmV0dXJuIHp9fSw2MTE2OihILEIsTCk9PnsidXNlIHN0cmlj'@;
put 'dCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEIuY3JlYXRlQXhpb3NJbnN0YW5jZT12b2lkIDA7dmFyIEs9TCg5NjY5KTtCLmNyZWF0ZUF4aW9zSW5zdGFuY2U9ZnVuY3Rpb24oSixJKXtyZXR1cm4gSy5kZWZhdWx0LmNyZWF0ZSh7YmFzZVVSTDpK'@;
put 'LGh0dHBzQWdlbnQ6SX0pfX0sOTgyNTooSCxCKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQi5kZWxheT12b2lkIDAsQi5kZWxheT1mdW5jdGlvbihMKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oSyl7cmV0dXJu'@;
put 'IHNldFRpbWVvdXQoSyxMKX0pfX0sOTkwOmZ1bmN0aW9uKEgsQixMKXsidXNlIHN0cmljdCI7dmFyIEs9TCg0MTU1KSxKPUwoNTEwOCksST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oeixqLFYsRyl7cmV0dXJuIG5ldyhWfHwoVj1Qcm9taXNlKSkoZnVuY3Rpb24oVyxVKXtmdW5j'@;
put 'dGlvbiBxKGllKXt0cnl7bmUoRy5uZXh0KGllKSl9Y2F0Y2gobGUpe1UobGUpfX1mdW5jdGlvbiB0ZShpZSl7dHJ5e25lKEcudGhyb3coaWUpKX1jYXRjaChsZSl7VShsZSl9fWZ1bmN0aW9uIG5lKGllKXt2YXIgbGU7aWUuZG9uZT9XKGllLnZhbHVlKToobGU9aWUudmFsdWUsbGUgaW5zdGFu'@;
put 'Y2VvZiBWP2xlOm5ldyBWKGZ1bmN0aW9uKGRlKXtkZShsZSl9KSkudGhlbihxLHRlKX1uZSgoRz1HLmFwcGx5KHosanx8W10pKS5uZXh0KCkpfSl9LFI9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oeixqKXt2YXIgVixHLFcsVSxxPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtp'@;
put 'ZigxJldbMF0pdGhyb3cgV1sxXTtyZXR1cm4gV1sxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBVPXtuZXh0OnRlKDApLHRocm93OnRlKDEpLHJldHVybjp0ZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKFVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlz'@;
put 'fSksVTtmdW5jdGlvbiB0ZShuZSl7cmV0dXJuIGZ1bmN0aW9uKGllKXtyZXR1cm4gZnVuY3Rpb24obGUpe2lmKFYpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7cTspdHJ5e2lmKFY9MSxHJiYoVz0yJmxlWzBdP0cucmV0dXJuOmxl'@;
put 'WzBdP0cudGhyb3d8fCgoVz1HLnJldHVybikmJlcuY2FsbChHKSwwKTpHLm5leHQpJiYhKFc9Vy5jYWxsKEcsbGVbMV0pKS5kb25lKXJldHVybiBXO3N3aXRjaChHPTAsVyYmKGxlPVsyJmxlWzBdLFcudmFsdWVdKSxsZVswXSl7Y2FzZSAwOmNhc2UgMTpXPWxlO2JyZWFrO2Nhc2UgNDpyZXR1'@;
put 'cm4gcS5sYWJlbCsrLHt2YWx1ZTpsZVsxXSxkb25lOiExfTtjYXNlIDU6cS5sYWJlbCsrLEc9bGVbMV0sbGU9WzBdO2NvbnRpbnVlO2Nhc2UgNzpsZT1xLm9wcy5wb3AoKSxxLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChXPShXPXEudHJ5cykubGVuZ3RoPjAmJldbVy5sZW5n'@;
put 'dGgtMV0pfHw2IT09bGVbMF0mJjIhPT1sZVswXSkpe3E9MDtjb250aW51ZX1pZigzPT09bGVbMF0mJighV3x8bGVbMV0+V1swXSYmbGVbMV08V1szXSkpe3EubGFiZWw9bGVbMV07YnJlYWt9aWYoNj09PWxlWzBdJiZxLmxhYmVsPFdbMV0pe3EubGFiZWw9V1sxXSxXPWxlO2JyZWFrfWlmKFcm'@;
put 'JnEubGFiZWw8V1syXSl7cS5sYWJlbD1XWzJdLHEub3BzLnB1c2gobGUpO2JyZWFrfVdbMl0mJnEub3BzLnBvcCgpLHEudHJ5cy5wb3AoKTtjb250aW51ZX1sZT1qLmNhbGwoeixxKX1jYXRjaChkZSl7bGU9WzYsZGVdLEc9MH1maW5hbGx5e1Y9Vz0wfWlmKDUmbGVbMF0pdGhyb3cgbGVbMV07'@;
put 'cmV0dXJue3ZhbHVlOmxlWzBdP2xlWzFdOnZvaWQgMCxkb25lOiEwfX0oW25lLGllXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEIuZmV0Y2hMb2c9Qi5mZXRjaExvZ0J5Q2h1bmtzPXZvaWQgMDt2YXIgRT1MKDk3NzgpO0IuZmV0Y2hMb2dC'@;
put 'eUNodW5rcz1mdW5jdGlvbih6LGosVixHKXtyZXR1cm4gSSh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBSKHRoaXMsZnVuY3Rpb24oVyl7c3dpdGNoKFcubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCwoMCxCLmZldGNoTG9nKSh6LGosViwwLEcpXTtjYXNlIDE6cmV0dXJu'@;
put 'WzIsVy5zZW50KCldfX0pfSl9LEIuZmV0Y2hMb2c9ZnVuY3Rpb24oeixqLFYsRyxXKXtyZXR1cm4gSSh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBVLHEsdGUsbmUsaWU7cmV0dXJuIFIodGhpcyxmdW5jdGlvbihsZSl7c3dpdGNoKGxlLmxhYmVsKXtjYXNlIDA6VT1LLmxv'@;
put 'Z2dlcnx8SixxPSIiLHRlPVc8MWU0P1c6MWU0LGxlLmxhYmVsPTE7Y2FzZSAxOnJldHVybiBVLmluZm8oIkZldGNoaW5nIGxvZ3MgZnJvbSBsaW5lIG5vOiAiLmNvbmNhdChHKzEsIiB0byAiKS5jb25jYXQoRyt0ZSwiIG9mICIpLmNvbmNhdChXLCIuIikpLFs0LHouZ2V0KCIiLmNvbmNhdChW'@;
put 'LCI/c3RhcnQ9IikuY29uY2F0KEcsIiZsaW1pdD0iKS5jb25jYXQodGUpLGopLnRoZW4oZnVuY3Rpb24oZGUpe3JldHVybiBkZS5yZXN1bHR9KS5jYXRjaChmdW5jdGlvbihkZSl7dGhyb3coMCxFLnByZWZpeE1lc3NhZ2UpKGRlLCJFcnJvciB3aGlsZSBnZXR0aW5nIGxvZy4gIil9KV07Y2Fz'@;
put 'ZSAyOmlmKDA9PT0obmU9bGUuc2VudCgpKS5pdGVtcy5sZW5ndGgpcmV0dXJuWzMsNF07aWU9bmUuaXRlbXMubWFwKGZ1bmN0aW9uKGRlKXtyZXR1cm4gZGUubGluZX0pLmpvaW4oIlxuIikscSs9aWUsRys9dGUsbGUubGFiZWw9MztjYXNlIDM6aWYoRzxXKXJldHVyblszLDFdO2xlLmxhYmVs'@;
put 'PTQ7Y2FzZSA0OnJldHVyblsyLHFdfX0pfSl9fSw3MTQ6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQi5mb3JtYXREYXRhRm9yUmVxdWVzdD12b2lkIDA7dmFyIEs9TCgyNDAyKSxKPUwoNDc5OSk7Qi5mb3Jt'@;
put 'YXREYXRhRm9yUmVxdWVzdD1mdW5jdGlvbihJKXt2YXIgUj1bXSxFPTAsej17fTtmb3IodmFyIGogaW4gSSlpZighKDAsSy5pc0Zvcm1hdHNUYWJsZSkoail8fCFPYmplY3Qua2V5cyhJKS5pbmNsdWRlcyhqLnJlcGxhY2UoL15cJC8sIiIpKSl7RSsrLCgwLEsuaXNGb3JtYXRzVGFibGUpKGop'@;
put 'fHxSLnB1c2goaik7dmFyIFY9KDAsSy5jb252ZXJ0VG9DU1YpKEksaik7aWYoIkVSUk9SOiBMQVJHRSBTVFJJTkcgTEVOR1RIIj09PVYpdGhyb3cgbmV3IEVycm9yKCJUaGUgbWF4IGxlbmd0aCBvZiBhIHN0cmluZyB2YWx1ZSBpbiBTQVNqcyBpcyAzMjc2NSBjaGFyYWN0ZXJzLiIpO2lmKFYu'@;
put 'bGVuZ3RoPjE2ZTMpe3ZhciBHPSgwLEouc3BsaXRDaHVua3MpKFYpO3pbInNhc2pzIi5jb25jYXQoRSwiZGF0YTAiKV09Ry5sZW5ndGgsRy5mb3JFYWNoKGZ1bmN0aW9uKFcsVSl7elsic2FzanMiLmNvbmNhdChFLCJkYXRhIikuY29uY2F0KFUrMSldPVd9KX1lbHNlIHpbInNhc2pzIi5jb25j'@;
put 'YXQoRSwiZGF0YSIpXT1WfXJldHVybiB6LnNhc2pzX3RhYmxlcz1SLmpvaW4oIiAiKSx6fX0sMTg4NDooSCxCLEwpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxCLmdldFZhbGlkSnNvbj12b2lkIDA7dmFyIEs9TCgxMzk1'@;
put 'KTtCLmdldFZhbGlkSnNvbj1mdW5jdGlvbihKKXt0cnl7aWYobnVsbD09Sil0aHJvdyBuZXcgSy5JbnZhbGlkSnNvbkVycm9yO2lmKEFycmF5LmlzQXJyYXkoSikpdGhyb3cgbmV3IEsuSnNvblBhcnNlQXJyYXlFcnJvcjtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIEo/SjoiIj09PUo/e306SlNP'@;
put 'Ti5wYXJzZShKKX1jYXRjaChJKXt0aHJvdyBJIGluc3RhbmNlb2YgSy5Kc29uUGFyc2VBcnJheUVycm9yP0k6bmV3IEsuSW52YWxpZEpzb25FcnJvcn19fSw1OTI4OmZ1bmN0aW9uKEgsQixMKXsidXNlIHN0cmljdCI7dmFyIEs9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3Qu'@;
put 'Y3JlYXRlP2Z1bmN0aW9uKEksUixFLHope3ZvaWQgMD09PXomJih6PUUpO3ZhciBqPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoUixFKTtqJiYhKCJnZXQiaW4gaj8hUi5fX2VzTW9kdWxlOmoud3JpdGFibGV8fGouY29uZmlndXJhYmxlKXx8KGo9e2VudW1lcmFibGU6ITAsZ2V0'@;
put 'OmZ1bmN0aW9uKCl7cmV0dXJuIFJbRV19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEkseixqKX06ZnVuY3Rpb24oSSxSLEUseil7dm9pZCAwPT09eiYmKHo9RSksSVt6XT1SW0VdfSksSj10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oSSxSKXtmb3IodmFyIEUgaW4gSSkiZGVm'@;
put 'YXVsdCI9PT1FfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUixFKXx8SyhSLEksRSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKKEwoMzMwMiksQiksSihMKDc5MjIpLEIpLEooTCgzNzkzKSxCKSxKKEwoMjQwMiksQiks'@;
put 'SihMKDM1NTMpLEIpLEooTCg2MTE2KSxCKSxKKEwoOTgyNSksQiksSihMKDk5MCksQiksSihMKDE4ODQpLEIpLEooTCg0MjQzKSxCKSxKKEwoMjU3KSxCKSxKKEwoMiksQiksSihMKDI2MTUpLEIpLEooTCgyOTIwKSxCKSxKKEwoMjQyMiksQiksSihMKDMxKSxCKSxKKEwoNjUxNSksQiksSihM'@;
put 'KDY0MTYpLEIpLEooTCgyODEzKSxCKSxKKEwoOTg5NiksQiksSihMKDQ3OTkpLEIpLEooTCg0NTE2KSxCKX0sNDI0MzooSCxCLEwpPT57InVzZSBzdHJpY3QiO3ZhciBLPUwoNDE1NSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KEIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEIuaXNOb2RlPXZv'@;
put 'aWQgMCxCLmlzTm9kZT1mdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT1LJiZudWxsIT1LLnZlcnNpb25zJiZudWxsIT1LLnZlcnNpb25zLm5vZGV9fSwyNTc6KEgsQik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEIuaXNS'@;
put 'ZWxhdGl2ZVBhdGg9dm9pZCAwLEIuaXNSZWxhdGl2ZVBhdGg9ZnVuY3Rpb24oTCl7cmV0dXJuISFMJiYhTC5zdGFydHNXaXRoKCIvIil9fSwyOihILEIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxCLmlzVXJpPXZvaWQg'@;
put 'MCxCLmlzVXJpPWZ1bmN0aW9uKEwpe3JldHVybi9eXC9mb2xkZXJzXC9mb2xkZXJzXC8vLnRlc3QoTCl9fSwyNjE1OihILEIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxCLmlzVXJsPXZvaWQgMCxCLmlzVXJsPWZ1bmN0'@;
put 'aW9uKEwpe3RyeXt2YXIgSz1uZXcgVVJMKEwpO2lmKCFbImh0dHA6IiwiaHR0cHM6Il0uaW5jbHVkZXMoSy5wcm90b2NvbCkpcmV0dXJuITF9Y2F0Y2h7cmV0dXJuITF9cmV0dXJuITB9fSwxMjEwOmZ1bmN0aW9uKEgsQil7InVzZSBzdHJpY3QiO3ZhciBMLGosSz10aGlzJiZ0aGlzLl9fYXdh'@;
put 'aXRlcnx8ZnVuY3Rpb24oaixWLEcsVyl7cmV0dXJuIG5ldyhHfHwoRz1Qcm9taXNlKSkoZnVuY3Rpb24oVSxxKXtmdW5jdGlvbiB0ZShsZSl7dHJ5e2llKFcubmV4dChsZSkpfWNhdGNoKGRlKXtxKGRlKX19ZnVuY3Rpb24gbmUobGUpe3RyeXtpZShXLnRocm93KGxlKSl9Y2F0Y2goZGUpe3Eo'@;
put 'ZGUpfX1mdW5jdGlvbiBpZShsZSl7dmFyIGRlO2xlLmRvbmU/VShsZS52YWx1ZSk6KGRlPWxlLnZhbHVlLGRlIGluc3RhbmNlb2YgRz9kZTpuZXcgRyhmdW5jdGlvbih1ZSl7dWUoZGUpfSkpLnRoZW4odGUsbmUpfWllKChXPVcuYXBwbHkoaixWfHxbXSkpLm5leHQoKSl9KX0sSj10aGlzJiZ0'@;
put 'aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihqLFYpe3ZhciBHLFcsVSxxLHRlPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJlVbMF0pdGhyb3cgVVsxXTtyZXR1cm4gVVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBxPXtuZXh0Om5lKDApLHRocm93Om5lKDEpLHJldHVybjpuZSgy'@;
put 'KX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKHFbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSkscTtmdW5jdGlvbiBuZShpZSl7cmV0dXJuIGZ1bmN0aW9uKGxlKXtyZXR1cm4gZnVuY3Rpb24oZGUpe2lmKEcpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJh'@;
put 'dG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7dGU7KXRyeXtpZihHPTEsVyYmKFU9MiZkZVswXT9XLnJldHVybjpkZVswXT9XLnRocm93fHwoKFU9Vy5yZXR1cm4pJiZVLmNhbGwoVyksMCk6Vy5uZXh0KSYmIShVPVUuY2FsbChXLGRlWzFdKSkuZG9uZSlyZXR1cm4gVTtzd2l0Y2go'@;
put 'Vz0wLFUmJihkZT1bMiZkZVswXSxVLnZhbHVlXSksZGVbMF0pe2Nhc2UgMDpjYXNlIDE6VT1kZTticmVhaztjYXNlIDQ6cmV0dXJuIHRlLmxhYmVsKysse3ZhbHVlOmRlWzFdLGRvbmU6ITF9O2Nhc2UgNTp0ZS5sYWJlbCsrLFc9ZGVbMV0sZGU9WzBdO2NvbnRpbnVlO2Nhc2UgNzpkZT10ZS5v'@;
put 'cHMucG9wKCksdGUudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKFU9KFU9dGUudHJ5cykubGVuZ3RoPjAmJlVbVS5sZW5ndGgtMV0pfHw2IT09ZGVbMF0mJjIhPT1kZVswXSkpe3RlPTA7Y29udGludWV9aWYoMz09PWRlWzBdJiYoIVV8fGRlWzFdPlVbMF0mJmRlWzFdPFVbM10p'@;
put 'KXt0ZS5sYWJlbD1kZVsxXTticmVha31pZig2PT09ZGVbMF0mJnRlLmxhYmVsPFVbMV0pe3RlLmxhYmVsPVVbMV0sVT1kZTticmVha31pZihVJiZ0ZS5sYWJlbDxVWzJdKXt0ZS5sYWJlbD1VWzJdLHRlLm9wcy5wdXNoKGRlKTticmVha31VWzJdJiZ0ZS5vcHMucG9wKCksdGUudHJ5cy5wb3Ao'@;
put 'KTtjb250aW51ZX1kZT1WLmNhbGwoaix0ZSl9Y2F0Y2godWUpe2RlPVs2LHVlXSxXPTB9ZmluYWxseXtHPVU9MH1pZig1JmRlWzBdKXRocm93IGRlWzFdO3JldHVybnt2YWx1ZTpkZVswXT9kZVsxXTp2b2lkIDAsZG9uZTohMH19KFtpZSxsZV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShC'@;
put 'LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxCLm9wZW5Mb2dpblByb21wdD12b2lkIDAsKGo9THx8KEw9e30pKS5zdHlsZXM9InNhc2pzQWRhcHRlclN0eWxlcyIsai5vdmVybGF5PSJzYXNqc0FkYXB0ZXJMb2dpblByb21wdEJHIixqLmRpYWxvZz0ic2FzanNBZGFwdGVyTG9naW5Qcm9tcHQi'@;
put 'O3ZhciBJPSJzYXNqcy1hZGFwdGVyIixSPXtwb3BVcDoiIi5jb25jYXQoSSwicG9wVXAiKSxwb3BVcEJHOiIiLmNvbmNhdChJLCJwb3BVcEJHIil9O0Iub3BlbkxvZ2luUHJvbXB0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGope3JldHVybiBLKHZvaWQgMCx2b2lk'@;
put 'IDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIFYsRyxXLFUscSx0ZSxuZSxpZTtyZXR1cm4gSih0aGlzLGZ1bmN0aW9uKGxlKXtyZXR1cm4oVj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpKS5pZD1MLnN0eWxlcyxWLmlubmVyVGV4dD16LChHPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo'@;
put 'ImRpdiIpKS5pZD1MLm92ZXJsYXksRy5jbGFzc0xpc3QuYWRkKFIucG9wVXBCRyksKFc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLmlkPUwuZGlhbG9nLFcuY2xhc3NMaXN0LmFkZChSLnBvcFVwKSwoVT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJoMSIpKS5pbm5lclRleHQ9IlNl'@;
put 'c3Npb24gRXhwaXJlZCEiLFcuYXBwZW5kQ2hpbGQoVSkscT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSwodGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpKS5pbm5lclRleHQ9IllvdSBuZWVkIHRvIHJlbG9naW4sIGNsaWNrIE9LIHRvIGxvZ2luLiIscS5hcHBlbmRDaGls'@;
put 'ZCh0ZSksVy5hcHBlbmRDaGlsZChxKSwobmU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIikpLmNsYXNzTGlzdC5hZGQoImNhbmNlbCIpLG5lLmlubmVyVGV4dD0iQ2FuY2VsIixuZS5vbmNsaWNrPWZ1bmN0aW9uKCl7RSgpLGooITEpfSxXLmFwcGVuZENoaWxkKG5lKSwoaWU9ZG9j'@;
put 'dW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIikpLmNsYXNzTGlzdC5hZGQoImNvbmZpcm0iKSxpZS5pbm5lclRleHQ9Ik9rIixpZS5vbmNsaWNrPWZ1bmN0aW9uKCl7RSgpLGooITApfSxXLmFwcGVuZENoaWxkKGllKSxkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iLGRv'@;
put 'Y3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoViksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChHKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFcpLFsyXX0pfSl9KX07dmFyIEU9ZnVuY3Rpb24oKXtPYmplY3QudmFsdWVzKEwpLmZvckVhY2goZnVuY3Rpb24oail7dmFyIFYsRz1kb2N1bWVu'@;
put 'dC5nZXRFbGVtZW50QnlJZChqKTtudWxsPT09KFY9Rz8ucGFyZW50Tm9kZSl8fHZvaWQgMD09PVZ8fFYucmVtb3ZlQ2hpbGQoRyl9KSxkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93PSJhdXRvIn0sej0iXG4uIi5jb25jYXQoUi5wb3BVcEJHLCIgLFxuLiIpLmNvbmNhdChSLnBvcFVwLCIg'@;
put 'e1xuICB6LWluZGV4OiAxMDAwMDtcbn1cbi4iKS5jb25jYXQoUi5wb3BVcCwiIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBw'@;
put 'b3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogNDAlO1xuICBsZWZ0OiA1MCU7XG4gIHBhZGRpbmc6IDA7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgZm9udC1mYW1pbHk6ICdQVCBTYW5zJywgc2Fucy1zZXJpZjtcbiAgY29sb3I6ICNmZmY7XG4gIGJvcmRlci1zdHlsZTogbm9uZTtcbiAgei1pbmRl'@;
put 'eDogOTk5O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7XG4gIG1hcmdpbjogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIG1heC13aWR0aDogMzAwcHg7XG4gIGhlaWdodDogYXV0bztcbiAgbWF4LWhlaWdodDogMzAwcHg7XG4gIHRyYW5zZm9y'@;
put 'bTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xufVxuLiIpLmNvbmNhdChSLnBvcFVwLCIgPiBoMSB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBwYWRkaW5nOiA1'@;
put 'cHg7XG4gIG1pbi1oZWlnaHQ6IDQwcHg7XG4gIGZvbnQtc2l6ZTogMS4yZW07XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXN0eWxlOiBub25lO1xu'@;
put 'ICBib3JkZXItd2lkdGg6IDVweDtcbiAgYm9yZGVyLWNvbG9yOiBibGFjaztcbn1cbi4iKS5jb25jYXQoUi5wb3BVcCwiID4gZGl2IHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogY2FsYygxMDAlIC0xMDhweCk7XG4gIG1hcmdpbjogMDtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGJveC1z'@;
put 'aXppbmc6IGJvcmRlci1ib3g7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBwYWRkaW5nOiA1JTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBib3JkZXItd2lkdGg6IDFweDtcbiAgYm9yZGVyLWNvbG9yOiAj'@;
put 'Y2NjO1xuICBib3JkZXItc3R5bGU6IG5vbmUgbm9uZSBzb2xpZCBub25lO1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi4iKS5jb25jYXQoUi5wb3BVcCwiID4gZGl2ID4gc3BhbiB7XG4gIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC13ZWJraXQt'@;
put 'Ym94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIHdpZHRoOiAzMDBweDtcbiAgaGVpZ2h0OiAxMDhweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgYm9yZGVyLXN0eWxlOiBu'@;
put 'b25lO1xufVxuLiIpLmNvbmNhdChSLnBvcFVwLCIgLmNhbmNlbCB7XG4gIGZsb2F0OiBsZWZ0O1xufVxuLiIpLmNvbmNhdChSLnBvcFVwLCIgLmNvbmZpcm0ge1xuICBmbG9hdDogcmlnaHQ7XG59XG4uIikuY29uY2F0KFIucG9wVXAsIiA+IGJ1dHRvbiB7XG4gIGJveC1zaXppbmc6IGJvcmRl'@;
put 'ci1ib3g7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDEwcHg7XG4gIHdpZHRoOiA1MCU7XG4gIGJvcmRlcjogMXB4IG5vbmUgI2NjYztcbiAgY29sb3I6ICNmZmY7XG4g'@;
put 'IGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGhlaWdodDogNTBweDtcbiAgYmFja2dyb3VuZDogcmdiYSgxLCAxLCAxLCAwLjIpO1xufVxuLiIpLmNvbmNhdChSLnBvcFVwLCIgPiBidXR0b246aG92ZXIge1xuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAs'@;
put 'IDAuMik7XG59XG4uIikuY29uY2F0KFIucG9wVXBCRywiIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIG9w'@;
put 'YWNpdHk6IDAuOTU7XG4gIHotaW5kZXg6IDUwO1xuICBiYWNrZ3JvdW5kLWltYWdlOiByYWRpYWwtZ3JhZGllbnQoIzAzNzhjZCwgIzAxMjAzNik7XG59XG4iKX0sMjkyMDooSCxCKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEw'@;
put 'fSksQi5uZWVkc1JldHJ5PXZvaWQgMCxCLm5lZWRzUmV0cnk9ZnVuY3Rpb24oTCl7cmV0dXJuISFMJiYoTC5pbmNsdWRlcygnImVycm9yQ29kZSI6NDAzJykmJkwuaW5jbHVkZXMoIl9jc3JmIikmJkwuaW5jbHVkZXMoIlgtQ1NSRi1UT0tFTiIpfHxMLmluY2x1ZGVzKCcic3RhdHVzIjo0MDMn'@;
put 'KSYmTC5pbmNsdWRlcygnImVycm9yIjoiRm9yYmlkZGVuIicpfHxMLmluY2x1ZGVzKCcic3RhdHVzIjo0NDknKSYmTC5pbmNsdWRlcygiQXV0aGVudGljYXRpb24gc3VjY2VzcywgcmV0cnkgb3JpZ2luYWwgcmVxdWVzdCIpKX19LDI0MjI6KEgsQik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRl'@;
put 'ZmluZVByb3BlcnR5KEIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEIucGFyc2VHZW5lcmF0ZWRDb2RlPXZvaWQgMCxCLnBhcnNlR2VuZXJhdGVkQ29kZT1mdW5jdGlvbihMKXtyZXR1cm4gTC5zcGxpdCgiXG4iKS5maWx0ZXIoZnVuY3Rpb24oSyl7cmV0dXJuIEsudHJpbSgpLnN0YXJ0c1dp'@;
put 'dGgoIk1QUklOVCIpfSkuam9pbigiXHJcbiIpfX0sMzE6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSz1MKDUxMDgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxCLnBhcnNlU2FzVml5YUxvZz12b2lkIDAsQi5wYXJzZVNhc1ZpeWFMb2c9ZnVu'@;
put 'Y3Rpb24oSil7dmFyIEk7dHJ5e0k9Si5pdGVtcz9KLml0ZW1zLm1hcChmdW5jdGlvbihSKXtyZXR1cm4gUi5saW5lfSkuam9pbigiXG4iKTpKU09OLnN0cmluZ2lmeShKKX1jYXRjaChSKXtLLmVycm9yKCJBbiBlcnJvciBoYXMgb2NjdXJyZWQgd2hpbGUgcGFyc2luZyB0aGUgbG9nIHJlc3Bv'@;
put 'bnNlIixSKSxJPUp9cmV0dXJuIEl9fSw2NTE1OihILEIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxCLnBhcnNlU291cmNlQ29kZT12b2lkIDAsQi5wYXJzZVNvdXJjZUNvZGU9ZnVuY3Rpb24oTCl7cmV0dXJuIEwuc3Bs'@;
put 'aXQoIlxuIikuZmlsdGVyKGZ1bmN0aW9uKEspe3JldHVybiBLLnRyaW0oKS5zdWJzdHJpbmcoMCwxMCkudHJpbVN0YXJ0KCkubWF0Y2goL15cZC8pfSkuam9pbigiXHJcbiIpfX0sNjQxNjpmdW5jdGlvbihILEIsTCl7InVzZSBzdHJpY3QiO3ZhciBLPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxm'@;
put 'dW5jdGlvbihSLEUseixqKXtyZXR1cm4gbmV3KHp8fCh6PVByb21pc2UpKShmdW5jdGlvbihWLEcpe2Z1bmN0aW9uIFcodGUpe3RyeXtxKGoubmV4dCh0ZSkpfWNhdGNoKG5lKXtHKG5lKX19ZnVuY3Rpb24gVSh0ZSl7dHJ5e3Eoai50aHJvdyh0ZSkpfWNhdGNoKG5lKXtHKG5lKX19ZnVuY3Rp'@;
put 'b24gcSh0ZSl7dmFyIG5lO3RlLmRvbmU/Vih0ZS52YWx1ZSk6KG5lPXRlLnZhbHVlLG5lIGluc3RhbmNlb2Ygej9uZTpuZXcgeihmdW5jdGlvbihpZSl7aWUobmUpfSkpLnRoZW4oVyxVKX1xKChqPWouYXBwbHkoUixFfHxbXSkpLm5leHQoKSl9KX0sSj10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9y'@;
put 'fHxmdW5jdGlvbihSLEUpe3ZhciB6LGosVixHLFc9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmVlswXSl0aHJvdyBWWzFdO3JldHVybiBWWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIEc9e25leHQ6VSgwKSx0aHJvdzpVKDEpLHJldHVybjpVKDIpfSwiZnVuY3Rpb24iPT10eXBl'@;
put 'b2YgU3ltYm9sJiYoR1tTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxHO2Z1bmN0aW9uIFUocSl7cmV0dXJuIGZ1bmN0aW9uKHRlKXtyZXR1cm4gZnVuY3Rpb24obmUpe2lmKHopdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0'@;
put 'aW5nLiIpO2Zvcig7VzspdHJ5e2lmKHo9MSxqJiYoVj0yJm5lWzBdP2oucmV0dXJuOm5lWzBdP2oudGhyb3d8fCgoVj1qLnJldHVybikmJlYuY2FsbChqKSwwKTpqLm5leHQpJiYhKFY9Vi5jYWxsKGosbmVbMV0pKS5kb25lKXJldHVybiBWO3N3aXRjaChqPTAsViYmKG5lPVsyJm5lWzBdLFYu'@;
put 'dmFsdWVdKSxuZVswXSl7Y2FzZSAwOmNhc2UgMTpWPW5lO2JyZWFrO2Nhc2UgNDpyZXR1cm4gVy5sYWJlbCsrLHt2YWx1ZTpuZVsxXSxkb25lOiExfTtjYXNlIDU6Vy5sYWJlbCsrLGo9bmVbMV0sbmU9WzBdO2NvbnRpbnVlO2Nhc2UgNzpuZT1XLm9wcy5wb3AoKSxXLnRyeXMucG9wKCk7Y29u'@;
put 'dGludWU7ZGVmYXVsdDppZighKChWPShWPVcudHJ5cykubGVuZ3RoPjAmJlZbVi5sZW5ndGgtMV0pfHw2IT09bmVbMF0mJjIhPT1uZVswXSkpe1c9MDtjb250aW51ZX1pZigzPT09bmVbMF0mJighVnx8bmVbMV0+VlswXSYmbmVbMV08VlszXSkpe1cubGFiZWw9bmVbMV07YnJlYWt9aWYoNj09'@;
put 'PW5lWzBdJiZXLmxhYmVsPFZbMV0pe1cubGFiZWw9VlsxXSxWPW5lO2JyZWFrfWlmKFYmJlcubGFiZWw8VlsyXSl7Vy5sYWJlbD1WWzJdLFcub3BzLnB1c2gobmUpO2JyZWFrfVZbMl0mJlcub3BzLnBvcCgpLFcudHJ5cy5wb3AoKTtjb250aW51ZX1uZT1FLmNhbGwoUixXKX1jYXRjaChpZSl7'@;
put 'bmU9WzYsaWVdLGo9MH1maW5hbGx5e3o9Vj0wfWlmKDUmbmVbMF0pdGhyb3cgbmVbMV07cmV0dXJue3ZhbHVlOm5lWzBdP25lWzFdOnZvaWQgMCxkb25lOiEwfX0oW3EsdGVdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQi5wYXJzZVNhc1Zp'@;
put 'eWFEZWJ1Z1Jlc3BvbnNlPXZvaWQgMDt2YXIgST1MKDU5MjgpO0IucGFyc2VTYXNWaXlhRGVidWdSZXNwb25zZT1mdW5jdGlvbihSLEUseil7cmV0dXJuIEsodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgaixWO3JldHVybiBKKHRoaXMsZnVuY3Rpb24oRyl7aWYoaj1SLnNw'@;
put 'bGl0KC88aWZyYW1lIHN0eWxlPSJ3aWR0aDogOTklOyBoZWlnaHQ6IDUwMHB4IiBzcmM9Inw8aWZyYW1lIHN0eWxlPSJ3aWR0aDogOTklOyBoZWlnaHQ6IDUwMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOkNhbnZhczsiIHNyYz0vKVsxXSwhKFY9aj9qLnNwbGl0KC8iPjxcL2lmcmFtZT58PjxcL2lm'@;
put 'cmFtZT4vKVswXTpudWxsKSl0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBmaW5kIHdlYm91dCBmaWxlIFVSTC4iKTtyZXR1cm5bMixFLmdldCh6K1Ysdm9pZCAwLCJ0ZXh0L3BsYWluIikudGhlbihmdW5jdGlvbihXKXtyZXR1cm4oMCxJLmdldFZhbGlkSnNvbikoVy5yZXN1bHQpfSldfSl9'@;
put 'KX19LDI4MTM6KEgsQixMKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSz1MKDUxMDgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxCLnBhcnNlV2Vib3V0UmVzcG9uc2U9dm9pZCAwO3ZhciBKPUwoMTM5NSk7Qi5wYXJzZVdlYm91dFJlc3BvbnNlPWZ1bmN0'@;
put 'aW9uKEksUil7dmFyIEU9IiI7aWYoSS5pbmNsdWRlcygiPj53ZWJvdXRCRUdJTjw8IikpdHJ5e0U9SS5zcGxpdCgiPj53ZWJvdXRCRUdJTjw8IilbMV0uc3BsaXQoIj4+d2Vib3V0RU5EPDwiKVswXX1jYXRjaCh6KXtpZihSKXRocm93IG5ldyBKLldlYm91dFJlc3BvbnNlRXJyb3IoUik7RT0i'@;
put 'IixLLmVycm9yKHopfXJldHVybiBFfX0sMTE3MDooSCxCKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQi5leHRyYWN0VXNlckxvbmdOYW1lU2FzOT12b2lkIDA7dmFyIEw9WyJMb2cgT2ZmIl07Qi5leHRyYWN0VXNlckxv'@;
put 'bmdOYW1lU2FzOT1mdW5jdGlvbihLKXt2YXIgSj1LPy5tYXRjaCgvInRpdGxlIjpccz8iLio/Ii8pLEk9Sj8uWzBdLnNwbGl0KCI6IilbMV0udHJpbSgpLFI9ST8uaW5kZXhPZigiICIpO3JldHVybiBJPyhMLm1hcChmdW5jdGlvbihFKXt2YXIgej1JPy5pbmRleE9mKEUpfHwtMTt6Pi0xJiYo'@;
put 'Uj16K0UubGVuZ3RoKX0pLEkuc2xpY2UoUiwtMSkudHJpbSgpKToidW5rbm93biJ9fSw5ODk2OihILEIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxCLnNlcmlhbGl6ZT12b2lkIDAsQi5zZXJpYWxpemU9ZnVuY3Rpb24o'@;
put 'TCl7dmFyIEs9W107Zm9yKHZhciBKIGluIEwpaWYoTC5oYXNPd25Qcm9wZXJ0eShKKSlpZihMW0pdaW5zdGFuY2VvZiBBcnJheSlmb3IodmFyIEk9MCxSPUxbSl0ubGVuZ3RoO0k8UjtJKyspSy5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChKKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KExbSl1b'@;
put 'SV0pKTtlbHNlIEsucHVzaChlbmNvZGVVUklDb21wb25lbnQoSikrIj0iK2VuY29kZVVSSUNvbXBvbmVudChMW0pdKSk7cmV0dXJuIEsuam9pbigiJiIpfX0sNDc5OTooSCxCKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSks'@;
put 'Qi5zcGxpdENodW5rcz12b2lkIDAsQi5zcGxpdENodW5rcz1mdW5jdGlvbihMKXtmb3IodmFyIEs9MTZlMyxKPU1hdGguY2VpbChMLmxlbmd0aC9LKSxJPW5ldyBBcnJheShKKSxSPTAsRT0wO1I8SjsrK1IsRSs9SylJW1JdPUwuc3Vic3RyKEUsSyk7cmV0dXJuIEl9fSw0NTE2OihILEIpPT57'@;
put 'InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxCLnZhbGlkYXRlSW5wdXQ9Qi5JTlZBTElEX1RBQkxFX1NUUlVDVFVSRT1CLk1PUkVfSU5GTz12b2lkIDAsQi5NT1JFX0lORk89IkZvciBtb3JlIGluZm8gc2VlIGh0dHBzOi8vc2Fz'@;
put 'anMuaW8vc2FzanMtYWRhcHRlci8jcmVxdWVzdC1yZXNwb25zZSIsQi5JTlZBTElEX1RBQkxFX1NUUlVDVFVSRT0iUGFyYW1ldGVyIGRhdGEgY29udGFpbnMgaW52YWxpZCB0YWJsZSBzdHJ1Y3R1cmUuICIuY29uY2F0KEIuTU9SRV9JTkZPKSxCLnZhbGlkYXRlSW5wdXQ9ZnVuY3Rpb24oSyl7'@;
put 'aWYobnVsbD09PUspcmV0dXJue3N0YXR1czohMCxtc2c6IiJ9O2lmKCJvYmplY3QiIT09TChLKSlyZXR1cm57c3RhdHVzOiExLG1zZzpCLklOVkFMSURfVEFCTEVfU1RSVUNUVVJFfTt2YXIgSj1mdW5jdGlvbihXKXtyZXR1cm4gVy5tYXRjaCgvXlwkLiovKSYmT2JqZWN0LmtleXMoSykuaW5j'@;
put 'bHVkZXMoVy5yZXBsYWNlKC9eXCQvLCIiKSl9O2Zvcih2YXIgSSBpbiBLKXtpZighSS5tYXRjaCgvXlthLXpBLVpfXS8pJiYhSihJKSlyZXR1cm57c3RhdHVzOiExLG1zZzoiRmlyc3QgbGV0dGVyIG9mIHRhYmxlIHNob3VsZCBiZSBhbHBoYWJldCBvciB1bmRlcnNjb3JlLiJ9O2lmKCFJLm1h'@;
put 'dGNoKC9eW2EtekEtWl9dW2EtekEtWjAtOV9dKiQvKSYmIUooSSkpcmV0dXJue3N0YXR1czohMSxtc2c6IlRhYmxlIG5hbWUgc2hvdWxkIGJlIGFscGhhbnVtZXJpYy4ifTtpZihJLmxlbmd0aD4zMilyZXR1cm57c3RhdHVzOiExLG1zZzoiTWF4aW11bSBsZW5ndGggZm9yIHRhYmxlIG5hbWUg'@;
put 'Y291bGQgYmUgMzIgY2hhcmFjdGVycy4ifTtpZigiQXJyYXkiIT09TChLW0ldKSYmIUooSSkpcmV0dXJue3N0YXR1czohMSxtc2c6Qi5JTlZBTElEX1RBQkxFX1NUUlVDVFVSRX07Zm9yKHZhciBSPTAsRT1LW0ldO1I8RS5sZW5ndGg7UisrKXt2YXIgej1FW1JdO2lmKCJvYmplY3QiIT09TCh6'@;
put 'KSlyZXR1cm57c3RhdHVzOiExLG1zZzoiVGFibGUgIi5jb25jYXQoSSwiIGNvbnRhaW5zIGludmFsaWQgc3RydWN0dXJlLiAiKS5jb25jYXQoQi5NT1JFX0lORk8pfTtmb3IodmFyIGo9MCxWPU9iamVjdC5rZXlzKHopO2o8Vi5sZW5ndGg7aisrKXt2YXIgRz1WW2pdO2lmKHZvaWQgMD09PXpb'@;
put 'R10pcmV0dXJue3N0YXR1czohMSxtc2c6IkEgcm93IGluIHRhYmxlICIuY29uY2F0KEksIiBjb250YWlucyBpbnZhbGlkIHZhbHVlLiBDYW4ndCBhc3NpZ24gdW5kZWZpbmVkIHRvICIpLmNvbmNhdChHLCIuIil9fX19cmV0dXJue3N0YXR1czohMCxtc2c6IiJ9fTt2YXIgTD1mdW5jdGlvbihL'@;
put 'KXtyZXR1cm4gQXJyYXkuaXNBcnJheShLKT8iQXJyYXkiOnR5cGVvZiBLfX0sODk4MTooSCxCKT0+eyJ1c2Ugc3RyaWN0IjtCLmZyb21DYWxsYmFjaz1mdW5jdGlvbihMKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uKC4uLkspe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBL'@;
put 'W0subGVuZ3RoLTFdKXJldHVybiBuZXcgUHJvbWlzZSgoSixJKT0+e0wuY2FsbCh0aGlzLC4uLkssKFIsRSk9Pm51bGwhPVI/SShSKTpKKEUpKX0pO0wuYXBwbHkodGhpcyxLKX0sIm5hbWUiLHt2YWx1ZTpMLm5hbWV9KX0sQi5mcm9tUHJvbWlzZT1mdW5jdGlvbihMKXtyZXR1cm4gT2JqZWN0'@;
put 'LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uKC4uLkspe2NvbnN0IEo9S1tLLmxlbmd0aC0xXTtpZigiZnVuY3Rpb24iIT10eXBlb2YgSilyZXR1cm4gTC5hcHBseSh0aGlzLEspO0wuYXBwbHkodGhpcyxLLnNsaWNlKDAsLTEpKS50aGVuKEk9PkoobnVsbCxJKSxKKX0sIm5hbWUiLHt2YWx1ZTpM'@;
put 'Lm5hbWV9KX19LDI1MTE6ZnVuY3Rpb24oSCxCLEwpe3ZhciBLO0g9TC5ubWQoSCksZnVuY3Rpb24oSil7dmFyIFIsRT0yMTQ3NDgzNjQ3LHo9MzYsVj0yNixHPTM4LFc9NzAwLG5lPS9eeG4tLS8saWU9L1teXHgyMC1ceDdFXS8sbGU9L1tceDJFXHUzMDAyXHVGRjBFXHVGRjYxXS9nLGRlPXtv'@;
put 'dmVyZmxvdzoiT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MiLCJub3QtYmFzaWMiOiJJbGxlZ2FsIGlucHV0ID49IDB4ODAgKG5vdCBhIGJhc2ljIGNvZGUgcG9pbnQpIiwiaW52YWxpZC1pbnB1dCI6IkludmFsaWQgaW5wdXQifSx1ZT16LTEsY2U9TWF0'@;
put 'aC5mbG9vcixZPVN0cmluZy5mcm9tQ2hhckNvZGU7ZnVuY3Rpb24gYihTKXt0aHJvdyBSYW5nZUVycm9yKGRlW1NdKX1mdW5jdGlvbiB4KFMsUSl7Zm9yKHZhciByZT1TLmxlbmd0aCxmZT1bXTtyZS0tOylmZVtyZV09UShTW3JlXSk7cmV0dXJuIGZlfWZ1bmN0aW9uIE4oUyxRKXt2YXIgcmU9'@;
put 'Uy5zcGxpdCgiQCIpLGZlPSIiO3JldHVybiByZS5sZW5ndGg+MSYmKGZlPXJlWzBdKyJAIixTPXJlWzFdKSxmZSt4KChTPVMucmVwbGFjZShsZSwiLiIpKS5zcGxpdCgiLiIpLFEpLmpvaW4oIi4iKX1mdW5jdGlvbiBGKFMpe2Zvcih2YXIgUSxyZSxmZT1bXSxtZT0wLGtlPVMubGVuZ3RoO21l'@;
put 'PGtlOykoUT1TLmNoYXJDb2RlQXQobWUrKykpPj01NTI5NiYmUTw9NTYzMTkmJm1lPGtlPzU2MzIwPT0oNjQ1MTImKHJlPVMuY2hhckNvZGVBdChtZSsrKSkpP2ZlLnB1c2goKCgxMDIzJlEpPDwxMCkrKDEwMjMmcmUpKzY1NTM2KTooZmUucHVzaChRKSxtZS0tKTpmZS5wdXNoKFEpO3JldHVy'@;
put 'biBmZX1mdW5jdGlvbiBnKFMpe3JldHVybiB4KFMsZnVuY3Rpb24oUSl7dmFyIHJlPSIiO3JldHVybiBRPjY1NTM1JiYocmUrPVkoKFEtPTY1NTM2KT4+PjEwJjEwMjN8NTUyOTYpLFE9NTYzMjB8MTAyMyZRKSxyZStZKFEpfSkuam9pbigiIil9ZnVuY3Rpb24gQyhTLFEpe3JldHVybiBTKzIy'@;
put 'Kzc1KihTPDI2KS0oKDAhPVEpPDw1KX1mdW5jdGlvbiBNKFMsUSxyZSl7dmFyIGZlPTA7Zm9yKFM9cmU/Y2UoUy9XKTpTPj4xLFMrPWNlKFMvUSk7Uz51ZSpWPj4xO2ZlKz16KVM9Y2UoUy91ZSk7cmV0dXJuIGNlKGZlKyh1ZSsxKSpTLyhTK0cpKX1mdW5jdGlvbiB5KFMpe3ZhciBRLHJlLGZl'@;
put 'LG1lLGtlLFRlLFBlLEZlLE5lLExlLEJlLEhlPVtdLFFlPVMubGVuZ3RoLG10PTAsS2U9MTI4LHdlPTcyO2ZvcigocmU9Uy5sYXN0SW5kZXhPZigiLSIpKTwwJiYocmU9MCksZmU9MDtmZTxyZTsrK2ZlKVMuY2hhckNvZGVBdChmZSk+PTEyOCYmYigibm90LWJhc2ljIiksSGUucHVzaChTLmNo'@;
put 'YXJDb2RlQXQoZmUpKTtmb3IobWU9cmU+MD9yZSsxOjA7bWU8UWU7KXtmb3Ioa2U9bXQsVGU9MSxQZT16O21lPj1RZSYmYigiaW52YWxpZC1pbnB1dCIpLCgoRmU9KEJlPVMuY2hhckNvZGVBdChtZSsrKSktNDg8MTA/QmUtMjI6QmUtNjU8MjY/QmUtNjU6QmUtOTc8MjY/QmUtOTc6eik+PXp8'@;
put 'fEZlPmNlKChFLW10KS9UZSkpJiZiKCJvdmVyZmxvdyIpLG10Kz1GZSpUZSwhKEZlPChOZT1QZTw9d2U/MTpQZT49d2UrVj9WOlBlLXdlKSk7UGUrPXopVGU+Y2UoRS8oTGU9ei1OZSkpJiZiKCJvdmVyZmxvdyIpLFRlKj1MZTt3ZT1NKG10LWtlLFE9SGUubGVuZ3RoKzEsMD09a2UpLGNlKG10'@;
put 'L1EpPkUtS2UmJmIoIm92ZXJmbG93IiksS2UrPWNlKG10L1EpLG10JT1RLEhlLnNwbGljZShtdCsrLDAsS2UpfXJldHVybiBnKEhlKX1mdW5jdGlvbiBwKFMpe3ZhciBRLHJlLGZlLG1lLGtlLFRlLFBlLEZlLE5lLExlLEJlLEhlLFFlLG10LEtlLHdlPVtdO2ZvcihIZT0oUz1GKFMpKS5sZW5n'@;
put 'dGgsUT0xMjgscmU9MCxrZT03MixUZT0wO1RlPEhlOysrVGUpKEJlPVNbVGVdKTwxMjgmJndlLnB1c2goWShCZSkpO2ZvcihmZT1tZT13ZS5sZW5ndGgsbWUmJndlLnB1c2goIi0iKTtmZTxIZTspe2ZvcihQZT1FLFRlPTA7VGU8SGU7KytUZSkoQmU9U1tUZV0pPj1RJiZCZTxQZSYmKFBlPUJl'@;
put 'KTtmb3IoUGUtUT5jZSgoRS1yZSkvKFFlPWZlKzEpKSYmYigib3ZlcmZsb3ciKSxyZSs9KFBlLVEpKlFlLFE9UGUsVGU9MDtUZTxIZTsrK1RlKWlmKChCZT1TW1RlXSk8USYmKytyZT5FJiZiKCJvdmVyZmxvdyIpLEJlPT1RKXtmb3IoRmU9cmUsTmU9ejshKEZlPChMZT1OZTw9a2U/MTpOZT49'@;
put 'a2UrVj9WOk5lLWtlKSk7TmUrPXopd2UucHVzaChZKEMoTGUrKEtlPUZlLUxlKSUobXQ9ei1MZSksMCkpKSxGZT1jZShLZS9tdCk7d2UucHVzaChZKEMoRmUsMCkpKSxrZT1NKHJlLFFlLGZlPT1tZSkscmU9MCwrK2ZlfSsrcmUsKytRfXJldHVybiB3ZS5qb2luKCIiKX1SPXt2ZXJzaW9uOiIx'@;
put 'LjMuMiIsdWNzMjp7ZGVjb2RlOkYsZW5jb2RlOmd9LGRlY29kZTp5LGVuY29kZTpwLHRvQVNDSUk6ZnVuY3Rpb24oUyl7cmV0dXJuIE4oUyxmdW5jdGlvbihRKXtyZXR1cm4gaWUudGVzdChRKT8ieG4tLSIrcChRKTpRfSl9LHRvVW5pY29kZTpmdW5jdGlvbihTKXtyZXR1cm4gTihTLGZ1bmN0'@;
put 'aW9uKFEpe3JldHVybiBuZS50ZXN0KFEpP3koUS5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKTpRfSl9fSx2b2lkIDA9PT0oSz1mdW5jdGlvbigpe3JldHVybiBSfS5jYWxsKEIsTCxCLEgpKXx8KEguZXhwb3J0cz1LKX0oKX0sODU3NTooSCxCLEwpPT57InVzZSBzdHJpY3QiO3ZhciBLPUwoMjUx'@;
put 'MSksSj1MKDI1MDIpO2Z1bmN0aW9uIEkoKXt0aGlzLnByb3RvY29sPW51bGwsdGhpcy5zbGFzaGVzPW51bGwsdGhpcy5hdXRoPW51bGwsdGhpcy5ob3N0PW51bGwsdGhpcy5wb3J0PW51bGwsdGhpcy5ob3N0bmFtZT1udWxsLHRoaXMuaGFzaD1udWxsLHRoaXMuc2VhcmNoPW51bGwsdGhpcy5x'@;
put 'dWVyeT1udWxsLHRoaXMucGF0aG5hbWU9bnVsbCx0aGlzLnBhdGg9bnVsbCx0aGlzLmhyZWY9bnVsbH1CLlFjPWRlO3ZhciBSPS9eKFthLXowLTkuKy1dKzopL2ksRT0vOlswLTldKiQvLHo9L14oXC9cLz8oPyFcLylbXlw/XHNdKikoXD9bXlxzXSopPyQvLGo9WyJ7IiwifSIsInwiLCJcXCIs'@;
put 'Il4iLCJgIl0uY29uY2F0KFsiPCIsIj4iLCciJywiYCIsIiAiLCJcciIsIlxuIiwiXHQiXSksVj1bIiciXS5jb25jYXQoaiksRz1bIiUiLCIvIiwiPyIsIjsiLCIjIl0uY29uY2F0KFYpLFc9WyIvIiwiPyIsIiMiXSxVPS9eWythLXowLTlBLVpfLV17MCw2M30kLyxxPS9eKFsrYS16MC05QS1a'@;
put 'Xy1dezAsNjN9KSguKikkLyx0ZT17amF2YXNjcmlwdDohMCwiamF2YXNjcmlwdDoiOiEwfSxuZT17amF2YXNjcmlwdDohMCwiamF2YXNjcmlwdDoiOiEwfSxpZT17aHR0cDohMCxodHRwczohMCxmdHA6ITAsZ29waGVyOiEwLGZpbGU6ITAsImh0dHA6IjohMCwiaHR0cHM6IjohMCwiZnRwOiI6'@;
put 'ITAsImdvcGhlcjoiOiEwLCJmaWxlOiI6ITB9LGxlPUwoNzY3Myk7ZnVuY3Rpb24gZGUodWUsY2UsWSl7aWYodWUmJkouaXNPYmplY3QodWUpJiZ1ZSBpbnN0YW5jZW9mIEkpcmV0dXJuIHVlO3ZhciBiPW5ldyBJO3JldHVybiBiLnBhcnNlKHVlLGNlLFkpLGJ9SS5wcm90b3R5cGUucGFyc2U9'@;
put 'ZnVuY3Rpb24odWUsY2UsWSl7aWYoIUouaXNTdHJpbmcodWUpKXRocm93IG5ldyBUeXBlRXJyb3IoIlBhcmFtZXRlciAndXJsJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgIit0eXBlb2YgdWUpO3ZhciBiPXVlLmluZGV4T2YoIj8iKSx4PS0xIT09YiYmYjx1ZS5pbmRleE9mKCIjIik/Ij8iOiIj'@;
put 'IixOPXVlLnNwbGl0KHgpO05bMF09TlswXS5yZXBsYWNlKC9cXC9nLCIvIik7dmFyIEY9dWU9Ti5qb2luKHgpO2lmKEY9Ri50cmltKCksIVkmJjE9PT11ZS5zcGxpdCgiIyIpLmxlbmd0aCl7dmFyIGc9ei5leGVjKEYpO2lmKGcpcmV0dXJuIHRoaXMucGF0aD1GLHRoaXMuaHJlZj1GLHRoaXMu'@;
put 'cGF0aG5hbWU9Z1sxXSxnWzJdPyh0aGlzLnNlYXJjaD1nWzJdLHRoaXMucXVlcnk9Y2U/bGUucGFyc2UodGhpcy5zZWFyY2guc3Vic3RyKDEpKTp0aGlzLnNlYXJjaC5zdWJzdHIoMSkpOmNlJiYodGhpcy5zZWFyY2g9IiIsdGhpcy5xdWVyeT17fSksdGhpc312YXIgQz1SLmV4ZWMoRik7aWYo'@;
put 'Qyl7dmFyIE09KEM9Q1swXSkudG9Mb3dlckNhc2UoKTt0aGlzLnByb3RvY29sPU0sRj1GLnN1YnN0cihDLmxlbmd0aCl9aWYoWXx8Q3x8Ri5tYXRjaCgvXlwvXC9bXkBcL10rQFteQFwvXSsvKSl7dmFyIHk9Ii8vIj09PUYuc3Vic3RyKDAsMik7IXl8fEMmJm5lW0NdfHwoRj1GLnN1YnN0cigy'@;
put 'KSx0aGlzLnNsYXNoZXM9ITApfWlmKCFuZVtDXSYmKHl8fEMmJiFpZVtDXSkpe2Zvcih2YXIgcCxTLFE9LTEscmU9MDtyZTxXLmxlbmd0aDtyZSsrKS0xIT09KGZlPUYuaW5kZXhPZihXW3JlXSkpJiYoLTE9PT1RfHxmZTxRKSYmKFE9ZmUpO2ZvcigtMSE9PShTPS0xPT09UT9GLmxhc3RJbmRl'@;
put 'eE9mKCJAIik6Ri5sYXN0SW5kZXhPZigiQCIsUSkpJiYocD1GLnNsaWNlKDAsUyksRj1GLnNsaWNlKFMrMSksdGhpcy5hdXRoPWRlY29kZVVSSUNvbXBvbmVudChwKSksUT0tMSxyZT0wO3JlPEcubGVuZ3RoO3JlKyspe3ZhciBmZTstMSE9PShmZT1GLmluZGV4T2YoR1tyZV0pKSYmKC0xPT09'@;
put 'UXx8ZmU8USkmJihRPWZlKX0tMT09PVEmJihRPUYubGVuZ3RoKSx0aGlzLmhvc3Q9Ri5zbGljZSgwLFEpLEY9Ri5zbGljZShRKSx0aGlzLnBhcnNlSG9zdCgpLHRoaXMuaG9zdG5hbWU9dGhpcy5ob3N0bmFtZXx8IiI7dmFyIG1lPSJbIj09PXRoaXMuaG9zdG5hbWVbMF0mJiJdIj09PXRoaXMu'@;
put 'aG9zdG5hbWVbdGhpcy5ob3N0bmFtZS5sZW5ndGgtMV07aWYoIW1lKWZvcih2YXIga2U9dGhpcy5ob3N0bmFtZS5zcGxpdCgvXC4vKSxUZT0ocmU9MCxrZS5sZW5ndGgpO3JlPFRlO3JlKyspe3ZhciBQZT1rZVtyZV07aWYoUGUmJiFQZS5tYXRjaChVKSl7Zm9yKHZhciBGZT0iIixOZT0wLExl'@;
put 'PVBlLmxlbmd0aDtOZTxMZTtOZSsrKVBlLmNoYXJDb2RlQXQoTmUpPjEyNz9GZSs9IngiOkZlKz1QZVtOZV07aWYoIUZlLm1hdGNoKFUpKXt2YXIgQmU9a2Uuc2xpY2UoMCxyZSksSGU9a2Uuc2xpY2UocmUrMSksUWU9UGUubWF0Y2gocSk7UWUmJihCZS5wdXNoKFFlWzFdKSxIZS51bnNoaWZ0'@;
put 'KFFlWzJdKSksSGUubGVuZ3RoJiYoRj0iLyIrSGUuam9pbigiLiIpK0YpLHRoaXMuaG9zdG5hbWU9QmUuam9pbigiLiIpO2JyZWFrfX19dGhpcy5ob3N0bmFtZT10aGlzLmhvc3RuYW1lLmxlbmd0aD4yNTU/IiI6dGhpcy5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpLG1lfHwodGhpcy5ob3N0bmFt'@;
put 'ZT1LLnRvQVNDSUkodGhpcy5ob3N0bmFtZSkpO3ZhciBtdD10aGlzLnBvcnQ/IjoiK3RoaXMucG9ydDoiIjt0aGlzLmhvc3Q9KHRoaXMuaG9zdG5hbWV8fCIiKSttdCx0aGlzLmhyZWYrPXRoaXMuaG9zdCxtZSYmKHRoaXMuaG9zdG5hbWU9dGhpcy5ob3N0bmFtZS5zdWJzdHIoMSx0aGlzLmhv'@;
put 'c3RuYW1lLmxlbmd0aC0yKSwiLyIhPT1GWzBdJiYoRj0iLyIrRikpfWlmKCF0ZVtNXSlmb3IocmU9MCxUZT1WLmxlbmd0aDtyZTxUZTtyZSsrKXt2YXIgd2U9VltyZV07aWYoLTEhPT1GLmluZGV4T2Yod2UpKXt2YXIgSWU9ZW5jb2RlVVJJQ29tcG9uZW50KHdlKTtJZT09PXdlJiYoSWU9ZXNj'@;
put 'YXBlKHdlKSksRj1GLnNwbGl0KHdlKS5qb2luKEllKX19dmFyIE9lPUYuaW5kZXhPZigiIyIpOy0xIT09T2UmJih0aGlzLmhhc2g9Ri5zdWJzdHIoT2UpLEY9Ri5zbGljZSgwLE9lKSk7dmFyIGV0PUYuaW5kZXhPZigiPyIpO3JldHVybi0xIT09ZXQ/KHRoaXMuc2VhcmNoPUYuc3Vic3RyKGV0'@;
put 'KSx0aGlzLnF1ZXJ5PUYuc3Vic3RyKGV0KzEpLGNlJiYodGhpcy5xdWVyeT1sZS5wYXJzZSh0aGlzLnF1ZXJ5KSksRj1GLnNsaWNlKDAsZXQpKTpjZSYmKHRoaXMuc2VhcmNoPSIiLHRoaXMucXVlcnk9e30pLEYmJih0aGlzLnBhdGhuYW1lPUYpLGllW01dJiZ0aGlzLmhvc3RuYW1lJiYhdGhp'@;
put 'cy5wYXRobmFtZSYmKHRoaXMucGF0aG5hbWU9Ii8iKSwodGhpcy5wYXRobmFtZXx8dGhpcy5zZWFyY2gpJiYodGhpcy5wYXRoPShtdD10aGlzLnBhdGhuYW1lfHwiIikrKHRoaXMuc2VhcmNofHwiIikpLHRoaXMuaHJlZj10aGlzLmZvcm1hdCgpLHRoaXN9LEkucHJvdG90eXBlLmZvcm1hdD1m'@;
put 'dW5jdGlvbigpe3ZhciB1ZT10aGlzLmF1dGh8fCIiO3VlJiYodWU9KHVlPWVuY29kZVVSSUNvbXBvbmVudCh1ZSkpLnJlcGxhY2UoLyUzQS9pLCI6IiksdWUrPSJAIik7dmFyIGNlPXRoaXMucHJvdG9jb2x8fCIiLFk9dGhpcy5wYXRobmFtZXx8IiIsYj10aGlzLmhhc2h8fCIiLHg9ITEsTj0i'@;
put 'Ijt0aGlzLmhvc3Q/eD11ZSt0aGlzLmhvc3Q6dGhpcy5ob3N0bmFtZSYmKHg9dWUrKC0xPT09dGhpcy5ob3N0bmFtZS5pbmRleE9mKCI6Iik/dGhpcy5ob3N0bmFtZToiWyIrdGhpcy5ob3N0bmFtZSsiXSIpLHRoaXMucG9ydCYmKHgrPSI6Iit0aGlzLnBvcnQpKSx0aGlzLnF1ZXJ5JiZKLmlz'@;
put 'T2JqZWN0KHRoaXMucXVlcnkpJiZPYmplY3Qua2V5cyh0aGlzLnF1ZXJ5KS5sZW5ndGgmJihOPWxlLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5KSk7dmFyIEY9dGhpcy5zZWFyY2h8fE4mJiI/IitOfHwiIjtyZXR1cm4gY2UmJiI6IiE9PWNlLnN1YnN0cigtMSkmJihjZSs9IjoiKSx0aGlzLnNsYXNo'@;
put 'ZXN8fCghY2V8fGllW2NlXSkmJiExIT09eD8oeD0iLy8iKyh4fHwiIiksWSYmIi8iIT09WS5jaGFyQXQoMCkmJihZPSIvIitZKSk6eHx8KHg9IiIpLGImJiIjIiE9PWIuY2hhckF0KDApJiYoYj0iIyIrYiksRiYmIj8iIT09Ri5jaGFyQXQoMCkmJihGPSI/IitGKSxjZSt4KyhZPVkucmVwbGFj'@;
put 'ZSgvWz8jXS9nLGZ1bmN0aW9uKGcpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoZyl9KSkrKEY9Ri5yZXBsYWNlKCIjIiwiJTIzIikpK2J9LEkucHJvdG90eXBlLnJlc29sdmU9ZnVuY3Rpb24odWUpe3JldHVybiB0aGlzLnJlc29sdmVPYmplY3QoZGUodWUsITEsITApKS5mb3JtYXQoKX0s'@;
put 'SS5wcm90b3R5cGUucmVzb2x2ZU9iamVjdD1mdW5jdGlvbih1ZSl7aWYoSi5pc1N0cmluZyh1ZSkpe3ZhciBjZT1uZXcgSTtjZS5wYXJzZSh1ZSwhMSwhMCksdWU9Y2V9Zm9yKHZhciBZPW5ldyBJLGI9T2JqZWN0LmtleXModGhpcykseD0wO3g8Yi5sZW5ndGg7eCsrKXt2YXIgTj1iW3hdO1lb'@;
put 'Tl09dGhpc1tOXX1pZihZLmhhc2g9dWUuaGFzaCwiIj09PXVlLmhyZWYpcmV0dXJuIFkuaHJlZj1ZLmZvcm1hdCgpLFk7aWYodWUuc2xhc2hlcyYmIXVlLnByb3RvY29sKXtmb3IodmFyIEY9T2JqZWN0LmtleXModWUpLGc9MDtnPEYubGVuZ3RoO2crKyl7dmFyIEM9RltnXTsicHJvdG9jb2wi'@;
put 'IT09QyYmKFlbQ109dWVbQ10pfXJldHVybiBpZVtZLnByb3RvY29sXSYmWS5ob3N0bmFtZSYmIVkucGF0aG5hbWUmJihZLnBhdGg9WS5wYXRobmFtZT0iLyIpLFkuaHJlZj1ZLmZvcm1hdCgpLFl9aWYodWUucHJvdG9jb2wmJnVlLnByb3RvY29sIT09WS5wcm90b2NvbCl7aWYoIWllW3VlLnBy'@;
put 'b3RvY29sXSl7Zm9yKHZhciBNPU9iamVjdC5rZXlzKHVlKSx5PTA7eTxNLmxlbmd0aDt5Kyspe3ZhciBwPU1beV07WVtwXT11ZVtwXX1yZXR1cm4gWS5ocmVmPVkuZm9ybWF0KCksWX1pZihZLnByb3RvY29sPXVlLnByb3RvY29sLHVlLmhvc3R8fG5lW3VlLnByb3RvY29sXSlZLnBhdGhuYW1l'@;
put 'PXVlLnBhdGhuYW1lO2Vsc2V7Zm9yKHZhciBTPSh1ZS5wYXRobmFtZXx8IiIpLnNwbGl0KCIvIik7Uy5sZW5ndGgmJiEodWUuaG9zdD1TLnNoaWZ0KCkpOyk7dWUuaG9zdHx8KHVlLmhvc3Q9IiIpLHVlLmhvc3RuYW1lfHwodWUuaG9zdG5hbWU9IiIpLCIiIT09U1swXSYmUy51bnNoaWZ0KCIi'@;
put 'KSxTLmxlbmd0aDwyJiZTLnVuc2hpZnQoIiIpLFkucGF0aG5hbWU9Uy5qb2luKCIvIil9cmV0dXJuIFkuc2VhcmNoPXVlLnNlYXJjaCxZLnF1ZXJ5PXVlLnF1ZXJ5LFkuaG9zdD11ZS5ob3N0fHwiIixZLmF1dGg9dWUuYXV0aCxZLmhvc3RuYW1lPXVlLmhvc3RuYW1lfHx1ZS5ob3N0LFkucG9y'@;
put 'dD11ZS5wb3J0LChZLnBhdGhuYW1lfHxZLnNlYXJjaCkmJihZLnBhdGg9KFkucGF0aG5hbWV8fCIiKSsoWS5zZWFyY2h8fCIiKSksWS5zbGFzaGVzPVkuc2xhc2hlc3x8dWUuc2xhc2hlcyxZLmhyZWY9WS5mb3JtYXQoKSxZfXZhciBmZT1ZLnBhdGhuYW1lJiYiLyI9PT1ZLnBhdGhuYW1lLmNo'@;
put 'YXJBdCgwKSxtZT11ZS5ob3N0fHx1ZS5wYXRobmFtZSYmIi8iPT09dWUucGF0aG5hbWUuY2hhckF0KDApLGtlPW1lfHxmZXx8WS5ob3N0JiZ1ZS5wYXRobmFtZSxUZT1rZSxQZT1ZLnBhdGhuYW1lJiZZLnBhdGhuYW1lLnNwbGl0KCIvIil8fFtdLEZlPShTPXVlLnBhdGhuYW1lJiZ1ZS5wYXRo'@;
put 'bmFtZS5zcGxpdCgiLyIpfHxbXSxZLnByb3RvY29sJiYhaWVbWS5wcm90b2NvbF0pO2lmKEZlJiYoWS5ob3N0bmFtZT0iIixZLnBvcnQ9bnVsbCxZLmhvc3QmJigiIj09PVBlWzBdP1BlWzBdPVkuaG9zdDpQZS51bnNoaWZ0KFkuaG9zdCkpLFkuaG9zdD0iIix1ZS5wcm90b2NvbCYmKHVlLmhv'@;
put 'c3RuYW1lPW51bGwsdWUucG9ydD1udWxsLHVlLmhvc3QmJigiIj09PVNbMF0/U1swXT11ZS5ob3N0OlMudW5zaGlmdCh1ZS5ob3N0KSksdWUuaG9zdD1udWxsKSxrZT1rZSYmKCIiPT09U1swXXx8IiI9PT1QZVswXSkpLG1lKVkuaG9zdD11ZS5ob3N0fHwiIj09PXVlLmhvc3Q/dWUuaG9zdDpZ'@;
put 'Lmhvc3QsWS5ob3N0bmFtZT11ZS5ob3N0bmFtZXx8IiI9PT11ZS5ob3N0bmFtZT91ZS5ob3N0bmFtZTpZLmhvc3RuYW1lLFkuc2VhcmNoPXVlLnNlYXJjaCxZLnF1ZXJ5PXVlLnF1ZXJ5LFBlPVM7ZWxzZSBpZihTLmxlbmd0aClQZXx8KFBlPVtdKSxQZS5wb3AoKSxQZT1QZS5jb25jYXQoUyks'@;
put 'WS5zZWFyY2g9dWUuc2VhcmNoLFkucXVlcnk9dWUucXVlcnk7ZWxzZSBpZighSi5pc051bGxPclVuZGVmaW5lZCh1ZS5zZWFyY2gpKXJldHVybiBGZSYmKFkuaG9zdG5hbWU9WS5ob3N0PVBlLnNoaWZ0KCksKFFlPSEhKFkuaG9zdCYmWS5ob3N0LmluZGV4T2YoIkAiKT4wKSYmWS5ob3N0LnNw'@;
put 'bGl0KCJAIikpJiYoWS5hdXRoPVFlLnNoaWZ0KCksWS5ob3N0PVkuaG9zdG5hbWU9UWUuc2hpZnQoKSkpLFkuc2VhcmNoPXVlLnNlYXJjaCxZLnF1ZXJ5PXVlLnF1ZXJ5LEouaXNOdWxsKFkucGF0aG5hbWUpJiZKLmlzTnVsbChZLnNlYXJjaCl8fChZLnBhdGg9KFkucGF0aG5hbWU/WS5wYXRo'@;
put 'bmFtZToiIikrKFkuc2VhcmNoP1kuc2VhcmNoOiIiKSksWS5ocmVmPVkuZm9ybWF0KCksWTtpZighUGUubGVuZ3RoKXJldHVybiBZLnBhdGhuYW1lPW51bGwsWS5wYXRoPVkuc2VhcmNoPyIvIitZLnNlYXJjaDpudWxsLFkuaHJlZj1ZLmZvcm1hdCgpLFk7Zm9yKHZhciBOZT1QZS5zbGljZSgt'@;
put 'MSlbMF0sTGU9KFkuaG9zdHx8dWUuaG9zdHx8UGUubGVuZ3RoPjEpJiYoIi4iPT09TmV8fCIuLiI9PT1OZSl8fCIiPT09TmUsQmU9MCxIZT1QZS5sZW5ndGg7SGU+PTA7SGUtLSkiLiI9PT0oTmU9UGVbSGVdKT9QZS5zcGxpY2UoSGUsMSk6Ii4uIj09PU5lPyhQZS5zcGxpY2UoSGUsMSksQmUr'@;
put 'Kyk6QmUmJihQZS5zcGxpY2UoSGUsMSksQmUtLSk7aWYoIWtlJiYhVGUpZm9yKDtCZS0tO0JlKVBlLnVuc2hpZnQoIi4uIik7IWtlfHwiIj09PVBlWzBdfHxQZVswXSYmIi8iPT09UGVbMF0uY2hhckF0KDApfHxQZS51bnNoaWZ0KCIiKSxMZSYmIi8iIT09UGUuam9pbigiLyIpLnN1YnN0cigt'@;
put 'MSkmJlBlLnB1c2goIiIpO3ZhciBRZSxtdD0iIj09PVBlWzBdfHxQZVswXSYmIi8iPT09UGVbMF0uY2hhckF0KDApO3JldHVybiBGZSYmKFkuaG9zdG5hbWU9WS5ob3N0PW10PyIiOlBlLmxlbmd0aD9QZS5zaGlmdCgpOiIiLChRZT0hIShZLmhvc3QmJlkuaG9zdC5pbmRleE9mKCJAIik+MCkm'@;
put 'JlkuaG9zdC5zcGxpdCgiQCIpKSYmKFkuYXV0aD1RZS5zaGlmdCgpLFkuaG9zdD1ZLmhvc3RuYW1lPVFlLnNoaWZ0KCkpKSwoa2U9a2V8fFkuaG9zdCYmUGUubGVuZ3RoKSYmIW10JiZQZS51bnNoaWZ0KCIiKSxQZS5sZW5ndGg/WS5wYXRobmFtZT1QZS5qb2luKCIvIik6KFkucGF0aG5hbWU9'@;
put 'bnVsbCxZLnBhdGg9bnVsbCksSi5pc051bGwoWS5wYXRobmFtZSkmJkouaXNOdWxsKFkuc2VhcmNoKXx8KFkucGF0aD0oWS5wYXRobmFtZT9ZLnBhdGhuYW1lOiIiKSsoWS5zZWFyY2g/WS5zZWFyY2g6IiIpKSxZLmF1dGg9dWUuYXV0aHx8WS5hdXRoLFkuc2xhc2hlcz1ZLnNsYXNoZXN8fHVl'@;
put 'LnNsYXNoZXMsWS5ocmVmPVkuZm9ybWF0KCksWX0sSS5wcm90b3R5cGUucGFyc2VIb3N0PWZ1bmN0aW9uKCl7dmFyIHVlPXRoaXMuaG9zdCxjZT1FLmV4ZWModWUpO2NlJiYoIjoiIT09KGNlPWNlWzBdKSYmKHRoaXMucG9ydD1jZS5zdWJzdHIoMSkpLHVlPXVlLnN1YnN0cigwLHVlLmxlbmd0'@;
put 'aC1jZS5sZW5ndGgpKSx1ZSYmKHRoaXMuaG9zdG5hbWU9dWUpfX0sMjUwMjpIPT57InVzZSBzdHJpY3QiO0guZXhwb3J0cz17aXNTdHJpbmc6ZnVuY3Rpb24oQil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBCfSxpc09iamVjdDpmdW5jdGlvbihCKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIEIm'@;
put 'Jm51bGwhPT1CfSxpc051bGw6ZnVuY3Rpb24oQil7cmV0dXJuIG51bGw9PT1CfSxpc051bGxPclVuZGVmaW5lZDpmdW5jdGlvbihCKXtyZXR1cm4gbnVsbD09Qn19fSw0OTI3OihILEIsTCk9Pnt2YXIgSz1MKDUxMDgpO2Z1bmN0aW9uIEooSSl7dHJ5e2lmKCFMLmcubG9jYWxTdG9yYWdlKXJl'@;
put 'dHVybiExfWNhdGNoe3JldHVybiExfXZhciBSPUwuZy5sb2NhbFN0b3JhZ2VbSV07cmV0dXJuIG51bGwhPVImJiJ0cnVlIj09PVN0cmluZyhSKS50b0xvd2VyQ2FzZSgpfUguZXhwb3J0cz1mdW5jdGlvbihJLFIpe2lmKEooIm5vRGVwcmVjYXRpb24iKSlyZXR1cm4gSTt2YXIgRT0hMTtyZXR1'@;
put 'cm4gZnVuY3Rpb24oKXtpZighRSl7aWYoSigidGhyb3dEZXByZWNhdGlvbiIpKXRocm93IG5ldyBFcnJvcihSKTtKKCJ0cmFjZURlcHJlY2F0aW9uIik/Sy50cmFjZShSKTpLLndhcm4oUiksRT0hMH1yZXR1cm4gSS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX0sMzg0Okg9PntILmV4cG9ydHM9'@;
put 'ZnVuY3Rpb24oQil7cmV0dXJuIEImJiJvYmplY3QiPT10eXBlb2YgQiYmImZ1bmN0aW9uIj09dHlwZW9mIEIuY29weSYmImZ1bmN0aW9uIj09dHlwZW9mIEIuZmlsbCYmImZ1bmN0aW9uIj09dHlwZW9mIEIucmVhZFVJbnQ4fX0sNTk1NTooSCxCLEwpPT57InVzZSBzdHJpY3QiO3ZhciBLPUwo'@;
put 'MjU4NCksSj1MKDg2NjIpLEk9TCg2NDMwKSxSPUwoNTY5Mik7ZnVuY3Rpb24gRShRKXtyZXR1cm4gUS5jYWxsLmJpbmQoUSl9dmFyIHo9dHlwZW9mIEJpZ0ludDwidSIsaj10eXBlb2YgU3ltYm9sPCJ1IixWPUUoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyksRz1FKE51bWJlci5wcm90b3R5'@;
put 'cGUudmFsdWVPZiksVz1FKFN0cmluZy5wcm90b3R5cGUudmFsdWVPZiksVT1FKEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YpO2lmKHopdmFyIHE9RShCaWdJbnQucHJvdG90eXBlLnZhbHVlT2YpO2lmKGopdmFyIHRlPUUoU3ltYm9sLnByb3RvdHlwZS52YWx1ZU9mKTtmdW5jdGlvbiBuZShR'@;
put 'LHJlKXtpZigib2JqZWN0IiE9dHlwZW9mIFEpcmV0dXJuITE7dHJ5e3JldHVybiByZShRKSwhMH1jYXRjaHtyZXR1cm4hMX19ZnVuY3Rpb24gaWUoUSl7cmV0dXJuIltvYmplY3QgTWFwXSI9PT1WKFEpfWZ1bmN0aW9uIGxlKFEpe3JldHVybiJbb2JqZWN0IFNldF0iPT09VihRKX1mdW5jdGlv'@;
put 'biBkZShRKXtyZXR1cm4iW29iamVjdCBXZWFrTWFwXSI9PT1WKFEpfWZ1bmN0aW9uIHVlKFEpe3JldHVybiJbb2JqZWN0IFdlYWtTZXRdIj09PVYoUSl9ZnVuY3Rpb24gY2UoUSl7cmV0dXJuIltvYmplY3QgQXJyYXlCdWZmZXJdIj09PVYoUSl9ZnVuY3Rpb24gWShRKXtyZXR1cm4gdHlwZW9m'@;
put 'IEFycmF5QnVmZmVyPCJ1IiYmKGNlLndvcmtpbmc/Y2UoUSk6USBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKX1mdW5jdGlvbiBiKFEpe3JldHVybiJbb2JqZWN0IERhdGFWaWV3XSI9PT1WKFEpfWZ1bmN0aW9uIHgoUSl7cmV0dXJuIHR5cGVvZiBEYXRhVmlldzwidSImJihiLndvcmtpbmc/YihR'@;
put 'KTpRIGluc3RhbmNlb2YgRGF0YVZpZXcpfUIuaXNBcmd1bWVudHNPYmplY3Q9SyxCLmlzR2VuZXJhdG9yRnVuY3Rpb249SixCLmlzVHlwZWRBcnJheT1SLEIuaXNQcm9taXNlPWZ1bmN0aW9uKFEpe3JldHVybiB0eXBlb2YgUHJvbWlzZTwidSImJlEgaW5zdGFuY2VvZiBQcm9taXNlfHxudWxs'@;
put 'IT09USYmIm9iamVjdCI9PXR5cGVvZiBRJiYiZnVuY3Rpb24iPT10eXBlb2YgUS50aGVuJiYiZnVuY3Rpb24iPT10eXBlb2YgUS5jYXRjaH0sQi5pc0FycmF5QnVmZmVyVmlldz1mdW5jdGlvbihRKXtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3P0Fy'@;
put 'cmF5QnVmZmVyLmlzVmlldyhRKTpSKFEpfHx4KFEpfSxCLmlzVWludDhBcnJheT1mdW5jdGlvbihRKXtyZXR1cm4iVWludDhBcnJheSI9PT1JKFEpfSxCLmlzVWludDhDbGFtcGVkQXJyYXk9ZnVuY3Rpb24oUSl7cmV0dXJuIlVpbnQ4Q2xhbXBlZEFycmF5Ij09PUkoUSl9LEIuaXNVaW50MTZB'@;
put 'cnJheT1mdW5jdGlvbihRKXtyZXR1cm4iVWludDE2QXJyYXkiPT09SShRKX0sQi5pc1VpbnQzMkFycmF5PWZ1bmN0aW9uKFEpe3JldHVybiJVaW50MzJBcnJheSI9PT1JKFEpfSxCLmlzSW50OEFycmF5PWZ1bmN0aW9uKFEpe3JldHVybiJJbnQ4QXJyYXkiPT09SShRKX0sQi5pc0ludDE2QXJy'@;
put 'YXk9ZnVuY3Rpb24oUSl7cmV0dXJuIkludDE2QXJyYXkiPT09SShRKX0sQi5pc0ludDMyQXJyYXk9ZnVuY3Rpb24oUSl7cmV0dXJuIkludDMyQXJyYXkiPT09SShRKX0sQi5pc0Zsb2F0MzJBcnJheT1mdW5jdGlvbihRKXtyZXR1cm4iRmxvYXQzMkFycmF5Ij09PUkoUSl9LEIuaXNGbG9hdDY0'@;
put 'QXJyYXk9ZnVuY3Rpb24oUSl7cmV0dXJuIkZsb2F0NjRBcnJheSI9PT1JKFEpfSxCLmlzQmlnSW50NjRBcnJheT1mdW5jdGlvbihRKXtyZXR1cm4iQmlnSW50NjRBcnJheSI9PT1JKFEpfSxCLmlzQmlnVWludDY0QXJyYXk9ZnVuY3Rpb24oUSl7cmV0dXJuIkJpZ1VpbnQ2NEFycmF5Ij09PUko'@;
put 'USl9LGllLndvcmtpbmc9dHlwZW9mIE1hcDwidSImJmllKG5ldyBNYXApLEIuaXNNYXA9ZnVuY3Rpb24oUSl7cmV0dXJuIHR5cGVvZiBNYXA8InUiJiYoaWUud29ya2luZz9pZShRKTpRIGluc3RhbmNlb2YgTWFwKX0sbGUud29ya2luZz10eXBlb2YgU2V0PCJ1IiYmbGUobmV3IFNldCksQi5p'@;
put 'c1NldD1mdW5jdGlvbihRKXtyZXR1cm4gdHlwZW9mIFNldDwidSImJihsZS53b3JraW5nP2xlKFEpOlEgaW5zdGFuY2VvZiBTZXQpfSxkZS53b3JraW5nPXR5cGVvZiBXZWFrTWFwPCJ1IiYmZGUobmV3IFdlYWtNYXApLEIuaXNXZWFrTWFwPWZ1bmN0aW9uKFEpe3JldHVybiB0eXBlb2YgV2Vh'@;
put 'a01hcDwidSImJihkZS53b3JraW5nP2RlKFEpOlEgaW5zdGFuY2VvZiBXZWFrTWFwKX0sdWUud29ya2luZz10eXBlb2YgV2Vha1NldDwidSImJnVlKG5ldyBXZWFrU2V0KSxCLmlzV2Vha1NldD1mdW5jdGlvbihRKXtyZXR1cm4gdWUoUSl9LGNlLndvcmtpbmc9dHlwZW9mIEFycmF5QnVmZmVy'@;
put 'PCJ1IiYmY2UobmV3IEFycmF5QnVmZmVyKSxCLmlzQXJyYXlCdWZmZXI9WSxiLndvcmtpbmc9dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmdHlwZW9mIERhdGFWaWV3PCJ1IiYmYihuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDEpLDAsMSkpLEIuaXNEYXRhVmlldz14O3ZhciBOPXR5cGVv'@;
put 'ZiBTaGFyZWRBcnJheUJ1ZmZlcjwidSI/U2hhcmVkQXJyYXlCdWZmZXI6dm9pZCAwO2Z1bmN0aW9uIEYoUSl7cmV0dXJuIltvYmplY3QgU2hhcmVkQXJyYXlCdWZmZXJdIj09PVYoUSl9ZnVuY3Rpb24gZyhRKXtyZXR1cm4gdm9pZCAwIT09TiYmKHZvaWQgMD09PUYud29ya2luZyYmKEYud29y'@;
put 'a2luZz1GKG5ldyBOKSksRi53b3JraW5nP0YoUSk6USBpbnN0YW5jZW9mIE4pfWZ1bmN0aW9uIEMoUSl7cmV0dXJuIG5lKFEsRyl9ZnVuY3Rpb24gTShRKXtyZXR1cm4gbmUoUSxXKX1mdW5jdGlvbiB5KFEpe3JldHVybiBuZShRLFUpfWZ1bmN0aW9uIHAoUSl7cmV0dXJuIHomJm5lKFEscSl9'@;
put 'ZnVuY3Rpb24gUyhRKXtyZXR1cm4gaiYmbmUoUSx0ZSl9Qi5pc1NoYXJlZEFycmF5QnVmZmVyPWcsQi5pc0FzeW5jRnVuY3Rpb249ZnVuY3Rpb24oUSl7cmV0dXJuIltvYmplY3QgQXN5bmNGdW5jdGlvbl0iPT09VihRKX0sQi5pc01hcEl0ZXJhdG9yPWZ1bmN0aW9uKFEpe3JldHVybiJbb2Jq'@;
put 'ZWN0IE1hcCBJdGVyYXRvcl0iPT09VihRKX0sQi5pc1NldEl0ZXJhdG9yPWZ1bmN0aW9uKFEpe3JldHVybiJbb2JqZWN0IFNldCBJdGVyYXRvcl0iPT09VihRKX0sQi5pc0dlbmVyYXRvck9iamVjdD1mdW5jdGlvbihRKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIj09PVYoUSl9LEIuaXNX'@;
put 'ZWJBc3NlbWJseUNvbXBpbGVkTW9kdWxlPWZ1bmN0aW9uKFEpe3JldHVybiJbb2JqZWN0IFdlYkFzc2VtYmx5Lk1vZHVsZV0iPT09VihRKX0sQi5pc051bWJlck9iamVjdD1DLEIuaXNTdHJpbmdPYmplY3Q9TSxCLmlzQm9vbGVhbk9iamVjdD15LEIuaXNCaWdJbnRPYmplY3Q9cCxCLmlzU3lt'@;
put 'Ym9sT2JqZWN0PVMsQi5pc0JveGVkUHJpbWl0aXZlPWZ1bmN0aW9uKFEpe3JldHVybiBDKFEpfHxNKFEpfHx5KFEpfHxwKFEpfHxTKFEpfSxCLmlzQW55QXJyYXlCdWZmZXI9ZnVuY3Rpb24oUSl7cmV0dXJuIHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmKFkoUSl8fGcoUSkpfSxbImlzUHJveHki'@;
put 'LCJpc0V4dGVybmFsIiwiaXNNb2R1bGVOYW1lc3BhY2VPYmplY3QiXS5mb3JFYWNoKGZ1bmN0aW9uKFEpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShCLFEse2VudW1lcmFibGU6ITEsdmFsdWU6ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoUSsiIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdXNlcmxh'@;
put 'bmQiKX19KX0pfSw5NTM5OihILEIsTCk9Pnt2YXIgSz1MKDQxNTUpLEo9TCg1MTA4KSxJPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzfHxmdW5jdGlvbihRKXtmb3IodmFyIHJlPU9iamVjdC5rZXlzKFEpLGZlPXt9LG1lPTA7bWU8cmUubGVuZ3RoO21lKyspZmVbcmVbbWVdXT1P'@;
put 'YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFEscmVbbWVdKTtyZXR1cm4gZmV9LFI9LyVbc2RqJV0vZztCLmZvcm1hdD1mdW5jdGlvbihRKXtpZighdWUoUSkpe2Zvcih2YXIgcmU9W10sZmU9MDtmZTxhcmd1bWVudHMubGVuZ3RoO2ZlKyspcmUucHVzaChWKGFyZ3VtZW50c1tmZV0p'@;
put 'KTtyZXR1cm4gcmUuam9pbigiICIpfWZlPTE7Zm9yKHZhciBtZT1hcmd1bWVudHMsa2U9bWUubGVuZ3RoLFRlPVN0cmluZyhRKS5yZXBsYWNlKFIsZnVuY3Rpb24oRmUpe2lmKCIlJSI9PT1GZSlyZXR1cm4iJSI7aWYoZmU+PWtlKXJldHVybiBGZTtzd2l0Y2goRmUpe2Nhc2UiJXMiOnJldHVy'@;
put 'biBTdHJpbmcobWVbZmUrK10pO2Nhc2UiJWQiOnJldHVybiBOdW1iZXIobWVbZmUrK10pO2Nhc2UiJWoiOnRyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkobWVbZmUrK10pfWNhdGNoe3JldHVybiJbQ2lyY3VsYXJdIn1kZWZhdWx0OnJldHVybiBGZX19KSxQZT1tZVtmZV07ZmU8a2U7UGU9bWVb'@;
put 'KytmZV0pbGUoUGUpfHwhYihQZSk/VGUrPSIgIitQZTpUZSs9IiAiK1YoUGUpO3JldHVybiBUZX0sQi5kZXByZWNhdGU9ZnVuY3Rpb24oUSxyZSl7aWYodm9pZCAwIT09SyYmITA9PT1LLm5vRGVwcmVjYXRpb24pcmV0dXJuIFE7aWYodm9pZCAwPT09SylyZXR1cm4gZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gQi5kZXByZWNhdGUoUSxyZSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTt2YXIgZmU9ITE7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoIWZlKXtpZihLLnRocm93RGVwcmVjYXRpb24pdGhyb3cgbmV3IEVycm9yKHJlKTtLLnRyYWNlRGVwcmVjYXRpb24/Si50cmFjZShyZSk6Si5lcnJvcihyZSks'@;
put 'ZmU9ITB9cmV0dXJuIFEuYXBwbHkodGhpcyxhcmd1bWVudHMpfX07dmFyIEU9e30sej0vXiQvO2lmKEsuZW52Lk5PREVfREVCVUcpe3ZhciBqPUsuZW52Lk5PREVfREVCVUc7aj1qLnJlcGxhY2UoL1t8XFx7fSgpW1xdXiQrPy5dL2csIlxcJCYiKS5yZXBsYWNlKC9cKi9nLCIuKiIpLnJlcGxh'@;
put 'Y2UoLywvZywiJHxeIikudG9VcHBlckNhc2UoKSx6PW5ldyBSZWdFeHAoIl4iK2orIiQiLCJpIil9ZnVuY3Rpb24gVihRLHJlKXt2YXIgZmU9e3NlZW46W10sc3R5bGl6ZTpXfTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD49MyYmKGZlLmRlcHRoPWFyZ3VtZW50c1syXSksYXJndW1lbnRzLmxl'@;
put 'bmd0aD49NCYmKGZlLmNvbG9ycz1hcmd1bWVudHNbM10pLGllKHJlKT9mZS5zaG93SGlkZGVuPXJlOnJlJiZCLl9leHRlbmQoZmUscmUpLGNlKGZlLnNob3dIaWRkZW4pJiYoZmUuc2hvd0hpZGRlbj0hMSksY2UoZmUuZGVwdGgpJiYoZmUuZGVwdGg9MiksY2UoZmUuY29sb3JzKSYmKGZlLmNv'@;
put 'bG9ycz0hMSksY2UoZmUuY3VzdG9tSW5zcGVjdCkmJihmZS5jdXN0b21JbnNwZWN0PSEwKSxmZS5jb2xvcnMmJihmZS5zdHlsaXplPUcpLFUoZmUsUSxmZS5kZXB0aCl9ZnVuY3Rpb24gRyhRLHJlKXt2YXIgZmU9Vi5zdHlsZXNbcmVdO3JldHVybiBmZT8iXHgxYlsiK1YuY29sb3JzW2ZlXVsw'@;
put 'XSsibSIrUSsiXHgxYlsiK1YuY29sb3JzW2ZlXVsxXSsibSI6UX1mdW5jdGlvbiBXKFEscmUpe3JldHVybiBRfWZ1bmN0aW9uIFUoUSxyZSxmZSl7aWYoUS5jdXN0b21JbnNwZWN0JiZyZSYmRihyZS5pbnNwZWN0KSYmcmUuaW5zcGVjdCE9PUIuaW5zcGVjdCYmKCFyZS5jb25zdHJ1Y3Rvcnx8'@;
put 'cmUuY29uc3RydWN0b3IucHJvdG90eXBlIT09cmUpKXt2YXIgbWU9cmUuaW5zcGVjdChmZSxRKTtyZXR1cm4gdWUobWUpfHwobWU9VShRLG1lLGZlKSksbWV9dmFyIGtlPWZ1bmN0aW9uKFFlLG10KXtpZihjZShtdCkpcmV0dXJuIFFlLnN0eWxpemUoInVuZGVmaW5lZCIsInVuZGVmaW5lZCIp'@;
put 'O2lmKHVlKG10KSl7dmFyIEtlPSInIitKU09OLnN0cmluZ2lmeShtdCkucmVwbGFjZSgvXiJ8IiQvZywiIikucmVwbGFjZSgvJy9nLCJcXCciKS5yZXBsYWNlKC9cXCIvZywnIicpKyInIjtyZXR1cm4gUWUuc3R5bGl6ZShLZSwic3RyaW5nIil9cmV0dXJuIGRlKG10KT9RZS5zdHlsaXplKCIi'@;
put 'K210LCJudW1iZXIiKTppZShtdCk/UWUuc3R5bGl6ZSgiIittdCwiYm9vbGVhbiIpOmxlKG10KT9RZS5zdHlsaXplKCJudWxsIiwibnVsbCIpOnZvaWQgMH0oUSxyZSk7aWYoa2UpcmV0dXJuIGtlO3ZhciBtdCxUZT1PYmplY3Qua2V5cyhyZSksUGU9KG10PXt9LFRlLmZvckVhY2goZnVuY3Rp'@;
put 'b24oS2Usd2Upe210W0tlXT0hMH0pLG10KTtpZihRLnNob3dIaWRkZW4mJihUZT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhyZSkpLE4ocmUpJiYoVGUuaW5kZXhPZigibWVzc2FnZSIpPj0wfHxUZS5pbmRleE9mKCJkZXNjcmlwdGlvbiIpPj0wKSlyZXR1cm4gcShyZSk7aWYoMD09PVRl'@;
put 'Lmxlbmd0aCl7aWYoRihyZSkpcmV0dXJuIFEuc3R5bGl6ZSgiW0Z1bmN0aW9uIisocmUubmFtZT8iOiAiK3JlLm5hbWU6IiIpKyJdIiwic3BlY2lhbCIpO2lmKFkocmUpKXJldHVybiBRLnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHJlKSwicmVnZXhwIik7aWYoeChy'@;
put 'ZSkpcmV0dXJuIFEuc3R5bGl6ZShEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHJlKSwiZGF0ZSIpO2lmKE4ocmUpKXJldHVybiBxKHJlKX12YXIgTmUsTGU9IiIsQmU9ITEsSGU9WyJ7IiwifSJdO3JldHVybiBuZShyZSkmJihCZT0hMCxIZT1bIlsiLCJdIl0pLEYocmUpJiYoTGU9IiBb'@;
put 'RnVuY3Rpb24iKyhyZS5uYW1lPyI6ICIrcmUubmFtZToiIikrIl0iKSxZKHJlKSYmKExlPSIgIitSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocmUpKSx4KHJlKSYmKExlPSIgIitEYXRlLnByb3RvdHlwZS50b1VUQ1N0cmluZy5jYWxsKHJlKSksTihyZSkmJihMZT0iICIrcShyZSkp'@;
put 'LDAhPT1UZS5sZW5ndGh8fEJlJiYwIT1yZS5sZW5ndGg/ZmU8MD9ZKHJlKT9RLnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHJlKSwicmVnZXhwIik6US5zdHlsaXplKCJbT2JqZWN0XSIsInNwZWNpYWwiKTooUS5zZWVuLnB1c2gocmUpLE5lPUJlP2Z1bmN0aW9uKFFl'@;
put 'LG10LEtlLHdlLEllKXtmb3IodmFyIE9lPVtdLGV0PTAsbnQ9bXQubGVuZ3RoO2V0PG50OysrZXQpeShtdCxTdHJpbmcoZXQpKT9PZS5wdXNoKHRlKFFlLG10LEtlLHdlLFN0cmluZyhldCksITApKTpPZS5wdXNoKCIiKTtyZXR1cm4gSWUuZm9yRWFjaChmdW5jdGlvbihxZSl7cWUubWF0Y2go'@;
put 'L15cZCskLyl8fE9lLnB1c2godGUoUWUsbXQsS2Usd2UscWUsITApKX0pLE9lfShRLHJlLGZlLFBlLFRlKTpUZS5tYXAoZnVuY3Rpb24oUWUpe3JldHVybiB0ZShRLHJlLGZlLFBlLFFlLEJlKX0pLFEuc2Vlbi5wb3AoKSxmdW5jdGlvbihRZSxtdCxLZSl7cmV0dXJuIFFlLnJlZHVjZShmdW5j'@;
put 'dGlvbihJZSxPZSl7cmV0dXJuIE9lLmluZGV4T2YoIlxuIiksSWUrT2UucmVwbGFjZSgvXHUwMDFiXFtcZFxkP20vZywiIikubGVuZ3RoKzF9LDApPjYwP0tlWzBdKygiIj09PW10PyIiOm10KyJcbiAiKSsiICIrUWUuam9pbigiLFxuICAiKSsiICIrS2VbMV06S2VbMF0rbXQrIiAiK1FlLmpv'@;
put 'aW4oIiwgIikrIiAiK0tlWzFdfShOZSxMZSxIZSkpOkhlWzBdK0xlK0hlWzFdfWZ1bmN0aW9uIHEoUSl7cmV0dXJuIlsiK0Vycm9yLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFEpKyJdIn1mdW5jdGlvbiB0ZShRLHJlLGZlLG1lLGtlLFRlKXt2YXIgUGUsRmUsTmU7aWYoKE5lPU9iamVjdC5n'@;
put 'ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocmUsa2UpfHx7dmFsdWU6cmVba2VdfSkuZ2V0P0ZlPVEuc3R5bGl6ZShOZS5zZXQ/IltHZXR0ZXIvU2V0dGVyXSI6IltHZXR0ZXJdIiwic3BlY2lhbCIpOk5lLnNldCYmKEZlPVEuc3R5bGl6ZSgiW1NldHRlcl0iLCJzcGVjaWFsIikpLHkobWUsa2Up'@;
put 'fHwoUGU9IlsiK2tlKyJdIiksRmV8fChRLnNlZW4uaW5kZXhPZihOZS52YWx1ZSk8MD8oRmU9bGUoZmUpP1UoUSxOZS52YWx1ZSxudWxsKTpVKFEsTmUudmFsdWUsZmUtMSkpLmluZGV4T2YoIlxuIik+LTEmJihGZT1UZT9GZS5zcGxpdCgiXG4iKS5tYXAoZnVuY3Rpb24oTGUpe3JldHVybiIg'@;
put 'ICIrTGV9KS5qb2luKCJcbiIpLnNsaWNlKDIpOiJcbiIrRmUuc3BsaXQoIlxuIikubWFwKGZ1bmN0aW9uKExlKXtyZXR1cm4iICAgIitMZX0pLmpvaW4oIlxuIikpOkZlPVEuc3R5bGl6ZSgiW0NpcmN1bGFyXSIsInNwZWNpYWwiKSksY2UoUGUpKXtpZihUZSYma2UubWF0Y2goL15cZCskLykp'@;
put 'cmV0dXJuIEZlOyhQZT1KU09OLnN0cmluZ2lmeSgiIitrZSkpLm1hdGNoKC9eIihbYS16QS1aX11bYS16QS1aXzAtOV0qKSIkLyk/KFBlPVBlLnNsaWNlKDEsLTEpLFBlPVEuc3R5bGl6ZShQZSwibmFtZSIpKTooUGU9UGUucmVwbGFjZSgvJy9nLCJcXCciKS5yZXBsYWNlKC9cXCIvZywnIicp'@;
put 'LnJlcGxhY2UoLyheInwiJCkvZywiJyIpLFBlPVEuc3R5bGl6ZShQZSwic3RyaW5nIikpfXJldHVybiBQZSsiOiAiK0ZlfWZ1bmN0aW9uIG5lKFEpe3JldHVybiBBcnJheS5pc0FycmF5KFEpfWZ1bmN0aW9uIGllKFEpe3JldHVybiJib29sZWFuIj09dHlwZW9mIFF9ZnVuY3Rpb24gbGUoUSl7'@;
put 'cmV0dXJuIG51bGw9PT1RfWZ1bmN0aW9uIGRlKFEpe3JldHVybiJudW1iZXIiPT10eXBlb2YgUX1mdW5jdGlvbiB1ZShRKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIFF9ZnVuY3Rpb24gY2UoUSl7cmV0dXJuIHZvaWQgMD09PVF9ZnVuY3Rpb24gWShRKXtyZXR1cm4gYihRKSYmIltvYmplY3Qg'@;
put 'UmVnRXhwXSI9PT1nKFEpfWZ1bmN0aW9uIGIoUSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBRJiZudWxsIT09UX1mdW5jdGlvbiB4KFEpe3JldHVybiBiKFEpJiYiW29iamVjdCBEYXRlXSI9PT1nKFEpfWZ1bmN0aW9uIE4oUSl7cmV0dXJuIGIoUSkmJigiW29iamVjdCBFcnJvcl0iPT09ZyhR'@;
put 'KXx8USBpbnN0YW5jZW9mIEVycm9yKX1mdW5jdGlvbiBGKFEpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBRfWZ1bmN0aW9uIGcoUSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChRKX1mdW5jdGlvbiBDKFEpe3JldHVybiBRPDEwPyIwIitRLnRvU3RyaW5nKDEwKTpR'@;
put 'LnRvU3RyaW5nKDEwKX1CLmRlYnVnbG9nPWZ1bmN0aW9uKFEpe2lmKFE9US50b1VwcGVyQ2FzZSgpLCFFW1FdKWlmKHoudGVzdChRKSl7dmFyIHJlPUsucGlkO0VbUV09ZnVuY3Rpb24oKXt2YXIgZmU9Qi5mb3JtYXQuYXBwbHkoQixhcmd1bWVudHMpO0ouZXJyb3IoIiVzICVkOiAlcyIsUSxy'@;
put 'ZSxmZSl9fWVsc2UgRVtRXT1mdW5jdGlvbigpe307cmV0dXJuIEVbUV19LEIuaW5zcGVjdD1WLFYuY29sb3JzPXtib2xkOlsxLDIyXSxpdGFsaWM6WzMsMjNdLHVuZGVybGluZTpbNCwyNF0saW52ZXJzZTpbNywyN10sd2hpdGU6WzM3LDM5XSxncmV5Ols5MCwzOV0sYmxhY2s6WzMwLDM5XSxi'@;
put 'bHVlOlszNCwzOV0sY3lhbjpbMzYsMzldLGdyZWVuOlszMiwzOV0sbWFnZW50YTpbMzUsMzldLHJlZDpbMzEsMzldLHllbGxvdzpbMzMsMzldfSxWLnN0eWxlcz17c3BlY2lhbDoiY3lhbiIsbnVtYmVyOiJ5ZWxsb3ciLGJvb2xlYW46InllbGxvdyIsdW5kZWZpbmVkOiJncmV5IixudWxsOiJi'@;
put 'b2xkIixzdHJpbmc6ImdyZWVuIixkYXRlOiJtYWdlbnRhIixyZWdleHA6InJlZCJ9LEIudHlwZXM9TCg1OTU1KSxCLmlzQXJyYXk9bmUsQi5pc0Jvb2xlYW49aWUsQi5pc051bGw9bGUsQi5pc051bGxPclVuZGVmaW5lZD1mdW5jdGlvbihRKXtyZXR1cm4gbnVsbD09UX0sQi5pc051bWJlcj1k'@;
put 'ZSxCLmlzU3RyaW5nPXVlLEIuaXNTeW1ib2w9ZnVuY3Rpb24oUSl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBRfSxCLmlzVW5kZWZpbmVkPWNlLEIuaXNSZWdFeHA9WSxCLnR5cGVzLmlzUmVnRXhwPVksQi5pc09iamVjdD1iLEIuaXNEYXRlPXgsQi50eXBlcy5pc0RhdGU9eCxCLmlzRXJyb3I9'@;
put 'TixCLnR5cGVzLmlzTmF0aXZlRXJyb3I9TixCLmlzRnVuY3Rpb249RixCLmlzUHJpbWl0aXZlPWZ1bmN0aW9uKFEpe3JldHVybiBudWxsPT09UXx8ImJvb2xlYW4iPT10eXBlb2YgUXx8Im51bWJlciI9PXR5cGVvZiBRfHwic3RyaW5nIj09dHlwZW9mIFF8fCJzeW1ib2wiPT10eXBlb2YgUXx8'@;
put 'dm9pZCAwPT09UX0sQi5pc0J1ZmZlcj1MKDM4NCk7dmFyIE09WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXTtmdW5jdGlvbiB5KFEscmUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5'@;
put 'LmNhbGwoUSxyZSl9Qi5sb2c9ZnVuY3Rpb24oKXt2YXIgUSxyZTtKLmxvZygiJXMgLSAlcyIsKHJlPVtDKChRPW5ldyBEYXRlKS5nZXRIb3VycygpKSxDKFEuZ2V0TWludXRlcygpKSxDKFEuZ2V0U2Vjb25kcygpKV0uam9pbigiOiIpLFtRLmdldERhdGUoKSxNW1EuZ2V0TW9udGgoKV0scmVd'@;
put 'LmpvaW4oIiAiKSksQi5mb3JtYXQuYXBwbHkoQixhcmd1bWVudHMpKX0sQi5pbmhlcml0cz1MKDU3MTcpLEIuX2V4dGVuZD1mdW5jdGlvbihRLHJlKXtpZighcmV8fCFiKHJlKSlyZXR1cm4gUTtmb3IodmFyIGZlPU9iamVjdC5rZXlzKHJlKSxtZT1mZS5sZW5ndGg7bWUtLTspUVtmZVttZV1d'@;
put 'PXJlW2ZlW21lXV07cmV0dXJuIFF9O3ZhciBwPXR5cGVvZiBTeW1ib2w8InUiP1N5bWJvbCgidXRpbC5wcm9taXNpZnkuY3VzdG9tIik6dm9pZCAwO2Z1bmN0aW9uIFMoUSxyZSl7aWYoIVEpe3ZhciBmZT1uZXcgRXJyb3IoIlByb21pc2Ugd2FzIHJlamVjdGVkIHdpdGggYSBmYWxzeSB2YWx1'@;
put 'ZSIpO2ZlLnJlYXNvbj1RLFE9ZmV9cmV0dXJuIHJlKFEpfUIucHJvbWlzaWZ5PWZ1bmN0aW9uKFEpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBRKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAib3JpZ2luYWwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbicpO2lmKHAmJlFbcF0p'@;
put 'e3ZhciByZTtpZigiZnVuY3Rpb24iIT10eXBlb2YocmU9UVtwXSkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ1dGlsLnByb21pc2lmeS5jdXN0b20iIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbicpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocmUscCx7dmFsdWU6'@;
put 'cmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxyZX1mdW5jdGlvbiByZSgpe2Zvcih2YXIgZmUsbWUsa2U9bmV3IFByb21pc2UoZnVuY3Rpb24oRmUsTmUpe2ZlPUZlLG1lPU5lfSksVGU9W10sUGU9MDtQZTxhcmd1bWVudHMubGVuZ3RoO1BlKyspVGUucHVz'@;
put 'aChhcmd1bWVudHNbUGVdKTtUZS5wdXNoKGZ1bmN0aW9uKEZlLE5lKXtGZT9tZShGZSk6ZmUoTmUpfSk7dHJ5e1EuYXBwbHkodGhpcyxUZSl9Y2F0Y2goRmUpe21lKEZlKX1yZXR1cm4ga2V9cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihyZSxPYmplY3QuZ2V0UHJvdG90eXBlT2YoUSkp'@;
put 'LHAmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZSxwLHt2YWx1ZTpyZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHJlLEkoUSkpfSxCLnByb21pc2lmeS5jdXN0b209cCxCLmNhbGxiYWNraWZ5PWZ1bmN0aW9uKFEp'@;
put 'e2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBRKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAib3JpZ2luYWwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbicpO2Z1bmN0aW9uIHJlKCl7Zm9yKHZhciBmZT1bXSxtZT0wO21lPGFyZ3VtZW50cy5sZW5ndGg7bWUrKylmZS5wdXNoKGFy'@;
put 'Z3VtZW50c1ttZV0pO3ZhciBrZT1mZS5wb3AoKTtpZigiZnVuY3Rpb24iIT10eXBlb2Yga2UpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGxhc3QgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uIik7dmFyIFRlPXRoaXMsUGU9ZnVuY3Rpb24oKXtyZXR1cm4ga2UuYXBwbHkoVGUs'@;
put 'YXJndW1lbnRzKX07US5hcHBseSh0aGlzLGZlKS50aGVuKGZ1bmN0aW9uKEZlKXtLLm5leHRUaWNrKFBlLmJpbmQobnVsbCxudWxsLEZlKSl9LGZ1bmN0aW9uKEZlKXtLLm5leHRUaWNrKFMuYmluZChudWxsLEZlLFBlKSl9KX1yZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHJlLE9iamVj'@;
put 'dC5nZXRQcm90b3R5cGVPZihRKSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMocmUsSShRKSkscmV9fSw0ODE6KEgsQixMKT0+eyFmdW5jdGlvbihLKXsidXNlIHN0cmljdCI7Sy5leHBvcnRzLmlzX3VyaT1JLEsuZXhwb3J0cy5pc19odHRwX3VyaT1SLEsuZXhwb3J0cy5pc19odHRwc191cmk9'@;
put 'RSxLLmV4cG9ydHMuaXNfd2ViX3VyaT16LEsuZXhwb3J0cy5pc1VyaT1JLEsuZXhwb3J0cy5pc0h0dHBVcmk9UixLLmV4cG9ydHMuaXNIdHRwc1VyaT1FLEsuZXhwb3J0cy5pc1dlYlVyaT16O3ZhciBKPWZ1bmN0aW9uKGope3JldHVybiBqLm1hdGNoKC8oPzooW146XC8/I10rKTopPyg/Olwv'@;
put 'XC8oW15cLz8jXSopKT8oW14/I10qKSg/Olw/KFteI10qKSk/KD86IyguKikpPy8pfTtmdW5jdGlvbiBJKGope2lmKGomJiEvW15hLXowLTlcOlwvXD9cI1xbXF1cQFwhXCRcJlwnXChcKVwqXCtcLFw7XD1cLlwtXF9cflwlXS9pLnRlc3QoaikmJiEvJVteMC05YS1mXS9pLnRlc3QoaikmJiEv'@;
put 'JVswLTlhLWZdKDo/W14wLTlhLWZdfCQpL2kudGVzdChqKSl7dmFyIFYsRyxXLFUscSx0ZT0iIixuZT0iIjtpZih0ZT0oVj1KKGopKVsxXSxHPVZbMl0sVz1WWzNdLFU9Vls0XSxxPVZbNV0sdGUmJnRlLmxlbmd0aCYmVy5sZW5ndGg+PTApe2lmKEcmJkcubGVuZ3RoKXtpZigwIT09Vy5sZW5n'@;
put 'dGgmJiEvXlwvLy50ZXN0KFcpKXJldHVybn1lbHNlIGlmKC9eXC9cLy8udGVzdChXKSlyZXR1cm47aWYoL15bYS16XVthLXowLTlcK1wtXC5dKiQvLnRlc3QodGUudG9Mb3dlckNhc2UoKSkpcmV0dXJuIG5lKz10ZSsiOiIsRyYmRy5sZW5ndGgmJihuZSs9Ii8vIitHKSxuZSs9VyxVJiZVLmxl'@;
put 'bmd0aCYmKG5lKz0iPyIrVSkscSYmcS5sZW5ndGgmJihuZSs9IiMiK3EpLG5lfX19ZnVuY3Rpb24gUihqLFYpe2lmKEkoaikpe3ZhciBHLFcsVSxxLHRlPSIiLG5lPSIiLGllPSIiLGxlPSIiO2lmKHRlPShHPUooaikpWzFdLG5lPUdbMl0sVz1HWzNdLFU9R1s0XSxxPUdbNV0sdGUpe2lmKFYp'@;
put 'e2lmKCJodHRwcyIhPXRlLnRvTG93ZXJDYXNlKCkpcmV0dXJufWVsc2UgaWYoImh0dHAiIT10ZS50b0xvd2VyQ2FzZSgpKXJldHVybjtpZihuZSlyZXR1cm4vOihcZCspJC8udGVzdChuZSkmJihpZT1uZS5tYXRjaCgvOihcZCspJC8pWzBdLG5lPW5lLnJlcGxhY2UoLzpcZCskLywiIikpLGxl'@;
put 'Kz10ZSsiOiIsbGUrPSIvLyIrbmUsaWUmJihsZSs9aWUpLGxlKz1XLFUmJlUubGVuZ3RoJiYobGUrPSI/IitVKSxxJiZxLmxlbmd0aCYmKGxlKz0iIyIrcSksbGV9fX1mdW5jdGlvbiBFKGope3JldHVybiBSKGosITApfWZ1bmN0aW9uIHooail7cmV0dXJuIFIoail8fEUoail9fShIPUwubm1k'@;
put 'KEgpKX0sNjQzMDooSCxCLEwpPT57InVzZSBzdHJpY3QiO3ZhciBLPUwoNDAyOSksSj1MKDMwODMpLEk9TCgxOTI0KSxSPUwoNzI5NiksRT1JKCJPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nIiksej1MKDY0MTApKCksaj10eXBlb2YgZ2xvYmFsVGhpcz4idSI/TC5nOmdsb2JhbFRoaXMsVj1K'@;
put 'KCksRz1JKCJTdHJpbmcucHJvdG90eXBlLnNsaWNlIiksVz17fSxVPU9iamVjdC5nZXRQcm90b3R5cGVPZjt6JiZSJiZVJiZLKFYsZnVuY3Rpb24odGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBqW3RlXSl7dmFyIG5lPW5ldyBqW3RlXTtpZihTeW1ib2wudG9TdHJpbmdUYWcgaW4gbmUpe3Zh'@;
put 'ciBpZT1VKG5lKSxsZT1SKGllLFN5bWJvbC50b1N0cmluZ1RhZyk7aWYoIWxlKXt2YXIgZGU9VShpZSk7bGU9UihkZSxTeW1ib2wudG9TdHJpbmdUYWcpfVdbdGVdPWxlLmdldH19fSk7dmFyIHE9TCg1NjkyKTtILmV4cG9ydHM9ZnVuY3Rpb24odGUpe3JldHVybiEhcSh0ZSkmJih6JiZTeW1i'@;
put 'b2wudG9TdHJpbmdUYWcgaW4gdGU/KG5lPXRlLGllPSExLEsoVyxmdW5jdGlvbihsZSxkZSl7aWYoIWllKXRyeXt2YXIgdWU9bGUuY2FsbChuZSk7dWU9PT1kZSYmKGllPXVlKX1jYXRjaHt9fSksaWUpOkcoRSh0ZSksOCwtMSkpO3ZhciBuZSxpZX19LDI0Nzk6SD0+e0guZXhwb3J0cz1mdW5j'@;
put 'dGlvbiBCKEwsSyl7aWYoTCYmSylyZXR1cm4gQihMKShLKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgTCl0aHJvdyBuZXcgVHlwZUVycm9yKCJuZWVkIHdyYXBwZXIgZnVuY3Rpb24iKTtyZXR1cm4gT2JqZWN0LmtleXMoTCkuZm9yRWFjaChmdW5jdGlvbihJKXtKW0ldPUxbSV19KSxKO2Z1bmN0'@;
put 'aW9uIEooKXtmb3IodmFyIEk9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpLFI9MDtSPEkubGVuZ3RoO1IrKylJW1JdPWFyZ3VtZW50c1tSXTt2YXIgRT1MLmFwcGx5KHRoaXMsSSksej1JW0kubGVuZ3RoLTFdO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBFJiZFIT09eiYmT2JqZWN0Lmtl'@;
put 'eXMoeikuZm9yRWFjaChmdW5jdGlvbihqKXtFW2pdPXpbal19KSxFfX19LDk1MDooKT0+e30sNjYwMTooKT0+e30sOTIxNDooKT0+e30sODYyMzooKT0+e30sNzc0ODooKT0+e30sNTU2ODooKT0+e30sMjUzNTooKT0+e30sMzcxMDooKT0+e30sNTQ0MzooKT0+e30sNDEyOTooKT0+e30sNjYx'@;
put 'OTooKT0+e30sNzEwODooKT0+e30sMjM2MTooKT0+e30sNDYxNjooKT0+e30sNzIxNzooKT0+e30sODM3MzooKT0+e30sMzA4MzooSCxCLEwpPT57InVzZSBzdHJpY3QiO3ZhciBLPVsiQmlnSW50NjRBcnJheSIsIkJpZ1VpbnQ2NEFycmF5IiwiRmxvYXQzMkFycmF5IiwiRmxvYXQ2NEFycmF5'@;
put 'IiwiSW50MTZBcnJheSIsIkludDMyQXJyYXkiLCJJbnQ4QXJyYXkiLCJVaW50MTZBcnJheSIsIlVpbnQzMkFycmF5IiwiVWludDhBcnJheSIsIlVpbnQ4Q2xhbXBlZEFycmF5Il0sSj10eXBlb2YgZ2xvYmFsVGhpcz4idSI/TC5nOmdsb2JhbFRoaXM7SC5leHBvcnRzPWZ1bmN0aW9uKCl7Zm9y'@;
put 'KHZhciBJPVtdLFI9MDtSPEsubGVuZ3RoO1IrKykiZnVuY3Rpb24iPT10eXBlb2YgSltLW1JdXSYmKElbSS5sZW5ndGhdPUtbUl0pO3JldHVybiBJfX0sNDk0NjpIPT57InVzZSBzdHJpY3QiO0guZXhwb3J0cz1KU09OLnBhcnNlKCd7ImFlcy0xMjgtZWNiIjp7ImNpcGhlciI6IkFFUyIsImtl'@;
put 'eSI6MTI4LCJpdiI6MCwibW9kZSI6IkVDQiIsInR5cGUiOiJibG9jayJ9LCJhZXMtMTkyLWVjYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjAsIm1vZGUiOiJFQ0IiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTI1Ni1lY2IiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2Ijow'@;
put 'LCJtb2RlIjoiRUNCIiwidHlwZSI6ImJsb2NrIn0sImFlcy0xMjgtY2JjIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTE5Mi1jYmMiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNC'@;
put 'QyIsInR5cGUiOiJibG9jayJ9LCJhZXMtMjU2LWNiYyI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlczEyOCI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2Nr'@;
put 'In0sImFlczE5MiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlczI1NiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlcy0xMjgtY2ZiIjp7ImNp'@;
put 'cGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItY2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtY2ZiIjp7ImNpcGhlciI6IkFF'@;
put 'UyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtY2ZiOCI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0ZCOCIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTE5Mi1jZmI4Ijp7ImNpcGhlciI6IkFFUyIsImtl'@;
put 'eSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDRkI4IiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LWNmYjgiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNGQjgiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtY2ZiMSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEy'@;
put 'OCwiaXYiOjE2LCJtb2RlIjoiQ0ZCMSIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTE5Mi1jZmIxIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDRkIxIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LWNmYjEiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2'@;
put 'IjoxNiwibW9kZSI6IkNGQjEiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtb2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJPRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItb2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1v'@;
put 'ZGUiOiJPRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtb2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJPRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtY3RyIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDVFIi'@;
put 'LCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItY3RyIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDVFIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtY3RyIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDVFIiLCJ0eXBlIjoi'@;
put 'c3RyZWFtIn0sImFlcy0xMjgtZ2NtIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTIsIm1vZGUiOiJHQ00iLCJ0eXBlIjoiYXV0aCJ9LCJhZXMtMTkyLWdjbSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjEyLCJtb2RlIjoiR0NNIiwidHlwZSI6ImF1dGgifSwiYWVz'@;
put 'LTI1Ni1nY20iOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxMiwibW9kZSI6IkdDTSIsInR5cGUiOiJhdXRoIn19Jyl9LDUyMDc6SD0+eyJ1c2Ugc3RyaWN0IjtILmV4cG9ydHM9SlNPTi5wYXJzZSgneyJzaGEyMjRXaXRoUlNBRW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFz'@;
put 'aCI6InNoYTIyNCIsImlkIjoiMzAyZDMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjA0MDUwMDA0MWMifSwiUlNBLVNIQTIyNCI6eyJzaWduIjoiZWNkc2EvcnNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiMzAyZDMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjA0MDUwMDA0MWMifSwic2hhMjU2V2l0'@;
put 'aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IjMwMzEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMTA1MDAwNDIwIn0sIlJTQS1TSEEyNTYiOnsic2lnbiI6ImVjZHNhL3JzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IjMwMzEzMDBkMDYwOTYwODY0'@;
put 'ODAxNjUwMzA0MDIwMTA1MDAwNDIwIn0sInNoYTM4NFdpdGhSU0FFbmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIzMDQxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDIwNTAwMDQzMCJ9LCJSU0EtU0hBMzg0Ijp7InNpZ24iOiJlY2RzYS9yc2EiLCJoYXNo'@;
put 'Ijoic2hhMzg0IiwiaWQiOiIzMDQxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDIwNTAwMDQzMCJ9LCJzaGE1MTJXaXRoUlNBRW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiMzA1MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAzMDUwMDA0NDAifSwiUlNB'@;
put 'LVNIQTUxMiI6eyJzaWduIjoiZWNkc2EvcnNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiMzA1MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAzMDUwMDA0NDAifSwiUlNBLVNIQTEiOnsic2lnbiI6InJzYSIsImhhc2giOiJzaGExIiwiaWQiOiIzMDIxMzAwOTA2MDUyYjBlMDMwMjFhMDUwMDA0'@;
put 'MTQifSwiZWNkc2Etd2l0aC1TSEExIjp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGExIiwiaWQiOiIifSwic2hhMjU2Ijp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IiJ9LCJzaGEyMjQiOnsic2lnbiI6ImVjZHNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiIn0sInNo'@;
put 'YTM4NCI6eyJzaWduIjoiZWNkc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIifSwic2hhNTEyIjp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGE1MTIiLCJpZCI6IiJ9LCJEU0EtU0hBIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMSIsImlkIjoiIn0sIkRTQS1TSEExIjp7InNpZ24iOiJk'@;
put 'c2EiLCJoYXNoIjoic2hhMSIsImlkIjoiIn0sIkRTQSI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTEiLCJpZCI6IiJ9LCJEU0EtV0lUSC1TSEEyMjQiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEyMjQiLCJpZCI6IiJ9LCJEU0EtU0hBMjI0Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hh'@;
put 'MjI0IiwiaWQiOiIifSwiRFNBLVdJVEgtU0hBMjU2Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMjU2IiwiaWQiOiIifSwiRFNBLVNIQTI1NiI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTI1NiIsImlkIjoiIn0sIkRTQS1XSVRILVNIQTM4NCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNo'@;
put 'YTM4NCIsImlkIjoiIn0sIkRTQS1TSEEzODQiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEzODQiLCJpZCI6IiJ9LCJEU0EtV0lUSC1TSEE1MTIiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGE1MTIiLCJpZCI6IiJ9LCJEU0EtU0hBNTEyIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhNTEy'@;
put 'IiwiaWQiOiIifSwiRFNBLVJJUEVNRDE2MCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InJtZDE2MCIsImlkIjoiIn0sInJpcGVtZDE2MFdpdGhSU0EiOnsic2lnbiI6InJzYSIsImhhc2giOiJybWQxNjAiLCJpZCI6IjMwMjEzMDA5MDYwNTJiMjQwMzAyMDEwNTAwMDQxNCJ9LCJSU0EtUklQRU1E'@;
put 'MTYwIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoicm1kMTYwIiwiaWQiOiIzMDIxMzAwOTA2MDUyYjI0MDMwMjAxMDUwMDA0MTQifSwibWQ1V2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJtZDUiLCJpZCI6IjMwMjAzMDBjMDYwODJhODY0ODg2ZjcwZDAyMDUwNTAwMDQx'@;
put 'MCJ9LCJSU0EtTUQ1Ijp7InNpZ24iOiJyc2EiLCJoYXNoIjoibWQ1IiwiaWQiOiIzMDIwMzAwYzA2MDgyYTg2NDg4NmY3MGQwMjA1MDUwMDA0MTAifX0nKX0sMTMwODpIPT57InVzZSBzdHJpY3QiO0guZXhwb3J0cz1KU09OLnBhcnNlKCd7IjEuMy4xMzIuMC4xMCI6InNlY3AyNTZrMSIsIjEu'@;
put 'My4xMzIuMC4zMyI6InAyMjQiLCIxLjIuODQwLjEwMDQ1LjMuMS4xIjoicDE5MiIsIjEuMi44NDAuMTAwNDUuMy4xLjciOiJwMjU2IiwiMS4zLjEzMi4wLjM0IjoicDM4NCIsIjEuMy4xMzIuMC4zNSI6InA1MjEifScpfSwzMjA4Okg9PnsidXNlIHN0cmljdCI7SC5leHBvcnRzPUpTT04ucGFy'@;
put 'c2UoJ3siT19SRE9OTFkiOjAsIk9fV1JPTkxZIjoxLCJPX1JEV1IiOjIsIlNfSUZNVCI6NjE0NDAsIlNfSUZSRUciOjMyNzY4LCJTX0lGRElSIjoxNjM4NCwiU19JRkNIUiI6ODE5MiwiU19JRkJMSyI6MjQ1NzYsIlNfSUZJRk8iOjQwOTYsIlNfSUZMTksiOjQwOTYwLCJTX0lGU09DSyI6NDkx'@;
put 'NTIsIk9fQ1JFQVQiOjUxMiwiT19FWENMIjoyMDQ4LCJPX05PQ1RUWSI6MTMxMDcyLCJPX1RSVU5DIjoxMDI0LCJPX0FQUEVORCI6OCwiT19ESVJFQ1RPUlkiOjEwNDg1NzYsIk9fTk9GT0xMT1ciOjI1NiwiT19TWU5DIjoxMjgsIk9fU1lNTElOSyI6MjA5NzE1MiwiT19OT05CTE9DSyI6NCwi'@;
put 'U19JUldYVSI6NDQ4LCJTX0lSVVNSIjoyNTYsIlNfSVdVU1IiOjEyOCwiU19JWFVTUiI6NjQsIlNfSVJXWEciOjU2LCJTX0lSR1JQIjozMiwiU19JV0dSUCI6MTYsIlNfSVhHUlAiOjgsIlNfSVJXWE8iOjcsIlNfSVJPVEgiOjQsIlNfSVdPVEgiOjIsIlNfSVhPVEgiOjEsIkUyQklHIjo3LCJF'@;
put 'QUNDRVMiOjEzLCJFQUREUklOVVNFIjo0OCwiRUFERFJOT1RBVkFJTCI6NDksIkVBRk5PU1VQUE9SVCI6NDcsIkVBR0FJTiI6MzUsIkVBTFJFQURZIjozNywiRUJBREYiOjksIkVCQURNU0ciOjk0LCJFQlVTWSI6MTYsIkVDQU5DRUxFRCI6ODksIkVDSElMRCI6MTAsIkVDT05OQUJPUlRFRCI6'@;
put 'NTMsIkVDT05OUkVGVVNFRCI6NjEsIkVDT05OUkVTRVQiOjU0LCJFREVBRExLIjoxMSwiRURFU1RBRERSUkVRIjozOSwiRURPTSI6MzMsIkVEUVVPVCI6NjksIkVFWElTVCI6MTcsIkVGQVVMVCI6MTQsIkVGQklHIjoyNywiRUhPU1RVTlJFQUNIIjo2NSwiRUlEUk0iOjkwLCJFSUxTRVEiOjky'@;
put 'LCJFSU5QUk9HUkVTUyI6MzYsIkVJTlRSIjo0LCJFSU5WQUwiOjIyLCJFSU8iOjUsIkVJU0NPTk4iOjU2LCJFSVNESVIiOjIxLCJFTE9PUCI6NjIsIkVNRklMRSI6MjQsIkVNTElOSyI6MzEsIkVNU0dTSVpFIjo0MCwiRU1VTFRJSE9QIjo5NSwiRU5BTUVUT09MT05HIjo2MywiRU5FVERPV04i'@;
put 'OjUwLCJFTkVUUkVTRVQiOjUyLCJFTkVUVU5SRUFDSCI6NTEsIkVORklMRSI6MjMsIkVOT0JVRlMiOjU1LCJFTk9EQVRBIjo5NiwiRU5PREVWIjoxOSwiRU5PRU5UIjoyLCJFTk9FWEVDIjo4LCJFTk9MQ0siOjc3LCJFTk9MSU5LIjo5NywiRU5PTUVNIjoxMiwiRU5PTVNHIjo5MSwiRU5PUFJP'@;
put 'VE9PUFQiOjQyLCJFTk9TUEMiOjI4LCJFTk9TUiI6OTgsIkVOT1NUUiI6OTksIkVOT1NZUyI6NzgsIkVOT1RDT05OIjo1NywiRU5PVERJUiI6MjAsIkVOT1RFTVBUWSI6NjYsIkVOT1RTT0NLIjozOCwiRU5PVFNVUCI6NDUsIkVOT1RUWSI6MjUsIkVOWElPIjo2LCJFT1BOT1RTVVBQIjoxMDIs'@;
put 'IkVPVkVSRkxPVyI6ODQsIkVQRVJNIjoxLCJFUElQRSI6MzIsIkVQUk9UTyI6MTAwLCJFUFJPVE9OT1NVUFBPUlQiOjQzLCJFUFJPVE9UWVBFIjo0MSwiRVJBTkdFIjozNCwiRVJPRlMiOjMwLCJFU1BJUEUiOjI5LCJFU1JDSCI6MywiRVNUQUxFIjo3MCwiRVRJTUUiOjEwMSwiRVRJTUVET1VU'@;
put 'Ijo2MCwiRVRYVEJTWSI6MjYsIkVXT1VMREJMT0NLIjozNSwiRVhERVYiOjE4LCJTSUdIVVAiOjEsIlNJR0lOVCI6MiwiU0lHUVVJVCI6MywiU0lHSUxMIjo0LCJTSUdUUkFQIjo1LCJTSUdBQlJUIjo2LCJTSUdJT1QiOjYsIlNJR0JVUyI6MTAsIlNJR0ZQRSI6OCwiU0lHS0lMTCI6OSwiU0lH'@;
put 'VVNSMSI6MzAsIlNJR1NFR1YiOjExLCJTSUdVU1IyIjozMSwiU0lHUElQRSI6MTMsIlNJR0FMUk0iOjE0LCJTSUdURVJNIjoxNSwiU0lHQ0hMRCI6MjAsIlNJR0NPTlQiOjE5LCJTSUdTVE9QIjoxNywiU0lHVFNUUCI6MTgsIlNJR1RUSU4iOjIxLCJTSUdUVE9VIjoyMiwiU0lHVVJHIjoxNiwi'@;
put 'U0lHWENQVSI6MjQsIlNJR1hGU1oiOjI1LCJTSUdWVEFMUk0iOjI2LCJTSUdQUk9GIjoyNywiU0lHV0lOQ0giOjI4LCJTSUdJTyI6MjMsIlNJR1NZUyI6MTIsIlNTTF9PUF9BTEwiOjIxNDc0ODY3MTksIlNTTF9PUF9BTExPV19VTlNBRkVfTEVHQUNZX1JFTkVHT1RJQVRJT04iOjI2MjE0NCwi'@;
put 'U1NMX09QX0NJUEhFUl9TRVJWRVJfUFJFRkVSRU5DRSI6NDE5NDMwNCwiU1NMX09QX0NJU0NPX0FOWUNPTk5FQ1QiOjMyNzY4LCJTU0xfT1BfQ09PS0lFX0VYQ0hBTkdFIjo4MTkyLCJTU0xfT1BfQ1JZUFRPUFJPX1RMU0VYVF9CVUciOjIxNDc0ODM2NDgsIlNTTF9PUF9ET05UX0lOU0VSVF9F'@;
put 'TVBUWV9GUkFHTUVOVFMiOjIwNDgsIlNTTF9PUF9FUEhFTUVSQUxfUlNBIjowLCJTU0xfT1BfTEVHQUNZX1NFUlZFUl9DT05ORUNUIjo0LCJTU0xfT1BfTUlDUk9TT0ZUX0JJR19TU0xWM19CVUZGRVIiOjMyLCJTU0xfT1BfTUlDUk9TT0ZUX1NFU1NfSURfQlVHIjoxLCJTU0xfT1BfTVNJRV9T'@;
put 'U0xWMl9SU0FfUEFERElORyI6MCwiU1NMX09QX05FVFNDQVBFX0NBX0ROX0JVRyI6NTM2ODcwOTEyLCJTU0xfT1BfTkVUU0NBUEVfQ0hBTExFTkdFX0JVRyI6MiwiU1NMX09QX05FVFNDQVBFX0RFTU9fQ0lQSEVSX0NIQU5HRV9CVUciOjEwNzM3NDE4MjQsIlNTTF9PUF9ORVRTQ0FQRV9SRVVT'@;
put 'RV9DSVBIRVJfQ0hBTkdFX0JVRyI6OCwiU1NMX09QX05PX0NPTVBSRVNTSU9OIjoxMzEwNzIsIlNTTF9PUF9OT19RVUVSWV9NVFUiOjQwOTYsIlNTTF9PUF9OT19TRVNTSU9OX1JFU1VNUFRJT05fT05fUkVORUdPVElBVElPTiI6NjU1MzYsIlNTTF9PUF9OT19TU0x2MiI6MTY3NzcyMTYsIlNT'@;
put 'TF9PUF9OT19TU0x2MyI6MzM1NTQ0MzIsIlNTTF9PUF9OT19USUNLRVQiOjE2Mzg0LCJTU0xfT1BfTk9fVExTdjEiOjY3MTA4ODY0LCJTU0xfT1BfTk9fVExTdjFfMSI6MjY4NDM1NDU2LCJTU0xfT1BfTk9fVExTdjFfMiI6MTM0MjE3NzI4LCJTU0xfT1BfUEtDUzFfQ0hFQ0tfMSI6MCwiU1NM'@;
put 'X09QX1BLQ1MxX0NIRUNLXzIiOjAsIlNTTF9PUF9TSU5HTEVfREhfVVNFIjoxMDQ4NTc2LCJTU0xfT1BfU0lOR0xFX0VDREhfVVNFIjo1MjQyODgsIlNTTF9PUF9TU0xFQVlfMDgwX0NMSUVOVF9ESF9CVUciOjEyOCwiU1NMX09QX1NTTFJFRjJfUkVVU0VfQ0VSVF9UWVBFX0JVRyI6MCwiU1NM'@;
put 'X09QX1RMU19CTE9DS19QQURESU5HX0JVRyI6NTEyLCJTU0xfT1BfVExTX0Q1X0JVRyI6MjU2LCJTU0xfT1BfVExTX1JPTExCQUNLX0JVRyI6ODM4ODYwOCwiRU5HSU5FX01FVEhPRF9EU0EiOjIsIkVOR0lORV9NRVRIT0RfREgiOjQsIkVOR0lORV9NRVRIT0RfUkFORCI6OCwiRU5HSU5FX01F'@;
put 'VEhPRF9FQ0RIIjoxNiwiRU5HSU5FX01FVEhPRF9FQ0RTQSI6MzIsIkVOR0lORV9NRVRIT0RfQ0lQSEVSUyI6NjQsIkVOR0lORV9NRVRIT0RfRElHRVNUUyI6MTI4LCJFTkdJTkVfTUVUSE9EX1NUT1JFIjoyNTYsIkVOR0lORV9NRVRIT0RfUEtFWV9NRVRIUyI6NTEyLCJFTkdJTkVfTUVUSE9E'@;
put 'X1BLRVlfQVNOMV9NRVRIUyI6MTAyNCwiRU5HSU5FX01FVEhPRF9BTEwiOjY1NTM1LCJFTkdJTkVfTUVUSE9EX05PTkUiOjAsIkRIX0NIRUNLX1BfTk9UX1NBRkVfUFJJTUUiOjIsIkRIX0NIRUNLX1BfTk9UX1BSSU1FIjoxLCJESF9VTkFCTEVfVE9fQ0hFQ0tfR0VORVJBVE9SIjo0LCJESF9O'@;
put 'T1RfU1VJVEFCTEVfR0VORVJBVE9SIjo4LCJOUE5fRU5BQkxFRCI6MSwiUlNBX1BLQ1MxX1BBRERJTkciOjEsIlJTQV9TU0xWMjNfUEFERElORyI6MiwiUlNBX05PX1BBRERJTkciOjMsIlJTQV9QS0NTMV9PQUVQX1BBRERJTkciOjQsIlJTQV9YOTMxX1BBRERJTkciOjUsIlJTQV9QS0NTMV9Q'@;
put 'U1NfUEFERElORyI6NiwiUE9JTlRfQ09OVkVSU0lPTl9DT01QUkVTU0VEIjoyLCJQT0lOVF9DT05WRVJTSU9OX1VOQ09NUFJFU1NFRCI6NCwiUE9JTlRfQ09OVkVSU0lPTl9IWUJSSUQiOjYsIkZfT0siOjAsIlJfT0siOjQsIldfT0siOjIsIlhfT0siOjEsIlVWX1VEUF9SRVVTRUFERFIiOjR9'@;
put 'Jyl9LDk3OTk6SD0+eyJ1c2Ugc3RyaWN0IjtILmV4cG9ydHM9SlNPTi5wYXJzZSgneyJtb2RwMSI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3'@;
put 'OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzYTM2MjBmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAyIjp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4'@;
put 'YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRl'@;
put 'ZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNjUzODFmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHA1Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJl'@;
put 'YTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNl'@;
put 'NDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTIzNzMyN2ZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE0Ijp7Imdl'@;
put 'biI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1'@;
put 'YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYy'@;
put 'MDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1'@;
put 'MTAxNTcyOGU1YThhYWNhYTY4ZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTUiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVm'@;
put 'OTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgz'@;
put 'NjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRj'@;
put 'NTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcx'@;
put 'ZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5M2FkMmNhZmZmZmZm'@;
put 'ZmZmZmZmZmZmZiJ9LCJtb2RwMTYiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYy'@;
put 'NWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1'@;
put 'ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1'@;
put 'NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYx'@;
put 'YWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5MjEwODAxMWE3MjNjMTJhNzg3ZTZkNzg4NzE5YTEwYmRiYTVi'@;
put 'MjY5OWMzMjcxODZhZjRlMjNjMWE5NDY4MzRiNjE1MGJkYTI1ODNlOWNhMmFkNDRjZThkYmJiYzJkYjA0ZGU4ZWY5MmU4ZWZjMTQxZmJlY2FhNjI4N2M1OTQ3NGU2YmMwNWQ5OWIyOTY0ZmEwOTBjM2EyMjMzYmExODY1MTViZTdlZDFmNjEyOTcwY2VlMmQ3YWZiODFiZGQ3NjIxNzA0ODFjZDAw'@;
put 'NjkxMjdkNWIwNWFhOTkzYjRlYTk4OGQ4ZmRkYzE4NmZmYjdkYzkwYTZjMDhmNGRmNDM1YzkzNDA2MzE5OWZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE3Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUw'@;
put 'ODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRi'@;
put 'MWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2Jl'@;
put 'MzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcx'@;
put 'NTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRl'@;
put 'NWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTIxMDgwMTFhNzIzYzEyYTc4N2U2ZDc4ODcxOWExMGJkYmE1YjI2OTljMzI3MTg2YWY0ZTIzYzFhOTQ2ODM0YjYxNTBiZGEyNTgzZTljYTJhZDQ0Y2U4ZGJiYmMyZGIwNGRlOGVmOTJlOGVmYzE0MWZiZWNhYTYyODdjNTk0NzRlNmJjMDVk'@;
put 'OTliMjk2NGZhMDkwYzNhMjIzM2JhMTg2NTE1YmU3ZWQxZjYxMjk3MGNlZTJkN2FmYjgxYmRkNzYyMTcwNDgxY2QwMDY5MTI3ZDViMDVhYTk5M2I0ZWE5ODhkOGZkZGMxODZmZmI3ZGM5MGE2YzA4ZjRkZjQzNWM5MzQwMjg0OTIzNmMzZmFiNGQyN2M3MDI2YzFkNGRjYjI2MDI2NDZkZWM5NzUx'@;
put 'ZTc2M2RiYTM3YmRmOGZmOTQwNmFkOWU1MzBlZTVkYjM4MmY0MTMwMDFhZWIwNmE1M2VkOTAyN2Q4MzExNzk3MjdiMDg2NWE4OTE4ZGEzZWRiZWJjZjliMTRlZDQ0Y2U2Y2JhY2VkNGJiMWJkYjdmMTQ0N2U2Y2MyNTRiMzMyMDUxNTEyYmQ3YWY0MjZmYjhmNDAxMzc4Y2QyYmY1OTgzY2EwMWM2'@;
put 'NGI5MmVjZjAzMmVhMTVkMTcyMWQwM2Y0ODJkN2NlNmU3NGZlZjZkNTVlNzAyZjQ2OTgwYzgyYjVhODQwMzE5MDBiMWM5ZTU5ZTdjOTdmYmVjN2U4ZjMyM2E5N2E3ZTM2Y2M4OGJlMGYxZDQ1YjdmZjU4NWFjNTRiZDQwN2IyMmI0MTU0YWFjYzhmNmQ3ZWJmNDhlMWQ4MTRjYzVlZDIwZjgwMzdl'@;
put 'MGE3OTcxNWVlZjI5YmUzMjgwNmExZDU4YmI3YzVkYTc2ZjU1MGFhM2Q4YTFmYmZmMGViMTljY2IxYTMxM2Q1NWNkYTU2YzllYzJlZjI5NjMyMzg3ZmU4ZDc2ZTNjMDQ2ODA0M2U4ZjY2M2Y0ODYwZWUxMmJmMmQ1YjBiNzQ3NGQ2ZTY5NGY5MWU2ZGNjNDAyNGZmZmZmZmZmZmZmZmZmZmYifSwi'@;
put 'bW9kcDE4Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZk'@;
put 'NmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNh'@;
put 'ZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1'@;
put 'ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEw'@;
put 'NmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTIxMDgwMTFhNzIzYzEyYTc4N2U2ZDc4ODcxOWExMGJkYmE1YjI2OTljMzI3MTg2YWY0'@;
put 'ZTIzYzFhOTQ2ODM0YjYxNTBiZGEyNTgzZTljYTJhZDQ0Y2U4ZGJiYmMyZGIwNGRlOGVmOTJlOGVmYzE0MWZiZWNhYTYyODdjNTk0NzRlNmJjMDVkOTliMjk2NGZhMDkwYzNhMjIzM2JhMTg2NTE1YmU3ZWQxZjYxMjk3MGNlZTJkN2FmYjgxYmRkNzYyMTcwNDgxY2QwMDY5MTI3ZDViMDVhYTk5'@;
put 'M2I0ZWE5ODhkOGZkZGMxODZmZmI3ZGM5MGE2YzA4ZjRkZjQzNWM5MzQwMjg0OTIzNmMzZmFiNGQyN2M3MDI2YzFkNGRjYjI2MDI2NDZkZWM5NzUxZTc2M2RiYTM3YmRmOGZmOTQwNmFkOWU1MzBlZTVkYjM4MmY0MTMwMDFhZWIwNmE1M2VkOTAyN2Q4MzExNzk3MjdiMDg2NWE4OTE4ZGEzZWRi'@;
put 'ZWJjZjliMTRlZDQ0Y2U2Y2JhY2VkNGJiMWJkYjdmMTQ0N2U2Y2MyNTRiMzMyMDUxNTEyYmQ3YWY0MjZmYjhmNDAxMzc4Y2QyYmY1OTgzY2EwMWM2NGI5MmVjZjAzMmVhMTVkMTcyMWQwM2Y0ODJkN2NlNmU3NGZlZjZkNTVlNzAyZjQ2OTgwYzgyYjVhODQwMzE5MDBiMWM5ZTU5ZTdjOTdmYmVj'@;
put 'N2U4ZjMyM2E5N2E3ZTM2Y2M4OGJlMGYxZDQ1YjdmZjU4NWFjNTRiZDQwN2IyMmI0MTU0YWFjYzhmNmQ3ZWJmNDhlMWQ4MTRjYzVlZDIwZjgwMzdlMGE3OTcxNWVlZjI5YmUzMjgwNmExZDU4YmI3YzVkYTc2ZjU1MGFhM2Q4YTFmYmZmMGViMTljY2IxYTMxM2Q1NWNkYTU2YzllYzJlZjI5NjMy'@;
put 'Mzg3ZmU4ZDc2ZTNjMDQ2ODA0M2U4ZjY2M2Y0ODYwZWUxMmJmMmQ1YjBiNzQ3NGQ2ZTY5NGY5MWU2ZGJlMTE1OTc0YTM5MjZmMTJmZWU1ZTQzODc3N2NiNmE5MzJkZjhjZDhiZWM0ZDA3M2I5MzFiYTNiYzgzMmI2OGQ5ZGQzMDA3NDFmYTdiZjhhZmM0N2VkMjU3NmY2OTM2YmE0MjQ2NjNhYWI2'@;
put 'MzljNWFlNGY1NjgzNDIzYjQ3NDJiZjFjOTc4MjM4ZjE2Y2JlMzlkNjUyZGUzZmRiOGJlZmM4NDhhZDkyMjIyMmUwNGE0MDM3YzA3MTNlYjU3YTgxYTIzZjBjNzM0NzNmYzY0NmNlYTMwNmI0YmNiYzg4NjJmODM4NWRkZmE5ZDRiN2ZhMmMwODdlODc5NjgzMzAzZWQ1YmRkM2EwNjJiM2NmNWIz'@;
put 'YTI3OGE2NmQyYTEzZjgzZjQ0ZjgyZGRmMzEwZWUwNzRhYjZhMzY0NTk3ZTg5OWEwMjU1ZGMxNjRmMzFjYzUwODQ2ODUxZGY5YWI0ODE5NWRlZDdlYTFiMWQ1MTBiZDdlZTc0ZDczZmFmMzZiYzMxZWNmYTI2ODM1OTA0NmY0ZWI4NzlmOTI0MDA5NDM4YjQ4MWM2Y2Q3ODg5YTAwMmVkNWVlMzgy'@;
put 'YmM5MTkwZGE2ZmMwMjZlNDc5NTU4ZTQ0NzU2NzdlOWFhOWUzMDUwZTI3NjU2OTRkZmM4MWY1NmU4ODBiOTZlNzE2MGM5ODBkZDk4ZWRkM2RmZmZmZmZmZmZmZmZmZmZmZiJ9fScpfSw4NTk3Okg9PnsidXNlIHN0cmljdCI7SC5leHBvcnRzPXtpODoiNi41LjQifX0sMjU2MjpIPT57InVzZSBz'@;
put 'dHJpY3QiO0guZXhwb3J0cz1KU09OLnBhcnNlKCd7IjIuMTYuODQwLjEuMTAxLjMuNC4xLjEiOiJhZXMtMTI4LWVjYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIiOiJhZXMtMTI4LWNiYyIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjMiOiJhZXMtMTI4LW9mYiIsIjIuMTYuODQwLjEuMTAxLjMu'@;
put 'NC4xLjQiOiJhZXMtMTI4LWNmYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIxIjoiYWVzLTE5Mi1lY2IiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yMiI6ImFlcy0xOTItY2JjIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjMiOiJhZXMtMTkyLW9mYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjI0'@;
put 'IjoiYWVzLTE5Mi1jZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40MSI6ImFlcy0yNTYtZWNiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDIiOiJhZXMtMjU2LWNiYyIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQzIjoiYWVzLTI1Ni1vZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40NCI6ImFl'@;
put 'cy0yNTYtY2ZiIn0nKX0sMzcwNDpIPT57InVzZSBzdHJpY3QiO0guZXhwb3J0cz1KU09OLnBhcnNlKCdbImFjIiwiY29tLmFjIiwiZWR1LmFjIiwiZ292LmFjIiwibmV0LmFjIiwibWlsLmFjIiwib3JnLmFjIiwiYWQiLCJub20uYWQiLCJhZSIsImNvLmFlIiwibmV0LmFlIiwib3JnLmFlIiwi'@;
put 'c2NoLmFlIiwiYWMuYWUiLCJnb3YuYWUiLCJtaWwuYWUiLCJhZXJvIiwiYWNjaWRlbnQtaW52ZXN0aWdhdGlvbi5hZXJvIiwiYWNjaWRlbnQtcHJldmVudGlvbi5hZXJvIiwiYWVyb2JhdGljLmFlcm8iLCJhZXJvY2x1Yi5hZXJvIiwiYWVyb2Ryb21lLmFlcm8iLCJhZ2VudHMuYWVybyIsImFp'@;
put 'cmNyYWZ0LmFlcm8iLCJhaXJsaW5lLmFlcm8iLCJhaXJwb3J0LmFlcm8iLCJhaXItc3VydmVpbGxhbmNlLmFlcm8iLCJhaXJ0cmFmZmljLmFlcm8iLCJhaXItdHJhZmZpYy1jb250cm9sLmFlcm8iLCJhbWJ1bGFuY2UuYWVybyIsImFtdXNlbWVudC5hZXJvIiwiYXNzb2NpYXRpb24uYWVybyIs'@;
put 'ImF1dGhvci5hZXJvIiwiYmFsbG9vbmluZy5hZXJvIiwiYnJva2VyLmFlcm8iLCJjYWEuYWVybyIsImNhcmdvLmFlcm8iLCJjYXRlcmluZy5hZXJvIiwiY2VydGlmaWNhdGlvbi5hZXJvIiwiY2hhbXBpb25zaGlwLmFlcm8iLCJjaGFydGVyLmFlcm8iLCJjaXZpbGF2aWF0aW9uLmFlcm8iLCJj'@;
put 'bHViLmFlcm8iLCJjb25mZXJlbmNlLmFlcm8iLCJjb25zdWx0YW50LmFlcm8iLCJjb25zdWx0aW5nLmFlcm8iLCJjb250cm9sLmFlcm8iLCJjb3VuY2lsLmFlcm8iLCJjcmV3LmFlcm8iLCJkZXNpZ24uYWVybyIsImRnY2EuYWVybyIsImVkdWNhdG9yLmFlcm8iLCJlbWVyZ2VuY3kuYWVybyIs'@;
put 'ImVuZ2luZS5hZXJvIiwiZW5naW5lZXIuYWVybyIsImVudGVydGFpbm1lbnQuYWVybyIsImVxdWlwbWVudC5hZXJvIiwiZXhjaGFuZ2UuYWVybyIsImV4cHJlc3MuYWVybyIsImZlZGVyYXRpb24uYWVybyIsImZsaWdodC5hZXJvIiwiZnVlbC5hZXJvIiwiZ2xpZGluZy5hZXJvIiwiZ292ZXJu'@;
put 'bWVudC5hZXJvIiwiZ3JvdW5kaGFuZGxpbmcuYWVybyIsImdyb3VwLmFlcm8iLCJoYW5nZ2xpZGluZy5hZXJvIiwiaG9tZWJ1aWx0LmFlcm8iLCJpbnN1cmFuY2UuYWVybyIsImpvdXJuYWwuYWVybyIsImpvdXJuYWxpc3QuYWVybyIsImxlYXNpbmcuYWVybyIsImxvZ2lzdGljcy5hZXJvIiwi'@;
put 'bWFnYXppbmUuYWVybyIsIm1haW50ZW5hbmNlLmFlcm8iLCJtZWRpYS5hZXJvIiwibWljcm9saWdodC5hZXJvIiwibW9kZWxsaW5nLmFlcm8iLCJuYXZpZ2F0aW9uLmFlcm8iLCJwYXJhY2h1dGluZy5hZXJvIiwicGFyYWdsaWRpbmcuYWVybyIsInBhc3Nlbmdlci1hc3NvY2lhdGlvbi5hZXJv'@;
put 'IiwicGlsb3QuYWVybyIsInByZXNzLmFlcm8iLCJwcm9kdWN0aW9uLmFlcm8iLCJyZWNyZWF0aW9uLmFlcm8iLCJyZXBib2R5LmFlcm8iLCJyZXMuYWVybyIsInJlc2VhcmNoLmFlcm8iLCJyb3RvcmNyYWZ0LmFlcm8iLCJzYWZldHkuYWVybyIsInNjaWVudGlzdC5hZXJvIiwic2VydmljZXMu'@;
put 'YWVybyIsInNob3cuYWVybyIsInNreWRpdmluZy5hZXJvIiwic29mdHdhcmUuYWVybyIsInN0dWRlbnQuYWVybyIsInRyYWRlci5hZXJvIiwidHJhZGluZy5hZXJvIiwidHJhaW5lci5hZXJvIiwidW5pb24uYWVybyIsIndvcmtpbmdncm91cC5hZXJvIiwid29ya3MuYWVybyIsImFmIiwiZ292'@;
put 'LmFmIiwiY29tLmFmIiwib3JnLmFmIiwibmV0LmFmIiwiZWR1LmFmIiwiYWciLCJjb20uYWciLCJvcmcuYWciLCJuZXQuYWciLCJjby5hZyIsIm5vbS5hZyIsImFpIiwib2ZmLmFpIiwiY29tLmFpIiwibmV0LmFpIiwib3JnLmFpIiwiYWwiLCJjb20uYWwiLCJlZHUuYWwiLCJnb3YuYWwiLCJt'@;
put 'aWwuYWwiLCJuZXQuYWwiLCJvcmcuYWwiLCJhbSIsImNvLmFtIiwiY29tLmFtIiwiY29tbXVuZS5hbSIsIm5ldC5hbSIsIm9yZy5hbSIsImFvIiwiZWQuYW8iLCJndi5hbyIsIm9nLmFvIiwiY28uYW8iLCJwYi5hbyIsIml0LmFvIiwiYXEiLCJhciIsImJldC5hciIsImNvbS5hciIsImNvb3Au'@;
put 'YXIiLCJlZHUuYXIiLCJnb2IuYXIiLCJnb3YuYXIiLCJpbnQuYXIiLCJtaWwuYXIiLCJtdXNpY2EuYXIiLCJtdXR1YWwuYXIiLCJuZXQuYXIiLCJvcmcuYXIiLCJzZW5hc2EuYXIiLCJ0dXIuYXIiLCJhcnBhIiwiZTE2NC5hcnBhIiwiaW4tYWRkci5hcnBhIiwiaXA2LmFycGEiLCJpcmlzLmFy'@;
put 'cGEiLCJ1cmkuYXJwYSIsInVybi5hcnBhIiwiYXMiLCJnb3YuYXMiLCJhc2lhIiwiYXQiLCJhYy5hdCIsImNvLmF0IiwiZ3YuYXQiLCJvci5hdCIsInN0aC5hYy5hdCIsImF1IiwiY29tLmF1IiwibmV0LmF1Iiwib3JnLmF1IiwiZWR1LmF1IiwiZ292LmF1IiwiYXNuLmF1IiwiaWQuYXUiLCJp'@;
put 'bmZvLmF1IiwiY29uZi5hdSIsIm96LmF1IiwiYWN0LmF1IiwibnN3LmF1IiwibnQuYXUiLCJxbGQuYXUiLCJzYS5hdSIsInRhcy5hdSIsInZpYy5hdSIsIndhLmF1IiwiYWN0LmVkdS5hdSIsImNhdGhvbGljLmVkdS5hdSIsIm5zdy5lZHUuYXUiLCJudC5lZHUuYXUiLCJxbGQuZWR1LmF1Iiwi'@;
put 'c2EuZWR1LmF1IiwidGFzLmVkdS5hdSIsInZpYy5lZHUuYXUiLCJ3YS5lZHUuYXUiLCJxbGQuZ292LmF1Iiwic2EuZ292LmF1IiwidGFzLmdvdi5hdSIsInZpYy5nb3YuYXUiLCJ3YS5nb3YuYXUiLCJzY2hvb2xzLm5zdy5lZHUuYXUiLCJhdyIsImNvbS5hdyIsImF4IiwiYXoiLCJjb20uYXoi'@;
put 'LCJuZXQuYXoiLCJpbnQuYXoiLCJnb3YuYXoiLCJvcmcuYXoiLCJlZHUuYXoiLCJpbmZvLmF6IiwicHAuYXoiLCJtaWwuYXoiLCJuYW1lLmF6IiwicHJvLmF6IiwiYml6LmF6IiwiYmEiLCJjb20uYmEiLCJlZHUuYmEiLCJnb3YuYmEiLCJtaWwuYmEiLCJuZXQuYmEiLCJvcmcuYmEiLCJiYiIs'@;
put 'ImJpei5iYiIsImNvLmJiIiwiY29tLmJiIiwiZWR1LmJiIiwiZ292LmJiIiwiaW5mby5iYiIsIm5ldC5iYiIsIm9yZy5iYiIsInN0b3JlLmJiIiwidHYuYmIiLCIqLmJkIiwiYmUiLCJhYy5iZSIsImJmIiwiZ292LmJmIiwiYmciLCJhLmJnIiwiYi5iZyIsImMuYmciLCJkLmJnIiwiZS5iZyIs'@;
put 'ImYuYmciLCJnLmJnIiwiaC5iZyIsImkuYmciLCJqLmJnIiwiay5iZyIsImwuYmciLCJtLmJnIiwibi5iZyIsIm8uYmciLCJwLmJnIiwicS5iZyIsInIuYmciLCJzLmJnIiwidC5iZyIsInUuYmciLCJ2LmJnIiwidy5iZyIsInguYmciLCJ5LmJnIiwiei5iZyIsIjAuYmciLCIxLmJnIiwiMi5i'@;
put 'ZyIsIjMuYmciLCI0LmJnIiwiNS5iZyIsIjYuYmciLCI3LmJnIiwiOC5iZyIsIjkuYmciLCJiaCIsImNvbS5iaCIsImVkdS5iaCIsIm5ldC5iaCIsIm9yZy5iaCIsImdvdi5iaCIsImJpIiwiY28uYmkiLCJjb20uYmkiLCJlZHUuYmkiLCJvci5iaSIsIm9yZy5iaSIsImJpeiIsImJqIiwiYXNz'@;
put 'by5iaiIsImJhcnJlYXUuYmoiLCJnb3V2LmJqIiwiYm0iLCJjb20uYm0iLCJlZHUuYm0iLCJnb3YuYm0iLCJuZXQuYm0iLCJvcmcuYm0iLCJibiIsImNvbS5ibiIsImVkdS5ibiIsImdvdi5ibiIsIm5ldC5ibiIsIm9yZy5ibiIsImJvIiwiY29tLmJvIiwiZWR1LmJvIiwiZ29iLmJvIiwiaW50'@;
put 'LmJvIiwib3JnLmJvIiwibmV0LmJvIiwibWlsLmJvIiwidHYuYm8iLCJ3ZWIuYm8iLCJhY2FkZW1pYS5ibyIsImFncm8uYm8iLCJhcnRlLmJvIiwiYmxvZy5ibyIsImJvbGl2aWEuYm8iLCJjaWVuY2lhLmJvIiwiY29vcGVyYXRpdmEuYm8iLCJkZW1vY3JhY2lhLmJvIiwiZGVwb3J0ZS5ibyIs'@;
put 'ImVjb2xvZ2lhLmJvIiwiZWNvbm9taWEuYm8iLCJlbXByZXNhLmJvIiwiaW5kaWdlbmEuYm8iLCJpbmR1c3RyaWEuYm8iLCJpbmZvLmJvIiwibWVkaWNpbmEuYm8iLCJtb3ZpbWllbnRvLmJvIiwibXVzaWNhLmJvIiwibmF0dXJhbC5ibyIsIm5vbWJyZS5ibyIsIm5vdGljaWFzLmJvIiwicGF0'@;
put 'cmlhLmJvIiwicG9saXRpY2EuYm8iLCJwcm9mZXNpb25hbC5ibyIsInBsdXJpbmFjaW9uYWwuYm8iLCJwdWVibG8uYm8iLCJyZXZpc3RhLmJvIiwic2FsdWQuYm8iLCJ0ZWNub2xvZ2lhLmJvIiwidGtzYXQuYm8iLCJ0cmFuc3BvcnRlLmJvIiwid2lraS5ibyIsImJyIiwiOWd1YWN1LmJyIiwi'@;
put 'YWJjLmJyIiwiYWRtLmJyIiwiYWR2LmJyIiwiYWdyLmJyIiwiYWp1LmJyIiwiYW0uYnIiLCJhbmFuaS5iciIsImFwYXJlY2lkYS5iciIsImFwcC5iciIsImFycS5iciIsImFydC5iciIsImF0by5iciIsImIuYnIiLCJiYXJ1ZXJpLmJyIiwiYmVsZW0uYnIiLCJiaHouYnIiLCJiaWIuYnIiLCJi'@;
put 'aW8uYnIiLCJibG9nLmJyIiwiYm1kLmJyIiwiYm9hdmlzdGEuYnIiLCJic2IuYnIiLCJjYW1waW5hZ3JhbmRlLmJyIiwiY2FtcGluYXMuYnIiLCJjYXhpYXMuYnIiLCJjaW0uYnIiLCJjbmcuYnIiLCJjbnQuYnIiLCJjb20uYnIiLCJjb250YWdlbS5iciIsImNvb3AuYnIiLCJjb3ouYnIiLCJj'@;
put 'cmkuYnIiLCJjdWlhYmEuYnIiLCJjdXJpdGliYS5iciIsImRlZi5iciIsImRlcy5iciIsImRldC5iciIsImRldi5iciIsImVjbi5iciIsImVjby5iciIsImVkdS5iciIsImVtcC5iciIsImVuZi5iciIsImVuZy5iciIsImVzcC5iciIsImV0Yy5iciIsImV0aS5iciIsImZhci5iciIsImZlaXJh'@;
put 'LmJyIiwiZmxvZy5iciIsImZsb3JpcGEuYnIiLCJmbS5iciIsImZuZC5iciIsImZvcnRhbC5iciIsImZvdC5iciIsImZvei5iciIsImZzdC5iciIsImcxMi5iciIsImdlby5iciIsImdnZi5iciIsImdvaWFuaWEuYnIiLCJnb3YuYnIiLCJhYy5nb3YuYnIiLCJhbC5nb3YuYnIiLCJhbS5nb3Yu'@;
put 'YnIiLCJhcC5nb3YuYnIiLCJiYS5nb3YuYnIiLCJjZS5nb3YuYnIiLCJkZi5nb3YuYnIiLCJlcy5nb3YuYnIiLCJnby5nb3YuYnIiLCJtYS5nb3YuYnIiLCJtZy5nb3YuYnIiLCJtcy5nb3YuYnIiLCJtdC5nb3YuYnIiLCJwYS5nb3YuYnIiLCJwYi5nb3YuYnIiLCJwZS5nb3YuYnIiLCJwaS5n'@;
put 'b3YuYnIiLCJwci5nb3YuYnIiLCJyai5nb3YuYnIiLCJybi5nb3YuYnIiLCJyby5nb3YuYnIiLCJyci5nb3YuYnIiLCJycy5nb3YuYnIiLCJzYy5nb3YuYnIiLCJzZS5nb3YuYnIiLCJzcC5nb3YuYnIiLCJ0by5nb3YuYnIiLCJncnUuYnIiLCJpbWIuYnIiLCJpbmQuYnIiLCJpbmYuYnIiLCJq'@;
put 'YWIuYnIiLCJqYW1wYS5iciIsImpkZi5iciIsImpvaW52aWxsZS5iciIsImpvci5iciIsImp1cy5iciIsImxlZy5iciIsImxlbC5iciIsImxvZy5iciIsImxvbmRyaW5hLmJyIiwibWFjYXBhLmJyIiwibWFjZWlvLmJyIiwibWFuYXVzLmJyIiwibWFyaW5nYS5iciIsIm1hdC5iciIsIm1lZC5i'@;
put 'ciIsIm1pbC5iciIsIm1vcmVuYS5iciIsIm1wLmJyIiwibXVzLmJyIiwibmF0YWwuYnIiLCJuZXQuYnIiLCJuaXRlcm9pLmJyIiwiKi5ub20uYnIiLCJub3QuYnIiLCJudHIuYnIiLCJvZG8uYnIiLCJvbmcuYnIiLCJvcmcuYnIiLCJvc2FzY28uYnIiLCJwYWxtYXMuYnIiLCJwb2EuYnIiLCJw'@;
put 'cGcuYnIiLCJwcm8uYnIiLCJwc2MuYnIiLCJwc2kuYnIiLCJwdmguYnIiLCJxc2wuYnIiLCJyYWRpby5iciIsInJlYy5iciIsInJlY2lmZS5iciIsInJlcC5iciIsInJpYmVpcmFvLmJyIiwicmlvLmJyIiwicmlvYnJhbmNvLmJyIiwicmlvcHJldG8uYnIiLCJzYWx2YWRvci5iciIsInNhbXBh'@;
put 'LmJyIiwic2FudGFtYXJpYS5iciIsInNhbnRvYW5kcmUuYnIiLCJzYW9iZXJuYXJkby5iciIsInNhb2dvbmNhLmJyIiwic2VnLmJyIiwic2pjLmJyIiwic2xnLmJyIiwic2x6LmJyIiwic29yb2NhYmEuYnIiLCJzcnYuYnIiLCJ0YXhpLmJyIiwidGMuYnIiLCJ0ZWMuYnIiLCJ0ZW8uYnIiLCJ0'@;
put 'aGUuYnIiLCJ0bXAuYnIiLCJ0cmQuYnIiLCJ0dXIuYnIiLCJ0di5iciIsInVkaS5iciIsInZldC5iciIsInZpeC5iciIsInZsb2cuYnIiLCJ3aWtpLmJyIiwiemxnLmJyIiwiYnMiLCJjb20uYnMiLCJuZXQuYnMiLCJvcmcuYnMiLCJlZHUuYnMiLCJnb3YuYnMiLCJidCIsImNvbS5idCIsImVk'@;
put 'dS5idCIsImdvdi5idCIsIm5ldC5idCIsIm9yZy5idCIsImJ2IiwiYnciLCJjby5idyIsIm9yZy5idyIsImJ5IiwiZ292LmJ5IiwibWlsLmJ5IiwiY29tLmJ5Iiwib2YuYnkiLCJieiIsImNvbS5ieiIsIm5ldC5ieiIsIm9yZy5ieiIsImVkdS5ieiIsImdvdi5ieiIsImNhIiwiYWIuY2EiLCJi'@;
put 'Yy5jYSIsIm1iLmNhIiwibmIuY2EiLCJuZi5jYSIsIm5sLmNhIiwibnMuY2EiLCJudC5jYSIsIm51LmNhIiwib24uY2EiLCJwZS5jYSIsInFjLmNhIiwic2suY2EiLCJ5ay5jYSIsImdjLmNhIiwiY2F0IiwiY2MiLCJjZCIsImdvdi5jZCIsImNmIiwiY2ciLCJjaCIsImNpIiwib3JnLmNpIiwi'@;
put 'b3IuY2kiLCJjb20uY2kiLCJjby5jaSIsImVkdS5jaSIsImVkLmNpIiwiYWMuY2kiLCJuZXQuY2kiLCJnby5jaSIsImFzc28uY2kiLCJhXHhlOXJvcG9ydC5jaSIsImludC5jaSIsInByZXNzZS5jaSIsIm1kLmNpIiwiZ291di5jaSIsIiouY2siLCIhd3d3LmNrIiwiY2wiLCJjby5jbCIsImdv'@;
put 'Yi5jbCIsImdvdi5jbCIsIm1pbC5jbCIsImNtIiwiY28uY20iLCJjb20uY20iLCJnb3YuY20iLCJuZXQuY20iLCJjbiIsImFjLmNuIiwiY29tLmNuIiwiZWR1LmNuIiwiZ292LmNuIiwibmV0LmNuIiwib3JnLmNuIiwibWlsLmNuIiwiXHU1MTZjXHU1M2Y4LmNuIiwiXHU3ZjUxXHU3ZWRjLmNu'@;
put 'IiwiXHU3ZGIyXHU3ZDYxLmNuIiwiYWguY24iLCJiai5jbiIsImNxLmNuIiwiZmouY24iLCJnZC5jbiIsImdzLmNuIiwiZ3ouY24iLCJneC5jbiIsImhhLmNuIiwiaGIuY24iLCJoZS5jbiIsImhpLmNuIiwiaGwuY24iLCJobi5jbiIsImpsLmNuIiwianMuY24iLCJqeC5jbiIsImxuLmNuIiwi'@;
put 'bm0uY24iLCJueC5jbiIsInFoLmNuIiwic2MuY24iLCJzZC5jbiIsInNoLmNuIiwic24uY24iLCJzeC5jbiIsInRqLmNuIiwieGouY24iLCJ4ei5jbiIsInluLmNuIiwiemouY24iLCJoay5jbiIsIm1vLmNuIiwidHcuY24iLCJjbyIsImFydHMuY28iLCJjb20uY28iLCJlZHUuY28iLCJmaXJt'@;
put 'LmNvIiwiZ292LmNvIiwiaW5mby5jbyIsImludC5jbyIsIm1pbC5jbyIsIm5ldC5jbyIsIm5vbS5jbyIsIm9yZy5jbyIsInJlYy5jbyIsIndlYi5jbyIsImNvbSIsImNvb3AiLCJjciIsImFjLmNyIiwiY28uY3IiLCJlZC5jciIsImZpLmNyIiwiZ28uY3IiLCJvci5jciIsInNhLmNyIiwiY3Ui'@;
put 'LCJjb20uY3UiLCJlZHUuY3UiLCJvcmcuY3UiLCJuZXQuY3UiLCJnb3YuY3UiLCJpbmYuY3UiLCJjdiIsImNvbS5jdiIsImVkdS5jdiIsImludC5jdiIsIm5vbWUuY3YiLCJvcmcuY3YiLCJjdyIsImNvbS5jdyIsImVkdS5jdyIsIm5ldC5jdyIsIm9yZy5jdyIsImN4IiwiZ292LmN4IiwiY3ki'@;
put 'LCJhYy5jeSIsImJpei5jeSIsImNvbS5jeSIsImVrbG9nZXMuY3kiLCJnb3YuY3kiLCJsdGQuY3kiLCJtaWwuY3kiLCJuZXQuY3kiLCJvcmcuY3kiLCJwcmVzcy5jeSIsInByby5jeSIsInRtLmN5IiwiY3oiLCJkZSIsImRqIiwiZGsiLCJkbSIsImNvbS5kbSIsIm5ldC5kbSIsIm9yZy5kbSIs'@;
put 'ImVkdS5kbSIsImdvdi5kbSIsImRvIiwiYXJ0LmRvIiwiY29tLmRvIiwiZWR1LmRvIiwiZ29iLmRvIiwiZ292LmRvIiwibWlsLmRvIiwibmV0LmRvIiwib3JnLmRvIiwic2xkLmRvIiwid2ViLmRvIiwiZHoiLCJhcnQuZHoiLCJhc3NvLmR6IiwiY29tLmR6IiwiZWR1LmR6IiwiZ292LmR6Iiwi'@;
put 'b3JnLmR6IiwibmV0LmR6IiwicG9sLmR6Iiwic29jLmR6IiwidG0uZHoiLCJlYyIsImNvbS5lYyIsImluZm8uZWMiLCJuZXQuZWMiLCJmaW4uZWMiLCJrMTIuZWMiLCJtZWQuZWMiLCJwcm8uZWMiLCJvcmcuZWMiLCJlZHUuZWMiLCJnb3YuZWMiLCJnb2IuZWMiLCJtaWwuZWMiLCJlZHUiLCJl'@;
put 'ZSIsImVkdS5lZSIsImdvdi5lZSIsInJpaWsuZWUiLCJsaWIuZWUiLCJtZWQuZWUiLCJjb20uZWUiLCJwcmkuZWUiLCJhaXAuZWUiLCJvcmcuZWUiLCJmaWUuZWUiLCJlZyIsImNvbS5lZyIsImVkdS5lZyIsImV1bi5lZyIsImdvdi5lZyIsIm1pbC5lZyIsIm5hbWUuZWciLCJuZXQuZWciLCJv'@;
put 'cmcuZWciLCJzY2kuZWciLCIqLmVyIiwiZXMiLCJjb20uZXMiLCJub20uZXMiLCJvcmcuZXMiLCJnb2IuZXMiLCJlZHUuZXMiLCJldCIsImNvbS5ldCIsImdvdi5ldCIsIm9yZy5ldCIsImVkdS5ldCIsImJpei5ldCIsIm5hbWUuZXQiLCJpbmZvLmV0IiwibmV0LmV0IiwiZXUiLCJmaSIsImFs'@;
put 'YW5kLmZpIiwiZmoiLCJhYy5maiIsImJpei5maiIsImNvbS5maiIsImdvdi5maiIsImluZm8uZmoiLCJtaWwuZmoiLCJuYW1lLmZqIiwibmV0LmZqIiwib3JnLmZqIiwicHJvLmZqIiwiKi5mayIsImNvbS5mbSIsImVkdS5mbSIsIm5ldC5mbSIsIm9yZy5mbSIsImZtIiwiZm8iLCJmciIsImFz'@;
put 'c28uZnIiLCJjb20uZnIiLCJnb3V2LmZyIiwibm9tLmZyIiwicHJkLmZyIiwidG0uZnIiLCJhZXJvcG9ydC5mciIsImF2b2NhdC5mciIsImF2b3Vlcy5mciIsImNjaS5mciIsImNoYW1iYWdyaS5mciIsImNoaXJ1cmdpZW5zLWRlbnRpc3Rlcy5mciIsImV4cGVydHMtY29tcHRhYmxlcy5mciIs'@;
put 'Imdlb21ldHJlLWV4cGVydC5mciIsImdyZXRhLmZyIiwiaHVpc3NpZXItanVzdGljZS5mciIsIm1lZGVjaW4uZnIiLCJub3RhaXJlcy5mciIsInBoYXJtYWNpZW4uZnIiLCJwb3J0LmZyIiwidmV0ZXJpbmFpcmUuZnIiLCJnYSIsImdiIiwiZWR1LmdkIiwiZ292LmdkIiwiZ2QiLCJnZSIsImNv'@;
put 'bS5nZSIsImVkdS5nZSIsImdvdi5nZSIsIm9yZy5nZSIsIm1pbC5nZSIsIm5ldC5nZSIsInB2dC5nZSIsImdmIiwiZ2ciLCJjby5nZyIsIm5ldC5nZyIsIm9yZy5nZyIsImdoIiwiY29tLmdoIiwiZWR1LmdoIiwiZ292LmdoIiwib3JnLmdoIiwibWlsLmdoIiwiZ2kiLCJjb20uZ2kiLCJsdGQu'@;
put 'Z2kiLCJnb3YuZ2kiLCJtb2QuZ2kiLCJlZHUuZ2kiLCJvcmcuZ2kiLCJnbCIsImNvLmdsIiwiY29tLmdsIiwiZWR1LmdsIiwibmV0LmdsIiwib3JnLmdsIiwiZ20iLCJnbiIsImFjLmduIiwiY29tLmduIiwiZWR1LmduIiwiZ292LmduIiwib3JnLmduIiwibmV0LmduIiwiZ292IiwiZ3AiLCJj'@;
put 'b20uZ3AiLCJuZXQuZ3AiLCJtb2JpLmdwIiwiZWR1LmdwIiwib3JnLmdwIiwiYXNzby5ncCIsImdxIiwiZ3IiLCJjb20uZ3IiLCJlZHUuZ3IiLCJuZXQuZ3IiLCJvcmcuZ3IiLCJnb3YuZ3IiLCJncyIsImd0IiwiY29tLmd0IiwiZWR1Lmd0IiwiZ29iLmd0IiwiaW5kLmd0IiwibWlsLmd0Iiwi'@;
put 'bmV0Lmd0Iiwib3JnLmd0IiwiZ3UiLCJjb20uZ3UiLCJlZHUuZ3UiLCJnb3YuZ3UiLCJndWFtLmd1IiwiaW5mby5ndSIsIm5ldC5ndSIsIm9yZy5ndSIsIndlYi5ndSIsImd3IiwiZ3kiLCJjby5neSIsImNvbS5neSIsImVkdS5neSIsImdvdi5neSIsIm5ldC5neSIsIm9yZy5neSIsImhrIiwi'@;
put 'Y29tLmhrIiwiZWR1LmhrIiwiZ292LmhrIiwiaWR2LmhrIiwibmV0LmhrIiwib3JnLmhrIiwiXHU1MTZjXHU1M2Y4LmhrIiwiXHU2NTU5XHU4MGIyLmhrIiwiXHU2NTRlXHU4MGIyLmhrIiwiXHU2NTNmXHU1ZTljLmhrIiwiXHU1MDBiXHU0ZWJhLmhrIiwiXHU0ZTJhXHVmZmZkXHVmZmZkLmhr'@;
put 'IiwiXHU3Yjg3XHU0ZWJhLmhrIiwiXHU3ZGIyXHU3ZWRjLmhrIiwiXHU3ZjUxXHU3ZWRjLmhrIiwiXHU3ZWM0XHU3ZTU0LmhrIiwiXHU3ZGIyXHU3ZDYxLmhrIiwiXHU3ZjUxXHU3ZDYxLmhrIiwiXHU3ZWM0XHU3ZWM3LmhrIiwiXHU3ZDQ0XHU3ZTU0LmhrIiwiXHU3ZDQ0XHU3ZWM3LmhrIiwi'@;
put 'aG0iLCJobiIsImNvbS5obiIsImVkdS5obiIsIm9yZy5obiIsIm5ldC5obiIsIm1pbC5obiIsImdvYi5obiIsImhyIiwiaXouaHIiLCJmcm9tLmhyIiwibmFtZS5ociIsImNvbS5ociIsImh0IiwiY29tLmh0Iiwic2hvcC5odCIsImZpcm0uaHQiLCJpbmZvLmh0IiwiYWR1bHQuaHQiLCJuZXQu'@;
put 'aHQiLCJwcm8uaHQiLCJvcmcuaHQiLCJtZWQuaHQiLCJhcnQuaHQiLCJjb29wLmh0IiwicG9sLmh0IiwiYXNzby5odCIsImVkdS5odCIsInJlbC5odCIsImdvdXYuaHQiLCJwZXJzby5odCIsImh1IiwiY28uaHUiLCJpbmZvLmh1Iiwib3JnLmh1IiwicHJpdi5odSIsInNwb3J0Lmh1IiwidG0u'@;
put 'aHUiLCIyMDAwLmh1IiwiYWdyYXIuaHUiLCJib2x0Lmh1IiwiY2FzaW5vLmh1IiwiY2l0eS5odSIsImVyb3RpY2EuaHUiLCJlcm90aWthLmh1IiwiZmlsbS5odSIsImZvcnVtLmh1IiwiZ2FtZXMuaHUiLCJob3RlbC5odSIsImluZ2F0bGFuLmh1Iiwiam9nYXN6Lmh1Iiwia29ueXZlbG8uaHUi'@;
put 'LCJsYWthcy5odSIsIm1lZGlhLmh1IiwibmV3cy5odSIsInJla2xhbS5odSIsInNleC5odSIsInNob3AuaHUiLCJzdWxpLmh1Iiwic3pleC5odSIsInRvenNkZS5odSIsInV0YXphcy5odSIsInZpZGVvLmh1IiwiaWQiLCJhYy5pZCIsImJpei5pZCIsImNvLmlkIiwiZGVzYS5pZCIsImdvLmlk'@;
put 'IiwibWlsLmlkIiwibXkuaWQiLCJuZXQuaWQiLCJvci5pZCIsInBvbnBlcy5pZCIsInNjaC5pZCIsIndlYi5pZCIsImllIiwiZ292LmllIiwiaWwiLCJhYy5pbCIsImNvLmlsIiwiZ292LmlsIiwiaWRmLmlsIiwiazEyLmlsIiwibXVuaS5pbCIsIm5ldC5pbCIsIm9yZy5pbCIsImltIiwiYWMu'@;
put 'aW0iLCJjby5pbSIsImNvbS5pbSIsImx0ZC5jby5pbSIsIm5ldC5pbSIsIm9yZy5pbSIsInBsYy5jby5pbSIsInR0LmltIiwidHYuaW0iLCJpbiIsImNvLmluIiwiZmlybS5pbiIsIm5ldC5pbiIsIm9yZy5pbiIsImdlbi5pbiIsImluZC5pbiIsIm5pYy5pbiIsImFjLmluIiwiZWR1LmluIiwi'@;
put 'cmVzLmluIiwiZ292LmluIiwibWlsLmluIiwiaW5mbyIsImludCIsImV1LmludCIsImlvIiwiY29tLmlvIiwiaXEiLCJnb3YuaXEiLCJlZHUuaXEiLCJtaWwuaXEiLCJjb20uaXEiLCJvcmcuaXEiLCJuZXQuaXEiLCJpciIsImFjLmlyIiwiY28uaXIiLCJnb3YuaXIiLCJpZC5pciIsIm5ldC5p'@;
put 'ciIsIm9yZy5pciIsInNjaC5pciIsIlx1MDYyN1x1MDZjY1x1MDYzMVx1MDYyN1x1MDY0Ni5pciIsIlx1MDYyN1x1MDY0YVx1MDYzMVx1MDYyN1x1MDY0Ni5pciIsImlzIiwibmV0LmlzIiwiY29tLmlzIiwiZWR1LmlzIiwiZ292LmlzIiwib3JnLmlzIiwiaW50LmlzIiwiaXQiLCJnb3YuaXQi'@;
put 'LCJlZHUuaXQiLCJhYnIuaXQiLCJhYnJ1enpvLml0IiwiYW9zdGEtdmFsbGV5Lml0IiwiYW9zdGF2YWxsZXkuaXQiLCJiYXMuaXQiLCJiYXNpbGljYXRhLml0IiwiY2FsLml0IiwiY2FsYWJyaWEuaXQiLCJjYW0uaXQiLCJjYW1wYW5pYS5pdCIsImVtaWxpYS1yb21hZ25hLml0IiwiZW1pbGlh'@;
put 'cm9tYWduYS5pdCIsImVtci5pdCIsImZyaXVsaS12LWdpdWxpYS5pdCIsImZyaXVsaS12ZS1naXVsaWEuaXQiLCJmcml1bGktdmVnaXVsaWEuaXQiLCJmcml1bGktdmVuZXppYS1naXVsaWEuaXQiLCJmcml1bGktdmVuZXppYWdpdWxpYS5pdCIsImZyaXVsaS12Z2l1bGlhLml0IiwiZnJpdWxp'@;
put 'di1naXVsaWEuaXQiLCJmcml1bGl2ZS1naXVsaWEuaXQiLCJmcml1bGl2ZWdpdWxpYS5pdCIsImZyaXVsaXZlbmV6aWEtZ2l1bGlhLml0IiwiZnJpdWxpdmVuZXppYWdpdWxpYS5pdCIsImZyaXVsaXZnaXVsaWEuaXQiLCJmdmcuaXQiLCJsYXouaXQiLCJsYXppby5pdCIsImxpZy5pdCIsImxp'@;
put 'Z3VyaWEuaXQiLCJsb20uaXQiLCJsb21iYXJkaWEuaXQiLCJsb21iYXJkeS5pdCIsImx1Y2FuaWEuaXQiLCJtYXIuaXQiLCJtYXJjaGUuaXQiLCJtb2wuaXQiLCJtb2xpc2UuaXQiLCJwaWVkbW9udC5pdCIsInBpZW1vbnRlLml0IiwicG1uLml0IiwicHVnLml0IiwicHVnbGlhLml0Iiwic2Fy'@;
put 'Lml0Iiwic2FyZGVnbmEuaXQiLCJzYXJkaW5pYS5pdCIsInNpYy5pdCIsInNpY2lsaWEuaXQiLCJzaWNpbHkuaXQiLCJ0YWEuaXQiLCJ0b3MuaXQiLCJ0b3NjYW5hLml0IiwidHJlbnRpbi1zdWQtdGlyb2wuaXQiLCJ0cmVudGluLXNceGZjZC10aXJvbC5pdCIsInRyZW50aW4tc3VkdGlyb2wu'@;
put 'aXQiLCJ0cmVudGluLXNceGZjZHRpcm9sLml0IiwidHJlbnRpbi1zdWVkLXRpcm9sLml0IiwidHJlbnRpbi1zdWVkdGlyb2wuaXQiLCJ0cmVudGluby1hLWFkaWdlLml0IiwidHJlbnRpbm8tYWFkaWdlLml0IiwidHJlbnRpbm8tYWx0by1hZGlnZS5pdCIsInRyZW50aW5vLWFsdG9hZGlnZS5p'@;
put 'dCIsInRyZW50aW5vLXMtdGlyb2wuaXQiLCJ0cmVudGluby1zdGlyb2wuaXQiLCJ0cmVudGluby1zdWQtdGlyb2wuaXQiLCJ0cmVudGluby1zXHhmY2QtdGlyb2wuaXQiLCJ0cmVudGluby1zdWR0aXJvbC5pdCIsInRyZW50aW5vLXNceGZjZHRpcm9sLml0IiwidHJlbnRpbm8tc3VlZC10aXJv'@;
put 'bC5pdCIsInRyZW50aW5vLXN1ZWR0aXJvbC5pdCIsInRyZW50aW5vLml0IiwidHJlbnRpbm9hLWFkaWdlLml0IiwidHJlbnRpbm9hYWRpZ2UuaXQiLCJ0cmVudGlub2FsdG8tYWRpZ2UuaXQiLCJ0cmVudGlub2FsdG9hZGlnZS5pdCIsInRyZW50aW5vcy10aXJvbC5pdCIsInRyZW50aW5vc3Rp'@;
put 'cm9sLml0IiwidHJlbnRpbm9zdWQtdGlyb2wuaXQiLCJ0cmVudGlub3NceGZjZC10aXJvbC5pdCIsInRyZW50aW5vc3VkdGlyb2wuaXQiLCJ0cmVudGlub3NceGZjZHRpcm9sLml0IiwidHJlbnRpbm9zdWVkLXRpcm9sLml0IiwidHJlbnRpbm9zdWVkdGlyb2wuaXQiLCJ0cmVudGluc3VkLXRp'@;
put 'cm9sLml0IiwidHJlbnRpbnNceGZjZC10aXJvbC5pdCIsInRyZW50aW5zdWR0aXJvbC5pdCIsInRyZW50aW5zXHhmY2R0aXJvbC5pdCIsInRyZW50aW5zdWVkLXRpcm9sLml0IiwidHJlbnRpbnN1ZWR0aXJvbC5pdCIsInR1c2NhbnkuaXQiLCJ1bWIuaXQiLCJ1bWJyaWEuaXQiLCJ2YWwtZC1h'@;
put 'b3N0YS5pdCIsInZhbC1kYW9zdGEuaXQiLCJ2YWxkLWFvc3RhLml0IiwidmFsZGFvc3RhLml0IiwidmFsbGUtYW9zdGEuaXQiLCJ2YWxsZS1kLWFvc3RhLml0IiwidmFsbGUtZGFvc3RhLml0IiwidmFsbGVhb3N0YS5pdCIsInZhbGxlZC1hb3N0YS5pdCIsInZhbGxlZGFvc3RhLml0IiwidmFs'@;
put 'bGVlLWFvc3RlLml0IiwidmFsbFx4ZTllLWFvc3RlLml0IiwidmFsbGVlLWQtYW9zdGUuaXQiLCJ2YWxsXHhlOWUtZC1hb3N0ZS5pdCIsInZhbGxlZWFvc3RlLml0IiwidmFsbFx4ZTllYW9zdGUuaXQiLCJ2YWxsZWVkYW9zdGUuaXQiLCJ2YWxsXHhlOWVkYW9zdGUuaXQiLCJ2YW8uaXQiLCJ2'@;
put 'ZGEuaXQiLCJ2ZW4uaXQiLCJ2ZW5ldG8uaXQiLCJhZy5pdCIsImFncmlnZW50by5pdCIsImFsLml0IiwiYWxlc3NhbmRyaWEuaXQiLCJhbHRvLWFkaWdlLml0IiwiYWx0b2FkaWdlLml0IiwiYW4uaXQiLCJhbmNvbmEuaXQiLCJhbmRyaWEtYmFybGV0dGEtdHJhbmkuaXQiLCJhbmRyaWEtdHJh'@;
put 'bmktYmFybGV0dGEuaXQiLCJhbmRyaWFiYXJsZXR0YXRyYW5pLml0IiwiYW5kcmlhdHJhbmliYXJsZXR0YS5pdCIsImFvLml0IiwiYW9zdGEuaXQiLCJhb3N0ZS5pdCIsImFwLml0IiwiYXEuaXQiLCJhcXVpbGEuaXQiLCJhci5pdCIsImFyZXp6by5pdCIsImFzY29saS1waWNlbm8uaXQiLCJh'@;
put 'c2NvbGlwaWNlbm8uaXQiLCJhc3RpLml0IiwiYXQuaXQiLCJhdi5pdCIsImF2ZWxsaW5vLml0IiwiYmEuaXQiLCJiYWxzYW4tc3VkdGlyb2wuaXQiLCJiYWxzYW4tc1x4ZmNkdGlyb2wuaXQiLCJiYWxzYW4tc3VlZHRpcm9sLml0IiwiYmFsc2FuLml0IiwiYmFyaS5pdCIsImJhcmxldHRhLXRy'@;
put 'YW5pLWFuZHJpYS5pdCIsImJhcmxldHRhdHJhbmlhbmRyaWEuaXQiLCJiZWxsdW5vLml0IiwiYmVuZXZlbnRvLml0IiwiYmVyZ2Ftby5pdCIsImJnLml0IiwiYmkuaXQiLCJiaWVsbGEuaXQiLCJibC5pdCIsImJuLml0IiwiYm8uaXQiLCJib2xvZ25hLml0IiwiYm9semFuby1hbHRvYWRpZ2Uu'@;
put 'aXQiLCJib2x6YW5vLml0IiwiYm96ZW4tc3VkdGlyb2wuaXQiLCJib3plbi1zXHhmY2R0aXJvbC5pdCIsImJvemVuLXN1ZWR0aXJvbC5pdCIsImJvemVuLml0IiwiYnIuaXQiLCJicmVzY2lhLml0IiwiYnJpbmRpc2kuaXQiLCJicy5pdCIsImJ0Lml0IiwiYnVsc2FuLXN1ZHRpcm9sLml0Iiwi'@;
put 'YnVsc2FuLXNceGZjZHRpcm9sLml0IiwiYnVsc2FuLXN1ZWR0aXJvbC5pdCIsImJ1bHNhbi5pdCIsImJ6Lml0IiwiY2EuaXQiLCJjYWdsaWFyaS5pdCIsImNhbHRhbmlzc2V0dGEuaXQiLCJjYW1waWRhbm8tbWVkaW8uaXQiLCJjYW1waWRhbm9tZWRpby5pdCIsImNhbXBvYmFzc28uaXQiLCJj'@;
put 'YXJib25pYS1pZ2xlc2lhcy5pdCIsImNhcmJvbmlhaWdsZXNpYXMuaXQiLCJjYXJyYXJhLW1hc3NhLml0IiwiY2FycmFyYW1hc3NhLml0IiwiY2FzZXJ0YS5pdCIsImNhdGFuaWEuaXQiLCJjYXRhbnphcm8uaXQiLCJjYi5pdCIsImNlLml0IiwiY2VzZW5hLWZvcmxpLml0IiwiY2VzZW5hLWZv'@;
put 'cmxceGVjLml0IiwiY2VzZW5hZm9ybGkuaXQiLCJjZXNlbmFmb3JsXHhlYy5pdCIsImNoLml0IiwiY2hpZXRpLml0IiwiY2kuaXQiLCJjbC5pdCIsImNuLml0IiwiY28uaXQiLCJjb21vLml0IiwiY29zZW56YS5pdCIsImNyLml0IiwiY3JlbW9uYS5pdCIsImNyb3RvbmUuaXQiLCJjcy5pdCIs'@;
put 'ImN0Lml0IiwiY3VuZW8uaXQiLCJjei5pdCIsImRlbGwtb2dsaWFzdHJhLml0IiwiZGVsbG9nbGlhc3RyYS5pdCIsImVuLml0IiwiZW5uYS5pdCIsImZjLml0IiwiZmUuaXQiLCJmZXJtby5pdCIsImZlcnJhcmEuaXQiLCJmZy5pdCIsImZpLml0IiwiZmlyZW56ZS5pdCIsImZsb3JlbmNlLml0'@;
put 'IiwiZm0uaXQiLCJmb2dnaWEuaXQiLCJmb3JsaS1jZXNlbmEuaXQiLCJmb3JsXHhlYy1jZXNlbmEuaXQiLCJmb3JsaWNlc2VuYS5pdCIsImZvcmxceGVjY2VzZW5hLml0IiwiZnIuaXQiLCJmcm9zaW5vbmUuaXQiLCJnZS5pdCIsImdlbm9hLml0IiwiZ2Vub3ZhLml0IiwiZ28uaXQiLCJnb3Jp'@;
put 'emlhLml0IiwiZ3IuaXQiLCJncm9zc2V0by5pdCIsImlnbGVzaWFzLWNhcmJvbmlhLml0IiwiaWdsZXNpYXNjYXJib25pYS5pdCIsImltLml0IiwiaW1wZXJpYS5pdCIsImlzLml0IiwiaXNlcm5pYS5pdCIsImtyLml0IiwibGEtc3BlemlhLml0IiwibGFxdWlsYS5pdCIsImxhc3BlemlhLml0'@;
put 'IiwibGF0aW5hLml0IiwibGMuaXQiLCJsZS5pdCIsImxlY2NlLml0IiwibGVjY28uaXQiLCJsaS5pdCIsImxpdm9ybm8uaXQiLCJsby5pdCIsImxvZGkuaXQiLCJsdC5pdCIsImx1Lml0IiwibHVjY2EuaXQiLCJtYWNlcmF0YS5pdCIsIm1hbnRvdmEuaXQiLCJtYXNzYS1jYXJyYXJhLml0Iiwi'@;
put 'bWFzc2FjYXJyYXJhLml0IiwibWF0ZXJhLml0IiwibWIuaXQiLCJtYy5pdCIsIm1lLml0IiwibWVkaW8tY2FtcGlkYW5vLml0IiwibWVkaW9jYW1waWRhbm8uaXQiLCJtZXNzaW5hLml0IiwibWkuaXQiLCJtaWxhbi5pdCIsIm1pbGFuby5pdCIsIm1uLml0IiwibW8uaXQiLCJtb2RlbmEuaXQi'@;
put 'LCJtb256YS1icmlhbnphLml0IiwibW9uemEtZS1kZWxsYS1icmlhbnphLml0IiwibW9uemEuaXQiLCJtb256YWJyaWFuemEuaXQiLCJtb256YWVicmlhbnphLml0IiwibW9uemFlZGVsbGFicmlhbnphLml0IiwibXMuaXQiLCJtdC5pdCIsIm5hLml0IiwibmFwbGVzLml0IiwibmFwb2xpLml0'@;
put 'Iiwibm8uaXQiLCJub3ZhcmEuaXQiLCJudS5pdCIsIm51b3JvLml0Iiwib2cuaXQiLCJvZ2xpYXN0cmEuaXQiLCJvbGJpYS10ZW1waW8uaXQiLCJvbGJpYXRlbXBpby5pdCIsIm9yLml0Iiwib3Jpc3Rhbm8uaXQiLCJvdC5pdCIsInBhLml0IiwicGFkb3ZhLml0IiwicGFkdWEuaXQiLCJwYWxl'@;
put 'cm1vLml0IiwicGFybWEuaXQiLCJwYXZpYS5pdCIsInBjLml0IiwicGQuaXQiLCJwZS5pdCIsInBlcnVnaWEuaXQiLCJwZXNhcm8tdXJiaW5vLml0IiwicGVzYXJvdXJiaW5vLml0IiwicGVzY2FyYS5pdCIsInBnLml0IiwicGkuaXQiLCJwaWFjZW56YS5pdCIsInBpc2EuaXQiLCJwaXN0b2lh'@;
put 'Lml0IiwicG4uaXQiLCJwby5pdCIsInBvcmRlbm9uZS5pdCIsInBvdGVuemEuaXQiLCJwci5pdCIsInByYXRvLml0IiwicHQuaXQiLCJwdS5pdCIsInB2Lml0IiwicHouaXQiLCJyYS5pdCIsInJhZ3VzYS5pdCIsInJhdmVubmEuaXQiLCJyYy5pdCIsInJlLml0IiwicmVnZ2lvLWNhbGFicmlh'@;
put 'Lml0IiwicmVnZ2lvLWVtaWxpYS5pdCIsInJlZ2dpb2NhbGFicmlhLml0IiwicmVnZ2lvZW1pbGlhLml0IiwicmcuaXQiLCJyaS5pdCIsInJpZXRpLml0IiwicmltaW5pLml0Iiwicm0uaXQiLCJybi5pdCIsInJvLml0Iiwicm9tYS5pdCIsInJvbWUuaXQiLCJyb3ZpZ28uaXQiLCJzYS5pdCIs'@;
put 'InNhbGVybm8uaXQiLCJzYXNzYXJpLml0Iiwic2F2b25hLml0Iiwic2kuaXQiLCJzaWVuYS5pdCIsInNpcmFjdXNhLml0Iiwic28uaXQiLCJzb25kcmlvLml0Iiwic3AuaXQiLCJzci5pdCIsInNzLml0Iiwic3VlZHRpcm9sLml0Iiwic1x4ZmNkdGlyb2wuaXQiLCJzdi5pdCIsInRhLml0Iiwi'@;
put 'dGFyYW50by5pdCIsInRlLml0IiwidGVtcGlvLW9sYmlhLml0IiwidGVtcGlvb2xiaWEuaXQiLCJ0ZXJhbW8uaXQiLCJ0ZXJuaS5pdCIsInRuLml0IiwidG8uaXQiLCJ0b3Jpbm8uaXQiLCJ0cC5pdCIsInRyLml0IiwidHJhbmktYW5kcmlhLWJhcmxldHRhLml0IiwidHJhbmktYmFybGV0dGEt'@;
put 'YW5kcmlhLml0IiwidHJhbmlhbmRyaWFiYXJsZXR0YS5pdCIsInRyYW5pYmFybGV0dGFhbmRyaWEuaXQiLCJ0cmFwYW5pLml0IiwidHJlbnRvLml0IiwidHJldmlzby5pdCIsInRyaWVzdGUuaXQiLCJ0cy5pdCIsInR1cmluLml0IiwidHYuaXQiLCJ1ZC5pdCIsInVkaW5lLml0IiwidXJiaW5v'@;
put 'LXBlc2Fyby5pdCIsInVyYmlub3Blc2Fyby5pdCIsInZhLml0IiwidmFyZXNlLml0IiwidmIuaXQiLCJ2Yy5pdCIsInZlLml0IiwidmVuZXppYS5pdCIsInZlbmljZS5pdCIsInZlcmJhbmlhLml0IiwidmVyY2VsbGkuaXQiLCJ2ZXJvbmEuaXQiLCJ2aS5pdCIsInZpYm8tdmFsZW50aWEuaXQi'@;
put 'LCJ2aWJvdmFsZW50aWEuaXQiLCJ2aWNlbnphLml0Iiwidml0ZXJiby5pdCIsInZyLml0IiwidnMuaXQiLCJ2dC5pdCIsInZ2Lml0IiwiamUiLCJjby5qZSIsIm5ldC5qZSIsIm9yZy5qZSIsIiouam0iLCJqbyIsImNvbS5qbyIsIm9yZy5qbyIsIm5ldC5qbyIsImVkdS5qbyIsInNjaC5qbyIs'@;
put 'Imdvdi5qbyIsIm1pbC5qbyIsIm5hbWUuam8iLCJqb2JzIiwianAiLCJhYy5qcCIsImFkLmpwIiwiY28uanAiLCJlZC5qcCIsImdvLmpwIiwiZ3IuanAiLCJsZy5qcCIsIm5lLmpwIiwib3IuanAiLCJhaWNoaS5qcCIsImFraXRhLmpwIiwiYW9tb3JpLmpwIiwiY2hpYmEuanAiLCJlaGltZS5q'@;
put 'cCIsImZ1a3VpLmpwIiwiZnVrdW9rYS5qcCIsImZ1a3VzaGltYS5qcCIsImdpZnUuanAiLCJndW5tYS5qcCIsImhpcm9zaGltYS5qcCIsImhva2thaWRvLmpwIiwiaHlvZ28uanAiLCJpYmFyYWtpLmpwIiwiaXNoaWthd2EuanAiLCJpd2F0ZS5qcCIsImthZ2F3YS5qcCIsImthZ29zaGltYS5q'@;
put 'cCIsImthbmFnYXdhLmpwIiwia29jaGkuanAiLCJrdW1hbW90by5qcCIsImt5b3RvLmpwIiwibWllLmpwIiwibWl5YWdpLmpwIiwibWl5YXpha2kuanAiLCJuYWdhbm8uanAiLCJuYWdhc2FraS5qcCIsIm5hcmEuanAiLCJuaWlnYXRhLmpwIiwib2l0YS5qcCIsIm9rYXlhbWEuanAiLCJva2lu'@;
put 'YXdhLmpwIiwib3Nha2EuanAiLCJzYWdhLmpwIiwic2FpdGFtYS5qcCIsInNoaWdhLmpwIiwic2hpbWFuZS5qcCIsInNoaXp1b2thLmpwIiwidG9jaGlnaS5qcCIsInRva3VzaGltYS5qcCIsInRva3lvLmpwIiwidG90dG9yaS5qcCIsInRveWFtYS5qcCIsIndha2F5YW1hLmpwIiwieWFtYWdh'@;
put 'dGEuanAiLCJ5YW1hZ3VjaGkuanAiLCJ5YW1hbmFzaGkuanAiLCJcdTY4MDNcdTY3MjguanAiLCJcdTYxMWJcdTc3ZTUuanAiLCJcdTYxMWJcdTVhOWIuanAiLCJcdTUxNzVcdTVlYWIuanAiLCJcdTcxOGFcdTY3MmMuanAiLCJcdTgzMjhcdTU3Y2UuanAiLCJcdTUzMTdcdTZkNzdcdTkwNTMu'@;
put 'anAiLCJcdTUzNDNcdTg0NDkuanAiLCJcdTU0OGNcdTZiNGNcdTVjNzEuanAiLCJcdTk1NzdcdTVkMGUuanAiLCJcdTk1NzdcdTkxY2UuanAiLCJcdTY1YjBcdTZmNWYuanAiLCJcdTk3NTJcdTY4ZWUuanAiLCJcdTk3NTlcdTVjYTEuanAiLCJcdTY3NzFcdTRlYWMuanAiLCJcdTc3ZjNcdTVk'@;
put 'ZGQuanAiLCJcdTU3ZmNcdTczODkuanAiLCJcdTRlMDlcdTkxY2QuanAiLCJcdTRlYWNcdTkwZmQuanAiLCJcdTRmNTBcdThjYzAuanAiLCJcdTU5MjdcdTUyMDYuanAiLCJcdTU5MjdcdTk2MmEuanAiLCJcdTU5NDhcdTgyNmYuanAiLCJcdTViYWVcdTU3Y2UuanAiLCJcdTViYWVcdTVkMGUu'@;
put 'anAiLCJcdTViY2NcdTVjNzEuanAiLCJcdTVjNzFcdTUzZTMuanAiLCJcdTVjNzFcdTVmNjIuanAiLCJcdTVjNzFcdTY4YTguanAiLCJcdTVjYTlcdTYyNGIuanAiLCJcdTVjOTBcdTk2MWMuanAiLCJcdTVjYTFcdTVjNzEuanAiLCJcdTVjZjZcdTY4MzkuanAiLCJcdTVlODNcdTVjZjYuanAi'@;
put 'LCJcdTVmYjNcdTVjZjYuanAiLCJcdTZjOTZcdTdlMDQuanAiLCJcdTZlY2JcdThjYzAuanAiLCJcdTc5NWVcdTU5NDhcdTVkZGQuanAiLCJcdTc5OGZcdTRlOTUuanAiLCJcdTc5OGZcdTVjYTEuanAiLCJcdTc5OGZcdTVjZjYuanAiLCJcdTc5Y2JcdTc1MzAuanAiLCJcdTdmYTRcdTk5YWMu'@;
put 'anAiLCJcdTk5OTlcdTVkZGQuanAiLCJcdTlhZDhcdTc3ZTUuanAiLCJcdTljZTVcdTUzZDYuanAiLCJcdTllN2ZcdTUxNTBcdTVjZjYuanAiLCIqLmthd2FzYWtpLmpwIiwiKi5raXRha3l1c2h1LmpwIiwiKi5rb2JlLmpwIiwiKi5uYWdveWEuanAiLCIqLnNhcHBvcm8uanAiLCIqLnNlbmRh'@;
put 'aS5qcCIsIioueW9rb2hhbWEuanAiLCIhY2l0eS5rYXdhc2FraS5qcCIsIiFjaXR5LmtpdGFreXVzaHUuanAiLCIhY2l0eS5rb2JlLmpwIiwiIWNpdHkubmFnb3lhLmpwIiwiIWNpdHkuc2FwcG9yby5qcCIsIiFjaXR5LnNlbmRhaS5qcCIsIiFjaXR5Lnlva29oYW1hLmpwIiwiYWlzYWkuYWlj'@;
put 'aGkuanAiLCJhbWEuYWljaGkuanAiLCJhbmpvLmFpY2hpLmpwIiwiYXN1a2UuYWljaGkuanAiLCJjaGlyeXUuYWljaGkuanAiLCJjaGl0YS5haWNoaS5qcCIsImZ1c28uYWljaGkuanAiLCJnYW1hZ29yaS5haWNoaS5qcCIsImhhbmRhLmFpY2hpLmpwIiwiaGF6dS5haWNoaS5qcCIsImhla2lu'@;
put 'YW4uYWljaGkuanAiLCJoaWdhc2hpdXJhLmFpY2hpLmpwIiwiaWNoaW5vbWl5YS5haWNoaS5qcCIsImluYXphd2EuYWljaGkuanAiLCJpbnV5YW1hLmFpY2hpLmpwIiwiaXNzaGlraS5haWNoaS5qcCIsIml3YWt1cmEuYWljaGkuanAiLCJrYW5pZS5haWNoaS5qcCIsImthcml5YS5haWNoaS5q'@;
put 'cCIsImthc3VnYWkuYWljaGkuanAiLCJraXJhLmFpY2hpLmpwIiwia2l5b3N1LmFpY2hpLmpwIiwia29tYWtpLmFpY2hpLmpwIiwia29uYW4uYWljaGkuanAiLCJrb3RhLmFpY2hpLmpwIiwibWloYW1hLmFpY2hpLmpwIiwibWl5b3NoaS5haWNoaS5qcCIsIm5pc2hpby5haWNoaS5qcCIsIm5p'@;
put 'c3NoaW4uYWljaGkuanAiLCJvYnUuYWljaGkuanAiLCJvZ3VjaGkuYWljaGkuanAiLCJvaGFydS5haWNoaS5qcCIsIm9rYXpha2kuYWljaGkuanAiLCJvd2FyaWFzYWhpLmFpY2hpLmpwIiwic2V0by5haWNoaS5qcCIsInNoaWthdHN1LmFpY2hpLmpwIiwic2hpbnNoaXJvLmFpY2hpLmpwIiwi'@;
put 'c2hpdGFyYS5haWNoaS5qcCIsInRhaGFyYS5haWNoaS5qcCIsInRha2FoYW1hLmFpY2hpLmpwIiwidG9iaXNoaW1hLmFpY2hpLmpwIiwidG9laS5haWNoaS5qcCIsInRvZ28uYWljaGkuanAiLCJ0b2thaS5haWNoaS5qcCIsInRva29uYW1lLmFpY2hpLmpwIiwidG95b2FrZS5haWNoaS5qcCIs'@;
put 'InRveW9oYXNoaS5haWNoaS5qcCIsInRveW9rYXdhLmFpY2hpLmpwIiwidG95b25lLmFpY2hpLmpwIiwidG95b3RhLmFpY2hpLmpwIiwidHN1c2hpbWEuYWljaGkuanAiLCJ5YXRvbWkuYWljaGkuanAiLCJha2l0YS5ha2l0YS5qcCIsImRhaXNlbi5ha2l0YS5qcCIsImZ1amlzYXRvLmFraXRh'@;
put 'LmpwIiwiZ29qb21lLmFraXRhLmpwIiwiaGFjaGlyb2dhdGEuYWtpdGEuanAiLCJoYXBwb3UuYWtpdGEuanAiLCJoaWdhc2hpbmFydXNlLmFraXRhLmpwIiwiaG9uam8uYWtpdGEuanAiLCJob25qeW8uYWtpdGEuanAiLCJpa2F3YS5ha2l0YS5qcCIsImthbWlrb2FuaS5ha2l0YS5qcCIsImth'@;
put 'bWlva2EuYWtpdGEuanAiLCJrYXRhZ2FtaS5ha2l0YS5qcCIsImthenVuby5ha2l0YS5qcCIsImtpdGFha2l0YS5ha2l0YS5qcCIsImtvc2FrYS5ha2l0YS5qcCIsImt5b3dhLmFraXRhLmpwIiwibWlzYXRvLmFraXRhLmpwIiwibWl0YW5lLmFraXRhLmpwIiwibW9yaXlvc2hpLmFraXRhLmpw'@;
put 'IiwibmlrYWhvLmFraXRhLmpwIiwibm9zaGlyby5ha2l0YS5qcCIsIm9kYXRlLmFraXRhLmpwIiwib2dhLmFraXRhLmpwIiwib2dhdGEuYWtpdGEuanAiLCJzZW1ib2t1LmFraXRhLmpwIiwieW9rb3RlLmFraXRhLmpwIiwieXVyaWhvbmpvLmFraXRhLmpwIiwiYW9tb3JpLmFvbW9yaS5qcCIs'@;
put 'Imdvbm9oZS5hb21vcmkuanAiLCJoYWNoaW5vaGUuYW9tb3JpLmpwIiwiaGFzaGlrYW1pLmFvbW9yaS5qcCIsImhpcmFuYWkuYW9tb3JpLmpwIiwiaGlyb3Nha2kuYW9tb3JpLmpwIiwiaXRheWFuYWdpLmFvbW9yaS5qcCIsImt1cm9pc2hpLmFvbW9yaS5qcCIsIm1pc2F3YS5hb21vcmkuanAi'@;
put 'LCJtdXRzdS5hb21vcmkuanAiLCJuYWthZG9tYXJpLmFvbW9yaS5qcCIsIm5vaGVqaS5hb21vcmkuanAiLCJvaXJhc2UuYW9tb3JpLmpwIiwib3dhbmkuYW9tb3JpLmpwIiwicm9rdW5vaGUuYW9tb3JpLmpwIiwic2Fubm9oZS5hb21vcmkuanAiLCJzaGljaGlub2hlLmFvbW9yaS5qcCIsInNo'@;
put 'aW5nby5hb21vcmkuanAiLCJ0YWtrby5hb21vcmkuanAiLCJ0b3dhZGEuYW9tb3JpLmpwIiwidHN1Z2FydS5hb21vcmkuanAiLCJ0c3VydXRhLmFvbW9yaS5qcCIsImFiaWtvLmNoaWJhLmpwIiwiYXNhaGkuY2hpYmEuanAiLCJjaG9uYW4uY2hpYmEuanAiLCJjaG9zZWkuY2hpYmEuanAiLCJj'@;
put 'aG9zaGkuY2hpYmEuanAiLCJjaHVvLmNoaWJhLmpwIiwiZnVuYWJhc2hpLmNoaWJhLmpwIiwiZnV0dHN1LmNoaWJhLmpwIiwiaGFuYW1pZ2F3YS5jaGliYS5qcCIsImljaGloYXJhLmNoaWJhLmpwIiwiaWNoaWthd2EuY2hpYmEuanAiLCJpY2hpbm9taXlhLmNoaWJhLmpwIiwiaW56YWkuY2hp'@;
put 'YmEuanAiLCJpc3VtaS5jaGliYS5qcCIsImthbWFnYXlhLmNoaWJhLmpwIiwia2Ftb2dhd2EuY2hpYmEuanAiLCJrYXNoaXdhLmNoaWJhLmpwIiwia2F0b3JpLmNoaWJhLmpwIiwia2F0c3V1cmEuY2hpYmEuanAiLCJraW1pdHN1LmNoaWJhLmpwIiwia2lzYXJhenUuY2hpYmEuanAiLCJrb3ph'@;
put 'a2kuY2hpYmEuanAiLCJrdWp1a3VyaS5jaGliYS5qcCIsImt5b25hbi5jaGliYS5qcCIsIm1hdHN1ZG8uY2hpYmEuanAiLCJtaWRvcmkuY2hpYmEuanAiLCJtaWhhbWEuY2hpYmEuanAiLCJtaW5hbWlib3NvLmNoaWJhLmpwIiwibW9iYXJhLmNoaWJhLmpwIiwibXV0c3V6YXdhLmNoaWJhLmpw'@;
put 'IiwibmFnYXJhLmNoaWJhLmpwIiwibmFnYXJleWFtYS5jaGliYS5qcCIsIm5hcmFzaGluby5jaGliYS5qcCIsIm5hcml0YS5jaGliYS5qcCIsIm5vZGEuY2hpYmEuanAiLCJvYW1pc2hpcmFzYXRvLmNoaWJhLmpwIiwib21pZ2F3YS5jaGliYS5qcCIsIm9uanVrdS5jaGliYS5qcCIsIm90YWtp'@;
put 'LmNoaWJhLmpwIiwic2FrYWUuY2hpYmEuanAiLCJzYWt1cmEuY2hpYmEuanAiLCJzaGltb2Z1c2EuY2hpYmEuanAiLCJzaGlyYWtvLmNoaWJhLmpwIiwic2hpcm9pLmNoaWJhLmpwIiwic2hpc3VpLmNoaWJhLmpwIiwic29kZWdhdXJhLmNoaWJhLmpwIiwic29zYS5jaGliYS5qcCIsInRha28u'@;
put 'Y2hpYmEuanAiLCJ0YXRleWFtYS5jaGliYS5qcCIsInRvZ2FuZS5jaGliYS5qcCIsInRvaG5vc2hvLmNoaWJhLmpwIiwidG9taXNhdG8uY2hpYmEuanAiLCJ1cmF5YXN1LmNoaWJhLmpwIiwieWFjaGltYXRhLmNoaWJhLmpwIiwieWFjaGl5by5jaGliYS5qcCIsInlva2FpY2hpYmEuY2hpYmEu'@;
put 'anAiLCJ5b2tvc2hpYmFoaWthcmkuY2hpYmEuanAiLCJ5b3RzdWthaWRvLmNoaWJhLmpwIiwiYWluYW4uZWhpbWUuanAiLCJob25haS5laGltZS5qcCIsImlrYXRhLmVoaW1lLmpwIiwiaW1hYmFyaS5laGltZS5qcCIsIml5by5laGltZS5qcCIsImthbWlqaW1hLmVoaW1lLmpwIiwia2lob2t1'@;
put 'LmVoaW1lLmpwIiwia3VtYWtvZ2VuLmVoaW1lLmpwIiwibWFzYWtpLmVoaW1lLmpwIiwibWF0c3Vuby5laGltZS5qcCIsIm1hdHN1eWFtYS5laGltZS5qcCIsIm5hbWlrYXRhLmVoaW1lLmpwIiwibmlpaGFtYS5laGltZS5qcCIsIm96dS5laGltZS5qcCIsInNhaWpvLmVoaW1lLmpwIiwic2Vp'@;
put 'eW8uZWhpbWUuanAiLCJzaGlrb2t1Y2h1by5laGltZS5qcCIsInRvYmUuZWhpbWUuanAiLCJ0b29uLmVoaW1lLmpwIiwidWNoaWtvLmVoaW1lLmpwIiwidXdhamltYS5laGltZS5qcCIsInlhd2F0YWhhbWEuZWhpbWUuanAiLCJlY2hpemVuLmZ1a3VpLmpwIiwiZWloZWlqaS5mdWt1aS5qcCIs'@;
put 'ImZ1a3VpLmZ1a3VpLmpwIiwiaWtlZGEuZnVrdWkuanAiLCJrYXRzdXlhbWEuZnVrdWkuanAiLCJtaWhhbWEuZnVrdWkuanAiLCJtaW5hbWllY2hpemVuLmZ1a3VpLmpwIiwib2JhbWEuZnVrdWkuanAiLCJvaGkuZnVrdWkuanAiLCJvbm8uZnVrdWkuanAiLCJzYWJhZS5mdWt1aS5qcCIsInNh'@;
put 'a2FpLmZ1a3VpLmpwIiwidGFrYWhhbWEuZnVrdWkuanAiLCJ0c3VydWdhLmZ1a3VpLmpwIiwid2FrYXNhLmZ1a3VpLmpwIiwiYXNoaXlhLmZ1a3Vva2EuanAiLCJidXplbi5mdWt1b2thLmpwIiwiY2hpa3Vnby5mdWt1b2thLmpwIiwiY2hpa3Voby5mdWt1b2thLmpwIiwiY2hpa3Vqby5mdWt1'@;
put 'b2thLmpwIiwiY2hpa3VzaGluby5mdWt1b2thLmpwIiwiY2hpa3V6ZW4uZnVrdW9rYS5qcCIsImNodW8uZnVrdW9rYS5qcCIsImRhemFpZnUuZnVrdW9rYS5qcCIsImZ1a3VjaGkuZnVrdW9rYS5qcCIsImhha2F0YS5mdWt1b2thLmpwIiwiaGlnYXNoaS5mdWt1b2thLmpwIiwiaGlyb2thd2Eu'@;
put 'ZnVrdW9rYS5qcCIsImhpc2F5YW1hLmZ1a3Vva2EuanAiLCJpaXp1a2EuZnVrdW9rYS5qcCIsImluYXRzdWtpLmZ1a3Vva2EuanAiLCJrYWhvLmZ1a3Vva2EuanAiLCJrYXN1Z2EuZnVrdW9rYS5qcCIsImthc3V5YS5mdWt1b2thLmpwIiwia2F3YXJhLmZ1a3Vva2EuanAiLCJrZWlzZW4uZnVr'@;
put 'dW9rYS5qcCIsImtvZ2EuZnVrdW9rYS5qcCIsImt1cmF0ZS5mdWt1b2thLmpwIiwia3Vyb2dpLmZ1a3Vva2EuanAiLCJrdXJ1bWUuZnVrdW9rYS5qcCIsIm1pbmFtaS5mdWt1b2thLmpwIiwibWl5YWtvLmZ1a3Vva2EuanAiLCJtaXlhbWEuZnVrdW9rYS5qcCIsIm1peWF3YWthLmZ1a3Vva2Eu'@;
put 'anAiLCJtaXp1bWFraS5mdWt1b2thLmpwIiwibXVuYWthdGEuZnVrdW9rYS5qcCIsIm5ha2FnYXdhLmZ1a3Vva2EuanAiLCJuYWthbWEuZnVrdW9rYS5qcCIsIm5pc2hpLmZ1a3Vva2EuanAiLCJub2dhdGEuZnVrdW9rYS5qcCIsIm9nb3JpLmZ1a3Vva2EuanAiLCJva2FnYWtpLmZ1a3Vva2Eu'@;
put 'anAiLCJva2F3YS5mdWt1b2thLmpwIiwib2tpLmZ1a3Vva2EuanAiLCJvbXV0YS5mdWt1b2thLmpwIiwib25nYS5mdWt1b2thLmpwIiwib25vam8uZnVrdW9rYS5qcCIsIm90by5mdWt1b2thLmpwIiwic2FpZ2F3YS5mdWt1b2thLmpwIiwic2FzYWd1cmkuZnVrdW9rYS5qcCIsInNoaW5ndS5m'@;
put 'dWt1b2thLmpwIiwic2hpbnlvc2hpdG9taS5mdWt1b2thLmpwIiwic2hvbmFpLmZ1a3Vva2EuanAiLCJzb2VkYS5mdWt1b2thLmpwIiwic3VlLmZ1a3Vva2EuanAiLCJ0YWNoaWFyYWkuZnVrdW9rYS5qcCIsInRhZ2F3YS5mdWt1b2thLmpwIiwidGFrYXRhLmZ1a3Vva2EuanAiLCJ0b2hvLmZ1'@;
put 'a3Vva2EuanAiLCJ0b3lvdHN1LmZ1a3Vva2EuanAiLCJ0c3Vpa2kuZnVrdW9rYS5qcCIsInVraWhhLmZ1a3Vva2EuanAiLCJ1bWkuZnVrdW9rYS5qcCIsInVzdWkuZnVrdW9rYS5qcCIsInlhbWFkYS5mdWt1b2thLmpwIiwieWFtZS5mdWt1b2thLmpwIiwieWFuYWdhd2EuZnVrdW9rYS5qcCIs'@;
put 'Inl1a3VoYXNoaS5mdWt1b2thLmpwIiwiYWl6dWJhbmdlLmZ1a3VzaGltYS5qcCIsImFpenVtaXNhdG8uZnVrdXNoaW1hLmpwIiwiYWl6dXdha2FtYXRzdS5mdWt1c2hpbWEuanAiLCJhc2FrYXdhLmZ1a3VzaGltYS5qcCIsImJhbmRhaS5mdWt1c2hpbWEuanAiLCJkYXRlLmZ1a3VzaGltYS5q'@;
put 'cCIsImZ1a3VzaGltYS5mdWt1c2hpbWEuanAiLCJmdXJ1ZG9uby5mdWt1c2hpbWEuanAiLCJmdXRhYmEuZnVrdXNoaW1hLmpwIiwiaGFuYXdhLmZ1a3VzaGltYS5qcCIsImhpZ2FzaGkuZnVrdXNoaW1hLmpwIiwiaGlyYXRhLmZ1a3VzaGltYS5qcCIsImhpcm9uby5mdWt1c2hpbWEuanAiLCJp'@;
put 'aXRhdGUuZnVrdXNoaW1hLmpwIiwiaW5hd2FzaGlyby5mdWt1c2hpbWEuanAiLCJpc2hpa2F3YS5mdWt1c2hpbWEuanAiLCJpd2FraS5mdWt1c2hpbWEuanAiLCJpenVtaXpha2kuZnVrdXNoaW1hLmpwIiwia2FnYW1paXNoaS5mdWt1c2hpbWEuanAiLCJrYW5leWFtYS5mdWt1c2hpbWEuanAi'@;
put 'LCJrYXdhbWF0YS5mdWt1c2hpbWEuanAiLCJraXRha2F0YS5mdWt1c2hpbWEuanAiLCJraXRhc2hpb2JhcmEuZnVrdXNoaW1hLmpwIiwia29vcmkuZnVrdXNoaW1hLmpwIiwia29yaXlhbWEuZnVrdXNoaW1hLmpwIiwia3VuaW1pLmZ1a3VzaGltYS5qcCIsIm1paGFydS5mdWt1c2hpbWEuanAi'@;
put 'LCJtaXNoaW1hLmZ1a3VzaGltYS5qcCIsIm5hbWllLmZ1a3VzaGltYS5qcCIsIm5hbmdvLmZ1a3VzaGltYS5qcCIsIm5pc2hpYWl6dS5mdWt1c2hpbWEuanAiLCJuaXNoaWdvLmZ1a3VzaGltYS5qcCIsIm9rdW1hLmZ1a3VzaGltYS5qcCIsIm9tb3RlZ28uZnVrdXNoaW1hLmpwIiwib25vLmZ1'@;
put 'a3VzaGltYS5qcCIsIm90YW1hLmZ1a3VzaGltYS5qcCIsInNhbWVnYXdhLmZ1a3VzaGltYS5qcCIsInNoaW1vZ28uZnVrdXNoaW1hLmpwIiwic2hpcmFrYXdhLmZ1a3VzaGltYS5qcCIsInNob3dhLmZ1a3VzaGltYS5qcCIsInNvbWEuZnVrdXNoaW1hLmpwIiwic3VrYWdhd2EuZnVrdXNoaW1h'@;
put 'LmpwIiwidGFpc2hpbi5mdWt1c2hpbWEuanAiLCJ0YW1ha2F3YS5mdWt1c2hpbWEuanAiLCJ0YW5hZ3VyYS5mdWt1c2hpbWEuanAiLCJ0ZW5laS5mdWt1c2hpbWEuanAiLCJ5YWJ1a2kuZnVrdXNoaW1hLmpwIiwieWFtYXRvLmZ1a3VzaGltYS5qcCIsInlhbWF0c3VyaS5mdWt1c2hpbWEuanAi'@;
put 'LCJ5YW5haXp1LmZ1a3VzaGltYS5qcCIsInl1Z2F3YS5mdWt1c2hpbWEuanAiLCJhbnBhY2hpLmdpZnUuanAiLCJlbmEuZ2lmdS5qcCIsImdpZnUuZ2lmdS5qcCIsImdpbmFuLmdpZnUuanAiLCJnb2RvLmdpZnUuanAiLCJndWpvLmdpZnUuanAiLCJoYXNoaW1hLmdpZnUuanAiLCJoaWNoaXNv'@;
put 'LmdpZnUuanAiLCJoaWRhLmdpZnUuanAiLCJoaWdhc2hpc2hpcmFrYXdhLmdpZnUuanAiLCJpYmlnYXdhLmdpZnUuanAiLCJpa2VkYS5naWZ1LmpwIiwia2FrYW1pZ2FoYXJhLmdpZnUuanAiLCJrYW5pLmdpZnUuanAiLCJrYXNhaGFyYS5naWZ1LmpwIiwia2FzYW1hdHN1LmdpZnUuanAiLCJr'@;
put 'YXdhdWUuZ2lmdS5qcCIsImtpdGFnYXRhLmdpZnUuanAiLCJtaW5vLmdpZnUuanAiLCJtaW5va2Ftby5naWZ1LmpwIiwibWl0YWtlLmdpZnUuanAiLCJtaXp1bmFtaS5naWZ1LmpwIiwibW90b3N1LmdpZnUuanAiLCJuYWthdHN1Z2F3YS5naWZ1LmpwIiwib2dha2kuZ2lmdS5qcCIsInNha2Fo'@;
put 'b2dpLmdpZnUuanAiLCJzZWtpLmdpZnUuanAiLCJzZWtpZ2FoYXJhLmdpZnUuanAiLCJzaGlyYWthd2EuZ2lmdS5qcCIsInRhamltaS5naWZ1LmpwIiwidGFrYXlhbWEuZ2lmdS5qcCIsInRhcnVpLmdpZnUuanAiLCJ0b2tpLmdpZnUuanAiLCJ0b21pa2EuZ2lmdS5qcCIsIndhbm91Y2hpLmdp'@;
put 'ZnUuanAiLCJ5YW1hZ2F0YS5naWZ1LmpwIiwieWFvdHN1LmdpZnUuanAiLCJ5b3JvLmdpZnUuanAiLCJhbm5ha2EuZ3VubWEuanAiLCJjaGl5b2RhLmd1bm1hLmpwIiwiZnVqaW9rYS5ndW5tYS5qcCIsImhpZ2FzaGlhZ2F0c3VtYS5ndW5tYS5qcCIsImlzZXNha2kuZ3VubWEuanAiLCJpdGFr'@;
put 'dXJhLmd1bm1hLmpwIiwia2FubmEuZ3VubWEuanAiLCJrYW5yYS5ndW5tYS5qcCIsImthdGFzaGluYS5ndW5tYS5qcCIsImthd2FiYS5ndW5tYS5qcCIsImtpcnl1Lmd1bm1hLmpwIiwia3VzYXRzdS5ndW5tYS5qcCIsIm1hZWJhc2hpLmd1bm1hLmpwIiwibWVpd2EuZ3VubWEuanAiLCJtaWRv'@;
put 'cmkuZ3VubWEuanAiLCJtaW5ha2FtaS5ndW5tYS5qcCIsIm5hZ2Fub2hhcmEuZ3VubWEuanAiLCJuYWthbm9qby5ndW5tYS5qcCIsIm5hbm1va3UuZ3VubWEuanAiLCJudW1hdGEuZ3VubWEuanAiLCJvaXp1bWkuZ3VubWEuanAiLCJvcmEuZ3VubWEuanAiLCJvdGEuZ3VubWEuanAiLCJzaGli'@;
put 'dWthd2EuZ3VubWEuanAiLCJzaGltb25pdGEuZ3VubWEuanAiLCJzaGludG8uZ3VubWEuanAiLCJzaG93YS5ndW5tYS5qcCIsInRha2FzYWtpLmd1bm1hLmpwIiwidGFrYXlhbWEuZ3VubWEuanAiLCJ0YW1hbXVyYS5ndW5tYS5qcCIsInRhdGViYXlhc2hpLmd1bm1hLmpwIiwidG9taW9rYS5n'@;
put 'dW5tYS5qcCIsInRzdWtpeW9uby5ndW5tYS5qcCIsInRzdW1hZ29pLmd1bm1hLmpwIiwidWVuby5ndW5tYS5qcCIsInlvc2hpb2thLmd1bm1hLmpwIiwiYXNhbWluYW1pLmhpcm9zaGltYS5qcCIsImRhaXdhLmhpcm9zaGltYS5qcCIsImV0YWppbWEuaGlyb3NoaW1hLmpwIiwiZnVjaHUuaGly'@;
put 'b3NoaW1hLmpwIiwiZnVrdXlhbWEuaGlyb3NoaW1hLmpwIiwiaGF0c3VrYWljaGkuaGlyb3NoaW1hLmpwIiwiaGlnYXNoaWhpcm9zaGltYS5oaXJvc2hpbWEuanAiLCJob25nby5oaXJvc2hpbWEuanAiLCJqaW5zZWtpa29nZW4uaGlyb3NoaW1hLmpwIiwia2FpdGEuaGlyb3NoaW1hLmpwIiwi'@;
put 'a3VpLmhpcm9zaGltYS5qcCIsImt1bWFuby5oaXJvc2hpbWEuanAiLCJrdXJlLmhpcm9zaGltYS5qcCIsIm1paGFyYS5oaXJvc2hpbWEuanAiLCJtaXlvc2hpLmhpcm9zaGltYS5qcCIsIm5ha2EuaGlyb3NoaW1hLmpwIiwib25vbWljaGkuaGlyb3NoaW1hLmpwIiwib3Nha2lrYW1pamltYS5o'@;
put 'aXJvc2hpbWEuanAiLCJvdGFrZS5oaXJvc2hpbWEuanAiLCJzYWthLmhpcm9zaGltYS5qcCIsInNlcmEuaGlyb3NoaW1hLmpwIiwic2VyYW5pc2hpLmhpcm9zaGltYS5qcCIsInNoaW5pY2hpLmhpcm9zaGltYS5qcCIsInNob2JhcmEuaGlyb3NoaW1hLmpwIiwidGFrZWhhcmEuaGlyb3NoaW1h'@;
put 'LmpwIiwiYWJhc2hpcmkuaG9ra2FpZG8uanAiLCJhYmlyYS5ob2trYWlkby5qcCIsImFpYmV0c3UuaG9ra2FpZG8uanAiLCJha2FiaXJhLmhva2thaWRvLmpwIiwiYWtrZXNoaS5ob2trYWlkby5qcCIsImFzYWhpa2F3YS5ob2trYWlkby5qcCIsImFzaGliZXRzdS5ob2trYWlkby5qcCIsImFz'@;
put 'aG9yby5ob2trYWlkby5qcCIsImFzc2FidS5ob2trYWlkby5qcCIsImF0c3VtYS5ob2trYWlkby5qcCIsImJpYmFpLmhva2thaWRvLmpwIiwiYmllaS5ob2trYWlkby5qcCIsImJpZnVrYS5ob2trYWlkby5qcCIsImJpaG9yby5ob2trYWlkby5qcCIsImJpcmF0b3JpLmhva2thaWRvLmpwIiwi'@;
put 'Y2hpcHB1YmV0c3UuaG9ra2FpZG8uanAiLCJjaGl0b3NlLmhva2thaWRvLmpwIiwiZGF0ZS5ob2trYWlkby5qcCIsImViZXRzdS5ob2trYWlkby5qcCIsImVtYmV0c3UuaG9ra2FpZG8uanAiLCJlbml3YS5ob2trYWlkby5qcCIsImVyaW1vLmhva2thaWRvLmpwIiwiZXNhbi5ob2trYWlkby5q'@;
put 'cCIsImVzYXNoaS5ob2trYWlkby5qcCIsImZ1a2FnYXdhLmhva2thaWRvLmpwIiwiZnVrdXNoaW1hLmhva2thaWRvLmpwIiwiZnVyYW5vLmhva2thaWRvLmpwIiwiZnVydWJpcmEuaG9ra2FpZG8uanAiLCJoYWJvcm8uaG9ra2FpZG8uanAiLCJoYWtvZGF0ZS5ob2trYWlkby5qcCIsImhhbWF0'@;
put 'b25iZXRzdS5ob2trYWlkby5qcCIsImhpZGFrYS5ob2trYWlkby5qcCIsImhpZ2FzaGlrYWd1cmEuaG9ra2FpZG8uanAiLCJoaWdhc2hpa2F3YS5ob2trYWlkby5qcCIsImhpcm9vLmhva2thaWRvLmpwIiwiaG9rdXJ5dS5ob2trYWlkby5qcCIsImhva3V0by5ob2trYWlkby5qcCIsImhvbmJl'@;
put 'dHN1Lmhva2thaWRvLmpwIiwiaG9yb2thbmFpLmhva2thaWRvLmpwIiwiaG9yb25vYmUuaG9ra2FpZG8uanAiLCJpa2VkYS5ob2trYWlkby5qcCIsImltYWthbmUuaG9ra2FpZG8uanAiLCJpc2hpa2FyaS5ob2trYWlkby5qcCIsIml3YW1pemF3YS5ob2trYWlkby5qcCIsIml3YW5haS5ob2tr'@;
put 'YWlkby5qcCIsImthbWlmdXJhbm8uaG9ra2FpZG8uanAiLCJrYW1pa2F3YS5ob2trYWlkby5qcCIsImthbWlzaGlob3JvLmhva2thaWRvLmpwIiwia2FtaXN1bmFnYXdhLmhva2thaWRvLmpwIiwia2Ftb2VuYWkuaG9ra2FpZG8uanAiLCJrYXlhYmUuaG9ra2FpZG8uanAiLCJrZW1idWNoaS5o'@;
put 'b2trYWlkby5qcCIsImtpa29uYWkuaG9ra2FpZG8uanAiLCJraW1vYmV0c3UuaG9ra2FpZG8uanAiLCJraXRhaGlyb3NoaW1hLmhva2thaWRvLmpwIiwia2l0YW1pLmhva2thaWRvLmpwIiwia2l5b3NhdG8uaG9ra2FpZG8uanAiLCJrb3NoaW1penUuaG9ra2FpZG8uanAiLCJrdW5uZXBwdS5o'@;
put 'b2trYWlkby5qcCIsImt1cml5YW1hLmhva2thaWRvLmpwIiwia3Vyb21hdHN1bmFpLmhva2thaWRvLmpwIiwia3VzaGlyby5ob2trYWlkby5qcCIsImt1dGNoYW4uaG9ra2FpZG8uanAiLCJreW93YS5ob2trYWlkby5qcCIsIm1hc2hpa2UuaG9ra2FpZG8uanAiLCJtYXRzdW1hZS5ob2trYWlk'@;
put 'by5qcCIsIm1pa2FzYS5ob2trYWlkby5qcCIsIm1pbmFtaWZ1cmFuby5ob2trYWlkby5qcCIsIm1vbWJldHN1Lmhva2thaWRvLmpwIiwibW9zZXVzaGkuaG9ra2FpZG8uanAiLCJtdWthd2EuaG9ra2FpZG8uanAiLCJtdXJvcmFuLmhva2thaWRvLmpwIiwibmFpZS5ob2trYWlkby5qcCIsIm5h'@;
put 'a2FnYXdhLmhva2thaWRvLmpwIiwibmFrYXNhdHN1bmFpLmhva2thaWRvLmpwIiwibmFrYXRvbWJldHN1Lmhva2thaWRvLmpwIiwibmFuYWUuaG9ra2FpZG8uanAiLCJuYW5wb3JvLmhva2thaWRvLmpwIiwibmF5b3JvLmhva2thaWRvLmpwIiwibmVtdXJvLmhva2thaWRvLmpwIiwibmlpa2Fw'@;
put 'cHUuaG9ra2FpZG8uanAiLCJuaWtpLmhva2thaWRvLmpwIiwibmlzaGlva29wcGUuaG9ra2FpZG8uanAiLCJub2JvcmliZXRzdS5ob2trYWlkby5qcCIsIm51bWF0YS5ob2trYWlkby5qcCIsIm9iaWhpcm8uaG9ra2FpZG8uanAiLCJvYmlyYS5ob2trYWlkby5qcCIsIm9rZXRvLmhva2thaWRv'@;
put 'LmpwIiwib2tvcHBlLmhva2thaWRvLmpwIiwib3RhcnUuaG9ra2FpZG8uanAiLCJvdG9iZS5ob2trYWlkby5qcCIsIm90b2Z1a2UuaG9ra2FpZG8uanAiLCJvdG9pbmVwcHUuaG9ra2FpZG8uanAiLCJvdW11Lmhva2thaWRvLmpwIiwib3pvcmEuaG9ra2FpZG8uanAiLCJwaXBwdS5ob2trYWlk'@;
put 'by5qcCIsInJhbmtvc2hpLmhva2thaWRvLmpwIiwicmVidW4uaG9ra2FpZG8uanAiLCJyaWt1YmV0c3UuaG9ra2FpZG8uanAiLCJyaXNoaXJpLmhva2thaWRvLmpwIiwicmlzaGlyaWZ1amkuaG9ra2FpZG8uanAiLCJzYXJvbWEuaG9ra2FpZG8uanAiLCJzYXJ1ZnV0c3UuaG9ra2FpZG8uanAi'@;
put 'LCJzaGFrb3Rhbi5ob2trYWlkby5qcCIsInNoYXJpLmhva2thaWRvLmpwIiwic2hpYmVjaGEuaG9ra2FpZG8uanAiLCJzaGliZXRzdS5ob2trYWlkby5qcCIsInNoaWthYmUuaG9ra2FpZG8uanAiLCJzaGlrYW9pLmhva2thaWRvLmpwIiwic2hpbWFtYWtpLmhva2thaWRvLmpwIiwic2hpbWl6'@;
put 'dS5ob2trYWlkby5qcCIsInNoaW1va2F3YS5ob2trYWlkby5qcCIsInNoaW5zaGlub3RzdS5ob2trYWlkby5qcCIsInNoaW50b2t1Lmhva2thaWRvLmpwIiwic2hpcmFudWthLmhva2thaWRvLmpwIiwic2hpcmFvaS5ob2trYWlkby5qcCIsInNoaXJpdWNoaS5ob2trYWlkby5qcCIsInNvYmV0'@;
put 'c3UuaG9ra2FpZG8uanAiLCJzdW5hZ2F3YS5ob2trYWlkby5qcCIsInRhaWtpLmhva2thaWRvLmpwIiwidGFrYXN1Lmhva2thaWRvLmpwIiwidGFraWthd2EuaG9ra2FpZG8uanAiLCJ0YWtpbm91ZS5ob2trYWlkby5qcCIsInRlc2hpa2FnYS5ob2trYWlkby5qcCIsInRvYmV0c3UuaG9ra2Fp'@;
put 'ZG8uanAiLCJ0b2htYS5ob2trYWlkby5qcCIsInRvbWFrb21haS5ob2trYWlkby5qcCIsInRvbWFyaS5ob2trYWlkby5qcCIsInRveWEuaG9ra2FpZG8uanAiLCJ0b3lha28uaG9ra2FpZG8uanAiLCJ0b3lvdG9taS5ob2trYWlkby5qcCIsInRveW91cmEuaG9ra2FpZG8uanAiLCJ0c3ViZXRz'@;
put 'dS5ob2trYWlkby5qcCIsInRzdWtpZ2F0YS5ob2trYWlkby5qcCIsInVyYWthd2EuaG9ra2FpZG8uanAiLCJ1cmF1c3UuaG9ra2FpZG8uanAiLCJ1cnl1Lmhva2thaWRvLmpwIiwidXRhc2hpbmFpLmhva2thaWRvLmpwIiwid2Fra2FuYWkuaG9ra2FpZG8uanAiLCJ3YXNzYW11Lmhva2thaWRv'@;
put 'LmpwIiwieWFrdW1vLmhva2thaWRvLmpwIiwieW9pY2hpLmhva2thaWRvLmpwIiwiYWlvaS5oeW9nby5qcCIsImFrYXNoaS5oeW9nby5qcCIsImFrby5oeW9nby5qcCIsImFtYWdhc2FraS5oeW9nby5qcCIsImFvZ2FraS5oeW9nby5qcCIsImFzYWdvLmh5b2dvLmpwIiwiYXNoaXlhLmh5b2dv'@;
put 'LmpwIiwiYXdhamkuaHlvZ28uanAiLCJmdWt1c2FraS5oeW9nby5qcCIsImdvc2hpa2kuaHlvZ28uanAiLCJoYXJpbWEuaHlvZ28uanAiLCJoaW1lamkuaHlvZ28uanAiLCJpY2hpa2F3YS5oeW9nby5qcCIsImluYWdhd2EuaHlvZ28uanAiLCJpdGFtaS5oeW9nby5qcCIsImtha29nYXdhLmh5'@;
put 'b2dvLmpwIiwia2FtaWdvcmkuaHlvZ28uanAiLCJrYW1pa2F3YS5oeW9nby5qcCIsImthc2FpLmh5b2dvLmpwIiwia2FzdWdhLmh5b2dvLmpwIiwia2F3YW5pc2hpLmh5b2dvLmpwIiwibWlraS5oeW9nby5qcCIsIm1pbmFtaWF3YWppLmh5b2dvLmpwIiwibmlzaGlub21peWEuaHlvZ28uanAi'@;
put 'LCJuaXNoaXdha2kuaHlvZ28uanAiLCJvbm8uaHlvZ28uanAiLCJzYW5kYS5oeW9nby5qcCIsInNhbm5hbi5oeW9nby5qcCIsInNhc2F5YW1hLmh5b2dvLmpwIiwic2F5by5oeW9nby5qcCIsInNoaW5ndS5oeW9nby5qcCIsInNoaW5vbnNlbi5oeW9nby5qcCIsInNoaXNvLmh5b2dvLmpwIiwi'@;
put 'c3Vtb3RvLmh5b2dvLmpwIiwidGFpc2hpLmh5b2dvLmpwIiwidGFrYS5oeW9nby5qcCIsInRha2FyYXp1a2EuaHlvZ28uanAiLCJ0YWthc2Fnby5oeW9nby5qcCIsInRha2luby5oeW9nby5qcCIsInRhbWJhLmh5b2dvLmpwIiwidGF0c3Vuby5oeW9nby5qcCIsInRveW9va2EuaHlvZ28uanAi'@;
put 'LCJ5YWJ1Lmh5b2dvLmpwIiwieWFzaGlyby5oeW9nby5qcCIsInlva2EuaHlvZ28uanAiLCJ5b2thd2EuaHlvZ28uanAiLCJhbWkuaWJhcmFraS5qcCIsImFzYWhpLmliYXJha2kuanAiLCJiYW5kby5pYmFyYWtpLmpwIiwiY2hpa3VzZWkuaWJhcmFraS5qcCIsImRhaWdvLmliYXJha2kuanAi'@;
put 'LCJmdWppc2hpcm8uaWJhcmFraS5qcCIsImhpdGFjaGkuaWJhcmFraS5qcCIsImhpdGFjaGluYWthLmliYXJha2kuanAiLCJoaXRhY2hpb21peWEuaWJhcmFraS5qcCIsImhpdGFjaGlvdGEuaWJhcmFraS5qcCIsImliYXJha2kuaWJhcmFraS5qcCIsImluYS5pYmFyYWtpLmpwIiwiaW5hc2hp'@;
put 'a2kuaWJhcmFraS5qcCIsIml0YWtvLmliYXJha2kuanAiLCJpd2FtYS5pYmFyYWtpLmpwIiwiam9zby5pYmFyYWtpLmpwIiwia2FtaXN1LmliYXJha2kuanAiLCJrYXNhbWEuaWJhcmFraS5qcCIsImthc2hpbWEuaWJhcmFraS5qcCIsImthc3VtaWdhdXJhLmliYXJha2kuanAiLCJrb2dhLmli'@;
put 'YXJha2kuanAiLCJtaWhvLmliYXJha2kuanAiLCJtaXRvLmliYXJha2kuanAiLCJtb3JpeWEuaWJhcmFraS5qcCIsIm5ha2EuaWJhcmFraS5qcCIsIm5hbWVnYXRhLmliYXJha2kuanAiLCJvYXJhaS5pYmFyYWtpLmpwIiwib2dhd2EuaWJhcmFraS5qcCIsIm9taXRhbWEuaWJhcmFraS5qcCIs'@;
put 'InJ5dWdhc2FraS5pYmFyYWtpLmpwIiwic2FrYWkuaWJhcmFraS5qcCIsInNha3VyYWdhd2EuaWJhcmFraS5qcCIsInNoaW1vZGF0ZS5pYmFyYWtpLmpwIiwic2hpbW90c3VtYS5pYmFyYWtpLmpwIiwic2hpcm9zYXRvLmliYXJha2kuanAiLCJzb3dhLmliYXJha2kuanAiLCJzdWlmdS5pYmFy'@;
put 'YWtpLmpwIiwidGFrYWhhZ2kuaWJhcmFraS5qcCIsInRhbWF0c3VrdXJpLmliYXJha2kuanAiLCJ0b2thaS5pYmFyYWtpLmpwIiwidG9tb2JlLmliYXJha2kuanAiLCJ0b25lLmliYXJha2kuanAiLCJ0b3JpZGUuaWJhcmFraS5qcCIsInRzdWNoaXVyYS5pYmFyYWtpLmpwIiwidHN1a3ViYS5p'@;
put 'YmFyYWtpLmpwIiwidWNoaWhhcmEuaWJhcmFraS5qcCIsInVzaGlrdS5pYmFyYWtpLmpwIiwieWFjaGl5by5pYmFyYWtpLmpwIiwieWFtYWdhdGEuaWJhcmFraS5qcCIsInlhd2FyYS5pYmFyYWtpLmpwIiwieXVraS5pYmFyYWtpLmpwIiwiYW5hbWl6dS5pc2hpa2F3YS5qcCIsImhha3VpLmlz'@;
put 'aGlrYXdhLmpwIiwiaGFrdXNhbi5pc2hpa2F3YS5qcCIsImthZ2EuaXNoaWthd2EuanAiLCJrYWhva3UuaXNoaWthd2EuanAiLCJrYW5hemF3YS5pc2hpa2F3YS5qcCIsImthd2FraXRhLmlzaGlrYXdhLmpwIiwia29tYXRzdS5pc2hpa2F3YS5qcCIsIm5ha2Fub3RvLmlzaGlrYXdhLmpwIiwi'@;
put 'bmFuYW8uaXNoaWthd2EuanAiLCJub21pLmlzaGlrYXdhLmpwIiwibm9ub2ljaGkuaXNoaWthd2EuanAiLCJub3RvLmlzaGlrYXdhLmpwIiwic2hpa2EuaXNoaWthd2EuanAiLCJzdXp1LmlzaGlrYXdhLmpwIiwidHN1YmF0YS5pc2hpa2F3YS5qcCIsInRzdXJ1Z2kuaXNoaWthd2EuanAiLCJ1'@;
put 'Y2hpbmFkYS5pc2hpa2F3YS5qcCIsIndhamltYS5pc2hpa2F3YS5qcCIsImZ1ZGFpLml3YXRlLmpwIiwiZnVqaXNhd2EuaXdhdGUuanAiLCJoYW5hbWFraS5pd2F0ZS5qcCIsImhpcmFpenVtaS5pd2F0ZS5qcCIsImhpcm9uby5pd2F0ZS5qcCIsImljaGlub2hlLml3YXRlLmpwIiwiaWNoaW5v'@;
put 'c2VraS5pd2F0ZS5qcCIsIml3YWl6dW1pLml3YXRlLmpwIiwiaXdhdGUuaXdhdGUuanAiLCJqb2JvamkuaXdhdGUuanAiLCJrYW1haXNoaS5pd2F0ZS5qcCIsImthbmVnYXNha2kuaXdhdGUuanAiLCJrYXJ1bWFpLml3YXRlLmpwIiwia2F3YWkuaXdhdGUuanAiLCJraXRha2FtaS5pd2F0ZS5q'@;
put 'cCIsImt1amkuaXdhdGUuanAiLCJrdW5vaGUuaXdhdGUuanAiLCJrdXp1bWFraS5pd2F0ZS5qcCIsIm1peWFrby5pd2F0ZS5qcCIsIm1penVzYXdhLml3YXRlLmpwIiwibW9yaW9rYS5pd2F0ZS5qcCIsIm5pbm9oZS5pd2F0ZS5qcCIsIm5vZGEuaXdhdGUuanAiLCJvZnVuYXRvLml3YXRlLmpw'@;
put 'Iiwib3NodS5pd2F0ZS5qcCIsIm90c3VjaGkuaXdhdGUuanAiLCJyaWt1emVudGFrYXRhLml3YXRlLmpwIiwic2hpd2EuaXdhdGUuanAiLCJzaGl6dWt1aXNoaS5pd2F0ZS5qcCIsInN1bWl0YS5pd2F0ZS5qcCIsInRhbm9oYXRhLml3YXRlLmpwIiwidG9uby5pd2F0ZS5qcCIsInlhaGFiYS5p'@;
put 'd2F0ZS5qcCIsInlhbWFkYS5pd2F0ZS5qcCIsImF5YWdhd2Eua2FnYXdhLmpwIiwiaGlnYXNoaWthZ2F3YS5rYWdhd2EuanAiLCJrYW5vbmppLmthZ2F3YS5qcCIsImtvdG9oaXJhLmthZ2F3YS5qcCIsIm1hbm5vLmthZ2F3YS5qcCIsIm1hcnVnYW1lLmthZ2F3YS5qcCIsIm1pdG95by5rYWdh'@;
put 'd2EuanAiLCJuYW9zaGltYS5rYWdhd2EuanAiLCJzYW51a2kua2FnYXdhLmpwIiwidGFkb3RzdS5rYWdhd2EuanAiLCJ0YWthbWF0c3Uua2FnYXdhLmpwIiwidG9ub3Noby5rYWdhd2EuanAiLCJ1Y2hpbm9taS5rYWdhd2EuanAiLCJ1dGF6dS5rYWdhd2EuanAiLCJ6ZW50c3VqaS5rYWdhd2Eu'@;
put 'anAiLCJha3VuZS5rYWdvc2hpbWEuanAiLCJhbWFtaS5rYWdvc2hpbWEuanAiLCJoaW9raS5rYWdvc2hpbWEuanAiLCJpc2Eua2Fnb3NoaW1hLmpwIiwiaXNlbi5rYWdvc2hpbWEuanAiLCJpenVtaS5rYWdvc2hpbWEuanAiLCJrYWdvc2hpbWEua2Fnb3NoaW1hLmpwIiwia2Fub3lhLmthZ29z'@;
put 'aGltYS5qcCIsImthd2FuYWJlLmthZ29zaGltYS5qcCIsImtpbmtvLmthZ29zaGltYS5qcCIsImtvdXlhbWEua2Fnb3NoaW1hLmpwIiwibWFrdXJhemFraS5rYWdvc2hpbWEuanAiLCJtYXRzdW1vdG8ua2Fnb3NoaW1hLmpwIiwibWluYW1pdGFuZS5rYWdvc2hpbWEuanAiLCJuYWthdGFuZS5r'@;
put 'YWdvc2hpbWEuanAiLCJuaXNoaW5vb21vdGUua2Fnb3NoaW1hLmpwIiwic2F0c3VtYXNlbmRhaS5rYWdvc2hpbWEuanAiLCJzb28ua2Fnb3NoaW1hLmpwIiwidGFydW1penUua2Fnb3NoaW1hLmpwIiwieXVzdWkua2Fnb3NoaW1hLmpwIiwiYWlrYXdhLmthbmFnYXdhLmpwIiwiYXRzdWdpLmth'@;
put 'bmFnYXdhLmpwIiwiYXlhc2Uua2FuYWdhd2EuanAiLCJjaGlnYXNha2kua2FuYWdhd2EuanAiLCJlYmluYS5rYW5hZ2F3YS5qcCIsImZ1amlzYXdhLmthbmFnYXdhLmpwIiwiaGFkYW5vLmthbmFnYXdhLmpwIiwiaGFrb25lLmthbmFnYXdhLmpwIiwiaGlyYXRzdWthLmthbmFnYXdhLmpwIiwi'@;
put 'aXNlaGFyYS5rYW5hZ2F3YS5qcCIsImthaXNlaS5rYW5hZ2F3YS5qcCIsImthbWFrdXJhLmthbmFnYXdhLmpwIiwia2l5b2thd2Eua2FuYWdhd2EuanAiLCJtYXRzdWRhLmthbmFnYXdhLmpwIiwibWluYW1pYXNoaWdhcmEua2FuYWdhd2EuanAiLCJtaXVyYS5rYW5hZ2F3YS5qcCIsIm5ha2Fp'@;
put 'LmthbmFnYXdhLmpwIiwibmlub21peWEua2FuYWdhd2EuanAiLCJvZGF3YXJhLmthbmFnYXdhLmpwIiwib2kua2FuYWdhd2EuanAiLCJvaXNvLmthbmFnYXdhLmpwIiwic2FnYW1paGFyYS5rYW5hZ2F3YS5qcCIsInNhbXVrYXdhLmthbmFnYXdhLmpwIiwidHN1a3VpLmthbmFnYXdhLmpwIiwi'@;
put 'eWFtYWtpdGEua2FuYWdhd2EuanAiLCJ5YW1hdG8ua2FuYWdhd2EuanAiLCJ5b2tvc3VrYS5rYW5hZ2F3YS5qcCIsInl1Z2F3YXJhLmthbmFnYXdhLmpwIiwiemFtYS5rYW5hZ2F3YS5qcCIsInp1c2hpLmthbmFnYXdhLmpwIiwiYWtpLmtvY2hpLmpwIiwiZ2Vpc2VpLmtvY2hpLmpwIiwiaGlk'@;
put 'YWthLmtvY2hpLmpwIiwiaGlnYXNoaXRzdW5vLmtvY2hpLmpwIiwiaW5vLmtvY2hpLmpwIiwia2FnYW1pLmtvY2hpLmpwIiwia2FtaS5rb2NoaS5qcCIsImtpdGFnYXdhLmtvY2hpLmpwIiwia29jaGkua29jaGkuanAiLCJtaWhhcmEua29jaGkuanAiLCJtb3RveWFtYS5rb2NoaS5qcCIsIm11'@;
put 'cm90by5rb2NoaS5qcCIsIm5haGFyaS5rb2NoaS5qcCIsIm5ha2FtdXJhLmtvY2hpLmpwIiwibmFua29rdS5rb2NoaS5qcCIsIm5pc2hpdG9zYS5rb2NoaS5qcCIsIm5peW9kb2dhd2Eua29jaGkuanAiLCJvY2hpLmtvY2hpLmpwIiwib2thd2Eua29jaGkuanAiLCJvdG95by5rb2NoaS5qcCIs'@;
put 'Im90c3VraS5rb2NoaS5qcCIsInNha2F3YS5rb2NoaS5qcCIsInN1a3Vtby5rb2NoaS5qcCIsInN1c2FraS5rb2NoaS5qcCIsInRvc2Eua29jaGkuanAiLCJ0b3Nhc2hpbWl6dS5rb2NoaS5qcCIsInRveW8ua29jaGkuanAiLCJ0c3Vuby5rb2NoaS5qcCIsInVtYWppLmtvY2hpLmpwIiwieWFz'@;
put 'dWRhLmtvY2hpLmpwIiwieXVzdWhhcmEua29jaGkuanAiLCJhbWFrdXNhLmt1bWFtb3RvLmpwIiwiYXJhby5rdW1hbW90by5qcCIsImFzby5rdW1hbW90by5qcCIsImNob3lvLmt1bWFtb3RvLmpwIiwiZ3lva3V0by5rdW1hbW90by5qcCIsImthbWlhbWFrdXNhLmt1bWFtb3RvLmpwIiwia2lr'@;
put 'dWNoaS5rdW1hbW90by5qcCIsImt1bWFtb3RvLmt1bWFtb3RvLmpwIiwibWFzaGlraS5rdW1hbW90by5qcCIsIm1pZnVuZS5rdW1hbW90by5qcCIsIm1pbmFtYXRhLmt1bWFtb3RvLmpwIiwibWluYW1pb2d1bmkua3VtYW1vdG8uanAiLCJuYWdhc3Uua3VtYW1vdG8uanAiLCJuaXNoaWhhcmEu'@;
put 'a3VtYW1vdG8uanAiLCJvZ3VuaS5rdW1hbW90by5qcCIsIm96dS5rdW1hbW90by5qcCIsInN1bW90by5rdW1hbW90by5qcCIsInRha2Ftb3JpLmt1bWFtb3RvLmpwIiwidWtpLmt1bWFtb3RvLmpwIiwidXRvLmt1bWFtb3RvLmpwIiwieWFtYWdhLmt1bWFtb3RvLmpwIiwieWFtYXRvLmt1bWFt'@;
put 'b3RvLmpwIiwieWF0c3VzaGlyby5rdW1hbW90by5qcCIsImF5YWJlLmt5b3RvLmpwIiwiZnVrdWNoaXlhbWEua3lvdG8uanAiLCJoaWdhc2hpeWFtYS5reW90by5qcCIsImlkZS5reW90by5qcCIsImluZS5reW90by5qcCIsImpveW8ua3lvdG8uanAiLCJrYW1lb2thLmt5b3RvLmpwIiwia2Ft'@;
put 'by5reW90by5qcCIsImtpdGEua3lvdG8uanAiLCJraXp1Lmt5b3RvLmpwIiwia3VtaXlhbWEua3lvdG8uanAiLCJreW90YW1iYS5reW90by5qcCIsImt5b3RhbmFiZS5reW90by5qcCIsImt5b3RhbmdvLmt5b3RvLmpwIiwibWFpenVydS5reW90by5qcCIsIm1pbmFtaS5reW90by5qcCIsIm1p'@;
put 'bmFtaXlhbWFzaGlyby5reW90by5qcCIsIm1peWF6dS5reW90by5qcCIsIm11a28ua3lvdG8uanAiLCJuYWdhb2tha3lvLmt5b3RvLmpwIiwibmFrYWd5by5reW90by5qcCIsIm5hbnRhbi5reW90by5qcCIsIm95YW1hemFraS5reW90by5qcCIsInNha3lvLmt5b3RvLmpwIiwic2Vpa2Eua3lv'@;
put 'dG8uanAiLCJ0YW5hYmUua3lvdG8uanAiLCJ1amkua3lvdG8uanAiLCJ1aml0YXdhcmEua3lvdG8uanAiLCJ3YXp1a2Eua3lvdG8uanAiLCJ5YW1hc2hpbmEua3lvdG8uanAiLCJ5YXdhdGEua3lvdG8uanAiLCJhc2FoaS5taWUuanAiLCJpbmFiZS5taWUuanAiLCJpc2UubWllLmpwIiwia2Ft'@;
put 'ZXlhbWEubWllLmpwIiwia2F3YWdvZS5taWUuanAiLCJraWhvLm1pZS5qcCIsImtpc29zYWtpLm1pZS5qcCIsImtpd2EubWllLmpwIiwia29tb25vLm1pZS5qcCIsImt1bWFuby5taWUuanAiLCJrdXdhbmEubWllLmpwIiwibWF0c3VzYWthLm1pZS5qcCIsIm1laXdhLm1pZS5qcCIsIm1paGFt'@;
put 'YS5taWUuanAiLCJtaW5hbWlpc2UubWllLmpwIiwibWlzdWdpLm1pZS5qcCIsIm1peWFtYS5taWUuanAiLCJuYWJhcmkubWllLmpwIiwic2hpbWEubWllLmpwIiwic3V6dWthLm1pZS5qcCIsInRhZG8ubWllLmpwIiwidGFpa2kubWllLmpwIiwidGFraS5taWUuanAiLCJ0YW1ha2kubWllLmpw'@;
put 'IiwidG9iYS5taWUuanAiLCJ0c3UubWllLmpwIiwidWRvbm8ubWllLmpwIiwidXJlc2hpbm8ubWllLmpwIiwid2F0YXJhaS5taWUuanAiLCJ5b2trYWljaGkubWllLmpwIiwiZnVydWthd2EubWl5YWdpLmpwIiwiaGlnYXNoaW1hdHN1c2hpbWEubWl5YWdpLmpwIiwiaXNoaW5vbWFraS5taXlh'@;
put 'Z2kuanAiLCJpd2FudW1hLm1peWFnaS5qcCIsImtha3VkYS5taXlhZ2kuanAiLCJrYW1pLm1peWFnaS5qcCIsImthd2FzYWtpLm1peWFnaS5qcCIsIm1hcnVtb3JpLm1peWFnaS5qcCIsIm1hdHN1c2hpbWEubWl5YWdpLmpwIiwibWluYW1pc2FucmlrdS5taXlhZ2kuanAiLCJtaXNhdG8ubWl5'@;
put 'YWdpLmpwIiwibXVyYXRhLm1peWFnaS5qcCIsIm5hdG9yaS5taXlhZ2kuanAiLCJvZ2F3YXJhLm1peWFnaS5qcCIsIm9oaXJhLm1peWFnaS5qcCIsIm9uYWdhd2EubWl5YWdpLmpwIiwib3Nha2kubWl5YWdpLmpwIiwicmlmdS5taXlhZ2kuanAiLCJzZW1pbmUubWl5YWdpLmpwIiwic2hpYmF0'@;
put 'YS5taXlhZ2kuanAiLCJzaGljaGlrYXNodWt1Lm1peWFnaS5qcCIsInNoaWthbWEubWl5YWdpLmpwIiwic2hpb2dhbWEubWl5YWdpLmpwIiwic2hpcm9pc2hpLm1peWFnaS5qcCIsInRhZ2Fqby5taXlhZ2kuanAiLCJ0YWl3YS5taXlhZ2kuanAiLCJ0b21lLm1peWFnaS5qcCIsInRvbWl5YS5t'@;
put 'aXlhZ2kuanAiLCJ3YWt1eWEubWl5YWdpLmpwIiwid2F0YXJpLm1peWFnaS5qcCIsInlhbWFtb3RvLm1peWFnaS5qcCIsInphby5taXlhZ2kuanAiLCJheWEubWl5YXpha2kuanAiLCJlYmluby5taXlhemFraS5qcCIsImdva2FzZS5taXlhemFraS5qcCIsImh5dWdhLm1peWF6YWtpLmpwIiwi'@;
put 'a2Fkb2dhd2EubWl5YXpha2kuanAiLCJrYXdhbWluYW1pLm1peWF6YWtpLmpwIiwia2lqby5taXlhemFraS5qcCIsImtpdGFnYXdhLm1peWF6YWtpLmpwIiwia2l0YWthdGEubWl5YXpha2kuanAiLCJraXRhdXJhLm1peWF6YWtpLmpwIiwia29iYXlhc2hpLm1peWF6YWtpLmpwIiwia3VuaXRv'@;
put 'bWkubWl5YXpha2kuanAiLCJrdXNoaW1hLm1peWF6YWtpLmpwIiwibWltYXRhLm1peWF6YWtpLmpwIiwibWl5YWtvbm9qby5taXlhemFraS5qcCIsIm1peWF6YWtpLm1peWF6YWtpLmpwIiwibW9yb3RzdWthLm1peWF6YWtpLmpwIiwibmljaGluYW4ubWl5YXpha2kuanAiLCJuaXNoaW1lcmEu'@;
put 'bWl5YXpha2kuanAiLCJub2Jlb2thLm1peWF6YWtpLmpwIiwic2FpdG8ubWl5YXpha2kuanAiLCJzaGlpYmEubWl5YXpha2kuanAiLCJzaGludG9taS5taXlhemFraS5qcCIsInRha2FoYXJ1Lm1peWF6YWtpLmpwIiwidGFrYW5hYmUubWl5YXpha2kuanAiLCJ0YWthemFraS5taXlhemFraS5q'@;
put 'cCIsInRzdW5vLm1peWF6YWtpLmpwIiwiYWNoaS5uYWdhbm8uanAiLCJhZ2VtYXRzdS5uYWdhbm8uanAiLCJhbmFuLm5hZ2Fuby5qcCIsImFva2kubmFnYW5vLmpwIiwiYXNhaGkubmFnYW5vLmpwIiwiYXp1bWluby5uYWdhbm8uanAiLCJjaGlrdWhva3UubmFnYW5vLmpwIiwiY2hpa3VtYS5u'@;
put 'YWdhbm8uanAiLCJjaGluby5uYWdhbm8uanAiLCJmdWppbWkubmFnYW5vLmpwIiwiaGFrdWJhLm5hZ2Fuby5qcCIsImhhcmEubmFnYW5vLmpwIiwiaGlyYXlhLm5hZ2Fuby5qcCIsImlpZGEubmFnYW5vLmpwIiwiaWlqaW1hLm5hZ2Fuby5qcCIsImlpeWFtYS5uYWdhbm8uanAiLCJpaXp1bmEu'@;
put 'bmFnYW5vLmpwIiwiaWtlZGEubmFnYW5vLmpwIiwiaWt1c2FrYS5uYWdhbm8uanAiLCJpbmEubmFnYW5vLmpwIiwia2FydWl6YXdhLm5hZ2Fuby5qcCIsImthd2FrYW1pLm5hZ2Fuby5qcCIsImtpc28ubmFnYW5vLmpwIiwia2lzb2Z1a3VzaGltYS5uYWdhbm8uanAiLCJraXRhYWlraS5uYWdh'@;
put 'bm8uanAiLCJrb21hZ2FuZS5uYWdhbm8uanAiLCJrb21vcm8ubmFnYW5vLmpwIiwibWF0c3VrYXdhLm5hZ2Fuby5qcCIsIm1hdHN1bW90by5uYWdhbm8uanAiLCJtaWFzYS5uYWdhbm8uanAiLCJtaW5hbWlhaWtpLm5hZ2Fuby5qcCIsIm1pbmFtaW1ha2kubmFnYW5vLmpwIiwibWluYW1pbWlu'@;
put 'b3dhLm5hZ2Fuby5qcCIsIm1pbm93YS5uYWdhbm8uanAiLCJtaXlhZGEubmFnYW5vLmpwIiwibWl5b3RhLm5hZ2Fuby5qcCIsIm1vY2hpenVraS5uYWdhbm8uanAiLCJuYWdhbm8ubmFnYW5vLmpwIiwibmFnYXdhLm5hZ2Fuby5qcCIsIm5hZ2lzby5uYWdhbm8uanAiLCJuYWthZ2F3YS5uYWdh'@;
put 'bm8uanAiLCJuYWthbm8ubmFnYW5vLmpwIiwibm96YXdhb25zZW4ubmFnYW5vLmpwIiwib2J1c2UubmFnYW5vLmpwIiwib2dhd2EubmFnYW5vLmpwIiwib2theWEubmFnYW5vLmpwIiwib21hY2hpLm5hZ2Fuby5qcCIsIm9taS5uYWdhbm8uanAiLCJvb2t1d2EubmFnYW5vLmpwIiwib29zaGlr'@;
put 'YS5uYWdhbm8uanAiLCJvdGFraS5uYWdhbm8uanAiLCJvdGFyaS5uYWdhbm8uanAiLCJzYWthZS5uYWdhbm8uanAiLCJzYWtha2kubmFnYW5vLmpwIiwic2FrdS5uYWdhbm8uanAiLCJzYWt1aG8ubmFnYW5vLmpwIiwic2hpbW9zdXdhLm5hZ2Fuby5qcCIsInNoaW5hbm9tYWNoaS5uYWdhbm8u'@;
put 'anAiLCJzaGlvamlyaS5uYWdhbm8uanAiLCJzdXdhLm5hZ2Fuby5qcCIsInN1emFrYS5uYWdhbm8uanAiLCJ0YWthZ2kubmFnYW5vLmpwIiwidGFrYW1vcmkubmFnYW5vLmpwIiwidGFrYXlhbWEubmFnYW5vLmpwIiwidGF0ZXNoaW5hLm5hZ2Fuby5qcCIsInRhdHN1bm8ubmFnYW5vLmpwIiwi'@;
put 'dG9nYWt1c2hpLm5hZ2Fuby5qcCIsInRvZ3VyYS5uYWdhbm8uanAiLCJ0b21pLm5hZ2Fuby5qcCIsInVlZGEubmFnYW5vLmpwIiwid2FkYS5uYWdhbm8uanAiLCJ5YW1hZ2F0YS5uYWdhbm8uanAiLCJ5YW1hbm91Y2hpLm5hZ2Fuby5qcCIsInlhc2FrYS5uYWdhbm8uanAiLCJ5YXN1b2thLm5h'@;
put 'Z2Fuby5qcCIsImNoaWppd2EubmFnYXNha2kuanAiLCJmdXRzdS5uYWdhc2FraS5qcCIsImdvdG8ubmFnYXNha2kuanAiLCJoYXNhbWkubmFnYXNha2kuanAiLCJoaXJhZG8ubmFnYXNha2kuanAiLCJpa2kubmFnYXNha2kuanAiLCJpc2FoYXlhLm5hZ2FzYWtpLmpwIiwia2F3YXRhbmEubmFn'@;
put 'YXNha2kuanAiLCJrdWNoaW5vdHN1Lm5hZ2FzYWtpLmpwIiwibWF0c3V1cmEubmFnYXNha2kuanAiLCJuYWdhc2FraS5uYWdhc2FraS5qcCIsIm9iYW1hLm5hZ2FzYWtpLmpwIiwib211cmEubmFnYXNha2kuanAiLCJvc2V0by5uYWdhc2FraS5qcCIsInNhaWthaS5uYWdhc2FraS5qcCIsInNh'@;
put 'c2Viby5uYWdhc2FraS5qcCIsInNlaWhpLm5hZ2FzYWtpLmpwIiwic2hpbWFiYXJhLm5hZ2FzYWtpLmpwIiwic2hpbmthbWlnb3RvLm5hZ2FzYWtpLmpwIiwidG9naXRzdS5uYWdhc2FraS5qcCIsInRzdXNoaW1hLm5hZ2FzYWtpLmpwIiwidW56ZW4ubmFnYXNha2kuanAiLCJhbmRvLm5hcmEu'@;
put 'anAiLCJnb3NlLm5hcmEuanAiLCJoZWd1cmkubmFyYS5qcCIsImhpZ2FzaGl5b3NoaW5vLm5hcmEuanAiLCJpa2FydWdhLm5hcmEuanAiLCJpa29tYS5uYXJhLmpwIiwia2FtaWtpdGF5YW1hLm5hcmEuanAiLCJrYW5tYWtpLm5hcmEuanAiLCJrYXNoaWJhLm5hcmEuanAiLCJrYXNoaWhhcmEu'@;
put 'bmFyYS5qcCIsImthdHN1cmFnaS5uYXJhLmpwIiwia2F3YWkubmFyYS5qcCIsImthd2FrYW1pLm5hcmEuanAiLCJrYXdhbmlzaGkubmFyYS5qcCIsImtvcnlvLm5hcmEuanAiLCJrdXJvdGFraS5uYXJhLmpwIiwibWl0c3VlLm5hcmEuanAiLCJtaXlha2UubmFyYS5qcCIsIm5hcmEubmFyYS5q'@;
put 'cCIsIm5vc2VnYXdhLm5hcmEuanAiLCJvamkubmFyYS5qcCIsIm91ZGEubmFyYS5qcCIsIm95b2RvLm5hcmEuanAiLCJzYWt1cmFpLm5hcmEuanAiLCJzYW5nby5uYXJhLmpwIiwic2hpbW9pY2hpLm5hcmEuanAiLCJzaGltb2tpdGF5YW1hLm5hcmEuanAiLCJzaGluam8ubmFyYS5qcCIsInNv'@;
put 'bmkubmFyYS5qcCIsInRha2F0b3JpLm5hcmEuanAiLCJ0YXdhcmFtb3RvLm5hcmEuanAiLCJ0ZW5rYXdhLm5hcmEuanAiLCJ0ZW5yaS5uYXJhLmpwIiwidWRhLm5hcmEuanAiLCJ5YW1hdG9rb3JpeWFtYS5uYXJhLmpwIiwieWFtYXRvdGFrYWRhLm5hcmEuanAiLCJ5YW1hem9lLm5hcmEuanAi'@;
put 'LCJ5b3NoaW5vLm5hcmEuanAiLCJhZ2EubmlpZ2F0YS5qcCIsImFnYW5vLm5paWdhdGEuanAiLCJnb3Nlbi5uaWlnYXRhLmpwIiwiaXRvaWdhd2EubmlpZ2F0YS5qcCIsIml6dW1vemFraS5uaWlnYXRhLmpwIiwiam9ldHN1Lm5paWdhdGEuanAiLCJrYW1vLm5paWdhdGEuanAiLCJrYXJpd2Eu'@;
put 'bmlpZ2F0YS5qcCIsImthc2hpd2F6YWtpLm5paWdhdGEuanAiLCJtaW5hbWl1b251bWEubmlpZ2F0YS5qcCIsIm1pdHN1a2UubmlpZ2F0YS5qcCIsIm11aWthLm5paWdhdGEuanAiLCJtdXJha2FtaS5uaWlnYXRhLmpwIiwibXlva28ubmlpZ2F0YS5qcCIsIm5hZ2Fva2EubmlpZ2F0YS5qcCIs'@;
put 'Im5paWdhdGEubmlpZ2F0YS5qcCIsIm9qaXlhLm5paWdhdGEuanAiLCJvbWkubmlpZ2F0YS5qcCIsInNhZG8ubmlpZ2F0YS5qcCIsInNhbmpvLm5paWdhdGEuanAiLCJzZWlyby5uaWlnYXRhLmpwIiwic2Vpcm91Lm5paWdhdGEuanAiLCJzZWtpa2F3YS5uaWlnYXRhLmpwIiwic2hpYmF0YS5u'@;
put 'aWlnYXRhLmpwIiwidGFnYW1pLm5paWdhdGEuanAiLCJ0YWluYWkubmlpZ2F0YS5qcCIsInRvY2hpby5uaWlnYXRhLmpwIiwidG9rYW1hY2hpLm5paWdhdGEuanAiLCJ0c3ViYW1lLm5paWdhdGEuanAiLCJ0c3VuYW4ubmlpZ2F0YS5qcCIsInVvbnVtYS5uaWlnYXRhLmpwIiwieWFoaWtvLm5p'@;
put 'aWdhdGEuanAiLCJ5b2l0YS5uaWlnYXRhLmpwIiwieXV6YXdhLm5paWdhdGEuanAiLCJiZXBwdS5vaXRhLmpwIiwiYnVuZ29vbm8ub2l0YS5qcCIsImJ1bmdvdGFrYWRhLm9pdGEuanAiLCJoYXNhbWEub2l0YS5qcCIsImhpamkub2l0YS5qcCIsImhpbWVzaGltYS5vaXRhLmpwIiwiaGl0YS5v'@;
put 'aXRhLmpwIiwia2FtaXRzdWUub2l0YS5qcCIsImtva29ub2Uub2l0YS5qcCIsImt1anUub2l0YS5qcCIsImt1bmlzYWtpLm9pdGEuanAiLCJrdXN1Lm9pdGEuanAiLCJvaXRhLm9pdGEuanAiLCJzYWlraS5vaXRhLmpwIiwidGFrZXRhLm9pdGEuanAiLCJ0c3VrdW1pLm9pdGEuanAiLCJ1c2Eu'@;
put 'b2l0YS5qcCIsInVzdWtpLm9pdGEuanAiLCJ5dWZ1Lm9pdGEuanAiLCJha2Fpd2Eub2theWFtYS5qcCIsImFzYWt1Y2hpLm9rYXlhbWEuanAiLCJiaXplbi5va2F5YW1hLmpwIiwiaGF5YXNoaW1hLm9rYXlhbWEuanAiLCJpYmFyYS5va2F5YW1hLmpwIiwia2FnYW1pbm8ub2theWFtYS5qcCIs'@;
put 'Imthc2Fva2Eub2theWFtYS5qcCIsImtpYmljaHVvLm9rYXlhbWEuanAiLCJrdW1lbmFuLm9rYXlhbWEuanAiLCJrdXJhc2hpa2kub2theWFtYS5qcCIsIm1hbml3YS5va2F5YW1hLmpwIiwibWlzYWtpLm9rYXlhbWEuanAiLCJuYWdpLm9rYXlhbWEuanAiLCJuaWltaS5va2F5YW1hLmpwIiwi'@;
put 'bmlzaGlhd2FrdXJhLm9rYXlhbWEuanAiLCJva2F5YW1hLm9rYXlhbWEuanAiLCJzYXRvc2hvLm9rYXlhbWEuanAiLCJzZXRvdWNoaS5va2F5YW1hLmpwIiwic2hpbmpvLm9rYXlhbWEuanAiLCJzaG9vLm9rYXlhbWEuanAiLCJzb2phLm9rYXlhbWEuanAiLCJ0YWthaGFzaGkub2theWFtYS5q'@;
put 'cCIsInRhbWFuby5va2F5YW1hLmpwIiwidHN1eWFtYS5va2F5YW1hLmpwIiwid2FrZS5va2F5YW1hLmpwIiwieWFrYWdlLm9rYXlhbWEuanAiLCJhZ3VuaS5va2luYXdhLmpwIiwiZ2lub3dhbi5va2luYXdhLmpwIiwiZ2lub3phLm9raW5hd2EuanAiLCJndXNoaWthbWkub2tpbmF3YS5qcCIs'@;
put 'ImhhZWJhcnUub2tpbmF3YS5qcCIsImhpZ2FzaGkub2tpbmF3YS5qcCIsImhpcmFyYS5va2luYXdhLmpwIiwiaWhleWEub2tpbmF3YS5qcCIsImlzaGlnYWtpLm9raW5hd2EuanAiLCJpc2hpa2F3YS5va2luYXdhLmpwIiwiaXRvbWFuLm9raW5hd2EuanAiLCJpemVuYS5va2luYXdhLmpwIiwi'@;
put 'a2FkZW5hLm9raW5hd2EuanAiLCJraW4ub2tpbmF3YS5qcCIsImtpdGFkYWl0by5va2luYXdhLmpwIiwia2l0YW5ha2FndXN1a3Uub2tpbmF3YS5qcCIsImt1bWVqaW1hLm9raW5hd2EuanAiLCJrdW5pZ2FtaS5va2luYXdhLmpwIiwibWluYW1pZGFpdG8ub2tpbmF3YS5qcCIsIm1vdG9idS5v'@;
put 'a2luYXdhLmpwIiwibmFnby5va2luYXdhLmpwIiwibmFoYS5va2luYXdhLmpwIiwibmFrYWd1c3VrdS5va2luYXdhLmpwIiwibmFraWppbi5va2luYXdhLmpwIiwibmFuam8ub2tpbmF3YS5qcCIsIm5pc2hpaGFyYS5va2luYXdhLmpwIiwib2dpbWkub2tpbmF3YS5qcCIsIm9raW5hd2Eub2tp'@;
put 'bmF3YS5qcCIsIm9ubmEub2tpbmF3YS5qcCIsInNoaW1vamkub2tpbmF3YS5qcCIsInRha2V0b21pLm9raW5hd2EuanAiLCJ0YXJhbWEub2tpbmF3YS5qcCIsInRva2FzaGlraS5va2luYXdhLmpwIiwidG9taWd1c3VrdS5va2luYXdhLmpwIiwidG9uYWtpLm9raW5hd2EuanAiLCJ1cmFzb2Uu'@;
put 'b2tpbmF3YS5qcCIsInVydW1hLm9raW5hd2EuanAiLCJ5YWVzZS5va2luYXdhLmpwIiwieW9taXRhbi5va2luYXdhLmpwIiwieW9uYWJhcnUub2tpbmF3YS5qcCIsInlvbmFndW5pLm9raW5hd2EuanAiLCJ6YW1hbWkub2tpbmF3YS5qcCIsImFiZW5vLm9zYWthLmpwIiwiY2hpaGF5YWFrYXNh'@;
put 'a2Eub3Nha2EuanAiLCJjaHVvLm9zYWthLmpwIiwiZGFpdG8ub3Nha2EuanAiLCJmdWppaWRlcmEub3Nha2EuanAiLCJoYWJpa2luby5vc2FrYS5qcCIsImhhbm5hbi5vc2FrYS5qcCIsImhpZ2FzaGlvc2FrYS5vc2FrYS5qcCIsImhpZ2FzaGlzdW1peW9zaGkub3Nha2EuanAiLCJoaWdhc2hp'@;
put 'eW9kb2dhd2Eub3Nha2EuanAiLCJoaXJha2F0YS5vc2FrYS5qcCIsImliYXJha2kub3Nha2EuanAiLCJpa2VkYS5vc2FrYS5qcCIsIml6dW1pLm9zYWthLmpwIiwiaXp1bWlvdHN1Lm9zYWthLmpwIiwiaXp1bWlzYW5vLm9zYWthLmpwIiwia2Fkb21hLm9zYWthLmpwIiwia2FpenVrYS5vc2Fr'@;
put 'YS5qcCIsImthbmFuLm9zYWthLmpwIiwia2FzaGl3YXJhLm9zYWthLmpwIiwia2F0YW5vLm9zYWthLmpwIiwia2F3YWNoaW5hZ2Fuby5vc2FrYS5qcCIsImtpc2hpd2FkYS5vc2FrYS5qcCIsImtpdGEub3Nha2EuanAiLCJrdW1hdG9yaS5vc2FrYS5qcCIsIm1hdHN1YmFyYS5vc2FrYS5qcCIs'@;
put 'Im1pbmF0by5vc2FrYS5qcCIsIm1pbm9oLm9zYWthLmpwIiwibWlzYWtpLm9zYWthLmpwIiwibW9yaWd1Y2hpLm9zYWthLmpwIiwibmV5YWdhd2Eub3Nha2EuanAiLCJuaXNoaS5vc2FrYS5qcCIsIm5vc2Uub3Nha2EuanAiLCJvc2FrYXNheWFtYS5vc2FrYS5qcCIsInNha2FpLm9zYWthLmpw'@;
put 'Iiwic2F5YW1hLm9zYWthLmpwIiwic2VubmFuLm9zYWthLmpwIiwic2V0dHN1Lm9zYWthLmpwIiwic2hpam9uYXdhdGUub3Nha2EuanAiLCJzaGltYW1vdG8ub3Nha2EuanAiLCJzdWl0YS5vc2FrYS5qcCIsInRhZGFva2Eub3Nha2EuanAiLCJ0YWlzaGkub3Nha2EuanAiLCJ0YWppcmkub3Nh'@;
put 'a2EuanAiLCJ0YWthaXNoaS5vc2FrYS5qcCIsInRha2F0c3VraS5vc2FrYS5qcCIsInRvbmRhYmF5YXNoaS5vc2FrYS5qcCIsInRveW9uYWthLm9zYWthLmpwIiwidG95b25vLm9zYWthLmpwIiwieWFvLm9zYWthLmpwIiwiYXJpYWtlLnNhZ2EuanAiLCJhcml0YS5zYWdhLmpwIiwiZnVrdWRv'@;
put 'bWkuc2FnYS5qcCIsImdlbmthaS5zYWdhLmpwIiwiaGFtYXRhbWEuc2FnYS5qcCIsImhpemVuLnNhZ2EuanAiLCJpbWFyaS5zYWdhLmpwIiwia2FtaW1pbmUuc2FnYS5qcCIsImthbnpha2kuc2FnYS5qcCIsImthcmF0c3Uuc2FnYS5qcCIsImthc2hpbWEuc2FnYS5qcCIsImtpdGFnYXRhLnNh'@;
put 'Z2EuanAiLCJraXRhaGF0YS5zYWdhLmpwIiwia2l5YW1hLnNhZ2EuanAiLCJrb3Vob2t1LnNhZ2EuanAiLCJreXVyYWdpLnNhZ2EuanAiLCJuaXNoaWFyaXRhLnNhZ2EuanAiLCJvZ2kuc2FnYS5qcCIsIm9tYWNoaS5zYWdhLmpwIiwib3VjaGkuc2FnYS5qcCIsInNhZ2Euc2FnYS5qcCIsInNo'@;
put 'aXJvaXNoaS5zYWdhLmpwIiwidGFrdS5zYWdhLmpwIiwidGFyYS5zYWdhLmpwIiwidG9zdS5zYWdhLmpwIiwieW9zaGlub2dhcmkuc2FnYS5qcCIsImFyYWthd2Euc2FpdGFtYS5qcCIsImFzYWthLnNhaXRhbWEuanAiLCJjaGljaGlidS5zYWl0YW1hLmpwIiwiZnVqaW1pLnNhaXRhbWEuanAi'@;
put 'LCJmdWppbWluby5zYWl0YW1hLmpwIiwiZnVrYXlhLnNhaXRhbWEuanAiLCJoYW5uby5zYWl0YW1hLmpwIiwiaGFueXUuc2FpdGFtYS5qcCIsImhhc3VkYS5zYWl0YW1hLmpwIiwiaGF0b2dheWEuc2FpdGFtYS5qcCIsImhhdG95YW1hLnNhaXRhbWEuanAiLCJoaWRha2Euc2FpdGFtYS5qcCIs'@;
put 'ImhpZ2FzaGljaGljaGlidS5zYWl0YW1hLmpwIiwiaGlnYXNoaW1hdHN1eWFtYS5zYWl0YW1hLmpwIiwiaG9uam8uc2FpdGFtYS5qcCIsImluYS5zYWl0YW1hLmpwIiwiaXJ1bWEuc2FpdGFtYS5qcCIsIml3YXRzdWtpLnNhaXRhbWEuanAiLCJrYW1paXp1bWkuc2FpdGFtYS5qcCIsImthbWlr'@;
put 'YXdhLnNhaXRhbWEuanAiLCJrYW1pc2F0by5zYWl0YW1hLmpwIiwia2FzdWthYmUuc2FpdGFtYS5qcCIsImthd2Fnb2Uuc2FpdGFtYS5qcCIsImthd2FndWNoaS5zYWl0YW1hLmpwIiwia2F3YWppbWEuc2FpdGFtYS5qcCIsImthem8uc2FpdGFtYS5qcCIsImtpdGFtb3RvLnNhaXRhbWEuanAi'@;
put 'LCJrb3NoaWdheWEuc2FpdGFtYS5qcCIsImtvdW5vc3Uuc2FpdGFtYS5qcCIsImt1a2kuc2FpdGFtYS5qcCIsImt1bWFnYXlhLnNhaXRhbWEuanAiLCJtYXRzdWJ1c2hpLnNhaXRhbWEuanAiLCJtaW5hbm8uc2FpdGFtYS5qcCIsIm1pc2F0by5zYWl0YW1hLmpwIiwibWl5YXNoaXJvLnNhaXRh'@;
put 'bWEuanAiLCJtaXlvc2hpLnNhaXRhbWEuanAiLCJtb3JveWFtYS5zYWl0YW1hLmpwIiwibmFnYXRvcm8uc2FpdGFtYS5qcCIsIm5hbWVnYXdhLnNhaXRhbWEuanAiLCJuaWl6YS5zYWl0YW1hLmpwIiwib2dhbm8uc2FpdGFtYS5qcCIsIm9nYXdhLnNhaXRhbWEuanAiLCJvZ29zZS5zYWl0YW1h'@;
put 'LmpwIiwib2tlZ2F3YS5zYWl0YW1hLmpwIiwib21peWEuc2FpdGFtYS5qcCIsIm90YWtpLnNhaXRhbWEuanAiLCJyYW56YW4uc2FpdGFtYS5qcCIsInJ5b2thbWkuc2FpdGFtYS5qcCIsInNhaXRhbWEuc2FpdGFtYS5qcCIsInNha2Fkby5zYWl0YW1hLmpwIiwic2F0dGUuc2FpdGFtYS5qcCIs'@;
put 'InNheWFtYS5zYWl0YW1hLmpwIiwic2hpa2kuc2FpdGFtYS5qcCIsInNoaXJhb2thLnNhaXRhbWEuanAiLCJzb2thLnNhaXRhbWEuanAiLCJzdWdpdG8uc2FpdGFtYS5qcCIsInRvZGEuc2FpdGFtYS5qcCIsInRva2lnYXdhLnNhaXRhbWEuanAiLCJ0b2tvcm96YXdhLnNhaXRhbWEuanAiLCJ0'@;
put 'c3VydWdhc2hpbWEuc2FpdGFtYS5qcCIsInVyYXdhLnNhaXRhbWEuanAiLCJ3YXJhYmkuc2FpdGFtYS5qcCIsInlhc2hpby5zYWl0YW1hLmpwIiwieW9rb3plLnNhaXRhbWEuanAiLCJ5b25vLnNhaXRhbWEuanAiLCJ5b3JpaS5zYWl0YW1hLmpwIiwieW9zaGlkYS5zYWl0YW1hLmpwIiwieW9z'@;
put 'aGlrYXdhLnNhaXRhbWEuanAiLCJ5b3NoaW1pLnNhaXRhbWEuanAiLCJhaXNoby5zaGlnYS5qcCIsImdhbW8uc2hpZ2EuanAiLCJoaWdhc2hpb21pLnNoaWdhLmpwIiwiaGlrb25lLnNoaWdhLmpwIiwia29rYS5zaGlnYS5qcCIsImtvbmFuLnNoaWdhLmpwIiwia29zZWkuc2hpZ2EuanAiLCJr'@;
put 'b3RvLnNoaWdhLmpwIiwia3VzYXRzdS5zaGlnYS5qcCIsIm1haWJhcmEuc2hpZ2EuanAiLCJtb3JpeWFtYS5zaGlnYS5qcCIsIm5hZ2FoYW1hLnNoaWdhLmpwIiwibmlzaGlhemFpLnNoaWdhLmpwIiwibm90b2dhd2Euc2hpZ2EuanAiLCJvbWloYWNoaW1hbi5zaGlnYS5qcCIsIm90c3Uuc2hp'@;
put 'Z2EuanAiLCJyaXR0by5zaGlnYS5qcCIsInJ5dW9oLnNoaWdhLmpwIiwidGFrYXNoaW1hLnNoaWdhLmpwIiwidGFrYXRzdWtpLnNoaWdhLmpwIiwidG9yYWhpbWUuc2hpZ2EuanAiLCJ0b3lvc2F0by5zaGlnYS5qcCIsInlhc3Uuc2hpZ2EuanAiLCJha2FnaS5zaGltYW5lLmpwIiwiYW1hLnNo'@;
put 'aW1hbmUuanAiLCJnb3RzdS5zaGltYW5lLmpwIiwiaGFtYWRhLnNoaW1hbmUuanAiLCJoaWdhc2hpaXp1bW8uc2hpbWFuZS5qcCIsImhpa2F3YS5zaGltYW5lLmpwIiwiaGlraW1pLnNoaW1hbmUuanAiLCJpenVtby5zaGltYW5lLmpwIiwia2FraW5va2kuc2hpbWFuZS5qcCIsIm1hc3VkYS5z'@;
put 'aGltYW5lLmpwIiwibWF0c3VlLnNoaW1hbmUuanAiLCJtaXNhdG8uc2hpbWFuZS5qcCIsIm5pc2hpbm9zaGltYS5zaGltYW5lLmpwIiwib2hkYS5zaGltYW5lLmpwIiwib2tpbm9zaGltYS5zaGltYW5lLmpwIiwib2t1aXp1bW8uc2hpbWFuZS5qcCIsInNoaW1hbmUuc2hpbWFuZS5qcCIsInRh'@;
put 'bWF5dS5zaGltYW5lLmpwIiwidHN1d2Fuby5zaGltYW5lLmpwIiwidW5uYW4uc2hpbWFuZS5qcCIsInlha3Vtby5zaGltYW5lLmpwIiwieWFzdWdpLnNoaW1hbmUuanAiLCJ5YXRzdWthLnNoaW1hbmUuanAiLCJhcmFpLnNoaXp1b2thLmpwIiwiYXRhbWkuc2hpenVva2EuanAiLCJmdWppLnNo'@;
put 'aXp1b2thLmpwIiwiZnVqaWVkYS5zaGl6dW9rYS5qcCIsImZ1amlrYXdhLnNoaXp1b2thLmpwIiwiZnVqaW5vbWl5YS5zaGl6dW9rYS5qcCIsImZ1a3Vyb2kuc2hpenVva2EuanAiLCJnb3RlbWJhLnNoaXp1b2thLmpwIiwiaGFpYmFyYS5zaGl6dW9rYS5qcCIsImhhbWFtYXRzdS5zaGl6dW9r'@;
put 'YS5qcCIsImhpZ2FzaGlpenUuc2hpenVva2EuanAiLCJpdG8uc2hpenVva2EuanAiLCJpd2F0YS5zaGl6dW9rYS5qcCIsIml6dS5zaGl6dW9rYS5qcCIsIml6dW5va3VuaS5zaGl6dW9rYS5qcCIsImtha2VnYXdhLnNoaXp1b2thLmpwIiwia2FubmFtaS5zaGl6dW9rYS5qcCIsImthd2FuZWhv'@;
put 'bi5zaGl6dW9rYS5qcCIsImthd2F6dS5zaGl6dW9rYS5qcCIsImtpa3VnYXdhLnNoaXp1b2thLmpwIiwia29zYWkuc2hpenVva2EuanAiLCJtYWtpbm9oYXJhLnNoaXp1b2thLmpwIiwibWF0c3V6YWtpLnNoaXp1b2thLmpwIiwibWluYW1paXp1LnNoaXp1b2thLmpwIiwibWlzaGltYS5zaGl6'@;
put 'dW9rYS5qcCIsIm1vcmltYWNoaS5zaGl6dW9rYS5qcCIsIm5pc2hpaXp1LnNoaXp1b2thLmpwIiwibnVtYXp1LnNoaXp1b2thLmpwIiwib21hZXpha2kuc2hpenVva2EuanAiLCJzaGltYWRhLnNoaXp1b2thLmpwIiwic2hpbWl6dS5zaGl6dW9rYS5qcCIsInNoaW1vZGEuc2hpenVva2EuanAi'@;
put 'LCJzaGl6dW9rYS5zaGl6dW9rYS5qcCIsInN1c29uby5zaGl6dW9rYS5qcCIsInlhaXp1LnNoaXp1b2thLmpwIiwieW9zaGlkYS5zaGl6dW9rYS5qcCIsImFzaGlrYWdhLnRvY2hpZ2kuanAiLCJiYXRvLnRvY2hpZ2kuanAiLCJoYWdhLnRvY2hpZ2kuanAiLCJpY2hpa2FpLnRvY2hpZ2kuanAi'@;
put 'LCJpd2FmdW5lLnRvY2hpZ2kuanAiLCJrYW1pbm9rYXdhLnRvY2hpZ2kuanAiLCJrYW51bWEudG9jaGlnaS5qcCIsImthcmFzdXlhbWEudG9jaGlnaS5qcCIsImt1cm9pc28udG9jaGlnaS5qcCIsIm1hc2hpa28udG9jaGlnaS5qcCIsIm1pYnUudG9jaGlnaS5qcCIsIm1va2EudG9jaGlnaS5q'@;
put 'cCIsIm1vdGVnaS50b2NoaWdpLmpwIiwibmFzdS50b2NoaWdpLmpwIiwibmFzdXNoaW9iYXJhLnRvY2hpZ2kuanAiLCJuaWtrby50b2NoaWdpLmpwIiwibmlzaGlrYXRhLnRvY2hpZ2kuanAiLCJub2dpLnRvY2hpZ2kuanAiLCJvaGlyYS50b2NoaWdpLmpwIiwib2h0YXdhcmEudG9jaGlnaS5q'@;
put 'cCIsIm95YW1hLnRvY2hpZ2kuanAiLCJzYWt1cmEudG9jaGlnaS5qcCIsInNhbm8udG9jaGlnaS5qcCIsInNoaW1vdHN1a2UudG9jaGlnaS5qcCIsInNoaW95YS50b2NoaWdpLmpwIiwidGFrYW5lemF3YS50b2NoaWdpLmpwIiwidG9jaGlnaS50b2NoaWdpLmpwIiwidHN1Z2EudG9jaGlnaS5q'@;
put 'cCIsInVqaWllLnRvY2hpZ2kuanAiLCJ1dHN1bm9taXlhLnRvY2hpZ2kuanAiLCJ5YWl0YS50b2NoaWdpLmpwIiwiYWl6dW1pLnRva3VzaGltYS5qcCIsImFuYW4udG9rdXNoaW1hLmpwIiwiaWNoaWJhLnRva3VzaGltYS5qcCIsIml0YW5vLnRva3VzaGltYS5qcCIsImthaW5hbi50b2t1c2hp'@;
put 'bWEuanAiLCJrb21hdHN1c2hpbWEudG9rdXNoaW1hLmpwIiwibWF0c3VzaGlnZS50b2t1c2hpbWEuanAiLCJtaW1hLnRva3VzaGltYS5qcCIsIm1pbmFtaS50b2t1c2hpbWEuanAiLCJtaXlvc2hpLnRva3VzaGltYS5qcCIsIm11Z2kudG9rdXNoaW1hLmpwIiwibmFrYWdhd2EudG9rdXNoaW1h'@;
put 'LmpwIiwibmFydXRvLnRva3VzaGltYS5qcCIsInNhbmFnb2NoaS50b2t1c2hpbWEuanAiLCJzaGlzaGlrdWkudG9rdXNoaW1hLmpwIiwidG9rdXNoaW1hLnRva3VzaGltYS5qcCIsIndhamlraS50b2t1c2hpbWEuanAiLCJhZGFjaGkudG9reW8uanAiLCJha2lydW5vLnRva3lvLmpwIiwiYWtp'@;
put 'c2hpbWEudG9reW8uanAiLCJhb2dhc2hpbWEudG9reW8uanAiLCJhcmFrYXdhLnRva3lvLmpwIiwiYnVua3lvLnRva3lvLmpwIiwiY2hpeW9kYS50b2t5by5qcCIsImNob2Z1LnRva3lvLmpwIiwiY2h1by50b2t5by5qcCIsImVkb2dhd2EudG9reW8uanAiLCJmdWNodS50b2t5by5qcCIsImZ1'@;
put 'c3NhLnRva3lvLmpwIiwiaGFjaGlqby50b2t5by5qcCIsImhhY2hpb2ppLnRva3lvLmpwIiwiaGFtdXJhLnRva3lvLmpwIiwiaGlnYXNoaWt1cnVtZS50b2t5by5qcCIsImhpZ2FzaGltdXJheWFtYS50b2t5by5qcCIsImhpZ2FzaGl5YW1hdG8udG9reW8uanAiLCJoaW5vLnRva3lvLmpwIiwi'@;
put 'aGlub2RlLnRva3lvLmpwIiwiaGlub2hhcmEudG9reW8uanAiLCJpbmFnaS50b2t5by5qcCIsIml0YWJhc2hpLnRva3lvLmpwIiwia2F0c3VzaGlrYS50b2t5by5qcCIsImtpdGEudG9reW8uanAiLCJraXlvc2UudG9reW8uanAiLCJrb2RhaXJhLnRva3lvLmpwIiwia29nYW5laS50b2t5by5q'@;
put 'cCIsImtva3VidW5qaS50b2t5by5qcCIsImtvbWFlLnRva3lvLmpwIiwia290by50b2t5by5qcCIsImtvdXp1c2hpbWEudG9reW8uanAiLCJrdW5pdGFjaGkudG9reW8uanAiLCJtYWNoaWRhLnRva3lvLmpwIiwibWVndXJvLnRva3lvLmpwIiwibWluYXRvLnRva3lvLmpwIiwibWl0YWthLnRv'@;
put 'a3lvLmpwIiwibWl6dWhvLnRva3lvLmpwIiwibXVzYXNoaW11cmF5YW1hLnRva3lvLmpwIiwibXVzYXNoaW5vLnRva3lvLmpwIiwibmFrYW5vLnRva3lvLmpwIiwibmVyaW1hLnRva3lvLmpwIiwib2dhc2F3YXJhLnRva3lvLmpwIiwib2t1dGFtYS50b2t5by5qcCIsIm9tZS50b2t5by5qcCIs'@;
put 'Im9zaGltYS50b2t5by5qcCIsIm90YS50b2t5by5qcCIsInNldGFnYXlhLnRva3lvLmpwIiwic2hpYnV5YS50b2t5by5qcCIsInNoaW5hZ2F3YS50b2t5by5qcCIsInNoaW5qdWt1LnRva3lvLmpwIiwic3VnaW5hbWkudG9reW8uanAiLCJzdW1pZGEudG9reW8uanAiLCJ0YWNoaWthd2EudG9r'@;
put 'eW8uanAiLCJ0YWl0by50b2t5by5qcCIsInRhbWEudG9reW8uanAiLCJ0b3NoaW1hLnRva3lvLmpwIiwiY2hpenUudG90dG9yaS5qcCIsImhpbm8udG90dG9yaS5qcCIsImthd2FoYXJhLnRvdHRvcmkuanAiLCJrb2dlLnRvdHRvcmkuanAiLCJrb3RvdXJhLnRvdHRvcmkuanAiLCJtaXNhc2Eu'@;
put 'dG90dG9yaS5qcCIsIm5hbmJ1LnRvdHRvcmkuanAiLCJuaWNoaW5hbi50b3R0b3JpLmpwIiwic2FrYWltaW5hdG8udG90dG9yaS5qcCIsInRvdHRvcmkudG90dG9yaS5qcCIsIndha2FzYS50b3R0b3JpLmpwIiwieWF6dS50b3R0b3JpLmpwIiwieW9uYWdvLnRvdHRvcmkuanAiLCJhc2FoaS50'@;
put 'b3lhbWEuanAiLCJmdWNodS50b3lhbWEuanAiLCJmdWt1bWl0c3UudG95YW1hLmpwIiwiZnVuYWhhc2hpLnRveWFtYS5qcCIsImhpbWkudG95YW1hLmpwIiwiaW1penUudG95YW1hLmpwIiwiaW5hbWkudG95YW1hLmpwIiwiam9oYW5hLnRveWFtYS5qcCIsImthbWlpY2hpLnRveWFtYS5qcCIs'@;
put 'Imt1cm9iZS50b3lhbWEuanAiLCJuYWthbmlpa2F3YS50b3lhbWEuanAiLCJuYW1lcmlrYXdhLnRveWFtYS5qcCIsIm5hbnRvLnRveWFtYS5qcCIsIm55dXplbi50b3lhbWEuanAiLCJveWFiZS50b3lhbWEuanAiLCJ0YWlyYS50b3lhbWEuanAiLCJ0YWthb2thLnRveWFtYS5qcCIsInRhdGV5'@;
put 'YW1hLnRveWFtYS5qcCIsInRvZ2EudG95YW1hLmpwIiwidG9uYW1pLnRveWFtYS5qcCIsInRveWFtYS50b3lhbWEuanAiLCJ1bmF6dWtpLnRveWFtYS5qcCIsInVvenUudG95YW1hLmpwIiwieWFtYWRhLnRveWFtYS5qcCIsImFyaWRhLndha2F5YW1hLmpwIiwiYXJpZGFnYXdhLndha2F5YW1h'@;
put 'LmpwIiwiZ29iby53YWtheWFtYS5qcCIsImhhc2hpbW90by53YWtheWFtYS5qcCIsImhpZGFrYS53YWtheWFtYS5qcCIsImhpcm9nYXdhLndha2F5YW1hLmpwIiwiaW5hbWkud2FrYXlhbWEuanAiLCJpd2FkZS53YWtheWFtYS5qcCIsImthaW5hbi53YWtheWFtYS5qcCIsImthbWl0b25kYS53'@;
put 'YWtheWFtYS5qcCIsImthdHN1cmFnaS53YWtheWFtYS5qcCIsImtpbWluby53YWtheWFtYS5qcCIsImtpbm9rYXdhLndha2F5YW1hLmpwIiwia2l0YXlhbWEud2FrYXlhbWEuanAiLCJrb3lhLndha2F5YW1hLmpwIiwia296YS53YWtheWFtYS5qcCIsImtvemFnYXdhLndha2F5YW1hLmpwIiwi'@;
put 'a3Vkb3lhbWEud2FrYXlhbWEuanAiLCJrdXNoaW1vdG8ud2FrYXlhbWEuanAiLCJtaWhhbWEud2FrYXlhbWEuanAiLCJtaXNhdG8ud2FrYXlhbWEuanAiLCJuYWNoaWthdHN1dXJhLndha2F5YW1hLmpwIiwic2hpbmd1Lndha2F5YW1hLmpwIiwic2hpcmFoYW1hLndha2F5YW1hLmpwIiwidGFp'@;
put 'amkud2FrYXlhbWEuanAiLCJ0YW5hYmUud2FrYXlhbWEuanAiLCJ3YWtheWFtYS53YWtheWFtYS5qcCIsInl1YXNhLndha2F5YW1hLmpwIiwieXVyYS53YWtheWFtYS5qcCIsImFzYWhpLnlhbWFnYXRhLmpwIiwiZnVuYWdhdGEueWFtYWdhdGEuanAiLCJoaWdhc2hpbmUueWFtYWdhdGEuanAi'@;
put 'LCJpaWRlLnlhbWFnYXRhLmpwIiwia2Fob2t1LnlhbWFnYXRhLmpwIiwia2FtaW5veWFtYS55YW1hZ2F0YS5qcCIsImthbmV5YW1hLnlhbWFnYXRhLmpwIiwia2F3YW5pc2hpLnlhbWFnYXRhLmpwIiwibWFtdXJvZ2F3YS55YW1hZ2F0YS5qcCIsIm1pa2F3YS55YW1hZ2F0YS5qcCIsIm11cmF5'@;
put 'YW1hLnlhbWFnYXRhLmpwIiwibmFnYWkueWFtYWdhdGEuanAiLCJuYWtheWFtYS55YW1hZ2F0YS5qcCIsIm5hbnlvLnlhbWFnYXRhLmpwIiwibmlzaGlrYXdhLnlhbWFnYXRhLmpwIiwib2JhbmF6YXdhLnlhbWFnYXRhLmpwIiwib2UueWFtYWdhdGEuanAiLCJvZ3VuaS55YW1hZ2F0YS5qcCIs'@;
put 'Im9oa3VyYS55YW1hZ2F0YS5qcCIsIm9pc2hpZGEueWFtYWdhdGEuanAiLCJzYWdhZS55YW1hZ2F0YS5qcCIsInNha2F0YS55YW1hZ2F0YS5qcCIsInNha2VnYXdhLnlhbWFnYXRhLmpwIiwic2hpbmpvLnlhbWFnYXRhLmpwIiwic2hpcmF0YWthLnlhbWFnYXRhLmpwIiwic2hvbmFpLnlhbWFn'@;
put 'YXRhLmpwIiwidGFrYWhhdGEueWFtYWdhdGEuanAiLCJ0ZW5kby55YW1hZ2F0YS5qcCIsInRvemF3YS55YW1hZ2F0YS5qcCIsInRzdXJ1b2thLnlhbWFnYXRhLmpwIiwieWFtYWdhdGEueWFtYWdhdGEuanAiLCJ5YW1hbm9iZS55YW1hZ2F0YS5qcCIsInlvbmV6YXdhLnlhbWFnYXRhLmpwIiwi'@;
put 'eXV6YS55YW1hZ2F0YS5qcCIsImFidS55YW1hZ3VjaGkuanAiLCJoYWdpLnlhbWFndWNoaS5qcCIsImhpa2FyaS55YW1hZ3VjaGkuanAiLCJob2Z1LnlhbWFndWNoaS5qcCIsIml3YWt1bmkueWFtYWd1Y2hpLmpwIiwia3VkYW1hdHN1LnlhbWFndWNoaS5qcCIsIm1pdG91LnlhbWFndWNoaS5q'@;
put 'cCIsIm5hZ2F0by55YW1hZ3VjaGkuanAiLCJvc2hpbWEueWFtYWd1Y2hpLmpwIiwic2hpbW9ub3Nla2kueWFtYWd1Y2hpLmpwIiwic2h1bmFuLnlhbWFndWNoaS5qcCIsInRhYnVzZS55YW1hZ3VjaGkuanAiLCJ0b2t1eWFtYS55YW1hZ3VjaGkuanAiLCJ0b3lvdGEueWFtYWd1Y2hpLmpwIiwi'@;
put 'dWJlLnlhbWFndWNoaS5qcCIsInl1dS55YW1hZ3VjaGkuanAiLCJjaHVvLnlhbWFuYXNoaS5qcCIsImRvc2hpLnlhbWFuYXNoaS5qcCIsImZ1ZWZ1a2kueWFtYW5hc2hpLmpwIiwiZnVqaWthd2EueWFtYW5hc2hpLmpwIiwiZnVqaWthd2FndWNoaWtvLnlhbWFuYXNoaS5qcCIsImZ1aml5b3No'@;
put 'aWRhLnlhbWFuYXNoaS5qcCIsImhheWFrYXdhLnlhbWFuYXNoaS5qcCIsImhva3V0by55YW1hbmFzaGkuanAiLCJpY2hpa2F3YW1pc2F0by55YW1hbmFzaGkuanAiLCJrYWkueWFtYW5hc2hpLmpwIiwia29mdS55YW1hbmFzaGkuanAiLCJrb3NodS55YW1hbmFzaGkuanAiLCJrb3N1Z2UueWFt'@;
put 'YW5hc2hpLmpwIiwibWluYW1pLWFscHMueWFtYW5hc2hpLmpwIiwibWlub2J1LnlhbWFuYXNoaS5qcCIsIm5ha2FtaWNoaS55YW1hbmFzaGkuanAiLCJuYW5idS55YW1hbmFzaGkuanAiLCJuYXJ1c2F3YS55YW1hbmFzaGkuanAiLCJuaXJhc2FraS55YW1hbmFzaGkuanAiLCJuaXNoaWthdHN1'@;
put 'cmEueWFtYW5hc2hpLmpwIiwib3NoaW5vLnlhbWFuYXNoaS5qcCIsIm90c3VraS55YW1hbmFzaGkuanAiLCJzaG93YS55YW1hbmFzaGkuanAiLCJ0YWJheWFtYS55YW1hbmFzaGkuanAiLCJ0c3VydS55YW1hbmFzaGkuanAiLCJ1ZW5vaGFyYS55YW1hbmFzaGkuanAiLCJ5YW1hbmFrYWtvLnlh'@;
put 'bWFuYXNoaS5qcCIsInlhbWFuYXNoaS55YW1hbmFzaGkuanAiLCJrZSIsImFjLmtlIiwiY28ua2UiLCJnby5rZSIsImluZm8ua2UiLCJtZS5rZSIsIm1vYmkua2UiLCJuZS5rZSIsIm9yLmtlIiwic2Mua2UiLCJrZyIsIm9yZy5rZyIsIm5ldC5rZyIsImNvbS5rZyIsImVkdS5rZyIsImdvdi5r'@;
put 'ZyIsIm1pbC5rZyIsIioua2giLCJraSIsImVkdS5raSIsImJpei5raSIsIm5ldC5raSIsIm9yZy5raSIsImdvdi5raSIsImluZm8ua2kiLCJjb20ua2kiLCJrbSIsIm9yZy5rbSIsIm5vbS5rbSIsImdvdi5rbSIsInByZC5rbSIsInRtLmttIiwiZWR1LmttIiwibWlsLmttIiwiYXNzLmttIiwi'@;
put 'Y29tLmttIiwiY29vcC5rbSIsImFzc28ua20iLCJwcmVzc2Uua20iLCJtZWRlY2luLmttIiwibm90YWlyZXMua20iLCJwaGFybWFjaWVucy5rbSIsInZldGVyaW5haXJlLmttIiwiZ291di5rbSIsImtuIiwibmV0LmtuIiwib3JnLmtuIiwiZWR1LmtuIiwiZ292LmtuIiwia3AiLCJjb20ua3Ai'@;
put 'LCJlZHUua3AiLCJnb3Yua3AiLCJvcmcua3AiLCJyZXAua3AiLCJ0cmEua3AiLCJrciIsImFjLmtyIiwiY28ua3IiLCJlcy5rciIsImdvLmtyIiwiaHMua3IiLCJrZy5rciIsIm1pbC5rciIsIm1zLmtyIiwibmUua3IiLCJvci5rciIsInBlLmtyIiwicmUua3IiLCJzYy5rciIsImJ1c2FuLmty'@;
put 'IiwiY2h1bmdidWsua3IiLCJjaHVuZ25hbS5rciIsImRhZWd1LmtyIiwiZGFlamVvbi5rciIsImdhbmd3b24ua3IiLCJnd2FuZ2p1LmtyIiwiZ3llb25nYnVrLmtyIiwiZ3llb25nZ2kua3IiLCJneWVvbmduYW0ua3IiLCJpbmNoZW9uLmtyIiwiamVqdS5rciIsImplb25idWsua3IiLCJqZW9u'@;
put 'bmFtLmtyIiwic2VvdWwua3IiLCJ1bHNhbi5rciIsImt3IiwiY29tLmt3IiwiZWR1Lmt3IiwiZW1iLmt3IiwiZ292Lmt3IiwiaW5kLmt3IiwibmV0Lmt3Iiwib3JnLmt3Iiwia3kiLCJjb20ua3kiLCJlZHUua3kiLCJuZXQua3kiLCJvcmcua3kiLCJreiIsIm9yZy5reiIsImVkdS5reiIsIm5l'@;
put 'dC5reiIsImdvdi5reiIsIm1pbC5reiIsImNvbS5reiIsImxhIiwiaW50LmxhIiwibmV0LmxhIiwiaW5mby5sYSIsImVkdS5sYSIsImdvdi5sYSIsInBlci5sYSIsImNvbS5sYSIsIm9yZy5sYSIsImxiIiwiY29tLmxiIiwiZWR1LmxiIiwiZ292LmxiIiwibmV0LmxiIiwib3JnLmxiIiwibGMi'@;
put 'LCJjb20ubGMiLCJuZXQubGMiLCJjby5sYyIsIm9yZy5sYyIsImVkdS5sYyIsImdvdi5sYyIsImxpIiwibGsiLCJnb3YubGsiLCJzY2gubGsiLCJuZXQubGsiLCJpbnQubGsiLCJjb20ubGsiLCJvcmcubGsiLCJlZHUubGsiLCJuZ28ubGsiLCJzb2MubGsiLCJ3ZWIubGsiLCJsdGQubGsiLCJh'@;
put 'c3NuLmxrIiwiZ3JwLmxrIiwiaG90ZWwubGsiLCJhYy5sayIsImxyIiwiY29tLmxyIiwiZWR1LmxyIiwiZ292LmxyIiwib3JnLmxyIiwibmV0LmxyIiwibHMiLCJhYy5scyIsImJpei5scyIsImNvLmxzIiwiZWR1LmxzIiwiZ292LmxzIiwiaW5mby5scyIsIm5ldC5scyIsIm9yZy5scyIsInNj'@;
put 'LmxzIiwibHQiLCJnb3YubHQiLCJsdSIsImx2IiwiY29tLmx2IiwiZWR1Lmx2IiwiZ292Lmx2Iiwib3JnLmx2IiwibWlsLmx2IiwiaWQubHYiLCJuZXQubHYiLCJhc24ubHYiLCJjb25mLmx2IiwibHkiLCJjb20ubHkiLCJuZXQubHkiLCJnb3YubHkiLCJwbGMubHkiLCJlZHUubHkiLCJzY2gu'@;
put 'bHkiLCJtZWQubHkiLCJvcmcubHkiLCJpZC5seSIsIm1hIiwiY28ubWEiLCJuZXQubWEiLCJnb3YubWEiLCJvcmcubWEiLCJhYy5tYSIsInByZXNzLm1hIiwibWMiLCJ0bS5tYyIsImFzc28ubWMiLCJtZCIsIm1lIiwiY28ubWUiLCJuZXQubWUiLCJvcmcubWUiLCJlZHUubWUiLCJhYy5tZSIs'@;
put 'Imdvdi5tZSIsIml0cy5tZSIsInByaXYubWUiLCJtZyIsIm9yZy5tZyIsIm5vbS5tZyIsImdvdi5tZyIsInByZC5tZyIsInRtLm1nIiwiZWR1Lm1nIiwibWlsLm1nIiwiY29tLm1nIiwiY28ubWciLCJtaCIsIm1pbCIsIm1rIiwiY29tLm1rIiwib3JnLm1rIiwibmV0Lm1rIiwiZWR1Lm1rIiwi'@;
put 'Z292Lm1rIiwiaW5mLm1rIiwibmFtZS5tayIsIm1sIiwiY29tLm1sIiwiZWR1Lm1sIiwiZ291di5tbCIsImdvdi5tbCIsIm5ldC5tbCIsIm9yZy5tbCIsInByZXNzZS5tbCIsIioubW0iLCJtbiIsImdvdi5tbiIsImVkdS5tbiIsIm9yZy5tbiIsIm1vIiwiY29tLm1vIiwibmV0Lm1vIiwib3Jn'@;
put 'Lm1vIiwiZWR1Lm1vIiwiZ292Lm1vIiwibW9iaSIsIm1wIiwibXEiLCJtciIsImdvdi5tciIsIm1zIiwiY29tLm1zIiwiZWR1Lm1zIiwiZ292Lm1zIiwibmV0Lm1zIiwib3JnLm1zIiwibXQiLCJjb20ubXQiLCJlZHUubXQiLCJuZXQubXQiLCJvcmcubXQiLCJtdSIsImNvbS5tdSIsIm5ldC5t'@;
put 'dSIsIm9yZy5tdSIsImdvdi5tdSIsImFjLm11IiwiY28ubXUiLCJvci5tdSIsIm11c2V1bSIsImFjYWRlbXkubXVzZXVtIiwiYWdyaWN1bHR1cmUubXVzZXVtIiwiYWlyLm11c2V1bSIsImFpcmd1YXJkLm11c2V1bSIsImFsYWJhbWEubXVzZXVtIiwiYWxhc2thLm11c2V1bSIsImFtYmVyLm11'@;
put 'c2V1bSIsImFtYnVsYW5jZS5tdXNldW0iLCJhbWVyaWNhbi5tdXNldW0iLCJhbWVyaWNhbmEubXVzZXVtIiwiYW1lcmljYW5hbnRpcXVlcy5tdXNldW0iLCJhbWVyaWNhbmFydC5tdXNldW0iLCJhbXN0ZXJkYW0ubXVzZXVtIiwiYW5kLm11c2V1bSIsImFubmVmcmFuay5tdXNldW0iLCJhbnRo'@;
put 'cm8ubXVzZXVtIiwiYW50aHJvcG9sb2d5Lm11c2V1bSIsImFudGlxdWVzLm11c2V1bSIsImFxdWFyaXVtLm11c2V1bSIsImFyYm9yZXR1bS5tdXNldW0iLCJhcmNoYWVvbG9naWNhbC5tdXNldW0iLCJhcmNoYWVvbG9neS5tdXNldW0iLCJhcmNoaXRlY3R1cmUubXVzZXVtIiwiYXJ0Lm11c2V1'@;
put 'bSIsImFydGFuZGRlc2lnbi5tdXNldW0iLCJhcnRjZW50ZXIubXVzZXVtIiwiYXJ0ZGVjby5tdXNldW0iLCJhcnRlZHVjYXRpb24ubXVzZXVtIiwiYXJ0Z2FsbGVyeS5tdXNldW0iLCJhcnRzLm11c2V1bSIsImFydHNhbmRjcmFmdHMubXVzZXVtIiwiYXNtYXRhcnQubXVzZXVtIiwiYXNzYXNz'@;
put 'aW5hdGlvbi5tdXNldW0iLCJhc3Npc2kubXVzZXVtIiwiYXNzb2NpYXRpb24ubXVzZXVtIiwiYXN0cm9ub215Lm11c2V1bSIsImF0bGFudGEubXVzZXVtIiwiYXVzdGluLm11c2V1bSIsImF1c3RyYWxpYS5tdXNldW0iLCJhdXRvbW90aXZlLm11c2V1bSIsImF2aWF0aW9uLm11c2V1bSIsImF4'@;
put 'aXMubXVzZXVtIiwiYmFkYWpvei5tdXNldW0iLCJiYWdoZGFkLm11c2V1bSIsImJhaG4ubXVzZXVtIiwiYmFsZS5tdXNldW0iLCJiYWx0aW1vcmUubXVzZXVtIiwiYmFyY2Vsb25hLm11c2V1bSIsImJhc2ViYWxsLm11c2V1bSIsImJhc2VsLm11c2V1bSIsImJhdGhzLm11c2V1bSIsImJhdWVy'@;
put 'bi5tdXNldW0iLCJiZWF1eGFydHMubXVzZXVtIiwiYmVlbGRlbmdlbHVpZC5tdXNldW0iLCJiZWxsZXZ1ZS5tdXNldW0iLCJiZXJnYmF1Lm11c2V1bSIsImJlcmtlbGV5Lm11c2V1bSIsImJlcmxpbi5tdXNldW0iLCJiZXJuLm11c2V1bSIsImJpYmxlLm11c2V1bSIsImJpbGJhby5tdXNldW0i'@;
put 'LCJiaWxsLm11c2V1bSIsImJpcmRhcnQubXVzZXVtIiwiYmlydGhwbGFjZS5tdXNldW0iLCJib25uLm11c2V1bSIsImJvc3Rvbi5tdXNldW0iLCJib3RhbmljYWwubXVzZXVtIiwiYm90YW5pY2FsZ2FyZGVuLm11c2V1bSIsImJvdGFuaWNnYXJkZW4ubXVzZXVtIiwiYm90YW55Lm11c2V1bSIs'@;
put 'ImJyYW5keXdpbmV2YWxsZXkubXVzZXVtIiwiYnJhc2lsLm11c2V1bSIsImJyaXN0b2wubXVzZXVtIiwiYnJpdGlzaC5tdXNldW0iLCJicml0aXNoY29sdW1iaWEubXVzZXVtIiwiYnJvYWRjYXN0Lm11c2V1bSIsImJydW5lbC5tdXNldW0iLCJicnVzc2VsLm11c2V1bSIsImJydXNzZWxzLm11'@;
put 'c2V1bSIsImJydXhlbGxlcy5tdXNldW0iLCJidWlsZGluZy5tdXNldW0iLCJidXJnaG9mLm11c2V1bSIsImJ1cy5tdXNldW0iLCJidXNoZXkubXVzZXVtIiwiY2FkYXF1ZXMubXVzZXVtIiwiY2FsaWZvcm5pYS5tdXNldW0iLCJjYW1icmlkZ2UubXVzZXVtIiwiY2FuLm11c2V1bSIsImNhbmFk'@;
put 'YS5tdXNldW0iLCJjYXBlYnJldG9uLm11c2V1bSIsImNhcnJpZXIubXVzZXVtIiwiY2FydG9vbmFydC5tdXNldW0iLCJjYXNhZGVsYW1vbmVkYS5tdXNldW0iLCJjYXN0bGUubXVzZXVtIiwiY2FzdHJlcy5tdXNldW0iLCJjZWx0aWMubXVzZXVtIiwiY2VudGVyLm11c2V1bSIsImNoYXR0YW5v'@;
put 'b2dhLm11c2V1bSIsImNoZWx0ZW5oYW0ubXVzZXVtIiwiY2hlc2FwZWFrZWJheS5tdXNldW0iLCJjaGljYWdvLm11c2V1bSIsImNoaWxkcmVuLm11c2V1bSIsImNoaWxkcmVucy5tdXNldW0iLCJjaGlsZHJlbnNnYXJkZW4ubXVzZXVtIiwiY2hpcm9wcmFjdGljLm11c2V1bSIsImNob2NvbGF0'@;
put 'ZS5tdXNldW0iLCJjaHJpc3RpYW5zYnVyZy5tdXNldW0iLCJjaW5jaW5uYXRpLm11c2V1bSIsImNpbmVtYS5tdXNldW0iLCJjaXJjdXMubXVzZXVtIiwiY2l2aWxpc2F0aW9uLm11c2V1bSIsImNpdmlsaXphdGlvbi5tdXNldW0iLCJjaXZpbHdhci5tdXNldW0iLCJjbGludG9uLm11c2V1bSIs'@;
put 'ImNsb2NrLm11c2V1bSIsImNvYWwubXVzZXVtIiwiY29hc3RhbGRlZmVuY2UubXVzZXVtIiwiY29keS5tdXNldW0iLCJjb2xkd2FyLm11c2V1bSIsImNvbGxlY3Rpb24ubXVzZXVtIiwiY29sb25pYWx3aWxsaWFtc2J1cmcubXVzZXVtIiwiY29sb3JhZG9wbGF0ZWF1Lm11c2V1bSIsImNvbHVt'@;
put 'YmlhLm11c2V1bSIsImNvbHVtYnVzLm11c2V1bSIsImNvbW11bmljYXRpb24ubXVzZXVtIiwiY29tbXVuaWNhdGlvbnMubXVzZXVtIiwiY29tbXVuaXR5Lm11c2V1bSIsImNvbXB1dGVyLm11c2V1bSIsImNvbXB1dGVyaGlzdG9yeS5tdXNldW0iLCJjb211bmljYVx4ZTdceGY1ZXMubXVzZXVt'@;
put 'IiwiY29udGVtcG9yYXJ5Lm11c2V1bSIsImNvbnRlbXBvcmFyeWFydC5tdXNldW0iLCJjb252ZW50Lm11c2V1bSIsImNvcGVuaGFnZW4ubXVzZXVtIiwiY29ycG9yYXRpb24ubXVzZXVtIiwiY29ycmVpb3MtZS10ZWxlY29tdW5pY2FceGU3XHhmNWVzLm11c2V1bSIsImNvcnZldHRlLm11c2V1'@;
put 'bSIsImNvc3R1bWUubXVzZXVtIiwiY291bnRyeWVzdGF0ZS5tdXNldW0iLCJjb3VudHkubXVzZXVtIiwiY3JhZnRzLm11c2V1bSIsImNyYW5icm9vay5tdXNldW0iLCJjcmVhdGlvbi5tdXNldW0iLCJjdWx0dXJhbC5tdXNldW0iLCJjdWx0dXJhbGNlbnRlci5tdXNldW0iLCJjdWx0dXJlLm11'@;
put 'c2V1bSIsImN5YmVyLm11c2V1bSIsImN5bXJ1Lm11c2V1bSIsImRhbGkubXVzZXVtIiwiZGFsbGFzLm11c2V1bSIsImRhdGFiYXNlLm11c2V1bSIsImRkci5tdXNldW0iLCJkZWNvcmF0aXZlYXJ0cy5tdXNldW0iLCJkZWxhd2FyZS5tdXNldW0iLCJkZWxtZW5ob3JzdC5tdXNldW0iLCJkZW5t'@;
put 'YXJrLm11c2V1bSIsImRlcG90Lm11c2V1bSIsImRlc2lnbi5tdXNldW0iLCJkZXRyb2l0Lm11c2V1bSIsImRpbm9zYXVyLm11c2V1bSIsImRpc2NvdmVyeS5tdXNldW0iLCJkb2xscy5tdXNldW0iLCJkb25vc3RpYS5tdXNldW0iLCJkdXJoYW0ubXVzZXVtIiwiZWFzdGFmcmljYS5tdXNldW0i'@;
put 'LCJlYXN0Y29hc3QubXVzZXVtIiwiZWR1Y2F0aW9uLm11c2V1bSIsImVkdWNhdGlvbmFsLm11c2V1bSIsImVneXB0aWFuLm11c2V1bSIsImVpc2VuYmFobi5tdXNldW0iLCJlbGJ1cmcubXVzZXVtIiwiZWx2ZW5kcmVsbC5tdXNldW0iLCJlbWJyb2lkZXJ5Lm11c2V1bSIsImVuY3ljbG9wZWRp'@;
put 'Yy5tdXNldW0iLCJlbmdsYW5kLm11c2V1bSIsImVudG9tb2xvZ3kubXVzZXVtIiwiZW52aXJvbm1lbnQubXVzZXVtIiwiZW52aXJvbm1lbnRhbGNvbnNlcnZhdGlvbi5tdXNldW0iLCJlcGlsZXBzeS5tdXNldW0iLCJlc3NleC5tdXNldW0iLCJlc3RhdGUubXVzZXVtIiwiZXRobm9sb2d5Lm11'@;
put 'c2V1bSIsImV4ZXRlci5tdXNldW0iLCJleGhpYml0aW9uLm11c2V1bSIsImZhbWlseS5tdXNldW0iLCJmYXJtLm11c2V1bSIsImZhcm1lcXVpcG1lbnQubXVzZXVtIiwiZmFybWVycy5tdXNldW0iLCJmYXJtc3RlYWQubXVzZXVtIiwiZmllbGQubXVzZXVtIiwiZmlndWVyZXMubXVzZXVtIiwi'@;
put 'ZmlsYXRlbGlhLm11c2V1bSIsImZpbG0ubXVzZXVtIiwiZmluZWFydC5tdXNldW0iLCJmaW5lYXJ0cy5tdXNldW0iLCJmaW5sYW5kLm11c2V1bSIsImZsYW5kZXJzLm11c2V1bSIsImZsb3JpZGEubXVzZXVtIiwiZm9yY2UubXVzZXVtIiwiZm9ydG1pc3NvdWxhLm11c2V1bSIsImZvcnR3b3J0'@;
put 'aC5tdXNldW0iLCJmb3VuZGF0aW9uLm11c2V1bSIsImZyYW5jYWlzZS5tdXNldW0iLCJmcmFua2Z1cnQubXVzZXVtIiwiZnJhbnppc2thbmVyLm11c2V1bSIsImZyZWVtYXNvbnJ5Lm11c2V1bSIsImZyZWlidXJnLm11c2V1bSIsImZyaWJvdXJnLm11c2V1bSIsImZyb2cubXVzZXVtIiwiZnVu'@;
put 'ZGFjaW8ubXVzZXVtIiwiZnVybml0dXJlLm11c2V1bSIsImdhbGxlcnkubXVzZXVtIiwiZ2FyZGVuLm11c2V1bSIsImdhdGV3YXkubXVzZXVtIiwiZ2VlbHZpbmNrLm11c2V1bSIsImdlbW9sb2dpY2FsLm11c2V1bSIsImdlb2xvZ3kubXVzZXVtIiwiZ2VvcmdpYS5tdXNldW0iLCJnaWVzc2Vu'@;
put 'Lm11c2V1bSIsImdsYXMubXVzZXVtIiwiZ2xhc3MubXVzZXVtIiwiZ29yZ2UubXVzZXVtIiwiZ3JhbmRyYXBpZHMubXVzZXVtIiwiZ3Jhei5tdXNldW0iLCJndWVybnNleS5tdXNldW0iLCJoYWxsb2ZmYW1lLm11c2V1bSIsImhhbWJ1cmcubXVzZXVtIiwiaGFuZHNvbi5tdXNldW0iLCJoYXJ2'@;
put 'ZXN0Y2VsZWJyYXRpb24ubXVzZXVtIiwiaGF3YWlpLm11c2V1bSIsImhlYWx0aC5tdXNldW0iLCJoZWltYXR1bmR1aHJlbi5tdXNldW0iLCJoZWxsYXMubXVzZXVtIiwiaGVsc2lua2kubXVzZXVtIiwiaGVtYnlnZHNmb3JidW5kLm11c2V1bSIsImhlcml0YWdlLm11c2V1bSIsImhpc3RvaXJl'@;
put 'Lm11c2V1bSIsImhpc3RvcmljYWwubXVzZXVtIiwiaGlzdG9yaWNhbHNvY2lldHkubXVzZXVtIiwiaGlzdG9yaWNob3VzZXMubXVzZXVtIiwiaGlzdG9yaXNjaC5tdXNldW0iLCJoaXN0b3Jpc2NoZXMubXVzZXVtIiwiaGlzdG9yeS5tdXNldW0iLCJoaXN0b3J5b2ZzY2llbmNlLm11c2V1bSIs'@;
put 'Imhvcm9sb2d5Lm11c2V1bSIsImhvdXNlLm11c2V1bSIsImh1bWFuaXRpZXMubXVzZXVtIiwiaWxsdXN0cmF0aW9uLm11c2V1bSIsImltYWdlYW5kc291bmQubXVzZXVtIiwiaW5kaWFuLm11c2V1bSIsImluZGlhbmEubXVzZXVtIiwiaW5kaWFuYXBvbGlzLm11c2V1bSIsImluZGlhbm1hcmtl'@;
put 'dC5tdXNldW0iLCJpbnRlbGxpZ2VuY2UubXVzZXVtIiwiaW50ZXJhY3RpdmUubXVzZXVtIiwiaXJhcS5tdXNldW0iLCJpcm9uLm11c2V1bSIsImlzbGVvZm1hbi5tdXNldW0iLCJqYW1pc29uLm11c2V1bSIsImplZmZlcnNvbi5tdXNldW0iLCJqZXJ1c2FsZW0ubXVzZXVtIiwiamV3ZWxyeS5t'@;
put 'dXNldW0iLCJqZXdpc2gubXVzZXVtIiwiamV3aXNoYXJ0Lm11c2V1bSIsImpmay5tdXNldW0iLCJqb3VybmFsaXNtLm11c2V1bSIsImp1ZGFpY2EubXVzZXVtIiwianVkeWdhcmxhbmQubXVzZXVtIiwianVlZGlzY2hlcy5tdXNldW0iLCJqdWlmLm11c2V1bSIsImthcmF0ZS5tdXNldW0iLCJr'@;
put 'YXJpa2F0dXIubXVzZXVtIiwia2lkcy5tdXNldW0iLCJrb2ViZW5oYXZuLm11c2V1bSIsImtvZWxuLm11c2V1bSIsImt1bnN0Lm11c2V1bSIsImt1bnN0c2FtbWx1bmcubXVzZXVtIiwia3Vuc3R1bmRkZXNpZ24ubXVzZXVtIiwibGFib3IubXVzZXVtIiwibGFib3VyLm11c2V1bSIsImxham9s'@;
put 'bGEubXVzZXVtIiwibGFuY2FzaGlyZS5tdXNldW0iLCJsYW5kZXMubXVzZXVtIiwibGFucy5tdXNldW0iLCJsXHhlNG5zLm11c2V1bSIsImxhcnNzb24ubXVzZXVtIiwibGV3aXNtaWxsZXIubXVzZXVtIiwibGluY29sbi5tdXNldW0iLCJsaW56Lm11c2V1bSIsImxpdmluZy5tdXNldW0iLCJs'@;
put 'aXZpbmdoaXN0b3J5Lm11c2V1bSIsImxvY2FsaGlzdG9yeS5tdXNldW0iLCJsb25kb24ubXVzZXVtIiwibG9zYW5nZWxlcy5tdXNldW0iLCJsb3V2cmUubXVzZXVtIiwibG95YWxpc3QubXVzZXVtIiwibHVjZXJuZS5tdXNldW0iLCJsdXhlbWJvdXJnLm11c2V1bSIsImx1emVybi5tdXNldW0i'@;
put 'LCJtYWQubXVzZXVtIiwibWFkcmlkLm11c2V1bSIsIm1hbGxvcmNhLm11c2V1bSIsIm1hbmNoZXN0ZXIubXVzZXVtIiwibWFuc2lvbi5tdXNldW0iLCJtYW5zaW9ucy5tdXNldW0iLCJtYW54Lm11c2V1bSIsIm1hcmJ1cmcubXVzZXVtIiwibWFyaXRpbWUubXVzZXVtIiwibWFyaXRpbW8ubXVz'@;
put 'ZXVtIiwibWFyeWxhbmQubXVzZXVtIiwibWFyeWxodXJzdC5tdXNldW0iLCJtZWRpYS5tdXNldW0iLCJtZWRpY2FsLm11c2V1bSIsIm1lZGl6aW5oaXN0b3Jpc2NoZXMubXVzZXVtIiwibWVlcmVzLm11c2V1bSIsIm1lbW9yaWFsLm11c2V1bSIsIm1lc2F2ZXJkZS5tdXNldW0iLCJtaWNoaWdh'@;
put 'bi5tdXNldW0iLCJtaWRhdGxhbnRpYy5tdXNldW0iLCJtaWxpdGFyeS5tdXNldW0iLCJtaWxsLm11c2V1bSIsIm1pbmVycy5tdXNldW0iLCJtaW5pbmcubXVzZXVtIiwibWlubmVzb3RhLm11c2V1bSIsIm1pc3NpbGUubXVzZXVtIiwibWlzc291bGEubXVzZXVtIiwibW9kZXJuLm11c2V1bSIs'@;
put 'Im1vbWEubXVzZXVtIiwibW9uZXkubXVzZXVtIiwibW9ubW91dGgubXVzZXVtIiwibW9udGljZWxsby5tdXNldW0iLCJtb250cmVhbC5tdXNldW0iLCJtb3Njb3cubXVzZXVtIiwibW90b3JjeWNsZS5tdXNldW0iLCJtdWVuY2hlbi5tdXNldW0iLCJtdWVuc3Rlci5tdXNldW0iLCJtdWxob3Vz'@;
put 'ZS5tdXNldW0iLCJtdW5jaWUubXVzZXVtIiwibXVzZWV0Lm11c2V1bSIsIm11c2V1bWNlbnRlci5tdXNldW0iLCJtdXNldW12ZXJlbmlnaW5nLm11c2V1bSIsIm11c2ljLm11c2V1bSIsIm5hdGlvbmFsLm11c2V1bSIsIm5hdGlvbmFsZmlyZWFybXMubXVzZXVtIiwibmF0aW9uYWxoZXJpdGFn'@;
put 'ZS5tdXNldW0iLCJuYXRpdmVhbWVyaWNhbi5tdXNldW0iLCJuYXR1cmFsaGlzdG9yeS5tdXNldW0iLCJuYXR1cmFsaGlzdG9yeW11c2V1bS5tdXNldW0iLCJuYXR1cmFsc2NpZW5jZXMubXVzZXVtIiwibmF0dXJlLm11c2V1bSIsIm5hdHVyaGlzdG9yaXNjaGVzLm11c2V1bSIsIm5hdHV1cndl'@;
put 'dGVuc2NoYXBwZW4ubXVzZXVtIiwibmF1bWJ1cmcubXVzZXVtIiwibmF2YWwubXVzZXVtIiwibmVicmFza2EubXVzZXVtIiwibmV1ZXMubXVzZXVtIiwibmV3aGFtcHNoaXJlLm11c2V1bSIsIm5ld2plcnNleS5tdXNldW0iLCJuZXdtZXhpY28ubXVzZXVtIiwibmV3cG9ydC5tdXNldW0iLCJu'@;
put 'ZXdzcGFwZXIubXVzZXVtIiwibmV3eW9yay5tdXNldW0iLCJuaWVwY2UubXVzZXVtIiwibm9yZm9say5tdXNldW0iLCJub3J0aC5tdXNldW0iLCJucncubXVzZXVtIiwibnljLm11c2V1bSIsIm55bnkubXVzZXVtIiwib2NlYW5vZ3JhcGhpYy5tdXNldW0iLCJvY2Vhbm9ncmFwaGlxdWUubXVz'@;
put 'ZXVtIiwib21haGEubXVzZXVtIiwib25saW5lLm11c2V1bSIsIm9udGFyaW8ubXVzZXVtIiwib3BlbmFpci5tdXNldW0iLCJvcmVnb24ubXVzZXVtIiwib3JlZ29udHJhaWwubXVzZXVtIiwib3RhZ28ubXVzZXVtIiwib3hmb3JkLm11c2V1bSIsInBhY2lmaWMubXVzZXVtIiwicGFkZXJib3Ju'@;
put 'Lm11c2V1bSIsInBhbGFjZS5tdXNldW0iLCJwYWxlby5tdXNldW0iLCJwYWxtc3ByaW5ncy5tdXNldW0iLCJwYW5hbWEubXVzZXVtIiwicGFyaXMubXVzZXVtIiwicGFzYWRlbmEubXVzZXVtIiwicGhhcm1hY3kubXVzZXVtIiwicGhpbGFkZWxwaGlhLm11c2V1bSIsInBoaWxhZGVscGhpYWFy'@;
put 'ZWEubXVzZXVtIiwicGhpbGF0ZWx5Lm11c2V1bSIsInBob2VuaXgubXVzZXVtIiwicGhvdG9ncmFwaHkubXVzZXVtIiwicGlsb3RzLm11c2V1bSIsInBpdHRzYnVyZ2gubXVzZXVtIiwicGxhbmV0YXJpdW0ubXVzZXVtIiwicGxhbnRhdGlvbi5tdXNldW0iLCJwbGFudHMubXVzZXVtIiwicGxh'@;
put 'emEubXVzZXVtIiwicG9ydGFsLm11c2V1bSIsInBvcnRsYW5kLm11c2V1bSIsInBvcnRsbGlnYXQubXVzZXVtIiwicG9zdHMtYW5kLXRlbGVjb21tdW5pY2F0aW9ucy5tdXNldW0iLCJwcmVzZXJ2YXRpb24ubXVzZXVtIiwicHJlc2lkaW8ubXVzZXVtIiwicHJlc3MubXVzZXVtIiwicHJvamVj'@;
put 'dC5tdXNldW0iLCJwdWJsaWMubXVzZXVtIiwicHVib2wubXVzZXVtIiwicXVlYmVjLm11c2V1bSIsInJhaWxyb2FkLm11c2V1bSIsInJhaWx3YXkubXVzZXVtIiwicmVzZWFyY2gubXVzZXVtIiwicmVzaXN0YW5jZS5tdXNldW0iLCJyaW9kZWphbmVpcm8ubXVzZXVtIiwicm9jaGVzdGVyLm11'@;
put 'c2V1bSIsInJvY2thcnQubXVzZXVtIiwicm9tYS5tdXNldW0iLCJydXNzaWEubXVzZXVtIiwic2FpbnRsb3Vpcy5tdXNldW0iLCJzYWxlbS5tdXNldW0iLCJzYWx2YWRvcmRhbGkubXVzZXVtIiwic2FsemJ1cmcubXVzZXVtIiwic2FuZGllZ28ubXVzZXVtIiwic2FuZnJhbmNpc2NvLm11c2V1'@;
put 'bSIsInNhbnRhYmFyYmFyYS5tdXNldW0iLCJzYW50YWNydXoubXVzZXVtIiwic2FudGFmZS5tdXNldW0iLCJzYXNrYXRjaGV3YW4ubXVzZXVtIiwic2F0eC5tdXNldW0iLCJzYXZhbm5haGdhLm11c2V1bSIsInNjaGxlc2lzY2hlcy5tdXNldW0iLCJzY2hvZW5icnVubi5tdXNldW0iLCJzY2hv'@;
put 'a29sYWRlbi5tdXNldW0iLCJzY2hvb2wubXVzZXVtIiwic2Nod2Vpei5tdXNldW0iLCJzY2llbmNlLm11c2V1bSIsInNjaWVuY2VhbmRoaXN0b3J5Lm11c2V1bSIsInNjaWVuY2VhbmRpbmR1c3RyeS5tdXNldW0iLCJzY2llbmNlY2VudGVyLm11c2V1bSIsInNjaWVuY2VjZW50ZXJzLm11c2V1'@;
put 'bSIsInNjaWVuY2UtZmljdGlvbi5tdXNldW0iLCJzY2llbmNlaGlzdG9yeS5tdXNldW0iLCJzY2llbmNlcy5tdXNldW0iLCJzY2llbmNlc25hdHVyZWxsZXMubXVzZXVtIiwic2NvdGxhbmQubXVzZXVtIiwic2VhcG9ydC5tdXNldW0iLCJzZXR0bGVtZW50Lm11c2V1bSIsInNldHRsZXJzLm11'@;
put 'c2V1bSIsInNoZWxsLm11c2V1bSIsInNoZXJicm9va2UubXVzZXVtIiwic2liZW5pay5tdXNldW0iLCJzaWxrLm11c2V1bSIsInNraS5tdXNldW0iLCJza29sZS5tdXNldW0iLCJzb2NpZXR5Lm11c2V1bSIsInNvbG9nbmUubXVzZXVtIiwic291bmRhbmR2aXNpb24ubXVzZXVtIiwic291dGhj'@;
put 'YXJvbGluYS5tdXNldW0iLCJzb3V0aHdlc3QubXVzZXVtIiwic3BhY2UubXVzZXVtIiwic3B5Lm11c2V1bSIsInNxdWFyZS5tdXNldW0iLCJzdGFkdC5tdXNldW0iLCJzdGFsYmFucy5tdXNldW0iLCJzdGFybmJlcmcubXVzZXVtIiwic3RhdGUubXVzZXVtIiwic3RhdGVvZmRlbGF3YXJlLm11'@;
put 'c2V1bSIsInN0YXRpb24ubXVzZXVtIiwic3RlYW0ubXVzZXVtIiwic3RlaWVybWFyay5tdXNldW0iLCJzdGpvaG4ubXVzZXVtIiwic3RvY2tob2xtLm11c2V1bSIsInN0cGV0ZXJzYnVyZy5tdXNldW0iLCJzdHV0dGdhcnQubXVzZXVtIiwic3Vpc3NlLm11c2V1bSIsInN1cmdlb25zaGFsbC5t'@;
put 'dXNldW0iLCJzdXJyZXkubXVzZXVtIiwic3ZpenplcmEubXVzZXVtIiwic3dlZGVuLm11c2V1bSIsInN5ZG5leS5tdXNldW0iLCJ0YW5rLm11c2V1bSIsInRjbS5tdXNldW0iLCJ0ZWNobm9sb2d5Lm11c2V1bSIsInRlbGVrb21tdW5pa2F0aW9uLm11c2V1bSIsInRlbGV2aXNpb24ubXVzZXVt'@;
put 'IiwidGV4YXMubXVzZXVtIiwidGV4dGlsZS5tdXNldW0iLCJ0aGVhdGVyLm11c2V1bSIsInRpbWUubXVzZXVtIiwidGltZWtlZXBpbmcubXVzZXVtIiwidG9wb2xvZ3kubXVzZXVtIiwidG9yaW5vLm11c2V1bSIsInRvdWNoLm11c2V1bSIsInRvd24ubXVzZXVtIiwidHJhbnNwb3J0Lm11c2V1'@;
put 'bSIsInRyZWUubXVzZXVtIiwidHJvbGxleS5tdXNldW0iLCJ0cnVzdC5tdXNldW0iLCJ0cnVzdGVlLm11c2V1bSIsInVocmVuLm11c2V1bSIsInVsbS5tdXNldW0iLCJ1bmRlcnNlYS5tdXNldW0iLCJ1bml2ZXJzaXR5Lm11c2V1bSIsInVzYS5tdXNldW0iLCJ1c2FudGlxdWVzLm11c2V1bSIs'@;
put 'InVzYXJ0cy5tdXNldW0iLCJ1c2NvdW50cnllc3RhdGUubXVzZXVtIiwidXNjdWx0dXJlLm11c2V1bSIsInVzZGVjb3JhdGl2ZWFydHMubXVzZXVtIiwidXNnYXJkZW4ubXVzZXVtIiwidXNoaXN0b3J5Lm11c2V1bSIsInVzaHVhaWEubXVzZXVtIiwidXNsaXZpbmdoaXN0b3J5Lm11c2V1bSIs'@;
put 'InV0YWgubXVzZXVtIiwidXZpYy5tdXNldW0iLCJ2YWxsZXkubXVzZXVtIiwidmFudGFhLm11c2V1bSIsInZlcnNhaWxsZXMubXVzZXVtIiwidmlraW5nLm11c2V1bSIsInZpbGxhZ2UubXVzZXVtIiwidmlyZ2luaWEubXVzZXVtIiwidmlydHVhbC5tdXNldW0iLCJ2aXJ0dWVsLm11c2V1bSIs'@;
put 'InZsYWFuZGVyZW4ubXVzZXVtIiwidm9sa2Vua3VuZGUubXVzZXVtIiwid2FsZXMubXVzZXVtIiwid2FsbG9uaWUubXVzZXVtIiwid2FyLm11c2V1bSIsIndhc2hpbmd0b25kYy5tdXNldW0iLCJ3YXRjaGFuZGNsb2NrLm11c2V1bSIsIndhdGNoLWFuZC1jbG9jay5tdXNldW0iLCJ3ZXN0ZXJu'@;
put 'Lm11c2V1bSIsIndlc3RmYWxlbi5tdXNldW0iLCJ3aGFsaW5nLm11c2V1bSIsIndpbGRsaWZlLm11c2V1bSIsIndpbGxpYW1zYnVyZy5tdXNldW0iLCJ3aW5kbWlsbC5tdXNldW0iLCJ3b3Jrc2hvcC5tdXNldW0iLCJ5b3JrLm11c2V1bSIsInlvcmtzaGlyZS5tdXNldW0iLCJ5b3NlbWl0ZS5t'@;
put 'dXNldW0iLCJ5b3V0aC5tdXNldW0iLCJ6b29sb2dpY2FsLm11c2V1bSIsInpvb2xvZ3kubXVzZXVtIiwiXHUwNWQ5XHUwNWU4XHUwNWQ1XHUwNWU5XHUwNWRjXHUwNWQ5XHUwNWRkLm11c2V1bSIsIlx1MDQzOFx1MDQzYVx1MDQzZVx1MDQzYy5tdXNldW0iLCJtdiIsImFlcm8ubXYiLCJiaXou'@;
put 'bXYiLCJjb20ubXYiLCJjb29wLm12IiwiZWR1Lm12IiwiZ292Lm12IiwiaW5mby5tdiIsImludC5tdiIsIm1pbC5tdiIsIm11c2V1bS5tdiIsIm5hbWUubXYiLCJuZXQubXYiLCJvcmcubXYiLCJwcm8ubXYiLCJtdyIsImFjLm13IiwiYml6Lm13IiwiY28ubXciLCJjb20ubXciLCJjb29wLm13'@;
put 'IiwiZWR1Lm13IiwiZ292Lm13IiwiaW50Lm13IiwibXVzZXVtLm13IiwibmV0Lm13Iiwib3JnLm13IiwibXgiLCJjb20ubXgiLCJvcmcubXgiLCJnb2IubXgiLCJlZHUubXgiLCJuZXQubXgiLCJteSIsImJpei5teSIsImNvbS5teSIsImVkdS5teSIsImdvdi5teSIsIm1pbC5teSIsIm5hbWUu'@;
put 'bXkiLCJuZXQubXkiLCJvcmcubXkiLCJteiIsImFjLm16IiwiYWR2Lm16IiwiY28ubXoiLCJlZHUubXoiLCJnb3YubXoiLCJtaWwubXoiLCJuZXQubXoiLCJvcmcubXoiLCJuYSIsImluZm8ubmEiLCJwcm8ubmEiLCJuYW1lLm5hIiwic2Nob29sLm5hIiwib3IubmEiLCJkci5uYSIsInVzLm5h'@;
put 'IiwibXgubmEiLCJjYS5uYSIsImluLm5hIiwiY2MubmEiLCJ0di5uYSIsIndzLm5hIiwibW9iaS5uYSIsImNvLm5hIiwiY29tLm5hIiwib3JnLm5hIiwibmFtZSIsIm5jIiwiYXNzby5uYyIsIm5vbS5uYyIsIm5lIiwibmV0IiwibmYiLCJjb20ubmYiLCJuZXQubmYiLCJwZXIubmYiLCJyZWMu'@;
put 'bmYiLCJ3ZWIubmYiLCJhcnRzLm5mIiwiZmlybS5uZiIsImluZm8ubmYiLCJvdGhlci5uZiIsInN0b3JlLm5mIiwibmciLCJjb20ubmciLCJlZHUubmciLCJnb3YubmciLCJpLm5nIiwibWlsLm5nIiwibW9iaS5uZyIsIm5hbWUubmciLCJuZXQubmciLCJvcmcubmciLCJzY2gubmciLCJuaSIs'@;
put 'ImFjLm5pIiwiYml6Lm5pIiwiY28ubmkiLCJjb20ubmkiLCJlZHUubmkiLCJnb2IubmkiLCJpbi5uaSIsImluZm8ubmkiLCJpbnQubmkiLCJtaWwubmkiLCJuZXQubmkiLCJub20ubmkiLCJvcmcubmkiLCJ3ZWIubmkiLCJubCIsIm5vIiwiZmhzLm5vIiwidmdzLm5vIiwiZnlsa2VzYmlibC5u'@;
put 'byIsImZvbGtlYmlibC5ubyIsIm11c2V1bS5ubyIsImlkcmV0dC5ubyIsInByaXYubm8iLCJtaWwubm8iLCJzdGF0Lm5vIiwiZGVwLm5vIiwia29tbXVuZS5ubyIsImhlcmFkLm5vIiwiYWEubm8iLCJhaC5ubyIsImJ1Lm5vIiwiZm0ubm8iLCJobC5ubyIsImhtLm5vIiwiamFuLW1heWVuLm5v'@;
put 'IiwibXIubm8iLCJubC5ubyIsIm50Lm5vIiwib2Yubm8iLCJvbC5ubyIsIm9zbG8ubm8iLCJybC5ubyIsInNmLm5vIiwic3Qubm8iLCJzdmFsYmFyZC5ubyIsInRtLm5vIiwidHIubm8iLCJ2YS5ubyIsInZmLm5vIiwiZ3MuYWEubm8iLCJncy5haC5ubyIsImdzLmJ1Lm5vIiwiZ3MuZm0ubm8i'@;
put 'LCJncy5obC5ubyIsImdzLmhtLm5vIiwiZ3MuamFuLW1heWVuLm5vIiwiZ3MubXIubm8iLCJncy5ubC5ubyIsImdzLm50Lm5vIiwiZ3Mub2Yubm8iLCJncy5vbC5ubyIsImdzLm9zbG8ubm8iLCJncy5ybC5ubyIsImdzLnNmLm5vIiwiZ3Muc3Qubm8iLCJncy5zdmFsYmFyZC5ubyIsImdzLnRt'@;
put 'Lm5vIiwiZ3MudHIubm8iLCJncy52YS5ubyIsImdzLnZmLm5vIiwiYWtyZWhhbW4ubm8iLCJceGU1a3JlaGFtbi5ubyIsImFsZ2FyZC5ubyIsIlx4ZTVsZ1x4ZTVyZC5ubyIsImFybmEubm8iLCJicnVtdW5kZGFsLm5vIiwiYnJ5bmUubm8iLCJicm9ubm95c3VuZC5ubyIsImJyXHhmOG5uXHhm'@;
put 'OHlzdW5kLm5vIiwiZHJvYmFrLm5vIiwiZHJceGY4YmFrLm5vIiwiZWdlcnN1bmQubm8iLCJmZXRzdW5kLm5vIiwiZmxvcm8ubm8iLCJmbG9yXHhmOC5ubyIsImZyZWRyaWtzdGFkLm5vIiwiaG9ra3N1bmQubm8iLCJob25lZm9zcy5ubyIsImhceGY4bmVmb3NzLm5vIiwiamVzc2hlaW0ubm8i'@;
put 'LCJqb3JwZWxhbmQubm8iLCJqXHhmOHJwZWxhbmQubm8iLCJraXJrZW5lcy5ubyIsImtvcGVydmlrLm5vIiwia3Jva3N0YWRlbHZhLm5vIiwibGFuZ2V2YWcubm8iLCJsYW5nZXZceGU1Zy5ubyIsImxlaXJ2aWsubm8iLCJtam9uZGFsZW4ubm8iLCJtalx4ZjhuZGFsZW4ubm8iLCJtby1pLXJh'@;
put 'bmEubm8iLCJtb3Nqb2VuLm5vIiwibW9zalx4Zjhlbi5ubyIsIm5lc29kZHRhbmdlbi5ubyIsIm9ya2FuZ2VyLm5vIiwib3NveXJvLm5vIiwib3NceGY4eXJvLm5vIiwicmFob2x0Lm5vIiwiclx4ZTVob2x0Lm5vIiwic2FuZG5lc3Nqb2VuLm5vIiwic2FuZG5lc3NqXHhmOGVuLm5vIiwic2tl'@;
put 'ZHNtb2tvcnNldC5ubyIsInNsYXR0dW0ubm8iLCJzcGplbGthdmlrLm5vIiwic3RhdGhlbGxlLm5vIiwic3RhdmVybi5ubyIsInN0am9yZGFsc2hhbHNlbi5ubyIsInN0alx4ZjhyZGFsc2hhbHNlbi5ubyIsInRhbmFuZ2VyLm5vIiwidHJhbmJ5Lm5vIiwidm9zc2V2YW5nZW4ubm8iLCJhZmpv'@;
put 'cmQubm8iLCJceGU1ZmpvcmQubm8iLCJhZ2RlbmVzLm5vIiwiYWwubm8iLCJceGU1bC5ubyIsImFsZXN1bmQubm8iLCJceGU1bGVzdW5kLm5vIiwiYWxzdGFoYXVnLm5vIiwiYWx0YS5ubyIsIlx4ZTFsdFx4ZTEubm8iLCJhbGFoZWFkanUubm8iLCJceGUxbGFoZWFkanUubm8iLCJhbHZkYWwu'@;
put 'bm8iLCJhbWxpLm5vIiwiXHhlNW1saS5ubyIsImFtb3Qubm8iLCJceGU1bW90Lm5vIiwiYW5kZWJ1Lm5vIiwiYW5kb3kubm8iLCJhbmRceGY4eS5ubyIsImFuZGFzdW9sby5ubyIsImFyZGFsLm5vIiwiXHhlNXJkYWwubm8iLCJhcmVtYXJrLm5vIiwiYXJlbmRhbC5ubyIsIlx4ZTVzLm5vIiwi'@;
put 'YXNlcmFsLm5vIiwiXHhlNXNlcmFsLm5vIiwiYXNrZXIubm8iLCJhc2tpbS5ubyIsImFza3ZvbGwubm8iLCJhc2tveS5ubyIsImFza1x4Zjh5Lm5vIiwiYXNuZXMubm8iLCJceGU1c25lcy5ubyIsImF1ZG5lZGFsbi5ubyIsImF1a3JhLm5vIiwiYXVyZS5ubyIsImF1cmxhbmQubm8iLCJhdXJz'@;
put 'a29nLWhvbGFuZC5ubyIsImF1cnNrb2ctaFx4ZjhsYW5kLm5vIiwiYXVzdGV2b2xsLm5vIiwiYXVzdHJoZWltLm5vIiwiYXZlcm95Lm5vIiwiYXZlclx4Zjh5Lm5vIiwiYmFsZXN0cmFuZC5ubyIsImJhbGxhbmdlbi5ubyIsImJhbGF0Lm5vIiwiYlx4ZTFsXHhlMXQubm8iLCJiYWxzZmpvcmQu'@;
put 'bm8iLCJiYWhjY2F2dW90bmEubm8iLCJiXHhlMWhjY2F2dW90bmEubm8iLCJiYW1ibGUubm8iLCJiYXJkdS5ubyIsImJlYXJkdS5ubyIsImJlaWFybi5ubyIsImJhamRkYXIubm8iLCJiXHhlMWpkZGFyLm5vIiwiYmFpZGFyLm5vIiwiYlx4ZTFpZFx4ZTFyLm5vIiwiYmVyZy5ubyIsImJlcmdl'@;
put 'bi5ubyIsImJlcmxldmFnLm5vIiwiYmVybGV2XHhlNWcubm8iLCJiZWFyYWx2YWhraS5ubyIsImJlYXJhbHZceGUxaGtpLm5vIiwiYmluZGFsLm5vIiwiYmlya2VuZXMubm8iLCJiamFya295Lm5vIiwiYmphcmtceGY4eS5ubyIsImJqZXJrcmVpbS5ubyIsImJqdWduLm5vIiwiYm9kby5ubyIs'@;
put 'ImJvZFx4Zjgubm8iLCJiYWRhZGRqYS5ubyIsImJceGU1ZFx4ZTVkZGpceGU1Lm5vIiwiYnVkZWpqdS5ubyIsImJva24ubm8iLCJicmVtYW5nZXIubm8iLCJicm9ubm95Lm5vIiwiYnJceGY4bm5ceGY4eS5ubyIsImJ5Z2xhbmQubm8iLCJieWtsZS5ubyIsImJhcnVtLm5vIiwiYlx4ZTZydW0u'@;
put 'bm8iLCJiby50ZWxlbWFyay5ubyIsImJceGY4LnRlbGVtYXJrLm5vIiwiYm8ubm9yZGxhbmQubm8iLCJiXHhmOC5ub3JkbGFuZC5ubyIsImJpZXZhdC5ubyIsImJpZXZceGUxdC5ubyIsImJvbWxvLm5vIiwiYlx4ZjhtbG8ubm8iLCJiYXRzZmpvcmQubm8iLCJiXHhlNXRzZmpvcmQubm8iLCJi'@;
put 'YWhjYXZ1b3RuYS5ubyIsImJceGUxaGNhdnVvdG5hLm5vIiwiZG92cmUubm8iLCJkcmFtbWVuLm5vIiwiZHJhbmdlZGFsLm5vIiwiZHlyb3kubm8iLCJkeXJceGY4eS5ubyIsImRvbm5hLm5vIiwiZFx4ZjhubmEubm8iLCJlaWQubm8iLCJlaWRmam9yZC5ubyIsImVpZHNiZXJnLm5vIiwiZWlk'@;
put 'c2tvZy5ubyIsImVpZHN2b2xsLm5vIiwiZWlnZXJzdW5kLm5vIiwiZWx2ZXJ1bS5ubyIsImVuZWJha2subm8iLCJlbmdlcmRhbC5ubyIsImV0bmUubm8iLCJldG5lZGFsLm5vIiwiZXZlbmVzLm5vIiwiZXZlbmFzc2kubm8iLCJldmVuXHhlMVx1MDE2MVx1MDE2MWkubm8iLCJldmplLW9nLWhv'@;
put 'cm5uZXMubm8iLCJmYXJzdW5kLm5vIiwiZmF1c2tlLm5vIiwiZnVvc3Nrby5ubyIsImZ1b2lza3Uubm8iLCJmZWRqZS5ubyIsImZldC5ubyIsImZpbm5veS5ubyIsImZpbm5ceGY4eS5ubyIsImZpdGphci5ubyIsImZqYWxlci5ubyIsImZqZWxsLm5vIiwiZmxha3N0YWQubm8iLCJmbGF0YW5n'@;
put 'ZXIubm8iLCJmbGVra2Vmam9yZC5ubyIsImZsZXNiZXJnLm5vIiwiZmxvcmEubm8iLCJmbGEubm8iLCJmbFx4ZTUubm8iLCJmb2xsZGFsLm5vIiwiZm9yc2FuZC5ubyIsImZvc25lcy5ubyIsImZyZWkubm8iLCJmcm9nbi5ubyIsImZyb2xhbmQubm8iLCJmcm9zdGEubm8iLCJmcmFuYS5ubyIs'@;
put 'ImZyXHhlNm5hLm5vIiwiZnJveWEubm8iLCJmclx4Zjh5YS5ubyIsImZ1c2Eubm8iLCJmeXJlc2RhbC5ubyIsImZvcmRlLm5vIiwiZlx4ZjhyZGUubm8iLCJnYW12aWsubm8iLCJnYW5nYXZpaWthLm5vIiwiZ1x4ZTFcdTAxNGJnYXZpaWthLm5vIiwiZ2F1bGFyLm5vIiwiZ2F1c2RhbC5ubyIs'@;
put 'ImdpbGRlc2thbC5ubyIsImdpbGRlc2tceGU1bC5ubyIsImdpc2tlLm5vIiwiZ2plbW5lcy5ubyIsImdqZXJkcnVtLm5vIiwiZ2plcnN0YWQubm8iLCJnamVzZGFsLm5vIiwiZ2pvdmlrLm5vIiwiZ2pceGY4dmlrLm5vIiwiZ2xvcHBlbi5ubyIsImdvbC5ubyIsImdyYW4ubm8iLCJncmFuZS5u'@;
put 'byIsImdyYW52aW4ubm8iLCJncmF0YW5nZW4ubm8iLCJncmltc3RhZC5ubyIsImdyb25nLm5vIiwia3JhYW5naGtlLm5vIiwia3JceGU1YW5naGtlLm5vIiwiZ3J1ZS5ubyIsImd1bGVuLm5vIiwiaGFkc2VsLm5vIiwiaGFsZGVuLm5vIiwiaGFsc2Eubm8iLCJoYW1hci5ubyIsImhhbWFyb3ku'@;
put 'bm8iLCJoYWJtZXIubm8iLCJoXHhlMWJtZXIubm8iLCJoYXBtaXIubm8iLCJoXHhlMXBtaXIubm8iLCJoYW1tZXJmZXN0Lm5vIiwiaGFtbWFyZmVhc3RhLm5vIiwiaFx4ZTFtbVx4ZTFyZmVhc3RhLm5vIiwiaGFyYW0ubm8iLCJoYXJlaWQubm8iLCJoYXJzdGFkLm5vIiwiaGFzdmlrLm5vIiwi'@;
put 'YWtub2x1b2t0YS5ubyIsIlx4ZTFrXHUwMTRib2x1b2t0YS5ubyIsImhhdHRmamVsbGRhbC5ubyIsImFhcmJvcnRlLm5vIiwiaGF1Z2VzdW5kLm5vIiwiaGVtbmUubm8iLCJoZW1uZXMubm8iLCJoZW1zZWRhbC5ubyIsImhlcm95Lm1vcmUtb2ctcm9tc2RhbC5ubyIsImhlclx4Zjh5Lm1ceGY4'@;
put 'cmUtb2ctcm9tc2RhbC5ubyIsImhlcm95Lm5vcmRsYW5kLm5vIiwiaGVyXHhmOHkubm9yZGxhbmQubm8iLCJoaXRyYS5ubyIsImhqYXJ0ZGFsLm5vIiwiaGplbG1lbGFuZC5ubyIsImhvYm9sLm5vIiwiaG9iXHhmOGwubm8iLCJob2Yubm8iLCJob2wubm8iLCJob2xlLm5vIiwiaG9sbWVzdHJh'@;
put 'bmQubm8iLCJob2x0YWxlbi5ubyIsImhvbHRceGU1bGVuLm5vIiwiaG9ybmluZGFsLm5vIiwiaG9ydGVuLm5vIiwiaHVyZGFsLm5vIiwiaHVydW0ubm8iLCJodmFsZXIubm8iLCJoeWxsZXN0YWQubm8iLCJoYWdlYm9zdGFkLm5vIiwiaFx4ZTZnZWJvc3RhZC5ubyIsImhveWFuZ2VyLm5vIiwi'@;
put 'aFx4Zjh5YW5nZXIubm8iLCJob3lsYW5kZXQubm8iLCJoXHhmOHlsYW5kZXQubm8iLCJoYS5ubyIsImhceGU1Lm5vIiwiaWJlc3RhZC5ubyIsImluZGVyb3kubm8iLCJpbmRlclx4Zjh5Lm5vIiwiaXZlbGFuZC5ubyIsImpldm5ha2VyLm5vIiwiam9uZGFsLm5vIiwiam9sc3Rlci5ubyIsImpc'@;
put 'eGY4bHN0ZXIubm8iLCJrYXJhc2pvay5ubyIsImthcmFzam9oa2Eubm8iLCJrXHhlMXJceGUxXHUwMTYxam9oa2Eubm8iLCJrYXJsc295Lm5vIiwiZ2Fsc2Eubm8iLCJnXHhlMWxzXHhlMS5ubyIsImthcm1veS5ubyIsImthcm1ceGY4eS5ubyIsImthdXRva2Vpbm8ubm8iLCJndW92ZGFnZWFp'@;
put 'ZG51Lm5vIiwia2xlcHAubm8iLCJrbGFidS5ubyIsImtsXHhlNmJ1Lm5vIiwia29uZ3NiZXJnLm5vIiwia29uZ3N2aW5nZXIubm8iLCJrcmFnZXJvLm5vIiwia3JhZ2VyXHhmOC5ubyIsImtyaXN0aWFuc2FuZC5ubyIsImtyaXN0aWFuc3VuZC5ubyIsImtyb2RzaGVyYWQubm8iLCJrclx4Zjhk'@;
put 'c2hlcmFkLm5vIiwia3ZhbHN1bmQubm8iLCJyYWhra2VyYXZqdS5ubyIsInJceGUxaGtrZXJceGUxdmp1Lm5vIiwia3ZhbS5ubyIsImt2aW5lc2RhbC5ubyIsImt2aW5uaGVyYWQubm8iLCJrdml0ZXNlaWQubm8iLCJrdml0c295Lm5vIiwia3ZpdHNceGY4eS5ubyIsImt2YWZqb3JkLm5vIiwi'@;
put 'a3ZceGU2ZmpvcmQubm8iLCJnaWVodGF2dW9hdG5hLm5vIiwia3ZhbmFuZ2VuLm5vIiwia3ZceGU2bmFuZ2VuLm5vIiwibmF2dW90bmEubm8iLCJuXHhlMXZ1b3RuYS5ubyIsImthZmpvcmQubm8iLCJrXHhlNWZqb3JkLm5vIiwiZ2FpdnVvdG5hLm5vIiwiZ1x4ZTFpdnVvdG5hLm5vIiwibGFy'@;
put 'dmlrLm5vIiwibGF2YW5nZW4ubm8iLCJsYXZhZ2lzLm5vIiwibG9hYmF0Lm5vIiwibG9hYlx4ZTF0Lm5vIiwibGViZXNieS5ubyIsImRhdnZlc2lpZGEubm8iLCJsZWlrYW5nZXIubm8iLCJsZWlyZmpvcmQubm8iLCJsZWthLm5vIiwibGVrc3Zpay5ubyIsImxlbnZpay5ubyIsImxlYW5nYXZp'@;
put 'aWthLm5vIiwibGVhXHUwMTRiZ2F2aWlrYS5ubyIsImxlc2phLm5vIiwibGV2YW5nZXIubm8iLCJsaWVyLm5vIiwibGllcm5lLm5vIiwibGlsbGVoYW1tZXIubm8iLCJsaWxsZXNhbmQubm8iLCJsaW5kZXNuZXMubm8iLCJsaW5kYXMubm8iLCJsaW5kXHhlNXMubm8iLCJsb20ubm8iLCJsb3Bw'@;
put 'YS5ubyIsImxhaHBwaS5ubyIsImxceGUxaHBwaS5ubyIsImx1bmQubm8iLCJsdW5uZXIubm8iLCJsdXJveS5ubyIsImx1clx4Zjh5Lm5vIiwibHVzdGVyLm5vIiwibHluZ2RhbC5ubyIsImx5bmdlbi5ubyIsIml2Z3Uubm8iLCJsYXJkYWwubm8iLCJsZXJkYWwubm8iLCJsXHhlNnJkYWwubm8i'@;
put 'LCJsb2Rpbmdlbi5ubyIsImxceGY4ZGluZ2VuLm5vIiwibG9yZW5za29nLm5vIiwibFx4ZjhyZW5za29nLm5vIiwibG90ZW4ubm8iLCJsXHhmOHRlbi5ubyIsIm1hbHZpay5ubyIsIm1hc295Lm5vIiwibVx4ZTVzXHhmOHkubm8iLCJtdW9zYXQubm8iLCJtdW9zXHhlMXQubm8iLCJtYW5kYWwu'@;
put 'bm8iLCJtYXJrZXIubm8iLCJtYXJuYXJkYWwubm8iLCJtYXNmam9yZGVuLm5vIiwibWVsYW5kLm5vIiwibWVsZGFsLm5vIiwibWVsaHVzLm5vIiwibWVsb3kubm8iLCJtZWxceGY4eS5ubyIsIm1lcmFrZXIubm8iLCJtZXJceGU1a2VyLm5vIiwibW9hcmVrZS5ubyIsIm1vXHhlNXJla2Uubm8i'@;
put 'LCJtaWRzdW5kLm5vIiwibWlkdHJlLWdhdWxkYWwubm8iLCJtb2RhbGVuLm5vIiwibW9kdW0ubm8iLCJtb2xkZS5ubyIsIm1vc2tlbmVzLm5vIiwibW9zcy5ubyIsIm1vc3Zpay5ubyIsIm1hbHNlbHYubm8iLCJtXHhlNWxzZWx2Lm5vIiwibWFsYXR2dW9wbWkubm8iLCJtXHhlMWxhdHZ1b3Bt'@;
put 'aS5ubyIsIm5hbWRhbHNlaWQubm8iLCJhZWpyaWUubm8iLCJuYW1zb3Mubm8iLCJuYW1zc2tvZ2FuLm5vIiwibmFhbWVzamV2dWVtaWUubm8iLCJuXHhlNVx4ZTVtZXNqZXZ1ZW1pZS5ubyIsImxhYWtlc3Z1ZW1pZS5ubyIsIm5hbm5lc3RhZC5ubyIsIm5hcnZpay5ubyIsIm5hcnZpaWthLm5v'@;
put 'IiwibmF1c3RkYWwubm8iLCJuZWRyZS1laWtlci5ubyIsIm5lcy5ha2Vyc2h1cy5ubyIsIm5lcy5idXNrZXJ1ZC5ubyIsIm5lc25hLm5vIiwibmVzb2RkZW4ubm8iLCJuZXNzZWJ5Lm5vIiwidW5qYXJnYS5ubyIsInVualx4ZTFyZ2Eubm8iLCJuZXNzZXQubm8iLCJuaXNzZWRhbC5ubyIsIm5p'@;
put 'dHRlZGFsLm5vIiwibm9yZC1hdXJkYWwubm8iLCJub3JkLWZyb24ubm8iLCJub3JkLW9kYWwubm8iLCJub3JkZGFsLm5vIiwibm9yZGthcHAubm8iLCJkYXZ2ZW5qYXJnYS5ubyIsImRhdnZlbmpceGUxcmdhLm5vIiwibm9yZHJlLWxhbmQubm8iLCJub3JkcmVpc2Eubm8iLCJyYWlzYS5ubyIs'@;
put 'InJceGUxaXNhLm5vIiwibm9yZS1vZy11dmRhbC5ubyIsIm5vdG9kZGVuLm5vIiwibmFyb3kubm8iLCJuXHhlNnJceGY4eS5ubyIsIm5vdHRlcm95Lm5vIiwiblx4Zjh0dGVyXHhmOHkubm8iLCJvZGRhLm5vIiwib2tzbmVzLm5vIiwiXHhmOGtzbmVzLm5vIiwib3BwZGFsLm5vIiwib3BwZWdh'@;
put 'cmQubm8iLCJvcHBlZ1x4ZTVyZC5ubyIsIm9ya2RhbC5ubyIsIm9ybGFuZC5ubyIsIlx4ZjhybGFuZC5ubyIsIm9yc2tvZy5ubyIsIlx4Zjhyc2tvZy5ubyIsIm9yc3RhLm5vIiwiXHhmOHJzdGEubm8iLCJvcy5oZWRtYXJrLm5vIiwib3MuaG9yZGFsYW5kLm5vIiwib3Nlbi5ubyIsIm9zdGVy'@;
put 'b3kubm8iLCJvc3Rlclx4Zjh5Lm5vIiwib3N0cmUtdG90ZW4ubm8iLCJceGY4c3RyZS10b3Rlbi5ubyIsIm92ZXJoYWxsYS5ubyIsIm92cmUtZWlrZXIubm8iLCJceGY4dnJlLWVpa2VyLm5vIiwib3llci5ubyIsIlx4Zjh5ZXIubm8iLCJveWdhcmRlbi5ubyIsIlx4Zjh5Z2FyZGVuLm5vIiwi'@;
put 'b3lzdHJlLXNsaWRyZS5ubyIsIlx4Zjh5c3RyZS1zbGlkcmUubm8iLCJwb3JzYW5nZXIubm8iLCJwb3JzYW5ndS5ubyIsInBvcnNceGUxXHUwMTRiZ3Uubm8iLCJwb3JzZ3J1bm4ubm8iLCJyYWRveS5ubyIsInJhZFx4Zjh5Lm5vIiwicmFra2VzdGFkLm5vIiwicmFuYS5ubyIsInJ1b3ZhdC5u'@;
put 'byIsInJhbmRhYmVyZy5ubyIsInJhdW1hLm5vIiwicmVuZGFsZW4ubm8iLCJyZW5uZWJ1Lm5vIiwicmVubmVzb3kubm8iLCJyZW5uZXNceGY4eS5ubyIsInJpbmRhbC5ubyIsInJpbmdlYnUubm8iLCJyaW5nZXJpa2Uubm8iLCJyaW5nc2FrZXIubm8iLCJyaXNzYS5ubyIsInJpc29yLm5vIiwi'@;
put 'cmlzXHhmOHIubm8iLCJyb2FuLm5vIiwicm9sbGFnLm5vIiwicnlnZ2Uubm8iLCJyYWxpbmdlbi5ubyIsInJceGU2bGluZ2VuLm5vIiwicm9kb3kubm8iLCJyXHhmOGRceGY4eS5ubyIsInJvbXNrb2cubm8iLCJyXHhmOG1za29nLm5vIiwicm9yb3Mubm8iLCJyXHhmOHJvcy5ubyIsInJvc3Qu'@;
put 'bm8iLCJyXHhmOHN0Lm5vIiwicm95a2VuLm5vIiwiclx4Zjh5a2VuLm5vIiwicm95cnZpay5ubyIsInJceGY4eXJ2aWsubm8iLCJyYWRlLm5vIiwiclx4ZTVkZS5ubyIsInNhbGFuZ2VuLm5vIiwic2llbGxhay5ubyIsInNhbHRkYWwubm8iLCJzYWxhdC5ubyIsInNceGUxbFx4ZTF0Lm5vIiwi'@;
put 'c1x4ZTFsYXQubm8iLCJzYW1uYW5nZXIubm8iLCJzYW5kZS5tb3JlLW9nLXJvbXNkYWwubm8iLCJzYW5kZS5tXHhmOHJlLW9nLXJvbXNkYWwubm8iLCJzYW5kZS52ZXN0Zm9sZC5ubyIsInNhbmRlZmpvcmQubm8iLCJzYW5kbmVzLm5vIiwic2FuZG95Lm5vIiwic2FuZFx4Zjh5Lm5vIiwic2Fy'@;
put 'cHNib3JnLm5vIiwic2F1ZGEubm8iLCJzYXVoZXJhZC5ubyIsInNlbC5ubyIsInNlbGJ1Lm5vIiwic2VsamUubm8iLCJzZWxqb3JkLm5vIiwic2lnZGFsLm5vIiwic2lsamFuLm5vIiwic2lyZGFsLm5vIiwic2thdW4ubm8iLCJza2Vkc21vLm5vIiwic2tpLm5vIiwic2tpZW4ubm8iLCJza2lw'@;
put 'dHZldC5ubyIsInNramVydm95Lm5vIiwic2tqZXJ2XHhmOHkubm8iLCJza2llcnZhLm5vIiwic2tpZXJ2XHhlMS5ubyIsInNramFrLm5vIiwic2tqXHhlNWsubm8iLCJza29kamUubm8iLCJza2FubGFuZC5ubyIsInNrXHhlNW5sYW5kLm5vIiwic2thbml0Lm5vIiwic2tceGUxbml0Lm5vIiwi'@;
put 'c21vbGEubm8iLCJzbVx4ZjhsYS5ubyIsInNuaWxsZmpvcmQubm8iLCJzbmFzYS5ubyIsInNuXHhlNXNhLm5vIiwic25vYXNhLm5vIiwic25hYXNlLm5vIiwic25ceGU1YXNlLm5vIiwic29nbmRhbC5ubyIsInNva25kYWwubm8iLCJzb2xhLm5vIiwic29sdW5kLm5vIiwic29uZ2RhbGVuLm5v'@;
put 'Iiwic29ydGxhbmQubm8iLCJzcHlkZWJlcmcubm8iLCJzdGFuZ2Uubm8iLCJzdGF2YW5nZXIubm8iLCJzdGVpZ2VuLm5vIiwic3RlaW5ramVyLm5vIiwic3Rqb3JkYWwubm8iLCJzdGpceGY4cmRhbC5ubyIsInN0b2trZS5ubyIsInN0b3ItZWx2ZGFsLm5vIiwic3RvcmQubm8iLCJzdG9yZGFs'@;
put 'Lm5vIiwic3RvcmZqb3JkLm5vIiwib21hc3Z1b3RuYS5ubyIsInN0cmFuZC5ubyIsInN0cmFuZGEubm8iLCJzdHJ5bi5ubyIsInN1bGEubm8iLCJzdWxkYWwubm8iLCJzdW5kLm5vIiwic3VubmRhbC5ubyIsInN1cm5hZGFsLm5vIiwic3ZlaW8ubm8iLCJzdmVsdmlrLm5vIiwic3lra3lsdmVu'@;
put 'Lm5vIiwic29nbmUubm8iLCJzXHhmOGduZS5ubyIsInNvbW5hLm5vIiwic1x4ZjhtbmEubm8iLCJzb25kcmUtbGFuZC5ubyIsInNceGY4bmRyZS1sYW5kLm5vIiwic29yLWF1cmRhbC5ubyIsInNceGY4ci1hdXJkYWwubm8iLCJzb3ItZnJvbi5ubyIsInNceGY4ci1mcm9uLm5vIiwic29yLW9k'@;
put 'YWwubm8iLCJzXHhmOHItb2RhbC5ubyIsInNvci12YXJhbmdlci5ubyIsInNceGY4ci12YXJhbmdlci5ubyIsIm1hdHRhLXZhcmpqYXQubm8iLCJtXHhlMXR0YS12XHhlMXJqamF0Lm5vIiwic29yZm9sZC5ubyIsInNceGY4cmZvbGQubm8iLCJzb3JyZWlzYS5ubyIsInNceGY4cnJlaXNhLm5v'@;
put 'Iiwic29ydW0ubm8iLCJzXHhmOHJ1bS5ubyIsInRhbmEubm8iLCJkZWF0bnUubm8iLCJ0aW1lLm5vIiwidGluZ3ZvbGwubm8iLCJ0aW5uLm5vIiwidGplbGRzdW5kLm5vIiwiZGllbGRkYW51b3JyaS5ubyIsInRqb21lLm5vIiwidGpceGY4bWUubm8iLCJ0b2trZS5ubyIsInRvbGdhLm5vIiwi'@;
put 'dG9yc2tlbi5ubyIsInRyYW5veS5ubyIsInRyYW5ceGY4eS5ubyIsInRyb21zby5ubyIsInRyb21zXHhmOC5ubyIsInRyb21zYS5ubyIsInJvbXNhLm5vIiwidHJvbmRoZWltLm5vIiwidHJvYW5kaW4ubm8iLCJ0cnlzaWwubm8iLCJ0cmFuYS5ubyIsInRyXHhlNm5hLm5vIiwidHJvZ3N0YWQu'@;
put 'bm8iLCJ0clx4Zjhnc3RhZC5ubyIsInR2ZWRlc3RyYW5kLm5vIiwidHlkYWwubm8iLCJ0eW5zZXQubm8iLCJ0eXNmam9yZC5ubyIsImRpdnRhc3Z1b2RuYS5ubyIsImRpdnR0YXN2dW90bmEubm8iLCJ0eXNuZXMubm8iLCJ0eXN2YXIubm8iLCJ0eXN2XHhlNnIubm8iLCJ0b25zYmVyZy5ubyIs'@;
put 'InRceGY4bnNiZXJnLm5vIiwidWxsZW5zYWtlci5ubyIsInVsbGVuc3Zhbmcubm8iLCJ1bHZpay5ubyIsInV0c2lyYS5ubyIsInZhZHNvLm5vIiwidmFkc1x4Zjgubm8iLCJjYWhjZXN1b2xvLm5vIiwiXHUwMTBkXHhlMWhjZXN1b2xvLm5vIiwidmFrc2RhbC5ubyIsInZhbGxlLm5vIiwidmFu'@;
put 'Zy5ubyIsInZhbnlsdmVuLm5vIiwidmFyZG8ubm8iLCJ2YXJkXHhmOC5ubyIsInZhcmdnYXQubm8iLCJ2XHhlMXJnZ1x4ZTF0Lm5vIiwidmVmc24ubm8iLCJ2YWFwc3RlLm5vIiwidmVnYS5ubyIsInZlZ2Fyc2hlaS5ubyIsInZlZ1x4ZTVyc2hlaS5ubyIsInZlbm5lc2xhLm5vIiwidmVyZGFs'@;
put 'Lm5vIiwidmVycmFuLm5vIiwidmVzdGJ5Lm5vIiwidmVzdG5lcy5ubyIsInZlc3RyZS1zbGlkcmUubm8iLCJ2ZXN0cmUtdG90ZW4ubm8iLCJ2ZXN0dmFnb3kubm8iLCJ2ZXN0dlx4ZTVnXHhmOHkubm8iLCJ2ZXZlbHN0YWQubm8iLCJ2aWsubm8iLCJ2aWtuYS5ubyIsInZpbmRhZmpvcmQubm8i'@;
put 'LCJ2b2xkYS5ubyIsInZvc3Mubm8iLCJ2YXJveS5ubyIsInZceGU2clx4Zjh5Lm5vIiwidmFnYW4ubm8iLCJ2XHhlNWdhbi5ubyIsInZvYWdhdC5ubyIsInZhZ3NveS5ubyIsInZceGU1Z3NceGY4eS5ubyIsInZhZ2Eubm8iLCJ2XHhlNWdceGU1Lm5vIiwidmFsZXIub3N0Zm9sZC5ubyIsInZc'@;
put 'eGU1bGVyLlx4ZjhzdGZvbGQubm8iLCJ2YWxlci5oZWRtYXJrLm5vIiwidlx4ZTVsZXIuaGVkbWFyay5ubyIsIioubnAiLCJuciIsImJpei5uciIsImluZm8ubnIiLCJnb3YubnIiLCJlZHUubnIiLCJvcmcubnIiLCJuZXQubnIiLCJjb20ubnIiLCJudSIsIm56IiwiYWMubnoiLCJjby5ueiIs'@;
put 'ImNyaS5ueiIsImdlZWsubnoiLCJnZW4ubnoiLCJnb3Z0Lm56IiwiaGVhbHRoLm56IiwiaXdpLm56Iiwia2l3aS5ueiIsIm1hb3JpLm56IiwibWlsLm56IiwibVx1MDEwMW9yaS5ueiIsIm5ldC5ueiIsIm9yZy5ueiIsInBhcmxpYW1lbnQubnoiLCJzY2hvb2wubnoiLCJvbSIsImNvLm9tIiwi'@;
put 'Y29tLm9tIiwiZWR1Lm9tIiwiZ292Lm9tIiwibWVkLm9tIiwibXVzZXVtLm9tIiwibmV0Lm9tIiwib3JnLm9tIiwicHJvLm9tIiwib25pb24iLCJvcmciLCJwYSIsImFjLnBhIiwiZ29iLnBhIiwiY29tLnBhIiwib3JnLnBhIiwic2xkLnBhIiwiZWR1LnBhIiwibmV0LnBhIiwiaW5nLnBhIiwi'@;
put 'YWJvLnBhIiwibWVkLnBhIiwibm9tLnBhIiwicGUiLCJlZHUucGUiLCJnb2IucGUiLCJub20ucGUiLCJtaWwucGUiLCJvcmcucGUiLCJjb20ucGUiLCJuZXQucGUiLCJwZiIsImNvbS5wZiIsIm9yZy5wZiIsImVkdS5wZiIsIioucGciLCJwaCIsImNvbS5waCIsIm5ldC5waCIsIm9yZy5waCIs'@;
put 'Imdvdi5waCIsImVkdS5waCIsIm5nby5waCIsIm1pbC5waCIsImkucGgiLCJwayIsImNvbS5wayIsIm5ldC5wayIsImVkdS5wayIsIm9yZy5wayIsImZhbS5wayIsImJpei5wayIsIndlYi5wayIsImdvdi5wayIsImdvYi5wayIsImdvay5wayIsImdvbi5wayIsImdvcC5wayIsImdvcy5wayIs'@;
put 'ImluZm8ucGsiLCJwbCIsImNvbS5wbCIsIm5ldC5wbCIsIm9yZy5wbCIsImFpZC5wbCIsImFncm8ucGwiLCJhdG0ucGwiLCJhdXRvLnBsIiwiYml6LnBsIiwiZWR1LnBsIiwiZ21pbmEucGwiLCJnc20ucGwiLCJpbmZvLnBsIiwibWFpbC5wbCIsIm1pYXN0YS5wbCIsIm1lZGlhLnBsIiwibWls'@;
put 'LnBsIiwibmllcnVjaG9tb3NjaS5wbCIsIm5vbS5wbCIsInBjLnBsIiwicG93aWF0LnBsIiwicHJpdi5wbCIsInJlYWxlc3RhdGUucGwiLCJyZWwucGwiLCJzZXgucGwiLCJzaG9wLnBsIiwic2tsZXAucGwiLCJzb3MucGwiLCJzemtvbGEucGwiLCJ0YXJnaS5wbCIsInRtLnBsIiwidG91cmlz'@;
put 'bS5wbCIsInRyYXZlbC5wbCIsInR1cnlzdHlrYS5wbCIsImdvdi5wbCIsImFwLmdvdi5wbCIsImljLmdvdi5wbCIsImlzLmdvdi5wbCIsInVzLmdvdi5wbCIsImttcHNwLmdvdi5wbCIsImtwcHNwLmdvdi5wbCIsImt3cHNwLmdvdi5wbCIsInBzcC5nb3YucGwiLCJ3c2tyLmdvdi5wbCIsImt3'@;
put 'cC5nb3YucGwiLCJtdy5nb3YucGwiLCJ1Zy5nb3YucGwiLCJ1bS5nb3YucGwiLCJ1bWlnLmdvdi5wbCIsInVnaW0uZ292LnBsIiwidXBvdy5nb3YucGwiLCJ1dy5nb3YucGwiLCJzdGFyb3N0d28uZ292LnBsIiwicGEuZ292LnBsIiwicG8uZ292LnBsIiwicHNzZS5nb3YucGwiLCJwdXAuZ292'@;
put 'LnBsIiwicnpndy5nb3YucGwiLCJzYS5nb3YucGwiLCJzby5nb3YucGwiLCJzci5nb3YucGwiLCJ3c2EuZ292LnBsIiwic2tvLmdvdi5wbCIsInV6cy5nb3YucGwiLCJ3aWloLmdvdi5wbCIsIndpbmIuZ292LnBsIiwicGluYi5nb3YucGwiLCJ3aW9zLmdvdi5wbCIsIndpdGQuZ292LnBsIiwi'@;
put 'd3ptaXV3Lmdvdi5wbCIsInBpdy5nb3YucGwiLCJ3aXcuZ292LnBsIiwiZ3Jpdy5nb3YucGwiLCJ3aWYuZ292LnBsIiwib3VtLmdvdi5wbCIsInNkbi5nb3YucGwiLCJ6cC5nb3YucGwiLCJ1cHBvLmdvdi5wbCIsIm11cC5nb3YucGwiLCJ3dW96Lmdvdi5wbCIsImtvbnN1bGF0Lmdvdi5wbCIs'@;
put 'Im9pcm0uZ292LnBsIiwiYXVndXN0b3cucGwiLCJiYWJpYS1nb3JhLnBsIiwiYmVkemluLnBsIiwiYmVza2lkeS5wbCIsImJpYWxvd2llemEucGwiLCJiaWFseXN0b2sucGwiLCJiaWVsYXdhLnBsIiwiYmllc3pjemFkeS5wbCIsImJvbGVzbGF3aWVjLnBsIiwiYnlkZ29zemN6LnBsIiwiYnl0'@;
put 'b20ucGwiLCJjaWVzenluLnBsIiwiY3plbGFkei5wbCIsImN6ZXN0LnBsIiwiZGx1Z29sZWthLnBsIiwiZWxibGFnLnBsIiwiZWxrLnBsIiwiZ2xvZ293LnBsIiwiZ25pZXpuby5wbCIsImdvcmxpY2UucGwiLCJncmFqZXdvLnBsIiwiaWxhd2EucGwiLCJqYXdvcnpuby5wbCIsImplbGVuaWEt'@;
put 'Z29yYS5wbCIsImpnb3JhLnBsIiwia2FsaXN6LnBsIiwia2F6aW1pZXJ6LWRvbG55LnBsIiwia2FycGFjei5wbCIsImthcnR1enkucGwiLCJrYXN6dWJ5LnBsIiwia2F0b3dpY2UucGwiLCJrZXBuby5wbCIsImtldHJ6eW4ucGwiLCJrbG9kemtvLnBsIiwia29iaWVyenljZS5wbCIsImtvbG9i'@;
put 'cnplZy5wbCIsImtvbmluLnBsIiwia29uc2tvd29sYS5wbCIsImt1dG5vLnBsIiwibGFweS5wbCIsImxlYm9yay5wbCIsImxlZ25pY2EucGwiLCJsZXphanNrLnBsIiwibGltYW5vd2EucGwiLCJsb216YS5wbCIsImxvd2ljei5wbCIsImx1YmluLnBsIiwibHVrb3cucGwiLCJtYWxib3JrLnBs'@;
put 'IiwibWFsb3BvbHNrYS5wbCIsIm1hem93c3plLnBsIiwibWF6dXJ5LnBsIiwibWllbGVjLnBsIiwibWllbG5vLnBsIiwibXJhZ293by5wbCIsIm5ha2xvLnBsIiwibm93YXJ1ZGEucGwiLCJueXNhLnBsIiwib2xhd2EucGwiLCJvbGVja28ucGwiLCJvbGt1c3oucGwiLCJvbHN6dHluLnBsIiwi'@;
put 'b3BvY3puby5wbCIsIm9wb2xlLnBsIiwib3N0cm9kYS5wbCIsIm9zdHJvbGVrYS5wbCIsIm9zdHJvd2llYy5wbCIsIm9zdHJvd3dsa3AucGwiLCJwaWxhLnBsIiwicGlzei5wbCIsInBvZGhhbGUucGwiLCJwb2RsYXNpZS5wbCIsInBvbGtvd2ljZS5wbCIsInBvbW9yemUucGwiLCJwb21vcnNr'@;
put 'aWUucGwiLCJwcm9jaG93aWNlLnBsIiwicHJ1c3prb3cucGwiLCJwcnpld29yc2sucGwiLCJwdWxhd3kucGwiLCJyYWRvbS5wbCIsInJhd2EtbWF6LnBsIiwicnlibmlrLnBsIiwicnplc3pvdy5wbCIsInNhbm9rLnBsIiwic2VqbnkucGwiLCJzbGFzay5wbCIsInNsdXBzay5wbCIsInNvc25v'@;
put 'd2llYy5wbCIsInN0YWxvd2Etd29sYS5wbCIsInNrb2N6b3cucGwiLCJzdGFyYWNob3dpY2UucGwiLCJzdGFyZ2FyZC5wbCIsInN1d2Fsa2kucGwiLCJzd2lkbmljYS5wbCIsInN3aWVib2R6aW4ucGwiLCJzd2lub3Vqc2NpZS5wbCIsInN6Y3plY2luLnBsIiwic3pjenl0bm8ucGwiLCJ0YXJu'@;
put 'b2JyemVnLnBsIiwidGdvcnkucGwiLCJ0dXJlay5wbCIsInR5Y2h5LnBsIiwidXN0a2EucGwiLCJ3YWxicnp5Y2gucGwiLCJ3YXJtaWEucGwiLCJ3YXJzemF3YS5wbCIsIndhdy5wbCIsIndlZ3Jvdy5wbCIsIndpZWx1bi5wbCIsIndsb2NsLnBsIiwid2xvY2xhd2VrLnBsIiwid29kemlzbGF3'@;
put 'LnBsIiwid29sb21pbi5wbCIsIndyb2NsYXcucGwiLCJ6YWNocG9tb3IucGwiLCJ6YWdhbi5wbCIsInphcm93LnBsIiwiemdvcmEucGwiLCJ6Z29yemVsZWMucGwiLCJwbSIsInBuIiwiZ292LnBuIiwiY28ucG4iLCJvcmcucG4iLCJlZHUucG4iLCJuZXQucG4iLCJwb3N0IiwicHIiLCJjb20u'@;
put 'cHIiLCJuZXQucHIiLCJvcmcucHIiLCJnb3YucHIiLCJlZHUucHIiLCJpc2xhLnByIiwicHJvLnByIiwiYml6LnByIiwiaW5mby5wciIsIm5hbWUucHIiLCJlc3QucHIiLCJwcm9mLnByIiwiYWMucHIiLCJwcm8iLCJhYWEucHJvIiwiYWNhLnBybyIsImFjY3QucHJvIiwiYXZvY2F0LnBybyIs'@;
put 'ImJhci5wcm8iLCJjcGEucHJvIiwiZW5nLnBybyIsImp1ci5wcm8iLCJsYXcucHJvIiwibWVkLnBybyIsInJlY2h0LnBybyIsInBzIiwiZWR1LnBzIiwiZ292LnBzIiwic2VjLnBzIiwicGxvLnBzIiwiY29tLnBzIiwib3JnLnBzIiwibmV0LnBzIiwicHQiLCJuZXQucHQiLCJnb3YucHQiLCJv'@;
put 'cmcucHQiLCJlZHUucHQiLCJpbnQucHQiLCJwdWJsLnB0IiwiY29tLnB0Iiwibm9tZS5wdCIsInB3IiwiY28ucHciLCJuZS5wdyIsIm9yLnB3IiwiZWQucHciLCJnby5wdyIsImJlbGF1LnB3IiwicHkiLCJjb20ucHkiLCJjb29wLnB5IiwiZWR1LnB5IiwiZ292LnB5IiwibWlsLnB5IiwibmV0'@;
put 'LnB5Iiwib3JnLnB5IiwicWEiLCJjb20ucWEiLCJlZHUucWEiLCJnb3YucWEiLCJtaWwucWEiLCJuYW1lLnFhIiwibmV0LnFhIiwib3JnLnFhIiwic2NoLnFhIiwicmUiLCJhc3NvLnJlIiwiY29tLnJlIiwibm9tLnJlIiwicm8iLCJhcnRzLnJvIiwiY29tLnJvIiwiZmlybS5ybyIsImluZm8u'@;
put 'cm8iLCJub20ucm8iLCJudC5ybyIsIm9yZy5ybyIsInJlYy5ybyIsInN0b3JlLnJvIiwidG0ucm8iLCJ3d3cucm8iLCJycyIsImFjLnJzIiwiY28ucnMiLCJlZHUucnMiLCJnb3YucnMiLCJpbi5ycyIsIm9yZy5ycyIsInJ1IiwicnciLCJhYy5ydyIsImNvLnJ3IiwiY29vcC5ydyIsImdvdi5y'@;
put 'dyIsIm1pbC5ydyIsIm5ldC5ydyIsIm9yZy5ydyIsInNhIiwiY29tLnNhIiwibmV0LnNhIiwib3JnLnNhIiwiZ292LnNhIiwibWVkLnNhIiwicHViLnNhIiwiZWR1LnNhIiwic2NoLnNhIiwic2IiLCJjb20uc2IiLCJlZHUuc2IiLCJnb3Yuc2IiLCJuZXQuc2IiLCJvcmcuc2IiLCJzYyIsImNv'@;
put 'bS5zYyIsImdvdi5zYyIsIm5ldC5zYyIsIm9yZy5zYyIsImVkdS5zYyIsInNkIiwiY29tLnNkIiwibmV0LnNkIiwib3JnLnNkIiwiZWR1LnNkIiwibWVkLnNkIiwidHYuc2QiLCJnb3Yuc2QiLCJpbmZvLnNkIiwic2UiLCJhLnNlIiwiYWMuc2UiLCJiLnNlIiwiYmQuc2UiLCJicmFuZC5zZSIs'@;
put 'ImMuc2UiLCJkLnNlIiwiZS5zZSIsImYuc2UiLCJmaC5zZSIsImZoc2suc2UiLCJmaHYuc2UiLCJnLnNlIiwiaC5zZSIsImkuc2UiLCJrLnNlIiwia29tZm9yYi5zZSIsImtvbW11bmFsZm9yYnVuZC5zZSIsImtvbXZ1eC5zZSIsImwuc2UiLCJsYW5iaWIuc2UiLCJtLnNlIiwibi5zZSIsIm5h'@;
put 'dHVyYnJ1a3NneW1uLnNlIiwiby5zZSIsIm9yZy5zZSIsInAuc2UiLCJwYXJ0aS5zZSIsInBwLnNlIiwicHJlc3Muc2UiLCJyLnNlIiwicy5zZSIsInQuc2UiLCJ0bS5zZSIsInUuc2UiLCJ3LnNlIiwieC5zZSIsInkuc2UiLCJ6LnNlIiwic2ciLCJjb20uc2ciLCJuZXQuc2ciLCJvcmcuc2ci'@;
put 'LCJnb3Yuc2ciLCJlZHUuc2ciLCJwZXIuc2ciLCJzaCIsImNvbS5zaCIsIm5ldC5zaCIsImdvdi5zaCIsIm9yZy5zaCIsIm1pbC5zaCIsInNpIiwic2oiLCJzayIsInNsIiwiY29tLnNsIiwibmV0LnNsIiwiZWR1LnNsIiwiZ292LnNsIiwib3JnLnNsIiwic20iLCJzbiIsImFydC5zbiIsImNv'@;
put 'bS5zbiIsImVkdS5zbiIsImdvdXYuc24iLCJvcmcuc24iLCJwZXJzby5zbiIsInVuaXYuc24iLCJzbyIsImNvbS5zbyIsImVkdS5zbyIsImdvdi5zbyIsIm1lLnNvIiwibmV0LnNvIiwib3JnLnNvIiwic3IiLCJzcyIsImJpei5zcyIsImNvbS5zcyIsImVkdS5zcyIsImdvdi5zcyIsIm1lLnNz'@;
put 'IiwibmV0LnNzIiwib3JnLnNzIiwic2NoLnNzIiwic3QiLCJjby5zdCIsImNvbS5zdCIsImNvbnN1bGFkby5zdCIsImVkdS5zdCIsImVtYmFpeGFkYS5zdCIsIm1pbC5zdCIsIm5ldC5zdCIsIm9yZy5zdCIsInByaW5jaXBlLnN0Iiwic2FvdG9tZS5zdCIsInN0b3JlLnN0Iiwic3UiLCJzdiIs'@;
put 'ImNvbS5zdiIsImVkdS5zdiIsImdvYi5zdiIsIm9yZy5zdiIsInJlZC5zdiIsInN4IiwiZ292LnN4Iiwic3kiLCJlZHUuc3kiLCJnb3Yuc3kiLCJuZXQuc3kiLCJtaWwuc3kiLCJjb20uc3kiLCJvcmcuc3kiLCJzeiIsImNvLnN6IiwiYWMuc3oiLCJvcmcuc3oiLCJ0YyIsInRkIiwidGVsIiwi'@;
put 'dGYiLCJ0ZyIsInRoIiwiYWMudGgiLCJjby50aCIsImdvLnRoIiwiaW4udGgiLCJtaS50aCIsIm5ldC50aCIsIm9yLnRoIiwidGoiLCJhYy50aiIsImJpei50aiIsImNvLnRqIiwiY29tLnRqIiwiZWR1LnRqIiwiZ28udGoiLCJnb3YudGoiLCJpbnQudGoiLCJtaWwudGoiLCJuYW1lLnRqIiwi'@;
put 'bmV0LnRqIiwibmljLnRqIiwib3JnLnRqIiwidGVzdC50aiIsIndlYi50aiIsInRrIiwidGwiLCJnb3YudGwiLCJ0bSIsImNvbS50bSIsImNvLnRtIiwib3JnLnRtIiwibmV0LnRtIiwibm9tLnRtIiwiZ292LnRtIiwibWlsLnRtIiwiZWR1LnRtIiwidG4iLCJjb20udG4iLCJlbnMudG4iLCJm'@;
put 'aW4udG4iLCJnb3YudG4iLCJpbmQudG4iLCJpbmZvLnRuIiwiaW50bC50biIsIm1pbmNvbS50biIsIm5hdC50biIsIm5ldC50biIsIm9yZy50biIsInBlcnNvLnRuIiwidG91cmlzbS50biIsInRvIiwiY29tLnRvIiwiZ292LnRvIiwibmV0LnRvIiwib3JnLnRvIiwiZWR1LnRvIiwibWlsLnRv'@;
put 'IiwidHIiLCJhdi50ciIsImJicy50ciIsImJlbC50ciIsImJpei50ciIsImNvbS50ciIsImRyLnRyIiwiZWR1LnRyIiwiZ2VuLnRyIiwiZ292LnRyIiwiaW5mby50ciIsIm1pbC50ciIsImsxMi50ciIsImtlcC50ciIsIm5hbWUudHIiLCJuZXQudHIiLCJvcmcudHIiLCJwb2wudHIiLCJ0ZWwu'@;
put 'dHIiLCJ0c2sudHIiLCJ0di50ciIsIndlYi50ciIsIm5jLnRyIiwiZ292Lm5jLnRyIiwidHQiLCJjby50dCIsImNvbS50dCIsIm9yZy50dCIsIm5ldC50dCIsImJpei50dCIsImluZm8udHQiLCJwcm8udHQiLCJpbnQudHQiLCJjb29wLnR0Iiwiam9icy50dCIsIm1vYmkudHQiLCJ0cmF2ZWwu'@;
put 'dHQiLCJtdXNldW0udHQiLCJhZXJvLnR0IiwibmFtZS50dCIsImdvdi50dCIsImVkdS50dCIsInR2IiwidHciLCJlZHUudHciLCJnb3YudHciLCJtaWwudHciLCJjb20udHciLCJuZXQudHciLCJvcmcudHciLCJpZHYudHciLCJnYW1lLnR3IiwiZWJpei50dyIsImNsdWIudHciLCJcdTdkYjJc'@;
put 'dThkZWYudHciLCJcdTdkNDRcdTdlNTQudHciLCJcdTU1NDZcdTY5NmQudHciLCJ0eiIsImFjLnR6IiwiY28udHoiLCJnby50eiIsImhvdGVsLnR6IiwiaW5mby50eiIsIm1lLnR6IiwibWlsLnR6IiwibW9iaS50eiIsIm5lLnR6Iiwib3IudHoiLCJzYy50eiIsInR2LnR6IiwidWEiLCJjb20u'@;
put 'dWEiLCJlZHUudWEiLCJnb3YudWEiLCJpbi51YSIsIm5ldC51YSIsIm9yZy51YSIsImNoZXJrYXNzeS51YSIsImNoZXJrYXN5LnVhIiwiY2hlcm5pZ292LnVhIiwiY2hlcm5paGl2LnVhIiwiY2hlcm5pdnRzaS51YSIsImNoZXJub3Z0c3kudWEiLCJjay51YSIsImNuLnVhIiwiY3IudWEiLCJj'@;
put 'cmltZWEudWEiLCJjdi51YSIsImRuLnVhIiwiZG5lcHJvcGV0cm92c2sudWEiLCJkbmlwcm9wZXRyb3Zzay51YSIsImRvbmV0c2sudWEiLCJkcC51YSIsImlmLnVhIiwiaXZhbm8tZnJhbmtpdnNrLnVhIiwia2gudWEiLCJraGFya2l2LnVhIiwia2hhcmtvdi51YSIsImtoZXJzb24udWEiLCJr'@;
put 'aG1lbG5pdHNraXkudWEiLCJraG1lbG55dHNreWkudWEiLCJraWV2LnVhIiwia2lyb3ZvZ3JhZC51YSIsImttLnVhIiwia3IudWEiLCJrcnltLnVhIiwia3MudWEiLCJrdi51YSIsImt5aXYudWEiLCJsZy51YSIsImx0LnVhIiwibHVnYW5zay51YSIsImx1dHNrLnVhIiwibHYudWEiLCJsdml2'@;
put 'LnVhIiwibWsudWEiLCJteWtvbGFpdi51YSIsIm5pa29sYWV2LnVhIiwib2QudWEiLCJvZGVzYS51YSIsIm9kZXNzYS51YSIsInBsLnVhIiwicG9sdGF2YS51YSIsInJpdm5lLnVhIiwicm92bm8udWEiLCJydi51YSIsInNiLnVhIiwic2ViYXN0b3BvbC51YSIsInNldmFzdG9wb2wudWEiLCJz'@;
put 'bS51YSIsInN1bXkudWEiLCJ0ZS51YSIsInRlcm5vcGlsLnVhIiwidXoudWEiLCJ1emhnb3JvZC51YSIsInZpbm5pY2EudWEiLCJ2aW5ueXRzaWEudWEiLCJ2bi51YSIsInZvbHluLnVhIiwieWFsdGEudWEiLCJ6YXBvcml6aHpoZS51YSIsInphcG9yaXpoemhpYS51YSIsInpoaXRvbWlyLnVh'@;
put 'Iiwiemh5dG9teXIudWEiLCJ6cC51YSIsInp0LnVhIiwidWciLCJjby51ZyIsIm9yLnVnIiwiYWMudWciLCJzYy51ZyIsImdvLnVnIiwibmUudWciLCJjb20udWciLCJvcmcudWciLCJ1ayIsImFjLnVrIiwiY28udWsiLCJnb3YudWsiLCJsdGQudWsiLCJtZS51ayIsIm5ldC51ayIsIm5ocy51'@;
put 'ayIsIm9yZy51ayIsInBsYy51ayIsInBvbGljZS51ayIsIiouc2NoLnVrIiwidXMiLCJkbmkudXMiLCJmZWQudXMiLCJpc2EudXMiLCJraWRzLnVzIiwibnNuLnVzIiwiYWsudXMiLCJhbC51cyIsImFyLnVzIiwiYXMudXMiLCJhei51cyIsImNhLnVzIiwiY28udXMiLCJjdC51cyIsImRjLnVz'@;
put 'IiwiZGUudXMiLCJmbC51cyIsImdhLnVzIiwiZ3UudXMiLCJoaS51cyIsImlhLnVzIiwiaWQudXMiLCJpbC51cyIsImluLnVzIiwia3MudXMiLCJreS51cyIsImxhLnVzIiwibWEudXMiLCJtZC51cyIsIm1lLnVzIiwibWkudXMiLCJtbi51cyIsIm1vLnVzIiwibXMudXMiLCJtdC51cyIsIm5j'@;
put 'LnVzIiwibmQudXMiLCJuZS51cyIsIm5oLnVzIiwibmoudXMiLCJubS51cyIsIm52LnVzIiwibnkudXMiLCJvaC51cyIsIm9rLnVzIiwib3IudXMiLCJwYS51cyIsInByLnVzIiwicmkudXMiLCJzYy51cyIsInNkLnVzIiwidG4udXMiLCJ0eC51cyIsInV0LnVzIiwidmkudXMiLCJ2dC51cyIs'@;
put 'InZhLnVzIiwid2EudXMiLCJ3aS51cyIsInd2LnVzIiwid3kudXMiLCJrMTIuYWsudXMiLCJrMTIuYWwudXMiLCJrMTIuYXIudXMiLCJrMTIuYXMudXMiLCJrMTIuYXoudXMiLCJrMTIuY2EudXMiLCJrMTIuY28udXMiLCJrMTIuY3QudXMiLCJrMTIuZGMudXMiLCJrMTIuZGUudXMiLCJrMTIu'@;
put 'ZmwudXMiLCJrMTIuZ2EudXMiLCJrMTIuZ3UudXMiLCJrMTIuaWEudXMiLCJrMTIuaWQudXMiLCJrMTIuaWwudXMiLCJrMTIuaW4udXMiLCJrMTIua3MudXMiLCJrMTIua3kudXMiLCJrMTIubGEudXMiLCJrMTIubWEudXMiLCJrMTIubWQudXMiLCJrMTIubWUudXMiLCJrMTIubWkudXMiLCJr'@;
put 'MTIubW4udXMiLCJrMTIubW8udXMiLCJrMTIubXMudXMiLCJrMTIubXQudXMiLCJrMTIubmMudXMiLCJrMTIubmUudXMiLCJrMTIubmgudXMiLCJrMTIubmoudXMiLCJrMTIubm0udXMiLCJrMTIubnYudXMiLCJrMTIubnkudXMiLCJrMTIub2gudXMiLCJrMTIub2sudXMiLCJrMTIub3IudXMi'@;
put 'LCJrMTIucGEudXMiLCJrMTIucHIudXMiLCJrMTIuc2MudXMiLCJrMTIudG4udXMiLCJrMTIudHgudXMiLCJrMTIudXQudXMiLCJrMTIudmkudXMiLCJrMTIudnQudXMiLCJrMTIudmEudXMiLCJrMTIud2EudXMiLCJrMTIud2kudXMiLCJrMTIud3kudXMiLCJjYy5hay51cyIsImNjLmFsLnVz'@;
put 'IiwiY2MuYXIudXMiLCJjYy5hcy51cyIsImNjLmF6LnVzIiwiY2MuY2EudXMiLCJjYy5jby51cyIsImNjLmN0LnVzIiwiY2MuZGMudXMiLCJjYy5kZS51cyIsImNjLmZsLnVzIiwiY2MuZ2EudXMiLCJjYy5ndS51cyIsImNjLmhpLnVzIiwiY2MuaWEudXMiLCJjYy5pZC51cyIsImNjLmlsLnVz'@;
put 'IiwiY2MuaW4udXMiLCJjYy5rcy51cyIsImNjLmt5LnVzIiwiY2MubGEudXMiLCJjYy5tYS51cyIsImNjLm1kLnVzIiwiY2MubWUudXMiLCJjYy5taS51cyIsImNjLm1uLnVzIiwiY2MubW8udXMiLCJjYy5tcy51cyIsImNjLm10LnVzIiwiY2MubmMudXMiLCJjYy5uZC51cyIsImNjLm5lLnVz'@;
put 'IiwiY2MubmgudXMiLCJjYy5uai51cyIsImNjLm5tLnVzIiwiY2MubnYudXMiLCJjYy5ueS51cyIsImNjLm9oLnVzIiwiY2Mub2sudXMiLCJjYy5vci51cyIsImNjLnBhLnVzIiwiY2MucHIudXMiLCJjYy5yaS51cyIsImNjLnNjLnVzIiwiY2Muc2QudXMiLCJjYy50bi51cyIsImNjLnR4LnVz'@;
put 'IiwiY2MudXQudXMiLCJjYy52aS51cyIsImNjLnZ0LnVzIiwiY2MudmEudXMiLCJjYy53YS51cyIsImNjLndpLnVzIiwiY2Mud3YudXMiLCJjYy53eS51cyIsImxpYi5hay51cyIsImxpYi5hbC51cyIsImxpYi5hci51cyIsImxpYi5hcy51cyIsImxpYi5hei51cyIsImxpYi5jYS51cyIsImxp'@;
put 'Yi5jby51cyIsImxpYi5jdC51cyIsImxpYi5kYy51cyIsImxpYi5mbC51cyIsImxpYi5nYS51cyIsImxpYi5ndS51cyIsImxpYi5oaS51cyIsImxpYi5pYS51cyIsImxpYi5pZC51cyIsImxpYi5pbC51cyIsImxpYi5pbi51cyIsImxpYi5rcy51cyIsImxpYi5reS51cyIsImxpYi5sYS51cyIs'@;
put 'ImxpYi5tYS51cyIsImxpYi5tZC51cyIsImxpYi5tZS51cyIsImxpYi5taS51cyIsImxpYi5tbi51cyIsImxpYi5tby51cyIsImxpYi5tcy51cyIsImxpYi5tdC51cyIsImxpYi5uYy51cyIsImxpYi5uZC51cyIsImxpYi5uZS51cyIsImxpYi5uaC51cyIsImxpYi5uai51cyIsImxpYi5ubS51'@;
put 'cyIsImxpYi5udi51cyIsImxpYi5ueS51cyIsImxpYi5vaC51cyIsImxpYi5vay51cyIsImxpYi5vci51cyIsImxpYi5wYS51cyIsImxpYi5wci51cyIsImxpYi5yaS51cyIsImxpYi5zYy51cyIsImxpYi5zZC51cyIsImxpYi50bi51cyIsImxpYi50eC51cyIsImxpYi51dC51cyIsImxpYi52'@;
put 'aS51cyIsImxpYi52dC51cyIsImxpYi52YS51cyIsImxpYi53YS51cyIsImxpYi53aS51cyIsImxpYi53eS51cyIsInB2dC5rMTIubWEudXMiLCJjaHRyLmsxMi5tYS51cyIsInBhcm9jaC5rMTIubWEudXMiLCJhbm4tYXJib3IubWkudXMiLCJjb2cubWkudXMiLCJkc3QubWkudXMiLCJlYXRv'@;
put 'bi5taS51cyIsImdlbi5taS51cyIsIm11cy5taS51cyIsInRlYy5taS51cyIsIndhc2h0ZW5hdy5taS51cyIsInV5IiwiY29tLnV5IiwiZWR1LnV5IiwiZ3ViLnV5IiwibWlsLnV5IiwibmV0LnV5Iiwib3JnLnV5IiwidXoiLCJjby51eiIsImNvbS51eiIsIm5ldC51eiIsIm9yZy51eiIsInZh'@;
put 'IiwidmMiLCJjb20udmMiLCJuZXQudmMiLCJvcmcudmMiLCJnb3YudmMiLCJtaWwudmMiLCJlZHUudmMiLCJ2ZSIsImFydHMudmUiLCJiaWIudmUiLCJjby52ZSIsImNvbS52ZSIsImUxMi52ZSIsImVkdS52ZSIsImZpcm0udmUiLCJnb2IudmUiLCJnb3YudmUiLCJpbmZvLnZlIiwiaW50LnZl'@;
put 'IiwibWlsLnZlIiwibmV0LnZlIiwibm9tLnZlIiwib3JnLnZlIiwicmFyLnZlIiwicmVjLnZlIiwic3RvcmUudmUiLCJ0ZWMudmUiLCJ3ZWIudmUiLCJ2ZyIsInZpIiwiY28udmkiLCJjb20udmkiLCJrMTIudmkiLCJuZXQudmkiLCJvcmcudmkiLCJ2biIsImNvbS52biIsIm5ldC52biIsIm9y'@;
put 'Zy52biIsImVkdS52biIsImdvdi52biIsImludC52biIsImFjLnZuIiwiYml6LnZuIiwiaW5mby52biIsIm5hbWUudm4iLCJwcm8udm4iLCJoZWFsdGgudm4iLCJ2dSIsImNvbS52dSIsImVkdS52dSIsIm5ldC52dSIsIm9yZy52dSIsIndmIiwid3MiLCJjb20ud3MiLCJuZXQud3MiLCJvcmcu'@;
put 'd3MiLCJnb3Yud3MiLCJlZHUud3MiLCJ5dCIsIlx1MDYyN1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYyN1x1MDYyYSIsIlx1MDU3MFx1MDU2MVx1MDU3NSIsIlx1MDlhY1x1MDliZVx1MDk4Mlx1MDliMlx1MDliZSIsIlx1MDQzMVx1MDQzMyIsIlx1MDYyN1x1MDY0NFx1MDYyOFx1MDYyZFx1MDYz'@;
put 'MVx1MDY0YVx1MDY0NiIsIlx1MDQzMVx1MDQzNVx1MDQzYiIsIlx1NGUyZFx1NTZmZCIsIlx1NGUyZFx1NTcwYiIsIlx1MDYyN1x1MDY0NFx1MDYyY1x1MDYzMlx1MDYyN1x1MDYyNlx1MDYzMSIsIlx1MDY0NVx1MDYzNVx1MDYzMSIsIlx1MDQzNVx1MDQ0ZSIsIlx1MDNiNVx1MDNjNSIsIlx1'@;
put 'MDY0NVx1MDY0OFx1MDYzMVx1MDY0YVx1MDYyYVx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyNyIsIlx1MTBkMlx1MTBkNCIsIlx1MDNiNVx1MDNiYiIsIlx1OTk5OVx1NmUyZiIsIlx1NTE2Y1x1NTNmOC5cdTk5OTlcdTZlMmYiLCJcdTY1NTlcdTgwYjIuXHU5OTk5XHU2ZTJmIiwiXHU2NTNmXHU1'@;
put 'ZTljLlx1OTk5OVx1NmUyZiIsIlx1NTAwYlx1NGViYS5cdTk5OTlcdTZlMmYiLCJcdTdkYjJcdTdkNjEuXHU5OTk5XHU2ZTJmIiwiXHU3ZDQ0XHU3ZTU0Llx1OTk5OVx1NmUyZiIsIlx1MGNhZFx1MGNiZVx1MGNiMFx1MGNhNCIsIlx1MGIyZFx1MGIzZVx1MGIzMFx1MGIyNCIsIlx1MDlhZFx1'@;
put 'MDliZVx1MDlmMFx1MDlhNCIsIlx1MDkyZFx1MDkzZVx1MDkzMFx1MDkyNFx1MDkyZVx1MDk0ZCIsIlx1MDkyZFx1MDkzZVx1MDkzMFx1MDk0Ylx1MDkyNCIsIlx1MDY4MFx1MDYyN1x1MDYzMVx1MDYyYSIsIlx1MGQyZFx1MGQzZVx1MGQzMFx1MGQyNFx1MGQwMiIsIlx1MDkyZFx1MDkzZVx1'@;
put 'MDkzMFx1MDkyNCIsIlx1MDYyOFx1MDYyN1x1MDYzMVx1MDYyYSIsIlx1MDYyOFx1MDZiZVx1MDYyN1x1MDYzMVx1MDYyYSIsIlx1MGMyZFx1MGMzZVx1MGMzMFx1MGMyNFx1MGM0ZCIsIlx1MGFhZFx1MGFiZVx1MGFiMFx1MGFhNCIsIlx1MGEyZFx1MGEzZVx1MGEzMFx1MGEyNCIsIlx1MDlh'@;
put 'ZFx1MDliZVx1MDliMFx1MDlhNCIsIlx1MGI4N1x1MGJhOFx1MGJjZFx1MGJhNFx1MGJiZlx1MGJhZlx1MGJiZSIsIlx1MDYyN1x1MDZjY1x1MDYzMVx1MDYyN1x1MDY0NiIsIlx1MDYyN1x1MDY0YVx1MDYzMVx1MDYyN1x1MDY0NiIsIlx1MDYzOVx1MDYzMVx1MDYyN1x1MDY0MiIsIlx1MDYy'@;
put 'N1x1MDY0NFx1MDYyN1x1MDYzMVx1MDYyZlx1MDY0NiIsIlx1ZDU1Y1x1YWQ2ZCIsIlx1MDQ5Ylx1MDQzMFx1MDQzNyIsIlx1MGVhNVx1MGViMlx1MGVhNyIsIlx1MGRiZFx1MGQ4Mlx1MGQ5YVx1MGRjZiIsIlx1MGI4N1x1MGJiMlx1MGI5OVx1MGJjZFx1MGI5NVx1MGJjOCIsIlx1MDYyN1x1'@;
put 'MDY0NFx1MDY0NVx1MDYzYVx1MDYzMVx1MDYyOCIsIlx1MDQzY1x1MDQzYVx1MDQzNCIsIlx1MDQzY1x1MDQzZVx1MDQzZCIsIlx1NmZiM1x1OTU4MCIsIlx1NmZiM1x1OTVlOCIsIlx1MDY0NVx1MDY0NFx1MDY0YVx1MDYzM1x1MDY0YVx1MDYyNyIsIlx1MDYzOVx1MDY0NVx1MDYyN1x1MDY0'@;
put 'NiIsIlx1MDY3ZVx1MDYyN1x1MDZhOVx1MDYzM1x1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDY3ZVx1MDYyN1x1MDY0M1x1MDYzM1x1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDY0MVx1MDY0NFx1MDYzM1x1MDYzN1x1MDY0YVx1MDY0NiIsIlx1MDQ0MVx1MDQ0MFx1MDQzMSIsIlx1MDQzZlx1MDQ0'@;
put 'MC5cdTA0NDFcdTA0NDBcdTA0MzEiLCJcdTA0M2VcdTA0NDBcdTA0MzMuXHUwNDQxXHUwNDQwXHUwNDMxIiwiXHUwNDNlXHUwNDMxXHUwNDQwLlx1MDQ0MVx1MDQ0MFx1MDQzMSIsIlx1MDQzZVx1MDQzNC5cdTA0NDFcdTA0NDBcdTA0MzEiLCJcdTA0NDNcdTA0M2ZcdTA0NDAuXHUwNDQxXHUw'@;
put 'NDQwXHUwNDMxIiwiXHUwNDMwXHUwNDNhLlx1MDQ0MVx1MDQ0MFx1MDQzMSIsIlx1MDQ0MFx1MDQ0NCIsIlx1MDY0Mlx1MDYzN1x1MDYzMSIsIlx1MDYyN1x1MDY0NFx1MDYzM1x1MDYzOVx1MDY0OFx1MDYyZlx1MDY0YVx1MDYyOSIsIlx1MDYyN1x1MDY0NFx1MDYzM1x1MDYzOVx1MDY0OFx1'@;
put 'MDYyZlx1MDZjY1x1MDYyOSIsIlx1MDYyN1x1MDY0NFx1MDYzM1x1MDYzOVx1MDY0OFx1MDYyZlx1MDZjY1x1MDZjMyIsIlx1MDYyN1x1MDY0NFx1MDYzM1x1MDYzOVx1MDY0OFx1MDYyZlx1MDY0YVx1MDY0NyIsIlx1MDYzM1x1MDY0OFx1MDYyZlx1MDYyN1x1MDY0NiIsIlx1NjViMFx1NTJh'@;
put 'MFx1NTc2MSIsIlx1MGI5YVx1MGJiZlx1MGI5OVx1MGJjZFx1MGI5NVx1MGJhYVx1MGJjZFx1MGJhYVx1MGJjMlx1MGJiMFx1MGJjZCIsIlx1MDYzM1x1MDY0OFx1MDYzMVx1MDY0YVx1MDYyOSIsIlx1MDYzM1x1MDY0OFx1MDYzMVx1MDY0YVx1MDYyNyIsIlx1MGU0NFx1MGUxN1x1MGUyMiIs'@;
put 'Ilx1MGUyOFx1MGUzNlx1MGUwMVx1MGUyOVx1MGUzMi5cdTBlNDRcdTBlMTdcdTBlMjIiLCJcdTBlMThcdTBlMzhcdTBlMjNcdTBlMDFcdTBlMzRcdTBlMDguXHUwZTQ0XHUwZTE3XHUwZTIyIiwiXHUwZTIzXHUwZTMxXHUwZTEwXHUwZTFhXHUwZTMyXHUwZTI1Llx1MGU0NFx1MGUxN1x1MGUy'@;
put 'MiIsIlx1MGUxN1x1MGUyYlx1MGUzMlx1MGUyMy5cdTBlNDRcdTBlMTdcdTBlMjIiLCJcdTBlNDBcdTBlMTlcdTBlNDdcdTBlMTUuXHUwZTQ0XHUwZTE3XHUwZTIyIiwiXHUwZTJkXHUwZTA3XHUwZTA0XHUwZTRjXHUwZTAxXHUwZTIzLlx1MGU0NFx1MGUxN1x1MGUyMiIsIlx1MDYyYVx1MDY0'@;
put 'OFx1MDY0Nlx1MDYzMyIsIlx1NTNmMFx1NzA2MyIsIlx1NTNmMFx1NmU3ZSIsIlx1ODFmYVx1NzA2MyIsIlx1MDQ0M1x1MDQzYVx1MDQ0MCIsIlx1MDYyN1x1MDY0NFx1MDY0YVx1MDY0NVx1MDY0NiIsInh4eCIsInllIiwiY29tLnllIiwiZWR1LnllIiwiZ292LnllIiwibmV0LnllIiwibWls'@;
put 'LnllIiwib3JnLnllIiwiYWMuemEiLCJhZ3JpYy56YSIsImFsdC56YSIsImNvLnphIiwiZWR1LnphIiwiZ292LnphIiwiZ3JvbmRhci56YSIsImxhdy56YSIsIm1pbC56YSIsIm5ldC56YSIsIm5nby56YSIsIm5pYy56YSIsIm5pcy56YSIsIm5vbS56YSIsIm9yZy56YSIsInNjaG9vbC56YSIs'@;
put 'InRtLnphIiwid2ViLnphIiwiem0iLCJhYy56bSIsImJpei56bSIsImNvLnptIiwiY29tLnptIiwiZWR1LnptIiwiZ292LnptIiwiaW5mby56bSIsIm1pbC56bSIsIm5ldC56bSIsIm9yZy56bSIsInNjaC56bSIsInp3IiwiYWMuenciLCJjby56dyIsImdvdi56dyIsIm1pbC56dyIsIm9yZy56'@;
put 'dyIsImFhYSIsImFhcnAiLCJhYmFydGgiLCJhYmIiLCJhYmJvdHQiLCJhYmJ2aWUiLCJhYmMiLCJhYmxlIiwiYWJvZ2FkbyIsImFidWRoYWJpIiwiYWNhZGVteSIsImFjY2VudHVyZSIsImFjY291bnRhbnQiLCJhY2NvdW50YW50cyIsImFjbyIsImFjdG9yIiwiYWRhYyIsImFkcyIsImFkdWx0'@;
put 'IiwiYWVnIiwiYWV0bmEiLCJhZmwiLCJhZnJpY2EiLCJhZ2FraGFuIiwiYWdlbmN5IiwiYWlnIiwiYWlyYnVzIiwiYWlyZm9yY2UiLCJhaXJ0ZWwiLCJha2RuIiwiYWxmYXJvbWVvIiwiYWxpYmFiYSIsImFsaXBheSIsImFsbGZpbmFueiIsImFsbHN0YXRlIiwiYWxseSIsImFsc2FjZSIsImFs'@;
put 'c3RvbSIsImFtYXpvbiIsImFtZXJpY2FuZXhwcmVzcyIsImFtZXJpY2FuZmFtaWx5IiwiYW1leCIsImFtZmFtIiwiYW1pY2EiLCJhbXN0ZXJkYW0iLCJhbmFseXRpY3MiLCJhbmRyb2lkIiwiYW5xdWFuIiwiYW56IiwiYW9sIiwiYXBhcnRtZW50cyIsImFwcCIsImFwcGxlIiwiYXF1YXJlbGxl'@;
put 'IiwiYXJhYiIsImFyYW1jbyIsImFyY2hpIiwiYXJteSIsImFydCIsImFydGUiLCJhc2RhIiwiYXNzb2NpYXRlcyIsImF0aGxldGEiLCJhdHRvcm5leSIsImF1Y3Rpb24iLCJhdWRpIiwiYXVkaWJsZSIsImF1ZGlvIiwiYXVzcG9zdCIsImF1dGhvciIsImF1dG8iLCJhdXRvcyIsImF2aWFuY2Ei'@;
put 'LCJhd3MiLCJheGEiLCJhenVyZSIsImJhYnkiLCJiYWlkdSIsImJhbmFtZXgiLCJiYW5hbmFyZXB1YmxpYyIsImJhbmQiLCJiYW5rIiwiYmFyIiwiYmFyY2Vsb25hIiwiYmFyY2xheWNhcmQiLCJiYXJjbGF5cyIsImJhcmVmb290IiwiYmFyZ2FpbnMiLCJiYXNlYmFsbCIsImJhc2tldGJhbGwi'@;
put 'LCJiYXVoYXVzIiwiYmF5ZXJuIiwiYmJjIiwiYmJ0IiwiYmJ2YSIsImJjZyIsImJjbiIsImJlYXRzIiwiYmVhdXR5IiwiYmVlciIsImJlbnRsZXkiLCJiZXJsaW4iLCJiZXN0IiwiYmVzdGJ1eSIsImJldCIsImJoYXJ0aSIsImJpYmxlIiwiYmlkIiwiYmlrZSIsImJpbmciLCJiaW5nbyIsImJp'@;
put 'byIsImJsYWNrIiwiYmxhY2tmcmlkYXkiLCJibG9ja2J1c3RlciIsImJsb2ciLCJibG9vbWJlcmciLCJibHVlIiwiYm1zIiwiYm13IiwiYm5wcGFyaWJhcyIsImJvYXRzIiwiYm9laHJpbmdlciIsImJvZmEiLCJib20iLCJib25kIiwiYm9vIiwiYm9vayIsImJvb2tpbmciLCJib3NjaCIsImJv'@;
put 'c3RpayIsImJvc3RvbiIsImJvdCIsImJvdXRpcXVlIiwiYm94IiwiYnJhZGVzY28iLCJicmlkZ2VzdG9uZSIsImJyb2Fkd2F5IiwiYnJva2VyIiwiYnJvdGhlciIsImJydXNzZWxzIiwiYnVnYXR0aSIsImJ1aWxkIiwiYnVpbGRlcnMiLCJidXNpbmVzcyIsImJ1eSIsImJ1enoiLCJiemgiLCJj'@;
put 'YWIiLCJjYWZlIiwiY2FsIiwiY2FsbCIsImNhbHZpbmtsZWluIiwiY2FtIiwiY2FtZXJhIiwiY2FtcCIsImNhbmNlcnJlc2VhcmNoIiwiY2Fub24iLCJjYXBldG93biIsImNhcGl0YWwiLCJjYXBpdGFsb25lIiwiY2FyIiwiY2FyYXZhbiIsImNhcmRzIiwiY2FyZSIsImNhcmVlciIsImNhcmVl'@;
put 'cnMiLCJjYXJzIiwiY2FzYSIsImNhc2UiLCJjYXNoIiwiY2FzaW5vIiwiY2F0ZXJpbmciLCJjYXRob2xpYyIsImNiYSIsImNibiIsImNicmUiLCJjYnMiLCJjZW50ZXIiLCJjZW8iLCJjZXJuIiwiY2ZhIiwiY2ZkIiwiY2hhbmVsIiwiY2hhbm5lbCIsImNoYXJpdHkiLCJjaGFzZSIsImNoYXQi'@;
put 'LCJjaGVhcCIsImNoaW50YWkiLCJjaHJpc3RtYXMiLCJjaHJvbWUiLCJjaHVyY2giLCJjaXByaWFuaSIsImNpcmNsZSIsImNpc2NvIiwiY2l0YWRlbCIsImNpdGkiLCJjaXRpYyIsImNpdHkiLCJjaXR5ZWF0cyIsImNsYWltcyIsImNsZWFuaW5nIiwiY2xpY2siLCJjbGluaWMiLCJjbGluaXF1'@;
put 'ZSIsImNsb3RoaW5nIiwiY2xvdWQiLCJjbHViIiwiY2x1Ym1lZCIsImNvYWNoIiwiY29kZXMiLCJjb2ZmZWUiLCJjb2xsZWdlIiwiY29sb2duZSIsImNvbWNhc3QiLCJjb21tYmFuayIsImNvbW11bml0eSIsImNvbXBhbnkiLCJjb21wYXJlIiwiY29tcHV0ZXIiLCJjb21zZWMiLCJjb25kb3Mi'@;
put 'LCJjb25zdHJ1Y3Rpb24iLCJjb25zdWx0aW5nIiwiY29udGFjdCIsImNvbnRyYWN0b3JzIiwiY29va2luZyIsImNvb2tpbmdjaGFubmVsIiwiY29vbCIsImNvcnNpY2EiLCJjb3VudHJ5IiwiY291cG9uIiwiY291cG9ucyIsImNvdXJzZXMiLCJjcGEiLCJjcmVkaXQiLCJjcmVkaXRjYXJkIiwi'@;
put 'Y3JlZGl0dW5pb24iLCJjcmlja2V0IiwiY3Jvd24iLCJjcnMiLCJjcnVpc2UiLCJjcnVpc2VzIiwiY3Vpc2luZWxsYSIsImN5bXJ1IiwiY3lvdSIsImRhYnVyIiwiZGFkIiwiZGFuY2UiLCJkYXRhIiwiZGF0ZSIsImRhdGluZyIsImRhdHN1biIsImRheSIsImRjbGsiLCJkZHMiLCJkZWFsIiwi'@;
put 'ZGVhbGVyIiwiZGVhbHMiLCJkZWdyZWUiLCJkZWxpdmVyeSIsImRlbGwiLCJkZWxvaXR0ZSIsImRlbHRhIiwiZGVtb2NyYXQiLCJkZW50YWwiLCJkZW50aXN0IiwiZGVzaSIsImRlc2lnbiIsImRldiIsImRobCIsImRpYW1vbmRzIiwiZGlldCIsImRpZ2l0YWwiLCJkaXJlY3QiLCJkaXJlY3Rv'@;
put 'cnkiLCJkaXNjb3VudCIsImRpc2NvdmVyIiwiZGlzaCIsImRpeSIsImRucCIsImRvY3MiLCJkb2N0b3IiLCJkb2ciLCJkb21haW5zIiwiZG90IiwiZG93bmxvYWQiLCJkcml2ZSIsImR0diIsImR1YmFpIiwiZHVubG9wIiwiZHVwb250IiwiZHVyYmFuIiwiZHZhZyIsImR2ciIsImVhcnRoIiwi'@;
put 'ZWF0IiwiZWNvIiwiZWRla2EiLCJlZHVjYXRpb24iLCJlbWFpbCIsImVtZXJjayIsImVuZXJneSIsImVuZ2luZWVyIiwiZW5naW5lZXJpbmciLCJlbnRlcnByaXNlcyIsImVwc29uIiwiZXF1aXBtZW50IiwiZXJpY3Nzb24iLCJlcm5pIiwiZXNxIiwiZXN0YXRlIiwiZXRpc2FsYXQiLCJldXJv'@;
put 'dmlzaW9uIiwiZXVzIiwiZXZlbnRzIiwiZXhjaGFuZ2UiLCJleHBlcnQiLCJleHBvc2VkIiwiZXhwcmVzcyIsImV4dHJhc3BhY2UiLCJmYWdlIiwiZmFpbCIsImZhaXJ3aW5kcyIsImZhaXRoIiwiZmFtaWx5IiwiZmFuIiwiZmFucyIsImZhcm0iLCJmYXJtZXJzIiwiZmFzaGlvbiIsImZhc3Qi'@;
put 'LCJmZWRleCIsImZlZWRiYWNrIiwiZmVycmFyaSIsImZlcnJlcm8iLCJmaWF0IiwiZmlkZWxpdHkiLCJmaWRvIiwiZmlsbSIsImZpbmFsIiwiZmluYW5jZSIsImZpbmFuY2lhbCIsImZpcmUiLCJmaXJlc3RvbmUiLCJmaXJtZGFsZSIsImZpc2giLCJmaXNoaW5nIiwiZml0IiwiZml0bmVzcyIs'@;
put 'ImZsaWNrciIsImZsaWdodHMiLCJmbGlyIiwiZmxvcmlzdCIsImZsb3dlcnMiLCJmbHkiLCJmb28iLCJmb29kIiwiZm9vZG5ldHdvcmsiLCJmb290YmFsbCIsImZvcmQiLCJmb3JleCIsImZvcnNhbGUiLCJmb3J1bSIsImZvdW5kYXRpb24iLCJmb3giLCJmcmVlIiwiZnJlc2VuaXVzIiwiZnJs'@;
put 'IiwiZnJvZ2FucyIsImZyb250ZG9vciIsImZyb250aWVyIiwiZnRyIiwiZnVqaXRzdSIsImZ1biIsImZ1bmQiLCJmdXJuaXR1cmUiLCJmdXRib2wiLCJmeWkiLCJnYWwiLCJnYWxsZXJ5IiwiZ2FsbG8iLCJnYWxsdXAiLCJnYW1lIiwiZ2FtZXMiLCJnYXAiLCJnYXJkZW4iLCJnYXkiLCJnYml6'@;
put 'IiwiZ2RuIiwiZ2VhIiwiZ2VudCIsImdlbnRpbmciLCJnZW9yZ2UiLCJnZ2VlIiwiZ2lmdCIsImdpZnRzIiwiZ2l2ZXMiLCJnaXZpbmciLCJnbGFzcyIsImdsZSIsImdsb2JhbCIsImdsb2JvIiwiZ21haWwiLCJnbWJoIiwiZ21vIiwiZ214IiwiZ29kYWRkeSIsImdvbGQiLCJnb2xkcG9pbnQi'@;
put 'LCJnb2xmIiwiZ29vIiwiZ29vZHllYXIiLCJnb29nIiwiZ29vZ2xlIiwiZ29wIiwiZ290IiwiZ3JhaW5nZXIiLCJncmFwaGljcyIsImdyYXRpcyIsImdyZWVuIiwiZ3JpcGUiLCJncm9jZXJ5IiwiZ3JvdXAiLCJndWFyZGlhbiIsImd1Y2NpIiwiZ3VnZSIsImd1aWRlIiwiZ3VpdGFycyIsImd1'@;
put 'cnUiLCJoYWlyIiwiaGFtYnVyZyIsImhhbmdvdXQiLCJoYXVzIiwiaGJvIiwiaGRmYyIsImhkZmNiYW5rIiwiaGVhbHRoIiwiaGVhbHRoY2FyZSIsImhlbHAiLCJoZWxzaW5raSIsImhlcmUiLCJoZXJtZXMiLCJoZ3R2IiwiaGlwaG9wIiwiaGlzYW1pdHN1IiwiaGl0YWNoaSIsImhpdiIsImhr'@;
put 'dCIsImhvY2tleSIsImhvbGRpbmdzIiwiaG9saWRheSIsImhvbWVkZXBvdCIsImhvbWVnb29kcyIsImhvbWVzIiwiaG9tZXNlbnNlIiwiaG9uZGEiLCJob3JzZSIsImhvc3BpdGFsIiwiaG9zdCIsImhvc3RpbmciLCJob3QiLCJob3RlbGVzIiwiaG90ZWxzIiwiaG90bWFpbCIsImhvdXNlIiwi'@;
put 'aG93IiwiaHNiYyIsImh1Z2hlcyIsImh5YXR0IiwiaHl1bmRhaSIsImlibSIsImljYmMiLCJpY2UiLCJpY3UiLCJpZWVlIiwiaWZtIiwiaWthbm8iLCJpbWFtYXQiLCJpbWRiIiwiaW1tbyIsImltbW9iaWxpZW4iLCJpbmMiLCJpbmR1c3RyaWVzIiwiaW5maW5pdGkiLCJpbmciLCJpbmsiLCJp'@;
put 'bnN0aXR1dGUiLCJpbnN1cmFuY2UiLCJpbnN1cmUiLCJpbnRlcm5hdGlvbmFsIiwiaW50dWl0IiwiaW52ZXN0bWVudHMiLCJpcGlyYW5nYSIsImlyaXNoIiwiaXNtYWlsaSIsImlzdCIsImlzdGFuYnVsIiwiaXRhdSIsIml0diIsImphZ3VhciIsImphdmEiLCJqY2IiLCJqZWVwIiwiamV0enQi'@;
put 'LCJqZXdlbHJ5IiwiamlvIiwiamxsIiwiam1wIiwiam5qIiwiam9idXJnIiwiam90Iiwiam95IiwianBtb3JnYW4iLCJqcHJzIiwianVlZ29zIiwianVuaXBlciIsImthdWZlbiIsImtkZGkiLCJrZXJyeWhvdGVscyIsImtlcnJ5bG9naXN0aWNzIiwia2Vycnlwcm9wZXJ0aWVzIiwia2ZoIiwi'@;
put 'a2lhIiwia2lkcyIsImtpbSIsImtpbmRlciIsImtpbmRsZSIsImtpdGNoZW4iLCJraXdpIiwia29lbG4iLCJrb21hdHN1Iiwia29zaGVyIiwia3BtZyIsImtwbiIsImtyZCIsImtyZWQiLCJrdW9rZ3JvdXAiLCJreW90byIsImxhY2FpeGEiLCJsYW1ib3JnaGluaSIsImxhbWVyIiwibGFuY2Fz'@;
put 'dGVyIiwibGFuY2lhIiwibGFuZCIsImxhbmRyb3ZlciIsImxhbnhlc3MiLCJsYXNhbGxlIiwibGF0IiwibGF0aW5vIiwibGF0cm9iZSIsImxhdyIsImxhd3llciIsImxkcyIsImxlYXNlIiwibGVjbGVyYyIsImxlZnJhayIsImxlZ2FsIiwibGVnbyIsImxleHVzIiwibGdidCIsImxpZGwiLCJs'@;
put 'aWZlIiwibGlmZWluc3VyYW5jZSIsImxpZmVzdHlsZSIsImxpZ2h0aW5nIiwibGlrZSIsImxpbGx5IiwibGltaXRlZCIsImxpbW8iLCJsaW5jb2xuIiwibGluZGUiLCJsaW5rIiwibGlwc3kiLCJsaXZlIiwibGl2aW5nIiwibGxjIiwibGxwIiwibG9hbiIsImxvYW5zIiwibG9ja2VyIiwibG9j'@;
put 'dXMiLCJsb2Z0IiwibG9sIiwibG9uZG9uIiwibG90dGUiLCJsb3R0byIsImxvdmUiLCJscGwiLCJscGxmaW5hbmNpYWwiLCJsdGQiLCJsdGRhIiwibHVuZGJlY2siLCJsdXhlIiwibHV4dXJ5IiwibWFjeXMiLCJtYWRyaWQiLCJtYWlmIiwibWFpc29uIiwibWFrZXVwIiwibWFuIiwibWFuYWdl'@;
put 'bWVudCIsIm1hbmdvIiwibWFwIiwibWFya2V0IiwibWFya2V0aW5nIiwibWFya2V0cyIsIm1hcnJpb3R0IiwibWFyc2hhbGxzIiwibWFzZXJhdGkiLCJtYXR0ZWwiLCJtYmEiLCJtY2tpbnNleSIsIm1lZCIsIm1lZGlhIiwibWVldCIsIm1lbGJvdXJuZSIsIm1lbWUiLCJtZW1vcmlhbCIsIm1l'@;
put 'biIsIm1lbnUiLCJtZXJja21zZCIsIm1pYW1pIiwibWljcm9zb2Z0IiwibWluaSIsIm1pbnQiLCJtaXQiLCJtaXRzdWJpc2hpIiwibWxiIiwibWxzIiwibW1hIiwibW9iaWxlIiwibW9kYSIsIm1vZSIsIm1vaSIsIm1vbSIsIm1vbmFzaCIsIm1vbmV5IiwibW9uc3RlciIsIm1vcm1vbiIsIm1v'@;
put 'cnRnYWdlIiwibW9zY293IiwibW90byIsIm1vdG9yY3ljbGVzIiwibW92IiwibW92aWUiLCJtc2QiLCJtdG4iLCJtdHIiLCJtdXNpYyIsIm11dHVhbCIsIm5hYiIsIm5hZ295YSIsIm5hdHVyYSIsIm5hdnkiLCJuYmEiLCJuZWMiLCJuZXRiYW5rIiwibmV0ZmxpeCIsIm5ldHdvcmsiLCJuZXVz'@;
put 'dGFyIiwibmV3IiwibmV3cyIsIm5leHQiLCJuZXh0ZGlyZWN0IiwibmV4dXMiLCJuZmwiLCJuZ28iLCJuaGsiLCJuaWNvIiwibmlrZSIsIm5pa29uIiwibmluamEiLCJuaXNzYW4iLCJuaXNzYXkiLCJub2tpYSIsIm5vcnRod2VzdGVybm11dHVhbCIsIm5vcnRvbiIsIm5vdyIsIm5vd3J1eiIs'@;
put 'Im5vd3R2IiwibnJhIiwibnJ3IiwibnR0IiwibnljIiwib2JpIiwib2JzZXJ2ZXIiLCJvZmZpY2UiLCJva2luYXdhIiwib2xheWFuIiwib2xheWFuZ3JvdXAiLCJvbGRuYXZ5Iiwib2xsbyIsIm9tZWdhIiwib25lIiwib25nIiwib25sIiwib25saW5lIiwib29vIiwib3BlbiIsIm9yYWNsZSIs'@;
put 'Im9yYW5nZSIsIm9yZ2FuaWMiLCJvcmlnaW5zIiwib3Nha2EiLCJvdHN1a2EiLCJvdHQiLCJvdmgiLCJwYWdlIiwicGFuYXNvbmljIiwicGFyaXMiLCJwYXJzIiwicGFydG5lcnMiLCJwYXJ0cyIsInBhcnR5IiwicGFzc2FnZW5zIiwicGF5IiwicGNjdyIsInBldCIsInBmaXplciIsInBoYXJt'@;
put 'YWN5IiwicGhkIiwicGhpbGlwcyIsInBob25lIiwicGhvdG8iLCJwaG90b2dyYXBoeSIsInBob3RvcyIsInBoeXNpbyIsInBpY3MiLCJwaWN0ZXQiLCJwaWN0dXJlcyIsInBpZCIsInBpbiIsInBpbmciLCJwaW5rIiwicGlvbmVlciIsInBpenphIiwicGxhY2UiLCJwbGF5IiwicGxheXN0YXRp'@;
put 'b24iLCJwbHVtYmluZyIsInBsdXMiLCJwbmMiLCJwb2hsIiwicG9rZXIiLCJwb2xpdGllIiwicG9ybiIsInByYW1lcmljYSIsInByYXhpIiwicHJlc3MiLCJwcmltZSIsInByb2QiLCJwcm9kdWN0aW9ucyIsInByb2YiLCJwcm9ncmVzc2l2ZSIsInByb21vIiwicHJvcGVydGllcyIsInByb3Bl'@;
put 'cnR5IiwicHJvdGVjdGlvbiIsInBydSIsInBydWRlbnRpYWwiLCJwdWIiLCJwd2MiLCJxcG9uIiwicXVlYmVjIiwicXVlc3QiLCJyYWNpbmciLCJyYWRpbyIsInJlYWQiLCJyZWFsZXN0YXRlIiwicmVhbHRvciIsInJlYWx0eSIsInJlY2lwZXMiLCJyZWQiLCJyZWRzdG9uZSIsInJlZHVtYnJl'@;
put 'bGxhIiwicmVoYWIiLCJyZWlzZSIsInJlaXNlbiIsInJlaXQiLCJyZWxpYW5jZSIsInJlbiIsInJlbnQiLCJyZW50YWxzIiwicmVwYWlyIiwicmVwb3J0IiwicmVwdWJsaWNhbiIsInJlc3QiLCJyZXN0YXVyYW50IiwicmV2aWV3IiwicmV2aWV3cyIsInJleHJvdGgiLCJyaWNoIiwicmljaGFy'@;
put 'ZGxpIiwicmljb2giLCJyaWwiLCJyaW8iLCJyaXAiLCJyb2NoZXIiLCJyb2NrcyIsInJvZGVvIiwicm9nZXJzIiwicm9vbSIsInJzdnAiLCJydWdieSIsInJ1aHIiLCJydW4iLCJyd2UiLCJyeXVreXUiLCJzYWFybGFuZCIsInNhZmUiLCJzYWZldHkiLCJzYWt1cmEiLCJzYWxlIiwic2Fsb24i'@;
put 'LCJzYW1zY2x1YiIsInNhbXN1bmciLCJzYW5kdmlrIiwic2FuZHZpa2Nvcm9tYW50Iiwic2Fub2ZpIiwic2FwIiwic2FybCIsInNhcyIsInNhdmUiLCJzYXhvIiwic2JpIiwic2JzIiwic2NhIiwic2NiIiwic2NoYWVmZmxlciIsInNjaG1pZHQiLCJzY2hvbGFyc2hpcHMiLCJzY2hvb2wiLCJz'@;
put 'Y2h1bGUiLCJzY2h3YXJ6Iiwic2NpZW5jZSIsInNjb3QiLCJzZWFyY2giLCJzZWF0Iiwic2VjdXJlIiwic2VjdXJpdHkiLCJzZWVrIiwic2VsZWN0Iiwic2VuZXIiLCJzZXJ2aWNlcyIsInNlcyIsInNldmVuIiwic2V3Iiwic2V4Iiwic2V4eSIsInNmciIsInNoYW5ncmlsYSIsInNoYXJwIiwi'@;
put 'c2hhdyIsInNoZWxsIiwic2hpYSIsInNoaWtzaGEiLCJzaG9lcyIsInNob3AiLCJzaG9wcGluZyIsInNob3VqaSIsInNob3ciLCJzaG93dGltZSIsInNpbGsiLCJzaW5hIiwic2luZ2xlcyIsInNpdGUiLCJza2kiLCJza2luIiwic2t5Iiwic2t5cGUiLCJzbGluZyIsInNtYXJ0Iiwic21pbGUi'@;
put 'LCJzbmNmIiwic29jY2VyIiwic29jaWFsIiwic29mdGJhbmsiLCJzb2Z0d2FyZSIsInNvaHUiLCJzb2xhciIsInNvbHV0aW9ucyIsInNvbmciLCJzb255Iiwic295Iiwic3BhIiwic3BhY2UiLCJzcG9ydCIsInNwb3QiLCJzcmwiLCJzdGFkYSIsInN0YXBsZXMiLCJzdGFyIiwic3RhdGViYW5r'@;
put 'Iiwic3RhdGVmYXJtIiwic3RjIiwic3RjZ3JvdXAiLCJzdG9ja2hvbG0iLCJzdG9yYWdlIiwic3RvcmUiLCJzdHJlYW0iLCJzdHVkaW8iLCJzdHVkeSIsInN0eWxlIiwic3Vja3MiLCJzdXBwbGllcyIsInN1cHBseSIsInN1cHBvcnQiLCJzdXJmIiwic3VyZ2VyeSIsInN1enVraSIsInN3YXRj'@;
put 'aCIsInN3aXNzIiwic3lkbmV5Iiwic3lzdGVtcyIsInRhYiIsInRhaXBlaSIsInRhbGsiLCJ0YW9iYW8iLCJ0YXJnZXQiLCJ0YXRhbW90b3JzIiwidGF0YXIiLCJ0YXR0b28iLCJ0YXgiLCJ0YXhpIiwidGNpIiwidGRrIiwidGVhbSIsInRlY2giLCJ0ZWNobm9sb2d5IiwidGVtYXNlayIsInRl'@;
put 'bm5pcyIsInRldmEiLCJ0aGQiLCJ0aGVhdGVyIiwidGhlYXRyZSIsInRpYWEiLCJ0aWNrZXRzIiwidGllbmRhIiwidGlmZmFueSIsInRpcHMiLCJ0aXJlcyIsInRpcm9sIiwidGptYXh4IiwidGp4IiwidGttYXh4IiwidG1hbGwiLCJ0b2RheSIsInRva3lvIiwidG9vbHMiLCJ0b3AiLCJ0b3Jh'@;
put 'eSIsInRvc2hpYmEiLCJ0b3RhbCIsInRvdXJzIiwidG93biIsInRveW90YSIsInRveXMiLCJ0cmFkZSIsInRyYWRpbmciLCJ0cmFpbmluZyIsInRyYXZlbCIsInRyYXZlbGNoYW5uZWwiLCJ0cmF2ZWxlcnMiLCJ0cmF2ZWxlcnNpbnN1cmFuY2UiLCJ0cnVzdCIsInRydiIsInR1YmUiLCJ0dWki'@;
put 'LCJ0dW5lcyIsInR1c2h1IiwidHZzIiwidWJhbmsiLCJ1YnMiLCJ1bmljb20iLCJ1bml2ZXJzaXR5IiwidW5vIiwidW9sIiwidXBzIiwidmFjYXRpb25zIiwidmFuYSIsInZhbmd1YXJkIiwidmVnYXMiLCJ2ZW50dXJlcyIsInZlcmlzaWduIiwidmVyc2ljaGVydW5nIiwidmV0IiwidmlhamVz'@;
put 'IiwidmlkZW8iLCJ2aWciLCJ2aWtpbmciLCJ2aWxsYXMiLCJ2aW4iLCJ2aXAiLCJ2aXJnaW4iLCJ2aXNhIiwidmlzaW9uIiwidml2YSIsInZpdm8iLCJ2bGFhbmRlcmVuIiwidm9ka2EiLCJ2b2xrc3dhZ2VuIiwidm9sdm8iLCJ2b3RlIiwidm90aW5nIiwidm90byIsInZveWFnZSIsInZ1ZWxv'@;
put 'cyIsIndhbGVzIiwid2FsbWFydCIsIndhbHRlciIsIndhbmciLCJ3YW5nZ291Iiwid2F0Y2giLCJ3YXRjaGVzIiwid2VhdGhlciIsIndlYXRoZXJjaGFubmVsIiwid2ViY2FtIiwid2ViZXIiLCJ3ZWJzaXRlIiwid2VkZGluZyIsIndlaWJvIiwid2VpciIsIndob3N3aG8iLCJ3aWVuIiwid2lr'@;
put 'aSIsIndpbGxpYW1oaWxsIiwid2luIiwid2luZG93cyIsIndpbmUiLCJ3aW5uZXJzIiwid21lIiwid29sdGVyc2tsdXdlciIsIndvb2RzaWRlIiwid29yayIsIndvcmtzIiwid29ybGQiLCJ3b3ciLCJ3dGMiLCJ3dGYiLCJ4Ym94IiwieGVyb3giLCJ4ZmluaXR5IiwieGlodWFuIiwieGluIiwi'@;
put 'XHUwOTE1XHUwOTQ5XHUwOTJlIiwiXHUzMGJiXHUzMGZjXHUzMGViIiwiXHU0ZjViXHU1YzcxIiwiXHU2MTQ4XHU1NTg0IiwiXHU5NmM2XHU1NmUyIiwiXHU1NzI4XHU3ZWJmIiwiXHU3MGI5XHU3NzBiIiwiXHUwZTA0XHUwZTJkXHUwZTIxIiwiXHU1MTZiXHU1MzY2IiwiXHUwNjQ1XHUwNjQ4'@;
put 'XHUwNjQyXHUwNjM5IiwiXHU1MTZjXHU3NmNhIiwiXHU1MTZjXHU1M2Y4IiwiXHU5OTk5XHU2ODNjXHU5MWNjXHU2MmM5IiwiXHU3ZjUxXHU3YWQ5IiwiXHU3OWZiXHU1MmE4IiwiXHU2MjExXHU3MjMxXHU0ZjYwIiwiXHUwNDNjXHUwNDNlXHUwNDQxXHUwNDNhXHUwNDMyXHUwNDMwIiwiXHUw'@;
put 'NDNhXHUwNDMwXHUwNDQyXHUwNDNlXHUwNDNiXHUwNDM4XHUwNDNhIiwiXHUwNDNlXHUwNDNkXHUwNDNiXHUwNDMwXHUwNDM5XHUwNDNkIiwiXHUwNDQxXHUwNDMwXHUwNDM5XHUwNDQyIiwiXHU4MDU0XHU5MDFhIiwiXHUwNWU3XHUwNWQ1XHUwNWRkIiwiXHU2NWY2XHU1YzFhIiwiXHU1ZmFl'@;
put 'XHU1MzVhIiwiXHU2ZGUxXHU5YTZjXHU5NTIxIiwiXHUzMGQ1XHUzMGExXHUzMGMzXHUzMGI3XHUzMGU3XHUzMGYzIiwiXHUwNDNlXHUwNDQwXHUwNDMzIiwiXHUwOTI4XHUwOTQ3XHUwOTFmIiwiXHUzMGI5XHUzMGM4XHUzMGEyIiwiXHUzMGEyXHUzMGRlXHUzMGJlXHUzMGYzIiwiXHVjMGJj'@;
put 'XHVjMTMxIiwiXHU1NTQ2XHU2ODA3IiwiXHU1NTQ2XHU1ZTk3IiwiXHU1NTQ2XHU1N2NlIiwiXHUwNDM0XHUwNDM1XHUwNDQyXHUwNDM4IiwiXHUzMGRkXHUzMGE0XHUzMGYzXHUzMGM4IiwiXHU2NWIwXHU5NWZiIiwiXHU1YmI2XHU5NmZiIiwiXHUwNjQzXHUwNjQ4XHUwNjQ1IiwiXHU0ZTJk'@;
put 'XHU2NTg3XHU3ZjUxIiwiXHU0ZTJkXHU0ZmUxIiwiXHU1YTMxXHU0ZTUwIiwiXHU4YzM3XHU2YjRjIiwiXHU5NmZiXHU4YTBhXHU3NmM4XHU3OWQxIiwiXHU4ZDJkXHU3MjY5IiwiXHUzMGFmXHUzMGU5XHUzMGE2XHUzMGM5IiwiXHU5MDFhXHU4Y2E5IiwiXHU3ZjUxXHU1ZTk3IiwiXHUwOTM4'@;
put 'XHUwOTAyXHUwOTE3XHUwOTIwXHUwOTI4IiwiXHU5OTEwXHU1Mzg1IiwiXHU3ZjUxXHU3ZWRjIiwiXHUwNDNhXHUwNDNlXHUwNDNjIiwiXHU0ZTlhXHU5YTZjXHU5MDBhIiwiXHU4YmZhXHU1N2ZhXHU0ZTlhIiwiXHU5OGRmXHU1NGMxIiwiXHU5OGRlXHU1MjI5XHU2ZDY2IiwiXHU2MjRiXHU2'@;
put 'NzNhIiwiXHUwNjI3XHUwNjMxXHUwNjI3XHUwNjQ1XHUwNjQzXHUwNjQ4IiwiXHUwNjI3XHUwNjQ0XHUwNjM5XHUwNjQ0XHUwNjRhXHUwNjI3XHUwNjQ2IiwiXHUwNjI3XHUwNjJhXHUwNjM1XHUwNjI3XHUwNjQ0XHUwNjI3XHUwNjJhIiwiXHUwNjI4XHUwNjI3XHUwNjMyXHUwNjI3XHUwNjMx'@;
put 'IiwiXHUwNjI3XHUwNjI4XHUwNjQ4XHUwNjM4XHUwNjI4XHUwNjRhIiwiXHUwNjQzXHUwNjI3XHUwNjJiXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQzIiwiXHUwNjQ3XHUwNjQ1XHUwNjMxXHUwNjI3XHUwNjQ3IiwiXHViMmY3XHVjZWY0IiwiXHU2NTNmXHU1ZTljIiwiXHUwNjM0XHUwNjI4XHUw'@;
put 'NjQzXHUwNjI5IiwiXHUwNjI4XHUwNjRhXHUwNjJhXHUwNjQzIiwiXHUwNjM5XHUwNjMxXHUwNjI4IiwiXHU2NzNhXHU2Nzg0IiwiXHU3ZWM0XHU3ZWM3XHU2NzNhXHU2Nzg0IiwiXHU1MDY1XHU1ZWI3IiwiXHU2MmRiXHU4MDU4IiwiXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHU1OTI3XHU2MmZm'@;
put 'IiwiXHUzMDdmXHUzMDkzXHUzMDZhIiwiXHUzMGIwXHUzMGZjXHUzMGIwXHUzMGViIiwiXHU0ZTE2XHU3NTRjIiwiXHU2NmY4XHU3YzRkIiwiXHU3ZjUxXHU1NzQwIiwiXHViMmY3XHViMTM3IiwiXHUzMGIzXHUzMGUwIiwiXHU1OTI5XHU0ZTNiXHU2NTU5IiwiXHU2ZTM4XHU2MjBmIiwidmVy'@;
put 'bVx4ZjZnZW5zYmVyYXRlciIsInZlcm1ceGY2Z2Vuc2JlcmF0dW5nIiwiXHU0ZjAxXHU0ZTFhIiwiXHU0ZmUxXHU2MDZmIiwiXHU1NjA5XHU5MWNjXHU1OTI3XHU5MTUyXHU1ZTk3IiwiXHU1NjA5XHU5MWNjIiwiXHU1ZTdmXHU0ZTFjIiwiXHU2NTNmXHU1MmExIiwieHl6IiwieWFjaHRzIiwi'@;
put 'eWFob28iLCJ5YW1heHVuIiwieWFuZGV4IiwieW9kb2Jhc2hpIiwieW9nYSIsInlva29oYW1hIiwieW91IiwieW91dHViZSIsInl1biIsInphcHBvcyIsInphcmEiLCJ6ZXJvIiwiemlwIiwiem9uZSIsInp1ZXJpY2giLCJjYy51YSIsImluZi51YSIsImx0ZC51YSIsIjYxMS50byIsImdyYXBo'@;
put 'b3gudXMiLCIqLmRldmNkbmFjY2Vzc28uY29tIiwiYWRvYmVhZW1jbG91ZC5jb20iLCIqLmRldi5hZG9iZWFlbWNsb3VkLmNvbSIsImhseC5saXZlIiwiYWRvYmVhZW1jbG91ZC5uZXQiLCJobHgucGFnZSIsImhseDMucGFnZSIsImJlZXAucGwiLCJhaXJraXRhcHBzLmNvbSIsImFpcmtpdGFw'@;
put 'cHMtYXUuY29tIiwiYWlya2l0YXBwcy5ldSIsImFpdmVuY2xvdWQuY29tIiwiYmFyc3kuY2EiLCIqLmNvbXB1dGUuZXN0YXRlIiwiKi5hbGNlcy5uZXR3b3JrIiwia2Fzc2VydmVyLmNvbSIsImFsdGVydmlzdGEub3JnIiwiYWx3YXlzZGF0YS5uZXQiLCJjbG91ZGZyb250Lm5ldCIsIiouY29t'@;
put 'cHV0ZS5hbWF6b25hd3MuY29tIiwiKi5jb21wdXRlLTEuYW1hem9uYXdzLmNvbSIsIiouY29tcHV0ZS5hbWF6b25hd3MuY29tLmNuIiwidXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJjbi1ub3J0aC0xLmViLmFtYXpvbmF3cy5jb20uY24iLCJjbi1ub3J0aHdlc3QtMS5lYi5hbWF6b25hd3Mu'@;
put 'Y29tLmNuIiwiZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1ub3J0aGVhc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImFwLW5vcnRoZWFzdC0yLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiYXAtbm9ydGhlYXN0LTMuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1zb3V0aC0xLmVsYXN0aWNi'@;
put 'ZWFuc3RhbGsuY29tIiwiYXAtc291dGhlYXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1zb3V0aGVhc3QtMi5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImNhLWNlbnRyYWwtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImV1LWNlbnRyYWwtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImV1'@;
put 'LXdlc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImV1LXdlc3QtMi5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImV1LXdlc3QtMy5lbGFzdGljYmVhbnN0YWxrLmNvbSIsInNhLWVhc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsInVzLWVhc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsInVz'@;
put 'LWVhc3QtMi5lbGFzdGljYmVhbnN0YWxrLmNvbSIsInVzLWdvdi13ZXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJ1cy13ZXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJ1cy13ZXN0LTIuZWxhc3RpY2JlYW5zdGFsay5jb20iLCIqLmVsYi5hbWF6b25hd3MuY29tIiwiKi5lbGIuYW1h'@;
put 'em9uYXdzLmNvbS5jbiIsImF3c2dsb2JhbGFjY2VsZXJhdG9yLmNvbSIsInMzLmFtYXpvbmF3cy5jb20iLCJzMy1hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWFw'@;
put 'LXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZXUtd2Vz'@;
put 'dC0yLmFtYXpvbmF3cy5jb20iLCJzMy1ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLWV4dGVybmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMtdXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy11cy1nb3Ytd2VzdC0xLmFt'@;
put 'YXpvbmF3cy5jb20iLCJzMy11cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtdXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMuYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwi'@;
put 'czMuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiczMuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMuZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy51cy1lYXN0'@;
put 'LTIuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLXNv'@;
put 'dXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFj'@;
put 'ay5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay51cy1lYXN0'@;
put 'LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtdXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLXVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS11cy13ZXN0LTIuYW1hem9uYXdzLmNv'@;
put 'bSIsInMzLXdlYnNpdGUtYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20i'@;
put 'LCJzMy13ZWJzaXRlLXNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vi'@;
put 'c2l0ZS5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInQzbDNwMHJ0Lm5ldCIsInRlbGUu'@;
put 'YW11bmUub3JnIiwiYXBpZ2VlLmlvIiwic2lpaXRlcy5jb20iLCJhcHBzcGFjZWhvc3RlZC5jb20iLCJhcHBzcGFjZXVzZXJjb250ZW50LmNvbSIsImFwcHVkby5uZXQiLCJvbi1hcHRpYmxlLmNvbSIsInVzZXIuYXNlaW5ldC5uZS5qcCIsImd2LnZjIiwiZC5ndi52YyIsInVzZXIucGFydHku'@;
put 'ZXVzIiwicGltaWVudGEub3JnIiwicG9pdnJvbi5vcmciLCJwb3RhZ2VyLm9yZyIsInN3ZWV0cGVwcGVyLm9yZyIsIm15YXN1c3Rvci5jb20iLCJjZG4ucHJvZC5hdGxhc3NpYW4tZGV2Lm5ldCIsInRyYW5zbGF0ZWQucGFnZSIsIm15ZnJpdHoubmV0Iiwib25hdnN0YWNrLm5ldCIsIiouYXdk'@;
put 'ZXYuY2EiLCIqLmFkdmlzb3Iud3MiLCJlY29tbWVyY2Utc2hvcC5wbCIsImItZGF0YS5pbyIsImJhY2twbGFuZWFwcC5pbyIsImJhbGVuYS1kZXZpY2VzLmNvbSIsInJzLmJhIiwiKi5iYW56YWkuY2xvdWQiLCJhcHAuYmFuemFpY2xvdWQuaW8iLCIqLmJhY2t5YXJkcy5iYW56YWljbG91ZC5p'@;
put 'byIsImJhc2UuZWMiLCJvZmZpY2lhbC5lYyIsImJ1eXNob3AuanAiLCJmYXNoaW9uc3RvcmUuanAiLCJoYW5kY3JhZnRlZC5qcCIsImthd2FpaXNob3AuanAiLCJzdXBlcnNhbGUuanAiLCJ0aGVzaG9wLmpwIiwic2hvcHNlbGVjdC5uZXQiLCJiYXNlLnNob3AiLCIqLmJlZ2V0LmFwcCIsImJl'@;
put 'dGFpbmFib3guY29tIiwiYm5yLmxhIiwiYml0YnVja2V0LmlvIiwiYmxhY2tiYXVkY2RuLm5ldCIsIm9mLmplIiwiYmx1ZWJpdGUuaW8iLCJib29tbGEubmV0IiwiYm91dGlyLmNvbSIsImJveGZ1c2UuaW8iLCJzcXVhcmU3LmNoIiwiYnBsYWNlZC5jb20iLCJicGxhY2VkLmRlIiwic3F1YXJl'@;
put 'Ny5kZSIsImJwbGFjZWQubmV0Iiwic3F1YXJlNy5uZXQiLCJzaG9wLmJyZW5kbHkucnMiLCJicm93c2Vyc2FmZXR5bWFyay5pbyIsInVrMC5iaWd2LmlvIiwiZGguYnl0ZW1hcmsuY28udWsiLCJ2bS5ieXRlbWFyay5jby51ayIsImNhZmpzLmNvbSIsIm15Y2QuZXUiLCJkcnIuYWMiLCJ1d3Uu'@;
put 'YWkiLCJjYXJyZC5jbyIsImNyZC5jbyIsImp1Lm1wIiwiYWUub3JnIiwiYnIuY29tIiwiY24uY29tIiwiY29tLmRlIiwiY29tLnNlIiwiZGUuY29tIiwiZXUuY29tIiwiZ2IubmV0IiwiaHUubmV0IiwianAubmV0IiwianBuLmNvbSIsIm1leC5jb20iLCJydS5jb20iLCJzYS5jb20iLCJzZS5u'@;
put 'ZXQiLCJ1ay5jb20iLCJ1ay5uZXQiLCJ1cy5jb20iLCJ6YS5ieiIsInphLmNvbSIsImFyLmNvbSIsImh1LmNvbSIsImtyLmNvbSIsIm5vLmNvbSIsInFjLmNvbSIsInV5LmNvbSIsImFmcmljYS5jb20iLCJnci5jb20iLCJpbi5uZXQiLCJ3ZWIuaW4iLCJ1cy5vcmciLCJjby5jb20iLCJhdXMu'@;
put 'YmFza2V0YmFsbCIsIm56LmJhc2tldGJhbGwiLCJyYWRpby5hbSIsInJhZGlvLmZtIiwiYy5sYSIsImNlcnRtZ3Iub3JnIiwiY3gudWEiLCJkaXNjb3Vyc2UuZ3JvdXAiLCJkaXNjb3Vyc2UudGVhbSIsImNsZXZlcmFwcHMuaW8iLCJjbGVyay5hcHAiLCJjbGVya3N0YWdlLmFwcCIsIioubGNs'@;
put 'LmRldiIsIioubGNsc3RhZ2UuZGV2IiwiKi5zdGcuZGV2IiwiKi5zdGdzdGFnZS5kZXYiLCJjbGlja3Jpc2luZy5uZXQiLCJjNjYubWUiLCJjbG91ZDY2LndzIiwiY2xvdWQ2Ni56b25lIiwiamRldmNsb3VkLmNvbSIsIndwZGV2Y2xvdWQuY29tIiwiY2xvdWRhY2Nlc3MuaG9zdCIsImZyZWVz'@;
put 'aXRlLmhvc3QiLCJjbG91ZGFjY2Vzcy5uZXQiLCJjbG91ZGNvbnRyb2xsZWQuY29tIiwiY2xvdWRjb250cm9sYXBwLmNvbSIsIiouY2xvdWRlcmEuc2l0ZSIsInBhZ2VzLmRldiIsInRyeWNsb3VkZmxhcmUuY29tIiwid29ya2Vycy5kZXYiLCJ3bmV4dC5hcHAiLCJjby5jYSIsIioub3RhcC5j'@;
put 'byIsImNvLmN6IiwiYy5jZG43Ny5vcmciLCJjZG43Ny1zc2wubmV0Iiwici5jZG43Ny5uZXQiLCJyc2MuY2RuNzcub3JnIiwic3NsLm9yaWdpbi5jZG43Ny1zZWN1cmUub3JnIiwiY2xvdWRucy5hc2lhIiwiY2xvdWRucy5iaXoiLCJjbG91ZG5zLmNsdWIiLCJjbG91ZG5zLmNjIiwiY2xvdWRu'@;
put 'cy5ldSIsImNsb3VkbnMuaW4iLCJjbG91ZG5zLmluZm8iLCJjbG91ZG5zLm9yZyIsImNsb3VkbnMucHJvIiwiY2xvdWRucy5wdyIsImNsb3VkbnMudXMiLCJjbnB5LmdkbiIsImNvZGViZXJnLnBhZ2UiLCJjby5ubCIsImNvLm5vIiwid2ViaG9zdGluZy5iZSIsImhvc3RpbmctY2x1c3Rlci5u'@;
put 'bCIsImFjLnJ1IiwiZWR1LnJ1IiwiZ292LnJ1IiwiaW50LnJ1IiwibWlsLnJ1IiwidGVzdC5ydSIsImR5bi5jb3NpZG5zLmRlIiwiZHluYW1pc2NoZXMtZG5zLmRlIiwiZG5zdXBkYXRlci5kZSIsImludGVybmV0LWRucy5kZSIsImwtby1nLWktbi5kZSIsImR5bmFtaWMtZG5zLmluZm8iLCJm'@;
put 'ZXN0ZS1pcC5uZXQiLCJrbngtc2VydmVyLm5ldCIsInN0YXRpYy1hY2Nlc3MubmV0IiwicmVhbG0uY3oiLCIqLmNyeXB0b25vbWljLm5ldCIsImN1cGNha2UuaXMiLCJjdXJ2LmRldiIsIiouY3VzdG9tZXItb2NpLmNvbSIsIioub2NpLmN1c3RvbWVyLW9jaS5jb20iLCIqLm9jcC5jdXN0b21l'@;
put 'ci1vY2kuY29tIiwiKi5vY3MuY3VzdG9tZXItb2NpLmNvbSIsImN5b24ubGluayIsImN5b24uc2l0ZSIsImZud2suc2l0ZSIsImZvbGlvbmV0d29yay5zaXRlIiwicGxhdGZvcm0wLmFwcCIsImRhcGxpZS5tZSIsImxvY2FsaG9zdC5kYXBsaWUubWUiLCJkYXR0b2xvY2FsLmNvbSIsImRhdHRv'@;
put 'cmVsYXkuY29tIiwiZGF0dG93ZWIuY29tIiwibXlkYXR0by5jb20iLCJkYXR0b2xvY2FsLm5ldCIsIm15ZGF0dG8ubmV0IiwiYml6LmRrIiwiY28uZGsiLCJmaXJtLmRrIiwicmVnLmRrIiwic3RvcmUuZGsiLCJkeW5kbnMuZGFwcG5vZGUuaW8iLCIqLmRhcHBzLmVhcnRoIiwiKi5ienouZGFw'@;
put 'cHMuZWFydGgiLCJidWlsdHdpdGhkYXJrLmNvbSIsImRlbW8uZGF0YWRldGVjdC5jb20iLCJpbnN0YW5jZS5kYXRhZGV0ZWN0LmNvbSIsImVkZ2VzdGFjay5tZSIsImRkbnM1LmNvbSIsImRlYmlhbi5uZXQiLCJkZW5vLmRldiIsImRlbm8tc3RhZ2luZy5kZXYiLCJkZWR5bi5pbyIsImRldGEu'@;
put 'YXBwIiwiZGV0YS5kZXYiLCIqLnJzcy5teS5pZCIsIiouZGloZXIuc29sdXRpb25zIiwiZGlzY29yZHNheXMuY29tIiwiZGlzY29yZHNlei5jb20iLCJqb3ppLmJpeiIsImRuc2hvbWUuZGUiLCJvbmxpbmUudGgiLCJzaG9wLnRoIiwiZHJheWRkbnMuY29tIiwic2hvcGFyZW5hLnBsIiwiZHJl'@;
put 'YW1ob3N0ZXJzLmNvbSIsIm15ZHJvYm8uY29tIiwiZHJ1ZC5pbyIsImRydWQudXMiLCJkdWNrZG5zLm9yZyIsImJpcC5zaCIsImJpdGJyaWRnZS5uZXQiLCJkeS5maSIsInR1bmsub3JnIiwiZHluZG5zLWF0LWhvbWUuY29tIiwiZHluZG5zLWF0LXdvcmsuY29tIiwiZHluZG5zLWJsb2cuY29t'@;
put 'IiwiZHluZG5zLWZyZWUuY29tIiwiZHluZG5zLWhvbWUuY29tIiwiZHluZG5zLWlwLmNvbSIsImR5bmRucy1tYWlsLmNvbSIsImR5bmRucy1vZmZpY2UuY29tIiwiZHluZG5zLXBpY3MuY29tIiwiZHluZG5zLXJlbW90ZS5jb20iLCJkeW5kbnMtc2VydmVyLmNvbSIsImR5bmRucy13ZWIuY29t'@;
put 'IiwiZHluZG5zLXdpa2kuY29tIiwiZHluZG5zLXdvcmsuY29tIiwiZHluZG5zLmJpeiIsImR5bmRucy5pbmZvIiwiZHluZG5zLm9yZyIsImR5bmRucy50diIsImF0LWJhbmQtY2FtcC5uZXQiLCJhdGguY3giLCJiYXJyZWwtb2Yta25vd2xlZGdlLmluZm8iLCJiYXJyZWxsLW9mLWtub3dsZWRn'@;
put 'ZS5pbmZvIiwiYmV0dGVyLXRoYW4udHYiLCJibG9nZG5zLmNvbSIsImJsb2dkbnMubmV0IiwiYmxvZ2Rucy5vcmciLCJibG9nc2l0ZS5vcmciLCJib2xkbHlnb2luZ25vd2hlcmUub3JnIiwiYnJva2UtaXQubmV0IiwiYnV5c2hvdXNlcy5uZXQiLCJjZWNoaXJlLmNvbSIsImRuc2FsaWFzLmNv'@;
put 'bSIsImRuc2FsaWFzLm5ldCIsImRuc2FsaWFzLm9yZyIsImRuc2Rvam8uY29tIiwiZG5zZG9qby5uZXQiLCJkbnNkb2pvLm9yZyIsImRvZXMtaXQubmV0IiwiZG9lc250ZXhpc3QuY29tIiwiZG9lc250ZXhpc3Qub3JnIiwiZG9udGV4aXN0LmNvbSIsImRvbnRleGlzdC5uZXQiLCJkb250ZXhp'@;
put 'c3Qub3JnIiwiZG9vbWRucy5jb20iLCJkb29tZG5zLm9yZyIsImR2cmRucy5vcmciLCJkeW4tby1zYXVyLmNvbSIsImR5bmFsaWFzLmNvbSIsImR5bmFsaWFzLm5ldCIsImR5bmFsaWFzLm9yZyIsImR5bmF0aG9tZS5uZXQiLCJkeW5kbnMud3MiLCJlbmRvZmludGVybmV0Lm5ldCIsImVuZG9m'@;
put 'aW50ZXJuZXQub3JnIiwiZW5kb2Z0aGVpbnRlcm5ldC5vcmciLCJlc3QtYS1sYS1tYWlzb24uY29tIiwiZXN0LWEtbGEtbWFzaW9uLmNvbSIsImVzdC1sZS1wYXRyb24uY29tIiwiZXN0LW1vbi1ibG9ndWV1ci5jb20iLCJmb3ItYmV0dGVyLmJpeiIsImZvci1tb3JlLmJpeiIsImZvci1vdXIu'@;
put 'aW5mbyIsImZvci1zb21lLmJpeiIsImZvci10aGUuYml6IiwiZm9yZ290Lmhlci5uYW1lIiwiZm9yZ290Lmhpcy5uYW1lIiwiZnJvbS1hay5jb20iLCJmcm9tLWFsLmNvbSIsImZyb20tYXIuY29tIiwiZnJvbS1hei5uZXQiLCJmcm9tLWNhLmNvbSIsImZyb20tY28ubmV0IiwiZnJvbS1jdC5j'@;
put 'b20iLCJmcm9tLWRjLmNvbSIsImZyb20tZGUuY29tIiwiZnJvbS1mbC5jb20iLCJmcm9tLWdhLmNvbSIsImZyb20taGkuY29tIiwiZnJvbS1pYS5jb20iLCJmcm9tLWlkLmNvbSIsImZyb20taWwuY29tIiwiZnJvbS1pbi5jb20iLCJmcm9tLWtzLmNvbSIsImZyb20ta3kuY29tIiwiZnJvbS1s'@;
put 'YS5uZXQiLCJmcm9tLW1hLmNvbSIsImZyb20tbWQuY29tIiwiZnJvbS1tZS5vcmciLCJmcm9tLW1pLmNvbSIsImZyb20tbW4uY29tIiwiZnJvbS1tby5jb20iLCJmcm9tLW1zLmNvbSIsImZyb20tbXQuY29tIiwiZnJvbS1uYy5jb20iLCJmcm9tLW5kLmNvbSIsImZyb20tbmUuY29tIiwiZnJv'@;
put 'bS1uaC5jb20iLCJmcm9tLW5qLmNvbSIsImZyb20tbm0uY29tIiwiZnJvbS1udi5jb20iLCJmcm9tLW55Lm5ldCIsImZyb20tb2guY29tIiwiZnJvbS1vay5jb20iLCJmcm9tLW9yLmNvbSIsImZyb20tcGEuY29tIiwiZnJvbS1wci5jb20iLCJmcm9tLXJpLmNvbSIsImZyb20tc2MuY29tIiwi'@;
put 'ZnJvbS1zZC5jb20iLCJmcm9tLXRuLmNvbSIsImZyb20tdHguY29tIiwiZnJvbS11dC5jb20iLCJmcm9tLXZhLmNvbSIsImZyb20tdnQuY29tIiwiZnJvbS13YS5jb20iLCJmcm9tLXdpLmNvbSIsImZyb20td3YuY29tIiwiZnJvbS13eS5jb20iLCJmdHBhY2Nlc3MuY2MiLCJmdWV0dGVydGRh'@;
put 'c25ldHouZGUiLCJnYW1lLWhvc3Qub3JnIiwiZ2FtZS1zZXJ2ZXIuY2MiLCJnZXRteWlwLmNvbSIsImdldHMtaXQubmV0IiwiZ28uZHluZG5zLm9yZyIsImdvdGRucy5jb20iLCJnb3RkbnMub3JnIiwiZ3Jva3MtdGhlLmluZm8iLCJncm9rcy10aGlzLmluZm8iLCJoYW0tcmFkaW8tb3AubmV0'@;
put 'IiwiaGVyZS1mb3ItbW9yZS5pbmZvIiwiaG9iYnktc2l0ZS5jb20iLCJob2JieS1zaXRlLm9yZyIsImhvbWUuZHluZG5zLm9yZyIsImhvbWVkbnMub3JnIiwiaG9tZWZ0cC5uZXQiLCJob21lZnRwLm9yZyIsImhvbWVpcC5uZXQiLCJob21lbGludXguY29tIiwiaG9tZWxpbnV4Lm5ldCIsImhv'@;
put 'bWVsaW51eC5vcmciLCJob21ldW5peC5jb20iLCJob21ldW5peC5uZXQiLCJob21ldW5peC5vcmciLCJpYW1hbGxhbWEuY29tIiwiaW4tdGhlLWJhbmQubmV0IiwiaXMtYS1hbmFyY2hpc3QuY29tIiwiaXMtYS1ibG9nZ2VyLmNvbSIsImlzLWEtYm9va2tlZXBlci5jb20iLCJpcy1hLWJydWlu'@;
put 'c2Zhbi5vcmciLCJpcy1hLWJ1bGxzLWZhbi5jb20iLCJpcy1hLWNhbmRpZGF0ZS5vcmciLCJpcy1hLWNhdGVyZXIuY29tIiwiaXMtYS1jZWx0aWNzZmFuLm9yZyIsImlzLWEtY2hlZi5jb20iLCJpcy1hLWNoZWYubmV0IiwiaXMtYS1jaGVmLm9yZyIsImlzLWEtY29uc2VydmF0aXZlLmNvbSIs'@;
put 'ImlzLWEtY3BhLmNvbSIsImlzLWEtY3ViaWNsZS1zbGF2ZS5jb20iLCJpcy1hLWRlbW9jcmF0LmNvbSIsImlzLWEtZGVzaWduZXIuY29tIiwiaXMtYS1kb2N0b3IuY29tIiwiaXMtYS1maW5hbmNpYWxhZHZpc29yLmNvbSIsImlzLWEtZ2Vlay5jb20iLCJpcy1hLWdlZWsubmV0IiwiaXMtYS1n'@;
put 'ZWVrLm9yZyIsImlzLWEtZ3JlZW4uY29tIiwiaXMtYS1ndXJ1LmNvbSIsImlzLWEtaGFyZC13b3JrZXIuY29tIiwiaXMtYS1odW50ZXIuY29tIiwiaXMtYS1rbmlnaHQub3JnIiwiaXMtYS1sYW5kc2NhcGVyLmNvbSIsImlzLWEtbGF3eWVyLmNvbSIsImlzLWEtbGliZXJhbC5jb20iLCJpcy1h'@;
put 'LWxpYmVydGFyaWFuLmNvbSIsImlzLWEtbGludXgtdXNlci5vcmciLCJpcy1hLWxsYW1hLmNvbSIsImlzLWEtbXVzaWNpYW4uY29tIiwiaXMtYS1uYXNjYXJmYW4uY29tIiwiaXMtYS1udXJzZS5jb20iLCJpcy1hLXBhaW50ZXIuY29tIiwiaXMtYS1wYXRzZmFuLm9yZyIsImlzLWEtcGVyc29u'@;
put 'YWx0cmFpbmVyLmNvbSIsImlzLWEtcGhvdG9ncmFwaGVyLmNvbSIsImlzLWEtcGxheWVyLmNvbSIsImlzLWEtcmVwdWJsaWNhbi5jb20iLCJpcy1hLXJvY2tzdGFyLmNvbSIsImlzLWEtc29jaWFsaXN0LmNvbSIsImlzLWEtc294ZmFuLm9yZyIsImlzLWEtc3R1ZGVudC5jb20iLCJpcy1hLXRl'@;
put 'YWNoZXIuY29tIiwiaXMtYS10ZWNoaWUuY29tIiwiaXMtYS10aGVyYXBpc3QuY29tIiwiaXMtYW4tYWNjb3VudGFudC5jb20iLCJpcy1hbi1hY3Rvci5jb20iLCJpcy1hbi1hY3RyZXNzLmNvbSIsImlzLWFuLWFuYXJjaGlzdC5jb20iLCJpcy1hbi1hcnRpc3QuY29tIiwiaXMtYW4tZW5naW5l'@;
put 'ZXIuY29tIiwiaXMtYW4tZW50ZXJ0YWluZXIuY29tIiwiaXMtYnkudXMiLCJpcy1jZXJ0aWZpZWQuY29tIiwiaXMtZm91bmQub3JnIiwiaXMtZ29uZS5jb20iLCJpcy1pbnRvLWFuaW1lLmNvbSIsImlzLWludG8tY2Fycy5jb20iLCJpcy1pbnRvLWNhcnRvb25zLmNvbSIsImlzLWludG8tZ2Ft'@;
put 'ZXMuY29tIiwiaXMtbGVldC5jb20iLCJpcy1sb3N0Lm9yZyIsImlzLW5vdC1jZXJ0aWZpZWQuY29tIiwiaXMtc2F2ZWQub3JnIiwiaXMtc2xpY2suY29tIiwiaXMtdWJlcmxlZXQuY29tIiwiaXMtdmVyeS1iYWQub3JnIiwiaXMtdmVyeS1ldmlsLm9yZyIsImlzLXZlcnktZ29vZC5vcmciLCJp'@;
put 'cy12ZXJ5LW5pY2Uub3JnIiwiaXMtdmVyeS1zd2VldC5vcmciLCJpcy13aXRoLXRoZWJhbmQuY29tIiwiaXNhLWdlZWsuY29tIiwiaXNhLWdlZWsubmV0IiwiaXNhLWdlZWsub3JnIiwiaXNhLWhvY2tleW51dC5jb20iLCJpc3NtYXJ0ZXJ0aGFueW91LmNvbSIsImlzdGVpbmdlZWsuZGUiLCJp'@;
put 'c3RtZWluLmRlIiwia2lja3MtYXNzLm5ldCIsImtpY2tzLWFzcy5vcmciLCJrbm93c2l0YWxsLmluZm8iLCJsYW5kLTQtc2FsZS51cyIsImxlYnRpbW5ldHouZGUiLCJsZWl0dW5nc2VuLmRlIiwibGlrZXMtcGllLmNvbSIsImxpa2VzY2FuZHkuY29tIiwibWVyc2VpbmUubnUiLCJtaW5lLm51'@;
put 'IiwibWlzY29uZnVzZWQub3JnIiwibXlwZXRzLndzIiwibXlwaG90b3MuY2MiLCJuZWF0LXVybC5jb20iLCJvZmZpY2Utb24tdGhlLm5ldCIsIm9uLXRoZS13ZWIudHYiLCJwb2R6b25lLm5ldCIsInBvZHpvbmUub3JnIiwicmVhZG15YmxvZy5vcmciLCJzYXZlcy10aGUtd2hhbGVzLmNvbSIs'@;
put 'InNjcmFwcGVyLXNpdGUubmV0Iiwic2NyYXBwaW5nLmNjIiwic2VsZmlwLmJpeiIsInNlbGZpcC5jb20iLCJzZWxmaXAuaW5mbyIsInNlbGZpcC5uZXQiLCJzZWxmaXAub3JnIiwic2VsbHMtZm9yLWxlc3MuY29tIiwic2VsbHMtZm9yLXUuY29tIiwic2VsbHMtaXQubmV0Iiwic2VsbHN5b3Vy'@;
put 'aG9tZS5vcmciLCJzZXJ2ZWJicy5jb20iLCJzZXJ2ZWJicy5uZXQiLCJzZXJ2ZWJicy5vcmciLCJzZXJ2ZWZ0cC5uZXQiLCJzZXJ2ZWZ0cC5vcmciLCJzZXJ2ZWdhbWUub3JnIiwic2hhY2tuZXQubnUiLCJzaW1wbGUtdXJsLmNvbSIsInNwYWNlLXRvLXJlbnQuY29tIiwic3R1ZmYtNC1zYWxl'@;
put 'Lm9yZyIsInN0dWZmLTQtc2FsZS51cyIsInRlYWNoZXMteW9nYS5jb20iLCJ0aHJ1aGVyZS5uZXQiLCJ0cmFldW10Z2VyYWRlLmRlIiwid2ViaG9wLmJpeiIsIndlYmhvcC5pbmZvIiwid2ViaG9wLm5ldCIsIndlYmhvcC5vcmciLCJ3b3JzZS10aGFuLnR2Iiwid3JpdGVzdGhpc2Jsb2cuY29t'@;
put 'IiwiZGRuc3MuZGUiLCJkeW4uZGRuc3MuZGUiLCJkeW5kbnMuZGRuc3MuZGUiLCJkeW5kbnMxLmRlIiwiZHluLWlwMjQuZGUiLCJob21lLXdlYnNlcnZlci5kZSIsImR5bi5ob21lLXdlYnNlcnZlci5kZSIsIm15aG9tZS1zZXJ2ZXIuZGUiLCJkZG5zcy5vcmciLCJkZWZpbmltYS5uZXQiLCJk'@;
put 'ZWZpbmltYS5pbyIsIm9uZGlnaXRhbG9jZWFuLmFwcCIsIiouZGlnaXRhbG9jZWFuc3BhY2VzLmNvbSIsImJjaS5kbnN0cmFjZS5wcm8iLCJkZG5zZnJlZS5jb20iLCJkZG5zZ2Vlay5jb20iLCJnaWl6ZS5jb20iLCJnbGVlemUuY29tIiwia296b3cuY29tIiwibG9zZXlvdXJpcC5jb20iLCJv'@;
put 'b2d1eS5jb20iLCJ0aGV3b3JrcGMuY29tIiwiY2FzYWNhbS5uZXQiLCJkeW51Lm5ldCIsImFjY2Vzc2NhbS5vcmciLCJjYW1kdnIub3JnIiwiZnJlZWRkbnMub3JnIiwibXl3aXJlLm9yZyIsIndlYnJlZGlyZWN0Lm9yZyIsIm15ZGRucy5yb2NrcyIsImJsb2dzaXRlLnh5eiIsImR5bnY2Lm5l'@;
put 'dCIsImU0LmN6IiwiZWVyby5vbmxpbmUiLCJlZXJvLXN0YWdlLm9ubGluZSIsImVsZW1lbnRvci5jbG91ZCIsImVsZW1lbnRvci5jb29sIiwiZW4tcm9vdC5mciIsIm15dHVsZWFwLmNvbSIsInR1bGVhcC1wYXJ0bmVycy5jb20iLCJlbmNyLmFwcCIsImVuY29yZWFwaS5jb20iLCJvbnJlZC5v'@;
put 'bmUiLCJzdGFnaW5nLm9ucmVkLm9uZSIsImV1LmVuY293YXkuY2xvdWQiLCJldS5vcmciLCJhbC5ldS5vcmciLCJhc3NvLmV1Lm9yZyIsImF0LmV1Lm9yZyIsImF1LmV1Lm9yZyIsImJlLmV1Lm9yZyIsImJnLmV1Lm9yZyIsImNhLmV1Lm9yZyIsImNkLmV1Lm9yZyIsImNoLmV1Lm9yZyIsImNu'@;
put 'LmV1Lm9yZyIsImN5LmV1Lm9yZyIsImN6LmV1Lm9yZyIsImRlLmV1Lm9yZyIsImRrLmV1Lm9yZyIsImVkdS5ldS5vcmciLCJlZS5ldS5vcmciLCJlcy5ldS5vcmciLCJmaS5ldS5vcmciLCJmci5ldS5vcmciLCJnci5ldS5vcmciLCJoci5ldS5vcmciLCJodS5ldS5vcmciLCJpZS5ldS5vcmci'@;
put 'LCJpbC5ldS5vcmciLCJpbi5ldS5vcmciLCJpbnQuZXUub3JnIiwiaXMuZXUub3JnIiwiaXQuZXUub3JnIiwianAuZXUub3JnIiwia3IuZXUub3JnIiwibHQuZXUub3JnIiwibHUuZXUub3JnIiwibHYuZXUub3JnIiwibWMuZXUub3JnIiwibWUuZXUub3JnIiwibWsuZXUub3JnIiwibXQuZXUu'@;
put 'b3JnIiwibXkuZXUub3JnIiwibmV0LmV1Lm9yZyIsIm5nLmV1Lm9yZyIsIm5sLmV1Lm9yZyIsIm5vLmV1Lm9yZyIsIm56LmV1Lm9yZyIsInBhcmlzLmV1Lm9yZyIsInBsLmV1Lm9yZyIsInB0LmV1Lm9yZyIsInEtYS5ldS5vcmciLCJyby5ldS5vcmciLCJydS5ldS5vcmciLCJzZS5ldS5vcmci'@;
put 'LCJzaS5ldS5vcmciLCJzay5ldS5vcmciLCJ0ci5ldS5vcmciLCJ1ay5ldS5vcmciLCJ1cy5ldS5vcmciLCJldXJvZGlyLnJ1IiwiZXUtMS5ldmVubm9kZS5jb20iLCJldS0yLmV2ZW5ub2RlLmNvbSIsImV1LTMuZXZlbm5vZGUuY29tIiwiZXUtNC5ldmVubm9kZS5jb20iLCJ1cy0xLmV2ZW5u'@;
put 'b2RlLmNvbSIsInVzLTIuZXZlbm5vZGUuY29tIiwidXMtMy5ldmVubm9kZS5jb20iLCJ1cy00LmV2ZW5ub2RlLmNvbSIsInR3bWFpbC5jYyIsInR3bWFpbC5uZXQiLCJ0d21haWwub3JnIiwibXltYWlsZXIuY29tLnR3IiwidXJsLnR3Iiwib25mYWJyaWNhLmNvbSIsImFwcHMuZmJzYnguY29t'@;
put 'IiwicnUubmV0IiwiYWR5Z2V5YS5ydSIsImJhc2hraXJpYS5ydSIsImJpci5ydSIsImNiZy5ydSIsImNvbS5ydSIsImRhZ2VzdGFuLnJ1IiwiZ3Jvem55LnJ1Iiwia2FsbXlraWEucnUiLCJrdXN0YW5haS5ydSIsIm1hcmluZS5ydSIsIm1vcmRvdmlhLnJ1IiwibXNrLnJ1IiwibXl0aXMucnUi'@;
put 'LCJuYWxjaGlrLnJ1Iiwibm92LnJ1IiwicHlhdGlnb3Jzay5ydSIsInNwYi5ydSIsInZsYWRpa2F2a2F6LnJ1IiwidmxhZGltaXIucnUiLCJhYmtoYXppYS5zdSIsImFkeWdleWEuc3UiLCJha3R5dWJpbnNrLnN1IiwiYXJraGFuZ2Vsc2suc3UiLCJhcm1lbmlhLnN1IiwiYXNoZ2FiYWQuc3Ui'@;
put 'LCJhemVyYmFpamFuLnN1IiwiYmFsYXNob3Yuc3UiLCJiYXNoa2lyaWEuc3UiLCJicnlhbnNrLnN1IiwiYnVraGFyYS5zdSIsImNoaW1rZW50LnN1IiwiZGFnZXN0YW4uc3UiLCJlYXN0LWthemFraHN0YW4uc3UiLCJleG5ldC5zdSIsImdlb3JnaWEuc3UiLCJncm96bnkuc3UiLCJpdmFub3Zv'@;
put 'LnN1IiwiamFtYnlsLnN1Iiwia2FsbXlraWEuc3UiLCJrYWx1Z2Euc3UiLCJrYXJhY29sLnN1Iiwia2FyYWdhbmRhLnN1Iiwia2FyZWxpYS5zdSIsImtoYWthc3NpYS5zdSIsImtyYXNub2Rhci5zdSIsImt1cmdhbi5zdSIsImt1c3RhbmFpLnN1IiwibGVudWcuc3UiLCJtYW5neXNobGFrLnN1'@;
put 'IiwibW9yZG92aWEuc3UiLCJtc2suc3UiLCJtdXJtYW5zay5zdSIsIm5hbGNoaWsuc3UiLCJuYXZvaS5zdSIsIm5vcnRoLWthemFraHN0YW4uc3UiLCJub3Yuc3UiLCJvYm5pbnNrLnN1IiwicGVuemEuc3UiLCJwb2tyb3Zzay5zdSIsInNvY2hpLnN1Iiwic3BiLnN1IiwidGFzaGtlbnQuc3Ui'@;
put 'LCJ0ZXJtZXouc3UiLCJ0b2dsaWF0dGkuc3UiLCJ0cm9pdHNrLnN1IiwidHNlbGlub2dyYWQuc3UiLCJ0dWxhLnN1IiwidHV2YS5zdSIsInZsYWRpa2F2a2F6LnN1IiwidmxhZGltaXIuc3UiLCJ2b2xvZ2RhLnN1IiwiY2hhbm5lbHNkdnIubmV0IiwidS5jaGFubmVsc2R2ci5uZXQiLCJlZGdl'@;
put 'Y29tcHV0ZS5hcHAiLCJmYXN0bHktdGVycmFyaXVtLmNvbSIsImZhc3RseWxiLm5ldCIsIm1hcC5mYXN0bHlsYi5uZXQiLCJmcmVldGxzLmZhc3RseS5uZXQiLCJtYXAuZmFzdGx5Lm5ldCIsImEucHJvZC5mYXN0bHkubmV0IiwiZ2xvYmFsLnByb2QuZmFzdGx5Lm5ldCIsImEuc3NsLmZhc3Rs'@;
put 'eS5uZXQiLCJiLnNzbC5mYXN0bHkubmV0IiwiZ2xvYmFsLnNzbC5mYXN0bHkubmV0IiwiZmFzdHZwcy1zZXJ2ZXIuY29tIiwiZmFzdHZwcy5ob3N0IiwibXlmYXN0Lmhvc3QiLCJmYXN0dnBzLnNpdGUiLCJteWZhc3Quc3BhY2UiLCJmZWRvcmFpbmZyYWNsb3VkLm9yZyIsImZlZG9yYXBlb3Bs'@;
put 'ZS5vcmciLCJjbG91ZC5mZWRvcmFwcm9qZWN0Lm9yZyIsImFwcC5vcy5mZWRvcmFwcm9qZWN0Lm9yZyIsImFwcC5vcy5zdGcuZmVkb3JhcHJvamVjdC5vcmciLCJjb25uLnVrIiwiY29wcm8udWsiLCJob3NwLnVrIiwibXlkb2Jpc3MuY29tIiwiZmgtbXVlbnN0ZXIuaW8iLCJmaWxlZ2Vhci5t'@;
put 'ZSIsImZpbGVnZWFyLWF1Lm1lIiwiZmlsZWdlYXItZGUubWUiLCJmaWxlZ2Vhci1nYi5tZSIsImZpbGVnZWFyLWllLm1lIiwiZmlsZWdlYXItanAubWUiLCJmaWxlZ2Vhci1zZy5tZSIsImZpcmViYXNlYXBwLmNvbSIsImZpcmV3ZWIuYXBwIiwiZmxhcC5pZCIsIm9uZmxhc2hkcml2ZS5hcHAi'@;
put 'LCJmbGRydi5jb20iLCJmbHkuZGV2IiwiZWRnZWFwcC5uZXQiLCJzaHcuaW8iLCJmbHlubmhvc3RpbmcubmV0IiwiZm9yZ2VibG9ja3MuY29tIiwiaWQuZm9yZ2Vyb2NrLmlvIiwiZnJhbWVyLmFwcCIsImZyYW1lcmNhbnZhcy5jb20iLCIqLmZydXNreS5kZSIsInJhdnBhZ2UuY28uaWwiLCIw'@;
put 'ZS52YyIsImZyZWVib3gtb3MuY29tIiwiZnJlZWJveG9zLmNvbSIsImZieC1vcy5mciIsImZieG9zLmZyIiwiZnJlZWJveC1vcy5mciIsImZyZWVib3hvcy5mciIsImZyZWVkZXNrdG9wLm9yZyIsImZyZWVteWlwLmNvbSIsIndpZW4uZnVua2ZldWVyLmF0IiwiKi5mdXR1cmVjbXMuYXQiLCIq'@;
put 'LmV4LmZ1dHVyZWNtcy5hdCIsIiouaW4uZnV0dXJlY21zLmF0IiwiZnV0dXJlaG9zdGluZy5hdCIsImZ1dHVyZW1haWxpbmcuYXQiLCIqLmV4Lm9ydHNpbmZvLmF0IiwiKi5rdW5kZW4ub3J0c2luZm8uYXQiLCIqLnN0YXRpY3MuY2xvdWQiLCJpbmRlcGVuZGVudC1jb21taXNzaW9uLnVrIiwi'@;
put 'aW5kZXBlbmRlbnQtaW5xdWVzdC51ayIsImluZGVwZW5kZW50LWlucXVpcnkudWsiLCJpbmRlcGVuZGVudC1wYW5lbC51ayIsImluZGVwZW5kZW50LXJldmlldy51ayIsInB1YmxpYy1pbnF1aXJ5LnVrIiwicm95YWwtY29tbWlzc2lvbi51ayIsImNhbXBhaWduLmdvdi51ayIsInNlcnZpY2Uu'@;
put 'Z292LnVrIiwiYXBpLmdvdi51ayIsImdlaGlybi5uZS5qcCIsInVzZXJjb250ZW50LmpwIiwiZ2VudGFwcHMuY29tIiwiZ2VudGxlbnRhcGlzLmNvbSIsImxhYi5tcyIsImNkbi1lZGdlcy5uZXQiLCJnaG9zdC5pbyIsImdzai5ieiIsImdpdGh1YnVzZXJjb250ZW50LmNvbSIsImdpdGh1YnBy'@;
put 'ZXZpZXcuZGV2IiwiZ2l0aHViLmlvIiwiZ2l0bGFiLmlvIiwiZ2l0YXBwLnNpIiwiZ2l0cGFnZS5zaSIsImdsaXRjaC5tZSIsIm5vZy5jb21tdW5pdHkiLCJjby5ybyIsInNob3Aucm8iLCJsb2xpcG9wLmlvIiwiYW5ncnkuanAiLCJiYWJ5Ymx1ZS5qcCIsImJhYnltaWxrLmpwIiwiYmFja2Ry'@;
put 'b3AuanAiLCJiYW1iaW5hLmpwIiwiYml0dGVyLmpwIiwiYmx1c2guanAiLCJib28uanAiLCJib3kuanAiLCJib3lmcmllbmQuanAiLCJidXQuanAiLCJjYW5keXBvcC5qcCIsImNhcG9vLmpwIiwiY2F0Zm9vZC5qcCIsImNoZWFwLmpwIiwiY2hpY2FwcGEuanAiLCJjaGlsbG91dC5qcCIsImNo'@;
put 'aXBzLmpwIiwiY2hvd2Rlci5qcCIsImNodS5qcCIsImNpYW8uanAiLCJjb2NvdHRlLmpwIiwiY29vbGJsb2cuanAiLCJjcmFua3kuanAiLCJjdXRlZ2lybC5qcCIsImRhYS5qcCIsImRlY2EuanAiLCJkZWNpLmpwIiwiZGlnaWNrLmpwIiwiZWdvaXNtLmpwIiwiZmFrZWZ1ci5qcCIsImZlbS5q'@;
put 'cCIsImZsaWVyLmpwIiwiZmxvcHB5LmpwIiwiZm9vbC5qcCIsImZyZW5jaGtpc3MuanAiLCJnaXJsZnJpZW5kLmpwIiwiZ2lybHkuanAiLCJnbG9vbXkuanAiLCJnb25uYS5qcCIsImdyZWF0ZXIuanAiLCJoYWNjYS5qcCIsImhlYXZ5LmpwIiwiaGVyLmpwIiwiaGloby5qcCIsImhpcHB5Lmpw'@;
put 'IiwiaG9seS5qcCIsImh1bmdyeS5qcCIsImljdXJ1cy5qcCIsIml0aWdvLmpwIiwiamVsbHliZWFuLmpwIiwia2lraXJhcmEuanAiLCJraWxsLmpwIiwia2lsby5qcCIsImt1cm9uLmpwIiwibGl0dGxlc3Rhci5qcCIsImxvbGlwb3BtYy5qcCIsImxvbGl0YXB1bmsuanAiLCJsb21vLmpwIiwi'@;
put 'bG92ZXBvcC5qcCIsImxvdmVzaWNrLmpwIiwibWFpbi5qcCIsIm1vZHMuanAiLCJtb25kLmpwIiwibW9uZ29saWFuLmpwIiwibW9vLmpwIiwibmFtYXN0ZS5qcCIsIm5pa2l0YS5qcCIsIm5vYnVzaGkuanAiLCJub29yLmpwIiwib29wcy5qcCIsInBhcmFsbGVsLmpwIiwicGFyYXNpdGUuanAi'@;
put 'LCJwZWNvcmkuanAiLCJwZWV3ZWUuanAiLCJwZW5uZS5qcCIsInBlcHBlci5qcCIsInBlcm1hLmpwIiwicGlnYm9hdC5qcCIsInBpbm9rby5qcCIsInB1bnl1LmpwIiwicHVwdS5qcCIsInB1c3N5Y2F0LmpwIiwicHlhLmpwIiwicmFpbmRyb3AuanAiLCJyZWFkeW1hZGUuanAiLCJzYWRpc3Qu'@;
put 'anAiLCJzY2hvb2xidXMuanAiLCJzZWNyZXQuanAiLCJzdGFiYS5qcCIsInN0cmlwcGVyLmpwIiwic3ViLmpwIiwic3VubnlkYXkuanAiLCJ0aGljay5qcCIsInRvbmtvdHN1LmpwIiwidW5kZXIuanAiLCJ1cHBlci5qcCIsInZlbHZldC5qcCIsInZlcnNlLmpwIiwidmVyc3VzLmpwIiwidml2'@;
put 'aWFuLmpwIiwid2F0c29uLmpwIiwid2VibGlrZS5qcCIsIndoaXRlc25vdy5qcCIsInpvbWJpZS5qcCIsImhldGVtbC5uZXQiLCJjbG91ZGFwcHMuZGlnaXRhbCIsImxvbmRvbi5jbG91ZGFwcHMuZGlnaXRhbCIsInB5bW50LnVrIiwiaG9tZW9mZmljZS5nb3YudWsiLCJyby5pbSIsImdvaXAu'@;
put 'ZGUiLCJydW4uYXBwIiwiYS5ydW4uYXBwIiwid2ViLmFwcCIsIiouMGVtbS5jb20iLCJhcHBzcG90LmNvbSIsIiouci5hcHBzcG90LmNvbSIsImNvZGVzcG90LmNvbSIsImdvb2dsZWFwaXMuY29tIiwiZ29vZ2xlY29kZS5jb20iLCJwYWdlc3BlZWRtb2JpbGl6ZXIuY29tIiwicHVibGlzaHBy'@;
put 'b3h5LmNvbSIsIndpdGhnb29nbGUuY29tIiwid2l0aHlvdXR1YmUuY29tIiwiKi5nYXRld2F5LmRldiIsImNsb3VkLmdvb2ciLCJ0cmFuc2xhdGUuZ29vZyIsIioudXNlcmNvbnRlbnQuZ29vZyIsImNsb3VkZnVuY3Rpb25zLm5ldCIsImJsb2dzcG90LmFlIiwiYmxvZ3Nwb3QuYWwiLCJibG9n'@;
put 'c3BvdC5hbSIsImJsb2dzcG90LmJhIiwiYmxvZ3Nwb3QuYmUiLCJibG9nc3BvdC5iZyIsImJsb2dzcG90LmJqIiwiYmxvZ3Nwb3QuY2EiLCJibG9nc3BvdC5jZiIsImJsb2dzcG90LmNoIiwiYmxvZ3Nwb3QuY2wiLCJibG9nc3BvdC5jby5hdCIsImJsb2dzcG90LmNvLmlkIiwiYmxvZ3Nwb3Qu'@;
put 'Y28uaWwiLCJibG9nc3BvdC5jby5rZSIsImJsb2dzcG90LmNvLm56IiwiYmxvZ3Nwb3QuY28udWsiLCJibG9nc3BvdC5jby56YSIsImJsb2dzcG90LmNvbSIsImJsb2dzcG90LmNvbS5hciIsImJsb2dzcG90LmNvbS5hdSIsImJsb2dzcG90LmNvbS5iciIsImJsb2dzcG90LmNvbS5ieSIsImJs'@;
put 'b2dzcG90LmNvbS5jbyIsImJsb2dzcG90LmNvbS5jeSIsImJsb2dzcG90LmNvbS5lZSIsImJsb2dzcG90LmNvbS5lZyIsImJsb2dzcG90LmNvbS5lcyIsImJsb2dzcG90LmNvbS5tdCIsImJsb2dzcG90LmNvbS5uZyIsImJsb2dzcG90LmNvbS50ciIsImJsb2dzcG90LmNvbS51eSIsImJsb2dz'@;
put 'cG90LmN2IiwiYmxvZ3Nwb3QuY3oiLCJibG9nc3BvdC5kZSIsImJsb2dzcG90LmRrIiwiYmxvZ3Nwb3QuZmkiLCJibG9nc3BvdC5mciIsImJsb2dzcG90LmdyIiwiYmxvZ3Nwb3QuaGsiLCJibG9nc3BvdC5ociIsImJsb2dzcG90Lmh1IiwiYmxvZ3Nwb3QuaWUiLCJibG9nc3BvdC5pbiIsImJs'@;
put 'b2dzcG90LmlzIiwiYmxvZ3Nwb3QuaXQiLCJibG9nc3BvdC5qcCIsImJsb2dzcG90LmtyIiwiYmxvZ3Nwb3QubGkiLCJibG9nc3BvdC5sdCIsImJsb2dzcG90Lmx1IiwiYmxvZ3Nwb3QubWQiLCJibG9nc3BvdC5tayIsImJsb2dzcG90Lm1yIiwiYmxvZ3Nwb3QubXgiLCJibG9nc3BvdC5teSIs'@;
put 'ImJsb2dzcG90Lm5sIiwiYmxvZ3Nwb3Qubm8iLCJibG9nc3BvdC5wZSIsImJsb2dzcG90LnB0IiwiYmxvZ3Nwb3QucWEiLCJibG9nc3BvdC5yZSIsImJsb2dzcG90LnJvIiwiYmxvZ3Nwb3QucnMiLCJibG9nc3BvdC5ydSIsImJsb2dzcG90LnNlIiwiYmxvZ3Nwb3Quc2ciLCJibG9nc3BvdC5z'@;
put 'aSIsImJsb2dzcG90LnNrIiwiYmxvZ3Nwb3Quc24iLCJibG9nc3BvdC50ZCIsImJsb2dzcG90LnR3IiwiYmxvZ3Nwb3QudWciLCJibG9nc3BvdC52biIsImdvdXBpbGUuZnIiLCJnb3YubmwiLCJhd3NtcHBsLmNvbSIsImdceGZjbnN0aWdiZXN0ZWxsZW4uZGUiLCJnXHhmY25zdGlnbGllZmVy'@;
put 'bi5kZSIsImZpbi5jaSIsImZyZWUuaHIiLCJjYWEubGkiLCJ1YS5ycyIsImNvbmYuc2UiLCJocy56b25lIiwiaHMucnVuIiwiaGFzaGJhbmcuc2giLCJoYXN1cmEuYXBwIiwiaGFzdXJhLWFwcC5pbyIsInBhZ2VzLml0LmhzLWhlaWxicm9ubi5kZSIsImhlcGZvcmdlLm9yZyIsImhlcm9rdWFw'@;
put 'cC5jb20iLCJoZXJva3Vzc2wuY29tIiwicmF2ZW5kYi5jbG91ZCIsIm15cmF2ZW5kYi5jb20iLCJyYXZlbmRiLmNvbW11bml0eSIsInJhdmVuZGIubWUiLCJkZXZlbG9wbWVudC5ydW4iLCJyYXZlbmRiLnJ1biIsImhvbWVza2xlcC5wbCIsInNlY2Fhcy5oayIsImhvcGxpeC5zaG9wIiwib3J4'@;
put 'LmJpeiIsImJpei5nbCIsImNvbC5uZyIsImZpcm0ubmciLCJnZW4ubmciLCJsdGQubmciLCJuZ28ubmciLCJlZHUuc2NvdCIsInNjaC5zbyIsImhvc3R5aG9zdGluZy5pbyIsImhceGU0a2tpbmVuLmZpIiwiKi5tb29uc2NhbGUuaW8iLCJtb29uc2NhbGUubmV0IiwiaWtpLmZpIiwiaWJ4b3Mu'@;
put 'aXQiLCJpbGlhZGJveG9zLml0IiwiaW1wZXJ0cml4Y2RuLmNvbSIsImltcGVydHJpeC5jb20iLCJzbXVzaGNkbi5jb20iLCJ3cGhvc3RlZG1haWwuY29tIiwid3BtdWNkbi5jb20iLCJ0ZW1wdXJsLmhvc3QiLCJ3cG11ZGV2Lmhvc3QiLCJkeW4tYmVybGluLmRlIiwiaW4tYmVybGluLmRlIiwi'@;
put 'aW4tYnJiLmRlIiwiaW4tYnV0dGVyLmRlIiwiaW4tZHNsLmRlIiwiaW4tZHNsLm5ldCIsImluLWRzbC5vcmciLCJpbi12cG4uZGUiLCJpbi12cG4ubmV0IiwiaW4tdnBuLm9yZyIsImJpei5hdCIsImluZm8uYXQiLCJpbmZvLmN4IiwiYWMubGVnLmJyIiwiYWwubGVnLmJyIiwiYW0ubGVnLmJy'@;
put 'IiwiYXAubGVnLmJyIiwiYmEubGVnLmJyIiwiY2UubGVnLmJyIiwiZGYubGVnLmJyIiwiZXMubGVnLmJyIiwiZ28ubGVnLmJyIiwibWEubGVnLmJyIiwibWcubGVnLmJyIiwibXMubGVnLmJyIiwibXQubGVnLmJyIiwicGEubGVnLmJyIiwicGIubGVnLmJyIiwicGUubGVnLmJyIiwicGkubGVn'@;
put 'LmJyIiwicHIubGVnLmJyIiwicmoubGVnLmJyIiwicm4ubGVnLmJyIiwicm8ubGVnLmJyIiwicnIubGVnLmJyIiwicnMubGVnLmJyIiwic2MubGVnLmJyIiwic2UubGVnLmJyIiwic3AubGVnLmJyIiwidG8ubGVnLmJyIiwicGl4b2xpbm8uY29tIiwibmE0dS5ydSIsImlvcHN5cy5zZSIsImlw'@;
put 'aWZvbnkubmV0IiwiaXNlcnZzY2h1bGUuZGUiLCJtZWluLWlzZXJ2LmRlIiwic2NodWxwbGF0dGZvcm0uZGUiLCJzY2h1bHNlcnZlci5kZSIsInRlc3QtaXNlcnYuZGUiLCJpc2Vydi5kZXYiLCJpb2JiLm5ldCIsIm1lbC5jbG91ZGxldHMuY29tLmF1IiwiY2xvdWQuaW50ZXJob3N0c29sdXRp'@;
put 'b25zLmJlIiwidXNlcnMuc2NhbGUudmlydHVhbGNsb3VkLmNvbS5iciIsIm15Y2xvdWQuYnkiLCJhbHAxLmFlLmZsb3cuY2giLCJhcHBlbmdpbmUuZmxvdy5jaCIsImVzLTEuYXhhcm5ldC5jbG91ZCIsImRpYWRlbS5jbG91ZCIsInZpcC5qZWxhc3RpYy5jbG91ZCIsImplbGUuY2xvdWQiLCJp'@;
put 'dDEuZXVyLmFydWJhLmplbnYtYXJ1YmEuY2xvdWQiLCJpdDEuamVudi1hcnViYS5jbG91ZCIsImtlbGl3ZWIuY2xvdWQiLCJjcy5rZWxpd2ViLmNsb3VkIiwib3hhLmNsb3VkIiwidG4ub3hhLmNsb3VkIiwidWsub3hhLmNsb3VkIiwicHJpbWV0ZWwuY2xvdWQiLCJ1ay5wcmltZXRlbC5jbG91'@;
put 'ZCIsImNhLnJlY2xhaW0uY2xvdWQiLCJ1ay5yZWNsYWltLmNsb3VkIiwidXMucmVjbGFpbS5jbG91ZCIsImNoLnRyZW5kaG9zdGluZy5jbG91ZCIsImRlLnRyZW5kaG9zdGluZy5jbG91ZCIsImplbGUuY2x1YiIsImFtc2NvbXB1dGUuY29tIiwiY2xpY2tldGNsb3VkLmNvbSIsImRvcGFhcy5j'@;
put 'b20iLCJoaWRvcmEuY29tIiwicGFhcy5ob3N0ZWQtYnktcHJldmlkZXIuY29tIiwicmFnLWNsb3VkLmhvc3RldXIuY29tIiwicmFnLWNsb3VkLWNoLmhvc3RldXIuY29tIiwiamNsb3VkLmlrLXNlcnZlci5jb20iLCJqY2xvdWQtdmVyLWpwYy5pay1zZXJ2ZXIuY29tIiwiZGVtby5qZWxhc3Rp'@;
put 'Yy5jb20iLCJraWxhdGlyb24uY29tIiwicGFhcy5tYXNzaXZlZ3JpZC5jb20iLCJqZWQud2FmYWljbG91ZC5jb20iLCJsb24ud2FmYWljbG91ZC5jb20iLCJyeWQud2FmYWljbG91ZC5jb20iLCJqLnNjYWxlZm9yY2UuY29tLmN5IiwiamVsYXN0aWMuZG9nYWRvLmV1IiwiZmkuY2xvdWRwbGF0'@;
put 'Zm9ybS5maSIsImRlbW8uZGF0YWNlbnRlci5maSIsInBhYXMuZGF0YWNlbnRlci5maSIsImplbGUuaG9zdCIsIm1pcmNsb3VkLmhvc3QiLCJwYWFzLmJlZWJ5dGUuaW8iLCJzZWtkMS5iZWVieXRlYXBwLmlvIiwiamVsZS5pbyIsImNsb3VkLWZyMS51bmlzcGFjZS5pbyIsImpjLm5lZW4uaXQi'@;
put 'LCJjbG91ZC5qZWxhc3RpYy5vcGVuLnRpbS5pdCIsImpjbG91ZC5reiIsInVwYWFzLmthenRlbGVwb3J0Lmt6IiwiY2xvdWRqaWZmeS5uZXQiLCJmcmExLWRlLmNsb3VkamlmZnkubmV0Iiwid2VzdDEtdXMuY2xvdWRqaWZmeS5uZXQiLCJqbHMtc3RvMS5lbGFzdHgubmV0IiwiamxzLXN0bzIu'@;
put 'ZWxhc3R4Lm5ldCIsImpscy1zdG8zLmVsYXN0eC5uZXQiLCJmYXN0c3RhY2tzLm5ldCIsImZyLTEucGFhcy5tYXNzaXZlZ3JpZC5uZXQiLCJsb24tMS5wYWFzLm1hc3NpdmVncmlkLm5ldCIsImxvbi0yLnBhYXMubWFzc2l2ZWdyaWQubmV0IiwibnktMS5wYWFzLm1hc3NpdmVncmlkLm5ldCIs'@;
put 'Im55LTIucGFhcy5tYXNzaXZlZ3JpZC5uZXQiLCJzZy0xLnBhYXMubWFzc2l2ZWdyaWQubmV0IiwiamVsYXN0aWMuc2F2ZWluY2xvdWQubmV0Iiwibm9yZGVzdGUtaWRjLnNhdmVpbmNsb3VkLm5ldCIsImouc2NhbGVmb3JjZS5uZXQiLCJqZWxhc3RpYy50c3VrYWVydS5uZXQiLCJzZHNjbG91'@;
put 'ZC5wbCIsInVuaWNsb3VkLnBsIiwibWlyY2xvdWQucnUiLCJqZWxhc3RpYy5yZWdydWhvc3RpbmcucnUiLCJlbnNjYWxlZC5zZyIsImplbGUuc2l0ZSIsImplbGFzdGljLnRlYW0iLCJvcmFuZ2VjbG91ZC50biIsImoubGF5ZXJzaGlmdC5jby51ayIsInBoeC5lbnNjYWxlZC51cyIsIm1pcmNs'@;
put 'b3VkLnVzIiwibXlqaW5vLnJ1IiwiKi5ob3N0aW5nLm15amluby5ydSIsIioubGFuZGluZy5teWppbm8ucnUiLCIqLnNwZWN0cnVtLm15amluby5ydSIsIioudnBzLm15amluby5ydSIsImpvdGVsdWx1LmNsb3VkIiwiKi50cml0b24uem9uZSIsIiouY25zLmpveWVudC5jb20iLCJqcy5vcmci'@;
put 'LCJrYWFzLmdnIiwia2hwbGF5Lm5sIiwia3Rpc3RvcnkuY29tIiwia2Fwc2kuZmkiLCJrZXltYWNoaW5lLmRlIiwia2luZ2hvc3QubmV0IiwidW5pNS5uZXQiLCJrbmlnaHRwb2ludC5zeXN0ZW1zIiwia29vYmluLmV2ZW50cyIsIm95YS50byIsImt1bGV1dmVuLmNsb3VkIiwiZXpwcm94eS5r'@;
put 'dWxldXZlbi5iZSIsImNvLmtyZCIsImVkdS5rcmQiLCJrcmVsbGlhbi5uZXQiLCJ3ZWJ0aGluZ3MuaW8iLCJnaXQtcmVwb3MuZGUiLCJsY3ViZS1zZXJ2ZXIuZGUiLCJzdm4tcmVwb3MuZGUiLCJsZWFkcGFnZXMuY28iLCJscGFnZXMuY28iLCJscHVzZXJjb250ZW50LmNvbSIsImxlbHV4LnNp'@;
put 'dGUiLCJjby5idXNpbmVzcyIsImNvLmVkdWNhdGlvbiIsImNvLmV2ZW50cyIsImNvLmZpbmFuY2lhbCIsImNvLm5ldHdvcmsiLCJjby5wbGFjZSIsImNvLnRlY2hub2xvZ3kiLCJhcHAubG1wbS5jb20iLCJsaW5reWFyZC5jbG91ZCIsImxpbmt5YXJkLWNsb3VkLmNoIiwibWVtYmVycy5saW5v'@;
put 'ZGUuY29tIiwiKi5ub2RlYmFsYW5jZXIubGlub2RlLmNvbSIsIioubGlub2Rlb2JqZWN0cy5jb20iLCJpcC5saW5vZGV1c2VyY29udGVudC5jb20iLCJ3ZS5icyIsIioudXNlci5sb2NhbGNlcnQuZGV2IiwibG9jYWx6b25lLnh5eiIsImxvZ2lubGluZS5hcHAiLCJsb2dpbmxpbmUuZGV2Iiwi'@;
put 'bG9naW5saW5lLmlvIiwibG9naW5saW5lLnNlcnZpY2VzIiwibG9naW5saW5lLnNpdGUiLCJzZXJ2ZXJzLnJ1biIsImxvaG11cy5tZSIsImtyYXNuaWsucGwiLCJsZWN6bmEucGwiLCJsdWJhcnRvdy5wbCIsImx1Ymxpbi5wbCIsInBvbmlhdG93YS5wbCIsInN3aWRuaWsucGwiLCJnbHVnLm9y'@;
put 'Zy51ayIsImx1Zy5vcmcudWsiLCJsdWdzLm9yZy51ayIsImJhcnN5LmJnIiwiYmFyc3kuY28udWsiLCJiYXJzeW9ubGluZS5jby51ayIsImJhcnN5Y2VudGVyLmNvbSIsImJhcnN5b25saW5lLmNvbSIsImJhcnN5LmNsdWIiLCJiYXJzeS5kZSIsImJhcnN5LmV1IiwiYmFyc3kuaW4iLCJiYXJz'@;
put 'eS5pbmZvIiwiYmFyc3kuaW8iLCJiYXJzeS5tZSIsImJhcnN5Lm1lbnUiLCJiYXJzeS5tb2JpIiwiYmFyc3kubmV0IiwiYmFyc3kub25saW5lIiwiYmFyc3kub3JnIiwiYmFyc3kucHJvIiwiYmFyc3kucHViIiwiYmFyc3kucm8iLCJiYXJzeS5zaG9wIiwiYmFyc3kuc2l0ZSIsImJhcnN5LnN1'@;
put 'cHBvcnQiLCJiYXJzeS51ayIsIioubWFnZW50b3NpdGUuY2xvdWQiLCJtYXlmaXJzdC5pbmZvIiwibWF5Zmlyc3Qub3JnIiwiaGIuY2xkbWFpbC5ydSIsImNuLnZ1IiwibWF6ZXBsYXkuY29tIiwibWNwZS5tZSIsIm1jZGlyLm1lIiwibWNkaXIucnUiLCJtY3ByZS5ydSIsInZwcy5tY2Rpci5y'@;
put 'dSIsIm1lZGlhdGVjaC5ieSIsIm1lZGlhdGVjaC5kZXYiLCJocmEuaGVhbHRoIiwibWluaXNlcnZlci5jb20iLCJtZW1zZXQubmV0IiwibWVzc2VybGkuYXBwIiwiKi5jbG91ZC5tZXRhY2VudHJ1bS5jeiIsImN1c3RvbS5tZXRhY2VudHJ1bS5jeiIsImZsdC5jbG91ZC5tdW5pLmN6IiwidXNy'@;
put 'LmNsb3VkLm11bmkuY3oiLCJtZXRlb3JhcHAuY29tIiwiZXUubWV0ZW9yYXBwLmNvbSIsImNvLnBsIiwiKi5henVyZWNvbnRhaW5lci5pbyIsImF6dXJld2Vic2l0ZXMubmV0IiwiYXp1cmUtbW9iaWxlLm5ldCIsImNsb3VkYXBwLm5ldCIsImF6dXJlc3RhdGljYXBwcy5uZXQiLCIxLmF6dXJl'@;
put 'c3RhdGljYXBwcy5uZXQiLCJjZW50cmFsdXMuYXp1cmVzdGF0aWNhcHBzLm5ldCIsImVhc3Rhc2lhLmF6dXJlc3RhdGljYXBwcy5uZXQiLCJlYXN0dXMyLmF6dXJlc3RhdGljYXBwcy5uZXQiLCJ3ZXN0ZXVyb3BlLmF6dXJlc3RhdGljYXBwcy5uZXQiLCJ3ZXN0dXMyLmF6dXJlc3RhdGljYXBw'@;
put 'cy5uZXQiLCJjc3guY2MiLCJtaW50ZXJlLnNpdGUiLCJmb3J0ZS5pZCIsIm1vemlsbGEtaW90Lm9yZyIsImJtb2F0dGFjaG1lbnRzLm9yZyIsIm5ldC5ydSIsIm9yZy5ydSIsInBwLnJ1IiwiaG9zdGVkcGkuY29tIiwiY3VzdG9tZXIubXl0aGljLWJlYXN0cy5jb20iLCJjYXJhY2FsLm15dGhp'@;
put 'Yy1iZWFzdHMuY29tIiwiZmVudGlnZXIubXl0aGljLWJlYXN0cy5jb20iLCJseW54Lm15dGhpYy1iZWFzdHMuY29tIiwib2NlbG90Lm15dGhpYy1iZWFzdHMuY29tIiwib25jaWxsYS5teXRoaWMtYmVhc3RzLmNvbSIsIm9uemEubXl0aGljLWJlYXN0cy5jb20iLCJzcGhpbngubXl0aGljLWJl'@;
put 'YXN0cy5jb20iLCJ2cy5teXRoaWMtYmVhc3RzLmNvbSIsIngubXl0aGljLWJlYXN0cy5jb20iLCJ5YWxpLm15dGhpYy1iZWFzdHMuY29tIiwiY3VzdC5yZXRyb3NudWIuY28udWsiLCJ1aS5uYWJ1LmNhc2EiLCJwb255LmNsdWIiLCJvZi5mYXNoaW9uIiwiaW4ubG9uZG9uIiwib2YubG9uZG9u'@;
put 'IiwiZnJvbS5tYXJrZXRpbmciLCJ3aXRoLm1hcmtldGluZyIsImZvci5tZW4iLCJyZXBhaXIubWVuIiwiYW5kLm1vbSIsImZvci5tb20iLCJmb3Iub25lIiwidW5kZXIub25lIiwiZm9yLnNhbGUiLCJ0aGF0LndpbiIsImZyb20ud29yayIsInRvLndvcmsiLCJjbG91ZC5ub3NwYW1wcm94eS5j'@;
put 'b20iLCJuZXRsaWZ5LmFwcCIsIjR1LmNvbSIsIm5ncm9rLmlvIiwibmgtc2Vydi5jby51ayIsIm5mc2hvc3QuY29tIiwiKi5kZXZlbG9wZXIuYXBwIiwibm9vcC5hcHAiLCIqLm5vcnRoZmxhbmsuYXBwIiwiKi5idWlsZC5ydW4iLCIqLmNvZGUucnVuIiwiKi5kYXRhYmFzZS5ydW4iLCIqLm1p'@;
put 'Z3JhdGlvbi5ydW4iLCJub3RpY2VhYmxlLm5ld3MiLCJkbnNraW5nLmNoIiwibXlwaS5jbyIsIm40dC5jbyIsIjAwMXd3dy5jb20iLCJkZG5zbGl2ZS5jb20iLCJteWlwaG9zdC5jb20iLCJmb3J1bXouaW5mbyIsIjE2LWIuaXQiLCIzMi1iLml0IiwiNjQtYi5pdCIsInNvdW5kY2FzdC5tZSIs'@;
put 'InRjcDQubWUiLCJkbnN1cC5uZXQiLCJoaWNhbS5uZXQiLCJub3ctZG5zLm5ldCIsIm93bmlwLm5ldCIsInZwbmRucy5uZXQiLCJkeW5zZXJ2Lm9yZyIsIm5vdy1kbnMub3JnIiwieDQ0My5wdyIsIm5vdy1kbnMudG9wIiwibnRkbGwudG9wIiwiZnJlZWRkbnMudXMiLCJjcmFmdGluZy54eXoi'@;
put 'LCJ6YXB0by54eXoiLCJuc3VwZGF0ZS5pbmZvIiwibmVyZHBvbC5vdmgiLCJibG9nc3l0ZS5jb20iLCJicmFzaWxpYS5tZSIsImNhYmxlLW1vZGVtLm9yZyIsImNpc2NvZnJlYWsuY29tIiwiY29sbGVnZWZhbi5vcmciLCJjb3VjaHBvdGF0b2ZyaWVzLm9yZyIsImRhbW5zZXJ2ZXIuY29tIiwi'@;
put 'ZGRucy5tZSIsImRpdGNoeW91cmlwLmNvbSIsImRuc2Zvci5tZSIsImRuc2lza2lua3kuY29tIiwiZHZyY2FtLmluZm8iLCJkeW5ucy5jb20iLCJlYXRpbmctb3JnYW5pYy5uZXQiLCJmYW50YXN5bGVhZ3VlLmNjIiwiZ2Vla2dhbGF4eS5jb20iLCJnb2xmZmFuLnVzIiwiaGVhbHRoLWNhcmVy'@;
put 'ZWZvcm0uY29tIiwiaG9tZXNlY3VyaXR5bWFjLmNvbSIsImhvbWVzZWN1cml0eXBjLmNvbSIsImhvcHRvLm1lIiwiaWxvdmVjb2xsZWdlLmluZm8iLCJsb2dpbnRvLm1lIiwibWxiZmFuLm9yZyIsIm1tYWZhbi5iaXoiLCJteWFjdGl2ZWRpcmVjdG9yeS5jb20iLCJteWRpc3NlbnQubmV0Iiwi'@;
put 'bXllZmZlY3QubmV0IiwibXltZWRpYXBjLm5ldCIsIm15cHN4Lm5ldCIsIm15c2VjdXJpdHljYW1lcmEuY29tIiwibXlzZWN1cml0eWNhbWVyYS5uZXQiLCJteXNlY3VyaXR5Y2FtZXJhLm9yZyIsIm5ldC1mcmVha3MuY29tIiwibmZsZmFuLm9yZyIsIm5obGZhbi5uZXQiLCJuby1pcC5jYSIs'@;
put 'Im5vLWlwLmNvLnVrIiwibm8taXAubmV0Iiwibm9pcC51cyIsIm9udGhld2lmaS5jb20iLCJwZ2FmYW4ubmV0IiwicG9pbnQydGhpcy5jb20iLCJwb2ludHRvLnVzIiwicHJpdmF0aXplaGVhbHRoaW5zdXJhbmNlLm5ldCIsInF1aWNrc3l0ZXMuY29tIiwicmVhZC1ib29rcy5vcmciLCJzZWN1'@;
put 'cml0eXRhY3RpY3MuY29tIiwic2VydmVleGNoYW5nZS5jb20iLCJzZXJ2ZWh1bW91ci5jb20iLCJzZXJ2ZXAycC5jb20iLCJzZXJ2ZXNhcmNhc20uY29tIiwic3R1ZmZ0b3JlYWQuY29tIiwidWZjZmFuLm9yZyIsInVudXN1YWxwZXJzb24uY29tIiwid29ya2lzYm9yaW5nLmNvbSIsIjN1dGls'@;
put 'aXRpZXMuY29tIiwiYm91bmNlbWUubmV0IiwiZGRucy5uZXQiLCJkZG5za2luZy5jb20iLCJnb3RkbnMuY2giLCJob3B0by5vcmciLCJteWZ0cC5iaXoiLCJteWZ0cC5vcmciLCJteXZuYy5jb20iLCJuby1pcC5iaXoiLCJuby1pcC5pbmZvIiwibm8taXAub3JnIiwibm9pcC5tZSIsInJlZGly'@;
put 'ZWN0bWUubmV0Iiwic2VydmViZWVyLmNvbSIsInNlcnZlYmxvZy5uZXQiLCJzZXJ2ZWNvdW50ZXJzdHJpa2UuY29tIiwic2VydmVmdHAuY29tIiwic2VydmVnYW1lLmNvbSIsInNlcnZlaGFsZmxpZmUuY29tIiwic2VydmVodHRwLmNvbSIsInNlcnZlaXJjLmNvbSIsInNlcnZlbWluZWNyYWZ0'@;
put 'Lm5ldCIsInNlcnZlbXAzLmNvbSIsInNlcnZlcGljcy5jb20iLCJzZXJ2ZXF1YWtlLmNvbSIsInN5dGVzLm5ldCIsIndlYmhvcC5tZSIsInphcHRvLm9yZyIsInN0YWdlLm5vZGVhcnQuaW8iLCJwY2xvdWQuaG9zdCIsIm55Yy5tbiIsInN0YXRpYy5vYnNlcnZhYmxldXNlcmNvbnRlbnQuY29t'@;
put 'IiwiY3lhLmdnIiwib21nLmxvbCIsImNsb3VkeWNsdXN0ZXIubmV0Iiwib21uaXdlLnNpdGUiLCJzZXJ2aWNlLm9uZSIsIm5pZC5pbyIsIm9wZW5zb2NpYWwuc2l0ZSIsIm9wZW5jcmFmdC5ob3N0aW5nIiwib3JzaXRlcy5jb20iLCJvcGVyYXVuaXRlLmNvbSIsInRlY2gub3JhbmdlIiwiYXV0'@;
put 'aGdlYXItc3RhZ2luZy5jb20iLCJhdXRoZ2VhcmFwcHMuY29tIiwic2t5Z2VhcmFwcC5jb20iLCJvdXRzeXN0ZW1zY2xvdWQuY29tIiwiKi53ZWJwYWFzLm92aC5uZXQiLCIqLmhvc3Rpbmcub3ZoLm5ldCIsIm93bnByb3ZpZGVyLmNvbSIsIm93bi5wbSIsIioub3dvLmNvZGVzIiwib3gucnMi'@;
put 'LCJveS5sYyIsInBnZm9nLmNvbSIsInBhZ2Vmcm9udGFwcC5jb20iLCJwYWdleGwuY29tIiwiKi5wYXl3aGlybC5jb20iLCJiYXIwLm5ldCIsImJhcjEubmV0IiwiYmFyMi5uZXQiLCJyZHYudG8iLCJhcnQucGwiLCJnbGl3aWNlLnBsIiwia3Jha293LnBsIiwicG96bmFuLnBsIiwid3JvYy5w'@;
put 'bCIsInpha29wYW5lLnBsIiwicGFudGhlb25zaXRlLmlvIiwiZ290cGFudGhlb24uY29tIiwibXlwZXAubGluayIsInBlcnNwZWN0YS5jbG91ZCIsImxrMy5ydSIsIm9uLXdlYi5mciIsImJjLnBsYXRmb3JtLnNoIiwiZW50LnBsYXRmb3JtLnNoIiwiZXUucGxhdGZvcm0uc2giLCJ1cy5wbGF0'@;
put 'Zm9ybS5zaCIsIioucGxhdGZvcm1zaC5zaXRlIiwiKi50c3Quc2l0ZSIsInBsYXR0ZXItYXBwLmNvbSIsInBsYXR0ZXItYXBwLmRldiIsInBsYXR0ZXJwLnVzIiwicGRucy5wYWdlIiwicGxlc2sucGFnZSIsInBsZXNrbnMuY29tIiwiZHluNTMuaW8iLCJvbnBvcnRlci5ydW4iLCJjby5ibiIs'@;
put 'InBvc3RtYW4tZWNoby5jb20iLCJwc3Rtbi5pbyIsIm1vY2sucHN0bW4uaW8iLCJodHRwYmluLm9yZyIsInByZXF1YWxpZnltZS50b2RheSIsInhlbi5wcmdtci5jb20iLCJwcml2LmF0IiwicHJ2Y3kucGFnZSIsIiouZHdlYi5saW5rIiwicHJvdG9uZXQuaW8iLCJjaGlydXJnaWVucy1kZW50'@;
put 'aXN0ZXMtZW4tZnJhbmNlLmZyIiwiYnllbi5zaXRlIiwicHVidGxzLm9yZyIsInB5dGhvbmFueXdoZXJlLmNvbSIsImV1LnB5dGhvbmFueXdoZXJlLmNvbSIsInFvdG8uaW8iLCJxdWFsaWZpb2FwcC5jb20iLCJxYnVzZXIuY29tIiwiY2xvdWRzaXRlLmJ1aWxkZXJzIiwiaW5zdGFuY2VzLnNw'@;
put 'YXduLmNjIiwiaW5zdGFudGNsb3VkLmNuIiwicmFzLnJ1IiwicWEyLmNvbSIsInFjeC5pbyIsIiouc3lzLnFjeC5pbyIsImRldi1teXFuYXBjbG91ZC5jb20iLCJhbHBoYS1teXFuYXBjbG91ZC5jb20iLCJteXFuYXBjbG91ZC5jb20iLCIqLnF1aXBlbGVtZW50cy5jb20iLCJ2YXBvci5jbG91'@;
put 'ZCIsInZhcG9yY2xvdWQuaW8iLCJyYWNrbWF6ZS5jb20iLCJyYWNrbWF6ZS5uZXQiLCJnLnZicnBsc2J4LmlvIiwiKi5vbi1rM3MuaW8iLCIqLm9uLXJhbmNoZXIuY2xvdWQiLCIqLm9uLXJpby5pbyIsInJlYWR0aGVkb2NzLmlvIiwicmhjbG91ZC5jb20iLCJhcHAucmVuZGVyLmNvbSIsIm9u'@;
put 'cmVuZGVyLmNvbSIsInJlcGwuY28iLCJpZC5yZXBsLmNvIiwicmVwbC5ydW4iLCJyZXNpbmRldmljZS5pbyIsImRldmljZXMucmVzaW5zdGFnaW5nLmlvIiwiaHpjLmlvIiwid2VsbGJlaW5nem9uZS5ldSIsIndlbGxiZWluZ3pvbmUuY28udWsiLCJhZGltby5jby51ayIsIml0Y291bGRiZXdv'@;
put 'ci5zZSIsImdpdC1wYWdlcy5yaXQuZWR1Iiwicm9ja3kucGFnZSIsIlx1MDQzMVx1MDQzOFx1MDQzNy5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0M2FcdTA0M2VcdTA0M2MuXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDNhXHUwNDQwXHUwNDRiXHUwNDNjLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIs'@;
put 'Ilx1MDQzY1x1MDQzOFx1MDQ0MC5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0M2NcdTA0NDFcdTA0M2EuXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDNlXHUwNDQwXHUwNDMzLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQ0MVx1MDQzMFx1MDQzY1x1MDQzMFx1MDQ0MFx1MDQzMC5cdTA0NDBc'@;
put 'dTA0NDNcdTA0NDEiLCJcdTA0NDFcdTA0M2VcdTA0NDdcdTA0MzguXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDQxXHUwNDNmXHUwNDMxLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQ0Zi5cdTA0NDBcdTA0NDNcdTA0NDEiLCIqLmJ1aWxkZXIuY29kZS5jb20iLCIqLmRldi1idWlsZGVyLmNv'@;
put 'ZGUuY29tIiwiKi5zdGctYnVpbGRlci5jb2RlLmNvbSIsInNhbmRjYXRzLmlvIiwibG9nb2lwLmRlIiwibG9nb2lwLmNvbSIsImZyLXBhci0xLmJhcmVtZXRhbC5zY3cuY2xvdWQiLCJmci1wYXItMi5iYXJlbWV0YWwuc2N3LmNsb3VkIiwibmwtYW1zLTEuYmFyZW1ldGFsLnNjdy5jbG91ZCIs'@;
put 'ImZuYy5mci1wYXIuc2N3LmNsb3VkIiwiZnVuY3Rpb25zLmZuYy5mci1wYXIuc2N3LmNsb3VkIiwiazhzLmZyLXBhci5zY3cuY2xvdWQiLCJub2Rlcy5rOHMuZnItcGFyLnNjdy5jbG91ZCIsInMzLmZyLXBhci5zY3cuY2xvdWQiLCJzMy13ZWJzaXRlLmZyLXBhci5zY3cuY2xvdWQiLCJ3aG0u'@;
put 'ZnItcGFyLnNjdy5jbG91ZCIsInByaXYuaW5zdGFuY2VzLnNjdy5jbG91ZCIsInB1Yi5pbnN0YW5jZXMuc2N3LmNsb3VkIiwiazhzLnNjdy5jbG91ZCIsIms4cy5ubC1hbXMuc2N3LmNsb3VkIiwibm9kZXMuazhzLm5sLWFtcy5zY3cuY2xvdWQiLCJzMy5ubC1hbXMuc2N3LmNsb3VkIiwiczMt'@;
put 'd2Vic2l0ZS5ubC1hbXMuc2N3LmNsb3VkIiwid2htLm5sLWFtcy5zY3cuY2xvdWQiLCJrOHMucGwtd2F3LnNjdy5jbG91ZCIsIm5vZGVzLms4cy5wbC13YXcuc2N3LmNsb3VkIiwiczMucGwtd2F3LnNjdy5jbG91ZCIsInMzLXdlYnNpdGUucGwtd2F3LnNjdy5jbG91ZCIsInNjYWxlYm9vay5z'@;
put 'Y3cuY2xvdWQiLCJzbWFydGxhYmVsaW5nLnNjdy5jbG91ZCIsImRlZGlib3guZnIiLCJzY2hva29rZWtzLm5ldCIsImdvdi5zY290Iiwic2VydmljZS5nb3Yuc2NvdCIsInNjcnlzZWMuY29tIiwiZmlyZXdhbGwtZ2F0ZXdheS5jb20iLCJmaXJld2FsbC1nYXRld2F5LmRlIiwibXktZ2F0ZXdh'@;
put 'eS5kZSIsIm15LXJvdXRlci5kZSIsInNwZG5zLmRlIiwic3BkbnMuZXUiLCJmaXJld2FsbC1nYXRld2F5Lm5ldCIsIm15LWZpcmV3YWxsLm9yZyIsIm15ZmlyZXdhbGwub3JnIiwic3BkbnMub3JnIiwic2VpZGF0Lm5ldCIsInNlbGxmeS5zdG9yZSIsInNlbnNlZXJpbmcubmV0IiwibWluaXNp'@;
put 'dGUubXMiLCJtYWduZXQucGFnZSIsImJpei51YSIsImNvLnVhIiwicHAudWEiLCJzaGlmdGNyeXB0by5kZXYiLCJzaGlmdGNyeXB0by5pbyIsInNoaWZ0ZWRpdC5pbyIsIm15c2hvcGJsb2Nrcy5jb20iLCJteXNob3BpZnkuY29tIiwic2hvcGl0c2l0ZS5jb20iLCJzaG9wd2FyZS5zdG9yZSIs'@;
put 'Im1vLXNpZW1lbnMuaW8iLCIxa2FwcC5jb20iLCJhcHBjaGl6aS5jb20iLCJhcHBsaW56aS5jb20iLCJzaW5hYXBwLmNvbSIsInZpcHNpbmFhcHAuY29tIiwic2l0ZWxlYWYubmV0IiwiYm91bnR5LWZ1bGwuY29tIiwiYWxwaGEuYm91bnR5LWZ1bGwuY29tIiwiYmV0YS5ib3VudHktZnVsbC5j'@;
put 'b20iLCJzbWFsbC13ZWIub3JnIiwidnA0Lm1lIiwidHJ5LXNub3dwbG93LmNvbSIsInNyaHQuc2l0ZSIsInN0YWNraGVyby1uZXR3b3JrLmNvbSIsIm11c2ljaWFuLmlvIiwibm92ZWNvcmUuc2l0ZSIsInN0YXRpYy5sYW5kIiwiZGV2LnN0YXRpYy5sYW5kIiwic2l0ZXMuc3RhdGljLmxhbmQi'@;
put 'LCJzdG9yZWJhc2Uuc3RvcmUiLCJ2cHMtaG9zdC5uZXQiLCJhdGwuamVsYXN0aWMudnBzLWhvc3QubmV0IiwibmpzLmplbGFzdGljLnZwcy1ob3N0Lm5ldCIsInJpYy5qZWxhc3RpYy52cHMtaG9zdC5uZXQiLCJwbGF5c3RhdGlvbi1jbG91ZC5jb20iLCJhcHBzLmxhaXIuaW8iLCIqLnN0b2xv'@;
put 'cy5pbyIsInNwYWNla2l0LmlvIiwiY3VzdG9tZXIuc3BlZWRwYXJ0bmVyLmRlIiwibXlzcHJlYWRzaG9wLmF0IiwibXlzcHJlYWRzaG9wLmNvbS5hdSIsIm15c3ByZWFkc2hvcC5iZSIsIm15c3ByZWFkc2hvcC5jYSIsIm15c3ByZWFkc2hvcC5jaCIsIm15c3ByZWFkc2hvcC5jb20iLCJteXNw'@;
put 'cmVhZHNob3AuZGUiLCJteXNwcmVhZHNob3AuZGsiLCJteXNwcmVhZHNob3AuZXMiLCJteXNwcmVhZHNob3AuZmkiLCJteXNwcmVhZHNob3AuZnIiLCJteXNwcmVhZHNob3AuaWUiLCJteXNwcmVhZHNob3AuaXQiLCJteXNwcmVhZHNob3AubmV0IiwibXlzcHJlYWRzaG9wLm5sIiwibXlzcHJl'@;
put 'YWRzaG9wLm5vIiwibXlzcHJlYWRzaG9wLnBsIiwibXlzcHJlYWRzaG9wLnNlIiwibXlzcHJlYWRzaG9wLmNvLnVrIiwiYXBpLnN0ZGxpYi5jb20iLCJzdG9yai5mYXJtIiwidXR3ZW50ZS5pbyIsInNvYy5zcmNmLm5ldCIsInVzZXIuc3JjZi5uZXQiLCJ0ZW1wLWRucy5jb20iLCJzdXBhYmFz'@;
put 'ZS5jbyIsInN1cGFiYXNlLmluIiwic3VwYWJhc2UubmV0Iiwic3UucGFiYS5zZSIsIiouczV5LmlvIiwiKi5zZW5zaW9zaXRlLmNsb3VkIiwic3luY2xvdWQuaXQiLCJkc2Nsb3VkLmJpeiIsImRpcmVjdC5xdWlja2Nvbm5lY3QuY24iLCJkc215bmFzLmNvbSIsImZhbWlseWRzLmNvbSIsImRp'@;
put 'c2tzdGF0aW9uLm1lIiwiZHNjbG91ZC5tZSIsImkyMzQubWUiLCJteWRzLm1lIiwic3lub2xvZ3kubWUiLCJkc2Nsb3VkLm1vYmkiLCJkc215bmFzLm5ldCIsImZhbWlseWRzLm5ldCIsImRzbXluYXMub3JnIiwiZmFtaWx5ZHMub3JnIiwidnBucGx1cy50byIsImRpcmVjdC5xdWlja2Nvbm5l'@;
put 'Y3QudG8iLCJ0YWJpdG9yZGVyLmNvLmlsIiwidGFpZnVuLWRucy5kZSIsImJldGEudGFpbHNjYWxlLm5ldCIsInRzLm5ldCIsImdkYS5wbCIsImdkYW5zay5wbCIsImdkeW5pYS5wbCIsIm1lZC5wbCIsInNvcG90LnBsIiwic2l0ZS50Yi1ob3N0aW5nLmNvbSIsImVkdWdpdC5pbyIsInMzLnRl'@;
put 'Y2tpZHMub3JnIiwidGVsZWJpdC5hcHAiLCJ0ZWxlYml0LmlvIiwiKi50ZWxlYml0Lnh5eiIsImd3aWRkbGUuY28udWsiLCIqLmZpcmVuZXQuY2giLCIqLnN2Yy5maXJlbmV0LmNoIiwicmVzZXJ2ZC5jb20iLCJ0aGluZ2R1c3RkYXRhLmNvbSIsImN1c3QuZGV2LnRoaW5nZHVzdC5pbyIsImN1'@;
put 'c3QuZGlzcmVjLnRoaW5nZHVzdC5pbyIsImN1c3QucHJvZC50aGluZ2R1c3QuaW8iLCJjdXN0LnRlc3RpbmcudGhpbmdkdXN0LmlvIiwicmVzZXJ2ZC5kZXYudGhpbmdkdXN0LmlvIiwicmVzZXJ2ZC5kaXNyZWMudGhpbmdkdXN0LmlvIiwicmVzZXJ2ZC50ZXN0aW5nLnRoaW5nZHVzdC5pbyIs'@;
put 'InRpY2tldHMuaW8iLCJhcnZvLm5ldHdvcmsiLCJhemltdXRoLm5ldHdvcmsiLCJ0bG9uLm5ldHdvcmsiLCJ0b3Jwcm9qZWN0Lm5ldCIsInBhZ2VzLnRvcnByb2plY3QubmV0IiwiYmxveGNtcy5jb20iLCJ0b3dubmV3cy1zdGFnaW5nLmNvbSIsInRiaXRzLm1lIiwiMTJocC5hdCIsIjJpeC5h'@;
put 'dCIsIjRsaW1hLmF0IiwibGltYS1jaXR5LmF0IiwiMTJocC5jaCIsIjJpeC5jaCIsIjRsaW1hLmNoIiwibGltYS1jaXR5LmNoIiwidHJhZmZpY3BsZXguY2xvdWQiLCJkZS5jb29sIiwiMTJocC5kZSIsIjJpeC5kZSIsIjRsaW1hLmRlIiwibGltYS1jaXR5LmRlIiwiMTMzNy5waWN0dXJlcyIs'@;
put 'ImNsYW4ucmlwIiwibGltYS1jaXR5LnJvY2tzIiwid2Vic3BhY2Uucm9ja3MiLCJsaW1hLnpvbmUiLCIqLnRyYW5zdXJsLmJlIiwiKi50cmFuc3VybC5ldSIsIioudHJhbnN1cmwubmwiLCJzaXRlLnRyYW5zaXAubWUiLCJ0dXhmYW1pbHkub3JnIiwiZGQtZG5zLmRlIiwiZGlza3N0YXRpb24u'@;
put 'ZXUiLCJkaXNrc3RhdGlvbi5vcmciLCJkcmF5LWRucy5kZSIsImRyYXlkbnMuZGUiLCJkeW4tdnBuLmRlIiwiZHludnBuLmRlIiwibWVpbi12aWdvci5kZSIsIm15LXZpZ29yLmRlIiwibXktd2FuLmRlIiwic3luby1kcy5kZSIsInN5bm9sb2d5LWRpc2tzdGF0aW9uLmRlIiwic3lub2xvZ3kt'@;
put 'ZHMuZGUiLCJ0eXBlZHJlYW0uYXBwIiwicHJvLnR5cGVmb3JtLmNvbSIsInViZXIuc3BhY2UiLCIqLnViZXJzcGFjZS5kZSIsImhrLmNvbSIsImhrLm9yZyIsImx0ZC5oayIsImluYy5oayIsIm5hbWUucG0iLCJzY2gudGYiLCJiaXoud2YiLCJzY2gud2YiLCJvcmcueXQiLCJ2aXJ0dWFsdXNl'@;
put 'ci5kZSIsInZpcnR1YWwtdXNlci5kZSIsInVwbGkuaW8iLCJ1cm93bi5jbG91ZCIsImRuc3VwZGF0ZS5pbmZvIiwibGliLmRlLnVzIiwiMjAzOC5pbyIsInZlcmNlbC5hcHAiLCJ2ZXJjZWwuZGV2Iiwibm93LnNoIiwicm91dGVyLm1hbmFnZW1lbnQiLCJ2LWluZm8uaW5mbyIsInZvb3Jsb3Bl'@;
put 'ci5jbG91ZCIsIm5la28uYW0iLCJueWFhLmFtIiwiYmUuYXgiLCJjYXQuYXgiLCJlcy5heCIsImV1LmF4IiwiZ2cuYXgiLCJtYy5heCIsInVzLmF4IiwieHkuYXgiLCJubC5jaSIsInh4LmdsIiwiYXBwLmdwIiwiYmxvZy5ndCIsImRlLmd0IiwidG8uZ3QiLCJiZS5neSIsImNjLmhuIiwiYmxv'@;
put 'Zy5rZyIsImlvLmtnIiwianAua2ciLCJ0di5rZyIsInVrLmtnIiwidXMua2ciLCJkZS5scyIsImF0Lm1kIiwiZGUubWQiLCJqcC5tZCIsInRvLm1kIiwiaW5kaWUucG9ybiIsInZ4bC5zaCIsImNoLnRjIiwibWUudGMiLCJ3ZS50YyIsIm55YW4udG8iLCJhdC52ZyIsImJsb2cudnUiLCJkZXYu'@;
put 'dnUiLCJtZS52dSIsInYudWEiLCIqLnZ1bHRyb2JqZWN0cy5jb20iLCJ3YWZmbGVjZWxsLmNvbSIsIioud2ViaGFyZS5kZXYiLCJyZXNlcnZlLW9ubGluZS5uZXQiLCJyZXNlcnZlLW9ubGluZS5jb20iLCJib29rb25saW5lLmFwcCIsImhvdGVsd2l0aGZsaWdodC5jb20iLCJ3ZWRlcGxveS5p'@;
put 'byIsIndlZGVwbG95Lm1lIiwid2VkZXBsb3kuc2giLCJyZW1vdGV3ZC5jb20iLCJwYWdlcy53aWFyZHdlYi5jb20iLCJ3bWZsYWJzLm9yZyIsInRvb2xmb3JnZS5vcmciLCJ3bWNsb3VkLm9yZyIsInBhbmVsLmdnIiwiZGFlbW9uLnBhbmVsLmdnIiwibWVzc3dpdGhkbnMuY29tIiwid29sdGxh'@;
put 'Yi1kZW1vLmNvbSIsIm15Zm9ydW0uY29tbXVuaXR5IiwiY29tbXVuaXR5LXByby5kZSIsImRpc2t1c3Npb25zYmVyZWljaC5kZSIsImNvbW11bml0eS1wcm8ubmV0IiwibWVpbmZvcnVtLm5ldCIsImFmZmluaXR5bG90dGVyeS5vcmcudWsiLCJyYWZmbGVlbnRyeS5vcmcudWsiLCJ3ZWVrbHls'@;
put 'b3R0ZXJ5Lm9yZy51ayIsIndwZW5naW5lcG93ZXJlZC5jb20iLCJqcy53cGVuZ2luZXBvd2VyZWQuY29tIiwid2l4c2l0ZS5jb20iLCJlZGl0b3J4LmlvIiwiaGFsZi5ob3N0IiwieG5iYXkuY29tIiwidTIueG5iYXkuY29tIiwidTItbG9jYWwueG5iYXkuY29tIiwiY2lzdHJvbi5ubCIsImRl'@;
put 'bW9uLm5sIiwieHM0YWxsLnNwYWNlIiwieWFuZGV4Y2xvdWQubmV0Iiwic3RvcmFnZS55YW5kZXhjbG91ZC5uZXQiLCJ3ZWJzaXRlLnlhbmRleGNsb3VkLm5ldCIsIm9mZmljaWFsLmFjYWRlbXkiLCJ5b2xhc2l0ZS5jb20iLCJ5Ym8uZmFpdGgiLCJ5b21iby5tZSIsImhvbWVsaW5rLm9uZSIs'@;
put 'Inliby5wYXJ0eSIsInliby5yZXZpZXciLCJ5Ym8uc2NpZW5jZSIsInliby50cmFkZSIsInluaC5mciIsIm5vaG9zdC5tZSIsIm5vaG8uc3QiLCJ6YS5uZXQiLCJ6YS5vcmciLCJic3MuZGVzaWduIiwiYmFzaWNzZXJ2ZXIuaW8iLCJ2aXJ0dWFsc2VydmVyLmlvIiwiZW50ZXJwcmlzZWNsb3Vk'@;
put 'Lm51Il0nKX19LHY9e307ZnVuY3Rpb24gaGUoSCl7dmFyIEI9dltIXTtpZih2b2lkIDAhPT1CKXJldHVybiBCLmV4cG9ydHM7dmFyIEw9dltIXT17aWQ6SCxsb2FkZWQ6ITEsZXhwb3J0czp7fX07cmV0dXJuIGtbSF0uY2FsbChMLmV4cG9ydHMsTCxMLmV4cG9ydHMsaGUpLEwubG9hZGVkPSEw'@;
put 'LEwuZXhwb3J0c31yZXR1cm4gaGUuZD0oSCxCKT0+e2Zvcih2YXIgTCBpbiBCKWhlLm8oQixMKSYmIWhlLm8oSCxMKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KEgsTCx7ZW51bWVyYWJsZTohMCxnZXQ6QltMXX0pfSxoZS5nPWZ1bmN0aW9uKCl7aWYoIm9iamVjdCI9PXR5cGVvZiBnbG9iYWxU'@;
put 'aGlzKXJldHVybiBnbG9iYWxUaGlzO3RyeXtyZXR1cm4gdGhpc3x8bmV3IEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCl9Y2F0Y2h7aWYoIm9iamVjdCI9PXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvd319KCksaGUubz0oSCxCKT0+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5j'@;
put 'YWxsKEgsQiksaGUucj1IPT57dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KEgsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShILCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9'@;
put 'KX0saGUubm1kPUg9PihILnBhdGhzPVtdLEguY2hpbGRyZW58fChILmNoaWxkcmVuPVtdKSxIKSxoZSgzNjA3KX0pKCl9LDEyMDcwOmZ1bmN0aW9uKFdlLHplLFQpeyJ1c2Ugc3RyaWN0Ijt2YXIgc2U9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKEwpe3JldHVybiBMJiZM'@;
put 'Ll9fZXNNb2R1bGU/TDp7ZGVmYXVsdDpMfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHplLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx6ZS5pc1NwZWNpYWxNaXNzaW5nPXplLmNob2ljZVZhbGlkYXRvcj16ZS5jb25maXJtYXRpb25WYWxpZGF0b3I9emUudXJsVmFsaWRhdG9yPXZvaWQgMDt2'@;
put 'YXIgaz1zZShUKDc4NTMyKSk7emUudXJsVmFsaWRhdG9yPWZ1bmN0aW9uKEwsSyl7cmV0dXJuISFrLmRlZmF1bHQuaXNIdHRwVXJpKEwpfHwhIWsuZGVmYXVsdC5pc0h0dHBzVXJpKEwpfHwiIj09PUx8fEt9LHplLmNvbmZpcm1hdGlvblZhbGlkYXRvcj1mdW5jdGlvbihMKXtyZXR1cm4hMD09'@;
put 'PUx8fCExPT09TH0semUuY2hvaWNlVmFsaWRhdG9yPWZ1bmN0aW9uKEwsSyxKKXtyZXR1cm4gTD4wJiZMPD1LfHxKfSx6ZS5pc1NwZWNpYWxNaXNzaW5nPWZ1bmN0aW9uKEwpe3JldHVybigic3RyaW5nIiE9dHlwZW9mIEx8fCFMLmluY2x1ZGVzKCIuLiIpKSYmbmV3IFJlZ0V4cCgiXihcXC4p'@;
put 'P1thLXpfLl17MX0kIiwiaSIpLnRlc3QoTCl9fSw3Njc3MTooV2UsemUpPT57InVzZSBzdHJpY3QiO3ZhciBrO3plLkQ9dm9pZCAwLChrPXplLkR8fCh6ZS5EPXt9KSkuU2FzVml5YT0iU0FTVklZQSIsay5TYXM5PSJTQVM5IixrLlNhc2pzPSJTQVNKUyJ9LDUxNzE0OihXZSx6ZSk9PnsidXNl'@;
put 'IHN0cmljdCI7emUuUj12b2lkIDAsemUuUj1mdW5jdGlvbihrLHYsaGUpe2lmKHZvaWQgMD09PXYmJih2PTEpLHZvaWQgMD09PWhlJiYoaGU9MTA5OTUxMTYyNzc3NiksMD09PWspcmV0dXJuIjAgQiI7az1rPmhlP2hlOms7dmFyIEw9djwwPzA6dixLPU1hdGguZmxvb3IoTWF0aC5sb2coaykv'@;
put 'TWF0aC5sb2coMTAyNCkpO3JldHVybihrL01hdGgucG93KDEwMjQsSykpLnRvRml4ZWQoTCkrIiAiK1siQiIsIktCIiwiTUIiLCJHQiIsIlRCIl1bS119fSw4MDc4ODpmdW5jdGlvbihXZSl7dmFyIHplPXt2ZXJzaW9uOiIxLjE1LjAifTt6ZVs0MzddPWZ1bmN0aW9uKCl7Zm9yKHZhciBUPSJc'@;
put 'MFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFS'@;
put 'U1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVceGVjXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx4ZmZceGQ2XHhkY1x4YTJceGEz'@;
put 'XHhhNVx1MjBhN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJhXHhiZlx1MjMxMFx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1'@;
put 'Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1'@;
put 'MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMy'@;
put 'MVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIixzZT1bXSxrPXt9LHY9MDsyNTYhPXY7Kyt2KTY1NTMzIT09VC5jaGFyQ29kZUF0KHYpJiYoa1tULmNoYXJBdCh2KV09diksc2Vbdl09VC5jaGFyQXQodik7cmV0dXJue2VuYzprLGRlYzpzZX19KCks'@;
put 'emVbNjIwXT1mdW5jdGlvbigpe2Zvcih2YXIgVD0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIz'@;
put 'NDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBcdTAxMDVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVcdTAxMDdceGM0XHUwMTA0XHUwMTE4XHUwMTE5XHUw'@;
put 'MTQyXHhmNFx4ZjZcdTAxMDZceGZiXHhmOVx1MDE1YVx4ZDZceGRjXHhhMlx1MDE0MVx4YTVcdTAxNWJcdTAxOTJcdTAxNzlcdTAxN2JceGYzXHhkM1x1MDE0NFx1MDE0M1x1MDE3YVx1MDE3Y1x4YmZcdTIzMTBceGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1'@;
put 'MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNc'@;
put 'dTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1'@;
put 'MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCIsc2U9W10saz17fSx2PTA7MjU2IT12Oysrdik2NTUzMyE9PVQuY2hhckNvZGVBdCh2KSYm'@;
put 'KGtbVC5jaGFyQXQodildPXYpLHNlW3ZdPVQuY2hhckF0KHYpO3JldHVybntlbmM6ayxkZWM6c2V9fSgpLHplWzczN109ZnVuY3Rpb24oKXtmb3IodmFyIFQ9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1'@;
put 'XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0'@;
put 'XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUw'@;
put 'M2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2MyXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUx'@;
put 'XHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUy'@;
put 'NTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2M5XHUwM2FjXHUwM2FkXHUwM2FlXHUwM2NhXHUwM2FmXHUwM2NjXHUwM2NkXHUwM2NiXHUwM2NlXHUwMzg2XHUwMzg4XHUwMzg5XHUwMzhhXHUwMzhjXHUwMzhlXHUwMzhmXHhiMVx1'@;
put 'MjI2NVx1MjI2NFx1MDNhYVx1MDNhYlx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIixzZT1bXSxrPXt9LHY9MDsyNTYhPXY7Kyt2KTY1NTMzIT09VC5jaGFyQ29kZUF0KHYpJiYoa1tULmNoYXJBdCh2KV09diksc2Vbdl09VC5jaGFyQXQodik7cmV0'@;
put 'dXJue2VuYzprLGRlYzpzZX19KCksemVbODUwXT1mdW5jdGlvbigpe2Zvcih2YXIgVD0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFm'@;
put 'ICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHhlY1x4YzRceGM1'@;
put 'XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlceGZmXHhkNlx4ZGNceGY4XHhhM1x4ZDhceGQ3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHhhZVx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx4YzFc'@;
put 'eGMyXHhjMFx4YTlcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRceGEyXHhhNVx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x4ZTNceGMzXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHhhNFx4ZjBceGQwXHhjYVx4Y2JceGM4XHUwMTMx'@;
put 'XHhjZFx4Y2VceGNmXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHhhNlx4Y2NcdTI1ODBceGQzXHhkZlx4ZDRceGQyXHhmNVx4ZDVceGI1XHhmZVx4ZGVceGRhXHhkYlx4ZDlceGZkXHhkZFx4YWZceGI0XHhhZFx4YjFcdTIwMTdceGJlXHhiNlx4YTdceGY3XHhiOFx4YjBceGE4XHhiN1x4Yjlc'@;
put 'eGIzXHhiMlx1MjVhMFx4YTAiLHNlPVtdLGs9e30sdj0wOzI1NiE9djsrK3YpNjU1MzMhPT1ULmNoYXJDb2RlQXQodikmJihrW1QuY2hhckF0KHYpXT12KSxzZVt2XT1ULmNoYXJBdCh2KTtyZXR1cm57ZW5jOmssZGVjOnNlfX0oKSx6ZVs4NTJdPWZ1bmN0aW9uKCl7Zm9yKHZhciBUPSJcMFx4'@;
put 'MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RV'@;
put 'VldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJceGU0XHUwMTZmXHUwMTA3XHhlN1x1MDE0Mlx4ZWJcdTAxNTBcdTAxNTFceGVlXHUwMTc5XHhjNFx1MDEwNlx4YzlcdTAxMzlcdTAxM2FceGY0XHhmNlx1MDEzZFx1MDEzZVx1MDE1'@;
put 'YVx1MDE1Ylx4ZDZceGRjXHUwMTY0XHUwMTY1XHUwMTQxXHhkN1x1MDEwZFx4ZTFceGVkXHhmM1x4ZmFcdTAxMDRcdTAxMDVcdTAxN2RcdTAxN2VcdTAxMThcdTAxMTlceGFjXHUwMTdhXHUwMTBjXHUwMTVmXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRceGMxXHhjMlx1'@;
put 'MDExYVx1MDE1ZVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MDE3Ylx1MDE3Y1x1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MDEwMlx1MDEwM1x1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x4YTRcdTAxMTFcdTAxMTBcdTAxMGVc'@;
put 'eGNiXHUwMTBmXHUwMTQ3XHhjZFx4Y2VcdTAxMWJcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTAxNjJcdTAxNmVcdTI1ODBceGQzXHhkZlx4ZDRcdTAxNDNcdTAxNDRcdTAxNDhcdTAxNjBcdTAxNjFcdTAxNTRceGRhXHUwMTU1XHUwMTcwXHhmZFx4ZGRcdTAxNjNceGI0XHhhZFx1MDJkZFx1'@;
put 'MDJkYlx1MDJjN1x1MDJkOFx4YTdceGY3XHhiOFx4YjBceGE4XHUwMmQ5XHUwMTcxXHUwMTU4XHUwMTU5XHUyNWEwXHhhMCIsc2U9W10saz17fSx2PTA7MjU2IT12Oysrdik2NTUzMyE9PVQuY2hhckNvZGVBdCh2KSYmKGtbVC5jaGFyQXQodildPXYpLHNlW3ZdPVQuY2hhckF0KHYpO3JldHVy'@;
put 'bntlbmM6ayxkZWM6c2V9fSgpLHplWzg1N109ZnVuY3Rpb24oKXtmb3IodmFyIFQ9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAh'@;
put 'XCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx1MDEzMVx4YzRceGM1'@;
put 'XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlcdTAxMzBceGQ2XHhkY1x4ZjhceGEzXHhkOFx1MDE1ZVx1MDE1Zlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx1MDExZVx1MDExZlx4YmZceGFlXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUy'@;
put 'NTI0XHhjMVx4YzJceGMwXHhhOVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx4YTJceGE1XHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHhlM1x4YzNcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNceGE0XHhiYVx4YWFceGNhXHhjYlx4'@;
put 'YzhcdWZmZmRceGNkXHhjZVx4Y2ZcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRceGE2XHhjY1x1MjU4MFx4ZDNceGRmXHhkNFx4ZDJceGY1XHhkNVx4YjVcdWZmZmRceGQ3XHhkYVx4ZGJceGQ5XHhlY1x4ZmZceGFmXHhiNFx4YWRceGIxXHVmZmZkXHhiZVx4YjZceGE3XHhmN1x4YjhceGIwXHhh'@;
put 'OFx4YjdceGI5XHhiM1x4YjJcdTI1YTBceGEwIixzZT1bXSxrPXt9LHY9MDsyNTYhPXY7Kyt2KTY1NTMzIT09VC5jaGFyQ29kZUF0KHYpJiYoa1tULmNoYXJBdCh2KV09diksc2Vbdl09VC5jaGFyQXQodik7cmV0dXJue2VuYzprLGRlYzpzZX19KCksemVbODYxXT1mdW5jdGlvbigpe2Zvcih2'@;
put 'YXIgVD0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpL'@;
put 'TE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZDBceGYwXHhkZVx4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGZlXHhmYlx4ZGRceGZkXHhkNlx4ZGNc'@;
put 'eGY4XHhhM1x4ZDhcdTIwYTdcdTAxOTJceGUxXHhlZFx4ZjNceGZhXHhjMVx4Y2RceGQzXHhkYVx4YmZcdTIzMTBceGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1'@;
put 'NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJc'@;
put 'dTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIz'@;
put 'MjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCIsc2U9W10saz17fSx2PTA7MjU2IT12Oysrdik2NTUzMyE9PVQuY2hhckNvZGVBdCh2KSYmKGtbVC5jaGFyQXQodildPXYpLHNlW3ZdPVQuY2hhckF0KHYpO3JldHVybntlbmM6ayxkZWM6'@;
put 'c2V9fSgpLHplWzg2NV09ZnVuY3Rpb24oKXtmb3IodmFyIFQ9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKiss'@;
put 'LS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx4ZWNceGM0XHhjNVx4YzlceGU2XHhjNlx4'@;
put 'ZjRceGY2XHhmMlx4ZmJceGY5XHhmZlx4ZDZceGRjXHhmOFx4YTNceGQ4XHUyMGE3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHUyMzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGE0XHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUy'@;
put 'NTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1'@;
put 'XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVc'@;
put 'dTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAiLHNlPVtdLGs9e30sdj0wOzI1NiE9djsrK3YpNjU1MzMhPT1ULmNoYXJDb2RlQXQodikmJihrW1QuY2hhckF0KHYpXT12KSxzZVt2'@;
put 'XT1ULmNoYXJBdCh2KTtyZXR1cm57ZW5jOmssZGVjOnNlfX0oKSx6ZVs4NjZdPWZ1bmN0aW9uKCl7Zm9yKHZhciBUPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgx'@;
put 'Ylx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQx'@;
put 'N1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1'@;
put 'MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1'@;
put 'Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1'@;
put 'MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1MDQwMVx1MDQ1MVx1MDQwNFx1MDQ1NFx1MDQwN1x1MDQ1'@;
put 'N1x1MDQwZVx1MDQ1ZVx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMTE2XHhhNFx1MjVhMFx4YTAiLHNlPVtdLGs9e30sdj0wOzI1NiE9djsrK3YpNjU1MzMhPT1ULmNoYXJDb2RlQXQodikmJihrW1QuY2hhckF0KHYpXT12KSxzZVt2XT1ULmNoYXJBdCh2KTtyZXR1cm57ZW5jOmssZGVjOnNlfX0o'@;
put 'KSx6ZVs4NzRdPWZ1bmN0aW9uKCl7Zm9yKHZhciBUPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAx'@;
put 'MjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAyNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTBcdTBlMDFcdTBlMDJcdTBlMDNcdTBlMDRcdTBlMDVcdTBlMDZcdTBlMDdcdTBlMDhcdTBl'@;
put 'MDlcdTBlMGFcdTBlMGJcdTBlMGNcdTBlMGRcdTBlMGVcdTBlMGZcdTBlMTBcdTBlMTFcdTBlMTJcdTBlMTNcdTBlMTRcdTBlMTVcdTBlMTZcdTBlMTdcdTBlMThcdTBlMTlcdTBlMWFcdTBlMWJcdTBlMWNcdTBlMWRcdTBlMWVcdTBlMWZcdTBlMjBcdTBlMjFcdTBlMjJcdTBlMjNcdTBlMjRc'@;
put 'dTBlMjVcdTBlMjZcdTBlMjdcdTBlMjhcdTBlMjlcdTBlMmFcdTBlMmJcdTBlMmNcdTBlMmRcdTBlMmVcdTBlMmZcdTBlMzBcdTBlMzFcdTBlMzJcdTBlMzNcdTBlMzRcdTBlMzVcdTBlMzZcdTBlMzdcdTBlMzhcdTBlMzlcdTBlM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTBlM2ZcdTBl'@;
put 'NDBcdTBlNDFcdTBlNDJcdTBlNDNcdTBlNDRcdTBlNDVcdTBlNDZcdTBlNDdcdTBlNDhcdTBlNDlcdTBlNGFcdTBlNGJcdTBlNGNcdTBlNGRcdTBlNGVcdTBlNGZcdTBlNTBcdTBlNTFcdTBlNTJcdTBlNTNcdTBlNTRcdTBlNTVcdTBlNTZcdTBlNTdcdTBlNThcdTBlNTlcdTBlNWFcdTBlNWJc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLHNlPVtdLGs9e30sdj0wOzI1NiE9djsrK3YpNjU1MzMhPT1ULmNoYXJDb2RlQXQodikmJihrW1QuY2hhckF0KHYpXT12KSxzZVt2XT1ULmNoYXJBdCh2KTtyZXR1cm57ZW5jOmssZGVjOnNlfX0oKSx6ZVs4OTVdPWZ1bmN0aW9uKCl7Zm9yKHZhciBU'@;
put 'PSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5P'@;
put 'UFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MDEwY1x4ZmNceGU5XHUwMTBmXHhlNFx1MDEwZVx1MDE2NFx1MDEwZFx1MDExYlx1MDExYVx1MDEzOVx4Y2RcdTAxM2VcdTAxZWFceGM0XHhjMVx4YzlcdTAxN2VcdTAxN2RceGY0XHhmNlx4ZDNc'@;
put 'dTAxNmZceGRhXHhmZFx4ZDZceGRjXHUwMTYwXHUwMTNkXHhkZFx1MDE1OFx1MDE2NVx4ZTFceGVkXHhmM1x4ZmFcdTAxNDhcdTAxNDdcdTAxNmVceGQ0XHUwMTYxXHUwMTU5XHUwMTU1XHUwMTU0XHhiY1x4YTdceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1'@;
put 'MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2'@;
put 'NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2'@;
put 'XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIixzZT1bXSxrPXt9LHY9MDsyNTYhPXY7Kyt2KTY1NTMzIT09VC5jaGFyQ29kZUF0KHYpJiYoa1tULmNoYXJBdCh2KV09'@;
put 'diksc2Vbdl09VC5jaGFyQXQodik7cmV0dXJue2VuYzprLGRlYzpzZX19KCksemVbOTMyXT1mdW5jdGlvbigpe3ZhciB2LFQ9W10sc2U9e30saz1bXTtmb3Ioa1swXT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgx'@;
put 'NFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmNjFcdWZmNjJcdWZmNjNcdWZmNjRcdWZmNjVcdWZmNjZcdWZmNjdcdWZmNjhcdWZmNjlcdWZmNmFcdWZmNmJcdWZmNmNcdWZmNmRcdWZmNmVcdWZmNmZcdWZmNzBcdWZmNzFcdWZmNzJcdWZmNzNcdWZmNzRcdWZmNzVcdWZmNzZcdWZmNzdcdWZmNzhcdWZmNzlc'@;
put 'dWZmN2FcdWZmN2JcdWZmN2NcdWZmN2RcdWZmN2VcdWZmN2ZcdWZmODBcdWZmODFcdWZmODJcdWZmODNcdWZmODRcdWZmODVcdWZmODZcdWZmODdcdWZmODhcdWZmODlcdWZmOGFcdWZmOGJcdWZmOGNcdWZmOGRcdWZmOGVcdWZmOGZcdWZmOTBcdWZmOTFcdWZmOTJcdWZmOTNcdWZmOTRcdWZm'@;
put 'OTVcdWZmOTZcdWZmOTdcdWZmOThcdWZmOTlcdWZmOWFcdWZmOWJcdWZmOWNcdWZmOWRcdWZmOWVcdWZmOWZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1swXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1swXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1swXVt2'@;
put 'XV09MCt2LFRbMCt2XT1rWzBdW3ZdKTtmb3Ioa1sxMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwMDBcdTMwMDFcdTMwMDJcdWZmMGNcdWZmMGVcdTMwZmJcdWZmMWFcdWZmMWJcdWZmMWZcdWZmMDFcdTMwOWJcdTMwOWNceGI0'@;
put 'XHVmZjQwXHhhOFx1ZmYzZVx1ZmZlM1x1ZmYzZlx1MzBmZFx1MzBmZVx1MzA5ZFx1MzA5ZVx1MzAwM1x1NGVkZFx1MzAwNVx1MzAwNlx1MzAwN1x1MzBmY1x1MjAxNVx1MjAxMFx1ZmYwZlx1ZmYzY1x1ZmY1ZVx1MjIyNVx1ZmY1Y1x1MjAyNlx1MjAyNVx1MjAxOFx1MjAxOVx1MjAxY1x1MjAx'@;
put 'ZFx1ZmYwOFx1ZmYwOVx1MzAxNFx1MzAxNVx1ZmYzYlx1ZmYzZFx1ZmY1Ylx1ZmY1ZFx1MzAwOFx1MzAwOVx1MzAwYVx1MzAwYlx1MzAwY1x1MzAwZFx1MzAwZVx1MzAwZlx1MzAxMFx1MzAxMVx1ZmYwYlx1ZmYwZFx4YjFceGQ3XHVmZmZkXHhmN1x1ZmYxZFx1MjI2MFx1ZmYxY1x1ZmYxZVx1'@;
put 'MjI2Nlx1MjI2N1x1MjIxZVx1MjIzNFx1MjY0Mlx1MjY0MFx4YjBcdTIwMzJcdTIwMzNcdTIxMDNcdWZmZTVcdWZmMDRcdWZmZTBcdWZmZTFcdWZmMDVcdWZmMDNcdWZmMDZcdWZmMGFcdWZmMjBceGE3XHUyNjA2XHUyNjA1XHUyNWNiXHUyNWNmXHUyNWNlXHUyNWM3XHUyNWM2XHUyNWExXHUy'@;
put 'NWEwXHUyNWIzXHUyNWIyXHUyNWJkXHUyNWJjXHUyMDNiXHUzMDEyXHUyMTkyXHUyMTkwXHUyMTkxXHUyMTkzXHUzMDEzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMjA4XHUyMjBiXHUyMjg2XHUyMjg3XHUyMjgy'@;
put 'XHUyMjgzXHUyMjJhXHUyMjI5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMjI3XHUyMjI4XHVmZmUyXHUyMWQyXHUyMWQ0XHUyMjAwXHUyMjAzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHUyMjIwXHUyMmE1XHUyMzEyXHUyMjAyXHUyMjA3XHUyMjYxXHUyMjUyXHUyMjZhXHUyMjZiXHUyMjFhXHUyMjNkXHUyMjFkXHUyMjM1XHUyMjJiXHUyMjJjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMTJiXHUyMDMwXHUyNjZmXHUyNjZk'@;
put 'XHUyNjZhXHUyMDIwXHUyMDIxXHhiNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjVlZlx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzEyOV0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTI5XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxMjldW3ZdXT0zMzAyNCt2LFRb'@;
put 'MzMwMjQrdl09a1sxMjldW3ZdKTtmb3Ioa1sxMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmMTBcdWZmMTFcdWZmMTJcdWZmMTNcdWZmMTRcdWZmMTVcdWZmMTZcdWZmMTdcdWZmMThcdWZmMTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmMjFcdWZmMjJcdWZmMjNcdWZmMjRcdWZmMjVcdWZmMjZcdWZmMjdcdWZmMjhcdWZm'@;
put 'MjlcdWZmMmFcdWZmMmJcdWZmMmNcdWZmMmRcdWZmMmVcdWZmMmZcdWZmMzBcdWZmMzFcdWZmMzJcdWZmMzNcdWZmMzRcdWZmMzVcdWZmMzZcdWZmMzdcdWZmMzhcdWZmMzlcdWZmM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmNDFcdWZmNDJcdWZmNDNc'@;
put 'dWZmNDRcdWZmNDVcdWZmNDZcdWZmNDdcdWZmNDhcdWZmNDlcdWZmNGFcdWZmNGJcdWZmNGNcdWZmNGRcdWZmNGVcdWZmNGZcdWZmNTBcdWZmNTFcdWZmNTJcdWZmNTNcdWZmNTRcdWZmNTVcdWZmNTZcdWZmNTdcdWZmNThcdWZmNTlcdWZmNWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMw'@;
put 'NDFcdTMwNDJcdTMwNDNcdTMwNDRcdTMwNDVcdTMwNDZcdTMwNDdcdTMwNDhcdTMwNDlcdTMwNGFcdTMwNGJcdTMwNGNcdTMwNGRcdTMwNGVcdTMwNGZcdTMwNTBcdTMwNTFcdTMwNTJcdTMwNTNcdTMwNTRcdTMwNTVcdTMwNTZcdTMwNTdcdTMwNThcdTMwNTlcdTMwNWFcdTMwNWJcdTMwNWNc'@;
put 'dTMwNWRcdTMwNWVcdTMwNWZcdTMwNjBcdTMwNjFcdTMwNjJcdTMwNjNcdTMwNjRcdTMwNjVcdTMwNjZcdTMwNjdcdTMwNjhcdTMwNjlcdTMwNmFcdTMwNmJcdTMwNmNcdTMwNmRcdTMwNmVcdTMwNmZcdTMwNzBcdTMwNzFcdTMwNzJcdTMwNzNcdTMwNzRcdTMwNzVcdTMwNzZcdTMwNzdcdTMw'@;
put 'NzhcdTMwNzlcdTMwN2FcdTMwN2JcdTMwN2NcdTMwN2RcdTMwN2VcdTMwN2ZcdTMwODBcdTMwODFcdTMwODJcdTMwODNcdTMwODRcdTMwODVcdTMwODZcdTMwODdcdTMwODhcdTMwODlcdTMwOGFcdTMwOGJcdTMwOGNcdTMwOGRcdTMwOGVcdTMwOGZcdTMwOTBcdTMwOTFcdTMwOTJcdTMwOTNc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxMzBdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzEzMF1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTMwXVt2'@;
put 'XV09MzMyODArdixUWzMzMjgwK3ZdPWtbMTMwXVt2XSk7Zm9yKGtbMTMxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMGExXHUzMGEyXHUzMGEzXHUzMGE0XHUzMGE1XHUzMGE2XHUzMGE3XHUzMGE4XHUzMGE5XHUzMGFhXHUzMGFi'@;
put 'XHUzMGFjXHUzMGFkXHUzMGFlXHUzMGFmXHUzMGIwXHUzMGIxXHUzMGIyXHUzMGIzXHUzMGI0XHUzMGI1XHUzMGI2XHUzMGI3XHUzMGI4XHUzMGI5XHUzMGJhXHUzMGJiXHUzMGJjXHUzMGJkXHUzMGJlXHUzMGJmXHUzMGMwXHUzMGMxXHUzMGMyXHUzMGMzXHUzMGM0XHUzMGM1XHUzMGM2XHUz'@;
put 'MGM3XHUzMGM4XHUzMGM5XHUzMGNhXHUzMGNiXHUzMGNjXHUzMGNkXHUzMGNlXHUzMGNmXHUzMGQwXHUzMGQxXHUzMGQyXHUzMGQzXHUzMGQ0XHUzMGQ1XHUzMGQ2XHUzMGQ3XHUzMGQ4XHUzMGQ5XHUzMGRhXHUzMGRiXHUzMGRjXHUzMGRkXHUzMGRlXHUzMGRmXHVmZmZkXHUzMGUwXHUzMGUx'@;
put 'XHUzMGUyXHUzMGUzXHUzMGU0XHUzMGU1XHUzMGU2XHUzMGU3XHUzMGU4XHUzMGU5XHUzMGVhXHUzMGViXHUzMGVjXHUzMGVkXHUzMGVlXHUzMGVmXHUzMGYwXHUzMGYxXHUzMGYyXHUzMGYzXHUzMGY0XHUzMGY1XHUzMGY2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUw'@;
put 'M2M3XHUwM2M4XHUwM2M5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTMxXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxMzFdW3ZdLmNoYXJDb2RlQXQoMCkm'@;
put 'JihzZVtrWzEzMV1bdl1dPTMzNTM2K3YsVFszMzUzNit2XT1rWzEzMV1bdl0pO2ZvcihrWzEzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQwMVx1MDQxNlx1MDQx'@;
put 'N1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQ1MVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1ZmZm'@;
put 'ZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjUwMFx1MjUwMlx1MjUwY1x1MjUxMFx1MjUxOFx1MjUxNFx1MjUxY1x1MjUyY1x1MjUyNFx1MjUzNFx1MjUzY1x1MjUwMVx1MjUwM1x1MjUwZlx1MjUxM1x1MjUxYlx1MjUxN1x1MjUyM1x1MjUzM1x1MjUyYlx1MjUzYlx1MjU0Ylx1MjUyMFx1MjUy'@;
put 'Zlx1MjUyOFx1MjUzN1x1MjUzZlx1MjUxZFx1MjUzMFx1MjUyNVx1MjUzOFx1MjU0Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzEzMl0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTMyXVt2XS5j'@;
put 'aGFyQ29kZUF0KDApJiYoc2Vba1sxMzJdW3ZdXT0zMzc5Mit2LFRbMzM3OTIrdl09a1sxMzJdW3ZdKTtmb3Ioa1sxMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI0NjBcdTI0NjFcdTI0NjJcdTI0NjNcdTI0NjRcdTI0NjVcdTI0'@;
put 'NjZcdTI0NjdcdTI0NjhcdTI0NjlcdTI0NmFcdTI0NmJcdTI0NmNcdTI0NmRcdTI0NmVcdTI0NmZcdTI0NzBcdTI0NzFcdTI0NzJcdTI0NzNcdTIxNjBcdTIxNjFcdTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdWZmZmRcdTMzNDlcdTMzMTRcdTMzMjJc'@;
put 'dTMzNGRcdTMzMThcdTMzMjdcdTMzMDNcdTMzMzZcdTMzNTFcdTMzNTdcdTMzMGRcdTMzMjZcdTMzMjNcdTMzMmJcdTMzNGFcdTMzM2JcdTMzOWNcdTMzOWRcdTMzOWVcdTMzOGVcdTMzOGZcdTMzYzRcdTMzYTFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdTMzN2JcdWZmZmRcdTMwMWRcdTMwMWZcdTIxMTZcdTMzY2RcdTIxMjFcdTMyYTRcdTMyYTVcdTMyYTZcdTMyYTdcdTMyYThcdTMyMzFcdTMyMzJcdTMyMzlcdTMzN2VcdTMzN2RcdTMzN2NcdTIyNTJcdTIyNjFcdTIyMmJcdTIyMmVcdTIyMTFcdTIyMWFcdTIyYTVcdTIyMjBcdTIyMWZc'@;
put 'dTIyYmZcdTIyMzVcdTIyMjlcdTIyMmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxMzVdLmxlbmd0aDsrK3YpNjU1MzMh'@;
put 'PT1rWzEzNV1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTM1XVt2XV09MzQ1NjArdixUWzM0NTYwK3ZdPWtbMTM1XVt2XSk7Zm9yKGtbMTM2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZTljXHU1NTE2XHU1YTAzXHU5NjNmXHU1NGMwXHU2MTFiXHU2MzI4XHU1OWY2XHU5MDIyXHU4NDc1XHU4MzFjXHU3YTUwXHU2MGFhXHU2M2UxXHU2ZTI1XHU2NWVkXHU4NDY2XHU4MmE2XHU5YmY1XHU2'@;
put 'ODkzXHU1NzI3XHU2NWExXHU2MjcxXHU1YjliXHU1OWQwXHU4NjdiXHU5OGY0XHU3ZDYyXHU3ZGJlXHU5YjhlXHU2MjE2XHU3YzlmXHU4OGI3XHU1Yjg5XHU1ZWI1XHU2MzA5XHU2Njk3XHU2ODQ4XHU5NWM3XHU5NzhkXHU2NzRmXHU0ZWU1XHU0ZjBhXHU0ZjRkXHU0ZjlkXHU1MDQ5XHU1NmYy'@;
put 'XHU1OTM3XHU1OWQ0XHU1YTAxXHU1YzA5XHU2MGRmXHU2MTBmXHU2MTcwXHU2NjEzXHU2OTA1XHU3MGJhXHU3NTRmXHU3NTcwXHU3OWZiXHU3ZGFkXHU3ZGVmXHU4MGMzXHU4NDBlXHU4ODYzXHU4YjAyXHU5MDU1XHU5MDdhXHU1MzNiXHU0ZTk1XHU0ZWE1XHU1N2RmXHU4MGIyXHU5MGMxXHU3'@;
put 'OGVmXHU0ZTAwXHU1OGYxXHU2ZWEyXHU5MDM4XHU3YTMyXHU4MzI4XHU4MjhiXHU5YzJmXHU1MTQxXHU1MzcwXHU1NGJkXHU1NGUxXHU1NmUwXHU1OWZiXHU1ZjE1XHU5OGYyXHU2ZGViXHU4MGU0XHU4NTJkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTM2XS5sZW5n'@;
put 'dGg7Kyt2KTY1NTMzIT09a1sxMzZdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzEzNl1bdl1dPTM0ODE2K3YsVFszNDgxNit2XT1rWzEzNl1bdl0pO2ZvcihrWzEzN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY2Mlx1OTY3MFx1'@;
put 'OTZhMFx1OTdmYlx1NTQwYlx1NTNmM1x1NWI4N1x1NzBjZlx1N2ZiZFx1OGZjMlx1OTZlOFx1NTM2Zlx1OWQ1Y1x1N2FiYVx1NGUxMVx1Nzg5M1x1ODFmY1x1NmUyNlx1NTYxOFx1NTUwNFx1NmIxZFx1ODUxYVx1OWMzYlx1NTllNVx1NTNhOVx1NmQ2Nlx1NzRkY1x1OTU4Zlx1NTY0Mlx1NGU5'@;
put 'MVx1OTA0Ylx1OTZmMlx1ODM0Zlx1OTkwY1x1NTNlMVx1NTViNlx1NWIzMFx1NWY3MVx1NjYyMFx1NjZmM1x1NjgwNFx1NmMzOFx1NmNmM1x1NmQyOVx1NzQ1Ylx1NzZjOFx1N2E0ZVx1OTgzNFx1ODJmMVx1ODg1Ylx1OGE2MFx1OTJlZFx1NmRiMlx1NzVhYlx1NzZjYVx1OTljNVx1NjBhNlx1'@;
put 'OGIwMVx1OGQ4YVx1OTViMlx1Njk4ZVx1NTNhZFx1NTE4Nlx1ZmZmZFx1NTcxMlx1NTgzMFx1NTk0NFx1NWJiNFx1NWVmNlx1NjAyOFx1NjNhOVx1NjNmNFx1NmNiZlx1NmYxNFx1NzA4ZVx1NzExNFx1NzE1OVx1NzFkNVx1NzMzZlx1N2UwMVx1ODI3Nlx1ODJkMVx1ODU5N1x1OTA2MFx1OTI1'@;
put 'Ylx1OWQxYlx1NTg2OVx1NjViY1x1NmM1YVx1NzUyNVx1NTFmOVx1NTkyZVx1NTk2NVx1NWY4MFx1NWZkY1x1NjJiY1x1NjVmYVx1NmEyYVx1NmIyN1x1NmJiNFx1NzM4Ylx1N2ZjMVx1ODk1Nlx1OWQyY1x1OWQwZVx1OWVjNFx1NWNhMVx1NmM5Nlx1ODM3Ylx1NTEwNFx1NWM0Ylx1NjFiNlx1'@;
put 'ODFjNlx1Njg3Nlx1NzI2MVx1NGU1OVx1NGZmYVx1NTM3OFx1NjA2OVx1NmUyOVx1N2E0Zlx1OTdmM1x1NGUwYlx1NTMxNlx1NGVlZVx1NGY1NVx1NGYzZFx1NGZhMVx1NGY3M1x1NTJhMFx1NTNlZlx1NTYwOVx1NTkwZlx1NWFjMVx1NWJiNlx1NWJlMVx1NzlkMVx1NjY4N1x1Njc5Y1x1Njdi'@;
put 'Nlx1NmI0Y1x1NmNiM1x1NzA2Ylx1NzNjMlx1Nzk4ZFx1NzliZVx1N2EzY1x1N2I4N1x1ODJiMVx1ODJkYlx1ODMwNFx1ODM3N1x1ODNlZlx1ODNkM1x1ODc2Nlx1OGFiMlx1NTYyOVx1OGNhOFx1OGZlNlx1OTA0ZVx1OTcxZVx1ODY4YVx1NGZjNFx1NWNlOFx1NjIxMVx1NzI1OVx1NzUzYlx1'@;
put 'ODFlNVx1ODJiZFx1ODZmZVx1OGNjMFx1OTZjNVx1OTkxM1x1OTlkNVx1NGVjYlx1NGYxYVx1ODllM1x1NTZkZVx1NTg0YVx1NThjYVx1NWVmYlx1NWZlYlx1NjAyYVx1NjA5NFx1NjA2Mlx1NjFkMFx1NjIxMlx1NjJkMFx1NjUzOVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2'@;
put 'IT1rWzEzN10ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTM3XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxMzddW3ZdXT0zNTA3Mit2LFRbMzUwNzIrdl09a1sxMzddW3ZdKTtmb3Ioa1sxMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dTliNDFcdTY2NjZcdTY4YjBcdTZkNzdcdTcwNzBcdTc1NGNcdTc2ODZcdTdkNzVcdTgyYTVcdTg3ZjlcdTk1OGJcdTk2OGVcdThjOWRcdTUxZjFcdTUyYmVcdTU5MTZcdTU0YjNcdTViYjNcdTVkMTZcdTYxNjhcdTY5ODJcdTZkYWZcdTc4OGRcdTg0Y2JcdTg4NTdcdThhNzJcdTkzYTdcdTlh'@;
put 'YjhcdTZkNmNcdTk5YThcdTg2ZDlcdTU3YTNcdTY3ZmZcdTg2Y2VcdTkyMGVcdTUyODNcdTU2ODdcdTU0MDRcdTVlZDNcdTYyZTFcdTY0YjlcdTY4M2NcdTY4MzhcdTZiYmJcdTczNzJcdTc4YmFcdTdhNmJcdTg5OWFcdTg5ZDJcdThkNmJcdThmMDNcdTkwZWRcdTk1YTNcdTk2OTRcdTk3Njlc'@;
put 'dTViNjZcdTVjYjNcdTY5N2RcdTk4NGRcdTk4NGVcdTYzOWJcdTdiMjBcdTZhMmJcdWZmZmRcdTZhN2ZcdTY4YjZcdTljMGRcdTZmNWZcdTUyNzJcdTU1OWRcdTYwNzBcdTYyZWNcdTZkM2JcdTZlMDdcdTZlZDFcdTg0NWJcdTg5MTBcdThmNDRcdTRlMTRcdTljMzlcdTUzZjZcdTY5MWJcdTZh'@;
put 'M2FcdTk3ODRcdTY4MmFcdTUxNWNcdTdhYzNcdTg0YjJcdTkxZGNcdTkzOGNcdTU2NWJcdTlkMjhcdTY4MjJcdTgzMDVcdTg0MzFcdTdjYTVcdTUyMDhcdTgyYzVcdTc0ZTZcdTRlN2VcdTRmODNcdTUxYTBcdTViZDJcdTUyMGFcdTUyZDhcdTUyZTdcdTVkZmJcdTU1OWFcdTU4MmFcdTU5ZTZc'@;
put 'dTViOGNcdTViOThcdTViZGJcdTVlNzJcdTVlNzlcdTYwYTNcdTYxMWZcdTYxNjNcdTYxYmVcdTYzZGJcdTY1NjJcdTY3ZDFcdTY4NTNcdTY4ZmFcdTZiM2VcdTZiNTNcdTZjNTdcdTZmMjJcdTZmOTdcdTZmNDVcdTc0YjBcdTc1MThcdTc2ZTNcdTc3MGJcdTdhZmZcdTdiYTFcdTdjMjFcdTdk'@;
put 'ZTlcdTdmMzZcdTdmZjBcdTgwOWRcdTgyNjZcdTgzOWVcdTg5YjNcdThhY2NcdThjYWJcdTkwODRcdTk0NTFcdTk1OTNcdTk1OTFcdTk1YTJcdTk2NjVcdTk3ZDNcdTk5MjhcdTgyMThcdTRlMzhcdTU0MmJcdTVjYjhcdTVkY2NcdTczYTlcdTc2NGNcdTc3M2NcdTVjYTlcdTdmZWJcdThkMGJc'@;
put 'dTk2YzFcdTk4MTFcdTk4NTRcdTk4NThcdTRmMDFcdTRmMGVcdTUzNzFcdTU1OWNcdTU2NjhcdTU3ZmFcdTU5NDdcdTViMDlcdTViYzRcdTVjOTBcdTVlMGNcdTVlN2VcdTVmY2NcdTYzZWVcdTY3M2FcdTY1ZDdcdTY1ZTJcdTY3MWZcdTY4Y2JcdTY4YzRcdWZmZmRcdWZmZmRcdWZmZmQiLnNw'@;
put 'bGl0KCIiKSx2PTA7diE9a1sxMzhdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzEzOF1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTM4XVt2XV09MzUzMjgrdixUWzM1MzI4K3ZdPWtbMTM4XVt2XSk7Zm9yKGtbMTM5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHU2YTVmXHU1ZTMwXHU2YmM1XHU2YzE3XHU2YzdkXHU3NTdmXHU3OTQ4XHU1YjYzXHU3YTAwXHU3ZDAwXHU1ZmJkXHU4OThmXHU4YTE4XHU4Y2I0XHU4ZDc3XHU4ZWNjXHU4ZjFkXHU5OGUyXHU5YTBlXHU5YjNjXHU0ZTgwXHU1MDdkXHU1MTAwXHU1OTkzXHU1YjljXHU2'@;
put 'MjJmXHU2MjgwXHU2NGVjXHU2YjNhXHU3MmEwXHU3NTkxXHU3OTQ3XHU3ZmE5XHU4N2ZiXHU4YWJjXHU4YjcwXHU2M2FjXHU4M2NhXHU5N2EwXHU1NDA5XHU1NDAzXHU1NWFiXHU2ODU0XHU2YTU4XHU4YTcwXHU3ODI3XHU2Nzc1XHU5ZWNkXHU1Mzc0XHU1YmEyXHU4MTFhXHU4NjUwXHU5MDA2'@;
put 'XHU0ZTE4XHU0ZTQ1XHU0ZWM3XHU0ZjExXHU1M2NhXHU1NDM4XHU1YmFlXHU1ZjEzXHU2MDI1XHU2NTUxXHVmZmZkXHU2NzNkXHU2YzQyXHU2YzcyXHU2Y2UzXHU3MDc4XHU3NDAzXHU3YTc2XHU3YWFlXHU3YjA4XHU3ZDFhXHU3Y2ZlXHU3ZDY2XHU2NWU3XHU3MjViXHU1M2JiXHU1YzQ1XHU1'@;
put 'ZGU4XHU2MmQyXHU2MmUwXHU2MzE5XHU2ZTIwXHU4NjVhXHU4YTMxXHU4ZGRkXHU5MmY4XHU2ZjAxXHU3OWE2XHU5YjVhXHU0ZWE4XHU0ZWFiXHU0ZWFjXHU0ZjliXHU0ZmEwXHU1MGQxXHU1MTQ3XHU3YWY2XHU1MTcxXHU1MWY2XHU1MzU0XHU1MzIxXHU1MzdmXHU1M2ViXHU1NWFjXHU1ODgz'@;
put 'XHU1Y2UxXHU1ZjM3XHU1ZjRhXHU2MDJmXHU2MDUwXHU2MDZkXHU2MzFmXHU2NTU5XHU2YTRiXHU2Y2MxXHU3MmMyXHU3MmVkXHU3N2VmXHU4MGY4XHU4MTA1XHU4MjA4XHU4NTRlXHU5MGY3XHU5M2UxXHU5N2ZmXHU5OTU3XHU5YTVhXHU0ZWYwXHU1MWRkXHU1YzJkXHU2NjgxXHU2OTZkXHU1'@;
put 'YzQwXHU2NmYyXHU2OTc1XHU3Mzg5XHU2ODUwXHU3YzgxXHU1MGM1XHU1MmU0XHU1NzQ3XHU1ZGZlXHU5MzI2XHU2NWE0XHU2YjIzXHU2YjNkXHU3NDM0XHU3OTgxXHU3OWJkXHU3YjRiXHU3ZGNhXHU4MmI5XHU4M2NjXHU4ODdmXHU4OTVmXHU4YjM5XHU4ZmQxXHU5MWQxXHU1NDFmXHU5Mjgw'@;
put 'XHU0ZTVkXHU1MDM2XHU1M2U1XHU1MzNhXHU3MmQ3XHU3Mzk2XHU3N2U5XHU4MmU2XHU4ZWFmXHU5OWM2XHU5OWM4XHU5OWQyXHU1MTc3XHU2MTFhXHU4NjVlXHU1NWIwXHU3YTdhXHU1MDc2XHU1YmQzXHU5MDQ3XHU5Njg1XHU0ZTMyXHU2YWRiXHU5MWU3XHU1YzUxXHU1YzQ4XHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTM5XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxMzldW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzEzOV1bdl1dPTM1NTg0K3YsVFszNTU4NCt2XT1rWzEzOV1bdl0pO2ZvcihrWzE0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjM5OFx1N2E5Zlx1NmM5M1x1OTc3NFx1OGY2MVx1N2FhYVx1NzE4YVx1OTY4OFx1N2M4Mlx1NjgxN1x1N2U3MFx1Njg1MVx1OTM2Y1x1NTJmMlx1NTQxYlx1ODVhYlx1OGExM1x1N2ZhNFx1OGVjZFx1OTBlMVx1NTM2Nlx1ODg4OFx1Nzk0MVx1'@;
put 'NGZjMlx1NTBiZVx1NTIxMVx1NTE0NFx1NTU1M1x1NTcyZFx1NzNlYVx1NTc4Ylx1NTk1MVx1NWY2Mlx1NWY4NFx1NjA3NVx1NjE3Nlx1NjE2N1x1NjFhOVx1NjNiMlx1NjQzYVx1NjU2Y1x1NjY2Zlx1Njg0Mlx1NmUxM1x1NzU2Nlx1N2EzZFx1N2NmYlx1N2Q0Y1x1N2Q5OVx1N2U0Ylx1N2Y2'@;
put 'Ylx1ODMwZVx1ODM0YVx1ODZjZFx1OGEwOFx1OGE2M1x1OGI2Nlx1OGVmZFx1OTgxYVx1OWQ4Zlx1ODJiOFx1OGZjZVx1OWJlOFx1ZmZmZFx1NTI4N1x1NjIxZlx1NjQ4M1x1NmZjMFx1OTY5OVx1Njg0MVx1NTA5MVx1NmIyMFx1NmM3YVx1NmY1NFx1N2E3NFx1N2Q1MFx1ODg0MFx1OGEyM1x1'@;
put 'NjcwOFx1NGVmNlx1NTAzOVx1NTAyNlx1NTA2NVx1NTE3Y1x1NTIzOFx1NTI2M1x1NTVhN1x1NTcwZlx1NTgwNVx1NWFjY1x1NWVmYVx1NjFiMlx1NjFmOFx1NjJmM1x1NjM3Mlx1NjkxY1x1NmEyOVx1NzI3ZFx1NzJhY1x1NzMyZVx1NzgxNFx1Nzg2Zlx1N2Q3OVx1NzcwY1x1ODBhOVx1ODk4'@;
put 'Ylx1OGIxOVx1OGNlMlx1OGVkMlx1OTA2M1x1OTM3NVx1OTY3YVx1OTg1NVx1OWExM1x1OWU3OFx1NTE0M1x1NTM5Zlx1NTNiM1x1NWU3Ylx1NWYyNlx1NmUxYlx1NmU5MFx1NzM4NFx1NzNmZVx1N2Q0M1x1ODIzN1x1OGEwMFx1OGFmYVx1OTY1MFx1NGU0ZVx1NTAwYlx1NTNlNFx1NTQ3Y1x1'@;
put 'NTZmYVx1NTlkMVx1NWI2NFx1NWRmMVx1NWVhYlx1NWYyN1x1NjIzOFx1NjU0NVx1NjdhZlx1NmU1Nlx1NzJkMFx1N2NjYVx1ODhiNFx1ODBhMVx1ODBlMVx1ODNmMFx1ODY0ZVx1OGE4N1x1OGRlOFx1OTIzN1x1OTZjN1x1OTg2N1x1OWYxM1x1NGU5NFx1NGU5Mlx1NGYwZFx1NTM0OFx1NTQ0'@;
put 'OVx1NTQzZVx1NWEyZlx1NWY4Y1x1NWZhMVx1NjA5Zlx1NjhhN1x1NmE4ZVx1NzQ1YVx1Nzg4MVx1OGE5ZVx1OGFhNFx1OGI3N1x1OTE5MFx1NGU1ZVx1OWJjOVx1NGVhNFx1NGY3Y1x1NGZhZlx1NTAxOVx1NTAxNlx1NTE0OVx1NTE2Y1x1NTI5Zlx1NTJiOVx1NTJmZVx1NTM5YVx1NTNlM1x1'@;
put 'NTQxMVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE0MF0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTQwXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxNDBdW3ZdXT0zNTg0MCt2LFRbMzU4NDArdl09a1sxNDBdW3ZdKTtmb3Ioa1sxNDFdPSJcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0MGVcdTU1ODlcdTU3NTFcdTU3YTJcdTU5N2RcdTViNTRcdTViNWRcdTViOGZcdTVkZTVcdTVkZTdcdTVkZjdcdTVlNzhcdTVlODNcdTVlOWFcdTVlYjdcdTVmMThcdTYwNTJcdTYxNGNcdTYyOTdcdTYyZDhcdTYzYTdc'@;
put 'dTY1M2JcdTY2MDJcdTY2NDNcdTY2ZjRcdTY3NmRcdTY4MjFcdTY4OTdcdTY5Y2JcdTZjNWZcdTZkMmFcdTZkNjlcdTZlMmZcdTZlOWRcdTc1MzJcdTc2ODdcdTc4NmNcdTdhM2ZcdTdjZTBcdTdkMDVcdTdkMThcdTdkNWVcdTdkYjFcdTgwMTVcdTgwMDNcdTgwYWZcdTgwYjFcdTgxNTRcdTgx'@;
put 'OGZcdTgyMmFcdTgzNTJcdTg4NGNcdTg4NjFcdThiMWJcdThjYTJcdThjZmNcdTkwY2FcdTkxNzVcdTkyNzFcdTc4M2ZcdTkyZmNcdTk1YTRcdTk2NGRcdWZmZmRcdTk4MDVcdTk5OTlcdTlhZDhcdTlkM2JcdTUyNWJcdTUyYWJcdTUzZjdcdTU0MDhcdTU4ZDVcdTYyZjdcdTZmZTBcdThjNmFc'@;
put 'dThmNWZcdTllYjlcdTUxNGJcdTUyM2JcdTU0NGFcdTU2ZmRcdTdhNDBcdTkxNzdcdTlkNjBcdTllZDJcdTczNDRcdTZmMDlcdTgxNzBcdTc1MTFcdTVmZmRcdTYwZGFcdTlhYThcdTcyZGJcdThmYmNcdTZiNjRcdTk4MDNcdTRlY2FcdTU2ZjBcdTU3NjRcdTU4YmVcdTVhNWFcdTYwNjhcdTYx'@;
put 'YzdcdTY2MGZcdTY2MDZcdTY4MzlcdTY4YjFcdTZkZjdcdTc1ZDVcdTdkM2FcdTgyNmVcdTliNDJcdTRlOWJcdTRmNTBcdTUzYzlcdTU1MDZcdTVkNmZcdTVkZTZcdTVkZWVcdTY3ZmJcdTZjOTlcdTc0NzNcdTc4MDJcdThhNTBcdTkzOTZcdTg4ZGZcdTU3NTBcdTVlYTdcdTYzMmJcdTUwYjVc'@;
put 'dTUwYWNcdTUxOGRcdTY3MDBcdTU0YzlcdTU4NWVcdTU5YmJcdTViYjBcdTVmNjlcdTYyNGRcdTYzYTFcdTY4M2RcdTZiNzNcdTZlMDhcdTcwN2RcdTkxYzdcdTcyODBcdTc4MTVcdTc4MjZcdTc5NmRcdTY1OGVcdTdkMzBcdTgzZGNcdTg4YzFcdThmMDlcdTk2OWJcdTUyNjRcdTU3MjhcdTY3'@;
put 'NTBcdTdmNmFcdThjYTFcdTUxYjRcdTU3NDJcdTk2MmFcdTU4M2FcdTY5OGFcdTgwYjRcdTU0YjJcdTVkMGVcdTU3ZmNcdTc4OTVcdTlkZmFcdTRmNWNcdTUyNGFcdTU0OGJcdTY0M2VcdTY2MjhcdTY3MTRcdTY3ZjVcdTdhODRcdTdiNTZcdTdkMjJcdTkzMmZcdTY4NWNcdTliYWRcdTdiMzlc'@;
put 'dTUzMTlcdTUxOGFcdTUyMzdcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxNDFdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE0MV1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTQxXVt2XV09MzYwOTYrdixUWzM2MDk2K3ZdPWtbMTQxXVt2XSk7Zm9yKGtbMTQyXT0iXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YmRmXHU2MmY2XHU2NGFlXHU2NGU2XHU2NzJkXHU2YmJhXHU4NWE5XHU5NmQxXHU3NjkwXHU5YmQ2XHU2MzRjXHU5MzA2XHU5YmFiXHU3NmJmXHU2NjUyXHU0ZTA5XHU1MDk4XHU1M2MyXHU1Yzcx'@;
put 'XHU2MGU4XHU2NDkyXHU2NTYzXHU2ODVmXHU3MWU2XHU3M2NhXHU3NTIzXHU3Yjk3XHU3ZTgyXHU4Njk1XHU4YjgzXHU4Y2RiXHU5MTc4XHU5OTEwXHU2NWFjXHU2NmFiXHU2YjhiXHU0ZWQ1XHU0ZWQ0XHU0ZjNhXHU0ZjdmXHU1MjNhXHU1M2Y4XHU1M2YyXHU1NWUzXHU1NmRiXHU1OGViXHU1'@;
put 'OWNiXHU1OWM5XHU1OWZmXHU1YjUwXHU1YzRkXHU1ZTAyXHU1ZTJiXHU1ZmQ3XHU2MDFkXHU2MzA3XHU2NTJmXHU1YjVjXHU2NWFmXHU2NWJkXHU2NWU4XHU2NzlkXHU2YjYyXHVmZmZkXHU2YjdiXHU2YzBmXHU3MzQ1XHU3OTQ5XHU3OWMxXHU3Y2Y4XHU3ZDE5XHU3ZDJiXHU4MGEyXHU4MTAy'@;
put 'XHU4MWYzXHU4OTk2XHU4YTVlXHU4YTY5XHU4YTY2XHU4YThjXHU4YWVlXHU4Y2M3XHU4Y2RjXHU5NmNjXHU5OGZjXHU2YjZmXHU0ZThiXHU0ZjNjXHU0ZjhkXHU1MTUwXHU1YjU3XHU1YmZhXHU2MTQ4XHU2MzAxXHU2NjQyXHU2YjIxXHU2ZWNiXHU2Y2JiXHU3MjNlXHU3NGJkXHU3NWQ0XHU3'@;
put 'OGMxXHU3OTNhXHU4MDBjXHU4MDMzXHU4MWVhXHU4NDk0XHU4ZjllXHU2YzUwXHU5ZTdmXHU1ZjBmXHU4YjU4XHU5ZDJiXHU3YWZhXHU4ZWY4XHU1YjhkXHU5NmViXHU0ZTAzXHU1M2YxXHU1N2Y3XHU1OTMxXHU1YWM5XHU1YmE0XHU2MDg5XHU2ZTdmXHU2ZjA2XHU3NWJlXHU4Y2VhXHU1Yjlm'@;
put 'XHU4NTAwXHU3YmUwXHU1MDcyXHU2N2Y0XHU4MjlkXHU1YzYxXHU4NTRhXHU3ZTFlXHU4MjBlXHU1MTk5XHU1YzA0XHU2MzY4XHU4ZDY2XHU2NTljXHU3MTZlXHU3OTNlXHU3ZDE3XHU4MDA1XHU4YjFkXHU4ZWNhXHU5MDZlXHU4NmM3XHU5MGFhXHU1MDFmXHU1MmZhXHU1YzNhXHU2NzUzXHU3'@;
put 'MDdjXHU3MjM1XHU5MTRjXHU5MWM4XHU5MzJiXHU4MmU1XHU1YmMyXHU1ZjMxXHU2MGY5XHU0ZTNiXHU1M2Q2XHU1Yjg4XHU2MjRiXHU2NzMxXHU2YjhhXHU3MmU5XHU3M2UwXHU3YTJlXHU4MTZiXHU4ZGEzXHU5MTUyXHU5OTk2XHU1MTEyXHU1M2Q3XHU1NDZhXHU1YmZmXHU2Mzg4XHU2YTM5'@;
put 'XHU3ZGFjXHU5NzAwXHU1NmRhXHU1M2NlXHU1NDY4XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTQyXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxNDJdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE0Ml1bdl1dPTM2MzUyK3YsVFszNjM1Mit2XT1rWzE0Ml1bdl0pO2Zv'@;
put 'cihrWzE0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWI5N1x1NWMzMVx1NWRkZVx1NGZlZVx1NjEwMVx1NjJmZVx1NmQzMlx1NzljMFx1NzljYlx1N2Q0Mlx1N2U0ZFx1N2ZkMlx1ODFlZFx1ODIxZlx1ODQ5MFx1ODg0Nlx1ODk3'@;
put 'Mlx1OGI5MFx1OGU3NFx1OGYyZlx1OTAzMVx1OTE0Ylx1OTE2Y1x1OTZjNlx1OTE5Y1x1NGVjMFx1NGY0Zlx1NTE0NVx1NTM0MVx1NWY5M1x1NjIwZVx1NjdkNFx1NmM0MVx1NmUwYlx1NzM2M1x1N2UyNlx1OTFjZFx1OTI4M1x1NTNkNFx1NTkxOVx1NWJiZlx1NmRkMVx1Nzk1ZFx1N2UyZVx1'@;
put 'N2M5Ylx1NTg3ZVx1NzE5Zlx1NTFmYVx1ODg1M1x1OGZmMFx1NGZjYVx1NWNmYlx1NjYyNVx1NzdhY1x1N2FlM1x1ODIxY1x1OTlmZlx1NTFjNlx1NWZhYVx1NjVlY1x1Njk2Zlx1NmI4OVx1NmRmM1x1ZmZmZFx1NmU5Nlx1NmY2NFx1NzZmZVx1N2QxNFx1NWRlMVx1OTA3NVx1OTE4N1x1OTgw'@;
put 'Nlx1NTFlNlx1NTIxZFx1NjI0MFx1NjY5MVx1NjZkOVx1NmUxYVx1NWViNlx1N2RkMlx1N2Y3Mlx1NjZmOFx1ODVhZlx1ODVmN1x1OGFmOFx1NTJhOVx1NTNkOVx1NTk3M1x1NWU4Zlx1NWY5MFx1NjA1NVx1OTJlNFx1OTY2NFx1NTBiN1x1NTExZlx1NTJkZFx1NTMyMFx1NTM0N1x1NTNlY1x1'@;
put 'NTRlOFx1NTU0Nlx1NTUzMVx1NTYxN1x1NTk2OFx1NTliZVx1NWEzY1x1NWJiNVx1NWMwNlx1NWMwZlx1NWMxMVx1NWMxYVx1NWU4NFx1NWU4YVx1NWVlMFx1NWY3MFx1NjI3Zlx1NjI4NFx1NjJkYlx1NjM4Y1x1NjM3N1x1NjYwN1x1NjYwY1x1NjYyZFx1NjY3Nlx1Njc3ZVx1NjhhMlx1NmEx'@;
put 'Zlx1NmEzNVx1NmNiY1x1NmQ4OFx1NmUwOVx1NmU1OFx1NzEzY1x1NzEyNlx1NzE2N1x1NzVjN1x1NzcwMVx1Nzg1ZFx1NzkwMVx1Nzk2NVx1NzlmMFx1N2FlMFx1N2IxMVx1N2NhN1x1N2QzOVx1ODA5Nlx1ODNkNlx1ODQ4Ylx1ODU0OVx1ODg1ZFx1ODhmM1x1OGExZlx1OGEzY1x1OGE1NFx1'@;
put 'OGE3M1x1OGM2MVx1OGNkZVx1OTFhNFx1OTI2Nlx1OTM3ZVx1OTQxOFx1OTY5Y1x1OTc5OFx1NGUwYVx1NGUwOFx1NGUxZVx1NGU1N1x1NTE5N1x1NTI3MFx1NTdjZVx1NTgzNFx1NThjY1x1NWIyMlx1NWUzOFx1NjBjNVx1NjRmZVx1Njc2MVx1Njc1Nlx1NmQ0NFx1NzJiNlx1NzU3M1x1N2E2'@;
put 'M1x1ODRiOFx1OGI3Mlx1OTFiOFx1OTMyMFx1NTYzMVx1NTdmNFx1OThmZVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE0M10ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTQzXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxNDNdW3ZdXT0zNjYwOCt2LFRbMzY2MDgrdl09'@;
put 'a1sxNDNdW3ZdKTtmb3Ioa1sxNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYyZWRcdTY5MGRcdTZiOTZcdTcxZWRcdTdlNTRcdTgwNzdcdTgyNzJcdTg5ZTZcdTk4ZGZcdTg3NTVcdThmYjFcdTVjM2JcdTRmMzhcdTRmZTFcdTRm'@;
put 'YjVcdTU1MDdcdTVhMjBcdTViZGRcdTViZTlcdTVmYzNcdTYxNGVcdTYzMmZcdTY1YjBcdTY2NGJcdTY4ZWVcdTY5OWJcdTZkNzhcdTZkZjFcdTc1MzNcdTc1YjlcdTc3MWZcdTc5NWVcdTc5ZTZcdTdkMzNcdTgxZTNcdTgyYWZcdTg1YWFcdTg5YWFcdThhM2FcdThlYWJcdThmOWJcdTkwMzJc'@;
put 'dTkxZGRcdTk3MDdcdTRlYmFcdTRlYzFcdTUyMDNcdTU4NzVcdTU4ZWNcdTVjMGJcdTc1MWFcdTVjM2RcdTgxNGVcdThhMGFcdThmYzVcdTk2NjNcdTk3NmRcdTdiMjVcdThhY2ZcdTk4MDhcdTkxNjJcdTU2ZjNcdTUzYThcdWZmZmRcdTkwMTdcdTU0MzlcdTU3ODJcdTVlMjVcdTYzYThcdTZj'@;
put 'MzRcdTcwOGFcdTc3NjFcdTdjOGJcdTdmZTBcdTg4NzBcdTkwNDJcdTkxNTRcdTkzMTBcdTkzMThcdTk2OGZcdTc0NWVcdTlhYzRcdTVkMDdcdTVkNjlcdTY1NzBcdTY3YTJcdThkYThcdTk2ZGJcdTYzNmVcdTY3NDlcdTY5MTlcdTgzYzVcdTk4MTdcdTk2YzBcdTg4ZmVcdTZmODRcdTY0N2Fc'@;
put 'dTViZjhcdTRlMTZcdTcwMmNcdTc1NWRcdTY2MmZcdTUxYzRcdTUyMzZcdTUyZTJcdTU5ZDNcdTVmODFcdTYwMjdcdTYyMTBcdTY1M2ZcdTY1NzRcdTY2MWZcdTY2NzRcdTY4ZjJcdTY4MTZcdTZiNjNcdTZlMDVcdTcyNzJcdTc1MWZcdTc2ZGJcdTdjYmVcdTgwNTZcdTU4ZjBcdTg4ZmRcdTg5'@;
put 'N2ZcdThhYTBcdThhOTNcdThhY2JcdTkwMWRcdTkxOTJcdTk3NTJcdTk3NTlcdTY1ODlcdTdhMGVcdTgxMDZcdTk2YmJcdTVlMmRcdTYwZGNcdTYyMWFcdTY1YTVcdTY2MTRcdTY3OTBcdTc3ZjNcdTdhNGRcdTdjNGRcdTdlM2VcdTgxMGFcdThjYWNcdThkNjRcdThkZTFcdThlNWZcdTc4YTlc'@;
put 'dTUyMDdcdTYyZDlcdTYzYTVcdTY0NDJcdTYyOThcdThhMmRcdTdhODNcdTdiYzBcdThhYWNcdTk2ZWFcdTdkNzZcdTgyMGNcdTg3NDlcdTRlZDlcdTUxNDhcdTUzNDNcdTUzNjBcdTViYTNcdTVjMDJcdTVjMTZcdTVkZGRcdTYyMjZcdTYyNDdcdTY0YjBcdTY4MTNcdTY4MzRcdTZjYzlcdTZk'@;
put 'NDVcdTZkMTdcdTY3ZDNcdTZmNWNcdTcxNGVcdTcxN2RcdTY1Y2JcdTdhN2ZcdTdiYWRcdTdkZGFcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxNDRdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE0NF1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTQ0XVt2XV09MzY4NjQr'@;
put 'dixUWzM2ODY0K3ZdPWtbMTQ0XVt2XSk7Zm9yKGtbMTQ1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZTRhXHU3ZmE4XHU4MTdhXHU4MjFiXHU4MjM5XHU4NWE2XHU4YTZlXHU4Y2NlXHU4ZGY1XHU5MDc4XHU5MDc3XHU5MmFkXHU5'@;
put 'MjkxXHU5NTgzXHU5YmFlXHU1MjRkXHU1NTg0XHU2ZjM4XHU3MTM2XHU1MTY4XHU3OTg1XHU3ZTU1XHU4MWIzXHU3Y2NlXHU1NjRjXHU1ODUxXHU1Y2E4XHU2M2FhXHU2NmZlXHU2NmZkXHU2OTVhXHU3MmQ5XHU3NThmXHU3NThlXHU3OTBlXHU3OTU2XHU3OWRmXHU3Yzk3XHU3ZDIwXHU3ZDQ0'@;
put 'XHU4NjA3XHU4YTM0XHU5NjNiXHU5MDYxXHU5ZjIwXHU1MGU3XHU1Mjc1XHU1M2NjXHU1M2UyXHU1MDA5XHU1NWFhXHU1OGVlXHU1OTRmXHU3MjNkXHU1YjhiXHU1YzY0XHU1MzFkXHU2MGUzXHU2MGYzXHU2MzVjXHU2MzgzXHU2MzNmXHU2M2JiXHVmZmZkXHU2NGNkXHU2NWU5XHU2NmY5XHU1'@;
put 'ZGUzXHU2OWNkXHU2OWZkXHU2ZjE1XHU3MWU1XHU0ZTg5XHU3NWU5XHU3NmY4XHU3YTkzXHU3Y2RmXHU3ZGNmXHU3ZDljXHU4MDYxXHU4MzQ5XHU4MzU4XHU4NDZjXHU4NGJjXHU4NWZiXHU4OGM1XHU4ZDcwXHU5MDAxXHU5MDZkXHU5Mzk3XHU5NzFjXHU5YTEyXHU1MGNmXHU1ODk3XHU2MThl'@;
put 'XHU4MWQzXHU4NTM1XHU4ZDA4XHU5MDIwXHU0ZmMzXHU1MDc0XHU1MjQ3XHU1MzczXHU2MDZmXHU2MzQ5XHU2NzVmXHU2ZTJjXHU4ZGIzXHU5MDFmXHU0ZmQ3XHU1YzVlXHU4Y2NhXHU2NWNmXHU3ZDlhXHU1MzUyXHU4ODk2XHU1MTc2XHU2M2MzXHU1YjU4XHU1YjZiXHU1YzBhXHU2NDBkXHU2'@;
put 'NzUxXHU5MDVjXHU0ZWQ2XHU1OTFhXHU1OTJhXHU2YzcwXHU4YTUxXHU1NTNlXHU1ODE1XHU1OWE1XHU2MGYwXHU2MjUzXHU2N2MxXHU4MjM1XHU2OTU1XHU5NjQwXHU5OWM0XHU5YTI4XHU0ZjUzXHU1ODA2XHU1YmZlXHU4MDEwXHU1Y2IxXHU1ZTJmXHU1Zjg1XHU2MDIwXHU2MTRiXHU2MjM0'@;
put 'XHU2NmZmXHU2Y2YwXHU2ZWRlXHU4MGNlXHU4MTdmXHU4MmQ0XHU4ODhiXHU4Y2I4XHU5MDAwXHU5MDJlXHU5NjhhXHU5ZWRiXHU5YmRiXHU0ZWUzXHU1M2YwXHU1OTI3XHU3YjJjXHU5MThkXHU5ODRjXHU5ZGY5XHU2ZWRkXHU3MDI3XHU1MzUzXHU1NTQ0XHU1Yjg1XHU2MjU4XHU2MjllXHU2'@;
put 'MmQzXHU2Y2EyXHU2ZmVmXHU3NDIyXHU4YTE3XHU5NDM4XHU2ZmMxXHU4YWZlXHU4MzM4XHU1MWU3XHU4NmY4XHU1M2VhXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTQ1XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxNDVdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE0'@;
put 'NV1bdl1dPTM3MTIwK3YsVFszNzEyMCt2XT1rWzE0NV1bdl0pO2ZvcihrWzE0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTNlOVx1NGY0Nlx1OTA1NFx1OGZiMFx1NTk2YVx1ODEzMVx1NWRmZFx1N2FlYVx1OGZiZlx1NjhkYVx1'@;
put 'OGMzN1x1NzJmOFx1OWM0OFx1NmEzZFx1OGFiMFx1NGUzOVx1NTM1OFx1NTYwNlx1NTc2Nlx1NjJjNVx1NjNhMlx1NjVlNlx1NmI0ZVx1NmRlMVx1NmU1Ylx1NzBhZFx1NzdlZFx1N2FlZlx1N2JhYVx1N2RiYlx1ODAzZFx1ODBjNlx1ODZjYlx1OGE5NVx1OTM1Ylx1NTZlM1x1NThjN1x1NWYz'@;
put 'ZVx1NjVhZFx1NjY5Nlx1NmE4MFx1NmJiNVx1NzUzN1x1OGFjN1x1NTAyNFx1NzdlNVx1NTczMFx1NWYxYlx1NjA2NVx1NjY3YVx1NmM2MFx1NzVmNFx1N2ExYVx1N2Y2ZVx1ODFmNFx1ODcxOFx1OTA0NVx1OTliM1x1N2JjOVx1NzU1Y1x1N2FmOVx1N2I1MVx1ODRjNFx1ZmZmZFx1OTAxMFx1'@;
put 'NzllOVx1N2E5Mlx1ODMzNlx1NWFlMVx1Nzc0MFx1NGUyZFx1NGVmMlx1NWI5OVx1NWZlMFx1NjJiZFx1NjYzY1x1NjdmMVx1NmNlOFx1ODY2Ylx1ODg3N1x1OGEzYlx1OTE0ZVx1OTJmM1x1OTlkMFx1NmExN1x1NzAyNlx1NzMyYVx1ODJlN1x1ODQ1N1x1OGNhZlx1NGUwMVx1NTE0Nlx1NTFj'@;
put 'Ylx1NTU4Ylx1NWJmNVx1NWUxNlx1NWUzM1x1NWU4MVx1NWYxNFx1NWYzNVx1NWY2Ylx1NWZiNFx1NjFmMlx1NjMxMVx1NjZhMlx1NjcxZFx1NmY2ZVx1NzI1Mlx1NzUzYVx1NzczYVx1ODA3NFx1ODEzOVx1ODE3OFx1ODc3Nlx1OGFiZlx1OGFkY1x1OGQ4NVx1OGRmM1x1OTI5YVx1OTU3N1x1'@;
put 'OTgwMlx1OWNlNVx1NTJjNVx1NjM1N1x1NzZmNFx1NjcxNVx1NmM4OFx1NzNjZFx1OGNjM1x1OTNhZVx1OTY3M1x1NmQyNVx1NTg5Y1x1NjkwZVx1NjljY1x1OGZmZFx1OTM5YVx1NzVkYlx1OTAxYVx1NTg1YVx1NjgwMlx1NjNiNFx1NjlmYlx1NGY0M1x1NmYyY1x1NjdkOFx1OGZiYlx1ODUy'@;
put 'Nlx1N2RiNFx1OTM1NFx1NjkzZlx1NmY3MFx1NTc2YVx1NThmN1x1NWIyY1x1N2QyY1x1NzIyYVx1NTQwYVx1OTFlM1x1OWRiNFx1NGVhZFx1NGY0ZVx1NTA1Y1x1NTA3NVx1NTI0M1x1OGM5ZVx1NTQ0OFx1NTgyNFx1NWI5YVx1NWUxZFx1NWU5NVx1NWVhZFx1NWVmN1x1NWYxZlx1NjA4Y1x1'@;
put 'NjJiNVx1NjMzYVx1NjNkMFx1NjhhZlx1NmM0MFx1Nzg4N1x1Nzk4ZVx1N2EwYlx1N2RlMFx1ODI0N1x1OGEwMlx1OGFlNlx1OGU0NFx1OTAxM1x1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE0Nl0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTQ2XVt2XS5jaGFyQ29kZUF0'@;
put 'KDApJiYoc2Vba1sxNDZdW3ZdXT0zNzM3Nit2LFRbMzczNzYrdl09a1sxNDZdW3ZdKTtmb3Ioa1sxNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwYjhcdTkxMmRcdTkxZDhcdTlmMGVcdTZjZTVcdTY0NThcdTY0ZTJcdTY1NzVc'@;
put 'dTZlZjRcdTc2ODRcdTdiMWJcdTkwNjlcdTkzZDFcdTZlYmFcdTU0ZjJcdTVmYjlcdTY0YTRcdThmNGRcdThmZWRcdTkyNDRcdTUxNzhcdTU4NmJcdTU5MjlcdTVjNTVcdTVlOTdcdTZkZmJcdTdlOGZcdTc1MWNcdThjYmNcdThlZTJcdTk4NWJcdTcwYjlcdTRmMWRcdTZiYmZcdTZmYjFcdTc1'@;
put 'MzBcdTk2ZmJcdTUxNGVcdTU0MTBcdTU4MzVcdTU4NTdcdTU5YWNcdTVjNjBcdTVmOTJcdTY1OTdcdTY3NWNcdTZlMjFcdTc2N2JcdTgzZGZcdThjZWRcdTkwMTRcdTkwZmRcdTkzNGRcdTc4MjVcdTc4M2FcdTUyYWFcdTVlYTZcdTU3MWZcdTU5NzRcdTYwMTJcdTUwMTJcdTUxNWFcdTUxYWNc'@;
put 'dWZmZmRcdTUxY2RcdTUyMDBcdTU1MTBcdTU4NTRcdTU4NThcdTU5NTdcdTViOTVcdTVjZjZcdTVkOGJcdTYwYmNcdTYyOTVcdTY0MmRcdTY3NzFcdTY4NDNcdTY4YmNcdTY4ZGZcdTc2ZDdcdTZkZDhcdTZlNmZcdTZkOWJcdTcwNmZcdTcxYzhcdTVmNTNcdTc1ZDhcdTc5NzdcdTdiNDlcdTdi'@;
put 'NTRcdTdiNTJcdTdjZDZcdTdkNzFcdTUyMzBcdTg0NjNcdTg1NjlcdTg1ZTRcdThhMGVcdThiMDRcdThjNDZcdThlMGZcdTkwMDNcdTkwMGZcdTk0MTlcdTk2NzZcdTk4MmRcdTlhMzBcdTk1ZDhcdTUwY2RcdTUyZDVcdTU0MGNcdTU4MDJcdTVjMGVcdTYxYTdcdTY0OWVcdTZkMWVcdTc3YjNc'@;
put 'dTdhZTVcdTgwZjRcdTg0MDRcdTkwNTNcdTkyODVcdTVjZTBcdTlkMDdcdTUzM2ZcdTVmOTdcdTVmYjNcdTZkOWNcdTcyNzlcdTc3NjNcdTc5YmZcdTdiZTRcdTZiZDJcdTcyZWNcdThhYWRcdTY4MDNcdTZhNjFcdTUxZjhcdTdhODFcdTY5MzRcdTVjNGFcdTljZjZcdTgyZWJcdTViYzVcdTkx'@;
put 'NDlcdTcwMWVcdTU2NzhcdTVjNmZcdTYwYzdcdTY1NjZcdTZjOGNcdThjNWFcdTkwNDFcdTk4MTNcdTU0NTFcdTY2YzdcdTkyMGRcdTU5NDhcdTkwYTNcdTUxODVcdTRlNGRcdTUxZWFcdTg1OTlcdThiMGVcdTcwNThcdTYzN2FcdTkzNGJcdTY5NjJcdTk5YjRcdTdlMDRcdTc1NzdcdTUzNTdc'@;
put 'dTY5NjBcdThlZGZcdTk2ZTNcdTZjNWRcdTRlOGNcdTVjM2NcdTVmMTBcdThmZTlcdTUzMDJcdThjZDFcdTgwODlcdTg2NzlcdTVlZmZcdTY1ZTVcdTRlNzNcdTUxNjVcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxNDddLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE0N11b'@;
put 'dl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTQ3XVt2XV09Mzc2MzIrdixUWzM3NjMyK3ZdPWtbMTQ3XVt2XSk7Zm9yKGtbMTQ4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1OTgyXHU1YzNmXHU5N2VlXHU0ZWZiXHU1OThhXHU1ZmNk'@;
put 'XHU4YThkXHU2ZmUxXHU3OWIwXHU3OTYyXHU1YmU3XHU4NDcxXHU3MzJiXHU3MWIxXHU1ZTc0XHU1ZmY1XHU2MzdiXHU2NDlhXHU3MWMzXHU3Yzk4XHU0ZTQzXHU1ZWZjXHU0ZTRiXHU1N2RjXHU1NmEyXHU2MGE5XHU2ZmMzXHU3ZDBkXHU4MGZkXHU4MTMzXHU4MWJmXHU4ZmIyXHU4OTk3XHU4'@;
put 'NmE0XHU1ZGY0XHU2MjhhXHU2NGFkXHU4OTg3XHU2Nzc3XHU2Y2UyXHU2ZDNlXHU3NDM2XHU3ODM0XHU1YTQ2XHU3Zjc1XHU4MmFkXHU5OWFjXHU0ZmYzXHU1ZWMzXHU2MmRkXHU2MzkyXHU2NTU3XHU2NzZmXHU3NmMzXHU3MjRjXHU4MGNjXHU4MGJhXHU4ZjI5XHU5MTRkXHU1MDBkXHU1N2Y5'@;
put 'XHU1YTkyXHU2ODg1XHVmZmZkXHU2OTczXHU3MTY0XHU3MmZkXHU4Y2I3XHU1OGYyXHU4Y2UwXHU5NjZhXHU5MDE5XHU4NzdmXHU3OWU0XHU3N2U3XHU4NDI5XHU0ZjJmXHU1MjY1XHU1MzVhXHU2MmNkXHU2N2NmXHU2Y2NhXHU3NjdkXHU3Yjk0XHU3Yzk1XHU4MjM2XHU4NTg0XHU4ZmViXHU2'@;
put 'NmRkXHU2ZjIwXHU3MjA2XHU3ZTFiXHU4M2FiXHU5OWMxXHU5ZWE2XHU1MWZkXHU3YmIxXHU3ODcyXHU3YmI4XHU4MDg3XHU3YjQ4XHU2YWU4XHU1ZTYxXHU4MDhjXHU3NTUxXHU3NTYwXHU1MTZiXHU5MjYyXHU2ZThjXHU3NjdhXHU5MTk3XHU5YWVhXHU0ZjEwXHU3ZjcwXHU2MjljXHU3YjRm'@;
put 'XHU5NWE1XHU5Y2U5XHU1NjdhXHU1ODU5XHU4NmU0XHU5NmJjXHU0ZjM0XHU1MjI0XHU1MzRhXHU1M2NkXHU1M2RiXHU1ZTA2XHU2NDJjXHU2NTkxXHU2NzdmXHU2YzNlXHU2YzRlXHU3MjQ4XHU3MmFmXHU3M2VkXHU3NTU0XHU3ZTQxXHU4MjJjXHU4NWU5XHU4Y2E5XHU3YmM0XHU5MWM2XHU3'@;
put 'MTY5XHU5ODEyXHU5OGVmXHU2MzNkXHU2NjY5XHU3NTZhXHU3NmU0XHU3OGQwXHU4NTQzXHU4NmVlXHU1MzJhXHU1MzUxXHU1NDI2XHU1OTgzXHU1ZTg3XHU1ZjdjXHU2MGIyXHU2MjQ5XHU2Mjc5XHU2MmFiXHU2NTkwXHU2YmQ0XHU2Y2NjXHU3NWIyXHU3NmFlXHU3ODkxXHU3OWQ4XHU3ZGNi'@;
put 'XHU3Zjc3XHU4MGE1XHU4OGFiXHU4YWI5XHU4Y2JiXHU5MDdmXHU5NzVlXHU5OGRiXHU2YTBiXHU3YzM4XHU1MDk5XHU1YzNlXHU1ZmFlXHU2Nzg3XHU2YmQ4XHU3NDM1XHU3NzA5XHU3ZjhlXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTQ4XS5sZW5ndGg7Kyt2KTY1'@;
put 'NTMzIT09a1sxNDhdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE0OF1bdl1dPTM3ODg4K3YsVFszNzg4OCt2XT1rWzE0OF1bdl0pO2ZvcihrWzE0OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWYzYlx1NjdjYVx1N2ExN1x1NTMz'@;
put 'OVx1NzU4Ylx1OWFlZFx1NWY2Nlx1ODE5ZFx1ODNmMVx1ODA5OFx1NWYzY1x1NWZjNVx1NzU2Mlx1N2I0Nlx1OTAzY1x1Njg2N1x1NTllYlx1NWE5Ylx1N2QxMFx1NzY3ZVx1OGIyY1x1NGZmNVx1NWY2YVx1NmExOVx1NmMzN1x1NmYwMlx1NzRlMlx1Nzk2OFx1ODg2OFx1OGE1NVx1OGM3OVx1'@;
put 'NWVkZlx1NjNjZlx1NzVjNVx1NzlkMlx1ODJkN1x1OTMyOFx1OTJmMlx1ODQ5Y1x1ODZlZFx1OWMyZFx1NTRjMVx1NWY2Y1x1NjU4Y1x1NmQ1Y1x1NzAxNVx1OGNhN1x1OGNkM1x1OTgzYlx1NjU0Zlx1NzRmNlx1NGUwZFx1NGVkOFx1NTdlMFx1NTkyYlx1NWE2Nlx1NWJjY1x1NTFhOFx1NWUw'@;
put 'M1x1NWU5Y1x1NjAxNlx1NjI3Nlx1NjU3N1x1ZmZmZFx1NjVhN1x1NjY2ZVx1NmQ2ZVx1NzIzNlx1N2IyNlx1ODE1MFx1ODE5YVx1ODI5OVx1OGI1Y1x1OGNhMFx1OGNlNlx1OGQ3NFx1OTYxY1x1OTY0NFx1NGZhZVx1NjRhYlx1NmI2Nlx1ODIxZVx1ODQ2MVx1ODU2YVx1OTBlOFx1NWMwMVx1'@;
put 'Njk1M1x1OThhOFx1ODQ3YVx1ODU1N1x1NGYwZlx1NTI2Zlx1NWZhOVx1NWU0NVx1NjcwZFx1Nzk4Zlx1ODE3OVx1ODkwN1x1ODk4Nlx1NmRmNVx1NWYxN1x1NjI1NVx1NmNiOFx1NGVjZlx1NzI2OVx1OWI5Mlx1NTIwNlx1NTQzYlx1NTY3NFx1NThiM1x1NjFhNFx1NjI2ZVx1NzExYVx1NTk2'@;
put 'ZVx1N2M4OVx1N2NkZVx1N2QxYlx1OTZmMFx1NjU4N1x1ODA1ZVx1NGUxOVx1NGY3NVx1NTE3NVx1NTg0MFx1NWU2M1x1NWU3M1x1NWYwYVx1NjdjNFx1NGUyNlx1ODUzZFx1OTU4OVx1OTY1Ylx1N2M3M1x1OTgwMVx1NTBmYlx1NThjMVx1NzY1Nlx1NzhhN1x1NTIyNVx1NzdhNVx1ODUxMVx1'@;
put 'N2I4Nlx1NTA0Zlx1NTkwOVx1NzI0N1x1N2JjN1x1N2RlOFx1OGZiYVx1OGZkNFx1OTA0ZFx1NGZiZlx1NTJjOVx1NWEyOVx1NWYwMVx1OTdhZFx1NGZkZFx1ODIxN1x1OTJlYVx1NTcwM1x1NjM1NVx1NmI2OVx1NzUyYlx1ODhkY1x1OGYxNFx1N2E0Mlx1NTJkZlx1NTg5M1x1NjE1NVx1NjIw'@;
put 'YVx1NjZhZVx1NmJjZFx1N2MzZlx1ODNlOVx1NTAyM1x1NGZmOFx1NTMwNVx1NTQ0Nlx1NTgzMVx1NTk0OVx1NWI5ZFx1NWNmMFx1NWNlZlx1NWQyOVx1NWU5Nlx1NjJiMVx1NjM2N1x1NjUzZVx1NjViOVx1NjcwYlx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE0OV0u'@;
put 'bGVuZ3RoOysrdik2NTUzMyE9PWtbMTQ5XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxNDldW3ZdXT0zODE0NCt2LFRbMzgxNDQrdl09a1sxNDldW3ZdKTtmb3Ioa1sxNTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZjZDVcdTZj'@;
put 'ZTFcdTcwZjlcdTc4MzJcdTdlMmJcdTgwZGVcdTgyYjNcdTg0MGNcdTg0ZWNcdTg3MDJcdTg5MTJcdThhMmFcdThjNGFcdTkwYTZcdTkyZDJcdTk4ZmRcdTljZjNcdTlkNmNcdTRlNGZcdTRlYTFcdTUwOGRcdTUyNTZcdTU3NGFcdTU5YThcdTVlM2RcdTVmZDhcdTVmZDlcdTYyM2ZcdTY2YjRc'@;
put 'dTY3MWJcdTY3ZDBcdTY4ZDJcdTUxOTJcdTdkMjFcdTgwYWFcdTgxYThcdThiMDBcdThjOGNcdThjYmZcdTkyN2VcdTk2MzJcdTU0MjBcdTk4MmNcdTUzMTdcdTUwZDVcdTUzNWNcdTU4YThcdTY0YjJcdTY3MzRcdTcyNjdcdTc3NjZcdTdhNDZcdTkxZTZcdTUyYzNcdTZjYTFcdTZiODZcdTU4'@;
put 'MDBcdTVlNGNcdTU5NTRcdTY3MmNcdTdmZmJcdTUxZTFcdTc2YzZcdWZmZmRcdTY0NjlcdTc4ZThcdTliNTRcdTllYmJcdTU3Y2JcdTU5YjlcdTY2MjdcdTY3OWFcdTZiY2VcdTU0ZTlcdTY5ZDlcdTVlNTVcdTgxOWNcdTY3OTVcdTliYWFcdTY3ZmVcdTljNTJcdTY4NWRcdTRlYTZcdTRmZTNc'@;
put 'dTUzYzhcdTYyYjlcdTY3MmJcdTZjYWJcdThmYzRcdTRmYWRcdTdlNmRcdTllYmZcdTRlMDdcdTYxNjJcdTZlODBcdTZmMmJcdTg1MTNcdTU0NzNcdTY3MmFcdTliNDVcdTVkZjNcdTdiOTVcdTVjYWNcdTViYzZcdTg3MWNcdTZlNGFcdTg0ZDFcdTdhMTRcdTgxMDhcdTU5OTlcdTdjOGRcdTZj'@;
put 'MTFcdTc3MjBcdTUyZDlcdTU5MjJcdTcxMjFcdTcyNWZcdTc3ZGJcdTk3MjdcdTlkNjFcdTY5MGJcdTVhN2ZcdTVhMThcdTUxYTVcdTU0MGRcdTU0N2RcdTY2MGVcdTc2ZGZcdThmZjdcdTkyOThcdTljZjRcdTU5ZWFcdTcyNWRcdTZlYzVcdTUxNGRcdTY4YzlcdTdkYmZcdTdkZWNcdTk3NjJc'@;
put 'dTllYmFcdTY0NzhcdTZhMjFcdTgzMDJcdTU5ODRcdTViNWZcdTZiZGJcdTczMWJcdTc2ZjJcdTdkYjJcdTgwMTdcdTg0OTlcdTUxMzJcdTY3MjhcdTllZDlcdTc2ZWVcdTY3NjJcdTUyZmZcdTk5MDVcdTVjMjRcdTYyM2JcdTdjN2VcdThjYjBcdTU1NGZcdTYwYjZcdTdkMGJcdTk1ODBcdTUz'@;
put 'MDFcdTRlNWZcdTUxYjZcdTU5MWNcdTcyM2FcdTgwMzZcdTkxY2VcdTVmMjVcdTc3ZTJcdTUzODRcdTVmNzlcdTdkMDRcdTg1YWNcdThhMzNcdThlOGRcdTk3NTZcdTY3ZjNcdTg1YWVcdTk0NTNcdTYxMDlcdTYxMDhcdTZjYjlcdTc2NTJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSx2'@;
put 'PTA7diE9a1sxNTBdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE1MF1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTUwXVt2XV09Mzg0MDArdixUWzM4NDAwK3ZdPWtbMTUwXVt2XSk7Zm9yKGtbMTUxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHU4YWVkXHU4ZjM4XHU1NTJmXHU0ZjUxXHU1MTJhXHU1MmM3XHU1M2NiXHU1YmE1XHU1ZTdkXHU2MGEwXHU2MTgyXHU2M2Q2XHU2NzA5XHU2N2RhXHU2ZTY3XHU2ZDhjXHU3MzM2XHU3MzM3XHU3NTMxXHU3OTUwXHU4OGQ1XHU4YTk4XHU5MDRhXHU5MDkxXHU5MGY1XHU5NmM0XHU4Nzhk'@;
put 'XHU1OTE1XHU0ZTg4XHU0ZjU5XHU0ZTBlXHU4YTg5XHU4ZjNmXHU5ODEwXHU1MGFkXHU1ZTdjXHU1OTk2XHU1YmI5XHU1ZWI4XHU2M2RhXHU2M2ZhXHU2NGMxXHU2NmRjXHU2OTRhXHU2OWQ4XHU2ZDBiXHU2ZWI2XHU3MTk0XHU3NTI4XHU3YWFmXHU3ZjhhXHU4MDAwXHU4NDQ5XHU4NGM5XHU4'@;
put 'OTgxXHU4YjIxXHU4ZTBhXHU5MDY1XHU5NjdkXHU5OTBhXHU2MTdlXHU2MjkxXHU2YjMyXHVmZmZkXHU2YzgzXHU2ZDc0XHU3ZmNjXHU3ZmZjXHU2ZGMwXHU3Zjg1XHU4N2JhXHU4OGY4XHU2NzY1XHU4M2IxXHU5ODNjXHU5NmY3XHU2ZDFiXHU3ZDYxXHU4NDNkXHU5MTZhXHU0ZTcxXHU1Mzc1'@;
put 'XHU1ZDUwXHU2YjA0XHU2ZmViXHU4NWNkXHU4NjJkXHU4OWE3XHU1MjI5XHU1NDBmXHU1YzY1XHU2NzRlXHU2OGE4XHU3NDA2XHU3NDgzXHU3NWUyXHU4OGNmXHU4OGUxXHU5MWNjXHU5NmUyXHU5Njc4XHU1ZjhiXHU3Mzg3XHU3YWNiXHU4NDRlXHU2M2EwXHU3NTY1XHU1Mjg5XHU2ZDQxXHU2'@;
put 'ZTljXHU3NDA5XHU3NTU5XHU3ODZiXHU3YzkyXHU5Njg2XHU3YWRjXHU5ZjhkXHU0ZmI2XHU2MTZlXHU2NWM1XHU4NjVjXHU0ZTg2XHU0ZWFlXHU1MGRhXHU0ZTIxXHU1MWNjXHU1YmVlXHU2NTk5XHU2ODgxXHU2ZGJjXHU3MzFmXHU3NjQyXHU3N2FkXHU3YTFjXHU3Y2U3XHU4MjZmXHU4YWQy'@;
put 'XHU5MDdjXHU5MWNmXHU5Njc1XHU5ODE4XHU1MjliXHU3ZGQxXHU1MDJiXHU1Mzk4XHU2Nzk3XHU2ZGNiXHU3MWQwXHU3NDMzXHU4MWU4XHU4ZjJhXHU5NmEzXHU5YzU3XHU5ZTlmXHU3NDYwXHU1ODQxXHU2ZDk5XHU3ZDJmXHU5ODVlXHU0ZWU0XHU0ZjM2XHU0ZjhiXHU1MWI3XHU1MmIxXHU1'@;
put 'ZGJhXHU2MDFjXHU3M2IyXHU3OTNjXHU4MmQzXHU5MjM0XHU5NmI3XHU5NmY2XHU5NzBhXHU5ZTk3XHU5ZjYyXHU2NmE2XHU2Yjc0XHU1MjE3XHU1MmEzXHU3MGM4XHU4OGMyXHU1ZWM5XHU2MDRiXHU2MTkwXHU2ZjIzXHU3MTQ5XHU3YzNlXHU3ZGY0XHU4MDZmXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'Ii5zcGxpdCgiIiksdj0wO3YhPWtbMTUxXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxNTFdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE1MV1bdl1dPTM4NjU2K3YsVFszODY1Nit2XT1rWzE1MV1bdl0pO2ZvcihrWzE1Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ODRlZVx1OTAyM1x1OTMyY1x1NTQ0Mlx1OWI2Zlx1NmFkM1x1NzA4OVx1OGNjMlx1OGRlZlx1OTczMlx1NTJiNFx1NWE0MVx1NWVjYVx1NWYwNFx1NjcxN1x1Njk3Y1x1Njk5NFx1NmQ2YVx1NmYwZlx1NzI2Mlx1NzJmY1x1N2JlZFx1ODAwMVx1ODA3ZVx1ODc0'@;
put 'Ylx1OTBjZVx1NTE2ZFx1OWU5M1x1Nzk4NFx1ODA4Ylx1OTMzMlx1OGFkNlx1NTAyZFx1NTQ4Y1x1OGE3MVx1NmI2YVx1OGNjNFx1ODEwN1x1NjBkMVx1NjdhMFx1OWRmMlx1NGU5OVx1NGU5OFx1OWMxMFx1OGE2Ylx1ODVjMVx1ODU2OFx1NjkwMFx1NmU3ZVx1Nzg5N1x1ODE1NVx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWYwY1x1NGUxMFx1NGUxNVx1NGUyYVx1NGUzMVx1NGUzNlx1NGUzY1x1NGUzZlx1NGU0Mlx1NGU1Nlx1NGU1OFx1NGU4Mlx1'@;
put 'NGU4NVx1OGM2Ylx1NGU4YVx1ODIxMlx1NWYwZFx1NGU4ZVx1NGU5ZVx1NGU5Zlx1NGVhMFx1NGVhMlx1NGViMFx1NGViM1x1NGViNlx1NGVjZVx1NGVjZFx1NGVjNFx1NGVjNlx1NGVjMlx1NGVkN1x1NGVkZVx1NGVlZFx1NGVkZlx1NGVmN1x1NGYwOVx1NGY1YVx1NGYzMFx1NGY1Ylx1NGY1'@;
put 'ZFx1NGY1N1x1NGY0N1x1NGY3Nlx1NGY4OFx1NGY4Zlx1NGY5OFx1NGY3Ylx1NGY2OVx1NGY3MFx1NGY5MVx1NGY2Zlx1NGY4Nlx1NGY5Nlx1NTExOFx1NGZkNFx1NGZkZlx1NGZjZVx1NGZkOFx1NGZkYlx1NGZkMVx1NGZkYVx1NGZkMFx1NGZlNFx1NGZlNVx1NTAxYVx1NTAyOFx1NTAxNFx1'@;
put 'NTAyYVx1NTAyNVx1NTAwNVx1NGYxY1x1NGZmNlx1NTAyMVx1NTAyOVx1NTAyY1x1NGZmZVx1NGZlZlx1NTAxMVx1NTAwNlx1NTA0M1x1NTA0N1x1NjcwM1x1NTA1NVx1NTA1MFx1NTA0OFx1NTA1YVx1NTA1Nlx1NTA2Y1x1NTA3OFx1NTA4MFx1NTA5YVx1NTA4NVx1NTBiNFx1NTBiMlx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE1Ml0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTUyXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxNTJdW3ZdXT0zODkxMit2LFRbMzg5MTIrdl09a1sxNTJdW3ZdKTtmb3Ioa1sxNTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUwYzlcdTUwY2FcdTUwYjNcdTUwYzJcdTUwZDZcdTUwZGVcdTUwZTVcdTUwZWRcdTUwZTNcdTUwZWVcdTUwZjlcdTUwZjVcdTUxMDlcdTUxMDFcdTUxMDJcdTUxMTZcdTUxMTVcdTUxMTRcdTUxMWFcdTUxMjFcdTUxM2FcdTUxMzdcdTUx'@;
put 'M2NcdTUxM2JcdTUxM2ZcdTUxNDBcdTUxNTJcdTUxNGNcdTUxNTRcdTUxNjJcdTdhZjhcdTUxNjlcdTUxNmFcdTUxNmVcdTUxODBcdTUxODJcdTU2ZDhcdTUxOGNcdTUxODlcdTUxOGZcdTUxOTFcdTUxOTNcdTUxOTVcdTUxOTZcdTUxYTRcdTUxYTZcdTUxYTJcdTUxYTlcdTUxYWFcdTUxYWJc'@;
put 'dTUxYjNcdTUxYjFcdTUxYjJcdTUxYjBcdTUxYjVcdTUxYmRcdTUxYzVcdTUxYzlcdTUxZGJcdTUxZTBcdTg2NTVcdTUxZTlcdTUxZWRcdWZmZmRcdTUxZjBcdTUxZjVcdTUxZmVcdTUyMDRcdTUyMGJcdTUyMTRcdTUyMGVcdTUyMjdcdTUyMmFcdTUyMmVcdTUyMzNcdTUyMzlcdTUyNGZcdTUy'@;
put 'NDRcdTUyNGJcdTUyNGNcdTUyNWVcdTUyNTRcdTUyNmFcdTUyNzRcdTUyNjlcdTUyNzNcdTUyN2ZcdTUyN2RcdTUyOGRcdTUyOTRcdTUyOTJcdTUyNzFcdTUyODhcdTUyOTFcdThmYThcdThmYTdcdTUyYWNcdTUyYWRcdTUyYmNcdTUyYjVcdTUyYzFcdTUyY2RcdTUyZDdcdTUyZGVcdTUyZTNc'@;
put 'dTUyZTZcdTk4ZWRcdTUyZTBcdTUyZjNcdTUyZjVcdTUyZjhcdTUyZjlcdTUzMDZcdTUzMDhcdTc1MzhcdTUzMGRcdTUzMTBcdTUzMGZcdTUzMTVcdTUzMWFcdTUzMjNcdTUzMmZcdTUzMzFcdTUzMzNcdTUzMzhcdTUzNDBcdTUzNDZcdTUzNDVcdTRlMTdcdTUzNDlcdTUzNGRcdTUxZDZcdTUz'@;
put 'NWVcdTUzNjlcdTUzNmVcdTU5MThcdTUzN2JcdTUzNzdcdTUzODJcdTUzOTZcdTUzYTBcdTUzYTZcdTUzYTVcdTUzYWVcdTUzYjBcdTUzYjZcdTUzYzNcdTdjMTJcdTk2ZDlcdTUzZGZcdTY2ZmNcdTcxZWVcdTUzZWVcdTUzZThcdTUzZWRcdTUzZmFcdTU0MDFcdTU0M2RcdTU0NDBcdTU0MmNc'@;
put 'dTU0MmRcdTU0M2NcdTU0MmVcdTU0MzZcdTU0MjlcdTU0MWRcdTU0NGVcdTU0OGZcdTU0NzVcdTU0OGVcdTU0NWZcdTU0NzFcdTU0NzdcdTU0NzBcdTU0OTJcdTU0N2JcdTU0ODBcdTU0NzZcdTU0ODRcdTU0OTBcdTU0ODZcdTU0YzdcdTU0YTJcdTU0YjhcdTU0YTVcdTU0YWNcdTU0YzRcdTU0'@;
put 'YzhcdTU0YThcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxNTNdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE1M11bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTUzXVt2XV09MzkxNjgrdixUWzM5MTY4K3ZdPWtbMTUzXVt2XSk7Zm9yKGtbMTU0XT0iXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NGFiXHU1NGMyXHU1NGE0XHU1NGJlXHU1NGJjXHU1NGQ4XHU1NGU1XHU1NGU2XHU1NTBmXHU1NTE0XHU1NGZkXHU1NGVlXHU1NGVkXHU1NGZhXHU1NGUyXHU1NTM5XHU1NTQwXHU1NTYzXHU1NTRjXHU1NTJlXHU1'@;
put 'NTVjXHU1NTQ1XHU1NTU2XHU1NTU3XHU1NTM4XHU1NTMzXHU1NTVkXHU1NTk5XHU1NTgwXHU1NGFmXHU1NThhXHU1NTlmXHU1NTdiXHU1NTdlXHU1NTk4XHU1NTllXHU1NWFlXHU1NTdjXHU1NTgzXHU1NWE5XHU1NTg3XHU1NWE4XHU1NWRhXHU1NWM1XHU1NWRmXHU1NWM0XHU1NWRjXHU1NWU0'@;
put 'XHU1NWQ0XHU1NjE0XHU1NWY3XHU1NjE2XHU1NWZlXHU1NWZkXHU1NjFiXHU1NWY5XHU1NjRlXHU1NjUwXHU3MWRmXHU1NjM0XHU1NjM2XHU1NjMyXHU1NjM4XHVmZmZkXHU1NjZiXHU1NjY0XHU1NjJmXHU1NjZjXHU1NjZhXHU1Njg2XHU1NjgwXHU1NjhhXHU1NmEwXHU1Njk0XHU1NjhmXHU1'@;
put 'NmE1XHU1NmFlXHU1NmI2XHU1NmI0XHU1NmMyXHU1NmJjXHU1NmMxXHU1NmMzXHU1NmMwXHU1NmM4XHU1NmNlXHU1NmQxXHU1NmQzXHU1NmQ3XHU1NmVlXHU1NmY5XHU1NzAwXHU1NmZmXHU1NzA0XHU1NzA5XHU1NzA4XHU1NzBiXHU1NzBkXHU1NzEzXHU1NzE4XHU1NzE2XHU1NWM3XHU1NzFj'@;
put 'XHU1NzI2XHU1NzM3XHU1NzM4XHU1NzRlXHU1NzNiXHU1NzQwXHU1NzRmXHU1NzY5XHU1N2MwXHU1Nzg4XHU1NzYxXHU1NzdmXHU1Nzg5XHU1NzkzXHU1N2EwXHU1N2IzXHU1N2E0XHU1N2FhXHU1N2IwXHU1N2MzXHU1N2M2XHU1N2Q0XHU1N2QyXHU1N2QzXHU1ODBhXHU1N2Q2XHU1N2UzXHU1'@;
put 'ODBiXHU1ODE5XHU1ODFkXHU1ODcyXHU1ODIxXHU1ODYyXHU1ODRiXHU1ODcwXHU2YmMwXHU1ODUyXHU1ODNkXHU1ODc5XHU1ODg1XHU1OGI5XHU1ODlmXHU1OGFiXHU1OGJhXHU1OGRlXHU1OGJiXHU1OGI4XHU1OGFlXHU1OGM1XHU1OGQzXHU1OGQxXHU1OGQ3XHU1OGQ5XHU1OGQ4XHU1OGU1'@;
put 'XHU1OGRjXHU1OGU0XHU1OGRmXHU1OGVmXHU1OGZhXHU1OGY5XHU1OGZiXHU1OGZjXHU1OGZkXHU1OTAyXHU1OTBhXHU1OTEwXHU1OTFiXHU2OGE2XHU1OTI1XHU1OTJjXHU1OTJkXHU1OTMyXHU1OTM4XHU1OTNlXHU3YWQyXHU1OTU1XHU1OTUwXHU1OTRlXHU1OTVhXHU1OTU4XHU1OTYyXHU1'@;
put 'OTYwXHU1OTY3XHU1OTZjXHU1OTY5XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTU0XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxNTRdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE1NF1bdl1dPTM5NDI0K3YsVFszOTQyNCt2XT1rWzE1NF1bdl0pO2ZvcihrWzE1NV09'@;
put 'Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTk3OFx1NTk4MVx1NTk5ZFx1NGY1ZVx1NGZhYlx1NTlhM1x1NTliMlx1NTljNlx1NTllOFx1NTlkY1x1NTk4ZFx1NTlkOVx1NTlkYVx1NWEyNVx1NWExZlx1NWExMVx1NWExY1x1NWEwOVx1'@;
put 'NWExYVx1NWE0MFx1NWE2Y1x1NWE0OVx1NWEzNVx1NWEzNlx1NWE2Mlx1NWE2YVx1NWE5YVx1NWFiY1x1NWFiZVx1NWFjYlx1NWFjMlx1NWFiZFx1NWFlM1x1NWFkN1x1NWFlNlx1NWFlOVx1NWFkNlx1NWFmYVx1NWFmYlx1NWIwY1x1NWIwYlx1NWIxNlx1NWIzMlx1NWFkMFx1NWIyYVx1NWIz'@;
put 'Nlx1NWIzZVx1NWI0M1x1NWI0NVx1NWI0MFx1NWI1MVx1NWI1NVx1NWI1YVx1NWI1Ylx1NWI2NVx1NWI2OVx1NWI3MFx1NWI3M1x1NWI3NVx1NWI3OFx1NjU4OFx1NWI3YVx1NWI4MFx1ZmZmZFx1NWI4M1x1NWJhNlx1NWJiOFx1NWJjM1x1NWJjN1x1NWJjOVx1NWJkNFx1NWJkMFx1NWJlNFx1'@;
put 'NWJlNlx1NWJlMlx1NWJkZVx1NWJlNVx1NWJlYlx1NWJmMFx1NWJmNlx1NWJmM1x1NWMwNVx1NWMwN1x1NWMwOFx1NWMwZFx1NWMxM1x1NWMyMFx1NWMyMlx1NWMyOFx1NWMzOFx1NWMzOVx1NWM0MVx1NWM0Nlx1NWM0ZVx1NWM1M1x1NWM1MFx1NWM0Zlx1NWI3MVx1NWM2Y1x1NWM2ZVx1NGU2'@;
put 'Mlx1NWM3Nlx1NWM3OVx1NWM4Y1x1NWM5MVx1NWM5NFx1NTk5Ylx1NWNhYlx1NWNiYlx1NWNiNlx1NWNiY1x1NWNiN1x1NWNjNVx1NWNiZVx1NWNjN1x1NWNkOVx1NWNlOVx1NWNmZFx1NWNmYVx1NWNlZFx1NWQ4Y1x1NWNlYVx1NWQwYlx1NWQxNVx1NWQxN1x1NWQ1Y1x1NWQxZlx1NWQxYlx1'@;
put 'NWQxMVx1NWQxNFx1NWQyMlx1NWQxYVx1NWQxOVx1NWQxOFx1NWQ0Y1x1NWQ1Mlx1NWQ0ZVx1NWQ0Ylx1NWQ2Y1x1NWQ3M1x1NWQ3Nlx1NWQ4N1x1NWQ4NFx1NWQ4Mlx1NWRhMlx1NWQ5ZFx1NWRhY1x1NWRhZVx1NWRiZFx1NWQ5MFx1NWRiN1x1NWRiY1x1NWRjOVx1NWRjZFx1NWRkM1x1NWRk'@;
put 'Mlx1NWRkNlx1NWRkYlx1NWRlYlx1NWRmMlx1NWRmNVx1NWUwYlx1NWUxYVx1NWUxOVx1NWUxMVx1NWUxYlx1NWUzNlx1NWUzN1x1NWU0NFx1NWU0M1x1NWU0MFx1NWU0ZVx1NWU1N1x1NWU1NFx1NWU1Zlx1NWU2Mlx1NWU2NFx1NWU0N1x1NWU3NVx1NWU3Nlx1NWU3YVx1OWViY1x1NWU3Zlx1'@;
put 'NWVhMFx1NWVjMVx1NWVjMlx1NWVjOFx1NWVkMFx1NWVjZlx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE1NV0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTU1XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxNTVdW3ZdXT0zOTY4MCt2LFRbMzk2ODArdl09a1sxNTVdW3Zd'@;
put 'KTtmb3Ioa1sxNTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVlZDZcdTVlZTNcdTVlZGRcdTVlZGFcdTVlZGJcdTVlZTJcdTVlZTFcdTVlZThcdTVlZTlcdTVlZWNcdTVlZjFcdTVlZjNcdTVlZjBcdTVlZjRcdTVlZjhcdTVlZmVc'@;
put 'dTVmMDNcdTVmMDlcdTVmNWRcdTVmNWNcdTVmMGJcdTVmMTFcdTVmMTZcdTVmMjlcdTVmMmRcdTVmMzhcdTVmNDFcdTVmNDhcdTVmNGNcdTVmNGVcdTVmMmZcdTVmNTFcdTVmNTZcdTVmNTdcdTVmNTlcdTVmNjFcdTVmNmRcdTVmNzNcdTVmNzdcdTVmODNcdTVmODJcdTVmN2ZcdTVmOGFcdTVm'@;
put 'ODhcdTVmOTFcdTVmODdcdTVmOWVcdTVmOTlcdTVmOThcdTVmYTBcdTVmYThcdTVmYWRcdTVmYmNcdTVmZDZcdTVmZmJcdTVmZTRcdTVmZjhcdTVmZjFcdTVmZGRcdTYwYjNcdTVmZmZcdTYwMjFcdTYwNjBcdWZmZmRcdTYwMTlcdTYwMTBcdTYwMjlcdTYwMGVcdTYwMzFcdTYwMWJcdTYwMTVc'@;
put 'dTYwMmJcdTYwMjZcdTYwMGZcdTYwM2FcdTYwNWFcdTYwNDFcdTYwNmFcdTYwNzdcdTYwNWZcdTYwNGFcdTYwNDZcdTYwNGRcdTYwNjNcdTYwNDNcdTYwNjRcdTYwNDJcdTYwNmNcdTYwNmJcdTYwNTlcdTYwODFcdTYwOGRcdTYwZTdcdTYwODNcdTYwOWFcdTYwODRcdTYwOWJcdTYwOTZcdTYw'@;
put 'OTdcdTYwOTJcdTYwYTdcdTYwOGJcdTYwZTFcdTYwYjhcdTYwZTBcdTYwZDNcdTYwYjRcdTVmZjBcdTYwYmRcdTYwYzZcdTYwYjVcdTYwZDhcdTYxNGRcdTYxMTVcdTYxMDZcdTYwZjZcdTYwZjdcdTYxMDBcdTYwZjRcdTYwZmFcdTYxMDNcdTYxMjFcdTYwZmJcdTYwZjFcdTYxMGRcdTYxMGVc'@;
put 'dTYxNDdcdTYxM2VcdTYxMjhcdTYxMjdcdTYxNGFcdTYxM2ZcdTYxM2NcdTYxMmNcdTYxMzRcdTYxM2RcdTYxNDJcdTYxNDRcdTYxNzNcdTYxNzdcdTYxNThcdTYxNTlcdTYxNWFcdTYxNmJcdTYxNzRcdTYxNmZcdTYxNjVcdTYxNzFcdTYxNWZcdTYxNWRcdTYxNTNcdTYxNzVcdTYxOTlcdTYx'@;
put 'OTZcdTYxODdcdTYxYWNcdTYxOTRcdTYxOWFcdTYxOGFcdTYxOTFcdTYxYWJcdTYxYWVcdTYxY2NcdTYxY2FcdTYxYzlcdTYxZjdcdTYxYzhcdTYxYzNcdTYxYzZcdTYxYmFcdTYxY2JcdTdmNzlcdTYxY2RcdTYxZTZcdTYxZTNcdTYxZjZcdTYxZmFcdTYxZjRcdTYxZmZcdTYxZmRcdTYxZmNc'@;
put 'dTYxZmVcdTYyMDBcdTYyMDhcdTYyMDlcdTYyMGRcdTYyMGNcdTYyMTRcdTYyMWJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxNTZdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE1Nl1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTU2XVt2XV09Mzk5MzYrdixUWzM5OTM2'@;
put 'K3ZdPWtbMTU2XVt2XSk7Zm9yKGtbMTU3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MjFlXHU2MjIxXHU2MjJhXHU2MjJlXHU2MjMwXHU2MjMyXHU2MjMzXHU2MjQxXHU2MjRlXHU2MjVlXHU2MjYzXHU2MjViXHU2MjYwXHU2MjY4'@;
put 'XHU2MjdjXHU2MjgyXHU2Mjg5XHU2MjdlXHU2MjkyXHU2MjkzXHU2Mjk2XHU2MmQ0XHU2MjgzXHU2Mjk0XHU2MmQ3XHU2MmQxXHU2MmJiXHU2MmNmXHU2MmZmXHU2MmM2XHU2NGQ0XHU2MmM4XHU2MmRjXHU2MmNjXHU2MmNhXHU2MmMyXHU2MmM3XHU2MjliXHU2MmM5XHU2MzBjXHU2MmVlXHU2'@;
put 'MmYxXHU2MzI3XHU2MzAyXHU2MzA4XHU2MmVmXHU2MmY1XHU2MzUwXHU2MzNlXHU2MzRkXHU2NDFjXHU2MzRmXHU2Mzk2XHU2MzhlXHU2MzgwXHU2M2FiXHU2Mzc2XHU2M2EzXHU2MzhmXHU2Mzg5XHU2MzlmXHU2M2I1XHU2MzZiXHVmZmZkXHU2MzY5XHU2M2JlXHU2M2U5XHU2M2MwXHU2M2M2'@;
put 'XHU2M2UzXHU2M2M5XHU2M2QyXHU2M2Y2XHU2M2M0XHU2NDE2XHU2NDM0XHU2NDA2XHU2NDEzXHU2NDI2XHU2NDM2XHU2NTFkXHU2NDE3XHU2NDI4XHU2NDBmXHU2NDY3XHU2NDZmXHU2NDc2XHU2NDRlXHU2NTJhXHU2NDk1XHU2NDkzXHU2NGE1XHU2NGE5XHU2NDg4XHU2NGJjXHU2NGRhXHU2'@;
put 'NGQyXHU2NGM1XHU2NGM3XHU2NGJiXHU2NGQ4XHU2NGMyXHU2NGYxXHU2NGU3XHU4MjA5XHU2NGUwXHU2NGUxXHU2MmFjXHU2NGUzXHU2NGVmXHU2NTJjXHU2NGY2XHU2NGY0XHU2NGYyXHU2NGZhXHU2NTAwXHU2NGZkXHU2NTE4XHU2NTFjXHU2NTA1XHU2NTI0XHU2NTIzXHU2NTJiXHU2NTM0'@;
put 'XHU2NTM1XHU2NTM3XHU2NTM2XHU2NTM4XHU3NTRiXHU2NTQ4XHU2NTU2XHU2NTU1XHU2NTRkXHU2NTU4XHU2NTVlXHU2NTVkXHU2NTcyXHU2NTc4XHU2NTgyXHU2NTgzXHU4YjhhXHU2NTliXHU2NTlmXHU2NWFiXHU2NWI3XHU2NWMzXHU2NWM2XHU2NWMxXHU2NWM0XHU2NWNjXHU2NWQyXHU2'@;
put 'NWRiXHU2NWQ5XHU2NWUwXHU2NWUxXHU2NWYxXHU2NzcyXHU2NjBhXHU2NjAzXHU2NWZiXHU2NzczXHU2NjM1XHU2NjM2XHU2NjM0XHU2NjFjXHU2NjRmXHU2NjQ0XHU2NjQ5XHU2NjQxXHU2NjVlXHU2NjVkXHU2NjY0XHU2NjY3XHU2NjY4XHU2NjVmXHU2NjYyXHU2NjcwXHU2NjgzXHU2Njg4'@;
put 'XHU2NjhlXHU2Njg5XHU2Njg0XHU2Njk4XHU2NjlkXHU2NmMxXHU2NmI5XHU2NmM5XHU2NmJlXHU2NmJjXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTU3XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxNTddW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE1N11bdl1dPTQw'@;
put 'MTkyK3YsVFs0MDE5Mit2XT1rWzE1N11bdl0pO2ZvcihrWzE1OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjZjNFx1NjZiOFx1NjZkNlx1NjZkYVx1NjZlMFx1NjYzZlx1NjZlNlx1NjZlOVx1NjZmMFx1NjZmNVx1NjZmN1x1Njcw'@;
put 'Zlx1NjcxNlx1NjcxZVx1NjcyNlx1NjcyN1x1OTczOFx1NjcyZVx1NjczZlx1NjczNlx1Njc0MVx1NjczOFx1NjczN1x1Njc0Nlx1Njc1ZVx1Njc2MFx1Njc1OVx1Njc2M1x1Njc2NFx1Njc4OVx1Njc3MFx1NjdhOVx1Njc3Y1x1Njc2YVx1Njc4Y1x1Njc4Ylx1NjdhNlx1NjdhMVx1Njc4NVx1'@;
put 'NjdiN1x1NjdlZlx1NjdiNFx1NjdlY1x1NjdiM1x1NjdlOVx1NjdiOFx1NjdlNFx1NjdkZVx1NjdkZFx1NjdlMlx1NjdlZVx1NjdiOVx1NjdjZVx1NjdjNlx1NjdlN1x1NmE5Y1x1NjgxZVx1Njg0Nlx1NjgyOVx1Njg0MFx1Njg0ZFx1NjgzMlx1Njg0ZVx1ZmZmZFx1NjhiM1x1NjgyYlx1Njg1'@;
put 'OVx1Njg2M1x1Njg3N1x1Njg3Zlx1Njg5Zlx1Njg4Zlx1NjhhZFx1Njg5NFx1Njg5ZFx1Njg5Ylx1Njg4M1x1NmFhZVx1NjhiOVx1Njg3NFx1NjhiNVx1NjhhMFx1NjhiYVx1NjkwZlx1Njg4ZFx1Njg3ZVx1NjkwMVx1NjhjYVx1NjkwOFx1NjhkOFx1NjkyMlx1NjkyNlx1NjhlMVx1NjkwY1x1'@;
put 'NjhjZFx1NjhkNFx1NjhlN1x1NjhkNVx1NjkzNlx1NjkxMlx1NjkwNFx1NjhkN1x1NjhlM1x1NjkyNVx1NjhmOVx1NjhlMFx1NjhlZlx1NjkyOFx1NjkyYVx1NjkxYVx1NjkyM1x1NjkyMVx1NjhjNlx1Njk3OVx1Njk3N1x1Njk1Y1x1Njk3OFx1Njk2Ylx1Njk1NFx1Njk3ZVx1Njk2ZVx1Njkz'@;
put 'OVx1Njk3NFx1NjkzZFx1Njk1OVx1NjkzMFx1Njk2MVx1Njk1ZVx1Njk1ZFx1Njk4MVx1Njk2YVx1NjliMlx1NjlhZVx1NjlkMFx1NjliZlx1NjljMVx1NjlkM1x1NjliZVx1NjljZVx1NWJlOFx1NjljYVx1NjlkZFx1NjliYlx1NjljM1x1NjlhN1x1NmEyZVx1Njk5MVx1NjlhMFx1Njk5Y1x1'@;
put 'Njk5NVx1NjliNFx1NjlkZVx1NjllOFx1NmEwMlx1NmExYlx1NjlmZlx1NmIwYVx1NjlmOVx1NjlmMlx1NjllN1x1NmEwNVx1NjliMVx1NmExZVx1NjllZFx1NmExNFx1NjllYlx1NmEwYVx1NmExMlx1NmFjMVx1NmEyM1x1NmExM1x1NmE0NFx1NmEwY1x1NmE3Mlx1NmEzNlx1NmE3OFx1NmE0'@;
put 'N1x1NmE2Mlx1NmE1OVx1NmE2Nlx1NmE0OFx1NmEzOFx1NmEyMlx1NmE5MFx1NmE4ZFx1NmFhMFx1NmE4NFx1NmFhMlx1NmFhM1x1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE1OF0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTU4XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vb'@;
put 'a1sxNThdW3ZdXT00MDQ0OCt2LFRbNDA0NDgrdl09a1sxNThdW3ZdKTtmb3Ioa1sxNTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZhOTdcdTg2MTdcdTZhYmJcdTZhYzNcdTZhYzJcdTZhYjhcdTZhYjNcdTZhYWNcdTZhZGVcdTZh'@;
put 'ZDFcdTZhZGZcdTZhYWFcdTZhZGFcdTZhZWFcdTZhZmJcdTZiMDVcdTg2MTZcdTZhZmFcdTZiMTJcdTZiMTZcdTliMzFcdTZiMWZcdTZiMzhcdTZiMzdcdTc2ZGNcdTZiMzlcdTk4ZWVcdTZiNDdcdTZiNDNcdTZiNDlcdTZiNTBcdTZiNTlcdTZiNTRcdTZiNWJcdTZiNWZcdTZiNjFcdTZiNzhc'@;
put 'dTZiNzlcdTZiN2ZcdTZiODBcdTZiODRcdTZiODNcdTZiOGRcdTZiOThcdTZiOTVcdTZiOWVcdTZiYTRcdTZiYWFcdTZiYWJcdTZiYWZcdTZiYjJcdTZiYjFcdTZiYjNcdTZiYjdcdTZiYmNcdTZiYzZcdTZiY2JcdTZiZDNcdTZiZGZcdTZiZWNcdTZiZWJcdTZiZjNcdTZiZWZcdWZmZmRcdTll'@;
put 'YmVcdTZjMDhcdTZjMTNcdTZjMTRcdTZjMWJcdTZjMjRcdTZjMjNcdTZjNWVcdTZjNTVcdTZjNjJcdTZjNmFcdTZjODJcdTZjOGRcdTZjOWFcdTZjODFcdTZjOWJcdTZjN2VcdTZjNjhcdTZjNzNcdTZjOTJcdTZjOTBcdTZjYzRcdTZjZjFcdTZjZDNcdTZjYmRcdTZjZDdcdTZjYzVcdTZjZGRc'@;
put 'dTZjYWVcdTZjYjFcdTZjYmVcdTZjYmFcdTZjZGJcdTZjZWZcdTZjZDlcdTZjZWFcdTZkMWZcdTg4NGRcdTZkMzZcdTZkMmJcdTZkM2RcdTZkMzhcdTZkMTlcdTZkMzVcdTZkMzNcdTZkMTJcdTZkMGNcdTZkNjNcdTZkOTNcdTZkNjRcdTZkNWFcdTZkNzlcdTZkNTlcdTZkOGVcdTZkOTVcdTZm'@;
put 'ZTRcdTZkODVcdTZkZjlcdTZlMTVcdTZlMGFcdTZkYjVcdTZkYzdcdTZkZTZcdTZkYjhcdTZkYzZcdTZkZWNcdTZkZGVcdTZkY2NcdTZkZThcdTZkZDJcdTZkYzVcdTZkZmFcdTZkZDlcdTZkZTRcdTZkZDVcdTZkZWFcdTZkZWVcdTZlMmRcdTZlNmVcdTZlMmVcdTZlMTlcdTZlNzJcdTZlNWZc'@;
put 'dTZlM2VcdTZlMjNcdTZlNmJcdTZlMmJcdTZlNzZcdTZlNGRcdTZlMWZcdTZlNDNcdTZlM2FcdTZlNGVcdTZlMjRcdTZlZmZcdTZlMWRcdTZlMzhcdTZlODJcdTZlYWFcdTZlOThcdTZlYzlcdTZlYjdcdTZlZDNcdTZlYmRcdTZlYWZcdTZlYzRcdTZlYjJcdTZlZDRcdTZlZDVcdTZlOGZcdTZl'@;
put 'YTVcdTZlYzJcdTZlOWZcdTZmNDFcdTZmMTFcdTcwNGNcdTZlZWNcdTZlZjhcdTZlZmVcdTZmM2ZcdTZlZjJcdTZmMzFcdTZlZWZcdTZmMzJcdTZlY2NcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxNTldLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE1OV1bdl0uY2hhckNv'@;
put 'ZGVBdCgwKSYmKHNlW2tbMTU5XVt2XV09NDA3MDQrdixUWzQwNzA0K3ZdPWtbMTU5XVt2XSk7Zm9yKGtbMjI0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZjNlXHU2ZjEzXHU2ZWY3XHU2Zjg2XHU2ZjdhXHU2Zjc4XHU2ZjgxXHU2'@;
put 'ZjgwXHU2ZjZmXHU2ZjViXHU2ZmYzXHU2ZjZkXHU2ZjgyXHU2ZjdjXHU2ZjU4XHU2ZjhlXHU2ZjkxXHU2ZmMyXHU2ZjY2XHU2ZmIzXHU2ZmEzXHU2ZmExXHU2ZmE0XHU2ZmI5XHU2ZmM2XHU2ZmFhXHU2ZmRmXHU2ZmQ1XHU2ZmVjXHU2ZmQ0XHU2ZmQ4XHU2ZmYxXHU2ZmVlXHU2ZmRiXHU3MDA5'@;
put 'XHU3MDBiXHU2ZmZhXHU3MDExXHU3MDAxXHU3MDBmXHU2ZmZlXHU3MDFiXHU3MDFhXHU2Zjc0XHU3MDFkXHU3MDE4XHU3MDFmXHU3MDMwXHU3MDNlXHU3MDMyXHU3MDUxXHU3MDYzXHU3MDk5XHU3MDkyXHU3MGFmXHU3MGYxXHU3MGFjXHU3MGI4XHU3MGIzXHU3MGFlXHU3MGRmXHU3MGNiXHU3'@;
put 'MGRkXHVmZmZkXHU3MGQ5XHU3MTA5XHU3MGZkXHU3MTFjXHU3MTE5XHU3MTY1XHU3MTU1XHU3MTg4XHU3MTY2XHU3MTYyXHU3MTRjXHU3MTU2XHU3MTZjXHU3MThmXHU3MWZiXHU3MTg0XHU3MTk1XHU3MWE4XHU3MWFjXHU3MWQ3XHU3MWI5XHU3MWJlXHU3MWQyXHU3MWM5XHU3MWQ0XHU3MWNl'@;
put 'XHU3MWUwXHU3MWVjXHU3MWU3XHU3MWY1XHU3MWZjXHU3MWY5XHU3MWZmXHU3MjBkXHU3MjEwXHU3MjFiXHU3MjI4XHU3MjJkXHU3MjJjXHU3MjMwXHU3MjMyXHU3MjNiXHU3MjNjXHU3MjNmXHU3MjQwXHU3MjQ2XHU3MjRiXHU3MjU4XHU3Mjc0XHU3MjdlXHU3MjgyXHU3MjgxXHU3Mjg3XHU3'@;
put 'MjkyXHU3Mjk2XHU3MmEyXHU3MmE3XHU3MmI5XHU3MmIyXHU3MmMzXHU3MmM2XHU3MmM0XHU3MmNlXHU3MmQyXHU3MmUyXHU3MmUwXHU3MmUxXHU3MmY5XHU3MmY3XHU1MDBmXHU3MzE3XHU3MzBhXHU3MzFjXHU3MzE2XHU3MzFkXHU3MzM0XHU3MzJmXHU3MzI5XHU3MzI1XHU3MzNlXHU3MzRl'@;
put 'XHU3MzRmXHU5ZWQ4XHU3MzU3XHU3MzZhXHU3MzY4XHU3MzcwXHU3Mzc4XHU3Mzc1XHU3MzdiXHU3MzdhXHU3M2M4XHU3M2IzXHU3M2NlXHU3M2JiXHU3M2MwXHU3M2U1XHU3M2VlXHU3M2RlXHU3NGEyXHU3NDA1XHU3NDZmXHU3NDI1XHU3M2Y4XHU3NDMyXHU3NDNhXHU3NDU1XHU3NDNmXHU3'@;
put 'NDVmXHU3NDU5XHU3NDQxXHU3NDVjXHU3NDY5XHU3NDcwXHU3NDYzXHU3NDZhXHU3NDc2XHU3NDdlXHU3NDhiXHU3NDllXHU3NGE3XHU3NGNhXHU3NGNmXHU3NGQ0XHU3M2YxXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjI0XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sy'@;
put 'MjRdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIyNF1bdl1dPTU3MzQ0K3YsVFs1NzM0NCt2XT1rWzIyNF1bdl0pO2ZvcihrWzIyNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzRlMFx1NzRlM1x1NzRlN1x1NzRlOVx1NzRlZVx1'@;
put 'NzRmMlx1NzRmMFx1NzRmMVx1NzRmOFx1NzRmN1x1NzUwNFx1NzUwM1x1NzUwNVx1NzUwY1x1NzUwZVx1NzUwZFx1NzUxNVx1NzUxM1x1NzUxZVx1NzUyNlx1NzUyY1x1NzUzY1x1NzU0NFx1NzU0ZFx1NzU0YVx1NzU0OVx1NzU1Ylx1NzU0Nlx1NzU1YVx1NzU2OVx1NzU2NFx1NzU2N1x1NzU2'@;
put 'Ylx1NzU2ZFx1NzU3OFx1NzU3Nlx1NzU4Nlx1NzU4N1x1NzU3NFx1NzU4YVx1NzU4OVx1NzU4Mlx1NzU5NFx1NzU5YVx1NzU5ZFx1NzVhNVx1NzVhM1x1NzVjMlx1NzViM1x1NzVjM1x1NzViNVx1NzViZFx1NzViOFx1NzViY1x1NzViMVx1NzVjZFx1NzVjYVx1NzVkMlx1NzVkOVx1NzVlM1x1'@;
put 'NzVkZVx1NzVmZVx1NzVmZlx1ZmZmZFx1NzVmY1x1NzYwMVx1NzVmMFx1NzVmYVx1NzVmMlx1NzVmM1x1NzYwYlx1NzYwZFx1NzYwOVx1NzYxZlx1NzYyN1x1NzYyMFx1NzYyMVx1NzYyMlx1NzYyNFx1NzYzNFx1NzYzMFx1NzYzYlx1NzY0N1x1NzY0OFx1NzY0Nlx1NzY1Y1x1NzY1OFx1NzY2'@;
put 'MVx1NzY2Mlx1NzY2OFx1NzY2OVx1NzY2YVx1NzY2N1x1NzY2Y1x1NzY3MFx1NzY3Mlx1NzY3Nlx1NzY3OFx1NzY3Y1x1NzY4MFx1NzY4M1x1NzY4OFx1NzY4Ylx1NzY4ZVx1NzY5Nlx1NzY5M1x1NzY5OVx1NzY5YVx1NzZiMFx1NzZiNFx1NzZiOFx1NzZiOVx1NzZiYVx1NzZjMlx1NzZjZFx1'@;
put 'NzZkNlx1NzZkMlx1NzZkZVx1NzZlMVx1NzZlNVx1NzZlN1x1NzZlYVx1ODYyZlx1NzZmYlx1NzcwOFx1NzcwN1x1NzcwNFx1NzcyOVx1NzcyNFx1NzcxZVx1NzcyNVx1NzcyNlx1NzcxYlx1NzczN1x1NzczOFx1Nzc0N1x1Nzc1YVx1Nzc2OFx1Nzc2Ylx1Nzc1Ylx1Nzc2NVx1Nzc3Zlx1Nzc3'@;
put 'ZVx1Nzc3OVx1Nzc4ZVx1Nzc4Ylx1Nzc5MVx1NzdhMFx1Nzc5ZVx1NzdiMFx1NzdiNlx1NzdiOVx1NzdiZlx1NzdiY1x1NzdiZFx1NzdiYlx1NzdjN1x1NzdjZFx1NzdkN1x1NzdkYVx1NzdkY1x1NzdlM1x1NzdlZVx1NzdmY1x1NzgwY1x1NzgxMlx1NzkyNlx1NzgyMFx1NzkyYVx1Nzg0NVx1'@;
put 'Nzg4ZVx1Nzg3NFx1Nzg4Nlx1Nzg3Y1x1Nzg5YVx1Nzg4Y1x1NzhhM1x1NzhiNVx1NzhhYVx1NzhhZlx1NzhkMVx1NzhjNlx1NzhjYlx1NzhkNFx1NzhiZVx1NzhiY1x1NzhjNVx1NzhjYVx1NzhlY1x1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIyNV0ubGVuZ3RoOysr'@;
put 'dik2NTUzMyE9PWtbMjI1XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMjVdW3ZdXT01NzYwMCt2LFRbNTc2MDArdl09a1syMjVdW3ZdKTtmb3Ioa1syMjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc4ZTdcdTc4ZGFcdTc4ZmRc'@;
put 'dTc4ZjRcdTc5MDdcdTc5MTJcdTc5MTFcdTc5MTlcdTc5MmNcdTc5MmJcdTc5NDBcdTc5NjBcdTc5NTdcdTc5NWZcdTc5NWFcdTc5NTVcdTc5NTNcdTc5N2FcdTc5N2ZcdTc5OGFcdTc5OWRcdTc5YTdcdTlmNGJcdTc5YWFcdTc5YWVcdTc5YjNcdTc5YjlcdTc5YmFcdTc5YzlcdTc5ZDVcdTc5'@;
put 'ZTdcdTc5ZWNcdTc5ZTFcdTc5ZTNcdTdhMDhcdTdhMGRcdTdhMThcdTdhMTlcdTdhMjBcdTdhMWZcdTc5ODBcdTdhMzFcdTdhM2JcdTdhM2VcdTdhMzdcdTdhNDNcdTdhNTdcdTdhNDlcdTdhNjFcdTdhNjJcdTdhNjlcdTlmOWRcdTdhNzBcdTdhNzlcdTdhN2RcdTdhODhcdTdhOTdcdTdhOTVc'@;
put 'dTdhOThcdTdhOTZcdTdhYTlcdTdhYzhcdTdhYjBcdWZmZmRcdTdhYjZcdTdhYzVcdTdhYzRcdTdhYmZcdTkwODNcdTdhYzdcdTdhY2FcdTdhY2RcdTdhY2ZcdTdhZDVcdTdhZDNcdTdhZDlcdTdhZGFcdTdhZGRcdTdhZTFcdTdhZTJcdTdhZTZcdTdhZWRcdTdhZjBcdTdiMDJcdTdiMGZcdTdi'@;
put 'MGFcdTdiMDZcdTdiMzNcdTdiMThcdTdiMTlcdTdiMWVcdTdiMzVcdTdiMjhcdTdiMzZcdTdiNTBcdTdiN2FcdTdiMDRcdTdiNGRcdTdiMGJcdTdiNGNcdTdiNDVcdTdiNzVcdTdiNjVcdTdiNzRcdTdiNjdcdTdiNzBcdTdiNzFcdTdiNmNcdTdiNmVcdTdiOWRcdTdiOThcdTdiOWZcdTdiOGRc'@;
put 'dTdiOWNcdTdiOWFcdTdiOGJcdTdiOTJcdTdiOGZcdTdiNWRcdTdiOTlcdTdiY2JcdTdiYzFcdTdiY2NcdTdiY2ZcdTdiYjRcdTdiYzZcdTdiZGRcdTdiZTlcdTdjMTFcdTdjMTRcdTdiZTZcdTdiZTVcdTdjNjBcdTdjMDBcdTdjMDdcdTdjMTNcdTdiZjNcdTdiZjdcdTdjMTdcdTdjMGRcdTdi'@;
put 'ZjZcdTdjMjNcdTdjMjdcdTdjMmFcdTdjMWZcdTdjMzdcdTdjMmJcdTdjM2RcdTdjNGNcdTdjNDNcdTdjNTRcdTdjNGZcdTdjNDBcdTdjNTBcdTdjNThcdTdjNWZcdTdjNjRcdTdjNTZcdTdjNjVcdTdjNmNcdTdjNzVcdTdjODNcdTdjOTBcdTdjYTRcdTdjYWRcdTdjYTJcdTdjYWJcdTdjYTFc'@;
put 'dTdjYThcdTdjYjNcdTdjYjJcdTdjYjFcdTdjYWVcdTdjYjlcdTdjYmRcdTdjYzBcdTdjYzVcdTdjYzJcdTdjZDhcdTdjZDJcdTdjZGNcdTdjZTJcdTliM2JcdTdjZWZcdTdjZjJcdTdjZjRcdTdjZjZcdTdjZmFcdTdkMDZcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sy'@;
put 'MjZdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIyNl1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjI2XVt2XV09NTc4NTYrdixUWzU3ODU2K3ZdPWtbMjI2XVt2XSk7Zm9yKGtbMjI3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZDAy'@;
put 'XHU3ZDFjXHU3ZDE1XHU3ZDBhXHU3ZDQ1XHU3ZDRiXHU3ZDJlXHU3ZDMyXHU3ZDNmXHU3ZDM1XHU3ZDQ2XHU3ZDczXHU3ZDU2XHU3ZDRlXHU3ZDcyXHU3ZDY4XHU3ZDZlXHU3ZDRmXHU3ZDYzXHU3ZDkzXHU3ZDg5XHU3ZDViXHU3ZDhmXHU3ZDdkXHU3ZDliXHU3ZGJhXHU3ZGFlXHU3ZGEzXHU3'@;
put 'ZGI1XHU3ZGM3XHU3ZGJkXHU3ZGFiXHU3ZTNkXHU3ZGEyXHU3ZGFmXHU3ZGRjXHU3ZGI4XHU3ZDlmXHU3ZGIwXHU3ZGQ4XHU3ZGRkXHU3ZGU0XHU3ZGRlXHU3ZGZiXHU3ZGYyXHU3ZGUxXHU3ZTA1XHU3ZTBhXHU3ZTIzXHU3ZTIxXHU3ZTEyXHU3ZTMxXHU3ZTFmXHU3ZTA5XHU3ZTBiXHU3ZTIy'@;
put 'XHU3ZTQ2XHU3ZTY2XHU3ZTNiXHU3ZTM1XHU3ZTM5XHU3ZTQzXHU3ZTM3XHVmZmZkXHU3ZTMyXHU3ZTNhXHU3ZTY3XHU3ZTVkXHU3ZTU2XHU3ZTVlXHU3ZTU5XHU3ZTVhXHU3ZTc5XHU3ZTZhXHU3ZTY5XHU3ZTdjXHU3ZTdiXHU3ZTgzXHU3ZGQ1XHU3ZTdkXHU4ZmFlXHU3ZTdmXHU3ZTg4XHU3'@;
put 'ZTg5XHU3ZThjXHU3ZTkyXHU3ZTkwXHU3ZTkzXHU3ZTk0XHU3ZTk2XHU3ZThlXHU3ZTliXHU3ZTljXHU3ZjM4XHU3ZjNhXHU3ZjQ1XHU3ZjRjXHU3ZjRkXHU3ZjRlXHU3ZjUwXHU3ZjUxXHU3ZjU1XHU3ZjU0XHU3ZjU4XHU3ZjVmXHU3ZjYwXHU3ZjY4XHU3ZjY5XHU3ZjY3XHU3Zjc4XHU3Zjgy'@;
put 'XHU3Zjg2XHU3ZjgzXHU3Zjg4XHU3Zjg3XHU3ZjhjXHU3Zjk0XHU3ZjllXHU3ZjlkXHU3ZjlhXHU3ZmEzXHU3ZmFmXHU3ZmIyXHU3ZmI5XHU3ZmFlXHU3ZmI2XHU3ZmI4XHU4YjcxXHU3ZmM1XHU3ZmM2XHU3ZmNhXHU3ZmQ1XHU3ZmQ0XHU3ZmUxXHU3ZmU2XHU3ZmU5XHU3ZmYzXHU3ZmY5XHU5'@;
put 'OGRjXHU4MDA2XHU4MDA0XHU4MDBiXHU4MDEyXHU4MDE4XHU4MDE5XHU4MDFjXHU4MDIxXHU4MDI4XHU4MDNmXHU4MDNiXHU4MDRhXHU4MDQ2XHU4MDUyXHU4MDU4XHU4MDVhXHU4MDVmXHU4MDYyXHU4MDY4XHU4MDczXHU4MDcyXHU4MDcwXHU4MDc2XHU4MDc5XHU4MDdkXHU4MDdmXHU4MDg0'@;
put 'XHU4MDg2XHU4MDg1XHU4MDliXHU4MDkzXHU4MDlhXHU4MGFkXHU1MTkwXHU4MGFjXHU4MGRiXHU4MGU1XHU4MGQ5XHU4MGRkXHU4MGM0XHU4MGRhXHU4MGQ2XHU4MTA5XHU4MGVmXHU4MGYxXHU4MTFiXHU4MTI5XHU4MTIzXHU4MTJmXHU4MTRiXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgi'@;
put 'Iiksdj0wO3YhPWtbMjI3XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMjddW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIyN11bdl1dPTU4MTEyK3YsVFs1ODExMit2XT1rWzIyN11bdl0pO2ZvcihrWzIyOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1OTY4Ylx1ODE0Nlx1ODEzZVx1ODE1M1x1ODE1MVx1ODBmY1x1ODE3MVx1ODE2ZVx1ODE2NVx1ODE2Nlx1ODE3NFx1ODE4M1x1ODE4OFx1ODE4YVx1ODE4MFx1ODE4Mlx1ODFhMFx1ODE5NVx1ODFhNFx1ODFhM1x1ODE1Zlx1ODE5M1x1ODFhOVx1ODFiMFx1ODFiNVx1ODFiZVx1'@;
put 'ODFiOFx1ODFiZFx1ODFjMFx1ODFjMlx1ODFiYVx1ODFjOVx1ODFjZFx1ODFkMVx1ODFkOVx1ODFkOFx1ODFjOFx1ODFkYVx1ODFkZlx1ODFlMFx1ODFlN1x1ODFmYVx1ODFmYlx1ODFmZVx1ODIwMVx1ODIwMlx1ODIwNVx1ODIwN1x1ODIwYVx1ODIwZFx1ODIxMFx1ODIxNlx1ODIyOVx1ODIy'@;
put 'Ylx1ODIzOFx1ODIzM1x1ODI0MFx1ODI1OVx1ODI1OFx1ODI1ZFx1ODI1YVx1ODI1Zlx1ODI2NFx1ZmZmZFx1ODI2Mlx1ODI2OFx1ODI2YVx1ODI2Ylx1ODIyZVx1ODI3MVx1ODI3N1x1ODI3OFx1ODI3ZVx1ODI4ZFx1ODI5Mlx1ODJhYlx1ODI5Zlx1ODJiYlx1ODJhY1x1ODJlMVx1ODJlM1x1'@;
put 'ODJkZlx1ODJkMlx1ODJmNFx1ODJmM1x1ODJmYVx1ODM5M1x1ODMwM1x1ODJmYlx1ODJmOVx1ODJkZVx1ODMwNlx1ODJkY1x1ODMwOVx1ODJkOVx1ODMzNVx1ODMzNFx1ODMxNlx1ODMzMlx1ODMzMVx1ODM0MFx1ODMzOVx1ODM1MFx1ODM0NVx1ODMyZlx1ODMyYlx1ODMxN1x1ODMxOFx1ODM4'@;
put 'NVx1ODM5YVx1ODNhYVx1ODM5Zlx1ODNhMlx1ODM5Nlx1ODMyM1x1ODM4ZVx1ODM4N1x1ODM4YVx1ODM3Y1x1ODNiNVx1ODM3M1x1ODM3NVx1ODNhMFx1ODM4OVx1ODNhOFx1ODNmNFx1ODQxM1x1ODNlYlx1ODNjZVx1ODNmZFx1ODQwM1x1ODNkOFx1ODQwYlx1ODNjMVx1ODNmN1x1ODQwN1x1'@;
put 'ODNlMFx1ODNmMlx1ODQwZFx1ODQyMlx1ODQyMFx1ODNiZFx1ODQzOFx1ODUwNlx1ODNmYlx1ODQ2ZFx1ODQyYVx1ODQzY1x1ODU1YVx1ODQ4NFx1ODQ3N1x1ODQ2Ylx1ODRhZFx1ODQ2ZVx1ODQ4Mlx1ODQ2OVx1ODQ0Nlx1ODQyY1x1ODQ2Zlx1ODQ3OVx1ODQzNVx1ODRjYVx1ODQ2Mlx1ODRi'@;
put 'OVx1ODRiZlx1ODQ5Zlx1ODRkOVx1ODRjZFx1ODRiYlx1ODRkYVx1ODRkMFx1ODRjMVx1ODRjNlx1ODRkNlx1ODRhMVx1ODUyMVx1ODRmZlx1ODRmNFx1ODUxN1x1ODUxOFx1ODUyY1x1ODUxZlx1ODUxNVx1ODUxNFx1ODRmY1x1ODU0MFx1ODU2M1x1ODU1OFx1ODU0OFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIyOF0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjI4XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMjhdW3ZdXT01ODM2OCt2LFRbNTgzNjgrdl09a1syMjhdW3ZdKTtmb3Ioa1syMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1NDFcdTg2MDJcdTg1NGJcdTg1NTVcdTg1ODBcdTg1YTRcdTg1ODhcdTg1OTFcdTg1OGFcdTg1YThcdTg1NmRcdTg1OTRcdTg1OWJcdTg1ZWFcdTg1ODdcdTg1OWNcdTg1NzdcdTg1N2VcdTg1OTBcdTg1YzlcdTg1YmFcdTg1Y2ZcdTg1YjlcdTg1ZDBc'@;
put 'dTg1ZDVcdTg1ZGRcdTg1ZTVcdTg1ZGNcdTg1ZjlcdTg2MGFcdTg2MTNcdTg2MGJcdTg1ZmVcdTg1ZmFcdTg2MDZcdTg2MjJcdTg2MWFcdTg2MzBcdTg2M2ZcdTg2NGRcdTRlNTVcdTg2NTRcdTg2NWZcdTg2NjdcdTg2NzFcdTg2OTNcdTg2YTNcdTg2YTlcdTg2YWFcdTg2OGJcdTg2OGNcdTg2'@;
put 'YjZcdTg2YWZcdTg2YzRcdTg2YzZcdTg2YjBcdTg2YzlcdTg4MjNcdTg2YWJcdTg2ZDRcdTg2ZGVcdTg2ZTlcdTg2ZWNcdWZmZmRcdTg2ZGZcdTg2ZGJcdTg2ZWZcdTg3MTJcdTg3MDZcdTg3MDhcdTg3MDBcdTg3MDNcdTg2ZmJcdTg3MTFcdTg3MDlcdTg3MGRcdTg2ZjlcdTg3MGFcdTg3MzRc'@;
put 'dTg3M2ZcdTg3MzdcdTg3M2JcdTg3MjVcdTg3MjlcdTg3MWFcdTg3NjBcdTg3NWZcdTg3NzhcdTg3NGNcdTg3NGVcdTg3NzRcdTg3NTdcdTg3NjhcdTg3NmVcdTg3NTlcdTg3NTNcdTg3NjNcdTg3NmFcdTg4MDVcdTg3YTJcdTg3OWZcdTg3ODJcdTg3YWZcdTg3Y2JcdTg3YmRcdTg3YzBcdTg3'@;
put 'ZDBcdTk2ZDZcdTg3YWJcdTg3YzRcdTg3YjNcdTg3YzdcdTg3YzZcdTg3YmJcdTg3ZWZcdTg3ZjJcdTg3ZTBcdTg4MGZcdTg4MGRcdTg3ZmVcdTg3ZjZcdTg3ZjdcdTg4MGVcdTg3ZDJcdTg4MTFcdTg4MTZcdTg4MTVcdTg4MjJcdTg4MjFcdTg4MzFcdTg4MzZcdTg4MzlcdTg4MjdcdTg4M2Jc'@;
put 'dTg4NDRcdTg4NDJcdTg4NTJcdTg4NTlcdTg4NWVcdTg4NjJcdTg4NmJcdTg4ODFcdTg4N2VcdTg4OWVcdTg4NzVcdTg4N2RcdTg4YjVcdTg4NzJcdTg4ODJcdTg4OTdcdTg4OTJcdTg4YWVcdTg4OTlcdTg4YTJcdTg4OGRcdTg4YTRcdTg4YjBcdTg4YmZcdTg4YjFcdTg4YzNcdTg4YzRcdTg4'@;
put 'ZDRcdTg4ZDhcdTg4ZDlcdTg4ZGRcdTg4ZjlcdTg5MDJcdTg4ZmNcdTg4ZjRcdTg4ZThcdTg4ZjJcdTg5MDRcdTg5MGNcdTg5MGFcdTg5MTNcdTg5NDNcdTg5MWVcdTg5MjVcdTg5MmFcdTg5MmJcdTg5NDFcdTg5NDRcdTg5M2JcdTg5MzZcdTg5MzhcdTg5NGNcdTg5MWRcdTg5NjBcdTg5NWVc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMjldLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIyOV1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjI5XVt2XV09NTg2MjQrdixUWzU4NjI0K3ZdPWtbMjI5XVt2XSk7Zm9yKGtbMjMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OTY2XHU4OTY0XHU4OTZkXHU4OTZhXHU4OTZmXHU4OTc0XHU4OTc3XHU4OTdlXHU4OTgzXHU4OTg4XHU4OThhXHU4OTkzXHU4OTk4XHU4OWExXHU4OWE5XHU4OWE2XHU4OWFjXHU4OWFmXHU4OWIyXHU4OWJhXHU4OWJkXHU4OWJm'@;
put 'XHU4OWMwXHU4OWRhXHU4OWRjXHU4OWRkXHU4OWU3XHU4OWY0XHU4OWY4XHU4YTAzXHU4YTE2XHU4YTEwXHU4YTBjXHU4YTFiXHU4YTFkXHU4YTI1XHU4YTM2XHU4YTQxXHU4YTViXHU4YTUyXHU4YTQ2XHU4YTQ4XHU4YTdjXHU4YTZkXHU4YTZjXHU4YTYyXHU4YTg1XHU4YTgyXHU4YTg0XHU4'@;
put 'YWE4XHU4YWExXHU4YTkxXHU4YWE1XHU4YWE2XHU4YTlhXHU4YWEzXHU4YWM0XHU4YWNkXHU4YWMyXHU4YWRhXHU4YWViXHU4YWYzXHU4YWU3XHVmZmZkXHU4YWU0XHU4YWYxXHU4YjE0XHU4YWUwXHU4YWUyXHU4YWY3XHU4YWRlXHU4YWRiXHU4YjBjXHU4YjA3XHU4YjFhXHU4YWUxXHU4YjE2'@;
put 'XHU4YjEwXHU4YjE3XHU4YjIwXHU4YjMzXHU5N2FiXHU4YjI2XHU4YjJiXHU4YjNlXHU4YjI4XHU4YjQxXHU4YjRjXHU4YjRmXHU4YjRlXHU4YjQ5XHU4YjU2XHU4YjViXHU4YjVhXHU4YjZiXHU4YjVmXHU4YjZjXHU4YjZmXHU4Yjc0XHU4YjdkXHU4YjgwXHU4YjhjXHU4YjhlXHU4YjkyXHU4'@;
put 'YjkzXHU4Yjk2XHU4Yjk5XHU4YjlhXHU4YzNhXHU4YzQxXHU4YzNmXHU4YzQ4XHU4YzRjXHU4YzRlXHU4YzUwXHU4YzU1XHU4YzYyXHU4YzZjXHU4Yzc4XHU4YzdhXHU4YzgyXHU4Yzg5XHU4Yzg1XHU4YzhhXHU4YzhkXHU4YzhlXHU4Yzk0XHU4YzdjXHU4Yzk4XHU2MjFkXHU4Y2FkXHU4Y2Fh'@;
put 'XHU4Y2JkXHU4Y2IyXHU4Y2IzXHU4Y2FlXHU4Y2I2XHU4Y2M4XHU4Y2MxXHU4Y2U0XHU4Y2UzXHU4Y2RhXHU4Y2ZkXHU4Y2ZhXHU4Y2ZiXHU4ZDA0XHU4ZDA1XHU4ZDBhXHU4ZDA3XHU4ZDBmXHU4ZDBkXHU4ZDEwXHU5ZjRlXHU4ZDEzXHU4Y2NkXHU4ZDE0XHU4ZDE2XHU4ZDY3XHU4ZDZkXHU4'@;
put 'ZDcxXHU4ZDczXHU4ZDgxXHU4ZDk5XHU4ZGMyXHU4ZGJlXHU4ZGJhXHU4ZGNmXHU4ZGRhXHU4ZGQ2XHU4ZGNjXHU4ZGRiXHU4ZGNiXHU4ZGVhXHU4ZGViXHU4ZGRmXHU4ZGUzXHU4ZGZjXHU4ZTA4XHU4ZTA5XHU4ZGZmXHU4ZTFkXHU4ZTFlXHU4ZTEwXHU4ZTFmXHU4ZTQyXHU4ZTM1XHU4ZTMw'@;
put 'XHU4ZTM0XHU4ZTRhXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjMwXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMzBdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIzMF1bdl1dPTU4ODgwK3YsVFs1ODg4MCt2XT1rWzIzMF1bdl0pO2ZvcihrWzIzMV09Ilx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGU0N1x1OGU0OVx1OGU0Y1x1OGU1MFx1OGU0OFx1OGU1OVx1OGU2NFx1OGU2MFx1OGUyYVx1OGU2M1x1OGU1NVx1OGU3Nlx1OGU3Mlx1OGU3Y1x1OGU4MVx1OGU4N1x1OGU4NVx1OGU4NFx1OGU4Ylx1OGU4'@;
put 'YVx1OGU5M1x1OGU5MVx1OGU5NFx1OGU5OVx1OGVhYVx1OGVhMVx1OGVhY1x1OGViMFx1OGVjNlx1OGViMVx1OGViZVx1OGVjNVx1OGVjOFx1OGVjYlx1OGVkYlx1OGVlM1x1OGVmY1x1OGVmYlx1OGVlYlx1OGVmZVx1OGYwYVx1OGYwNVx1OGYxNVx1OGYxMlx1OGYxOVx1OGYxM1x1OGYxY1x1'@;
put 'OGYxZlx1OGYxYlx1OGYwY1x1OGYyNlx1OGYzM1x1OGYzYlx1OGYzOVx1OGY0NVx1OGY0Mlx1OGYzZVx1OGY0Y1x1OGY0OVx1OGY0Nlx1OGY0ZVx1OGY1N1x1OGY1Y1x1ZmZmZFx1OGY2Mlx1OGY2M1x1OGY2NFx1OGY5Y1x1OGY5Zlx1OGZhM1x1OGZhZFx1OGZhZlx1OGZiN1x1OGZkYVx1OGZl'@;
put 'NVx1OGZlMlx1OGZlYVx1OGZlZlx1OTA4N1x1OGZmNFx1OTAwNVx1OGZmOVx1OGZmYVx1OTAxMVx1OTAxNVx1OTAyMVx1OTAwZFx1OTAxZVx1OTAxNlx1OTAwYlx1OTAyN1x1OTAzNlx1OTAzNVx1OTAzOVx1OGZmOFx1OTA0Zlx1OTA1MFx1OTA1MVx1OTA1Mlx1OTAwZVx1OTA0OVx1OTAzZVx1'@;
put 'OTA1Nlx1OTA1OFx1OTA1ZVx1OTA2OFx1OTA2Zlx1OTA3Nlx1OTZhOFx1OTA3Mlx1OTA4Mlx1OTA3ZFx1OTA4MVx1OTA4MFx1OTA4YVx1OTA4OVx1OTA4Zlx1OTBhOFx1OTBhZlx1OTBiMVx1OTBiNVx1OTBlMlx1OTBlNFx1NjI0OFx1OTBkYlx1OTEwMlx1OTExMlx1OTExOVx1OTEzMlx1OTEz'@;
put 'MFx1OTE0YVx1OTE1Nlx1OTE1OFx1OTE2M1x1OTE2NVx1OTE2OVx1OTE3M1x1OTE3Mlx1OTE4Ylx1OTE4OVx1OTE4Mlx1OTFhMlx1OTFhYlx1OTFhZlx1OTFhYVx1OTFiNVx1OTFiNFx1OTFiYVx1OTFjMFx1OTFjMVx1OTFjOVx1OTFjYlx1OTFkMFx1OTFkNlx1OTFkZlx1OTFlMVx1OTFkYlx1'@;
put 'OTFmY1x1OTFmNVx1OTFmNlx1OTIxZVx1OTFmZlx1OTIxNFx1OTIyY1x1OTIxNVx1OTIxMVx1OTI1ZVx1OTI1N1x1OTI0NVx1OTI0OVx1OTI2NFx1OTI0OFx1OTI5NVx1OTIzZlx1OTI0Ylx1OTI1MFx1OTI5Y1x1OTI5Nlx1OTI5M1x1OTI5Ylx1OTI1YVx1OTJjZlx1OTJiOVx1OTJiN1x1OTJl'@;
put 'OVx1OTMwZlx1OTJmYVx1OTM0NFx1OTMyZVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIzMV0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjMxXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMzFdW3ZdXT01OTEzNit2LFRbNTkxMzYrdl09a1syMzFdW3ZdKTtmb3Ioa1sy'@;
put 'MzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzMTlcdTkzMjJcdTkzMWFcdTkzMjNcdTkzM2FcdTkzMzVcdTkzM2JcdTkzNWNcdTkzNjBcdTkzN2NcdTkzNmVcdTkzNTZcdTkzYjBcdTkzYWNcdTkzYWRcdTkzOTRcdTkzYjlcdTkz'@;
put 'ZDZcdTkzZDdcdTkzZThcdTkzZTVcdTkzZDhcdTkzYzNcdTkzZGRcdTkzZDBcdTkzYzhcdTkzZTRcdTk0MWFcdTk0MTRcdTk0MTNcdTk0MDNcdTk0MDdcdTk0MTBcdTk0MzZcdTk0MmJcdTk0MzVcdTk0MjFcdTk0M2FcdTk0NDFcdTk0NTJcdTk0NDRcdTk0NWJcdTk0NjBcdTk0NjJcdTk0NWVc'@;
put 'dTk0NmFcdTkyMjlcdTk0NzBcdTk0NzVcdTk0NzdcdTk0N2RcdTk0NWFcdTk0N2NcdTk0N2VcdTk0ODFcdTk0N2ZcdTk1ODJcdTk1ODdcdTk1OGFcdTk1OTRcdTk1OTZcdTk1OThcdTk1OTlcdWZmZmRcdTk1YTBcdTk1YThcdTk1YTdcdTk1YWRcdTk1YmNcdTk1YmJcdTk1YjlcdTk1YmVcdTk1'@;
put 'Y2FcdTZmZjZcdTk1YzNcdTk1Y2RcdTk1Y2NcdTk1ZDVcdTk1ZDRcdTk1ZDZcdTk1ZGNcdTk1ZTFcdTk1ZTVcdTk1ZTJcdTk2MjFcdTk2MjhcdTk2MmVcdTk2MmZcdTk2NDJcdTk2NGNcdTk2NGZcdTk2NGJcdTk2NzdcdTk2NWNcdTk2NWVcdTk2NWRcdTk2NWZcdTk2NjZcdTk2NzJcdTk2NmNc'@;
put 'dTk2OGRcdTk2OThcdTk2OTVcdTk2OTdcdTk2YWFcdTk2YTdcdTk2YjFcdTk2YjJcdTk2YjBcdTk2YjRcdTk2YjZcdTk2YjhcdTk2YjlcdTk2Y2VcdTk2Y2JcdTk2YzlcdTk2Y2RcdTg5NGRcdTk2ZGNcdTk3MGRcdTk2ZDVcdTk2ZjlcdTk3MDRcdTk3MDZcdTk3MDhcdTk3MTNcdTk3MGVcdTk3'@;
put 'MTFcdTk3MGZcdTk3MTZcdTk3MTlcdTk3MjRcdTk3MmFcdTk3MzBcdTk3MzlcdTk3M2RcdTk3M2VcdTk3NDRcdTk3NDZcdTk3NDhcdTk3NDJcdTk3NDlcdTk3NWNcdTk3NjBcdTk3NjRcdTk3NjZcdTk3NjhcdTUyZDJcdTk3NmJcdTk3NzFcdTk3NzlcdTk3ODVcdTk3N2NcdTk3ODFcdTk3N2Fc'@;
put 'dTk3ODZcdTk3OGJcdTk3OGZcdTk3OTBcdTk3OWNcdTk3YThcdTk3YTZcdTk3YTNcdTk3YjNcdTk3YjRcdTk3YzNcdTk3YzZcdTk3YzhcdTk3Y2JcdTk3ZGNcdTk3ZWRcdTlmNGZcdTk3ZjJcdTdhZGZcdTk3ZjZcdTk3ZjVcdTk4MGZcdTk4MGNcdTk4MzhcdTk4MjRcdTk4MjFcdTk4MzdcdTk4'@;
put 'M2RcdTk4NDZcdTk4NGZcdTk4NGJcdTk4NmJcdTk4NmZcdTk4NzBcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMzJdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIzMl1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjMyXVt2XV09NTkzOTIrdixUWzU5MzkyK3ZdPWtbMjMy'@;
put 'XVt2XSk7Zm9yKGtbMjMzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ODcxXHU5ODc0XHU5ODczXHU5OGFhXHU5OGFmXHU5OGIxXHU5OGI2XHU5OGM0XHU5OGMzXHU5OGM2XHU5OGU5XHU5OGViXHU5OTAzXHU5OTA5XHU5OTEyXHU5'@;
put 'OTE0XHU5OTE4XHU5OTIxXHU5OTFkXHU5OTFlXHU5OTI0XHU5OTIwXHU5OTJjXHU5OTJlXHU5OTNkXHU5OTNlXHU5OTQyXHU5OTQ5XHU5OTQ1XHU5OTUwXHU5OTRiXHU5OTUxXHU5OTUyXHU5OTRjXHU5OTU1XHU5OTk3XHU5OTk4XHU5OWE1XHU5OWFkXHU5OWFlXHU5OWJjXHU5OWRmXHU5OWRi'@;
put 'XHU5OWRkXHU5OWQ4XHU5OWQxXHU5OWVkXHU5OWVlXHU5OWYxXHU5OWYyXHU5OWZiXHU5OWY4XHU5YTAxXHU5YTBmXHU5YTA1XHU5OWUyXHU5YTE5XHU5YTJiXHU5YTM3XHU5YTQ1XHU5YTQyXHU5YTQwXHU5YTQzXHVmZmZkXHU5YTNlXHU5YTU1XHU5YTRkXHU5YTViXHU5YTU3XHU5YTVmXHU5'@;
put 'YTYyXHU5YTY1XHU5YTY0XHU5YTY5XHU5YTZiXHU5YTZhXHU5YWFkXHU5YWIwXHU5YWJjXHU5YWMwXHU5YWNmXHU5YWQxXHU5YWQzXHU5YWQ0XHU5YWRlXHU5YWRmXHU5YWUyXHU5YWUzXHU5YWU2XHU5YWVmXHU5YWViXHU5YWVlXHU5YWY0XHU5YWYxXHU5YWY3XHU5YWZiXHU5YjA2XHU5YjE4'@;
put 'XHU5YjFhXHU5YjFmXHU5YjIyXHU5YjIzXHU5YjI1XHU5YjI3XHU5YjI4XHU5YjI5XHU5YjJhXHU5YjJlXHU5YjJmXHU5YjMyXHU5YjQ0XHU5YjQzXHU5YjRmXHU5YjRkXHU5YjRlXHU5YjUxXHU5YjU4XHU5Yjc0XHU5YjkzXHU5YjgzXHU5YjkxXHU5Yjk2XHU5Yjk3XHU5YjlmXHU5YmEwXHU5'@;
put 'YmE4XHU5YmI0XHU5YmMwXHU5YmNhXHU5YmI5XHU5YmM2XHU5YmNmXHU5YmQxXHU5YmQyXHU5YmUzXHU5YmUyXHU5YmU0XHU5YmQ0XHU5YmUxXHU5YzNhXHU5YmYyXHU5YmYxXHU5YmYwXHU5YzE1XHU5YzE0XHU5YzA5XHU5YzEzXHU5YzBjXHU5YzA2XHU5YzA4XHU5YzEyXHU5YzBhXHU5YzA0'@;
put 'XHU5YzJlXHU5YzFiXHU5YzI1XHU5YzI0XHU5YzIxXHU5YzMwXHU5YzQ3XHU5YzMyXHU5YzQ2XHU5YzNlXHU5YzVhXHU5YzYwXHU5YzY3XHU5Yzc2XHU5Yzc4XHU5Y2U3XHU5Y2VjXHU5Y2YwXHU5ZDA5XHU5ZDA4XHU5Y2ViXHU5ZDAzXHU5ZDA2XHU5ZDJhXHU5ZDI2XHU5ZGFmXHU5ZDIzXHU5'@;
put 'ZDFmXHU5ZDQ0XHU5ZDE1XHU5ZDEyXHU5ZDQxXHU5ZDNmXHU5ZDNlXHU5ZDQ2XHU5ZDQ4XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjMzXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMzNdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIzM11bdl1dPTU5NjQ4K3YsVFs1'@;
put 'OTY0OCt2XT1rWzIzM11bdl0pO2ZvcihrWzIzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWQ1ZFx1OWQ1ZVx1OWQ2NFx1OWQ1MVx1OWQ1MFx1OWQ1OVx1OWQ3Mlx1OWQ4OVx1OWQ4N1x1OWRhYlx1OWQ2Zlx1OWQ3YVx1OWQ5YVx1'@;
put 'OWRhNFx1OWRhOVx1OWRiMlx1OWRjNFx1OWRjMVx1OWRiYlx1OWRiOFx1OWRiYVx1OWRjNlx1OWRjZlx1OWRjMlx1OWRkOVx1OWRkM1x1OWRmOFx1OWRlNlx1OWRlZFx1OWRlZlx1OWRmZFx1OWUxYVx1OWUxYlx1OWUxZVx1OWU3NVx1OWU3OVx1OWU3ZFx1OWU4MVx1OWU4OFx1OWU4Ylx1OWU4'@;
put 'Y1x1OWU5Mlx1OWU5NVx1OWU5MVx1OWU5ZFx1OWVhNVx1OWVhOVx1OWViOFx1OWVhYVx1OWVhZFx1OTc2MVx1OWVjY1x1OWVjZVx1OWVjZlx1OWVkMFx1OWVkNFx1OWVkY1x1OWVkZVx1OWVkZFx1OWVlMFx1OWVlNVx1OWVlOFx1OWVlZlx1ZmZmZFx1OWVmNFx1OWVmNlx1OWVmN1x1OWVmOVx1'@;
put 'OWVmYlx1OWVmY1x1OWVmZFx1OWYwN1x1OWYwOFx1NzZiN1x1OWYxNVx1OWYyMVx1OWYyY1x1OWYzZVx1OWY0YVx1OWY1Mlx1OWY1NFx1OWY2M1x1OWY1Zlx1OWY2MFx1OWY2MVx1OWY2Nlx1OWY2N1x1OWY2Y1x1OWY2YVx1OWY3N1x1OWY3Mlx1OWY3Nlx1OWY5NVx1OWY5Y1x1OWZhMFx1NTgy'@;
put 'Zlx1NjljN1x1OTA1OVx1NzQ2NFx1NTFkY1x1NzE5OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIzNF0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjM0XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMzRdW3Zd'@;
put 'XT01OTkwNCt2LFRbNTk5MDQrdl09a1syMzRdW3ZdKTtmb3Ioa1syMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdlOGFcdTg5MWNcdTkzNDhcdTkyODhcdTg0ZGNcdTRmYzlcdTcwYmJcdTY2MzFcdTY4YzhcdTkyZjlcdTY2ZmJc'@;
put 'dTVmNDVcdTRlMjhcdTRlZTFcdTRlZmNcdTRmMDBcdTRmMDNcdTRmMzlcdTRmNTZcdTRmOTJcdTRmOGFcdTRmOWFcdTRmOTRcdTRmY2RcdTUwNDBcdTUwMjJcdTRmZmZcdTUwMWVcdTUwNDZcdTUwNzBcdTUwNDJcdTUwOTRcdTUwZjRcdTUwZDhcdTUxNGFcdTUxNjRcdTUxOWRcdTUxYmVcdTUx'@;
put 'ZWNcdTUyMTVcdTUyOWNcdTUyYTZcdTUyYzBcdTUyZGJcdTUzMDBcdTUzMDdcdTUzMjRcdTUzNzJcdTUzOTNcdTUzYjJcdTUzZGRcdWZhMGVcdTU0OWNcdTU0OGFcdTU0YTlcdTU0ZmZcdTU1ODZcdTU3NTlcdTU3NjVcdTU3YWNcdTU3YzhcdTU3YzdcdWZhMGZcdWZmZmRcdWZhMTBcdTU4OWVc'@;
put 'dTU4YjJcdTU5MGJcdTU5NTNcdTU5NWJcdTU5NWRcdTU5NjNcdTU5YTRcdTU5YmFcdTViNTZcdTViYzBcdTc1MmZcdTViZDhcdTViZWNcdTVjMWVcdTVjYTZcdTVjYmFcdTVjZjVcdTVkMjdcdTVkNTNcdWZhMTFcdTVkNDJcdTVkNmRcdTVkYjhcdTVkYjlcdTVkZDBcdTVmMjFcdTVmMzRcdTVm'@;
put 'NjdcdTVmYjdcdTVmZGVcdTYwNWRcdTYwODVcdTYwOGFcdTYwZGVcdTYwZDVcdTYxMjBcdTYwZjJcdTYxMTFcdTYxMzdcdTYxMzBcdTYxOThcdTYyMTNcdTYyYTZcdTYzZjVcdTY0NjBcdTY0OWRcdTY0Y2VcdTY1NGVcdTY2MDBcdTY2MTVcdTY2M2JcdTY2MDlcdTY2MmVcdTY2MWVcdTY2MjRc'@;
put 'dTY2NjVcdTY2NTdcdTY2NTlcdWZhMTJcdTY2NzNcdTY2OTlcdTY2YTBcdTY2YjJcdTY2YmZcdTY2ZmFcdTY3MGVcdWY5MjlcdTY3NjZcdTY3YmJcdTY4NTJcdTY3YzBcdTY4MDFcdTY4NDRcdTY4Y2ZcdWZhMTNcdTY5NjhcdWZhMTRcdTY5OThcdTY5ZTJcdTZhMzBcdTZhNmJcdTZhNDZcdTZh'@;
put 'NzNcdTZhN2VcdTZhZTJcdTZhZTRcdTZiZDZcdTZjM2ZcdTZjNWNcdTZjODZcdTZjNmZcdTZjZGFcdTZkMDRcdTZkODdcdTZkNmZcdTZkOTZcdTZkYWNcdTZkY2ZcdTZkZjhcdTZkZjJcdTZkZmNcdTZlMzlcdTZlNWNcdTZlMjdcdTZlM2NcdTZlYmZcdTZmODhcdTZmYjVcdTZmZjVcdTcwMDVc'@;
put 'dTcwMDdcdTcwMjhcdTcwODVcdTcwYWJcdTcxMGZcdTcxMDRcdTcxNWNcdTcxNDZcdTcxNDdcdWZhMTVcdTcxYzFcdTcxZmVcdTcyYjFcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMzddLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIzN11bdl0uY2hhckNvZGVBdCgwKSYm'@;
put 'KHNlW2tbMjM3XVt2XV09NjA2NzIrdixUWzYwNjcyK3ZdPWtbMjM3XVt2XSk7Zm9yKGtbMjM4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MmJlXHU3MzI0XHVmYTE2XHU3Mzc3XHU3M2JkXHU3M2M5XHU3M2Q2XHU3M2UzXHU3M2Qy'@;
put 'XHU3NDA3XHU3M2Y1XHU3NDI2XHU3NDJhXHU3NDI5XHU3NDJlXHU3NDYyXHU3NDg5XHU3NDlmXHU3NTAxXHU3NTZmXHU3NjgyXHU3NjljXHU3NjllXHU3NjliXHU3NmE2XHVmYTE3XHU3NzQ2XHU1MmFmXHU3ODIxXHU3ODRlXHU3ODY0XHU3ODdhXHU3OTMwXHVmYTE4XHVmYTE5XHVmYTFhXHU3'@;
put 'OTk0XHVmYTFiXHU3OTliXHU3YWQxXHU3YWU3XHVmYTFjXHU3YWViXHU3YjllXHVmYTFkXHU3ZDQ4XHU3ZDVjXHU3ZGI3XHU3ZGEwXHU3ZGQ2XHU3ZTUyXHU3ZjQ3XHU3ZmExXHVmYTFlXHU4MzAxXHU4MzYyXHU4MzdmXHU4M2M3XHU4M2Y2XHU4NDQ4XHU4NGI0XHU4NTUzXHU4NTU5XHVmZmZk'@;
put 'XHU4NTZiXHVmYTFmXHU4NWIwXHVmYTIwXHVmYTIxXHU4ODA3XHU4OGY1XHU4YTEyXHU4YTM3XHU4YTc5XHU4YWE3XHU4YWJlXHU4YWRmXHVmYTIyXHU4YWY2XHU4YjUzXHU4YjdmXHU4Y2YwXHU4Y2Y0XHU4ZDEyXHU4ZDc2XHVmYTIzXHU4ZWNmXHVmYTI0XHVmYTI1XHU5MDY3XHU5MGRlXHVm'@;
put 'YTI2XHU5MTE1XHU5MTI3XHU5MWRhXHU5MWQ3XHU5MWRlXHU5MWVkXHU5MWVlXHU5MWU0XHU5MWU1XHU5MjA2XHU5MjEwXHU5MjBhXHU5MjNhXHU5MjQwXHU5MjNjXHU5MjRlXHU5MjU5XHU5MjUxXHU5MjM5XHU5MjY3XHU5MmE3XHU5Mjc3XHU5Mjc4XHU5MmU3XHU5MmQ3XHU5MmQ5XHU5MmQw'@;
put 'XHVmYTI3XHU5MmQ1XHU5MmUwXHU5MmQzXHU5MzI1XHU5MzIxXHU5MmZiXHVmYTI4XHU5MzFlXHU5MmZmXHU5MzFkXHU5MzAyXHU5MzcwXHU5MzU3XHU5M2E0XHU5M2M2XHU5M2RlXHU5M2Y4XHU5NDMxXHU5NDQ1XHU5NDQ4XHU5NTkyXHVmOWRjXHVmYTI5XHU5NjlkXHU5NmFmXHU5NzMzXHU5'@;
put 'NzNiXHU5NzQzXHU5NzRkXHU5NzRmXHU5NzUxXHU5NzU1XHU5ODU3XHU5ODY1XHVmYTJhXHVmYTJiXHU5OTI3XHVmYTJjXHU5OTllXHU5YTRlXHU5YWQ5XHU5YWRjXHU5Yjc1XHU5YjcyXHU5YjhmXHU5YmIxXHU5YmJiXHU5YzAwXHU5ZDcwXHU5ZDZiXHVmYTJkXHU5ZTE5XHU5ZWQxXHVmZmZk'@;
put 'XHVmZmZkXHUyMTcwXHUyMTcxXHUyMTcyXHUyMTczXHUyMTc0XHUyMTc1XHUyMTc2XHUyMTc3XHUyMTc4XHUyMTc5XHVmZmUyXHVmZmU0XHVmZjA3XHVmZjAyXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjM4XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMzhdW3ZdLmNo'@;
put 'YXJDb2RlQXQoMCkmJihzZVtrWzIzOF1bdl1dPTYwOTI4K3YsVFs2MDkyOCt2XT1rWzIzOF1bdl0pO2ZvcihrWzI1MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjE3MFx1MjE3MVx1MjE3Mlx1MjE3M1x1MjE3NFx1MjE3NVx1MjE3'@;
put 'Nlx1MjE3N1x1MjE3OFx1MjE3OVx1MjE2MFx1MjE2MVx1MjE2Mlx1MjE2M1x1MjE2NFx1MjE2NVx1MjE2Nlx1MjE2N1x1MjE2OFx1MjE2OVx1ZmZlMlx1ZmZlNFx1ZmYwN1x1ZmYwMlx1MzIzMVx1MjExNlx1MjEyMVx1MjIzNVx1N2U4YVx1ODkxY1x1OTM0OFx1OTI4OFx1ODRkY1x1NGZjOVx1'@;
put 'NzBiYlx1NjYzMVx1NjhjOFx1OTJmOVx1NjZmYlx1NWY0NVx1NGUyOFx1NGVlMVx1NGVmY1x1NGYwMFx1NGYwM1x1NGYzOVx1NGY1Nlx1NGY5Mlx1NGY4YVx1NGY5YVx1NGY5NFx1NGZjZFx1NTA0MFx1NTAyMlx1NGZmZlx1NTAxZVx1NTA0Nlx1NTA3MFx1NTA0Mlx1NTA5NFx1NTBmNFx1NTBk'@;
put 'OFx1NTE0YVx1ZmZmZFx1NTE2NFx1NTE5ZFx1NTFiZVx1NTFlY1x1NTIxNVx1NTI5Y1x1NTJhNlx1NTJjMFx1NTJkYlx1NTMwMFx1NTMwN1x1NTMyNFx1NTM3Mlx1NTM5M1x1NTNiMlx1NTNkZFx1ZmEwZVx1NTQ5Y1x1NTQ4YVx1NTRhOVx1NTRmZlx1NTU4Nlx1NTc1OVx1NTc2NVx1NTdhY1x1'@;
put 'NTdjOFx1NTdjN1x1ZmEwZlx1ZmExMFx1NTg5ZVx1NThiMlx1NTkwYlx1NTk1M1x1NTk1Ylx1NTk1ZFx1NTk2M1x1NTlhNFx1NTliYVx1NWI1Nlx1NWJjMFx1NzUyZlx1NWJkOFx1NWJlY1x1NWMxZVx1NWNhNlx1NWNiYVx1NWNmNVx1NWQyN1x1NWQ1M1x1ZmExMVx1NWQ0Mlx1NWQ2ZFx1NWRi'@;
put 'OFx1NWRiOVx1NWRkMFx1NWYyMVx1NWYzNFx1NWY2N1x1NWZiN1x1NWZkZVx1NjA1ZFx1NjA4NVx1NjA4YVx1NjBkZVx1NjBkNVx1NjEyMFx1NjBmMlx1NjExMVx1NjEzN1x1NjEzMFx1NjE5OFx1NjIxM1x1NjJhNlx1NjNmNVx1NjQ2MFx1NjQ5ZFx1NjRjZVx1NjU0ZVx1NjYwMFx1NjYxNVx1'@;
put 'NjYzYlx1NjYwOVx1NjYyZVx1NjYxZVx1NjYyNFx1NjY2NVx1NjY1N1x1NjY1OVx1ZmExMlx1NjY3M1x1NjY5OVx1NjZhMFx1NjZiMlx1NjZiZlx1NjZmYVx1NjcwZVx1ZjkyOVx1Njc2Nlx1NjdiYlx1Njg1Mlx1NjdjMFx1NjgwMVx1Njg0NFx1NjhjZlx1ZmExM1x1Njk2OFx1ZmExNFx1Njk5'@;
put 'OFx1NjllMlx1NmEzMFx1NmE2Ylx1NmE0Nlx1NmE3M1x1NmE3ZVx1NmFlMlx1NmFlNFx1NmJkNlx1NmMzZlx1NmM1Y1x1NmM4Nlx1NmM2Zlx1NmNkYVx1NmQwNFx1NmQ4N1x1NmQ2Zlx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzI1MF0ubGVuZ3RoOysrdik2NTUzMyE9'@;
put 'PWtbMjUwXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syNTBdW3ZdXT02NGUzK3YsVFs2NGUzK3ZdPWtbMjUwXVt2XSk7Zm9yKGtbMjUxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZDk2XHU2ZGFjXHU2ZGNmXHU2ZGY4XHU2ZGYy'@;
put 'XHU2ZGZjXHU2ZTM5XHU2ZTVjXHU2ZTI3XHU2ZTNjXHU2ZWJmXHU2Zjg4XHU2ZmI1XHU2ZmY1XHU3MDA1XHU3MDA3XHU3MDI4XHU3MDg1XHU3MGFiXHU3MTBmXHU3MTA0XHU3MTVjXHU3MTQ2XHU3MTQ3XHVmYTE1XHU3MWMxXHU3MWZlXHU3MmIxXHU3MmJlXHU3MzI0XHVmYTE2XHU3Mzc3XHU3'@;
put 'M2JkXHU3M2M5XHU3M2Q2XHU3M2UzXHU3M2QyXHU3NDA3XHU3M2Y1XHU3NDI2XHU3NDJhXHU3NDI5XHU3NDJlXHU3NDYyXHU3NDg5XHU3NDlmXHU3NTAxXHU3NTZmXHU3NjgyXHU3NjljXHU3NjllXHU3NjliXHU3NmE2XHVmYTE3XHU3NzQ2XHU1MmFmXHU3ODIxXHU3ODRlXHU3ODY0XHU3ODdh'@;
put 'XHU3OTMwXHVmYTE4XHVmYTE5XHVmZmZkXHVmYTFhXHU3OTk0XHVmYTFiXHU3OTliXHU3YWQxXHU3YWU3XHVmYTFjXHU3YWViXHU3YjllXHVmYTFkXHU3ZDQ4XHU3ZDVjXHU3ZGI3XHU3ZGEwXHU3ZGQ2XHU3ZTUyXHU3ZjQ3XHU3ZmExXHVmYTFlXHU4MzAxXHU4MzYyXHU4MzdmXHU4M2M3XHU4'@;
put 'M2Y2XHU4NDQ4XHU4NGI0XHU4NTUzXHU4NTU5XHU4NTZiXHVmYTFmXHU4NWIwXHVmYTIwXHVmYTIxXHU4ODA3XHU4OGY1XHU4YTEyXHU4YTM3XHU4YTc5XHU4YWE3XHU4YWJlXHU4YWRmXHVmYTIyXHU4YWY2XHU4YjUzXHU4YjdmXHU4Y2YwXHU4Y2Y0XHU4ZDEyXHU4ZDc2XHVmYTIzXHU4ZWNm'@;
put 'XHVmYTI0XHVmYTI1XHU5MDY3XHU5MGRlXHVmYTI2XHU5MTE1XHU5MTI3XHU5MWRhXHU5MWQ3XHU5MWRlXHU5MWVkXHU5MWVlXHU5MWU0XHU5MWU1XHU5MjA2XHU5MjEwXHU5MjBhXHU5MjNhXHU5MjQwXHU5MjNjXHU5MjRlXHU5MjU5XHU5MjUxXHU5MjM5XHU5MjY3XHU5MmE3XHU5Mjc3XHU5'@;
put 'Mjc4XHU5MmU3XHU5MmQ3XHU5MmQ5XHU5MmQwXHVmYTI3XHU5MmQ1XHU5MmUwXHU5MmQzXHU5MzI1XHU5MzIxXHU5MmZiXHVmYTI4XHU5MzFlXHU5MmZmXHU5MzFkXHU5MzAyXHU5MzcwXHU5MzU3XHU5M2E0XHU5M2M2XHU5M2RlXHU5M2Y4XHU5NDMxXHU5NDQ1XHU5NDQ4XHU5NTkyXHVmOWRj'@;
put 'XHVmYTI5XHU5NjlkXHU5NmFmXHU5NzMzXHU5NzNiXHU5NzQzXHU5NzRkXHU5NzRmXHU5NzUxXHU5NzU1XHU5ODU3XHU5ODY1XHVmYTJhXHVmYTJiXHU5OTI3XHVmYTJjXHU5OTllXHU5YTRlXHU5YWQ5XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjUxXS5sZW5ndGg7'@;
put 'Kyt2KTY1NTMzIT09a1syNTFdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzI1MV1bdl1dPTY0MjU2K3YsVFs2NDI1Nit2XT1rWzI1MV1bdl0pO2ZvcihrWzI1Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWFkY1x1OWI3NVx1OWI3'@;
put 'Mlx1OWI4Zlx1OWJiMVx1OWJiYlx1OWMwMFx1OWQ3MFx1OWQ2Ylx1ZmEyZFx1OWUxOVx1OWVkMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1r'@;
put 'WzI1Ml0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjUyXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syNTJdW3ZdXT02NDUxMit2LFRbNjQ1MTIrdl09a1syNTJdW3ZdKTtyZXR1cm57ZW5jOnNlLGRlYzpUfX0oKSx6ZVs5MzZdPWZ1bmN0aW9uKCl7dmFyIHYsVD1bXSxzZT17fSxrPVtdO2Zvcihr'@;
put 'WzBdPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktM'@;
put 'TU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIu'@;
put 'c3BsaXQoIiIpLHY9MDt2IT1rWzBdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzBdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzBdW3ZdXT0wK3YsVFswK3ZdPWtbMF1bdl0pO2ZvcihrWzEyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'NGUwMlx1NGUwNFx1NGUwNVx1NGUwNlx1NGUwZlx1NGUxMlx1NGUxN1x1NGUxZlx1NGUyMFx1NGUyMVx1NGUyM1x1NGUyNlx1NGUyOVx1NGUyZVx1NGUyZlx1NGUzMVx1NGUzM1x1NGUzNVx1NGUzN1x1NGUzY1x1NGU0MFx1NGU0MVx1NGU0Mlx1NGU0NFx1NGU0Nlx1NGU0YVx1NGU1MVx1NGU1'@;
put 'NVx1NGU1N1x1NGU1YVx1NGU1Ylx1NGU2Mlx1NGU2M1x1NGU2NFx1NGU2NVx1NGU2N1x1NGU2OFx1NGU2YVx1NGU2Ylx1NGU2Y1x1NGU2ZFx1NGU2ZVx1NGU2Zlx1NGU3Mlx1NGU3NFx1NGU3NVx1NGU3Nlx1NGU3N1x1NGU3OFx1NGU3OVx1NGU3YVx1NGU3Ylx1NGU3Y1x1NGU3ZFx1NGU3Zlx1'@;
put 'NGU4MFx1NGU4MVx1NGU4Mlx1NGU4M1x1NGU4NFx1NGU4NVx1NGU4N1x1NGU4YVx1ZmZmZFx1NGU5MFx1NGU5Nlx1NGU5N1x1NGU5OVx1NGU5Y1x1NGU5ZFx1NGU5ZVx1NGVhM1x1NGVhYVx1NGVhZlx1NGViMFx1NGViMVx1NGViNFx1NGViNlx1NGViN1x1NGViOFx1NGViOVx1NGViY1x1NGVi'@;
put 'ZFx1NGViZVx1NGVjOFx1NGVjY1x1NGVjZlx1NGVkMFx1NGVkMlx1NGVkYVx1NGVkYlx1NGVkY1x1NGVlMFx1NGVlMlx1NGVlNlx1NGVlN1x1NGVlOVx1NGVlZFx1NGVlZVx1NGVlZlx1NGVmMVx1NGVmNFx1NGVmOFx1NGVmOVx1NGVmYVx1NGVmY1x1NGVmZVx1NGYwMFx1NGYwMlx1NGYwM1x1'@;
put 'NGYwNFx1NGYwNVx1NGYwNlx1NGYwN1x1NGYwOFx1NGYwYlx1NGYwY1x1NGYxMlx1NGYxM1x1NGYxNFx1NGYxNVx1NGYxNlx1NGYxY1x1NGYxZFx1NGYyMVx1NGYyM1x1NGYyOFx1NGYyOVx1NGYyY1x1NGYyZFx1NGYyZVx1NGYzMVx1NGYzM1x1NGYzNVx1NGYzN1x1NGYzOVx1NGYzYlx1NGYz'@;
put 'ZVx1NGYzZlx1NGY0MFx1NGY0MVx1NGY0Mlx1NGY0NFx1NGY0NVx1NGY0N1x1NGY0OFx1NGY0OVx1NGY0YVx1NGY0Ylx1NGY0Y1x1NGY1Mlx1NGY1NFx1NGY1Nlx1NGY2MVx1NGY2Mlx1NGY2Nlx1NGY2OFx1NGY2YVx1NGY2Ylx1NGY2ZFx1NGY2ZVx1NGY3MVx1NGY3Mlx1NGY3NVx1NGY3N1x1'@;
put 'NGY3OFx1NGY3OVx1NGY3YVx1NGY3ZFx1NGY4MFx1NGY4MVx1NGY4Mlx1NGY4NVx1NGY4Nlx1NGY4N1x1NGY4YVx1NGY4Y1x1NGY4ZVx1NGY5MFx1NGY5Mlx1NGY5M1x1NGY5NVx1NGY5Nlx1NGY5OFx1NGY5OVx1NGY5YVx1NGY5Y1x1NGY5ZVx1NGY5Zlx1NGZhMVx1NGZhMlx1ZmZmZCIuc3Bs'@;
put 'aXQoIiIpLHY9MDt2IT1rWzEyOV0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTI5XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxMjldW3ZdXT0zMzAyNCt2LFRbMzMwMjQrdl09a1sxMjldW3ZdKTtmb3Ioa1sxMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdTRmYTRcdTRmYWJcdTRmYWRcdTRmYjBcdTRmYjFcdTRmYjJcdTRmYjNcdTRmYjRcdTRmYjZcdTRmYjdcdTRmYjhcdTRmYjlcdTRmYmFcdTRmYmJcdTRmYmNcdTRmYmRcdTRmYmVcdTRmYzBcdTRmYzFcdTRmYzJcdTRmYzZcdTRmYzdcdTRmYzhcdTRmYzlcdTRmY2JcdTRm'@;
put 'Y2NcdTRmY2RcdTRmZDJcdTRmZDNcdTRmZDRcdTRmZDVcdTRmZDZcdTRmZDlcdTRmZGJcdTRmZTBcdTRmZTJcdTRmZTRcdTRmZTVcdTRmZTdcdTRmZWJcdTRmZWNcdTRmZjBcdTRmZjJcdTRmZjRcdTRmZjVcdTRmZjZcdTRmZjdcdTRmZjlcdTRmZmJcdTRmZmNcdTRmZmRcdTRmZmZcdTUwMDBc'@;
put 'dTUwMDFcdTUwMDJcdTUwMDNcdTUwMDRcdTUwMDVcdTUwMDZcdTUwMDdcdTUwMDhcdTUwMDlcdTUwMGFcdWZmZmRcdTUwMGJcdTUwMGVcdTUwMTBcdTUwMTFcdTUwMTNcdTUwMTVcdTUwMTZcdTUwMTdcdTUwMWJcdTUwMWRcdTUwMWVcdTUwMjBcdTUwMjJcdTUwMjNcdTUwMjRcdTUwMjdcdTUw'@;
put 'MmJcdTUwMmZcdTUwMzBcdTUwMzFcdTUwMzJcdTUwMzNcdTUwMzRcdTUwMzVcdTUwMzZcdTUwMzdcdTUwMzhcdTUwMzlcdTUwM2JcdTUwM2RcdTUwM2ZcdTUwNDBcdTUwNDFcdTUwNDJcdTUwNDRcdTUwNDVcdTUwNDZcdTUwNDlcdTUwNGFcdTUwNGJcdTUwNGRcdTUwNTBcdTUwNTFcdTUwNTJc'@;
put 'dTUwNTNcdTUwNTRcdTUwNTZcdTUwNTdcdTUwNThcdTUwNTlcdTUwNWJcdTUwNWRcdTUwNWVcdTUwNWZcdTUwNjBcdTUwNjFcdTUwNjJcdTUwNjNcdTUwNjRcdTUwNjZcdTUwNjdcdTUwNjhcdTUwNjlcdTUwNmFcdTUwNmJcdTUwNmRcdTUwNmVcdTUwNmZcdTUwNzBcdTUwNzFcdTUwNzJcdTUw'@;
put 'NzNcdTUwNzRcdTUwNzVcdTUwNzhcdTUwNzlcdTUwN2FcdTUwN2NcdTUwN2RcdTUwODFcdTUwODJcdTUwODNcdTUwODRcdTUwODZcdTUwODdcdTUwODlcdTUwOGFcdTUwOGJcdTUwOGNcdTUwOGVcdTUwOGZcdTUwOTBcdTUwOTFcdTUwOTJcdTUwOTNcdTUwOTRcdTUwOTVcdTUwOTZcdTUwOTdc'@;
put 'dTUwOThcdTUwOTlcdTUwOWFcdTUwOWJcdTUwOWNcdTUwOWRcdTUwOWVcdTUwOWZcdTUwYTBcdTUwYTFcdTUwYTJcdTUwYTRcdTUwYTZcdTUwYWFcdTUwYWJcdTUwYWRcdTUwYWVcdTUwYWZcdTUwYjBcdTUwYjFcdTUwYjNcdTUwYjRcdTUwYjVcdTUwYjZcdTUwYjdcdTUwYjhcdTUwYjlcdTUw'@;
put 'YmNcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxMzBdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzEzMF1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTMwXVt2XV09MzMyODArdixUWzMzMjgwK3ZdPWtbMTMwXVt2XSk7Zm9yKGtbMTMxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MGJkXHU1MGJlXHU1MGJmXHU1MGMwXHU1MGMxXHU1MGMyXHU1MGMzXHU1MGM0XHU1MGM1XHU1MGM2XHU1MGM3XHU1MGM4XHU1MGM5XHU1MGNhXHU1MGNiXHU1MGNjXHU1MGNkXHU1MGNlXHU1MGQwXHU1MGQxXHU1MGQyXHU1MGQzXHU1MGQ0XHU1'@;
put 'MGQ1XHU1MGQ3XHU1MGQ4XHU1MGQ5XHU1MGRiXHU1MGRjXHU1MGRkXHU1MGRlXHU1MGRmXHU1MGUwXHU1MGUxXHU1MGUyXHU1MGUzXHU1MGU0XHU1MGU1XHU1MGU4XHU1MGU5XHU1MGVhXHU1MGViXHU1MGVmXHU1MGYwXHU1MGYxXHU1MGYyXHU1MGY0XHU1MGY2XHU1MGY3XHU1MGY4XHU1MGY5'@;
put 'XHU1MGZhXHU1MGZjXHU1MGZkXHU1MGZlXHU1MGZmXHU1MTAwXHU1MTAxXHU1MTAyXHU1MTAzXHU1MTA0XHU1MTA1XHU1MTA4XHVmZmZkXHU1MTA5XHU1MTBhXHU1MTBjXHU1MTBkXHU1MTBlXHU1MTBmXHU1MTEwXHU1MTExXHU1MTEzXHU1MTE0XHU1MTE1XHU1MTE2XHU1MTE3XHU1MTE4XHU1'@;
put 'MTE5XHU1MTFhXHU1MTFiXHU1MTFjXHU1MTFkXHU1MTFlXHU1MTFmXHU1MTIwXHU1MTIyXHU1MTIzXHU1MTI0XHU1MTI1XHU1MTI2XHU1MTI3XHU1MTI4XHU1MTI5XHU1MTJhXHU1MTJiXHU1MTJjXHU1MTJkXHU1MTJlXHU1MTJmXHU1MTMwXHU1MTMxXHU1MTMyXHU1MTMzXHU1MTM0XHU1MTM1'@;
put 'XHU1MTM2XHU1MTM3XHU1MTM4XHU1MTM5XHU1MTNhXHU1MTNiXHU1MTNjXHU1MTNkXHU1MTNlXHU1MTQyXHU1MTQ3XHU1MTRhXHU1MTRjXHU1MTRlXHU1MTRmXHU1MTUwXHU1MTUyXHU1MTUzXHU1MTU3XHU1MTU4XHU1MTU5XHU1MTViXHU1MTVkXHU1MTVlXHU1MTVmXHU1MTYwXHU1MTYxXHU1'@;
put 'MTYzXHU1MTY0XHU1MTY2XHU1MTY3XHU1MTY5XHU1MTZhXHU1MTZmXHU1MTcyXHU1MTdhXHU1MTdlXHU1MTdmXHU1MTgzXHU1MTg0XHU1MTg2XHU1MTg3XHU1MThhXHU1MThiXHU1MThlXHU1MThmXHU1MTkwXHU1MTkxXHU1MTkzXHU1MTk0XHU1MTk4XHU1MTlhXHU1MTlkXHU1MTllXHU1MTlm'@;
put 'XHU1MWExXHU1MWEzXHU1MWE2XHU1MWE3XHU1MWE4XHU1MWE5XHU1MWFhXHU1MWFkXHU1MWFlXHU1MWI0XHU1MWI4XHU1MWI5XHU1MWJhXHU1MWJlXHU1MWJmXHU1MWMxXHU1MWMyXHU1MWMzXHU1MWM1XHU1MWM4XHU1MWNhXHU1MWNkXHU1MWNlXHU1MWQwXHU1MWQyXHU1MWQzXHU1MWQ0XHU1'@;
put 'MWQ1XHU1MWQ2XHU1MWQ3XHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTMxXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxMzFdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzEzMV1bdl1dPTMzNTM2K3YsVFszMzUzNit2XT1rWzEzMV1bdl0pO2ZvcihrWzEzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTFkOFx1NTFkOVx1NTFkYVx1NTFkY1x1NTFkZVx1NTFkZlx1NTFlMlx1NTFlM1x1NTFlNVx1NTFlNlx1NTFlN1x1NTFlOFx1NTFlOVx1NTFlYVx1NTFlY1x1NTFlZVx1NTFmMVx1NTFmMlx1NTFmNFx1NTFmN1x1NTFmZVx1'@;
put 'NTIwNFx1NTIwNVx1NTIwOVx1NTIwYlx1NTIwY1x1NTIwZlx1NTIxMFx1NTIxM1x1NTIxNFx1NTIxNVx1NTIxY1x1NTIxZVx1NTIxZlx1NTIyMVx1NTIyMlx1NTIyM1x1NTIyNVx1NTIyNlx1NTIyN1x1NTIyYVx1NTIyY1x1NTIyZlx1NTIzMVx1NTIzMlx1NTIzNFx1NTIzNVx1NTIzY1x1NTIz'@;
put 'ZVx1NTI0NFx1NTI0NVx1NTI0Nlx1NTI0N1x1NTI0OFx1NTI0OVx1NTI0Ylx1NTI0ZVx1NTI0Zlx1NTI1Mlx1NTI1M1x1NTI1NVx1NTI1N1x1NTI1OFx1ZmZmZFx1NTI1OVx1NTI1YVx1NTI1Ylx1NTI1ZFx1NTI1Zlx1NTI2MFx1NTI2Mlx1NTI2M1x1NTI2NFx1NTI2Nlx1NTI2OFx1NTI2Ylx1'@;
put 'NTI2Y1x1NTI2ZFx1NTI2ZVx1NTI3MFx1NTI3MVx1NTI3M1x1NTI3NFx1NTI3NVx1NTI3Nlx1NTI3N1x1NTI3OFx1NTI3OVx1NTI3YVx1NTI3Ylx1NTI3Y1x1NTI3ZVx1NTI4MFx1NTI4M1x1NTI4NFx1NTI4NVx1NTI4Nlx1NTI4N1x1NTI4OVx1NTI4YVx1NTI4Ylx1NTI4Y1x1NTI4ZFx1NTI4'@;
put 'ZVx1NTI4Zlx1NTI5MVx1NTI5Mlx1NTI5NFx1NTI5NVx1NTI5Nlx1NTI5N1x1NTI5OFx1NTI5OVx1NTI5YVx1NTI5Y1x1NTJhNFx1NTJhNVx1NTJhNlx1NTJhN1x1NTJhZVx1NTJhZlx1NTJiMFx1NTJiNFx1NTJiNVx1NTJiNlx1NTJiN1x1NTJiOFx1NTJiOVx1NTJiYVx1NTJiYlx1NTJiY1x1'@;
put 'NTJiZFx1NTJjMFx1NTJjMVx1NTJjMlx1NTJjNFx1NTJjNVx1NTJjNlx1NTJjOFx1NTJjYVx1NTJjY1x1NTJjZFx1NTJjZVx1NTJjZlx1NTJkMVx1NTJkM1x1NTJkNFx1NTJkNVx1NTJkN1x1NTJkOVx1NTJkYVx1NTJkYlx1NTJkY1x1NTJkZFx1NTJkZVx1NTJlMFx1NTJlMVx1NTJlMlx1NTJl'@;
put 'M1x1NTJlNVx1NTJlNlx1NTJlN1x1NTJlOFx1NTJlOVx1NTJlYVx1NTJlYlx1NTJlY1x1NTJlZFx1NTJlZVx1NTJlZlx1NTJmMVx1NTJmMlx1NTJmM1x1NTJmNFx1NTJmNVx1NTJmNlx1NTJmN1x1NTJmOFx1NTJmYlx1NTJmY1x1NTJmZFx1NTMwMVx1NTMwMlx1NTMwM1x1NTMwNFx1NTMwN1x1'@;
put 'NTMwOVx1NTMwYVx1NTMwYlx1NTMwY1x1NTMwZVx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzEzMl0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTMyXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxMzJdW3ZdXT0zMzc5Mit2LFRbMzM3OTIrdl09a1sxMzJdW3ZdKTtmb3Ioa1sxMzNdPSJcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUzMTFcdTUzMTJcdTUzMTNcdTUzMTRcdTUzMThcdTUzMWJcdTUzMWNcdTUzMWVcdTUzMWZcdTUzMjJcdTUzMjRcdTUzMjVcdTUzMjdcdTUzMjhcdTUzMjlcdTUzMmJcdTUzMmNcdTUzMmRcdTUzMmZc'@;
put 'dTUzMzBcdTUzMzFcdTUzMzJcdTUzMzNcdTUzMzRcdTUzMzVcdTUzMzZcdTUzMzdcdTUzMzhcdTUzM2NcdTUzM2RcdTUzNDBcdTUzNDJcdTUzNDRcdTUzNDZcdTUzNGJcdTUzNGNcdTUzNGRcdTUzNTBcdTUzNTRcdTUzNThcdTUzNTlcdTUzNWJcdTUzNWRcdTUzNjVcdTUzNjhcdTUzNmFcdTUz'@;
put 'NmNcdTUzNmRcdTUzNzJcdTUzNzZcdTUzNzlcdTUzN2JcdTUzN2NcdTUzN2RcdTUzN2VcdTUzODBcdTUzODFcdTUzODNcdTUzODdcdTUzODhcdTUzOGFcdTUzOGVcdTUzOGZcdWZmZmRcdTUzOTBcdTUzOTFcdTUzOTJcdTUzOTNcdTUzOTRcdTUzOTZcdTUzOTdcdTUzOTlcdTUzOWJcdTUzOWNc'@;
put 'dTUzOWVcdTUzYTBcdTUzYTFcdTUzYTRcdTUzYTdcdTUzYWFcdTUzYWJcdTUzYWNcdTUzYWRcdTUzYWZcdTUzYjBcdTUzYjFcdTUzYjJcdTUzYjNcdTUzYjRcdTUzYjVcdTUzYjdcdTUzYjhcdTUzYjlcdTUzYmFcdTUzYmNcdTUzYmRcdTUzYmVcdTUzYzBcdTUzYzNcdTUzYzRcdTUzYzVcdTUz'@;
put 'YzZcdTUzYzdcdTUzY2VcdTUzY2ZcdTUzZDBcdTUzZDJcdTUzZDNcdTUzZDVcdTUzZGFcdTUzZGNcdTUzZGRcdTUzZGVcdTUzZTFcdTUzZTJcdTUzZTdcdTUzZjRcdTUzZmFcdTUzZmVcdTUzZmZcdTU0MDBcdTU0MDJcdTU0MDVcdTU0MDdcdTU0MGJcdTU0MTRcdTU0MThcdTU0MTlcdTU0MWFc'@;
put 'dTU0MWNcdTU0MjJcdTU0MjRcdTU0MjVcdTU0MmFcdTU0MzBcdTU0MzNcdTU0MzZcdTU0MzdcdTU0M2FcdTU0M2RcdTU0M2ZcdTU0NDFcdTU0NDJcdTU0NDRcdTU0NDVcdTU0NDdcdTU0NDlcdTU0NGNcdTU0NGRcdTU0NGVcdTU0NGZcdTU0NTFcdTU0NWFcdTU0NWRcdTU0NWVcdTU0NWZcdTU0'@;
put 'NjBcdTU0NjFcdTU0NjNcdTU0NjVcdTU0NjdcdTU0NjlcdTU0NmFcdTU0NmJcdTU0NmNcdTU0NmRcdTU0NmVcdTU0NmZcdTU0NzBcdTU0NzRcdTU0NzlcdTU0N2FcdTU0N2VcdTU0N2ZcdTU0ODFcdTU0ODNcdTU0ODVcdTU0ODdcdTU0ODhcdTU0ODlcdTU0OGFcdTU0OGRcdTU0OTFcdTU0OTNc'@;
put 'dTU0OTdcdTU0OThcdTU0OWNcdTU0OWVcdTU0OWZcdTU0YTBcdTU0YTFcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxMzNdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzEzM11bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTMzXVt2XV09MzQwNDgrdixUWzM0MDQ4K3ZdPWtbMTMzXVt2XSk7Zm9y'@;
put 'KGtbMTM0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NGEyXHU1NGE1XHU1NGFlXHU1NGIwXHU1NGIyXHU1NGI1XHU1NGI2XHU1NGI3XHU1NGI5XHU1NGJhXHU1NGJjXHU1NGJlXHU1NGMzXHU1NGM1XHU1NGNhXHU1NGNiXHU1NGQ2'@;
put 'XHU1NGQ4XHU1NGRiXHU1NGUwXHU1NGUxXHU1NGUyXHU1NGUzXHU1NGU0XHU1NGViXHU1NGVjXHU1NGVmXHU1NGYwXHU1NGYxXHU1NGY0XHU1NGY1XHU1NGY2XHU1NGY3XHU1NGY4XHU1NGY5XHU1NGZiXHU1NGZlXHU1NTAwXHU1NTAyXHU1NTAzXHU1NTA0XHU1NTA1XHU1NTA4XHU1NTBhXHU1'@;
put 'NTBiXHU1NTBjXHU1NTBkXHU1NTBlXHU1NTEyXHU1NTEzXHU1NTE1XHU1NTE2XHU1NTE3XHU1NTE4XHU1NTE5XHU1NTFhXHU1NTFjXHU1NTFkXHU1NTFlXHU1NTFmXHU1NTIxXHU1NTI1XHU1NTI2XHVmZmZkXHU1NTI4XHU1NTI5XHU1NTJiXHU1NTJkXHU1NTMyXHU1NTM0XHU1NTM1XHU1NTM2'@;
put 'XHU1NTM4XHU1NTM5XHU1NTNhXHU1NTNiXHU1NTNkXHU1NTQwXHU1NTQyXHU1NTQ1XHU1NTQ3XHU1NTQ4XHU1NTRiXHU1NTRjXHU1NTRkXHU1NTRlXHU1NTRmXHU1NTUxXHU1NTUyXHU1NTUzXHU1NTU0XHU1NTU3XHU1NTU4XHU1NTU5XHU1NTVhXHU1NTViXHU1NTVkXHU1NTVlXHU1NTVmXHU1'@;
put 'NTYwXHU1NTYyXHU1NTYzXHU1NTY4XHU1NTY5XHU1NTZiXHU1NTZmXHU1NTcwXHU1NTcxXHU1NTcyXHU1NTczXHU1NTc0XHU1NTc5XHU1NTdhXHU1NTdkXHU1NTdmXHU1NTg1XHU1NTg2XHU1NThjXHU1NThkXHU1NThlXHU1NTkwXHU1NTkyXHU1NTkzXHU1NTk1XHU1NTk2XHU1NTk3XHU1NTlh'@;
put 'XHU1NTliXHU1NTllXHU1NWEwXHU1NWExXHU1NWEyXHU1NWEzXHU1NWE0XHU1NWE1XHU1NWE2XHU1NWE4XHU1NWE5XHU1NWFhXHU1NWFiXHU1NWFjXHU1NWFkXHU1NWFlXHU1NWFmXHU1NWIwXHU1NWIyXHU1NWI0XHU1NWI2XHU1NWI4XHU1NWJhXHU1NWJjXHU1NWJmXHU1NWMwXHU1NWMxXHU1'@;
put 'NWMyXHU1NWMzXHU1NWM2XHU1NWM3XHU1NWM4XHU1NWNhXHU1NWNiXHU1NWNlXHU1NWNmXHU1NWQwXHU1NWQ1XHU1NWQ3XHU1NWQ4XHU1NWQ5XHU1NWRhXHU1NWRiXHU1NWRlXHU1NWUwXHU1NWUyXHU1NWU3XHU1NWU5XHU1NWVkXHU1NWVlXHU1NWYwXHU1NWYxXHU1NWY0XHU1NWY2XHU1NWY4'@;
put 'XHU1NWY5XHU1NWZhXHU1NWZiXHU1NWZjXHU1NWZmXHU1NjAyXHU1NjAzXHU1NjA0XHU1NjA1XHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTM0XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxMzRdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzEzNF1bdl1dPTM0MzA0K3YsVFszNDMwNCt2XT1r'@;
put 'WzEzNF1bdl0pO2ZvcihrWzEzNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTYwNlx1NTYwN1x1NTYwYVx1NTYwYlx1NTYwZFx1NTYxMFx1NTYxMVx1NTYxMlx1NTYxM1x1NTYxNFx1NTYxNVx1NTYxNlx1NTYxN1x1NTYxOVx1NTYx'@;
put 'YVx1NTYxY1x1NTYxZFx1NTYyMFx1NTYyMVx1NTYyMlx1NTYyNVx1NTYyNlx1NTYyOFx1NTYyOVx1NTYyYVx1NTYyYlx1NTYyZVx1NTYyZlx1NTYzMFx1NTYzM1x1NTYzNVx1NTYzN1x1NTYzOFx1NTYzYVx1NTYzY1x1NTYzZFx1NTYzZVx1NTY0MFx1NTY0MVx1NTY0Mlx1NTY0M1x1NTY0NFx1'@;
put 'NTY0NVx1NTY0Nlx1NTY0N1x1NTY0OFx1NTY0OVx1NTY0YVx1NTY0Ylx1NTY0Zlx1NTY1MFx1NTY1MVx1NTY1Mlx1NTY1M1x1NTY1NVx1NTY1Nlx1NTY1YVx1NTY1Ylx1NTY1ZFx1NTY1ZVx1NTY1Zlx1NTY2MFx1NTY2MVx1ZmZmZFx1NTY2M1x1NTY2NVx1NTY2Nlx1NTY2N1x1NTY2ZFx1NTY2'@;
put 'ZVx1NTY2Zlx1NTY3MFx1NTY3Mlx1NTY3M1x1NTY3NFx1NTY3NVx1NTY3N1x1NTY3OFx1NTY3OVx1NTY3YVx1NTY3ZFx1NTY3ZVx1NTY3Zlx1NTY4MFx1NTY4MVx1NTY4Mlx1NTY4M1x1NTY4NFx1NTY4N1x1NTY4OFx1NTY4OVx1NTY4YVx1NTY4Ylx1NTY4Y1x1NTY4ZFx1NTY5MFx1NTY5MVx1'@;
put 'NTY5Mlx1NTY5NFx1NTY5NVx1NTY5Nlx1NTY5N1x1NTY5OFx1NTY5OVx1NTY5YVx1NTY5Ylx1NTY5Y1x1NTY5ZFx1NTY5ZVx1NTY5Zlx1NTZhMFx1NTZhMVx1NTZhMlx1NTZhNFx1NTZhNVx1NTZhNlx1NTZhN1x1NTZhOFx1NTZhOVx1NTZhYVx1NTZhYlx1NTZhY1x1NTZhZFx1NTZhZVx1NTZi'@;
put 'MFx1NTZiMVx1NTZiMlx1NTZiM1x1NTZiNFx1NTZiNVx1NTZiNlx1NTZiOFx1NTZiOVx1NTZiYVx1NTZiYlx1NTZiZFx1NTZiZVx1NTZiZlx1NTZjMFx1NTZjMVx1NTZjMlx1NTZjM1x1NTZjNFx1NTZjNVx1NTZjNlx1NTZjN1x1NTZjOFx1NTZjOVx1NTZjYlx1NTZjY1x1NTZjZFx1NTZjZVx1'@;
put 'NTZjZlx1NTZkMFx1NTZkMVx1NTZkMlx1NTZkM1x1NTZkNVx1NTZkNlx1NTZkOFx1NTZkOVx1NTZkY1x1NTZlM1x1NTZlNVx1NTZlNlx1NTZlN1x1NTZlOFx1NTZlOVx1NTZlYVx1NTZlY1x1NTZlZVx1NTZlZlx1NTZmMlx1NTZmM1x1NTZmNlx1NTZmN1x1NTZmOFx1NTZmYlx1NTZmY1x1NTcw'@;
put 'MFx1NTcwMVx1NTcwMlx1NTcwNVx1NTcwN1x1NTcwYlx1NTcwY1x1NTcwZFx1NTcwZVx1NTcwZlx1NTcxMFx1NTcxMVx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzEzNV0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTM1XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxMzVdW3ZdXT0zNDU2MCt2'@;
put 'LFRbMzQ1NjArdl09a1sxMzVdW3ZdKTtmb3Ioa1sxMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU3MTJcdTU3MTNcdTU3MTRcdTU3MTVcdTU3MTZcdTU3MTdcdTU3MThcdTU3MTlcdTU3MWFcdTU3MWJcdTU3MWRcdTU3MWVcdTU3'@;
put 'MjBcdTU3MjFcdTU3MjJcdTU3MjRcdTU3MjVcdTU3MjZcdTU3MjdcdTU3MmJcdTU3MzFcdTU3MzJcdTU3MzRcdTU3MzVcdTU3MzZcdTU3MzdcdTU3MzhcdTU3M2NcdTU3M2RcdTU3M2ZcdTU3NDFcdTU3NDNcdTU3NDRcdTU3NDVcdTU3NDZcdTU3NDhcdTU3NDlcdTU3NGJcdTU3NTJcdTU3NTNc'@;
put 'dTU3NTRcdTU3NTVcdTU3NTZcdTU3NThcdTU3NTlcdTU3NjJcdTU3NjNcdTU3NjVcdTU3NjdcdTU3NmNcdTU3NmVcdTU3NzBcdTU3NzFcdTU3NzJcdTU3NzRcdTU3NzVcdTU3NzhcdTU3NzlcdTU3N2FcdTU3N2RcdTU3N2VcdTU3N2ZcdTU3ODBcdWZmZmRcdTU3ODFcdTU3ODdcdTU3ODhcdTU3'@;
put 'ODlcdTU3OGFcdTU3OGRcdTU3OGVcdTU3OGZcdTU3OTBcdTU3OTFcdTU3OTRcdTU3OTVcdTU3OTZcdTU3OTdcdTU3OThcdTU3OTlcdTU3OWFcdTU3OWNcdTU3OWRcdTU3OWVcdTU3OWZcdTU3YTVcdTU3YThcdTU3YWFcdTU3YWNcdTU3YWZcdTU3YjBcdTU3YjFcdTU3YjNcdTU3YjVcdTU3YjZc'@;
put 'dTU3YjdcdTU3YjlcdTU3YmFcdTU3YmJcdTU3YmNcdTU3YmRcdTU3YmVcdTU3YmZcdTU3YzBcdTU3YzFcdTU3YzRcdTU3YzVcdTU3YzZcdTU3YzdcdTU3YzhcdTU3YzlcdTU3Y2FcdTU3Y2NcdTU3Y2RcdTU3ZDBcdTU3ZDFcdTU3ZDNcdTU3ZDZcdTU3ZDdcdTU3ZGJcdTU3ZGNcdTU3ZGVcdTU3'@;
put 'ZTFcdTU3ZTJcdTU3ZTNcdTU3ZTVcdTU3ZTZcdTU3ZTdcdTU3ZThcdTU3ZTlcdTU3ZWFcdTU3ZWJcdTU3ZWNcdTU3ZWVcdTU3ZjBcdTU3ZjFcdTU3ZjJcdTU3ZjNcdTU3ZjVcdTU3ZjZcdTU3ZjdcdTU3ZmJcdTU3ZmNcdTU3ZmVcdTU3ZmZcdTU4MDFcdTU4MDNcdTU4MDRcdTU4MDVcdTU4MDhc'@;
put 'dTU4MDlcdTU4MGFcdTU4MGNcdTU4MGVcdTU4MGZcdTU4MTBcdTU4MTJcdTU4MTNcdTU4MTRcdTU4MTZcdTU4MTdcdTU4MThcdTU4MWFcdTU4MWJcdTU4MWNcdTU4MWRcdTU4MWZcdTU4MjJcdTU4MjNcdTU4MjVcdTU4MjZcdTU4MjdcdTU4MjhcdTU4MjlcdTU4MmJcdTU4MmNcdTU4MmRcdTU4'@;
put 'MmVcdTU4MmZcdTU4MzFcdTU4MzJcdTU4MzNcdTU4MzRcdTU4MzZcdTU4MzdcdTU4MzhcdTU4MzlcdTU4M2FcdTU4M2JcdTU4M2NcdTU4M2RcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxMzZdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzEzNl1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTM2'@;
put 'XVt2XV09MzQ4MTYrdixUWzM0ODE2K3ZdPWtbMTM2XVt2XSk7Zm9yKGtbMTM3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ODNlXHU1ODNmXHU1ODQwXHU1ODQxXHU1ODQyXHU1ODQzXHU1ODQ1XHU1ODQ2XHU1ODQ3XHU1ODQ4XHU1'@;
put 'ODQ5XHU1ODRhXHU1ODRiXHU1ODRlXHU1ODRmXHU1ODUwXHU1ODUyXHU1ODUzXHU1ODU1XHU1ODU2XHU1ODU3XHU1ODU5XHU1ODVhXHU1ODViXHU1ODVjXHU1ODVkXHU1ODVmXHU1ODYwXHU1ODYxXHU1ODYyXHU1ODYzXHU1ODY0XHU1ODY2XHU1ODY3XHU1ODY4XHU1ODY5XHU1ODZhXHU1ODZk'@;
put 'XHU1ODZlXHU1ODZmXHU1ODcwXHU1ODcxXHU1ODcyXHU1ODczXHU1ODc0XHU1ODc1XHU1ODc2XHU1ODc3XHU1ODc4XHU1ODc5XHU1ODdhXHU1ODdiXHU1ODdjXHU1ODdkXHU1ODdmXHU1ODgyXHU1ODg0XHU1ODg2XHU1ODg3XHU1ODg4XHU1ODhhXHU1ODhiXHU1ODhjXHVmZmZkXHU1ODhkXHU1'@;
put 'ODhlXHU1ODhmXHU1ODkwXHU1ODkxXHU1ODk0XHU1ODk1XHU1ODk2XHU1ODk3XHU1ODk4XHU1ODliXHU1ODljXHU1ODlkXHU1OGEwXHU1OGExXHU1OGEyXHU1OGEzXHU1OGE0XHU1OGE1XHU1OGE2XHU1OGE3XHU1OGFhXHU1OGFiXHU1OGFjXHU1OGFkXHU1OGFlXHU1OGFmXHU1OGIwXHU1OGIx'@;
put 'XHU1OGIyXHU1OGIzXHU1OGI0XHU1OGI1XHU1OGI2XHU1OGI3XHU1OGI4XHU1OGI5XHU1OGJhXHU1OGJiXHU1OGJkXHU1OGJlXHU1OGJmXHU1OGMwXHU1OGMyXHU1OGMzXHU1OGM0XHU1OGM2XHU1OGM3XHU1OGM4XHU1OGM5XHU1OGNhXHU1OGNiXHU1OGNjXHU1OGNkXHU1OGNlXHU1OGNmXHU1'@;
put 'OGQwXHU1OGQyXHU1OGQzXHU1OGQ0XHU1OGQ2XHU1OGQ3XHU1OGQ4XHU1OGQ5XHU1OGRhXHU1OGRiXHU1OGRjXHU1OGRkXHU1OGRlXHU1OGRmXHU1OGUwXHU1OGUxXHU1OGUyXHU1OGUzXHU1OGU1XHU1OGU2XHU1OGU3XHU1OGU4XHU1OGU5XHU1OGVhXHU1OGVkXHU1OGVmXHU1OGYxXHU1OGYy'@;
put 'XHU1OGY0XHU1OGY1XHU1OGY3XHU1OGY4XHU1OGZhXHU1OGZiXHU1OGZjXHU1OGZkXHU1OGZlXHU1OGZmXHU1OTAwXHU1OTAxXHU1OTAzXHU1OTA1XHU1OTA2XHU1OTA4XHU1OTA5XHU1OTBhXHU1OTBiXHU1OTBjXHU1OTBlXHU1OTEwXHU1OTExXHU1OTEyXHU1OTEzXHU1OTE3XHU1OTE4XHU1'@;
put 'OTFiXHU1OTFkXHU1OTFlXHU1OTIwXHU1OTIxXHU1OTIyXHU1OTIzXHU1OTI2XHU1OTI4XHU1OTJjXHU1OTMwXHU1OTMyXHU1OTMzXHU1OTM1XHU1OTM2XHU1OTNiXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTM3XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxMzddW3ZdLmNoYXJDb2RlQXQo'@;
put 'MCkmJihzZVtrWzEzN11bdl1dPTM1MDcyK3YsVFszNTA3Mit2XT1rWzEzN11bdl0pO2ZvcihrWzEzOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTkzZFx1NTkzZVx1NTkzZlx1NTk0MFx1NTk0M1x1NTk0NVx1NTk0Nlx1NTk0YVx1'@;
put 'NTk0Y1x1NTk0ZFx1NTk1MFx1NTk1Mlx1NTk1M1x1NTk1OVx1NTk1Ylx1NTk1Y1x1NTk1ZFx1NTk1ZVx1NTk1Zlx1NTk2MVx1NTk2M1x1NTk2NFx1NTk2Nlx1NTk2N1x1NTk2OFx1NTk2OVx1NTk2YVx1NTk2Ylx1NTk2Y1x1NTk2ZFx1NTk2ZVx1NTk2Zlx1NTk3MFx1NTk3MVx1NTk3Mlx1NTk3'@;
put 'NVx1NTk3N1x1NTk3YVx1NTk3Ylx1NTk3Y1x1NTk3ZVx1NTk3Zlx1NTk4MFx1NTk4NVx1NTk4OVx1NTk4Ylx1NTk4Y1x1NTk4ZVx1NTk4Zlx1NTk5MFx1NTk5MVx1NTk5NFx1NTk5NVx1NTk5OFx1NTk5YVx1NTk5Ylx1NTk5Y1x1NTk5ZFx1NTk5Zlx1NTlhMFx1NTlhMVx1NTlhMlx1NTlhNlx1'@;
put 'ZmZmZFx1NTlhN1x1NTlhY1x1NTlhZFx1NTliMFx1NTliMVx1NTliM1x1NTliNFx1NTliNVx1NTliNlx1NTliN1x1NTliOFx1NTliYVx1NTliY1x1NTliZFx1NTliZlx1NTljMFx1NTljMVx1NTljMlx1NTljM1x1NTljNFx1NTljNVx1NTljN1x1NTljOFx1NTljOVx1NTljY1x1NTljZFx1NTlj'@;
put 'ZVx1NTljZlx1NTlkNVx1NTlkNlx1NTlkOVx1NTlkYlx1NTlkZVx1NTlkZlx1NTllMFx1NTllMVx1NTllMlx1NTllNFx1NTllNlx1NTllN1x1NTllOVx1NTllYVx1NTllYlx1NTllZFx1NTllZVx1NTllZlx1NTlmMFx1NTlmMVx1NTlmMlx1NTlmM1x1NTlmNFx1NTlmNVx1NTlmNlx1NTlmN1x1'@;
put 'NTlmOFx1NTlmYVx1NTlmY1x1NTlmZFx1NTlmZVx1NWEwMFx1NWEwMlx1NWEwYVx1NWEwYlx1NWEwZFx1NWEwZVx1NWEwZlx1NWExMFx1NWExMlx1NWExNFx1NWExNVx1NWExNlx1NWExN1x1NWExOVx1NWExYVx1NWExYlx1NWExZFx1NWExZVx1NWEyMVx1NWEyMlx1NWEyNFx1NWEyNlx1NWEy'@;
put 'N1x1NWEyOFx1NWEyYVx1NWEyYlx1NWEyY1x1NWEyZFx1NWEyZVx1NWEyZlx1NWEzMFx1NWEzM1x1NWEzNVx1NWEzN1x1NWEzOFx1NWEzOVx1NWEzYVx1NWEzYlx1NWEzZFx1NWEzZVx1NWEzZlx1NWE0MVx1NWE0Mlx1NWE0M1x1NWE0NFx1NWE0NVx1NWE0N1x1NWE0OFx1NWE0Ylx1NWE0Y1x1'@;
put 'NWE0ZFx1NWE0ZVx1NWE0Zlx1NWE1MFx1NWE1MVx1NWE1Mlx1NWE1M1x1NWE1NFx1NWE1Nlx1NWE1N1x1NWE1OFx1NWE1OVx1NWE1Ylx1NWE1Y1x1NWE1ZFx1NWE1ZVx1NWE1Zlx1NWE2MFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzEzOF0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTM4XVt2'@;
put 'XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxMzhdW3ZdXT0zNTMyOCt2LFRbMzUzMjgrdl09a1sxMzhdW3ZdKTtmb3Ioa1sxMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVhNjFcdTVhNjNcdTVhNjRcdTVhNjVcdTVhNjZcdTVhNjhc'@;
put 'dTVhNjlcdTVhNmJcdTVhNmNcdTVhNmRcdTVhNmVcdTVhNmZcdTVhNzBcdTVhNzFcdTVhNzJcdTVhNzNcdTVhNzhcdTVhNzlcdTVhN2JcdTVhN2NcdTVhN2RcdTVhN2VcdTVhODBcdTVhODFcdTVhODJcdTVhODNcdTVhODRcdTVhODVcdTVhODZcdTVhODdcdTVhODhcdTVhODlcdTVhOGFcdTVh'@;
put 'OGJcdTVhOGNcdTVhOGRcdTVhOGVcdTVhOGZcdTVhOTBcdTVhOTFcdTVhOTNcdTVhOTRcdTVhOTVcdTVhOTZcdTVhOTdcdTVhOThcdTVhOTlcdTVhOWNcdTVhOWRcdTVhOWVcdTVhOWZcdTVhYTBcdTVhYTFcdTVhYTJcdTVhYTNcdTVhYTRcdTVhYTVcdTVhYTZcdTVhYTdcdTVhYThcdTVhYTlc'@;
put 'dTVhYWJcdTVhYWNcdWZmZmRcdTVhYWRcdTVhYWVcdTVhYWZcdTVhYjBcdTVhYjFcdTVhYjRcdTVhYjZcdTVhYjdcdTVhYjlcdTVhYmFcdTVhYmJcdTVhYmNcdTVhYmRcdTVhYmZcdTVhYzBcdTVhYzNcdTVhYzRcdTVhYzVcdTVhYzZcdTVhYzdcdTVhYzhcdTVhY2FcdTVhY2JcdTVhY2RcdTVh'@;
put 'Y2VcdTVhY2ZcdTVhZDBcdTVhZDFcdTVhZDNcdTVhZDVcdTVhZDdcdTVhZDlcdTVhZGFcdTVhZGJcdTVhZGRcdTVhZGVcdTVhZGZcdTVhZTJcdTVhZTRcdTVhZTVcdTVhZTdcdTVhZThcdTVhZWFcdTVhZWNcdTVhZWRcdTVhZWVcdTVhZWZcdTVhZjBcdTVhZjJcdTVhZjNcdTVhZjRcdTVhZjVc'@;
put 'dTVhZjZcdTVhZjdcdTVhZjhcdTVhZjlcdTVhZmFcdTVhZmJcdTVhZmNcdTVhZmRcdTVhZmVcdTVhZmZcdTViMDBcdTViMDFcdTViMDJcdTViMDNcdTViMDRcdTViMDVcdTViMDZcdTViMDdcdTViMDhcdTViMGFcdTViMGJcdTViMGNcdTViMGRcdTViMGVcdTViMGZcdTViMTBcdTViMTFcdTVi'@;
put 'MTJcdTViMTNcdTViMTRcdTViMTVcdTViMThcdTViMTlcdTViMWFcdTViMWJcdTViMWNcdTViMWRcdTViMWVcdTViMWZcdTViMjBcdTViMjFcdTViMjJcdTViMjNcdTViMjRcdTViMjVcdTViMjZcdTViMjdcdTViMjhcdTViMjlcdTViMmFcdTViMmJcdTViMmNcdTViMmRcdTViMmVcdTViMmZc'@;
put 'dTViMzBcdTViMzFcdTViMzNcdTViMzVcdTViMzZcdTViMzhcdTViMzlcdTViM2FcdTViM2JcdTViM2NcdTViM2RcdTViM2VcdTViM2ZcdTViNDFcdTViNDJcdTViNDNcdTViNDRcdTViNDVcdTViNDZcdTViNDdcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxMzldLmxlbmd0aDsrK3YpNjU1'@;
put 'MzMhPT1rWzEzOV1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTM5XVt2XV09MzU1ODQrdixUWzM1NTg0K3ZdPWtbMTM5XVt2XSk7Zm9yKGtbMTQwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YjQ4XHU1YjQ5XHU1YjRhXHU1YjRi'@;
put 'XHU1YjRjXHU1YjRkXHU1YjRlXHU1YjRmXHU1YjUyXHU1YjU2XHU1YjVlXHU1YjYwXHU1YjYxXHU1YjY3XHU1YjY4XHU1YjZiXHU1YjZkXHU1YjZlXHU1YjZmXHU1YjcyXHU1Yjc0XHU1Yjc2XHU1Yjc3XHU1Yjc4XHU1Yjc5XHU1YjdiXHU1YjdjXHU1YjdlXHU1YjdmXHU1YjgyXHU1Yjg2XHU1'@;
put 'YjhhXHU1YjhkXHU1YjhlXHU1YjkwXHU1YjkxXHU1YjkyXHU1Yjk0XHU1Yjk2XHU1YjlmXHU1YmE3XHU1YmE4XHU1YmE5XHU1YmFjXHU1YmFkXHU1YmFlXHU1YmFmXHU1YmIxXHU1YmIyXHU1YmI3XHU1YmJhXHU1YmJiXHU1YmJjXHU1YmMwXHU1YmMxXHU1YmMzXHU1YmM4XHU1YmM5XHU1YmNh'@;
put 'XHU1YmNiXHU1YmNkXHU1YmNlXHU1YmNmXHVmZmZkXHU1YmQxXHU1YmQ0XHU1YmQ1XHU1YmQ2XHU1YmQ3XHU1YmQ4XHU1YmQ5XHU1YmRhXHU1YmRiXHU1YmRjXHU1YmUwXHU1YmUyXHU1YmUzXHU1YmU2XHU1YmU3XHU1YmU5XHU1YmVhXHU1YmViXHU1YmVjXHU1YmVkXHU1YmVmXHU1YmYxXHU1'@;
put 'YmYyXHU1YmYzXHU1YmY0XHU1YmY1XHU1YmY2XHU1YmY3XHU1YmZkXHU1YmZlXHU1YzAwXHU1YzAyXHU1YzAzXHU1YzA1XHU1YzA3XHU1YzA4XHU1YzBiXHU1YzBjXHU1YzBkXHU1YzBlXHU1YzEwXHU1YzEyXHU1YzEzXHU1YzE3XHU1YzE5XHU1YzFiXHU1YzFlXHU1YzFmXHU1YzIwXHU1YzIx'@;
put 'XHU1YzIzXHU1YzI2XHU1YzI4XHU1YzI5XHU1YzJhXHU1YzJiXHU1YzJkXHU1YzJlXHU1YzJmXHU1YzMwXHU1YzMyXHU1YzMzXHU1YzM1XHU1YzM2XHU1YzM3XHU1YzQzXHU1YzQ0XHU1YzQ2XHU1YzQ3XHU1YzRjXHU1YzRkXHU1YzUyXHU1YzUzXHU1YzU0XHU1YzU2XHU1YzU3XHU1YzU4XHU1'@;
put 'YzVhXHU1YzViXHU1YzVjXHU1YzVkXHU1YzVmXHU1YzYyXHU1YzY0XHU1YzY3XHU1YzY4XHU1YzY5XHU1YzZhXHU1YzZiXHU1YzZjXHU1YzZkXHU1YzcwXHU1YzcyXHU1YzczXHU1Yzc0XHU1Yzc1XHU1Yzc2XHU1Yzc3XHU1Yzc4XHU1YzdiXHU1YzdjXHU1YzdkXHU1YzdlXHU1YzgwXHU1Yzgz'@;
put 'XHU1Yzg0XHU1Yzg1XHU1Yzg2XHU1Yzg3XHU1Yzg5XHU1YzhhXHU1YzhiXHU1YzhlXHU1YzhmXHU1YzkyXHU1YzkzXHU1Yzk1XHU1YzlkXHU1YzllXHU1YzlmXHU1Y2EwXHU1Y2ExXHU1Y2E0XHU1Y2E1XHU1Y2E2XHU1Y2E3XHU1Y2E4XHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTQwXS5s'@;
put 'ZW5ndGg7Kyt2KTY1NTMzIT09a1sxNDBdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE0MF1bdl1dPTM1ODQwK3YsVFszNTg0MCt2XT1rWzE0MF1bdl0pO2ZvcihrWzE0MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWNhYVx1NWNh'@;
put 'ZVx1NWNhZlx1NWNiMFx1NWNiMlx1NWNiNFx1NWNiNlx1NWNiOVx1NWNiYVx1NWNiYlx1NWNiY1x1NWNiZVx1NWNjMFx1NWNjMlx1NWNjM1x1NWNjNVx1NWNjNlx1NWNjN1x1NWNjOFx1NWNjOVx1NWNjYVx1NWNjY1x1NWNjZFx1NWNjZVx1NWNjZlx1NWNkMFx1NWNkMVx1NWNkM1x1NWNkNFx1'@;
put 'NWNkNVx1NWNkNlx1NWNkN1x1NWNkOFx1NWNkYVx1NWNkYlx1NWNkY1x1NWNkZFx1NWNkZVx1NWNkZlx1NWNlMFx1NWNlMlx1NWNlM1x1NWNlN1x1NWNlOVx1NWNlYlx1NWNlY1x1NWNlZVx1NWNlZlx1NWNmMVx1NWNmMlx1NWNmM1x1NWNmNFx1NWNmNVx1NWNmNlx1NWNmN1x1NWNmOFx1NWNm'@;
put 'OVx1NWNmYVx1NWNmY1x1NWNmZFx1NWNmZVx1NWNmZlx1NWQwMFx1ZmZmZFx1NWQwMVx1NWQwNFx1NWQwNVx1NWQwOFx1NWQwOVx1NWQwYVx1NWQwYlx1NWQwY1x1NWQwZFx1NWQwZlx1NWQxMFx1NWQxMVx1NWQxMlx1NWQxM1x1NWQxNVx1NWQxN1x1NWQxOFx1NWQxOVx1NWQxYVx1NWQxY1x1'@;
put 'NWQxZFx1NWQxZlx1NWQyMFx1NWQyMVx1NWQyMlx1NWQyM1x1NWQyNVx1NWQyOFx1NWQyYVx1NWQyYlx1NWQyY1x1NWQyZlx1NWQzMFx1NWQzMVx1NWQzMlx1NWQzM1x1NWQzNVx1NWQzNlx1NWQzN1x1NWQzOFx1NWQzOVx1NWQzYVx1NWQzYlx1NWQzY1x1NWQzZlx1NWQ0MFx1NWQ0MVx1NWQ0'@;
put 'Mlx1NWQ0M1x1NWQ0NFx1NWQ0NVx1NWQ0Nlx1NWQ0OFx1NWQ0OVx1NWQ0ZFx1NWQ0ZVx1NWQ0Zlx1NWQ1MFx1NWQ1MVx1NWQ1Mlx1NWQ1M1x1NWQ1NFx1NWQ1NVx1NWQ1Nlx1NWQ1N1x1NWQ1OVx1NWQ1YVx1NWQ1Y1x1NWQ1ZVx1NWQ1Zlx1NWQ2MFx1NWQ2MVx1NWQ2Mlx1NWQ2M1x1NWQ2NFx1'@;
put 'NWQ2NVx1NWQ2Nlx1NWQ2N1x1NWQ2OFx1NWQ2YVx1NWQ2ZFx1NWQ2ZVx1NWQ3MFx1NWQ3MVx1NWQ3Mlx1NWQ3M1x1NWQ3NVx1NWQ3Nlx1NWQ3N1x1NWQ3OFx1NWQ3OVx1NWQ3YVx1NWQ3Ylx1NWQ3Y1x1NWQ3ZFx1NWQ3ZVx1NWQ3Zlx1NWQ4MFx1NWQ4MVx1NWQ4M1x1NWQ4NFx1NWQ4NVx1NWQ4'@;
put 'Nlx1NWQ4N1x1NWQ4OFx1NWQ4OVx1NWQ4YVx1NWQ4Ylx1NWQ4Y1x1NWQ4ZFx1NWQ4ZVx1NWQ4Zlx1NWQ5MFx1NWQ5MVx1NWQ5Mlx1NWQ5M1x1NWQ5NFx1NWQ5NVx1NWQ5Nlx1NWQ5N1x1NWQ5OFx1NWQ5YVx1NWQ5Ylx1NWQ5Y1x1NWQ5ZVx1NWQ5Zlx1NWRhMFx1ZmZmZCIuc3BsaXQoIiIpLHY9'@;
put 'MDt2IT1rWzE0MV0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTQxXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxNDFdW3ZdXT0zNjA5Nit2LFRbMzYwOTYrdl09a1sxNDFdW3ZdKTtmb3Ioa1sxNDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdTVkYTFcdTVkYTJcdTVkYTNcdTVkYTRcdTVkYTVcdTVkYTZcdTVkYTdcdTVkYThcdTVkYTlcdTVkYWFcdTVkYWJcdTVkYWNcdTVkYWRcdTVkYWVcdTVkYWZcdTVkYjBcdTVkYjFcdTVkYjJcdTVkYjNcdTVkYjRcdTVkYjVcdTVkYjZcdTVkYjhcdTVkYjlcdTVkYmFcdTVkYmJcdTVkYmNc'@;
put 'dTVkYmRcdTVkYmVcdTVkYmZcdTVkYzBcdTVkYzFcdTVkYzJcdTVkYzNcdTVkYzRcdTVkYzZcdTVkYzdcdTVkYzhcdTVkYzlcdTVkY2FcdTVkY2JcdTVkY2NcdTVkY2VcdTVkY2ZcdTVkZDBcdTVkZDFcdTVkZDJcdTVkZDNcdTVkZDRcdTVkZDVcdTVkZDZcdTVkZDdcdTVkZDhcdTVkZDlcdTVk'@;
put 'ZGFcdTVkZGNcdTVkZGZcdTVkZTBcdTVkZTNcdTVkZTRcdTVkZWFcdTVkZWNcdTVkZWRcdWZmZmRcdTVkZjBcdTVkZjVcdTVkZjZcdTVkZjhcdTVkZjlcdTVkZmFcdTVkZmJcdTVkZmNcdTVkZmZcdTVlMDBcdTVlMDRcdTVlMDdcdTVlMDlcdTVlMGFcdTVlMGJcdTVlMGRcdTVlMGVcdTVlMTJc'@;
put 'dTVlMTNcdTVlMTdcdTVlMWVcdTVlMWZcdTVlMjBcdTVlMjFcdTVlMjJcdTVlMjNcdTVlMjRcdTVlMjVcdTVlMjhcdTVlMjlcdTVlMmFcdTVlMmJcdTVlMmNcdTVlMmZcdTVlMzBcdTVlMzJcdTVlMzNcdTVlMzRcdTVlMzVcdTVlMzZcdTVlMzlcdTVlM2FcdTVlM2VcdTVlM2ZcdTVlNDBcdTVl'@;
put 'NDFcdTVlNDNcdTVlNDZcdTVlNDdcdTVlNDhcdTVlNDlcdTVlNGFcdTVlNGJcdTVlNGRcdTVlNGVcdTVlNGZcdTVlNTBcdTVlNTFcdTVlNTJcdTVlNTNcdTVlNTZcdTVlNTdcdTVlNThcdTVlNTlcdTVlNWFcdTVlNWNcdTVlNWRcdTVlNWZcdTVlNjBcdTVlNjNcdTVlNjRcdTVlNjVcdTVlNjZc'@;
put 'dTVlNjdcdTVlNjhcdTVlNjlcdTVlNmFcdTVlNmJcdTVlNmNcdTVlNmRcdTVlNmVcdTVlNmZcdTVlNzBcdTVlNzFcdTVlNzVcdTVlNzdcdTVlNzlcdTVlN2VcdTVlODFcdTVlODJcdTVlODNcdTVlODVcdTVlODhcdTVlODlcdTVlOGNcdTVlOGRcdTVlOGVcdTVlOTJcdTVlOThcdTVlOWJcdTVl'@;
put 'OWRcdTVlYTFcdTVlYTJcdTVlYTNcdTVlYTRcdTVlYThcdTVlYTlcdTVlYWFcdTVlYWJcdTVlYWNcdTVlYWVcdTVlYWZcdTVlYjBcdTVlYjFcdTVlYjJcdTVlYjRcdTVlYmFcdTVlYmJcdTVlYmNcdTVlYmRcdTVlYmZcdTVlYzBcdTVlYzFcdTVlYzJcdTVlYzNcdTVlYzRcdTVlYzVcdWZmZmQi'@;
put 'LnNwbGl0KCIiKSx2PTA7diE9a1sxNDJdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE0Ml1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTQyXVt2XV09MzYzNTIrdixUWzM2MzUyK3ZdPWtbMTQyXVt2XSk7Zm9yKGtbMTQzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHU1ZWM2XHU1ZWM3XHU1ZWM4XHU1ZWNiXHU1ZWNjXHU1ZWNkXHU1ZWNlXHU1ZWNmXHU1ZWQwXHU1ZWQ0XHU1ZWQ1XHU1ZWQ3XHU1ZWQ4XHU1ZWQ5XHU1ZWRhXHU1ZWRjXHU1ZWRkXHU1ZWRlXHU1ZWRmXHU1ZWUwXHU1ZWUxXHU1ZWUyXHU1ZWUzXHU1ZWU0XHU1ZWU1'@;
put 'XHU1ZWU2XHU1ZWU3XHU1ZWU5XHU1ZWViXHU1ZWVjXHU1ZWVkXHU1ZWVlXHU1ZWVmXHU1ZWYwXHU1ZWYxXHU1ZWYyXHU1ZWYzXHU1ZWY1XHU1ZWY4XHU1ZWY5XHU1ZWZiXHU1ZWZjXHU1ZWZkXHU1ZjA1XHU1ZjA2XHU1ZjA3XHU1ZjA5XHU1ZjBjXHU1ZjBkXHU1ZjBlXHU1ZjEwXHU1ZjEyXHU1'@;
put 'ZjE0XHU1ZjE2XHU1ZjE5XHU1ZjFhXHU1ZjFjXHU1ZjFkXHU1ZjFlXHU1ZjIxXHU1ZjIyXHU1ZjIzXHU1ZjI0XHVmZmZkXHU1ZjI4XHU1ZjJiXHU1ZjJjXHU1ZjJlXHU1ZjMwXHU1ZjMyXHU1ZjMzXHU1ZjM0XHU1ZjM1XHU1ZjM2XHU1ZjM3XHU1ZjM4XHU1ZjNiXHU1ZjNkXHU1ZjNlXHU1ZjNm'@;
put 'XHU1ZjQxXHU1ZjQyXHU1ZjQzXHU1ZjQ0XHU1ZjQ1XHU1ZjQ2XHU1ZjQ3XHU1ZjQ4XHU1ZjQ5XHU1ZjRhXHU1ZjRiXHU1ZjRjXHU1ZjRkXHU1ZjRlXHU1ZjRmXHU1ZjUxXHU1ZjU0XHU1ZjU5XHU1ZjVhXHU1ZjViXHU1ZjVjXHU1ZjVlXHU1ZjVmXHU1ZjYwXHU1ZjYzXHU1ZjY1XHU1ZjY3XHU1'@;
put 'ZjY4XHU1ZjZiXHU1ZjZlXHU1ZjZmXHU1ZjcyXHU1Zjc0XHU1Zjc1XHU1Zjc2XHU1Zjc4XHU1ZjdhXHU1ZjdkXHU1ZjdlXHU1ZjdmXHU1ZjgzXHU1Zjg2XHU1ZjhkXHU1ZjhlXHU1ZjhmXHU1ZjkxXHU1ZjkzXHU1Zjk0XHU1Zjk2XHU1ZjlhXHU1ZjliXHU1ZjlkXHU1ZjllXHU1ZjlmXHU1ZmEw'@;
put 'XHU1ZmEyXHU1ZmEzXHU1ZmE0XHU1ZmE1XHU1ZmE2XHU1ZmE3XHU1ZmE5XHU1ZmFiXHU1ZmFjXHU1ZmFmXHU1ZmIwXHU1ZmIxXHU1ZmIyXHU1ZmIzXHU1ZmI0XHU1ZmI2XHU1ZmI4XHU1ZmI5XHU1ZmJhXHU1ZmJiXHU1ZmJlXHU1ZmJmXHU1ZmMwXHU1ZmMxXHU1ZmMyXHU1ZmM3XHU1ZmM4XHU1'@;
put 'ZmNhXHU1ZmNiXHU1ZmNlXHU1ZmQzXHU1ZmQ0XHU1ZmQ1XHU1ZmRhXHU1ZmRiXHU1ZmRjXHU1ZmRlXHU1ZmRmXHU1ZmUyXHU1ZmUzXHU1ZmU1XHU1ZmU2XHU1ZmU4XHU1ZmU5XHU1ZmVjXHU1ZmVmXHU1ZmYwXHU1ZmYyXHU1ZmYzXHU1ZmY0XHU1ZmY2XHU1ZmY3XHU1ZmY5XHU1ZmZhXHU1ZmZj'@;
put 'XHU2MDA3XHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTQzXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxNDNdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE0M11bdl1dPTM2NjA4K3YsVFszNjYwOCt2XT1rWzE0M11bdl0pO2ZvcihrWzE0NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjAwOFx1NjAwOVx1NjAwYlx1NjAwY1x1NjAxMFx1NjAxMVx1NjAxM1x1NjAxN1x1NjAxOFx1NjAxYVx1NjAxZVx1NjAxZlx1NjAyMlx1NjAyM1x1NjAyNFx1NjAyY1x1NjAyZFx1NjAyZVx1NjAzMFx1NjAzMVx1NjAzMlx1NjAzM1x1NjAz'@;
put 'NFx1NjAzNlx1NjAzN1x1NjAzOFx1NjAzOVx1NjAzYVx1NjAzZFx1NjAzZVx1NjA0MFx1NjA0NFx1NjA0NVx1NjA0Nlx1NjA0N1x1NjA0OFx1NjA0OVx1NjA0YVx1NjA0Y1x1NjA0ZVx1NjA0Zlx1NjA1MVx1NjA1M1x1NjA1NFx1NjA1Nlx1NjA1N1x1NjA1OFx1NjA1Ylx1NjA1Y1x1NjA1ZVx1'@;
put 'NjA1Zlx1NjA2MFx1NjA2MVx1NjA2NVx1NjA2Nlx1NjA2ZVx1NjA3MVx1NjA3Mlx1NjA3NFx1NjA3NVx1NjA3N1x1NjA3ZVx1NjA4MFx1ZmZmZFx1NjA4MVx1NjA4Mlx1NjA4NVx1NjA4Nlx1NjA4N1x1NjA4OFx1NjA4YVx1NjA4Ylx1NjA4ZVx1NjA4Zlx1NjA5MFx1NjA5MVx1NjA5M1x1NjA5'@;
put 'NVx1NjA5N1x1NjA5OFx1NjA5OVx1NjA5Y1x1NjA5ZVx1NjBhMVx1NjBhMlx1NjBhNFx1NjBhNVx1NjBhN1x1NjBhOVx1NjBhYVx1NjBhZVx1NjBiMFx1NjBiM1x1NjBiNVx1NjBiNlx1NjBiN1x1NjBiOVx1NjBiYVx1NjBiZFx1NjBiZVx1NjBiZlx1NjBjMFx1NjBjMVx1NjBjMlx1NjBjM1x1'@;
put 'NjBjNFx1NjBjN1x1NjBjOFx1NjBjOVx1NjBjY1x1NjBjZFx1NjBjZVx1NjBjZlx1NjBkMFx1NjBkMlx1NjBkM1x1NjBkNFx1NjBkNlx1NjBkN1x1NjBkOVx1NjBkYlx1NjBkZVx1NjBlMVx1NjBlMlx1NjBlM1x1NjBlNFx1NjBlNVx1NjBlYVx1NjBmMVx1NjBmMlx1NjBmNVx1NjBmN1x1NjBm'@;
put 'OFx1NjBmYlx1NjBmY1x1NjBmZFx1NjBmZVx1NjBmZlx1NjEwMlx1NjEwM1x1NjEwNFx1NjEwNVx1NjEwN1x1NjEwYVx1NjEwYlx1NjEwY1x1NjExMFx1NjExMVx1NjExMlx1NjExM1x1NjExNFx1NjExNlx1NjExN1x1NjExOFx1NjExOVx1NjExYlx1NjExY1x1NjExZFx1NjExZVx1NjEyMVx1'@;
put 'NjEyMlx1NjEyNVx1NjEyOFx1NjEyOVx1NjEyYVx1NjEyY1x1NjEyZFx1NjEyZVx1NjEyZlx1NjEzMFx1NjEzMVx1NjEzMlx1NjEzM1x1NjEzNFx1NjEzNVx1NjEzNlx1NjEzN1x1NjEzOFx1NjEzOVx1NjEzYVx1NjEzYlx1NjEzY1x1NjEzZFx1NjEzZVx1NjE0MFx1NjE0MVx1NjE0Mlx1NjE0'@;
put 'M1x1NjE0NFx1NjE0NVx1NjE0Nlx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE0NF0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTQ0XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxNDRdW3ZdXT0zNjg2NCt2LFRbMzY4NjQrdl09a1sxNDRdW3ZdKTtmb3Ioa1sxNDVdPSJcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYxNDdcdTYxNDlcdTYxNGJcdTYxNGRcdTYxNGZcdTYxNTBcdTYxNTJcdTYxNTNcdTYxNTRcdTYxNTZcdTYxNTdcdTYxNThcdTYxNTlcdTYxNWFcdTYxNWJcdTYxNWNcdTYxNWVcdTYxNWZcdTYxNjBcdTYxNjFcdTYx'@;
put 'NjNcdTYxNjRcdTYxNjVcdTYxNjZcdTYxNjlcdTYxNmFcdTYxNmJcdTYxNmNcdTYxNmRcdTYxNmVcdTYxNmZcdTYxNzFcdTYxNzJcdTYxNzNcdTYxNzRcdTYxNzZcdTYxNzhcdTYxNzlcdTYxN2FcdTYxN2JcdTYxN2NcdTYxN2RcdTYxN2VcdTYxN2ZcdTYxODBcdTYxODFcdTYxODJcdTYxODNc'@;
put 'dTYxODRcdTYxODVcdTYxODZcdTYxODdcdTYxODhcdTYxODlcdTYxOGFcdTYxOGNcdTYxOGRcdTYxOGZcdTYxOTBcdTYxOTFcdTYxOTJcdTYxOTNcdTYxOTVcdWZmZmRcdTYxOTZcdTYxOTdcdTYxOThcdTYxOTlcdTYxOWFcdTYxOWJcdTYxOWNcdTYxOWVcdTYxOWZcdTYxYTBcdTYxYTFcdTYx'@;
put 'YTJcdTYxYTNcdTYxYTRcdTYxYTVcdTYxYTZcdTYxYWFcdTYxYWJcdTYxYWRcdTYxYWVcdTYxYWZcdTYxYjBcdTYxYjFcdTYxYjJcdTYxYjNcdTYxYjRcdTYxYjVcdTYxYjZcdTYxYjhcdTYxYjlcdTYxYmFcdTYxYmJcdTYxYmNcdTYxYmRcdTYxYmZcdTYxYzBcdTYxYzFcdTYxYzNcdTYxYzRc'@;
put 'dTYxYzVcdTYxYzZcdTYxYzdcdTYxYzlcdTYxY2NcdTYxY2RcdTYxY2VcdTYxY2ZcdTYxZDBcdTYxZDNcdTYxZDVcdTYxZDZcdTYxZDdcdTYxZDhcdTYxZDlcdTYxZGFcdTYxZGJcdTYxZGNcdTYxZGRcdTYxZGVcdTYxZGZcdTYxZTBcdTYxZTFcdTYxZTJcdTYxZTNcdTYxZTRcdTYxZTVcdTYx'@;
put 'ZTdcdTYxZThcdTYxZTlcdTYxZWFcdTYxZWJcdTYxZWNcdTYxZWRcdTYxZWVcdTYxZWZcdTYxZjBcdTYxZjFcdTYxZjJcdTYxZjNcdTYxZjRcdTYxZjZcdTYxZjdcdTYxZjhcdTYxZjlcdTYxZmFcdTYxZmJcdTYxZmNcdTYxZmRcdTYxZmVcdTYyMDBcdTYyMDFcdTYyMDJcdTYyMDNcdTYyMDRc'@;
put 'dTYyMDVcdTYyMDdcdTYyMDlcdTYyMTNcdTYyMTRcdTYyMTlcdTYyMWNcdTYyMWRcdTYyMWVcdTYyMjBcdTYyMjNcdTYyMjZcdTYyMjdcdTYyMjhcdTYyMjlcdTYyMmJcdTYyMmRcdTYyMmZcdTYyMzBcdTYyMzFcdTYyMzJcdTYyMzVcdTYyMzZcdTYyMzhcdTYyMzlcdTYyM2FcdTYyM2JcdTYy'@;
put 'M2NcdTYyNDJcdTYyNDRcdTYyNDVcdTYyNDZcdTYyNGFcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxNDVdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE0NV1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTQ1XVt2XV09MzcxMjArdixUWzM3MTIwK3ZdPWtbMTQ1XVt2XSk7Zm9yKGtbMTQ2XT0i'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MjRmXHU2MjUwXHU2MjU1XHU2MjU2XHU2MjU3XHU2MjU5XHU2MjVhXHU2MjVjXHU2MjVkXHU2MjVlXHU2MjVmXHU2MjYwXHU2MjYxXHU2MjYyXHU2MjY0XHU2MjY1XHU2MjY4XHU2MjcxXHU2'@;
put 'MjcyXHU2Mjc0XHU2Mjc1XHU2Mjc3XHU2Mjc4XHU2MjdhXHU2MjdiXHU2MjdkXHU2MjgxXHU2MjgyXHU2MjgzXHU2Mjg1XHU2Mjg2XHU2Mjg3XHU2Mjg4XHU2MjhiXHU2MjhjXHU2MjhkXHU2MjhlXHU2MjhmXHU2MjkwXHU2Mjk0XHU2Mjk5XHU2MjljXHU2MjlkXHU2MjllXHU2MmEzXHU2MmE2'@;
put 'XHU2MmE3XHU2MmE5XHU2MmFhXHU2MmFkXHU2MmFlXHU2MmFmXHU2MmIwXHU2MmIyXHU2MmIzXHU2MmI0XHU2MmI2XHU2MmI3XHU2MmI4XHU2MmJhXHU2MmJlXHU2MmMwXHU2MmMxXHVmZmZkXHU2MmMzXHU2MmNiXHU2MmNmXHU2MmQxXHU2MmQ1XHU2MmRkXHU2MmRlXHU2MmUwXHU2MmUxXHU2'@;
put 'MmU0XHU2MmVhXHU2MmViXHU2MmYwXHU2MmYyXHU2MmY1XHU2MmY4XHU2MmY5XHU2MmZhXHU2MmZiXHU2MzAwXHU2MzAzXHU2MzA0XHU2MzA1XHU2MzA2XHU2MzBhXHU2MzBiXHU2MzBjXHU2MzBkXHU2MzBmXHU2MzEwXHU2MzEyXHU2MzEzXHU2MzE0XHU2MzE1XHU2MzE3XHU2MzE4XHU2MzE5'@;
put 'XHU2MzFjXHU2MzI2XHU2MzI3XHU2MzI5XHU2MzJjXHU2MzJkXHU2MzJlXHU2MzMwXHU2MzMxXHU2MzMzXHU2MzM0XHU2MzM1XHU2MzM2XHU2MzM3XHU2MzM4XHU2MzNiXHU2MzNjXHU2MzNlXHU2MzNmXHU2MzQwXHU2MzQxXHU2MzQ0XHU2MzQ3XHU2MzQ4XHU2MzRhXHU2MzUxXHU2MzUyXHU2'@;
put 'MzUzXHU2MzU0XHU2MzU2XHU2MzU3XHU2MzU4XHU2MzU5XHU2MzVhXHU2MzViXHU2MzVjXHU2MzVkXHU2MzYwXHU2MzY0XHU2MzY1XHU2MzY2XHU2MzY4XHU2MzZhXHU2MzZiXHU2MzZjXHU2MzZmXHU2MzcwXHU2MzcyXHU2MzczXHU2Mzc0XHU2Mzc1XHU2Mzc4XHU2Mzc5XHU2MzdjXHU2Mzdk'@;
put 'XHU2MzdlXHU2MzdmXHU2MzgxXHU2MzgzXHU2Mzg0XHU2Mzg1XHU2Mzg2XHU2MzhiXHU2MzhkXHU2MzkxXHU2MzkzXHU2Mzk0XHU2Mzk1XHU2Mzk3XHU2Mzk5XHU2MzlhXHU2MzliXHU2MzljXHU2MzlkXHU2MzllXHU2MzlmXHU2M2ExXHU2M2E0XHU2M2E2XHU2M2FiXHU2M2FmXHU2M2IxXHU2'@;
put 'M2IyXHU2M2I1XHU2M2I2XHU2M2I5XHU2M2JiXHU2M2JkXHU2M2JmXHU2M2MwXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTQ2XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxNDZdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE0Nl1bdl1dPTM3Mzc2K3YsVFszNzM3Nit2XT1rWzE0Nl1bdl0p'@;
put 'O2ZvcihrWzE0N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjNjMVx1NjNjMlx1NjNjM1x1NjNjNVx1NjNjN1x1NjNjOFx1NjNjYVx1NjNjYlx1NjNjY1x1NjNkMVx1NjNkM1x1NjNkNFx1NjNkNVx1NjNkN1x1NjNkOFx1NjNkOVx1'@;
put 'NjNkYVx1NjNkYlx1NjNkY1x1NjNkZFx1NjNkZlx1NjNlMlx1NjNlNFx1NjNlNVx1NjNlNlx1NjNlN1x1NjNlOFx1NjNlYlx1NjNlY1x1NjNlZVx1NjNlZlx1NjNmMFx1NjNmMVx1NjNmM1x1NjNmNVx1NjNmN1x1NjNmOVx1NjNmYVx1NjNmYlx1NjNmY1x1NjNmZVx1NjQwM1x1NjQwNFx1NjQw'@;
put 'Nlx1NjQwN1x1NjQwOFx1NjQwOVx1NjQwYVx1NjQwZFx1NjQwZVx1NjQxMVx1NjQxMlx1NjQxNVx1NjQxNlx1NjQxN1x1NjQxOFx1NjQxOVx1NjQxYVx1NjQxZFx1NjQxZlx1NjQyMlx1NjQyM1x1NjQyNFx1ZmZmZFx1NjQyNVx1NjQyN1x1NjQyOFx1NjQyOVx1NjQyYlx1NjQyZVx1NjQyZlx1'@;
put 'NjQzMFx1NjQzMVx1NjQzMlx1NjQzM1x1NjQzNVx1NjQzNlx1NjQzN1x1NjQzOFx1NjQzOVx1NjQzYlx1NjQzY1x1NjQzZVx1NjQ0MFx1NjQ0Mlx1NjQ0M1x1NjQ0OVx1NjQ0Ylx1NjQ0Y1x1NjQ0ZFx1NjQ0ZVx1NjQ0Zlx1NjQ1MFx1NjQ1MVx1NjQ1M1x1NjQ1NVx1NjQ1Nlx1NjQ1N1x1NjQ1'@;
put 'OVx1NjQ1YVx1NjQ1Ylx1NjQ1Y1x1NjQ1ZFx1NjQ1Zlx1NjQ2MFx1NjQ2MVx1NjQ2Mlx1NjQ2M1x1NjQ2NFx1NjQ2NVx1NjQ2Nlx1NjQ2OFx1NjQ2YVx1NjQ2Ylx1NjQ2Y1x1NjQ2ZVx1NjQ2Zlx1NjQ3MFx1NjQ3MVx1NjQ3Mlx1NjQ3M1x1NjQ3NFx1NjQ3NVx1NjQ3Nlx1NjQ3N1x1NjQ3Ylx1'@;
put 'NjQ3Y1x1NjQ3ZFx1NjQ3ZVx1NjQ3Zlx1NjQ4MFx1NjQ4MVx1NjQ4M1x1NjQ4Nlx1NjQ4OFx1NjQ4OVx1NjQ4YVx1NjQ4Ylx1NjQ4Y1x1NjQ4ZFx1NjQ4ZVx1NjQ4Zlx1NjQ5MFx1NjQ5M1x1NjQ5NFx1NjQ5N1x1NjQ5OFx1NjQ5YVx1NjQ5Ylx1NjQ5Y1x1NjQ5ZFx1NjQ5Zlx1NjRhMFx1NjRh'@;
put 'MVx1NjRhMlx1NjRhM1x1NjRhNVx1NjRhNlx1NjRhN1x1NjRhOFx1NjRhYVx1NjRhYlx1NjRhZlx1NjRiMVx1NjRiMlx1NjRiM1x1NjRiNFx1NjRiNlx1NjRiOVx1NjRiYlx1NjRiZFx1NjRiZVx1NjRiZlx1NjRjMVx1NjRjM1x1NjRjNFx1NjRjNlx1NjRjN1x1NjRjOFx1NjRjOVx1NjRjYVx1'@;
put 'NjRjYlx1NjRjY1x1NjRjZlx1NjRkMVx1NjRkM1x1NjRkNFx1NjRkNVx1NjRkNlx1NjRkOVx1NjRkYVx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE0N10ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTQ3XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxNDddW3ZdXT0zNzYzMit2LFRbMzc2MzIr'@;
put 'dl09a1sxNDddW3ZdKTtmb3Ioa1sxNDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0ZGJcdTY0ZGNcdTY0ZGRcdTY0ZGZcdTY0ZTBcdTY0ZTFcdTY0ZTNcdTY0ZTVcdTY0ZTdcdTY0ZThcdTY0ZTlcdTY0ZWFcdTY0ZWJcdTY0ZWNc'@;
put 'dTY0ZWRcdTY0ZWVcdTY0ZWZcdTY0ZjBcdTY0ZjFcdTY0ZjJcdTY0ZjNcdTY0ZjRcdTY0ZjVcdTY0ZjZcdTY0ZjdcdTY0ZjhcdTY0ZjlcdTY0ZmFcdTY0ZmJcdTY0ZmNcdTY0ZmRcdTY0ZmVcdTY0ZmZcdTY1MDFcdTY1MDJcdTY1MDNcdTY1MDRcdTY1MDVcdTY1MDZcdTY1MDdcdTY1MDhcdTY1'@;
put 'MGFcdTY1MGJcdTY1MGNcdTY1MGRcdTY1MGVcdTY1MGZcdTY1MTBcdTY1MTFcdTY1MTNcdTY1MTRcdTY1MTVcdTY1MTZcdTY1MTdcdTY1MTlcdTY1MWFcdTY1MWJcdTY1MWNcdTY1MWRcdTY1MWVcdTY1MWZcdTY1MjBcdTY1MjFcdWZmZmRcdTY1MjJcdTY1MjNcdTY1MjRcdTY1MjZcdTY1Mjdc'@;
put 'dTY1MjhcdTY1MjlcdTY1MmFcdTY1MmNcdTY1MmRcdTY1MzBcdTY1MzFcdTY1MzJcdTY1MzNcdTY1MzdcdTY1M2FcdTY1M2NcdTY1M2RcdTY1NDBcdTY1NDFcdTY1NDJcdTY1NDNcdTY1NDRcdTY1NDZcdTY1NDdcdTY1NGFcdTY1NGJcdTY1NGRcdTY1NGVcdTY1NTBcdTY1NTJcdTY1NTNcdTY1'@;
put 'NTRcdTY1NTdcdTY1NThcdTY1NWFcdTY1NWNcdTY1NWZcdTY1NjBcdTY1NjFcdTY1NjRcdTY1NjVcdTY1NjdcdTY1NjhcdTY1NjlcdTY1NmFcdTY1NmRcdTY1NmVcdTY1NmZcdTY1NzFcdTY1NzNcdTY1NzVcdTY1NzZcdTY1NzhcdTY1NzlcdTY1N2FcdTY1N2JcdTY1N2NcdTY1N2RcdTY1N2Vc'@;
put 'dTY1N2ZcdTY1ODBcdTY1ODFcdTY1ODJcdTY1ODNcdTY1ODRcdTY1ODVcdTY1ODZcdTY1ODhcdTY1ODlcdTY1OGFcdTY1OGRcdTY1OGVcdTY1OGZcdTY1OTJcdTY1OTRcdTY1OTVcdTY1OTZcdTY1OThcdTY1OWFcdTY1OWRcdTY1OWVcdTY1YTBcdTY1YTJcdTY1YTNcdTY1YTZcdTY1YThcdTY1'@;
put 'YWFcdTY1YWNcdTY1YWVcdTY1YjFcdTY1YjJcdTY1YjNcdTY1YjRcdTY1YjVcdTY1YjZcdTY1YjdcdTY1YjhcdTY1YmFcdTY1YmJcdTY1YmVcdTY1YmZcdTY1YzBcdTY1YzJcdTY1YzdcdTY1YzhcdTY1YzlcdTY1Y2FcdTY1Y2RcdTY1ZDBcdTY1ZDFcdTY1ZDNcdTY1ZDRcdTY1ZDVcdTY1ZDhc'@;
put 'dTY1ZDlcdTY1ZGFcdTY1ZGJcdTY1ZGNcdTY1ZGRcdTY1ZGVcdTY1ZGZcdTY1ZTFcdTY1ZTNcdTY1ZTRcdTY1ZWFcdTY1ZWJcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxNDhdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE0OF1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTQ4XVt2XV09Mzc4'@;
put 'ODgrdixUWzM3ODg4K3ZdPWtbMTQ4XVt2XSk7Zm9yKGtbMTQ5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NWYyXHU2NWYzXHU2NWY0XHU2NWY1XHU2NWY4XHU2NWY5XHU2NWZiXHU2NWZjXHU2NWZkXHU2NWZlXHU2NWZmXHU2NjAx'@;
put 'XHU2NjA0XHU2NjA1XHU2NjA3XHU2NjA4XHU2NjA5XHU2NjBiXHU2NjBkXHU2NjEwXHU2NjExXHU2NjEyXHU2NjE2XHU2NjE3XHU2NjE4XHU2NjFhXHU2NjFiXHU2NjFjXHU2NjFlXHU2NjIxXHU2NjIyXHU2NjIzXHU2NjI0XHU2NjI2XHU2NjI5XHU2NjJhXHU2NjJiXHU2NjJjXHU2NjJlXHU2'@;
put 'NjMwXHU2NjMyXHU2NjMzXHU2NjM3XHU2NjM4XHU2NjM5XHU2NjNhXHU2NjNiXHU2NjNkXHU2NjNmXHU2NjQwXHU2NjQyXHU2NjQ0XHU2NjQ1XHU2NjQ2XHU2NjQ3XHU2NjQ4XHU2NjQ5XHU2NjRhXHU2NjRkXHU2NjRlXHU2NjUwXHU2NjUxXHU2NjU4XHVmZmZkXHU2NjU5XHU2NjViXHU2NjVj'@;
put 'XHU2NjVkXHU2NjVlXHU2NjYwXHU2NjYyXHU2NjYzXHU2NjY1XHU2NjY3XHU2NjY5XHU2NjZhXHU2NjZiXHU2NjZjXHU2NjZkXHU2NjcxXHU2NjcyXHU2NjczXHU2Njc1XHU2Njc4XHU2Njc5XHU2NjdiXHU2NjdjXHU2NjdkXHU2NjdmXHU2NjgwXHU2NjgxXHU2NjgzXHU2Njg1XHU2Njg2XHU2'@;
put 'Njg4XHU2Njg5XHU2NjhhXHU2NjhiXHU2NjhkXHU2NjhlXHU2NjhmXHU2NjkwXHU2NjkyXHU2NjkzXHU2Njk0XHU2Njk1XHU2Njk4XHU2Njk5XHU2NjlhXHU2NjliXHU2NjljXHU2NjllXHU2NjlmXHU2NmEwXHU2NmExXHU2NmEyXHU2NmEzXHU2NmE0XHU2NmE1XHU2NmE2XHU2NmE5XHU2NmFh'@;
put 'XHU2NmFiXHU2NmFjXHU2NmFkXHU2NmFmXHU2NmIwXHU2NmIxXHU2NmIyXHU2NmIzXHU2NmI1XHU2NmI2XHU2NmI3XHU2NmI4XHU2NmJhXHU2NmJiXHU2NmJjXHU2NmJkXHU2NmJmXHU2NmMwXHU2NmMxXHU2NmMyXHU2NmMzXHU2NmM0XHU2NmM1XHU2NmM2XHU2NmM3XHU2NmM4XHU2NmM5XHU2'@;
put 'NmNhXHU2NmNiXHU2NmNjXHU2NmNkXHU2NmNlXHU2NmNmXHU2NmQwXHU2NmQxXHU2NmQyXHU2NmQzXHU2NmQ0XHU2NmQ1XHU2NmQ2XHU2NmQ3XHU2NmQ4XHU2NmRhXHU2NmRlXHU2NmRmXHU2NmUwXHU2NmUxXHU2NmUyXHU2NmUzXHU2NmU0XHU2NmU1XHU2NmU3XHU2NmU4XHU2NmVhXHU2NmVi'@;
put 'XHU2NmVjXHU2NmVkXHU2NmVlXHU2NmVmXHU2NmYxXHU2NmY1XHU2NmY2XHU2NmY4XHU2NmZhXHU2NmZiXHU2NmZkXHU2NzAxXHU2NzAyXHU2NzAzXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTQ5XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxNDldW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtr'@;
put 'WzE0OV1bdl1dPTM4MTQ0K3YsVFszODE0NCt2XT1rWzE0OV1bdl0pO2ZvcihrWzE1MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjcwNFx1NjcwNVx1NjcwNlx1NjcwN1x1NjcwY1x1NjcwZVx1NjcwZlx1NjcxMVx1NjcxMlx1Njcx'@;
put 'M1x1NjcxNlx1NjcxOFx1NjcxOVx1NjcxYVx1NjcxY1x1NjcxZVx1NjcyMFx1NjcyMVx1NjcyMlx1NjcyM1x1NjcyNFx1NjcyNVx1NjcyN1x1NjcyOVx1NjcyZVx1NjczMFx1NjczMlx1NjczM1x1NjczNlx1NjczN1x1NjczOFx1NjczOVx1NjczYlx1NjczY1x1NjczZVx1NjczZlx1Njc0MVx1'@;
put 'Njc0NFx1Njc0NVx1Njc0N1x1Njc0YVx1Njc0Ylx1Njc0ZFx1Njc1Mlx1Njc1NFx1Njc1NVx1Njc1N1x1Njc1OFx1Njc1OVx1Njc1YVx1Njc1Ylx1Njc1ZFx1Njc2Mlx1Njc2M1x1Njc2NFx1Njc2Nlx1Njc2N1x1Njc2Ylx1Njc2Y1x1Njc2ZVx1Njc3MVx1Njc3NFx1Njc3Nlx1ZmZmZFx1Njc3'@;
put 'OFx1Njc3OVx1Njc3YVx1Njc3Ylx1Njc3ZFx1Njc4MFx1Njc4Mlx1Njc4M1x1Njc4NVx1Njc4Nlx1Njc4OFx1Njc4YVx1Njc4Y1x1Njc4ZFx1Njc4ZVx1Njc4Zlx1Njc5MVx1Njc5Mlx1Njc5M1x1Njc5NFx1Njc5Nlx1Njc5OVx1Njc5Ylx1Njc5Zlx1NjdhMFx1NjdhMVx1NjdhNFx1NjdhNlx1'@;
put 'NjdhOVx1NjdhY1x1NjdhZVx1NjdiMVx1NjdiMlx1NjdiNFx1NjdiOVx1NjdiYVx1NjdiYlx1NjdiY1x1NjdiZFx1NjdiZVx1NjdiZlx1NjdjMFx1NjdjMlx1NjdjNVx1NjdjNlx1NjdjN1x1NjdjOFx1NjdjOVx1NjdjYVx1NjdjYlx1NjdjY1x1NjdjZFx1NjdjZVx1NjdkNVx1NjdkNlx1Njdk'@;
put 'N1x1NjdkYlx1NjdkZlx1NjdlMVx1NjdlM1x1NjdlNFx1NjdlNlx1NjdlN1x1NjdlOFx1NjdlYVx1NjdlYlx1NjdlZFx1NjdlZVx1NjdmMlx1NjdmNVx1NjdmNlx1NjdmN1x1NjdmOFx1NjdmOVx1NjdmYVx1NjdmYlx1NjdmY1x1NjdmZVx1NjgwMVx1NjgwMlx1NjgwM1x1NjgwNFx1NjgwNlx1'@;
put 'NjgwZFx1NjgxMFx1NjgxMlx1NjgxNFx1NjgxNVx1NjgxOFx1NjgxOVx1NjgxYVx1NjgxYlx1NjgxY1x1NjgxZVx1NjgxZlx1NjgyMFx1NjgyMlx1NjgyM1x1NjgyNFx1NjgyNVx1NjgyNlx1NjgyN1x1NjgyOFx1NjgyYlx1NjgyY1x1NjgyZFx1NjgyZVx1NjgyZlx1NjgzMFx1NjgzMVx1Njgz'@;
put 'NFx1NjgzNVx1NjgzNlx1NjgzYVx1NjgzYlx1NjgzZlx1Njg0N1x1Njg0Ylx1Njg0ZFx1Njg0Zlx1Njg1Mlx1Njg1Nlx1Njg1N1x1Njg1OFx1Njg1OVx1Njg1YVx1Njg1Ylx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE1MF0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTUwXVt2XS5jaGFyQ29k'@;
put 'ZUF0KDApJiYoc2Vba1sxNTBdW3ZdXT0zODQwMCt2LFRbMzg0MDArdl09a1sxNTBdW3ZdKTtmb3Ioa1sxNTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY4NWNcdTY4NWRcdTY4NWVcdTY4NWZcdTY4NmFcdTY4NmNcdTY4NmRcdTY4'@;
put 'NmVcdTY4NmZcdTY4NzBcdTY4NzFcdTY4NzJcdTY4NzNcdTY4NzVcdTY4NzhcdTY4NzlcdTY4N2FcdTY4N2JcdTY4N2NcdTY4N2RcdTY4N2VcdTY4N2ZcdTY4ODBcdTY4ODJcdTY4ODRcdTY4ODdcdTY4ODhcdTY4ODlcdTY4OGFcdTY4OGJcdTY4OGNcdTY4OGRcdTY4OGVcdTY4OTBcdTY4OTFc'@;
put 'dTY4OTJcdTY4OTRcdTY4OTVcdTY4OTZcdTY4OThcdTY4OTlcdTY4OWFcdTY4OWJcdTY4OWNcdTY4OWRcdTY4OWVcdTY4OWZcdTY4YTBcdTY4YTFcdTY4YTNcdTY4YTRcdTY4YTVcdTY4YTlcdTY4YWFcdTY4YWJcdTY4YWNcdTY4YWVcdTY4YjFcdTY4YjJcdTY4YjRcdTY4YjZcdTY4YjdcdTY4'@;
put 'YjhcdWZmZmRcdTY4YjlcdTY4YmFcdTY4YmJcdTY4YmNcdTY4YmRcdTY4YmVcdTY4YmZcdTY4YzFcdTY4YzNcdTY4YzRcdTY4YzVcdTY4YzZcdTY4YzdcdTY4YzhcdTY4Y2FcdTY4Y2NcdTY4Y2VcdTY4Y2ZcdTY4ZDBcdTY4ZDFcdTY4ZDNcdTY4ZDRcdTY4ZDZcdTY4ZDdcdTY4ZDlcdTY4ZGJc'@;
put 'dTY4ZGNcdTY4ZGRcdTY4ZGVcdTY4ZGZcdTY4ZTFcdTY4ZTJcdTY4ZTRcdTY4ZTVcdTY4ZTZcdTY4ZTdcdTY4ZThcdTY4ZTlcdTY4ZWFcdTY4ZWJcdTY4ZWNcdTY4ZWRcdTY4ZWZcdTY4ZjJcdTY4ZjNcdTY4ZjRcdTY4ZjZcdTY4ZjdcdTY4ZjhcdTY4ZmJcdTY4ZmRcdTY4ZmVcdTY4ZmZcdTY5'@;
put 'MDBcdTY5MDJcdTY5MDNcdTY5MDRcdTY5MDZcdTY5MDdcdTY5MDhcdTY5MDlcdTY5MGFcdTY5MGNcdTY5MGZcdTY5MTFcdTY5MTNcdTY5MTRcdTY5MTVcdTY5MTZcdTY5MTdcdTY5MThcdTY5MTlcdTY5MWFcdTY5MWJcdTY5MWNcdTY5MWRcdTY5MWVcdTY5MjFcdTY5MjJcdTY5MjNcdTY5MjVc'@;
put 'dTY5MjZcdTY5MjdcdTY5MjhcdTY5MjlcdTY5MmFcdTY5MmJcdTY5MmNcdTY5MmVcdTY5MmZcdTY5MzFcdTY5MzJcdTY5MzNcdTY5MzVcdTY5MzZcdTY5MzdcdTY5MzhcdTY5M2FcdTY5M2JcdTY5M2NcdTY5M2VcdTY5NDBcdTY5NDFcdTY5NDNcdTY5NDRcdTY5NDVcdTY5NDZcdTY5NDdcdTY5'@;
put 'NDhcdTY5NDlcdTY5NGFcdTY5NGJcdTY5NGNcdTY5NGRcdTY5NGVcdTY5NGZcdTY5NTBcdTY5NTFcdTY5NTJcdTY5NTNcdTY5NTVcdTY5NTZcdTY5NThcdTY5NTlcdTY5NWJcdTY5NWNcdTY5NWZcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxNTFdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE1'@;
put 'MV1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTUxXVt2XV09Mzg2NTYrdixUWzM4NjU2K3ZdPWtbMTUxXVt2XSk7Zm9yKGtbMTUyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2OTYxXHU2OTYyXHU2OTY0XHU2OTY1XHU2OTY3XHU2'@;
put 'OTY4XHU2OTY5XHU2OTZhXHU2OTZjXHU2OTZkXHU2OTZmXHU2OTcwXHU2OTcyXHU2OTczXHU2OTc0XHU2OTc1XHU2OTc2XHU2OTdhXHU2OTdiXHU2OTdkXHU2OTdlXHU2OTdmXHU2OTgxXHU2OTgzXHU2OTg1XHU2OThhXHU2OThiXHU2OThjXHU2OThlXHU2OThmXHU2OTkwXHU2OTkxXHU2OTky'@;
put 'XHU2OTkzXHU2OTk2XHU2OTk3XHU2OTk5XHU2OTlhXHU2OTlkXHU2OTllXHU2OTlmXHU2OWEwXHU2OWExXHU2OWEyXHU2OWEzXHU2OWE0XHU2OWE1XHU2OWE2XHU2OWE5XHU2OWFhXHU2OWFjXHU2OWFlXHU2OWFmXHU2OWIwXHU2OWIyXHU2OWIzXHU2OWI1XHU2OWI2XHU2OWI4XHU2OWI5XHU2'@;
put 'OWJhXHU2OWJjXHU2OWJkXHVmZmZkXHU2OWJlXHU2OWJmXHU2OWMwXHU2OWMyXHU2OWMzXHU2OWM0XHU2OWM1XHU2OWM2XHU2OWM3XHU2OWM4XHU2OWM5XHU2OWNiXHU2OWNkXHU2OWNmXHU2OWQxXHU2OWQyXHU2OWQzXHU2OWQ1XHU2OWQ2XHU2OWQ3XHU2OWQ4XHU2OWQ5XHU2OWRhXHU2OWRj'@;
put 'XHU2OWRkXHU2OWRlXHU2OWUxXHU2OWUyXHU2OWUzXHU2OWU0XHU2OWU1XHU2OWU2XHU2OWU3XHU2OWU4XHU2OWU5XHU2OWVhXHU2OWViXHU2OWVjXHU2OWVlXHU2OWVmXHU2OWYwXHU2OWYxXHU2OWYzXHU2OWY0XHU2OWY1XHU2OWY2XHU2OWY3XHU2OWY4XHU2OWY5XHU2OWZhXHU2OWZiXHU2'@;
put 'OWZjXHU2OWZlXHU2YTAwXHU2YTAxXHU2YTAyXHU2YTAzXHU2YTA0XHU2YTA1XHU2YTA2XHU2YTA3XHU2YTA4XHU2YTA5XHU2YTBiXHU2YTBjXHU2YTBkXHU2YTBlXHU2YTBmXHU2YTEwXHU2YTExXHU2YTEyXHU2YTEzXHU2YTE0XHU2YTE1XHU2YTE2XHU2YTE5XHU2YTFhXHU2YTFiXHU2YTFj'@;
put 'XHU2YTFkXHU2YTFlXHU2YTIwXHU2YTIyXHU2YTIzXHU2YTI0XHU2YTI1XHU2YTI2XHU2YTI3XHU2YTI5XHU2YTJiXHU2YTJjXHU2YTJkXHU2YTJlXHU2YTMwXHU2YTMyXHU2YTMzXHU2YTM0XHU2YTM2XHU2YTM3XHU2YTM4XHU2YTM5XHU2YTNhXHU2YTNiXHU2YTNjXHU2YTNmXHU2YTQwXHU2'@;
put 'YTQxXHU2YTQyXHU2YTQzXHU2YTQ1XHU2YTQ2XHU2YTQ4XHU2YTQ5XHU2YTRhXHU2YTRiXHU2YTRjXHU2YTRkXHU2YTRlXHU2YTRmXHU2YTUxXHU2YTUyXHU2YTUzXHU2YTU0XHU2YTU1XHU2YTU2XHU2YTU3XHU2YTVhXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTUyXS5sZW5ndGg7Kyt2'@;
put 'KTY1NTMzIT09a1sxNTJdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE1Ml1bdl1dPTM4OTEyK3YsVFszODkxMit2XT1rWzE1Ml1bdl0pO2ZvcihrWzE1M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmE1Y1x1NmE1ZFx1NmE1ZVx1'@;
put 'NmE1Zlx1NmE2MFx1NmE2Mlx1NmE2M1x1NmE2NFx1NmE2Nlx1NmE2N1x1NmE2OFx1NmE2OVx1NmE2YVx1NmE2Ylx1NmE2Y1x1NmE2ZFx1NmE2ZVx1NmE2Zlx1NmE3MFx1NmE3Mlx1NmE3M1x1NmE3NFx1NmE3NVx1NmE3Nlx1NmE3N1x1NmE3OFx1NmE3YVx1NmE3Ylx1NmE3ZFx1NmE3ZVx1NmE3'@;
put 'Zlx1NmE4MVx1NmE4Mlx1NmE4M1x1NmE4NVx1NmE4Nlx1NmE4N1x1NmE4OFx1NmE4OVx1NmE4YVx1NmE4Ylx1NmE4Y1x1NmE4ZFx1NmE4Zlx1NmE5Mlx1NmE5M1x1NmE5NFx1NmE5NVx1NmE5Nlx1NmE5OFx1NmE5OVx1NmE5YVx1NmE5Ylx1NmE5Y1x1NmE5ZFx1NmE5ZVx1NmE5Zlx1NmFhMVx1'@;
put 'NmFhMlx1NmFhM1x1NmFhNFx1NmFhNVx1NmFhNlx1ZmZmZFx1NmFhN1x1NmFhOFx1NmFhYVx1NmFhZFx1NmFhZVx1NmFhZlx1NmFiMFx1NmFiMVx1NmFiMlx1NmFiM1x1NmFiNFx1NmFiNVx1NmFiNlx1NmFiN1x1NmFiOFx1NmFiOVx1NmFiYVx1NmFiYlx1NmFiY1x1NmFiZFx1NmFiZVx1NmFi'@;
put 'Zlx1NmFjMFx1NmFjMVx1NmFjMlx1NmFjM1x1NmFjNFx1NmFjNVx1NmFjNlx1NmFjN1x1NmFjOFx1NmFjOVx1NmFjYVx1NmFjYlx1NmFjY1x1NmFjZFx1NmFjZVx1NmFjZlx1NmFkMFx1NmFkMVx1NmFkMlx1NmFkM1x1NmFkNFx1NmFkNVx1NmFkNlx1NmFkN1x1NmFkOFx1NmFkOVx1NmFkYVx1'@;
put 'NmFkYlx1NmFkY1x1NmFkZFx1NmFkZVx1NmFkZlx1NmFlMFx1NmFlMVx1NmFlMlx1NmFlM1x1NmFlNFx1NmFlNVx1NmFlNlx1NmFlN1x1NmFlOFx1NmFlOVx1NmFlYVx1NmFlYlx1NmFlY1x1NmFlZFx1NmFlZVx1NmFlZlx1NmFmMFx1NmFmMVx1NmFmMlx1NmFmM1x1NmFmNFx1NmFmNVx1NmFm'@;
put 'Nlx1NmFmN1x1NmFmOFx1NmFmOVx1NmFmYVx1NmFmYlx1NmFmY1x1NmFmZFx1NmFmZVx1NmFmZlx1NmIwMFx1NmIwMVx1NmIwMlx1NmIwM1x1NmIwNFx1NmIwNVx1NmIwNlx1NmIwN1x1NmIwOFx1NmIwOVx1NmIwYVx1NmIwYlx1NmIwY1x1NmIwZFx1NmIwZVx1NmIwZlx1NmIxMFx1NmIxMVx1'@;
put 'NmIxMlx1NmIxM1x1NmIxNFx1NmIxNVx1NmIxNlx1NmIxN1x1NmIxOFx1NmIxOVx1NmIxYVx1NmIxYlx1NmIxY1x1NmIxZFx1NmIxZVx1NmIxZlx1NmIyNVx1NmIyNlx1NmIyOFx1NmIyOVx1NmIyYVx1NmIyYlx1NmIyY1x1NmIyZFx1NmIyZVx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE1'@;
put 'M10ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTUzXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxNTNdW3ZdXT0zOTE2OCt2LFRbMzkxNjgrdl09a1sxNTNdW3ZdKTtmb3Ioa1sxNTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZiMmZc'@;
put 'dTZiMzBcdTZiMzFcdTZiMzNcdTZiMzRcdTZiMzVcdTZiMzZcdTZiMzhcdTZiM2JcdTZiM2NcdTZiM2RcdTZiM2ZcdTZiNDBcdTZiNDFcdTZiNDJcdTZiNDRcdTZiNDVcdTZiNDhcdTZiNGFcdTZiNGJcdTZiNGRcdTZiNGVcdTZiNGZcdTZiNTBcdTZiNTFcdTZiNTJcdTZiNTNcdTZiNTRcdTZi'@;
put 'NTVcdTZiNTZcdTZiNTdcdTZiNThcdTZiNWFcdTZiNWJcdTZiNWNcdTZiNWRcdTZiNWVcdTZiNWZcdTZiNjBcdTZiNjFcdTZiNjhcdTZiNjlcdTZiNmJcdTZiNmNcdTZiNmRcdTZiNmVcdTZiNmZcdTZiNzBcdTZiNzFcdTZiNzJcdTZiNzNcdTZiNzRcdTZiNzVcdTZiNzZcdTZiNzdcdTZiNzhc'@;
put 'dTZiN2FcdTZiN2RcdTZiN2VcdTZiN2ZcdTZiODBcdTZiODVcdTZiODhcdWZmZmRcdTZiOGNcdTZiOGVcdTZiOGZcdTZiOTBcdTZiOTFcdTZiOTRcdTZiOTVcdTZiOTdcdTZiOThcdTZiOTlcdTZiOWNcdTZiOWRcdTZiOWVcdTZiOWZcdTZiYTBcdTZiYTJcdTZiYTNcdTZiYTRcdTZiYTVcdTZi'@;
put 'YTZcdTZiYTdcdTZiYThcdTZiYTlcdTZiYWJcdTZiYWNcdTZiYWRcdTZiYWVcdTZiYWZcdTZiYjBcdTZiYjFcdTZiYjJcdTZiYjZcdTZiYjhcdTZiYjlcdTZiYmFcdTZiYmJcdTZiYmNcdTZiYmRcdTZiYmVcdTZiYzBcdTZiYzNcdTZiYzRcdTZiYzZcdTZiYzdcdTZiYzhcdTZiYzlcdTZiY2Fc'@;
put 'dTZiY2NcdTZiY2VcdTZiZDBcdTZiZDFcdTZiZDhcdTZiZGFcdTZiZGNcdTZiZGRcdTZiZGVcdTZiZGZcdTZiZTBcdTZiZTJcdTZiZTNcdTZiZTRcdTZiZTVcdTZiZTZcdTZiZTdcdTZiZThcdTZiZTlcdTZiZWNcdTZiZWRcdTZiZWVcdTZiZjBcdTZiZjFcdTZiZjJcdTZiZjRcdTZiZjZcdTZi'@;
put 'ZjdcdTZiZjhcdTZiZmFcdTZiZmJcdTZiZmNcdTZiZmVcdTZiZmZcdTZjMDBcdTZjMDFcdTZjMDJcdTZjMDNcdTZjMDRcdTZjMDhcdTZjMDlcdTZjMGFcdTZjMGJcdTZjMGNcdTZjMGVcdTZjMTJcdTZjMTdcdTZjMWNcdTZjMWRcdTZjMWVcdTZjMjBcdTZjMjNcdTZjMjVcdTZjMmJcdTZjMmNc'@;
put 'dTZjMmRcdTZjMzFcdTZjMzNcdTZjMzZcdTZjMzdcdTZjMzlcdTZjM2FcdTZjM2JcdTZjM2NcdTZjM2VcdTZjM2ZcdTZjNDNcdTZjNDRcdTZjNDVcdTZjNDhcdTZjNGJcdTZjNGNcdTZjNGRcdTZjNGVcdTZjNGZcdTZjNTFcdTZjNTJcdTZjNTNcdTZjNTZcdTZjNThcdWZmZmQiLnNwbGl0KCIi'@;
put 'KSx2PTA7diE9a1sxNTRdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE1NF1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTU0XVt2XV09Mzk0MjQrdixUWzM5NDI0K3ZdPWtbMTU0XVt2XSk7Zm9yKGtbMTU1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHU2YzU5XHU2YzVhXHU2YzYyXHU2YzYzXHU2YzY1XHU2YzY2XHU2YzY3XHU2YzZiXHU2YzZjXHU2YzZkXHU2YzZlXHU2YzZmXHU2YzcxXHU2YzczXHU2Yzc1XHU2Yzc3XHU2Yzc4XHU2YzdhXHU2YzdiXHU2YzdjXHU2YzdmXHU2YzgwXHU2Yzg0XHU2Yzg3XHU2YzhhXHU2YzhiXHU2'@;
put 'YzhkXHU2YzhlXHU2YzkxXHU2YzkyXHU2Yzk1XHU2Yzk2XHU2Yzk3XHU2Yzk4XHU2YzlhXHU2YzljXHU2YzlkXHU2YzllXHU2Y2EwXHU2Y2EyXHU2Y2E4XHU2Y2FjXHU2Y2FmXHU2Y2IwXHU2Y2I0XHU2Y2I1XHU2Y2I2XHU2Y2I3XHU2Y2JhXHU2Y2MwXHU2Y2MxXHU2Y2MyXHU2Y2MzXHU2Y2M2'@;
put 'XHU2Y2M3XHU2Y2M4XHU2Y2NiXHU2Y2NkXHU2Y2NlXHU2Y2NmXHU2Y2QxXHU2Y2QyXHU2Y2Q4XHVmZmZkXHU2Y2Q5XHU2Y2RhXHU2Y2RjXHU2Y2RkXHU2Y2RmXHU2Y2U0XHU2Y2U2XHU2Y2U3XHU2Y2U5XHU2Y2VjXHU2Y2VkXHU2Y2YyXHU2Y2Y0XHU2Y2Y5XHU2Y2ZmXHU2ZDAwXHU2ZDAyXHU2'@;
put 'ZDAzXHU2ZDA1XHU2ZDA2XHU2ZDA4XHU2ZDA5XHU2ZDBhXHU2ZDBkXHU2ZDBmXHU2ZDEwXHU2ZDExXHU2ZDEzXHU2ZDE0XHU2ZDE1XHU2ZDE2XHU2ZDE4XHU2ZDFjXHU2ZDFkXHU2ZDFmXHU2ZDIwXHU2ZDIxXHU2ZDIyXHU2ZDIzXHU2ZDI0XHU2ZDI2XHU2ZDI4XHU2ZDI5XHU2ZDJjXHU2ZDJk'@;
put 'XHU2ZDJmXHU2ZDMwXHU2ZDM0XHU2ZDM2XHU2ZDM3XHU2ZDM4XHU2ZDNhXHU2ZDNmXHU2ZDQwXHU2ZDQyXHU2ZDQ0XHU2ZDQ5XHU2ZDRjXHU2ZDUwXHU2ZDU1XHU2ZDU2XHU2ZDU3XHU2ZDU4XHU2ZDViXHU2ZDVkXHU2ZDVmXHU2ZDYxXHU2ZDYyXHU2ZDY0XHU2ZDY1XHU2ZDY3XHU2ZDY4XHU2'@;
put 'ZDZiXHU2ZDZjXHU2ZDZkXHU2ZDcwXHU2ZDcxXHU2ZDcyXHU2ZDczXHU2ZDc1XHU2ZDc2XHU2ZDc5XHU2ZDdhXHU2ZDdiXHU2ZDdkXHU2ZDdlXHU2ZDdmXHU2ZDgwXHU2ZDgxXHU2ZDgzXHU2ZDg0XHU2ZDg2XHU2ZDg3XHU2ZDhhXHU2ZDhiXHU2ZDhkXHU2ZDhmXHU2ZDkwXHU2ZDkyXHU2ZDk2'@;
put 'XHU2ZDk3XHU2ZDk4XHU2ZDk5XHU2ZDlhXHU2ZDljXHU2ZGEyXHU2ZGE1XHU2ZGFjXHU2ZGFkXHU2ZGIwXHU2ZGIxXHU2ZGIzXHU2ZGI0XHU2ZGI2XHU2ZGI3XHU2ZGI5XHU2ZGJhXHU2ZGJiXHU2ZGJjXHU2ZGJkXHU2ZGJlXHU2ZGMxXHU2ZGMyXHU2ZGMzXHU2ZGM4XHU2ZGM5XHU2ZGNhXHVm'@;
put 'ZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTU1XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxNTVdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE1NV1bdl1dPTM5NjgwK3YsVFszOTY4MCt2XT1rWzE1NV1bdl0pO2ZvcihrWzE1Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmRjZFx1NmRjZVx1NmRjZlx1NmRkMFx1NmRkMlx1NmRkM1x1NmRkNFx1NmRkNVx1NmRkN1x1NmRkYVx1NmRkYlx1NmRkY1x1NmRkZlx1NmRlMlx1NmRlM1x1NmRlNVx1NmRlN1x1NmRlOFx1NmRlOVx1NmRlYVx1NmRlZFx1NmRlZlx1NmRmMFx1NmRmMlx1'@;
put 'NmRmNFx1NmRmNVx1NmRmNlx1NmRmOFx1NmRmYVx1NmRmZFx1NmRmZVx1NmRmZlx1NmUwMFx1NmUwMVx1NmUwMlx1NmUwM1x1NmUwNFx1NmUwNlx1NmUwN1x1NmUwOFx1NmUwOVx1NmUwYlx1NmUwZlx1NmUxMlx1NmUxM1x1NmUxNVx1NmUxOFx1NmUxOVx1NmUxYlx1NmUxY1x1NmUxZVx1NmUx'@;
put 'Zlx1NmUyMlx1NmUyNlx1NmUyN1x1NmUyOFx1NmUyYVx1NmUyY1x1NmUyZVx1NmUzMFx1NmUzMVx1NmUzM1x1NmUzNVx1ZmZmZFx1NmUzNlx1NmUzN1x1NmUzOVx1NmUzYlx1NmUzY1x1NmUzZFx1NmUzZVx1NmUzZlx1NmU0MFx1NmU0MVx1NmU0Mlx1NmU0NVx1NmU0Nlx1NmU0N1x1NmU0OFx1'@;
put 'NmU0OVx1NmU0YVx1NmU0Ylx1NmU0Y1x1NmU0Zlx1NmU1MFx1NmU1MVx1NmU1Mlx1NmU1NVx1NmU1N1x1NmU1OVx1NmU1YVx1NmU1Y1x1NmU1ZFx1NmU1ZVx1NmU2MFx1NmU2MVx1NmU2Mlx1NmU2M1x1NmU2NFx1NmU2NVx1NmU2Nlx1NmU2N1x1NmU2OFx1NmU2OVx1NmU2YVx1NmU2Y1x1NmU2'@;
put 'ZFx1NmU2Zlx1NmU3MFx1NmU3MVx1NmU3Mlx1NmU3M1x1NmU3NFx1NmU3NVx1NmU3Nlx1NmU3N1x1NmU3OFx1NmU3OVx1NmU3YVx1NmU3Ylx1NmU3Y1x1NmU3ZFx1NmU4MFx1NmU4MVx1NmU4Mlx1NmU4NFx1NmU4N1x1NmU4OFx1NmU4YVx1NmU4Ylx1NmU4Y1x1NmU4ZFx1NmU4ZVx1NmU5MVx1'@;
put 'NmU5Mlx1NmU5M1x1NmU5NFx1NmU5NVx1NmU5Nlx1NmU5N1x1NmU5OVx1NmU5YVx1NmU5Ylx1NmU5ZFx1NmU5ZVx1NmVhMFx1NmVhMVx1NmVhM1x1NmVhNFx1NmVhNlx1NmVhOFx1NmVhOVx1NmVhYlx1NmVhY1x1NmVhZFx1NmVhZVx1NmViMFx1NmViM1x1NmViNVx1NmViOFx1NmViOVx1NmVi'@;
put 'Y1x1NmViZVx1NmViZlx1NmVjMFx1NmVjM1x1NmVjNFx1NmVjNVx1NmVjNlx1NmVjOFx1NmVjOVx1NmVjYVx1NmVjY1x1NmVjZFx1NmVjZVx1NmVkMFx1NmVkMlx1NmVkNlx1NmVkOFx1NmVkOVx1NmVkYlx1NmVkY1x1NmVkZFx1NmVlM1x1NmVlN1x1NmVlYVx1NmVlYlx1NmVlY1x1NmVlZFx1'@;
put 'NmVlZVx1NmVlZlx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE1Nl0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTU2XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxNTZdW3ZdXT0zOTkzNit2LFRbMzk5MzYrdl09a1sxNTZdW3ZdKTtmb3Ioa1sxNTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZlZjBcdTZlZjFcdTZlZjJcdTZlZjNcdTZlZjVcdTZlZjZcdTZlZjdcdTZlZjhcdTZlZmFcdTZlZmJcdTZlZmNcdTZlZmRcdTZlZmVcdTZlZmZcdTZmMDBcdTZmMDFcdTZmMDNcdTZmMDRcdTZmMDVcdTZmMDdcdTZmMDhcdTZmMGFc'@;
put 'dTZmMGJcdTZmMGNcdTZmMGRcdTZmMGVcdTZmMTBcdTZmMTFcdTZmMTJcdTZmMTZcdTZmMTdcdTZmMThcdTZmMTlcdTZmMWFcdTZmMWJcdTZmMWNcdTZmMWRcdTZmMWVcdTZmMWZcdTZmMjFcdTZmMjJcdTZmMjNcdTZmMjVcdTZmMjZcdTZmMjdcdTZmMjhcdTZmMmNcdTZmMmVcdTZmMzBcdTZm'@;
put 'MzJcdTZmMzRcdTZmMzVcdTZmMzdcdTZmMzhcdTZmMzlcdTZmM2FcdTZmM2JcdTZmM2NcdTZmM2RcdTZmM2ZcdTZmNDBcdTZmNDFcdTZmNDJcdWZmZmRcdTZmNDNcdTZmNDRcdTZmNDVcdTZmNDhcdTZmNDlcdTZmNGFcdTZmNGNcdTZmNGVcdTZmNGZcdTZmNTBcdTZmNTFcdTZmNTJcdTZmNTNc'@;
put 'dTZmNTRcdTZmNTVcdTZmNTZcdTZmNTdcdTZmNTlcdTZmNWFcdTZmNWJcdTZmNWRcdTZmNWZcdTZmNjBcdTZmNjFcdTZmNjNcdTZmNjRcdTZmNjVcdTZmNjdcdTZmNjhcdTZmNjlcdTZmNmFcdTZmNmJcdTZmNmNcdTZmNmZcdTZmNzBcdTZmNzFcdTZmNzNcdTZmNzVcdTZmNzZcdTZmNzdcdTZm'@;
put 'NzlcdTZmN2JcdTZmN2RcdTZmN2VcdTZmN2ZcdTZmODBcdTZmODFcdTZmODJcdTZmODNcdTZmODVcdTZmODZcdTZmODdcdTZmOGFcdTZmOGJcdTZmOGZcdTZmOTBcdTZmOTFcdTZmOTJcdTZmOTNcdTZmOTRcdTZmOTVcdTZmOTZcdTZmOTdcdTZmOThcdTZmOTlcdTZmOWFcdTZmOWJcdTZmOWRc'@;
put 'dTZmOWVcdTZmOWZcdTZmYTBcdTZmYTJcdTZmYTNcdTZmYTRcdTZmYTVcdTZmYTZcdTZmYThcdTZmYTlcdTZmYWFcdTZmYWJcdTZmYWNcdTZmYWRcdTZmYWVcdTZmYWZcdTZmYjBcdTZmYjFcdTZmYjJcdTZmYjRcdTZmYjVcdTZmYjdcdTZmYjhcdTZmYmFcdTZmYmJcdTZmYmNcdTZmYmRcdTZm'@;
put 'YmVcdTZmYmZcdTZmYzFcdTZmYzNcdTZmYzRcdTZmYzVcdTZmYzZcdTZmYzdcdTZmYzhcdTZmY2FcdTZmY2JcdTZmY2NcdTZmY2RcdTZmY2VcdTZmY2ZcdTZmZDBcdTZmZDNcdTZmZDRcdTZmZDVcdTZmZDZcdTZmZDdcdTZmZDhcdTZmZDlcdTZmZGFcdTZmZGJcdTZmZGNcdTZmZGRcdTZmZGZc'@;
put 'dTZmZTJcdTZmZTNcdTZmZTRcdTZmZTVcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxNTddLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE1N11bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTU3XVt2XV09NDAxOTIrdixUWzQwMTkyK3ZdPWtbMTU3XVt2XSk7Zm9yKGtbMTU4XT0iXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZmU2XHU2ZmU3XHU2ZmU4XHU2ZmU5XHU2ZmVhXHU2ZmViXHU2ZmVjXHU2ZmVkXHU2ZmYwXHU2ZmYxXHU2ZmYyXHU2ZmYzXHU2ZmY0XHU2ZmY1XHU2ZmY2XHU2ZmY3XHU2ZmY4XHU2ZmY5XHU2ZmZhXHU2ZmZi'@;
put 'XHU2ZmZjXHU2ZmZkXHU2ZmZlXHU2ZmZmXHU3MDAwXHU3MDAxXHU3MDAyXHU3MDAzXHU3MDA0XHU3MDA1XHU3MDA2XHU3MDA3XHU3MDA4XHU3MDA5XHU3MDBhXHU3MDBiXHU3MDBjXHU3MDBkXHU3MDBlXHU3MDBmXHU3MDEwXHU3MDEyXHU3MDEzXHU3MDE0XHU3MDE1XHU3MDE2XHU3MDE3XHU3'@;
put 'MDE4XHU3MDE5XHU3MDFjXHU3MDFkXHU3MDFlXHU3MDFmXHU3MDIwXHU3MDIxXHU3MDIyXHU3MDI0XHU3MDI1XHU3MDI2XHU3MDI3XHU3MDI4XHU3MDI5XHU3MDJhXHVmZmZkXHU3MDJiXHU3MDJjXHU3MDJkXHU3MDJlXHU3MDJmXHU3MDMwXHU3MDMxXHU3MDMyXHU3MDMzXHU3MDM0XHU3MDM2'@;
put 'XHU3MDM3XHU3MDM4XHU3MDNhXHU3MDNiXHU3MDNjXHU3MDNkXHU3MDNlXHU3MDNmXHU3MDQwXHU3MDQxXHU3MDQyXHU3MDQzXHU3MDQ0XHU3MDQ1XHU3MDQ2XHU3MDQ3XHU3MDQ4XHU3MDQ5XHU3MDRhXHU3MDRiXHU3MDRkXHU3MDRlXHU3MDUwXHU3MDUxXHU3MDUyXHU3MDUzXHU3MDU0XHU3'@;
put 'MDU1XHU3MDU2XHU3MDU3XHU3MDU4XHU3MDU5XHU3MDVhXHU3MDViXHU3MDVjXHU3MDVkXHU3MDVmXHU3MDYwXHU3MDYxXHU3MDYyXHU3MDYzXHU3MDY0XHU3MDY1XHU3MDY2XHU3MDY3XHU3MDY4XHU3MDY5XHU3MDZhXHU3MDZlXHU3MDcxXHU3MDcyXHU3MDczXHU3MDc0XHU3MDc3XHU3MDc5'@;
put 'XHU3MDdhXHU3MDdiXHU3MDdkXHU3MDgxXHU3MDgyXHU3MDgzXHU3MDg0XHU3MDg2XHU3MDg3XHU3MDg4XHU3MDhiXHU3MDhjXHU3MDhkXHU3MDhmXHU3MDkwXHU3MDkxXHU3MDkzXHU3MDk3XHU3MDk4XHU3MDlhXHU3MDliXHU3MDllXHU3MDlmXHU3MGEwXHU3MGExXHU3MGEyXHU3MGEzXHU3'@;
put 'MGE0XHU3MGE1XHU3MGE2XHU3MGE3XHU3MGE4XHU3MGE5XHU3MGFhXHU3MGIwXHU3MGIyXHU3MGI0XHU3MGI1XHU3MGI2XHU3MGJhXHU3MGJlXHU3MGJmXHU3MGM0XHU3MGM1XHU3MGM2XHU3MGM3XHU3MGM5XHU3MGNiXHU3MGNjXHU3MGNkXHU3MGNlXHU3MGNmXHU3MGQwXHU3MGQxXHU3MGQy'@;
put 'XHU3MGQzXHU3MGQ0XHU3MGQ1XHU3MGQ2XHU3MGQ3XHU3MGRhXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTU4XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxNThdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE1OF1bdl1dPTQwNDQ4K3YsVFs0MDQ0OCt2XT1rWzE1OF1bdl0pO2ZvcihrWzE1'@;
put 'OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzBkY1x1NzBkZFx1NzBkZVx1NzBlMFx1NzBlMVx1NzBlMlx1NzBlM1x1NzBlNVx1NzBlYVx1NzBlZVx1NzBmMFx1NzBmMVx1NzBmMlx1NzBmM1x1NzBmNFx1NzBmNVx1NzBmNlx1NzBm'@;
put 'OFx1NzBmYVx1NzBmYlx1NzBmY1x1NzBmZVx1NzBmZlx1NzEwMFx1NzEwMVx1NzEwMlx1NzEwM1x1NzEwNFx1NzEwNVx1NzEwNlx1NzEwN1x1NzEwOFx1NzEwYlx1NzEwY1x1NzEwZFx1NzEwZVx1NzEwZlx1NzExMVx1NzExMlx1NzExNFx1NzExN1x1NzExYlx1NzExY1x1NzExZFx1NzExZVx1'@;
put 'NzExZlx1NzEyMFx1NzEyMVx1NzEyMlx1NzEyM1x1NzEyNFx1NzEyNVx1NzEyN1x1NzEyOFx1NzEyOVx1NzEyYVx1NzEyYlx1NzEyY1x1NzEyZFx1NzEyZVx1NzEzMlx1NzEzM1x1NzEzNFx1ZmZmZFx1NzEzNVx1NzEzN1x1NzEzOFx1NzEzOVx1NzEzYVx1NzEzYlx1NzEzY1x1NzEzZFx1NzEz'@;
put 'ZVx1NzEzZlx1NzE0MFx1NzE0MVx1NzE0Mlx1NzE0M1x1NzE0NFx1NzE0Nlx1NzE0N1x1NzE0OFx1NzE0OVx1NzE0Ylx1NzE0ZFx1NzE0Zlx1NzE1MFx1NzE1MVx1NzE1Mlx1NzE1M1x1NzE1NFx1NzE1NVx1NzE1Nlx1NzE1N1x1NzE1OFx1NzE1OVx1NzE1YVx1NzE1Ylx1NzE1ZFx1NzE1Zlx1'@;
put 'NzE2MFx1NzE2MVx1NzE2Mlx1NzE2M1x1NzE2NVx1NzE2OVx1NzE2YVx1NzE2Ylx1NzE2Y1x1NzE2ZFx1NzE2Zlx1NzE3MFx1NzE3MVx1NzE3NFx1NzE3NVx1NzE3Nlx1NzE3N1x1NzE3OVx1NzE3Ylx1NzE3Y1x1NzE3ZVx1NzE3Zlx1NzE4MFx1NzE4MVx1NzE4Mlx1NzE4M1x1NzE4NVx1NzE4'@;
put 'Nlx1NzE4N1x1NzE4OFx1NzE4OVx1NzE4Ylx1NzE4Y1x1NzE4ZFx1NzE4ZVx1NzE5MFx1NzE5MVx1NzE5Mlx1NzE5M1x1NzE5NVx1NzE5Nlx1NzE5N1x1NzE5YVx1NzE5Ylx1NzE5Y1x1NzE5ZFx1NzE5ZVx1NzFhMVx1NzFhMlx1NzFhM1x1NzFhNFx1NzFhNVx1NzFhNlx1NzFhN1x1NzFhOVx1'@;
put 'NzFhYVx1NzFhYlx1NzFhZFx1NzFhZVx1NzFhZlx1NzFiMFx1NzFiMVx1NzFiMlx1NzFiNFx1NzFiNlx1NzFiN1x1NzFiOFx1NzFiYVx1NzFiYlx1NzFiY1x1NzFiZFx1NzFiZVx1NzFiZlx1NzFjMFx1NzFjMVx1NzFjMlx1NzFjNFx1NzFjNVx1NzFjNlx1NzFjN1x1NzFjOFx1NzFjOVx1NzFj'@;
put 'YVx1NzFjYlx1NzFjY1x1NzFjZFx1NzFjZlx1NzFkMFx1NzFkMVx1NzFkMlx1NzFkM1x1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE1OV0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTU5XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxNTldW3ZdXT00MDcwNCt2LFRbNDA3MDQrdl09a1sxNTld'@;
put 'W3ZdKTtmb3Ioa1sxNjBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcxZDZcdTcxZDdcdTcxZDhcdTcxZDlcdTcxZGFcdTcxZGJcdTcxZGNcdTcxZGRcdTcxZGVcdTcxZGZcdTcxZTFcdTcxZTJcdTcxZTNcdTcxZTRcdTcxZTZcdTcx'@;
put 'ZThcdTcxZTlcdTcxZWFcdTcxZWJcdTcxZWNcdTcxZWRcdTcxZWZcdTcxZjBcdTcxZjFcdTcxZjJcdTcxZjNcdTcxZjRcdTcxZjVcdTcxZjZcdTcxZjdcdTcxZjhcdTcxZmFcdTcxZmJcdTcxZmNcdTcxZmRcdTcxZmVcdTcxZmZcdTcyMDBcdTcyMDFcdTcyMDJcdTcyMDNcdTcyMDRcdTcyMDVc'@;
put 'dTcyMDdcdTcyMDhcdTcyMDlcdTcyMGFcdTcyMGJcdTcyMGNcdTcyMGRcdTcyMGVcdTcyMGZcdTcyMTBcdTcyMTFcdTcyMTJcdTcyMTNcdTcyMTRcdTcyMTVcdTcyMTZcdTcyMTdcdTcyMThcdTcyMTlcdTcyMWFcdWZmZmRcdTcyMWJcdTcyMWNcdTcyMWVcdTcyMWZcdTcyMjBcdTcyMjFcdTcy'@;
put 'MjJcdTcyMjNcdTcyMjRcdTcyMjVcdTcyMjZcdTcyMjdcdTcyMjlcdTcyMmJcdTcyMmRcdTcyMmVcdTcyMmZcdTcyMzJcdTcyMzNcdTcyMzRcdTcyM2FcdTcyM2NcdTcyM2VcdTcyNDBcdTcyNDFcdTcyNDJcdTcyNDNcdTcyNDRcdTcyNDVcdTcyNDZcdTcyNDlcdTcyNGFcdTcyNGJcdTcyNGVc'@;
put 'dTcyNGZcdTcyNTBcdTcyNTFcdTcyNTNcdTcyNTRcdTcyNTVcdTcyNTdcdTcyNThcdTcyNWFcdTcyNWNcdTcyNWVcdTcyNjBcdTcyNjNcdTcyNjRcdTcyNjVcdTcyNjhcdTcyNmFcdTcyNmJcdTcyNmNcdTcyNmRcdTcyNzBcdTcyNzFcdTcyNzNcdTcyNzRcdTcyNzZcdTcyNzdcdTcyNzhcdTcy'@;
put 'N2JcdTcyN2NcdTcyN2RcdTcyODJcdTcyODNcdTcyODVcdTcyODZcdTcyODdcdTcyODhcdTcyODlcdTcyOGNcdTcyOGVcdTcyOTBcdTcyOTFcdTcyOTNcdTcyOTRcdTcyOTVcdTcyOTZcdTcyOTdcdTcyOThcdTcyOTlcdTcyOWFcdTcyOWJcdTcyOWNcdTcyOWRcdTcyOWVcdTcyYTBcdTcyYTFc'@;
put 'dTcyYTJcdTcyYTNcdTcyYTRcdTcyYTVcdTcyYTZcdTcyYTdcdTcyYThcdTcyYTlcdTcyYWFcdTcyYWJcdTcyYWVcdTcyYjFcdTcyYjJcdTcyYjNcdTcyYjVcdTcyYmFcdTcyYmJcdTcyYmNcdTcyYmRcdTcyYmVcdTcyYmZcdTcyYzBcdTcyYzVcdTcyYzZcdTcyYzdcdTcyYzlcdTcyY2FcdTcy'@;
put 'Y2JcdTcyY2NcdTcyY2ZcdTcyZDFcdTcyZDNcdTcyZDRcdTcyZDVcdTcyZDZcdTcyZDhcdTcyZGFcdTcyZGJcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxNjBdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE2MF1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTYwXVt2XV09NDA5NjArdixUWzQw'@;
put 'OTYwK3ZdPWtbMTYwXVt2XSk7Zm9yKGtbMTYxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHUzMDAwXHUzMDAxXHUzMDAyXHhiN1x1MDJjOVx1MDJjN1x4YThcdTMwMDNcdTMwMDVcdTIwMTRcdWZmNWVcdTIwMTZcdTIwMjZcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTMwMTRcdTMwMTVcdTMwMDhcdTMwMDlcdTMwMGFcdTMwMGJcdTMwMGNcdTMwMGRcdTMwMGVcdTMwMGZc'@;
put 'dTMwMTZcdTMwMTdcdTMwMTBcdTMwMTFceGIxXHhkN1x4ZjdcdTIyMzZcdTIyMjdcdTIyMjhcdTIyMTFcdTIyMGZcdTIyMmFcdTIyMjlcdTIyMDhcdTIyMzdcdTIyMWFcdTIyYTVcdTIyMjVcdTIyMjBcdTIzMTJcdTIyOTlcdTIyMmJcdTIyMmVcdTIyNjFcdTIyNGNcdTIyNDhcdTIyM2RcdTIy'@;
put 'MWRcdTIyNjBcdTIyNmVcdTIyNmZcdTIyNjRcdTIyNjVcdTIyMWVcdTIyMzVcdTIyMzRcdTI2NDJcdTI2NDBceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHVmZjA0XHhhNFx1ZmZlMFx1ZmZlMVx1MjAzMFx4YTdcdTIxMTZcdTI2MDZcdTI2MDVcdTI1Y2JcdTI1Y2ZcdTI1Y2VcdTI1YzdcdTI1YzZc'@;
put 'dTI1YTFcdTI1YTBcdTI1YjNcdTI1YjJcdTIwM2JcdTIxOTJcdTIxOTBcdTIxOTFcdTIxOTNcdTMwMTNcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxNjFdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE2MV1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTYxXVt2XV09NDEyMTYrdixUWzQxMjE2'@;
put 'K3ZdPWtbMTYxXVt2XSk7Zm9yKGtbMTYyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHUyMTcwXHUyMTcxXHUyMTcyXHUyMTczXHUyMTc0XHUyMTc1XHUyMTc2XHUyMTc3XHUyMTc4XHUyMTc5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNDg4XHUyNDg5XHUyNDhhXHUyNDhiXHUyNDhjXHUyNDhkXHUyNDhlXHUyNDhmXHUyNDkwXHUyNDkxXHUyNDky'@;
put 'XHUyNDkzXHUyNDk0XHUyNDk1XHUyNDk2XHUyNDk3XHUyNDk4XHUyNDk5XHUyNDlhXHUyNDliXHUyNDc0XHUyNDc1XHUyNDc2XHUyNDc3XHUyNDc4XHUyNDc5XHUyNDdhXHUyNDdiXHUyNDdjXHUyNDdkXHUyNDdlXHUyNDdmXHUyNDgwXHUyNDgxXHUyNDgyXHUyNDgzXHUyNDg0XHUyNDg1XHUy'@;
put 'NDg2XHUyNDg3XHUyNDYwXHUyNDYxXHUyNDYyXHUyNDYzXHUyNDY0XHUyNDY1XHUyNDY2XHUyNDY3XHUyNDY4XHUyNDY5XHVmZmZkXHVmZmZkXHUzMjIwXHUzMjIxXHUzMjIyXHUzMjIzXHUzMjI0XHUzMjI1XHUzMjI2XHUzMjI3XHUzMjI4XHUzMjI5XHVmZmZkXHVmZmZkXHUyMTYwXHUyMTYx'@;
put 'XHUyMTYyXHUyMTYzXHUyMTY0XHUyMTY1XHUyMTY2XHUyMTY3XHUyMTY4XHUyMTY5XHUyMTZhXHUyMTZiXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTYyXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxNjJdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE2Ml1bdl1dPTQx'@;
put 'NDcyK3YsVFs0MTQ3Mit2XT1rWzE2Ml1bdl0pO2ZvcihrWzE2M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmYwMVx1ZmYwMlx1ZmYwM1x1ZmZlNVx1ZmYwNVx1ZmYwNlx1ZmYwN1x1ZmYwOFx1ZmYwOVx1ZmYwYVx1ZmYwYlx1ZmYwY1x1ZmYwZFx1ZmYwZVx1ZmYwZlx1ZmYxMFx1ZmYxMVx1ZmYxMlx1ZmYxM1x1ZmYxNFx1ZmYxNVx1ZmYxNlx1ZmYxN1x1ZmYxOFx1ZmYx'@;
put 'OVx1ZmYxYVx1ZmYxYlx1ZmYxY1x1ZmYxZFx1ZmYxZVx1ZmYxZlx1ZmYyMFx1ZmYyMVx1ZmYyMlx1ZmYyM1x1ZmYyNFx1ZmYyNVx1ZmYyNlx1ZmYyN1x1ZmYyOFx1ZmYyOVx1ZmYyYVx1ZmYyYlx1ZmYyY1x1ZmYyZFx1ZmYyZVx1ZmYyZlx1ZmYzMFx1ZmYzMVx1ZmYzMlx1ZmYzM1x1ZmYzNFx1'@;
put 'ZmYzNVx1ZmYzNlx1ZmYzN1x1ZmYzOFx1ZmYzOVx1ZmYzYVx1ZmYzYlx1ZmYzY1x1ZmYzZFx1ZmYzZVx1ZmYzZlx1ZmY0MFx1ZmY0MVx1ZmY0Mlx1ZmY0M1x1ZmY0NFx1ZmY0NVx1ZmY0Nlx1ZmY0N1x1ZmY0OFx1ZmY0OVx1ZmY0YVx1ZmY0Ylx1ZmY0Y1x1ZmY0ZFx1ZmY0ZVx1ZmY0Zlx1ZmY1'@;
put 'MFx1ZmY1MVx1ZmY1Mlx1ZmY1M1x1ZmY1NFx1ZmY1NVx1ZmY1Nlx1ZmY1N1x1ZmY1OFx1ZmY1OVx1ZmY1YVx1ZmY1Ylx1ZmY1Y1x1ZmY1ZFx1ZmZlM1x1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE2M10ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTYzXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vb'@;
put 'a1sxNjNdW3ZdXT00MTcyOCt2LFRbNDE3Mjgrdl09a1sxNjNdW3ZdKTtmb3Ioa1sxNjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwNDFcdTMwNDJcdTMwNDNcdTMwNDRcdTMwNDVcdTMwNDZcdTMwNDdcdTMwNDhcdTMwNDlcdTMwNGFcdTMwNGJcdTMwNGNcdTMwNGRcdTMwNGVcdTMwNGZcdTMwNTBcdTMwNTFcdTMwNTJcdTMwNTNcdTMwNTRcdTMwNTVcdTMwNTZcdTMw'@;
put 'NTdcdTMwNThcdTMwNTlcdTMwNWFcdTMwNWJcdTMwNWNcdTMwNWRcdTMwNWVcdTMwNWZcdTMwNjBcdTMwNjFcdTMwNjJcdTMwNjNcdTMwNjRcdTMwNjVcdTMwNjZcdTMwNjdcdTMwNjhcdTMwNjlcdTMwNmFcdTMwNmJcdTMwNmNcdTMwNmRcdTMwNmVcdTMwNmZcdTMwNzBcdTMwNzFcdTMwNzJc'@;
put 'dTMwNzNcdTMwNzRcdTMwNzVcdTMwNzZcdTMwNzdcdTMwNzhcdTMwNzlcdTMwN2FcdTMwN2JcdTMwN2NcdTMwN2RcdTMwN2VcdTMwN2ZcdTMwODBcdTMwODFcdTMwODJcdTMwODNcdTMwODRcdTMwODVcdTMwODZcdTMwODdcdTMwODhcdTMwODlcdTMwOGFcdTMwOGJcdTMwOGNcdTMwOGRcdTMw'@;
put 'OGVcdTMwOGZcdTMwOTBcdTMwOTFcdTMwOTJcdTMwOTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxNjRdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE2NF1bdl0uY2hhckNv'@;
put 'ZGVBdCgwKSYmKHNlW2tbMTY0XVt2XV09NDE5ODQrdixUWzQxOTg0K3ZdPWtbMTY0XVt2XSk7Zm9yKGtbMTY1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMGExXHUzMGEyXHUzMGEzXHUzMGE0XHUzMGE1XHUzMGE2XHUzMGE3XHUzMGE4XHUzMGE5XHUzMGFhXHUzMGFiXHUzMGFjXHUzMGFkXHUzMGFlXHUzMGFmXHUzMGIwXHUzMGIxXHUzMGIyXHUzMGIzXHUzMGI0XHUz'@;
put 'MGI1XHUzMGI2XHUzMGI3XHUzMGI4XHUzMGI5XHUzMGJhXHUzMGJiXHUzMGJjXHUzMGJkXHUzMGJlXHUzMGJmXHUzMGMwXHUzMGMxXHUzMGMyXHUzMGMzXHUzMGM0XHUzMGM1XHUzMGM2XHUzMGM3XHUzMGM4XHUzMGM5XHUzMGNhXHUzMGNiXHUzMGNjXHUzMGNkXHUzMGNlXHUzMGNmXHUzMGQw'@;
put 'XHUzMGQxXHUzMGQyXHUzMGQzXHUzMGQ0XHUzMGQ1XHUzMGQ2XHUzMGQ3XHUzMGQ4XHUzMGQ5XHUzMGRhXHUzMGRiXHUzMGRjXHUzMGRkXHUzMGRlXHUzMGRmXHUzMGUwXHUzMGUxXHUzMGUyXHUzMGUzXHUzMGU0XHUzMGU1XHUzMGU2XHUzMGU3XHUzMGU4XHUzMGU5XHUzMGVhXHUzMGViXHUz'@;
put 'MGVjXHUzMGVkXHUzMGVlXHUzMGVmXHUzMGYwXHUzMGYxXHUzMGYyXHUzMGYzXHUzMGY0XHUzMGY1XHUzMGY2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTY1XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sx'@;
put 'NjVdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE2NV1bdl1dPTQyMjQwK3YsVFs0MjI0MCt2XT1rWzE2NV1bdl0pO2ZvcihrWzE2Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1MDNhM1x1'@;
put 'MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNi'@;
put 'ZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjM1x1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MDNjOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmUzNVx1ZmUzNlx1ZmUzOVx1ZmUzYVx1ZmUzZlx1ZmU0MFx1ZmUzZFx1ZmUzZVx1ZmU0MVx1ZmU0Mlx1'@;
put 'ZmU0M1x1ZmU0NFx1ZmZmZFx1ZmZmZFx1ZmUzYlx1ZmUzY1x1ZmUzN1x1ZmUzOFx1ZmUzMVx1ZmZmZFx1ZmUzM1x1ZmUzNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE2Nl0ubGVuZ3RoOysr'@;
put 'dik2NTUzMyE9PWtbMTY2XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxNjZdW3ZdXT00MjQ5Nit2LFRbNDI0OTYrdl09a1sxNjZdW3ZdKTtmb3Ioa1sxNjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MDFcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVc'@;
put 'dTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0NTFcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVc'@;
put 'dTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sx'@;
put 'NjddLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE2N11bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTY3XVt2XV09NDI3NTIrdixUWzQyNzUyK3ZdPWtbMTY3XVt2XSk7Zm9yKGtbMTY4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMmNh'@;
put 'XHUwMmNiXHUwMmQ5XHUyMDEzXHUyMDE1XHUyMDI1XHUyMDM1XHUyMTA1XHUyMTA5XHUyMTk2XHUyMTk3XHUyMTk4XHUyMTk5XHUyMjE1XHUyMjFmXHUyMjIzXHUyMjUyXHUyMjY2XHUyMjY3XHUyMmJmXHUyNTUwXHUyNTUxXHUyNTUyXHUyNTUzXHUyNTU0XHUyNTU1XHUyNTU2XHUyNTU3XHUy'@;
put 'NTU4XHUyNTU5XHUyNTVhXHUyNTViXHUyNTVjXHUyNTVkXHUyNTVlXHUyNTVmXHUyNTYwXHUyNTYxXHUyNTYyXHUyNTYzXHUyNTY0XHUyNTY1XHUyNTY2XHUyNTY3XHUyNTY4XHUyNTY5XHUyNTZhXHUyNTZiXHUyNTZjXHUyNTZkXHUyNTZlXHUyNTZmXHUyNTcwXHUyNTcxXHUyNTcyXHUyNTcz'@;
put 'XHUyNTgxXHUyNTgyXHUyNTgzXHUyNTg0XHUyNTg1XHUyNTg2XHUyNTg3XHVmZmZkXHUyNTg4XHUyNTg5XHUyNThhXHUyNThiXHUyNThjXHUyNThkXHUyNThlXHUyNThmXHUyNTkzXHUyNTk0XHUyNTk1XHUyNWJjXHUyNWJkXHUyNWUyXHUyNWUzXHUyNWU0XHUyNWU1XHUyNjA5XHUyMjk1XHUz'@;
put 'MDEyXHUzMDFkXHUzMDFlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMTAxXHhlMVx1MDFjZVx4ZTBcdTAxMTNceGU5XHUwMTFiXHhlOFx1MDEyYlx4ZWRcdTAxZDBceGVjXHUwMTRkXHhmM1x1MDFkMlx4ZjJcdTAx'@;
put 'NmJceGZhXHUwMWQ0XHhmOVx1MDFkNlx1MDFkOFx1MDFkYVx1MDFkY1x4ZmNceGVhXHUwMjUxXHVmZmZkXHUwMTQ0XHUwMTQ4XHVmZmZkXHUwMjYxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMTA1XHUzMTA2XHUzMTA3XHUzMTA4XHUzMTA5XHUzMTBhXHUzMTBiXHUzMTBjXHUzMTBkXHUz'@;
put 'MTBlXHUzMTBmXHUzMTEwXHUzMTExXHUzMTEyXHUzMTEzXHUzMTE0XHUzMTE1XHUzMTE2XHUzMTE3XHUzMTE4XHUzMTE5XHUzMTFhXHUzMTFiXHUzMTFjXHUzMTFkXHUzMTFlXHUzMTFmXHUzMTIwXHUzMTIxXHUzMTIyXHUzMTIzXHUzMTI0XHUzMTI1XHUzMTI2XHUzMTI3XHUzMTI4XHUzMTI5'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTY4XS5sZW5ndGg7'@;
put 'Kyt2KTY1NTMzIT09a1sxNjhdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE2OF1bdl1dPTQzMDA4K3YsVFs0MzAwOCt2XT1rWzE2OF1bdl0pO2ZvcihrWzE2OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzAyMVx1MzAyMlx1MzAy'@;
put 'M1x1MzAyNFx1MzAyNVx1MzAyNlx1MzAyN1x1MzAyOFx1MzAyOVx1MzJhM1x1MzM4ZVx1MzM4Zlx1MzM5Y1x1MzM5ZFx1MzM5ZVx1MzNhMVx1MzNjNFx1MzNjZVx1MzNkMVx1MzNkMlx1MzNkNVx1ZmUzMFx1ZmZlMlx1ZmZlNFx1ZmZmZFx1MjEyMVx1MzIzMVx1ZmZmZFx1MjAxMFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1MzBmY1x1MzA5Ylx1MzA5Y1x1MzBmZFx1MzBmZVx1MzAwNlx1MzA5ZFx1MzA5ZVx1ZmU0OVx1ZmU0YVx1ZmU0Ylx1ZmU0Y1x1ZmU0ZFx1ZmU0ZVx1ZmU0Zlx1ZmU1MFx1ZmU1MVx1ZmU1Mlx1ZmU1NFx1ZmU1NVx1ZmU1Nlx1ZmU1N1x1ZmU1OVx1ZmU1YVx1ZmU1Ylx1ZmU1'@;
put 'Y1x1ZmU1ZFx1ZmU1ZVx1ZmU1Zlx1ZmU2MFx1ZmU2MVx1ZmZmZFx1ZmU2Mlx1ZmU2M1x1ZmU2NFx1ZmU2NVx1ZmU2Nlx1ZmU2OFx1ZmU2OVx1ZmU2YVx1ZmU2Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1MzAwN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjUwMFx1MjUwMVx1MjUwMlx1MjUwM1x1MjUwNFx1MjUwNVx1MjUwNlx1MjUwN1x1MjUwOFx1MjUwOVx1MjUwYVx1MjUwYlx1MjUw'@;
put 'Y1x1MjUwZFx1MjUwZVx1MjUwZlx1MjUxMFx1MjUxMVx1MjUxMlx1MjUxM1x1MjUxNFx1MjUxNVx1MjUxNlx1MjUxN1x1MjUxOFx1MjUxOVx1MjUxYVx1MjUxYlx1MjUxY1x1MjUxZFx1MjUxZVx1MjUxZlx1MjUyMFx1MjUyMVx1MjUyMlx1MjUyM1x1MjUyNFx1MjUyNVx1MjUyNlx1MjUyN1x1'@;
put 'MjUyOFx1MjUyOVx1MjUyYVx1MjUyYlx1MjUyY1x1MjUyZFx1MjUyZVx1MjUyZlx1MjUzMFx1MjUzMVx1MjUzMlx1MjUzM1x1MjUzNFx1MjUzNVx1MjUzNlx1MjUzN1x1MjUzOFx1MjUzOVx1MjUzYVx1MjUzYlx1MjUzY1x1MjUzZFx1MjUzZVx1MjUzZlx1MjU0MFx1MjU0MVx1MjU0Mlx1MjU0'@;
put 'M1x1MjU0NFx1MjU0NVx1MjU0Nlx1MjU0N1x1MjU0OFx1MjU0OVx1MjU0YVx1MjU0Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1r'@;
put 'WzE2OV0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTY5XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxNjldW3ZdXT00MzI2NCt2LFRbNDMyNjQrdl09a1sxNjldW3ZdKTtmb3Ioa1sxNzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcy'@;
put 'ZGNcdTcyZGRcdTcyZGZcdTcyZTJcdTcyZTNcdTcyZTRcdTcyZTVcdTcyZTZcdTcyZTdcdTcyZWFcdTcyZWJcdTcyZjVcdTcyZjZcdTcyZjlcdTcyZmRcdTcyZmVcdTcyZmZcdTczMDBcdTczMDJcdTczMDRcdTczMDVcdTczMDZcdTczMDdcdTczMDhcdTczMDlcdTczMGJcdTczMGNcdTczMGRc'@;
put 'dTczMGZcdTczMTBcdTczMTFcdTczMTJcdTczMTRcdTczMThcdTczMTlcdTczMWFcdTczMWZcdTczMjBcdTczMjNcdTczMjRcdTczMjZcdTczMjdcdTczMjhcdTczMmRcdTczMmZcdTczMzBcdTczMzJcdTczMzNcdTczMzVcdTczMzZcdTczM2FcdTczM2JcdTczM2NcdTczM2RcdTczNDBcdTcz'@;
put 'NDFcdTczNDJcdTczNDNcdTczNDRcdTczNDVcdTczNDZcdTczNDdcdTczNDhcdWZmZmRcdTczNDlcdTczNGFcdTczNGJcdTczNGNcdTczNGVcdTczNGZcdTczNTFcdTczNTNcdTczNTRcdTczNTVcdTczNTZcdTczNThcdTczNTlcdTczNWFcdTczNWJcdTczNWNcdTczNWRcdTczNWVcdTczNWZc'@;
put 'dTczNjFcdTczNjJcdTczNjNcdTczNjRcdTczNjVcdTczNjZcdTczNjdcdTczNjhcdTczNjlcdTczNmFcdTczNmJcdTczNmVcdTczNzBcdTczNzFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0'@;
put 'KCIiKSx2PTA7diE9a1sxNzBdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE3MF1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTcwXVt2XV09NDM1MjArdixUWzQzNTIwK3ZdPWtbMTcwXVt2XSk7Zm9yKGtbMTcxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHU3MzcyXHU3MzczXHU3Mzc0XHU3Mzc1XHU3Mzc2XHU3Mzc3XHU3Mzc4XHU3Mzc5XHU3MzdhXHU3MzdiXHU3MzdjXHU3MzdkXHU3MzdmXHU3MzgwXHU3MzgxXHU3MzgyXHU3MzgzXHU3Mzg1XHU3Mzg2XHU3Mzg4XHU3MzhhXHU3MzhjXHU3MzhkXHU3MzhmXHU3MzkwXHU3Mzky'@;
put 'XHU3MzkzXHU3Mzk0XHU3Mzk1XHU3Mzk3XHU3Mzk4XHU3Mzk5XHU3MzlhXHU3MzljXHU3MzlkXHU3MzllXHU3M2EwXHU3M2ExXHU3M2EzXHU3M2E0XHU3M2E1XHU3M2E2XHU3M2E3XHU3M2E4XHU3M2FhXHU3M2FjXHU3M2FkXHU3M2IxXHU3M2I0XHU3M2I1XHU3M2I2XHU3M2I4XHU3M2I5XHU3'@;
put 'M2JjXHU3M2JkXHU3M2JlXHU3M2JmXHU3M2MxXHU3M2MzXHU3M2M0XHU3M2M1XHU3M2M2XHU3M2M3XHVmZmZkXHU3M2NiXHU3M2NjXHU3M2NlXHU3M2QyXHU3M2QzXHU3M2Q0XHU3M2Q1XHU3M2Q2XHU3M2Q3XHU3M2Q4XHU3M2RhXHU3M2RiXHU3M2RjXHU3M2RkXHU3M2RmXHU3M2UxXHU3M2Uy'@;
put 'XHU3M2UzXHU3M2U0XHU3M2U2XHU3M2U4XHU3M2VhXHU3M2ViXHU3M2VjXHU3M2VlXHU3M2VmXHU3M2YwXHU3M2YxXHU3M2YzXHU3M2Y0XHU3M2Y1XHU3M2Y2XHU3M2Y3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTcxXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxNzFdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE3MV1bdl1dPTQzNzc2K3YsVFs0Mzc3Nit2XT1rWzE3MV1bdl0pO2ZvcihrWzE3Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzNmOFx1NzNmOVx1NzNmYVx1NzNmYlx1NzNmY1x1NzNmZFx1NzNmZVx1NzNmZlx1NzQwMFx1NzQwMVx1NzQwMlx1NzQwNFx1NzQwN1x1NzQwOFx1NzQwYlx1NzQwY1x1NzQwZFx1NzQwZVx1NzQxMVx1NzQxMlx1NzQxM1x1NzQxNFx1NzQxNVx1NzQx'@;
put 'Nlx1NzQxN1x1NzQxOFx1NzQxOVx1NzQxY1x1NzQxZFx1NzQxZVx1NzQxZlx1NzQyMFx1NzQyMVx1NzQyM1x1NzQyNFx1NzQyN1x1NzQyOVx1NzQyYlx1NzQyZFx1NzQyZlx1NzQzMVx1NzQzMlx1NzQzN1x1NzQzOFx1NzQzOVx1NzQzYVx1NzQzYlx1NzQzZFx1NzQzZVx1NzQzZlx1NzQ0MFx1'@;
put 'NzQ0Mlx1NzQ0M1x1NzQ0NFx1NzQ0NVx1NzQ0Nlx1NzQ0N1x1NzQ0OFx1NzQ0OVx1NzQ0YVx1NzQ0Ylx1NzQ0Y1x1NzQ0ZFx1ZmZmZFx1NzQ0ZVx1NzQ0Zlx1NzQ1MFx1NzQ1MVx1NzQ1Mlx1NzQ1M1x1NzQ1NFx1NzQ1Nlx1NzQ1OFx1NzQ1ZFx1NzQ2MFx1NzQ2MVx1NzQ2Mlx1NzQ2M1x1NzQ2'@;
put 'NFx1NzQ2NVx1NzQ2Nlx1NzQ2N1x1NzQ2OFx1NzQ2OVx1NzQ2YVx1NzQ2Ylx1NzQ2Y1x1NzQ2ZVx1NzQ2Zlx1NzQ3MVx1NzQ3Mlx1NzQ3M1x1NzQ3NFx1NzQ3NVx1NzQ3OFx1NzQ3OVx1NzQ3YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE3Ml0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTcyXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxNzJdW3ZdXT00NDAzMit2LFRbNDQwMzIrdl09a1sxNzJdW3ZdKTtmb3Ioa1sxNzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0N2JcdTc0N2NcdTc0N2RcdTc0N2ZcdTc0ODJcdTc0ODRcdTc0ODVcdTc0ODZcdTc0ODhcdTc0ODlcdTc0OGFcdTc0OGNcdTc0OGRcdTc0OGZcdTc0OTFcdTc0OTJcdTc0OTNcdTc0OTRcdTc0OTVcdTc0OTZcdTc0OTdcdTc0'@;
put 'OThcdTc0OTlcdTc0OWFcdTc0OWJcdTc0OWRcdTc0OWZcdTc0YTBcdTc0YTFcdTc0YTJcdTc0YTNcdTc0YTRcdTc0YTVcdTc0YTZcdTc0YWFcdTc0YWJcdTc0YWNcdTc0YWRcdTc0YWVcdTc0YWZcdTc0YjBcdTc0YjFcdTc0YjJcdTc0YjNcdTc0YjRcdTc0YjVcdTc0YjZcdTc0YjdcdTc0Yjhc'@;
put 'dTc0YjlcdTc0YmJcdTc0YmNcdTc0YmRcdTc0YmVcdTc0YmZcdTc0YzBcdTc0YzFcdTc0YzJcdTc0YzNcdTc0YzRcdTc0YzVcdTc0YzZcdTc0YzdcdWZmZmRcdTc0YzhcdTc0YzlcdTc0Y2FcdTc0Y2JcdTc0Y2NcdTc0Y2RcdTc0Y2VcdTc0Y2ZcdTc0ZDBcdTc0ZDFcdTc0ZDNcdTc0ZDRcdTc0'@;
put 'ZDVcdTc0ZDZcdTc0ZDdcdTc0ZDhcdTc0ZDlcdTc0ZGFcdTc0ZGJcdTc0ZGRcdTc0ZGZcdTc0ZTFcdTc0ZTVcdTc0ZTdcdTc0ZThcdTc0ZTlcdTc0ZWFcdTc0ZWJcdTc0ZWNcdTc0ZWRcdTc0ZjBcdTc0ZjFcdTc0ZjJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxNzNdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE3M11bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTczXVt2XV09NDQyODgrdixUWzQ0Mjg4K3ZdPWtbMTczXVt2XSk7Zm9yKGtbMTc0XT0iXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NGYzXHU3NGY1XHU3NGY4XHU3NGY5XHU3NGZhXHU3NGZiXHU3NGZjXHU3NGZkXHU3NGZlXHU3NTAwXHU3NTAxXHU3NTAyXHU3NTAzXHU3NTA1XHU3NTA2XHU3NTA3XHU3NTA4XHU3NTA5XHU3NTBhXHU3'@;
put 'NTBiXHU3NTBjXHU3NTBlXHU3NTEwXHU3NTEyXHU3NTE0XHU3NTE1XHU3NTE2XHU3NTE3XHU3NTFiXHU3NTFkXHU3NTFlXHU3NTIwXHU3NTIxXHU3NTIyXHU3NTIzXHU3NTI0XHU3NTI2XHU3NTI3XHU3NTJhXHU3NTJlXHU3NTM0XHU3NTM2XHU3NTM5XHU3NTNjXHU3NTNkXHU3NTNmXHU3NTQx'@;
put 'XHU3NTQyXHU3NTQzXHU3NTQ0XHU3NTQ2XHU3NTQ3XHU3NTQ5XHU3NTRhXHU3NTRkXHU3NTUwXHU3NTUxXHU3NTUyXHU3NTUzXHU3NTU1XHU3NTU2XHU3NTU3XHU3NTU4XHVmZmZkXHU3NTVkXHU3NTVlXHU3NTVmXHU3NTYwXHU3NTYxXHU3NTYyXHU3NTYzXHU3NTY0XHU3NTY3XHU3NTY4XHU3'@;
put 'NTY5XHU3NTZiXHU3NTZjXHU3NTZkXHU3NTZlXHU3NTZmXHU3NTcwXHU3NTcxXHU3NTczXHU3NTc1XHU3NTc2XHU3NTc3XHU3NTdhXHU3NTdiXHU3NTdjXHU3NTdkXHU3NTdlXHU3NTgwXHU3NTgxXHU3NTgyXHU3NTg0XHU3NTg1XHU3NTg3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTc0XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxNzRdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE3NF1bdl1dPTQ0NTQ0K3YsVFs0NDU0NCt2XT1rWzE3NF1bdl0pO2Zvcihr'@;
put 'WzE3NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzU4OFx1NzU4OVx1NzU4YVx1NzU4Y1x1NzU4ZFx1NzU4ZVx1NzU5MFx1NzU5M1x1NzU5NVx1NzU5OFx1NzU5Ylx1NzU5Y1x1NzU5ZVx1NzVhMlx1NzVhNlx1NzVhN1x1NzVhOFx1'@;
put 'NzVhOVx1NzVhYVx1NzVhZFx1NzViNlx1NzViN1x1NzViYVx1NzViYlx1NzViZlx1NzVjMFx1NzVjMVx1NzVjNlx1NzVjYlx1NzVjY1x1NzVjZVx1NzVjZlx1NzVkMFx1NzVkMVx1NzVkM1x1NzVkN1x1NzVkOVx1NzVkYVx1NzVkY1x1NzVkZFx1NzVkZlx1NzVlMFx1NzVlMVx1NzVlNVx1NzVl'@;
put 'OVx1NzVlY1x1NzVlZFx1NzVlZVx1NzVlZlx1NzVmMlx1NzVmM1x1NzVmNVx1NzVmNlx1NzVmN1x1NzVmOFx1NzVmYVx1NzVmYlx1NzVmZFx1NzVmZVx1NzYwMlx1NzYwNFx1NzYwNlx1NzYwN1x1ZmZmZFx1NzYwOFx1NzYwOVx1NzYwYlx1NzYwZFx1NzYwZVx1NzYwZlx1NzYxMVx1NzYxMlx1'@;
put 'NzYxM1x1NzYxNFx1NzYxNlx1NzYxYVx1NzYxY1x1NzYxZFx1NzYxZVx1NzYyMVx1NzYyM1x1NzYyN1x1NzYyOFx1NzYyY1x1NzYyZVx1NzYyZlx1NzYzMVx1NzYzMlx1NzYzNlx1NzYzN1x1NzYzOVx1NzYzYVx1NzYzYlx1NzYzZFx1NzY0MVx1NzY0Mlx1NzY0NFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE3NV0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTc1XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxNzVdW3ZdXT00NDgwMCt2LFRbNDQ4MDArdl09a1sx'@;
put 'NzVdW3ZdKTtmb3Ioa1sxNzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc2NDVcdTc2NDZcdTc2NDdcdTc2NDhcdTc2NDlcdTc2NGFcdTc2NGJcdTc2NGVcdTc2NGZcdTc2NTBcdTc2NTFcdTc2NTJcdTc2NTNcdTc2NTVcdTc2NTdc'@;
put 'dTc2NThcdTc2NTlcdTc2NWFcdTc2NWJcdTc2NWRcdTc2NWZcdTc2NjBcdTc2NjFcdTc2NjJcdTc2NjRcdTc2NjVcdTc2NjZcdTc2NjdcdTc2NjhcdTc2NjlcdTc2NmFcdTc2NmNcdTc2NmRcdTc2NmVcdTc2NzBcdTc2NzFcdTc2NzJcdTc2NzNcdTc2NzRcdTc2NzVcdTc2NzZcdTc2NzdcdTc2'@;
put 'NzlcdTc2N2FcdTc2N2NcdTc2N2ZcdTc2ODBcdTc2ODFcdTc2ODNcdTc2ODVcdTc2ODlcdTc2OGFcdTc2OGNcdTc2OGRcdTc2OGZcdTc2OTBcdTc2OTJcdTc2OTRcdTc2OTVcdTc2OTdcdTc2OThcdTc2OWFcdTc2OWJcdWZmZmRcdTc2OWNcdTc2OWRcdTc2OWVcdTc2OWZcdTc2YTBcdTc2YTFc'@;
put 'dTc2YTJcdTc2YTNcdTc2YTVcdTc2YTZcdTc2YTdcdTc2YThcdTc2YTlcdTc2YWFcdTc2YWJcdTc2YWNcdTc2YWRcdTc2YWZcdTc2YjBcdTc2YjNcdTc2YjVcdTc2YjZcdTc2YjdcdTc2YjhcdTc2YjlcdTc2YmFcdTc2YmJcdTc2YmNcdTc2YmRcdTc2YmVcdTc2YzBcdTc2YzFcdTc2YzNcdTU1'@;
put 'NGFcdTk2M2ZcdTU3YzNcdTYzMjhcdTU0Y2VcdTU1MDlcdTU0YzBcdTc2OTFcdTc2NGNcdTg1M2NcdTc3ZWVcdTgyN2VcdTc4OGRcdTcyMzFcdTk2OThcdTk3OGRcdTZjMjhcdTViODlcdTRmZmFcdTYzMDlcdTY2OTdcdTVjYjhcdTgwZmFcdTY4NDhcdTgwYWVcdTY2MDJcdTc2Y2VcdTUxZjlc'@;
put 'dTY1NTZcdTcxYWNcdTdmZjFcdTg4ODRcdTUwYjJcdTU5NjVcdTYxY2FcdTZmYjNcdTgyYWRcdTYzNGNcdTYyNTJcdTUzZWRcdTU0MjdcdTdiMDZcdTUxNmJcdTc1YTRcdTVkZjRcdTYyZDRcdThkY2JcdTk3NzZcdTYyOGFcdTgwMTlcdTU3NWRcdTk3MzhcdTdmNjJcdTcyMzhcdTc2N2RcdTY3'@;
put 'Y2ZcdTc2N2VcdTY0NDZcdTRmNzBcdThkMjVcdTYyZGNcdTdhMTdcdTY1OTFcdTczZWRcdTY0MmNcdTYyNzNcdTgyMmNcdTk4ODFcdTY3N2ZcdTcyNDhcdTYyNmVcdTYyY2NcdTRmMzRcdTc0ZTNcdTUzNGFcdTUyOWVcdTdlY2FcdTkwYTZcdTVlMmVcdTY4ODZcdTY5OWNcdTgxODBcdTdlZDFc'@;
put 'dTY4ZDJcdTc4YzVcdTg2OGNcdTk1NTFcdTUwOGRcdThjMjRcdTgyZGVcdTgwZGVcdTUzMDVcdTg5MTJcdTUyNjVcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxNzZdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE3Nl1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTc2XVt2XV09NDUwNTYrdixU'@;
put 'WzQ1MDU2K3ZdPWtbMTc2XVt2XSk7Zm9yKGtbMTc3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NmM0XHU3NmM3XHU3NmM5XHU3NmNiXHU3NmNjXHU3NmQzXHU3NmQ1XHU3NmQ5XHU3NmRhXHU3NmRjXHU3NmRkXHU3NmRlXHU3NmUw'@;
put 'XHU3NmUxXHU3NmUyXHU3NmUzXHU3NmU0XHU3NmU2XHU3NmU3XHU3NmU4XHU3NmU5XHU3NmVhXHU3NmViXHU3NmVjXHU3NmVkXHU3NmYwXHU3NmYzXHU3NmY1XHU3NmY2XHU3NmY3XHU3NmZhXHU3NmZiXHU3NmZkXHU3NmZmXHU3NzAwXHU3NzAyXHU3NzAzXHU3NzA1XHU3NzA2XHU3NzBhXHU3'@;
put 'NzBjXHU3NzBlXHU3NzBmXHU3NzEwXHU3NzExXHU3NzEyXHU3NzEzXHU3NzE0XHU3NzE1XHU3NzE2XHU3NzE3XHU3NzE4XHU3NzFiXHU3NzFjXHU3NzFkXHU3NzFlXHU3NzIxXHU3NzIzXHU3NzI0XHU3NzI1XHU3NzI3XHU3NzJhXHU3NzJiXHVmZmZkXHU3NzJjXHU3NzJlXHU3NzMwXHU3NzMx'@;
put 'XHU3NzMyXHU3NzMzXHU3NzM0XHU3NzM5XHU3NzNiXHU3NzNkXHU3NzNlXHU3NzNmXHU3NzQyXHU3NzQ0XHU3NzQ1XHU3NzQ2XHU3NzQ4XHU3NzQ5XHU3NzRhXHU3NzRiXHU3NzRjXHU3NzRkXHU3NzRlXHU3NzRmXHU3NzUyXHU3NzUzXHU3NzU0XHU3NzU1XHU3NzU2XHU3NzU3XHU3NzU4XHU3'@;
put 'NzU5XHU3NzVjXHU4NTg0XHU5NmY5XHU0ZmRkXHU1ODIxXHU5OTcxXHU1YjlkXHU2MmIxXHU2MmE1XHU2NmI0XHU4Yzc5XHU5YzhkXHU3MjA2XHU2NzZmXHU3ODkxXHU2MGIyXHU1MzUxXHU1MzE3XHU4Zjg4XHU4MGNjXHU4ZDFkXHU5NGExXHU1MDBkXHU3MmM4XHU1OTA3XHU2MGViXHU3MTE5'@;
put 'XHU4OGFiXHU1OTU0XHU4MmVmXHU2NzJjXHU3YjI4XHU1ZDI5XHU3ZWY3XHU3NTJkXHU2Y2Y1XHU4ZTY2XHU4ZmY4XHU5MDNjXHU5ZjNiXHU2YmQ0XHU5MTE5XHU3YjE0XHU1ZjdjXHU3OGE3XHU4NGQ2XHU4NTNkXHU2YmQ1XHU2YmQ5XHU2YmQ2XHU1ZTAxXHU1ZTg3XHU3NWY5XHU5NWVkXHU2'@;
put 'NTVkXHU1ZjBhXHU1ZmM1XHU4ZjlmXHU1OGMxXHU4MWMyXHU5MDdmXHU5NjViXHU5N2FkXHU4ZmI5XHU3ZjE2XHU4ZDJjXHU2MjQxXHU0ZmJmXHU1M2Q4XHU1MzVlXHU4ZmE4XHU4ZmE5XHU4ZmFiXHU5MDRkXHU2ODA3XHU1ZjZhXHU4MTk4XHU4ODY4XHU5Y2Q2XHU2MThiXHU1MjJiXHU3NjJh'@;
put 'XHU1ZjZjXHU2NThjXHU2ZmQyXHU2ZWU4XHU1YmJlXHU2NDQ4XHU1MTc1XHU1MWIwXHU2N2M0XHU0ZTE5XHU3OWM5XHU5OTdjXHU3MGIzXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTc3XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxNzddW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE3N11b'@;
put 'dl1dPTQ1MzEyK3YsVFs0NTMxMit2XT1rWzE3N11bdl0pO2ZvcihrWzE3OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzc1ZFx1Nzc1ZVx1Nzc1Zlx1Nzc2MFx1Nzc2NFx1Nzc2N1x1Nzc2OVx1Nzc2YVx1Nzc2ZFx1Nzc2ZVx1Nzc2'@;
put 'Zlx1Nzc3MFx1Nzc3MVx1Nzc3Mlx1Nzc3M1x1Nzc3NFx1Nzc3NVx1Nzc3Nlx1Nzc3N1x1Nzc3OFx1Nzc3YVx1Nzc3Ylx1Nzc3Y1x1Nzc4MVx1Nzc4Mlx1Nzc4M1x1Nzc4Nlx1Nzc4N1x1Nzc4OFx1Nzc4OVx1Nzc4YVx1Nzc4Ylx1Nzc4Zlx1Nzc5MFx1Nzc5M1x1Nzc5NFx1Nzc5NVx1Nzc5Nlx1'@;
put 'Nzc5N1x1Nzc5OFx1Nzc5OVx1Nzc5YVx1Nzc5Ylx1Nzc5Y1x1Nzc5ZFx1Nzc5ZVx1NzdhMVx1NzdhM1x1NzdhNFx1NzdhNlx1NzdhOFx1NzdhYlx1NzdhZFx1NzdhZVx1NzdhZlx1NzdiMVx1NzdiMlx1NzdiNFx1NzdiNlx1NzdiN1x1NzdiOFx1NzdiOVx1NzdiYVx1ZmZmZFx1NzdiY1x1Nzdi'@;
put 'ZVx1NzdjMFx1NzdjMVx1NzdjMlx1NzdjM1x1NzdjNFx1NzdjNVx1NzdjNlx1NzdjN1x1NzdjOFx1NzdjOVx1NzdjYVx1NzdjYlx1NzdjY1x1NzdjZVx1NzdjZlx1NzdkMFx1NzdkMVx1NzdkMlx1NzdkM1x1NzdkNFx1NzdkNVx1NzdkNlx1NzdkOFx1NzdkOVx1NzdkYVx1NzdkZFx1NzdkZVx1'@;
put 'NzdkZlx1NzdlMFx1NzdlMVx1NzdlNFx1NzVjNVx1NWU3Nlx1NzNiYlx1ODNlMFx1NjRhZFx1NjJlOFx1OTRiNVx1NmNlMlx1NTM1YVx1NTJjM1x1NjQwZlx1OTRjMlx1N2I5NFx1NGYyZlx1NWUxYlx1ODIzNlx1ODExNlx1ODE4YVx1NmUyNFx1NmNjYVx1OWE3M1x1NjM1NVx1NTM1Y1x1NTRm'@;
put 'YVx1ODg2NVx1NTdlMFx1NGUwZFx1NWUwM1x1NmI2NVx1N2MzZlx1OTBlOFx1NjAxNlx1NjRlNlx1NzMxY1x1ODhjMVx1Njc1MFx1NjI0ZFx1OGQyMlx1Nzc2Y1x1OGUyOVx1OTFjN1x1NWY2OVx1ODNkY1x1ODUyMVx1OTkxMFx1NTNjMlx1ODY5NVx1NmI4Ylx1NjBlZFx1NjBlOFx1NzA3Zlx1'@;
put 'ODJjZFx1ODIzMVx1NGVkM1x1NmNhN1x1ODVjZlx1NjRjZFx1N2NkOVx1NjlmZFx1NjZmOVx1ODM0OVx1NTM5NVx1N2I1Nlx1NGZhN1x1NTE4Y1x1NmQ0Ylx1NWM0Mlx1OGU2ZFx1NjNkMlx1NTNjOVx1ODMyY1x1ODMzNlx1NjdlNVx1NzhiNFx1NjQzZFx1NWJkZlx1NWM5NFx1NWRlZVx1OGJl'@;
put 'N1x1NjJjNlx1NjdmNFx1OGM3YVx1NjQwMFx1NjNiYVx1ODc0OVx1OTk4Ylx1OGMxN1x1N2YyMFx1OTRmMlx1NGVhN1x1OTYxMFx1OThhNFx1NjYwY1x1NzMxNlx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE3OF0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTc4XVt2XS5jaGFyQ29kZUF0KDAp'@;
put 'JiYoc2Vba1sxNzhdW3ZdXT00NTU2OCt2LFRbNDU1Njgrdl09a1sxNzhdW3ZdKTtmb3Ioa1sxNzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3ZTZcdTc3ZThcdTc3ZWFcdTc3ZWZcdTc3ZjBcdTc3ZjFcdTc3ZjJcdTc3ZjRcdTc3'@;
put 'ZjVcdTc3ZjdcdTc3ZjlcdTc3ZmFcdTc3ZmJcdTc3ZmNcdTc4MDNcdTc4MDRcdTc4MDVcdTc4MDZcdTc4MDdcdTc4MDhcdTc4MGFcdTc4MGJcdTc4MGVcdTc4MGZcdTc4MTBcdTc4MTNcdTc4MTVcdTc4MTlcdTc4MWJcdTc4MWVcdTc4MjBcdTc4MjFcdTc4MjJcdTc4MjRcdTc4MjhcdTc4MmFc'@;
put 'dTc4MmJcdTc4MmVcdTc4MmZcdTc4MzFcdTc4MzJcdTc4MzNcdTc4MzVcdTc4MzZcdTc4M2RcdTc4M2ZcdTc4NDFcdTc4NDJcdTc4NDNcdTc4NDRcdTc4NDZcdTc4NDhcdTc4NDlcdTc4NGFcdTc4NGJcdTc4NGRcdTc4NGZcdTc4NTFcdTc4NTNcdTc4NTRcdTc4NThcdTc4NTlcdTc4NWFcdWZm'@;
put 'ZmRcdTc4NWJcdTc4NWNcdTc4NWVcdTc4NWZcdTc4NjBcdTc4NjFcdTc4NjJcdTc4NjNcdTc4NjRcdTc4NjVcdTc4NjZcdTc4NjdcdTc4NjhcdTc4NjlcdTc4NmZcdTc4NzBcdTc4NzFcdTc4NzJcdTc4NzNcdTc4NzRcdTc4NzVcdTc4NzZcdTc4NzhcdTc4NzlcdTc4N2FcdTc4N2JcdTc4N2Rc'@;
put 'dTc4N2VcdTc4N2ZcdTc4ODBcdTc4ODFcdTc4ODJcdTc4ODNcdTU3M2FcdTVjMWRcdTVlMzhcdTk1N2ZcdTUwN2ZcdTgwYTBcdTUzODJcdTY1NWVcdTc1NDVcdTU1MzFcdTUwMjFcdThkODVcdTYyODRcdTk0OWVcdTY3MWRcdTU2MzJcdTZmNmVcdTVkZTJcdTU0MzVcdTcwOTJcdThmNjZcdTYy'@;
put 'NmZcdTY0YTRcdTYzYTNcdTVmN2JcdTZmODhcdTkwZjRcdTgxZTNcdThmYjBcdTVjMThcdTY2NjhcdTVmZjFcdTZjODlcdTk2NDhcdThkODFcdTg4NmNcdTY0OTFcdTc5ZjBcdTU3Y2VcdTZhNTlcdTYyMTBcdTU0NDhcdTRlNThcdTdhMGJcdTYwZTlcdTZmODRcdThiZGFcdTYyN2ZcdTkwMWVc'@;
put 'dTlhOGJcdTc5ZTRcdTU0MDNcdTc1ZjRcdTYzMDFcdTUzMTlcdTZjNjBcdThmZGZcdTVmMWJcdTlhNzBcdTgwM2JcdTlmN2ZcdTRmODhcdTVjM2FcdThkNjRcdTdmYzVcdTY1YTVcdTcwYmRcdTUxNDVcdTUxYjJcdTg2NmJcdTVkMDdcdTViYTBcdTYyYmRcdTkxNmNcdTc1NzRcdThlMGNcdTdh'@;
put 'MjBcdTYxMDFcdTdiNzlcdTRlYzdcdTdlZjhcdTc3ODVcdTRlMTFcdTgxZWRcdTUyMWRcdTUxZmFcdTZhNzFcdTUzYThcdThlODdcdTk1MDRcdTk2Y2ZcdTZlYzFcdTk2NjRcdTY5NWFcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxNzldLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE3OV1bdl0u'@;
put 'Y2hhckNvZGVBdCgwKSYmKHNlW2tbMTc5XVt2XV09NDU4MjQrdixUWzQ1ODI0K3ZdPWtbMTc5XVt2XSk7Zm9yKGtbMTgwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ODg0XHU3ODg1XHU3ODg2XHU3ODg4XHU3ODhhXHU3ODhiXHU3'@;
put 'ODhmXHU3ODkwXHU3ODkyXHU3ODk0XHU3ODk1XHU3ODk2XHU3ODk5XHU3ODlkXHU3ODllXHU3OGEwXHU3OGEyXHU3OGE0XHU3OGE2XHU3OGE4XHU3OGE5XHU3OGFhXHU3OGFiXHU3OGFjXHU3OGFkXHU3OGFlXHU3OGFmXHU3OGI1XHU3OGI2XHU3OGI3XHU3OGI4XHU3OGJhXHU3OGJiXHU3OGJj'@;
put 'XHU3OGJkXHU3OGJmXHU3OGMwXHU3OGMyXHU3OGMzXHU3OGM0XHU3OGM2XHU3OGM3XHU3OGM4XHU3OGNjXHU3OGNkXHU3OGNlXHU3OGNmXHU3OGQxXHU3OGQyXHU3OGQzXHU3OGQ2XHU3OGQ3XHU3OGQ4XHU3OGRhXHU3OGRiXHU3OGRjXHU3OGRkXHU3OGRlXHU3OGRmXHU3OGUwXHU3OGUxXHU3'@;
put 'OGUyXHU3OGUzXHVmZmZkXHU3OGU0XHU3OGU1XHU3OGU2XHU3OGU3XHU3OGU5XHU3OGVhXHU3OGViXHU3OGVkXHU3OGVlXHU3OGVmXHU3OGYwXHU3OGYxXHU3OGYzXHU3OGY1XHU3OGY2XHU3OGY4XHU3OGY5XHU3OGZiXHU3OGZjXHU3OGZkXHU3OGZlXHU3OGZmXHU3OTAwXHU3OTAyXHU3OTAz'@;
put 'XHU3OTA0XHU3OTA2XHU3OTA3XHU3OTA4XHU3OTA5XHU3OTBhXHU3OTBiXHU3OTBjXHU3ODQwXHU1MGE4XHU3N2Q3XHU2NDEwXHU4OWU2XHU1OTA0XHU2M2UzXHU1ZGRkXHU3YTdmXHU2OTNkXHU0ZjIwXHU4MjM5XHU1NTk4XHU0ZTMyXHU3NWFlXHU3YTk3XHU1ZTYyXHU1ZThhXHU5NWVmXHU1'@;
put 'MjFiXHU1NDM5XHU3MDhhXHU2Mzc2XHU5NTI0XHU1NzgyXHU2NjI1XHU2OTNmXHU5MTg3XHU1NTA3XHU2ZGYzXHU3ZWFmXHU4ODIyXHU2MjMzXHU3ZWYwXHU3NWI1XHU4MzI4XHU3OGMxXHU5NmNjXHU4ZjllXHU2MTQ4XHU3NGY3XHU4YmNkXHU2YjY0XHU1MjNhXHU4ZDUwXHU2YjIxXHU4MDZh'@;
put 'XHU4NDcxXHU1NmYxXHU1MzA2XHU0ZWNlXHU0ZTFiXHU1MWQxXHU3Yzk3XHU5MThiXHU3YzA3XHU0ZmMzXHU4ZTdmXHU3YmUxXHU3YTljXHU2NDY3XHU1ZDE0XHU1MGFjXHU4MTA2XHU3NjAxXHU3Y2I5XHU2ZGVjXHU3ZmUwXHU2NzUxXHU1YjU4XHU1YmY4XHU3OGNiXHU2NGFlXHU2NDEzXHU2'@;
put 'M2FhXHU2MzJiXHU5NTE5XHU2NDJkXHU4ZmJlXHU3YjU0XHU3NjI5XHU2MjUzXHU1OTI3XHU1NDQ2XHU2Yjc5XHU1MGEzXHU2MjM0XHU1ZTI2XHU2Yjg2XHU0ZWUzXHU4ZDM3XHU4ODhiXHU1Zjg1XHU5MDJlXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTgwXS5sZW5ndGg7Kyt2KTY1NTMz'@;
put 'IT09a1sxODBdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE4MF1bdl1dPTQ2MDgwK3YsVFs0NjA4MCt2XT1rWzE4MF1bdl0pO2ZvcihrWzE4MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzkwZFx1NzkwZVx1NzkwZlx1NzkxMFx1'@;
put 'NzkxMVx1NzkxMlx1NzkxNFx1NzkxNVx1NzkxNlx1NzkxN1x1NzkxOFx1NzkxOVx1NzkxYVx1NzkxYlx1NzkxY1x1NzkxZFx1NzkxZlx1NzkyMFx1NzkyMVx1NzkyMlx1NzkyM1x1NzkyNVx1NzkyNlx1NzkyN1x1NzkyOFx1NzkyOVx1NzkyYVx1NzkyYlx1NzkyY1x1NzkyZFx1NzkyZVx1Nzky'@;
put 'Zlx1NzkzMFx1NzkzMVx1NzkzMlx1NzkzM1x1NzkzNVx1NzkzNlx1NzkzN1x1NzkzOFx1NzkzOVx1NzkzZFx1NzkzZlx1Nzk0Mlx1Nzk0M1x1Nzk0NFx1Nzk0NVx1Nzk0N1x1Nzk0YVx1Nzk0Ylx1Nzk0Y1x1Nzk0ZFx1Nzk0ZVx1Nzk0Zlx1Nzk1MFx1Nzk1MVx1Nzk1Mlx1Nzk1NFx1Nzk1NVx1'@;
put 'Nzk1OFx1Nzk1OVx1Nzk2MVx1Nzk2M1x1ZmZmZFx1Nzk2NFx1Nzk2Nlx1Nzk2OVx1Nzk2YVx1Nzk2Ylx1Nzk2Y1x1Nzk2ZVx1Nzk3MFx1Nzk3MVx1Nzk3Mlx1Nzk3M1x1Nzk3NFx1Nzk3NVx1Nzk3Nlx1Nzk3OVx1Nzk3Ylx1Nzk3Y1x1Nzk3ZFx1Nzk3ZVx1Nzk3Zlx1Nzk4Mlx1Nzk4M1x1Nzk4'@;
put 'Nlx1Nzk4N1x1Nzk4OFx1Nzk4OVx1Nzk4Ylx1Nzk4Y1x1Nzk4ZFx1Nzk4ZVx1Nzk5MFx1Nzk5MVx1Nzk5Mlx1NjAyMFx1ODAzZFx1NjJjNVx1NGUzOVx1NTM1NVx1OTBmOFx1NjNiOFx1ODBjNlx1NjVlNlx1NmMyZVx1NGY0Nlx1NjBlZVx1NmRlMVx1OGJkZVx1NWYzOVx1ODZjYlx1NWY1M1x1'@;
put 'NjMyMVx1NTE1YVx1ODM2MVx1Njg2M1x1NTIwMFx1NjM2M1x1OGU0OFx1NTAxMlx1NWM5Ylx1Nzk3N1x1NWJmY1x1NTIzMFx1N2EzYlx1NjBiY1x1OTA1M1x1NzZkN1x1NWZiN1x1NWY5N1x1NzY4NFx1OGU2Y1x1NzA2Zlx1NzY3Ylx1N2I0OVx1NzdhYVx1NTFmM1x1OTA5M1x1NTgyNFx1NGY0'@;
put 'ZVx1NmVmNFx1OGZlYVx1NjU0Y1x1N2IxYlx1NzJjNFx1NmRhNFx1N2ZkZlx1NWFlMVx1NjJiNVx1NWU5NVx1NTczMFx1ODQ4Mlx1N2IyY1x1NWUxZFx1NWYxZlx1OTAxMlx1N2YxNFx1OThhMFx1NjM4Mlx1NmVjN1x1Nzg5OFx1NzBiOVx1NTE3OFx1OTc1Ylx1NTdhYlx1NzUzNVx1NGY0M1x1'@;
put 'NzUzOFx1NWU5N1x1NjBlNlx1NTk2MFx1NmRjMFx1NmJiZlx1Nzg4OVx1NTNmY1x1OTZkNVx1NTFjYlx1NTIwMVx1NjM4OVx1NTQwYVx1OTQ5M1x1OGMwM1x1OGRjY1x1NzIzOVx1Nzg5Zlx1ODc3Nlx1OGZlZFx1OGMwZFx1NTNlMFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE4MV0ubGVu'@;
put 'Z3RoOysrdik2NTUzMyE9PWtbMTgxXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxODFdW3ZdXT00NjMzNit2LFRbNDYzMzYrdl09a1sxODFdW3ZdKTtmb3Ioa1sxODJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5OTNcdTc5OTRc'@;
put 'dTc5OTVcdTc5OTZcdTc5OTdcdTc5OThcdTc5OTlcdTc5OWJcdTc5OWNcdTc5OWRcdTc5OWVcdTc5OWZcdTc5YTBcdTc5YTFcdTc5YTJcdTc5YTNcdTc5YTRcdTc5YTVcdTc5YTZcdTc5YThcdTc5YTlcdTc5YWFcdTc5YWJcdTc5YWNcdTc5YWRcdTc5YWVcdTc5YWZcdTc5YjBcdTc5YjFcdTc5'@;
put 'YjJcdTc5YjRcdTc5YjVcdTc5YjZcdTc5YjdcdTc5YjhcdTc5YmNcdTc5YmZcdTc5YzJcdTc5YzRcdTc5YzVcdTc5YzdcdTc5YzhcdTc5Y2FcdTc5Y2NcdTc5Y2VcdTc5Y2ZcdTc5ZDBcdTc5ZDNcdTc5ZDRcdTc5ZDZcdTc5ZDdcdTc5ZDlcdTc5ZGFcdTc5ZGJcdTc5ZGNcdTc5ZGRcdTc5ZGVc'@;
put 'dTc5ZTBcdTc5ZTFcdTc5ZTJcdTc5ZTVcdTc5ZThcdTc5ZWFcdWZmZmRcdTc5ZWNcdTc5ZWVcdTc5ZjFcdTc5ZjJcdTc5ZjNcdTc5ZjRcdTc5ZjVcdTc5ZjZcdTc5ZjdcdTc5ZjlcdTc5ZmFcdTc5ZmNcdTc5ZmVcdTc5ZmZcdTdhMDFcdTdhMDRcdTdhMDVcdTdhMDdcdTdhMDhcdTdhMDlcdTdh'@;
put 'MGFcdTdhMGNcdTdhMGZcdTdhMTBcdTdhMTFcdTdhMTJcdTdhMTNcdTdhMTVcdTdhMTZcdTdhMThcdTdhMTlcdTdhMWJcdTdhMWNcdTRlMDFcdTc2ZWZcdTUzZWVcdTk0ODlcdTk4NzZcdTlmMGVcdTk1MmRcdTViOWFcdThiYTJcdTRlMjJcdTRlMWNcdTUxYWNcdTg0NjNcdTYxYzJcdTUyYThc'@;
put 'dTY4MGJcdTRmOTdcdTYwNmJcdTUxYmJcdTZkMWVcdTUxNWNcdTYyOTZcdTY1OTdcdTk2NjFcdThjNDZcdTkwMTdcdTc1ZDhcdTkwZmRcdTc3NjNcdTZiZDJcdTcyOGFcdTcyZWNcdThiZmJcdTU4MzVcdTc3NzlcdThkNGNcdTY3NWNcdTk1NDBcdTgwOWFcdTVlYTZcdTZlMjFcdTU5OTJcdTdh'@;
put 'ZWZcdTc3ZWRcdTk1M2JcdTZiYjVcdTY1YWRcdTdmMGVcdTU4MDZcdTUxNTFcdTk2MWZcdTViZjlcdTU4YTlcdTU0MjhcdThlNzJcdTY1NjZcdTk4N2ZcdTU2ZTRcdTk0OWRcdTc2ZmVcdTkwNDFcdTYzODdcdTU0YzZcdTU5MWFcdTU5M2FcdTU3OWJcdThlYjJcdTY3MzVcdThkZmFcdTgyMzVc'@;
put 'dTUyNDFcdTYwZjBcdTU4MTVcdTg2ZmVcdTVjZThcdTllNDVcdTRmYzRcdTk4OWRcdThiYjlcdTVhMjVcdTYwNzZcdTUzODRcdTYyN2NcdTkwNGZcdTkxMDJcdTk5N2ZcdTYwNjlcdTgwMGNcdTUxM2ZcdTgwMzNcdTVjMTRcdTk5NzVcdTZkMzFcdTRlOGNcdWZmZmQiLnNwbGl0KCIiKSx2PTA7'@;
put 'diE9a1sxODJdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE4Ml1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTgyXVt2XV09NDY1OTIrdixUWzQ2NTkyK3ZdPWtbMTgyXVt2XSk7Zm9yKGtbMTgzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHU3YTFkXHU3YTFmXHU3YTIxXHU3YTIyXHU3YTI0XHU3YTI1XHU3YTI2XHU3YTI3XHU3YTI4XHU3YTI5XHU3YTJhXHU3YTJiXHU3YTJjXHU3YTJkXHU3YTJlXHU3YTJmXHU3YTMwXHU3YTMxXHU3YTMyXHU3YTM0XHU3YTM1XHU3YTM2XHU3YTM4XHU3YTNhXHU3YTNlXHU3YTQwXHU3YTQxXHU3'@;
put 'YTQyXHU3YTQzXHU3YTQ0XHU3YTQ1XHU3YTQ3XHU3YTQ4XHU3YTQ5XHU3YTRhXHU3YTRiXHU3YTRjXHU3YTRkXHU3YTRlXHU3YTRmXHU3YTUwXHU3YTUyXHU3YTUzXHU3YTU0XHU3YTU1XHU3YTU2XHU3YTU4XHU3YTU5XHU3YTVhXHU3YTViXHU3YTVjXHU3YTVkXHU3YTVlXHU3YTVmXHU3YTYw'@;
put 'XHU3YTYxXHU3YTYyXHU3YTYzXHU3YTY0XHU3YTY1XHU3YTY2XHU3YTY3XHU3YTY4XHVmZmZkXHU3YTY5XHU3YTZhXHU3YTZiXHU3YTZjXHU3YTZkXHU3YTZlXHU3YTZmXHU3YTcxXHU3YTcyXHU3YTczXHU3YTc1XHU3YTdiXHU3YTdjXHU3YTdkXHU3YTdlXHU3YTgyXHU3YTg1XHU3YTg3XHU3'@;
put 'YTg5XHU3YThhXHU3YThiXHU3YThjXHU3YThlXHU3YThmXHU3YTkwXHU3YTkzXHU3YTk0XHU3YTk5XHU3YTlhXHU3YTliXHU3YTllXHU3YWExXHU3YWEyXHU4ZDMwXHU1M2QxXHU3ZjVhXHU3YjRmXHU0ZjEwXHU0ZTRmXHU5NjAwXHU2Y2Q1XHU3M2QwXHU4NWU5XHU1ZTA2XHU3NTZhXHU3ZmZi'@;
put 'XHU2YTBhXHU3N2ZlXHU5NDkyXHU3ZTQxXHU1MWUxXHU3MGU2XHU1M2NkXHU4ZmQ0XHU4MzAzXHU4ZDI5XHU3MmFmXHU5OTZkXHU2Y2RiXHU1NzRhXHU4MmIzXHU2NWI5XHU4MGFhXHU2MjNmXHU5NjMyXHU1OWE4XHU0ZWZmXHU4YmJmXHU3ZWJhXHU2NTNlXHU4M2YyXHU5NzVlXHU1NTYxXHU5'@;
put 'OGRlXHU4MGE1XHU1MzJhXHU4YmZkXHU1NDIwXHU4MGJhXHU1ZTlmXHU2Y2I4XHU4ZDM5XHU4MmFjXHU5MTVhXHU1NDI5XHU2YzFiXHU1MjA2XHU3ZWI3XHU1NzVmXHU3MTFhXHU2YzdlXHU3Yzg5XHU1OTRiXHU0ZWZkXHU1ZmZmXHU2MTI0XHU3Y2FhXHU0ZTMwXHU1YzAxXHU2N2FiXHU4NzAy'@;
put 'XHU1Y2YwXHU5NTBiXHU5OGNlXHU3NWFmXHU3MGZkXHU5MDIyXHU1MWFmXHU3ZjFkXHU4YmJkXHU1OTQ5XHU1MWU0XHU0ZjViXHU1NDI2XHU1OTJiXHU2NTc3XHU4MGE0XHU1Yjc1XHU2Mjc2XHU2MmMyXHU4ZjkwXHU1ZTQ1XHU2YzFmXHU3YjI2XHU0ZjBmXHU0ZmQ4XHU2NzBkXHVmZmZkIi5z'@;
put 'cGxpdCgiIiksdj0wO3YhPWtbMTgzXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxODNdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE4M11bdl1dPTQ2ODQ4K3YsVFs0Njg0OCt2XT1rWzE4M11bdl0pO2ZvcihrWzE4NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1N2FhM1x1N2FhNFx1N2FhN1x1N2FhOVx1N2FhYVx1N2FhYlx1N2FhZVx1N2FhZlx1N2FiMFx1N2FiMVx1N2FiMlx1N2FiNFx1N2FiNVx1N2FiNlx1N2FiN1x1N2FiOFx1N2FiOVx1N2FiYVx1N2FiYlx1N2FiY1x1N2FiZFx1N2FiZVx1N2FjMFx1N2FjMVx1N2FjMlx1'@;
put 'N2FjM1x1N2FjNFx1N2FjNVx1N2FjNlx1N2FjN1x1N2FjOFx1N2FjOVx1N2FjYVx1N2FjY1x1N2FjZFx1N2FjZVx1N2FjZlx1N2FkMFx1N2FkMVx1N2FkMlx1N2FkM1x1N2FkNFx1N2FkNVx1N2FkN1x1N2FkOFx1N2FkYVx1N2FkYlx1N2FkY1x1N2FkZFx1N2FlMVx1N2FlMlx1N2FlNFx1N2Fl'@;
put 'N1x1N2FlOFx1N2FlOVx1N2FlYVx1N2FlYlx1N2FlY1x1N2FlZVx1N2FmMFx1N2FmMVx1N2FmMlx1N2FmM1x1ZmZmZFx1N2FmNFx1N2FmNVx1N2FmNlx1N2FmN1x1N2FmOFx1N2FmYlx1N2FmY1x1N2FmZVx1N2IwMFx1N2IwMVx1N2IwMlx1N2IwNVx1N2IwN1x1N2IwOVx1N2IwY1x1N2IwZFx1'@;
put 'N2IwZVx1N2IxMFx1N2IxMlx1N2IxM1x1N2IxNlx1N2IxN1x1N2IxOFx1N2IxYVx1N2IxY1x1N2IxZFx1N2IxZlx1N2IyMVx1N2IyMlx1N2IyM1x1N2IyN1x1N2IyOVx1N2IyZFx1NmQ2ZVx1NmRhYVx1Nzk4Zlx1ODhiMVx1NWYxN1x1NzUyYlx1NjI5YVx1OGY4NVx1NGZlZlx1OTFkY1x1NjVh'@;
put 'N1x1ODEyZlx1ODE1MVx1NWU5Y1x1ODE1MFx1OGQ3NFx1NTI2Zlx1ODk4Nlx1OGQ0Ylx1NTkwZFx1NTA4NVx1NGVkOFx1OTYxY1x1NzIzNlx1ODE3OVx1OGQxZlx1NWJjY1x1OGJhM1x1OTY0NFx1NTk4N1x1N2YxYVx1NTQ5MFx1NTY3Nlx1NTYwZVx1OGJlNVx1NjUzOVx1Njk4Mlx1OTQ5OVx1'@;
put 'NzZkNlx1NmU4OVx1NWU3Mlx1NzUxOFx1Njc0Nlx1NjdkMVx1N2FmZlx1ODA5ZFx1OGQ3Nlx1NjExZlx1NzljNlx1NjU2Mlx1OGQ2M1x1NTE4OFx1NTIxYVx1OTRhMlx1N2YzOFx1ODA5Ylx1N2ViMlx1NWM5N1x1NmUyZlx1Njc2MFx1N2JkOVx1NzY4Ylx1OWFkOFx1ODE4Zlx1N2Y5NFx1N2Nk'@;
put 'NVx1NjQxZVx1OTU1MFx1N2EzZlx1NTQ0YVx1NTRlNVx1NmI0Y1x1NjQwMVx1NjIwOFx1OWUzZFx1ODBmM1x1NzU5OVx1NTI3Mlx1OTc2OVx1ODQ1Ylx1NjgzY1x1ODZlNFx1OTYwMVx1OTY5NFx1OTRlY1x1NGUyYVx1NTQwNFx1N2VkOVx1NjgzOVx1OGRkZlx1ODAxNVx1NjZmNFx1NWU5YVx1'@;
put 'N2ZiOVx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE4NF0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTg0XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxODRdW3ZdXT00NzEwNCt2LFRbNDcxMDQrdl09a1sxODRdW3ZdKTtmb3Ioa1sxODVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdiMmZcdTdiMzBcdTdiMzJcdTdiMzRcdTdiMzVcdTdiMzZcdTdiMzdcdTdiMzlcdTdiM2JcdTdiM2RcdTdiM2ZcdTdiNDBcdTdiNDFcdTdiNDJcdTdiNDNcdTdiNDRcdTdiNDZcdTdiNDhcdTdiNGFcdTdiNGRcdTdiNGVcdTdiNTNcdTdiNTVc'@;
put 'dTdiNTdcdTdiNTlcdTdiNWNcdTdiNWVcdTdiNWZcdTdiNjFcdTdiNjNcdTdiNjRcdTdiNjVcdTdiNjZcdTdiNjdcdTdiNjhcdTdiNjlcdTdiNmFcdTdiNmJcdTdiNmNcdTdiNmRcdTdiNmZcdTdiNzBcdTdiNzNcdTdiNzRcdTdiNzZcdTdiNzhcdTdiN2FcdTdiN2NcdTdiN2RcdTdiN2ZcdTdi'@;
put 'ODFcdTdiODJcdTdiODNcdTdiODRcdTdiODZcdTdiODdcdTdiODhcdTdiODlcdTdiOGFcdTdiOGJcdTdiOGNcdTdiOGVcdTdiOGZcdWZmZmRcdTdiOTFcdTdiOTJcdTdiOTNcdTdiOTZcdTdiOThcdTdiOTlcdTdiOWFcdTdiOWJcdTdiOWVcdTdiOWZcdTdiYTBcdTdiYTNcdTdiYTRcdTdiYTVc'@;
put 'dTdiYWVcdTdiYWZcdTdiYjBcdTdiYjJcdTdiYjNcdTdiYjVcdTdiYjZcdTdiYjdcdTdiYjlcdTdiYmFcdTdiYmJcdTdiYmNcdTdiYmRcdTdiYmVcdTdiYmZcdTdiYzBcdTdiYzJcdTdiYzNcdTdiYzRcdTU3YzJcdTgwM2ZcdTY4OTdcdTVkZTVcdTY1M2JcdTUyOWZcdTYwNmRcdTlmOWFcdTRm'@;
put 'OWJcdThlYWNcdTUxNmNcdTViYWJcdTVmMTNcdTVkZTlcdTZjNWVcdTYyZjFcdThkMjFcdTUxNzFcdTk0YTlcdTUyZmVcdTZjOWZcdTgyZGZcdTcyZDdcdTU3YTJcdTY3ODRcdThkMmRcdTU5MWZcdThmOWNcdTgzYzdcdTU0OTVcdTdiOGRcdTRmMzBcdTZjYmRcdTViNjRcdTU5ZDFcdTlmMTNc'@;
put 'dTUzZTRcdTg2Y2FcdTlhYThcdThjMzdcdTgwYTFcdTY1NDVcdTk4N2VcdTU2ZmFcdTk2YzdcdTUyMmVcdTc0ZGNcdTUyNTBcdTViZTFcdTYzMDJcdTg5MDJcdTRlNTZcdTYyZDBcdTYwMmFcdTY4ZmFcdTUxNzNcdTViOThcdTUxYTBcdTg5YzJcdTdiYTFcdTk5ODZcdTdmNTBcdTYwZWZcdTcw'@;
put 'NGNcdThkMmZcdTUxNDlcdTVlN2ZcdTkwMWJcdTc0NzBcdTg5YzRcdTU3MmRcdTc4NDVcdTVmNTJcdTlmOWZcdTk1ZmFcdThmNjhcdTliM2NcdThiZTFcdTc2NzhcdTY4NDJcdTY3ZGNcdThkZWFcdThkMzVcdTUyM2RcdThmOGFcdTZlZGFcdTY4Y2RcdTk1MDVcdTkwZWRcdTU2ZmRcdTY3OWNc'@;
put 'dTg4ZjlcdThmYzdcdTU0YzhcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxODVdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE4NV1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTg1XVt2XV09NDczNjArdixUWzQ3MzYwK3ZdPWtbMTg1XVt2XSk7Zm9yKGtbMTg2XT0iXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YmM1XHU3YmM4XHU3YmM5XHU3YmNhXHU3YmNiXHU3YmNkXHU3YmNlXHU3YmNmXHU3YmQwXHU3YmQyXHU3YmQ0XHU3YmQ1XHU3YmQ2XHU3YmQ3XHU3YmQ4XHU3YmRiXHU3YmRjXHU3YmRlXHU3YmRmXHU3YmUwXHU3YmUy'@;
put 'XHU3YmUzXHU3YmU0XHU3YmU3XHU3YmU4XHU3YmU5XHU3YmViXHU3YmVjXHU3YmVkXHU3YmVmXHU3YmYwXHU3YmYyXHU3YmYzXHU3YmY0XHU3YmY1XHU3YmY2XHU3YmY4XHU3YmY5XHU3YmZhXHU3YmZiXHU3YmZkXHU3YmZmXHU3YzAwXHU3YzAxXHU3YzAyXHU3YzAzXHU3YzA0XHU3YzA1XHU3'@;
put 'YzA2XHU3YzA4XHU3YzA5XHU3YzBhXHU3YzBkXHU3YzBlXHU3YzEwXHU3YzExXHU3YzEyXHU3YzEzXHU3YzE0XHU3YzE1XHU3YzE3XHU3YzE4XHU3YzE5XHVmZmZkXHU3YzFhXHU3YzFiXHU3YzFjXHU3YzFkXHU3YzFlXHU3YzIwXHU3YzIxXHU3YzIyXHU3YzIzXHU3YzI0XHU3YzI1XHU3YzI4'@;
put 'XHU3YzI5XHU3YzJiXHU3YzJjXHU3YzJkXHU3YzJlXHU3YzJmXHU3YzMwXHU3YzMxXHU3YzMyXHU3YzMzXHU3YzM0XHU3YzM1XHU3YzM2XHU3YzM3XHU3YzM5XHU3YzNhXHU3YzNiXHU3YzNjXHU3YzNkXHU3YzNlXHU3YzQyXHU5YWI4XHU1YjY5XHU2ZDc3XHU2YzI2XHU0ZWE1XHU1YmIzXHU5'@;
put 'YTg3XHU5MTYzXHU2MWE4XHU5MGFmXHU5N2U5XHU1NDJiXHU2ZGI1XHU1YmQyXHU1MWZkXHU1NThhXHU3ZjU1XHU3ZmYwXHU2NGJjXHU2MzRkXHU2NWYxXHU2MWJlXHU2MDhkXHU3MTBhXHU2YzU3XHU2YzQ5XHU1OTJmXHU2NzZkXHU4MjJhXHU1OGQ1XHU1NjhlXHU4YzZhXHU2YmViXHU5MGRk'@;
put 'XHU1OTdkXHU4MDE3XHU1M2Y3XHU2ZDY5XHU1NDc1XHU1NTlkXHU4Mzc3XHU4M2NmXHU2ODM4XHU3OWJlXHU1NDhjXHU0ZjU1XHU1NDA4XHU3NmQyXHU4Yzg5XHU5NjAyXHU2Y2IzXHU2ZGI4XHU4ZDZiXHU4OTEwXHU5ZTY0XHU4ZDNhXHU1NjNmXHU5ZWQxXHU3NWQ1XHU1Zjg4XHU3MmUwXHU2'@;
put 'MDY4XHU1NGZjXHU0ZWE4XHU2YTJhXHU4ODYxXHU2MDUyXHU4ZjcwXHU1NGM0XHU3MGQ4XHU4Njc5XHU5ZTNmXHU2ZDJhXHU1YjhmXHU1ZjE4XHU3ZWEyXHU1NTg5XHU0ZmFmXHU3MzM0XHU1NDNjXHU1MzlhXHU1MDE5XHU1NDBlXHU1NDdjXHU0ZTRlXHU1ZmZkXHU3NDVhXHU1OGY2XHU4NDZi'@;
put 'XHU4MGUxXHU4Nzc0XHU3MmQwXHU3Y2NhXHU2ZTU2XHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTg2XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxODZdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE4Nl1bdl1dPTQ3NjE2K3YsVFs0NzYxNit2XT1rWzE4Nl1bdl0pO2ZvcihrWzE4N109Ilx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2M0M1x1N2M0NFx1N2M0NVx1N2M0Nlx1N2M0N1x1N2M0OFx1N2M0OVx1N2M0YVx1N2M0Ylx1N2M0Y1x1N2M0ZVx1N2M0Zlx1N2M1MFx1N2M1MVx1N2M1Mlx1N2M1M1x1N2M1NFx1N2M1NVx1N2M1'@;
put 'Nlx1N2M1N1x1N2M1OFx1N2M1OVx1N2M1YVx1N2M1Ylx1N2M1Y1x1N2M1ZFx1N2M1ZVx1N2M1Zlx1N2M2MFx1N2M2MVx1N2M2Mlx1N2M2M1x1N2M2NFx1N2M2NVx1N2M2Nlx1N2M2N1x1N2M2OFx1N2M2OVx1N2M2YVx1N2M2Ylx1N2M2Y1x1N2M2ZFx1N2M2ZVx1N2M2Zlx1N2M3MFx1N2M3MVx1'@;
put 'N2M3Mlx1N2M3NVx1N2M3Nlx1N2M3N1x1N2M3OFx1N2M3OVx1N2M3YVx1N2M3ZVx1N2M3Zlx1N2M4MFx1N2M4MVx1N2M4Mlx1N2M4M1x1N2M4NFx1N2M4NVx1N2M4Nlx1N2M4N1x1ZmZmZFx1N2M4OFx1N2M4YVx1N2M4Ylx1N2M4Y1x1N2M4ZFx1N2M4ZVx1N2M4Zlx1N2M5MFx1N2M5M1x1N2M5'@;
put 'NFx1N2M5Nlx1N2M5OVx1N2M5YVx1N2M5Ylx1N2NhMFx1N2NhMVx1N2NhM1x1N2NhNlx1N2NhN1x1N2NhOFx1N2NhOVx1N2NhYlx1N2NhY1x1N2NhZFx1N2NhZlx1N2NiMFx1N2NiNFx1N2NiNVx1N2NiNlx1N2NiN1x1N2NiOFx1N2NiYVx1N2NiYlx1NWYyN1x1ODY0ZVx1NTUyY1x1NjJhNFx1'@;
put 'NGU5Mlx1NmNhYVx1NjIzN1x1ODJiMVx1NTRkN1x1NTM0ZVx1NzMzZVx1NmVkMVx1NzUzYlx1NTIxMlx1NTMxNlx1OGJkZFx1NjlkMFx1NWY4YVx1NjAwMFx1NmRlZVx1NTc0Zlx1NmIyMlx1NzNhZlx1Njg1M1x1OGZkOFx1N2YxM1x1NjM2Mlx1NjBhM1x1NTUyNFx1NzVlYVx1OGM2Mlx1NzEx'@;
put 'NVx1NmRhM1x1NWJhNlx1NWU3Ylx1ODM1Mlx1NjE0Y1x1OWVjNFx1NzhmYVx1ODc1N1x1N2MyN1x1NzY4N1x1NTFmMFx1NjBmNlx1NzE0Y1x1NjY0M1x1NWU0Y1x1NjA0ZFx1OGMwZVx1NzA3MFx1NjMyNVx1OGY4OVx1NWZiZFx1NjA2Mlx1ODZkNFx1NTZkZVx1NmJjMVx1NjA5NFx1NjE2N1x1'@;
put 'NTM0OVx1NjBlMFx1NjY2Nlx1OGQzZlx1NzlmZFx1NGYxYVx1NzBlOVx1NmM0N1x1OGJiM1x1OGJmMlx1N2VkOFx1ODM2NFx1NjYwZlx1NWE1YVx1OWI0Mlx1NmQ1MVx1NmRmN1x1OGM0MVx1NmQzYlx1NGYxOVx1NzA2Ylx1ODNiN1x1NjIxNlx1NjBkMVx1OTcwZFx1OGQyN1x1Nzk3OFx1NTFm'@;
put 'Ylx1NTczZVx1NTdmYVx1NjczYVx1NzU3OFx1N2EzZFx1NzllZlx1N2I5NVx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE4N10ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTg3XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxODddW3ZdXT00Nzg3Mit2LFRbNDc4NzIrdl09a1sxODddW3ZdKTtm'@;
put 'b3Ioa1sxODhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdjYmZcdTdjYzBcdTdjYzJcdTdjYzNcdTdjYzRcdTdjYzZcdTdjYzlcdTdjY2JcdTdjY2VcdTdjY2ZcdTdjZDBcdTdjZDFcdTdjZDJcdTdjZDNcdTdjZDRcdTdjZDhcdTdj'@;
put 'ZGFcdTdjZGJcdTdjZGRcdTdjZGVcdTdjZTFcdTdjZTJcdTdjZTNcdTdjZTRcdTdjZTVcdTdjZTZcdTdjZTdcdTdjZTlcdTdjZWFcdTdjZWJcdTdjZWNcdTdjZWRcdTdjZWVcdTdjZjBcdTdjZjFcdTdjZjJcdTdjZjNcdTdjZjRcdTdjZjVcdTdjZjZcdTdjZjdcdTdjZjlcdTdjZmFcdTdjZmNc'@;
put 'dTdjZmRcdTdjZmVcdTdjZmZcdTdkMDBcdTdkMDFcdTdkMDJcdTdkMDNcdTdkMDRcdTdkMDVcdTdkMDZcdTdkMDdcdTdkMDhcdTdkMDlcdTdkMGJcdTdkMGNcdTdkMGRcdTdkMGVcdTdkMGZcdTdkMTBcdWZmZmRcdTdkMTFcdTdkMTJcdTdkMTNcdTdkMTRcdTdkMTVcdTdkMTZcdTdkMTdcdTdk'@;
put 'MThcdTdkMTlcdTdkMWFcdTdkMWJcdTdkMWNcdTdkMWRcdTdkMWVcdTdkMWZcdTdkMjFcdTdkMjNcdTdkMjRcdTdkMjVcdTdkMjZcdTdkMjhcdTdkMjlcdTdkMmFcdTdkMmNcdTdkMmRcdTdkMmVcdTdkMzBcdTdkMzFcdTdkMzJcdTdkMzNcdTdkMzRcdTdkMzVcdTdkMzZcdTgwOGNcdTk5NjVc'@;
put 'dThmZjlcdTZmYzBcdThiYTVcdTllMjFcdTU5ZWNcdTdlZTlcdTdmMDlcdTU0MDlcdTY3ODFcdTY4ZDhcdThmOTFcdTdjNGRcdTk2YzZcdTUzY2FcdTYwMjVcdTc1YmVcdTZjNzJcdTUzNzNcdTVhYzlcdTdlYTdcdTYzMjRcdTUxZTBcdTgxMGFcdTVkZjFcdTg0ZGZcdTYyODBcdTUxODBcdTVi'@;
put 'NjNcdTRmMGVcdTc5NmRcdTUyNDJcdTYwYjhcdTZkNGVcdTViYzRcdTViYzJcdThiYTFcdThiYjBcdTY1ZTJcdTVmY2NcdTk2NDVcdTU5OTNcdTdlZTdcdTdlYWFcdTU2MDlcdTY3YjdcdTU5MzlcdTRmNzNcdTViYjZcdTUyYTBcdTgzNWFcdTk4OGFcdThkM2VcdTc1MzJcdTk0YmVcdTUwNDdc'@;
put 'dTdhM2NcdTRlZjdcdTY3YjZcdTlhN2VcdTVhYzFcdTZiN2NcdTc2ZDFcdTU3NWFcdTVjMTZcdTdiM2FcdTk1ZjRcdTcxNGVcdTUxN2NcdTgwYTlcdTgyNzBcdTU5NzhcdTdmMDRcdTgzMjdcdTY4YzBcdTY3ZWNcdTc4YjFcdTc4NzdcdTYyZTNcdTYzNjFcdTdiODBcdTRmZWRcdTUyNmFcdTUx'@;
put 'Y2ZcdTgzNTBcdTY5ZGJcdTkyNzRcdThkZjVcdThkMzFcdTg5YzFcdTk1MmVcdTdiYWRcdTRlZjZcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxODhdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE4OF1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTg4XVt2XV09NDgxMjgrdixUWzQ4MTI4K3Zd'@;
put 'PWtbMTg4XVt2XSk7Zm9yKGtbMTg5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZDM3XHU3ZDM4XHU3ZDM5XHU3ZDNhXHU3ZDNiXHU3ZDNjXHU3ZDNkXHU3ZDNlXHU3ZDNmXHU3ZDQwXHU3ZDQxXHU3ZDQyXHU3ZDQzXHU3ZDQ0XHU3'@;
put 'ZDQ1XHU3ZDQ2XHU3ZDQ3XHU3ZDQ4XHU3ZDQ5XHU3ZDRhXHU3ZDRiXHU3ZDRjXHU3ZDRkXHU3ZDRlXHU3ZDRmXHU3ZDUwXHU3ZDUxXHU3ZDUyXHU3ZDUzXHU3ZDU0XHU3ZDU1XHU3ZDU2XHU3ZDU3XHU3ZDU4XHU3ZDU5XHU3ZDVhXHU3ZDViXHU3ZDVjXHU3ZDVkXHU3ZDVlXHU3ZDVmXHU3ZDYw'@;
put 'XHU3ZDYxXHU3ZDYyXHU3ZDYzXHU3ZDY0XHU3ZDY1XHU3ZDY2XHU3ZDY3XHU3ZDY4XHU3ZDY5XHU3ZDZhXHU3ZDZiXHU3ZDZjXHU3ZDZkXHU3ZDZmXHU3ZDcwXHU3ZDcxXHU3ZDcyXHU3ZDczXHU3ZDc0XHU3ZDc1XHU3ZDc2XHVmZmZkXHU3ZDc4XHU3ZDc5XHU3ZDdhXHU3ZDdiXHU3ZDdjXHU3'@;
put 'ZDdkXHU3ZDdlXHU3ZDdmXHU3ZDgwXHU3ZDgxXHU3ZDgyXHU3ZDgzXHU3ZDg0XHU3ZDg1XHU3ZDg2XHU3ZDg3XHU3ZDg4XHU3ZDg5XHU3ZDhhXHU3ZDhiXHU3ZDhjXHU3ZDhkXHU3ZDhlXHU3ZDhmXHU3ZDkwXHU3ZDkxXHU3ZDkyXHU3ZDkzXHU3ZDk0XHU3ZDk1XHU3ZDk2XHU3ZDk3XHU3ZDk4'@;
put 'XHU1MDY1XHU4MjMwXHU1MjUxXHU5OTZmXHU2ZTEwXHU2ZTg1XHU2ZGE3XHU1ZWZhXHU1MGY1XHU1OWRjXHU1YzA2XHU2ZDQ2XHU2YzVmXHU3NTg2XHU4NDhiXHU2ODY4XHU1OTU2XHU4YmIyXHU1MzIwXHU5MTcxXHU5NjRkXHU4NTQ5XHU2OTEyXHU3OTAxXHU3MTI2XHU4MGY2XHU0ZWE0XHU5'@;
put 'MGNhXHU2ZDQ3XHU5YTg0XHU1YTA3XHU1NmJjXHU2NDA1XHU5NGYwXHU3N2ViXHU0ZmE1XHU4MTFhXHU3MmUxXHU4OWQyXHU5OTdhXHU3ZjM0XHU3ZWRlXHU1MjdmXHU2NTU5XHU5MTc1XHU4ZjdmXHU4ZjgzXHU1M2ViXHU3YTk2XHU2M2VkXHU2M2E1XHU3Njg2XHU3OWY4XHU4ODU3XHU5NjM2'@;
put 'XHU2MjJhXHU1MmFiXHU4MjgyXHU2ODU0XHU2NzcwXHU2Mzc3XHU3NzZiXHU3YWVkXHU2ZDAxXHU3ZWQzXHU4OWUzXHU1OWQwXHU2MjEyXHU4NWM5XHU4MmE1XHU3NTRjXHU1MDFmXHU0ZWNiXHU3NWE1XHU4YmViXHU1YzRhXHU1ZGZlXHU3YjRiXHU2NWE0XHU5MWQxXHU0ZWNhXHU2ZDI1XHU4'@;
put 'OTVmXHU3ZDI3XHU5NTI2XHU0ZWM1XHU4YzI4XHU4ZmRiXHU5NzczXHU2NjRiXHU3OTgxXHU4ZmQxXHU3MGVjXHU2ZDc4XHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTg5XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxODldW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE4OV1bdl1dPTQ4Mzg0'@;
put 'K3YsVFs0ODM4NCt2XT1rWzE4OV1bdl0pO2ZvcihrWzE5MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2Q5OVx1N2Q5YVx1N2Q5Ylx1N2Q5Y1x1N2Q5ZFx1N2Q5ZVx1N2Q5Zlx1N2RhMFx1N2RhMVx1N2RhMlx1N2RhM1x1N2RhNFx1'@;
put 'N2RhNVx1N2RhN1x1N2RhOFx1N2RhOVx1N2RhYVx1N2RhYlx1N2RhY1x1N2RhZFx1N2RhZlx1N2RiMFx1N2RiMVx1N2RiMlx1N2RiM1x1N2RiNFx1N2RiNVx1N2RiNlx1N2RiN1x1N2RiOFx1N2RiOVx1N2RiYVx1N2RiYlx1N2RiY1x1N2RiZFx1N2RiZVx1N2RiZlx1N2RjMFx1N2RjMVx1N2Rj'@;
put 'Mlx1N2RjM1x1N2RjNFx1N2RjNVx1N2RjNlx1N2RjN1x1N2RjOFx1N2RjOVx1N2RjYVx1N2RjYlx1N2RjY1x1N2RjZFx1N2RjZVx1N2RjZlx1N2RkMFx1N2RkMVx1N2RkMlx1N2RkM1x1N2RkNFx1N2RkNVx1N2RkNlx1N2RkN1x1N2RkOFx1N2RkOVx1ZmZmZFx1N2RkYVx1N2RkYlx1N2RkY1x1'@;
put 'N2RkZFx1N2RkZVx1N2RkZlx1N2RlMFx1N2RlMVx1N2RlMlx1N2RlM1x1N2RlNFx1N2RlNVx1N2RlNlx1N2RlN1x1N2RlOFx1N2RlOVx1N2RlYVx1N2RlYlx1N2RlY1x1N2RlZFx1N2RlZVx1N2RlZlx1N2RmMFx1N2RmMVx1N2RmMlx1N2RmM1x1N2RmNFx1N2RmNVx1N2RmNlx1N2RmN1x1N2Rm'@;
put 'OFx1N2RmOVx1N2RmYVx1NWMzZFx1NTJiMlx1ODM0Nlx1NTE2Mlx1ODMwZVx1Nzc1Ylx1NjY3Nlx1OWNiOFx1NGVhY1x1NjBjYVx1N2NiZVx1N2NiM1x1N2VjZlx1NGU5NVx1OGI2Nlx1NjY2Zlx1OTg4OFx1OTc1OVx1NTg4M1x1NjU2Y1x1OTU1Y1x1NWY4NFx1NzVjOVx1OTc1Nlx1N2FkZlx1'@;
put 'N2FkZVx1NTFjMFx1NzBhZlx1N2E5OFx1NjNlYVx1N2E3Nlx1N2VhMFx1NzM5Nlx1OTdlZFx1NGU0NVx1NzA3OFx1NGU1ZFx1OTE1Mlx1NTNhOVx1NjU1MVx1NjVlN1x1ODFmY1x1ODIwNVx1NTQ4ZVx1NWMzMVx1NzU5YVx1OTdhMFx1NjJkOFx1NzJkOVx1NzViZFx1NWM0NVx1OWE3OVx1ODNj'@;
put 'YVx1NWM0MFx1NTQ4MFx1NzdlOVx1NGUzZVx1NmNhZVx1ODA1YVx1NjJkMlx1NjM2ZVx1NWRlOFx1NTE3N1x1OGRkZFx1OGUxZVx1OTUyZlx1NGZmMVx1NTNlNVx1NjBlN1x1NzBhY1x1NTI2N1x1NjM1MFx1OWU0M1x1NWExZlx1NTAyNlx1NzczN1x1NTM3N1x1N2VlMlx1NjQ4NVx1NjUyYlx1'@;
put 'NjI4OVx1NjM5OFx1NTAxNFx1NzIzNVx1ODljOVx1NTFiM1x1OGJjMFx1N2VkZFx1NTc0N1x1ODNjY1x1OTRhN1x1NTE5Ylx1NTQxYlx1NWNmYlx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE5MF0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTkwXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sx'@;
put 'OTBdW3ZdXT00ODY0MCt2LFRbNDg2NDArdl09a1sxOTBdW3ZdKTtmb3Ioa1sxOTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdkZmJcdTdkZmNcdTdkZmRcdTdkZmVcdTdkZmZcdTdlMDBcdTdlMDFcdTdlMDJcdTdlMDNcdTdlMDRc'@;
put 'dTdlMDVcdTdlMDZcdTdlMDdcdTdlMDhcdTdlMDlcdTdlMGFcdTdlMGJcdTdlMGNcdTdlMGRcdTdlMGVcdTdlMGZcdTdlMTBcdTdlMTFcdTdlMTJcdTdlMTNcdTdlMTRcdTdlMTVcdTdlMTZcdTdlMTdcdTdlMThcdTdlMTlcdTdlMWFcdTdlMWJcdTdlMWNcdTdlMWRcdTdlMWVcdTdlMWZcdTdl'@;
put 'MjBcdTdlMjFcdTdlMjJcdTdlMjNcdTdlMjRcdTdlMjVcdTdlMjZcdTdlMjdcdTdlMjhcdTdlMjlcdTdlMmFcdTdlMmJcdTdlMmNcdTdlMmRcdTdlMmVcdTdlMmZcdTdlMzBcdTdlMzFcdTdlMzJcdTdlMzNcdTdlMzRcdTdlMzVcdTdlMzZcdTdlMzdcdTdlMzhcdTdlMzlcdWZmZmRcdTdlM2Fc'@;
put 'dTdlM2NcdTdlM2RcdTdlM2VcdTdlM2ZcdTdlNDBcdTdlNDJcdTdlNDNcdTdlNDRcdTdlNDVcdTdlNDZcdTdlNDhcdTdlNDlcdTdlNGFcdTdlNGJcdTdlNGNcdTdlNGRcdTdlNGVcdTdlNGZcdTdlNTBcdTdlNTFcdTdlNTJcdTdlNTNcdTdlNTRcdTdlNTVcdTdlNTZcdTdlNTdcdTdlNThcdTdl'@;
put 'NTlcdTdlNWFcdTdlNWJcdTdlNWNcdTdlNWRcdTRmY2FcdTdhZTNcdTZkNWFcdTkwZTFcdTlhOGZcdTU1ODBcdTU0OTZcdTUzNjFcdTU0YWZcdTVmMDBcdTYzZTlcdTY5NzdcdTUxZWZcdTYxNjhcdTUyMGFcdTU4MmFcdTUyZDhcdTU3NGVcdTc4MGRcdTc3MGJcdTVlYjdcdTYxNzdcdTdjZTBc'@;
put 'dTYyNWJcdTYyOTdcdTRlYTJcdTcwOTVcdTgwMDNcdTYyZjdcdTcwZTRcdTk3NjBcdTU3NzdcdTgyZGJcdTY3ZWZcdTY4ZjVcdTc4ZDVcdTk4OTdcdTc5ZDFcdTU4ZjNcdTU0YjNcdTUzZWZcdTZlMzRcdTUxNGJcdTUyM2JcdTViYTJcdThiZmVcdTgwYWZcdTU1NDNcdTU3YTZcdTYwNzNcdTU3'@;
put 'NTFcdTU0MmRcdTdhN2FcdTYwNTBcdTViNTRcdTYzYTdcdTYyYTBcdTUzZTNcdTYyNjNcdTViYzdcdTY3YWZcdTU0ZWRcdTdhOWZcdTgyZTZcdTkxNzdcdTVlOTNcdTg4ZTRcdTU5MzhcdTU3YWVcdTYzMGVcdThkZThcdTgwZWZcdTU3NTdcdTdiNzdcdTRmYTlcdTVmZWJcdTViYmRcdTZiM2Vc'@;
put 'dTUzMjFcdTdiNTBcdTcyYzJcdTY4NDZcdTc3ZmZcdTc3MzZcdTY1ZjdcdTUxYjVcdTRlOGZcdTc2ZDRcdTVjYmZcdTdhYTVcdTg0NzVcdTU5NGVcdTliNDFcdTUwODBcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxOTFdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE5MV1bdl0uY2hhckNvZGVB'@;
put 'dCgwKSYmKHNlW2tbMTkxXVt2XV09NDg4OTYrdixUWzQ4ODk2K3ZdPWtbMTkxXVt2XSk7Zm9yKGtbMTkyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZTVlXHU3ZTVmXHU3ZTYwXHU3ZTYxXHU3ZTYyXHU3ZTYzXHU3ZTY0XHU3ZTY1'@;
put 'XHU3ZTY2XHU3ZTY3XHU3ZTY4XHU3ZTY5XHU3ZTZhXHU3ZTZiXHU3ZTZjXHU3ZTZkXHU3ZTZlXHU3ZTZmXHU3ZTcwXHU3ZTcxXHU3ZTcyXHU3ZTczXHU3ZTc0XHU3ZTc1XHU3ZTc2XHU3ZTc3XHU3ZTc4XHU3ZTc5XHU3ZTdhXHU3ZTdiXHU3ZTdjXHU3ZTdkXHU3ZTdlXHU3ZTdmXHU3ZTgwXHU3'@;
put 'ZTgxXHU3ZTgzXHU3ZTg0XHU3ZTg1XHU3ZTg2XHU3ZTg3XHU3ZTg4XHU3ZTg5XHU3ZThhXHU3ZThiXHU3ZThjXHU3ZThkXHU3ZThlXHU3ZThmXHU3ZTkwXHU3ZTkxXHU3ZTkyXHU3ZTkzXHU3ZTk0XHU3ZTk1XHU3ZTk2XHU3ZTk3XHU3ZTk4XHU3ZTk5XHU3ZTlhXHU3ZTljXHU3ZTlkXHU3ZTll'@;
put 'XHVmZmZkXHU3ZWFlXHU3ZWI0XHU3ZWJiXHU3ZWJjXHU3ZWQ2XHU3ZWU0XHU3ZWVjXHU3ZWY5XHU3ZjBhXHU3ZjEwXHU3ZjFlXHU3ZjM3XHU3ZjM5XHU3ZjNiXHU3ZjNjXHU3ZjNkXHU3ZjNlXHU3ZjNmXHU3ZjQwXHU3ZjQxXHU3ZjQzXHU3ZjQ2XHU3ZjQ3XHU3ZjQ4XHU3ZjQ5XHU3ZjRhXHU3'@;
put 'ZjRiXHU3ZjRjXHU3ZjRkXHU3ZjRlXHU3ZjRmXHU3ZjUyXHU3ZjUzXHU5OTg4XHU2MTI3XHU2ZTgzXHU1NzY0XHU2NjA2XHU2MzQ2XHU1NmYwXHU2MmVjXHU2MjY5XHU1ZWQzXHU5NjE0XHU1NzgzXHU2MmM5XHU1NTg3XHU4NzIxXHU4MTRhXHU4ZmEzXHU1NTY2XHU4M2IxXHU2NzY1XHU4ZDU2'@;
put 'XHU4NGRkXHU1YTZhXHU2ODBmXHU2MmU2XHU3YmVlXHU5NjExXHU1MTcwXHU2ZjljXHU4YzMwXHU2M2ZkXHU4OWM4XHU2MWQyXHU3ZjA2XHU3MGMyXHU2ZWU1XHU3NDA1XHU2OTk0XHU3MmZjXHU1ZWNhXHU5MGNlXHU2NzE3XHU2ZDZhXHU2MzVlXHU1MmIzXHU3MjYyXHU4MDAxXHU0ZjZjXHU1'@;
put 'OWU1XHU5MTZhXHU3MGQ5XHU2ZDlkXHU1MmQyXHU0ZTUwXHU5NmY3XHU5NTZkXHU4NTdlXHU3OGNhXHU3ZDJmXHU1MTIxXHU1NzkyXHU2NGMyXHU4MDhiXHU3YzdiXHU2Y2VhXHU2OGYxXHU2OTVlXHU1MWI3XHU1Mzk4XHU2OGE4XHU3MjgxXHU5ZWNlXHU3YmYxXHU3MmY4XHU3OWJiXHU2ZjEz'@;
put 'XHU3NDA2XHU2NzRlXHU5MWNjXHU5Y2E0XHU3OTNjXHU4Mzg5XHU4MzU0XHU1NDBmXHU2ODE3XHU0ZTNkXHU1Mzg5XHU1MmIxXHU3ODNlXHU1Mzg2XHU1MjI5XHU1MDg4XHU0ZjhiXHU0ZmQwXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTkyXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxOTJd'@;
put 'W3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE5Ml1bdl1dPTQ5MTUyK3YsVFs0OTE1Mit2XT1rWzE5Ml1bdl0pO2ZvcihrWzE5M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2Y1Nlx1N2Y1OVx1N2Y1Ylx1N2Y1Y1x1N2Y1ZFx1N2Y1'@;
put 'ZVx1N2Y2MFx1N2Y2M1x1N2Y2NFx1N2Y2NVx1N2Y2Nlx1N2Y2N1x1N2Y2Ylx1N2Y2Y1x1N2Y2ZFx1N2Y2Zlx1N2Y3MFx1N2Y3M1x1N2Y3NVx1N2Y3Nlx1N2Y3N1x1N2Y3OFx1N2Y3YVx1N2Y3Ylx1N2Y3Y1x1N2Y3ZFx1N2Y3Zlx1N2Y4MFx1N2Y4Mlx1N2Y4M1x1N2Y4NFx1N2Y4NVx1N2Y4Nlx1'@;
put 'N2Y4N1x1N2Y4OFx1N2Y4OVx1N2Y4Ylx1N2Y4ZFx1N2Y4Zlx1N2Y5MFx1N2Y5MVx1N2Y5Mlx1N2Y5M1x1N2Y5NVx1N2Y5Nlx1N2Y5N1x1N2Y5OFx1N2Y5OVx1N2Y5Ylx1N2Y5Y1x1N2ZhMFx1N2ZhMlx1N2ZhM1x1N2ZhNVx1N2ZhNlx1N2ZhOFx1N2ZhOVx1N2ZhYVx1N2ZhYlx1N2ZhY1x1N2Zh'@;
put 'ZFx1N2ZhZVx1N2ZiMVx1ZmZmZFx1N2ZiM1x1N2ZiNFx1N2ZiNVx1N2ZiNlx1N2ZiN1x1N2ZiYVx1N2ZiYlx1N2ZiZVx1N2ZjMFx1N2ZjMlx1N2ZjM1x1N2ZjNFx1N2ZjNlx1N2ZjN1x1N2ZjOFx1N2ZjOVx1N2ZjYlx1N2ZjZFx1N2ZjZlx1N2ZkMFx1N2ZkMVx1N2ZkMlx1N2ZkM1x1N2ZkNlx1'@;
put 'N2ZkN1x1N2ZkOVx1N2ZkYVx1N2ZkYlx1N2ZkY1x1N2ZkZFx1N2ZkZVx1N2ZlMlx1N2ZlM1x1NzVlMlx1N2FjYlx1N2M5Mlx1NmNhNVx1OTZiNlx1NTI5Ylx1NzQ4M1x1NTRlOVx1NGZlOVx1ODA1NFx1ODNiMlx1OGZkZVx1OTU3MFx1NWVjOVx1NjAxY1x1NmQ5Zlx1NWUxOFx1NjU1Ylx1ODEz'@;
put 'OFx1OTRmZVx1NjA0Ylx1NzBiY1x1N2VjM1x1N2NhZVx1NTFjOVx1Njg4MVx1N2NiMVx1ODI2Zlx1NGUyNFx1OGY4Nlx1OTFjZlx1NjY3ZVx1NGVhZVx1OGMwNVx1NjRhOVx1ODA0YVx1NTBkYVx1NzU5N1x1NzFjZVx1NWJlNVx1OGZiZFx1NmY2Nlx1NGU4Nlx1NjQ4Mlx1OTU2M1x1NWVkNlx1'@;
put 'NjU5OVx1NTIxN1x1ODhjMlx1NzBjOFx1NTJhM1x1NzMwZVx1NzQzM1x1Njc5N1x1NzhmN1x1OTcxNlx1NGUzNFx1OTBiYlx1OWNkZVx1NmRjYlx1NTFkYlx1OGQ0MVx1NTQxZFx1NjJjZVx1NzNiMlx1ODNmMVx1OTZmNlx1OWY4NFx1OTRjM1x1NGYzNlx1N2Y5YVx1NTFjY1x1NzA3NVx1OTY3'@;
put 'NVx1NWNhZFx1OTg4Nlx1NTNlNlx1NGVlNFx1NmU5Y1x1NzQwOVx1NjliNFx1Nzg2Ylx1OTk4Zlx1NzU1OVx1NTIxOFx1NzYyNFx1NmQ0MVx1NjdmM1x1NTE2ZFx1OWY5OVx1ODA0Ylx1NTQ5OVx1N2IzY1x1N2FiZlx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE5M10ubGVuZ3RoOysrdik2'@;
put 'NTUzMyE9PWtbMTkzXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxOTNdW3ZdXT00OTQwOCt2LFRbNDk0MDgrdl09a1sxOTNdW3ZdKTtmb3Ioa1sxOTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdmZTRcdTdmZTdcdTdmZThcdTdm'@;
put 'ZWFcdTdmZWJcdTdmZWNcdTdmZWRcdTdmZWZcdTdmZjJcdTdmZjRcdTdmZjVcdTdmZjZcdTdmZjdcdTdmZjhcdTdmZjlcdTdmZmFcdTdmZmRcdTdmZmVcdTdmZmZcdTgwMDJcdTgwMDdcdTgwMDhcdTgwMDlcdTgwMGFcdTgwMGVcdTgwMGZcdTgwMTFcdTgwMTNcdTgwMWFcdTgwMWJcdTgwMWRc'@;
put 'dTgwMWVcdTgwMWZcdTgwMjFcdTgwMjNcdTgwMjRcdTgwMmJcdTgwMmNcdTgwMmRcdTgwMmVcdTgwMmZcdTgwMzBcdTgwMzJcdTgwMzRcdTgwMzlcdTgwM2FcdTgwM2NcdTgwM2VcdTgwNDBcdTgwNDFcdTgwNDRcdTgwNDVcdTgwNDdcdTgwNDhcdTgwNDlcdTgwNGVcdTgwNGZcdTgwNTBcdTgw'@;
put 'NTFcdTgwNTNcdTgwNTVcdTgwNTZcdTgwNTdcdWZmZmRcdTgwNTlcdTgwNWJcdTgwNWNcdTgwNWRcdTgwNWVcdTgwNWZcdTgwNjBcdTgwNjFcdTgwNjJcdTgwNjNcdTgwNjRcdTgwNjVcdTgwNjZcdTgwNjdcdTgwNjhcdTgwNmJcdTgwNmNcdTgwNmRcdTgwNmVcdTgwNmZcdTgwNzBcdTgwNzJc'@;
put 'dTgwNzNcdTgwNzRcdTgwNzVcdTgwNzZcdTgwNzdcdTgwNzhcdTgwNzlcdTgwN2FcdTgwN2JcdTgwN2NcdTgwN2RcdTk2ODZcdTU3ODRcdTYyZTJcdTk2NDdcdTY5N2NcdTVhMDRcdTY0MDJcdTdiZDNcdTZmMGZcdTk2NGJcdTgyYTZcdTUzNjJcdTk4ODVcdTVlOTBcdTcwODlcdTYzYjNcdTUz'@;
put 'NjRcdTg2NGZcdTljODFcdTllOTNcdTc4OGNcdTk3MzJcdThkZWZcdThkNDJcdTllN2ZcdTZmNWVcdTc5ODRcdTVmNTVcdTk2NDZcdTYyMmVcdTlhNzRcdTU0MTVcdTk0ZGRcdTRmYTNcdTY1YzVcdTVjNjVcdTVjNjFcdTdmMTVcdTg2NTFcdTZjMmZcdTVmOGJcdTczODdcdTZlZTRcdTdlZmZc'@;
put 'dTVjZTZcdTYzMWJcdTViNmFcdTZlZTZcdTUzNzVcdTRlNzFcdTYzYTBcdTc1NjVcdTYyYTFcdThmNmVcdTRmMjZcdTRlZDFcdTZjYTZcdTdlYjZcdThiYmFcdTg0MWRcdTg3YmFcdTdmNTdcdTkwM2JcdTk1MjNcdTdiYTlcdTlhYTFcdTg4ZjhcdTg0M2RcdTZkMWJcdTlhODZcdTdlZGNcdTU5'@;
put 'ODhcdTllYmJcdTczOWJcdTc4MDFcdTg2ODJcdTlhNmNcdTlhODJcdTU2MWJcdTU0MTdcdTU3Y2JcdTRlNzBcdTllYTZcdTUzNTZcdThmYzhcdTgxMDlcdTc3OTJcdTk5OTJcdTg2ZWVcdTZlZTFcdTg1MTNcdTY2ZmNcdTYxNjJcdTZmMmJcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxOTRd'@;
put 'Lmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE5NF1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTk0XVt2XV09NDk2NjQrdixUWzQ5NjY0K3ZdPWtbMTk0XVt2XSk7Zm9yKGtbMTk1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MDdlXHU4'@;
put 'MDgxXHU4MDgyXHU4MDg1XHU4MDg4XHU4MDhhXHU4MDhkXHU4MDhlXHU4MDhmXHU4MDkwXHU4MDkxXHU4MDkyXHU4MDk0XHU4MDk1XHU4MDk3XHU4MDk5XHU4MDllXHU4MGEzXHU4MGE2XHU4MGE3XHU4MGE4XHU4MGFjXHU4MGIwXHU4MGIzXHU4MGI1XHU4MGI2XHU4MGI4XHU4MGI5XHU4MGJi'@;
put 'XHU4MGM1XHU4MGM3XHU4MGM4XHU4MGM5XHU4MGNhXHU4MGNiXHU4MGNmXHU4MGQwXHU4MGQxXHU4MGQyXHU4MGQzXHU4MGQ0XHU4MGQ1XHU4MGQ4XHU4MGRmXHU4MGUwXHU4MGUyXHU4MGUzXHU4MGU2XHU4MGVlXHU4MGY1XHU4MGY3XHU4MGY5XHU4MGZiXHU4MGZlXHU4MGZmXHU4MTAwXHU4'@;
put 'MTAxXHU4MTAzXHU4MTA0XHU4MTA1XHU4MTA3XHU4MTA4XHU4MTBiXHVmZmZkXHU4MTBjXHU4MTE1XHU4MTE3XHU4MTE5XHU4MTFiXHU4MTFjXHU4MTFkXHU4MTFmXHU4MTIwXHU4MTIxXHU4MTIyXHU4MTIzXHU4MTI0XHU4MTI1XHU4MTI2XHU4MTI3XHU4MTI4XHU4MTI5XHU4MTJhXHU4MTJi'@;
put 'XHU4MTJkXHU4MTJlXHU4MTMwXHU4MTMzXHU4MTM0XHU4MTM1XHU4MTM3XHU4MTM5XHU4MTNhXHU4MTNiXHU4MTNjXHU4MTNkXHU4MTNmXHU4YzI5XHU4MjkyXHU4MzJiXHU3NmYyXHU2YzEzXHU1ZmQ5XHU4M2JkXHU3MzJiXHU4MzA1XHU5NTFhXHU2YmRiXHU3N2RiXHU5NGM2XHU1MzZmXHU4'@;
put 'MzAyXHU1MTkyXHU1ZTNkXHU4YzhjXHU4ZDM4XHU0ZTQ4XHU3M2FiXHU2NzlhXHU2ODg1XHU5MTc2XHU5NzA5XHU3MTY0XHU2Y2ExXHU3NzA5XHU1YTkyXHU5NTQxXHU2YmNmXHU3ZjhlXHU2NjI3XHU1YmQwXHU1OWI5XHU1YTlhXHU5NWU4XHU5NWY3XHU0ZWVjXHU4NDBjXHU4NDk5XHU2YWFj'@;
put 'XHU3NmRmXHU5NTMwXHU3MzFiXHU2OGE2XHU1YjVmXHU3NzJmXHU5MTlhXHU5NzYxXHU3Y2RjXHU4ZmY3XHU4YzFjXHU1ZjI1XHU3YzczXHU3OWQ4XHU4OWM1XHU2Y2NjXHU4NzFjXHU1YmM2XHU1ZTQyXHU2OGM5XHU3NzIwXHU3ZWY1XHU1MTk1XHU1MTRkXHU1MmM5XHU1YTI5XHU3ZjA1XHU5'@;
put 'NzYyXHU4MmQ3XHU2M2NmXHU3Nzg0XHU4NWQwXHU3OWQyXHU2ZTNhXHU1ZTk5XHU1OTk5XHU4NTExXHU3MDZkXHU2YzExXHU2MmJmXHU3NmJmXHU2NTRmXHU2MGFmXHU5NWZkXHU2NjBlXHU4NzlmXHU5ZTIzXHU5NGVkXHU1NDBkXHU1NDdkXHU4YzJjXHU2NDc4XHVmZmZkIi5zcGxpdCgiIiks'@;
put 'dj0wO3YhPWtbMTk1XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxOTVdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE5NV1bdl1dPTQ5OTIwK3YsVFs0OTkyMCt2XT1rWzE5NV1bdl0pO2ZvcihrWzE5Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ODE0MFx1ODE0MVx1ODE0Mlx1ODE0M1x1ODE0NFx1ODE0NVx1ODE0N1x1ODE0OVx1ODE0ZFx1ODE0ZVx1ODE0Zlx1ODE1Mlx1ODE1Nlx1ODE1N1x1ODE1OFx1ODE1Ylx1ODE1Y1x1ODE1ZFx1ODE1ZVx1ODE1Zlx1ODE2MVx1ODE2Mlx1ODE2M1x1ODE2NFx1ODE2Nlx1ODE2OFx1ODE2'@;
put 'YVx1ODE2Ylx1ODE2Y1x1ODE2Zlx1ODE3Mlx1ODE3M1x1ODE3NVx1ODE3Nlx1ODE3N1x1ODE3OFx1ODE4MVx1ODE4M1x1ODE4NFx1ODE4NVx1ODE4Nlx1ODE4N1x1ODE4OVx1ODE4Ylx1ODE4Y1x1ODE4ZFx1ODE4ZVx1ODE5MFx1ODE5Mlx1ODE5M1x1ODE5NFx1ODE5NVx1ODE5Nlx1ODE5N1x1'@;
put 'ODE5OVx1ODE5YVx1ODE5ZVx1ODE5Zlx1ODFhMFx1ODFhMVx1ODFhMlx1ODFhNFx1ODFhNVx1ZmZmZFx1ODFhN1x1ODFhOVx1ODFhYlx1ODFhY1x1ODFhZFx1ODFhZVx1ODFhZlx1ODFiMFx1ODFiMVx1ODFiMlx1ODFiNFx1ODFiNVx1ODFiNlx1ODFiN1x1ODFiOFx1ODFiOVx1ODFiY1x1ODFi'@;
put 'ZFx1ODFiZVx1ODFiZlx1ODFjNFx1ODFjNVx1ODFjN1x1ODFjOFx1ODFjOVx1ODFjYlx1ODFjZFx1ODFjZVx1ODFjZlx1ODFkMFx1ODFkMVx1ODFkMlx1ODFkM1x1NjQ3OVx1ODYxMVx1NmEyMVx1ODE5Y1x1NzhlOFx1NjQ2OVx1OWI1NFx1NjJiOVx1NjcyYlx1ODNhYlx1NThhOFx1OWVkOFx1'@;
put 'NmNhYlx1NmYyMFx1NWJkZVx1OTY0Y1x1OGMwYlx1NzI1Zlx1NjdkMFx1NjJjN1x1NzI2MVx1NGVhOVx1NTljNlx1NmJjZFx1NTg5M1x1NjZhZVx1NWU1NVx1NTJkZlx1NjE1NVx1NjcyOFx1NzZlZVx1Nzc2Nlx1NzI2N1x1N2E0Nlx1NjJmZlx1NTRlYVx1NTQ1MFx1OTRhMFx1OTBhM1x1NWEx'@;
put 'Y1x1N2ViM1x1NmMxNlx1NGU0M1x1NTk3Nlx1ODAxMFx1NTk0OFx1NTM1N1x1NzUzN1x1OTZiZVx1NTZjYVx1NjMyMFx1ODExMVx1NjA3Y1x1OTVmOVx1NmRkNlx1NTQ2Mlx1OTk4MVx1NTE4NVx1NWFlOVx1ODBmZFx1NTlhZVx1OTcxM1x1NTAyYVx1NmNlNVx1NWMzY1x1NjJkZlx1NGY2MFx1'@;
put 'NTMzZlx1ODE3Ylx1OTAwNlx1NmViYVx1ODUyYlx1NjJjOFx1NWU3NFx1NzhiZVx1NjRiNVx1NjM3Ylx1NWZmNVx1NWExOFx1OTE3Zlx1OWUxZlx1NWMzZlx1NjM0Zlx1ODA0Mlx1NWI3ZFx1NTU2ZVx1OTU0YVx1OTU0ZFx1NmQ4NVx1NjBhOFx1NjdlMFx1NzJkZVx1NTFkZFx1NWI4MVx1ZmZm'@;
put 'ZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE5Nl0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTk2XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxOTZdW3ZdXT01MDE3Nit2LFRbNTAxNzYrdl09a1sxOTZdW3ZdKTtmb3Ioa1sxOTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdTgxZDRcdTgxZDVcdTgxZDZcdTgxZDdcdTgxZDhcdTgxZDlcdTgxZGFcdTgxZGJcdTgxZGNcdTgxZGRcdTgxZGVcdTgxZGZcdTgxZTBcdTgxZTFcdTgxZTJcdTgxZTRcdTgxZTVcdTgxZTZcdTgxZThcdTgxZTlcdTgxZWJcdTgxZWVcdTgxZWZcdTgxZjBcdTgx'@;
put 'ZjFcdTgxZjJcdTgxZjVcdTgxZjZcdTgxZjdcdTgxZjhcdTgxZjlcdTgxZmFcdTgxZmRcdTgxZmZcdTgyMDNcdTgyMDdcdTgyMDhcdTgyMDlcdTgyMGFcdTgyMGJcdTgyMGVcdTgyMGZcdTgyMTFcdTgyMTNcdTgyMTVcdTgyMTZcdTgyMTdcdTgyMThcdTgyMTlcdTgyMWFcdTgyMWRcdTgyMjBc'@;
put 'dTgyMjRcdTgyMjVcdTgyMjZcdTgyMjdcdTgyMjlcdTgyMmVcdTgyMzJcdTgyM2FcdTgyM2NcdTgyM2RcdTgyM2ZcdWZmZmRcdTgyNDBcdTgyNDFcdTgyNDJcdTgyNDNcdTgyNDVcdTgyNDZcdTgyNDhcdTgyNGFcdTgyNGNcdTgyNGRcdTgyNGVcdTgyNTBcdTgyNTFcdTgyNTJcdTgyNTNcdTgy'@;
put 'NTRcdTgyNTVcdTgyNTZcdTgyNTdcdTgyNTlcdTgyNWJcdTgyNWNcdTgyNWRcdTgyNWVcdTgyNjBcdTgyNjFcdTgyNjJcdTgyNjNcdTgyNjRcdTgyNjVcdTgyNjZcdTgyNjdcdTgyNjlcdTYyZTdcdTZjZGVcdTcyNWJcdTYyNmRcdTk0YWVcdTdlYmRcdTgxMTNcdTZkNTNcdTUxOWNcdTVmMDRc'@;
put 'dTU5NzRcdTUyYWFcdTYwMTJcdTU5NzNcdTY2OTZcdTg2NTBcdTc1OWZcdTYzMmFcdTYxZTZcdTdjZWZcdThiZmFcdTU0ZTZcdTZiMjdcdTllMjVcdTZiYjRcdTg1ZDVcdTU0NTVcdTUwNzZcdTZjYTRcdTU1NmFcdThkYjRcdTcyMmNcdTVlMTVcdTYwMTVcdTc0MzZcdTYyY2RcdTYzOTJcdTcy'@;
put 'NGNcdTVmOThcdTZlNDNcdTZkM2VcdTY1MDBcdTZmNThcdTc2ZDhcdTc4ZDBcdTc2ZmNcdTc1NTRcdTUyMjRcdTUzZGJcdTRlNTNcdTVlOWVcdTY1YzFcdTgwMmFcdTgwZDZcdTYyOWJcdTU0ODZcdTUyMjhcdTcwYWVcdTg4OGRcdThkZDFcdTZjZTFcdTU0NzhcdTgwZGFcdTU3ZjlcdTg4ZjRc'@;
put 'dThkNTRcdTk2NmFcdTkxNGRcdTRmNjlcdTZjOWJcdTU1YjdcdTc2YzZcdTc4MzBcdTYyYThcdTcwZjlcdTZmOGVcdTVmNmRcdTg0ZWNcdTY4ZGFcdTc4N2NcdTdiZjdcdTgxYThcdTY3MGJcdTllNGZcdTYzNjdcdTc4YjBcdTU3NmZcdTc4MTJcdTk3MzlcdTYyNzlcdTYyYWJcdTUyODhcdTc0'@;
put 'MzVcdTZiZDdcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxOTddLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE5N11bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTk3XVt2XV09NTA0MzIrdixUWzUwNDMyK3ZdPWtbMTk3XVt2XSk7Zm9yKGtbMTk4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MjZhXHU4MjZiXHU4MjZjXHU4MjZkXHU4MjcxXHU4Mjc1XHU4Mjc2XHU4Mjc3XHU4Mjc4XHU4MjdiXHU4MjdjXHU4MjgwXHU4MjgxXHU4MjgzXHU4Mjg1XHU4Mjg2XHU4Mjg3XHU4Mjg5XHU4MjhjXHU4MjkwXHU4MjkzXHU4Mjk0XHU4'@;
put 'Mjk1XHU4Mjk2XHU4MjlhXHU4MjliXHU4MjllXHU4MmEwXHU4MmEyXHU4MmEzXHU4MmE3XHU4MmIyXHU4MmI1XHU4MmI2XHU4MmJhXHU4MmJiXHU4MmJjXHU4MmJmXHU4MmMwXHU4MmMyXHU4MmMzXHU4MmM1XHU4MmM2XHU4MmM5XHU4MmQwXHU4MmQ2XHU4MmQ5XHU4MmRhXHU4MmRkXHU4MmUy'@;
put 'XHU4MmU3XHU4MmU4XHU4MmU5XHU4MmVhXHU4MmVjXHU4MmVkXHU4MmVlXHU4MmYwXHU4MmYyXHU4MmYzXHU4MmY1XHU4MmY2XHU4MmY4XHVmZmZkXHU4MmZhXHU4MmZjXHU4MmZkXHU4MmZlXHU4MmZmXHU4MzAwXHU4MzBhXHU4MzBiXHU4MzBkXHU4MzEwXHU4MzEyXHU4MzEzXHU4MzE2XHU4'@;
put 'MzE4XHU4MzE5XHU4MzFkXHU4MzFlXHU4MzFmXHU4MzIwXHU4MzIxXHU4MzIyXHU4MzIzXHU4MzI0XHU4MzI1XHU4MzI2XHU4MzI5XHU4MzJhXHU4MzJlXHU4MzMwXHU4MzMyXHU4MzM3XHU4MzNiXHU4MzNkXHU1NTY0XHU4MTNlXHU3NWIyXHU3NmFlXHU1MzM5XHU3NWRlXHU1MGZiXHU1YzQx'@;
put 'XHU4YjZjXHU3YmM3XHU1MDRmXHU3MjQ3XHU5YTk3XHU5OGQ4XHU2ZjAyXHU3NGUyXHU3OTY4XHU2NDg3XHU3N2E1XHU2MmZjXHU5ODkxXHU4ZDJiXHU1NGMxXHU4MDU4XHU0ZTUyXHU1NzZhXHU4MmY5XHU4NDBkXHU1ZTczXHU1MWVkXHU3NGY2XHU4YmM0XHU1YzRmXHU1NzYxXHU2Y2ZjXHU5'@;
put 'ODg3XHU1YTQ2XHU3ODM0XHU5YjQ0XHU4ZmViXHU3Yzk1XHU1MjU2XHU2MjUxXHU5NGZhXHU0ZWM2XHU4Mzg2XHU4NDYxXHU4M2U5XHU4NGIyXHU1N2Q0XHU2NzM0XHU1NzAzXHU2NjZlXHU2ZDY2XHU4YzMxXHU2NmRkXHU3MDExXHU2NzFmXHU2YjNhXHU2ODE2XHU2MjFhXHU1OWJiXHU0ZTAz'@;
put 'XHU1MWM0XHU2ZjA2XHU2N2QyXHU2YzhmXHU1MTc2XHU2OGNiXHU1OTQ3XHU2YjY3XHU3NTY2XHU1ZDBlXHU4MTEwXHU5ZjUwXHU2NWQ3XHU3OTQ4XHU3OTQxXHU5YTkxXHU4ZDc3XHU1YzgyXHU0ZTVlXHU0ZjAxXHU1NDJmXHU1OTUxXHU3ODBjXHU1NjY4XHU2YzE0XHU4ZmM0XHU1ZjAzXHU2'@;
put 'YzdkXHU2Y2UzXHU4YmFiXHU2MzkwXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTk4XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxOThdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE5OF1bdl1dPTUwNjg4K3YsVFs1MDY4OCt2XT1rWzE5OF1bdl0pO2ZvcihrWzE5OV09Ilx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODMzZVx1ODMzZlx1ODM0MVx1ODM0Mlx1ODM0NFx1ODM0NVx1ODM0OFx1ODM0YVx1ODM0Ylx1ODM0Y1x1ODM0ZFx1ODM0ZVx1ODM1M1x1ODM1NVx1ODM1Nlx1ODM1N1x1ODM1OFx1ODM1OVx1ODM1ZFx1ODM2Mlx1'@;
put 'ODM3MFx1ODM3MVx1ODM3Mlx1ODM3M1x1ODM3NFx1ODM3NVx1ODM3Nlx1ODM3OVx1ODM3YVx1ODM3ZVx1ODM3Zlx1ODM4MFx1ODM4MVx1ODM4Mlx1ODM4M1x1ODM4NFx1ODM4N1x1ODM4OFx1ODM4YVx1ODM4Ylx1ODM4Y1x1ODM4ZFx1ODM4Zlx1ODM5MFx1ODM5MVx1ODM5NFx1ODM5NVx1ODM5'@;
put 'Nlx1ODM5N1x1ODM5OVx1ODM5YVx1ODM5ZFx1ODM5Zlx1ODNhMVx1ODNhMlx1ODNhM1x1ODNhNFx1ODNhNVx1ODNhNlx1ODNhN1x1ODNhY1x1ODNhZFx1ODNhZVx1ZmZmZFx1ODNhZlx1ODNiNVx1ODNiYlx1ODNiZVx1ODNiZlx1ODNjMlx1ODNjM1x1ODNjNFx1ODNjNlx1ODNjOFx1ODNjOVx1'@;
put 'ODNjYlx1ODNjZFx1ODNjZVx1ODNkMFx1ODNkMVx1ODNkMlx1ODNkM1x1ODNkNVx1ODNkN1x1ODNkOVx1ODNkYVx1ODNkYlx1ODNkZVx1ODNlMlx1ODNlM1x1ODNlNFx1ODNlNlx1ODNlN1x1ODNlOFx1ODNlYlx1ODNlY1x1ODNlZFx1NjA3MFx1NmQzZFx1NzI3NVx1NjI2Nlx1OTQ4ZVx1OTRj'@;
put 'NVx1NTM0M1x1OGZjMVx1N2I3ZVx1NGVkZlx1OGMyNlx1NGU3ZVx1OWVkNFx1OTRiMVx1OTRiM1x1NTI0ZFx1NmY1Y1x1OTA2M1x1NmQ0NVx1OGMzNFx1NTgxMVx1NWQ0Y1x1NmIyMFx1NmI0OVx1NjdhYVx1NTQ1Ylx1ODE1NFx1N2Y4Y1x1NTg5OVx1ODUzN1x1NWYzYVx1NjJhMlx1NmE0N1x1'@;
put 'OTUzOVx1NjU3Mlx1NjA4NFx1Njg2NVx1NzdhN1x1NGU1NFx1NGZhOFx1NWRlN1x1OTc5OFx1NjRhY1x1N2ZkOFx1NWNlZFx1NGZjZlx1N2E4ZFx1NTIwN1x1ODMwNFx1NGUxNFx1NjAyZlx1N2E4M1x1OTRhNlx1NGZiNVx1NGViMlx1NzllNlx1NzQzNFx1NTJlNFx1ODJiOVx1NjRkMlx1Nzli'@;
put 'ZFx1NWJkZFx1NmM4MVx1OTc1Mlx1OGY3Ylx1NmMyMlx1NTAzZVx1NTM3Zlx1NmUwNVx1NjRjZVx1NjY3NFx1NmMzMFx1NjBjNVx1OTg3N1x1OGJmN1x1NWU4Nlx1NzQzY1x1N2E3N1x1NzljYlx1NGUxOFx1OTBiMVx1NzQwM1x1NmM0Mlx1NTZkYVx1OTE0Ylx1NmNjNVx1OGQ4Ylx1NTMzYVx1'@;
put 'ODZjNlx1NjZmMlx1OGVhZlx1NWM0OFx1OWE3MVx1NmUyMFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE5OV0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTk5XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxOTldW3ZdXT01MDk0NCt2LFRbNTA5NDQrdl09a1sxOTldW3ZdKTtmb3Ioa1syMDBd'@;
put 'PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgzZWVcdTgzZWZcdTgzZjNcdTgzZjRcdTgzZjVcdTgzZjZcdTgzZjdcdTgzZmFcdTgzZmJcdTgzZmNcdTgzZmVcdTgzZmZcdTg0MDBcdTg0MDJcdTg0MDVcdTg0MDdcdTg0MDhcdTg0MDlc'@;
put 'dTg0MGFcdTg0MTBcdTg0MTJcdTg0MTNcdTg0MTRcdTg0MTVcdTg0MTZcdTg0MTdcdTg0MTlcdTg0MWFcdTg0MWJcdTg0MWVcdTg0MWZcdTg0MjBcdTg0MjFcdTg0MjJcdTg0MjNcdTg0MjlcdTg0MmFcdTg0MmJcdTg0MmNcdTg0MmRcdTg0MmVcdTg0MmZcdTg0MzBcdTg0MzJcdTg0MzNcdTg0'@;
put 'MzRcdTg0MzVcdTg0MzZcdTg0MzdcdTg0MzlcdTg0M2FcdTg0M2JcdTg0M2VcdTg0M2ZcdTg0NDBcdTg0NDFcdTg0NDJcdTg0NDNcdTg0NDRcdTg0NDVcdTg0NDdcdTg0NDhcdTg0NDlcdWZmZmRcdTg0NGFcdTg0NGJcdTg0NGNcdTg0NGRcdTg0NGVcdTg0NGZcdTg0NTBcdTg0NTJcdTg0NTNc'@;
put 'dTg0NTRcdTg0NTVcdTg0NTZcdTg0NThcdTg0NWRcdTg0NWVcdTg0NWZcdTg0NjBcdTg0NjJcdTg0NjRcdTg0NjVcdTg0NjZcdTg0NjdcdTg0NjhcdTg0NmFcdTg0NmVcdTg0NmZcdTg0NzBcdTg0NzJcdTg0NzRcdTg0NzdcdTg0NzlcdTg0N2JcdTg0N2NcdTUzZDZcdTVhMzZcdTlmOGJcdThk'@;
put 'YTNcdTUzYmJcdTU3MDhcdTk4YTdcdTY3NDNcdTkxOWJcdTZjYzlcdTUxNjhcdTc1Y2FcdTYyZjNcdTcyYWNcdTUyMzhcdTUyOWRcdTdmM2FcdTcwOTRcdTc2MzhcdTUzNzRcdTllNGFcdTY5YjdcdTc4NmVcdTk2YzBcdTg4ZDlcdTdmYTRcdTcxMzZcdTcxYzNcdTUxODlcdTY3ZDNcdTc0ZTRc'@;
put 'dTU4ZTRcdTY1MThcdTU2YjdcdThiYTlcdTk5NzZcdTYyNzBcdTdlZDVcdTYwZjlcdTcwZWRcdTU4ZWNcdTRlYzFcdTRlYmFcdTVmY2RcdTk3ZTdcdTRlZmJcdThiYTRcdTUyMDNcdTU5OGFcdTdlYWJcdTYyNTRcdTRlY2RcdTY1ZTVcdTYyMGVcdTgzMzhcdTg0YzlcdTgzNjNcdTg3OGRcdTcx'@;
put 'OTRcdTZlYjZcdTViYjlcdTdlZDJcdTUxOTdcdTYzYzlcdTY3ZDRcdTgwODlcdTgzMzlcdTg4MTVcdTUxMTJcdTViN2FcdTU5ODJcdThmYjFcdTRlNzNcdTZjNWRcdTUxNjVcdTg5MjVcdThmNmZcdTk2MmVcdTg1NGFcdTc0NWVcdTk1MTBcdTk1ZjBcdTZkYTZcdTgyZTVcdTVmMzFcdTY0OTJc'@;
put 'dTZkMTJcdTg0MjhcdTgxNmVcdTljYzNcdTU4NWVcdThkNWJcdTRlMDlcdTUzYzFcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMDBdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIwMF1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjAwXVt2XV09NTEyMDArdixUWzUxMjAwK3ZdPWtbMjAwXVt2'@;
put 'XSk7Zm9yKGtbMjAxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NDdkXHU4NDdlXHU4NDdmXHU4NDgwXHU4NDgxXHU4NDgzXHU4NDg0XHU4NDg1XHU4NDg2XHU4NDhhXHU4NDhkXHU4NDhmXHU4NDkwXHU4NDkxXHU4NDkyXHU4NDkz'@;
put 'XHU4NDk0XHU4NDk1XHU4NDk2XHU4NDk4XHU4NDlhXHU4NDliXHU4NDlkXHU4NDllXHU4NDlmXHU4NGEwXHU4NGEyXHU4NGEzXHU4NGE0XHU4NGE1XHU4NGE2XHU4NGE3XHU4NGE4XHU4NGE5XHU4NGFhXHU4NGFiXHU4NGFjXHU4NGFkXHU4NGFlXHU4NGIwXHU4NGIxXHU4NGIzXHU4NGI1XHU4'@;
put 'NGI2XHU4NGI3XHU4NGJiXHU4NGJjXHU4NGJlXHU4NGMwXHU4NGMyXHU4NGMzXHU4NGM1XHU4NGM2XHU4NGM3XHU4NGM4XHU4NGNiXHU4NGNjXHU4NGNlXHU4NGNmXHU4NGQyXHU4NGQ0XHU4NGQ1XHU4NGQ3XHVmZmZkXHU4NGQ4XHU4NGQ5XHU4NGRhXHU4NGRiXHU4NGRjXHU4NGRlXHU4NGUx'@;
put 'XHU4NGUyXHU4NGU0XHU4NGU3XHU4NGU4XHU4NGU5XHU4NGVhXHU4NGViXHU4NGVkXHU4NGVlXHU4NGVmXHU4NGYxXHU4NGYyXHU4NGYzXHU4NGY0XHU4NGY1XHU4NGY2XHU4NGY3XHU4NGY4XHU4NGY5XHU4NGZhXHU4NGZiXHU4NGZkXHU4NGZlXHU4NTAwXHU4NTAxXHU4NTAyXHU0ZjFlXHU2'@;
put 'NTYzXHU2ODUxXHU1NWQzXHU0ZTI3XHU2NDE0XHU5YTlhXHU2MjZiXHU1YWMyXHU3NDVmXHU4MjcyXHU2ZGE5XHU2OGVlXHU1MGU3XHU4MzhlXHU3ODAyXHU2NzQwXHU1MjM5XHU2Yzk5XHU3ZWIxXHU1MGJiXHU1NTY1XHU3MTVlXHU3YjViXHU2NjUyXHU3M2NhXHU4MmViXHU2NzQ5XHU1Yzcx'@;
put 'XHU1MjIwXHU3MTdkXHU4ODZiXHU5NWVhXHU5NjU1XHU2NGM1XHU4ZDYxXHU4MWIzXHU1NTg0XHU2YzU1XHU2MjQ3XHU3ZjJlXHU1ODkyXHU0ZjI0XHU1NTQ2XHU4ZDRmXHU2NjRjXHU0ZTBhXHU1YzFhXHU4OGYzXHU2OGEyXHU2MzRlXHU3YTBkXHU3MGU3XHU4MjhkXHU1MmZhXHU5N2Y2XHU1'@;
put 'YzExXHU1NGU4XHU5MGI1XHU3ZWNkXHU1OTYyXHU4ZDRhXHU4NmM3XHU4MjBjXHU4MjBkXHU4ZDY2XHU2NDQ0XHU1YzA0XHU2MTUxXHU2ZDg5XHU3OTNlXHU4YmJlXHU3ODM3XHU3NTMzXHU1NDdiXHU0ZjM4XHU4ZWFiXHU2ZGYxXHU1YTIwXHU3ZWM1XHU3OTVlXHU2Yzg4XHU1YmExXHU1YTc2'@;
put 'XHU3NTFhXHU4MGJlXHU2MTRlXHU2ZTE3XHU1OGYwXHU3NTFmXHU3NTI1XHU3MjcyXHU1MzQ3XHU3ZWYzXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjAxXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMDFdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIwMV1bdl1dPTUxNDU2K3YsVFs1MTQ1'@;
put 'Nit2XT1rWzIwMV1bdl0pO2ZvcihrWzIwMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODUwM1x1ODUwNFx1ODUwNVx1ODUwNlx1ODUwN1x1ODUwOFx1ODUwOVx1ODUwYVx1ODUwYlx1ODUwZFx1ODUwZVx1ODUwZlx1ODUxMFx1ODUx'@;
put 'Mlx1ODUxNFx1ODUxNVx1ODUxNlx1ODUxOFx1ODUxOVx1ODUxYlx1ODUxY1x1ODUxZFx1ODUxZVx1ODUyMFx1ODUyMlx1ODUyM1x1ODUyNFx1ODUyNVx1ODUyNlx1ODUyN1x1ODUyOFx1ODUyOVx1ODUyYVx1ODUyZFx1ODUyZVx1ODUyZlx1ODUzMFx1ODUzMVx1ODUzMlx1ODUzM1x1ODUzNFx1'@;
put 'ODUzNVx1ODUzNlx1ODUzZVx1ODUzZlx1ODU0MFx1ODU0MVx1ODU0Mlx1ODU0NFx1ODU0NVx1ODU0Nlx1ODU0N1x1ODU0Ylx1ODU0Y1x1ODU0ZFx1ODU0ZVx1ODU0Zlx1ODU1MFx1ODU1MVx1ODU1Mlx1ODU1M1x1ODU1NFx1ODU1NVx1ZmZmZFx1ODU1N1x1ODU1OFx1ODU1YVx1ODU1Ylx1ODU1'@;
put 'Y1x1ODU1ZFx1ODU1Zlx1ODU2MFx1ODU2MVx1ODU2Mlx1ODU2M1x1ODU2NVx1ODU2Nlx1ODU2N1x1ODU2OVx1ODU2YVx1ODU2Ylx1ODU2Y1x1ODU2ZFx1ODU2ZVx1ODU2Zlx1ODU3MFx1ODU3MVx1ODU3M1x1ODU3NVx1ODU3Nlx1ODU3N1x1ODU3OFx1ODU3Y1x1ODU3ZFx1ODU3Zlx1ODU4MFx1'@;
put 'ODU4MVx1NzcwMVx1NzZkYlx1NTI2OVx1ODBkY1x1NTcyM1x1NWUwOFx1NTkzMVx1NzJlZVx1NjViZFx1NmU3Zlx1OGJkN1x1NWMzOFx1ODY3MVx1NTM0MVx1NzdmM1x1NjJmZVx1NjVmNlx1NGVjMFx1OThkZlx1ODY4MFx1NWI5ZVx1OGJjNlx1NTNmMlx1NzdlMlx1NGY3Zlx1NWM0ZVx1OWE3'@;
put 'Nlx1NTljYlx1NWYwZlx1NzkzYVx1NThlYlx1NGUxNlx1NjdmZlx1NGU4Ylx1NjJlZFx1OGE5M1x1OTAxZFx1NTJiZlx1NjYyZlx1NTVkY1x1NTY2Y1x1OTAwMlx1NGVkNVx1NGY4ZFx1OTFjYVx1OTk3MFx1NmMwZlx1NWUwMlx1NjA0M1x1NWJhNFx1ODljNlx1OGJkNVx1NjUzNlx1NjI0Ylx1'@;
put 'OTk5Nlx1NWI4OFx1NWJmZlx1NjM4OFx1NTUyZVx1NTNkN1x1NzYyNlx1NTE3ZFx1ODUyY1x1NjdhMlx1NjhiM1x1NmI4YVx1NjI5Mlx1OGY5M1x1NTNkNFx1ODIxMlx1NmRkMVx1NzU4Zlx1NGU2Nlx1OGQ0ZVx1NWI3MFx1NzE5Zlx1ODVhZlx1NjY5MVx1NjZkOVx1N2Y3Mlx1ODcwMFx1OWVj'@;
put 'ZFx1OWYyMFx1NWM1ZVx1NjcyZlx1OGZmMFx1NjgxMVx1Njc1Zlx1NjIwZFx1N2FkNlx1NTg4NVx1NWViNlx1NjU3MFx1NmYzMVx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIwMl0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjAyXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMDJdW3ZdXT01'@;
put 'MTcxMit2LFRbNTE3MTIrdl09a1syMDJdW3ZdKTtmb3Ioa1syMDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1ODJcdTg1ODNcdTg1ODZcdTg1ODhcdTg1ODlcdTg1OGFcdTg1OGJcdTg1OGNcdTg1OGRcdTg1OGVcdTg1OTBcdTg1'@;
put 'OTFcdTg1OTJcdTg1OTNcdTg1OTRcdTg1OTVcdTg1OTZcdTg1OTdcdTg1OThcdTg1OTlcdTg1OWFcdTg1OWRcdTg1OWVcdTg1OWZcdTg1YTBcdTg1YTFcdTg1YTJcdTg1YTNcdTg1YTVcdTg1YTZcdTg1YTdcdTg1YTlcdTg1YWJcdTg1YWNcdTg1YWRcdTg1YjFcdTg1YjJcdTg1YjNcdTg1YjRc'@;
put 'dTg1YjVcdTg1YjZcdTg1YjhcdTg1YmFcdTg1YmJcdTg1YmNcdTg1YmRcdTg1YmVcdTg1YmZcdTg1YzBcdTg1YzJcdTg1YzNcdTg1YzRcdTg1YzVcdTg1YzZcdTg1YzdcdTg1YzhcdTg1Y2FcdTg1Y2JcdTg1Y2NcdTg1Y2RcdTg1Y2VcdTg1ZDFcdTg1ZDJcdWZmZmRcdTg1ZDRcdTg1ZDZcdTg1'@;
put 'ZDdcdTg1ZDhcdTg1ZDlcdTg1ZGFcdTg1ZGJcdTg1ZGRcdTg1ZGVcdTg1ZGZcdTg1ZTBcdTg1ZTFcdTg1ZTJcdTg1ZTNcdTg1ZTVcdTg1ZTZcdTg1ZTdcdTg1ZThcdTg1ZWFcdTg1ZWJcdTg1ZWNcdTg1ZWRcdTg1ZWVcdTg1ZWZcdTg1ZjBcdTg1ZjFcdTg1ZjJcdTg1ZjNcdTg1ZjRcdTg1ZjVc'@;
put 'dTg1ZjZcdTg1ZjdcdTg1ZjhcdTYwNTVcdTUyMzdcdTgwMGRcdTY0NTRcdTg4NzBcdTc1MjlcdTVlMDVcdTY4MTNcdTYyZjRcdTk3MWNcdTUzY2NcdTcyM2RcdThjMDFcdTZjMzRcdTc3NjFcdTdhMGVcdTU0MmVcdTc3YWNcdTk4N2FcdTgyMWNcdThiZjRcdTc4NTVcdTY3MTRcdTcwYzFcdTY1'@;
put 'YWZcdTY0OTVcdTU2MzZcdTYwMWRcdTc5YzFcdTUzZjhcdTRlMWRcdTZiN2JcdTgwODZcdTViZmFcdTU1ZTNcdTU2ZGJcdTRmM2FcdTRmM2NcdTk5NzJcdTVkZjNcdTY3N2VcdTgwMzhcdTYwMDJcdTk4ODJcdTkwMDFcdTViOGJcdThiYmNcdThiZjVcdTY0MWNcdTgyNThcdTY0ZGVcdTU1ZmRc'@;
put 'dTgyY2ZcdTkxNjVcdTRmZDdcdTdkMjBcdTkwMWZcdTdjOWZcdTUwZjNcdTU4NTFcdTZlYWZcdTViYmZcdThiYzlcdTgwODNcdTkxNzhcdTg0OWNcdTdiOTdcdTg2N2RcdTk2OGJcdTk2OGZcdTdlZTVcdTlhZDNcdTc4OGVcdTVjODFcdTdhNTdcdTkwNDJcdTk2YTdcdTc5NWZcdTViNTlcdTYz'@;
put 'NWZcdTdiMGJcdTg0ZDFcdTY4YWRcdTU1MDZcdTdmMjlcdTc0MTBcdTdkMjJcdTk1MDFcdTYyNDBcdTU4NGNcdTRlZDZcdTViODNcdTU5NzlcdTU4NTRcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMDNdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIwM11bdl0uY2hhckNvZGVBdCgwKSYmKHNl'@;
put 'W2tbMjAzXVt2XV09NTE5NjgrdixUWzUxOTY4K3ZdPWtbMjAzXVt2XSk7Zm9yKGtbMjA0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NWY5XHU4NWZhXHU4NWZjXHU4NWZkXHU4NWZlXHU4NjAwXHU4NjAxXHU4NjAyXHU4NjAzXHU4'@;
put 'NjA0XHU4NjA2XHU4NjA3XHU4NjA4XHU4NjA5XHU4NjBhXHU4NjBiXHU4NjBjXHU4NjBkXHU4NjBlXHU4NjBmXHU4NjEwXHU4NjEyXHU4NjEzXHU4NjE0XHU4NjE1XHU4NjE3XHU4NjE4XHU4NjE5XHU4NjFhXHU4NjFiXHU4NjFjXHU4NjFkXHU4NjFlXHU4NjFmXHU4NjIwXHU4NjIxXHU4NjIy'@;
put 'XHU4NjIzXHU4NjI0XHU4NjI1XHU4NjI2XHU4NjI4XHU4NjJhXHU4NjJiXHU4NjJjXHU4NjJkXHU4NjJlXHU4NjJmXHU4NjMwXHU4NjMxXHU4NjMyXHU4NjMzXHU4NjM0XHU4NjM1XHU4NjM2XHU4NjM3XHU4NjM5XHU4NjNhXHU4NjNiXHU4NjNkXHU4NjNlXHU4NjNmXHU4NjQwXHVmZmZkXHU4'@;
put 'NjQxXHU4NjQyXHU4NjQzXHU4NjQ0XHU4NjQ1XHU4NjQ2XHU4NjQ3XHU4NjQ4XHU4NjQ5XHU4NjRhXHU4NjRiXHU4NjRjXHU4NjUyXHU4NjUzXHU4NjU1XHU4NjU2XHU4NjU3XHU4NjU4XHU4NjU5XHU4NjViXHU4NjVjXHU4NjVkXHU4NjVmXHU4NjYwXHU4NjYxXHU4NjYzXHU4NjY0XHU4NjY1'@;
put 'XHU4NjY2XHU4NjY3XHU4NjY4XHU4NjY5XHU4NjZhXHU3MzZkXHU2MzFlXHU4ZTRiXHU4ZTBmXHU4MGNlXHU4MmQ0XHU2MmFjXHU1M2YwXHU2Y2YwXHU5MTVlXHU1OTJhXHU2MDAxXHU2YzcwXHU1NzRkXHU2NDRhXHU4ZDJhXHU3NjJiXHU2ZWU5XHU1NzViXHU2YTgwXHU3NWYwXHU2ZjZkXHU4'@;
put 'YzJkXHU4YzA4XHU1NzY2XHU2YmVmXHU4ODkyXHU3OGIzXHU2M2EyXHU1M2Y5XHU3MGFkXHU2YzY0XHU1ODU4XHU2NDJhXHU1ODAyXHU2OGUwXHU4MTliXHU1NTEwXHU3Y2Q2XHU1MDE4XHU4ZWJhXHU2ZGNjXHU4ZDlmXHU3MGViXHU2MzhmXHU2ZDliXHU2ZWQ0XHU3ZWU2XHU4NDA0XHU2ODQz'@;
put 'XHU5MDAzXHU2ZGQ4XHU5Njc2XHU4YmE4XHU1OTU3XHU3Mjc5XHU4NWU0XHU4MTdlXHU3NWJjXHU4YThhXHU2OGFmXHU1MjU0XHU4ZTIyXHU5NTExXHU2M2QwXHU5ODk4XHU4ZTQ0XHU1NTdjXHU0ZjUzXHU2NmZmXHU1NjhmXHU2MGQ1XHU2ZDk1XHU1MjQzXHU1YzQ5XHU1OTI5XHU2ZGZiXHU1'@;
put 'ODZiXHU3NTMwXHU3NTFjXHU2MDZjXHU4MjE0XHU4MTQ2XHU2MzExXHU2NzYxXHU4ZmUyXHU3NzNhXHU4ZGYzXHU4ZDM0XHU5NGMxXHU1ZTE2XHU1Mzg1XHU1NDJjXHU3MGMzXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjA0XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMDRdW3ZdLmNoYXJD'@;
put 'b2RlQXQoMCkmJihzZVtrWzIwNF1bdl1dPTUyMjI0K3YsVFs1MjIyNCt2XT1rWzIwNF1bdl0pO2ZvcihrWzIwNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODY2ZFx1ODY2Zlx1ODY3MFx1ODY3Mlx1ODY3M1x1ODY3NFx1ODY3NVx1'@;
put 'ODY3Nlx1ODY3N1x1ODY3OFx1ODY4M1x1ODY4NFx1ODY4NVx1ODY4Nlx1ODY4N1x1ODY4OFx1ODY4OVx1ODY4ZVx1ODY4Zlx1ODY5MFx1ODY5MVx1ODY5Mlx1ODY5NFx1ODY5Nlx1ODY5N1x1ODY5OFx1ODY5OVx1ODY5YVx1ODY5Ylx1ODY5ZVx1ODY5Zlx1ODZhMFx1ODZhMVx1ODZhMlx1ODZh'@;
put 'NVx1ODZhNlx1ODZhYlx1ODZhZFx1ODZhZVx1ODZiMlx1ODZiM1x1ODZiN1x1ODZiOFx1ODZiOVx1ODZiYlx1ODZiY1x1ODZiZFx1ODZiZVx1ODZiZlx1ODZjMVx1ODZjMlx1ODZjM1x1ODZjNVx1ODZjOFx1ODZjY1x1ODZjZFx1ODZkMlx1ODZkM1x1ODZkNVx1ODZkNlx1ODZkN1x1ODZkYVx1'@;
put 'ODZkY1x1ZmZmZFx1ODZkZFx1ODZlMFx1ODZlMVx1ODZlMlx1ODZlM1x1ODZlNVx1ODZlNlx1ODZlN1x1ODZlOFx1ODZlYVx1ODZlYlx1ODZlY1x1ODZlZlx1ODZmNVx1ODZmNlx1ODZmN1x1ODZmYVx1ODZmYlx1ODZmY1x1ODZmZFx1ODZmZlx1ODcwMVx1ODcwNFx1ODcwNVx1ODcwNlx1ODcw'@;
put 'Ylx1ODcwY1x1ODcwZVx1ODcwZlx1ODcxMFx1ODcxMVx1ODcxNFx1ODcxNlx1NmM0MFx1NWVmN1x1NTA1Y1x1NGVhZFx1NWVhZFx1NjMzYVx1ODI0N1x1OTAxYVx1Njg1MFx1OTE2ZVx1NzdiM1x1NTQwY1x1OTRkY1x1NWY2NFx1N2FlNVx1Njg3Nlx1NjM0NVx1N2I1Mlx1N2VkZlx1NzVkYlx1'@;
put 'NTA3N1x1NjI5NVx1NTkzNFx1OTAwZlx1NTFmOFx1NzljM1x1N2E4MVx1NTZmZVx1NWY5Mlx1OTAxNFx1NmQ4Mlx1NWM2MFx1NTcxZlx1NTQxMFx1NTE1NFx1NmU0ZFx1NTZlMlx1NjNhOFx1OTg5M1x1ODE3Zlx1ODcxNVx1ODkyYVx1OTAwMFx1NTQxZVx1NWM2Zlx1ODFjMFx1NjJkNlx1NjI1'@;
put 'OFx1ODEzMVx1OWUzNVx1OTY0MFx1OWE2ZVx1OWE3Y1x1NjkyZFx1NTlhNVx1NjJkM1x1NTUzZVx1NjMxNlx1NTRjN1x1ODZkOVx1NmQzY1x1NWEwM1x1NzRlNlx1ODg5Y1x1NmI2YVx1NTkxNlx1OGM0Y1x1NWYyZlx1NmU3ZVx1NzNhOVx1OTg3ZFx1NGUzOFx1NzBmN1x1NWI4Y1x1Nzg5N1x1'@;
put 'NjMzZFx1NjY1YVx1NzY5Nlx1NjBjYlx1NWI5Ylx1NWE0OVx1NGUwN1x1ODE1NVx1NmM2YVx1NzM4Ylx1NGVhMVx1Njc4OVx1N2Y1MVx1NWY4MFx1NjVmYVx1NjcxYlx1NWZkOFx1NTk4NFx1NWEwMVx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIwNV0ubGVuZ3RoOysrdik2NTUzMyE9PWtb'@;
put 'MjA1XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMDVdW3ZdXT01MjQ4MCt2LFRbNTI0ODArdl09a1syMDVdW3ZdKTtmb3Ioa1syMDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg3MTlcdTg3MWJcdTg3MWRcdTg3MWZcdTg3MjBc'@;
put 'dTg3MjRcdTg3MjZcdTg3MjdcdTg3MjhcdTg3MmFcdTg3MmJcdTg3MmNcdTg3MmRcdTg3MmZcdTg3MzBcdTg3MzJcdTg3MzNcdTg3MzVcdTg3MzZcdTg3MzhcdTg3MzlcdTg3M2FcdTg3M2NcdTg3M2RcdTg3NDBcdTg3NDFcdTg3NDJcdTg3NDNcdTg3NDRcdTg3NDVcdTg3NDZcdTg3NGFcdTg3'@;
put 'NGJcdTg3NGRcdTg3NGZcdTg3NTBcdTg3NTFcdTg3NTJcdTg3NTRcdTg3NTVcdTg3NTZcdTg3NThcdTg3NWFcdTg3NWJcdTg3NWNcdTg3NWRcdTg3NWVcdTg3NWZcdTg3NjFcdTg3NjJcdTg3NjZcdTg3NjdcdTg3NjhcdTg3NjlcdTg3NmFcdTg3NmJcdTg3NmNcdTg3NmRcdTg3NmZcdTg3NzFc'@;
put 'dTg3NzJcdTg3NzNcdTg3NzVcdWZmZmRcdTg3NzdcdTg3NzhcdTg3NzlcdTg3N2FcdTg3N2ZcdTg3ODBcdTg3ODFcdTg3ODRcdTg3ODZcdTg3ODdcdTg3ODlcdTg3OGFcdTg3OGNcdTg3OGVcdTg3OGZcdTg3OTBcdTg3OTFcdTg3OTJcdTg3OTRcdTg3OTVcdTg3OTZcdTg3OThcdTg3OTlcdTg3'@;
put 'OWFcdTg3OWJcdTg3OWNcdTg3OWRcdTg3OWVcdTg3YTBcdTg3YTFcdTg3YTJcdTg3YTNcdTg3YTRcdTVkY2RcdTVmYWVcdTUzNzFcdTk3ZTZcdThmZGRcdTY4NDVcdTU2ZjRcdTU1MmZcdTYwZGZcdTRlM2FcdTZmNGRcdTdlZjRcdTgyYzdcdTg0MGVcdTU5ZDRcdTRmMWZcdTRmMmFcdTVjM2Vc'@;
put 'dTdlYWNcdTY3MmFcdTg1MWFcdTU0NzNcdTc1NGZcdTgwYzNcdTU1ODJcdTliNGZcdTRmNGRcdTZlMmRcdThjMTNcdTVjMDlcdTYxNzBcdTUzNmJcdTc2MWZcdTZlMjlcdTg2OGFcdTY1ODdcdTk1ZmJcdTdlYjlcdTU0M2JcdTdhMzNcdTdkMGFcdTk1ZWVcdTU1ZTFcdTdmYzFcdTc0ZWVcdTYz'@;
put 'MWRcdTg3MTdcdTZkYTFcdTdhOWRcdTYyMTFcdTY1YTFcdTUzNjdcdTYzZTFcdTZjODNcdTVkZWJcdTU0NWNcdTk0YThcdTRlNGNcdTZjNjFcdThiZWNcdTVjNGJcdTY1ZTBcdTgyOWNcdTY4YTdcdTU0M2VcdTU0MzRcdTZiY2JcdTZiNjZcdTRlOTRcdTYzNDJcdTUzNDhcdTgyMWVcdTRmMGRc'@;
put 'dTRmYWVcdTU3NWVcdTYyMGFcdTk2ZmVcdTY2NjRcdTcyNjlcdTUyZmZcdTUyYTFcdTYwOWZcdThiZWZcdTY2MTRcdTcxOTlcdTY3OTBcdTg5N2ZcdTc4NTJcdTc3ZmRcdTY2NzBcdTU2M2JcdTU0MzhcdTk1MjFcdTcyN2FcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMDZdLmxlbmd0aDsr'@;
put 'K3YpNjU1MzMhPT1rWzIwNl1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjA2XVt2XV09NTI3MzYrdixUWzUyNzM2K3ZdPWtbMjA2XVt2XSk7Zm9yKGtbMjA3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4N2E1XHU4N2E2XHU4N2E3'@;
put 'XHU4N2E5XHU4N2FhXHU4N2FlXHU4N2IwXHU4N2IxXHU4N2IyXHU4N2I0XHU4N2I2XHU4N2I3XHU4N2I4XHU4N2I5XHU4N2JiXHU4N2JjXHU4N2JlXHU4N2JmXHU4N2MxXHU4N2MyXHU4N2MzXHU4N2M0XHU4N2M1XHU4N2M3XHU4N2M4XHU4N2M5XHU4N2NjXHU4N2NkXHU4N2NlXHU4N2NmXHU4'@;
put 'N2QwXHU4N2Q0XHU4N2Q1XHU4N2Q2XHU4N2Q3XHU4N2Q4XHU4N2Q5XHU4N2RhXHU4N2RjXHU4N2RkXHU4N2RlXHU4N2RmXHU4N2UxXHU4N2UyXHU4N2UzXHU4N2U0XHU4N2U2XHU4N2U3XHU4N2U4XHU4N2U5XHU4N2ViXHU4N2VjXHU4N2VkXHU4N2VmXHU4N2YwXHU4N2YxXHU4N2YyXHU4N2Yz'@;
put 'XHU4N2Y0XHU4N2Y1XHU4N2Y2XHU4N2Y3XHU4N2Y4XHVmZmZkXHU4N2ZhXHU4N2ZiXHU4N2ZjXHU4N2ZkXHU4N2ZmXHU4ODAwXHU4ODAxXHU4ODAyXHU4ODA0XHU4ODA1XHU4ODA2XHU4ODA3XHU4ODA4XHU4ODA5XHU4ODBiXHU4ODBjXHU4ODBkXHU4ODBlXHU4ODBmXHU4ODEwXHU4ODExXHU4'@;
put 'ODEyXHU4ODE0XHU4ODE3XHU4ODE4XHU4ODE5XHU4ODFhXHU4ODFjXHU4ODFkXHU4ODFlXHU4ODFmXHU4ODIwXHU4ODIzXHU3YTAwXHU2MDZmXHU1ZTBjXHU2MDg5XHU4MTlkXHU1OTE1XHU2MGRjXHU3MTg0XHU3MGVmXHU2ZWFhXHU2YzUwXHU3MjgwXHU2YTg0XHU4OGFkXHU1ZTJkXHU0ZTYw'@;
put 'XHU1YWIzXHU1NTljXHU5NGUzXHU2ZDE3XHU3Y2ZiXHU5Njk5XHU2MjBmXHU3ZWM2XHU3NzhlXHU4NjdlXHU1MzIzXHU5NzFlXHU4Zjk2XHU2Njg3XHU1Y2UxXHU0ZmEwXHU3MmVkXHU0ZTBiXHU1M2E2XHU1OTBmXHU1NDEzXHU2MzgwXHU5NTI4XHU1MTQ4XHU0ZWQ5XHU5YzljXHU3ZWE0XHU1'@;
put 'NGI4XHU4ZDI0XHU4ODU0XHU4MjM3XHU5NWYyXHU2ZDhlXHU1ZjI2XHU1YWNjXHU2NjNlXHU5NjY5XHU3M2IwXHU3MzJlXHU1M2JmXHU4MTdhXHU5OTg1XHU3ZmExXHU1YmFhXHU5Njc3XHU5NjUwXHU3ZWJmXHU3NmY4XHU1M2EyXHU5NTc2XHU5OTk5XHU3YmIxXHU4OTQ0XHU2ZTU4XHU0ZTYx'@;
put 'XHU3ZmQ0XHU3OTY1XHU4YmU2XHU2MGYzXHU1NGNkXHU0ZWFiXHU5ODc5XHU1ZGY3XHU2YTYxXHU1MGNmXHU1NDExXHU4YzYxXHU4NDI3XHU3ODVkXHU5NzA0XHU1MjRhXHU1NGVlXHU1NmEzXHU5NTAwXHU2ZDg4XHU1YmI1XHU2ZGM2XHU2NjUzXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtb'@;
put 'MjA3XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMDddW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIwN11bdl1dPTUyOTkyK3YsVFs1Mjk5Mit2XT1rWzIwN11bdl0pO2ZvcihrWzIwOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODgy'@;
put 'NFx1ODgyNVx1ODgyNlx1ODgyN1x1ODgyOFx1ODgyOVx1ODgyYVx1ODgyYlx1ODgyY1x1ODgyZFx1ODgyZVx1ODgyZlx1ODgzMFx1ODgzMVx1ODgzM1x1ODgzNFx1ODgzNVx1ODgzNlx1ODgzN1x1ODgzOFx1ODgzYVx1ODgzYlx1ODgzZFx1ODgzZVx1ODgzZlx1ODg0MVx1ODg0Mlx1ODg0M1x1'@;
put 'ODg0Nlx1ODg0N1x1ODg0OFx1ODg0OVx1ODg0YVx1ODg0Ylx1ODg0ZVx1ODg0Zlx1ODg1MFx1ODg1MVx1ODg1Mlx1ODg1M1x1ODg1NVx1ODg1Nlx1ODg1OFx1ODg1YVx1ODg1Ylx1ODg1Y1x1ODg1ZFx1ODg1ZVx1ODg1Zlx1ODg2MFx1ODg2Nlx1ODg2N1x1ODg2YVx1ODg2ZFx1ODg2Zlx1ODg3'@;
put 'MVx1ODg3M1x1ODg3NFx1ODg3NVx1ODg3Nlx1ODg3OFx1ODg3OVx1ODg3YVx1ZmZmZFx1ODg3Ylx1ODg3Y1x1ODg4MFx1ODg4M1x1ODg4Nlx1ODg4N1x1ODg4OVx1ODg4YVx1ODg4Y1x1ODg4ZVx1ODg4Zlx1ODg5MFx1ODg5MVx1ODg5M1x1ODg5NFx1ODg5NVx1ODg5N1x1ODg5OFx1ODg5OVx1'@;
put 'ODg5YVx1ODg5Ylx1ODg5ZFx1ODg5ZVx1ODg5Zlx1ODhhMFx1ODhhMVx1ODhhM1x1ODhhNVx1ODhhNlx1ODhhN1x1ODhhOFx1ODhhOVx1ODhhYVx1NWMwZlx1NWI1ZFx1NjgyMVx1ODA5Nlx1NTU3OFx1N2IxMVx1NjU0OFx1Njk1NFx1NGU5Ylx1NmI0N1x1ODc0ZVx1OTc4Ylx1NTM0Zlx1NjMx'@;
put 'Zlx1NjQzYVx1OTBhYVx1NjU5Y1x1ODBjMVx1OGMxMFx1NTE5OVx1NjhiMFx1NTM3OFx1ODdmOVx1NjFjOFx1NmNjNFx1NmNmYlx1OGMyMlx1NWM1MVx1ODVhYVx1ODJhZlx1OTUwY1x1NmIyM1x1OGY5Ylx1NjViMFx1NWZmYlx1NWZjM1x1NGZlMVx1ODg0NVx1NjYxZlx1ODE2NVx1NzMyOVx1'@;
put 'NjBmYVx1NTE3NFx1NTIxMVx1NTc4Ylx1NWY2Mlx1OTBhMlx1ODg0Y1x1OTE5Mlx1NWU3OFx1Njc0Zlx1NjAyN1x1NTlkM1x1NTE0NFx1NTFmNlx1ODBmOFx1NTMwOFx1NmM3OVx1OTZjNFx1NzE4YVx1NGYxMVx1NGZlZVx1N2Y5ZVx1NjczZFx1NTVjNVx1OTUwOFx1NzljMFx1ODg5Nlx1N2Vl'@;
put 'M1x1NTg5Zlx1NjIwY1x1OTcwMFx1ODY1YVx1NTYxOFx1OTg3Ylx1NWY5MFx1OGJiOFx1ODRjNFx1OTE1N1x1NTNkOVx1NjVlZFx1NWU4Zlx1NzU1Y1x1NjA2NFx1N2Q2ZVx1NWE3Zlx1N2VlYVx1N2VlZFx1OGY2OVx1NTVhN1x1NWJhM1x1NjBhY1x1NjVjYlx1NzM4NFx1ZmZmZCIuc3BsaXQo'@;
put 'IiIpLHY9MDt2IT1rWzIwOF0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjA4XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMDhdW3ZdXT01MzI0OCt2LFRbNTMyNDgrdl09a1syMDhdW3ZdKTtmb3Ioa1syMDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdTg4YWNcdTg4YWVcdTg4YWZcdTg4YjBcdTg4YjJcdTg4YjNcdTg4YjRcdTg4YjVcdTg4YjZcdTg4YjhcdTg4YjlcdTg4YmFcdTg4YmJcdTg4YmRcdTg4YmVcdTg4YmZcdTg4YzBcdTg4YzNcdTg4YzRcdTg4YzdcdTg4YzhcdTg4Y2FcdTg4Y2JcdTg4Y2NcdTg4Y2RcdTg4Y2Zc'@;
put 'dTg4ZDBcdTg4ZDFcdTg4ZDNcdTg4ZDZcdTg4ZDdcdTg4ZGFcdTg4ZGJcdTg4ZGNcdTg4ZGRcdTg4ZGVcdTg4ZTBcdTg4ZTFcdTg4ZTZcdTg4ZTdcdTg4ZTlcdTg4ZWFcdTg4ZWJcdTg4ZWNcdTg4ZWRcdTg4ZWVcdTg4ZWZcdTg4ZjJcdTg4ZjVcdTg4ZjZcdTg4ZjdcdTg4ZmFcdTg4ZmJcdTg4'@;
put 'ZmRcdTg4ZmZcdTg5MDBcdTg5MDFcdTg5MDNcdTg5MDRcdTg5MDVcdTg5MDZcdTg5MDdcdTg5MDhcdWZmZmRcdTg5MDlcdTg5MGJcdTg5MGNcdTg5MGRcdTg5MGVcdTg5MGZcdTg5MTFcdTg5MTRcdTg5MTVcdTg5MTZcdTg5MTdcdTg5MThcdTg5MWNcdTg5MWRcdTg5MWVcdTg5MWZcdTg5MjBc'@;
put 'dTg5MjJcdTg5MjNcdTg5MjRcdTg5MjZcdTg5MjdcdTg5MjhcdTg5MjlcdTg5MmNcdTg5MmRcdTg5MmVcdTg5MmZcdTg5MzFcdTg5MzJcdTg5MzNcdTg5MzVcdTg5MzdcdTkwMDlcdTc2NjNcdTc3MjlcdTdlZGFcdTk3NzRcdTg1OWJcdTViNjZcdTdhNzRcdTk2ZWFcdTg4NDBcdTUyY2JcdTcx'@;
put 'OGZcdTVmYWFcdTY1ZWNcdThiZTJcdTViZmJcdTlhNmZcdTVkZTFcdTZiODlcdTZjNWJcdThiYWRcdThiYWZcdTkwMGFcdThmYzVcdTUzOGJcdTYyYmNcdTllMjZcdTllMmRcdTU0NDBcdTRlMmJcdTgyYmRcdTcyNTlcdTg2OWNcdTVkMTZcdTg4NTlcdTZkYWZcdTk2YzVcdTU0ZDFcdTRlOWFc'@;
put 'dThiYjZcdTcxMDlcdTU0YmRcdTk2MDlcdTcwZGZcdTZkZjlcdTc2ZDBcdTRlMjVcdTc4MTRcdTg3MTJcdTVjYTlcdTVlZjZcdThhMDBcdTk4OWNcdTk2MGVcdTcwOGVcdTZjYmZcdTU5NDRcdTYzYTlcdTc3M2NcdTg4NGRcdTZmMTRcdTgyNzNcdTU4MzBcdTcxZDVcdTUzOGNcdTc4MWFcdTk2'@;
put 'YzFcdTU1MDFcdTVmNjZcdTcxMzBcdTViYjRcdThjMWFcdTlhOGNcdTZiODNcdTU5MmVcdTllMmZcdTc5ZTdcdTY3NjhcdTYyNmNcdTRmNmZcdTc1YTFcdTdmOGFcdTZkMGJcdTk2MzNcdTZjMjdcdTRlZjBcdTc1ZDJcdTUxN2JcdTY4MzdcdTZmM2VcdTkwODBcdTgxNzBcdTU5OTZcdTc0NzZc'@;
put 'dWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMDldLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIwOV1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjA5XVt2XV09NTM1MDQrdixUWzUzNTA0K3ZdPWtbMjA5XVt2XSk7Zm9yKGtbMjEwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OTM4XHU4OTM5XHU4OTNhXHU4OTNiXHU4OTNjXHU4OTNkXHU4OTNlXHU4OTNmXHU4OTQwXHU4OTQyXHU4OTQzXHU4OTQ1XHU4OTQ2XHU4OTQ3XHU4OTQ4XHU4OTQ5XHU4OTRhXHU4OTRiXHU4OTRjXHU4OTRkXHU4OTRlXHU4OTRmXHU4OTUwXHU4OTUx'@;
put 'XHU4OTUyXHU4OTUzXHU4OTU0XHU4OTU1XHU4OTU2XHU4OTU3XHU4OTU4XHU4OTU5XHU4OTVhXHU4OTViXHU4OTVjXHU4OTVkXHU4OTYwXHU4OTYxXHU4OTYyXHU4OTYzXHU4OTY0XHU4OTY1XHU4OTY3XHU4OTY4XHU4OTY5XHU4OTZhXHU4OTZiXHU4OTZjXHU4OTZkXHU4OTZlXHU4OTZmXHU4'@;
put 'OTcwXHU4OTcxXHU4OTcyXHU4OTczXHU4OTc0XHU4OTc1XHU4OTc2XHU4OTc3XHU4OTc4XHU4OTc5XHU4OTdhXHU4OTdjXHVmZmZkXHU4OTdkXHU4OTdlXHU4OTgwXHU4OTgyXHU4OTg0XHU4OTg1XHU4OTg3XHU4OTg4XHU4OTg5XHU4OThhXHU4OThiXHU4OThjXHU4OThkXHU4OThlXHU4OThm'@;
put 'XHU4OTkwXHU4OTkxXHU4OTkyXHU4OTkzXHU4OTk0XHU4OTk1XHU4OTk2XHU4OTk3XHU4OTk4XHU4OTk5XHU4OTlhXHU4OTliXHU4OTljXHU4OTlkXHU4OTllXHU4OTlmXHU4OWEwXHU4OWExXHU2NDQ3XHU1YzI3XHU5MDY1XHU3YTkxXHU4YzIzXHU1OWRhXHU1NGFjXHU4MjAwXHU4MzZmXHU4'@;
put 'OTgxXHU4MDAwXHU2OTMwXHU1NjRlXHU4MDM2XHU3MjM3XHU5MWNlXHU1MWI2XHU0ZTVmXHU5ODc1XHU2Mzk2XHU0ZTFhXHU1M2Y2XHU2NmYzXHU4MTRiXHU1OTFjXHU2ZGIyXHU0ZTAwXHU1OGY5XHU1MzNiXHU2M2Q2XHU5NGYxXHU0ZjlkXHU0ZjBhXHU4ODYzXHU5ODkwXHU1OTM3XHU5MDU3'@;
put 'XHU3OWZiXHU0ZWVhXHU4MGYwXHU3NTkxXHU2YzgyXHU1YjljXHU1OWU4XHU1ZjVkXHU2OTA1XHU4NjgxXHU1MDFhXHU1ZGYyXHU0ZTU5XHU3N2UzXHU0ZWU1XHU4MjdhXHU2MjkxXHU2NjEzXHU5MDkxXHU1Yzc5XHU0ZWJmXHU1Zjc5XHU4MWM2XHU5MDM4XHU4MDg0XHU3NWFiXHU0ZWE2XHU4'@;
put 'OGQ0XHU2MTBmXHU2YmM1XHU1ZmM2XHU0ZTQ5XHU3NmNhXHU2ZWEyXHU4YmUzXHU4YmFlXHU4YzBhXHU4YmQxXHU1ZjAyXHU3ZmZjXHU3ZmNjXHU3ZWNlXHU4MzM1XHU4MzZiXHU1NmUwXHU2YmI3XHU5N2YzXHU5NjM0XHU1OWZiXHU1NDFmXHU5NGY2XHU2ZGViXHU1YmM1XHU5OTZlXHU1YzM5'@;
put 'XHU1ZjE1XHU5NjkwXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjEwXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMTBdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIxMF1bdl1dPTUzNzYwK3YsVFs1Mzc2MCt2XT1rWzIxMF1bdl0pO2ZvcihrWzIxMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODlhMlx1ODlhM1x1ODlhNFx1ODlhNVx1ODlhNlx1ODlhN1x1ODlhOFx1ODlhOVx1ODlhYVx1ODlhYlx1ODlhY1x1ODlhZFx1ODlhZVx1ODlhZlx1ODliMFx1ODliMVx1ODliMlx1ODliM1x1ODliNFx1ODliNVx1ODliNlx1ODli'@;
put 'N1x1ODliOFx1ODliOVx1ODliYVx1ODliYlx1ODliY1x1ODliZFx1ODliZVx1ODliZlx1ODljMFx1ODljM1x1ODljZFx1ODlkM1x1ODlkNFx1ODlkNVx1ODlkN1x1ODlkOFx1ODlkOVx1ODlkYlx1ODlkZFx1ODlkZlx1ODllMFx1ODllMVx1ODllMlx1ODllNFx1ODllN1x1ODllOFx1ODllOVx1'@;
put 'ODllYVx1ODllY1x1ODllZFx1ODllZVx1ODlmMFx1ODlmMVx1ODlmMlx1ODlmNFx1ODlmNVx1ODlmNlx1ODlmN1x1ODlmOFx1ODlmOVx1ODlmYVx1ZmZmZFx1ODlmYlx1ODlmY1x1ODlmZFx1ODlmZVx1ODlmZlx1OGEwMVx1OGEwMlx1OGEwM1x1OGEwNFx1OGEwNVx1OGEwNlx1OGEwOFx1OGEw'@;
put 'OVx1OGEwYVx1OGEwYlx1OGEwY1x1OGEwZFx1OGEwZVx1OGEwZlx1OGExMFx1OGExMVx1OGExMlx1OGExM1x1OGExNFx1OGExNVx1OGExNlx1OGExN1x1OGExOFx1OGExOVx1OGExYVx1OGExYlx1OGExY1x1OGExZFx1NTM3MFx1ODJmMVx1NmEzMVx1NWE3NFx1OWU3MFx1NWU5NFx1N2YyOFx1'@;
put 'ODNiOVx1ODQyNFx1ODQyNVx1ODM2N1x1ODc0N1x1OGZjZVx1OGQ2Mlx1NzZjOFx1NWY3MVx1OTg5Nlx1Nzg2Y1x1NjYyMFx1NTRkZlx1NjJlNVx1NGY2M1x1ODFjM1x1NzVjOFx1NWViOFx1OTZjZFx1OGUwYVx1ODZmOVx1NTQ4Zlx1NmNmM1x1NmQ4Y1x1NmMzOFx1NjA3Zlx1NTJjN1x1NzUy'@;
put 'OFx1NWU3ZFx1NGYxOFx1NjBhMFx1NWZlN1x1NWMyNFx1NzUzMVx1OTBhZVx1OTRjMFx1NzJiOVx1NmNiOVx1NmUzOFx1OTE0OVx1NjcwOVx1NTNjYlx1NTNmM1x1NGY1MVx1OTFjOVx1OGJmMVx1NTNjOFx1NWU3Y1x1OGZjMlx1NmRlNFx1NGU4ZVx1NzZjMlx1Njk4Nlx1ODY1ZVx1NjExYVx1'@;
put 'ODIwNlx1NGY1OVx1NGZkZVx1OTAzZVx1OWM3Y1x1NjEwOVx1NmUxZFx1NmUxNFx1OTY4NVx1NGU4OFx1NWEzMVx1OTZlOFx1NGUwZVx1NWM3Zlx1NzliOVx1NWI4N1x1OGJlZFx1N2ZiZFx1NzM4OVx1NTdkZlx1ODI4Ylx1OTBjMVx1NTQwMVx1OTA0N1x1NTViYlx1NWNlYVx1NWZhMVx1NjEw'@;
put 'OFx1NmIzMlx1NzJmMVx1ODBiMlx1OGE4OVx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIxMV0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjExXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMTFdW3ZdXT01NDAxNit2LFRbNTQwMTYrdl09a1syMTFdW3ZdKTtmb3Ioa1syMTJdPSJcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThhMWVcdThhMWZcdThhMjBcdThhMjFcdThhMjJcdThhMjNcdThhMjRcdThhMjVcdThhMjZcdThhMjdcdThhMjhcdThhMjlcdThhMmFcdThhMmJcdThhMmNcdThhMmRcdThhMmVcdThhMmZcdThhMzBcdThh'@;
put 'MzFcdThhMzJcdThhMzNcdThhMzRcdThhMzVcdThhMzZcdThhMzdcdThhMzhcdThhMzlcdThhM2FcdThhM2JcdThhM2NcdThhM2RcdThhM2ZcdThhNDBcdThhNDFcdThhNDJcdThhNDNcdThhNDRcdThhNDVcdThhNDZcdThhNDdcdThhNDlcdThhNGFcdThhNGJcdThhNGNcdThhNGRcdThhNGVc'@;
put 'dThhNGZcdThhNTBcdThhNTFcdThhNTJcdThhNTNcdThhNTRcdThhNTVcdThhNTZcdThhNTdcdThhNThcdThhNTlcdThhNWFcdThhNWJcdThhNWNcdThhNWRcdThhNWVcdWZmZmRcdThhNWZcdThhNjBcdThhNjFcdThhNjJcdThhNjNcdThhNjRcdThhNjVcdThhNjZcdThhNjdcdThhNjhcdThh'@;
put 'NjlcdThhNmFcdThhNmJcdThhNmNcdThhNmRcdThhNmVcdThhNmZcdThhNzBcdThhNzFcdThhNzJcdThhNzNcdThhNzRcdThhNzVcdThhNzZcdThhNzdcdThhNzhcdThhN2FcdThhN2JcdThhN2NcdThhN2RcdThhN2VcdThhN2ZcdThhODBcdTZkNzRcdTViZDNcdTg4ZDVcdTk4ODRcdThjNmJc'@;
put 'dTlhNmRcdTllMzNcdTZlMGFcdTUxYTRcdTUxNDNcdTU3YTNcdTg4ODFcdTUzOWZcdTYzZjRcdThmOTVcdTU2ZWRcdTU0NThcdTU3MDZcdTczM2ZcdTZlOTBcdTdmMThcdThmZGNcdTgyZDFcdTYxM2ZcdTYwMjhcdTk2NjJcdTY2ZjBcdTdlYTZcdThkOGFcdThkYzNcdTk0YTVcdTVjYjNcdTdj'@;
put 'YTRcdTY3MDhcdTYwYTZcdTk2MDVcdTgwMThcdTRlOTFcdTkwZTdcdTUzMDBcdTk2NjhcdTUxNDFcdThmZDBcdTg1NzRcdTkxNWRcdTY2NTVcdTk3ZjVcdTViNTVcdTUzMWRcdTc4MzhcdTY3NDJcdTY4M2RcdTU0YzlcdTcwN2VcdTViYjBcdThmN2RcdTUxOGRcdTU3MjhcdTU0YjFcdTY1MTJc'@;
put 'dTY2ODJcdThkNWVcdThkNDNcdTgxMGZcdTg0NmNcdTkwNmRcdTdjZGZcdTUxZmZcdTg1ZmJcdTY3YTNcdTY1ZTlcdTZmYTFcdTg2YTRcdThlODFcdTU2NmFcdTkwMjBcdTc2ODJcdTcwNzZcdTcxZTVcdThkMjNcdTYyZTlcdTUyMTlcdTZjZmRcdThkM2NcdTYwMGVcdTU4OWVcdTYxOGVcdTY2'@;
put 'ZmVcdThkNjBcdTYyNGVcdTU1YjNcdTZlMjNcdTY3MmRcdThmNjdcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMTJdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIxMl1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjEyXVt2XV09NTQyNzIrdixUWzU0MjcyK3ZdPWtbMjEyXVt2XSk7Zm9yKGtb'@;
put 'MjEzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YTgxXHU4YTgyXHU4YTgzXHU4YTg0XHU4YTg1XHU4YTg2XHU4YTg3XHU4YTg4XHU4YThiXHU4YThjXHU4YThkXHU4YThlXHU4YThmXHU4YTkwXHU4YTkxXHU4YTkyXHU4YTk0XHU4'@;
put 'YTk1XHU4YTk2XHU4YTk3XHU4YTk4XHU4YTk5XHU4YTlhXHU4YTliXHU4YTljXHU4YTlkXHU4YTllXHU4YTlmXHU4YWEwXHU4YWExXHU4YWEyXHU4YWEzXHU4YWE0XHU4YWE1XHU4YWE2XHU4YWE3XHU4YWE4XHU4YWE5XHU4YWFhXHU4YWFiXHU4YWFjXHU4YWFkXHU4YWFlXHU4YWFmXHU4YWIw'@;
put 'XHU4YWIxXHU4YWIyXHU4YWIzXHU4YWI0XHU4YWI1XHU4YWI2XHU4YWI3XHU4YWI4XHU4YWI5XHU4YWJhXHU4YWJiXHU4YWJjXHU4YWJkXHU4YWJlXHU4YWJmXHU4YWMwXHU4YWMxXHU4YWMyXHVmZmZkXHU4YWMzXHU4YWM0XHU4YWM1XHU4YWM2XHU4YWM3XHU4YWM4XHU4YWM5XHU4YWNhXHU4'@;
put 'YWNiXHU4YWNjXHU4YWNkXHU4YWNlXHU4YWNmXHU4YWQwXHU4YWQxXHU4YWQyXHU4YWQzXHU4YWQ0XHU4YWQ1XHU4YWQ2XHU4YWQ3XHU4YWQ4XHU4YWQ5XHU4YWRhXHU4YWRiXHU4YWRjXHU4YWRkXHU4YWRlXHU4YWRmXHU4YWUwXHU4YWUxXHU4YWUyXHU4YWUzXHU5NGUxXHU5NWY4XHU3NzI4'@;
put 'XHU2ODA1XHU2OWE4XHU1NDhiXHU0ZTRkXHU3MGI4XHU4YmM4XHU2NDU4XHU2NThiXHU1Yjg1XHU3YTg0XHU1MDNhXHU1YmU4XHU3N2JiXHU2YmUxXHU4YTc5XHU3Yzk4XHU2Y2JlXHU3NmNmXHU2NWE5XHU4Zjk3XHU1ZDJkXHU1YzU1XHU4NjM4XHU2ODA4XHU1MzYwXHU2MjE4XHU3YWQ5XHU2'@;
put 'ZTViXHU3ZWZkXHU2YTFmXHU3YWUwXHU1ZjcwXHU2ZjMzXHU1ZjIwXHU2MzhjXHU2ZGE4XHU2NzU2XHU0ZTA4XHU1ZTEwXHU4ZDI2XHU0ZWQ3XHU4MGMwXHU3NjM0XHU5NjljXHU2MmRiXHU2NjJkXHU2MjdlXHU2Y2JjXHU4ZDc1XHU3MTY3XHU3ZjY5XHU1MTQ2XHU4MDg3XHU1M2VjXHU5MDZl'@;
put 'XHU2Mjk4XHU1NGYyXHU4NmYwXHU4Zjk5XHU4MDA1XHU5NTE3XHU4NTE3XHU4ZmQ5XHU2ZDU5XHU3M2NkXHU2NTlmXHU3NzFmXHU3NTA0XHU3ODI3XHU4MWZiXHU4ZDFlXHU5NDg4XHU0ZmE2XHU2Nzk1XHU3NWI5XHU4YmNhXHU5NzA3XHU2MzJmXHU5NTQ3XHU5NjM1XHU4NGI4XHU2MzIzXHU3'@;
put 'NzQxXHU1ZjgxXHU3MmYwXHU0ZTg5XHU2MDE0XHU2NTc0XHU2MmVmXHU2YjYzXHU2NTNmXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjEzXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMTNdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIxM11bdl1dPTU0NTI4K3YsVFs1NDUyOCt2XT1rWzIx'@;
put 'M11bdl0pO2ZvcihrWzIxNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGFlNFx1OGFlNVx1OGFlNlx1OGFlN1x1OGFlOFx1OGFlOVx1OGFlYVx1OGFlYlx1OGFlY1x1OGFlZFx1OGFlZVx1OGFlZlx1OGFmMFx1OGFmMVx1OGFmMlx1'@;
put 'OGFmM1x1OGFmNFx1OGFmNVx1OGFmNlx1OGFmN1x1OGFmOFx1OGFmOVx1OGFmYVx1OGFmYlx1OGFmY1x1OGFmZFx1OGFmZVx1OGFmZlx1OGIwMFx1OGIwMVx1OGIwMlx1OGIwM1x1OGIwNFx1OGIwNVx1OGIwNlx1OGIwOFx1OGIwOVx1OGIwYVx1OGIwYlx1OGIwY1x1OGIwZFx1OGIwZVx1OGIw'@;
put 'Zlx1OGIxMFx1OGIxMVx1OGIxMlx1OGIxM1x1OGIxNFx1OGIxNVx1OGIxNlx1OGIxN1x1OGIxOFx1OGIxOVx1OGIxYVx1OGIxYlx1OGIxY1x1OGIxZFx1OGIxZVx1OGIxZlx1OGIyMFx1OGIyMVx1OGIyMlx1OGIyM1x1ZmZmZFx1OGIyNFx1OGIyNVx1OGIyN1x1OGIyOFx1OGIyOVx1OGIyYVx1'@;
put 'OGIyYlx1OGIyY1x1OGIyZFx1OGIyZVx1OGIyZlx1OGIzMFx1OGIzMVx1OGIzMlx1OGIzM1x1OGIzNFx1OGIzNVx1OGIzNlx1OGIzN1x1OGIzOFx1OGIzOVx1OGIzYVx1OGIzYlx1OGIzY1x1OGIzZFx1OGIzZVx1OGIzZlx1OGI0MFx1OGI0MVx1OGI0Mlx1OGI0M1x1OGI0NFx1OGI0NVx1NWUy'@;
put 'N1x1NzVjN1x1OTBkMVx1OGJjMVx1ODI5ZFx1Njc5ZFx1NjUyZlx1NTQzMVx1ODcxOFx1NzdlNVx1ODBhMlx1ODEwMlx1NmM0MVx1NGU0Ylx1N2VjN1x1ODA0Y1x1NzZmNFx1NjkwZFx1NmI5Nlx1NjI2N1x1NTAzY1x1NGY4NFx1NTc0MFx1NjMwN1x1NmI2Mlx1OGRiZVx1NTNlYVx1NjVlOFx1'@;
put 'N2ViOFx1NWZkN1x1NjMxYVx1NjNiN1x1ODFmM1x1ODFmNFx1N2Y2ZVx1NWUxY1x1NWNkOVx1NTIzNlx1NjY3YVx1NzllOVx1N2ExYVx1OGQyOFx1NzA5OVx1NzVkNFx1NmVkZVx1NmNiYlx1N2E5Mlx1NGUyZFx1NzZjNVx1NWZlMFx1OTQ5Zlx1ODg3N1x1N2VjOFx1NzljZFx1ODBiZlx1OTFj'@;
put 'ZFx1NGVmMlx1NGYxN1x1ODIxZlx1NTQ2OFx1NWRkZVx1NmQzMlx1OGJjY1x1N2NhNVx1OGY3NFx1ODA5OFx1NWUxYVx1NTQ5Mlx1NzZiMVx1NWI5OVx1NjYzY1x1OWFhNFx1NzNlMFx1NjgyYVx1ODZkYlx1NjczMVx1NzMyYVx1OGJmOFx1OGJkYlx1OTAxMFx1N2FmOVx1NzBkYlx1NzE2ZVx1'@;
put 'NjJjNFx1NzdhOVx1NTYzMVx1NGUzYlx1ODQ1N1x1NjdmMVx1NTJhOVx1ODZjMFx1OGQyZVx1OTRmOFx1N2I1MVx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIxNF0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjE0XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMTRdW3ZdXT01NDc4NCt2LFRb'@;
put 'NTQ3ODQrdl09a1syMTRdW3ZdKTtmb3Ioa1syMTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThiNDZcdThiNDdcdThiNDhcdThiNDlcdThiNGFcdThiNGJcdThiNGNcdThiNGRcdThiNGVcdThiNGZcdThiNTBcdThiNTFcdThiNTJc'@;
put 'dThiNTNcdThiNTRcdThiNTVcdThiNTZcdThiNTdcdThiNThcdThiNTlcdThiNWFcdThiNWJcdThiNWNcdThiNWRcdThiNWVcdThiNWZcdThiNjBcdThiNjFcdThiNjJcdThiNjNcdThiNjRcdThiNjVcdThiNjdcdThiNjhcdThiNjlcdThiNmFcdThiNmJcdThiNmRcdThiNmVcdThiNmZcdThi'@;
put 'NzBcdThiNzFcdThiNzJcdThiNzNcdThiNzRcdThiNzVcdThiNzZcdThiNzdcdThiNzhcdThiNzlcdThiN2FcdThiN2JcdThiN2NcdThiN2RcdThiN2VcdThiN2ZcdThiODBcdThiODFcdThiODJcdThiODNcdThiODRcdThiODVcdThiODZcdWZmZmRcdThiODdcdThiODhcdThiODlcdThiOGFc'@;
put 'dThiOGJcdThiOGNcdThiOGRcdThiOGVcdThiOGZcdThiOTBcdThiOTFcdThiOTJcdThiOTNcdThiOTRcdThiOTVcdThiOTZcdThiOTdcdThiOThcdThiOTlcdThiOWFcdThiOWJcdThiOWNcdThiOWRcdThiOWVcdThiOWZcdThiYWNcdThiYjFcdThiYmJcdThiYzdcdThiZDBcdThiZWFcdThj'@;
put 'MDlcdThjMWVcdTRmNGZcdTZjZThcdTc5NWRcdTlhN2JcdTYyOTNcdTcyMmFcdTYyZmRcdTRlMTNcdTc4MTZcdThmNmNcdTY0YjBcdThkNWFcdTdiYzZcdTY4NjlcdTVlODRcdTg4YzVcdTU5ODZcdTY0OWVcdTU4ZWVcdTcyYjZcdTY5MGVcdTk1MjVcdThmZmRcdThkNThcdTU3NjBcdTdmMDBc'@;
put 'dThjMDZcdTUxYzZcdTYzNDlcdTYyZDlcdTUzNTNcdTY4NGNcdTc0MjJcdTgzMDFcdTkxNGNcdTU1NDRcdTc3NDBcdTcwN2NcdTZkNGFcdTUxNzlcdTU0YThcdThkNDRcdTU5ZmZcdTZlY2JcdTZkYzRcdTViNWNcdTdkMmJcdTRlZDRcdTdjN2RcdTZlZDNcdTViNTBcdTgxZWFcdTZlMGRcdTVi'@;
put 'NTdcdTliMDNcdTY4ZDVcdThlMmFcdTViOTdcdTdlZmNcdTYwM2JcdTdlYjVcdTkwYjlcdThkNzBcdTU5NGZcdTYzY2RcdTc5ZGZcdThkYjNcdTUzNTJcdTY1Y2ZcdTc5NTZcdThiYzVcdTk2M2JcdTdlYzRcdTk0YmJcdTdlODJcdTU2MzRcdTkxODlcdTY3MDBcdTdmNmFcdTVjMGFcdTkwNzVc'@;
put 'dTY2MjhcdTVkZTZcdTRmNTBcdTY3ZGVcdTUwNWFcdTRmNWNcdTU3NTBcdTVlYTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMTVdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIxNV1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjE1XVt2'@;
put 'XV09NTUwNDArdixUWzU1MDQwK3ZdPWtbMjE1XVt2XSk7Zm9yKGtbMjE2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YzM4XHU4YzM5XHU4YzNhXHU4YzNiXHU4YzNjXHU4YzNkXHU4YzNlXHU4YzNmXHU4YzQwXHU4YzQyXHU4YzQz'@;
put 'XHU4YzQ0XHU4YzQ1XHU4YzQ4XHU4YzRhXHU4YzRiXHU4YzRkXHU4YzRlXHU4YzRmXHU4YzUwXHU4YzUxXHU4YzUyXHU4YzUzXHU4YzU0XHU4YzU2XHU4YzU3XHU4YzU4XHU4YzU5XHU4YzViXHU4YzVjXHU4YzVkXHU4YzVlXHU4YzVmXHU4YzYwXHU4YzYzXHU4YzY0XHU4YzY1XHU4YzY2XHU4'@;
put 'YzY3XHU4YzY4XHU4YzY5XHU4YzZjXHU4YzZkXHU4YzZlXHU4YzZmXHU4YzcwXHU4YzcxXHU4YzcyXHU4Yzc0XHU4Yzc1XHU4Yzc2XHU4Yzc3XHU4YzdiXHU4YzdjXHU4YzdkXHU4YzdlXHU4YzdmXHU4YzgwXHU4YzgxXHU4YzgzXHU4Yzg0XHU4Yzg2XHU4Yzg3XHVmZmZkXHU4Yzg4XHU4Yzhi'@;
put 'XHU4YzhkXHU4YzhlXHU4YzhmXHU4YzkwXHU4YzkxXHU4YzkyXHU4YzkzXHU4Yzk1XHU4Yzk2XHU4Yzk3XHU4Yzk5XHU4YzlhXHU4YzliXHU4YzljXHU4YzlkXHU4YzllXHU4YzlmXHU4Y2EwXHU4Y2ExXHU4Y2EyXHU4Y2EzXHU4Y2E0XHU4Y2E1XHU4Y2E2XHU4Y2E3XHU4Y2E4XHU4Y2E5XHU4'@;
put 'Y2FhXHU4Y2FiXHU4Y2FjXHU4Y2FkXHU0ZThkXHU0ZTBjXHU1MTQwXHU0ZTEwXHU1ZWZmXHU1MzQ1XHU0ZTE1XHU0ZTk4XHU0ZTFlXHU5YjMyXHU1YjZjXHU1NjY5XHU0ZTI4XHU3OWJhXHU0ZTNmXHU1MzE1XHU0ZTQ3XHU1OTJkXHU3MjNiXHU1MzZlXHU2YzEwXHU1NmRmXHU4MGU0XHU5OTk3'@;
put 'XHU2YmQzXHU3NzdlXHU5ZjE3XHU0ZTM2XHU0ZTlmXHU5ZjEwXHU0ZTVjXHU0ZTY5XHU0ZTkzXHU4Mjg4XHU1YjViXHU1NTZjXHU1NjBmXHU0ZWM0XHU1MzhkXHU1MzlkXHU1M2EzXHU1M2E1XHU1M2FlXHU5NzY1XHU4ZDVkXHU1MzFhXHU1M2Y1XHU1MzI2XHU1MzJlXHU1MzNlXHU4ZDVjXHU1'@;
put 'MzY2XHU1MzYzXHU1MjAyXHU1MjA4XHU1MjBlXHU1MjJkXHU1MjMzXHU1MjNmXHU1MjQwXHU1MjRjXHU1MjVlXHU1MjYxXHU1MjVjXHU4NGFmXHU1MjdkXHU1MjgyXHU1MjgxXHU1MjkwXHU1MjkzXHU1MTgyXHU3ZjU0XHU0ZWJiXHU0ZWMzXHU0ZWM5XHU0ZWMyXHU0ZWU4XHU0ZWUxXHU0ZWVi'@;
put 'XHU0ZWRlXHU0ZjFiXHU0ZWYzXHU0ZjIyXHU0ZjY0XHU0ZWY1XHU0ZjI1XHU0ZjI3XHU0ZjA5XHU0ZjJiXHU0ZjVlXHU0ZjY3XHU2NTM4XHU0ZjVhXHU0ZjVkXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjE2XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMTZdW3ZdLmNoYXJDb2RlQXQoMCkm'@;
put 'JihzZVtrWzIxNl1bdl1dPTU1Mjk2K3YsVFs1NTI5Nit2XT1rWzIxNl1bdl0pO2ZvcihrWzIxN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGNhZVx1OGNhZlx1OGNiMFx1OGNiMVx1OGNiMlx1OGNiM1x1OGNiNFx1OGNiNVx1OGNi'@;
put 'Nlx1OGNiN1x1OGNiOFx1OGNiOVx1OGNiYVx1OGNiYlx1OGNiY1x1OGNiZFx1OGNiZVx1OGNiZlx1OGNjMFx1OGNjMVx1OGNjMlx1OGNjM1x1OGNjNFx1OGNjNVx1OGNjNlx1OGNjN1x1OGNjOFx1OGNjOVx1OGNjYVx1OGNjYlx1OGNjY1x1OGNjZFx1OGNjZVx1OGNjZlx1OGNkMFx1OGNkMVx1'@;
put 'OGNkMlx1OGNkM1x1OGNkNFx1OGNkNVx1OGNkNlx1OGNkN1x1OGNkOFx1OGNkOVx1OGNkYVx1OGNkYlx1OGNkY1x1OGNkZFx1OGNkZVx1OGNkZlx1OGNlMFx1OGNlMVx1OGNlMlx1OGNlM1x1OGNlNFx1OGNlNVx1OGNlNlx1OGNlN1x1OGNlOFx1OGNlOVx1OGNlYVx1OGNlYlx1OGNlY1x1ZmZm'@;
put 'ZFx1OGNlZFx1OGNlZVx1OGNlZlx1OGNmMFx1OGNmMVx1OGNmMlx1OGNmM1x1OGNmNFx1OGNmNVx1OGNmNlx1OGNmN1x1OGNmOFx1OGNmOVx1OGNmYVx1OGNmYlx1OGNmY1x1OGNmZFx1OGNmZVx1OGNmZlx1OGQwMFx1OGQwMVx1OGQwMlx1OGQwM1x1OGQwNFx1OGQwNVx1OGQwNlx1OGQwN1x1'@;
put 'OGQwOFx1OGQwOVx1OGQwYVx1OGQwYlx1OGQwY1x1OGQwZFx1NGY1Zlx1NGY1N1x1NGYzMlx1NGYzZFx1NGY3Nlx1NGY3NFx1NGY5MVx1NGY4OVx1NGY4M1x1NGY4Zlx1NGY3ZVx1NGY3Ylx1NGZhYVx1NGY3Y1x1NGZhY1x1NGY5NFx1NGZlNlx1NGZlOFx1NGZlYVx1NGZjNVx1NGZkYVx1NGZl'@;
put 'M1x1NGZkY1x1NGZkMVx1NGZkZlx1NGZmOFx1NTAyOVx1NTA0Y1x1NGZmM1x1NTAyY1x1NTAwZlx1NTAyZVx1NTAyZFx1NGZmZVx1NTAxY1x1NTAwY1x1NTAyNVx1NTAyOFx1NTA3ZVx1NTA0M1x1NTA1NVx1NTA0OFx1NTA0ZVx1NTA2Y1x1NTA3Ylx1NTBhNVx1NTBhN1x1NTBhOVx1NTBiYVx1'@;
put 'NTBkNlx1NTEwNlx1NTBlZFx1NTBlY1x1NTBlNlx1NTBlZVx1NTEwN1x1NTEwYlx1NGVkZFx1NmMzZFx1NGY1OFx1NGY2NVx1NGZjZVx1OWZhMFx1NmM0Nlx1N2M3NFx1NTE2ZVx1NWRmZFx1OWVjOVx1OTk5OFx1NTE4MVx1NTkxNFx1NTJmOVx1NTMwZFx1OGEwN1x1NTMxMFx1NTFlYlx1NTkx'@;
put 'OVx1NTE1NVx1NGVhMFx1NTE1Nlx1NGViM1x1ODg2ZVx1ODhhNFx1NGViNVx1ODExNFx1ODhkMlx1Nzk4MFx1NWIzNFx1ODgwM1x1N2ZiOFx1NTFhYlx1NTFiMVx1NTFiZFx1NTFiY1x1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIxN10ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjE3XVt2XS5j'@;
put 'aGFyQ29kZUF0KDApJiYoc2Vba1syMTddW3ZdXT01NTU1Mit2LFRbNTU1NTIrdl09a1syMTddW3ZdKTtmb3Ioa1syMThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThkMGVcdThkMGZcdThkMTBcdThkMTFcdThkMTJcdThkMTNcdThk'@;
put 'MTRcdThkMTVcdThkMTZcdThkMTdcdThkMThcdThkMTlcdThkMWFcdThkMWJcdThkMWNcdThkMjBcdThkNTFcdThkNTJcdThkNTdcdThkNWZcdThkNjVcdThkNjhcdThkNjlcdThkNmFcdThkNmNcdThkNmVcdThkNmZcdThkNzFcdThkNzJcdThkNzhcdThkNzlcdThkN2FcdThkN2JcdThkN2Nc'@;
put 'dThkN2RcdThkN2VcdThkN2ZcdThkODBcdThkODJcdThkODNcdThkODZcdThkODdcdThkODhcdThkODlcdThkOGNcdThkOGRcdThkOGVcdThkOGZcdThkOTBcdThkOTJcdThkOTNcdThkOTVcdThkOTZcdThkOTdcdThkOThcdThkOTlcdThkOWFcdThkOWJcdThkOWNcdThkOWRcdThkOWVcdThk'@;
put 'YTBcdThkYTFcdWZmZmRcdThkYTJcdThkYTRcdThkYTVcdThkYTZcdThkYTdcdThkYThcdThkYTlcdThkYWFcdThkYWJcdThkYWNcdThkYWRcdThkYWVcdThkYWZcdThkYjBcdThkYjJcdThkYjZcdThkYjdcdThkYjlcdThkYmJcdThkYmRcdThkYzBcdThkYzFcdThkYzJcdThkYzVcdThkYzdc'@;
put 'dThkYzhcdThkYzlcdThkY2FcdThkY2RcdThkZDBcdThkZDJcdThkZDNcdThkZDRcdTUxYzdcdTUxOTZcdTUxYTJcdTUxYTVcdThiYTBcdThiYTZcdThiYTdcdThiYWFcdThiYjRcdThiYjVcdThiYjdcdThiYzJcdThiYzNcdThiY2JcdThiY2ZcdThiY2VcdThiZDJcdThiZDNcdThiZDRcdThi'@;
put 'ZDZcdThiZDhcdThiZDlcdThiZGNcdThiZGZcdThiZTBcdThiZTRcdThiZThcdThiZTlcdThiZWVcdThiZjBcdThiZjNcdThiZjZcdThiZjlcdThiZmNcdThiZmZcdThjMDBcdThjMDJcdThjMDRcdThjMDdcdThjMGNcdThjMGZcdThjMTFcdThjMTJcdThjMTRcdThjMTVcdThjMTZcdThjMTlc'@;
put 'dThjMWJcdThjMThcdThjMWRcdThjMWZcdThjMjBcdThjMjFcdThjMjVcdThjMjdcdThjMmFcdThjMmJcdThjMmVcdThjMmZcdThjMzJcdThjMzNcdThjMzVcdThjMzZcdTUzNjlcdTUzN2FcdTk2MWRcdTk2MjJcdTk2MjFcdTk2MzFcdTk2MmFcdTk2M2RcdTk2M2NcdTk2NDJcdTk2NDlcdTk2'@;
put 'NTRcdTk2NWZcdTk2NjdcdTk2NmNcdTk2NzJcdTk2NzRcdTk2ODhcdTk2OGRcdTk2OTdcdTk2YjBcdTkwOTdcdTkwOWJcdTkwOWRcdTkwOTlcdTkwYWNcdTkwYTFcdTkwYjRcdTkwYjNcdTkwYjZcdTkwYmFcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMThdLmxlbmd0aDsrK3YpNjU1MzMh'@;
put 'PT1rWzIxOF1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjE4XVt2XV09NTU4MDgrdixUWzU1ODA4K3ZdPWtbMjE4XVt2XSk7Zm9yKGtbMjE5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZGQ1XHU4ZGQ4XHU4ZGQ5XHU4ZGRjXHU4'@;
put 'ZGUwXHU4ZGUxXHU4ZGUyXHU4ZGU1XHU4ZGU2XHU4ZGU3XHU4ZGU5XHU4ZGVkXHU4ZGVlXHU4ZGYwXHU4ZGYxXHU4ZGYyXHU4ZGY0XHU4ZGY2XHU4ZGZjXHU4ZGZlXHU4ZGZmXHU4ZTAwXHU4ZTAxXHU4ZTAyXHU4ZTAzXHU4ZTA0XHU4ZTA2XHU4ZTA3XHU4ZTA4XHU4ZTBiXHU4ZTBkXHU4ZTBl'@;
put 'XHU4ZTEwXHU4ZTExXHU4ZTEyXHU4ZTEzXHU4ZTE1XHU4ZTE2XHU4ZTE3XHU4ZTE4XHU4ZTE5XHU4ZTFhXHU4ZTFiXHU4ZTFjXHU4ZTIwXHU4ZTIxXHU4ZTI0XHU4ZTI1XHU4ZTI2XHU4ZTI3XHU4ZTI4XHU4ZTJiXHU4ZTJkXHU4ZTMwXHU4ZTMyXHU4ZTMzXHU4ZTM0XHU4ZTM2XHU4ZTM3XHU4'@;
put 'ZTM4XHU4ZTNiXHU4ZTNjXHU4ZTNlXHVmZmZkXHU4ZTNmXHU4ZTQzXHU4ZTQ1XHU4ZTQ2XHU4ZTRjXHU4ZTRkXHU4ZTRlXHU4ZTRmXHU4ZTUwXHU4ZTUzXHU4ZTU0XHU4ZTU1XHU4ZTU2XHU4ZTU3XHU4ZTU4XHU4ZTVhXHU4ZTViXHU4ZTVjXHU4ZTVkXHU4ZTVlXHU4ZTVmXHU4ZTYwXHU4ZTYx'@;
put 'XHU4ZTYyXHU4ZTYzXHU4ZTY0XHU4ZTY1XHU4ZTY3XHU4ZTY4XHU4ZTZhXHU4ZTZiXHU4ZTZlXHU4ZTcxXHU5MGI4XHU5MGIwXHU5MGNmXHU5MGM1XHU5MGJlXHU5MGQwXHU5MGM0XHU5MGM3XHU5MGQzXHU5MGU2XHU5MGUyXHU5MGRjXHU5MGQ3XHU5MGRiXHU5MGViXHU5MGVmXHU5MGZlXHU5'@;
put 'MTA0XHU5MTIyXHU5MTFlXHU5MTIzXHU5MTMxXHU5MTJmXHU5MTM5XHU5MTQzXHU5MTQ2XHU1MjBkXHU1OTQyXHU1MmEyXHU1MmFjXHU1MmFkXHU1MmJlXHU1NGZmXHU1MmQwXHU1MmQ2XHU1MmYwXHU1M2RmXHU3MWVlXHU3N2NkXHU1ZWY0XHU1MWY1XHU1MWZjXHU5YjJmXHU1M2I2XHU1ZjAx'@;
put 'XHU3NTVhXHU1ZGVmXHU1NzRjXHU1N2E5XHU1N2ExXHU1ODdlXHU1OGJjXHU1OGM1XHU1OGQxXHU1NzI5XHU1NzJjXHU1NzJhXHU1NzMzXHU1NzM5XHU1NzJlXHU1NzJmXHU1NzVjXHU1NzNiXHU1NzQyXHU1NzY5XHU1Nzg1XHU1NzZiXHU1Nzg2XHU1NzdjXHU1NzdiXHU1NzY4XHU1NzZkXHU1'@;
put 'Nzc2XHU1NzczXHU1N2FkXHU1N2E0XHU1NzhjXHU1N2IyXHU1N2NmXHU1N2E3XHU1N2I0XHU1NzkzXHU1N2EwXHU1N2Q1XHU1N2Q4XHU1N2RhXHU1N2Q5XHU1N2QyXHU1N2I4XHU1N2Y0XHU1N2VmXHU1N2Y4XHU1N2U0XHU1N2RkXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjE5XS5sZW5n'@;
put 'dGg7Kyt2KTY1NTMzIT09a1syMTldW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIxOV1bdl1dPTU2MDY0K3YsVFs1NjA2NCt2XT1rWzIxOV1bdl0pO2ZvcihrWzIyMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGU3M1x1OGU3NVx1'@;
put 'OGU3N1x1OGU3OFx1OGU3OVx1OGU3YVx1OGU3Ylx1OGU3ZFx1OGU3ZVx1OGU4MFx1OGU4Mlx1OGU4M1x1OGU4NFx1OGU4Nlx1OGU4OFx1OGU4OVx1OGU4YVx1OGU4Ylx1OGU4Y1x1OGU4ZFx1OGU4ZVx1OGU5MVx1OGU5Mlx1OGU5M1x1OGU5NVx1OGU5Nlx1OGU5N1x1OGU5OFx1OGU5OVx1OGU5'@;
put 'YVx1OGU5Ylx1OGU5ZFx1OGU5Zlx1OGVhMFx1OGVhMVx1OGVhMlx1OGVhM1x1OGVhNFx1OGVhNVx1OGVhNlx1OGVhN1x1OGVhOFx1OGVhOVx1OGVhYVx1OGVhZFx1OGVhZVx1OGViMFx1OGViMVx1OGViM1x1OGViNFx1OGViNVx1OGViNlx1OGViN1x1OGViOFx1OGViOVx1OGViYlx1OGViY1x1'@;
put 'OGViZFx1OGViZVx1OGViZlx1OGVjMFx1OGVjMVx1OGVjMlx1ZmZmZFx1OGVjM1x1OGVjNFx1OGVjNVx1OGVjNlx1OGVjN1x1OGVjOFx1OGVjOVx1OGVjYVx1OGVjYlx1OGVjY1x1OGVjZFx1OGVjZlx1OGVkMFx1OGVkMVx1OGVkMlx1OGVkM1x1OGVkNFx1OGVkNVx1OGVkNlx1OGVkN1x1OGVk'@;
put 'OFx1OGVkOVx1OGVkYVx1OGVkYlx1OGVkY1x1OGVkZFx1OGVkZVx1OGVkZlx1OGVlMFx1OGVlMVx1OGVlMlx1OGVlM1x1OGVlNFx1NTgwYlx1NTgwZFx1NTdmZFx1NTdlZFx1NTgwMFx1NTgxZVx1NTgxOVx1NTg0NFx1NTgyMFx1NTg2NVx1NTg2Y1x1NTg4MVx1NTg4OVx1NTg5YVx1NTg4MFx1'@;
put 'OTlhOFx1OWYxOVx1NjFmZlx1ODI3OVx1ODI3ZFx1ODI3Zlx1ODI4Zlx1ODI4YVx1ODJhOFx1ODI4NFx1ODI4ZVx1ODI5MVx1ODI5N1x1ODI5OVx1ODJhYlx1ODJiOFx1ODJiZVx1ODJiMFx1ODJjOFx1ODJjYVx1ODJlM1x1ODI5OFx1ODJiN1x1ODJhZVx1ODJjYlx1ODJjY1x1ODJjMVx1ODJh'@;
put 'OVx1ODJiNFx1ODJhMVx1ODJhYVx1ODI5Zlx1ODJjNFx1ODJjZVx1ODJhNFx1ODJlMVx1ODMwOVx1ODJmN1x1ODJlNFx1ODMwZlx1ODMwN1x1ODJkY1x1ODJmNFx1ODJkMlx1ODJkOFx1ODMwY1x1ODJmYlx1ODJkM1x1ODMxMVx1ODMxYVx1ODMwNlx1ODMxNFx1ODMxNVx1ODJlMFx1ODJkNVx1'@;
put 'ODMxY1x1ODM1MVx1ODM1Ylx1ODM1Y1x1ODMwOFx1ODM5Mlx1ODMzY1x1ODMzNFx1ODMzMVx1ODM5Ylx1ODM1ZVx1ODMyZlx1ODM0Zlx1ODM0N1x1ODM0M1x1ODM1Zlx1ODM0MFx1ODMxN1x1ODM2MFx1ODMyZFx1ODMzYVx1ODMzM1x1ODM2Nlx1ODM2NVx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2'@;
put 'IT1rWzIyMF0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjIwXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMjBdW3ZdXT01NjMyMCt2LFRbNTYzMjArdl09a1syMjBdW3ZdKTtmb3Ioa1syMjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dThlZTVcdThlZTZcdThlZTdcdThlZThcdThlZTlcdThlZWFcdThlZWJcdThlZWNcdThlZWRcdThlZWVcdThlZWZcdThlZjBcdThlZjFcdThlZjJcdThlZjNcdThlZjRcdThlZjVcdThlZjZcdThlZjdcdThlZjhcdThlZjlcdThlZmFcdThlZmJcdThlZmNcdThlZmRcdThlZmVcdThlZmZcdThm'@;
put 'MDBcdThmMDFcdThmMDJcdThmMDNcdThmMDRcdThmMDVcdThmMDZcdThmMDdcdThmMDhcdThmMDlcdThmMGFcdThmMGJcdThmMGNcdThmMGRcdThmMGVcdThmMGZcdThmMTBcdThmMTFcdThmMTJcdThmMTNcdThmMTRcdThmMTVcdThmMTZcdThmMTdcdThmMThcdThmMTlcdThmMWFcdThmMWJc'@;
put 'dThmMWNcdThmMWRcdThmMWVcdThmMWZcdThmMjBcdThmMjFcdThmMjJcdThmMjNcdWZmZmRcdThmMjRcdThmMjVcdThmMjZcdThmMjdcdThmMjhcdThmMjlcdThmMmFcdThmMmJcdThmMmNcdThmMmRcdThmMmVcdThmMmZcdThmMzBcdThmMzFcdThmMzJcdThmMzNcdThmMzRcdThmMzVcdThm'@;
put 'MzZcdThmMzdcdThmMzhcdThmMzlcdThmM2FcdThmM2JcdThmM2NcdThmM2RcdThmM2VcdThmM2ZcdThmNDBcdThmNDFcdThmNDJcdThmNDNcdThmNDRcdTgzNjhcdTgzMWJcdTgzNjlcdTgzNmNcdTgzNmFcdTgzNmRcdTgzNmVcdTgzYjBcdTgzNzhcdTgzYjNcdTgzYjRcdTgzYTBcdTgzYWFc'@;
put 'dTgzOTNcdTgzOWNcdTgzODVcdTgzN2NcdTgzYjZcdTgzYTlcdTgzN2RcdTgzYjhcdTgzN2JcdTgzOThcdTgzOWVcdTgzYThcdTgzYmFcdTgzYmNcdTgzYzFcdTg0MDFcdTgzZTVcdTgzZDhcdTU4MDdcdTg0MThcdTg0MGJcdTgzZGRcdTgzZmRcdTgzZDZcdTg0MWNcdTg0MzhcdTg0MTFcdTg0'@;
put 'MDZcdTgzZDRcdTgzZGZcdTg0MGZcdTg0MDNcdTgzZjhcdTgzZjlcdTgzZWFcdTgzYzVcdTgzYzBcdTg0MjZcdTgzZjBcdTgzZTFcdTg0NWNcdTg0NTFcdTg0NWFcdTg0NTlcdTg0NzNcdTg0ODdcdTg0ODhcdTg0N2FcdTg0ODlcdTg0NzhcdTg0M2NcdTg0NDZcdTg0NjlcdTg0NzZcdTg0OGNc'@;
put 'dTg0OGVcdTg0MzFcdTg0NmRcdTg0YzFcdTg0Y2RcdTg0ZDBcdTg0ZTZcdTg0YmRcdTg0ZDNcdTg0Y2FcdTg0YmZcdTg0YmFcdTg0ZTBcdTg0YTFcdTg0YjlcdTg0YjRcdTg0OTdcdTg0ZTVcdTg0ZTNcdTg1MGNcdTc1MGRcdTg1MzhcdTg0ZjBcdTg1MzlcdTg1MWZcdTg1M2FcdWZmZmQiLnNw'@;
put 'bGl0KCIiKSx2PTA7diE9a1syMjFdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIyMV1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjIxXVt2XV09NTY1NzYrdixUWzU2NTc2K3ZdPWtbMjIxXVt2XSk7Zm9yKGtbMjIyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHU4ZjQ1XHU4ZjQ2XHU4ZjQ3XHU4ZjQ4XHU4ZjQ5XHU4ZjRhXHU4ZjRiXHU4ZjRjXHU4ZjRkXHU4ZjRlXHU4ZjRmXHU4ZjUwXHU4ZjUxXHU4ZjUyXHU4ZjUzXHU4ZjU0XHU4ZjU1XHU4ZjU2XHU4ZjU3XHU4ZjU4XHU4ZjU5XHU4ZjVhXHU4ZjViXHU4ZjVjXHU4ZjVkXHU4'@;
put 'ZjVlXHU4ZjVmXHU4ZjYwXHU4ZjYxXHU4ZjYyXHU4ZjYzXHU4ZjY0XHU4ZjY1XHU4ZjZhXHU4ZjgwXHU4ZjhjXHU4ZjkyXHU4ZjlkXHU4ZmEwXHU4ZmExXHU4ZmEyXHU4ZmE0XHU4ZmE1XHU4ZmE2XHU4ZmE3XHU4ZmFhXHU4ZmFjXHU4ZmFkXHU4ZmFlXHU4ZmFmXHU4ZmIyXHU4ZmIzXHU4ZmI0'@;
put 'XHU4ZmI1XHU4ZmI3XHU4ZmI4XHU4ZmJhXHU4ZmJiXHU4ZmJjXHU4ZmJmXHU4ZmMwXHU4ZmMzXHU4ZmM2XHVmZmZkXHU4ZmM5XHU4ZmNhXHU4ZmNiXHU4ZmNjXHU4ZmNkXHU4ZmNmXHU4ZmQyXHU4ZmQ2XHU4ZmQ3XHU4ZmRhXHU4ZmUwXHU4ZmUxXHU4ZmUzXHU4ZmU3XHU4ZmVjXHU4ZmVmXHU4'@;
put 'ZmYxXHU4ZmYyXHU4ZmY0XHU4ZmY1XHU4ZmY2XHU4ZmZhXHU4ZmZiXHU4ZmZjXHU4ZmZlXHU4ZmZmXHU5MDA3XHU5MDA4XHU5MDBjXHU5MDBlXHU5MDEzXHU5MDE1XHU5MDE4XHU4NTU2XHU4NTNiXHU4NGZmXHU4NGZjXHU4NTU5XHU4NTQ4XHU4NTY4XHU4NTY0XHU4NTVlXHU4NTdhXHU3N2Ey'@;
put 'XHU4NTQzXHU4NTcyXHU4NTdiXHU4NWE0XHU4NWE4XHU4NTg3XHU4NThmXHU4NTc5XHU4NWFlXHU4NTljXHU4NTg1XHU4NWI5XHU4NWI3XHU4NWIwXHU4NWQzXHU4NWMxXHU4NWRjXHU4NWZmXHU4NjI3XHU4NjA1XHU4NjI5XHU4NjE2XHU4NjNjXHU1ZWZlXHU1ZjA4XHU1OTNjXHU1OTQxXHU4'@;
put 'MDM3XHU1OTU1XHU1OTVhXHU1OTU4XHU1MzBmXHU1YzIyXHU1YzI1XHU1YzJjXHU1YzM0XHU2MjRjXHU2MjZhXHU2MjlmXHU2MmJiXHU2MmNhXHU2MmRhXHU2MmQ3XHU2MmVlXHU2MzIyXHU2MmY2XHU2MzM5XHU2MzRiXHU2MzQzXHU2M2FkXHU2M2Y2XHU2MzcxXHU2MzdhXHU2MzhlXHU2M2I0'@;
put 'XHU2MzZkXHU2M2FjXHU2MzhhXHU2MzY5XHU2M2FlXHU2M2JjXHU2M2YyXHU2M2Y4XHU2M2UwXHU2M2ZmXHU2M2M0XHU2M2RlXHU2M2NlXHU2NDUyXHU2M2M2XHU2M2JlXHU2NDQ1XHU2NDQxXHU2NDBiXHU2NDFiXHU2NDIwXHU2NDBjXHU2NDI2XHU2NDIxXHU2NDVlXHU2NDg0XHU2NDZkXHU2'@;
put 'NDk2XHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjIyXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMjJdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIyMl1bdl1dPTU2ODMyK3YsVFs1NjgzMit2XT1rWzIyMl1bdl0pO2ZvcihrWzIyM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTAxOVx1OTAxY1x1OTAyM1x1OTAyNFx1OTAyNVx1OTAyN1x1OTAyOFx1OTAyOVx1OTAyYVx1OTAyYlx1OTAyY1x1OTAzMFx1OTAzMVx1OTAzMlx1OTAzM1x1OTAzNFx1OTAzN1x1OTAzOVx1OTAzYVx1OTAzZFx1OTAzZlx1OTA0MFx1OTA0M1x1'@;
put 'OTA0NVx1OTA0Nlx1OTA0OFx1OTA0OVx1OTA0YVx1OTA0Ylx1OTA0Y1x1OTA0ZVx1OTA1NFx1OTA1NVx1OTA1Nlx1OTA1OVx1OTA1YVx1OTA1Y1x1OTA1ZFx1OTA1ZVx1OTA1Zlx1OTA2MFx1OTA2MVx1OTA2NFx1OTA2Nlx1OTA2N1x1OTA2OVx1OTA2YVx1OTA2Ylx1OTA2Y1x1OTA2Zlx1OTA3'@;
put 'MFx1OTA3MVx1OTA3Mlx1OTA3M1x1OTA3Nlx1OTA3N1x1OTA3OFx1OTA3OVx1OTA3YVx1OTA3Ylx1OTA3Y1x1OTA3ZVx1OTA4MVx1ZmZmZFx1OTA4NFx1OTA4NVx1OTA4Nlx1OTA4N1x1OTA4OVx1OTA4YVx1OTA4Y1x1OTA4ZFx1OTA4ZVx1OTA4Zlx1OTA5MFx1OTA5Mlx1OTA5NFx1OTA5Nlx1'@;
put 'OTA5OFx1OTA5YVx1OTA5Y1x1OTA5ZVx1OTA5Zlx1OTBhMFx1OTBhNFx1OTBhNVx1OTBhN1x1OTBhOFx1OTBhOVx1OTBhYlx1OTBhZFx1OTBiMlx1OTBiN1x1OTBiY1x1OTBiZFx1OTBiZlx1OTBjMFx1NjQ3YVx1NjRiN1x1NjRiOFx1NjQ5OVx1NjRiYVx1NjRjMFx1NjRkMFx1NjRkN1x1NjRl'@;
put 'NFx1NjRlMlx1NjUwOVx1NjUyNVx1NjUyZVx1NWYwYlx1NWZkMlx1NzUxOVx1NWYxMVx1NTM1Zlx1NTNmMVx1NTNmZFx1NTNlOVx1NTNlOFx1NTNmYlx1NTQxMlx1NTQxNlx1NTQwNlx1NTQ0Ylx1NTQ1Mlx1NTQ1M1x1NTQ1NFx1NTQ1Nlx1NTQ0M1x1NTQyMVx1NTQ1N1x1NTQ1OVx1NTQyM1x1'@;
put 'NTQzMlx1NTQ4Mlx1NTQ5NFx1NTQ3N1x1NTQ3MVx1NTQ2NFx1NTQ5YVx1NTQ5Ylx1NTQ4NFx1NTQ3Nlx1NTQ2Nlx1NTQ5ZFx1NTRkMFx1NTRhZFx1NTRjMlx1NTRiNFx1NTRkMlx1NTRhN1x1NTRhNlx1NTRkM1x1NTRkNFx1NTQ3Mlx1NTRhM1x1NTRkNVx1NTRiYlx1NTRiZlx1NTRjY1x1NTRk'@;
put 'OVx1NTRkYVx1NTRkY1x1NTRhOVx1NTRhYVx1NTRhNFx1NTRkZFx1NTRjZlx1NTRkZVx1NTUxYlx1NTRlN1x1NTUyMFx1NTRmZFx1NTUxNFx1NTRmM1x1NTUyMlx1NTUyM1x1NTUwZlx1NTUxMVx1NTUyN1x1NTUyYVx1NTU2N1x1NTU4Zlx1NTViNVx1NTU0OVx1NTU2ZFx1NTU0MVx1NTU1NVx1'@;
put 'NTUzZlx1NTU1MFx1NTUzY1x1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIyM10ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjIzXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMjNdW3ZdXT01NzA4OCt2LFRbNTcwODgrdl09a1syMjNdW3ZdKTtmb3Ioa1syMjRdPSJcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwYzJcdTkwYzNcdTkwYzZcdTkwYzhcdTkwYzlcdTkwY2JcdTkwY2NcdTkwY2RcdTkwZDJcdTkwZDRcdTkwZDVcdTkwZDZcdTkwZDhcdTkwZDlcdTkwZGFcdTkwZGVcdTkwZGZcdTkwZTBcdTkwZTNcdTkwZTRcdTkwZTVc'@;
put 'dTkwZTlcdTkwZWFcdTkwZWNcdTkwZWVcdTkwZjBcdTkwZjFcdTkwZjJcdTkwZjNcdTkwZjVcdTkwZjZcdTkwZjdcdTkwZjlcdTkwZmFcdTkwZmJcdTkwZmNcdTkwZmZcdTkxMDBcdTkxMDFcdTkxMDNcdTkxMDVcdTkxMDZcdTkxMDdcdTkxMDhcdTkxMDlcdTkxMGFcdTkxMGJcdTkxMGNcdTkx'@;
put 'MGRcdTkxMGVcdTkxMGZcdTkxMTBcdTkxMTFcdTkxMTJcdTkxMTNcdTkxMTRcdTkxMTVcdTkxMTZcdTkxMTdcdTkxMThcdTkxMWFcdTkxMWJcdTkxMWNcdWZmZmRcdTkxMWRcdTkxMWZcdTkxMjBcdTkxMjFcdTkxMjRcdTkxMjVcdTkxMjZcdTkxMjdcdTkxMjhcdTkxMjlcdTkxMmFcdTkxMmJc'@;
put 'dTkxMmNcdTkxMmRcdTkxMmVcdTkxMzBcdTkxMzJcdTkxMzNcdTkxMzRcdTkxMzVcdTkxMzZcdTkxMzdcdTkxMzhcdTkxM2FcdTkxM2JcdTkxM2NcdTkxM2RcdTkxM2VcdTkxM2ZcdTkxNDBcdTkxNDFcdTkxNDJcdTkxNDRcdTU1MzdcdTU1NTZcdTU1NzVcdTU1NzZcdTU1NzdcdTU1MzNcdTU1'@;
put 'MzBcdTU1NWNcdTU1OGJcdTU1ZDJcdTU1ODNcdTU1YjFcdTU1YjlcdTU1ODhcdTU1ODFcdTU1OWZcdTU1N2VcdTU1ZDZcdTU1OTFcdTU1N2JcdTU1ZGZcdTU1YmRcdTU1YmVcdTU1OTRcdTU1OTlcdTU1ZWFcdTU1ZjdcdTU1YzlcdTU2MWZcdTU1ZDFcdTU1ZWJcdTU1ZWNcdTU1ZDRcdTU1ZTZc'@;
put 'dTU1ZGRcdTU1YzRcdTU1ZWZcdTU1ZTVcdTU1ZjJcdTU1ZjNcdTU1Y2NcdTU1Y2RcdTU1ZThcdTU1ZjVcdTU1ZTRcdThmOTRcdTU2MWVcdTU2MDhcdTU2MGNcdTU2MDFcdTU2MjRcdTU2MjNcdTU1ZmVcdTU2MDBcdTU2MjdcdTU2MmRcdTU2NThcdTU2MzlcdTU2NTdcdTU2MmNcdTU2NGRcdTU2'@;
put 'NjJcdTU2NTlcdTU2NWNcdTU2NGNcdTU2NTRcdTU2ODZcdTU2NjRcdTU2NzFcdTU2NmJcdTU2N2JcdTU2N2NcdTU2ODVcdTU2OTNcdTU2YWZcdTU2ZDRcdTU2ZDdcdTU2ZGRcdTU2ZTFcdTU2ZjVcdTU2ZWJcdTU2ZjlcdTU2ZmZcdTU3MDRcdTU3MGFcdTU3MDlcdTU3MWNcdTVlMGZcdTVlMTlc'@;
put 'dTVlMTRcdTVlMTFcdTVlMzFcdTVlM2JcdTVlM2NcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMjRdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIyNF1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjI0XVt2XV09NTczNDQrdixUWzU3MzQ0K3ZdPWtbMjI0XVt2XSk7Zm9yKGtbMjI1XT0iXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MTQ1XHU5MTQ3XHU5MTQ4XHU5MTUxXHU5MTUzXHU5MTU0XHU5MTU1XHU5MTU2XHU5MTU4XHU5MTU5XHU5MTViXHU5MTVjXHU5MTVmXHU5MTYwXHU5MTY2XHU5MTY3XHU5MTY4XHU5MTZiXHU5MTZk'@;
put 'XHU5MTczXHU5MTdhXHU5MTdiXHU5MTdjXHU5MTgwXHU5MTgxXHU5MTgyXHU5MTgzXHU5MTg0XHU5MTg2XHU5MTg4XHU5MThhXHU5MThlXHU5MThmXHU5MTkzXHU5MTk0XHU5MTk1XHU5MTk2XHU5MTk3XHU5MTk4XHU5MTk5XHU5MTljXHU5MTlkXHU5MTllXHU5MTlmXHU5MWEwXHU5MWExXHU5'@;
put 'MWE0XHU5MWE1XHU5MWE2XHU5MWE3XHU5MWE4XHU5MWE5XHU5MWFiXHU5MWFjXHU5MWIwXHU5MWIxXHU5MWIyXHU5MWIzXHU5MWI2XHU5MWI3XHU5MWI4XHU5MWI5XHU5MWJiXHVmZmZkXHU5MWJjXHU5MWJkXHU5MWJlXHU5MWJmXHU5MWMwXHU5MWMxXHU5MWMyXHU5MWMzXHU5MWM0XHU5MWM1'@;
put 'XHU5MWM2XHU5MWM4XHU5MWNiXHU5MWQwXHU5MWQyXHU5MWQzXHU5MWQ0XHU5MWQ1XHU5MWQ2XHU5MWQ3XHU5MWQ4XHU5MWQ5XHU5MWRhXHU5MWRiXHU5MWRkXHU5MWRlXHU5MWRmXHU5MWUwXHU5MWUxXHU5MWUyXHU5MWUzXHU5MWU0XHU5MWU1XHU1ZTM3XHU1ZTQ0XHU1ZTU0XHU1ZTViXHU1'@;
put 'ZTVlXHU1ZTYxXHU1YzhjXHU1YzdhXHU1YzhkXHU1YzkwXHU1Yzk2XHU1Yzg4XHU1Yzk4XHU1Yzk5XHU1YzkxXHU1YzlhXHU1YzljXHU1Y2I1XHU1Y2EyXHU1Y2JkXHU1Y2FjXHU1Y2FiXHU1Y2IxXHU1Y2EzXHU1Y2MxXHU1Y2I3XHU1Y2M0XHU1Y2QyXHU1Y2U0XHU1Y2NiXHU1Y2U1XHU1ZDAy'@;
put 'XHU1ZDAzXHU1ZDI3XHU1ZDI2XHU1ZDJlXHU1ZDI0XHU1ZDFlXHU1ZDA2XHU1ZDFiXHU1ZDU4XHU1ZDNlXHU1ZDM0XHU1ZDNkXHU1ZDZjXHU1ZDViXHU1ZDZmXHU1ZDVkXHU1ZDZiXHU1ZDRiXHU1ZDRhXHU1ZDY5XHU1ZDc0XHU1ZDgyXHU1ZDk5XHU1ZDlkXHU4YzczXHU1ZGI3XHU1ZGM1XHU1'@;
put 'ZjczXHU1Zjc3XHU1ZjgyXHU1Zjg3XHU1Zjg5XHU1ZjhjXHU1Zjk1XHU1Zjk5XHU1ZjljXHU1ZmE4XHU1ZmFkXHU1ZmI1XHU1ZmJjXHU4ODYyXHU1ZjYxXHU3MmFkXHU3MmIwXHU3MmI0XHU3MmI3XHU3MmI4XHU3MmMzXHU3MmMxXHU3MmNlXHU3MmNkXHU3MmQyXHU3MmU4XHU3MmVmXHU3MmU5'@;
put 'XHU3MmYyXHU3MmY0XHU3MmY3XHU3MzAxXHU3MmYzXHU3MzAzXHU3MmZhXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjI1XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMjVdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIyNV1bdl1dPTU3NjAwK3YsVFs1NzYwMCt2XT1rWzIyNV1bdl0pO2Zv'@;
put 'cihrWzIyNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTFlNlx1OTFlN1x1OTFlOFx1OTFlOVx1OTFlYVx1OTFlYlx1OTFlY1x1OTFlZFx1OTFlZVx1OTFlZlx1OTFmMFx1OTFmMVx1OTFmMlx1OTFmM1x1OTFmNFx1OTFmNVx1OTFm'@;
put 'Nlx1OTFmN1x1OTFmOFx1OTFmOVx1OTFmYVx1OTFmYlx1OTFmY1x1OTFmZFx1OTFmZVx1OTFmZlx1OTIwMFx1OTIwMVx1OTIwMlx1OTIwM1x1OTIwNFx1OTIwNVx1OTIwNlx1OTIwN1x1OTIwOFx1OTIwOVx1OTIwYVx1OTIwYlx1OTIwY1x1OTIwZFx1OTIwZVx1OTIwZlx1OTIxMFx1OTIxMVx1'@;
put 'OTIxMlx1OTIxM1x1OTIxNFx1OTIxNVx1OTIxNlx1OTIxN1x1OTIxOFx1OTIxOVx1OTIxYVx1OTIxYlx1OTIxY1x1OTIxZFx1OTIxZVx1OTIxZlx1OTIyMFx1OTIyMVx1OTIyMlx1OTIyM1x1OTIyNFx1ZmZmZFx1OTIyNVx1OTIyNlx1OTIyN1x1OTIyOFx1OTIyOVx1OTIyYVx1OTIyYlx1OTIy'@;
put 'Y1x1OTIyZFx1OTIyZVx1OTIyZlx1OTIzMFx1OTIzMVx1OTIzMlx1OTIzM1x1OTIzNFx1OTIzNVx1OTIzNlx1OTIzN1x1OTIzOFx1OTIzOVx1OTIzYVx1OTIzYlx1OTIzY1x1OTIzZFx1OTIzZVx1OTIzZlx1OTI0MFx1OTI0MVx1OTI0Mlx1OTI0M1x1OTI0NFx1OTI0NVx1NzJmYlx1NzMxN1x1'@;
put 'NzMxM1x1NzMyMVx1NzMwYVx1NzMxZVx1NzMxZFx1NzMxNVx1NzMyMlx1NzMzOVx1NzMyNVx1NzMyY1x1NzMzOFx1NzMzMVx1NzM1MFx1NzM0ZFx1NzM1N1x1NzM2MFx1NzM2Y1x1NzM2Zlx1NzM3ZVx1ODIxYlx1NTkyNVx1OThlN1x1NTkyNFx1NTkwMlx1OTk2M1x1OTk2N1x1OTk2OFx1OTk2'@;
put 'OVx1OTk2YVx1OTk2Ylx1OTk2Y1x1OTk3NFx1OTk3N1x1OTk3ZFx1OTk4MFx1OTk4NFx1OTk4N1x1OTk4YVx1OTk4ZFx1OTk5MFx1OTk5MVx1OTk5M1x1OTk5NFx1OTk5NVx1NWU4MFx1NWU5MVx1NWU4Ylx1NWU5Nlx1NWVhNVx1NWVhMFx1NWViOVx1NWViNVx1NWViZVx1NWViM1x1OGQ1M1x1'@;
put 'NWVkMlx1NWVkMVx1NWVkYlx1NWVlOFx1NWVlYVx1ODFiYVx1NWZjNFx1NWZjOVx1NWZkNlx1NWZjZlx1NjAwM1x1NWZlZVx1NjAwNFx1NWZlMVx1NWZlNFx1NWZmZVx1NjAwNVx1NjAwNlx1NWZlYVx1NWZlZFx1NWZmOFx1NjAxOVx1NjAzNVx1NjAyNlx1NjAxYlx1NjAwZlx1NjAwZFx1NjAy'@;
put 'OVx1NjAyYlx1NjAwYVx1NjAzZlx1NjAyMVx1NjA3OFx1NjA3OVx1NjA3Ylx1NjA3YVx1NjA0Mlx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIyNl0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjI2XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMjZdW3ZdXT01Nzg1Nit2LFRbNTc4NTYrdl09'@;
put 'a1syMjZdW3ZdKTtmb3Ioa1syMjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkyNDZcdTkyNDdcdTkyNDhcdTkyNDlcdTkyNGFcdTkyNGJcdTkyNGNcdTkyNGRcdTkyNGVcdTkyNGZcdTkyNTBcdTkyNTFcdTkyNTJcdTkyNTNcdTky'@;
put 'NTRcdTkyNTVcdTkyNTZcdTkyNTdcdTkyNThcdTkyNTlcdTkyNWFcdTkyNWJcdTkyNWNcdTkyNWRcdTkyNWVcdTkyNWZcdTkyNjBcdTkyNjFcdTkyNjJcdTkyNjNcdTkyNjRcdTkyNjVcdTkyNjZcdTkyNjdcdTkyNjhcdTkyNjlcdTkyNmFcdTkyNmJcdTkyNmNcdTkyNmRcdTkyNmVcdTkyNmZc'@;
put 'dTkyNzBcdTkyNzFcdTkyNzJcdTkyNzNcdTkyNzVcdTkyNzZcdTkyNzdcdTkyNzhcdTkyNzlcdTkyN2FcdTkyN2JcdTkyN2NcdTkyN2RcdTkyN2VcdTkyN2ZcdTkyODBcdTkyODFcdTkyODJcdTkyODNcdTkyODRcdTkyODVcdWZmZmRcdTkyODZcdTkyODdcdTkyODhcdTkyODlcdTkyOGFcdTky'@;
put 'OGJcdTkyOGNcdTkyOGRcdTkyOGZcdTkyOTBcdTkyOTFcdTkyOTJcdTkyOTNcdTkyOTRcdTkyOTVcdTkyOTZcdTkyOTdcdTkyOThcdTkyOTlcdTkyOWFcdTkyOWJcdTkyOWNcdTkyOWRcdTkyOWVcdTkyOWZcdTkyYTBcdTkyYTFcdTkyYTJcdTkyYTNcdTkyYTRcdTkyYTVcdTkyYTZcdTkyYTdc'@;
put 'dTYwNmFcdTYwN2RcdTYwOTZcdTYwOWFcdTYwYWRcdTYwOWRcdTYwODNcdTYwOTJcdTYwOGNcdTYwOWJcdTYwZWNcdTYwYmJcdTYwYjFcdTYwZGRcdTYwZDhcdTYwYzZcdTYwZGFcdTYwYjRcdTYxMjBcdTYxMjZcdTYxMTVcdTYxMjNcdTYwZjRcdTYxMDBcdTYxMGVcdTYxMmJcdTYxNGFcdTYx'@;
put 'NzVcdTYxYWNcdTYxOTRcdTYxYTdcdTYxYjdcdTYxZDRcdTYxZjVcdTVmZGRcdTk2YjNcdTk1ZTlcdTk1ZWJcdTk1ZjFcdTk1ZjNcdTk1ZjVcdTk1ZjZcdTk1ZmNcdTk1ZmVcdTk2MDNcdTk2MDRcdTk2MDZcdTk2MDhcdTk2MGFcdTk2MGJcdTk2MGNcdTk2MGRcdTk2MGZcdTk2MTJcdTk2MTVc'@;
put 'dTk2MTZcdTk2MTdcdTk2MTlcdTk2MWFcdTRlMmNcdTcyM2ZcdTYyMTVcdTZjMzVcdTZjNTRcdTZjNWNcdTZjNGFcdTZjYTNcdTZjODVcdTZjOTBcdTZjOTRcdTZjOGNcdTZjNjhcdTZjNjlcdTZjNzRcdTZjNzZcdTZjODZcdTZjYTlcdTZjZDBcdTZjZDRcdTZjYWRcdTZjZjdcdTZjZjhcdTZj'@;
put 'ZjFcdTZjZDdcdTZjYjJcdTZjZTBcdTZjZDZcdTZjZmFcdTZjZWJcdTZjZWVcdTZjYjFcdTZjZDNcdTZjZWZcdTZjZmVcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMjddLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIyN11bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjI3XVt2XV09NTgxMTIr'@;
put 'dixUWzU4MTEyK3ZdPWtbMjI3XVt2XSk7Zm9yKGtbMjI4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MmE4XHU5MmE5XHU5MmFhXHU5MmFiXHU5MmFjXHU5MmFkXHU5MmFmXHU5MmIwXHU5MmIxXHU5MmIyXHU5MmIzXHU5MmI0XHU5'@;
put 'MmI1XHU5MmI2XHU5MmI3XHU5MmI4XHU5MmI5XHU5MmJhXHU5MmJiXHU5MmJjXHU5MmJkXHU5MmJlXHU5MmJmXHU5MmMwXHU5MmMxXHU5MmMyXHU5MmMzXHU5MmM0XHU5MmM1XHU5MmM2XHU5MmM3XHU5MmM5XHU5MmNhXHU5MmNiXHU5MmNjXHU5MmNkXHU5MmNlXHU5MmNmXHU5MmQwXHU5MmQx'@;
put 'XHU5MmQyXHU5MmQzXHU5MmQ0XHU5MmQ1XHU5MmQ2XHU5MmQ3XHU5MmQ4XHU5MmQ5XHU5MmRhXHU5MmRiXHU5MmRjXHU5MmRkXHU5MmRlXHU5MmRmXHU5MmUwXHU5MmUxXHU5MmUyXHU5MmUzXHU5MmU0XHU5MmU1XHU5MmU2XHU5MmU3XHU5MmU4XHVmZmZkXHU5MmU5XHU5MmVhXHU5MmViXHU5'@;
put 'MmVjXHU5MmVkXHU5MmVlXHU5MmVmXHU5MmYwXHU5MmYxXHU5MmYyXHU5MmYzXHU5MmY0XHU5MmY1XHU5MmY2XHU5MmY3XHU5MmY4XHU5MmY5XHU5MmZhXHU5MmZiXHU5MmZjXHU5MmZkXHU5MmZlXHU5MmZmXHU5MzAwXHU5MzAxXHU5MzAyXHU5MzAzXHU5MzA0XHU5MzA1XHU5MzA2XHU5MzA3'@;
put 'XHU5MzA4XHU5MzA5XHU2ZDM5XHU2ZDI3XHU2ZDBjXHU2ZDQzXHU2ZDQ4XHU2ZDA3XHU2ZDA0XHU2ZDE5XHU2ZDBlXHU2ZDJiXHU2ZDRkXHU2ZDJlXHU2ZDM1XHU2ZDFhXHU2ZDRmXHU2ZDUyXHU2ZDU0XHU2ZDMzXHU2ZDkxXHU2ZDZmXHU2ZDllXHU2ZGEwXHU2ZDVlXHU2ZDkzXHU2ZDk0XHU2'@;
put 'ZDVjXHU2ZDYwXHU2ZDdjXHU2ZDYzXHU2ZTFhXHU2ZGM3XHU2ZGM1XHU2ZGRlXHU2ZTBlXHU2ZGJmXHU2ZGUwXHU2ZTExXHU2ZGU2XHU2ZGRkXHU2ZGQ5XHU2ZTE2XHU2ZGFiXHU2ZTBjXHU2ZGFlXHU2ZTJiXHU2ZTZlXHU2ZTRlXHU2ZTZiXHU2ZWIyXHU2ZTVmXHU2ZTg2XHU2ZTUzXHU2ZTU0'@;
put 'XHU2ZTMyXHU2ZTI1XHU2ZTQ0XHU2ZWRmXHU2ZWIxXHU2ZTk4XHU2ZWUwXHU2ZjJkXHU2ZWUyXHU2ZWE1XHU2ZWE3XHU2ZWJkXHU2ZWJiXHU2ZWI3XHU2ZWQ3XHU2ZWI0XHU2ZWNmXHU2ZThmXHU2ZWMyXHU2ZTlmXHU2ZjYyXHU2ZjQ2XHU2ZjQ3XHU2ZjI0XHU2ZjE1XHU2ZWY5XHU2ZjJmXHU2'@;
put 'ZjM2XHU2ZjRiXHU2Zjc0XHU2ZjJhXHU2ZjA5XHU2ZjI5XHU2Zjg5XHU2ZjhkXHU2ZjhjXHU2Zjc4XHU2ZjcyXHU2ZjdjXHU2ZjdhXHU2ZmQxXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjI4XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMjhdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIy'@;
put 'OF1bdl1dPTU4MzY4K3YsVFs1ODM2OCt2XT1rWzIyOF1bdl0pO2ZvcihrWzIyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTMwYVx1OTMwYlx1OTMwY1x1OTMwZFx1OTMwZVx1OTMwZlx1OTMxMFx1OTMxMVx1OTMxMlx1OTMxM1x1'@;
put 'OTMxNFx1OTMxNVx1OTMxNlx1OTMxN1x1OTMxOFx1OTMxOVx1OTMxYVx1OTMxYlx1OTMxY1x1OTMxZFx1OTMxZVx1OTMxZlx1OTMyMFx1OTMyMVx1OTMyMlx1OTMyM1x1OTMyNFx1OTMyNVx1OTMyNlx1OTMyN1x1OTMyOFx1OTMyOVx1OTMyYVx1OTMyYlx1OTMyY1x1OTMyZFx1OTMyZVx1OTMy'@;
put 'Zlx1OTMzMFx1OTMzMVx1OTMzMlx1OTMzM1x1OTMzNFx1OTMzNVx1OTMzNlx1OTMzN1x1OTMzOFx1OTMzOVx1OTMzYVx1OTMzYlx1OTMzY1x1OTMzZFx1OTMzZlx1OTM0MFx1OTM0MVx1OTM0Mlx1OTM0M1x1OTM0NFx1OTM0NVx1OTM0Nlx1OTM0N1x1OTM0OFx1OTM0OVx1ZmZmZFx1OTM0YVx1'@;
put 'OTM0Ylx1OTM0Y1x1OTM0ZFx1OTM0ZVx1OTM0Zlx1OTM1MFx1OTM1MVx1OTM1Mlx1OTM1M1x1OTM1NFx1OTM1NVx1OTM1Nlx1OTM1N1x1OTM1OFx1OTM1OVx1OTM1YVx1OTM1Ylx1OTM1Y1x1OTM1ZFx1OTM1ZVx1OTM1Zlx1OTM2MFx1OTM2MVx1OTM2Mlx1OTM2M1x1OTM2NFx1OTM2NVx1OTM2'@;
put 'Nlx1OTM2N1x1OTM2OFx1OTM2OVx1OTM2Ylx1NmZjOVx1NmZhN1x1NmZiOVx1NmZiNlx1NmZjMlx1NmZlMVx1NmZlZVx1NmZkZVx1NmZlMFx1NmZlZlx1NzAxYVx1NzAyM1x1NzAxYlx1NzAzOVx1NzAzNVx1NzA0Zlx1NzA1ZVx1NWI4MFx1NWI4NFx1NWI5NVx1NWI5M1x1NWJhNVx1NWJiOFx1'@;
put 'NzUyZlx1OWE5ZVx1NjQzNFx1NWJlNFx1NWJlZVx1ODkzMFx1NWJmMFx1OGU0N1x1OGIwN1x1OGZiNlx1OGZkM1x1OGZkNVx1OGZlNVx1OGZlZVx1OGZlNFx1OGZlOVx1OGZlNlx1OGZmM1x1OGZlOFx1OTAwNVx1OTAwNFx1OTAwYlx1OTAyNlx1OTAxMVx1OTAwZFx1OTAxNlx1OTAyMVx1OTAz'@;
put 'NVx1OTAzNlx1OTAyZFx1OTAyZlx1OTA0NFx1OTA1MVx1OTA1Mlx1OTA1MFx1OTA2OFx1OTA1OFx1OTA2Mlx1OTA1Ylx1NjZiOVx1OTA3NFx1OTA3ZFx1OTA4Mlx1OTA4OFx1OTA4M1x1OTA4Ylx1NWY1MFx1NWY1N1x1NWY1Nlx1NWY1OFx1NWMzYlx1NTRhYlx1NWM1MFx1NWM1OVx1NWI3MVx1'@;
put 'NWM2M1x1NWM2Nlx1N2ZiY1x1NWYyYVx1NWYyOVx1NWYyZFx1ODI3NFx1NWYzY1x1OWIzYlx1NWM2ZVx1NTk4MVx1NTk4M1x1NTk4ZFx1NTlhOVx1NTlhYVx1NTlhM1x1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIyOV0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjI5XVt2XS5jaGFyQ29kZUF0'@;
put 'KDApJiYoc2Vba1syMjldW3ZdXT01ODYyNCt2LFRbNTg2MjQrdl09a1syMjldW3ZdKTtmb3Ioa1syMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzNmNcdTkzNmRcdTkzNmVcdTkzNmZcdTkzNzBcdTkzNzFcdTkzNzJcdTkzNzNc'@;
put 'dTkzNzRcdTkzNzVcdTkzNzZcdTkzNzdcdTkzNzhcdTkzNzlcdTkzN2FcdTkzN2JcdTkzN2NcdTkzN2RcdTkzN2VcdTkzN2ZcdTkzODBcdTkzODFcdTkzODJcdTkzODNcdTkzODRcdTkzODVcdTkzODZcdTkzODdcdTkzODhcdTkzODlcdTkzOGFcdTkzOGJcdTkzOGNcdTkzOGRcdTkzOGVcdTkz'@;
put 'OTBcdTkzOTFcdTkzOTJcdTkzOTNcdTkzOTRcdTkzOTVcdTkzOTZcdTkzOTdcdTkzOThcdTkzOTlcdTkzOWFcdTkzOWJcdTkzOWNcdTkzOWRcdTkzOWVcdTkzOWZcdTkzYTBcdTkzYTFcdTkzYTJcdTkzYTNcdTkzYTRcdTkzYTVcdTkzYTZcdTkzYTdcdTkzYThcdTkzYTlcdTkzYWFcdTkzYWJc'@;
put 'dWZmZmRcdTkzYWNcdTkzYWRcdTkzYWVcdTkzYWZcdTkzYjBcdTkzYjFcdTkzYjJcdTkzYjNcdTkzYjRcdTkzYjVcdTkzYjZcdTkzYjdcdTkzYjhcdTkzYjlcdTkzYmFcdTkzYmJcdTkzYmNcdTkzYmRcdTkzYmVcdTkzYmZcdTkzYzBcdTkzYzFcdTkzYzJcdTkzYzNcdTkzYzRcdTkzYzVcdTkz'@;
put 'YzZcdTkzYzdcdTkzYzhcdTkzYzlcdTkzY2JcdTkzY2NcdTkzY2RcdTU5OTdcdTU5Y2FcdTU5YWJcdTU5OWVcdTU5YTRcdTU5ZDJcdTU5YjJcdTU5YWZcdTU5ZDdcdTU5YmVcdTVhMDVcdTVhMDZcdTU5ZGRcdTVhMDhcdTU5ZTNcdTU5ZDhcdTU5ZjlcdTVhMGNcdTVhMDlcdTVhMzJcdTVhMzRc'@;
put 'dTVhMTFcdTVhMjNcdTVhMTNcdTVhNDBcdTVhNjdcdTVhNGFcdTVhNTVcdTVhM2NcdTVhNjJcdTVhNzVcdTgwZWNcdTVhYWFcdTVhOWJcdTVhNzdcdTVhN2FcdTVhYmVcdTVhZWJcdTVhYjJcdTVhZDJcdTVhZDRcdTVhYjhcdTVhZTBcdTVhZTNcdTVhZjFcdTVhZDZcdTVhZTZcdTVhZDhcdTVh'@;
put 'ZGNcdTViMDlcdTViMTdcdTViMTZcdTViMzJcdTViMzdcdTViNDBcdTVjMTVcdTVjMWNcdTViNWFcdTViNjVcdTViNzNcdTViNTFcdTViNTNcdTViNjJcdTlhNzVcdTlhNzdcdTlhNzhcdTlhN2FcdTlhN2ZcdTlhN2RcdTlhODBcdTlhODFcdTlhODVcdTlhODhcdTlhOGFcdTlhOTBcdTlhOTJc'@;
put 'dTlhOTNcdTlhOTZcdTlhOThcdTlhOWJcdTlhOWNcdTlhOWRcdTlhOWZcdTlhYTBcdTlhYTJcdTlhYTNcdTlhYTVcdTlhYTdcdTdlOWZcdTdlYTFcdTdlYTNcdTdlYTVcdTdlYThcdTdlYTlcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMzBdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIzMF1b'@;
put 'dl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjMwXVt2XV09NTg4ODArdixUWzU4ODgwK3ZdPWtbMjMwXVt2XSk7Zm9yKGtbMjMxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5M2NlXHU5M2NmXHU5M2QwXHU5M2QxXHU5M2QyXHU5M2Qz'@;
put 'XHU5M2Q0XHU5M2Q1XHU5M2Q3XHU5M2Q4XHU5M2Q5XHU5M2RhXHU5M2RiXHU5M2RjXHU5M2RkXHU5M2RlXHU5M2RmXHU5M2UwXHU5M2UxXHU5M2UyXHU5M2UzXHU5M2U0XHU5M2U1XHU5M2U2XHU5M2U3XHU5M2U4XHU5M2U5XHU5M2VhXHU5M2ViXHU5M2VjXHU5M2VkXHU5M2VlXHU5M2VmXHU5'@;
put 'M2YwXHU5M2YxXHU5M2YyXHU5M2YzXHU5M2Y0XHU5M2Y1XHU5M2Y2XHU5M2Y3XHU5M2Y4XHU5M2Y5XHU5M2ZhXHU5M2ZiXHU5M2ZjXHU5M2ZkXHU5M2ZlXHU5M2ZmXHU5NDAwXHU5NDAxXHU5NDAyXHU5NDAzXHU5NDA0XHU5NDA1XHU5NDA2XHU5NDA3XHU5NDA4XHU5NDA5XHU5NDBhXHU5NDBi'@;
put 'XHU5NDBjXHU5NDBkXHVmZmZkXHU5NDBlXHU5NDBmXHU5NDEwXHU5NDExXHU5NDEyXHU5NDEzXHU5NDE0XHU5NDE1XHU5NDE2XHU5NDE3XHU5NDE4XHU5NDE5XHU5NDFhXHU5NDFiXHU5NDFjXHU5NDFkXHU5NDFlXHU5NDFmXHU5NDIwXHU5NDIxXHU5NDIyXHU5NDIzXHU5NDI0XHU5NDI1XHU5'@;
put 'NDI2XHU5NDI3XHU5NDI4XHU5NDI5XHU5NDJhXHU5NDJiXHU5NDJjXHU5NDJkXHU5NDJlXHU3ZWFkXHU3ZWIwXHU3ZWJlXHU3ZWMwXHU3ZWMxXHU3ZWMyXHU3ZWM5XHU3ZWNiXHU3ZWNjXHU3ZWQwXHU3ZWQ0XHU3ZWQ3XHU3ZWRiXHU3ZWUwXHU3ZWUxXHU3ZWU4XHU3ZWViXHU3ZWVlXHU3ZWVm'@;
put 'XHU3ZWYxXHU3ZWYyXHU3ZjBkXHU3ZWY2XHU3ZWZhXHU3ZWZiXHU3ZWZlXHU3ZjAxXHU3ZjAyXHU3ZjAzXHU3ZjA3XHU3ZjA4XHU3ZjBiXHU3ZjBjXHU3ZjBmXHU3ZjExXHU3ZjEyXHU3ZjE3XHU3ZjE5XHU3ZjFjXHU3ZjFiXHU3ZjFmXHU3ZjIxXHU3ZjIyXHU3ZjIzXHU3ZjI0XHU3ZjI1XHU3'@;
put 'ZjI2XHU3ZjI3XHU3ZjJhXHU3ZjJiXHU3ZjJjXHU3ZjJkXHU3ZjJmXHU3ZjMwXHU3ZjMxXHU3ZjMyXHU3ZjMzXHU3ZjM1XHU1ZTdhXHU3NTdmXHU1ZGRiXHU3NTNlXHU5MDk1XHU3MzhlXHU3MzkxXHU3M2FlXHU3M2EyXHU3MzlmXHU3M2NmXHU3M2MyXHU3M2QxXHU3M2I3XHU3M2IzXHU3M2Mw'@;
put 'XHU3M2M5XHU3M2M4XHU3M2U1XHU3M2Q5XHU5ODdjXHU3NDBhXHU3M2U5XHU3M2U3XHU3M2RlXHU3M2JhXHU3M2YyXHU3NDBmXHU3NDJhXHU3NDViXHU3NDI2XHU3NDI1XHU3NDI4XHU3NDMwXHU3NDJlXHU3NDJjXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjMxXS5sZW5ndGg7Kyt2KTY1'@;
put 'NTMzIT09a1syMzFdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIzMV1bdl1dPTU5MTM2K3YsVFs1OTEzNit2XT1rWzIzMV1bdl0pO2ZvcihrWzIzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTQyZlx1OTQzMFx1OTQzMVx1OTQz'@;
put 'Mlx1OTQzM1x1OTQzNFx1OTQzNVx1OTQzNlx1OTQzN1x1OTQzOFx1OTQzOVx1OTQzYVx1OTQzYlx1OTQzY1x1OTQzZFx1OTQzZlx1OTQ0MFx1OTQ0MVx1OTQ0Mlx1OTQ0M1x1OTQ0NFx1OTQ0NVx1OTQ0Nlx1OTQ0N1x1OTQ0OFx1OTQ0OVx1OTQ0YVx1OTQ0Ylx1OTQ0Y1x1OTQ0ZFx1OTQ0ZVx1'@;
put 'OTQ0Zlx1OTQ1MFx1OTQ1MVx1OTQ1Mlx1OTQ1M1x1OTQ1NFx1OTQ1NVx1OTQ1Nlx1OTQ1N1x1OTQ1OFx1OTQ1OVx1OTQ1YVx1OTQ1Ylx1OTQ1Y1x1OTQ1ZFx1OTQ1ZVx1OTQ1Zlx1OTQ2MFx1OTQ2MVx1OTQ2Mlx1OTQ2M1x1OTQ2NFx1OTQ2NVx1OTQ2Nlx1OTQ2N1x1OTQ2OFx1OTQ2OVx1OTQ2'@;
put 'YVx1OTQ2Y1x1OTQ2ZFx1OTQ2ZVx1OTQ2Zlx1ZmZmZFx1OTQ3MFx1OTQ3MVx1OTQ3Mlx1OTQ3M1x1OTQ3NFx1OTQ3NVx1OTQ3Nlx1OTQ3N1x1OTQ3OFx1OTQ3OVx1OTQ3YVx1OTQ3Ylx1OTQ3Y1x1OTQ3ZFx1OTQ3ZVx1OTQ3Zlx1OTQ4MFx1OTQ4MVx1OTQ4Mlx1OTQ4M1x1OTQ4NFx1OTQ5MVx1'@;
put 'OTQ5Nlx1OTQ5OFx1OTRjN1x1OTRjZlx1OTRkM1x1OTRkNFx1OTRkYVx1OTRlNlx1OTRmYlx1OTUxY1x1OTUyMFx1NzQxYlx1NzQxYVx1NzQ0MVx1NzQ1Y1x1NzQ1N1x1NzQ1NVx1NzQ1OVx1NzQ3N1x1NzQ2ZFx1NzQ3ZVx1NzQ5Y1x1NzQ4ZVx1NzQ4MFx1NzQ4MVx1NzQ4N1x1NzQ4Ylx1NzQ5'@;
put 'ZVx1NzRhOFx1NzRhOVx1NzQ5MFx1NzRhN1x1NzRkMlx1NzRiYVx1OTdlYVx1OTdlYlx1OTdlY1x1Njc0Y1x1Njc1M1x1Njc1ZVx1Njc0OFx1Njc2OVx1NjdhNVx1Njc4N1x1Njc2YVx1Njc3M1x1Njc5OFx1NjdhN1x1Njc3NVx1NjdhOFx1Njc5ZVx1NjdhZFx1Njc4Ylx1Njc3N1x1Njc3Y1x1'@;
put 'NjdmMFx1NjgwOVx1NjdkOFx1NjgwYVx1NjdlOVx1NjdiMFx1NjgwY1x1NjdkOVx1NjdiNVx1NjdkYVx1NjdiM1x1NjdkZFx1NjgwMFx1NjdjM1x1NjdiOFx1NjdlMlx1NjgwZVx1NjdjMVx1NjdmZFx1NjgzMlx1NjgzM1x1Njg2MFx1Njg2MVx1Njg0ZVx1Njg2Mlx1Njg0NFx1Njg2NFx1Njg4'@;
put 'M1x1NjgxZFx1Njg1NVx1Njg2Nlx1Njg0MVx1Njg2N1x1Njg0MFx1NjgzZVx1Njg0YVx1Njg0OVx1NjgyOVx1NjhiNVx1Njg4Zlx1Njg3NFx1Njg3N1x1Njg5M1x1Njg2Ylx1NjhjMlx1Njk2ZVx1NjhmY1x1NjkxZlx1NjkyMFx1NjhmOVx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIzMl0u'@;
put 'bGVuZ3RoOysrdik2NTUzMyE9PWtbMjMyXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMzJdW3ZdXT01OTM5Mit2LFRbNTkzOTIrdl09a1syMzJdW3ZdKTtmb3Ioa1syMzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk1MjdcdTk1'@;
put 'MzNcdTk1M2RcdTk1NDNcdTk1NDhcdTk1NGJcdTk1NTVcdTk1NWFcdTk1NjBcdTk1NmVcdTk1NzRcdTk1NzVcdTk1NzdcdTk1NzhcdTk1NzlcdTk1N2FcdTk1N2JcdTk1N2NcdTk1N2RcdTk1N2VcdTk1ODBcdTk1ODFcdTk1ODJcdTk1ODNcdTk1ODRcdTk1ODVcdTk1ODZcdTk1ODdcdTk1ODhc'@;
put 'dTk1ODlcdTk1OGFcdTk1OGJcdTk1OGNcdTk1OGRcdTk1OGVcdTk1OGZcdTk1OTBcdTk1OTFcdTk1OTJcdTk1OTNcdTk1OTRcdTk1OTVcdTk1OTZcdTk1OTdcdTk1OThcdTk1OTlcdTk1OWFcdTk1OWJcdTk1OWNcdTk1OWRcdTk1OWVcdTk1OWZcdTk1YTBcdTk1YTFcdTk1YTJcdTk1YTNcdTk1'@;
put 'YTRcdTk1YTVcdTk1YTZcdTk1YTdcdTk1YThcdTk1YTlcdTk1YWFcdWZmZmRcdTk1YWJcdTk1YWNcdTk1YWRcdTk1YWVcdTk1YWZcdTk1YjBcdTk1YjFcdTk1YjJcdTk1YjNcdTk1YjRcdTk1YjVcdTk1YjZcdTk1YjdcdTk1YjhcdTk1YjlcdTk1YmFcdTk1YmJcdTk1YmNcdTk1YmRcdTk1YmVc'@;
put 'dTk1YmZcdTk1YzBcdTk1YzFcdTk1YzJcdTk1YzNcdTk1YzRcdTk1YzVcdTk1YzZcdTk1YzdcdTk1YzhcdTk1YzlcdTk1Y2FcdTk1Y2JcdTY5MjRcdTY4ZjBcdTY5MGJcdTY5MDFcdTY5NTdcdTY4ZTNcdTY5MTBcdTY5NzFcdTY5MzlcdTY5NjBcdTY5NDJcdTY5NWRcdTY5ODRcdTY5NmJcdTY5'@;
put 'ODBcdTY5OThcdTY5NzhcdTY5MzRcdTY5Y2NcdTY5ODdcdTY5ODhcdTY5Y2VcdTY5ODlcdTY5NjZcdTY5NjNcdTY5NzlcdTY5OWJcdTY5YTdcdTY5YmJcdTY5YWJcdTY5YWRcdTY5ZDRcdTY5YjFcdTY5YzFcdTY5Y2FcdTY5ZGZcdTY5OTVcdTY5ZTBcdTY5OGRcdTY5ZmZcdTZhMmZcdTY5ZWRc'@;
put 'dTZhMTdcdTZhMThcdTZhNjVcdTY5ZjJcdTZhNDRcdTZhM2VcdTZhYTBcdTZhNTBcdTZhNWJcdTZhMzVcdTZhOGVcdTZhNzlcdTZhM2RcdTZhMjhcdTZhNThcdTZhN2NcdTZhOTFcdTZhOTBcdTZhYTlcdTZhOTdcdTZhYWJcdTczMzdcdTczNTJcdTZiODFcdTZiODJcdTZiODdcdTZiODRcdTZi'@;
put 'OTJcdTZiOTNcdTZiOGRcdTZiOWFcdTZiOWJcdTZiYTFcdTZiYWFcdThmNmJcdThmNmRcdThmNzFcdThmNzJcdThmNzNcdThmNzVcdThmNzZcdThmNzhcdThmNzdcdThmNzlcdThmN2FcdThmN2NcdThmN2VcdThmODFcdThmODJcdThmODRcdThmODdcdThmOGJcdWZmZmQiLnNwbGl0KCIiKSx2'@;
put 'PTA7diE9a1syMzNdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIzM11bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjMzXVt2XV09NTk2NDgrdixUWzU5NjQ4K3ZdPWtbMjMzXVt2XSk7Zm9yKGtbMjM0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHU5NWNjXHU5NWNkXHU5NWNlXHU5NWNmXHU5NWQwXHU5NWQxXHU5NWQyXHU5NWQzXHU5NWQ0XHU5NWQ1XHU5NWQ2XHU5NWQ3XHU5NWQ4XHU5NWQ5XHU5NWRhXHU5NWRiXHU5NWRjXHU5NWRkXHU5NWRlXHU5NWRmXHU5NWUwXHU5NWUxXHU5NWUyXHU5NWUzXHU5NWU0XHU5NWU1XHU5NWU2'@;
put 'XHU5NWU3XHU5NWVjXHU5NWZmXHU5NjA3XHU5NjEzXHU5NjE4XHU5NjFiXHU5NjFlXHU5NjIwXHU5NjIzXHU5NjI0XHU5NjI1XHU5NjI2XHU5NjI3XHU5NjI4XHU5NjI5XHU5NjJiXHU5NjJjXHU5NjJkXHU5NjJmXHU5NjMwXHU5NjM3XHU5NjM4XHU5NjM5XHU5NjNhXHU5NjNlXHU5NjQxXHU5'@;
put 'NjQzXHU5NjRhXHU5NjRlXHU5NjRmXHU5NjUxXHU5NjUyXHU5NjUzXHU5NjU2XHU5NjU3XHVmZmZkXHU5NjU4XHU5NjU5XHU5NjVhXHU5NjVjXHU5NjVkXHU5NjVlXHU5NjYwXHU5NjYzXHU5NjY1XHU5NjY2XHU5NjZiXHU5NjZkXHU5NjZlXHU5NjZmXHU5NjcwXHU5NjcxXHU5NjczXHU5Njc4'@;
put 'XHU5Njc5XHU5NjdhXHU5NjdiXHU5NjdjXHU5NjdkXHU5NjdlXHU5NjdmXHU5NjgwXHU5NjgxXHU5NjgyXHU5NjgzXHU5Njg0XHU5Njg3XHU5Njg5XHU5NjhhXHU4ZjhkXHU4ZjhlXHU4ZjhmXHU4Zjk4XHU4ZjlhXHU4ZWNlXHU2MjBiXHU2MjE3XHU2MjFiXHU2MjFmXHU2MjIyXHU2MjIxXHU2'@;
put 'MjI1XHU2MjI0XHU2MjJjXHU4MWU3XHU3NGVmXHU3NGY0XHU3NGZmXHU3NTBmXHU3NTExXHU3NTEzXHU2NTM0XHU2NWVlXHU2NWVmXHU2NWYwXHU2NjBhXHU2NjE5XHU2NzcyXHU2NjAzXHU2NjE1XHU2NjAwXHU3MDg1XHU2NmY3XHU2NjFkXHU2NjM0XHU2NjMxXHU2NjM2XHU2NjM1XHU4MDA2'@;
put 'XHU2NjVmXHU2NjU0XHU2NjQxXHU2NjRmXHU2NjU2XHU2NjYxXHU2NjU3XHU2Njc3XHU2Njg0XHU2NjhjXHU2NmE3XHU2NjlkXHU2NmJlXHU2NmRiXHU2NmRjXHU2NmU2XHU2NmU5XHU4ZDMyXHU4ZDMzXHU4ZDM2XHU4ZDNiXHU4ZDNkXHU4ZDQwXHU4ZDQ1XHU4ZDQ2XHU4ZDQ4XHU4ZDQ5XHU4'@;
put 'ZDQ3XHU4ZDRkXHU4ZDU1XHU4ZDU5XHU4OWM3XHU4OWNhXHU4OWNiXHU4OWNjXHU4OWNlXHU4OWNmXHU4OWQwXHU4OWQxXHU3MjZlXHU3MjlmXHU3MjVkXHU3MjY2XHU3MjZmXHU3MjdlXHU3MjdmXHU3Mjg0XHU3MjhiXHU3MjhkXHU3MjhmXHU3MjkyXHU2MzA4XHU2MzMyXHU2M2IwXHVmZmZk'@;
put 'Ii5zcGxpdCgiIiksdj0wO3YhPWtbMjM0XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMzRdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIzNF1bdl1dPTU5OTA0K3YsVFs1OTkwNCt2XT1rWzIzNF1bdl0pO2ZvcihrWzIzNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY4Y1x1OTY4ZVx1OTY5MVx1OTY5Mlx1OTY5M1x1OTY5NVx1OTY5Nlx1OTY5YVx1OTY5Ylx1OTY5ZFx1OTY5ZVx1OTY5Zlx1OTZhMFx1OTZhMVx1OTZhMlx1OTZhM1x1OTZhNFx1OTZhNVx1OTZhNlx1OTZhOFx1OTZhOVx1OTZhYVx1OTZhYlx1OTZhY1x1OTZh'@;
put 'ZFx1OTZhZVx1OTZhZlx1OTZiMVx1OTZiMlx1OTZiNFx1OTZiNVx1OTZiN1x1OTZiOFx1OTZiYVx1OTZiYlx1OTZiZlx1OTZjMlx1OTZjM1x1OTZjOFx1OTZjYVx1OTZjYlx1OTZkMFx1OTZkMVx1OTZkM1x1OTZkNFx1OTZkNlx1OTZkN1x1OTZkOFx1OTZkOVx1OTZkYVx1OTZkYlx1OTZkY1x1'@;
put 'OTZkZFx1OTZkZVx1OTZkZlx1OTZlMVx1OTZlMlx1OTZlM1x1OTZlNFx1OTZlNVx1OTZlNlx1OTZlN1x1OTZlYlx1ZmZmZFx1OTZlY1x1OTZlZFx1OTZlZVx1OTZmMFx1OTZmMVx1OTZmMlx1OTZmNFx1OTZmNVx1OTZmOFx1OTZmYVx1OTZmYlx1OTZmY1x1OTZmZFx1OTZmZlx1OTcwMlx1OTcw'@;
put 'M1x1OTcwNVx1OTcwYVx1OTcwYlx1OTcwY1x1OTcxMFx1OTcxMVx1OTcxMlx1OTcxNFx1OTcxNVx1OTcxN1x1OTcxOFx1OTcxOVx1OTcxYVx1OTcxYlx1OTcxZFx1OTcxZlx1OTcyMFx1NjQzZlx1NjRkOFx1ODAwNFx1NmJlYVx1NmJmM1x1NmJmZFx1NmJmNVx1NmJmOVx1NmMwNVx1NmMwN1x1'@;
put 'NmMwNlx1NmMwZFx1NmMxNVx1NmMxOFx1NmMxOVx1NmMxYVx1NmMyMVx1NmMyOVx1NmMyNFx1NmMyYVx1NmMzMlx1NjUzNVx1NjU1NVx1NjU2Ylx1NzI0ZFx1NzI1Mlx1NzI1Nlx1NzIzMFx1ODY2Mlx1NTIxNlx1ODA5Zlx1ODA5Y1x1ODA5M1x1ODBiY1x1NjcwYVx1ODBiZFx1ODBiMVx1ODBh'@;
put 'Ylx1ODBhZFx1ODBiNFx1ODBiN1x1ODBlN1x1ODBlOFx1ODBlOVx1ODBlYVx1ODBkYlx1ODBjMlx1ODBjNFx1ODBkOVx1ODBjZFx1ODBkN1x1NjcxMFx1ODBkZFx1ODBlYlx1ODBmMVx1ODBmNFx1ODBlZFx1ODEwZFx1ODEwZVx1ODBmMlx1ODBmY1x1NjcxNVx1ODExMlx1OGM1YVx1ODEzNlx1'@;
put 'ODExZVx1ODEyY1x1ODExOFx1ODEzMlx1ODE0OFx1ODE0Y1x1ODE1M1x1ODE3NFx1ODE1OVx1ODE1YVx1ODE3MVx1ODE2MFx1ODE2OVx1ODE3Y1x1ODE3ZFx1ODE2ZFx1ODE2N1x1NTg0ZFx1NWFiNVx1ODE4OFx1ODE4Mlx1ODE5MVx1NmVkNVx1ODFhM1x1ODFhYVx1ODFjY1x1NjcyNlx1ODFj'@;
put 'YVx1ODFiYlx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIzNV0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjM1XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMzVdW3ZdXT02MDE2MCt2LFRbNjAxNjArdl09a1syMzVdW3ZdKTtmb3Ioa1syMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk3MjFcdTk3MjJcdTk3MjNcdTk3MjRcdTk3MjVcdTk3MjZcdTk3MjdcdTk3MjhcdTk3MjlcdTk3MmJcdTk3MmNcdTk3MmVcdTk3MmZcdTk3MzFcdTk3MzNcdTk3MzRcdTk3MzVcdTk3MzZcdTk3MzdcdTk3M2FcdTk3M2JcdTk3M2NcdTk3'@;
put 'M2RcdTk3M2ZcdTk3NDBcdTk3NDFcdTk3NDJcdTk3NDNcdTk3NDRcdTk3NDVcdTk3NDZcdTk3NDdcdTk3NDhcdTk3NDlcdTk3NGFcdTk3NGJcdTk3NGNcdTk3NGRcdTk3NGVcdTk3NGZcdTk3NTBcdTk3NTFcdTk3NTRcdTk3NTVcdTk3NTdcdTk3NThcdTk3NWFcdTk3NWNcdTk3NWRcdTk3NWZc'@;
put 'dTk3NjNcdTk3NjRcdTk3NjZcdTk3NjdcdTk3NjhcdTk3NmFcdTk3NmJcdTk3NmNcdTk3NmRcdTk3NmVcdTk3NmZcdTk3NzBcdTk3NzFcdWZmZmRcdTk3NzJcdTk3NzVcdTk3NzdcdTk3NzhcdTk3NzlcdTk3N2FcdTk3N2JcdTk3N2RcdTk3N2VcdTk3N2ZcdTk3ODBcdTk3ODFcdTk3ODJcdTk3'@;
put 'ODNcdTk3ODRcdTk3ODZcdTk3ODdcdTk3ODhcdTk3ODlcdTk3OGFcdTk3OGNcdTk3OGVcdTk3OGZcdTk3OTBcdTk3OTNcdTk3OTVcdTk3OTZcdTk3OTdcdTk3OTlcdTk3OWFcdTk3OWJcdTk3OWNcdTk3OWRcdTgxYzFcdTgxYTZcdTZiMjRcdTZiMzdcdTZiMzlcdTZiNDNcdTZiNDZcdTZiNTlc'@;
put 'dTk4ZDFcdTk4ZDJcdTk4ZDNcdTk4ZDVcdTk4ZDlcdTk4ZGFcdTZiYjNcdTVmNDBcdTZiYzJcdTg5ZjNcdTY1OTBcdTlmNTFcdTY1OTNcdTY1YmNcdTY1YzZcdTY1YzRcdTY1YzNcdTY1Y2NcdTY1Y2VcdTY1ZDJcdTY1ZDZcdTcwODBcdTcwOWNcdTcwOTZcdTcwOWRcdTcwYmJcdTcwYzBcdTcw'@;
put 'YjdcdTcwYWJcdTcwYjFcdTcwZThcdTcwY2FcdTcxMTBcdTcxMTNcdTcxMTZcdTcxMmZcdTcxMzFcdTcxNzNcdTcxNWNcdTcxNjhcdTcxNDVcdTcxNzJcdTcxNGFcdTcxNzhcdTcxN2FcdTcxOThcdTcxYjNcdTcxYjVcdTcxYThcdTcxYTBcdTcxZTBcdTcxZDRcdTcxZTdcdTcxZjlcdTcyMWRc'@;
put 'dTcyMjhcdTcwNmNcdTcxMThcdTcxNjZcdTcxYjlcdTYyM2VcdTYyM2RcdTYyNDNcdTYyNDhcdTYyNDlcdTc5M2JcdTc5NDBcdTc5NDZcdTc5NDlcdTc5NWJcdTc5NWNcdTc5NTNcdTc5NWFcdTc5NjJcdTc5NTdcdTc5NjBcdTc5NmZcdTc5NjdcdTc5N2FcdTc5ODVcdTc5OGFcdTc5OWFcdTc5'@;
put 'YTdcdTc5YjNcdTVmZDFcdTVmZDBcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMzZdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIzNl1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjM2XVt2XV09NjA0MTYrdixUWzYwNDE2K3ZdPWtbMjM2XVt2XSk7Zm9yKGtbMjM3XT0iXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NzllXHU5NzlmXHU5N2ExXHU5N2EyXHU5N2E0XHU5N2E1XHU5N2E2XHU5N2E3XHU5N2E4XHU5N2E5XHU5N2FhXHU5N2FjXHU5N2FlXHU5N2IwXHU5N2IxXHU5N2IzXHU5N2I1XHU5N2I2XHU5N2I3XHU5N2I4XHU5'@;
put 'N2I5XHU5N2JhXHU5N2JiXHU5N2JjXHU5N2JkXHU5N2JlXHU5N2JmXHU5N2MwXHU5N2MxXHU5N2MyXHU5N2MzXHU5N2M0XHU5N2M1XHU5N2M2XHU5N2M3XHU5N2M4XHU5N2M5XHU5N2NhXHU5N2NiXHU5N2NjXHU5N2NkXHU5N2NlXHU5N2NmXHU5N2QwXHU5N2QxXHU5N2QyXHU5N2QzXHU5N2Q0'@;
put 'XHU5N2Q1XHU5N2Q2XHU5N2Q3XHU5N2Q4XHU5N2Q5XHU5N2RhXHU5N2RiXHU5N2RjXHU5N2RkXHU5N2RlXHU5N2RmXHU5N2UwXHU5N2UxXHU5N2UyXHU5N2UzXHVmZmZkXHU5N2U0XHU5N2U1XHU5N2U4XHU5N2VlXHU5N2VmXHU5N2YwXHU5N2YxXHU5N2YyXHU5N2Y0XHU5N2Y3XHU5N2Y4XHU5'@;
put 'N2Y5XHU5N2ZhXHU5N2ZiXHU5N2ZjXHU5N2ZkXHU5N2ZlXHU5N2ZmXHU5ODAwXHU5ODAxXHU5ODAyXHU5ODAzXHU5ODA0XHU5ODA1XHU5ODA2XHU5ODA3XHU5ODA4XHU5ODA5XHU5ODBhXHU5ODBiXHU5ODBjXHU5ODBkXHU5ODBlXHU2MDNjXHU2MDVkXHU2MDVhXHU2MDY3XHU2MDQxXHU2MDU5'@;
put 'XHU2MDYzXHU2MGFiXHU2MTA2XHU2MTBkXHU2MTVkXHU2MWE5XHU2MTlkXHU2MWNiXHU2MWQxXHU2MjA2XHU4MDgwXHU4MDdmXHU2YzkzXHU2Y2Y2XHU2ZGZjXHU3N2Y2XHU3N2Y4XHU3ODAwXHU3ODA5XHU3ODE3XHU3ODE4XHU3ODExXHU2NWFiXHU3ODJkXHU3ODFjXHU3ODFkXHU3ODM5XHU3'@;
put 'ODNhXHU3ODNiXHU3ODFmXHU3ODNjXHU3ODI1XHU3ODJjXHU3ODIzXHU3ODI5XHU3ODRlXHU3ODZkXHU3ODU2XHU3ODU3XHU3ODI2XHU3ODUwXHU3ODQ3XHU3ODRjXHU3ODZhXHU3ODliXHU3ODkzXHU3ODlhXHU3ODg3XHU3ODljXHU3OGExXHU3OGEzXHU3OGIyXHU3OGI5XHU3OGE1XHU3OGQ0'@;
put 'XHU3OGQ5XHU3OGM5XHU3OGVjXHU3OGYyXHU3OTA1XHU3OGY0XHU3OTEzXHU3OTI0XHU3OTFlXHU3OTM0XHU5ZjliXHU5ZWY5XHU5ZWZiXHU5ZWZjXHU3NmYxXHU3NzA0XHU3NzBkXHU3NmY5XHU3NzA3XHU3NzA4XHU3NzFhXHU3NzIyXHU3NzE5XHU3NzJkXHU3NzI2XHU3NzM1XHU3NzM4XHU3'@;
put 'NzUwXHU3NzUxXHU3NzQ3XHU3NzQzXHU3NzVhXHU3NzY4XHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjM3XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMzddW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIzN11bdl1dPTYwNjcyK3YsVFs2MDY3Mit2XT1rWzIzN11bdl0pO2ZvcihrWzIzOF09'@;
put 'Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTgwZlx1OTgxMFx1OTgxMVx1OTgxMlx1OTgxM1x1OTgxNFx1OTgxNVx1OTgxNlx1OTgxN1x1OTgxOFx1OTgxOVx1OTgxYVx1OTgxYlx1OTgxY1x1OTgxZFx1OTgxZVx1OTgxZlx1OTgyMFx1'@;
put 'OTgyMVx1OTgyMlx1OTgyM1x1OTgyNFx1OTgyNVx1OTgyNlx1OTgyN1x1OTgyOFx1OTgyOVx1OTgyYVx1OTgyYlx1OTgyY1x1OTgyZFx1OTgyZVx1OTgyZlx1OTgzMFx1OTgzMVx1OTgzMlx1OTgzM1x1OTgzNFx1OTgzNVx1OTgzNlx1OTgzN1x1OTgzOFx1OTgzOVx1OTgzYVx1OTgzYlx1OTgz'@;
put 'Y1x1OTgzZFx1OTgzZVx1OTgzZlx1OTg0MFx1OTg0MVx1OTg0Mlx1OTg0M1x1OTg0NFx1OTg0NVx1OTg0Nlx1OTg0N1x1OTg0OFx1OTg0OVx1OTg0YVx1OTg0Ylx1OTg0Y1x1OTg0ZFx1ZmZmZFx1OTg0ZVx1OTg0Zlx1OTg1MFx1OTg1MVx1OTg1Mlx1OTg1M1x1OTg1NFx1OTg1NVx1OTg1Nlx1'@;
put 'OTg1N1x1OTg1OFx1OTg1OVx1OTg1YVx1OTg1Ylx1OTg1Y1x1OTg1ZFx1OTg1ZVx1OTg1Zlx1OTg2MFx1OTg2MVx1OTg2Mlx1OTg2M1x1OTg2NFx1OTg2NVx1OTg2Nlx1OTg2N1x1OTg2OFx1OTg2OVx1OTg2YVx1OTg2Ylx1OTg2Y1x1OTg2ZFx1OTg2ZVx1Nzc2Mlx1Nzc2NVx1Nzc3Zlx1Nzc4'@;
put 'ZFx1Nzc3ZFx1Nzc4MFx1Nzc4Y1x1Nzc5MVx1Nzc5Zlx1NzdhMFx1NzdiMFx1NzdiNVx1NzdiZFx1NzUzYVx1NzU0MFx1NzU0ZVx1NzU0Ylx1NzU0OFx1NzU1Ylx1NzU3Mlx1NzU3OVx1NzU4M1x1N2Y1OFx1N2Y2MVx1N2Y1Zlx1OGE0OFx1N2Y2OFx1N2Y3NFx1N2Y3MVx1N2Y3OVx1N2Y4MVx1'@;
put 'N2Y3ZVx1NzZjZFx1NzZlNVx1ODgzMlx1OTQ4NVx1OTQ4Nlx1OTQ4N1x1OTQ4Ylx1OTQ4YVx1OTQ4Y1x1OTQ4ZFx1OTQ4Zlx1OTQ5MFx1OTQ5NFx1OTQ5N1x1OTQ5NVx1OTQ5YVx1OTQ5Ylx1OTQ5Y1x1OTRhM1x1OTRhNFx1OTRhYlx1OTRhYVx1OTRhZFx1OTRhY1x1OTRhZlx1OTRiMFx1OTRi'@;
put 'Mlx1OTRiNFx1OTRiNlx1OTRiN1x1OTRiOFx1OTRiOVx1OTRiYVx1OTRiY1x1OTRiZFx1OTRiZlx1OTRjNFx1OTRjOFx1OTRjOVx1OTRjYVx1OTRjYlx1OTRjY1x1OTRjZFx1OTRjZVx1OTRkMFx1OTRkMVx1OTRkMlx1OTRkNVx1OTRkNlx1OTRkN1x1OTRkOVx1OTRkOFx1OTRkYlx1OTRkZVx1'@;
put 'OTRkZlx1OTRlMFx1OTRlMlx1OTRlNFx1OTRlNVx1OTRlN1x1OTRlOFx1OTRlYVx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIzOF0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjM4XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMzhdW3ZdXT02MDkyOCt2LFRbNjA5Mjgrdl09a1syMzhdW3Zd'@;
put 'KTtmb3Ioa1syMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk4NmZcdTk4NzBcdTk4NzFcdTk4NzJcdTk4NzNcdTk4NzRcdTk4OGJcdTk4OGVcdTk4OTJcdTk4OTVcdTk4OTlcdTk4YTNcdTk4YThcdTk4YTlcdTk4YWFcdTk4YWJc'@;
put 'dTk4YWNcdTk4YWRcdTk4YWVcdTk4YWZcdTk4YjBcdTk4YjFcdTk4YjJcdTk4YjNcdTk4YjRcdTk4YjVcdTk4YjZcdTk4YjdcdTk4YjhcdTk4YjlcdTk4YmFcdTk4YmJcdTk4YmNcdTk4YmRcdTk4YmVcdTk4YmZcdTk4YzBcdTk4YzFcdTk4YzJcdTk4YzNcdTk4YzRcdTk4YzVcdTk4YzZcdTk4'@;
put 'YzdcdTk4YzhcdTk4YzlcdTk4Y2FcdTk4Y2JcdTk4Y2NcdTk4Y2RcdTk4Y2ZcdTk4ZDBcdTk4ZDRcdTk4ZDZcdTk4ZDdcdTk4ZGJcdTk4ZGNcdTk4ZGRcdTk4ZTBcdTk4ZTFcdTk4ZTJcdTk4ZTNcdTk4ZTRcdWZmZmRcdTk4ZTVcdTk4ZTZcdTk4ZTlcdTk4ZWFcdTk4ZWJcdTk4ZWNcdTk4ZWRc'@;
put 'dTk4ZWVcdTk4ZWZcdTk4ZjBcdTk4ZjFcdTk4ZjJcdTk4ZjNcdTk4ZjRcdTk4ZjVcdTk4ZjZcdTk4ZjdcdTk4ZjhcdTk4ZjlcdTk4ZmFcdTk4ZmJcdTk4ZmNcdTk4ZmRcdTk4ZmVcdTk4ZmZcdTk5MDBcdTk5MDFcdTk5MDJcdTk5MDNcdTk5MDRcdTk5MDVcdTk5MDZcdTk5MDdcdTk0ZTlcdTk0'@;
put 'ZWJcdTk0ZWVcdTk0ZWZcdTk0ZjNcdTk0ZjRcdTk0ZjVcdTk0ZjdcdTk0ZjlcdTk0ZmNcdTk0ZmRcdTk0ZmZcdTk1MDNcdTk1MDJcdTk1MDZcdTk1MDdcdTk1MDlcdTk1MGFcdTk1MGRcdTk1MGVcdTk1MGZcdTk1MTJcdTk1MTNcdTk1MTRcdTk1MTVcdTk1MTZcdTk1MThcdTk1MWJcdTk1MWRc'@;
put 'dTk1MWVcdTk1MWZcdTk1MjJcdTk1MmFcdTk1MmJcdTk1MjlcdTk1MmNcdTk1MzFcdTk1MzJcdTk1MzRcdTk1MzZcdTk1MzdcdTk1MzhcdTk1M2NcdTk1M2VcdTk1M2ZcdTk1NDJcdTk1MzVcdTk1NDRcdTk1NDVcdTk1NDZcdTk1NDlcdTk1NGNcdTk1NGVcdTk1NGZcdTk1NTJcdTk1NTNcdTk1'@;
put 'NTRcdTk1NTZcdTk1NTdcdTk1NThcdTk1NTlcdTk1NWJcdTk1NWVcdTk1NWZcdTk1NWRcdTk1NjFcdTk1NjJcdTk1NjRcdTk1NjVcdTk1NjZcdTk1NjdcdTk1NjhcdTk1NjlcdTk1NmFcdTk1NmJcdTk1NmNcdTk1NmZcdTk1NzFcdTk1NzJcdTk1NzNcdTk1M2FcdTc3ZTdcdTc3ZWNcdTk2Yzlc'@;
put 'dTc5ZDVcdTc5ZWRcdTc5ZTNcdTc5ZWJcdTdhMDZcdTVkNDdcdTdhMDNcdTdhMDJcdTdhMWVcdTdhMTRcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMzldLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIzOV1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjM5XVt2XV09NjExODQrdixUWzYxMTg0'@;
put 'K3ZdPWtbMjM5XVt2XSk7Zm9yKGtbMjQwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5OTA4XHU5OTA5XHU5OTBhXHU5OTBiXHU5OTBjXHU5OTBlXHU5OTBmXHU5OTExXHU5OTEyXHU5OTEzXHU5OTE0XHU5OTE1XHU5OTE2XHU5OTE3'@;
put 'XHU5OTE4XHU5OTE5XHU5OTFhXHU5OTFiXHU5OTFjXHU5OTFkXHU5OTFlXHU5OTFmXHU5OTIwXHU5OTIxXHU5OTIyXHU5OTIzXHU5OTI0XHU5OTI1XHU5OTI2XHU5OTI3XHU5OTI4XHU5OTI5XHU5OTJhXHU5OTJiXHU5OTJjXHU5OTJkXHU5OTJmXHU5OTMwXHU5OTMxXHU5OTMyXHU5OTMzXHU5'@;
put 'OTM0XHU5OTM1XHU5OTM2XHU5OTM3XHU5OTM4XHU5OTM5XHU5OTNhXHU5OTNiXHU5OTNjXHU5OTNkXHU5OTNlXHU5OTNmXHU5OTQwXHU5OTQxXHU5OTQyXHU5OTQzXHU5OTQ0XHU5OTQ1XHU5OTQ2XHU5OTQ3XHU5OTQ4XHU5OTQ5XHVmZmZkXHU5OTRhXHU5OTRiXHU5OTRjXHU5OTRkXHU5OTRl'@;
put 'XHU5OTRmXHU5OTUwXHU5OTUxXHU5OTUyXHU5OTUzXHU5OTU2XHU5OTU3XHU5OTU4XHU5OTU5XHU5OTVhXHU5OTViXHU5OTVjXHU5OTVkXHU5OTVlXHU5OTVmXHU5OTYwXHU5OTYxXHU5OTYyXHU5OTY0XHU5OTY2XHU5OTczXHU5OTc4XHU5OTc5XHU5OTdiXHU5OTdlXHU5OTgyXHU5OTgzXHU5'@;
put 'OTg5XHU3YTM5XHU3YTM3XHU3YTUxXHU5ZWNmXHU5OWE1XHU3YTcwXHU3Njg4XHU3NjhlXHU3NjkzXHU3Njk5XHU3NmE0XHU3NGRlXHU3NGUwXHU3NTJjXHU5ZTIwXHU5ZTIyXHU5ZTI4XHU5ZTI5XHU5ZTJhXHU5ZTJiXHU5ZTJjXHU5ZTMyXHU5ZTMxXHU5ZTM2XHU5ZTM4XHU5ZTM3XHU5ZTM5'@;
put 'XHU5ZTNhXHU5ZTNlXHU5ZTQxXHU5ZTQyXHU5ZTQ0XHU5ZTQ2XHU5ZTQ3XHU5ZTQ4XHU5ZTQ5XHU5ZTRiXHU5ZTRjXHU5ZTRlXHU5ZTUxXHU5ZTU1XHU5ZTU3XHU5ZTVhXHU5ZTViXHU5ZTVjXHU5ZTVlXHU5ZTYzXHU5ZTY2XHU5ZTY3XHU5ZTY4XHU5ZTY5XHU5ZTZhXHU5ZTZiXHU5ZTZjXHU5'@;
put 'ZTcxXHU5ZTZkXHU5ZTczXHU3NTkyXHU3NTk0XHU3NTk2XHU3NWEwXHU3NTlkXHU3NWFjXHU3NWEzXHU3NWIzXHU3NWI0XHU3NWI4XHU3NWM0XHU3NWIxXHU3NWIwXHU3NWMzXHU3NWMyXHU3NWQ2XHU3NWNkXHU3NWUzXHU3NWU4XHU3NWU2XHU3NWU0XHU3NWViXHU3NWU3XHU3NjAzXHU3NWYx'@;
put 'XHU3NWZjXHU3NWZmXHU3NjEwXHU3NjAwXHU3NjA1XHU3NjBjXHU3NjE3XHU3NjBhXHU3NjI1XHU3NjE4XHU3NjE1XHU3NjE5XHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjQwXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syNDBdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzI0MF1bdl1dPTYx'@;
put 'NDQwK3YsVFs2MTQ0MCt2XT1rWzI0MF1bdl0pO2ZvcihrWzI0MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTk4Y1x1OTk4ZVx1OTk5YVx1OTk5Ylx1OTk5Y1x1OTk5ZFx1OTk5ZVx1OTk5Zlx1OTlhMFx1OTlhMVx1OTlhMlx1OTlh'@;
put 'M1x1OTlhNFx1OTlhNlx1OTlhN1x1OTlhOVx1OTlhYVx1OTlhYlx1OTlhY1x1OTlhZFx1OTlhZVx1OTlhZlx1OTliMFx1OTliMVx1OTliMlx1OTliM1x1OTliNFx1OTliNVx1OTliNlx1OTliN1x1OTliOFx1OTliOVx1OTliYVx1OTliYlx1OTliY1x1OTliZFx1OTliZVx1OTliZlx1OTljMFx1'@;
put 'OTljMVx1OTljMlx1OTljM1x1OTljNFx1OTljNVx1OTljNlx1OTljN1x1OTljOFx1OTljOVx1OTljYVx1OTljYlx1OTljY1x1OTljZFx1OTljZVx1OTljZlx1OTlkMFx1OTlkMVx1OTlkMlx1OTlkM1x1OTlkNFx1OTlkNVx1OTlkNlx1OTlkN1x1OTlkOFx1ZmZmZFx1OTlkOVx1OTlkYVx1OTlk'@;
put 'Ylx1OTlkY1x1OTlkZFx1OTlkZVx1OTlkZlx1OTllMFx1OTllMVx1OTllMlx1OTllM1x1OTllNFx1OTllNVx1OTllNlx1OTllN1x1OTllOFx1OTllOVx1OTllYVx1OTllYlx1OTllY1x1OTllZFx1OTllZVx1OTllZlx1OTlmMFx1OTlmMVx1OTlmMlx1OTlmM1x1OTlmNFx1OTlmNVx1OTlmNlx1'@;
put 'OTlmN1x1OTlmOFx1OTlmOVx1NzYxYlx1NzYzY1x1NzYyMlx1NzYyMFx1NzY0MFx1NzYyZFx1NzYzMFx1NzYzZlx1NzYzNVx1NzY0M1x1NzYzZVx1NzYzM1x1NzY0ZFx1NzY1ZVx1NzY1NFx1NzY1Y1x1NzY1Nlx1NzY2Ylx1NzY2Zlx1N2ZjYVx1N2FlNlx1N2E3OFx1N2E3OVx1N2E4MFx1N2E4'@;
put 'Nlx1N2E4OFx1N2E5NVx1N2FhNlx1N2FhMFx1N2FhY1x1N2FhOFx1N2FhZFx1N2FiM1x1ODg2NFx1ODg2OVx1ODg3Mlx1ODg3ZFx1ODg3Zlx1ODg4Mlx1ODhhMlx1ODhjNlx1ODhiN1x1ODhiY1x1ODhjOVx1ODhlMlx1ODhjZVx1ODhlM1x1ODhlNVx1ODhmMVx1ODkxYVx1ODhmY1x1ODhlOFx1'@;
put 'ODhmZVx1ODhmMFx1ODkyMVx1ODkxOVx1ODkxM1x1ODkxYlx1ODkwYVx1ODkzNFx1ODkyYlx1ODkzNlx1ODk0MVx1ODk2Nlx1ODk3Ylx1NzU4Ylx1ODBlNVx1NzZiMlx1NzZiNFx1NzdkY1x1ODAxMlx1ODAxNFx1ODAxNlx1ODAxY1x1ODAyMFx1ODAyMlx1ODAyNVx1ODAyNlx1ODAyN1x1ODAy'@;
put 'OVx1ODAyOFx1ODAzMVx1ODAwYlx1ODAzNVx1ODA0M1x1ODA0Nlx1ODA0ZFx1ODA1Mlx1ODA2OVx1ODA3MVx1ODk4M1x1OTg3OFx1OTg4MFx1OTg4M1x1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzI0MV0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjQxXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vb'@;
put 'a1syNDFdW3ZdXT02MTY5Nit2LFRbNjE2OTYrdl09a1syNDFdW3ZdKTtmb3Ioa1syNDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk5ZmFcdTk5ZmJcdTk5ZmNcdTk5ZmRcdTk5ZmVcdTk5ZmZcdTlhMDBcdTlhMDFcdTlhMDJcdTlh'@;
put 'MDNcdTlhMDRcdTlhMDVcdTlhMDZcdTlhMDdcdTlhMDhcdTlhMDlcdTlhMGFcdTlhMGJcdTlhMGNcdTlhMGRcdTlhMGVcdTlhMGZcdTlhMTBcdTlhMTFcdTlhMTJcdTlhMTNcdTlhMTRcdTlhMTVcdTlhMTZcdTlhMTdcdTlhMThcdTlhMTlcdTlhMWFcdTlhMWJcdTlhMWNcdTlhMWRcdTlhMWVc'@;
put 'dTlhMWZcdTlhMjBcdTlhMjFcdTlhMjJcdTlhMjNcdTlhMjRcdTlhMjVcdTlhMjZcdTlhMjdcdTlhMjhcdTlhMjlcdTlhMmFcdTlhMmJcdTlhMmNcdTlhMmRcdTlhMmVcdTlhMmZcdTlhMzBcdTlhMzFcdTlhMzJcdTlhMzNcdTlhMzRcdTlhMzVcdTlhMzZcdTlhMzdcdTlhMzhcdWZmZmRcdTlh'@;
put 'MzlcdTlhM2FcdTlhM2JcdTlhM2NcdTlhM2RcdTlhM2VcdTlhM2ZcdTlhNDBcdTlhNDFcdTlhNDJcdTlhNDNcdTlhNDRcdTlhNDVcdTlhNDZcdTlhNDdcdTlhNDhcdTlhNDlcdTlhNGFcdTlhNGJcdTlhNGNcdTlhNGRcdTlhNGVcdTlhNGZcdTlhNTBcdTlhNTFcdTlhNTJcdTlhNTNcdTlhNTRc'@;
put 'dTlhNTVcdTlhNTZcdTlhNTdcdTlhNThcdTlhNTlcdTk4ODlcdTk4OGNcdTk4OGRcdTk4OGZcdTk4OTRcdTk4OWFcdTk4OWJcdTk4OWVcdTk4OWZcdTk4YTFcdTk4YTJcdTk4YTVcdTk4YTZcdTg2NGRcdTg2NTRcdTg2NmNcdTg2NmVcdTg2N2ZcdTg2N2FcdTg2N2NcdTg2N2JcdTg2YThcdTg2'@;
put 'OGRcdTg2OGJcdTg2YWNcdTg2OWRcdTg2YTdcdTg2YTNcdTg2YWFcdTg2OTNcdTg2YTlcdTg2YjZcdTg2YzRcdTg2YjVcdTg2Y2VcdTg2YjBcdTg2YmFcdTg2YjFcdTg2YWZcdTg2YzlcdTg2Y2ZcdTg2YjRcdTg2ZTlcdTg2ZjFcdTg2ZjJcdTg2ZWRcdTg2ZjNcdTg2ZDBcdTg3MTNcdTg2ZGVc'@;
put 'dTg2ZjRcdTg2ZGZcdTg2ZDhcdTg2ZDFcdTg3MDNcdTg3MDdcdTg2ZjhcdTg3MDhcdTg3MGFcdTg3MGRcdTg3MDlcdTg3MjNcdTg3M2JcdTg3MWVcdTg3MjVcdTg3MmVcdTg3MWFcdTg3M2VcdTg3NDhcdTg3MzRcdTg3MzFcdTg3MjlcdTg3MzdcdTg3M2ZcdTg3ODJcdTg3MjJcdTg3N2RcdTg3'@;
put 'N2VcdTg3N2JcdTg3NjBcdTg3NzBcdTg3NGNcdTg3NmVcdTg3OGJcdTg3NTNcdTg3NjNcdTg3N2NcdTg3NjRcdTg3NTlcdTg3NjVcdTg3OTNcdTg3YWZcdTg3YThcdTg3ZDJcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syNDJdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzI0Ml1bdl0uY2hhckNv'@;
put 'ZGVBdCgwKSYmKHNlW2tbMjQyXVt2XV09NjE5NTIrdixUWzYxOTUyK3ZdPWtbMjQyXVt2XSk7Zm9yKGtbMjQzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YTVhXHU5YTViXHU5YTVjXHU5YTVkXHU5YTVlXHU5YTVmXHU5YTYwXHU5'@;
put 'YTYxXHU5YTYyXHU5YTYzXHU5YTY0XHU5YTY1XHU5YTY2XHU5YTY3XHU5YTY4XHU5YTY5XHU5YTZhXHU5YTZiXHU5YTcyXHU5YTgzXHU5YTg5XHU5YThkXHU5YThlXHU5YTk0XHU5YTk1XHU5YTk5XHU5YWE2XHU5YWE5XHU5YWFhXHU5YWFiXHU5YWFjXHU5YWFkXHU5YWFlXHU5YWFmXHU5YWIy'@;
put 'XHU5YWIzXHU5YWI0XHU5YWI1XHU5YWI5XHU5YWJiXHU5YWJkXHU5YWJlXHU5YWJmXHU5YWMzXHU5YWM0XHU5YWM2XHU5YWM3XHU5YWM4XHU5YWM5XHU5YWNhXHU5YWNkXHU5YWNlXHU5YWNmXHU5YWQwXHU5YWQyXHU5YWQ0XHU5YWQ1XHU5YWQ2XHU5YWQ3XHU5YWQ5XHU5YWRhXHU5YWRiXHU5'@;
put 'YWRjXHVmZmZkXHU5YWRkXHU5YWRlXHU5YWUwXHU5YWUyXHU5YWUzXHU5YWU0XHU5YWU1XHU5YWU3XHU5YWU4XHU5YWU5XHU5YWVhXHU5YWVjXHU5YWVlXHU5YWYwXHU5YWYxXHU5YWYyXHU5YWYzXHU5YWY0XHU5YWY1XHU5YWY2XHU5YWY3XHU5YWY4XHU5YWZhXHU5YWZjXHU5YWZkXHU5YWZl'@;
put 'XHU5YWZmXHU5YjAwXHU5YjAxXHU5YjAyXHU5YjA0XHU5YjA1XHU5YjA2XHU4N2M2XHU4Nzg4XHU4Nzg1XHU4N2FkXHU4Nzk3XHU4NzgzXHU4N2FiXHU4N2U1XHU4N2FjXHU4N2I1XHU4N2IzXHU4N2NiXHU4N2QzXHU4N2JkXHU4N2QxXHU4N2MwXHU4N2NhXHU4N2RiXHU4N2VhXHU4N2UwXHU4'@;
put 'N2VlXHU4ODE2XHU4ODEzXHU4N2ZlXHU4ODBhXHU4ODFiXHU4ODIxXHU4ODM5XHU4ODNjXHU3ZjM2XHU3ZjQyXHU3ZjQ0XHU3ZjQ1XHU4MjEwXHU3YWZhXHU3YWZkXHU3YjA4XHU3YjAzXHU3YjA0XHU3YjE1XHU3YjBhXHU3YjJiXHU3YjBmXHU3YjQ3XHU3YjM4XHU3YjJhXHU3YjE5XHU3YjJl'@;
put 'XHU3YjMxXHU3YjIwXHU3YjI1XHU3YjI0XHU3YjMzXHU3YjNlXHU3YjFlXHU3YjU4XHU3YjVhXHU3YjQ1XHU3Yjc1XHU3YjRjXHU3YjVkXHU3YjYwXHU3YjZlXHU3YjdiXHU3YjYyXHU3YjcyXHU3YjcxXHU3YjkwXHU3YmE2XHU3YmE3XHU3YmI4XHU3YmFjXHU3YjlkXHU3YmE4XHU3Yjg1XHU3'@;
put 'YmFhXHU3YjljXHU3YmEyXHU3YmFiXHU3YmI0XHU3YmQxXHU3YmMxXHU3YmNjXHU3YmRkXHU3YmRhXHU3YmU1XHU3YmU2XHU3YmVhXHU3YzBjXHU3YmZlXHU3YmZjXHU3YzBmXHU3YzE2XHU3YzBiXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjQzXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sy'@;
put 'NDNdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzI0M11bdl1dPTYyMjA4K3YsVFs2MjIwOCt2XT1rWzI0M11bdl0pO2ZvcihrWzI0NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWIwN1x1OWIwOVx1OWIwYVx1OWIwYlx1OWIwY1x1'@;
put 'OWIwZFx1OWIwZVx1OWIxMFx1OWIxMVx1OWIxMlx1OWIxNFx1OWIxNVx1OWIxNlx1OWIxN1x1OWIxOFx1OWIxOVx1OWIxYVx1OWIxYlx1OWIxY1x1OWIxZFx1OWIxZVx1OWIyMFx1OWIyMVx1OWIyMlx1OWIyNFx1OWIyNVx1OWIyNlx1OWIyN1x1OWIyOFx1OWIyOVx1OWIyYVx1OWIyYlx1OWIy'@;
put 'Y1x1OWIyZFx1OWIyZVx1OWIzMFx1OWIzMVx1OWIzM1x1OWIzNFx1OWIzNVx1OWIzNlx1OWIzN1x1OWIzOFx1OWIzOVx1OWIzYVx1OWIzZFx1OWIzZVx1OWIzZlx1OWI0MFx1OWI0Nlx1OWI0YVx1OWI0Ylx1OWI0Y1x1OWI0ZVx1OWI1MFx1OWI1Mlx1OWI1M1x1OWI1NVx1OWI1Nlx1OWI1N1x1'@;
put 'OWI1OFx1OWI1OVx1OWI1YVx1ZmZmZFx1OWI1Ylx1OWI1Y1x1OWI1ZFx1OWI1ZVx1OWI1Zlx1OWI2MFx1OWI2MVx1OWI2Mlx1OWI2M1x1OWI2NFx1OWI2NVx1OWI2Nlx1OWI2N1x1OWI2OFx1OWI2OVx1OWI2YVx1OWI2Ylx1OWI2Y1x1OWI2ZFx1OWI2ZVx1OWI2Zlx1OWI3MFx1OWI3MVx1OWI3'@;
put 'Mlx1OWI3M1x1OWI3NFx1OWI3NVx1OWI3Nlx1OWI3N1x1OWI3OFx1OWI3OVx1OWI3YVx1OWI3Ylx1N2MxZlx1N2MyYVx1N2MyNlx1N2MzOFx1N2M0MVx1N2M0MFx1ODFmZVx1ODIwMVx1ODIwMlx1ODIwNFx1ODFlY1x1ODg0NFx1ODIyMVx1ODIyMlx1ODIyM1x1ODIyZFx1ODIyZlx1ODIyOFx1'@;
put 'ODIyYlx1ODIzOFx1ODIzYlx1ODIzM1x1ODIzNFx1ODIzZVx1ODI0NFx1ODI0OVx1ODI0Ylx1ODI0Zlx1ODI1YVx1ODI1Zlx1ODI2OFx1ODg3ZVx1ODg4NVx1ODg4OFx1ODhkOFx1ODhkZlx1ODk1ZVx1N2Y5ZFx1N2Y5Zlx1N2ZhN1x1N2ZhZlx1N2ZiMFx1N2ZiMlx1N2M3Y1x1NjU0OVx1N2M5'@;
put 'MVx1N2M5ZFx1N2M5Y1x1N2M5ZVx1N2NhMlx1N2NiMlx1N2NiY1x1N2NiZFx1N2NjMVx1N2NjN1x1N2NjY1x1N2NjZFx1N2NjOFx1N2NjNVx1N2NkN1x1N2NlOFx1ODI2ZVx1NjZhOFx1N2ZiZlx1N2ZjZVx1N2ZkNVx1N2ZlNVx1N2ZlMVx1N2ZlNlx1N2ZlOVx1N2ZlZVx1N2ZmM1x1N2NmOFx1'@;
put 'N2Q3N1x1N2RhNlx1N2RhZVx1N2U0N1x1N2U5Ylx1OWViOFx1OWViNFx1OGQ3M1x1OGQ4NFx1OGQ5NFx1OGQ5MVx1OGRiMVx1OGQ2N1x1OGQ2ZFx1OGM0N1x1OGM0OVx1OTE0YVx1OTE1MFx1OTE0ZVx1OTE0Zlx1OTE2NFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzI0NF0ubGVuZ3RoOysr'@;
put 'dik2NTUzMyE9PWtbMjQ0XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syNDRdW3ZdXT02MjQ2NCt2LFRbNjI0NjQrdl09a1syNDRdW3ZdKTtmb3Ioa1syNDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTliN2NcdTliN2RcdTliN2Vc'@;
put 'dTliN2ZcdTliODBcdTliODFcdTliODJcdTliODNcdTliODRcdTliODVcdTliODZcdTliODdcdTliODhcdTliODlcdTliOGFcdTliOGJcdTliOGNcdTliOGRcdTliOGVcdTliOGZcdTliOTBcdTliOTFcdTliOTJcdTliOTNcdTliOTRcdTliOTVcdTliOTZcdTliOTdcdTliOThcdTliOTlcdTli'@;
put 'OWFcdTliOWJcdTliOWNcdTliOWRcdTliOWVcdTliOWZcdTliYTBcdTliYTFcdTliYTJcdTliYTNcdTliYTRcdTliYTVcdTliYTZcdTliYTdcdTliYThcdTliYTlcdTliYWFcdTliYWJcdTliYWNcdTliYWRcdTliYWVcdTliYWZcdTliYjBcdTliYjFcdTliYjJcdTliYjNcdTliYjRcdTliYjVc'@;
put 'dTliYjZcdTliYjdcdTliYjhcdTliYjlcdTliYmFcdWZmZmRcdTliYmJcdTliYmNcdTliYmRcdTliYmVcdTliYmZcdTliYzBcdTliYzFcdTliYzJcdTliYzNcdTliYzRcdTliYzVcdTliYzZcdTliYzdcdTliYzhcdTliYzlcdTliY2FcdTliY2JcdTliY2NcdTliY2RcdTliY2VcdTliY2ZcdTli'@;
put 'ZDBcdTliZDFcdTliZDJcdTliZDNcdTliZDRcdTliZDVcdTliZDZcdTliZDdcdTliZDhcdTliZDlcdTliZGFcdTliZGJcdTkxNjJcdTkxNjFcdTkxNzBcdTkxNjlcdTkxNmZcdTkxN2RcdTkxN2VcdTkxNzJcdTkxNzRcdTkxNzlcdTkxOGNcdTkxODVcdTkxOTBcdTkxOGRcdTkxOTFcdTkxYTJc'@;
put 'dTkxYTNcdTkxYWFcdTkxYWRcdTkxYWVcdTkxYWZcdTkxYjVcdTkxYjRcdTkxYmFcdThjNTVcdTllN2VcdThkYjhcdThkZWJcdThlMDVcdThlNTlcdThlNjlcdThkYjVcdThkYmZcdThkYmNcdThkYmFcdThkYzRcdThkZDZcdThkZDdcdThkZGFcdThkZGVcdThkY2VcdThkY2ZcdThkZGJcdThk'@;
put 'YzZcdThkZWNcdThkZjdcdThkZjhcdThkZTNcdThkZjlcdThkZmJcdThkZTRcdThlMDlcdThkZmRcdThlMTRcdThlMWRcdThlMWZcdThlMmNcdThlMmVcdThlMjNcdThlMmZcdThlM2FcdThlNDBcdThlMzlcdThlMzVcdThlM2RcdThlMzFcdThlNDlcdThlNDFcdThlNDJcdThlNTFcdThlNTJc'@;
put 'dThlNGFcdThlNzBcdThlNzZcdThlN2NcdThlNmZcdThlNzRcdThlODVcdThlOGZcdThlOTRcdThlOTBcdThlOWNcdThlOWVcdThjNzhcdThjODJcdThjOGFcdThjODVcdThjOThcdThjOTRcdTY1OWJcdTg5ZDZcdTg5ZGVcdTg5ZGFcdTg5ZGNcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sy'@;
put 'NDVdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzI0NV1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjQ1XVt2XV09NjI3MjArdixUWzYyNzIwK3ZdPWtbMjQ1XVt2XSk7Zm9yKGtbMjQ2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YmRj'@;
put 'XHU5YmRkXHU5YmRlXHU5YmRmXHU5YmUwXHU5YmUxXHU5YmUyXHU5YmUzXHU5YmU0XHU5YmU1XHU5YmU2XHU5YmU3XHU5YmU4XHU5YmU5XHU5YmVhXHU5YmViXHU5YmVjXHU5YmVkXHU5YmVlXHU5YmVmXHU5YmYwXHU5YmYxXHU5YmYyXHU5YmYzXHU5YmY0XHU5YmY1XHU5YmY2XHU5YmY3XHU5'@;
put 'YmY4XHU5YmY5XHU5YmZhXHU5YmZiXHU5YmZjXHU5YmZkXHU5YmZlXHU5YmZmXHU5YzAwXHU5YzAxXHU5YzAyXHU5YzAzXHU5YzA0XHU5YzA1XHU5YzA2XHU5YzA3XHU5YzA4XHU5YzA5XHU5YzBhXHU5YzBiXHU5YzBjXHU5YzBkXHU5YzBlXHU5YzBmXHU5YzEwXHU5YzExXHU5YzEyXHU5YzEz'@;
put 'XHU5YzE0XHU5YzE1XHU5YzE2XHU5YzE3XHU5YzE4XHU5YzE5XHU5YzFhXHVmZmZkXHU5YzFiXHU5YzFjXHU5YzFkXHU5YzFlXHU5YzFmXHU5YzIwXHU5YzIxXHU5YzIyXHU5YzIzXHU5YzI0XHU5YzI1XHU5YzI2XHU5YzI3XHU5YzI4XHU5YzI5XHU5YzJhXHU5YzJiXHU5YzJjXHU5YzJkXHU5'@;
put 'YzJlXHU5YzJmXHU5YzMwXHU5YzMxXHU5YzMyXHU5YzMzXHU5YzM0XHU5YzM1XHU5YzM2XHU5YzM3XHU5YzM4XHU5YzM5XHU5YzNhXHU5YzNiXHU4OWU1XHU4OWViXHU4OWVmXHU4YTNlXHU4YjI2XHU5NzUzXHU5NmU5XHU5NmYzXHU5NmVmXHU5NzA2XHU5NzAxXHU5NzA4XHU5NzBmXHU5NzBl'@;
put 'XHU5NzJhXHU5NzJkXHU5NzMwXHU5NzNlXHU5ZjgwXHU5ZjgzXHU5Zjg1XHU5Zjg2XHU5Zjg3XHU5Zjg4XHU5Zjg5XHU5ZjhhXHU5ZjhjXHU5ZWZlXHU5ZjBiXHU5ZjBkXHU5NmI5XHU5NmJjXHU5NmJkXHU5NmNlXHU5NmQyXHU3N2JmXHU5NmUwXHU5MjhlXHU5MmFlXHU5MmM4XHU5MzNlXHU5'@;
put 'MzZhXHU5M2NhXHU5MzhmXHU5NDNlXHU5NDZiXHU5YzdmXHU5YzgyXHU5Yzg1XHU5Yzg2XHU5Yzg3XHU5Yzg4XHU3YTIzXHU5YzhiXHU5YzhlXHU5YzkwXHU5YzkxXHU5YzkyXHU5Yzk0XHU5Yzk1XHU5YzlhXHU5YzliXHU5YzllXHU5YzlmXHU5Y2EwXHU5Y2ExXHU5Y2EyXHU5Y2EzXHU5Y2E1'@;
put 'XHU5Y2E2XHU5Y2E3XHU5Y2E4XHU5Y2E5XHU5Y2FiXHU5Y2FkXHU5Y2FlXHU5Y2IwXHU5Y2IxXHU5Y2IyXHU5Y2IzXHU5Y2I0XHU5Y2I1XHU5Y2I2XHU5Y2I3XHU5Y2JhXHU5Y2JiXHU5Y2JjXHU5Y2JkXHU5Y2M0XHU5Y2M1XHU5Y2M2XHU5Y2M3XHU5Y2NhXHU5Y2NiXHVmZmZkIi5zcGxpdCgi'@;
put 'Iiksdj0wO3YhPWtbMjQ2XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syNDZdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzI0Nl1bdl1dPTYyOTc2K3YsVFs2Mjk3Nit2XT1rWzI0Nl1bdl0pO2ZvcihrWzI0N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1OWMzY1x1OWMzZFx1OWMzZVx1OWMzZlx1OWM0MFx1OWM0MVx1OWM0Mlx1OWM0M1x1OWM0NFx1OWM0NVx1OWM0Nlx1OWM0N1x1OWM0OFx1OWM0OVx1OWM0YVx1OWM0Ylx1OWM0Y1x1OWM0ZFx1OWM0ZVx1OWM0Zlx1OWM1MFx1OWM1MVx1OWM1Mlx1OWM1M1x1OWM1NFx1OWM1NVx1'@;
put 'OWM1Nlx1OWM1N1x1OWM1OFx1OWM1OVx1OWM1YVx1OWM1Ylx1OWM1Y1x1OWM1ZFx1OWM1ZVx1OWM1Zlx1OWM2MFx1OWM2MVx1OWM2Mlx1OWM2M1x1OWM2NFx1OWM2NVx1OWM2Nlx1OWM2N1x1OWM2OFx1OWM2OVx1OWM2YVx1OWM2Ylx1OWM2Y1x1OWM2ZFx1OWM2ZVx1OWM2Zlx1OWM3MFx1OWM3'@;
put 'MVx1OWM3Mlx1OWM3M1x1OWM3NFx1OWM3NVx1OWM3Nlx1OWM3N1x1OWM3OFx1OWM3OVx1OWM3YVx1ZmZmZFx1OWM3Ylx1OWM3ZFx1OWM3ZVx1OWM4MFx1OWM4M1x1OWM4NFx1OWM4OVx1OWM4YVx1OWM4Y1x1OWM4Zlx1OWM5M1x1OWM5Nlx1OWM5N1x1OWM5OFx1OWM5OVx1OWM5ZFx1OWNhYVx1'@;
put 'OWNhY1x1OWNhZlx1OWNiOVx1OWNiZVx1OWNiZlx1OWNjMFx1OWNjMVx1OWNjMlx1OWNjOFx1OWNjOVx1OWNkMVx1OWNkMlx1OWNkYVx1OWNkYlx1OWNlMFx1OWNlMVx1OWNjY1x1OWNjZFx1OWNjZVx1OWNjZlx1OWNkMFx1OWNkM1x1OWNkNFx1OWNkNVx1OWNkN1x1OWNkOFx1OWNkOVx1OWNk'@;
put 'Y1x1OWNkZFx1OWNkZlx1OWNlMlx1OTc3Y1x1OTc4NVx1OTc5MVx1OTc5Mlx1OTc5NFx1OTdhZlx1OTdhYlx1OTdhM1x1OTdiMlx1OTdiNFx1OWFiMVx1OWFiMFx1OWFiN1x1OWU1OFx1OWFiNlx1OWFiYVx1OWFiY1x1OWFjMVx1OWFjMFx1OWFjNVx1OWFjMlx1OWFjYlx1OWFjY1x1OWFkMVx1'@;
put 'OWI0NVx1OWI0M1x1OWI0N1x1OWI0OVx1OWI0OFx1OWI0ZFx1OWI1MVx1OThlOFx1OTkwZFx1OTkyZVx1OTk1NVx1OTk1NFx1OWFkZlx1OWFlMVx1OWFlNlx1OWFlZlx1OWFlYlx1OWFmYlx1OWFlZFx1OWFmOVx1OWIwOFx1OWIwZlx1OWIxM1x1OWIxZlx1OWIyM1x1OWViZFx1OWViZVx1N2Uz'@;
put 'Ylx1OWU4Mlx1OWU4N1x1OWU4OFx1OWU4Ylx1OWU5Mlx1OTNkNlx1OWU5ZFx1OWU5Zlx1OWVkYlx1OWVkY1x1OWVkZFx1OWVlMFx1OWVkZlx1OWVlMlx1OWVlOVx1OWVlN1x1OWVlNVx1OWVlYVx1OWVlZlx1OWYyMlx1OWYyY1x1OWYyZlx1OWYzOVx1OWYzN1x1OWYzZFx1OWYzZVx1OWY0NFx1'@;
put 'ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzI0N10ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjQ3XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syNDddW3ZdXT02MzIzMit2LFRbNjMyMzIrdl09a1syNDddW3ZdKTtmb3Ioa1syNDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTljZTNcdTljZTRcdTljZTVcdTljZTZcdTljZTdcdTljZThcdTljZTlcdTljZWFcdTljZWJcdTljZWNcdTljZWRcdTljZWVcdTljZWZcdTljZjBcdTljZjFcdTljZjJcdTljZjNcdTljZjRcdTljZjVcdTljZjZcdTljZjdcdTljZjhcdTljZjlcdTljZmFc'@;
put 'dTljZmJcdTljZmNcdTljZmRcdTljZmVcdTljZmZcdTlkMDBcdTlkMDFcdTlkMDJcdTlkMDNcdTlkMDRcdTlkMDVcdTlkMDZcdTlkMDdcdTlkMDhcdTlkMDlcdTlkMGFcdTlkMGJcdTlkMGNcdTlkMGRcdTlkMGVcdTlkMGZcdTlkMTBcdTlkMTFcdTlkMTJcdTlkMTNcdTlkMTRcdTlkMTVcdTlk'@;
put 'MTZcdTlkMTdcdTlkMThcdTlkMTlcdTlkMWFcdTlkMWJcdTlkMWNcdTlkMWRcdTlkMWVcdTlkMWZcdTlkMjBcdTlkMjFcdWZmZmRcdTlkMjJcdTlkMjNcdTlkMjRcdTlkMjVcdTlkMjZcdTlkMjdcdTlkMjhcdTlkMjlcdTlkMmFcdTlkMmJcdTlkMmNcdTlkMmRcdTlkMmVcdTlkMmZcdTlkMzBc'@;
put 'dTlkMzFcdTlkMzJcdTlkMzNcdTlkMzRcdTlkMzVcdTlkMzZcdTlkMzdcdTlkMzhcdTlkMzlcdTlkM2FcdTlkM2JcdTlkM2NcdTlkM2RcdTlkM2VcdTlkM2ZcdTlkNDBcdTlkNDFcdTlkNDJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syNDhdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzI0OF1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjQ4XVt2XV09NjM0ODgrdixUWzYzNDg4K3ZdPWtbMjQ4XVt2XSk7Zm9yKGtbMjQ5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZDQzXHU5ZDQ0XHU5ZDQ1XHU5ZDQ2XHU5ZDQ3XHU5ZDQ4XHU5ZDQ5XHU5ZDRhXHU5ZDRiXHU5ZDRjXHU5ZDRkXHU5ZDRlXHU5ZDRmXHU5ZDUwXHU5ZDUxXHU5ZDUyXHU5ZDUzXHU5ZDU0XHU5ZDU1XHU5ZDU2XHU5ZDU3XHU5ZDU4'@;
put 'XHU5ZDU5XHU5ZDVhXHU5ZDViXHU5ZDVjXHU5ZDVkXHU5ZDVlXHU5ZDVmXHU5ZDYwXHU5ZDYxXHU5ZDYyXHU5ZDYzXHU5ZDY0XHU5ZDY1XHU5ZDY2XHU5ZDY3XHU5ZDY4XHU5ZDY5XHU5ZDZhXHU5ZDZiXHU5ZDZjXHU5ZDZkXHU5ZDZlXHU5ZDZmXHU5ZDcwXHU5ZDcxXHU5ZDcyXHU5ZDczXHU5'@;
put 'ZDc0XHU5ZDc1XHU5ZDc2XHU5ZDc3XHU5ZDc4XHU5ZDc5XHU5ZDdhXHU5ZDdiXHU5ZDdjXHU5ZDdkXHU5ZDdlXHU5ZDdmXHU5ZDgwXHU5ZDgxXHVmZmZkXHU5ZDgyXHU5ZDgzXHU5ZDg0XHU5ZDg1XHU5ZDg2XHU5ZDg3XHU5ZDg4XHU5ZDg5XHU5ZDhhXHU5ZDhiXHU5ZDhjXHU5ZDhkXHU5ZDhl'@;
put 'XHU5ZDhmXHU5ZDkwXHU5ZDkxXHU5ZDkyXHU5ZDkzXHU5ZDk0XHU5ZDk1XHU5ZDk2XHU5ZDk3XHU5ZDk4XHU5ZDk5XHU5ZDlhXHU5ZDliXHU5ZDljXHU5ZDlkXHU5ZDllXHU5ZDlmXHU5ZGEwXHU5ZGExXHU5ZGEyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjQ5XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syNDldW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzI0OV1bdl1dPTYzNzQ0K3YsVFs2Mzc0NCt2XT1rWzI0OV1bdl0pO2ZvcihrWzI1MF09Ilx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWRhM1x1OWRhNFx1OWRhNVx1OWRhNlx1OWRhN1x1OWRhOFx1OWRhOVx1OWRhYVx1OWRhYlx1OWRhY1x1OWRhZFx1OWRhZVx1OWRhZlx1OWRiMFx1OWRiMVx1OWRiMlx1OWRiM1x1OWRiNFx1OWRiNVx1OWRi'@;
put 'Nlx1OWRiN1x1OWRiOFx1OWRiOVx1OWRiYVx1OWRiYlx1OWRiY1x1OWRiZFx1OWRiZVx1OWRiZlx1OWRjMFx1OWRjMVx1OWRjMlx1OWRjM1x1OWRjNFx1OWRjNVx1OWRjNlx1OWRjN1x1OWRjOFx1OWRjOVx1OWRjYVx1OWRjYlx1OWRjY1x1OWRjZFx1OWRjZVx1OWRjZlx1OWRkMFx1OWRkMVx1'@;
put 'OWRkMlx1OWRkM1x1OWRkNFx1OWRkNVx1OWRkNlx1OWRkN1x1OWRkOFx1OWRkOVx1OWRkYVx1OWRkYlx1OWRkY1x1OWRkZFx1OWRkZVx1OWRkZlx1OWRlMFx1OWRlMVx1ZmZmZFx1OWRlMlx1OWRlM1x1OWRlNFx1OWRlNVx1OWRlNlx1OWRlN1x1OWRlOFx1OWRlOVx1OWRlYVx1OWRlYlx1OWRl'@;
put 'Y1x1OWRlZFx1OWRlZVx1OWRlZlx1OWRmMFx1OWRmMVx1OWRmMlx1OWRmM1x1OWRmNFx1OWRmNVx1OWRmNlx1OWRmN1x1OWRmOFx1OWRmOVx1OWRmYVx1OWRmYlx1OWRmY1x1OWRmZFx1OWRmZVx1OWRmZlx1OWUwMFx1OWUwMVx1OWUwMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzI1MF0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjUwXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syNTBdW3ZdXT02NGUzK3YsVFs2NGUzK3ZdPWtbMjUwXVt2XSk7Zm9yKGtbMjUx'@;
put 'XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZTAzXHU5ZTA0XHU5ZTA1XHU5ZTA2XHU5ZTA3XHU5ZTA4XHU5ZTA5XHU5ZTBhXHU5ZTBiXHU5ZTBjXHU5ZTBkXHU5ZTBlXHU5ZTBmXHU5ZTEwXHU5ZTExXHU5ZTEyXHU5ZTEzXHU5ZTE0'@;
put 'XHU5ZTE1XHU5ZTE2XHU5ZTE3XHU5ZTE4XHU5ZTE5XHU5ZTFhXHU5ZTFiXHU5ZTFjXHU5ZTFkXHU5ZTFlXHU5ZTI0XHU5ZTI3XHU5ZTJlXHU5ZTMwXHU5ZTM0XHU5ZTNiXHU5ZTNjXHU5ZTQwXHU5ZTRkXHU5ZTUwXHU5ZTUyXHU5ZTUzXHU5ZTU0XHU5ZTU2XHU5ZTU5XHU5ZTVkXHU5ZTVmXHU5'@;
put 'ZTYwXHU5ZTYxXHU5ZTYyXHU5ZTY1XHU5ZTZlXHU5ZTZmXHU5ZTcyXHU5ZTc0XHU5ZTc1XHU5ZTc2XHU5ZTc3XHU5ZTc4XHU5ZTc5XHU5ZTdhXHU5ZTdiXHU5ZTdjXHU5ZTdkXHU5ZTgwXHVmZmZkXHU5ZTgxXHU5ZTgzXHU5ZTg0XHU5ZTg1XHU5ZTg2XHU5ZTg5XHU5ZThhXHU5ZThjXHU5ZThk'@;
put 'XHU5ZThlXHU5ZThmXHU5ZTkwXHU5ZTkxXHU5ZTk0XHU5ZTk1XHU5ZTk2XHU5ZTk3XHU5ZTk4XHU5ZTk5XHU5ZTlhXHU5ZTliXHU5ZTljXHU5ZTllXHU5ZWEwXHU5ZWExXHU5ZWEyXHU5ZWEzXHU5ZWE0XHU5ZWE1XHU5ZWE3XHU5ZWE4XHU5ZWE5XHU5ZWFhXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjUxXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syNTFdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzI1MV1bdl1dPTY0MjU2K3YsVFs2NDI1Nit2XT1rWzI1MV1b'@;
put 'dl0pO2ZvcihrWzI1Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWVhYlx1OWVhY1x1OWVhZFx1OWVhZVx1OWVhZlx1OWViMFx1OWViMVx1OWViMlx1OWViM1x1OWViNVx1OWViNlx1OWViN1x1OWViOVx1OWViYVx1OWViY1x1OWVi'@;
put 'Zlx1OWVjMFx1OWVjMVx1OWVjMlx1OWVjM1x1OWVjNVx1OWVjNlx1OWVjN1x1OWVjOFx1OWVjYVx1OWVjYlx1OWVjY1x1OWVkMFx1OWVkMlx1OWVkM1x1OWVkNVx1OWVkNlx1OWVkN1x1OWVkOVx1OWVkYVx1OWVkZVx1OWVlMVx1OWVlM1x1OWVlNFx1OWVlNlx1OWVlOFx1OWVlYlx1OWVlY1x1'@;
put 'OWVlZFx1OWVlZVx1OWVmMFx1OWVmMVx1OWVmMlx1OWVmM1x1OWVmNFx1OWVmNVx1OWVmNlx1OWVmN1x1OWVmOFx1OWVmYVx1OWVmZFx1OWVmZlx1OWYwMFx1OWYwMVx1OWYwMlx1OWYwM1x1OWYwNFx1OWYwNVx1ZmZmZFx1OWYwNlx1OWYwN1x1OWYwOFx1OWYwOVx1OWYwYVx1OWYwY1x1OWYw'@;
put 'Zlx1OWYxMVx1OWYxMlx1OWYxNFx1OWYxNVx1OWYxNlx1OWYxOFx1OWYxYVx1OWYxYlx1OWYxY1x1OWYxZFx1OWYxZVx1OWYxZlx1OWYyMVx1OWYyM1x1OWYyNFx1OWYyNVx1OWYyNlx1OWYyN1x1OWYyOFx1OWYyOVx1OWYyYVx1OWYyYlx1OWYyZFx1OWYyZVx1OWYzMFx1OWYzMVx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzI1Ml0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjUyXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syNTJdW3ZdXT02NDUxMit2LFRbNjQ1'@;
put 'MTIrdl09a1syNTJdW3ZdKTtmb3Ioa1syNTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlmMzJcdTlmMzNcdTlmMzRcdTlmMzVcdTlmMzZcdTlmMzhcdTlmM2FcdTlmM2NcdTlmM2ZcdTlmNDBcdTlmNDFcdTlmNDJcdTlmNDNcdTlm'@;
put 'NDVcdTlmNDZcdTlmNDdcdTlmNDhcdTlmNDlcdTlmNGFcdTlmNGJcdTlmNGNcdTlmNGRcdTlmNGVcdTlmNGZcdTlmNTJcdTlmNTNcdTlmNTRcdTlmNTVcdTlmNTZcdTlmNTdcdTlmNThcdTlmNTlcdTlmNWFcdTlmNWJcdTlmNWNcdTlmNWRcdTlmNWVcdTlmNWZcdTlmNjBcdTlmNjFcdTlmNjJc'@;
put 'dTlmNjNcdTlmNjRcdTlmNjVcdTlmNjZcdTlmNjdcdTlmNjhcdTlmNjlcdTlmNmFcdTlmNmJcdTlmNmNcdTlmNmRcdTlmNmVcdTlmNmZcdTlmNzBcdTlmNzFcdTlmNzJcdTlmNzNcdTlmNzRcdTlmNzVcdTlmNzZcdTlmNzdcdTlmNzhcdWZmZmRcdTlmNzlcdTlmN2FcdTlmN2JcdTlmN2NcdTlm'@;
put 'N2RcdTlmN2VcdTlmODFcdTlmODJcdTlmOGRcdTlmOGVcdTlmOGZcdTlmOTBcdTlmOTFcdTlmOTJcdTlmOTNcdTlmOTRcdTlmOTVcdTlmOTZcdTlmOTdcdTlmOThcdTlmOWNcdTlmOWRcdTlmOWVcdTlmYTFcdTlmYTJcdTlmYTNcdTlmYTRcdTlmYTVcdWY5MmNcdWY5NzlcdWY5OTVcdWY5ZTdc'@;
put 'dWY5ZjFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syNTNdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzI1M11bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjUzXVt2XV09'@;
put 'NjQ3NjgrdixUWzY0NzY4K3ZdPWtbMjUzXVt2XSk7Zm9yKGtbMjU0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmYTBjXHVmYTBkXHVmYTBlXHVmYTBmXHVmYTExXHVmYTEzXHVmYTE0XHVmYTE4XHVmYTFmXHVmYTIwXHVmYTIxXHVm'@;
put 'YTIzXHVmYTI0XHVmYTI3XHVmYTI4XHVmYTI5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjU0XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syNTRdW3ZdLmNoYXJDb2RlQXQoMCkmJihz'@;
put 'ZVtrWzI1NF1bdl1dPTY1MDI0K3YsVFs2NTAyNCt2XT1rWzI1NF1bdl0pO3JldHVybntlbmM6c2UsZGVjOlR9fSgpLHplWzk0OV09ZnVuY3Rpb24oKXt2YXIgdixUPVtdLHNlPXt9LGs9W107Zm9yKGtbMF09IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVc'@;
put 'eDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5c'@;
put 'eDdmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMF0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMF1bdl0uY2hh'@;
put 'ckNvZGVBdCgwKSYmKHNlW2tbMF1bdl1dPTArdixUWzArdl09a1swXVt2XSk7Zm9yKGtbMTI5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhYzAyXHVhYzAzXHVhYzA1XHVhYzA2XHVhYzBiXHVhYzBjXHVhYzBkXHVhYzBl'@;
put 'XHVhYzBmXHVhYzE4XHVhYzFlXHVhYzFmXHVhYzIxXHVhYzIyXHVhYzIzXHVhYzI1XHVhYzI2XHVhYzI3XHVhYzI4XHVhYzI5XHVhYzJhXHVhYzJiXHVhYzJlXHVhYzMyXHVhYzMzXHVhYzM0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhYzM1XHVhYzM2XHVhYzM3XHVh'@;
put 'YzNhXHVhYzNiXHVhYzNkXHVhYzNlXHVhYzNmXHVhYzQxXHVhYzQyXHVhYzQzXHVhYzQ0XHVhYzQ1XHVhYzQ2XHVhYzQ3XHVhYzQ4XHVhYzQ5XHVhYzRhXHVhYzRjXHVhYzRlXHVhYzRmXHVhYzUwXHVhYzUxXHVhYzUyXHVhYzUzXHVhYzU1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVhYzU2XHVhYzU3XHVhYzU5XHVhYzVhXHVhYzViXHVhYzVkXHVhYzVlXHVhYzVmXHVhYzYwXHVhYzYxXHVhYzYyXHVhYzYzXHVhYzY0XHVhYzY1XHVhYzY2XHVhYzY3XHVhYzY4XHVhYzY5XHVhYzZhXHVhYzZiXHVhYzZjXHVhYzZkXHVhYzZlXHVhYzZmXHVhYzcyXHVhYzczXHVh'@;
put 'Yzc1XHVhYzc2XHVhYzc5XHVhYzdiXHVhYzdjXHVhYzdkXHVhYzdlXHVhYzdmXHVhYzgyXHVhYzg3XHVhYzg4XHVhYzhkXHVhYzhlXHVhYzhmXHVhYzkxXHVhYzkyXHVhYzkzXHVhYzk1XHVhYzk2XHVhYzk3XHVhYzk4XHVhYzk5XHVhYzlhXHVhYzliXHVhYzllXHVhY2EyXHVhY2EzXHVhY2E0'@;
put 'XHVhY2E1XHVhY2E2XHVhY2E3XHVhY2FiXHVhY2FkXHVhY2FlXHVhY2IxXHVhY2IyXHVhY2IzXHVhY2I0XHVhY2I1XHVhY2I2XHVhY2I3XHVhY2JhXHVhY2JlXHVhY2JmXHVhY2MwXHVhY2MyXHVhY2MzXHVhY2M1XHVhY2M2XHVhY2M3XHVhY2M5XHVhY2NhXHVhY2NiXHVhY2NkXHVhY2NlXHVh'@;
put 'Y2NmXHVhY2QwXHVhY2QxXHVhY2QyXHVhY2QzXHVhY2Q0XHVhY2Q2XHVhY2Q4XHVhY2Q5XHVhY2RhXHVhY2RiXHVhY2RjXHVhY2RkXHVhY2RlXHVhY2RmXHVhY2UyXHVhY2UzXHVhY2U1XHVhY2U2XHVhY2U5XHVhY2ViXHVhY2VkXHVhY2VlXHVhY2YyXHVhY2Y0XHVhY2Y3XHVhY2Y4XHVhY2Y5'@;
put 'XHVhY2ZhXHVhY2ZiXHVhY2ZlXHVhY2ZmXHVhZDAxXHVhZDAyXHVhZDAzXHVhZDA1XHVhZDA3XHVhZDA4XHVhZDA5XHVhZDBhXHVhZDBiXHVhZDBlXHVhZDEwXHVhZDEyXHVhZDEzXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTI5XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxMjldW3ZdLmNo'@;
put 'YXJDb2RlQXQoMCkmJihzZVtrWzEyOV1bdl1dPTMzMDI0K3YsVFszMzAyNCt2XT1rWzEyOV1bdl0pO2ZvcihrWzEzMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWQxNFx1YWQxNVx1YWQxNlx1YWQxN1x1YWQxOVx1YWQx'@;
put 'YVx1YWQxYlx1YWQxZFx1YWQxZVx1YWQxZlx1YWQyMVx1YWQyMlx1YWQyM1x1YWQyNFx1YWQyNVx1YWQyNlx1YWQyN1x1YWQyOFx1YWQyYVx1YWQyYlx1YWQyZVx1YWQyZlx1YWQzMFx1YWQzMVx1YWQzMlx1YWQzM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWQzNlx1'@;
put 'YWQzN1x1YWQzOVx1YWQzYVx1YWQzYlx1YWQzZFx1YWQzZVx1YWQzZlx1YWQ0MFx1YWQ0MVx1YWQ0Mlx1YWQ0M1x1YWQ0Nlx1YWQ0OFx1YWQ0YVx1YWQ0Ylx1YWQ0Y1x1YWQ0ZFx1YWQ0ZVx1YWQ0Zlx1YWQ1MVx1YWQ1Mlx1YWQ1M1x1YWQ1NVx1YWQ1Nlx1YWQ1N1x1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWQ1OVx1YWQ1YVx1YWQ1Ylx1YWQ1Y1x1YWQ1ZFx1YWQ1ZVx1YWQ1Zlx1YWQ2MFx1YWQ2Mlx1YWQ2NFx1YWQ2NVx1YWQ2Nlx1YWQ2N1x1YWQ2OFx1YWQ2OVx1YWQ2YVx1YWQ2Ylx1YWQ2ZVx1YWQ2Zlx1YWQ3MVx1YWQ3Mlx1YWQ3N1x1YWQ3OFx1YWQ3OVx1'@;
put 'YWQ3YVx1YWQ3ZVx1YWQ4MFx1YWQ4M1x1YWQ4NFx1YWQ4NVx1YWQ4Nlx1YWQ4N1x1YWQ4YVx1YWQ4Ylx1YWQ4ZFx1YWQ4ZVx1YWQ4Zlx1YWQ5MVx1YWQ5Mlx1YWQ5M1x1YWQ5NFx1YWQ5NVx1YWQ5Nlx1YWQ5N1x1YWQ5OFx1YWQ5OVx1YWQ5YVx1YWQ5Ylx1YWQ5ZVx1YWQ5Zlx1YWRhMFx1YWRh'@;
put 'MVx1YWRhMlx1YWRhM1x1YWRhNVx1YWRhNlx1YWRhN1x1YWRhOFx1YWRhOVx1YWRhYVx1YWRhYlx1YWRhY1x1YWRhZFx1YWRhZVx1YWRhZlx1YWRiMFx1YWRiMVx1YWRiMlx1YWRiM1x1YWRiNFx1YWRiNVx1YWRiNlx1YWRiOFx1YWRiOVx1YWRiYVx1YWRiYlx1YWRiY1x1YWRiZFx1YWRiZVx1'@;
put 'YWRiZlx1YWRjMlx1YWRjM1x1YWRjNVx1YWRjNlx1YWRjN1x1YWRjOVx1YWRjYVx1YWRjYlx1YWRjY1x1YWRjZFx1YWRjZVx1YWRjZlx1YWRkMlx1YWRkNFx1YWRkNVx1YWRkNlx1YWRkN1x1YWRkOFx1YWRkOVx1YWRkYVx1YWRkYlx1YWRkZFx1YWRkZVx1YWRkZlx1YWRlMVx1YWRlMlx1YWRl'@;
put 'M1x1YWRlNVx1YWRlNlx1YWRlN1x1YWRlOFx1YWRlOVx1YWRlYVx1YWRlYlx1YWRlY1x1YWRlZFx1YWRlZVx1YWRlZlx1YWRmMFx1YWRmMVx1YWRmMlx1YWRmM1x1YWRmNFx1YWRmNVx1YWRmNlx1YWRmN1x1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzEzMF0ubGVuZ3RoOysrdik2NTUzMyE9'@;
put 'PWtbMTMwXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxMzBdW3ZdXT0zMzI4MCt2LFRbMzMyODArdl09a1sxMzBdW3ZdKTtmb3Ioa1sxMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFkZmFcdWFkZmJcdWFkZmRcdWFk'@;
put 'ZmVcdWFlMDJcdWFlMDNcdWFlMDRcdWFlMDVcdWFlMDZcdWFlMDdcdWFlMGFcdWFlMGNcdWFlMGVcdWFlMGZcdWFlMTBcdWFlMTFcdWFlMTJcdWFlMTNcdWFlMTVcdWFlMTZcdWFlMTdcdWFlMThcdWFlMTlcdWFlMWFcdWFlMWJcdWFlMWNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWFlMWRcdWFlMWVcdWFlMWZcdWFlMjBcdWFlMjFcdWFlMjJcdWFlMjNcdWFlMjRcdWFlMjVcdWFlMjZcdWFlMjdcdWFlMjhcdWFlMjlcdWFlMmFcdWFlMmJcdWFlMmNcdWFlMmRcdWFlMmVcdWFlMmZcdWFlMzJcdWFlMzNcdWFlMzVcdWFlMzZcdWFlMzlcdWFlM2JcdWFlM2NcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFlM2RcdWFlM2VcdWFlM2ZcdWFlNDJcdWFlNDRcdWFlNDdcdWFlNDhcdWFlNDlcdWFlNGJcdWFlNGZcdWFlNTFcdWFlNTJcdWFlNTNcdWFlNTVcdWFlNTdcdWFlNThcdWFlNTlcdWFlNWFcdWFlNWJcdWFlNWVcdWFlNjJcdWFlNjNc'@;
put 'dWFlNjRcdWFlNjZcdWFlNjdcdWFlNmFcdWFlNmJcdWFlNmRcdWFlNmVcdWFlNmZcdWFlNzFcdWFlNzJcdWFlNzNcdWFlNzRcdWFlNzVcdWFlNzZcdWFlNzdcdWFlN2FcdWFlN2VcdWFlN2ZcdWFlODBcdWFlODFcdWFlODJcdWFlODNcdWFlODZcdWFlODdcdWFlODhcdWFlODlcdWFlOGFcdWFl'@;
put 'OGJcdWFlOGRcdWFlOGVcdWFlOGZcdWFlOTBcdWFlOTFcdWFlOTJcdWFlOTNcdWFlOTRcdWFlOTVcdWFlOTZcdWFlOTdcdWFlOThcdWFlOTlcdWFlOWFcdWFlOWJcdWFlOWNcdWFlOWRcdWFlOWVcdWFlOWZcdWFlYTBcdWFlYTFcdWFlYTJcdWFlYTNcdWFlYTRcdWFlYTVcdWFlYTZcdWFlYTdc'@;
put 'dWFlYThcdWFlYTlcdWFlYWFcdWFlYWJcdWFlYWNcdWFlYWRcdWFlYWVcdWFlYWZcdWFlYjBcdWFlYjFcdWFlYjJcdWFlYjNcdWFlYjRcdWFlYjVcdWFlYjZcdWFlYjdcdWFlYjhcdWFlYjlcdWFlYmFcdWFlYmJcdWFlYmZcdWFlYzFcdWFlYzJcdWFlYzNcdWFlYzVcdWFlYzZcdWFlYzdcdWFl'@;
put 'YzhcdWFlYzlcdWFlY2FcdWFlY2JcdWFlY2VcdWFlZDJcdWFlZDNcdWFlZDRcdWFlZDVcdWFlZDZcdWFlZDdcdWFlZGFcdWFlZGJcdWFlZGRcdWFlZGVcdWFlZGZcdWFlZTBcdWFlZTFcdWFlZTJcdWFlZTNcdWFlZTRcdWFlZTVcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxMzFdLmxlbmd0'@;
put 'aDsrK3YpNjU1MzMhPT1rWzEzMV1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTMxXVt2XV09MzM1MzYrdixUWzMzNTM2K3ZdPWtbMTMxXVt2XSk7Zm9yKGtbMTMyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZWU2XHVh'@;
put 'ZWU3XHVhZWU5XHVhZWVhXHVhZWVjXHVhZWVlXHVhZWVmXHVhZWYwXHVhZWYxXHVhZWYyXHVhZWYzXHVhZWY1XHVhZWY2XHVhZWY3XHVhZWY5XHVhZWZhXHVhZWZiXHVhZWZkXHVhZWZlXHVhZWZmXHVhZjAwXHVhZjAxXHVhZjAyXHVhZjAzXHVhZjA0XHVhZjA1XHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVhZjA2XHVhZjA5XHVhZjBhXHVhZjBiXHVhZjBjXHVhZjBlXHVhZjBmXHVhZjExXHVhZjEyXHVhZjEzXHVhZjE0XHVhZjE1XHVhZjE2XHVhZjE3XHVhZjE4XHVhZjE5XHVhZjFhXHVhZjFiXHVhZjFjXHVhZjFkXHVhZjFlXHVhZjFmXHVhZjIwXHVhZjIxXHVh'@;
put 'ZjIyXHVhZjIzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZjI0XHVhZjI1XHVhZjI2XHVhZjI3XHVhZjI4XHVhZjI5XHVhZjJhXHVhZjJiXHVhZjJlXHVhZjJmXHVhZjMxXHVhZjMzXHVhZjM1XHVhZjM2XHVhZjM3XHVhZjM4XHVhZjM5XHVhZjNhXHVhZjNiXHVhZjNl'@;
put 'XHVhZjQwXHVhZjQ0XHVhZjQ1XHVhZjQ2XHVhZjQ3XHVhZjRhXHVhZjRiXHVhZjRjXHVhZjRkXHVhZjRlXHVhZjRmXHVhZjUxXHVhZjUyXHVhZjUzXHVhZjU0XHVhZjU1XHVhZjU2XHVhZjU3XHVhZjU4XHVhZjU5XHVhZjVhXHVhZjViXHVhZjVlXHVhZjVmXHVhZjYwXHVhZjYxXHVhZjYyXHVh'@;
put 'ZjYzXHVhZjY2XHVhZjY3XHVhZjY4XHVhZjY5XHVhZjZhXHVhZjZiXHVhZjZjXHVhZjZkXHVhZjZlXHVhZjZmXHVhZjcwXHVhZjcxXHVhZjcyXHVhZjczXHVhZjc0XHVhZjc1XHVhZjc2XHVhZjc3XHVhZjc4XHVhZjdhXHVhZjdiXHVhZjdjXHVhZjdkXHVhZjdlXHVhZjdmXHVhZjgxXHVhZjgy'@;
put 'XHVhZjgzXHVhZjg1XHVhZjg2XHVhZjg3XHVhZjg5XHVhZjhhXHVhZjhiXHVhZjhjXHVhZjhkXHVhZjhlXHVhZjhmXHVhZjkyXHVhZjkzXHVhZjk0XHVhZjk2XHVhZjk3XHVhZjk4XHVhZjk5XHVhZjlhXHVhZjliXHVhZjlkXHVhZjllXHVhZjlmXHVhZmEwXHVhZmExXHVhZmEyXHVhZmEzXHVh'@;
put 'ZmE0XHVhZmE1XHVhZmE2XHVhZmE3XHVhZmE4XHVhZmE5XHVhZmFhXHVhZmFiXHVhZmFjXHVhZmFkXHVhZmFlXHVhZmFmXHVhZmIwXHVhZmIxXHVhZmIyXHVhZmIzXHVhZmI0XHVhZmI1XHVhZmI2XHVhZmI3XHVhZmJhXHVhZmJiXHVhZmJkXHVhZmJlXHVmZmZkIi5zcGxpdCgiIiksdj0wO3Yh'@;
put 'PWtbMTMyXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxMzJdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzEzMl1bdl1dPTMzNzkyK3YsVFszMzc5Mit2XT1rWzEzMl1bdl0pO2ZvcihrWzEzM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1YWZiZlx1YWZjMVx1YWZjMlx1YWZjM1x1YWZjNFx1YWZjNVx1YWZjNlx1YWZjYVx1YWZjY1x1YWZjZlx1YWZkMFx1YWZkMVx1YWZkMlx1YWZkM1x1YWZkNVx1YWZkNlx1YWZkN1x1YWZkOFx1YWZkOVx1YWZkYVx1YWZkYlx1YWZkZFx1YWZkZVx1YWZkZlx1YWZlMFx1YWZlMVx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWZlMlx1YWZlM1x1YWZlNFx1YWZlNVx1YWZlNlx1YWZlN1x1YWZlYVx1YWZlYlx1YWZlY1x1YWZlZFx1YWZlZVx1YWZlZlx1YWZmMlx1YWZmM1x1YWZmNVx1YWZmNlx1YWZmN1x1YWZmOVx1YWZmYVx1YWZmYlx1YWZmY1x1YWZmZFx1'@;
put 'YWZmZVx1YWZmZlx1YjAwMlx1YjAwM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjAwNVx1YjAwNlx1YjAwN1x1YjAwOFx1YjAwOVx1YjAwYVx1YjAwYlx1YjAwZFx1YjAwZVx1YjAwZlx1YjAxMVx1YjAxMlx1YjAxM1x1YjAxNVx1YjAxNlx1YjAxN1x1YjAxOFx1YjAx'@;
put 'OVx1YjAxYVx1YjAxYlx1YjAxZVx1YjAxZlx1YjAyMFx1YjAyMVx1YjAyMlx1YjAyM1x1YjAyNFx1YjAyNVx1YjAyNlx1YjAyN1x1YjAyOVx1YjAyYVx1YjAyYlx1YjAyY1x1YjAyZFx1YjAyZVx1YjAyZlx1YjAzMFx1YjAzMVx1YjAzMlx1YjAzM1x1YjAzNFx1YjAzNVx1YjAzNlx1YjAzN1x1'@;
put 'YjAzOFx1YjAzOVx1YjAzYVx1YjAzYlx1YjAzY1x1YjAzZFx1YjAzZVx1YjAzZlx1YjA0MFx1YjA0MVx1YjA0Mlx1YjA0M1x1YjA0Nlx1YjA0N1x1YjA0OVx1YjA0Ylx1YjA0ZFx1YjA0Zlx1YjA1MFx1YjA1MVx1YjA1Mlx1YjA1Nlx1YjA1OFx1YjA1YVx1YjA1Ylx1YjA1Y1x1YjA1ZVx1YjA1'@;
put 'Zlx1YjA2MFx1YjA2MVx1YjA2Mlx1YjA2M1x1YjA2NFx1YjA2NVx1YjA2Nlx1YjA2N1x1YjA2OFx1YjA2OVx1YjA2YVx1YjA2Ylx1YjA2Y1x1YjA2ZFx1YjA2ZVx1YjA2Zlx1YjA3MFx1YjA3MVx1YjA3Mlx1YjA3M1x1YjA3NFx1YjA3NVx1YjA3Nlx1YjA3N1x1YjA3OFx1YjA3OVx1YjA3YVx1'@;
put 'YjA3Ylx1YjA3ZVx1YjA3Zlx1YjA4MVx1YjA4Mlx1YjA4M1x1YjA4NVx1YjA4Nlx1YjA4N1x1YjA4OFx1YjA4OVx1YjA4YVx1YjA4Ylx1YjA4ZVx1YjA5MFx1YjA5Mlx1YjA5M1x1YjA5NFx1YjA5NVx1YjA5Nlx1YjA5N1x1YjA5Ylx1YjA5ZFx1YjA5ZVx1YjBhM1x1YjBhNFx1ZmZmZCIuc3Bs'@;
put 'aXQoIiIpLHY9MDt2IT1rWzEzM10ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTMzXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxMzNdW3ZdXT0zNDA0OCt2LFRbMzQwNDgrdl09a1sxMzNdW3ZdKTtmb3Ioa1sxMzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWIwYTVcdWIwYTZcdWIwYTdcdWIwYWFcdWIwYjBcdWIwYjJcdWIwYjZcdWIwYjdcdWIwYjlcdWIwYmFcdWIwYmJcdWIwYmRcdWIwYmVcdWIwYmZcdWIwYzBcdWIwYzFcdWIwYzJcdWIwYzNcdWIwYzZcdWIwY2FcdWIwY2JcdWIwY2NcdWIwY2RcdWIwY2VcdWIw'@;
put 'Y2ZcdWIwZDJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIwZDNcdWIwZDVcdWIwZDZcdWIwZDdcdWIwZDlcdWIwZGFcdWIwZGJcdWIwZGNcdWIwZGRcdWIwZGVcdWIwZGZcdWIwZTFcdWIwZTJcdWIwZTNcdWIwZTRcdWIwZTZcdWIwZTdcdWIwZThcdWIwZTlcdWIwZWFc'@;
put 'dWIwZWJcdWIwZWNcdWIwZWRcdWIwZWVcdWIwZWZcdWIwZjBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIwZjFcdWIwZjJcdWIwZjNcdWIwZjRcdWIwZjVcdWIwZjZcdWIwZjdcdWIwZjhcdWIwZjlcdWIwZmFcdWIwZmJcdWIwZmNcdWIwZmRcdWIwZmVcdWIwZmZcdWIx'@;
put 'MDBcdWIxMDFcdWIxMDJcdWIxMDNcdWIxMDRcdWIxMDVcdWIxMDZcdWIxMDdcdWIxMGFcdWIxMGRcdWIxMGVcdWIxMGZcdWIxMTFcdWIxMTRcdWIxMTVcdWIxMTZcdWIxMTdcdWIxMWFcdWIxMWVcdWIxMWZcdWIxMjBcdWIxMjFcdWIxMjJcdWIxMjZcdWIxMjdcdWIxMjlcdWIxMmFcdWIxMmJc'@;
put 'dWIxMmRcdWIxMmVcdWIxMmZcdWIxMzBcdWIxMzFcdWIxMzJcdWIxMzNcdWIxMzZcdWIxM2FcdWIxM2JcdWIxM2NcdWIxM2RcdWIxM2VcdWIxM2ZcdWIxNDJcdWIxNDNcdWIxNDVcdWIxNDZcdWIxNDdcdWIxNDlcdWIxNGFcdWIxNGJcdWIxNGNcdWIxNGRcdWIxNGVcdWIxNGZcdWIxNTJcdWIx'@;
put 'NTNcdWIxNTZcdWIxNTdcdWIxNTlcdWIxNWFcdWIxNWJcdWIxNWRcdWIxNWVcdWIxNWZcdWIxNjFcdWIxNjJcdWIxNjNcdWIxNjRcdWIxNjVcdWIxNjZcdWIxNjdcdWIxNjhcdWIxNjlcdWIxNmFcdWIxNmJcdWIxNmNcdWIxNmRcdWIxNmVcdWIxNmZcdWIxNzBcdWIxNzFcdWIxNzJcdWIxNzNc'@;
put 'dWIxNzRcdWIxNzVcdWIxNzZcdWIxNzdcdWIxN2FcdWIxN2JcdWIxN2RcdWIxN2VcdWIxN2ZcdWIxODFcdWIxODNcdWIxODRcdWIxODVcdWIxODZcdWIxODdcdWIxOGFcdWIxOGNcdWIxOGVcdWIxOGZcdWIxOTBcdWIxOTFcdWIxOTVcdWIxOTZcdWIxOTdcdWIxOTlcdWIxOWFcdWIxOWJcdWIx'@;
put 'OWRcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxMzRdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzEzNF1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTM0XVt2XV09MzQzMDQrdixUWzM0MzA0K3ZdPWtbMTM0XVt2XSk7Zm9yKGtbMTM1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMTllXHViMTlmXHViMWEwXHViMWExXHViMWEyXHViMWEzXHViMWE0XHViMWE1XHViMWE2XHViMWE3XHViMWE5XHViMWFhXHViMWFiXHViMWFjXHViMWFkXHViMWFlXHViMWFmXHViMWIwXHViMWIxXHViMWIyXHViMWIzXHViMWI0XHVi'@;
put 'MWI1XHViMWI2XHViMWI3XHViMWI4XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMWI5XHViMWJhXHViMWJiXHViMWJjXHViMWJkXHViMWJlXHViMWJmXHViMWMwXHViMWMxXHViMWMyXHViMWMzXHViMWM0XHViMWM1XHViMWM2XHViMWM3XHViMWM4XHViMWM5XHViMWNh'@;
put 'XHViMWNiXHViMWNkXHViMWNlXHViMWNmXHViMWQxXHViMWQyXHViMWQzXHViMWQ1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMWQ2XHViMWQ3XHViMWQ4XHViMWQ5XHViMWRhXHViMWRiXHViMWRlXHViMWUwXHViMWUxXHViMWUyXHViMWUzXHViMWU0XHViMWU1XHVi'@;
put 'MWU2XHViMWU3XHViMWVhXHViMWViXHViMWVkXHViMWVlXHViMWVmXHViMWYxXHViMWYyXHViMWYzXHViMWY0XHViMWY1XHViMWY2XHViMWY3XHViMWY4XHViMWZhXHViMWZjXHViMWZlXHViMWZmXHViMjAwXHViMjAxXHViMjAyXHViMjAzXHViMjA2XHViMjA3XHViMjA5XHViMjBhXHViMjBk'@;
put 'XHViMjBlXHViMjBmXHViMjEwXHViMjExXHViMjEyXHViMjEzXHViMjE2XHViMjE4XHViMjFhXHViMjFiXHViMjFjXHViMjFkXHViMjFlXHViMjFmXHViMjIxXHViMjIyXHViMjIzXHViMjI0XHViMjI1XHViMjI2XHViMjI3XHViMjI4XHViMjI5XHViMjJhXHViMjJiXHViMjJjXHViMjJkXHVi'@;
put 'MjJlXHViMjJmXHViMjMwXHViMjMxXHViMjMyXHViMjMzXHViMjM1XHViMjM2XHViMjM3XHViMjM4XHViMjM5XHViMjNhXHViMjNiXHViMjNkXHViMjNlXHViMjNmXHViMjQwXHViMjQxXHViMjQyXHViMjQzXHViMjQ0XHViMjQ1XHViMjQ2XHViMjQ3XHViMjQ4XHViMjQ5XHViMjRhXHViMjRi'@;
put 'XHViMjRjXHViMjRkXHViMjRlXHViMjRmXHViMjUwXHViMjUxXHViMjUyXHViMjUzXHViMjU0XHViMjU1XHViMjU2XHViMjU3XHViMjU5XHViMjVhXHViMjViXHViMjVkXHViMjVlXHViMjVmXHViMjYxXHViMjYyXHViMjYzXHViMjY0XHViMjY1XHViMjY2XHViMjY3XHViMjZhXHViMjZiXHVi'@;
put 'MjZjXHViMjZkXHViMjZlXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTM1XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxMzVdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzEzNV1bdl1dPTM0NTYwK3YsVFszNDU2MCt2XT1rWzEzNV1bdl0pO2ZvcihrWzEzNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjI2Zlx1YjI3MFx1YjI3MVx1YjI3Mlx1YjI3M1x1YjI3Nlx1YjI3N1x1YjI3OFx1YjI3OVx1YjI3YVx1YjI3Ylx1YjI3ZFx1YjI3ZVx1YjI3Zlx1YjI4MFx1YjI4MVx1YjI4Mlx1YjI4M1x1YjI4Nlx1YjI4N1x1'@;
put 'YjI4OFx1YjI4YVx1YjI4Ylx1YjI4Y1x1YjI4ZFx1YjI4ZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjI4Zlx1YjI5Mlx1YjI5M1x1YjI5NVx1YjI5Nlx1YjI5N1x1YjI5Ylx1YjI5Y1x1YjI5ZFx1YjI5ZVx1YjI5Zlx1YjJhMlx1YjJhNFx1YjJhN1x1YjJhOFx1YjJh'@;
put 'OVx1YjJhYlx1YjJhZFx1YjJhZVx1YjJhZlx1YjJiMVx1YjJiMlx1YjJiM1x1YjJiNVx1YjJiNlx1YjJiN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjJiOFx1YjJiOVx1YjJiYVx1YjJiYlx1YjJiY1x1YjJiZFx1YjJiZVx1YjJiZlx1YjJjMFx1YjJjMVx1YjJjMlx1'@;
put 'YjJjM1x1YjJjNFx1YjJjNVx1YjJjNlx1YjJjN1x1YjJjYVx1YjJjYlx1YjJjZFx1YjJjZVx1YjJjZlx1YjJkMVx1YjJkM1x1YjJkNFx1YjJkNVx1YjJkNlx1YjJkN1x1YjJkYVx1YjJkY1x1YjJkZVx1YjJkZlx1YjJlMFx1YjJlMVx1YjJlM1x1YjJlN1x1YjJlOVx1YjJlYVx1YjJmMFx1YjJm'@;
put 'MVx1YjJmMlx1YjJmNlx1YjJmY1x1YjJmZFx1YjJmZVx1YjMwMlx1YjMwM1x1YjMwNVx1YjMwNlx1YjMwN1x1YjMwOVx1YjMwYVx1YjMwYlx1YjMwY1x1YjMwZFx1YjMwZVx1YjMwZlx1YjMxMlx1YjMxNlx1YjMxN1x1YjMxOFx1YjMxOVx1YjMxYVx1YjMxYlx1YjMxZFx1YjMxZVx1YjMxZlx1'@;
put 'YjMyMFx1YjMyMVx1YjMyMlx1YjMyM1x1YjMyNFx1YjMyNVx1YjMyNlx1YjMyN1x1YjMyOFx1YjMyOVx1YjMyYVx1YjMyYlx1YjMyY1x1YjMyZFx1YjMyZVx1YjMyZlx1YjMzMFx1YjMzMVx1YjMzMlx1YjMzM1x1YjMzNFx1YjMzNVx1YjMzNlx1YjMzN1x1YjMzOFx1YjMzOVx1YjMzYVx1YjMz'@;
put 'Ylx1YjMzY1x1YjMzZFx1YjMzZVx1YjMzZlx1YjM0MFx1YjM0MVx1YjM0Mlx1YjM0M1x1YjM0NFx1YjM0NVx1YjM0Nlx1YjM0N1x1YjM0OFx1YjM0OVx1YjM0YVx1YjM0Ylx1YjM0Y1x1YjM0ZFx1YjM0ZVx1YjM0Zlx1YjM1MFx1YjM1MVx1YjM1Mlx1YjM1M1x1YjM1N1x1YjM1OVx1YjM1YVx1'@;
put 'YjM1ZFx1YjM2MFx1YjM2MVx1YjM2Mlx1YjM2M1x1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzEzNl0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTM2XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxMzZdW3ZdXT0zNDgxNit2LFRbMzQ4MTYrdl09a1sxMzZdW3ZdKTtmb3Ioa1sxMzddPSJcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIzNjZcdWIzNjhcdWIzNmFcdWIzNmNcdWIzNmRcdWIzNmZcdWIzNzJcdWIzNzNcdWIzNzVcdWIzNzZcdWIzNzdcdWIzNzlcdWIzN2FcdWIzN2JcdWIzN2NcdWIzN2RcdWIzN2VcdWIzN2Zc'@;
put 'dWIzODJcdWIzODZcdWIzODdcdWIzODhcdWIzODlcdWIzOGFcdWIzOGJcdWIzOGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIzOGVcdWIzOGZcdWIzOTFcdWIzOTJcdWIzOTNcdWIzOTVcdWIzOTZcdWIzOTdcdWIzOThcdWIzOTlcdWIzOWFcdWIzOWJcdWIzOWNcdWIz'@;
put 'OWRcdWIzOWVcdWIzOWZcdWIzYTJcdWIzYTNcdWIzYTRcdWIzYTVcdWIzYTZcdWIzYTdcdWIzYTlcdWIzYWFcdWIzYWJcdWIzYWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIzYWVcdWIzYWZcdWIzYjBcdWIzYjFcdWIzYjJcdWIzYjNcdWIzYjRcdWIzYjVcdWIzYjZc'@;
put 'dWIzYjdcdWIzYjhcdWIzYjlcdWIzYmFcdWIzYmJcdWIzYmNcdWIzYmRcdWIzYmVcdWIzYmZcdWIzYzBcdWIzYzFcdWIzYzJcdWIzYzNcdWIzYzZcdWIzYzdcdWIzYzlcdWIzY2FcdWIzY2RcdWIzY2ZcdWIzZDFcdWIzZDJcdWIzZDNcdWIzZDZcdWIzZDhcdWIzZGFcdWIzZGNcdWIzZGVcdWIz'@;
put 'ZGZcdWIzZTFcdWIzZTJcdWIzZTNcdWIzZTVcdWIzZTZcdWIzZTdcdWIzZTlcdWIzZWFcdWIzZWJcdWIzZWNcdWIzZWRcdWIzZWVcdWIzZWZcdWIzZjBcdWIzZjFcdWIzZjJcdWIzZjNcdWIzZjRcdWIzZjVcdWIzZjZcdWIzZjdcdWIzZjhcdWIzZjlcdWIzZmFcdWIzZmJcdWIzZmRcdWIzZmVc'@;
put 'dWIzZmZcdWI0MDBcdWI0MDFcdWI0MDJcdWI0MDNcdWI0MDRcdWI0MDVcdWI0MDZcdWI0MDdcdWI0MDhcdWI0MDlcdWI0MGFcdWI0MGJcdWI0MGNcdWI0MGRcdWI0MGVcdWI0MGZcdWI0MTFcdWI0MTJcdWI0MTNcdWI0MTRcdWI0MTVcdWI0MTZcdWI0MTdcdWI0MTlcdWI0MWFcdWI0MWJcdWI0'@;
put 'MWRcdWI0MWVcdWI0MWZcdWI0MjFcdWI0MjJcdWI0MjNcdWI0MjRcdWI0MjVcdWI0MjZcdWI0MjdcdWI0MmFcdWI0MmNcdWI0MmRcdWI0MmVcdWI0MmZcdWI0MzBcdWI0MzFcdWI0MzJcdWI0MzNcdWI0MzVcdWI0MzZcdWI0MzdcdWI0MzhcdWI0MzlcdWI0M2FcdWI0M2JcdWI0M2NcdWI0M2Rc'@;
put 'dWI0M2VcdWI0M2ZcdWI0NDBcdWI0NDFcdWI0NDJcdWI0NDNcdWI0NDRcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxMzddLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzEzN11bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTM3XVt2XV09MzUwNzIrdixUWzM1MDcyK3ZdPWtbMTM3XVt2XSk7Zm9y'@;
put 'KGtbMTM4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNDQ1XHViNDQ2XHViNDQ3XHViNDQ4XHViNDQ5XHViNDRhXHViNDRiXHViNDRjXHViNDRkXHViNDRlXHViNDRmXHViNDUyXHViNDUzXHViNDU1XHViNDU2XHViNDU3'@;
put 'XHViNDU5XHViNDVhXHViNDViXHViNDVjXHViNDVkXHViNDVlXHViNDVmXHViNDYyXHViNDY0XHViNDY2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNDY3XHViNDY4XHViNDY5XHViNDZhXHViNDZiXHViNDZkXHViNDZlXHViNDZmXHViNDcwXHViNDcxXHViNDcyXHVi'@;
put 'NDczXHViNDc0XHViNDc1XHViNDc2XHViNDc3XHViNDc4XHViNDc5XHViNDdhXHViNDdiXHViNDdjXHViNDdkXHViNDdlXHViNDdmXHViNDgxXHViNDgyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNDgzXHViNDg0XHViNDg1XHViNDg2XHViNDg3XHViNDg5XHViNDhh'@;
put 'XHViNDhiXHViNDhjXHViNDhkXHViNDhlXHViNDhmXHViNDkwXHViNDkxXHViNDkyXHViNDkzXHViNDk0XHViNDk1XHViNDk2XHViNDk3XHViNDk4XHViNDk5XHViNDlhXHViNDliXHViNDljXHViNDllXHViNDlmXHViNGEwXHViNGExXHViNGEyXHViNGEzXHViNGE1XHViNGE2XHViNGE3XHVi'@;
put 'NGE5XHViNGFhXHViNGFiXHViNGFkXHViNGFlXHViNGFmXHViNGIwXHViNGIxXHViNGIyXHViNGIzXHViNGI0XHViNGI2XHViNGI4XHViNGJhXHViNGJiXHViNGJjXHViNGJkXHViNGJlXHViNGJmXHViNGMxXHViNGMyXHViNGMzXHViNGM1XHViNGM2XHViNGM3XHViNGM5XHViNGNhXHViNGNi'@;
put 'XHViNGNjXHViNGNkXHViNGNlXHViNGNmXHViNGQxXHViNGQyXHViNGQzXHViNGQ0XHViNGQ2XHViNGQ3XHViNGQ4XHViNGQ5XHViNGRhXHViNGRiXHViNGRlXHViNGRmXHViNGUxXHViNGUyXHViNGU1XHViNGU3XHViNGU4XHViNGU5XHViNGVhXHViNGViXHViNGVlXHViNGYwXHViNGYyXHVi'@;
put 'NGYzXHViNGY0XHViNGY1XHViNGY2XHViNGY3XHViNGY5XHViNGZhXHViNGZiXHViNGZjXHViNGZkXHViNGZlXHViNGZmXHViNTAwXHViNTAxXHViNTAyXHViNTAzXHViNTA0XHViNTA1XHViNTA2XHViNTA3XHViNTA4XHViNTA5XHViNTBhXHViNTBiXHViNTBjXHViNTBkXHViNTBlXHViNTBm'@;
put 'XHViNTEwXHViNTExXHViNTEyXHViNTEzXHViNTE2XHViNTE3XHViNTE5XHViNTFhXHViNTFkXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTM4XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxMzhdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzEzOF1bdl1dPTM1MzI4K3YsVFszNTMyOCt2XT1r'@;
put 'WzEzOF1bdl0pO2ZvcihrWzEzOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjUxZVx1YjUxZlx1YjUyMFx1YjUyMVx1YjUyMlx1YjUyM1x1YjUyNlx1YjUyYlx1YjUyY1x1YjUyZFx1YjUyZVx1YjUyZlx1YjUzMlx1YjUz'@;
put 'M1x1YjUzNVx1YjUzNlx1YjUzN1x1YjUzOVx1YjUzYVx1YjUzYlx1YjUzY1x1YjUzZFx1YjUzZVx1YjUzZlx1YjU0Mlx1YjU0Nlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjU0N1x1YjU0OFx1YjU0OVx1YjU0YVx1YjU0ZVx1YjU0Zlx1YjU1MVx1YjU1Mlx1YjU1M1x1'@;
put 'YjU1NVx1YjU1Nlx1YjU1N1x1YjU1OFx1YjU1OVx1YjU1YVx1YjU1Ylx1YjU1ZVx1YjU2Mlx1YjU2M1x1YjU2NFx1YjU2NVx1YjU2Nlx1YjU2N1x1YjU2OFx1YjU2OVx1YjU2YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjU2Ylx1YjU2Y1x1YjU2ZFx1YjU2ZVx1YjU2'@;
put 'Zlx1YjU3MFx1YjU3MVx1YjU3Mlx1YjU3M1x1YjU3NFx1YjU3NVx1YjU3Nlx1YjU3N1x1YjU3OFx1YjU3OVx1YjU3YVx1YjU3Ylx1YjU3Y1x1YjU3ZFx1YjU3ZVx1YjU3Zlx1YjU4MFx1YjU4MVx1YjU4Mlx1YjU4M1x1YjU4NFx1YjU4NVx1YjU4Nlx1YjU4N1x1YjU4OFx1YjU4OVx1YjU4YVx1'@;
put 'YjU4Ylx1YjU4Y1x1YjU4ZFx1YjU4ZVx1YjU4Zlx1YjU5MFx1YjU5MVx1YjU5Mlx1YjU5M1x1YjU5NFx1YjU5NVx1YjU5Nlx1YjU5N1x1YjU5OFx1YjU5OVx1YjU5YVx1YjU5Ylx1YjU5Y1x1YjU5ZFx1YjU5ZVx1YjU5Zlx1YjVhMlx1YjVhM1x1YjVhNVx1YjVhNlx1YjVhN1x1YjVhOVx1YjVh'@;
put 'Y1x1YjVhZFx1YjVhZVx1YjVhZlx1YjViMlx1YjViNlx1YjViN1x1YjViOFx1YjViOVx1YjViYVx1YjViZVx1YjViZlx1YjVjMVx1YjVjMlx1YjVjM1x1YjVjNVx1YjVjNlx1YjVjN1x1YjVjOFx1YjVjOVx1YjVjYVx1YjVjYlx1YjVjZVx1YjVkMlx1YjVkM1x1YjVkNFx1YjVkNVx1YjVkNlx1'@;
put 'YjVkN1x1YjVkOVx1YjVkYVx1YjVkYlx1YjVkY1x1YjVkZFx1YjVkZVx1YjVkZlx1YjVlMFx1YjVlMVx1YjVlMlx1YjVlM1x1YjVlNFx1YjVlNVx1YjVlNlx1YjVlN1x1YjVlOFx1YjVlOVx1YjVlYVx1YjVlYlx1YjVlZFx1YjVlZVx1YjVlZlx1YjVmMFx1YjVmMVx1YjVmMlx1YjVmM1x1YjVm'@;
put 'NFx1YjVmNVx1YjVmNlx1YjVmN1x1YjVmOFx1YjVmOVx1YjVmYVx1YjVmYlx1YjVmY1x1YjVmZFx1YjVmZVx1YjVmZlx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzEzOV0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTM5XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxMzldW3ZdXT0zNTU4NCt2'@;
put 'LFRbMzU1ODQrdl09a1sxMzldW3ZdKTtmb3Ioa1sxNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2MDBcdWI2MDFcdWI2MDJcdWI2MDNcdWI2MDRcdWI2MDVcdWI2MDZcdWI2MDdcdWI2MDhcdWI2MDlcdWI2MGFcdWI2'@;
put 'MGJcdWI2MGNcdWI2MGRcdWI2MGVcdWI2MGZcdWI2MTJcdWI2MTNcdWI2MTVcdWI2MTZcdWI2MTdcdWI2MTlcdWI2MWFcdWI2MWJcdWI2MWNcdWI2MWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2MWVcdWI2MWZcdWI2MjBcdWI2MjFcdWI2MjJcdWI2MjNcdWI2MjRc'@;
put 'dWI2MjZcdWI2MjdcdWI2MjhcdWI2MjlcdWI2MmFcdWI2MmJcdWI2MmRcdWI2MmVcdWI2MmZcdWI2MzBcdWI2MzFcdWI2MzJcdWI2MzNcdWI2MzVcdWI2MzZcdWI2MzdcdWI2MzhcdWI2MzlcdWI2M2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2M2JcdWI2M2NcdWI2'@;
put 'M2RcdWI2M2VcdWI2M2ZcdWI2NDBcdWI2NDFcdWI2NDJcdWI2NDNcdWI2NDRcdWI2NDVcdWI2NDZcdWI2NDdcdWI2NDlcdWI2NGFcdWI2NGJcdWI2NGNcdWI2NGRcdWI2NGVcdWI2NGZcdWI2NTBcdWI2NTFcdWI2NTJcdWI2NTNcdWI2NTRcdWI2NTVcdWI2NTZcdWI2NTdcdWI2NThcdWI2NTlc'@;
put 'dWI2NWFcdWI2NWJcdWI2NWNcdWI2NWRcdWI2NWVcdWI2NWZcdWI2NjBcdWI2NjFcdWI2NjJcdWI2NjNcdWI2NjVcdWI2NjZcdWI2NjdcdWI2NjlcdWI2NmFcdWI2NmJcdWI2NmNcdWI2NmRcdWI2NmVcdWI2NmZcdWI2NzBcdWI2NzFcdWI2NzJcdWI2NzNcdWI2NzRcdWI2NzVcdWI2NzZcdWI2'@;
put 'NzdcdWI2NzhcdWI2NzlcdWI2N2FcdWI2N2JcdWI2N2NcdWI2N2RcdWI2N2VcdWI2N2ZcdWI2ODBcdWI2ODFcdWI2ODJcdWI2ODNcdWI2ODRcdWI2ODVcdWI2ODZcdWI2ODdcdWI2ODhcdWI2ODlcdWI2OGFcdWI2OGJcdWI2OGNcdWI2OGRcdWI2OGVcdWI2OGZcdWI2OTBcdWI2OTFcdWI2OTJc'@;
put 'dWI2OTNcdWI2OTRcdWI2OTVcdWI2OTZcdWI2OTdcdWI2OThcdWI2OTlcdWI2OWFcdWI2OWJcdWI2OWVcdWI2OWZcdWI2YTFcdWI2YTJcdWI2YTNcdWI2YTVcdWI2YTZcdWI2YTdcdWI2YThcdWI2YTlcdWI2YWFcdWI2YWRcdWI2YWVcdWI2YWZcdWI2YjBcdWI2YjJcdWI2YjNcdWI2YjRcdWI2'@;
put 'YjVcdWI2YjZcdWI2YjdcdWI2YjhcdWI2YjlcdWI2YmFcdWI2YmJcdWI2YmNcdWI2YmRcdWI2YmVcdWI2YmZcdWI2YzBcdWI2YzFcdWI2YzJcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxNDBdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE0MF1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTQw'@;
put 'XVt2XV09MzU4NDArdixUWzM1ODQwK3ZdPWtbMTQwXVt2XSk7Zm9yKGtbMTQxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNmMzXHViNmM0XHViNmM1XHViNmM2XHViNmM3XHViNmM4XHViNmM5XHViNmNhXHViNmNiXHVi'@;
put 'NmNjXHViNmNkXHViNmNlXHViNmNmXHViNmQwXHViNmQxXHViNmQyXHViNmQzXHViNmQ1XHViNmQ2XHViNmQ3XHViNmQ4XHViNmQ5XHViNmRhXHViNmRiXHViNmRjXHViNmRkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNmRlXHViNmRmXHViNmUwXHViNmUxXHViNmUy'@;
put 'XHViNmUzXHViNmU0XHViNmU1XHViNmU2XHViNmU3XHViNmU4XHViNmU5XHViNmVhXHViNmViXHViNmVjXHViNmVkXHViNmVlXHViNmVmXHViNmYxXHViNmYyXHViNmYzXHViNmY1XHViNmY2XHViNmY3XHViNmY5XHViNmZhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVi'@;
put 'NmZiXHViNmZjXHViNmZkXHViNmZlXHViNmZmXHViNzAyXHViNzAzXHViNzA0XHViNzA2XHViNzA3XHViNzA4XHViNzA5XHViNzBhXHViNzBiXHViNzBjXHViNzBkXHViNzBlXHViNzBmXHViNzEwXHViNzExXHViNzEyXHViNzEzXHViNzE0XHViNzE1XHViNzE2XHViNzE3XHViNzE4XHViNzE5'@;
put 'XHViNzFhXHViNzFiXHViNzFjXHViNzFkXHViNzFlXHViNzFmXHViNzIwXHViNzIxXHViNzIyXHViNzIzXHViNzI0XHViNzI1XHViNzI2XHViNzI3XHViNzJhXHViNzJiXHViNzJkXHViNzJlXHViNzMxXHViNzMyXHViNzMzXHViNzM0XHViNzM1XHViNzM2XHViNzM3XHViNzNhXHViNzNjXHVi'@;
put 'NzNkXHViNzNlXHViNzNmXHViNzQwXHViNzQxXHViNzQyXHViNzQzXHViNzQ1XHViNzQ2XHViNzQ3XHViNzQ5XHViNzRhXHViNzRiXHViNzRkXHViNzRlXHViNzRmXHViNzUwXHViNzUxXHViNzUyXHViNzUzXHViNzU2XHViNzU3XHViNzU4XHViNzU5XHViNzVhXHViNzViXHViNzVjXHViNzVk'@;
put 'XHViNzVlXHViNzVmXHViNzYxXHViNzYyXHViNzYzXHViNzY1XHViNzY2XHViNzY3XHViNzY5XHViNzZhXHViNzZiXHViNzZjXHViNzZkXHViNzZlXHViNzZmXHViNzcyXHViNzc0XHViNzc2XHViNzc3XHViNzc4XHViNzc5XHViNzdhXHViNzdiXHViNzdlXHViNzdmXHViNzgxXHViNzgyXHVi'@;
put 'NzgzXHViNzg1XHViNzg2XHViNzg3XHViNzg4XHViNzg5XHViNzhhXHViNzhiXHViNzhlXHViNzkzXHViNzk0XHViNzk1XHViNzlhXHViNzliXHViNzlkXHViNzllXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTQxXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxNDFdW3ZdLmNoYXJDb2RlQXQo'@;
put 'MCkmJihzZVtrWzE0MV1bdl1dPTM2MDk2K3YsVFszNjA5Nit2XT1rWzE0MV1bdl0pO2ZvcihrWzE0Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Yjc5Zlx1YjdhMVx1YjdhMlx1YjdhM1x1YjdhNFx1YjdhNVx1YjdhNlx1'@;
put 'YjdhN1x1YjdhYVx1YjdhZVx1YjdhZlx1YjdiMFx1YjdiMVx1YjdiMlx1YjdiM1x1YjdiNlx1YjdiN1x1YjdiOVx1YjdiYVx1YjdiYlx1YjdiY1x1YjdiZFx1YjdiZVx1YjdiZlx1YjdjMFx1YjdjMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjdjMlx1YjdjM1x1Yjdj'@;
put 'NFx1YjdjNVx1YjdjNlx1YjdjOFx1YjdjYVx1YjdjYlx1YjdjY1x1YjdjZFx1YjdjZVx1YjdjZlx1YjdkMFx1YjdkMVx1YjdkMlx1YjdkM1x1YjdkNFx1YjdkNVx1YjdkNlx1YjdkN1x1YjdkOFx1YjdkOVx1YjdkYVx1YjdkYlx1YjdkY1x1YjdkZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1YjdkZVx1YjdkZlx1YjdlMFx1YjdlMVx1YjdlMlx1YjdlM1x1YjdlNFx1YjdlNVx1YjdlNlx1YjdlN1x1YjdlOFx1YjdlOVx1YjdlYVx1YjdlYlx1YjdlZVx1YjdlZlx1YjdmMVx1YjdmMlx1YjdmM1x1YjdmNVx1YjdmNlx1YjdmN1x1YjdmOFx1YjdmOVx1YjdmYVx1Yjdm'@;
put 'Ylx1YjdmZVx1YjgwMlx1YjgwM1x1YjgwNFx1YjgwNVx1YjgwNlx1YjgwYVx1YjgwYlx1YjgwZFx1YjgwZVx1YjgwZlx1YjgxMVx1YjgxMlx1YjgxM1x1YjgxNFx1YjgxNVx1YjgxNlx1YjgxN1x1YjgxYVx1YjgxY1x1YjgxZVx1YjgxZlx1YjgyMFx1YjgyMVx1YjgyMlx1YjgyM1x1YjgyNlx1'@;
put 'YjgyN1x1YjgyOVx1YjgyYVx1YjgyYlx1YjgyZFx1YjgyZVx1YjgyZlx1YjgzMFx1YjgzMVx1YjgzMlx1YjgzM1x1YjgzNlx1YjgzYVx1YjgzYlx1YjgzY1x1YjgzZFx1YjgzZVx1YjgzZlx1Yjg0MVx1Yjg0Mlx1Yjg0M1x1Yjg0NVx1Yjg0Nlx1Yjg0N1x1Yjg0OFx1Yjg0OVx1Yjg0YVx1Yjg0'@;
put 'Ylx1Yjg0Y1x1Yjg0ZFx1Yjg0ZVx1Yjg0Zlx1Yjg1MFx1Yjg1Mlx1Yjg1NFx1Yjg1NVx1Yjg1Nlx1Yjg1N1x1Yjg1OFx1Yjg1OVx1Yjg1YVx1Yjg1Ylx1Yjg1ZVx1Yjg1Zlx1Yjg2MVx1Yjg2Mlx1Yjg2M1x1Yjg2NVx1Yjg2Nlx1Yjg2N1x1Yjg2OFx1Yjg2OVx1Yjg2YVx1Yjg2Ylx1Yjg2ZVx1'@;
put 'Yjg3MFx1Yjg3Mlx1Yjg3M1x1Yjg3NFx1Yjg3NVx1Yjg3Nlx1Yjg3N1x1Yjg3OVx1Yjg3YVx1Yjg3Ylx1Yjg3ZFx1Yjg3ZVx1Yjg3Zlx1Yjg4MFx1Yjg4MVx1Yjg4Mlx1Yjg4M1x1Yjg4NFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE0Ml0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTQyXVt2'@;
put 'XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxNDJdW3ZdXT0zNjM1Mit2LFRbMzYzNTIrdl09a1sxNDJdW3ZdKTtmb3Ioa1sxNDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI4ODVcdWI4ODZcdWI4ODdcdWI4ODhcdWI4ODlc'@;
put 'dWI4OGFcdWI4OGJcdWI4OGNcdWI4OGVcdWI4OGZcdWI4OTBcdWI4OTFcdWI4OTJcdWI4OTNcdWI4OTRcdWI4OTVcdWI4OTZcdWI4OTdcdWI4OThcdWI4OTlcdWI4OWFcdWI4OWJcdWI4OWNcdWI4OWRcdWI4OWVcdWI4OWZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI4'@;
put 'YTBcdWI4YTFcdWI4YTJcdWI4YTNcdWI4YTRcdWI4YTVcdWI4YTZcdWI4YTdcdWI4YTlcdWI4YWFcdWI4YWJcdWI4YWNcdWI4YWRcdWI4YWVcdWI4YWZcdWI4YjFcdWI4YjJcdWI4YjNcdWI4YjVcdWI4YjZcdWI4YjdcdWI4YjlcdWI4YmFcdWI4YmJcdWI4YmNcdWI4YmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI4YmVcdWI4YmZcdWI4YzJcdWI4YzRcdWI4YzZcdWI4YzdcdWI4YzhcdWI4YzlcdWI4Y2FcdWI4Y2JcdWI4Y2RcdWI4Y2VcdWI4Y2ZcdWI4ZDFcdWI4ZDJcdWI4ZDNcdWI4ZDVcdWI4ZDZcdWI4ZDdcdWI4ZDhcdWI4ZDlcdWI4ZGFcdWI4ZGJcdWI4'@;
put 'ZGNcdWI4ZGVcdWI4ZTBcdWI4ZTJcdWI4ZTNcdWI4ZTRcdWI4ZTVcdWI4ZTZcdWI4ZTdcdWI4ZWFcdWI4ZWJcdWI4ZWRcdWI4ZWVcdWI4ZWZcdWI4ZjFcdWI4ZjJcdWI4ZjNcdWI4ZjRcdWI4ZjVcdWI4ZjZcdWI4ZjdcdWI4ZmFcdWI4ZmNcdWI4ZmVcdWI4ZmZcdWI5MDBcdWI5MDFcdWI5MDJc'@;
put 'dWI5MDNcdWI5MDVcdWI5MDZcdWI5MDdcdWI5MDhcdWI5MDlcdWI5MGFcdWI5MGJcdWI5MGNcdWI5MGRcdWI5MGVcdWI5MGZcdWI5MTBcdWI5MTFcdWI5MTJcdWI5MTNcdWI5MTRcdWI5MTVcdWI5MTZcdWI5MTdcdWI5MTlcdWI5MWFcdWI5MWJcdWI5MWNcdWI5MWRcdWI5MWVcdWI5MWZcdWI5'@;
put 'MjFcdWI5MjJcdWI5MjNcdWI5MjRcdWI5MjVcdWI5MjZcdWI5MjdcdWI5MjhcdWI5MjlcdWI5MmFcdWI5MmJcdWI5MmNcdWI5MmRcdWI5MmVcdWI5MmZcdWI5MzBcdWI5MzFcdWI5MzJcdWI5MzNcdWI5MzRcdWI5MzVcdWI5MzZcdWI5MzdcdWI5MzhcdWI5MzlcdWI5M2FcdWI5M2JcdWI5M2Vc'@;
put 'dWI5M2ZcdWI5NDFcdWI5NDJcdWI5NDNcdWI5NDVcdWI5NDZcdWI5NDdcdWI5NDhcdWI5NDlcdWI5NGFcdWI5NGJcdWI5NGRcdWI5NGVcdWI5NTBcdWI5NTJcdWI5NTNcdWI5NTRcdWI5NTVcdWI5NTZcdWI5NTdcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxNDNdLmxlbmd0aDsrK3YpNjU1'@;
put 'MzMhPT1rWzE0M11bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTQzXVt2XV09MzY2MDgrdixUWzM2NjA4K3ZdPWtbMTQzXVt2XSk7Zm9yKGtbMTQ0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViOTVhXHViOTViXHViOTVk'@;
put 'XHViOTVlXHViOTVmXHViOTYxXHViOTYyXHViOTYzXHViOTY0XHViOTY1XHViOTY2XHViOTY3XHViOTZhXHViOTZjXHViOTZlXHViOTZmXHViOTcwXHViOTcxXHViOTcyXHViOTczXHViOTc2XHViOTc3XHViOTc5XHViOTdhXHViOTdiXHViOTdkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHViOTdlXHViOTdmXHViOTgwXHViOTgxXHViOTgyXHViOTgzXHViOTg2XHViOTg4XHViOThiXHViOThjXHViOThmXHViOTkwXHViOTkxXHViOTkyXHViOTkzXHViOTk0XHViOTk1XHViOTk2XHViOTk3XHViOTk4XHViOTk5XHViOTlhXHViOTliXHViOTljXHViOTlkXHViOTll'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViOTlmXHViOWEwXHViOWExXHViOWEyXHViOWEzXHViOWE0XHViOWE1XHViOWE2XHViOWE3XHViOWE4XHViOWE5XHViOWFhXHViOWFiXHViOWFlXHViOWFmXHViOWIxXHViOWIyXHViOWIzXHViOWI1XHViOWI2XHViOWI3XHVi'@;
put 'OWI4XHViOWI5XHViOWJhXHViOWJiXHViOWJlXHViOWMwXHViOWMyXHViOWMzXHViOWM0XHViOWM1XHViOWM2XHViOWM3XHViOWNhXHViOWNiXHViOWNkXHViOWQzXHViOWQ0XHViOWQ1XHViOWQ2XHViOWQ3XHViOWRhXHViOWRjXHViOWRmXHViOWUwXHViOWUyXHViOWU2XHViOWU3XHViOWU5'@;
put 'XHViOWVhXHViOWViXHViOWVkXHViOWVlXHViOWVmXHViOWYwXHViOWYxXHViOWYyXHViOWYzXHViOWY2XHViOWZiXHViOWZjXHViOWZkXHViOWZlXHViOWZmXHViYTAyXHViYTAzXHViYTA0XHViYTA1XHViYTA2XHViYTA3XHViYTA5XHViYTBhXHViYTBiXHViYTBjXHViYTBkXHViYTBlXHVi'@;
put 'YTBmXHViYTEwXHViYTExXHViYTEyXHViYTEzXHViYTE0XHViYTE2XHViYTE3XHViYTE4XHViYTE5XHViYTFhXHViYTFiXHViYTFjXHViYTFkXHViYTFlXHViYTFmXHViYTIwXHViYTIxXHViYTIyXHViYTIzXHViYTI0XHViYTI1XHViYTI2XHViYTI3XHViYTI4XHViYTI5XHViYTJhXHViYTJi'@;
put 'XHViYTJjXHViYTJkXHViYTJlXHViYTJmXHViYTMwXHViYTMxXHViYTMyXHViYTMzXHViYTM0XHViYTM1XHViYTM2XHViYTM3XHViYTNhXHViYTNiXHViYTNkXHViYTNlXHViYTNmXHViYTQxXHViYTQzXHViYTQ0XHViYTQ1XHViYTQ2XHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTQ0XS5s'@;
put 'ZW5ndGg7Kyt2KTY1NTMzIT09a1sxNDRdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE0NF1bdl1dPTM2ODY0K3YsVFszNjg2NCt2XT1rWzE0NF1bdl0pO2ZvcihrWzE0NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmE0'@;
put 'N1x1YmE0YVx1YmE0Y1x1YmE0Zlx1YmE1MFx1YmE1MVx1YmE1Mlx1YmE1Nlx1YmE1N1x1YmE1OVx1YmE1YVx1YmE1Ylx1YmE1ZFx1YmE1ZVx1YmE1Zlx1YmE2MFx1YmE2MVx1YmE2Mlx1YmE2M1x1YmE2Nlx1YmE2YVx1YmE2Ylx1YmE2Y1x1YmE2ZFx1YmE2ZVx1YmE2Zlx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmE3Mlx1YmE3M1x1YmE3NVx1YmE3Nlx1YmE3N1x1YmE3OVx1YmE3YVx1YmE3Ylx1YmE3Y1x1YmE3ZFx1YmE3ZVx1YmE3Zlx1YmE4MFx1YmE4MVx1YmE4Mlx1YmE4Nlx1YmE4OFx1YmE4OVx1YmE4YVx1YmE4Ylx1YmE4ZFx1YmE4ZVx1YmE4Zlx1YmE5'@;
put 'MFx1YmE5MVx1YmE5Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmE5M1x1YmE5NFx1YmE5NVx1YmE5Nlx1YmE5N1x1YmE5OFx1YmE5OVx1YmE5YVx1YmE5Ylx1YmE5Y1x1YmE5ZFx1YmE5ZVx1YmE5Zlx1YmFhMFx1YmFhMVx1YmFhMlx1YmFhM1x1YmFhNFx1YmFhNVx1'@;
put 'YmFhNlx1YmFhN1x1YmFhYVx1YmFhZFx1YmFhZVx1YmFhZlx1YmFiMVx1YmFiM1x1YmFiNFx1YmFiNVx1YmFiNlx1YmFiN1x1YmFiYVx1YmFiY1x1YmFiZVx1YmFiZlx1YmFjMFx1YmFjMVx1YmFjMlx1YmFjM1x1YmFjNVx1YmFjNlx1YmFjN1x1YmFjOVx1YmFjYVx1YmFjYlx1YmFjY1x1YmFj'@;
put 'ZFx1YmFjZVx1YmFjZlx1YmFkMFx1YmFkMVx1YmFkMlx1YmFkM1x1YmFkNFx1YmFkNVx1YmFkNlx1YmFkN1x1YmFkYVx1YmFkYlx1YmFkY1x1YmFkZFx1YmFkZVx1YmFkZlx1YmFlMFx1YmFlMVx1YmFlMlx1YmFlM1x1YmFlNFx1YmFlNVx1YmFlNlx1YmFlN1x1YmFlOFx1YmFlOVx1YmFlYVx1'@;
put 'YmFlYlx1YmFlY1x1YmFlZFx1YmFlZVx1YmFlZlx1YmFmMFx1YmFmMVx1YmFmMlx1YmFmM1x1YmFmNFx1YmFmNVx1YmFmNlx1YmFmN1x1YmFmOFx1YmFmOVx1YmFmYVx1YmFmYlx1YmFmZFx1YmFmZVx1YmFmZlx1YmIwMVx1YmIwMlx1YmIwM1x1YmIwNVx1YmIwNlx1YmIwN1x1YmIwOFx1YmIw'@;
put 'OVx1YmIwYVx1YmIwYlx1YmIwY1x1YmIwZVx1YmIxMFx1YmIxMlx1YmIxM1x1YmIxNFx1YmIxNVx1YmIxNlx1YmIxN1x1YmIxOVx1YmIxYVx1YmIxYlx1YmIxZFx1YmIxZVx1YmIxZlx1YmIyMVx1YmIyMlx1YmIyM1x1YmIyNFx1YmIyNVx1YmIyNlx1YmIyN1x1ZmZmZCIuc3BsaXQoIiIpLHY9'@;
put 'MDt2IT1rWzE0NV0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTQ1XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxNDVdW3ZdXT0zNzEyMCt2LFRbMzcxMjArdl09a1sxNDVdW3ZdKTtmb3Ioa1sxNDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWJiMjhcdWJiMmFcdWJiMmNcdWJiMmRcdWJiMmVcdWJiMmZcdWJiMzBcdWJiMzFcdWJiMzJcdWJiMzNcdWJiMzdcdWJiMzlcdWJiM2FcdWJiM2ZcdWJiNDBcdWJiNDFcdWJiNDJcdWJiNDNcdWJiNDZcdWJiNDhcdWJiNGFcdWJiNGJcdWJiNGNcdWJiNGVcdWJiNTFcdWJiNTJc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJiNTNcdWJiNTVcdWJiNTZcdWJiNTdcdWJiNTlcdWJiNWFcdWJiNWJcdWJiNWNcdWJiNWRcdWJiNWVcdWJiNWZcdWJiNjBcdWJiNjJcdWJiNjRcdWJiNjVcdWJiNjZcdWJiNjdcdWJiNjhcdWJiNjlcdWJiNmFcdWJiNmJcdWJi'@;
put 'NmRcdWJiNmVcdWJiNmZcdWJiNzBcdWJiNzFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJiNzJcdWJiNzNcdWJiNzRcdWJiNzVcdWJiNzZcdWJiNzdcdWJiNzhcdWJiNzlcdWJiN2FcdWJiN2JcdWJiN2NcdWJiN2RcdWJiN2VcdWJiN2ZcdWJiODBcdWJiODFcdWJiODJc'@;
put 'dWJiODNcdWJiODRcdWJiODVcdWJiODZcdWJiODdcdWJiODlcdWJiOGFcdWJiOGJcdWJiOGRcdWJiOGVcdWJiOGZcdWJiOTFcdWJiOTJcdWJiOTNcdWJiOTRcdWJiOTVcdWJiOTZcdWJiOTdcdWJiOThcdWJiOTlcdWJiOWFcdWJiOWJcdWJiOWNcdWJiOWRcdWJiOWVcdWJiOWZcdWJiYTBcdWJi'@;
put 'YTFcdWJiYTJcdWJiYTNcdWJiYTVcdWJiYTZcdWJiYTdcdWJiYTlcdWJiYWFcdWJiYWJcdWJiYWRcdWJiYWVcdWJiYWZcdWJiYjBcdWJiYjFcdWJiYjJcdWJiYjNcdWJiYjVcdWJiYjZcdWJiYjhcdWJiYjlcdWJiYmFcdWJiYmJcdWJiYmNcdWJiYmRcdWJiYmVcdWJiYmZcdWJiYzFcdWJiYzJc'@;
put 'dWJiYzNcdWJiYzVcdWJiYzZcdWJiYzdcdWJiYzlcdWJiY2FcdWJiY2JcdWJiY2NcdWJiY2RcdWJiY2VcdWJiY2ZcdWJiZDFcdWJiZDJcdWJiZDRcdWJiZDVcdWJiZDZcdWJiZDdcdWJiZDhcdWJiZDlcdWJiZGFcdWJiZGJcdWJiZGNcdWJiZGRcdWJiZGVcdWJiZGZcdWJiZTBcdWJiZTFcdWJi'@;
put 'ZTJcdWJiZTNcdWJiZTRcdWJiZTVcdWJiZTZcdWJiZTdcdWJiZThcdWJiZTlcdWJiZWFcdWJiZWJcdWJiZWNcdWJiZWRcdWJiZWVcdWJiZWZcdWJiZjBcdWJiZjFcdWJiZjJcdWJiZjNcdWJiZjRcdWJiZjVcdWJiZjZcdWJiZjdcdWJiZmFcdWJiZmJcdWJiZmRcdWJiZmVcdWJjMDFcdWZmZmQi'@;
put 'LnNwbGl0KCIiKSx2PTA7diE9a1sxNDZdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE0Nl1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTQ2XVt2XV09MzczNzYrdixUWzM3Mzc2K3ZdPWtbMTQ2XVt2XSk7Zm9yKGtbMTQ3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYzAzXHViYzA0XHViYzA1XHViYzA2XHViYzA3XHViYzBhXHViYzBlXHViYzEwXHViYzEyXHViYzEzXHViYzE5XHViYzFhXHViYzIwXHViYzIxXHViYzIyXHViYzIzXHViYzI2XHViYzI4XHViYzJhXHViYzJiXHViYzJjXHViYzJlXHViYzJmXHViYzMy'@;
put 'XHViYzMzXHViYzM1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYzM2XHViYzM3XHViYzM5XHViYzNhXHViYzNiXHViYzNjXHViYzNkXHViYzNlXHViYzNmXHViYzQyXHViYzQ2XHViYzQ3XHViYzQ4XHViYzRhXHViYzRiXHViYzRlXHViYzRmXHViYzUxXHViYzUyXHVi'@;
put 'YzUzXHViYzU0XHViYzU1XHViYzU2XHViYzU3XHViYzU4XHViYzU5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYzVhXHViYzViXHViYzVjXHViYzVlXHViYzVmXHViYzYwXHViYzYxXHViYzYyXHViYzYzXHViYzY0XHViYzY1XHViYzY2XHViYzY3XHViYzY4XHViYzY5'@;
put 'XHViYzZhXHViYzZiXHViYzZjXHViYzZkXHViYzZlXHViYzZmXHViYzcwXHViYzcxXHViYzcyXHViYzczXHViYzc0XHViYzc1XHViYzc2XHViYzc3XHViYzc4XHViYzc5XHViYzdhXHViYzdiXHViYzdjXHViYzdkXHViYzdlXHViYzdmXHViYzgwXHViYzgxXHViYzgyXHViYzgzXHViYzg2XHVi'@;
put 'Yzg3XHViYzg5XHViYzhhXHViYzhkXHViYzhmXHViYzkwXHViYzkxXHViYzkyXHViYzkzXHViYzk2XHViYzk4XHViYzliXHViYzljXHViYzlkXHViYzllXHViYzlmXHViY2EyXHViY2EzXHViY2E1XHViY2E2XHViY2E5XHViY2FhXHViY2FiXHViY2FjXHViY2FkXHViY2FlXHViY2FmXHViY2Iy'@;
put 'XHViY2I2XHViY2I3XHViY2I4XHViY2I5XHViY2JhXHViY2JiXHViY2JlXHViY2JmXHViY2MxXHViY2MyXHViY2MzXHViY2M1XHViY2M2XHViY2M3XHViY2M4XHViY2M5XHViY2NhXHViY2NiXHViY2NjXHViY2NlXHViY2QyXHViY2QzXHViY2Q0XHViY2Q2XHViY2Q3XHViY2Q5XHViY2RhXHVi'@;
put 'Y2RiXHViY2RkXHViY2RlXHViY2RmXHViY2UwXHViY2UxXHViY2UyXHViY2UzXHViY2U0XHViY2U1XHViY2U2XHViY2U3XHViY2U4XHViY2U5XHViY2VhXHViY2ViXHViY2VjXHViY2VkXHViY2VlXHViY2VmXHViY2YwXHViY2YxXHViY2YyXHViY2YzXHViY2Y3XHViY2Y5XHViY2ZhXHViY2Zi'@;
put 'XHViY2ZkXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTQ3XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxNDddW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE0N11bdl1dPTM3NjMyK3YsVFszNzYzMit2XT1rWzE0N11bdl0pO2ZvcihrWzE0OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmNmZVx1YmNmZlx1YmQwMFx1YmQwMVx1YmQwMlx1YmQwM1x1YmQwNlx1YmQwOFx1YmQwYVx1YmQwYlx1YmQwY1x1YmQwZFx1YmQwZVx1YmQwZlx1YmQxMVx1YmQxMlx1YmQxM1x1YmQxNVx1YmQxNlx1YmQxN1x1YmQxOFx1YmQx'@;
put 'OVx1YmQxYVx1YmQxYlx1YmQxY1x1YmQxZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmQxZVx1YmQxZlx1YmQyMFx1YmQyMVx1YmQyMlx1YmQyM1x1YmQyNVx1YmQyNlx1YmQyN1x1YmQyOFx1YmQyOVx1YmQyYVx1YmQyYlx1YmQyZFx1YmQyZVx1YmQyZlx1YmQzMFx1'@;
put 'YmQzMVx1YmQzMlx1YmQzM1x1YmQzNFx1YmQzNVx1YmQzNlx1YmQzN1x1YmQzOFx1YmQzOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmQzYVx1YmQzYlx1YmQzY1x1YmQzZFx1YmQzZVx1YmQzZlx1YmQ0MVx1YmQ0Mlx1YmQ0M1x1YmQ0NFx1YmQ0NVx1YmQ0Nlx1YmQ0'@;
put 'N1x1YmQ0YVx1YmQ0Ylx1YmQ0ZFx1YmQ0ZVx1YmQ0Zlx1YmQ1MVx1YmQ1Mlx1YmQ1M1x1YmQ1NFx1YmQ1NVx1YmQ1Nlx1YmQ1N1x1YmQ1YVx1YmQ1Ylx1YmQ1Y1x1YmQ1ZFx1YmQ1ZVx1YmQ1Zlx1YmQ2MFx1YmQ2MVx1YmQ2Mlx1YmQ2M1x1YmQ2NVx1YmQ2Nlx1YmQ2N1x1YmQ2OVx1YmQ2YVx1'@;
put 'YmQ2Ylx1YmQ2Y1x1YmQ2ZFx1YmQ2ZVx1YmQ2Zlx1YmQ3MFx1YmQ3MVx1YmQ3Mlx1YmQ3M1x1YmQ3NFx1YmQ3NVx1YmQ3Nlx1YmQ3N1x1YmQ3OFx1YmQ3OVx1YmQ3YVx1YmQ3Ylx1YmQ3Y1x1YmQ3ZFx1YmQ3ZVx1YmQ3Zlx1YmQ4Mlx1YmQ4M1x1YmQ4NVx1YmQ4Nlx1YmQ4Ylx1YmQ4Y1x1YmQ4'@;
put 'ZFx1YmQ4ZVx1YmQ4Zlx1YmQ5Mlx1YmQ5NFx1YmQ5Nlx1YmQ5N1x1YmQ5OFx1YmQ5Ylx1YmQ5ZFx1YmQ5ZVx1YmQ5Zlx1YmRhMFx1YmRhMVx1YmRhMlx1YmRhM1x1YmRhNVx1YmRhNlx1YmRhN1x1YmRhOFx1YmRhOVx1YmRhYVx1YmRhYlx1YmRhY1x1YmRhZFx1YmRhZVx1YmRhZlx1YmRiMVx1'@;
put 'YmRiMlx1YmRiM1x1YmRiNFx1YmRiNVx1YmRiNlx1YmRiN1x1YmRiOVx1YmRiYVx1YmRiYlx1YmRiY1x1YmRiZFx1YmRiZVx1YmRiZlx1YmRjMFx1YmRjMVx1YmRjMlx1YmRjM1x1YmRjNFx1YmRjNVx1YmRjNlx1YmRjN1x1YmRjOFx1YmRjOVx1YmRjYVx1YmRjYlx1YmRjY1x1YmRjZFx1YmRj'@;
put 'ZVx1YmRjZlx1YmRkMFx1YmRkMVx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE0OF0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTQ4XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxNDhdW3ZdXT0zNzg4OCt2LFRbMzc4ODgrdl09a1sxNDhdW3ZdKTtmb3Ioa1sxNDldPSJcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJkZDJcdWJkZDNcdWJkZDZcdWJkZDdcdWJkZDlcdWJkZGFcdWJkZGJcdWJkZGRcdWJkZGVcdWJkZGZcdWJkZTBcdWJkZTFcdWJkZTJcdWJkZTNcdWJkZTRcdWJkZTVcdWJkZTZcdWJkZTdcdWJkZThcdWJk'@;
put 'ZWFcdWJkZWJcdWJkZWNcdWJkZWRcdWJkZWVcdWJkZWZcdWJkZjFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJkZjJcdWJkZjNcdWJkZjVcdWJkZjZcdWJkZjdcdWJkZjlcdWJkZmFcdWJkZmJcdWJkZmNcdWJkZmRcdWJkZmVcdWJkZmZcdWJlMDFcdWJlMDJcdWJlMDRc'@;
put 'dWJlMDZcdWJlMDdcdWJlMDhcdWJlMDlcdWJlMGFcdWJlMGJcdWJlMGVcdWJlMGZcdWJlMTFcdWJlMTJcdWJlMTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJlMTVcdWJlMTZcdWJlMTdcdWJlMThcdWJlMTlcdWJlMWFcdWJlMWJcdWJlMWVcdWJlMjBcdWJlMjFcdWJl'@;
put 'MjJcdWJlMjNcdWJlMjRcdWJlMjVcdWJlMjZcdWJlMjdcdWJlMjhcdWJlMjlcdWJlMmFcdWJlMmJcdWJlMmNcdWJlMmRcdWJlMmVcdWJlMmZcdWJlMzBcdWJlMzFcdWJlMzJcdWJlMzNcdWJlMzRcdWJlMzVcdWJlMzZcdWJlMzdcdWJlMzhcdWJlMzlcdWJlM2FcdWJlM2JcdWJlM2NcdWJlM2Rc'@;
put 'dWJlM2VcdWJlM2ZcdWJlNDBcdWJlNDFcdWJlNDJcdWJlNDNcdWJlNDZcdWJlNDdcdWJlNDlcdWJlNGFcdWJlNGJcdWJlNGRcdWJlNGZcdWJlNTBcdWJlNTFcdWJlNTJcdWJlNTNcdWJlNTZcdWJlNThcdWJlNWNcdWJlNWRcdWJlNWVcdWJlNWZcdWJlNjJcdWJlNjNcdWJlNjVcdWJlNjZcdWJl'@;
put 'NjdcdWJlNjlcdWJlNmJcdWJlNmNcdWJlNmRcdWJlNmVcdWJlNmZcdWJlNzJcdWJlNzZcdWJlNzdcdWJlNzhcdWJlNzlcdWJlN2FcdWJlN2VcdWJlN2ZcdWJlODFcdWJlODJcdWJlODNcdWJlODVcdWJlODZcdWJlODdcdWJlODhcdWJlODlcdWJlOGFcdWJlOGJcdWJlOGVcdWJlOTJcdWJlOTNc'@;
put 'dWJlOTRcdWJlOTVcdWJlOTZcdWJlOTdcdWJlOWFcdWJlOWJcdWJlOWNcdWJlOWRcdWJlOWVcdWJlOWZcdWJlYTBcdWJlYTFcdWJlYTJcdWJlYTNcdWJlYTRcdWJlYTVcdWJlYTZcdWJlYTdcdWJlYTlcdWJlYWFcdWJlYWJcdWJlYWNcdWJlYWRcdWJlYWVcdWJlYWZcdWJlYjBcdWJlYjFcdWJl'@;
put 'YjJcdWJlYjNcdWJlYjRcdWJlYjVcdWJlYjZcdWJlYjdcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxNDldLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE0OV1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTQ5XVt2XV09MzgxNDQrdixUWzM4MTQ0K3ZdPWtbMTQ5XVt2XSk7Zm9yKGtbMTUwXT0i'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZWI4XHViZWI5XHViZWJhXHViZWJiXHViZWJjXHViZWJkXHViZWJlXHViZWJmXHViZWMwXHViZWMxXHViZWMyXHViZWMzXHViZWM0XHViZWM1XHViZWM2XHViZWM3XHViZWM4XHVi'@;
put 'ZWM5XHViZWNhXHViZWNiXHViZWNjXHViZWNkXHViZWNlXHViZWNmXHViZWQyXHViZWQzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZWQ1XHViZWQ2XHViZWQ5XHViZWRhXHViZWRiXHViZWRjXHViZWRkXHViZWRlXHViZWRmXHViZWUxXHViZWUyXHViZWU2XHViZWU3'@;
put 'XHViZWU4XHViZWU5XHViZWVhXHViZWViXHViZWVkXHViZWVlXHViZWVmXHViZWYwXHViZWYxXHViZWYyXHViZWYzXHViZWY0XHViZWY1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZWY2XHViZWY3XHViZWY4XHViZWY5XHViZWZhXHViZWZiXHViZWZjXHViZWZkXHVi'@;
put 'ZWZlXHViZWZmXHViZjAwXHViZjAyXHViZjAzXHViZjA0XHViZjA1XHViZjA2XHViZjA3XHViZjBhXHViZjBiXHViZjBjXHViZjBkXHViZjBlXHViZjBmXHViZjEwXHViZjExXHViZjEyXHViZjEzXHViZjE0XHViZjE1XHViZjE2XHViZjE3XHViZjFhXHViZjFlXHViZjFmXHViZjIwXHViZjIx'@;
put 'XHViZjIyXHViZjIzXHViZjI0XHViZjI1XHViZjI2XHViZjI3XHViZjI4XHViZjI5XHViZjJhXHViZjJiXHViZjJjXHViZjJkXHViZjJlXHViZjJmXHViZjMwXHViZjMxXHViZjMyXHViZjMzXHViZjM0XHViZjM1XHViZjM2XHViZjM3XHViZjM4XHViZjM5XHViZjNhXHViZjNiXHViZjNjXHVi'@;
put 'ZjNkXHViZjNlXHViZjNmXHViZjQyXHViZjQzXHViZjQ1XHViZjQ2XHViZjQ3XHViZjQ5XHViZjRhXHViZjRiXHViZjRjXHViZjRkXHViZjRlXHViZjRmXHViZjUyXHViZjUzXHViZjU0XHViZjU2XHViZjU3XHViZjU4XHViZjU5XHViZjVhXHViZjViXHViZjVjXHViZjVkXHViZjVlXHViZjVm'@;
put 'XHViZjYwXHViZjYxXHViZjYyXHViZjYzXHViZjY0XHViZjY1XHViZjY2XHViZjY3XHViZjY4XHViZjY5XHViZjZhXHViZjZiXHViZjZjXHViZjZkXHViZjZlXHViZjZmXHViZjcwXHViZjcxXHViZjcyXHViZjczXHViZjc0XHViZjc1XHViZjc2XHViZjc3XHViZjc4XHViZjc5XHViZjdhXHVi'@;
put 'ZjdiXHViZjdjXHViZjdkXHViZjdlXHViZjdmXHViZjgwXHViZjgxXHViZjgyXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTUwXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxNTBdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE1MF1bdl1dPTM4NDAwK3YsVFszODQwMCt2XT1rWzE1MF1bdl0p'@;
put 'O2ZvcihrWzE1MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmY4M1x1YmY4NFx1YmY4NVx1YmY4Nlx1YmY4N1x1YmY4OFx1YmY4OVx1YmY4YVx1YmY4Ylx1YmY4Y1x1YmY4ZFx1YmY4ZVx1YmY4Zlx1YmY5MFx1YmY5MVx1'@;
put 'YmY5Mlx1YmY5M1x1YmY5NVx1YmY5Nlx1YmY5N1x1YmY5OFx1YmY5OVx1YmY5YVx1YmY5Ylx1YmY5Y1x1YmY5ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmY5ZVx1YmY5Zlx1YmZhMFx1YmZhMVx1YmZhMlx1YmZhM1x1YmZhNFx1YmZhNVx1YmZhNlx1YmZhN1x1YmZh'@;
put 'OFx1YmZhOVx1YmZhYVx1YmZhYlx1YmZhY1x1YmZhZFx1YmZhZVx1YmZhZlx1YmZiMVx1YmZiMlx1YmZiM1x1YmZiNFx1YmZiNVx1YmZiNlx1YmZiN1x1YmZiOFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmZiOVx1YmZiYVx1YmZiYlx1YmZiY1x1YmZiZFx1YmZiZVx1'@;
put 'YmZiZlx1YmZjMFx1YmZjMVx1YmZjMlx1YmZjM1x1YmZjNFx1YmZjNlx1YmZjN1x1YmZjOFx1YmZjOVx1YmZjYVx1YmZjYlx1YmZjZVx1YmZjZlx1YmZkMVx1YmZkMlx1YmZkM1x1YmZkNVx1YmZkNlx1YmZkN1x1YmZkOFx1YmZkOVx1YmZkYVx1YmZkYlx1YmZkZFx1YmZkZVx1YmZlMFx1YmZl'@;
put 'Mlx1YmZlM1x1YmZlNFx1YmZlNVx1YmZlNlx1YmZlN1x1YmZlOFx1YmZlOVx1YmZlYVx1YmZlYlx1YmZlY1x1YmZlZFx1YmZlZVx1YmZlZlx1YmZmMFx1YmZmMVx1YmZmMlx1YmZmM1x1YmZmNFx1YmZmNVx1YmZmNlx1YmZmN1x1YmZmOFx1YmZmOVx1YmZmYVx1YmZmYlx1YmZmY1x1YmZmZFx1'@;
put 'YmZmZVx1YmZmZlx1YzAwMFx1YzAwMVx1YzAwMlx1YzAwM1x1YzAwNFx1YzAwNVx1YzAwNlx1YzAwN1x1YzAwOFx1YzAwOVx1YzAwYVx1YzAwYlx1YzAwY1x1YzAwZFx1YzAwZVx1YzAwZlx1YzAxMFx1YzAxMVx1YzAxMlx1YzAxM1x1YzAxNFx1YzAxNVx1YzAxNlx1YzAxN1x1YzAxOFx1YzAx'@;
put 'OVx1YzAxYVx1YzAxYlx1YzAxY1x1YzAxZFx1YzAxZVx1YzAxZlx1YzAyMFx1YzAyMVx1YzAyMlx1YzAyM1x1YzAyNFx1YzAyNVx1YzAyNlx1YzAyN1x1YzAyOFx1YzAyOVx1YzAyYVx1YzAyYlx1YzAyY1x1YzAyZFx1YzAyZVx1YzAyZlx1YzAzMFx1YzAzMVx1YzAzMlx1YzAzM1x1YzAzNFx1'@;
put 'YzAzNVx1YzAzNlx1YzAzN1x1YzAzOFx1YzAzOVx1YzAzYVx1YzAzYlx1YzAzZFx1YzAzZVx1YzAzZlx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE1MV0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTUxXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxNTFdW3ZdXT0zODY1Nit2LFRbMzg2NTYr'@;
put 'dl09a1sxNTFdW3ZdKTtmb3Ioa1sxNTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMwNDBcdWMwNDFcdWMwNDJcdWMwNDNcdWMwNDRcdWMwNDVcdWMwNDZcdWMwNDdcdWMwNDhcdWMwNDlcdWMwNGFcdWMwNGJcdWMwNGNc'@;
put 'dWMwNGRcdWMwNGVcdWMwNGZcdWMwNTBcdWMwNTJcdWMwNTNcdWMwNTRcdWMwNTVcdWMwNTZcdWMwNTdcdWMwNTlcdWMwNWFcdWMwNWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMwNWRcdWMwNWVcdWMwNWZcdWMwNjFcdWMwNjJcdWMwNjNcdWMwNjRcdWMwNjVcdWMw'@;
put 'NjZcdWMwNjdcdWMwNmFcdWMwNmJcdWMwNmNcdWMwNmRcdWMwNmVcdWMwNmZcdWMwNzBcdWMwNzFcdWMwNzJcdWMwNzNcdWMwNzRcdWMwNzVcdWMwNzZcdWMwNzdcdWMwNzhcdWMwNzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMwN2FcdWMwN2JcdWMwN2NcdWMwN2Rc'@;
put 'dWMwN2VcdWMwN2ZcdWMwODBcdWMwODFcdWMwODJcdWMwODNcdWMwODRcdWMwODVcdWMwODZcdWMwODdcdWMwODhcdWMwODlcdWMwOGFcdWMwOGJcdWMwOGNcdWMwOGRcdWMwOGVcdWMwOGZcdWMwOTJcdWMwOTNcdWMwOTVcdWMwOTZcdWMwOTdcdWMwOTlcdWMwOWFcdWMwOWJcdWMwOWNcdWMw'@;
put 'OWRcdWMwOWVcdWMwOWZcdWMwYTJcdWMwYTRcdWMwYTZcdWMwYTdcdWMwYThcdWMwYTlcdWMwYWFcdWMwYWJcdWMwYWVcdWMwYjFcdWMwYjJcdWMwYjdcdWMwYjhcdWMwYjlcdWMwYmFcdWMwYmJcdWMwYmVcdWMwYzJcdWMwYzNcdWMwYzRcdWMwYzZcdWMwYzdcdWMwY2FcdWMwY2JcdWMwY2Rc'@;
put 'dWMwY2VcdWMwY2ZcdWMwZDFcdWMwZDJcdWMwZDNcdWMwZDRcdWMwZDVcdWMwZDZcdWMwZDdcdWMwZGFcdWMwZGVcdWMwZGZcdWMwZTBcdWMwZTFcdWMwZTJcdWMwZTNcdWMwZTZcdWMwZTdcdWMwZTlcdWMwZWFcdWMwZWJcdWMwZWRcdWMwZWVcdWMwZWZcdWMwZjBcdWMwZjFcdWMwZjJcdWMw'@;
put 'ZjNcdWMwZjZcdWMwZjhcdWMwZmFcdWMwZmJcdWMwZmNcdWMwZmRcdWMwZmVcdWMwZmZcdWMxMDFcdWMxMDJcdWMxMDNcdWMxMDVcdWMxMDZcdWMxMDdcdWMxMDlcdWMxMGFcdWMxMGJcdWMxMGNcdWMxMGRcdWMxMGVcdWMxMGZcdWMxMTFcdWMxMTJcdWMxMTNcdWMxMTRcdWMxMTZcdWMxMTdc'@;
put 'dWMxMThcdWMxMTlcdWMxMWFcdWMxMWJcdWMxMjFcdWMxMjJcdWMxMjVcdWMxMjhcdWMxMjlcdWMxMmFcdWMxMmJcdWMxMmVcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxNTJdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE1Ml1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTUyXVt2XV09Mzg5'@;
put 'MTIrdixUWzM4OTEyK3ZdPWtbMTUyXVt2XSk7Zm9yKGtbMTUzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMTMyXHVjMTMzXHVjMTM0XHVjMTM1XHVjMTM3XHVjMTNhXHVjMTNiXHVjMTNkXHVjMTNlXHVjMTNmXHVjMTQx'@;
put 'XHVjMTQyXHVjMTQzXHVjMTQ0XHVjMTQ1XHVjMTQ2XHVjMTQ3XHVjMTRhXHVjMTRlXHVjMTRmXHVjMTUwXHVjMTUxXHVjMTUyXHVjMTUzXHVjMTU2XHVjMTU3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMTU5XHVjMTVhXHVjMTViXHVjMTVkXHVjMTVlXHVjMTVmXHVj'@;
put 'MTYwXHVjMTYxXHVjMTYyXHVjMTYzXHVjMTY2XHVjMTZhXHVjMTZiXHVjMTZjXHVjMTZkXHVjMTZlXHVjMTZmXHVjMTcxXHVjMTcyXHVjMTczXHVjMTc1XHVjMTc2XHVjMTc3XHVjMTc5XHVjMTdhXHVjMTdiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMTdjXHVjMTdk'@;
put 'XHVjMTdlXHVjMTdmXHVjMTgwXHVjMTgxXHVjMTgyXHVjMTgzXHVjMTg0XHVjMTg2XHVjMTg3XHVjMTg4XHVjMTg5XHVjMThhXHVjMThiXHVjMThmXHVjMTkxXHVjMTkyXHVjMTkzXHVjMTk1XHVjMTk3XHVjMTk4XHVjMTk5XHVjMTlhXHVjMTliXHVjMTllXHVjMWEwXHVjMWEyXHVjMWEzXHVj'@;
put 'MWE0XHVjMWE2XHVjMWE3XHVjMWFhXHVjMWFiXHVjMWFkXHVjMWFlXHVjMWFmXHVjMWIxXHVjMWIyXHVjMWIzXHVjMWI0XHVjMWI1XHVjMWI2XHVjMWI3XHVjMWI4XHVjMWI5XHVjMWJhXHVjMWJiXHVjMWJjXHVjMWJlXHVjMWJmXHVjMWMwXHVjMWMxXHVjMWMyXHVjMWMzXHVjMWM1XHVjMWM2'@;
put 'XHVjMWM3XHVjMWM5XHVjMWNhXHVjMWNiXHVjMWNkXHVjMWNlXHVjMWNmXHVjMWQwXHVjMWQxXHVjMWQyXHVjMWQzXHVjMWQ1XHVjMWQ2XHVjMWQ5XHVjMWRhXHVjMWRiXHVjMWRjXHVjMWRkXHVjMWRlXHVjMWRmXHVjMWUxXHVjMWUyXHVjMWUzXHVjMWU1XHVjMWU2XHVjMWU3XHVjMWU5XHVj'@;
put 'MWVhXHVjMWViXHVjMWVjXHVjMWVkXHVjMWVlXHVjMWVmXHVjMWYyXHVjMWY0XHVjMWY1XHVjMWY2XHVjMWY3XHVjMWY4XHVjMWY5XHVjMWZhXHVjMWZiXHVjMWZlXHVjMWZmXHVjMjAxXHVjMjAyXHVjMjAzXHVjMjA1XHVjMjA2XHVjMjA3XHVjMjA4XHVjMjA5XHVjMjBhXHVjMjBiXHVjMjBl'@;
put 'XHVjMjEwXHVjMjEyXHVjMjEzXHVjMjE0XHVjMjE1XHVjMjE2XHVjMjE3XHVjMjFhXHVjMjFiXHVjMjFkXHVjMjFlXHVjMjIxXHVjMjIyXHVjMjIzXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTUzXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxNTNdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtr'@;
put 'WzE1M11bdl1dPTM5MTY4K3YsVFszOTE2OCt2XT1rWzE1M11bdl0pO2ZvcihrWzE1NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzIyNFx1YzIyNVx1YzIyNlx1YzIyN1x1YzIyYVx1YzIyY1x1YzIyZVx1YzIzMFx1YzIz'@;
put 'M1x1YzIzNVx1YzIzNlx1YzIzN1x1YzIzOFx1YzIzOVx1YzIzYVx1YzIzYlx1YzIzY1x1YzIzZFx1YzIzZVx1YzIzZlx1YzI0MFx1YzI0MVx1YzI0Mlx1YzI0M1x1YzI0NFx1YzI0NVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzI0Nlx1YzI0N1x1YzI0OVx1YzI0YVx1'@;
put 'YzI0Ylx1YzI0Y1x1YzI0ZFx1YzI0ZVx1YzI0Zlx1YzI1Mlx1YzI1M1x1YzI1NVx1YzI1Nlx1YzI1N1x1YzI1OVx1YzI1YVx1YzI1Ylx1YzI1Y1x1YzI1ZFx1YzI1ZVx1YzI1Zlx1YzI2MVx1YzI2Mlx1YzI2M1x1YzI2NFx1YzI2Nlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1YzI2N1x1YzI2OFx1YzI2OVx1YzI2YVx1YzI2Ylx1YzI2ZVx1YzI2Zlx1YzI3MVx1YzI3Mlx1YzI3M1x1YzI3NVx1YzI3Nlx1YzI3N1x1YzI3OFx1YzI3OVx1YzI3YVx1YzI3Ylx1YzI3ZVx1YzI4MFx1YzI4Mlx1YzI4M1x1YzI4NFx1YzI4NVx1YzI4Nlx1YzI4N1x1YzI4YVx1YzI4Ylx1'@;
put 'YzI4Y1x1YzI4ZFx1YzI4ZVx1YzI4Zlx1YzI5MVx1YzI5Mlx1YzI5M1x1YzI5NFx1YzI5NVx1YzI5Nlx1YzI5N1x1YzI5OVx1YzI5YVx1YzI5Y1x1YzI5ZVx1YzI5Zlx1YzJhMFx1YzJhMVx1YzJhMlx1YzJhM1x1YzJhNlx1YzJhN1x1YzJhOVx1YzJhYVx1YzJhYlx1YzJhZVx1YzJhZlx1YzJi'@;
put 'MFx1YzJiMVx1YzJiMlx1YzJiM1x1YzJiNlx1YzJiOFx1YzJiYVx1YzJiYlx1YzJiY1x1YzJiZFx1YzJiZVx1YzJiZlx1YzJjMFx1YzJjMVx1YzJjMlx1YzJjM1x1YzJjNFx1YzJjNVx1YzJjNlx1YzJjN1x1YzJjOFx1YzJjOVx1YzJjYVx1YzJjYlx1YzJjY1x1YzJjZFx1YzJjZVx1YzJjZlx1'@;
put 'YzJkMFx1YzJkMVx1YzJkMlx1YzJkM1x1YzJkNFx1YzJkNVx1YzJkNlx1YzJkN1x1YzJkOFx1YzJkOVx1YzJkYVx1YzJkYlx1YzJkZVx1YzJkZlx1YzJlMVx1YzJlMlx1YzJlNVx1YzJlNlx1YzJlN1x1YzJlOFx1YzJlOVx1YzJlYVx1YzJlZVx1YzJmMFx1YzJmMlx1YzJmM1x1YzJmNFx1YzJm'@;
put 'NVx1YzJmN1x1YzJmYVx1YzJmZFx1YzJmZVx1YzJmZlx1YzMwMVx1YzMwMlx1YzMwM1x1YzMwNFx1YzMwNVx1YzMwNlx1YzMwN1x1YzMwYVx1YzMwYlx1YzMwZVx1YzMwZlx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE1NF0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTU0XVt2XS5jaGFyQ29k'@;
put 'ZUF0KDApJiYoc2Vba1sxNTRdW3ZdXT0zOTQyNCt2LFRbMzk0MjQrdl09a1sxNTRdW3ZdKTtmb3Ioa1sxNTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMzMTBcdWMzMTFcdWMzMTJcdWMzMTZcdWMzMTdcdWMzMTlcdWMz'@;
put 'MWFcdWMzMWJcdWMzMWRcdWMzMWVcdWMzMWZcdWMzMjBcdWMzMjFcdWMzMjJcdWMzMjNcdWMzMjZcdWMzMjdcdWMzMmFcdWMzMmJcdWMzMmNcdWMzMmRcdWMzMmVcdWMzMmZcdWMzMzBcdWMzMzFcdWMzMzJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMzMzNcdWMzMzRc'@;
put 'dWMzMzVcdWMzMzZcdWMzMzdcdWMzMzhcdWMzMzlcdWMzM2FcdWMzM2JcdWMzM2NcdWMzM2RcdWMzM2VcdWMzM2ZcdWMzNDBcdWMzNDFcdWMzNDJcdWMzNDNcdWMzNDRcdWMzNDZcdWMzNDdcdWMzNDhcdWMzNDlcdWMzNGFcdWMzNGJcdWMzNGNcdWMzNGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWMzNGVcdWMzNGZcdWMzNTBcdWMzNTFcdWMzNTJcdWMzNTNcdWMzNTRcdWMzNTVcdWMzNTZcdWMzNTdcdWMzNThcdWMzNTlcdWMzNWFcdWMzNWJcdWMzNWNcdWMzNWRcdWMzNWVcdWMzNWZcdWMzNjBcdWMzNjFcdWMzNjJcdWMzNjNcdWMzNjRcdWMzNjVcdWMzNjZc'@;
put 'dWMzNjdcdWMzNmFcdWMzNmJcdWMzNmRcdWMzNmVcdWMzNmZcdWMzNzFcdWMzNzNcdWMzNzRcdWMzNzVcdWMzNzZcdWMzNzdcdWMzN2FcdWMzN2JcdWMzN2VcdWMzN2ZcdWMzODBcdWMzODFcdWMzODJcdWMzODNcdWMzODVcdWMzODZcdWMzODdcdWMzODlcdWMzOGFcdWMzOGJcdWMzOGRcdWMz'@;
put 'OGVcdWMzOGZcdWMzOTBcdWMzOTFcdWMzOTJcdWMzOTNcdWMzOTRcdWMzOTVcdWMzOTZcdWMzOTdcdWMzOThcdWMzOTlcdWMzOWFcdWMzOWJcdWMzOWNcdWMzOWRcdWMzOWVcdWMzOWZcdWMzYTBcdWMzYTFcdWMzYTJcdWMzYTNcdWMzYTRcdWMzYTVcdWMzYTZcdWMzYTdcdWMzYThcdWMzYTlc'@;
put 'dWMzYWFcdWMzYWJcdWMzYWNcdWMzYWRcdWMzYWVcdWMzYWZcdWMzYjBcdWMzYjFcdWMzYjJcdWMzYjNcdWMzYjRcdWMzYjVcdWMzYjZcdWMzYjdcdWMzYjhcdWMzYjlcdWMzYmFcdWMzYmJcdWMzYmNcdWMzYmRcdWMzYmVcdWMzYmZcdWMzYzFcdWMzYzJcdWMzYzNcdWMzYzRcdWMzYzVcdWMz'@;
put 'YzZcdWMzYzdcdWMzYzhcdWMzYzlcdWMzY2FcdWMzY2JcdWMzY2NcdWMzY2RcdWMzY2VcdWMzY2ZcdWMzZDBcdWMzZDFcdWMzZDJcdWMzZDNcdWMzZDRcdWMzZDVcdWMzZDZcdWMzZDdcdWMzZGFcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxNTVdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE1'@;
put 'NV1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTU1XVt2XV09Mzk2ODArdixUWzM5NjgwK3ZdPWtbMTU1XVt2XSk7Zm9yKGtbMTU2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjM2RiXHVjM2RkXHVjM2RlXHVjM2UxXHVj'@;
put 'M2UzXHVjM2U0XHVjM2U1XHVjM2U2XHVjM2U3XHVjM2VhXHVjM2ViXHVjM2VjXHVjM2VlXHVjM2VmXHVjM2YwXHVjM2YxXHVjM2YyXHVjM2YzXHVjM2Y2XHVjM2Y3XHVjM2Y5XHVjM2ZhXHVjM2ZiXHVjM2ZjXHVjM2ZkXHVjM2ZlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVjM2ZmXHVjNDAwXHVjNDAxXHVjNDAyXHVjNDAzXHVjNDA0XHVjNDA1XHVjNDA2XHVjNDA3XHVjNDA5XHVjNDBhXHVjNDBiXHVjNDBjXHVjNDBkXHVjNDBlXHVjNDBmXHVjNDExXHVjNDEyXHVjNDEzXHVjNDE0XHVjNDE1XHVjNDE2XHVjNDE3XHVjNDE4XHVjNDE5XHVjNDFhXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNDFiXHVjNDFjXHVjNDFkXHVjNDFlXHVjNDFmXHVjNDIwXHVjNDIxXHVjNDIyXHVjNDIzXHVjNDI1XHVjNDI2XHVjNDI3XHVjNDI4XHVjNDI5XHVjNDJhXHVjNDJiXHVjNDJkXHVjNDJlXHVjNDJmXHVjNDMxXHVjNDMyXHVjNDMzXHVjNDM1'@;
put 'XHVjNDM2XHVjNDM3XHVjNDM4XHVjNDM5XHVjNDNhXHVjNDNiXHVjNDNlXHVjNDNmXHVjNDQwXHVjNDQxXHVjNDQyXHVjNDQzXHVjNDQ0XHVjNDQ1XHVjNDQ2XHVjNDQ3XHVjNDQ5XHVjNDRhXHVjNDRiXHVjNDRjXHVjNDRkXHVjNDRlXHVjNDRmXHVjNDUwXHVjNDUxXHVjNDUyXHVjNDUzXHVj'@;
put 'NDU0XHVjNDU1XHVjNDU2XHVjNDU3XHVjNDU4XHVjNDU5XHVjNDVhXHVjNDViXHVjNDVjXHVjNDVkXHVjNDVlXHVjNDVmXHVjNDYwXHVjNDYxXHVjNDYyXHVjNDYzXHVjNDY2XHVjNDY3XHVjNDY5XHVjNDZhXHVjNDZiXHVjNDZkXHVjNDZlXHVjNDZmXHVjNDcwXHVjNDcxXHVjNDcyXHVjNDcz'@;
put 'XHVjNDc2XHVjNDc3XHVjNDc4XHVjNDdhXHVjNDdiXHVjNDdjXHVjNDdkXHVjNDdlXHVjNDdmXHVjNDgxXHVjNDgyXHVjNDgzXHVjNDg0XHVjNDg1XHVjNDg2XHVjNDg3XHVjNDg4XHVjNDg5XHVjNDhhXHVjNDhiXHVjNDhjXHVjNDhkXHVjNDhlXHVjNDhmXHVjNDkwXHVjNDkxXHVjNDkyXHVj'@;
put 'NDkzXHVjNDk1XHVjNDk2XHVjNDk3XHVjNDk4XHVjNDk5XHVjNDlhXHVjNDliXHVjNDlkXHVjNDllXHVjNDlmXHVjNGEwXHVjNGExXHVjNGEyXHVjNGEzXHVjNGE0XHVjNGE1XHVjNGE2XHVjNGE3XHVjNGE4XHVjNGE5XHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTU2XS5sZW5ndGg7Kyt2'@;
put 'KTY1NTMzIT09a1sxNTZdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE1Nl1bdl1dPTM5OTM2K3YsVFszOTkzNit2XT1rWzE1Nl1bdl0pO2ZvcihrWzE1N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzRhYVx1YzRhYlx1'@;
put 'YzRhY1x1YzRhZFx1YzRhZVx1YzRhZlx1YzRiMFx1YzRiMVx1YzRiMlx1YzRiM1x1YzRiNFx1YzRiNVx1YzRiNlx1YzRiN1x1YzRiOVx1YzRiYVx1YzRiYlx1YzRiZFx1YzRiZVx1YzRiZlx1YzRjMFx1YzRjMVx1YzRjMlx1YzRjM1x1YzRjNFx1YzRjNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1YzRjNlx1YzRjN1x1YzRjOFx1YzRjOVx1YzRjYVx1YzRjYlx1YzRjY1x1YzRjZFx1YzRjZVx1YzRjZlx1YzRkMFx1YzRkMVx1YzRkMlx1YzRkM1x1YzRkNFx1YzRkNVx1YzRkNlx1YzRkN1x1YzRkOFx1YzRkOVx1YzRkYVx1YzRkYlx1YzRkY1x1YzRkZFx1YzRkZVx1'@;
put 'YzRkZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzRlMFx1YzRlMVx1YzRlMlx1YzRlM1x1YzRlNFx1YzRlNVx1YzRlNlx1YzRlN1x1YzRlOFx1YzRlYVx1YzRlYlx1YzRlY1x1YzRlZFx1YzRlZVx1YzRlZlx1YzRmMlx1YzRmM1x1YzRmNVx1YzRmNlx1YzRmN1x1YzRm'@;
put 'OVx1YzRmYlx1YzRmY1x1YzRmZFx1YzRmZVx1YzUwMlx1YzUwM1x1YzUwNFx1YzUwNVx1YzUwNlx1YzUwN1x1YzUwOFx1YzUwOVx1YzUwYVx1YzUwYlx1YzUwZFx1YzUwZVx1YzUwZlx1YzUxMVx1YzUxMlx1YzUxM1x1YzUxNVx1YzUxNlx1YzUxN1x1YzUxOFx1YzUxOVx1YzUxYVx1YzUxYlx1'@;
put 'YzUxZFx1YzUxZVx1YzUxZlx1YzUyMFx1YzUyMVx1YzUyMlx1YzUyM1x1YzUyNFx1YzUyNVx1YzUyNlx1YzUyN1x1YzUyYVx1YzUyYlx1YzUyZFx1YzUyZVx1YzUyZlx1YzUzMVx1YzUzMlx1YzUzM1x1YzUzNFx1YzUzNVx1YzUzNlx1YzUzN1x1YzUzYVx1YzUzY1x1YzUzZVx1YzUzZlx1YzU0'@;
put 'MFx1YzU0MVx1YzU0Mlx1YzU0M1x1YzU0Nlx1YzU0N1x1YzU0Ylx1YzU0Zlx1YzU1MFx1YzU1MVx1YzU1Mlx1YzU1Nlx1YzU1YVx1YzU1Ylx1YzU1Y1x1YzU1Zlx1YzU2Mlx1YzU2M1x1YzU2NVx1YzU2Nlx1YzU2N1x1YzU2OVx1YzU2YVx1YzU2Ylx1YzU2Y1x1YzU2ZFx1YzU2ZVx1YzU2Zlx1'@;
put 'YzU3Mlx1YzU3Nlx1YzU3N1x1YzU3OFx1YzU3OVx1YzU3YVx1YzU3Ylx1YzU3ZVx1YzU3Zlx1YzU4MVx1YzU4Mlx1YzU4M1x1YzU4NVx1YzU4Nlx1YzU4OFx1YzU4OVx1YzU4YVx1YzU4Ylx1YzU4ZVx1YzU5MFx1YzU5Mlx1YzU5M1x1YzU5NFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE1'@;
put 'N10ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTU3XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxNTddW3ZdXT00MDE5Mit2LFRbNDAxOTIrdl09a1sxNTddW3ZdKTtmb3Ioa1sxNThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWM1OTZcdWM1OTlcdWM1OWFcdWM1OWJcdWM1OWRcdWM1OWVcdWM1OWZcdWM1YTFcdWM1YTJcdWM1YTNcdWM1YTRcdWM1YTVcdWM1YTZcdWM1YTdcdWM1YThcdWM1YWFcdWM1YWJcdWM1YWNcdWM1YWRcdWM1YWVcdWM1YWZcdWM1YjBcdWM1YjFcdWM1YjJcdWM1YjNcdWM1YjZcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM1YjdcdWM1YmFcdWM1YmZcdWM1YzBcdWM1YzFcdWM1YzJcdWM1YzNcdWM1Y2JcdWM1Y2RcdWM1Y2ZcdWM1ZDJcdWM1ZDNcdWM1ZDVcdWM1ZDZcdWM1ZDdcdWM1ZDlcdWM1ZGFcdWM1ZGJcdWM1ZGNcdWM1ZGRcdWM1ZGVcdWM1ZGZcdWM1ZTJc'@;
put 'dWM1ZTRcdWM1ZTZcdWM1ZTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM1ZThcdWM1ZTlcdWM1ZWFcdWM1ZWJcdWM1ZWZcdWM1ZjFcdWM1ZjJcdWM1ZjNcdWM1ZjVcdWM1ZjhcdWM1ZjlcdWM1ZmFcdWM1ZmJcdWM2MDJcdWM2MDNcdWM2MDRcdWM2MDlcdWM2MGFcdWM2'@;
put 'MGJcdWM2MGRcdWM2MGVcdWM2MGZcdWM2MTFcdWM2MTJcdWM2MTNcdWM2MTRcdWM2MTVcdWM2MTZcdWM2MTdcdWM2MWFcdWM2MWRcdWM2MWVcdWM2MWZcdWM2MjBcdWM2MjFcdWM2MjJcdWM2MjNcdWM2MjZcdWM2MjdcdWM2MjlcdWM2MmFcdWM2MmJcdWM2MmZcdWM2MzFcdWM2MzJcdWM2MzZc'@;
put 'dWM2MzhcdWM2M2FcdWM2M2NcdWM2M2RcdWM2M2VcdWM2M2ZcdWM2NDJcdWM2NDNcdWM2NDVcdWM2NDZcdWM2NDdcdWM2NDlcdWM2NGFcdWM2NGJcdWM2NGNcdWM2NGRcdWM2NGVcdWM2NGZcdWM2NTJcdWM2NTZcdWM2NTdcdWM2NThcdWM2NTlcdWM2NWFcdWM2NWJcdWM2NWVcdWM2NWZcdWM2'@;
put 'NjFcdWM2NjJcdWM2NjNcdWM2NjRcdWM2NjVcdWM2NjZcdWM2NjdcdWM2NjhcdWM2NjlcdWM2NmFcdWM2NmJcdWM2NmRcdWM2NmVcdWM2NzBcdWM2NzJcdWM2NzNcdWM2NzRcdWM2NzVcdWM2NzZcdWM2NzdcdWM2N2FcdWM2N2JcdWM2N2RcdWM2N2VcdWM2N2ZcdWM2ODFcdWM2ODJcdWM2ODNc'@;
put 'dWM2ODRcdWM2ODVcdWM2ODZcdWM2ODdcdWM2OGFcdWM2OGNcdWM2OGVcdWM2OGZcdWM2OTBcdWM2OTFcdWM2OTJcdWM2OTNcdWM2OTZcdWM2OTdcdWM2OTlcdWM2OWFcdWM2OWJcdWM2OWRcdWM2OWVcdWM2OWZcdWM2YTBcdWM2YTFcdWM2YTJcdWM2YTNcdWM2YTZcdWZmZmQiLnNwbGl0KCIi'@;
put 'KSx2PTA7diE9a1sxNThdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE1OF1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTU4XVt2XV09NDA0NDgrdixUWzQwNDQ4K3ZdPWtbMTU4XVt2XSk7Zm9yKGtbMTU5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVjNmE4XHVjNmFhXHVjNmFiXHVjNmFjXHVjNmFkXHVjNmFlXHVjNmFmXHVjNmIyXHVjNmIzXHVjNmI1XHVjNmI2XHVjNmI3XHVjNmJiXHVjNmJjXHVjNmJkXHVjNmJlXHVjNmJmXHVjNmMyXHVjNmM0XHVjNmM2XHVjNmM3XHVjNmM4XHVjNmM5XHVjNmNhXHVjNmNiXHVj'@;
put 'NmNlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNmNmXHVjNmQxXHVjNmQyXHVjNmQzXHVjNmQ1XHVjNmQ2XHVjNmQ3XHVjNmQ4XHVjNmQ5XHVjNmRhXHVjNmRiXHVjNmRlXHVjNmRmXHVjNmUyXHVjNmUzXHVjNmU0XHVjNmU1XHVjNmU2XHVjNmU3XHVjNmVhXHVjNmVi'@;
put 'XHVjNmVkXHVjNmVlXHVjNmVmXHVjNmYxXHVjNmYyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNmYzXHVjNmY0XHVjNmY1XHVjNmY2XHVjNmY3XHVjNmZhXHVjNmZiXHVjNmZjXHVjNmZlXHVjNmZmXHVjNzAwXHVjNzAxXHVjNzAyXHVjNzAzXHVjNzA2XHVjNzA3XHVj'@;
put 'NzA5XHVjNzBhXHVjNzBiXHVjNzBkXHVjNzBlXHVjNzBmXHVjNzEwXHVjNzExXHVjNzEyXHVjNzEzXHVjNzE2XHVjNzE4XHVjNzFhXHVjNzFiXHVjNzFjXHVjNzFkXHVjNzFlXHVjNzFmXHVjNzIyXHVjNzIzXHVjNzI1XHVjNzI2XHVjNzI3XHVjNzI5XHVjNzJhXHVjNzJiXHVjNzJjXHVjNzJk'@;
put 'XHVjNzJlXHVjNzJmXHVjNzMyXHVjNzM0XHVjNzM2XHVjNzM4XHVjNzM5XHVjNzNhXHVjNzNiXHVjNzNlXHVjNzNmXHVjNzQxXHVjNzQyXHVjNzQzXHVjNzQ1XHVjNzQ2XHVjNzQ3XHVjNzQ4XHVjNzQ5XHVjNzRiXHVjNzRlXHVjNzUwXHVjNzU5XHVjNzVhXHVjNzViXHVjNzVkXHVjNzVlXHVj'@;
put 'NzVmXHVjNzYxXHVjNzYyXHVjNzYzXHVjNzY0XHVjNzY1XHVjNzY2XHVjNzY3XHVjNzY5XHVjNzZhXHVjNzZjXHVjNzZkXHVjNzZlXHVjNzZmXHVjNzcwXHVjNzcxXHVjNzcyXHVjNzczXHVjNzc2XHVjNzc3XHVjNzc5XHVjNzdhXHVjNzdiXHVjNzdmXHVjNzgwXHVjNzgxXHVjNzgyXHVjNzg2'@;
put 'XHVjNzhiXHVjNzhjXHVjNzhkXHVjNzhmXHVjNzkyXHVjNzkzXHVjNzk1XHVjNzk5XHVjNzliXHVjNzljXHVjNzlkXHVjNzllXHVjNzlmXHVjN2EyXHVjN2E3XHVjN2E4XHVjN2E5XHVjN2FhXHVjN2FiXHVjN2FlXHVjN2FmXHVjN2IxXHVjN2IyXHVjN2IzXHVjN2I1XHVjN2I2XHVjN2I3XHVm'@;
put 'ZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTU5XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxNTldW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE1OV1bdl1dPTQwNzA0K3YsVFs0MDcwNCt2XT1rWzE1OV1bdl0pO2ZvcihrWzE2MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzdiOFx1YzdiOVx1YzdiYVx1YzdiYlx1YzdiZVx1YzdjMlx1YzdjM1x1YzdjNFx1YzdjNVx1YzdjNlx1YzdjN1x1YzdjYVx1YzdjYlx1YzdjZFx1YzdjZlx1YzdkMVx1YzdkMlx1YzdkM1x1YzdkNFx1YzdkNVx1YzdkNlx1YzdkN1x1YzdkOVx1'@;
put 'YzdkYVx1YzdkYlx1YzdkY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzdkZVx1YzdkZlx1YzdlMFx1YzdlMVx1YzdlMlx1YzdlM1x1YzdlNVx1YzdlNlx1YzdlN1x1YzdlOVx1YzdlYVx1YzdlYlx1YzdlZFx1YzdlZVx1YzdlZlx1YzdmMFx1YzdmMVx1YzdmMlx1Yzdm'@;
put 'M1x1YzdmNFx1YzdmNVx1YzdmNlx1YzdmN1x1YzdmOFx1YzdmOVx1YzdmYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzdmYlx1YzdmY1x1YzdmZFx1YzdmZVx1YzdmZlx1YzgwMlx1YzgwM1x1YzgwNVx1YzgwNlx1YzgwN1x1YzgwOVx1YzgwYlx1YzgwY1x1YzgwZFx1'@;
put 'YzgwZVx1YzgwZlx1YzgxMlx1YzgxNFx1YzgxN1x1YzgxOFx1YzgxOVx1YzgxYVx1YzgxYlx1YzgxZVx1YzgxZlx1YzgyMVx1YzgyMlx1YzgyM1x1YzgyNVx1YzgyNlx1YzgyN1x1YzgyOFx1YzgyOVx1YzgyYVx1YzgyYlx1YzgyZVx1YzgzMFx1YzgzMlx1YzgzM1x1YzgzNFx1YzgzNVx1Yzgz'@;
put 'Nlx1YzgzN1x1YzgzOVx1YzgzYVx1YzgzYlx1YzgzZFx1YzgzZVx1YzgzZlx1Yzg0MVx1Yzg0Mlx1Yzg0M1x1Yzg0NFx1Yzg0NVx1Yzg0Nlx1Yzg0N1x1Yzg0YVx1Yzg0Ylx1Yzg0ZVx1Yzg0Zlx1Yzg1MFx1Yzg1MVx1Yzg1Mlx1Yzg1M1x1Yzg1NVx1Yzg1Nlx1Yzg1N1x1Yzg1OFx1Yzg1OVx1'@;
put 'Yzg1YVx1Yzg1Ylx1Yzg1Y1x1Yzg1ZFx1Yzg1ZVx1Yzg1Zlx1Yzg2MFx1Yzg2MVx1Yzg2Mlx1Yzg2M1x1Yzg2NFx1Yzg2NVx1Yzg2Nlx1Yzg2N1x1Yzg2OFx1Yzg2OVx1Yzg2YVx1Yzg2Ylx1Yzg2Y1x1Yzg2ZFx1Yzg2ZVx1Yzg2Zlx1Yzg3Mlx1Yzg3M1x1Yzg3NVx1Yzg3Nlx1Yzg3N1x1Yzg3'@;
put 'OVx1Yzg3Ylx1Yzg3Y1x1Yzg3ZFx1Yzg3ZVx1Yzg3Zlx1Yzg4Mlx1Yzg4NFx1Yzg4OFx1Yzg4OVx1Yzg4YVx1Yzg4ZVx1Yzg4Zlx1Yzg5MFx1Yzg5MVx1Yzg5Mlx1Yzg5M1x1Yzg5NVx1Yzg5Nlx1Yzg5N1x1Yzg5OFx1Yzg5OVx1Yzg5YVx1Yzg5Ylx1Yzg5Y1x1Yzg5ZVx1YzhhMFx1YzhhMlx1'@;
put 'YzhhM1x1YzhhNFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE2MF0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTYwXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxNjBdW3ZdXT00MDk2MCt2LFRbNDA5NjArdl09a1sxNjBdW3ZdKTtmb3Ioa1sxNjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM4YTVcdWM4YTZcdWM4YTdcdWM4YTlcdWM4YWFcdWM4YWJcdWM4YWNcdWM4YWRcdWM4YWVcdWM4YWZcdWM4YjBcdWM4YjFcdWM4YjJcdWM4YjNcdWM4YjRcdWM4YjVcdWM4YjZcdWM4YjdcdWM4YjhcdWM4YjlcdWM4YmFc'@;
put 'dWM4YmJcdWM4YmVcdWM4YmZcdWM4YzBcdWM4YzFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM4YzJcdWM4YzNcdWM4YzVcdWM4YzZcdWM4YzdcdWM4YzlcdWM4Y2FcdWM4Y2JcdWM4Y2RcdWM4Y2VcdWM4Y2ZcdWM4ZDBcdWM4ZDFcdWM4ZDJcdWM4ZDNcdWM4ZDZcdWM4'@;
put 'ZDhcdWM4ZGFcdWM4ZGJcdWM4ZGNcdWM4ZGRcdWM4ZGVcdWM4ZGZcdWM4ZTJcdWM4ZTNcdWM4ZTVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM4ZTZcdWM4ZTdcdWM4ZThcdWM4ZTlcdWM4ZWFcdWM4ZWJcdWM4ZWNcdWM4ZWRcdWM4ZWVcdWM4ZWZcdWM4ZjBcdWM4ZjFc'@;
put 'dWM4ZjJcdWM4ZjNcdWM4ZjRcdWM4ZjZcdWM4ZjdcdWM4ZjhcdWM4ZjlcdWM4ZmFcdWM4ZmJcdWM4ZmVcdWM4ZmZcdWM5MDFcdWM5MDJcdWM5MDNcdWM5MDdcdWM5MDhcdWM5MDlcdWM5MGFcdWM5MGJcdWM5MGVcdTMwMDBcdTMwMDFcdTMwMDJceGI3XHUyMDI1XHUyMDI2XHhhOFx1MzAwM1x4'@;
put 'YWRcdTIwMTVcdTIyMjVcdWZmM2NcdTIyM2NcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTMwMTRcdTMwMTVcdTMwMDhcdTMwMDlcdTMwMGFcdTMwMGJcdTMwMGNcdTMwMGRcdTMwMGVcdTMwMGZcdTMwMTBcdTMwMTFceGIxXHhkN1x4ZjdcdTIyNjBcdTIyNjRcdTIyNjVcdTIyMWVcdTIyMzRc'@;
put 'eGIwXHUyMDMyXHUyMDMzXHUyMTAzXHUyMTJiXHVmZmUwXHVmZmUxXHVmZmU1XHUyNjQyXHUyNjQwXHUyMjIwXHUyMmE1XHUyMzEyXHUyMjAyXHUyMjA3XHUyMjYxXHUyMjUyXHhhN1x1MjAzYlx1MjYwNlx1MjYwNVx1MjVjYlx1MjVjZlx1MjVjZVx1MjVjN1x1MjVjNlx1MjVhMVx1MjVhMFx1'@;
put 'MjViM1x1MjViMlx1MjViZFx1MjViY1x1MjE5Mlx1MjE5MFx1MjE5MVx1MjE5M1x1MjE5NFx1MzAxM1x1MjI2YVx1MjI2Ylx1MjIxYVx1MjIzZFx1MjIxZFx1MjIzNVx1MjIyYlx1MjIyY1x1MjIwOFx1MjIwYlx1MjI4Nlx1MjI4N1x1MjI4Mlx1MjI4M1x1MjIyYVx1MjIyOVx1MjIyN1x1MjIy'@;
put 'OFx1ZmZlMlx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE2MV0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTYxXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxNjFdW3ZdXT00MTIxNit2LFRbNDEyMTYrdl09a1sxNjFdW3ZdKTtmb3Ioa1sxNjJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5MTBcdWM5MTJcdWM5MTNcdWM5MTRcdWM5MTVcdWM5MTZcdWM5MTdcdWM5MTlcdWM5MWFcdWM5MWJcdWM5MWNcdWM5MWRcdWM5MWVcdWM5MWZcdWM5MjBcdWM5MjFcdWM5MjJcdWM5MjNcdWM5MjRcdWM5MjVcdWM5MjZcdWM5'@;
put 'MjdcdWM5MjhcdWM5MjlcdWM5MmFcdWM5MmJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5MmRcdWM5MmVcdWM5MmZcdWM5MzBcdWM5MzFcdWM5MzJcdWM5MzNcdWM5MzVcdWM5MzZcdWM5MzdcdWM5MzhcdWM5MzlcdWM5M2FcdWM5M2JcdWM5M2NcdWM5M2RcdWM5M2Vc'@;
put 'dWM5M2ZcdWM5NDBcdWM5NDFcdWM5NDJcdWM5NDNcdWM5NDRcdWM5NDVcdWM5NDZcdWM5NDdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5NDhcdWM5NDlcdWM5NGFcdWM5NGJcdWM5NGNcdWM5NGRcdWM5NGVcdWM5NGZcdWM5NTJcdWM5NTNcdWM5NTVcdWM5NTZcdWM5'@;
put 'NTdcdWM5NTlcdWM5NWFcdWM5NWJcdWM5NWNcdWM5NWRcdWM5NWVcdWM5NWZcdWM5NjJcdWM5NjRcdWM5NjVcdWM5NjZcdWM5NjdcdWM5NjhcdWM5NjlcdWM5NmFcdWM5NmJcdWM5NmRcdWM5NmVcdWM5NmZcdTIxZDJcdTIxZDRcdTIyMDBcdTIyMDNceGI0XHVmZjVlXHUwMmM3XHUwMmQ4XHUw'@;
put 'MmRkXHUwMmRhXHUwMmQ5XHhiOFx1MDJkYlx4YTFceGJmXHUwMmQwXHUyMjJlXHUyMjExXHUyMjBmXHhhNFx1MjEwOVx1MjAzMFx1MjVjMVx1MjVjMFx1MjViN1x1MjViNlx1MjY2NFx1MjY2MFx1MjY2MVx1MjY2NVx1MjY2N1x1MjY2M1x1MjI5OVx1MjVjOFx1MjVhM1x1MjVkMFx1MjVkMVx1'@;
put 'MjU5Mlx1MjVhNFx1MjVhNVx1MjVhOFx1MjVhN1x1MjVhNlx1MjVhOVx1MjY2OFx1MjYwZlx1MjYwZVx1MjYxY1x1MjYxZVx4YjZcdTIwMjBcdTIwMjFcdTIxOTVcdTIxOTdcdTIxOTlcdTIxOTZcdTIxOThcdTI2NmRcdTI2NjlcdTI2NmFcdTI2NmNcdTMyN2ZcdTMyMWNcdTIxMTZcdTMzYzdc'@;
put 'dTIxMjJcdTMzYzJcdTMzZDhcdTIxMjFcdTIwYWNceGFlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTYyXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxNjJdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE2Ml1bdl1dPTQxNDcyK3YsVFs0MTQ3Mit2XT1rWzE2Ml1bdl0pO2ZvcihrWzE2M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Yzk3MVx1Yzk3Mlx1Yzk3M1x1Yzk3NVx1Yzk3Nlx1Yzk3N1x1Yzk3OFx1Yzk3OVx1Yzk3YVx1Yzk3Ylx1Yzk3ZFx1Yzk3ZVx1Yzk3Zlx1Yzk4MFx1Yzk4MVx1Yzk4Mlx1Yzk4M1x1Yzk4NFx1Yzk4NVx1Yzk4Nlx1Yzk4N1x1Yzk4'@;
put 'YVx1Yzk4Ylx1Yzk4ZFx1Yzk4ZVx1Yzk4Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Yzk5MVx1Yzk5Mlx1Yzk5M1x1Yzk5NFx1Yzk5NVx1Yzk5Nlx1Yzk5N1x1Yzk5YVx1Yzk5Y1x1Yzk5ZVx1Yzk5Zlx1YzlhMFx1YzlhMVx1YzlhMlx1YzlhM1x1YzlhNFx1YzlhNVx1'@;
put 'YzlhNlx1YzlhN1x1YzlhOFx1YzlhOVx1YzlhYVx1YzlhYlx1YzlhY1x1YzlhZFx1YzlhZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzlhZlx1YzliMFx1YzliMVx1YzliMlx1YzliM1x1YzliNFx1YzliNVx1YzliNlx1YzliN1x1YzliOFx1YzliOVx1YzliYVx1Yzli'@;
put 'Ylx1YzliY1x1YzliZFx1YzliZVx1YzliZlx1YzljMlx1YzljM1x1YzljNVx1YzljNlx1YzljOVx1YzljYlx1YzljY1x1YzljZFx1YzljZVx1YzljZlx1YzlkMlx1YzlkNFx1YzlkN1x1YzlkOFx1YzlkYlx1ZmYwMVx1ZmYwMlx1ZmYwM1x1ZmYwNFx1ZmYwNVx1ZmYwNlx1ZmYwN1x1ZmYwOFx1'@;
put 'ZmYwOVx1ZmYwYVx1ZmYwYlx1ZmYwY1x1ZmYwZFx1ZmYwZVx1ZmYwZlx1ZmYxMFx1ZmYxMVx1ZmYxMlx1ZmYxM1x1ZmYxNFx1ZmYxNVx1ZmYxNlx1ZmYxN1x1ZmYxOFx1ZmYxOVx1ZmYxYVx1ZmYxYlx1ZmYxY1x1ZmYxZFx1ZmYxZVx1ZmYxZlx1ZmYyMFx1ZmYyMVx1ZmYyMlx1ZmYyM1x1ZmYy'@;
put 'NFx1ZmYyNVx1ZmYyNlx1ZmYyN1x1ZmYyOFx1ZmYyOVx1ZmYyYVx1ZmYyYlx1ZmYyY1x1ZmYyZFx1ZmYyZVx1ZmYyZlx1ZmYzMFx1ZmYzMVx1ZmYzMlx1ZmYzM1x1ZmYzNFx1ZmYzNVx1ZmYzNlx1ZmYzN1x1ZmYzOFx1ZmYzOVx1ZmYzYVx1ZmYzYlx1ZmZlNlx1ZmYzZFx1ZmYzZVx1ZmYzZlx1'@;
put 'ZmY0MFx1ZmY0MVx1ZmY0Mlx1ZmY0M1x1ZmY0NFx1ZmY0NVx1ZmY0Nlx1ZmY0N1x1ZmY0OFx1ZmY0OVx1ZmY0YVx1ZmY0Ylx1ZmY0Y1x1ZmY0ZFx1ZmY0ZVx1ZmY0Zlx1ZmY1MFx1ZmY1MVx1ZmY1Mlx1ZmY1M1x1ZmY1NFx1ZmY1NVx1ZmY1Nlx1ZmY1N1x1ZmY1OFx1ZmY1OVx1ZmY1YVx1ZmY1'@;
put 'Ylx1ZmY1Y1x1ZmY1ZFx1ZmZlM1x1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE2M10ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTYzXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxNjNdW3ZdXT00MTcyOCt2LFRbNDE3Mjgrdl09a1sxNjNdW3ZdKTtmb3Ioa1sxNjRdPSJcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5ZGVcdWM5ZGZcdWM5ZTFcdWM5ZTNcdWM5ZTVcdWM5ZTZcdWM5ZThcdWM5ZTlcdWM5ZWFcdWM5ZWJcdWM5ZWVcdWM5ZjJcdWM5ZjNcdWM5ZjRcdWM5ZjVcdWM5ZjZcdWM5ZjdcdWM5ZmFcdWM5ZmJcdWM5'@;
put 'ZmRcdWM5ZmVcdWM5ZmZcdWNhMDFcdWNhMDJcdWNhMDNcdWNhMDRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhMDVcdWNhMDZcdWNhMDdcdWNhMGFcdWNhMGVcdWNhMGZcdWNhMTBcdWNhMTFcdWNhMTJcdWNhMTNcdWNhMTVcdWNhMTZcdWNhMTdcdWNhMTlcdWNhMWFc'@;
put 'dWNhMWJcdWNhMWNcdWNhMWRcdWNhMWVcdWNhMWZcdWNhMjBcdWNhMjFcdWNhMjJcdWNhMjNcdWNhMjRcdWNhMjVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhMjZcdWNhMjdcdWNhMjhcdWNhMmFcdWNhMmJcdWNhMmNcdWNhMmRcdWNhMmVcdWNhMmZcdWNhMzBcdWNh'@;
put 'MzFcdWNhMzJcdWNhMzNcdWNhMzRcdWNhMzVcdWNhMzZcdWNhMzdcdWNhMzhcdWNhMzlcdWNhM2FcdWNhM2JcdWNhM2NcdWNhM2RcdWNhM2VcdWNhM2ZcdWNhNDBcdWNhNDFcdWNhNDJcdWNhNDNcdWNhNDRcdWNhNDVcdWNhNDZcdTMxMzFcdTMxMzJcdTMxMzNcdTMxMzRcdTMxMzVcdTMxMzZc'@;
put 'dTMxMzdcdTMxMzhcdTMxMzlcdTMxM2FcdTMxM2JcdTMxM2NcdTMxM2RcdTMxM2VcdTMxM2ZcdTMxNDBcdTMxNDFcdTMxNDJcdTMxNDNcdTMxNDRcdTMxNDVcdTMxNDZcdTMxNDdcdTMxNDhcdTMxNDlcdTMxNGFcdTMxNGJcdTMxNGNcdTMxNGRcdTMxNGVcdTMxNGZcdTMxNTBcdTMxNTFcdTMx'@;
put 'NTJcdTMxNTNcdTMxNTRcdTMxNTVcdTMxNTZcdTMxNTdcdTMxNThcdTMxNTlcdTMxNWFcdTMxNWJcdTMxNWNcdTMxNWRcdTMxNWVcdTMxNWZcdTMxNjBcdTMxNjFcdTMxNjJcdTMxNjNcdTMxNjRcdTMxNjVcdTMxNjZcdTMxNjdcdTMxNjhcdTMxNjlcdTMxNmFcdTMxNmJcdTMxNmNcdTMxNmRc'@;
put 'dTMxNmVcdTMxNmZcdTMxNzBcdTMxNzFcdTMxNzJcdTMxNzNcdTMxNzRcdTMxNzVcdTMxNzZcdTMxNzdcdTMxNzhcdTMxNzlcdTMxN2FcdTMxN2JcdTMxN2NcdTMxN2RcdTMxN2VcdTMxN2ZcdTMxODBcdTMxODFcdTMxODJcdTMxODNcdTMxODRcdTMxODVcdTMxODZcdTMxODdcdTMxODhcdTMx'@;
put 'ODlcdTMxOGFcdTMxOGJcdTMxOGNcdTMxOGRcdTMxOGVcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxNjRdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE2NF1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTY0XVt2XV09NDE5ODQrdixUWzQxOTg0K3ZdPWtbMTY0XVt2XSk7Zm9yKGtbMTY1XT0i'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYTQ3XHVjYTQ4XHVjYTQ5XHVjYTRhXHVjYTRiXHVjYTRlXHVjYTRmXHVjYTUxXHVjYTUyXHVjYTUzXHVjYTU1XHVjYTU2XHVjYTU3XHVjYTU4XHVjYTU5XHVjYTVhXHVjYTViXHVj'@;
put 'YTVlXHVjYTYyXHVjYTYzXHVjYTY0XHVjYTY1XHVjYTY2XHVjYTY3XHVjYTY5XHVjYTZhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYTZiXHVjYTZjXHVjYTZkXHVjYTZlXHVjYTZmXHVjYTcwXHVjYTcxXHVjYTcyXHVjYTczXHVjYTc0XHVjYTc1XHVjYTc2XHVjYTc3'@;
put 'XHVjYTc4XHVjYTc5XHVjYTdhXHVjYTdiXHVjYTdjXHVjYTdlXHVjYTdmXHVjYTgwXHVjYTgxXHVjYTgyXHVjYTgzXHVjYTg1XHVjYTg2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYTg3XHVjYTg4XHVjYTg5XHVjYThhXHVjYThiXHVjYThjXHVjYThkXHVjYThlXHVj'@;
put 'YThmXHVjYTkwXHVjYTkxXHVjYTkyXHVjYTkzXHVjYTk0XHVjYTk1XHVjYTk2XHVjYTk3XHVjYTk5XHVjYTlhXHVjYTliXHVjYTljXHVjYTlkXHVjYTllXHVjYTlmXHVjYWEwXHVjYWExXHVjYWEyXHVjYWEzXHVjYWE0XHVjYWE1XHVjYWE2XHVjYWE3XHUyMTcwXHUyMTcxXHUyMTcyXHUyMTcz'@;
put 'XHUyMTc0XHUyMTc1XHUyMTc2XHUyMTc3XHUyMTc4XHUyMTc5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMTYwXHUyMTYxXHUyMTYyXHUyMTYzXHUyMTY0XHUyMTY1XHUyMTY2XHUyMTY3XHUyMTY4XHUyMTY5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUw'@;
put 'M2M4XHUwM2M5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTY1XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxNjVdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE2NV1bdl1dPTQyMjQwK3YsVFs0MjI0MCt2XT1rWzE2NV1bdl0p'@;
put 'O2ZvcihrWzE2Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2FhOFx1Y2FhOVx1Y2FhYVx1Y2FhYlx1Y2FhY1x1Y2FhZFx1Y2FhZVx1Y2FhZlx1Y2FiMFx1Y2FiMVx1Y2FiMlx1Y2FiM1x1Y2FiNFx1Y2FiNVx1Y2FiNlx1'@;
put 'Y2FiN1x1Y2FiOFx1Y2FiOVx1Y2FiYVx1Y2FiYlx1Y2FiZVx1Y2FiZlx1Y2FjMVx1Y2FjMlx1Y2FjM1x1Y2FjNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2FjNlx1Y2FjN1x1Y2FjOFx1Y2FjOVx1Y2FjYVx1Y2FjYlx1Y2FjZVx1Y2FkMFx1Y2FkMlx1Y2FkNFx1Y2Fk'@;
put 'NVx1Y2FkNlx1Y2FkN1x1Y2FkYVx1Y2FkYlx1Y2FkY1x1Y2FkZFx1Y2FkZVx1Y2FkZlx1Y2FlMVx1Y2FlMlx1Y2FlM1x1Y2FlNFx1Y2FlNVx1Y2FlNlx1Y2FlN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2FlOFx1Y2FlOVx1Y2FlYVx1Y2FlYlx1Y2FlZFx1Y2FlZVx1'@;
put 'Y2FlZlx1Y2FmMFx1Y2FmMVx1Y2FmMlx1Y2FmM1x1Y2FmNVx1Y2FmNlx1Y2FmN1x1Y2FmOFx1Y2FmOVx1Y2FmYVx1Y2FmYlx1Y2FmY1x1Y2FmZFx1Y2FmZVx1Y2FmZlx1Y2IwMFx1Y2IwMVx1Y2IwMlx1Y2IwM1x1Y2IwNFx1Y2IwNVx1Y2IwNlx1Y2IwN1x1Y2IwOVx1Y2IwYVx1MjUwMFx1MjUw'@;
put 'Mlx1MjUwY1x1MjUxMFx1MjUxOFx1MjUxNFx1MjUxY1x1MjUyY1x1MjUyNFx1MjUzNFx1MjUzY1x1MjUwMVx1MjUwM1x1MjUwZlx1MjUxM1x1MjUxYlx1MjUxN1x1MjUyM1x1MjUzM1x1MjUyYlx1MjUzYlx1MjU0Ylx1MjUyMFx1MjUyZlx1MjUyOFx1MjUzN1x1MjUzZlx1MjUxZFx1MjUzMFx1'@;
put 'MjUyNVx1MjUzOFx1MjU0Mlx1MjUxMlx1MjUxMVx1MjUxYVx1MjUxOVx1MjUxNlx1MjUxNVx1MjUwZVx1MjUwZFx1MjUxZVx1MjUxZlx1MjUyMVx1MjUyMlx1MjUyNlx1MjUyN1x1MjUyOVx1MjUyYVx1MjUyZFx1MjUyZVx1MjUzMVx1MjUzMlx1MjUzNVx1MjUzNlx1MjUzOVx1MjUzYVx1MjUz'@;
put 'ZFx1MjUzZVx1MjU0MFx1MjU0MVx1MjU0M1x1MjU0NFx1MjU0NVx1MjU0Nlx1MjU0N1x1MjU0OFx1MjU0OVx1MjU0YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE2Nl0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTY2XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxNjZdW3ZdXT00MjQ5Nit2LFRbNDI0OTYr'@;
put 'dl09a1sxNjZdW3ZdKTtmb3Ioa1sxNjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiMGJcdWNiMGNcdWNiMGRcdWNiMGVcdWNiMGZcdWNiMTFcdWNiMTJcdWNiMTNcdWNiMTVcdWNiMTZcdWNiMTdcdWNiMTlcdWNiMWFc'@;
put 'dWNiMWJcdWNiMWNcdWNiMWRcdWNiMWVcdWNiMWZcdWNiMjJcdWNiMjNcdWNiMjRcdWNiMjVcdWNiMjZcdWNiMjdcdWNiMjhcdWNiMjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiMmFcdWNiMmJcdWNiMmNcdWNiMmRcdWNiMmVcdWNiMmZcdWNiMzBcdWNiMzFcdWNi'@;
put 'MzJcdWNiMzNcdWNiMzRcdWNiMzVcdWNiMzZcdWNiMzdcdWNiMzhcdWNiMzlcdWNiM2FcdWNiM2JcdWNiM2NcdWNiM2RcdWNiM2VcdWNiM2ZcdWNiNDBcdWNiNDJcdWNiNDNcdWNiNDRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiNDVcdWNiNDZcdWNiNDdcdWNiNGFc'@;
put 'dWNiNGJcdWNiNGRcdWNiNGVcdWNiNGZcdWNiNTFcdWNiNTJcdWNiNTNcdWNiNTRcdWNiNTVcdWNiNTZcdWNiNTdcdWNiNWFcdWNiNWJcdWNiNWNcdWNiNWVcdWNiNWZcdWNiNjBcdWNiNjFcdWNiNjJcdWNiNjNcdWNiNjVcdWNiNjZcdWNiNjdcdWNiNjhcdWNiNjlcdWNiNmFcdWNiNmJcdWNi'@;
put 'NmNcdTMzOTVcdTMzOTZcdTMzOTdcdTIxMTNcdTMzOThcdTMzYzRcdTMzYTNcdTMzYTRcdTMzYTVcdTMzYTZcdTMzOTlcdTMzOWFcdTMzOWJcdTMzOWNcdTMzOWRcdTMzOWVcdTMzOWZcdTMzYTBcdTMzYTFcdTMzYTJcdTMzY2FcdTMzOGRcdTMzOGVcdTMzOGZcdTMzY2ZcdTMzODhcdTMzODlc'@;
put 'dTMzYzhcdTMzYTdcdTMzYThcdTMzYjBcdTMzYjFcdTMzYjJcdTMzYjNcdTMzYjRcdTMzYjVcdTMzYjZcdTMzYjdcdTMzYjhcdTMzYjlcdTMzODBcdTMzODFcdTMzODJcdTMzODNcdTMzODRcdTMzYmFcdTMzYmJcdTMzYmNcdTMzYmRcdTMzYmVcdTMzYmZcdTMzOTBcdTMzOTFcdTMzOTJcdTMz'@;
put 'OTNcdTMzOTRcdTIxMjZcdTMzYzBcdTMzYzFcdTMzOGFcdTMzOGJcdTMzOGNcdTMzZDZcdTMzYzVcdTMzYWRcdTMzYWVcdTMzYWZcdTMzZGJcdTMzYTlcdTMzYWFcdTMzYWJcdTMzYWNcdTMzZGRcdTMzZDBcdTMzZDNcdTMzYzNcdTMzYzlcdTMzZGNcdTMzYzZcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxNjddLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE2N11bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTY3XVt2XV09NDI3'@;
put 'NTIrdixUWzQyNzUyK3ZdPWtbMTY3XVt2XSk7Zm9yKGtbMTY4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYjZkXHVjYjZlXHVjYjZmXHVjYjcwXHVjYjcxXHVjYjcyXHVjYjczXHVjYjc0XHVjYjc1XHVjYjc2XHVjYjc3'@;
put 'XHVjYjdhXHVjYjdiXHVjYjdjXHVjYjdkXHVjYjdlXHVjYjdmXHVjYjgwXHVjYjgxXHVjYjgyXHVjYjgzXHVjYjg0XHVjYjg1XHVjYjg2XHVjYjg3XHVjYjg4XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYjg5XHVjYjhhXHVjYjhiXHVjYjhjXHVjYjhkXHVjYjhlXHVj'@;
put 'YjhmXHVjYjkwXHVjYjkxXHVjYjkyXHVjYjkzXHVjYjk0XHVjYjk1XHVjYjk2XHVjYjk3XHVjYjk4XHVjYjk5XHVjYjlhXHVjYjliXHVjYjlkXHVjYjllXHVjYjlmXHVjYmEwXHVjYmExXHVjYmEyXHVjYmEzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYmE0XHVjYmE1'@;
put 'XHVjYmE2XHVjYmE3XHVjYmE4XHVjYmE5XHVjYmFhXHVjYmFiXHVjYmFjXHVjYmFkXHVjYmFlXHVjYmFmXHVjYmIwXHVjYmIxXHVjYmIyXHVjYmIzXHVjYmI0XHVjYmI1XHVjYmI2XHVjYmI3XHVjYmI5XHVjYmJhXHVjYmJiXHVjYmJjXHVjYmJkXHVjYmJlXHVjYmJmXHVjYmMwXHVjYmMxXHVj'@;
put 'YmMyXHVjYmMzXHVjYmM0XHhjNlx4ZDBceGFhXHUwMTI2XHVmZmZkXHUwMTMyXHVmZmZkXHUwMTNmXHUwMTQxXHhkOFx1MDE1Mlx4YmFceGRlXHUwMTY2XHUwMTRhXHVmZmZkXHUzMjYwXHUzMjYxXHUzMjYyXHUzMjYzXHUzMjY0XHUzMjY1XHUzMjY2XHUzMjY3XHUzMjY4XHUzMjY5XHUzMjZh'@;
put 'XHUzMjZiXHUzMjZjXHUzMjZkXHUzMjZlXHUzMjZmXHUzMjcwXHUzMjcxXHUzMjcyXHUzMjczXHUzMjc0XHUzMjc1XHUzMjc2XHUzMjc3XHUzMjc4XHUzMjc5XHUzMjdhXHUzMjdiXHUyNGQwXHUyNGQxXHUyNGQyXHUyNGQzXHUyNGQ0XHUyNGQ1XHUyNGQ2XHUyNGQ3XHUyNGQ4XHUyNGQ5XHUy'@;
put 'NGRhXHUyNGRiXHUyNGRjXHUyNGRkXHUyNGRlXHUyNGRmXHUyNGUwXHUyNGUxXHUyNGUyXHUyNGUzXHUyNGU0XHUyNGU1XHUyNGU2XHUyNGU3XHUyNGU4XHUyNGU5XHUyNDYwXHUyNDYxXHUyNDYyXHUyNDYzXHUyNDY0XHUyNDY1XHUyNDY2XHUyNDY3XHUyNDY4XHUyNDY5XHUyNDZhXHUyNDZi'@;
put 'XHUyNDZjXHUyNDZkXHUyNDZlXHhiZFx1MjE1M1x1MjE1NFx4YmNceGJlXHUyMTViXHUyMTVjXHUyMTVkXHUyMTVlXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTY4XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxNjhdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE2OF1bdl1dPTQzMDA4K3Ys'@;
put 'VFs0MzAwOCt2XT1rWzE2OF1bdl0pO2ZvcihrWzE2OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2JjNVx1Y2JjNlx1Y2JjN1x1Y2JjOFx1Y2JjOVx1Y2JjYVx1Y2JjYlx1Y2JjY1x1Y2JjZFx1Y2JjZVx1Y2JjZlx1Y2Jk'@;
put 'MFx1Y2JkMVx1Y2JkMlx1Y2JkM1x1Y2JkNVx1Y2JkNlx1Y2JkN1x1Y2JkOFx1Y2JkOVx1Y2JkYVx1Y2JkYlx1Y2JkY1x1Y2JkZFx1Y2JkZVx1Y2JkZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2JlMFx1Y2JlMVx1Y2JlMlx1Y2JlM1x1Y2JlNVx1Y2JlNlx1Y2JlOFx1'@;
put 'Y2JlYVx1Y2JlYlx1Y2JlY1x1Y2JlZFx1Y2JlZVx1Y2JlZlx1Y2JmMFx1Y2JmMVx1Y2JmMlx1Y2JmM1x1Y2JmNFx1Y2JmNVx1Y2JmNlx1Y2JmN1x1Y2JmOFx1Y2JmOVx1Y2JmYVx1Y2JmYlx1Y2JmY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2JmZFx1Y2JmZVx1Y2Jm'@;
put 'Zlx1Y2MwMFx1Y2MwMVx1Y2MwMlx1Y2MwM1x1Y2MwNFx1Y2MwNVx1Y2MwNlx1Y2MwN1x1Y2MwOFx1Y2MwOVx1Y2MwYVx1Y2MwYlx1Y2MwZVx1Y2MwZlx1Y2MxMVx1Y2MxMlx1Y2MxM1x1Y2MxNVx1Y2MxNlx1Y2MxN1x1Y2MxOFx1Y2MxOVx1Y2MxYVx1Y2MxYlx1Y2MxZVx1Y2MxZlx1Y2MyMFx1'@;
put 'Y2MyM1x1Y2MyNFx4ZTZcdTAxMTFceGYwXHUwMTI3XHUwMTMxXHUwMTMzXHUwMTM4XHUwMTQwXHUwMTQyXHhmOFx1MDE1M1x4ZGZceGZlXHUwMTY3XHUwMTRiXHUwMTQ5XHUzMjAwXHUzMjAxXHUzMjAyXHUzMjAzXHUzMjA0XHUzMjA1XHUzMjA2XHUzMjA3XHUzMjA4XHUzMjA5XHUzMjBhXHUz'@;
put 'MjBiXHUzMjBjXHUzMjBkXHUzMjBlXHUzMjBmXHUzMjEwXHUzMjExXHUzMjEyXHUzMjEzXHUzMjE0XHUzMjE1XHUzMjE2XHUzMjE3XHUzMjE4XHUzMjE5XHUzMjFhXHUzMjFiXHUyNDljXHUyNDlkXHUyNDllXHUyNDlmXHUyNGEwXHUyNGExXHUyNGEyXHUyNGEzXHUyNGE0XHUyNGE1XHUyNGE2'@;
put 'XHUyNGE3XHUyNGE4XHUyNGE5XHUyNGFhXHUyNGFiXHUyNGFjXHUyNGFkXHUyNGFlXHUyNGFmXHUyNGIwXHUyNGIxXHUyNGIyXHUyNGIzXHUyNGI0XHUyNGI1XHUyNDc0XHUyNDc1XHUyNDc2XHUyNDc3XHUyNDc4XHUyNDc5XHUyNDdhXHUyNDdiXHUyNDdjXHUyNDdkXHUyNDdlXHUyNDdmXHUy'@;
put 'NDgwXHUyNDgxXHUyNDgyXHhiOVx4YjJceGIzXHUyMDc0XHUyMDdmXHUyMDgxXHUyMDgyXHUyMDgzXHUyMDg0XHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTY5XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxNjldW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE2OV1bdl1dPTQzMjY0K3YsVFs0'@;
put 'MzI2NCt2XT1rWzE2OV1bdl0pO2ZvcihrWzE3MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2MyNVx1Y2MyNlx1Y2MyYVx1Y2MyYlx1Y2MyZFx1Y2MyZlx1Y2MzMVx1Y2MzMlx1Y2MzM1x1Y2MzNFx1Y2MzNVx1Y2MzNlx1'@;
put 'Y2MzN1x1Y2MzYVx1Y2MzZlx1Y2M0MFx1Y2M0MVx1Y2M0Mlx1Y2M0M1x1Y2M0Nlx1Y2M0N1x1Y2M0OVx1Y2M0YVx1Y2M0Ylx1Y2M0ZFx1Y2M0ZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2M0Zlx1Y2M1MFx1Y2M1MVx1Y2M1Mlx1Y2M1M1x1Y2M1Nlx1Y2M1YVx1Y2M1'@;
put 'Ylx1Y2M1Y1x1Y2M1ZFx1Y2M1ZVx1Y2M1Zlx1Y2M2MVx1Y2M2Mlx1Y2M2M1x1Y2M2NVx1Y2M2N1x1Y2M2OVx1Y2M2YVx1Y2M2Ylx1Y2M2Y1x1Y2M2ZFx1Y2M2ZVx1Y2M2Zlx1Y2M3MVx1Y2M3Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2M3M1x1Y2M3NFx1Y2M3Nlx1'@;
put 'Y2M3N1x1Y2M3OFx1Y2M3OVx1Y2M3YVx1Y2M3Ylx1Y2M3Y1x1Y2M3ZFx1Y2M3ZVx1Y2M3Zlx1Y2M4MFx1Y2M4MVx1Y2M4Mlx1Y2M4M1x1Y2M4NFx1Y2M4NVx1Y2M4Nlx1Y2M4N1x1Y2M4OFx1Y2M4OVx1Y2M4YVx1Y2M4Ylx1Y2M4Y1x1Y2M4ZFx1Y2M4ZVx1Y2M4Zlx1Y2M5MFx1Y2M5MVx1Y2M5'@;
put 'Mlx1Y2M5M1x1MzA0MVx1MzA0Mlx1MzA0M1x1MzA0NFx1MzA0NVx1MzA0Nlx1MzA0N1x1MzA0OFx1MzA0OVx1MzA0YVx1MzA0Ylx1MzA0Y1x1MzA0ZFx1MzA0ZVx1MzA0Zlx1MzA1MFx1MzA1MVx1MzA1Mlx1MzA1M1x1MzA1NFx1MzA1NVx1MzA1Nlx1MzA1N1x1MzA1OFx1MzA1OVx1MzA1YVx1'@;
put 'MzA1Ylx1MzA1Y1x1MzA1ZFx1MzA1ZVx1MzA1Zlx1MzA2MFx1MzA2MVx1MzA2Mlx1MzA2M1x1MzA2NFx1MzA2NVx1MzA2Nlx1MzA2N1x1MzA2OFx1MzA2OVx1MzA2YVx1MzA2Ylx1MzA2Y1x1MzA2ZFx1MzA2ZVx1MzA2Zlx1MzA3MFx1MzA3MVx1MzA3Mlx1MzA3M1x1MzA3NFx1MzA3NVx1MzA3'@;
put 'Nlx1MzA3N1x1MzA3OFx1MzA3OVx1MzA3YVx1MzA3Ylx1MzA3Y1x1MzA3ZFx1MzA3ZVx1MzA3Zlx1MzA4MFx1MzA4MVx1MzA4Mlx1MzA4M1x1MzA4NFx1MzA4NVx1MzA4Nlx1MzA4N1x1MzA4OFx1MzA4OVx1MzA4YVx1MzA4Ylx1MzA4Y1x1MzA4ZFx1MzA4ZVx1MzA4Zlx1MzA5MFx1MzA5MVx1'@;
put 'MzA5Mlx1MzA5M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE3MF0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTcwXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxNzBdW3Zd'@;
put 'XT00MzUyMCt2LFRbNDM1MjArdl09a1sxNzBdW3ZdKTtmb3Ioa1sxNzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNjOTRcdWNjOTVcdWNjOTZcdWNjOTdcdWNjOWFcdWNjOWJcdWNjOWRcdWNjOWVcdWNjOWZcdWNjYTFc'@;
put 'dWNjYTJcdWNjYTNcdWNjYTRcdWNjYTVcdWNjYTZcdWNjYTdcdWNjYWFcdWNjYWVcdWNjYWZcdWNjYjBcdWNjYjFcdWNjYjJcdWNjYjNcdWNjYjZcdWNjYjdcdWNjYjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNjYmFcdWNjYmJcdWNjYmRcdWNjYmVcdWNjYmZcdWNj'@;
put 'YzBcdWNjYzFcdWNjYzJcdWNjYzNcdWNjYzZcdWNjYzhcdWNjY2FcdWNjY2JcdWNjY2NcdWNjY2RcdWNjY2VcdWNjY2ZcdWNjZDFcdWNjZDJcdWNjZDNcdWNjZDVcdWNjZDZcdWNjZDdcdWNjZDhcdWNjZDlcdWNjZGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNjZGJc'@;
put 'dWNjZGNcdWNjZGRcdWNjZGVcdWNjZGZcdWNjZTBcdWNjZTFcdWNjZTJcdWNjZTNcdWNjZTVcdWNjZTZcdWNjZTdcdWNjZThcdWNjZTlcdWNjZWFcdWNjZWJcdWNjZWRcdWNjZWVcdWNjZWZcdWNjZjFcdWNjZjJcdWNjZjNcdWNjZjRcdWNjZjVcdWNjZjZcdWNjZjdcdWNjZjhcdWNjZjlcdWNj'@;
put 'ZmFcdWNjZmJcdWNjZmNcdWNjZmRcdTMwYTFcdTMwYTJcdTMwYTNcdTMwYTRcdTMwYTVcdTMwYTZcdTMwYTdcdTMwYThcdTMwYTlcdTMwYWFcdTMwYWJcdTMwYWNcdTMwYWRcdTMwYWVcdTMwYWZcdTMwYjBcdTMwYjFcdTMwYjJcdTMwYjNcdTMwYjRcdTMwYjVcdTMwYjZcdTMwYjdcdTMwYjhc'@;
put 'dTMwYjlcdTMwYmFcdTMwYmJcdTMwYmNcdTMwYmRcdTMwYmVcdTMwYmZcdTMwYzBcdTMwYzFcdTMwYzJcdTMwYzNcdTMwYzRcdTMwYzVcdTMwYzZcdTMwYzdcdTMwYzhcdTMwYzlcdTMwY2FcdTMwY2JcdTMwY2NcdTMwY2RcdTMwY2VcdTMwY2ZcdTMwZDBcdTMwZDFcdTMwZDJcdTMwZDNcdTMw'@;
put 'ZDRcdTMwZDVcdTMwZDZcdTMwZDdcdTMwZDhcdTMwZDlcdTMwZGFcdTMwZGJcdTMwZGNcdTMwZGRcdTMwZGVcdTMwZGZcdTMwZTBcdTMwZTFcdTMwZTJcdTMwZTNcdTMwZTRcdTMwZTVcdTMwZTZcdTMwZTdcdTMwZThcdTMwZTlcdTMwZWFcdTMwZWJcdTMwZWNcdTMwZWRcdTMwZWVcdTMwZWZc'@;
put 'dTMwZjBcdTMwZjFcdTMwZjJcdTMwZjNcdTMwZjRcdTMwZjVcdTMwZjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxNzFdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE3MV1bdl0uY2hhckNvZGVBdCgwKSYm'@;
put 'KHNlW2tbMTcxXVt2XV09NDM3NzYrdixUWzQzNzc2K3ZdPWtbMTcxXVt2XSk7Zm9yKGtbMTcyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjY2ZlXHVjY2ZmXHVjZDAwXHVjZDAyXHVjZDAzXHVjZDA0XHVjZDA1XHVjZDA2'@;
put 'XHVjZDA3XHVjZDBhXHVjZDBiXHVjZDBkXHVjZDBlXHVjZDBmXHVjZDExXHVjZDEyXHVjZDEzXHVjZDE0XHVjZDE1XHVjZDE2XHVjZDE3XHVjZDFhXHVjZDFjXHVjZDFlXHVjZDFmXHVjZDIwXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZDIxXHVjZDIyXHVjZDIzXHVj'@;
put 'ZDI1XHVjZDI2XHVjZDI3XHVjZDI5XHVjZDJhXHVjZDJiXHVjZDJkXHVjZDJlXHVjZDJmXHVjZDMwXHVjZDMxXHVjZDMyXHVjZDMzXHVjZDM0XHVjZDM1XHVjZDM2XHVjZDM3XHVjZDM4XHVjZDNhXHVjZDNiXHVjZDNjXHVjZDNkXHVjZDNlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVjZDNmXHVjZDQwXHVjZDQxXHVjZDQyXHVjZDQzXHVjZDQ0XHVjZDQ1XHVjZDQ2XHVjZDQ3XHVjZDQ4XHVjZDQ5XHVjZDRhXHVjZDRiXHVjZDRjXHVjZDRkXHVjZDRlXHVjZDRmXHVjZDUwXHVjZDUxXHVjZDUyXHVjZDUzXHVjZDU0XHVjZDU1XHVjZDU2XHVjZDU3XHVjZDU4XHVj'@;
put 'ZDU5XHVjZDVhXHVjZDViXHVjZDVkXHVjZDVlXHVjZDVmXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDAxXHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0'@;
put 'XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNDMwXHUw'@;
put 'NDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDUxXHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRi'@;
put 'XHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTcyXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxNzJdW3ZdLmNo'@;
put 'YXJDb2RlQXQoMCkmJihzZVtrWzE3Ml1bdl1dPTQ0MDMyK3YsVFs0NDAzMit2XT1rWzE3Ml1bdl0pO2ZvcihrWzE3M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Q2MVx1Y2Q2Mlx1Y2Q2M1x1Y2Q2NVx1Y2Q2Nlx1Y2Q2'@;
put 'N1x1Y2Q2OFx1Y2Q2OVx1Y2Q2YVx1Y2Q2Ylx1Y2Q2ZVx1Y2Q3MFx1Y2Q3Mlx1Y2Q3M1x1Y2Q3NFx1Y2Q3NVx1Y2Q3Nlx1Y2Q3N1x1Y2Q3OVx1Y2Q3YVx1Y2Q3Ylx1Y2Q3Y1x1Y2Q3ZFx1Y2Q3ZVx1Y2Q3Zlx1Y2Q4MFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Q4MVx1'@;
put 'Y2Q4Mlx1Y2Q4M1x1Y2Q4NFx1Y2Q4NVx1Y2Q4Nlx1Y2Q4N1x1Y2Q4OVx1Y2Q4YVx1Y2Q4Ylx1Y2Q4Y1x1Y2Q4ZFx1Y2Q4ZVx1Y2Q4Zlx1Y2Q5MFx1Y2Q5MVx1Y2Q5Mlx1Y2Q5M1x1Y2Q5Nlx1Y2Q5N1x1Y2Q5OVx1Y2Q5YVx1Y2Q5Ylx1Y2Q5ZFx1Y2Q5ZVx1Y2Q5Zlx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2RhMFx1Y2RhMVx1Y2RhMlx1Y2RhM1x1Y2RhNlx1Y2RhOFx1Y2RhYVx1Y2RhYlx1Y2RhY1x1Y2RhZFx1Y2RhZVx1Y2RhZlx1Y2RiMVx1Y2RiMlx1Y2RiM1x1Y2RiNFx1Y2RiNVx1Y2RiNlx1Y2RiN1x1Y2RiOFx1Y2RiOVx1Y2RiYVx1Y2RiYlx1Y2RiY1x1'@;
put 'Y2RiZFx1Y2RiZVx1Y2RiZlx1Y2RjMFx1Y2RjMVx1Y2RjMlx1Y2RjM1x1Y2RjNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE3M10ubGVuZ3RoOysrdik2NTUzMyE9'@;
put 'PWtbMTczXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxNzNdW3ZdXT00NDI4OCt2LFRbNDQyODgrdl09a1sxNzNdW3ZdKTtmb3Ioa1sxNzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNkYzZcdWNkYzdcdWNkYzhcdWNk'@;
put 'YzlcdWNkY2FcdWNkY2JcdWNkY2RcdWNkY2VcdWNkY2ZcdWNkZDFcdWNkZDJcdWNkZDNcdWNkZDRcdWNkZDVcdWNkZDZcdWNkZDdcdWNkZDhcdWNkZDlcdWNkZGFcdWNkZGJcdWNkZGNcdWNkZGRcdWNkZGVcdWNkZGZcdWNkZTBcdWNkZTFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWNkZTJcdWNkZTNcdWNkZTRcdWNkZTVcdWNkZTZcdWNkZTdcdWNkZTlcdWNkZWFcdWNkZWJcdWNkZWRcdWNkZWVcdWNkZWZcdWNkZjFcdWNkZjJcdWNkZjNcdWNkZjRcdWNkZjVcdWNkZjZcdWNkZjdcdWNkZmFcdWNkZmNcdWNkZmVcdWNkZmZcdWNlMDBcdWNlMDFcdWNlMDJcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNlMDNcdWNlMDVcdWNlMDZcdWNlMDdcdWNlMDlcdWNlMGFcdWNlMGJcdWNlMGRcdWNlMGVcdWNlMGZcdWNlMTBcdWNlMTFcdWNlMTJcdWNlMTNcdWNlMTVcdWNlMTZcdWNlMTdcdWNlMThcdWNlMWFcdWNlMWJcdWNlMWNcdWNlMWRc'@;
put 'dWNlMWVcdWNlMWZcdWNlMjJcdWNlMjNcdWNlMjVcdWNlMjZcdWNlMjdcdWNlMjlcdWNlMmFcdWNlMmJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxNzRdLmxlbmd0'@;
put 'aDsrK3YpNjU1MzMhPT1rWzE3NF1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTc0XVt2XV09NDQ1NDQrdixUWzQ0NTQ0K3ZdPWtbMTc0XVt2XSk7Zm9yKGtbMTc1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZTJjXHVj'@;
put 'ZTJkXHVjZTJlXHVjZTJmXHVjZTMyXHVjZTM0XHVjZTM2XHVjZTM3XHVjZTM4XHVjZTM5XHVjZTNhXHVjZTNiXHVjZTNjXHVjZTNkXHVjZTNlXHVjZTNmXHVjZTQwXHVjZTQxXHVjZTQyXHVjZTQzXHVjZTQ0XHVjZTQ1XHVjZTQ2XHVjZTQ3XHVjZTQ4XHVjZTQ5XHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVjZTRhXHVjZTRiXHVjZTRjXHVjZTRkXHVjZTRlXHVjZTRmXHVjZTUwXHVjZTUxXHVjZTUyXHVjZTUzXHVjZTU0XHVjZTU1XHVjZTU2XHVjZTU3XHVjZTVhXHVjZTViXHVjZTVkXHVjZTVlXHVjZTYyXHVjZTYzXHVjZTY0XHVjZTY1XHVjZTY2XHVjZTY3XHVj'@;
put 'ZTZhXHVjZTZjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZTZlXHVjZTZmXHVjZTcwXHVjZTcxXHVjZTcyXHVjZTczXHVjZTc2XHVjZTc3XHVjZTc5XHVjZTdhXHVjZTdiXHVjZTdkXHVjZTdlXHVjZTdmXHVjZTgwXHVjZTgxXHVjZTgyXHVjZTgzXHVjZTg2XHVjZTg4'@;
put 'XHVjZThhXHVjZThiXHVjZThjXHVjZThkXHVjZThlXHVjZThmXHVjZTkyXHVjZTkzXHVjZTk1XHVjZTk2XHVjZTk3XHVjZTk5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksdj0wO3Yh'@;
put 'PWtbMTc1XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxNzVdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE3NV1bdl1dPTQ0ODAwK3YsVFs0NDgwMCt2XT1rWzE3NV1bdl0pO2ZvcihrWzE3Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1Y2U5YVx1Y2U5Ylx1Y2U5Y1x1Y2U5ZFx1Y2U5ZVx1Y2U5Zlx1Y2VhMlx1Y2VhNlx1Y2VhN1x1Y2VhOFx1Y2VhOVx1Y2VhYVx1Y2VhYlx1Y2VhZVx1Y2VhZlx1Y2ViMFx1Y2ViMVx1Y2ViMlx1Y2ViM1x1Y2ViNFx1Y2ViNVx1Y2ViNlx1Y2ViN1x1Y2ViOFx1Y2ViOVx1Y2ViYVx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2ViYlx1Y2ViY1x1Y2ViZFx1Y2ViZVx1Y2ViZlx1Y2VjMFx1Y2VjMlx1Y2VjM1x1Y2VjNFx1Y2VjNVx1Y2VjNlx1Y2VjN1x1Y2VjOFx1Y2VjOVx1Y2VjYVx1Y2VjYlx1Y2VjY1x1Y2VjZFx1Y2VjZVx1Y2VjZlx1Y2VkMFx1Y2VkMVx1'@;
put 'Y2VkMlx1Y2VkM1x1Y2VkNFx1Y2VkNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2VkNlx1Y2VkN1x1Y2VkOFx1Y2VkOVx1Y2VkYVx1Y2VkYlx1Y2VkY1x1Y2VkZFx1Y2VkZVx1Y2VkZlx1Y2VlMFx1Y2VlMVx1Y2VlMlx1Y2VlM1x1Y2VlNlx1Y2VlN1x1Y2VlOVx1Y2Vl'@;
put 'YVx1Y2VlZFx1Y2VlZVx1Y2VlZlx1Y2VmMFx1Y2VmMVx1Y2VmMlx1Y2VmM1x1Y2VmNlx1Y2VmYVx1Y2VmYlx1Y2VmY1x1Y2VmZFx1Y2VmZVx1Y2VmZlx1YWMwMFx1YWMwMVx1YWMwNFx1YWMwN1x1YWMwOFx1YWMwOVx1YWMwYVx1YWMxMFx1YWMxMVx1YWMxMlx1YWMxM1x1YWMxNFx1YWMxNVx1'@;
put 'YWMxNlx1YWMxN1x1YWMxOVx1YWMxYVx1YWMxYlx1YWMxY1x1YWMxZFx1YWMyMFx1YWMyNFx1YWMyY1x1YWMyZFx1YWMyZlx1YWMzMFx1YWMzMVx1YWMzOFx1YWMzOVx1YWMzY1x1YWM0MFx1YWM0Ylx1YWM0ZFx1YWM1NFx1YWM1OFx1YWM1Y1x1YWM3MFx1YWM3MVx1YWM3NFx1YWM3N1x1YWM3'@;
put 'OFx1YWM3YVx1YWM4MFx1YWM4MVx1YWM4M1x1YWM4NFx1YWM4NVx1YWM4Nlx1YWM4OVx1YWM4YVx1YWM4Ylx1YWM4Y1x1YWM5MFx1YWM5NFx1YWM5Y1x1YWM5ZFx1YWM5Zlx1YWNhMFx1YWNhMVx1YWNhOFx1YWNhOVx1YWNhYVx1YWNhY1x1YWNhZlx1YWNiMFx1YWNiOFx1YWNiOVx1YWNiYlx1'@;
put 'YWNiY1x1YWNiZFx1YWNjMVx1YWNjNFx1YWNjOFx1YWNjY1x1YWNkNVx1YWNkN1x1YWNlMFx1YWNlMVx1YWNlNFx1YWNlN1x1YWNlOFx1YWNlYVx1YWNlY1x1YWNlZlx1YWNmMFx1YWNmMVx1YWNmM1x1YWNmNVx1YWNmNlx1YWNmY1x1YWNmZFx1YWQwMFx1YWQwNFx1YWQwNlx1ZmZmZCIuc3Bs'@;
put 'aXQoIiIpLHY9MDt2IT1rWzE3Nl0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTc2XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxNzZdW3ZdXT00NTA1Nit2LFRbNDUwNTYrdl09a1sxNzZdW3ZdKTtmb3Ioa1sxNzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWNmMDJcdWNmMDNcdWNmMDVcdWNmMDZcdWNmMDdcdWNmMDlcdWNmMGFcdWNmMGJcdWNmMGNcdWNmMGRcdWNmMGVcdWNmMGZcdWNmMTJcdWNmMTRcdWNmMTZcdWNmMTdcdWNmMThcdWNmMTlcdWNmMWFcdWNmMWJcdWNmMWRcdWNmMWVcdWNmMWZcdWNmMjFcdWNm'@;
put 'MjJcdWNmMjNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmMjVcdWNmMjZcdWNmMjdcdWNmMjhcdWNmMjlcdWNmMmFcdWNmMmJcdWNmMmVcdWNmMzJcdWNmMzNcdWNmMzRcdWNmMzVcdWNmMzZcdWNmMzdcdWNmMzlcdWNmM2FcdWNmM2JcdWNmM2NcdWNmM2RcdWNmM2Vc'@;
put 'dWNmM2ZcdWNmNDBcdWNmNDFcdWNmNDJcdWNmNDNcdWNmNDRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmNDVcdWNmNDZcdWNmNDdcdWNmNDhcdWNmNDlcdWNmNGFcdWNmNGJcdWNmNGNcdWNmNGRcdWNmNGVcdWNmNGZcdWNmNTBcdWNmNTFcdWNmNTJcdWNmNTNcdWNm'@;
put 'NTZcdWNmNTdcdWNmNTlcdWNmNWFcdWNmNWJcdWNmNWRcdWNmNWVcdWNmNWZcdWNmNjBcdWNmNjFcdWNmNjJcdWNmNjNcdWNmNjZcdWNmNjhcdWNmNmFcdWNmNmJcdWNmNmNcdWFkMGNcdWFkMGRcdWFkMGZcdWFkMTFcdWFkMThcdWFkMWNcdWFkMjBcdWFkMjlcdWFkMmNcdWFkMmRcdWFkMzRc'@;
put 'dWFkMzVcdWFkMzhcdWFkM2NcdWFkNDRcdWFkNDVcdWFkNDdcdWFkNDlcdWFkNTBcdWFkNTRcdWFkNThcdWFkNjFcdWFkNjNcdWFkNmNcdWFkNmRcdWFkNzBcdWFkNzNcdWFkNzRcdWFkNzVcdWFkNzZcdWFkN2JcdWFkN2NcdWFkN2RcdWFkN2ZcdWFkODFcdWFkODJcdWFkODhcdWFkODlcdWFk'@;
put 'OGNcdWFkOTBcdWFkOWNcdWFkOWRcdWFkYTRcdWFkYjdcdWFkYzBcdWFkYzFcdWFkYzRcdWFkYzhcdWFkZDBcdWFkZDFcdWFkZDNcdWFkZGNcdWFkZTBcdWFkZTRcdWFkZjhcdWFkZjlcdWFkZmNcdWFkZmZcdWFlMDBcdWFlMDFcdWFlMDhcdWFlMDlcdWFlMGJcdWFlMGRcdWFlMTRcdWFlMzBc'@;
put 'dWFlMzFcdWFlMzRcdWFlMzdcdWFlMzhcdWFlM2FcdWFlNDBcdWFlNDFcdWFlNDNcdWFlNDVcdWFlNDZcdWFlNGFcdWFlNGNcdWFlNGRcdWFlNGVcdWFlNTBcdWFlNTRcdWFlNTZcdWFlNWNcdWFlNWRcdWFlNWZcdWFlNjBcdWFlNjFcdWFlNjVcdWFlNjhcdWFlNjlcdWFlNmNcdWFlNzBcdWFl'@;
put 'NzhcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxNzddLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE3N11bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTc3XVt2XV09NDUzMTIrdixUWzQ1MzEyK3ZdPWtbMTc3XVt2XSk7Zm9yKGtbMTc4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZjZkXHVjZjZlXHVjZjZmXHVjZjcyXHVjZjczXHVjZjc1XHVjZjc2XHVjZjc3XHVjZjc5XHVjZjdhXHVjZjdiXHVjZjdjXHVjZjdkXHVjZjdlXHVjZjdmXHVjZjgxXHVjZjgyXHVjZjgzXHVjZjg0XHVjZjg2XHVjZjg3XHVjZjg4XHVj'@;
put 'Zjg5XHVjZjhhXHVjZjhiXHVjZjhkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZjhlXHVjZjhmXHVjZjkwXHVjZjkxXHVjZjkyXHVjZjkzXHVjZjk0XHVjZjk1XHVjZjk2XHVjZjk3XHVjZjk4XHVjZjk5XHVjZjlhXHVjZjliXHVjZjljXHVjZjlkXHVjZjllXHVjZjlm'@;
put 'XHVjZmEwXHVjZmEyXHVjZmEzXHVjZmE0XHVjZmE1XHVjZmE2XHVjZmE3XHVjZmE5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZmFhXHVjZmFiXHVjZmFjXHVjZmFkXHVjZmFlXHVjZmFmXHVjZmIxXHVjZmIyXHVjZmIzXHVjZmI0XHVjZmI1XHVjZmI2XHVjZmI3XHVj'@;
put 'ZmI4XHVjZmI5XHVjZmJhXHVjZmJiXHVjZmJjXHVjZmJkXHVjZmJlXHVjZmJmXHVjZmMwXHVjZmMxXHVjZmMyXHVjZmMzXHVjZmM1XHVjZmM2XHVjZmM3XHVjZmM4XHVjZmM5XHVjZmNhXHVjZmNiXHVhZTc5XHVhZTdiXHVhZTdjXHVhZTdkXHVhZTg0XHVhZTg1XHVhZThjXHVhZWJjXHVhZWJk'@;
put 'XHVhZWJlXHVhZWMwXHVhZWM0XHVhZWNjXHVhZWNkXHVhZWNmXHVhZWQwXHVhZWQxXHVhZWQ4XHVhZWQ5XHVhZWRjXHVhZWU4XHVhZWViXHVhZWVkXHVhZWY0XHVhZWY4XHVhZWZjXHVhZjA3XHVhZjA4XHVhZjBkXHVhZjEwXHVhZjJjXHVhZjJkXHVhZjMwXHVhZjMyXHVhZjM0XHVhZjNjXHVh'@;
put 'ZjNkXHVhZjNmXHVhZjQxXHVhZjQyXHVhZjQzXHVhZjQ4XHVhZjQ5XHVhZjUwXHVhZjVjXHVhZjVkXHVhZjY0XHVhZjY1XHVhZjc5XHVhZjgwXHVhZjg0XHVhZjg4XHVhZjkwXHVhZjkxXHVhZjk1XHVhZjljXHVhZmI4XHVhZmI5XHVhZmJjXHVhZmMwXHVhZmM3XHVhZmM4XHVhZmM5XHVhZmNi'@;
put 'XHVhZmNkXHVhZmNlXHVhZmQ0XHVhZmRjXHVhZmU4XHVhZmU5XHVhZmYwXHVhZmYxXHVhZmY0XHVhZmY4XHViMDAwXHViMDAxXHViMDA0XHViMDBjXHViMDEwXHViMDE0XHViMDFjXHViMDFkXHViMDI4XHViMDQ0XHViMDQ1XHViMDQ4XHViMDRhXHViMDRjXHViMDRlXHViMDUzXHViMDU0XHVi'@;
put 'MDU1XHViMDU3XHViMDU5XHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTc4XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxNzhdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE3OF1bdl1dPTQ1NTY4K3YsVFs0NTU2OCt2XT1rWzE3OF1bdl0pO2ZvcihrWzE3OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2ZjY1x1Y2ZjZFx1Y2ZjZVx1Y2ZjZlx1Y2ZkMFx1Y2ZkMVx1Y2ZkMlx1Y2ZkM1x1Y2ZkNFx1Y2ZkNVx1Y2ZkNlx1Y2ZkN1x1Y2ZkOFx1Y2ZkOVx1Y2ZkYVx1Y2ZkYlx1Y2ZkY1x1Y2ZkZFx1Y2ZkZVx1Y2ZkZlx1'@;
put 'Y2ZlMlx1Y2ZlM1x1Y2ZlNVx1Y2ZlNlx1Y2ZlN1x1Y2ZlOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2ZlYVx1Y2ZlYlx1Y2ZlY1x1Y2ZlZFx1Y2ZlZVx1Y2ZlZlx1Y2ZmMlx1Y2ZmNFx1Y2ZmNlx1Y2ZmN1x1Y2ZmOFx1Y2ZmOVx1Y2ZmYVx1Y2ZmYlx1Y2ZmZFx1Y2Zm'@;
put 'ZVx1Y2ZmZlx1ZDAwMVx1ZDAwMlx1ZDAwM1x1ZDAwNVx1ZDAwNlx1ZDAwN1x1ZDAwOFx1ZDAwOVx1ZDAwYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDAwYlx1ZDAwY1x1ZDAwZFx1ZDAwZVx1ZDAwZlx1ZDAxMFx1ZDAxMlx1ZDAxM1x1ZDAxNFx1ZDAxNVx1ZDAxNlx1'@;
put 'ZDAxN1x1ZDAxOVx1ZDAxYVx1ZDAxYlx1ZDAxY1x1ZDAxZFx1ZDAxZVx1ZDAxZlx1ZDAyMFx1ZDAyMVx1ZDAyMlx1ZDAyM1x1ZDAyNFx1ZDAyNVx1ZDAyNlx1ZDAyN1x1ZDAyOFx1ZDAyOVx1ZDAyYVx1ZDAyYlx1ZDAyY1x1YjA1ZFx1YjA3Y1x1YjA3ZFx1YjA4MFx1YjA4NFx1YjA4Y1x1YjA4'@;
put 'ZFx1YjA4Zlx1YjA5MVx1YjA5OFx1YjA5OVx1YjA5YVx1YjA5Y1x1YjA5Zlx1YjBhMFx1YjBhMVx1YjBhMlx1YjBhOFx1YjBhOVx1YjBhYlx1YjBhY1x1YjBhZFx1YjBhZVx1YjBhZlx1YjBiMVx1YjBiM1x1YjBiNFx1YjBiNVx1YjBiOFx1YjBiY1x1YjBjNFx1YjBjNVx1YjBjN1x1YjBjOFx1'@;
put 'YjBjOVx1YjBkMFx1YjBkMVx1YjBkNFx1YjBkOFx1YjBlMFx1YjBlNVx1YjEwOFx1YjEwOVx1YjEwYlx1YjEwY1x1YjExMFx1YjExMlx1YjExM1x1YjExOFx1YjExOVx1YjExYlx1YjExY1x1YjExZFx1YjEyM1x1YjEyNFx1YjEyNVx1YjEyOFx1YjEyY1x1YjEzNFx1YjEzNVx1YjEzN1x1YjEz'@;
put 'OFx1YjEzOVx1YjE0MFx1YjE0MVx1YjE0NFx1YjE0OFx1YjE1MFx1YjE1MVx1YjE1NFx1YjE1NVx1YjE1OFx1YjE1Y1x1YjE2MFx1YjE3OFx1YjE3OVx1YjE3Y1x1YjE4MFx1YjE4Mlx1YjE4OFx1YjE4OVx1YjE4Ylx1YjE4ZFx1YjE5Mlx1YjE5M1x1YjE5NFx1YjE5OFx1YjE5Y1x1YjFhOFx1'@;
put 'YjFjY1x1YjFkMFx1YjFkNFx1YjFkY1x1YjFkZFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE3OV0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTc5XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxNzldW3ZdXT00NTgyNCt2LFRbNDU4MjQrdl09a1sxNzldW3ZdKTtmb3Ioa1sxODBdPSJcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQwMmVcdWQwMmZcdWQwMzBcdWQwMzFcdWQwMzJcdWQwMzNcdWQwMzZcdWQwMzdcdWQwMzlcdWQwM2FcdWQwM2JcdWQwM2RcdWQwM2VcdWQwM2ZcdWQwNDBcdWQwNDFcdWQwNDJcdWQwNDNc'@;
put 'dWQwNDZcdWQwNDhcdWQwNGFcdWQwNGJcdWQwNGNcdWQwNGRcdWQwNGVcdWQwNGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQwNTFcdWQwNTJcdWQwNTNcdWQwNTVcdWQwNTZcdWQwNTdcdWQwNTlcdWQwNWFcdWQwNWJcdWQwNWNcdWQwNWRcdWQwNWVcdWQwNWZcdWQw'@;
put 'NjFcdWQwNjJcdWQwNjNcdWQwNjRcdWQwNjVcdWQwNjZcdWQwNjdcdWQwNjhcdWQwNjlcdWQwNmFcdWQwNmJcdWQwNmVcdWQwNmZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQwNzFcdWQwNzJcdWQwNzNcdWQwNzVcdWQwNzZcdWQwNzdcdWQwNzhcdWQwNzlcdWQwN2Fc'@;
put 'dWQwN2JcdWQwN2VcdWQwN2ZcdWQwODBcdWQwODJcdWQwODNcdWQwODRcdWQwODVcdWQwODZcdWQwODdcdWQwODhcdWQwODlcdWQwOGFcdWQwOGJcdWQwOGNcdWQwOGRcdWQwOGVcdWQwOGZcdWQwOTBcdWQwOTFcdWQwOTJcdWQwOTNcdWQwOTRcdWIxZGZcdWIxZThcdWIxZTlcdWIxZWNcdWIx'@;
put 'ZjBcdWIxZjlcdWIxZmJcdWIxZmRcdWIyMDRcdWIyMDVcdWIyMDhcdWIyMGJcdWIyMGNcdWIyMTRcdWIyMTVcdWIyMTdcdWIyMTlcdWIyMjBcdWIyMzRcdWIyM2NcdWIyNThcdWIyNWNcdWIyNjBcdWIyNjhcdWIyNjlcdWIyNzRcdWIyNzVcdWIyN2NcdWIyODRcdWIyODVcdWIyODlcdWIyOTBc'@;
put 'dWIyOTFcdWIyOTRcdWIyOThcdWIyOTlcdWIyOWFcdWIyYTBcdWIyYTFcdWIyYTNcdWIyYTVcdWIyYTZcdWIyYWFcdWIyYWNcdWIyYjBcdWIyYjRcdWIyYzhcdWIyYzlcdWIyY2NcdWIyZDBcdWIyZDJcdWIyZDhcdWIyZDlcdWIyZGJcdWIyZGRcdWIyZTJcdWIyZTRcdWIyZTVcdWIyZTZcdWIy'@;
put 'ZThcdWIyZWJcdWIyZWNcdWIyZWRcdWIyZWVcdWIyZWZcdWIyZjNcdWIyZjRcdWIyZjVcdWIyZjdcdWIyZjhcdWIyZjlcdWIyZmFcdWIyZmJcdWIyZmZcdWIzMDBcdWIzMDFcdWIzMDRcdWIzMDhcdWIzMTBcdWIzMTFcdWIzMTNcdWIzMTRcdWIzMTVcdWIzMWNcdWIzNTRcdWIzNTVcdWIzNTZc'@;
put 'dWIzNThcdWIzNWJcdWIzNWNcdWIzNWVcdWIzNWZcdWIzNjRcdWIzNjVcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxODBdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE4MF1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTgwXVt2XV09NDYwODArdixUWzQ2MDgwK3ZdPWtbMTgwXVt2XSk7Zm9y'@;
put 'KGtbMTgxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMDk1XHVkMDk2XHVkMDk3XHVkMDk4XHVkMDk5XHVkMDlhXHVkMDliXHVkMDljXHVkMDlkXHVkMDllXHVkMDlmXHVkMGEwXHVkMGExXHVkMGEyXHVkMGEzXHVkMGE2'@;
put 'XHVkMGE3XHVkMGE5XHVkMGFhXHVkMGFiXHVkMGFkXHVkMGFlXHVkMGFmXHVkMGIwXHVkMGIxXHVkMGIyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMGIzXHVkMGI2XHVkMGI4XHVkMGJhXHVkMGJiXHVkMGJjXHVkMGJkXHVkMGJlXHVkMGJmXHVkMGMyXHVkMGMzXHVk'@;
put 'MGM1XHVkMGM2XHVkMGM3XHVkMGNhXHVkMGNiXHVkMGNjXHVkMGNkXHVkMGNlXHVkMGNmXHVkMGQyXHVkMGQ2XHVkMGQ3XHVkMGQ4XHVkMGQ5XHVkMGRhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMGRiXHVkMGRlXHVkMGRmXHVkMGUxXHVkMGUyXHVkMGUzXHVkMGU1'@;
put 'XHVkMGU2XHVkMGU3XHVkMGU4XHVkMGU5XHVkMGVhXHVkMGViXHVkMGVlXHVkMGYyXHVkMGYzXHVkMGY0XHVkMGY1XHVkMGY2XHVkMGY3XHVkMGY5XHVkMGZhXHVkMGZiXHVkMGZjXHVkMGZkXHVkMGZlXHVkMGZmXHVkMTAwXHVkMTAxXHVkMTAyXHVkMTAzXHVkMTA0XHViMzY3XHViMzY5XHVi'@;
put 'MzZiXHViMzZlXHViMzcwXHViMzcxXHViMzc0XHViMzc4XHViMzgwXHViMzgxXHViMzgzXHViMzg0XHViMzg1XHViMzhjXHViMzkwXHViMzk0XHViM2EwXHViM2ExXHViM2E4XHViM2FjXHViM2M0XHViM2M1XHViM2M4XHViM2NiXHViM2NjXHViM2NlXHViM2QwXHViM2Q0XHViM2Q1XHViM2Q3'@;
put 'XHViM2Q5XHViM2RiXHViM2RkXHViM2UwXHViM2U0XHViM2U4XHViM2ZjXHViNDEwXHViNDE4XHViNDFjXHViNDIwXHViNDI4XHViNDI5XHViNDJiXHViNDM0XHViNDUwXHViNDUxXHViNDU0XHViNDU4XHViNDYwXHViNDYxXHViNDYzXHViNDY1XHViNDZjXHViNDgwXHViNDg4XHViNDlkXHVi'@;
put 'NGE0XHViNGE4XHViNGFjXHViNGI1XHViNGI3XHViNGI5XHViNGMwXHViNGM0XHViNGM4XHViNGQwXHViNGQ1XHViNGRjXHViNGRkXHViNGUwXHViNGUzXHViNGU0XHViNGU2XHViNGVjXHViNGVkXHViNGVmXHViNGYxXHViNGY4XHViNTE0XHViNTE1XHViNTE4XHViNTFiXHViNTFjXHViNTI0'@;
put 'XHViNTI1XHViNTI3XHViNTI4XHViNTI5XHViNTJhXHViNTMwXHViNTMxXHViNTM0XHViNTM4XHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTgxXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxODFdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE4MV1bdl1dPTQ2MzM2K3YsVFs0NjMzNit2XT1r'@;
put 'WzE4MV1bdl0pO2ZvcihrWzE4Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDEwNVx1ZDEwNlx1ZDEwN1x1ZDEwOFx1ZDEwOVx1ZDEwYVx1ZDEwYlx1ZDEwY1x1ZDEwZVx1ZDEwZlx1ZDExMFx1ZDExMVx1ZDExMlx1ZDEx'@;
put 'M1x1ZDExNFx1ZDExNVx1ZDExNlx1ZDExN1x1ZDExOFx1ZDExOVx1ZDExYVx1ZDExYlx1ZDExY1x1ZDExZFx1ZDExZVx1ZDExZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDEyMFx1ZDEyMVx1ZDEyMlx1ZDEyM1x1ZDEyNFx1ZDEyNVx1ZDEyNlx1ZDEyN1x1ZDEyOFx1'@;
put 'ZDEyOVx1ZDEyYVx1ZDEyYlx1ZDEyY1x1ZDEyZFx1ZDEyZVx1ZDEyZlx1ZDEzMlx1ZDEzM1x1ZDEzNVx1ZDEzNlx1ZDEzN1x1ZDEzOVx1ZDEzYlx1ZDEzY1x1ZDEzZFx1ZDEzZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDEzZlx1ZDE0Mlx1ZDE0Nlx1ZDE0N1x1ZDE0'@;
put 'OFx1ZDE0OVx1ZDE0YVx1ZDE0Ylx1ZDE0ZVx1ZDE0Zlx1ZDE1MVx1ZDE1Mlx1ZDE1M1x1ZDE1NVx1ZDE1Nlx1ZDE1N1x1ZDE1OFx1ZDE1OVx1ZDE1YVx1ZDE1Ylx1ZDE1ZVx1ZDE2MFx1ZDE2Mlx1ZDE2M1x1ZDE2NFx1ZDE2NVx1ZDE2Nlx1ZDE2N1x1ZDE2OVx1ZDE2YVx1ZDE2Ylx1ZDE2ZFx1'@;
put 'YjU0MFx1YjU0MVx1YjU0M1x1YjU0NFx1YjU0NVx1YjU0Ylx1YjU0Y1x1YjU0ZFx1YjU1MFx1YjU1NFx1YjU1Y1x1YjU1ZFx1YjU1Zlx1YjU2MFx1YjU2MVx1YjVhMFx1YjVhMVx1YjVhNFx1YjVhOFx1YjVhYVx1YjVhYlx1YjViMFx1YjViMVx1YjViM1x1YjViNFx1YjViNVx1YjViYlx1YjVi'@;
put 'Y1x1YjViZFx1YjVjMFx1YjVjNFx1YjVjY1x1YjVjZFx1YjVjZlx1YjVkMFx1YjVkMVx1YjVkOFx1YjVlY1x1YjYxMFx1YjYxMVx1YjYxNFx1YjYxOFx1YjYyNVx1YjYyY1x1YjYzNFx1YjY0OFx1YjY2NFx1YjY2OFx1YjY5Y1x1YjY5ZFx1YjZhMFx1YjZhNFx1YjZhYlx1YjZhY1x1YjZiMVx1'@;
put 'YjZkNFx1YjZmMFx1YjZmNFx1YjZmOFx1YjcwMFx1YjcwMVx1YjcwNVx1YjcyOFx1YjcyOVx1YjcyY1x1YjcyZlx1YjczMFx1YjczOFx1YjczOVx1YjczYlx1Yjc0NFx1Yjc0OFx1Yjc0Y1x1Yjc1NFx1Yjc1NVx1Yjc2MFx1Yjc2NFx1Yjc2OFx1Yjc3MFx1Yjc3MVx1Yjc3M1x1Yjc3NVx1Yjc3'@;
put 'Y1x1Yjc3ZFx1Yjc4MFx1Yjc4NFx1Yjc4Y1x1Yjc4ZFx1Yjc4Zlx1Yjc5MFx1Yjc5MVx1Yjc5Mlx1Yjc5Nlx1Yjc5N1x1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE4Ml0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTgyXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxODJdW3ZdXT00NjU5Mit2'@;
put 'LFRbNDY1OTIrdl09a1sxODJdW3ZdKTtmb3Ioa1sxODNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQxNmVcdWQxNmZcdWQxNzBcdWQxNzFcdWQxNzJcdWQxNzNcdWQxNzRcdWQxNzVcdWQxNzZcdWQxNzdcdWQxNzhcdWQx'@;
put 'NzlcdWQxN2FcdWQxN2JcdWQxN2RcdWQxN2VcdWQxN2ZcdWQxODBcdWQxODFcdWQxODJcdWQxODNcdWQxODVcdWQxODZcdWQxODdcdWQxODlcdWQxOGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQxOGJcdWQxOGNcdWQxOGRcdWQxOGVcdWQxOGZcdWQxOTBcdWQxOTFc'@;
put 'dWQxOTJcdWQxOTNcdWQxOTRcdWQxOTVcdWQxOTZcdWQxOTdcdWQxOThcdWQxOTlcdWQxOWFcdWQxOWJcdWQxOWNcdWQxOWRcdWQxOWVcdWQxOWZcdWQxYTJcdWQxYTNcdWQxYTVcdWQxYTZcdWQxYTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQxYTlcdWQxYWFcdWQx'@;
put 'YWJcdWQxYWNcdWQxYWRcdWQxYWVcdWQxYWZcdWQxYjJcdWQxYjRcdWQxYjZcdWQxYjdcdWQxYjhcdWQxYjlcdWQxYmJcdWQxYmRcdWQxYmVcdWQxYmZcdWQxYzFcdWQxYzJcdWQxYzNcdWQxYzRcdWQxYzVcdWQxYzZcdWQxYzdcdWQxYzhcdWQxYzlcdWQxY2FcdWQxY2JcdWQxY2NcdWQxY2Rc'@;
put 'dWQxY2VcdWQxY2ZcdWI3OThcdWI3OTlcdWI3OWNcdWI3YTBcdWI3YThcdWI3YTlcdWI3YWJcdWI3YWNcdWI3YWRcdWI3YjRcdWI3YjVcdWI3YjhcdWI3YzdcdWI3YzlcdWI3ZWNcdWI3ZWRcdWI3ZjBcdWI3ZjRcdWI3ZmNcdWI3ZmRcdWI3ZmZcdWI4MDBcdWI4MDFcdWI4MDdcdWI4MDhcdWI4'@;
put 'MDlcdWI4MGNcdWI4MTBcdWI4MThcdWI4MTlcdWI4MWJcdWI4MWRcdWI4MjRcdWI4MjVcdWI4MjhcdWI4MmNcdWI4MzRcdWI4MzVcdWI4MzdcdWI4MzhcdWI4MzlcdWI4NDBcdWI4NDRcdWI4NTFcdWI4NTNcdWI4NWNcdWI4NWRcdWI4NjBcdWI4NjRcdWI4NmNcdWI4NmRcdWI4NmZcdWI4NzFc'@;
put 'dWI4NzhcdWI4N2NcdWI4OGRcdWI4YThcdWI4YjBcdWI4YjRcdWI4YjhcdWI4YzBcdWI4YzFcdWI4YzNcdWI4YzVcdWI4Y2NcdWI4ZDBcdWI4ZDRcdWI4ZGRcdWI4ZGZcdWI4ZTFcdWI4ZThcdWI4ZTlcdWI4ZWNcdWI4ZjBcdWI4ZjhcdWI4ZjlcdWI4ZmJcdWI4ZmRcdWI5MDRcdWI5MThcdWI5'@;
put 'MjBcdWI5M2NcdWI5M2RcdWI5NDBcdWI5NDRcdWI5NGNcdWI5NGZcdWI5NTFcdWI5NThcdWI5NTlcdWI5NWNcdWI5NjBcdWI5NjhcdWI5NjlcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxODNdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE4M11bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTgz'@;
put 'XVt2XV09NDY4NDgrdixUWzQ2ODQ4K3ZdPWtbMTgzXVt2XSk7Zm9yKGtbMTg0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMWQwXHVkMWQxXHVkMWQyXHVkMWQzXHVkMWQ0XHVkMWQ1XHVkMWQ2XHVkMWQ3XHVkMWQ5XHVk'@;
put 'MWRhXHVkMWRiXHVkMWRjXHVkMWRkXHVkMWRlXHVkMWRmXHVkMWUwXHVkMWUxXHVkMWUyXHVkMWUzXHVkMWU0XHVkMWU1XHVkMWU2XHVkMWU3XHVkMWU4XHVkMWU5XHVkMWVhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMWViXHVkMWVjXHVkMWVkXHVkMWVlXHVkMWVm'@;
put 'XHVkMWYwXHVkMWYxXHVkMWYyXHVkMWYzXHVkMWY1XHVkMWY2XHVkMWY3XHVkMWY5XHVkMWZhXHVkMWZiXHVkMWZjXHVkMWZkXHVkMWZlXHVkMWZmXHVkMjAwXHVkMjAxXHVkMjAyXHVkMjAzXHVkMjA0XHVkMjA1XHVkMjA2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVk'@;
put 'MjA4XHVkMjBhXHVkMjBiXHVkMjBjXHVkMjBkXHVkMjBlXHVkMjBmXHVkMjExXHVkMjEyXHVkMjEzXHVkMjE0XHVkMjE1XHVkMjE2XHVkMjE3XHVkMjE4XHVkMjE5XHVkMjFhXHVkMjFiXHVkMjFjXHVkMjFkXHVkMjFlXHVkMjFmXHVkMjIwXHVkMjIxXHVkMjIyXHVkMjIzXHVkMjI0XHVkMjI1'@;
put 'XHVkMjI2XHVkMjI3XHVkMjI4XHVkMjI5XHViOTZiXHViOTZkXHViOTc0XHViOTc1XHViOTc4XHViOTdjXHViOTg0XHViOTg1XHViOTg3XHViOTg5XHViOThhXHViOThkXHViOThlXHViOWFjXHViOWFkXHViOWIwXHViOWI0XHViOWJjXHViOWJkXHViOWJmXHViOWMxXHViOWM4XHViOWM5XHVi'@;
put 'OWNjXHViOWNlXHViOWNmXHViOWQwXHViOWQxXHViOWQyXHViOWQ4XHViOWQ5XHViOWRiXHViOWRkXHViOWRlXHViOWUxXHViOWUzXHViOWU0XHViOWU1XHViOWU4XHViOWVjXHViOWY0XHViOWY1XHViOWY3XHViOWY4XHViOWY5XHViOWZhXHViYTAwXHViYTAxXHViYTA4XHViYTE1XHViYTM4'@;
put 'XHViYTM5XHViYTNjXHViYTQwXHViYTQyXHViYTQ4XHViYTQ5XHViYTRiXHViYTRkXHViYTRlXHViYTUzXHViYTU0XHViYTU1XHViYTU4XHViYTVjXHViYTY0XHViYTY1XHViYTY3XHViYTY4XHViYTY5XHViYTcwXHViYTcxXHViYTc0XHViYTc4XHViYTgzXHViYTg0XHViYTg1XHViYTg3XHVi'@;
put 'YThjXHViYWE4XHViYWE5XHViYWFiXHViYWFjXHViYWIwXHViYWIyXHViYWI4XHViYWI5XHViYWJiXHViYWJkXHViYWM0XHViYWM4XHViYWQ4XHViYWQ5XHViYWZjXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTg0XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxODRdW3ZdLmNoYXJDb2RlQXQo'@;
put 'MCkmJihzZVtrWzE4NF1bdl1dPTQ3MTA0K3YsVFs0NzEwNCt2XT1rWzE4NF1bdl0pO2ZvcihrWzE4NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDIyYVx1ZDIyYlx1ZDIyZVx1ZDIyZlx1ZDIzMVx1ZDIzMlx1ZDIzM1x1'@;
put 'ZDIzNVx1ZDIzNlx1ZDIzN1x1ZDIzOFx1ZDIzOVx1ZDIzYVx1ZDIzYlx1ZDIzZVx1ZDI0MFx1ZDI0Mlx1ZDI0M1x1ZDI0NFx1ZDI0NVx1ZDI0Nlx1ZDI0N1x1ZDI0OVx1ZDI0YVx1ZDI0Ylx1ZDI0Y1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDI0ZFx1ZDI0ZVx1ZDI0'@;
put 'Zlx1ZDI1MFx1ZDI1MVx1ZDI1Mlx1ZDI1M1x1ZDI1NFx1ZDI1NVx1ZDI1Nlx1ZDI1N1x1ZDI1OFx1ZDI1OVx1ZDI1YVx1ZDI1Ylx1ZDI1ZFx1ZDI1ZVx1ZDI1Zlx1ZDI2MFx1ZDI2MVx1ZDI2Mlx1ZDI2M1x1ZDI2NVx1ZDI2Nlx1ZDI2N1x1ZDI2OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZDI2OVx1ZDI2YVx1ZDI2Ylx1ZDI2Y1x1ZDI2ZFx1ZDI2ZVx1ZDI2Zlx1ZDI3MFx1ZDI3MVx1ZDI3Mlx1ZDI3M1x1ZDI3NFx1ZDI3NVx1ZDI3Nlx1ZDI3N1x1ZDI3OFx1ZDI3OVx1ZDI3YVx1ZDI3Ylx1ZDI3Y1x1ZDI3ZFx1ZDI3ZVx1ZDI3Zlx1ZDI4Mlx1ZDI4M1x1ZDI4'@;
put 'NVx1ZDI4Nlx1ZDI4N1x1ZDI4OVx1ZDI4YVx1ZDI4Ylx1ZDI4Y1x1YmIwMFx1YmIwNFx1YmIwZFx1YmIwZlx1YmIxMVx1YmIxOFx1YmIxY1x1YmIyMFx1YmIyOVx1YmIyYlx1YmIzNFx1YmIzNVx1YmIzNlx1YmIzOFx1YmIzYlx1YmIzY1x1YmIzZFx1YmIzZVx1YmI0NFx1YmI0NVx1YmI0N1x1'@;
put 'YmI0OVx1YmI0ZFx1YmI0Zlx1YmI1MFx1YmI1NFx1YmI1OFx1YmI2MVx1YmI2M1x1YmI2Y1x1YmI4OFx1YmI4Y1x1YmI5MFx1YmJhNFx1YmJhOFx1YmJhY1x1YmJiNFx1YmJiN1x1YmJjMFx1YmJjNFx1YmJjOFx1YmJkMFx1YmJkM1x1YmJmOFx1YmJmOVx1YmJmY1x1YmJmZlx1YmMwMFx1YmMw'@;
put 'Mlx1YmMwOFx1YmMwOVx1YmMwYlx1YmMwY1x1YmMwZFx1YmMwZlx1YmMxMVx1YmMxNFx1YmMxNVx1YmMxNlx1YmMxN1x1YmMxOFx1YmMxYlx1YmMxY1x1YmMxZFx1YmMxZVx1YmMxZlx1YmMyNFx1YmMyNVx1YmMyN1x1YmMyOVx1YmMyZFx1YmMzMFx1YmMzMVx1YmMzNFx1YmMzOFx1YmM0MFx1'@;
put 'YmM0MVx1YmM0M1x1YmM0NFx1YmM0NVx1YmM0OVx1YmM0Y1x1YmM0ZFx1YmM1MFx1YmM1ZFx1YmM4NFx1YmM4NVx1YmM4OFx1YmM4Ylx1YmM4Y1x1YmM4ZVx1YmM5NFx1YmM5NVx1YmM5N1x1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE4NV0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTg1XVt2'@;
put 'XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxODVdW3ZdXT00NzM2MCt2LFRbNDczNjArdl09a1sxODVdW3ZdKTtmb3Ioa1sxODZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyOGRcdWQyOGVcdWQyOGZcdWQyOTJcdWQyOTNc'@;
put 'dWQyOTRcdWQyOTZcdWQyOTdcdWQyOThcdWQyOTlcdWQyOWFcdWQyOWJcdWQyOWRcdWQyOWVcdWQyOWZcdWQyYTFcdWQyYTJcdWQyYTNcdWQyYTVcdWQyYTZcdWQyYTdcdWQyYThcdWQyYTlcdWQyYWFcdWQyYWJcdWQyYWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQy'@;
put 'YWVcdWQyYWZcdWQyYjBcdWQyYjJcdWQyYjNcdWQyYjRcdWQyYjVcdWQyYjZcdWQyYjdcdWQyYmFcdWQyYmJcdWQyYmRcdWQyYmVcdWQyYzFcdWQyYzNcdWQyYzRcdWQyYzVcdWQyYzZcdWQyYzdcdWQyY2FcdWQyY2NcdWQyY2RcdWQyY2VcdWQyY2ZcdWQyZDBcdWQyZDFcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyZDJcdWQyZDNcdWQyZDVcdWQyZDZcdWQyZDdcdWQyZDlcdWQyZGFcdWQyZGJcdWQyZGRcdWQyZGVcdWQyZGZcdWQyZTBcdWQyZTFcdWQyZTJcdWQyZTNcdWQyZTZcdWQyZTdcdWQyZThcdWQyZTlcdWQyZWFcdWQyZWJcdWQyZWNcdWQyZWRcdWQy'@;
put 'ZWVcdWQyZWZcdWQyZjJcdWQyZjNcdWQyZjVcdWQyZjZcdWQyZjdcdWQyZjlcdWQyZmFcdWJjOTlcdWJjOWFcdWJjYTBcdWJjYTFcdWJjYTRcdWJjYTdcdWJjYThcdWJjYjBcdWJjYjFcdWJjYjNcdWJjYjRcdWJjYjVcdWJjYmNcdWJjYmRcdWJjYzBcdWJjYzRcdWJjY2RcdWJjY2ZcdWJjZDBc'@;
put 'dWJjZDFcdWJjZDVcdWJjZDhcdWJjZGNcdWJjZjRcdWJjZjVcdWJjZjZcdWJjZjhcdWJjZmNcdWJkMDRcdWJkMDVcdWJkMDdcdWJkMDlcdWJkMTBcdWJkMTRcdWJkMjRcdWJkMmNcdWJkNDBcdWJkNDhcdWJkNDlcdWJkNGNcdWJkNTBcdWJkNThcdWJkNTlcdWJkNjRcdWJkNjhcdWJkODBcdWJk'@;
put 'ODFcdWJkODRcdWJkODdcdWJkODhcdWJkODlcdWJkOGFcdWJkOTBcdWJkOTFcdWJkOTNcdWJkOTVcdWJkOTlcdWJkOWFcdWJkOWNcdWJkYTRcdWJkYjBcdWJkYjhcdWJkZDRcdWJkZDVcdWJkZDhcdWJkZGNcdWJkZTlcdWJkZjBcdWJkZjRcdWJkZjhcdWJlMDBcdWJlMDNcdWJlMDVcdWJlMGNc'@;
put 'dWJlMGRcdWJlMTBcdWJlMTRcdWJlMWNcdWJlMWRcdWJlMWZcdWJlNDRcdWJlNDVcdWJlNDhcdWJlNGNcdWJlNGVcdWJlNTRcdWJlNTVcdWJlNTdcdWJlNTlcdWJlNWFcdWJlNWJcdWJlNjBcdWJlNjFcdWJlNjRcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxODZdLmxlbmd0aDsrK3YpNjU1'@;
put 'MzMhPT1rWzE4Nl1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTg2XVt2XV09NDc2MTYrdixUWzQ3NjE2K3ZdPWtbMTg2XVt2XSk7Zm9yKGtbMTg3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMmZiXHVkMmZjXHVkMmZk'@;
put 'XHVkMmZlXHVkMmZmXHVkMzAyXHVkMzA0XHVkMzA2XHVkMzA3XHVkMzA4XHVkMzA5XHVkMzBhXHVkMzBiXHVkMzBmXHVkMzExXHVkMzEyXHVkMzEzXHVkMzE1XHVkMzE3XHVkMzE4XHVkMzE5XHVkMzFhXHVkMzFiXHVkMzFlXHVkMzIyXHVkMzIzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVkMzI0XHVkMzI2XHVkMzI3XHVkMzJhXHVkMzJiXHVkMzJkXHVkMzJlXHVkMzJmXHVkMzMxXHVkMzMyXHVkMzMzXHVkMzM0XHVkMzM1XHVkMzM2XHVkMzM3XHVkMzNhXHVkMzNlXHVkMzNmXHVkMzQwXHVkMzQxXHVkMzQyXHVkMzQzXHVkMzQ2XHVkMzQ3XHVkMzQ4XHVkMzQ5'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMzRhXHVkMzRiXHVkMzRjXHVkMzRkXHVkMzRlXHVkMzRmXHVkMzUwXHVkMzUxXHVkMzUyXHVkMzUzXHVkMzU0XHVkMzU1XHVkMzU2XHVkMzU3XHVkMzU4XHVkMzU5XHVkMzVhXHVkMzViXHVkMzVjXHVkMzVkXHVkMzVlXHVk'@;
put 'MzVmXHVkMzYwXHVkMzYxXHVkMzYyXHVkMzYzXHVkMzY0XHVkMzY1XHVkMzY2XHVkMzY3XHVkMzY4XHVkMzY5XHViZTY4XHViZTZhXHViZTcwXHViZTcxXHViZTczXHViZTc0XHViZTc1XHViZTdiXHViZTdjXHViZTdkXHViZTgwXHViZTg0XHViZThjXHViZThkXHViZThmXHViZTkwXHViZTkx'@;
put 'XHViZTk4XHViZTk5XHViZWE4XHViZWQwXHViZWQxXHViZWQ0XHViZWQ3XHViZWQ4XHViZWUwXHViZWUzXHViZWU0XHViZWU1XHViZWVjXHViZjAxXHViZjA4XHViZjA5XHViZjE4XHViZjE5XHViZjFiXHViZjFjXHViZjFkXHViZjQwXHViZjQxXHViZjQ0XHViZjQ4XHViZjUwXHViZjUxXHVi'@;
put 'ZjU1XHViZjk0XHViZmIwXHViZmM1XHViZmNjXHViZmNkXHViZmQwXHViZmQ0XHViZmRjXHViZmRmXHViZmUxXHVjMDNjXHVjMDUxXHVjMDU4XHVjMDVjXHVjMDYwXHVjMDY4XHVjMDY5XHVjMDkwXHVjMDkxXHVjMDk0XHVjMDk4XHVjMGEwXHVjMGExXHVjMGEzXHVjMGE1XHVjMGFjXHVjMGFk'@;
put 'XHVjMGFmXHVjMGIwXHVjMGIzXHVjMGI0XHVjMGI1XHVjMGI2XHVjMGJjXHVjMGJkXHVjMGJmXHVjMGMwXHVjMGMxXHVjMGM1XHVjMGM4XHVjMGM5XHVjMGNjXHVjMGQwXHVjMGQ4XHVjMGQ5XHVjMGRiXHVjMGRjXHVjMGRkXHVjMGU0XHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTg3XS5s'@;
put 'ZW5ndGg7Kyt2KTY1NTMzIT09a1sxODddW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE4N11bdl1dPTQ3ODcyK3YsVFs0Nzg3Mit2XT1rWzE4N11bdl0pO2ZvcihrWzE4OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDM2'@;
put 'YVx1ZDM2Ylx1ZDM2Y1x1ZDM2ZFx1ZDM2ZVx1ZDM2Zlx1ZDM3MFx1ZDM3MVx1ZDM3Mlx1ZDM3M1x1ZDM3NFx1ZDM3NVx1ZDM3Nlx1ZDM3N1x1ZDM3OFx1ZDM3OVx1ZDM3YVx1ZDM3Ylx1ZDM3ZVx1ZDM3Zlx1ZDM4MVx1ZDM4Mlx1ZDM4M1x1ZDM4NVx1ZDM4Nlx1ZDM4N1x1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDM4OFx1ZDM4OVx1ZDM4YVx1ZDM4Ylx1ZDM4ZVx1ZDM5Mlx1ZDM5M1x1ZDM5NFx1ZDM5NVx1ZDM5Nlx1ZDM5N1x1ZDM5YVx1ZDM5Ylx1ZDM5ZFx1ZDM5ZVx1ZDM5Zlx1ZDNhMVx1ZDNhMlx1ZDNhM1x1ZDNhNFx1ZDNhNVx1ZDNhNlx1ZDNhN1x1ZDNh'@;
put 'YVx1ZDNhY1x1ZDNhZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDNhZlx1ZDNiMFx1ZDNiMVx1ZDNiMlx1ZDNiM1x1ZDNiNVx1ZDNiNlx1ZDNiN1x1ZDNiOVx1ZDNiYVx1ZDNiYlx1ZDNiZFx1ZDNiZVx1ZDNiZlx1ZDNjMFx1ZDNjMVx1ZDNjMlx1ZDNjM1x1ZDNjNlx1'@;
put 'ZDNjN1x1ZDNjYVx1ZDNjYlx1ZDNjY1x1ZDNjZFx1ZDNjZVx1ZDNjZlx1ZDNkMVx1ZDNkMlx1ZDNkM1x1ZDNkNFx1ZDNkNVx1ZDNkNlx1YzBlNVx1YzBlOFx1YzBlY1x1YzBmNFx1YzBmNVx1YzBmN1x1YzBmOVx1YzEwMFx1YzEwNFx1YzEwOFx1YzExMFx1YzExNVx1YzExY1x1YzExZFx1YzEx'@;
put 'ZVx1YzExZlx1YzEyMFx1YzEyM1x1YzEyNFx1YzEyNlx1YzEyN1x1YzEyY1x1YzEyZFx1YzEyZlx1YzEzMFx1YzEzMVx1YzEzNlx1YzEzOFx1YzEzOVx1YzEzY1x1YzE0MFx1YzE0OFx1YzE0OVx1YzE0Ylx1YzE0Y1x1YzE0ZFx1YzE1NFx1YzE1NVx1YzE1OFx1YzE1Y1x1YzE2NFx1YzE2NVx1'@;
put 'YzE2N1x1YzE2OFx1YzE2OVx1YzE3MFx1YzE3NFx1YzE3OFx1YzE4NVx1YzE4Y1x1YzE4ZFx1YzE4ZVx1YzE5MFx1YzE5NFx1YzE5Nlx1YzE5Y1x1YzE5ZFx1YzE5Zlx1YzFhMVx1YzFhNVx1YzFhOFx1YzFhOVx1YzFhY1x1YzFiMFx1YzFiZFx1YzFjNFx1YzFjOFx1YzFjY1x1YzFkNFx1YzFk'@;
put 'N1x1YzFkOFx1YzFlMFx1YzFlNFx1YzFlOFx1YzFmMFx1YzFmMVx1YzFmM1x1YzFmY1x1YzFmZFx1YzIwMFx1YzIwNFx1YzIwY1x1YzIwZFx1YzIwZlx1YzIxMVx1YzIxOFx1YzIxOVx1YzIxY1x1YzIxZlx1YzIyMFx1YzIyOFx1YzIyOVx1YzIyYlx1YzIyZFx1ZmZmZCIuc3BsaXQoIiIpLHY9'@;
put 'MDt2IT1rWzE4OF0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTg4XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxODhdW3ZdXT00ODEyOCt2LFRbNDgxMjgrdl09a1sxODhdW3ZdKTtmb3Ioa1sxODldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWQzZDdcdWQzZDlcdWQzZGFcdWQzZGJcdWQzZGNcdWQzZGRcdWQzZGVcdWQzZGZcdWQzZTBcdWQzZTJcdWQzZTRcdWQzZTVcdWQzZTZcdWQzZTdcdWQzZThcdWQzZTlcdWQzZWFcdWQzZWJcdWQzZWVcdWQzZWZcdWQzZjFcdWQzZjJcdWQzZjNcdWQzZjVcdWQzZjZcdWQzZjdc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQzZjhcdWQzZjlcdWQzZmFcdWQzZmJcdWQzZmVcdWQ0MDBcdWQ0MDJcdWQ0MDNcdWQ0MDRcdWQ0MDVcdWQ0MDZcdWQ0MDdcdWQ0MDlcdWQ0MGFcdWQ0MGJcdWQ0MGNcdWQ0MGRcdWQ0MGVcdWQ0MGZcdWQ0MTBcdWQ0MTFcdWQ0'@;
put 'MTJcdWQ0MTNcdWQ0MTRcdWQ0MTVcdWQ0MTZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0MTdcdWQ0MThcdWQ0MTlcdWQ0MWFcdWQ0MWJcdWQ0MWNcdWQ0MWVcdWQ0MWZcdWQ0MjBcdWQ0MjFcdWQ0MjJcdWQ0MjNcdWQ0MjRcdWQ0MjVcdWQ0MjZcdWQ0MjdcdWQ0Mjhc'@;
put 'dWQ0MjlcdWQ0MmFcdWQ0MmJcdWQ0MmNcdWQ0MmRcdWQ0MmVcdWQ0MmZcdWQ0MzBcdWQ0MzFcdWQ0MzJcdWQ0MzNcdWQ0MzRcdWQ0MzVcdWQ0MzZcdWQ0MzdcdWMyMmZcdWMyMzFcdWMyMzJcdWMyMzRcdWMyNDhcdWMyNTBcdWMyNTFcdWMyNTRcdWMyNThcdWMyNjBcdWMyNjVcdWMyNmNcdWMy'@;
put 'NmRcdWMyNzBcdWMyNzRcdWMyN2NcdWMyN2RcdWMyN2ZcdWMyODFcdWMyODhcdWMyODlcdWMyOTBcdWMyOThcdWMyOWJcdWMyOWRcdWMyYTRcdWMyYTVcdWMyYThcdWMyYWNcdWMyYWRcdWMyYjRcdWMyYjVcdWMyYjdcdWMyYjlcdWMyZGNcdWMyZGRcdWMyZTBcdWMyZTNcdWMyZTRcdWMyZWJc'@;
put 'dWMyZWNcdWMyZWRcdWMyZWZcdWMyZjFcdWMyZjZcdWMyZjhcdWMyZjlcdWMyZmJcdWMyZmNcdWMzMDBcdWMzMDhcdWMzMDlcdWMzMGNcdWMzMGRcdWMzMTNcdWMzMTRcdWMzMTVcdWMzMThcdWMzMWNcdWMzMjRcdWMzMjVcdWMzMjhcdWMzMjlcdWMzNDVcdWMzNjhcdWMzNjlcdWMzNmNcdWMz'@;
put 'NzBcdWMzNzJcdWMzNzhcdWMzNzlcdWMzN2NcdWMzN2RcdWMzODRcdWMzODhcdWMzOGNcdWMzYzBcdWMzZDhcdWMzZDlcdWMzZGNcdWMzZGZcdWMzZTBcdWMzZTJcdWMzZThcdWMzZTlcdWMzZWRcdWMzZjRcdWMzZjVcdWMzZjhcdWM0MDhcdWM0MTBcdWM0MjRcdWM0MmNcdWM0MzBcdWZmZmQi'@;
put 'LnNwbGl0KCIiKSx2PTA7diE9a1sxODldLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE4OV1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTg5XVt2XV09NDgzODQrdixUWzQ4Mzg0K3ZdPWtbMTg5XVt2XSk7Zm9yKGtbMTkwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNDM4XHVkNDM5XHVkNDNhXHVkNDNiXHVkNDNjXHVkNDNkXHVkNDNlXHVkNDNmXHVkNDQxXHVkNDQyXHVkNDQzXHVkNDQ1XHVkNDQ2XHVkNDQ3XHVkNDQ4XHVkNDQ5XHVkNDRhXHVkNDRiXHVkNDRjXHVkNDRkXHVkNDRlXHVkNDRmXHVkNDUwXHVkNDUx'@;
put 'XHVkNDUyXHVkNDUzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNDU0XHVkNDU1XHVkNDU2XHVkNDU3XHVkNDU4XHVkNDU5XHVkNDVhXHVkNDViXHVkNDVkXHVkNDVlXHVkNDVmXHVkNDYxXHVkNDYyXHVkNDYzXHVkNDY1XHVkNDY2XHVkNDY3XHVkNDY4XHVkNDY5XHVk'@;
put 'NDZhXHVkNDZiXHVkNDZjXHVkNDZlXHVkNDcwXHVkNDcxXHVkNDcyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNDczXHVkNDc0XHVkNDc1XHVkNDc2XHVkNDc3XHVkNDdhXHVkNDdiXHVkNDdkXHVkNDdlXHVkNDgxXHVkNDgzXHVkNDg0XHVkNDg1XHVkNDg2XHVkNDg3'@;
put 'XHVkNDhhXHVkNDhjXHVkNDhlXHVkNDhmXHVkNDkwXHVkNDkxXHVkNDkyXHVkNDkzXHVkNDk1XHVkNDk2XHVkNDk3XHVkNDk4XHVkNDk5XHVkNDlhXHVkNDliXHVkNDljXHVkNDlkXHVjNDM0XHVjNDNjXHVjNDNkXHVjNDQ4XHVjNDY0XHVjNDY1XHVjNDY4XHVjNDZjXHVjNDc0XHVjNDc1XHVj'@;
put 'NDc5XHVjNDgwXHVjNDk0XHVjNDljXHVjNGI4XHVjNGJjXHVjNGU5XHVjNGYwXHVjNGYxXHVjNGY0XHVjNGY4XHVjNGZhXHVjNGZmXHVjNTAwXHVjNTAxXHVjNTBjXHVjNTEwXHVjNTE0XHVjNTFjXHVjNTI4XHVjNTI5XHVjNTJjXHVjNTMwXHVjNTM4XHVjNTM5XHVjNTNiXHVjNTNkXHVjNTQ0'@;
put 'XHVjNTQ1XHVjNTQ4XHVjNTQ5XHVjNTRhXHVjNTRjXHVjNTRkXHVjNTRlXHVjNTUzXHVjNTU0XHVjNTU1XHVjNTU3XHVjNTU4XHVjNTU5XHVjNTVkXHVjNTVlXHVjNTYwXHVjNTYxXHVjNTY0XHVjNTY4XHVjNTcwXHVjNTcxXHVjNTczXHVjNTc0XHVjNTc1XHVjNTdjXHVjNTdkXHVjNTgwXHVj'@;
put 'NTg0XHVjNTg3XHVjNThjXHVjNThkXHVjNThmXHVjNTkxXHVjNTk1XHVjNTk3XHVjNTk4XHVjNTljXHVjNWEwXHVjNWE5XHVjNWI0XHVjNWI1XHVjNWI4XHVjNWI5XHVjNWJiXHVjNWJjXHVjNWJkXHVjNWJlXHVjNWM0XHVjNWM1XHVjNWM2XHVjNWM3XHVjNWM4XHVjNWM5XHVjNWNhXHVjNWNj'@;
put 'XHVjNWNlXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTkwXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxOTBdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE5MF1bdl1dPTQ4NjQwK3YsVFs0ODY0MCt2XT1rWzE5MF1bdl0pO2ZvcihrWzE5MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQ5ZVx1ZDQ5Zlx1ZDRhMFx1ZDRhMVx1ZDRhMlx1ZDRhM1x1ZDRhNFx1ZDRhNVx1ZDRhNlx1ZDRhN1x1ZDRhOFx1ZDRhYVx1ZDRhYlx1ZDRhY1x1ZDRhZFx1ZDRhZVx1ZDRhZlx1ZDRiMFx1ZDRiMVx1ZDRiMlx1ZDRiM1x1ZDRi'@;
put 'NFx1ZDRiNVx1ZDRiNlx1ZDRiN1x1ZDRiOFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDRiOVx1ZDRiYVx1ZDRiYlx1ZDRiY1x1ZDRiZFx1ZDRiZVx1ZDRiZlx1ZDRjMFx1ZDRjMVx1ZDRjMlx1ZDRjM1x1ZDRjNFx1ZDRjNVx1ZDRjNlx1ZDRjN1x1ZDRjOFx1ZDRjOVx1'@;
put 'ZDRjYVx1ZDRjYlx1ZDRjZFx1ZDRjZVx1ZDRjZlx1ZDRkMVx1ZDRkMlx1ZDRkM1x1ZDRkNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDRkNlx1ZDRkN1x1ZDRkOFx1ZDRkOVx1ZDRkYVx1ZDRkYlx1ZDRkZFx1ZDRkZVx1ZDRlMFx1ZDRlMVx1ZDRlMlx1ZDRlM1x1ZDRl'@;
put 'NFx1ZDRlNVx1ZDRlNlx1ZDRlN1x1ZDRlOVx1ZDRlYVx1ZDRlYlx1ZDRlZFx1ZDRlZVx1ZDRlZlx1ZDRmMVx1ZDRmMlx1ZDRmM1x1ZDRmNFx1ZDRmNVx1ZDRmNlx1ZDRmN1x1ZDRmOVx1ZDRmYVx1ZDRmY1x1YzVkMFx1YzVkMVx1YzVkNFx1YzVkOFx1YzVlMFx1YzVlMVx1YzVlM1x1YzVlNVx1'@;
put 'YzVlY1x1YzVlZFx1YzVlZVx1YzVmMFx1YzVmNFx1YzVmNlx1YzVmN1x1YzVmY1x1YzVmZFx1YzVmZVx1YzVmZlx1YzYwMFx1YzYwMVx1YzYwNVx1YzYwNlx1YzYwN1x1YzYwOFx1YzYwY1x1YzYxMFx1YzYxOFx1YzYxOVx1YzYxYlx1YzYxY1x1YzYyNFx1YzYyNVx1YzYyOFx1YzYyY1x1YzYy'@;
put 'ZFx1YzYyZVx1YzYzMFx1YzYzM1x1YzYzNFx1YzYzNVx1YzYzN1x1YzYzOVx1YzYzYlx1YzY0MFx1YzY0MVx1YzY0NFx1YzY0OFx1YzY1MFx1YzY1MVx1YzY1M1x1YzY1NFx1YzY1NVx1YzY1Y1x1YzY1ZFx1YzY2MFx1YzY2Y1x1YzY2Zlx1YzY3MVx1YzY3OFx1YzY3OVx1YzY3Y1x1YzY4MFx1'@;
put 'YzY4OFx1YzY4OVx1YzY4Ylx1YzY4ZFx1YzY5NFx1YzY5NVx1YzY5OFx1YzY5Y1x1YzZhNFx1YzZhNVx1YzZhN1x1YzZhOVx1YzZiMFx1YzZiMVx1YzZiNFx1YzZiOFx1YzZiOVx1YzZiYVx1YzZjMFx1YzZjMVx1YzZjM1x1YzZjNVx1YzZjY1x1YzZjZFx1YzZkMFx1YzZkNFx1YzZkY1x1YzZk'@;
put 'ZFx1YzZlMFx1YzZlMVx1YzZlOFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE5MV0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTkxXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxOTFdW3ZdXT00ODg5Nit2LFRbNDg4OTYrdl09a1sxOTFdW3ZdKTtmb3Ioa1sxOTJdPSJcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0ZmVcdWQ0ZmZcdWQ1MDBcdWQ1MDFcdWQ1MDJcdWQ1MDNcdWQ1MDVcdWQ1MDZcdWQ1MDdcdWQ1MDlcdWQ1MGFcdWQ1MGJcdWQ1MGRcdWQ1MGVcdWQ1MGZcdWQ1MTBcdWQ1MTFcdWQ1MTJcdWQ1MTNcdWQ1'@;
put 'MTZcdWQ1MThcdWQ1MTlcdWQ1MWFcdWQ1MWJcdWQ1MWNcdWQ1MWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ1MWVcdWQ1MWZcdWQ1MjBcdWQ1MjFcdWQ1MjJcdWQ1MjNcdWQ1MjRcdWQ1MjVcdWQ1MjZcdWQ1MjdcdWQ1MjhcdWQ1MjlcdWQ1MmFcdWQ1MmJcdWQ1MmNc'@;
put 'dWQ1MmRcdWQ1MmVcdWQ1MmZcdWQ1MzBcdWQ1MzFcdWQ1MzJcdWQ1MzNcdWQ1MzRcdWQ1MzVcdWQ1MzZcdWQ1MzdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ1MzhcdWQ1MzlcdWQ1M2FcdWQ1M2JcdWQ1M2VcdWQ1M2ZcdWQ1NDFcdWQ1NDJcdWQ1NDNcdWQ1NDVcdWQ1'@;
put 'NDZcdWQ1NDdcdWQ1NDhcdWQ1NDlcdWQ1NGFcdWQ1NGJcdWQ1NGVcdWQ1NTBcdWQ1NTJcdWQ1NTNcdWQ1NTRcdWQ1NTVcdWQ1NTZcdWQ1NTdcdWQ1NWFcdWQ1NWJcdWQ1NWRcdWQ1NWVcdWQ1NWZcdWQ1NjFcdWQ1NjJcdWQ1NjNcdWM2ZTlcdWM2ZWNcdWM2ZjBcdWM2ZjhcdWM2ZjlcdWM2ZmRc'@;
put 'dWM3MDRcdWM3MDVcdWM3MDhcdWM3MGNcdWM3MTRcdWM3MTVcdWM3MTdcdWM3MTlcdWM3MjBcdWM3MjFcdWM3MjRcdWM3MjhcdWM3MzBcdWM3MzFcdWM3MzNcdWM3MzVcdWM3MzdcdWM3M2NcdWM3M2RcdWM3NDBcdWM3NDRcdWM3NGFcdWM3NGNcdWM3NGRcdWM3NGZcdWM3NTFcdWM3NTJcdWM3'@;
put 'NTNcdWM3NTRcdWM3NTVcdWM3NTZcdWM3NTdcdWM3NThcdWM3NWNcdWM3NjBcdWM3NjhcdWM3NmJcdWM3NzRcdWM3NzVcdWM3NzhcdWM3N2NcdWM3N2RcdWM3N2VcdWM3ODNcdWM3ODRcdWM3ODVcdWM3ODdcdWM3ODhcdWM3ODlcdWM3OGFcdWM3OGVcdWM3OTBcdWM3OTFcdWM3OTRcdWM3OTZc'@;
put 'dWM3OTdcdWM3OThcdWM3OWFcdWM3YTBcdWM3YTFcdWM3YTNcdWM3YTRcdWM3YTVcdWM3YTZcdWM3YWNcdWM3YWRcdWM3YjBcdWM3YjRcdWM3YmNcdWM3YmRcdWM3YmZcdWM3YzBcdWM3YzFcdWM3YzhcdWM3YzlcdWM3Y2NcdWM3Y2VcdWM3ZDBcdWM3ZDhcdWM3ZGRcdWM3ZTRcdWM3ZThcdWM3'@;
put 'ZWNcdWM4MDBcdWM4MDFcdWM4MDRcdWM4MDhcdWM4MGFcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxOTJdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE5Ml1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTkyXVt2XV09NDkxNTIrdixUWzQ5MTUyK3ZdPWtbMTkyXVt2XSk7Zm9yKGtbMTkzXT0i'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNTY0XHVkNTY2XHVkNTY3XHVkNTZhXHVkNTZjXHVkNTZlXHVkNTZmXHVkNTcwXHVkNTcxXHVkNTcyXHVkNTczXHVkNTc2XHVkNTc3XHVkNTc5XHVkNTdhXHVkNTdiXHVkNTdkXHVk'@;
put 'NTdlXHVkNTdmXHVkNTgwXHVkNTgxXHVkNTgyXHVkNTgzXHVkNTg2XHVkNThhXHVkNThiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNThjXHVkNThkXHVkNThlXHVkNThmXHVkNTkxXHVkNTkyXHVkNTkzXHVkNTk0XHVkNTk1XHVkNTk2XHVkNTk3XHVkNTk4XHVkNTk5'@;
put 'XHVkNTlhXHVkNTliXHVkNTljXHVkNTlkXHVkNTllXHVkNTlmXHVkNWEwXHVkNWExXHVkNWEyXHVkNWEzXHVkNWE0XHVkNWE2XHVkNWE3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNWE4XHVkNWE5XHVkNWFhXHVkNWFiXHVkNWFjXHVkNWFkXHVkNWFlXHVkNWFmXHVk'@;
put 'NWIwXHVkNWIxXHVkNWIyXHVkNWIzXHVkNWI0XHVkNWI1XHVkNWI2XHVkNWI3XHVkNWI4XHVkNWI5XHVkNWJhXHVkNWJiXHVkNWJjXHVkNWJkXHVkNWJlXHVkNWJmXHVkNWMwXHVkNWMxXHVkNWMyXHVkNWMzXHVkNWM0XHVkNWM1XHVkNWM2XHVkNWM3XHVjODEwXHVjODExXHVjODEzXHVjODE1'@;
put 'XHVjODE2XHVjODFjXHVjODFkXHVjODIwXHVjODI0XHVjODJjXHVjODJkXHVjODJmXHVjODMxXHVjODM4XHVjODNjXHVjODQwXHVjODQ4XHVjODQ5XHVjODRjXHVjODRkXHVjODU0XHVjODcwXHVjODcxXHVjODc0XHVjODc4XHVjODdhXHVjODgwXHVjODgxXHVjODgzXHVjODg1XHVjODg2XHVj'@;
put 'ODg3XHVjODhiXHVjODhjXHVjODhkXHVjODk0XHVjODlkXHVjODlmXHVjOGExXHVjOGE4XHVjOGJjXHVjOGJkXHVjOGM0XHVjOGM4XHVjOGNjXHVjOGQ0XHVjOGQ1XHVjOGQ3XHVjOGQ5XHVjOGUwXHVjOGUxXHVjOGU0XHVjOGY1XHVjOGZjXHVjOGZkXHVjOTAwXHVjOTA0XHVjOTA1XHVjOTA2'@;
put 'XHVjOTBjXHVjOTBkXHVjOTBmXHVjOTExXHVjOTE4XHVjOTJjXHVjOTM0XHVjOTUwXHVjOTUxXHVjOTU0XHVjOTU4XHVjOTYwXHVjOTYxXHVjOTYzXHVjOTZjXHVjOTcwXHVjOTc0XHVjOTdjXHVjOTg4XHVjOTg5XHVjOThjXHVjOTkwXHVjOTk4XHVjOTk5XHVjOTliXHVjOTlkXHVjOWMwXHVj'@;
put 'OWMxXHVjOWM0XHVjOWM3XHVjOWM4XHVjOWNhXHVjOWQwXHVjOWQxXHVjOWQzXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTkzXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxOTNdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE5M11bdl1dPTQ5NDA4K3YsVFs0OTQwOCt2XT1rWzE5M11bdl0p'@;
put 'O2ZvcihrWzE5NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDVjYVx1ZDVjYlx1ZDVjZFx1ZDVjZVx1ZDVjZlx1ZDVkMVx1ZDVkM1x1ZDVkNFx1ZDVkNVx1ZDVkNlx1ZDVkN1x1ZDVkYVx1ZDVkY1x1ZDVkZVx1ZDVkZlx1'@;
put 'ZDVlMFx1ZDVlMVx1ZDVlMlx1ZDVlM1x1ZDVlNlx1ZDVlN1x1ZDVlOVx1ZDVlYVx1ZDVlYlx1ZDVlZFx1ZDVlZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDVlZlx1ZDVmMFx1ZDVmMVx1ZDVmMlx1ZDVmM1x1ZDVmNlx1ZDVmOFx1ZDVmYVx1ZDVmYlx1ZDVmY1x1ZDVm'@;
put 'ZFx1ZDVmZVx1ZDVmZlx1ZDYwMlx1ZDYwM1x1ZDYwNVx1ZDYwNlx1ZDYwN1x1ZDYwOVx1ZDYwYVx1ZDYwYlx1ZDYwY1x1ZDYwZFx1ZDYwZVx1ZDYwZlx1ZDYxMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDYxNlx1ZDYxN1x1ZDYxOFx1ZDYxOVx1ZDYxYVx1ZDYxYlx1'@;
put 'ZDYxZFx1ZDYxZVx1ZDYxZlx1ZDYyMVx1ZDYyMlx1ZDYyM1x1ZDYyNVx1ZDYyNlx1ZDYyN1x1ZDYyOFx1ZDYyOVx1ZDYyYVx1ZDYyYlx1ZDYyY1x1ZDYyZVx1ZDYyZlx1ZDYzMFx1ZDYzMVx1ZDYzMlx1ZDYzM1x1ZDYzNFx1ZDYzNVx1ZDYzNlx1ZDYzN1x1ZDYzYVx1ZDYzYlx1YzlkNVx1Yzlk'@;
put 'Nlx1YzlkOVx1YzlkYVx1YzlkY1x1YzlkZFx1YzllMFx1YzllMlx1YzllNFx1YzllN1x1YzllY1x1YzllZFx1YzllZlx1YzlmMFx1YzlmMVx1YzlmOFx1YzlmOVx1YzlmY1x1Y2EwMFx1Y2EwOFx1Y2EwOVx1Y2EwYlx1Y2EwY1x1Y2EwZFx1Y2ExNFx1Y2ExOFx1Y2EyOVx1Y2E0Y1x1Y2E0ZFx1'@;
put 'Y2E1MFx1Y2E1NFx1Y2E1Y1x1Y2E1ZFx1Y2E1Zlx1Y2E2MFx1Y2E2MVx1Y2E2OFx1Y2E3ZFx1Y2E4NFx1Y2E5OFx1Y2FiY1x1Y2FiZFx1Y2FjMFx1Y2FjNFx1Y2FjY1x1Y2FjZFx1Y2FjZlx1Y2FkMVx1Y2FkM1x1Y2FkOFx1Y2FkOVx1Y2FlMFx1Y2FlY1x1Y2FmNFx1Y2IwOFx1Y2IxMFx1Y2Ix'@;
put 'NFx1Y2IxOFx1Y2IyMFx1Y2IyMVx1Y2I0MVx1Y2I0OFx1Y2I0OVx1Y2I0Y1x1Y2I1MFx1Y2I1OFx1Y2I1OVx1Y2I1ZFx1Y2I2NFx1Y2I3OFx1Y2I3OVx1Y2I5Y1x1Y2JiOFx1Y2JkNFx1Y2JlNFx1Y2JlN1x1Y2JlOVx1Y2MwY1x1Y2MwZFx1Y2MxMFx1Y2MxNFx1Y2MxY1x1Y2MxZFx1Y2MyMVx1'@;
put 'Y2MyMlx1Y2MyN1x1Y2MyOFx1Y2MyOVx1Y2MyY1x1Y2MyZVx1Y2MzMFx1Y2MzOFx1Y2MzOVx1Y2MzYlx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE5NF0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTk0XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxOTRdW3ZdXT00OTY2NCt2LFRbNDk2NjQr'@;
put 'dl09a1sxOTRdW3ZdKTtmb3Ioa1sxOTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ2M2RcdWQ2M2VcdWQ2M2ZcdWQ2NDFcdWQ2NDJcdWQ2NDNcdWQ2NDRcdWQ2NDZcdWQ2NDdcdWQ2NGFcdWQ2NGNcdWQ2NGVcdWQ2NGZc'@;
put 'dWQ2NTBcdWQ2NTJcdWQ2NTNcdWQ2NTZcdWQ2NTdcdWQ2NTlcdWQ2NWFcdWQ2NWJcdWQ2NWRcdWQ2NWVcdWQ2NWZcdWQ2NjBcdWQ2NjFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ2NjJcdWQ2NjNcdWQ2NjRcdWQ2NjVcdWQ2NjZcdWQ2NjhcdWQ2NmFcdWQ2NmJcdWQ2'@;
put 'NmNcdWQ2NmRcdWQ2NmVcdWQ2NmZcdWQ2NzJcdWQ2NzNcdWQ2NzVcdWQ2NzZcdWQ2NzdcdWQ2NzhcdWQ2NzlcdWQ2N2FcdWQ2N2JcdWQ2N2NcdWQ2N2RcdWQ2N2VcdWQ2N2ZcdWQ2ODBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ2ODFcdWQ2ODJcdWQ2ODRcdWQ2ODZc'@;
put 'dWQ2ODdcdWQ2ODhcdWQ2ODlcdWQ2OGFcdWQ2OGJcdWQ2OGVcdWQ2OGZcdWQ2OTFcdWQ2OTJcdWQ2OTNcdWQ2OTVcdWQ2OTZcdWQ2OTdcdWQ2OThcdWQ2OTlcdWQ2OWFcdWQ2OWJcdWQ2OWNcdWQ2OWVcdWQ2YTBcdWQ2YTJcdWQ2YTNcdWQ2YTRcdWQ2YTVcdWQ2YTZcdWQ2YTdcdWQ2YTlcdWQ2'@;
put 'YWFcdWNjM2NcdWNjM2RcdWNjM2VcdWNjNDRcdWNjNDVcdWNjNDhcdWNjNGNcdWNjNTRcdWNjNTVcdWNjNTdcdWNjNThcdWNjNTlcdWNjNjBcdWNjNjRcdWNjNjZcdWNjNjhcdWNjNzBcdWNjNzVcdWNjOThcdWNjOTlcdWNjOWNcdWNjYTBcdWNjYThcdWNjYTlcdWNjYWJcdWNjYWNcdWNjYWRc'@;
put 'dWNjYjRcdWNjYjVcdWNjYjhcdWNjYmNcdWNjYzRcdWNjYzVcdWNjYzdcdWNjYzlcdWNjZDBcdWNjZDRcdWNjZTRcdWNjZWNcdWNjZjBcdWNkMDFcdWNkMDhcdWNkMDlcdWNkMGNcdWNkMTBcdWNkMThcdWNkMTlcdWNkMWJcdWNkMWRcdWNkMjRcdWNkMjhcdWNkMmNcdWNkMzlcdWNkNWNcdWNk'@;
put 'NjBcdWNkNjRcdWNkNmNcdWNkNmRcdWNkNmZcdWNkNzFcdWNkNzhcdWNkODhcdWNkOTRcdWNkOTVcdWNkOThcdWNkOWNcdWNkYTRcdWNkYTVcdWNkYTdcdWNkYTlcdWNkYjBcdWNkYzRcdWNkY2NcdWNkZDBcdWNkZThcdWNkZWNcdWNkZjBcdWNkZjhcdWNkZjlcdWNkZmJcdWNkZmRcdWNlMDRc'@;
put 'dWNlMDhcdWNlMGNcdWNlMTRcdWNlMTlcdWNlMjBcdWNlMjFcdWNlMjRcdWNlMjhcdWNlMzBcdWNlMzFcdWNlMzNcdWNlMzVcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxOTVdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE5NV1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTk1XVt2XV09NDk5'@;
put 'MjArdixUWzQ5OTIwK3ZdPWtbMTk1XVt2XSk7Zm9yKGtbMTk2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNmFiXHVkNmFkXHVkNmFlXHVkNmFmXHVkNmIxXHVkNmIyXHVkNmIzXHVkNmI0XHVkNmI1XHVkNmI2XHVkNmI3'@;
put 'XHVkNmI4XHVkNmJhXHVkNmJjXHVkNmJkXHVkNmJlXHVkNmJmXHVkNmMwXHVkNmMxXHVkNmMyXHVkNmMzXHVkNmM2XHVkNmM3XHVkNmM5XHVkNmNhXHVkNmNiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNmNkXHVkNmNlXHVkNmNmXHVkNmQwXHVkNmQyXHVkNmQzXHVk'@;
put 'NmQ1XHVkNmQ2XHVkNmQ4XHVkNmRhXHVkNmRiXHVkNmRjXHVkNmRkXHVkNmRlXHVkNmRmXHVkNmUxXHVkNmUyXHVkNmUzXHVkNmU1XHVkNmU2XHVkNmU3XHVkNmU5XHVkNmVhXHVkNmViXHVkNmVjXHVkNmVkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNmVlXHVkNmVm'@;
put 'XHVkNmYxXHVkNmYyXHVkNmYzXHVkNmY0XHVkNmY2XHVkNmY3XHVkNmY4XHVkNmY5XHVkNmZhXHVkNmZiXHVkNmZlXHVkNmZmXHVkNzAxXHVkNzAyXHVkNzAzXHVkNzA1XHVkNzA2XHVkNzA3XHVkNzA4XHVkNzA5XHVkNzBhXHVkNzBiXHVkNzBjXHVkNzBkXHVkNzBlXHVkNzBmXHVkNzEwXHVk'@;
put 'NzEyXHVkNzEzXHVkNzE0XHVjZTU4XHVjZTU5XHVjZTVjXHVjZTVmXHVjZTYwXHVjZTYxXHVjZTY4XHVjZTY5XHVjZTZiXHVjZTZkXHVjZTc0XHVjZTc1XHVjZTc4XHVjZTdjXHVjZTg0XHVjZTg1XHVjZTg3XHVjZTg5XHVjZTkwXHVjZTkxXHVjZTk0XHVjZTk4XHVjZWEwXHVjZWExXHVjZWEz'@;
put 'XHVjZWE0XHVjZWE1XHVjZWFjXHVjZWFkXHVjZWMxXHVjZWU0XHVjZWU1XHVjZWU4XHVjZWViXHVjZWVjXHVjZWY0XHVjZWY1XHVjZWY3XHVjZWY4XHVjZWY5XHVjZjAwXHVjZjAxXHVjZjA0XHVjZjA4XHVjZjEwXHVjZjExXHVjZjEzXHVjZjE1XHVjZjFjXHVjZjIwXHVjZjI0XHVjZjJjXHVj'@;
put 'ZjJkXHVjZjJmXHVjZjMwXHVjZjMxXHVjZjM4XHVjZjU0XHVjZjU1XHVjZjU4XHVjZjVjXHVjZjY0XHVjZjY1XHVjZjY3XHVjZjY5XHVjZjcwXHVjZjcxXHVjZjc0XHVjZjc4XHVjZjgwXHVjZjg1XHVjZjhjXHVjZmExXHVjZmE4XHVjZmIwXHVjZmM0XHVjZmUwXHVjZmUxXHVjZmU0XHVjZmU4'@;
put 'XHVjZmYwXHVjZmYxXHVjZmYzXHVjZmY1XHVjZmZjXHVkMDAwXHVkMDA0XHVkMDExXHVkMDE4XHVkMDJkXHVkMDM0XHVkMDM1XHVkMDM4XHVkMDNjXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTk2XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxOTZdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtr'@;
put 'WzE5Nl1bdl1dPTUwMTc2K3YsVFs1MDE3Nit2XT1rWzE5Nl1bdl0pO2ZvcihrWzE5N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDcxNVx1ZDcxNlx1ZDcxN1x1ZDcxYVx1ZDcxYlx1ZDcxZFx1ZDcxZVx1ZDcxZlx1ZDcy'@;
put 'MVx1ZDcyMlx1ZDcyM1x1ZDcyNFx1ZDcyNVx1ZDcyNlx1ZDcyN1x1ZDcyYVx1ZDcyY1x1ZDcyZVx1ZDcyZlx1ZDczMFx1ZDczMVx1ZDczMlx1ZDczM1x1ZDczNlx1ZDczN1x1ZDczOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDczYVx1ZDczYlx1ZDczZFx1ZDczZVx1'@;
put 'ZDczZlx1ZDc0MFx1ZDc0MVx1ZDc0Mlx1ZDc0M1x1ZDc0NVx1ZDc0Nlx1ZDc0OFx1ZDc0YVx1ZDc0Ylx1ZDc0Y1x1ZDc0ZFx1ZDc0ZVx1ZDc0Zlx1ZDc1Mlx1ZDc1M1x1ZDc1NVx1ZDc1YVx1ZDc1Ylx1ZDc1Y1x1ZDc1ZFx1ZDc1ZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZDc1Zlx1ZDc2Mlx1ZDc2NFx1ZDc2Nlx1ZDc2N1x1ZDc2OFx1ZDc2YVx1ZDc2Ylx1ZDc2ZFx1ZDc2ZVx1ZDc2Zlx1ZDc3MVx1ZDc3Mlx1ZDc3M1x1ZDc3NVx1ZDc3Nlx1ZDc3N1x1ZDc3OFx1ZDc3OVx1ZDc3YVx1ZDc3Ylx1ZDc3ZVx1ZDc3Zlx1ZDc4MFx1ZDc4Mlx1ZDc4M1x1ZDc4NFx1'@;
put 'ZDc4NVx1ZDc4Nlx1ZDc4N1x1ZDc4YVx1ZDc4Ylx1ZDA0NFx1ZDA0NVx1ZDA0N1x1ZDA0OVx1ZDA1MFx1ZDA1NFx1ZDA1OFx1ZDA2MFx1ZDA2Y1x1ZDA2ZFx1ZDA3MFx1ZDA3NFx1ZDA3Y1x1ZDA3ZFx1ZDA4MVx1ZDBhNFx1ZDBhNVx1ZDBhOFx1ZDBhY1x1ZDBiNFx1ZDBiNVx1ZDBiN1x1ZDBi'@;
put 'OVx1ZDBjMFx1ZDBjMVx1ZDBjNFx1ZDBjOFx1ZDBjOVx1ZDBkMFx1ZDBkMVx1ZDBkM1x1ZDBkNFx1ZDBkNVx1ZDBkY1x1ZDBkZFx1ZDBlMFx1ZDBlNFx1ZDBlY1x1ZDBlZFx1ZDBlZlx1ZDBmMFx1ZDBmMVx1ZDBmOFx1ZDEwZFx1ZDEzMFx1ZDEzMVx1ZDEzNFx1ZDEzOFx1ZDEzYVx1ZDE0MFx1'@;
put 'ZDE0MVx1ZDE0M1x1ZDE0NFx1ZDE0NVx1ZDE0Y1x1ZDE0ZFx1ZDE1MFx1ZDE1NFx1ZDE1Y1x1ZDE1ZFx1ZDE1Zlx1ZDE2MVx1ZDE2OFx1ZDE2Y1x1ZDE3Y1x1ZDE4NFx1ZDE4OFx1ZDFhMFx1ZDFhMVx1ZDFhNFx1ZDFhOFx1ZDFiMFx1ZDFiMVx1ZDFiM1x1ZDFiNVx1ZDFiYVx1ZDFiY1x1ZDFj'@;
put 'MFx1ZDFkOFx1ZDFmNFx1ZDFmOFx1ZDIwN1x1ZDIwOVx1ZDIxMFx1ZDIyY1x1ZDIyZFx1ZDIzMFx1ZDIzNFx1ZDIzY1x1ZDIzZFx1ZDIzZlx1ZDI0MVx1ZDI0OFx1ZDI1Y1x1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE5N10ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTk3XVt2XS5jaGFyQ29k'@;
put 'ZUF0KDApJiYoc2Vba1sxOTddW3ZdXT01MDQzMit2LFRbNTA0MzIrdl09a1sxOTddW3ZdKTtmb3Ioa1sxOThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ3OGRcdWQ3OGVcdWQ3OGZcdWQ3OTFcdWQ3OTJcdWQ3OTNcdWQ3'@;
put 'OTRcdWQ3OTVcdWQ3OTZcdWQ3OTdcdWQ3OWFcdWQ3OWNcdWQ3OWVcdWQ3OWZcdWQ3YTBcdWQ3YTFcdWQ3YTJcdWQ3YTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyNjRcdWQyODBcdWQyODFcdWQyODRcdWQyODhcdWQyOTBcdWQyOTFcdWQyOTVcdWQyOWNcdWQyYTBcdWQyYTRcdWQyYWNcdWQyYjFcdWQyYjhcdWQyYjlcdWQyYmNcdWQyYmZcdWQyYzBcdWQyYzJcdWQyYzhcdWQy'@;
put 'YzlcdWQyY2JcdWQyZDRcdWQyZDhcdWQyZGNcdWQyZTRcdWQyZTVcdWQyZjBcdWQyZjFcdWQyZjRcdWQyZjhcdWQzMDBcdWQzMDFcdWQzMDNcdWQzMDVcdWQzMGNcdWQzMGRcdWQzMGVcdWQzMTBcdWQzMTRcdWQzMTZcdWQzMWNcdWQzMWRcdWQzMWZcdWQzMjBcdWQzMjFcdWQzMjVcdWQzMjhc'@;
put 'dWQzMjlcdWQzMmNcdWQzMzBcdWQzMzhcdWQzMzlcdWQzM2JcdWQzM2NcdWQzM2RcdWQzNDRcdWQzNDVcdWQzN2NcdWQzN2RcdWQzODBcdWQzODRcdWQzOGNcdWQzOGRcdWQzOGZcdWQzOTBcdWQzOTFcdWQzOThcdWQzOTlcdWQzOWNcdWQzYTBcdWQzYThcdWQzYTlcdWQzYWJcdWQzYWRcdWQz'@;
put 'YjRcdWQzYjhcdWQzYmNcdWQzYzRcdWQzYzVcdWQzYzhcdWQzYzlcdWQzZDBcdWQzZDhcdWQzZTFcdWQzZTNcdWQzZWNcdWQzZWRcdWQzZjBcdWQzZjRcdWQzZmNcdWQzZmRcdWQzZmZcdWQ0MDFcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxOThdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE5'@;
put 'OF1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTk4XVt2XV09NTA2ODgrdixUWzUwNjg4K3ZdPWtbMTk4XVt2XSk7Zm9yKGtbMTk5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNDA4XHVkNDFkXHVkNDQwXHVkNDQ0XHVkNDVjXHVkNDYwXHVkNDY0XHVkNDZkXHVkNDZmXHVkNDc4XHVkNDc5XHVkNDdjXHVkNDdmXHVkNDgwXHVkNDgyXHVkNDg4XHVkNDg5XHVkNDhiXHVk'@;
put 'NDhkXHVkNDk0XHVkNGE5XHVkNGNjXHVkNGQwXHVkNGQ0XHVkNGRjXHVkNGRmXHVkNGU4XHVkNGVjXHVkNGYwXHVkNGY4XHVkNGZiXHVkNGZkXHVkNTA0XHVkNTA4XHVkNTBjXHVkNTE0XHVkNTE1XHVkNTE3XHVkNTNjXHVkNTNkXHVkNTQwXHVkNTQ0XHVkNTRjXHVkNTRkXHVkNTRmXHVkNTUx'@;
put 'XHVkNTU4XHVkNTU5XHVkNTVjXHVkNTYwXHVkNTY1XHVkNTY4XHVkNTY5XHVkNTZiXHVkNTZkXHVkNTc0XHVkNTc1XHVkNTc4XHVkNTdjXHVkNTg0XHVkNTg1XHVkNTg3XHVkNTg4XHVkNTg5XHVkNTkwXHVkNWE1XHVkNWM4XHVkNWM5XHVkNWNjXHVkNWQwXHVkNWQyXHVkNWQ4XHVkNWQ5XHVk'@;
put 'NWRiXHVkNWRkXHVkNWU0XHVkNWU1XHVkNWU4XHVkNWVjXHVkNWY0XHVkNWY1XHVkNWY3XHVkNWY5XHVkNjAwXHVkNjAxXHVkNjA0XHVkNjA4XHVkNjEwXHVkNjExXHVkNjEzXHVkNjE0XHVkNjE1XHVkNjFjXHVkNjIwXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTk5XS5sZW5ndGg7Kyt2'@;
put 'KTY1NTMzIT09a1sxOTldW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE5OV1bdl1dPTUwOTQ0K3YsVFs1MDk0NCt2XT1rWzE5OV1bdl0pO2ZvcihrWzIwMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDYyNFx1ZDYyZFx1ZDYzOFx1ZDYzOVx1ZDYzY1x1ZDY0MFx1ZDY0NVx1ZDY0OFx1ZDY0OVx1ZDY0Ylx1ZDY0ZFx1ZDY1MVx1ZDY1NFx1ZDY1NVx1ZDY1OFx1ZDY1Y1x1'@;
put 'ZDY2N1x1ZDY2OVx1ZDY3MFx1ZDY3MVx1ZDY3NFx1ZDY4M1x1ZDY4NVx1ZDY4Y1x1ZDY4ZFx1ZDY5MFx1ZDY5NFx1ZDY5ZFx1ZDY5Zlx1ZDZhMVx1ZDZhOFx1ZDZhY1x1ZDZiMFx1ZDZiOVx1ZDZiYlx1ZDZjNFx1ZDZjNVx1ZDZjOFx1ZDZjY1x1ZDZkMVx1ZDZkNFx1ZDZkN1x1ZDZkOVx1ZDZl'@;
put 'MFx1ZDZlNFx1ZDZlOFx1ZDZmMFx1ZDZmNVx1ZDZmY1x1ZDZmZFx1ZDcwMFx1ZDcwNFx1ZDcxMVx1ZDcxOFx1ZDcxOVx1ZDcxY1x1ZDcyMFx1ZDcyOFx1ZDcyOVx1ZDcyYlx1ZDcyZFx1ZDczNFx1ZDczNVx1ZDczOFx1ZDczY1x1ZDc0NFx1ZDc0N1x1ZDc0OVx1ZDc1MFx1ZDc1MVx1ZDc1NFx1'@;
put 'ZDc1Nlx1ZDc1N1x1ZDc1OFx1ZDc1OVx1ZDc2MFx1ZDc2MVx1ZDc2M1x1ZDc2NVx1ZDc2OVx1ZDc2Y1x1ZDc3MFx1ZDc3NFx1ZDc3Y1x1ZDc3ZFx1ZDc4MVx1ZDc4OFx1ZDc4OVx1ZDc4Y1x1ZDc5MFx1ZDc5OFx1ZDc5OVx1ZDc5Ylx1ZDc5ZFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIw'@;
put 'MF0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjAwXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMDBdW3ZdXT01MTIwMCt2LFRbNTEyMDArdl09a1syMDBdW3ZdKTtmb3Ioa1syMDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmM2RcdTRmNzNcdTUwNDdcdTUwZjlcdTUyYTBcdTUzZWZcdTU0NzVcdTU0ZTVcdTU2MDlcdTVhYzFcdTViYjZcdTY2ODdcdTY3YjZcdTY3Yjdc'@;
put 'dTY3ZWZcdTZiNGNcdTczYzJcdTc1YzJcdTdhM2NcdTgyZGJcdTgzMDRcdTg4NTdcdTg4ODhcdThhMzZcdThjYzhcdThkY2ZcdThlZmJcdThmZTZcdTk5ZDVcdTUyM2JcdTUzNzRcdTU0MDRcdTYwNmFcdTYxNjRcdTZiYmNcdTczY2ZcdTgxMWFcdTg5YmFcdTg5ZDJcdTk1YTNcdTRmODNcdTUy'@;
put 'MGFcdTU4YmVcdTU5NzhcdTU5ZTZcdTVlNzJcdTVlNzlcdTYxYzdcdTYzYzBcdTY3NDZcdTY3ZWNcdTY4N2ZcdTZmOTdcdTc2NGVcdTc3MGJcdTc4ZjVcdTdhMDhcdTdhZmZcdTdjMjFcdTgwOWRcdTgyNmVcdTgyNzFcdThhZWJcdTk1OTNcdTRlNmJcdTU1OWRcdTY2ZjdcdTZlMzRcdTc4YTNc'@;
put 'dTdhZWRcdTg0NWJcdTg5MTBcdTg3NGVcdTk3YThcdTUyZDhcdTU3NGVcdTU4MmFcdTVkNGNcdTYxMWZcdTYxYmVcdTYyMjFcdTY1NjJcdTY3ZDFcdTZhNDRcdTZlMWJcdTc1MThcdTc1YjNcdTc2ZTNcdTc3YjBcdTdkM2FcdTkwYWZcdTk0NTFcdTk0NTJcdTlmOTVcdWZmZmQiLnNwbGl0KCIi'@;
put 'KSx2PTA7diE9a1syMDJdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIwMl1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjAyXVt2XV09NTE3MTIrdixUWzUxNzEyK3ZdPWtbMjAyXVt2XSk7Zm9yKGtbMjAzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MzIzXHU1Y2FjXHU3NTMyXHU4MGRiXHU5MjQwXHU5NTk4XHU1MjViXHU1ODA4XHU1OWRjXHU1Y2ExXHU1ZDE3XHU1ZWI3'@;
put 'XHU1ZjNhXHU1ZjRhXHU2MTc3XHU2YzVmXHU3NTdhXHU3NTg2XHU3Y2UwXHU3ZDczXHU3ZGIxXHU3ZjhjXHU4MTU0XHU4MjIxXHU4NTkxXHU4OTQxXHU4YjFiXHU5MmZjXHU5NjRkXHU5YzQ3XHU0ZWNiXHU0ZWY3XHU1MDBiXHU1MWYxXHU1ODRmXHU2MTM3XHU2MTNlXHU2MTY4XHU2NTM5XHU2'@;
put 'OWVhXHU2ZjExXHU3NWE1XHU3Njg2XHU3NmQ2XHU3Yjg3XHU4MmE1XHU4NGNiXHVmOTAwXHU5M2E3XHU5NThiXHU1NTgwXHU1YmEyXHU1NzUxXHVmOTAxXHU3Y2IzXHU3ZmI5XHU5MWI1XHU1MDI4XHU1M2JiXHU1YzQ1XHU1ZGU4XHU2MmQyXHU2MzZlXHU2NGRhXHU2NGU3XHU2ZTIwXHU3MGFj'@;
put 'XHU3OTViXHU4ZGRkXHU4ZTFlXHVmOTAyXHU5MDdkXHU5MjQ1XHU5MmY4XHU0ZTdlXHU0ZWY2XHU1MDY1XHU1ZGZlXHU1ZWZhXHU2MTA2XHU2OTU3XHU4MTcxXHU4NjU0XHU4ZTQ3XHU5Mzc1XHU5YTJiXHU0ZTVlXHU1MDkxXHU2NzcwXHU2ODQwXHU1MTA5XHU1MjhkXHU1MjkyXHU2YWEyXHVm'@;
put 'ZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjAzXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMDNdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIwM11bdl1dPTUxOTY4K3YsVFs1MTk2OCt2XT1rWzIwM11bdl0pO2ZvcihrWzIwNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzdiY1x1OTIxMFx1OWVkNFx1NTJhYlx1NjAyZlx1OGZmMlx1NTA0OFx1NjFhOVx1NjNlZFx1NjRj'@;
put 'YVx1NjgzY1x1NmE4NFx1NmZjMFx1ODE4OFx1ODlhMVx1OTY5NFx1NTgwNVx1NzI3ZFx1NzJhY1x1NzUwNFx1N2Q3OVx1N2U2ZFx1ODBhOVx1ODk4Ylx1OGI3NFx1OTA2M1x1OWQ1MVx1NjI4OVx1NmM3YVx1NmY1NFx1N2Q1MFx1N2YzYVx1OGEyM1x1NTE3Y1x1NjE0YVx1N2I5ZFx1OGIxOVx1'@;
put 'OTI1N1x1OTM4Y1x1NGVhY1x1NGZkM1x1NTAxZVx1NTBiZVx1NTEwNlx1NTJjMVx1NTJjZFx1NTM3Zlx1NTc3MFx1NTg4M1x1NWU5YVx1NWY5MVx1NjE3Nlx1NjFhY1x1NjRjZVx1NjU2Y1x1NjY2Zlx1NjZiYlx1NjZmNFx1Njg5N1x1NmQ4N1x1NzA4NVx1NzBmMVx1NzQ5Zlx1NzRhNVx1NzRj'@;
put 'YVx1NzVkOVx1Nzg2Y1x1NzhlY1x1N2FkZlx1N2FmNlx1N2Q0NVx1N2Q5M1x1ODAxNVx1ODAzZlx1ODExYlx1ODM5Nlx1OGI2Nlx1OGYxNVx1OTAxNVx1OTNlMVx1OTgwM1x1OTgzOFx1OWE1YVx1OWJlOFx1NGZjMlx1NTU1M1x1NTgzYVx1NTk1MVx1NWI2M1x1NWM0Nlx1NjBiOFx1NjIxMlx1'@;
put 'Njg0Mlx1NjhiMFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIwNF0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjA0XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMDRdW3ZdXT01MjIyNCt2LFRbNTIyMjQrdl09a1syMDRdW3ZdKTtmb3Ioa1syMDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY4ZThcdTZlYWFcdTc1NGNcdTc2NzhcdTc4Y2VcdTdhM2RcdTdjZmJcdTdl'@;
put 'NmJcdTdlN2NcdThhMDhcdThhYTFcdThjM2ZcdTk2OGVcdTlkYzRcdTUzZTRcdTUzZTlcdTU0NGFcdTU0NzFcdTU2ZmFcdTU5ZDFcdTViNjRcdTVjM2JcdTVlYWJcdTYyZjdcdTY1MzdcdTY1NDVcdTY1NzJcdTY2YTBcdTY3YWZcdTY5YzFcdTZjYmRcdTc1ZmNcdTc2OTBcdTc3N2VcdTdhM2Zc'@;
put 'dTdmOTRcdTgwMDNcdTgwYTFcdTgxOGZcdTgyZTZcdTgyZmRcdTgzZjBcdTg1YzFcdTg4MzFcdTg4YjRcdThhYTVcdWY5MDNcdThmOWNcdTkzMmVcdTk2YzdcdTk4NjdcdTlhZDhcdTlmMTNcdTU0ZWRcdTY1OWJcdTY2ZjJcdTY4OGZcdTdhNDBcdThjMzdcdTlkNjBcdTU2ZjBcdTU3NjRcdTVk'@;
put 'MTFcdTY2MDZcdTY4YjFcdTY4Y2RcdTZlZmVcdTc0MjhcdTg4OWVcdTliZTRcdTZjNjhcdWY5MDRcdTlhYThcdTRmOWJcdTUxNmNcdTUxNzFcdTUyOWZcdTViNTRcdTVkZTVcdTYwNTBcdTYwNmRcdTYyZjFcdTYzYTdcdTY1M2JcdTczZDlcdTdhN2FcdTg2YTNcdThjYTJcdTk3OGZcdTRlMzJc'@;
put 'dTViZTFcdTYyMDhcdTY3OWNcdTc0ZGNcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMDVdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIwNV1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjA1XVt2XV09NTI0ODArdixUWzUyNDgwK3ZdPWtbMjA1XVt2XSk7Zm9yKGtbMjA2XT0iXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OWQxXHU4M2QzXHU4YTg3XHU4YWIyXHU4ZGU4XHU5'@;
put 'MDRlXHU5MzRiXHU5ODQ2XHU1ZWQzXHU2OWU4XHU4NWZmXHU5MGVkXHVmOTA1XHU1MWEwXHU1Yjk4XHU1YmVjXHU2MTYzXHU2OGZhXHU2YjNlXHU3MDRjXHU3NDJmXHU3NGQ4XHU3YmExXHU3ZjUwXHU4M2M1XHU4OWMwXHU4Y2FiXHU5NWRjXHU5OTI4XHU1MjJlXHU2MDVkXHU2MmVjXHU5MDAy'@;
put 'XHU0ZjhhXHU1MTQ5XHU1MzIxXHU1OGQ5XHU1ZWUzXHU2NmUwXHU2ZDM4XHU3MDlhXHU3MmMyXHU3M2Q2XHU3YjUwXHU4MGYxXHU5NDViXHU1MzY2XHU2MzliXHU3ZjZiXHU0ZTU2XHU1MDgwXHU1ODRhXHU1OGRlXHU2MDJhXHU2MTI3XHU2MmQwXHU2OWQwXHU5YjQxXHU1YjhmXHU3ZDE4XHU4'@;
put 'MGIxXHU4ZjVmXHU0ZWE0XHU1MGQxXHU1NGFjXHU1NWFjXHU1YjBjXHU1ZGEwXHU1ZGU3XHU2NTJhXHU2NTRlXHU2ODIxXHU2YTRiXHU3MmUxXHU3NjhlXHU3N2VmXHU3ZDVlXHU3ZmY5XHU4MWEwXHU4NTRlXHU4NmRmXHU4ZjAzXHU4ZjRlXHU5MGNhXHU5OTAzXHU5YTU1XHU5YmFiXHU0ZTE4'@;
put 'XHU0ZTQ1XHU0ZTVkXHU0ZWM3XHU0ZmYxXHU1MTc3XHU1MmZlXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjA2XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMDZdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIwNl1bdl1dPTUyNzM2K3YsVFs1MjczNit2XT1rWzIwNl1bdl0pO2ZvcihrWzIw'@;
put 'N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTM0MFx1NTNlM1x1NTNlNVx1'@;
put 'NTQ4ZVx1NTYxNFx1NTc3NVx1NTdhMlx1NWJjN1x1NWQ4N1x1NWVkMFx1NjFmY1x1NjJkOFx1NjU1MVx1NjdiOFx1NjdlOVx1NjljYlx1NmI1MFx1NmJjNlx1NmJlY1x1NmM0Mlx1NmU5ZFx1NzA3OFx1NzJkN1x1NzM5Nlx1NzQwM1x1NzdiZlx1NzdlOVx1N2E3Nlx1N2Q3Zlx1ODAwOVx1ODFm'@;
put 'Y1x1ODIwNVx1ODIwYVx1ODJkZlx1ODg2Mlx1OGIzM1x1OGNmY1x1OGVjMFx1OTAxMVx1OTBiMVx1OTI2NFx1OTJiNlx1OTlkMlx1OWE0NVx1OWNlOVx1OWRkN1x1OWY5Y1x1NTcwYlx1NWM0MFx1ODNjYVx1OTdhMFx1OTdhYlx1OWViNFx1NTQxYlx1N2E5OFx1N2ZhNFx1ODhkOVx1OGVjZFx1'@;
put 'OTBlMVx1NTgwMFx1NWM0OFx1NjM5OFx1N2E5Zlx1NWJhZVx1NWYxM1x1N2E3OVx1N2FhZVx1ODI4ZVx1OGVhY1x1NTAyNlx1NTIzOFx1NTJmOFx1NTM3N1x1NTcwOFx1NjJmM1x1NjM3Mlx1NmIwYVx1NmRjM1x1NzczN1x1NTNhNVx1NzM1N1x1ODU2OFx1OGU3Nlx1OTVkNVx1NjczYVx1NmFj'@;
put 'M1x1NmY3MFx1OGE2ZFx1OGVjY1x1OTk0Ylx1ZjkwNlx1NjY3N1x1NmI3OFx1OGNiNFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIwN10ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjA3XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMDddW3ZdXT01Mjk5Mit2LFRbNTI5OTIrdl09a1syMDdd'@;
put 'W3ZdKTtmb3Ioa1syMDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTliM2Nc'@;
put 'dWY5MDdcdTUzZWJcdTU3MmRcdTU5NGVcdTYzYzZcdTY5ZmJcdTczZWFcdTc4NDVcdTdhYmFcdTdhYzVcdTdjZmVcdTg0NzVcdTg5OGZcdThkNzNcdTkwMzVcdTk1YThcdTUyZmJcdTU3NDdcdTc1NDdcdTdiNjBcdTgzY2NcdTkyMWVcdWY5MDhcdTZhNThcdTUxNGJcdTUyNGJcdTUyODdcdTYy'@;
put 'MWZcdTY4ZDhcdTY5NzVcdTk2OTlcdTUwYzVcdTUyYTRcdTUyZTRcdTYxYzNcdTY1YTRcdTY4MzlcdTY5ZmZcdTc0N2VcdTdiNGJcdTgyYjlcdTgzZWJcdTg5YjJcdThiMzlcdThmZDFcdTk5NDlcdWY5MDlcdTRlY2FcdTU5OTdcdTY0ZDJcdTY2MTFcdTZhOGVcdTc0MzRcdTc5ODFcdTc5YmRc'@;
put 'dTgyYTlcdTg4N2VcdTg4N2ZcdTg5NWZcdWY5MGFcdTkzMjZcdTRmMGJcdTUzY2FcdTYwMjVcdTYyNzFcdTZjNzJcdTdkMWFcdTdkNjZcdTRlOThcdTUxNjJcdTc3ZGNcdTgwYWZcdTRmMDFcdTRmMGVcdTUxNzZcdTUxODBcdTU1ZGNcdTU2NjhcdTU3M2JcdTU3ZmFcdTU3ZmNcdTU5MTRcdTU5'@;
put 'NDdcdTU5OTNcdTViYzRcdTVjOTBcdTVkMGVcdTVkZjFcdTVlN2VcdTVmY2NcdTYyODBcdTY1ZDdcdTY1ZTNcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMDhdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIwOF1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjA4XVt2XV09NTMyNDgrdixUWzUz'@;
put 'MjQ4K3ZdPWtbMjA4XVt2XSk7Zm9yKGtbMjA5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHU2NzFlXHU2NzFmXHU2NzVlXHU2OGNiXHU2OGM0XHU2YTVmXHU2YjNhXHU2YzIzXHU2YzdkXHU2YzgyXHU2ZGM3XHU3Mzk4XHU3NDI2XHU3NDJhXHU3NDgyXHU3NGEzXHU3NTc4XHU3NTdmXHU3ODgxXHU3OGVmXHU3OTQxXHU3OTQ3XHU3OTQ4XHU3OTdhXHU3Yjk1XHU3ZDAwXHU3'@;
put 'ZGJhXHU3Zjg4XHU4MDA2XHU4MDJkXHU4MDhjXHU4YTE4XHU4YjRmXHU4YzQ4XHU4ZDc3XHU5MzIxXHU5MzI0XHU5OGUyXHU5OTUxXHU5YTBlXHU5YTBmXHU5YTY1XHU5ZTkyXHU3ZGNhXHU0Zjc2XHU1NDA5XHU2MmVlXHU2ODU0XHU5MWQxXHU1NWFiXHU1MTNhXHVmOTBiXHVmOTBjXHU1YTFj'@;
put 'XHU2MWU2XHVmOTBkXHU2MmNmXHU2MmZmXHVmOTBlXHVmOTBmXHVmOTEwXHVmOTExXHVmOTEyXHVmOTEzXHU5MGEzXHVmOTE0XHVmOTE1XHVmOTE2XHVmOTE3XHVmOTE4XHU4YWZlXHVmOTE5XHVmOTFhXHVmOTFiXHVmOTFjXHU2Njk2XHVmOTFkXHU3MTU2XHVmOTFlXHVmOTFmXHU5NmUzXHVm'@;
put 'OTIwXHU2MzRmXHU2MzdhXHU1MzU3XHVmOTIxXHU2NzhmXHU2OTYwXHU2ZTczXHVmOTIyXHU3NTM3XHVmOTIzXHVmOTI0XHVmOTI1XHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjA5XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMDldW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIwOV1bdl1d'@;
put 'PTUzNTA0K3YsVFs1MzUwNCt2XT1rWzIwOV1bdl0pO2ZvcihrWzIxMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2QwZFx1ZjkyNlx1ZjkyN1x1ODg3Mlx1NTZjYVx1NWExOFx1ZjkyOFx1ZjkyOVx1ZjkyYVx1ZjkyYlx1ZjkyY1x1NGU0M1x1ZjkyZFx1NTE2N1x1NTk0OFx1NjdmMFx1ODAxMFx1ZjkyZVx1NTk3M1x1NWU3NFx1NjQ5YVx1NzljYVx1NWZmNVx1NjA2Y1x1'@;
put 'NjJjOFx1NjM3Ylx1NWJlN1x1NWJkN1x1NTJhYVx1ZjkyZlx1NTk3NFx1NWYyOVx1NjAxMlx1ZjkzMFx1ZjkzMVx1ZjkzMlx1NzQ1OVx1ZjkzM1x1ZjkzNFx1ZjkzNVx1ZjkzNlx1ZjkzN1x1ZjkzOFx1OTlkMVx1ZjkzOVx1ZjkzYVx1ZjkzYlx1ZjkzY1x1ZjkzZFx1ZjkzZVx1ZjkzZlx1Zjk0'@;
put 'MFx1Zjk0MVx1Zjk0Mlx1Zjk0M1x1NmZjM1x1Zjk0NFx1Zjk0NVx1ODFiZlx1OGZiMlx1NjBmMVx1Zjk0Nlx1Zjk0N1x1ODE2Nlx1Zjk0OFx1Zjk0OVx1NWMzZlx1Zjk0YVx1Zjk0Ylx1Zjk0Y1x1Zjk0ZFx1Zjk0ZVx1Zjk0Zlx1Zjk1MFx1Zjk1MVx1NWFlOVx1OGEyNVx1Njc3Ylx1N2QxMFx1'@;
put 'Zjk1Mlx1Zjk1M1x1Zjk1NFx1Zjk1NVx1Zjk1Nlx1Zjk1N1x1ODBmZFx1Zjk1OFx1Zjk1OVx1NWMzY1x1NmNlNVx1NTMzZlx1NmViYVx1NTkxYVx1ODMzNlx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIxMF0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjEwXVt2XS5jaGFyQ29kZUF0KDApJiYo'@;
put 'c2Vba1syMTBdW3ZdXT01Mzc2MCt2LFRbNTM3NjArdl09a1syMTBdW3ZdKTtmb3Ioa1syMTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlMzlcdTRlYjZcdTRmNDZcdTU1YWVcdTU3MThcdTU4YzdcdTVmNTZcdTY1YjdcdTY1ZTZcdTZhODBcdTZiYjVcdTZlNGRcdTc3ZWRcdTdhZWZcdTdjMWVcdTdkZGVcdTg2Y2JcdTg4OTJcdTkxMzJcdTkzNWJcdTY0YmJcdTZmYmVc'@;
put 'dTczN2FcdTc1YjhcdTkwNTRcdTU1NTZcdTU3NGRcdTYxYmFcdTY0ZDRcdTY2YzdcdTZkZTFcdTZlNWJcdTZmNmRcdTZmYjlcdTc1ZjBcdTgwNDNcdTgxYmRcdTg1NDFcdTg5ODNcdThhYzdcdThiNWFcdTkzMWZcdTZjOTNcdTc1NTNcdTdiNTRcdThlMGZcdTkwNWRcdTU1MTBcdTU4MDJcdTU4'@;
put 'NThcdTVlNjJcdTYyMDdcdTY0OWVcdTY4ZTBcdTc1NzZcdTdjZDZcdTg3YjNcdTllZThcdTRlZTNcdTU3ODhcdTU3NmVcdTU5MjdcdTVjMGRcdTVjYjFcdTVlMzZcdTVmODVcdTYyMzRcdTY0ZTFcdTczYjNcdTgxZmFcdTg4OGJcdThjYjhcdTk2OGFcdTllZGJcdTViODVcdTVmYjdcdTYwYjNc'@;
put 'dTUwMTJcdTUyMDBcdTUyMzBcdTU3MTZcdTU4MzVcdTU4NTdcdTVjMGVcdTVjNjBcdTVjZjZcdTVkOGJcdTVlYTZcdTVmOTJcdTYwYmNcdTYzMTFcdTYzODlcdTY0MTdcdTY4NDNcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMTFdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIxMV1bdl0uY2hh'@;
put 'ckNvZGVBdCgwKSYmKHNlW2tbMjExXVt2XV09NTQwMTYrdixUWzU0MDE2K3ZdPWtbMjExXVt2XSk7Zm9yKGtbMjEyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2OGY5XHU2YWMyXHU2ZGQ4XHU2ZTIxXHU2ZWQ0XHU2ZmU0XHU3MWZlXHU3NmRjXHU3Nzc5XHU3OWIxXHU3YTNiXHU4NDA0XHU4OWE5XHU4Y2VkXHU4ZGYzXHU4ZTQ4XHU5MDAzXHU5MDE0XHU5MDUzXHU5MGZk'@;
put 'XHU5MzRkXHU5Njc2XHU5N2RjXHU2YmQyXHU3MDA2XHU3MjU4XHU3MmEyXHU3MzY4XHU3NzYzXHU3OWJmXHU3YmU0XHU3ZTliXHU4YjgwXHU1OGE5XHU2MGM3XHU2NTY2XHU2NWZkXHU2NmJlXHU2YzhjXHU3MTFlXHU3MWM5XHU4YzVhXHU5ODEzXHU0ZTZkXHU3YTgxXHU0ZWRkXHU1MWFjXHU1'@;
put 'MWNkXHU1MmQ1XHU1NDBjXHU2MWE3XHU2NzcxXHU2ODUwXHU2OGRmXHU2ZDFlXHU2ZjdjXHU3NWJjXHU3N2IzXHU3YWU1XHU4MGY0XHU4NDYzXHU5Mjg1XHU1MTVjXHU2NTk3XHU2NzVjXHU2NzkzXHU3NWQ4XHU3YWM3XHU4MzczXHVmOTVhXHU4YzQ2XHU5MDE3XHU5ODJkXHU1YzZmXHU4MWMw'@;
put 'XHU4MjlhXHU5MDQxXHU5MDZmXHU5MjBkXHU1Zjk3XHU1ZDlkXHU2YTU5XHU3MWM4XHU3NjdiXHU3YjQ5XHU4NWU0XHU4YjA0XHU5MTI3XHU5YTMwXHU1NTg3XHU2MWY2XHVmOTViXHU3NjY5XHU3Zjg1XHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjEyXS5sZW5ndGg7Kyt2KTY1NTMzIT09'@;
put 'a1syMTJdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIxMl1bdl1dPTU0MjcyK3YsVFs1NDI3Mit2XT1rWzIxMl1bdl0pO2ZvcihrWzIxM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODYzZlx1ODdiYVx1ODhmOFx1OTA4Zlx1Zjk1Y1x1NmQxYlx1NzBkOVx1NzNkZVx1N2Q2MVx1ODQzZFx1Zjk1ZFx1OTE2YVx1OTlmMVx1Zjk1ZVx1NGU4Mlx1NTM3NVx1NmIwNFx1NmIx'@;
put 'Mlx1NzAzZVx1NzIxYlx1ODYyZFx1OWUxZVx1NTI0Y1x1OGZhM1x1NWQ1MFx1NjRlNVx1NjUyY1x1NmIxNlx1NmZlYlx1N2M0M1x1N2U5Y1x1ODVjZFx1ODk2NFx1ODliZFx1NjJjOVx1ODFkOFx1ODgxZlx1NWVjYVx1NjcxN1x1NmQ2YVx1NzJmY1x1NzQwNVx1NzQ2Zlx1ODc4Mlx1OTBkZVx1'@;
put 'NGY4Nlx1NWQwZFx1NWZhMFx1ODQwYVx1NTFiN1x1NjNhMFx1NzU2NVx1NGVhZVx1NTAwNlx1NTE2OVx1NTFjOVx1Njg4MVx1NmExMVx1N2NhZVx1N2NiMVx1N2NlN1x1ODI2Zlx1OGFkMlx1OGYxYlx1OTFjZlx1NGZiNlx1NTEzN1x1NTJmNVx1NTQ0Mlx1NWVlY1x1NjE2ZVx1NjIzZVx1NjVj'@;
put 'NVx1NmFkYVx1NmZmZVx1NzkyYVx1ODVkY1x1ODgyM1x1OTVhZFx1OWE2Mlx1OWE2YVx1OWU5N1x1OWVjZVx1NTI5Ylx1NjZjNlx1NmI3N1x1NzAxZFx1NzkyYlx1OGY2Mlx1OTc0Mlx1NjE5MFx1NjIwMFx1NjUyM1x1NmYyM1x1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIxM10ubGVuZ3Ro'@;
put 'Oysrdik2NTUzMyE9PWtbMjEzXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMTNdW3ZdXT01NDUyOCt2LFRbNTQ1Mjgrdl09a1syMTNdW3ZdKTtmb3Ioa1syMTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcxNDlcdTc0ODlcdTdkZjRcdTgwNmZcdTg0ZWVcdThmMjZcdTkwMjNcdTkzNGFcdTUxYmRcdTUyMTdcdTUyYTNcdTZkMGNcdTcwYzhcdTg4YzJcdTVlYzlcdTY1'@;
put 'ODJcdTZiYWVcdTZmYzJcdTdjM2VcdTczNzVcdTRlZTRcdTRmMzZcdTU2ZjlcdWY5NWZcdTVjYmFcdTVkYmFcdTYwMWNcdTczYjJcdTdiMmRcdTdmOWFcdTdmY2VcdTgwNDZcdTkwMWVcdTkyMzRcdTk2ZjZcdTk3NDhcdTk4MThcdTlmNjFcdTRmOGJcdTZmYTdcdTc5YWVcdTkxYjRcdTk2Yjdc'@;
put 'dTUyZGVcdWY5NjBcdTY0ODhcdTY0YzRcdTZhZDNcdTZmNWVcdTcwMThcdTcyMTBcdTc2ZTdcdTgwMDFcdTg2MDZcdTg2NWNcdThkZWZcdThmMDVcdTk3MzJcdTliNmZcdTlkZmFcdTllNzVcdTc4OGNcdTc5N2ZcdTdkYTBcdTgzYzlcdTkzMDRcdTllN2ZcdTllOTNcdThhZDZcdTU4ZGZcdTVm'@;
put 'MDRcdTY3MjdcdTcwMjdcdTc0Y2ZcdTdjNjBcdTgwN2VcdTUxMjFcdTcwMjhcdTcyNjJcdTc4Y2FcdThjYzJcdThjZGFcdThjZjRcdTk2ZjdcdTRlODZcdTUwZGFcdTViZWVcdTVlZDZcdTY1OTlcdTcxY2VcdTc2NDJcdTc3YWRcdTgwNGFcdTg0ZmNcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9'@;
put 'a1syMTRdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIxNF1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjE0XVt2XV09NTQ3ODQrdixUWzU0Nzg0K3ZdPWtbMjE0XVt2XSk7Zm9yKGtbMjE1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MDdjXHU5YjI3XHU5ZjhkXHU1OGQ4XHU1YTQxXHU1YzYyXHU2YTEzXHU2ZGRhXHU2ZjBmXHU3NjNiXHU3ZDJmXHU3ZTM3XHU4NTFlXHU4'@;
put 'OTM4XHU5M2U0XHU5NjRiXHU1Mjg5XHU2NWQyXHU2N2YzXHU2OWI0XHU2ZDQxXHU2ZTljXHU3MDBmXHU3NDA5XHU3NDYwXHU3NTU5XHU3NjI0XHU3ODZiXHU4YjJjXHU5ODVlXHU1MTZkXHU2MjJlXHU5Njc4XHU0Zjk2XHU1MDJiXHU1ZDE5XHU2ZGVhXHU3ZGI4XHU4ZjJhXHU1ZjhiXHU2MTQ0'@;
put 'XHU2ODE3XHVmOTYxXHU5Njg2XHU1MmQyXHU4MDhiXHU1MWRjXHU1MWNjXHU2OTVlXHU3YTFjXHU3ZGJlXHU4M2YxXHU5Njc1XHU0ZmRhXHU1MjI5XHU1Mzk4XHU1NDBmXHU1NTBlXHU1YzY1XHU2MGE3XHU2NzRlXHU2OGE4XHU2ZDZjXHU3MjgxXHU3MmY4XHU3NDA2XHU3NDgzXHVmOTYyXHU3'@;
put 'NWUyXHU3YzZjXHU3Zjc5XHU3ZmI4XHU4Mzg5XHU4OGNmXHU4OGUxXHU5MWNjXHU5MWQwXHU5NmUyXHU5YmM5XHU1NDFkXHU2ZjdlXHU3MWQwXHU3NDk4XHU4NWZhXHU4ZWFhXHU5NmEzXHU5YzU3XHU5ZTlmXHU2Nzk3XHU2ZGNiXHU3NDMzXHU4MWU4XHU5NzE2XHU3ODJjXHVmZmZkIi5zcGxp'@;
put 'dCgiIiksdj0wO3YhPWtbMjE1XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMTVdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIxNV1bdl1dPTU1MDQwK3YsVFs1NTA0MCt2XT1rWzIxNV1bdl0pO2ZvcihrWzIxNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2FjYlx1N2IyMFx1N2M5Mlx1NjQ2OVx1NzQ2YVx1NzVmMlx1NzhiY1x1NzhlOFx1OTlhY1x1OWI1NFx1OWViYlx1'@;
put 'NWJkZVx1NWU1NVx1NmYyMFx1ODE5Y1x1ODNhYlx1OTA4OFx1NGUwN1x1NTM0ZFx1NWEyOVx1NWRkMlx1NWY0ZVx1NjE2Mlx1NjMzZFx1NjY2OVx1NjZmY1x1NmVmZlx1NmYyYlx1NzA2M1x1Nzc5ZVx1ODQyY1x1ODUxM1x1ODgzYlx1OGYxM1x1OTk0NVx1OWMzYlx1NTUxY1x1NjJiOVx1Njcy'@;
put 'Ylx1NmNhYlx1ODMwOVx1ODk2YVx1OTc3YVx1NGVhMVx1NTk4NFx1NWZkOFx1NWZkOVx1NjcxYlx1N2RiMlx1N2Y1NFx1ODI5Mlx1ODMyYlx1ODNiZFx1OGYxZVx1OTA5OVx1NTdjYlx1NTliOVx1NWE5Mlx1NWJkMFx1NjYyN1x1Njc5YVx1Njg4NVx1NmJjZlx1NzE2NFx1N2Y3NVx1OGNiN1x1'@;
put 'OGNlM1x1OTA4MVx1OWI0NVx1ODEwOFx1OGM4YVx1OTY0Y1x1OWE0MFx1OWVhNVx1NWI1Zlx1NmMxM1x1NzMxYlx1NzZmMlx1NzZkZlx1ODQwY1x1NTFhYVx1ODk5M1x1NTE0ZFx1NTE5NVx1NTJjOVx1NjhjOVx1NmM5NFx1NzcwNFx1NzcyMFx1N2RiZlx1N2RlY1x1OTc2Mlx1OWViNVx1NmVj'@;
put 'NVx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIxNl0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjE2XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMTZdW3ZdXT01NTI5Nit2LFRbNTUyOTYrdl09a1syMTZdW3ZdKTtmb3Ioa1syMTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1MTFcdTUxYTVcdTU0MGRcdTU0N2RcdTY2MGVcdTY2OWRcdTY5MjdcdTZlOWZcdTc2YmZc'@;
put 'dTc3OTFcdTgzMTdcdTg0YzJcdTg3OWZcdTkxNjlcdTkyOThcdTljZjRcdTg4ODJcdTRmYWVcdTUxOTJcdTUyZGZcdTU5YzZcdTVlM2RcdTYxNTVcdTY0NzhcdTY0NzlcdTY2YWVcdTY3ZDBcdTZhMjFcdTZiY2RcdTZiZGJcdTcyNWZcdTcyNjFcdTc0NDFcdTc3MzhcdTc3ZGJcdTgwMTdcdTgy'@;
put 'YmNcdTgzMDVcdThiMDBcdThiMjhcdThjOGNcdTY3MjhcdTZjOTBcdTcyNjdcdTc2ZWVcdTc3NjZcdTdhNDZcdTlkYTlcdTZiN2ZcdTZjOTJcdTU5MjJcdTY3MjZcdTg0OTlcdTUzNmZcdTU4OTNcdTU5OTlcdTVlZGZcdTYzY2ZcdTY2MzRcdTY3NzNcdTZlM2FcdTczMmJcdTdhZDdcdTgyZDdc'@;
put 'dTkzMjhcdTUyZDlcdTVkZWJcdTYxYWVcdTYxY2JcdTYyMGFcdTYyYzdcdTY0YWJcdTY1ZTBcdTY5NTlcdTZiNjZcdTZiY2JcdTcxMjFcdTczZjdcdTc1NWRcdTdlNDZcdTgyMWVcdTgzMDJcdTg1NmFcdThhYTNcdThjYmZcdTk3MjdcdTlkNjFcdTU4YThcdTllZDhcdTUwMTFcdTUyMGVcdTU0'@;
put 'M2JcdTU1NGZcdTY1ODdcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMTddLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIxN11bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjE3XVt2XV09NTU1NTIrdixUWzU1NTUyK3ZdPWtbMjE3XVt2XSk7Zm9yKGtbMjE4XT0iXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2Yzc2XHU3ZDBhXHU3ZDBiXHU4MDVlXHU4NjhhXHU5NTgwXHU5NmVm'@;
put 'XHU1MmZmXHU2Yzk1XHU3MjY5XHU1NDczXHU1YTlhXHU1YzNlXHU1ZDRiXHU1ZjRjXHU1ZmFlXHU2NzJhXHU2OGI2XHU2OTYzXHU2ZTNjXHU2ZTQ0XHU3NzA5XHU3YzczXHU3ZjhlXHU4NTg3XHU4YjBlXHU4ZmY3XHU5NzYxXHU5ZWY0XHU1Y2I3XHU2MGI2XHU2MTBkXHU2MWFiXHU2NTRmXHU2'@;
put 'NWZiXHU2NWZjXHU2YzExXHU2Y2VmXHU3MzlmXHU3M2M5XHU3ZGUxXHU5NTk0XHU1YmM2XHU4NzFjXHU4YjEwXHU1MjVkXHU1MzVhXHU2MmNkXHU2NDBmXHU2NGIyXHU2NzM0XHU2YTM4XHU2Y2NhXHU3M2MwXHU3NDllXHU3Yjk0XHU3Yzk1XHU3ZTFiXHU4MThhXHU4MjM2XHU4NTg0XHU4ZmVi'@;
put 'XHU5NmY5XHU5OWMxXHU0ZjM0XHU1MzRhXHU1M2NkXHU1M2RiXHU2MmNjXHU2NDJjXHU2NTAwXHU2NTkxXHU2OWMzXHU2Y2VlXHU2ZjU4XHU3M2VkXHU3NTU0XHU3NjIyXHU3NmU0XHU3NmZjXHU3OGQwXHU3OGZiXHU3OTJjXHU3ZDQ2XHU4MjJjXHU4N2UwXHU4ZmQ0XHU5ODEyXHU5OGVmXHU1'@;
put 'MmMzXHU2MmQ0XHU2NGE1XHU2ZTI0XHU2ZjUxXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjE4XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMThdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIxOF1bdl1dPTU1ODA4K3YsVFs1NTgwOCt2XT1rWzIxOF1bdl0pO2ZvcihrWzIxOV09Ilx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzY3Y1x1OGRjYlx1OTFiMVx1OTI2Mlx1OWFl'@;
put 'ZVx1OWI0M1x1NTAyM1x1NTA4ZFx1NTc0YVx1NTlhOFx1NWMyOFx1NWU0N1x1NWY3N1x1NjIzZlx1NjUzZVx1NjViOVx1NjVjMVx1NjYwOVx1Njc4Ylx1Njk5Y1x1NmVjMlx1NzhjNVx1N2QyMVx1ODBhYVx1ODE4MFx1ODIyYlx1ODJiM1x1ODRhMVx1ODY4Y1x1OGEyYVx1OGIxN1x1OTBhNlx1'@;
put 'OTYzMlx1OWY5MFx1NTAwZFx1NGZmM1x1Zjk2M1x1NTdmOVx1NWY5OFx1NjJkY1x1NjM5Mlx1Njc2Zlx1NmU0M1x1NzExOVx1NzZjM1x1ODBjY1x1ODBkYVx1ODhmNFx1ODhmNVx1ODkxOVx1OGNlMFx1OGYyOVx1OTE0ZFx1OTY2YVx1NGYyZlx1NGY3MFx1NWUxYlx1NjdjZlx1NjgyMlx1NzY3'@;
put 'ZFx1NzY3ZVx1OWI0NFx1NWU2MVx1NmEwYVx1NzE2OVx1NzFkNFx1NzU2YVx1Zjk2NFx1N2U0MVx1ODU0M1x1ODVlOVx1OThkY1x1NGYxMFx1N2I0Zlx1N2Y3MFx1OTVhNVx1NTFlMVx1NWUwNlx1NjhiNVx1NmMzZVx1NmM0ZVx1NmNkYlx1NzJhZlx1N2JjNFx1ODMwM1x1NmNkNVx1NzQzYVx1'@;
put 'NTBmYlx1NTI4OFx1NThjMVx1NjRkOFx1NmE5N1x1NzRhN1x1NzY1Nlx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIxOV0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjE5XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMTldW3ZdXT01NjA2NCt2LFRbNTYwNjQrdl09a1syMTldW3ZdKTtmb3Io'@;
put 'a1syMjBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc4YTdcdTg2MTdcdTk1'@;
put 'ZTJcdTk3MzlcdWY5NjVcdTUzNWVcdTVmMDFcdThiOGFcdThmYThcdThmYWZcdTkwOGFcdTUyMjVcdTc3YTVcdTljNDlcdTlmMDhcdTRlMTlcdTUwMDJcdTUxNzVcdTVjNWJcdTVlNzdcdTY2MWVcdTY2M2FcdTY3YzRcdTY4YzVcdTcwYjNcdTc1MDFcdTc1YzVcdTc5YzlcdTdhZGRcdThmMjdc'@;
put 'dTk5MjBcdTlhMDhcdTRmZGRcdTU4MjFcdTU4MzFcdTViZjZcdTY2NmVcdTZiNjVcdTZkMTFcdTZlN2FcdTZmN2RcdTczZTRcdTc1MmJcdTgzZTlcdTg4ZGNcdTg5MTNcdThiNWNcdThmMTRcdTRmMGZcdTUwZDVcdTUzMTBcdTUzNWNcdTViOTNcdTVmYTlcdTY3MGRcdTc5OGZcdTgxNzlcdTgz'@;
put 'MmZcdTg1MTRcdTg5MDdcdTg5ODZcdThmMzlcdThmM2JcdTk5YTVcdTljMTJcdTY3MmNcdTRlNzZcdTRmZjhcdTU5NDlcdTVjMDFcdTVjZWZcdTVjZjBcdTYzNjdcdTY4ZDJcdTcwZmRcdTcxYTJcdTc0MmJcdTdlMmJcdTg0ZWNcdTg3MDJcdTkwMjJcdTkyZDJcdTljZjNcdTRlMGRcdTRlZDhc'@;
put 'dTRmZWZcdTUwODVcdTUyNTZcdTUyNmZcdTU0MjZcdTU0OTBcdTU3ZTBcdTU5MmJcdTVhNjZcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMjBdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIyMF1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjIwXVt2XV09NTYzMjArdixUWzU2MzIwK3ZdPWtb'@;
put 'MjIwXVt2XSk7Zm9yKGtbMjIxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1'@;
put 'YjVhXHU1Yjc1XHU1YmNjXHU1ZTljXHVmOTY2XHU2Mjc2XHU2NTc3XHU2NWE3XHU2ZDZlXHU2ZWE1XHU3MjM2XHU3YjI2XHU3YzNmXHU3ZjM2XHU4MTUwXHU4MTUxXHU4MTlhXHU4MjQwXHU4Mjk5XHU4M2E5XHU4YTAzXHU4Y2EwXHU4Y2U2XHU4Y2ZiXHU4ZDc0XHU4ZGJhXHU5MGU4XHU5MWRj'@;
put 'XHU5NjFjXHU5NjQ0XHU5OWQ5XHU5Y2U3XHU1MzE3XHU1MjA2XHU1NDI5XHU1Njc0XHU1OGIzXHU1OTU0XHU1OTZlXHU1ZmZmXHU2MWE0XHU2MjZlXHU2NjEwXHU2YzdlXHU3MTFhXHU3NmM2XHU3Yzg5XHU3Y2RlXHU3ZDFiXHU4MmFjXHU4Y2MxXHU5NmYwXHVmOTY3XHU0ZjViXHU1ZjE3XHU1'@;
put 'ZjdmXHU2MmMyXHU1ZDI5XHU2NzBiXHU2OGRhXHU3ODdjXHU3ZTQzXHU5ZDZjXHU0ZTE1XHU1MDk5XHU1MzE1XHU1MzJhXHU1MzUxXHU1OTgzXHU1YTYyXHU1ZTg3XHU2MGIyXHU2MThhXHU2MjQ5XHU2Mjc5XHU2NTkwXHU2Nzg3XHU2OWE3XHU2YmQ0XHU2YmQ2XHU2YmQ3XHU2YmQ4XHU2Y2I4'@;
put 'XHVmOTY4XHU3NDM1XHU3NWZhXHU3ODEyXHU3ODkxXHU3OWQ1XHU3OWQ4XHU3YzgzXHU3ZGNiXHU3ZmUxXHU4MGE1XHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjIxXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMjFdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIyMV1bdl1dPTU2NTc2K3Ys'@;
put 'VFs1NjU3Nit2XT1rWzIyMV1bdl0pO2ZvcihrWzIyMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ODEzZVx1ODFjMlx1ODNmMlx1ODcxYVx1ODhlOFx1OGFiOVx1OGI2Y1x1OGNiYlx1OTExOVx1OTc1ZVx1OThkYlx1OWYzYlx1NTZhY1x1NWIyYVx1NWY2Y1x1NjU4Y1x1NmFiM1x1NmJhZlx1NmQ1Y1x1NmZmMVx1NzAxNVx1NzI1ZFx1NzNhZFx1OGNhN1x1OGNkM1x1OTgz'@;
put 'Ylx1NjE5MVx1NmMzN1x1ODA1OFx1OWEwMVx1NGU0ZFx1NGU4Ylx1NGU5Ylx1NGVkNVx1NGYzYVx1NGYzY1x1NGY3Zlx1NGZkZlx1NTBmZlx1NTNmMlx1NTNmOFx1NTUwNlx1NTVlM1x1NTZkYlx1NThlYlx1NTk2Mlx1NWExMVx1NWJlYlx1NWJmYVx1NWMwNFx1NWRmM1x1NWUyYlx1NWY5OVx1'@;
put 'NjAxZFx1NjM2OFx1NjU5Y1x1NjVhZlx1NjdmNlx1NjdmYlx1NjhhZFx1NmI3Ylx1NmM5OVx1NmNkN1x1NmUyM1x1NzAwOVx1NzM0NVx1NzgwMlx1NzkzZVx1Nzk0MFx1Nzk2MFx1NzljMVx1N2JlOVx1N2QxN1x1N2Q3Mlx1ODA4Nlx1ODIwZFx1ODM4ZVx1ODRkMVx1ODZjN1x1ODhkZlx1OGE1'@;
put 'MFx1OGE1ZVx1OGIxZFx1OGNkY1x1OGQ2Nlx1OGZhZFx1OTBhYVx1OThmY1x1OTlkZlx1OWU5ZFx1NTI0YVx1Zjk2OVx1NjcxNFx1Zjk2YVx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIyMl0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjIyXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMjJd'@;
put 'W3ZdXT01NjgzMit2LFRbNTY4MzIrdl09a1syMjJdW3ZdKTtmb3Ioa1syMjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUwOThcdTUyMmFcdTVjNzFcdTY1NjNcdTZjNTVcdTczY2FcdTc1MjNcdTc1OWRcdTdiOTdcdTg0OWNcdTkxNzhcdTk3MzBcdTRlNzdcdTY0OTJcdTZiYmFcdTcxNWVcdTg1YTlcdTRlMDlcdWY5NmJcdTY3NDlcdTY4ZWVcdTZlMTdcdTgyOWZcdTg1'@;
put 'MThcdTg4NmJcdTYzZjdcdTZmODFcdTkyMTJcdTk4YWZcdTRlMGFcdTUwYjdcdTUwY2ZcdTUxMWZcdTU1NDZcdTU1YWFcdTU2MTdcdTViNDBcdTVjMTlcdTVjZTBcdTVlMzhcdTVlOGFcdTVlYTBcdTVlYzJcdTYwZjNcdTY4NTFcdTZhNjFcdTZlNThcdTcyM2RcdTcyNDBcdTcyYzBcdTc2Zjhc'@;
put 'dTc5NjVcdTdiYjFcdTdmZDRcdTg4ZjNcdTg5ZjRcdThhNzNcdThjNjFcdThjZGVcdTk3MWNcdTU4NWVcdTc0YmRcdThjZmRcdTU1YzdcdWY5NmNcdTdhNjFcdTdkMjJcdTgyNzJcdTcyNzJcdTc1MWZcdTc1MjVcdWY5NmRcdTdiMTlcdTU4ODVcdTU4ZmJcdTVkYmNcdTVlOGZcdTVlYjZcdTVm'@;
put 'OTBcdTYwNTVcdTYyOTJcdTYzN2ZcdTY1NGRcdTY2OTFcdTY2ZDlcdTY2ZjhcdTY4MTZcdTY4ZjJcdTcyODBcdTc0NWVcdTdiNmVcdTdkNmVcdTdkZDZcdTdmNzJcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMjNdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIyM11bdl0uY2hhckNvZGVBdCgw'@;
put 'KSYmKHNlW2tbMjIzXVt2XV09NTcwODgrdixUWzU3MDg4K3ZdPWtbMjIzXVt2XSk7Zm9yKGtbMjI0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MGU1XHU4MjEyXHU4NWFmXHU4OTdmXHU4YTkzXHU5MDFkXHU5MmU0XHU5ZWNkXHU5ZjIwXHU1OTE1XHU1OTZkXHU1ZTJkXHU2MGRjXHU2NjE0XHU2NjczXHU2NzkwXHU2YzUwXHU2ZGM1XHU2ZjVmXHU3N2YzXHU3OGE5XHU4'@;
put 'NGM2XHU5MWNiXHU5MzJiXHU0ZWQ5XHU1MGNhXHU1MTQ4XHU1NTg0XHU1YjBiXHU1YmEzXHU2MjQ3XHU2NTdlXHU2NWNiXHU2ZTMyXHU3MTdkXHU3NDAxXHU3NDQ0XHU3NDg3XHU3NGJmXHU3NjZjXHU3OWFhXHU3ZGRhXHU3ZTU1XHU3ZmE4XHU4MTdhXHU4MWIzXHU4MjM5XHU4NjFhXHU4N2Vj'@;
put 'XHU4YTc1XHU4ZGUzXHU5MDc4XHU5MjkxXHU5NDI1XHU5OTRkXHU5YmFlXHU1MzY4XHU1YzUxXHU2OTU0XHU2Y2M0XHU2ZDI5XHU2ZTJiXHU4MjBjXHU4NTliXHU4OTNiXHU4YTJkXHU4YWFhXHU5NmVhXHU5ZjY3XHU1MjYxXHU2NmI5XHU2YmIyXHU3ZTk2XHU4N2ZlXHU4ZDBkXHU5NTgzXHU5'@;
put 'NjVkXHU2NTFkXHU2ZDg5XHU3MWVlXHVmOTZlXHU1N2NlXHU1OWQzXHU1YmFjXHU2MDI3XHU2MGZhXHU2MjEwXHU2NjFmXHU2NjVmXHU3MzI5XHU3M2Y5XHU3NmRiXHU3NzAxXHU3YjZjXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjI0XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMjRdW3Zd'@;
put 'LmNoYXJDb2RlQXQoMCkmJihzZVtrWzIyNF1bdl1dPTU3MzQ0K3YsVFs1NzM0NCt2XT1rWzIyNF1bdl0pO2ZvcihrWzIyNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODA1Nlx1ODA3Mlx1ODE2NVx1OGFhMFx1OTE5Mlx1NGUxNlx1NTJlMlx1NmI3Mlx1NmQxN1x1N2EwNVx1N2IzOVx1N2QzMFx1Zjk2Zlx1OGNiMFx1NTNlY1x1NTYyZlx1NTg1MVx1NWJiNVx1NWMwZlx1'@;
put 'NWMxMVx1NWRlMlx1NjI0MFx1NjM4M1x1NjQxNFx1NjYyZFx1NjhiM1x1NmNiY1x1NmQ4OFx1NmVhZlx1NzAxZlx1NzBhNFx1NzFkMlx1NzUyNlx1NzU4Zlx1NzU4ZVx1NzYxOVx1N2IxMVx1N2JlMFx1N2MyYlx1N2QyMFx1N2QzOVx1ODUyY1x1ODU2ZFx1ODYwN1x1OGEzNFx1OTAwZFx1OTA2'@;
put 'MVx1OTBiNVx1OTJiN1x1OTdmNlx1OWEzN1x1NGZkN1x1NWM2Y1x1Njc1Zlx1NmQ5MVx1N2M5Zlx1N2U4Y1x1OGIxNlx1OGQxNlx1OTAxZlx1NWI2Ylx1NWRmZFx1NjQwZFx1ODRjMFx1OTA1Y1x1OThlMVx1NzM4N1x1NWI4Ylx1NjA5YVx1Njc3ZVx1NmRkZVx1OGExZlx1OGFhNlx1OTAwMVx1'@;
put 'OTgwY1x1NTIzN1x1Zjk3MFx1NzA1MVx1Nzg4ZVx1OTM5Nlx1ODg3MFx1OTFkN1x1NGZlZVx1NTNkN1x1NTVmZFx1NTZkYVx1NTc4Mlx1NThmZFx1NWFjMlx1NWI4OFx1NWNhYlx1NWNjMFx1NWUyNVx1NjEwMVx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIyNV0ubGVuZ3RoOysrdik2NTUz'@;
put 'MyE9PWtbMjI1XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMjVdW3ZdXT01NzYwMCt2LFRbNTc2MDArdl09a1syMjVdW3ZdKTtmb3Ioa1syMjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYyMGRcdTYyNGJcdTYzODhcdTY0MWNcdTY1MzZcdTY1NzhcdTZhMzlcdTZiOGFcdTZjMzRcdTZkMTlcdTZmMzFcdTcxZTdcdTcyZTlcdTczNzhcdTc0MDdcdTc0YjJcdTc2MjZc'@;
put 'dTc3NjFcdTc5YzBcdTdhNTdcdTdhZWFcdTdjYjlcdTdkOGZcdTdkYWNcdTdlNjFcdTdmOWVcdTgxMjlcdTgzMzFcdTg0OTBcdTg0ZGFcdTg1ZWFcdTg4OTZcdThhYjBcdThiOTBcdThmMzhcdTkwNDJcdTkwODNcdTkxNmNcdTkyOTZcdTkyYjlcdTk2OGJcdTk2YTdcdTk2YThcdTk2ZDZcdTk3'@;
put 'MDBcdTk4MDhcdTk5OTZcdTlhZDNcdTliMWFcdTUzZDRcdTU4N2VcdTU5MTlcdTViNzBcdTViYmZcdTZkZDFcdTZmNWFcdTcxOWZcdTc0MjFcdTc0YjlcdTgwODVcdTgzZmRcdTVkZTFcdTVmODdcdTVmYWFcdTYwNDJcdTY1ZWNcdTY4MTJcdTY5NmZcdTZhNTNcdTZiODlcdTZkMzVcdTZkZjNc'@;
put 'dTczZTNcdTc2ZmVcdTc3YWNcdTdiNGRcdTdkMTRcdTgxMjNcdTgyMWNcdTgzNDBcdTg0ZjRcdTg1NjNcdThhNjJcdThhYzRcdTkxODdcdTkzMWVcdTk4MDZcdTk5YjRcdTYyMGNcdTg4NTNcdThmZjBcdTkyNjVcdTVkMDdcdTVkMjdcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMjZdLmxl'@;
put 'bmd0aDsrK3YpNjU1MzMhPT1rWzIyNl1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjI2XVt2XV09NTc4NTYrdixUWzU3ODU2K3ZdPWtbMjI2XVt2XSk7Zm9yKGtbMjI3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZDY5XHU3NDVmXHU4MTlkXHU4NzY4XHU2ZmQ1XHU2MmZlXHU3ZmQyXHU4OTM2XHU4OTcyXHU0ZTFlXHU0ZTU4XHU1MGU3XHU1MmRkXHU1MzQ3XHU2Mjdm'@;
put 'XHU2NjA3XHU3ZTY5XHU4ODA1XHU5NjVlXHU0ZjhkXHU1MzE5XHU1NjM2XHU1OWNiXHU1YWE0XHU1YzM4XHU1YzRlXHU1YzRkXHU1ZTAyXHU1ZjExXHU2MDQzXHU2NWJkXHU2NjJmXHU2NjQyXHU2N2JlXHU2N2Y0XHU3MzFjXHU3N2UyXHU3OTNhXHU3ZmM1XHU4NDk0XHU4NGNkXHU4OTk2XHU4'@;
put 'YTY2XHU4YTY5XHU4YWUxXHU4YzU1XHU4YzdhXHU1N2Y0XHU1YmQ0XHU1ZjBmXHU2MDZmXHU2MmVkXHU2OTBkXHU2Yjk2XHU2ZTVjXHU3MTg0XHU3YmQyXHU4NzU1XHU4YjU4XHU4ZWZlXHU5OGRmXHU5OGZlXHU0ZjM4XHU0ZjgxXHU0ZmUxXHU1NDdiXHU1YTIwXHU1YmI4XHU2MTNjXHU2NWIw'@;
put 'XHU2NjY4XHU3MWZjXHU3NTMzXHU3OTVlXHU3ZDMzXHU4MTRlXHU4MWUzXHU4Mzk4XHU4NWFhXHU4NWNlXHU4NzAzXHU4YTBhXHU4ZWFiXHU4ZjliXHVmOTcxXHU4ZmM1XHU1OTMxXHU1YmE0XHU1YmU2XHU2MDg5XHU1YmU5XHU1YzBiXHU1ZmMzXHU2YzgxXHVmZmZkIi5zcGxpdCgiIiksdj0w'@;
put 'O3YhPWtbMjI3XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMjddW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIyN11bdl1dPTU4MTEyK3YsVFs1ODExMit2XT1rWzIyN11bdl0pO2ZvcihrWzIyOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Zjk3Mlx1NmRmMVx1NzAwYlx1NzUxYVx1ODJhZlx1OGFmNlx1NGVjMFx1NTM0MVx1Zjk3M1x1OTZkOVx1NmMwZlx1NGU5ZVx1NGZj'@;
put 'NFx1NTE1Mlx1NTU1ZVx1NWEyNVx1NWNlOFx1NjIxMVx1NzI1OVx1ODJiZFx1ODNhYVx1ODZmZVx1ODg1OVx1OGExZFx1OTYzZlx1OTZjNVx1OTkxM1x1OWQwOVx1OWQ1ZFx1NTgwYVx1NWNiM1x1NWRiZFx1NWU0NFx1NjBlMVx1NjExNVx1NjNlMVx1NmEwMlx1NmUyNVx1OTEwMlx1OTM1NFx1'@;
put 'OTg0ZVx1OWMxMFx1OWY3N1x1NWI4OVx1NWNiOFx1NjMwOVx1NjY0Zlx1Njg0OFx1NzczY1x1OTZjMVx1OTc4ZFx1OTg1NFx1OWI5Zlx1NjVhMVx1OGIwMVx1OGVjYlx1OTViY1x1NTUzNVx1NWNhOVx1NWRkNlx1NWViNVx1NjY5N1x1NzY0Y1x1ODNmNFx1OTVjN1x1NThkM1x1NjJiY1x1NzJj'@;
put 'ZVx1OWQyOFx1NGVmMFx1NTkyZVx1NjAwZlx1NjYzYlx1NmI4M1x1NzllN1x1OWQyNlx1NTM5M1x1NTRjMFx1NTdjM1x1NWQxNlx1NjExYlx1NjZkNlx1NmRhZlx1Nzg4ZFx1ODI3ZVx1OTY5OFx1OTc0NFx1NTM4NFx1NjI3Y1x1NjM5Nlx1NmRiMlx1N2UwYVx1ODE0Ylx1OTg0ZFx1ZmZmZCIu'@;
put 'c3BsaXQoIiIpLHY9MDt2IT1rWzIyOF0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjI4XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMjhdW3ZdXT01ODM2OCt2LFRbNTgzNjgrdl09a1syMjhdW3ZdKTtmb3Ioa1syMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZhZmJcdTdmNGNcdTlkYWZcdTllMWFcdTRlNWZcdTUwM2JcdTUxYjZcdTU5MWNcdTYwZjlcdTYzZjZcdTY5'@;
put 'MzBcdTcyM2FcdTgwMzZcdWY5NzRcdTkxY2VcdTVmMzFcdWY5NzVcdWY5NzZcdTdkMDRcdTgyZTVcdTg0NmZcdTg0YmJcdTg1ZTVcdThlOGRcdWY5NzdcdTRmNmZcdWY5NzhcdWY5NzlcdTU4ZTRcdTViNDNcdTYwNTlcdTYzZGFcdTY1MThcdTY1NmRcdTY2OThcdWY5N2FcdTY5NGFcdTZhMjNc'@;
put 'dTZkMGJcdTcwMDFcdTcxNmNcdTc1ZDJcdTc2MGRcdTc5YjNcdTdhNzBcdWY5N2JcdTdmOGFcdWY5N2NcdTg5NDRcdWY5N2RcdThiOTNcdTkxYzBcdTk2N2RcdWY5N2VcdTk5MGFcdTU3MDRcdTVmYTFcdTY1YmNcdTZmMDFcdTc2MDBcdTc5YTZcdThhOWVcdTk5YWRcdTliNWFcdTlmNmNcdTUx'@;
put 'MDRcdTYxYjZcdTYyOTFcdTZhOGRcdTgxYzZcdTUwNDNcdTU4MzBcdTVmNjZcdTcxMDlcdThhMDBcdThhZmFcdTViN2NcdTg2MTZcdTRmZmFcdTUxM2NcdTU2YjRcdTU5NDRcdTYzYTlcdTZkZjlcdTVkYWFcdTY5NmRcdTUxODZcdTRlODhcdTRmNTlcdWY5N2ZcdWY5ODBcdWY5ODFcdTU5ODJc'@;
put 'dWY5ODJcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMjldLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIyOV1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjI5XVt2XV09NTg2MjQrdixUWzU4NjI0K3ZdPWtbMjI5XVt2XSk7Zm9yKGtbMjMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmOTgzXHU2YjVmXHU2YzVkXHVmOTg0XHU3NGI1XHU3OTE2XHVmOTg1XHU4MjA3XHU4'@;
put 'MjQ1XHU4MzM5XHU4ZjNmXHU4ZjVkXHVmOTg2XHU5OTE4XHVmOTg3XHVmOTg4XHVmOTg5XHU0ZWE2XHVmOThhXHU1N2RmXHU1Zjc5XHU2NjEzXHVmOThiXHVmOThjXHU3NWFiXHU3ZTc5XHU4YjZmXHVmOThkXHU5MDA2XHU5YTViXHU1NmE1XHU1ODI3XHU1OWY4XHU1YTFmXHU1YmI0XHVmOThl'@;
put 'XHU1ZWY2XHVmOThmXHVmOTkwXHU2MzUwXHU2MzNiXHVmOTkxXHU2OTNkXHU2Yzg3XHU2Y2JmXHU2ZDhlXHU2ZDkzXHU2ZGY1XHU2ZjE0XHVmOTkyXHU3MGRmXHU3MTM2XHU3MTU5XHVmOTkzXHU3MWMzXHU3MWQ1XHVmOTk0XHU3ODRmXHU3ODZmXHVmOTk1XHU3Yjc1XHU3ZGUzXHVmOTk2XHU3'@;
put 'ZTJmXHVmOTk3XHU4ODRkXHU4ZWRmXHVmOTk4XHVmOTk5XHVmOTlhXHU5MjViXHVmOTliXHU5Y2Y2XHVmOTljXHVmOTlkXHVmOTllXHU2MDg1XHU2ZDg1XHVmOTlmXHU3MWIxXHVmOWEwXHVmOWExXHU5NWIxXHU1M2FkXHVmOWEyXHVmOWEzXHVmOWE0XHU2N2QzXHVmOWE1XHU3MDhlXHU3MTMw'@;
put 'XHU3NDMwXHU4Mjc2XHU4MmQyXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjMwXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMzBdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIzMF1bdl1dPTU4ODgwK3YsVFs1ODg4MCt2XT1rWzIzMF1bdl0pO2ZvcihrWzIzMV09Ilx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZjlhNlx1OTViYlx1OWFlNVx1OWU3ZFx1NjZjNFx1ZjlhN1x1'@;
put 'NzFjMVx1ODQ0OVx1ZjlhOFx1ZjlhOVx1NTg0Ylx1ZjlhYVx1ZjlhYlx1NWRiOFx1NWY3MVx1ZjlhY1x1NjYyMFx1NjY4ZVx1Njk3OVx1NjlhZVx1NmMzOFx1NmNmM1x1NmUzNlx1NmY0MVx1NmZkYVx1NzAxYlx1NzAyZlx1NzE1MFx1NzFkZlx1NzM3MFx1ZjlhZFx1NzQ1Ylx1ZjlhZVx1NzRk'@;
put 'NFx1NzZjOFx1N2E0ZVx1N2U5M1x1ZjlhZlx1ZjliMFx1ODJmMVx1OGE2MFx1OGZjZVx1ZjliMVx1OTM0OFx1ZjliMlx1OTcxOVx1ZjliM1x1ZjliNFx1NGU0Mlx1NTAyYVx1ZjliNVx1NTIwOFx1NTNlMVx1NjZmM1x1NmM2ZFx1NmZjYVx1NzMwYVx1Nzc3Zlx1N2E2Mlx1ODJhZVx1ODVkZFx1'@;
put 'ODYwMlx1ZjliNlx1ODhkNFx1OGE2M1x1OGI3ZFx1OGM2Ylx1ZjliN1x1OTJiM1x1ZjliOFx1OTcxM1x1OTgxMFx1NGU5NFx1NGYwZFx1NGZjOVx1NTBiMlx1NTM0OFx1NTQzZVx1NTQzM1x1NTVkYVx1NTg2Mlx1NThiYVx1NTk2N1x1NWExYlx1NWJlNFx1NjA5Zlx1ZjliOVx1NjFjYVx1NjU1'@;
put 'Nlx1NjVmZlx1NjY2NFx1NjhhN1x1NmM1YVx1NmZiM1x1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIzMV0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjMxXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMzFdW3ZdXT01OTEzNit2LFRbNTkxMzYrdl09a1syMzFdW3ZdKTtmb3Ioa1syMzJdPSJc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcwY2ZcdTcxYWNcdTczNTJcdTdiN2Rc'@;
put 'dTg3MDhcdThhYTRcdTljMzJcdTlmMDdcdTVjNGJcdTZjODNcdTczNDRcdTczODlcdTkyM2FcdTZlYWJcdTc0NjVcdTc2MWZcdTdhNjlcdTdlMTVcdTg2MGFcdTUxNDBcdTU4YzVcdTY0YzFcdTc0ZWVcdTc1MTVcdTc2NzBcdTdmYzFcdTkwOTVcdTk2Y2RcdTk5NTRcdTZlMjZcdTc0ZTZcdTdh'@;
put 'YTlcdTdhYWFcdTgxZTVcdTg2ZDlcdTg3NzhcdThhMWJcdTVhNDlcdTViOGNcdTViOWJcdTY4YTFcdTY5MDBcdTZkNjNcdTczYTlcdTc0MTNcdTc0MmNcdTc4OTdcdTdkZTlcdTdmZWJcdTgxMThcdTgxNTVcdTgzOWVcdThjNGNcdTk2MmVcdTk4MTFcdTY2ZjBcdTVmODBcdTY1ZmFcdTY3ODlc'@;
put 'dTZjNmFcdTczOGJcdTUwMmRcdTVhMDNcdTZiNmFcdTc3ZWVcdTU5MTZcdTVkNmNcdTVkY2RcdTczMjVcdTc1NGZcdWY5YmFcdWY5YmJcdTUwZTVcdTUxZjlcdTU4MmZcdTU5MmRcdTU5OTZcdTU5ZGFcdTViZTVcdWY5YmNcdWY5YmRcdTVkYTJcdTYyZDdcdTY0MTZcdTY0OTNcdTY0ZmVcdWY5'@;
put 'YmVcdTY2ZGNcdWY5YmZcdTZhNDhcdWY5YzBcdTcxZmZcdTc0NjRcdWY5YzFcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMzJdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIzMl1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjMyXVt2XV09NTkzOTIrdixUWzU5MzkyK3ZdPWtbMjMyXVt2XSk7'@;
put 'Zm9yKGtbMjMzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YTg4XHU3YWFm'@;
put 'XHU3ZTQ3XHU3ZTVlXHU4MDAwXHU4MTcwXHVmOWMyXHU4N2VmXHU4OTgxXHU4YjIwXHU5MDU5XHVmOWMzXHU5MDgwXHU5OTUyXHU2MTdlXHU2YjMyXHU2ZDc0XHU3ZTFmXHU4OTI1XHU4ZmIxXHU0ZmQxXHU1MGFkXHU1MTk3XHU1MmM3XHU1N2M3XHU1ODg5XHU1YmI5XHU1ZWI4XHU2MTQyXHU2'@;
put 'OTk1XHU2ZDhjXHU2ZTY3XHU2ZWI2XHU3MTk0XHU3NDYyXHU3NTI4XHU3NTJjXHU4MDczXHU4MzM4XHU4NGM5XHU4ZTBhXHU5Mzk0XHU5M2RlXHVmOWM0XHU0ZThlXHU0ZjUxXHU1MDc2XHU1MTJhXHU1M2M4XHU1M2NiXHU1M2YzXHU1Yjg3XHU1YmQzXHU1YzI0XHU2MTFhXHU2MTgyXHU2NWY0'@;
put 'XHU3MjViXHU3Mzk3XHU3NDQwXHU3NmMyXHU3OTUwXHU3OTkxXHU3OWI5XHU3ZDA2XHU3ZmJkXHU4MjhiXHU4NWQ1XHU4NjVlXHU4ZmMyXHU5MDQ3XHU5MGY1XHU5MWVhXHU5Njg1XHU5NmU4XHU5NmU5XHU1MmQ2XHU1ZjY3XHU2NWVkXHU2NjMxXHU2ODJmXHU3MTVjXHU3YTM2XHU5MGMxXHU5'@;
put 'ODBhXHU0ZTkxXHVmOWM1XHU2YTUyXHU2YjllXHU2ZjkwXHU3MTg5XHU4MDE4XHU4MmI4XHU4NTUzXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjMzXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMzNdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIzM11bdl1dPTU5NjQ4K3YsVFs1OTY0OCt2'@;
put 'XT1rWzIzM11bdl0pO2ZvcihrWzIzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1OTA0Ylx1OTY5NVx1OTZmMlx1OTdmYlx1ODUxYVx1OWIzMVx1NGU5MFx1NzE4YVx1OTZjNFx1NTE0M1x1NTM5Zlx1NTRlMVx1NTcxM1x1NTcxMlx1NTdhM1x1NWE5Ylx1NWFjNFx1NWJjM1x1NjAyOFx1NjEzZlx1NjNmNFx1NmM4NVx1NmQzOVx1NmU3Mlx1NmU5MFx1NzIzMFx1NzMzZlx1'@;
put 'NzQ1N1x1ODJkMVx1ODg4MVx1OGY0NVx1OTA2MFx1ZjljNlx1OTY2Mlx1OTg1OFx1OWQxYlx1NjcwOFx1OGQ4YVx1OTI1ZVx1NGY0ZFx1NTA0OVx1NTBkZVx1NTM3MVx1NTcwZFx1NTlkNFx1NWEwMVx1NWMwOVx1NjE3MFx1NjY5MFx1NmUyZFx1NzIzMlx1NzQ0Ylx1N2RlZlx1ODBjM1x1ODQw'@;
put 'ZVx1ODQ2Nlx1ODUzZlx1ODc1Zlx1ODg1Ylx1ODkxOFx1OGIwMlx1OTA1NVx1OTdjYlx1OWI0Zlx1NGU3M1x1NGY5MVx1NTExMlx1NTE2YVx1ZjljN1x1NTUyZlx1NTVhOVx1NWI3YVx1NWJhNVx1NWU3Y1x1NWU3ZFx1NWViZVx1NjBhMFx1NjBkZlx1NjEwOFx1NjEwOVx1NjNjNFx1NjUzOFx1'@;
put 'NjcwOVx1ZjljOFx1NjdkNFx1NjdkYVx1ZjljOVx1Njk2MVx1Njk2Mlx1NmNiOVx1NmQyN1x1ZjljYVx1NmUzOFx1ZjljYlx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIzNF0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjM0XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMzRdW3ZdXT01OTkw'@;
put 'NCt2LFRbNTk5MDQrdl09a1syMzRdW3ZdKTtmb3Ioa1syMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdTZmZTFcdTczMzZcdTczMzdcdWY5Y2NcdTc0NWNcdTc1MzFcdWY5Y2RcdTc2NTJcdWY5Y2VcdWY5Y2ZcdTdkYWRcdTgxZmVcdTg0MzhcdTg4ZDVcdThhOThcdThhZGJcdThhZWRcdThlMzBcdThlNDJcdTkwNGFcdTkwM2VcdTkwN2FcdTkxNDlcdTkxYzlcdTkzNmVc'@;
put 'dWY5ZDBcdWY5ZDFcdTU4MDlcdWY5ZDJcdTZiZDNcdTgwODlcdTgwYjJcdWY5ZDNcdWY5ZDRcdTUxNDFcdTU5NmJcdTVjMzlcdWY5ZDVcdWY5ZDZcdTZmNjRcdTczYTdcdTgwZTRcdThkMDdcdWY5ZDdcdTkyMTdcdTk1OGZcdWY5ZDhcdWY5ZDlcdWY5ZGFcdWY5ZGJcdTgwN2ZcdTYyMGVcdTcw'@;
put 'MWNcdTdkNjhcdTg3OGRcdWY5ZGNcdTU3YTBcdTYwNjlcdTYxNDdcdTZiYjdcdThhYmVcdTkyODBcdTk2YjFcdTRlNTlcdTU0MWZcdTZkZWJcdTg1MmRcdTk2NzBcdTk3ZjNcdTk4ZWVcdTYzZDZcdTZjZTNcdTkwOTFcdTUxZGRcdTYxYzlcdTgxYmFcdTlkZjlcdTRmOWRcdTUwMWFcdTUxMDBc'@;
put 'dTViOWNcdTYxMGZcdTYxZmZcdTY0ZWNcdTY5MDVcdTZiYzVcdTc1OTFcdTc3ZTNcdTdmYTlcdTgyNjRcdTg1OGZcdTg3ZmJcdTg4NjNcdThhYmNcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMzVdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIzNV1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tb'@;
put 'MjM1XVt2XV09NjAxNjArdixUWzYwMTYwK3ZdPWtbMjM1XVt2XSk7Zm9yKGtbMjM2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YjcwXHU5MWFiXHU0ZThjXHU0ZWU1XHU0ZjBhXHVmOWRkXHVmOWRlXHU1OTM3XHU1OWU4XHVmOWRmXHU1ZGYyXHU1ZjFiXHU1ZjViXHU2MDIxXHVmOWUwXHVmOWUxXHVmOWUyXHVmOWUzXHU3MjNlXHU3M2U1XHVmOWU0XHU3NTcwXHU3NWNk'@;
put 'XHVmOWU1XHU3OWZiXHVmOWU2XHU4MDBjXHU4MDMzXHU4MDg0XHU4MmUxXHU4MzUxXHVmOWU3XHVmOWU4XHU4Y2JkXHU4Y2IzXHU5MDg3XHVmOWU5XHVmOWVhXHU5OGY0XHU5OTBjXHVmOWViXHVmOWVjXHU3MDM3XHU3NmNhXHU3ZmNhXHU3ZmNjXHU3ZmZjXHU4YjFhXHU0ZWJhXHU0ZWMxXHU1'@;
put 'MjAzXHU1MzcwXHVmOWVkXHU1NGJkXHU1NmUwXHU1OWZiXHU1YmM1XHU1ZjE1XHU1ZmNkXHU2ZTZlXHVmOWVlXHVmOWVmXHU3ZDZhXHU4MzM1XHVmOWYwXHU4NjkzXHU4YThkXHVmOWYxXHU5NzZkXHU5Nzc3XHVmOWYyXHVmOWYzXHU0ZTAwXHU0ZjVhXHU0ZjdlXHU1OGY5XHU2NWU1XHU2ZWEy'@;
put 'XHU5MDM4XHU5M2IwXHU5OWI5XHU0ZWZiXHU1OGVjXHU1OThhXHU1OWQ5XHU2MDQxXHVmOWY0XHVmOWY1XHU3YTE0XHVmOWY2XHU4MzRmXHU4Y2MzXHU1MTY1XHU1MzQ0XHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjM2XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMzZdW3ZdLmNoYXJDb2Rl'@;
put 'QXQoMCkmJihzZVtrWzIzNl1bdl1dPTYwNDE2K3YsVFs2MDQxNit2XT1rWzIzNl1bdl0pO2ZvcihrWzIzN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZjlmN1x1ZjlmOFx1ZjlmOVx1NGVjZFx1NTI2OVx1NWI1NVx1ODJiZlx1NGVkNFx1NTIzYVx1NTRhOFx1NTljOVx1NTlmZlx1NWI1MFx1NWI1N1x1NWI1Y1x1NjA2M1x1NjE0OFx1NmVjYlx1NzA5OVx1NzE2ZVx1NzM4'@;
put 'Nlx1NzRmN1x1NzViNVx1NzhjMVx1N2QyYlx1ODAwNVx1ODFlYVx1ODMyOFx1ODUxN1x1ODVjOVx1OGFlZVx1OGNjN1x1OTZjY1x1NGY1Y1x1NTJmYVx1NTZiY1x1NjVhYlx1NjYyOFx1NzA3Y1x1NzBiOFx1NzIzNVx1N2RiZFx1ODI4ZFx1OTE0Y1x1OTZjMFx1OWQ3Mlx1NWI3MVx1NjhlN1x1'@;
put 'NmI5OFx1NmY3YVx1NzZkZVx1NWM5MVx1NjZhYlx1NmY1Ylx1N2JiNFx1N2MyYVx1ODgzNlx1OTZkY1x1NGUwOFx1NGVkN1x1NTMyMFx1NTgzNFx1NThiYlx1NThlZlx1NTk2Y1x1NWMwN1x1NWUzM1x1NWU4NFx1NWYzNVx1NjM4Y1x1NjZiMlx1Njc1Nlx1NmExZlx1NmFhM1x1NmIwY1x1NmYz'@;
put 'Zlx1NzI0Nlx1ZjlmYVx1NzM1MFx1NzQ4Ylx1N2FlMFx1N2NhN1x1ODE3OFx1ODFkZlx1ODFlN1x1ODM4YVx1ODQ2Y1x1ODUyM1x1ODU5NFx1ODVjZlx1ODhkZFx1OGQxM1x1OTFhY1x1OTU3N1x1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIzN10ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjM3'@;
put 'XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMzddW3ZdXT02MDY3Mit2LFRbNjA2NzIrdl09a1syMzddW3ZdKTtmb3Ioa1syMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2OWNcdTUxOGRcdTU0YzlcdTU3MjhcdTViYjBcdTYyNGRcdTY3NTBcdTY4M2RcdTY4OTNcdTZlM2RcdTZlZDNcdTcwN2RcdTdlMjFcdTg4YzFcdThjYTFcdThmMDlcdTlmNGJcdTlmNGVcdTcy'@;
put 'MmRcdTdiOGZcdThhY2RcdTkzMWFcdTRmNDdcdTRmNGVcdTUxMzJcdTU0ODBcdTU5ZDBcdTVlOTVcdTYyYjVcdTY3NzVcdTY5NmVcdTZhMTdcdTZjYWVcdTZlMWFcdTcyZDlcdTczMmFcdTc1YmRcdTdiYjhcdTdkMzVcdTgyZTdcdTgzZjlcdTg0NTdcdTg1ZjdcdThhNWJcdThjYWZcdThlODdc'@;
put 'dTkwMTlcdTkwYjhcdTk2Y2VcdTlmNWZcdTUyZTNcdTU0MGFcdTVhZTFcdTViYzJcdTY0NThcdTY1NzVcdTZlZjRcdTcyYzRcdWY5ZmJcdTc2ODRcdTdhNGRcdTdiMWJcdTdjNGRcdTdlM2VcdTdmZGZcdTgzN2JcdThiMmJcdThjY2FcdThkNjRcdThkZTFcdThlNWZcdThmZWFcdThmZjlcdTkw'@;
put 'NjlcdTkzZDFcdTRmNDNcdTRmN2FcdTUwYjNcdTUxNjhcdTUxNzhcdTUyNGRcdTUyNmFcdTU4NjFcdTU4N2NcdTU5NjBcdTVjMDhcdTVjNTVcdTVlZGJcdTYwOWJcdTYyMzBcdTY4MTNcdTZiYmZcdTZjMDhcdTZmYjFcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMzhdLmxlbmd0aDsrK3Yp'@;
put 'NjU1MzMhPT1rWzIzOF1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjM4XVt2XV09NjA5MjgrdixUWzYwOTI4K3ZdPWtbMjM4XVt2XSk7Zm9yKGtbMjM5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MTRlXHU3NDIwXHU3NTMwXHU3NTM4XHU3NTUxXHU3NjcyXHU3YjRjXHU3YjhiXHU3YmFkXHU3YmM2XHU3ZThmXHU4YTZlXHU4ZjNlXHU4ZjQ5XHU5MjNmXHU5MjkzXHU5'@;
put 'MzIyXHU5NDJiXHU5NmZiXHU5ODVhXHU5ODZiXHU5OTFlXHU1MjA3XHU2MjJhXHU2Mjk4XHU2ZDU5XHU3NjY0XHU3YWNhXHU3YmMwXHU3ZDc2XHU1MzYwXHU1Y2JlXHU1ZTk3XHU2ZjM4XHU3MGI5XHU3Yzk4XHU5NzExXHU5YjhlXHU5ZWRlXHU2M2E1XHU2NDdhXHU4Nzc2XHU0ZTAxXHU0ZTk1'@;
put 'XHU0ZWFkXHU1MDVjXHU1MDc1XHU1NDQ4XHU1OWMzXHU1YjlhXHU1ZTQwXHU1ZWFkXHU1ZWY3XHU1ZjgxXHU2MGM1XHU2MzNhXHU2NTNmXHU2NTc0XHU2NWNjXHU2Njc2XHU2Njc4XHU2N2ZlXHU2OTY4XHU2YTg5XHU2YjYzXHU2YzQwXHU2ZGMwXHU2ZGU4XHU2ZTFmXHU2ZTVlXHU3MDFlXHU3'@;
put 'MGExXHU3MzhlXHU3M2ZkXHU3NTNhXHU3NzViXHU3ODg3XHU3OThlXHU3YTBiXHU3YTdkXHU3Y2JlXHU3ZDhlXHU4MjQ3XHU4YTAyXHU4YWVhXHU4YzllXHU5MTJkXHU5MTRhXHU5MWQ4XHU5MjY2XHU5MmNjXHU5MzIwXHU5NzA2XHU5NzU2XHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjM5'@;
put 'XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMzldW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIzOV1bdl1dPTYxMTg0K3YsVFs2MTE4NCt2XT1rWzIzOV1bdl0pO2ZvcihrWzI0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTc1Y1x1OTgwMlx1OWYwZVx1NTIzNlx1NTI5MVx1NTU3Y1x1NTgyNFx1NWUxZFx1NWYxZlx1NjA4Y1x1NjNkMFx1NjhhZlx1NmZkZlx1Nzk2ZFx1'@;
put 'N2IyY1x1ODFjZFx1ODViYVx1ODhmZFx1OGFmOFx1OGU0NFx1OTE4ZFx1OTY2NFx1OTY5Ylx1OTczZFx1OTg0Y1x1OWY0YVx1NGZjZVx1NTE0Nlx1NTFjYlx1NTJhOVx1NTYzMlx1NWYxNFx1NWY2Ylx1NjNhYVx1NjRjZFx1NjVlOVx1NjY0MVx1NjZmYVx1NjZmOVx1NjcxZFx1Njg5ZFx1Njhk'@;
put 'N1x1NjlmZFx1NmYxNVx1NmY2ZVx1NzE2N1x1NzFlNVx1NzIyYVx1NzRhYVx1NzczYVx1Nzk1Nlx1Nzk1YVx1NzlkZlx1N2EyMFx1N2E5NVx1N2M5N1x1N2NkZlx1N2Q0NFx1N2U3MFx1ODA4N1x1ODVmYlx1ODZhNFx1OGE1NFx1OGFiZlx1OGQ5OVx1OGU4MVx1OTAyMFx1OTA2ZFx1OTFlM1x1'@;
put 'OTYzYlx1OTZkNVx1OWNlNVx1NjVjZlx1N2MwN1x1OGRiM1x1OTNjM1x1NWI1OFx1NWMwYVx1NTM1Mlx1NjJkOVx1NzMxZFx1NTAyN1x1NWI5N1x1NWY5ZVx1NjBiMFx1NjE2Ylx1NjhkNVx1NmRkOVx1NzQyZVx1N2EyZVx1N2Q0Mlx1N2Q5Y1x1N2UzMVx1ODE2Ylx1ZmZmZCIuc3BsaXQoIiIp'@;
put 'LHY9MDt2IT1rWzI0MF0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjQwXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syNDBdW3ZdXT02MTQ0MCt2LFRbNjE0NDArdl09a1syNDBdW3ZdKTtmb3Ioa1syNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThlMmFcdThlMzVcdTkzN2VcdTk0MThcdTRmNTBcdTU3NTBcdTVkZTZcdTVlYTdcdTYzMmJcdTdmNmFcdTRlM2JcdTRmNGZc'@;
put 'dTRmOGZcdTUwNWFcdTU5ZGRcdTgwYzRcdTU0NmFcdTU0NjhcdTU1ZmVcdTU5NGZcdTViOTlcdTVkZGVcdTVlZGFcdTY2NWRcdTY3MzFcdTY3ZjFcdTY4MmFcdTZjZThcdTZkMzJcdTZlNGFcdTZmOGRcdTcwYjdcdTczZTBcdTc1ODdcdTdjNGNcdTdkMDJcdTdkMmNcdTdkYTJcdTgyMWZcdTg2'@;
put 'ZGJcdThhM2JcdThhODVcdThkNzBcdThlOGFcdThmMzNcdTkwMzFcdTkxNGVcdTkxNTJcdTk0NDRcdTk5ZDBcdTdhZjlcdTdjYTVcdTRmY2FcdTUxMDFcdTUxYzZcdTU3YzhcdTViZWZcdTVjZmJcdTY2NTlcdTZhM2RcdTZkNWFcdTZlOTZcdTZmZWNcdTcxMGNcdTc1NmZcdTdhZTNcdTg4MjJc'@;
put 'dTkwMjFcdTkwNzVcdTk2Y2JcdTk5ZmZcdTgzMDFcdTRlMmRcdTRlZjJcdTg4NDZcdTkxY2RcdTUzN2RcdTZhZGJcdTY5NmJcdTZjNDFcdTg0N2FcdTU4OWVcdTYxOGVcdTY2ZmVcdTYyZWZcdTcwZGRcdTc1MTFcdTc1YzdcdTdlNTJcdTg0YjhcdThiNDlcdThkMDhcdTRlNGJcdTUzZWFcdWZm'@;
put 'ZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syNDFdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzI0MV1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjQxXVt2XV09NjE2OTYrdixUWzYxNjk2K3ZdPWtbMjQxXVt2XSk7Zm9yKGtbMjQyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NGFiXHU1NzMwXHU1NzQwXHU1ZmQ3XHU2MzAxXHU2MzA3XHU2NDZmXHU2NTJmXHU2NWU4XHU2Njdh'@;
put 'XHU2NzlkXHU2N2IzXHU2YjYyXHU2YzYwXHU2YzlhXHU2ZjJjXHU3N2U1XHU3ODI1XHU3OTQ5XHU3OTU3XHU3ZDE5XHU4MGEyXHU4MTAyXHU4MWYzXHU4MjlkXHU4MmI3XHU4NzE4XHU4YThjXHVmOWZjXHU4ZDA0XHU4ZGJlXHU5MDcyXHU3NmY0XHU3YTE5XHU3YTM3XHU3ZTU0XHU4MDc3XHU1'@;
put 'NTA3XHU1NWQ0XHU1ODc1XHU2MzJmXHU2NDIyXHU2NjQ5XHU2NjRiXHU2ODZkXHU2OTliXHU2Yjg0XHU2ZDI1XHU2ZWIxXHU3M2NkXHU3NDY4XHU3NGExXHU3NTViXHU3NWI5XHU3NmUxXHU3NzFlXHU3NzhiXHU3OWU2XHU3ZTA5XHU3ZTFkXHU4MWZiXHU4NTJmXHU4ODk3XHU4YTNhXHU4Y2Qx'@;
put 'XHU4ZWViXHU4ZmIwXHU5MDMyXHU5M2FkXHU5NjYzXHU5NjczXHU5NzA3XHU0Zjg0XHU1M2YxXHU1OWVhXHU1YWM5XHU1ZTE5XHU2ODRlXHU3NGM2XHU3NWJlXHU3OWU5XHU3YTkyXHU4MWEzXHU4NmVkXHU4Y2VhXHU4ZGNjXHU4ZmVkXHU2NTlmXHU2NzE1XHVmOWZkXHU1N2Y3XHU2ZjU3XHU3'@;
put 'ZGRkXHU4ZjJmXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjQyXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syNDJdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzI0Ml1bdl1dPTYxOTUyK3YsVFs2MTk1Mit2XT1rWzI0Ml1bdl0pO2ZvcihrWzI0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTNmNlx1OTZjNlx1NWZiNVx1NjFmMlx1NmY4NFx1NGUxNFx1NGY5OFx1NTAx'@;
put 'Zlx1NTNjOVx1NTVkZlx1NWQ2Zlx1NWRlZVx1NmIyMVx1NmI2NFx1NzhjYlx1N2I5YVx1ZjlmZVx1OGU0OVx1OGVjYVx1OTA2ZVx1NjM0OVx1NjQzZVx1Nzc0MFx1N2E4NFx1OTMyZlx1OTQ3Zlx1OWY2YVx1NjRiMFx1NmZhZlx1NzFlNlx1NzRhOFx1NzRkYVx1N2FjNFx1N2MxMlx1N2U4Mlx1'@;
put 'N2NiMlx1N2U5OFx1OGI5YVx1OGQwYVx1OTQ3ZFx1OTkxMFx1OTk0Y1x1NTIzOVx1NWJkZlx1NjRlNlx1NjcyZFx1N2QyZVx1NTBlZFx1NTNjM1x1NTg3OVx1NjE1OFx1NjE1OVx1NjFmYVx1NjVhY1x1N2FkOVx1OGI5Mlx1OGI5Nlx1NTAwOVx1NTAyMVx1NTI3NVx1NTUzMVx1NWEzY1x1NWVl'@;
put 'MFx1NWY3MFx1NjEzNFx1NjU1ZVx1NjYwY1x1NjYzNlx1NjZhMlx1NjljZFx1NmVjNFx1NmYzMlx1NzMxNlx1NzYyMVx1N2E5M1x1ODEzOVx1ODI1OVx1ODNkNlx1ODRiY1x1NTBiNVx1NTdmMFx1NWJjMFx1NWJlOFx1NWY2OVx1NjNhMVx1NzgyNlx1N2RiNVx1ODNkY1x1ODUyMVx1OTFjN1x1'@;
put 'OTFmNVx1NTE4YVx1NjdmNVx1N2I1Nlx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzI0M10ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjQzXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syNDNdW3ZdXT02MjIwOCt2LFRbNjIyMDgrdl09a1syNDNdW3ZdKTtmb3Ioa1syNDRdPSJcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThjYWNcdTUxYzRcdTU5YmJcdTYwYmRcdTg2NTVcdTUw'@;
put 'MWNcdWY5ZmZcdTUyNTRcdTVjM2FcdTYxN2RcdTYyMWFcdTYyZDNcdTY0ZjJcdTY1YTVcdTZlY2NcdTc2MjBcdTgxMGFcdThlNjBcdTk2NWZcdTk2YmJcdTRlZGZcdTUzNDNcdTU1OThcdTU5MjlcdTVkZGRcdTY0YzVcdTZjYzlcdTZkZmFcdTczOTRcdTdhN2ZcdTgyMWJcdTg1YTZcdThjZTRc'@;
put 'dThlMTBcdTkwNzdcdTkxZTdcdTk1ZTFcdTk2MjFcdTk3YzZcdTUxZjhcdTU0ZjJcdTU1ODZcdTVmYjlcdTY0YTRcdTZmODhcdTdkYjRcdThmMWZcdThmNGRcdTk0MzVcdTUwYzlcdTVjMTZcdTZjYmVcdTZkZmJcdTc1MWJcdTc3YmJcdTdjM2RcdTdjNjRcdThhNzlcdThhYzJcdTU4MWVcdTU5'@;
put 'YmVcdTVlMTZcdTYzNzdcdTcyNTJcdTc1OGFcdTc3NmJcdThhZGNcdThjYmNcdThmMTJcdTVlZjNcdTY2NzRcdTZkZjhcdTgwN2RcdTgzYzFcdThhY2JcdTk3NTFcdTliZDZcdWZhMDBcdTUyNDNcdTY2ZmZcdTZkOTVcdTZlZWZcdTdkZTBcdThhZTZcdTkwMmVcdTkwNWVcdTlhZDRcdTUyMWRc'@;
put 'dTUyN2ZcdTU0ZThcdTYxOTRcdTYyODRcdTYyZGJcdTY4YTJcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syNDRdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzI0NF1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjQ0XVt2XV09NjI0NjQrdixUWzYyNDY0K3ZdPWtbMjQ0XVt2XSk7Zm9yKGtbMjQ1'@;
put 'XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2OTEyXHU2OTVhXHU2YTM1XHU3'@;
put 'MDkyXHU3MTI2XHU3ODVkXHU3OTAxXHU3OTBlXHU3OWQyXHU3YTBkXHU4MDk2XHU4Mjc4XHU4MmQ1XHU4MzQ5XHU4NTQ5XHU4YzgyXHU4ZDg1XHU5MTYyXHU5MThiXHU5MWFlXHU0ZmMzXHU1NmQxXHU3MWVkXHU3N2Q3XHU4NzAwXHU4OWY4XHU1YmY4XHU1ZmQ2XHU2NzUxXHU5MGE4XHU1M2Uy'@;
put 'XHU1ODVhXHU1YmY1XHU2MGE0XHU2MTgxXHU2NDYwXHU3ZTNkXHU4MDcwXHU4NTI1XHU5MjgzXHU2NGFlXHU1MGFjXHU1ZDE0XHU2NzAwXHU1ODljXHU2MmJkXHU2M2E4XHU2OTBlXHU2OTc4XHU2YTFlXHU2ZTZiXHU3NmJhXHU3OWNiXHU4MmJiXHU4NDI5XHU4YWNmXHU4ZGE4XHU4ZmZkXHU5'@;
put 'MTEyXHU5MTRiXHU5MTljXHU5MzEwXHU5MzE4XHU5MzlhXHU5NmRiXHU5YTM2XHU5YzBkXHU0ZTExXHU3NTVjXHU3OTVkXHU3YWZhXHU3YjUxXHU3YmM5XHU3ZTJlXHU4NGM0XHU4ZTU5XHU4ZTc0XHU4ZWY4XHU5MDEwXHU2NjI1XHU2OTNmXHU3NDQzXHU1MWZhXHU2NzJlXHU5ZWRjXHU1MTQ1'@;
put 'XHU1ZmUwXHU2Yzk2XHU4N2YyXHU4ODVkXHU4ODc3XHU2MGI0XHU4MWI1XHU4NDAzXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjQ1XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syNDVdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzI0NV1bdl1dPTYyNzIwK3YsVFs2MjcyMCt2XT1rWzI0NV1b'@;
put 'dl0pO2ZvcihrWzI0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGQwNVx1'@;
put 'NTNkNlx1NTQzOVx1NTYzNFx1NWEzNlx1NWMzMVx1NzA4YVx1N2ZlMFx1ODA1YVx1ODEwNlx1ODFlZFx1OGRhM1x1OTE4OVx1OWE1Zlx1OWRmMlx1NTA3NFx1NGVjNFx1NTNhMFx1NjBmYlx1NmUyY1x1NWM2NFx1NGY4OFx1NTAyNFx1NTVlNFx1NWNkOVx1NWU1Zlx1NjA2NVx1Njg5NFx1NmNi'@;
put 'Ylx1NmRjNFx1NzFiZVx1NzVkNFx1NzVmNFx1NzY2MVx1N2ExYVx1N2E0OVx1N2RjN1x1N2RmYlx1N2Y2ZVx1ODFmNFx1ODZhOVx1OGYxY1x1OTZjOVx1OTliM1x1OWY1Mlx1NTI0N1x1NTJjNVx1OThlZFx1ODlhYVx1NGUwM1x1NjdkMlx1NmYwNlx1NGZiNVx1NWJlMlx1Njc5NVx1NmM4OFx1'@;
put 'NmQ3OFx1NzQxYlx1NzgyN1x1OTFkZFx1OTM3Y1x1ODdjNFx1NzllNFx1N2EzMVx1NWZlYlx1NGVkNlx1NTRhNFx1NTUzZVx1NThhZVx1NTlhNVx1NjBmMFx1NjI1M1x1NjJkNlx1NjczNlx1Njk1NVx1ODIzNVx1OTY0MFx1OTliMVx1OTlkZFx1NTAyY1x1NTM1M1x1NTU0NFx1NTc3Y1x1ZmEw'@;
put 'MVx1NjI1OFx1ZmEwMlx1NjRlMlx1NjY2Ylx1NjdkZFx1NmZjMVx1NmZlZlx1NzQyMlx1NzQzOFx1OGExN1x1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzI0Nl0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjQ2XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syNDZdW3ZdXT02Mjk3Nit2LFRbNjI5'@;
put 'NzYrdl09a1syNDZdW3ZdKTtmb3Ioa1syNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdTk0MzhcdTU0NTFcdTU2MDZcdTU3NjZcdTVmNDhcdTYxOWFcdTZiNGVcdTcwNThcdTcwYWRcdTdkYmJcdThhOTVcdTU5NmFcdTgxMmJcdTYzYTJcdTc3MDhcdTgwM2RcdThjYWFcdTU4NTRcdTY0MmRcdTY5YmJcdTViOTVcdTVlMTFcdTZlNmZcdWZhMDNcdTg1NjlcdTUxNGNcdTUz'@;
put 'ZjBcdTU5MmFcdTYwMjBcdTYxNGJcdTZiODZcdTZjNzBcdTZjZjBcdTdiMWVcdTgwY2VcdTgyZDRcdThkYzZcdTkwYjBcdTk4YjFcdWZhMDRcdTY0YzdcdTZmYTRcdTY0OTFcdTY1MDRcdTUxNGVcdTU0MTBcdTU3MWZcdThhMGVcdTYxNWZcdTY4NzZcdWZhMDVcdTc1ZGJcdTdiNTJcdTdkNzFc'@;
put 'dTkwMWFcdTU4MDZcdTY5Y2NcdTgxN2ZcdTg5MmFcdTkwMDBcdTk4MzlcdTUwNzhcdTU5NTdcdTU5YWNcdTYyOTVcdTkwMGZcdTliMmFcdTYxNWRcdTcyNzlcdTk1ZDZcdTU3NjFcdTVhNDZcdTVkZjRcdTYyOGFcdTY0YWRcdTY0ZmFcdTY3NzdcdTZjZTJcdTZkM2VcdTcyMmNcdTc0MzZcdTc4'@;
put 'MzRcdTdmNzdcdTgyYWRcdThkZGJcdTk4MTdcdTUyMjRcdTU3NDJcdTY3N2ZcdTcyNDhcdTc0ZTNcdThjYTlcdThmYTZcdTkyMTFcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syNDddLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzI0N11bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjQ3XVt2XV09'@;
put 'NjMyMzIrdixUWzYzMjMyK3ZdPWtbMjQ3XVt2XSk7Zm9yKGtbMjQ4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHU5NjJhXHU1MTZiXHU1M2VkXHU2MzRjXHU0ZjY5XHU1NTA0XHU2MDk2XHU2NTU3XHU2YzliXHU2ZDdmXHU3MjRjXHU3MmZkXHU3YTE3XHU4OTg3XHU4YzlkXHU1ZjZkXHU2ZjhlXHU3MGY5XHU4MWE4XHU2MTBlXHU0ZmJmXHU1MDRmXHU2MjQxXHU3MjQ3XHU3'@;
put 'YmM3XHU3ZGU4XHU3ZmU5XHU5MDRkXHU5N2FkXHU5YTE5XHU4Y2I2XHU1NzZhXHU1ZTczXHU2N2IwXHU4NDBkXHU4YTU1XHU1NDIwXHU1YjE2XHU1ZTYzXHU1ZWUyXHU1ZjBhXHU2NTgzXHU4MGJhXHU4NTNkXHU5NTg5XHU5NjViXHU0ZjQ4XHU1MzA1XHU1MzBkXHU1MzBmXHU1NDg2XHU1NGZh'@;
put 'XHU1NzAzXHU1ZTAzXHU2MDE2XHU2MjliXHU2MmIxXHU2MzU1XHVmYTA2XHU2Y2UxXHU2ZDY2XHU3NWIxXHU3ODMyXHU4MGRlXHU4MTJmXHU4MmRlXHU4NDYxXHU4NGIyXHU4ODhkXHU4OTEyXHU5MDBiXHU5MmVhXHU5OGZkXHU5YjkxXHU1ZTQ1XHU2NmI0XHU2NmRkXHU3MDExXHU3MjA2XHVm'@;
put 'YTA3XHU0ZmY1XHU1MjdkXHU1ZjZhXHU2MTUzXHU2NzUzXHU2YTE5XHU2ZjAyXHU3NGUyXHU3OTY4XHU4ODY4XHU4Yzc5XHU5OGM3XHU5OGM0XHU5YTQzXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjQ4XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syNDhdW3ZdLmNoYXJDb2RlQXQoMCkmJihz'@;
put 'ZVtrWzI0OF1bdl1dPTYzNDg4K3YsVFs2MzQ4OCt2XT1rWzI0OF1bdl0pO2ZvcihrWzI0OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRjMVx1N2ExZlx1Njk1M1x1OGFmN1x1OGM0YVx1OThhOFx1OTlhZVx1NWY3Y1x1NjJhYlx1NzViMlx1NzZhZVx1ODhhYlx1OTA3Zlx1OTY0Mlx1NTMzOVx1NWYzY1x1NWZjNVx1NmNjY1x1NzNjY1x1NzU2Mlx1NzU4Ylx1N2I0Nlx1'@;
put 'ODJmZVx1OTk5ZFx1NGU0Zlx1OTAzY1x1NGUwYlx1NGY1NVx1NTNhNlx1NTkwZlx1NWVjOFx1NjYzMFx1NmNiM1x1NzQ1NVx1ODM3N1x1ODc2Nlx1OGNjMFx1OTA1MFx1OTcxZVx1OWMxNVx1NThkMVx1NWI3OFx1ODY1MFx1OGIxNFx1OWRiNFx1NWJkMlx1NjA2OFx1NjA4ZFx1NjVmMVx1NmM1'@;
put 'N1x1NmYyMlx1NmZhM1x1NzAxYVx1N2Y1NVx1N2ZmMFx1OTU5MVx1OTU5Mlx1OTY1MFx1OTdkM1x1NTI3Mlx1OGY0NFx1NTFmZFx1NTQyYlx1NTRiOFx1NTU2M1x1NTU4YVx1NmFiYlx1NmRiNVx1N2RkOFx1ODI2Nlx1OTI5Y1x1OTY3N1x1OWU3OVx1NTQwOFx1NTRjOFx1NzZkMlx1ODZlNFx1'@;
put 'OTVhNFx1OTVkNFx1OTY1Y1x1NGVhMlx1NGYwOVx1NTllZVx1NWFlNlx1NWRmN1x1NjA1Mlx1NjI5N1x1Njc2ZFx1Njg0MVx1NmM4Nlx1NmUyZlx1N2YzOFx1ODA5Ylx1ODIyYVx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzI0OV0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjQ5XVt2XS5jaGFy'@;
put 'Q29kZUF0KDApJiYoc2Vba1syNDldW3ZdXT02Mzc0NCt2LFRbNjM3NDQrdl09a1syNDldW3ZdKTtmb3Ioa1syNTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZhMDhcdWZhMDlcdTk4MDVcdTRlYTVcdTUwNTVcdTU0YjNcdTU3OTNcdTU5NWFcdTViNjlcdTViYjNcdTYxYzhcdTY5NzdcdTZkNzdcdTcwMjNcdTg3ZjlcdTg5ZTNcdThhNzJcdThhZTdcdTkwODJcdTk5ZWRc'@;
put 'dTlhYjhcdTUyYmVcdTY4MzhcdTUwMTZcdTVlNzhcdTY3NGZcdTgzNDdcdTg4NGNcdTRlYWJcdTU0MTFcdTU2YWVcdTczZTZcdTkxMTVcdTk3ZmZcdTk5MDlcdTk5NTdcdTk5OTlcdTU2NTNcdTU4OWZcdTg2NWJcdThhMzFcdTYxYjJcdTZhZjZcdTczN2JcdThlZDJcdTZiNDdcdTk2YWFcdTlh'@;
put 'NTdcdTU5NTVcdTcyMDBcdThkNmJcdTk3NjlcdTRmZDRcdTVjZjRcdTVmMjZcdTYxZjhcdTY2NWJcdTZjZWJcdTcwYWJcdTczODRcdTczYjlcdTczZmVcdTc3MjlcdTc3NGRcdTdkNDNcdTdkNjJcdTdlMjNcdTgyMzdcdTg4NTJcdWZhMGFcdThjZTJcdTkyNDlcdTk4NmZcdTViNTFcdTdhNzRc'@;
put 'dTg4NDBcdTk4MDFcdTVhY2NcdTRmZTBcdTUzNTRcdTU5M2VcdTVjZmRcdTYzM2VcdTZkNzlcdTcyZjlcdTgxMDVcdTgxMDdcdTgzYTJcdTkyY2ZcdTk4MzBcdTRlYThcdTUxNDRcdTUyMTFcdTU3OGJcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syNTBdLmxlbmd0aDsrK3YpNjU1MzMhPT1r'@;
put 'WzI1MF1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjUwXVt2XV09NjRlMyt2LFRbNjRlMyt2XT1rWzI1MF1bdl0pO2ZvcihrWzI1MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWY2Mlx1NmNjMlx1NmVjZVx1NzAwNVx1NzA1MFx1NzBhZlx1NzE5Mlx1NzNlOVx1NzQ2OVx1ODM0YVx1ODdhMlx1ODg2MVx1OTAwOFx1OTBhMlx1OTNhM1x1OTlhOFx1NTE2ZVx1NWY1N1x1'@;
put 'NjBlMFx1NjE2N1x1NjZiM1x1ODU1OVx1OGU0YVx1OTFhZlx1OTc4Ylx1NGU0ZVx1NGU5Mlx1NTQ3Y1x1NThkNVx1NThmYVx1NTk3ZFx1NWNiNVx1NWYyN1x1NjIzNlx1NjI0OFx1NjYwYVx1NjY2N1x1NmJlYlx1NmQ2OVx1NmRjZlx1NmU1Nlx1NmVmOFx1NmY5NFx1NmZlMFx1NmZlOVx1NzA1'@;
put 'ZFx1NzJkMFx1NzQyNVx1NzQ1YVx1NzRlMFx1NzY5M1x1Nzk1Y1x1N2NjYVx1N2UxZVx1ODBlMVx1ODJhNlx1ODQ2Ylx1ODRiZlx1ODY0ZVx1ODY1Zlx1ODc3NFx1OGI3N1x1OGM2YVx1OTNhY1x1OTgwMFx1OTg2NVx1NjBkMVx1NjIxNlx1OTE3N1x1NWE1YVx1NjYwZlx1NmRmN1x1NmUzZVx1'@;
put 'NzQzZlx1OWI0Mlx1NWZmZFx1NjBkYVx1N2IwZlx1NTRjNFx1NWYxOFx1NmM1ZVx1NmNkM1x1NmQyYVx1NzBkOFx1N2QwNVx1ODY3OVx1OGEwY1x1OWQzYlx1NTMxNlx1NTQ4Y1x1NWIwNVx1NmEzYVx1NzA2Ylx1NzU3NVx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzI1MV0ubGVuZ3RoOysr'@;
put 'dik2NTUzMyE9PWtbMjUxXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syNTFdW3ZdXT02NDI1Nit2LFRbNjQyNTYrdl09a1syNTFdW3ZdKTtmb3Ioa1syNTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5OGRcdTc5YmVcdTgyYjFcdTgzZWZcdThhNzFcdThiNDFcdThjYThcdTk3NzRcdWZhMGJcdTY0ZjRcdTY1MmJcdTc4YmFcdTc4YmJcdTdhNmJcdTRlMzhcdTU1OWFc'@;
put 'dTU5NTBcdTViYTZcdTVlN2JcdTYwYTNcdTYzZGJcdTZiNjFcdTY2NjVcdTY4NTNcdTZlMTlcdTcxNjVcdTc0YjBcdTdkMDhcdTkwODRcdTlhNjlcdTljMjVcdTZkM2JcdTZlZDFcdTczM2VcdThjNDFcdTk1Y2FcdTUxZjBcdTVlNGNcdTVmYThcdTYwNGRcdTYwZjZcdTYxMzBcdTYxNGNcdTY2'@;
put 'NDNcdTY2NDRcdTY5YTVcdTZjYzFcdTZlNWZcdTZlYzlcdTZmNjJcdTcxNGNcdTc0OWNcdTc2ODdcdTdiYzFcdTdjMjdcdTgzNTJcdTg3NTdcdTkwNTFcdTk2OGRcdTllYzNcdTUzMmZcdTU2ZGVcdTVlZmJcdTVmOGFcdTYwNjJcdTYwOTRcdTYxZjdcdTY2NjZcdTY3MDNcdTZhOWNcdTZkZWVc'@;
put 'dTZmYWVcdTcwNzBcdTczNmFcdTdlNmFcdTgxYmVcdTgzMzRcdTg2ZDRcdThhYThcdThjYzRcdTUyODNcdTczNzJcdTViOTZcdTZhNmJcdTk0MDRcdTU0ZWVcdTU2ODZcdTViNWRcdTY1NDhcdTY1ODVcdTY2YzlcdTY4OWZcdTZkOGRcdTZkYzZcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sy'@;
put 'NTJdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzI1Ml1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjUyXVt2XV09NjQ1MTIrdixUWzY0NTEyK3ZdPWtbMjUyXVt2XSk7Zm9yKGtbMjUzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MjNiXHU4MGI0XHU5MTc1XHU5YTRkXHU0ZmFmXHU1MDE5XHU1MzlhXHU1NDBlXHU1NDNjXHU1NTg5XHU1NWM1XHU1ZTNmXHU1ZjhjXHU2NzNk'@;
put 'XHU3MTY2XHU3M2RkXHU5MDA1XHU1MmRiXHU1MmYzXHU1ODY0XHU1OGNlXHU3MTA0XHU3MThmXHU3MWZiXHU4NWIwXHU4YTEzXHU2Njg4XHU4NWE4XHU1NWE3XHU2Njg0XHU3MTRhXHU4NDMxXHU1MzQ5XHU1NTk5XHU2YmMxXHU1ZjU5XHU1ZmJkXHU2M2VlXHU2Njg5XHU3MTQ3XHU4YWYxXHU4'@;
put 'ZjFkXHU5ZWJlXHU0ZjExXHU2NDNhXHU3MGNiXHU3NTY2XHU4NjY3XHU2MDY0XHU4YjRlXHU5ZGY4XHU1MTQ3XHU1MWY2XHU1MzA4XHU2ZDM2XHU4MGY4XHU5ZWQxXHU2NjE1XHU2YjIzXHU3MDk4XHU3NWQ1XHU1NDAzXHU1Yzc5XHU3ZDA3XHU4YTE2XHU2YjIwXHU2YjNkXHU2YjQ2XHU1NDM4'@;
put 'XHU2MDcwXHU2ZDNkXHU3ZmQ1XHU4MjA4XHU1MGQ2XHU1MWRlXHU1NTljXHU1NjZiXHU1NmNkXHU1OWVjXHU1YjA5XHU1ZTBjXHU2MTk5XHU2MTk4XHU2MjMxXHU2NjVlXHU2NmU2XHU3MTk5XHU3MWI5XHU3MWJhXHU3MmE3XHU3OWE3XHU3YTAwXHU3ZmIyXHU4YTcwXHVmZmZkIi5zcGxpdCgi'@;
put 'Iiksdj0wO3YhPWtbMjUzXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syNTNdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzI1M11bdl1dPTY0NzY4K3YsVFs2NDc2OCt2XT1rWzI1M11bdl0pO3JldHVybntlbmM6c2UsZGVjOlR9fSgpLHplWzk1MF09ZnVuY3Rpb24oKXt2YXIgdixUPVtdLHNlPXt9'@;
put 'LGs9W107Zm9yKGtbMF09IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BB'@;
put 'QkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMF0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMF1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMF1bdl1dPTArdixUWzArdl09a1swXVt2XSk7Zm9yKGtbMTYxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHUzMDAwXHVmZjBjXHUzMDAxXHUzMDAyXHVmZjBlXHUyMDI3XHVmZjFiXHVmZjFhXHVmZjFmXHVmZjAxXHVmZTMwXHUyMDI2XHUyMDI1XHVmZTUwXHVmZTUxXHVmZTUyXHhiN1x1ZmU1NFx1ZmU1NVx1ZmU1Nlx1ZmU1N1x1ZmY1Y1x1MjAxM1x1ZmUzMVx1MjAxNFx1ZmUzM1x1'@;
put 'MjU3NFx1ZmUzNFx1ZmU0Zlx1ZmYwOFx1ZmYwOVx1ZmUzNVx1ZmUzNlx1ZmY1Ylx1ZmY1ZFx1ZmUzN1x1ZmUzOFx1MzAxNFx1MzAxNVx1ZmUzOVx1ZmUzYVx1MzAxMFx1MzAxMVx1ZmUzYlx1ZmUzY1x1MzAwYVx1MzAwYlx1ZmUzZFx1ZmUzZVx1MzAwOFx1MzAwOVx1ZmUzZlx1ZmU0MFx1MzAw'@;
put 'Y1x1MzAwZFx1ZmU0MVx1ZmU0Mlx1MzAwZVx1MzAwZlx1ZmU0M1x1ZmU0NFx1ZmU1OVx1ZmU1YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmU1Ylx1ZmU1Y1x1ZmU1ZFx1ZmU1ZVx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MzAxZFx1MzAxZVx1MjAzNVx1MjAz'@;
put 'Mlx1ZmYwM1x1ZmYwNlx1ZmYwYVx1MjAzYlx4YTdcdTMwMDNcdTI1Y2JcdTI1Y2ZcdTI1YjNcdTI1YjJcdTI1Y2VcdTI2MDZcdTI2MDVcdTI1YzdcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YmRcdTI1YmNcdTMyYTNcdTIxMDVceGFmXHVmZmUzXHVmZjNmXHUwMmNkXHVmZTQ5XHVmZTRhXHVmZTRk'@;
put 'XHVmZTRlXHVmZTRiXHVmZTRjXHVmZTVmXHVmZTYwXHVmZTYxXHVmZjBiXHVmZjBkXHhkN1x4ZjdceGIxXHUyMjFhXHVmZjFjXHVmZjFlXHVmZjFkXHUyMjY2XHUyMjY3XHUyMjYwXHUyMjFlXHUyMjUyXHUyMjYxXHVmZTYyXHVmZTYzXHVmZTY0XHVmZTY1XHVmZTY2XHVmZjVlXHUyMjI5XHUy'@;
put 'MjJhXHUyMmE1XHUyMjIwXHUyMjFmXHUyMmJmXHUzM2QyXHUzM2QxXHUyMjJiXHUyMjJlXHUyMjM1XHUyMjM0XHUyNjQwXHUyNjQyXHUyMjk1XHUyMjk5XHUyMTkxXHUyMTkzXHUyMTkwXHUyMTkyXHUyMTk2XHUyMTk3XHUyMTk5XHUyMTk4XHUyMjI1XHUyMjIzXHVmZjBmXHVmZmZkIi5zcGxp'@;
put 'dCgiIiksdj0wO3YhPWtbMTYxXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxNjFdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE2MV1bdl1dPTQxMjE2K3YsVFs0MTIxNit2XT1rWzE2MV1bdl0pO2ZvcihrWzE2Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmYzY1x1MjIxNVx1ZmU2OFx1ZmYwNFx1ZmZlNVx1MzAxMlx1ZmZlMFx1ZmZlMVx1ZmYwNVx1ZmYyMFx1MjEwM1x1MjEwOVx1ZmU2OVx1ZmU2YVx1ZmU2Ylx1MzNkNVx1MzM5Y1x1MzM5ZFx1MzM5ZVx1MzNjZVx1MzNhMVx1MzM4ZVx1MzM4Zlx1MzNjNFx4YjBcdTUxNTlc'@;
put 'dTUxNWJcdTUxNWVcdTUxNWRcdTUxNjFcdTUxNjNcdTU1ZTdcdTc0ZTlcdTdjY2VcdTI1ODFcdTI1ODJcdTI1ODNcdTI1ODRcdTI1ODVcdTI1ODZcdTI1ODdcdTI1ODhcdTI1OGZcdTI1OGVcdTI1OGRcdTI1OGNcdTI1OGJcdTI1OGFcdTI1ODlcdTI1M2NcdTI1MzRcdTI1MmNcdTI1MjRcdTI1'@;
put 'MWNcdTI1OTRcdTI1MDBcdTI1MDJcdTI1OTVcdTI1MGNcdTI1MTBcdTI1MTRcdTI1MThcdTI1NmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI1NmVcdTI1NzBcdTI1NmZcdTI1NTBcdTI1NWVcdTI1NmFcdTI1NjFcdTI1ZTJcdTI1ZTNcdTI1ZTVcdTI1ZTRcdTI1'@;
put 'NzFcdTI1NzJcdTI1NzNcdWZmMTBcdWZmMTFcdWZmMTJcdWZmMTNcdWZmMTRcdWZmMTVcdWZmMTZcdWZmMTdcdWZmMThcdWZmMTlcdTIxNjBcdTIxNjFcdTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdTMwMjFcdTMwMjJcdTMwMjNcdTMwMjRcdTMwMjVc'@;
put 'dTMwMjZcdTMwMjdcdTMwMjhcdTMwMjlcdTUzNDFcdTUzNDRcdTUzNDVcdWZmMjFcdWZmMjJcdWZmMjNcdWZmMjRcdWZmMjVcdWZmMjZcdWZmMjdcdWZmMjhcdWZmMjlcdWZmMmFcdWZmMmJcdWZmMmNcdWZmMmRcdWZmMmVcdWZmMmZcdWZmMzBcdWZmMzFcdWZmMzJcdWZmMzNcdWZmMzRcdWZm'@;
put 'MzVcdWZmMzZcdWZmMzdcdWZmMzhcdWZmMzlcdWZmM2FcdWZmNDFcdWZmNDJcdWZmNDNcdWZmNDRcdWZmNDVcdWZmNDZcdWZmNDdcdWZmNDhcdWZmNDlcdWZmNGFcdWZmNGJcdWZmNGNcdWZmNGRcdWZmNGVcdWZmNGZcdWZmNTBcdWZmNTFcdWZmNTJcdWZmNTNcdWZmNTRcdWZmNTVcdWZmNTZc'@;
put 'dWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxNjJdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE2Ml1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTYyXVt2XV09NDE0NzIrdixUWzQxNDcyK3ZdPWtbMTYyXVt2XSk7Zm9yKGtbMTYzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjU3XHVmZjU4XHVmZjU5XHVmZjVhXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHUwM2EzXHUwM2E0XHUwM2E1'@;
put 'XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUw'@;
put 'M2M5XHUzMTA1XHUzMTA2XHUzMTA3XHUzMTA4XHUzMTA5XHUzMTBhXHUzMTBiXHUzMTBjXHUzMTBkXHUzMTBlXHUzMTBmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMTEwXHUzMTExXHUzMTEyXHUzMTEzXHUzMTE0XHUzMTE1XHUzMTE2XHUzMTE3XHUzMTE4XHUz'@;
put 'MTE5XHUzMTFhXHUzMTFiXHUzMTFjXHUzMTFkXHUzMTFlXHUzMTFmXHUzMTIwXHUzMTIxXHUzMTIyXHUzMTIzXHUzMTI0XHUzMTI1XHUzMTI2XHUzMTI3XHUzMTI4XHUzMTI5XHUwMmQ5XHUwMmM5XHUwMmNhXHUwMmM3XHUwMmNiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUy'@;
put 'MGFjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTYzXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxNjNdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE2M11bdl1dPTQxNzI4K3YsVFs0MTcyOCt2XT1rWzE2M11bdl0pO2ZvcihrWzE2NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUwMFx1NGU1OVx1NGUwMVx1NGUwM1x1NGU0M1x1NGU1ZFx1NGU4Nlx1NGU4Y1x1NGViYVx1NTEzZlx1NTE2NVx1NTE2Ylx1NTFlMFx1NTIwMFx1NTIwMVx1NTI5Ylx1NTMxNVx1NTM0MVx1NTM1Y1x1NTNjOFx1NGUwOVx1NGUw'@;
put 'Ylx1NGUwOFx1NGUwYVx1NGUyYlx1NGUzOFx1NTFlMVx1NGU0NVx1NGU0OFx1NGU1Zlx1NGU1ZVx1NGU4ZVx1NGVhMVx1NTE0MFx1NTIwM1x1NTJmYVx1NTM0M1x1NTNjOVx1NTNlM1x1NTcxZlx1NThlYlx1NTkxNVx1NTkyN1x1NTk3M1x1NWI1MFx1NWI1MVx1NWI1M1x1NWJmOFx1NWMwZlx1'@;
put 'NWMyMlx1NWMzOFx1NWM3MVx1NWRkZFx1NWRlNVx1NWRmMVx1NWRmMlx1NWRmM1x1NWRmZVx1NWU3Mlx1NWVmZVx1NWYwYlx1NWYxM1x1NjI0ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUxMVx1NGUxMFx1NGUwZFx1NGUyZFx1NGUzMFx1NGUzOVx1NGU0Ylx1'@;
put 'NWMzOVx1NGU4OFx1NGU5MVx1NGU5NVx1NGU5Mlx1NGU5NFx1NGVhMlx1NGVjMVx1NGVjMFx1NGVjM1x1NGVjNlx1NGVjN1x1NGVjZFx1NGVjYVx1NGVjYlx1NGVjNFx1NTE0M1x1NTE0MVx1NTE2N1x1NTE2ZFx1NTE2ZVx1NTE2Y1x1NTE5N1x1NTFmNlx1NTIwNlx1NTIwN1x1NTIwOFx1NTJm'@;
put 'Ylx1NTJmZVx1NTJmZlx1NTMxNlx1NTMzOVx1NTM0OFx1NTM0N1x1NTM0NVx1NTM1ZVx1NTM4NFx1NTNjYlx1NTNjYVx1NTNjZFx1NThlY1x1NTkyOVx1NTkyYlx1NTkyYVx1NTkyZFx1NWI1NFx1NWMxMVx1NWMyNFx1NWMzYVx1NWM2Zlx1NWRmNFx1NWU3Ylx1NWVmZlx1NWYxNFx1NWYxNVx1'@;
put 'NWZjM1x1NjIwOFx1NjIzNlx1NjI0Ylx1NjI0ZVx1NjUyZlx1NjU4N1x1NjU5N1x1NjVhNFx1NjViOVx1NjVlNVx1NjZmMFx1NjcwOFx1NjcyOFx1NmIyMFx1NmI2Mlx1NmI3OVx1NmJjYlx1NmJkNFx1NmJkYlx1NmMwZlx1NmMzNFx1NzA2Ylx1NzIyYVx1NzIzNlx1NzIzYlx1NzI0N1x1NzI1'@;
put 'OVx1NzI1Ylx1NzJhY1x1NzM4Ylx1NGUxOVx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE2NF0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTY0XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxNjRdW3ZdXT00MTk4NCt2LFRbNDE5ODQrdl09a1sxNjRdW3ZdKTtmb3Ioa1sxNjVdPSJcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlMTZcdTRlMTVcdTRlMTRcdTRlMThcdTRlM2JcdTRlNGRcdTRlNGZcdTRlNGVcdTRlZTVcdTRlZDhcdTRlZDRcdTRlZDVcdTRlZDZcdTRlZDdcdTRlZTNcdTRlZTRcdTRlZDlcdTRlZGVcdTUxNDVcdTUx'@;
put 'NDRcdTUxODlcdTUxOGFcdTUxYWNcdTUxZjlcdTUxZmFcdTUxZjhcdTUyMGFcdTUyYTBcdTUyOWZcdTUzMDVcdTUzMDZcdTUzMTdcdTUzMWRcdTRlZGZcdTUzNGFcdTUzNDlcdTUzNjFcdTUzNjBcdTUzNmZcdTUzNmVcdTUzYmJcdTUzZWZcdTUzZTRcdTUzZjNcdTUzZWNcdTUzZWVcdTUzZTlc'@;
put 'dTUzZThcdTUzZmNcdTUzZjhcdTUzZjVcdTUzZWJcdTUzZTZcdTUzZWFcdTUzZjJcdTUzZjFcdTUzZjBcdTUzZTVcdTUzZWRcdTUzZmJcdTU2ZGJcdTU2ZGFcdTU5MTZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU5MmVcdTU5MzFcdTU5NzRcdTU5NzZcdTViNTVc'@;
put 'dTViODNcdTVjM2NcdTVkZThcdTVkZTdcdTVkZTZcdTVlMDJcdTVlMDNcdTVlNzNcdTVlN2NcdTVmMDFcdTVmMThcdTVmMTdcdTVmYzVcdTYyMGFcdTYyNTNcdTYyNTRcdTYyNTJcdTYyNTFcdTY1YTVcdTY1ZTZcdTY3MmVcdTY3MmNcdTY3MmFcdTY3MmJcdTY3MmRcdTZiNjNcdTZiY2RcdTZj'@;
put 'MTFcdTZjMTBcdTZjMzhcdTZjNDFcdTZjNDBcdTZjM2VcdTcyYWZcdTczODRcdTczODlcdTc0ZGNcdTc0ZTZcdTc1MThcdTc1MWZcdTc1MjhcdTc1MjlcdTc1MzBcdTc1MzFcdTc1MzJcdTc1MzNcdTc1OGJcdTc2N2RcdTc2YWVcdTc2YmZcdTc2ZWVcdTc3ZGJcdTc3ZTJcdTc3ZjNcdTc5M2Fc'@;
put 'dTc5YmVcdTdhNzRcdTdhY2JcdTRlMWVcdTRlMWZcdTRlNTJcdTRlNTNcdTRlNjlcdTRlOTlcdTRlYTRcdTRlYTZcdTRlYTVcdTRlZmZcdTRmMDlcdTRmMTlcdTRmMGFcdTRmMTVcdTRmMGRcdTRmMTBcdTRmMTFcdTRmMGZcdTRlZjJcdTRlZjZcdTRlZmJcdTRlZjBcdTRlZjNcdTRlZmRcdTRm'@;
put 'MDFcdTRmMGJcdTUxNDlcdTUxNDdcdTUxNDZcdTUxNDhcdTUxNjhcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxNjVdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE2NV1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTY1XVt2XV09NDIyNDArdixUWzQyMjQwK3ZdPWtbMTY1XVt2XSk7Zm9yKGtb'@;
put 'MTY2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MTcxXHU1MThkXHU1MWIwXHU1MjE3XHU1MjExXHU1MjEyXHU1MjBlXHU1MjE2XHU1MmEzXHU1MzA4XHU1MzIxXHU1MzIwXHU1MzcwXHU1MzcxXHU1NDA5XHU1NDBmXHU1NDBjXHU1'@;
put 'NDBhXHU1NDEwXHU1NDAxXHU1NDBiXHU1NDA0XHU1NDExXHU1NDBkXHU1NDA4XHU1NDAzXHU1NDBlXHU1NDA2XHU1NDEyXHU1NmUwXHU1NmRlXHU1NmRkXHU1NzMzXHU1NzMwXHU1NzI4XHU1NzJkXHU1NzJjXHU1NzJmXHU1NzI5XHU1OTE5XHU1OTFhXHU1OTM3XHU1OTM4XHU1OTg0XHU1OTc4'@;
put 'XHU1OTgzXHU1OTdkXHU1OTc5XHU1OTgyXHU1OTgxXHU1YjU3XHU1YjU4XHU1Yjg3XHU1Yjg4XHU1Yjg1XHU1Yjg5XHU1YmZhXHU1YzE2XHU1Yzc5XHU1ZGRlXHU1ZTA2XHU1ZTc2XHU1ZTc0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZjBmXHU1ZjFiXHU1ZmQ5'@;
put 'XHU1ZmQ2XHU2MjBlXHU2MjBjXHU2MjBkXHU2MjEwXHU2MjYzXHU2MjViXHU2MjU4XHU2NTM2XHU2NWU5XHU2NWU4XHU2NWVjXHU2NWVkXHU2NmYyXHU2NmYzXHU2NzA5XHU2NzNkXHU2NzM0XHU2NzMxXHU2NzM1XHU2YjIxXHU2YjY0XHU2YjdiXHU2YzE2XHU2YzVkXHU2YzU3XHU2YzU5XHU2'@;
put 'YzVmXHU2YzYwXHU2YzUwXHU2YzU1XHU2YzYxXHU2YzViXHU2YzRkXHU2YzRlXHU3MDcwXHU3MjVmXHU3MjVkXHU3NjdlXHU3YWY5XHU3YzczXHU3Y2Y4XHU3ZjM2XHU3ZjhhXHU3ZmJkXHU4MDAxXHU4MDAzXHU4MDBjXHU4MDEyXHU4MDMzXHU4MDdmXHU4MDg5XHU4MDhiXHU4MDhjXHU4MWUz'@;
put 'XHU4MWVhXHU4MWYzXHU4MWZjXHU4MjBjXHU4MjFiXHU4MjFmXHU4MjZlXHU4MjcyXHU4MjdlXHU4NjZiXHU4ODQwXHU4ODRjXHU4ODYzXHU4OTdmXHU5NjIxXHU0ZTMyXHU0ZWE4XHU0ZjRkXHU0ZjRmXHU0ZjQ3XHU0ZjU3XHU0ZjVlXHU0ZjM0XHU0ZjViXHU0ZjU1XHU0ZjMwXHU0ZjUwXHU0'@;
put 'ZjUxXHU0ZjNkXHU0ZjNhXHU0ZjM4XHU0ZjQzXHU0ZjU0XHU0ZjNjXHU0ZjQ2XHU0ZjYzXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTY2XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxNjZdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE2Nl1bdl1dPTQyNDk2K3YsVFs0MjQ5Nit2XT1rWzE2'@;
put 'Nl1bdl0pO2ZvcihrWzE2N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGY1Y1x1NGY2MFx1NGYyZlx1NGY0ZVx1NGYzNlx1NGY1OVx1NGY1ZFx1NGY0OFx1NGY1YVx1NTE0Y1x1NTE0Ylx1NTE0ZFx1NTE3NVx1NTFiNlx1NTFiN1x1'@;
put 'NTIyNVx1NTIyNFx1NTIyOVx1NTIyYVx1NTIyOFx1NTJhYlx1NTJhOVx1NTJhYVx1NTJhY1x1NTMyM1x1NTM3M1x1NTM3NVx1NTQxZFx1NTQyZFx1NTQxZVx1NTQzZVx1NTQyNlx1NTQ0ZVx1NTQyN1x1NTQ0Nlx1NTQ0M1x1NTQzM1x1NTQ0OFx1NTQ0Mlx1NTQxYlx1NTQyOVx1NTQ0YVx1NTQz'@;
put 'OVx1NTQzYlx1NTQzOFx1NTQyZVx1NTQzNVx1NTQzNlx1NTQyMFx1NTQzY1x1NTQ0MFx1NTQzMVx1NTQyYlx1NTQxZlx1NTQyY1x1NTZlYVx1NTZmMFx1NTZlNFx1NTZlYlx1NTc0YVx1NTc1MVx1NTc0MFx1NTc0ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTc0'@;
put 'N1x1NTc0ZVx1NTczZVx1NTc1MFx1NTc0Zlx1NTczYlx1NThlZlx1NTkzZVx1NTk5ZFx1NTk5Mlx1NTlhOFx1NTk5ZVx1NTlhM1x1NTk5OVx1NTk5Nlx1NTk4ZFx1NTlhNFx1NTk5M1x1NTk4YVx1NTlhNVx1NWI1ZFx1NWI1Y1x1NWI1YVx1NWI1Ylx1NWI4Y1x1NWI4Ylx1NWI4Zlx1NWMyY1x1'@;
put 'NWM0MFx1NWM0MVx1NWMzZlx1NWMzZVx1NWM5MFx1NWM5MVx1NWM5NFx1NWM4Y1x1NWRlYlx1NWUwY1x1NWU4Zlx1NWU4N1x1NWU4YVx1NWVmN1x1NWYwNFx1NWYxZlx1NWY2NFx1NWY2Mlx1NWY3N1x1NWY3OVx1NWZkOFx1NWZjY1x1NWZkN1x1NWZjZFx1NWZmMVx1NWZlYlx1NWZmOFx1NWZl'@;
put 'YVx1NjIxMlx1NjIxMVx1NjI4NFx1NjI5N1x1NjI5Nlx1NjI4MFx1NjI3Nlx1NjI4OVx1NjI2ZFx1NjI4YVx1NjI3Y1x1NjI3ZVx1NjI3OVx1NjI3M1x1NjI5Mlx1NjI2Zlx1NjI5OFx1NjI2ZVx1NjI5NVx1NjI5M1x1NjI5MVx1NjI4Nlx1NjUzOVx1NjUzYlx1NjUzOFx1NjVmMVx1NjZmNFx1'@;
put 'Njc1Zlx1Njc0ZVx1Njc0Zlx1Njc1MFx1Njc1MVx1Njc1Y1x1Njc1Nlx1Njc1ZVx1Njc0OVx1Njc0Nlx1Njc2MFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE2N10ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTY3XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxNjddW3ZdXT00Mjc1Mit2LFRb'@;
put 'NDI3NTIrdl09a1sxNjddW3ZdKTtmb3Ioa1sxNjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY3NTNcdTY3NTdcdTZiNjVcdTZiY2ZcdTZjNDJcdTZjNWVcdTZjOTlcdTZjODFcdTZjODhcdTZjODlcdTZjODVcdTZjOWJcdTZjNmFc'@;
put 'dTZjN2FcdTZjOTBcdTZjNzBcdTZjOGNcdTZjNjhcdTZjOTZcdTZjOTJcdTZjN2RcdTZjODNcdTZjNzJcdTZjN2VcdTZjNzRcdTZjODZcdTZjNzZcdTZjOGRcdTZjOTRcdTZjOThcdTZjODJcdTcwNzZcdTcwN2NcdTcwN2RcdTcwNzhcdTcyNjJcdTcyNjFcdTcyNjBcdTcyYzRcdTcyYzJcdTcz'@;
put 'OTZcdTc1MmNcdTc1MmJcdTc1MzdcdTc1MzhcdTc2ODJcdTc2ZWZcdTc3ZTNcdTc5YzFcdTc5YzBcdTc5YmZcdTdhNzZcdTdjZmJcdTdmNTVcdTgwOTZcdTgwOTNcdTgwOWRcdTgwOThcdTgwOWJcdTgwOWFcdTgwYjJcdTgyNmZcdTgyOTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdTgyOGJcdTgyOGRcdTg5OGJcdTg5ZDJcdThhMDBcdThjMzdcdThjNDZcdThjNTVcdThjOWRcdThkNjRcdThkNzBcdThkYjNcdThlYWJcdThlY2FcdThmOWJcdThmYjBcdThmYzJcdThmYzZcdThmYzVcdThmYzRcdTVkZTFcdTkwOTFcdTkwYTJcdTkwYWFcdTkwYTZcdTkwYTNc'@;
put 'dTkxNDlcdTkxYzZcdTkxY2NcdTk2MzJcdTk2MmVcdTk2MzFcdTk2MmFcdTk2MmNcdTRlMjZcdTRlNTZcdTRlNzNcdTRlOGJcdTRlOWJcdTRlOWVcdTRlYWJcdTRlYWNcdTRmNmZcdTRmOWRcdTRmOGRcdTRmNzNcdTRmN2ZcdTRmNmNcdTRmOWJcdTRmOGJcdTRmODZcdTRmODNcdTRmNzBcdTRm'@;
put 'NzVcdTRmODhcdTRmNjlcdTRmN2JcdTRmOTZcdTRmN2VcdTRmOGZcdTRmOTFcdTRmN2FcdTUxNTRcdTUxNTJcdTUxNTVcdTUxNjlcdTUxNzdcdTUxNzZcdTUxNzhcdTUxYmRcdTUxZmRcdTUyM2JcdTUyMzhcdTUyMzdcdTUyM2FcdTUyMzBcdTUyMmVcdTUyMzZcdTUyNDFcdTUyYmVcdTUyYmJc'@;
put 'dTUzNTJcdTUzNTRcdTUzNTNcdTUzNTFcdTUzNjZcdTUzNzdcdTUzNzhcdTUzNzlcdTUzZDZcdTUzZDRcdTUzZDdcdTU0NzNcdTU0NzVcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxNjhdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE2OF1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTY4XVt2'@;
put 'XV09NDMwMDgrdixUWzQzMDA4K3ZdPWtbMTY4XVt2XSk7Zm9yKGtbMTY5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NDk2XHU1NDc4XHU1NDk1XHU1NDgwXHU1NDdiXHU1NDc3XHU1NDg0XHU1NDkyXHU1NDg2XHU1NDdjXHU1NDkw'@;
put 'XHU1NDcxXHU1NDc2XHU1NDhjXHU1NDlhXHU1NDYyXHU1NDY4XHU1NDhiXHU1NDdkXHU1NDhlXHU1NmZhXHU1NzgzXHU1Nzc3XHU1NzZhXHU1NzY5XHU1NzYxXHU1NzY2XHU1NzY0XHU1NzdjXHU1OTFjXHU1OTQ5XHU1OTQ3XHU1OTQ4XHU1OTQ0XHU1OTU0XHU1OWJlXHU1OWJiXHU1OWQ0XHU1'@;
put 'OWI5XHU1OWFlXHU1OWQxXHU1OWM2XHU1OWQwXHU1OWNkXHU1OWNiXHU1OWQzXHU1OWNhXHU1OWFmXHU1OWIzXHU1OWQyXHU1OWM1XHU1YjVmXHU1YjY0XHU1YjYzXHU1Yjk3XHU1YjlhXHU1Yjk4XHU1YjljXHU1Yjk5XHU1YjliXHU1YzFhXHU1YzQ4XHU1YzQ1XHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YzQ2XHU1Y2I3XHU1Y2ExXHU1Y2I4XHU1Y2E5XHU1Y2FiXHU1Y2IxXHU1Y2IzXHU1ZTE4XHU1ZTFhXHU1ZTE2XHU1ZTE1XHU1ZTFiXHU1ZTExXHU1ZTc4XHU1ZTlhXHU1ZTk3XHU1ZTljXHU1ZTk1XHU1ZTk2XHU1ZWY2XHU1ZjI2XHU1ZjI3XHU1ZjI5'@;
put 'XHU1ZjgwXHU1ZjgxXHU1ZjdmXHU1ZjdjXHU1ZmRkXHU1ZmUwXHU1ZmZkXHU1ZmY1XHU1ZmZmXHU2MDBmXHU2MDE0XHU2MDJmXHU2MDM1XHU2MDE2XHU2MDJhXHU2MDE1XHU2MDIxXHU2MDI3XHU2MDI5XHU2MDJiXHU2MDFiXHU2MjE2XHU2MjE1XHU2MjNmXHU2MjNlXHU2MjQwXHU2MjdmXHU2'@;
put 'MmM5XHU2MmNjXHU2MmM0XHU2MmJmXHU2MmMyXHU2MmI5XHU2MmQyXHU2MmRiXHU2MmFiXHU2MmQzXHU2MmQ0XHU2MmNiXHU2MmM4XHU2MmE4XHU2MmJkXHU2MmJjXHU2MmQwXHU2MmQ5XHU2MmM3XHU2MmNkXHU2MmI1XHU2MmRhXHU2MmIxXHU2MmQ4XHU2MmQ2XHU2MmQ3XHU2MmM2XHU2MmFj'@;
put 'XHU2MmNlXHU2NTNlXHU2NWE3XHU2NWJjXHU2NWZhXHU2NjE0XHU2NjEzXHU2NjBjXHU2NjA2XHU2NjAyXHU2NjBlXHU2NjAwXHU2NjBmXHU2NjE1XHU2NjBhXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTY5XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxNjldW3ZdLmNoYXJDb2RlQXQoMCkm'@;
put 'JihzZVtrWzE2OV1bdl1dPTQzMjY0K3YsVFs0MzI2NCt2XT1rWzE2OV1bdl0pO2ZvcihrWzE3MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjYwN1x1NjcwZFx1NjcwYlx1Njc2ZFx1Njc4Ylx1Njc5NVx1Njc3MVx1Njc5Y1x1Njc3'@;
put 'M1x1Njc3N1x1Njc4N1x1Njc5ZFx1Njc5N1x1Njc2Zlx1Njc3MFx1Njc3Zlx1Njc4OVx1Njc3ZVx1Njc5MFx1Njc3NVx1Njc5YVx1Njc5M1x1Njc3Y1x1Njc2YVx1Njc3Mlx1NmIyM1x1NmI2Nlx1NmI2N1x1NmI3Zlx1NmMxM1x1NmMxYlx1NmNlM1x1NmNlOFx1NmNmM1x1NmNiMVx1NmNjY1x1'@;
put 'NmNlNVx1NmNiM1x1NmNiZFx1NmNiZVx1NmNiY1x1NmNlMlx1NmNhYlx1NmNkNVx1NmNkM1x1NmNiOFx1NmNjNFx1NmNiOVx1NmNjMVx1NmNhZVx1NmNkN1x1NmNjNVx1NmNmMVx1NmNiZlx1NmNiYlx1NmNlMVx1NmNkYlx1NmNjYVx1NmNhY1x1NmNlZlx1NmNkY1x1NmNkNlx1NmNlMFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzA5NVx1NzA4ZVx1NzA5Mlx1NzA4YVx1NzA5OVx1NzIyY1x1NzIyZFx1NzIzOFx1NzI0OFx1NzI2N1x1NzI2OVx1NzJjMFx1NzJjZVx1NzJkOVx1NzJkN1x1NzJkMFx1NzNhOVx1NzNhOFx1NzM5Zlx1NzNhYlx1NzNhNVx1NzUz'@;
put 'ZFx1NzU5ZFx1NzU5OVx1NzU5YVx1NzY4NFx1NzZjMlx1NzZmMlx1NzZmNFx1NzdlNVx1NzdmZFx1NzkzZVx1Nzk0MFx1Nzk0MVx1NzljOVx1NzljOFx1N2E3YVx1N2E3OVx1N2FmYVx1N2NmZVx1N2Y1NFx1N2Y4Y1x1N2Y4Ylx1ODAwNVx1ODBiYVx1ODBhNVx1ODBhMlx1ODBiMVx1ODBhMVx1'@;
put 'ODBhYlx1ODBhOVx1ODBiNFx1ODBhYVx1ODBhZlx1ODFlNVx1ODFmZVx1ODIwZFx1ODJiM1x1ODI5ZFx1ODI5OVx1ODJhZFx1ODJiZFx1ODI5Zlx1ODJiOVx1ODJiMVx1ODJhY1x1ODJhNVx1ODJhZlx1ODJiOFx1ODJhM1x1ODJiMFx1ODJiZVx1ODJiN1x1ODY0ZVx1ODY3MVx1NTIxZFx1ODg2'@;
put 'OFx1OGVjYlx1OGZjZVx1OGZkNFx1OGZkMVx1OTBiNVx1OTBiOFx1OTBiMVx1OTBiNlx1OTFjN1x1OTFkMVx1OTU3N1x1OTU4MFx1OTYxY1x1OTY0MFx1OTYzZlx1OTYzYlx1OTY0NFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE3MF0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTcwXVt2XS5j'@;
put 'aGFyQ29kZUF0KDApJiYoc2Vba1sxNzBdW3ZdXT00MzUyMCt2LFRbNDM1MjArdl09a1sxNzBdW3ZdKTtmb3Ioa1sxNzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2NDJcdTk2YjlcdTk2ZThcdTk3NTJcdTk3NWVcdTRlOWZcdTRl'@;
put 'YWRcdTRlYWVcdTRmZTFcdTRmYjVcdTRmYWZcdTRmYmZcdTRmZTBcdTRmZDFcdTRmY2ZcdTRmZGRcdTRmYzNcdTRmYjZcdTRmZDhcdTRmZGZcdTRmY2FcdTRmZDdcdTRmYWVcdTRmZDBcdTRmYzRcdTRmYzJcdTRmZGFcdTRmY2VcdTRmZGVcdTRmYjdcdTUxNTdcdTUxOTJcdTUxOTFcdTUxYTBc'@;
put 'dTUyNGVcdTUyNDNcdTUyNGFcdTUyNGRcdTUyNGNcdTUyNGJcdTUyNDdcdTUyYzdcdTUyYzlcdTUyYzNcdTUyYzFcdTUzMGRcdTUzNTdcdTUzN2JcdTUzOWFcdTUzZGJcdTU0YWNcdTU0YzBcdTU0YThcdTU0Y2VcdTU0YzlcdTU0YjhcdTU0YTZcdTU0YjNcdTU0YzdcdTU0YzJcdTU0YmRcdTU0'@;
put 'YWFcdTU0YzFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0YzRcdTU0YzhcdTU0YWZcdTU0YWJcdTU0YjFcdTU0YmJcdTU0YTlcdTU0YTdcdTU0YmZcdTU2ZmZcdTU3ODJcdTU3OGJcdTU3YTBcdTU3YTNcdTU3YTJcdTU3Y2VcdTU3YWVcdTU3OTNcdTU5NTVcdTU5'@;
put 'NTFcdTU5NGZcdTU5NGVcdTU5NTBcdTU5ZGNcdTU5ZDhcdTU5ZmZcdTU5ZTNcdTU5ZThcdTVhMDNcdTU5ZTVcdTU5ZWFcdTU5ZGFcdTU5ZTZcdTVhMDFcdTU5ZmJcdTViNjlcdTViYTNcdTViYTZcdTViYTRcdTViYTJcdTViYTVcdTVjMDFcdTVjNGVcdTVjNGZcdTVjNGRcdTVjNGJcdTVjZDlc'@;
put 'dTVjZDJcdTVkZjdcdTVlMWRcdTVlMjVcdTVlMWZcdTVlN2RcdTVlYTBcdTVlYTZcdTVlZmFcdTVmMDhcdTVmMmRcdTVmNjVcdTVmODhcdTVmODVcdTVmOGFcdTVmOGJcdTVmODdcdTVmOGNcdTVmODlcdTYwMTJcdTYwMWRcdTYwMjBcdTYwMjVcdTYwMGVcdTYwMjhcdTYwNGRcdTYwNzBcdTYw'@;
put 'NjhcdTYwNjJcdTYwNDZcdTYwNDNcdTYwNmNcdTYwNmJcdTYwNmFcdTYwNjRcdTYyNDFcdTYyZGNcdTYzMTZcdTYzMDlcdTYyZmNcdTYyZWRcdTYzMDFcdTYyZWVcdTYyZmRcdTYzMDdcdTYyZjFcdTYyZjdcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxNzFdLmxlbmd0aDsrK3YpNjU1MzMh'@;
put 'PT1rWzE3MV1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTcxXVt2XV09NDM3NzYrdixUWzQzNzc2K3ZdPWtbMTcxXVt2XSk7Zm9yKGtbMTcyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MmVmXHU2MmVjXHU2MmZlXHU2MmY0XHU2'@;
put 'MzExXHU2MzAyXHU2NTNmXHU2NTQ1XHU2NWFiXHU2NWJkXHU2NWUyXHU2NjI1XHU2NjJkXHU2NjIwXHU2NjI3XHU2NjJmXHU2NjFmXHU2NjI4XHU2NjMxXHU2NjI0XHU2NmY3XHU2N2ZmXHU2N2QzXHU2N2YxXHU2N2Q0XHU2N2QwXHU2N2VjXHU2N2I2XHU2N2FmXHU2N2Y1XHU2N2U5XHU2N2Vm'@;
put 'XHU2N2M0XHU2N2QxXHU2N2I0XHU2N2RhXHU2N2U1XHU2N2I4XHU2N2NmXHU2N2RlXHU2N2YzXHU2N2IwXHU2N2Q5XHU2N2UyXHU2N2RkXHU2N2QyXHU2YjZhXHU2YjgzXHU2Yjg2XHU2YmI1XHU2YmQyXHU2YmQ3XHU2YzFmXHU2Y2M5XHU2ZDBiXHU2ZDMyXHU2ZDJhXHU2ZDQxXHU2ZDI1XHU2'@;
put 'ZDBjXHU2ZDMxXHU2ZDFlXHU2ZDE3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZDNiXHU2ZDNkXHU2ZDNlXHU2ZDM2XHU2ZDFiXHU2Y2Y1XHU2ZDM5XHU2ZDI3XHU2ZDM4XHU2ZDI5XHU2ZDJlXHU2ZDM1XHU2ZDBlXHU2ZDJiXHU3MGFiXHU3MGJhXHU3MGIzXHU3'@;
put 'MGFjXHU3MGFmXHU3MGFkXHU3MGI4XHU3MGFlXHU3MGE0XHU3MjMwXHU3MjcyXHU3MjZmXHU3Mjc0XHU3MmU5XHU3MmUwXHU3MmUxXHU3M2I3XHU3M2NhXHU3M2JiXHU3M2IyXHU3M2NkXHU3M2MwXHU3M2IzXHU3NTFhXHU3NTJkXHU3NTRmXHU3NTRjXHU3NTRlXHU3NTRiXHU3NWFiXHU3NWE0'@;
put 'XHU3NWE1XHU3NWEyXHU3NWEzXHU3Njc4XHU3Njg2XHU3Njg3XHU3Njg4XHU3NmM4XHU3NmM2XHU3NmMzXHU3NmM1XHU3NzAxXHU3NmY5XHU3NmY4XHU3NzA5XHU3NzBiXHU3NmZlXHU3NmZjXHU3NzA3XHU3N2RjXHU3ODAyXHU3ODE0XHU3ODBjXHU3ODBkXHU3OTQ2XHU3OTQ5XHU3OTQ4XHU3'@;
put 'OTQ3XHU3OWI5XHU3OWJhXHU3OWQxXHU3OWQyXHU3OWNiXHU3YTdmXHU3YTgxXHU3YWZmXHU3YWZkXHU3YzdkXHU3ZDAyXHU3ZDA1XHU3ZDAwXHU3ZDA5XHU3ZDA3XHU3ZDA0XHU3ZDA2XHU3ZjM4XHU3ZjhlXHU3ZmJmXHU4MDA0XHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTcyXS5sZW5n'@;
put 'dGg7Kyt2KTY1NTMzIT09a1sxNzJdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE3Ml1bdl1dPTQ0MDMyK3YsVFs0NDAzMit2XT1rWzE3Ml1bdl0pO2ZvcihrWzE3M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODAxMFx1ODAwZFx1'@;
put 'ODAxMVx1ODAzNlx1ODBkNlx1ODBlNVx1ODBkYVx1ODBjM1x1ODBjNFx1ODBjY1x1ODBlMVx1ODBkYlx1ODBjZVx1ODBkZVx1ODBlNFx1ODBkZFx1ODFmNFx1ODIyMlx1ODJlN1x1ODMwM1x1ODMwNVx1ODJlM1x1ODJkYlx1ODJlNlx1ODMwNFx1ODJlNVx1ODMwMlx1ODMwOVx1ODJkMlx1ODJk'@;
put 'N1x1ODJmMVx1ODMwMVx1ODJkY1x1ODJkNFx1ODJkMVx1ODJkZVx1ODJkM1x1ODJkZlx1ODJlZlx1ODMwNlx1ODY1MFx1ODY3OVx1ODY3Ylx1ODY3YVx1ODg0ZFx1ODg2Ylx1ODk4MVx1ODlkNFx1OGEwOFx1OGEwMlx1OGEwM1x1OGM5ZVx1OGNhMFx1OGQ3NFx1OGQ3M1x1OGRiNFx1OGVjZFx1'@;
put 'OGVjY1x1OGZmMFx1OGZlNlx1OGZlMlx1OGZlYVx1OGZlNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGZlZFx1OGZlYlx1OGZlNFx1OGZlOFx1OTBjYVx1OTBjZVx1OTBjMVx1OTBjM1x1OTE0Ylx1OTE0YVx1OTFjZFx1OTU4Mlx1OTY1MFx1OTY0Ylx1OTY0Y1x1'@;
put 'OTY0ZFx1OTc2Mlx1OTc2OVx1OTdjYlx1OTdlZFx1OTdmM1x1OTgwMVx1OThhOFx1OThkYlx1OThkZlx1OTk5Nlx1OTk5OVx1NGU1OFx1NGViM1x1NTAwY1x1NTAwZFx1NTAyM1x1NGZlZlx1NTAyNlx1NTAyNVx1NGZmOFx1NTAyOVx1NTAxNlx1NTAwNlx1NTAzY1x1NTAxZlx1NTAxYVx1NTAx'@;
put 'Mlx1NTAxMVx1NGZmYVx1NTAwMFx1NTAxNFx1NTAyOFx1NGZmMVx1NTAyMVx1NTAwYlx1NTAxOVx1NTAxOFx1NGZmM1x1NGZlZVx1NTAyZFx1NTAyYVx1NGZmZVx1NTAyYlx1NTAwOVx1NTE3Y1x1NTFhNFx1NTFhNVx1NTFhMlx1NTFjZFx1NTFjY1x1NTFjNlx1NTFjYlx1NTI1Nlx1NTI1Y1x1'@;
put 'NTI1NFx1NTI1Ylx1NTI1ZFx1NTMyYVx1NTM3Zlx1NTM5Zlx1NTM5ZFx1NTNkZlx1NTRlOFx1NTUxMFx1NTUwMVx1NTUzN1x1NTRmY1x1NTRlNVx1NTRmMlx1NTUwNlx1NTRmYVx1NTUxNFx1NTRlOVx1NTRlZFx1NTRlMVx1NTUwOVx1NTRlZVx1NTRlYVx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2'@;
put 'IT1rWzE3M10ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTczXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxNzNdW3ZdXT00NDI4OCt2LFRbNDQyODgrdl09a1sxNzNdW3ZdKTtmb3Ioa1sxNzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dTU0ZTZcdTU1MjdcdTU1MDdcdTU0ZmRcdTU1MGZcdTU3MDNcdTU3MDRcdTU3YzJcdTU3ZDRcdTU3Y2JcdTU3YzNcdTU4MDlcdTU5MGZcdTU5NTdcdTU5NThcdTU5NWFcdTVhMTFcdTVhMThcdTVhMWNcdTVhMWZcdTVhMWJcdTVhMTNcdTU5ZWNcdTVhMjBcdTVhMjNcdTVhMjlcdTVhMjVcdTVh'@;
put 'MGNcdTVhMDlcdTViNmJcdTVjNThcdTViYjBcdTViYjNcdTViYjZcdTViYjRcdTViYWVcdTViYjVcdTViYjlcdTViYjhcdTVjMDRcdTVjNTFcdTVjNTVcdTVjNTBcdTVjZWRcdTVjZmRcdTVjZmJcdTVjZWFcdTVjZThcdTVjZjBcdTVjZjZcdTVkMDFcdTVjZjRcdTVkZWVcdTVlMmRcdTVlMmJc'@;
put 'dTVlYWJcdTVlYWRcdTVlYTdcdTVmMzFcdTVmOTJcdTVmOTFcdTVmOTBcdTYwNTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwNjNcdTYwNjVcdTYwNTBcdTYwNTVcdTYwNmRcdTYwNjlcdTYwNmZcdTYwODRcdTYwOWZcdTYwOWFcdTYwOGRcdTYwOTRcdTYwOGNc'@;
put 'dTYwODVcdTYwOTZcdTYyNDdcdTYyZjNcdTYzMDhcdTYyZmZcdTYzNGVcdTYzM2VcdTYzMmZcdTYzNTVcdTYzNDJcdTYzNDZcdTYzNGZcdTYzNDlcdTYzM2FcdTYzNTBcdTYzM2RcdTYzMmFcdTYzMmJcdTYzMjhcdTYzNGRcdTYzNGNcdTY1NDhcdTY1NDlcdTY1OTlcdTY1YzFcdTY1YzVcdTY2'@;
put 'NDJcdTY2NDlcdTY2NGZcdTY2NDNcdTY2NTJcdTY2NGNcdTY2NDVcdTY2NDFcdTY2ZjhcdTY3MTRcdTY3MTVcdTY3MTdcdTY4MjFcdTY4MzhcdTY4NDhcdTY4NDZcdTY4NTNcdTY4MzlcdTY4NDJcdTY4NTRcdTY4MjlcdTY4YjNcdTY4MTdcdTY4NGNcdTY4NTFcdTY4M2RcdTY3ZjRcdTY4NTBc'@;
put 'dTY4NDBcdTY4M2NcdTY4NDNcdTY4MmFcdTY4NDVcdTY4MTNcdTY4MThcdTY4NDFcdTZiOGFcdTZiODlcdTZiYjdcdTZjMjNcdTZjMjdcdTZjMjhcdTZjMjZcdTZjMjRcdTZjZjBcdTZkNmFcdTZkOTVcdTZkODhcdTZkODdcdTZkNjZcdTZkNzhcdTZkNzdcdTZkNTlcdTZkOTNcdWZmZmQiLnNw'@;
put 'bGl0KCIiKSx2PTA7diE9a1sxNzRdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE3NF1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTc0XVt2XV09NDQ1NDQrdixUWzQ0NTQ0K3ZdPWtbMTc0XVt2XSk7Zm9yKGtbMTc1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHU2ZDZjXHU2ZDg5XHU2ZDZlXHU2ZDVhXHU2ZDc0XHU2ZDY5XHU2ZDhjXHU2ZDhhXHU2ZDc5XHU2ZDg1XHU2ZDY1XHU2ZDk0XHU3MGNhXHU3MGQ4XHU3MGU0XHU3MGQ5XHU3MGM4XHU3MGNmXHU3MjM5XHU3Mjc5XHU3MmZjXHU3MmY5XHU3MmZkXHU3MmY4XHU3MmY3XHU3'@;
put 'Mzg2XHU3M2VkXHU3NDA5XHU3M2VlXHU3M2UwXHU3M2VhXHU3M2RlXHU3NTU0XHU3NTVkXHU3NTVjXHU3NTVhXHU3NTU5XHU3NWJlXHU3NWM1XHU3NWM3XHU3NWIyXHU3NWIzXHU3NWJkXHU3NWJjXHU3NWI5XHU3NWMyXHU3NWI4XHU3NjhiXHU3NmIwXHU3NmNhXHU3NmNkXHU3NmNlXHU3NzI5'@;
put 'XHU3NzFmXHU3NzIwXHU3NzI4XHU3N2U5XHU3ODMwXHU3ODI3XHU3ODM4XHU3ODFkXHU3ODM0XHU3ODM3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ODI1XHU3ODJkXHU3ODIwXHU3ODFmXHU3ODMyXHU3OTU1XHU3OTUwXHU3OTYwXHU3OTVmXHU3OTU2XHU3OTVl'@;
put 'XHU3OTVkXHU3OTU3XHU3OTVhXHU3OWU0XHU3OWUzXHU3OWU3XHU3OWRmXHU3OWU2XHU3OWU5XHU3OWQ4XHU3YTg0XHU3YTg4XHU3YWQ5XHU3YjA2XHU3YjExXHU3Yzg5XHU3ZDIxXHU3ZDE3XHU3ZDBiXHU3ZDBhXHU3ZDIwXHU3ZDIyXHU3ZDE0XHU3ZDEwXHU3ZDE1XHU3ZDFhXHU3ZDFjXHU3'@;
put 'ZDBkXHU3ZDE5XHU3ZDFiXHU3ZjNhXHU3ZjVmXHU3Zjk0XHU3ZmM1XHU3ZmMxXHU4MDA2XHU4MDE4XHU4MDE1XHU4MDE5XHU4MDE3XHU4MDNkXHU4MDNmXHU4MGYxXHU4MTAyXHU4MGYwXHU4MTA1XHU4MGVkXHU4MGY0XHU4MTA2XHU4MGY4XHU4MGYzXHU4MTA4XHU4MGZkXHU4MTBhXHU4MGZj'@;
put 'XHU4MGVmXHU4MWVkXHU4MWVjXHU4MjAwXHU4MjEwXHU4MjJhXHU4MjJiXHU4MjI4XHU4MjJjXHU4MmJiXHU4MzJiXHU4MzUyXHU4MzU0XHU4MzRhXHU4MzM4XHU4MzUwXHU4MzQ5XHU4MzM1XHU4MzM0XHU4MzRmXHU4MzMyXHU4MzM5XHU4MzM2XHU4MzE3XHU4MzQwXHU4MzMxXHU4MzI4XHU4'@;
put 'MzQzXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTc1XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxNzVdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE3NV1bdl1dPTQ0ODAwK3YsVFs0NDgwMCt2XT1rWzE3NV1bdl0pO2ZvcihrWzE3Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODY1NFx1ODY4YVx1ODZhYVx1ODY5M1x1ODZhNFx1ODZhOVx1ODY4Y1x1ODZhM1x1ODY5Y1x1ODg3MFx1ODg3N1x1ODg4MVx1ODg4Mlx1ODg3ZFx1ODg3OVx1OGExOFx1OGExMFx1OGEwZVx1OGEwY1x1OGExNVx1OGEwYVx1OGExN1x1OGExM1x1'@;
put 'OGExNlx1OGEwZlx1OGExMVx1OGM0OFx1OGM3YVx1OGM3OVx1OGNhMVx1OGNhMlx1OGQ3N1x1OGVhY1x1OGVkMlx1OGVkNFx1OGVjZlx1OGZiMVx1OTAwMVx1OTAwNlx1OGZmN1x1OTAwMFx1OGZmYVx1OGZmNFx1OTAwM1x1OGZmZFx1OTAwNVx1OGZmOFx1OTA5NVx1OTBlMVx1OTBkZFx1OTBl'@;
put 'Mlx1OTE1Mlx1OTE0ZFx1OTE0Y1x1OTFkOFx1OTFkZFx1OTFkN1x1OTFkY1x1OTFkOVx1OTU4M1x1OTY2Mlx1OTY2M1x1OTY2MVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY1Ylx1OTY1ZFx1OTY2NFx1OTY1OFx1OTY1ZVx1OTZiYlx1OThlMlx1OTlhY1x1OWFh'@;
put 'OFx1OWFkOFx1OWIyNVx1OWIzMlx1OWIzY1x1NGU3ZVx1NTA3YVx1NTA3ZFx1NTA1Y1x1NTA0N1x1NTA0M1x1NTA0Y1x1NTA1YVx1NTA0OVx1NTA2NVx1NTA3Nlx1NTA0ZVx1NTA1NVx1NTA3NVx1NTA3NFx1NTA3N1x1NTA0Zlx1NTAwZlx1NTA2Zlx1NTA2ZFx1NTE1Y1x1NTE5NVx1NTFmMFx1'@;
put 'NTI2YVx1NTI2Zlx1NTJkMlx1NTJkOVx1NTJkOFx1NTJkNVx1NTMxMFx1NTMwZlx1NTMxOVx1NTMzZlx1NTM0MFx1NTMzZVx1NTNjM1x1NjZmY1x1NTU0Nlx1NTU2YVx1NTU2Nlx1NTU0NFx1NTU1ZVx1NTU2MVx1NTU0M1x1NTU0YVx1NTUzMVx1NTU1Nlx1NTU0Zlx1NTU1NVx1NTUyZlx1NTU2'@;
put 'NFx1NTUzOFx1NTUyZVx1NTU1Y1x1NTUyY1x1NTU2M1x1NTUzM1x1NTU0MVx1NTU1N1x1NTcwOFx1NTcwYlx1NTcwOVx1NTdkZlx1NTgwNVx1NTgwYVx1NTgwNlx1NTdlMFx1NTdlNFx1NTdmYVx1NTgwMlx1NTgzNVx1NTdmN1x1NTdmOVx1NTkyMFx1NTk2Mlx1NWEzNlx1NWE0MVx1NWE0OVx1'@;
put 'NWE2Nlx1NWE2YVx1NWE0MFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE3Nl0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTc2XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxNzZdW3ZdXT00NTA1Nit2LFRbNDUwNTYrdl09a1sxNzZdW3ZdKTtmb3Ioa1sxNzddPSJcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVhM2NcdTVhNjJcdTVhNWFcdTVhNDZcdTVhNGFcdTViNzBcdTViYzdcdTViYzVcdTViYzRcdTViYzJcdTViYmZcdTViYzZcdTVjMDlcdTVjMDhcdTVjMDdcdTVjNjBcdTVjNWNcdTVjNWRcdTVkMDdcdTVkMDZcdTVkMGVc'@;
put 'dTVkMWJcdTVkMTZcdTVkMjJcdTVkMTFcdTVkMjlcdTVkMTRcdTVkMTlcdTVkMjRcdTVkMjdcdTVkMTdcdTVkZTJcdTVlMzhcdTVlMzZcdTVlMzNcdTVlMzdcdTVlYjdcdTVlYjhcdTVlYjZcdTVlYjVcdTVlYmVcdTVmMzVcdTVmMzdcdTVmNTdcdTVmNmNcdTVmNjlcdTVmNmJcdTVmOTdcdTVm'@;
put 'OTlcdTVmOWVcdTVmOThcdTVmYTFcdTVmYTBcdTVmOWNcdTYwN2ZcdTYwYTNcdTYwODlcdTYwYTBcdTYwYThcdTYwY2JcdTYwYjRcdTYwZTZcdTYwYmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwYzVcdTYwYmJcdTYwYjVcdTYwZGNcdTYwYmNcdTYwZDhcdTYw'@;
put 'ZDVcdTYwYzZcdTYwZGZcdTYwYjhcdTYwZGFcdTYwYzdcdTYyMWFcdTYyMWJcdTYyNDhcdTYzYTBcdTYzYTdcdTYzNzJcdTYzOTZcdTYzYTJcdTYzYTVcdTYzNzdcdTYzNjdcdTYzOThcdTYzYWFcdTYzNzFcdTYzYTlcdTYzODlcdTYzODNcdTYzOWJcdTYzNmJcdTYzYThcdTYzODRcdTYzODhc'@;
put 'dTYzOTlcdTYzYTFcdTYzYWNcdTYzOTJcdTYzOGZcdTYzODBcdTYzN2JcdTYzNjlcdTYzNjhcdTYzN2FcdTY1NWRcdTY1NTZcdTY1NTFcdTY1NTlcdTY1NTdcdTU1NWZcdTY1NGZcdTY1NThcdTY1NTVcdTY1NTRcdTY1OWNcdTY1OWJcdTY1YWNcdTY1Y2ZcdTY1Y2JcdTY1Y2NcdTY1Y2VcdTY2'@;
put 'NWRcdTY2NWFcdTY2NjRcdTY2NjhcdTY2NjZcdTY2NWVcdTY2ZjlcdTUyZDdcdTY3MWJcdTY4ODFcdTY4YWZcdTY4YTJcdTY4OTNcdTY4YjVcdTY4N2ZcdTY4NzZcdTY4YjFcdTY4YTdcdTY4OTdcdTY4YjBcdTY4ODNcdTY4YzRcdTY4YWRcdTY4ODZcdTY4ODVcdTY4OTRcdTY4OWRcdTY4YThc'@;
put 'dTY4OWZcdTY4YTFcdTY4ODJcdTZiMzJcdTZiYmFcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxNzddLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE3N11bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTc3XVt2XV09NDUzMTIrdixUWzQ1MzEyK3ZdPWtbMTc3XVt2XSk7Zm9yKGtbMTc4XT0iXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YmViXHU2YmVjXHU2YzJiXHU2ZDhlXHU2ZGJjXHU2ZGYzXHU2ZGQ5XHU2ZGIyXHU2ZGUxXHU2ZGNjXHU2ZGU0XHU2ZGZiXHU2ZGZhXHU2ZTA1XHU2ZGM3XHU2ZGNiXHU2ZGFmXHU2ZGQxXHU2ZGFl'@;
put 'XHU2ZGRlXHU2ZGY5XHU2ZGI4XHU2ZGY3XHU2ZGY1XHU2ZGM1XHU2ZGQyXHU2ZTFhXHU2ZGI1XHU2ZGRhXHU2ZGViXHU2ZGQ4XHU2ZGVhXHU2ZGYxXHU2ZGVlXHU2ZGU4XHU2ZGM2XHU2ZGM0XHU2ZGFhXHU2ZGVjXHU2ZGJmXHU2ZGU2XHU3MGY5XHU3MTA5XHU3MTBhXHU3MGZkXHU3MGVmXHU3'@;
put 'MjNkXHU3MjdkXHU3MjgxXHU3MzFjXHU3MzFiXHU3MzE2XHU3MzEzXHU3MzE5XHU3Mzg3XHU3NDA1XHU3NDBhXHU3NDAzXHU3NDA2XHU3M2ZlXHU3NDBkXHU3NGUwXHU3NGY2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NGY3XHU3NTFjXHU3NTIyXHU3NTY1XHU3'@;
put 'NTY2XHU3NTYyXHU3NTcwXHU3NThmXHU3NWQ0XHU3NWQ1XHU3NWI1XHU3NWNhXHU3NWNkXHU3NjhlXHU3NmQ0XHU3NmQyXHU3NmRiXHU3NzM3XHU3NzNlXHU3NzNjXHU3NzM2XHU3NzM4XHU3NzNhXHU3ODZiXHU3ODQzXHU3ODRlXHU3OTY1XHU3OTY4XHU3OTZkXHU3OWZiXHU3YTkyXHU3YTk1'@;
put 'XHU3YjIwXHU3YjI4XHU3YjFiXHU3YjJjXHU3YjI2XHU3YjE5XHU3YjFlXHU3YjJlXHU3YzkyXHU3Yzk3XHU3Yzk1XHU3ZDQ2XHU3ZDQzXHU3ZDcxXHU3ZDJlXHU3ZDM5XHU3ZDNjXHU3ZDQwXHU3ZDMwXHU3ZDMzXHU3ZDQ0XHU3ZDJmXHU3ZDQyXHU3ZDMyXHU3ZDMxXHU3ZjNkXHU3ZjllXHU3'@;
put 'ZjlhXHU3ZmNjXHU3ZmNlXHU3ZmQyXHU4MDFjXHU4MDRhXHU4MDQ2XHU4MTJmXHU4MTE2XHU4MTIzXHU4MTJiXHU4MTI5XHU4MTMwXHU4MTI0XHU4MjAyXHU4MjM1XHU4MjM3XHU4MjM2XHU4MjM5XHU4MzhlXHU4MzllXHU4Mzk4XHU4Mzc4XHU4M2EyXHU4Mzk2XHU4M2JkXHU4M2FiXHU4Mzky'@;
put 'XHU4MzhhXHU4MzkzXHU4Mzg5XHU4M2EwXHU4Mzc3XHU4MzdiXHU4MzdjXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTc4XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxNzhdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE3OF1bdl1dPTQ1NTY4K3YsVFs0NTU2OCt2XT1rWzE3OF1bdl0pO2Zv'@;
put 'cihrWzE3OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODM4Nlx1ODNhN1x1ODY1NVx1NWY2YVx1ODZjN1x1ODZjMFx1ODZiNlx1ODZjNFx1ODZiNVx1ODZjNlx1ODZjYlx1ODZiMVx1ODZhZlx1ODZjOVx1ODg1M1x1ODg5ZVx1ODg4'@;
put 'OFx1ODhhYlx1ODg5Mlx1ODg5Nlx1ODg4ZFx1ODg4Ylx1ODk5M1x1ODk4Zlx1OGEyYVx1OGExZFx1OGEyM1x1OGEyNVx1OGEzMVx1OGEyZFx1OGExZlx1OGExYlx1OGEyMlx1OGM0OVx1OGM1YVx1OGNhOVx1OGNhY1x1OGNhYlx1OGNhOFx1OGNhYVx1OGNhN1x1OGQ2N1x1OGQ2Nlx1OGRiZVx1'@;
put 'OGRiYVx1OGVkYlx1OGVkZlx1OTAxOVx1OTAwZFx1OTAxYVx1OTAxN1x1OTAyM1x1OTAxZlx1OTAxZFx1OTAxMFx1OTAxNVx1OTAxZVx1OTAyMFx1OTAwZlx1OTAyMlx1OTAxNlx1OTAxYlx1OTAxNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTBlOFx1OTBlZFx1'@;
put 'OTBmZFx1OTE1N1x1OTFjZVx1OTFmNVx1OTFlNlx1OTFlM1x1OTFlN1x1OTFlZFx1OTFlOVx1OTU4OVx1OTY2YVx1OTY3NVx1OTY3M1x1OTY3OFx1OTY3MFx1OTY3NFx1OTY3Nlx1OTY3N1x1OTY2Y1x1OTZjMFx1OTZlYVx1OTZlOVx1N2FlMFx1N2FkZlx1OTgwMlx1OTgwM1x1OWI1YVx1OWNl'@;
put 'NVx1OWU3NVx1OWU3Zlx1OWVhNVx1OWViYlx1NTBhMlx1NTA4ZFx1NTA4NVx1NTA5OVx1NTA5MVx1NTA4MFx1NTA5Nlx1NTA5OFx1NTA5YVx1NjcwMFx1NTFmMVx1NTI3Mlx1NTI3NFx1NTI3NVx1NTI2OVx1NTJkZVx1NTJkZFx1NTJkYlx1NTM1YVx1NTNhNVx1NTU3Ylx1NTU4MFx1NTVhN1x1'@;
put 'NTU3Y1x1NTU4YVx1NTU5ZFx1NTU5OFx1NTU4Mlx1NTU5Y1x1NTVhYVx1NTU5NFx1NTU4N1x1NTU4Ylx1NTU4M1x1NTViM1x1NTVhZVx1NTU5Zlx1NTUzZVx1NTViMlx1NTU5YVx1NTViYlx1NTVhY1x1NTViMVx1NTU3ZVx1NTU4OVx1NTVhYlx1NTU5OVx1NTcwZFx1NTgyZlx1NTgyYVx1NTgz'@;
put 'NFx1NTgyNFx1NTgzMFx1NTgzMVx1NTgyMVx1NTgxZFx1NTgyMFx1NThmOVx1NThmYVx1NTk2MFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE3OV0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTc5XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxNzldW3ZdXT00NTgyNCt2LFRbNDU4MjQrdl09'@;
put 'a1sxNzldW3ZdKTtmb3Ioa1sxODBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVhNzdcdTVhOWFcdTVhN2ZcdTVhOTJcdTVhOWJcdTVhYTdcdTViNzNcdTViNzFcdTViZDJcdTViY2NcdTViZDNcdTViZDBcdTVjMGFcdTVjMGJcdTVj'@;
put 'MzFcdTVkNGNcdTVkNTBcdTVkMzRcdTVkNDdcdTVkZmRcdTVlNDVcdTVlM2RcdTVlNDBcdTVlNDNcdTVlN2VcdTVlY2FcdTVlYzFcdTVlYzJcdTVlYzRcdTVmM2NcdTVmNmRcdTVmYTlcdTVmYWFcdTVmYThcdTYwZDFcdTYwZTFcdTYwYjJcdTYwYjZcdTYwZTBcdTYxMWNcdTYxMjNcdTYwZmFc'@;
put 'dTYxMTVcdTYwZjBcdTYwZmJcdTYwZjRcdTYxNjhcdTYwZjFcdTYxMGVcdTYwZjZcdTYxMDlcdTYxMDBcdTYxMTJcdTYyMWZcdTYyNDlcdTYzYTNcdTYzOGNcdTYzY2ZcdTYzYzBcdTYzZTlcdTYzYzlcdTYzYzZcdTYzY2RcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dTYzZDJcdTYzZTNcdTYzZDBcdTYzZTFcdTYzZDZcdTYzZWRcdTYzZWVcdTYzNzZcdTYzZjRcdTYzZWFcdTYzZGJcdTY0NTJcdTYzZGFcdTYzZjlcdTY1NWVcdTY1NjZcdTY1NjJcdTY1NjNcdTY1OTFcdTY1OTBcdTY1YWZcdTY2NmVcdTY2NzBcdTY2NzRcdTY2NzZcdTY2NmZcdTY2OTFcdTY2'@;
put 'N2FcdTY2N2VcdTY2NzdcdTY2ZmVcdTY2ZmZcdTY3MWZcdTY3MWRcdTY4ZmFcdTY4ZDVcdTY4ZTBcdTY4ZDhcdTY4ZDdcdTY5MDVcdTY4ZGZcdTY4ZjVcdTY4ZWVcdTY4ZTdcdTY4ZjlcdTY4ZDJcdTY4ZjJcdTY4ZTNcdTY4Y2JcdTY4Y2RcdTY5MGRcdTY5MTJcdTY5MGVcdTY4YzlcdTY4ZGFc'@;
put 'dTY5NmVcdTY4ZmJcdTZiM2VcdTZiM2FcdTZiM2RcdTZiOThcdTZiOTZcdTZiYmNcdTZiZWZcdTZjMmVcdTZjMmZcdTZjMmNcdTZlMmZcdTZlMzhcdTZlNTRcdTZlMjFcdTZlMzJcdTZlNjdcdTZlNGFcdTZlMjBcdTZlMjVcdTZlMjNcdTZlMWJcdTZlNWJcdTZlNThcdTZlMjRcdTZlNTZcdTZl'@;
put 'NmVcdTZlMmRcdTZlMjZcdTZlNmZcdTZlMzRcdTZlNGRcdTZlM2FcdTZlMmNcdTZlNDNcdTZlMWRcdTZlM2VcdTZlY2JcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxODBdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE4MF1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTgwXVt2XV09NDYwODAr'@;
put 'dixUWzQ2MDgwK3ZdPWtbMTgwXVt2XSk7Zm9yKGtbMTgxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZTg5XHU2ZTE5XHU2ZTRlXHU2ZTYzXHU2ZTQ0XHU2ZTcyXHU2ZTY5XHU2ZTVmXHU3MTE5XHU3MTFhXHU3MTI2XHU3MTMwXHU3'@;
put 'MTIxXHU3MTM2XHU3MTZlXHU3MTFjXHU3MjRjXHU3Mjg0XHU3MjgwXHU3MzM2XHU3MzI1XHU3MzM0XHU3MzI5XHU3NDNhXHU3NDJhXHU3NDMzXHU3NDIyXHU3NDI1XHU3NDM1XHU3NDM2XHU3NDM0XHU3NDJmXHU3NDFiXHU3NDI2XHU3NDI4XHU3NTI1XHU3NTI2XHU3NTZiXHU3NTZhXHU3NWUy'@;
put 'XHU3NWRiXHU3NWUzXHU3NWQ5XHU3NWQ4XHU3NWRlXHU3NWUwXHU3NjdiXHU3NjdjXHU3Njk2XHU3NjkzXHU3NmI0XHU3NmRjXHU3NzRmXHU3N2VkXHU3ODVkXHU3ODZjXHU3ODZmXHU3YTBkXHU3YTA4XHU3YTBiXHU3YTA1XHU3YTAwXHU3YTk4XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHU3YTk3XHU3YTk2XHU3YWU1XHU3YWUzXHU3YjQ5XHU3YjU2XHU3YjQ2XHU3YjUwXHU3YjUyXHU3YjU0XHU3YjRkXHU3YjRiXHU3YjRmXHU3YjUxXHU3YzlmXHU3Y2E1XHU3ZDVlXHU3ZDUwXHU3ZDY4XHU3ZDU1XHU3ZDJiXHU3ZDZlXHU3ZDcyXHU3ZDYxXHU3ZDY2XHU3'@;
put 'ZDYyXHU3ZDcwXHU3ZDczXHU1NTg0XHU3ZmQ0XHU3ZmQ1XHU4MDBiXHU4MDUyXHU4MDg1XHU4MTU1XHU4MTU0XHU4MTRiXHU4MTUxXHU4MTRlXHU4MTM5XHU4MTQ2XHU4MTNlXHU4MTRjXHU4MTUzXHU4MTc0XHU4MjEyXHU4MjFjXHU4M2U5XHU4NDAzXHU4M2Y4XHU4NDBkXHU4M2UwXHU4M2M1'@;
put 'XHU4NDBiXHU4M2MxXHU4M2VmXHU4M2YxXHU4M2Y0XHU4NDU3XHU4NDBhXHU4M2YwXHU4NDBjXHU4M2NjXHU4M2ZkXHU4M2YyXHU4M2NhXHU4NDM4XHU4NDBlXHU4NDA0XHU4M2RjXHU4NDA3XHU4M2Q0XHU4M2RmXHU4NjViXHU4NmRmXHU4NmQ5XHU4NmVkXHU4NmQ0XHU4NmRiXHU4NmU0XHU4'@;
put 'NmQwXHU4NmRlXHU4ODU3XHU4OGMxXHU4OGMyXHU4OGIxXHU4OTgzXHU4OTk2XHU4YTNiXHU4YTYwXHU4YTU1XHU4YTVlXHU4YTNjXHU4YTQxXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTgxXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxODFdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE4'@;
put 'MV1bdl1dPTQ2MzM2K3YsVFs0NjMzNit2XT1rWzE4MV1bdl0pO2ZvcihrWzE4Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGE1NFx1OGE1Ylx1OGE1MFx1OGE0Nlx1OGEzNFx1OGEzYVx1OGEzNlx1OGE1Nlx1OGM2MVx1OGM4Mlx1'@;
put 'OGNhZlx1OGNiY1x1OGNiM1x1OGNiZFx1OGNjMVx1OGNiYlx1OGNjMFx1OGNiNFx1OGNiN1x1OGNiNlx1OGNiZlx1OGNiOFx1OGQ4YVx1OGQ4NVx1OGQ4MVx1OGRjZVx1OGRkZFx1OGRjYlx1OGRkYVx1OGRkMVx1OGRjY1x1OGRkYlx1OGRjNlx1OGVmYlx1OGVmOFx1OGVmY1x1OGY5Y1x1OTAy'@;
put 'ZVx1OTAzNVx1OTAzMVx1OTAzOFx1OTAzMlx1OTAzNlx1OTEwMlx1OTBmNVx1OTEwOVx1OTBmZVx1OTE2M1x1OTE2NVx1OTFjZlx1OTIxNFx1OTIxNVx1OTIyM1x1OTIwOVx1OTIxZVx1OTIwZFx1OTIxMFx1OTIwN1x1OTIxMVx1OTU5NFx1OTU4Zlx1OTU4Ylx1OTU5MVx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTU5M1x1OTU5Mlx1OTU4ZVx1OTY4YVx1OTY4ZVx1OTY4Ylx1OTY3ZFx1OTY4NVx1OTY4Nlx1OTY4ZFx1OTY3Mlx1OTY4NFx1OTZjMVx1OTZjNVx1OTZjNFx1OTZjNlx1OTZjN1x1OTZlZlx1OTZmMlx1OTdjY1x1OTgwNVx1OTgwNlx1OTgwOFx1'@;
put 'OThlN1x1OThlYVx1OThlZlx1OThlOVx1OThmMlx1OThlZFx1OTlhZVx1OTlhZFx1OWVjM1x1OWVjZFx1OWVkMVx1NGU4Mlx1NTBhZFx1NTBiNVx1NTBiMlx1NTBiM1x1NTBjNVx1NTBiZVx1NTBhY1x1NTBiN1x1NTBiYlx1NTBhZlx1NTBjN1x1NTI3Zlx1NTI3N1x1NTI3ZFx1NTJkZlx1NTJl'@;
put 'Nlx1NTJlNFx1NTJlMlx1NTJlM1x1NTMyZlx1NTVkZlx1NTVlOFx1NTVkM1x1NTVlNlx1NTVjZVx1NTVkY1x1NTVjN1x1NTVkMVx1NTVlM1x1NTVlNFx1NTVlZlx1NTVkYVx1NTVlMVx1NTVjNVx1NTVjNlx1NTVlNVx1NTVjOVx1NTcxMlx1NTcxM1x1NTg1ZVx1NTg1MVx1NTg1OFx1NTg1N1x1'@;
put 'NTg1YVx1NTg1NFx1NTg2Ylx1NTg0Y1x1NTg2ZFx1NTg0YVx1NTg2Mlx1NTg1Mlx1NTg0Ylx1NTk2N1x1NWFjMVx1NWFjOVx1NWFjY1x1NWFiZVx1NWFiZFx1NWFiY1x1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE4Ml0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTgyXVt2XS5jaGFyQ29kZUF0'@;
put 'KDApJiYoc2Vba1sxODJdW3ZdXT00NjU5Mit2LFRbNDY1OTIrdl09a1sxODJdW3ZdKTtmb3Ioa1sxODNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVhYjNcdTVhYzJcdTVhYjJcdTVkNjlcdTVkNmZcdTVlNGNcdTVlNzlcdTVlYzlc'@;
put 'dTVlYzhcdTVmMTJcdTVmNTlcdTVmYWNcdTVmYWVcdTYxMWFcdTYxMGZcdTYxNDhcdTYxMWZcdTYwZjNcdTYxMWJcdTYwZjlcdTYxMDFcdTYxMDhcdTYxNGVcdTYxNGNcdTYxNDRcdTYxNGRcdTYxM2VcdTYxMzRcdTYxMjdcdTYxMGRcdTYxMDZcdTYxMzdcdTYyMjFcdTYyMjJcdTY0MTNcdTY0'@;
put 'M2VcdTY0MWVcdTY0MmFcdTY0MmRcdTY0M2RcdTY0MmNcdTY0MGZcdTY0MWNcdTY0MTRcdTY0MGRcdTY0MzZcdTY0MTZcdTY0MTdcdTY0MDZcdTY1NmNcdTY1OWZcdTY1YjBcdTY2OTdcdTY2ODlcdTY2ODdcdTY2ODhcdTY2OTZcdTY2ODRcdTY2OThcdTY2OGRcdTY3MDNcdTY5OTRcdTY5NmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY5NWFcdTY5NzdcdTY5NjBcdTY5NTRcdTY5NzVcdTY5MzBcdTY5ODJcdTY5NGFcdTY5NjhcdTY5NmJcdTY5NWVcdTY5NTNcdTY5NzlcdTY5ODZcdTY5NWRcdTY5NjNcdTY5NWJcdTZiNDdcdTZiNzJcdTZiYzBcdTZiYmZc'@;
put 'dTZiZDNcdTZiZmRcdTZlYTJcdTZlYWZcdTZlZDNcdTZlYjZcdTZlYzJcdTZlOTBcdTZlOWRcdTZlYzdcdTZlYzVcdTZlYTVcdTZlOThcdTZlYmNcdTZlYmFcdTZlYWJcdTZlZDFcdTZlOTZcdTZlOWNcdTZlYzRcdTZlZDRcdTZlYWFcdTZlYTdcdTZlYjRcdTcxNGVcdTcxNTlcdTcxNjlcdTcx'@;
put 'NjRcdTcxNDlcdTcxNjdcdTcxNWNcdTcxNmNcdTcxNjZcdTcxNGNcdTcxNjVcdTcxNWVcdTcxNDZcdTcxNjhcdTcxNTZcdTcyM2FcdTcyNTJcdTczMzdcdTczNDVcdTczM2ZcdTczM2VcdTc0NmZcdTc0NWFcdTc0NTVcdTc0NWZcdTc0NWVcdTc0NDFcdTc0M2ZcdTc0NTlcdTc0NWJcdTc0NWNc'@;
put 'dTc1NzZcdTc1NzhcdTc2MDBcdTc1ZjBcdTc2MDFcdTc1ZjJcdTc1ZjFcdTc1ZmFcdTc1ZmZcdTc1ZjRcdTc1ZjNcdTc2ZGVcdTc2ZGZcdTc3NWJcdTc3NmJcdTc3NjZcdTc3NWVcdTc3NjNcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxODNdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE4M11b'@;
put 'dl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTgzXVt2XV09NDY4NDgrdixUWzQ2ODQ4K3ZdPWtbMTgzXVt2XSk7Zm9yKGtbMTg0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3Nzc5XHU3NzZhXHU3NzZjXHU3NzVjXHU3NzY1XHU3NzY4'@;
put 'XHU3NzYyXHU3N2VlXHU3ODhlXHU3OGIwXHU3ODk3XHU3ODk4XHU3ODhjXHU3ODg5XHU3ODdjXHU3ODkxXHU3ODkzXHU3ODdmXHU3OTdhXHU3OTdmXHU3OTgxXHU4NDJjXHU3OWJkXHU3YTFjXHU3YTFhXHU3YTIwXHU3YTE0XHU3YTFmXHU3YTFlXHU3YTlmXHU3YWEwXHU3Yjc3XHU3YmMwXHU3'@;
put 'YjYwXHU3YjZlXHU3YjY3XHU3Y2IxXHU3Y2IzXHU3Y2I1XHU3ZDkzXHU3ZDc5XHU3ZDkxXHU3ZDgxXHU3ZDhmXHU3ZDViXHU3ZjZlXHU3ZjY5XHU3ZjZhXHU3ZjcyXHU3ZmE5XHU3ZmE4XHU3ZmE0XHU4MDU2XHU4MDU4XHU4MDg2XHU4MDg0XHU4MTcxXHU4MTcwXHU4MTc4XHU4MTY1XHU4MTZl'@;
put 'XHU4MTczXHU4MTZiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MTc5XHU4MTdhXHU4MTY2XHU4MjA1XHU4MjQ3XHU4NDgyXHU4NDc3XHU4NDNkXHU4NDMxXHU4NDc1XHU4NDY2XHU4NDZiXHU4NDQ5XHU4NDZjXHU4NDViXHU4NDNjXHU4NDM1XHU4NDYxXHU4NDYz'@;
put 'XHU4NDY5XHU4NDZkXHU4NDQ2XHU4NjVlXHU4NjVjXHU4NjVmXHU4NmY5XHU4NzEzXHU4NzA4XHU4NzA3XHU4NzAwXHU4NmZlXHU4NmZiXHU4NzAyXHU4NzAzXHU4NzA2XHU4NzBhXHU4ODU5XHU4OGRmXHU4OGQ0XHU4OGQ5XHU4OGRjXHU4OGQ4XHU4OGRkXHU4OGUxXHU4OGNhXHU4OGQ1XHU4'@;
put 'OGQyXHU4OTljXHU4OWUzXHU4YTZiXHU4YTcyXHU4YTczXHU4YTY2XHU4YTY5XHU4YTcwXHU4YTg3XHU4YTdjXHU4YTYzXHU4YWEwXHU4YTcxXHU4YTg1XHU4YTZkXHU4YTYyXHU4YTZlXHU4YTZjXHU4YTc5XHU4YTdiXHU4YTNlXHU4YTY4XHU4YzYyXHU4YzhhXHU4Yzg5XHU4Y2NhXHU4Y2M3'@;
put 'XHU4Y2M4XHU4Y2M0XHU4Y2IyXHU4Y2MzXHU4Y2MyXHU4Y2M1XHU4ZGUxXHU4ZGRmXHU4ZGU4XHU4ZGVmXHU4ZGYzXHU4ZGZhXHU4ZGVhXHU4ZGU0XHU4ZGU2XHU4ZWIyXHU4ZjAzXHU4ZjA5XHU4ZWZlXHU4ZjBhXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTg0XS5sZW5ndGg7Kyt2KTY1'@;
put 'NTMzIT09a1sxODRdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE4NF1bdl1dPTQ3MTA0K3YsVFs0NzEwNCt2XT1rWzE4NF1bdl0pO2ZvcihrWzE4NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGY5Zlx1OGZiMlx1OTA0Ylx1OTA0'@;
put 'YVx1OTA1M1x1OTA0Mlx1OTA1NFx1OTAzY1x1OTA1NVx1OTA1MFx1OTA0N1x1OTA0Zlx1OTA0ZVx1OTA0ZFx1OTA1MVx1OTAzZVx1OTA0MVx1OTExMlx1OTExN1x1OTE2Y1x1OTE2YVx1OTE2OVx1OTFjOVx1OTIzN1x1OTI1N1x1OTIzOFx1OTIzZFx1OTI0MFx1OTIzZVx1OTI1Ylx1OTI0Ylx1'@;
put 'OTI2NFx1OTI1MVx1OTIzNFx1OTI0OVx1OTI0ZFx1OTI0NVx1OTIzOVx1OTIzZlx1OTI1YVx1OTU5OFx1OTY5OFx1OTY5NFx1OTY5NVx1OTZjZFx1OTZjYlx1OTZjOVx1OTZjYVx1OTZmN1x1OTZmYlx1OTZmOVx1OTZmNlx1OTc1Nlx1OTc3NFx1OTc3Nlx1OTgxMFx1OTgxMVx1OTgxM1x1OTgw'@;
put 'YVx1OTgxMlx1OTgwY1x1OThmY1x1OThmNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OThmZFx1OThmZVx1OTliM1x1OTliMVx1OTliNFx1OWFlMVx1OWNlOVx1OWU4Mlx1OWYwZVx1OWYxM1x1OWYyMFx1NTBlN1x1NTBlZVx1NTBlNVx1NTBkNlx1NTBlZFx1NTBk'@;
put 'YVx1NTBkNVx1NTBjZlx1NTBkMVx1NTBmMVx1NTBjZVx1NTBlOVx1NTE2Mlx1NTFmM1x1NTI4M1x1NTI4Mlx1NTMzMVx1NTNhZFx1NTVmZVx1NTYwMFx1NTYxYlx1NTYxN1x1NTVmZFx1NTYxNFx1NTYwNlx1NTYwOVx1NTYwZFx1NTYwZVx1NTVmN1x1NTYxNlx1NTYxZlx1NTYwOFx1NTYxMFx1'@;
put 'NTVmNlx1NTcxOFx1NTcxNlx1NTg3NVx1NTg3ZVx1NTg4M1x1NTg5M1x1NTg4YVx1NTg3OVx1NTg4NVx1NTg3ZFx1NThmZFx1NTkyNVx1NTkyMlx1NTkyNFx1NTk2YVx1NTk2OVx1NWFlMVx1NWFlNlx1NWFlOVx1NWFkN1x1NWFkNlx1NWFkOFx1NWFlM1x1NWI3NVx1NWJkZVx1NWJlN1x1NWJl'@;
put 'MVx1NWJlNVx1NWJlNlx1NWJlOFx1NWJlMlx1NWJlNFx1NWJkZlx1NWMwZFx1NWM2Mlx1NWQ4NFx1NWQ4N1x1NWU1Ylx1NWU2M1x1NWU1NVx1NWU1N1x1NWU1NFx1NWVkM1x1NWVkNlx1NWYwYVx1NWY0Nlx1NWY3MFx1NWZiOVx1NjE0N1x1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE4NV0u'@;
put 'bGVuZ3RoOysrdik2NTUzMyE9PWtbMTg1XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxODVdW3ZdXT00NzM2MCt2LFRbNDczNjArdl09a1sxODVdW3ZdKTtmb3Ioa1sxODZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYxM2ZcdTYx'@;
put 'NGJcdTYxNzdcdTYxNjJcdTYxNjNcdTYxNWZcdTYxNWFcdTYxNThcdTYxNzVcdTYyMmFcdTY0ODdcdTY0NThcdTY0NTRcdTY0YTRcdTY0NzhcdTY0NWZcdTY0N2FcdTY0NTFcdTY0NjdcdTY0MzRcdTY0NmRcdTY0N2JcdTY1NzJcdTY1YTFcdTY1ZDdcdTY1ZDZcdTY2YTJcdTY2YThcdTY2OWRc'@;
put 'dTY5OWNcdTY5YThcdTY5OTVcdTY5YzFcdTY5YWVcdTY5ZDNcdTY5Y2JcdTY5OWJcdTY5YjdcdTY5YmJcdTY5YWJcdTY5YjRcdTY5ZDBcdTY5Y2RcdTY5YWRcdTY5Y2NcdTY5YTZcdTY5YzNcdTY5YTNcdTZiNDlcdTZiNGNcdTZjMzNcdTZmMzNcdTZmMTRcdTZlZmVcdTZmMTNcdTZlZjRcdTZm'@;
put 'MjlcdTZmM2VcdTZmMjBcdTZmMmNcdTZmMGZcdTZmMDJcdTZmMjJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZlZmZcdTZlZWZcdTZmMDZcdTZmMzFcdTZmMzhcdTZmMzJcdTZmMjNcdTZmMTVcdTZmMmJcdTZmMmZcdTZmODhcdTZmMmFcdTZlZWNcdTZmMDFcdTZl'@;
put 'ZjJcdTZlY2NcdTZlZjdcdTcxOTRcdTcxOTlcdTcxN2RcdTcxOGFcdTcxODRcdTcxOTJcdTcyM2VcdTcyOTJcdTcyOTZcdTczNDRcdTczNTBcdTc0NjRcdTc0NjNcdTc0NmFcdTc0NzBcdTc0NmRcdTc1MDRcdTc1OTFcdTc2MjdcdTc2MGRcdTc2MGJcdTc2MDlcdTc2MTNcdTc2ZTFcdTc2ZTNc'@;
put 'dTc3ODRcdTc3N2RcdTc3N2ZcdTc3NjFcdTc4YzFcdTc4OWZcdTc4YTdcdTc4YjNcdTc4YTlcdTc4YTNcdTc5OGVcdTc5OGZcdTc5OGRcdTdhMmVcdTdhMzFcdTdhYWFcdTdhYTlcdTdhZWRcdTdhZWZcdTdiYTFcdTdiOTVcdTdiOGJcdTdiNzVcdTdiOTdcdTdiOWRcdTdiOTRcdTdiOGZcdTdi'@;
put 'YjhcdTdiODdcdTdiODRcdTdjYjlcdTdjYmRcdTdjYmVcdTdkYmJcdTdkYjBcdTdkOWNcdTdkYmRcdTdkYmVcdTdkYTBcdTdkY2FcdTdkYjRcdTdkYjJcdTdkYjFcdTdkYmFcdTdkYTJcdTdkYmZcdTdkYjVcdTdkYjhcdTdkYWRcdTdkZDJcdTdkYzdcdTdkYWNcdWZmZmQiLnNwbGl0KCIiKSx2'@;
put 'PTA7diE9a1sxODZdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE4Nl1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTg2XVt2XV09NDc2MTYrdixUWzQ3NjE2K3ZdPWtbMTg2XVt2XSk7Zm9yKGtbMTg3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHU3ZjcwXHU3ZmUwXHU3ZmUxXHU3ZmRmXHU4MDVlXHU4MDVhXHU4MDg3XHU4MTUwXHU4MTgwXHU4MThmXHU4MTg4XHU4MThhXHU4MTdmXHU4MTgyXHU4MWU3XHU4MWZhXHU4MjA3XHU4MjE0XHU4MjFlXHU4MjRiXHU4NGM5XHU4NGJmXHU4NGM2XHU4NGM0XHU4NDk5XHU4NDllXHU4NGIy'@;
put 'XHU4NDljXHU4NGNiXHU4NGI4XHU4NGMwXHU4NGQzXHU4NDkwXHU4NGJjXHU4NGQxXHU4NGNhXHU4NzNmXHU4NzFjXHU4NzNiXHU4NzIyXHU4NzI1XHU4NzM0XHU4NzE4XHU4NzU1XHU4NzM3XHU4NzI5XHU4OGYzXHU4OTAyXHU4OGY0XHU4OGY5XHU4OGY4XHU4OGZkXHU4OGU4XHU4OTFhXHU4'@;
put 'OGVmXHU4YWE2XHU4YThjXHU4YTllXHU4YWEzXHU4YThkXHU4YWExXHU4YTkzXHU4YWE0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YWFhXHU4YWE1XHU4YWE4XHU4YTk4XHU4YTkxXHU4YTlhXHU4YWE3XHU4YzZhXHU4YzhkXHU4YzhjXHU4Y2QzXHU4Y2QxXHU4'@;
put 'Y2QyXHU4ZDZiXHU4ZDk5XHU4ZDk1XHU4ZGZjXHU4ZjE0XHU4ZjEyXHU4ZjE1XHU4ZjEzXHU4ZmEzXHU5MDYwXHU5MDU4XHU5MDVjXHU5MDYzXHU5MDU5XHU5MDVlXHU5MDYyXHU5MDVkXHU5MDViXHU5MTE5XHU5MTE4XHU5MTFlXHU5MTc1XHU5MTc4XHU5MTc3XHU5MTc0XHU5Mjc4XHU5Mjgw'@;
put 'XHU5Mjg1XHU5Mjk4XHU5Mjk2XHU5MjdiXHU5MjkzXHU5MjljXHU5MmE4XHU5MjdjXHU5MjkxXHU5NWExXHU5NWE4XHU5NWE5XHU5NWEzXHU5NWE1XHU5NWE0XHU5Njk5XHU5NjljXHU5NjliXHU5NmNjXHU5NmQyXHU5NzAwXHU5NzdjXHU5Nzg1XHU5N2Y2XHU5ODE3XHU5ODE4XHU5OGFmXHU5'@;
put 'OGIxXHU5OTAzXHU5OTA1XHU5OTBjXHU5OTA5XHU5OWMxXHU5YWFmXHU5YWIwXHU5YWU2XHU5YjQxXHU5YjQyXHU5Y2Y0XHU5Y2Y2XHU5Y2YzXHU5ZWJjXHU5ZjNiXHU5ZjRhXHU1MTA0XHU1MTAwXHU1MGZiXHU1MGY1XHU1MGY5XHU1MTAyXHU1MTA4XHU1MTA5XHU1MTA1XHU1MWRjXHVmZmZk'@;
put 'Ii5zcGxpdCgiIiksdj0wO3YhPWtbMTg3XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxODddW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE4N11bdl1dPTQ3ODcyK3YsVFs0Nzg3Mit2XT1rWzE4N11bdl0pO2ZvcihrWzE4OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1NTI4N1x1NTI4OFx1NTI4OVx1NTI4ZFx1NTI4YVx1NTJmMFx1NTNiMlx1NTYyZVx1NTYzYlx1NTYzOVx1NTYzMlx1NTYzZlx1NTYzNFx1NTYyOVx1NTY1M1x1NTY0ZVx1NTY1N1x1NTY3NFx1NTYzNlx1NTYyZlx1NTYzMFx1NTg4MFx1NTg5Zlx1NTg5ZVx1NThi'@;
put 'M1x1NTg5Y1x1NThhZVx1NThhOVx1NThhNlx1NTk2ZFx1NWIwOVx1NWFmYlx1NWIwYlx1NWFmNVx1NWIwY1x1NWIwOFx1NWJlZVx1NWJlY1x1NWJlOVx1NWJlYlx1NWM2NFx1NWM2NVx1NWQ5ZFx1NWQ5NFx1NWU2Mlx1NWU1Zlx1NWU2MVx1NWVlMlx1NWVkYVx1NWVkZlx1NWVkZFx1NWVlM1x1'@;
put 'NWVlMFx1NWY0OFx1NWY3MVx1NWZiN1x1NWZiNVx1NjE3Nlx1NjE2N1x1NjE2ZVx1NjE1ZFx1NjE1NVx1NjE4Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjE3Y1x1NjE3MFx1NjE2Ylx1NjE3ZVx1NjFhN1x1NjE5MFx1NjFhYlx1NjE4ZVx1NjFhY1x1NjE5YVx1'@;
put 'NjFhNFx1NjE5NFx1NjFhZVx1NjIyZVx1NjQ2OVx1NjQ2Zlx1NjQ3OVx1NjQ5ZVx1NjRiMlx1NjQ4OFx1NjQ5MFx1NjRiMFx1NjRhNVx1NjQ5M1x1NjQ5NVx1NjRhOVx1NjQ5Mlx1NjRhZVx1NjRhZFx1NjRhYlx1NjQ5YVx1NjRhY1x1NjQ5OVx1NjRhMlx1NjRiM1x1NjU3NVx1NjU3N1x1NjU3'@;
put 'OFx1NjZhZVx1NjZhYlx1NjZiNFx1NjZiMVx1NmEyM1x1NmExZlx1NjllOFx1NmEwMVx1NmExZVx1NmExOVx1NjlmZFx1NmEyMVx1NmExM1x1NmEwYVx1NjlmM1x1NmEwMlx1NmEwNVx1NjllZFx1NmExMVx1NmI1MFx1NmI0ZVx1NmJhNFx1NmJjNVx1NmJjNlx1NmYzZlx1NmY3Y1x1NmY4NFx1'@;
put 'NmY1MVx1NmY2Nlx1NmY1NFx1NmY4Nlx1NmY2ZFx1NmY1Ylx1NmY3OFx1NmY2ZVx1NmY4ZVx1NmY3YVx1NmY3MFx1NmY2NFx1NmY5N1x1NmY1OFx1NmVkNVx1NmY2Zlx1NmY2MFx1NmY1Zlx1NzE5Zlx1NzFhY1x1NzFiMVx1NzFhOFx1NzI1Nlx1NzI5Ylx1NzM0ZVx1NzM1N1x1NzQ2OVx1NzQ4'@;
put 'Ylx1NzQ4M1x1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE4OF0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTg4XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxODhdW3ZdXT00ODEyOCt2LFRbNDgxMjgrdl09a1sxODhdW3ZdKTtmb3Ioa1sxODldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0N2VcdTc0ODBcdTc1N2ZcdTc2MjBcdTc2MjlcdTc2MWZcdTc2MjRcdTc2MjZcdTc2MjFcdTc2MjJcdTc2OWFcdTc2YmFcdTc2ZTRcdTc3OGVcdTc3ODdcdTc3OGNcdTc3OTFcdTc3OGJcdTc4Y2JcdTc4YzVcdTc4YmFcdTc4Y2FcdTc4'@;
put 'YmVcdTc4ZDVcdTc4YmNcdTc4ZDBcdTdhM2ZcdTdhM2NcdTdhNDBcdTdhM2RcdTdhMzdcdTdhM2JcdTdhYWZcdTdhYWVcdTdiYWRcdTdiYjFcdTdiYzRcdTdiYjRcdTdiYzZcdTdiYzdcdTdiYzFcdTdiYTBcdTdiY2NcdTdjY2FcdTdkZTBcdTdkZjRcdTdkZWZcdTdkZmJcdTdkZDhcdTdkZWNc'@;
put 'dTdkZGRcdTdkZThcdTdkZTNcdTdkZGFcdTdkZGVcdTdkZTlcdTdkOWVcdTdkZDlcdTdkZjJcdTdkZjlcdTdmNzVcdTdmNzdcdTdmYWZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdmZTlcdTgwMjZcdTgxOWJcdTgxOWNcdTgxOWRcdTgxYTBcdTgxOWFcdTgxOThc'@;
put 'dTg1MTdcdTg1M2RcdTg1MWFcdTg0ZWVcdTg1MmNcdTg1MmRcdTg1MTNcdTg1MTFcdTg1MjNcdTg1MjFcdTg1MTRcdTg0ZWNcdTg1MjVcdTg0ZmZcdTg1MDZcdTg3ODJcdTg3NzRcdTg3NzZcdTg3NjBcdTg3NjZcdTg3NzhcdTg3NjhcdTg3NTlcdTg3NTdcdTg3NGNcdTg3NTNcdTg4NWJcdTg4'@;
put 'NWRcdTg5MTBcdTg5MDdcdTg5MTJcdTg5MTNcdTg5MTVcdTg5MGFcdThhYmNcdThhZDJcdThhYzdcdThhYzRcdThhOTVcdThhY2JcdThhZjhcdThhYjJcdThhYzlcdThhYzJcdThhYmZcdThhYjBcdThhZDZcdThhY2RcdThhYjZcdThhYjlcdThhZGJcdThjNGNcdThjNGVcdThjNmNcdThjZTBc'@;
put 'dThjZGVcdThjZTZcdThjZTRcdThjZWNcdThjZWRcdThjZTJcdThjZTNcdThjZGNcdThjZWFcdThjZTFcdThkNmRcdThkOWZcdThkYTNcdThlMmJcdThlMTBcdThlMWRcdThlMjJcdThlMGZcdThlMjlcdThlMWZcdThlMjFcdThlMWVcdThlYmFcdThmMWRcdThmMWJcdThmMWZcdThmMjlcdThm'@;
put 'MjZcdThmMmFcdThmMWNcdThmMWVcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxODldLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE4OV1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTg5XVt2XV09NDgzODQrdixUWzQ4Mzg0K3ZdPWtbMTg5XVt2XSk7Zm9yKGtbMTkwXT0iXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZjI1XHU5MDY5XHU5MDZlXHU5MDY4XHU5MDZkXHU5MDc3XHU5MTMwXHU5MTJkXHU5MTI3XHU5MTMxXHU5MTg3XHU5MTg5XHU5MThiXHU5MTgzXHU5MmM1XHU5MmJiXHU5MmI3XHU5MmVhXHU5MmFjXHU5MmU0XHU5'@;
put 'MmMxXHU5MmIzXHU5MmJjXHU5MmQyXHU5MmM3XHU5MmYwXHU5MmIyXHU5NWFkXHU5NWIxXHU5NzA0XHU5NzA2XHU5NzA3XHU5NzA5XHU5NzYwXHU5NzhkXHU5NzhiXHU5NzhmXHU5ODIxXHU5ODJiXHU5ODFjXHU5OGIzXHU5OTBhXHU5OTEzXHU5OTEyXHU5OTE4XHU5OWRkXHU5OWQwXHU5OWRm'@;
put 'XHU5OWRiXHU5OWQxXHU5OWQ1XHU5OWQyXHU5OWQ5XHU5YWI3XHU5YWVlXHU5YWVmXHU5YjI3XHU5YjQ1XHU5YjQ0XHU5Yjc3XHU5YjZmXHU5ZDA2XHU5ZDA5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZDAzXHU5ZWE5XHU5ZWJlXHU5ZWNlXHU1OGE4XHU5ZjUy'@;
put 'XHU1MTEyXHU1MTE4XHU1MTE0XHU1MTEwXHU1MTE1XHU1MTgwXHU1MWFhXHU1MWRkXHU1MjkxXHU1MjkzXHU1MmYzXHU1NjU5XHU1NjZiXHU1Njc5XHU1NjY5XHU1NjY0XHU1Njc4XHU1NjZhXHU1NjY4XHU1NjY1XHU1NjcxXHU1NjZmXHU1NjZjXHU1NjYyXHU1Njc2XHU1OGMxXHU1OGJlXHU1'@;
put 'OGM3XHU1OGM1XHU1OTZlXHU1YjFkXHU1YjM0XHU1Yjc4XHU1YmYwXHU1YzBlXHU1ZjRhXHU2MWIyXHU2MTkxXHU2MWE5XHU2MThhXHU2MWNkXHU2MWI2XHU2MWJlXHU2MWNhXHU2MWM4XHU2MjMwXHU2NGM1XHU2NGMxXHU2NGNiXHU2NGJiXHU2NGJjXHU2NGRhXHU2NGM0XHU2NGM3XHU2NGMy'@;
put 'XHU2NGNkXHU2NGJmXHU2NGQyXHU2NGQ0XHU2NGJlXHU2NTc0XHU2NmM2XHU2NmM5XHU2NmI5XHU2NmM0XHU2NmM3XHU2NmI4XHU2YTNkXHU2YTM4XHU2YTNhXHU2YTU5XHU2YTZiXHU2YTU4XHU2YTM5XHU2YTQ0XHU2YTYyXHU2YTYxXHU2YTRiXHU2YTQ3XHU2YTM1XHU2YTVmXHU2YTQ4XHU2'@;
put 'YjU5XHU2Yjc3XHU2YzA1XHU2ZmMyXHU2ZmIxXHU2ZmExXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTkwXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxOTBdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE5MF1bdl1dPTQ4NjQwK3YsVFs0ODY0MCt2XT1rWzE5MF1bdl0pO2ZvcihrWzE5MV09'@;
put 'Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmZjM1x1NmZhNFx1NmZjMVx1NmZhN1x1NmZiM1x1NmZjMFx1NmZiOVx1NmZiNlx1NmZhNlx1NmZhMFx1NmZiNFx1NzFiZVx1NzFjOVx1NzFkMFx1NzFkMlx1NzFjOFx1NzFkNVx1NzFiOVx1'@;
put 'NzFjZVx1NzFkOVx1NzFkY1x1NzFjM1x1NzFjNFx1NzM2OFx1NzQ5Y1x1NzRhM1x1NzQ5OFx1NzQ5Zlx1NzQ5ZVx1NzRlMlx1NzUwY1x1NzUwZFx1NzYzNFx1NzYzOFx1NzYzYVx1NzZlN1x1NzZlNVx1NzdhMFx1Nzc5ZVx1Nzc5Zlx1NzdhNVx1NzhlOFx1NzhkYVx1NzhlY1x1NzhlN1x1Nzlh'@;
put 'Nlx1N2E0ZFx1N2E0ZVx1N2E0Nlx1N2E0Y1x1N2E0Ylx1N2FiYVx1N2JkOVx1N2MxMVx1N2JjOVx1N2JlNFx1N2JkYlx1N2JlMVx1N2JlOVx1N2JlNlx1N2NkNVx1N2NkNlx1N2UwYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2UxMVx1N2UwOFx1N2UxYlx1N2Uy'@;
put 'M1x1N2UxZVx1N2UxZFx1N2UwOVx1N2UxMFx1N2Y3OVx1N2ZiMlx1N2ZmMFx1N2ZmMVx1N2ZlZVx1ODAyOFx1ODFiM1x1ODFhOVx1ODFhOFx1ODFmYlx1ODIwOFx1ODI1OFx1ODI1OVx1ODU0YVx1ODU1OVx1ODU0OFx1ODU2OFx1ODU2OVx1ODU0M1x1ODU0OVx1ODU2ZFx1ODU2YVx1ODU1ZVx1'@;
put 'ODc4M1x1ODc5Zlx1ODc5ZVx1ODdhMlx1ODc4ZFx1ODg2MVx1ODkyYVx1ODkzMlx1ODkyNVx1ODkyYlx1ODkyMVx1ODlhYVx1ODlhNlx1OGFlNlx1OGFmYVx1OGFlYlx1OGFmMVx1OGIwMFx1OGFkY1x1OGFlN1x1OGFlZVx1OGFmZVx1OGIwMVx1OGIwMlx1OGFmN1x1OGFlZFx1OGFmM1x1OGFm'@;
put 'Nlx1OGFmY1x1OGM2Ylx1OGM2ZFx1OGM5M1x1OGNmNFx1OGU0NFx1OGUzMVx1OGUzNFx1OGU0Mlx1OGUzOVx1OGUzNVx1OGYzYlx1OGYyZlx1OGYzOFx1OGYzM1x1OGZhOFx1OGZhNlx1OTA3NVx1OTA3NFx1OTA3OFx1OTA3Mlx1OTA3Y1x1OTA3YVx1OTEzNFx1OTE5Mlx1OTMyMFx1OTMzNlx1'@;
put 'OTJmOFx1OTMzM1x1OTMyZlx1OTMyMlx1OTJmY1x1OTMyYlx1OTMwNFx1OTMxYVx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE5MV0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTkxXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxOTFdW3ZdXT00ODg5Nit2LFRbNDg4OTYrdl09a1sxOTFdW3Zd'@;
put 'KTtmb3Ioa1sxOTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzMTBcdTkzMjZcdTkzMjFcdTkzMTVcdTkzMmVcdTkzMTlcdTk1YmJcdTk2YTdcdTk2YThcdTk2YWFcdTk2ZDVcdTk3MGVcdTk3MTFcdTk3MTZcdTk3MGRcdTk3MTNc'@;
put 'dTk3MGZcdTk3NWJcdTk3NWNcdTk3NjZcdTk3OThcdTk4MzBcdTk4MzhcdTk4M2JcdTk4MzdcdTk4MmRcdTk4MzlcdTk4MjRcdTk5MTBcdTk5MjhcdTk5MWVcdTk5MWJcdTk5MjFcdTk5MWFcdTk5ZWRcdTk5ZTJcdTk5ZjFcdTlhYjhcdTlhYmNcdTlhZmJcdTlhZWRcdTliMjhcdTliOTFcdTlk'@;
put 'MTVcdTlkMjNcdTlkMjZcdTlkMjhcdTlkMTJcdTlkMWJcdTllZDhcdTllZDRcdTlmOGRcdTlmOWNcdTUxMmFcdTUxMWZcdTUxMjFcdTUxMzJcdTUyZjVcdTU2OGVcdTU2ODBcdTU2OTBcdTU2ODVcdTU2ODdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU2OGZcdTU4'@;
put 'ZDVcdTU4ZDNcdTU4ZDFcdTU4Y2VcdTViMzBcdTViMmFcdTViMjRcdTViN2FcdTVjMzdcdTVjNjhcdTVkYmNcdTVkYmFcdTVkYmRcdTVkYjhcdTVlNmJcdTVmNGNcdTVmYmRcdTYxYzlcdTYxYzJcdTYxYzdcdTYxZTZcdTYxY2JcdTYyMzJcdTYyMzRcdTY0Y2VcdTY0Y2FcdTY0ZDhcdTY0ZTBc'@;
put 'dTY0ZjBcdTY0ZTZcdTY0ZWNcdTY0ZjFcdTY0ZTJcdTY0ZWRcdTY1ODJcdTY1ODNcdTY2ZDlcdTY2ZDZcdTZhODBcdTZhOTRcdTZhODRcdTZhYTJcdTZhOWNcdTZhZGJcdTZhYTNcdTZhN2VcdTZhOTdcdTZhOTBcdTZhYTBcdTZiNWNcdTZiYWVcdTZiZGFcdTZjMDhcdTZmZDhcdTZmZjFcdTZm'@;
put 'ZGZcdTZmZTBcdTZmZGJcdTZmZTRcdTZmZWJcdTZmZWZcdTZmODBcdTZmZWNcdTZmZTFcdTZmZTlcdTZmZDVcdTZmZWVcdTZmZjBcdTcxZTdcdTcxZGZcdTcxZWVcdTcxZTZcdTcxZTVcdTcxZWRcdTcxZWNcdTcxZjRcdTcxZTBcdTcyMzVcdTcyNDZcdTczNzBcdTczNzJcdTc0YTlcdTc0YjBc'@;
put 'dTc0YTZcdTc0YThcdTc2NDZcdTc2NDJcdTc2NGNcdTc2ZWFcdTc3YjNcdTc3YWFcdTc3YjBcdTc3YWNcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxOTJdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE5Ml1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTkyXVt2XV09NDkxNTIrdixUWzQ5MTUy'@;
put 'K3ZdPWtbMTkyXVt2XSk7Zm9yKGtbMTkzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3N2E3XHU3N2FkXHU3N2VmXHU3OGY3XHU3OGZhXHU3OGY0XHU3OGVmXHU3OTAxXHU3OWE3XHU3OWFhXHU3YTU3XHU3YWJmXHU3YzA3XHU3YzBk'@;
put 'XHU3YmZlXHU3YmY3XHU3YzBjXHU3YmUwXHU3Y2UwXHU3Y2RjXHU3Y2RlXHU3Y2UyXHU3Y2RmXHU3Y2Q5XHU3Y2RkXHU3ZTJlXHU3ZTNlXHU3ZTQ2XHU3ZTM3XHU3ZTMyXHU3ZTQzXHU3ZTJiXHU3ZTNkXHU3ZTMxXHU3ZTQ1XHU3ZTQxXHU3ZTM0XHU3ZTM5XHU3ZTQ4XHU3ZTM1XHU3ZTNmXHU3'@;
put 'ZTJmXHU3ZjQ0XHU3ZmYzXHU3ZmZjXHU4MDcxXHU4MDcyXHU4MDcwXHU4MDZmXHU4MDczXHU4MWM2XHU4MWMzXHU4MWJhXHU4MWMyXHU4MWMwXHU4MWJmXHU4MWJkXHU4MWM5XHU4MWJlXHU4MWU4XHU4MjA5XHU4MjcxXHU4NWFhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHU4NTg0XHU4NTdlXHU4NTljXHU4NTkxXHU4NTk0XHU4NWFmXHU4NTliXHU4NTg3XHU4NWE4XHU4NThhXHU4NjY3XHU4N2MwXHU4N2QxXHU4N2IzXHU4N2QyXHU4N2M2XHU4N2FiXHU4N2JiXHU4N2JhXHU4N2M4XHU4N2NiXHU4OTNiXHU4OTM2XHU4OTQ0XHU4OTM4XHU4OTNkXHU4OWFj'@;
put 'XHU4YjBlXHU4YjE3XHU4YjE5XHU4YjFiXHU4YjBhXHU4YjIwXHU4YjFkXHU4YjA0XHU4YjEwXHU4YzQxXHU4YzNmXHU4YzczXHU4Y2ZhXHU4Y2ZkXHU4Y2ZjXHU4Y2Y4XHU4Y2ZiXHU4ZGE4XHU4ZTQ5XHU4ZTRiXHU4ZTQ4XHU4ZTRhXHU4ZjQ0XHU4ZjNlXHU4ZjQyXHU4ZjQ1XHU4ZjNmXHU5'@;
put 'MDdmXHU5MDdkXHU5MDg0XHU5MDgxXHU5MDgyXHU5MDgwXHU5MTM5XHU5MWEzXHU5MTllXHU5MTljXHU5MzRkXHU5MzgyXHU5MzI4XHU5Mzc1XHU5MzRhXHU5MzY1XHU5MzRiXHU5MzE4XHU5MzdlXHU5MzZjXHU5MzViXHU5MzcwXHU5MzVhXHU5MzU0XHU5NWNhXHU5NWNiXHU5NWNjXHU5NWM4'@;
put 'XHU5NWM2XHU5NmIxXHU5NmI4XHU5NmQ2XHU5NzFjXHU5NzFlXHU5N2EwXHU5N2QzXHU5ODQ2XHU5OGI2XHU5OTM1XHU5YTAxXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTkzXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxOTNdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE5M11bdl1dPTQ5'@;
put 'NDA4K3YsVFs0OTQwOCt2XT1rWzE5M11bdl0pO2ZvcihrWzE5NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTlmZlx1OWJhZVx1OWJhYlx1OWJhYVx1OWJhZFx1OWQzYlx1OWQzZlx1OWU4Ylx1OWVjZlx1OWVkZVx1OWVkY1x1OWVk'@;
put 'ZFx1OWVkYlx1OWYzZVx1OWY0Ylx1NTNlMlx1NTY5NVx1NTZhZVx1NThkOVx1NThkOFx1NWIzOFx1NWY1ZFx1NjFlM1x1NjIzM1x1NjRmNFx1NjRmMlx1NjRmZVx1NjUwNlx1NjRmYVx1NjRmYlx1NjRmN1x1NjViN1x1NjZkY1x1NjcyNlx1NmFiM1x1NmFhY1x1NmFjM1x1NmFiYlx1NmFiOFx1'@;
put 'NmFjMlx1NmFhZVx1NmFhZlx1NmI1Zlx1NmI3OFx1NmJhZlx1NzAwOVx1NzAwYlx1NmZmZVx1NzAwNlx1NmZmYVx1NzAxMVx1NzAwZlx1NzFmYlx1NzFmY1x1NzFmZVx1NzFmOFx1NzM3N1x1NzM3NVx1NzRhN1x1NzRiZlx1NzUxNVx1NzY1Nlx1NzY1OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1NzY1Mlx1NzdiZFx1NzdiZlx1NzdiYlx1NzdiY1x1NzkwZVx1NzlhZVx1N2E2MVx1N2E2Mlx1N2E2MFx1N2FjNFx1N2FjNVx1N2MyYlx1N2MyN1x1N2MyYVx1N2MxZVx1N2MyM1x1N2MyMVx1N2NlN1x1N2U1NFx1N2U1NVx1N2U1ZVx1N2U1YVx1N2U2MVx1N2U1'@;
put 'Mlx1N2U1OVx1N2Y0OFx1N2ZmOVx1N2ZmYlx1ODA3N1x1ODA3Nlx1ODFjZFx1ODFjZlx1ODIwYVx1ODVjZlx1ODVhOVx1ODVjZFx1ODVkMFx1ODVjOVx1ODViMFx1ODViYVx1ODViOVx1ODVhNlx1ODdlZlx1ODdlY1x1ODdmMlx1ODdlMFx1ODk4Nlx1ODliMlx1ODlmNFx1OGIyOFx1OGIzOVx1'@;
put 'OGIyY1x1OGIyYlx1OGM1MFx1OGQwNVx1OGU1OVx1OGU2M1x1OGU2Nlx1OGU2NFx1OGU1Zlx1OGU1NVx1OGVjMFx1OGY0OVx1OGY0ZFx1OTA4N1x1OTA4M1x1OTA4OFx1OTFhYlx1OTFhY1x1OTFkMFx1OTM5NFx1OTM4YVx1OTM5Nlx1OTNhMlx1OTNiM1x1OTNhZVx1OTNhY1x1OTNiMFx1OTM5'@;
put 'OFx1OTM5YVx1OTM5N1x1OTVkNFx1OTVkNlx1OTVkMFx1OTVkNVx1OTZlMlx1OTZkY1x1OTZkOVx1OTZkYlx1OTZkZVx1OTcyNFx1OTdhM1x1OTdhNlx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE5NF0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTk0XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vb'@;
put 'a1sxOTRdW3ZdXT00OTY2NCt2LFRbNDk2NjQrdl09a1sxOTRdW3ZdKTtmb3Ioa1sxOTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk3YWRcdTk3ZjlcdTk4NGRcdTk4NGZcdTk4NGNcdTk4NGVcdTk4NTNcdTk4YmFcdTk5M2VcdTk5'@;
put 'M2ZcdTk5M2RcdTk5MmVcdTk5YTVcdTlhMGVcdTlhYzFcdTliMDNcdTliMDZcdTliNGZcdTliNGVcdTliNGRcdTliY2FcdTliYzlcdTliZmRcdTliYzhcdTliYzBcdTlkNTFcdTlkNWRcdTlkNjBcdTllZTBcdTlmMTVcdTlmMmNcdTUxMzNcdTU2YTVcdTU4ZGVcdTU4ZGZcdTU4ZTJcdTViZjVc'@;
put 'dTlmOTBcdTVlZWNcdTYxZjJcdTYxZjdcdTYxZjZcdTYxZjVcdTY1MDBcdTY1MGZcdTY2ZTBcdTY2ZGRcdTZhZTVcdTZhZGRcdTZhZGFcdTZhZDNcdTcwMWJcdTcwMWZcdTcwMjhcdTcwMWFcdTcwMWRcdTcwMTVcdTcwMThcdTcyMDZcdTcyMGRcdTcyNThcdTcyYTJcdTczNzhcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTczN2FcdTc0YmRcdTc0Y2FcdTc0ZTNcdTc1ODdcdTc1ODZcdTc2NWZcdTc2NjFcdTc3YzdcdTc5MTlcdTc5YjFcdTdhNmJcdTdhNjlcdTdjM2VcdTdjM2ZcdTdjMzhcdTdjM2RcdTdjMzdcdTdjNDBcdTdlNmJcdTdlNmRcdTdlNzlcdTdl'@;
put 'NjlcdTdlNmFcdTdmODVcdTdlNzNcdTdmYjZcdTdmYjlcdTdmYjhcdTgxZDhcdTg1ZTlcdTg1ZGRcdTg1ZWFcdTg1ZDVcdTg1ZTRcdTg1ZTVcdTg1ZjdcdTg3ZmJcdTg4MDVcdTg4MGRcdTg3ZjlcdTg3ZmVcdTg5NjBcdTg5NWZcdTg5NTZcdTg5NWVcdThiNDFcdThiNWNcdThiNThcdThiNDlc'@;
put 'dThiNWFcdThiNGVcdThiNGZcdThiNDZcdThiNTlcdThkMDhcdThkMGFcdThlN2NcdThlNzJcdThlODdcdThlNzZcdThlNmNcdThlN2FcdThlNzRcdThmNTRcdThmNGVcdThmYWRcdTkwOGFcdTkwOGJcdTkxYjFcdTkxYWVcdTkzZTFcdTkzZDFcdTkzZGZcdTkzYzNcdTkzYzhcdTkzZGNcdTkz'@;
put 'ZGRcdTkzZDZcdTkzZTJcdTkzY2RcdTkzZDhcdTkzZTRcdTkzZDdcdTkzZThcdTk1ZGNcdTk2YjRcdTk2ZTNcdTk3MmFcdTk3MjdcdTk3NjFcdTk3ZGNcdTk3ZmJcdTk4NWVcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxOTVdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE5NV1bdl0uY2hhckNv'@;
put 'ZGVBdCgwKSYmKHNlW2tbMTk1XVt2XV09NDk5MjArdixUWzQ5OTIwK3ZdPWtbMTk1XVt2XSk7Zm9yKGtbMTk2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ODU4XHU5ODViXHU5OGJjXHU5OTQ1XHU5OTQ5XHU5YTE2XHU5YTE5XHU5'@;
put 'YjBkXHU5YmU4XHU5YmU3XHU5YmQ2XHU5YmRiXHU5ZDg5XHU5ZDYxXHU5ZDcyXHU5ZDZhXHU5ZDZjXHU5ZTkyXHU5ZTk3XHU5ZTkzXHU5ZWI0XHU1MmY4XHU1NmE4XHU1NmI3XHU1NmI2XHU1NmI0XHU1NmJjXHU1OGU0XHU1YjQwXHU1YjQzXHU1YjdkXHU1YmY2XHU1ZGM5XHU2MWY4XHU2MWZh'@;
put 'XHU2NTE4XHU2NTE0XHU2NTE5XHU2NmU2XHU2NzI3XHU2YWVjXHU3MDNlXHU3MDMwXHU3MDMyXHU3MjEwXHU3MzdiXHU3NGNmXHU3NjYyXHU3NjY1XHU3OTI2XHU3OTJhXHU3OTJjXHU3OTJiXHU3YWM3XHU3YWY2XHU3YzRjXHU3YzQzXHU3YzRkXHU3Y2VmXHU3Y2YwXHU4ZmFlXHU3ZTdkXHU3'@;
put 'ZTdjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZTgyXHU3ZjRjXHU4MDAwXHU4MWRhXHU4MjY2XHU4NWZiXHU4NWY5XHU4NjExXHU4NWZhXHU4NjA2XHU4NjBiXHU4NjA3XHU4NjBhXHU4ODE0XHU4ODE1XHU4OTY0XHU4OWJhXHU4OWY4XHU4YjcwXHU4YjZjXHU4'@;
put 'YjY2XHU4YjZmXHU4YjVmXHU4YjZiXHU4ZDBmXHU4ZDBkXHU4ZTg5XHU4ZTgxXHU4ZTg1XHU4ZTgyXHU5MWI0XHU5MWNiXHU5NDE4XHU5NDAzXHU5M2ZkXHU5NWUxXHU5NzMwXHU5OGM0XHU5OTUyXHU5OTUxXHU5OWE4XHU5YTJiXHU5YTMwXHU5YTM3XHU5YTM1XHU5YzEzXHU5YzBkXHU5ZTc5'@;
put 'XHU5ZWI1XHU5ZWU4XHU5ZjJmXHU5ZjVmXHU5ZjYzXHU5ZjYxXHU1MTM3XHU1MTM4XHU1NmMxXHU1NmMwXHU1NmMyXHU1OTE0XHU1YzZjXHU1ZGNkXHU2MWZjXHU2MWZlXHU2NTFkXHU2NTFjXHU2NTk1XHU2NmU5XHU2YWZiXHU2YjA0XHU2YWZhXHU2YmIyXHU3MDRjXHU3MjFiXHU3MmE3XHU3'@;
put 'NGQ2XHU3NGQ0XHU3NjY5XHU3N2QzXHU3YzUwXHU3ZThmXHU3ZThjXHU3ZmJjXHU4NjE3XHU4NjJkXHU4NjFhXHU4ODIzXHU4ODIyXHU4ODIxXHU4ODFmXHU4OTZhXHU4OTZjXHU4OWJkXHU4Yjc0XHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTk2XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sx'@;
put 'OTZdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE5Nl1bdl1dPTUwMTc2K3YsVFs1MDE3Nit2XT1rWzE5Nl1bdl0pO2ZvcihrWzE5N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI3N1x1OGI3ZFx1OGQxM1x1OGU4YVx1OGU4ZFx1'@;
put 'OGU4Ylx1OGY1Zlx1OGZhZlx1OTFiYVx1OTQyZVx1OTQzM1x1OTQzNVx1OTQzYVx1OTQzOFx1OTQzMlx1OTQyYlx1OTVlMlx1OTczOFx1OTczOVx1OTczMlx1OTdmZlx1OTg2N1x1OTg2NVx1OTk1N1x1OWE0NVx1OWE0M1x1OWE0MFx1OWEzZVx1OWFjZlx1OWI1NFx1OWI1MVx1OWMyZFx1OWMy'@;
put 'NVx1OWRhZlx1OWRiNFx1OWRjMlx1OWRiOFx1OWU5ZFx1OWVlZlx1OWYxOVx1OWY1Y1x1OWY2Nlx1OWY2N1x1NTEzY1x1NTEzYlx1NTZjOFx1NTZjYVx1NTZjOVx1NWI3Zlx1NWRkNFx1NWRkMlx1NWY0ZVx1NjFmZlx1NjUyNFx1NmIwYVx1NmI2MVx1NzA1MVx1NzA1OFx1NzM4MFx1NzRlNFx1'@;
put 'NzU4YVx1NzY2ZVx1NzY2Y1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzliM1x1N2M2MFx1N2M1Zlx1ODA3ZVx1ODA3ZFx1ODFkZlx1ODk3Mlx1ODk2Zlx1ODlmY1x1OGI4MFx1OGQxNlx1OGQxN1x1OGU5MVx1OGU5M1x1OGY2MVx1OTE0OFx1OTQ0NFx1OTQ1MVx1'@;
put 'OTQ1Mlx1OTczZFx1OTczZVx1OTdjM1x1OTdjMVx1OTg2Ylx1OTk1NVx1OWE1NVx1OWE0ZFx1OWFkMlx1OWIxYVx1OWM0OVx1OWMzMVx1OWMzZVx1OWMzYlx1OWRkM1x1OWRkN1x1OWYzNFx1OWY2Y1x1OWY2YVx1OWY5NFx1NTZjY1x1NWRkNlx1NjIwMFx1NjUyM1x1NjUyYlx1NjUyYVx1NjZl'@;
put 'Y1x1NmIxMFx1NzRkYVx1N2FjYVx1N2M2NFx1N2M2M1x1N2M2NVx1N2U5M1x1N2U5Nlx1N2U5NFx1ODFlMlx1ODYzOFx1ODYzZlx1ODgzMVx1OGI4YVx1OTA5MFx1OTA4Zlx1OTQ2M1x1OTQ2MFx1OTQ2NFx1OTc2OFx1OTg2Zlx1OTk1Y1x1OWE1YVx1OWE1Ylx1OWE1N1x1OWFkM1x1OWFkNFx1'@;
put 'OWFkMVx1OWM1NFx1OWM1N1x1OWM1Nlx1OWRlNVx1OWU5Zlx1OWVmNFx1NTZkMVx1NThlOVx1NjUyY1x1NzA1ZVx1NzY3MVx1NzY3Mlx1NzdkN1x1N2Y1MFx1N2Y4OFx1ODgzNlx1ODgzOVx1ODg2Mlx1OGI5M1x1OGI5Mlx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE5N10ubGVuZ3RoOysr'@;
put 'dik2NTUzMyE9PWtbMTk3XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxOTddW3ZdXT01MDQzMit2LFRbNTA0MzIrdl09a1sxOTddW3ZdKTtmb3Ioa1sxOThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThiOTZcdTgyNzdcdThkMWJc'@;
put 'dTkxYzBcdTk0NmFcdTk3NDJcdTk3NDhcdTk3NDRcdTk3YzZcdTk4NzBcdTlhNWZcdTliMjJcdTliNThcdTljNWZcdTlkZjlcdTlkZmFcdTllN2NcdTllN2RcdTlmMDdcdTlmNzdcdTlmNzJcdTVlZjNcdTZiMTZcdTcwNjNcdTdjNmNcdTdjNmVcdTg4M2JcdTg5YzBcdThlYTFcdTkxYzFcdTk0'@;
put 'NzJcdTk0NzBcdTk4NzFcdTk5NWVcdTlhZDZcdTliMjNcdTllY2NcdTcwNjRcdTc3ZGFcdThiOWFcdTk0NzdcdTk3YzlcdTlhNjJcdTlhNjVcdTdlOWNcdThiOWNcdThlYWFcdTkxYzVcdTk0N2RcdTk0N2VcdTk0N2NcdTljNzdcdTljNzhcdTllZjdcdThjNTRcdTk0N2ZcdTllMWFcdTcyMjhc'@;
put 'dTlhNmFcdTliMzFcdTllMWJcdTllMWVcdTdjNzJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sx'@;
put 'OThdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE5OF1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTk4XVt2XV09NTA2ODgrdixUWzUwNjg4K3ZdPWtbMTk4XVt2XSk7Zm9yKGtbMjAxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZTQy'@;
put 'XHU0ZTVjXHU1MWY1XHU1MzFhXHU1MzgyXHU0ZTA3XHU0ZTBjXHU0ZTQ3XHU0ZThkXHU1NmQ3XHVmYTBjXHU1YzZlXHU1ZjczXHU0ZTBmXHU1MTg3XHU0ZTBlXHU0ZTJlXHU0ZTkzXHU0ZWMyXHU0ZWM5XHU0ZWM4XHU1MTk4XHU1MmZjXHU1MzZjXHU1M2I5XHU1NzIwXHU1OTAzXHU1OTJjXHU1'@;
put 'YzEwXHU1ZGZmXHU2NWUxXHU2YmIzXHU2YmNjXHU2YzE0XHU3MjNmXHU0ZTMxXHU0ZTNjXHU0ZWU4XHU0ZWRjXHU0ZWU5XHU0ZWUxXHU0ZWRkXHU0ZWRhXHU1MjBjXHU1MzFjXHU1MzRjXHU1NzIyXHU1NzIzXHU1OTE3XHU1OTJmXHU1YjgxXHU1Yjg0XHU1YzEyXHU1YzNiXHU1Yzc0XHU1Yzcz'@;
put 'XHU1ZTA0XHU1ZTgwXHU1ZTgyXHU1ZmM5XHU2MjA5XHU2MjUwXHU2YzE1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YzM2XHU2YzQzXHU2YzNmXHU2YzNiXHU3MmFlXHU3MmIwXHU3MzhhXHU3OWI4XHU4MDhhXHU5NjFlXHU0ZjBlXHU0ZjE4XHU0ZjJjXHU0ZWY1'@;
put 'XHU0ZjE0XHU0ZWYxXHU0ZjAwXHU0ZWY3XHU0ZjA4XHU0ZjFkXHU0ZjAyXHU0ZjA1XHU0ZjIyXHU0ZjEzXHU0ZjA0XHU0ZWY0XHU0ZjEyXHU1MWIxXHU1MjEzXHU1MjA5XHU1MjEwXHU1MmE2XHU1MzIyXHU1MzFmXHU1MzRkXHU1MzhhXHU1NDA3XHU1NmUxXHU1NmRmXHU1NzJlXHU1NzJhXHU1'@;
put 'NzM0XHU1OTNjXHU1OTgwXHU1OTdjXHU1OTg1XHU1OTdiXHU1OTdlXHU1OTc3XHU1OTdmXHU1YjU2XHU1YzE1XHU1YzI1XHU1YzdjXHU1YzdhXHU1YzdiXHU1YzdlXHU1ZGRmXHU1ZTc1XHU1ZTg0XHU1ZjAyXHU1ZjFhXHU1Zjc0XHU1ZmQ1XHU1ZmQ0XHU1ZmNmXHU2MjVjXHU2MjVlXHU2MjY0'@;
put 'XHU2MjYxXHU2MjY2XHU2MjYyXHU2MjU5XHU2MjYwXHU2MjVhXHU2MjY1XHU2NWVmXHU2NWVlXHU2NzNlXHU2NzM5XHU2NzM4XHU2NzNiXHU2NzNhXHU2NzNmXHU2NzNjXHU2NzMzXHU2YzE4XHU2YzQ2XHU2YzUyXHU2YzVjXHU2YzRmXHU2YzRhXHU2YzU0XHU2YzRiXHVmZmZkIi5zcGxpdCgi'@;
put 'Iiksdj0wO3YhPWtbMjAxXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMDFdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIwMV1bdl1dPTUxNDU2K3YsVFs1MTQ1Nit2XT1rWzIwMV1bdl0pO2ZvcihrWzIwMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1NmM0Y1x1NzA3MVx1NzI1ZVx1NzJiNFx1NzJiNVx1NzM4ZVx1NzUyYVx1NzY3Zlx1N2E3NVx1N2Y1MVx1ODI3OFx1ODI3Y1x1ODI4MFx1ODI3ZFx1ODI3Zlx1ODY0ZFx1ODk3ZVx1OTA5OVx1OTA5N1x1OTA5OFx1OTA5Ylx1OTA5NFx1OTYyMlx1OTYyNFx1OTYyMFx1OTYyM1x1'@;
put 'NGY1Nlx1NGYzYlx1NGY2Mlx1NGY0OVx1NGY1M1x1NGY2NFx1NGYzZVx1NGY2N1x1NGY1Mlx1NGY1Zlx1NGY0MVx1NGY1OFx1NGYyZFx1NGYzM1x1NGYzZlx1NGY2MVx1NTE4Zlx1NTFiOVx1NTIxY1x1NTIxZVx1NTIyMVx1NTJhZFx1NTJhZVx1NTMwOVx1NTM2M1x1NTM3Mlx1NTM4ZVx1NTM4'@;
put 'Zlx1NTQzMFx1NTQzN1x1NTQyYVx1NTQ1NFx1NTQ0NVx1NTQxOVx1NTQxY1x1NTQyNVx1NTQxOFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTQzZFx1NTQ0Zlx1NTQ0MVx1NTQyOFx1NTQyNFx1NTQ0N1x1NTZlZVx1NTZlN1x1NTZlNVx1NTc0MVx1NTc0NVx1NTc0'@;
put 'Y1x1NTc0OVx1NTc0Ylx1NTc1Mlx1NTkwNlx1NTk0MFx1NTlhNlx1NTk5OFx1NTlhMFx1NTk5N1x1NTk4ZVx1NTlhMlx1NTk5MFx1NTk4Zlx1NTlhN1x1NTlhMVx1NWI4ZVx1NWI5Mlx1NWMyOFx1NWMyYVx1NWM4ZFx1NWM4Zlx1NWM4OFx1NWM4Ylx1NWM4OVx1NWM5Mlx1NWM4YVx1NWM4Nlx1'@;
put 'NWM5M1x1NWM5NVx1NWRlMFx1NWUwYVx1NWUwZVx1NWU4Ylx1NWU4OVx1NWU4Y1x1NWU4OFx1NWU4ZFx1NWYwNVx1NWYxZFx1NWY3OFx1NWY3Nlx1NWZkMlx1NWZkMVx1NWZkMFx1NWZlZFx1NWZlOFx1NWZlZVx1NWZmM1x1NWZlMVx1NWZlNFx1NWZlM1x1NWZmYVx1NWZlZlx1NWZmN1x1NWZm'@;
put 'Ylx1NjAwMFx1NWZmNFx1NjIzYVx1NjI4M1x1NjI4Y1x1NjI4ZVx1NjI4Zlx1NjI5NFx1NjI4N1x1NjI3MVx1NjI3Ylx1NjI3YVx1NjI3MFx1NjI4MVx1NjI4OFx1NjI3N1x1NjI3ZFx1NjI3Mlx1NjI3NFx1NjUzN1x1NjVmMFx1NjVmNFx1NjVmM1x1NjVmMlx1NjVmNVx1Njc0NVx1Njc0N1x1'@;
put 'ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIwMl0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjAyXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMDJdW3ZdXT01MTcxMit2LFRbNTE3MTIrdl09a1syMDJdW3ZdKTtmb3Ioa1syMDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY3NTlcdTY3NTVcdTY3NGNcdTY3NDhcdTY3NWRcdTY3NGRcdTY3NWFcdTY3NGJcdTZiZDBcdTZjMTlcdTZjMWFcdTZjNzhcdTZjNjdcdTZjNmJcdTZjODRcdTZjOGJcdTZjOGZcdTZjNzFcdTZjNmZcdTZjNjlcdTZjOWFcdTZjNmRcdTZjODdcdTZjOTVc'@;
put 'dTZjOWNcdTZjNjZcdTZjNzNcdTZjNjVcdTZjN2JcdTZjOGVcdTcwNzRcdTcwN2FcdTcyNjNcdTcyYmZcdTcyYmRcdTcyYzNcdTcyYzZcdTcyYzFcdTcyYmFcdTcyYzVcdTczOTVcdTczOTdcdTczOTNcdTczOTRcdTczOTJcdTc1M2FcdTc1MzlcdTc1OTRcdTc1OTVcdTc2ODFcdTc5M2RcdTgw'@;
put 'MzRcdTgwOTVcdTgwOTlcdTgwOTBcdTgwOTJcdTgwOWNcdTgyOTBcdTgyOGZcdTgyODVcdTgyOGVcdTgyOTFcdTgyOTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgyOGFcdTgyODNcdTgyODRcdThjNzhcdThmYzlcdThmYmZcdTkwOWZcdTkwYTFcdTkwYTVcdTkw'@;
put 'OWVcdTkwYTdcdTkwYTBcdTk2MzBcdTk2MjhcdTk2MmZcdTk2MmRcdTRlMzNcdTRmOThcdTRmN2NcdTRmODVcdTRmN2RcdTRmODBcdTRmODdcdTRmNzZcdTRmNzRcdTRmODlcdTRmODRcdTRmNzdcdTRmNGNcdTRmOTdcdTRmNmFcdTRmOWFcdTRmNzlcdTRmODFcdTRmNzhcdTRmOTBcdTRmOWNc'@;
put 'dTRmOTRcdTRmOWVcdTRmOTJcdTRmODJcdTRmOTVcdTRmNmJcdTRmNmVcdTUxOWVcdTUxYmNcdTUxYmVcdTUyMzVcdTUyMzJcdTUyMzNcdTUyNDZcdTUyMzFcdTUyYmNcdTUzMGFcdTUzMGJcdTUzM2NcdTUzOTJcdTUzOTRcdTU0ODdcdTU0N2ZcdTU0ODFcdTU0OTFcdTU0ODJcdTU0ODhcdTU0'@;
put 'NmJcdTU0N2FcdTU0N2VcdTU0NjVcdTU0NmNcdTU0NzRcdTU0NjZcdTU0OGRcdTU0NmZcdTU0NjFcdTU0NjBcdTU0OThcdTU0NjNcdTU0NjdcdTU0NjRcdTU2ZjdcdTU2ZjlcdTU3NmZcdTU3NzJcdTU3NmRcdTU3NmJcdTU3NzFcdTU3NzBcdTU3NzZcdTU3ODBcdTU3NzVcdTU3N2JcdTU3NzNc'@;
put 'dTU3NzRcdTU3NjJcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMDNdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIwM11bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjAzXVt2XV09NTE5NjgrdixUWzUxOTY4K3ZdPWtbMjAzXVt2XSk7Zm9yKGtbMjA0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NzY4XHU1NzdkXHU1OTBjXHU1OTQ1XHU1OWI1XHU1OWJhXHU1OWNmXHU1OWNlXHU1OWIyXHU1OWNjXHU1OWMxXHU1OWI2XHU1OWJjXHU1OWMzXHU1OWQ2XHU1OWIxXHU1OWJkXHU1OWMwXHU1OWM4XHU1OWI0XHU1OWM3XHU1YjYy'@;
put 'XHU1YjY1XHU1YjkzXHU1Yjk1XHU1YzQ0XHU1YzQ3XHU1Y2FlXHU1Y2E0XHU1Y2EwXHU1Y2I1XHU1Y2FmXHU1Y2E4XHU1Y2FjXHU1YzlmXHU1Y2EzXHU1Y2FkXHU1Y2EyXHU1Y2FhXHU1Y2E3XHU1YzlkXHU1Y2E1XHU1Y2I2XHU1Y2IwXHU1Y2E2XHU1ZTE3XHU1ZTE0XHU1ZTE5XHU1ZjI4XHU1'@;
put 'ZjIyXHU1ZjIzXHU1ZjI0XHU1ZjU0XHU1ZjgyXHU1ZjdlXHU1ZjdkXHU1ZmRlXHU1ZmU1XHU2MDJkXHU2MDI2XHU2MDE5XHU2MDMyXHU2MDBiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MDM0XHU2MDBhXHU2MDE3XHU2MDMzXHU2MDFhXHU2MDFlXHU2MDJjXHU2'@;
put 'MDIyXHU2MDBkXHU2MDEwXHU2MDJlXHU2MDEzXHU2MDExXHU2MDBjXHU2MDA5XHU2MDFjXHU2MjE0XHU2MjNkXHU2MmFkXHU2MmI0XHU2MmQxXHU2MmJlXHU2MmFhXHU2MmI2XHU2MmNhXHU2MmFlXHU2MmIzXHU2MmFmXHU2MmJiXHU2MmE5XHU2MmIwXHU2MmI4XHU2NTNkXHU2NWE4XHU2NWJi'@;
put 'XHU2NjA5XHU2NWZjXHU2NjA0XHU2NjEyXHU2NjA4XHU2NWZiXHU2NjAzXHU2NjBiXHU2NjBkXHU2NjA1XHU2NWZkXHU2NjExXHU2NjEwXHU2NmY2XHU2NzBhXHU2Nzg1XHU2NzZjXHU2NzhlXHU2NzkyXHU2Nzc2XHU2NzdiXHU2Nzk4XHU2Nzg2XHU2Nzg0XHU2Nzc0XHU2NzhkXHU2NzhjXHU2'@;
put 'NzdhXHU2NzlmXHU2NzkxXHU2Nzk5XHU2NzgzXHU2NzdkXHU2NzgxXHU2Nzc4XHU2Nzc5XHU2Nzk0XHU2YjI1XHU2YjgwXHU2YjdlXHU2YmRlXHU2YzFkXHU2YzkzXHU2Y2VjXHU2Y2ViXHU2Y2VlXHU2Y2Q5XHU2Y2I2XHU2Y2Q0XHU2Y2FkXHU2Y2U3XHU2Y2I3XHU2Y2QwXHU2Y2MyXHU2Y2Jh'@;
put 'XHU2Y2MzXHU2Y2M2XHU2Y2VkXHU2Y2YyXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjA0XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMDRdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIwNF1bdl1dPTUyMjI0K3YsVFs1MjIyNCt2XT1rWzIwNF1bdl0pO2ZvcihrWzIwNV09Ilx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmNkMlx1NmNkZFx1NmNiNFx1NmM4YVx1NmM5ZFx1NmM4MFx1NmNkZVx1NmNjMFx1NmQzMFx1NmNjZFx1NmNjN1x1NmNiMFx1NmNmOVx1NmNjZlx1NmNlOVx1NmNkMVx1NzA5NFx1NzA5OFx1NzA4NVx1NzA5'@;
put 'M1x1NzA4Nlx1NzA4NFx1NzA5MVx1NzA5Nlx1NzA4Mlx1NzA5YVx1NzA4M1x1NzI2YVx1NzJkNlx1NzJjYlx1NzJkOFx1NzJjOVx1NzJkY1x1NzJkMlx1NzJkNFx1NzJkYVx1NzJjY1x1NzJkMVx1NzNhNFx1NzNhMVx1NzNhZFx1NzNhNlx1NzNhMlx1NzNhMFx1NzNhY1x1NzM5ZFx1NzRkZFx1'@;
put 'NzRlOFx1NzUzZlx1NzU0MFx1NzUzZVx1NzU4Y1x1NzU5OFx1NzZhZlx1NzZmM1x1NzZmMVx1NzZmMFx1NzZmNVx1NzdmOFx1NzdmY1x1NzdmOVx1NzdmYlx1NzdmYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzdmN1x1Nzk0Mlx1NzkzZlx1NzljNVx1N2E3OFx1'@;
put 'N2E3Ylx1N2FmYlx1N2M3NVx1N2NmZFx1ODAzNVx1ODA4Zlx1ODBhZVx1ODBhM1x1ODBiOFx1ODBiNVx1ODBhZFx1ODIyMFx1ODJhMFx1ODJjMFx1ODJhYlx1ODI5YVx1ODI5OFx1ODI5Ylx1ODJiNVx1ODJhN1x1ODJhZVx1ODJiY1x1ODI5ZVx1ODJiYVx1ODJiNFx1ODJhOFx1ODJhMVx1ODJh'@;
put 'OVx1ODJjMlx1ODJhNFx1ODJjM1x1ODJiNlx1ODJhMlx1ODY3MFx1ODY2Zlx1ODY2ZFx1ODY2ZVx1OGM1Nlx1OGZkMlx1OGZjYlx1OGZkM1x1OGZjZFx1OGZkNlx1OGZkNVx1OGZkN1x1OTBiMlx1OTBiNFx1OTBhZlx1OTBiM1x1OTBiMFx1OTYzOVx1OTYzZFx1OTYzY1x1OTYzYVx1OTY0M1x1'@;
put 'NGZjZFx1NGZjNVx1NGZkM1x1NGZiMlx1NGZjOVx1NGZjYlx1NGZjMVx1NGZkNFx1NGZkY1x1NGZkOVx1NGZiYlx1NGZiM1x1NGZkYlx1NGZjN1x1NGZkNlx1NGZiYVx1NGZjMFx1NGZiOVx1NGZlY1x1NTI0NFx1NTI0OVx1NTJjMFx1NTJjMlx1NTMzZFx1NTM3Y1x1NTM5N1x1NTM5Nlx1NTM5'@;
put 'OVx1NTM5OFx1NTRiYVx1NTRhMVx1NTRhZFx1NTRhNVx1NTRjZlx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIwNV0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjA1XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMDVdW3ZdXT01MjQ4MCt2LFRbNTI0ODArdl09a1syMDVdW3ZdKTtmb3Ioa1sy'@;
put 'MDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0YzNcdTgzMGRcdTU0YjdcdTU0YWVcdTU0ZDZcdTU0YjZcdTU0YzVcdTU0YzZcdTU0YTBcdTU0NzBcdTU0YmNcdTU0YTJcdTU0YmVcdTU0NzJcdTU0ZGVcdTU0YjBcdTU3YjVcdTU3'@;
put 'OWVcdTU3OWZcdTU3YTRcdTU3OGNcdTU3OTdcdTU3OWRcdTU3OWJcdTU3OTRcdTU3OThcdTU3OGZcdTU3OTlcdTU3YTVcdTU3OWFcdTU3OTVcdTU4ZjRcdTU5MGRcdTU5NTNcdTU5ZTFcdTU5ZGVcdTU5ZWVcdTVhMDBcdTU5ZjFcdTU5ZGRcdTU5ZmFcdTU5ZmRcdTU5ZmNcdTU5ZjZcdTU5ZTRc'@;
put 'dTU5ZjJcdTU5ZjdcdTU5ZGJcdTU5ZTlcdTU5ZjNcdTU5ZjVcdTU5ZTBcdTU5ZmVcdTU5ZjRcdTU5ZWRcdTViYThcdTVjNGNcdTVjZDBcdTVjZDhcdTVjY2NcdTVjZDdcdTVjY2JcdTVjZGJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVjZGVcdTVjZGFcdTVjYzlc'@;
put 'dTVjYzdcdTVjY2FcdTVjZDZcdTVjZDNcdTVjZDRcdTVjY2ZcdTVjYzhcdTVjYzZcdTVjY2VcdTVjZGZcdTVjZjhcdTVkZjlcdTVlMjFcdTVlMjJcdTVlMjNcdTVlMjBcdTVlMjRcdTVlYjBcdTVlYTRcdTVlYTJcdTVlOWJcdTVlYTNcdTVlYTVcdTVmMDdcdTVmMmVcdTVmNTZcdTVmODZcdTYw'@;
put 'MzdcdTYwMzlcdTYwNTRcdTYwNzJcdTYwNWVcdTYwNDVcdTYwNTNcdTYwNDdcdTYwNDlcdTYwNWJcdTYwNGNcdTYwNDBcdTYwNDJcdTYwNWZcdTYwMjRcdTYwNDRcdTYwNThcdTYwNjZcdTYwNmVcdTYyNDJcdTYyNDNcdTYyY2ZcdTYzMGRcdTYzMGJcdTYyZjVcdTYzMGVcdTYzMDNcdTYyZWJc'@;
put 'dTYyZjlcdTYzMGZcdTYzMGNcdTYyZjhcdTYyZjZcdTYzMDBcdTYzMTNcdTYzMTRcdTYyZmFcdTYzMTVcdTYyZmJcdTYyZjBcdTY1NDFcdTY1NDNcdTY1YWFcdTY1YmZcdTY2MzZcdTY2MjFcdTY2MzJcdTY2MzVcdTY2MWNcdTY2MjZcdTY2MjJcdTY2MzNcdTY2MmJcdTY2M2FcdTY2MWRcdTY2'@;
put 'MzRcdTY2MzlcdTY2MmVcdTY3MGZcdTY3MTBcdTY3YzFcdTY3ZjJcdTY3YzhcdTY3YmFcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMDZdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIwNl1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjA2XVt2XV09NTI3MzYrdixUWzUyNzM2K3ZdPWtbMjA2'@;
put 'XVt2XSk7Zm9yKGtbMjA3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2N2RjXHU2N2JiXHU2N2Y4XHU2N2Q4XHU2N2MwXHU2N2I3XHU2N2M1XHU2N2ViXHU2N2U0XHU2N2RmXHU2N2I1XHU2N2NkXHU2N2IzXHU2N2Y3XHU2N2Y2XHU2'@;
put 'N2VlXHU2N2UzXHU2N2MyXHU2N2I5XHU2N2NlXHU2N2U3XHU2N2YwXHU2N2IyXHU2N2ZjXHU2N2M2XHU2N2VkXHU2N2NjXHU2N2FlXHU2N2U2XHU2N2RiXHU2N2ZhXHU2N2M5XHU2N2NhXHU2N2MzXHU2N2VhXHU2N2NiXHU2YjI4XHU2YjgyXHU2Yjg0XHU2YmI2XHU2YmQ2XHU2YmQ4XHU2YmUw'@;
put 'XHU2YzIwXHU2YzIxXHU2ZDI4XHU2ZDM0XHU2ZDJkXHU2ZDFmXHU2ZDNjXHU2ZDNmXHU2ZDEyXHU2ZDBhXHU2Y2RhXHU2ZDMzXHU2ZDA0XHU2ZDE5XHU2ZDNhXHU2ZDFhXHU2ZDExXHU2ZDAwXHU2ZDFkXHU2ZDQyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZDAx'@;
put 'XHU2ZDE4XHU2ZDM3XHU2ZDAzXHU2ZDBmXHU2ZDQwXHU2ZDA3XHU2ZDIwXHU2ZDJjXHU2ZDA4XHU2ZDIyXHU2ZDA5XHU2ZDEwXHU3MGI3XHU3MDlmXHU3MGJlXHU3MGIxXHU3MGIwXHU3MGExXHU3MGI0XHU3MGI1XHU3MGE5XHU3MjQxXHU3MjQ5XHU3MjRhXHU3MjZjXHU3MjcwXHU3MjczXHU3'@;
put 'MjZlXHU3MmNhXHU3MmU0XHU3MmU4XHU3MmViXHU3MmRmXHU3MmVhXHU3MmU2XHU3MmUzXHU3Mzg1XHU3M2NjXHU3M2MyXHU3M2M4XHU3M2M1XHU3M2I5XHU3M2I2XHU3M2I1XHU3M2I0XHU3M2ViXHU3M2JmXHU3M2M3XHU3M2JlXHU3M2MzXHU3M2M2XHU3M2I4XHU3M2NiXHU3NGVjXHU3NGVl'@;
put 'XHU3NTJlXHU3NTQ3XHU3NTQ4XHU3NWE3XHU3NWFhXHU3Njc5XHU3NmM0XHU3NzA4XHU3NzAzXHU3NzA0XHU3NzA1XHU3NzBhXHU3NmY3XHU3NmZiXHU3NmZhXHU3N2U3XHU3N2U4XHU3ODA2XHU3ODExXHU3ODEyXHU3ODA1XHU3ODEwXHU3ODBmXHU3ODBlXHU3ODA5XHU3ODAzXHU3ODEzXHU3'@;
put 'OTRhXHU3OTRjXHU3OTRiXHU3OTQ1XHU3OTQ0XHU3OWQ1XHU3OWNkXHU3OWNmXHU3OWQ2XHU3OWNlXHU3YTgwXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjA3XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMDddW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIwN11bdl1dPTUyOTkyK3YsVFs1'@;
put 'Mjk5Mit2XT1rWzIwN11bdl0pO2ZvcihrWzIwOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2E3ZVx1N2FkMVx1N2IwMFx1N2IwMVx1N2M3YVx1N2M3OFx1N2M3OVx1N2M3Zlx1N2M4MFx1N2M4MVx1N2QwM1x1N2QwOFx1N2QwMVx1'@;
put 'N2Y1OFx1N2Y5MVx1N2Y4ZFx1N2ZiZVx1ODAwN1x1ODAwZVx1ODAwZlx1ODAxNFx1ODAzN1x1ODBkOFx1ODBjN1x1ODBlMFx1ODBkMVx1ODBjOFx1ODBjMlx1ODBkMFx1ODBjNVx1ODBlM1x1ODBkOVx1ODBkY1x1ODBjYVx1ODBkNVx1ODBjOVx1ODBjZlx1ODBkN1x1ODBlNlx1ODBjZFx1ODFm'@;
put 'Zlx1ODIyMVx1ODI5NFx1ODJkOVx1ODJmZVx1ODJmOVx1ODMwN1x1ODJlOFx1ODMwMFx1ODJkNVx1ODMzYVx1ODJlYlx1ODJkNlx1ODJmNFx1ODJlY1x1ODJlMVx1ODJmMlx1ODJmNVx1ODMwY1x1ODJmYlx1ODJmNlx1ODJmMFx1ODJlYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ODJlNFx1ODJlMFx1ODJmYVx1ODJmM1x1ODJlZFx1ODY3N1x1ODY3NFx1ODY3Y1x1ODY3M1x1ODg0MVx1ODg0ZVx1ODg2N1x1ODg2YVx1ODg2OVx1ODlkM1x1OGEwNFx1OGEwN1x1OGQ3Mlx1OGZlM1x1OGZlMVx1OGZlZVx1OGZlMFx1OTBmMVx1OTBiZFx1OTBiZlx1OTBkNVx1'@;
put 'OTBjNVx1OTBiZVx1OTBjN1x1OTBjYlx1OTBjOFx1OTFkNFx1OTFkM1x1OTY1NFx1OTY0Zlx1OTY1MVx1OTY1M1x1OTY0YVx1OTY0ZVx1NTAxZVx1NTAwNVx1NTAwN1x1NTAxM1x1NTAyMlx1NTAzMFx1NTAxYlx1NGZmNVx1NGZmNFx1NTAzM1x1NTAzN1x1NTAyY1x1NGZmNlx1NGZmN1x1NTAx'@;
put 'N1x1NTAxY1x1NTAyMFx1NTAyN1x1NTAzNVx1NTAyZlx1NTAzMVx1NTAwZVx1NTE1YVx1NTE5NFx1NTE5M1x1NTFjYVx1NTFjNFx1NTFjNVx1NTFjOFx1NTFjZVx1NTI2MVx1NTI1YVx1NTI1Mlx1NTI1ZVx1NTI1Zlx1NTI1NVx1NTI2Mlx1NTJjZFx1NTMwZVx1NTM5ZVx1NTUyNlx1NTRlMlx1'@;
put 'NTUxN1x1NTUxMlx1NTRlN1x1NTRmM1x1NTRlNFx1NTUxYVx1NTRmZlx1NTUwNFx1NTUwOFx1NTRlYlx1NTUxMVx1NTUwNVx1NTRmMVx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIwOF0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjA4XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMDhdW3Zd'@;
put 'XT01MzI0OCt2LFRbNTMyNDgrdl09a1syMDhdW3ZdKTtmb3Ioa1syMDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU1MGFcdTU0ZmJcdTU0ZjdcdTU0ZjhcdTU0ZTBcdTU1MGVcdTU1MDNcdTU1MGJcdTU3MDFcdTU3MDJcdTU3Y2Nc'@;
put 'dTU4MzJcdTU3ZDVcdTU3ZDJcdTU3YmFcdTU3YzZcdTU3YmRcdTU3YmNcdTU3YjhcdTU3YjZcdTU3YmZcdTU3YzdcdTU3ZDBcdTU3YjlcdTU3YzFcdTU5MGVcdTU5NGFcdTVhMTlcdTVhMTZcdTVhMmRcdTVhMmVcdTVhMTVcdTVhMGZcdTVhMTdcdTVhMGFcdTVhMWVcdTVhMzNcdTViNmNcdTVi'@;
put 'YTdcdTViYWRcdTViYWNcdTVjMDNcdTVjNTZcdTVjNTRcdTVjZWNcdTVjZmZcdTVjZWVcdTVjZjFcdTVjZjdcdTVkMDBcdTVjZjlcdTVlMjlcdTVlMjhcdTVlYThcdTVlYWVcdTVlYWFcdTVlYWNcdTVmMzNcdTVmMzBcdTVmNjdcdTYwNWRcdTYwNWFcdTYwNjdcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwNDFcdTYwYTJcdTYwODhcdTYwODBcdTYwOTJcdTYwODFcdTYwOWRcdTYwODNcdTYwOTVcdTYwOWJcdTYwOTdcdTYwODdcdTYwOWNcdTYwOGVcdTYyMTlcdTYyNDZcdTYyZjJcdTYzMTBcdTYzNTZcdTYzMmNcdTYzNDRcdTYzNDVcdTYzMzZcdTYzNDNc'@;
put 'dTYzZTRcdTYzMzlcdTYzNGJcdTYzNGFcdTYzM2NcdTYzMjlcdTYzNDFcdTYzMzRcdTYzNThcdTYzNTRcdTYzNTlcdTYzMmRcdTYzNDdcdTYzMzNcdTYzNWFcdTYzNTFcdTYzMzhcdTYzNTdcdTYzNDBcdTYzNDhcdTY1NGFcdTY1NDZcdTY1YzZcdTY1YzNcdTY1YzRcdTY1YzJcdTY2NGFcdTY2'@;
put 'NWZcdTY2NDdcdTY2NTFcdTY3MTJcdTY3MTNcdTY4MWZcdTY4MWFcdTY4NDlcdTY4MzJcdTY4MzNcdTY4M2JcdTY4NGJcdTY4NGZcdTY4MTZcdTY4MzFcdTY4MWNcdTY4MzVcdTY4MmJcdTY4MmRcdTY4MmZcdTY4NGVcdTY4NDRcdTY4MzRcdTY4MWRcdTY4MTJcdTY4MTRcdTY4MjZcdTY4Mjhc'@;
put 'dTY4MmVcdTY4NGRcdTY4M2FcdTY4MjVcdTY4MjBcdTZiMmNcdTZiMmZcdTZiMmRcdTZiMzFcdTZiMzRcdTZiNmRcdTgwODJcdTZiODhcdTZiZTZcdTZiZTRcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMDldLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIwOV1bdl0uY2hhckNvZGVBdCgwKSYm'@;
put 'KHNlW2tbMjA5XVt2XV09NTM1MDQrdixUWzUzNTA0K3ZdPWtbMjA5XVt2XSk7Zm9yKGtbMjEwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YmU4XHU2YmUzXHU2YmUyXHU2YmU3XHU2YzI1XHU2ZDdhXHU2ZDYzXHU2ZDY0XHU2ZDc2'@;
put 'XHU2ZDBkXHU2ZDYxXHU2ZDkyXHU2ZDU4XHU2ZDYyXHU2ZDZkXHU2ZDZmXHU2ZDkxXHU2ZDhkXHU2ZGVmXHU2ZDdmXHU2ZDg2XHU2ZDVlXHU2ZDY3XHU2ZDYwXHU2ZDk3XHU2ZDcwXHU2ZDdjXHU2ZDVmXHU2ZDgyXHU2ZDk4XHU2ZDJmXHU2ZDY4XHU2ZDhiXHU2ZDdlXHU2ZDgwXHU2ZDg0XHU2'@;
put 'ZDE2XHU2ZDgzXHU2ZDdiXHU2ZDdkXHU2ZDc1XHU2ZDkwXHU3MGRjXHU3MGQzXHU3MGQxXHU3MGRkXHU3MGNiXHU3ZjM5XHU3MGUyXHU3MGQ3XHU3MGQyXHU3MGRlXHU3MGUwXHU3MGQ0XHU3MGNkXHU3MGM1XHU3MGM2XHU3MGM3XHU3MGRhXHU3MGNlXHU3MGUxXHU3MjQyXHU3Mjc4XHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3Mjc3XHU3Mjc2XHU3MzAwXHU3MmZhXHU3MmY0XHU3MmZlXHU3MmY2XHU3MmYzXHU3MmZiXHU3MzAxXHU3M2QzXHU3M2Q5XHU3M2U1XHU3M2Q2XHU3M2JjXHU3M2U3XHU3M2UzXHU3M2U5XHU3M2RjXHU3M2QyXHU3M2RiXHU3M2Q0'@;
put 'XHU3M2RkXHU3M2RhXHU3M2Q3XHU3M2Q4XHU3M2U4XHU3NGRlXHU3NGRmXHU3NGY0XHU3NGY1XHU3NTIxXHU3NTViXHU3NTVmXHU3NWIwXHU3NWMxXHU3NWJiXHU3NWM0XHU3NWMwXHU3NWJmXHU3NWI2XHU3NWJhXHU3NjhhXHU3NmM5XHU3NzFkXHU3NzFiXHU3NzEwXHU3NzEzXHU3NzEyXHU3'@;
put 'NzIzXHU3NzExXHU3NzE1XHU3NzE5XHU3NzFhXHU3NzIyXHU3NzI3XHU3ODIzXHU3ODJjXHU3ODIyXHU3ODM1XHU3ODJmXHU3ODI4XHU3ODJlXHU3ODJiXHU3ODIxXHU3ODI5XHU3ODMzXHU3ODJhXHU3ODMxXHU3OTU0XHU3OTViXHU3OTRmXHU3OTVjXHU3OTUzXHU3OTUyXHU3OTUxXHU3OWVi'@;
put 'XHU3OWVjXHU3OWUwXHU3OWVlXHU3OWVkXHU3OWVhXHU3OWRjXHU3OWRlXHU3OWRkXHU3YTg2XHU3YTg5XHU3YTg1XHU3YThiXHU3YThjXHU3YThhXHU3YTg3XHU3YWQ4XHU3YjEwXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjEwXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMTBdW3ZdLmNo'@;
put 'YXJDb2RlQXQoMCkmJihzZVtrWzIxMF1bdl1dPTUzNzYwK3YsVFs1Mzc2MCt2XT1rWzIxMF1bdl0pO2ZvcihrWzIxMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2IwNFx1N2IxM1x1N2IwNVx1N2IwZlx1N2IwOFx1N2IwYVx1N2Iw'@;
put 'ZVx1N2IwOVx1N2IxMlx1N2M4NFx1N2M5MVx1N2M4YVx1N2M4Y1x1N2M4OFx1N2M4ZFx1N2M4NVx1N2QxZVx1N2QxZFx1N2QxMVx1N2QwZVx1N2QxOFx1N2QxNlx1N2QxM1x1N2QxZlx1N2QxMlx1N2QwZlx1N2QwY1x1N2Y1Y1x1N2Y2MVx1N2Y1ZVx1N2Y2MFx1N2Y1ZFx1N2Y1Ylx1N2Y5Nlx1'@;
put 'N2Y5Mlx1N2ZjM1x1N2ZjMlx1N2ZjMFx1ODAxNlx1ODAzZVx1ODAzOVx1ODBmYVx1ODBmMlx1ODBmOVx1ODBmNVx1ODEwMVx1ODBmYlx1ODEwMFx1ODIwMVx1ODIyZlx1ODIyNVx1ODMzM1x1ODMyZFx1ODM0NFx1ODMxOVx1ODM1MVx1ODMyNVx1ODM1Nlx1ODMzZlx1ODM0MVx1ODMyNlx1ODMx'@;
put 'Y1x1ODMyMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODM0Mlx1ODM0ZVx1ODMxYlx1ODMyYVx1ODMwOFx1ODMzY1x1ODM0ZFx1ODMxNlx1ODMyNFx1ODMyMFx1ODMzN1x1ODMyZlx1ODMyOVx1ODM0N1x1ODM0NVx1ODM0Y1x1ODM1M1x1ODMxZVx1ODMyY1x1ODM0'@;
put 'Ylx1ODMyN1x1ODM0OFx1ODY1M1x1ODY1Mlx1ODZhMlx1ODZhOFx1ODY5Nlx1ODY4ZFx1ODY5MVx1ODY5ZVx1ODY4N1x1ODY5N1x1ODY4Nlx1ODY4Ylx1ODY5YVx1ODY4NVx1ODZhNVx1ODY5OVx1ODZhMVx1ODZhN1x1ODY5NVx1ODY5OFx1ODY4ZVx1ODY5ZFx1ODY5MFx1ODY5NFx1ODg0M1x1'@;
put 'ODg0NFx1ODg2ZFx1ODg3NVx1ODg3Nlx1ODg3Mlx1ODg4MFx1ODg3MVx1ODg3Zlx1ODg2Zlx1ODg4M1x1ODg3ZVx1ODg3NFx1ODg3Y1x1OGExMlx1OGM0N1x1OGM1N1x1OGM3Ylx1OGNhNFx1OGNhM1x1OGQ3Nlx1OGQ3OFx1OGRiNVx1OGRiN1x1OGRiNlx1OGVkMVx1OGVkM1x1OGZmZVx1OGZm'@;
put 'NVx1OTAwMlx1OGZmZlx1OGZmYlx1OTAwNFx1OGZmY1x1OGZmNlx1OTBkNlx1OTBlMFx1OTBkOVx1OTBkYVx1OTBlM1x1OTBkZlx1OTBlNVx1OTBkOFx1OTBkYlx1OTBkN1x1OTBkY1x1OTBlNFx1OTE1MFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIxMV0ubGVuZ3RoOysrdik2NTUzMyE9'@;
put 'PWtbMjExXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMTFdW3ZdXT01NDAxNit2LFRbNTQwMTYrdl09a1syMTFdW3ZdKTtmb3Ioa1syMTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkxNGVcdTkxNGZcdTkxZDVcdTkxZTJcdTkx'@;
put 'ZGFcdTk2NWNcdTk2NWZcdTk2YmNcdTk4ZTNcdTlhZGZcdTliMmZcdTRlN2ZcdTUwNzBcdTUwNmFcdTUwNjFcdTUwNWVcdTUwNjBcdTUwNTNcdTUwNGJcdTUwNWRcdTUwNzJcdTUwNDhcdTUwNGRcdTUwNDFcdTUwNWJcdTUwNGFcdTUwNjJcdTUwMTVcdTUwNDVcdTUwNWZcdTUwNjlcdTUwNmJc'@;
put 'dTUwNjNcdTUwNjRcdTUwNDZcdTUwNDBcdTUwNmVcdTUwNzNcdTUwNTdcdTUwNTFcdTUxZDBcdTUyNmJcdTUyNmRcdTUyNmNcdTUyNmVcdTUyZDZcdTUyZDNcdTUzMmRcdTUzOWNcdTU1NzVcdTU1NzZcdTU1M2NcdTU1NGRcdTU1NTBcdTU1MzRcdTU1MmFcdTU1NTFcdTU1NjJcdTU1MzZcdTU1'@;
put 'MzVcdTU1MzBcdTU1NTJcdTU1NDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU1MGNcdTU1MzJcdTU1NjVcdTU1NGVcdTU1MzlcdTU1NDhcdTU1MmRcdTU1M2JcdTU1NDBcdTU1NGJcdTU3MGFcdTU3MDdcdTU3ZmJcdTU4MTRcdTU3ZTJcdTU3ZjZcdTU3ZGNcdTU3'@;
put 'ZjRcdTU4MDBcdTU3ZWRcdTU3ZmRcdTU4MDhcdTU3ZjhcdTU4MGJcdTU3ZjNcdTU3Y2ZcdTU4MDdcdTU3ZWVcdTU3ZTNcdTU3ZjJcdTU3ZTVcdTU3ZWNcdTU3ZTFcdTU4MGVcdTU3ZmNcdTU4MTBcdTU3ZTdcdTU4MDFcdTU4MGNcdTU3ZjFcdTU3ZTlcdTU3ZjBcdTU4MGRcdTU4MDRcdTU5NWNc'@;
put 'dTVhNjBcdTVhNThcdTVhNTVcdTVhNjdcdTVhNWVcdTVhMzhcdTVhMzVcdTVhNmRcdTVhNTBcdTVhNWZcdTVhNjVcdTVhNmNcdTVhNTNcdTVhNjRcdTVhNTdcdTVhNDNcdTVhNWRcdTVhNTJcdTVhNDRcdTVhNWJcdTVhNDhcdTVhOGVcdTVhM2VcdTVhNGRcdTVhMzlcdTVhNGNcdTVhNzBcdTVh'@;
put 'NjlcdTVhNDdcdTVhNTFcdTVhNTZcdTVhNDJcdTVhNWNcdTViNzJcdTViNmVcdTViYzFcdTViYzBcdTVjNTlcdTVkMWVcdTVkMGJcdTVkMWRcdTVkMWFcdTVkMjBcdTVkMGNcdTVkMjhcdTVkMGRcdTVkMjZcdTVkMjVcdTVkMGZcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMTJdLmxlbmd0'@;
put 'aDsrK3YpNjU1MzMhPT1rWzIxMl1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjEyXVt2XV09NTQyNzIrdixUWzU0MjcyK3ZdPWtbMjEyXVt2XSk7Zm9yKGtbMjEzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZDMwXHU1ZDEyXHU1'@;
put 'ZDIzXHU1ZDFmXHU1ZDJlXHU1ZTNlXHU1ZTM0XHU1ZWIxXHU1ZWI0XHU1ZWI5XHU1ZWIyXHU1ZWIzXHU1ZjM2XHU1ZjM4XHU1ZjliXHU1Zjk2XHU1ZjlmXHU2MDhhXHU2MDkwXHU2MDg2XHU2MGJlXHU2MGIwXHU2MGJhXHU2MGQzXHU2MGQ0XHU2MGNmXHU2MGU0XHU2MGQ5XHU2MGRkXHU2MGM4'@;
put 'XHU2MGIxXHU2MGRiXHU2MGI3XHU2MGNhXHU2MGJmXHU2MGMzXHU2MGNkXHU2MGMwXHU2MzMyXHU2MzY1XHU2MzhhXHU2MzgyXHU2MzdkXHU2M2JkXHU2MzllXHU2M2FkXHU2MzlkXHU2Mzk3XHU2M2FiXHU2MzhlXHU2MzZmXHU2Mzg3XHU2MzkwXHU2MzZlXHU2M2FmXHU2Mzc1XHU2MzljXHU2'@;
put 'MzZkXHU2M2FlXHU2MzdjXHU2M2E0XHU2MzNiXHU2MzlmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2Mzc4XHU2Mzg1XHU2MzgxXHU2MzkxXHU2MzhkXHU2MzcwXHU2NTUzXHU2NWNkXHU2NjY1XHU2NjYxXHU2NjViXHU2NjU5XHU2NjVjXHU2NjYyXHU2NzE4XHU2'@;
put 'ODc5XHU2ODg3XHU2ODkwXHU2ODljXHU2ODZkXHU2ODZlXHU2OGFlXHU2OGFiXHU2OTU2XHU2ODZmXHU2OGEzXHU2OGFjXHU2OGE5XHU2ODc1XHU2ODc0XHU2OGIyXHU2ODhmXHU2ODc3XHU2ODkyXHU2ODdjXHU2ODZiXHU2ODcyXHU2OGFhXHU2ODgwXHU2ODcxXHU2ODdlXHU2ODliXHU2ODk2'@;
put 'XHU2ODhiXHU2OGEwXHU2ODg5XHU2OGE0XHU2ODc4XHU2ODdiXHU2ODkxXHU2ODhjXHU2ODhhXHU2ODdkXHU2YjM2XHU2YjMzXHU2YjM3XHU2YjM4XHU2YjkxXHU2YjhmXHU2YjhkXHU2YjhlXHU2YjhjXHU2YzJhXHU2ZGMwXHU2ZGFiXHU2ZGI0XHU2ZGIzXHU2ZTc0XHU2ZGFjXHU2ZGU5XHU2'@;
put 'ZGUyXHU2ZGI3XHU2ZGY2XHU2ZGQ0XHU2ZTAwXHU2ZGM4XHU2ZGUwXHU2ZGRmXHU2ZGQ2XHU2ZGJlXHU2ZGU1XHU2ZGRjXHU2ZGRkXHU2ZGRiXHU2ZGY0XHU2ZGNhXHU2ZGJkXHU2ZGVkXHU2ZGYwXHU2ZGJhXHU2ZGQ1XHU2ZGMyXHU2ZGNmXHU2ZGM5XHVmZmZkIi5zcGxpdCgiIiksdj0wO3Yh'@;
put 'PWtbMjEzXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMTNdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIxM11bdl1dPTU0NTI4K3YsVFs1NDUyOCt2XT1rWzIxM11bdl0pO2ZvcihrWzIxNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'NmRkMFx1NmRmMlx1NmRkM1x1NmRmZFx1NmRkN1x1NmRjZFx1NmRlM1x1NmRiYlx1NzBmYVx1NzEwZFx1NzBmN1x1NzExN1x1NzBmNFx1NzEwY1x1NzBmMFx1NzEwNFx1NzBmM1x1NzExMFx1NzBmY1x1NzBmZlx1NzEwNlx1NzExM1x1NzEwMFx1NzBmOFx1NzBmNlx1NzEwYlx1NzEwMlx1NzEw'@;
put 'ZVx1NzI3ZVx1NzI3Ylx1NzI3Y1x1NzI3Zlx1NzMxZFx1NzMxN1x1NzMwN1x1NzMxMVx1NzMxOFx1NzMwYVx1NzMwOFx1NzJmZlx1NzMwZlx1NzMxZVx1NzM4OFx1NzNmNlx1NzNmOFx1NzNmNVx1NzQwNFx1NzQwMVx1NzNmZFx1NzQwN1x1NzQwMFx1NzNmYVx1NzNmY1x1NzNmZlx1NzQwY1x1'@;
put 'NzQwYlx1NzNmNFx1NzQwOFx1NzU2NFx1NzU2M1x1NzVjZVx1NzVkMlx1NzVjZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzVjYlx1NzVjY1x1NzVkMVx1NzVkMFx1NzY4Zlx1NzY4OVx1NzZkM1x1NzczOVx1NzcyZlx1NzcyZFx1NzczMVx1NzczMlx1NzczNFx1'@;
put 'NzczM1x1NzczZFx1NzcyNVx1NzczYlx1NzczNVx1Nzg0OFx1Nzg1Mlx1Nzg0OVx1Nzg0ZFx1Nzg0YVx1Nzg0Y1x1NzgyNlx1Nzg0NVx1Nzg1MFx1Nzk2NFx1Nzk2N1x1Nzk2OVx1Nzk2YVx1Nzk2M1x1Nzk2Ylx1Nzk2MVx1NzliYlx1NzlmYVx1NzlmOFx1NzlmNlx1NzlmN1x1N2E4Zlx1N2E5'@;
put 'NFx1N2E5MFx1N2IzNVx1N2I0N1x1N2IzNFx1N2IyNVx1N2IzMFx1N2IyMlx1N2IyNFx1N2IzM1x1N2IxOFx1N2IyYVx1N2IxZFx1N2IzMVx1N2IyYlx1N2IyZFx1N2IyZlx1N2IzMlx1N2IzOFx1N2IxYVx1N2IyM1x1N2M5NFx1N2M5OFx1N2M5Nlx1N2NhM1x1N2QzNVx1N2QzZFx1N2QzOFx1'@;
put 'N2QzNlx1N2QzYVx1N2Q0NVx1N2QyY1x1N2QyOVx1N2Q0MVx1N2Q0N1x1N2QzZVx1N2QzZlx1N2Q0YVx1N2QzYlx1N2QyOFx1N2Y2M1x1N2Y5NVx1N2Y5Y1x1N2Y5ZFx1N2Y5Ylx1N2ZjYVx1N2ZjYlx1N2ZjZFx1N2ZkMFx1N2ZkMVx1N2ZjN1x1N2ZjZlx1N2ZjOVx1ODAxZlx1ZmZmZCIuc3Bs'@;
put 'aXQoIiIpLHY9MDt2IT1rWzIxNF0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjE0XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMTRdW3ZdXT01NDc4NCt2LFRbNTQ3ODQrdl09a1syMTRdW3ZdKTtmb3Ioa1syMTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdTgwMWVcdTgwMWJcdTgwNDdcdTgwNDNcdTgwNDhcdTgxMThcdTgxMjVcdTgxMTlcdTgxMWJcdTgxMmRcdTgxMWZcdTgxMmNcdTgxMWVcdTgxMjFcdTgxMTVcdTgxMjdcdTgxMWRcdTgxMjJcdTgyMTFcdTgyMzhcdTgyMzNcdTgyM2FcdTgyMzRcdTgyMzJcdTgyNzRcdTgz'@;
put 'OTBcdTgzYTNcdTgzYThcdTgzOGRcdTgzN2FcdTgzNzNcdTgzYTRcdTgzNzRcdTgzOGZcdTgzODFcdTgzOTVcdTgzOTlcdTgzNzVcdTgzOTRcdTgzYTlcdTgzN2RcdTgzODNcdTgzOGNcdTgzOWRcdTgzOWJcdTgzYWFcdTgzOGJcdTgzN2VcdTgzYTVcdTgzYWZcdTgzODhcdTgzOTdcdTgzYjBc'@;
put 'dTgzN2ZcdTgzYTZcdTgzODdcdTgzYWVcdTgzNzZcdTgzOWFcdTg2NTlcdTg2NTZcdTg2YmZcdTg2YjdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg2YzJcdTg2YzFcdTg2YzVcdTg2YmFcdTg2YjBcdTg2YzhcdTg2YjlcdTg2YjNcdTg2YjhcdTg2Y2NcdTg2YjRc'@;
put 'dTg2YmJcdTg2YmNcdTg2YzNcdTg2YmRcdTg2YmVcdTg4NTJcdTg4ODlcdTg4OTVcdTg4YThcdTg4YTJcdTg4YWFcdTg4OWFcdTg4OTFcdTg4YTFcdTg4OWZcdTg4OThcdTg4YTdcdTg4OTlcdTg4OWJcdTg4OTdcdTg4YTRcdTg4YWNcdTg4OGNcdTg4OTNcdTg4OGVcdTg5ODJcdTg5ZDZcdTg5'@;
put 'ZDlcdTg5ZDVcdThhMzBcdThhMjdcdThhMmNcdThhMWVcdThjMzlcdThjM2JcdThjNWNcdThjNWRcdThjN2RcdThjYTVcdThkN2RcdThkN2JcdThkNzlcdThkYmNcdThkYzJcdThkYjlcdThkYmZcdThkYzFcdThlZDhcdThlZGVcdThlZGRcdThlZGNcdThlZDdcdThlZTBcdThlZTFcdTkwMjRc'@;
put 'dTkwMGJcdTkwMTFcdTkwMWNcdTkwMGNcdTkwMjFcdTkwZWZcdTkwZWFcdTkwZjBcdTkwZjRcdTkwZjJcdTkwZjNcdTkwZDRcdTkwZWJcdTkwZWNcdTkwZTlcdTkxNTZcdTkxNThcdTkxNWFcdTkxNTNcdTkxNTVcdTkxZWNcdTkxZjRcdTkxZjFcdTkxZjNcdTkxZjhcdTkxZTRcdTkxZjlcdTkx'@;
put 'ZWFcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMTVdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIxNV1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjE1XVt2XV09NTUwNDArdixUWzU1MDQwK3ZdPWtbMjE1XVt2XSk7Zm9yKGtbMjE2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MWViXHU5MWY3XHU5MWU4XHU5MWVlXHU5NTdhXHU5NTg2XHU5NTg4XHU5NjdjXHU5NjZkXHU5NjZiXHU5NjcxXHU5NjZmXHU5NmJmXHU5NzZhXHU5ODA0XHU5OGU1XHU5OTk3XHU1MDliXHU1MDk1XHU1MDk0XHU1MDllXHU1MDhiXHU1MGEzXHU1'@;
put 'MDgzXHU1MDhjXHU1MDhlXHU1MDlkXHU1MDY4XHU1MDljXHU1MDkyXHU1MDgyXHU1MDg3XHU1MTVmXHU1MWQ0XHU1MzEyXHU1MzExXHU1M2E0XHU1M2E3XHU1NTkxXHU1NWE4XHU1NWE1XHU1NWFkXHU1NTc3XHU1NjQ1XHU1NWEyXHU1NTkzXHU1NTg4XHU1NThmXHU1NWI1XHU1NTgxXHU1NWEz'@;
put 'XHU1NTkyXHU1NWE0XHU1NTdkXHU1NThjXHU1NWE2XHU1NTdmXHU1NTk1XHU1NWExXHU1NThlXHU1NzBjXHU1ODI5XHU1ODM3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ODE5XHU1ODFlXHU1ODI3XHU1ODIzXHU1ODI4XHU1N2Y1XHU1ODQ4XHU1ODI1XHU1ODFj'@;
put 'XHU1ODFiXHU1ODMzXHU1ODNmXHU1ODM2XHU1ODJlXHU1ODM5XHU1ODM4XHU1ODJkXHU1ODJjXHU1ODNiXHU1OTYxXHU1YWFmXHU1YTk0XHU1YTlmXHU1YTdhXHU1YWEyXHU1YTllXHU1YTc4XHU1YWE2XHU1YTdjXHU1YWE1XHU1YWFjXHU1YTk1XHU1YWFlXHU1YTM3XHU1YTg0XHU1YThhXHU1'@;
put 'YTk3XHU1YTgzXHU1YThiXHU1YWE5XHU1YTdiXHU1YTdkXHU1YThjXHU1YTljXHU1YThmXHU1YTkzXHU1YTlkXHU1YmVhXHU1YmNkXHU1YmNiXHU1YmQ0XHU1YmQxXHU1YmNhXHU1YmNlXHU1YzBjXHU1YzMwXHU1ZDM3XHU1ZDQzXHU1ZDZiXHU1ZDQxXHU1ZDRiXHU1ZDNmXHU1ZDM1XHU1ZDUx'@;
put 'XHU1ZDRlXHU1ZDU1XHU1ZDMzXHU1ZDNhXHU1ZDUyXHU1ZDNkXHU1ZDMxXHU1ZDU5XHU1ZDQyXHU1ZDM5XHU1ZDQ5XHU1ZDM4XHU1ZDNjXHU1ZDMyXHU1ZDM2XHU1ZDQwXHU1ZDQ1XHU1ZTQ0XHU1ZTQxXHU1ZjU4XHU1ZmE2XHU1ZmE1XHU1ZmFiXHU2MGM5XHU2MGI5XHU2MGNjXHU2MGUyXHU2'@;
put 'MGNlXHU2MGM0XHU2MTE0XHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjE2XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMTZdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIxNl1bdl1dPTU1Mjk2K3YsVFs1NTI5Nit2XT1rWzIxNl1bdl0pO2ZvcihrWzIxN109Ilx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjBmMlx1NjEwYVx1NjExNlx1NjEwNVx1NjBmNVx1NjExM1x1NjBmOFx1NjBmY1x1NjBmZVx1NjBjMVx1NjEwM1x1NjExOFx1NjExZFx1NjExMFx1NjBmZlx1NjEwNFx1NjEwYlx1NjI0YVx1NjM5NFx1NjNiMVx1NjNiMFx1'@;
put 'NjNjZVx1NjNlNVx1NjNlOFx1NjNlZlx1NjNjM1x1NjQ5ZFx1NjNmM1x1NjNjYVx1NjNlMFx1NjNmNlx1NjNkNVx1NjNmMlx1NjNmNVx1NjQ2MVx1NjNkZlx1NjNiZVx1NjNkZFx1NjNkY1x1NjNjNFx1NjNkOFx1NjNkM1x1NjNjMlx1NjNjN1x1NjNjY1x1NjNjYlx1NjNjOFx1NjNmMFx1NjNk'@;
put 'N1x1NjNkOVx1NjUzMlx1NjU2N1x1NjU2YVx1NjU2NFx1NjU1Y1x1NjU2OFx1NjU2NVx1NjU4Y1x1NjU5ZFx1NjU5ZVx1NjVhZVx1NjVkMFx1NjVkMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjY3Y1x1NjY2Y1x1NjY3Ylx1NjY4MFx1NjY3MVx1NjY3OVx1NjY2'@;
put 'YVx1NjY3Mlx1NjcwMVx1NjkwY1x1NjhkM1x1NjkwNFx1NjhkY1x1NjkyYVx1NjhlY1x1NjhlYVx1NjhmMVx1NjkwZlx1NjhkNlx1NjhmN1x1NjhlYlx1NjhlNFx1NjhmNlx1NjkxM1x1NjkxMFx1NjhmM1x1NjhlMVx1NjkwN1x1NjhjY1x1NjkwOFx1Njk3MFx1NjhiNFx1NjkxMVx1NjhlZlx1'@;
put 'NjhjNlx1NjkxNFx1NjhmOFx1NjhkMFx1NjhmZFx1NjhmY1x1NjhlOFx1NjkwYlx1NjkwYVx1NjkxN1x1NjhjZVx1NjhjOFx1NjhkZFx1NjhkZVx1NjhlNlx1NjhmNFx1NjhkMVx1NjkwNlx1NjhkNFx1NjhlOVx1NjkxNVx1NjkyNVx1NjhjN1x1NmIzOVx1NmIzYlx1NmIzZlx1NmIzY1x1NmI5'@;
put 'NFx1NmI5N1x1NmI5OVx1NmI5NVx1NmJiZFx1NmJmMFx1NmJmMlx1NmJmM1x1NmMzMFx1NmRmY1x1NmU0Nlx1NmU0N1x1NmUxZlx1NmU0OVx1NmU4OFx1NmUzY1x1NmUzZFx1NmU0NVx1NmU2Mlx1NmUyYlx1NmUzZlx1NmU0MVx1NmU1ZFx1NmU3M1x1NmUxY1x1NmUzM1x1NmU0Ylx1NmU0MFx1'@;
put 'NmU1MVx1NmUzYlx1NmUwM1x1NmUyZVx1NmU1ZVx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIxN10ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjE3XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMTddW3ZdXT01NTU1Mit2LFRbNTU1NTIrdl09a1syMTddW3ZdKTtmb3Ioa1syMThdPSJcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZlNjhcdTZlNWNcdTZlNjFcdTZlMzFcdTZlMjhcdTZlNjBcdTZlNzFcdTZlNmJcdTZlMzlcdTZlMjJcdTZlMzBcdTZlNTNcdTZlNjVcdTZlMjdcdTZlNzhcdTZlNjRcdTZlNzdcdTZlNTVcdTZlNzlc'@;
put 'dTZlNTJcdTZlNjZcdTZlMzVcdTZlMzZcdTZlNWFcdTcxMjBcdTcxMWVcdTcxMmZcdTcwZmJcdTcxMmVcdTcxMzFcdTcxMjNcdTcxMjVcdTcxMjJcdTcxMzJcdTcxMWZcdTcxMjhcdTcxM2FcdTcxMWJcdTcyNGJcdTcyNWFcdTcyODhcdTcyODlcdTcyODZcdTcyODVcdTcyOGJcdTczMTJcdTcz'@;
put 'MGJcdTczMzBcdTczMjJcdTczMzFcdTczMzNcdTczMjdcdTczMzJcdTczMmRcdTczMjZcdTczMjNcdTczMzVcdTczMGNcdTc0MmVcdTc0MmNcdTc0MzBcdTc0MmJcdTc0MTZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0MWFcdTc0MjFcdTc0MmRcdTc0MzFcdTc0'@;
put 'MjRcdTc0MjNcdTc0MWRcdTc0MjlcdTc0MjBcdTc0MzJcdTc0ZmJcdTc1MmZcdTc1NmZcdTc1NmNcdTc1ZTdcdTc1ZGFcdTc1ZTFcdTc1ZTZcdTc1ZGRcdTc1ZGZcdTc1ZTRcdTc1ZDdcdTc2OTVcdTc2OTJcdTc2ZGFcdTc3NDZcdTc3NDdcdTc3NDRcdTc3NGRcdTc3NDVcdTc3NGFcdTc3NGVc'@;
put 'dTc3NGJcdTc3NGNcdTc3ZGVcdTc3ZWNcdTc4NjBcdTc4NjRcdTc4NjVcdTc4NWNcdTc4NmRcdTc4NzFcdTc4NmFcdTc4NmVcdTc4NzBcdTc4NjlcdTc4NjhcdTc4NWVcdTc4NjJcdTc5NzRcdTc5NzNcdTc5NzJcdTc5NzBcdTdhMDJcdTdhMGFcdTdhMDNcdTdhMGNcdTdhMDRcdTdhOTlcdTdh'@;
put 'ZTZcdTdhZTRcdTdiNGFcdTdiM2JcdTdiNDRcdTdiNDhcdTdiNGNcdTdiNGVcdTdiNDBcdTdiNThcdTdiNDVcdTdjYTJcdTdjOWVcdTdjYThcdTdjYTFcdTdkNThcdTdkNmZcdTdkNjNcdTdkNTNcdTdkNTZcdTdkNjdcdTdkNmFcdTdkNGZcdTdkNmRcdTdkNWNcdTdkNmJcdTdkNTJcdTdkNTRc'@;
put 'dTdkNjlcdTdkNTFcdTdkNWZcdTdkNGVcdTdmM2VcdTdmM2ZcdTdmNjVcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMThdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIxOF1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjE4XVt2XV09NTU4MDgrdixUWzU1ODA4K3ZdPWtbMjE4XVt2XSk7Zm9y'@;
put 'KGtbMjE5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZjY2XHU3ZmEyXHU3ZmEwXHU3ZmExXHU3ZmQ3XHU4MDUxXHU4MDRmXHU4MDUwXHU4MGZlXHU4MGQ0XHU4MTQzXHU4MTRhXHU4MTUyXHU4MTRmXHU4MTQ3XHU4MTNkXHU4MTRk'@;
put 'XHU4MTNhXHU4MWU2XHU4MWVlXHU4MWY3XHU4MWY4XHU4MWY5XHU4MjA0XHU4MjNjXHU4MjNkXHU4MjNmXHU4Mjc1XHU4MzNiXHU4M2NmXHU4M2Y5XHU4NDIzXHU4M2MwXHU4M2U4XHU4NDEyXHU4M2U3XHU4M2U0XHU4M2ZjXHU4M2Y2XHU4NDEwXHU4M2M2XHU4M2M4XHU4M2ViXHU4M2UzXHU4'@;
put 'M2JmXHU4NDAxXHU4M2RkXHU4M2U1XHU4M2Q4XHU4M2ZmXHU4M2UxXHU4M2NiXHU4M2NlXHU4M2Q2XHU4M2Y1XHU4M2M5XHU4NDA5XHU4NDBmXHU4M2RlXHU4NDExXHU4NDA2XHU4M2MyXHU4M2YzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4M2Q1XHU4M2ZhXHU4'@;
put 'M2M3XHU4M2QxXHU4M2VhXHU4NDEzXHU4M2MzXHU4M2VjXHU4M2VlXHU4M2M0XHU4M2ZiXHU4M2Q3XHU4M2UyXHU4NDFiXHU4M2RiXHU4M2ZlXHU4NmQ4XHU4NmUyXHU4NmU2XHU4NmQzXHU4NmUzXHU4NmRhXHU4NmVhXHU4NmRkXHU4NmViXHU4NmRjXHU4NmVjXHU4NmU5XHU4NmQ3XHU4NmU4'@;
put 'XHU4NmQxXHU4ODQ4XHU4ODU2XHU4ODU1XHU4OGJhXHU4OGQ3XHU4OGI5XHU4OGI4XHU4OGMwXHU4OGJlXHU4OGI2XHU4OGJjXHU4OGI3XHU4OGJkXHU4OGIyXHU4OTAxXHU4OGM5XHU4OTk1XHU4OTk4XHU4OTk3XHU4OWRkXHU4OWRhXHU4OWRiXHU4YTRlXHU4YTRkXHU4YTM5XHU4YTU5XHU4'@;
put 'YTQwXHU4YTU3XHU4YTU4XHU4YTQ0XHU4YTQ1XHU4YTUyXHU4YTQ4XHU4YTUxXHU4YTRhXHU4YTRjXHU4YTRmXHU4YzVmXHU4YzgxXHU4YzgwXHU4Y2JhXHU4Y2JlXHU4Y2IwXHU4Y2I5XHU4Y2I1XHU4ZDg0XHU4ZDgwXHU4ZDg5XHU4ZGQ4XHU4ZGQzXHU4ZGNkXHU4ZGM3XHU4ZGQ2XHU4ZGRj'@;
put 'XHU4ZGNmXHU4ZGQ1XHU4ZGQ5XHU4ZGM4XHU4ZGQ3XHU4ZGM1XHU4ZWVmXHU4ZWY3XHU4ZWZhXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjE5XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMTldW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIxOV1bdl1dPTU2MDY0K3YsVFs1NjA2NCt2XT1r'@;
put 'WzIxOV1bdl0pO2ZvcihrWzIyMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGVmOVx1OGVlNlx1OGVlZVx1OGVlNVx1OGVmNVx1OGVlN1x1OGVlOFx1OGVmNlx1OGVlYlx1OGVmMVx1OGVlY1x1OGVmNFx1OGVlOVx1OTAyZFx1OTAz'@;
put 'NFx1OTAyZlx1OTEwNlx1OTEyY1x1OTEwNFx1OTBmZlx1OTBmY1x1OTEwOFx1OTBmOVx1OTBmYlx1OTEwMVx1OTEwMFx1OTEwN1x1OTEwNVx1OTEwM1x1OTE2MVx1OTE2NFx1OTE1Zlx1OTE2Mlx1OTE2MFx1OTIwMVx1OTIwYVx1OTIyNVx1OTIwM1x1OTIxYVx1OTIyNlx1OTIwZlx1OTIwY1x1'@;
put 'OTIwMFx1OTIxMlx1OTFmZlx1OTFmZFx1OTIwNlx1OTIwNFx1OTIyN1x1OTIwMlx1OTIxY1x1OTIyNFx1OTIxOVx1OTIxN1x1OTIwNVx1OTIxNlx1OTU3Ylx1OTU4ZFx1OTU4Y1x1OTU5MFx1OTY4N1x1OTY3ZVx1OTY4OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'OTY4OVx1OTY4M1x1OTY4MFx1OTZjMlx1OTZjOFx1OTZjM1x1OTZmMVx1OTZmMFx1OTc2Y1x1OTc3MFx1OTc2ZVx1OTgwN1x1OThhOVx1OThlYlx1OWNlNlx1OWVmOVx1NGU4M1x1NGU4NFx1NGViNlx1NTBiZFx1NTBiZlx1NTBjNlx1NTBhZVx1NTBjNFx1NTBjYVx1NTBiNFx1NTBjOFx1NTBj'@;
put 'Mlx1NTBiMFx1NTBjMVx1NTBiYVx1NTBiMVx1NTBjYlx1NTBjOVx1NTBiNlx1NTBiOFx1NTFkN1x1NTI3YVx1NTI3OFx1NTI3Ylx1NTI3Y1x1NTVjM1x1NTVkYlx1NTVjY1x1NTVkMFx1NTVjYlx1NTVjYVx1NTVkZFx1NTVjMFx1NTVkNFx1NTVjNFx1NTVlOVx1NTViZlx1NTVkMlx1NTU4ZFx1'@;
put 'NTVjZlx1NTVkNVx1NTVlMlx1NTVkNlx1NTVjOFx1NTVmMlx1NTVjZFx1NTVkOVx1NTVjMlx1NTcxNFx1NTg1M1x1NTg2OFx1NTg2NFx1NTg0Zlx1NTg0ZFx1NTg0OVx1NTg2Zlx1NTg1NVx1NTg0ZVx1NTg1ZFx1NTg1OVx1NTg2NVx1NTg1Ylx1NTgzZFx1NTg2M1x1NTg3MVx1NThmY1x1NWFj'@;
put 'N1x1NWFjNFx1NWFjYlx1NWFiYVx1NWFiOFx1NWFiMVx1NWFiNVx1NWFiMFx1NWFiZlx1NWFjOFx1NWFiYlx1NWFjNlx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIyMF0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjIwXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMjBdW3ZdXT01NjMyMCt2'@;
put 'LFRbNTYzMjArdl09a1syMjBdW3ZdKTtmb3Ioa1syMjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVhYjdcdTVhYzBcdTVhY2FcdTVhYjRcdTVhYjZcdTVhY2RcdTVhYjlcdTVhOTBcdTViZDZcdTViZDhcdTViZDlcdTVjMWZcdTVj'@;
put 'MzNcdTVkNzFcdTVkNjNcdTVkNGFcdTVkNjVcdTVkNzJcdTVkNmNcdTVkNWVcdTVkNjhcdTVkNjdcdTVkNjJcdTVkZjBcdTVlNGZcdTVlNGVcdTVlNGFcdTVlNGRcdTVlNGJcdTVlYzVcdTVlY2NcdTVlYzZcdTVlY2JcdTVlYzdcdTVmNDBcdTVmYWZcdTVmYWRcdTYwZjdcdTYxNDlcdTYxNGFc'@;
put 'dTYxMmJcdTYxNDVcdTYxMzZcdTYxMzJcdTYxMmVcdTYxNDZcdTYxMmZcdTYxNGZcdTYxMjlcdTYxNDBcdTYyMjBcdTkxNjhcdTYyMjNcdTYyMjVcdTYyMjRcdTYzYzVcdTYzZjFcdTYzZWJcdTY0MTBcdTY0MTJcdTY0MDlcdTY0MjBcdTY0MjRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdTY0MzNcdTY0NDNcdTY0MWZcdTY0MTVcdTY0MThcdTY0MzlcdTY0MzdcdTY0MjJcdTY0MjNcdTY0MGNcdTY0MjZcdTY0MzBcdTY0MjhcdTY0NDFcdTY0MzVcdTY0MmZcdTY0MGFcdTY0MWFcdTY0NDBcdTY0MjVcdTY0MjdcdTY0MGJcdTYzZTdcdTY0MWJcdTY0MmVcdTY0'@;
put 'MjFcdTY0MGVcdTY1NmZcdTY1OTJcdTY1ZDNcdTY2ODZcdTY2OGNcdTY2OTVcdTY2OTBcdTY2OGJcdTY2OGFcdTY2OTlcdTY2OTRcdTY2NzhcdTY3MjBcdTY5NjZcdTY5NWZcdTY5MzhcdTY5NGVcdTY5NjJcdTY5NzFcdTY5M2ZcdTY5NDVcdTY5NmFcdTY5MzlcdTY5NDJcdTY5NTdcdTY5NTlc'@;
put 'dTY5N2FcdTY5NDhcdTY5NDlcdTY5MzVcdTY5NmNcdTY5MzNcdTY5M2RcdTY5NjVcdTY4ZjBcdTY5NzhcdTY5MzRcdTY5NjlcdTY5NDBcdTY5NmZcdTY5NDRcdTY5NzZcdTY5NThcdTY5NDFcdTY5NzRcdTY5NGNcdTY5M2JcdTY5NGJcdTY5MzdcdTY5NWNcdTY5NGZcdTY5NTFcdTY5MzJcdTY5'@;
put 'NTJcdTY5MmZcdTY5N2JcdTY5M2NcdTZiNDZcdTZiNDVcdTZiNDNcdTZiNDJcdTZiNDhcdTZiNDFcdTZiOWJcdWZhMGRcdTZiZmJcdTZiZmNcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMjFdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIyMV1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjIx'@;
put 'XVt2XV09NTY1NzYrdixUWzU2NTc2K3ZdPWtbMjIxXVt2XSk7Zm9yKGtbMjIyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YmY5XHU2YmY3XHU2YmY4XHU2ZTliXHU2ZWQ2XHU2ZWM4XHU2ZThmXHU2ZWMwXHU2ZTlmXHU2ZTkzXHU2'@;
put 'ZTk0XHU2ZWEwXHU2ZWIxXHU2ZWI5XHU2ZWM2XHU2ZWQyXHU2ZWJkXHU2ZWMxXHU2ZTllXHU2ZWM5XHU2ZWI3XHU2ZWIwXHU2ZWNkXHU2ZWE2XHU2ZWNmXHU2ZWIyXHU2ZWJlXHU2ZWMzXHU2ZWRjXHU2ZWQ4XHU2ZTk5XHU2ZTkyXHU2ZThlXHU2ZThkXHU2ZWE0XHU2ZWExXHU2ZWJmXHU2ZWIz'@;
put 'XHU2ZWQwXHU2ZWNhXHU2ZTk3XHU2ZWFlXHU2ZWEzXHU3MTQ3XHU3MTU0XHU3MTUyXHU3MTYzXHU3MTYwXHU3MTQxXHU3MTVkXHU3MTYyXHU3MTcyXHU3MTc4XHU3MTZhXHU3MTYxXHU3MTQyXHU3MTU4XHU3MTQzXHU3MTRiXHU3MTcwXHU3MTVmXHU3MTUwXHU3MTUzXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MTQ0XHU3MTRkXHU3MTVhXHU3MjRmXHU3MjhkXHU3MjhjXHU3MjkxXHU3MjkwXHU3MjhlXHU3MzNjXHU3MzQyXHU3MzNiXHU3MzNhXHU3MzQwXHU3MzRhXHU3MzQ5XHU3NDQ0XHU3NDRhXHU3NDRiXHU3NDUyXHU3NDUxXHU3NDU3XHU3NDQwXHU3'@;
put 'NDRmXHU3NDUwXHU3NDRlXHU3NDQyXHU3NDQ2XHU3NDRkXHU3NDU0XHU3NGUxXHU3NGZmXHU3NGZlXHU3NGZkXHU3NTFkXHU3NTc5XHU3NTc3XHU2OTgzXHU3NWVmXHU3NjBmXHU3NjAzXHU3NWY3XHU3NWZlXHU3NWZjXHU3NWY5XHU3NWY4XHU3NjEwXHU3NWZiXHU3NWY2XHU3NWVkXHU3NWY1'@;
put 'XHU3NWZkXHU3Njk5XHU3NmI1XHU3NmRkXHU3NzU1XHU3NzVmXHU3NzYwXHU3NzUyXHU3NzU2XHU3NzVhXHU3NzY5XHU3NzY3XHU3NzU0XHU3NzU5XHU3NzZkXHU3N2UwXHU3ODg3XHU3ODlhXHU3ODk0XHU3ODhmXHU3ODg0XHU3ODk1XHU3ODg1XHU3ODg2XHU3OGExXHU3ODgzXHU3ODc5XHU3'@;
put 'ODk5XHU3ODgwXHU3ODk2XHU3ODdiXHU3OTdjXHU3OTgyXHU3OTdkXHU3OTc5XHU3YTExXHU3YTE4XHU3YTE5XHU3YTEyXHU3YTE3XHU3YTE1XHU3YTIyXHU3YTEzXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjIyXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMjJdW3ZdLmNoYXJDb2RlQXQo'@;
put 'MCkmJihzZVtrWzIyMl1bdl1dPTU2ODMyK3YsVFs1NjgzMit2XT1rWzIyMl1bdl0pO2ZvcihrWzIyM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2ExYlx1N2ExMFx1N2FhM1x1N2FhMlx1N2E5ZVx1N2FlYlx1N2I2Nlx1N2I2NFx1'@;
put 'N2I2ZFx1N2I3NFx1N2I2OVx1N2I3Mlx1N2I2NVx1N2I3M1x1N2I3MVx1N2I3MFx1N2I2MVx1N2I3OFx1N2I3Nlx1N2I2M1x1N2NiMlx1N2NiNFx1N2NhZlx1N2Q4OFx1N2Q4Nlx1N2Q4MFx1N2Q4ZFx1N2Q3Zlx1N2Q4NVx1N2Q3YVx1N2Q4ZVx1N2Q3Ylx1N2Q4M1x1N2Q3Y1x1N2Q4Y1x1N2Q5'@;
put 'NFx1N2Q4NFx1N2Q3ZFx1N2Q5Mlx1N2Y2ZFx1N2Y2Ylx1N2Y2N1x1N2Y2OFx1N2Y2Y1x1N2ZhNlx1N2ZhNVx1N2ZhN1x1N2ZkYlx1N2ZkY1x1ODAyMVx1ODE2NFx1ODE2MFx1ODE3N1x1ODE1Y1x1ODE2OVx1ODE1Ylx1ODE2Mlx1ODE3Mlx1NjcyMVx1ODE1ZVx1ODE3Nlx1ODE2N1x1ODE2Zlx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODE0NFx1ODE2MVx1ODIxZFx1ODI0OVx1ODI0NFx1ODI0MFx1ODI0Mlx1ODI0NVx1ODRmMVx1ODQzZlx1ODQ1Nlx1ODQ3Nlx1ODQ3OVx1ODQ4Zlx1ODQ4ZFx1ODQ2NVx1ODQ1MVx1ODQ0MFx1ODQ4Nlx1ODQ2N1x1ODQzMFx1'@;
put 'ODQ0ZFx1ODQ3ZFx1ODQ1YVx1ODQ1OVx1ODQ3NFx1ODQ3M1x1ODQ1ZFx1ODUwN1x1ODQ1ZVx1ODQzN1x1ODQzYVx1ODQzNFx1ODQ3YVx1ODQ0M1x1ODQ3OFx1ODQzMlx1ODQ0NVx1ODQyOVx1ODNkOVx1ODQ0Ylx1ODQyZlx1ODQ0Mlx1ODQyZFx1ODQ1Zlx1ODQ3MFx1ODQzOVx1ODQ0ZVx1ODQ0'@;
put 'Y1x1ODQ1Mlx1ODQ2Zlx1ODRjNVx1ODQ4ZVx1ODQzYlx1ODQ0N1x1ODQzNlx1ODQzM1x1ODQ2OFx1ODQ3ZVx1ODQ0NFx1ODQyYlx1ODQ2MFx1ODQ1NFx1ODQ2ZVx1ODQ1MFx1ODcwYlx1ODcwNFx1ODZmN1x1ODcwY1x1ODZmYVx1ODZkNlx1ODZmNVx1ODc0ZFx1ODZmOFx1ODcwZVx1ODcwOVx1'@;
put 'ODcwMVx1ODZmNlx1ODcwZFx1ODcwNVx1ODhkNlx1ODhjYlx1ODhjZFx1ODhjZVx1ODhkZVx1ODhkYlx1ODhkYVx1ODhjY1x1ODhkMFx1ODk4NVx1ODk5Ylx1ODlkZlx1ODllNVx1ODllNFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIyM10ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjIzXVt2'@;
put 'XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMjNdW3ZdXT01NzA4OCt2LFRbNTcwODgrdl09a1syMjNdW3ZdKTtmb3Ioa1syMjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg5ZTFcdTg5ZTBcdTg5ZTJcdTg5ZGNcdTg5ZTZcdThhNzZc'@;
put 'dThhODZcdThhN2ZcdThhNjFcdThhM2ZcdThhNzdcdThhODJcdThhODRcdThhNzVcdThhODNcdThhODFcdThhNzRcdThhN2FcdThjM2NcdThjNGJcdThjNGFcdThjNjVcdThjNjRcdThjNjZcdThjODZcdThjODRcdThjODVcdThjY2NcdThkNjhcdThkNjlcdThkOTFcdThkOGNcdThkOGVcdThk'@;
put 'OGZcdThkOGRcdThkOTNcdThkOTRcdThkOTBcdThkOTJcdThkZjBcdThkZTBcdThkZWNcdThkZjFcdThkZWVcdThkZDBcdThkZTlcdThkZTNcdThkZTJcdThkZTdcdThkZjJcdThkZWJcdThkZjRcdThmMDZcdThlZmZcdThmMDFcdThmMDBcdThmMDVcdThmMDdcdThmMDhcdThmMDJcdThmMGJc'@;
put 'dTkwNTJcdTkwM2ZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwNDRcdTkwNDlcdTkwM2RcdTkxMTBcdTkxMGRcdTkxMGZcdTkxMTFcdTkxMTZcdTkxMTRcdTkxMGJcdTkxMGVcdTkxNmVcdTkxNmZcdTkyNDhcdTkyNTJcdTkyMzBcdTkyM2FcdTkyNjZcdTkyMzNc'@;
put 'dTkyNjVcdTkyNWVcdTkyODNcdTkyMmVcdTkyNGFcdTkyNDZcdTkyNmRcdTkyNmNcdTkyNGZcdTkyNjBcdTkyNjdcdTkyNmZcdTkyMzZcdTkyNjFcdTkyNzBcdTkyMzFcdTkyNTRcdTkyNjNcdTkyNTBcdTkyNzJcdTkyNGVcdTkyNTNcdTkyNGNcdTkyNTZcdTkyMzJcdTk1OWZcdTk1OWNcdTk1'@;
put 'OWVcdTk1OWJcdTk2OTJcdTk2OTNcdTk2OTFcdTk2OTdcdTk2Y2VcdTk2ZmFcdTk2ZmRcdTk2ZjhcdTk2ZjVcdTk3NzNcdTk3NzdcdTk3NzhcdTk3NzJcdTk4MGZcdTk4MGRcdTk4MGVcdTk4YWNcdTk4ZjZcdTk4ZjlcdTk5YWZcdTk5YjJcdTk5YjBcdTk5YjVcdTlhYWRcdTlhYWJcdTliNWJc'@;
put 'dTljZWFcdTljZWRcdTljZTdcdTllODBcdTllZmRcdTUwZTZcdTUwZDRcdTUwZDdcdTUwZThcdTUwZjNcdTUwZGJcdTUwZWFcdTUwZGRcdTUwZTRcdTUwZDNcdTUwZWNcdTUwZjBcdTUwZWZcdTUwZTNcdTUwZTBcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMjRdLmxlbmd0aDsrK3YpNjU1'@;
put 'MzMhPT1rWzIyNF1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjI0XVt2XV09NTczNDQrdixUWzU3MzQ0K3ZdPWtbMjI0XVt2XSk7Zm9yKGtbMjI1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MWQ4XHU1MjgwXHU1MjgxXHU1MmU5'@;
put 'XHU1MmViXHU1MzMwXHU1M2FjXHU1NjI3XHU1NjE1XHU1NjBjXHU1NjEyXHU1NWZjXHU1NjBmXHU1NjFjXHU1NjAxXHU1NjEzXHU1NjAyXHU1NWZhXHU1NjFkXHU1NjA0XHU1NWZmXHU1NWY5XHU1ODg5XHU1ODdjXHU1ODkwXHU1ODk4XHU1ODg2XHU1ODgxXHU1ODdmXHU1ODc0XHU1ODhiXHU1'@;
put 'ODdhXHU1ODg3XHU1ODkxXHU1ODhlXHU1ODc2XHU1ODgyXHU1ODg4XHU1ODdiXHU1ODk0XHU1ODhmXHU1OGZlXHU1OTZiXHU1YWRjXHU1YWVlXHU1YWU1XHU1YWQ1XHU1YWVhXHU1YWRhXHU1YWVkXHU1YWViXHU1YWYzXHU1YWUyXHU1YWUwXHU1YWRiXHU1YWVjXHU1YWRlXHU1YWRkXHU1YWQ5'@;
put 'XHU1YWU4XHU1YWRmXHU1Yjc3XHU1YmUwXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YmUzXHU1YzYzXHU1ZDgyXHU1ZDgwXHU1ZDdkXHU1ZDg2XHU1ZDdhXHU1ZDgxXHU1ZDc3XHU1ZDhhXHU1ZDg5XHU1ZDg4XHU1ZDdlXHU1ZDdjXHU1ZDhkXHU1ZDc5XHU1ZDdm'@;
put 'XHU1ZTU4XHU1ZTU5XHU1ZTUzXHU1ZWQ4XHU1ZWQxXHU1ZWQ3XHU1ZWNlXHU1ZWRjXHU1ZWQ1XHU1ZWQ5XHU1ZWQyXHU1ZWQ0XHU1ZjQ0XHU1ZjQzXHU1ZjZmXHU1ZmI2XHU2MTJjXHU2MTI4XHU2MTQxXHU2MTVlXHU2MTcxXHU2MTczXHU2MTUyXHU2MTUzXHU2MTcyXHU2MTZjXHU2MTgwXHU2'@;
put 'MTc0XHU2MTU0XHU2MTdhXHU2MTViXHU2MTY1XHU2MTNiXHU2MTZhXHU2MTYxXHU2MTU2XHU2MjI5XHU2MjI3XHU2MjJiXHU2NDJiXHU2NDRkXHU2NDViXHU2NDVkXHU2NDc0XHU2NDc2XHU2NDcyXHU2NDczXHU2NDdkXHU2NDc1XHU2NDY2XHU2NGE2XHU2NDRlXHU2NDgyXHU2NDVlXHU2NDVj'@;
put 'XHU2NDRiXHU2NDUzXHU2NDYwXHU2NDUwXHU2NDdmXHU2NDNmXHU2NDZjXHU2NDZiXHU2NDU5XHU2NDY1XHU2NDc3XHU2NTczXHU2NWEwXHU2NmExXHU2NmEwXHU2NjlmXHU2NzA1XHU2NzA0XHU2NzIyXHU2OWIxXHU2OWI2XHU2OWM5XHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjI1XS5s'@;
put 'ZW5ndGg7Kyt2KTY1NTMzIT09a1syMjVdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIyNV1bdl1dPTU3NjAwK3YsVFs1NzYwMCt2XT1rWzIyNV1bdl0pO2ZvcihrWzIyNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjlhMFx1Njlj'@;
put 'ZVx1Njk5Nlx1NjliMFx1NjlhY1x1NjliY1x1Njk5MVx1Njk5OVx1Njk4ZVx1NjlhN1x1Njk4ZFx1NjlhOVx1NjliZVx1NjlhZlx1NjliZlx1NjljNFx1NjliZFx1NjlhNFx1NjlkNFx1NjliOVx1NjljYVx1Njk5YVx1NjljZlx1NjliM1x1Njk5M1x1NjlhYVx1NjlhMVx1Njk5ZVx1NjlkOVx1'@;
put 'Njk5N1x1Njk5MFx1NjljMlx1NjliNVx1NjlhNVx1NjljNlx1NmI0YVx1NmI0ZFx1NmI0Ylx1NmI5ZVx1NmI5Zlx1NmJhMFx1NmJjM1x1NmJjNFx1NmJmZVx1NmVjZVx1NmVmNVx1NmVmMVx1NmYwM1x1NmYyNVx1NmVmOFx1NmYzN1x1NmVmYlx1NmYyZVx1NmYwOVx1NmY0ZVx1NmYxOVx1NmYx'@;
put 'YVx1NmYyN1x1NmYxOFx1NmYzYlx1NmYxMlx1NmVlZFx1NmYwYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmYzNlx1NmY3M1x1NmVmOVx1NmVlZVx1NmYyZFx1NmY0MFx1NmYzMFx1NmYzY1x1NmYzNVx1NmVlYlx1NmYwN1x1NmYwZVx1NmY0M1x1NmYwNVx1NmVm'@;
put 'ZFx1NmVmNlx1NmYzOVx1NmYxY1x1NmVmY1x1NmYzYVx1NmYxZlx1NmYwZFx1NmYxZVx1NmYwOFx1NmYyMVx1NzE4N1x1NzE5MFx1NzE4OVx1NzE4MFx1NzE4NVx1NzE4Mlx1NzE4Zlx1NzE3Ylx1NzE4Nlx1NzE4MVx1NzE5N1x1NzI0NFx1NzI1M1x1NzI5N1x1NzI5NVx1NzI5M1x1NzM0M1x1'@;
put 'NzM0ZFx1NzM1MVx1NzM0Y1x1NzQ2Mlx1NzQ3M1x1NzQ3MVx1NzQ3NVx1NzQ3Mlx1NzQ2N1x1NzQ2ZVx1NzUwMFx1NzUwMlx1NzUwM1x1NzU3ZFx1NzU5MFx1NzYxNlx1NzYwOFx1NzYwY1x1NzYxNVx1NzYxMVx1NzYwYVx1NzYxNFx1NzZiOFx1Nzc4MVx1Nzc3Y1x1Nzc4NVx1Nzc4Mlx1Nzc2'@;
put 'ZVx1Nzc4MFx1Nzc2Zlx1Nzc3ZVx1Nzc4M1x1NzhiMlx1NzhhYVx1NzhiNFx1NzhhZFx1NzhhOFx1Nzg3ZVx1NzhhYlx1Nzg5ZVx1NzhhNVx1NzhhMFx1NzhhY1x1NzhhMlx1NzhhNFx1Nzk5OFx1Nzk4YVx1Nzk4Ylx1Nzk5Nlx1Nzk5NVx1Nzk5NFx1Nzk5M1x1ZmZmZCIuc3BsaXQoIiIpLHY9'@;
put 'MDt2IT1rWzIyNl0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjI2XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMjZdW3ZdXT01Nzg1Nit2LFRbNTc4NTYrdl09a1syMjZdW3ZdKTtmb3Ioa1syMjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdTc5OTdcdTc5ODhcdTc5OTJcdTc5OTBcdTdhMmJcdTdhNGFcdTdhMzBcdTdhMmZcdTdhMjhcdTdhMjZcdTdhYThcdTdhYWJcdTdhYWNcdTdhZWVcdTdiODhcdTdiOWNcdTdiOGFcdTdiOTFcdTdiOTBcdTdiOTZcdTdiOGRcdTdiOGNcdTdiOWJcdTdiOGVcdTdiODVcdTdiOThcdTUyODRc'@;
put 'dTdiOTlcdTdiYTRcdTdiODJcdTdjYmJcdTdjYmZcdTdjYmNcdTdjYmFcdTdkYTdcdTdkYjdcdTdkYzJcdTdkYTNcdTdkYWFcdTdkYzFcdTdkYzBcdTdkYzVcdTdkOWRcdTdkY2VcdTdkYzRcdTdkYzZcdTdkY2JcdTdkY2NcdTdkYWZcdTdkYjlcdTdkOTZcdTdkYmNcdTdkOWZcdTdkYTZcdTdk'@;
put 'YWVcdTdkYTlcdTdkYTFcdTdkYzlcdTdmNzNcdTdmZTJcdTdmZTNcdTdmZTVcdTdmZGVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgwMjRcdTgwNWRcdTgwNWNcdTgxODlcdTgxODZcdTgxODNcdTgxODdcdTgxOGRcdTgxOGNcdTgxOGJcdTgyMTVcdTg0OTdcdTg0'@;
put 'YTRcdTg0YTFcdTg0OWZcdTg0YmFcdTg0Y2VcdTg0YzJcdTg0YWNcdTg0YWVcdTg0YWJcdTg0YjlcdTg0YjRcdTg0YzFcdTg0Y2RcdTg0YWFcdTg0OWFcdTg0YjFcdTg0ZDBcdTg0OWRcdTg0YTdcdTg0YmJcdTg0YTJcdTg0OTRcdTg0YzdcdTg0Y2NcdTg0OWJcdTg0YTlcdTg0YWZcdTg0YThc'@;
put 'dTg0ZDZcdTg0OThcdTg0YjZcdTg0Y2ZcdTg0YTBcdTg0ZDdcdTg0ZDRcdTg0ZDJcdTg0ZGJcdTg0YjBcdTg0OTFcdTg2NjFcdTg3MzNcdTg3MjNcdTg3MjhcdTg3NmJcdTg3NDBcdTg3MmVcdTg3MWVcdTg3MjFcdTg3MTlcdTg3MWJcdTg3NDNcdTg3MmNcdTg3NDFcdTg3M2VcdTg3NDZcdTg3'@;
put 'MjBcdTg3MzJcdTg3MmFcdTg3MmRcdTg3M2NcdTg3MTJcdTg3M2FcdTg3MzFcdTg3MzVcdTg3NDJcdTg3MjZcdTg3MjdcdTg3MzhcdTg3MjRcdTg3MWFcdTg3MzBcdTg3MTFcdTg4ZjdcdTg4ZTdcdTg4ZjFcdTg4ZjJcdTg4ZmFcdTg4ZmVcdTg4ZWVcdTg4ZmNcdTg4ZjZcdTg4ZmJcdWZmZmQi'@;
put 'LnNwbGl0KCIiKSx2PTA7diE9a1syMjddLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIyN11bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjI3XVt2XV09NTgxMTIrdixUWzU4MTEyK3ZdPWtbMjI3XVt2XSk7Zm9yKGtbMjI4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHU4OGYwXHU4OGVjXHU4OGViXHU4OTlkXHU4OWExXHU4OTlmXHU4OTllXHU4OWU5XHU4OWViXHU4OWU4XHU4YWFiXHU4YTk5XHU4YThiXHU4YTkyXHU4YThmXHU4YTk2XHU4YzNkXHU4YzY4XHU4YzY5XHU4Y2Q1XHU4Y2NmXHU4Y2Q3XHU4ZDk2XHU4ZTA5XHU4ZTAy'@;
put 'XHU4ZGZmXHU4ZTBkXHU4ZGZkXHU4ZTBhXHU4ZTAzXHU4ZTA3XHU4ZTA2XHU4ZTA1XHU4ZGZlXHU4ZTAwXHU4ZTA0XHU4ZjEwXHU4ZjExXHU4ZjBlXHU4ZjBkXHU5MTIzXHU5MTFjXHU5MTIwXHU5MTIyXHU5MTFmXHU5MTFkXHU5MTFhXHU5MTI0XHU5MTIxXHU5MTFiXHU5MTdhXHU5MTcyXHU5'@;
put 'MTc5XHU5MTczXHU5MmE1XHU5MmE0XHU5Mjc2XHU5MjliXHU5MjdhXHU5MmEwXHU5Mjk0XHU5MmFhXHU5MjhkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MmE2XHU5MjlhXHU5MmFiXHU5Mjc5XHU5Mjk3XHU5MjdmXHU5MmEzXHU5MmVlXHU5MjhlXHU5MjgyXHU5'@;
put 'Mjk1XHU5MmEyXHU5MjdkXHU5Mjg4XHU5MmExXHU5MjhhXHU5Mjg2XHU5MjhjXHU5Mjk5XHU5MmE3XHU5MjdlXHU5Mjg3XHU5MmE5XHU5MjlkXHU5MjhiXHU5MjJkXHU5NjllXHU5NmExXHU5NmZmXHU5NzU4XHU5NzdkXHU5NzdhXHU5NzdlXHU5NzgzXHU5NzgwXHU5NzgyXHU5NzdiXHU5Nzg0'@;
put 'XHU5NzgxXHU5NzdmXHU5N2NlXHU5N2NkXHU5ODE2XHU5OGFkXHU5OGFlXHU5OTAyXHU5OTAwXHU5OTA3XHU5OTlkXHU5OTljXHU5OWMzXHU5OWI5XHU5OWJiXHU5OWJhXHU5OWMyXHU5OWJkXHU5OWM3XHU5YWIxXHU5YWUzXHU5YWU3XHU5YjNlXHU5YjNmXHU5YjYwXHU5YjYxXHU5YjVmXHU5'@;
put 'Y2YxXHU5Y2YyXHU5Y2Y1XHU5ZWE3XHU1MGZmXHU1MTAzXHU1MTMwXHU1MGY4XHU1MTA2XHU1MTA3XHU1MGY2XHU1MGZlXHU1MTBiXHU1MTBjXHU1MGZkXHU1MTBhXHU1MjhiXHU1MjhjXHU1MmYxXHU1MmVmXHU1NjQ4XHU1NjQyXHU1NjRjXHU1NjM1XHU1NjQxXHU1NjRhXHU1NjQ5XHU1NjQ2'@;
put 'XHU1NjU4XHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjI4XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMjhdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIyOF1bdl1dPTU4MzY4K3YsVFs1ODM2OCt2XT1rWzIyOF1bdl0pO2ZvcihrWzIyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTY1YVx1NTY0MFx1NTYzM1x1NTYzZFx1NTYyY1x1NTYzZVx1NTYzOFx1NTYyYVx1NTYzYVx1NTcxYVx1NThhYlx1NTg5ZFx1NThiMVx1NThhMFx1NThhM1x1NThhZlx1NThhY1x1NThhNVx1NThhMVx1NThmZlx1NWFmZlx1NWFmNFx1NWFm'@;
put 'ZFx1NWFmN1x1NWFmNlx1NWIwM1x1NWFmOFx1NWIwMlx1NWFmOVx1NWIwMVx1NWIwN1x1NWIwNVx1NWIwZlx1NWM2N1x1NWQ5OVx1NWQ5N1x1NWQ5Zlx1NWQ5Mlx1NWRhMlx1NWQ5M1x1NWQ5NVx1NWRhMFx1NWQ5Y1x1NWRhMVx1NWQ5YVx1NWQ5ZVx1NWU2OVx1NWU1ZFx1NWU2MFx1NWU1Y1x1'@;
put 'N2RmM1x1NWVkYlx1NWVkZVx1NWVlMVx1NWY0OVx1NWZiMlx1NjE4Ylx1NjE4M1x1NjE3OVx1NjFiMVx1NjFiMFx1NjFhMlx1NjE4OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjE5Ylx1NjE5M1x1NjFhZlx1NjFhZFx1NjE5Zlx1NjE5Mlx1NjFhYVx1NjFhMVx1'@;
put 'NjE4ZFx1NjE2Nlx1NjFiM1x1NjIyZFx1NjQ2ZVx1NjQ3MFx1NjQ5Nlx1NjRhMFx1NjQ4NVx1NjQ5N1x1NjQ5Y1x1NjQ4Zlx1NjQ4Ylx1NjQ4YVx1NjQ4Y1x1NjRhM1x1NjQ5Zlx1NjQ2OFx1NjRiMVx1NjQ5OFx1NjU3Nlx1NjU3YVx1NjU3OVx1NjU3Ylx1NjViMlx1NjViM1x1NjZiNVx1NjZi'@;
put 'MFx1NjZhOVx1NjZiMlx1NjZiN1x1NjZhYVx1NjZhZlx1NmEwMFx1NmEwNlx1NmExN1x1NjllNVx1NjlmOFx1NmExNVx1NjlmMVx1NjllNFx1NmEyMFx1NjlmZlx1NjllY1x1NjllMlx1NmExYlx1NmExZFx1NjlmZVx1NmEyN1x1NjlmMlx1NjllZVx1NmExNFx1NjlmN1x1NjllN1x1NmE0MFx1'@;
put 'NmEwOFx1NjllNlx1NjlmYlx1NmEwZFx1NjlmY1x1NjllYlx1NmEwOVx1NmEwNFx1NmExOFx1NmEyNVx1NmEwZlx1NjlmNlx1NmEyNlx1NmEwN1x1NjlmNFx1NmExNlx1NmI1MVx1NmJhNVx1NmJhM1x1NmJhMlx1NmJhNlx1NmMwMVx1NmMwMFx1NmJmZlx1NmMwMlx1NmY0MVx1NmYyNlx1NmY3'@;
put 'ZVx1NmY4N1x1NmZjNlx1NmY5Mlx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIyOV0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjI5XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMjldW3ZdXT01ODYyNCt2LFRbNTg2MjQrdl09a1syMjldW3ZdKTtmb3Ioa1syMzBdPSJcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmOGRcdTZmODlcdTZmOGNcdTZmNjJcdTZmNGZcdTZmODVcdTZmNWFcdTZmOTZcdTZmNzZcdTZmNmNcdTZmODJcdTZmNTVcdTZmNzJcdTZmNTJcdTZmNTBcdTZmNTdcdTZmOTRcdTZmOTNcdTZmNWRcdTZmMDBcdTZm'@;
put 'NjFcdTZmNmJcdTZmN2RcdTZmNjdcdTZmOTBcdTZmNTNcdTZmOGJcdTZmNjlcdTZmN2ZcdTZmOTVcdTZmNjNcdTZmNzdcdTZmNmFcdTZmN2JcdTcxYjJcdTcxYWZcdTcxOWJcdTcxYjBcdTcxYTBcdTcxOWFcdTcxYTlcdTcxYjVcdTcxOWRcdTcxYTVcdTcxOWVcdTcxYTRcdTcxYTFcdTcxYWFc'@;
put 'dTcxOWNcdTcxYTdcdTcxYjNcdTcyOThcdTcyOWFcdTczNThcdTczNTJcdTczNWVcdTczNWZcdTczNjBcdTczNWRcdTczNWJcdTczNjFcdTczNWFcdTczNTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTczNjJcdTc0ODdcdTc0ODlcdTc0OGFcdTc0ODZcdTc0ODFc'@;
put 'dTc0N2RcdTc0ODVcdTc0ODhcdTc0N2NcdTc0NzlcdTc1MDhcdTc1MDdcdTc1N2VcdTc2MjVcdTc2MWVcdTc2MTlcdTc2MWRcdTc2MWNcdTc2MjNcdTc2MWFcdTc2MjhcdTc2MWJcdTc2OWNcdTc2OWRcdTc2OWVcdTc2OWJcdTc3OGRcdTc3OGZcdTc3ODlcdTc3ODhcdTc4Y2RcdTc4YmJcdTc4'@;
put 'Y2ZcdTc4Y2NcdTc4ZDFcdTc4Y2VcdTc4ZDRcdTc4YzhcdTc4YzNcdTc4YzRcdTc4YzlcdTc5OWFcdTc5YTFcdTc5YTBcdTc5OWNcdTc5YTJcdTc5OWJcdTZiNzZcdTdhMzlcdTdhYjJcdTdhYjRcdTdhYjNcdTdiYjdcdTdiY2JcdTdiYmVcdTdiYWNcdTdiY2VcdTdiYWZcdTdiYjlcdTdiY2Fc'@;
put 'dTdiYjVcdTdjYzVcdTdjYzhcdTdjY2NcdTdjY2JcdTdkZjdcdTdkZGJcdTdkZWFcdTdkZTdcdTdkZDdcdTdkZTFcdTdlMDNcdTdkZmFcdTdkZTZcdTdkZjZcdTdkZjFcdTdkZjBcdTdkZWVcdTdkZGZcdTdmNzZcdTdmYWNcdTdmYjBcdTdmYWRcdTdmZWRcdTdmZWJcdTdmZWFcdTdmZWNcdTdm'@;
put 'ZTZcdTdmZThcdTgwNjRcdTgwNjdcdTgxYTNcdTgxOWZcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMzBdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIzMF1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjMwXVt2XV09NTg4ODArdixUWzU4ODgwK3ZdPWtbMjMwXVt2XSk7Zm9yKGtbMjMxXT0i'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MTllXHU4MTk1XHU4MWEyXHU4MTk5XHU4MTk3XHU4MjE2XHU4MjRmXHU4MjUzXHU4MjUyXHU4MjUwXHU4MjRlXHU4MjUxXHU4NTI0XHU4NTNiXHU4NTBmXHU4NTAwXHU4NTI5XHU4NTBlXHU4'@;
put 'NTA5XHU4NTBkXHU4NTFmXHU4NTBhXHU4NTI3XHU4NTFjXHU4NGZiXHU4NTJiXHU4NGZhXHU4NTA4XHU4NTBjXHU4NGY0XHU4NTJhXHU4NGYyXHU4NTE1XHU4NGY3XHU4NGViXHU4NGYzXHU4NGZjXHU4NTEyXHU4NGVhXHU4NGU5XHU4NTE2XHU4NGZlXHU4NTI4XHU4NTFkXHU4NTJlXHU4NTAy'@;
put 'XHU4NGZkXHU4NTFlXHU4NGY2XHU4NTMxXHU4NTI2XHU4NGU3XHU4NGU4XHU4NGYwXHU4NGVmXHU4NGY5XHU4NTE4XHU4NTIwXHU4NTMwXHU4NTBiXHU4NTE5XHU4NTJmXHU4NjYyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NzU2XHU4NzYzXHU4NzY0XHU4Nzc3'@;
put 'XHU4N2UxXHU4NzczXHU4NzU4XHU4NzU0XHU4NzViXHU4NzUyXHU4NzYxXHU4NzVhXHU4NzUxXHU4NzVlXHU4NzZkXHU4NzZhXHU4NzUwXHU4NzRlXHU4NzVmXHU4NzVkXHU4NzZmXHU4NzZjXHU4NzdhXHU4NzZlXHU4NzVjXHU4NzY1XHU4NzRmXHU4NzdiXHU4Nzc1XHU4NzYyXHU4NzY3XHU4'@;
put 'NzY5XHU4ODVhXHU4OTA1XHU4OTBjXHU4OTE0XHU4OTBiXHU4OTE3XHU4OTE4XHU4OTE5XHU4OTA2XHU4OTE2XHU4OTExXHU4OTBlXHU4OTA5XHU4OWEyXHU4OWE0XHU4OWEzXHU4OWVkXHU4OWYwXHU4OWVjXHU4YWNmXHU4YWM2XHU4YWI4XHU4YWQzXHU4YWQxXHU4YWQ0XHU4YWQ1XHU4YWJi'@;
put 'XHU4YWQ3XHU4YWJlXHU4YWMwXHU4YWM1XHU4YWQ4XHU4YWMzXHU4YWJhXHU4YWJkXHU4YWQ5XHU4YzNlXHU4YzRkXHU4YzhmXHU4Y2U1XHU4Y2RmXHU4Y2Q5XHU4Y2U4XHU4Y2RhXHU4Y2RkXHU4Y2U3XHU4ZGEwXHU4ZDljXHU4ZGExXHU4ZDliXHU4ZTIwXHU4ZTIzXHU4ZTI1XHU4ZTI0XHU4'@;
put 'ZTJlXHU4ZTE1XHU4ZTFiXHU4ZTE2XHU4ZTExXHU4ZTE5XHU4ZTI2XHU4ZTI3XHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjMxXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMzFdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIzMV1bdl1dPTU5MTM2K3YsVFs1OTEzNit2XT1rWzIzMV1bdl0p'@;
put 'O2ZvcihrWzIzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGUxNFx1OGUxMlx1OGUxOFx1OGUxM1x1OGUxY1x1OGUxN1x1OGUxYVx1OGYyY1x1OGYyNFx1OGYxOFx1OGYxYVx1OGYyMFx1OGYyM1x1OGYxNlx1OGYxN1x1OTA3M1x1'@;
put 'OTA3MFx1OTA2Zlx1OTA2N1x1OTA2Ylx1OTEyZlx1OTEyYlx1OTEyOVx1OTEyYVx1OTEzMlx1OTEyNlx1OTEyZVx1OTE4NVx1OTE4Nlx1OTE4YVx1OTE4MVx1OTE4Mlx1OTE4NFx1OTE4MFx1OTJkMFx1OTJjM1x1OTJjNFx1OTJjMFx1OTJkOVx1OTJiNlx1OTJjZlx1OTJmMVx1OTJkZlx1OTJk'@;
put 'OFx1OTJlOVx1OTJkN1x1OTJkZFx1OTJjY1x1OTJlZlx1OTJjMlx1OTJlOFx1OTJjYVx1OTJjOFx1OTJjZVx1OTJlNlx1OTJjZFx1OTJkNVx1OTJjOVx1OTJlMFx1OTJkZVx1OTJlN1x1OTJkMVx1OTJkM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTJiNVx1OTJl'@;
put 'MVx1OTJjNlx1OTJiNFx1OTU3Y1x1OTVhY1x1OTVhYlx1OTVhZVx1OTViMFx1OTZhNFx1OTZhMlx1OTZkM1x1OTcwNVx1OTcwOFx1OTcwMlx1OTc1YVx1OTc4YVx1OTc4ZVx1OTc4OFx1OTdkMFx1OTdjZlx1OTgxZVx1OTgxZFx1OTgyNlx1OTgyOVx1OTgyOFx1OTgyMFx1OTgxYlx1OTgyN1x1'@;
put 'OThiMlx1OTkwOFx1OThmYVx1OTkxMVx1OTkxNFx1OTkxNlx1OTkxN1x1OTkxNVx1OTlkY1x1OTljZFx1OTljZlx1OTlkM1x1OTlkNFx1OTljZVx1OTljOVx1OTlkNlx1OTlkOFx1OTljYlx1OTlkN1x1OTljY1x1OWFiM1x1OWFlY1x1OWFlYlx1OWFmM1x1OWFmMlx1OWFmMVx1OWI0Nlx1OWI0'@;
put 'M1x1OWI2N1x1OWI3NFx1OWI3MVx1OWI2Nlx1OWI3Nlx1OWI3NVx1OWI3MFx1OWI2OFx1OWI2NFx1OWI2Y1x1OWNmY1x1OWNmYVx1OWNmZFx1OWNmZlx1OWNmN1x1OWQwN1x1OWQwMFx1OWNmOVx1OWNmYlx1OWQwOFx1OWQwNVx1OWQwNFx1OWU4M1x1OWVkM1x1OWYwZlx1OWYxMFx1NTExY1x1'@;
put 'NTExM1x1NTExN1x1NTExYVx1NTExMVx1NTFkZVx1NTMzNFx1NTNlMVx1NTY3MFx1NTY2MFx1NTY2ZVx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIzMl0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjMyXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMzJdW3ZdXT01OTM5Mit2LFRbNTkzOTIr'@;
put 'dl09a1syMzJdW3ZdKTtmb3Ioa1syMzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU2NzNcdTU2NjZcdTU2NjNcdTU2NmRcdTU2NzJcdTU2NWVcdTU2NzdcdTU3MWNcdTU3MWJcdTU4YzhcdTU4YmRcdTU4YzlcdTU4YmZcdTU4YmFc'@;
put 'dTU4YzJcdTU4YmNcdTU4YzZcdTViMTdcdTViMTlcdTViMWJcdTViMjFcdTViMTRcdTViMTNcdTViMTBcdTViMTZcdTViMjhcdTViMWFcdTViMjBcdTViMWVcdTViZWZcdTVkYWNcdTVkYjFcdTVkYTlcdTVkYTdcdTVkYjVcdTVkYjBcdTVkYWVcdTVkYWFcdTVkYThcdTVkYjJcdTVkYWRcdTVk'@;
put 'YWZcdTVkYjRcdTVlNjdcdTVlNjhcdTVlNjZcdTVlNmZcdTVlZTlcdTVlZTdcdTVlZTZcdTVlZThcdTVlZTVcdTVmNGJcdTVmYmNcdTYxOWRcdTYxYThcdTYxOTZcdTYxYzVcdTYxYjRcdTYxYzZcdTYxYzFcdTYxY2NcdTYxYmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdTYxYmZcdTYxYjhcdTYxOGNcdTY0ZDdcdTY0ZDZcdTY0ZDBcdTY0Y2ZcdTY0YzlcdTY0YmRcdTY0ODlcdTY0YzNcdTY0ZGJcdTY0ZjNcdTY0ZDlcdTY1MzNcdTY1N2ZcdTY1N2NcdTY1YTJcdTY2YzhcdTY2YmVcdTY2YzBcdTY2Y2FcdTY2Y2JcdTY2Y2ZcdTY2YmRcdTY2YmJcdTY2YmFc'@;
put 'dTY2Y2NcdTY3MjNcdTZhMzRcdTZhNjZcdTZhNDlcdTZhNjdcdTZhMzJcdTZhNjhcdTZhM2VcdTZhNWRcdTZhNmRcdTZhNzZcdTZhNWJcdTZhNTFcdTZhMjhcdTZhNWFcdTZhM2JcdTZhM2ZcdTZhNDFcdTZhNmFcdTZhNjRcdTZhNTBcdTZhNGZcdTZhNTRcdTZhNmZcdTZhNjlcdTZhNjBcdTZh'@;
put 'M2NcdTZhNWVcdTZhNTZcdTZhNTVcdTZhNGRcdTZhNGVcdTZhNDZcdTZiNTVcdTZiNTRcdTZiNTZcdTZiYTdcdTZiYWFcdTZiYWJcdTZiYzhcdTZiYzdcdTZjMDRcdTZjMDNcdTZjMDZcdTZmYWRcdTZmY2JcdTZmYTNcdTZmYzdcdTZmYmNcdTZmY2VcdTZmYzhcdTZmNWVcdTZmYzRcdTZmYmRc'@;
put 'dTZmOWVcdTZmY2FcdTZmYThcdTcwMDRcdTZmYTVcdTZmYWVcdTZmYmFcdTZmYWNcdTZmYWFcdTZmY2ZcdTZmYmZcdTZmYjhcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMzNdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIzM11bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjMzXVt2XV09NTk2'@;
put 'NDgrdixUWzU5NjQ4K3ZdPWtbMjMzXVt2XSk7Zm9yKGtbMjM0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZmEyXHU2ZmM5XHU2ZmFiXHU2ZmNkXHU2ZmFmXHU2ZmIyXHU2ZmIwXHU3MWM1XHU3MWMyXHU3MWJmXHU3MWI4XHU3MWQ2'@;
put 'XHU3MWMwXHU3MWMxXHU3MWNiXHU3MWQ0XHU3MWNhXHU3MWM3XHU3MWNmXHU3MWJkXHU3MWQ4XHU3MWJjXHU3MWM2XHU3MWRhXHU3MWRiXHU3MjlkXHU3MjllXHU3MzY5XHU3MzY2XHU3MzY3XHU3MzZjXHU3MzY1XHU3MzZiXHU3MzZhXHU3NDdmXHU3NDlhXHU3NGEwXHU3NDk0XHU3NDkyXHU3'@;
put 'NDk1XHU3NGExXHU3NTBiXHU3NTgwXHU3NjJmXHU3NjJkXHU3NjMxXHU3NjNkXHU3NjMzXHU3NjNjXHU3NjM1XHU3NjMyXHU3NjMwXHU3NmJiXHU3NmU2XHU3NzlhXHU3NzlkXHU3N2ExXHU3NzljXHU3NzliXHU3N2EyXHU3N2EzXHU3Nzk1XHU3Nzk5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHU3Nzk3XHU3OGRkXHU3OGU5XHU3OGU1XHU3OGVhXHU3OGRlXHU3OGUzXHU3OGRiXHU3OGUxXHU3OGUyXHU3OGVkXHU3OGRmXHU3OGUwXHU3OWE0XHU3YTQ0XHU3YTQ4XHU3YTQ3XHU3YWI2XHU3YWI4XHU3YWI1XHU3YWIxXHU3YWI3XHU3YmRlXHU3YmUzXHU3YmU3'@;
put 'XHU3YmRkXHU3YmQ1XHU3YmU1XHU3YmRhXHU3YmU4XHU3YmY5XHU3YmQ0XHU3YmVhXHU3YmUyXHU3YmRjXHU3YmViXHU3YmQ4XHU3YmRmXHU3Y2QyXHU3Y2Q0XHU3Y2Q3XHU3Y2QwXHU3Y2QxXHU3ZTEyXHU3ZTIxXHU3ZTE3XHU3ZTBjXHU3ZTFmXHU3ZTIwXHU3ZTEzXHU3ZTBlXHU3ZTFjXHU3'@;
put 'ZTE1XHU3ZTFhXHU3ZTIyXHU3ZTBiXHU3ZTBmXHU3ZTE2XHU3ZTBkXHU3ZTE0XHU3ZTI1XHU3ZTI0XHU3ZjQzXHU3ZjdiXHU3ZjdjXHU3ZjdhXHU3ZmIxXHU3ZmVmXHU4MDJhXHU4MDI5XHU4MDZjXHU4MWIxXHU4MWE2XHU4MWFlXHU4MWI5XHU4MWI1XHU4MWFiXHU4MWIwXHU4MWFjXHU4MWI0'@;
put 'XHU4MWIyXHU4MWI3XHU4MWE3XHU4MWYyXHU4MjU1XHU4MjU2XHU4MjU3XHU4NTU2XHU4NTQ1XHU4NTZiXHU4NTRkXHU4NTUzXHU4NTYxXHU4NTU4XHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjM0XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMzRdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtr'@;
put 'WzIzNF1bdl1dPTU5OTA0K3YsVFs1OTkwNCt2XT1rWzIzNF1bdl0pO2ZvcihrWzIzNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODU0MFx1ODU0Nlx1ODU2NFx1ODU0MVx1ODU2Mlx1ODU0NFx1ODU1MVx1ODU0N1x1ODU2M1x1ODUz'@;
put 'ZVx1ODU1Ylx1ODU3MVx1ODU0ZVx1ODU2ZVx1ODU3NVx1ODU1NVx1ODU2N1x1ODU2MFx1ODU4Y1x1ODU2Nlx1ODU1ZFx1ODU1NFx1ODU2NVx1ODU2Y1x1ODY2M1x1ODY2NVx1ODY2NFx1ODc5Ylx1ODc4Zlx1ODc5N1x1ODc5M1x1ODc5Mlx1ODc4OFx1ODc4MVx1ODc5Nlx1ODc5OFx1ODc3OVx1'@;
put 'ODc4N1x1ODdhM1x1ODc4NVx1ODc5MFx1ODc5MVx1ODc5ZFx1ODc4NFx1ODc5NFx1ODc5Y1x1ODc5YVx1ODc4OVx1ODkxZVx1ODkyNlx1ODkzMFx1ODkyZFx1ODkyZVx1ODkyN1x1ODkzMVx1ODkyMlx1ODkyOVx1ODkyM1x1ODkyZlx1ODkyY1x1ODkxZlx1ODlmMVx1OGFlMFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGFlMlx1OGFmMlx1OGFmNFx1OGFmNVx1OGFkZFx1OGIxNFx1OGFlNFx1OGFkZlx1OGFmMFx1OGFjOFx1OGFkZVx1OGFlMVx1OGFlOFx1OGFmZlx1OGFlZlx1OGFmYlx1OGM5MVx1OGM5Mlx1OGM5MFx1OGNmNVx1OGNlZVx1OGNmMVx1OGNm'@;
put 'MFx1OGNmM1x1OGQ2Y1x1OGQ2ZVx1OGRhNVx1OGRhN1x1OGUzM1x1OGUzZVx1OGUzOFx1OGU0MFx1OGU0NVx1OGUzNlx1OGUzY1x1OGUzZFx1OGU0MVx1OGUzMFx1OGUzZlx1OGViZFx1OGYzNlx1OGYyZVx1OGYzNVx1OGYzMlx1OGYzOVx1OGYzN1x1OGYzNFx1OTA3Nlx1OTA3OVx1OTA3Ylx1'@;
put 'OTA4Nlx1OTBmYVx1OTEzM1x1OTEzNVx1OTEzNlx1OTE5M1x1OTE5MFx1OTE5MVx1OTE4ZFx1OTE4Zlx1OTMyN1x1OTMxZVx1OTMwOFx1OTMxZlx1OTMwNlx1OTMwZlx1OTM3YVx1OTMzOFx1OTMzY1x1OTMxYlx1OTMyM1x1OTMxMlx1OTMwMVx1OTM0Nlx1OTMyZFx1OTMwZVx1OTMwZFx1OTJj'@;
put 'Ylx1OTMxZFx1OTJmYVx1OTMyNVx1OTMxM1x1OTJmOVx1OTJmN1x1OTMzNFx1OTMwMlx1OTMyNFx1OTJmZlx1OTMyOVx1OTMzOVx1OTMzNVx1OTMyYVx1OTMxNFx1OTMwY1x1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIzNV0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjM1XVt2XS5jaGFyQ29k'@;
put 'ZUF0KDApJiYoc2Vba1syMzVdW3ZdXT02MDE2MCt2LFRbNjAxNjArdl09a1syMzVdW3ZdKTtmb3Ioa1syMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzMGJcdTkyZmVcdTkzMDlcdTkzMDBcdTkyZmJcdTkzMTZcdTk1YmNcdTk1'@;
put 'Y2RcdTk1YmVcdTk1YjlcdTk1YmFcdTk1YjZcdTk1YmZcdTk1YjVcdTk1YmRcdTk2YTlcdTk2ZDRcdTk3MGJcdTk3MTJcdTk3MTBcdTk3OTlcdTk3OTdcdTk3OTRcdTk3ZjBcdTk3ZjhcdTk4MzVcdTk4MmZcdTk4MzJcdTk5MjRcdTk5MWZcdTk5MjdcdTk5MjlcdTk5OWVcdTk5ZWVcdTk5ZWNc'@;
put 'dTk5ZTVcdTk5ZTRcdTk5ZjBcdTk5ZTNcdTk5ZWFcdTk5ZTlcdTk5ZTdcdTlhYjlcdTlhYmZcdTlhYjRcdTlhYmJcdTlhZjZcdTlhZmFcdTlhZjlcdTlhZjdcdTliMzNcdTliODBcdTliODVcdTliODdcdTliN2NcdTliN2VcdTliN2JcdTliODJcdTliOTNcdTliOTJcdTliOTBcdTliN2FcdTli'@;
put 'OTVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTliN2RcdTliODhcdTlkMjVcdTlkMTdcdTlkMjBcdTlkMWVcdTlkMTRcdTlkMjlcdTlkMWRcdTlkMThcdTlkMjJcdTlkMTBcdTlkMTlcdTlkMWZcdTllODhcdTllODZcdTllODdcdTllYWVcdTllYWRcdTllZDVcdTll'@;
put 'ZDZcdTllZmFcdTlmMTJcdTlmM2RcdTUxMjZcdTUxMjVcdTUxMjJcdTUxMjRcdTUxMjBcdTUxMjlcdTUyZjRcdTU2OTNcdTU2OGNcdTU2OGRcdTU2ODZcdTU2ODRcdTU2ODNcdTU2N2VcdTU2ODJcdTU2N2ZcdTU2ODFcdTU4ZDZcdTU4ZDRcdTU4Y2ZcdTU4ZDJcdTViMmRcdTViMjVcdTViMzJc'@;
put 'dTViMjNcdTViMmNcdTViMjdcdTViMjZcdTViMmZcdTViMmVcdTViN2JcdTViZjFcdTViZjJcdTVkYjdcdTVlNmNcdTVlNmFcdTVmYmVcdTVmYmJcdTYxYzNcdTYxYjVcdTYxYmNcdTYxZTdcdTYxZTBcdTYxZTVcdTYxZTRcdTYxZThcdTYxZGVcdTY0ZWZcdTY0ZTlcdTY0ZTNcdTY0ZWJcdTY0'@;
put 'ZTRcdTY0ZThcdTY1ODFcdTY1ODBcdTY1YjZcdTY1ZGFcdTY2ZDJcdTZhOGRcdTZhOTZcdTZhODFcdTZhYTVcdTZhODlcdTZhOWZcdTZhOWJcdTZhYTFcdTZhOWVcdTZhODdcdTZhOTNcdTZhOGVcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMzZdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIz'@;
put 'Nl1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjM2XVt2XV09NjA0MTYrdixUWzYwNDE2K3ZdPWtbMjM2XVt2XSk7Zm9yKGtbMjM3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YTk1XHU2YTgzXHU2YWE4XHU2YWE0XHU2YTkxXHU2'@;
put 'YTdmXHU2YWE2XHU2YTlhXHU2YTg1XHU2YThjXHU2YTkyXHU2YjViXHU2YmFkXHU2YzA5XHU2ZmNjXHU2ZmE5XHU2ZmY0XHU2ZmQ0XHU2ZmUzXHU2ZmRjXHU2ZmVkXHU2ZmU3XHU2ZmU2XHU2ZmRlXHU2ZmYyXHU2ZmRkXHU2ZmUyXHU2ZmU4XHU3MWUxXHU3MWYxXHU3MWU4XHU3MWYyXHU3MWU0'@;
put 'XHU3MWYwXHU3MWUyXHU3MzczXHU3MzZlXHU3MzZmXHU3NDk3XHU3NGIyXHU3NGFiXHU3NDkwXHU3NGFhXHU3NGFkXHU3NGIxXHU3NGE1XHU3NGFmXHU3NTEwXHU3NTExXHU3NTEyXHU3NTBmXHU3NTg0XHU3NjQzXHU3NjQ4XHU3NjQ5XHU3NjQ3XHU3NmE0XHU3NmU5XHU3N2I1XHU3N2FiXHU3'@;
put 'N2IyXHU3N2I3XHU3N2I2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3N2I0XHU3N2IxXHU3N2E4XHU3N2YwXHU3OGYzXHU3OGZkXHU3OTAyXHU3OGZiXHU3OGZjXHU3OGYyXHU3OTA1XHU3OGY5XHU3OGZlXHU3OTA0XHU3OWFiXHU3OWE4XHU3YTVjXHU3YTViXHU3'@;
put 'YTU2XHU3YTU4XHU3YTU0XHU3YTVhXHU3YWJlXHU3YWMwXHU3YWMxXHU3YzA1XHU3YzBmXHU3YmYyXHU3YzAwXHU3YmZmXHU3YmZiXHU3YzBlXHU3YmY0XHU3YzBiXHU3YmYzXHU3YzAyXHU3YzA5XHU3YzAzXHU3YzAxXHU3YmY4XHU3YmZkXHU3YzA2XHU3YmYwXHU3YmYxXHU3YzEwXHU3YzBh'@;
put 'XHU3Y2U4XHU3ZTJkXHU3ZTNjXHU3ZTQyXHU3ZTMzXHU5ODQ4XHU3ZTM4XHU3ZTJhXHU3ZTQ5XHU3ZTQwXHU3ZTQ3XHU3ZTI5XHU3ZTRjXHU3ZTMwXHU3ZTNiXHU3ZTM2XHU3ZTQ0XHU3ZTNhXHU3ZjQ1XHU3ZjdmXHU3ZjdlXHU3ZjdkXHU3ZmY0XHU3ZmYyXHU4MDJjXHU4MWJiXHU4MWM0XHU4'@;
put 'MWNjXHU4MWNhXHU4MWM1XHU4MWM3XHU4MWJjXHU4MWU5XHU4MjViXHU4MjVhXHU4MjVjXHU4NTgzXHU4NTgwXHU4NThmXHU4NWE3XHU4NTk1XHU4NWEwXHU4NThiXHU4NWEzXHU4NTdiXHU4NWE0XHU4NTlhXHU4NTllXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjM3XS5sZW5ndGg7Kyt2'@;
put 'KTY1NTMzIT09a1syMzddW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIzN11bdl1dPTYwNjcyK3YsVFs2MDY3Mit2XT1rWzIzN11bdl0pO2ZvcihrWzIzOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODU3N1x1ODU3Y1x1ODU4OVx1'@;
put 'ODVhMVx1ODU3YVx1ODU3OFx1ODU1N1x1ODU4ZVx1ODU5Nlx1ODU4Nlx1ODU4ZFx1ODU5OVx1ODU5ZFx1ODU4MVx1ODVhMlx1ODU4Mlx1ODU4OFx1ODU4NVx1ODU3OVx1ODU3Nlx1ODU5OFx1ODU5MFx1ODU5Zlx1ODY2OFx1ODdiZVx1ODdhYVx1ODdhZFx1ODdjNVx1ODdiMFx1ODdhY1x1ODdi'@;
put 'OVx1ODdiNVx1ODdiY1x1ODdhZVx1ODdjOVx1ODdjM1x1ODdjMlx1ODdjY1x1ODdiN1x1ODdhZlx1ODdjNFx1ODdjYVx1ODdiNFx1ODdiNlx1ODdiZlx1ODdiOFx1ODdiZFx1ODdkZVx1ODdiMlx1ODkzNVx1ODkzM1x1ODkzY1x1ODkzZVx1ODk0MVx1ODk1Mlx1ODkzN1x1ODk0Mlx1ODlhZFx1'@;
put 'ODlhZlx1ODlhZVx1ODlmMlx1ODlmM1x1OGIxZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGIxOFx1OGIxNlx1OGIxMVx1OGIwNVx1OGIwYlx1OGIyMlx1OGIwZlx1OGIxMlx1OGIxNVx1OGIwN1x1OGIwZFx1OGIwOFx1OGIwNlx1OGIxY1x1OGIxM1x1OGIxYVx1'@;
put 'OGM0Zlx1OGM3MFx1OGM3Mlx1OGM3MVx1OGM2Zlx1OGM5NVx1OGM5NFx1OGNmOVx1OGQ2Zlx1OGU0ZVx1OGU0ZFx1OGU1M1x1OGU1MFx1OGU0Y1x1OGU0N1x1OGY0M1x1OGY0MFx1OTA4NVx1OTA3ZVx1OTEzOFx1OTE5YVx1OTFhMlx1OTE5Ylx1OTE5OVx1OTE5Zlx1OTFhMVx1OTE5ZFx1OTFh'@;
put 'MFx1OTNhMVx1OTM4M1x1OTNhZlx1OTM2NFx1OTM1Nlx1OTM0N1x1OTM3Y1x1OTM1OFx1OTM1Y1x1OTM3Nlx1OTM0OVx1OTM1MFx1OTM1MVx1OTM2MFx1OTM2ZFx1OTM4Zlx1OTM0Y1x1OTM2YVx1OTM3OVx1OTM1N1x1OTM1NVx1OTM1Mlx1OTM0Zlx1OTM3MVx1OTM3N1x1OTM3Ylx1OTM2MVx1'@;
put 'OTM1ZVx1OTM2M1x1OTM2N1x1OTM4MFx1OTM0ZVx1OTM1OVx1OTVjN1x1OTVjMFx1OTVjOVx1OTVjM1x1OTVjNVx1OTViN1x1OTZhZVx1OTZiMFx1OTZhY1x1OTcyMFx1OTcxZlx1OTcxOFx1OTcxZFx1OTcxOVx1OTc5YVx1OTdhMVx1OTc5Y1x1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIz'@;
put 'OF0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjM4XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMzhdW3ZdXT02MDkyOCt2LFRbNjA5Mjgrdl09a1syMzhdW3ZdKTtmb3Ioa1syMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk3OWVc'@;
put 'dTk3OWRcdTk3ZDVcdTk3ZDRcdTk3ZjFcdTk4NDFcdTk4NDRcdTk4NGFcdTk4NDlcdTk4NDVcdTk4NDNcdTk5MjVcdTk5MmJcdTk5MmNcdTk5MmFcdTk5MzNcdTk5MzJcdTk5MmZcdTk5MmRcdTk5MzFcdTk5MzBcdTk5OThcdTk5YTNcdTk5YTFcdTlhMDJcdTk5ZmFcdTk5ZjRcdTk5ZjdcdTk5'@;
put 'ZjlcdTk5ZjhcdTk5ZjZcdTk5ZmJcdTk5ZmRcdTk5ZmVcdTk5ZmNcdTlhMDNcdTlhYmVcdTlhZmVcdTlhZmRcdTliMDFcdTlhZmNcdTliNDhcdTliOWFcdTliYThcdTliOWVcdTliOWJcdTliYTZcdTliYTFcdTliYTVcdTliYTRcdTliODZcdTliYTJcdTliYTBcdTliYWZcdTlkMzNcdTlkNDFc'@;
put 'dTlkNjdcdTlkMzZcdTlkMmVcdTlkMmZcdTlkMzFcdTlkMzhcdTlkMzBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlkNDVcdTlkNDJcdTlkNDNcdTlkM2VcdTlkMzdcdTlkNDBcdTlkM2RcdTdmZjVcdTlkMmRcdTllOGFcdTllODlcdTllOGRcdTllYjBcdTllYzhc'@;
put 'dTllZGFcdTllZmJcdTllZmZcdTlmMjRcdTlmMjNcdTlmMjJcdTlmNTRcdTlmYTBcdTUxMzFcdTUxMmRcdTUxMmVcdTU2OThcdTU2OWNcdTU2OTdcdTU2OWFcdTU2OWRcdTU2OTlcdTU5NzBcdTViM2NcdTVjNjlcdTVjNmFcdTVkYzBcdTVlNmRcdTVlNmVcdTYxZDhcdTYxZGZcdTYxZWRcdTYx'@;
put 'ZWVcdTYxZjFcdTYxZWFcdTYxZjBcdTYxZWJcdTYxZDZcdTYxZTlcdTY0ZmZcdTY1MDRcdTY0ZmRcdTY0ZjhcdTY1MDFcdTY1MDNcdTY0ZmNcdTY1OTRcdTY1ZGJcdTY2ZGFcdTY2ZGJcdTY2ZDhcdTZhYzVcdTZhYjlcdTZhYmRcdTZhZTFcdTZhYzZcdTZhYmFcdTZhYjZcdTZhYjdcdTZhYzdc'@;
put 'dTZhYjRcdTZhYWRcdTZiNWVcdTZiYzlcdTZjMGJcdTcwMDdcdTcwMGNcdTcwMGRcdTcwMDFcdTcwMDVcdTcwMTRcdTcwMGVcdTZmZmZcdTcwMDBcdTZmZmJcdTcwMjZcdTZmZmNcdTZmZjdcdTcwMGFcdTcyMDFcdTcxZmZcdTcxZjlcdTcyMDNcdTcxZmRcdTczNzZcdWZmZmQiLnNwbGl0KCIi'@;
put 'KSx2PTA7diE9a1syMzldLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIzOV1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjM5XVt2XV09NjExODQrdixUWzYxMTg0K3ZdPWtbMjM5XVt2XSk7Zm9yKGtbMjQwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHU3NGI4XHU3NGMwXHU3NGI1XHU3NGMxXHU3NGJlXHU3NGI2XHU3NGJiXHU3NGMyXHU3NTE0XHU3NTEzXHU3NjVjXHU3NjY0XHU3NjU5XHU3NjUwXHU3NjUzXHU3NjU3XHU3NjVhXHU3NmE2XHU3NmJkXHU3NmVjXHU3N2MyXHU3N2JhXHU3OGZmXHU3OTBjXHU3OTEzXHU3OTE0XHU3'@;
put 'OTA5XHU3OTEwXHU3OTEyXHU3OTExXHU3OWFkXHU3OWFjXHU3YTVmXHU3YzFjXHU3YzI5XHU3YzE5XHU3YzIwXHU3YzFmXHU3YzJkXHU3YzFkXHU3YzI2XHU3YzI4XHU3YzIyXHU3YzI1XHU3YzMwXHU3ZTVjXHU3ZTUwXHU3ZTU2XHU3ZTYzXHU3ZTU4XHU3ZTYyXHU3ZTVmXHU3ZTUxXHU3ZTYw'@;
put 'XHU3ZTU3XHU3ZTUzXHU3ZmI1XHU3ZmIzXHU3ZmY3XHU3ZmY4XHU4MDc1XHU4MWQxXHU4MWQyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MWQwXHU4MjVmXHU4MjVlXHU4NWI0XHU4NWM2XHU4NWMwXHU4NWMzXHU4NWMyXHU4NWIzXHU4NWI1XHU4NWJkXHU4NWM3'@;
put 'XHU4NWM0XHU4NWJmXHU4NWNiXHU4NWNlXHU4NWM4XHU4NWM1XHU4NWIxXHU4NWI2XHU4NWQyXHU4NjI0XHU4NWI4XHU4NWI3XHU4NWJlXHU4NjY5XHU4N2U3XHU4N2U2XHU4N2UyXHU4N2RiXHU4N2ViXHU4N2VhXHU4N2U1XHU4N2RmXHU4N2YzXHU4N2U0XHU4N2Q0XHU4N2RjXHU4N2QzXHU4'@;
put 'N2VkXHU4N2Q4XHU4N2UzXHU4N2E0XHU4N2Q3XHU4N2Q5XHU4ODAxXHU4N2Y0XHU4N2U4XHU4N2RkXHU4OTUzXHU4OTRiXHU4OTRmXHU4OTRjXHU4OTQ2XHU4OTUwXHU4OTUxXHU4OTQ5XHU4YjJhXHU4YjI3XHU4YjIzXHU4YjMzXHU4YjMwXHU4YjM1XHU4YjQ3XHU4YjJmXHU4YjNjXHU4YjNl'@;
put 'XHU4YjMxXHU4YjI1XHU4YjM3XHU4YjI2XHU4YjM2XHU4YjJlXHU4YjI0XHU4YjNiXHU4YjNkXHU4YjNhXHU4YzQyXHU4Yzc1XHU4Yzk5XHU4Yzk4XHU4Yzk3XHU4Y2ZlXHU4ZDA0XHU4ZDAyXHU4ZDAwXHU4ZTVjXHU4ZTYyXHU4ZTYwXHU4ZTU3XHU4ZTU2XHU4ZTVlXHU4ZTY1XHU4ZTY3XHVm'@;
put 'ZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjQwXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syNDBdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzI0MF1bdl1dPTYxNDQwK3YsVFs2MTQ0MCt2XT1rWzI0MF1bdl0pO2ZvcihrWzI0MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGU1Ylx1OGU1YVx1OGU2MVx1OGU1ZFx1OGU2OVx1OGU1NFx1OGY0Nlx1OGY0N1x1OGY0OFx1OGY0Ylx1OTEyOFx1OTEzYVx1OTEzYlx1OTEzZVx1OTFhOFx1OTFhNVx1OTFhN1x1OTFhZlx1OTFhYVx1OTNiNVx1OTM4Y1x1OTM5Mlx1OTNiN1x1OTM5Ylx1'@;
put 'OTM5ZFx1OTM4OVx1OTNhN1x1OTM4ZVx1OTNhYVx1OTM5ZVx1OTNhNlx1OTM5NVx1OTM4OFx1OTM5OVx1OTM5Zlx1OTM4ZFx1OTNiMVx1OTM5MVx1OTNiMlx1OTNhNFx1OTNhOFx1OTNiNFx1OTNhM1x1OTNhNVx1OTVkMlx1OTVkM1x1OTVkMVx1OTZiM1x1OTZkN1x1OTZkYVx1NWRjMlx1OTZk'@;
put 'Zlx1OTZkOFx1OTZkZFx1OTcyM1x1OTcyMlx1OTcyNVx1OTdhY1x1OTdhZVx1OTdhOFx1OTdhYlx1OTdhNFx1OTdhYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTdhMlx1OTdhNVx1OTdkN1x1OTdkOVx1OTdkNlx1OTdkOFx1OTdmYVx1OTg1MFx1OTg1MVx1OTg1'@;
put 'Mlx1OThiOFx1OTk0MVx1OTkzY1x1OTkzYVx1OWEwZlx1OWEwYlx1OWEwOVx1OWEwZFx1OWEwNFx1OWExMVx1OWEwYVx1OWEwNVx1OWEwN1x1OWEwNlx1OWFjMFx1OWFkY1x1OWIwOFx1OWIwNFx1OWIwNVx1OWIyOVx1OWIzNVx1OWI0YVx1OWI0Y1x1OWI0Ylx1OWJjN1x1OWJjNlx1OWJjM1x1'@;
put 'OWJiZlx1OWJjMVx1OWJiNVx1OWJiOFx1OWJkM1x1OWJiNlx1OWJjNFx1OWJiOVx1OWJiZFx1OWQ1Y1x1OWQ1M1x1OWQ0Zlx1OWQ0YVx1OWQ1Ylx1OWQ0Ylx1OWQ1OVx1OWQ1Nlx1OWQ0Y1x1OWQ1N1x1OWQ1Mlx1OWQ1NFx1OWQ1Zlx1OWQ1OFx1OWQ1YVx1OWU4ZVx1OWU4Y1x1OWVkZlx1OWYw'@;
put 'MVx1OWYwMFx1OWYxNlx1OWYyNVx1OWYyYlx1OWYyYVx1OWYyOVx1OWYyOFx1OWY0Y1x1OWY1NVx1NTEzNFx1NTEzNVx1NTI5Nlx1NTJmN1x1NTNiNFx1NTZhYlx1NTZhZFx1NTZhNlx1NTZhN1x1NTZhYVx1NTZhY1x1NThkYVx1NThkZFx1NThkYlx1NTkxMlx1NWIzZFx1NWIzZVx1NWIzZlx1'@;
put 'NWRjM1x1NWU3MFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzI0MV0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjQxXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syNDFdW3ZdXT02MTY5Nit2LFRbNjE2OTYrdl09a1syNDFdW3ZdKTtmb3Ioa1syNDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVmYmZcdTYxZmJcdTY1MDdcdTY1MTBcdTY1MGRcdTY1MDlcdTY1MGNcdTY1MGVcdTY1ODRcdTY1ZGVcdTY1ZGRcdTY2ZGVcdTZhZTdcdTZhZTBcdTZhY2NcdTZhZDFcdTZhZDlcdTZhY2JcdTZhZGZcdTZhZGNcdTZhZDBcdTZhZWJc'@;
put 'dTZhY2ZcdTZhY2RcdTZhZGVcdTZiNjBcdTZiYjBcdTZjMGNcdTcwMTlcdTcwMjdcdTcwMjBcdTcwMTZcdTcwMmJcdTcwMjFcdTcwMjJcdTcwMjNcdTcwMjlcdTcwMTdcdTcwMjRcdTcwMWNcdTcwMmFcdTcyMGNcdTcyMGFcdTcyMDdcdTcyMDJcdTcyMDVcdTcyYTVcdTcyYTZcdTcyYTRcdTcy'@;
put 'YTNcdTcyYTFcdTc0Y2JcdTc0YzVcdTc0YjdcdTc0YzNcdTc1MTZcdTc2NjBcdTc3YzlcdTc3Y2FcdTc3YzRcdTc3ZjFcdTc5MWRcdTc5MWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5MjFcdTc5MWNcdTc5MTdcdTc5MWVcdTc5YjBcdTdhNjdcdTdhNjhcdTdj'@;
put 'MzNcdTdjM2NcdTdjMzlcdTdjMmNcdTdjM2JcdTdjZWNcdTdjZWFcdTdlNzZcdTdlNzVcdTdlNzhcdTdlNzBcdTdlNzdcdTdlNmZcdTdlN2FcdTdlNzJcdTdlNzRcdTdlNjhcdTdmNGJcdTdmNGFcdTdmODNcdTdmODZcdTdmYjdcdTdmZmRcdTdmZmVcdTgwNzhcdTgxZDdcdTgxZDVcdTgyNjRc'@;
put 'dTgyNjFcdTgyNjNcdTg1ZWJcdTg1ZjFcdTg1ZWRcdTg1ZDlcdTg1ZTFcdTg1ZThcdTg1ZGFcdTg1ZDdcdTg1ZWNcdTg1ZjJcdTg1ZjhcdTg1ZDhcdTg1ZGZcdTg1ZTNcdTg1ZGNcdTg1ZDFcdTg1ZjBcdTg1ZTZcdTg1ZWZcdTg1ZGVcdTg1ZTJcdTg4MDBcdTg3ZmFcdTg4MDNcdTg3ZjZcdTg3'@;
put 'ZjdcdTg4MDlcdTg4MGNcdTg4MGJcdTg4MDZcdTg3ZmNcdTg4MDhcdTg3ZmZcdTg4MGFcdTg4MDJcdTg5NjJcdTg5NWFcdTg5NWJcdTg5NTdcdTg5NjFcdTg5NWNcdTg5NThcdTg5NWRcdTg5NTlcdTg5ODhcdTg5YjdcdTg5YjZcdTg5ZjZcdThiNTBcdThiNDhcdThiNGFcdThiNDBcdThiNTNc'@;
put 'dThiNTZcdThiNTRcdThiNGJcdThiNTVcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syNDJdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzI0Ml1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjQyXVt2XV09NjE5NTIrdixUWzYxOTUyK3ZdPWtbMjQyXVt2XSk7Zm9yKGtbMjQzXT0iXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YjUxXHU4YjQyXHU4YjUyXHU4YjU3XHU4YzQzXHU4Yzc3XHU4Yzc2XHU4YzlhXHU4ZDA2XHU4ZDA3XHU4ZDA5XHU4ZGFjXHU4ZGFhXHU4ZGFkXHU4ZGFiXHU4ZTZkXHU4ZTc4XHU4ZTczXHU4ZTZhXHU4ZTZm'@;
put 'XHU4ZTdiXHU4ZWMyXHU4ZjUyXHU4ZjUxXHU4ZjRmXHU4ZjUwXHU4ZjUzXHU4ZmI0XHU5MTQwXHU5MTNmXHU5MWIwXHU5MWFkXHU5M2RlXHU5M2M3XHU5M2NmXHU5M2MyXHU5M2RhXHU5M2QwXHU5M2Y5XHU5M2VjXHU5M2NjXHU5M2Q5XHU5M2E5XHU5M2U2XHU5M2NhXHU5M2Q0XHU5M2VlXHU5'@;
put 'M2UzXHU5M2Q1XHU5M2M0XHU5M2NlXHU5M2MwXHU5M2QyXHU5M2U3XHU5NTdkXHU5NWRhXHU5NWRiXHU5NmUxXHU5NzI5XHU5NzJiXHU5NzJjXHU5NzI4XHU5NzI2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5N2IzXHU5N2I3XHU5N2I2XHU5N2RkXHU5N2RlXHU5'@;
put 'N2RmXHU5ODVjXHU5ODU5XHU5ODVkXHU5ODU3XHU5OGJmXHU5OGJkXHU5OGJiXHU5OGJlXHU5OTQ4XHU5OTQ3XHU5OTQzXHU5OWE2XHU5OWE3XHU5YTFhXHU5YTE1XHU5YTI1XHU5YTFkXHU5YTI0XHU5YTFiXHU5YTIyXHU5YTIwXHU5YTI3XHU5YTIzXHU5YTFlXHU5YTFjXHU5YTE0XHU5YWMy'@;
put 'XHU5YjBiXHU5YjBhXHU5YjBlXHU5YjBjXHU5YjM3XHU5YmVhXHU5YmViXHU5YmUwXHU5YmRlXHU5YmU0XHU5YmU2XHU5YmUyXHU5YmYwXHU5YmQ0XHU5YmQ3XHU5YmVjXHU5YmRjXHU5YmQ5XHU5YmU1XHU5YmQ1XHU5YmUxXHU5YmRhXHU5ZDc3XHU5ZDgxXHU5ZDhhXHU5ZDg0XHU5ZDg4XHU5'@;
put 'ZDcxXHU5ZDgwXHU5ZDc4XHU5ZDg2XHU5ZDhiXHU5ZDhjXHU5ZDdkXHU5ZDZiXHU5ZDc0XHU5ZDc1XHU5ZDcwXHU5ZDY5XHU5ZDg1XHU5ZDczXHU5ZDdiXHU5ZDgyXHU5ZDZmXHU5ZDc5XHU5ZDdmXHU5ZDg3XHU5ZDY4XHU5ZTk0XHU5ZTkxXHU5ZWMwXHU5ZWZjXHU5ZjJkXHU5ZjQwXHU5ZjQx'@;
put 'XHU5ZjRkXHU5ZjU2XHU5ZjU3XHU5ZjU4XHU1MzM3XHU1NmIyXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjQzXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syNDNdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzI0M11bdl1dPTYyMjA4K3YsVFs2MjIwOCt2XT1rWzI0M11bdl0pO2ZvcihrWzI0'@;
put 'NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTZiNVx1NTZiM1x1NThlM1x1NWI0NVx1NWRjNlx1NWRjN1x1NWVlZVx1NWVlZlx1NWZjMFx1NWZjMVx1NjFmOVx1NjUxN1x1NjUxNlx1NjUxNVx1NjUxM1x1NjVkZlx1NjZlOFx1NjZl'@;
put 'M1x1NjZlNFx1NmFmM1x1NmFmMFx1NmFlYVx1NmFlOFx1NmFmOVx1NmFmMVx1NmFlZVx1NmFlZlx1NzAzY1x1NzAzNVx1NzAyZlx1NzAzN1x1NzAzNFx1NzAzMVx1NzA0Mlx1NzAzOFx1NzAzZlx1NzAzYVx1NzAzOVx1NzA0MFx1NzAzYlx1NzAzM1x1NzA0MVx1NzIxM1x1NzIxNFx1NzJhOFx1'@;
put 'NzM3ZFx1NzM3Y1x1NzRiYVx1NzZhYlx1NzZhYVx1NzZiZVx1NzZlZFx1NzdjY1x1NzdjZVx1NzdjZlx1NzdjZFx1NzdmMlx1NzkyNVx1NzkyM1x1NzkyN1x1NzkyOFx1NzkyNFx1NzkyOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzliMlx1N2E2ZVx1N2E2Y1x1'@;
put 'N2E2ZFx1N2FmN1x1N2M0OVx1N2M0OFx1N2M0YVx1N2M0N1x1N2M0NVx1N2NlZVx1N2U3Ylx1N2U3ZVx1N2U4MVx1N2U4MFx1N2ZiYVx1N2ZmZlx1ODA3OVx1ODFkYlx1ODFkOVx1ODIwYlx1ODI2OFx1ODI2OVx1ODYyMlx1ODVmZlx1ODYwMVx1ODVmZVx1ODYxYlx1ODYwMFx1ODVmNlx1ODYw'@;
put 'NFx1ODYwOVx1ODYwNVx1ODYwY1x1ODVmZFx1ODgxOVx1ODgxMFx1ODgxMVx1ODgxN1x1ODgxM1x1ODgxNlx1ODk2M1x1ODk2Nlx1ODliOVx1ODlmN1x1OGI2MFx1OGI2YVx1OGI1ZFx1OGI2OFx1OGI2M1x1OGI2NVx1OGI2N1x1OGI2ZFx1OGRhZVx1OGU4Nlx1OGU4OFx1OGU4NFx1OGY1OVx1'@;
put 'OGY1Nlx1OGY1N1x1OGY1NVx1OGY1OFx1OGY1YVx1OTA4ZFx1OTE0M1x1OTE0MVx1OTFiN1x1OTFiNVx1OTFiMlx1OTFiM1x1OTQwYlx1OTQxM1x1OTNmYlx1OTQyMFx1OTQwZlx1OTQxNFx1OTNmZVx1OTQxNVx1OTQxMFx1OTQyOFx1OTQxOVx1OTQwZFx1OTNmNVx1OTQwMFx1OTNmN1x1OTQw'@;
put 'N1x1OTQwZVx1OTQxNlx1OTQxMlx1OTNmYVx1OTQwOVx1OTNmOFx1OTQwYVx1OTNmZlx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzI0NF0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjQ0XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syNDRdW3ZdXT02MjQ2NCt2LFRbNjI0NjQrdl09a1syNDRd'@;
put 'W3ZdKTtmb3Ioa1syNDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzZmNcdTk0MGNcdTkzZjZcdTk0MTFcdTk0MDZcdTk1ZGVcdTk1ZTBcdTk1ZGZcdTk3MmVcdTk3MmZcdTk3YjlcdTk3YmJcdTk3ZmRcdTk3ZmVcdTk4NjBcdTk4'@;
put 'NjJcdTk4NjNcdTk4NWZcdTk4YzFcdTk4YzJcdTk5NTBcdTk5NGVcdTk5NTlcdTk5NGNcdTk5NGJcdTk5NTNcdTlhMzJcdTlhMzRcdTlhMzFcdTlhMmNcdTlhMmFcdTlhMzZcdTlhMjlcdTlhMmVcdTlhMzhcdTlhMmRcdTlhYzdcdTlhY2FcdTlhYzZcdTliMTBcdTliMTJcdTliMTFcdTljMGJc'@;
put 'dTljMDhcdTliZjdcdTljMDVcdTljMTJcdTliZjhcdTljNDBcdTljMDdcdTljMGVcdTljMDZcdTljMTdcdTljMTRcdTljMDlcdTlkOWZcdTlkOTlcdTlkYTRcdTlkOWRcdTlkOTJcdTlkOThcdTlkOTBcdTlkOWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlkYTBc'@;
put 'dTlkOTRcdTlkOWNcdTlkYWFcdTlkOTdcdTlkYTFcdTlkOWFcdTlkYTJcdTlkYThcdTlkOWVcdTlkYTNcdTlkYmZcdTlkYTlcdTlkOTZcdTlkYTZcdTlkYTdcdTllOTlcdTllOWJcdTllOWFcdTllZTVcdTllZTRcdTllZTdcdTllZTZcdTlmMzBcdTlmMmVcdTlmNWJcdTlmNjBcdTlmNWVcdTlm'@;
put 'NWRcdTlmNTlcdTlmOTFcdTUxM2FcdTUxMzlcdTUyOThcdTUyOTdcdTU2YzNcdTU2YmRcdTU2YmVcdTViNDhcdTViNDdcdTVkY2JcdTVkY2ZcdTVlZjFcdTYxZmRcdTY1MWJcdTZiMDJcdTZhZmNcdTZiMDNcdTZhZjhcdTZiMDBcdTcwNDNcdTcwNDRcdTcwNGFcdTcwNDhcdTcwNDlcdTcwNDVc'@;
put 'dTcwNDZcdTcyMWRcdTcyMWFcdTcyMTlcdTczN2VcdTc1MTdcdTc2NmFcdTc3ZDBcdTc5MmRcdTc5MzFcdTc5MmZcdTdjNTRcdTdjNTNcdTdjZjJcdTdlOGFcdTdlODdcdTdlODhcdTdlOGJcdTdlODZcdTdlOGRcdTdmNGRcdTdmYmJcdTgwMzBcdTgxZGRcdTg2MThcdTg2MmFcdTg2MjZcdTg2'@;
put 'MWZcdTg2MjNcdTg2MWNcdTg2MTlcdTg2MjdcdTg2MmVcdTg2MjFcdTg2MjBcdTg2MjlcdTg2MWVcdTg2MjVcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syNDVdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzI0NV1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjQ1XVt2XV09NjI3MjArdixUWzYy'@;
put 'NzIwK3ZdPWtbMjQ1XVt2XSk7Zm9yKGtbMjQ2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ODI5XHU4ODFkXHU4ODFiXHU4ODIwXHU4ODI0XHU4ODFjXHU4ODJiXHU4ODRhXHU4OTZkXHU4OTY5XHU4OTZlXHU4OTZiXHU4OWZhXHU4'@;
put 'Yjc5XHU4Yjc4XHU4YjQ1XHU4YjdhXHU4YjdiXHU4ZDEwXHU4ZDE0XHU4ZGFmXHU4ZThlXHU4ZThjXHU4ZjVlXHU4ZjViXHU4ZjVkXHU5MTQ2XHU5MTQ0XHU5MTQ1XHU5MWI5XHU5NDNmXHU5NDNiXHU5NDM2XHU5NDI5XHU5NDNkXHU5NDNjXHU5NDMwXHU5NDM5XHU5NDJhXHU5NDM3XHU5NDJj'@;
put 'XHU5NDQwXHU5NDMxXHU5NWU1XHU5NWU0XHU5NWUzXHU5NzM1XHU5NzNhXHU5N2JmXHU5N2UxXHU5ODY0XHU5OGM5XHU5OGM2XHU5OGMwXHU5OTU4XHU5OTU2XHU5YTM5XHU5YTNkXHU5YTQ2XHU5YTQ0XHU5YTQyXHU5YTQxXHU5YTNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHU5YTNmXHU5YWNkXHU5YjE1XHU5YjE3XHU5YjE4XHU5YjE2XHU5YjNhXHU5YjUyXHU5YzJiXHU5YzFkXHU5YzFjXHU5YzJjXHU5YzIzXHU5YzI4XHU5YzI5XHU5YzI0XHU5YzIxXHU5ZGI3XHU5ZGI2XHU5ZGJjXHU5ZGMxXHU5ZGM3XHU5ZGNhXHU5ZGNmXHU5ZGJlXHU5ZGM1XHU5'@;
put 'ZGMzXHU5ZGJiXHU5ZGI1XHU5ZGNlXHU5ZGI5XHU5ZGJhXHU5ZGFjXHU5ZGM4XHU5ZGIxXHU5ZGFkXHU5ZGNjXHU5ZGIzXHU5ZGNkXHU5ZGIyXHU5ZTdhXHU5ZTljXHU5ZWViXHU5ZWVlXHU5ZWVkXHU5ZjFiXHU5ZjE4XHU5ZjFhXHU5ZjMxXHU5ZjRlXHU5ZjY1XHU5ZjY0XHU5ZjkyXHU0ZWI5'@;
put 'XHU1NmM2XHU1NmM1XHU1NmNiXHU1OTcxXHU1YjRiXHU1YjRjXHU1ZGQ1XHU1ZGQxXHU1ZWYyXHU2NTIxXHU2NTIwXHU2NTI2XHU2NTIyXHU2YjBiXHU2YjA4XHU2YjA5XHU2YzBkXHU3MDU1XHU3MDU2XHU3MDU3XHU3MDUyXHU3MjFlXHU3MjFmXHU3MmE5XHU3MzdmXHU3NGQ4XHU3NGQ1XHU3'@;
put 'NGQ5XHU3NGQ3XHU3NjZkXHU3NmFkXHU3OTM1XHU3OWI0XHU3YTcwXHU3YTcxXHU3YzU3XHU3YzVjXHU3YzU5XHU3YzViXHU3YzVhXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjQ2XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syNDZdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzI0Nl1bdl1d'@;
put 'PTYyOTc2K3YsVFs2Mjk3Nit2XT1rWzI0Nl1bdl0pO2ZvcihrWzI0N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2NmNFx1N2NmMVx1N2U5MVx1N2Y0Zlx1N2Y4N1x1ODFkZVx1ODI2Ylx1ODYzNFx1ODYzNVx1ODYzM1x1ODYyY1x1'@;
put 'ODYzMlx1ODYzNlx1ODgyY1x1ODgyOFx1ODgyNlx1ODgyYVx1ODgyNVx1ODk3MVx1ODliZlx1ODliZVx1ODlmYlx1OGI3ZVx1OGI4NFx1OGI4Mlx1OGI4Nlx1OGI4NVx1OGI3Zlx1OGQxNVx1OGU5NVx1OGU5NFx1OGU5YVx1OGU5Mlx1OGU5MFx1OGU5Nlx1OGU5N1x1OGY2MFx1OGY2Mlx1OTE0'@;
put 'N1x1OTQ0Y1x1OTQ1MFx1OTQ0YVx1OTQ0Ylx1OTQ0Zlx1OTQ0N1x1OTQ0NVx1OTQ0OFx1OTQ0OVx1OTQ0Nlx1OTczZlx1OTdlM1x1OTg2YVx1OTg2OVx1OThjYlx1OTk1NFx1OTk1Ylx1OWE0ZVx1OWE1M1x1OWE1NFx1OWE0Y1x1OWE0Zlx1OWE0OFx1OWE0YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWE0OVx1OWE1Mlx1OWE1MFx1OWFkMFx1OWIxOVx1OWIyYlx1OWIzYlx1OWI1Nlx1OWI1NVx1OWM0Nlx1OWM0OFx1OWMzZlx1OWM0NFx1OWMzOVx1OWMzM1x1OWM0MVx1OWMzY1x1OWMzN1x1OWMzNFx1OWMzMlx1OWMzZFx1OWMzNlx1OWRkYlx1OWRkMlx1'@;
put 'OWRkZVx1OWRkYVx1OWRjYlx1OWRkMFx1OWRkY1x1OWRkMVx1OWRkZlx1OWRlOVx1OWRkOVx1OWRkOFx1OWRkNlx1OWRmNVx1OWRkNVx1OWRkZFx1OWViNlx1OWVmMFx1OWYzNVx1OWYzM1x1OWYzMlx1OWY0Mlx1OWY2Ylx1OWY5NVx1OWZhMlx1NTEzZFx1NTI5OVx1NThlOFx1NThlN1x1NTk3'@;
put 'Mlx1NWI0ZFx1NWRkOFx1ODgyZlx1NWY0Zlx1NjIwMVx1NjIwM1x1NjIwNFx1NjUyOVx1NjUyNVx1NjU5Nlx1NjZlYlx1NmIxMVx1NmIxMlx1NmIwZlx1NmJjYVx1NzA1Ylx1NzA1YVx1NzIyMlx1NzM4Mlx1NzM4MVx1NzM4M1x1NzY3MFx1NzdkNFx1N2M2N1x1N2M2Nlx1N2U5NVx1ODI2Y1x1'@;
put 'ODYzYVx1ODY0MFx1ODYzOVx1ODYzY1x1ODYzMVx1ODYzYlx1ODYzZVx1ODgzMFx1ODgzMlx1ODgyZVx1ODgzM1x1ODk3Nlx1ODk3NFx1ODk3M1x1ODlmZVx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzI0N10ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjQ3XVt2XS5jaGFyQ29kZUF0KDApJiYo'@;
put 'c2Vba1syNDddW3ZdXT02MzIzMit2LFRbNjMyMzIrdl09a1syNDddW3ZdKTtmb3Ioa1syNDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThiOGNcdThiOGVcdThiOGJcdThiODhcdThjNDVcdThkMTlcdThlOThcdThmNjRcdThmNjNc'@;
put 'dTkxYmNcdTk0NjJcdTk0NTVcdTk0NWRcdTk0NTdcdTk0NWVcdTk3YzRcdTk3YzVcdTk4MDBcdTlhNTZcdTlhNTlcdTliMWVcdTliMWZcdTliMjBcdTljNTJcdTljNThcdTljNTBcdTljNGFcdTljNGRcdTljNGJcdTljNTVcdTljNTlcdTljNGNcdTljNGVcdTlkZmJcdTlkZjdcdTlkZWZcdTlk'@;
put 'ZTNcdTlkZWJcdTlkZjhcdTlkZTRcdTlkZjZcdTlkZTFcdTlkZWVcdTlkZTZcdTlkZjJcdTlkZjBcdTlkZTJcdTlkZWNcdTlkZjRcdTlkZjNcdTlkZThcdTlkZWRcdTllYzJcdTllZDBcdTllZjJcdTllZjNcdTlmMDZcdTlmMWNcdTlmMzhcdTlmMzdcdTlmMzZcdTlmNDNcdTlmNGZcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlmNzFcdTlmNzBcdTlmNmVcdTlmNmZcdTU2ZDNcdTU2Y2RcdTViNGVcdTVjNmRcdTY1MmRcdTY2ZWRcdTY2ZWVcdTZiMTNcdTcwNWZcdTcwNjFcdTcwNWRcdTcwNjBcdTcyMjNcdTc0ZGJcdTc0ZTVcdTc3ZDVcdTc5MzhcdTc5Yjdc'@;
put 'dTc5YjZcdTdjNmFcdTdlOTdcdTdmODlcdTgyNmRcdTg2NDNcdTg4MzhcdTg4MzdcdTg4MzVcdTg4NGJcdThiOTRcdThiOTVcdThlOWVcdThlOWZcdThlYTBcdThlOWRcdTkxYmVcdTkxYmRcdTkxYzJcdTk0NmJcdTk0NjhcdTk0NjlcdTk2ZTVcdTk3NDZcdTk3NDNcdTk3NDdcdTk3YzdcdTk3'@;
put 'ZTVcdTlhNWVcdTlhZDVcdTliNTlcdTljNjNcdTljNjdcdTljNjZcdTljNjJcdTljNWVcdTljNjBcdTllMDJcdTlkZmVcdTllMDdcdTllMDNcdTllMDZcdTllMDVcdTllMDBcdTllMDFcdTllMDlcdTlkZmZcdTlkZmRcdTllMDRcdTllYTBcdTlmMWVcdTlmNDZcdTlmNzRcdTlmNzVcdTlmNzZc'@;
put 'dTU2ZDRcdTY1MmVcdTY1YjhcdTZiMThcdTZiMTlcdTZiMTdcdTZiMWFcdTcwNjJcdTcyMjZcdTcyYWFcdTc3ZDhcdTc3ZDlcdTc5MzlcdTdjNjlcdTdjNmJcdTdjZjZcdTdlOWFcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syNDhdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzI0OF1bdl0uY2hh'@;
put 'ckNvZGVBdCgwKSYmKHNlW2tbMjQ4XVt2XV09NjM0ODgrdixUWzYzNDg4K3ZdPWtbMjQ4XVt2XSk7Zm9yKGtbMjQ5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZTk4XHU3ZTliXHU3ZTk5XHU4MWUwXHU4MWUxXHU4NjQ2XHU4NjQ3'@;
put 'XHU4NjQ4XHU4OTc5XHU4OTdhXHU4OTdjXHU4OTdiXHU4OWZmXHU4Yjk4XHU4Yjk5XHU4ZWE1XHU4ZWE0XHU4ZWEzXHU5NDZlXHU5NDZkXHU5NDZmXHU5NDcxXHU5NDczXHU5NzQ5XHU5ODcyXHU5OTVmXHU5YzY4XHU5YzZlXHU5YzZkXHU5ZTBiXHU5ZTBkXHU5ZTEwXHU5ZTBmXHU5ZTEyXHU5'@;
put 'ZTExXHU5ZWExXHU5ZWY1XHU5ZjA5XHU5ZjQ3XHU5Zjc4XHU5ZjdiXHU5ZjdhXHU5Zjc5XHU1NzFlXHU3MDY2XHU3YzZmXHU4ODNjXHU4ZGIyXHU4ZWE2XHU5MWMzXHU5NDc0XHU5NDc4XHU5NDc2XHU5NDc1XHU5YTYwXHU5Yzc0XHU5YzczXHU5YzcxXHU5Yzc1XHU5ZTE0XHU5ZTEzXHU5ZWY2'@;
put 'XHU5ZjBhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZmE0XHU3MDY4XHU3MDY1XHU3Y2Y3XHU4NjZhXHU4ODNlXHU4ODNkXHU4ODNmXHU4YjllXHU4YzljXHU4ZWE5XHU4ZWM5XHU5NzRiXHU5ODczXHU5ODc0XHU5OGNjXHU5OTYxXHU5OWFiXHU5YTY0XHU5YTY2'@;
put 'XHU5YTY3XHU5YjI0XHU5ZTE1XHU5ZTE3XHU5ZjQ4XHU2MjA3XHU2YjFlXHU3MjI3XHU4NjRjXHU4ZWE4XHU5NDgyXHU5NDgwXHU5NDgxXHU5YTY5XHU5YTY4XHU5YjJlXHU5ZTE5XHU3MjI5XHU4NjRiXHU4YjlmXHU5NDgzXHU5Yzc5XHU5ZWI3XHU3Njc1XHU5YTZiXHU5YzdhXHU5ZTFkXHU3'@;
put 'MDY5XHU3MDZhXHU5ZWE0XHU5ZjdlXHU5ZjQ5XHU5Zjk4XHU3ODgxXHU5MmI5XHU4OGNmXHU1OGJiXHU2MDUyXHU3Y2E3XHU1YWZhXHUyNTU0XHUyNTY2XHUyNTU3XHUyNTYwXHUyNTZjXHUyNTYzXHUyNTVhXHUyNTY5XHUyNTVkXHUyNTUyXHUyNTY0XHUyNTU1XHUyNTVlXHUyNTZhXHUyNTYx'@;
put 'XHUyNTU4XHUyNTY3XHUyNTViXHUyNTUzXHUyNTY1XHUyNTU2XHUyNTVmXHUyNTZiXHUyNTYyXHUyNTU5XHUyNTY4XHUyNTVjXHUyNTUxXHUyNTUwXHUyNTZkXHUyNTZlXHUyNTcwXHUyNTZmXHUyNTkzXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjQ5XS5sZW5ndGg7Kyt2KTY1NTMzIT09'@;
put 'a1syNDldW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzI0OV1bdl1dPTYzNzQ0K3YsVFs2Mzc0NCt2XT1rWzI0OV1bdl0pO3JldHVybntlbmM6c2UsZGVjOlR9fSgpLHplWzEyNTBdPWZ1bmN0aW9uKCl7Zm9yKHZhciBUPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxm'@;
put 'XHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4'@;
put 'eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1MjAxYVx1ZmZmZFx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1ZmZmZFx1MjAzMFx1MDE2MFx1MjAzOVx1MDE1YVx1MDE2NFx1MDE3ZFx1MDE3OVx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1MjEy'@;
put 'Mlx1MDE2MVx1MjAzYVx1MDE1Ylx1MDE2NVx1MDE3ZVx1MDE3YVx4YTBcdTAyYzdcdTAyZDhcdTAxNDFceGE0XHUwMTA0XHhhNlx4YTdceGE4XHhhOVx1MDE1ZVx4YWJceGFjXHhhZFx4YWVcdTAxN2JceGIwXHhiMVx1MDJkYlx1MDE0Mlx4YjRceGI1XHhiNlx4YjdceGI4XHUwMTA1XHUwMTVm'@;
put 'XHhiYlx1MDEzZFx1MDJkZFx1MDEzZVx1MDE3Y1x1MDE1NFx4YzFceGMyXHUwMTAyXHhjNFx1MDEzOVx1MDEwNlx4YzdcdTAxMGNceGM5XHUwMTE4XHhjYlx1MDExYVx4Y2RceGNlXHUwMTBlXHUwMTEwXHUwMTQzXHUwMTQ3XHhkM1x4ZDRcdTAxNTBceGQ2XHhkN1x1MDE1OFx1MDE2ZVx4ZGFc'@;
put 'dTAxNzBceGRjXHhkZFx1MDE2Mlx4ZGZcdTAxNTVceGUxXHhlMlx1MDEwM1x4ZTRcdTAxM2FcdTAxMDdceGU3XHUwMTBkXHhlOVx1MDExOVx4ZWJcdTAxMWJceGVkXHhlZVx1MDEwZlx1MDExMVx1MDE0NFx1MDE0OFx4ZjNceGY0XHUwMTUxXHhmNlx4ZjdcdTAxNTlcdTAxNmZceGZhXHUwMTcx'@;
put 'XHhmY1x4ZmRcdTAxNjNcdTAyZDkiLHNlPVtdLGs9e30sdj0wOzI1NiE9djsrK3YpNjU1MzMhPT1ULmNoYXJDb2RlQXQodikmJihrW1QuY2hhckF0KHYpXT12KSxzZVt2XT1ULmNoYXJBdCh2KTtyZXR1cm57ZW5jOmssZGVjOnNlfX0oKSx6ZVsxMjUxXT1mdW5jdGlvbigpe2Zvcih2YXIgVD0i'@;
put 'XDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BR'@;
put 'UlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTA0MDJcdTA0MDNcdTIwMWFcdTA0NTNcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTIwYWNcdTIwMzBcdTA0MDlcdTIwMzlcdTA0MGFcdTA0MGNcdTA0MGJcdTA0MGZcdTA0NTJcdTIwMThcdTIwMTlc'@;
put 'dTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdTA0NTlcdTIwM2FcdTA0NWFcdTA0NWNcdTA0NWJcdTA0NWZceGEwXHUwNDBlXHUwNDVlXHUwNDA4XHhhNFx1MDQ5MFx4YTZceGE3XHUwNDAxXHhhOVx1MDQwNFx4YWJceGFjXHhhZFx4YWVcdTA0MDdceGIwXHhiMVx1'@;
put 'MDQwNlx1MDQ1Nlx1MDQ5MVx4YjVceGI2XHhiN1x1MDQ1MVx1MjExNlx1MDQ1NFx4YmJcdTA0NThcdTA0MDVcdTA0NTVcdTA0NTdcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVc'@;
put 'dTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0'@;
put 'M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGYiLHNlPVtdLGs9e30sdj0wOzI1NiE9djsrK3YpNjU1MzMhPT1U'@;
put 'LmNoYXJDb2RlQXQodikmJihrW1QuY2hhckF0KHYpXT12KSxzZVt2XT1ULmNoYXJBdCh2KTtyZXR1cm57ZW5jOmssZGVjOnNlfX0oKSx6ZVsxMjUyXT1mdW5jdGlvbigpe2Zvcih2YXIgVD0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgx'@;
put 'MVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNc'@;
put 'dWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNTJcdWZmZmRcdTAxN2RcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdTAxNjFcdTIwM2FcdTAx'@;
put 'NTNcdWZmZmRcdTAxN2VcdTAxNzhceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNc'@;
put 'eGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZceGQwXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx4ZGVceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4'@;
put 'ZWRceGVlXHhlZlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYiLHNlPVtdLGs9e30sdj0wOzI1NiE9djsrK3YpNjU1MzMhPT1ULmNoYXJDb2RlQXQodikmJihrW1QuY2hhckF0KHYpXT12KSxzZVt2XT1ULmNoYXJBdCh2KTty'@;
put 'ZXR1cm57ZW5jOmssZGVjOnNlfX0oKSx6ZVsxMjUzXT1mdW5jdGlvbigpe2Zvcih2YXIgVD0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVc'@;
put 'eDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdWZmZmRcdTIwMzBc'@;
put 'dWZmZmRcdTIwMzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdWZmZmRcdTIwM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRceGEwXHUwMzg1XHUwMzg2XHhhM1x4YTRceGE1XHhhNlx4'@;
put 'YTdceGE4XHhhOVx1ZmZmZFx4YWJceGFjXHhhZFx4YWVcdTIwMTVceGIwXHhiMVx4YjJceGIzXHUwMzg0XHhiNVx4YjZceGI3XHUwMzg4XHUwMzg5XHUwMzhhXHhiYlx1MDM4Y1x4YmRcdTAzOGVcdTAzOGZcdTAzOTBcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdc'@;
put 'dTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdWZmZmRcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdTAzYWFcdTAzYWJcdTAzYWNcdTAzYWRcdTAzYWVcdTAzYWZcdTAzYjBcdTAzYjFcdTAzYjJcdTAz'@;
put 'YjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzJcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdTAzY2FcdTAzY2JcdTAzY2NcdTAzY2RcdTAzY2Vc'@;
put 'dWZmZmQiLHNlPVtdLGs9e30sdj0wOzI1NiE9djsrK3YpNjU1MzMhPT1ULmNoYXJDb2RlQXQodikmJihrW1QuY2hhckF0KHYpXT12KSxzZVt2XT1ULmNoYXJBdCh2KTtyZXR1cm57ZW5jOmssZGVjOnNlfX0oKSx6ZVsxMjU0XT1mdW5jdGlvbigpe2Zvcih2YXIgVD0iXDBceDAxXHgwMlx4MDNc'@;
put 'eDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5f'@;
put 'YGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIw'@;
put 'MjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNTNcdWZmZmRcdWZmZmRcdTAxNzhceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhi'@;
put 'OVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZcdTAxMWVceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNcdTAxMzBcdTAxNWVceGRmXHhlMFx4'@;
put 'ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx1MDExZlx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x1MDEzMVx1MDE1Zlx4ZmYiLHNlPVtdLGs9e30sdj0wOzI1NiE9djsrK3YpNjU1MzMhPT1U'@;
put 'LmNoYXJDb2RlQXQodikmJihrW1QuY2hhckF0KHYpXT12KSxzZVt2XT1ULmNoYXJBdCh2KTtyZXR1cm57ZW5jOmssZGVjOnNlfX0oKSx6ZVsxMjU1XT1mdW5jdGlvbigpe2Zvcih2YXIgVD0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgx'@;
put 'MVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNc'@;
put 'dWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdWZmZmRcdTIwMzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdWZmZmRcdTIwM2FcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRceGEwXHhhMVx4YTJceGEzXHUyMGFhXHhhNVx4YTZceGE3XHhhOFx4YTlceGQ3XHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhmN1x4YmJceGJjXHhiZFx4YmVceGJmXHUwNWIwXHUwNWIxXHUw'@;
put 'NWIyXHUwNWIzXHUwNWI0XHUwNWI1XHUwNWI2XHUwNWI3XHUwNWI4XHUwNWI5XHVmZmZkXHUwNWJiXHUwNWJjXHUwNWJkXHUwNWJlXHUwNWJmXHUwNWMwXHUwNWMxXHUwNWMyXHUwNWMzXHUwNWYwXHUwNWYxXHUwNWYyXHUwNWYzXHUwNWY0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHUwNWQwXHUwNWQxXHUwNWQyXHUwNWQzXHUwNWQ0XHUwNWQ1XHUwNWQ2XHUwNWQ3XHUwNWQ4XHUwNWQ5XHUwNWRhXHUwNWRiXHUwNWRjXHUwNWRkXHUwNWRlXHUwNWRmXHUwNWUwXHUwNWUxXHUwNWUyXHUwNWUzXHUwNWU0XHUwNWU1XHUwNWU2XHUwNWU3XHUwNWU4XHUw'@;
put 'NWU5XHUwNWVhXHVmZmZkXHVmZmZkXHUyMDBlXHUyMDBmXHVmZmZkIixzZT1bXSxrPXt9LHY9MDsyNTYhPXY7Kyt2KTY1NTMzIT09VC5jaGFyQ29kZUF0KHYpJiYoa1tULmNoYXJBdCh2KV09diksc2Vbdl09VC5jaGFyQXQodik7cmV0dXJue2VuYzprLGRlYzpzZX19KCksemVbMTI1Nl09ZnVu'@;
put 'Y3Rpb24oKXtmb3IodmFyIFQ9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+'@;
put 'P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHUwNjdlXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHUwNjc5XHUyMDM5XHUwMTUyXHUwNjg2XHUwNjk4XHUwNjg4'@;
put 'XHUwNmFmXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwNmE5XHUyMTIyXHUwNjkxXHUyMDNhXHUwMTUzXHUyMDBjXHUyMDBkXHUwNmJhXHhhMFx1MDYwY1x4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHUwNmJlXHhhYlx4YWNceGFkXHhhZVx4YWZc'@;
put 'eGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHUwNjFiXHhiYlx4YmNceGJkXHhiZVx1MDYxZlx1MDZjMVx1MDYyMVx1MDYyMlx1MDYyM1x1MDYyNFx1MDYyNVx1MDYyNlx1MDYyN1x1MDYyOFx1MDYyOVx1MDYyYVx1MDYyYlx1MDYyY1x1MDYyZFx1MDYyZVx1MDYyZlx1'@;
put 'MDYzMFx1MDYzMVx1MDYzMlx1MDYzM1x1MDYzNFx1MDYzNVx1MDYzNlx4ZDdcdTA2MzdcdTA2MzhcdTA2MzlcdTA2M2FcdTA2NDBcdTA2NDFcdTA2NDJcdTA2NDNceGUwXHUwNjQ0XHhlMlx1MDY0NVx1MDY0Nlx1MDY0N1x1MDY0OFx4ZTdceGU4XHhlOVx4ZWFceGViXHUwNjQ5XHUwNjRhXHhl'@;
put 'ZVx4ZWZcdTA2NGJcdTA2NGNcdTA2NGRcdTA2NGVceGY0XHUwNjRmXHUwNjUwXHhmN1x1MDY1MVx4ZjlcdTA2NTJceGZiXHhmY1x1MjAwZVx1MjAwZlx1MDZkMiIsc2U9W10saz17fSx2PTA7MjU2IT12Oysrdik2NTUzMyE9PVQuY2hhckNvZGVBdCh2KSYmKGtbVC5jaGFyQXQodildPXYpLHNl'@;
put 'W3ZdPVQuY2hhckF0KHYpO3JldHVybntlbmM6ayxkZWM6c2V9fSgpLHplWzEyNTddPWZ1bmN0aW9uKCl7Zm9yKHZhciBUPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFh'@;
put 'XHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1MjAxYVx1ZmZmZFx1MjAxZVx1MjAyNlx1MjAyMFx1'@;
put 'MjAyMVx1ZmZmZFx1MjAzMFx1ZmZmZFx1MjAzOVx1ZmZmZFx4YThcdTAyYzdceGI4XHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHVmZmZkXHUyMDNhXHVmZmZkXHhhZlx1MDJkYlx1ZmZmZFx4YTBcdWZmZmRceGEyXHhhM1x4YTRc'@;
put 'dWZmZmRceGE2XHhhN1x4ZDhceGE5XHUwMTU2XHhhYlx4YWNceGFkXHhhZVx4YzZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4ZjhceGI5XHUwMTU3XHhiYlx4YmNceGJkXHhiZVx4ZTZcdTAxMDRcdTAxMmVcdTAxMDBcdTAxMDZceGM0XHhjNVx1MDExOFx1MDExMlx1MDEwY1x4'@;
put 'YzlcdTAxNzlcdTAxMTZcdTAxMjJcdTAxMzZcdTAxMmFcdTAxM2JcdTAxNjBcdTAxNDNcdTAxNDVceGQzXHUwMTRjXHhkNVx4ZDZceGQ3XHUwMTcyXHUwMTQxXHUwMTVhXHUwMTZhXHhkY1x1MDE3Ylx1MDE3ZFx4ZGZcdTAxMDVcdTAxMmZcdTAxMDFcdTAxMDdceGU0XHhlNVx1MDExOVx1MDEx'@;
put 'M1x1MDEwZFx4ZTlcdTAxN2FcdTAxMTdcdTAxMjNcdTAxMzdcdTAxMmJcdTAxM2NcdTAxNjFcdTAxNDRcdTAxNDZceGYzXHUwMTRkXHhmNVx4ZjZceGY3XHUwMTczXHUwMTQyXHUwMTViXHUwMTZiXHhmY1x1MDE3Y1x1MDE3ZVx1MDJkOSIsc2U9W10saz17fSx2PTA7MjU2IT12Oysrdik2NTUz'@;
put 'MyE9PVQuY2hhckNvZGVBdCh2KSYmKGtbVC5jaGFyQXQodildPXYpLHNlW3ZdPVQuY2hhckF0KHYpO3JldHVybntlbmM6ayxkZWM6c2V9fSgpLHplWzEyNThdPWZ1bmN0aW9uKCl7Zm9yKHZhciBUPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4'@;
put 'MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1'@;
put 'MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1ZmZmZFx1MjAzOVx1MDE1Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1ZmZmZFx1MjAz'@;
put 'YVx1MDE1M1x1ZmZmZFx1ZmZmZFx1MDE3OFx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMy'@;
put 'XHUwMTAyXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JcdTAzMDBceGNkXHhjZVx4Y2ZcdTAxMTBceGQxXHUwMzA5XHhkM1x4ZDRcdTAxYTBceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHUwMWFmXHUwMzAzXHhkZlx4ZTBceGUxXHhlMlx1MDEwM1x4ZTRceGU1XHhlNlx4ZTdc'@;
put 'eGU4XHhlOVx4ZWFceGViXHUwMzAxXHhlZFx4ZWVceGVmXHUwMTExXHhmMVx1MDMyM1x4ZjNceGY0XHUwMWExXHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x1MDFiMFx1MjBhYlx4ZmYiLHNlPVtdLGs9e30sdj0wOzI1NiE9djsrK3YpNjU1MzMhPT1ULmNoYXJDb2RlQXQodikmJihrW1Qu'@;
put 'Y2hhckF0KHYpXT12KSxzZVt2XT1ULmNoYXJBdCh2KTtyZXR1cm57ZW5jOmssZGVjOnNlfX0oKSx6ZVsxZTRdPWZ1bmN0aW9uKCl7Zm9yKHZhciBUPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZc'@;
put 'eDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzRceGM1XHhjN1x4YzlceGQxXHhkNlx4ZGNc'@;
put 'eGUxXHhlMFx4ZTJceGU0XHhlM1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVjXHhlZVx4ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4ZmJceGZjXHUyMDIwXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJceGI0XHhhOFx1MjI2MFx4'@;
put 'YzZceGQ4XHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx4YTVceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwM2MwXHUyMjJiXHhhYVx4YmFcdTIxMjZceGU2XHhmOFx4YmZceGExXHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1'@;
put 'M1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZmXHUwMTc4XHUyMDQ0XHhhNFx1MjAzOVx1MjAzYVx1ZmIwMVx1ZmIwMlx1MjAyMVx4YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHhjYVx4YzFceGNiXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1'@;
put 'ZmZmZFx4ZDJceGRhXHhkYlx4ZDlcdTAxMzFcdTAyYzZcdTAyZGNceGFmXHUwMmQ4XHUwMmQ5XHUwMmRhXHhiOFx1MDJkZFx1MDJkYlx1MDJjNyIsc2U9W10saz17fSx2PTA7MjU2IT12Oysrdik2NTUzMyE9PVQuY2hhckNvZGVBdCh2KSYmKGtbVC5jaGFyQXQodildPXYpLHNlW3ZdPVQuY2hh'@;
put 'ckF0KHYpO3JldHVybntlbmM6ayxkZWM6c2V9fSgpLHplWzEwMDA2XT1mdW5jdGlvbigpe2Zvcih2YXIgVD0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFj'@;
put 'XHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM0XHhiOVx4YjJceGM5XHhiM1x4ZDZceGRjXHUwMzg1XHhlMFx4ZTJceGU0XHUwMzg0'@;
put 'XHhhOFx4ZTdceGU5XHhlOFx4ZWFceGViXHhhM1x1MjEyMlx4ZWVceGVmXHUyMDIyXHhiZFx1MjAzMFx4ZjRceGY2XHhhNlx4YWRceGY5XHhmYlx4ZmNcdTIwMjBcdTAzOTNcdTAzOTRcdTAzOThcdTAzOWJcdTAzOWVcdTAzYTBceGRmXHhhZVx4YTlcdTAzYTNcdTAzYWFceGE3XHUyMjYwXHhi'@;
put 'MFx1MDM4N1x1MDM5MVx4YjFcdTIyNjRcdTIyNjVceGE1XHUwMzkyXHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk5XHUwMzlhXHUwMzljXHUwM2E2XHUwM2FiXHUwM2E4XHUwM2E5XHUwM2FjXHUwMzlkXHhhY1x1MDM5Zlx1MDNhMVx1MjI0OFx1MDNhNFx4YWJceGJiXHUyMDI2XHhhMFx1MDNhNVx1'@;
put 'MDNhN1x1MDM4Nlx1MDM4OFx1MDE1M1x1MjAxM1x1MjAxNVx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTAzODlcdTAzOGFcdTAzOGNcdTAzOGVcdTAzYWRcdTAzYWVcdTAzYWZcdTAzY2NcdTAzOGZcdTAzY2RcdTAzYjFcdTAzYjJcdTAzYzhcdTAzYjRcdTAzYjVcdTAzYzZcdTAzYjNc'@;
put 'dTAzYjdcdTAzYjlcdTAzYmVcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmZcdTAzYzBcdTAzY2VcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYjhcdTAzYzlcdTAzYzJcdTAzYzdcdTAzYzVcdTAzYjZcdTAzY2FcdTAzY2JcdTAzOTBcdTAzYjBcdWZmZmQiLHNlPVtdLGs9e30sdj0wOzI1NiE9'@;
put 'djsrK3YpNjU1MzMhPT1ULmNoYXJDb2RlQXQodikmJihrW1QuY2hhckF0KHYpXT12KSxzZVt2XT1ULmNoYXJBdCh2KTtyZXR1cm57ZW5jOmssZGVjOnNlfX0oKSx6ZVsxMDAwN109ZnVuY3Rpb24oKXtmb3IodmFyIFQ9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZc'@;
put 'clx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5'@;
put 'ent8fX5ceDdmXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5'@;
put 'XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUyMDIwXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZcdTA0MDZceGFlXHhhOVx1MjEyMlx1MDQwMlx1MDQ1Mlx1MjI2MFx1MDQwM1x1MDQ1M1x1MjIxZVx4YjFcdTIyNjRcdTIyNjVcdTA0NTZceGI1XHUyMjAyXHUwNDA4XHUw'@;
put 'NDA0XHUwNDU0XHUwNDA3XHUwNDU3XHUwNDA5XHUwNDU5XHUwNDBhXHUwNDVhXHUwNDU4XHUwNDA1XHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx1MDQwYlx1MDQ1Ylx1MDQwY1x1MDQ1Y1x1MDQ1NVx1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1'@;
put 'MjAxOVx4ZjdcdTIwMWVcdTA0MGVcdTA0NWVcdTA0MGZcdTA0NWZcdTIxMTZcdTA0MDFcdTA0NTFcdTA0NGZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBc'@;
put 'dTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVceGE0IixzZT1bXSxrPXt9LHY9MDsyNTYhPXY7Kyt2KTY1NTMzIT09VC5jaGFyQ29kZUF0KHYpJiYoa1tULmNoYXJBdCh2KV09diksc2Vbdl09'@;
put 'VC5jaGFyQXQodik7cmV0dXJue2VuYzprLGRlYzpzZX19KCksemVbMTAwMDhdPWZ1bmN0aW9uKCl7dmFyIHYsVD1bXSxzZT17fSxrPVtdO2ZvcihrWzBdPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4'@;
put 'MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4ODBcdWY4ZDhcdWY4ZDlcdWY4ZGFcdWY4'@;
put 'ZGJcdWY4ZGNcdWY4ZGRcdWY4ZGVcdWY4ZGZcdWY4ZTBcdWY4ZTFcdWY4ZTJcdWY4ZTNcdWY4ZTRcdWY4ZTVcdWY4ZTZcdWY4ZTdcdWY4ZThcdWY4ZTlcdWY4ZWFcdWY4ZWJcdWY4ZWNcdWY4ZWRcdWY4ZWVcdWY4ZWZcdWY4ZjBcdWY4ZjFcdWY4ZjJcdWY4ZjNcdWY4ZjRcdWY4ZjVcdWY4ZjZc'@;
put 'dWY4ZjdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWY4ZjhcdWY4ZjlcdWY4ZmFcdWY4ZmJcdWY4ZmNcdWY4ZmRcdWY4ZmVcdWY4ZmYiLnNwbGl0KCIiKSx2PTA7diE9a1swXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1swXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1swXVt2XV09MCt2LFRb'@;
put 'MCt2XT1rWzBdW3ZdKTtmb3Ioa1sxNjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdTMwMDBcdTMwMDFcdTMwMDJcdTMwZmJcdTAyYzlcdTAyYzdceGE4XHUzMDAzXHUzMDA1XHUyMDE1XHVmZjVlXHVmZmZkXHUyMDI2XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUzMDE0XHUzMDE1XHUzMDA4XHUzMDA5XHUzMDBhXHUzMDBiXHUzMDBjXHUzMDBkXHUzMDBlXHUzMDBmXHUz'@;
put 'MDE2XHUzMDE3XHUzMDEwXHUzMDExXHhiMVx4ZDdceGY3XHUyMjM2XHUyMjI3XHUyMjI4XHUyMjExXHUyMjBmXHUyMjJhXHUyMjI5XHUyMjA4XHUyMjM3XHUyMjFhXHUyMmE1XHUyMjI1XHUyMjIwXHUyMzEyXHUyMjk5XHUyMjJiXHUyMjJlXHUyMjYxXHUyMjRjXHUyMjQ4XHUyMjNkXHUyMjFk'@;
put 'XHUyMjYwXHUyMjZlXHUyMjZmXHUyMjY0XHUyMjY1XHUyMjFlXHUyMjM1XHUyMjM0XHUyNjQyXHUyNjQwXHhiMFx1MjAzMlx1MjAzM1x1MjEwM1x1ZmYwNFx4YTRcdWZmZTBcdWZmZTFcdTIwMzBceGE3XHUyMTE2XHUyNjA2XHUyNjA1XHUyNWNiXHUyNWNmXHUyNWNlXHUyNWM3XHUyNWM2XHUy'@;
put 'NWExXHUyNWEwXHUyNWIzXHUyNWIyXHUyMDNiXHUyMTkyXHUyMTkwXHUyMTkxXHUyMTkzXHUzMDEzXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTYxXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxNjFdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE2MV1bdl1dPTQxMjE2K3YsVFs0MTIxNit2'@;
put 'XT1rWzE2MV1bdl0pO2ZvcihrWzE2Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjQ4OFx1MjQ4OVx1MjQ4YVx1MjQ4Ylx1MjQ4Y1x1MjQ4ZFx1MjQ4ZVx1MjQ4Zlx1MjQ5MFx1MjQ5MVx1MjQ5Mlx1'@;
put 'MjQ5M1x1MjQ5NFx1MjQ5NVx1MjQ5Nlx1MjQ5N1x1MjQ5OFx1MjQ5OVx1MjQ5YVx1MjQ5Ylx1MjQ3NFx1MjQ3NVx1MjQ3Nlx1MjQ3N1x1MjQ3OFx1MjQ3OVx1MjQ3YVx1MjQ3Ylx1MjQ3Y1x1MjQ3ZFx1MjQ3ZVx1MjQ3Zlx1MjQ4MFx1MjQ4MVx1MjQ4Mlx1MjQ4M1x1MjQ4NFx1MjQ4NVx1MjQ4'@;
put 'Nlx1MjQ4N1x1MjQ2MFx1MjQ2MVx1MjQ2Mlx1MjQ2M1x1MjQ2NFx1MjQ2NVx1MjQ2Nlx1MjQ2N1x1MjQ2OFx1MjQ2OVx1ZmZmZFx1ZmZmZFx1MzIyMFx1MzIyMVx1MzIyMlx1MzIyM1x1MzIyNFx1MzIyNVx1MzIyNlx1MzIyN1x1MzIyOFx1MzIyOVx1ZmZmZFx1ZmZmZFx1MjE2MFx1MjE2MVx1'@;
put 'MjE2Mlx1MjE2M1x1MjE2NFx1MjE2NVx1MjE2Nlx1MjE2N1x1MjE2OFx1MjE2OVx1MjE2YVx1MjE2Ylx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE2Ml0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTYyXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxNjJdW3ZdXT00MTQ3'@;
put 'Mit2LFRbNDE0NzIrdl09a1sxNjJdW3ZdKTtmb3Ioa1sxNjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmMDFcdWZmMDJcdWZmMDNcdWZmZTVcdWZmMDVcdWZmMDZcdWZmMDdcdWZmMDhcdWZmMDlcdWZmMGFcdWZmMGJcdWZmMGNcdWZmMGRcdWZmMGVcdWZmMGZcdWZmMTBcdWZmMTFcdWZmMTJcdWZmMTNcdWZmMTRcdWZmMTVcdWZmMTZcdWZmMTdcdWZmMThcdWZmMTlc'@;
put 'dWZmMWFcdWZmMWJcdWZmMWNcdWZmMWRcdWZmMWVcdWZmMWZcdWZmMjBcdWZmMjFcdWZmMjJcdWZmMjNcdWZmMjRcdWZmMjVcdWZmMjZcdWZmMjdcdWZmMjhcdWZmMjlcdWZmMmFcdWZmMmJcdWZmMmNcdWZmMmRcdWZmMmVcdWZmMmZcdWZmMzBcdWZmMzFcdWZmMzJcdWZmMzNcdWZmMzRcdWZm'@;
put 'MzVcdWZmMzZcdWZmMzdcdWZmMzhcdWZmMzlcdWZmM2FcdWZmM2JcdWZmM2NcdWZmM2RcdWZmM2VcdWZmM2ZcdWZmNDBcdWZmNDFcdWZmNDJcdWZmNDNcdWZmNDRcdWZmNDVcdWZmNDZcdWZmNDdcdWZmNDhcdWZmNDlcdWZmNGFcdWZmNGJcdWZmNGNcdWZmNGRcdWZmNGVcdWZmNGZcdWZmNTBc'@;
put 'dWZmNTFcdWZmNTJcdWZmNTNcdWZmNTRcdWZmNTVcdWZmNTZcdWZmNTdcdWZmNThcdWZmNTlcdWZmNWFcdWZmNWJcdWZmNWNcdWZmNWRcdWZmZTNcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxNjNdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE2M11bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tb'@;
put 'MTYzXVt2XV09NDE3MjgrdixUWzQxNzI4K3ZdPWtbMTYzXVt2XSk7Zm9yKGtbMTY0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDQxXHUzMDQyXHUzMDQzXHUzMDQ0XHUzMDQ1XHUzMDQ2XHUzMDQ3XHUzMDQ4XHUzMDQ5XHUzMDRhXHUzMDRiXHUzMDRjXHUzMDRkXHUzMDRlXHUzMDRmXHUzMDUwXHUzMDUxXHUzMDUyXHUzMDUzXHUzMDU0XHUzMDU1XHUzMDU2XHUzMDU3'@;
put 'XHUzMDU4XHUzMDU5XHUzMDVhXHUzMDViXHUzMDVjXHUzMDVkXHUzMDVlXHUzMDVmXHUzMDYwXHUzMDYxXHUzMDYyXHUzMDYzXHUzMDY0XHUzMDY1XHUzMDY2XHUzMDY3XHUzMDY4XHUzMDY5XHUzMDZhXHUzMDZiXHUzMDZjXHUzMDZkXHUzMDZlXHUzMDZmXHUzMDcwXHUzMDcxXHUzMDcyXHUz'@;
put 'MDczXHUzMDc0XHUzMDc1XHUzMDc2XHUzMDc3XHUzMDc4XHUzMDc5XHUzMDdhXHUzMDdiXHUzMDdjXHUzMDdkXHUzMDdlXHUzMDdmXHUzMDgwXHUzMDgxXHUzMDgyXHUzMDgzXHUzMDg0XHUzMDg1XHUzMDg2XHUzMDg3XHUzMDg4XHUzMDg5XHUzMDhhXHUzMDhiXHUzMDhjXHUzMDhkXHUzMDhl'@;
put 'XHUzMDhmXHUzMDkwXHUzMDkxXHUzMDkyXHUzMDkzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTY0XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxNjRdW3ZdLmNoYXJDb2Rl'@;
put 'QXQoMCkmJihzZVtrWzE2NF1bdl1dPTQxOTg0K3YsVFs0MTk4NCt2XT1rWzE2NF1bdl0pO2ZvcihrWzE2NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzBhMVx1MzBhMlx1MzBhM1x1MzBhNFx1MzBhNVx1MzBhNlx1MzBhN1x1MzBhOFx1MzBhOVx1MzBhYVx1MzBhYlx1MzBhY1x1MzBhZFx1MzBhZVx1MzBhZlx1MzBiMFx1MzBiMVx1MzBiMlx1MzBiM1x1MzBiNFx1MzBi'@;
put 'NVx1MzBiNlx1MzBiN1x1MzBiOFx1MzBiOVx1MzBiYVx1MzBiYlx1MzBiY1x1MzBiZFx1MzBiZVx1MzBiZlx1MzBjMFx1MzBjMVx1MzBjMlx1MzBjM1x1MzBjNFx1MzBjNVx1MzBjNlx1MzBjN1x1MzBjOFx1MzBjOVx1MzBjYVx1MzBjYlx1MzBjY1x1MzBjZFx1MzBjZVx1MzBjZlx1MzBkMFx1'@;
put 'MzBkMVx1MzBkMlx1MzBkM1x1MzBkNFx1MzBkNVx1MzBkNlx1MzBkN1x1MzBkOFx1MzBkOVx1MzBkYVx1MzBkYlx1MzBkY1x1MzBkZFx1MzBkZVx1MzBkZlx1MzBlMFx1MzBlMVx1MzBlMlx1MzBlM1x1MzBlNFx1MzBlNVx1MzBlNlx1MzBlN1x1MzBlOFx1MzBlOVx1MzBlYVx1MzBlYlx1MzBl'@;
put 'Y1x1MzBlZFx1MzBlZVx1MzBlZlx1MzBmMFx1MzBmMVx1MzBmMlx1MzBmM1x1MzBmNFx1MzBmNVx1MzBmNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE2NV0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTY1'@;
put 'XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxNjVdW3ZdXT00MjI0MCt2LFRbNDIyNDArdl09a1sxNjVdW3ZdKTtmb3Ioa1sxNjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdTAzYTNcdTAz'@;
put 'YTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVc'@;
put 'dTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxNjZdLmxlbmd0aDsrK3Yp'@;
put 'NjU1MzMhPT1rWzE2Nl1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTY2XVt2XV09NDI0OTYrdixUWzQyNDk2K3ZdPWtbMTY2XVt2XSk7Zm9yKGtbMTY3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDAxXHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUw'@;
put 'NDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDUxXHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUw'@;
put 'NDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTY3'@;
put 'XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxNjddW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE2N11bdl1dPTQyNzUyK3YsVFs0Mjc1Mit2XT1rWzE2N11bdl0pO2ZvcihrWzE2OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDEwMVx4ZTFcdTAxY2VceGUwXHUwMTEzXHhlOVx1MDExYlx4ZThcdTAxMmJceGVkXHUwMWQwXHhlY1x1MDE0ZFx4ZjNcdTAxZDJceGYyXHUwMTZi'@;
put 'XHhmYVx1MDFkNFx4ZjlcdTAxZDZcdTAxZDhcdTAxZGFcdTAxZGNceGZjXHhlYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzEwNVx1MzEwNlx1MzEwN1x1MzEwOFx1MzEwOVx1MzEwYVx1MzEwYlx1MzEwY1x1MzEwZFx1MzEw'@;
put 'ZVx1MzEwZlx1MzExMFx1MzExMVx1MzExMlx1MzExM1x1MzExNFx1MzExNVx1MzExNlx1MzExN1x1MzExOFx1MzExOVx1MzExYVx1MzExYlx1MzExY1x1MzExZFx1MzExZVx1MzExZlx1MzEyMFx1MzEyMVx1MzEyMlx1MzEyM1x1MzEyNFx1MzEyNVx1MzEyNlx1MzEyN1x1MzEyOFx1MzEyOVx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE2OF0ubGVuZ3RoOysr'@;
put 'dik2NTUzMyE9PWtbMTY4XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxNjhdW3ZdXT00MzAwOCt2LFRbNDMwMDgrdl09a1sxNjhdW3ZdKTtmb3Ioa1sxNjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI1MDBcdTI1MDFcdTI1MDJcdTI1MDNcdTI1MDRcdTI1MDVcdTI1MDZcdTI1MDdcdTI1MDhcdTI1MDlcdTI1MGFcdTI1MGJcdTI1MGNc'@;
put 'dTI1MGRcdTI1MGVcdTI1MGZcdTI1MTBcdTI1MTFcdTI1MTJcdTI1MTNcdTI1MTRcdTI1MTVcdTI1MTZcdTI1MTdcdTI1MThcdTI1MTlcdTI1MWFcdTI1MWJcdTI1MWNcdTI1MWRcdTI1MWVcdTI1MWZcdTI1MjBcdTI1MjFcdTI1MjJcdTI1MjNcdTI1MjRcdTI1MjVcdTI1MjZcdTI1MjdcdTI1'@;
put 'MjhcdTI1MjlcdTI1MmFcdTI1MmJcdTI1MmNcdTI1MmRcdTI1MmVcdTI1MmZcdTI1MzBcdTI1MzFcdTI1MzJcdTI1MzNcdTI1MzRcdTI1MzVcdTI1MzZcdTI1MzdcdTI1MzhcdTI1MzlcdTI1M2FcdTI1M2JcdTI1M2NcdTI1M2RcdTI1M2VcdTI1M2ZcdTI1NDBcdTI1NDFcdTI1NDJcdTI1NDNc'@;
put 'dTI1NDRcdTI1NDVcdTI1NDZcdTI1NDdcdTI1NDhcdTI1NDlcdTI1NGFcdTI1NGJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sx'@;
put 'NjldLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE2OV1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTY5XVt2XV09NDMyNjQrdixUWzQzMjY0K3ZdPWtbMTY5XVt2XSk7Zm9yKGtbMTc2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NTRhXHU5NjNmXHU1N2MzXHU2MzI4XHU1NGNlXHU1NTA5XHU1NGMwXHU3NjkxXHU3NjRjXHU4NTNjXHU3N2VlXHU4MjdlXHU3ODhkXHU3MjMx'@;
put 'XHU5Njk4XHU5NzhkXHU2YzI4XHU1Yjg5XHU0ZmZhXHU2MzA5XHU2Njk3XHU1Y2I4XHU4MGZhXHU2ODQ4XHU4MGFlXHU2NjAyXHU3NmNlXHU1MWY5XHU2NTU2XHU3MWFjXHU3ZmYxXHU4ODg0XHU1MGIyXHU1OTY1XHU2MWNhXHU2ZmIzXHU4MmFkXHU2MzRjXHU2MjUyXHU1M2VkXHU1NDI3XHU3'@;
put 'YjA2XHU1MTZiXHU3NWE0XHU1ZGY0XHU2MmQ0XHU4ZGNiXHU5Nzc2XHU2MjhhXHU4MDE5XHU1NzVkXHU5NzM4XHU3ZjYyXHU3MjM4XHU3NjdkXHU2N2NmXHU3NjdlXHU2NDQ2XHU0ZjcwXHU4ZDI1XHU2MmRjXHU3YTE3XHU2NTkxXHU3M2VkXHU2NDJjXHU2MjczXHU4MjJjXHU5ODgxXHU2Nzdm'@;
put 'XHU3MjQ4XHU2MjZlXHU2MmNjXHU0ZjM0XHU3NGUzXHU1MzRhXHU1MjllXHU3ZWNhXHU5MGE2XHU1ZTJlXHU2ODg2XHU2OTljXHU4MTgwXHU3ZWQxXHU2OGQyXHU3OGM1XHU4NjhjXHU5NTUxXHU1MDhkXHU4YzI0XHU4MmRlXHU4MGRlXHU1MzA1XHU4OTEyXHU1MjY1XHVmZmZkIi5zcGxpdCgi'@;
put 'Iiksdj0wO3YhPWtbMTc2XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxNzZdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE3Nl1bdl1dPTQ1MDU2K3YsVFs0NTA1Nit2XT1rWzE3Nl1bdl0pO2ZvcihrWzE3N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODU4NFx1OTZmOVx1NGZkZFx1NTgyMVx1OTk3MVx1NWI5ZFx1NjJiMVx1NjJhNVx1NjZiNFx1OGM3OVx1OWM4ZFx1NzIw'@;
put 'Nlx1Njc2Zlx1Nzg5MVx1NjBiMlx1NTM1MVx1NTMxN1x1OGY4OFx1ODBjY1x1OGQxZFx1OTRhMVx1NTAwZFx1NzJjOFx1NTkwN1x1NjBlYlx1NzExOVx1ODhhYlx1NTk1NFx1ODJlZlx1NjcyY1x1N2IyOFx1NWQyOVx1N2VmN1x1NzUyZFx1NmNmNVx1OGU2Nlx1OGZmOFx1OTAzY1x1OWYzYlx1'@;
put 'NmJkNFx1OTExOVx1N2IxNFx1NWY3Y1x1NzhhN1x1ODRkNlx1ODUzZFx1NmJkNVx1NmJkOVx1NmJkNlx1NWUwMVx1NWU4N1x1NzVmOVx1OTVlZFx1NjU1ZFx1NWYwYVx1NWZjNVx1OGY5Zlx1NThjMVx1ODFjMlx1OTA3Zlx1OTY1Ylx1OTdhZFx1OGZiOVx1N2YxNlx1OGQyY1x1NjI0MVx1NGZi'@;
put 'Zlx1NTNkOFx1NTM1ZVx1OGZhOFx1OGZhOVx1OGZhYlx1OTA0ZFx1NjgwN1x1NWY2YVx1ODE5OFx1ODg2OFx1OWNkNlx1NjE4Ylx1NTIyYlx1NzYyYVx1NWY2Y1x1NjU4Y1x1NmZkMlx1NmVlOFx1NWJiZVx1NjQ0OFx1NTE3NVx1NTFiMFx1NjdjNFx1NGUxOVx1NzljOVx1OTk3Y1x1NzBiM1x1'@;
put 'ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE3N10ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTc3XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxNzddW3ZdXT00NTMxMit2LFRbNDUzMTIrdl09a1sxNzddW3ZdKTtmb3Ioa1sxNzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc1YzVcdTVlNzZcdTczYmJcdTgzZTBcdTY0YWRcdTYyZThcdTk0YjVcdTZjZTJcdTUzNWFcdTUy'@;
put 'YzNcdTY0MGZcdTk0YzJcdTdiOTRcdTRmMmZcdTVlMWJcdTgyMzZcdTgxMTZcdTgxOGFcdTZlMjRcdTZjY2FcdTlhNzNcdTYzNTVcdTUzNWNcdTU0ZmFcdTg4NjVcdTU3ZTBcdTRlMGRcdTVlMDNcdTZiNjVcdTdjM2ZcdTkwZThcdTYwMTZcdTY0ZTZcdTczMWNcdTg4YzFcdTY3NTBcdTYyNGRc'@;
put 'dThkMjJcdTc3NmNcdThlMjlcdTkxYzdcdTVmNjlcdTgzZGNcdTg1MjFcdTk5MTBcdTUzYzJcdTg2OTVcdTZiOGJcdTYwZWRcdTYwZThcdTcwN2ZcdTgyY2RcdTgyMzFcdTRlZDNcdTZjYTdcdTg1Y2ZcdTY0Y2RcdTdjZDlcdTY5ZmRcdTY2ZjlcdTgzNDlcdTUzOTVcdTdiNTZcdTRmYTdcdTUx'@;
put 'OGNcdTZkNGJcdTVjNDJcdThlNmRcdTYzZDJcdTUzYzlcdTgzMmNcdTgzMzZcdTY3ZTVcdTc4YjRcdTY0M2RcdTViZGZcdTVjOTRcdTVkZWVcdThiZTdcdTYyYzZcdTY3ZjRcdThjN2FcdTY0MDBcdTYzYmFcdTg3NDlcdTk5OGJcdThjMTdcdTdmMjBcdTk0ZjJcdTRlYTdcdTk2MTBcdTk4YTRc'@;
put 'dTY2MGNcdTczMTZcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxNzhdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE3OF1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTc4XVt2XV09NDU1NjgrdixUWzQ1NTY4K3ZdPWtbMTc4XVt2XSk7Zm9yKGtbMTc5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NzNhXHU1YzFkXHU1ZTM4XHU5NTdmXHU1MDdmXHU4MGEwXHU1MzgyXHU2'@;
put 'NTVlXHU3NTQ1XHU1NTMxXHU1MDIxXHU4ZDg1XHU2Mjg0XHU5NDllXHU2NzFkXHU1NjMyXHU2ZjZlXHU1ZGUyXHU1NDM1XHU3MDkyXHU4ZjY2XHU2MjZmXHU2NGE0XHU2M2EzXHU1ZjdiXHU2Zjg4XHU5MGY0XHU4MWUzXHU4ZmIwXHU1YzE4XHU2NjY4XHU1ZmYxXHU2Yzg5XHU5NjQ4XHU4ZDgx'@;
put 'XHU4ODZjXHU2NDkxXHU3OWYwXHU1N2NlXHU2YTU5XHU2MjEwXHU1NDQ4XHU0ZTU4XHU3YTBiXHU2MGU5XHU2Zjg0XHU4YmRhXHU2MjdmXHU5MDFlXHU5YThiXHU3OWU0XHU1NDAzXHU3NWY0XHU2MzAxXHU1MzE5XHU2YzYwXHU4ZmRmXHU1ZjFiXHU5YTcwXHU4MDNiXHU5ZjdmXHU0Zjg4XHU1'@;
put 'YzNhXHU4ZDY0XHU3ZmM1XHU2NWE1XHU3MGJkXHU1MTQ1XHU1MWIyXHU4NjZiXHU1ZDA3XHU1YmEwXHU2MmJkXHU5MTZjXHU3NTc0XHU4ZTBjXHU3YTIwXHU2MTAxXHU3Yjc5XHU0ZWM3XHU3ZWY4XHU3Nzg1XHU0ZTExXHU4MWVkXHU1MjFkXHU1MWZhXHU2YTcxXHU1M2E4XHU4ZTg3XHU5NTA0'@;
put 'XHU5NmNmXHU2ZWMxXHU5NjY0XHU2OTVhXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTc5XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxNzldW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE3OV1bdl1dPTQ1ODI0K3YsVFs0NTgyNCt2XT1rWzE3OV1bdl0pO2ZvcihrWzE4MF09Ilx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzg0MFx1NTBhOFx1NzdkN1x1NjQxMFx1ODllNlx1'@;
put 'NTkwNFx1NjNlM1x1NWRkZFx1N2E3Zlx1NjkzZFx1NGYyMFx1ODIzOVx1NTU5OFx1NGUzMlx1NzVhZVx1N2E5N1x1NWU2Mlx1NWU4YVx1OTVlZlx1NTIxYlx1NTQzOVx1NzA4YVx1NjM3Nlx1OTUyNFx1NTc4Mlx1NjYyNVx1NjkzZlx1OTE4N1x1NTUwN1x1NmRmM1x1N2VhZlx1ODgyMlx1NjIz'@;
put 'M1x1N2VmMFx1NzViNVx1ODMyOFx1NzhjMVx1OTZjY1x1OGY5ZVx1NjE0OFx1NzRmN1x1OGJjZFx1NmI2NFx1NTIzYVx1OGQ1MFx1NmIyMVx1ODA2YVx1ODQ3MVx1NTZmMVx1NTMwNlx1NGVjZVx1NGUxYlx1NTFkMVx1N2M5N1x1OTE4Ylx1N2MwN1x1NGZjM1x1OGU3Zlx1N2JlMVx1N2E5Y1x1'@;
put 'NjQ2N1x1NWQxNFx1NTBhY1x1ODEwNlx1NzYwMVx1N2NiOVx1NmRlY1x1N2ZlMFx1Njc1MVx1NWI1OFx1NWJmOFx1NzhjYlx1NjRhZVx1NjQxM1x1NjNhYVx1NjMyYlx1OTUxOVx1NjQyZFx1OGZiZVx1N2I1NFx1NzYyOVx1NjI1M1x1NTkyN1x1NTQ0Nlx1NmI3OVx1NTBhM1x1NjIzNFx1NWUy'@;
put 'Nlx1NmI4Nlx1NGVlM1x1OGQzN1x1ODg4Ylx1NWY4NVx1OTAyZVx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE4MF0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTgwXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxODBdW3ZdXT00NjA4MCt2LFRbNDYwODArdl09a1sxODBdW3ZdKTtmb3Ioa1sx'@;
put 'ODFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwMjBcdTgwM2RcdTYyYzVc'@;
put 'dTRlMzlcdTUzNTVcdTkwZjhcdTYzYjhcdTgwYzZcdTY1ZTZcdTZjMmVcdTRmNDZcdTYwZWVcdTZkZTFcdThiZGVcdTVmMzlcdTg2Y2JcdTVmNTNcdTYzMjFcdTUxNWFcdTgzNjFcdTY4NjNcdTUyMDBcdTYzNjNcdThlNDhcdTUwMTJcdTVjOWJcdTc5NzdcdTViZmNcdTUyMzBcdTdhM2JcdTYw'@;
put 'YmNcdTkwNTNcdTc2ZDdcdTVmYjdcdTVmOTdcdTc2ODRcdThlNmNcdTcwNmZcdTc2N2JcdTdiNDlcdTc3YWFcdTUxZjNcdTkwOTNcdTU4MjRcdTRmNGVcdTZlZjRcdThmZWFcdTY1NGNcdTdiMWJcdTcyYzRcdTZkYTRcdTdmZGZcdTVhZTFcdTYyYjVcdTVlOTVcdTU3MzBcdTg0ODJcdTdiMmNc'@;
put 'dTVlMWRcdTVmMWZcdTkwMTJcdTdmMTRcdTk4YTBcdTYzODJcdTZlYzdcdTc4OThcdTcwYjlcdTUxNzhcdTk3NWJcdTU3YWJcdTc1MzVcdTRmNDNcdTc1MzhcdTVlOTdcdTYwZTZcdTU5NjBcdTZkYzBcdTZiYmZcdTc4ODlcdTUzZmNcdTk2ZDVcdTUxY2JcdTUyMDFcdTYzODlcdTU0MGFcdTk0'@;
put 'OTNcdThjMDNcdThkY2NcdTcyMzlcdTc4OWZcdTg3NzZcdThmZWRcdThjMGRcdTUzZTBcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxODFdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE4MV1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTgxXVt2XV09NDYzMzYrdixUWzQ2MzM2K3ZdPWtbMTgx'@;
put 'XVt2XSk7Zm9yKGtbMTgyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZTAx'@;
put 'XHU3NmVmXHU1M2VlXHU5NDg5XHU5ODc2XHU5ZjBlXHU5NTJkXHU1YjlhXHU4YmEyXHU0ZTIyXHU0ZTFjXHU1MWFjXHU4NDYzXHU2MWMyXHU1MmE4XHU2ODBiXHU0Zjk3XHU2MDZiXHU1MWJiXHU2ZDFlXHU1MTVjXHU2Mjk2XHU2NTk3XHU5NjYxXHU4YzQ2XHU5MDE3XHU3NWQ4XHU5MGZkXHU3'@;
put 'NzYzXHU2YmQyXHU3MjhhXHU3MmVjXHU4YmZiXHU1ODM1XHU3Nzc5XHU4ZDRjXHU2NzVjXHU5NTQwXHU4MDlhXHU1ZWE2XHU2ZTIxXHU1OTkyXHU3YWVmXHU3N2VkXHU5NTNiXHU2YmI1XHU2NWFkXHU3ZjBlXHU1ODA2XHU1MTUxXHU5NjFmXHU1YmY5XHU1OGE5XHU1NDI4XHU4ZTcyXHU2NTY2'@;
put 'XHU5ODdmXHU1NmU0XHU5NDlkXHU3NmZlXHU5MDQxXHU2Mzg3XHU1NGM2XHU1OTFhXHU1OTNhXHU1NzliXHU4ZWIyXHU2NzM1XHU4ZGZhXHU4MjM1XHU1MjQxXHU2MGYwXHU1ODE1XHU4NmZlXHU1Y2U4XHU5ZTQ1XHU0ZmM0XHU5ODlkXHU4YmI5XHU1YTI1XHU2MDc2XHU1Mzg0XHU2MjdjXHU5'@;
put 'MDRmXHU5MTAyXHU5OTdmXHU2MDY5XHU4MDBjXHU1MTNmXHU4MDMzXHU1YzE0XHU5OTc1XHU2ZDMxXHU0ZThjXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTgyXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxODJdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE4Ml1bdl1dPTQ2NTkyK3YsVFs0'@;
put 'NjU5Mit2XT1rWzE4Ml1bdl0pO2ZvcihrWzE4M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1OGQzMFx1NTNkMVx1N2Y1YVx1N2I0Zlx1NGYxMFx1NGU0Zlx1OTYwMFx1NmNkNVx1NzNkMFx1ODVlOVx1NWUwNlx1NzU2YVx1N2ZmYlx1NmEwYVx1NzdmZVx1OTQ5Mlx1N2U0MVx1NTFlMVx1NzBlNlx1NTNjZFx1OGZkNFx1ODMwM1x1OGQyOVx1NzJhZlx1OTk2ZFx1NmNkYlx1'@;
put 'NTc0YVx1ODJiM1x1NjViOVx1ODBhYVx1NjIzZlx1OTYzMlx1NTlhOFx1NGVmZlx1OGJiZlx1N2ViYVx1NjUzZVx1ODNmMlx1OTc1ZVx1NTU2MVx1OThkZVx1ODBhNVx1NTMyYVx1OGJmZFx1NTQyMFx1ODBiYVx1NWU5Zlx1NmNiOFx1OGQzOVx1ODJhY1x1OTE1YVx1NTQyOVx1NmMxYlx1NTIw'@;
put 'Nlx1N2ViN1x1NTc1Zlx1NzExYVx1NmM3ZVx1N2M4OVx1NTk0Ylx1NGVmZFx1NWZmZlx1NjEyNFx1N2NhYVx1NGUzMFx1NWMwMVx1NjdhYlx1ODcwMlx1NWNmMFx1OTUwYlx1OThjZVx1NzVhZlx1NzBmZFx1OTAyMlx1NTFhZlx1N2YxZFx1OGJiZFx1NTk0OVx1NTFlNFx1NGY1Ylx1NTQyNlx1'@;
put 'NTkyYlx1NjU3N1x1ODBhNFx1NWI3NVx1NjI3Nlx1NjJjMlx1OGY5MFx1NWU0NVx1NmMxZlx1N2IyNlx1NGYwZlx1NGZkOFx1NjcwZFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE4M10ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTgzXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxODNdW3Zd'@;
put 'XT00Njg0OCt2LFRbNDY4NDgrdl09a1sxODNdW3ZdKTtmb3Ioa1sxODRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkNmVcdTZkYWFcdTc5OGZcdTg4YjFcdTVmMTdcdTc1MmJcdTYyOWFcdThmODVcdTRmZWZcdTkxZGNcdTY1YTdcdTgxMmZcdTgxNTFcdTVlOWNcdTgxNTBcdThkNzRcdTUyNmZcdTg5ODZcdThkNGJcdTU5MGRcdTUwODVcdTRlZDhcdTk2MWNcdTcyMzZc'@;
put 'dTgxNzlcdThkMWZcdTViY2NcdThiYTNcdTk2NDRcdTU5ODdcdTdmMWFcdTU0OTBcdTU2NzZcdTU2MGVcdThiZTVcdTY1MzlcdTY5ODJcdTk0OTlcdTc2ZDZcdTZlODlcdTVlNzJcdTc1MThcdTY3NDZcdTY3ZDFcdTdhZmZcdTgwOWRcdThkNzZcdTYxMWZcdTc5YzZcdTY1NjJcdThkNjNcdTUx'@;
put 'ODhcdTUyMWFcdTk0YTJcdTdmMzhcdTgwOWJcdTdlYjJcdTVjOTdcdTZlMmZcdTY3NjBcdTdiZDlcdTc2OGJcdTlhZDhcdTgxOGZcdTdmOTRcdTdjZDVcdTY0MWVcdTk1NTBcdTdhM2ZcdTU0NGFcdTU0ZTVcdTZiNGNcdTY0MDFcdTYyMDhcdTllM2RcdTgwZjNcdTc1OTlcdTUyNzJcdTk3Njlc'@;
put 'dTg0NWJcdTY4M2NcdTg2ZTRcdTk2MDFcdTk2OTRcdTk0ZWNcdTRlMmFcdTU0MDRcdTdlZDlcdTY4MzlcdThkZGZcdTgwMTVcdTY2ZjRcdTVlOWFcdTdmYjlcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxODRdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE4NF1bdl0uY2hhckNvZGVBdCgwKSYm'@;
put 'KHNlW2tbMTg0XVt2XV09NDcxMDQrdixUWzQ3MTA0K3ZdPWtbMTg0XVt2XSk7Zm9yKGtbMTg1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1N2MyXHU4MDNmXHU2ODk3XHU1ZGU1XHU2NTNiXHU1MjlmXHU2MDZkXHU5ZjlhXHU0ZjliXHU4ZWFjXHU1MTZjXHU1YmFiXHU1ZjEzXHU1ZGU5XHU2YzVlXHU2MmYxXHU4ZDIxXHU1MTcxXHU5NGE5XHU1MmZlXHU2YzlmXHU4MmRm'@;
put 'XHU3MmQ3XHU1N2EyXHU2Nzg0XHU4ZDJkXHU1OTFmXHU4ZjljXHU4M2M3XHU1NDk1XHU3YjhkXHU0ZjMwXHU2Y2JkXHU1YjY0XHU1OWQxXHU5ZjEzXHU1M2U0XHU4NmNhXHU5YWE4XHU4YzM3XHU4MGExXHU2NTQ1XHU5ODdlXHU1NmZhXHU5NmM3XHU1MjJlXHU3NGRjXHU1MjUwXHU1YmUxXHU2'@;
put 'MzAyXHU4OTAyXHU0ZTU2XHU2MmQwXHU2MDJhXHU2OGZhXHU1MTczXHU1Yjk4XHU1MWEwXHU4OWMyXHU3YmExXHU5OTg2XHU3ZjUwXHU2MGVmXHU3MDRjXHU4ZDJmXHU1MTQ5XHU1ZTdmXHU5MDFiXHU3NDcwXHU4OWM0XHU1NzJkXHU3ODQ1XHU1ZjUyXHU5ZjlmXHU5NWZhXHU4ZjY4XHU5YjNj'@;
put 'XHU4YmUxXHU3Njc4XHU2ODQyXHU2N2RjXHU4ZGVhXHU4ZDM1XHU1MjNkXHU4ZjhhXHU2ZWRhXHU2OGNkXHU5NTA1XHU5MGVkXHU1NmZkXHU2NzljXHU4OGY5XHU4ZmM3XHU1NGM4XHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTg1XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxODVdW3ZdLmNo'@;
put 'YXJDb2RlQXQoMCkmJihzZVtrWzE4NV1bdl1dPTQ3MzYwK3YsVFs0NzM2MCt2XT1rWzE4NV1bdl0pO2ZvcihrWzE4Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWFiOFx1NWI2OVx1NmQ3N1x1NmMyNlx1NGVhNVx1NWJiM1x1OWE4N1x1OTE2M1x1NjFhOFx1OTBhZlx1OTdlOVx1NTQyYlx1NmRiNVx1NWJkMlx1NTFmZFx1NTU4YVx1N2Y1NVx1N2ZmMFx1NjRiY1x1NjM0'@;
put 'ZFx1NjVmMVx1NjFiZVx1NjA4ZFx1NzEwYVx1NmM1N1x1NmM0OVx1NTkyZlx1Njc2ZFx1ODIyYVx1NThkNVx1NTY4ZVx1OGM2YVx1NmJlYlx1OTBkZFx1NTk3ZFx1ODAxN1x1NTNmN1x1NmQ2OVx1NTQ3NVx1NTU5ZFx1ODM3N1x1ODNjZlx1NjgzOFx1NzliZVx1NTQ4Y1x1NGY1NVx1NTQwOFx1'@;
put 'NzZkMlx1OGM4OVx1OTYwMlx1NmNiM1x1NmRiOFx1OGQ2Ylx1ODkxMFx1OWU2NFx1OGQzYVx1NTYzZlx1OWVkMVx1NzVkNVx1NWY4OFx1NzJlMFx1NjA2OFx1NTRmY1x1NGVhOFx1NmEyYVx1ODg2MVx1NjA1Mlx1OGY3MFx1NTRjNFx1NzBkOFx1ODY3OVx1OWUzZlx1NmQyYVx1NWI4Zlx1NWYx'@;
put 'OFx1N2VhMlx1NTU4OVx1NGZhZlx1NzMzNFx1NTQzY1x1NTM5YVx1NTAxOVx1NTQwZVx1NTQ3Y1x1NGU0ZVx1NWZmZFx1NzQ1YVx1NThmNlx1ODQ2Ylx1ODBlMVx1ODc3NFx1NzJkMFx1N2NjYVx1NmU1Nlx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE4Nl0ubGVuZ3RoOysrdik2NTUzMyE9'@;
put 'PWtbMTg2XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxODZdW3ZdXT00NzYxNit2LFRbNDc2MTYrdl09a1sxODZdW3ZdKTtmb3Ioa1sxODddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVmMjdcdTg2NGVcdTU1MmNcdTYyYTRcdTRlOTJcdTZjYWFcdTYyMzdcdTgyYjFcdTU0ZDdcdTUzNGVcdTczM2VcdTZlZDFcdTc1M2JcdTUyMTJcdTUzMTZcdThiZGRcdTY5ZDBcdTVm'@;
put 'OGFcdTYwMDBcdTZkZWVcdTU3NGZcdTZiMjJcdTczYWZcdTY4NTNcdThmZDhcdTdmMTNcdTYzNjJcdTYwYTNcdTU1MjRcdTc1ZWFcdThjNjJcdTcxMTVcdTZkYTNcdTViYTZcdTVlN2JcdTgzNTJcdTYxNGNcdTllYzRcdTc4ZmFcdTg3NTdcdTdjMjdcdTc2ODdcdTUxZjBcdTYwZjZcdTcxNGNc'@;
put 'dTY2NDNcdTVlNGNcdTYwNGRcdThjMGVcdTcwNzBcdTYzMjVcdThmODlcdTVmYmRcdTYwNjJcdTg2ZDRcdTU2ZGVcdTZiYzFcdTYwOTRcdTYxNjdcdTUzNDlcdTYwZTBcdTY2NjZcdThkM2ZcdTc5ZmRcdTRmMWFcdTcwZTlcdTZjNDdcdThiYjNcdThiZjJcdTdlZDhcdTgzNjRcdTY2MGZcdTVh'@;
put 'NWFcdTliNDJcdTZkNTFcdTZkZjdcdThjNDFcdTZkM2JcdTRmMTlcdTcwNmJcdTgzYjdcdTYyMTZcdTYwZDFcdTk3MGRcdThkMjdcdTc5NzhcdTUxZmJcdTU3M2VcdTU3ZmFcdTY3M2FcdTc1NzhcdTdhM2RcdTc5ZWZcdTdiOTVcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxODddLmxlbmd0'@;
put 'aDsrK3YpNjU1MzMhPT1rWzE4N11bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTg3XVt2XV09NDc4NzIrdixUWzQ3ODcyK3ZdPWtbMTg3XVt2XSk7Zm9yKGtbMTg4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MDhjXHU5OTY1XHU4ZmY5XHU2ZmMwXHU4YmE1XHU5ZTIxXHU1OWVjXHU3ZWU5XHU3ZjA5XHU1NDA5XHU2NzgxXHU2OGQ4XHU4ZjkxXHU3YzRkXHU5NmM2XHU1'@;
put 'M2NhXHU2MDI1XHU3NWJlXHU2YzcyXHU1MzczXHU1YWM5XHU3ZWE3XHU2MzI0XHU1MWUwXHU4MTBhXHU1ZGYxXHU4NGRmXHU2MjgwXHU1MTgwXHU1YjYzXHU0ZjBlXHU3OTZkXHU1MjQyXHU2MGI4XHU2ZDRlXHU1YmM0XHU1YmMyXHU4YmExXHU4YmIwXHU2NWUyXHU1ZmNjXHU5NjQ1XHU1OTkz'@;
put 'XHU3ZWU3XHU3ZWFhXHU1NjA5XHU2N2I3XHU1OTM5XHU0ZjczXHU1YmI2XHU1MmEwXHU4MzVhXHU5ODhhXHU4ZDNlXHU3NTMyXHU5NGJlXHU1MDQ3XHU3YTNjXHU0ZWY3XHU2N2I2XHU5YTdlXHU1YWMxXHU2YjdjXHU3NmQxXHU1NzVhXHU1YzE2XHU3YjNhXHU5NWY0XHU3MTRlXHU1MTdjXHU4'@;
put 'MGE5XHU4MjcwXHU1OTc4XHU3ZjA0XHU4MzI3XHU2OGMwXHU2N2VjXHU3OGIxXHU3ODc3XHU2MmUzXHU2MzYxXHU3YjgwXHU0ZmVkXHU1MjZhXHU1MWNmXHU4MzUwXHU2OWRiXHU5Mjc0XHU4ZGY1XHU4ZDMxXHU4OWMxXHU5NTJlXHU3YmFkXHU0ZWY2XHVmZmZkIi5zcGxpdCgiIiksdj0wO3Yh'@;
put 'PWtbMTg4XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxODhdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE4OF1bdl1dPTQ4MTI4K3YsVFs0ODEyOCt2XT1rWzE4OF1bdl0pO2ZvcihrWzE4OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTA2NVx1ODIzMFx1NTI1MVx1OTk2Zlx1NmUxMFx1NmU4NVx1NmRhN1x1NWVmYVx1NTBmNVx1NTlkY1x1NWMwNlx1NmQ0Nlx1NmM1Zlx1'@;
put 'NzU4Nlx1ODQ4Ylx1Njg2OFx1NTk1Nlx1OGJiMlx1NTMyMFx1OTE3MVx1OTY0ZFx1ODU0OVx1NjkxMlx1NzkwMVx1NzEyNlx1ODBmNlx1NGVhNFx1OTBjYVx1NmQ0N1x1OWE4NFx1NWEwN1x1NTZiY1x1NjQwNVx1OTRmMFx1NzdlYlx1NGZhNVx1ODExYVx1NzJlMVx1ODlkMlx1OTk3YVx1N2Yz'@;
put 'NFx1N2VkZVx1NTI3Zlx1NjU1OVx1OTE3NVx1OGY3Zlx1OGY4M1x1NTNlYlx1N2E5Nlx1NjNlZFx1NjNhNVx1NzY4Nlx1NzlmOFx1ODg1N1x1OTYzNlx1NjIyYVx1NTJhYlx1ODI4Mlx1Njg1NFx1Njc3MFx1NjM3N1x1Nzc2Ylx1N2FlZFx1NmQwMVx1N2VkM1x1ODllM1x1NTlkMFx1NjIxMlx1'@;
put 'ODVjOVx1ODJhNVx1NzU0Y1x1NTAxZlx1NGVjYlx1NzVhNVx1OGJlYlx1NWM0YVx1NWRmZVx1N2I0Ylx1NjVhNFx1OTFkMVx1NGVjYVx1NmQyNVx1ODk1Zlx1N2QyN1x1OTUyNlx1NGVjNVx1OGMyOFx1OGZkYlx1OTc3M1x1NjY0Ylx1Nzk4MVx1OGZkMVx1NzBlY1x1NmQ3OFx1ZmZmZCIuc3Bs'@;
put 'aXQoIiIpLHY9MDt2IT1rWzE4OV0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTg5XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxODldW3ZdXT00ODM4NCt2LFRbNDgzODQrdl09a1sxODldW3ZdKTtmb3Ioa1sxOTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVjM2RcdTUyYjJcdTgzNDZcdTUxNjJcdTgzMGVcdTc3NWJcdTY2NzZcdTljYjhcdTRlYWNcdTYwY2FcdTdjYmVc'@;
put 'dTdjYjNcdTdlY2ZcdTRlOTVcdThiNjZcdTY2NmZcdTk4ODhcdTk3NTlcdTU4ODNcdTY1NmNcdTk1NWNcdTVmODRcdTc1YzlcdTk3NTZcdTdhZGZcdTdhZGVcdTUxYzBcdTcwYWZcdTdhOThcdTYzZWFcdTdhNzZcdTdlYTBcdTczOTZcdTk3ZWRcdTRlNDVcdTcwNzhcdTRlNWRcdTkxNTJcdTUz'@;
put 'YTlcdTY1NTFcdTY1ZTdcdTgxZmNcdTgyMDVcdTU0OGVcdTVjMzFcdTc1OWFcdTk3YTBcdTYyZDhcdTcyZDlcdTc1YmRcdTVjNDVcdTlhNzlcdTgzY2FcdTVjNDBcdTU0ODBcdTc3ZTlcdTRlM2VcdTZjYWVcdTgwNWFcdTYyZDJcdTYzNmVcdTVkZThcdTUxNzdcdThkZGRcdThlMWVcdTk1MmZc'@;
put 'dTRmZjFcdTUzZTVcdTYwZTdcdTcwYWNcdTUyNjdcdTYzNTBcdTllNDNcdTVhMWZcdTUwMjZcdTc3MzdcdTUzNzdcdTdlZTJcdTY0ODVcdTY1MmJcdTYyODlcdTYzOThcdTUwMTRcdTcyMzVcdTg5YzlcdTUxYjNcdThiYzBcdTdlZGRcdTU3NDdcdTgzY2NcdTk0YTdcdTUxOWJcdTU0MWJcdTVj'@;
put 'ZmJcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxOTBdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE5MF1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTkwXVt2XV09NDg2NDArdixUWzQ4NjQwK3ZdPWtbMTkwXVt2XSk7Zm9yKGtbMTkxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZmNhXHU3YWUzXHU2ZDVhXHU5MGUxXHU5YThmXHU1NTgwXHU1NDk2XHU1MzYxXHU1NGFm'@;
put 'XHU1ZjAwXHU2M2U5XHU2OTc3XHU1MWVmXHU2MTY4XHU1MjBhXHU1ODJhXHU1MmQ4XHU1NzRlXHU3ODBkXHU3NzBiXHU1ZWI3XHU2MTc3XHU3Y2UwXHU2MjViXHU2Mjk3XHU0ZWEyXHU3MDk1XHU4MDAzXHU2MmY3XHU3MGU0XHU5NzYwXHU1Nzc3XHU4MmRiXHU2N2VmXHU2OGY1XHU3OGQ1XHU5'@;
put 'ODk3XHU3OWQxXHU1OGYzXHU1NGIzXHU1M2VmXHU2ZTM0XHU1MTRiXHU1MjNiXHU1YmEyXHU4YmZlXHU4MGFmXHU1NTQzXHU1N2E2XHU2MDczXHU1NzUxXHU1NDJkXHU3YTdhXHU2MDUwXHU1YjU0XHU2M2E3XHU2MmEwXHU1M2UzXHU2MjYzXHU1YmM3XHU2N2FmXHU1NGVkXHU3YTlmXHU4MmU2'@;
put 'XHU5MTc3XHU1ZTkzXHU4OGU0XHU1OTM4XHU1N2FlXHU2MzBlXHU4ZGU4XHU4MGVmXHU1NzU3XHU3Yjc3XHU0ZmE5XHU1ZmViXHU1YmJkXHU2YjNlXHU1MzIxXHU3YjUwXHU3MmMyXHU2ODQ2XHU3N2ZmXHU3NzM2XHU2NWY3XHU1MWI1XHU0ZThmXHU3NmQ0XHU1Y2JmXHU3YWE1XHU4NDc1XHU1'@;
put 'OTRlXHU5YjQxXHU1MDgwXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTkxXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxOTFdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE5MV1bdl1dPTQ4ODk2K3YsVFs0ODg5Nit2XT1rWzE5MV1bdl0pO2ZvcihrWzE5Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTk4OFx1NjEyN1x1NmU4M1x1NTc2NFx1NjYwNlx1NjM0Nlx1NTZm'@;
put 'MFx1NjJlY1x1NjI2OVx1NWVkM1x1OTYxNFx1NTc4M1x1NjJjOVx1NTU4N1x1ODcyMVx1ODE0YVx1OGZhM1x1NTU2Nlx1ODNiMVx1Njc2NVx1OGQ1Nlx1ODRkZFx1NWE2YVx1NjgwZlx1NjJlNlx1N2JlZVx1OTYxMVx1NTE3MFx1NmY5Y1x1OGMzMFx1NjNmZFx1ODljOFx1NjFkMlx1N2YwNlx1'@;
put 'NzBjMlx1NmVlNVx1NzQwNVx1Njk5NFx1NzJmY1x1NWVjYVx1OTBjZVx1NjcxN1x1NmQ2YVx1NjM1ZVx1NTJiM1x1NzI2Mlx1ODAwMVx1NGY2Y1x1NTllNVx1OTE2YVx1NzBkOVx1NmQ5ZFx1NTJkMlx1NGU1MFx1OTZmN1x1OTU2ZFx1ODU3ZVx1NzhjYVx1N2QyZlx1NTEyMVx1NTc5Mlx1NjRj'@;
put 'Mlx1ODA4Ylx1N2M3Ylx1NmNlYVx1NjhmMVx1Njk1ZVx1NTFiN1x1NTM5OFx1NjhhOFx1NzI4MVx1OWVjZVx1N2JmMVx1NzJmOFx1NzliYlx1NmYxM1x1NzQwNlx1Njc0ZVx1OTFjY1x1OWNhNFx1NzkzY1x1ODM4OVx1ODM1NFx1NTQwZlx1NjgxN1x1NGUzZFx1NTM4OVx1NTJiMVx1NzgzZVx1'@;
put 'NTM4Nlx1NTIyOVx1NTA4OFx1NGY4Ylx1NGZkMFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE5Ml0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTkyXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxOTJdW3ZdXT00OTE1Mit2LFRbNDkxNTIrdl09a1sxOTJdW3ZdKTtmb3Ioa1sxOTNdPSJcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc1ZTJcdTdhY2JcdTdjOTJcdTZjYTVcdTk2'@;
put 'YjZcdTUyOWJcdTc0ODNcdTU0ZTlcdTRmZTlcdTgwNTRcdTgzYjJcdThmZGVcdTk1NzBcdTVlYzlcdTYwMWNcdTZkOWZcdTVlMThcdTY1NWJcdTgxMzhcdTk0ZmVcdTYwNGJcdTcwYmNcdTdlYzNcdTdjYWVcdTUxYzlcdTY4ODFcdTdjYjFcdTgyNmZcdTRlMjRcdThmODZcdTkxY2ZcdTY2N2Vc'@;
put 'dTRlYWVcdThjMDVcdTY0YTlcdTgwNGFcdTUwZGFcdTc1OTdcdTcxY2VcdTViZTVcdThmYmRcdTZmNjZcdTRlODZcdTY0ODJcdTk1NjNcdTVlZDZcdTY1OTlcdTUyMTdcdTg4YzJcdTcwYzhcdTUyYTNcdTczMGVcdTc0MzNcdTY3OTdcdTc4ZjdcdTk3MTZcdTRlMzRcdTkwYmJcdTljZGVcdTZk'@;
put 'Y2JcdTUxZGJcdThkNDFcdTU0MWRcdTYyY2VcdTczYjJcdTgzZjFcdTk2ZjZcdTlmODRcdTk0YzNcdTRmMzZcdTdmOWFcdTUxY2NcdTcwNzVcdTk2NzVcdTVjYWRcdTk4ODZcdTUzZTZcdTRlZTRcdTZlOWNcdTc0MDlcdTY5YjRcdTc4NmJcdTk5OGZcdTc1NTlcdTUyMThcdTc2MjRcdTZkNDFc'@;
put 'dTY3ZjNcdTUxNmRcdTlmOTlcdTgwNGJcdTU0OTlcdTdiM2NcdTdhYmZcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxOTNdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE5M11bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTkzXVt2XV09NDk0MDgrdixUWzQ5NDA4K3ZdPWtbMTkzXVt2XSk7Zm9y'@;
put 'KGtbMTk0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5Njg2XHU1Nzg0XHU2'@;
put 'MmUyXHU5NjQ3XHU2OTdjXHU1YTA0XHU2NDAyXHU3YmQzXHU2ZjBmXHU5NjRiXHU4MmE2XHU1MzYyXHU5ODg1XHU1ZTkwXHU3MDg5XHU2M2IzXHU1MzY0XHU4NjRmXHU5YzgxXHU5ZTkzXHU3ODhjXHU5NzMyXHU4ZGVmXHU4ZDQyXHU5ZTdmXHU2ZjVlXHU3OTg0XHU1ZjU1XHU5NjQ2XHU2MjJl'@;
put 'XHU5YTc0XHU1NDE1XHU5NGRkXHU0ZmEzXHU2NWM1XHU1YzY1XHU1YzYxXHU3ZjE1XHU4NjUxXHU2YzJmXHU1ZjhiXHU3Mzg3XHU2ZWU0XHU3ZWZmXHU1Y2U2XHU2MzFiXHU1YjZhXHU2ZWU2XHU1Mzc1XHU0ZTcxXHU2M2EwXHU3NTY1XHU2MmExXHU4ZjZlXHU0ZjI2XHU0ZWQxXHU2Y2E2XHU3'@;
put 'ZWI2XHU4YmJhXHU4NDFkXHU4N2JhXHU3ZjU3XHU5MDNiXHU5NTIzXHU3YmE5XHU5YWExXHU4OGY4XHU4NDNkXHU2ZDFiXHU5YTg2XHU3ZWRjXHU1OTg4XHU5ZWJiXHU3MzliXHU3ODAxXHU4NjgyXHU5YTZjXHU5YTgyXHU1NjFiXHU1NDE3XHU1N2NiXHU0ZTcwXHU5ZWE2XHU1MzU2XHU4ZmM4'@;
put 'XHU4MTA5XHU3NzkyXHU5OTkyXHU4NmVlXHU2ZWUxXHU4NTEzXHU2NmZjXHU2MTYyXHU2ZjJiXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTk0XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxOTRdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzE5NF1bdl1dPTQ5NjY0K3YsVFs0OTY2NCt2XT1r'@;
put 'WzE5NF1bdl0pO2ZvcihrWzE5NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'OGMyOVx1ODI5Mlx1ODMyYlx1NzZmMlx1NmMxM1x1NWZkOVx1ODNiZFx1NzMyYlx1ODMwNVx1OTUxYVx1NmJkYlx1NzdkYlx1OTRjNlx1NTM2Zlx1ODMwMlx1NTE5Mlx1NWUzZFx1OGM4Y1x1OGQzOFx1NGU0OFx1NzNhYlx1Njc5YVx1Njg4NVx1OTE3Nlx1OTcwOVx1NzE2NFx1NmNhMVx1Nzcw'@;
put 'OVx1NWE5Mlx1OTU0MVx1NmJjZlx1N2Y4ZVx1NjYyN1x1NWJkMFx1NTliOVx1NWE5YVx1OTVlOFx1OTVmN1x1NGVlY1x1ODQwY1x1ODQ5OVx1NmFhY1x1NzZkZlx1OTUzMFx1NzMxYlx1NjhhNlx1NWI1Zlx1NzcyZlx1OTE5YVx1OTc2MVx1N2NkY1x1OGZmN1x1OGMxY1x1NWYyNVx1N2M3M1x1'@;
put 'NzlkOFx1ODljNVx1NmNjY1x1ODcxY1x1NWJjNlx1NWU0Mlx1NjhjOVx1NzcyMFx1N2VmNVx1NTE5NVx1NTE0ZFx1NTJjOVx1NWEyOVx1N2YwNVx1OTc2Mlx1ODJkN1x1NjNjZlx1Nzc4NFx1ODVkMFx1NzlkMlx1NmUzYVx1NWU5OVx1NTk5OVx1ODUxMVx1NzA2ZFx1NmMxMVx1NjJiZlx1NzZi'@;
put 'Zlx1NjU0Zlx1NjBhZlx1OTVmZFx1NjYwZVx1ODc5Zlx1OWUyM1x1OTRlZFx1NTQwZFx1NTQ3ZFx1OGMyY1x1NjQ3OFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE5NV0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTk1XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxOTVdW3ZdXT00OTkyMCt2'@;
put 'LFRbNDk5MjArdl09a1sxOTVdW3ZdKTtmb3Ioa1sxOTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdTY0NzlcdTg2MTFcdTZhMjFcdTgxOWNcdTc4ZThcdTY0NjlcdTliNTRcdTYyYjlcdTY3MmJcdTgzYWJcdTU4YThcdTllZDhcdTZjYWJcdTZmMjBcdTViZGVcdTk2NGNcdThjMGJcdTcyNWZcdTY3ZDBcdTYyYzdcdTcyNjFcdTRlYTlcdTU5YzZcdTZiY2RcdTU4OTNcdTY2'@;
put 'YWVcdTVlNTVcdTUyZGZcdTYxNTVcdTY3MjhcdTc2ZWVcdTc3NjZcdTcyNjdcdTdhNDZcdTYyZmZcdTU0ZWFcdTU0NTBcdTk0YTBcdTkwYTNcdTVhMWNcdTdlYjNcdTZjMTZcdTRlNDNcdTU5NzZcdTgwMTBcdTU5NDhcdTUzNTdcdTc1MzdcdTk2YmVcdTU2Y2FcdTYzMjBcdTgxMTFcdTYwN2Nc'@;
put 'dTk1ZjlcdTZkZDZcdTU0NjJcdTk5ODFcdTUxODVcdTVhZTlcdTgwZmRcdTU5YWVcdTk3MTNcdTUwMmFcdTZjZTVcdTVjM2NcdTYyZGZcdTRmNjBcdTUzM2ZcdTgxN2JcdTkwMDZcdTZlYmFcdTg1MmJcdTYyYzhcdTVlNzRcdTc4YmVcdTY0YjVcdTYzN2JcdTVmZjVcdTVhMThcdTkxN2ZcdTll'@;
put 'MWZcdTVjM2ZcdTYzNGZcdTgwNDJcdTViN2RcdTU1NmVcdTk1NGFcdTk1NGRcdTZkODVcdTYwYThcdTY3ZTBcdTcyZGVcdTUxZGRcdTViODFcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxOTZdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzE5Nl1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTk2'@;
put 'XVt2XV09NTAxNzYrdixUWzUwMTc2K3ZdPWtbMTk2XVt2XSk7Zm9yKGtbMTk3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MmU3XHU2Y2RlXHU3MjViXHU2MjZkXHU5NGFlXHU3ZWJkXHU4MTEzXHU2ZDUzXHU1MTljXHU1ZjA0XHU1OTc0XHU1MmFhXHU2MDEyXHU1OTczXHU2Njk2XHU4NjUwXHU3NTlmXHU2MzJhXHU2MWU2XHU3Y2VmXHU4YmZhXHU1NGU2XHU2YjI3XHU5'@;
put 'ZTI1XHU2YmI0XHU4NWQ1XHU1NDU1XHU1MDc2XHU2Y2E0XHU1NTZhXHU4ZGI0XHU3MjJjXHU1ZTE1XHU2MDE1XHU3NDM2XHU2MmNkXHU2MzkyXHU3MjRjXHU1Zjk4XHU2ZTQzXHU2ZDNlXHU2NTAwXHU2ZjU4XHU3NmQ4XHU3OGQwXHU3NmZjXHU3NTU0XHU1MjI0XHU1M2RiXHU0ZTUzXHU1ZTll'@;
put 'XHU2NWMxXHU4MDJhXHU4MGQ2XHU2MjliXHU1NDg2XHU1MjI4XHU3MGFlXHU4ODhkXHU4ZGQxXHU2Y2UxXHU1NDc4XHU4MGRhXHU1N2Y5XHU4OGY0XHU4ZDU0XHU5NjZhXHU5MTRkXHU0ZjY5XHU2YzliXHU1NWI3XHU3NmM2XHU3ODMwXHU2MmE4XHU3MGY5XHU2ZjhlXHU1ZjZkXHU4NGVjXHU2'@;
put 'OGRhXHU3ODdjXHU3YmY3XHU4MWE4XHU2NzBiXHU5ZTRmXHU2MzY3XHU3OGIwXHU1NzZmXHU3ODEyXHU5NzM5XHU2Mjc5XHU2MmFiXHU1Mjg4XHU3NDM1XHU2YmQ3XHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMTk3XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1sxOTddW3ZdLmNoYXJDb2RlQXQo'@;
put 'MCkmJihzZVtrWzE5N11bdl1dPTUwNDMyK3YsVFs1MDQzMit2XT1rWzE5N11bdl0pO2ZvcihrWzE5OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTU2NFx1ODEzZVx1NzViMlx1NzZhZVx1NTMzOVx1NzVkZVx1NTBmYlx1NWM0MVx1OGI2Y1x1N2JjN1x1NTA0Zlx1NzI0N1x1OWE5N1x1OThkOFx1NmYwMlx1NzRlMlx1Nzk2OFx1NjQ4N1x1NzdhNVx1NjJmY1x1OTg5MVx1'@;
put 'OGQyYlx1NTRjMVx1ODA1OFx1NGU1Mlx1NTc2YVx1ODJmOVx1ODQwZFx1NWU3M1x1NTFlZFx1NzRmNlx1OGJjNFx1NWM0Zlx1NTc2MVx1NmNmY1x1OTg4N1x1NWE0Nlx1NzgzNFx1OWI0NFx1OGZlYlx1N2M5NVx1NTI1Nlx1NjI1MVx1OTRmYVx1NGVjNlx1ODM4Nlx1ODQ2MVx1ODNlOVx1ODRi'@;
put 'Mlx1NTdkNFx1NjczNFx1NTcwM1x1NjY2ZVx1NmQ2Nlx1OGMzMVx1NjZkZFx1NzAxMVx1NjcxZlx1NmIzYVx1NjgxNlx1NjIxYVx1NTliYlx1NGUwM1x1NTFjNFx1NmYwNlx1NjdkMlx1NmM4Zlx1NTE3Nlx1NjhjYlx1NTk0N1x1NmI2N1x1NzU2Nlx1NWQwZVx1ODExMFx1OWY1MFx1NjVkN1x1'@;
put 'Nzk0OFx1Nzk0MVx1OWE5MVx1OGQ3N1x1NWM4Mlx1NGU1ZVx1NGYwMVx1NTQyZlx1NTk1MVx1NzgwY1x1NTY2OFx1NmMxNFx1OGZjNFx1NWYwM1x1NmM3ZFx1NmNlM1x1OGJhYlx1NjM5MFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzE5OF0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMTk4XVt2'@;
put 'XS5jaGFyQ29kZUF0KDApJiYoc2Vba1sxOThdW3ZdXT01MDY4OCt2LFRbNTA2ODgrdl09a1sxOThdW3ZdKTtmb3Ioa1sxOTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwNzBcdTZkM2RcdTcyNzVcdTYyNjZcdTk0OGVcdTk0YzVcdTUzNDNcdThmYzFcdTdiN2VcdTRlZGZcdThjMjZcdTRlN2VcdTllZDRcdTk0YjFcdTk0YjNcdTUyNGRcdTZmNWNcdTkwNjNcdTZkNDVc'@;
put 'dThjMzRcdTU4MTFcdTVkNGNcdTZiMjBcdTZiNDlcdTY3YWFcdTU0NWJcdTgxNTRcdTdmOGNcdTU4OTlcdTg1MzdcdTVmM2FcdTYyYTJcdTZhNDdcdTk1MzlcdTY1NzJcdTYwODRcdTY4NjVcdTc3YTdcdTRlNTRcdTRmYThcdTVkZTdcdTk3OThcdTY0YWNcdTdmZDhcdTVjZWRcdTRmY2ZcdTdh'@;
put 'OGRcdTUyMDdcdTgzMDRcdTRlMTRcdTYwMmZcdTdhODNcdTk0YTZcdTRmYjVcdTRlYjJcdTc5ZTZcdTc0MzRcdTUyZTRcdTgyYjlcdTY0ZDJcdTc5YmRcdTViZGRcdTZjODFcdTk3NTJcdThmN2JcdTZjMjJcdTUwM2VcdTUzN2ZcdTZlMDVcdTY0Y2VcdTY2NzRcdTZjMzBcdTYwYzVcdTk4Nzdc'@;
put 'dThiZjdcdTVlODZcdTc0M2NcdTdhNzdcdTc5Y2JcdTRlMThcdTkwYjFcdTc0MDNcdTZjNDJcdTU2ZGFcdTkxNGJcdTZjYzVcdThkOGJcdTUzM2FcdTg2YzZcdTY2ZjJcdThlYWZcdTVjNDhcdTlhNzFcdTZlMjBcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1sxOTldLmxlbmd0aDsrK3YpNjU1'@;
put 'MzMhPT1rWzE5OV1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMTk5XVt2XV09NTA5NDQrdixUWzUwOTQ0K3ZdPWtbMTk5XVt2XSk7Zm9yKGtbMjAwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1M2Q2XHU1YTM2XHU5ZjhiXHU4ZGEzXHU1M2JiXHU1NzA4XHU5OGE3XHU2NzQzXHU5MTliXHU2Y2M5XHU1MTY4XHU3NWNhXHU2MmYzXHU3MmFjXHU1MjM4XHU1MjlkXHU3ZjNh'@;
put 'XHU3MDk0XHU3NjM4XHU1Mzc0XHU5ZTRhXHU2OWI3XHU3ODZlXHU5NmMwXHU4OGQ5XHU3ZmE0XHU3MTM2XHU3MWMzXHU1MTg5XHU2N2QzXHU3NGU0XHU1OGU0XHU2NTE4XHU1NmI3XHU4YmE5XHU5OTc2XHU2MjcwXHU3ZWQ1XHU2MGY5XHU3MGVkXHU1OGVjXHU0ZWMxXHU0ZWJhXHU1ZmNkXHU5'@;
put 'N2U3XHU0ZWZiXHU4YmE0XHU1MjAzXHU1OThhXHU3ZWFiXHU2MjU0XHU0ZWNkXHU2NWU1XHU2MjBlXHU4MzM4XHU4NGM5XHU4MzYzXHU4NzhkXHU3MTk0XHU2ZWI2XHU1YmI5XHU3ZWQyXHU1MTk3XHU2M2M5XHU2N2Q0XHU4MDg5XHU4MzM5XHU4ODE1XHU1MTEyXHU1YjdhXHU1OTgyXHU4ZmIx'@;
put 'XHU0ZTczXHU2YzVkXHU1MTY1XHU4OTI1XHU4ZjZmXHU5NjJlXHU4NTRhXHU3NDVlXHU5NTEwXHU5NWYwXHU2ZGE2XHU4MmU1XHU1ZjMxXHU2NDkyXHU2ZDEyXHU4NDI4XHU4MTZlXHU5Y2MzXHU1ODVlXHU4ZDViXHU0ZTA5XHU1M2MxXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjAwXS5s'@;
put 'ZW5ndGg7Kyt2KTY1NTMzIT09a1syMDBdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIwMF1bdl1dPTUxMjAwK3YsVFs1MTIwMCt2XT1rWzIwMF1bdl0pO2ZvcihrWzIwMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGYxZVx1NjU2M1x1Njg1MVx1NTVkM1x1NGUyN1x1NjQxNFx1OWE5YVx1NjI2Ylx1NWFjMlx1NzQ1Zlx1ODI3Mlx1NmRhOVx1NjhlZVx1NTBlN1x1ODM4'@;
put 'ZVx1NzgwMlx1Njc0MFx1NTIzOVx1NmM5OVx1N2ViMVx1NTBiYlx1NTU2NVx1NzE1ZVx1N2I1Ylx1NjY1Mlx1NzNjYVx1ODJlYlx1Njc0OVx1NWM3MVx1NTIyMFx1NzE3ZFx1ODg2Ylx1OTVlYVx1OTY1NVx1NjRjNVx1OGQ2MVx1ODFiM1x1NTU4NFx1NmM1NVx1NjI0N1x1N2YyZVx1NTg5Mlx1'@;
put 'NGYyNFx1NTU0Nlx1OGQ0Zlx1NjY0Y1x1NGUwYVx1NWMxYVx1ODhmM1x1NjhhMlx1NjM0ZVx1N2EwZFx1NzBlN1x1ODI4ZFx1NTJmYVx1OTdmNlx1NWMxMVx1NTRlOFx1OTBiNVx1N2VjZFx1NTk2Mlx1OGQ0YVx1ODZjN1x1ODIwY1x1ODIwZFx1OGQ2Nlx1NjQ0NFx1NWMwNFx1NjE1MVx1NmQ4'@;
put 'OVx1NzkzZVx1OGJiZVx1NzgzN1x1NzUzM1x1NTQ3Ylx1NGYzOFx1OGVhYlx1NmRmMVx1NWEyMFx1N2VjNVx1Nzk1ZVx1NmM4OFx1NWJhMVx1NWE3Nlx1NzUxYVx1ODBiZVx1NjE0ZVx1NmUxN1x1NThmMFx1NzUxZlx1NzUyNVx1NzI3Mlx1NTM0N1x1N2VmM1x1ZmZmZCIuc3BsaXQoIiIpLHY9'@;
put 'MDt2IT1rWzIwMV0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjAxXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMDFdW3ZdXT01MTQ1Nit2LFRbNTE0NTYrdl09a1syMDFdW3ZdKTtmb3Ioa1syMDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3MDFcdTc2ZGJcdTUyNjlcdTgwZGNcdTU3MjNcdTVlMDhcdTU5MzFcdTcyZWVcdTY1YmRcdTZlN2ZcdThiZDdcdTVjMzhcdTg2'@;
put 'NzFcdTUzNDFcdTc3ZjNcdTYyZmVcdTY1ZjZcdTRlYzBcdTk4ZGZcdTg2ODBcdTViOWVcdThiYzZcdTUzZjJcdTc3ZTJcdTRmN2ZcdTVjNGVcdTlhNzZcdTU5Y2JcdTVmMGZcdTc5M2FcdTU4ZWJcdTRlMTZcdTY3ZmZcdTRlOGJcdTYyZWRcdThhOTNcdTkwMWRcdTUyYmZcdTY2MmZcdTU1ZGNc'@;
put 'dTU2NmNcdTkwMDJcdTRlZDVcdTRmOGRcdTkxY2FcdTk5NzBcdTZjMGZcdTVlMDJcdTYwNDNcdTViYTRcdTg5YzZcdThiZDVcdTY1MzZcdTYyNGJcdTk5OTZcdTViODhcdTViZmZcdTYzODhcdTU1MmVcdTUzZDdcdTc2MjZcdTUxN2RcdTg1MmNcdTY3YTJcdTY4YjNcdTZiOGFcdTYyOTJcdThm'@;
put 'OTNcdTUzZDRcdTgyMTJcdTZkZDFcdTc1OGZcdTRlNjZcdThkNGVcdTViNzBcdTcxOWZcdTg1YWZcdTY2OTFcdTY2ZDlcdTdmNzJcdTg3MDBcdTllY2RcdTlmMjBcdTVjNWVcdTY3MmZcdThmZjBcdTY4MTFcdTY3NWZcdTYyMGRcdTdhZDZcdTU4ODVcdTVlYjZcdTY1NzBcdTZmMzFcdWZmZmQi'@;
put 'LnNwbGl0KCIiKSx2PTA7diE9a1syMDJdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIwMl1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjAyXVt2XV09NTE3MTIrdixUWzUxNzEyK3ZdPWtbMjAyXVt2XSk7Zm9yKGtbMjAzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MDU1XHU1MjM3XHU4MDBkXHU2NDU0XHU4ODcwXHU3NTI5XHU1ZTA1XHU2ODEzXHU2MmY0XHU5NzFjXHU1'@;
put 'M2NjXHU3MjNkXHU4YzAxXHU2YzM0XHU3NzYxXHU3YTBlXHU1NDJlXHU3N2FjXHU5ODdhXHU4MjFjXHU4YmY0XHU3ODU1XHU2NzE0XHU3MGMxXHU2NWFmXHU2NDk1XHU1NjM2XHU2MDFkXHU3OWMxXHU1M2Y4XHU0ZTFkXHU2YjdiXHU4MDg2XHU1YmZhXHU1NWUzXHU1NmRiXHU0ZjNhXHU0ZjNj'@;
put 'XHU5OTcyXHU1ZGYzXHU2NzdlXHU4MDM4XHU2MDAyXHU5ODgyXHU5MDAxXHU1YjhiXHU4YmJjXHU4YmY1XHU2NDFjXHU4MjU4XHU2NGRlXHU1NWZkXHU4MmNmXHU5MTY1XHU0ZmQ3XHU3ZDIwXHU5MDFmXHU3YzlmXHU1MGYzXHU1ODUxXHU2ZWFmXHU1YmJmXHU4YmM5XHU4MDgzXHU5MTc4XHU4'@;
put 'NDljXHU3Yjk3XHU4NjdkXHU5NjhiXHU5NjhmXHU3ZWU1XHU5YWQzXHU3ODhlXHU1YzgxXHU3YTU3XHU5MDQyXHU5NmE3XHU3OTVmXHU1YjU5XHU2MzVmXHU3YjBiXHU4NGQxXHU2OGFkXHU1NTA2XHU3ZjI5XHU3NDEwXHU3ZDIyXHU5NTAxXHU2MjQwXHU1ODRjXHU0ZWQ2XHU1YjgzXHU1OTc5'@;
put 'XHU1ODU0XHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjAzXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMDNdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIwM11bdl1dPTUxOTY4K3YsVFs1MTk2OCt2XT1rWzIwM11bdl0pO2ZvcihrWzIwNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzM2ZFx1NjMxZVx1OGU0Ylx1OGUwZlx1ODBjZVx1ODJkNFx1NjJhY1x1NTNmMFx1'@;
put 'NmNmMFx1OTE1ZVx1NTkyYVx1NjAwMVx1NmM3MFx1NTc0ZFx1NjQ0YVx1OGQyYVx1NzYyYlx1NmVlOVx1NTc1Ylx1NmE4MFx1NzVmMFx1NmY2ZFx1OGMyZFx1OGMwOFx1NTc2Nlx1NmJlZlx1ODg5Mlx1NzhiM1x1NjNhMlx1NTNmOVx1NzBhZFx1NmM2NFx1NTg1OFx1NjQyYVx1NTgwMlx1Njhl'@;
put 'MFx1ODE5Ylx1NTUxMFx1N2NkNlx1NTAxOFx1OGViYVx1NmRjY1x1OGQ5Zlx1NzBlYlx1NjM4Zlx1NmQ5Ylx1NmVkNFx1N2VlNlx1ODQwNFx1Njg0M1x1OTAwM1x1NmRkOFx1OTY3Nlx1OGJhOFx1NTk1N1x1NzI3OVx1ODVlNFx1ODE3ZVx1NzViY1x1OGE4YVx1NjhhZlx1NTI1NFx1OGUyMlx1'@;
put 'OTUxMVx1NjNkMFx1OTg5OFx1OGU0NFx1NTU3Y1x1NGY1M1x1NjZmZlx1NTY4Zlx1NjBkNVx1NmQ5NVx1NTI0M1x1NWM0OVx1NTkyOVx1NmRmYlx1NTg2Ylx1NzUzMFx1NzUxY1x1NjA2Y1x1ODIxNFx1ODE0Nlx1NjMxMVx1Njc2MVx1OGZlMlx1NzczYVx1OGRmM1x1OGQzNFx1OTRjMVx1NWUx'@;
put 'Nlx1NTM4NVx1NTQyY1x1NzBjM1x1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIwNF0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjA0XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMDRdW3ZdXT01MjIyNCt2LFRbNTIyMjQrdl09a1syMDRdW3ZdKTtmb3Ioa1syMDVdPSJcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZjNDBcdTVlZjdcdTUwNWNcdTRlYWRcdTVlYWRcdTYzM2Fc'@;
put 'dTgyNDdcdTkwMWFcdTY4NTBcdTkxNmVcdTc3YjNcdTU0MGNcdTk0ZGNcdTVmNjRcdTdhZTVcdTY4NzZcdTYzNDVcdTdiNTJcdTdlZGZcdTc1ZGJcdTUwNzdcdTYyOTVcdTU5MzRcdTkwMGZcdTUxZjhcdTc5YzNcdTdhODFcdTU2ZmVcdTVmOTJcdTkwMTRcdTZkODJcdTVjNjBcdTU3MWZcdTU0'@;
put 'MTBcdTUxNTRcdTZlNGRcdTU2ZTJcdTYzYThcdTk4OTNcdTgxN2ZcdTg3MTVcdTg5MmFcdTkwMDBcdTU0MWVcdTVjNmZcdTgxYzBcdTYyZDZcdTYyNThcdTgxMzFcdTllMzVcdTk2NDBcdTlhNmVcdTlhN2NcdTY5MmRcdTU5YTVcdTYyZDNcdTU1M2VcdTYzMTZcdTU0YzdcdTg2ZDlcdTZkM2Nc'@;
put 'dTVhMDNcdTc0ZTZcdTg4OWNcdTZiNmFcdTU5MTZcdThjNGNcdTVmMmZcdTZlN2VcdTczYTlcdTk4N2RcdTRlMzhcdTcwZjdcdTViOGNcdTc4OTdcdTYzM2RcdTY2NWFcdTc2OTZcdTYwY2JcdTViOWJcdTVhNDlcdTRlMDdcdTgxNTVcdTZjNmFcdTczOGJcdTRlYTFcdTY3ODlcdTdmNTFcdTVm'@;
put 'ODBcdTY1ZmFcdTY3MWJcdTVmZDhcdTU5ODRcdTVhMDFcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMDVdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIwNV1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjA1XVt2XV09NTI0ODArdixUWzUyNDgwK3ZdPWtbMjA1XVt2XSk7Zm9yKGtbMjA2XT0i'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZGNkXHU1ZmFlXHU1MzcxXHU5N2U2'@;
put 'XHU4ZmRkXHU2ODQ1XHU1NmY0XHU1NTJmXHU2MGRmXHU0ZTNhXHU2ZjRkXHU3ZWY0XHU4MmM3XHU4NDBlXHU1OWQ0XHU0ZjFmXHU0ZjJhXHU1YzNlXHU3ZWFjXHU2NzJhXHU4NTFhXHU1NDczXHU3NTRmXHU4MGMzXHU1NTgyXHU5YjRmXHU0ZjRkXHU2ZTJkXHU4YzEzXHU1YzA5XHU2MTcwXHU1'@;
put 'MzZiXHU3NjFmXHU2ZTI5XHU4NjhhXHU2NTg3XHU5NWZiXHU3ZWI5XHU1NDNiXHU3YTMzXHU3ZDBhXHU5NWVlXHU1NWUxXHU3ZmMxXHU3NGVlXHU2MzFkXHU4NzE3XHU2ZGExXHU3YTlkXHU2MjExXHU2NWExXHU1MzY3XHU2M2UxXHU2YzgzXHU1ZGViXHU1NDVjXHU5NGE4XHU0ZTRjXHU2YzYx'@;
put 'XHU4YmVjXHU1YzRiXHU2NWUwXHU4MjljXHU2OGE3XHU1NDNlXHU1NDM0XHU2YmNiXHU2YjY2XHU0ZTk0XHU2MzQyXHU1MzQ4XHU4MjFlXHU0ZjBkXHU0ZmFlXHU1NzVlXHU2MjBhXHU5NmZlXHU2NjY0XHU3MjY5XHU1MmZmXHU1MmExXHU2MDlmXHU4YmVmXHU2NjE0XHU3MTk5XHU2NzkwXHU4'@;
put 'OTdmXHU3ODUyXHU3N2ZkXHU2NjcwXHU1NjNiXHU1NDM4XHU5NTIxXHU3MjdhXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjA2XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMDZdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIwNl1bdl1dPTUyNzM2K3YsVFs1MjczNit2XT1rWzIwNl1bdl0p'@;
put 'O2ZvcihrWzIwN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2EwMFx1NjA2'@;
put 'Zlx1NWUwY1x1NjA4OVx1ODE5ZFx1NTkxNVx1NjBkY1x1NzE4NFx1NzBlZlx1NmVhYVx1NmM1MFx1NzI4MFx1NmE4NFx1ODhhZFx1NWUyZFx1NGU2MFx1NWFiM1x1NTU5Y1x1OTRlM1x1NmQxN1x1N2NmYlx1OTY5OVx1NjIwZlx1N2VjNlx1Nzc4ZVx1ODY3ZVx1NTMyM1x1OTcxZVx1OGY5Nlx1'@;
put 'NjY4N1x1NWNlMVx1NGZhMFx1NzJlZFx1NGUwYlx1NTNhNlx1NTkwZlx1NTQxM1x1NjM4MFx1OTUyOFx1NTE0OFx1NGVkOVx1OWM5Y1x1N2VhNFx1NTRiOFx1OGQyNFx1ODg1NFx1ODIzN1x1OTVmMlx1NmQ4ZVx1NWYyNlx1NWFjY1x1NjYzZVx1OTY2OVx1NzNiMFx1NzMyZVx1NTNiZlx1ODE3'@;
put 'YVx1OTk4NVx1N2ZhMVx1NWJhYVx1OTY3N1x1OTY1MFx1N2ViZlx1NzZmOFx1NTNhMlx1OTU3Nlx1OTk5OVx1N2JiMVx1ODk0NFx1NmU1OFx1NGU2MVx1N2ZkNFx1Nzk2NVx1OGJlNlx1NjBmM1x1NTRjZFx1NGVhYlx1OTg3OVx1NWRmN1x1NmE2MVx1NTBjZlx1NTQxMVx1OGM2MVx1ODQyN1x1'@;
put 'Nzg1ZFx1OTcwNFx1NTI0YVx1NTRlZVx1NTZhM1x1OTUwMFx1NmQ4OFx1NWJiNVx1NmRjNlx1NjY1M1x1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIwN10ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjA3XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMDddW3ZdXT01Mjk5Mit2LFRbNTI5OTIr'@;
put 'dl09a1syMDddW3ZdKTtmb3Ioa1syMDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdTVjMGZcdTViNWRcdTY4MjFcdTgwOTZcdTU1NzhcdTdiMTFcdTY1NDhcdTY5NTRcdTRlOWJcdTZiNDdcdTg3NGVcdTk3OGJcdTUzNGZcdTYzMWZcdTY0M2FcdTkwYWFcdTY1OWNcdTgwYzFcdThjMTBcdTUxOTlcdTY4YjBcdTUzNzhcdTg3ZjlcdTYxYzhcdTZjYzRcdTZjZmJcdThjMjJc'@;
put 'dTVjNTFcdTg1YWFcdTgyYWZcdTk1MGNcdTZiMjNcdThmOWJcdTY1YjBcdTVmZmJcdTVmYzNcdTRmZTFcdTg4NDVcdTY2MWZcdTgxNjVcdTczMjlcdTYwZmFcdTUxNzRcdTUyMTFcdTU3OGJcdTVmNjJcdTkwYTJcdTg4NGNcdTkxOTJcdTVlNzhcdTY3NGZcdTYwMjdcdTU5ZDNcdTUxNDRcdTUx'@;
put 'ZjZcdTgwZjhcdTUzMDhcdTZjNzlcdTk2YzRcdTcxOGFcdTRmMTFcdTRmZWVcdTdmOWVcdTY3M2RcdTU1YzVcdTk1MDhcdTc5YzBcdTg4OTZcdTdlZTNcdTU4OWZcdTYyMGNcdTk3MDBcdTg2NWFcdTU2MThcdTk4N2JcdTVmOTBcdThiYjhcdTg0YzRcdTkxNTdcdTUzZDlcdTY1ZWRcdTVlOGZc'@;
put 'dTc1NWNcdTYwNjRcdTdkNmVcdTVhN2ZcdTdlZWFcdTdlZWRcdThmNjlcdTU1YTdcdTViYTNcdTYwYWNcdTY1Y2JcdTczODRcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMDhdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIwOF1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjA4XVt2XV09NTMy'@;
put 'NDgrdixUWzUzMjQ4K3ZdPWtbMjA4XVt2XSk7Zm9yKGtbMjA5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHU5MDA5XHU3NjYzXHU3NzI5XHU3ZWRhXHU5Nzc0XHU4NTliXHU1YjY2XHU3YTc0XHU5NmVhXHU4ODQwXHU1MmNiXHU3MThmXHU1ZmFhXHU2NWVjXHU4YmUyXHU1YmZiXHU5YTZmXHU1ZGUxXHU2Yjg5XHU2YzViXHU4YmFkXHU4YmFmXHU5MDBhXHU4ZmM1XHU1Mzhi'@;
put 'XHU2MmJjXHU5ZTI2XHU5ZTJkXHU1NDQwXHU0ZTJiXHU4MmJkXHU3MjU5XHU4NjljXHU1ZDE2XHU4ODU5XHU2ZGFmXHU5NmM1XHU1NGQxXHU0ZTlhXHU4YmI2XHU3MTA5XHU1NGJkXHU5NjA5XHU3MGRmXHU2ZGY5XHU3NmQwXHU0ZTI1XHU3ODE0XHU4NzEyXHU1Y2E5XHU1ZWY2XHU4YTAwXHU5'@;
put 'ODljXHU5NjBlXHU3MDhlXHU2Y2JmXHU1OTQ0XHU2M2E5XHU3NzNjXHU4ODRkXHU2ZjE0XHU4MjczXHU1ODMwXHU3MWQ1XHU1MzhjXHU3ODFhXHU5NmMxXHU1NTAxXHU1ZjY2XHU3MTMwXHU1YmI0XHU4YzFhXHU5YThjXHU2YjgzXHU1OTJlXHU5ZTJmXHU3OWU3XHU2NzY4XHU2MjZjXHU0ZjZm'@;
put 'XHU3NWExXHU3ZjhhXHU2ZDBiXHU5NjMzXHU2YzI3XHU0ZWYwXHU3NWQyXHU1MTdiXHU2ODM3XHU2ZjNlXHU5MDgwXHU4MTcwXHU1OTk2XHU3NDc2XHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjA5XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMDldW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtr'@;
put 'WzIwOV1bdl1dPTUzNTA0K3YsVFs1MzUwNCt2XT1rWzIwOV1bdl0pO2ZvcihrWzIxMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjQ0N1x1NWMyN1x1OTA2NVx1N2E5MVx1OGMyM1x1NTlkYVx1NTRhY1x1ODIwMFx1ODM2Zlx1ODk4MVx1ODAwMFx1NjkzMFx1NTY0ZVx1ODAzNlx1NzIzN1x1OTFjZVx1NTFiNlx1NGU1Zlx1OTg3NVx1NjM5Nlx1NGUxYVx1NTNmNlx1NjZm'@;
put 'M1x1ODE0Ylx1NTkxY1x1NmRiMlx1NGUwMFx1NThmOVx1NTMzYlx1NjNkNlx1OTRmMVx1NGY5ZFx1NGYwYVx1ODg2M1x1OTg5MFx1NTkzN1x1OTA1N1x1NzlmYlx1NGVlYVx1ODBmMFx1NzU5MVx1NmM4Mlx1NWI5Y1x1NTllOFx1NWY1ZFx1NjkwNVx1ODY4MVx1NTAxYVx1NWRmMlx1NGU1OVx1'@;
put 'NzdlM1x1NGVlNVx1ODI3YVx1NjI5MVx1NjYxM1x1OTA5MVx1NWM3OVx1NGViZlx1NWY3OVx1ODFjNlx1OTAzOFx1ODA4NFx1NzVhYlx1NGVhNlx1ODhkNFx1NjEwZlx1NmJjNVx1NWZjNlx1NGU0OVx1NzZjYVx1NmVhMlx1OGJlM1x1OGJhZVx1OGMwYVx1OGJkMVx1NWYwMlx1N2ZmY1x1N2Zj'@;
put 'Y1x1N2VjZVx1ODMzNVx1ODM2Ylx1NTZlMFx1NmJiN1x1OTdmM1x1OTYzNFx1NTlmYlx1NTQxZlx1OTRmNlx1NmRlYlx1NWJjNVx1OTk2ZVx1NWMzOVx1NWYxNVx1OTY5MFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIxMF0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjEwXVt2XS5jaGFyQ29k'@;
put 'ZUF0KDApJiYoc2Vba1syMTBdW3ZdXT01Mzc2MCt2LFRbNTM3NjArdl09a1syMTBdW3ZdKTtmb3Ioa1syMTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUzNzBcdTgyZjFcdTZhMzFcdTVhNzRcdTllNzBcdTVlOTRcdTdmMjhcdTgzYjlcdTg0MjRcdTg0MjVcdTgzNjdcdTg3NDdcdThmY2VcdThkNjJcdTc2YzhcdTVmNzFcdTk4OTZcdTc4NmNcdTY2MjBcdTU0ZGZcdTYy'@;
put 'ZTVcdTRmNjNcdTgxYzNcdTc1YzhcdTVlYjhcdTk2Y2RcdThlMGFcdTg2ZjlcdTU0OGZcdTZjZjNcdTZkOGNcdTZjMzhcdTYwN2ZcdTUyYzdcdTc1MjhcdTVlN2RcdTRmMThcdTYwYTBcdTVmZTdcdTVjMjRcdTc1MzFcdTkwYWVcdTk0YzBcdTcyYjlcdTZjYjlcdTZlMzhcdTkxNDlcdTY3MDlc'@;
put 'dTUzY2JcdTUzZjNcdTRmNTFcdTkxYzlcdThiZjFcdTUzYzhcdTVlN2NcdThmYzJcdTZkZTRcdTRlOGVcdTc2YzJcdTY5ODZcdTg2NWVcdTYxMWFcdTgyMDZcdTRmNTlcdTRmZGVcdTkwM2VcdTljN2NcdTYxMDlcdTZlMWRcdTZlMTRcdTk2ODVcdTRlODhcdTVhMzFcdTk2ZThcdTRlMGVcdTVj'@;
put 'N2ZcdTc5YjlcdTViODdcdThiZWRcdTdmYmRcdTczODlcdTU3ZGZcdTgyOGJcdTkwYzFcdTU0MDFcdTkwNDdcdTU1YmJcdTVjZWFcdTVmYTFcdTYxMDhcdTZiMzJcdTcyZjFcdTgwYjJcdThhODlcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMTFdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIx'@;
put 'MV1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjExXVt2XV09NTQwMTYrdixUWzU0MDE2K3ZdPWtbMjExXVt2XSk7Zm9yKGtbMjEyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZDc0XHU1YmQzXHU4OGQ1XHU5ODg0XHU4YzZiXHU5YTZkXHU5ZTMzXHU2ZTBhXHU1MWE0XHU1MTQzXHU1N2EzXHU4ODgxXHU1MzlmXHU2M2Y0XHU4Zjk1XHU1NmVkXHU1NDU4XHU1NzA2XHU3'@;
put 'MzNmXHU2ZTkwXHU3ZjE4XHU4ZmRjXHU4MmQxXHU2MTNmXHU2MDI4XHU5NjYyXHU2NmYwXHU3ZWE2XHU4ZDhhXHU4ZGMzXHU5NGE1XHU1Y2IzXHU3Y2E0XHU2NzA4XHU2MGE2XHU5NjA1XHU4MDE4XHU0ZTkxXHU5MGU3XHU1MzAwXHU5NjY4XHU1MTQxXHU4ZmQwXHU4NTc0XHU5MTVkXHU2NjU1'@;
put 'XHU5N2Y1XHU1YjU1XHU1MzFkXHU3ODM4XHU2NzQyXHU2ODNkXHU1NGM5XHU3MDdlXHU1YmIwXHU4ZjdkXHU1MThkXHU1NzI4XHU1NGIxXHU2NTEyXHU2NjgyXHU4ZDVlXHU4ZDQzXHU4MTBmXHU4NDZjXHU5MDZkXHU3Y2RmXHU1MWZmXHU4NWZiXHU2N2EzXHU2NWU5XHU2ZmExXHU4NmE0XHU4'@;
put 'ZTgxXHU1NjZhXHU5MDIwXHU3NjgyXHU3MDc2XHU3MWU1XHU4ZDIzXHU2MmU5XHU1MjE5XHU2Y2ZkXHU4ZDNjXHU2MDBlXHU1ODllXHU2MThlXHU2NmZlXHU4ZDYwXHU2MjRlXHU1NWIzXHU2ZTIzXHU2NzJkXHU4ZjY3XHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjEyXS5sZW5ndGg7Kyt2'@;
put 'KTY1NTMzIT09a1syMTJdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIxMl1bdl1dPTU0MjcyK3YsVFs1NDI3Mit2XT1rWzIxMl1bdl0pO2ZvcihrWzIxM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTRlMVx1OTVmOFx1NzcyOFx1NjgwNVx1NjlhOFx1NTQ4Ylx1NGU0ZFx1NzBiOFx1OGJjOFx1NjQ1OFx1NjU4Ylx1NWI4NVx1N2E4NFx1NTAzYVx1NWJlOFx1NzdiYlx1'@;
put 'NmJlMVx1OGE3OVx1N2M5OFx1NmNiZVx1NzZjZlx1NjVhOVx1OGY5N1x1NWQyZFx1NWM1NVx1ODYzOFx1NjgwOFx1NTM2MFx1NjIxOFx1N2FkOVx1NmU1Ylx1N2VmZFx1NmExZlx1N2FlMFx1NWY3MFx1NmYzM1x1NWYyMFx1NjM4Y1x1NmRhOFx1Njc1Nlx1NGUwOFx1NWUxMFx1OGQyNlx1NGVk'@;
put 'N1x1ODBjMFx1NzYzNFx1OTY5Y1x1NjJkYlx1NjYyZFx1NjI3ZVx1NmNiY1x1OGQ3NVx1NzE2N1x1N2Y2OVx1NTE0Nlx1ODA4N1x1NTNlY1x1OTA2ZVx1NjI5OFx1NTRmMlx1ODZmMFx1OGY5OVx1ODAwNVx1OTUxN1x1ODUxN1x1OGZkOVx1NmQ1OVx1NzNjZFx1NjU5Zlx1NzcxZlx1NzUwNFx1'@;
put 'NzgyN1x1ODFmYlx1OGQxZVx1OTQ4OFx1NGZhNlx1Njc5NVx1NzViOVx1OGJjYVx1OTcwN1x1NjMyZlx1OTU0N1x1OTYzNVx1ODRiOFx1NjMyM1x1Nzc0MVx1NWY4MVx1NzJmMFx1NGU4OVx1NjAxNFx1NjU3NFx1NjJlZlx1NmI2M1x1NjUzZlx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIx'@;
put 'M10ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjEzXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMTNdW3ZdXT01NDUyOCt2LFRbNTQ1Mjgrdl09a1syMTNdW3ZdKTtmb3Ioa1syMTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVlMjdcdTc1YzdcdTkwZDFcdThiYzFcdTgyOWRcdTY3OWRcdTY1MmZcdTU0MzFcdTg3MThcdTc3ZTVcdTgwYTJcdTgxMDJcdTZjNDFcdTRlNGJc'@;
put 'dTdlYzdcdTgwNGNcdTc2ZjRcdTY5MGRcdTZiOTZcdTYyNjdcdTUwM2NcdTRmODRcdTU3NDBcdTYzMDdcdTZiNjJcdThkYmVcdTUzZWFcdTY1ZThcdTdlYjhcdTVmZDdcdTYzMWFcdTYzYjdcdTgxZjNcdTgxZjRcdTdmNmVcdTVlMWNcdTVjZDlcdTUyMzZcdTY2N2FcdTc5ZTlcdTdhMWFcdThk'@;
put 'MjhcdTcwOTlcdTc1ZDRcdTZlZGVcdTZjYmJcdTdhOTJcdTRlMmRcdTc2YzVcdTVmZTBcdTk0OWZcdTg4NzdcdTdlYzhcdTc5Y2RcdTgwYmZcdTkxY2RcdTRlZjJcdTRmMTdcdTgyMWZcdTU0NjhcdTVkZGVcdTZkMzJcdThiY2NcdTdjYTVcdThmNzRcdTgwOThcdTVlMWFcdTU0OTJcdTc2YjFc'@;
put 'dTViOTlcdTY2M2NcdTlhYTRcdTczZTBcdTY4MmFcdTg2ZGJcdTY3MzFcdTczMmFcdThiZjhcdThiZGJcdTkwMTBcdTdhZjlcdTcwZGJcdTcxNmVcdTYyYzRcdTc3YTlcdTU2MzFcdTRlM2JcdTg0NTdcdTY3ZjFcdTUyYTlcdTg2YzBcdThkMmVcdTk0ZjhcdTdiNTFcdWZmZmQiLnNwbGl0KCIi'@;
put 'KSx2PTA7diE9a1syMTRdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIxNF1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjE0XVt2XV09NTQ3ODQrdixUWzU0Nzg0K3ZdPWtbMjE0XVt2XSk7Zm9yKGtbMjE1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZjRmXHU2Y2U4XHU3OTVkXHU5YTdiXHU2MjkzXHU3MjJhXHU2MmZkXHU0ZTEzXHU3ODE2XHU4ZjZjXHU2NGIwXHU4ZDVh'@;
put 'XHU3YmM2XHU2ODY5XHU1ZTg0XHU4OGM1XHU1OTg2XHU2NDllXHU1OGVlXHU3MmI2XHU2OTBlXHU5NTI1XHU4ZmZkXHU4ZDU4XHU1NzYwXHU3ZjAwXHU4YzA2XHU1MWM2XHU2MzQ5XHU2MmQ5XHU1MzUzXHU2ODRjXHU3NDIyXHU4MzAxXHU5MTRjXHU1NTQ0XHU3NzQwXHU3MDdjXHU2ZDRhXHU1'@;
put 'MTc5XHU1NGE4XHU4ZDQ0XHU1OWZmXHU2ZWNiXHU2ZGM0XHU1YjVjXHU3ZDJiXHU0ZWQ0XHU3YzdkXHU2ZWQzXHU1YjUwXHU4MWVhXHU2ZTBkXHU1YjU3XHU5YjAzXHU2OGQ1XHU4ZTJhXHU1Yjk3XHU3ZWZjXHU2MDNiXHU3ZWI1XHU5MGI5XHU4ZDcwXHU1OTRmXHU2M2NkXHU3OWRmXHU4ZGIz'@;
put 'XHU1MzUyXHU2NWNmXHU3OTU2XHU4YmM1XHU5NjNiXHU3ZWM0XHU5NGJiXHU3ZTgyXHU1NjM0XHU5MTg5XHU2NzAwXHU3ZjZhXHU1YzBhXHU5MDc1XHU2NjI4XHU1ZGU2XHU0ZjUwXHU2N2RlXHU1MDVhXHU0ZjVjXHU1NzUwXHU1ZWE3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjE1XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMTVdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIxNV1bdl1dPTU1MDQwK3YsVFs1NTA0MCt2XT1rWzIxNV1bdl0pO2ZvcihrWzIxNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGU4ZFx1NGUwY1x1NTE0MFx1NGUxMFx1NWVmZlx1NTM0NVx1NGUxNVx1NGU5OFx1NGUxZVx1OWIz'@;
put 'Mlx1NWI2Y1x1NTY2OVx1NGUyOFx1NzliYVx1NGUzZlx1NTMxNVx1NGU0N1x1NTkyZFx1NzIzYlx1NTM2ZVx1NmMxMFx1NTZkZlx1ODBlNFx1OTk5N1x1NmJkM1x1Nzc3ZVx1OWYxN1x1NGUzNlx1NGU5Zlx1OWYxMFx1NGU1Y1x1NGU2OVx1NGU5M1x1ODI4OFx1NWI1Ylx1NTU2Y1x1NTYwZlx1'@;
put 'NGVjNFx1NTM4ZFx1NTM5ZFx1NTNhM1x1NTNhNVx1NTNhZVx1OTc2NVx1OGQ1ZFx1NTMxYVx1NTNmNVx1NTMyNlx1NTMyZVx1NTMzZVx1OGQ1Y1x1NTM2Nlx1NTM2M1x1NTIwMlx1NTIwOFx1NTIwZVx1NTIyZFx1NTIzM1x1NTIzZlx1NTI0MFx1NTI0Y1x1NTI1ZVx1NTI2MVx1NTI1Y1x1ODRh'@;
put 'Zlx1NTI3ZFx1NTI4Mlx1NTI4MVx1NTI5MFx1NTI5M1x1NTE4Mlx1N2Y1NFx1NGViYlx1NGVjM1x1NGVjOVx1NGVjMlx1NGVlOFx1NGVlMVx1NGVlYlx1NGVkZVx1NGYxYlx1NGVmM1x1NGYyMlx1NGY2NFx1NGVmNVx1NGYyNVx1NGYyN1x1NGYwOVx1NGYyYlx1NGY1ZVx1NGY2N1x1NjUzOFx1'@;
put 'NGY1YVx1NGY1ZFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIxNl0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjE2XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMTZdW3ZdXT01NTI5Nit2LFRbNTUyOTYrdl09a1syMTZdW3ZdKTtmb3Ioa1syMTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmNWZcdTRmNTdcdTRmMzJcdTRmM2RcdTRmNzZcdTRmNzRcdTRmOTFcdTRm'@;
put 'ODlcdTRmODNcdTRmOGZcdTRmN2VcdTRmN2JcdTRmYWFcdTRmN2NcdTRmYWNcdTRmOTRcdTRmZTZcdTRmZThcdTRmZWFcdTRmYzVcdTRmZGFcdTRmZTNcdTRmZGNcdTRmZDFcdTRmZGZcdTRmZjhcdTUwMjlcdTUwNGNcdTRmZjNcdTUwMmNcdTUwMGZcdTUwMmVcdTUwMmRcdTRmZmVcdTUwMWNc'@;
put 'dTUwMGNcdTUwMjVcdTUwMjhcdTUwN2VcdTUwNDNcdTUwNTVcdTUwNDhcdTUwNGVcdTUwNmNcdTUwN2JcdTUwYTVcdTUwYTdcdTUwYTlcdTUwYmFcdTUwZDZcdTUxMDZcdTUwZWRcdTUwZWNcdTUwZTZcdTUwZWVcdTUxMDdcdTUxMGJcdTRlZGRcdTZjM2RcdTRmNThcdTRmNjVcdTRmY2VcdTlm'@;
put 'YTBcdTZjNDZcdTdjNzRcdTUxNmVcdTVkZmRcdTllYzlcdTk5OThcdTUxODFcdTU5MTRcdTUyZjlcdTUzMGRcdThhMDdcdTUzMTBcdTUxZWJcdTU5MTlcdTUxNTVcdTRlYTBcdTUxNTZcdTRlYjNcdTg4NmVcdTg4YTRcdTRlYjVcdTgxMTRcdTg4ZDJcdTc5ODBcdTViMzRcdTg4MDNcdTdmYjhc'@;
put 'dTUxYWJcdTUxYjFcdTUxYmRcdTUxYmNcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMTddLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIxN11bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjE3XVt2XV09NTU1NTIrdixUWzU1NTUyK3ZdPWtbMjE3XVt2XSk7Zm9yKGtbMjE4XT0iXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MWM3XHU1MTk2XHU1MWEyXHU1MWE1XHU4YmEwXHU4'@;
put 'YmE2XHU4YmE3XHU4YmFhXHU4YmI0XHU4YmI1XHU4YmI3XHU4YmMyXHU4YmMzXHU4YmNiXHU4YmNmXHU4YmNlXHU4YmQyXHU4YmQzXHU4YmQ0XHU4YmQ2XHU4YmQ4XHU4YmQ5XHU4YmRjXHU4YmRmXHU4YmUwXHU4YmU0XHU4YmU4XHU4YmU5XHU4YmVlXHU4YmYwXHU4YmYzXHU4YmY2XHU4YmY5'@;
put 'XHU4YmZjXHU4YmZmXHU4YzAwXHU4YzAyXHU4YzA0XHU4YzA3XHU4YzBjXHU4YzBmXHU4YzExXHU4YzEyXHU4YzE0XHU4YzE1XHU4YzE2XHU4YzE5XHU4YzFiXHU4YzE4XHU4YzFkXHU4YzFmXHU4YzIwXHU4YzIxXHU4YzI1XHU4YzI3XHU4YzJhXHU4YzJiXHU4YzJlXHU4YzJmXHU4YzMyXHU4'@;
put 'YzMzXHU4YzM1XHU4YzM2XHU1MzY5XHU1MzdhXHU5NjFkXHU5NjIyXHU5NjIxXHU5NjMxXHU5NjJhXHU5NjNkXHU5NjNjXHU5NjQyXHU5NjQ5XHU5NjU0XHU5NjVmXHU5NjY3XHU5NjZjXHU5NjcyXHU5Njc0XHU5Njg4XHU5NjhkXHU5Njk3XHU5NmIwXHU5MDk3XHU5MDliXHU5MDlkXHU5MDk5'@;
put 'XHU5MGFjXHU5MGExXHU5MGI0XHU5MGIzXHU5MGI2XHU5MGJhXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjE4XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMThdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIxOF1bdl1dPTU1ODA4K3YsVFs1NTgwOCt2XT1rWzIxOF1bdl0pO2ZvcihrWzIx'@;
put 'OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTBiOFx1OTBiMFx1OTBjZlx1'@;
put 'OTBjNVx1OTBiZVx1OTBkMFx1OTBjNFx1OTBjN1x1OTBkM1x1OTBlNlx1OTBlMlx1OTBkY1x1OTBkN1x1OTBkYlx1OTBlYlx1OTBlZlx1OTBmZVx1OTEwNFx1OTEyMlx1OTExZVx1OTEyM1x1OTEzMVx1OTEyZlx1OTEzOVx1OTE0M1x1OTE0Nlx1NTIwZFx1NTk0Mlx1NTJhMlx1NTJhY1x1NTJh'@;
put 'ZFx1NTJiZVx1NTRmZlx1NTJkMFx1NTJkNlx1NTJmMFx1NTNkZlx1NzFlZVx1NzdjZFx1NWVmNFx1NTFmNVx1NTFmY1x1OWIyZlx1NTNiNlx1NWYwMVx1NzU1YVx1NWRlZlx1NTc0Y1x1NTdhOVx1NTdhMVx1NTg3ZVx1NThiY1x1NThjNVx1NThkMVx1NTcyOVx1NTcyY1x1NTcyYVx1NTczM1x1'@;
put 'NTczOVx1NTcyZVx1NTcyZlx1NTc1Y1x1NTczYlx1NTc0Mlx1NTc2OVx1NTc4NVx1NTc2Ylx1NTc4Nlx1NTc3Y1x1NTc3Ylx1NTc2OFx1NTc2ZFx1NTc3Nlx1NTc3M1x1NTdhZFx1NTdhNFx1NTc4Y1x1NTdiMlx1NTdjZlx1NTdhN1x1NTdiNFx1NTc5M1x1NTdhMFx1NTdkNVx1NTdkOFx1NTdk'@;
put 'YVx1NTdkOVx1NTdkMlx1NTdiOFx1NTdmNFx1NTdlZlx1NTdmOFx1NTdlNFx1NTdkZFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIxOV0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjE5XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMTldW3ZdXT01NjA2NCt2LFRbNTYwNjQrdl09a1syMTld'@;
put 'W3ZdKTtmb3Ioa1syMjBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU4MGJc'@;
put 'dTU4MGRcdTU3ZmRcdTU3ZWRcdTU4MDBcdTU4MWVcdTU4MTlcdTU4NDRcdTU4MjBcdTU4NjVcdTU4NmNcdTU4ODFcdTU4ODlcdTU4OWFcdTU4ODBcdTk5YThcdTlmMTlcdTYxZmZcdTgyNzlcdTgyN2RcdTgyN2ZcdTgyOGZcdTgyOGFcdTgyYThcdTgyODRcdTgyOGVcdTgyOTFcdTgyOTdcdTgy'@;
put 'OTlcdTgyYWJcdTgyYjhcdTgyYmVcdTgyYjBcdTgyYzhcdTgyY2FcdTgyZTNcdTgyOThcdTgyYjdcdTgyYWVcdTgyY2JcdTgyY2NcdTgyYzFcdTgyYTlcdTgyYjRcdTgyYTFcdTgyYWFcdTgyOWZcdTgyYzRcdTgyY2VcdTgyYTRcdTgyZTFcdTgzMDlcdTgyZjdcdTgyZTRcdTgzMGZcdTgzMDdc'@;
put 'dTgyZGNcdTgyZjRcdTgyZDJcdTgyZDhcdTgzMGNcdTgyZmJcdTgyZDNcdTgzMTFcdTgzMWFcdTgzMDZcdTgzMTRcdTgzMTVcdTgyZTBcdTgyZDVcdTgzMWNcdTgzNTFcdTgzNWJcdTgzNWNcdTgzMDhcdTgzOTJcdTgzM2NcdTgzMzRcdTgzMzFcdTgzOWJcdTgzNWVcdTgzMmZcdTgzNGZcdTgz'@;
put 'NDdcdTgzNDNcdTgzNWZcdTgzNDBcdTgzMTdcdTgzNjBcdTgzMmRcdTgzM2FcdTgzMzNcdTgzNjZcdTgzNjVcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMjBdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIyMF1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjIwXVt2XV09NTYzMjArdixUWzU2'@;
put 'MzIwK3ZdPWtbMjIwXVt2XSk7Zm9yKGtbMjIxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHU4MzY4XHU4MzFiXHU4MzY5XHU4MzZjXHU4MzZhXHU4MzZkXHU4MzZlXHU4M2IwXHU4Mzc4XHU4M2IzXHU4M2I0XHU4M2EwXHU4M2FhXHU4MzkzXHU4MzljXHU4Mzg1XHU4MzdjXHU4M2I2XHU4M2E5XHU4MzdkXHU4M2I4XHU4MzdiXHU4Mzk4XHU4MzllXHU4M2E4XHU4M2JhXHU4'@;
put 'M2JjXHU4M2MxXHU4NDAxXHU4M2U1XHU4M2Q4XHU1ODA3XHU4NDE4XHU4NDBiXHU4M2RkXHU4M2ZkXHU4M2Q2XHU4NDFjXHU4NDM4XHU4NDExXHU4NDA2XHU4M2Q0XHU4M2RmXHU4NDBmXHU4NDAzXHU4M2Y4XHU4M2Y5XHU4M2VhXHU4M2M1XHU4M2MwXHU4NDI2XHU4M2YwXHU4M2UxXHU4NDVj'@;
put 'XHU4NDUxXHU4NDVhXHU4NDU5XHU4NDczXHU4NDg3XHU4NDg4XHU4NDdhXHU4NDg5XHU4NDc4XHU4NDNjXHU4NDQ2XHU4NDY5XHU4NDc2XHU4NDhjXHU4NDhlXHU4NDMxXHU4NDZkXHU4NGMxXHU4NGNkXHU4NGQwXHU4NGU2XHU4NGJkXHU4NGQzXHU4NGNhXHU4NGJmXHU4NGJhXHU4NGUwXHU4'@;
put 'NGExXHU4NGI5XHU4NGI0XHU4NDk3XHU4NGU1XHU4NGUzXHU4NTBjXHU3NTBkXHU4NTM4XHU4NGYwXHU4NTM5XHU4NTFmXHU4NTNhXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjIxXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMjFdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIyMV1bdl1d'@;
put 'PTU2NTc2K3YsVFs1NjU3Nit2XT1rWzIyMV1bdl0pO2ZvcihrWzIyMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODU1Nlx1ODUzYlx1ODRmZlx1ODRmY1x1ODU1OVx1ODU0OFx1ODU2OFx1ODU2NFx1ODU1ZVx1ODU3YVx1NzdhMlx1ODU0M1x1ODU3Mlx1ODU3Ylx1ODVhNFx1ODVhOFx1ODU4N1x1ODU4Zlx1ODU3OVx1ODVhZVx1ODU5Y1x1ODU4NVx1ODViOVx1ODViN1x1'@;
put 'ODViMFx1ODVkM1x1ODVjMVx1ODVkY1x1ODVmZlx1ODYyN1x1ODYwNVx1ODYyOVx1ODYxNlx1ODYzY1x1NWVmZVx1NWYwOFx1NTkzY1x1NTk0MVx1ODAzN1x1NTk1NVx1NTk1YVx1NTk1OFx1NTMwZlx1NWMyMlx1NWMyNVx1NWMyY1x1NWMzNFx1NjI0Y1x1NjI2YVx1NjI5Zlx1NjJiYlx1NjJj'@;
put 'YVx1NjJkYVx1NjJkN1x1NjJlZVx1NjMyMlx1NjJmNlx1NjMzOVx1NjM0Ylx1NjM0M1x1NjNhZFx1NjNmNlx1NjM3MVx1NjM3YVx1NjM4ZVx1NjNiNFx1NjM2ZFx1NjNhY1x1NjM4YVx1NjM2OVx1NjNhZVx1NjNiY1x1NjNmMlx1NjNmOFx1NjNlMFx1NjNmZlx1NjNjNFx1NjNkZVx1NjNjZVx1'@;
put 'NjQ1Mlx1NjNjNlx1NjNiZVx1NjQ0NVx1NjQ0MVx1NjQwYlx1NjQxYlx1NjQyMFx1NjQwY1x1NjQyNlx1NjQyMVx1NjQ1ZVx1NjQ4NFx1NjQ2ZFx1NjQ5Nlx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIyMl0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjIyXVt2XS5jaGFyQ29kZUF0KDApJiYo'@;
put 'c2Vba1syMjJdW3ZdXT01NjgzMit2LFRbNTY4MzIrdl09a1syMjJdW3ZdKTtmb3Ioa1syMjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0N2FcdTY0YjdcdTY0YjhcdTY0OTlcdTY0YmFcdTY0YzBcdTY0ZDBcdTY0ZDdcdTY0ZTRcdTY0ZTJcdTY1MDlcdTY1MjVcdTY1MmVcdTVmMGJcdTVmZDJcdTc1MTlcdTVmMTFcdTUzNWZcdTUzZjFcdTUzZmRcdTUzZTlcdTUzZThc'@;
put 'dTUzZmJcdTU0MTJcdTU0MTZcdTU0MDZcdTU0NGJcdTU0NTJcdTU0NTNcdTU0NTRcdTU0NTZcdTU0NDNcdTU0MjFcdTU0NTdcdTU0NTlcdTU0MjNcdTU0MzJcdTU0ODJcdTU0OTRcdTU0NzdcdTU0NzFcdTU0NjRcdTU0OWFcdTU0OWJcdTU0ODRcdTU0NzZcdTU0NjZcdTU0OWRcdTU0ZDBcdTU0'@;
put 'YWRcdTU0YzJcdTU0YjRcdTU0ZDJcdTU0YTdcdTU0YTZcdTU0ZDNcdTU0ZDRcdTU0NzJcdTU0YTNcdTU0ZDVcdTU0YmJcdTU0YmZcdTU0Y2NcdTU0ZDlcdTU0ZGFcdTU0ZGNcdTU0YTlcdTU0YWFcdTU0YTRcdTU0ZGRcdTU0Y2ZcdTU0ZGVcdTU1MWJcdTU0ZTdcdTU1MjBcdTU0ZmRcdTU1MTRc'@;
put 'dTU0ZjNcdTU1MjJcdTU1MjNcdTU1MGZcdTU1MTFcdTU1MjdcdTU1MmFcdTU1NjdcdTU1OGZcdTU1YjVcdTU1NDlcdTU1NmRcdTU1NDFcdTU1NTVcdTU1M2ZcdTU1NTBcdTU1M2NcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMjNdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIyM11bdl0uY2hh'@;
put 'ckNvZGVBdCgwKSYmKHNlW2tbMjIzXVt2XV09NTcwODgrdixUWzU3MDg4K3ZdPWtbMjIzXVt2XSk7Zm9yKGtbMjI0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NTM3XHU1NTU2XHU1NTc1XHU1NTc2XHU1NTc3XHU1NTMzXHU1NTMwXHU1NTVjXHU1NThiXHU1NWQyXHU1NTgzXHU1NWIxXHU1NWI5XHU1NTg4XHU1NTgxXHU1NTlmXHU1NTdlXHU1NWQ2XHU1NTkxXHU1NTdi'@;
put 'XHU1NWRmXHU1NWJkXHU1NWJlXHU1NTk0XHU1NTk5XHU1NWVhXHU1NWY3XHU1NWM5XHU1NjFmXHU1NWQxXHU1NWViXHU1NWVjXHU1NWQ0XHU1NWU2XHU1NWRkXHU1NWM0XHU1NWVmXHU1NWU1XHU1NWYyXHU1NWYzXHU1NWNjXHU1NWNkXHU1NWU4XHU1NWY1XHU1NWU0XHU4Zjk0XHU1NjFlXHU1'@;
put 'NjA4XHU1NjBjXHU1NjAxXHU1NjI0XHU1NjIzXHU1NWZlXHU1NjAwXHU1NjI3XHU1NjJkXHU1NjU4XHU1NjM5XHU1NjU3XHU1NjJjXHU1NjRkXHU1NjYyXHU1NjU5XHU1NjVjXHU1NjRjXHU1NjU0XHU1Njg2XHU1NjY0XHU1NjcxXHU1NjZiXHU1NjdiXHU1NjdjXHU1Njg1XHU1NjkzXHU1NmFm'@;
put 'XHU1NmQ0XHU1NmQ3XHU1NmRkXHU1NmUxXHU1NmY1XHU1NmViXHU1NmY5XHU1NmZmXHU1NzA0XHU1NzBhXHU1NzA5XHU1NzFjXHU1ZTBmXHU1ZTE5XHU1ZTE0XHU1ZTExXHU1ZTMxXHU1ZTNiXHU1ZTNjXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjI0XS5sZW5ndGg7Kyt2KTY1NTMzIT09'@;
put 'a1syMjRdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIyNF1bdl1dPTU3MzQ0K3YsVFs1NzM0NCt2XT1rWzIyNF1bdl0pO2ZvcihrWzIyNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWUzN1x1NWU0NFx1NWU1NFx1NWU1Ylx1NWU1ZVx1NWU2MVx1NWM4Y1x1NWM3YVx1NWM4ZFx1NWM5MFx1NWM5Nlx1NWM4OFx1NWM5OFx1NWM5OVx1NWM5MVx1NWM5YVx1NWM5Y1x1NWNi'@;
put 'NVx1NWNhMlx1NWNiZFx1NWNhY1x1NWNhYlx1NWNiMVx1NWNhM1x1NWNjMVx1NWNiN1x1NWNjNFx1NWNkMlx1NWNlNFx1NWNjYlx1NWNlNVx1NWQwMlx1NWQwM1x1NWQyN1x1NWQyNlx1NWQyZVx1NWQyNFx1NWQxZVx1NWQwNlx1NWQxYlx1NWQ1OFx1NWQzZVx1NWQzNFx1NWQzZFx1NWQ2Y1x1'@;
put 'NWQ1Ylx1NWQ2Zlx1NWQ1ZFx1NWQ2Ylx1NWQ0Ylx1NWQ0YVx1NWQ2OVx1NWQ3NFx1NWQ4Mlx1NWQ5OVx1NWQ5ZFx1OGM3M1x1NWRiN1x1NWRjNVx1NWY3M1x1NWY3N1x1NWY4Mlx1NWY4N1x1NWY4OVx1NWY4Y1x1NWY5NVx1NWY5OVx1NWY5Y1x1NWZhOFx1NWZhZFx1NWZiNVx1NWZiY1x1ODg2'@;
put 'Mlx1NWY2MVx1NzJhZFx1NzJiMFx1NzJiNFx1NzJiN1x1NzJiOFx1NzJjM1x1NzJjMVx1NzJjZVx1NzJjZFx1NzJkMlx1NzJlOFx1NzJlZlx1NzJlOVx1NzJmMlx1NzJmNFx1NzJmN1x1NzMwMVx1NzJmM1x1NzMwM1x1NzJmYVx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIyNV0ubGVuZ3Ro'@;
put 'Oysrdik2NTUzMyE9PWtbMjI1XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMjVdW3ZdXT01NzYwMCt2LFRbNTc2MDArdl09a1syMjVdW3ZdKTtmb3Ioa1syMjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcyZmJcdTczMTdcdTczMTNcdTczMjFcdTczMGFcdTczMWVcdTczMWRcdTczMTVcdTczMjJcdTczMzlcdTczMjVcdTczMmNcdTczMzhcdTczMzFcdTczNTBcdTcz'@;
put 'NGRcdTczNTdcdTczNjBcdTczNmNcdTczNmZcdTczN2VcdTgyMWJcdTU5MjVcdTk4ZTdcdTU5MjRcdTU5MDJcdTk5NjNcdTk5NjdcdTk5NjhcdTk5NjlcdTk5NmFcdTk5NmJcdTk5NmNcdTk5NzRcdTk5NzdcdTk5N2RcdTk5ODBcdTk5ODRcdTk5ODdcdTk5OGFcdTk5OGRcdTk5OTBcdTk5OTFc'@;
put 'dTk5OTNcdTk5OTRcdTk5OTVcdTVlODBcdTVlOTFcdTVlOGJcdTVlOTZcdTVlYTVcdTVlYTBcdTVlYjlcdTVlYjVcdTVlYmVcdTVlYjNcdThkNTNcdTVlZDJcdTVlZDFcdTVlZGJcdTVlZThcdTVlZWFcdTgxYmFcdTVmYzRcdTVmYzlcdTVmZDZcdTVmY2ZcdTYwMDNcdTVmZWVcdTYwMDRcdTVm'@;
put 'ZTFcdTVmZTRcdTVmZmVcdTYwMDVcdTYwMDZcdTVmZWFcdTVmZWRcdTVmZjhcdTYwMTlcdTYwMzVcdTYwMjZcdTYwMWJcdTYwMGZcdTYwMGRcdTYwMjlcdTYwMmJcdTYwMGFcdTYwM2ZcdTYwMjFcdTYwNzhcdTYwNzlcdTYwN2JcdTYwN2FcdTYwNDJcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9'@;
put 'a1syMjZdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIyNl1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjI2XVt2XV09NTc4NTYrdixUWzU3ODU2K3ZdPWtbMjI2XVt2XSk7Zm9yKGtbMjI3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MDZhXHU2MDdkXHU2MDk2XHU2MDlhXHU2MGFkXHU2MDlkXHU2MDgzXHU2MDkyXHU2MDhjXHU2MDliXHU2MGVjXHU2MGJiXHU2MGIxXHU2'@;
put 'MGRkXHU2MGQ4XHU2MGM2XHU2MGRhXHU2MGI0XHU2MTIwXHU2MTI2XHU2MTE1XHU2MTIzXHU2MGY0XHU2MTAwXHU2MTBlXHU2MTJiXHU2MTRhXHU2MTc1XHU2MWFjXHU2MTk0XHU2MWE3XHU2MWI3XHU2MWQ0XHU2MWY1XHU1ZmRkXHU5NmIzXHU5NWU5XHU5NWViXHU5NWYxXHU5NWYzXHU5NWY1'@;
put 'XHU5NWY2XHU5NWZjXHU5NWZlXHU5NjAzXHU5NjA0XHU5NjA2XHU5NjA4XHU5NjBhXHU5NjBiXHU5NjBjXHU5NjBkXHU5NjBmXHU5NjEyXHU5NjE1XHU5NjE2XHU5NjE3XHU5NjE5XHU5NjFhXHU0ZTJjXHU3MjNmXHU2MjE1XHU2YzM1XHU2YzU0XHU2YzVjXHU2YzRhXHU2Y2EzXHU2Yzg1XHU2'@;
put 'YzkwXHU2Yzk0XHU2YzhjXHU2YzY4XHU2YzY5XHU2Yzc0XHU2Yzc2XHU2Yzg2XHU2Y2E5XHU2Y2QwXHU2Y2Q0XHU2Y2FkXHU2Y2Y3XHU2Y2Y4XHU2Y2YxXHU2Y2Q3XHU2Y2IyXHU2Y2UwXHU2Y2Q2XHU2Y2ZhXHU2Y2ViXHU2Y2VlXHU2Y2IxXHU2Y2QzXHU2Y2VmXHU2Y2ZlXHVmZmZkIi5zcGxp'@;
put 'dCgiIiksdj0wO3YhPWtbMjI3XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMjddW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIyN11bdl1dPTU4MTEyK3YsVFs1ODExMit2XT1rWzIyN11bdl0pO2ZvcihrWzIyOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQzOVx1NmQyN1x1NmQwY1x1NmQ0M1x1NmQ0OFx1NmQwN1x1NmQwNFx1NmQxOVx1NmQwZVx1NmQyYlx1NmQ0ZFx1'@;
put 'NmQyZVx1NmQzNVx1NmQxYVx1NmQ0Zlx1NmQ1Mlx1NmQ1NFx1NmQzM1x1NmQ5MVx1NmQ2Zlx1NmQ5ZVx1NmRhMFx1NmQ1ZVx1NmQ5M1x1NmQ5NFx1NmQ1Y1x1NmQ2MFx1NmQ3Y1x1NmQ2M1x1NmUxYVx1NmRjN1x1NmRjNVx1NmRkZVx1NmUwZVx1NmRiZlx1NmRlMFx1NmUxMVx1NmRlNlx1NmRk'@;
put 'ZFx1NmRkOVx1NmUxNlx1NmRhYlx1NmUwY1x1NmRhZVx1NmUyYlx1NmU2ZVx1NmU0ZVx1NmU2Ylx1NmViMlx1NmU1Zlx1NmU4Nlx1NmU1M1x1NmU1NFx1NmUzMlx1NmUyNVx1NmU0NFx1NmVkZlx1NmViMVx1NmU5OFx1NmVlMFx1NmYyZFx1NmVlMlx1NmVhNVx1NmVhN1x1NmViZFx1NmViYlx1'@;
put 'NmViN1x1NmVkN1x1NmViNFx1NmVjZlx1NmU4Zlx1NmVjMlx1NmU5Zlx1NmY2Mlx1NmY0Nlx1NmY0N1x1NmYyNFx1NmYxNVx1NmVmOVx1NmYyZlx1NmYzNlx1NmY0Ylx1NmY3NFx1NmYyYVx1NmYwOVx1NmYyOVx1NmY4OVx1NmY4ZFx1NmY4Y1x1NmY3OFx1NmY3Mlx1NmY3Y1x1NmY3YVx1NmZk'@;
put 'MVx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIyOF0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjI4XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMjhdW3ZdXT01ODM2OCt2LFRbNTgzNjgrdl09a1syMjhdW3ZdKTtmb3Ioa1syMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmYzlcdTZmYTdcdTZmYjlcdTZmYjZcdTZmYzJcdTZmZTFcdTZmZWVcdTZmZGVcdTZmZTBc'@;
put 'dTZmZWZcdTcwMWFcdTcwMjNcdTcwMWJcdTcwMzlcdTcwMzVcdTcwNGZcdTcwNWVcdTViODBcdTViODRcdTViOTVcdTViOTNcdTViYTVcdTViYjhcdTc1MmZcdTlhOWVcdTY0MzRcdTViZTRcdTViZWVcdTg5MzBcdTViZjBcdThlNDdcdThiMDdcdThmYjZcdThmZDNcdThmZDVcdThmZTVcdThm'@;
put 'ZWVcdThmZTRcdThmZTlcdThmZTZcdThmZjNcdThmZThcdTkwMDVcdTkwMDRcdTkwMGJcdTkwMjZcdTkwMTFcdTkwMGRcdTkwMTZcdTkwMjFcdTkwMzVcdTkwMzZcdTkwMmRcdTkwMmZcdTkwNDRcdTkwNTFcdTkwNTJcdTkwNTBcdTkwNjhcdTkwNThcdTkwNjJcdTkwNWJcdTY2YjlcdTkwNzRc'@;
put 'dTkwN2RcdTkwODJcdTkwODhcdTkwODNcdTkwOGJcdTVmNTBcdTVmNTdcdTVmNTZcdTVmNThcdTVjM2JcdTU0YWJcdTVjNTBcdTVjNTlcdTViNzFcdTVjNjNcdTVjNjZcdTdmYmNcdTVmMmFcdTVmMjlcdTVmMmRcdTgyNzRcdTVmM2NcdTliM2JcdTVjNmVcdTU5ODFcdTU5ODNcdTU5OGRcdTU5'@;
put 'YTlcdTU5YWFcdTU5YTNcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMjldLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIyOV1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjI5XVt2XV09NTg2MjQrdixUWzU4NjI0K3ZdPWtbMjI5XVt2XSk7Zm9yKGtbMjMwXT0iXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1OTk3XHU1OWNhXHU1OWFiXHU1OTllXHU1OWE0XHU1OWQyXHU1OWIy'@;
put 'XHU1OWFmXHU1OWQ3XHU1OWJlXHU1YTA1XHU1YTA2XHU1OWRkXHU1YTA4XHU1OWUzXHU1OWQ4XHU1OWY5XHU1YTBjXHU1YTA5XHU1YTMyXHU1YTM0XHU1YTExXHU1YTIzXHU1YTEzXHU1YTQwXHU1YTY3XHU1YTRhXHU1YTU1XHU1YTNjXHU1YTYyXHU1YTc1XHU4MGVjXHU1YWFhXHU1YTliXHU1'@;
put 'YTc3XHU1YTdhXHU1YWJlXHU1YWViXHU1YWIyXHU1YWQyXHU1YWQ0XHU1YWI4XHU1YWUwXHU1YWUzXHU1YWYxXHU1YWQ2XHU1YWU2XHU1YWQ4XHU1YWRjXHU1YjA5XHU1YjE3XHU1YjE2XHU1YjMyXHU1YjM3XHU1YjQwXHU1YzE1XHU1YzFjXHU1YjVhXHU1YjY1XHU1YjczXHU1YjUxXHU1YjUz'@;
put 'XHU1YjYyXHU5YTc1XHU5YTc3XHU5YTc4XHU5YTdhXHU5YTdmXHU5YTdkXHU5YTgwXHU5YTgxXHU5YTg1XHU5YTg4XHU5YThhXHU5YTkwXHU5YTkyXHU5YTkzXHU5YTk2XHU5YTk4XHU5YTliXHU5YTljXHU5YTlkXHU5YTlmXHU5YWEwXHU5YWEyXHU5YWEzXHU5YWE1XHU5YWE3XHU3ZTlmXHU3'@;
put 'ZWExXHU3ZWEzXHU3ZWE1XHU3ZWE4XHU3ZWE5XHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjMwXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMzBdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIzMF1bdl1dPTU4ODgwK3YsVFs1ODg4MCt2XT1rWzIzMF1bdl0pO2ZvcihrWzIzMV09Ilx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2VhZFx1N2ViMFx1N2ViZVx1N2VjMFx1N2Vj'@;
put 'MVx1N2VjMlx1N2VjOVx1N2VjYlx1N2VjY1x1N2VkMFx1N2VkNFx1N2VkN1x1N2VkYlx1N2VlMFx1N2VlMVx1N2VlOFx1N2VlYlx1N2VlZVx1N2VlZlx1N2VmMVx1N2VmMlx1N2YwZFx1N2VmNlx1N2VmYVx1N2VmYlx1N2VmZVx1N2YwMVx1N2YwMlx1N2YwM1x1N2YwN1x1N2YwOFx1N2YwYlx1'@;
put 'N2YwY1x1N2YwZlx1N2YxMVx1N2YxMlx1N2YxN1x1N2YxOVx1N2YxY1x1N2YxYlx1N2YxZlx1N2YyMVx1N2YyMlx1N2YyM1x1N2YyNFx1N2YyNVx1N2YyNlx1N2YyN1x1N2YyYVx1N2YyYlx1N2YyY1x1N2YyZFx1N2YyZlx1N2YzMFx1N2YzMVx1N2YzMlx1N2YzM1x1N2YzNVx1NWU3YVx1NzU3'@;
put 'Zlx1NWRkYlx1NzUzZVx1OTA5NVx1NzM4ZVx1NzM5MVx1NzNhZVx1NzNhMlx1NzM5Zlx1NzNjZlx1NzNjMlx1NzNkMVx1NzNiN1x1NzNiM1x1NzNjMFx1NzNjOVx1NzNjOFx1NzNlNVx1NzNkOVx1OTg3Y1x1NzQwYVx1NzNlOVx1NzNlN1x1NzNkZVx1NzNiYVx1NzNmMlx1NzQwZlx1NzQyYVx1'@;
put 'NzQ1Ylx1NzQyNlx1NzQyNVx1NzQyOFx1NzQzMFx1NzQyZVx1NzQyY1x1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIzMV0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjMxXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMzFdW3ZdXT01OTEzNit2LFRbNTkxMzYrdl09a1syMzFdW3ZdKTtmb3Io'@;
put 'a1syMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0MWJcdTc0MWFcdTc0'@;
put 'NDFcdTc0NWNcdTc0NTdcdTc0NTVcdTc0NTlcdTc0NzdcdTc0NmRcdTc0N2VcdTc0OWNcdTc0OGVcdTc0ODBcdTc0ODFcdTc0ODdcdTc0OGJcdTc0OWVcdTc0YThcdTc0YTlcdTc0OTBcdTc0YTdcdTc0ZDJcdTc0YmFcdTk3ZWFcdTk3ZWJcdTk3ZWNcdTY3NGNcdTY3NTNcdTY3NWVcdTY3NDhc'@;
put 'dTY3NjlcdTY3YTVcdTY3ODdcdTY3NmFcdTY3NzNcdTY3OThcdTY3YTdcdTY3NzVcdTY3YThcdTY3OWVcdTY3YWRcdTY3OGJcdTY3NzdcdTY3N2NcdTY3ZjBcdTY4MDlcdTY3ZDhcdTY4MGFcdTY3ZTlcdTY3YjBcdTY4MGNcdTY3ZDlcdTY3YjVcdTY3ZGFcdTY3YjNcdTY3ZGRcdTY4MDBcdTY3'@;
put 'YzNcdTY3YjhcdTY3ZTJcdTY4MGVcdTY3YzFcdTY3ZmRcdTY4MzJcdTY4MzNcdTY4NjBcdTY4NjFcdTY4NGVcdTY4NjJcdTY4NDRcdTY4NjRcdTY4ODNcdTY4MWRcdTY4NTVcdTY4NjZcdTY4NDFcdTY4NjdcdTY4NDBcdTY4M2VcdTY4NGFcdTY4NDlcdTY4MjlcdTY4YjVcdTY4OGZcdTY4NzRc'@;
put 'dTY4NzdcdTY4OTNcdTY4NmJcdTY4YzJcdTY5NmVcdTY4ZmNcdTY5MWZcdTY5MjBcdTY4ZjlcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMzJdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIzMl1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjMyXVt2XV09NTkzOTIrdixUWzU5MzkyK3ZdPWtb'@;
put 'MjMyXVt2XSk7Zm9yKGtbMjMzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2'@;
put 'OTI0XHU2OGYwXHU2OTBiXHU2OTAxXHU2OTU3XHU2OGUzXHU2OTEwXHU2OTcxXHU2OTM5XHU2OTYwXHU2OTQyXHU2OTVkXHU2OTg0XHU2OTZiXHU2OTgwXHU2OTk4XHU2OTc4XHU2OTM0XHU2OWNjXHU2OTg3XHU2OTg4XHU2OWNlXHU2OTg5XHU2OTY2XHU2OTYzXHU2OTc5XHU2OTliXHU2OWE3'@;
put 'XHU2OWJiXHU2OWFiXHU2OWFkXHU2OWQ0XHU2OWIxXHU2OWMxXHU2OWNhXHU2OWRmXHU2OTk1XHU2OWUwXHU2OThkXHU2OWZmXHU2YTJmXHU2OWVkXHU2YTE3XHU2YTE4XHU2YTY1XHU2OWYyXHU2YTQ0XHU2YTNlXHU2YWEwXHU2YTUwXHU2YTViXHU2YTM1XHU2YThlXHU2YTc5XHU2YTNkXHU2'@;
put 'YTI4XHU2YTU4XHU2YTdjXHU2YTkxXHU2YTkwXHU2YWE5XHU2YTk3XHU2YWFiXHU3MzM3XHU3MzUyXHU2YjgxXHU2YjgyXHU2Yjg3XHU2Yjg0XHU2YjkyXHU2YjkzXHU2YjhkXHU2YjlhXHU2YjliXHU2YmExXHU2YmFhXHU4ZjZiXHU4ZjZkXHU4ZjcxXHU4ZjcyXHU4ZjczXHU4Zjc1XHU4Zjc2'@;
put 'XHU4Zjc4XHU4Zjc3XHU4Zjc5XHU4ZjdhXHU4ZjdjXHU4ZjdlXHU4ZjgxXHU4ZjgyXHU4Zjg0XHU4Zjg3XHU4ZjhiXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjMzXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMzNdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIzM11bdl1dPTU5NjQ4K3Ys'@;
put 'VFs1OTY0OCt2XT1rWzIzM11bdl0pO2ZvcihrWzIzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1OGY4ZFx1OGY4ZVx1OGY4Zlx1OGY5OFx1OGY5YVx1OGVjZVx1NjIwYlx1NjIxN1x1NjIxYlx1NjIxZlx1NjIyMlx1NjIyMVx1NjIyNVx1NjIyNFx1NjIyY1x1ODFlN1x1NzRlZlx1NzRmNFx1NzRmZlx1NzUwZlx1NzUxMVx1NzUxM1x1NjUzNFx1NjVlZVx1NjVlZlx1NjVm'@;
put 'MFx1NjYwYVx1NjYxOVx1Njc3Mlx1NjYwM1x1NjYxNVx1NjYwMFx1NzA4NVx1NjZmN1x1NjYxZFx1NjYzNFx1NjYzMVx1NjYzNlx1NjYzNVx1ODAwNlx1NjY1Zlx1NjY1NFx1NjY0MVx1NjY0Zlx1NjY1Nlx1NjY2MVx1NjY1N1x1NjY3N1x1NjY4NFx1NjY4Y1x1NjZhN1x1NjY5ZFx1NjZiZVx1'@;
put 'NjZkYlx1NjZkY1x1NjZlNlx1NjZlOVx1OGQzMlx1OGQzM1x1OGQzNlx1OGQzYlx1OGQzZFx1OGQ0MFx1OGQ0NVx1OGQ0Nlx1OGQ0OFx1OGQ0OVx1OGQ0N1x1OGQ0ZFx1OGQ1NVx1OGQ1OVx1ODljN1x1ODljYVx1ODljYlx1ODljY1x1ODljZVx1ODljZlx1ODlkMFx1ODlkMVx1NzI2ZVx1NzI5'@;
put 'Zlx1NzI1ZFx1NzI2Nlx1NzI2Zlx1NzI3ZVx1NzI3Zlx1NzI4NFx1NzI4Ylx1NzI4ZFx1NzI4Zlx1NzI5Mlx1NjMwOFx1NjMzMlx1NjNiMFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIzNF0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjM0XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMzRd'@;
put 'W3ZdXT01OTkwNCt2LFRbNTk5MDQrdl09a1syMzRdW3ZdKTtmb3Ioa1syMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0M2ZcdTY0ZDhcdTgwMDRcdTZiZWFcdTZiZjNcdTZiZmRcdTZiZjVcdTZiZjlcdTZjMDVcdTZjMDdcdTZjMDZcdTZjMGRcdTZjMTVcdTZjMThcdTZjMTlcdTZjMWFcdTZjMjFcdTZjMjlcdTZjMjRcdTZjMmFcdTZjMzJcdTY1MzVcdTY1NTVcdTY1'@;
put 'NmJcdTcyNGRcdTcyNTJcdTcyNTZcdTcyMzBcdTg2NjJcdTUyMTZcdTgwOWZcdTgwOWNcdTgwOTNcdTgwYmNcdTY3MGFcdTgwYmRcdTgwYjFcdTgwYWJcdTgwYWRcdTgwYjRcdTgwYjdcdTgwZTdcdTgwZThcdTgwZTlcdTgwZWFcdTgwZGJcdTgwYzJcdTgwYzRcdTgwZDlcdTgwY2RcdTgwZDdc'@;
put 'dTY3MTBcdTgwZGRcdTgwZWJcdTgwZjFcdTgwZjRcdTgwZWRcdTgxMGRcdTgxMGVcdTgwZjJcdTgwZmNcdTY3MTVcdTgxMTJcdThjNWFcdTgxMzZcdTgxMWVcdTgxMmNcdTgxMThcdTgxMzJcdTgxNDhcdTgxNGNcdTgxNTNcdTgxNzRcdTgxNTlcdTgxNWFcdTgxNzFcdTgxNjBcdTgxNjlcdTgx'@;
put 'N2NcdTgxN2RcdTgxNmRcdTgxNjdcdTU4NGRcdTVhYjVcdTgxODhcdTgxODJcdTgxOTFcdTZlZDVcdTgxYTNcdTgxYWFcdTgxY2NcdTY3MjZcdTgxY2FcdTgxYmJcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMzVdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzIzNV1bdl0uY2hhckNvZGVBdCgw'@;
put 'KSYmKHNlW2tbMjM1XVt2XV09NjAxNjArdixUWzYwMTYwK3ZdPWtbMjM1XVt2XSk7Zm9yKGtbMjM2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MWMxXHU4MWE2XHU2YjI0XHU2YjM3XHU2YjM5XHU2YjQzXHU2YjQ2XHU2YjU5XHU5OGQxXHU5OGQyXHU5OGQzXHU5OGQ1XHU5OGQ5XHU5OGRhXHU2YmIzXHU1ZjQwXHU2YmMyXHU4OWYzXHU2NTkwXHU5ZjUxXHU2NTkzXHU2'@;
put 'NWJjXHU2NWM2XHU2NWM0XHU2NWMzXHU2NWNjXHU2NWNlXHU2NWQyXHU2NWQ2XHU3MDgwXHU3MDljXHU3MDk2XHU3MDlkXHU3MGJiXHU3MGMwXHU3MGI3XHU3MGFiXHU3MGIxXHU3MGU4XHU3MGNhXHU3MTEwXHU3MTEzXHU3MTE2XHU3MTJmXHU3MTMxXHU3MTczXHU3MTVjXHU3MTY4XHU3MTQ1'@;
put 'XHU3MTcyXHU3MTRhXHU3MTc4XHU3MTdhXHU3MTk4XHU3MWIzXHU3MWI1XHU3MWE4XHU3MWEwXHU3MWUwXHU3MWQ0XHU3MWU3XHU3MWY5XHU3MjFkXHU3MjI4XHU3MDZjXHU3MTE4XHU3MTY2XHU3MWI5XHU2MjNlXHU2MjNkXHU2MjQzXHU2MjQ4XHU2MjQ5XHU3OTNiXHU3OTQwXHU3OTQ2XHU3'@;
put 'OTQ5XHU3OTViXHU3OTVjXHU3OTUzXHU3OTVhXHU3OTYyXHU3OTU3XHU3OTYwXHU3OTZmXHU3OTY3XHU3OTdhXHU3OTg1XHU3OThhXHU3OTlhXHU3OWE3XHU3OWIzXHU1ZmQxXHU1ZmQwXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjM2XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMzZdW3Zd'@;
put 'LmNoYXJDb2RlQXQoMCkmJihzZVtrWzIzNl1bdl1dPTYwNDE2K3YsVFs2MDQxNit2XT1rWzIzNl1bdl0pO2ZvcihrWzIzN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjAzY1x1NjA1ZFx1NjA1YVx1NjA2N1x1NjA0MVx1NjA1OVx1NjA2M1x1NjBhYlx1NjEwNlx1NjEwZFx1NjE1ZFx1NjFhOVx1NjE5ZFx1NjFjYlx1NjFkMVx1NjIwNlx1ODA4MFx1ODA3Zlx1NmM5M1x1'@;
put 'NmNmNlx1NmRmY1x1NzdmNlx1NzdmOFx1NzgwMFx1NzgwOVx1NzgxN1x1NzgxOFx1NzgxMVx1NjVhYlx1NzgyZFx1NzgxY1x1NzgxZFx1NzgzOVx1NzgzYVx1NzgzYlx1NzgxZlx1NzgzY1x1NzgyNVx1NzgyY1x1NzgyM1x1NzgyOVx1Nzg0ZVx1Nzg2ZFx1Nzg1Nlx1Nzg1N1x1NzgyNlx1Nzg1'@;
put 'MFx1Nzg0N1x1Nzg0Y1x1Nzg2YVx1Nzg5Ylx1Nzg5M1x1Nzg5YVx1Nzg4N1x1Nzg5Y1x1NzhhMVx1NzhhM1x1NzhiMlx1NzhiOVx1NzhhNVx1NzhkNFx1NzhkOVx1NzhjOVx1NzhlY1x1NzhmMlx1NzkwNVx1NzhmNFx1NzkxM1x1NzkyNFx1NzkxZVx1NzkzNFx1OWY5Ylx1OWVmOVx1OWVmYlx1'@;
put 'OWVmY1x1NzZmMVx1NzcwNFx1NzcwZFx1NzZmOVx1NzcwN1x1NzcwOFx1NzcxYVx1NzcyMlx1NzcxOVx1NzcyZFx1NzcyNlx1NzczNVx1NzczOFx1Nzc1MFx1Nzc1MVx1Nzc0N1x1Nzc0M1x1Nzc1YVx1Nzc2OFx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzIzN10ubGVuZ3RoOysrdik2NTUz'@;
put 'MyE9PWtbMjM3XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syMzddW3ZdXT02MDY3Mit2LFRbNjA2NzIrdl09a1syMzddW3ZdKTtmb3Ioa1syMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3NjJcdTc3NjVcdTc3N2ZcdTc3OGRcdTc3N2RcdTc3ODBcdTc3OGNcdTc3OTFcdTc3OWZcdTc3YTBcdTc3YjBcdTc3YjVcdTc3YmRcdTc1M2FcdTc1NDBcdTc1NGVcdTc1NGJc'@;
put 'dTc1NDhcdTc1NWJcdTc1NzJcdTc1NzlcdTc1ODNcdTdmNThcdTdmNjFcdTdmNWZcdThhNDhcdTdmNjhcdTdmNzRcdTdmNzFcdTdmNzlcdTdmODFcdTdmN2VcdTc2Y2RcdTc2ZTVcdTg4MzJcdTk0ODVcdTk0ODZcdTk0ODdcdTk0OGJcdTk0OGFcdTk0OGNcdTk0OGRcdTk0OGZcdTk0OTBcdTk0'@;
put 'OTRcdTk0OTdcdTk0OTVcdTk0OWFcdTk0OWJcdTk0OWNcdTk0YTNcdTk0YTRcdTk0YWJcdTk0YWFcdTk0YWRcdTk0YWNcdTk0YWZcdTk0YjBcdTk0YjJcdTk0YjRcdTk0YjZcdTk0YjdcdTk0YjhcdTk0YjlcdTk0YmFcdTk0YmNcdTk0YmRcdTk0YmZcdTk0YzRcdTk0YzhcdTk0YzlcdTk0Y2Fc'@;
put 'dTk0Y2JcdTk0Y2NcdTk0Y2RcdTk0Y2VcdTk0ZDBcdTk0ZDFcdTk0ZDJcdTk0ZDVcdTk0ZDZcdTk0ZDdcdTk0ZDlcdTk0ZDhcdTk0ZGJcdTk0ZGVcdTk0ZGZcdTk0ZTBcdTk0ZTJcdTk0ZTRcdTk0ZTVcdTk0ZTdcdTk0ZThcdTk0ZWFcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syMzhdLmxl'@;
put 'bmd0aDsrK3YpNjU1MzMhPT1rWzIzOF1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjM4XVt2XV09NjA5MjgrdixUWzYwOTI4K3ZdPWtbMjM4XVt2XSk7Zm9yKGtbMjM5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NGU5XHU5NGViXHU5NGVlXHU5NGVmXHU5NGYzXHU5NGY0XHU5NGY1XHU5NGY3XHU5NGY5XHU5NGZjXHU5NGZkXHU5NGZmXHU5NTAzXHU5NTAyXHU5NTA2'@;
put 'XHU5NTA3XHU5NTA5XHU5NTBhXHU5NTBkXHU5NTBlXHU5NTBmXHU5NTEyXHU5NTEzXHU5NTE0XHU5NTE1XHU5NTE2XHU5NTE4XHU5NTFiXHU5NTFkXHU5NTFlXHU5NTFmXHU5NTIyXHU5NTJhXHU5NTJiXHU5NTI5XHU5NTJjXHU5NTMxXHU5NTMyXHU5NTM0XHU5NTM2XHU5NTM3XHU5NTM4XHU5'@;
put 'NTNjXHU5NTNlXHU5NTNmXHU5NTQyXHU5NTM1XHU5NTQ0XHU5NTQ1XHU5NTQ2XHU5NTQ5XHU5NTRjXHU5NTRlXHU5NTRmXHU5NTUyXHU5NTUzXHU5NTU0XHU5NTU2XHU5NTU3XHU5NTU4XHU5NTU5XHU5NTViXHU5NTVlXHU5NTVmXHU5NTVkXHU5NTYxXHU5NTYyXHU5NTY0XHU5NTY1XHU5NTY2'@;
put 'XHU5NTY3XHU5NTY4XHU5NTY5XHU5NTZhXHU5NTZiXHU5NTZjXHU5NTZmXHU5NTcxXHU5NTcyXHU5NTczXHU5NTNhXHU3N2U3XHU3N2VjXHU5NmM5XHU3OWQ1XHU3OWVkXHU3OWUzXHU3OWViXHU3YTA2XHU1ZDQ3XHU3YTAzXHU3YTAyXHU3YTFlXHU3YTE0XHVmZmZkIi5zcGxpdCgiIiksdj0w'@;
put 'O3YhPWtbMjM5XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syMzldW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzIzOV1bdl1dPTYxMTg0K3YsVFs2MTE4NCt2XT1rWzIzOV1bdl0pO2ZvcihrWzI0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2EzOVx1N2EzN1x1N2E1MVx1OWVjZlx1OTlhNVx1N2E3MFx1NzY4OFx1NzY4ZVx1NzY5M1x1NzY5OVx1NzZhNFx1NzRkZVx1NzRl'@;
put 'MFx1NzUyY1x1OWUyMFx1OWUyMlx1OWUyOFx1OWUyOVx1OWUyYVx1OWUyYlx1OWUyY1x1OWUzMlx1OWUzMVx1OWUzNlx1OWUzOFx1OWUzN1x1OWUzOVx1OWUzYVx1OWUzZVx1OWU0MVx1OWU0Mlx1OWU0NFx1OWU0Nlx1OWU0N1x1OWU0OFx1OWU0OVx1OWU0Ylx1OWU0Y1x1OWU0ZVx1OWU1MVx1'@;
put 'OWU1NVx1OWU1N1x1OWU1YVx1OWU1Ylx1OWU1Y1x1OWU1ZVx1OWU2M1x1OWU2Nlx1OWU2N1x1OWU2OFx1OWU2OVx1OWU2YVx1OWU2Ylx1OWU2Y1x1OWU3MVx1OWU2ZFx1OWU3M1x1NzU5Mlx1NzU5NFx1NzU5Nlx1NzVhMFx1NzU5ZFx1NzVhY1x1NzVhM1x1NzViM1x1NzViNFx1NzViOFx1NzVj'@;
put 'NFx1NzViMVx1NzViMFx1NzVjM1x1NzVjMlx1NzVkNlx1NzVjZFx1NzVlM1x1NzVlOFx1NzVlNlx1NzVlNFx1NzVlYlx1NzVlN1x1NzYwM1x1NzVmMVx1NzVmY1x1NzVmZlx1NzYxMFx1NzYwMFx1NzYwNVx1NzYwY1x1NzYxN1x1NzYwYVx1NzYyNVx1NzYxOFx1NzYxNVx1NzYxOVx1ZmZmZCIu'@;
put 'c3BsaXQoIiIpLHY9MDt2IT1rWzI0MF0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjQwXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syNDBdW3ZdXT02MTQ0MCt2LFRbNjE0NDArdl09a1syNDBdW3ZdKTtmb3Ioa1syNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc2MWJcdTc2M2NcdTc2MjJcdTc2MjBcdTc2NDBcdTc2MmRcdTc2MzBcdTc2M2ZcdTc2MzVcdTc2NDNcdTc2'@;
put 'M2VcdTc2MzNcdTc2NGRcdTc2NWVcdTc2NTRcdTc2NWNcdTc2NTZcdTc2NmJcdTc2NmZcdTdmY2FcdTdhZTZcdTdhNzhcdTdhNzlcdTdhODBcdTdhODZcdTdhODhcdTdhOTVcdTdhYTZcdTdhYTBcdTdhYWNcdTdhYThcdTdhYWRcdTdhYjNcdTg4NjRcdTg4NjlcdTg4NzJcdTg4N2RcdTg4N2Zc'@;
put 'dTg4ODJcdTg4YTJcdTg4YzZcdTg4YjdcdTg4YmNcdTg4YzlcdTg4ZTJcdTg4Y2VcdTg4ZTNcdTg4ZTVcdTg4ZjFcdTg5MWFcdTg4ZmNcdTg4ZThcdTg4ZmVcdTg4ZjBcdTg5MjFcdTg5MTlcdTg5MTNcdTg5MWJcdTg5MGFcdTg5MzRcdTg5MmJcdTg5MzZcdTg5NDFcdTg5NjZcdTg5N2JcdTc1'@;
put 'OGJcdTgwZTVcdTc2YjJcdTc2YjRcdTc3ZGNcdTgwMTJcdTgwMTRcdTgwMTZcdTgwMWNcdTgwMjBcdTgwMjJcdTgwMjVcdTgwMjZcdTgwMjdcdTgwMjlcdTgwMjhcdTgwMzFcdTgwMGJcdTgwMzVcdTgwNDNcdTgwNDZcdTgwNGRcdTgwNTJcdTgwNjlcdTgwNzFcdTg5ODNcdTk4NzhcdTk4ODBc'@;
put 'dTk4ODNcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syNDFdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzI0MV1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjQxXVt2XV09NjE2OTYrdixUWzYxNjk2K3ZdPWtbMjQxXVt2XSk7Zm9yKGtbMjQyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ODg5XHU5ODhjXHU5ODhkXHU5ODhmXHU5ODk0XHU5ODlhXHU5ODliXHU5ODllXHU5'@;
put 'ODlmXHU5OGExXHU5OGEyXHU5OGE1XHU5OGE2XHU4NjRkXHU4NjU0XHU4NjZjXHU4NjZlXHU4NjdmXHU4NjdhXHU4NjdjXHU4NjdiXHU4NmE4XHU4NjhkXHU4NjhiXHU4NmFjXHU4NjlkXHU4NmE3XHU4NmEzXHU4NmFhXHU4NjkzXHU4NmE5XHU4NmI2XHU4NmM0XHU4NmI1XHU4NmNlXHU4NmIw'@;
put 'XHU4NmJhXHU4NmIxXHU4NmFmXHU4NmM5XHU4NmNmXHU4NmI0XHU4NmU5XHU4NmYxXHU4NmYyXHU4NmVkXHU4NmYzXHU4NmQwXHU4NzEzXHU4NmRlXHU4NmY0XHU4NmRmXHU4NmQ4XHU4NmQxXHU4NzAzXHU4NzA3XHU4NmY4XHU4NzA4XHU4NzBhXHU4NzBkXHU4NzA5XHU4NzIzXHU4NzNiXHU4'@;
put 'NzFlXHU4NzI1XHU4NzJlXHU4NzFhXHU4NzNlXHU4NzQ4XHU4NzM0XHU4NzMxXHU4NzI5XHU4NzM3XHU4NzNmXHU4NzgyXHU4NzIyXHU4NzdkXHU4NzdlXHU4NzdiXHU4NzYwXHU4NzcwXHU4NzRjXHU4NzZlXHU4NzhiXHU4NzUzXHU4NzYzXHU4NzdjXHU4NzY0XHU4NzU5XHU4NzY1XHU4Nzkz'@;
put 'XHU4N2FmXHU4N2E4XHU4N2QyXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjQyXS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syNDJdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzI0Ml1bdl1dPTYxOTUyK3YsVFs2MTk1Mit2XT1rWzI0Ml1bdl0pO2ZvcihrWzI0M109Ilx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODdjNlx1ODc4OFx1ODc4NVx1ODdhZFx1ODc5N1x1ODc4M1x1'@;
put 'ODdhYlx1ODdlNVx1ODdhY1x1ODdiNVx1ODdiM1x1ODdjYlx1ODdkM1x1ODdiZFx1ODdkMVx1ODdjMFx1ODdjYVx1ODdkYlx1ODdlYVx1ODdlMFx1ODdlZVx1ODgxNlx1ODgxM1x1ODdmZVx1ODgwYVx1ODgxYlx1ODgyMVx1ODgzOVx1ODgzY1x1N2YzNlx1N2Y0Mlx1N2Y0NFx1N2Y0NVx1ODIx'@;
put 'MFx1N2FmYVx1N2FmZFx1N2IwOFx1N2IwM1x1N2IwNFx1N2IxNVx1N2IwYVx1N2IyYlx1N2IwZlx1N2I0N1x1N2IzOFx1N2IyYVx1N2IxOVx1N2IyZVx1N2IzMVx1N2IyMFx1N2IyNVx1N2IyNFx1N2IzM1x1N2IzZVx1N2IxZVx1N2I1OFx1N2I1YVx1N2I0NVx1N2I3NVx1N2I0Y1x1N2I1ZFx1'@;
put 'N2I2MFx1N2I2ZVx1N2I3Ylx1N2I2Mlx1N2I3Mlx1N2I3MVx1N2I5MFx1N2JhNlx1N2JhN1x1N2JiOFx1N2JhY1x1N2I5ZFx1N2JhOFx1N2I4NVx1N2JhYVx1N2I5Y1x1N2JhMlx1N2JhYlx1N2JiNFx1N2JkMVx1N2JjMVx1N2JjY1x1N2JkZFx1N2JkYVx1N2JlNVx1N2JlNlx1N2JlYVx1N2Mw'@;
put 'Y1x1N2JmZVx1N2JmY1x1N2MwZlx1N2MxNlx1N2MwYlx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzI0M10ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjQzXVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syNDNdW3ZdXT02MjIwOCt2LFRbNjIyMDgrdl09a1syNDNdW3ZdKTtmb3Ioa1syNDRdPSJc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdjMWZcdTdjMmFcdTdjMjZcdTdjMzhc'@;
put 'dTdjNDFcdTdjNDBcdTgxZmVcdTgyMDFcdTgyMDJcdTgyMDRcdTgxZWNcdTg4NDRcdTgyMjFcdTgyMjJcdTgyMjNcdTgyMmRcdTgyMmZcdTgyMjhcdTgyMmJcdTgyMzhcdTgyM2JcdTgyMzNcdTgyMzRcdTgyM2VcdTgyNDRcdTgyNDlcdTgyNGJcdTgyNGZcdTgyNWFcdTgyNWZcdTgyNjhcdTg4'@;
put 'N2VcdTg4ODVcdTg4ODhcdTg4ZDhcdTg4ZGZcdTg5NWVcdTdmOWRcdTdmOWZcdTdmYTdcdTdmYWZcdTdmYjBcdTdmYjJcdTdjN2NcdTY1NDlcdTdjOTFcdTdjOWRcdTdjOWNcdTdjOWVcdTdjYTJcdTdjYjJcdTdjYmNcdTdjYmRcdTdjYzFcdTdjYzdcdTdjY2NcdTdjY2RcdTdjYzhcdTdjYzVc'@;
put 'dTdjZDdcdTdjZThcdTgyNmVcdTY2YThcdTdmYmZcdTdmY2VcdTdmZDVcdTdmZTVcdTdmZTFcdTdmZTZcdTdmZTlcdTdmZWVcdTdmZjNcdTdjZjhcdTdkNzdcdTdkYTZcdTdkYWVcdTdlNDdcdTdlOWJcdTllYjhcdTllYjRcdThkNzNcdThkODRcdThkOTRcdThkOTFcdThkYjFcdThkNjdcdThk'@;
put 'NmRcdThjNDdcdThjNDlcdTkxNGFcdTkxNTBcdTkxNGVcdTkxNGZcdTkxNjRcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syNDRdLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzI0NF1bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tbMjQ0XVt2XV09NjI0NjQrdixUWzYyNDY0K3ZdPWtbMjQ0XVt2XSk7'@;
put 'Zm9yKGtbMjQ1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MTYyXHU5MTYx'@;
put 'XHU5MTcwXHU5MTY5XHU5MTZmXHU5MTdkXHU5MTdlXHU5MTcyXHU5MTc0XHU5MTc5XHU5MThjXHU5MTg1XHU5MTkwXHU5MThkXHU5MTkxXHU5MWEyXHU5MWEzXHU5MWFhXHU5MWFkXHU5MWFlXHU5MWFmXHU5MWI1XHU5MWI0XHU5MWJhXHU4YzU1XHU5ZTdlXHU4ZGI4XHU4ZGViXHU4ZTA1XHU4'@;
put 'ZTU5XHU4ZTY5XHU4ZGI1XHU4ZGJmXHU4ZGJjXHU4ZGJhXHU4ZGM0XHU4ZGQ2XHU4ZGQ3XHU4ZGRhXHU4ZGRlXHU4ZGNlXHU4ZGNmXHU4ZGRiXHU4ZGM2XHU4ZGVjXHU4ZGY3XHU4ZGY4XHU4ZGUzXHU4ZGY5XHU4ZGZiXHU4ZGU0XHU4ZTA5XHU4ZGZkXHU4ZTE0XHU4ZTFkXHU4ZTFmXHU4ZTJj'@;
put 'XHU4ZTJlXHU4ZTIzXHU4ZTJmXHU4ZTNhXHU4ZTQwXHU4ZTM5XHU4ZTM1XHU4ZTNkXHU4ZTMxXHU4ZTQ5XHU4ZTQxXHU4ZTQyXHU4ZTUxXHU4ZTUyXHU4ZTRhXHU4ZTcwXHU4ZTc2XHU4ZTdjXHU4ZTZmXHU4ZTc0XHU4ZTg1XHU4ZThmXHU4ZTk0XHU4ZTkwXHU4ZTljXHU4ZTllXHU4Yzc4XHU4'@;
put 'YzgyXHU4YzhhXHU4Yzg1XHU4Yzk4XHU4Yzk0XHU2NTliXHU4OWQ2XHU4OWRlXHU4OWRhXHU4OWRjXHVmZmZkIi5zcGxpdCgiIiksdj0wO3YhPWtbMjQ1XS5sZW5ndGg7Kyt2KTY1NTMzIT09a1syNDVdW3ZdLmNoYXJDb2RlQXQoMCkmJihzZVtrWzI0NV1bdl1dPTYyNzIwK3YsVFs2MjcyMCt2'@;
put 'XT1rWzI0NV1bdl0pO2ZvcihrWzI0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ODllNVx1ODllYlx1ODllZlx1OGEzZVx1OGIyNlx1OTc1M1x1OTZlOVx1OTZmM1x1OTZlZlx1OTcwNlx1OTcwMVx1OTcwOFx1OTcwZlx1OTcwZVx1OTcyYVx1OTcyZFx1OTczMFx1OTczZVx1OWY4MFx1OWY4M1x1OWY4NVx1OWY4Nlx1OWY4N1x1OWY4OFx1OWY4OVx1OWY4YVx1OWY4Y1x1'@;
put 'OWVmZVx1OWYwYlx1OWYwZFx1OTZiOVx1OTZiY1x1OTZiZFx1OTZjZVx1OTZkMlx1NzdiZlx1OTZlMFx1OTI4ZVx1OTJhZVx1OTJjOFx1OTMzZVx1OTM2YVx1OTNjYVx1OTM4Zlx1OTQzZVx1OTQ2Ylx1OWM3Zlx1OWM4Mlx1OWM4NVx1OWM4Nlx1OWM4N1x1OWM4OFx1N2EyM1x1OWM4Ylx1OWM4'@;
put 'ZVx1OWM5MFx1OWM5MVx1OWM5Mlx1OWM5NFx1OWM5NVx1OWM5YVx1OWM5Ylx1OWM5ZVx1OWM5Zlx1OWNhMFx1OWNhMVx1OWNhMlx1OWNhM1x1OWNhNVx1OWNhNlx1OWNhN1x1OWNhOFx1OWNhOVx1OWNhYlx1OWNhZFx1OWNhZVx1OWNiMFx1OWNiMVx1OWNiMlx1OWNiM1x1OWNiNFx1OWNiNVx1'@;
put 'OWNiNlx1OWNiN1x1OWNiYVx1OWNiYlx1OWNiY1x1OWNiZFx1OWNjNFx1OWNjNVx1OWNjNlx1OWNjN1x1OWNjYVx1OWNjYlx1ZmZmZCIuc3BsaXQoIiIpLHY9MDt2IT1rWzI0Nl0ubGVuZ3RoOysrdik2NTUzMyE9PWtbMjQ2XVt2XS5jaGFyQ29kZUF0KDApJiYoc2Vba1syNDZdW3ZdXT02Mjk3'@;
put 'Nit2LFRbNjI5NzYrdl09a1syNDZdW3ZdKTtmb3Ioa1syNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdTljY2NcdTljY2RcdTljY2VcdTljY2ZcdTljZDBcdTljZDNcdTljZDRcdTljZDVcdTljZDdcdTljZDhcdTljZDlcdTljZGNcdTljZGRcdTljZGZcdTljZTJcdTk3N2NcdTk3ODVcdTk3OTFcdTk3OTJcdTk3OTRcdTk3YWZcdTk3YWJcdTk3YTNcdTk3YjJcdTk3YjRc'@;
put 'dTlhYjFcdTlhYjBcdTlhYjdcdTllNThcdTlhYjZcdTlhYmFcdTlhYmNcdTlhYzFcdTlhYzBcdTlhYzVcdTlhYzJcdTlhY2JcdTlhY2NcdTlhZDFcdTliNDVcdTliNDNcdTliNDdcdTliNDlcdTliNDhcdTliNGRcdTliNTFcdTk4ZThcdTk5MGRcdTk5MmVcdTk5NTVcdTk5NTRcdTlhZGZcdTlh'@;
put 'ZTFcdTlhZTZcdTlhZWZcdTlhZWJcdTlhZmJcdTlhZWRcdTlhZjlcdTliMDhcdTliMGZcdTliMTNcdTliMWZcdTliMjNcdTllYmRcdTllYmVcdTdlM2JcdTllODJcdTllODdcdTllODhcdTllOGJcdTllOTJcdTkzZDZcdTllOWRcdTllOWZcdTllZGJcdTllZGNcdTllZGRcdTllZTBcdTllZGZc'@;
put 'dTllZTJcdTllZTlcdTllZTdcdTllZTVcdTllZWFcdTllZWZcdTlmMjJcdTlmMmNcdTlmMmZcdTlmMzlcdTlmMzdcdTlmM2RcdTlmM2VcdTlmNDRcdWZmZmQiLnNwbGl0KCIiKSx2PTA7diE9a1syNDddLmxlbmd0aDsrK3YpNjU1MzMhPT1rWzI0N11bdl0uY2hhckNvZGVBdCgwKSYmKHNlW2tb'@;
put 'MjQ3XVt2XV09NjMyMzIrdixUWzYzMjMyK3ZdPWtbMjQ3XVt2XSk7cmV0dXJue2VuYzpzZSxkZWM6VH19KCksemVbMTAwMjldPWZ1bmN0aW9uKCl7Zm9yKHZhciBUPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0'@;
put 'XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzRcdTAxMDBcdTAxMDFceGM5'@;
put 'XHUwMTA0XHhkNlx4ZGNceGUxXHUwMTA1XHUwMTBjXHhlNFx1MDEwZFx1MDEwNlx1MDEwN1x4ZTlcdTAxNzlcdTAxN2FcdTAxMGVceGVkXHUwMTBmXHUwMTEyXHUwMTEzXHUwMTE2XHhmM1x1MDExN1x4ZjRceGY2XHhmNVx4ZmFcdTAxMWFcdTAxMWJceGZjXHUyMDIwXHhiMFx1MDExOFx4YTNc'@;
put 'eGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx1MDExOVx4YThcdTIyNjBcdTAxMjNcdTAxMmVcdTAxMmZcdTAxMmFcdTIyNjRcdTIyNjVcdTAxMmJcdTAxMzZcdTIyMDJcdTIyMTFcdTAxNDJcdTAxM2JcdTAxM2NcdTAxM2RcdTAxM2VcdTAxMzlcdTAxM2FcdTAxNDVcdTAxNDZcdTAx'@;
put 'NDNceGFjXHUyMjFhXHUwMTQ0XHUwMTQ3XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHUwMTQ4XHUwMTUwXHhkNVx1MDE1MVx1MDE0Y1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FcdTAxNGRcdTAxNTRcdTAxNTVcdTAxNThcdTIwMzlcdTIwM2FcdTAxNTlc'@;
put 'dTAxNTZcdTAxNTdcdTAxNjBcdTIwMWFcdTIwMWVcdTAxNjFcdTAxNWFcdTAxNWJceGMxXHUwMTY0XHUwMTY1XHhjZFx1MDE3ZFx1MDE3ZVx1MDE2YVx4ZDNceGQ0XHUwMTZiXHUwMTZlXHhkYVx1MDE2Zlx1MDE3MFx1MDE3MVx1MDE3Mlx1MDE3M1x4ZGRceGZkXHUwMTM3XHUwMTdiXHUwMTQx'@;
put 'XHUwMTdjXHUwMTIyXHUwMmM3IixzZT1bXSxrPXt9LHY9MDsyNTYhPXY7Kyt2KTY1NTMzIT09VC5jaGFyQ29kZUF0KHYpJiYoa1tULmNoYXJBdCh2KV09diksc2Vbdl09VC5jaGFyQXQodik7cmV0dXJue2VuYzprLGRlYzpzZX19KCksemVbMTAwNzldPWZ1bmN0aW9uKCl7Zm9yKHZhciBUPSJc'@;
put 'MFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFS'@;
put 'U1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzRceGM1XHhjN1x4YzlceGQxXHhkNlx4ZGNceGUxXHhlMFx4ZTJceGU0XHhlM1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVjXHhlZVx4ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZh'@;
put 'XHhmOVx4ZmJceGZjXHhkZFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHhiNFx4YThcdTIyNjBceGM2XHhkOFx1MjIxZVx4YjFcdTIyNjRcdTIyNjVceGE1XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1MjIyYlx4YWFceGJhXHUyMTI2XHhlNlx4Zjhc'@;
put 'eGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MjA0NFx4YTRceGQwXHhmMFx4ZGVceGZlXHhmZFx4'@;
put 'YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHhjYVx4YzFceGNiXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1ZmZmZFx4ZDJceGRhXHhkYlx4ZDlcdTAxMzFcdTAyYzZcdTAyZGNceGFmXHUwMmQ4XHUwMmQ5XHUwMmRhXHhiOFx1MDJkZFx1MDJkYlx1MDJjNyIsc2U9W10saz17fSx2PTA7'@;
put 'MjU2IT12Oysrdik2NTUzMyE9PVQuY2hhckNvZGVBdCh2KSYmKGtbVC5jaGFyQXQodildPXYpLHNlW3ZdPVQuY2hhckF0KHYpO3JldHVybntlbmM6ayxkZWM6c2V9fSgpLHplWzEwMDgxXT1mdW5jdGlvbigpe2Zvcih2YXIgVD0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxu'@;
put 'XHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0'@;
put 'dXZ3eHl6e3x9flx4N2ZceGM0XHhjNVx4YzdceGM5XHhkMVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhmMVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhmYVx4ZjlceGZiXHhmY1x1MjAyMFx4YjBceGEyXHhhM1x4YTdc'@;
put 'dTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHhiNFx4YThcdTIyNjBceGM2XHhkOFx1MjIxZVx4YjFcdTIyNjRcdTIyNjVceGE1XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1MjIyYlx4YWFceGJhXHUyMTI2XHhlNlx4ZjhceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIy'@;
put 'MDZceGFiXHhiYlx1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MDExZVx1MDExZlx1MDEzMFx1MDEzMVx1MDE1ZVx1MDE1Zlx1MjAyMVx4YjdcdTIwMWFcdTIwMWVcdTIwMzBc'@;
put 'eGMyXHhjYVx4YzFceGNiXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1ZmZmZFx4ZDJceGRhXHhkYlx4ZDlcdWZmZmRcdTAyYzZcdTAyZGNceGFmXHUwMmQ4XHUwMmQ5XHUwMmRhXHhiOFx1MDJkZFx1MDJkYlx1MDJjNyIsc2U9W10saz17fSx2PTA7MjU2IT12Oysrdik2NTUzMyE9PVQu'@;
put 'Y2hhckNvZGVBdCh2KSYmKGtbVC5jaGFyQXQodildPXYpLHNlW3ZdPVQuY2hhckF0KHYpO3JldHVybntlbmM6ayxkZWM6c2V9fSgpLHplWzI4NTkxXT1mdW5jdGlvbigpe2Zvcih2YXIgVD0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgx'@;
put 'MVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceDgwXHg4'@;
put 'MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFh'@;
put 'XHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx4ZDBceGQxXHhkMlx4ZDNc'@;
put 'eGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHhkZVx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4'@;
put 'ZmRceGZlXHhmZiIsc2U9W10saz17fSx2PTA7MjU2IT12Oysrdik2NTUzMyE9PVQuY2hhckNvZGVBdCh2KSYmKGtbVC5jaGFyQXQodildPXYpLHNlW3ZdPVQuY2hhckF0KHYpO3JldHVybntlbmM6ayxkZWM6c2V9fSgpLFdlLmV4cG9ydHMmJnR5cGVvZiBET19OT1RfRVhQT1JUX0NPREVQQUdF'@;
put 'PiJ1IiYmKFdlLmV4cG9ydHM9emUpLGZ1bmN0aW9uKFQsc2UpeyJ1c2Ugc3RyaWN0IjtpZih0eXBlb2YgemU+InUiKXt2YXIgaz16ZTtXZS5leHBvcnRzJiZ0eXBlb2YgRE9fTk9UX0VYUE9SVF9DT0RFUEFHRT4idSI/V2UuZXhwb3J0cz1zZShrKTpULmNwdGFibGU9c2Uoayl9ZWxzZSB6ZT1z'@;
put 'ZSh6ZSl9KHRoaXMsZnVuY3Rpb24oVCl7InVzZSBzdHJpY3QiO3ZhciBzZT17MTIwMDoidXRmMTZsZSIsMTIwMToidXRmMTZiZSIsMTJlMzoidXRmMzJsZSIsMTIwMDE6InV0ZjMyYmUiLDE2OTY5OiJ1dGY2NGxlIiwyMDEyNzoiYXNjaWkiLDY1ZTM6InV0ZjciLDY1MDAxOiJ1dGY4In0saz1b'@;
put 'ODc0LDEyNTAsMTI1MSwxMjUyLDEyNTMsMTI1NCwxMjU1LDEyNTYsMWU0XSx2PVs5MzIsOTM2LDk0OSw5NTBdLGhlPVs2NTAwMV0sSD17fSxCPXt9LEw9e30sSz17fSxKPWZ1bmN0aW9uKE0pe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKE0pfSxJPWZ1bmN0aW9uKE0pe3JldHVybiBNLmNo'@;
put 'YXJDb2RlQXQoMCl9LFI9dHlwZW9mIEJ1ZmZlcjwidSIsRT1mdW5jdGlvbigpe307aWYoUil7dmFyIHo9IUJ1ZmZlci5mcm9tO2lmKCF6KXRyeXtCdWZmZXIuZnJvbSgiZm9vIiwidXRmOCIpfWNhdGNoe3o9ITB9RT16P2Z1bmN0aW9uKEMsTSl7cmV0dXJuIE0/bmV3IEJ1ZmZlcihDLE0pOm5l'@;
put 'dyBCdWZmZXIoQyl9OkJ1ZmZlci5mcm9tLmJpbmQoQnVmZmVyKSxCdWZmZXIuYWxsb2NVbnNhZmV8fChCdWZmZXIuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oQyl7cmV0dXJuIG5ldyBCdWZmZXIoQyl9KTt2YXIgaj0xMDI0LFY9QnVmZmVyLmFsbG9jVW5zYWZlKGopLFc9ZnVuY3Rpb24oTSl7dmFy'@;
put 'IHk9ZnVuY3Rpb24oTSl7Zm9yKHZhciB5PUJ1ZmZlci5hbGxvY1Vuc2FmZSg2NTUzNikscD0wO3A8NjU1MzY7KytwKXlbcF09MDtmb3IodmFyIFM9T2JqZWN0LmtleXMoTSksUT1TLmxlbmd0aCxyZT0wLGZlPVNbcmVdO3JlPFE7KytyZSkoZmU9U1tyZV0pJiYoeVtmZS5jaGFyQ29kZUF0KDAp'@;
put 'XT1NW2ZlXSk7cmV0dXJuIHl9KFRbTV0uZW5jKTtyZXR1cm4gZnVuY3Rpb24oUyxRKXt2YXIgZmUscmU9Uy5sZW5ndGgsbWU9MCxrZT0wLFRlPTAsUGU9MDtpZigic3RyaW5nIj09dHlwZW9mIFMpZm9yKGZlPUJ1ZmZlci5hbGxvY1Vuc2FmZShyZSksbWU9MDttZTxyZTsrK21lKWZlW21lXT15'@;
put 'W1MuY2hhckNvZGVBdChtZSldO2Vsc2UgaWYoQnVmZmVyLmlzQnVmZmVyKFMpKXtmb3IoZmU9QnVmZmVyLmFsbG9jVW5zYWZlKDIqcmUpLGtlPTAsbWU9MDttZTxyZTsrK21lKShUZT1TW21lXSk8MTI4P2ZlW2tlKytdPXlbVGVdOlRlPDIyND8oZmVba2UrK109eVsoKDMxJlRlKTw8NikrKDYz'@;
put 'JlNbbWUrMV0pXSwrK21lKTpUZTwyNDA/KGZlW2tlKytdPXlbKCgxNSZUZSk8PDEyKSsoKDYzJlNbbWUrMV0pPDw2KSsoNjMmU1ttZSsyXSldLG1lKz0yKTooUGU9KCg3JlRlKTw8MTgpKygoNjMmU1ttZSsxXSk8PDEyKSsoKDYzJlNbbWUrMl0pPDw2KSsoNjMmU1ttZSszXSksbWUrPTMsUGU8'@;
put 'NjU1MzY/ZmVba2UrK109eVtQZV06KGZlW2tlKytdPXlbNTUyOTYrKChQZS09NjU1MzYpPj4xMCYxMDIzKV0sZmVba2UrK109eVs1NjMyMCsoMTAyMyZQZSldKSk7ZmU9ZmUuc2xpY2UoMCxrZSl9ZWxzZSBmb3IoZmU9QnVmZmVyLmFsbG9jVW5zYWZlKHJlKSxtZT0wO21lPHJlOysrbWUpZmVb'@;
put 'bWVdPXlbU1ttZV0uY2hhckNvZGVBdCgwKV07cmV0dXJuIFEmJiJidWYiIT09UT8iYXJyIiE9PVE/ZmUudG9TdHJpbmcoImJpbmFyeSIpOltdLnNsaWNlLmNhbGwoZmUpOmZlfX0sVT1mdW5jdGlvbihNKXt2YXIgeT1UW01dLmRlYyxwPUJ1ZmZlci5hbGxvY1Vuc2FmZSgxMzEwNzIpLFM9MCxR'@;
put 'PSIiO2ZvcihTPTA7Uzx5Lmxlbmd0aDsrK1MpaWYoUT15W1NdKXt2YXIgcmU9US5jaGFyQ29kZUF0KDApO3BbMipTXT0yNTUmcmUscFsyKlMrMV09cmU+Pjh9cmV0dXJuIGZ1bmN0aW9uKG1lKXt2YXIga2U9bWUubGVuZ3RoLFRlPTAsUGU9MDtpZigyKmtlPmomJihqPTIqa2UsVj1CdWZmZXIu'@;
put 'YWxsb2NVbnNhZmUoaikpLEJ1ZmZlci5pc0J1ZmZlcihtZSkpZm9yKFRlPTA7VGU8a2U7VGUrKylWWzIqVGVdPXBbUGU9MiptZVtUZV1dLFZbMipUZSsxXT1wW1BlKzFdO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBtZSlmb3IoVGU9MDtUZTxrZTtUZSsrKVBlPTIqbWUuY2hhckNvZGVBdChU'@;
put 'ZSksVlsyKlRlXT1wW1BlXSxWWzIqVGUrMV09cFtQZSsxXTtlbHNlIGZvcihUZT0wO1RlPGtlO1RlKyspVlsyKlRlXT1wW1BlPTIqbWVbVGVdXSxWWzIqVGUrMV09cFtQZSsxXTtyZXR1cm4gVi5zbGljZSgwLDIqa2UpLnRvU3RyaW5nKCJ1Y3MyIil9fSxxPWZ1bmN0aW9uKE0pe2Zvcih2YXIg'@;
put 'eT1UW01dLmVuYyxwPUJ1ZmZlci5hbGxvY1Vuc2FmZSgxMzEwNzIpLFM9MDtTPDEzMTA3MjsrK1MpcFtTXT0wO2Zvcih2YXIgUT1PYmplY3Qua2V5cyh5KSxyZT0wLGZlPVFbcmVdO3JlPFEubGVuZ3RoOysrcmUpaWYoZmU9UVtyZV0pe3ZhciBtZT1mZS5jaGFyQ29kZUF0KDApO3BbMiptZV09'@;
put 'MjU1JnlbZmVdLHBbMiptZSsxXT15W2ZlXT4+OH1yZXR1cm4gZnVuY3Rpb24oVGUsUGUpe3ZhciBGZT1UZS5sZW5ndGgsTmU9QnVmZmVyLmFsbG9jVW5zYWZlKDIqRmUpLExlPTAsQmU9MCxIZT0wLFFlPTAsbXQ9MDtpZigic3RyaW5nIj09dHlwZW9mIFRlKXtmb3IoTGU9UWU9MDtMZTxGZTsr'@;
put 'K0xlKUJlPTIqVGUuY2hhckNvZGVBdChMZSksTmVbUWUrK109cFtCZSsxXXx8cFtCZV0scFtCZSsxXT4wJiYoTmVbUWUrK109cFtCZV0pO05lPU5lLnNsaWNlKDAsUWUpfWVsc2UgaWYoQnVmZmVyLmlzQnVmZmVyKFRlKSl7Zm9yKExlPVFlPTA7TGU8RmU7KytMZSkobXQ9VGVbTGVdKTwxMjg/'@;
put 'QmU9bXQ6bXQ8MjI0PyhCZT0oKDMxJm10KTw8NikrKDYzJlRlW0xlKzFdKSwrK0xlKTptdDwyNDA/KEJlPSgoMTUmbXQpPDwxMikrKCg2MyZUZVtMZSsxXSk8PDYpKyg2MyZUZVtMZSsyXSksTGUrPTIpOihCZT0oKDcmbXQpPDwxOCkrKCg2MyZUZVtMZSsxXSk8PDEyKSsoKDYzJlRlW0xlKzJd'@;
put 'KTw8NikrKDYzJlRlW0xlKzNdKSxMZSs9MyksQmU8NjU1MzY/KE5lW1FlKytdPXBbMSsoQmUqPTIpXXx8cFtCZV0scFtCZSsxXT4wJiYoTmVbUWUrK109cFtCZV0pKTooTmVbUWUrK109cFsxKyhCZT0yKig1NTI5NisoKEhlPUJlLTY1NTM2KT4+MTAmMTAyMykpKV18fHBbQmVdLHBbQmUrMV0+'@;
put 'MCYmKE5lW1FlKytdPXBbQmVdKSxOZVtRZSsrXT1wWzErKEJlPTIqKDU2MzIwKygxMDIzJkhlKSkpXXx8cFtCZV0scFtCZSsxXT4wJiYoTmVbUWUrK109cFtCZV0pKTtOZT1OZS5zbGljZSgwLFFlKX1lbHNlIGZvcihMZT1RZT0wO0xlPEZlO0xlKyspQmU9MipUZVtMZV0uY2hhckNvZGVBdCgw'@;
put 'KSxOZVtRZSsrXT1wW0JlKzFdfHxwW0JlXSxwW0JlKzFdPjAmJihOZVtRZSsrXT1wW0JlXSk7cmV0dXJuIFBlJiYiYnVmIiE9PVBlPyJhcnIiIT09UGU/TmUudG9TdHJpbmcoImJpbmFyeSIpOltdLnNsaWNlLmNhbGwoTmUpOk5lfX0sdGU9ZnVuY3Rpb24oTSl7dmFyIFEseT1UW01dLmRlYyxw'@;
put 'PUJ1ZmZlci5hbGxvY1Vuc2FmZSgxMzEwNzIpLFM9MCxyZT0wLGZlPTAsbWU9MDtmb3IobWU9MDttZTw2NTUzNjsrK21lKXBbMiptZV09MjU1LHBbMiptZSsxXT0yNTM7Zm9yKFM9MDtTPHkubGVuZ3RoOysrUykoUT15W1NdKSYmKHJlPVEuY2hhckNvZGVBdCgwKSxwW2ZlPTIqU109MjU1JnJl'@;
put 'LHBbZmUrMV09cmU+PjgpO3JldHVybiBmdW5jdGlvbihUZSl7dmFyIFBlPVRlLmxlbmd0aCxGZT1CdWZmZXIuYWxsb2NVbnNhZmUoMipQZSksTmU9MCxMZT0wLEJlPTA7aWYoQnVmZmVyLmlzQnVmZmVyKFRlKSlmb3IoTmU9MDtOZTxQZTtOZSsrKTI1NT09PXBbTGU9MipUZVtOZV1dJiYyNTM9'@;
put 'PT1wW0xlKzFdJiYoTGU9MiooKFRlW05lXTw8OCkrVGVbTmUrMV0pLCsrTmUpLEZlW0JlKytdPXBbTGVdLEZlW0JlKytdPXBbTGUrMV07ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIFRlKWZvcihOZT0wO05lPFBlO05lKyspTGU9MipUZS5jaGFyQ29kZUF0KE5lKSwyNTU9PT1wW0xlXSYmMjUz'@;
put 'PT09cFtMZSsxXSYmKExlPTIqKChUZS5jaGFyQ29kZUF0KE5lKTw8OCkrVGUuY2hhckNvZGVBdChOZSsxKSksKytOZSksRmVbQmUrK109cFtMZV0sRmVbQmUrK109cFtMZSsxXTtlbHNlIGZvcihOZT0wO05lPFBlO05lKyspMjU1PT09cFtMZT0yKlRlW05lXV0mJjI1Mz09PXBbTGUrMV0mJihM'@;
put 'ZT0yKigoVGVbTmVdPDw4KStUZVtOZSsxXSksKytOZSksRmVbQmUrK109cFtMZV0sRmVbQmUrK109cFtMZSsxXTtyZXR1cm4gRmUuc2xpY2UoMCxCZSkudG9TdHJpbmcoInVjczIiKX19O0hbNjUwMDFdPWZ1bmN0aW9uIEMoTSl7aWYoInN0cmluZyI9PXR5cGVvZiBNKXJldHVybiBDKE0uc3Bs'@;
put 'aXQoIiIpLm1hcChJKSk7dmFyIHk9TS5sZW5ndGgscD0wLFM9MDs0Knk+aiYmKGo9NCp5LFY9QnVmZmVyLmFsbG9jVW5zYWZlKGopKTt2YXIgUT0wO3k+PTMmJjIzOT09TVswXSYmMTg3PT1NWzFdJiYxOTE9PU1bMl0mJihRPTMpO2Zvcih2YXIgcmU9MSxmZT0wLG1lPTA7UTx5O1ErPXJlKXJl'@;
put 'PTEsKG1lPU1bUV0pPDEyOD9wPW1lOm1lPDIyND8ocD02NCooMzEmbWUpKyg2MyZNW1ErMV0pLHJlPTIpOm1lPDI0MD8ocD0oKDE1Jm1lKTw8MTIpKzY0Kig2MyZNW1ErMV0pKyg2MyZNW1ErMl0pLHJlPTMpOihwPTI2MjE0NCooNyZtZSkrKCg2MyZNW1ErMV0pPDwxMikrNjQqKDYzJk1bUSsy'@;
put 'XSkrKDYzJk1bUSszXSkscmU9NCkscDw2NTUzNj8oVltmZSsrXT0yNTUmcCxWW2ZlKytdPXA+PjgpOihTPTU1Mjk2KygocC09NjU1MzYpPj4xMCYxMDIzKSxwPTU2MzIwKygxMDIzJnApLFZbZmUrK109MjU1JlMsVltmZSsrXT1TPj4+OCxWW2ZlKytdPTI1NSZwLFZbZmUrK109cD4+PjgmMjU1'@;
put 'KTtyZXR1cm4gVi5zbGljZSgwLGZlKS50b1N0cmluZygidWNzMiIpfSxCWzY1MDAxXT1mdW5jdGlvbihNLHkpe2lmKFImJkJ1ZmZlci5pc0J1ZmZlcihNKSlyZXR1cm4geSYmImJ1ZiIhPT15PyJhcnIiIT09eT9NLnRvU3RyaW5nKCJiaW5hcnkiKTpbXS5zbGljZS5jYWxsKE0pOk07dmFyIHA9'@;
put 'TS5sZW5ndGgsUz0wLFE9MCxyZT0wLGZlPSJzdHJpbmciPT10eXBlb2YgTTs0KnA+aiYmKGo9NCpwLFY9QnVmZmVyLmFsbG9jVW5zYWZlKGopKTtmb3IodmFyIG1lPTA7bWU8cDsrK21lKShTPWZlP00uY2hhckNvZGVBdChtZSk6TVttZV0uY2hhckNvZGVBdCgwKSk8PTEyNz9WW3JlKytdPVM6'@;
put 'Uzw9MjA0Nz8oVltyZSsrXT0xOTIrKFM+PjYpLFZbcmUrK109MTI4Kyg2MyZTKSk6Uz49NTUyOTYmJlM8PTU3MzQzPyhTLT01NTI5NiwrK21lLFE9KGZlP00uY2hhckNvZGVBdChtZSk6TVttZV0uY2hhckNvZGVBdCgwKSktNTYzMjArKFM8PDEwKSxWW3JlKytdPTI0MCsoUT4+PjE4JjcpLFZb'@;
put 'cmUrK109MTQ0KyhRPj4+MTImNjMpLFZbcmUrK109MTI4KyhRPj4+NiY2MyksVltyZSsrXT0xMjgrKDYzJlEpKTooVltyZSsrXT0yMjQrKFM+PjEyKSxWW3JlKytdPTEyOCsoUz4+NiY2MyksVltyZSsrXT0xMjgrKDYzJlMpKTtyZXR1cm4geSYmImJ1ZiIhPT15PyJhcnIiIT09eT9WLnNsaWNl'@;
put 'KDAscmUpLnRvU3RyaW5nKCJiaW5hcnkiKTpbXS5zbGljZS5jYWxsKFYsMCxyZSk6Vi5zbGljZSgwLHJlKX19dmFyIG5lPWZ1bmN0aW9uKCl7aWYoUil7aWYoTFtrWzBdXSlyZXR1cm47dmFyIE09MCx5PTA7Zm9yKE09MDtNPGsubGVuZ3RoOysrTSlUW3k9a1tNXV0mJihMW3ldPVUoeSksS1t5'@;
put 'XT1XKHkpKTtmb3IoTT0wO008di5sZW5ndGg7KytNKVRbeT12W01dXSYmKExbeV09dGUoeSksS1t5XT1xKHkpKTtmb3IoTT0wO008aGUubGVuZ3RoOysrTSlIW3k9aGVbTV1dJiYoTFt5XT1IW3ldKSxCW3ldJiYoS1t5XT1CW3ldKX19LGllPWZ1bmN0aW9uKEMsTSl7cmV0dXJuIiJ9LGxlPWZ1'@;
put 'bmN0aW9uKE0pe2RlbGV0ZSBMW01dLGRlbGV0ZSBLW01dfSx1ZT17ZW5jYWNoZTpuZSxkZWNhY2hlOmZ1bmN0aW9uKCl7aWYoUil7aWYoIUxba1swXV0pcmV0dXJuO2suZm9yRWFjaChsZSksdi5mb3JFYWNoKGxlKSxoZS5mb3JFYWNoKGxlKX1iPWllLHg9MH0sc2JjczprLGRiY3M6dn07bmUo'@;
put 'KTt2YXIgY2U9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLGI9aWUseD0wO3JldHVybiBULnV0aWxzPXtkZWNvZGU6ZnVuY3Rpb24gQyhNLHkpe3ZhciBwO2lmKHA9TFtNXSlyZXR1cm4gcCh5KTtpZigic3RyaW5nIj09'@;
put 'dHlwZW9mIHkpcmV0dXJuIEMoTSx5LnNwbGl0KCIiKS5tYXAoSSkpO3ZhciBOZSxTPXkubGVuZ3RoLFE9bmV3IEFycmF5KFMpLHJlPSIiLGZlPTAsbWU9MCxrZT0xLFRlPTAsUGU9MCxGZT1UW01dLExlPSIiO2lmKEZlJiYoTmU9RmUuZGVjKSlmb3IobWU9MDttZTxTO21lKz1rZSl7aWYoa2U9'@;
put 'MiwocmU9TmVbKHlbbWVdPDw4KSt5W21lKzFdXSl8fChrZT0xLHJlPU5lW3lbbWVdXSksIXJlKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIGNvZGU6ICIreVttZV0rIiAiK3lbbWUra2UtMV0rIiAiK21lKyIgIitrZSsiICIrTmVbeVttZV1dKTtRW1RlKytdPXJlfWVsc2V7aWYoIShM'@;
put 'ZT1zZVtNXSkpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgQ1A6ICIrTSk7c3dpdGNoKExlKXtjYXNlInV0ZjgiOmZvcihTPj0zJiYyMzk9PXlbMF0mJjE4Nz09eVsxXSYmMTkxPT15WzJdJiYobWU9Myk7bWU8UzttZSs9a2Upa2U9MSx5W21lXTwxMjg/ZmU9eVttZV06eVttZV08MjI0'@;
put 'PyhmZT02NCooMzEmeVttZV0pKyg2MyZ5W21lKzFdKSxrZT0yKTp5W21lXTwyNDA/KGZlPSgoMTUmeVttZV0pPDwxMikrNjQqKDYzJnlbbWUrMV0pKyg2MyZ5W21lKzJdKSxrZT0zKTooZmU9MjYyMTQ0Kig3JnlbbWVdKSsoKDYzJnlbbWUrMV0pPDwxMikrNjQqKDYzJnlbbWUrMl0pKyg2MyZ5'@;
put 'W21lKzNdKSxrZT00KSxmZTw2NTUzNnx8KFBlPTU1Mjk2KygoZmUtPTY1NTM2KT4+MTAmMTAyMyksZmU9NTYzMjArKDEwMjMmZmUpLFFbVGUrK109U3RyaW5nLmZyb21DaGFyQ29kZShQZSkpLFFbVGUrK109U3RyaW5nLmZyb21DaGFyQ29kZShmZSk7YnJlYWs7Y2FzZSJhc2NpaSI6aWYoUiYm'@;
put 'QnVmZmVyLmlzQnVmZmVyKHkpKXJldHVybiB5LnRvU3RyaW5nKExlKTtmb3IobWU9MDttZTxTO21lKyspUVttZV09U3RyaW5nLmZyb21DaGFyQ29kZSh5W21lXSk7VGU9UzticmVhaztjYXNlInV0ZjE2bGUiOmlmKFM+PTImJjI1NT09eVswXSYmMjU0PT15WzFdJiYobWU9MiksUiYmQnVmZmVy'@;
put 'LmlzQnVmZmVyKHkpKXJldHVybiB5LnRvU3RyaW5nKExlKTtmb3Ioa2U9MjttZSsxPFM7bWUrPWtlKVFbVGUrK109U3RyaW5nLmZyb21DaGFyQ29kZSgoeVttZSsxXTw8OCkreVttZV0pO2JyZWFrO2Nhc2UidXRmMTZiZSI6Zm9yKFM+PTImJjI1ND09eVswXSYmMjU1PT15WzFdJiYobWU9Miks'@;
put 'a2U9MjttZSsxPFM7bWUrPWtlKVFbVGUrK109U3RyaW5nLmZyb21DaGFyQ29kZSgoeVttZV08PDgpK3lbbWUrMV0pO2JyZWFrO2Nhc2UidXRmMzJsZSI6Zm9yKFM+PTQmJjI1NT09eVswXSYmMjU0PT15WzFdJiYwPT09eVsyXSYmMD09PXlbM10mJihtZT00KSxrZT00O21lPFM7bWUrPWtlKShm'@;
put 'ZT0oeVttZSszXTw8MjQpKyh5W21lKzJdPDwxNikrKHlbbWUrMV08PDgpK3lbbWVdKT42NTUzNT8oZmUtPTY1NTM2LFFbVGUrK109U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NisoZmU+PjEwJjEwMjMpKSxRW1RlKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoNTYzMjArKDEwMjMmZmUpKSk6UVtU'@;
put 'ZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGZlKTticmVhaztjYXNlInV0ZjMyYmUiOmZvcihTPj00JiYyNTU9PXlbM10mJjI1ND09eVsyXSYmMD09PXlbMV0mJjA9PT15WzBdJiYobWU9NCksa2U9NDttZTxTO21lKz1rZSkoZmU9KHlbbWVdPDwyNCkrKHlbbWUrMV08PDE2KSsoeVttZSsyXTw8'@;
put 'OCkreVttZSszXSk+NjU1MzU/KGZlLT02NTUzNixRW1RlKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYrKGZlPj4xMCYxMDIzKSksUVtUZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKDU2MzIwKygxMDIzJmZlKSkpOlFbVGUrK109U3RyaW5nLmZyb21DaGFyQ29kZShmZSk7YnJlYWs7Y2Fz'@;
put 'ZSJ1dGY3Ijpmb3IoUz49NCYmNDM9PXlbMF0mJjQ3PT15WzFdJiYxMTg9PXlbMl0mJihTPj01JiY1Nj09eVszXSYmNDU9PXlbNF0/bWU9NTooNTY9PXlbM118fDU3PT15WzNdfHw0Mz09eVszXXx8NDc9PXlbM10pJiYobWU9NCkpO21lPFM7bWUrPWtlKWlmKDQzPT09eVttZV0paWYoa2U9MSw0'@;
put 'NSE9PXlbbWUrMV0pe2Zvcig7U3RyaW5nLmZyb21DaGFyQ29kZSh5W21lK2tlXSkubWF0Y2goL1tBLVphLXowLTkrXC9dLyk7KWtlKys7dmFyIEJlPTA7NDU9PT15W21lK2tlXSYmKCsra2UsQmU9MSk7Zm9yKHZhciBIZT1bXSxRZT0iIixJZT0wLE9lPTAsZXQ9MCxudD0wLHFlPTE7cWU8a2Ut'@;
put 'QmUmJihJZT1jZS5pbmRleE9mKFN0cmluZy5mcm9tQ2hhckNvZGUoeVttZStxZSsrXSkpLE9lPWNlLmluZGV4T2YoU3RyaW5nLmZyb21DaGFyQ29kZSh5W21lK3FlKytdKSksSGUucHVzaChJZTw8MnxPZT4+NCksLTEhPT0oZXQ9Y2UuaW5kZXhPZihTdHJpbmcuZnJvbUNoYXJDb2RlKHlbbWUr'@;
put 'cWUrK10pKSkmJihIZS5wdXNoKCgxNSZPZSk8PDR8ZXQ+PjIpLC0xIT09KG50PWNlLmluZGV4T2YoU3RyaW5nLmZyb21DaGFyQ29kZSh5W21lK3FlKytdKSkpKSk7KW50PDY0JiZIZS5wdXNoKCgzJmV0KTw8NnxudCk7Zm9yKFFlPUMoMTIwMSxIZSkscWU9MDtxZTxRZS5sZW5ndGg7KytxZSlR'@;
put 'W1RlKytdPVFlLmNoYXJBdChxZSl9ZWxzZSBrZT0yLFFbVGUrK109IisiO2Vsc2Uga2U9MSxRW1RlKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoeVttZV0pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBtYWdpYzogIitNKyIgIitzZVtNXSl9fXJldHVybiBRLnNs'@;
put 'aWNlKDAsVGUpLmpvaW4oIiIpfSxlbmNvZGU6ZnVuY3Rpb24gQyhNLHkscCl7aWYoTT09PXgmJmIpcmV0dXJuIGIoeSxwKTtpZihLW01dKXJldHVybihiPUtbeD1NXSkoeSxwKTtSJiZCdWZmZXIuaXNCdWZmZXIoeSkmJih5PXkudG9TdHJpbmcoInV0ZjgiKSk7dmFyIFBlLFM9eS5sZW5ndGgs'@;
put 'UT1SP0J1ZmZlci5hbGxvY1Vuc2FmZSg0KlMpOltdLHJlPTAsZmU9MCxtZT0wLGtlPTAsVGU9VFtNXSxGZT0iIixOZT0ic3RyaW5nIj09dHlwZW9mIHk7aWYoVGUmJihQZT1UZS5lbmMpKWZvcihmZT0wO2ZlPFM7KytmZSwrK21lKShyZT1QZVtOZT95LmNoYXJBdChmZSk6eVtmZV1dKT4yNTU/'@;
put 'KFFbbWVdPXJlPj44LFFbKyttZV09MjU1JnJlKTpRW21lXT0yNTUmcmU7ZWxzZXtpZighKEZlPXNlW01dKSl0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBDUDogIitNKTtzd2l0Y2goRmUpe2Nhc2UidXRmOCI6aWYoUiYmTmUpe21lPShRPUUoeSxGZSkpLmxlbmd0aDticmVha31mb3Io'@;
put 'ZmU9MDtmZTxTOysrZmUsKyttZSkocmU9TmU/eS5jaGFyQ29kZUF0KGZlKTp5W2ZlXS5jaGFyQ29kZUF0KDApKTw9MTI3P1FbbWVdPXJlOnJlPD0yMDQ3PyhRW21lXT0xOTIrKHJlPj42KSxRWysrbWVdPTEyOCsoNjMmcmUpKTpyZT49NTUyOTYmJnJlPD01NzM0Mz8ocmUtPTU1Mjk2LGtlPShO'@;
put 'ZT95LmNoYXJDb2RlQXQoKytmZSk6eVsrK2ZlXS5jaGFyQ29kZUF0KDApKS01NjMyMCsocmU8PDEwKSxRW21lXT0yNDArKGtlPj4+MTgmNyksUVsrK21lXT0xNDQrKGtlPj4+MTImNjMpLFFbKyttZV09MTI4KyhrZT4+PjYmNjMpLFFbKyttZV09MTI4Kyg2MyZrZSkpOihRW21lXT0yMjQrKHJl'@;
put 'Pj4xMiksUVsrK21lXT0xMjgrKHJlPj42JjYzKSxRWysrbWVdPTEyOCsoNjMmcmUpKTticmVhaztjYXNlImFzY2lpIjppZihSJiYic3RyaW5nIj09dHlwZW9mIHkpe21lPShRPUUoeSxGZSkpLmxlbmd0aDticmVha31mb3IoZmU9MDtmZTxTOysrZmUsKyttZSl7aWYoISgocmU9TmU/eS5jaGFy'@;
put 'Q29kZUF0KGZlKTp5W2ZlXS5jaGFyQ29kZUF0KDApKTw9MTI3KSl0aHJvdyBuZXcgRXJyb3IoImJhZCBhc2NpaSAiK3JlKTtRW21lXT1yZX1icmVhaztjYXNlInV0ZjE2bGUiOmlmKFImJiJzdHJpbmciPT10eXBlb2YgeSl7bWU9KFE9RSh5LEZlKSkubGVuZ3RoO2JyZWFrfWZvcihmZT0wO2Zl'@;
put 'PFM7KytmZSlyZT1OZT95LmNoYXJDb2RlQXQoZmUpOnlbZmVdLmNoYXJDb2RlQXQoMCksUVttZSsrXT0yNTUmcmUsUVttZSsrXT1yZT4+ODticmVhaztjYXNlInV0ZjE2YmUiOmZvcihmZT0wO2ZlPFM7KytmZSlyZT1OZT95LmNoYXJDb2RlQXQoZmUpOnlbZmVdLmNoYXJDb2RlQXQoMCksUVtt'@;
put 'ZSsrXT1yZT4+OCxRW21lKytdPTI1NSZyZTticmVhaztjYXNlInV0ZjMybGUiOmZvcihmZT0wO2ZlPFM7KytmZSkocmU9TmU/eS5jaGFyQ29kZUF0KGZlKTp5W2ZlXS5jaGFyQ29kZUF0KDApKT49NTUyOTYmJnJlPD01NzM0MyYmKHJlPTY1NTM2KyhyZS01NTI5Njw8MTApKyh5WysrZmVdLmNo'@;
put 'YXJDb2RlQXQoMCktNTYzMjApKSxRW21lKytdPTI1NSZyZSxRW21lKytdPTI1NSYocmU+Pj04KSxRW21lKytdPTI1NSYocmU+Pj04KSxRW21lKytdPTI1NSYocmU+Pj04KTticmVhaztjYXNlInV0ZjMyYmUiOmZvcihmZT0wO2ZlPFM7KytmZSkocmU9TmU/eS5jaGFyQ29kZUF0KGZlKTp5W2Zl'@;
put 'XS5jaGFyQ29kZUF0KDApKT49NTUyOTYmJnJlPD01NzM0MyYmKHJlPTY1NTM2KyhyZS01NTI5Njw8MTApKyh5WysrZmVdLmNoYXJDb2RlQXQoMCktNTYzMjApKSxRW21lKzNdPTI1NSZyZSxRW21lKzJdPTI1NSYocmU+Pj04KSxRW21lKzFdPTI1NSYocmU+Pj04KSxRW21lXT0yNTUmKHJlPj49'@;
put 'OCksbWUrPTQ7YnJlYWs7Y2FzZSJ1dGY3Ijpmb3IoZmU9MDtmZTxTO2ZlKyspe3ZhciBMZT1OZT95LmNoYXJBdChmZSk6eVtmZV0uY2hhckF0KDApO2lmKCIrIiE9PUxlKWlmKCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSco'@;
put 'KSwtLi86PyIuaW5kZXhPZihMZSk+LTEpUVttZSsrXT1MZS5jaGFyQ29kZUF0KDApO2Vsc2V7dmFyIEJlPUMoMTIwMSxMZSk7UVttZSsrXT00MyxRW21lKytdPWNlLmNoYXJDb2RlQXQoQmVbMF0+PjIpLFFbbWUrK109Y2UuY2hhckNvZGVBdCgoKDMmQmVbMF0pPDw0KSsoKEJlWzFdfHwwKT4+'@;
put 'NCkpLFFbbWUrK109Y2UuY2hhckNvZGVBdCgoKDE1JkJlWzFdKTw8MikrKChCZVsyXXx8MCk+PjYpKSxRW21lKytdPTQ1fWVsc2UgUVttZSsrXT00MyxRW21lKytdPTQ1fWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBtYWdpYzogIitNKyIgIitzZVtNXSl9fXJl'@;
put 'dHVybiBRPVEuc2xpY2UoMCxtZSksUj9wJiYiYnVmIiE9PXA/ImFyciIhPT1wP1EudG9TdHJpbmcoImJpbmFyeSIpOltdLnNsaWNlLmNhbGwoUSk6UToic3RyIj09cD9RLm1hcChKKS5qb2luKCIiKTpRfSxoYXNjcDpmdW5jdGlvbihNKXtyZXR1cm4hKCFUW01dJiYhc2VbTV0pfSxtYWdpYzpz'@;
put 'ZSxjYWNoZTp1ZX0sVH0pfSw3NTQ0NjooV2UsemUpPT57dmFyIFQsc2UsazshZnVuY3Rpb24odil7aWYodHlwZW9mIERPX05PVF9FWFBPUlRfSlNaSVA+InUiKVdlLmV4cG9ydHM9digpO2Vsc2UgaWYodHlwZW9mIERPX05PVF9FWFBPUlRfSlNaSVA+InUiKUpTWmlwU3luYz12KCksc2U9W10s'@;
put 'dm9pZCAwIT09KGs9ImZ1bmN0aW9uIj09dHlwZW9mKFQ9dik/VC5hcHBseSh6ZSxzZSk6VCkmJihXZS5leHBvcnRzPWspO2Vsc2V7dmFyIGhlO3R5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9oZT1nbG9iYWxUaGlzOnR5cGVvZiB3aW5kb3c8InUiP2hlPXdpbmRvdzp0eXBlb2YgZ2xvYmFsPCJ1Ij9o'@;
put 'ZT1nbG9iYWw6dHlwZW9mICQ8InUiJiYkLmdsb2JhbD9oZT0kLmdsb2JhbDp0eXBlb2Ygc2VsZjwidSImJihoZT1zZWxmKSxoZS5KU1ppcFN5bmM9digpfX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gQihMLEssSil7ZnVuY3Rpb24gSSh6LGope2lmKCFLW3pdKXtpZighTFt6XSl7aWYo'@;
put 'UilyZXR1cm4gUih6LCEwKTt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIit6KyInIil9dmFyIEc9S1t6XT17ZXhwb3J0czp7fX07TFt6XVswXS5jYWxsKEcuZXhwb3J0cyxmdW5jdGlvbihXKXtyZXR1cm4gSShMW3pdWzFdW1ddfHxXKX0sRyxHLmV4cG9ydHMsQixMLEss'@;
put 'Sil9cmV0dXJuIEtbel0uZXhwb3J0c31mb3IodmFyIFI9dm9pZCAwLEU9MDtFPEoubGVuZ3RoO0UrKylJKEpbRV0pO3JldHVybiBJfSh7MTpbZnVuY3Rpb24oQixMLEspeyJ1c2Ugc3RyaWN0Ijt2YXIgSj0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2'@;
put 'd3h5ejAxMjM0NTY3ODkrLz0iO0suZW5jb2RlPWZ1bmN0aW9uKEksUil7Zm9yKHZhciB6LGosVixHLFcsVSxxLEU9IiIsdGU9MDt0ZTxJLmxlbmd0aDspRz0oej1JLmNoYXJDb2RlQXQodGUrKykpPj4yLFc9KDMmeik8PDR8KGo9SS5jaGFyQ29kZUF0KHRlKyspKT4+NCxVPSgxNSZqKTw8Mnwo'@;
put 'Vj1JLmNoYXJDb2RlQXQodGUrKykpPj42LHE9NjMmVixpc05hTihqKT9VPXE9NjQ6aXNOYU4oVikmJihxPTY0KSxFPUUrSi5jaGFyQXQoRykrSi5jaGFyQXQoVykrSi5jaGFyQXQoVSkrSi5jaGFyQXQocSk7cmV0dXJuIEV9LEsuZGVjb2RlPWZ1bmN0aW9uKEksUil7dmFyIGosVixHLFcsVSxx'@;
put 'LEU9IiIsdGU9MDtmb3IoST1JLnJlcGxhY2UoL1teQS1aYS16MC05XCtcL1w9XS9nLCIiKTt0ZTxJLmxlbmd0aDspRz1KLmluZGV4T2YoSS5jaGFyQXQodGUrKykpLGo9KDE1JihXPUouaW5kZXhPZihJLmNoYXJBdCh0ZSsrKSkpKTw8NHwoVT1KLmluZGV4T2YoSS5jaGFyQXQodGUrKykpKT4+'@;
put 'MixWPSgzJlUpPDw2fChxPUouaW5kZXhPZihJLmNoYXJBdCh0ZSsrKSkpLEUrPVN0cmluZy5mcm9tQ2hhckNvZGUoRzw8MnxXPj40KSw2NCE9VSYmKEUrPVN0cmluZy5mcm9tQ2hhckNvZGUoaikpLDY0IT1xJiYoRSs9U3RyaW5nLmZyb21DaGFyQ29kZShWKSk7cmV0dXJuIEV9fSx7fV0sMjpb'@;
put 'ZnVuY3Rpb24oQixMLEspeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBKKCl7dGhpcy5jb21wcmVzc2VkU2l6ZT0wLHRoaXMudW5jb21wcmVzc2VkU2l6ZT0wLHRoaXMuY3JjMzI9MCx0aGlzLmNvbXByZXNzaW9uTWV0aG9kPW51bGwsdGhpcy5jb21wcmVzc2VkQ29udGVudD1udWxsfUoucHJvdG90'@;
put 'eXBlPXtnZXRDb250ZW50OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGdldENvbXByZXNzZWRDb250ZW50OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9fSxMLmV4cG9ydHM9Sn0se31dLDM6W2Z1bmN0aW9uKEIsTCxLKXsidXNlIHN0cmljdCI7Sy5TVE9SRT17bWFnaWM6IlwwXDAiLGNvbXByZXNz'@;
put 'OmZ1bmN0aW9uKEope3JldHVybiBKfSx1bmNvbXByZXNzOmZ1bmN0aW9uKEope3JldHVybiBKfSxjb21wcmVzc0lucHV0VHlwZTpudWxsLHVuY29tcHJlc3NJbnB1dFR5cGU6bnVsbH0sSy5ERUZMQVRFPUIoIi4vZmxhdGUiKX0seyIuL2ZsYXRlIjo4fV0sNDpbZnVuY3Rpb24oQixMLEspeyJ1'@;
put 'c2Ugc3RyaWN0Ijt2YXIgSj1CKCIuL3V0aWxzIiksST1bMCwxOTk2OTU5ODk0LDM5OTM5MTk3ODgsMjU2NzUyNDc5NCwxMjQ2MzQxMzcsMTg4NjA1NzYxNSwzOTE1NjIxNjg1LDI2NTczOTIwMzUsMjQ5MjY4Mjc0LDIwNDQ1MDgzMjQsMzc3MjExNTIzMCwyNTQ3MTc3ODY0LDE2Mjk0MTk5NSwy'@;
put 'MTI1NTYxMDIxLDM4ODc2MDcwNDcsMjQyODQ0NDA0OSw0OTg1MzY1NDgsMTc4OTkyNzY2Niw0MDg5MDE2NjQ4LDIyMjcwNjEyMTQsNDUwNTQ4ODYxLDE4NDMyNTg2MDMsNDEwNzU4MDc1MywyMjExNjc3NjM5LDMyNTg4Mzk5MCwxNjg0Nzc3MTUyLDQyNTExMjIwNDIsMjMyMTkyNjYzNiwzMzU2'@;
put 'MzM0ODcsMTY2MTM2NTQ2NSw0MTk1MzAyNzU1LDIzNjYxMTUzMTcsOTk3MDczMDk2LDEyODE5NTM4ODYsMzU3OTg1NTMzMiwyNzI0Njg4MjQyLDEwMDY4ODgxNDUsMTI1ODYwNzY4NywzNTI0MTAxNjI5LDI3Njg5NDI0NDMsOTAxMDk3NzIyLDExMTkwMDA2ODQsMzY4NjUxNzIwNiwyODk4MDY1'@;
put 'NzI4LDg1MzA0NDQ1MSwxMTcyMjY2MTAxLDM3MDUwMTU3NTksMjg4MjYxNjY2NSw2NTE3Njc5ODAsMTM3MzUwMzU0NiwzMzY5NTU0MzA0LDMyMTgxMDQ1OTgsNTY1NTA3MjUzLDE0NTQ2MjE3MzEsMzQ4NTExMTcwNSwzMDk5NDM2MzAzLDY3MTI2Njk3NCwxNTk0MTk4MDI0LDMzMjI3MzA5MzAs'@;
put 'Mjk3MDM0NzgxMiw3OTU4MzU1MjcsMTQ4MzIzMDIyNSwzMjQ0MzY3Mjc1LDMwNjAxNDk1NjUsMTk5NDE0NjE5MiwzMTE1ODUzNCwyNTYzOTA3NzcyLDQwMjM3MTc5MzAsMTkwNzQ1OTQ2NSwxMTI2MzcyMTUsMjY4MDE1MzI1MywzOTA0NDI3MDU5LDIwMTM3NzYyOTAsMjUxNzIyMDM2LDI1MTcy'@;
put 'MTUzNzQsMzc3NTgzMDA0MCwyMTM3NjU2NzYzLDE0MTM3NjgxMywyNDM5Mjc3NzE5LDM4NjUyNzEyOTcsMTgwMjE5NTQ0NCw0NzY4NjQ4NjYsMjIzODAwMTM2OCw0MDY2NTA4ODc4LDE4MTIzNzA5MjUsNDUzMDkyNzMxLDIxODE2MjUwMjUsNDExMTQ1MTIyMywxNzA2MDg4OTAyLDMxNDA0Mjcw'@;
put 'NCwyMzQ0NTMyMjAyLDQyNDAwMTc1MzIsMTY1ODY1ODI3MSwzNjY2MTk5NzcsMjM2MjY3MDMyMyw0MjI0OTk0NDA1LDEzMDM1MzU5NjAsOTg0OTYxNDg2LDI3NDcwMDcwOTIsMzU2OTAzNzUzOCwxMjU2MTcwODE3LDEwMzc2MDQzMTEsMjc2NTIxMDczMywzNTU0MDc5OTk1LDExMzEwMTQ1MDYs'@;
put 'ODc5Njc5OTk2LDI5MDkyNDM0NjIsMzY2Mzc3MTg1NiwxMTQxMTI0NDY3LDg1NTg0MjI3NywyODUyODAxNjMxLDM3MDg2NDg2NDksMTM0MjUzMzk0OCw2NTQ0NTkzMDYsMzE4ODM5NjA0OCwzMzczMDE1MTc0LDE0NjY0Nzk5MDksNTQ0MTc5NjM1LDMxMTA1MjM5MTMsMzQ2MjUyMjAxNSwxNTkx'@;
put 'NjcxMDU0LDcwMjEzODc3NiwyOTY2NDYwNDUwLDMzNTI3OTk0MTIsMTUwNDkxODgwNyw3ODM1NTE4NzMsMzA4MjY0MDQ0MywzMjMzNDQyOTg5LDM5ODgyOTIzODQsMjU5NjI1NDY0Niw2MjMxNzA2OCwxOTU3ODEwODQyLDM5Mzk4NDU5NDUsMjY0NzgxNjExMSw4MTQ3MDk5NywxOTQzODAzNTIz'@;
put 'LDM4MTQ5MTg5MzAsMjQ4OTU5NjgwNCwyMjUyNzQ0MzAsMjA1Mzc5MDM3NiwzODI2MTc1NzU1LDI0NjY5MDYwMTMsMTY3ODE2NzQzLDIwOTc2NTEzNzcsNDAyNzU1MjU4MCwyMjY1NDkwMzg2LDUwMzQ0NDA3MiwxNzYyMDUwODE0LDQxNTA0MTcyNDUsMjE1NDEyOTM1NSw0MjY1MjIyMjUsMTg1'@;
put 'MjUwNzg3OSw0Mjc1MzEzNTI2LDIzMTIzMTc5MjAsMjgyNzUzNjI2LDE3NDI1NTU4NTIsNDE4OTcwODE0MywyMzk0ODc3OTQ1LDM5NzkxNzc2MywxNjIyMTgzNjM3LDM2MDQzOTA4ODgsMjcxNDg2NjU1OCw5NTM3Mjk3MzIsMTM0MDA3NjYyNiwzNTE4NzE5OTg1LDI3OTczNjA5OTksMTA2ODgy'@;
put 'ODM4MSwxMjE5NjM4ODU5LDM2MjQ3NDE4NTAsMjkzNjY3NTE0OCw5MDYxODU0NjIsMTA5MDgxMjUxMiwzNzQ3NjcyMDAzLDI4MjUzNzk2NjksODI5MzI5MTM1LDExODEzMzUxNjEsMzQxMjE3NzgwNCwzMTYwODM0ODQyLDYyODA4NTQwOCwxMzgyNjA1MzY2LDM0MjMzNjkxMDksMzEzODA3ODQ2'@;
put 'Nyw1NzA1NjIyMzMsMTQyNjQwMDgxNSwzMzE3MzE2NTQyLDI5OTg3MzM2MDgsNzMzMjM5OTU0LDE1NTUyNjE5NTYsMzI2ODkzNTU5MSwzMDUwMzYwNjI1LDc1MjQ1OTQwMywxNTQxMzIwMjIxLDI2MDcwNzE5MjAsMzk2NTk3MzAzMCwxOTY5OTIyOTcyLDQwNzM1NDk4LDI2MTc4MzcyMjUsMzk0'@;
put 'MzU3NzE1MSwxOTEzMDg3ODc3LDgzOTA4MzcxLDI1MTIzNDE2MzQsMzgwMzc0MDY5MiwyMDc1MjA4NjIyLDIxMzI2MTExMiwyNDYzMjcyNjAzLDM4NTU5OTAyODUsMjA5NDg1NDA3MSwxOTg5NTg4ODEsMjI2MjAyOTAxMiw0MDU3MjYwNjEwLDE3NTkzNTk5OTIsNTM0NDE0MTkwLDIxNzY3MTg1'@;
put 'NDEsNDEzOTMyOTExNSwxODczODM2MDAxLDQxNDY2NDU2NywyMjgyMjQ4OTM0LDQyNzkyMDAzNjgsMTcxMTY4NDU1NCwyODUyODExMTYsMjQwNTgwMTcyNyw0MTY3MjE2NzQ1LDE2MzQ0Njc3OTUsMzc2MjI5NzAxLDI2ODUwNjc4OTYsMzYwODAwNzQwNiwxMzA4OTE4NjEyLDk1NjU0MzkzOCwy'@;
put 'ODA4NTU1MTA1LDM0OTU5NTgyNjMsMTIzMTYzNjMwMSwxMDQ3NDI3MDM1LDI5MzI5NTk4MTgsMzY1NDcwMzgzNiwxMDg4MzU5MjcwLDkzNjkxOGUzLDI4NDc3MTQ4OTksMzczNjgzNzgyOSwxMjAyOTAwODYzLDgxNzIzMzg5NywzMTgzMzQyMTA4LDM0MDEyMzcxMzAsMTQwNDI3NzU1Miw2MTU4'@;
put 'MTgxNTAsMzEzNDIwNzQ5MywzNDUzNDIxMjAzLDE0MjM4NTc0NDksNjAxNDUwNDMxLDMwMDk4Mzc2MTQsMzI5NDcxMDQ1NiwxNTY3MTAzNzQ2LDcxMTkyODcyNCwzMDIwNjY4NDcxLDMyNzIzODAwNjUsMTUxMDMzNDIzNSw3NTUxNjcxMTddO0wuZXhwb3J0cz1mdW5jdGlvbihFLHope2lmKHR5'@;
put 'cGVvZiBFPiJ1Inx8IUUubGVuZ3RoKXJldHVybiAwO3ZhciBqPSJzdHJpbmciIT09Si5nZXRUeXBlT2YoRSk7dHlwZW9mIHo+InUiJiYoej0wKTt2YXIgVz0wO3pePS0xO2Zvcih2YXIgVT0wLHE9RS5sZW5ndGg7VTxxO1UrKylXPWo/RVtVXTpFLmNoYXJDb2RlQXQoVSksej16Pj4+OF5JWzI1'@;
put 'NSYoel5XKV07cmV0dXJuLTFeen19LHsiLi91dGlscyI6MjF9XSw1OltmdW5jdGlvbihCLEwsSyl7InVzZSBzdHJpY3QiO3ZhciBKPUIoIi4vdXRpbHMiKTtmdW5jdGlvbiBJKFIpe3RoaXMuZGF0YT1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5pbmRleD0wfUkucHJvdG90eXBlPXtjaGVja09m'@;
put 'ZnNldDpmdW5jdGlvbihSKXt0aGlzLmNoZWNrSW5kZXgodGhpcy5pbmRleCtSKX0sY2hlY2tJbmRleDpmdW5jdGlvbihSKXtpZih0aGlzLmxlbmd0aDxSfHxSPDApdGhyb3cgbmV3IEVycm9yKCJFbmQgb2YgZGF0YSByZWFjaGVkIChkYXRhIGxlbmd0aCA9ICIrdGhpcy5sZW5ndGgrIiwgYXNr'@;
put 'ZWQgaW5kZXggPSAiK1IrIikuIENvcnJ1cHRlZCB6aXAgPyIpfSxzZXRJbmRleDpmdW5jdGlvbihSKXt0aGlzLmNoZWNrSW5kZXgoUiksdGhpcy5pbmRleD1SfSxza2lwOmZ1bmN0aW9uKFIpe3RoaXMuc2V0SW5kZXgodGhpcy5pbmRleCtSKX0sYnl0ZUF0OmZ1bmN0aW9uKFIpe30scmVhZElu'@;
put 'dDpmdW5jdGlvbihSKXt2YXIgeixFPTA7Zm9yKHRoaXMuY2hlY2tPZmZzZXQoUiksej10aGlzLmluZGV4K1ItMTt6Pj10aGlzLmluZGV4O3otLSlFPShFPDw4KSt0aGlzLmJ5dGVBdCh6KTtyZXR1cm4gdGhpcy5pbmRleCs9UixFfSxyZWFkU3RyaW5nOmZ1bmN0aW9uKFIpe3JldHVybiBKLnRy'@;
put 'YW5zZm9ybVRvKCJzdHJpbmciLHRoaXMucmVhZERhdGEoUikpfSxyZWFkRGF0YTpmdW5jdGlvbihSKXt9LGxhc3RJbmRleE9mU2lnbmF0dXJlOmZ1bmN0aW9uKFIpe30scmVhZERhdGU6ZnVuY3Rpb24oKXt2YXIgUj10aGlzLnJlYWRJbnQoNCk7cmV0dXJuIG5ldyBEYXRlKDE5ODArKFI+PjI1'@;
put 'JjEyNyksKFI+PjIxJjE1KS0xLFI+PjE2JjMxLFI+PjExJjMxLFI+PjUmNjMsKDMxJlIpPDwxKX19LEwuZXhwb3J0cz1JfSx7Ii4vdXRpbHMiOjIxfV0sNjpbZnVuY3Rpb24oQixMLEspeyJ1c2Ugc3RyaWN0IjtLLmJhc2U2ND0hMSxLLmJpbmFyeT0hMSxLLmRpcj0hMSxLLmNyZWF0ZUZvbGRl'@;
put 'cnM9ITEsSy5kYXRlPW51bGwsSy5jb21wcmVzc2lvbj1udWxsLEsuY29tbWVudD1udWxsfSx7fV0sNzpbZnVuY3Rpb24oQixMLEspeyJ1c2Ugc3RyaWN0Ijt2YXIgSj1CKCIuL3V0aWxzIik7Sy5zdHJpbmcyYmluYXJ5PWZ1bmN0aW9uKEkpe3JldHVybiBKLnN0cmluZzJiaW5hcnkoSSl9LEsu'@;
put 'c3RyaW5nMlVpbnQ4QXJyYXk9ZnVuY3Rpb24oSSl7cmV0dXJuIEoudHJhbnNmb3JtVG8oInVpbnQ4YXJyYXkiLEkpfSxLLnVpbnQ4QXJyYXkyU3RyaW5nPWZ1bmN0aW9uKEkpe3JldHVybiBKLnRyYW5zZm9ybVRvKCJzdHJpbmciLEkpfSxLLnN0cmluZzJCbG9iPWZ1bmN0aW9uKEkpe3ZhciBS'@;
put 'PUoudHJhbnNmb3JtVG8oImFycmF5YnVmZmVyIixJKTtyZXR1cm4gSi5hcnJheUJ1ZmZlcjJCbG9iKFIpfSxLLmFycmF5QnVmZmVyMkJsb2I9ZnVuY3Rpb24oSSl7cmV0dXJuIEouYXJyYXlCdWZmZXIyQmxvYihJKX0sSy50cmFuc2Zvcm1Ubz1mdW5jdGlvbihJLFIpe3JldHVybiBKLnRyYW5z'@;
put 'Zm9ybVRvKEksUil9LEsuZ2V0VHlwZU9mPWZ1bmN0aW9uKEkpe3JldHVybiBKLmdldFR5cGVPZihJKX0sSy5jaGVja1N1cHBvcnQ9ZnVuY3Rpb24oSSl7cmV0dXJuIEouY2hlY2tTdXBwb3J0KEkpfSxLLk1BWF9WQUxVRV8xNkJJVFM9Si5NQVhfVkFMVUVfMTZCSVRTLEsuTUFYX1ZBTFVFXzMy'@;
put 'QklUUz1KLk1BWF9WQUxVRV8zMkJJVFMsSy5wcmV0dHk9ZnVuY3Rpb24oSSl7cmV0dXJuIEoucHJldHR5KEkpfSxLLmZpbmRDb21wcmVzc2lvbj1mdW5jdGlvbihJKXtyZXR1cm4gSi5maW5kQ29tcHJlc3Npb24oSSl9LEsuaXNSZWdFeHA9ZnVuY3Rpb24oSSl7cmV0dXJuIEouaXNSZWdFeHAo'@;
put 'SSl9fSx7Ii4vdXRpbHMiOjIxfV0sODpbZnVuY3Rpb24oQixMLEspeyJ1c2Ugc3RyaWN0Ijt2YXIgSj10eXBlb2YgVWludDhBcnJheTwidSImJnR5cGVvZiBVaW50MTZBcnJheTwidSImJnR5cGVvZiBVaW50MzJBcnJheTwidSIsST1CKCJwYWtvIik7Sy51bmNvbXByZXNzSW5wdXRUeXBlPUo/'@;
put 'InVpbnQ4YXJyYXkiOiJhcnJheSIsSy5jb21wcmVzc0lucHV0VHlwZT1KPyJ1aW50OGFycmF5IjoiYXJyYXkiLEsubWFnaWM9IlxiXDAiLEsuY29tcHJlc3M9ZnVuY3Rpb24oUil7cmV0dXJuIEkuZGVmbGF0ZVJhdyhSKX0sSy51bmNvbXByZXNzPWZ1bmN0aW9uKFIpe3JldHVybiBJLmluZmxh'@;
put 'dGVSYXcoUil9fSx7cGFrbzoyNH1dLDk6W2Z1bmN0aW9uKEIsTCxLKXsidXNlIHN0cmljdCI7dmFyIEo9QigiLi9iYXNlNjQiKTtmdW5jdGlvbiBJKFIsRSl7aWYoISh0aGlzIGluc3RhbmNlb2YgSSkpcmV0dXJuIG5ldyBJKFIsRSk7dGhpcy5maWxlcz17fSx0aGlzLmNvbW1lbnQ9bnVsbCx0'@;
put 'aGlzLnJvb3Q9IiIsUiYmdGhpcy5sb2FkKFIsRSksdGhpcy5jbG9uZT1mdW5jdGlvbigpe3ZhciB6PW5ldyBJO2Zvcih2YXIgaiBpbiB0aGlzKSJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzW2pdJiYoeltqXT10aGlzW2pdKTtyZXR1cm4gen19KEkucHJvdG90eXBlPUIoIi4vb2JqZWN0IikpLmxv'@;
put 'YWQ9QigiLi9sb2FkIiksSS5zdXBwb3J0PUIoIi4vc3VwcG9ydCIpLEkuZGVmYXVsdHM9QigiLi9kZWZhdWx0cyIpLEkudXRpbHM9QigiLi9kZXByZWNhdGVkUHVibGljVXRpbHMiKSxJLmJhc2U2ND17ZW5jb2RlOmZ1bmN0aW9uKFIpe3JldHVybiBKLmVuY29kZShSKX0sZGVjb2RlOmZ1bmN0'@;
put 'aW9uKFIpe3JldHVybiBKLmRlY29kZShSKX19LEkuY29tcHJlc3Npb25zPUIoIi4vY29tcHJlc3Npb25zIiksTC5leHBvcnRzPUl9LHsiLi9iYXNlNjQiOjEsIi4vY29tcHJlc3Npb25zIjozLCIuL2RlZmF1bHRzIjo2LCIuL2RlcHJlY2F0ZWRQdWJsaWNVdGlscyI6NywiLi9sb2FkIjoxMCwi'@;
put 'Li9vYmplY3QiOjEzLCIuL3N1cHBvcnQiOjE3fV0sMTA6W2Z1bmN0aW9uKEIsTCxLKXsidXNlIHN0cmljdCI7dmFyIEo9QigiLi9iYXNlNjQiKSxJPUIoIi4vemlwRW50cmllcyIpO0wuZXhwb3J0cz1mdW5jdGlvbihSLEUpe3ZhciB6LGosVixHO2ZvcigoRT1FfHx7fSkuYmFzZTY0JiYoUj1K'@;
put 'LmRlY29kZShSKSksej0oaj1uZXcgSShSLEUpKS5maWxlcyxWPTA7Vjx6Lmxlbmd0aDtWKyspdGhpcy5maWxlKChHPXpbVl0pLmZpbGVOYW1lLEcuZGVjb21wcmVzc2VkLHtiaW5hcnk6ITAsb3B0aW1pemVkQmluYXJ5U3RyaW5nOiEwLGRhdGU6Ry5kYXRlLGRpcjpHLmRpcixjb21tZW50Okcu'@;
put 'ZmlsZUNvbW1lbnQubGVuZ3RoP0cuZmlsZUNvbW1lbnQ6bnVsbCxjcmVhdGVGb2xkZXJzOkUuY3JlYXRlRm9sZGVyc30pO3JldHVybiBqLnppcENvbW1lbnQubGVuZ3RoJiYodGhpcy5jb21tZW50PWouemlwQ29tbWVudCksdGhpc319LHsiLi9iYXNlNjQiOjEsIi4vemlwRW50cmllcyI6MjJ9'@;
put 'XSwxMTpbZnVuY3Rpb24oQixMLEspeyhmdW5jdGlvbihKKXsidXNlIHN0cmljdCI7dmFyIEk9ZnVuY3Rpb24oKXt9O2lmKHR5cGVvZiBKPCJ1Iil7dmFyIFI9IUouZnJvbTtpZighUil0cnl7Si5mcm9tKCJmb28iLCJ1dGY4Iil9Y2F0Y2h7Uj0hMH1JPVI/ZnVuY3Rpb24oRSx6KXtyZXR1cm4g'@;
put 'ej9uZXcgSihFLHopOm5ldyBKKEUpfTpKLmZyb20uYmluZChKKSxKLmFsbG9jfHwoSi5hbGxvYz1mdW5jdGlvbihFKXtyZXR1cm4gbmV3IEooRSl9KX1MLmV4cG9ydHM9ZnVuY3Rpb24oRSx6KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIEU/Si5hbGxvYyhFKTpJKEUseil9LEwuZXhwb3J0cy50'@;
put 'ZXN0PWZ1bmN0aW9uKEUpe3JldHVybiBKLmlzQnVmZmVyKEUpfX0pLmNhbGwodGhpcyx0eXBlb2YgQnVmZmVyPCJ1Ij9CdWZmZXI6dm9pZCAwKX0se31dLDEyOltmdW5jdGlvbihCLEwsSyl7InVzZSBzdHJpY3QiO3ZhciBKPUIoIi4vdWludDhBcnJheVJlYWRlciIpO2Z1bmN0aW9uIEkoUil7'@;
put 'dGhpcy5kYXRhPVIsdGhpcy5sZW5ndGg9dGhpcy5kYXRhLmxlbmd0aCx0aGlzLmluZGV4PTB9KEkucHJvdG90eXBlPW5ldyBKKS5yZWFkRGF0YT1mdW5jdGlvbihSKXt0aGlzLmNoZWNrT2Zmc2V0KFIpO3ZhciBFPXRoaXMuZGF0YS5zbGljZSh0aGlzLmluZGV4LHRoaXMuaW5kZXgrUik7cmV0'@;
put 'dXJuIHRoaXMuaW5kZXgrPVIsRX0sTC5leHBvcnRzPUl9LHsiLi91aW50OEFycmF5UmVhZGVyIjoxOH1dLDEzOltmdW5jdGlvbihCLEwsSyl7InVzZSBzdHJpY3QiO3ZhciBKPUIoIi4vc3VwcG9ydCIpLEk9QigiLi91dGlscyIpLFI9QigiLi9jcmMzMiIpLEU9QigiLi9zaWduYXR1cmUiKSx6'@;
put 'PUIoIi4vZGVmYXVsdHMiKSxqPUIoIi4vYmFzZTY0IiksVj1CKCIuL2NvbXByZXNzaW9ucyIpLEc9QigiLi9jb21wcmVzc2VkT2JqZWN0IiksVz1CKCIuL25vZGVCdWZmZXIiKSxVPUIoIi4vdXRmOCIpLHE9QigiLi9zdHJpbmdXcml0ZXIiKSx0ZT1CKCIuL3VpbnQ4QXJyYXlXcml0ZXIiKSxu'@;
put 'ZT1mdW5jdGlvbihNKXtpZihNLl9kYXRhIGluc3RhbmNlb2YgRyYmKE0uX2RhdGE9TS5fZGF0YS5nZXRDb250ZW50KCksTS5vcHRpb25zLmJpbmFyeT0hMCxNLm9wdGlvbnMuYmFzZTY0PSExLCJ1aW50OGFycmF5Ij09PUkuZ2V0VHlwZU9mKE0uX2RhdGEpKSl7dmFyIHk9TS5fZGF0YTtNLl9k'@;
put 'YXRhPW5ldyBVaW50OEFycmF5KHkubGVuZ3RoKSwwIT09eS5sZW5ndGgmJk0uX2RhdGEuc2V0KHksMCl9cmV0dXJuIE0uX2RhdGF9LGllPWZ1bmN0aW9uKE0pe3ZhciB5PW5lKE0pO3JldHVybiJzdHJpbmciPT09SS5nZXRUeXBlT2YoeSk/IU0ub3B0aW9ucy5iaW5hcnkmJkoubm9kZWJ1ZmZl'@;
put 'cj9XKHksInV0Zi04Iik6TS5hc0JpbmFyeSgpOnl9LGxlPWZ1bmN0aW9uKE0pe3ZhciB5PW5lKHRoaXMpO3JldHVybiBudWxsPT09eXx8dHlwZW9mIHk+InUiPyIiOih0aGlzLm9wdGlvbnMuYmFzZTY0JiYoeT1qLmRlY29kZSh5KSkseT1NJiZ0aGlzLm9wdGlvbnMuYmluYXJ5P0MudXRmOGRl'@;
put 'Y29kZSh5KTpJLnRyYW5zZm9ybVRvKCJzdHJpbmciLHkpLCFNJiYhdGhpcy5vcHRpb25zLmJpbmFyeSYmKHk9SS50cmFuc2Zvcm1Ubygic3RyaW5nIixDLnV0ZjhlbmNvZGUoeSkpKSx5KX0sZGU9ZnVuY3Rpb24oTSx5LHApe3RoaXMubmFtZT1NLHRoaXMuZGlyPXAuZGlyLHRoaXMuZGF0ZT1w'@;
put 'LmRhdGUsdGhpcy5jb21tZW50PXAuY29tbWVudCx0aGlzLl9kYXRhPXksdGhpcy5vcHRpb25zPXAsdGhpcy5faW5pdGlhbE1ldGFkYXRhPXtkaXI6cC5kaXIsZGF0ZTpwLmRhdGV9fTtkZS5wcm90b3R5cGU9e2FzVGV4dDpmdW5jdGlvbigpe3JldHVybiBsZS5jYWxsKHRoaXMsITApfSxhc0Jp'@;
put 'bmFyeTpmdW5jdGlvbigpe3JldHVybiBsZS5jYWxsKHRoaXMsITEpfSxhc05vZGVCdWZmZXI6ZnVuY3Rpb24oKXt2YXIgTT1pZSh0aGlzKTtyZXR1cm4gSS50cmFuc2Zvcm1Ubygibm9kZWJ1ZmZlciIsTSl9LGFzVWludDhBcnJheTpmdW5jdGlvbigpe3ZhciBNPWllKHRoaXMpO3JldHVybiBJ'@;
put 'LnRyYW5zZm9ybVRvKCJ1aW50OGFycmF5IixNKX0sYXNBcnJheUJ1ZmZlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFzVWludDhBcnJheSgpLmJ1ZmZlcn19O3ZhciB1ZT1mdW5jdGlvbihNLHkpe3ZhciBTLHA9IiI7Zm9yKFM9MDtTPHk7UysrKXArPVN0cmluZy5mcm9tQ2hhckNvZGUoMjU1'@;
put 'Jk0pLE0+Pj49ODtyZXR1cm4gcH0sY2U9ZnVuY3Rpb24oKXt2YXIgeSxwLE09e307Zm9yKHk9MDt5PGFyZ3VtZW50cy5sZW5ndGg7eSsrKWZvcihwIGluIGFyZ3VtZW50c1t5XSlhcmd1bWVudHNbeV0uaGFzT3duUHJvcGVydHkocCkmJnR5cGVvZiBNW3BdPiJ1IiYmKE1bcF09YXJndW1lbnRz'@;
put 'W3ldW3BdKTtyZXR1cm4gTX0sYj1mdW5jdGlvbihNLHkscCl7dmFyIFEsUz1JLmdldFR5cGVPZih5KTtpZihwPWZ1bmN0aW9uKE0pe3JldHVybiEwPT09KE09TXx8e30pLmJhc2U2NCYmbnVsbD09TS5iaW5hcnkmJihNLmJpbmFyeT0hMCksKE09Y2UoTSx6KSkuZGF0ZT1NLmRhdGV8fG5ldyBE'@;
put 'YXRlLG51bGwhPT1NLmNvbXByZXNzaW9uJiYoTS5jb21wcmVzc2lvbj1NLmNvbXByZXNzaW9uLnRvVXBwZXJDYXNlKCkpLE19KHApLHAuY3JlYXRlRm9sZGVycyYmKFE9eChNKSkmJk4uY2FsbCh0aGlzLFEsITApLHAuZGlyfHxudWxsPT09eXx8dHlwZW9mIHk+InUiKXAuYmFzZTY0PSExLHAu'@;
put 'YmluYXJ5PSExLHk9bnVsbDtlbHNlIGlmKCJzdHJpbmciPT09UylwLmJpbmFyeSYmIXAuYmFzZTY0JiYhMCE9PXAub3B0aW1pemVkQmluYXJ5U3RyaW5nJiYoeT1JLnN0cmluZzJiaW5hcnkoeSkpO2Vsc2V7aWYocC5iYXNlNjQ9ITEscC5iaW5hcnk9ITAsIShTfHx5IGluc3RhbmNlb2YgRykp'@;
put 'dGhyb3cgbmV3IEVycm9yKCJUaGUgZGF0YSBvZiAnIitNKyInIGlzIGluIGFuIHVuc3VwcG9ydGVkIGZvcm1hdCAhIik7ImFycmF5YnVmZmVyIj09PVMmJih5PUkudHJhbnNmb3JtVG8oInVpbnQ4YXJyYXkiLHkpKX12YXIgcmU9bmV3IGRlKE0seSxwKTtyZXR1cm4gdGhpcy5maWxlc1tNXT1y'@;
put 'ZSxyZX0seD1mdW5jdGlvbihNKXsiLyI9PU0uc2xpY2UoLTEpJiYoTT1NLnN1YnN0cmluZygwLE0ubGVuZ3RoLTEpKTt2YXIgeT1NLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuIHk+MD9NLnN1YnN0cmluZygwLHkpOiIifSxOPWZ1bmN0aW9uKE0seSl7cmV0dXJuIi8iIT1NLnNsaWNlKC0xKSYm'@;
put 'KE0rPSIvIikseT10eXBlb2YgeTwidSImJnksdGhpcy5maWxlc1tNXXx8Yi5jYWxsKHRoaXMsTSxudWxsLHtkaXI6ITAsY3JlYXRlRm9sZGVyczp5fSksdGhpcy5maWxlc1tNXX0sRj1mdW5jdGlvbihNLHkpe3ZhciBTLHA9bmV3IEc7cmV0dXJuIE0uX2RhdGEgaW5zdGFuY2VvZiBHPyhwLnVu'@;
put 'Y29tcHJlc3NlZFNpemU9TS5fZGF0YS51bmNvbXByZXNzZWRTaXplLHAuY3JjMzI9TS5fZGF0YS5jcmMzMiwwPT09cC51bmNvbXByZXNzZWRTaXplfHxNLmRpcj8oeT1WLlNUT1JFLHAuY29tcHJlc3NlZENvbnRlbnQ9IiIscC5jcmMzMj0wKTpNLl9kYXRhLmNvbXByZXNzaW9uTWV0aG9kPT09'@;
put 'eS5tYWdpYz9wLmNvbXByZXNzZWRDb250ZW50PU0uX2RhdGEuZ2V0Q29tcHJlc3NlZENvbnRlbnQoKTooUz1NLl9kYXRhLmdldENvbnRlbnQoKSxwLmNvbXByZXNzZWRDb250ZW50PXkuY29tcHJlc3MoSS50cmFuc2Zvcm1Ubyh5LmNvbXByZXNzSW5wdXRUeXBlLFMpKSkpOigoIShTPWllKE0p'@;
put 'KXx8MD09PVMubGVuZ3RofHxNLmRpcikmJih5PVYuU1RPUkUsUz0iIikscC51bmNvbXByZXNzZWRTaXplPVMubGVuZ3RoLHAuY3JjMzI9UihTKSxwLmNvbXByZXNzZWRDb250ZW50PXkuY29tcHJlc3MoSS50cmFuc2Zvcm1Ubyh5LmNvbXByZXNzSW5wdXRUeXBlLFMpKSkscC5jb21wcmVzc2Vk'@;
put 'U2l6ZT1wLmNvbXByZXNzZWRDb250ZW50Lmxlbmd0aCxwLmNvbXByZXNzaW9uTWV0aG9kPXkubWFnaWMscH0sZz1mdW5jdGlvbihNLHkscCxTKXt2YXIgRmUsTmUsUWUsbXQscmU9SS50cmFuc2Zvcm1Ubygic3RyaW5nIixVLnV0ZjhlbmNvZGUoeS5uYW1lKSksZmU9eS5jb21tZW50fHwiIixt'@;
put 'ZT1JLnRyYW5zZm9ybVRvKCJzdHJpbmciLFUudXRmOGVuY29kZShmZSkpLGtlPXJlLmxlbmd0aCE9PXkubmFtZS5sZW5ndGgsVGU9bWUubGVuZ3RoIT09ZmUubGVuZ3RoLFBlPXkub3B0aW9ucyxMZT0iIixCZT0iIixIZT0iIjtRZT15Ll9pbml0aWFsTWV0YWRhdGEuZGlyIT09eS5kaXI/eS5k'@;
put 'aXI6UGUuZGlyLEZlPShtdD15Ll9pbml0aWFsTWV0YWRhdGEuZGF0ZSE9PXkuZGF0ZT95LmRhdGU6UGUuZGF0ZSkuZ2V0SG91cnMoKSxGZTw8PTYsRmV8PW10LmdldE1pbnV0ZXMoKSxGZTw8PTUsRmV8PW10LmdldFNlY29uZHMoKS8yLE5lPW10LmdldEZ1bGxZZWFyKCktMTk4MCxOZTw8PTQs'@;
put 'TmV8PW10LmdldE1vbnRoKCkrMSxOZTw8PTUsTmV8PW10LmdldERhdGUoKSxrZSYmKEJlPXVlKDEsMSkrdWUoUihyZSksNCkrcmUsTGUrPSJ1cCIrdWUoQmUubGVuZ3RoLDIpK0JlKSxUZSYmKEhlPXVlKDEsMSkrdWUodGhpcy5jcmMzMihtZSksNCkrbWUsTGUrPSJ1YyIrdWUoSGUubGVuZ3Ro'@;
put 'LDIpK0hlKTt2YXIgS2U9IiI7cmV0dXJuIEtlKz0iXG5cMCIsS2UrPWtlfHxUZT8iXDBcYiI6IlwwXDAiLEtlKz1wLmNvbXByZXNzaW9uTWV0aG9kLEtlKz11ZShGZSwyKSxLZSs9dWUoTmUsMiksS2UrPXVlKHAuY3JjMzIsNCksS2UrPXVlKHAuY29tcHJlc3NlZFNpemUsNCksS2UrPXVlKHAu'@;
put 'dW5jb21wcmVzc2VkU2l6ZSw0KSxLZSs9dWUocmUubGVuZ3RoLDIpLEtlKz11ZShMZS5sZW5ndGgsMikse2ZpbGVSZWNvcmQ6RS5MT0NBTF9GSUxFX0hFQURFUitLZStyZStMZSxkaXJSZWNvcmQ6RS5DRU5UUkFMX0ZJTEVfSEVBREVSKyJceDE0XDAiK0tlK3VlKG1lLmxlbmd0aCwyKSsiXDBc'@;
put 'MFwwXDAiKyghMD09PVFlPyJceDEwXDBcMFwwIjoiXDBcMFwwXDAiKSt1ZShTLDQpK3JlK0xlK21lLGNvbXByZXNzZWRPYmplY3Q6cH19LEM9e2xvYWQ6ZnVuY3Rpb24oTSx5KXt0aHJvdyBuZXcgRXJyb3IoIkxvYWQgbWV0aG9kIGlzIG5vdCBkZWZpbmVkLiBJcyB0aGUgZmlsZSBqc3ppcC1s'@;
put 'b2FkLmpzIGluY2x1ZGVkID8iKX0sZmlsdGVyOmZ1bmN0aW9uKE0pe3ZhciBwLFMsUSxyZSx5PVtdO2ZvcihwIGluIHRoaXMuZmlsZXMpdGhpcy5maWxlcy5oYXNPd25Qcm9wZXJ0eShwKSYmKHJlPW5ldyBkZSgoUT10aGlzLmZpbGVzW3BdKS5uYW1lLFEuX2RhdGEsY2UoUS5vcHRpb25zKSks'@;
put 'Uz1wLnNsaWNlKHRoaXMucm9vdC5sZW5ndGgscC5sZW5ndGgpLHAuc2xpY2UoMCx0aGlzLnJvb3QubGVuZ3RoKT09PXRoaXMucm9vdCYmTShTLHJlKSYmeS5wdXNoKHJlKSk7cmV0dXJuIHl9LGZpbGU6ZnVuY3Rpb24oTSx5LHApe2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKXtpZihJLmlzUmVn'@;
put 'RXhwKE0pKXt2YXIgUz1NO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbihRLHJlKXtyZXR1cm4hcmUuZGlyJiZTLnRlc3QoUSl9KX1yZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oUSxyZSl7cmV0dXJuIXJlLmRpciYmUT09PU19KVswXXx8bnVsbH1yZXR1cm4gYi5jYWxsKHRoaXMsTT10'@;
put 'aGlzLnJvb3QrTSx5LHApLHRoaXN9LGZvbGRlcjpmdW5jdGlvbihNKXtpZighTSlyZXR1cm4gdGhpcztpZihJLmlzUmVnRXhwKE0pKXJldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbihRLHJlKXtyZXR1cm4gcmUuZGlyJiZNLnRlc3QoUSl9KTt2YXIgcD1OLmNhbGwodGhpcyx0aGlzLnJvb3Qr'@;
put 'TSksUz10aGlzLmNsb25lKCk7cmV0dXJuIFMucm9vdD1wLm5hbWUsU30scmVtb3ZlOmZ1bmN0aW9uKE0pe3ZhciB5PXRoaXMuZmlsZXNbTT10aGlzLnJvb3QrTV07aWYoeXx8KCIvIiE9TS5zbGljZSgtMSkmJihNKz0iLyIpLHk9dGhpcy5maWxlc1tNXSkseSYmIXkuZGlyKWRlbGV0ZSB0aGlz'@;
put 'LmZpbGVzW01dO2Vsc2UgZm9yKHZhciBwPXRoaXMuZmlsdGVyKGZ1bmN0aW9uKFEscmUpe3JldHVybiByZS5uYW1lLnNsaWNlKDAsTS5sZW5ndGgpPT09TX0pLFM9MDtTPHAubGVuZ3RoO1MrKylkZWxldGUgdGhpcy5maWxlc1twW1NdLm5hbWVdO3JldHVybiB0aGlzfSxnZW5lcmF0ZTpmdW5j'@;
put 'dGlvbihNKXtNPWNlKE18fHt9LHtiYXNlNjQ6ITAsY29tcHJlc3Npb246IlNUT1JFIix0eXBlOiJiYXNlNjQiLGNvbW1lbnQ6bnVsbH0pLEkuY2hlY2tTdXBwb3J0KE0udHlwZSk7dmFyIFEscmUsTGUseT1bXSxwPTAsUz0wLGZlPUkudHJhbnNmb3JtVG8oInN0cmluZyIsdGhpcy51dGY4ZW5j'@;
put 'b2RlKE0uY29tbWVudHx8dGhpcy5jb21tZW50fHwiIikpO2Zvcih2YXIgbWUgaW4gdGhpcy5maWxlcylpZih0aGlzLmZpbGVzLmhhc093blByb3BlcnR5KG1lKSl7dmFyIGtlPXRoaXMuZmlsZXNbbWVdLFRlPWtlLm9wdGlvbnMuY29tcHJlc3Npb258fE0uY29tcHJlc3Npb24udG9VcHBlckNh'@;
put 'c2UoKSxQZT1WW1RlXTtpZighUGUpdGhyb3cgbmV3IEVycm9yKFRlKyIgaXMgbm90IGEgdmFsaWQgY29tcHJlc3Npb24gbWV0aG9kICEiKTt2YXIgRmU9Ri5jYWxsKHRoaXMsa2UsUGUpLE5lPWcuY2FsbCh0aGlzLG1lLGtlLEZlLHApO3ArPU5lLmZpbGVSZWNvcmQubGVuZ3RoK0ZlLmNvbXBy'@;
put 'ZXNzZWRTaXplLFMrPU5lLmRpclJlY29yZC5sZW5ndGgseS5wdXNoKE5lKX1MZT1FLkNFTlRSQUxfRElSRUNUT1JZX0VORCsiXDBcMFwwXDAiK3VlKHkubGVuZ3RoLDIpK3VlKHkubGVuZ3RoLDIpK3VlKFMsNCkrdWUocCw0KSt1ZShmZS5sZW5ndGgsMikrZmU7dmFyIEJlPU0udHlwZS50b0xv'@;
put 'd2VyQ2FzZSgpO2ZvcihRPSJ1aW50OGFycmF5Ij09PUJlfHwiYXJyYXlidWZmZXIiPT09QmV8fCJibG9iIj09PUJlfHwibm9kZWJ1ZmZlciI9PT1CZT9uZXcgdGUocCtTK0xlLmxlbmd0aCk6bmV3IHEocCtTK0xlLmxlbmd0aCkscmU9MDtyZTx5Lmxlbmd0aDtyZSsrKVEuYXBwZW5kKHlbcmVd'@;
put 'LmZpbGVSZWNvcmQpLFEuYXBwZW5kKHlbcmVdLmNvbXByZXNzZWRPYmplY3QuY29tcHJlc3NlZENvbnRlbnQpO2ZvcihyZT0wO3JlPHkubGVuZ3RoO3JlKyspUS5hcHBlbmQoeVtyZV0uZGlyUmVjb3JkKTtRLmFwcGVuZChMZSk7dmFyIEhlPVEuZmluYWxpemUoKTtzd2l0Y2goTS50eXBlLnRv'@;
put 'TG93ZXJDYXNlKCkpe2Nhc2UidWludDhhcnJheSI6Y2FzZSJhcnJheWJ1ZmZlciI6Y2FzZSJub2RlYnVmZmVyIjpyZXR1cm4gSS50cmFuc2Zvcm1UbyhNLnR5cGUudG9Mb3dlckNhc2UoKSxIZSk7Y2FzZSJibG9iIjpyZXR1cm4gSS5hcnJheUJ1ZmZlcjJCbG9iKEkudHJhbnNmb3JtVG8oImFy'@;
put 'cmF5YnVmZmVyIixIZSkpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gTS5iYXNlNjQ/ai5lbmNvZGUoSGUpOkhlO2RlZmF1bHQ6cmV0dXJuIEhlfX0sY3JjMzI6ZnVuY3Rpb24oTSx5KXtyZXR1cm4gUihNLHkpfSx1dGY4ZW5jb2RlOmZ1bmN0aW9uKE0pe3JldHVybiBJLnRyYW5zZm9ybVRvKCJzdHJp'@;
put 'bmciLFUudXRmOGVuY29kZShNKSl9LHV0ZjhkZWNvZGU6ZnVuY3Rpb24oTSl7cmV0dXJuIFUudXRmOGRlY29kZShNKX19O0wuZXhwb3J0cz1DfSx7Ii4vYmFzZTY0IjoxLCIuL2NvbXByZXNzZWRPYmplY3QiOjIsIi4vY29tcHJlc3Npb25zIjozLCIuL2NyYzMyIjo0LCIuL2RlZmF1bHRzIjo2'@;
put 'LCIuL25vZGVCdWZmZXIiOjExLCIuL3NpZ25hdHVyZSI6MTQsIi4vc3RyaW5nV3JpdGVyIjoxNiwiLi9zdXBwb3J0IjoxNywiLi91aW50OEFycmF5V3JpdGVyIjoxOSwiLi91dGY4IjoyMCwiLi91dGlscyI6MjF9XSwxNDpbZnVuY3Rpb24oQixMLEspeyJ1c2Ugc3RyaWN0IjtLLkxPQ0FMX0ZJ'@;
put 'TEVfSEVBREVSPSJQS1x4MDNceDA0IixLLkNFTlRSQUxfRklMRV9IRUFERVI9IlBLXHgwMVx4MDIiLEsuQ0VOVFJBTF9ESVJFQ1RPUllfRU5EPSJQS1x4MDVceDA2IixLLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0xPQ0FUT1I9IlBLXHgwNlx4MDciLEsuWklQNjRfQ0VOVFJBTF9ESVJFQ1RP'@;
put 'UllfRU5EPSJQS1x4MDZceDA2IixLLkRBVEFfREVTQ1JJUFRPUj0iUEtceDA3XGIifSx7fV0sMTU6W2Z1bmN0aW9uKEIsTCxLKXsidXNlIHN0cmljdCI7dmFyIEo9QigiLi9kYXRhUmVhZGVyIiksST1CKCIuL3V0aWxzIik7ZnVuY3Rpb24gUihFLHope3RoaXMuZGF0YT1FLHp8fCh0aGlzLmRh'@;
put 'dGE9SS5zdHJpbmcyYmluYXJ5KHRoaXMuZGF0YSkpLHRoaXMubGVuZ3RoPXRoaXMuZGF0YS5sZW5ndGgsdGhpcy5pbmRleD0wfShSLnByb3RvdHlwZT1uZXcgSikuYnl0ZUF0PWZ1bmN0aW9uKEUpe3JldHVybiB0aGlzLmRhdGEuY2hhckNvZGVBdChFKX0sUi5wcm90b3R5cGUubGFzdEluZGV4'@;
put 'T2ZTaWduYXR1cmU9ZnVuY3Rpb24oRSl7cmV0dXJuIHRoaXMuZGF0YS5sYXN0SW5kZXhPZihFKX0sUi5wcm90b3R5cGUucmVhZERhdGE9ZnVuY3Rpb24oRSl7dGhpcy5jaGVja09mZnNldChFKTt2YXIgej10aGlzLmRhdGEuc2xpY2UodGhpcy5pbmRleCx0aGlzLmluZGV4K0UpO3JldHVybiB0'@;
put 'aGlzLmluZGV4Kz1FLHp9LEwuZXhwb3J0cz1SfSx7Ii4vZGF0YVJlYWRlciI6NSwiLi91dGlscyI6MjF9XSwxNjpbZnVuY3Rpb24oQixMLEspeyJ1c2Ugc3RyaWN0Ijt2YXIgSj1CKCIuL3V0aWxzIiksST1mdW5jdGlvbigpe3RoaXMuZGF0YT1bXX07SS5wcm90b3R5cGU9e2FwcGVuZDpmdW5j'@;
put 'dGlvbihSKXtSPUoudHJhbnNmb3JtVG8oInN0cmluZyIsUiksdGhpcy5kYXRhLnB1c2goUil9LGZpbmFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YS5qb2luKCIiKX19LEwuZXhwb3J0cz1JfSx7Ii4vdXRpbHMiOjIxfV0sMTc6W2Z1bmN0aW9uKEIsTCxLKXsoZnVuY3Rpb24oSil7'@;
put 'InVzZSBzdHJpY3QiO2lmKEsuYmFzZTY0PSEwLEsuYXJyYXk9ITAsSy5zdHJpbmc9ITAsSy5hcnJheWJ1ZmZlcj10eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZ0eXBlb2YgVWludDhBcnJheTwidSIsSy5ub2RlYnVmZmVyPXR5cGVvZiBKPCJ1IixLLnVpbnQ4YXJyYXk9dHlwZW9mIFVpbnQ4QXJy'@;
put 'YXk8InUiLHR5cGVvZiBBcnJheUJ1ZmZlcj4idSIpSy5ibG9iPSExO2Vsc2V7dmFyIEk9bmV3IEFycmF5QnVmZmVyKDApO3RyeXtLLmJsb2I9MD09PW5ldyBCbG9iKFtJXSx7dHlwZToiYXBwbGljYXRpb24vemlwIn0pLnNpemV9Y2F0Y2h7dHJ5e3ZhciBFPW5ldyh3aW5kb3cuQmxvYkJ1aWxk'@;
put 'ZXJ8fHdpbmRvdy5XZWJLaXRCbG9iQnVpbGRlcnx8d2luZG93Lk1vekJsb2JCdWlsZGVyfHx3aW5kb3cuTVNCbG9iQnVpbGRlcik7RS5hcHBlbmQoSSksSy5ibG9iPTA9PT1FLmdldEJsb2IoImFwcGxpY2F0aW9uL3ppcCIpLnNpemV9Y2F0Y2h7Sy5ibG9iPSExfX19fSkuY2FsbCh0aGlzLHR5'@;
put 'cGVvZiBCdWZmZXI8InUiP0J1ZmZlcjp2b2lkIDApfSx7fV0sMTg6W2Z1bmN0aW9uKEIsTCxLKXsidXNlIHN0cmljdCI7dmFyIEo9QigiLi9kYXRhUmVhZGVyIik7ZnVuY3Rpb24gSShSKXtSJiYodGhpcy5kYXRhPVIsdGhpcy5sZW5ndGg9dGhpcy5kYXRhLmxlbmd0aCx0aGlzLmluZGV4PTAp'@;
put 'fShJLnByb3RvdHlwZT1uZXcgSikuYnl0ZUF0PWZ1bmN0aW9uKFIpe3JldHVybiB0aGlzLmRhdGFbUl19LEkucHJvdG90eXBlLmxhc3RJbmRleE9mU2lnbmF0dXJlPWZ1bmN0aW9uKFIpe2Zvcih2YXIgRT1SLmNoYXJDb2RlQXQoMCksej1SLmNoYXJDb2RlQXQoMSksaj1SLmNoYXJDb2RlQXQo'@;
put 'MiksVj1SLmNoYXJDb2RlQXQoMyksRz10aGlzLmxlbmd0aC00O0c+PTA7LS1HKWlmKHRoaXMuZGF0YVtHXT09PUUmJnRoaXMuZGF0YVtHKzFdPT09eiYmdGhpcy5kYXRhW0crMl09PT1qJiZ0aGlzLmRhdGFbRyszXT09PVYpcmV0dXJuIEc7cmV0dXJuLTF9LEkucHJvdG90eXBlLnJlYWREYXRh'@;
put 'PWZ1bmN0aW9uKFIpe2lmKHRoaXMuY2hlY2tPZmZzZXQoUiksMD09PVIpcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO3ZhciBFPXRoaXMuZGF0YS5zdWJhcnJheSh0aGlzLmluZGV4LHRoaXMuaW5kZXgrUik7cmV0dXJuIHRoaXMuaW5kZXgrPVIsRX0sTC5leHBvcnRzPUl9LHsiLi9kYXRhUmVh'@;
put 'ZGVyIjo1fV0sMTk6W2Z1bmN0aW9uKEIsTCxLKXsidXNlIHN0cmljdCI7dmFyIEo9QigiLi91dGlscyIpLEk9ZnVuY3Rpb24oUil7dGhpcy5kYXRhPW5ldyBVaW50OEFycmF5KFIpLHRoaXMuaW5kZXg9MH07SS5wcm90b3R5cGU9e2FwcGVuZDpmdW5jdGlvbihSKXswIT09Ui5sZW5ndGgmJihS'@;
put 'PUoudHJhbnNmb3JtVG8oInVpbnQ4YXJyYXkiLFIpLHRoaXMuZGF0YS5zZXQoUix0aGlzLmluZGV4KSx0aGlzLmluZGV4Kz1SLmxlbmd0aCl9LGZpbmFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YX19LEwuZXhwb3J0cz1JfSx7Ii4vdXRpbHMiOjIxfV0sMjA6W2Z1bmN0aW9uKEIs'@;
put 'TCxLKXsidXNlIHN0cmljdCI7Zm9yKHZhciBKPUIoIi4vdXRpbHMiKSxJPUIoIi4vc3VwcG9ydCIpLFI9QigiLi9ub2RlQnVmZmVyIiksRT1uZXcgQXJyYXkoMjU2KSx6PTA7ejwyNTY7eisrKUVbel09ej49MjUyPzY6ej49MjQ4PzU6ej49MjQwPzQ6ej49MjI0PzM6ej49MTkyPzI6MTtFWzI1'@;
put 'NF09RVsyNTRdPTE7dmFyIFY9ZnVuY3Rpb24oVyxVKXt2YXIgcTtmb3IoKFU9VXx8Vy5sZW5ndGgpPlcubGVuZ3RoJiYoVT1XLmxlbmd0aCkscT1VLTE7cT49MCYmMTI4PT0oMTkyJldbcV0pOylxLS07cmV0dXJuIHE8MHx8MD09PXE/VTpxK0VbV1txXV0+VT9xOlV9LEc9ZnVuY3Rpb24oVyl7'@;
put 'dmFyIHEsdGUsbmUsaWUsbGU9Vy5sZW5ndGgsZGU9bmV3IEFycmF5KDIqbGUpO2Zvcih0ZT0wLHE9MDtxPGxlOylpZigobmU9V1txKytdKTwxMjgpZGVbdGUrK109bmU7ZWxzZSBpZigoaWU9RVtuZV0pPjQpZGVbdGUrK109NjU1MzMscSs9aWUtMTtlbHNle2ZvcihuZSY9Mj09PWllPzMxOjM9'@;
put 'PT1pZT8xNTo3O2llPjEmJnE8bGU7KW5lPW5lPDw2fDYzJldbcSsrXSxpZS0tO2llPjE/ZGVbdGUrK109NjU1MzM6bmU8NjU1MzY/ZGVbdGUrK109bmU6KGRlW3RlKytdPTU1Mjk2fChuZS09NjU1MzYpPj4xMCYxMDIzLGRlW3RlKytdPTU2MzIwfDEwMjMmbmUpfXJldHVybiBkZS5sZW5ndGgh'@;
put 'PT10ZSYmKGRlLnN1YmFycmF5P2RlPWRlLnN1YmFycmF5KDAsdGUpOmRlLmxlbmd0aD10ZSksSi5hcHBseUZyb21DaGFyQ29kZShkZSl9O0sudXRmOGVuY29kZT1mdW5jdGlvbihVKXtyZXR1cm4gSS5ub2RlYnVmZmVyP1IoVSwidXRmLTgiKTpmdW5jdGlvbihXKXt2YXIgVSxxLHRlLG5lLGll'@;
put 'LGxlPVcubGVuZ3RoLGRlPTA7Zm9yKG5lPTA7bmU8bGU7bmUrKyk1NTI5Nj09KDY0NTEyJihxPVcuY2hhckNvZGVBdChuZSkpKSYmbmUrMTxsZSYmNTYzMjA9PSg2NDUxMiYodGU9Vy5jaGFyQ29kZUF0KG5lKzEpKSkmJihxPTY1NTM2KyhxLTU1Mjk2PDwxMCkrKHRlLTU2MzIwKSxuZSsrKSxk'@;
put 'ZSs9cTwxMjg/MTpxPDIwNDg/MjpxPDY1NTM2PzM6NDtmb3IoVT1JLnVpbnQ4YXJyYXk/bmV3IFVpbnQ4QXJyYXkoZGUpOm5ldyBBcnJheShkZSksaWU9MCxuZT0wO2llPGRlO25lKyspNTUyOTY9PSg2NDUxMiYocT1XLmNoYXJDb2RlQXQobmUpKSkmJm5lKzE8bGUmJjU2MzIwPT0oNjQ1MTIm'@;
put 'KHRlPVcuY2hhckNvZGVBdChuZSsxKSkpJiYocT02NTUzNisocS01NTI5Njw8MTApKyh0ZS01NjMyMCksbmUrKykscTwxMjg/VVtpZSsrXT1xOnE8MjA0OD8oVVtpZSsrXT0xOTJ8cT4+PjYsVVtpZSsrXT0xMjh8NjMmcSk6cTw2NTUzNj8oVVtpZSsrXT0yMjR8cT4+PjEyLFVbaWUrK109MTI4'@;
put 'fHE+Pj42JjYzLFVbaWUrK109MTI4fDYzJnEpOihVW2llKytdPTI0MHxxPj4+MTgsVVtpZSsrXT0xMjh8cT4+PjEyJjYzLFVbaWUrK109MTI4fHE+Pj42JjYzLFVbaWUrK109MTI4fDYzJnEpO3JldHVybiBVfShVKX0sSy51dGY4ZGVjb2RlPWZ1bmN0aW9uKFUpe2lmKEkubm9kZWJ1ZmZlcily'@;
put 'ZXR1cm4gSi50cmFuc2Zvcm1Ubygibm9kZWJ1ZmZlciIsVSkudG9TdHJpbmcoInV0Zi04Iik7Zm9yKHZhciBxPVtdLHRlPTAsbmU9KFU9Si50cmFuc2Zvcm1UbyhJLnVpbnQ4YXJyYXk/InVpbnQ4YXJyYXkiOiJhcnJheSIsVSkpLmxlbmd0aDt0ZTxuZTspe3ZhciBsZT1WKFUsTWF0aC5taW4o'@;
put 'dGUrNjU1MzYsbmUpKTtxLnB1c2goRyhJLnVpbnQ4YXJyYXk/VS5zdWJhcnJheSh0ZSxsZSk6VS5zbGljZSh0ZSxsZSkpKSx0ZT1sZX1yZXR1cm4gcS5qb2luKCIiKX19LHsiLi9ub2RlQnVmZmVyIjoxMSwiLi9zdXBwb3J0IjoxNywiLi91dGlscyI6MjF9XSwyMTpbZnVuY3Rpb24oQixMLEsp'@;
put 'eyJ1c2Ugc3RyaWN0Ijt2YXIgSj1CKCIuL3N1cHBvcnQiKSxJPUIoIi4vY29tcHJlc3Npb25zIiksUj1CKCIuL25vZGVCdWZmZXIiKTtmdW5jdGlvbiBFKFcpe3JldHVybiBXfWZ1bmN0aW9uIHooVyxVKXtmb3IodmFyIHE9MDtxPFcubGVuZ3RoOysrcSlVW3FdPTI1NSZXLmNoYXJDb2RlQXQo'@;
put 'cSk7cmV0dXJuIFV9ZnVuY3Rpb24gaihXKXt2YXIgVT02NTUzNixxPVtdLHRlPVcubGVuZ3RoLG5lPUsuZ2V0VHlwZU9mKFcpLGllPTAsbGU9ITA7dHJ5e3N3aXRjaChuZSl7Y2FzZSJ1aW50OGFycmF5IjpTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbmV3IFVpbnQ4QXJyYXkoMCkp'@;
put 'O2JyZWFrO2Nhc2Uibm9kZWJ1ZmZlciI6U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLFIoMCkpfX1jYXRjaHtsZT0hMX1pZighbGUpe2Zvcih2YXIgZGU9IiIsdWU9MDt1ZTxXLmxlbmd0aDt1ZSsrKWRlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFdbdWVdKTtyZXR1cm4gZGV9Zm9yKDtp'@;
put 'ZTx0ZSYmVT4xOyl0cnl7cS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwiYXJyYXkiPT09bmV8fCJub2RlYnVmZmVyIj09PW5lP1cuc2xpY2UoaWUsTWF0aC5taW4oaWUrVSx0ZSkpOlcuc3ViYXJyYXkoaWUsTWF0aC5taW4oaWUrVSx0ZSkpKSksaWUrPVV9Y2F0Y2h7VT1N'@;
put 'YXRoLmZsb29yKFUvMil9cmV0dXJuIHEuam9pbigiIil9ZnVuY3Rpb24gVihXLFUpe2Zvcih2YXIgcT0wO3E8Vy5sZW5ndGg7cSsrKVVbcV09V1txXTtyZXR1cm4gVX1LLnN0cmluZzJiaW5hcnk9ZnVuY3Rpb24oVyl7Zm9yKHZhciBVPSIiLHE9MDtxPFcubGVuZ3RoO3ErKylVKz1TdHJpbmcu'@;
put 'ZnJvbUNoYXJDb2RlKDI1NSZXLmNoYXJDb2RlQXQocSkpO3JldHVybiBVfSxLLmFycmF5QnVmZmVyMkJsb2I9ZnVuY3Rpb24oVyl7Sy5jaGVja1N1cHBvcnQoImJsb2IiKTt0cnl7cmV0dXJuIG5ldyBCbG9iKFtXXSx7dHlwZToiYXBwbGljYXRpb24vemlwIn0pfWNhdGNoe3RyeXt2YXIgcT1u'@;
put 'ZXcod2luZG93LkJsb2JCdWlsZGVyfHx3aW5kb3cuV2ViS2l0QmxvYkJ1aWxkZXJ8fHdpbmRvdy5Nb3pCbG9iQnVpbGRlcnx8d2luZG93Lk1TQmxvYkJ1aWxkZXIpO3JldHVybiBxLmFwcGVuZChXKSxxLmdldEJsb2IoImFwcGxpY2F0aW9uL3ppcCIpfWNhdGNoe3Rocm93IG5ldyBFcnJvcigi'@;
put 'QnVnIDogY2FuJ3QgY29uc3RydWN0IHRoZSBCbG9iLiIpfX19LEsuYXBwbHlGcm9tQ2hhckNvZGU9ajt2YXIgRz17fTtHLnN0cmluZz17c3RyaW5nOkUsYXJyYXk6ZnVuY3Rpb24oVyl7cmV0dXJuIHooVyxuZXcgQXJyYXkoVy5sZW5ndGgpKX0sYXJyYXlidWZmZXI6ZnVuY3Rpb24oVyl7cmV0'@;
put 'dXJuIEcuc3RyaW5nLnVpbnQ4YXJyYXkoVykuYnVmZmVyfSx1aW50OGFycmF5OmZ1bmN0aW9uKFcpe3JldHVybiB6KFcsbmV3IFVpbnQ4QXJyYXkoVy5sZW5ndGgpKX0sbm9kZWJ1ZmZlcjpmdW5jdGlvbihXKXtyZXR1cm4geihXLFIoVy5sZW5ndGgpKX19LEcuYXJyYXk9e3N0cmluZzpqLGFy'@;
put 'cmF5OkUsYXJyYXlidWZmZXI6ZnVuY3Rpb24oVyl7cmV0dXJuIG5ldyBVaW50OEFycmF5KFcpLmJ1ZmZlcn0sdWludDhhcnJheTpmdW5jdGlvbihXKXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoVyl9LG5vZGVidWZmZXI6ZnVuY3Rpb24oVyl7cmV0dXJuIFIoVyl9fSxHLmFycmF5YnVmZmVyPXtz'@;
put 'dHJpbmc6ZnVuY3Rpb24oVyl7cmV0dXJuIGoobmV3IFVpbnQ4QXJyYXkoVykpfSxhcnJheTpmdW5jdGlvbihXKXtyZXR1cm4gVihuZXcgVWludDhBcnJheShXKSxuZXcgQXJyYXkoVy5ieXRlTGVuZ3RoKSl9LGFycmF5YnVmZmVyOkUsdWludDhhcnJheTpmdW5jdGlvbihXKXtyZXR1cm4gbmV3'@;
put 'IFVpbnQ4QXJyYXkoVyl9LG5vZGVidWZmZXI6ZnVuY3Rpb24oVyl7cmV0dXJuIFIobmV3IFVpbnQ4QXJyYXkoVykpfX0sRy51aW50OGFycmF5PXtzdHJpbmc6aixhcnJheTpmdW5jdGlvbihXKXtyZXR1cm4gVihXLG5ldyBBcnJheShXLmxlbmd0aCkpfSxhcnJheWJ1ZmZlcjpmdW5jdGlvbihX'@;
put 'KXtyZXR1cm4gVy5idWZmZXJ9LHVpbnQ4YXJyYXk6RSxub2RlYnVmZmVyOmZ1bmN0aW9uKFcpe3JldHVybiBSKFcpfX0sRy5ub2RlYnVmZmVyPXtzdHJpbmc6aixhcnJheTpmdW5jdGlvbihXKXtyZXR1cm4gVihXLG5ldyBBcnJheShXLmxlbmd0aCkpfSxhcnJheWJ1ZmZlcjpmdW5jdGlvbihX'@;
put 'KXtyZXR1cm4gRy5ub2RlYnVmZmVyLnVpbnQ4YXJyYXkoVykuYnVmZmVyfSx1aW50OGFycmF5OmZ1bmN0aW9uKFcpe3JldHVybiBWKFcsbmV3IFVpbnQ4QXJyYXkoVy5sZW5ndGgpKX0sbm9kZWJ1ZmZlcjpFfSxLLnRyYW5zZm9ybVRvPWZ1bmN0aW9uKFcsVSl7aWYoVXx8KFU9IiIpLCFXKXJl'@;
put 'dHVybiBVO0suY2hlY2tTdXBwb3J0KFcpO3ZhciBxPUsuZ2V0VHlwZU9mKFUpO3JldHVybiBHW3FdW1ddKFUpfSxLLmdldFR5cGVPZj1mdW5jdGlvbihXKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIFc/InN0cmluZyI6IltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJp'@;
put 'bmcuY2FsbChXKT8iYXJyYXkiOkoubm9kZWJ1ZmZlciYmUi50ZXN0KFcpPyJub2RlYnVmZmVyIjpKLnVpbnQ4YXJyYXkmJlcgaW5zdGFuY2VvZiBVaW50OEFycmF5PyJ1aW50OGFycmF5IjpKLmFycmF5YnVmZmVyJiZXIGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/ImFycmF5YnVmZmVyIjp2b2lk'@;
put 'IDB9LEsuY2hlY2tTdXBwb3J0PWZ1bmN0aW9uKFcpe2lmKCFKW1cudG9Mb3dlckNhc2UoKV0pdGhyb3cgbmV3IEVycm9yKFcrIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3NlciIpfSxLLk1BWF9WQUxVRV8xNkJJVFM9NjU1MzUsSy5NQVhfVkFMVUVfMzJCSVRTPS0xLEsucHJldHR5'@;
put 'PWZ1bmN0aW9uKFcpe3ZhciBxLHRlLFU9IiI7Zm9yKHRlPTA7dGU8KFd8fCIiKS5sZW5ndGg7dGUrKylVKz0iXFx4IisoKHE9Vy5jaGFyQ29kZUF0KHRlKSk8MTY/IjAiOiIiKStxLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO3JldHVybiBVfSxLLmZpbmRDb21wcmVzc2lvbj1mdW5jdGlv'@;
put 'bihXKXtmb3IodmFyIFUgaW4gSSlpZihJLmhhc093blByb3BlcnR5KFUpJiZJW1VdLm1hZ2ljPT09VylyZXR1cm4gSVtVXTtyZXR1cm4gbnVsbH0sSy5pc1JlZ0V4cD1mdW5jdGlvbihXKXtyZXR1cm4iW29iamVjdCBSZWdFeHBdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChX'@;
put 'KX19LHsiLi9jb21wcmVzc2lvbnMiOjMsIi4vbm9kZUJ1ZmZlciI6MTEsIi4vc3VwcG9ydCI6MTd9XSwyMjpbZnVuY3Rpb24oQixMLEspeyJ1c2Ugc3RyaWN0Ijt2YXIgSj1CKCIuL3N0cmluZ1JlYWRlciIpLEk9QigiLi9ub2RlQnVmZmVyUmVhZGVyIiksUj1CKCIuL3VpbnQ4QXJyYXlSZWFk'@;
put 'ZXIiKSxFPUIoIi4vdXRpbHMiKSx6PUIoIi4vc2lnbmF0dXJlIiksaj1CKCIuL3ppcEVudHJ5IiksVj1CKCIuL3N1cHBvcnQiKSxHPUIoIi4vb2JqZWN0Iik7ZnVuY3Rpb24gVyhVLHEpe3RoaXMuZmlsZXM9W10sdGhpcy5sb2FkT3B0aW9ucz1xLFUmJnRoaXMubG9hZChVKX1XLnByb3RvdHlw'@;
put 'ZT17Y2hlY2tTaWduYXR1cmU6ZnVuY3Rpb24oVSl7dmFyIHE9dGhpcy5yZWFkZXIucmVhZFN0cmluZyg0KTtpZihxIT09VSl0aHJvdyBuZXcgRXJyb3IoIkNvcnJ1cHRlZCB6aXAgb3IgYnVnIDogdW5leHBlY3RlZCBzaWduYXR1cmUgKCIrRS5wcmV0dHkocSkrIiwgZXhwZWN0ZWQgIitFLnBy'@;
put 'ZXR0eShVKSsiKSIpfSxyZWFkQmxvY2tFbmRPZkNlbnRyYWw6ZnVuY3Rpb24oKXt0aGlzLmRpc2tOdW1iZXI9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmRpc2tXaXRoQ2VudHJhbERpclN0YXJ0PXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy5jZW50cmFsRGlyUmVjb3Jkc09uVGhp'@;
put 'c0Rpc2s9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy5jZW50cmFsRGlyU2l6ZT10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuY2VudHJhbERpck9mZnNldD10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRo'@;
put 'aXMuemlwQ29tbWVudExlbmd0aD10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuemlwQ29tbWVudD10aGlzLnJlYWRlci5yZWFkU3RyaW5nKHRoaXMuemlwQ29tbWVudExlbmd0aCksdGhpcy56aXBDb21tZW50PUcudXRmOGRlY29kZSh0aGlzLnppcENvbW1lbnQpfSxyZWFkQmxvY2taaXA2'@;
put 'NEVuZE9mQ2VudHJhbDpmdW5jdGlvbigpe3RoaXMuemlwNjRFbmRPZkNlbnRyYWxTaXplPXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy52ZXJzaW9uTWFkZUJ5PXRoaXMucmVhZGVyLnJlYWRTdHJpbmcoMiksdGhpcy52ZXJzaW9uTmVlZGVkPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhp'@;
put 'cy5kaXNrTnVtYmVyPXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy5kaXNrV2l0aENlbnRyYWxEaXJTdGFydD10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuY2VudHJhbERpclJlY29yZHNPblRoaXNEaXNrPXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy5jZW50cmFsRGlyUmVjb3Jk'@;
put 'cz10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuY2VudHJhbERpclNpemU9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLmNlbnRyYWxEaXJPZmZzZXQ9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLnppcDY0RXh0ZW5zaWJsZURhdGE9e307Zm9yKHZhciB0ZSxuZSxpZSxVPXRoaXMu'@;
put 'emlwNjRFbmRPZkNlbnRyYWxTaXplLTQ0OzA8VTspdGU9dGhpcy5yZWFkZXIucmVhZEludCgyKSxuZT10aGlzLnJlYWRlci5yZWFkSW50KDQpLGllPXRoaXMucmVhZGVyLnJlYWRTdHJpbmcobmUpLHRoaXMuemlwNjRFeHRlbnNpYmxlRGF0YVt0ZV09e2lkOnRlLGxlbmd0aDpuZSx2YWx1ZTpp'@;
put 'ZX19LHJlYWRCbG9ja1ppcDY0RW5kT2ZDZW50cmFsTG9jYXRvcjpmdW5jdGlvbigpe2lmKHRoaXMuZGlza1dpdGhaaXA2NENlbnRyYWxEaXJTdGFydD10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMucmVsYXRpdmVPZmZzZXRFbmRPZlppcDY0Q2VudHJhbERpcj10aGlzLnJlYWRlci5yZWFk'@;
put 'SW50KDgpLHRoaXMuZGlza3NDb3VudD10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuZGlza3NDb3VudD4xKXRocm93IG5ldyBFcnJvcigiTXVsdGktdm9sdW1lcyB6aXAgYXJlIG5vdCBzdXBwb3J0ZWQiKX0scmVhZExvY2FsRmlsZXM6ZnVuY3Rpb24oKXt2YXIgVSxxO2ZvcihVPTA7VTx0'@;
put 'aGlzLmZpbGVzLmxlbmd0aDtVKyspdGhpcy5yZWFkZXIuc2V0SW5kZXgoKHE9dGhpcy5maWxlc1tVXSkubG9jYWxIZWFkZXJPZmZzZXQpLHRoaXMuY2hlY2tTaWduYXR1cmUoei5MT0NBTF9GSUxFX0hFQURFUikscS5yZWFkTG9jYWxQYXJ0KHRoaXMucmVhZGVyKSxxLmhhbmRsZVVURjgoKX0s'@;
put 'cmVhZENlbnRyYWxEaXI6ZnVuY3Rpb24oKXt2YXIgVTtmb3IodGhpcy5yZWFkZXIuc2V0SW5kZXgodGhpcy5jZW50cmFsRGlyT2Zmc2V0KTt0aGlzLnJlYWRlci5yZWFkU3RyaW5nKDQpPT09ei5DRU5UUkFMX0ZJTEVfSEVBREVSOykoVT1uZXcgaih7emlwNjQ6dGhpcy56aXA2NH0sdGhpcy5s'@;
put 'b2FkT3B0aW9ucykpLnJlYWRDZW50cmFsUGFydCh0aGlzLnJlYWRlciksdGhpcy5maWxlcy5wdXNoKFUpfSxyZWFkRW5kT2ZDZW50cmFsOmZ1bmN0aW9uKCl7dmFyIFU9dGhpcy5yZWFkZXIubGFzdEluZGV4T2ZTaWduYXR1cmUoei5DRU5UUkFMX0RJUkVDVE9SWV9FTkQpO2lmKC0xPT09VSl0'@;
put 'aHJvdyBuZXcgRXJyb3IoIkNvcnJ1cHRlZCB6aXAgOiBjYW4ndCBmaW5kIGVuZCBvZiBjZW50cmFsIGRpcmVjdG9yeSIpO2lmKHRoaXMucmVhZGVyLnNldEluZGV4KFUpLHRoaXMuY2hlY2tTaWduYXR1cmUoei5DRU5UUkFMX0RJUkVDVE9SWV9FTkQpLHRoaXMucmVhZEJsb2NrRW5kT2ZDZW50'@;
put 'cmFsKCksdGhpcy5kaXNrTnVtYmVyPT09RS5NQVhfVkFMVUVfMTZCSVRTfHx0aGlzLmRpc2tXaXRoQ2VudHJhbERpclN0YXJ0PT09RS5NQVhfVkFMVUVfMTZCSVRTfHx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzT25UaGlzRGlzaz09PUUuTUFYX1ZBTFVFXzE2QklUU3x8dGhpcy5jZW50cmFsRGly'@;
put 'UmVjb3Jkcz09PUUuTUFYX1ZBTFVFXzE2QklUU3x8dGhpcy5jZW50cmFsRGlyU2l6ZT09PUUuTUFYX1ZBTFVFXzMyQklUU3x8dGhpcy5jZW50cmFsRGlyT2Zmc2V0PT09RS5NQVhfVkFMVUVfMzJCSVRTKXtpZih0aGlzLnppcDY0PSEwLC0xPT09KFU9dGhpcy5yZWFkZXIubGFzdEluZGV4T2ZT'@;
put 'aWduYXR1cmUoei5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9MT0NBVE9SKSkpdGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlwIDogY2FuJ3QgZmluZCB0aGUgWklQNjQgZW5kIG9mIGNlbnRyYWwgZGlyZWN0b3J5IGxvY2F0b3IiKTt0aGlzLnJlYWRlci5zZXRJbmRleChVKSx0aGlzLmNo'@;
put 'ZWNrU2lnbmF0dXJlKHouWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfTE9DQVRPUiksdGhpcy5yZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbExvY2F0b3IoKSx0aGlzLnJlYWRlci5zZXRJbmRleCh0aGlzLnJlbGF0aXZlT2Zmc2V0RW5kT2ZaaXA2NENlbnRyYWxEaXIpLHRoaXMuY2hlY2tTaWdu'@;
put 'YXR1cmUoei5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9FTkQpLHRoaXMucmVhZEJsb2NrWmlwNjRFbmRPZkNlbnRyYWwoKX19LHByZXBhcmVSZWFkZXI6ZnVuY3Rpb24oVSl7dmFyIHE9RS5nZXRUeXBlT2YoVSk7dGhpcy5yZWFkZXI9InN0cmluZyIhPT1xfHxWLnVpbnQ4YXJyYXk/Im5vZGVi'@;
put 'dWZmZXIiPT09cT9uZXcgSShVKTpuZXcgUihFLnRyYW5zZm9ybVRvKCJ1aW50OGFycmF5IixVKSk6bmV3IEooVSx0aGlzLmxvYWRPcHRpb25zLm9wdGltaXplZEJpbmFyeVN0cmluZyl9LGxvYWQ6ZnVuY3Rpb24oVSl7dGhpcy5wcmVwYXJlUmVhZGVyKFUpLHRoaXMucmVhZEVuZE9mQ2VudHJh'@;
put 'bCgpLHRoaXMucmVhZENlbnRyYWxEaXIoKSx0aGlzLnJlYWRMb2NhbEZpbGVzKCl9fSxMLmV4cG9ydHM9V30seyIuL25vZGVCdWZmZXJSZWFkZXIiOjEyLCIuL29iamVjdCI6MTMsIi4vc2lnbmF0dXJlIjoxNCwiLi9zdHJpbmdSZWFkZXIiOjE1LCIuL3N1cHBvcnQiOjE3LCIuL3VpbnQ4QXJy'@;
put 'YXlSZWFkZXIiOjE4LCIuL3V0aWxzIjoyMSwiLi96aXBFbnRyeSI6MjN9XSwyMzpbZnVuY3Rpb24oQixMLEspeyJ1c2Ugc3RyaWN0Ijt2YXIgSj1CKCIuL3N0cmluZ1JlYWRlciIpLEk9QigiLi91dGlscyIpLFI9QigiLi9jb21wcmVzc2VkT2JqZWN0IiksRT1CKCIuL29iamVjdCIpO2Z1bmN0'@;
put 'aW9uIHooaixWKXt0aGlzLm9wdGlvbnM9aix0aGlzLmxvYWRPcHRpb25zPVZ9ei5wcm90b3R5cGU9e2lzRW5jcnlwdGVkOmZ1bmN0aW9uKCl7cmV0dXJuIDE9PSgxJnRoaXMuYml0RmxhZyl9LHVzZVVURjg6ZnVuY3Rpb24oKXtyZXR1cm4gMjA0OD09KDIwNDgmdGhpcy5iaXRGbGFnKX0scHJl'@;
put 'cGFyZUNvbXByZXNzZWRDb250ZW50OmZ1bmN0aW9uKGosVixHKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgVz1qLmluZGV4O2ouc2V0SW5kZXgoVik7dmFyIFU9ai5yZWFkRGF0YShHKTtyZXR1cm4gai5zZXRJbmRleChXKSxVfX0scHJlcGFyZUNvbnRlbnQ6ZnVuY3Rpb24oaixWLEcsVyxVKXty'@;
put 'ZXR1cm4gZnVuY3Rpb24oKXt2YXIgcT1JLnRyYW5zZm9ybVRvKFcudW5jb21wcmVzc0lucHV0VHlwZSx0aGlzLmdldENvbXByZXNzZWRDb250ZW50KCkpLHRlPVcudW5jb21wcmVzcyhxKTtpZih0ZS5sZW5ndGghPT1VKXRocm93IG5ldyBFcnJvcigiQnVnIDogdW5jb21wcmVzc2VkIGRhdGEg'@;
put 'c2l6ZSBtaXNtYXRjaCIpO3JldHVybiB0ZX19LHJlYWRMb2NhbFBhcnQ6ZnVuY3Rpb24oail7dmFyIFYsRztpZihqLnNraXAoMjIpLHRoaXMuZmlsZU5hbWVMZW5ndGg9ai5yZWFkSW50KDIpLEc9ai5yZWFkSW50KDIpLHRoaXMuZmlsZU5hbWU9ai5yZWFkU3RyaW5nKHRoaXMuZmlsZU5hbWVM'@;
put 'ZW5ndGgpLGouc2tpcChHKSwtMT09dGhpcy5jb21wcmVzc2VkU2l6ZXx8LTE9PXRoaXMudW5jb21wcmVzc2VkU2l6ZSl0aHJvdyBuZXcgRXJyb3IoIkJ1ZyBvciBjb3JydXB0ZWQgemlwIDogZGlkbid0IGdldCBlbm91Z2ggaW5mb3JtYXRpb25zIGZyb20gdGhlIGNlbnRyYWwgZGlyZWN0b3J5'@;
put 'IChjb21wcmVzc2VkU2l6ZSA9PSAtMSB8fCB1bmNvbXByZXNzZWRTaXplID09IC0xKSIpO2lmKG51bGw9PT0oVj1JLmZpbmRDb21wcmVzc2lvbih0aGlzLmNvbXByZXNzaW9uTWV0aG9kKSkpdGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlwIDogY29tcHJlc3Npb24gIitJLnByZXR0eSh0'@;
put 'aGlzLmNvbXByZXNzaW9uTWV0aG9kKSsiIHVua25vd24gKGlubmVyIGZpbGUgOiAiK3RoaXMuZmlsZU5hbWUrIikiKTtpZih0aGlzLmRlY29tcHJlc3NlZD1uZXcgUix0aGlzLmRlY29tcHJlc3NlZC5jb21wcmVzc2VkU2l6ZT10aGlzLmNvbXByZXNzZWRTaXplLHRoaXMuZGVjb21wcmVzc2Vk'@;
put 'LnVuY29tcHJlc3NlZFNpemU9dGhpcy51bmNvbXByZXNzZWRTaXplLHRoaXMuZGVjb21wcmVzc2VkLmNyYzMyPXRoaXMuY3JjMzIsdGhpcy5kZWNvbXByZXNzZWQuY29tcHJlc3Npb25NZXRob2Q9dGhpcy5jb21wcmVzc2lvbk1ldGhvZCx0aGlzLmRlY29tcHJlc3NlZC5nZXRDb21wcmVzc2Vk'@;
put 'Q29udGVudD10aGlzLnByZXBhcmVDb21wcmVzc2VkQ29udGVudChqLGouaW5kZXgsdGhpcy5jb21wcmVzc2VkU2l6ZSxWKSx0aGlzLmRlY29tcHJlc3NlZC5nZXRDb250ZW50PXRoaXMucHJlcGFyZUNvbnRlbnQoaixqLmluZGV4LHRoaXMuY29tcHJlc3NlZFNpemUsVix0aGlzLnVuY29tcHJl'@;
put 'c3NlZFNpemUpLHRoaXMubG9hZE9wdGlvbnMuY2hlY2tDUkMzMiYmKHRoaXMuZGVjb21wcmVzc2VkPUkudHJhbnNmb3JtVG8oInN0cmluZyIsdGhpcy5kZWNvbXByZXNzZWQuZ2V0Q29udGVudCgpKSxFLmNyYzMyKHRoaXMuZGVjb21wcmVzc2VkKSE9PXRoaXMuY3JjMzIpKXRocm93IG5ldyBF'@;
put 'cnJvcigiQ29ycnVwdGVkIHppcCA6IENSQzMyIG1pc21hdGNoIil9LHJlYWRDZW50cmFsUGFydDpmdW5jdGlvbihqKXtpZih0aGlzLnZlcnNpb25NYWRlQnk9ai5yZWFkU3RyaW5nKDIpLHRoaXMudmVyc2lvbk5lZWRlZD1qLnJlYWRJbnQoMiksdGhpcy5iaXRGbGFnPWoucmVhZEludCgyKSx0'@;
put 'aGlzLmNvbXByZXNzaW9uTWV0aG9kPWoucmVhZFN0cmluZygyKSx0aGlzLmRhdGU9ai5yZWFkRGF0ZSgpLHRoaXMuY3JjMzI9ai5yZWFkSW50KDQpLHRoaXMuY29tcHJlc3NlZFNpemU9ai5yZWFkSW50KDQpLHRoaXMudW5jb21wcmVzc2VkU2l6ZT1qLnJlYWRJbnQoNCksdGhpcy5maWxlTmFt'@;
put 'ZUxlbmd0aD1qLnJlYWRJbnQoMiksdGhpcy5leHRyYUZpZWxkc0xlbmd0aD1qLnJlYWRJbnQoMiksdGhpcy5maWxlQ29tbWVudExlbmd0aD1qLnJlYWRJbnQoMiksdGhpcy5kaXNrTnVtYmVyU3RhcnQ9ai5yZWFkSW50KDIpLHRoaXMuaW50ZXJuYWxGaWxlQXR0cmlidXRlcz1qLnJlYWRJbnQo'@;
put 'MiksdGhpcy5leHRlcm5hbEZpbGVBdHRyaWJ1dGVzPWoucmVhZEludCg0KSx0aGlzLmxvY2FsSGVhZGVyT2Zmc2V0PWoucmVhZEludCg0KSx0aGlzLmlzRW5jcnlwdGVkKCkpdGhyb3cgbmV3IEVycm9yKCJFbmNyeXB0ZWQgemlwIGFyZSBub3Qgc3VwcG9ydGVkIik7dGhpcy5maWxlTmFtZT1q'@;
put 'LnJlYWRTdHJpbmcodGhpcy5maWxlTmFtZUxlbmd0aCksdGhpcy5yZWFkRXh0cmFGaWVsZHMoaiksdGhpcy5wYXJzZVpJUDY0RXh0cmFGaWVsZChqKSx0aGlzLmZpbGVDb21tZW50PWoucmVhZFN0cmluZyh0aGlzLmZpbGVDb21tZW50TGVuZ3RoKSx0aGlzLmRpcj0hISgxNiZ0aGlzLmV4dGVy'@;
put 'bmFsRmlsZUF0dHJpYnV0ZXMpfSxwYXJzZVpJUDY0RXh0cmFGaWVsZDpmdW5jdGlvbihqKXtpZih0aGlzLmV4dHJhRmllbGRzWzFdKXt2YXIgVj1uZXcgSih0aGlzLmV4dHJhRmllbGRzWzFdLnZhbHVlKTt0aGlzLnVuY29tcHJlc3NlZFNpemU9PT1JLk1BWF9WQUxVRV8zMkJJVFMmJih0aGlz'@;
put 'LnVuY29tcHJlc3NlZFNpemU9Vi5yZWFkSW50KDgpKSx0aGlzLmNvbXByZXNzZWRTaXplPT09SS5NQVhfVkFMVUVfMzJCSVRTJiYodGhpcy5jb21wcmVzc2VkU2l6ZT1WLnJlYWRJbnQoOCkpLHRoaXMubG9jYWxIZWFkZXJPZmZzZXQ9PT1JLk1BWF9WQUxVRV8zMkJJVFMmJih0aGlzLmxvY2Fs'@;
put 'SGVhZGVyT2Zmc2V0PVYucmVhZEludCg4KSksdGhpcy5kaXNrTnVtYmVyU3RhcnQ9PT1JLk1BWF9WQUxVRV8zMkJJVFMmJih0aGlzLmRpc2tOdW1iZXJTdGFydD1WLnJlYWRJbnQoNCkpfX0scmVhZEV4dHJhRmllbGRzOmZ1bmN0aW9uKGope3ZhciBHLFcsVSxWPWouaW5kZXg7Zm9yKHRoaXMu'@;
put 'ZXh0cmFGaWVsZHM9dGhpcy5leHRyYUZpZWxkc3x8e307ai5pbmRleDxWK3RoaXMuZXh0cmFGaWVsZHNMZW5ndGg7KUc9ai5yZWFkSW50KDIpLFc9ai5yZWFkSW50KDIpLFU9ai5yZWFkU3RyaW5nKFcpLHRoaXMuZXh0cmFGaWVsZHNbR109e2lkOkcsbGVuZ3RoOlcsdmFsdWU6VX19LGhhbmRs'@;
put 'ZVVURjg6ZnVuY3Rpb24oKXtpZih0aGlzLnVzZVVURjgoKSl0aGlzLmZpbGVOYW1lPUUudXRmOGRlY29kZSh0aGlzLmZpbGVOYW1lKSx0aGlzLmZpbGVDb21tZW50PUUudXRmOGRlY29kZSh0aGlzLmZpbGVDb21tZW50KTtlbHNle3ZhciBqPXRoaXMuZmluZEV4dHJhRmllbGRVbmljb2RlUGF0'@;
put 'aCgpO251bGwhPT1qJiYodGhpcy5maWxlTmFtZT1qKTt2YXIgVj10aGlzLmZpbmRFeHRyYUZpZWxkVW5pY29kZUNvbW1lbnQoKTtudWxsIT09ViYmKHRoaXMuZmlsZUNvbW1lbnQ9Vil9fSxmaW5kRXh0cmFGaWVsZFVuaWNvZGVQYXRoOmZ1bmN0aW9uKCl7dmFyIGo9dGhpcy5leHRyYUZpZWxk'@;
put 'c1syODc4OV07aWYoail7dmFyIFY9bmV3IEooai52YWx1ZSk7cmV0dXJuIDEhPT1WLnJlYWRJbnQoMSl8fEUuY3JjMzIodGhpcy5maWxlTmFtZSkhPT1WLnJlYWRJbnQoNCk/bnVsbDpFLnV0ZjhkZWNvZGUoVi5yZWFkU3RyaW5nKGoubGVuZ3RoLTUpKX1yZXR1cm4gbnVsbH0sZmluZEV4dHJh'@;
put 'RmllbGRVbmljb2RlQ29tbWVudDpmdW5jdGlvbigpe3ZhciBqPXRoaXMuZXh0cmFGaWVsZHNbMjU0NjFdO2lmKGope3ZhciBWPW5ldyBKKGoudmFsdWUpO3JldHVybiAxIT09Vi5yZWFkSW50KDEpfHxFLmNyYzMyKHRoaXMuZmlsZUNvbW1lbnQpIT09Vi5yZWFkSW50KDQpP251bGw6RS51dGY4'@;
put 'ZGVjb2RlKFYucmVhZFN0cmluZyhqLmxlbmd0aC01KSl9cmV0dXJuIG51bGx9fSxMLmV4cG9ydHM9en0seyIuL2NvbXByZXNzZWRPYmplY3QiOjIsIi4vb2JqZWN0IjoxMywiLi9zdHJpbmdSZWFkZXIiOjE1LCIuL3V0aWxzIjoyMX1dLDI0OltmdW5jdGlvbihCLEwsSyl7InVzZSBzdHJpY3Qi'@;
put 'O3ZhciB6PXt9OygwLEIoIi4vbGliL3V0aWxzL2NvbW1vbiIpLmFzc2lnbikoeixCKCIuL2xpYi9kZWZsYXRlIiksQigiLi9saWIvaW5mbGF0ZSIpLEIoIi4vbGliL3psaWIvY29uc3RhbnRzIikpLEwuZXhwb3J0cz16fSx7Ii4vbGliL2RlZmxhdGUiOjI1LCIuL2xpYi9pbmZsYXRlIjoyNiwi'@;
put 'Li9saWIvdXRpbHMvY29tbW9uIjoyNywiLi9saWIvemxpYi9jb25zdGFudHMiOjMwfV0sMjU6W2Z1bmN0aW9uKEIsTCxLKXsidXNlIHN0cmljdCI7dmFyIEo9QigiLi96bGliL2RlZmxhdGUuanMiKSxJPUIoIi4vdXRpbHMvY29tbW9uIiksUj1CKCIuL3V0aWxzL3N0cmluZ3MiKSxFPUIoIi4v'@;
put 'emxpYi9tZXNzYWdlcyIpLHo9QigiLi96bGliL3pzdHJlYW0iKSxuZT1mdW5jdGlvbih1ZSl7dGhpcy5vcHRpb25zPUkuYXNzaWduKHtsZXZlbDotMSxtZXRob2Q6OCxjaHVua1NpemU6MTYzODQsd2luZG93Qml0czoxNSxtZW1MZXZlbDo4LHN0cmF0ZWd5OjAsdG86IiJ9LHVlfHx7fSk7dmFy'@;
put 'IGNlPXRoaXMub3B0aW9ucztjZS5yYXcmJmNlLndpbmRvd0JpdHM+MD9jZS53aW5kb3dCaXRzPS1jZS53aW5kb3dCaXRzOmNlLmd6aXAmJmNlLndpbmRvd0JpdHM+MCYmY2Uud2luZG93Qml0czwxNiYmKGNlLndpbmRvd0JpdHMrPTE2KSx0aGlzLmVycj0wLHRoaXMubXNnPSIiLHRoaXMuZW5k'@;
put 'ZWQ9ITEsdGhpcy5jaHVua3M9W10sdGhpcy5zdHJtPW5ldyB6LHRoaXMuc3RybS5hdmFpbF9vdXQ9MDt2YXIgWT1KLmRlZmxhdGVJbml0Mih0aGlzLnN0cm0sY2UubGV2ZWwsY2UubWV0aG9kLGNlLndpbmRvd0JpdHMsY2UubWVtTGV2ZWwsY2Uuc3RyYXRlZ3kpO2lmKDAhPT1ZKXRocm93IG5l'@;
put 'dyBFcnJvcihFW1ldKTtjZS5oZWFkZXImJkouZGVmbGF0ZVNldEhlYWRlcih0aGlzLnN0cm0sY2UuaGVhZGVyKX07ZnVuY3Rpb24gaWUodWUsY2Upe3ZhciBZPW5ldyBuZShjZSk7aWYoWS5wdXNoKHVlLCEwKSxZLmVycil0aHJvdyBZLm1zZztyZXR1cm4gWS5yZXN1bHR9bmUucHJvdG90eXBl'@;
put 'LnB1c2g9ZnVuY3Rpb24odWUsY2Upe3ZhciB4LE4sWT10aGlzLnN0cm0sYj10aGlzLm9wdGlvbnMuY2h1bmtTaXplO2lmKHRoaXMuZW5kZWQpcmV0dXJuITE7Tj1jZT09PX5+Y2U/Y2U6ITA9PT1jZT80OjAsWS5pbnB1dD0ic3RyaW5nIj09dHlwZW9mIHVlP1Iuc3RyaW5nMmJ1Zih1ZSk6dWUs'@;
put 'WS5uZXh0X2luPTAsWS5hdmFpbF9pbj1ZLmlucHV0Lmxlbmd0aDtkb3tpZigwPT09WS5hdmFpbF9vdXQmJihZLm91dHB1dD1uZXcgSS5CdWY4KGIpLFkubmV4dF9vdXQ9MCxZLmF2YWlsX291dD1iKSwxIT09KHg9Si5kZWZsYXRlKFksTikpJiYwIT09eClyZXR1cm4gdGhpcy5vbkVuZCh4KSx0'@;
put 'aGlzLmVuZGVkPSEwLCExOygwPT09WS5hdmFpbF9vdXR8fDA9PT1ZLmF2YWlsX2luJiY0PT09TikmJnRoaXMub25EYXRhKCJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvP1IuYnVmMmJpbnN0cmluZyhJLnNocmlua0J1ZihZLm91dHB1dCxZLm5leHRfb3V0KSk6SS5zaHJpbmtCdWYoWS5vdXRw'@;
put 'dXQsWS5uZXh0X291dCkpfXdoaWxlKChZLmF2YWlsX2luPjB8fDA9PT1ZLmF2YWlsX291dCkmJjEhPT14KTtyZXR1cm4gNCE9PU58fCh4PUouZGVmbGF0ZUVuZCh0aGlzLnN0cm0pLHRoaXMub25FbmQoeCksdGhpcy5lbmRlZD0hMCwwPT09eCl9LG5lLnByb3RvdHlwZS5vbkRhdGE9ZnVuY3Rp'@;
put 'b24odWUpe3RoaXMuY2h1bmtzLnB1c2godWUpfSxuZS5wcm90b3R5cGUub25FbmQ9ZnVuY3Rpb24odWUpezA9PT11ZSYmKHRoaXMucmVzdWx0PSJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvP3RoaXMuY2h1bmtzLmpvaW4oIiIpOkkuZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcykpLHRoaXMu'@;
put 'Y2h1bmtzPVtdLHRoaXMuZXJyPXVlLHRoaXMubXNnPXRoaXMuc3RybS5tc2d9LEsuRGVmbGF0ZT1uZSxLLmRlZmxhdGU9aWUsSy5kZWZsYXRlUmF3PWZ1bmN0aW9uIGxlKHVlLGNlKXtyZXR1cm4oY2U9Y2V8fHt9KS5yYXc9ITAsaWUodWUsY2UpfSxLLmd6aXA9ZnVuY3Rpb24gZGUodWUsY2Up'@;
put 'e3JldHVybihjZT1jZXx8e30pLmd6aXA9ITAsaWUodWUsY2UpfX0seyIuL3V0aWxzL2NvbW1vbiI6MjcsIi4vdXRpbHMvc3RyaW5ncyI6MjgsIi4vemxpYi9kZWZsYXRlLmpzIjozMiwiLi96bGliL21lc3NhZ2VzIjozNywiLi96bGliL3pzdHJlYW0iOjM5fV0sMjY6W2Z1bmN0aW9uKEIsTCxL'@;
put 'KXsidXNlIHN0cmljdCI7dmFyIEo9QigiLi96bGliL2luZmxhdGUuanMiKSxJPUIoIi4vdXRpbHMvY29tbW9uIiksUj1CKCIuL3V0aWxzL3N0cmluZ3MiKSxFPUIoIi4vemxpYi9jb25zdGFudHMiKSx6PUIoIi4vemxpYi9tZXNzYWdlcyIpLGo9QigiLi96bGliL3pzdHJlYW0iKSxWPUIoIi4v'@;
put 'emxpYi9nemhlYWRlciIpLEc9ZnVuY3Rpb24ocSl7dGhpcy5vcHRpb25zPUkuYXNzaWduKHtjaHVua1NpemU6MTYzODQsd2luZG93Qml0czowLHRvOiIifSxxfHx7fSk7dmFyIHRlPXRoaXMub3B0aW9uczt0ZS5yYXcmJnRlLndpbmRvd0JpdHM+PTAmJnRlLndpbmRvd0JpdHM8MTYmJih0ZS53'@;
put 'aW5kb3dCaXRzPS10ZS53aW5kb3dCaXRzLDA9PT10ZS53aW5kb3dCaXRzJiYodGUud2luZG93Qml0cz0tMTUpKSx0ZS53aW5kb3dCaXRzPj0wJiZ0ZS53aW5kb3dCaXRzPDE2JiYhKHEmJnEud2luZG93Qml0cykmJih0ZS53aW5kb3dCaXRzKz0zMiksdGUud2luZG93Qml0cz4xNSYmdGUud2lu'@;
put 'ZG93Qml0czw0OCYmKDE1JnRlLndpbmRvd0JpdHN8fCh0ZS53aW5kb3dCaXRzfD0xNSkpLHRoaXMuZXJyPTAsdGhpcy5tc2c9IiIsdGhpcy5lbmRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlzLnN0cm09bmV3IGosdGhpcy5zdHJtLmF2YWlsX291dD0wO3ZhciBuZT1KLmluZmxhdGVJbml0Mih0'@;
put 'aGlzLnN0cm0sdGUud2luZG93Qml0cyk7aWYobmUhPT1FLlpfT0spdGhyb3cgbmV3IEVycm9yKHpbbmVdKTt0aGlzLmhlYWRlcj1uZXcgVixKLmluZmxhdGVHZXRIZWFkZXIodGhpcy5zdHJtLHRoaXMuaGVhZGVyKX07ZnVuY3Rpb24gVyhxLHRlKXt2YXIgbmU9bmV3IEcodGUpO2lmKG5lLnB1'@;
put 'c2gocSwhMCksbmUuZXJyKXRocm93IG5lLm1zZztyZXR1cm4gbmUucmVzdWx0fUcucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24ocSx0ZSl7dmFyIGxlLGRlLHVlLGNlLFksbmU9dGhpcy5zdHJtLGllPXRoaXMub3B0aW9ucy5jaHVua1NpemU7aWYodGhpcy5lbmRlZClyZXR1cm4hMTtkZT10ZT09'@;
put 'PX5+dGU/dGU6ITA9PT10ZT9FLlpfRklOSVNIOkUuWl9OT19GTFVTSCxuZS5pbnB1dD0ic3RyaW5nIj09dHlwZW9mIHE/Ui5iaW5zdHJpbmcyYnVmKHEpOnEsbmUubmV4dF9pbj0wLG5lLmF2YWlsX2luPW5lLmlucHV0Lmxlbmd0aDtkb3tpZigwPT09bmUuYXZhaWxfb3V0JiYobmUub3V0cHV0'@;
put 'PW5ldyBJLkJ1ZjgoaWUpLG5lLm5leHRfb3V0PTAsbmUuYXZhaWxfb3V0PWllKSwobGU9Si5pbmZsYXRlKG5lLEUuWl9OT19GTFVTSCkpIT09RS5aX1NUUkVBTV9FTkQmJmxlIT09RS5aX09LKXJldHVybiB0aGlzLm9uRW5kKGxlKSx0aGlzLmVuZGVkPSEwLCExO25lLm5leHRfb3V0JiYoMD09'@;
put 'PW5lLmF2YWlsX291dHx8bGU9PT1FLlpfU1RSRUFNX0VORHx8MD09PW5lLmF2YWlsX2luJiZkZT09PUUuWl9GSU5JU0gpJiYoInN0cmluZyI9PT10aGlzLm9wdGlvbnMudG8/KHVlPVIudXRmOGJvcmRlcihuZS5vdXRwdXQsbmUubmV4dF9vdXQpLGNlPW5lLm5leHRfb3V0LXVlLFk9Ui5idWYy'@;
put 'c3RyaW5nKG5lLm91dHB1dCx1ZSksbmUubmV4dF9vdXQ9Y2UsbmUuYXZhaWxfb3V0PWllLWNlLGNlJiZJLmFycmF5U2V0KG5lLm91dHB1dCxuZS5vdXRwdXQsdWUsY2UsMCksdGhpcy5vbkRhdGEoWSkpOnRoaXMub25EYXRhKEkuc2hyaW5rQnVmKG5lLm91dHB1dCxuZS5uZXh0X291dCkpKX13'@;
put 'aGlsZShuZS5hdmFpbF9pbj4wJiZsZSE9PUUuWl9TVFJFQU1fRU5EKTtyZXR1cm4gbGU9PT1FLlpfU1RSRUFNX0VORCYmKGRlPUUuWl9GSU5JU0gpLGRlIT09RS5aX0ZJTklTSHx8KGxlPUouaW5mbGF0ZUVuZCh0aGlzLnN0cm0pLHRoaXMub25FbmQobGUpLHRoaXMuZW5kZWQ9ITAsbGU9PT1F'@;
put 'LlpfT0spfSxHLnByb3RvdHlwZS5vbkRhdGE9ZnVuY3Rpb24ocSl7dGhpcy5jaHVua3MucHVzaChxKX0sRy5wcm90b3R5cGUub25FbmQ9ZnVuY3Rpb24ocSl7cT09PUUuWl9PSyYmKHRoaXMucmVzdWx0PSJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvP3RoaXMuY2h1bmtzLmpvaW4oIiIpOkku'@;
put 'ZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcykpLHRoaXMuY2h1bmtzPVtdLHRoaXMuZXJyPXEsdGhpcy5tc2c9dGhpcy5zdHJtLm1zZ30sSy5JbmZsYXRlPUcsSy5pbmZsYXRlPVcsSy5pbmZsYXRlUmF3PWZ1bmN0aW9uIFUocSx0ZSl7cmV0dXJuKHRlPXRlfHx7fSkucmF3PSEwLFcocSx0ZSl9'@;
put 'LEsudW5nemlwPVd9LHsiLi91dGlscy9jb21tb24iOjI3LCIuL3V0aWxzL3N0cmluZ3MiOjI4LCIuL3psaWIvY29uc3RhbnRzIjozMCwiLi96bGliL2d6aGVhZGVyIjozMywiLi96bGliL2luZmxhdGUuanMiOjM1LCIuL3psaWIvbWVzc2FnZXMiOjM3LCIuL3psaWIvenN0cmVhbSI6Mzl9XSwy'@;
put 'NzpbZnVuY3Rpb24oQixMLEspeyJ1c2Ugc3RyaWN0Ijt2YXIgSj10eXBlb2YgVWludDhBcnJheTwidSImJnR5cGVvZiBVaW50MTZBcnJheTwidSImJnR5cGVvZiBJbnQzMkFycmF5PCJ1IjtLLmFzc2lnbj1mdW5jdGlvbihFKXtmb3IodmFyIHo9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwo'@;
put 'YXJndW1lbnRzLDEpO3oubGVuZ3RoOyl7dmFyIGo9ei5zaGlmdCgpO2lmKGope2lmKCJvYmplY3QiIT10eXBlb2Ygail0aHJvdyBuZXcgVHlwZUVycm9yKGorIm11c3QgYmUgbm9uLW9iamVjdCIpO2Zvcih2YXIgViBpbiBqKWouaGFzT3duUHJvcGVydHkoVikmJihFW1ZdPWpbVl0pfX1yZXR1'@;
put 'cm4gRX0sSy5zaHJpbmtCdWY9ZnVuY3Rpb24oRSx6KXtyZXR1cm4gRS5sZW5ndGg9PT16P0U6RS5zdWJhcnJheT9FLnN1YmFycmF5KDAseik6KEUubGVuZ3RoPXosRSl9O3ZhciBJPXthcnJheVNldDpmdW5jdGlvbihFLHosaixWLEcpe2lmKHouc3ViYXJyYXkmJkUuc3ViYXJyYXkpRS5zZXQo'@;
put 'ei5zdWJhcnJheShqLGorViksRyk7ZWxzZSBmb3IodmFyIFc9MDtXPFY7VysrKUVbRytXXT16W2orV119LGZsYXR0ZW5DaHVua3M6ZnVuY3Rpb24oRSl7dmFyIHosaixWLEcsVyxVO2ZvcihWPTAsej0wLGo9RS5sZW5ndGg7ejxqO3orKylWKz1FW3pdLmxlbmd0aDtmb3IoVT1uZXcgVWludDhB'@;
put 'cnJheShWKSxHPTAsej0wLGo9RS5sZW5ndGg7ejxqO3orKylVLnNldChXPUVbel0sRyksRys9Vy5sZW5ndGg7cmV0dXJuIFV9fSxSPXthcnJheVNldDpmdW5jdGlvbihFLHosaixWLEcpe2Zvcih2YXIgVz0wO1c8VjtXKyspRVtHK1ddPXpbaitXXX0sZmxhdHRlbkNodW5rczpmdW5jdGlvbihF'@;
put 'KXtyZXR1cm5bXS5jb25jYXQuYXBwbHkoW10sRSl9fTtLLnNldFR5cGVkPWZ1bmN0aW9uKEUpe0U/KEsuQnVmOD1VaW50OEFycmF5LEsuQnVmMTY9VWludDE2QXJyYXksSy5CdWYzMj1JbnQzMkFycmF5LEsuYXNzaWduKEssSSkpOihLLkJ1Zjg9QXJyYXksSy5CdWYxNj1BcnJheSxLLkJ1ZjMy'@;
put 'PUFycmF5LEsuYXNzaWduKEssUikpfSxLLnNldFR5cGVkKEopfSx7fV0sMjg6W2Z1bmN0aW9uKEIsTCxLKXsidXNlIHN0cmljdCI7dmFyIEo9QigiLi9jb21tb24iKSxJPSEwLFI9ITA7dHJ5e1N0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxbMF0pfWNhdGNoe0k9ITF9dHJ5e1N0cmlu'@;
put 'Zy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxuZXcgVWludDhBcnJheSgxKSl9Y2F0Y2h7Uj0hMX1mb3IodmFyIEU9bmV3IEouQnVmOCgyNTYpLHo9MDt6PDI1Njt6KyspRVt6XT16Pj0yNTI/Njp6Pj0yNDg/NTp6Pj0yNDA/NDp6Pj0yMjQ/Mzp6Pj0xOTI/MjoxO2Z1bmN0aW9uIGooVixHKXtp'@;
put 'ZihHPDY1NTM3JiYoVi5zdWJhcnJheSYmUnx8IVYuc3ViYXJyYXkmJkkpKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsSi5zaHJpbmtCdWYoVixHKSk7Zm9yKHZhciBXPSIiLFU9MDtVPEc7VSsrKVcrPVN0cmluZy5mcm9tQ2hhckNvZGUoVltVXSk7cmV0dXJuIFd9RVsy'@;
put 'NTRdPUVbMjU0XT0xLEsuc3RyaW5nMmJ1Zj1mdW5jdGlvbihWKXt2YXIgRyxXLFUscSx0ZSxuZT1WLmxlbmd0aCxpZT0wO2ZvcihxPTA7cTxuZTtxKyspNTUyOTY9PSg2NDUxMiYoVz1WLmNoYXJDb2RlQXQocSkpKSYmcSsxPG5lJiY1NjMyMD09KDY0NTEyJihVPVYuY2hhckNvZGVBdChxKzEp'@;
put 'KSkmJihXPTY1NTM2KyhXLTU1Mjk2PDwxMCkrKFUtNTYzMjApLHErKyksaWUrPVc8MTI4PzE6VzwyMDQ4PzI6Vzw2NTUzNj8zOjQ7Zm9yKEc9bmV3IEouQnVmOChpZSksdGU9MCxxPTA7dGU8aWU7cSsrKTU1Mjk2PT0oNjQ1MTImKFc9Vi5jaGFyQ29kZUF0KHEpKSkmJnErMTxuZSYmNTYzMjA9'@;
put 'PSg2NDUxMiYoVT1WLmNoYXJDb2RlQXQocSsxKSkpJiYoVz02NTUzNisoVy01NTI5Njw8MTApKyhVLTU2MzIwKSxxKyspLFc8MTI4P0dbdGUrK109VzpXPDIwNDg/KEdbdGUrK109MTkyfFc+Pj42LEdbdGUrK109MTI4fDYzJlcpOlc8NjU1MzY/KEdbdGUrK109MjI0fFc+Pj4xMixHW3RlKytd'@;
put 'PTEyOHxXPj4+NiY2MyxHW3RlKytdPTEyOHw2MyZXKTooR1t0ZSsrXT0yNDB8Vz4+PjE4LEdbdGUrK109MTI4fFc+Pj4xMiY2MyxHW3RlKytdPTEyOHxXPj4+NiY2MyxHW3RlKytdPTEyOHw2MyZXKTtyZXR1cm4gR30sSy5idWYyYmluc3RyaW5nPWZ1bmN0aW9uKFYpe3JldHVybiBqKFYsVi5s'@;
put 'ZW5ndGgpfSxLLmJpbnN0cmluZzJidWY9ZnVuY3Rpb24oVil7Zm9yKHZhciBHPW5ldyBKLkJ1ZjgoVi5sZW5ndGgpLFc9MCxVPUcubGVuZ3RoO1c8VTtXKyspR1tXXT1WLmNoYXJDb2RlQXQoVyk7cmV0dXJuIEd9LEsuYnVmMnN0cmluZz1mdW5jdGlvbihWLEcpe3ZhciBXLFUscSx0ZSxuZT1H'@;
put 'fHxWLmxlbmd0aCxpZT1uZXcgQXJyYXkoMipuZSk7Zm9yKFU9MCxXPTA7VzxuZTspaWYoKHE9VltXKytdKTwxMjgpaWVbVSsrXT1xO2Vsc2UgaWYoKHRlPUVbcV0pPjQpaWVbVSsrXT02NTUzMyxXKz10ZS0xO2Vsc2V7Zm9yKHEmPTI9PT10ZT8zMTozPT09dGU/MTU6Nzt0ZT4xJiZXPG5lOylx'@;
put 'PXE8PDZ8NjMmVltXKytdLHRlLS07dGU+MT9pZVtVKytdPTY1NTMzOnE8NjU1MzY/aWVbVSsrXT1xOihpZVtVKytdPTU1Mjk2fChxLT02NTUzNik+PjEwJjEwMjMsaWVbVSsrXT01NjMyMHwxMDIzJnEpfXJldHVybiBqKGllLFUpfSxLLnV0Zjhib3JkZXI9ZnVuY3Rpb24oVixHKXt2YXIgVztm'@;
put 'b3IoKEc9R3x8Vi5sZW5ndGgpPlYubGVuZ3RoJiYoRz1WLmxlbmd0aCksVz1HLTE7Vz49MCYmMTI4PT0oMTkyJlZbV10pOylXLS07cmV0dXJuIFc8MHx8MD09PVc/RzpXK0VbVltXXV0+Rz9XOkd9fSx7Ii4vY29tbW9uIjoyN31dLDI5OltmdW5jdGlvbihCLEwsSyl7InVzZSBzdHJpY3QiO0wu'@;
put 'ZXhwb3J0cz1mdW5jdGlvbiBKKEksUixFLHope2Zvcih2YXIgaj02NTUzNSZJfDAsVj1JPj4+MTYmNjU1MzV8MCxHPTA7MCE9PUU7KXtFLT1HPUU+MmUzPzJlMzpFO2Rve1Y9Visoaj1qK1JbeisrXXwwKXwwfXdoaWxlKC0tRyk7aiU9NjU1MjEsViU9NjU1MjF9cmV0dXJuIGp8Vjw8MTZ8MH19'@;
put 'LHt9XSwzMDpbZnVuY3Rpb24oQixMLEspe0wuZXhwb3J0cz17Wl9OT19GTFVTSDowLFpfUEFSVElBTF9GTFVTSDoxLFpfU1lOQ19GTFVTSDoyLFpfRlVMTF9GTFVTSDozLFpfRklOSVNIOjQsWl9CTE9DSzo1LFpfVFJFRVM6NixaX09LOjAsWl9TVFJFQU1fRU5EOjEsWl9ORUVEX0RJQ1Q6Mixa'@;
put 'X0VSUk5POi0xLFpfU1RSRUFNX0VSUk9SOi0yLFpfREFUQV9FUlJPUjotMyxaX0JVRl9FUlJPUjotNSxaX05PX0NPTVBSRVNTSU9OOjAsWl9CRVNUX1NQRUVEOjEsWl9CRVNUX0NPTVBSRVNTSU9OOjksWl9ERUZBVUxUX0NPTVBSRVNTSU9OOi0xLFpfRklMVEVSRUQ6MSxaX0hVRkZNQU5fT05M'@;
put 'WToyLFpfUkxFOjMsWl9GSVhFRDo0LFpfREVGQVVMVF9TVFJBVEVHWTowLFpfQklOQVJZOjAsWl9URVhUOjEsWl9VTktOT1dOOjIsWl9ERUZMQVRFRDo4fX0se31dLDMxOltmdW5jdGlvbihCLEwsSyl7InVzZSBzdHJpY3QiO3ZhciBJPWZ1bmN0aW9uIEooKXtmb3IodmFyIEUsej1bXSxqPTA7'@;
put 'ajwyNTY7aisrKXtFPWo7Zm9yKHZhciBWPTA7Vjw4O1YrKylFPTEmRT8zOTg4MjkyMzg0XkU+Pj4xOkU+Pj4xO3pbal09RX1yZXR1cm4gen0oKTtMLmV4cG9ydHM9ZnVuY3Rpb24gUihFLHosaixWKXt2YXIgRz1JLFc9VitqO0VePS0xO2Zvcih2YXIgVT1WO1U8VztVKyspRT1FPj4+OF5HWzI1'@;
put 'NSYoRV56W1VdKV07cmV0dXJuLTFeRX19LHt9XSwzMjpbZnVuY3Rpb24oQixMLEspeyJ1c2Ugc3RyaWN0Ijt2YXIgSj1CKCIuLi91dGlscy9jb21tb24iKSxJPUIoIi4vdHJlZXMiKSxSPUIoIi4vYWRsZXIzMiIpLEU9QigiLi9jcmMzMiIpLHo9QigiLi9tZXNzYWdlcyIpLGo9MCxxPTAsbmU9'@;
put 'LTIsTj0yLEY9OCxTPTI4NixRPTMwLHJlPTE5LGZlPTIqUysxLG1lPTE1LGtlPTMsVGU9MjU4LFBlPVRlK2tlKzEsTmU9NDIsbXQ9MTEzO2Z1bmN0aW9uIHFlKG90LEl0KXtyZXR1cm4gb3QubXNnPXpbSXRdLEl0fWZ1bmN0aW9uIGh0KG90KXtyZXR1cm4ob3Q8PDEpLShvdD40Pzk6MCl9ZnVu'@;
put 'Y3Rpb24gRWUob3Qpe2Zvcih2YXIgSXQ9b3QubGVuZ3RoOy0tSXQ+PTA7KW90W0l0XT0wfWZ1bmN0aW9uIERlKG90KXt2YXIgSXQ9b3Quc3RhdGUsbm49SXQucGVuZGluZztubj5vdC5hdmFpbF9vdXQmJihubj1vdC5hdmFpbF9vdXQpLDAhPT1ubiYmKEouYXJyYXlTZXQob3Qub3V0cHV0LEl0'@;
put 'LnBlbmRpbmdfYnVmLEl0LnBlbmRpbmdfb3V0LG5uLG90Lm5leHRfb3V0KSxvdC5uZXh0X291dCs9bm4sSXQucGVuZGluZ19vdXQrPW5uLG90LnRvdGFsX291dCs9bm4sb3QuYXZhaWxfb3V0LT1ubixJdC5wZW5kaW5nLT1ubiwwPT09SXQucGVuZGluZyYmKEl0LnBlbmRpbmdfb3V0PTApKX1m'@;
put 'dW5jdGlvbiAkZShvdCxJdCl7SS5fdHJfZmx1c2hfYmxvY2sob3Qsb3QuYmxvY2tfc3RhcnQ+PTA/b3QuYmxvY2tfc3RhcnQ6LTEsb3Quc3Ryc3RhcnQtb3QuYmxvY2tfc3RhcnQsSXQpLG90LmJsb2NrX3N0YXJ0PW90LnN0cnN0YXJ0LERlKG90LnN0cm0pfWZ1bmN0aW9uIGF0KG90LEl0KXtv'@;
put 'dC5wZW5kaW5nX2J1ZltvdC5wZW5kaW5nKytdPUl0fWZ1bmN0aW9uIGN0KG90LEl0KXtvdC5wZW5kaW5nX2J1ZltvdC5wZW5kaW5nKytdPUl0Pj4+OCYyNTUsb3QucGVuZGluZ19idWZbb3QucGVuZGluZysrXT0yNTUmSXR9ZnVuY3Rpb24gT3Qob3QsSXQsbm4sRHQpe3ZhciB2dD1vdC5hdmFp'@;
put 'bF9pbjtyZXR1cm4gdnQ+RHQmJih2dD1EdCksMD09PXZ0PzA6KG90LmF2YWlsX2luLT12dCxKLmFycmF5U2V0KEl0LG90LmlucHV0LG90Lm5leHRfaW4sdnQsbm4pLDE9PT1vdC5zdGF0ZS53cmFwP290LmFkbGVyPVIob3QuYWRsZXIsSXQsdnQsbm4pOjI9PT1vdC5zdGF0ZS53cmFwJiYob3Qu'@;
put 'YWRsZXI9RShvdC5hZGxlcixJdCx2dCxubikpLG90Lm5leHRfaW4rPXZ0LG90LnRvdGFsX2luKz12dCx2dCl9ZnVuY3Rpb24gUHQob3QsSXQpe3ZhciB2dCxHdCxubj1vdC5tYXhfY2hhaW5fbGVuZ3RoLER0PW90LnN0cnN0YXJ0LExuPW90LnByZXZfbGVuZ3RoLHp0PW90Lm5pY2VfbWF0Y2gs'@;
put 'TW49b3Quc3Ryc3RhcnQ+b3Qud19zaXplLVBlP290LnN0cnN0YXJ0LShvdC53X3NpemUtUGUpOjAsVG49b3Qud2luZG93LHNuPW90LndfbWFzayxCbj1vdC5wcmV2LEZuPW90LnN0cnN0YXJ0K1RlLHF0PVRuW0R0K0xuLTFdLEhuPVRuW0R0K0xuXTtvdC5wcmV2X2xlbmd0aD49b3QuZ29vZF9t'@;
put 'YXRjaCYmKG5uPj49MiksenQ+b3QubG9va2FoZWFkJiYoenQ9b3QubG9va2FoZWFkKTtkb3tpZihUblsodnQ9SXQpK0xuXT09PUhuJiZUblt2dCtMbi0xXT09PXF0JiZUblt2dF09PT1UbltEdF0mJlRuWysrdnRdPT09VG5bRHQrMV0pe0R0Kz0yLHZ0Kys7ZG97fXdoaWxlKFRuWysrRHRdPT09'@;
put 'VG5bKyt2dF0mJlRuWysrRHRdPT09VG5bKyt2dF0mJlRuWysrRHRdPT09VG5bKyt2dF0mJlRuWysrRHRdPT09VG5bKyt2dF0mJlRuWysrRHRdPT09VG5bKyt2dF0mJlRuWysrRHRdPT09VG5bKyt2dF0mJlRuWysrRHRdPT09VG5bKyt2dF0mJlRuWysrRHRdPT09VG5bKyt2dF0mJkR0PEZuKTtp'@;
put 'ZihHdD1UZS0oRm4tRHQpLER0PUZuLVRlLEd0PkxuKXtpZihvdC5tYXRjaF9zdGFydD1JdCxMbj1HdCxHdD49enQpYnJlYWs7cXQ9VG5bRHQrTG4tMV0sSG49VG5bRHQrTG5dfX19d2hpbGUoKEl0PUJuW0l0JnNuXSk+TW4mJjAhPS0tbm4pO3JldHVybiBMbjw9b3QubG9va2FoZWFkP0xuOm90'@;
put 'Lmxvb2thaGVhZH1mdW5jdGlvbiBBdChvdCl7dmFyIG5uLER0LHZ0LEd0LExuLEl0PW90Lndfc2l6ZTtkb3tpZihHdD1vdC53aW5kb3dfc2l6ZS1vdC5sb29rYWhlYWQtb3Quc3Ryc3RhcnQsb3Quc3Ryc3RhcnQ+PUl0KyhJdC1QZSkpe0ouYXJyYXlTZXQob3Qud2luZG93LG90LndpbmRvdyxJ'@;
put 'dCxJdCwwKSxvdC5tYXRjaF9zdGFydC09SXQsb3Quc3Ryc3RhcnQtPUl0LG90LmJsb2NrX3N0YXJ0LT1JdCxubj1EdD1vdC5oYXNoX3NpemU7ZG97dnQ9b3QuaGVhZFstLW5uXSxvdC5oZWFkW25uXT12dD49SXQ/dnQtSXQ6MH13aGlsZSgtLUR0KTtubj1EdD1JdDtkb3t2dD1vdC5wcmV2Wy0t'@;
put 'bm5dLG90LnByZXZbbm5dPXZ0Pj1JdD92dC1JdDowfXdoaWxlKC0tRHQpO0d0Kz1JdH1pZigwPT09b3Quc3RybS5hdmFpbF9pbilicmVhaztpZihEdD1PdChvdC5zdHJtLG90LndpbmRvdyxvdC5zdHJzdGFydCtvdC5sb29rYWhlYWQsR3QpLG90Lmxvb2thaGVhZCs9RHQsb3QubG9va2FoZWFk'@;
put 'K290Lmluc2VydD49a2UpZm9yKG90Lmluc19oPW90LndpbmRvd1tMbj1vdC5zdHJzdGFydC1vdC5pbnNlcnRdLG90Lmluc19oPShvdC5pbnNfaDw8b3QuaGFzaF9zaGlmdF5vdC53aW5kb3dbTG4rMV0pJm90Lmhhc2hfbWFzaztvdC5pbnNlcnQmJihvdC5pbnNfaD0ob3QuaW5zX2g8PG90Lmhh'@;
put 'c2hfc2hpZnReb3Qud2luZG93W0xuK2tlLTFdKSZvdC5oYXNoX21hc2ssb3QucHJldltMbiZvdC53X21hc2tdPW90LmhlYWRbb3QuaW5zX2hdLG90LmhlYWRbb3QuaW5zX2hdPUxuLExuKyssb3QuaW5zZXJ0LS0sIShvdC5sb29rYWhlYWQrb3QuaW5zZXJ0PGtlKSk7KTt9d2hpbGUob3QubG9v'@;
put 'a2FoZWFkPFBlJiYwIT09b3Quc3RybS5hdmFpbF9pbil9ZnVuY3Rpb24gbW4ob3QsSXQpe2Zvcih2YXIgbm4sRHQ7Oyl7aWYob3QubG9va2FoZWFkPFBlKXtpZihBdChvdCksb3QubG9va2FoZWFkPFBlJiZJdD09PWopcmV0dXJuIDE7aWYoMD09PW90Lmxvb2thaGVhZClicmVha31pZihubj0w'@;
put 'LG90Lmxvb2thaGVhZD49a2UmJihvdC5pbnNfaD0ob3QuaW5zX2g8PG90Lmhhc2hfc2hpZnReb3Qud2luZG93W290LnN0cnN0YXJ0K2tlLTFdKSZvdC5oYXNoX21hc2ssbm49b3QucHJldltvdC5zdHJzdGFydCZvdC53X21hc2tdPW90LmhlYWRbb3QuaW5zX2hdLG90LmhlYWRbb3QuaW5zX2hd'@;
put 'PW90LnN0cnN0YXJ0KSwwIT09bm4mJm90LnN0cnN0YXJ0LW5uPD1vdC53X3NpemUtUGUmJihvdC5tYXRjaF9sZW5ndGg9UHQob3Qsbm4pKSxvdC5tYXRjaF9sZW5ndGg+PWtlKWlmKER0PUkuX3RyX3RhbGx5KG90LG90LnN0cnN0YXJ0LW90Lm1hdGNoX3N0YXJ0LG90Lm1hdGNoX2xlbmd0aC1r'@;
put 'ZSksb3QubG9va2FoZWFkLT1vdC5tYXRjaF9sZW5ndGgsb3QubWF0Y2hfbGVuZ3RoPD1vdC5tYXhfbGF6eV9tYXRjaCYmb3QubG9va2FoZWFkPj1rZSl7b3QubWF0Y2hfbGVuZ3RoLS07ZG97b3Quc3Ryc3RhcnQrKyxvdC5pbnNfaD0ob3QuaW5zX2g8PG90Lmhhc2hfc2hpZnReb3Qud2luZG93'@;
put 'W290LnN0cnN0YXJ0K2tlLTFdKSZvdC5oYXNoX21hc2ssbm49b3QucHJldltvdC5zdHJzdGFydCZvdC53X21hc2tdPW90LmhlYWRbb3QuaW5zX2hdLG90LmhlYWRbb3QuaW5zX2hdPW90LnN0cnN0YXJ0fXdoaWxlKDAhPS0tb3QubWF0Y2hfbGVuZ3RoKTtvdC5zdHJzdGFydCsrfWVsc2Ugb3Qu'@;
put 'c3Ryc3RhcnQrPW90Lm1hdGNoX2xlbmd0aCxvdC5tYXRjaF9sZW5ndGg9MCxvdC5pbnNfaD1vdC53aW5kb3dbb3Quc3Ryc3RhcnRdLG90Lmluc19oPShvdC5pbnNfaDw8b3QuaGFzaF9zaGlmdF5vdC53aW5kb3dbb3Quc3Ryc3RhcnQrMV0pJm90Lmhhc2hfbWFzaztlbHNlIER0PUkuX3RyX3Rh'@;
put 'bGx5KG90LDAsb3Qud2luZG93W290LnN0cnN0YXJ0XSksb3QubG9va2FoZWFkLS0sb3Quc3Ryc3RhcnQrKztpZihEdCYmKCRlKG90LCExKSwwPT09b3Quc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfXJldHVybiBvdC5pbnNlcnQ9b3Quc3Ryc3RhcnQ8a2UtMT9vdC5zdHJzdGFydDprZS0xLDQ9'@;
put 'PT1JdD8oJGUob3QsITApLDA9PT1vdC5zdHJtLmF2YWlsX291dD8zOjQpOm90Lmxhc3RfbGl0JiYoJGUob3QsITEpLDA9PT1vdC5zdHJtLmF2YWlsX291dCk/MToyfWZ1bmN0aW9uIE50KG90LEl0KXtmb3IodmFyIG5uLER0LHZ0Ozspe2lmKG90Lmxvb2thaGVhZDxQZSl7aWYoQXQob3QpLG90'@;
put 'Lmxvb2thaGVhZDxQZSYmSXQ9PT1qKXJldHVybiAxO2lmKDA9PT1vdC5sb29rYWhlYWQpYnJlYWt9aWYobm49MCxvdC5sb29rYWhlYWQ+PWtlJiYob3QuaW5zX2g9KG90Lmluc19oPDxvdC5oYXNoX3NoaWZ0Xm90LndpbmRvd1tvdC5zdHJzdGFydCtrZS0xXSkmb3QuaGFzaF9tYXNrLG5uPW90'@;
put 'LnByZXZbb3Quc3Ryc3RhcnQmb3Qud19tYXNrXT1vdC5oZWFkW290Lmluc19oXSxvdC5oZWFkW290Lmluc19oXT1vdC5zdHJzdGFydCksb3QucHJldl9sZW5ndGg9b3QubWF0Y2hfbGVuZ3RoLG90LnByZXZfbWF0Y2g9b3QubWF0Y2hfc3RhcnQsb3QubWF0Y2hfbGVuZ3RoPWtlLTEsMCE9PW5u'@;
put 'JiZvdC5wcmV2X2xlbmd0aDxvdC5tYXhfbGF6eV9tYXRjaCYmb3Quc3Ryc3RhcnQtbm48PW90Lndfc2l6ZS1QZSYmKG90Lm1hdGNoX2xlbmd0aD1QdChvdCxubiksb3QubWF0Y2hfbGVuZ3RoPD01JiYoMT09PW90LnN0cmF0ZWd5fHxvdC5tYXRjaF9sZW5ndGg9PT1rZSYmb3Quc3Ryc3RhcnQt'@;
put 'b3QubWF0Y2hfc3RhcnQ+NDA5NikmJihvdC5tYXRjaF9sZW5ndGg9a2UtMSkpLG90LnByZXZfbGVuZ3RoPj1rZSYmb3QubWF0Y2hfbGVuZ3RoPD1vdC5wcmV2X2xlbmd0aCl7dnQ9b3Quc3Ryc3RhcnQrb3QubG9va2FoZWFkLWtlLER0PUkuX3RyX3RhbGx5KG90LG90LnN0cnN0YXJ0LTEtb3Qu'@;
put 'cHJldl9tYXRjaCxvdC5wcmV2X2xlbmd0aC1rZSksb3QubG9va2FoZWFkLT1vdC5wcmV2X2xlbmd0aC0xLG90LnByZXZfbGVuZ3RoLT0yO2Rveysrb3Quc3Ryc3RhcnQ8PXZ0JiYob3QuaW5zX2g9KG90Lmluc19oPDxvdC5oYXNoX3NoaWZ0Xm90LndpbmRvd1tvdC5zdHJzdGFydCtrZS0xXSkm'@;
put 'b3QuaGFzaF9tYXNrLG5uPW90LnByZXZbb3Quc3Ryc3RhcnQmb3Qud19tYXNrXT1vdC5oZWFkW290Lmluc19oXSxvdC5oZWFkW290Lmluc19oXT1vdC5zdHJzdGFydCl9d2hpbGUoMCE9LS1vdC5wcmV2X2xlbmd0aCk7aWYob3QubWF0Y2hfYXZhaWxhYmxlPTAsb3QubWF0Y2hfbGVuZ3RoPWtl'@;
put 'LTEsb3Quc3Ryc3RhcnQrKyxEdCYmKCRlKG90LCExKSwwPT09b3Quc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfWVsc2UgaWYob3QubWF0Y2hfYXZhaWxhYmxlKXtpZigoRHQ9SS5fdHJfdGFsbHkob3QsMCxvdC53aW5kb3dbb3Quc3Ryc3RhcnQtMV0pKSYmJGUob3QsITEpLG90LnN0cnN0YXJ0'@;
put 'Kyssb3QubG9va2FoZWFkLS0sMD09PW90LnN0cm0uYXZhaWxfb3V0KXJldHVybiAxfWVsc2Ugb3QubWF0Y2hfYXZhaWxhYmxlPTEsb3Quc3Ryc3RhcnQrKyxvdC5sb29rYWhlYWQtLX1yZXR1cm4gb3QubWF0Y2hfYXZhaWxhYmxlJiYoRHQ9SS5fdHJfdGFsbHkob3QsMCxvdC53aW5kb3dbb3Qu'@;
put 'c3Ryc3RhcnQtMV0pLG90Lm1hdGNoX2F2YWlsYWJsZT0wKSxvdC5pbnNlcnQ9b3Quc3Ryc3RhcnQ8a2UtMT9vdC5zdHJzdGFydDprZS0xLDQ9PT1JdD8oJGUob3QsITApLDA9PT1vdC5zdHJtLmF2YWlsX291dD8zOjQpOm90Lmxhc3RfbGl0JiYoJGUob3QsITEpLDA9PT1vdC5zdHJtLmF2YWls'@;
put 'X291dCk/MToyfXZhciAkbixvbj1mdW5jdGlvbihvdCxJdCxubixEdCx2dCl7dGhpcy5nb29kX2xlbmd0aD1vdCx0aGlzLm1heF9sYXp5PUl0LHRoaXMubmljZV9sZW5ndGg9bm4sdGhpcy5tYXhfY2hhaW49RHQsdGhpcy5mdW5jPXZ0fTtmdW5jdGlvbiBwdCgpe3RoaXMuc3RybT1udWxsLHRo'@;
put 'aXMuc3RhdHVzPTAsdGhpcy5wZW5kaW5nX2J1Zj1udWxsLHRoaXMucGVuZGluZ19idWZfc2l6ZT0wLHRoaXMucGVuZGluZ19vdXQ9MCx0aGlzLnBlbmRpbmc9MCx0aGlzLndyYXA9MCx0aGlzLmd6aGVhZD1udWxsLHRoaXMuZ3ppbmRleD0wLHRoaXMubWV0aG9kPUYsdGhpcy5sYXN0X2ZsdXNo'@;
put 'PS0xLHRoaXMud19zaXplPTAsdGhpcy53X2JpdHM9MCx0aGlzLndfbWFzaz0wLHRoaXMud2luZG93PW51bGwsdGhpcy53aW5kb3dfc2l6ZT0wLHRoaXMucHJldj1udWxsLHRoaXMuaGVhZD1udWxsLHRoaXMuaW5zX2g9MCx0aGlzLmhhc2hfc2l6ZT0wLHRoaXMuaGFzaF9iaXRzPTAsdGhpcy5o'@;
put 'YXNoX21hc2s9MCx0aGlzLmhhc2hfc2hpZnQ9MCx0aGlzLmJsb2NrX3N0YXJ0PTAsdGhpcy5tYXRjaF9sZW5ndGg9MCx0aGlzLnByZXZfbWF0Y2g9MCx0aGlzLm1hdGNoX2F2YWlsYWJsZT0wLHRoaXMuc3Ryc3RhcnQ9MCx0aGlzLm1hdGNoX3N0YXJ0PTAsdGhpcy5sb29rYWhlYWQ9MCx0aGlz'@;
put 'LnByZXZfbGVuZ3RoPTAsdGhpcy5tYXhfY2hhaW5fbGVuZ3RoPTAsdGhpcy5tYXhfbGF6eV9tYXRjaD0wLHRoaXMubGV2ZWw9MCx0aGlzLnN0cmF0ZWd5PTAsdGhpcy5nb29kX21hdGNoPTAsdGhpcy5uaWNlX21hdGNoPTAsdGhpcy5keW5fbHRyZWU9bmV3IEouQnVmMTYoMipmZSksdGhpcy5k'@;
put 'eW5fZHRyZWU9bmV3IEouQnVmMTYoMiooMipRKzEpKSx0aGlzLmJsX3RyZWU9bmV3IEouQnVmMTYoMiooMipyZSsxKSksRWUodGhpcy5keW5fbHRyZWUpLEVlKHRoaXMuZHluX2R0cmVlKSxFZSh0aGlzLmJsX3RyZWUpLHRoaXMubF9kZXNjPW51bGwsdGhpcy5kX2Rlc2M9bnVsbCx0aGlzLmJs'@;
put 'X2Rlc2M9bnVsbCx0aGlzLmJsX2NvdW50PW5ldyBKLkJ1ZjE2KG1lKzEpLHRoaXMuaGVhcD1uZXcgSi5CdWYxNigyKlMrMSksRWUodGhpcy5oZWFwKSx0aGlzLmhlYXBfbGVuPTAsdGhpcy5oZWFwX21heD0wLHRoaXMuZGVwdGg9bmV3IEouQnVmMTYoMipTKzEpLEVlKHRoaXMuZGVwdGgpLHRo'@;
put 'aXMubF9idWY9MCx0aGlzLmxpdF9idWZzaXplPTAsdGhpcy5sYXN0X2xpdD0wLHRoaXMuZF9idWY9MCx0aGlzLm9wdF9sZW49MCx0aGlzLnN0YXRpY19sZW49MCx0aGlzLm1hdGNoZXM9MCx0aGlzLmluc2VydD0wLHRoaXMuYmlfYnVmPTAsdGhpcy5iaV92YWxpZD0wfWZ1bmN0aW9uIHBuKG90'@;
put 'KXt2YXIgSXQ7cmV0dXJuIG90JiZvdC5zdGF0ZT8ob3QudG90YWxfaW49b3QudG90YWxfb3V0PTAsb3QuZGF0YV90eXBlPU4sKEl0PW90LnN0YXRlKS5wZW5kaW5nPTAsSXQucGVuZGluZ19vdXQ9MCxJdC53cmFwPDAmJihJdC53cmFwPS1JdC53cmFwKSxJdC5zdGF0dXM9SXQud3JhcD9OZTpt'@;
put 'dCxvdC5hZGxlcj0yPT09SXQud3JhcD8wOjEsSXQubGFzdF9mbHVzaD1qLEkuX3RyX2luaXQoSXQpLHEpOnFlKG90LG5lKX1mdW5jdGlvbiBobihvdCl7dmFyIEl0PXBuKG90KTtyZXR1cm4gSXQ9PT1xJiZmdW5jdGlvbiBObihvdCl7b3Qud2luZG93X3NpemU9MipvdC53X3NpemUsRWUob3Qu'@;
put 'aGVhZCksb3QubWF4X2xhenlfbWF0Y2g9JG5bb3QubGV2ZWxdLm1heF9sYXp5LG90Lmdvb2RfbWF0Y2g9JG5bb3QubGV2ZWxdLmdvb2RfbGVuZ3RoLG90Lm5pY2VfbWF0Y2g9JG5bb3QubGV2ZWxdLm5pY2VfbGVuZ3RoLG90Lm1heF9jaGFpbl9sZW5ndGg9JG5bb3QubGV2ZWxdLm1heF9jaGFp'@;
put 'bixvdC5zdHJzdGFydD0wLG90LmJsb2NrX3N0YXJ0PTAsb3QubG9va2FoZWFkPTAsb3QuaW5zZXJ0PTAsb3QubWF0Y2hfbGVuZ3RoPW90LnByZXZfbGVuZ3RoPWtlLTEsb3QubWF0Y2hfYXZhaWxhYmxlPTAsb3QuaW5zX2g9MH0ob3Quc3RhdGUpLEl0fWZ1bmN0aW9uIGVuKG90LEl0LG5uLER0'@;
put 'LHZ0LEd0KXtpZighb3QpcmV0dXJuIG5lO3ZhciBMbj0xO2lmKC0xPT09SXQmJihJdD02KSxEdDwwPyhMbj0wLER0PS1EdCk6RHQ+MTUmJihMbj0yLER0LT0xNiksdnQ8MXx8dnQ+OXx8bm4hPT1GfHxEdDw4fHxEdD4xNXx8SXQ8MHx8SXQ+OXx8R3Q8MHx8R3Q+NClyZXR1cm4gcWUob3QsbmUp'@;
put 'Ozg9PT1EdCYmKER0PTkpO3ZhciB6dD1uZXcgcHQ7cmV0dXJuIG90LnN0YXRlPXp0LHp0LnN0cm09b3QsenQud3JhcD1Mbix6dC5nemhlYWQ9bnVsbCx6dC53X2JpdHM9RHQsenQud19zaXplPTE8PHp0LndfYml0cyx6dC53X21hc2s9enQud19zaXplLTEsenQuaGFzaF9iaXRzPXZ0KzcsenQu'@;
put 'aGFzaF9zaXplPTE8PHp0Lmhhc2hfYml0cyx6dC5oYXNoX21hc2s9enQuaGFzaF9zaXplLTEsenQuaGFzaF9zaGlmdD1+figoenQuaGFzaF9iaXRzK2tlLTEpL2tlKSx6dC53aW5kb3c9bmV3IEouQnVmOCgyKnp0Lndfc2l6ZSksenQuaGVhZD1uZXcgSi5CdWYxNih6dC5oYXNoX3NpemUpLHp0'@;
put 'LnByZXY9bmV3IEouQnVmMTYoenQud19zaXplKSx6dC5saXRfYnVmc2l6ZT0xPDx2dCs2LHp0LnBlbmRpbmdfYnVmX3NpemU9NCp6dC5saXRfYnVmc2l6ZSx6dC5wZW5kaW5nX2J1Zj1uZXcgSi5CdWY4KHp0LnBlbmRpbmdfYnVmX3NpemUpLHp0LmRfYnVmPXp0LmxpdF9idWZzaXplPj4xLHp0'@;
put 'LmxfYnVmPTMqenQubGl0X2J1ZnNpemUsenQubGV2ZWw9SXQsenQuc3RyYXRlZ3k9R3QsenQubWV0aG9kPW5uLGhuKG90KX0kbj1bbmV3IG9uKDAsMCwwLDAsZnVuY3Rpb24gSnQob3QsSXQpe3ZhciBubj02NTUzNTtmb3Iobm4+b3QucGVuZGluZ19idWZfc2l6ZS01JiYobm49b3QucGVuZGlu'@;
put 'Z19idWZfc2l6ZS01KTs7KXtpZihvdC5sb29rYWhlYWQ8PTEpe2lmKEF0KG90KSwwPT09b3QubG9va2FoZWFkJiZJdD09PWopcmV0dXJuIDE7aWYoMD09PW90Lmxvb2thaGVhZClicmVha31vdC5zdHJzdGFydCs9b3QubG9va2FoZWFkLG90Lmxvb2thaGVhZD0wO3ZhciBEdD1vdC5ibG9ja19z'@;
put 'dGFydCtubjtpZigoMD09PW90LnN0cnN0YXJ0fHxvdC5zdHJzdGFydD49RHQpJiYob3QubG9va2FoZWFkPW90LnN0cnN0YXJ0LUR0LG90LnN0cnN0YXJ0PUR0LCRlKG90LCExKSwwPT09b3Quc3RybS5hdmFpbF9vdXQpfHxvdC5zdHJzdGFydC1vdC5ibG9ja19zdGFydD49b3Qud19zaXplLVBl'@;
put 'JiYoJGUob3QsITEpLDA9PT1vdC5zdHJtLmF2YWlsX291dCkpcmV0dXJuIDF9cmV0dXJuIG90Lmluc2VydD0wLDQ9PT1JdD8oJGUob3QsITApLDA9PT1vdC5zdHJtLmF2YWlsX291dD8zOjQpOihvdC5zdHJzdGFydD5vdC5ibG9ja19zdGFydCYmJGUob3QsITEpLDEpfSksbmV3IG9uKDQsNCw4'@;
put 'LDQsbW4pLG5ldyBvbig0LDUsMTYsOCxtbiksbmV3IG9uKDQsNiwzMiwzMixtbiksbmV3IG9uKDQsNCwxNiwxNixOdCksbmV3IG9uKDgsMTYsMzIsMzIsTnQpLG5ldyBvbig4LDE2LDEyOCwxMjgsTnQpLG5ldyBvbig4LDMyLDEyOCwyNTYsTnQpLG5ldyBvbigzMiwxMjgsMjU4LDEwMjQsTnQp'@;
put 'LG5ldyBvbigzMiwyNTgsMjU4LDQwOTYsTnQpXSxLLmRlZmxhdGVJbml0PWZ1bmN0aW9uIF90KG90LEl0KXtyZXR1cm4gZW4ob3QsSXQsRiwxNSw4LDApfSxLLmRlZmxhdGVJbml0Mj1lbixLLmRlZmxhdGVSZXNldD1obixLLmRlZmxhdGVSZXNldEtlZXA9cG4sSy5kZWZsYXRlU2V0SGVhZGVy'@;
put 'PWZ1bmN0aW9uIEN0KG90LEl0KXtyZXR1cm4gb3QmJm90LnN0YXRlJiYyPT09b3Quc3RhdGUud3JhcD8ob3Quc3RhdGUuZ3poZWFkPUl0LHEpOm5lfSxLLmRlZmxhdGU9ZnVuY3Rpb24gVnQob3QsSXQpe3ZhciBubixEdCx2dCxHdDtpZighb3R8fCFvdC5zdGF0ZXx8SXQ+NXx8SXQ8MClyZXR1'@;
put 'cm4gb3Q/cWUob3QsbmUpOm5lO2lmKER0PW90LnN0YXRlLCFvdC5vdXRwdXR8fCFvdC5pbnB1dCYmMCE9PW90LmF2YWlsX2lufHw2NjY9PT1EdC5zdGF0dXMmJjQhPT1JdClyZXR1cm4gcWUob3QsMD09PW90LmF2YWlsX291dD8tNTpuZSk7aWYoRHQuc3RybT1vdCxubj1EdC5sYXN0X2ZsdXNo'@;
put 'LER0Lmxhc3RfZmx1c2g9SXQsRHQuc3RhdHVzPT09TmUpaWYoMj09PUR0LndyYXApb3QuYWRsZXI9MCxhdChEdCwzMSksYXQoRHQsMTM5KSxhdChEdCw4KSxEdC5nemhlYWQ/KGF0KER0LChEdC5nemhlYWQudGV4dD8xOjApKyhEdC5nemhlYWQuaGNyYz8yOjApKyhEdC5nemhlYWQuZXh0cmE/'@;
put 'NDowKSsoRHQuZ3poZWFkLm5hbWU/ODowKSsoRHQuZ3poZWFkLmNvbW1lbnQ/MTY6MCkpLGF0KER0LDI1NSZEdC5nemhlYWQudGltZSksYXQoRHQsRHQuZ3poZWFkLnRpbWU+PjgmMjU1KSxhdChEdCxEdC5nemhlYWQudGltZT4+MTYmMjU1KSxhdChEdCxEdC5nemhlYWQudGltZT4+MjQmMjU1'@;
put 'KSxhdChEdCw5PT09RHQubGV2ZWw/MjpEdC5zdHJhdGVneT49Mnx8RHQubGV2ZWw8Mj80OjApLGF0KER0LDI1NSZEdC5nemhlYWQub3MpLER0Lmd6aGVhZC5leHRyYSYmRHQuZ3poZWFkLmV4dHJhLmxlbmd0aCYmKGF0KER0LDI1NSZEdC5nemhlYWQuZXh0cmEubGVuZ3RoKSxhdChEdCxEdC5n'@;
put 'emhlYWQuZXh0cmEubGVuZ3RoPj44JjI1NSkpLER0Lmd6aGVhZC5oY3JjJiYob3QuYWRsZXI9RShvdC5hZGxlcixEdC5wZW5kaW5nX2J1ZixEdC5wZW5kaW5nLDApKSxEdC5nemluZGV4PTAsRHQuc3RhdHVzPTY5KTooYXQoRHQsMCksYXQoRHQsMCksYXQoRHQsMCksYXQoRHQsMCksYXQoRHQs'@;
put 'MCksYXQoRHQsOT09PUR0LmxldmVsPzI6RHQuc3RyYXRlZ3k+PTJ8fER0LmxldmVsPDI/NDowKSxhdChEdCwzKSxEdC5zdGF0dXM9bXQpO2Vsc2V7dmFyIExuPUYrKER0LndfYml0cy04PDw0KTw8ODtMbnw9KER0LnN0cmF0ZWd5Pj0yfHxEdC5sZXZlbDwyPzA6RHQubGV2ZWw8Nj8xOjY9PT1E'@;
put 'dC5sZXZlbD8yOjMpPDw2LDAhPT1EdC5zdHJzdGFydCYmKExufD0zMiksTG4rPTMxLUxuJTMxLER0LnN0YXR1cz1tdCxjdChEdCxMbiksMCE9PUR0LnN0cnN0YXJ0JiYoY3QoRHQsb3QuYWRsZXI+Pj4xNiksY3QoRHQsNjU1MzUmb3QuYWRsZXIpKSxvdC5hZGxlcj0xfWlmKDY5PT09RHQuc3Rh'@;
put 'dHVzKWlmKER0Lmd6aGVhZC5leHRyYSl7Zm9yKHZ0PUR0LnBlbmRpbmc7RHQuZ3ppbmRleDwoNjU1MzUmRHQuZ3poZWFkLmV4dHJhLmxlbmd0aCkmJihEdC5wZW5kaW5nIT09RHQucGVuZGluZ19idWZfc2l6ZXx8KER0Lmd6aGVhZC5oY3JjJiZEdC5wZW5kaW5nPnZ0JiYob3QuYWRsZXI9RShv'@;
put 'dC5hZGxlcixEdC5wZW5kaW5nX2J1ZixEdC5wZW5kaW5nLXZ0LHZ0KSksRGUob3QpLHZ0PUR0LnBlbmRpbmcsRHQucGVuZGluZyE9PUR0LnBlbmRpbmdfYnVmX3NpemUpKTspYXQoRHQsMjU1JkR0Lmd6aGVhZC5leHRyYVtEdC5nemluZGV4XSksRHQuZ3ppbmRleCsrO0R0Lmd6aGVhZC5oY3Jj'@;
put 'JiZEdC5wZW5kaW5nPnZ0JiYob3QuYWRsZXI9RShvdC5hZGxlcixEdC5wZW5kaW5nX2J1ZixEdC5wZW5kaW5nLXZ0LHZ0KSksRHQuZ3ppbmRleD09PUR0Lmd6aGVhZC5leHRyYS5sZW5ndGgmJihEdC5nemluZGV4PTAsRHQuc3RhdHVzPTczKX1lbHNlIER0LnN0YXR1cz03MztpZig3Mz09PUR0'@;
put 'LnN0YXR1cylpZihEdC5nemhlYWQubmFtZSl7dnQ9RHQucGVuZGluZztkb3tpZihEdC5wZW5kaW5nPT09RHQucGVuZGluZ19idWZfc2l6ZSYmKER0Lmd6aGVhZC5oY3JjJiZEdC5wZW5kaW5nPnZ0JiYob3QuYWRsZXI9RShvdC5hZGxlcixEdC5wZW5kaW5nX2J1ZixEdC5wZW5kaW5nLXZ0LHZ0'@;
put 'KSksRGUob3QpLHZ0PUR0LnBlbmRpbmcsRHQucGVuZGluZz09PUR0LnBlbmRpbmdfYnVmX3NpemUpKXtHdD0xO2JyZWFrfUd0PUR0Lmd6aW5kZXg8RHQuZ3poZWFkLm5hbWUubGVuZ3RoPzI1NSZEdC5nemhlYWQubmFtZS5jaGFyQ29kZUF0KER0Lmd6aW5kZXgrKyk6MCxhdChEdCxHdCl9d2hp'@;
put 'bGUoMCE9PUd0KTtEdC5nemhlYWQuaGNyYyYmRHQucGVuZGluZz52dCYmKG90LmFkbGVyPUUob3QuYWRsZXIsRHQucGVuZGluZ19idWYsRHQucGVuZGluZy12dCx2dCkpLDA9PT1HdCYmKER0Lmd6aW5kZXg9MCxEdC5zdGF0dXM9OTEpfWVsc2UgRHQuc3RhdHVzPTkxO2lmKDkxPT09RHQuc3Rh'@;
put 'dHVzKWlmKER0Lmd6aGVhZC5jb21tZW50KXt2dD1EdC5wZW5kaW5nO2Rve2lmKER0LnBlbmRpbmc9PT1EdC5wZW5kaW5nX2J1Zl9zaXplJiYoRHQuZ3poZWFkLmhjcmMmJkR0LnBlbmRpbmc+dnQmJihvdC5hZGxlcj1FKG90LmFkbGVyLER0LnBlbmRpbmdfYnVmLER0LnBlbmRpbmctdnQsdnQp'@;
put 'KSxEZShvdCksdnQ9RHQucGVuZGluZyxEdC5wZW5kaW5nPT09RHQucGVuZGluZ19idWZfc2l6ZSkpe0d0PTE7YnJlYWt9R3Q9RHQuZ3ppbmRleDxEdC5nemhlYWQuY29tbWVudC5sZW5ndGg/MjU1JkR0Lmd6aGVhZC5jb21tZW50LmNoYXJDb2RlQXQoRHQuZ3ppbmRleCsrKTowLGF0KER0LEd0'@;
put 'KX13aGlsZSgwIT09R3QpO0R0Lmd6aGVhZC5oY3JjJiZEdC5wZW5kaW5nPnZ0JiYob3QuYWRsZXI9RShvdC5hZGxlcixEdC5wZW5kaW5nX2J1ZixEdC5wZW5kaW5nLXZ0LHZ0KSksMD09PUd0JiYoRHQuc3RhdHVzPTEwMyl9ZWxzZSBEdC5zdGF0dXM9MTAzO2lmKDEwMz09PUR0LnN0YXR1cyYm'@;
put 'KER0Lmd6aGVhZC5oY3JjPyhEdC5wZW5kaW5nKzI+RHQucGVuZGluZ19idWZfc2l6ZSYmRGUob3QpLER0LnBlbmRpbmcrMjw9RHQucGVuZGluZ19idWZfc2l6ZSYmKGF0KER0LDI1NSZvdC5hZGxlciksYXQoRHQsb3QuYWRsZXI+PjgmMjU1KSxvdC5hZGxlcj0wLER0LnN0YXR1cz1tdCkpOkR0'@;
put 'LnN0YXR1cz1tdCksMCE9PUR0LnBlbmRpbmcpe2lmKERlKG90KSwwPT09b3QuYXZhaWxfb3V0KXJldHVybiBEdC5sYXN0X2ZsdXNoPS0xLHF9ZWxzZSBpZigwPT09b3QuYXZhaWxfaW4mJmh0KEl0KTw9aHQobm4pJiY0IT09SXQpcmV0dXJuIHFlKG90LC01KTtpZig2NjY9PT1EdC5zdGF0dXMm'@;
put 'JjAhPT1vdC5hdmFpbF9pbilyZXR1cm4gcWUob3QsLTUpO2lmKDAhPT1vdC5hdmFpbF9pbnx8MCE9PUR0Lmxvb2thaGVhZHx8SXQhPT1qJiY2NjYhPT1EdC5zdGF0dXMpe3ZhciBNbj0yPT09RHQuc3RyYXRlZ3k/ZnVuY3Rpb24gR24ob3QsSXQpe2Zvcih2YXIgbm47Oyl7aWYoMD09PW90Lmxv'@;
put 'b2thaGVhZCYmKEF0KG90KSwwPT09b3QubG9va2FoZWFkKSl7aWYoSXQ9PT1qKXJldHVybiAxO2JyZWFrfWlmKG90Lm1hdGNoX2xlbmd0aD0wLG5uPUkuX3RyX3RhbGx5KG90LDAsb3Qud2luZG93W290LnN0cnN0YXJ0XSksb3QubG9va2FoZWFkLS0sb3Quc3Ryc3RhcnQrKyxubiYmKCRlKG90'@;
put 'LCExKSwwPT09b3Quc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfXJldHVybiBvdC5pbnNlcnQ9MCw0PT09SXQ/KCRlKG90LCEwKSwwPT09b3Quc3RybS5hdmFpbF9vdXQ/Mzo0KTpvdC5sYXN0X2xpdCYmKCRlKG90LCExKSwwPT09b3Quc3RybS5hdmFpbF9vdXQpPzE6Mn0oRHQsSXQpOjM9PT1E'@;
put 'dC5zdHJhdGVneT9mdW5jdGlvbiBibihvdCxJdCl7Zm9yKHZhciBubixEdCx2dCxHdCxMbj1vdC53aW5kb3c7Oyl7aWYob3QubG9va2FoZWFkPD1UZSl7aWYoQXQob3QpLG90Lmxvb2thaGVhZDw9VGUmJkl0PT09ailyZXR1cm4gMTtpZigwPT09b3QubG9va2FoZWFkKWJyZWFrfWlmKG90Lm1h'@;
put 'dGNoX2xlbmd0aD0wLG90Lmxvb2thaGVhZD49a2UmJm90LnN0cnN0YXJ0PjAmJihEdD1Mblt2dD1vdC5zdHJzdGFydC0xXSk9PT1MblsrK3Z0XSYmRHQ9PT1MblsrK3Z0XSYmRHQ9PT1MblsrK3Z0XSl7R3Q9b3Quc3Ryc3RhcnQrVGU7ZG97fXdoaWxlKER0PT09TG5bKyt2dF0mJkR0PT09TG5b'@;
put 'Kyt2dF0mJkR0PT09TG5bKyt2dF0mJkR0PT09TG5bKyt2dF0mJkR0PT09TG5bKyt2dF0mJkR0PT09TG5bKyt2dF0mJkR0PT09TG5bKyt2dF0mJkR0PT09TG5bKyt2dF0mJnZ0PEd0KTtvdC5tYXRjaF9sZW5ndGg9VGUtKEd0LXZ0KSxvdC5tYXRjaF9sZW5ndGg+b3QubG9va2FoZWFkJiYob3Qu'@;
put 'bWF0Y2hfbGVuZ3RoPW90Lmxvb2thaGVhZCl9aWYob3QubWF0Y2hfbGVuZ3RoPj1rZT8obm49SS5fdHJfdGFsbHkob3QsMSxvdC5tYXRjaF9sZW5ndGgta2UpLG90Lmxvb2thaGVhZC09b3QubWF0Y2hfbGVuZ3RoLG90LnN0cnN0YXJ0Kz1vdC5tYXRjaF9sZW5ndGgsb3QubWF0Y2hfbGVuZ3Ro'@;
put 'PTApOihubj1JLl90cl90YWxseShvdCwwLG90LndpbmRvd1tvdC5zdHJzdGFydF0pLG90Lmxvb2thaGVhZC0tLG90LnN0cnN0YXJ0KyspLG5uJiYoJGUob3QsITEpLDA9PT1vdC5zdHJtLmF2YWlsX291dCkpcmV0dXJuIDF9cmV0dXJuIG90Lmluc2VydD0wLDQ9PT1JdD8oJGUob3QsITApLDA9'@;
put 'PT1vdC5zdHJtLmF2YWlsX291dD8zOjQpOm90Lmxhc3RfbGl0JiYoJGUob3QsITEpLDA9PT1vdC5zdHJtLmF2YWlsX291dCk/MToyfShEdCxJdCk6JG5bRHQubGV2ZWxdLmZ1bmMoRHQsSXQpO2lmKCgzPT09TW58fDQ9PT1NbikmJihEdC5zdGF0dXM9NjY2KSwxPT09TW58fDM9PT1NbilyZXR1'@;
put 'cm4gMD09PW90LmF2YWlsX291dCYmKER0Lmxhc3RfZmx1c2g9LTEpLHE7aWYoMj09PU1uJiYoMT09PUl0P0kuX3RyX2FsaWduKER0KTo1IT09SXQmJihJLl90cl9zdG9yZWRfYmxvY2soRHQsMCwwLCExKSwzPT09SXQmJihFZShEdC5oZWFkKSwwPT09RHQubG9va2FoZWFkJiYoRHQuc3Ryc3Rh'@;
put 'cnQ9MCxEdC5ibG9ja19zdGFydD0wLER0Lmluc2VydD0wKSkpLERlKG90KSwwPT09b3QuYXZhaWxfb3V0KSlyZXR1cm4gRHQubGFzdF9mbHVzaD0tMSxxfXJldHVybiA0IT09SXQ/cTpEdC53cmFwPD0wPzE6KDI9PT1EdC53cmFwPyhhdChEdCwyNTUmb3QuYWRsZXIpLGF0KER0LG90LmFkbGVy'@;
put 'Pj44JjI1NSksYXQoRHQsb3QuYWRsZXI+PjE2JjI1NSksYXQoRHQsb3QuYWRsZXI+PjI0JjI1NSksYXQoRHQsMjU1Jm90LnRvdGFsX2luKSxhdChEdCxvdC50b3RhbF9pbj4+OCYyNTUpLGF0KER0LG90LnRvdGFsX2luPj4xNiYyNTUpLGF0KER0LG90LnRvdGFsX2luPj4yNCYyNTUpKTooY3Qo'@;
put 'RHQsb3QuYWRsZXI+Pj4xNiksY3QoRHQsNjU1MzUmb3QuYWRsZXIpKSxEZShvdCksRHQud3JhcD4wJiYoRHQud3JhcD0tRHQud3JhcCksMCE9PUR0LnBlbmRpbmc/cToxKX0sSy5kZWZsYXRlRW5kPWZ1bmN0aW9uIF9uKG90KXt2YXIgSXQ7cmV0dXJuIG90JiZvdC5zdGF0ZT8oSXQ9b3Quc3Rh'@;
put 'dGUuc3RhdHVzKSE9PU5lJiY2OSE9PUl0JiY3MyE9PUl0JiY5MSE9PUl0JiYxMDMhPT1JdCYmSXQhPT1tdCYmNjY2IT09SXQ/cWUob3QsbmUpOihvdC5zdGF0ZT1udWxsLEl0PT09bXQ/cWUob3QsLTMpOnEpOm5lfSxLLmRlZmxhdGVJbmZvPSJwYWtvIGRlZmxhdGUgKGZyb20gTm9kZWNhIHBy'@;
put 'b2plY3QpIn0seyIuLi91dGlscy9jb21tb24iOjI3LCIuL2FkbGVyMzIiOjI5LCIuL2NyYzMyIjozMSwiLi9tZXNzYWdlcyI6MzcsIi4vdHJlZXMiOjM4fV0sMzM6W2Z1bmN0aW9uKEIsTCxLKXsidXNlIHN0cmljdCI7TC5leHBvcnRzPWZ1bmN0aW9uIEooKXt0aGlzLnRleHQ9MCx0aGlzLnRp'@;
put 'bWU9MCx0aGlzLnhmbGFncz0wLHRoaXMub3M9MCx0aGlzLmV4dHJhPW51bGwsdGhpcy5leHRyYV9sZW49MCx0aGlzLm5hbWU9IiIsdGhpcy5jb21tZW50PSIiLHRoaXMuaGNyYz0wLHRoaXMuZG9uZT0hMX19LHt9XSwzNDpbZnVuY3Rpb24oQixMLEspeyJ1c2Ugc3RyaWN0IjtMLmV4cG9ydHM9'@;
put 'ZnVuY3Rpb24oRSx6KXt2YXIgaixWLEcsVyxVLHEsdGUsbmUsaWUsbGUsZGUsdWUsY2UsWSxiLHgsTixGLGcsQyxNLHkscCxTLFE7Uz1FLmlucHV0LEc9KFY9RS5uZXh0X2luKSsoRS5hdmFpbF9pbi01KSxRPUUub3V0cHV0LFU9KFc9RS5uZXh0X291dCktKHotRS5hdmFpbF9vdXQpLHE9Vyso'@;
put 'RS5hdmFpbF9vdXQtMjU3KSx0ZT0oaj1FLnN0YXRlKS5kbWF4LG5lPWoud3NpemUsaWU9ai53aGF2ZSxsZT1qLnduZXh0LGRlPWoud2luZG93LHVlPWouaG9sZCxjZT1qLmJpdHMsWT1qLmxlbmNvZGUsYj1qLmRpc3Rjb2RlLHg9KDE8PGoubGVuYml0cyktMSxOPSgxPDxqLmRpc3RiaXRzKS0x'@;
put 'O2U6ZG97Y2U8MTUmJih1ZSs9U1tWKytdPDxjZSx1ZSs9U1tWKytdPDwoY2UrPTgpLGNlKz04KSxGPVlbdWUmeF07dDpmb3IoOzspe2lmKHVlPj4+PWc9Rj4+PjI0LGNlLT1nLDA9PShnPUY+Pj4xNiYyNTUpKVFbVysrXT02NTUzNSZGO2Vsc2V7aWYoISgxNiZnKSl7aWYoNjQmZyl7aWYoMzIm'@;
put 'Zyl7ai5tb2RlPTEyO2JyZWFrIGV9RS5tc2c9ImludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZSIsai5tb2RlPTMwO2JyZWFrIGV9Rj1ZWyg2NTUzNSZGKSsodWUmKDE8PGcpLTEpXTtjb250aW51ZSB0fWZvcihDPTY1NTM1JkYsKGcmPTE1KSYmKGNlPGcmJih1ZSs9U1tWKytdPDxjZSxjZSs9'@;
put 'OCksQys9dWUmKDE8PGcpLTEsdWU+Pj49ZyxjZS09ZyksY2U8MTUmJih1ZSs9U1tWKytdPDxjZSx1ZSs9U1tWKytdPDwoY2UrPTgpLGNlKz04KSxGPWJbdWUmTl07Oyl7aWYodWU+Pj49Zz1GPj4+MjQsY2UtPWcsMTYmKGc9Rj4+PjE2JjI1NSkpe2lmKE09NjU1MzUmRixjZTwoZyY9MTUpJiYo'@;
put 'dWUrPVNbVisrXTw8Y2UsKGNlKz04KTxnJiYodWUrPVNbVisrXTw8Y2UsY2UrPTgpKSwoTSs9dWUmKDE8PGcpLTEpPnRlKXtFLm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLGoubW9kZT0zMDticmVhayBlfWlmKHVlPj4+PWcsY2UtPWcsTT4oZz1XLVUpKXtpZigoZz1NLWcp'@;
put 'PmllJiZqLnNhbmUpe0UubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsai5tb2RlPTMwO2JyZWFrIGV9aWYoeT0wLHA9ZGUsMD09PWxlKXtpZih5Kz1uZS1nLGc8Qyl7Qy09Zztkb3tRW1crK109ZGVbeSsrXX13aGlsZSgtLWcpO3k9Vy1NLHA9UX19ZWxzZSBpZihsZTxnKXtp'@;
put 'Zih5Kz1uZStsZS1nLChnLT1sZSk8Qyl7Qy09Zztkb3tRW1crK109ZGVbeSsrXX13aGlsZSgtLWcpO2lmKHk9MCxsZTxDKXtDLT1nPWxlO2Rve1FbVysrXT1kZVt5KytdfXdoaWxlKC0tZyk7eT1XLU0scD1RfX19ZWxzZSBpZih5Kz1sZS1nLGc8Qyl7Qy09Zztkb3tRW1crK109ZGVbeSsrXX13'@;
put 'aGlsZSgtLWcpO3k9Vy1NLHA9UX1mb3IoO0M+MjspUVtXKytdPXBbeSsrXSxRW1crK109cFt5KytdLFFbVysrXT1wW3krK10sQy09MztDJiYoUVtXKytdPXBbeSsrXSxDPjEmJihRW1crK109cFt5KytdKSl9ZWxzZXt5PVctTTtkb3tRW1crK109UVt5KytdLFFbVysrXT1RW3krK10sUVtXKytd'@;
put 'PVFbeSsrXSxDLT0zfXdoaWxlKEM+Mik7QyYmKFFbVysrXT1RW3krK10sQz4xJiYoUVtXKytdPVFbeSsrXSkpfWJyZWFrfWlmKDY0Jmcpe0UubXNnPSJpbnZhbGlkIGRpc3RhbmNlIGNvZGUiLGoubW9kZT0zMDticmVhayBlfUY9YlsoNjU1MzUmRikrKHVlJigxPDxnKS0xKV19fWJyZWFrfX13'@;
put 'aGlsZShWPEcmJlc8cSk7dWUmPSgxPDwoY2UtPShDPWNlPj4zKTw8MykpLTEsRS5uZXh0X2luPVYtPUMsRS5uZXh0X291dD1XLEUuYXZhaWxfaW49VjxHP0ctVis1OjUtKFYtRyksRS5hdmFpbF9vdXQ9VzxxP3EtVysyNTc6MjU3LShXLXEpLGouaG9sZD11ZSxqLmJpdHM9Y2V9fSx7fV0sMzU6'@;
put 'W2Z1bmN0aW9uKEIsTCxLKXsidXNlIHN0cmljdCI7dmFyIEo9QigiLi4vdXRpbHMvY29tbW9uIiksST1CKCIuL2FkbGVyMzIiKSxSPUIoIi4vY3JjMzIiKSxFPUIoIi4vaW5mZmFzdCIpLHo9QigiLi9pbmZ0cmVlcyIpLHRlPTAsbGU9LTIsYj0xLEVlPTg1MixEZT01OTI7ZnVuY3Rpb24gY3Qo'@;
put 'Q3Qpe3JldHVybihDdD4+PjI0JjI1NSkrKEN0Pj4+OCY2NTI4MCkrKCg2NTI4MCZDdCk8PDgpKygoMjU1JkN0KTw8MjQpfWZ1bmN0aW9uIE90KCl7dGhpcy5tb2RlPTAsdGhpcy5sYXN0PSExLHRoaXMud3JhcD0wLHRoaXMuaGF2ZWRpY3Q9ITEsdGhpcy5mbGFncz0wLHRoaXMuZG1heD0wLHRo'@;
put 'aXMuY2hlY2s9MCx0aGlzLnRvdGFsPTAsdGhpcy5oZWFkPW51bGwsdGhpcy53Yml0cz0wLHRoaXMud3NpemU9MCx0aGlzLndoYXZlPTAsdGhpcy53bmV4dD0wLHRoaXMud2luZG93PW51bGwsdGhpcy5ob2xkPTAsdGhpcy5iaXRzPTAsdGhpcy5sZW5ndGg9MCx0aGlzLm9mZnNldD0wLHRoaXMu'@;
put 'ZXh0cmE9MCx0aGlzLmxlbmNvZGU9bnVsbCx0aGlzLmRpc3Rjb2RlPW51bGwsdGhpcy5sZW5iaXRzPTAsdGhpcy5kaXN0Yml0cz0wLHRoaXMubmNvZGU9MCx0aGlzLm5sZW49MCx0aGlzLm5kaXN0PTAsdGhpcy5oYXZlPTAsdGhpcy5uZXh0PW51bGwsdGhpcy5sZW5zPW5ldyBKLkJ1ZjE2KDMy'@;
put 'MCksdGhpcy53b3JrPW5ldyBKLkJ1ZjE2KDI4OCksdGhpcy5sZW5keW49bnVsbCx0aGlzLmRpc3RkeW49bnVsbCx0aGlzLnNhbmU9MCx0aGlzLmJhY2s9MCx0aGlzLndhcz0wfWZ1bmN0aW9uIFB0KEN0KXt2YXIgZW47cmV0dXJuIEN0JiZDdC5zdGF0ZT8oQ3QudG90YWxfaW49Q3QudG90YWxf'@;
put 'b3V0PShlbj1DdC5zdGF0ZSkudG90YWw9MCxDdC5tc2c9IiIsZW4ud3JhcCYmKEN0LmFkbGVyPTEmZW4ud3JhcCksZW4ubW9kZT1iLGVuLmxhc3Q9MCxlbi5oYXZlZGljdD0wLGVuLmRtYXg9MzI3NjgsZW4uaGVhZD1udWxsLGVuLmhvbGQ9MCxlbi5iaXRzPTAsZW4ubGVuY29kZT1lbi5sZW5k'@;
put 'eW49bmV3IEouQnVmMzIoRWUpLGVuLmRpc3Rjb2RlPWVuLmRpc3RkeW49bmV3IEouQnVmMzIoRGUpLGVuLnNhbmU9MSxlbi5iYWNrPS0xLHRlKTpsZX1mdW5jdGlvbiBBdChDdCl7dmFyIGVuO3JldHVybiBDdCYmQ3Quc3RhdGU/KChlbj1DdC5zdGF0ZSkud3NpemU9MCxlbi53aGF2ZT0wLGVu'@;
put 'LnduZXh0PTAsUHQoQ3QpKTpsZX1mdW5jdGlvbiBKdChDdCxlbil7dmFyIF90LFZ0O3JldHVybiFDdHx8IUN0LnN0YXRlfHwoVnQ9Q3Quc3RhdGUsZW48MD8oX3Q9MCxlbj0tZW4pOihfdD0xKyhlbj4+NCksZW48NDgmJihlbiY9MTUpKSxlbiYmKGVuPDh8fGVuPjE1KSk/bGU6KG51bGwhPT1W'@;
put 'dC53aW5kb3cmJlZ0LndiaXRzIT09ZW4mJihWdC53aW5kb3c9bnVsbCksVnQud3JhcD1fdCxWdC53Yml0cz1lbixBdChDdCkpfWZ1bmN0aW9uIG1uKEN0LGVuKXt2YXIgX3QsVnQ7cmV0dXJuIEN0PyhWdD1uZXcgT3QsQ3Quc3RhdGU9VnQsVnQud2luZG93PW51bGwsKF90PUp0KEN0LGVuKSkh'@;
put 'PT10ZSYmKEN0LnN0YXRlPW51bGwpLF90KTpsZX12YXIgR24sb24sYm49ITA7ZnVuY3Rpb24gJG4oQ3Qpe2lmKGJuKXt2YXIgZW47Zm9yKEduPW5ldyBKLkJ1ZjMyKDUxMiksb249bmV3IEouQnVmMzIoMzIpLGVuPTA7ZW48MTQ0OylDdC5sZW5zW2VuKytdPTg7Zm9yKDtlbjwyNTY7KUN0Lmxl'@;
put 'bnNbZW4rK109OTtmb3IoO2VuPDI4MDspQ3QubGVuc1tlbisrXT03O2Zvcig7ZW48Mjg4OylDdC5sZW5zW2VuKytdPTg7Zm9yKHooMSxDdC5sZW5zLDAsMjg4LEduLDAsQ3Qud29yayx7Yml0czo5fSksZW49MDtlbjwzMjspQ3QubGVuc1tlbisrXT01O3ooMixDdC5sZW5zLDAsMzIsb24sMCxD'@;
put 'dC53b3JrLHtiaXRzOjV9KSxibj0hMX1DdC5sZW5jb2RlPUduLEN0LmxlbmJpdHM9OSxDdC5kaXN0Y29kZT1vbixDdC5kaXN0Yml0cz01fUsuaW5mbGF0ZVJlc2V0PUF0LEsuaW5mbGF0ZVJlc2V0Mj1KdCxLLmluZmxhdGVSZXNldEtlZXA9UHQsSy5pbmZsYXRlSW5pdD1mdW5jdGlvbiBOdChD'@;
put 'dCl7cmV0dXJuIG1uKEN0LDE1KX0sSy5pbmZsYXRlSW5pdDI9bW4sSy5pbmZsYXRlPWZ1bmN0aW9uIHB0KEN0LGVuKXt2YXIgX3QsVnQsX24sb3QsSXQsbm4sRHQsdnQsR3QsTG4senQsTW4sVG4sc24sRm4scXQsSG4saWksY24sam4sWHIsdmksWWksSnIsQm49MCxFcj1uZXcgSi5CdWY4KDQp'@;
put 'LGFvPVsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XTtpZighQ3R8fCFDdC5zdGF0ZXx8IUN0Lm91dHB1dHx8IUN0LmlucHV0JiYwIT09Q3QuYXZhaWxfaW4pcmV0dXJuIGxlOzEyPT09KF90PUN0LnN0YXRlKS5tb2RlJiYoX3QubW9kZT0xMyksSXQ9Q3Qu'@;
put 'bmV4dF9vdXQsX249Q3Qub3V0cHV0LG90PUN0Lm5leHRfaW4sVnQ9Q3QuaW5wdXQsdnQ9X3QuaG9sZCxHdD1fdC5iaXRzLExuPW5uPUN0LmF2YWlsX2luLHp0PUR0PUN0LmF2YWlsX291dCx2aT10ZTtlOmZvcig7Oylzd2l0Y2goX3QubW9kZSl7Y2FzZSBiOmlmKDA9PT1fdC53cmFwKXtfdC5t'@;
put 'b2RlPTEzO2JyZWFrfWZvcig7R3Q8MTY7KXtpZigwPT09bm4pYnJlYWsgZTtubi0tLHZ0Kz1WdFtvdCsrXTw8R3QsR3QrPTh9aWYoMiZfdC53cmFwJiYzNTYxNT09PXZ0KXtfdC5jaGVjaz0wLEVyWzBdPTI1NSZ2dCxFclsxXT12dD4+PjgmMjU1LF90LmNoZWNrPVIoX3QuY2hlY2ssRXIsMiww'@;
put 'KSx2dD0wLEd0PTAsX3QubW9kZT0yO2JyZWFrfWlmKF90LmZsYWdzPTAsX3QuaGVhZCYmKF90LmhlYWQuZG9uZT0hMSksISgxJl90LndyYXApfHwoKCgyNTUmdnQpPDw4KSsodnQ+PjgpKSUzMSl7Q3QubXNnPSJpbmNvcnJlY3QgaGVhZGVyIGNoZWNrIixfdC5tb2RlPTMwO2JyZWFrfWlmKDgh'@;
put 'PSgxNSZ2dCkpe0N0Lm1zZz0idW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QiLF90Lm1vZGU9MzA7YnJlYWt9aWYoR3QtPTQsWHI9OCsoMTUmKHZ0Pj4+PTQpKSwwPT09X3Qud2JpdHMpX3Qud2JpdHM9WHI7ZWxzZSBpZihYcj5fdC53Yml0cyl7Q3QubXNnPSJpbnZhbGlkIHdpbmRvdyBzaXpl'@;
put 'IixfdC5tb2RlPTMwO2JyZWFrfV90LmRtYXg9MTw8WHIsQ3QuYWRsZXI9X3QuY2hlY2s9MSxfdC5tb2RlPTUxMiZ2dD8xMDoxMix2dD0wLEd0PTA7YnJlYWs7Y2FzZSAyOmZvcig7R3Q8MTY7KXtpZigwPT09bm4pYnJlYWsgZTtubi0tLHZ0Kz1WdFtvdCsrXTw8R3QsR3QrPTh9aWYoX3QuZmxh'@;
put 'Z3M9dnQsOCE9KDI1NSZfdC5mbGFncykpe0N0Lm1zZz0idW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QiLF90Lm1vZGU9MzA7YnJlYWt9aWYoNTczNDQmX3QuZmxhZ3Mpe0N0Lm1zZz0idW5rbm93biBoZWFkZXIgZmxhZ3Mgc2V0IixfdC5tb2RlPTMwO2JyZWFrfV90LmhlYWQmJihfdC5oZWFk'@;
put 'LnRleHQ9dnQ+PjgmMSksNTEyJl90LmZsYWdzJiYoRXJbMF09MjU1JnZ0LEVyWzFdPXZ0Pj4+OCYyNTUsX3QuY2hlY2s9UihfdC5jaGVjayxFciwyLDApKSx2dD0wLEd0PTAsX3QubW9kZT0zO2Nhc2UgMzpmb3IoO0d0PDMyOyl7aWYoMD09PW5uKWJyZWFrIGU7bm4tLSx2dCs9VnRbb3QrK108'@;
put 'PEd0LEd0Kz04fV90LmhlYWQmJihfdC5oZWFkLnRpbWU9dnQpLDUxMiZfdC5mbGFncyYmKEVyWzBdPTI1NSZ2dCxFclsxXT12dD4+PjgmMjU1LEVyWzJdPXZ0Pj4+MTYmMjU1LEVyWzNdPXZ0Pj4+MjQmMjU1LF90LmNoZWNrPVIoX3QuY2hlY2ssRXIsNCwwKSksdnQ9MCxHdD0wLF90Lm1vZGU9'@;
put 'NDtjYXNlIDQ6Zm9yKDtHdDwxNjspe2lmKDA9PT1ubilicmVhayBlO25uLS0sdnQrPVZ0W290KytdPDxHdCxHdCs9OH1fdC5oZWFkJiYoX3QuaGVhZC54ZmxhZ3M9MjU1JnZ0LF90LmhlYWQub3M9dnQ+PjgpLDUxMiZfdC5mbGFncyYmKEVyWzBdPTI1NSZ2dCxFclsxXT12dD4+PjgmMjU1LF90'@;
put 'LmNoZWNrPVIoX3QuY2hlY2ssRXIsMiwwKSksdnQ9MCxHdD0wLF90Lm1vZGU9NTtjYXNlIDU6aWYoMTAyNCZfdC5mbGFncyl7Zm9yKDtHdDwxNjspe2lmKDA9PT1ubilicmVhayBlO25uLS0sdnQrPVZ0W290KytdPDxHdCxHdCs9OH1fdC5sZW5ndGg9dnQsX3QuaGVhZCYmKF90LmhlYWQuZXh0'@;
put 'cmFfbGVuPXZ0KSw1MTImX3QuZmxhZ3MmJihFclswXT0yNTUmdnQsRXJbMV09dnQ+Pj44JjI1NSxfdC5jaGVjaz1SKF90LmNoZWNrLEVyLDIsMCkpLHZ0PTAsR3Q9MH1lbHNlIF90LmhlYWQmJihfdC5oZWFkLmV4dHJhPW51bGwpO190Lm1vZGU9NjtjYXNlIDY6aWYoMTAyNCZfdC5mbGFncyYm'@;
put 'KChNbj1fdC5sZW5ndGgpPm5uJiYoTW49bm4pLE1uJiYoX3QuaGVhZCYmKFhyPV90LmhlYWQuZXh0cmFfbGVuLV90Lmxlbmd0aCxfdC5oZWFkLmV4dHJhfHwoX3QuaGVhZC5leHRyYT1uZXcgQXJyYXkoX3QuaGVhZC5leHRyYV9sZW4pKSxKLmFycmF5U2V0KF90LmhlYWQuZXh0cmEsVnQsb3Qs'@;
put 'TW4sWHIpKSw1MTImX3QuZmxhZ3MmJihfdC5jaGVjaz1SKF90LmNoZWNrLFZ0LE1uLG90KSksbm4tPU1uLG90Kz1NbixfdC5sZW5ndGgtPU1uKSxfdC5sZW5ndGgpKWJyZWFrIGU7X3QubGVuZ3RoPTAsX3QubW9kZT03O2Nhc2UgNzppZigyMDQ4Jl90LmZsYWdzKXtpZigwPT09bm4pYnJlYWsg'@;
put 'ZTtNbj0wO2Rve1hyPVZ0W290K01uKytdLF90LmhlYWQmJlhyJiZfdC5sZW5ndGg8NjU1MzYmJihfdC5oZWFkLm5hbWUrPVN0cmluZy5mcm9tQ2hhckNvZGUoWHIpKX13aGlsZShYciYmTW48bm4pO2lmKDUxMiZfdC5mbGFncyYmKF90LmNoZWNrPVIoX3QuY2hlY2ssVnQsTW4sb3QpKSxubi09'@;
put 'TW4sb3QrPU1uLFhyKWJyZWFrIGV9ZWxzZSBfdC5oZWFkJiYoX3QuaGVhZC5uYW1lPW51bGwpO190Lmxlbmd0aD0wLF90Lm1vZGU9ODtjYXNlIDg6aWYoNDA5NiZfdC5mbGFncyl7aWYoMD09PW5uKWJyZWFrIGU7TW49MDtkb3tYcj1WdFtvdCtNbisrXSxfdC5oZWFkJiZYciYmX3QubGVuZ3Ro'@;
put 'PDY1NTM2JiYoX3QuaGVhZC5jb21tZW50Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKFhyKSl9d2hpbGUoWHImJk1uPG5uKTtpZig1MTImX3QuZmxhZ3MmJihfdC5jaGVjaz1SKF90LmNoZWNrLFZ0LE1uLG90KSksbm4tPU1uLG90Kz1NbixYcilicmVhayBlfWVsc2UgX3QuaGVhZCYmKF90LmhlYWQu'@;
put 'Y29tbWVudD1udWxsKTtfdC5tb2RlPTk7Y2FzZSA5OmlmKDUxMiZfdC5mbGFncyl7Zm9yKDtHdDwxNjspe2lmKDA9PT1ubilicmVhayBlO25uLS0sdnQrPVZ0W290KytdPDxHdCxHdCs9OH1pZih2dCE9PSg2NTUzNSZfdC5jaGVjaykpe0N0Lm1zZz0iaGVhZGVyIGNyYyBtaXNtYXRjaCIsX3Qu'@;
put 'bW9kZT0zMDticmVha312dD0wLEd0PTB9X3QuaGVhZCYmKF90LmhlYWQuaGNyYz1fdC5mbGFncz4+OSYxLF90LmhlYWQuZG9uZT0hMCksQ3QuYWRsZXI9X3QuY2hlY2s9MCxfdC5tb2RlPTEyO2JyZWFrO2Nhc2UgMTA6Zm9yKDtHdDwzMjspe2lmKDA9PT1ubilicmVhayBlO25uLS0sdnQrPVZ0'@;
put 'W290KytdPDxHdCxHdCs9OH1DdC5hZGxlcj1fdC5jaGVjaz1jdCh2dCksdnQ9MCxHdD0wLF90Lm1vZGU9MTE7Y2FzZSAxMTppZigwPT09X3QuaGF2ZWRpY3QpcmV0dXJuIEN0Lm5leHRfb3V0PUl0LEN0LmF2YWlsX291dD1EdCxDdC5uZXh0X2luPW90LEN0LmF2YWlsX2luPW5uLF90LmhvbGQ9'@;
put 'dnQsX3QuYml0cz1HdCwyO0N0LmFkbGVyPV90LmNoZWNrPTEsX3QubW9kZT0xMjtjYXNlIDEyOmlmKDU9PT1lbnx8Nj09PWVuKWJyZWFrIGU7Y2FzZSAxMzppZihfdC5sYXN0KXt2dD4+Pj03Jkd0LEd0LT03Jkd0LF90Lm1vZGU9Mjc7YnJlYWt9Zm9yKDtHdDwzOyl7aWYoMD09PW5uKWJyZWFr'@;
put 'IGU7bm4tLSx2dCs9VnRbb3QrK108PEd0LEd0Kz04fXN3aXRjaChfdC5sYXN0PTEmdnQsR3QtPTEsMyYodnQ+Pj49MSkpe2Nhc2UgMDpfdC5tb2RlPTE0O2JyZWFrO2Nhc2UgMTppZigkbihfdCksX3QubW9kZT0yMCw2PT09ZW4pe3Z0Pj4+PTIsR3QtPTI7YnJlYWsgZX1icmVhaztjYXNlIDI6'@;
put 'X3QubW9kZT0xNzticmVhaztjYXNlIDM6Q3QubXNnPSJpbnZhbGlkIGJsb2NrIHR5cGUiLF90Lm1vZGU9MzB9dnQ+Pj49MixHdC09MjticmVhaztjYXNlIDE0OmZvcih2dD4+Pj03Jkd0LEd0LT03Jkd0O0d0PDMyOyl7aWYoMD09PW5uKWJyZWFrIGU7bm4tLSx2dCs9VnRbb3QrK108PEd0LEd0'@;
put 'Kz04fWlmKCg2NTUzNSZ2dCkhPSh2dD4+PjE2XjY1NTM1KSl7Q3QubXNnPSJpbnZhbGlkIHN0b3JlZCBibG9jayBsZW5ndGhzIixfdC5tb2RlPTMwO2JyZWFrfWlmKF90Lmxlbmd0aD02NTUzNSZ2dCx2dD0wLEd0PTAsX3QubW9kZT0xNSw2PT09ZW4pYnJlYWsgZTtjYXNlIDE1Ol90Lm1vZGU9'@;
put 'MTY7Y2FzZSAxNjppZihNbj1fdC5sZW5ndGgpe2lmKE1uPm5uJiYoTW49bm4pLE1uPkR0JiYoTW49RHQpLDA9PT1NbilicmVhayBlO0ouYXJyYXlTZXQoX24sVnQsb3QsTW4sSXQpLG5uLT1NbixvdCs9TW4sRHQtPU1uLEl0Kz1NbixfdC5sZW5ndGgtPU1uO2JyZWFrfV90Lm1vZGU9MTI7YnJl'@;
put 'YWs7Y2FzZSAxNzpmb3IoO0d0PDE0Oyl7aWYoMD09PW5uKWJyZWFrIGU7bm4tLSx2dCs9VnRbb3QrK108PEd0LEd0Kz04fWlmKF90Lm5sZW49MjU3KygzMSZ2dCksR3QtPTUsX3QubmRpc3Q9MSsoMzEmKHZ0Pj4+PTUpKSxHdC09NSxfdC5uY29kZT00KygxNSYodnQ+Pj49NSkpLHZ0Pj4+PTQs'@;
put 'R3QtPTQsX3Qubmxlbj4yODZ8fF90Lm5kaXN0PjMwKXtDdC5tc2c9InRvbyBtYW55IGxlbmd0aCBvciBkaXN0YW5jZSBzeW1ib2xzIixfdC5tb2RlPTMwO2JyZWFrfV90LmhhdmU9MCxfdC5tb2RlPTE4O2Nhc2UgMTg6Zm9yKDtfdC5oYXZlPF90Lm5jb2RlOyl7Zm9yKDtHdDwzOyl7aWYoMD09'@;
put 'PW5uKWJyZWFrIGU7bm4tLSx2dCs9VnRbb3QrK108PEd0LEd0Kz04fV90LmxlbnNbYW9bX3QuaGF2ZSsrXV09NyZ2dCx2dD4+Pj0zLEd0LT0zfWZvcig7X3QuaGF2ZTwxOTspX3QubGVuc1thb1tfdC5oYXZlKytdXT0wO2lmKF90LmxlbmNvZGU9X3QubGVuZHluLF90LmxlbmJpdHM9Nyx2aT16'@;
put 'KDAsX3QubGVucywwLDE5LF90LmxlbmNvZGUsMCxfdC53b3JrLFlpPXtiaXRzOl90LmxlbmJpdHN9KSxfdC5sZW5iaXRzPVlpLmJpdHMsdmkpe0N0Lm1zZz0iaW52YWxpZCBjb2RlIGxlbmd0aHMgc2V0IixfdC5tb2RlPTMwO2JyZWFrfV90LmhhdmU9MCxfdC5tb2RlPTE5O2Nhc2UgMTk6Zm9y'@;
put 'KDtfdC5oYXZlPF90Lm5sZW4rX3QubmRpc3Q7KXtmb3IoO3F0PShCbj1fdC5sZW5jb2RlW3Z0JigxPDxfdC5sZW5iaXRzKS0xXSk+Pj4xNiYyNTUsSG49NjU1MzUmQm4sISgoRm49Qm4+Pj4yNCk8PUd0KTspe2lmKDA9PT1ubilicmVhayBlO25uLS0sdnQrPVZ0W290KytdPDxHdCxHdCs9OH1p'@;
put 'ZihIbjwxNil2dD4+Pj1GbixHdC09Rm4sX3QubGVuc1tfdC5oYXZlKytdPUhuO2Vsc2V7aWYoMTY9PT1Ibil7Zm9yKEpyPUZuKzI7R3Q8SnI7KXtpZigwPT09bm4pYnJlYWsgZTtubi0tLHZ0Kz1WdFtvdCsrXTw8R3QsR3QrPTh9aWYodnQ+Pj49Rm4sR3QtPUZuLDA9PT1fdC5oYXZlKXtDdC5t'@;
put 'c2c9ImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiLF90Lm1vZGU9MzA7YnJlYWt9WHI9X3QubGVuc1tfdC5oYXZlLTFdLE1uPTMrKDMmdnQpLHZ0Pj4+PTIsR3QtPTJ9ZWxzZSBpZigxNz09PUhuKXtmb3IoSnI9Rm4rMztHdDxKcjspe2lmKDA9PT1ubilicmVhayBlO25uLS0sdnQrPVZ0W290'@;
put 'KytdPDxHdCxHdCs9OH1HdC09Rm4sWHI9MCxNbj0zKyg3Jih2dD4+Pj1GbikpLHZ0Pj4+PTMsR3QtPTN9ZWxzZXtmb3IoSnI9Rm4rNztHdDxKcjspe2lmKDA9PT1ubilicmVhayBlO25uLS0sdnQrPVZ0W290KytdPDxHdCxHdCs9OH1HdC09Rm4sWHI9MCxNbj0xMSsoMTI3Jih2dD4+Pj1Gbikp'@;
put 'LHZ0Pj4+PTcsR3QtPTd9aWYoX3QuaGF2ZStNbj5fdC5ubGVuK190Lm5kaXN0KXtDdC5tc2c9ImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiLF90Lm1vZGU9MzA7YnJlYWt9Zm9yKDtNbi0tOylfdC5sZW5zW190LmhhdmUrK109WHJ9fWlmKDMwPT09X3QubW9kZSlicmVhaztpZigwPT09X3Qu'@;
put 'bGVuc1syNTZdKXtDdC5tc2c9ImludmFsaWQgY29kZSAtLSBtaXNzaW5nIGVuZC1vZi1ibG9jayIsX3QubW9kZT0zMDticmVha31pZihfdC5sZW5iaXRzPTksdmk9eigxLF90LmxlbnMsMCxfdC5ubGVuLF90LmxlbmNvZGUsMCxfdC53b3JrLFlpPXtiaXRzOl90LmxlbmJpdHN9KSxfdC5sZW5i'@;
put 'aXRzPVlpLmJpdHMsdmkpe0N0Lm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aHMgc2V0IixfdC5tb2RlPTMwO2JyZWFrfWlmKF90LmRpc3RiaXRzPTYsX3QuZGlzdGNvZGU9X3QuZGlzdGR5bix2aT16KDIsX3QubGVucyxfdC5ubGVuLF90Lm5kaXN0LF90LmRpc3Rjb2RlLDAsX3Qud29yayxZ'@;
put 'aT17Yml0czpfdC5kaXN0Yml0c30pLF90LmRpc3RiaXRzPVlpLmJpdHMsdmkpe0N0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZXMgc2V0IixfdC5tb2RlPTMwO2JyZWFrfWlmKF90Lm1vZGU9MjAsNj09PWVuKWJyZWFrIGU7Y2FzZSAyMDpfdC5tb2RlPTIxO2Nhc2UgMjE6aWYobm4+PTYmJkR0Pj0y'@;
put 'NTgpe0N0Lm5leHRfb3V0PUl0LEN0LmF2YWlsX291dD1EdCxDdC5uZXh0X2luPW90LEN0LmF2YWlsX2luPW5uLF90LmhvbGQ9dnQsX3QuYml0cz1HdCxFKEN0LHp0KSxJdD1DdC5uZXh0X291dCxfbj1DdC5vdXRwdXQsRHQ9Q3QuYXZhaWxfb3V0LG90PUN0Lm5leHRfaW4sVnQ9Q3QuaW5wdXQs'@;
put 'bm49Q3QuYXZhaWxfaW4sdnQ9X3QuaG9sZCxHdD1fdC5iaXRzLDEyPT09X3QubW9kZSYmKF90LmJhY2s9LTEpO2JyZWFrfWZvcihfdC5iYWNrPTA7cXQ9KEJuPV90LmxlbmNvZGVbdnQmKDE8PF90LmxlbmJpdHMpLTFdKT4+PjE2JjI1NSxIbj02NTUzNSZCbiwhKChGbj1Cbj4+PjI0KTw9R3Qp'@;
put 'Oyl7aWYoMD09PW5uKWJyZWFrIGU7bm4tLSx2dCs9VnRbb3QrK108PEd0LEd0Kz04fWlmKHF0JiYhKDI0MCZxdCkpe2ZvcihpaT1Gbixjbj1xdCxqbj1IbjtxdD0oQm49X3QubGVuY29kZVtqbisoKHZ0JigxPDxpaStjbiktMSk+PmlpKV0pPj4+MTYmMjU1LEhuPTY1NTM1JkJuLCEoaWkrKEZu'@;
put 'PUJuPj4+MjQpPD1HdCk7KXtpZigwPT09bm4pYnJlYWsgZTtubi0tLHZ0Kz1WdFtvdCsrXTw8R3QsR3QrPTh9dnQ+Pj49aWksR3QtPWlpLF90LmJhY2srPWlpfWlmKHZ0Pj4+PUZuLEd0LT1GbixfdC5iYWNrKz1GbixfdC5sZW5ndGg9SG4sMD09PXF0KXtfdC5tb2RlPTI2O2JyZWFrfWlmKDMy'@;
put 'JnF0KXtfdC5iYWNrPS0xLF90Lm1vZGU9MTI7YnJlYWt9aWYoNjQmcXQpe0N0Lm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIixfdC5tb2RlPTMwO2JyZWFrfV90LmV4dHJhPTE1JnF0LF90Lm1vZGU9MjI7Y2FzZSAyMjppZihfdC5leHRyYSl7Zm9yKEpyPV90LmV4dHJhO0d0PEpy'@;
put 'Oyl7aWYoMD09PW5uKWJyZWFrIGU7bm4tLSx2dCs9VnRbb3QrK108PEd0LEd0Kz04fV90Lmxlbmd0aCs9dnQmKDE8PF90LmV4dHJhKS0xLHZ0Pj4+PV90LmV4dHJhLEd0LT1fdC5leHRyYSxfdC5iYWNrKz1fdC5leHRyYX1fdC53YXM9X3QubGVuZ3RoLF90Lm1vZGU9MjM7Y2FzZSAyMzpmb3Io'@;
put 'O3F0PShCbj1fdC5kaXN0Y29kZVt2dCYoMTw8X3QuZGlzdGJpdHMpLTFdKT4+PjE2JjI1NSxIbj02NTUzNSZCbiwhKChGbj1Cbj4+PjI0KTw9R3QpOyl7aWYoMD09PW5uKWJyZWFrIGU7bm4tLSx2dCs9VnRbb3QrK108PEd0LEd0Kz04fWlmKCEoMjQwJnF0KSl7Zm9yKGlpPUZuLGNuPXF0LGpu'@;
put 'PUhuO3F0PShCbj1fdC5kaXN0Y29kZVtqbisoKHZ0JigxPDxpaStjbiktMSk+PmlpKV0pPj4+MTYmMjU1LEhuPTY1NTM1JkJuLCEoaWkrKEZuPUJuPj4+MjQpPD1HdCk7KXtpZigwPT09bm4pYnJlYWsgZTtubi0tLHZ0Kz1WdFtvdCsrXTw8R3QsR3QrPTh9dnQ+Pj49aWksR3QtPWlpLF90LmJh'@;
put 'Y2srPWlpfWlmKHZ0Pj4+PUZuLEd0LT1GbixfdC5iYWNrKz1Gbiw2NCZxdCl7Q3QubXNnPSJpbnZhbGlkIGRpc3RhbmNlIGNvZGUiLF90Lm1vZGU9MzA7YnJlYWt9X3Qub2Zmc2V0PUhuLF90LmV4dHJhPTE1JnF0LF90Lm1vZGU9MjQ7Y2FzZSAyNDppZihfdC5leHRyYSl7Zm9yKEpyPV90LmV4'@;
put 'dHJhO0d0PEpyOyl7aWYoMD09PW5uKWJyZWFrIGU7bm4tLSx2dCs9VnRbb3QrK108PEd0LEd0Kz04fV90Lm9mZnNldCs9dnQmKDE8PF90LmV4dHJhKS0xLHZ0Pj4+PV90LmV4dHJhLEd0LT1fdC5leHRyYSxfdC5iYWNrKz1fdC5leHRyYX1pZihfdC5vZmZzZXQ+X3QuZG1heCl7Q3QubXNnPSJp'@;
put 'bnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsX3QubW9kZT0zMDticmVha31fdC5tb2RlPTI1O2Nhc2UgMjU6aWYoMD09PUR0KWJyZWFrIGU7aWYoX3Qub2Zmc2V0PihNbj16dC1EdCkpe2lmKChNbj1fdC5vZmZzZXQtTW4pPl90LndoYXZlJiZfdC5zYW5lKXtDdC5tc2c9ImludmFsaWQg'@;
put 'ZGlzdGFuY2UgdG9vIGZhciBiYWNrIixfdC5tb2RlPTMwO2JyZWFrfVRuPU1uPl90LnduZXh0P190LndzaXplLShNbi09X3Qud25leHQpOl90LnduZXh0LU1uLE1uPl90Lmxlbmd0aCYmKE1uPV90Lmxlbmd0aCksc249X3Qud2luZG93fWVsc2Ugc249X24sVG49SXQtX3Qub2Zmc2V0LE1uPV90'@;
put 'Lmxlbmd0aDtNbj5EdCYmKE1uPUR0KSxEdC09TW4sX3QubGVuZ3RoLT1Nbjtkb3tfbltJdCsrXT1zbltUbisrXX13aGlsZSgtLU1uKTswPT09X3QubGVuZ3RoJiYoX3QubW9kZT0yMSk7YnJlYWs7Y2FzZSAyNjppZigwPT09RHQpYnJlYWsgZTtfbltJdCsrXT1fdC5sZW5ndGgsRHQtLSxfdC5t'@;
put 'b2RlPTIxO2JyZWFrO2Nhc2UgMjc6aWYoX3Qud3JhcCl7Zm9yKDtHdDwzMjspe2lmKDA9PT1ubilicmVhayBlO25uLS0sdnR8PVZ0W290KytdPDxHdCxHdCs9OH1pZihDdC50b3RhbF9vdXQrPXp0LT1EdCxfdC50b3RhbCs9enQsenQmJihDdC5hZGxlcj1fdC5jaGVjaz1fdC5mbGFncz9SKF90'@;
put 'LmNoZWNrLF9uLHp0LEl0LXp0KTpJKF90LmNoZWNrLF9uLHp0LEl0LXp0KSksenQ9RHQsKF90LmZsYWdzP3Z0OmN0KHZ0KSkhPT1fdC5jaGVjayl7Q3QubXNnPSJpbmNvcnJlY3QgZGF0YSBjaGVjayIsX3QubW9kZT0zMDticmVha312dD0wLEd0PTB9X3QubW9kZT0yODtjYXNlIDI4OmlmKF90'@;
put 'LndyYXAmJl90LmZsYWdzKXtmb3IoO0d0PDMyOyl7aWYoMD09PW5uKWJyZWFrIGU7bm4tLSx2dCs9VnRbb3QrK108PEd0LEd0Kz04fWlmKHZ0IT09KDQyOTQ5NjcyOTUmX3QudG90YWwpKXtDdC5tc2c9ImluY29ycmVjdCBsZW5ndGggY2hlY2siLF90Lm1vZGU9MzA7YnJlYWt9dnQ9MCxHdD0w'@;
put 'fV90Lm1vZGU9Mjk7Y2FzZSAyOTp2aT0xO2JyZWFrIGU7Y2FzZSAzMDp2aT0tMzticmVhayBlO2Nhc2UgMzE6cmV0dXJuLTQ7ZGVmYXVsdDpyZXR1cm4gbGV9cmV0dXJuIEN0Lm5leHRfb3V0PUl0LEN0LmF2YWlsX291dD1EdCxDdC5uZXh0X2luPW90LEN0LmF2YWlsX2luPW5uLF90LmhvbGQ9'@;
put 'dnQsX3QuYml0cz1HdCwoX3Qud3NpemV8fHp0IT09Q3QuYXZhaWxfb3V0JiZfdC5tb2RlPDMwJiYoX3QubW9kZTwyN3x8NCE9PWVuKSkmJmZ1bmN0aW9uIE5uKEN0LGVuLF90LFZ0KXt2YXIgX24sb3Q9Q3Quc3RhdGU7cmV0dXJuIG51bGw9PT1vdC53aW5kb3cmJihvdC53c2l6ZT0xPDxvdC53'@;
put 'Yml0cyxvdC53bmV4dD0wLG90LndoYXZlPTAsb3Qud2luZG93PW5ldyBKLkJ1Zjgob3Qud3NpemUpKSxWdD49b3Qud3NpemU/KEouYXJyYXlTZXQob3Qud2luZG93LGVuLF90LW90LndzaXplLG90LndzaXplLDApLG90LnduZXh0PTAsb3Qud2hhdmU9b3Qud3NpemUpOigoX249b3Qud3NpemUt'@;
put 'b3Qud25leHQpPlZ0JiYoX249VnQpLEouYXJyYXlTZXQob3Qud2luZG93LGVuLF90LVZ0LF9uLG90LnduZXh0KSwoVnQtPV9uKT8oSi5hcnJheVNldChvdC53aW5kb3csZW4sX3QtVnQsVnQsMCksb3Qud25leHQ9VnQsb3Qud2hhdmU9b3Qud3NpemUpOihvdC53bmV4dCs9X24sb3Qud25leHQ9'@;
put 'PT1vdC53c2l6ZSYmKG90LnduZXh0PTApLG90LndoYXZlPG90LndzaXplJiYob3Qud2hhdmUrPV9uKSkpLDB9KEN0LEN0Lm91dHB1dCxDdC5uZXh0X291dCx6dC1DdC5hdmFpbF9vdXQpPyhfdC5tb2RlPTMxLC00KTooenQtPUN0LmF2YWlsX291dCxDdC50b3RhbF9pbis9TG4tPUN0LmF2YWls'@;
put 'X2luLEN0LnRvdGFsX291dCs9enQsX3QudG90YWwrPXp0LF90LndyYXAmJnp0JiYoQ3QuYWRsZXI9X3QuY2hlY2s9X3QuZmxhZ3M/UihfdC5jaGVjayxfbix6dCxDdC5uZXh0X291dC16dCk6SShfdC5jaGVjayxfbix6dCxDdC5uZXh0X291dC16dCkpLEN0LmRhdGFfdHlwZT1fdC5iaXRzKyhf'@;
put 'dC5sYXN0PzY0OjApKygxMj09PV90Lm1vZGU/MTI4OjApKygyMD09PV90Lm1vZGV8fDE1PT09X3QubW9kZT8yNTY6MCksKDA9PT1MbiYmMD09PXp0fHw0PT09ZW4pJiZ2aT09PXRlJiYodmk9LTUpLHZpKX0sSy5pbmZsYXRlRW5kPWZ1bmN0aW9uIHBuKEN0KXtpZighQ3R8fCFDdC5zdGF0ZSly'@;
put 'ZXR1cm4gbGU7dmFyIGVuPUN0LnN0YXRlO3JldHVybiBlbi53aW5kb3cmJihlbi53aW5kb3c9bnVsbCksQ3Quc3RhdGU9bnVsbCx0ZX0sSy5pbmZsYXRlR2V0SGVhZGVyPWZ1bmN0aW9uIGhuKEN0LGVuKXt2YXIgX3Q7cmV0dXJuIEN0JiZDdC5zdGF0ZSYmMiYoX3Q9Q3Quc3RhdGUpLndyYXA/'@;
put 'KF90LmhlYWQ9ZW4sZW4uZG9uZT0hMSx0ZSk6bGV9LEsuaW5mbGF0ZUluZm89InBha28gaW5mbGF0ZSAoZnJvbSBOb2RlY2EgcHJvamVjdCkifSx7Ii4uL3V0aWxzL2NvbW1vbiI6MjcsIi4vYWRsZXIzMiI6MjksIi4vY3JjMzIiOjMxLCIuL2luZmZhc3QiOjM0LCIuL2luZnRyZWVzIjozNn1d'@;
put 'LDM2OltmdW5jdGlvbihCLEwsSyl7InVzZSBzdHJpY3QiO3ZhciBKPUIoIi4uL3V0aWxzL2NvbW1vbiIpLEc9WzMsNCw1LDYsNyw4LDksMTAsMTEsMTMsMTUsMTcsMTksMjMsMjcsMzEsMzUsNDMsNTEsNTksNjcsODMsOTksMTE1LDEzMSwxNjMsMTk1LDIyNywyNTgsMCwwXSxXPVsxNiwxNiwx'@;
put 'NiwxNiwxNiwxNiwxNiwxNiwxNywxNywxNywxNywxOCwxOCwxOCwxOCwxOSwxOSwxOSwxOSwyMCwyMCwyMCwyMCwyMSwyMSwyMSwyMSwxNiw3Miw3OF0sVT1bMSwyLDMsNCw1LDcsOSwxMywxNywyNSwzMyw0OSw2NSw5NywxMjksMTkzLDI1NywzODUsNTEzLDc2OSwxMDI1LDE1MzcsMjA0OSwz'@;
put 'MDczLDQwOTcsNjE0NSw4MTkzLDEyMjg5LDE2Mzg1LDI0NTc3LDAsMF0scT1bMTYsMTYsMTYsMTYsMTcsMTcsMTgsMTgsMTksMTksMjAsMjAsMjEsMjEsMjIsMjIsMjMsMjMsMjQsMjQsMjUsMjUsMjYsMjYsMjcsMjcsMjgsMjgsMjksMjksNjQsNjRdO0wuZXhwb3J0cz1mdW5jdGlvbihuZSxp'@;
put 'ZSxsZSxkZSx1ZSxjZSxZLGIpe3ZhciBmZSxtZSxrZSxUZSxQZSxMZSxLZSx3ZSxJZSx4PWIuYml0cyxOPTAsRj0wLGc9MCxDPTAsTT0wLHk9MCxwPTAsUz0wLFE9MCxyZT0wLEZlPW51bGwsTmU9MCxCZT1uZXcgSi5CdWYxNigxNiksSGU9bmV3IEouQnVmMTYoMTYpLFFlPW51bGwsbXQ9MDtm'@;
put 'b3IoTj0wO048PTE1O04rKylCZVtOXT0wO2ZvcihGPTA7RjxkZTtGKyspQmVbaWVbbGUrRl1dKys7Zm9yKE09eCxDPTE1O0M+PTEmJjA9PT1CZVtDXTtDLS0pO2lmKE0+QyYmKE09QyksMD09PUMpcmV0dXJuIHVlW2NlKytdPTIwOTcxNTIwLHVlW2NlKytdPTIwOTcxNTIwLGIuYml0cz0xLDA7'@;
put 'Zm9yKGc9MTtnPEMmJjA9PT1CZVtnXTtnKyspO2ZvcihNPGcmJihNPWcpLFM9MSxOPTE7Tjw9MTU7TisrKWlmKFM8PD0xLChTLT1CZVtOXSk8MClyZXR1cm4tMTtpZihTPjAmJigwPT09bmV8fDEhPT1DKSlyZXR1cm4tMTtmb3IoSGVbMV09MCxOPTE7TjwxNTtOKyspSGVbTisxXT1IZVtOXStC'@;
put 'ZVtOXTtmb3IoRj0wO0Y8ZGU7RisrKTAhPT1pZVtsZStGXSYmKFlbSGVbaWVbbGUrRl1dKytdPUYpO2lmKDA9PT1uZT8oRmU9UWU9WSxMZT0xOSk6MT09PW5lPyhGZT1HLE5lLT0yNTcsUWU9VyxtdC09MjU3LExlPTI1Nik6KEZlPVUsUWU9cSxMZT0tMSkscmU9MCxGPTAsTj1nLFBlPWNlLHk9'@;
put 'TSxwPTAsa2U9LTEsVGU9KFE9MTw8TSktMSwxPT09bmUmJlE+ODUyfHwyPT09bmUmJlE+NTkyKXJldHVybiAxO2Zvcig7Oyl7S2U9Ti1wLFlbRl08TGU/KHdlPTAsSWU9WVtGXSk6WVtGXT5MZT8od2U9UWVbbXQrWVtGXV0sSWU9RmVbTmUrWVtGXV0pOih3ZT05NixJZT0wKSxmZT0xPDxOLXAs'@;
put 'Zz1tZT0xPDx5O2Rve3VlW1BlKyhyZT4+cCkrKG1lLT1mZSldPUtlPDwyNHx3ZTw8MTZ8SWV8MH13aGlsZSgwIT09bWUpO2ZvcihmZT0xPDxOLTE7cmUmZmU7KWZlPj49MTtpZigwIT09ZmU/KHJlJj1mZS0xLHJlKz1mZSk6cmU9MCxGKyssMD09LS1CZVtOXSl7aWYoTj09PUMpYnJlYWs7Tj1p'@;
put 'ZVtsZStZW0ZdXX1pZihOPk0mJihyZSZUZSkhPT1rZSl7Zm9yKDA9PT1wJiYocD1NKSxQZSs9ZyxTPTE8PCh5PU4tcCk7eStwPEMmJiEoKFMtPUJlW3krcF0pPD0wKTspeSsrLFM8PD0xO2lmKFErPTE8PHksMT09PW5lJiZRPjg1Mnx8Mj09PW5lJiZRPjU5MilyZXR1cm4gMTt1ZVtrZT1yZSZU'@;
put 'ZV09TTw8MjR8eTw8MTZ8UGUtY2V8MH19cmV0dXJuIDAhPT1yZSYmKHVlW1BlK3JlXT1OLXA8PDI0fDY0PDwxNnwwKSxiLmJpdHM9TSwwfX0seyIuLi91dGlscy9jb21tb24iOjI3fV0sMzc6W2Z1bmN0aW9uKEIsTCxLKXsidXNlIHN0cmljdCI7TC5leHBvcnRzPXsyOiJuZWVkIGRpY3Rpb25h'@;
put 'cnkiLDE6InN0cmVhbSBlbmQiLDA6IiIsIi0xIjoiZmlsZSBlcnJvciIsIi0yIjoic3RyZWFtIGVycm9yIiwiLTMiOiJkYXRhIGVycm9yIiwiLTQiOiJpbnN1ZmZpY2llbnQgbWVtb3J5IiwiLTUiOiJidWZmZXIgZXJyb3IiLCItNiI6ImluY29tcGF0aWJsZSB2ZXJzaW9uIn19LHt9XSwzODpb'@;
put 'ZnVuY3Rpb24oQixMLEspeyJ1c2Ugc3RyaWN0Ijt2YXIgSj1CKCIuLi91dGlscy9jb21tb24iKTtmdW5jdGlvbiBqKHB0KXtmb3IodmFyIHBuPXB0Lmxlbmd0aDstLXBuPj0wOylwdFtwbl09MH12YXIgY2U9MTUsWT0xNixDPVswLDAsMCwwLDAsMCwwLDAsMSwxLDEsMSwyLDIsMiwyLDMsMywz'@;
put 'LDMsNCw0LDQsNCw1LDUsNSw1LDBdLE09WzAsMCwwLDAsMSwxLDIsMiwzLDMsNCw0LDUsNSw2LDYsNyw3LDgsOCw5LDksMTAsMTAsMTEsMTEsMTIsMTIsMTMsMTNdLHk9WzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwzLDddLHA9WzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDEx'@;
put 'LDQsMTIsMywxMywyLDE0LDEsMTVdLFE9bmV3IEFycmF5KDU3Nik7aihRKTt2YXIgcmU9bmV3IEFycmF5KDYwKTtqKHJlKTt2YXIgZmU9bmV3IEFycmF5KDUxMik7aihmZSk7dmFyIG1lPW5ldyBBcnJheSgyNTYpO2oobWUpO3ZhciBrZT1uZXcgQXJyYXkoMjkpO2ooa2UpO3ZhciBUZT1uZXcg'@;
put 'QXJyYXkoMzApO2ooVGUpO3ZhciBGZSxOZSxMZSxQZT1mdW5jdGlvbihwdCxwbixobixDdCxlbil7dGhpcy5zdGF0aWNfdHJlZT1wdCx0aGlzLmV4dHJhX2JpdHM9cG4sdGhpcy5leHRyYV9iYXNlPWhuLHRoaXMuZWxlbXM9Q3QsdGhpcy5tYXhfbGVuZ3RoPWVuLHRoaXMuaGFzX3N0cmVlPXB0'@;
put 'JiZwdC5sZW5ndGh9LEJlPWZ1bmN0aW9uKHB0LHBuKXt0aGlzLmR5bl90cmVlPXB0LHRoaXMubWF4X2NvZGU9MCx0aGlzLnN0YXRfZGVzYz1wbn07ZnVuY3Rpb24gSGUocHQpe3JldHVybiBwdDwyNTY/ZmVbcHRdOmZlWzI1NisocHQ+Pj43KV19ZnVuY3Rpb24gUWUocHQscG4pe3B0LnBlbmRp'@;
put 'bmdfYnVmW3B0LnBlbmRpbmcrK109MjU1JnBuLHB0LnBlbmRpbmdfYnVmW3B0LnBlbmRpbmcrK109cG4+Pj44JjI1NX1mdW5jdGlvbiBtdChwdCxwbixobil7cHQuYmlfdmFsaWQ+WS1obj8ocHQuYmlfYnVmfD1wbjw8cHQuYmlfdmFsaWQmNjU1MzUsUWUocHQscHQuYmlfYnVmKSxwdC5iaV9i'@;
put 'dWY9cG4+PlktcHQuYmlfdmFsaWQscHQuYmlfdmFsaWQrPWhuLVkpOihwdC5iaV9idWZ8PXBuPDxwdC5iaV92YWxpZCY2NTUzNSxwdC5iaV92YWxpZCs9aG4pfWZ1bmN0aW9uIEtlKHB0LHBuLGhuKXttdChwdCxoblsyKnBuXSxoblsyKnBuKzFdKX1mdW5jdGlvbiB3ZShwdCxwbil7dmFyIGhu'@;
put 'PTA7ZG97aG58PTEmcHQscHQ+Pj49MSxobjw8PTF9d2hpbGUoLS1wbj4wKTtyZXR1cm4gaG4+Pj4xfWZ1bmN0aW9uIGV0KHB0LHBuLGhuKXt2YXIgX3QsVnQsQ3Q9bmV3IEFycmF5KGNlKzEpLGVuPTA7Zm9yKF90PTE7X3Q8PWNlO190KyspQ3RbX3RdPWVuPWVuK2huW190LTFdPDwxO2ZvcihW'@;
put 'dD0wO1Z0PD1wbjtWdCsrKXt2YXIgX249cHRbMipWdCsxXTswIT09X24mJihwdFsyKlZ0XT13ZShDdFtfbl0rKyxfbikpfX1mdW5jdGlvbiBxZShwdCl7dmFyIHBuO2Zvcihwbj0wO3BuPDI4NjtwbisrKXB0LmR5bl9sdHJlZVsyKnBuXT0wO2Zvcihwbj0wO3BuPDMwO3BuKyspcHQuZHluX2R0'@;
put 'cmVlWzIqcG5dPTA7Zm9yKHBuPTA7cG48MTk7cG4rKylwdC5ibF90cmVlWzIqcG5dPTA7cHQuZHluX2x0cmVlWzUxMl09MSxwdC5vcHRfbGVuPXB0LnN0YXRpY19sZW49MCxwdC5sYXN0X2xpdD1wdC5tYXRjaGVzPTB9ZnVuY3Rpb24gaHQocHQpe3B0LmJpX3ZhbGlkPjg/UWUocHQscHQuYmlf'@;
put 'YnVmKTpwdC5iaV92YWxpZD4wJiYocHQucGVuZGluZ19idWZbcHQucGVuZGluZysrXT1wdC5iaV9idWYpLHB0LmJpX2J1Zj0wLHB0LmJpX3ZhbGlkPTB9ZnVuY3Rpb24gRGUocHQscG4saG4sQ3Qpe3ZhciBlbj0yKnBuLF90PTIqaG47cmV0dXJuIHB0W2VuXTxwdFtfdF18fHB0W2VuXT09PXB0'@;
put 'W190XSYmQ3RbcG5dPD1DdFtobl19ZnVuY3Rpb24gJGUocHQscG4saG4pe2Zvcih2YXIgQ3Q9cHQuaGVhcFtobl0sZW49aG48PDE7ZW48PXB0LmhlYXBfbGVuJiYoZW48cHQuaGVhcF9sZW4mJkRlKHBuLHB0LmhlYXBbZW4rMV0scHQuaGVhcFtlbl0scHQuZGVwdGgpJiZlbisrLCFEZShwbixD'@;
put 'dCxwdC5oZWFwW2VuXSxwdC5kZXB0aCkpOylwdC5oZWFwW2huXT1wdC5oZWFwW2VuXSxobj1lbixlbjw8PTE7cHQuaGVhcFtobl09Q3R9ZnVuY3Rpb24gYXQocHQscG4saG4pe3ZhciBDdCxlbixWdCxfbixfdD0wO2lmKDAhPT1wdC5sYXN0X2xpdClkb3tDdD1wdC5wZW5kaW5nX2J1ZltwdC5k'@;
put 'X2J1ZisyKl90XTw8OHxwdC5wZW5kaW5nX2J1ZltwdC5kX2J1ZisyKl90KzFdLGVuPXB0LnBlbmRpbmdfYnVmW3B0LmxfYnVmK190XSxfdCsrLDA9PT1DdD9LZShwdCxlbixwbik6KEtlKHB0LChWdD1tZVtlbl0pKzI1NisxLHBuKSwwIT09KF9uPUNbVnRdKSYmbXQocHQsZW4tPWtlW1Z0XSxf'@;
put 'biksS2UocHQsVnQ9SGUoLS1DdCksaG4pLDAhPT0oX249TVtWdF0pJiZtdChwdCxDdC09VGVbVnRdLF9uKSl9d2hpbGUoX3Q8cHQubGFzdF9saXQpO0tlKHB0LDI1Nixwbil9ZnVuY3Rpb24gY3QocHQscG4pe3ZhciBWdCxfbixJdCxobj1wbi5keW5fdHJlZSxDdD1wbi5zdGF0X2Rlc2Muc3Rh'@;
put 'dGljX3RyZWUsZW49cG4uc3RhdF9kZXNjLmhhc19zdHJlZSxfdD1wbi5zdGF0X2Rlc2MuZWxlbXMsb3Q9LTE7Zm9yKHB0LmhlYXBfbGVuPTAscHQuaGVhcF9tYXg9NTczLFZ0PTA7VnQ8X3Q7VnQrKykwIT09aG5bMipWdF0/KHB0LmhlYXBbKytwdC5oZWFwX2xlbl09b3Q9VnQscHQuZGVwdGhb'@;
put 'VnRdPTApOmhuWzIqVnQrMV09MDtmb3IoO3B0LmhlYXBfbGVuPDI7KWhuWzIqKEl0PXB0LmhlYXBbKytwdC5oZWFwX2xlbl09b3Q8Mj8rK290OjApXT0xLHB0LmRlcHRoW0l0XT0wLHB0Lm9wdF9sZW4tLSxlbiYmKHB0LnN0YXRpY19sZW4tPUN0WzIqSXQrMV0pO2Zvcihwbi5tYXhfY29kZT1v'@;
put 'dCxWdD1wdC5oZWFwX2xlbj4+MTtWdD49MTtWdC0tKSRlKHB0LGhuLFZ0KTtJdD1fdDtkb3tWdD1wdC5oZWFwWzFdLHB0LmhlYXBbMV09cHQuaGVhcFtwdC5oZWFwX2xlbi0tXSwkZShwdCxobiwxKSxfbj1wdC5oZWFwWzFdLHB0LmhlYXBbLS1wdC5oZWFwX21heF09VnQscHQuaGVhcFstLXB0'@;
put 'LmhlYXBfbWF4XT1fbixoblsyKkl0XT1oblsyKlZ0XStoblsyKl9uXSxwdC5kZXB0aFtJdF09KHB0LmRlcHRoW1Z0XT49cHQuZGVwdGhbX25dP3B0LmRlcHRoW1Z0XTpwdC5kZXB0aFtfbl0pKzEsaG5bMipWdCsxXT1oblsyKl9uKzFdPUl0LHB0LmhlYXBbMV09SXQrKywkZShwdCxobiwxKX13'@;
put 'aGlsZShwdC5oZWFwX2xlbj49Mik7cHQuaGVhcFstLXB0LmhlYXBfbWF4XT1wdC5oZWFwWzFdLGZ1bmN0aW9uIE9lKHB0LHBuKXt2YXIgSXQsbm4sRHQsdnQsR3QsTG4saG49cG4uZHluX3RyZWUsQ3Q9cG4ubWF4X2NvZGUsZW49cG4uc3RhdF9kZXNjLnN0YXRpY190cmVlLF90PXBuLnN0YXRf'@;
put 'ZGVzYy5oYXNfc3RyZWUsVnQ9cG4uc3RhdF9kZXNjLmV4dHJhX2JpdHMsX249cG4uc3RhdF9kZXNjLmV4dHJhX2Jhc2Usb3Q9cG4uc3RhdF9kZXNjLm1heF9sZW5ndGgsenQ9MDtmb3IodnQ9MDt2dDw9Y2U7dnQrKylwdC5ibF9jb3VudFt2dF09MDtmb3IoaG5bMipwdC5oZWFwW3B0LmhlYXBf'@;
put 'bWF4XSsxXT0wLEl0PXB0LmhlYXBfbWF4KzE7SXQ8NTczO0l0KyspKHZ0PWhuWzIqaG5bMioobm49cHQuaGVhcFtJdF0pKzFdKzFdKzEpPm90JiYodnQ9b3QsenQrKyksaG5bMipubisxXT12dCwhKG5uPkN0KSYmKHB0LmJsX2NvdW50W3Z0XSsrLEd0PTAsbm4+PV9uJiYoR3Q9VnRbbm4tX25d'@;
put 'KSxwdC5vcHRfbGVuKz0oTG49aG5bMipubl0pKih2dCtHdCksX3QmJihwdC5zdGF0aWNfbGVuKz1MbiooZW5bMipubisxXStHdCkpKTtpZigwIT09enQpe2Rve2Zvcih2dD1vdC0xOzA9PT1wdC5ibF9jb3VudFt2dF07KXZ0LS07cHQuYmxfY291bnRbdnRdLS0scHQuYmxfY291bnRbdnQrMV0r'@;
put 'PTIscHQuYmxfY291bnRbb3RdLS0senQtPTJ9d2hpbGUoenQ+MCk7Zm9yKHZ0PW90OzAhPT12dDt2dC0tKWZvcihubj1wdC5ibF9jb3VudFt2dF07MCE9PW5uOykhKChEdD1wdC5oZWFwWy0tSXRdKT5DdCkmJihoblsyKkR0KzFdIT09dnQmJihwdC5vcHRfbGVuKz0odnQtaG5bMipEdCsxXSkq'@;
put 'aG5bMipEdF0saG5bMipEdCsxXT12dCksbm4tLSl9fShwdCxwbiksZXQoaG4sb3QscHQuYmxfY291bnQpfWZ1bmN0aW9uIE90KHB0LHBuLGhuKXt2YXIgQ3QsX3QsZW49LTEsVnQ9cG5bMV0sX249MCxvdD03LEl0PTQ7Zm9yKDA9PT1WdCYmKG90PTEzOCxJdD0zKSxwblsyKihobisxKSsxXT02'@;
put 'NTUzNSxDdD0wO0N0PD1objtDdCsrKV90PVZ0LFZ0PXBuWzIqKEN0KzEpKzFdLCEoKytfbjxvdCYmX3Q9PT1WdCkmJihfbjxJdD9wdC5ibF90cmVlWzIqX3RdKz1fbjowIT09X3Q/KF90IT09ZW4mJnB0LmJsX3RyZWVbMipfdF0rKyxwdC5ibF90cmVlWzMyXSsrKTpfbjw9MTA/cHQuYmxfdHJl'@;
put 'ZVszNF0rKzpwdC5ibF90cmVlWzM2XSsrLF9uPTAsZW49X3QsMD09PVZ0PyhvdD0xMzgsSXQ9Myk6X3Q9PT1WdD8ob3Q9NixJdD0zKToob3Q9NyxJdD00KSl9ZnVuY3Rpb24gUHQocHQscG4saG4pe3ZhciBDdCxfdCxlbj0tMSxWdD1wblsxXSxfbj0wLG90PTcsSXQ9NDtmb3IoMD09PVZ0JiYo'@;
put 'b3Q9MTM4LEl0PTMpLEN0PTA7Q3Q8PWhuO0N0KyspaWYoX3Q9VnQsVnQ9cG5bMiooQ3QrMSkrMV0sISgrK19uPG90JiZfdD09PVZ0KSl7aWYoX248SXQpZG97S2UocHQsX3QscHQuYmxfdHJlZSl9d2hpbGUoMCE9LS1fbik7ZWxzZSAwIT09X3Q/KF90IT09ZW4mJihLZShwdCxfdCxwdC5ibF90'@;
put 'cmVlKSxfbi0tKSxLZShwdCwxNixwdC5ibF90cmVlKSxtdChwdCxfbi0zLDIpKTpfbjw9MTA/KEtlKHB0LDE3LHB0LmJsX3RyZWUpLG10KHB0LF9uLTMsMykpOihLZShwdCwxOCxwdC5ibF90cmVlKSxtdChwdCxfbi0xMSw3KSk7X249MCxlbj1fdCwwPT09VnQ/KG90PTEzOCxJdD0zKTpfdD09'@;
put 'PVZ0PyhvdD02LEl0PTMpOihvdD03LEl0PTQpfX12YXIgTnQ9ITE7ZnVuY3Rpb24gR24ocHQscG4saG4sQ3Qpe210KHB0LDArKEN0PzE6MCksMyksZnVuY3Rpb24gRWUocHQscG4saG4sQ3Qpe2h0KHB0KSxDdCYmKFFlKHB0LGhuKSxRZShwdCx+aG4pKSxKLmFycmF5U2V0KHB0LnBlbmRpbmdf'@;
put 'YnVmLHB0LndpbmRvdyxwbixobixwdC5wZW5kaW5nKSxwdC5wZW5kaW5nKz1obn0ocHQscG4saG4sITApfUsuX3RyX2luaXQ9ZnVuY3Rpb24gYm4ocHQpe050fHwoZnVuY3Rpb24gbnQoKXt2YXIgcHQscG4saG4sQ3QsZW4sX3Q9bmV3IEFycmF5KGNlKzEpO2Zvcihobj0wLEN0PTA7Q3Q8Mjg7'@;
put 'Q3QrKylmb3Ioa2VbQ3RdPWhuLHB0PTA7cHQ8MTw8Q1tDdF07cHQrKyltZVtobisrXT1DdDtmb3IobWVbaG4tMV09Q3QsZW49MCxDdD0wO0N0PDE2O0N0KyspZm9yKFRlW0N0XT1lbixwdD0wO3B0PDE8PE1bQ3RdO3B0KyspZmVbZW4rK109Q3Q7Zm9yKGVuPj49NztDdDwzMDtDdCsrKWZvcihU'@;
put 'ZVtDdF09ZW48PDcscHQ9MDtwdDwxPDxNW0N0XS03O3B0KyspZmVbMjU2K2VuKytdPUN0O2Zvcihwbj0wO3BuPD1jZTtwbisrKV90W3BuXT0wO2ZvcihwdD0wO3B0PD0xNDM7KVFbMipwdCsxXT04LHB0KyssX3RbOF0rKztmb3IoO3B0PD0yNTU7KVFbMipwdCsxXT05LHB0KyssX3RbOV0rKztm'@;
put 'b3IoO3B0PD0yNzk7KVFbMipwdCsxXT03LHB0KyssX3RbN10rKztmb3IoO3B0PD0yODc7KVFbMipwdCsxXT04LHB0KyssX3RbOF0rKztmb3IoZXQoUSwyODcsX3QpLHB0PTA7cHQ8MzA7cHQrKylyZVsyKnB0KzFdPTUscmVbMipwdF09d2UocHQsNSk7RmU9bmV3IFBlKFEsQywyNTcsMjg2LGNl'@;
put 'KSxOZT1uZXcgUGUocmUsTSwwLDMwLGNlKSxMZT1uZXcgUGUobmV3IEFycmF5KDApLHksMCwxOSw3KX0oKSxOdD0hMCkscHQubF9kZXNjPW5ldyBCZShwdC5keW5fbHRyZWUsRmUpLHB0LmRfZGVzYz1uZXcgQmUocHQuZHluX2R0cmVlLE5lKSxwdC5ibF9kZXNjPW5ldyBCZShwdC5ibF90cmVl'@;
put 'LExlKSxwdC5iaV9idWY9MCxwdC5iaV92YWxpZD0wLHFlKHB0KX0sSy5fdHJfc3RvcmVkX2Jsb2NrPUduLEsuX3RyX2ZsdXNoX2Jsb2NrPWZ1bmN0aW9uICRuKHB0LHBuLGhuLEN0KXt2YXIgZW4sX3QsVnQ9MDtwdC5sZXZlbD4wPygyPT09cHQuc3RybS5kYXRhX3R5cGUmJihwdC5zdHJtLmRh'@;
put 'dGFfdHlwZT1mdW5jdGlvbiBtbihwdCl7dmFyIGhuLHBuPTQwOTM2MjQ0NDc7Zm9yKGhuPTA7aG48PTMxO2huKysscG4+Pj49MSlpZigxJnBuJiYwIT09cHQuZHluX2x0cmVlWzIqaG5dKXJldHVybiAwO2lmKDAhPT1wdC5keW5fbHRyZWVbMThdfHwwIT09cHQuZHluX2x0cmVlWzIwXXx8MCE9'@;
put 'PXB0LmR5bl9sdHJlZVsyNl0pcmV0dXJuIDE7Zm9yKGhuPTMyO2huPDI1NjtobisrKWlmKDAhPT1wdC5keW5fbHRyZWVbMipobl0pcmV0dXJuIDE7cmV0dXJuIDB9KHB0KSksY3QocHQscHQubF9kZXNjKSxjdChwdCxwdC5kX2Rlc2MpLFZ0PWZ1bmN0aW9uIEF0KHB0KXt2YXIgcG47Zm9yKE90'@;
put 'KHB0LHB0LmR5bl9sdHJlZSxwdC5sX2Rlc2MubWF4X2NvZGUpLE90KHB0LHB0LmR5bl9kdHJlZSxwdC5kX2Rlc2MubWF4X2NvZGUpLGN0KHB0LHB0LmJsX2Rlc2MpLHBuPTE4O3BuPj0zJiYwPT09cHQuYmxfdHJlZVsyKnBbcG5dKzFdO3BuLS0pO3JldHVybiBwdC5vcHRfbGVuKz0zKihwbisx'@;
put 'KSs1KzUrNCxwbn0ocHQpLChfdD1wdC5zdGF0aWNfbGVuKzMrNz4+PjMpPD0oZW49cHQub3B0X2xlbiszKzc+Pj4zKSYmKGVuPV90KSk6ZW49X3Q9aG4rNSxobis0PD1lbiYmLTEhPT1wbj9HbihwdCxwbixobixDdCk6ND09PXB0LnN0cmF0ZWd5fHxfdD09PWVuPyhtdChwdCwyKyhDdD8xOjAp'@;
put 'LDMpLGF0KHB0LFEscmUpKToobXQocHQsNCsoQ3Q/MTowKSwzKSxmdW5jdGlvbiBKdChwdCxwbixobixDdCl7dmFyIGVuO2ZvcihtdChwdCxwbi0yNTcsNSksbXQocHQsaG4tMSw1KSxtdChwdCxDdC00LDQpLGVuPTA7ZW48Q3Q7ZW4rKyltdChwdCxwdC5ibF90cmVlWzIqcFtlbl0rMV0sMyk7'@;
put 'UHQocHQscHQuZHluX2x0cmVlLHBuLTEpLFB0KHB0LHB0LmR5bl9kdHJlZSxobi0xKX0ocHQscHQubF9kZXNjLm1heF9jb2RlKzEscHQuZF9kZXNjLm1heF9jb2RlKzEsVnQrMSksYXQocHQscHQuZHluX2x0cmVlLHB0LmR5bl9kdHJlZSkpLHFlKHB0KSxDdCYmaHQocHQpfSxLLl90cl90YWxs'@;
put 'eT1mdW5jdGlvbiBObihwdCxwbixobil7cmV0dXJuIHB0LnBlbmRpbmdfYnVmW3B0LmRfYnVmKzIqcHQubGFzdF9saXRdPXBuPj4+OCYyNTUscHQucGVuZGluZ19idWZbcHQuZF9idWYrMipwdC5sYXN0X2xpdCsxXT0yNTUmcG4scHQucGVuZGluZ19idWZbcHQubF9idWYrcHQubGFzdF9saXRd'@;
put 'PTI1NSZobixwdC5sYXN0X2xpdCsrLDA9PT1wbj9wdC5keW5fbHRyZWVbMipobl0rKzoocHQubWF0Y2hlcysrLHBuLS0scHQuZHluX2x0cmVlWzIqKG1lW2huXSsyNTYrMSldKysscHQuZHluX2R0cmVlWzIqSGUocG4pXSsrKSxwdC5sYXN0X2xpdD09PXB0LmxpdF9idWZzaXplLTF9LEsuX3Ry'@;
put 'X2FsaWduPWZ1bmN0aW9uIG9uKHB0KXttdChwdCwyLDMpLEtlKHB0LDI1NixRKSxmdW5jdGlvbiBJZShwdCl7MTY9PT1wdC5iaV92YWxpZD8oUWUocHQscHQuYmlfYnVmKSxwdC5iaV9idWY9MCxwdC5iaV92YWxpZD0wKTpwdC5iaV92YWxpZD49OCYmKHB0LnBlbmRpbmdfYnVmW3B0LnBlbmRp'@;
put 'bmcrK109MjU1JnB0LmJpX2J1ZixwdC5iaV9idWY+Pj04LHB0LmJpX3ZhbGlkLT04KX0ocHQpfX0seyIuLi91dGlscy9jb21tb24iOjI3fV0sMzk6W2Z1bmN0aW9uKEIsTCxLKXsidXNlIHN0cmljdCI7TC5leHBvcnRzPWZ1bmN0aW9uIEooKXt0aGlzLmlucHV0PW51bGwsdGhpcy5uZXh0X2lu'@;
put 'PTAsdGhpcy5hdmFpbF9pbj0wLHRoaXMudG90YWxfaW49MCx0aGlzLm91dHB1dD1udWxsLHRoaXMubmV4dF9vdXQ9MCx0aGlzLmF2YWlsX291dD0wLHRoaXMudG90YWxfb3V0PTAsdGhpcy5tc2c9IiIsdGhpcy5zdGF0ZT1udWxsLHRoaXMuZGF0YV90eXBlPTIsdGhpcy5hZGxlcj0wfX0se31d'@;
put 'fSx7fSxbOV0pKDkpfSl9LDgzNDE3OihXZSx6ZSxUKT0+eyFmdW5jdGlvbiBrKEgpe0gudmVyc2lvbj0iMS4yMDIxMTEyMi4xIjt2YXIgQj0xMjAwLEw9MTI1Mjt0eXBlb2YgY3B0YWJsZT4idSImJih0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWwuY3B0YWJsZT1UKDgwNzg4KTp0eXBlb2Ygd2lu'@;
put 'ZG93PCJ1IiYmKHdpbmRvdy5jcHRhYmxlPVQoODA3ODgpKSk7Zm9yKHZhciBLPVs4NzQsOTMyLDkzNiw5NDksOTUwLDFlNF0sSj0wO0o8PTg7KytKKUsucHVzaCgxMjUwK0opO3ZhciBJPXswOjEyNTIsMTo2NTAwMSwyOjY1MDAxLDc3OjFlNCwxMjg6OTMyLDEyOTo5NDksMTMwOjEzNjEsMTM0'@;
put 'OjkzNiwxMzY6OTUwLDE2MToxMjUzLDE2MjoxMjU0LDE2MzoxMjU4LDE3NzoxMjU1LDE3ODoxMjU2LDE4NjoxMjU3LDIwNDoxMjUxLDIyMjo4NzQsMjM4OjEyNTAsMjU1OjEyNTIsNjk6Njk2OX0sUj1mdW5jdGlvbih3KXstMSE9Sy5pbmRleE9mKHcpJiYoTD1JWzBdPXcpfSx6PWZ1bmN0aW9u'@;
put 'KHcpe0I9dyxSKHcpfTtmdW5jdGlvbiBqKCl7eigxMjAwKSxmdW5jdGlvbiBFKCl7UigxMjUyKX0oKX1mdW5jdGlvbiBWKHcpe2Zvcih2YXIgUD1bXSxEPTAsZWU9dy5sZW5ndGg7RDxlZTsrK0QpUFtEXT13LmNoYXJDb2RlQXQoRCk7cmV0dXJuIFB9dmFyIFU9ZnVuY3Rpb24odyl7dmFyIFA9'@;
put 'dy5jaGFyQ29kZUF0KDApLEQ9dy5jaGFyQ29kZUF0KDEpO3JldHVybiAyNTU9PVAmJjI1ND09RD9mdW5jdGlvbiBHKHcpe2Zvcih2YXIgUD1bXSxEPTA7RDx3Lmxlbmd0aD4+MTsrK0QpUFtEXT1TdHJpbmcuZnJvbUNoYXJDb2RlKHcuY2hhckNvZGVBdCgyKkQpKyh3LmNoYXJDb2RlQXQoMipE'@;
put 'KzEpPDw4KSk7cmV0dXJuIFAuam9pbigiIil9KHcuc2xpY2UoMikpOjI1ND09UCYmMjU1PT1EP2Z1bmN0aW9uIFcodyl7Zm9yKHZhciBQPVtdLEQ9MDtEPHcubGVuZ3RoPj4xOysrRClQW0RdPVN0cmluZy5mcm9tQ2hhckNvZGUody5jaGFyQ29kZUF0KDIqRCsxKSsody5jaGFyQ29kZUF0KDIq'@;
put 'RCk8PDgpKTtyZXR1cm4gUC5qb2luKCIiKX0ody5zbGljZSgyKSk6NjUyNzk9PVA/dy5zbGljZSgxKTp3fSxxPWZ1bmN0aW9uKFApe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKFApfSx0ZT1mdW5jdGlvbihQKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShQKX07dHlwZW9mIGNwdGFi'@;
put 'bGU8InUiJiYoej1mdW5jdGlvbih3KXtCPXcsUih3KX0sVT1mdW5jdGlvbih3KXtyZXR1cm4gMjU1PT09dy5jaGFyQ29kZUF0KDApJiYyNTQ9PT13LmNoYXJDb2RlQXQoMSk/Y3B0YWJsZS51dGlscy5kZWNvZGUoMTIwMCxWKHcuc2xpY2UoMikpKTp3fSxxPWZ1bmN0aW9uKFApe3JldHVybiAx'@;
put 'MjAwPT09Qj9TdHJpbmcuZnJvbUNoYXJDb2RlKFApOmNwdGFibGUudXRpbHMuZGVjb2RlKEIsWzI1NSZQLFA+PjhdKVswXX0sdGU9ZnVuY3Rpb24oUCl7cmV0dXJuIGNwdGFibGUudXRpbHMuZGVjb2RlKEwsW1BdKVswXX0pO3ZhciBQLG5lPW51bGwsbGU9KFA9IkFCQ0RFRkdISUpLTE1OT1BR'@;
put 'UlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89Iix7ZW5jb2RlOmZ1bmN0aW9uKEQpe2Zvcih2YXIgZWU9IiIsb2U9MCxnZT0wLF9lPTAsdmU9MCxNZT0wLGplPTAsVWU9MCxYZT0wO1hlPEQubGVuZ3RoOyl2ZT0ob2U9RC5jaGFyQ29kZUF0KFhlKyspKT4+'@;
put 'MixNZT0oMyZvZSk8PDR8KGdlPUQuY2hhckNvZGVBdChYZSsrKSk+PjQsamU9KDE1JmdlKTw8MnwoX2U9RC5jaGFyQ29kZUF0KFhlKyspKT4+NixVZT02MyZfZSxpc05hTihnZSk/amU9VWU9NjQ6aXNOYU4oX2UpJiYoVWU9NjQpLGVlKz1QLmNoYXJBdCh2ZSkrUC5jaGFyQXQoTWUpK1AuY2hh'@;
put 'ckF0KGplKStQLmNoYXJBdChVZSk7cmV0dXJuIGVlfSxkZWNvZGU6ZnVuY3Rpb24oZWUpe3ZhciBvZT0iIixNZT0wLGplPTAsVWU9MCxYZT0wO2VlPWVlLnJlcGxhY2UoL1teXHdcK1wvXD1dL2csIiIpO2Zvcih2YXIgaXQ9MDtpdDxlZS5sZW5ndGg7KU1lPVAuaW5kZXhPZihlZS5jaGFyQXQo'@;
put 'aXQrKykpLGplPVAuaW5kZXhPZihlZS5jaGFyQXQoaXQrKykpLG9lKz1TdHJpbmcuZnJvbUNoYXJDb2RlKE1lPDwyfGplPj40KSw2NCE9PShVZT1QLmluZGV4T2YoZWUuY2hhckF0KGl0KyspKSkmJihvZSs9U3RyaW5nLmZyb21DaGFyQ29kZSgoMTUmamUpPDw0fFVlPj4yKSksNjQhPT0oWGU9'@;
put 'UC5pbmRleE9mKGVlLmNoYXJBdChpdCsrKSkpJiYob2UrPVN0cmluZy5mcm9tQ2hhckNvZGUoKDMmVWUpPDw2fFhlKSk7cmV0dXJuIG9lfX0pLGRlPXR5cGVvZiBCdWZmZXI8InUiJiZ0eXBlb2YgcHJvY2VzczwidSImJnR5cGVvZiBwcm9jZXNzLnZlcnNpb25zPCJ1IiYmISFwcm9jZXNzLnZl'@;
put 'cnNpb25zLm5vZGUsdWU9ZnVuY3Rpb24oKXt9O2lmKHR5cGVvZiBCdWZmZXI8InUiKXt2YXIgY2U9IUJ1ZmZlci5mcm9tO2lmKCFjZSl0cnl7QnVmZmVyLmZyb20oImZvbyIsInV0ZjgiKX1jYXRjaHtjZT0hMH11ZT1jZT9mdW5jdGlvbih3LFApe3JldHVybiBQP25ldyBCdWZmZXIodyxQKTpu'@;
put 'ZXcgQnVmZmVyKHcpfTpCdWZmZXIuZnJvbS5iaW5kKEJ1ZmZlciksQnVmZmVyLmFsbG9jfHwoQnVmZmVyLmFsbG9jPWZ1bmN0aW9uKHcpe3JldHVybiBuZXcgQnVmZmVyKHcpfSksQnVmZmVyLmFsbG9jVW5zYWZlfHwoQnVmZmVyLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKHcpe3JldHVybiBuZXcg'@;
put 'QnVmZmVyKHcpfSl9ZnVuY3Rpb24gWSh3KXtyZXR1cm4gZGU/QnVmZmVyLmFsbG9jKHcpOm5ldyBBcnJheSh3KX1mdW5jdGlvbiBiKHcpe3JldHVybiBkZT9CdWZmZXIuYWxsb2NVbnNhZmUodyk6bmV3IEFycmF5KHcpfXZhciB4PWZ1bmN0aW9uKFApe3JldHVybiBkZT91ZShQLCJiaW5hcnki'@;
put 'KTpQLnNwbGl0KCIiKS5tYXAoZnVuY3Rpb24oRCl7cmV0dXJuIDI1NSZELmNoYXJDb2RlQXQoMCl9KX07ZnVuY3Rpb24gTih3KXtpZih0eXBlb2YgQXJyYXlCdWZmZXI+InUiKXJldHVybiB4KHcpO2Zvcih2YXIgUD1uZXcgQXJyYXlCdWZmZXIody5sZW5ndGgpLEQ9bmV3IFVpbnQ4QXJyYXko'@;
put 'UCksZWU9MDtlZSE9dy5sZW5ndGg7KytlZSlEW2VlXT0yNTUmdy5jaGFyQ29kZUF0KGVlKTtyZXR1cm4gUH1mdW5jdGlvbiBGKHcpe2lmKEFycmF5LmlzQXJyYXkodykpcmV0dXJuIHcubWFwKGZ1bmN0aW9uKGVlKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShlZSl9KS5qb2luKCIiKTtm'@;
put 'b3IodmFyIFA9W10sRD0wO0Q8dy5sZW5ndGg7KytEKVBbRF09U3RyaW5nLmZyb21DaGFyQ29kZSh3W0RdKTtyZXR1cm4gUC5qb2luKCIiKX1mdW5jdGlvbiBDKHcpe2lmKHR5cGVvZiBBcnJheUJ1ZmZlcj4idSIpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCIpO2lmKHcgaW5zdGFuY2Vv'@;
put 'ZiBBcnJheUJ1ZmZlcilyZXR1cm4gQyhuZXcgVWludDhBcnJheSh3KSk7Zm9yKHZhciBQPW5ldyBBcnJheSh3Lmxlbmd0aCksRD0wO0Q8dy5sZW5ndGg7KytEKVBbRF09d1tEXTtyZXR1cm4gUH12YXIgTT1mdW5jdGlvbih3KXt2YXIgUD1bXTtyZXR1cm4gdy5mb3JFYWNoKGZ1bmN0aW9uKEQp'@;
put 'e0FycmF5LmlzQXJyYXkoRCk/UD1QLmNvbmNhdChEKToodHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZEIGluc3RhbmNlb2YgVWludDhBcnJheXx8dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmRCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSYmKFA9UC5jb25jYXQoQyhEKSkpfSksUH0seT0vXHUwMDAw'@;
put 'L2cscD0vW1x1MDAwMS1cdTAwMDZdL2csUz17fSxRPWZ1bmN0aW9uKFApe2Z1bmN0aW9uIEQoUXQpe2Zvcih2YXIgdm49IiIsUG49UXQubGVuZ3RoLTE7UG4+PTA7KXZuKz1RdC5jaGFyQXQoUG4tLSk7cmV0dXJuIHZufWZ1bmN0aW9uIGVlKFF0LHZuKXtmb3IodmFyIFBuPSIiO1BuLmxlbmd0'@;
put 'aDx2bjspUG4rPVF0O3JldHVybiBQbn1mdW5jdGlvbiBvZShRdCx2bil7dmFyIFBuPSIiK1F0O3JldHVybiBQbi5sZW5ndGg+PXZuP1BuOmVlKCIwIix2bi1Qbi5sZW5ndGgpK1BufWZ1bmN0aW9uIGdlKFF0LHZuKXt2YXIgUG49IiIrUXQ7cmV0dXJuIFBuLmxlbmd0aD49dm4/UG46ZWUoIiAi'@;
put 'LHZuLVBuLmxlbmd0aCkrUG59ZnVuY3Rpb24gX2UoUXQsdm4pe3ZhciBQbj0iIitRdDtyZXR1cm4gUG4ubGVuZ3RoPj12bj9QbjpQbitlZSgiICIsdm4tUG4ubGVuZ3RoKX1QLnZlcnNpb249IjEuMjAyMTA3MjYuMSI7dmFyIGplPU1hdGgucG93KDIsMzIpO2Z1bmN0aW9uIFVlKFF0LHZuKXty'@;
put 'ZXR1cm4gUXQ+amV8fFF0PC1qZT9mdW5jdGlvbiB2ZShRdCx2bil7dmFyIFBuPSIiK01hdGgucm91bmQoUXQpO3JldHVybiBQbi5sZW5ndGg+PXZuP1BuOmVlKCIwIix2bi1Qbi5sZW5ndGgpK1BufShRdCx2bik6ZnVuY3Rpb24gTWUoUXQsdm4pe3ZhciBQbj0iIitRdDtyZXR1cm4gUG4ubGVu'@;
put 'Z3RoPj12bj9QbjplZSgiMCIsdm4tUG4ubGVuZ3RoKStQbn0oTWF0aC5yb3VuZChRdCksdm4pfWZ1bmN0aW9uIFhlKFF0LHZuKXtyZXR1cm4gUXQubGVuZ3RoPj03Kyh2bj12bnx8MCkmJjEwMz09KDMyfFF0LmNoYXJDb2RlQXQodm4pKSYmMTAxPT0oMzJ8UXQuY2hhckNvZGVBdCh2bisxKSkm'@;
put 'JjExMD09KDMyfFF0LmNoYXJDb2RlQXQodm4rMikpJiYxMDE9PSgzMnxRdC5jaGFyQ29kZUF0KHZuKzMpKSYmMTE0PT0oMzJ8UXQuY2hhckNvZGVBdCh2bis0KSkmJjk3PT0oMzJ8UXQuY2hhckNvZGVBdCh2bis1KSkmJjEwOD09KDMyfFF0LmNoYXJDb2RlQXQodm4rNikpfWZ1bmN0aW9uIGl0'@;
put 'KFF0KXtmb3IodmFyIHZuPVtdLFBuPU9iamVjdC5rZXlzKFF0KSwkcj0wOyRyIT09UG4ubGVuZ3RoOysrJHIpdm5bUXRbUG5bJHJdXV09UG5bJHJdO3JldHVybiB2bn12YXIgZnQ9W1siU3VuIiwiU3VuZGF5Il0sWyJNb24iLCJNb25kYXkiXSxbIlR1ZSIsIlR1ZXNkYXkiXSxbIldlZCIsIldl'@;
put 'ZG5lc2RheSJdLFsiVGh1IiwiVGh1cnNkYXkiXSxbIkZyaSIsIkZyaWRheSJdLFsiU2F0IiwiU2F0dXJkYXkiXV0sTXQ9W1siSiIsIkphbiIsIkphbnVhcnkiXSxbIkYiLCJGZWIiLCJGZWJydWFyeSJdLFsiTSIsIk1hciIsIk1hcmNoIl0sWyJBIiwiQXByIiwiQXByaWwiXSxbIk0iLCJNYXki'@;
put 'LCJNYXkiXSxbIkoiLCJKdW4iLCJKdW5lIl0sWyJKIiwiSnVsIiwiSnVseSJdLFsiQSIsIkF1ZyIsIkF1Z3VzdCJdLFsiUyIsIlNlcCIsIlNlcHRlbWJlciJdLFsiTyIsIk9jdCIsIk9jdG9iZXIiXSxbIk4iLCJOb3YiLCJOb3ZlbWJlciJdLFsiRCIsIkRlYyIsIkRlY2VtYmVyIl1dO2Z1bmN0'@;
put 'aW9uIHV0KFF0KXtRdFswXT0iR2VuZXJhbCIsUXRbMV09IjAiLFF0WzJdPSIwLjAwIixRdFszXT0iIywjIzAiLFF0WzRdPSIjLCMjMC4wMCIsUXRbOV09IjAlIixRdFsxMF09IjAuMDAlIixRdFsxMV09IjAuMDBFKzAwIixRdFsxMl09IiMgPy8/IixRdFsxM109IiMgPz8vPz8iLFF0WzE0XT0i'@;
put 'bS9kL3l5IixRdFsxNV09ImQtbW1tLXl5IixRdFsxNl09ImQtbW1tIixRdFsxN109Im1tbS15eSIsUXRbMThdPSJoOm1tIEFNL1BNIixRdFsxOV09Img6bW06c3MgQU0vUE0iLFF0WzIwXT0iaDptbSIsUXRbMjFdPSJoOm1tOnNzIixRdFsyMl09Im0vZC95eSBoOm1tIixRdFszN109IiMsIyMw'@;
put 'IDsoIywjIzApIixRdFszOF09IiMsIyMwIDtbUmVkXSgjLCMjMCkiLFF0WzM5XT0iIywjIzAuMDA7KCMsIyMwLjAwKSIsUXRbNDBdPSIjLCMjMC4wMDtbUmVkXSgjLCMjMC4wMCkiLFF0WzQ1XT0ibW06c3MiLFF0WzQ2XT0iW2hdOm1tOnNzIixRdFs0N109Im1tc3MuMCIsUXRbNDhdPSIjIzAu'@;
put 'MEUrMCIsUXRbNDldPSJAIixRdFs1Nl09JyJcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4ICJoaCJcdTY2NDIibW0iXHU1MjA2InNzIlx1NzlkMiAiJyx4bihRdCl9dmFyIHd0PXt9O3V0KHd0KTt2YXIgSHQ9W10sa3Q9MDtmb3Ioa3Q9NTtrdDw9ODsrK2t0KUh0W2t0XT0zMitrdDtmb3Ioa3Q9'@;
put 'MjM7a3Q8PTI2Oysra3QpSHRba3RdPTA7Zm9yKGt0PTI3O2t0PD0zMTsrK2t0KUh0W2t0XT0xNDtmb3Ioa3Q9NTA7a3Q8PTU4Oysra3QpSHRba3RdPTE0O2ZvcihrdD01OTtrdDw9NjI7KytrdClIdFtrdF09a3QtNTg7Zm9yKGt0PTY3O2t0PD02ODsrK2t0KUh0W2t0XT1rdC01ODtmb3Ioa3Q9'@;
put 'NzI7a3Q8PTc1Oysra3QpSHRba3RdPWt0LTU4O2ZvcihrdD02NztrdDw9Njg7KytrdClIdFtrdF09a3QtNTc7Zm9yKGt0PTc2O2t0PD03ODsrK2t0KUh0W2t0XT1rdC01Njtmb3Ioa3Q9Nzk7a3Q8PTgxOysra3QpSHRba3RdPWt0LTM0O3ZhciBUdD1bXTtmdW5jdGlvbiBZdChRdCx2bixQbil7'@;
put 'Zm9yKHZhciAkcj1RdDwwPy0xOjEsWG49UXQqJHIsbmk9MCxvcj0xLG9pPTAseW89MSxhaT0wLFVpPTAsZWk9TWF0aC5mbG9vcihYbik7YWk8dm4mJihvaT0oZWk9TWF0aC5mbG9vcihYbikpKm9yK25pLFVpPWVpKmFpK3lvLCEoWG4tZWk8NWUtOCkpOylYbj0xLyhYbi1laSksbmk9b3Isb3I9'@;
put 'b2kseW89YWksYWk9VWk7aWYoVWk+dm4mJihhaT52bj8oVWk9eW8sb2k9bmkpOihVaT1haSxvaT1vcikpLCFQbilyZXR1cm5bMCwkcipvaSxVaV07dmFyIGthPU1hdGguZmxvb3IoJHIqb2kvVWkpO3JldHVybltrYSwkcipvaS1rYSpVaSxVaV19ZnVuY3Rpb24gZ24oUXQsdm4sUG4pe2lmKFF0'@;
put 'PjI5NTg0NjV8fFF0PDApcmV0dXJuIG51bGw7dmFyICRyPTB8UXQsWG49TWF0aC5mbG9vcig4NjQwMCooUXQtJHIpKSxuaT0wLG9yPVtdLG9pPXtEOiRyLFQ6WG4sdTo4NjQwMCooUXQtJHIpLVhuLHk6MCxtOjAsZDowLEg6MCxNOjAsUzowLHE6MH07aWYoTWF0aC5hYnMob2kudSk8MWUtNiYm'@;
put 'KG9pLnU9MCksdm4mJnZuLmRhdGUxOTA0JiYoJHIrPTE0NjIpLG9pLnU+Ljk5OTkmJihvaS51PTAsODY0MDA9PSsrWG4mJihvaS5UPVhuPTAsKyskciwrK29pLkQpKSw2MD09PSRyKW9yPVBuP1sxMzE3LDEwLDI5XTpbMTkwMCwyLDI5XSxuaT0zO2Vsc2UgaWYoMD09PSRyKW9yPVBuP1sxMzE3'@;
put 'LDgsMjldOlsxOTAwLDEsMF0sbmk9NjtlbHNleyRyPjYwJiYtLSRyO3ZhciB5bz1uZXcgRGF0ZSgxOTAwLDAsMSk7eW8uc2V0RGF0ZSh5by5nZXREYXRlKCkrJHItMSksb3I9W3lvLmdldEZ1bGxZZWFyKCkseW8uZ2V0TW9udGgoKSsxLHlvLmdldERhdGUoKV0sbmk9eW8uZ2V0RGF5KCksJHI8'@;
put 'NjAmJihuaT0obmkrNiklNyksUG4mJihuaT1mdW5jdGlvbiB3byhRdCx2bil7dm5bMF0tPTU4MTt2YXIgUG49UXQuZ2V0RGF5KCk7cmV0dXJuIFF0PDYwJiYoUG49KFBuKzYpJTcpLFBufSh5byxvcikpfXJldHVybiBvaS55PW9yWzBdLG9pLm09b3JbMV0sb2kuZD1vclsyXSxvaS5TPVhuJTYw'@;
put 'LFhuPU1hdGguZmxvb3IoWG4vNjApLG9pLk09WG4lNjAsWG49TWF0aC5mbG9vcihYbi82MCksb2kuSD1YbixvaS5xPW5pLG9pfVR0WzVdPVR0WzYzXT0nIiQiIywjIzBfKTtcXCgiJCIjLCMjMFxcKScsVHRbNl09VHRbNjRdPSciJCIjLCMjMF8pO1tSZWRdXFwoIiQiIywjIzBcXCknLFR0Wzdd'@;
put 'PVR0WzY1XT0nIiQiIywjIzAuMDBfKTtcXCgiJCIjLCMjMC4wMFxcKScsVHRbOF09VHRbNjZdPSciJCIjLCMjMC4wMF8pO1tSZWRdXFwoIiQiIywjIzAuMDBcXCknLFR0WzQxXT0nXygqICMsIyMwXyk7XygqIFxcKCMsIyMwXFwpO18oKiAiLSJfKTtfKEBfKScsVHRbNDJdPSdfKCIkIiogIywj'@;
put 'IzBfKTtfKCIkIiogXFwoIywjIzBcXCk7XygiJCIqICItIl8pO18oQF8pJyxUdFs0M109J18oKiAjLCMjMC4wMF8pO18oKiBcXCgjLCMjMC4wMFxcKTtfKCogIi0iPz9fKTtfKEBfKScsVHRbNDRdPSdfKCIkIiogIywjIzAuMDBfKTtfKCIkIiogXFwoIywjIzAuMDBcXCk7XygiJCIqICItIj8/'@;
put 'Xyk7XyhAXyknLFAucGFyc2VfZGF0ZV9jb2RlPWduO3ZhciBxbj1uZXcgRGF0ZSgxODk5LDExLDMxLDAsMCwwKSxmbj1xbi5nZXRUaW1lKCksS249bmV3IERhdGUoMTkwMCwyLDEsMCwwLDApO2Z1bmN0aW9uIHpuKFF0LHZuKXt2YXIgUG49UXQuZ2V0VGltZSgpO3JldHVybiB2bj9Qbi09MTI2'@;
put 'MjMwNGU1OlF0Pj1LbiYmKFBuKz04NjRlNSksKFBuLShmbis2ZTQqKFF0LmdldFRpbWV6b25lT2Zmc2V0KCktcW4uZ2V0VGltZXpvbmVPZmZzZXQoKSkpKS84NjRlNX12YXIgT249IiIsZXI9eyJlbi11cyI6e3k6InkiLGQ6ImQiLCIsIjoiLCIsIi4iOiIuIixkYXRlOiJfLyJ9LCJkZS1kZSI6'@;
put 'e3k6ImoiLGQ6InQiLCIsIjoiLiIsIi4iOiIsIixkYXRlOiJfLiJ9LCJpdC1pdCI6e3k6InkiLGQ6ImQiLCIsIjoiLiIsIi4iOiIsIixkYXRlOiJfLyJ9fSx0cj1lcltPbi50b0xvd2VyQ2FzZSgpXXx8ZXJbImVuLXVzIl0sWW49aXQodHIpLGpyPSIkIixsaT0iIix0aT0iLCIsZnI9Ii4iLERu'@;
put 'PSIvIjtmdW5jdGlvbiB4bihRdCl7c3dpdGNoKChPbnx8IiIpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiemgtdHciOlF0WzI3XT0iWyQtNDA0XWUvbS9kIixRdFsyOF09J1skLTQwNF1lIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLFF0WzI5XT0nWyQtNDA0XWUiXHU1ZTc0Im0iXHU2NzA4ImQi'@;
put 'XHU2NWU1IicsUXRbMzBdPSdtIi8iZCIvInl5JyxRdFszMV09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsUXRbMzJdPSdoaCJcdTY2NDIibW0iXHU1MjA2IicsUXRbMzNdPSdoaCJcdTY2NDIibW0iXHU1MjA2InNzIlx1NzlkMiInLFF0WzM0XT0nXHU0ZTBhXHU1MzQ4L1x1NGUw'@;
put 'Ylx1NTM0OCBoaCJcdTY2NDIibW0iXHU1MjA2IicsUXRbMzVdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGhoIlx1NjY0MiJtbSJcdTUyMDYic3MiXHU3OWQyIicsUXRbMzZdPSJbJC00MDRdZS9tL2QiLFF0WzUwXT0iWyQtNDA0XWUvbS9kIixRdFs1MV09J1skLTQwNF1lIlx1NWU3NCJt'@;
put 'Ilx1NjcwOCJkIlx1NjVlNSInLFF0WzUyXT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoaCJcdTY2NDIibW0iXHU1MjA2IicsUXRbNTNdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGhoIlx1NjY0MiJtbSJcdTUyMDYic3MiXHU3OWQyIicsUXRbNTRdPSdbJC00MDRdZSJcdTVlNzQi'@;
put 'bSJcdTY3MDgiZCJcdTY1ZTUiJyxRdFs1NV09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaGgiXHU2NjQyIm1tIlx1NTIwNiInLFF0WzU2XT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoaCJcdTY2NDIibW0iXHU1MjA2InNzIlx1NzlkMiInLFF0WzU3XT0iWyQtNDA0XWUvbS9kIixR'@;
put 'dFs1OF09J1skLTQwNF1lIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInO2JyZWFrO2Nhc2UiemgtY24iOlF0WzI3XT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxRdFsyOF09J20iXHU2NzA4ImQiXHU2NWU1IicsUXRbMjldPSdtIlx1NjcwOCJkIlx1NjVlNSInLFF0WzMwXT0nbSItImQiLSJ5'@;
put 'eScsUXRbMzFdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLFF0WzMyXT0naCJcdTY1ZjYibW0iXHU1MjA2IicsUXRbMzNdPSdoIlx1NjVmNiJtbSJcdTUyMDYic3MiXHU3OWQyIicsUXRbMzRdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGgiXHU2NWY2Im1tIlx1NTIwNiIn'@;
put 'LFF0WzM1XT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoIlx1NjVmNiJtbSJcdTUyMDYic3MiXHU3OWQyIicsUXRbMzZdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCInLFF0WzUwXT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxRdFs1MV09J20iXHU2NzA4ImQiXHU2NWU1IicsUXRbNTJdPSd5'@;
put 'eXl5Ilx1NWU3NCJtIlx1NjcwOCInLFF0WzUzXT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxRdFs1NF09J20iXHU2NzA4ImQiXHU2NWU1IicsUXRbNTVdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGgiXHU2NWY2Im1tIlx1NTIwNiInLFF0WzU2XT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0'@;
put 'OCBoIlx1NjVmNiJtbSJcdTUyMDYic3MiXHU3OWQyIicsUXRbNTddPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCInLFF0WzU4XT0nbSJcdTY3MDgiZCJcdTY1ZTUiJzticmVhaztjYXNlImphLWpwIjpRdFsyN109J1skLTQxMV1nZSIuIm0iLiJkJyxRdFsyOF09J1skLTQxMV1nZ2dlIlx1NWU3NCJt'@;
put 'Ilx1NjcwOCJkIlx1NjVlNSInLFF0WzI5XT0nWyQtNDExXWdnZ2UiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsUXRbMzBdPSdtIi8iZCIvInl5JyxRdFszMV09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsUXRbMzJdPSdoIlx1NjY0MiJtbSJcdTUyMDYiJyxRdFszM109J2gi'@;
put 'XHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxRdFszNF09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsUXRbMzVdPSdtIlx1NjcwOCJkIlx1NjVlNSInLFF0WzM2XT0nWyQtNDExXWdlIi4ibSIuImQnLFF0WzUwXT0nWyQtNDExXWdlIi4ibSIuImQnLFF0WzUxXT0nWyQtNDExXWdnZ2UiXHU1'@;
put 'ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsUXRbNTJdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCInLFF0WzUzXT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxRdFs1NF09J1skLTQxMV1nZ2dlIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLFF0WzU1XT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxRdFs1'@;
put 'Nl09J20iXHU2NzA4ImQiXHU2NWU1IicsUXRbNTddPSdbJC00MTFdZ2UiLiJtIi4iZCcsUXRbNThdPSdbJC00MTFdZ2dnZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJzticmVhaztjYXNlImtvLWtyIjpRdFsyN109J3l5eXkiXHU1ZTc0IiBtbSJcdTY3MDgiIGRkIlx1NjVlNSInLFF0WzI4'@;
put 'XT0ibW0tZGQiLFF0WzI5XT0ibW0tZGQiLFF0WzMwXT0ibW0tZGQteXkiLFF0WzMxXT0neXl5eSJcdWIxNDQiIG1tIlx1YzZkNCIgZGQiXHVjNzdjIicsUXRbMzJdPSdoIlx1YzJkYyIgbW0iXHViZDg0IicsUXRbMzNdPSdoIlx1YzJkYyIgbW0iXHViZDg0IiBzcyJcdWNkMDgiJyxRdFszNF09'@;
put 'Inl5eXktbW0tZGQiLFF0WzM1XT0ieXl5eS1tbS1kZCIsUXRbMzZdPSd5eXl5Ilx1NWU3NCIgbW0iXHU2NzA4IiBkZCJcdTY1ZTUiJyxRdFs1MF09J3l5eXkiXHU1ZTc0IiBtbSJcdTY3MDgiIGRkIlx1NjVlNSInLFF0WzUxXT0ibW0tZGQiLFF0WzUyXT0ieXl5eS1tbS1kZCIsUXRbNTNdPSJ5'@;
put 'eXl5LW1tLWRkIixRdFs1NF09Im1tLWRkIixRdFs1NV09Inl5eXktbW0tZGQiLFF0WzU2XT0ieXl5eS1tbS1kZCIsUXRbNTddPSd5eXl5Ilx1NWU3NCIgbW0iXHU2NzA4IiBkZCJcdTY1ZTUiJyxRdFs1OF09Im1tLWRkIjticmVhaztjYXNlInRoLXRoIjpRdFs1OV09JyJ0IjAnLFF0WzYwXT0n'@;
put 'InQiMC4wMCcsUXRbNjFdPScidCIjLCMjMCcsUXRbNjJdPScidCIjLCMjMC4wMCcsUXRbNjddPSJ0MCUiLFF0WzY4XT0idDAuMDAlIixRdFs2OV09InQjID8vPyIsUXRbNzBdPSJ0IyA/Py8/PyIsUXRbNzFdPSdcdTBlMjciLyJcdTBlMTQiLyJcdTBlMWJcdTBlMWJcdTBlMWJcdTBlMWInLFF0'@;
put 'WzcyXT0nXHUwZTI3Ii0iXHUwZTE0XHUwZTE0XHUwZTE0Ii0iXHUwZTFiXHUwZTFiJyxRdFs3M109J1x1MGUyNyItIlx1MGUxNFx1MGUxNFx1MGUxNCcsUXRbNzRdPSdcdTBlMTRcdTBlMTRcdTBlMTQiLSJcdTBlMWJcdTBlMWInLFF0Wzc1XT0nXHUwZTBhIjoiXHUwZTE5XHUwZTE5JyxRdFs3'@;
put 'Nl09J1x1MGUwYSI6Ilx1MGUxOVx1MGUxOSI6Ilx1MGUxN1x1MGUxNycsUXRbNzddPSdcdTBlMjciLyJcdTBlMTQiLyJcdTBlMWJcdTBlMWJcdTBlMWJcdTBlMWIgXHUwZTBhIjoiXHUwZTE5XHUwZTE5JyxRdFs3OF09J1x1MGUxOVx1MGUxOSI6Ilx1MGUxN1x1MGUxNycsUXRbNzldPSdbXHUw'@;
put 'ZTBhXVx1MGUxOVx1MGUxOSI6Ilx1MGUxN1x1MGUxNycsUXRbODBdPSdcdTBlMTlcdTBlMTkiOiJcdTBlMTdcdTBlMTcuMCcsUXRbODFdPSJkL20vYmIifX1QLl9nZW5lcmFsX2ludD1mdW5jdGlvbiBDaShRdCl7cmV0dXJuIFF0LnRvU3RyaW5nKDEwKX07dmFyIHpyPWZ1bmN0aW9uKCl7dmFy'@;
put 'IHZuPS8oPzpcLjAqfChcLlxkKlsxLTldKTArKSQvO2Z1bmN0aW9uIFBuKGFpKXtyZXR1cm4tMT09YWkuaW5kZXhPZigiLiIpP2FpOmFpLnJlcGxhY2Uodm4sIiQxIil9dmFyICRyPS8oPzpcLjAqfChcLlxkKlsxLTldKTArKVtFZV0vLFhuPS8oRVsrLV0pKFxkKSQvO3JldHVybiBmdW5jdGlv'@;
put 'bihVaSl7dmFyIGVpPWZ1bmN0aW9uIHlvKGFpKXt2YXIgZWksVWk9TWF0aC5mbG9vcihNYXRoLmxvZyhNYXRoLmFicyhhaSkpKk1hdGguTE9HMTBFKTtyZXR1cm4gZWk9VWk+PS00JiZVaTw9LTE/YWkudG9QcmVjaXNpb24oMTArVWkpOk1hdGguYWJzKFVpKTw9OT9mdW5jdGlvbiBvcihhaSl7'@;
put 'dmFyIFVpPWFpPDA/MTI6MTEsZWk9UG4oYWkudG9GaXhlZCgxMikpO3JldHVybiBlaS5sZW5ndGg8PVVpfHwoZWk9YWkudG9QcmVjaXNpb24oMTApKS5sZW5ndGg8PVVpP2VpOmFpLnRvRXhwb25lbnRpYWwoNSl9KGFpKToxMD09PVVpP2FpLnRvRml4ZWQoMTApLnN1YnN0cigwLDEyKTpmdW5j'@;
put 'dGlvbiBvaShhaSl7dmFyIFVpPVBuKGFpLnRvRml4ZWQoMTEpKTtyZXR1cm4gVWkubGVuZ3RoPihhaTwwPzEyOjExKXx8IjAiPT09VWl8fCItMCI9PT1VaT9haS50b1ByZWNpc2lvbig2KTpVaX0oYWkpLFBuKGZ1bmN0aW9uIG5pKGFpKXtyZXR1cm4tMT09YWkuaW5kZXhPZigiRSIpP2FpOmFp'@;
put 'LnJlcGxhY2UoJHIsIiQxRSIpLnJlcGxhY2UoWG4sIiQxMCQyIil9KGVpLnRvVXBwZXJDYXNlKCkpKX0oVWkpO3JldHVybiIsIj09PXRpJiYiLiI9PT1mcj9laTplaS5yZXBsYWNlKC9bLC5dL2csZnVuY3Rpb24oa2Epe3JldHVybiIsIj09a2E/dGk6ZnJ9KX19KCk7ZnVuY3Rpb24gemkoUXQs'@;
put 'dm4pe3N3aXRjaCh0eXBlb2YgUXQpe2Nhc2Uic3RyaW5nIjpyZXR1cm4gUXQ7Y2FzZSJib29sZWFuIjpyZXR1cm4gUXQ/IlRSVUUiOiJGQUxTRSI7Y2FzZSJudW1iZXIiOnJldHVybigwfFF0KT09PVF0P1F0LnRvU3RyaW5nKDEwKTp6cihRdCk7Y2FzZSJ1bmRlZmluZWQiOnJldHVybiIiO2Nh'@;
put 'c2Uib2JqZWN0IjppZihudWxsPT1RdClyZXR1cm4iIjtpZihRdCBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIHVjKDE0LHpuKFF0LHZuJiZ2bi5kYXRlMTkwNCksdm4pfXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgdmFsdWUgaW4gR2VuZXJhbCBmb3JtYXQ6ICIrUXQpfVAuX2dlbmVyYWxf'@;
put 'bnVtPXpyLFAuX2dlbmVyYWw9emk7dmFyIE9pPSJcdTBlNTBcdTBlNTFcdTBlNTJcdTBlNTNcdTBlNTRcdTBlNTVcdTBlNTZcdTBlNTdcdTBlNThcdTBlNTkiLnNwbGl0KCIiKTtmdW5jdGlvbiBYbyhRdCx2bixQbiwkcil7dmFyIHlvLFhuPSIiLG5pPTAsb3I9MCxvaT1Qbi55LGFpPTA7c3dp'@;
put 'dGNoKFF0KXtjYXNlIDk4Om9pPVBuLnkrNTQzO2Nhc2UgMTIxOnN3aXRjaCh2bi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6eW89b2klMTAwLGFpPTI7YnJlYWs7ZGVmYXVsdDp5bz1vaSUxZTQsYWk9NH1icmVhaztjYXNlIDEwOTpzd2l0Y2godm4ubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOnlvPVBu'@;
put 'Lm0sYWk9dm4ubGVuZ3RoO2JyZWFrO2Nhc2UgMzpyZXR1cm4gTXRbUG4ubS0xXVsxXTtjYXNlIDU6cmV0dXJuIE10W1BuLm0tMV1bMF07ZGVmYXVsdDpyZXR1cm4gTXRbUG4ubS0xXVsyXX1icmVhaztjYXNlIDEwMDpzd2l0Y2godm4ubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOnlvPVBuLmQsYWk9'@;
put 'dm4ubGVuZ3RoO2JyZWFrO2Nhc2UgMzpyZXR1cm4gZnRbUG4ucV1bMF07ZGVmYXVsdDpyZXR1cm4gZnRbUG4ucV1bMV19YnJlYWs7Y2FzZSAxMDQ6c3dpdGNoKHZuLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjp5bz0xKyhQbi5IKzExKSUxMixhaT12bi5sZW5ndGg7YnJlYWs7ZGVmYXVsdDp0aHJv'@;
put 'dyJiYWQgaG91ciBmb3JtYXQ6ICIrdm59YnJlYWs7Y2FzZSA3Mjpzd2l0Y2godm4ubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOnlvPVBuLkgsYWk9dm4ubGVuZ3RoO2JyZWFrO2RlZmF1bHQ6dGhyb3ciYmFkIGhvdXIgZm9ybWF0OiAiK3ZufWJyZWFrO2Nhc2UgNzc6c3dpdGNoKHZuLmxlbmd0aCl7'@;
put 'Y2FzZSAxOmNhc2UgMjp5bz1Qbi5NLGFpPXZuLmxlbmd0aDticmVhaztkZWZhdWx0OnRocm93ImJhZCBtaW51dGUgZm9ybWF0OiAiK3ZufWJyZWFrO2Nhc2UgMTE1OmlmKCJzIiE9dm4mJiJzcyIhPXZuJiYiLjAiIT12biYmIi4wMCIhPXZuJiYiLjAwMCIhPXZuKXRocm93ImJhZCBzZWNvbmQg'@;
put 'Zm9ybWF0OiAiK3ZuO3JldHVybiAwIT09UG4udXx8InMiIT12biYmInNzIiE9dm4/KG9yPSRyPj0yPzM9PT0kcj8xZTM6MTAwOjE9PT0kcj8xMDoxLChuaT1NYXRoLnJvdW5kKG9yKihQbi5TK1BuLnUpKSk+PTYwKm9yJiYobmk9MCksInMiPT09dm4/MD09PW5pPyIwIjoiIituaS9vcjooWG49'@;
put 'b2UobmksMiskciksInNzIj09PXZuP1huLnN1YnN0cigwLDIpOiIuIitYbi5zdWJzdHIoMix2bi5sZW5ndGgtMSkpKTpvZShQbi5TLHZuLmxlbmd0aCk7Y2FzZSA5MDpzd2l0Y2godm4pe2Nhc2UiW2hdIjpjYXNlIltoaF0iOmNhc2UiW1x1MGUwYV0iOmNhc2UiW1x1MGUwYVx1MGUwYV0iOnlv'@;
put 'PTI0KlBuLkQrUG4uSDticmVhaztjYXNlIlttXSI6Y2FzZSJbbW1dIjpjYXNlIltcdTBlMTldIjpjYXNlIltcdTBlMTlcdTBlMTldIjp5bz02MCooMjQqUG4uRCtQbi5IKStQbi5NO2JyZWFrO2Nhc2UiW3NdIjpjYXNlIltzc10iOmNhc2UiW1x1MGUxN10iOmNhc2UiW1x1MGUxN1x1MGUxN10i'@;
put 'OnlvPTYwKig2MCooMjQqUG4uRCtQbi5IKStQbi5NKStNYXRoLnJvdW5kKFBuLlMrUG4udSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQgYWJzdGltZSBmb3JtYXQ6ICIrdm59YWk9Mz09PXZuLmxlbmd0aD8xOjI7YnJlYWs7Y2FzZSAxMDE6eW89b2ksYWk9MTticmVhaztjYXNlIDM2MjM6eW89'@;
put 'UG4uZCxhaT12bi5sZW5ndGg7YnJlYWs7Y2FzZSAzNjA0OnN3aXRjaCh2bi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6eW89UG4ubSxhaT12bi5sZW5ndGg7YnJlYWs7Y2FzZSAzOnJldHVybiBNdFtQbi5tLTFdWzFdO2Nhc2UgNTpyZXR1cm4gTXRbUG4ubS0xXVswXTtkZWZhdWx0OnJldHVybiBN'@;
put 'dFtQbi5tLTFdWzJdfWJyZWFrO2Nhc2UgMzYxMTpzd2l0Y2gob2k9UG4ueSs1NDMsdm4ubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOnlvPW9pJTEwMCxhaT0yO2JyZWFrO2RlZmF1bHQ6eW89b2klMWU0LGFpPTR9YnJlYWs7Y2FzZSAzNTk0OnlvPVBuLkgsYWk9dm4ubGVuZ3RoO2JyZWFrO2Nhc2Ug'@;
put 'MzYwOTp5bz1Qbi5NLGFpPXZuLmxlbmd0aDticmVhaztjYXNlIDM2MDc6eW89UG4uUyxhaT12bi5sZW5ndGg7YnJlYWs7ZGVmYXVsdDp0aHJvdyBRdC50b1N0cmluZygxNil9dmFyIFVpPWFpPjA/b2UoeW8sYWkpOiIiO3JldHVybig5MD09UXQ/dm4uY2hhckNvZGVBdCgxKTwzNTg0OlF0PDM1'@;
put 'ODQpP1VpOlVpLnJlcGxhY2UoL1swLTldL2csZnVuY3Rpb24oZWkpe3JldHVybiBPaVsrZWldfSl9ZnVuY3Rpb24gZm8oUXQpe2lmKFF0Lmxlbmd0aDw9MylyZXR1cm4gUXQ7Zm9yKHZhciBQbj1RdC5sZW5ndGglMywkcj1RdC5zdWJzdHIoMCxQbik7UG4hPVF0Lmxlbmd0aDtQbis9Mykkcis9'@;
put 'KCRyLmxlbmd0aD4wPyIsIjoiIikrUXQuc3Vic3RyKFBuLDMpO3JldHVybiAkcn12YXIgUm89ZnVuY3Rpb24oKXt2YXIgdm49LyUvZztmdW5jdGlvbiBYbih1bixCdCl7dmFyICR0LGRuPXVuLmluZGV4T2YoIkUiKS11bi5pbmRleE9mKCIuIiktMTtpZih1bi5tYXRjaCgvXiMrMC4wRVwrMCQv'@;
put 'KSl7aWYoMD09QnQpcmV0dXJuIjAuMEUrMCI7aWYoQnQ8MClyZXR1cm4iLSIrWG4odW4sLUJ0KTt2YXIgSW49dW4uaW5kZXhPZigiLiIpOy0xPT09SW4mJihJbj11bi5pbmRleE9mKCJFIikpO3ZhciBucj1NYXRoLmZsb29yKE1hdGgubG9nKEJ0KSpNYXRoLkxPRzEwRSklSW47aWYobnI8MCYm'@;
put 'KG5yKz1JbiksLTE9PT0oJHQ9KEJ0L01hdGgucG93KDEwLG5yKSkudG9QcmVjaXNpb24oZG4rMSsoSW4rbnIpJUluKSkuaW5kZXhPZigiZSIpKXt2YXIgeXI9TWF0aC5mbG9vcihNYXRoLmxvZyhCdCkqTWF0aC5MT0cxMEUpO2ZvcigtMT09PSR0LmluZGV4T2YoIi4iKT8kdD0kdC5jaGFyQXQo'@;
put 'MCkrIi4iKyR0LnN1YnN0cigxKSsiRSsiKyh5ci0kdC5sZW5ndGgrbnIpOiR0Kz0iRSsiKyh5ci1ucik7IjAuIj09PSR0LnN1YnN0cigwLDIpOykkdD0oJHQ9JHQuY2hhckF0KDApKyR0LnN1YnN0cigyLEluKSsiLiIrJHQuc3Vic3RyKDIrSW4pKS5yZXBsYWNlKC9eMCsoWzEtOV0pLywiJDEi'@;
put 'KS5yZXBsYWNlKC9eMCtcLi8sIjAuIik7JHQ9JHQucmVwbGFjZSgvXCstLywiLSIpfSR0PSR0LnJlcGxhY2UoL14oWystXT8pKFxkKilcLihcZCopW0VlXS8sZnVuY3Rpb24oVXIsRnIsa2ksZmkpe3JldHVybiBGcitraStmaS5zdWJzdHIoMCwoSW4rbnIpJUluKSsiLiIrZmkuc3Vic3RyKG5y'@;
put 'KSsiRSJ9KX1lbHNlICR0PUJ0LnRvRXhwb25lbnRpYWwoZG4pO3JldHVybiB1bi5tYXRjaCgvRVwrMDAkLykmJiR0Lm1hdGNoKC9lWystXVxkJC8pJiYoJHQ9JHQuc3Vic3RyKDAsJHQubGVuZ3RoLTEpKyIwIiskdC5jaGFyQXQoJHQubGVuZ3RoLTEpKSx1bi5tYXRjaCgvRVwtLykmJiR0Lm1h'@;
put 'dGNoKC9lXCsvKSYmKCR0PSR0LnJlcGxhY2UoL2VcKy8sImUiKSksJHQucmVwbGFjZSgiZSIsIkUiKX12YXIgbmk9LyMgKFw/KykoID8pXC8oID8pKFxkKykvLHlvPS9eIyowKlwuKFswI10rKS8sYWk9L1wpLipbMCNdLyxVaT0vXCgjIyNcKSAjIyNcXD8tIyMjIy87ZnVuY3Rpb24gZWkodW4p'@;
put 'e2Zvcih2YXIgJHQsQnQ9IiIsZG49MDtkbiE9dW4ubGVuZ3RoOysrZG4pc3dpdGNoKCR0PXVuLmNoYXJDb2RlQXQoZG4pKXtjYXNlIDM1OmJyZWFrO2Nhc2UgNjM6QnQrPSIgIjticmVhaztjYXNlIDQ4OkJ0Kz0iMCI7YnJlYWs7ZGVmYXVsdDpCdCs9U3RyaW5nLmZyb21DaGFyQ29kZSgkdCl9'@;
put 'cmV0dXJuIEJ0fWZ1bmN0aW9uIGthKHVuLEJ0KXt2YXIgJHQ9TWF0aC5wb3coMTAsQnQpO3JldHVybiIiK01hdGgucm91bmQodW4qJHQpLyR0fWZ1bmN0aW9uIHdhKHVuLEJ0KXtpZihCdD4xMSlyZXR1cm4gd2EodW4sMTEpKk1hdGgucG93KDEwLEJ0LTExKTt2YXIgJHQ9dW4tTWF0aC5mbG9v'@;
put 'cih1biksZG49TWF0aC5wb3coMTAsQnQpO3JldHVybiBCdDwoIiIrTWF0aC5yb3VuZCgkdCpkbikpLmxlbmd0aD8wOk1hdGgucm91bmQoJHQqZG4pfWZ1bmN0aW9uIGhsKHVuLEJ0LCR0KXtpZig0MD09PXVuLmNoYXJDb2RlQXQoMCkmJiFCdC5tYXRjaChhaSkpe3ZhciBkbj1CdC5yZXBsYWNl'@;
put 'KC9cKCAqLywiIikucmVwbGFjZSgvIFwpLywiIikucmVwbGFjZSgvXCkvLCIiKTtyZXR1cm4gJHQ+PTA/aGwoIm4iLGRuLCR0KToiKCIraGwoIm4iLGRuLC0kdCkrIikifWlmKDQ0PT09QnQuY2hhckNvZGVBdChCdC5sZW5ndGgtMSkpcmV0dXJuIGZ1bmN0aW9uICRyKHVuLEJ0LCR0KXtmb3Io'@;
put 'dmFyIGRuPUJ0Lmxlbmd0aC0xOzQ0PT09QnQuY2hhckNvZGVBdChkbi0xKTspLS1kbjtyZXR1cm4gUm8odW4sQnQuc3Vic3RyKDAsZG4pLCR0L01hdGgucG93KDEwLDMqKEJ0Lmxlbmd0aC1kbikpKX0odW4sQnQsJHQpO2lmKC0xIT09QnQuaW5kZXhPZigiJSIpKXJldHVybiBmdW5jdGlvbiBQ'@;
put 'bih1bixCdCwkdCl7dmFyIGRuPUJ0LnJlcGxhY2Uodm4sIiIpLEluPUJ0Lmxlbmd0aC1kbi5sZW5ndGg7cmV0dXJuIFJvKHVuLGRuLCR0Kk1hdGgucG93KDEwLDIqSW4pKStlZSgiJSIsSW4pfSh1bixCdCwkdCk7aWYoLTEhPT1CdC5pbmRleE9mKCJFIikpcmV0dXJuIFhuKEJ0LCR0KTtpZigz'@;
put 'Nj09PUJ0LmNoYXJDb2RlQXQoMCkpcmV0dXJuIiQiK2hsKHVuLEJ0LnN1YnN0cigiICI9PUJ0LmNoYXJBdCgxKT8yOjEpLCR0KTt2YXIgSW4sbnIseXIsVXIsRnI9TWF0aC5hYnMoJHQpLGtpPSR0PDA/Ii0iOiIiO2lmKEJ0Lm1hdGNoKC9eMDArJC8pKXJldHVybiBraStVZShGcixCdC5sZW5n'@;
put 'dGgpO2lmKEJ0Lm1hdGNoKC9eWyM/XSskLykpcmV0dXJuIjAiPT09KEluPVVlKCR0LDApKSYmKEluPSIiKSxJbi5sZW5ndGg+QnQubGVuZ3RoP0luOmVpKEJ0LnN1YnN0cigwLEJ0Lmxlbmd0aC1Jbi5sZW5ndGgpKStJbjtpZihucj1CdC5tYXRjaChuaSkpcmV0dXJuIGZ1bmN0aW9uIG9yKHVu'@;
put 'LEJ0LCR0KXt2YXIgZG49cGFyc2VJbnQodW5bNF0sMTApLEluPU1hdGgucm91bmQoQnQqZG4pLG5yPU1hdGguZmxvb3IoSW4vZG4pLHlyPUluLW5yKmRuLFVyPWRuO3JldHVybiAkdCsoMD09PW5yPyIiOiIiK25yKSsiICIrKDA9PT15cj9lZSgiICIsdW5bMV0ubGVuZ3RoKzErdW5bNF0ubGVu'@;
put 'Z3RoKTpnZSh5cix1blsxXS5sZW5ndGgpK3VuWzJdKyIvIit1blszXStvZShVcix1bls0XS5sZW5ndGgpKX0obnIsRnIsa2kpO2lmKEJ0Lm1hdGNoKC9eIyswKyQvKSlyZXR1cm4ga2krVWUoRnIsQnQubGVuZ3RoLUJ0LmluZGV4T2YoIjAiKSk7aWYobnI9QnQubWF0Y2goeW8pKXJldHVybiBJ'@;
put 'bj1rYSgkdCxuclsxXS5sZW5ndGgpLnJlcGxhY2UoL14oW15cLl0rKSQvLCIkMS4iK2VpKG5yWzFdKSkucmVwbGFjZSgvXC4kLywiLiIrZWkobnJbMV0pKS5yZXBsYWNlKC9cLihcZCopJC8sZnVuY3Rpb24oJG8scmkpe3JldHVybiIuIityaStlZSgiMCIsZWkobnJbMV0pLmxlbmd0aC1yaS5s'@;
put 'ZW5ndGgpfSksLTEhPT1CdC5pbmRleE9mKCIwLiIpP0luOkluLnJlcGxhY2UoL14wXC4vLCIuIik7aWYoQnQ9QnQucmVwbGFjZSgvXiMrKFswLl0pLywiJDEiKSxucj1CdC5tYXRjaCgvXigwKilcLigjKikkLykpcmV0dXJuIGtpK2thKEZyLG5yWzJdLmxlbmd0aCkucmVwbGFjZSgvXC4oXGQq'@;
put 'WzEtOV0pMCokLywiLiQxIikucmVwbGFjZSgvXigtP1xkKikkLywiJDEuIikucmVwbGFjZSgvXjBcLi8sbnJbMV0ubGVuZ3RoPyIwLiI6Ii4iKTtpZihucj1CdC5tYXRjaCgvXiN7MSwzfSwjIzAoXC4/KSQvKSlyZXR1cm4ga2krZm8oVWUoRnIsMCkpO2lmKG5yPUJ0Lm1hdGNoKC9eIywjIzBc'@;
put 'LihbIzBdKjApJC8pKXJldHVybiAkdDwwPyItIitobCh1bixCdCwtJHQpOmZvKCIiKyhNYXRoLmZsb29yKCR0KStmdW5jdGlvbiBDcyh1bixCdCl7cmV0dXJuIEJ0PCgiIitNYXRoLnJvdW5kKCh1bi1NYXRoLmZsb29yKHVuKSkqTWF0aC5wb3coMTAsQnQpKSkubGVuZ3RoPzE6MH0oJHQsbnJb'@;
put 'MV0ubGVuZ3RoKSkpKyIuIitvZSh3YSgkdCxuclsxXS5sZW5ndGgpLG5yWzFdLmxlbmd0aCk7aWYobnI9QnQubWF0Y2goL14jLCMqLCMwLykpcmV0dXJuIGhsKHVuLEJ0LnJlcGxhY2UoL14jLCMqLC8sIiIpLCR0KTtpZihucj1CdC5tYXRjaCgvXihbMCNdKykoXFw/LShbMCNdKykpKyQvKSly'@;
put 'ZXR1cm4gSW49RChobCh1bixCdC5yZXBsYWNlKC9bXFwtXS9nLCIiKSwkdCkpLHlyPTAsRChEKEJ0LnJlcGxhY2UoL1xcL2csIiIpKS5yZXBsYWNlKC9bMCNdL2csZnVuY3Rpb24oJG8pe3JldHVybiB5cjxJbi5sZW5ndGg/SW4uY2hhckF0KHlyKyspOiIwIj09PSRvPyIwIjoiIn0pKTtpZihC'@;
put 'dC5tYXRjaChVaSkpcmV0dXJuIigiKyhJbj1obCh1biwiIyMjIyMjIyMjIyIsJHQpKS5zdWJzdHIoMCwzKSsiKSAiK0luLnN1YnN0cigzLDMpKyItIitJbi5zdWJzdHIoNik7dmFyIGZpPSIiO2lmKG5yPUJ0Lm1hdGNoKC9eKFsjMD9dKykoID8pXC8oID8pKFsjMD9dKykvKSlyZXR1cm4geXI9'@;
put 'TWF0aC5taW4obnJbNF0ubGVuZ3RoLDcpLFVyPVl0KEZyLE1hdGgucG93KDEwLHlyKS0xLCExKSxJbj0iIitraSwiICI9PShmaT1SbygibiIsbnJbMV0sVXJbMV0pKS5jaGFyQXQoZmkubGVuZ3RoLTEpJiYoZmk9Zmkuc3Vic3RyKDAsZmkubGVuZ3RoLTEpKyIwIiksSW4rPWZpK25yWzJdKyIv'@;
put 'IituclszXSwoZmk9X2UoVXJbMl0seXIpKS5sZW5ndGg8bnJbNF0ubGVuZ3RoJiYoZmk9ZWkobnJbNF0uc3Vic3RyKG5yWzRdLmxlbmd0aC1maS5sZW5ndGgpKStmaSksSW4rPWZpO2lmKG5yPUJ0Lm1hdGNoKC9eIyAoWyMwP10rKSggPylcLyggPykoWyMwP10rKS8pKXJldHVybiB5cj1NYXRo'@;
put 'Lm1pbihNYXRoLm1heChuclsxXS5sZW5ndGgsbnJbNF0ubGVuZ3RoKSw3KSxraSsoKFVyPVl0KEZyLE1hdGgucG93KDEwLHlyKS0xLCEwKSlbMF18fChVclsxXT8iIjoiMCIpKSsiICIrKFVyWzFdP2dlKFVyWzFdLHlyKStuclsyXSsiLyIrbnJbM10rX2UoVXJbMl0seXIpOmVlKCIgIiwyKnly'@;
put 'KzErbnJbMl0ubGVuZ3RoK25yWzNdLmxlbmd0aCkpO2lmKG5yPUJ0Lm1hdGNoKC9eWyMwP10rJC8pKXJldHVybiBJbj1VZSgkdCwwKSxCdC5sZW5ndGg8PUluLmxlbmd0aD9JbjplaShCdC5zdWJzdHIoMCxCdC5sZW5ndGgtSW4ubGVuZ3RoKSkrSW47aWYobnI9QnQubWF0Y2goL14oWyMwP10r'@;
put 'KVwuKFsjMF0rKSQvKSl7SW49IiIrJHQudG9GaXhlZChNYXRoLm1pbihuclsyXS5sZW5ndGgsMTApKS5yZXBsYWNlKC8oW14wXSkwKyQvLCIkMSIpLHlyPUluLmluZGV4T2YoIi4iKTt2YXIgRW89QnQuaW5kZXhPZigiLiIpLXlyLGdvPUJ0Lmxlbmd0aC1Jbi5sZW5ndGgtRW87cmV0dXJuIGVp'@;
put 'KEJ0LnN1YnN0cigwLEVvKStJbitCdC5zdWJzdHIoQnQubGVuZ3RoLWdvKSl9aWYobnI9QnQubWF0Y2goL14wMCwwMDBcLihbIzBdKjApJC8pKXJldHVybiB5cj13YSgkdCxuclsxXS5sZW5ndGgpLCR0PDA/Ii0iK2hsKHVuLEJ0LC0kdCk6Zm8oZnVuY3Rpb24gcXModW4pe3JldHVybiB1bjwy'@;
put 'MTQ3NDgzNjQ3JiZ1bj4tMjE0NzQ4MzY0OD8iIisodW4+PTA/MHx1bjp1bi0xfDApOiIiK01hdGguZmxvb3IodW4pfSgkdCkpLnJlcGxhY2UoL15cZCxcZHszfSQvLCIwJCYiKS5yZXBsYWNlKC9eXGQqJC8sZnVuY3Rpb24oJG8pe3JldHVybiIwMCwiKygkby5sZW5ndGg8Mz9vZSgwLDMtJG8u'@;
put 'bGVuZ3RoKToiIikrJG99KSsiLiIrb2UoeXIsbnJbMV0ubGVuZ3RoKTtzd2l0Y2goQnQpe2Nhc2UiIyMjLCMjMC4wMCI6cmV0dXJuIGhsKHVuLCIjLCMjMC4wMCIsJHQpO2Nhc2UiIyMjLCMjIyI6Y2FzZSIjIywjIyMiOmNhc2UiIywjIyMiOnZhciBCaT1mbyhVZShGciwwKSk7cmV0dXJuIjAi'@;
put 'IT09Qmk/a2krQmk6IiI7Y2FzZSIjIyMsIyMjLjAwIjpyZXR1cm4gaGwodW4sIiMjIywjIzAuMDAiLCR0KS5yZXBsYWNlKC9eMFwuLywiLiIpO2Nhc2UiIywjIyMuMDAiOnJldHVybiBobCh1biwiIywjIzAuMDAiLCR0KS5yZXBsYWNlKC9eMFwuLywiLiIpfXRocm93IG5ldyBFcnJvcigidW5z'@;
put 'dXBwb3J0ZWQgZm9ybWF0IHwiK0J0KyJ8Iil9ZnVuY3Rpb24gbG4odW4sQnQpe3ZhciAkdCxkbj11bi5pbmRleE9mKCJFIiktdW4uaW5kZXhPZigiLiIpLTE7aWYodW4ubWF0Y2goL14jKzAuMEVcKzAkLykpe2lmKDA9PUJ0KXJldHVybiIwLjBFKzAiO2lmKEJ0PDApcmV0dXJuIi0iK2xuKHVu'@;
put 'LC1CdCk7dmFyIEluPXVuLmluZGV4T2YoIi4iKTstMT09PUluJiYoSW49dW4uaW5kZXhPZigiRSIpKTt2YXIgbnI9TWF0aC5mbG9vcihNYXRoLmxvZyhCdCkqTWF0aC5MT0cxMEUpJUluO2lmKG5yPDAmJihucis9SW4pLCEoJHQ9KEJ0L01hdGgucG93KDEwLG5yKSkudG9QcmVjaXNpb24oZG4r'@;
put 'MSsoSW4rbnIpJUluKSkubWF0Y2goL1tFZV0vKSl7dmFyIHlyPU1hdGguZmxvb3IoTWF0aC5sb2coQnQpKk1hdGguTE9HMTBFKTstMT09PSR0LmluZGV4T2YoIi4iKT8kdD0kdC5jaGFyQXQoMCkrIi4iKyR0LnN1YnN0cigxKSsiRSsiKyh5ci0kdC5sZW5ndGgrbnIpOiR0Kz0iRSsiKyh5ci1u'@;
put 'ciksJHQ9JHQucmVwbGFjZSgvXCstLywiLSIpfSR0PSR0LnJlcGxhY2UoL14oWystXT8pKFxkKilcLihcZCopW0VlXS8sZnVuY3Rpb24oVXIsRnIsa2ksZmkpe3JldHVybiBGcitraStmaS5zdWJzdHIoMCwoSW4rbnIpJUluKSsiLiIrZmkuc3Vic3RyKG5yKSsiRSJ9KX1lbHNlICR0PUJ0LnRv'@;
put 'RXhwb25lbnRpYWwoZG4pO3JldHVybiB1bi5tYXRjaCgvRVwrMDAkLykmJiR0Lm1hdGNoKC9lWystXVxkJC8pJiYoJHQ9JHQuc3Vic3RyKDAsJHQubGVuZ3RoLTEpKyIwIiskdC5jaGFyQXQoJHQubGVuZ3RoLTEpKSx1bi5tYXRjaCgvRVwtLykmJiR0Lm1hdGNoKC9lXCsvKSYmKCR0PSR0LnJl'@;
put 'cGxhY2UoL2VcKy8sImUiKSksJHQucmVwbGFjZSgiZSIsIkUiKX1mdW5jdGlvbiBDbih1bixCdCwkdCl7aWYoNDA9PT11bi5jaGFyQ29kZUF0KDApJiYhQnQubWF0Y2goYWkpKXt2YXIgZG49QnQucmVwbGFjZSgvXCggKi8sIiIpLnJlcGxhY2UoLyBcKS8sIiIpLnJlcGxhY2UoL1wpLywiIik7'@;
put 'cmV0dXJuICR0Pj0wP0NuKCJuIixkbiwkdCk6IigiK0NuKCJuIixkbiwtJHQpKyIpIn1pZig0ND09PUJ0LmNoYXJDb2RlQXQoQnQubGVuZ3RoLTEpKXJldHVybiBmdW5jdGlvbiBqMih1bixCdCwkdCl7Zm9yKHZhciBkbj1CdC5sZW5ndGgtMTs0ND09PUJ0LmNoYXJDb2RlQXQoZG4tMSk7KS0t'@;
put 'ZG47cmV0dXJuIFJvKHVuLEJ0LnN1YnN0cigwLGRuKSwkdC9NYXRoLnBvdygxMCwzKihCdC5sZW5ndGgtZG4pKSl9KHVuLEJ0LCR0KTtpZigtMSE9PUJ0LmluZGV4T2YoIiUiKSlyZXR1cm4gZnVuY3Rpb24gWHAodW4sQnQsJHQpe3ZhciBkbj1CdC5yZXBsYWNlKHZuLCIiKSxJbj1CdC5sZW5n'@;
put 'dGgtZG4ubGVuZ3RoO3JldHVybiBSbyh1bixkbiwkdCpNYXRoLnBvdygxMCwyKkluKSkrZWUoIiUiLEluKX0odW4sQnQsJHQpO2lmKC0xIT09QnQuaW5kZXhPZigiRSIpKXJldHVybiBsbihCdCwkdCk7aWYoMzY9PT1CdC5jaGFyQ29kZUF0KDApKXJldHVybiIkIitDbih1bixCdC5zdWJzdHIo'@;
put 'IiAiPT1CdC5jaGFyQXQoMSk/MjoxKSwkdCk7dmFyIEluLG5yLHlyLFVyLEZyPU1hdGguYWJzKCR0KSxraT0kdDwwPyItIjoiIjtpZihCdC5tYXRjaCgvXjAwKyQvKSlyZXR1cm4ga2krb2UoRnIsQnQubGVuZ3RoKTtpZihCdC5tYXRjaCgvXlsjP10rJC8pKXJldHVybiBJbj0iIiskdCwwPT09'@;
put 'JHQmJihJbj0iIiksSW4ubGVuZ3RoPkJ0Lmxlbmd0aD9JbjplaShCdC5zdWJzdHIoMCxCdC5sZW5ndGgtSW4ubGVuZ3RoKSkrSW47aWYobnI9QnQubWF0Y2gobmkpKXJldHVybiBmdW5jdGlvbiBvaSh1bixCdCwkdCl7cmV0dXJuICR0KygwPT09QnQ/IiI6IiIrQnQpK2VlKCIgIix1blsxXS5s'@;
put 'ZW5ndGgrMit1bls0XS5sZW5ndGgpfShucixGcixraSk7aWYoQnQubWF0Y2goL14jKzArJC8pKXJldHVybiBraStvZShGcixCdC5sZW5ndGgtQnQuaW5kZXhPZigiMCIpKTtpZihucj1CdC5tYXRjaCh5bykpcmV0dXJuIEluPShJbj0oIiIrJHQpLnJlcGxhY2UoL14oW15cLl0rKSQvLCIkMS4i'@;
put 'K2VpKG5yWzFdKSkucmVwbGFjZSgvXC4kLywiLiIrZWkobnJbMV0pKSkucmVwbGFjZSgvXC4oXGQqKSQvLGZ1bmN0aW9uKCRvLHJpKXtyZXR1cm4iLiIrcmkrZWUoIjAiLGVpKG5yWzFdKS5sZW5ndGgtcmkubGVuZ3RoKX0pLC0xIT09QnQuaW5kZXhPZigiMC4iKT9JbjpJbi5yZXBsYWNlKC9e'@;
put 'MFwuLywiLiIpO2lmKEJ0PUJ0LnJlcGxhY2UoL14jKyhbMC5dKS8sIiQxIiksbnI9QnQubWF0Y2goL14oMCopXC4oIyopJC8pKXJldHVybiBraSsoIiIrRnIpLnJlcGxhY2UoL1wuKFxkKlsxLTldKTAqJC8sIi4kMSIpLnJlcGxhY2UoL14oLT9cZCopJC8sIiQxLiIpLnJlcGxhY2UoL14wXC4v'@;
put 'LG5yWzFdLmxlbmd0aD8iMC4iOiIuIik7aWYobnI9QnQubWF0Y2goL14jezEsM30sIyMwKFwuPykkLykpcmV0dXJuIGtpK2ZvKCIiK0ZyKTtpZihucj1CdC5tYXRjaCgvXiMsIyMwXC4oWyMwXSowKSQvKSlyZXR1cm4gJHQ8MD8iLSIrQ24odW4sQnQsLSR0KTpmbygiIiskdCkrIi4iK2VlKCIw'@;
put 'IixuclsxXS5sZW5ndGgpO2lmKG5yPUJ0Lm1hdGNoKC9eIywjKiwjMC8pKXJldHVybiBDbih1bixCdC5yZXBsYWNlKC9eIywjKiwvLCIiKSwkdCk7aWYobnI9QnQubWF0Y2goL14oWzAjXSspKFxcPy0oWzAjXSspKSskLykpcmV0dXJuIEluPUQoQ24odW4sQnQucmVwbGFjZSgvW1xcLV0vZywi'@;
put 'IiksJHQpKSx5cj0wLEQoRChCdC5yZXBsYWNlKC9cXC9nLCIiKSkucmVwbGFjZSgvWzAjXS9nLGZ1bmN0aW9uKCRvKXtyZXR1cm4geXI8SW4ubGVuZ3RoP0luLmNoYXJBdCh5cisrKToiMCI9PT0kbz8iMCI6IiJ9KSk7aWYoQnQubWF0Y2goVWkpKXJldHVybiIoIisoSW49Q24odW4sIiMjIyMj'@;
put 'IyMjIyMiLCR0KSkuc3Vic3RyKDAsMykrIikgIitJbi5zdWJzdHIoMywzKSsiLSIrSW4uc3Vic3RyKDYpO3ZhciBmaT0iIjtpZihucj1CdC5tYXRjaCgvXihbIzA/XSspKCA/KVwvKCA/KShbIzA/XSspLykpcmV0dXJuIHlyPU1hdGgubWluKG5yWzRdLmxlbmd0aCw3KSxVcj1ZdChGcixNYXRo'@;
put 'LnBvdygxMCx5ciktMSwhMSksSW49IiIra2ksIiAiPT0oZmk9Um8oIm4iLG5yWzFdLFVyWzFdKSkuY2hhckF0KGZpLmxlbmd0aC0xKSYmKGZpPWZpLnN1YnN0cigwLGZpLmxlbmd0aC0xKSsiMCIpLEluKz1maStuclsyXSsiLyIrbnJbM10sKGZpPV9lKFVyWzJdLHlyKSkubGVuZ3RoPG5yWzRd'@;
put 'Lmxlbmd0aCYmKGZpPWVpKG5yWzRdLnN1YnN0cihucls0XS5sZW5ndGgtZmkubGVuZ3RoKSkrZmkpLEluKz1maTtpZihucj1CdC5tYXRjaCgvXiMgKFsjMD9dKykoID8pXC8oID8pKFsjMD9dKykvKSlyZXR1cm4geXI9TWF0aC5taW4oTWF0aC5tYXgobnJbMV0ubGVuZ3RoLG5yWzRdLmxlbmd0'@;
put 'aCksNyksa2krKChVcj1ZdChGcixNYXRoLnBvdygxMCx5ciktMSwhMCkpWzBdfHwoVXJbMV0/IiI6IjAiKSkrIiAiKyhVclsxXT9nZShVclsxXSx5cikrbnJbMl0rIi8iK25yWzNdK19lKFVyWzJdLHlyKTplZSgiICIsMip5cisxK25yWzJdLmxlbmd0aCtuclszXS5sZW5ndGgpKTtpZihucj1C'@;
put 'dC5tYXRjaCgvXlsjMD9dKyQvKSlyZXR1cm4gQnQubGVuZ3RoPD0oSW49IiIrJHQpLmxlbmd0aD9JbjplaShCdC5zdWJzdHIoMCxCdC5sZW5ndGgtSW4ubGVuZ3RoKSkrSW47aWYobnI9QnQubWF0Y2goL14oWyMwXSspXC4oWyMwXSspJC8pKXtJbj0iIiskdC50b0ZpeGVkKE1hdGgubWluKG5y'@;
put 'WzJdLmxlbmd0aCwxMCkpLnJlcGxhY2UoLyhbXjBdKTArJC8sIiQxIikseXI9SW4uaW5kZXhPZigiLiIpO3ZhciBFbz1CdC5pbmRleE9mKCIuIikteXIsZ289QnQubGVuZ3RoLUluLmxlbmd0aC1FbztyZXR1cm4gZWkoQnQuc3Vic3RyKDAsRW8pK0luK0J0LnN1YnN0cihCdC5sZW5ndGgtZ28p'@;
put 'KX1pZihucj1CdC5tYXRjaCgvXjAwLDAwMFwuKFsjMF0qMCkkLykpcmV0dXJuICR0PDA/Ii0iK0NuKHVuLEJ0LC0kdCk6Zm8oIiIrJHQpLnJlcGxhY2UoL15cZCxcZHszfSQvLCIwJCYiKS5yZXBsYWNlKC9eXGQqJC8sZnVuY3Rpb24oJG8pe3JldHVybiIwMCwiKygkby5sZW5ndGg8Mz9vZSgw'@;
put 'LDMtJG8ubGVuZ3RoKToiIikrJG99KSsiLiIrb2UoMCxuclsxXS5sZW5ndGgpO3ZhciBCaT1mbygiIitGcik7c3dpdGNoKEJ0KXtjYXNlIiMjIywjIyMiOmNhc2UiIyMsIyMjIjpjYXNlIiMsIyMjIjpyZXR1cm4iMCIhPT1CaT9raStCaToiIjtjYXNlIiMsIzAwIjpyZXR1cm4iMDAiIT09KEJp'@;
put 'PW9lKEJpLDIpKT9raStCaToiIjtkZWZhdWx0OmlmKEJ0Lm1hdGNoKC9cLlswIz9dKiQvKSlyZXR1cm4gQ24odW4sQnQuc2xpY2UoMCxCdC5sYXN0SW5kZXhPZigiLiIpKSwkdCkrZWkoQnQuc2xpY2UoQnQubGFzdEluZGV4T2YoIi4iKSkpfXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQg'@;
put 'Zm9ybWF0IHwiK0J0KyJ8Iil9cmV0dXJuIGZ1bmN0aW9uKEJ0LCR0LGRuKXtyZXR1cm4iMCwwIj09JHQmJigkdD0iIywjMDAiKSwoMHxkbik9PT1kbj9DbihCdCwkdCxkbik6aGwoQnQsJHQsZG4pfX0oKTtmdW5jdGlvbiBUbyhRdCl7Zm9yKHZhciB2bj1bXSxQbj0hMSwkcj0wLFhuPTA7JHI8'@;
put 'UXQubGVuZ3RoOysrJHIpc3dpdGNoKFF0LmNoYXJDb2RlQXQoJHIpKXtjYXNlIDM0OlBuPSFQbjticmVhaztjYXNlIDk1OmNhc2UgNDI6Y2FzZSA5MjorKyRyO2JyZWFrO2Nhc2UgNTk6dm5bdm4ubGVuZ3RoXT1RdC5zdWJzdHIoWG4sJHItWG4pLFhuPSRyKzF9aWYodm5bdm4ubGVuZ3RoXT1R'@;
put 'dC5zdWJzdHIoWG4pLCEwPT09UG4pdGhyb3cgbmV3IEVycm9yKCJGb3JtYXQgfCIrUXQrInwgdW50ZXJtaW5hdGVkIHN0cmluZyAiKTtyZXR1cm4gdm59UC5fc3BsaXQ9VG87dmFyIG1pPS9cW1tIaE1tU3NcdTBFMEFcdTBFMTlcdTBFMTddKlxdLztmdW5jdGlvbiBybChRdCl7Zm9yKHZhciB2'@;
put 'bj0wLFBuPSIiLCRyPSIiO3ZuPFF0Lmxlbmd0aDspc3dpdGNoKFBuPVF0LmNoYXJBdCh2bikpe2Nhc2UiRyI6WGUoUXQsdm4pJiYodm4rPTYpLHZuKys7YnJlYWs7Y2FzZSciJzpmb3IoOzM0IT09UXQuY2hhckNvZGVBdCgrK3ZuKSYmdm48UXQubGVuZ3RoOyk7Kyt2bjticmVhaztjYXNlIlxc'@;
put 'IjpjYXNlIl8iOnZuKz0yO2JyZWFrO2Nhc2UiQCI6Kyt2bjticmVhaztjYXNlIkIiOmNhc2UiYiI6aWYoIjEiPT09UXQuY2hhckF0KHZuKzEpfHwiMiI9PT1RdC5jaGFyQXQodm4rMSkpcmV0dXJuITA7Y2FzZSJNIjpjYXNlIkQiOmNhc2UiWSI6Y2FzZSJIIjpjYXNlIlMiOmNhc2UiRSI6Y2Fz'@;
put 'ZSJtIjpjYXNlImQiOmNhc2UieSI6Y2FzZSJoIjpjYXNlInMiOmNhc2UiZSI6Y2FzZSJnIjpyZXR1cm4hMDtjYXNlIkEiOmNhc2UiYSI6Y2FzZSJcdTRlMGEiOmlmKCJBL1AiPT09UXQuc3Vic3RyKHZuLDMpLnRvVXBwZXJDYXNlKCl8fCJBTS9QTSI9PT1RdC5zdWJzdHIodm4sNSkudG9VcHBl'@;
put 'ckNhc2UoKXx8Ilx1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDgiPT09UXQuc3Vic3RyKHZuLDUpLnRvVXBwZXJDYXNlKCkpcmV0dXJuITA7Kyt2bjticmVhaztjYXNlIlsiOmZvcigkcj1QbjsiXSIhPT1RdC5jaGFyQXQodm4rKykmJnZuPFF0Lmxlbmd0aDspJHIrPVF0LmNoYXJBdCh2bik7aWYo'@;
put 'JHIubWF0Y2gobWkpKXJldHVybiEwO2JyZWFrO2Nhc2UiLiI6Y2FzZSIwIjpjYXNlIiMiOmZvcig7dm48UXQubGVuZ3RoJiYoIjAjPy4sRSstJSIuaW5kZXhPZihQbj1RdC5jaGFyQXQoKyt2bikpPi0xfHwiXFwiPT1QbiYmIi0iPT1RdC5jaGFyQXQodm4rMSkmJiIwIyIuaW5kZXhPZihRdC5j'@;
put 'aGFyQXQodm4rMikpPi0xKTspO2JyZWFrO2Nhc2UiPyI6Zm9yKDtRdC5jaGFyQXQoKyt2bik9PT1QbjspO2JyZWFrO2Nhc2UiKiI6Kyt2biwoIiAiPT1RdC5jaGFyQXQodm4pfHwiKiI9PVF0LmNoYXJBdCh2bikpJiYrK3ZuO2JyZWFrO2Nhc2UiKCI6Y2FzZSIpIjorK3ZuO2JyZWFrO2Nhc2Ui'@;
put 'MSI6Y2FzZSIyIjpjYXNlIjMiOmNhc2UiNCI6Y2FzZSI1IjpjYXNlIjYiOmNhc2UiNyI6Y2FzZSI4IjpjYXNlIjkiOmZvcig7dm48UXQubGVuZ3RoJiYiMDEyMzQ1Njc4OSIuaW5kZXhPZihRdC5jaGFyQXQoKyt2bikpPi0xOyk7YnJlYWs7ZGVmYXVsdDorK3ZufXJldHVybiExfWZ1bmN0aW9u'@;
put 'IEFuKFF0LHZuLFBuLCRyKXtmb3IodmFyIGFpLFVpLGVpLFhuPVtdLG5pPSIiLG9yPTAsb2k9IiIseW89InQiLGthPSJIIjtvcjxRdC5sZW5ndGg7KXN3aXRjaChvaT1RdC5jaGFyQXQob3IpKXtjYXNlIkciOmlmKCFYZShRdCxvcikpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgY2hh'@;
put 'cmFjdGVyICIrb2krIiBpbiAiK1F0KTtYbltYbi5sZW5ndGhdPXt0OiJHIix2OiJHZW5lcmFsIn0sb3IrPTc7YnJlYWs7Y2FzZSciJzpmb3Iobmk9IiI7MzQhPT0oZWk9UXQuY2hhckNvZGVBdCgrK29yKSkmJm9yPFF0Lmxlbmd0aDspbmkrPVN0cmluZy5mcm9tQ2hhckNvZGUoZWkpO1huW1hu'@;
put 'Lmxlbmd0aF09e3Q6InQiLHY6bml9LCsrb3I7YnJlYWs7Y2FzZSJcXCI6dmFyIHdhPVF0LmNoYXJBdCgrK29yKTtYbltYbi5sZW5ndGhdPXt0OiIoIj09PXdhfHwiKSI9PT13YT93YToidCIsdjp3YX0sKytvcjticmVhaztjYXNlIl8iOlhuW1huLmxlbmd0aF09e3Q6InQiLHY6IiAifSxvcis9'@;
put 'MjticmVhaztjYXNlIkAiOlhuW1huLmxlbmd0aF09e3Q6IlQiLHY6dm59LCsrb3I7YnJlYWs7Y2FzZSJCIjpjYXNlImIiOmlmKCIxIj09PVF0LmNoYXJBdChvcisxKXx8IjIiPT09UXQuY2hhckF0KG9yKzEpKXtpZihudWxsPT1haSYmbnVsbD09KGFpPWduKHZuLFBuLCIyIj09PVF0LmNoYXJB'@;
put 'dChvcisxKSkpKXJldHVybiIiO1huW1huLmxlbmd0aF09e3Q6IlgiLHY6UXQuc3Vic3RyKG9yLDIpfSx5bz1vaSxvcis9MjticmVha31jYXNlIk0iOmNhc2UiRCI6Y2FzZSJZIjpjYXNlIkgiOmNhc2UiUyI6Y2FzZSJFIjpvaT1vaS50b0xvd2VyQ2FzZSgpO2Nhc2UibSI6Y2FzZSJkIjpjYXNl'@;
put 'InkiOmNhc2UiaCI6Y2FzZSJzIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJcdTBlMjciOmNhc2UiXHUwZTE0IjpjYXNlIlx1MGUxYiI6Y2FzZSJcdTBlMGEiOmNhc2UiXHUwZTE5IjpjYXNlIlx1MGUxNyI6aWYodm48MHx8bnVsbD09YWkmJm51bGw9PShhaT1nbih2bixQbikpKXJldHVybiIiO2Zv'@;
put 'cihuaT1vaTsrK29yPFF0Lmxlbmd0aCYmUXQuY2hhckF0KG9yKS50b0xvd2VyQ2FzZSgpPT09b2k7KW5pKz1vaTsibSI9PT1vaSYmImgiPT09eW8udG9Mb3dlckNhc2UoKSYmKG9pPSJNIiksImgiPT09b2kmJihvaT1rYSksWG5bWG4ubGVuZ3RoXT17dDpvaSx2Om5pfSx5bz1vaTticmVhaztj'@;
put 'YXNlIkEiOmNhc2UiYSI6Y2FzZSJcdTRlMGEiOnZhciBxcz17dDpvaSx2Om9pfTtpZihudWxsPT1haSYmKGFpPWduKHZuLFBuKSksIkEvUCI9PT1RdC5zdWJzdHIob3IsMykudG9VcHBlckNhc2UoKT8obnVsbCE9YWkmJihxcy52PWFpLkg+PTEyPyJQIjoiQSIpLHFzLnQ9IlQiLGthPSJoIixv'@;
put 'cis9Myk6IkFNL1BNIj09PVF0LnN1YnN0cihvciw1KS50b1VwcGVyQ2FzZSgpPyhudWxsIT1haSYmKHFzLnY9YWkuSD49MTI/IlBNIjoiQU0iKSxxcy50PSJUIixvcis9NSxrYT0iaCIpOiJcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4Ij09PVF0LnN1YnN0cihvciw1KS50b1VwcGVyQ2FzZSgp'@;
put 'PyhudWxsIT1haSYmKHFzLnY9YWkuSD49MTI/Ilx1NGUwYlx1NTM0OCI6Ilx1NGUwYVx1NTM0OCIpLHFzLnQ9IlQiLG9yKz01LGthPSJoIik6KHFzLnQ9InQiLCsrb3IpLG51bGw9PWFpJiYiVCI9PT1xcy50KXJldHVybiIiO1huW1huLmxlbmd0aF09cXMseW89b2k7YnJlYWs7Y2FzZSJbIjpm'@;
put 'b3Iobmk9b2k7Il0iIT09UXQuY2hhckF0KG9yKyspJiZvcjxRdC5sZW5ndGg7KW5pKz1RdC5jaGFyQXQob3IpO2lmKCJdIiE9PW5pLnNsaWNlKC0xKSl0aHJvdyd1bnRlcm1pbmF0ZWQgIlsiIGJsb2NrOiB8JytuaSsifCI7aWYobmkubWF0Y2gobWkpKXtpZihudWxsPT1haSYmbnVsbD09KGFp'@;
put 'PWduKHZuLFBuKSkpcmV0dXJuIiI7WG5bWG4ubGVuZ3RoXT17dDoiWiIsdjpuaS50b0xvd2VyQ2FzZSgpfSx5bz1uaS5jaGFyQXQoMSl9ZWxzZSBuaS5pbmRleE9mKCIkIik+LTEmJihuaT0obmkubWF0Y2goL1wkKFteLVxbXF1dKikvKXx8W10pWzFdfHwiJCIscmwoUXQpfHwoWG5bWG4ubGVu'@;
put 'Z3RoXT17dDoidCIsdjpuaX0pKTticmVhaztjYXNlIi4iOmlmKG51bGwhPWFpKXtmb3Iobmk9b2k7KytvcjxRdC5sZW5ndGgmJiIwIj09PShvaT1RdC5jaGFyQXQob3IpKTspbmkrPW9pO1huW1huLmxlbmd0aF09e3Q6InMiLHY6bml9O2JyZWFrfWNhc2UiMCI6Y2FzZSIjIjpmb3Iobmk9b2k7'@;
put 'KytvcjxRdC5sZW5ndGgmJiIwIz8uLEUrLSUiLmluZGV4T2Yob2k9UXQuY2hhckF0KG9yKSk+LTE7KW5pKz1vaTtYbltYbi5sZW5ndGhdPXt0OiJuIix2Om5pfTticmVhaztjYXNlIj8iOmZvcihuaT1vaTtRdC5jaGFyQXQoKytvcik9PT1vaTspbmkrPW9pO1huW1huLmxlbmd0aF09e3Q6b2ks'@;
put 'djpuaX0seW89b2k7YnJlYWs7Y2FzZSIqIjorK29yLCgiICI9PVF0LmNoYXJBdChvcil8fCIqIj09UXQuY2hhckF0KG9yKSkmJisrb3I7YnJlYWs7Y2FzZSIoIjpjYXNlIikiOlhuW1huLmxlbmd0aF09e3Q6MT09PSRyPyJ0IjpvaSx2Om9pfSwrK29yO2JyZWFrO2Nhc2UiMSI6Y2FzZSIyIjpj'@;
put 'YXNlIjMiOmNhc2UiNCI6Y2FzZSI1IjpjYXNlIjYiOmNhc2UiNyI6Y2FzZSI4IjpjYXNlIjkiOmZvcihuaT1vaTtvcjxRdC5sZW5ndGgmJiIwMTIzNDU2Nzg5Ii5pbmRleE9mKFF0LmNoYXJBdCgrK29yKSk+LTE7KW5pKz1RdC5jaGFyQXQob3IpO1huW1huLmxlbmd0aF09e3Q6IkQiLHY6bml9'@;
put 'O2JyZWFrO2Nhc2UiICI6WG5bWG4ubGVuZ3RoXT17dDpvaSx2Om9pfSwrK29yO2JyZWFrO2Nhc2UiJCI6WG5bWG4ubGVuZ3RoXT17dDoidCIsdjpqcn0sKytvcjticmVhaztjYXNlIi8iOlhuW1huLmxlbmd0aF09WG4ubGVuZ3RoPjAmJnJsKFhuW1huLmxlbmd0aC0xXS52KT97dDoidCIsdjpE'@;
put 'bn06e3Q6InQiLHY6Ii8ifSwrK29yO2JyZWFrO2RlZmF1bHQ6aWYoLTE9PT0iLCQtKy8oKTohXiYnfnt9PD49XHUyMGFjYWNmaWprbG9wcXJ0dXZ3eHpQIi5pbmRleE9mKG9pKSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCBjaGFyYWN0ZXIgIitvaSsiIGluICIrUXQpO1huW1huLmxl'@;
put 'bmd0aF09e3Q6InQiLHY6b2l9LCsrb3J9dmFyIFhwLGhsPTAsajI9MDtmb3Iob3I9WG4ubGVuZ3RoLTEseW89InQiO29yPj0wOy0tb3Ipc3dpdGNoKFhuW29yXS50KXtjYXNlImgiOmNhc2UiSCI6WG5bb3JdLnQ9a2EseW89ImgiLGhsPDEmJihobD0xKTticmVhaztjYXNlInMiOihYcD1Ybltv'@;
put 'cl0udi5tYXRjaCgvXC4wKyQvKSkmJihqMj1NYXRoLm1heChqMixYcFswXS5sZW5ndGgtMSkpLGhsPDMmJihobD0zKTtjYXNlImQiOmNhc2UieSI6Y2FzZSJNIjpjYXNlImUiOnlvPVhuW29yXS50O2JyZWFrO2Nhc2UibSI6InMiPT09eW8mJihYbltvcl0udD0iTSIsaGw8MiYmKGhsPTIpKTti'@;
put 'cmVhaztjYXNlIlgiOmJyZWFrO2Nhc2UiWiI6aGw8MSYmWG5bb3JdLnYubWF0Y2goL1tIaF0vKSYmKGhsPTEpLGhsPDImJlhuW29yXS52Lm1hdGNoKC9bTW1dLykmJihobD0yKSxobDwzJiZYbltvcl0udi5tYXRjaCgvW1NzXS8pJiYoaGw9Myl9c3dpdGNoKGhsKXtjYXNlIDA6YnJlYWs7Y2Fz'@;
put 'ZSAxOmFpLnU+PS41JiYoYWkudT0wLCsrYWkuUyksYWkuUz49NjAmJihhaS5TPTAsKythaS5NKSxhaS5NPj02MCYmKGFpLk09MCwrK2FpLkgpO2JyZWFrO2Nhc2UgMjphaS51Pj0uNSYmKGFpLnU9MCwrK2FpLlMpLGFpLlM+PTYwJiYoYWkuUz0wLCsrYWkuTSl9dmFyIENuLGxuPSIiO2Zvcihv'@;
put 'cj0wO29yPFhuLmxlbmd0aDsrK29yKXN3aXRjaChYbltvcl0udCl7Y2FzZSJ0IjpjYXNlIlQiOmNhc2UiICI6Y2FzZSJEIjpicmVhaztjYXNlIlgiOlhuW29yXS52PSIiLFhuW29yXS50PSI7IjticmVhaztjYXNlImQiOmNhc2UibSI6Y2FzZSJ5IjpjYXNlImgiOmNhc2UiSCI6Y2FzZSJNIjpj'@;
put 'YXNlInMiOmNhc2UiZSI6Y2FzZSJiIjpjYXNlIloiOmNhc2UiXHUwZTI3IjpjYXNlIlx1MGUxNCI6Y2FzZSJcdTBlMWIiOmNhc2UiXHUwZTBhIjpjYXNlIlx1MGUxOSI6Y2FzZSJcdTBlMTciOlhuW29yXS52PVhvKFhuW29yXS50LmNoYXJDb2RlQXQoMCksWG5bb3JdLnYsYWksajIpLFhuW29y'@;
put 'XS50PSJ0IjticmVhaztjYXNlIm4iOmNhc2UiPyI6Zm9yKENuPW9yKzE7bnVsbCE9WG5bQ25dJiYoIj8iPT09KG9pPVhuW0NuXS50KXx8IkQiPT09b2l8fCgiICI9PT1vaXx8InQiPT09b2kpJiZudWxsIT1YbltDbisxXSYmKCI/Ij09PVhuW0NuKzFdLnR8fCJ0Ij09PVhuW0NuKzFdLnQmJiIv'@;
put 'Ij09PVhuW0NuKzFdLnYpfHwiKCI9PT1Ybltvcl0udCYmKCIgIj09PW9pfHwibiI9PT1vaXx8IikiPT09b2kpfHwidCI9PT1vaSYmKCIvIj09PVhuW0NuXS52fHwiICI9PT1YbltDbl0udiYmbnVsbCE9WG5bQ24rMV0mJiI/Ij09WG5bQ24rMV0udCkpOylYbltvcl0udis9WG5bQ25dLnYsWG5b'@;
put 'Q25dPXt2OiIiLHQ6IjsifSwrK0NuO2xuKz1Ybltvcl0udixvcj1Dbi0xO2JyZWFrO2Nhc2UiRyI6WG5bb3JdLnQ9InQiLFhuW29yXS52PXppKHZuLFBuKX12YXIgQnQsJHQsdW49IiI7aWYobG4ubGVuZ3RoPjApezQwPT1sbi5jaGFyQ29kZUF0KDApPyhCdD12bjwwJiY0NT09PWxuLmNoYXJD'@;
put 'b2RlQXQoMCk/LXZuOnZuLCR0PVJvKCJuIixsbixCdCkpOigkdD1SbygibiIsbG4sQnQ9dm48MCYmJHI+MT8tdm46dm4pLEJ0PDAmJlhuWzBdJiYidCI9PVhuWzBdLnQmJigkdD0kdC5zdWJzdHIoMSksWG5bMF0udj0iLSIrWG5bMF0udikpLENuPSgkdD0kdC5yZXBsYWNlKC9bLFwuXS9nLGZ1'@;
put 'bmN0aW9uKHlyKXtyZXR1cm4iLiI9PXlyP2ZyOnRpfSkpLmxlbmd0aC0xO3ZhciBkbj1Ybi5sZW5ndGg7Zm9yKG9yPTA7b3I8WG4ubGVuZ3RoOysrb3IpaWYobnVsbCE9WG5bb3JdJiYidCIhPVhuW29yXS50JiZYbltvcl0udi5pbmRleE9mKCIuIik+LTEpe2RuPW9yO2JyZWFrfXZhciBJbj1Y'@;
put 'bi5sZW5ndGg7aWYoZG49PT1Ybi5sZW5ndGgmJi0xPT09JHQuaW5kZXhPZigiRSIpKXtmb3Iob3I9WG4ubGVuZ3RoLTE7b3I+PTA7LS1vciludWxsPT1Ybltvcl18fC0xPT09Im4/Ii5pbmRleE9mKFhuW29yXS50KXx8KENuPj1Ybltvcl0udi5sZW5ndGgtMT9Ybltvcl0udj0kdC5zdWJzdHIo'@;
put 'MSsoQ24tPVhuW29yXS52Lmxlbmd0aCksWG5bb3JdLnYubGVuZ3RoKTpDbjwwP1huW29yXS52PSIiOihYbltvcl0udj0kdC5zdWJzdHIoMCxDbisxKSxDbj0tMSksWG5bb3JdLnQ9InQiLEluPW9yKTtDbj49MCYmSW48WG4ubGVuZ3RoJiYoWG5bSW5dLnY9JHQuc3Vic3RyKDAsQ24rMSkrWG5b'@;
put 'SW5dLnYpfWVsc2UgaWYoZG4hPT1Ybi5sZW5ndGgmJi0xPT09JHQuaW5kZXhPZigiRSIpKXtmb3IoQ249JHQuaW5kZXhPZihmciktMSxvcj1kbjtvcj49MDstLW9yKWlmKG51bGwhPVhuW29yXSYmLTEhPT0ibj8iLmluZGV4T2YoWG5bb3JdLnQpKXtmb3IoVWk9WG5bb3JdLnYuaW5kZXhPZigi'@;
put 'LiIpPi0xJiZvcj09PWRuP1huW29yXS52LmluZGV4T2YoIi4iKS0xOlhuW29yXS52Lmxlbmd0aC0xLHVuPVhuW29yXS52LnN1YnN0cihVaSsxKTtVaT49MDstLVVpKUNuPj0wJiYoIjAiPT09WG5bb3JdLnYuY2hhckF0KFVpKXx8IiMiPT09WG5bb3JdLnYuY2hhckF0KFVpKSkmJih1bj0kdC5j'@;
put 'aGFyQXQoQ24tLSkrdW4pO1huW29yXS52PXVuLFhuW29yXS50PSJ0IixJbj1vcn1mb3IoQ24+PTAmJkluPFhuLmxlbmd0aCYmKFhuW0luXS52PSR0LnN1YnN0cigwLENuKzEpK1huW0luXS52KSxDbj0kdC5pbmRleE9mKGZyKSsxLG9yPWRuO29yPFhuLmxlbmd0aDsrK29yKWlmKG51bGwhPVhu'@;
put 'W29yXSYmKC0xIT09Im4/KCIuaW5kZXhPZihYbltvcl0udCl8fG9yPT09ZG4pKXtmb3IoVWk9WG5bb3JdLnYuaW5kZXhPZihmcik+LTEmJm9yPT09ZG4/WG5bb3JdLnYuaW5kZXhPZihmcikrMTowLHVuPVhuW29yXS52LnN1YnN0cigwLFVpKTtVaTxYbltvcl0udi5sZW5ndGg7KytVaSlDbjwk'@;
put 'dC5sZW5ndGgmJih1bis9JHQuY2hhckF0KENuKyspKTtYbltvcl0udj11bixYbltvcl0udD0idCIsSW49b3J9fX1mb3Iob3I9MDtvcjxYbi5sZW5ndGg7KytvciludWxsIT1Ybltvcl0mJiJuPyIuaW5kZXhPZihYbltvcl0udCk+LTEmJihYbltvcl0udj1SbyhYbltvcl0udCxYbltvcl0udixC'@;
put 'dD0kcj4xJiZ2bjwwJiZvcj4wJiYiLSI9PT1Ybltvci0xXS52Py12bjp2bikucmVwbGFjZSgvXC4vZyxmcikucmVwbGFjZSgvLC8sdGkpLFhuW29yXS50PSJ0Iik7dmFyIG5yPSIiO2Zvcihvcj0wO29yIT09WG4ubGVuZ3RoOysrb3IpbnVsbCE9WG5bb3JdJiYobnIrPVhuW29yXS52KTtyZXR1'@;
put 'cm4gbnJ9UC5pc19kYXRlPXJsLFAuX2V2YWw9QW47dmFyIE1hPS9cW1s9PD5dLyxJcz0vXFsoPXw+Wz1dP3w8Wz49XT8pKC0/XGQrKD86XC5cZCopPylcXS87ZnVuY3Rpb24gdXMoUXQsdm4pe2lmKG51bGw9PXZuKXJldHVybiExO3ZhciBQbj1wYXJzZUZsb2F0KHZuWzJdKTtzd2l0Y2godm5b'@;
put 'MV0pe2Nhc2UiPSI6aWYoUXQ9PVBuKXJldHVybiEwO2JyZWFrO2Nhc2UiPiI6aWYoUXQ+UG4pcmV0dXJuITA7YnJlYWs7Y2FzZSI8IjppZihRdDxQbilyZXR1cm4hMDticmVhaztjYXNlIjw+IjppZihRdCE9UG4pcmV0dXJuITA7YnJlYWs7Y2FzZSI+PSI6aWYoUXQ+PVBuKXJldHVybiEwO2Jy'@;
put 'ZWFrO2Nhc2UiPD0iOmlmKFF0PD1QbilyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiB1YyhRdCx2bixQbil7bnVsbD09UG4mJihQbj17fSk7dmFyICRyPSIiO3N3aXRjaCh0eXBlb2YgUXQpe2Nhc2Uic3RyaW5nIjokcj0ibS9kL3l5Ij09UXQmJlBuLmRhdGVORj9Qbi5kYXRlTkY6UXQ7YnJl'@;
put 'YWs7Y2FzZSJudW1iZXIiOm51bGw9PSgkcj0xND09UXQmJlBuLmRhdGVORj9Qbi5kYXRlTkY6KG51bGwhPVBuLnRhYmxlP1BuLnRhYmxlOnd0KVtRdF0pJiYoJHI9UG4udGFibGUmJlBuLnRhYmxlW0h0W1F0XV18fHd0W0h0W1F0XV0pLG51bGw9PSRyJiYoJHI9VHRbUXRdfHwiR2VuZXJhbCIp'@;
put 'fWlmKFhlKCRyLDApKXJldHVybiB6aSh2bixQbik7dm4gaW5zdGFuY2VvZiBEYXRlJiYodm49em4odm4sUG4uZGF0ZTE5MDQpKTt2YXIgWG49ZnVuY3Rpb24gd3MoUXQsdm4pe3ZhciBQbj1UbyhRdCksJHI9UG4ubGVuZ3RoLFhuPVBuWyRyLTFdLmluZGV4T2YoIkAiKTtpZigkcjw0JiZYbj4t'@;
put 'MSYmLS0kcixQbi5sZW5ndGg+NCl0aHJvdyBuZXcgRXJyb3IoImNhbm5vdCBmaW5kIHJpZ2h0IGZvcm1hdCBmb3IgfCIrUG4uam9pbigifCIpKyJ8Iik7aWYoIm51bWJlciIhPXR5cGVvZiB2bilyZXR1cm5bNCw0PT09UG4ubGVuZ3RofHxYbj4tMT9QbltQbi5sZW5ndGgtMV06IkAiXTtzd2l0'@;
put 'Y2goUG4ubGVuZ3RoKXtjYXNlIDE6UG49WG4+LTE/WyJHZW5lcmFsIiwiR2VuZXJhbCIsIkdlbmVyYWwiLFBuWzBdXTpbUG5bMF0sUG5bMF0sUG5bMF0sIkAiXTticmVhaztjYXNlIDI6UG49WG4+LTE/W1BuWzBdLFBuWzBdLFBuWzBdLFBuWzFdXTpbUG5bMF0sUG5bMV0sUG5bMF0sIkAiXTti'@;
put 'cmVhaztjYXNlIDM6UG49WG4+LTE/W1BuWzBdLFBuWzFdLFBuWzBdLFBuWzJdXTpbUG5bMF0sUG5bMV0sUG5bMl0sIkAiXX12YXIgbmk9dm4+MD9QblswXTp2bjwwP1BuWzFdOlBuWzJdO2lmKC0xPT09UG5bMF0uaW5kZXhPZigiWyIpJiYtMT09PVBuWzFdLmluZGV4T2YoIlsiKSlyZXR1cm5b'@;
put 'JHIsbmldO2lmKG51bGwhPVBuWzBdLm1hdGNoKE1hKXx8bnVsbCE9UG5bMV0ubWF0Y2goTWEpKXt2YXIgb3I9UG5bMF0ubWF0Y2goSXMpLG9pPVBuWzFdLm1hdGNoKElzKTtyZXR1cm4gdXModm4sb3IpP1skcixQblswXV06dXModm4sb2kpP1skcixQblsxXV06WyRyLFBuW251bGwhPW9yJiZu'@;
put 'dWxsIT1vaT8yOjFdXX1yZXR1cm5bJHIsbmldfSgkcix2bik7aWYoWGUoWG5bMV0pKXJldHVybiB6aSh2bixQbik7aWYoITA9PT12bil2bj0iVFJVRSI7ZWxzZSBpZighMT09PXZuKXZuPSJGQUxTRSI7ZWxzZSBpZigiIj09PXZufHxudWxsPT12bilyZXR1cm4iIjtyZXR1cm4gQW4oWG5bMV0s'@;
put 'dm4sUG4sWG5bMF0pfWZ1bmN0aW9uIG5zKFF0LHZuKXtpZigibnVtYmVyIiE9dHlwZW9mIHZuKXt2bj0rdm58fC0xO2Zvcih2YXIgUG49MDtQbjwzOTI7KytQbilpZihudWxsIT13dFtQbl0pe2lmKHd0W1BuXT09UXQpe3ZuPVBuO2JyZWFrfX1lbHNlIHZuPDAmJih2bj1Qbik7dm48MCYmKHZu'@;
put 'PTM5MSl9cmV0dXJuIHd0W3ZuXT1RdCx2bn1QLmxvYWQ9bnMsUC5fdGFibGU9d3QsUC5nZXRfdGFibGU9ZnVuY3Rpb24oKXtyZXR1cm4gd3R9LFAubG9hZF90YWJsZT1mdW5jdGlvbih2bil7Zm9yKHZhciBQbj0wOzM5MiE9UG47KytQbil2b2lkIDAhPT12bltQbl0mJm5zKHZuW1BuXSxQbil9'@;
put 'LFAuaW5pdF90YWJsZT11dCxQLmZvcm1hdD11YyxQLmdldGxvY2FsZT1mdW5jdGlvbiB2cigpe3JldHVybiBPbnx8ImVuLVVTIn0sUC5zZXRsb2NhbGU9ZnVuY3Rpb24gcnIoUXQpe2lmKGZ1bmN0aW9uIG1yKFF0KXt2YXIgdm49MDtzd2l0Y2goKE9ufHwiIikudG9Mb3dlckNhc2UoKSl7Y2Fz'@;
put 'ZSJ6aC10dyI6Y2FzZSJ6aC1jbiI6Y2FzZSJqYS1qcCI6Y2FzZSJrby1rciI6Zm9yKHZuPTI3O3ZuPD0zNjsrK3ZuKWRlbGV0ZSBRdFt2bl07Zm9yKHZuPTUwO3ZuPD01ODsrK3ZuKWRlbGV0ZSBRdFt2bl07YnJlYWs7Y2FzZSJ0aC10aCI6Zm9yKHZuPTU5O3ZuPD02MjsrK3ZuKWRlbGV0ZSBR'@;
put 'dFt2bl07Zm9yKHZuPTY3O3ZuPD04MTsrK3ZuKWRlbGV0ZSBRdFt2bl19fSh3dCksT249UXQseG4od3QpLHR5cGVvZiBJbnRsPCJ1Iil7dmFyIHZuPUludGwuRGF0ZVRpbWVGb3JtYXQoUXQpO2lmKHZuLmZvcm1hdFRvUGFydHMpe2Zvcih2YXIgUG49dm4uZm9ybWF0VG9QYXJ0cyhuZXcgRGF0'@;
put 'ZSgyMDIwLDAsNSwwLDAsMCkpLCRyPTA7JHI8NzsrKyRyKWZ0WyRyXVsxXT1JbnRsLkRhdGVUaW1lRm9ybWF0KFF0LHt3ZWVrZGF5OiJsb25nIn0pLmZvcm1hdFRvUGFydHMobmV3IERhdGUoMjAyMCwwLDUrJHIsMCwwLDApKVswXS52YWx1ZSxmdFskcl1bMF09SW50bC5EYXRlVGltZUZvcm1h'@;
put 'dChRdCx7d2Vla2RheToic2hvcnQifSkuZm9ybWF0VG9QYXJ0cyhuZXcgRGF0ZSgyMDIwLDAsNSskciwwLDAsMCkpWzBdLnZhbHVlO2Zvcih2YXIgWG49MDtYbjwxMjsrK1huKU10W1huXVsyXT1JbnRsLkRhdGVUaW1lRm9ybWF0KFF0LHttb250aDoibG9uZyJ9KS5mb3JtYXRUb1BhcnRzKG5l'@;
put 'dyBEYXRlKDIwMjAsWG4sMiwwLDAsMCkpWzBdLnZhbHVlLE10W1huXVsxXT1JbnRsLkRhdGVUaW1lRm9ybWF0KFF0LHttb250aDoic2hvcnQifSkuZm9ybWF0VG9QYXJ0cyhuZXcgRGF0ZSgyMDIwLFhuLDIsMCwwLDApKVswXS52YWx1ZSxNdFtYbl1bMF09TXRbWG5dWzFdLnNsaWNlKDAsMSk7'@;
put 'Zm9yKHZhciBuaT0iIixvcj0wO29yPFBuLmxlbmd0aDsrK29yKXt2YXIgb2k9UG5bb3JdLnZhbHVlO3N3aXRjaChQbltvcl0udHlwZSl7Y2FzZSJ5ZWFyIjpuaSs9Mj09b2kubGVuZ3RoPyJ5eSI6Inl5eXkiO2JyZWFrO2Nhc2UibW9udGgiOm5pKz0iMSI9PW9pPyJtIjoiMDEiPT1vaT8ibW0i'@;
put 'Om9pPT1NdFswXVsxXT8ibW1tIjpvaT09TXRbMF1bMl0/Im1tbW0iOm9pPT1NdFswXVswXT8ibW1tbW0iOiJtbSI7YnJlYWs7Y2FzZSJkYXkiOm5pKz0iNSI9PW9pPyJkIjoiMDUiPT1vaT8iZGQiOm9pPT1mdFswXVswXT8iZGRkIjpvaT09ZnRbMF1bMV0/ImRkZGQiOiJkZCI7YnJlYWs7Y2Fz'@;
put 'ZSJsaXRlcmFsIjpuaSs9b2kucmVwbGFjZSgvLi9nLCJcXCQmIiksMT09b2kubGVuZ3RoJiYoRG49b2kpfX0oUXQubWF0Y2goL2VuL2kpJiZRdC5tYXRjaCgvdXMvaSl8fCFRdCkmJihuaT0ibS9kL3l5Iiksd3RbMTRdPW5pfWVsc2UiamEtanAiPT1RdC50b0xvd2VyQ2FzZSgpJiYod3RbMTRd'@;
put 'PSJ5eXl5XFwvbVxcL2QiKTt2YXIgeW89SW50bC5OdW1iZXJGb3JtYXQoUXQse30pLmZvcm1hdCgxMjM0NTY3Ljg5KTt5byYmKHRpPSh5by5tYXRjaCgvMSguKikyLyl8fFtdKVsxXSxmcj0oeW8ubWF0Y2goLzcoLiopOC8pfHxbXSlbMV0pfWVyW1F0LnRvTG93ZXJDYXNlKCldfHwoZXJbUXQu'@;
put 'dG9Mb3dlckNhc2UoKV09eyIuIjpmciwiLCI6dGl9KSxZbj1pdCh0cj1lcltRdC50b0xvd2VyQ2FzZSgpXXx8ZXJbImVuLXVzIl0pfSxQLm5vcm1hbGl6ZT1mdW5jdGlvbiBBYShRdCl7Zm9yKHZhciB2bj0wLFBuPTAsJHI9IiIsWG49IiIsbmk9IiIsb3I9dHIueXx8InkiLG9pPW9yLnRvVXBw'@;
put 'ZXJDYXNlKCkseW89dHIuZHx8ImQiLGFpPXlvLnRvVXBwZXJDYXNlKCksVWk9dHJbIi4iXSxlaT10clsiLCJdLGthPSIwIz9FKy0lIit0clsiLCJdK1VpO3ZuPFF0Lmxlbmd0aDspc3dpdGNoKCRyPVF0LmNoYXJBdCh2bikpe2Nhc2UiRyI6dm4rKyxuaSs9JHI7YnJlYWs7Y2FzZSciJzpmb3Io'@;
put 'bmkrPSRyOzM0IT09KFBuPVF0LmNoYXJDb2RlQXQoKyt2bikpJiZ2bjxRdC5sZW5ndGg7KW5pKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFBuKTtuaSs9JyInLCsrdm47YnJlYWs7Y2FzZSJcXCI6Y2FzZSJfIjpuaSs9UXQuc2xpY2Uodm4sdm4rMiksdm4rPTI7YnJlYWs7Y2FzZSJAIjpuaSs9JHIs'@;
put 'Kyt2bjticmVhaztjYXNlIkIiOmNhc2UiYiI6Kyt2bixuaSs9JHI7YnJlYWs7Y2FzZSBvcjpjYXNlIG9pOmNhc2UgeW86Y2FzZSBhaTpuaSs9WW5bJHIudG9Mb3dlckNhc2UoKV0sKyt2bjticmVhaztjYXNlIk0iOmNhc2UiSCI6Y2FzZSJTIjpjYXNlIkUiOmNhc2UibSI6Y2FzZSJoIjpjYXNl'@;
put 'InMiOmNhc2UiZSI6Y2FzZSJnIjpjYXNlIkEiOmNhc2UiYSI6bmkrPSRyLCsrdm47YnJlYWs7Y2FzZSJbIjpmb3IoWG49JHI7Il0iIT09UXQuY2hhckF0KHZuKyspJiZ2bjxRdC5sZW5ndGg7KVhuKz1RdC5jaGFyQXQodm4pO25pKz1YbjticmVhaztjYXNlIGVpOm5pKz0nIicrJHIrJyInLCsr'@;
put 'dm47YnJlYWs7Y2FzZSBVaTppZighKHZuPFF0Lmxlbmd0aCYmKGthLmluZGV4T2YoJHI9UXQuY2hhckF0KCsrdm4pKT4tMXx8IlxcIj09JHImJiItIj09UXQuY2hhckF0KHZuKzEpJiYiMCMiLmluZGV4T2YoUXQuY2hhckF0KHZuKzIpKT4tMSkpKXtuaSs9JyInK1VpKyciJzticmVha30kcj1V'@;
put 'aSwtLXZuO2Nhc2UiMCI6Y2FzZSIjIjpmb3IobmkrPVluWyRyLnRvTG93ZXJDYXNlKCldfHwkcjt2bjxRdC5sZW5ndGgmJihrYS5pbmRleE9mKCRyPVF0LmNoYXJBdCgrK3ZuKSk+LTF8fCJcXCI9PSRyJiYiLSI9PVF0LmNoYXJBdCh2bisxKSYmIjAjIi5pbmRleE9mKFF0LmNoYXJBdCh2bisy'@;
put 'KSk+LTEpOyluaSs9WW5bJHIudG9Mb3dlckNhc2UoKV18fCRyO2JyZWFrO2Nhc2UiPyI6Zm9yKG5pKz0kcjtRdC5jaGFyQXQoKyt2bik9PT0kcjspbmkrPSRyO2JyZWFrO2Nhc2UiKiI6bmkrPSRyLCsrdm4sKCIgIj09UXQuY2hhckF0KHZuKXx8IioiPT1RdC5jaGFyQXQodm4pKSYmKG5pKz1R'@;
put 'dC5jaGFyQXQodm4pLCsrdm4pO2JyZWFrO2Nhc2UiKCI6Y2FzZSIpIjpuaSs9JHIsKyt2bjticmVhaztjYXNlIjEiOmNhc2UiMiI6Y2FzZSIzIjpjYXNlIjQiOmNhc2UiNSI6Y2FzZSI2IjpjYXNlIjciOmNhc2UiOCI6Y2FzZSI5Ijpmb3IobmkrPSRyO3ZuPFF0Lmxlbmd0aCYmIjAxMjM0NTY3'@;
put 'ODkiLmluZGV4T2YoUXQuY2hhckF0KCsrdm4pKT4tMTspbmkrPVF0LmNoYXJBdCh2bik7YnJlYWs7ZGVmYXVsdDpuaSs9JHIsKyt2bn1yZXR1cm4gbml9LFAuZ2V0Y3VycmVuY3k9ZnVuY3Rpb24gRWkoKXtyZXR1cm4gbGl8fCJVU0QifSxQLnNldGN1cnJlbmN5PWZ1bmN0aW9uIElpKFF0KXts'@;
put 'aT1RdCxqcj10eXBlb2YgSW50bDwidSI/SW50bC5OdW1iZXJGb3JtYXQoT24se3N0eWxlOiJjdXJyZW5jeSIsY3VycmVuY3lEaXNwbGF5OiJzeW1ib2wiLGN1cnJlbmN5OlF0fSkuZm9ybWF0KDApLnJlcGxhY2UoL1swXC5cLFxzXS9nLCIiKToiJCJ9fTtRKFMpO3ZhciBGZSxyZT17IkdlbmVy'@;
put 'YWwgTnVtYmVyIjoiR2VuZXJhbCIsIkdlbmVyYWwgRGF0ZSI6Uy5fdGFibGVbMjJdLCJMb25nIERhdGUiOiJkZGRkLCBtbW1tIGRkLCB5eXl5IiwiTWVkaXVtIERhdGUiOlMuX3RhYmxlWzE1XSwiU2hvcnQgRGF0ZSI6Uy5fdGFibGVbMTRdLCJMb25nIFRpbWUiOlMuX3RhYmxlWzE5XSwiTWVk'@;
put 'aXVtIFRpbWUiOlMuX3RhYmxlWzE4XSwiU2hvcnQgVGltZSI6Uy5fdGFibGVbMjBdLEN1cnJlbmN5OiciJCIjLCMjMC4wMF8pO1tSZWRdXFwoIiQiIywjIzAuMDBcXCknLEZpeGVkOlMuX3RhYmxlWzJdLFN0YW5kYXJkOlMuX3RhYmxlWzRdLFBlcmNlbnQ6Uy5fdGFibGVbMTBdLFNjaWVudGlm'@;
put 'aWM6Uy5fdGFibGVbMTFdLCJZZXMvTm8iOiciWWVzIjsiWWVzIjsiTm8iO0AnLCJUcnVlL0ZhbHNlIjonIlRydWUiOyJUcnVlIjsiRmFsc2UiO0AnLCJPbi9PZmYiOiciWWVzIjsiWWVzIjsiTm8iO0AnfSxmZT17NTonIiQiIywjIzBfKTtcXCgiJCIjLCMjMFxcKScsNjonIiQiIywjIzBfKTtb'@;
put 'UmVkXVxcKCIkIiMsIyMwXFwpJyw3OiciJCIjLCMjMC4wMF8pO1xcKCIkIiMsIyMwLjAwXFwpJyw4OiciJCIjLCMjMC4wMF8pO1tSZWRdXFwoIiQiIywjIzAuMDBcXCknLDIzOiJHZW5lcmFsIiwyNDoiR2VuZXJhbCIsMjU6IkdlbmVyYWwiLDI2OiJHZW5lcmFsIiwyNzoibS9kL3l5IiwyODoi'@;
put 'bS9kL3l5IiwyOToibS9kL3l5IiwzMDoibS9kL3l5IiwzMToibS9kL3l5IiwzMjoiaDptbTpzcyIsMzM6Img6bW06c3MiLDM0OiJoOm1tOnNzIiwzNToiaDptbTpzcyIsMzY6Im0vZC95eSIsNDE6J18oKiAjLCMjMF8pO18oKiAoIywjIzApO18oKiAiLSJfKTtfKEBfKScsNDI6J18oIiQiKiAj'@;
put 'LCMjMF8pO18oIiQiKiAoIywjIzApO18oIiQiKiAiLSJfKTtfKEBfKScsNDM6J18oKiAjLCMjMC4wMF8pO18oKiAoIywjIzAuMDApO18oKiAiLSI/P18pO18oQF8pJyw0NDonXygiJCIqICMsIyMwLjAwXyk7XygiJCIqICgjLCMjMC4wMCk7XygiJCIqICItIj8/Xyk7XyhAXyknLDUwOiJtL2Qv'@;
put 'eXkiLDUxOiJtL2QveXkiLDUyOiJtL2QveXkiLDUzOiJtL2QveXkiLDU0OiJtL2QveXkiLDU1OiJtL2QveXkiLDU2OiJtL2QveXkiLDU3OiJtL2QveXkiLDU4OiJtL2QveXkiLDU5OiIwIiw2MDoiMC4wMCIsNjE6IiMsIyMwIiw2MjoiIywjIzAuMDAiLDYzOiciJCIjLCMjMF8pO1xcKCIkIiMs'@;
put 'IyMwXFwpJyw2NDonIiQiIywjIzBfKTtbUmVkXVxcKCIkIiMsIyMwXFwpJyw2NTonIiQiIywjIzAuMDBfKTtcXCgiJCIjLCMjMC4wMFxcKScsNjY6JyIkIiMsIyMwLjAwXyk7W1JlZF1cXCgiJCIjLCMjMC4wMFxcKScsNjc6IjAlIiw2ODoiMC4wMCUiLDY5OiIjID8vPyIsNzA6IiMgPz8vPz8i'@;
put 'LDcxOiJtL2QveXkiLDcyOiJtL2QveXkiLDczOiJkLW1tbS15eSIsNzQ6ImQtbW1tIiw3NToibW1tLXl5Iiw3NjoiaDptbSIsNzc6Img6bW06c3MiLDc4OiJtL2QveXkgaDptbSIsNzk6Im1tOnNzIiw4MDoiW2hdOm1tOnNzIiw4MToibW1zcy4wIn0sbWU9L1tkRF0rfFttTV0rfFt5WWVFXSt8'@;
put 'W0hoXSt8W1NzXSsvZzshZnVuY3Rpb24odyl7dy52ZXJzaW9uPSIxLjIuMCI7dmFyIEQ9ZnVuY3Rpb24gUCgpe2Zvcih2YXIgdmU9MCxNZT1uZXcgQXJyYXkoMjU2KSxqZT0wOzI1NiE9amU7KytqZSlNZVtqZV09dmU9MSYodmU9MSYodmU9MSYodmU9MSYodmU9MSYodmU9MSYodmU9MSYodmU9'@;
put 'MSYodmU9amUpPy0zMDY2NzQ5MTJedmU+Pj4xOnZlPj4+MSk/LTMwNjY3NDkxMl52ZT4+PjE6dmU+Pj4xKT8tMzA2Njc0OTEyXnZlPj4+MTp2ZT4+PjEpPy0zMDY2NzQ5MTJedmU+Pj4xOnZlPj4+MSk/LTMwNjY3NDkxMl52ZT4+PjE6dmU+Pj4xKT8tMzA2Njc0OTEyXnZlPj4+MTp2ZT4+PjEp'@;
put 'Py0zMDY2NzQ5MTJedmU+Pj4xOnZlPj4+MSk/LTMwNjY3NDkxMl52ZT4+PjE6dmU+Pj4xO3JldHVybiB0eXBlb2YgSW50MzJBcnJheTwidSI/bmV3IEludDMyQXJyYXkoTWUpOk1lfSgpO3cudGFibGU9RCx3LmJzdHI9ZnVuY3Rpb24gZWUodmUsTWUpe2Zvcih2YXIgamU9LTFeTWUsVWU9dmUu'@;
put 'bGVuZ3RoLTEsWGU9MDtYZTxVZTspamU9KGplPWplPj4+OF5EWzI1NSYoamVedmUuY2hhckNvZGVBdChYZSsrKSldKT4+PjheRFsyNTUmKGplXnZlLmNoYXJDb2RlQXQoWGUrKykpXTtyZXR1cm4gWGU9PT1VZSYmKGplPWplPj4+OF5EWzI1NSYoamVedmUuY2hhckNvZGVBdChYZSkpXSksLTFe'@;
put 'amV9LHcuYnVmPWZ1bmN0aW9uIG9lKHZlLE1lKXtpZih2ZS5sZW5ndGg+MWU0KXJldHVybiBmdW5jdGlvbiBnZSh2ZSxNZSl7Zm9yKHZhciBqZT0tMV5NZSxVZT12ZS5sZW5ndGgtNyxYZT0wO1hlPFVlOylqZT0oamU9KGplPShqZT0oamU9KGplPShqZT0oamU9amU+Pj44XkRbMjU1JihqZV52'@;
put 'ZVtYZSsrXSldKT4+PjheRFsyNTUmKGplXnZlW1hlKytdKV0pPj4+OF5EWzI1NSYoamVedmVbWGUrK10pXSk+Pj44XkRbMjU1JihqZV52ZVtYZSsrXSldKT4+PjheRFsyNTUmKGplXnZlW1hlKytdKV0pPj4+OF5EWzI1NSYoamVedmVbWGUrK10pXSk+Pj44XkRbMjU1JihqZV52ZVtYZSsrXSld'@;
put 'KT4+PjheRFsyNTUmKGplXnZlW1hlKytdKV07Zm9yKDtYZTxVZSs3OylqZT1qZT4+PjheRFsyNTUmKGplXnZlW1hlKytdKV07cmV0dXJuLTFeamV9KHZlLE1lKTtmb3IodmFyIGplPS0xXk1lLFVlPXZlLmxlbmd0aC0zLFhlPTA7WGU8VWU7KWplPShqZT0oamU9KGplPWplPj4+OF5EWzI1NSYo'@;
put 'amVedmVbWGUrK10pXSk+Pj44XkRbMjU1JihqZV52ZVtYZSsrXSldKT4+PjheRFsyNTUmKGplXnZlW1hlKytdKV0pPj4+OF5EWzI1NSYoamVedmVbWGUrK10pXTtmb3IoO1hlPFVlKzM7KWplPWplPj4+OF5EWzI1NSYoamVedmVbWGUrK10pXTtyZXR1cm4tMV5qZX0sdy5zdHI9ZnVuY3Rpb24g'@;
put 'X2UodmUsTWUpe2Zvcih2YXIgaXQsZnQsamU9LTFeTWUsVWU9MCxYZT12ZS5sZW5ndGg7VWU8WGU7KShpdD12ZS5jaGFyQ29kZUF0KFVlKyspKTwxMjg/amU9amU+Pj44XkRbMjU1JihqZV5pdCldOml0PDIwNDg/amU9KGplPWplPj4+OF5EWzI1NSYoamVeKDE5MnxpdD4+NiYzMSkpXSk+Pj44'@;
put 'XkRbMjU1JihqZV4oMTI4fDYzJml0KSldOml0Pj01NTI5NiYmaXQ8NTczNDQ/KGl0PTY0KygxMDIzJml0KSxmdD0xMDIzJnZlLmNoYXJDb2RlQXQoVWUrKyksamU9KGplPShqZT0oamU9amU+Pj44XkRbMjU1JihqZV4oMjQwfGl0Pj44JjcpKV0pPj4+OF5EWzI1NSYoamVeKDEyOHxpdD4+MiY2'@;
put 'MykpXSk+Pj44XkRbMjU1JihqZV4oMTI4fGZ0Pj42JjE1fCgzJml0KTw8NCkpXSk+Pj44XkRbMjU1JihqZV4oMTI4fDYzJmZ0KSldKTpqZT0oamU9KGplPWplPj4+OF5EWzI1NSYoamVeKDIyNHxpdD4+MTImMTUpKV0pPj4+OF5EWzI1NSYoamVeKDEyOHxpdD4+NiY2MykpXSk+Pj44XkRbMjU1'@;
put 'JihqZV4oMTI4fDYzJml0KSldO3JldHVybi0xXmplfX0oRmU9e30pO3ZhciBMZSxOZT1mdW5jdGlvbigpe3ZhciBNZSxQPXt9O2Z1bmN0aW9uIGVlKGxuKXtpZigiLyI9PWxuLmNoYXJBdChsbi5sZW5ndGgtMSkpcmV0dXJuLTE9PT1sbi5zbGljZSgwLC0xKS5pbmRleE9mKCIvIik/bG46ZWUo'@;
put 'bG4uc2xpY2UoMCwtMSkpO3ZhciBDbj1sbi5sYXN0SW5kZXhPZigiLyIpO3JldHVybi0xPT09Q24/bG46bG4uc2xpY2UoMCxDbisxKX1mdW5jdGlvbiBvZShsbil7aWYoIi8iPT1sbi5jaGFyQXQobG4ubGVuZ3RoLTEpKXJldHVybiBvZShsbi5zbGljZSgwLC0xKSk7dmFyIENuPWxuLmxhc3RJ'@;
put 'bmRleE9mKCIvIik7cmV0dXJuLTE9PT1Dbj9sbjpsbi5zbGljZShDbisxKX1mdW5jdGlvbiBnZShsbixDbil7InN0cmluZyI9PXR5cGVvZiBDbiYmKENuPW5ldyBEYXRlKENuKSk7dmFyIHVuPUNuLmdldEhvdXJzKCk7dW49KHVuPXVuPDw2fENuLmdldE1pbnV0ZXMoKSk8PDV8Q24uZ2V0U2Vj'@;
put 'b25kcygpPj4+MSxsbi53cml0ZV9zaGlmdCgyLHVuKTt2YXIgQnQ9Q24uZ2V0RnVsbFllYXIoKS0xOTgwO0J0PShCdD1CdDw8NHxDbi5nZXRNb250aCgpKzEpPDw1fENuLmdldERhdGUoKSxsbi53cml0ZV9zaGlmdCgyLEJ0KX1mdW5jdGlvbiB2ZShsbil7c3MobG4sMCk7Zm9yKHZhciBDbj17'@;
put 'fSx1bj0wO2xuLmw8PWxuLmxlbmd0aC00Oyl7dmFyIEJ0PWxuLnJlYWRfc2hpZnQoMiksJHQ9bG4ucmVhZF9zaGlmdCgyKSxkbj1sbi5sKyR0LEluPXt9OzIxNTg5PT09QnQmJigxJih1bj1sbi5yZWFkX3NoaWZ0KDEpKSYmKEluLm10aW1lPWxuLnJlYWRfc2hpZnQoNCkpLCR0PjUmJigyJnVu'@;
put 'JiYoSW4uYXRpbWU9bG4ucmVhZF9zaGlmdCg0KSksNCZ1biYmKEluLmN0aW1lPWxuLnJlYWRfc2hpZnQoNCkpKSxJbi5tdGltZSYmKEluLm10PW5ldyBEYXRlKDFlMypJbi5tdGltZSkpKSxsbi5sPWRuLENuW0J0XT1Jbn1yZXR1cm4gQ259ZnVuY3Rpb24gamUoKXtyZXR1cm4gTWV8fChNZT1U'@;
put 'KDc4NzczKSl9ZnVuY3Rpb24gVWUobG4sQ24pe2lmKDgwPT1sblswXSYmNzU9PWxuWzFdKXJldHVybiBlaShsbixDbik7aWYobG4ubGVuZ3RoPDUxMil0aHJvdyBuZXcgRXJyb3IoIkNGQiBmaWxlIHNpemUgIitsbi5sZW5ndGgrIiA8IDUxMiIpO3ZhciB1biwkdCxkbixJbixucix5cixCdD01'@;
put 'MTIsVXI9W10sRnI9bG4uc2xpY2UoMCw1MTIpO3NzKEZyLDApO3ZhciBraT1mdW5jdGlvbiBYZShsbil7aWYoODA9PWxuW2xuLmxdJiY3NT09bG5bbG4ubCsxXSlyZXR1cm5bMCwwXTtsbi5jaGsoanIsIkhlYWRlciBTaWduYXR1cmU6ICIpLGxuLmwrPTE2O3ZhciBDbj1sbi5yZWFkX3NoaWZ0'@;
put 'KDIsInUiKTtyZXR1cm5bbG4ucmVhZF9zaGlmdCgyLCJ1IiksQ25dfShGcik7c3dpdGNoKHVuPWtpWzBdKXtjYXNlIDM6QnQ9NTEyO2JyZWFrO2Nhc2UgNDpCdD00MDk2O2JyZWFrO2Nhc2UgMDppZigwPT1raVsxXSlyZXR1cm4gZWkobG4sQ24pO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJN'@;
put 'YWpvciBWZXJzaW9uOiBFeHBlY3RlZCAzIG9yIDQgc2F3ICIrdW4pfTUxMiE9PUJ0JiZzcyhGcj1sbi5zbGljZSgwLEJ0KSwyOCk7dmFyIGZpPWxuLnNsaWNlKDAsQnQpOyFmdW5jdGlvbiBpdChsbixDbil7dmFyIHVuO3N3aXRjaChsbi5sKz0yLHVuPWxuLnJlYWRfc2hpZnQoMikpe2Nhc2Ug'@;
put 'OTppZigzIT1Dbil0aHJvdyBuZXcgRXJyb3IoIlNlY3RvciBTaGlmdDogRXhwZWN0ZWQgOSBzYXcgIit1bik7YnJlYWs7Y2FzZSAxMjppZig0IT1Dbil0aHJvdyBuZXcgRXJyb3IoIlNlY3RvciBTaGlmdDogRXhwZWN0ZWQgMTIgc2F3ICIrdW4pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVy'@;
put 'cm9yKCJTZWN0b3IgU2hpZnQ6IEV4cGVjdGVkIDkgb3IgMTIgc2F3ICIrdW4pfWxuLmNoaygiMDYwMCIsIk1pbmkgU2VjdG9yIFNoaWZ0OiAiKSxsbi5jaGsoIjAwMDAwMDAwMDAwMCIsIlJlc2VydmVkOiAiKX0oRnIsdW4pO3ZhciBFbz1Gci5yZWFkX3NoaWZ0KDQsImkiKTtpZigzPT09dW4m'@;
put 'JjAhPT1Fbyl0aHJvdyBuZXcgRXJyb3IoIiMgRGlyZWN0b3J5IFNlY3RvcnM6IEV4cGVjdGVkIDAgc2F3ICIrRW8pO0ZyLmwrPTQsSW49RnIucmVhZF9zaGlmdCg0LCJpIiksRnIubCs9NCxGci5jaGsoIjAwMTAwMDAwIiwiTWluaSBTdHJlYW0gQ3V0b2ZmIFNpemU6ICIpLG5yPUZyLnJlYWRf'@;
put 'c2hpZnQoNCwiaSIpLCR0PUZyLnJlYWRfc2hpZnQoNCwiaSIpLHlyPUZyLnJlYWRfc2hpZnQoNCwiaSIpLGRuPUZyLnJlYWRfc2hpZnQoNCwiaSIpO2Zvcih2YXIgZ289LTEsQmk9MDtCaTwxMDkmJiEoKGdvPUZyLnJlYWRfc2hpZnQoNCwiaSIpKTwwKTsrK0JpKVVyW0JpXT1nbzt2YXIgJG89'@;
put 'ZnVuY3Rpb24gZnQobG4sQ24pe2Zvcih2YXIgdW49TWF0aC5jZWlsKGxuLmxlbmd0aC9DbiktMSxCdD1bXSwkdD0xOyR0PHVuOysrJHQpQnRbJHQtMV09bG4uc2xpY2UoJHQqQ24sKCR0KzEpKkNuKTtyZXR1cm4gQnRbdW4tMV09bG4uc2xpY2UodW4qQ24pLEJ0fShsbixCdCk7d3QoeXIsZG4s'@;
put 'JG8sQnQsVXIpO3ZhciByaT1mdW5jdGlvbiBrdChsbixDbix1bixCdCl7dmFyICR0PWxuLmxlbmd0aCxkbj1bXSxJbj1bXSxucj1bXSx5cj1bXSxVcj1CdC0xLEZyPTAsa2k9MCxmaT0wLEVvPTA7Zm9yKEZyPTA7RnI8JHQ7KytGcilpZihucj1bXSwoZmk9RnIrQ24pPj0kdCYmKGZpLT0kdCks'@;
put 'IUluW2ZpXSl7eXI9W107dmFyIGdvPVtdO2ZvcihraT1maTtraT49MDspe2dvW2tpXT0hMCxJbltraV09ITAsbnJbbnIubGVuZ3RoXT1raSx5ci5wdXNoKGxuW2tpXSk7dmFyIEJpPXVuW01hdGguZmxvb3IoNCpraS9CdCldO2lmKEJ0PDQrKEVvPTQqa2kmVXIpKXRocm93IG5ldyBFcnJvcigi'@;
put 'RkFUIGJvdW5kYXJ5IGNyb3NzZWQ6ICIra2krIiA0ICIrQnQpO2lmKCFsbltCaV18fGdvW2tpPXVhKGxuW0JpXSxFbyldKWJyZWFrfWRuW2ZpXT17bm9kZXM6bnIsZGF0YTprbChbeXJdKX19cmV0dXJuIGRufSgkbyxJbixVcixCdCk7cmlbSW5dLm5hbWU9IiFEaXJlY3RvcnkiLCR0PjAmJm5y'@;
put 'IT09WW4mJihyaVtucl0ubmFtZT0iIU1pbmlGQVQiKSxyaVtVclswXV0ubmFtZT0iIUZBVCIscmkuZmF0X2FkZHJzPVVyLHJpLnNzej1CdDt2YXIgZ3U9W10sR2M9W10sZ3Y9W107KGZ1bmN0aW9uIFR0KGxuLENuLHVuLEJ0LCR0LGRuLEluLG5yKXtmb3IodmFyIEVvLHlyPTAsVXI9QnQubGVu'@;
put 'Z3RoPzI6MCxGcj1Dbltsbl0uZGF0YSxraT0wLGZpPTA7a2k8RnIubGVuZ3RoO2tpKz0xMjgpe3ZhciBnbz1Gci5zbGljZShraSxraSsxMjgpO3NzKGdvLDY0KSxmaT1nby5yZWFkX3NoaWZ0KDIpLEVvPVBjKGdvLDAsZmktVXIpLEJ0LnB1c2goRW8pO3ZhciBCaT17bmFtZTpFbyx0eXBlOmdv'@;
put 'LnJlYWRfc2hpZnQoMSksY29sb3I6Z28ucmVhZF9zaGlmdCgxKSxMOmdvLnJlYWRfc2hpZnQoNCwiaSIpLFI6Z28ucmVhZF9zaGlmdCg0LCJpIiksQzpnby5yZWFkX3NoaWZ0KDQsImkiKSxjbHNpZDpnby5yZWFkX3NoaWZ0KDE2KSxzdGF0ZTpnby5yZWFkX3NoaWZ0KDQsImkiKSxzdGFydDow'@;
put 'LHNpemU6MH07MCE9PWdvLnJlYWRfc2hpZnQoMikrZ28ucmVhZF9zaGlmdCgyKStnby5yZWFkX3NoaWZ0KDIpK2dvLnJlYWRfc2hpZnQoMikmJihCaS5jdD1ZdChnbyxnby5sLTgpKSwwIT09Z28ucmVhZF9zaGlmdCgyKStnby5yZWFkX3NoaWZ0KDIpK2dvLnJlYWRfc2hpZnQoMikrZ28ucmVh'@;
put 'ZF9zaGlmdCgyKSYmKEJpLm10PVl0KGdvLGdvLmwtOCkpLEJpLnN0YXJ0PWdvLnJlYWRfc2hpZnQoNCwiaSIpLEJpLnNpemU9Z28ucmVhZF9zaGlmdCg0LCJpIiksQmkuc2l6ZTwwJiZCaS5zdGFydDwwJiYoQmkuc2l6ZT1CaS50eXBlPTAsQmkuc3RhcnQ9WW4sQmkubmFtZT0iIiksNT09PUJp'@;
put 'LnR5cGU/KHlyPUJpLnN0YXJ0LCR0PjAmJnlyIT09WW4mJihDblt5cl0ubmFtZT0iIVN0cmVhbURhdGEiKSk6Qmkuc2l6ZT49NDA5Nj8oQmkuc3RvcmFnZT0iZmF0Iix2b2lkIDA9PT1DbltCaS5zdGFydF0mJihDbltCaS5zdGFydF09SHQodW4sQmkuc3RhcnQsQ24uZmF0X2FkZHJzLENuLnNz'@;
put 'eikpLENuW0JpLnN0YXJ0XS5uYW1lPUJpLm5hbWUsQmkuY29udGVudD1DbltCaS5zdGFydF0uZGF0YS5zbGljZSgwLEJpLnNpemUpKTooQmkuc3RvcmFnZT0ibWluaWZhdCIsQmkuc2l6ZTwwP0JpLnNpemU9MDp5ciE9PVluJiZCaS5zdGFydCE9PVluJiZDblt5cl0mJihCaS5jb250ZW50PXV0'@;
put 'KEJpLENuW3lyXS5kYXRhLChDbltucl18fHt9KS5kYXRhKSkpLEJpLmNvbnRlbnQmJnNzKEJpLmNvbnRlbnQsMCksZG5bRW9dPUJpLEluLnB1c2goQmkpfX0pKEluLHJpLCRvLGd1LCR0LHt9LEdjLG5yKSxmdW5jdGlvbiBNdChsbixDbix1bil7Zm9yKHZhciBCdD0wLCR0PTAsZG49MCxJbj0w'@;
put 'LG5yPTAseXI9dW4ubGVuZ3RoLFVyPVtdLEZyPVtdO0J0PHlyOysrQnQpVXJbQnRdPUZyW0J0XT1CdCxDbltCdF09dW5bQnRdO2Zvcig7bnI8RnIubGVuZ3RoOysrbnIpJHQ9bG5bQnQ9RnJbbnJdXS5MLGRuPWxuW0J0XS5SLEluPWxuW0J0XS5DLFVyW0J0XT09PUJ0JiYoLTEhPT0kdCYmVXJb'@;
put 'JHRdIT09JHQmJihVcltCdF09VXJbJHRdKSwtMSE9PWRuJiZVcltkbl0hPT1kbiYmKFVyW0J0XT1Vcltkbl0pKSwtMSE9PUluJiYoVXJbSW5dPUJ0KSwtMSE9PSR0JiZCdCE9VXJbQnRdJiYoVXJbJHRdPVVyW0J0XSxGci5sYXN0SW5kZXhPZigkdCk8bnImJkZyLnB1c2goJHQpKSwtMSE9PWRu'@;
put 'JiZCdCE9VXJbQnRdJiYoVXJbZG5dPVVyW0J0XSxGci5sYXN0SW5kZXhPZihkbik8bnImJkZyLnB1c2goZG4pKTtmb3IoQnQ9MTtCdDx5cjsrK0J0KVVyW0J0XT09PUJ0JiYoLTEhPT1kbiYmVXJbZG5dIT09ZG4/VXJbQnRdPVVyW2RuXTotMSE9PSR0JiZVclskdF0hPT0kdCYmKFVyW0J0XT1V'@;
put 'clskdF0pKTtmb3IoQnQ9MTtCdDx5cjsrK0J0KWlmKDAhPT1sbltCdF0udHlwZSl7aWYoKG5yPUJ0KSE9VXJbbnJdKWRve0NuW0J0XT1Dbltucj1Vcltucl1dKyIvIitDbltCdF19d2hpbGUoMCE9PW5yJiYtMSE9PVVyW25yXSYmbnIhPVVyW25yXSk7VXJbQnRdPS0xfWZvcihDblswXSs9Ii8i'@;
put 'LEJ0PTE7QnQ8eXI7KytCdCkyIT09bG5bQnRdLnR5cGUmJihDbltCdF0rPSIvIil9KEdjLGd2LGd1KSxndS5zaGlmdCgpO3ZhciB6Mj17RmlsZUluZGV4OkdjLEZ1bGxQYXRoczpndn07cmV0dXJuIENuJiZDbi5yYXcmJih6Mi5yYXc9e2hlYWRlcjpmaSxzZWN0b3JzOiRvfSksejJ9ZnVuY3Rp'@;
put 'b24gdXQobG4sQ24sdW4pe2Zvcih2YXIgJHQ9bG4uc2l6ZSxkbj1bXSxJbj1sbi5zdGFydDt1biYmJHQ+MCYmSW4+PTA7KWRuLnB1c2goQ24uc2xpY2UoSW4qdHIsSW4qdHIrdHIpKSwkdC09dHIsSW49dWEodW4sNCpJbik7cmV0dXJuIDA9PT1kbi5sZW5ndGg/cHIoMCk6TShkbikuc2xpY2Uo'@;
put 'MCxsbi5zaXplKX1mdW5jdGlvbiB3dChsbixDbix1bixCdCwkdCl7dmFyIGRuPVluO2lmKGxuPT09WW4pe2lmKDAhPT1Dbil0aHJvdyBuZXcgRXJyb3IoIkRJRkFUIGNoYWluIHNob3J0ZXIgdGhhbiBleHBlY3RlZCIpfWVsc2UgaWYoLTEhPT1sbil7dmFyIEluPXVuW2xuXSxucj0oQnQ+Pj4y'@;
put 'KS0xO2lmKCFJbilyZXR1cm47Zm9yKHZhciB5cj0wO3lyPG5yJiYoZG49dWEoSW4sNCp5cikpIT09WW47Kyt5cikkdC5wdXNoKGRuKTt3dCh1YShJbixCdC00KSxDbi0xLHVuLEJ0LCR0KX19ZnVuY3Rpb24gSHQobG4sQ24sdW4sQnQsJHQpe3ZhciBkbj1bXSxJbj1bXTskdHx8KCR0PVtdKTt2'@;
put 'YXIgbnI9QnQtMSx5cj0wLFVyPTA7Zm9yKHlyPUNuO3lyPj0wOyl7JHRbeXJdPSEwLGRuW2RuLmxlbmd0aF09eXIsSW4ucHVzaChsblt5cl0pO3ZhciBGcj11bltNYXRoLmZsb29yKDQqeXIvQnQpXTtpZihCdDw0KyhVcj00KnlyJm5yKSl0aHJvdyBuZXcgRXJyb3IoIkZBVCBib3VuZGFyeSBj'@;
put 'cm9zc2VkOiAiK3lyKyIgNCAiK0J0KTtpZighbG5bRnJdKWJyZWFrO3lyPXVhKGxuW0ZyXSxVcil9cmV0dXJue25vZGVzOmRuLGRhdGE6a2woW0luXSl9fWZ1bmN0aW9uIFl0KGxuLENuKXtyZXR1cm4gbmV3IERhdGUoMWUzKihfaShsbixDbis0KS8xZTcqTWF0aC5wb3coMiwzMikrX2kobG4s'@;
put 'Q24pLzFlNy0xMTY0NDQ3MzYwMCkpfWZ1bmN0aW9uIGZuKGxuLENuKXt2YXIgdW49Q258fHt9LEJ0PXVuLnJvb3R8fCJSb290IEVudHJ5IjtpZihsbi5GdWxsUGF0aHN8fChsbi5GdWxsUGF0aHM9W10pLGxuLkZpbGVJbmRleHx8KGxuLkZpbGVJbmRleD1bXSksbG4uRnVsbFBhdGhzLmxlbmd0'@;
put 'aCE9PWxuLkZpbGVJbmRleC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJpbmNvbnNpc3RlbnQgQ0ZCIHN0cnVjdHVyZSIpOzA9PT1sbi5GdWxsUGF0aHMubGVuZ3RoJiYobG4uRnVsbFBhdGhzWzBdPUJ0KyIvIixsbi5GaWxlSW5kZXhbMF09e25hbWU6QnQsdHlwZTo1fSksdW4uQ0xTSUQmJihs'@;
put 'bi5GaWxlSW5kZXhbMF0uY2xzaWQ9dW4uQ0xTSUQpLGZ1bmN0aW9uIEtuKGxuKXt2YXIgQ249Ilx4MDFTaDMzdEo1IjtpZighTmUuZmluZChsbiwiLyIrQ24pKXt2YXIgdW49cHIoNCk7dW5bMF09NTUsdW5bMV09dW5bM109NTAsdW5bMl09NTQsbG4uRmlsZUluZGV4LnB1c2goe25hbWU6Q24s'@;
put 'dHlwZToyLGNvbnRlbnQ6dW4sc2l6ZTo0LEw6NjksUjo2OSxDOjY5fSksbG4uRnVsbFBhdGhzLnB1c2gobG4uRnVsbFBhdGhzWzBdK0NuKSx6bihsbil9fShsbil9ZnVuY3Rpb24gem4obG4sQ24pe2ZuKGxuKTtmb3IodmFyIHVuPSExLEJ0PSExLCR0PWxuLkZ1bGxQYXRocy5sZW5ndGgtMTsk'@;
put 'dD49MDstLSR0KXt2YXIgZG49bG4uRmlsZUluZGV4WyR0XTtzd2l0Y2goZG4udHlwZSl7Y2FzZSAwOkJ0P3VuPSEwOihsbi5GaWxlSW5kZXgucG9wKCksbG4uRnVsbFBhdGhzLnBvcCgpKTticmVhaztjYXNlIDE6Y2FzZSAyOmNhc2UgNTpCdD0hMCxpc05hTihkbi5SKmRuLkwqZG4uQykmJih1'@;
put 'bj0hMCksZG4uUj4tMSYmZG4uTD4tMSYmZG4uUj09ZG4uTCYmKHVuPSEwKTticmVhaztkZWZhdWx0OnVuPSEwfX1pZih1bnx8Q24pe3ZhciBJbj1uZXcgRGF0ZSgxOTg3LDEsMTkpLG5yPTAseXI9W107Zm9yKCR0PTA7JHQ8bG4uRnVsbFBhdGhzLmxlbmd0aDsrKyR0KTAhPT1sbi5GaWxlSW5k'@;
put 'ZXhbJHRdLnR5cGUmJnlyLnB1c2goW2xuLkZ1bGxQYXRoc1skdF0sbG4uRmlsZUluZGV4WyR0XV0pO2ZvcigkdD0wOyR0PHlyLmxlbmd0aDsrKyR0KXt2YXIgVXI9ZWUoeXJbJHRdWzBdKTtmb3IoQnQ9ITEsbnI9MDtucjx5ci5sZW5ndGg7Kytucil5cltucl1bMF09PT1VciYmKEJ0PSEwKTtC'@;
put 'dHx8eXIucHVzaChbVXIse25hbWU6b2UoVXIpLnJlcGxhY2UoIi8iLCIiKSx0eXBlOjEsY2xzaWQ6RWksY3Q6SW4sbXQ6SW4sY29udGVudDpudWxsfV0pfWZvcih5ci5zb3J0KGZ1bmN0aW9uKGZpLEVvKXtyZXR1cm4gZnVuY3Rpb24gRChsbixDbil7Zm9yKHZhciB1bj1sbi5zcGxpdCgiLyIp'@;
put 'LEJ0PUNuLnNwbGl0KCIvIiksJHQ9MCxkbj0wLEluPU1hdGgubWluKHVuLmxlbmd0aCxCdC5sZW5ndGgpOyR0PEluOysrJHQpe2lmKGRuPXVuWyR0XS5sZW5ndGgtQnRbJHRdLmxlbmd0aClyZXR1cm4gZG47aWYodW5bJHRdIT1CdFskdF0pcmV0dXJuIHVuWyR0XTxCdFskdF0/LTE6MX1yZXR1'@;
put 'cm4gdW4ubGVuZ3RoLUJ0Lmxlbmd0aH0oZmlbMF0sRW9bMF0pfSksbG4uRnVsbFBhdGhzPVtdLGxuLkZpbGVJbmRleD1bXSwkdD0wOyR0PHlyLmxlbmd0aDsrKyR0KWxuLkZ1bGxQYXRoc1skdF09eXJbJHRdWzBdLGxuLkZpbGVJbmRleFskdF09eXJbJHRdWzFdO2ZvcigkdD0wOyR0PHlyLmxl'@;
put 'bmd0aDsrKyR0KXt2YXIgRnI9bG4uRmlsZUluZGV4WyR0XSxraT1sbi5GdWxsUGF0aHNbJHRdO2lmKEZyLm5hbWU9b2Uoa2kpLnJlcGxhY2UoIi8iLCIiKSxGci5MPUZyLlI9RnIuQz0tKEZyLmNvbG9yPTEpLEZyLnNpemU9RnIuY29udGVudD9Gci5jb250ZW50Lmxlbmd0aDowLEZyLnN0YXJ0'@;
put 'PTAsRnIuY2xzaWQ9RnIuY2xzaWR8fEVpLDA9PT0kdClGci5DPXlyLmxlbmd0aD4xPzE6LTEsRnIuc2l6ZT0wLEZyLnR5cGU9NTtlbHNlIGlmKCIvIj09a2kuc2xpY2UoLTEpKXtmb3IobnI9JHQrMTtucjx5ci5sZW5ndGgmJmVlKGxuLkZ1bGxQYXRoc1tucl0pIT1raTsrK25yKTtmb3IoRnIu'@;
put 'Qz1ucj49eXIubGVuZ3RoPy0xOm5yLG5yPSR0KzE7bnI8eXIubGVuZ3RoJiZlZShsbi5GdWxsUGF0aHNbbnJdKSE9ZWUoa2kpOysrbnIpO0ZyLlI9bnI+PXlyLmxlbmd0aD8tMTpucixGci50eXBlPTF9ZWxzZSBlZShsbi5GdWxsUGF0aHNbJHQrMV18fCIiKT09ZWUoa2kpJiYoRnIuUj0kdCsx'@;
put 'KSxGci50eXBlPTJ9fX1mdW5jdGlvbiBPbihsbixDbil7dmFyIHVuPUNufHx7fTtpZih6bihsbiksInppcCI9PXVuLmZpbGVUeXBlKXJldHVybiBmdW5jdGlvbiB3YShsbixDbil7dmFyIHVuPUNufHx7fSxCdD1bXSwkdD1bXSxkbj1wcigxKSxJbj11bi5jb21wcmVzc2lvbj84OjAsbnI9MCxV'@;
put 'cj0wLEZyPTAsa2k9MCxmaT0wLEVvPWxuLkZ1bGxQYXRoc1swXSxnbz1FbyxCaT1sbi5GaWxlSW5kZXhbMF0sJG89W10scmk9MDtmb3IoVXI9MTtVcjxsbi5GdWxsUGF0aHMubGVuZ3RoOysrVXIpaWYoZ289bG4uRnVsbFBhdGhzW1VyXS5zbGljZShFby5sZW5ndGgpLChCaT1sbi5GaWxlSW5k'@;
put 'ZXhbVXJdKS5zaXplJiZCaS5jb250ZW50JiYiXHgwMVNoMzN0SjUiIT1nbyl7dmFyIFhzPWtpLGd1PXByKGdvLmxlbmd0aCk7Zm9yKEZyPTA7RnI8Z28ubGVuZ3RoOysrRnIpZ3Uud3JpdGVfc2hpZnQoMSwxMjcmZ28uY2hhckNvZGVBdChGcikpO2d1PWd1LnNsaWNlKDAsZ3UubCksJG9bZmld'@;
put 'PUZlLmJ1ZihCaS5jb250ZW50LDApO3ZhciBHYz1CaS5jb250ZW50Ozg9PUluJiYoR2M9bXIoR2MpKSwoZG49cHIoMzApKS53cml0ZV9zaGlmdCg0LDY3MzI0NzUyKSxkbi53cml0ZV9zaGlmdCgyLDIwKSxkbi53cml0ZV9zaGlmdCgyLG5yKSxkbi53cml0ZV9zaGlmdCgyLEluKSxCaS5tdD9n'@;
put 'ZShkbixCaS5tdCk6ZG4ud3JpdGVfc2hpZnQoNCwwKSxkbi53cml0ZV9zaGlmdCgtNCw4Jm5yPzA6JG9bZmldKSxkbi53cml0ZV9zaGlmdCg0LDgmbnI/MDpHYy5sZW5ndGgpLGRuLndyaXRlX3NoaWZ0KDQsOCZucj8wOkJpLmNvbnRlbnQubGVuZ3RoKSxkbi53cml0ZV9zaGlmdCgyLGd1Lmxl'@;
put 'bmd0aCksZG4ud3JpdGVfc2hpZnQoMiwwKSxraSs9ZG4ubGVuZ3RoLEJ0LnB1c2goZG4pLGtpKz1ndS5sZW5ndGgsQnQucHVzaChndSksa2krPUdjLmxlbmd0aCxCdC5wdXNoKEdjKSw4Jm5yJiYoKGRuPXByKDEyKSkud3JpdGVfc2hpZnQoLTQsJG9bZmldKSxkbi53cml0ZV9zaGlmdCg0LEdj'@;
put 'Lmxlbmd0aCksZG4ud3JpdGVfc2hpZnQoNCxCaS5jb250ZW50Lmxlbmd0aCksa2krPWRuLmwsQnQucHVzaChkbikpLChkbj1wcig0NikpLndyaXRlX3NoaWZ0KDQsMzM2MzkyNDgpLGRuLndyaXRlX3NoaWZ0KDIsMCksZG4ud3JpdGVfc2hpZnQoMiwyMCksZG4ud3JpdGVfc2hpZnQoMixuciks'@;
put 'ZG4ud3JpdGVfc2hpZnQoMixJbiksZG4ud3JpdGVfc2hpZnQoNCwwKSxkbi53cml0ZV9zaGlmdCgtNCwkb1tmaV0pLGRuLndyaXRlX3NoaWZ0KDQsR2MubGVuZ3RoKSxkbi53cml0ZV9zaGlmdCg0LEJpLmNvbnRlbnQubGVuZ3RoKSxkbi53cml0ZV9zaGlmdCgyLGd1Lmxlbmd0aCksZG4ud3Jp'@;
put 'dGVfc2hpZnQoMiwwKSxkbi53cml0ZV9zaGlmdCgyLDApLGRuLndyaXRlX3NoaWZ0KDIsMCksZG4ud3JpdGVfc2hpZnQoMiwwKSxkbi53cml0ZV9zaGlmdCg0LDApLGRuLndyaXRlX3NoaWZ0KDQsWHMpLHJpKz1kbi5sLCR0LnB1c2goZG4pLHJpKz1ndS5sZW5ndGgsJHQucHVzaChndSksKytm'@;
put 'aX1yZXR1cm4oZG49cHIoMjIpKS53cml0ZV9zaGlmdCg0LDEwMTAxMDI1NiksZG4ud3JpdGVfc2hpZnQoMiwwKSxkbi53cml0ZV9zaGlmdCgyLDApLGRuLndyaXRlX3NoaWZ0KDIsZmkpLGRuLndyaXRlX3NoaWZ0KDIsZmkpLGRuLndyaXRlX3NoaWZ0KDQscmkpLGRuLndyaXRlX3NoaWZ0KDQs'@;
put 'a2kpLGRuLndyaXRlX3NoaWZ0KDIsMCksTShbTShCdCksTSgkdCksZG5dKX0obG4sdW4pO3ZhciBCdD1mdW5jdGlvbihFbyl7Zm9yKHZhciBnbz0wLEJpPTAsJG89MDskbzxFby5GaWxlSW5kZXgubGVuZ3RoOysrJG8pe3ZhciByaT1Fby5GaWxlSW5kZXhbJG9dO2lmKHJpLmNvbnRlbnQpe3Zh'@;
put 'ciBYcz1yaS5jb250ZW50Lmxlbmd0aDtYcz4wJiYoWHM8NDA5Nj9nbys9WHMrNjM+PjY6QmkrPVhzKzUxMT4+OSl9fWZvcih2YXIgZ3U9RW8uRnVsbFBhdGhzLmxlbmd0aCszPj4yLGd2PWdvKzEyNz4+Nyx6Mj0oZ28rNz4+MykrQmkrZ3UrZ3YsaGQ9ejIrMTI3Pj43LHRDPWhkPD0xMDk/MDpN'@;
put 'YXRoLmNlaWwoKGhkLTEwOSkvMTI3KTt6MitoZCt0QysxMjc+Pjc+aGQ7KXRDPSsraGQ8PTEwOT8wOk1hdGguY2VpbCgoaGQtMTA5KS8xMjcpO3ZhciBDZj1bMSx0QyxoZCxndixndSxCaSxnbywwXTtyZXR1cm4gRW8uRmlsZUluZGV4WzBdLnNpemU9Z288PDYsQ2ZbN109KEVvLkZpbGVJbmRl'@;
put 'eFswXS5zdGFydD1DZlswXStDZlsxXStDZlsyXStDZlszXStDZls0XStDZls1XSkrKENmWzZdKzc+PjMpLENmfShsbiksJHQ9cHIoQnRbN108PDkpLGRuPTAsSW49MDtmb3IoZG49MDtkbjw4OysrZG4pJHQud3JpdGVfc2hpZnQoMSxsaVtkbl0pO2Zvcihkbj0wO2RuPDg7KytkbikkdC53cml0'@;
put 'ZV9zaGlmdCgyLDApO2ZvcigkdC53cml0ZV9zaGlmdCgyLDYyKSwkdC53cml0ZV9zaGlmdCgyLDMpLCR0LndyaXRlX3NoaWZ0KDIsNjU1MzQpLCR0LndyaXRlX3NoaWZ0KDIsOSksJHQud3JpdGVfc2hpZnQoMiw2KSxkbj0wO2RuPDM7KytkbikkdC53cml0ZV9zaGlmdCgyLDApO2ZvcigkdC53'@;
put 'cml0ZV9zaGlmdCg0LDApLCR0LndyaXRlX3NoaWZ0KDQsQnRbMl0pLCR0LndyaXRlX3NoaWZ0KDQsQnRbMF0rQnRbMV0rQnRbMl0rQnRbM10tMSksJHQud3JpdGVfc2hpZnQoNCwwKSwkdC53cml0ZV9zaGlmdCg0LDQwOTYpLCR0LndyaXRlX3NoaWZ0KDQsQnRbM10/QnRbMF0rQnRbMV0rQnRb'@;
put 'Ml0tMTpZbiksJHQud3JpdGVfc2hpZnQoNCxCdFszXSksJHQud3JpdGVfc2hpZnQoLTQsQnRbMV0/QnRbMF0tMTpZbiksJHQud3JpdGVfc2hpZnQoNCxCdFsxXSksZG49MDtkbjwxMDk7KytkbikkdC53cml0ZV9zaGlmdCgtNCxkbjxCdFsyXT9CdFsxXStkbjotMSk7aWYoQnRbMV0pZm9yKElu'@;
put 'PTA7SW48QnRbMV07KytJbil7Zm9yKDtkbjwyMzYrMTI3KkluOysrZG4pJHQud3JpdGVfc2hpZnQoLTQsZG48QnRbMl0/QnRbMV0rZG46LTEpOyR0LndyaXRlX3NoaWZ0KC00LEluPT09QnRbMV0tMT9ZbjpJbisxKX12YXIgbnI9ZnVuY3Rpb24oRW8pe2ZvcihJbis9RW87ZG48SW4tMTsrK2Ru'@;
put 'KSR0LndyaXRlX3NoaWZ0KC00LGRuKzEpO0VvJiYoKytkbiwkdC53cml0ZV9zaGlmdCgtNCxZbikpfTtmb3IoSW49ZG49MCxJbis9QnRbMV07ZG48SW47KytkbikkdC53cml0ZV9zaGlmdCgtNCxJaS5ESUZTRUNUKTtmb3IoSW4rPUJ0WzJdO2RuPEluOysrZG4pJHQud3JpdGVfc2hpZnQoLTQs'@;
put 'SWkuRkFUU0VDVCk7bnIoQnRbM10pLG5yKEJ0WzRdKTtmb3IodmFyIHlyPTAsVXI9MCxGcj1sbi5GaWxlSW5kZXhbMF07eXI8bG4uRmlsZUluZGV4Lmxlbmd0aDsrK3lyKShGcj1sbi5GaWxlSW5kZXhbeXJdKS5jb250ZW50JiYhKChVcj1Gci5jb250ZW50Lmxlbmd0aCk8NDA5NikmJihGci5z'@;
put 'dGFydD1JbixucihVcis1MTE+PjkpKTtmb3IobnIoQnRbNl0rNz4+Myk7NTExJiR0Lmw7KSR0LndyaXRlX3NoaWZ0KC00LElpLkVORE9GQ0hBSU4pO2ZvcihJbj1kbj0wLHlyPTA7eXI8bG4uRmlsZUluZGV4Lmxlbmd0aDsrK3lyKShGcj1sbi5GaWxlSW5kZXhbeXJdKS5jb250ZW50JiYoVXI9'@;
put 'RnIuY29udGVudC5sZW5ndGgpJiYhKFVyPj00MDk2KSYmKEZyLnN0YXJ0PUluLG5yKFVyKzYzPj42KSk7Zm9yKDs1MTEmJHQubDspJHQud3JpdGVfc2hpZnQoLTQsSWkuRU5ET0ZDSEFJTik7Zm9yKGRuPTA7ZG48QnRbNF08PDI7Kytkbil7dmFyIGtpPWxuLkZ1bGxQYXRoc1tkbl07aWYoa2km'@;
put 'JjAhPT1raS5sZW5ndGgpe0ZyPWxuLkZpbGVJbmRleFtkbl0sMD09PWRuJiYoRnIuc3RhcnQ9RnIuc2l6ZT9Gci5zdGFydC0xOlluKTt2YXIgZmk9MD09PWRuJiZ1bi5yb290fHxGci5uYW1lO2lmKFVyPTIqKGZpLmxlbmd0aCsxKSwkdC53cml0ZV9zaGlmdCg2NCxmaSwidXRmMTZsZSIpLCR0'@;
put 'LndyaXRlX3NoaWZ0KDIsVXIpLCR0LndyaXRlX3NoaWZ0KDEsRnIudHlwZSksJHQud3JpdGVfc2hpZnQoMSxGci5jb2xvciksJHQud3JpdGVfc2hpZnQoLTQsRnIuTCksJHQud3JpdGVfc2hpZnQoLTQsRnIuUiksJHQud3JpdGVfc2hpZnQoLTQsRnIuQyksRnIuY2xzaWQpJHQud3JpdGVfc2hp'@;
put 'ZnQoMTYsRnIuY2xzaWQsImhleCIpO2Vsc2UgZm9yKHlyPTA7eXI8NDsrK3lyKSR0LndyaXRlX3NoaWZ0KDQsMCk7JHQud3JpdGVfc2hpZnQoNCxGci5zdGF0ZXx8MCksJHQud3JpdGVfc2hpZnQoNCwwKSwkdC53cml0ZV9zaGlmdCg0LDApLCR0LndyaXRlX3NoaWZ0KDQsMCksJHQud3JpdGVf'@;
put 'c2hpZnQoNCwwKSwkdC53cml0ZV9zaGlmdCg0LEZyLnN0YXJ0KSwkdC53cml0ZV9zaGlmdCg0LEZyLnNpemUpLCR0LndyaXRlX3NoaWZ0KDQsMCl9ZWxzZXtmb3IoeXI9MDt5cjwxNzsrK3lyKSR0LndyaXRlX3NoaWZ0KDQsMCk7Zm9yKHlyPTA7eXI8MzsrK3lyKSR0LndyaXRlX3NoaWZ0KDQs'@;
put 'LTEpO2Zvcih5cj0wO3lyPDEyOysreXIpJHQud3JpdGVfc2hpZnQoNCwwKX19Zm9yKGRuPTE7ZG48bG4uRmlsZUluZGV4Lmxlbmd0aDsrK2RuKWlmKChGcj1sbi5GaWxlSW5kZXhbZG5dKS5zaXplPj00MDk2KXtmb3IoJHQubD1Gci5zdGFydCsxPDw5LHlyPTA7eXI8RnIuc2l6ZTsrK3lyKSR0'@;
put 'LndyaXRlX3NoaWZ0KDEsRnIuY29udGVudFt5cl0pO2Zvcig7NTExJnlyOysreXIpJHQud3JpdGVfc2hpZnQoMSwwKX1mb3IoZG49MTtkbjxsbi5GaWxlSW5kZXgubGVuZ3RoOysrZG4paWYoKEZyPWxuLkZpbGVJbmRleFtkbl0pLnNpemU+MCYmRnIuc2l6ZTw0MDk2KXtmb3IoeXI9MDt5cjxG'@;
put 'ci5zaXplOysreXIpJHQud3JpdGVfc2hpZnQoMSxGci5jb250ZW50W3lyXSk7Zm9yKDs2MyZ5cjsrK3lyKSR0LndyaXRlX3NoaWZ0KDEsMCl9Zm9yKDskdC5sPCR0Lmxlbmd0aDspJHQud3JpdGVfc2hpZnQoMSwwKTtyZXR1cm4gJHR9UC52ZXJzaW9uPSIxLjEuNCI7dmFyIHZyLHRyPTY0LFlu'@;
put 'PS0yLGpyPSJkMGNmMTFlMGExYjExYWUxIixsaT1bMjA4LDIwNywxNywyMjQsMTYxLDE3NywyNiwyMjVdLEVpPSIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsSWk9e01BWFJFR1NFQ1Q6LTYsRElGU0VDVDotNCxGQVRTRUNUOi0zLEVORE9GQ0hBSU46WW4sRlJFRVNFQ1Q6LTEs'@;
put 'SEVBREVSX1NJR05BVFVSRTpqcixIRUFERVJfTUlOT1JfVkVSU0lPTjoiM2UwMCIsTUFYUkVHU0lEOi02LE5PU1RSRUFNOi0xLEhFQURFUl9DTFNJRDpFaSxFbnRyeVR5cGVzOlsidW5rbm93biIsInN0b3JhZ2UiLCJzdHJlYW0iLCJsb2NrYnl0ZXMiLCJwcm9wZXJ0eSIsInJvb3QiXX07ZnVu'@;
put 'Y3Rpb24gZnIobG4pe2Zvcih2YXIgQ249bmV3IEFycmF5KGxuLmxlbmd0aCksdW49MDt1bjxsbi5sZW5ndGg7Kyt1bilDblt1bl09U3RyaW5nLmZyb21DaGFyQ29kZShsblt1bl0pO3JldHVybiBDbi5qb2luKCIiKX1mdW5jdGlvbiBtcihsbil7cmV0dXJuIHZyP3ZyLmRlZmxhdGVSYXdTeW5j'@;
put 'KGxuKTp3cyhsbil9Zm9yKHZhciBsbixDbixDaT1bMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV0senI9WzMsNCw1LDYsNyw4LDksMTAsMTEsMTMsMTUsMTcsMTksMjMsMjcsMzEsMzUsNDMsNTEsNTksNjcsODMsOTksMTE1LDEzMSwxNjMsMTk1LDIyNywy'@;
put 'NThdLHppPVsxLDIsMyw0LDUsNyw5LDEzLDE3LDI1LDMzLDQ5LDY1LDk3LDEyOSwxOTMsMjU3LDM4NSw1MTMsNzY5LDEwMjUsMTUzNywyMDQ5LDMwNzMsNDA5Nyw2MTQ1LDgxOTMsMTIyODksMTYzODUsMjQ1NzddLE9pPXR5cGVvZiBVaW50OEFycmF5PCJ1IixYbz1PaT9uZXcgVWludDhBcnJh'@;
put 'eSgyNTYpOltdLGZvPTA7Zm88MjU2OysrZm8pWG9bZm9dPSh2b2lkIDAsMjU1JigoQ249MTM5NTM2JigobG49Zm8pPDwxfGxuPDwxMSl8NTU4MTQ0Jihsbjw8NXxsbjw8MTUpKT4+MTZ8Q24+Pjh8Q24pKTtmdW5jdGlvbiBSbyhsbixDbil7dmFyIHVuPVhvWzI1NSZsbl07cmV0dXJuIENuPD04'@;
put 'P3VuPj4+OC1DbjoodW49dW48PDh8WG9bbG4+PjgmMjU1XSxDbjw9MTY/dW4+Pj4xNi1DbjoodW49dW48PDh8WG9bbG4+PjE2JjI1NV0pPj4+MjQtQ24pfWZ1bmN0aW9uIFRvKGxuLENuKXt2YXIgdW49NyZDbixCdD1Dbj4+PjM7cmV0dXJuKGxuW0J0XXwodW48PTY/MDpsbltCdCsxXTw8OCkp'@;
put 'Pj4+dW4mM31mdW5jdGlvbiBtaShsbixDbil7dmFyIHVuPTcmQ24sQnQ9Q24+Pj4zO3JldHVybihsbltCdF18KHVuPD01PzA6bG5bQnQrMV08PDgpKT4+PnVuJjd9ZnVuY3Rpb24gQW4obG4sQ24pe3ZhciB1bj03JkNuLEJ0PUNuPj4+MztyZXR1cm4obG5bQnRdfCh1bjw9Mz8wOmxuW0J0KzFd'@;
put 'PDw4KSk+Pj51biYzMX1mdW5jdGlvbiBBYShsbixDbil7dmFyIHVuPTcmQ24sQnQ9Q24+Pj4zO3JldHVybihsbltCdF18KHVuPD0xPzA6bG5bQnQrMV08PDgpKT4+PnVuJjEyN31mdW5jdGlvbiBNYShsbixDbix1bil7dmFyIEJ0PTcmQ24sJHQ9Q24+Pj4zLEluPWxuWyR0XT4+PkJ0O3JldHVy'@;
put 'biB1bjw4LUJ0fHwoSW58PWxuWyR0KzFdPDw4LUJ0LHVuPDE2LUJ0KXx8KElufD1sblskdCsyXTw8MTYtQnQsdW48MjQtQnQpfHwoSW58PWxuWyR0KzNdPDwyNC1CdCksSW4mKDE8PHVuKS0xfWZ1bmN0aW9uIElzKGxuLENuKXt2YXIgdW49bG4ubGVuZ3RoLEJ0PTIqdW4+Q24/Mip1bjpDbis1'@;
put 'LCR0PTA7aWYodW4+PUNuKXJldHVybiBsbjtpZihkZSl7dmFyIGRuPWIoQnQpO2lmKGxuLmNvcHkpbG4uY29weShkbik7ZWxzZSBmb3IoOyR0PGxuLmxlbmd0aDsrKyR0KWRuWyR0XT1sblskdF07cmV0dXJuIGRufWlmKE9pKXt2YXIgSW49bmV3IFVpbnQ4QXJyYXkoQnQpO2lmKEluLnNldClJ'@;
put 'bi5zZXQobG4pO2Vsc2UgZm9yKDskdDxsbi5sZW5ndGg7KyskdClJblskdF09bG5bJHRdO3JldHVybiBJbn1yZXR1cm4gbG4ubGVuZ3RoPUJ0LGxufWZ1bmN0aW9uIHVzKGxuKXtmb3IodmFyIENuPW5ldyBBcnJheShsbiksdW49MDt1bjxsbjsrK3VuKUNuW3VuXT0wO3JldHVybiBDbn12YXIg'@;
put 'd3M9ZnVuY3Rpb24oQ24pe3ZhciB1bj1wcig1MCtNYXRoLmZsb29yKDEuMSpDbi5sZW5ndGgpKSxCdD1mdW5jdGlvbih1bixCdCl7Zm9yKHZhciAkdD0wOyR0PHVuLmxlbmd0aDspe3ZhciBkbj1NYXRoLm1pbig2NTUzNSx1bi5sZW5ndGgtJHQpO2ZvcihCdC53cml0ZV9zaGlmdCgxLCsoJHQr'@;
put 'ZG49PXVuLmxlbmd0aCkpLEJ0LndyaXRlX3NoaWZ0KDIsZG4pLEJ0LndyaXRlX3NoaWZ0KDIsNjU1MzUmfmRuKTtkbi0tID4wOylCdFtCdC5sKytdPXVuWyR0KytdfXJldHVybiBCdC5sfShDbix1bik7cmV0dXJuIHVuLnNsaWNlKDAsQnQpfTtmdW5jdGlvbiB1YyhsbixDbix1bil7dmFyIEJ0'@;
put 'PTEsJHQ9MCxkbj0wLEluPTAsbnI9MCx5cj1sbi5sZW5ndGgsVXI9T2k/bmV3IFVpbnQxNkFycmF5KDMyKTp1cygzMik7Zm9yKGRuPTA7ZG48MzI7KytkbilVcltkbl09MDtmb3IoZG49eXI7ZG48dW47Kytkbilsbltkbl09MDt5cj1sbi5sZW5ndGg7dmFyIEZyPU9pP25ldyBVaW50MTZBcnJh'@;
put 'eSh5cik6dXMoeXIpO2Zvcihkbj0wO2RuPHlyOysrZG4pVXJbJHQ9bG5bZG5dXSsrLEJ0PCR0JiYoQnQ9JHQpLEZyW2RuXT0wO2ZvcihVclswXT0wLGRuPTE7ZG48PUJ0OysrZG4pVXJbZG4rMTZdPW5yPW5yK1VyW2RuLTFdPDwxO2Zvcihkbj0wO2RuPHlyOysrZG4pMCE9KG5yPWxuW2RuXSkm'@;
put 'JihGcltkbl09VXJbbnIrMTZdKyspO3ZhciBraT0wO2Zvcihkbj0wO2RuPHlyOysrZG4paWYoMCE9KGtpPWxuW2RuXSkpZm9yKG5yPVJvKEZyW2RuXSxCdCk+PkJ0LWtpLEluPSgxPDxCdCs0LWtpKS0xO0luPj0wOy0tSW4pQ25bbnJ8SW48PGtpXT0xNSZraXxkbjw8NDtyZXR1cm4gQnR9dmFy'@;
put 'IG5zPU9pP25ldyBVaW50MTZBcnJheSg1MTIpOnVzKDUxMiksUXQ9T2k/bmV3IFVpbnQxNkFycmF5KDMyKTp1cygzMik7aWYoIU9pKXtmb3IodmFyIHZuPTA7dm48NTEyOysrdm4pbnNbdm5dPTA7Zm9yKHZuPTA7dm48MzI7Kyt2bilRdFt2bl09MH0hZnVuY3Rpb24oKXtmb3IodmFyIGxuPVtd'@;
put 'LENuPTA7Q248MzI7Q24rKylsbi5wdXNoKDUpO3VjKGxuLFF0LDMyKTt2YXIgdW49W107Zm9yKENuPTA7Q248PTE0MztDbisrKXVuLnB1c2goOCk7Zm9yKDtDbjw9MjU1O0NuKyspdW4ucHVzaCg5KTtmb3IoO0NuPD0yNzk7Q24rKyl1bi5wdXNoKDcpO2Zvcig7Q248PTI4NztDbisrKXVuLnB1'@;
put 'c2goOCk7dWModW4sbnMsMjg4KX0oKTt2YXIgUG49T2k/bmV3IFVpbnQxNkFycmF5KDMyNzY4KTp1cygzMjc2OCksJHI9T2k/bmV3IFVpbnQxNkFycmF5KDMyNzY4KTp1cygzMjc2OCksWG49T2k/bmV3IFVpbnQxNkFycmF5KDEyOCk6dXMoMTI4KSxuaT0xLG9yPTE7ZnVuY3Rpb24gb2kobG4s'@;
put 'Q24pe3ZhciB1bj1BbihsbixDbikrMjU3LEJ0PUFuKGxuLENuKz01KSsxLCR0PWZ1bmN0aW9uIHJsKGxuLENuKXt2YXIgdW49NyZDbixCdD1Dbj4+PjM7cmV0dXJuKGxuW0J0XXwodW48PTQ/MDpsbltCdCsxXTw8OCkpPj4+dW4mMTV9KGxuLENuKz01KSs0O0NuKz00O2Zvcih2YXIgZG49MCxJ'@;
put 'bj1PaT9uZXcgVWludDhBcnJheSgxOSk6dXMoMTkpLG5yPVswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXSx5cj0xLFVyPU9pP25ldyBVaW50OEFycmF5KDgpOnVzKDgpLEZyPU9pP25ldyBVaW50OEFycmF5KDgpOnVzKDgpLGtpPUluLmxlbmd0aCxmaT0wO2ZpPCR0Oysr'@;
put 'ZmkpSW5bQ2lbZmldXT1kbj1taShsbixDbikseXI8ZG4mJih5cj1kbiksVXJbZG5dKyssQ24rPTM7dmFyIEVvPTA7Zm9yKFVyWzBdPTAsZmk9MTtmaTw9eXI7KytmaSlGcltmaV09RW89RW8rVXJbZmktMV08PDE7Zm9yKGZpPTA7Zmk8a2k7KytmaSkwIT0oRW89SW5bZmldKSYmKG5yW2ZpXT1G'@;
put 'cltFb10rKyk7dmFyIGdvPTA7Zm9yKGZpPTA7Zmk8a2k7KytmaSlpZigwIT0oZ289SW5bZmldKSl7RW89WG9bbnJbZmldXT4+OC1nbztmb3IodmFyIEJpPSgxPDw3LWdvKS0xO0JpPj0wOy0tQmkpWG5bRW98Qmk8PGdvXT03JmdvfGZpPDwzfXZhciAkbz1bXTtmb3IoeXI9MTskby5sZW5ndGg8'@;
put 'dW4rQnQ7KXN3aXRjaChFbz1YbltBYShsbixDbildLENuKz03JkVvLEVvPj4+PTMpe2Nhc2UgMTY6Zm9yKGRuPTMrVG8obG4sQ24pLENuKz0yLEVvPSRvWyRvLmxlbmd0aC0xXTtkbi0tID4wOykkby5wdXNoKEVvKTticmVhaztjYXNlIDE3OmZvcihkbj0zK21pKGxuLENuKSxDbis9Mztkbi0t'@;
put 'ID4wOykkby5wdXNoKDApO2JyZWFrO2Nhc2UgMTg6Zm9yKGRuPTExK0FhKGxuLENuKSxDbis9Nztkbi0tID4wOykkby5wdXNoKDApO2JyZWFrO2RlZmF1bHQ6JG8ucHVzaChFbykseXI8RW8mJih5cj1Fbyl9dmFyIHJpPSRvLnNsaWNlKDAsdW4pLFhzPSRvLnNsaWNlKHVuKTtmb3IoZmk9dW47'@;
put 'Zmk8Mjg2OysrZmkpcmlbZmldPTA7Zm9yKGZpPUJ0O2ZpPDMwOysrZmkpWHNbZmldPTA7cmV0dXJuIG5pPXVjKHJpLFBuLDI4Niksb3I9dWMoWHMsJHIsMzApLENufWZ1bmN0aW9uIGFpKGxuLENuKXt2YXIgQnQ9ZnVuY3Rpb24geW8obG4sQ24pe2lmKDM9PWxuWzBdJiYhKDMmbG5bMV0pKXJl'@;
put 'dHVybltZKENuKSwyXTtmb3IodmFyIHVuPTAsQnQ9MCwkdD1iKENufHwxPDwxOCksZG49MCxJbj0kdC5sZW5ndGg+Pj4wLG5yPTAseXI9MDshKDEmQnQpOylpZihCdD1taShsbix1biksdW4rPTMsQnQ+Pj4xKWZvcihCdD4+PjE9PTE/KG5yPTkseXI9NSk6KHVuPW9pKGxuLHVuKSxucj1uaSx5'@;
put 'cj1vciksIUNuJiZJbjxkbiszMjc2NyYmKEluPSgkdD1JcygkdCxkbiszMjc2NykpLmxlbmd0aCk7Oyl7dmFyIEZyPU1hKGxuLHVuLG5yKSxraT1CdD4+PjE9PTE/bnNbRnJdOlBuW0ZyXTtpZih1bis9MTUma2ksKGtpPj4+PTQpPj4+OCYyNTUpe2lmKDI1Nj09a2kpYnJlYWs7dmFyIGZpPShr'@;
put 'aS09MjU3KTw4PzA6a2ktND4+MjtmaT41JiYoZmk9MCk7dmFyIEVvPWRuK3pyW2tpXTtmaT4wJiYoRW8rPU1hKGxuLHVuLGZpKSx1bis9ZmkpLEZyPU1hKGxuLHVuLHlyKSx1bis9MTUmKGtpPUJ0Pj4+MT09MT9RdFtGcl06JHJbRnJdKTt2YXIgZ289KGtpPj4+PTQpPDQ/MDpraS0yPj4xLEJp'@;
put 'PXppW2tpXTtmb3IoZ28+MCYmKEJpKz1NYShsbix1bixnbyksdW4rPWdvKSwhQ24mJkluPEVvJiYoSW49KCR0PUlzKCR0LEVvKSkubGVuZ3RoKTtkbjxFbzspJHRbZG5dPSR0W2RuLUJpXSwrK2RufWVsc2UgJHRbZG4rK109a2l9ZWxzZXs3JnVuJiYodW4rPTgtKDcmdW4pKTt2YXIgVXI9bG5b'@;
put 'dW4+Pj4zXXxsblsxKyh1bj4+PjMpXTw8ODtpZih1bis9MzIsIUNuJiZJbjxkbitVciYmKEluPSgkdD1JcygkdCxkbitVcikpLmxlbmd0aCksImZ1bmN0aW9uIj09dHlwZW9mIGxuLmNvcHkpbG4uY29weSgkdCxkbix1bj4+PjMsKHVuPj4+MykrVXIpLGRuKz1Vcix1bis9OCpVcjtlbHNlIGZv'@;
put 'cig7VXItLSA+MDspJHRbZG4rK109bG5bdW4+Pj4zXSx1bis9OH1yZXR1cm5bQ24/JHQ6JHQuc2xpY2UoMCxkbiksdW4rNz4+PjNdfShsbi5zbGljZShsbi5sfHwwKSxDbik7cmV0dXJuIGxuLmwrPUJ0WzFdLEJ0WzBdfWZ1bmN0aW9uIFVpKGxuLENuKXtpZighbG4pdGhyb3cgbmV3IEVycm9y'@;
put 'KENuKTt0eXBlb2YgY29uc29sZTwidSImJmNvbnNvbGUuZXJyb3IoQ24pfWZ1bmN0aW9uIGVpKGxuLENuKXt2YXIgdW49bG47c3ModW4sMCk7dmFyIGRuPXtGaWxlSW5kZXg6W10sRnVsbFBhdGhzOltdfTtmbihkbix7cm9vdDpDbi5yb290fSk7Zm9yKHZhciBJbj11bi5sZW5ndGgtNDsoODAh'@;
put 'PXVuW0luXXx8NzUhPXVuW0luKzFdfHw1IT11bltJbisyXXx8NiE9dW5bSW4rM10pJiZJbj49MDspLS1Jbjt1bi5sPUluKzQsdW4ubCs9NDt2YXIgbnI9dW4ucmVhZF9zaGlmdCgyKTt1bi5sKz02O3ZhciB5cj11bi5yZWFkX3NoaWZ0KDQpO2Zvcih1bi5sPXlyLEluPTA7SW48bnI7KytJbil7'@;
put 'dW4ubCs9MjA7dmFyIFVyPXVuLnJlYWRfc2hpZnQoNCksRnI9dW4ucmVhZF9zaGlmdCg0KSxraT11bi5yZWFkX3NoaWZ0KDIpLGZpPXVuLnJlYWRfc2hpZnQoMiksRW89dW4ucmVhZF9zaGlmdCgyKTt1bi5sKz04O3ZhciBnbz11bi5yZWFkX3NoaWZ0KDQpLEJpPXZlKHVuLnNsaWNlKHVuLmwr'@;
put 'a2ksdW4ubCtraStmaSkpO3VuLmwrPWtpK2ZpK0VvO3ZhciAkbz11bi5sO3VuLmw9Z28rNCxrYSh1bixVcixGcixkbixCaSksdW4ubD0kb31yZXR1cm4gZG59ZnVuY3Rpb24ga2EobG4sQ24sdW4sQnQsJHQpe2xuLmwrPTI7dmFyIGRuPWxuLnJlYWRfc2hpZnQoMiksSW49bG4ucmVhZF9zaGlm'@;
put 'dCgyKSxucj1mdW5jdGlvbiBfZShsbil7dmFyIENuPTY1NTM1JmxuLnJlYWRfc2hpZnQoMiksdW49NjU1MzUmbG4ucmVhZF9zaGlmdCgyKSxCdD1uZXcgRGF0ZSwkdD0zMSZ1bixkbj0xNSYodW4+Pj49NSk7dW4+Pj49NCxCdC5zZXRNaWxsaXNlY29uZHMoMCksQnQuc2V0RnVsbFllYXIodW4r'@;
put 'MTk4MCksQnQuc2V0TW9udGgoZG4tMSksQnQuc2V0RGF0ZSgkdCk7dmFyIEluPTMxJkNuLG5yPTYzJihDbj4+Pj01KTtyZXR1cm4gQnQuc2V0SG91cnMoQ24+Pj49NiksQnQuc2V0TWludXRlcyhuciksQnQuc2V0U2Vjb25kcyhJbjw8MSksQnR9KGxuKTtpZig4MjU3JmRuKXRocm93IG5ldyBF'@;
put 'cnJvcigiVW5zdXBwb3J0ZWQgWklQIGVuY3J5cHRpb24iKTtmb3IodmFyIHlyPWxuLnJlYWRfc2hpZnQoNCksVXI9bG4ucmVhZF9zaGlmdCg0KSxGcj1sbi5yZWFkX3NoaWZ0KDQpLGtpPWxuLnJlYWRfc2hpZnQoMiksZmk9bG4ucmVhZF9zaGlmdCgyKSxFbz0iIixnbz0wO2dvPGtpOysrZ28p'@;
put 'RW8rPVN0cmluZy5mcm9tQ2hhckNvZGUobG5bbG4ubCsrXSk7aWYoZmkpe3ZhciBCaT12ZShsbi5zbGljZShsbi5sLGxuLmwrZmkpKTsoQmlbMjE1ODldfHx7fSkubXQmJihucj1CaVsyMTU4OV0ubXQpLCgoJHR8fHt9KVsyMTU4OV18fHt9KS5tdCYmKG5yPSR0WzIxNTg5XS5tdCl9bG4ubCs9'@;
put 'Zmk7dmFyICRvPWxuLnNsaWNlKGxuLmwsbG4ubCtVcik7c3dpdGNoKEluKXtjYXNlIDg6JG89ZnVuY3Rpb24geG4obG4sQ24pe2lmKCF2cilyZXR1cm4gYWkobG4sQ24pO3ZhciBCdD1uZXcoMCx2ci5JbmZsYXRlUmF3KSwkdD1CdC5fcHJvY2Vzc0NodW5rKGxuLnNsaWNlKGxuLmwpLEJ0Ll9m'@;
put 'aW5pc2hGbHVzaEZsYWcpO3JldHVybiBsbi5sKz1CdC5ieXRlc1JlYWQsJHR9KGxuLEZyKTticmVhaztjYXNlIDA6YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIFpJUCBDb21wcmVzc2lvbiBtZXRob2QgIitJbil9dmFyIHJpPSExOzgmZG4mJigxMzQ2OTU3NjA9'@;
put 'PSh5cj1sbi5yZWFkX3NoaWZ0KDQpKSYmKHlyPWxuLnJlYWRfc2hpZnQoNCkscmk9ITApLFVyPWxuLnJlYWRfc2hpZnQoNCksRnI9bG4ucmVhZF9zaGlmdCg0KSksVXIhPUNuJiZVaShyaSwiQmFkIGNvbXByZXNzZWQgc2l6ZTogIitDbisiICE9ICIrVXIpLEZyIT11biYmVWkocmksIkJhZCB1'@;
put 'bmNvbXByZXNzZWQgc2l6ZTogIit1bisiICE9ICIrRnIpO3ZhciBYcz1GZS5idWYoJG8sMCk7eXI+PjAhPVhzPj4wJiZVaShyaSwiQmFkIENSQzMyIGNoZWNrc3VtOiAiK3lyKyIgIT0gIitYcykscXMoQnQsRW8sJG8se3Vuc2FmZTohMCxtdDpucn0pfWZ1bmN0aW9uIHFzKGxuLENuLHVuLEJ0'@;
put 'KXt2YXIgJHQ9QnQmJkJ0LnVuc2FmZTskdHx8Zm4obG4pO3ZhciBkbj0hJHQmJk5lLmZpbmQobG4sQ24pO2lmKCFkbil7dmFyIEluPWxuLkZ1bGxQYXRoc1swXTtDbi5zbGljZSgwLEluLmxlbmd0aCk9PUluP0luPUNuOigiLyIhPUluLnNsaWNlKC0xKSYmKEluKz0iLyIpLEluPShJbitDbiku'@;
put 'cmVwbGFjZSgiLy8iLCIvIikpLGRuPXtuYW1lOm9lKENuKSx0eXBlOjJ9LGxuLkZpbGVJbmRleC5wdXNoKGRuKSxsbi5GdWxsUGF0aHMucHVzaChJbiksJHR8fE5lLnV0aWxzLmNmYl9nYyhsbil9cmV0dXJuIGRuLmNvbnRlbnQ9dW4sZG4uc2l6ZT11bj91bi5sZW5ndGg6MCxCdCYmKEJ0LkNM'@;
put 'U0lEJiYoZG4uY2xzaWQ9QnQuQ0xTSUQpLEJ0Lm10JiYoZG4ubXQ9QnQubXQpLEJ0LmN0JiYoZG4uY3Q9QnQuY3QpKSxkbn1yZXR1cm4gUC5maW5kPWZ1bmN0aW9uIGVyKGxuLENuKXt2YXIgdW49bG4uRnVsbFBhdGhzLm1hcChmdW5jdGlvbih5cil7cmV0dXJuIHlyLnRvVXBwZXJDYXNlKCl9'@;
put 'KSxCdD11bi5tYXAoZnVuY3Rpb24oeXIpe3ZhciBVcj15ci5zcGxpdCgiLyIpO3JldHVybiBVcltVci5sZW5ndGgtKCIvIj09eXIuc2xpY2UoLTEpPzI6MSldfSksJHQ9ITE7NDc9PT1Dbi5jaGFyQ29kZUF0KDApPygkdD0hMCxDbj11blswXS5zbGljZSgwLC0xKStDbik6JHQ9LTEhPT1Dbi5p'@;
put 'bmRleE9mKCIvIik7dmFyIGRuPUNuLnRvVXBwZXJDYXNlKCksSW49ITA9PT0kdD91bi5pbmRleE9mKGRuKTpCdC5pbmRleE9mKGRuKTtpZigtMSE9PUluKXJldHVybiBsbi5GaWxlSW5kZXhbSW5dO3ZhciBucj0hZG4ubWF0Y2gocCk7Zm9yKGRuPWRuLnJlcGxhY2UoeSwiIiksbnImJihkbj1k'@;
put 'bi5yZXBsYWNlKHAsIiEiKSksSW49MDtJbjx1bi5sZW5ndGg7KytJbilpZigobnI/dW5bSW5dLnJlcGxhY2UocCwiISIpOnVuW0luXSkucmVwbGFjZSh5LCIiKT09ZG58fChucj9CdFtJbl0ucmVwbGFjZShwLCIhIik6QnRbSW5dKS5yZXBsYWNlKHksIiIpPT1kbilyZXR1cm4gbG4uRmlsZUlu'@;
put 'ZGV4W0luXTtyZXR1cm4gbnVsbH0sUC5yZWFkPWZ1bmN0aW9uIHFuKGxuLENuKXtzd2l0Y2goQ24mJkNuLnR5cGV8fCJiYXNlNjQiKXtjYXNlImZpbGUiOnJldHVybiBmdW5jdGlvbiBnbihsbixDbil7cmV0dXJuIGplKCksVWUoTWUucmVhZEZpbGVTeW5jKGxuKSxDbil9KGxuLENuKTtjYXNl'@;
put 'ImJhc2U2NCI6cmV0dXJuIFVlKHgobGUuZGVjb2RlKGxuKSksQ24pO2Nhc2UiYmluYXJ5IjpyZXR1cm4gVWUoeChsbiksQ24pfXJldHVybiBVZShsbixDbil9LFAucGFyc2U9VWUsUC53cml0ZT1mdW5jdGlvbiBEbihsbixDbil7dmFyIHVuPU9uKGxuLENuKTtzd2l0Y2goQ24mJkNuLnR5cGUp'@;
put 'e2Nhc2UiZmlsZSI6cmV0dXJuIGplKCksTWUud3JpdGVGaWxlU3luYyhDbi5maWxlbmFtZSx1biksdW47Y2FzZSJiaW5hcnkiOnJldHVybiBmcih1bik7Y2FzZSJiYXNlNjQiOnJldHVybiBsZS5lbmNvZGUoZnIodW4pKX1yZXR1cm4gdW59LFAud3JpdGVGaWxlPWZ1bmN0aW9uIHRpKGxuLENu'@;
put 'LHVuKXtqZSgpO3ZhciBCdD1Pbihsbix1bik7TWUud3JpdGVGaWxlU3luYyhDbixCdCl9LFAudXRpbHM9e2NmYl9uZXc6ZnVuY3Rpb24gQ3MobG4pe3ZhciBDbj17fTtyZXR1cm4gZm4oQ24sbG4pLENufSxjZmJfYWRkOnFzLGNmYl9kZWw6ZnVuY3Rpb24gaGwobG4sQ24pe2ZuKGxuKTt2YXIg'@;
put 'dW49TmUuZmluZChsbixDbik7aWYodW4pZm9yKHZhciBCdD0wO0J0PGxuLkZpbGVJbmRleC5sZW5ndGg7KytCdClpZihsbi5GaWxlSW5kZXhbQnRdPT11bilyZXR1cm4gbG4uRmlsZUluZGV4LnNwbGljZShCdCwxKSxsbi5GdWxsUGF0aHMuc3BsaWNlKEJ0LDEpLCEwO3JldHVybiExfSxjZmJf'@;
put 'bW92OmZ1bmN0aW9uIGoyKGxuLENuLHVuKXtmbihsbik7dmFyIEJ0PU5lLmZpbmQobG4sQ24pO2lmKEJ0KWZvcih2YXIgJHQ9MDskdDxsbi5GaWxlSW5kZXgubGVuZ3RoOysrJHQpaWYobG4uRmlsZUluZGV4WyR0XT09QnQpcmV0dXJuIGxuLkZpbGVJbmRleFskdF0ubmFtZT1vZSh1biksbG4u'@;
put 'RnVsbFBhdGhzWyR0XT11biwhMDtyZXR1cm4hMX0sY2ZiX2djOmZ1bmN0aW9uIFhwKGxuKXt6bihsbiwhMCl9LFJlYWRTaGlmdDpObCxDaGVja0ZpZWxkOnUyLHByZXBfYmxvYjpzcyxiY29uY2F0Ok0sdXNlX3psaWI6ZnVuY3Rpb24gcnIobG4pe3RyeXt2YXIgdW49bmV3KDAsbG4uSW5mbGF0'@;
put 'ZVJhdyk7aWYodW4uX3Byb2Nlc3NDaHVuayhuZXcgVWludDhBcnJheShbMywwXSksdW4uX2ZpbmlzaEZsdXNoRmxhZyksIXVuLmJ5dGVzUmVhZCl0aHJvdyBuZXcgRXJyb3IoInpsaWIgZG9lcyBub3QgZXhwb3NlIGJ5dGVzUmVhZCIpO3ZyPWxufWNhdGNoKEJ0KXtjb25zb2xlLmVycm9yKCJj'@;
put 'YW5ub3QgdXNlIG5hdGl2ZSB6bGliOiAiKyhCdC5tZXNzYWdlfHxCdCkpfX0sX2RlZmxhdGVSYXc6d3MsX2luZmxhdGVSYXc6YWksY29uc3RzOklpfSxQfSgpO3RyeXtMZT1UKDc4NzczKX1jYXRjaHt9ZnVuY3Rpb24gQmUodyl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB3P04odyk6QXJyYXku'@;
put 'aXNBcnJheSh3KT9mdW5jdGlvbiBnKHcpe2lmKHR5cGVvZiBVaW50OEFycmF5PiJ1Iil0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIik7cmV0dXJuIG5ldyBVaW50OEFycmF5KHcpfSh3KTp3fWZ1bmN0aW9uIEhlKHcsUCxEKXtpZih0eXBlb2YgTGU8InUiJiZMZS53cml0ZUZpbGVTeW5j'@;
put 'KXJldHVybiBEP0xlLndyaXRlRmlsZVN5bmModyxQLEQpOkxlLndyaXRlRmlsZVN5bmModyxQKTt2YXIgZWU9InV0ZjgiPT1EP0hvKFApOlA7aWYodHlwZW9mIElFX1NhdmVGaWxlPCJ1IilyZXR1cm4gSUVfU2F2ZUZpbGUoZWUsdyk7aWYodHlwZW9mIEJsb2I8InUiKXt2YXIgb2U9bmV3IEJs'@;
put 'b2IoW0JlKGVlKV0se3R5cGU6ImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSJ9KTtpZih0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLm1zU2F2ZUJsb2IpcmV0dXJuIG5hdmlnYXRvci5tc1NhdmVCbG9iKG9lLHcpO2lmKHR5cGVvZiBzYXZlQXM8InUiKXJldHVybiBzYXZlQXMob2Us'@;
put 'dyk7aWYodHlwZW9mIFVSTDwidSImJnR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQmJlVSTC5jcmVhdGVPYmplY3RVUkwpe3ZhciBnZT1VUkwuY3JlYXRlT2JqZWN0VVJMKG9lKTtpZigib2JqZWN0Ij09dHlwZW9mIGNocm9tZSYmImZ1bmN0aW9uIj09dHlwZW9m'@;
put 'KGNocm9tZS5kb3dubG9hZHN8fHt9KS5kb3dubG9hZClyZXR1cm4gVVJMLnJldm9rZU9iamVjdFVSTCYmdHlwZW9mIHNldFRpbWVvdXQ8InUiJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7VVJMLnJldm9rZU9iamVjdFVSTChnZSl9LDZlNCksY2hyb21lLmRvd25sb2Fkcy5kb3dubG9hZCh7dXJs'@;
put 'OmdlLGZpbGVuYW1lOncsc2F2ZUFzOiEwfSk7dmFyIF9lPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtpZihudWxsIT1fZS5kb3dubG9hZClyZXR1cm4gX2UuZG93bmxvYWQ9dyxfZS5ocmVmPWdlLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoX2UpLF9lLmNsaWNrKCksZG9jdW1lbnQu'@;
put 'Ym9keS5yZW1vdmVDaGlsZChfZSksVVJMLnJldm9rZU9iamVjdFVSTCYmdHlwZW9mIHNldFRpbWVvdXQ8InUiJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7VVJMLnJldm9rZU9iamVjdFVSTChnZSl9LDZlNCksZ2V9fWlmKHR5cGVvZiAkPCJ1IiYmdHlwZW9mIEZpbGU8InUiJiZ0eXBlb2YgRm9s'@;
put 'ZGVyPCJ1Iil0cnl7dmFyIHZlPUZpbGUodyk7cmV0dXJuIHZlLm9wZW4oInciKSx2ZS5lbmNvZGluZz0iYmluYXJ5IixBcnJheS5pc0FycmF5KFApJiYoUD1GKFApKSx2ZS53cml0ZShQKSx2ZS5jbG9zZSgpLFB9Y2F0Y2goTWUpe2lmKCFNZS5tZXNzYWdlfHwhTWUubWVzc2FnZS5tYXRjaCgv'@;
put 'b25zdHJ1Y3QvKSl0aHJvdyBNZX10aHJvdyBuZXcgRXJyb3IoImNhbm5vdCBzYXZlIGZpbGUgIit3KX1mdW5jdGlvbiBtdCh3KXtmb3IodmFyIFA9T2JqZWN0LmtleXModyksRD1bXSxlZT0wO2VlPFAubGVuZ3RoOysrZWUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHcs'@;
put 'UFtlZV0pJiZELnB1c2goUFtlZV0pO3JldHVybiBEfWZ1bmN0aW9uIEtlKHcsUCl7Zm9yKHZhciBEPVtdLGVlPW10KHcpLG9lPTA7b2UhPT1lZS5sZW5ndGg7KytvZSludWxsPT1EW3dbZWVbb2VdXVtQXV0mJihEW3dbZWVbb2VdXVtQXV09ZWVbb2VdKTtyZXR1cm4gRH1mdW5jdGlvbiB3ZSh3'@;
put 'KXtmb3IodmFyIFA9W10sRD1tdCh3KSxlZT0wO2VlIT09RC5sZW5ndGg7KytlZSlQW3dbRFtlZV1dXT1EW2VlXTtyZXR1cm4gUH1mdW5jdGlvbiBJZSh3KXtmb3IodmFyIFA9W10sRD1tdCh3KSxlZT0wO2VlIT09RC5sZW5ndGg7KytlZSlQW3dbRFtlZV1dXT1wYXJzZUludChEW2VlXSwxMCk7'@;
put 'cmV0dXJuIFB9dmFyIHFlLGh0LGV0PW5ldyBEYXRlKDE4OTksMTEsMzAsMCwwLDApLG50PTA7ZnVuY3Rpb24gRWUoKXtudD1ldC5nZXRUaW1lKCkrNmU0KigobmV3IERhdGUpLmdldFRpbWV6b25lT2Zmc2V0KCktZXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkscWU9ZnVuY3Rpb24oUCxEKXt2YXIg'@;
put 'ZWU9UC5nZXRUaW1lKCk7cmV0dXJuIEQmJihlZS09MTI2MzE2OGU1KSwoZWUtbnQpLzg2NGU1fSxodD1mdW5jdGlvbihQKXt2YXIgRD1uZXcgRGF0ZTtyZXR1cm4gRC5zZXRUaW1lKDI0KlAqNjAqNjAqMWUzK250KSxEfX1mdW5jdGlvbiBhdCh3KXt2YXIgUD0wLEQ9MCxlZT0hMSxvZT13Lm1h'@;
put 'dGNoKC9QKFswLTlcLl0rWSk/KFswLTlcLl0rTSk/KFswLTlcLl0rRCk/VChbMC05XC5dK0gpPyhbMC05XC5dK00pPyhbMC05XC5dK1MpPy8pO2lmKCFvZSl0aHJvdyBuZXcgRXJyb3IoInwiK3crInwgaXMgbm90IGFuIElTTzg2MDEgRHVyYXRpb24iKTtmb3IodmFyIGdlPTE7Z2UhPW9lLmxl'@;
put 'bmd0aDsrK2dlKWlmKG9lW2dlXSl7c3dpdGNoKEQ9MSxnZT4zJiYoZWU9ITApLG9lW2dlXS5zbGljZShvZVtnZV0ubGVuZ3RoLTEpKXtjYXNlIlkiOnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgSVNPIER1cmF0aW9uIEZpZWxkOiAiK29lW2dlXS5zbGljZShvZVtnZV0ubGVuZ3RoLTEp'@;
put 'KTtjYXNlIkQiOkQqPTI0O2Nhc2UiSCI6RCo9NjA7Y2FzZSJNIjppZighZWUpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBJU08gRHVyYXRpb24gRmllbGQ6IE0iKTtEKj02MH1QKz1EKnBhcnNlSW50KG9lW2dlXSwxMCl9cmV0dXJuIFB9RWUoKTt2YXIgY3Q9bmV3IERhdGUoIjIwMTct'@;
put 'MDItMTlUMTk6MDY6MDkuMDAwWiIpO2lzTmFOKGN0LmdldEZ1bGxZZWFyKCkpJiYoY3Q9bmV3IERhdGUoIjIvMTkvMTciKSk7dmFyIE90PTIwMTc9PWN0LmdldEZ1bGxZZWFyKCk7ZnVuY3Rpb24gUHQodyxQKXt2YXIgRD1uZXcgRGF0ZSh3KTtpZihPdClyZXR1cm4gUD4wP0Quc2V0VGltZShE'@;
put 'LmdldFRpbWUoKSs2MCpELmdldFRpbWV6b25lT2Zmc2V0KCkqMWUzKTpQPDAmJkQuc2V0VGltZShELmdldFRpbWUoKS02MCpELmdldFRpbWV6b25lT2Zmc2V0KCkqMWUzKSxEO2lmKHcgaW5zdGFuY2VvZiBEYXRlKXJldHVybiB3O2lmKDE5MTc9PWN0LmdldEZ1bGxZZWFyKCkmJiFpc05hTihE'@;
put 'LmdldEZ1bGxZZWFyKCkpKXt2YXIgZWU9RC5nZXRGdWxsWWVhcigpO3JldHVybiB3LmluZGV4T2YoIiIrZWUpPi0xfHxELnNldEZ1bGxZZWFyKEQuZ2V0RnVsbFllYXIoKSsxMDApLER9dmFyIG9lPXcubWF0Y2goL1xkKy9nKXx8WyIyMDE3IiwiMiIsIjE5IiwiMCIsIjAiLCIwIl0sZ2U9bmV3'@;
put 'IERhdGUoK29lWzBdLCtvZVsxXS0xLCtvZVsyXSwrb2VbM118fDAsK29lWzRdfHwwLCtvZVs1XXx8MCk7cmV0dXJuIHcuaW5kZXhPZigiWiIpPi0xJiYoZ2U9bmV3IERhdGUoZ2UuZ2V0VGltZSgpLTYwKmdlLmdldFRpbWV6b25lT2Zmc2V0KCkqMWUzKSksZ2V9ZnVuY3Rpb24gQXQodyl7Zm9y'@;
put 'KHZhciBQPSIiLEQ9MDtEIT13Lmxlbmd0aDsrK0QpUCs9U3RyaW5nLmZyb21DaGFyQ29kZSh3W0RdKTtyZXR1cm4gUH1mdW5jdGlvbiBKdCh3KXtpZigib2JqZWN0IiE9dHlwZW9mIHd8fG51bGw9PXcpcmV0dXJuIHc7aWYodyBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIG5ldyBEYXRlKHcuZ2V0'@;
put 'VGltZSgpKTtpZihBcnJheS5pc0FycmF5KHcpKXJldHVybiBmdW5jdGlvbiBtbih3KXtmb3IodmFyIFA9W10sRD0wO0Q8dy5sZW5ndGg7KytEKXt2YXIgZWU9d1tEXTsib2JqZWN0Ij09dHlwZW9mIGVlP1BbRF09SnQoZWUpOm51bGwhPWVlJiYoUFtEXT1lZSl9cmV0dXJuIFB9KHcpO3ZhciBQ'@;
put 'PXt9O2Zvcih2YXIgRCBpbiB3KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh3LEQpJiYoUFtEXT1KdCh3W0RdKSk7cmV0dXJuIFB9ZnVuY3Rpb24gTnQodyxQKXtpZigib2JqZWN0IiE9dHlwZW9mIFB8fG51bGw9PVApcmV0dXJuIHc7Zm9yKHZhciBEIGluIFApT2JqZWN0'@;
put 'LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFAsRCkmJih3W0RdPUp0KFBbRF0pKTtyZXR1cm4gd31mdW5jdGlvbiBibih3LFApe2Zvcih2YXIgRD0iIjtELmxlbmd0aDxQOylEKz13O3JldHVybiBEfWZ1bmN0aW9uIEduKHcpe3ZhciBQPU51bWJlcih3KTtpZighaXNOYU4oUCkpcmV0'@;
put 'dXJuIGlzRmluaXRlKFApP1A6TmFOO2lmKCEvXGQvLnRlc3QodykpcmV0dXJuIFA7dmFyIEQ9MSxlZT13LnJlcGxhY2UoLyhbXGRdKSwoW1xkXSkvZywiJDEkMiIpLnJlcGxhY2UoL1skXS9nLCIiKS5yZXBsYWNlKC9bJV0vZyxmdW5jdGlvbigpe3JldHVybiBEKj0xMDAsIiJ9KTtyZXR1cm4g'@;
put 'aXNOYU4oUD1OdW1iZXIoZWUpKSYmKGVlPWVlLnJlcGxhY2UoL1soXSguKilbKV0vLGZ1bmN0aW9uKG9lLGdlKXtyZXR1cm4gRD0tRCxnZX0pLGlzTmFOKFA9TnVtYmVyKGVlKSkpP1A6UC9EfWZ1bmN0aW9uIG9uKHcpe3ZhciBQPW5ldyBEYXRlKHcpLEQ9bmV3IERhdGUoTmFOKSxlZT1QLmdl'@;
put 'dFllYXIoKSxvZT1QLmdldE1vbnRoKCksZ2U9UC5nZXREYXRlKCk7cmV0dXJuIGlzTmFOKGdlKXx8ZWU8MHx8ZWU+ODA5OT9EOihvZT4wfHxnZT4xKSYmMTAxIT1lZXx8dy50b0xvd2VyQ2FzZSgpLm1hdGNoKC9qYW58ZmVifG1hcnxhcHJ8bWF5fGp1bnxqdWx8YXVnfHNlcHxvY3R8bm92fGRl'@;
put 'Yy8pP1A6dy5tYXRjaCgvW14tMC05OixcL1xcXS8pP0Q6UH1mdW5jdGlvbiAkbih3LFApe2lmKFAmJlAucmF3KXJldHVybnt0OiJzIix2Ond9O2lmKCF3KXJldHVybnt0OiJ6In07aWYoIlRSVUUiPT09dylyZXR1cm57dDoiYiIsdjohMH07aWYoIkZBTFNFIj09PXcpcmV0dXJue3Q6ImIiLHY6'@;
put 'ITF9O3ZhciBEPSIiLGVlPU51bWJlcih3KTtpZihpc0Zpbml0ZShlZSkpcmV0dXJue3Q6Im4iLHY6ZWV9O2lmKGlzTmFOKGVlKSYmL1xkLy50ZXN0KHcpKXt2YXIgb2U9MSxnZT13LnJlcGxhY2UoLyhbXGRdKSwoW1xkXSkvZyxmdW5jdGlvbihpdCxmdCxNdCl7cmV0dXJuIER8fChEPSIjLCMj'@;
put 'MCIpLGZ0K010fSkucmVwbGFjZSgvWyRdL2csIiIpLnJlcGxhY2UoL1wuXGQqLyxmdW5jdGlvbihpdCl7RHx8KEQ9IjAiKSxEKz0iLiI7Zm9yKHZhciBmdD0yO2Z0PD1pdC5sZW5ndGg7KytmdClEKz0iMCI7cmV0dXJuIGl0fSkucmVwbGFjZSgvWyVdL2csZnVuY3Rpb24oKXtyZXR1cm4gb2Uq'@;
put 'PTEwMCxEfHwoRD0iMCIpLEQrPSIlIiwiIn0pO2lmKCFpc05hTihlZT1OdW1iZXIoZ2UpKSlyZXR1cm57dDoibiIsdjplZS9vZSx6OkR9O2lmKGdlPWdlLnJlcGxhY2UoL1soXSguKilbKV0vLGZ1bmN0aW9uKGl0LGZ0KXtyZXR1cm4gb2U9LW9lLGZ0fSksIWlzTmFOKGVlPU51bWJlcihnZSkp'@;
put 'KXJldHVybnt0OiJuIix2OmVlL29lLHo6KER8fCIwIikrIl8pOygiKyhEfHwiMCIpKyIpO0AifX1lOmlmKCFQfHwhUC5yYXdEYXRlcyl7dmFyIF9lPVAmJlAuY2VsbERhdGVzLHZlPW5ldyBEYXRlKHcpLGplPXZlLmdldFllYXIoKSxVZT12ZS5nZXRNb250aCgpLFhlPXZlLmdldERhdGUoKTtp'@;
put 'Zihpc05hTihYZSl8fGplPDB8fGplPjgwOTkpYnJlYWsgZTtpZigoVWU+MHx8WGU+MSkmJjEwMSE9amUpcmV0dXJue3Q6X2U/ImQiOiJuIix2Ol9lP3ZlOnFlKHZlKSx6OlAuZGF0ZU5GfHxTLl90YWJsZVsxNF19O2lmKHcudG9Mb3dlckNhc2UoKS5tYXRjaCgvamFufGZlYnxtYXJ8YXByfG1h'@;
put 'eXxqdW58anVsfGF1Z3xzZXB8b2N0fG5vdnxkZWMvKSlyZXR1cm57dDpfZT8iZCI6Im4iLHY6X2U/dmU6cWUodmUpLHo6UC5kYXRlTkZ8fFMuX3RhYmxlWzE0XX07aWYody5tYXRjaCgvW14tMC05OixcL1xcXS8pKWJyZWFrIGU7cmV0dXJuIHZlfXJldHVybnt0OiJzIix2Ond9fXZhciB6dCxO'@;
put 'bj01PT0iYWJhY2FiYSIuc3BsaXQoLyg6P2IpL2kpLmxlbmd0aDtmdW5jdGlvbiBobih3KXtyZXR1cm4gbnVsbCE9dyYmIXd9ZnVuY3Rpb24gQ3Qodyl7cmV0dXJuIHcuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdy5zbGljZSgxKX1mdW5jdGlvbiBlbih3KXtyZXR1cm4gdz93LmRhdGE/VSh3'@;
put 'LmRhdGEpOncuYXNOb2RlQnVmZmVyJiZkZT9VKHcuYXNOb2RlQnVmZmVyKCkudG9TdHJpbmcoImJpbmFyeSIpKTp3LmFzQmluYXJ5P1Uody5hc0JpbmFyeSgpKTp3Ll9kYXRhJiZ3Ll9kYXRhLmdldENvbnRlbnQ/VShBdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh3Ll9kYXRhLmdldENv'@;
put 'bnRlbnQoKSwwKSkpOncuY29udGVudCYmdy50eXBlP1UoQXQody5jb250ZW50KSk6bnVsbDpudWxsfWZ1bmN0aW9uIF90KHcpe2lmKCF3KXJldHVybiBudWxsO2lmKHcuZGF0YSlyZXR1cm4gVih3LmRhdGEpO2lmKHcuYXNOb2RlQnVmZmVyJiZkZSlyZXR1cm4gdy5hc05vZGVCdWZmZXIoKTtp'@;
put 'Zih3Ll9kYXRhJiZ3Ll9kYXRhLmdldENvbnRlbnQpe3ZhciBQPXcuX2RhdGEuZ2V0Q29udGVudCgpO3JldHVybiJzdHJpbmciPT10eXBlb2YgUD9WKFApOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKFApfXJldHVybiB3LmNvbnRlbnQmJncudHlwZT93LmNvbnRlbnQ6bnVsbH1mdW5jdGlv'@;
put 'biBfbih3LFApe2Zvcih2YXIgRD13LkZ1bGxQYXRoc3x8bXQody5maWxlcyksZWU9UC50b0xvd2VyQ2FzZSgpLG9lPWVlLnJlcGxhY2UoL1wvL2csIlxcIiksZ2U9MDtnZTxELmxlbmd0aDsrK2dlKXt2YXIgX2U9RFtnZV0udG9Mb3dlckNhc2UoKTtpZihlZT09X2V8fG9lPT1fZSlyZXR1cm4g'@;
put 'dy5maWxlc1tEW2dlXV19cmV0dXJuIG51bGx9ZnVuY3Rpb24gb3QodyxQKXt2YXIgRD1fbih3LFApO2lmKG51bGw9PUQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBmaWxlICIrUCsiIGluIHppcCIpO3JldHVybiBEfWZ1bmN0aW9uIEl0KHcsUCxEKXtpZighRClyZXR1cm4gZnVuY3Rp'@;
put 'b24gVnQodyl7cmV0dXJuIHcmJiIuYmluIj09PXcubmFtZS5zbGljZSgtNCk/X3Qodyk6ZW4odyl9KG90KHcsUCkpO2lmKCFQKXJldHVybiBudWxsO3RyeXtyZXR1cm4gSXQodyxQKX1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gbm4odyxQLEQpe2lmKCFEKXJldHVybiBlbihvdCh3LFAp'@;
put 'KTtpZighUClyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIG5uKHcsUCl9Y2F0Y2h7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIER0KHcsUCxEKXtpZighRClyZXR1cm4gX3Qob3QodyxQKSk7aWYoIVApcmV0dXJuIG51bGw7dHJ5e3JldHVybiBEdCh3LFApfWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlv'@;
put 'biBHdCh3LFAsRCl7dy5GdWxsUGF0aHM/TmUudXRpbHMuY2ZiX2FkZCh3LFAsRCk6dy5maWxlKFAsRCl9ZnVuY3Rpb24gTW4oKXtyZXR1cm4genQ/bmV3IHp0Ok5lLnV0aWxzLmNmYl9uZXcoKX1mdW5jdGlvbiBUbih3LFApe3ZhciBEO2lmKHp0KXN3aXRjaChQLnR5cGUpe2Nhc2UiYmFzZTY0'@;
put 'IjpEPW5ldyB6dCh3LHtiYXNlNjQ6ITB9KTticmVhaztjYXNlImJpbmFyeSI6Y2FzZSJhcnJheSI6RD1uZXcgenQodyx7YmFzZTY0OiExfSk7YnJlYWs7Y2FzZSJidWZmZXIiOkQ9bmV3IHp0KHcpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK1Au'@;
put 'dHlwZSl9ZWxzZSBzd2l0Y2goUC50eXBlKXtjYXNlImJhc2U2NCI6RD1OZS5yZWFkKHcse3R5cGU6ImJhc2U2NCJ9KTticmVhaztjYXNlImJpbmFyeSI6RD1OZS5yZWFkKHcse3R5cGU6ImJpbmFyeSJ9KTticmVhaztjYXNlImJ1ZmZlciI6Y2FzZSJhcnJheSI6RD1OZS5yZWFkKHcse3R5cGU6'@;
put 'ImJ1ZmZlciJ9KTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitQLnR5cGUpfXJldHVybiBEfWZ1bmN0aW9uIHNuKHcsUCl7aWYoIi8iPT13LmNoYXJBdCgwKSlyZXR1cm4gdy5zbGljZSgxKTt2YXIgRD1QLnNwbGl0KCIvIik7Ii8iIT1QLnNsaWNl'@;
put 'KC0xKSYmRC5wb3AoKTtmb3IodmFyIGVlPXcuc3BsaXQoIi8iKTswIT09ZWUubGVuZ3RoOyl7dmFyIG9lPWVlLnNoaWZ0KCk7Ii4uIj09PW9lP0QucG9wKCk6Ii4iIT09b2UmJkQucHVzaChvZSl9cmV0dXJuIEQuam9pbigiLyIpfXR5cGVvZiBKU1ppcFN5bmM8InUiJiYoenQ9SlNaaXBTeW5j'@;
put 'KSxXZS5leHBvcnRzJiZ0eXBlb2YgenQ+InUiJiYoenQ9VCg3NTQ0NikpO3ZhciBCbj0nPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/PlxyXG4nLEZuPS8oPzpbXiJccz8+XC9dKylccyo9XHMqKCg/OiIpKD86W14iXSo/KSg/OiIpfCg/Oicp'@;
put 'KD86W14nXSo/KSg/OicpfCg/OlteJyI+XHNdKykpL2cscXQ9LzxbXC9cP10/W2EtekEtWjAtOTpfLV0rKD86XHMrW14iXHM/PlwvXStccyo9XHMqKD86IlteIl0qInwnW14nXSonfFteJyI+XHM9XSspKSpccz9bXC9cP10/Pi9nO0JuLm1hdGNoKHF0KXx8KHF0PS88W14+XSo+L2cpO3ZhciBI'@;
put 'bj0vPFx3KjovLGlpPS88KFwvPylcdys6LztmdW5jdGlvbiBjbih3LFAsRCl7Zm9yKHZhciBlZT17fSxvZT0wLGdlPTA7b2UhPT13Lmxlbmd0aCYmMzIhPT0oZ2U9dy5jaGFyQ29kZUF0KG9lKSkmJjEwIT09Z2UmJjEzIT09Z2U7KytvZSk7aWYoUHx8KGVlWzBdPXcuc2xpY2UoMCxvZSkpLG9l'@;
put 'PT09dy5sZW5ndGgpcmV0dXJuIGVlO3ZhciBfZT13Lm1hdGNoKEZuKSx2ZT0wLE1lPSIiLGplPTAsVWU9IiIsWGU9IiIsaXQ9MTtpZihfZSlmb3IoamU9MDtqZSE9X2UubGVuZ3RoOysramUpe2ZvcihYZT1fZVtqZV0sZ2U9MDtnZSE9WGUubGVuZ3RoJiY2MSE9PVhlLmNoYXJDb2RlQXQoZ2Up'@;
put 'OysrZ2UpO2ZvcihVZT1YZS5zbGljZSgwLGdlKS50cmltKCk7MzI9PVhlLmNoYXJDb2RlQXQoZ2UrMSk7KSsrZ2U7Zm9yKGl0PTM0PT0ob2U9WGUuY2hhckNvZGVBdChnZSsxKSl8fDM5PT1vZT8xOjAsTWU9WGUuc2xpY2UoZ2UrMStpdCxYZS5sZW5ndGgtaXQpLHZlPTA7dmUhPVVlLmxlbmd0'@;
put 'aCYmNTghPT1VZS5jaGFyQ29kZUF0KHZlKTsrK3ZlKTtpZih2ZT09PVVlLmxlbmd0aClVZS5pbmRleE9mKCJfIik+MCYmKFVlPVVlLnNsaWNlKDAsVWUuaW5kZXhPZigiXyIpKSksZWVbVWVdPU1lLER8fChlZVtVZS50b0xvd2VyQ2FzZSgpXT1NZSk7ZWxzZXt2YXIgZnQ9KDU9PT12ZSYmInht'@;
put 'bG5zIj09PVVlLnNsaWNlKDAsNSk/InhtbG5zIjoiIikrVWUuc2xpY2UodmUrMSk7aWYoZWVbZnRdJiYiZXh0Ij09VWUuc2xpY2UodmUtMyx2ZSkpY29udGludWU7ZWVbZnRdPU1lLER8fChlZVtmdC50b0xvd2VyQ2FzZSgpXT1NZSl9fXJldHVybiBlZX1mdW5jdGlvbiBqbih3KXtyZXR1cm4g'@;
put 'dy5yZXBsYWNlKGlpLCI8JDEiKX12YXIgWHI9eyImcXVvdDsiOiciJywiJmFwb3M7IjoiJyIsIiZndDsiOiI+IiwiJmx0OyI6IjwiLCImYW1wOyI6IiYifSx2aT13ZShYciksRXI9ZnVuY3Rpb24oKXt2YXIgdz0vJig/OnF1b3R8YXBvc3xndHxsdHxhbXB8I3g/KFtcZGEtZkEtRl0rKSk7L2dp'@;
put 'LFA9L194KFtcZGEtZkEtRl17NH0pXy9naTtyZXR1cm4gZnVuY3Rpb24gRChlZSl7dmFyIG9lPWVlKyIiLGdlPW9lLmluZGV4T2YoIjwhW0NEQVRBWyIpO2lmKC0xPT1nZSlyZXR1cm4gb2UucmVwbGFjZSh3LGZ1bmN0aW9uKHZlLE1lKXtyZXR1cm4gWHJbdmVdfHxTdHJpbmcuZnJvbUNoYXJD'@;
put 'b2RlKHBhcnNlSW50KE1lLHZlLmluZGV4T2YoIngiKT4tMT8xNjoxMCkpfHx2ZX0pLnJlcGxhY2UoUCxmdW5jdGlvbih2ZSxNZSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoTWUsMTYpKX0pO3ZhciBfZT1vZS5pbmRleE9mKCJdXT4iKTtyZXR1cm4gRChvZS5zbGljZSgw'@;
put 'LGdlKSkrb2Uuc2xpY2UoZ2UrOSxfZSkrRChvZS5zbGljZShfZSszKSl9fSgpLFlpPS9bJjw+JyJdL2csSnI9L1tcdTAwMDAtXHUwMDA4XHUwMDBiLVx1MDAxZl0vZyxhbz0vX3hbMC05YS1mQS1GXXs0fV8vZztmdW5jdGlvbiBCcih3KXtyZXR1cm4odysiIikucmVwbGFjZShhbywiX3gwMDVG'@;
put 'JCYiKS5yZXBsYWNlKFlpLGZ1bmN0aW9uKEQpe3JldHVybiB2aVtEXX0pLnJlcGxhY2UoSnIsZnVuY3Rpb24oRCl7cmV0dXJuIl94IisoIjAwMCIrRC5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpKyJfIn0pfWZ1bmN0aW9uIEppKHcpe3JldHVybiBCcih3KS5yZXBsYWNl'@;
put 'KC9cbi9nLCJfeDAwMGFfIil9ZnVuY3Rpb24gdG8odyl7cmV0dXJuIEJyKHcpLnJlcGxhY2UoLyAvZywiX3gwMDIwXyIpfXZhciBjbz0vW1x1MDAwMC1cdTAwMWZdL2c7ZnVuY3Rpb24gbG8odyl7cmV0dXJuKHcrIiIpLnJlcGxhY2UoWWksZnVuY3Rpb24oRCl7cmV0dXJuIHZpW0RdfSkucmVw'@;
put 'bGFjZSgvXG4vZywiPGJyLz4iKS5yZXBsYWNlKGNvLGZ1bmN0aW9uKEQpe3JldHVybiImI3giKygiMDAwIitELmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCkrIjsifSl9ZnVuY3Rpb24gc28odyl7cmV0dXJuKHcrIiIpLnJlcGxhY2UoWWksZnVuY3Rpb24oRCl7cmV0dXJu'@;
put 'IHZpW0RdfSkucmVwbGFjZShjbyxmdW5jdGlvbihEKXtyZXR1cm4iJiN4IitELmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkrIjsifSl9dmFyIFhpPWZ1bmN0aW9uKCl7dmFyIHc9LyYjKFxkKyk7L2c7ZnVuY3Rpb24gUChELGVlKXtyZXR1cm4gU3RyaW5nLmZyb21D'@;
put 'aGFyQ29kZShwYXJzZUludChlZSwxMCkpfXJldHVybiBmdW5jdGlvbihlZSl7cmV0dXJuIGVlLnJlcGxhY2UodyxQKX19KCkscG89ZnVuY3Rpb24oUCl7cmV0dXJuIFAucmVwbGFjZSgvKFxyXG58W1xyXG5dKS9nLCImIzEwOyIpfTtmdW5jdGlvbiBfcih3KXtzd2l0Y2godyl7Y2FzZSAxOmNh'@;
put 'c2UhMDpjYXNlIjEiOmNhc2UidHJ1ZSI6Y2FzZSJUUlVFIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX12YXIgRmk9ZnVuY3Rpb24oUCl7Zm9yKHZhciBEPSIiLGVlPTAsb2U9MCxnZT0wLF9lPTAsdmU9MCxNZT0wO2VlPFAubGVuZ3RoOykob2U9UC5jaGFyQ29kZUF0KGVlKyspKTwxMjg/'@;
put 'RCs9U3RyaW5nLmZyb21DaGFyQ29kZShvZSk6KGdlPVAuY2hhckNvZGVBdChlZSsrKSxvZT4xOTEmJm9lPDIyND8odmU9KDMxJm9lKTw8Nix2ZXw9NjMmZ2UsRCs9U3RyaW5nLmZyb21DaGFyQ29kZSh2ZSkpOihfZT1QLmNoYXJDb2RlQXQoZWUrKyksb2U8MjQwP0QrPVN0cmluZy5mcm9tQ2hh'@;
put 'ckNvZGUoKDE1Jm9lKTw8MTJ8KDYzJmdlKTw8Nnw2MyZfZSk6KE1lPSgoNyZvZSk8PDE4fCg2MyZnZSk8PDEyfCg2MyZfZSk8PDZ8NjMmKHZlPVAuY2hhckNvZGVBdChlZSsrKSkpLTY1NTM2LEQrPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYrKE1lPj4+MTAmMTAyMykpLEQrPVN0cmluZy5m'@;
put 'cm9tQ2hhckNvZGUoNTYzMjArKDEwMjMmTWUpKSkpKTtyZXR1cm4gRH0sSG89ZnVuY3Rpb24odyl7Zm9yKHZhciBQPVtdLEQ9MCxlZT0wLG9lPTA7RDx3Lmxlbmd0aDspc3dpdGNoKGVlPXcuY2hhckNvZGVBdChEKyspLCEwKXtjYXNlIGVlPDEyODpQLnB1c2goU3RyaW5nLmZyb21DaGFyQ29k'@;
put 'ZShlZSkpO2JyZWFrO2Nhc2UgZWU8MjA0ODpQLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxOTIrKGVlPj42KSkpLFAucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCsoNjMmZWUpKSk7YnJlYWs7Y2FzZSBlZT49NTUyOTYmJmVlPDU3MzQ0OmVlLT01NTI5NixvZT13LmNoYXJDb2RlQXQo'@;
put 'RCsrKS01NjMyMCsoZWU8PDEwKSxQLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgyNDArKG9lPj4xOCY3KSkpLFAucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDE0NCsob2U+PjEyJjYzKSkpLFAucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCsob2U+PjYmNjMpKSksUC5wdXNoKFN0cmlu'@;
put 'Zy5mcm9tQ2hhckNvZGUoMTI4Kyg2MyZvZSkpKTticmVhaztkZWZhdWx0OlAucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDIyNCsoZWU+PjEyKSkpLFAucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCsoZWU+PjYmNjMpKSksUC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTI4Kyg2MyZl'@;
put 'ZSkpKX1yZXR1cm4gUC5qb2luKCIiKX07aWYoZGUpe3ZhciBnYT1mdW5jdGlvbihQKXt2YXIgZWUsb2UsTWUsRD1CdWZmZXIuYWxsb2MoMipQLmxlbmd0aCksZ2U9MSxfZT0wLHZlPTA7Zm9yKG9lPTA7b2U8UC5sZW5ndGg7b2UrPWdlKWdlPTEsKE1lPVAuY2hhckNvZGVBdChvZSkpPDEyOD9l'@;
put 'ZT1NZTpNZTwyMjQ/KGVlPTY0KigzMSZNZSkrKDYzJlAuY2hhckNvZGVBdChvZSsxKSksZ2U9Mik6TWU8MjQwPyhlZT00MDk2KigxNSZNZSkrNjQqKDYzJlAuY2hhckNvZGVBdChvZSsxKSkrKDYzJlAuY2hhckNvZGVBdChvZSsyKSksZ2U9Myk6KGdlPTQsZWU9MjYyMTQ0Kig3Jk1lKSs0MDk2'@;
put 'Kig2MyZQLmNoYXJDb2RlQXQob2UrMSkpKzY0Kig2MyZQLmNoYXJDb2RlQXQob2UrMikpKyg2MyZQLmNoYXJDb2RlQXQob2UrMykpLHZlPTU1Mjk2KygoZWUtPTY1NTM2KT4+PjEwJjEwMjMpLGVlPTU2MzIwKygxMDIzJmVlKSksMCE9PXZlJiYoRFtfZSsrXT0yNTUmdmUsRFtfZSsrXT12ZT4+'@;
put 'PjgsdmU9MCksRFtfZSsrXT1lZSUyNTYsRFtfZSsrXT1lZT4+Pjg7cmV0dXJuIEQuc2xpY2UoMCxfZSkudG9TdHJpbmcoInVjczIiKX0sbGE9ImZvbyBiYXIgYmF6XHhlMlx4OThceDgzXHhmMFx4OWZceDhkXHhhMyI7RmkobGEpPT1nYShsYSkmJihGaT1nYSk7dmFyIFZ1PWZ1bmN0aW9uKFAp'@;
put 'e3JldHVybiB1ZShQLCJiaW5hcnkiKS50b1N0cmluZygidXRmOCIpfTtGaShsYSk9PVZ1KGxhKSYmKEZpPVZ1KSxIbz1mdW5jdGlvbih3KXtyZXR1cm4gdWUodywidXRmOCIpLnRvU3RyaW5nKCJiaW5hcnkiKX19dmFyIHcsZ3M9KHc9e30sZnVuY3Rpb24oRCxlZSl7dmFyIG9lPUQrInwiKyhl'@;
put 'ZXx8IiIpO3JldHVybiB3W29lXT93W29lXTp3W29lXT1uZXcgUmVnRXhwKCI8KD86XFx3KzopPyIrRCsnKD86IHhtbDpzcGFjZT0icHJlc2VydmUiKT8oPzpbXj5dKik+KFtcXHNcXFNdKj8pPC8oPzpcXHcrOik/JytEKyI+IixlZXx8IiIpfSksQnU9ZnVuY3Rpb24oKXt2YXIgdz1bWyJuYnNw'@;
put 'IiwiICJdLFsibWlkZG90IiwiXHhiNyJdLFsicXVvdCIsJyInXSxbImFwb3MiLCInIl0sWyJndCIsIj4iXSxbImx0IiwiPCJdLFsiYW1wIiwiJiJdXS5tYXAoZnVuY3Rpb24oUCl7cmV0dXJuW25ldyBSZWdFeHAoIiYiK1BbMF0rIjsiLCJpZyIpLFBbMV1dfSk7cmV0dXJuIGZ1bmN0aW9uKEQp'@;
put 'e2Zvcih2YXIgZWU9RC5yZXBsYWNlKC9eW1x0XG5cciBdKy8sIiIpLnJlcGxhY2UoL1tcdFxuXHIgXSskLywiIikucmVwbGFjZSgvW1x0XG5cciBdKy9nLCIgIikucmVwbGFjZSgvPFxzKltiQl1bclJdXHMqXC8/Pi9nLCJcbiIpLnJlcGxhY2UoLzxbXj5dKj4vZywiIiksb2U9MDtvZTx3Lmxl'@;
put 'bmd0aDsrK29lKWVlPWVlLnJlcGxhY2Uod1tvZV1bMF0sd1tvZV1bMV0pO3JldHVybiBlZX19KCksWDA9ZnVuY3Rpb24oKXt2YXIgdz17fTtyZXR1cm4gZnVuY3Rpb24oRCl7cmV0dXJuIHZvaWQgMCE9PXdbRF0/d1tEXTp3W0RdPW5ldyBSZWdFeHAoIjwoPzp2dDopPyIrRCsiPihbXFxzXFxT'@;
put 'XSo/KTwvKD86dnQ6KT8iK0QrIj4iLCJnIil9fSgpLEozPS88XC8/KD86dnQ6KT92YXJpYW50Pi9nLEtkPS88KD86dnQ6KShbXj5dKik+KFtcc1xTXSopPC87ZnVuY3Rpb24gZDAodyxQKXt2YXIgRD1jbih3KSxlZT13Lm1hdGNoKFgwKEQuYmFzZVR5cGUpKXx8W10sb2U9W107aWYoZWUubGVu'@;
put 'Z3RoIT1ELnNpemUpe2lmKFAuV1RGKXRocm93IG5ldyBFcnJvcigidW5leHBlY3RlZCB2ZWN0b3IgbGVuZ3RoICIrZWUubGVuZ3RoKyIgIT0gIitELnNpemUpO3JldHVybiBvZX1yZXR1cm4gZWUuZm9yRWFjaChmdW5jdGlvbihnZSl7dmFyIF9lPWdlLnJlcGxhY2UoSjMsIiIpLm1hdGNoKEtk'@;
put 'KTtfZSYmb2UucHVzaCh7djpGaShfZVsyXSksdDpfZVsxXX0pfSksb2V9dmFyIExjPS8oXlxzfFxzJHxcbikvO2Z1bmN0aW9uIHZhKHcsUCl7cmV0dXJuIjwiK3crKFAubWF0Y2goTGMpPycgeG1sOnNwYWNlPSJwcmVzZXJ2ZSInOiIiKSsiPiIrUCsiPC8iK3crIj4ifWZ1bmN0aW9uIEZsKHcp'@;
put 'e3JldHVybiBtdCh3KS5tYXAoZnVuY3Rpb24oUCl7cmV0dXJuIiAiK1ArJz0iJyt3W1BdKyciJ30pLmpvaW4oIiIpfWZ1bmN0aW9uIE1yKHcsUCxEKXtyZXR1cm4iPCIrdysobnVsbCE9RD9GbChEKToiIikrKG51bGwhPVA/KFAubWF0Y2goTGMpPycgeG1sOnNwYWNlPSJwcmVzZXJ2ZSInOiIi'@;
put 'KSsiPiIrUCsiPC8iK3c6Ii8iKSsiPiJ9ZnVuY3Rpb24gcjIodyxQKXt0cnl7cmV0dXJuIHcudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9cLlxkKi8sIiIpfWNhdGNoKEQpe2lmKFApdGhyb3cgRH1yZXR1cm4iIn12YXIgSXIsRXUsc2E9e2RjOiJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMv'@;
put 'MS4xLyIsZGN0ZXJtczoiaHR0cDovL3B1cmwub3JnL2RjL3Rlcm1zLyIsZGNtaXR5cGU6Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS8iLG14OiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9tYWMvZXhjZWwvMjAwOC9tYWluIixyOiJodHRwOi8vc2NoZW1hcy5vcGVu'@;
put 'eG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzIixzanM6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvc2hlZXRqcy9jb3JlLXByb3BlcnRpZXMiLHZ0OiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcv'@;
put 'b2ZmaWNlRG9jdW1lbnQvMjAwNi9kb2NQcm9wc1ZUeXBlcyIseHNpOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIseHNkOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIsbWFpbjpbImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9z'@;
put 'cHJlYWRzaGVldG1sLzIwMDYvbWFpbiIsImh0dHA6Ly9wdXJsLm9jbGMub3JnL29veG1sL3NwcmVhZHNoZWV0bWwvbWFpbiIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL2V4Y2VsLzIwMDYvbWFpbiIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL2V4'@;
put 'Y2VsLzIwMDYvMiJdfSxHaT17bzoidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIix4OiJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpleGNlbCIsc3M6InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOnNwcmVhZHNoZWV0IixkdDoidXVpZDpD'@;
put 'MkY0MTAxMC02NUIzLTExZDEtQTI5Ri0wMEFBMDBDMTQ4ODIiLG12OiJodHRwOi8vbWFjVm1sU2NoZW1hVXJpIix2OiJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOnZtbCIsaHRtbDoiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCJ9LGtsPWZ1bmN0aW9uKHcpe2Zvcih2YXIgUD1b'@;
put 'XSxlZT0wO2VlPHdbMF0ubGVuZ3RoOysrZWUpaWYod1swXVtlZV0pZm9yKHZhciBvZT0wLGdlPXdbMF1bZWVdLmxlbmd0aDtvZTxnZTtvZSs9MTAyNDApUC5wdXNoLmFwcGx5KFAsd1swXVtlZV0uc2xpY2Uob2Usb2UrMTAyNDApKTtyZXR1cm4gUH0sbzI9a2wsUGM9ZnVuY3Rpb24odyxQLEQp'@;
put 'e2Zvcih2YXIgZWU9W10sb2U9UDtvZTxEO29lKz0yKWVlLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShXbih3LG9lKSkpO3JldHVybiBlZS5qb2luKCIiKS5yZXBsYWNlKHksIiIpfSxEYT1QYyxwMD1mdW5jdGlvbih3LFAsRCl7Zm9yKHZhciBlZT1bXSxvZT1QO29lPFArRDsrK29lKWVlLnB1'@;
put 'c2goKCIwIit3W29lXS50b1N0cmluZygxNikpLnNsaWNlKC0yKSk7cmV0dXJuIGVlLmpvaW4oIiIpfSxLbD1wMCxrdT1mdW5jdGlvbih3LFAsRCl7Zm9yKHZhciBlZT1bXSxvZT1QO29lPEQ7b2UrKyllZS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUobm8odyxvZSkpKTtyZXR1cm4gZWUuam9p'@;
put 'bigiIil9LGEyPWt1LFBhPWZ1bmN0aW9uKHcsUCl7dmFyIEQ9X2kodyxQKTtyZXR1cm4gRD4wP2t1KHcsUCs0LFArNCtELTEpOiIifSxDbz1QYSxtMD1mdW5jdGlvbih3LFApe3ZhciBEPV9pKHcsUCk7cmV0dXJuIEQ+MD9rdSh3LFArNCxQKzQrRC0xKToiIn0sWGQ9bTAsSmQ9ZnVuY3Rpb24o'@;
put 'dyxQKXt2YXIgRD0yKl9pKHcsUCk7cmV0dXJuIEQ+MD9rdSh3LFArNCxQKzQrRC0xKToiIn0sZXA9SmQ7SXI9RXU9ZnVuY3Rpb24oUCxEKXt2YXIgZWU9X2koUCxEKTtyZXR1cm4gZWU+MD9QYyhQLEQrNCxEKzQrZWUpOiIifTt2YXIgZzAsUWQsSW89ZnVuY3Rpb24odyxQKXt2YXIgRD1faSh3'@;
put 'LFApO3JldHVybiBEPjA/a3UodyxQKzQsUCs0K0QpOiIifSxFYT1JbztnMD1RZD1mdW5jdGlvbih3LFApe3JldHVybiBmdW5jdGlvbiAkbCh3LFApe2Zvcih2YXIgRD0xLTIqKHdbUCs3XT4+PjcpLGVlPSgoMTI3JndbUCs3XSk8PDQpKyh3W1ArNl0+Pj40JjE1KSxvZT0xNSZ3W1ArNl0sZ2U9'@;
put 'NTtnZT49MDstLWdlKW9lPTI1NipvZSt3W1ArZ2VdO3JldHVybiAyMDQ3PT1lZT8wPT1vZT9EKigxLzApOk5hTjooMD09ZWU/ZWU9LTEwMjI6KGVlLT0xMDIzLG9lKz1NYXRoLnBvdygyLDUyKSksRCpNYXRoLnBvdygyLGVlLTUyKSpvZSl9KHcsUCl9O3ZhciBsMj1mdW5jdGlvbihQKXtyZXR1'@;
put 'cm4gQXJyYXkuaXNBcnJheShQKX07ZGUmJihQYz1mdW5jdGlvbih3LFAsRCl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcih3KT93LnRvU3RyaW5nKCJ1dGYxNmxlIixQLEQpLnJlcGxhY2UoeSwiIik6RGEodyxQLEQpfSxwMD1mdW5jdGlvbih3LFAsRCl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcih3'@;
put 'KT93LnRvU3RyaW5nKCJoZXgiLFAsUCtEKTpLbCh3LFAsRCl9LFBhPWZ1bmN0aW9uKFAsRCl7aWYoIUJ1ZmZlci5pc0J1ZmZlcihQKSlyZXR1cm4gQ28oUCxEKTt2YXIgZWU9UC5yZWFkVUludDMyTEUoRCk7cmV0dXJuIGVlPjA/UC50b1N0cmluZygidXRmOCIsRCs0LEQrNCtlZS0xKToiIn0s'@;
put 'bTA9ZnVuY3Rpb24oUCxEKXtpZighQnVmZmVyLmlzQnVmZmVyKFApKXJldHVybiBYZChQLEQpO3ZhciBlZT1QLnJlYWRVSW50MzJMRShEKTtyZXR1cm4gZWU+MD9QLnRvU3RyaW5nKCJ1dGY4IixEKzQsRCs0K2VlLTEpOiIifSxKZD1mdW5jdGlvbihQLEQpe2lmKCFCdWZmZXIuaXNCdWZmZXIo'@;
put 'UCkpcmV0dXJuIGVwKFAsRCk7dmFyIGVlPTIqUC5yZWFkVUludDMyTEUoRCk7cmV0dXJuIFAudG9TdHJpbmcoInV0ZjE2bGUiLEQrNCxEKzQrZWUtMSl9LElyPWZ1bmN0aW9uKFAsRCl7aWYoIUJ1ZmZlci5pc0J1ZmZlcihQKSlyZXR1cm4gRXUoUCxEKTt2YXIgZWU9UC5yZWFkVUludDMyTEUo'@;
put 'RCk7cmV0dXJuIFAudG9TdHJpbmcoInV0ZjE2bGUiLEQrNCxEKzQrZWUpfSxJbz1mdW5jdGlvbihQLEQpe2lmKCFCdWZmZXIuaXNCdWZmZXIoUCkpcmV0dXJuIEVhKFAsRCk7dmFyIGVlPVAucmVhZFVJbnQzMkxFKEQpO3JldHVybiBQLnRvU3RyaW5nKCJ1dGY4IixEKzQsRCs0K2VlKX0sa3U9'@;
put 'ZnVuY3Rpb24oUCxELGVlKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKFApP1AudG9TdHJpbmcoInV0ZjgiLEQsZWUpOmEyKFAsRCxlZSl9LGtsPWZ1bmN0aW9uKHcpe3JldHVybiB3WzBdLmxlbmd0aD4wJiZCdWZmZXIuaXNCdWZmZXIod1swXVswXSk/QnVmZmVyLmNvbmNhdCh3WzBdKTpvMih3'@;
put 'KX0sTT1mdW5jdGlvbih3KXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKHdbMF0pP0J1ZmZlci5jb25jYXQodyk6W10uY29uY2F0LmFwcGx5KFtdLHcpfSxnMD1mdW5jdGlvbihQLEQpe3JldHVybiBCdWZmZXIuaXNCdWZmZXIoUCk/UC5yZWFkRG91YmxlTEUoRCk6UWQoUCxEKX0sbDI9ZnVuY3Rp'@;
put 'b24oUCl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihQKXx8QXJyYXkuaXNBcnJheShQKX0pLHR5cGVvZiBjcHRhYmxlPCJ1IiYmKFBjPWZ1bmN0aW9uKHcsUCxEKXtyZXR1cm4gY3B0YWJsZS51dGlscy5kZWNvZGUoMTIwMCx3LnNsaWNlKFAsRCkpLnJlcGxhY2UoeSwiIil9LGt1PWZ1bmN0aW9u'@;
put 'KHcsUCxEKXtyZXR1cm4gY3B0YWJsZS51dGlscy5kZWNvZGUoNjUwMDEsdy5zbGljZShQLEQpKX0sUGE9ZnVuY3Rpb24odyxQKXt2YXIgRD1faSh3LFApO3JldHVybiBEPjA/Y3B0YWJsZS51dGlscy5kZWNvZGUoTCx3LnNsaWNlKFArNCxQKzQrRC0xKSk6IiJ9LG0wPWZ1bmN0aW9uKHcsUCl7'@;
put 'dmFyIEQ9X2kodyxQKTtyZXR1cm4gRD4wP2NwdGFibGUudXRpbHMuZGVjb2RlKEIsdy5zbGljZShQKzQsUCs0K0QtMSkpOiIifSxKZD1mdW5jdGlvbih3LFApe3ZhciBEPTIqX2kodyxQKTtyZXR1cm4gRD4wP2NwdGFibGUudXRpbHMuZGVjb2RlKDEyMDAsdy5zbGljZShQKzQsUCs0K0QtMSkp'@;
put 'OiIifSxJcj1mdW5jdGlvbih3LFApe3ZhciBEPV9pKHcsUCk7cmV0dXJuIEQ+MD9jcHRhYmxlLnV0aWxzLmRlY29kZSgxMjAwLHcuc2xpY2UoUCs0LFArNCtEKSk6IiJ9LElvPWZ1bmN0aW9uKHcsUCl7dmFyIEQ9X2kodyxQKTtyZXR1cm4gRD4wP2NwdGFibGUudXRpbHMuZGVjb2RlKDY1MDAx'@;
put 'LHcuc2xpY2UoUCs0LFArNCtEKSk6IiJ9KTt2YXIgbm89ZnVuY3Rpb24odyxQKXtyZXR1cm4gd1tQXX0sV249ZnVuY3Rpb24odyxQKXtyZXR1cm4gMjU2KndbUCsxXSt3W1BdfSxiaT1mdW5jdGlvbih3LFApe3ZhciBEPTI1Nip3W1ArMV0rd1tQXTtyZXR1cm4gRDwzMjc2OD9EOi0xKig2NTUz'@;
put 'NS1EKzEpfSxfaT1mdW5jdGlvbih3LFApe3JldHVybiB3W1ArM10qKDE8PDI0KSsod1tQKzJdPDwxNikrKHdbUCsxXTw8OCkrd1tQXX0sdWE9ZnVuY3Rpb24odyxQKXtyZXR1cm4gd1tQKzNdPDwyNHx3W1ArMl08PDE2fHdbUCsxXTw8OHx3W1BdfSxIbD1mdW5jdGlvbih3LFApe3JldHVybiB3'@;
put 'W1BdPDwyNHx3W1ArMV08PDE2fHdbUCsyXTw8OHx3W1ArM119O2Z1bmN0aW9uIE5sKHcsUCl7dmFyIGVlLG9lLF9lLHZlLE1lLGplLEQ9IiIsZ2U9W107c3dpdGNoKFApe2Nhc2UiZGJjcyI6aWYoamU9dGhpcy5sLGRlJiZCdWZmZXIuaXNCdWZmZXIodGhpcykpRD10aGlzLnNsaWNlKHRoaXMu'@;
put 'bCx0aGlzLmwrMip3KS50b1N0cmluZygidXRmMTZsZSIpO2Vsc2UgZm9yKE1lPTA7TWU8dzsrK01lKUQrPVN0cmluZy5mcm9tQ2hhckNvZGUoV24odGhpcyxqZSkpLGplKz0yO3cqPTI7YnJlYWs7Y2FzZSJ1dGY4IjpEPWt1KHRoaXMsdGhpcy5sLHRoaXMubCt3KTticmVhaztjYXNlInV0ZjE2'@;
put 'bGUiOkQ9UGModGhpcyx0aGlzLmwsdGhpcy5sKyh3Kj0yKSk7YnJlYWs7Y2FzZSJ3c3RyIjppZighKHR5cGVvZiBjcHRhYmxlPCJ1IikpcmV0dXJuIE5sLmNhbGwodGhpcyx3LCJkYmNzIik7RD1jcHRhYmxlLnV0aWxzLmRlY29kZShCLHRoaXMuc2xpY2UodGhpcy5sLHRoaXMubCsyKncpKSx3'@;
put 'Kj0yO2JyZWFrO2Nhc2UibHBzdHItYW5zaSI6RD1QYSh0aGlzLHRoaXMubCksdz00K19pKHRoaXMsdGhpcy5sKTticmVhaztjYXNlImxwc3RyLWNwIjpEPW0wKHRoaXMsdGhpcy5sKSx3PTQrX2kodGhpcyx0aGlzLmwpO2JyZWFrO2Nhc2UibHB3c3RyIjpEPUpkKHRoaXMsdGhpcy5sKSx3PTQr'@;
put 'MipfaSh0aGlzLHRoaXMubCk7YnJlYWs7Y2FzZSJscHA0Ijp3PTQrX2kodGhpcyx0aGlzLmwpLEQ9SXIodGhpcyx0aGlzLmwpLDImdyYmKHcrPTIpO2JyZWFrO2Nhc2UiOGxwcDQiOnc9NCtfaSh0aGlzLHRoaXMubCksRD1Jbyh0aGlzLHRoaXMubCksMyZ3JiYodys9NC0oMyZ3KSk7YnJlYWs7'@;
put 'Y2FzZSJjc3RyIjpmb3Iodz0wLEQ9IiI7MCE9PShfZT1ubyh0aGlzLHRoaXMubCt3KyspKTspZ2UucHVzaChxKF9lKSk7RD1nZS5qb2luKCIiKTticmVhaztjYXNlIl93c3RyIjpmb3Iodz0wLEQ9IiI7MCE9PShfZT1Xbih0aGlzLHRoaXMubCt3KSk7KWdlLnB1c2gocShfZSkpLHcrPTI7dys9'@;
put 'MixEPWdlLmpvaW4oIiIpO2JyZWFrO2Nhc2UiZGJjcy1jb250Ijpmb3IoRD0iIixqZT10aGlzLmwsTWU9MDtNZTx3OysrTWUpe2lmKHRoaXMubGVucyYmLTEhPT10aGlzLmxlbnMuaW5kZXhPZihqZSkpcmV0dXJuIF9lPW5vKHRoaXMsamUpLHRoaXMubD1qZSsxLHZlPU5sLmNhbGwodGhpcyx3'@;
put 'LU1lLF9lPyJkYmNzLWNvbnQiOiJzYmNzLWNvbnQiKSxnZS5qb2luKCIiKSt2ZTtnZS5wdXNoKHEoV24odGhpcyxqZSkpKSxqZSs9Mn1EPWdlLmpvaW4oIiIpLHcqPTI7YnJlYWs7Y2FzZSJjcHN0ciI6aWYodHlwZW9mIGNwdGFibGU8InUiKXtEPWNwdGFibGUudXRpbHMuZGVjb2RlKEIsdGhp'@;
put 'cy5zbGljZSh0aGlzLmwsdGhpcy5sK3cpKTticmVha31jYXNlInNiY3MtY29udCI6Zm9yKEQ9IiIsamU9dGhpcy5sLE1lPTA7TWUhPXc7KytNZSl7aWYodGhpcy5sZW5zJiYtMSE9PXRoaXMubGVucy5pbmRleE9mKGplKSlyZXR1cm4gX2U9bm8odGhpcyxqZSksdGhpcy5sPWplKzEsdmU9Tmwu'@;
put 'Y2FsbCh0aGlzLHctTWUsX2U/ImRiY3MtY29udCI6InNiY3MtY29udCIpLGdlLmpvaW4oIiIpK3ZlO2dlLnB1c2gocShubyh0aGlzLGplKSkpLGplKz0xfUQ9Z2Uuam9pbigiIik7YnJlYWs7ZGVmYXVsdDpzd2l0Y2godyl7Y2FzZSAxOnJldHVybiBlZT1ubyh0aGlzLHRoaXMubCksdGhpcy5s'@;
put 'KyssZWU7Y2FzZSAyOnJldHVybiBlZT0oImkiPT09UD9iaTpXbikodGhpcyx0aGlzLmwpLHRoaXMubCs9MixlZTtjYXNlIDQ6Y2FzZS00OnJldHVybiJpIiE9PVAmJjEyOCZ0aGlzW3RoaXMubCszXT8ob2U9X2kodGhpcyx0aGlzLmwpLHRoaXMubCs9NCxvZSk6KGVlPSh3PjA/dWE6SGwpKHRo'@;
put 'aXMsdGhpcy5sKSx0aGlzLmwrPTQsZWUpO2Nhc2UgODpjYXNlLTg6aWYoImYiPT09UClyZXR1cm4gb2U9OD09dz9nMCh0aGlzLHRoaXMubCk6ZzAoW3RoaXNbdGhpcy5sKzddLHRoaXNbdGhpcy5sKzZdLHRoaXNbdGhpcy5sKzVdLHRoaXNbdGhpcy5sKzRdLHRoaXNbdGhpcy5sKzNdLHRoaXNb'@;
put 'dGhpcy5sKzJdLHRoaXNbdGhpcy5sKzFdLHRoaXNbdGhpcy5sKzBdXSwwKSx0aGlzLmwrPTgsb2U7dz04O2Nhc2UgMTY6RD1wMCh0aGlzLHRoaXMubCx3KX19cmV0dXJuIHRoaXMubCs9dyxEfXZhciBRbz1mdW5jdGlvbih3LFAsRCl7d1tEXT0yNTUmUCx3W0QrMV09UD4+PjgmMjU1LHdbRCsy'@;
put 'XT1QPj4+MTYmMjU1LHdbRCszXT1QPj4+MjQmMjU1fSxKMD1mdW5jdGlvbih3LFAsRCl7d1tEXT0yNTUmUCx3W0QrMV09UD4+OCYyNTUsd1tEKzJdPVA+PjE2JjI1NSx3W0QrM109UD4+MjQmMjU1fSxEbD1mdW5jdGlvbih3LFAsRCl7d1tEXT0yNTUmUCx3W0QrMV09UD4+PjgmMjU1fTtmdW5j'@;
put 'dGlvbiBzMih3LFAsRCl7dmFyIGVlPTAsb2U9MDtpZigiZGJjcyI9PT1EKXtmb3Iob2U9MDtvZSE9UC5sZW5ndGg7KytvZSlEbCh0aGlzLFAuY2hhckNvZGVBdChvZSksdGhpcy5sKzIqb2UpO2VlPTIqUC5sZW5ndGh9ZWxzZSBpZigic2JjcyI9PT1EKXtpZih0eXBlb2YgY3B0YWJsZTwidSIm'@;
put 'Jjg3ND09TClmb3Iob2U9MDtvZSE9UC5sZW5ndGg7KytvZSl7dmFyIGdlPWNwdGFibGUudXRpbHMuZW5jb2RlKEwsUC5jaGFyQXQob2UpKTt0aGlzW3RoaXMubCtvZV09Z2VbMF19ZWxzZSBmb3IoUD1QLnJlcGxhY2UoL1teXHgwMC1ceDdGXS9nLCJfIiksb2U9MDtvZSE9UC5sZW5ndGg7Kytv'@;
put 'ZSl0aGlzW3RoaXMubCtvZV09MjU1JlAuY2hhckNvZGVBdChvZSk7ZWU9UC5sZW5ndGh9ZWxzZXtpZigiaGV4Ij09PUQpe2Zvcig7b2U8dzsrK29lKXRoaXNbdGhpcy5sKytdPXBhcnNlSW50KFAuc2xpY2UoMipvZSwyKm9lKzIpLDE2KXx8MDtyZXR1cm4gdGhpc31pZigidXRmMTZsZSI9PT1E'@;
put 'KXt2YXIgX2U9TWF0aC5taW4odGhpcy5sK3csdGhpcy5sZW5ndGgpO2ZvcihvZT0wO29lPE1hdGgubWluKFAubGVuZ3RoLHcpOysrb2Upe3ZhciB2ZT1QLmNoYXJDb2RlQXQob2UpO3RoaXNbdGhpcy5sKytdPTI1NSZ2ZSx0aGlzW3RoaXMubCsrXT12ZT4+OH1mb3IoO3RoaXMubDxfZTspdGhp'@;
put 'c1t0aGlzLmwrK109MDtyZXR1cm4gdGhpc31zd2l0Y2godyl7Y2FzZSAxOmVlPTEsdGhpc1t0aGlzLmxdPTI1NSZQO2JyZWFrO2Nhc2UgMjplZT0yLHRoaXNbdGhpcy5sXT0yNTUmUCx0aGlzW3RoaXMubCsxXT0yNTUmKFA+Pj49OCk7YnJlYWs7Y2FzZSAzOmVlPTMsdGhpc1t0aGlzLmxdPTI1'@;
put 'NSZQLHRoaXNbdGhpcy5sKzFdPTI1NSYoUD4+Pj04KSx0aGlzW3RoaXMubCsyXT0yNTUmKFA+Pj49OCk7YnJlYWs7Y2FzZSA0OmVlPTQsUW8odGhpcyxQLHRoaXMubCk7YnJlYWs7Y2FzZSA4OmlmKGVlPTgsImYiPT09RCl7IWZ1bmN0aW9uIGgwKHcsUCxEKXt2YXIgZWU9KFA8MHx8MS9QPT0t'@;
put 'MS8wPzE6MCk8PDcsb2U9MCxnZT0wLF9lPWVlPy1QOlA7aXNGaW5pdGUoX2UpPzA9PV9lP29lPWdlPTA6KG9lPU1hdGguZmxvb3IoTWF0aC5sb2coX2UpL01hdGguTE4yKSxnZT1fZSpNYXRoLnBvdygyLDUyLW9lKSxvZTw9LTEwMjMmJighaXNGaW5pdGUoZ2UpfHxnZTxNYXRoLnBvdygyLDUy'@;
put 'KSk/b2U9LTEwMjI6KGdlLT1NYXRoLnBvdygyLDUyKSxvZSs9MTAyMykpOihvZT0yMDQ3LGdlPWlzTmFOKFApPzI2OTg1OjApO2Zvcih2YXIgdmU9MDt2ZTw9NTsrK3ZlLGdlLz0yNTYpd1tEK3ZlXT0yNTUmZ2U7d1tEKzZdPSgxNSZvZSk8PDR8MTUmZ2Usd1tEKzddPW9lPj40fGVlfSh0aGlz'@;
put 'LFAsdGhpcy5sKTticmVha31jYXNlIDE2OmJyZWFrO2Nhc2UtNDplZT00LEowKHRoaXMsUCx0aGlzLmwpfX1yZXR1cm4gdGhpcy5sKz1lZSx0aGlzfWZ1bmN0aW9uIHUyKHcsUCl7dmFyIEQ9cDAodGhpcyx0aGlzLmwsdy5sZW5ndGg+PjEpO2lmKEQhPT13KXRocm93IG5ldyBFcnJvcihQKyJF'@;
put 'eHBlY3RlZCAiK3crIiBzYXcgIitEKTt0aGlzLmwrPXcubGVuZ3RoPj4xfWZ1bmN0aW9uIHNzKHcsUCl7dy5sPVAsdy5yZWFkX3NoaWZ0PU5sLHcuY2hrPXUyLHcud3JpdGVfc2hpZnQ9czJ9ZnVuY3Rpb24geHUodyxQKXt3LmwrPVB9ZnVuY3Rpb24gcHIodyl7dmFyIFA9WSh3KTtyZXR1cm4g'@;
put 'c3MoUCwwKSxQfWZ1bmN0aW9uIHpvKHcsUCxEKXtpZih3KXt2YXIgZWUsb2UsZ2U7c3Modyx3Lmx8fDApO2Zvcih2YXIgX2U9dy5sZW5ndGgsdmU9MCxNZT0wO3cubDxfZTspezEyOCYodmU9dy5yZWFkX3NoaWZ0KDEpKSYmKHZlPSgxMjcmdmUpKygoMTI3JncucmVhZF9zaGlmdCgxKSk8PDcp'@;
put 'KTt2YXIgamU9SDJbdmVdfHxIMls2NTUzNV07Zm9yKGdlPTEyNyYoZWU9dy5yZWFkX3NoaWZ0KDEpKSxvZT0xO29lPDQmJjEyOCZlZTsrK29lKWdlKz0oMTI3JihlZT13LnJlYWRfc2hpZnQoMSkpKTw8NypvZTtNZT13LmwrZ2U7dmFyIFVlPShqZS5mfHx4dSkodyxnZSxEKTtpZih3Lmw9TWUs'@;
put 'UChVZSxqZS5uLHZlKSlyZXR1cm59fX1mdW5jdGlvbiBBdSgpe3ZhciB3PVtdLFA9ZGU/MjU2OjIwNDgsRD1mdW5jdGlvbihqZSl7dmFyIFVlPXByKGplKTtyZXR1cm4gc3MoVWUsMCksVWV9LGVlPUQoUCksb2U9ZnVuY3Rpb24oKXtlZSYmKGVlLmxlbmd0aD5lZS5sJiYoKGVlPWVlLnNsaWNl'@;
put 'KDAsZWUubCkpLmw9ZWUubGVuZ3RoKSxlZS5sZW5ndGg+MCYmdy5wdXNoKGVlKSxlZT1udWxsKX0sZ2U9ZnVuY3Rpb24oamUpe3JldHVybiBlZSYmamU8ZWUubGVuZ3RoLWVlLmw/ZWU6KG9lKCksZWU9RChNYXRoLm1heChqZSsxLFApKSl9O3JldHVybntuZXh0OmdlLHB1c2g6ZnVuY3Rpb24o'@;
put 'amUpe29lKCksbnVsbD09KGVlPWplKS5sJiYoZWUubD1lZS5sZW5ndGgpLGdlKFApfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gb2UoKSxrbChbd10pfSxfYnVmczp3fX1mdW5jdGlvbiBoaSh3LFAsRCxlZSl7dmFyIGdlLG9lPStnZ1tQXTtpZighaXNOYU4ob2UpKXtlZXx8KGVlPUgyW29lXS5w'@;
put 'fHwoRHx8W10pLmxlbmd0aHx8MCksZ2U9MSsob2U+PTEyOD8xOjApKzEsZWU+PTEyOCYmKytnZSxlZT49MTYzODQmJisrZ2UsZWU+PTIwOTcxNTImJisrZ2U7dmFyIF9lPXcubmV4dChnZSk7b2U8PTEyNz9fZS53cml0ZV9zaGlmdCgxLG9lKTooX2Uud3JpdGVfc2hpZnQoMSwxMjgrKDEyNyZv'@;
put 'ZSkpLF9lLndyaXRlX3NoaWZ0KDEsb2U+PjcpKTtmb3IodmFyIHZlPTA7NCE9dmU7Kyt2ZSl7aWYoIShlZT49MTI4KSl7X2Uud3JpdGVfc2hpZnQoMSxlZSk7YnJlYWt9X2Uud3JpdGVfc2hpZnQoMSwxMjgrKDEyNyZlZSkpLGVlPj49N31lZT4wJiZsMihEKSYmdy5wdXNoKEQpfX1mdW5jdGlv'@;
put 'biBwYyh3LFAsRCl7dmFyIGVlPUp0KHcpO2lmKFAucz8oZWUuY1JlbCYmKGVlLmMrPVAucy5jKSxlZS5yUmVsJiYoZWUucis9UC5zLnIpKTooZWUuY1JlbCYmKGVlLmMrPVAuYyksZWUuclJlbCYmKGVlLnIrPVAucikpLCFEfHxELmJpZmY8MTIpe2Zvcig7ZWUuYz49MjU2OyllZS5jLT0yNTY7'@;
put 'Zm9yKDtlZS5yPj02NTUzNjspZWUuci09NjU1MzZ9cmV0dXJuIGVlfWZ1bmN0aW9uIGhyKHcsUCxEKXt2YXIgZWU9SnQodyk7cmV0dXJuIGVlLnM9cGMoZWUucyxQLnMsRCksZWUuZT1wYyhlZS5lLFAucyxEKSxlZX1mdW5jdGlvbiBlaCh3LFApe2lmKHcuY1JlbCYmdy5jPDApZm9yKHc9SnQo'@;
put 'dyk7dy5jPDA7KXcuYys9UD44PzE2Mzg0OjI1NjtpZih3LnJSZWwmJncucjwwKWZvcih3PUp0KHcpO3cucjwwOyl3LnIrPVA+OD8xMDQ4NTc2OlA+NT82NTUzNjoxNjM4NDtpZih3LmNSZWwmJncuYz49KFA+OD8xNjM4NDoyNTYpKWZvcih3PUp0KHcpO3cuYz49KFA+OD8xNjM4NDoyNTYpOyl3'@;
put 'LmMtPVA+OD8xNjM4NDoyNTY7aWYody5yUmVsJiZ3LnI+PTEwNDg1NzYpZm9yKHc9SnQodyk7dy5yPj0xMDQ4NTc2Oyl3LnItPTEwNDg1NzY7dmFyIEQ9cGkodyk7cmV0dXJuIXcuY1JlbCYmbnVsbCE9dy5jUmVsJiYoRD1mdW5jdGlvbiBJYih3KXtyZXR1cm4gdy5yZXBsYWNlKC9eKFtBLVpd'@;
put 'KS8sIiQkJDEiKX0oRCkpLCF3LnJSZWwmJm51bGwhPXcuclJlbCYmKEQ9ZnVuY3Rpb24gTDYodyl7cmV0dXJuIHcucmVwbGFjZSgvKFtBLVpdfF4pKFxkKykkLywiJDEkJCQyIil9KEQpKSxEfWZ1bmN0aW9uIHhpKHcsUCl7cmV0dXJuIDAhPXcucy5yfHx3LnMuclJlbHx8dy5lLnIhPShQLmJp'@;
put 'ZmY+PTEyPzEwNDg1NzU6UC5iaWZmPj04PzY1NTM2OjE2Mzg0KXx8dy5lLnJSZWw/MCE9dy5zLmN8fHcucy5jUmVsfHx3LmUuYyE9KFAuYmlmZj49MTI/MTYzODM6MjU1KXx8dy5lLmNSZWw/ZWgody5zLFAuYmlmZikrIjoiK2VoKHcuZSxQLmJpZmYpOih3LnMuclJlbD8iIjoiJCIpK1ZhKHcu'@;
put 'cy5yKSsiOiIrKHcuZS5yUmVsPyIiOiIkIikrVmEody5lLnIpOih3LnMuY1JlbD8iIjoiJCIpK0JhKHcucy5jKSsiOiIrKHcuZS5jUmVsPyIiOiIkIikrQmEody5lLmMpfXZhciBVZj17fTtmdW5jdGlvbiBRMCh3KXtyZXR1cm4gcGFyc2VJbnQoZnVuY3Rpb24gdHAodyl7cmV0dXJuIHcucmVw'@;
put 'bGFjZSgvXCQoXGQrKSQvLCIkMSIpfSh3KSwxMCktMX1mdW5jdGlvbiBWYSh3KXtyZXR1cm4iIisodysxKX1mdW5jdGlvbiBjMih3KXtmb3IodmFyIFA9ZnVuY3Rpb24gYWEodyl7cmV0dXJuIHcucmVwbGFjZSgvXlwkKFtBLVpdKS8sIiQxIil9KHcpLEQ9MCxlZT0wO2VlIT09UC5sZW5ndGg7'@;
put 'KytlZSlEPTI2KkQrUC5jaGFyQ29kZUF0KGVlKS02NDtyZXR1cm4gRC0xfWZ1bmN0aW9uIEJhKHcpe2lmKHc8MCl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY29sdW1uICIrdyk7dmFyIFA9IiI7Zm9yKCsrdzt3O3c9TWF0aC5mbG9vcigody0xKS8yNikpUD1TdHJpbmcuZnJvbUNoYXJDb2Rl'@;
put 'KCh3LTEpJTI2KzY1KStQO3JldHVybiBQfWZ1bmN0aW9uIGNhKHcpe2Zvcih2YXIgUD0wLEQ9MCxlZT0wO2VlPHcubGVuZ3RoOysrZWUpe3ZhciBvZT13LmNoYXJDb2RlQXQoZWUpO29lPj00OCYmb2U8PTU3P1A9MTAqUCsob2UtNDgpOm9lPj02NSYmb2U8PTkwJiYoRD0yNipEKyhvZS02NCkp'@;
put 'fXJldHVybntjOkQtMSxyOlAtMX19ZnVuY3Rpb24gcGkodyl7Zm9yKHZhciBQPXcuYysxLEQ9IiI7UDtQPShQLTEpLzI2fDApRD1TdHJpbmcuZnJvbUNoYXJDb2RlKChQLTEpJTI2KzY1KStEO3JldHVybiBEKyh3LnIrMSl9ZnVuY3Rpb24gS2Eodyl7dmFyIFA9dy5pbmRleE9mKCI6Iik7cmV0'@;
put 'dXJuLTE9PVA/e3M6Y2EodyksZTpjYSh3KX06e3M6Y2Eody5zbGljZSgwLFApKSxlOmNhKHcuc2xpY2UoUCsxKSl9fWZ1bmN0aW9uIFZvKHcsUCl7cmV0dXJuIHR5cGVvZiBQPiJ1Inx8Im51bWJlciI9PXR5cGVvZiBQP1ZvKHcucyx3LmUpOigic3RyaW5nIiE9dHlwZW9mIHcmJih3PXBpKHcp'@;
put 'KSwic3RyaW5nIiE9dHlwZW9mIFAmJihQPXBpKFApKSx3PT1QP3c6dysiOiIrUCl9ZnVuY3Rpb24gUGkodyl7dmFyIFA9SlNPTi5wYXJzZSgneyJzIjp7ImMiOjAsInIiOjB9LCJlIjp7ImMiOjAsInIiOjB9fScpLEQ9MCxlZT0wLG9lPTAsZ2U9dy5sZW5ndGg7Zm9yKEQ9MDtlZTxnZSYmISgo'@;
put 'b2U9dy5jaGFyQ29kZUF0KGVlKS02NCk8MXx8b2U+MjYpOysrZWUpRD0yNipEK29lO2ZvcihQLnMuYz0tLUQsRD0wO2VlPGdlJiYhKChvZT13LmNoYXJDb2RlQXQoZWUpLTQ4KTwwfHxvZT45KTsrK2VlKUQ9MTAqRCtvZTtpZihQLnMucj0tLUQsZWU9PT1nZXx8NTg9PT13LmNoYXJDb2RlQXQo'@;
put 'KytlZSkpcmV0dXJuIFAuZS5jPVAucy5jLFAuZS5yPVAucy5yLFA7Zm9yKEQ9MDtlZSE9Z2UmJiEoKG9lPXcuY2hhckNvZGVBdChlZSktNjQpPDF8fG9lPjI2KTsrK2VlKUQ9MjYqRCtvZTtmb3IoUC5lLmM9LS1ELEQ9MDtlZSE9Z2UmJiEoKG9lPXcuY2hhckNvZGVBdChlZSktNDgpPDB8fG9l'@;
put 'PjkpOysrZWUpRD0xMCpEK29lO3JldHVybiBQLmUucj0tLUQsUH1mdW5jdGlvbiBQNih3LFApe3ZhciBEPSJkIj09dy50JiZQIGluc3RhbmNlb2YgRGF0ZTtpZihudWxsIT13LnopdHJ5e3JldHVybiB3Lnc9Uy5mb3JtYXQody56LEQ/cWUoUCk6UCl9Y2F0Y2h7fXRyeXtyZXR1cm4gdy53PVMu'@;
put 'Zm9ybWF0KCh3LlhGfHx7fSkubnVtRm10SWR8fChEPzE0OjApLEQ/cWUoUCk6UCl9Y2F0Y2h7cmV0dXJuIiIrUH19ZnVuY3Rpb24gbWModyxQLEQpe3JldHVybiBudWxsPT13fHxudWxsPT13LnR8fCJ6Ij09dy50PyIiOnZvaWQgMCE9PXcudz93Lnc6KCJkIj09dy50JiYhdy56JiZEJiZELmRh'@;
put 'dGVORiYmKHcuej1ELmRhdGVORiksImUiPT13LnQ/bmFbdy52XXx8dy52OlA2KHcsbnVsbD09UD93LnY6UCkpfWZ1bmN0aW9uIFpmKHcsUCl7dmFyIEQ9UCYmUC5zaGVldD9QLnNoZWV0OiJTaGVldDEiLGVlPXt9O3JldHVybiBlZVtEXT13LHtTaGVldE5hbWVzOltEXSxTaGVldHM6ZWV9fWZ1'@;
put 'bmN0aW9uIHYwKHcsUCxEKXt2YXIgZWU9RHx8e30sb2U9dz9BcnJheS5pc0FycmF5KHcpOmVlLmRlbnNlO251bGwhPW5lJiZudWxsPT1vZSYmKG9lPW5lKTt2YXIgZ2U9d3x8KG9lP1tdOnt9KSxfZT0wLHZlPTA7aWYoZ2UmJm51bGwhPWVlLm9yaWdpbil7aWYoIm51bWJlciI9PXR5cGVvZiBl'@;
put 'ZS5vcmlnaW4pX2U9ZWUub3JpZ2luO2Vsc2V7dmFyIE1lPSJzdHJpbmciPT10eXBlb2YgZWUub3JpZ2luP2NhKGVlLm9yaWdpbik6ZWUub3JpZ2luO19lPU1lLnIsdmU9TWUuY31nZVsiIXJlZiJdfHwoZ2VbIiFyZWYiXT0iQTE6QTEiKX12YXIgamU9e3M6e2M6MWU3LHI6MWU3fSxlOntjOjAs'@;
put 'cjowfX07aWYoZ2VbIiFyZWYiXSl7dmFyIFVlPVBpKGdlWyIhcmVmIl0pO2plLnMuYz1VZS5zLmMsamUucy5yPVVlLnMucixqZS5lLmM9TWF0aC5tYXgoamUuZS5jLFVlLmUuYyksamUuZS5yPU1hdGgubWF4KGplLmUucixVZS5lLnIpLC0xPT1fZSYmKGplLmUucj1fZT1VZS5lLnIrMSl9Zm9y'@;
put 'KHZhciBYZT0wO1hlIT1QLmxlbmd0aDsrK1hlKWlmKFBbWGVdKXtpZighQXJyYXkuaXNBcnJheShQW1hlXSkpdGhyb3cgbmV3IEVycm9yKCJhb2FfdG9fc2hlZXQgZXhwZWN0cyBhbiBhcnJheSBvZiBhcnJheXMiKTtmb3IodmFyIGl0PTA7aXQhPVBbWGVdLmxlbmd0aDsrK2l0KWlmKCEodHlw'@;
put 'ZW9mIFBbWGVdW2l0XT4idSIpKXt2YXIgZnQ9e3Y6UFtYZV1baXRdfSxNdD1fZStYZSx1dD12ZStpdDtpZihqZS5zLnI+TXQmJihqZS5zLnI9TXQpLGplLnMuYz51dCYmKGplLnMuYz11dCksamUuZS5yPE10JiYoamUuZS5yPU10KSxqZS5lLmM8dXQmJihqZS5lLmM9dXQpLCFQW1hlXVtpdF18'@;
put 'fCJvYmplY3QiIT10eXBlb2YgUFtYZV1baXRdfHxBcnJheS5pc0FycmF5KFBbWGVdW2l0XSl8fFBbWGVdW2l0XWluc3RhbmNlb2YgRGF0ZSlpZihBcnJheS5pc0FycmF5KGZ0LnYpJiYoZnQuZj1QW1hlXVtpdF1bMV0sZnQudj1mdC52WzBdKSxudWxsPT09ZnQudilpZihmdC5mKWZ0LnQ9Im4i'@;
put 'O2Vsc2UgaWYoZWUubnVsbEVycm9yKWZ0LnQ9ImUiLGZ0LnY9MDtlbHNle2lmKCFlZS5zaGVldFN0dWJzKWNvbnRpbnVlO2Z0LnQ9InoifWVsc2UibnVtYmVyIj09dHlwZW9mIGZ0LnY/ZnQudD0ibiI6ImJvb2xlYW4iPT10eXBlb2YgZnQudj9mdC50PSJiIjpmdC52IGluc3RhbmNlb2YgRGF0'@;
put 'ZT8oZnQuej1lZS5kYXRlTkZ8fFMuX3RhYmxlWzE0XSxlZS5jZWxsRGF0ZXM/KGZ0LnQ9ImQiLGZ0Lnc9Uy5mb3JtYXQoZnQueixxZShmdC52KSkpOihmdC50PSJuIixmdC52PXFlKGZ0LnYpLGZ0Lnc9Uy5mb3JtYXQoZnQueixmdC52KSkpOmZ0LnQ9InMiO2Vsc2UgZnQ9UFtYZV1baXRdO2lm'@;
put 'KGZ0JiZmdC5oKXRyeXtmdC5SPVljLmh0bWxfdG9fcnMoZnQuaCksZnQudj0iIjtmb3IodmFyIHd0PTA7d3Q8ZnQuUi5sZW5ndGg7Kyt3dClmdC52Kz1mdC5SW3d0XS52fHwiIn1jYXRjaHt9aWYob2UpZ2VbTXRdfHwoZ2VbTXRdPVtdKSxnZVtNdF1bdXRdJiZnZVtNdF1bdXRdLnMmJihmdC5z'@;
put 'PWdlW010XVt1dF0ucyksZ2VbTXRdW3V0XSYmZ2VbTXRdW3V0XS56JiYoZnQuej1nZVtNdF1bdXRdLnopLGdlW010XVt1dF09ZnQ7ZWxzZXt2YXIgSHQ9cGkoe2M6dXQscjpNdH0pO2dlW0h0XSYmZ2VbSHRdLnMmJihmdC5zPWdlW0h0XS5zKSxnZVtIdF0mJmdlW0h0XS56JiYoZnQuej1nZVtI'@;
put 'dF0ueiksZ2VbSHRdPWZ0fX19cmV0dXJuIGplLnMuYzwxZTcmJihnZVsiIXJlZiJdPVZvKGplKSksZ2V9ZnVuY3Rpb24gJDEodyxQKXtyZXR1cm4gdjAobnVsbCx3LFApfWZ1bmN0aW9uIEZjKHcsUCl7cmV0dXJuIFB8fChQPXByKDQpKSxQLndyaXRlX3NoaWZ0KDQsdyksUH1mdW5jdGlvbiBU'@;
put 'dSh3KXt2YXIgUD13LnJlYWRfc2hpZnQoNCk7cmV0dXJuIDA9PT1QPyIiOncucmVhZF9zaGlmdChQLCJkYmNzIil9ZnVuY3Rpb24gY3UodyxQKXt2YXIgRD0hMTtyZXR1cm4gbnVsbD09UCYmKEQ9ITAsUD1wcig0KzIqdy5sZW5ndGgpKSxQLndyaXRlX3NoaWZ0KDQsdy5sZW5ndGgpLHcubGVu'@;
put 'Z3RoPjAmJlAud3JpdGVfc2hpZnQoMCx3LCJkYmNzIiksRD9QLnNsaWNlKDAsUC5sKTpQfWZ1bmN0aW9uIEg2KHcpe3JldHVybntpY2g6dy5yZWFkX3NoaWZ0KDIpLGlmbnQ6dy5yZWFkX3NoaWZ0KDIpfX1mdW5jdGlvbiBjbCh3LFApe3ZhciBEPXcubCxlZT13LnJlYWRfc2hpZnQoMSksb2U9'@;
put 'VHUodyksZ2U9W10sX2U9e3Q6b2UsaDpvZX07aWYoMSZlZSl7Zm9yKHZhciB2ZT13LnJlYWRfc2hpZnQoNCksTWU9MDtNZSE9dmU7KytNZSlnZS5wdXNoKEg2KHcpKTtfZS5yPWdlfWVsc2UgX2Uucj1be2ljaDowLGlmbnQ6MH1dO3JldHVybiB3Lmw9RCtQLF9lfSFmdW5jdGlvbih3LFApe3Zh'@;
put 'ciBEO2lmKHR5cGVvZiBjcnlwdG9Ccm93c2VyaWZ5PCJ1IilEPWNyeXB0b0Jyb3dzZXJpZnk7ZWxzZSBpZih0eXBlb2YgUDwidSIpRD1QO2Vsc2UgdHJ5e0Q9VCg3NzkwMyl9Y2F0Y2h7RD1udWxsfXcucmM0PWZ1bmN0aW9uKGVlLG9lKXt2YXIgZ2U9bmV3IEFycmF5KDI1NiksX2U9MCx2ZT0w'@;
put 'LE1lPTAsamU9MDtmb3IodmU9MDsyNTYhPXZlOysrdmUpZ2VbdmVdPXZlO2Zvcih2ZT0wOzI1NiE9dmU7Kyt2ZSlNZT1NZStnZVt2ZV0rZWVbdmUlZWUubGVuZ3RoXS5jaGFyQ29kZUF0KDApJjI1NSxqZT1nZVt2ZV0sZ2VbdmVdPWdlW01lXSxnZVtNZV09amU7dmU9TWU9MDt2YXIgVWU9WShv'@;
put 'ZS5sZW5ndGgpO2ZvcihfZT0wO19lIT1vZS5sZW5ndGg7KytfZSlqZT1nZVt2ZT12ZSsxJjI1NV0sZ2VbdmVdPWdlW01lPShNZStnZVt2ZV0pJTI1Nl0sZ2VbTWVdPWplLFVlW19lXT1vZVtfZV1eZ2VbZ2VbdmVdK2dlW01lXSYyNTVdO3JldHVybiBVZX0sdy5tZDU9ZnVuY3Rpb24oZWUpe2lm'@;
put 'KCFEKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgY3J5cHRvIik7cmV0dXJuIEQuY3JlYXRlSGFzaCgibWQ1IikudXBkYXRlKEJ1ZmZlci5mcm9tKGVlKSkuZGlnZXN0KCJoZXgiKX19KFVmLHR5cGVvZiBjcnlwdG88InUiP2NyeXB0bzp2b2lkIDApO3ZhciBSYj1jbDtmdW5jdGlvbiBn'@;
put 'Yyh3KXt2YXIgUD13LnJlYWRfc2hpZnQoNCksRD13LnJlYWRfc2hpZnQoMik7cmV0dXJuIEQrPXcucmVhZF9zaGlmdCgxKTw8MTYsdy5sKysse2M6UCxpU3R5bGVSZWY6RH19ZnVuY3Rpb24gSGkodyxQKXtyZXR1cm4gbnVsbD09UCYmKFA9cHIoOCkpLFAud3JpdGVfc2hpZnQoLTQsdy5jKSxQ'@;
put 'LndyaXRlX3NoaWZ0KDMsdy5pU3R5bGVSZWZ8fHcucyksUC53cml0ZV9zaGlmdCgxLDApLFB9ZnVuY3Rpb24geTAodyl7dmFyIFA9dy5yZWFkX3NoaWZ0KDIpO3JldHVybiBQKz13LnJlYWRfc2hpZnQoMSk8PDE2LHcubCsrLHtjOi0xLGlTdHlsZVJlZjpQfX1mdW5jdGlvbiByYyh3LFApe3Jl'@;
put 'dHVybiBudWxsPT1QJiYoUD1wcig0KSksUC53cml0ZV9zaGlmdCgzLHcuaVN0eWxlUmVmfHx3LnMpLFAud3JpdGVfc2hpZnQoMSwwKSxQfXZhciBmMj1UdSxONj1jdTtmdW5jdGlvbiBIYyh3KXt2YXIgUD13LnJlYWRfc2hpZnQoNCk7cmV0dXJuIDA9PT1QfHw0Mjk0OTY3Mjk1PT09UD8iIjp3'@;
put 'LnJlYWRfc2hpZnQoUCwiZGJjcyIpfWZ1bmN0aW9uIFdmKHcsUCl7dmFyIEQ9ITE7cmV0dXJuIG51bGw9PVAmJihEPSEwLFA9cHIoMTI3KSksUC53cml0ZV9zaGlmdCg0LHcubGVuZ3RoPjA/dy5sZW5ndGg6NDI5NDk2NzI5NSksdy5sZW5ndGg+MCYmUC53cml0ZV9zaGlmdCgwLHcsImRiY3Mi'@;
put 'KSxEP1Auc2xpY2UoMCxQLmwpOlB9dmFyIHZjPVR1LHExPUhjLGp1PVdmO2Z1bmN0aW9uIGljKHcpe3ZhciBQPXcuc2xpY2Uody5sLHcubCs0KSxEPTEmUFswXSxlZT0yJlBbMF07dy5sKz00LFBbMF0mPTI1Mjt2YXIgb2U9MD09PWVlP2cwKFswLDAsMCwwLFBbMF0sUFsxXSxQWzJdLFBbM11d'@;
put 'LDApOnVhKFAsMCk+PjI7cmV0dXJuIEQ/b2UvMTAwOm9lfWZ1bmN0aW9uIHhhKHcsUCl7bnVsbD09UCYmKFA9cHIoNCkpO3ZhciBEPTAsZWU9MCxvZT0xMDAqdztpZih3PT0oMHx3KSYmdz49LSgxPDwyOSkmJnc8MTw8Mjk/ZWU9MTpvZT09KDB8b2UpJiZvZT49LSgxPDwyOSkmJm9lPDE8PDI5'@;
put 'JiYoZWU9MSxEPTEpLCFlZSl0aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIFJrTnVtYmVyICIrdyk7UC53cml0ZV9zaGlmdCgtNCwoKEQ/b2U6dyk8PDIpKyhEKzIpKX1mdW5jdGlvbiBHZih3KXt2YXIgUD17czp7fSxlOnt9fTtyZXR1cm4gUC5zLnI9dy5yZWFkX3NoaWZ0KDQpLFAuZS5y'@;
put 'PXcucmVhZF9zaGlmdCg0KSxQLnMuYz13LnJlYWRfc2hpZnQoNCksUC5lLmM9dy5yZWFkX3NoaWZ0KDQpLFB9dmFyIG9jPUdmLFgxPWZ1bmN0aW9uIGQyKHcsUCl7cmV0dXJuIFB8fChQPXByKDE2KSksUC53cml0ZV9zaGlmdCg0LHcucy5yKSxQLndyaXRlX3NoaWZ0KDQsdy5lLnIpLFAud3Jp'@;
put 'dGVfc2hpZnQoNCx3LnMuYyksUC53cml0ZV9zaGlmdCg0LHcuZS5jKSxQfTtmdW5jdGlvbiBiMCh3KXtmb3IodmFyIFA9dy5yZWFkX3NoaWZ0KDQpLEQ9W10sZWU9MDtlZTxQOysrZWUpe3ZhciBvZT1vYyh3KTtELnB1c2goVm8ob2UpKX1yZXR1cm4gRC5qb2luKCIsIil9ZnVuY3Rpb24geWwo'@;
put 'dyl7aWYody5sZW5ndGgtdy5sPDgpdGhyb3ciWExTIFhudW0gQnVmZmVyIHVuZGVyZmxvdyI7cmV0dXJuIHcucmVhZF9zaGlmdCg4LCJmIil9ZnVuY3Rpb24genUodyxQKXtyZXR1cm4oUHx8cHIoOCkpLndyaXRlX3NoaWZ0KDgsdywiZiIpfWZ1bmN0aW9uICRmKHcpe3ZhciBQPXt9LGVlPXcu'@;
put 'cmVhZF9zaGlmdCgxKT4+PjEsb2U9dy5yZWFkX3NoaWZ0KDEpLGdlPXcucmVhZF9zaGlmdCgyLCJpIiksX2U9dy5yZWFkX3NoaWZ0KDEpLHZlPXcucmVhZF9zaGlmdCgxKSxNZT13LnJlYWRfc2hpZnQoMSk7c3dpdGNoKHcubCsrLGVlKXtjYXNlIDA6UC5hdXRvPTE7YnJlYWs7Y2FzZSAxOlAu'@;
put 'aW5kZXg9b2U7dmFyIGplPVNyW29lXTtqZSYmKFAucmdiPWZmKGplKSk7YnJlYWs7Y2FzZSAyOlAucmdiPWZmKFtfZSx2ZSxNZV0pO2JyZWFrO2Nhc2UgMzpQLnRoZW1lPW9lfXJldHVybiAwIT1nZSYmKFAudGludD1nZT4wP2dlLzMyNzY3OmdlLzMyNzY4KSxQfWZ1bmN0aW9uIHRoKHcsUCl7'@;
put 'aWYoUHx8KFA9cHIoOCkpLCF3fHx3LmF1dG8pcmV0dXJuIFAud3JpdGVfc2hpZnQoNCwwKSxQLndyaXRlX3NoaWZ0KDQsMCksUDtudWxsIT13LmluZGV4PyhQLndyaXRlX3NoaWZ0KDEsMiksUC53cml0ZV9zaGlmdCgxLHcuaW5kZXgpKTpudWxsIT13LnRoZW1lPyhQLndyaXRlX3NoaWZ0KDEs'@;
put 'NiksUC53cml0ZV9zaGlmdCgxLHcudGhlbWUpKTooUC53cml0ZV9zaGlmdCgxLDUpLFAud3JpdGVfc2hpZnQoMSwwKSk7dmFyIEQ9dy50aW50fHwwO2lmKEQ+MD9EKj0zMjc2NzpEPDAmJihEKj0zMjc2OCksUC53cml0ZV9zaGlmdCgyLEQpLHcucmdiJiZudWxsPT13LnRoZW1lKXt2YXIgZWU9'@;
put 'dy5yZ2J8fCJGRkZGRkYiOyJudW1iZXIiPT10eXBlb2YgZWUmJihlZT0oIjAwMDAwMCIrZWUudG9TdHJpbmcoMTYpKS5zbGljZSgtNikpLFAud3JpdGVfc2hpZnQoMSxwYXJzZUludChlZS5zbGljZSgwLDIpLDE2KSksUC53cml0ZV9zaGlmdCgxLHBhcnNlSW50KGVlLnNsaWNlKDIsNCksMTYp'@;
put 'KSxQLndyaXRlX3NoaWZ0KDEscGFyc2VJbnQoZWUuc2xpY2UoNCw2KSwxNikpLFAud3JpdGVfc2hpZnQoMSwyNTUpfWVsc2UgUC53cml0ZV9zaGlmdCgyLDApLFAud3JpdGVfc2hpZnQoMSwwKSxQLndyaXRlX3NoaWZ0KDEsMCk7cmV0dXJuIFB9ZnVuY3Rpb24gY20odyl7dmFyIFA9dy5yZWFk'@;
put 'X3NoaWZ0KDEpO3JldHVybiB3LmwrKyx7ZkJvbGQ6MSZQLGZJdGFsaWM6MiZQLGZVbmRlcmxpbmU6NCZQLGZTdHJpa2VvdXQ6OCZQLGZPdXRsaW5lOjE2JlAsZlNoYWRvdzozMiZQLGZDb25kZW5zZTo2NCZQLGZFeHRlbmQ6MTI4JlB9fWZ1bmN0aW9uIGZtKHcsUCl7dmFyIGVlPXcucmVhZF9z'@;
put 'aGlmdCg0KTtzd2l0Y2goZWUpe2Nhc2UgMDpyZXR1cm4iIjtjYXNlIDQyOTQ5NjcyOTU6Y2FzZSA0Mjk0OTY3Mjk0OnJldHVybnsyOiJCSVRNQVAiLDM6Ik1FVEFGSUxFUElDVCIsODoiRElCIiwxNDoiRU5ITUVUQUZJTEUifVt3LnJlYWRfc2hpZnQoNCldfHwiIn1pZihlZT40MDApdGhyb3cg'@;
put 'bmV3IEVycm9yKCJVbnN1cHBvcnRlZCBDbGlwYm9hcmQ6ICIrZWUudG9TdHJpbmcoMTYpKTtyZXR1cm4gdy5sLT00LHcucmVhZF9zaGlmdCgwLDE9PVA/Imxwc3RyIjoibHB3c3RyIil9dmFyIG5wPTIsRWw9MyxVdT0xMixWNj04MSxIYj1bODAsVjZdLG1tPXsxOntuOiJDb2RlUGFnZSIsdDpu'@;
put 'cH0sMjp7bjoiQ2F0ZWdvcnkiLHQ6ODB9LDM6e246IlByZXNlbnRhdGlvbkZvcm1hdCIsdDo4MH0sNDp7bjoiQnl0ZUNvdW50Iix0OkVsfSw1OntuOiJMaW5lQ291bnQiLHQ6RWx9LDY6e246IlBhcmFncmFwaENvdW50Iix0OkVsfSw3OntuOiJTbGlkZUNvdW50Iix0OkVsfSw4OntuOiJOb3Rl'@;
put 'Q291bnQiLHQ6RWx9LDk6e246IkhpZGRlbkNvdW50Iix0OkVsfSwxMDp7bjoiTXVsdGltZWRpYUNsaXBDb3VudCIsdDpFbH0sMTE6e246IlNjYWxlQ3JvcCIsdDoxMX0sMTI6e246IkhlYWRpbmdQYWlycyIsdDo0MDk2fFV1fSwxMzp7bjoiVGl0bGVzT2ZQYXJ0cyIsdDo0MTI2fSwxNDp7bjoi'@;
put 'TWFuYWdlciIsdDo4MH0sMTU6e246IkNvbXBhbnkiLHQ6ODB9LDE2OntuOiJMaW5rc1VwVG9EYXRlIix0OjExfSwxNzp7bjoiQ2hhcmFjdGVyQ291bnQiLHQ6RWx9LDE5OntuOiJTaGFyZWREb2MiLHQ6MTF9LDIyOntuOiJIeXBlcmxpbmtzQ2hhbmdlZCIsdDoxMX0sMjM6e246IkFwcFZlcnNp'@;
put 'b24iLHQ6RWwscDoidmVyc2lvbiJ9LDI0OntuOiJEaWdTaWciLHQ6NjV9LDI2OntuOiJDb250ZW50VHlwZSIsdDo4MH0sMjc6e246IkNvbnRlbnRTdGF0dXMiLHQ6ODB9LDI4OntuOiJMYW5ndWFnZSIsdDo4MH0sMjk6e246IlZlcnNpb24iLHQ6ODB9LDI1NTp7fSwyMTQ3NDgzNjQ4OntuOiJM'@;
put 'b2NhbGUiLHQ6MTl9LDIxNDc0ODM2NTE6e246IkJlaGF2aW9yIix0OjE5fSwxOTE5MDU0NDM0Ont9fSxrcj17MTp7bjoiQ29kZVBhZ2UiLHQ6bnB9LDI6e246IlRpdGxlIix0OjgwfSwzOntuOiJTdWJqZWN0Iix0OjgwfSw0OntuOiJBdXRob3IiLHQ6ODB9LDU6e246IktleXdvcmRzIix0Ojgw'@;
put 'fSw2OntuOiJDb21tZW50cyIsdDo4MH0sNzp7bjoiVGVtcGxhdGUiLHQ6ODB9LDg6e246Ikxhc3RBdXRob3IiLHQ6ODB9LDk6e246IlJldk51bWJlciIsdDo4MH0sMTA6e246IkVkaXRUaW1lIix0OjY0fSwxMTp7bjoiTGFzdFByaW50ZWQiLHQ6NjR9LDEyOntuOiJDcmVhdGVkRGF0ZSIsdDo2'@;
put 'NH0sMTM6e246Ik1vZGlmaWVkRGF0ZSIsdDo2NH0sMTQ6e246IlBhZ2VDb3VudCIsdDpFbH0sMTU6e246IldvcmRDb3VudCIsdDpFbH0sMTY6e246IkNoYXJDb3VudCIsdDpFbH0sMTc6e246IlRodW1ibmFpbCIsdDo3MX0sMTg6e246IkFwcGxpY2F0aW9uIix0OjgwfSwxOTp7bjoiRG9jU2Vj'@;
put 'dXJpdHkiLHQ6RWx9LDI1NTp7fSwyMTQ3NDgzNjQ4OntuOiJMb2NhbGUiLHQ6MTl9LDIxNDc0ODM2NTE6e246IkJlaGF2aW9yIix0OjE5fSwxOTE5MDU0NDM0Ont9fSxnbT1LZShtbSwibiIpLHZtPUtlKGtyLCJuIiksQjY9ezE6IlVTIiwyOiJDQSIsMzoiIiw3OiJSVSIsMjA6IkVHIiwzMDoi'@;
put 'R1IiLDMxOiJOTCIsMzI6IkJFIiwzMzoiRlIiLDM0OiJFUyIsMzY6IkhVIiwzOToiSVQiLDQxOiJDSCIsNDM6IkFUIiw0NDoiR0IiLDQ1OiJESyIsNDY6IlNFIiw0NzoiTk8iLDQ4OiJQTCIsNDk6IkRFIiw1MjoiTVgiLDU1OiJCUiIsNjE6IkFVIiw2NDoiTloiLDY2OiJUSCIsODE6IkpQIiw4'@;
put 'MjoiS1IiLDg0OiJWTiIsODY6IkNOIiw5MDoiVFIiLDEwNToiSlMiLDIxMzoiRFoiLDIxNjoiTUEiLDIxODoiTFkiLDM1MToiUFQiLDM1NDoiSVMiLDM1ODoiRkkiLDQyMDoiQ1oiLDg4NjoiVFciLDk2MToiTEIiLDk2MjoiSk8iLDk2MzoiU1kiLDk2NDoiSVEiLDk2NToiS1ciLDk2NjoiU0Ei'@;
put 'LDk3MToiQUUiLDk3MjoiSUwiLDk3NDoiUUEiLDk4MToiSVIiLDY1NTM1OiJVUyJ9LERpPVtudWxsLCJzb2xpZCIsIm1lZGl1bUdyYXkiLCJkYXJrR3JheSIsImxpZ2h0R3JheSIsImRhcmtIb3Jpem9udGFsIiwiZGFya1ZlcnRpY2FsIiwiZGFya0Rvd24iLCJkYXJrVXAiLCJkYXJrR3JpZCIs'@;
put 'ImRhcmtUcmVsbGlzIiwibGlnaHRIb3Jpem9udGFsIiwibGlnaHRWZXJ0aWNhbCIsImxpZ2h0RG93biIsImxpZ2h0VXAiLCJsaWdodEdyaWQiLCJsaWdodFRyZWxsaXMiLCJncmF5MTI1IiwiZ3JheTA2MjUiXTtmdW5jdGlvbiB5bSh3KXtyZXR1cm4gdy5tYXAoZnVuY3Rpb24oUCl7cmV0dXJu'@;
put 'W1A+PjE2JjI1NSxQPj44JjI1NSwyNTUmUF19KX12YXIgaXA9eW0oWzAsMTY3NzcyMTUsMTY3MTE2ODAsNjUyODAsMjU1LDE2Nzc2OTYwLDE2NzExOTM1LDY1NTM1LDAsMTY3NzcyMTUsMTY3MTE2ODAsNjUyODAsMjU1LDE2Nzc2OTYwLDE2NzExOTM1LDY1NTM1LDgzODg2MDgsMzI3NjgsMTI4'@;
put 'LDg0MjEzNzYsODM4ODczNiwzMjg5NiwxMjYzMjI1Niw4NDIxNTA0LDEwMDY2NDMxLDEwMDQwMTY2LDE2Nzc3MTY0LDEzNDM0ODc5LDY2ODQ3NzQsMTY3NDQ1NzYsMjYzMTYsMTM0MjE4MjMsMTI4LDE2NzExOTM1LDE2Nzc2OTYwLDY1NTM1LDgzODg3MzYsODM4ODYwOCwzMjg5NiwyNTUsNTI0'@;
put 'NzksMTM0MzQ4NzksMTM0MzQ4MjgsMTY3NzcxMTMsMTAwNzk0ODcsMTY3NTEwNTIsMTM0MDg3NjcsMTY3NjQwNTcsMzM2ODcwMywzMzk0NzY0LDEwMDc5MjMyLDE2NzYzOTA0LDE2NzUwODQ4LDE2NzM3NzkyLDY3MTA5MzcsOTg2ODk1MCwxMzE1OCwzMzgxNjA2LDEzMDU2LDMzNTUzOTIsMTAw'@;
put 'NDAwNjQsMTAwNDAxNjYsMzM1NTU0NSwzMzU1NDQzLDAsMTY3NzcyMTUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF0pLFNyPUp0KGlwKSxWbD15bShbMTI2MzIyNTYsOTg2ODk1MCw4NDIxNTA0LDY3MTA4ODYsMzM1NTQ0MywxNjcxMTY4MCwzMjc2OCwxMzM2OTQ5NywxMjgsMzM5'@;
put 'NDU2MCwyNjM2NywxMDAyNzIxMiwxMDA1MzE3MSwxMjgsMzI3NjgsODM4ODYwOCwzMjg5Niw4Mzg4NzM2LDg0MjEzNzYsMTM2MzE0ODgsMTQ1Mzk5OTQsMTMwNjg4NTAsMTM5MjQzNTIsOTk2NzQ5Niw5MTc1MjY3LDkxOTUwMDgsMzY4MzUzNywxMDY5MjU4LDg4ODA4OTksNzQ5NDY0LDI4OTM0'@;
put 'NzYsMTE3NDU3MzAsMzc1MDIwMSwxNTU1OTUwMywxODM3OTQxLDEyMDg0MzU5LDc2MzIyNTAsNzM2MzMyOCw5NTE0NTg4LDgyODg2MTcsMzAzNjgxNCwxMTE4NDgxMF0pLG5hPXswOiIjTlVMTCEiLDc6IiNESVYvMCEiLDE1OiIjVkFMVUUhIiwyMzoiI1JFRiEiLDI5OiIjTkFNRT8iLDM2OiIj'@;
put 'TlVNISIsNDI6IiNOL0EiLDQzOiIjR0VUVElOR19EQVRBIiwyNTU6IiNXVEY/In0scWw9SWUobmEpLHpzPXsiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQubWFpbit4bWwiOiJ3b3JrYm9va3MiLCJhcHBsaWNhdGlvbi92'@;
put 'bmQubXMtZXhjZWwuYmluSW5kZXhXcyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuaW50bG1hY3Jvc2hlZXQiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmJpbkluZGV4TXMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLXBhY2thZ2Uu'@;
put 'Y29yZS1wcm9wZXJ0aWVzK3htbCI6ImNvcmVwcm9wcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5jdXN0b20tcHJvcGVydGllcyt4bWwiOiJjdXN0cHJvcHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZXh0'@;
put 'ZW5kZWQtcHJvcGVydGllcyt4bWwiOiJleHRwcm9wcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5jdXN0b21YbWxQcm9wZXJ0aWVzK3htbCI6ImN1c3RvbXhtbHByb3BzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3Vt'@;
put 'ZW50LnNwcmVhZHNoZWV0bWwuY3VzdG9tUHJvcGVydHkiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90VGFibGUiOiJwaXZvdHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5waXZvdFRhYmxlK3htbCI6'@;
put 'InBpdm90cyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuY2hhcnQreG1sIjoiY2hhcnRvYmpzIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS5jaGFydGNvbG9yc3R5bGUreG1sIjoiY2hhcnRjb2xvcnMiLCJhcHBsaWNhdGlvbi92'@;
put 'bmQubXMtb2ZmaWNlLmNoYXJ0c3R5bGUreG1sIjoiY2hhcnRzdHlsZXMiLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLmNoYXJ0ZXgreG1sIjoiY2hhcnRleHMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY2FsY0NoYWluIjoiY2FsY2NoYWlucyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVu'@;
put 'eG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNhbGNDaGFpbit4bWwiOiJjYWxjY2hhaW5zIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucHJpbnRlclNldHRpbmdzIjoiVE9ETyIsImFwcGxpY2F0aW9u'@;
put 'L3ZuZC5tcy1vZmZpY2UuYWN0aXZlWCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLmFjdGl2ZVgreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5hdHRhY2hlZFRvb2xiYXJzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5jb25uZWN0aW9u'@;
put 'cyI6ImNvbm5zIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY29ubmVjdGlvbnMreG1sIjoiY29ubnMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuZXh0ZXJuYWxMaW5rIjoibGlua3MiLCJhcHBsaWNhdGlvbi92bmQub3Bl'@;
put 'bnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5leHRlcm5hbExpbmsreG1sIjoibGlua3MiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2hlZXRNZXRhZGF0YSI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3By'@;
put 'ZWFkc2hlZXRtbC5zaGVldE1ldGFkYXRhK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucGl2b3RDYWNoZURlZmluaXRpb24iOiJwaXZvdGNhY2hlcyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5waXZvdENhY2hlUmVjb3JkcyI6InBpdm90cmVjb3JkcyIsImFwcGxp'@;
put 'Y2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90Q2FjaGVEZWZpbml0aW9uK3htbCI6InBpdm90Y2FjaGVzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RDYWNo'@;
put 'ZVJlY29yZHMreG1sIjoicGl2b3RyZWNvcmRzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnF1ZXJ5VGFibGUiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucXVlcnlUYWJsZSt4bWwiOiJUT0RPIiwiYXBwbGlj'@;
put 'YXRpb24vdm5kLm1zLWV4Y2VsLnVzZXJOYW1lcyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucmV2aXNpb25IZWFkZXJzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5yZXZpc2lvbkxvZyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMt'@;
put 'b2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5yZXZpc2lvbkhlYWRlcnMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnJldmlzaW9uTG9nK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3Blbnht'@;
put 'bGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC51c2VyTmFtZXMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC50YWJsZVNpbmdsZUNlbGxzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRz'@;
put 'aGVldG1sLnRhYmxlU2luZ2xlQ2VsbHMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zbGljZXIiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNsaWNlckNhY2hlIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zbGljZXIreG1sIjoiVE9E'@;
put 'TyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zbGljZXJDYWNoZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLndzU29ydE1hcCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwudGFibGUiOiJ0YWJsZXMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZv'@;
put 'cm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC50YWJsZSt4bWwiOiJ0YWJsZXMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudGhlbWUreG1sIjoidGhlbWVzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3Vt'@;
put 'ZW50LnRoZW1lT3ZlcnJpZGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5UaW1lbGluZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLlRpbWVsaW5lQ2FjaGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UudmJhUHJvamVj'@;
put 'dCI6InZiYSIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UudmJhUHJvamVjdFNpZ25hdHVyZSI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLnZvbGF0aWxlRGVwZW5kZW5jaWVzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVu'@;
put 'dC5zcHJlYWRzaGVldG1sLnZvbGF0aWxlRGVwZW5kZW5jaWVzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY29udHJvbHByb3BlcnRpZXMreG1sIjoiY3RybHByb3BzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50Lm1vZGVsK2Rh'@;
put 'dGEiOiJkYXRhbW9kZWxzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLlN1cnZleSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmcreG1sIjoiZHJhd2luZ3MiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMt'@;
put 'b2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmNoYXJ0c2hhcGVzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmRpYWdyYW1Db2xvcnMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1v'@;
put 'ZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuZGlhZ3JhbURhdGEreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuZGlhZ3JhbUxheW91dCt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9m'@;
put 'ZmljZWRvY3VtZW50LmRyYXdpbmdtbC5kaWFncmFtU3R5bGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC52bWxEcmF3aW5nIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1wYWNrYWdlLnJlbGF0aW9uc2hp'@;
put 'cHMreG1sIjoicmVscyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5vbGVPYmplY3QiOiJUT0RPIiwiaW1hZ2UvcG5nIjoiVE9ETyIsc2hlZXQ6ImpzIn0sS2Y9ZnVuY3Rpb24oKXt2YXIgdz17d29ya2Jvb2tzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQu'@;
put 'b3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldC5tYWluK3htbCIseGxzbToiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0Lm1hY3JvRW5hYmxlZC5tYWluK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0LmJpbmFyeS5t'@;
put 'YWNyb0VuYWJsZWQubWFpbiIseGxhbToiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmFkZGluLm1hY3JvRW5hYmxlZC5tYWluK3htbCIseGx0eDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudGVtcGxhdGUubWFpbit4bWwifSxz'@;
put 'dHJzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGFyZWRTdHJpbmdzK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoYXJlZFN0cmluZ3MifSxjb21tZW50czp7eGxzeDoiYXBwbGljYXRpb24v'@;
put 'dm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY29tbWVudHMreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY29tbWVudHMifSxzaGVldHM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5z'@;
put 'cHJlYWRzaGVldG1sLndvcmtzaGVldCt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC53b3Jrc2hlZXQifSxjaGFydHM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNoYXJ0c2hlZXQreG1sIix4bHNi'@;
put 'OiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY2hhcnRzaGVldCJ9LGRpYWxvZ3M6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmRpYWxvZ3NoZWV0K3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmRp'@;
put 'YWxvZ3NoZWV0In0sbWFjcm9zOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwubWFjcm9zaGVldCt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5tYWNyb3NoZWV0In0sdGFibGVzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9j'@;
put 'dW1lbnQuc3ByZWFkc2hlZXRtbC50YWJsZSt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC50YWJsZSJ9LHBpdm90czp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RUYWJsZSt4bWwiLHhsc2I6'@;
put 'ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5waXZvdFRhYmxlIn0scGl2b3RjYWNoZXM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90Q2FjaGVEZWZpbml0aW9uK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5k'@;
put 'Lm1zLWV4Y2VsLnBpdm90Q2FjaGVEZWZpbml0aW9uIn0scGl2b3RyZWNvcmRzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5waXZvdENhY2hlUmVjb3Jkcyt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNl'@;
put 'bC5waXZvdENhY2hlUmVjb3JkcyJ9LGNvbm5zOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jb25uZWN0aW9ucyt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5jb25uZWN0aW9ucyJ9LGxpbmtzOnt4'@;
put 'bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5leHRlcm5hbExpbmsreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuZXh0ZXJuYWxMaW5rIn0sc3R5bGVzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3Blbnht'@;
put 'bGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zdHlsZXMreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc3R5bGVzIn19O3JldHVybiBtdCh3KS5mb3JFYWNoKGZ1bmN0aW9uKFApe1sieGxzbSIsInhsYW0iXS5mb3JFYWNoKGZ1bmN0aW9uKEQpe3dbUF1b'@;
put 'RF18fCh3W1BdW0RdPXdbUF0ueGxzeCl9KX0pLG10KHcpLmZvckVhY2goZnVuY3Rpb24oUCl7bXQod1tQXSkuZm9yRWFjaChmdW5jdGlvbihEKXt6c1t3W1BdW0RdXT1QfSl9KSx3fSgpLFp1PWZ1bmN0aW9uIE9lKHcpe2Zvcih2YXIgUD1bXSxEPW10KHcpLGVlPTA7ZWUhPT1ELmxlbmd0aDsr'@;
put 'K2VlKW51bGw9PVBbd1tEW2VlXV1dJiYoUFt3W0RbZWVdXV09W10pLFBbd1tEW2VlXV1dLnB1c2goRFtlZV0pO3JldHVybiBQfSh6cyk7c2EuQ1Q9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvY29udGVudC10eXBlcyI7dmFyIG9wPU1yKCJUeXBlcyIs'@;
put 'bnVsbCx7eG1sbnM6c2EuQ1QsInhtbG5zOnhzZCI6c2EueHNkLCJ4bWxuczp4c2kiOnNhLnhzaX0pLE5iPVtbInhtbCIsImFwcGxpY2F0aW9uL3htbCJdLFsiYmluIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0LmJpbmFyeS5tYWNyb0VuYWJsZWQubWFpbiJdLFsidm1sIiwiYXBw'@;
put 'bGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnZtbERyYXdpbmciXSxbImRhdGEiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQubW9kZWwrZGF0YSJdLFsiYm1wIiwiaW1hZ2UvYm1wIl0sWyJwbmciLCJpbWFnZS9wbmciXSxb'@;
put 'ImdpZiIsImltYWdlL2dpZiJdLFsiZW1mIiwiaW1hZ2UveC1lbWYiXSxbIndtZiIsImltYWdlL3gtd21mIl0sWyJqcGciLCJpbWFnZS9qcGVnIl0sWyJqcGVnIiwiaW1hZ2UvanBlZyJdLFsidGlmIiwiaW1hZ2UvdGlmZiJdLFsidGlmZiIsImltYWdlL3RpZmYiXSxbInBkZiIsImFwcGxpY2F0'@;
put 'aW9uL3BkZiJdLFsicmVscyIsWnUucmVsc1swXV1dLm1hcChmdW5jdGlvbih3KXtyZXR1cm4gTXIoIkRlZmF1bHQiLG51bGwse0V4dGVuc2lvbjp3WzBdLENvbnRlbnRUeXBlOndbMV19KX0pLE5pPXtXQjoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50'@;
put 'LzIwMDYvcmVsYXRpb25zaGlwcy9vZmZpY2VEb2N1bWVudCIsU0hFRVQ6Imh0dHA6Ly9zaGVldGpzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvb2ZmaWNlRG9jdW1lbnQiLEhMSU5LOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5v'@;
put 'cmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2h5cGVybGluayIsVk1MOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3ZtbERyYXdpbmciLFhQQVRIOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9y'@;
put 'bWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2V4dGVybmFsTGlua1BhdGgiLFhNSVNTOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L3JlbGF0aW9uc2hpcHMveGxFeHRlcm5hbExpbmtQYXRoL3hsUGF0aE1pc3NpbmciLFhMSU5LOiJo'@;
put 'dHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2V4dGVybmFsTGluayIsQ1hNTDoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jdXN0b21YbWwi'@;
put 'LENYTUxQOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2N1c3RvbVhtbFByb3BzIixWQkE6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYvcmVsYXRpb25zaGlwcy92YmFQcm9qZWN0In07'@;
put 'ZnVuY3Rpb24gamkodyl7dmFyIFA9dy5sYXN0SW5kZXhPZigiLyIpO3JldHVybiB3LnNsaWNlKDAsUCsxKSsiX3JlbHMvIit3LnNsaWNlKFArMSkrIi5yZWxzIn1mdW5jdGlvbiBQbyh3LFApe3ZhciBEPXsiIWlkIjp7fX07aWYoIXcpcmV0dXJuIEQ7Ii8iIT09UC5jaGFyQXQoMCkmJihQPSIv'@;
put 'IitQKTt2YXIgZWU9e307cmV0dXJuKHcubWF0Y2gocXQpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihvZSl7dmFyIGdlPWNuKG9lKTtpZigiPFJlbGF0aW9uc2hpcCI9PT1nZVswXSl7dmFyIF9lPXt9O19lLlR5cGU9Z2UuVHlwZSxfZS5UYXJnZXQ9Z2UuVGFyZ2V0LF9lLklkPWdlLklkLF9lLlRh'@;
put 'cmdldE1vZGU9Z2UuVGFyZ2V0TW9kZTt2YXIgdmU9IkV4dGVybmFsIj09PWdlLlRhcmdldE1vZGU/Z2UuVGFyZ2V0OnNuKGdlLlRhcmdldCxQKTtEW3ZlXT1fZSxlZVtnZS5JZF09X2V9fSksRFsiIWlkIl09ZWUsRH1zYS5SRUxTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcv'@;
put 'cGFja2FnZS8yMDA2L3JlbGF0aW9uc2hpcHMiO3ZhciBmbD1NcigiUmVsYXRpb25zaGlwcyIsbnVsbCx7eG1sbnM6c2EuUkVMU30pO2Z1bmN0aW9uIFhsKHcpe3ZhciBQPVtCbixmbF07cmV0dXJuIG10KHdbIiFpZCJdKS5mb3JFYWNoKGZ1bmN0aW9uKEQpe1BbUC5sZW5ndGhdPU1yKCJSZWxh'@;
put 'dGlvbnNoaXAiLG51bGwsd1siIWlkIl1bRF0pfSksUC5sZW5ndGg+MiYmKFBbUC5sZW5ndGhdPSI8L1JlbGF0aW9uc2hpcHM+IixQWzFdPVBbMV0ucmVwbGFjZSgiLz4iLCI+IikpLFAuam9pbigiIil9dmFyIEoxPVtOaS5ITElOSyxOaS5YUEFUSCxOaS5YTUlTU107ZnVuY3Rpb24gR28odyxQ'@;
put 'LEQsZWUsb2UsZ2Upe2lmKG9lfHwob2U9e30pLHdbIiFpZCJdfHwod1siIWlkIl09e30pLFA8MClmb3IoUD0xO3dbIiFpZCJdWyJySWQiK1BdOysrUCk7aWYob2UuSWQ9InJJZCIrUCxvZS5UeXBlPWVlLG9lLlRhcmdldD1ELGdlP29lLlRhcmdldE1vZGU9Z2U6SjEuaW5kZXhPZihvZS5UeXBl'@;
put 'KT4tMSYmKG9lLlRhcmdldE1vZGU9IkV4dGVybmFsIiksd1siIWlkIl1bb2UuSWRdKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJld3JpdGUgcklkICIrUCk7cmV0dXJuIHdbIiFpZCJdW29lLklkXT1vZSx3WygiLyIrb2UuVGFyZ2V0KS5yZXBsYWNlKCIvLyIsIi8iKV09b2UsUH12YXIgTmM9'@;
put 'ImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXQiO2Z1bmN0aW9uIFExKHcsUCxEKXtyZXR1cm5bJyAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IicrdysnIj5cbicsJyAgICA8cmRmOnR5cGUgcmRmOnJlc291cmNlPSJodHRwOi8vZG9jcy5vYXNpcy1v'@;
put 'cGVuLm9yZy9ucy9vZmZpY2UvMS4yL21ldGEvJysoRHx8Im9kZiIpKyIjIitQKyciLz5cbicsIiAgPC9yZGY6RGVzY3JpcHRpb24+XG4iXS5qb2luKCIiKX1mdW5jdGlvbiBabyh3LFApe3JldHVyblsnICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iJyt3KyciPlxuJywnICAgIDxuczA6'@;
put 'aGFzUGFydCB4bWxuczpuczA9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29mZmljZS8xLjIvbWV0YS9wa2cjIiByZGY6cmVzb3VyY2U9IicrUCsnIi8+XG4nLCIgIDwvcmRmOkRlc2NyaXB0aW9uPlxuIl0uam9pbigiIil9dmFyIF9tPWZ1bmN0aW9uKCl7dmFyIHc9JzxvZmZpY2U6'@;
put 'ZG9jdW1lbnQtbWV0YSB4bWxuczpvZmZpY2U9InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6b2ZmaWNlOjEuMCIgeG1sbnM6bWV0YT0idXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczptZXRhOjEuMCIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9k'@;
put 'Yy9lbGVtZW50cy8xLjEvIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgb2ZmaWNlOnZlcnNpb249IjEuMiI+PG9mZmljZTptZXRhPjxtZXRhOmdlbmVyYXRvcj5TaGVldEpTICcrSC52ZXJzaW9uKyI8L21ldGE6Z2VuZXJhdG9yPjwvb2ZmaWNlOm1ldGE+PC9v'@;
put 'ZmZpY2U6ZG9jdW1lbnQtbWV0YT4iO3JldHVybiBmdW5jdGlvbigpe3JldHVybiB3fX0oKSxVcz1bWyJjcDpjYXRlZ29yeSIsIkNhdGVnb3J5Il0sWyJjcDpjb250ZW50U3RhdHVzIiwiQ29udGVudFN0YXR1cyJdLFsiY3A6a2V5d29yZHMiLCJLZXl3b3JkcyJdLFsiY3A6bGFzdE1vZGlmaWVk'@;
put 'QnkiLCJMYXN0QXV0aG9yIl0sWyJjcDpsYXN0UHJpbnRlZCIsIkxhc3RQcmludGVkIl0sWyJjcDpyZXZpc2lvbiIsIlJldk51bWJlciJdLFsiY3A6dmVyc2lvbiIsIlZlcnNpb24iXSxbImRjOmNyZWF0b3IiLCJBdXRob3IiXSxbImRjOmRlc2NyaXB0aW9uIiwiQ29tbWVudHMiXSxbImRjOmlk'@;
put 'ZW50aWZpZXIiLCJJZGVudGlmaWVyIl0sWyJkYzpsYW5ndWFnZSIsIkxhbmd1YWdlIl0sWyJkYzpzdWJqZWN0IiwiU3ViamVjdCJdLFsiZGM6dGl0bGUiLCJUaXRsZSJdLFsiZGN0ZXJtczpjcmVhdGVkIiwiQ3JlYXRlZERhdGUiLCJkYXRlIl0sWyJkY3Rlcm1zOm1vZGlmaWVkIiwiTW9kaWZp'@;
put 'ZWREYXRlIiwiZGF0ZSJdXTtzYS5DT1JFX1BST1BTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L21ldGFkYXRhL2NvcmUtcHJvcGVydGllcyIsTmkuQ09SRV9QUk9QUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAw'@;
put 'Ni9yZWxhdGlvbnNoaXBzL21ldGFkYXRhL2NvcmUtcHJvcGVydGllcyI7dmFyIEpsPWZ1bmN0aW9uKCl7Zm9yKHZhciB3PW5ldyBBcnJheShVcy5sZW5ndGgpLFA9MDtQPFVzLmxlbmd0aDsrK1Ape3ZhciBEPVVzW1BdLGVlPSIoPzoiK0RbMF0uc2xpY2UoMCxEWzBdLmluZGV4T2YoIjoiKSkr'@;
put 'IjopIitEWzBdLnNsaWNlKERbMF0uaW5kZXhPZigiOiIpKzEpO3dbUF09bmV3IFJlZ0V4cCgiPCIrZWUrIltePl0qPihbXFxzXFxTXSo/KTwvIitlZSsiPiIpfXJldHVybiB3fSgpO2Z1bmN0aW9uIG5oKHcpe3ZhciBQPXt9O3c9Rmkodyk7Zm9yKHZhciBEPTA7RDxVcy5sZW5ndGg7KytEKXt2'@;
put 'YXIgZWU9VXNbRF0sb2U9dy5tYXRjaChKbFtEXSk7bnVsbCE9b2UmJm9lLmxlbmd0aD4wJiYoUFtlZVsxXV09RXIob2VbMV0pKSwiZGF0ZSI9PT1lZVsyXSYmUFtlZVsxXV0mJihQW2VlWzFdXT1QdChQW2VlWzFdXSkpfXJldHVybiBQfXZhciByaD1NcigiY3A6Y29yZVByb3BlcnRpZXMiLG51'@;
put 'bGwseyJ4bWxuczpjcCI6c2EuQ09SRV9QUk9QUywieG1sbnM6ZGMiOnNhLmRjLCJ4bWxuczpkY3Rlcm1zIjpzYS5kY3Rlcm1zLCJ4bWxuczpkY21pdHlwZSI6c2EuZGNtaXR5cGUsInhtbG5zOnhzaSI6c2EueHNpfSk7ZnVuY3Rpb24geWModyxQLEQsZWUsb2Upe251bGwhPW9lW3ddfHxudWxs'@;
put 'PT1QfHwiIj09PVB8fChvZVt3XT1QLFA9QnIoUCksZWVbZWUubGVuZ3RoXT1EP01yKHcsUCxEKTp2YSh3LFApKX12YXIgZWY9W1siQXBwbGljYXRpb24iLCJBcHBsaWNhdGlvbiIsInN0cmluZyJdLFsiQXBwVmVyc2lvbiIsIkFwcFZlcnNpb24iLCJzdHJpbmciXSxbIkNvbXBhbnkiLCJDb21w'@;
put 'YW55Iiwic3RyaW5nIl0sWyJEb2NTZWN1cml0eSIsIkRvY1NlY3VyaXR5Iiwic3RyaW5nIl0sWyJNYW5hZ2VyIiwiTWFuYWdlciIsInN0cmluZyJdLFsiSHlwZXJsaW5rc0NoYW5nZWQiLCJIeXBlcmxpbmtzQ2hhbmdlZCIsImJvb2wiXSxbIlNoYXJlZERvYyIsIlNoYXJlZERvYyIsImJvb2wi'@;
put 'XSxbIkxpbmtzVXBUb0RhdGUiLCJMaW5rc1VwVG9EYXRlIiwiYm9vbCJdLFsiU2NhbGVDcm9wIiwiU2NhbGVDcm9wIiwiYm9vbCJdLFsiSGVhZGluZ1BhaXJzIiwiSGVhZGluZ1BhaXJzIiwicmF3Il0sWyJUaXRsZXNPZlBhcnRzIiwiVGl0bGVzT2ZQYXJ0cyIsInJhdyJdXTtmdW5jdGlvbiB3'@;
put 'MCh3LFAsRCxlZSl7dmFyIG9lPVtdO2lmKCJzdHJpbmciPT10eXBlb2YgdylvZT1kMCh3LGVlKTtlbHNlIGZvcih2YXIgZ2U9MDtnZTx3Lmxlbmd0aDsrK2dlKW9lPW9lLmNvbmNhdCh3W2dlXS5tYXAoZnVuY3Rpb24oVWUpe3JldHVybnt2OlVlfX0pKTt2YXIgX2U9InN0cmluZyI9PXR5cGVv'@;
put 'ZiBQP2QwKFAsZWUpLm1hcChmdW5jdGlvbihVZSl7cmV0dXJuIFVlLnZ9KTpQLHZlPTAsTWU9MDtpZihfZS5sZW5ndGg+MClmb3IodmFyIGplPTA7amUhPT1vZS5sZW5ndGg7amUrPTIpe3N3aXRjaChNZT0rb2VbamUrMV0udixvZVtqZV0udil7Y2FzZSJXb3Jrc2hlZXRzIjpjYXNlIlx1NWRl'@;
put 'NVx1NGY1Y1x1ODg2OCI6Y2FzZSJcdTA0MWJcdTA0MzhcdTA0NDFcdTA0NDJcdTA0NGIiOmNhc2UiXHUwNjIzXHUwNjQ4XHUwNjMxXHUwNjI3XHUwNjQyIFx1MDYyN1x1MDY0NFx1MDYzOVx1MDY0NVx1MDY0NCI6Y2FzZSJcdTMwZWZcdTMwZmNcdTMwYWZcdTMwYjdcdTMwZmNcdTMwYzgiOmNh'@;
put 'c2UiXHUwNWQyXHUwNWRjXHUwNWQ5XHUwNWQ1XHUwNWUwXHUwNWQ1XHUwNWVhIFx1MDVlMlx1MDVkMVx1MDVkNVx1MDVkM1x1MDVkNCI6Y2FzZSJBcmJlaXRzYmxceGU0dHRlciI6Y2FzZSJceGM3YWxcdTAxMzFcdTAxNWZtYSBTYXlmYWxhclx1MDEzMSI6Y2FzZSJGZXVpbGxlcyBkZSBjYWxj'@;
put 'dWwiOmNhc2UiRm9nbGkgZGkgbGF2b3JvIjpjYXNlIkZvbGhhcyBkZSBjXHhlMWxjdWxvIjpjYXNlIlBsYW5pbGhhcyI6Y2FzZSJSZWduZWFyayI6Y2FzZSJIb2phcyBkZSBjXHhlMWxjdWxvIjpjYXNlIldlcmtibGFkZW4iOkQuV29ya3NoZWV0cz1NZSxELlNoZWV0TmFtZXM9X2Uuc2xpY2Uo'@;
put 'dmUsdmUrTWUpO2JyZWFrO2Nhc2UiTmFtZWQgUmFuZ2VzIjpjYXNlIlJhbmdvcyBjb24gbm9tYnJlIjpjYXNlIlx1NTQwZFx1NTI0ZFx1NGVkOFx1MzA0ZFx1NGUwMFx1ODlhNyI6Y2FzZSJCZW5hbm50ZSBCZXJlaWNoZSI6Y2FzZSJOYXZuZ2l2bmUgb21yXHhlNWRlciI6RC5OYW1lZFJhbmdl'@;
put 'cz1NZSxELkRlZmluZWROYW1lcz1fZS5zbGljZSh2ZSx2ZStNZSk7YnJlYWs7Y2FzZSJDaGFydHMiOmNhc2UiRGlhZ3JhbW1lIjpELkNoYXJ0c2hlZXRzPU1lLEQuQ2hhcnROYW1lcz1fZS5zbGljZSh2ZSx2ZStNZSl9dmUrPU1lfX1zYS5FWFRfUFJPUFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54'@;
put 'bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L2V4dGVuZGVkLXByb3BlcnRpZXMiLE5pLkVYVF9QUk9QUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9leHRlbmRlZC1wcm9wZXJ0aWVzIjt2YXIgbHA9'@;
put 'TXIoIlByb3BlcnRpZXMiLG51bGwse3htbG5zOnNhLkVYVF9QUk9QUywieG1sbnM6dnQiOnNhLnZ0fSk7c2EuQ1VTVF9QUk9QUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvY3VzdG9tLXByb3BlcnRpZXMiLE5pLkNVU1RfUFJPUFM9Imh0'@;
put 'dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY3VzdG9tLXByb3BlcnRpZXMiO3ZhciBheD0vPFtePl0rPltePF0qL2csejY9TXIoIlByb3BlcnRpZXMiLG51bGwse3htbG5zOnNhLkNVU1RfUFJPUFMsInhtbG5zOnZ0Ijpz'@;
put 'YS52dH0pO3ZhciBpaD17VGl0bGU6IlRpdGxlIixTdWJqZWN0OiJTdWJqZWN0IixBdXRob3I6IkF1dGhvciIsS2V5d29yZHM6IktleXdvcmRzIixDb21tZW50czoiRGVzY3JpcHRpb24iLExhc3RBdXRob3I6Ikxhc3RBdXRob3IiLFJldk51bWJlcjoiUmV2aXNpb24iLEFwcGxpY2F0aW9uOiJB'@;
put 'cHBOYW1lIixMYXN0UHJpbnRlZDoiTGFzdFByaW50ZWQiLENyZWF0ZWREYXRlOiJDcmVhdGVkIixNb2RpZmllZERhdGU6Ikxhc3RTYXZlZCIsQ2F0ZWdvcnk6IkNhdGVnb3J5IixNYW5hZ2VyOiJNYW5hZ2VyIixDb21wYW55OiJDb21wYW55IixBcHBWZXJzaW9uOiJWZXJzaW9uIixDb250ZW50'@;
put 'U3RhdHVzOiJDb250ZW50U3RhdHVzIixJZGVudGlmaWVyOiJJZGVudGlmaWVyIixMYW5ndWFnZToiTGFuZ3VhZ2UifSxvaD13ZShpaCk7ZnVuY3Rpb24gWGYodyxQLEQpe3dbUD1vaFtQXXx8UF09RH1mdW5jdGlvbiBPdSh3KXt2YXIgUD13LnJlYWRfc2hpZnQoNCksRD13LnJlYWRfc2hpZnQo'@;
put 'NCk7cmV0dXJuIG5ldyBEYXRlKDFlMyooRC8xZTcqTWF0aC5wb3coMiwzMikrUC8xZTctMTE2NDQ0NzM2MDApKS50b0lTT1N0cmluZygpLnJlcGxhY2UoL1wuMDAwLywiIil9ZnVuY3Rpb24gSmYodyxQLEQpe3ZhciBlZT13Lmwsb2U9dy5yZWFkX3NoaWZ0KDAsImxwc3RyLWNwIik7aWYoRClm'@;
put 'b3IoO3cubC1lZSYzOykrK3cubDtyZXR1cm4gb2V9ZnVuY3Rpb24gbmYodyxQLEQpe3ZhciBlZT13LnJlYWRfc2hpZnQoMCwibHB3c3RyIik7cmV0dXJuIEQmJih3LmwrPTQtKGVlLmxlbmd0aCsxJjMpJjMpLGVlfWZ1bmN0aW9uIHkyKHcsUCxEKXtyZXR1cm4gMzE9PT1QP25mKHcpOkpmKHcs'@;
put 'MCxEKX1mdW5jdGlvbiBhYyh3LFAsRCl7cmV0dXJuIHkyKHcsUCwhMT09PUQ/MDo0KX1mdW5jdGlvbiB6Yih3KXt2YXIgUD13LmwsRD1TbSh3LFY2KTtyZXR1cm4gMD09d1t3LmxdJiYwPT13W3cubCsxXSYmdy5sLVAmMiYmKHcubCs9MiksW0QsU20odyxFbCldfWZ1bmN0aW9uIFU2KHcsUCl7'@;
put 'Zm9yKHZhciBEPXcucmVhZF9zaGlmdCg0KSxlZT17fSxvZT0wO29lIT1EOysrb2Upe3ZhciBnZT13LnJlYWRfc2hpZnQoNCksX2U9dy5yZWFkX3NoaWZ0KDQpO2VlW2dlXT13LnJlYWRfc2hpZnQoX2UsMTIwMD09PVA/InV0ZjE2bGUiOiJ1dGY4IikucmVwbGFjZSh5LCIiKS5yZXBsYWNlKHAs'@;
put 'IiEiKSwxMjAwPT09UCYmX2UlMiYmKHcubCs9Mil9cmV0dXJuIDMmdy5sJiYody5sPXcubD4+Mzw8MiksZWV9ZnVuY3Rpb24gWjYodyl7dmFyIFA9dy5yZWFkX3NoaWZ0KDQpLEQ9dy5zbGljZSh3Lmwsdy5sK1ApO3JldHVybiB3LmwrPVAsKDMmUCk+MCYmKHcubCs9NC0oMyZQKSYzKSxEfWZ1'@;
put 'bmN0aW9uIFNtKHcsUCxEKXt2YXIgb2UsZWU9dy5yZWFkX3NoaWZ0KDIpLGdlPUR8fHt9O2lmKHcubCs9MixQIT09VXUmJmVlIT09UCYmLTE9PT1IYi5pbmRleE9mKFApJiYoNDEyNiE9KDY1NTM0JlApfHw0MTI2IT0oNjU1MzQmZWUpKSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHR5cGUg'@;
put 'IitQKyIgc2F3ICIrZWUpO3N3aXRjaChQPT09VXU/ZWU6UCl7Y2FzZSAyOnJldHVybiBvZT13LnJlYWRfc2hpZnQoMiwiaSIpLGdlLnJhd3x8KHcubCs9Miksb2U7Y2FzZSAzOnJldHVybiB3LnJlYWRfc2hpZnQoNCwiaSIpO2Nhc2UgMTE6cmV0dXJuIDAhPT13LnJlYWRfc2hpZnQoNCk7Y2Fz'@;
put 'ZSAxOTpyZXR1cm4gdy5yZWFkX3NoaWZ0KDQpO2Nhc2UgMzA6cmV0dXJuIEpmKHcsMCw0KS5yZXBsYWNlKHksIiIpO2Nhc2UgMzE6cmV0dXJuIG5mKHcpO2Nhc2UgNjQ6cmV0dXJuIE91KHcpO2Nhc2UgNjU6cmV0dXJuIFo2KHcpO2Nhc2UgNzE6cmV0dXJuIGZ1bmN0aW9uIHN4KHcpe3ZhciBQ'@;
put 'PXt9O3JldHVybiBQLlNpemU9dy5yZWFkX3NoaWZ0KDQpLHcubCs9UC5TaXplKzMtKFAuU2l6ZS0xKSU0LFB9KHcpO2Nhc2UgODA6cmV0dXJuIGFjKHcsZWUsIWdlLnJhdykucmVwbGFjZSh5LCIiKTtjYXNlIDgxOnJldHVybiBmdW5jdGlvbiBDbSh3LFApe2lmKCFQKXRocm93IG5ldyBFcnJv'@;
put 'cigiVnRVbmFsaWduZWRTdHJpbmcgbXVzdCBoYXZlIHBvc2l0aXZlIGxlbmd0aCIpO3JldHVybiB5Mih3LFAsMCl9KHcsZWUpLnJlcGxhY2UoeSwiIik7Y2FzZSA0MTA4OnJldHVybiBmdW5jdGlvbiBVYih3KXtmb3IodmFyIFA9dy5yZWFkX3NoaWZ0KDQpLEQ9W10sZWU9MDtlZTxQLzI7Kytl'@;
put 'ZSlELnB1c2goemIodykpO3JldHVybiBEfSh3KTtjYXNlIDQxMjY6Y2FzZSA0MTI3OnJldHVybiA0MTI3PT1lZT9mdW5jdGlvbiBCYih3KXtmb3IodmFyIFA9dy5yZWFkX3NoaWZ0KDQpLEQ9W10sZWU9MDtlZSE9UDsrK2VlKXt2YXIgb2U9dy5sO0RbZWVdPXcucmVhZF9zaGlmdCgwLCJscHdz'@;
put 'dHIiKS5yZXBsYWNlKHksIiIpLHcubC1vZSYyJiYody5sKz0yKX1yZXR1cm4gRH0odyk6ZnVuY3Rpb24gamIodyl7Zm9yKHZhciBQPXcucmVhZF9zaGlmdCg0KSxEPVtdLGVlPTA7ZWUhPVA7KytlZSlEW2VlXT13LnJlYWRfc2hpZnQoMCwibHBzdHItY3AiKS5yZXBsYWNlKHksIiIpO3JldHVy'@;
put 'biBEfSh3KTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVHlwZWRQcm9wZXJ0eVZhbHVlIHVucmVjb2duaXplZCB0eXBlICIrUCsiICIrZWUpfX1mdW5jdGlvbiBaYih3LFApe3ZhciBEPXByKDQpLGVlPXByKDQpO3N3aXRjaChELndyaXRlX3NoaWZ0KDQsODA9PXc/MzE6dyksdyl7Y2FzZSAz'@;
put 'OmVlLndyaXRlX3NoaWZ0KC00LFApO2JyZWFrO2Nhc2UgNTooZWU9cHIoOCkpLndyaXRlX3NoaWZ0KDgsUCwiZiIpO2JyZWFrO2Nhc2UgMTE6ZWUud3JpdGVfc2hpZnQoNCxQPzE6MCk7YnJlYWs7Y2FzZSA2NDplZT1mdW5jdGlvbiBkdSh3KXt2YXIgRD0oInN0cmluZyI9PXR5cGVvZiB3P25l'@;
put 'dyBEYXRlKERhdGUucGFyc2UodykpOncpLmdldFRpbWUoKS8xZTMrMTE2NDQ0NzM2MDAsZWU9RCVNYXRoLnBvdygyLDMyKSxvZT0oRC1lZSkvTWF0aC5wb3coMiwzMik7b2UqPTFlNzt2YXIgZ2U9KGVlKj0xZTcpL01hdGgucG93KDIsMzIpfDA7Z2U+MCYmKGVlJT1NYXRoLnBvdygyLDMyKSxv'@;
put 'ZSs9Z2UpO3ZhciBfZT1wcig4KTtyZXR1cm4gX2Uud3JpdGVfc2hpZnQoNCxlZSksX2Uud3JpdGVfc2hpZnQoNCxvZSksX2V9KFApO2JyZWFrO2Nhc2UgMzE6Y2FzZSA4MDpmb3IoKGVlPXByKDQrMiooUC5sZW5ndGgrMSkrKFAubGVuZ3RoJTI/MDoyKSkpLndyaXRlX3NoaWZ0KDQsUC5sZW5n'@;
put 'dGgrMSksZWUud3JpdGVfc2hpZnQoMCxQLCJkYmNzIik7ZWUubCE9ZWUubGVuZ3RoOyllZS53cml0ZV9zaGlmdCgxLDApO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlZFByb3BlcnR5VmFsdWUgdW5yZWNvZ25pemVkIHR5cGUgIit3KyIgIitQKX1yZXR1cm4gTShbRCxlZV0p'@;
put 'fWZ1bmN0aW9uIHJmKHcsUCl7dmFyIEQ9dy5sLGVlPXcucmVhZF9zaGlmdCg0KSxvZT13LnJlYWRfc2hpZnQoNCksZ2U9W10sX2U9MCx2ZT0wLE1lPS0xLGplPXt9O2ZvcihfZT0wO19lIT1vZTsrK19lKXt2YXIgVWU9dy5yZWFkX3NoaWZ0KDQpLFhlPXcucmVhZF9zaGlmdCg0KTtnZVtfZV09'@;
put 'W1VlLFhlK0RdfWdlLnNvcnQoZnVuY3Rpb24oa3QsVHQpe3JldHVybiBrdFsxXS1UdFsxXX0pO3ZhciBpdD17fTtmb3IoX2U9MDtfZSE9b2U7KytfZSl7aWYody5sIT09Z2VbX2VdWzFdKXt2YXIgZnQ9ITA7aWYoX2U+MCYmUClzd2l0Y2goUFtnZVtfZS0xXVswXV0udCl7Y2FzZSAyOncubCsy'@;
put 'PT09Z2VbX2VdWzFdJiYody5sKz0yLGZ0PSExKTticmVhaztjYXNlIDgwOmNhc2UgNDEwODp3Lmw8PWdlW19lXVsxXSYmKHcubD1nZVtfZV1bMV0sZnQ9ITEpfWlmKCghUHx8MD09X2UpJiZ3Lmw8PWdlW19lXVsxXSYmKGZ0PSExLHcubD1nZVtfZV1bMV0pLGZ0KXRocm93IG5ldyBFcnJvcigi'@;
put 'UmVhZCBFcnJvcjogRXhwZWN0ZWQgYWRkcmVzcyAiK2dlW19lXVsxXSsiIGF0ICIrdy5sKyIgOiIrX2UpfWlmKFApe3ZhciBNdD1QW2dlW19lXVswXV07aWYoaXRbTXQubl09U20odyxNdC50LHtyYXc6ITB9KSwidmVyc2lvbiI9PT1NdC5wJiYoaXRbTXQubl09U3RyaW5nKGl0W010Lm5dPj4x'@;
put 'NikrIi4iKygiMDAwMCIrU3RyaW5nKDY1NTM1Jml0W010Lm5dKSkuc2xpY2UoLTQpKSwiQ29kZVBhZ2UiPT1NdC5uKXN3aXRjaChpdFtNdC5uXSl7Y2FzZSAwOml0W010Lm5dPTEyNTI7Y2FzZSA4NzQ6Y2FzZSA5MzI6Y2FzZSA5MzY6Y2FzZSA5NDk6Y2FzZSA5NTA6Y2FzZSAxMjUwOmNhc2Ug'@;
put 'MTI1MTpjYXNlIDEyNTM6Y2FzZSAxMjU0OmNhc2UgMTI1NTpjYXNlIDEyNTY6Y2FzZSAxMjU3OmNhc2UgMTI1ODpjYXNlIDFlNDpjYXNlIDEyMDA6Y2FzZSAxMjAxOmNhc2UgMTI1MjpjYXNlIDY1ZTM6Y2FzZS01MzY6Y2FzZSA2NTAwMTpjYXNlLTUzNTp6KHZlPWl0W010Lm5dPj4+MCY2NTUz'@;
put 'NSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIENvZGVQYWdlOiAiK2l0W010Lm5dKX19ZWxzZSBpZigxPT09Z2VbX2VdWzBdKXtpZih2ZT1pdC5Db2RlUGFnZT1TbSh3LG5wKSx6KHZlKSwtMSE9PU1lKXt2YXIgdXQ9dy5sO3cubD1nZVtNZV1bMV0samU9VTYo'@;
put 'dyx2ZSksdy5sPXV0fX1lbHNlIGlmKDA9PT1nZVtfZV1bMF0pe2lmKDA9PT12ZSl7TWU9X2Usdy5sPWdlW19lKzFdWzFdO2NvbnRpbnVlfWplPVU2KHcsdmUpfWVsc2V7dmFyIEh0LHd0PWplW2dlW19lXVswXV07c3dpdGNoKHdbdy5sXSl7Y2FzZSA2NTp3LmwrPTQsSHQ9WjYodyk7YnJlYWs7'@;
put 'Y2FzZSAzMDpjYXNlIDMxOncubCs9NCxIdD1hYyh3LHdbdy5sLTRdKS5yZXBsYWNlKC9cdTAwMDArJC8sIiIpO2JyZWFrO2Nhc2UgMzp3LmwrPTQsSHQ9dy5yZWFkX3NoaWZ0KDQsImkiKTticmVhaztjYXNlIDE5OncubCs9NCxIdD13LnJlYWRfc2hpZnQoNCk7YnJlYWs7Y2FzZSA1OncubCs9'@;
put 'NCxIdD13LnJlYWRfc2hpZnQoOCwiZiIpO2JyZWFrO2Nhc2UgMTE6dy5sKz00LEh0PXhvKHcsNCk7YnJlYWs7Y2FzZSA2NDp3LmwrPTQsSHQ9UHQoT3UodykpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bnBhcnNlZCB2YWx1ZTogIit3W3cubF0pfWl0W3d0XT1IdH19cmV0dXJu'@;
put 'IHcubD1EK2VlLGl0fXZhciBZNj1bIkNvZGVQYWdlIiwiVGh1bWJuYWlsIiwiX1BJRF9MSU5LQkFTRSIsIl9QSURfSExJTktTIiwiU3lzdGVtSWRlbnRpZmllciIsIkZNVElEIl0uY29uY2F0KFsiV29ya3NoZWV0cyIsIlNoZWV0TmFtZXMiLCJOYW1lZFJhbmdlcyIsIkRlZmluZWROYW1lcyIs'@;
put 'IkNoYXJ0c2hlZXRzIiwiQ2hhcnROYW1lcyJdKTtmdW5jdGlvbiB1eCh3KXtzd2l0Y2godHlwZW9mIHcpe2Nhc2UiYm9vbGVhbiI6cmV0dXJuIDExO2Nhc2UibnVtYmVyIjpyZXR1cm4oMHx3KT09dz8zOjU7Y2FzZSJzdHJpbmciOnJldHVybiAzMTtjYXNlIm9iamVjdCI6aWYodyBpbnN0YW5j'@;
put 'ZW9mIERhdGUpcmV0dXJuIDY0fXJldHVybi0xfWZ1bmN0aW9uIFliKHcsUCxEKXt2YXIgZWU9cHIoOCksb2U9W10sZ2U9W10sX2U9OCx2ZT0wLE1lPXByKDgpLGplPXByKDgpO2lmKE1lLndyaXRlX3NoaWZ0KDQsMiksTWUud3JpdGVfc2hpZnQoNCwxMjAwKSxqZS53cml0ZV9zaGlmdCg0LDEp'@;
put 'LGdlLnB1c2goTWUpLG9lLnB1c2goamUpLF9lKz04K01lLmxlbmd0aCwhUCl7KGplPXByKDgpKS53cml0ZV9zaGlmdCg0LDApLG9lLnVuc2hpZnQoamUpO3ZhciBVZT1bcHIoNCldO2ZvcihVZVswXS53cml0ZV9zaGlmdCg0LHcubGVuZ3RoKSx2ZT0wO3ZlPHcubGVuZ3RoOysrdmUpe3ZhciBY'@;
put 'ZT13W3ZlXVswXTtmb3IoKE1lPXByKDgrMiooWGUubGVuZ3RoKzEpKyhYZS5sZW5ndGglMj8wOjIpKSkud3JpdGVfc2hpZnQoNCx2ZSsyKSxNZS53cml0ZV9zaGlmdCg0LFhlLmxlbmd0aCsxKSxNZS53cml0ZV9zaGlmdCgwLFhlLCJkYmNzIik7TWUubCE9TWUubGVuZ3RoOylNZS53cml0ZV9z'@;
put 'aGlmdCgxLDApO1VlLnB1c2goTWUpfU1lPU0oVWUpLGdlLnVuc2hpZnQoTWUpLF9lKz04K01lLmxlbmd0aH1mb3IodmU9MDt2ZTx3Lmxlbmd0aDsrK3ZlKWlmKCghUHx8UFt3W3ZlXVswXV0pJiYhKFk2LmluZGV4T2Yod1t2ZV1bMF0pPi0xKSYmbnVsbCE9d1t2ZV1bMV0pe3ZhciBpdD13W3Zl'@;
put 'XVsxXSxmdD0wO2lmKFApe3ZhciBNdD1EW2Z0PStQW3dbdmVdWzBdXV07aWYoInZlcnNpb24iPT1NdC5wJiYic3RyaW5nIj09dHlwZW9mIGl0KXt2YXIgdXQ9aXQuc3BsaXQoIi4iKTtpdD0oK3V0WzBdPDwxNikrKCt1dFsxXXx8MCl9TWU9WmIoTXQudCxpdCl9ZWxzZXt2YXIgd3Q9dXgoaXQp'@;
put 'Oy0xPT13dCYmKHd0PTMxLGl0PVN0cmluZyhpdCkpLE1lPVpiKHd0LGl0KX1nZS5wdXNoKE1lKSwoamU9cHIoOCkpLndyaXRlX3NoaWZ0KDQsUD9mdDoyK3ZlKSxvZS5wdXNoKGplKSxfZSs9OCtNZS5sZW5ndGh9dmFyIEh0PTgqKGdlLmxlbmd0aCsxKTtmb3IodmU9MDt2ZTxnZS5sZW5ndGg7'@;
put 'Kyt2ZSlvZVt2ZV0ud3JpdGVfc2hpZnQoNCxIdCksSHQrPWdlW3ZlXS5sZW5ndGg7cmV0dXJuIGVlLndyaXRlX3NoaWZ0KDQsX2UpLGVlLndyaXRlX3NoaWZ0KDQsZ2UubGVuZ3RoKSxNKFtlZV0uY29uY2F0KG9lKS5jb25jYXQoZ2UpKX1mdW5jdGlvbiBXYih3LFAsRCl7dmFyIGVlPXcuY29u'@;
put 'dGVudDtpZighZWUpcmV0dXJue307c3MoZWUsMCk7dmFyIG9lLGdlLF9lLHZlLE1lPTA7ZWUuY2hrKCJmZWZmIiwiQnl0ZSBPcmRlcjogIiksZWUucmVhZF9zaGlmdCgyKTt2YXIgamU9ZWUucmVhZF9zaGlmdCg0KSxVZT1lZS5yZWFkX3NoaWZ0KDE2KTtpZihVZSE9PU5lLnV0aWxzLmNvbnN0'@;
put 'cy5IRUFERVJfQ0xTSUQmJlVlIT09RCl0aHJvdyBuZXcgRXJyb3IoIkJhZCBQcm9wZXJ0eVNldCBDTFNJRCAiK1VlKTtpZigxIT09KG9lPWVlLnJlYWRfc2hpZnQoNCkpJiYyIT09b2UpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgI1NldHM6ICIrb2UpO2lmKGdlPWVlLnJlYWRfc2hp'@;
put 'ZnQoMTYpLHZlPWVlLnJlYWRfc2hpZnQoNCksMT09PW9lJiZ2ZSE9PWVlLmwpdGhyb3cgbmV3IEVycm9yKCJMZW5ndGggbWlzbWF0Y2g6ICIrdmUrIiAhPT0gIitlZS5sKTsyPT09b2UmJihfZT1lZS5yZWFkX3NoaWZ0KDE2KSxNZT1lZS5yZWFkX3NoaWZ0KDQpKTt2YXIgTXQsWGU9cmYoZWUs'@;
put 'UCksaXQ9e1N5c3RlbUlkZW50aWZpZXI6amV9O2Zvcih2YXIgZnQgaW4gWGUpaXRbZnRdPVhlW2Z0XTtpZihpdC5GTVRJRD1nZSwxPT09b2UpcmV0dXJuIGl0O2lmKE1lLWVlLmw9PTImJihlZS5sKz0yKSxlZS5sIT09TWUpdGhyb3cgbmV3IEVycm9yKCJMZW5ndGggbWlzbWF0Y2ggMjogIitl'@;
put 'ZS5sKyIgIT09ICIrTWUpO3RyeXtNdD1yZihlZSxudWxsKX1jYXRjaHt9Zm9yKGZ0IGluIE10KWl0W2Z0XT1NdFtmdF07cmV0dXJuIGl0LkZNVElEPVtnZSxfZV0saXR9ZnVuY3Rpb24gd2kodyxQLEQsZWUsb2UsZ2Upe3ZhciBfZT1wcihvZT82ODo0OCksdmU9W19lXTtfZS53cml0ZV9zaGlm'@;
put 'dCgyLDY1NTM0KSxfZS53cml0ZV9zaGlmdCgyLDApLF9lLndyaXRlX3NoaWZ0KDQsODQyNDEyNTk5KSxfZS53cml0ZV9zaGlmdCgxNixOZS51dGlscy5jb25zdHMuSEVBREVSX0NMU0lELCJoZXgiKSxfZS53cml0ZV9zaGlmdCg0LG9lPzI6MSksX2Uud3JpdGVfc2hpZnQoMTYsUCwiaGV4Iiks'@;
put 'X2Uud3JpdGVfc2hpZnQoNCxvZT82ODo0OCk7dmFyIE1lPVliKHcsRCxlZSk7aWYodmUucHVzaChNZSksb2Upe3ZhciBqZT1ZYihvZSxudWxsLG51bGwpO19lLndyaXRlX3NoaWZ0KDE2LGdlLCJoZXgiKSxfZS53cml0ZV9zaGlmdCg0LDY4K01lLmxlbmd0aCksdmUucHVzaChqZSl9cmV0dXJu'@;
put 'IE0odmUpfWZ1bmN0aW9uIFFmKHcsUCl7cmV0dXJuIHcucmVhZF9zaGlmdChQKSxudWxsfWZ1bmN0aW9uIHhvKHcsUCl7cmV0dXJuIDE9PT13LnJlYWRfc2hpZnQoUCl9ZnVuY3Rpb24gWnModyxQKXtyZXR1cm4gUHx8KFA9cHIoMikpLFAud3JpdGVfc2hpZnQoMiwrISF3KSxQfWZ1bmN0aW9u'@;
put 'IHlzKHcpe3JldHVybiB3LnJlYWRfc2hpZnQoMiwidSIpfWZ1bmN0aW9uIGJjKHcsUCl7cmV0dXJuIFB8fChQPXByKDIpKSxQLndyaXRlX3NoaWZ0KDIsdyksUH1mdW5jdGlvbiBhZih3LFApe3JldHVybiBmdW5jdGlvbiBNbSh3LFAsRCl7Zm9yKHZhciBlZT1bXSxvZT13LmwrUDt3Lmw8b2U7'@;
put 'KWVlLnB1c2goRCh3LG9lLXcubCkpO2lmKG9lIT09dy5sKXRocm93IG5ldyBFcnJvcigiU2x1cnAgZXJyb3IiKTtyZXR1cm4gZWV9KHcsUCx5cyl9ZnVuY3Rpb24gR2IodyxQLEQpe3JldHVybiBEfHwoRD1wcigyKSksRC53cml0ZV9zaGlmdCgxLCJlIj09UD8rdzorISF3KSxELndyaXRlX3No'@;
put 'aWZ0KDEsImUiPT1QPzE6MCksRH1mdW5jdGlvbiBlZCh3LFAsRCl7dmFyIGVlPXcucmVhZF9zaGlmdChEJiZELmJpZmY+PTEyPzI6MSksb2U9InNiY3MtY29udCIsZ2U9QjtEJiZELmJpZmY+PTgmJihCPTEyMDApLEQmJjghPUQuYmlmZj8xMj09RC5iaWZmJiYob2U9IndzdHIiKTp3LnJlYWRf'@;
put 'c2hpZnQoMSkmJihvZT0iZGJjcy1jb250IiksRC5iaWZmPj0yJiZELmJpZmY8PTUmJihvZT0iY3BzdHIiKTt2YXIgdmU9ZWU/dy5yZWFkX3NoaWZ0KGVlLG9lKToiIjtyZXR1cm4gQj1nZSx2ZX1mdW5jdGlvbiBHNih3KXt2YXIgUD1CO0I9MTIwMDt2YXIgTWUsRD13LnJlYWRfc2hpZnQoMiks'@;
put 'ZWU9dy5yZWFkX3NoaWZ0KDEpLG9lPTQmZWUsZ2U9OCZlZSxfZT0xKygxJmVlKSx2ZT0wLGplPXt9O2dlJiYodmU9dy5yZWFkX3NoaWZ0KDIpKSxvZSYmKE1lPXcucmVhZF9zaGlmdCg0KSk7dmFyIFhlPTA9PT1EPyIiOncucmVhZF9zaGlmdChELDI9PV9lPyJkYmNzLWNvbnQiOiJzYmNzLWNv'@;
put 'bnQiKTtpZihnZSlmb3IoamUuX1I9W107dmUtLSA+MDspamUuX1IucHVzaCh7aWR4OncucmVhZF9zaGlmdCgyKSxpZm50OncucmVhZF9zaGlmdCgyKX0pO3JldHVybiBvZSYmKHcubCs9TWUpLGplLnQ9WGUsZ2V8fChqZS5yPSI8dD4iK2plLnQrIjwvdD4iKSxCPVAsamV9ZnVuY3Rpb24gZTEo'@;
put 'dyxQKXt2YXIgRD13LlImJncuUi5sZW5ndGh8fHcucjt3LnImJih3LlI9czgody5yKSk7dmFyIGVlPSIiLG9lPTA7RD93LlIuZm9yRWFjaChmdW5jdGlvbihNdCl7b2UrKyxlZSs9TXQudnx8IiJ9KTooZWU9dy50fHwiIixvZT0xKTt2YXIgZ2U9cHIoMysob2U+MT8yOjApKTtnZS53cml0ZV9z'@;
put 'aGlmdCgyLGVlLmxlbmd0aCksZ2Uud3JpdGVfc2hpZnQoMSwxfChvZT4xPzg6MCkpLG9lPjEmJmdlLndyaXRlX3NoaWZ0KDIsb2UpO3ZhciBfZT1wcigyKmVlLmxlbmd0aCk7X2Uud3JpdGVfc2hpZnQoMiplZS5sZW5ndGgsZWUsInV0ZjE2bGUiKTt2YXIgdmU9W2dlLF9lXTtpZihEKXt2YXIg'@;
put 'TWU9cHIoNCp3LlIubGVuZ3RoKSxqZT0wO3ZlLnB1c2goTWUpO2Zvcih2YXIgVWU9MDtVZTx3LlIubGVuZ3RoOysrVWUpe3ZhciBYZT13LlJbVWVdO01lLndyaXRlX3NoaWZ0KDIsamUpLGplKz0oWGUudnx8IiIpLmxlbmd0aDt2YXIgaXQ9WGUucz93YyhQLmNlbGxYZnMsUC5jZWxsU3R5bGVY'@;
put 'ZnMse3Q6Im4iLHY6MCxzOlhlLnN9LFApOjAsZnQ9UC5jZWxsWGZzW2l0XS5mb250SWQ7TWUud3JpdGVfc2hpZnQoMixmdDw0P2Z0OmZ0KzEpfX1yZXR1cm4gTSh2ZSl9ZnVuY3Rpb24gdGQodyxQLEQpe2lmKEQpe2lmKEQuYmlmZj49MiYmRC5iaWZmPD01KXJldHVybiB3LnJlYWRfc2hpZnQo'@;
put 'UCwiY3BzdHIiKTtpZihELmJpZmY+PTEyKXJldHVybiB3LnJlYWRfc2hpZnQoUCwiZGJjcy1jb250Iil9dmFyIG9lPXcucmVhZF9zaGlmdCgxKTtyZXR1cm4gdy5yZWFkX3NoaWZ0KFAsMD09PW9lPyJzYmNzLWNvbnQiOiJkYmNzLWNvbnQiKX1mdW5jdGlvbiBhaCh3LFAsRCl7dmFyIGVlPXcu'@;
put 'cmVhZF9zaGlmdChEJiYyPT1ELmJpZmY/MToyKTtyZXR1cm4gMD09PWVlPyh3LmwrKywiIik6dGQodyxlZSxEKX1mdW5jdGlvbiBsaCh3LFAsRCl7aWYoRC5iaWZmPjUpcmV0dXJuIGFoKHcsMCxEKTt2YXIgZWU9dy5yZWFkX3NoaWZ0KDEpO3JldHVybiAwPT09ZWU/KHcubCsrLCIiKTp3LnJl'@;
put 'YWRfc2hpZnQoZWUsRC5iaWZmPD00fHwhdy5sZW5zPyJjcHN0ciI6InNiY3MtY29udCIpfWZ1bmN0aW9uICQ2KHcsUCxEKXtyZXR1cm4gRHx8KEQ9cHIoMysyKncubGVuZ3RoKSksRC53cml0ZV9zaGlmdCgyLHcubGVuZ3RoKSxELndyaXRlX3NoaWZ0KDEsMSksRC53cml0ZV9zaGlmdCgzMSx3'@;
put 'LCJ1dGYxNmxlIiksRH1mdW5jdGlvbiBrbSh3KXt2YXIgUD13LnJlYWRfc2hpZnQoNCk7cmV0dXJuIFA+MD93LnJlYWRfc2hpZnQoUCwidXRmMTZsZSIpLnJlcGxhY2UoeSwiIik6IiJ9ZnVuY3Rpb24gY3AodyxQKXtQfHwoUD1wcig2KzIqdy5sZW5ndGgpKSxQLndyaXRlX3NoaWZ0KDQsMSt3'@;
put 'Lmxlbmd0aCk7Zm9yKHZhciBEPTA7RDx3Lmxlbmd0aDsrK0QpUC53cml0ZV9zaGlmdCgyLHcuY2hhckNvZGVBdChEKSk7cmV0dXJuIFAud3JpdGVfc2hpZnQoMiwwKSxQfWZ1bmN0aW9uIGZwKHcpe3ZhciBQPXByKDUxMiksRD0wLGVlPXcuVGFyZ2V0OyJmaWxlOi8vIj09ZWUuc2xpY2UoMCw3'@;
put 'KSYmKGVlPWVlLnNsaWNlKDcpKTt2YXIgb2U9ZWUuaW5kZXhPZigiIyIpLGdlPW9lPi0xPzMxOjIzO3N3aXRjaChlZS5jaGFyQXQoMCkpe2Nhc2UiIyI6Z2U9Mjg7YnJlYWs7Y2FzZSIuIjpnZSY9LTN9UC53cml0ZV9zaGlmdCg0LDIpLFAud3JpdGVfc2hpZnQoNCxnZSk7dmFyIF9lPVs4LDY4'@;
put 'MTU4MjcsNjYxOTIzNyw0ODQ5NzgwLDgzXTtmb3IoRD0wO0Q8X2UubGVuZ3RoOysrRClQLndyaXRlX3NoaWZ0KDQsX2VbRF0pO2lmKDI4PT1nZSljcChlZT1lZS5zbGljZSgxKSxQKTtlbHNlIGlmKDImZ2Upe2ZvcihfZT0iZTAgYzkgZWEgNzkgZjkgYmEgY2UgMTEgOGMgODIgMDAgYWEgMDAg'@;
put 'NGIgYTkgMGIiLnNwbGl0KCIgIiksRD0wO0Q8X2UubGVuZ3RoOysrRClQLndyaXRlX3NoaWZ0KDEscGFyc2VJbnQoX2VbRF0sMTYpKTt2YXIgdmU9b2U+LTE/ZWUuc2xpY2UoMCxvZSk6ZWU7Zm9yKFAud3JpdGVfc2hpZnQoNCwyKih2ZS5sZW5ndGgrMSkpLEQ9MDtEPHZlLmxlbmd0aDsrK0Qp'@;
put 'UC53cml0ZV9zaGlmdCgyLHZlLmNoYXJDb2RlQXQoRCkpO1Aud3JpdGVfc2hpZnQoMiwwKSw4JmdlJiZjcChvZT4tMT9lZS5zbGljZShvZSsxKToiIixQKX1lbHNle2ZvcihfZT0iMDMgMDMgMDAgMDAgMDAgMDAgMDAgMDAgYzAgMDAgMDAgMDAgMDAgMDAgMDAgNDYiLnNwbGl0KCIgIiksRD0w'@;
put 'O0Q8X2UubGVuZ3RoOysrRClQLndyaXRlX3NoaWZ0KDEscGFyc2VJbnQoX2VbRF0sMTYpKTtmb3IodmFyIE1lPTA7Ii4uLyI9PWVlLnNsaWNlKDMqTWUsMypNZSszKXx8Ii4uXFwiPT1lZS5zbGljZSgzKk1lLDMqTWUrMyk7KSsrTWU7Zm9yKFAud3JpdGVfc2hpZnQoMixNZSksUC53cml0ZV9z'@;
put 'aGlmdCg0LGVlLmxlbmd0aC0zKk1lKzEpLEQ9MDtEPGVlLmxlbmd0aC0zKk1lOysrRClQLndyaXRlX3NoaWZ0KDEsMjU1JmVlLmNoYXJDb2RlQXQoRCszKk1lKSk7Zm9yKFAud3JpdGVfc2hpZnQoMSwwKSxQLndyaXRlX3NoaWZ0KDIsNjU1MzUpLFAud3JpdGVfc2hpZnQoMiw1NzAwNSksRD0w'@;
put 'O0Q8NjsrK0QpUC53cml0ZV9zaGlmdCg0LDApfXJldHVybiBQLnNsaWNlKDAsUC5sKX1mdW5jdGlvbiBLNih3KXtyZXR1cm5bdy5yZWFkX3NoaWZ0KDEpLHcucmVhZF9zaGlmdCgxKSx3LnJlYWRfc2hpZnQoMSksdy5yZWFkX3NoaWZ0KDEpXX1mdW5jdGlvbiAkYih3LFApe3ZhciBEPUs2KHcp'@;
put 'O3JldHVybiBEWzNdPTAsRH1mdW5jdGlvbiBqYyh3KXtyZXR1cm57cjp3LnJlYWRfc2hpZnQoMiksYzp3LnJlYWRfc2hpZnQoMiksaXhmZTp3LnJlYWRfc2hpZnQoMil9fWZ1bmN0aW9uIHQxKHcsUCxELGVlKXtyZXR1cm4gZWV8fChlZT1wcig2KSksZWUud3JpdGVfc2hpZnQoMix3KSxlZS53'@;
put 'cml0ZV9zaGlmdCgyLFApLGVlLndyaXRlX3NoaWZ0KDIsRHx8MCksZWV9ZnVuY3Rpb24gcWIodyxQLEQpe3ZhciBlZT1ELmJpZmY+OD80OjI7cmV0dXJuW3cucmVhZF9zaGlmdChlZSksdy5yZWFkX3NoaWZ0KGVlLCJpIiksdy5yZWFkX3NoaWZ0KGVlLCJpIildfWZ1bmN0aW9uIFhiKHcpe3Jl'@;
put 'dHVyblt3LnJlYWRfc2hpZnQoMiksaWModyldfWZ1bmN0aW9uIGIyKHcpe3ZhciBQPXcucmVhZF9zaGlmdCgyKSxEPXcucmVhZF9zaGlmdCgyKTtyZXR1cm57czp7Yzp3LnJlYWRfc2hpZnQoMikscjpQfSxlOntjOncucmVhZF9zaGlmdCgyKSxyOkR9fX1mdW5jdGlvbiBuMSh3LFApe3JldHVy'@;
put 'biBQfHwoUD1wcig4KSksUC53cml0ZV9zaGlmdCgyLHcucy5yKSxQLndyaXRlX3NoaWZ0KDIsdy5lLnIpLFAud3JpdGVfc2hpZnQoMix3LnMuYyksUC53cml0ZV9zaGlmdCgyLHcuZS5jKSxQfWZ1bmN0aW9uIHE2KHcpe3ZhciBQPXcucmVhZF9zaGlmdCgyKSxEPXcucmVhZF9zaGlmdCgyKTty'@;
put 'ZXR1cm57czp7Yzp3LnJlYWRfc2hpZnQoMSkscjpQfSxlOntjOncucmVhZF9zaGlmdCgxKSxyOkR9fX12YXIgYmw9cTY7ZnVuY3Rpb24gRW0odyl7dy5sKz00O3ZhciBQPXcucmVhZF9zaGlmdCgyKSxEPXcucmVhZF9zaGlmdCgyKSxlZT13LnJlYWRfc2hpZnQoMik7cmV0dXJuIHcubCs9MTIs'@;
put 'W0QsUCxlZV19ZnVuY3Rpb24gWXModyl7dy5sKz0yLHcubCs9dy5yZWFkX3NoaWZ0KDIpfXZhciBYNj17MDpZcyw0OllzLDU6WXMsNjpZcyw3OmZ1bmN0aW9uIGVfKHcpe3JldHVybiB3LmwrPTQsdy5jZj13LnJlYWRfc2hpZnQoMikse319LDg6WXMsOTpZcywxMDpZcywxMTpZcywxMjpZcywx'@;
put 'MzpmdW5jdGlvbiBRYih3KXt2YXIgUD17fTtyZXR1cm4gdy5sKz00LHcubCs9MTYsUC5mU2hhcmVkTm90ZT13LnJlYWRfc2hpZnQoMiksdy5sKz00LFB9LDE0OllzLDE1OllzLDE2OllzLDE3OllzLDE4OllzLDE5OllzLDIwOllzLDIxOkVtfTtmdW5jdGlvbiB6Yyh3LFApe3ZhciBEPXtCSUZG'@;
put 'VmVyOjAsZHQ6MH07c3dpdGNoKEQuQklGRlZlcj13LnJlYWRfc2hpZnQoMiksKFAtPTIpPj0yJiYoRC5kdD13LnJlYWRfc2hpZnQoMiksdy5sLT0yKSxELkJJRkZWZXIpe2Nhc2UgMTUzNjpjYXNlIDEyODA6Y2FzZSAxMDI0OmNhc2UgNzY4OmNhc2UgNTEyOmNhc2UgMjpjYXNlIDc6YnJlYWs7'@;
put 'ZGVmYXVsdDppZihQPjYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIEJJRkYgVmVyICIrRC5CSUZGVmVyKX1yZXR1cm4gdy5yZWFkX3NoaWZ0KFApLER9ZnVuY3Rpb24geG0odyxQLEQpe3ZhciBlZT0xNTM2LG9lPTE2O3N3aXRjaChELmJvb2tUeXBlKXtjYXNlImJpZmY4IjpjYXNlInhs'@;
put 'YSI6YnJlYWs7Y2FzZSJiaWZmNSI6ZWU9MTI4MCxvZT04O2JyZWFrO2Nhc2UiYmlmZjQiOmVlPTQsb2U9NjticmVhaztjYXNlImJpZmYzIjplZT0zLG9lPTY7YnJlYWs7Y2FzZSJiaWZmMiI6ZWU9MixvZT00O2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCBCSUZG'@;
put 'IHZlcnNpb24iKX12YXIgZ2U9cHIob2UpO3JldHVybiBnZS53cml0ZV9zaGlmdCgyLGVlKSxnZS53cml0ZV9zaGlmdCgyLFApLG9lPjQmJmdlLndyaXRlX3NoaWZ0KDIsMjkyODIpLG9lPjYmJmdlLndyaXRlX3NoaWZ0KDIsMTk5Nyksb2U+OCYmKGdlLndyaXRlX3NoaWZ0KDIsNDkxNjEpLGdl'@;
put 'LndyaXRlX3NoaWZ0KDIsMSksZ2Uud3JpdGVfc2hpZnQoMiwxNzk4KSxnZS53cml0ZV9zaGlmdCgyLDApKSxnZX1mdW5jdGlvbiBvMSh3LFApe3ZhciBEPSFQfHxQLmJpZmY+PTg/MjoxLGVlPXByKDgrRCp3Lm5hbWUubGVuZ3RoKTtlZS53cml0ZV9zaGlmdCg0LHcucG9zKSxlZS53cml0ZV9z'@;
put 'aGlmdCgxLHcuaHN8fDApLGVlLndyaXRlX3NoaWZ0KDEsdy5kdCksZWUud3JpdGVfc2hpZnQoMSx3Lm5hbWUubGVuZ3RoKSxQLmJpZmY+PTgmJmVlLndyaXRlX3NoaWZ0KDEsMSksZWUud3JpdGVfc2hpZnQoRCp3Lm5hbWUubGVuZ3RoLHcubmFtZSxQLmJpZmY8OD8ic2JjcyI6InV0ZjE2bGUi'@;
put 'KTt2YXIgb2U9ZWUuc2xpY2UoMCxlZS5sKTtyZXR1cm4gb2UubD1lZS5sLG9lfWZ1bmN0aW9uIFByKHcpe3JldHVybiB3LnJlYWRfc2hpZnQoNCksb2Modyl9ZnVuY3Rpb24gcmEodyl7cmV0dXJuIHcucmVhZF9zaGlmdCg0KSxiMCh3KX1mdW5jdGlvbiBodSh3LFAsRCl7cmV0dXJuIHcucmVh'@;
put 'ZF9zaGlmdCg0KSxIQSh3LDAsRCl9ZnVuY3Rpb24gYTEodyxQLEQpe3ZhciBlZT0wO0QmJjI9PUQuYmlmZnx8KGVlPXcucmVhZF9zaGlmdCgyKSk7dmFyIG9lPXcucmVhZF9zaGlmdCgyKTtyZXR1cm4gRCYmMj09RC5iaWZmJiYoZWU9MS0ob2U+PjE1KSxvZSY9MzI3NjcpLFt7VW5zeW5jZWQ6'@;
put 'MSZlZSxEeVplcm86KDImZWUpPj4xLEV4QXNjOig0JmVlKT4+MixFeERzYzooOCZlZSk+PjN9LG9lXX1mdW5jdGlvbiBRcih3LFAsRCxlZSl7dmFyIG9lPUQmJjU9PUQuYmlmZjtlZXx8KGVlPXByKG9lPzMrUC5sZW5ndGg6NSsyKlAubGVuZ3RoKSksZWUud3JpdGVfc2hpZnQoMix3KSxlZS53'@;
put 'cml0ZV9zaGlmdChvZT8xOjIsUC5sZW5ndGgpLG9lfHxlZS53cml0ZV9zaGlmdCgxLDEpLGVlLndyaXRlX3NoaWZ0KChvZT8xOjIpKlAubGVuZ3RoLFAsb2U/InNiY3MiOiJ1dGYxNmxlIik7dmFyIGdlPWVlLmxlbmd0aD5lZS5sP2VlLnNsaWNlKDAsZWUubCk6ZWU7cmV0dXJuIG51bGw9PWdl'@;
put 'LmwmJihnZS5sPWdlLmxlbmd0aCksZ2V9dmFyIElhPWxoO2Z1bmN0aW9uIFV0KHcsUCxEKXt2YXIgZWU9dy5sK1Asb2U9OCE9RC5iaWZmJiZELmJpZmY/Mjo0LGdlPXcucmVhZF9zaGlmdChvZSksX2U9dy5yZWFkX3NoaWZ0KG9lKSx2ZT13LnJlYWRfc2hpZnQoMiksTWU9dy5yZWFkX3NoaWZ0'@;
put 'KDIpO3JldHVybiB3Lmw9ZWUse3M6e3I6Z2UsYzp2ZX0sZTp7cjpfZSxjOk1lfX19ZnVuY3Rpb24gZTgodyxQLEQsZWUpe3ZhciBnZT0hRHx8IUQuYmlmZnx8OD09RC5iaWZmO2VlfHwoZWU9cHIoRCYmNT09RC5iaWZmPzE2OjIwKSksZWUud3JpdGVfc2hpZnQoMixnZSYmRC5jZWxsU3R5bGVz'@;
put 'JiZ3LmZvbnRJZCYmKHcuZm9udElkPDQ/dy5mb250SWQ6dy5mb250SWQrMSl8fDApO3ZhciBfZT0xO3cucHJvdGVjdGlvbiYmKHcucHJvdGVjdGlvbi5lZGl0YWJsZSYmKF9lJj0tMiksdy5wcm90ZWN0aW9uLmhpZGRlbiYmKF9lfD0yKSksdy5zdHlsZT8oZWUud3JpdGVfc2hpZnQoMix3Lm51'@;
put 'bUZtdElkfHwwKSxlZS53cml0ZV9zaGlmdCgyLDY1NTI0fF9lKSk6KGVlLndyaXRlX3NoaWZ0KDIsdy5udW1GbXRJZHx8MCksZWUud3JpdGVfc2hpZnQoMixQPDw0fF9lKSk7dmFyIHZlPXcuYWxpZ25tZW50fHx7fTtpZihnZSl7dmFyIE1lPTAsamU9MDtNOC5pbmRleE9mKHZlLmhvcml6b250'@;
put 'YWwpPi0xJiYoTWV8PU04LmluZGV4T2YodmUuaG9yaXpvbnRhbCkpLHZlLndyYXBUZXh0JiYoTWV8PTgpLEhtLmluZGV4T2YodmUudmVydGljYWwpPi0xP01lfD1IbS5pbmRleE9mKHZlLnZlcnRpY2FsKTw8NDpudWxsPT12ZS52ZXJ0aWNhbCYmKE1lfD0zMiksZWUud3JpdGVfc2hpZnQoMSxN'@;
put 'ZSksZWUud3JpdGVfc2hpZnQoMSwwKSx2ZS5zaHJpbmtUb0ZpdCYmKGplfD0xNiksZWUud3JpdGVfc2hpZnQoMixqZSk7dmFyIFVlPW51bGw7bnVsbCE9dy5ib3JkZXJJZCYmKFVlPUQuQm9yZGVycyYmRC5Cb3JkZXJzW3cuYm9yZGVySWR8fDBdfHx7fSk7dmFyIFhlPTAsaXQ9MCxmdD0wO1Vl'@;
put 'JiYobnVsbCE9VWUubGVmdCYmVWUubGVmdC5zdHlsZSYmKFhlfD0oZnQ9cGguaW5kZXhPZihVZS5sZWZ0LnN0eWxlKSk+LTE/ZnQ6MCksbnVsbCE9VWUucmlnaHQmJlVlLnJpZ2h0LnN0eWxlJiYoWGV8PSgoZnQ9cGguaW5kZXhPZihVZS5yaWdodC5zdHlsZSkpPi0xP2Z0OjApPDw0KSxudWxs'@;
put 'IT1VZS50b3AmJlVlLnRvcC5zdHlsZSYmKGl0fD0oZnQ9cGguaW5kZXhPZihVZS50b3Auc3R5bGUpKT4tMT9mdDowKSxudWxsIT1VZS5ib3R0b20mJlVlLmJvdHRvbS5zdHlsZSYmKGl0fD0oKGZ0PXBoLmluZGV4T2YoVWUuYm90dG9tLnN0eWxlKSk+LTE/ZnQ6MCk8PDQpKSxlZS53cml0ZV9z'@;
put 'aGlmdCgxLFhlKSxlZS53cml0ZV9zaGlmdCgxLGl0KSxlZS53cml0ZV9zaGlmdCgyLDApLGVlLndyaXRlX3NoaWZ0KDIsMCksZWUud3JpdGVfc2hpZnQoMSwwKTt2YXIgTXQ9MCx1dD1ELkZpbGxzJiZELkZpbGxzW3cuZmlsbElkfHwwXXx8e307KHV0LmZnQ29sb3J8fHV0LmJnQ29sb3IpJiYo'@;
put 'TXR8PTQpLGVlLndyaXRlX3NoaWZ0KDEsTXQpO3ZhciB3dD0wO3d0fD1UcCh1dC5mZ0NvbG9yLDY1KSx3dHw9VHAodXQuYmdDb2xvciw2NSk8PDcsZWUud3JpdGVfc2hpZnQoMix3dCl9ZWxzZSBlZS53cml0ZV9zaGlmdCg0LDApLGVlLndyaXRlX3NoaWZ0KDQsMCksZWUud3JpdGVfc2hpZnQo'@;
put 'MiwwKTtyZXR1cm4gZWV9ZnVuY3Rpb24gWXUodyxQLEQpe3ZhciBlZT1qYyh3KTsoMj09RC5iaWZmfHw5PT1QKSYmKyt3Lmw7dmFyIG9lPWZ1bmN0aW9uIFc2KHcpe3ZhciBQPXcucmVhZF9zaGlmdCgxKTtyZXR1cm4gMT09PXcucmVhZF9zaGlmdCgxKT9QOjE9PT1QfSh3KTtyZXR1cm4gZWUu'@;
put 'dmFsPW9lLGVlLnQ9ITA9PT1vZXx8ITE9PT1vZT8iYiI6ImUiLGVlfXZhciBzZj1mdW5jdGlvbiBkcCh3LFAsRCl7cmV0dXJuIDA9PT1QPyIiOmxoKHcsMCxEKX07ZnVuY3Rpb24gbl8odyxQLEQpe3ZhciBvZSxlZT13LnJlYWRfc2hpZnQoMiksZ2U9e2ZCdWlsdEluOjEmZWUsZldhbnRBZHZp'@;
put 'c2U6ZWU+Pj4xJjEsZldhbnRQaWN0OmVlPj4+MiYxLGZPbGU6ZWU+Pj4zJjEsZk9sZUxpbms6ZWU+Pj40JjEsY2Y6ZWU+Pj41JjEwMjMsZkljb246ZWU+Pj4xNSYxfTtyZXR1cm4gMTQ4NDk9PT1ELnNiY2NoJiYob2U9ZnVuY3Rpb24gZngodyxQLEQpe3cubCs9NDt2YXIgZWU9dy5sKyhQLT00'@;
put 'KSxvZT1lZCh3LDAsRCksZ2U9dy5yZWFkX3NoaWZ0KDIpO2lmKGdlIT09KGVlLT13LmwpKXRocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIEFkZGluVWRmOiBwYWRkaW5nID0gIitlZSsiICE9ICIrZ2UpO3JldHVybiB3LmwrPWdlLG9lfSh3LFAtMixEKSksZ2UuYm9keT1vZXx8dy5yZWFkX3No'@;
put 'aWZ0KFAtMiksInN0cmluZyI9PXR5cGVvZiBvZSYmKGdlLk5hbWU9b2UpLGdlfXZhciBCRj1bIl94bG5tLkNvbnNvbGlkYXRlX0FyZWEiLCJfeGxubS5BdXRvX09wZW4iLCJfeGxubS5BdXRvX0Nsb3NlIiwiX3hsbm0uRXh0cmFjdCIsIl94bG5tLkRhdGFiYXNlIiwiX3hsbm0uQ3JpdGVyaWEi'@;
put 'LCJfeGxubS5QcmludF9BcmVhIiwiX3hsbm0uUHJpbnRfVGl0bGVzIiwiX3hsbm0uUmVjb3JkZXIiLCJfeGxubS5EYXRhX0Zvcm0iLCJfeGxubS5BdXRvX0FjdGl2YXRlIiwiX3hsbm0uQXV0b19EZWFjdGl2YXRlIiwiX3hsbm0uU2hlZXRfVGl0bGUiLCJfeGxubS5fRmlsdGVyRGF0YWJhc2Ui'@;
put 'XTtmdW5jdGlvbiB2eCh3LFAsRCl7dmFyIGVlPXcubCtQLG9lPXcucmVhZF9zaGlmdCgyKSxnZT13LnJlYWRfc2hpZnQoMSksX2U9dy5yZWFkX3NoaWZ0KDEpLHZlPXcucmVhZF9zaGlmdChEJiYyPT1ELmJpZmY/MToyKSxNZT0wOyghRHx8RC5iaWZmPj01KSYmKDUhPUQuYmlmZiYmKHcubCs9'@;
put 'MiksTWU9dy5yZWFkX3NoaWZ0KDIpLDU9PUQuYmlmZiYmKHcubCs9Miksdy5sKz00KTt2YXIgamU9dGQodyxfZSxEKTszMiZvZSYmKGplPUJGW2plLmNoYXJDb2RlQXQoMCldKTt2YXIgVWU9ZWUtdy5sO0QmJjI9PUQuYmlmZiYmLS1VZTt2YXIgWGU9ZWUhPXcubCYmMCE9PXZlJiZVZT4wP2Z1'@;
put 'bmN0aW9uIHo4KHcsUCxELGVlKXt2YXIgX2Usb2U9dy5sK1AsZ2U9UW0odyxlZSxEKTtyZXR1cm4gb2UhPT13LmwmJihfZT1ScCh3LG9lLXcubCxnZSxEKSksW2dlLF9lXX0odyxVZSxELHZlKTpbXTtyZXR1cm57Y2hLZXk6Z2UsTmFtZTpqZSxpdGFiOk1lLHJnY2U6WGV9fWZ1bmN0aW9uIHQ4'@;
put 'KHcsUCxEKXtpZihELmJpZmY8OClyZXR1cm4gZnVuY3Rpb24gcl8odyxQLEQpezM9PXdbdy5sKzFdJiZ3W3cubF0rKzt2YXIgZWU9ZWQodywwLEQpO3JldHVybiAzPT1lZS5jaGFyQ29kZUF0KDApP2VlLnNsaWNlKDEpOmVlfSh3LDAsRCk7Zm9yKHZhciBlZT1bXSxvZT13LmwrUCxnZT13LnJl'@;
put 'YWRfc2hpZnQoRC5iaWZmPjg/NDoyKTswIT1nZS0tOyllZS5wdXNoKHFiKHcsMCxEKSk7aWYody5sIT1vZSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBFeHRlcm5TaGVldDogIit3LmwrIiAhPSAiK29lKTtyZXR1cm4gZWV9ZnVuY3Rpb24gYngodyxQLEQpe3ZhciBlZT1ibCh3LDYpO3N3aXRjaChE'@;
put 'LmJpZmYpe2Nhc2UgMjp3LmwrKyxQLT03O2JyZWFrO2Nhc2UgMzpjYXNlIDQ6dy5sKz0yLFAtPTg7YnJlYWs7ZGVmYXVsdDp3LmwrPTYsUC09MTJ9cmV0dXJuW2VlLEtfKHcsUCxEKV19dmFyIG44PVtdO2Z1bmN0aW9uIF8yKHcpe3ZhciBQPXByKDI0KSxEPWNhKHdbMF0pO1Aud3JpdGVfc2hp'@;
put 'ZnQoMixELnIpLFAud3JpdGVfc2hpZnQoMixELnIpLFAud3JpdGVfc2hpZnQoMixELmMpLFAud3JpdGVfc2hpZnQoMixELmMpO2Zvcih2YXIgZWU9ImQwIGM5IGVhIDc5IGY5IGJhIGNlIDExIDhjIDgyIDAwIGFhIDAwIDRiIGE5IDBiIi5zcGxpdCgiICIpLG9lPTA7b2U8MTY7KytvZSlQLndy'@;
put 'aXRlX3NoaWZ0KDEscGFyc2VJbnQoZWVbb2VdLDE2KSk7cmV0dXJuIE0oW1AsZnAod1sxXSldKX1mdW5jdGlvbiBVRih3KXt2YXIgUD13WzFdLlRvb2x0aXAsRD1wcigxMCsyKihQLmxlbmd0aCsxKSk7RC53cml0ZV9zaGlmdCgyLDIwNDgpO3ZhciBlZT1jYSh3WzBdKTtELndyaXRlX3NoaWZ0'@;
put 'KDIsZWUuciksRC53cml0ZV9zaGlmdCgyLGVlLnIpLEQud3JpdGVfc2hpZnQoMixlZS5jKSxELndyaXRlX3NoaWZ0KDIsZWUuYyk7Zm9yKHZhciBvZT0wO29lPFAubGVuZ3RoOysrb2UpRC53cml0ZV9zaGlmdCgyLFAuY2hhckNvZGVBdChvZSkpO3JldHVybiBELndyaXRlX3NoaWZ0KDIsMCks'@;
put 'RH1mdW5jdGlvbiByZCh3LFAsRCl7aWYoIUQuY2VsbFN0eWxlcylyZXR1cm4geHUodyxQKTt2YXIgZWU9RCYmRC5iaWZmPj0xMj80OjIsb2U9dy5yZWFkX3NoaWZ0KGVlKSxnZT13LnJlYWRfc2hpZnQoZWUpLF9lPXcucmVhZF9zaGlmdChlZSksdmU9dy5yZWFkX3NoaWZ0KGVlKSxNZT13LnJl'@;
put 'YWRfc2hpZnQoMik7Mj09ZWUmJih3LmwrPTIpO3ZhciBqZT17czpvZSxlOmdlLHc6X2UsaXhmZTp2ZSxmbGFnczpNZX07cmV0dXJuKEQuYmlmZj49NXx8IUQuYmlmZikmJihqZS5sZXZlbD1NZT4+OCY3KSxqZX1uOFs4XT1mdW5jdGlvbih3LFApe3ZhciBEPXcubCtQO3cubCs9MTA7dmFyIGVl'@;
put 'PXcucmVhZF9zaGlmdCgyKTt3LmwrPTQsdy5sKz0yLHcubCs9Mix3LmwrPTIsdy5sKz00O3ZhciBvZT13LnJlYWRfc2hpZnQoMSk7cmV0dXJuIHcubCs9b2Usdy5sPUQse2ZtdDplZX19O3ZhciB4eD1qYyxBeD1hZiwkRj1haDt2YXIgc2g9ZnVuY3Rpb24oKXt2YXIgdz17MTo0MzcsMjo4NTAs'@;
put 'MzoxMjUyLDQ6MWU0LDEwMDo4NTIsMTAxOjg2NiwxMDI6ODY1LDEwMzo4NjEsMTA0Ojg5NSwxMDU6NjIwLDEwNjo3MzcsMTA3Ojg1NywxMjA6OTUwLDEyMTo5NDksMTIyOjkzNiwxMjM6OTMyLDEyNDo4NzQsMTI1OjEyNTUsMTI2OjEyNTYsMTUwOjEwMDA3LDE1MToxMDAyOSwxNTI6MTAwMDYs'@;
put 'MjAwOjEyNTAsMjAxOjEyNTEsMjAyOjEyNTQsMjAzOjEyNTMsMDoyMDEyNyw4Ojg2NSw5OjQzNywxMDo4NTAsMTE6NDM3LDEzOjQzNywxNDo4NTAsMTU6NDM3LDE2Ojg1MCwxNzo0MzcsMTg6ODUwLDE5OjkzMiwyMDo4NTAsMjE6NDM3LDIyOjg1MCwyMzo4NjUsMjQ6NDM3LDI1OjQzNywyNjo4'@;
put 'NTAsMjc6NDM3LDI4Ojg2MywyOTo4NTAsMzE6ODUyLDM0Ojg1MiwzNTo4NTIsMzY6ODYwLDM3Ojg1MCwzODo4NjYsNTU6ODUwLDY0Ojg1Miw3Nzo5MzYsNzg6OTQ5LDc5Ojk1MCw4MDo4NzQsODc6MTI1Miw4ODoxMjUyLDg5OjEyNTIsMTA4Ojg2MywxMzQ6NzM3LDEzNTo4NTIsMTM2Ojg1Nywy'@;
put 'MDQ6MTI1NywyNTU6MTY5Njl9LFA9d2UoezE6NDM3LDI6ODUwLDM6MTI1Miw0OjFlNCwxMDA6ODUyLDEwMTo4NjYsMTAyOjg2NSwxMDM6ODYxLDEwNDo4OTUsMTA1OjYyMCwxMDY6NzM3LDEwNzo4NTcsMTIwOjk1MCwxMjE6OTQ5LDEyMjo5MzYsMTIzOjkzMiwxMjQ6ODc0LDEyNToxMjU1LDEy'@;
put 'NjoxMjU2LDE1MDoxMDAwNywxNTE6MTAwMjksMTUyOjEwMDA2LDIwMDoxMjUwLDIwMToxMjUxLDIwMjoxMjU0LDIwMzoxMjUzLDA6MjAxMjd9KTtmdW5jdGlvbiBvZShNZSxqZSl7dmFyIFVlPWplfHx7fTtyZXR1cm4gVWUuZGF0ZU5GfHwoVWUuZGF0ZU5GPSJ5eXl5bW1kZCIpLCQxKGZ1bmN0'@;
put 'aW9uIGVlKE1lLGplKXt2YXIgVWU9W10sWGU9WSgxKTtzd2l0Y2goamUudHlwZSl7Y2FzZSJiYXNlNjQiOlhlPXgobGUuZGVjb2RlKE1lKSk7YnJlYWs7Y2FzZSJiaW5hcnkiOlhlPXgoTWUpO2JyZWFrO2Nhc2UiYnVmZmVyIjpjYXNlImFycmF5IjpYZT1NZX1zcyhYZSwwKTt2YXIgaXQ9WGUu'@;
put 'cmVhZF9zaGlmdCgxKSxmdD0hISgxMzYmaXQpLE10PSExLHV0PSExO3N3aXRjaChpdCl7Y2FzZSAyOmNhc2UgMzpjYXNlIDEzMTpjYXNlIDEzOTpjYXNlIDI0NTpicmVhaztjYXNlIDQ4OmNhc2UgNDk6TXQ9ITAsZnQ9ITA7YnJlYWs7Y2FzZSAxNDA6dXQ9ITA7YnJlYWs7ZGVmYXVsdDp0aHJv'@;
put 'dyBuZXcgRXJyb3IoIkRCRiBVbnN1cHBvcnRlZCBWZXJzaW9uOiAiK2l0LnRvU3RyaW5nKDE2KSl9dmFyIHd0PTAsSHQ9NTIxOzI9PWl0JiYod3Q9WGUucmVhZF9zaGlmdCgyKSksWGUubCs9MywyIT1pdCYmKHd0PVhlLnJlYWRfc2hpZnQoNCkpLHd0PjEwNDg1NzYmJih3dD0xZTYpLDIhPWl0'@;
put 'JiYoSHQ9WGUucmVhZF9zaGlmdCgyKSk7dmFyIGt0PVhlLnJlYWRfc2hpZnQoMiksVHQ9amUuY29kZXBhZ2V8fDEyNTI7MiE9aXQmJihYZS5sKz0xNixYZS5yZWFkX3NoaWZ0KDEpLDAhPT1YZVtYZS5sXSYmKFR0PXdbWGVbWGUubF1dKSxYZS5sKz0xLFhlLmwrPTIpLHV0JiYoWGUubCs9MzYp'@;
put 'O2Zvcih2YXIgWXQ9W10sZ249e30scW49TWF0aC5taW4oWGUubGVuZ3RoLDI9PWl0PzUyMTpIdC0xMC0oTXQ/MjY0OjApKSxmbj11dD8zMjoxMTtYZS5sPHFuJiYxMyE9WGVbWGUubF07KXN3aXRjaChnbj17fSxnbi5uYW1lPWNwdGFibGUudXRpbHMuZGVjb2RlKFR0LFhlLnNsaWNlKFhlLmws'@;
put 'WGUubCtmbikpLnJlcGxhY2UoL1tcdTAwMDBcclxuXS4qJC9nLCIiKSxYZS5sKz1mbixnbi50eXBlPVN0cmluZy5mcm9tQ2hhckNvZGUoWGUucmVhZF9zaGlmdCgxKSksMiE9aXQmJiF1dCYmKGduLm9mZnNldD1YZS5yZWFkX3NoaWZ0KDQpKSxnbi5sZW49WGUucmVhZF9zaGlmdCgxKSwyPT1p'@;
put 'dCYmKGduLm9mZnNldD1YZS5yZWFkX3NoaWZ0KDIpKSxnbi5kZWM9WGUucmVhZF9zaGlmdCgxKSxnbi5uYW1lLmxlbmd0aCYmWXQucHVzaChnbiksMiE9aXQmJihYZS5sKz11dD8xMzoxNCksZ24udHlwZSl7Y2FzZSJCIjooIU10fHw4IT1nbi5sZW4pJiZqZS5XVEYmJmNvbnNvbGUubG9nKCJT'@;
put 'a2lwcGluZyAiK2duLm5hbWUrIjoiK2duLnR5cGUpO2JyZWFrO2Nhc2UiRyI6Y2FzZSJQIjpqZS5XVEYmJmNvbnNvbGUubG9nKCJTa2lwcGluZyAiK2duLm5hbWUrIjoiK2duLnR5cGUpO2JyZWFrO2Nhc2UiKyI6Y2FzZSIwIjpjYXNlIkAiOmNhc2UiQyI6Y2FzZSJEIjpjYXNlIkYiOmNhc2Ui'@;
put 'SSI6Y2FzZSJMIjpjYXNlIk0iOmNhc2UiTiI6Y2FzZSJPIjpjYXNlIlQiOmNhc2UiWSI6YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gRmllbGQgVHlwZTogIitnbi50eXBlKX1pZigxMyE9PVhlW1hlLmxdJiYoWGUubD1IdC0xKSwxMyE9PVhlLnJlYWRfc2hpZnQoMSkp'@;
put 'dGhyb3cgbmV3IEVycm9yKCJEQkYgVGVybWluYXRvciBub3QgZm91bmQgIitYZS5sKyIgIitYZVtYZS5sXSk7WGUubD1IdDt2YXIgS249MCx6bj0wO2ZvcihVZVswXT1bXSx6bj0wO3puIT1ZdC5sZW5ndGg7Kyt6bilVZVswXVt6bl09WXRbem5dLm5hbWU7Zm9yKDt3dC0tID4wOylpZig0MiE9'@;
put 'PVhlW1hlLmxdKWZvcigrK1hlLmwsVWVbKytLbl09W10sem49MCx6bj0wO3puIT1ZdC5sZW5ndGg7Kyt6bil7dmFyIE9uPVhlLnNsaWNlKFhlLmwsWGUubCtZdFt6bl0ubGVuKTtYZS5sKz1ZdFt6bl0ubGVuLHNzKE9uLDApO3ZhciBlcj1jcHRhYmxlLnV0aWxzLmRlY29kZShUdCxPbik7c3dp'@;
put 'dGNoKFl0W3puXS50eXBlKXtjYXNlIkMiOmVyLnRyaW0oKS5sZW5ndGgmJihVZVtLbl1bem5dPWVyLnJlcGxhY2UoL1xzKyQvLCIiKSk7YnJlYWs7Y2FzZSJEIjpVZVtLbl1bem5dPTg9PT1lci5sZW5ndGg/bmV3IERhdGUoK2VyLnNsaWNlKDAsNCksK2VyLnNsaWNlKDQsNiktMSwrZXIuc2xp'@;
put 'Y2UoNiw4KSk6ZXI7YnJlYWs7Y2FzZSJGIjpVZVtLbl1bem5dPXBhcnNlRmxvYXQoZXIudHJpbSgpKTticmVhaztjYXNlIisiOmNhc2UiSSI6VWVbS25dW3puXT11dD8yMTQ3NDgzNjQ4Xk9uLnJlYWRfc2hpZnQoLTQsImkiKTpPbi5yZWFkX3NoaWZ0KDQsImkiKTticmVhaztjYXNlIkwiOnN3'@;
put 'aXRjaChlci50cmltKCkudG9VcHBlckNhc2UoKSl7Y2FzZSJZIjpjYXNlIlQiOlVlW0tuXVt6bl09ITA7YnJlYWs7Y2FzZSJOIjpjYXNlIkYiOlVlW0tuXVt6bl09ITE7YnJlYWs7Y2FzZSIiOmNhc2UiPyI6YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkRCRiBVbnJlY29nbml6ZWQg'@;
put 'TDp8IitlcisifCIpfWJyZWFrO2Nhc2UiTSI6aWYoIWZ0KXRocm93IG5ldyBFcnJvcigiREJGIFVuZXhwZWN0ZWQgTUVNTyBmb3IgdHlwZSAiK2l0LnRvU3RyaW5nKDE2KSk7VWVbS25dW3puXT0iIyNNRU1PIyMiKyh1dD9wYXJzZUludChlci50cmltKCksMTApOk9uLnJlYWRfc2hpZnQoNCkp'@;
put 'O2JyZWFrO2Nhc2UiTiI6KGVyPWVyLnJlcGxhY2UoL1x1MDAwMC9nLCIiKS50cmltKCkpJiYiLiIhPWVyJiYoVWVbS25dW3puXT0rZXJ8fDApO2JyZWFrO2Nhc2UiQCI6VWVbS25dW3puXT1uZXcgRGF0ZShPbi5yZWFkX3NoaWZ0KC04LCJmIiktNjIxMzU2ODMyZTUpO2JyZWFrO2Nhc2UiVCI6'@;
put 'VWVbS25dW3puXT1uZXcgRGF0ZSg4NjRlNSooT24ucmVhZF9zaGlmdCg0KS0yNDQwNTg4KStPbi5yZWFkX3NoaWZ0KDQpKTticmVhaztjYXNlIlkiOlVlW0tuXVt6bl09T24ucmVhZF9zaGlmdCg0LCJpIikvMWU0O2JyZWFrO2Nhc2UiTyI6VWVbS25dW3puXT0tT24ucmVhZF9zaGlmdCgtOCwi'@;
put 'ZiIpO2JyZWFrO2Nhc2UiQiI6aWYoTXQmJjg9PVl0W3puXS5sZW4pe1VlW0tuXVt6bl09T24ucmVhZF9zaGlmdCg4LCJmIik7YnJlYWt9Y2FzZSJHIjpjYXNlIlAiOk9uLmwrPVl0W3puXS5sZW47YnJlYWs7Y2FzZSIwIjppZigiX051bGxGbGFncyI9PT1ZdFt6bl0ubmFtZSlicmVhaztkZWZh'@;
put 'dWx0OnRocm93IG5ldyBFcnJvcigiREJGIFVuc3VwcG9ydGVkIGRhdGEgdHlwZSAiK1l0W3puXS50eXBlKX19ZWxzZSBYZS5sKz1rdDtpZigyIT1pdCYmWGUubDxYZS5sZW5ndGgmJjI2IT1YZVtYZS5sKytdKXRocm93IG5ldyBFcnJvcigiREJGIEVPRiBNYXJrZXIgbWlzc2luZyAiKyhYZS5s'@;
put 'LTEpKyIgb2YgIitYZS5sZW5ndGgrIiAiK1hlW1hlLmwtMV0udG9TdHJpbmcoMTYpKTtyZXR1cm4gamUmJmplLnNoZWV0Um93cyYmKFVlPVVlLnNsaWNlKDAsamUuc2hlZXRSb3dzKSksVWV9KE1lLFVlKSxVZSl9dmFyIF9lPXtCOjgsQzoyNTAsTDoxLEQ6OCwiPyI6MCwiIjowfTtyZXR1cm57'@;
put 'dmVyc2lvbnM6WzIsMyw0OCw0OSwxMzEsMTM5LDE0MCwyNDVdLHRvX3dvcmtib29rOmZ1bmN0aW9uIGdlKE1lLGplKXt0cnl7cmV0dXJuIFpmKG9lKE1lLGplKSxqZSl9Y2F0Y2goVWUpe2lmKGplJiZqZS5XVEYpdGhyb3cgVWV9cmV0dXJue1NoZWV0TmFtZXM6W10sU2hlZXRzOnt9fX0sdG9f'@;
put 'c2hlZXQ6b2UsZnJvbV9zaGVldDpmdW5jdGlvbiB2ZShNZSxqZSl7dmFyIFVlPWplfHx7fTtpZigrVWUuY29kZXBhZ2U+PTAmJnooK1VlLmNvZGVwYWdlKSwic3RyaW5nIj09VWUudHlwZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCB3cml0ZSBEQkYgdG8gSlMgc3RyaW5nIik7dmFyIFhlPUF1'@;
put 'KCksaXQ9cHYoTWUse2hlYWRlcjoxLHJhdzohMCxjZWxsRGF0ZXM6ITB9KSxmdD1pdFswXSxNdD1pdC5zbGljZSgxKSx1dD0wLHd0PTAsSHQ9MCxrdD0xO2Zvcih1dD0wO3V0PGZ0Lmxlbmd0aDsrK3V0KWlmKG51bGwhPXV0KXtpZigrK0h0LCJudW1iZXIiPT10eXBlb2YgZnRbdXRdJiYoZnRb'@;
put 'dXRdPWZ0W3V0XS50b1N0cmluZygxMCkpLCJzdHJpbmciIT10eXBlb2YgZnRbdXRdKXRocm93IG5ldyBFcnJvcigiREJGIEludmFsaWQgY29sdW1uIG5hbWUgIitmdFt1dF0rIiB8Iit0eXBlb2YgZnRbdXRdKyJ8Iik7aWYoZnQuaW5kZXhPZihmdFt1dF0pIT09dXQpZm9yKHd0PTA7d3Q8MTAy'@;
put 'NDsrK3d0KWlmKC0xPT1mdC5pbmRleE9mKGZ0W3V0XSsiXyIrd3QpKXtmdFt1dF0rPSJfIit3dDticmVha319dmFyIFR0PVBpKE1lWyIhcmVmIl0pLFl0PVtdO2Zvcih1dD0wO3V0PD1UdC5lLmMtVHQucy5jOysrdXQpe3ZhciBnbj1bXTtmb3Iod3Q9MDt3dDxNdC5sZW5ndGg7Kyt3dCludWxs'@;
put 'IT1NdFt3dF1bdXRdJiZnbi5wdXNoKE10W3d0XVt1dF0pO2lmKDAhPWduLmxlbmd0aCYmbnVsbCE9ZnRbdXRdKXt2YXIgcW49IiIsZm49IiI7Zm9yKHd0PTA7d3Q8Z24ubGVuZ3RoOysrd3Qpe3N3aXRjaCh0eXBlb2YgZ25bd3RdKXtjYXNlIm51bWJlciI6Zm49IkIiO2JyZWFrO2Nhc2Uic3Ry'@;
put 'aW5nIjpkZWZhdWx0OmZuPSJDIjticmVhaztjYXNlImJvb2xlYW4iOmZuPSJMIjticmVhaztjYXNlIm9iamVjdCI6Zm49Z25bd3RdaW5zdGFuY2VvZiBEYXRlPyJEIjoiQyJ9aWYoIkMiPT0ocW49cW4mJnFuIT1mbj8iQyI6Zm4pKWJyZWFrfWt0Kz1fZVtxbl18fDAsWXRbdXRdPXFufWVsc2Ug'@;
put 'WXRbdXRdPSI/In12YXIgS249WGUubmV4dCgzMik7Zm9yKEtuLndyaXRlX3NoaWZ0KDQsMzE4OTAyNTc2KSxLbi53cml0ZV9zaGlmdCg0LE10Lmxlbmd0aCksS24ud3JpdGVfc2hpZnQoMiwyOTYrMzIqSHQpLEtuLndyaXRlX3NoaWZ0KDIsa3QpLHV0PTA7dXQ8NDsrK3V0KUtuLndyaXRlX3No'@;
put 'aWZ0KDQsMCk7Zm9yKEtuLndyaXRlX3NoaWZ0KDQsMHwoK1BbTF18fDMpPDw4KSx1dD0wLHd0PTA7dXQ8ZnQubGVuZ3RoOysrdXQpaWYobnVsbCE9ZnRbdXRdKXt2YXIgem49WGUubmV4dCgzMiksT249KGZ0W3V0XS5zbGljZSgtMTApKyJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIikuc2xpY2Uo'@;
put 'MCwxMSk7em4ud3JpdGVfc2hpZnQoMSxPbiwic2JjcyIpLHpuLndyaXRlX3NoaWZ0KDEsIj8iPT1ZdFt1dF0/IkMiOll0W3V0XSwic2JjcyIpLHpuLndyaXRlX3NoaWZ0KDQsd3QpLHpuLndyaXRlX3NoaWZ0KDEsX2VbWXRbdXRdXXx8MCksem4ud3JpdGVfc2hpZnQoMSwwKSx6bi53cml0ZV9z'@;
put 'aGlmdCgxLDIpLHpuLndyaXRlX3NoaWZ0KDQsMCksem4ud3JpdGVfc2hpZnQoMSwwKSx6bi53cml0ZV9zaGlmdCg0LDApLHpuLndyaXRlX3NoaWZ0KDQsMCksd3QrPV9lW1l0W3V0XV18fDB9dmFyIGVyPVhlLm5leHQoMjY0KTtmb3IoZXIud3JpdGVfc2hpZnQoNCwxMyksdXQ9MDt1dDw2NTsr'@;
put 'K3V0KWVyLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKHV0PTA7dXQ8TXQubGVuZ3RoOysrdXQpe3ZhciB0cj1YZS5uZXh0KGt0KTtmb3IodHIud3JpdGVfc2hpZnQoMSwwKSx3dD0wO3d0PGZ0Lmxlbmd0aDsrK3d0KWlmKG51bGwhPWZ0W3d0XSlzd2l0Y2goWXRbd3RdKXtjYXNlIkwiOnRyLndyaXRl'@;
put 'X3NoaWZ0KDEsbnVsbD09TXRbdXRdW3d0XT82MzpNdFt1dF1bd3RdPzg0OjcwKTticmVhaztjYXNlIkIiOnRyLndyaXRlX3NoaWZ0KDgsTXRbdXRdW3d0XXx8MCwiZiIpO2JyZWFrO2Nhc2UiRCI6TXRbdXRdW3d0XT8odHIud3JpdGVfc2hpZnQoNCwoIjAwMDAiK010W3V0XVt3dF0uZ2V0RnVs'@;
put 'bFllYXIoKSkuc2xpY2UoLTQpLCJzYmNzIiksdHIud3JpdGVfc2hpZnQoMiwoIjAwIisoTXRbdXRdW3d0XS5nZXRNb250aCgpKzEpKS5zbGljZSgtMiksInNiY3MiKSx0ci53cml0ZV9zaGlmdCgyLCgiMDAiK010W3V0XVt3dF0uZ2V0RGF0ZSgpKS5zbGljZSgtMiksInNiY3MiKSk6dHIud3Jp'@;
put 'dGVfc2hpZnQoOCwiMDAwMDAwMDAiLCJzYmNzIik7YnJlYWs7Y2FzZSJDIjp2YXIgWW49U3RyaW5nKE10W3V0XVt3dF18fCIiKTtmb3IodHIud3JpdGVfc2hpZnQoMSxZbiwic2JjcyIpLEh0PTA7SHQ8MjUwLVluLmxlbmd0aDsrK0h0KXRyLndyaXRlX3NoaWZ0KDEsMzIpfX1yZXR1cm4gWGUu'@;
put 'bmV4dCgxKS53cml0ZV9zaGlmdCgxLDI2KSxYZS5lbmQoKX19fSgpLHNfPWZ1bmN0aW9uKCl7dmFyIHc9e0FBOiJceGMwIixCQToiXHhjMSIsQ0E6Ilx4YzIiLERBOjE5NSxIQToiXHhjNCIsSkE6MTk3LEFFOiJceGM4IixCRToiXHhjOSIsQ0U6Ilx4Y2EiLEhFOiJceGNiIixBSToiXHhjYyIs'@;
put 'Qkk6Ilx4Y2QiLENJOiJceGNlIixISToiXHhjZiIsQU86Ilx4ZDIiLEJPOiJceGQzIixDTzoiXHhkNCIsRE86MjEzLEhPOiJceGQ2IixBVToiXHhkOSIsQlU6Ilx4ZGEiLENVOiJceGRiIixIVToiXHhkYyIsQWE6Ilx4ZTAiLEJhOiJceGUxIixDYToiXHhlMiIsRGE6MjI3LEhhOiJceGU0IixK'@;
put 'YToyMjksQWU6Ilx4ZTgiLEJlOiJceGU5IixDZToiXHhlYSIsSGU6Ilx4ZWIiLEFpOiJceGVjIixCaToiXHhlZCIsQ2k6Ilx4ZWUiLEhpOiJceGVmIixBbzoiXHhmMiIsQm86Ilx4ZjMiLENvOiJceGY0IixEbzoyNDUsSG86Ilx4ZjYiLEF1OiJceGY5IixCdToiXHhmYSIsQ3U6Ilx4ZmIiLEh1'@;
put 'OiJceGZjIixLQzoiXHhjNyIsS2M6Ilx4ZTciLHE6Ilx4ZTYiLHo6Ilx1MDE1MyIsYToiXHhjNiIsajoiXHUwMTUyIixETjoyMDksRG46MjQxLEh5OjI1NSxTOjE2OSxjOjE3MCxSOjE3NCwiQiAiOjE4MCwwOjE3NiwxOjE3NywyOjE3OCwzOjE3OSw1OjE4MSw2OjE4Miw3OjE4MyxROjE4NSxr'@;
put 'OjE4NixiOjIwOCxpOjIxNixsOjIyMixzOjI0MCx5OjI0OCwiISI6MTYxLCciJzoxNjIsIiMiOjE2MywiKCI6MTY0LCIlIjoxNjUsIiciOjE2NywiSCAiOjE2OCwiKyI6MTcxLCI7IjoxODcsIjwiOjE4OCwiPSI6MTg5LCI+IjoxOTAsIj8iOjE5MSwieyI6MjIzfSxQPW5ldyBSZWdFeHAoIlx4'@;
put 'MWJOKCIrbXQodykuam9pbigifCIpLnJlcGxhY2UoL1x8XHxcfC8sInxcXHx8IikucmVwbGFjZSgvKFs/KCkrXSkvZywiXFwkMSIpKyJ8XFx8KSIsImdtIiksRD1mdW5jdGlvbihpdCxmdCl7dmFyIE10PXdbZnRdO3JldHVybiJudW1iZXIiPT10eXBlb2YgTXQ/dGUoTXQpOk10fSxlZT1mdW5j'@;
put 'dGlvbihpdCxmdCxNdCl7dmFyIHV0PWZ0LmNoYXJDb2RlQXQoMCktMzI8PDR8TXQuY2hhckNvZGVBdCgwKS00ODtyZXR1cm4gNTk9PXV0P2l0OnRlKHV0KX07ZnVuY3Rpb24gZ2UoaXQsZnQpe3ZhciBlcixNdD1pdC5zcGxpdCgvW1xuXHJdKy8pLHV0PS0xLHd0PS0xLEh0PTAsa3Q9MCxUdD1b'@;
put 'XSxZdD1bXSxnbj1udWxsLHFuPXt9LGZuPVtdLEtuPVtdLHpuPVtdLE9uPTA7Zm9yKCtmdC5jb2RlcGFnZT49MCYmeigrZnQuY29kZXBhZ2UpO0h0IT09TXQubGVuZ3RoOysrSHQpe09uPTA7dmFyIGxpLHRyPU10W0h0XS50cmltKCkucmVwbGFjZSgvXHgxQihbXHgyMC1ceDJGXSkoW1x4MzAt'@;
put 'XHgzRl0pL2csZWUpLnJlcGxhY2UoUCxEKSxZbj10ci5yZXBsYWNlKC87Oy9nLCJcMCIpLnNwbGl0KCI7IikubWFwKGZ1bmN0aW9uKENpKXtyZXR1cm4gQ2kucmVwbGFjZSgvXHUwMDAwL2csIjsiKX0pO2lmKHRyLmxlbmd0aD4wKXN3aXRjaChZblswXSl7Y2FzZSJJRCI6Y2FzZSJFIjpjYXNl'@;
put 'IkIiOmNhc2UiTyI6Y2FzZSJXIjpicmVhaztjYXNlIlAiOiJQIj09WW5bMV0uY2hhckF0KDApJiZZdC5wdXNoKHRyLnNsaWNlKDMpLnJlcGxhY2UoLzs7L2csIjsiKSk7YnJlYWs7Y2FzZSJDIjp2YXIgRWk9ITEsSWk9ITEsdGk9ITEsZnI9ITEsRG49LTEsdnI9LTE7Zm9yKGt0PTE7a3Q8WW4u'@;
put 'bGVuZ3RoOysra3Qpc3dpdGNoKFluW2t0XS5jaGFyQXQoMCkpe2Nhc2UiQSI6Y2FzZSJHIjpicmVhaztjYXNlIlgiOnd0PXBhcnNlSW50KFluW2t0XS5zbGljZSgxKSktMSxJaT0hMDticmVhaztjYXNlIlkiOmZvcih1dD1wYXJzZUludChZbltrdF0uc2xpY2UoMSkpLTEsSWl8fCh3dD0wKSxl'@;
put 'cj1UdC5sZW5ndGg7ZXI8PXV0OysrZXIpVHRbZXJdPVtdO2JyZWFrO2Nhc2UiSyI6JyInPT09KGxpPVluW2t0XS5zbGljZSgxKSkuY2hhckF0KDApP2xpPWxpLnNsaWNlKDEsbGkubGVuZ3RoLTEpOiJUUlVFIj09PWxpP2xpPSEwOiJGQUxTRSI9PT1saT9saT0hMTppc05hTihHbihsaSkpP2lz'@;
put 'TmFOKG9uKGxpKS5nZXREYXRlKCkpfHwobGk9UHQobGkpKToobGk9R24obGkpLG51bGwhPT1nbiYmUy5pc19kYXRlKGduKSYmKGxpPWh0KGxpKSkpLHR5cGVvZiBjcHRhYmxlPCJ1IiYmInN0cmluZyI9PXR5cGVvZiBsaSYmInN0cmluZyIhPShmdHx8e30pLnR5cGUmJihmdHx8e30pLmNvZGVw'@;
put 'YWdlJiYobGk9Y3B0YWJsZS51dGlscy5kZWNvZGUoZnQuY29kZXBhZ2UsbGkpKSxFaT0hMDticmVhaztjYXNlIkUiOmZyPSEwO3ZhciBycj1BMihZbltrdF0uc2xpY2UoMSkse3I6dXQsYzp3dH0pO1R0W3V0XVt3dF09W1R0W3V0XVt3dF0scnJdO2JyZWFrO2Nhc2UiUyI6dGk9ITAsVHRbdXRd'@;
put 'W3d0XT1bVHRbdXRdW3d0XSwiUzVTIl07YnJlYWs7Y2FzZSJSIjpEbj1wYXJzZUludChZbltrdF0uc2xpY2UoMSkpLTE7YnJlYWs7Y2FzZSJDIjp2cj1wYXJzZUludChZbltrdF0uc2xpY2UoMSkpLTE7YnJlYWs7ZGVmYXVsdDppZihmdCYmZnQuV1RGKXRocm93IG5ldyBFcnJvcigiU1lMSyBi'@;
put 'YWQgcmVjb3JkICIrdHIpfWlmKEVpJiYoVHRbdXRdW3d0XSYmMj09VHRbdXRdW3d0XS5sZW5ndGg/VHRbdXRdW3d0XVswXT1saTpUdFt1dF1bd3RdPWxpLGduPW51bGwpLHRpKXtpZihmcil0aHJvdyBuZXcgRXJyb3IoIlNZTEsgc2hhcmVkIGZvcm11bGEgY2Fubm90IGhhdmUgb3duIGZvcm11'@;
put 'bGEiKTt2YXIgeG49RG4+LTEmJlR0W0RuXVt2cl07aWYoIXhufHwheG5bMV0pdGhyb3cgbmV3IEVycm9yKCJTWUxLIHNoYXJlZCBmb3JtdWxhIGNhbm5vdCBmaW5kIGJhc2UiKTtUdFt1dF1bd3RdWzFdPWJBKHhuWzFdLHtyOnV0LURuLGM6d3QtdnJ9KX1icmVhaztjYXNlIkYiOnZhciBtcj0w'@;
put 'O2ZvcihrdD0xO2t0PFluLmxlbmd0aDsrK2t0KXN3aXRjaChZbltrdF0uY2hhckF0KDApKXtjYXNlIlgiOnd0PXBhcnNlSW50KFluW2t0XS5zbGljZSgxKSktMSwrK21yO2JyZWFrO2Nhc2UiWSI6Zm9yKHV0PXBhcnNlSW50KFluW2t0XS5zbGljZSgxKSktMSxlcj1UdC5sZW5ndGg7ZXI8PXV0'@;
put 'OysrZXIpVHRbZXJdPVtdO2JyZWFrO2Nhc2UiTSI6T249cGFyc2VJbnQoWW5ba3RdLnNsaWNlKDEpKS8yMDticmVhaztjYXNlIkYiOmNhc2UiRyI6Y2FzZSJTIjpjYXNlIkQiOmNhc2UiTiI6YnJlYWs7Y2FzZSJQIjpnbj1ZdFtwYXJzZUludChZbltrdF0uc2xpY2UoMSkpXTticmVhaztjYXNl'@;
put 'IlciOmZvcih6bj1ZbltrdF0uc2xpY2UoMSkuc3BsaXQoIiAiKSxlcj1wYXJzZUludCh6blswXSwxMCk7ZXI8PXBhcnNlSW50KHpuWzFdLDEwKTsrK2VyKU9uPXBhcnNlSW50KHpuWzJdLDEwKSxLbltlci0xXT0wPT09T24/e2hpZGRlbjohMH06e3djaDpPbn0sX2MoS25bZXItMV0pO2JyZWFr'@;
put 'O2Nhc2UiQyI6S25bd3Q9cGFyc2VJbnQoWW5ba3RdLnNsaWNlKDEpKS0xXXx8KEtuW3d0XT17fSk7YnJlYWs7Y2FzZSJSIjpmblt1dD1wYXJzZUludChZbltrdF0uc2xpY2UoMSkpLTFdfHwoZm5bdXRdPXt9KSxPbj4wPyhmblt1dF0uaHB0PU9uLGZuW3V0XS5ocHg9ZGYoT24pKTowPT09T24m'@;
put 'Jihmblt1dF0uaGlkZGVuPSEwKTticmVhaztkZWZhdWx0OmlmKGZ0JiZmdC5XVEYpdGhyb3cgbmV3IEVycm9yKCJTWUxLIGJhZCByZWNvcmQgIit0cil9bXI8MSYmKGduPW51bGwpO2JyZWFrO2RlZmF1bHQ6aWYoZnQmJmZ0LldURil0aHJvdyBuZXcgRXJyb3IoIlNZTEsgYmFkIHJlY29yZCAi'@;
put 'K3RyKX19cmV0dXJuIGZuLmxlbmd0aD4wJiYocW5bIiFyb3dzIl09Zm4pLEtuLmxlbmd0aD4wJiYocW5bIiFjb2xzIl09S24pLGZ0JiZmdC5zaGVldFJvd3MmJihUdD1UdC5zbGljZSgwLGZ0LnNoZWV0Um93cykpLFtUdCxxbl19ZnVuY3Rpb24gX2UoaXQsZnQpe3ZhciBNdD1mdW5jdGlvbiBv'@;
put 'ZShpdCxmdCl7c3dpdGNoKGZ0LnR5cGUpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gZ2UobGUuZGVjb2RlKGl0KSxmdCk7Y2FzZSJiaW5hcnkiOnJldHVybiBnZShpdCxmdCk7Y2FzZSJidWZmZXIiOnJldHVybiBnZShpdC50b1N0cmluZygiYmluYXJ5IiksZnQpO2Nhc2UiYXJyYXkiOnJldHVybiBn'@;
put 'ZShBdChpdCksZnQpfXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitmdC50eXBlKX0oaXQsZnQpLHd0PU10WzFdLEh0PSQxKE10WzBdLGZ0KTtyZXR1cm4gbXQod3QpLmZvckVhY2goZnVuY3Rpb24oa3Qpe0h0W2t0XT13dFtrdF19KSxIdH1mdW5jdGlvbiBNZShpdCxmdCxN'@;
put 'dCx1dCl7dmFyIHd0PSJDO1kiKyhNdCsxKSsiO1giKyh1dCsxKSsiO0siO3N3aXRjaChpdC50KXtjYXNlIm4iOnd0Kz1pdC52fHwwLGl0LmYmJiFpdC5GJiYod3QrPSI7RSIrSV8oaXQuZix7cjpNdCxjOnV0fSkpO2JyZWFrO2Nhc2UiYiI6d3QrPWl0LnY/IlRSVUUiOiJGQUxTRSI7YnJlYWs7'@;
put 'Y2FzZSJlIjp3dCs9aXQud3x8aXQudjticmVhaztjYXNlImQiOnd0Kz0nIicrKGl0Lnd8fGl0LnYpKyciJzticmVhaztjYXNlInMiOnd0Kz0nIicraXQudi5yZXBsYWNlKC8iL2csIiIpKyciJ31yZXR1cm4gd3R9cmV0dXJuIHdbInwiXT0yNTQse3RvX3dvcmtib29rOmZ1bmN0aW9uIHZlKGl0'@;
put 'LGZ0KXtyZXR1cm4gWmYoX2UoaXQsZnQpLGZ0KX0sdG9fc2hlZXQ6X2UsZnJvbV9zaGVldDpmdW5jdGlvbiBYZShpdCxmdCl7dmFyIEh0LE10PVsiSUQ7UFNoZWV0SlM7TjtFIl0sdXQ9W10sd3Q9UGkoaXRbIiFyZWYiXSksa3Q9QXJyYXkuaXNBcnJheShpdCksVHQ9IlxyXG4iO010LnB1c2go'@;
put 'IlA7UEdlbmVyYWwiKSxNdC5wdXNoKCJGO1AwO0RHMEc4O00yNTUiKSxpdFsiIWNvbHMiXSYmZnVuY3Rpb24gamUoaXQsZnQpe2Z0LmZvckVhY2goZnVuY3Rpb24oTXQsdXQpe3ZhciB3dD0iRjtXIisodXQrMSkrIiAiKyh1dCsxKSsiICI7TXQuaGlkZGVuP3d0Kz0iMCI6KCJudW1iZXIiPT10'@;
put 'eXBlb2YgTXQud2lkdGgmJiFNdC53cHgmJihNdC53cHg9SXUoTXQud2lkdGgpKSwibnVtYmVyIj09dHlwZW9mIE10LndweCYmIU10LndjaCYmKE10LndjaD1NMihNdC53cHgpKSwibnVtYmVyIj09dHlwZW9mIE10LndjaCYmKHd0Kz1NYXRoLnJvdW5kKE10LndjaCkpKSwiICIhPXd0LmNoYXJB'@;
put 'dCh3dC5sZW5ndGgtMSkmJml0LnB1c2god3QpfSl9KE10LGl0WyIhY29scyJdKSxpdFsiIXJvd3MiXSYmZnVuY3Rpb24gVWUoaXQsZnQpe2Z0LmZvckVhY2goZnVuY3Rpb24oTXQsdXQpe3ZhciB3dD0iRjsiO010LmhpZGRlbj93dCs9Ik0wOyI6TXQuaHB0P3d0Kz0iTSIrMjAqTXQuaHB0KyI7'@;
put 'IjpNdC5ocHgmJih3dCs9Ik0iKzIwKnVoKE10LmhweCkrIjsiKSx3dC5sZW5ndGg+MiYmaXQucHVzaCh3dCsiUiIrKHV0KzEpKX0pfShNdCxpdFsiIXJvd3MiXSksTXQucHVzaCgiQjtZIisod3QuZS5yLXd0LnMucisxKSsiO1giKyh3dC5lLmMtd3Qucy5jKzEpKyI7RCIrW3d0LnMuYyx3dC5z'@;
put 'LnIsd3QuZS5jLHd0LmUucl0uam9pbigiICIpKTtmb3IodmFyIFl0PXd0LnMucjtZdDw9d3QuZS5yOysrWXQpZm9yKHZhciBnbj13dC5zLmM7Z248PXd0LmUuYzsrK2duKXt2YXIgcW49cGkoe3I6WXQsYzpnbn0pOyhIdD1rdD8oaXRbWXRdfHxbXSlbZ25dOml0W3FuXSkmJihudWxsIT1IdC52'@;
put 'fHxIdC5mJiYhSHQuRikmJnV0LnB1c2goTWUoSHQsMCxZdCxnbikpfXJldHVybiBNdC5qb2luKFR0KStUdCt1dC5qb2luKFR0KStUdCsiRSIrVHR9fX0oKSxncD1mdW5jdGlvbigpe2Z1bmN0aW9uIFAoZ2UsX2Upe2Zvcih2YXIgdmU9Z2Uuc3BsaXQoIlxuIiksTWU9LTEsamU9LTEsVWU9MCxY'@;
put 'ZT1bXTtVZSE9PXZlLmxlbmd0aDsrK1VlKWlmKCJCT1QiIT09dmVbVWVdLnRyaW0oKSl7aWYoIShNZTwwKSl7Zm9yKHZhciBpdD12ZVtVZV0udHJpbSgpLnNwbGl0KCIsIiksZnQ9aXRbMF0sTXQ9aXRbMV0sdXQ9dmVbKytVZV18fCIiOzEmKHV0Lm1hdGNoKC9bIl0vZyl8fFtdKS5sZW5ndGgm'@;
put 'JlVlPHZlLmxlbmd0aC0xOyl1dCs9IlxuIit2ZVsrK1VlXTtzd2l0Y2godXQ9dXQudHJpbSgpLCtmdCl7Y2FzZS0xOmlmKCJCT1QiPT09dXQpe1hlWysrTWVdPVtdLGplPTA7Y29udGludWV9aWYoIkVPRCIhPT11dCl0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBESUYgc3BlY2lhbCBj'@;
put 'b21tYW5kICIrdXQpO2JyZWFrO2Nhc2UgMDpYZVtNZV1bamVdPSJUUlVFIj09PXV0fHwiRkFMU0UiIT09dXQmJihpc05hTihHbihNdCkpP2lzTmFOKG9uKE10KS5nZXREYXRlKCkpP010OlB0KE10KTpHbihNdCkpLCsramU7YnJlYWs7Y2FzZSAxOih1dD0odXQ9dXQuc2xpY2UoMSx1dC5sZW5n'@;
put 'dGgtMSkpLnJlcGxhY2UoLyIiL2csJyInKSkmJnV0Lm1hdGNoKC9ePSIuKiIkLykmJih1dD11dC5zbGljZSgyLC0xKSksWGVbTWVdW2plKytdPSIiIT09dXQ/dXQ6bnVsbH1pZigiRU9EIj09PXV0KWJyZWFrfX1lbHNlIFhlWysrTWVdPVtdLGplPTA7cmV0dXJuIF9lJiZfZS5zaGVldFJvd3Mm'@;
put 'JihYZT1YZS5zbGljZSgwLF9lLnNoZWV0Um93cykpLFhlfWZ1bmN0aW9uIEQoZ2UsX2Upe3JldHVybiAkMShmdW5jdGlvbiB3KGdlLF9lKXtzd2l0Y2goX2UudHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVybiBQKGxlLmRlY29kZShnZSksX2UpO2Nhc2UiYmluYXJ5IjpyZXR1cm4gUChnZSxfZSk7'@;
put 'Y2FzZSJidWZmZXIiOnJldHVybiBQKGdlLnRvU3RyaW5nKCJiaW5hcnkiKSxfZSk7Y2FzZSJhcnJheSI6cmV0dXJuIFAoQXQoZ2UpLF9lKX10aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrX2UudHlwZSl9KGdlLF9lKSxfZSl9dmFyIGdlLF9lO3JldHVybnt0b193b3JrYm9v'@;
put 'azpmdW5jdGlvbiBlZShnZSxfZSl7cmV0dXJuIFpmKEQoZ2UsX2UpLF9lKX0sdG9fc2hlZXQ6RCxmcm9tX3NoZWV0OihnZT1mdW5jdGlvbihNZSxqZSxVZSxYZSxpdCl7TWUucHVzaChqZSksTWUucHVzaChVZSsiLCIrWGUpLE1lLnB1c2goJyInK2l0LnJlcGxhY2UoLyIvZywnIiInKSsnIicp'@;
put 'fSxfZT1mdW5jdGlvbihNZSxqZSxVZSxYZSl7TWUucHVzaChqZSsiLCIrVWUpLE1lLnB1c2goMT09amU/JyInK1hlLnJlcGxhY2UoLyIvZywnIiInKSsnIic6WGUpfSxmdW5jdGlvbihNZSl7dmFyIFhlLGplPVtdLFVlPVBpKE1lWyIhcmVmIl0pLGl0PUFycmF5LmlzQXJyYXkoTWUpO2dlKGpl'@;
put 'LCJUQUJMRSIsMCwxLCJzaGVldGpzIiksZ2UoamUsIlZFQ1RPUlMiLDAsVWUuZS5yLVVlLnMucisxLCIiKSxnZShqZSwiVFVQTEVTIiwwLFVlLmUuYy1VZS5zLmMrMSwiIiksZ2UoamUsIkRBVEEiLDAsMCwiIik7Zm9yKHZhciBmdD1VZS5zLnI7ZnQ8PVVlLmUucjsrK2Z0KXtfZShqZSwtMSww'@;
put 'LCJCT1QiKTtmb3IodmFyIE10PVVlLnMuYztNdDw9VWUuZS5jOysrTXQpe3ZhciB1dD1waSh7cjpmdCxjOk10fSk7aWYoWGU9aXQ/KE1lW2Z0XXx8W10pW010XTpNZVt1dF0pc3dpdGNoKFhlLnQpe2Nhc2UibiI6dmFyIHd0PVhlLnc7IXd0JiZudWxsIT1YZS52JiYod3Q9WGUudiksbnVsbD09'@;
put 'd3Q/X2UoamUsMSwwLFhlLmYmJiFYZS5GPyI9IitYZS5mOiIiKTpfZShqZSwwLHd0LCJWIik7YnJlYWs7Y2FzZSJiIjpfZShqZSwwLFhlLnY/MTowLFhlLnY/IlRSVUUiOiJGQUxTRSIpO2JyZWFrO2Nhc2UicyI6X2UoamUsMSwwLGlzTmFOKFhlLnYpP1hlLnY6Jz0iJytYZS52KyciJyk7YnJl'@;
put 'YWs7Y2FzZSJkIjpYZS53fHwoWGUudz1TLmZvcm1hdChYZS56fHxTLl90YWJsZVsxNF0scWUoUHQoWGUudikpKSksX2UoamUsMCxYZS53LCJWIik7YnJlYWs7ZGVmYXVsdDpfZShqZSwxLDAsIiIpfWVsc2UgX2UoamUsMSwwLCIiKX19cmV0dXJuIF9lKGplLC0xLDAsIkVPRCIpLGplLmpvaW4o'@;
put 'IlxyXG4iKX0pfX0oKSxEbT1mdW5jdGlvbigpe2Z1bmN0aW9uIHcoWGUpe3JldHVybiBYZS5yZXBsYWNlKC9cXGIvZywiXFwiKS5yZXBsYWNlKC9cXGMvZywiOiIpLnJlcGxhY2UoL1xcbi9nLCJcbiIpfWZ1bmN0aW9uIFAoWGUpe3JldHVybiBYZS5yZXBsYWNlKC9cXC9nLCJcXGIiKS5yZXBs'@;
put 'YWNlKC86L2csIlxcYyIpLnJlcGxhY2UoL1xuL2csIlxcbiIpfWZ1bmN0aW9uIGVlKFhlLGl0KXtyZXR1cm4gJDEoZnVuY3Rpb24gRChYZSxpdCl7Zm9yKHZhciBmdD1YZS5zcGxpdCgiXG4iKSxNdD0tMSx1dD0tMSx3dD0wLEh0PVtdO3d0IT09ZnQubGVuZ3RoOysrd3Qpe3ZhciBrdD1mdFt3'@;
put 'dF0udHJpbSgpLnNwbGl0KCI6Iik7aWYoImNlbGwiPT09a3RbMF0pe3ZhciBUdD1jYShrdFsxXSk7aWYoSHQubGVuZ3RoPD1UdC5yKWZvcihNdD1IdC5sZW5ndGg7TXQ8PVR0LnI7KytNdClIdFtNdF18fChIdFtNdF09W10pO3N3aXRjaChNdD1UdC5yLHV0PVR0LmMsa3RbMl0pe2Nhc2UidCI6'@;
put 'SHRbTXRdW3V0XT13KGt0WzNdKTticmVhaztjYXNlInYiOkh0W010XVt1dF09K2t0WzNdO2JyZWFrO2Nhc2UidnRmIjp2YXIgWXQ9a3Rba3QubGVuZ3RoLTFdO2Nhc2UidnRjIjpIdFtNdF1bdXRdPSJubCI9PT1rdFszXT8hIStrdFs0XTora3RbNF0sInZ0ZiI9PWt0WzJdJiYoSHRbTXRdW3V0'@;
put 'XT1bSHRbTXRdW3V0XSxZdF0pfX19cmV0dXJuIGl0JiZpdC5zaGVldFJvd3MmJihIdD1IdC5zbGljZSgwLGl0LnNoZWV0Um93cykpLEh0fShYZSxpdCksaXQpfXZhciBnZT1bInNvY2lhbGNhbGM6dmVyc2lvbjoxLjUiLCJNSU1FLVZlcnNpb246IDEuMCIsIkNvbnRlbnQtVHlwZTogbXVsdGlw'@;
put 'YXJ0L21peGVkOyBib3VuZGFyeT1Tb2NpYWxDYWxjU3ByZWFkc2hlZXRDb250cm9sU2F2ZSJdLmpvaW4oIlxuIiksX2U9WyItLVNvY2lhbENhbGNTcHJlYWRzaGVldENvbnRyb2xTYXZlIiwiQ29udGVudC10eXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04Il0uam9pbigiXG4iKSsiXG4i'@;
put 'LHZlPVsiIyBTb2NpYWxDYWxjIFNwcmVhZHNoZWV0IENvbnRyb2wgU2F2ZSIsInBhcnQ6c2hlZXQiXS5qb2luKCJcbiIpLE1lPSItLVNvY2lhbENhbGNTcHJlYWRzaGVldENvbnRyb2xTYXZlLS0iO2Z1bmN0aW9uIGplKFhlKXtpZighWGV8fCFYZVsiIXJlZiJdKXJldHVybiIiO2Zvcih2YXIg'@;
put 'TXQsaXQ9W10sZnQ9W10sdXQ9IiIsd3Q9S2EoWGVbIiFyZWYiXSksSHQ9QXJyYXkuaXNBcnJheShYZSksa3Q9d3Qucy5yO2t0PD13dC5lLnI7KytrdClmb3IodmFyIFR0PXd0LnMuYztUdDw9d3QuZS5jOysrVHQpaWYodXQ9cGkoe3I6a3QsYzpUdH0pLChNdD1IdD8oWGVba3RdfHxbXSlbVHRd'@;
put 'OlhlW3V0XSkmJm51bGwhPU10LnYmJiJ6IiE9PU10LnQpe3N3aXRjaChmdD1bImNlbGwiLHV0LCJ0Il0sTXQudCl7Y2FzZSJzIjpjYXNlInN0ciI6ZnQucHVzaChQKE10LnYpKTticmVhaztjYXNlIm4iOk10LmY/KGZ0WzJdPSJ2dGYiLGZ0WzNdPSJuIixmdFs0XT1NdC52LGZ0WzVdPVAoTXQu'@;
put 'ZikpOihmdFsyXT0idiIsZnRbM109TXQudik7YnJlYWs7Y2FzZSJiIjpmdFsyXT0idnQiKyhNdC5mPyJmIjoiYyIpLGZ0WzNdPSJubCIsZnRbNF09TXQudj8iMSI6IjAiLGZ0WzVdPVAoTXQuZnx8KE10LnY/IlRSVUUiOiJGQUxTRSIpKTticmVhaztjYXNlImQiOnZhciBZdD1xZShQdChNdC52'@;
put 'KSk7ZnRbMl09InZ0YyIsZnRbM109Im5kIixmdFs0XT0iIitZdCxmdFs1XT1NdC53fHxTLmZvcm1hdChNdC56fHxTLl90YWJsZVsxNF0sWXQpO2JyZWFrO2Nhc2UiZSI6Y29udGludWV9aXQucHVzaChmdC5qb2luKCI6IikpfXJldHVybiBpdC5wdXNoKCJzaGVldDpjOiIrKHd0LmUuYy13dC5z'@;
put 'LmMrMSkrIjpyOiIrKHd0LmUuci13dC5zLnIrMSkrIjp0dmY6MSIpLGl0LnB1c2goInZhbHVlZm9ybWF0OjE6dGV4dC13aWtpIiksaXQuam9pbigiXG4iKX1yZXR1cm57dG9fd29ya2Jvb2s6ZnVuY3Rpb24gb2UoWGUsaXQpe3JldHVybiBaZihlZShYZSxpdCksaXQpfSx0b19zaGVldDplZSxm'@;
put 'cm9tX3NoZWV0OmZ1bmN0aW9uIFVlKFhlKXtyZXR1cm5bZ2UsX2UsdmUsX2UsamUoWGUpLE1lXS5qb2luKCJcbiIpfX19KCksdWY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB3KFVlLFhlLGl0LGZ0LE10KXtNdC5yYXc/WGVbaXRdW2Z0XT1VZToiIj09PVVlfHwoWGVbaXRdW2Z0XT0kbihVZSxNdCk/'@;
put 'JG4oVWUsTXQpLnY6VWUpfXZhciBEPXs0NDoiLCIsOToiXHQiLDU5OiI7In0sZWU9ezQ0OjMsOToyLDU5OjF9O2Z1bmN0aW9uIG9lKFVlKXtmb3IodmFyIFhlPXt9LGl0PSExLGZ0PTAsTXQ9MDtmdDxVZS5sZW5ndGg7KytmdCkzND09KE10PVVlLmNoYXJDb2RlQXQoZnQpKT9pdD0haXQ6IWl0'@;
put 'JiZNdCBpbiBEJiYoWGVbTXRdPShYZVtNdF18fDApKzEpO2ZvcihmdCBpbiBNdD1bXSxYZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoWGUsZnQpJiZNdC5wdXNoKFtYZVtmdF0sZnRdKTtpZighTXQubGVuZ3RoKWZvcihmdCBpbiBYZT1lZSlPYmplY3QucHJvdG90eXBl'@;
put 'Lmhhc093blByb3BlcnR5LmNhbGwoWGUsZnQpJiZNdC5wdXNoKFtYZVtmdF0sZnRdKTtyZXR1cm4gTXQuc29ydChmdW5jdGlvbih1dCx3dCl7cmV0dXJuIHV0WzBdLXd0WzBdfHxlZVt1dFsxXV0tZWVbd3RbMV1dfSksRFtNdC5wb3AoKVsxXV19ZnVuY3Rpb24gX2UoVWUsWGUpe3JldHVybiFY'@;
put 'ZXx8IVhlLlBSTnx8InNlcD0iPT1VZS5zbGljZSgwLDQpfHxVZS5pbmRleE9mKCJcdCIpPj0wfHxVZS5pbmRleE9mKCIsIik+PTB8fFVlLmluZGV4T2YoIjsiKT49MD9mdW5jdGlvbiBnZShVZSxYZSl7dmFyIGl0PVhlfHx7fSxmdD0iIjtudWxsIT1uZSYmbnVsbD09aXQuZGVuc2UmJihpdC5k'@;
put 'ZW5zZT1uZSk7dmFyIE10PWl0LmRlbnNlP1tdOnt9LHV0PXtzOntjOjAscjowfSxlOntjOjAscjowfX07InNlcD0iPT1VZS5zbGljZSgwLDQpPzEzPT1VZS5jaGFyQ29kZUF0KDUpJiYxMD09VWUuY2hhckNvZGVBdCg2KT8oZnQ9VWUuY2hhckF0KDQpLFVlPVVlLnNsaWNlKDcpKToxMz09VWUu'@;
put 'Y2hhckNvZGVBdCg1KXx8MTA9PVVlLmNoYXJDb2RlQXQoNSk/KGZ0PVVlLmNoYXJBdCg0KSxVZT1VZS5zbGljZSg2KSk6ZnQ9b2UoVWUuc2xpY2UoMCwxMDI0KSk6ZnQ9b2UoVWUuc2xpY2UoMCwxMDI0KSk7dmFyIHd0PTAsSHQ9MCxrdD0wLFR0PTAsWXQ9MCxnbj1mdC5jaGFyQ29kZUF0KDAp'@;
put 'LHFuPSExLGZuPTAsS249VWUuY2hhckNvZGVBdCgwKTtVZT1VZS5yZXBsYWNlKC9cclxuL2dtLCJcbiIpO3ZhciB6bj1udWxsIT1pdC5kYXRlTkY/ZnVuY3Rpb24ga2Uodyl7dmFyIFA9Im51bWJlciI9PXR5cGVvZiB3P1MuX3RhYmxlW3ddOnc7cmV0dXJuIFA9UC5yZXBsYWNlKG1lLCIoXFxk'@;
put 'KykiKSxuZXcgUmVnRXhwKCJeIitQKyIkIil9KGl0LmRhdGVORik6bnVsbDtmdW5jdGlvbiBPbigpe3ZhciBlcj1VZS5zbGljZShUdCxZdCksdHI9e307aWYoJyInPT1lci5jaGFyQXQoMCkmJiciJz09ZXIuY2hhckF0KGVyLmxlbmd0aC0xKSYmKGVyPWVyLnNsaWNlKDEsLTEpLnJlcGxhY2Uo'@;
put 'LyIiL2csJyInKSksMD09PWVyLmxlbmd0aCl0ci50PSJ6IjtlbHNlIGlmKGl0LnJhdyl0ci50PSJzIix0ci52PWVyO2Vsc2UgaWYoMD09PWVyLnRyaW0oKS5sZW5ndGgpdHIudD0icyIsdHIudj1lcjtlbHNlIGlmKDYxPT1lci5jaGFyQ29kZUF0KDApKTM0PT1lci5jaGFyQ29kZUF0KDEpJiYz'@;
put 'ND09ZXIuY2hhckNvZGVBdChlci5sZW5ndGgtMSk/KHRyLnQ9InMiLHRyLnY9ZXIuc2xpY2UoMiwtMSkucmVwbGFjZSgvIiIvZywnIicpKTpmdW5jdGlvbiBSXyh3KXtyZXR1cm4gMSE9dy5sZW5ndGh9KGVyKT8odHIudD0ibiIsdHIuZj1lci5zbGljZSgxKSk6KHRyLnQ9InMiLHRyLnY9ZXIp'@;
put 'O2Vsc2UgaWYoIlRSVUUiPT1lcil0ci50PSJiIix0ci52PSEwO2Vsc2UgaWYoIkZBTFNFIj09ZXIpdHIudD0iYiIsdHIudj0hMTtlbHNlIGlmKGlzTmFOKGt0PUduKGVyKSkpaWYoIWlzTmFOKG9uKGVyKS5nZXREYXRlKCkpfHx6biYmZXIubWF0Y2goem4pKXt0ci56PWl0LmRhdGVORnx8Uy5f'@;
put 'dGFibGVbMTRdO3ZhciBZbj0wO3puJiZlci5tYXRjaCh6bikmJihlcj1mdW5jdGlvbiBUZSh3LFAsRCl7dmFyIGVlPS0xLG9lPS0xLGdlPS0xLF9lPS0xLHZlPS0xLE1lPS0xOyhQLm1hdGNoKG1lKXx8W10pLmZvckVhY2goZnVuY3Rpb24oWGUsaXQpe3ZhciBmdD1wYXJzZUludChEW2l0KzFd'@;
put 'LDEwKTtzd2l0Y2goWGUudG9Mb3dlckNhc2UoKS5jaGFyQXQoMCkpe2Nhc2UieSI6ZWU9ZnQ7YnJlYWs7Y2FzZSJkIjpnZT1mdDticmVhaztjYXNlImgiOl9lPWZ0O2JyZWFrO2Nhc2UicyI6TWU9ZnQ7YnJlYWs7Y2FzZSJtIjpfZT49MD92ZT1mdDpvZT1mdH19KSxNZT49MCYmLTE9PXZlJiZv'@;
put 'ZT49MCYmKHZlPW9lLG9lPS0xKTt2YXIgamU9KCIiKyhlZT49MD9lZToobmV3IERhdGUpLmdldEZ1bGxZZWFyKCkpKS5zbGljZSgtNCkrIi0iKygiMDAiKyhvZT49MT9vZToxKSkuc2xpY2UoLTIpKyItIisoIjAwIisoZ2U+PTE/Z2U6MSkpLnNsaWNlKC0yKTs3PT1qZS5sZW5ndGgmJihqZT0i'@;
put 'MCIramUpLDg9PWplLmxlbmd0aCYmKGplPSIyMCIramUpO3ZhciBVZT0oIjAwIisoX2U+PTA/X2U6MCkpLnNsaWNlKC0yKSsiOiIrKCIwMCIrKHZlPj0wP3ZlOjApKS5zbGljZSgtMikrIjoiKygiMDAiKyhNZT49MD9NZTowKSkuc2xpY2UoLTIpO3JldHVybi0xPT1fZSYmLTE9PXZlJiYtMT09'@;
put 'TWU/amU6LTE9PWVlJiYtMT09b2UmJi0xPT1nZT9VZTpqZSsiVCIrVWV9KDAsaXQuZGF0ZU5GLGVyLm1hdGNoKHpuKXx8W10pLFluPTEpLGl0LmNlbGxEYXRlcz8odHIudD0iZCIsdHIudj1QdChlcixZbikpOih0ci50PSJuIix0ci52PXFlKFB0KGVyLFluKSkpLCExIT09aXQuY2VsbFRleHQm'@;
put 'Jih0ci53PVMuZm9ybWF0KHRyLnosdHIudiBpbnN0YW5jZW9mIERhdGU/cWUodHIudik6dHIudikpLGl0LmNlbGxORnx8ZGVsZXRlIHRyLnp9ZWxzZSB0ci50PSJzIix0ci52PWVyO2Vsc2UgdHIudD0ibiIsITEhPT1pdC5jZWxsVGV4dCYmKHRyLnc9ZXIpLHRyLnY9a3Q7aWYoInoiPT10ci50'@;
put 'fHwoaXQuZGVuc2U/KE10W3d0XXx8KE10W3d0XT1bXSksTXRbd3RdW0h0XT10cik6TXRbcGkoe2M6SHQscjp3dH0pXT10ciksS249VWUuY2hhckNvZGVBdChUdD1ZdCsxKSx1dC5lLmM8SHQmJih1dC5lLmM9SHQpLHV0LmUucjx3dCYmKHV0LmUucj13dCksZm49PWduKSsrSHQ7ZWxzZSBpZihI'@;
put 'dD0wLCsrd3QsaXQuc2hlZXRSb3dzJiZpdC5zaGVldFJvd3M8PXd0KXJldHVybiEwfWU6Zm9yKDtZdDxVZS5sZW5ndGg7KytZdClzd2l0Y2goZm49VWUuY2hhckNvZGVBdChZdCkpe2Nhc2UgMzQ6MzQ9PT1LbiYmKHFuPSFxbik7YnJlYWs7Y2FzZSBnbjpjYXNlIDEwOmNhc2UgMTM6aWYoIXFu'@;
put 'JiZPbigpKWJyZWFrIGV9cmV0dXJuIFl0LVR0PjAmJk9uKCksTXRbIiFyZWYiXT1Wbyh1dCksTXR9KFVlLFhlKTokMShmdW5jdGlvbiBQKFVlLFhlKXt2YXIgaXQ9WGV8fHt9LGZ0PVtdO2lmKCFVZXx8MD09PVVlLmxlbmd0aClyZXR1cm4gZnQ7Zm9yKHZhciBNdD1VZS5zcGxpdCgvW1xyXG5d'@;
put 'LyksdXQ9TXQubGVuZ3RoLTE7dXQ+PTAmJjA9PT1NdFt1dF0ubGVuZ3RoOyktLXV0O2Zvcih2YXIgd3Q9MTAsSHQ9MCxrdD0wO2t0PD11dDsrK2t0KS0xPT0oSHQ9TXRba3RdLmluZGV4T2YoIiAiKSk/SHQ9TXRba3RdLmxlbmd0aDpIdCsrLHd0PU1hdGgubWF4KHd0LEh0KTtmb3Ioa3Q9MDtr'@;
put 'dDw9dXQ7KytrdCl7ZnRba3RdPVtdO3ZhciBUdD0wO2Zvcih3KE10W2t0XS5zbGljZSgwLHd0KS50cmltKCksZnQsa3QsVHQsaXQpLFR0PTE7VHQ8PShNdFtrdF0ubGVuZ3RoLXd0KS8xMCsxOysrVHQpdyhNdFtrdF0uc2xpY2Uod3QrMTAqKFR0LTEpLHd0KzEwKlR0KS50cmltKCksZnQsa3Qs'@;
put 'VHQsaXQpfXJldHVybiBpdC5zaGVldFJvd3MmJihmdD1mdC5zbGljZSgwLGl0LnNoZWV0Um93cykpLGZ0fShVZSxYZSksWGUpfWZ1bmN0aW9uIHZlKFVlLFhlKXt2YXIgaXQ9IiIsZnQ9InN0cmluZyI9PVhlLnR5cGU/WzAsMCwwLDBdOkt3KFVlLFhlKTtzd2l0Y2goWGUudHlwZSl7Y2FzZSJi'@;
put 'YXNlNjQiOml0PWxlLmRlY29kZShVZSk7YnJlYWs7Y2FzZSJiaW5hcnkiOmNhc2Uic3RyaW5nIjppdD1VZTticmVhaztjYXNlImJ1ZmZlciI6aXQ9NjUwMDE9PVhlLmNvZGVwYWdlP1VlLnRvU3RyaW5nKCJ1dGY4Iik6WGUuY29kZXBhZ2UmJnR5cGVvZiBjcHRhYmxlPCJ1Ij9jcHRhYmxlLnV0'@;
put 'aWxzLmRlY29kZShYZS5jb2RlcGFnZSxVZSk6VWUudG9TdHJpbmcoImJpbmFyeSIpO2JyZWFrO2Nhc2UiYXJyYXkiOml0PUF0KFVlKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitYZS50eXBlKX1yZXR1cm4gMjM5PT1mdFswXSYmMTg3PT1mdFsx'@;
put 'XSYmMTkxPT1mdFsyXT9pdD1GaShpdC5zbGljZSgzKSk6ImJpbmFyeSI9PVhlLnR5cGUmJnR5cGVvZiBjcHRhYmxlPCJ1IiYmWGUuY29kZXBhZ2UmJihpdD1jcHRhYmxlLnV0aWxzLmRlY29kZShYZS5jb2RlcGFnZSxjcHRhYmxlLnV0aWxzLmVuY29kZSgyODU5MSxpdCkpKSwic29jaWFsY2Fs'@;
put 'Yzp2ZXJzaW9uOiI9PWl0LnNsaWNlKDAsMTkpP0RtLnRvX3NoZWV0KCJzdHJpbmciPT1YZS50eXBlP2l0OkZpKGl0KSxYZSk6X2UoaXQsWGUpfXJldHVybnt0b193b3JrYm9vazpmdW5jdGlvbiBNZShVZSxYZSl7cmV0dXJuIFpmKHZlKFVlLFhlKSxYZSl9LHRvX3NoZWV0OnZlLGZyb21fc2hl'@;
put 'ZXQ6ZnVuY3Rpb24gamUoVWUpe2Zvcih2YXIgZnQsWGU9W10saXQ9UGkoVWVbIiFyZWYiXSksTXQ9QXJyYXkuaXNBcnJheShVZSksdXQ9aXQucy5yO3V0PD1pdC5lLnI7Kyt1dCl7Zm9yKHZhciB3dD1bXSxIdD1pdC5zLmM7SHQ8PWl0LmUuYzsrK0h0KXt2YXIga3Q9cGkoe3I6dXQsYzpIdH0p'@;
put 'O2lmKChmdD1NdD8oVWVbdXRdfHxbXSlbSHRdOlVlW2t0XSkmJm51bGwhPWZ0LnYpe2Zvcih2YXIgVHQ9KGZ0Lnd8fChtYyhmdCksZnQudyl8fCIiKS5zbGljZSgwLDEwKTtUdC5sZW5ndGg8MTA7KVR0Kz0iICI7d3QucHVzaChUdCsoMD09PUh0PyIgIjoiIikpfWVsc2Ugd3QucHVzaCgiICAg'@;
put 'ICAgICAgICIpfVhlLnB1c2god3Quam9pbigiIikpfXJldHVybiBYZS5qb2luKCJcbiIpfX19KCksbDg9ZnVuY3Rpb24oKXtmdW5jdGlvbiB3KERuLHZyLHJyKXtpZihEbil7c3MoRG4sRG4ubHx8MCk7Zm9yKHZhciB4bj1yci5FbnVtfHx0aTtEbi5sPERuLmxlbmd0aDspe3ZhciBtcj1Ebi5y'@;
put 'ZWFkX3NoaWZ0KDIpLENpPXhuW21yXXx8eG5bNjU1MzVdLHpyPURuLnJlYWRfc2hpZnQoMiksemk9RG4ubCt6cix3bz1DaS5mJiZDaS5mKERuLHpyLHJyKTtpZihEbi5sPXppLHZyKHdvLENpLG1yKSlyZXR1cm59fX1mdW5jdGlvbiBEKERuLHZyKXtpZighRG4pcmV0dXJuIERuO3ZhciBycj12'@;
put 'cnx8e307bnVsbCE9bmUmJm51bGw9PXJyLmRlbnNlJiYocnIuZGVuc2U9bmUpO3ZhciB4bj1yci5kZW5zZT9bXTp7fSxtcj0iU2hlZXQxIixDaT0wLHpyPXt9LHppPVttcl0sd289W10sT2k9e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fSxYbz1yci5zaGVldFJvd3N8fDA7aWYoMj09RG5bMl0p'@;
put 'cnIuRW51bT10aSx3KERuLGZ1bmN0aW9uKG1pLHJsLEFuKXtzd2l0Y2goQW4pe2Nhc2UgMDpyci52ZXJzPW1pLG1pPj00MDk2JiYocnIucXBybz0hMCk7YnJlYWs7Y2FzZSA2Ok9pPW1pO2JyZWFrO2Nhc2UgMTU6Y2FzZSA1MTpyci5xcHJvfHwobWlbMV0udj1taVsxXS52LnNsaWNlKDEpKTtj'@;
put 'YXNlIDEzOmNhc2UgMTQ6Y2FzZSAxNjoxND09QW4mJjExMj09KDExMiZtaVsyXSkmJigxNSZtaVsyXSk+MSYmKDE1Jm1pWzJdKTwxNSYmKG1pWzFdLno9cnIuZGF0ZU5GfHxTLl90YWJsZVsxNF0scnIuY2VsbERhdGVzJiYobWlbMV0udD0iZCIsbWlbMV0udj1odChtaVsxXS52KSkpO3ZhciBB'@;
put 'YT1yci5kZW5zZT8oeG5bbWlbMF0ucl18fFtdKVttaVswXS5jXTp4bltwaShtaVswXSldO2lmKEFhKXtBYS50PW1pWzFdLnQsQWEudj1taVsxXS52LG51bGwhPW1pWzFdLnomJihBYS56PW1pWzFdLnopLG51bGwhPW1pWzFdLmYmJihBYS5mPW1pWzFdLmYpO2JyZWFrfXJyLmRlbnNlPyh4bltt'@;
put 'aVswXS5yXXx8KHhuW21pWzBdLnJdPVtdKSx4blttaVswXS5yXVttaVswXS5jXT1taVsxXSk6eG5bcGkobWlbMF0pXT1taVsxXX19LHJyKTtlbHNle2lmKDI2IT1EblsyXSYmMTQhPURuWzJdKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIExPVFVTIEJPRiAiK0RuWzJdKTtyci5FbnVt'@;
put 'PWZyLDE0PT1EblsyXSYmKHJyLnFwcm89ITAsRG4ubD0wKSx3KERuLGZ1bmN0aW9uKG1pLHJsLEFuKXtzd2l0Y2goQW4pe2Nhc2UgMjI6bWlbMV0udj1taVsxXS52LnNsaWNlKDEpO2Nhc2UgMjM6Y2FzZSAyNDpjYXNlIDI1OmNhc2UgMzc6Y2FzZSAzOTpjYXNlIDQwOmlmKG1pWzNdPkNpJiYo'@;
put 'eG5bIiFyZWYiXT1WbyhPaSksenJbbXJdPXhuLHhuPXJyLmRlbnNlP1tdOnt9LE9pPXtzOntyOjAsYzowfSxlOntyOjAsYzowfX0semkucHVzaChtcj0iU2hlZXQiKygoQ2k9bWlbM10pKzEpKSksWG8+MCYmbWlbMF0ucj49WG8pYnJlYWs7cnIuZGVuc2U/KHhuW21pWzBdLnJdfHwoeG5bbWlb'@;
put 'MF0ucl09W10pLHhuW21pWzBdLnJdW21pWzBdLmNdPW1pWzFdKTp4bltwaShtaVswXSldPW1pWzFdLE9pLmUuYzxtaVswXS5jJiYoT2kuZS5jPW1pWzBdLmMpLE9pLmUucjxtaVswXS5yJiYoT2kuZS5yPW1pWzBdLnIpO2JyZWFrO2Nhc2UgMjc6bWlbMTRlM10mJih3b1ttaVsxNGUzXVswXV09'@;
put 'bWlbMTRlM11bMV0pfX0scnIpfWlmKHhuWyIhcmVmIl09Vm8oT2kpLHpyW21yXT14biwhd28ubGVuZ3RoKXJldHVybntTaGVldE5hbWVzOnppLFNoZWV0czp6cn07Zm9yKHZhciBmbz17fSxSbz1bXSxUbz0wO1RvPHdvLmxlbmd0aDsrK1RvKXpyW3ppW1RvXV0mJihSby5wdXNoKHdvW1RvXSks'@;
put 'Zm9bd29bVG9dXT16clt6aVtUb11dKTtyZXR1cm57U2hlZXROYW1lczpSbyxTaGVldHM6Zm99fWZ1bmN0aW9uIGplKERuLHZyLHJyKXt2YXIgeG49W3tjOjAscjowfSx7dDoibiIsdjowfSwwXTtyZXR1cm4gcnIucXBybyYmMjA3NjghPXJyLnZlcnM/KHhuWzBdLmM9RG4ucmVhZF9zaGlmdCgx'@;
put 'KSxEbi5sKysseG5bMF0ucj1Ebi5yZWFkX3NoaWZ0KDIpLERuLmwrPTIpOih4blsyXT1Ebi5yZWFkX3NoaWZ0KDEpLHhuWzBdLmM9RG4ucmVhZF9zaGlmdCgyKSx4blswXS5yPURuLnJlYWRfc2hpZnQoMikpLHhufWZ1bmN0aW9uIFVlKERuLHZyLHJyKXt2YXIgeG49RG4ubCt2cixtcj1qZShE'@;
put 'biwwLHJyKTtpZihtclsxXS50PSJzIiwyMDc2OD09cnIudmVycyl7RG4ubCsrO3ZhciBDaT1Ebi5yZWFkX3NoaWZ0KDEpO3JldHVybiBtclsxXS52PURuLnJlYWRfc2hpZnQoQ2ksInV0ZjgiKSxtcn1yZXR1cm4gcnIucXBybyYmRG4ubCsrLG1yWzFdLnY9RG4ucmVhZF9zaGlmdCh4bi1Ebi5s'@;
put 'LCJjc3RyIiksbXJ9ZnVuY3Rpb24gWGUoRG4sdnIscnIpe3ZhciB4bj1wcig3K3JyLmxlbmd0aCk7eG4ud3JpdGVfc2hpZnQoMSwyNTUpLHhuLndyaXRlX3NoaWZ0KDIsdnIpLHhuLndyaXRlX3NoaWZ0KDIsRG4pLHhuLndyaXRlX3NoaWZ0KDEsMzkpO2Zvcih2YXIgbXI9MDttcjx4bi5sZW5n'@;
put 'dGg7Kyttcil7dmFyIENpPXJyLmNoYXJDb2RlQXQobXIpO3huLndyaXRlX3NoaWZ0KDEsQ2k+PTEyOD85NTpDaSl9cmV0dXJuIHhuLndyaXRlX3NoaWZ0KDEsMCkseG59ZnVuY3Rpb24gZnQoRG4sdnIscnIpe3ZhciB4bj1wcig3KTtyZXR1cm4geG4ud3JpdGVfc2hpZnQoMSwyNTUpLHhuLndy'@;
put 'aXRlX3NoaWZ0KDIsdnIpLHhuLndyaXRlX3NoaWZ0KDIsRG4pLHhuLndyaXRlX3NoaWZ0KDIscnIsImkiKSx4bn1mdW5jdGlvbiB1dChEbix2cixycil7dmFyIHhuPXByKDEzKTtyZXR1cm4geG4ud3JpdGVfc2hpZnQoMSwyNTUpLHhuLndyaXRlX3NoaWZ0KDIsdnIpLHhuLndyaXRlX3NoaWZ0'@;
put 'KDIsRG4pLHhuLndyaXRlX3NoaWZ0KDgscnIsImYiKSx4bn1mdW5jdGlvbiBIdChEbix2cixycil7dmFyIHhuPTMyNzY4JnZyO3JldHVybiB2cj0oeG4/RG46MCkrKCh2ciY9LTMyNzY5KT49ODE5Mj92ci0xNjM4NDp2ciksKHhuPyIiOiIkIikrKHJyP0JhKHZyKTpWYSh2cikpfXZhciBUdD17'@;
put 'NTE6WyJGQUxTRSIsMF0sNTI6WyJUUlVFIiwwXSw3MDpbIkxFTiIsMV0sODA6WyJTVU0iLDY5XSw4MTpbIkFWRVJBR0VBIiw2OV0sODI6WyJDT1VOVEEiLDY5XSw4MzpbIk1JTkEiLDY5XSw4NDpbIk1BWEEiLDY5XSwxMTE6WyJUIiwxXX0sWXQ9WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIi'@;
put 'LCIrIiwiLSIsIioiLCIvIiwiXiIsIj0iLCI8PiIsIjw9IiwiPj0iLCI8IiwiPiIsIiIsIiIsIiIsIiIsIiYiLCIiLCIiLCIiLCIiLCIiLCIiLCIiXTtmdW5jdGlvbiBxbihEbil7dmFyIHZyPVt7YzowLHI6MH0se3Q6Im4iLHY6MH0sMF07cmV0dXJuIHZyWzBdLnI9RG4ucmVhZF9zaGlmdCgy'@;
put 'KSx2clszXT1EbltEbi5sKytdLHZyWzBdLmM9RG5bRG4ubCsrXSx2cn1mdW5jdGlvbiBLbihEbix2cixycix4bil7dmFyIG1yPXByKDYreG4ubGVuZ3RoKTttci53cml0ZV9zaGlmdCgyLERuKSxtci53cml0ZV9zaGlmdCgxLHJyKSxtci53cml0ZV9zaGlmdCgxLHZyKSxtci53cml0ZV9zaGlm'@;
put 'dCgxLDM5KTtmb3IodmFyIENpPTA7Q2k8eG4ubGVuZ3RoOysrQ2kpe3ZhciB6cj14bi5jaGFyQ29kZUF0KENpKTttci53cml0ZV9zaGlmdCgxLHpyPj0xMjg/OTU6enIpfXJldHVybiBtci53cml0ZV9zaGlmdCgxLDApLG1yfWZ1bmN0aW9uIE9uKERuLHZyKXt2YXIgcnI9cW4oRG4pLHhuPURu'@;
put 'LnJlYWRfc2hpZnQoNCksbXI9RG4ucmVhZF9zaGlmdCg0KSxDaT1Ebi5yZWFkX3NoaWZ0KDIpO2lmKDY1NTM1PT1DaSlyZXR1cm4gMD09PXhuJiYzMjIxMjI1NDcyPT09bXI/KHJyWzFdLnQ9ImUiLHJyWzFdLnY9MTUpOjA9PT14biYmMzQ4OTY2MDkyOD09PW1yPyhyclsxXS50PSJlIixyclsx'@;
put 'XS52PTQyKTpyclsxXS52PTAscnI7dmFyIHpyPTMyNzY4JkNpO3JldHVybiBDaT0oMzI3NjcmQ2kpLTE2NDQ2LHJyWzFdLnY9KDEtMip6cikqKG1yKk1hdGgucG93KDIsQ2krMzIpK3huKk1hdGgucG93KDIsQ2kpKSxycn1mdW5jdGlvbiBlcihEbix2cixycix4bil7dmFyIG1yPXByKDE0KTtp'@;
put 'Zihtci53cml0ZV9zaGlmdCgyLERuKSxtci53cml0ZV9zaGlmdCgxLHJyKSxtci53cml0ZV9zaGlmdCgxLHZyKSwwPT14bilyZXR1cm4gbXIud3JpdGVfc2hpZnQoNCwwKSxtci53cml0ZV9zaGlmdCg0LDApLG1yLndyaXRlX3NoaWZ0KDIsNjU1MzUpLG1yO3ZhciBDaT0wLHpyPTAsd289MDty'@;
put 'ZXR1cm4geG48MCYmKENpPTEseG49LXhuKSx6cj0wfE1hdGgubG9nMih4biksMjE0NzQ4MzY0OCYod289KHhuLz1NYXRoLnBvdygyLHpyLTMxKSk+Pj4wKXx8KCsrenIsd289KHhuLz0yKT4+PjApLHhuLT13byx3b3w9MjE0NzQ4MzY0OCx3bz4+Pj0wLHhuKj1NYXRoLnBvdygyLDMyKSxtci53'@;
put 'cml0ZV9zaGlmdCg0LHhuPj4+MCksbXIud3JpdGVfc2hpZnQoNCx3byksbXIud3JpdGVfc2hpZnQoMix6cis9MTYzODMrKENpPzMyNzY4OjApKSxtcn1mdW5jdGlvbiBqcihEbix2cil7dmFyIHJyPXFuKERuKSx4bj1Ebi5yZWFkX3NoaWZ0KDgsImYiKTtyZXR1cm4gcnJbMV0udj14bixycn1m'@;
put 'dW5jdGlvbiBJaShEbix2cil7dmFyIHJyPXByKDUrRG4ubGVuZ3RoKTtyci53cml0ZV9zaGlmdCgyLDE0ZTMpLHJyLndyaXRlX3NoaWZ0KDIsdnIpO2Zvcih2YXIgeG49MDt4bjxEbi5sZW5ndGg7Kyt4bil7dmFyIG1yPURuLmNoYXJDb2RlQXQoeG4pO3JyW3JyLmwrK109bXI+MTI3Pzk1Om1y'@;
put 'fXJldHVybiBycltyci5sKytdPTAscnJ9dmFyIHRpPXswOntuOiJCT0YiLGY6eXN9LDE6e246IkVPRiJ9LDI6e246IkNBTENNT0RFIn0sMzp7bjoiQ0FMQ09SREVSIn0sNDp7bjoiU1BMSVQifSw1OntuOiJTWU5DIn0sNjp7bjoiUkFOR0UiLGY6ZnVuY3Rpb24gdmUoRG4pe3ZhciB2cj17czp7'@;
put 'YzowLHI6MH0sZTp7YzowLHI6MH19O3JldHVybiB2ci5zLmM9RG4ucmVhZF9zaGlmdCgyKSx2ci5zLnI9RG4ucmVhZF9zaGlmdCgyKSx2ci5lLmM9RG4ucmVhZF9zaGlmdCgyKSx2ci5lLnI9RG4ucmVhZF9zaGlmdCgyKSw2NTUzNT09dnIucy5jJiYodnIucy5jPXZyLmUuYz12ci5zLnI9dnIu'@;
put 'ZS5yPTApLHZyfX0sNzp7bjoiV0lORE9XMSJ9LDg6e246IkNPTFcxIn0sOTp7bjoiV0lOVFdPIn0sMTA6e246IkNPTFcyIn0sMTE6e246Ik5BTUUifSwxMjp7bjoiQkxBTksifSwxMzp7bjoiSU5URUdFUiIsZjpmdW5jdGlvbiBpdChEbix2cixycil7dmFyIHhuPWplKERuLDAscnIpO3JldHVy'@;
put 'biB4blsxXS52PURuLnJlYWRfc2hpZnQoMiwiaSIpLHhufX0sMTQ6e246Ik5VTUJFUiIsZjpmdW5jdGlvbiBNdChEbix2cixycil7dmFyIHhuPWplKERuLDAscnIpO3JldHVybiB4blsxXS52PURuLnJlYWRfc2hpZnQoOCwiZiIpLHhufX0sMTU6e246IkxBQkVMIixmOlVlfSwxNjp7bjoiRk9S'@;
put 'TVVMQSIsZjpmdW5jdGlvbiB3dChEbix2cixycil7dmFyIHhuPURuLmwrdnIsbXI9amUoRG4sMCxycik7aWYobXJbMV0udj1Ebi5yZWFkX3NoaWZ0KDgsImYiKSxyci5xcHJvKURuLmw9eG47ZWxzZXt2YXIgQ2k9RG4ucmVhZF9zaGlmdCgyKTsoZnVuY3Rpb24gZ24oRG4sdnIpe3NzKERuLDAp'@;
put 'O2Zvcih2YXIgcnI9W10seG49MCxtcj0iIixDaT0iIjtEbi5sPERuLmxlbmd0aDspe3ZhciB6cj1EbltEbi5sKytdO3N3aXRjaCh6cil7Y2FzZSAwOnJyLnB1c2goRG4ucmVhZF9zaGlmdCg4LCJmIikpO2JyZWFrO2Nhc2UgMTpDaT1IdCh2clswXS5jLERuLnJlYWRfc2hpZnQoMiksITApLG1y'@;
put 'PUh0KHZyWzBdLnIsRG4ucmVhZF9zaGlmdCgyKSwhMSkscnIucHVzaChDaSttcik7YnJlYWs7Y2FzZSAyOnZhciB6aT1IdCh2clswXS5jLERuLnJlYWRfc2hpZnQoMiksITApLHdvPUh0KHZyWzBdLnIsRG4ucmVhZF9zaGlmdCgyKSwhMSk7Q2k9SHQodnJbMF0uYyxEbi5yZWFkX3NoaWZ0KDIp'@;
put 'LCEwKSxtcj1IdCh2clswXS5yLERuLnJlYWRfc2hpZnQoMiksITEpLHJyLnB1c2goemkrd28rIjoiK0NpK21yKTticmVhaztjYXNlIDM6aWYoRG4ubDxEbi5sZW5ndGgpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiV0sxIHByZW1hdHVyZSBmb3JtdWxhIGVuZCIpO2JyZWFrO2Nhc2UgNDpy'@;
put 'ci5wdXNoKCIoIityci5wb3AoKSsiKSIpO2JyZWFrO2Nhc2UgNTpyci5wdXNoKERuLnJlYWRfc2hpZnQoMikpO2JyZWFrO2Nhc2UgNjpmb3IodmFyIE9pPSIiO3pyPURuW0RuLmwrK107KU9pKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHpyKTtyci5wdXNoKCciJytPaS5yZXBsYWNlKC8iL2csJyIi'@;
put 'JykrJyInKTticmVhaztjYXNlIDg6cnIucHVzaCgiLSIrcnIucG9wKCkpO2JyZWFrO2Nhc2UgMjM6cnIucHVzaCgiKyIrcnIucG9wKCkpO2JyZWFrO2Nhc2UgMjI6cnIucHVzaCgiTk9UKCIrcnIucG9wKCkrIikiKTticmVhaztjYXNlIDIwOmNhc2UgMjE6dmFyIFhvPXJyLnBvcCgpLGZvPXJy'@;
put 'LnBvcCgpO3JyLnB1c2goWyJBTkQiLCJPUiJdW3pyLTIwXSsiKCIrZm8rIiwiK1hvKyIpIik7YnJlYWs7ZGVmYXVsdDppZih6cjwzMiYmWXRbenJdKVhvPXJyLnBvcCgpLGZvPXJyLnBvcCgpLHJyLnB1c2goZm8rWXRbenJdK1hvKTtlbHNle2lmKCFUdFt6cl0pcmV0dXJuIHpyPD03P2NvbnNv'@;
put 'bGUuZXJyb3IoIldLMSBpbnZhbGlkIG9wY29kZSAiK3pyLnRvU3RyaW5nKDE2KSk6enI8PTI0P2NvbnNvbGUuZXJyb3IoIldLMSB1bnN1cHBvcnRlZCBvcCAiK3pyLnRvU3RyaW5nKDE2KSk6enI8PTMwP2NvbnNvbGUuZXJyb3IoIldLMSBpbnZhbGlkIG9wY29kZSAiK3pyLnRvU3RyaW5nKDE2'@;
put 'KSk6enI8PTExNT9jb25zb2xlLmVycm9yKCJXSzEgdW5zdXBwb3J0ZWQgZnVuY3Rpb24gb3Bjb2RlICIrenIudG9TdHJpbmcoMTYpKTpjb25zb2xlLmVycm9yKCJXSzEgdW5yZWNvZ25pemVkIG9wY29kZSAiK3pyLnRvU3RyaW5nKDE2KSk7aWYoNjk9PSh4bj1UdFt6cl1bMV0pJiYoeG49RG5b'@;
put 'RG4ubCsrXSkseG4+cnIubGVuZ3RoKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIldLMSBiYWQgZm9ybXVsYSBwYXJzZSAweCIrenIudG9TdHJpbmcoMTYpKyI6fCIrcnIuam9pbigifCIpKyJ8Iik7dmFyIFJvPXJyLnNsaWNlKC14bik7cnIubGVuZ3RoLT14bixyci5wdXNoKFR0W3pyXVsw'@;
put 'XSsiKCIrUm8uam9pbigiLCIpKyIpIil9fX0xPT1yci5sZW5ndGg/dnJbMV0uZj0iIityclswXTpjb25zb2xlLmVycm9yKCJXSzEgYmFkIGZvcm11bGEgcGFyc2UgfCIrcnIuam9pbigifCIpKyJ8Iil9KShEbi5zbGljZShEbi5sLERuLmwrQ2kpLG1yKSxEbi5sKz1DaX1yZXR1cm4gbXJ9fSwy'@;
put 'NDp7bjoiVEFCTEUifSwyNTp7bjoiT1JBTkdFIn0sMjY6e246IlBSQU5HRSJ9LDI3OntuOiJTUkFOR0UifSwyODp7bjoiRlJBTkdFIn0sMjk6e246IktSQU5HRTEifSwzMjp7bjoiSFJBTkdFIn0sMzU6e246IktSQU5HRTIifSwzNjp7bjoiUFJPVEVDIn0sMzc6e246IkZPT1RFUiJ9LDM4Ontu'@;
put 'OiJIRUFERVIifSwzOTp7bjoiU0VUVVAifSw0MDp7bjoiTUFSR0lOUyJ9LDQxOntuOiJMQUJFTEZNVCJ9LDQyOntuOiJUSVRMRVMifSw0Mzp7bjoiU0hFRVRKUyJ9LDQ1OntuOiJHUkFQSCJ9LDQ2OntuOiJOR1JBUEgifSw0Nzp7bjoiQ0FMQ0NPVU5UIn0sNDg6e246IlVORk9STUFUVEVEIn0s'@;
put 'NDk6e246IkNVUlNPUlcxMiJ9LDUwOntuOiJXSU5ET1cifSw1MTp7bjoiU1RSSU5HIixmOlVlfSw1NTp7bjoiUEFTU1dPUkQifSw1Njp7bjoiTE9DS0VEIn0sNjA6e246IlFVRVJZIn0sNjE6e246IlFVRVJZTkFNRSJ9LDYyOntuOiJQUklOVCJ9LDYzOntuOiJQUklOVE5BTUUifSw2NDp7bjoi'@;
put 'R1JBUEgyIn0sNjU6e246IkdSQVBITkFNRSJ9LDY2OntuOiJaT09NIn0sNjc6e246IlNZTVNQTElUIn0sNjg6e246Ik5TUk9XUyJ9LDY5OntuOiJOU0NPTFMifSw3MDp7bjoiUlVMRVIifSw3MTp7bjoiTk5BTUUifSw3Mjp7bjoiQUNPTU0ifSw3Mzp7bjoiQU1BQ1JPIn0sNzQ6e246IlBBUlNF'@;
put 'In0sMTAyOntuOiJQUkFOR0VTPz8ifSwxMDM6e246IlJSQU5HRVM/PyJ9LDEwNDp7bjoiRk5BTUU/PyJ9LDEwNTp7bjoiTVJBTkdFUz8/In0sNjU1MzU6e246IiJ9fSxmcj17MDp7bjoiQk9GIn0sMTp7bjoiRU9GIn0sMjp7bjoiUEFTU1dPUkQifSwzOntuOiJDQUxDU0VUIn0sNDp7bjoiV0lO'@;
put 'RE9XU0VUIn0sNTp7bjoiU0hFRVRDRUxMUFRSIn0sNjp7bjoiU0hFRVRMQVlPVVQifSw3OntuOiJDT0xVTU5XSURUSCJ9LDg6e246IkhJRERFTkNPTFVNTiJ9LDk6e246IlVTRVJSQU5HRSJ9LDEwOntuOiJTWVNURU1SQU5HRSJ9LDExOntuOiJaRVJPRk9SQ0UifSwxMjp7bjoiU09SVEtFWURJ'@;
put 'UiJ9LDEzOntuOiJGSUxFU0VBTCJ9LDE0OntuOiJEQVRBRklMTE5VTVMifSwxNTp7bjoiUFJJTlRNQUlOIn0sMTY6e246IlBSSU5UU1RSSU5HIn0sMTc6e246IkdSQVBITUFJTiJ9LDE4OntuOiJHUkFQSFNUUklORyJ9LDE5OntuOiI/PyJ9LDIwOntuOiJFUlJDRUxMIn0sMjE6e246Ik5BQ0VM'@;
put 'TCJ9LDIyOntuOiJMQUJFTDE2IixmOmZ1bmN0aW9uIGZuKERuLHZyKXt2YXIgcnI9cW4oRG4pO3JldHVybiByclsxXS50PSJzIixyclsxXS52PURuLnJlYWRfc2hpZnQodnItNCwiY3N0ciIpLHJyfX0sMjM6e246Ik5VTUJFUjE3IixmOk9ufSwyNDp7bjoiTlVNQkVSMTgiLGY6ZnVuY3Rpb24g'@;
put 'em4oRG4sdnIpe3ZhciBycj1xbihEbik7cnJbMV0udj1Ebi5yZWFkX3NoaWZ0KDIpO3ZhciB4bj1yclsxXS52Pj4xO2lmKDEmcnJbMV0udilzd2l0Y2goNyZ4bil7Y2FzZSAwOnhuPTVlMyooeG4+PjMpO2JyZWFrO2Nhc2UgMTp4bj01MDAqKHhuPj4zKTticmVhaztjYXNlIDI6eG49KHhuPj4z'@;
put 'KS8yMDticmVhaztjYXNlIDM6eG49KHhuPj4zKS8yMDA7YnJlYWs7Y2FzZSA0OnhuPSh4bj4+MykvMmUzO2JyZWFrO2Nhc2UgNTp4bj0oeG4+PjMpLzJlNDticmVhaztjYXNlIDY6eG49KHhuPj4zKS8xNjticmVhaztjYXNlIDc6eG49KHhuPj4zKS82NH1yZXR1cm4gcnJbMV0udj14bixycn19'@;
put 'LDI1OntuOiJGT1JNVUxBMTkiLGY6ZnVuY3Rpb24gdHIoRG4sdnIpe3ZhciBycj1PbihEbik7cmV0dXJuIERuLmwrPXZyLTE0LHJyfX0sMjY6e246IkZPUk1VTEExQSJ9LDI3OntuOiJYRk9STUFUIixmOmZ1bmN0aW9uIEVpKERuLHZyKXtmb3IodmFyIHJyPXt9LHhuPURuLmwrdnI7RG4ubDx4'@;
put 'bjspe3ZhciBtcj1Ebi5yZWFkX3NoaWZ0KDIpO2lmKDE0ZTM9PW1yKXtmb3IocnJbbXJdPVswLCIiXSxyclttcl1bMF09RG4ucmVhZF9zaGlmdCgyKTtEbltEbi5sXTspcnJbbXJdWzFdKz1TdHJpbmcuZnJvbUNoYXJDb2RlKERuW0RuLmxdKSxEbi5sKys7RG4ubCsrfX1yZXR1cm4gcnJ9fSwy'@;
put 'ODp7bjoiRFRMQUJFTE1JU0MifSwyOTp7bjoiRFRMQUJFTENFTEwifSwzMDp7bjoiR1JBUEhXSU5ET1cifSwzMTp7bjoiQ1BBIn0sMzI6e246IkxQTEFVVE8ifSwzMzp7bjoiUVVFUlkifSwzNDp7bjoiSElEREVOU0hFRVQifSwzNTp7bjoiPz8ifSwzNzp7bjoiTlVNQkVSMjUiLGY6ZnVuY3Rp'@;
put 'b24gWW4oRG4sdnIpe3ZhciBycj1xbihEbikseG49RG4ucmVhZF9zaGlmdCg0KTtyZXR1cm4gcnJbMV0udj14bj4+Nixycn19LDM4OntuOiI/PyJ9LDM5OntuOiJOVU1CRVIyNyIsZjpqcn0sNDA6e246IkZPUk1VTEEyOCIsZjpmdW5jdGlvbiBsaShEbix2cil7dmFyIHJyPWpyKERuKTtyZXR1'@;
put 'cm4gRG4ubCs9dnItMTAscnJ9fSwxNDI6e246Ij8/In0sMTQ3OntuOiI/PyJ9LDE1MDp7bjoiPz8ifSwxNTE6e246Ij8/In0sMTUyOntuOiI/PyJ9LDE1Mzp7bjoiPz8ifSwxNTQ6e246Ij8/In0sMTU1OntuOiI/PyJ9LDE1Njp7bjoiPz8ifSwxNjM6e246Ij8/In0sMTc0OntuOiI/PyJ9LDE3'@;
put 'NTp7bjoiPz8ifSwxNzY6e246Ij8/In0sMTc3OntuOiI/PyJ9LDE4NDp7bjoiPz8ifSwxODU6e246Ij8/In0sMTg2OntuOiI/PyJ9LDE4Nzp7bjoiPz8ifSwxODg6e246Ij8/In0sMTk1OntuOiI/PyJ9LDIwMTp7bjoiPz8ifSwyMDU6e246Ij8/In0sMjA2OntuOiI/PyJ9LDIwNzp7bjoiPz8i'@;
put 'fSwyMDg6e246Ij8/In0sMjU2OntuOiI/PyJ9LDI1OTp7bjoiPz8ifSwyNjA6e246Ij8/In0sMjYxOntuOiI/PyJ9LDI2Mjp7bjoiPz8ifSwyNjM6e246Ij8/In0sMjY1OntuOiI/PyJ9LDI2Njp7bjoiPz8ifSwyNjc6e246Ij8/In0sMjY4OntuOiI/PyJ9LDI3MDp7bjoiPz8ifSwyNzE6e246'@;
put 'Ij8/In0sMzg0OntuOiI/PyJ9LDM4OTp7bjoiPz8ifSwzOTA6e246Ij8/In0sMzkzOntuOiI/PyJ9LDM5Njp7bjoiPz8ifSw1MTI6e246Ij8/In0sNTE0OntuOiI/PyJ9LDUxMzp7bjoiPz8ifSw1MTY6e246Ij8/In0sNTE3OntuOiI/PyJ9LDY0MDp7bjoiPz8ifSw2NDE6e246Ij8/In0sNjQy'@;
put 'OntuOiI/PyJ9LDY0Mzp7bjoiPz8ifSw2NDQ6e246Ij8/In0sNjQ1OntuOiI/PyJ9LDY0Njp7bjoiPz8ifSw2NDc6e246Ij8/In0sNjQ4OntuOiI/PyJ9LDY1ODp7bjoiPz8ifSw2NTk6e246Ij8/In0sNjYwOntuOiI/PyJ9LDY2MTp7bjoiPz8ifSw2NjI6e246Ij8/In0sNjY1OntuOiI/PyJ9'@;
put 'LDY2Njp7bjoiPz8ifSw3Njg6e246Ij8/In0sNzcyOntuOiI/PyJ9LDE2MDA6e246Ij8/In0sMTYwMjp7bjoiPz8ifSwxNzkzOntuOiI/PyJ9LDE3OTQ6e246Ij8/In0sMTc5NTp7bjoiPz8ifSwxNzk2OntuOiI/PyJ9LDE5MjA6e246Ij8/In0sMjA0ODp7bjoiPz8ifSwyMDQ5OntuOiI/PyJ9'@;
put 'LDIwNTI6e246Ij8/In0sMjY4ODp7bjoiPz8ifSwxMDk5ODp7bjoiPz8ifSwxMjg0OTp7bjoiPz8ifSwyODIzMzp7bjoiPz8ifSwyODQ4NDp7bjoiPz8ifSw2NTUzNTp7bjoiIn19O3JldHVybntzaGVldF90b193azE6ZnVuY3Rpb24gZWUoRG4sdnIpe3ZhciBycj12cnx8e307aWYoK3JyLmNv'@;
put 'ZGVwYWdlPj0wJiZ6KCtyci5jb2RlcGFnZSksInN0cmluZyI9PXJyLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgd3JpdGUgV0sxIHRvIEpTIHN0cmluZyIpO3ZhciB4bj1BdSgpLG1yPVBpKERuWyIhcmVmIl0pLENpPUFycmF5LmlzQXJyYXkoRG4pLHpyPVtdO1NpKHhuLDAsZnVuY3Rp'@;
put 'b24gZ2UoRG4pe3ZhciB2cj1wcigyKTtyZXR1cm4gdnIud3JpdGVfc2hpZnQoMixEbiksdnJ9KDEwMzApKSxTaSh4biw2LGZ1bmN0aW9uIE1lKERuKXt2YXIgdnI9cHIoOCk7cmV0dXJuIHZyLndyaXRlX3NoaWZ0KDIsRG4ucy5jKSx2ci53cml0ZV9zaGlmdCgyLERuLnMuciksdnIud3JpdGVf'@;
put 'c2hpZnQoMixEbi5lLmMpLHZyLndyaXRlX3NoaWZ0KDIsRG4uZS5yKSx2cn0obXIpKTtmb3IodmFyIHppPW1yLnMucjt6aTw9bXIuZS5yOysremkpZm9yKHZhciB3bz1WYSh6aSksT2k9bXIucy5jO09pPD1tci5lLmM7KytPaSl7emk9PT1tci5zLnImJih6cltPaV09QmEoT2kpKTt2YXIgZm89'@;
put 'Q2k/KERuW3ppXXx8W10pW09pXTpEblt6cltPaV0rd29dO2ZvJiYieiIhPWZvLnQmJigibiI9PWZvLnQ/KDB8Zm8udik9PWZvLnYmJmZvLnY+PS0zMjc2OCYmZm8udjw9MzI3Njc/U2koeG4sMTMsZnQoemksT2ksZm8udikpOlNpKHhuLDE0LHV0KHppLE9pLGZvLnYpKTpTaSh4biwxNSxYZSh6'@;
put 'aSxPaSxtYyhmbykuc2xpY2UoMCwyMzkpKSkpfXJldHVybiBTaSh4biwxKSx4bi5lbmQoKX0sYm9va190b193azM6ZnVuY3Rpb24gb2UoRG4sdnIpe3ZhciBycj12cnx8e307aWYoK3JyLmNvZGVwYWdlPj0wJiZ6KCtyci5jb2RlcGFnZSksInN0cmluZyI9PXJyLnR5cGUpdGhyb3cgbmV3IEVy'@;
put 'cm9yKCJDYW5ub3Qgd3JpdGUgV0szIHRvIEpTIHN0cmluZyIpO3ZhciB4bj1BdSgpO1NpKHhuLDAsZnVuY3Rpb24gX2UoRG4pe3ZhciB2cj1wcigyNik7dnIud3JpdGVfc2hpZnQoMiw0MDk2KSx2ci53cml0ZV9zaGlmdCgyLDQpLHZyLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKHZhciBycj0wLHhu'@;
put 'PTAsbXI9MCxDaT0wO0NpPERuLlNoZWV0TmFtZXMubGVuZ3RoOysrQ2kpe3ZhciB6aT1Ebi5TaGVldHNbRG4uU2hlZXROYW1lc1tDaV1dO2lmKHppJiZ6aVsiIXJlZiJdKXsrK21yO3ZhciB3bz1LYSh6aVsiIXJlZiJdKTtycjx3by5lLnImJihycj13by5lLnIpLHhuPHdvLmUuYyYmKHhuPXdv'@;
put 'LmUuYyl9fXJldHVybiB2ci53cml0ZV9zaGlmdCgyLHJyKSx2ci53cml0ZV9zaGlmdCgxLG1yKSx2ci53cml0ZV9zaGlmdCgxLHhuKSx2ci53cml0ZV9zaGlmdCgyLDApLHZyLndyaXRlX3NoaWZ0KDIsMCksdnIud3JpdGVfc2hpZnQoMSwxKSx2ci53cml0ZV9zaGlmdCgxLDIpLHZyLndyaXRl'@;
put 'X3NoaWZ0KDQsMCksdnIud3JpdGVfc2hpZnQoNCwwKSx2cn0oRG4pKTtmb3IodmFyIG1yPTAsQ2k9MDttcjxEbi5TaGVldE5hbWVzLmxlbmd0aDsrK21yKShEbi5TaGVldHNbRG4uU2hlZXROYW1lc1ttcl1dfHx7fSlbIiFyZWYiXSYmU2koeG4sMjcsSWkoRG4uU2hlZXROYW1lc1ttcl0sQ2kr'@;
put 'KykpO3ZhciB6cj0wO2Zvcihtcj0wO21yPERuLlNoZWV0TmFtZXMubGVuZ3RoOysrbXIpe3ZhciB6aT1Ebi5TaGVldHNbRG4uU2hlZXROYW1lc1ttcl1dO2lmKHppJiZ6aVsiIXJlZiJdKXtmb3IodmFyIHdvPVBpKHppWyIhcmVmIl0pLE9pPUFycmF5LmlzQXJyYXkoemkpLFhvPVtdLGZvPXdv'@;
put 'LnMucjtmbzw9d28uZS5yOysrZm8pZm9yKHZhciBSbz1WYShmbyksVG89d28ucy5jO1RvPD13by5lLmM7KytUbyl7Zm89PT13by5zLnImJihYb1tUb109QmEoVG8pKTt2YXIgcmw9T2k/KHppW2ZvXXx8W10pW1RvXTp6aVtYb1tUb10rUm9dO3JsJiYieiIhPXJsLnQmJigibiI9PXJsLnQ/U2ko'@;
put 'eG4sMjMsZXIoZm8sVG8senIscmwudikpOlNpKHhuLDIyLEtuKGZvLFRvLHpyLG1jKHJsKS5zbGljZSgwLDIzOSkpKSl9Kyt6cn19cmV0dXJuIFNpKHhuLDEpLHhuLmVuZCgpfSx0b193b3JrYm9vazpmdW5jdGlvbiBQKERuLHZyKXtzd2l0Y2godnIudHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVy'@;
put 'biBEKHgobGUuZGVjb2RlKERuKSksdnIpO2Nhc2UiYmluYXJ5IjpyZXR1cm4gRCh4KERuKSx2cik7Y2FzZSJidWZmZXIiOmNhc2UiYXJyYXkiOnJldHVybiBEKERuLHZyKX10aHJvdyJVbnN1cHBvcnRlZCB0eXBlICIrdnIudHlwZX19fSgpLHM4PWZ1bmN0aW9uKCl7dmFyIHc9Z3MoInQiKSxQ'@;
put 'PWdzKCJyUHIiKTtmdW5jdGlvbiBEKGdlKXt2YXIgX2U9Z2UubWF0Y2godyk7aWYoIV9lKXJldHVybnt0OiJzIix2OiIifTt2YXIgdmU9e3Q6InMiLHY6RXIoX2VbMV0pfSxNZT1nZS5tYXRjaChQKTtyZXR1cm4gTWUmJih2ZS5zPWZ1bmN0aW9uIE94KHcpe3ZhciBQPXt9LEQ9dy5tYXRjaChx'@;
put 'dCksZWU9MCxvZT0hMTtpZihEKWZvcig7ZWUhPUQubGVuZ3RoOysrZWUpe3ZhciBnZT1jbihEW2VlXSk7c3dpdGNoKGdlWzBdLnJlcGxhY2UoL1x3KjovZywiIikpe2Nhc2UiPGNvbmRlbnNlIjpjYXNlIjxleHRlbmQiOmJyZWFrO2Nhc2UiPHNoYWRvdyI6aWYoIWdlLnZhbClicmVhaztjYXNl'@;
put 'IjxzaGFkb3c+IjpjYXNlIjxzaGFkb3cvPiI6UC5zaGFkb3c9MTticmVhaztjYXNlIjwvc2hhZG93PiI6YnJlYWs7Y2FzZSI8Y2hhcnNldCI6aWYoIjEiPT1nZS52YWwpYnJlYWs7UC5jcD1JW3BhcnNlSW50KGdlLnZhbCwxMCldO2JyZWFrO2Nhc2UiPG91dGxpbmUiOmlmKCFnZS52YWwpYnJl'@;
put 'YWs7Y2FzZSI8b3V0bGluZT4iOmNhc2UiPG91dGxpbmUvPiI6UC5vdXRsaW5lPTE7YnJlYWs7Y2FzZSI8L291dGxpbmU+IjpicmVhaztjYXNlIjxyRm9udCI6UC5uYW1lPWdlLnZhbDticmVhaztjYXNlIjxzeiI6UC5zej1nZS52YWw7YnJlYWs7Y2FzZSI8c3RyaWtlIjppZighZ2UudmFsKWJy'@;
put 'ZWFrO2Nhc2UiPHN0cmlrZT4iOmNhc2UiPHN0cmlrZS8+IjpQLnN0cmlrZT0xO2JyZWFrO2Nhc2UiPC9zdHJpa2U+IjpicmVhaztjYXNlIjx1IjppZighZ2UudmFsKWJyZWFrO3N3aXRjaChnZS52YWwpe2Nhc2UiZG91YmxlIjpQLnVuZGVybGluZT0yO2JyZWFrO2Nhc2Uic2luZ2xlQWNjb3Vu'@;
put 'dGluZyI6UC51bmRlcmxpbmU9MzM7YnJlYWs7Y2FzZSJkb3VibGVBY2NvdW50aW5nIjpQLnVuZGVybGluZT0zNH1jYXNlIjx1PiI6Y2FzZSI8dS8+IjpQLnVuZGVybGluZXx8KFAudW5kZXJsaW5lPTEpO2JyZWFrO2Nhc2UiPC91PiI6YnJlYWs7Y2FzZSI8YiI6aWYoIjAiPT1nZS52YWwpYnJl'@;
put 'YWs7Y2FzZSI8Yj4iOmNhc2UiPGIvPiI6UC5ib2xkPTE7YnJlYWs7Y2FzZSI8L2I+IjpicmVhaztjYXNlIjxpIjppZigiMCI9PWdlLnZhbClicmVhaztjYXNlIjxpPiI6Y2FzZSI8aS8+IjpQLml0YWxpYz0xO2JyZWFrO2Nhc2UiPC9pPiI6YnJlYWs7Y2FzZSI8Y29sb3IiOmdlLnJnYiYmKFAu'@;
put 'Y29sb3I9e3JnYjo4PT1nZS5yZ2IubGVuZ3RoP2dlLnJnYi5zbGljZSgyLDgpOigiMDAwMDAwIitnZS5yZ2IpLnNsaWNlKC02KX0pO2JyZWFrO2Nhc2UiPGZhbWlseSI6UC5mYW1pbHk9Z2UudmFsO2JyZWFrO2Nhc2UiPHZlcnRBbGlnbiI6Im5vbmUiIT0oZ2UudmFsfHwibm9uZSIpJiYoUC52'@;
put 'YWxpZ249Z2UudmFsLnJlcGxhY2UoInNjcmlwdCIsIiIpKTticmVhaztjYXNlIjxzY2hlbWUiOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGV4dCI6b2U9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOm9lPSExO2JyZWFrO2RlZmF1bHQ6aWYo'@;
put 'NDchPT1nZVswXS5jaGFyQ29kZUF0KDEpJiYhb2UpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgcmljaCBmb3JtYXQgIitnZVswXSl9fXJldHVybiBQfShNZVsxXSkpLHZlfXZhciBlZT0vPCg/Olx3KzopP3I+L2csb2U9LzxcLyg/Olx3KzopP3I+LztyZXR1cm4gZnVuY3Rpb24oX2Up'@;
put 'e3JldHVybiBfZS5yZXBsYWNlKGVlLCIiKS5zcGxpdChvZSkubWFwKEQpLmZpbHRlcihmdW5jdGlvbih2ZSl7cmV0dXJuIHZlLnZ9KX19KCksY2Y9ezE6InNpbmdsZSIsMjoiZG91YmxlIiwzMzoic2luZ2xlLWFjY291bnRpbmciLDM0OiJkb3VibGUtYWNjb3VudGluZyJ9LHVfPWZ1bmN0aW9u'@;
put 'KCl7dmFyIFA9LyhcclxufFxuKS9nO2Z1bmN0aW9uIGVlKG9lKXt2YXIgZ2U9W1tdLG9lLnYsW11dO3JldHVybiBvZS52PyhvZS5zJiZmdW5jdGlvbiBEKG9lLGdlLF9lKXt2YXIgdmU9W107b2UudW5kZXJsaW5lJiZ2ZS5wdXNoKCJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiKSxvZS51'@;
put 'bmRlcmxpbmU+MSYmdmUucHVzaCgidGV4dC11bmRlcmxpbmUtc3R5bGU6IitjZltvZS51bmRlcmxpbmVdKyI7Iiksb2Uuc3omJnZlLnB1c2goImZvbnQtc2l6ZToiK29lLnN6KyJwdDsiKSxvZS5vdXRsaW5lJiZ2ZS5wdXNoKCJ0ZXh0LWVmZmVjdDogb3V0bGluZTsiKSxvZS5zaGFkb3cmJnZl'@;
put 'LnB1c2goInRleHQtc2hhZG93OiBhdXRvOyIpLG9lLmNvbG9yJiZvZS5jb2xvci5yZ2ImJnZlLnB1c2goImNvbG9yOiAjIitVYyhvZS5jb2xvci5yZ2IpKyI7IiksZ2UucHVzaCgnPHNwYW4gc3R5bGU9IicrdmUuam9pbigiIikrJyI+Jyksb2UuYm9sZCYmKGdlLnB1c2goIjxiPiIpLF9lLnB1'@;
put 'c2goIjwvYj4iKSksb2UuaXRhbGljJiYoZ2UucHVzaCgiPGk+IiksX2UucHVzaCgiPC9pPiIpKSxvZS5zdHJpa2UmJihnZS5wdXNoKCI8cz4iKSxfZS5wdXNoKCI8L3M+IikpO3ZhciBNZT1vZS52YWxpZ258fCIiOyJzdXBlcnNjcmlwdCI9PU1lfHwic3VwZXIiPT1NZT9NZT0ic3VwIjoic3Vi'@;
put 'c2NyaXB0Ij09TWUmJihNZT0ic3ViIiksIiIhPU1lJiYoZ2UucHVzaCgiPCIrTWUrIj4iKSxfZS5wdXNoKCI8LyIrTWUrIj4iKSksX2UucHVzaCgiPC9zcGFuPiIpfShvZS5zLGdlWzBdLGdlWzJdKSxnZVswXS5qb2luKCIiKStnZVsxXS5yZXBsYWNlKFAsIjxici8+IikrZ2VbMl0uam9pbigi'@;
put 'IikpOiIifXJldHVybiBmdW5jdGlvbihnZSl7cmV0dXJuIGdlLm1hcChlZSkuam9pbigiIil9fSgpO2Z1bmN0aW9uIHcyKHcpe3JldHVybiB3Lm1hcChmdW5jdGlvbihEKXtyZXR1cm4gZnVuY3Rpb24gdTgodyl7dmFyIFA9IiIsRD1bXTtyZXR1cm4gdy5zJiYody5zLmJvbGQmJkQucHVzaCgi'@;
put 'PGIvPiIpLHcucy5pdGFsaWMmJkQucHVzaCgiPGkvPiIpLHcucy5zdHJpa2UmJkQucHVzaCgiPHN0cmlrZS8+Iiksdy5zLnVuZGVybGluZSYmRC5wdXNoKCc8dSB2YWw9IicrKGI4W3cucy51bmRlcmxpbmVdfHwic2luZ2xlIikrJyIvPicpLHcucy5jb2xvciYmRC5wdXNoKGxkKHcucy5jb2xv'@;
put 'cikpLHcucy5zeiYmRC5wdXNoKCc8c3ogdmFsPSInK3cucy5zeisnIi8+Jyksdy5zLm5hbWUmJkQucHVzaCgnPHJGb250IHZhbD0iJyt3LnMubmFtZSsnIi8+JyksKCJzdXBlciI9PXcucy52YWxpZ258fCJzdWIiPT13LnMudmFsaWduKSYmRC5wdXNoKCc8dmVydEFsaWduIHZhbD0iJyt3LnMu'@;
put 'dmFsaWduKydzY3JpcHQiLz4nKSksRC5sZW5ndGgmJihQKz0iPHJQcj4iK0Quam9pbigiIikrIjwvclByPiIpLCI8cj4iKyhQKz1NcigidCIsQnIody52KSxudWxsKSkrIjwvcj4ifShEKX0pLmpvaW4oIiIpfXZhciBEeD0vPCg/Olx3KzopP3RbXj5dKj4oW148XSopPFwvKD86XHcrOik/dD4v'@;
put 'ZyxjXz0vPCg/Olx3KzopP3JcYltePl0qPi8sZl89LzwoPzpcdys6KT9yUGguKj8+KFtcc1xTXSo/KTxcLyg/Olx3KzopP3JQaD4vZztmdW5jdGlvbiBkXyh3LFApe3ZhciBEPSFQfHxQLmNlbGxIVE1MLGVlPXt9O3JldHVybiB3Pyh3Lm1hdGNoKC9eXHMqPCg/Olx3KzopP3RbXj5dKj4vKT8o'@;
put 'ZWUudD1FcihGaSh3LnNsaWNlKHcuaW5kZXhPZigiPiIpKzEpLnNwbGl0KC88XC8oPzpcdys6KT90Pi8pWzBdfHwiIikpLGVlLnI9RmkodyksRCYmKGVlLmg9bG8oZWUudCkpKTp3Lm1hdGNoKGNfKSYmKGVlLnI9RmkodyksZWUudD1FcihGaSgody5yZXBsYWNlKGZfLCIiKS5tYXRjaChEeCl8'@;
put 'fFtdKS5qb2luKCIiKS5yZXBsYWNlKHF0LCIiKSkpLGVlLlI9czgoZWUuciksRCYmKGVlLmg9dV8oZWUuUikpKSxlZSk6e3Q6IiJ9fXZhciBJeD0vPCg/Olx3KzopP3NzdChbXj5dKik+KFtcc1xTXSopPFwvKD86XHcrOik/c3N0Pi8sUng9LzwoPzpcdys6KT8oPzpzaXxzc3RJdGVtKT4vZyxM'@;
put 'eD0vPFwvKD86XHcrOik/KD86c2l8c3N0SXRlbSk+LztOaS5TU1Q9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvc2hhcmVkU3RyaW5ncyI7dmFyIEpGPS9eXHN8XHMkfFtcdFxuXHJdLztmdW5jdGlvbiBjOCh3LFAp'@;
put 'e2lmKCFQLmJvb2tTU1QpcmV0dXJuIiI7dmFyIEQ9W0JuXTtEW0QubGVuZ3RoXT1Ncigic3N0IixudWxsLHt4bWxuczpzYS5tYWluWzBdLGNvdW50OncuQ291bnQsdW5pcXVlQ291bnQ6dy5VbmlxdWV9KTtmb3IodmFyIGVlPTA7ZWUhPXcubGVuZ3RoOysrZWUpaWYobnVsbCE9d1tlZV0pe3Zh'@;
put 'ciBvZT13W2VlXSxnZT0iPHNpPiI7b2Uucj9nZSs9b2UucjooZ2UrPSI8dCIsb2UudHx8KG9lLnQ9IiIpLG9lLnQubWF0Y2goSkYpJiYoZ2UrPScgeG1sOnNwYWNlPSJwcmVzZXJ2ZSInKSxnZSs9Ij4iK0JyKG9lLnQpKyI8L3Q+IiksRFtELmxlbmd0aF09Z2UrPSI8L3NpPiJ9cmV0dXJuIEQu'@;
put 'bGVuZ3RoPjImJihEW0QubGVuZ3RoXT0iPC9zc3Q+IixEWzFdPURbMV0ucmVwbGFjZSgiLz4iLCI+IikpLEQuam9pbigiIil9dmFyIEh4PWZ1bmN0aW9uIEsxKHcsUCxEKXt2YXIgZWU9MTMrNCp3LnQubGVuZ3RoLG9lPXcuUiYmdy5SLmxlbmd0aHx8dy5yO3cuciYmKHcuUj1zOCh3LnIpKSxv'@;
put 'ZSYmKGVlKz00KzQqdy5SLmxlbmd0aCk7dmFyIGdlPSExO2lmKG51bGw9PUQmJihnZT0hMCxEPXByKGVlKSksRC53cml0ZV9zaGlmdCgxLG9lPzE6MCksY3Uody50LEQpLG9lKXtELndyaXRlX3NoaWZ0KDQsdy5SLmxlbmd0aCk7Zm9yKHZhciBfZT0wLHZlPTA7dmU8dy5SLmxlbmd0aDsrK3Zl'@;
put 'KXt2YXIgTWU9dy5SW3ZlXTtELndyaXRlX3NoaWZ0KDIsX2UpLF9lKz0oTWUudnx8IiIpLmxlbmd0aDt2YXIgamU9TWUucz93YyhQLmNlbGxYZnMsUC5jZWxsU3R5bGVYZnMse3Q6Im4iLHY6MCxzOk1lLnN9LFApOjA7RC53cml0ZV9zaGlmdCgyLFAuY2VsbFhmc1tqZV0uZm9udElkKX19cmV0'@;
put 'dXJuIGdlP0Quc2xpY2UoMCxELmwpOkR9O2Z1bmN0aW9uIHZwKHcsUCl7dmFyIEQ9QXUoKTtoaShELCJCcnRCZWdpblNzdCIsZnVuY3Rpb24gRngodyxQKXtyZXR1cm4gUHx8KFA9cHIoOCkpLFAud3JpdGVfc2hpZnQoNCx3LkNvdW50KSxQLndyaXRlX3NoaWZ0KDQsdy5VbmlxdWUpLFB9KHcp'@;
put 'KTtmb3IodmFyIGVlPTA7ZWU8dy5sZW5ndGg7KytlZSloaShELCJCcnRTU1RJdGVtIixIeCh3W2VlXSxQKSk7cmV0dXJuIGhpKEQsIkJydEVuZFNzdCIpLEQuZW5kKCl9ZnVuY3Rpb24geGwodyl7aWYodHlwZW9mIGNwdGFibGU8InUiKXJldHVybiBjcHRhYmxlLnV0aWxzLmVuY29kZShMLHcp'@;
put 'O2Zvcih2YXIgUD1bXSxEPXcuc3BsaXQoIiIpLGVlPTA7ZWU8RC5sZW5ndGg7KytlZSlQW2VlXT1EW2VlXS5jaGFyQ29kZUF0KDApO3JldHVybiBQfWZ1bmN0aW9uIGwxKHcsUCl7dmFyIEQ9e307cmV0dXJuIEQuTWFqb3I9dy5yZWFkX3NoaWZ0KDIpLEQuTWlub3I9dy5yZWFkX3NoaWZ0KDIp'@;
put 'LFA+PTQmJih3LmwrPVAtNCksRH1mdW5jdGlvbiBOeCh3KXtmb3IodmFyIFA9dy5yZWFkX3NoaWZ0KDQpLEQ9dy5sK1AtNCxlZT17fSxvZT13LnJlYWRfc2hpZnQoNCksZ2U9W107b2UtLSA+MDspZ2UucHVzaCh7dDp3LnJlYWRfc2hpZnQoNCksdjp3LnJlYWRfc2hpZnQoMCwibHBwNCIpfSk7'@;
put 'aWYoZWUubmFtZT13LnJlYWRfc2hpZnQoMCwibHBwNCIpLGVlLmNvbXBzPWdlLHcubCE9RCl0aHJvdyBuZXcgRXJyb3IoIkJhZCBEYXRhU3BhY2VNYXBFbnRyeTogIit3LmwrIiAhPSAiK0QpO3JldHVybiBlZX1mdW5jdGlvbiBoXyh3LFApe3ZhciBEPXcubCtQLGVlPXt9O2VlLkZsYWdzPTYz'@;
put 'JncucmVhZF9zaGlmdCg0KSx3LmwrPTQsZWUuQWxnSUQ9dy5yZWFkX3NoaWZ0KDQpO3ZhciBvZT0hMTtzd2l0Y2goZWUuQWxnSUQpe2Nhc2UgMjYxMjY6Y2FzZSAyNjEyNzpjYXNlIDI2MTI4Om9lPTM2PT1lZS5GbGFnczticmVhaztjYXNlIDI2NjI1Om9lPTQ9PSg1MiZlZS5GbGFncyk7YnJl'@;
put 'YWs7Y2FzZSAwOm9lPTE2PT1lZS5GbGFnc3x8ND09ZWUuRmxhZ3N8fDM2PT1lZS5GbGFnczticmVhaztkZWZhdWx0OnRocm93IlVucmVjb2duaXplZCBlbmNyeXB0aW9uIGFsZ29yaXRobTogIitlZS5BbGdJRH1pZighb2UpdGhyb3cgbmV3IEVycm9yKCJFbmNyeXB0aW9uIEZsYWdzL0FsZ0lE'@;
put 'IG1pc21hdGNoIik7cmV0dXJuIGVlLkFsZ0lESGFzaD13LnJlYWRfc2hpZnQoNCksZWUuS2V5U2l6ZT13LnJlYWRfc2hpZnQoNCksZWUuUHJvdmlkZXJUeXBlPXcucmVhZF9zaGlmdCg0KSx3LmwrPTgsZWUuQ1NQTmFtZT13LnJlYWRfc2hpZnQoRC13Lmw+PjEsInV0ZjE2bGUiKSx3Lmw9RCxl'@;
put 'ZX1mdW5jdGlvbiBmOCh3LFApe3ZhciBEPXt9LGVlPXcubCtQO3JldHVybiB3LmwrPTQsRC5TYWx0PXcuc2xpY2Uody5sLHcubCsxNiksdy5sKz0xNixELlZlcmlmaWVyPXcuc2xpY2Uody5sLHcubCsxNiksdy5sKz0xNix3LnJlYWRfc2hpZnQoNCksRC5WZXJpZmllckhhc2g9dy5zbGljZSh3'@;
put 'LmwsZWUpLHcubD1lZSxEfWZ1bmN0aW9uIFBRKHcpe2lmKDM2IT0oNjMmdy5yZWFkX3NoaWZ0KDQpKSl0aHJvdyBuZXcgRXJyb3IoIkVuY3J5cHRpb25JbmZvIG1pc21hdGNoIik7dmFyIEQ9dy5yZWFkX3NoaWZ0KDQpO3JldHVybnt0OiJTdGQiLGg6aF8odyxEKSx2OmY4KHcsdy5sZW5ndGgt'@;
put 'dy5sKX19ZnVuY3Rpb24gbkgoKXt0aHJvdyBuZXcgRXJyb3IoIkZpbGUgaXMgcGFzc3dvcmQtcHJvdGVjdGVkOiBFQ01BLTM3NiBFeHRlbnNpYmxlIil9ZnVuY3Rpb24gRlEodyl7dmFyIFA9WyJzYWx0U2l6ZSIsImJsb2NrU2l6ZSIsImtleUJpdHMiLCJoYXNoU2l6ZSIsImNpcGhlckFsZ29y'@;
put 'aXRobSIsImNpcGhlckNoYWluaW5nIiwiaGFzaEFsZ29yaXRobSIsInNhbHRWYWx1ZSJdO3cubCs9NDt2YXIgRD13LnJlYWRfc2hpZnQody5sZW5ndGgtdy5sLCJ1dGY4IiksZWU9e307cmV0dXJuIEQucmVwbGFjZShxdCxmdW5jdGlvbihnZSl7dmFyIF9lPWNuKGdlKTtzd2l0Y2goam4oX2Vb'@;
put 'MF0pKXtjYXNlIjw/eG1sIjpjYXNlIjxlbmNyeXB0aW9uIjpjYXNlIjwvZW5jcnlwdGlvbj4iOmNhc2UiPC9rZXlFbmNyeXB0b3JzPiI6Y2FzZSI8L2tleUVuY3J5cHRvcj4iOmJyZWFrO2Nhc2UiPGtleURhdGEiOlAuZm9yRWFjaChmdW5jdGlvbih2ZSl7ZWVbdmVdPV9lW3ZlXX0pO2JyZWFr'@;
put 'O2Nhc2UiPGRhdGFJbnRlZ3JpdHkiOmVlLmVuY3J5cHRlZEhtYWNLZXk9X2UuZW5jcnlwdGVkSG1hY0tleSxlZS5lbmNyeXB0ZWRIbWFjVmFsdWU9X2UuZW5jcnlwdGVkSG1hY1ZhbHVlO2JyZWFrO2Nhc2UiPGtleUVuY3J5cHRvcnM+IjpjYXNlIjxrZXlFbmNyeXB0b3JzIjplZS5lbmNzPVtd'@;
put 'O2JyZWFrO2Nhc2UiPGtleUVuY3J5cHRvciI6ZWUudXJpPV9lLnVyaTticmVhaztjYXNlIjxlbmNyeXB0ZWRLZXkiOmVlLmVuY3MucHVzaChfZSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBfZVswXX19KSxlZX1mdW5jdGlvbiBWeCh3KXt2YXIgRCxnZSxQPTAsZWU9eGwodyksb2U9ZWUubGVuZ3Ro'@;
put 'KzE7Zm9yKChEPVkob2UpKVswXT1lZS5sZW5ndGgsZ2U9MTtnZSE9b2U7KytnZSlEW2dlXT1lZVtnZS0xXTtmb3IoZ2U9b2UtMTtnZT49MDstLWdlKVA9KCgxNjM4NCZQPzE6MCl8UDw8MSYzMjc2NyleRFtnZV07cmV0dXJuIDUyODExXlB9dmFyIHJIPWZ1bmN0aW9uKCl7dmFyIHc9WzE4Nywy'@;
put 'NTUsMjU1LDE4NiwyNTUsMjU1LDE4NSwxMjgsMCwxOTAsMTUsMCwxOTEsMTUsMF0sUD1bNTc4NDAsNzQzOSw1MjM4MCwzMzk4NCw0MzY0LDM2MDAsNjE5MDIsMTI2MDYsNjI1OCw1NzY1Nyw1NDI4NywzNDA0MSwxMDI1Miw0MzM3MCwyMDE2M10sRD1bNDQ3OTYsMTk5MjksMzk4NTgsMTAwNTMs'@;
put 'MjAxMDYsNDAyMTIsMTA3NjEsMzE1ODUsNjMxNzAsNjQ5MzMsNjAyNjcsNTA5MzUsNDAzOTksMTExOTksMTc3NjMsMzU1MjYsMTQ1MywyOTA2LDU4MTIsMTE2MjQsMjMyNDgsODg1LDE3NzAsMzU0MCw3MDgwLDE0MTYwLDI4MzIwLDU2NjQwLDU1MzY5LDQxMTM5LDIwODA3LDQxNjE0LDIxODIx'@;
put 'LDQzNjQyLDE3NjIxLDI4NDg1LDU2OTcwLDQ0MzQxLDE5MDE5LDM4MDM4LDE0NjA1LDI5MjEwLDYwMTk1LDUwNzkxLDQwMTc1LDEwNzUxLDIxNTAyLDQzMDA0LDI0NTM3LDE4Mzg3LDM2Nzc0LDM5NDksNzg5OCwxNTc5NiwzMTU5Miw2MzE4NCw0NzIwMSwyNDgwMyw0OTYwNiwzNzgwNSwxNDIw'@;
put 'MywyODQwNiw1NjgxMiwxNzgyNCwzNTY0OCwxNjk3LDMzOTQsNjc4OCwxMzU3NiwyNzE1Miw0MzYwMSwxNzUzOSwzNTA3OCw1NTcsMTExNCwyMjI4LDQ0NTYsMzAzODgsNjA3NzYsNTE5NTMsMzQyNDMsNzA3OSwxNDE1OCwyODMxNiwxNDEyOCwyODI1Niw1NjUxMiw0MzQyNSwxNzI1MSwzNDUw'@;
put 'Miw3NTk3LDEzMTA1LDI2MjEwLDUyNDIwLDM1MjQxLDg4MywxNzY2LDM1MzIsNDEyOSw4MjU4LDE2NTE2LDMzMDMyLDQ2NTcsOTMxNCwxODYyOF0sb2U9ZnVuY3Rpb24oX2UsdmUpe3JldHVybiBmdW5jdGlvbihfZSl7cmV0dXJuIDI1NSYoX2U+PjF8X2U8PDcpfShfZV52ZSl9O3JldHVybiBm'@;
put 'dW5jdGlvbih2ZSl7Zm9yKHZhciBNZT14bCh2ZSksamU9ZnVuY3Rpb24oX2Upe2Zvcih2YXIgdmU9UFtfZS5sZW5ndGgtMV0sTWU9MTA0LGplPV9lLmxlbmd0aC0xO2plPj0wOy0tamUpZm9yKHZhciBVZT1fZVtqZV0sWGU9MDs3IT1YZTsrK1hlKTY0JlVlJiYodmVePURbTWVdKSxVZSo9Miwt'@;
put 'LU1lO3JldHVybiB2ZX0oTWUpLFVlPU1lLmxlbmd0aCxYZT1ZKDE2KSxpdD0wOzE2IT1pdDsrK2l0KVhlW2l0XT0wO3ZhciB1dDtmb3IoMT09KDEmVWUpJiYoWGVbVWVdPW9lKHdbMF0samU+PjgpLFhlWy0tVWVdPW9lKE1lW01lLmxlbmd0aC0xXSwyNTUmamUpKTtVZT4wOylYZVstLVVlXT1v'@;
put 'ZShNZVtVZV0samU+PjgpLFhlWy0tVWVdPW9lKE1lW1VlXSwyNTUmamUpO2ZvcihVZT0xNSx1dD0xNS1NZS5sZW5ndGg7dXQ+MDspWGVbVWVdPW9lKHdbdXRdLGplPj44KSwtLXV0LFhlWy0tVWVdPW9lKE1lW1VlXSwyNTUmamUpLC0tVWUsLS11dDtyZXR1cm4gWGV9fSgpO3ZhciBkOD1mdW5j'@;
put 'dGlvbigpe2Z1bmN0aW9uIHcob2UsZ2Upe3N3aXRjaChnZS50eXBlKXtjYXNlImJhc2U2NCI6cmV0dXJuIFAobGUuZGVjb2RlKG9lKSxnZSk7Y2FzZSJiaW5hcnkiOnJldHVybiBQKG9lLGdlKTtjYXNlImJ1ZmZlciI6cmV0dXJuIFAob2UudG9TdHJpbmcoImJpbmFyeSIpLGdlKTtjYXNlImFy'@;
put 'cmF5IjpyZXR1cm4gUChBdChvZSksZ2UpfXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitnZS50eXBlKX1mdW5jdGlvbiBQKG9lLGdlKXt2YXIgdmU9KGdlfHx7fSkuZGVuc2U/W106e307aWYoIW9lLm1hdGNoKC9cXHRyb3dkLykpdGhyb3cgbmV3IEVycm9yKCJSVEYgbWlz'@;
put 'c2luZyB0YWJsZSIpO3JldHVybiB2ZVsiIXJlZiJdPVZvKHtzOntjOjAscjowfSxlOntjOjAscjowfX0pLHZlfXJldHVybnt0b193b3JrYm9vazpmdW5jdGlvbiBEKG9lLGdlKXtyZXR1cm4gWmYodyhvZSxnZSksZ2UpfSx0b19zaGVldDp3LGZyb21fc2hlZXQ6ZnVuY3Rpb24gZWUob2Upe2Zv'@;
put 'cih2YXIgdmUsZ2U9WyJ7XFxydGYxXFxhbnNpIl0sX2U9UGkob2VbIiFyZWYiXSksTWU9QXJyYXkuaXNBcnJheShvZSksamU9X2Uucy5yO2plPD1fZS5lLnI7KytqZSl7Z2UucHVzaCgiXFx0cm93ZFxcdHJhdXRvZml0MSIpO2Zvcih2YXIgVWU9X2Uucy5jO1VlPD1fZS5lLmM7KytVZSlnZS5w'@;
put 'dXNoKCJcXGNlbGx4IisoVWUrMSkpO2ZvcihnZS5wdXNoKCJcXHBhcmRcXGludGJsIiksVWU9X2Uucy5jO1VlPD1fZS5lLmM7KytVZSl7dmFyIFhlPXBpKHtyOmplLGM6VWV9KTsodmU9TWU/KG9lW2plXXx8W10pW1VlXTpvZVtYZV0pJiYobnVsbCE9dmUudnx8dmUuZiYmIXZlLkYpJiYoZ2Uu'@;
put 'cHVzaCgiICIrKHZlLnd8fChtYyh2ZSksdmUudykpKSxnZS5wdXNoKCJcXGNlbGwiKSl9Z2UucHVzaCgiXFxwYXJkXFxpbnRibFxccm93Iil9cmV0dXJuIGdlLmpvaW4oIiIpKyJ9In19fSgpO2Z1bmN0aW9uIFMyKHcpe3ZhciBQPXcuc2xpY2UoIiMiPT09d1swXT8xOjApLnNsaWNlKDAsNik7'@;
put 'cmV0dXJuW3BhcnNlSW50KFAuc2xpY2UoMCwyKSwxNikscGFyc2VJbnQoUC5zbGljZSgyLDQpLDE2KSxwYXJzZUludChQLnNsaWNlKDQsNiksMTYpXX1mdW5jdGlvbiBmZih3KXtmb3IodmFyIFA9MCxEPTE7MyE9UDsrK1ApRD0yNTYqRCsod1tQXT4yNTU/MjU1OndbUF08MD8wOndbUF0pO3Jl'@;
put 'dHVybiBELnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLnNsaWNlKDEpfWZ1bmN0aW9uIHMxKHcsUCl7aWYobnVsbD09dylyZXR1cm4gbnVsbCE9UDtpZihudWxsPT1QKXJldHVybiEwO2lmKDE9PXcuYXV0byYmMT09UC5hdXRvKXJldHVybiExO2lmKCEhdy5hdXRvIT0hIVAuYXV0b3x8bnVs'@;
put 'bD09dy50aGVtZSE9KG51bGw9PVAudGhlbWUpKXJldHVybiEwO2lmKG51bGwhPXcudGhlbWUpcmV0dXJuIHcudGhlbWUhPVAudGhlbWV8fHcudGludCE9UC50aW50O2lmKG51bGw9PXcucmdiJiZudWxsPT1QLnJnYilyZXR1cm4hMTt2YXIgRD13LnJnYjsibnVtYmVyIj09dHlwZW9mIEQmJihE'@;
put 'PUQudG9TdHJpbmcoMTYpKSxEPUQuc2xpY2UoLTYpO3ZhciBlZT1QLnJnYjtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGVlJiYoZWU9ZWUudG9TdHJpbmcoMTYpKSxlZT1lZS5zbGljZSgtNiksRC50b0xvd2VyQ2FzZSgpIT1lZS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGg4KHcsUCl7cmV0dXJu'@;
put 'IG51bGw9PXc/bnVsbCE9UDpudWxsPT1QP251bGwhPXc6dy5zdHlsZSE9UC5zdHlsZXx8czEody5jb2xvcixQLmNvbG9yKX1mdW5jdGlvbiBpZCh3LFApe2lmKDA9PT1QKXJldHVybiB3O3ZhciBEPWZ1bmN0aW9uIGswKHcpe3ZhciBQPXdbMF0vMjU1LEQ9d1sxXS8yNTUsZWU9d1syXS8yNTUs'@;
put 'b2U9TWF0aC5tYXgoUCxELGVlKSxnZT1NYXRoLm1pbihQLEQsZWUpLF9lPW9lLWdlO2lmKDA9PT1fZSlyZXR1cm5bMCwwLFBdO3ZhciBNZSx2ZT0wLGplPW9lK2dlO3N3aXRjaChNZT1fZS8oamU+MT8yLWplOmplKSxvZSl7Y2FzZSBQOnZlPSgoRC1lZSkvX2UrNiklNjticmVhaztjYXNlIEQ6'@;
put 'dmU9KGVlLVApL19lKzI7YnJlYWs7Y2FzZSBlZTp2ZT0oUC1EKS9fZSs0fXJldHVyblt2ZS82LE1lLGplLzJdfShTMih3KSk7cmV0dXJuIERbMl09UDwwP0RbMl0qKDErUCk6MS0oMS1EWzJdKSooMS1QKSxmZihmdW5jdGlvbiBSbSh3KXt2YXIgTWUsRD13WzFdLGVlPXdbMl0sb2U9MipEKihl'@;
put 'ZTwuNT9lZToxLWVlKSxnZT1lZS1vZS8yLF9lPVtnZSxnZSxnZV0sdmU9Nip3WzBdO2lmKDAhPT1EKXN3aXRjaCgwfHZlKXtjYXNlIDA6Y2FzZSA2Ok1lPW9lKnZlLF9lWzBdKz1vZSxfZVsxXSs9TWU7YnJlYWs7Y2FzZSAxOl9lWzBdKz1NZT1vZSooMi12ZSksX2VbMV0rPW9lO2JyZWFrO2Nh'@;
put 'c2UgMjpNZT1vZSoodmUtMiksX2VbMV0rPW9lLF9lWzJdKz1NZTticmVhaztjYXNlIDM6X2VbMV0rPU1lPW9lKig0LXZlKSxfZVsyXSs9b2U7YnJlYWs7Y2FzZSA0Ok1lPW9lKih2ZS00KSxfZVsyXSs9b2UsX2VbMF0rPU1lO2JyZWFrO2Nhc2UgNTpfZVsyXSs9TWU9b2UqKDYtdmUpLF9lWzBd'@;
put 'Kz1vZX1mb3IodmFyIGplPTA7MyE9amU7KytqZSlfZVtqZV09TWF0aC5yb3VuZCgyNTUqX2VbamVdKTtyZXR1cm4gX2V9KEQpKX12YXIgQng9Nixfcz1CeDtmdW5jdGlvbiBJdSh3KXtyZXR1cm4gTWF0aC5mbG9vcigodytNYXRoLnJvdW5kKDEyOC9fcykvMjU2KSpfcyl9ZnVuY3Rpb24gTTIo'@;
put 'dyl7cmV0dXJuIE1hdGguZmxvb3IoKHctNSkvX3MqMTAwKy41KS8xMDB9ZnVuY3Rpb24gb2Qodyl7cmV0dXJuIE1hdGgucm91bmQoKHcqX3MrNSkvX3MqMjU2KS8yNTZ9ZnVuY3Rpb24gX2Modyl7dy5iZXN0Rml0JiZkZWxldGUgdy5iZXN0Rml0LHcud2lkdGg/KHcud3B4PUl1KHcud2lkdGgp'@;
put 'LHcud2NoPU0yKHcud3B4KSx3Lk1EVz1fcyk6dy53cHg/KHcud2NoPU0yKHcud3B4KSx3LndpZHRoPW9kKHcud2NoKSx3Lk1EVz1fcyk6Im51bWJlciI9PXR5cGVvZiB3LndjaCYmKHcud2lkdGg9b2Qody53Y2gpLHcud3B4PUl1KHcud2lkdGgpLHcuTURXPV9zKSx3LmN1c3RvbVdpZHRoJiZk'@;
put 'ZWxldGUgdy5jdXN0b21XaWR0aH12YXIgcF89OTYsazI9cF87ZnVuY3Rpb24gdWgodyl7cmV0dXJuIDcyKncvazJ9ZnVuY3Rpb24gZGYodyl7cmV0dXJuIHcqazIvNzJ9ZnVuY3Rpb24gcDgodyl7azI9dz17b3N4OjcyLHdpbjo5Nix3aW4xMDA6OTYsd2luMTI1OjEyMCx3aW4xNTA6MTQ0fVt3'@;
put 'XXx8d3x8cF8sZzg9RTBbd119ZnVuY3Rpb24gU3Aodyl7dy5ocHg/dy5ocHQ9dWgody5ocHgpOncuaHB0JiYody5ocHg9ZGYody5ocHQpKX12YXIgTG09e05vbmU6Im5vbmUiLFNvbGlkOiJzb2xpZCIsR3JheTUwOiJtZWRpdW1HcmF5IixHcmF5NzU6ImRhcmtHcmF5IixHcmF5MjU6ImxpZ2h0'@;
put 'R3JheSIsSG9yelN0cmlwZToiZGFya0hvcml6b250YWwiLFZlcnRTdHJpcGU6ImRhcmtWZXJ0aWNhbCIsUmV2ZXJzZURpYWdTdHJpcGU6ImRhcmtEb3duIixEaWFnU3RyaXBlOiJkYXJrVXAiLERpYWdDcm9zczoiZGFya0dyaWQiLFRoaWNrRGlhZ0Nyb3NzOiJkYXJrVHJlbGxpcyIsVGhpbkhv'@;
put 'cnpTdHJpcGU6ImxpZ2h0SG9yaXpvbnRhbCIsVGhpblZlcnRTdHJpcGU6ImxpZ2h0VmVydGljYWwiLFRoaW5SZXZlcnNlRGlhZ1N0cmlwZToibGlnaHREb3duIixUaGluSG9yekNyb3NzOiJsaWdodEdyaWQifSxzSD13ZShMbSksY2g9e29yYW5nZToxNjc1MzkyMCxibGFjazowLG5hdnk6MTI4'@;
put 'LGJsdWU6MjU1LGdyZWVuOjMyNzY4LHRlYWw6MzI4OTYsbGltZTo2NTI4MCxhcXVhOjY1NTM1LHNpbHZlcjoxMjYzMjI1NixtYXJvb246ODM4ODYwOCxwdXJwbGU6ODM4ODczNixvbGl2ZTo4NDIxMzc2LGdyYXk6ODQyMTUwNCxyZWQ6MTY3MTE2ODAsZnVjaHNpYToxNjcxMTkzNSx5ZWxsb3c6'@;
put 'MTY3NzY5NjAsd2hpdGU6MTY3NzcyMTV9O2Z1bmN0aW9uIFBtKHcsUCl7aWYody5yZXBsYWNlKCIjIiwiIikubWF0Y2goL15bMC05YS1mQS1GXXs2fSQvKSlyZXR1cm4gcGFyc2VJbnQody5yZXBsYWNlKCIjIiwiIiksMTYpO2lmKGNoW3ddKXJldHVybiBjaFt3XTt2YXIgRD13Lm1hdGNoKC9y'@;
put 'Z2JcKFxzKihcZCopXHMqLFxzKihcZCopXHMqLFxzKihcZCopXHMqXCkvKTtpZihEKXJldHVybigrRFsxXTw8MTYpKygrRFsyXTw8OCkrICtEWzNdO2lmKEQ9dy5tYXRjaCgvcmdiYVwoXHMqKFxkKilccyosXHMqKFxkKilccyosXHMqKFxkKilccyooXGQqKS8pKXJldHVybiAwIT0oRFs0XSYm'@;
put 'RFs0XS5sZW5ndGg+MCYmK0RbNF18fDApfHwrRFsxXT4wfHwrRFsyXT4wfHwrRFszXT4wPygrRFsxXTw8MTYpKygrRFsyXTw8OCkrICtEWzNdOlA/LTE6MTY3NzcyMTU7dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIEhUTUwgY29sb3IgIit3KX12YXIgRTA9e307ZnVuY3Rpb24gbTgodyl7dz13'@;
put 'fHw5Njt2YXIgUD17Q2FsaWJyaTpbXSxBcmlhbDpbXSwiU3Bhcmthc3NlIFJnIjpbXSxcdTViOGJcdTRmNTM6W10sXHU2ZTM4XHUzMGI0XHUzMGI3XHUzMGMzXHUzMGFmOltdLCJDZW50dXJ5IEdvdGhpYyI6W119O3JldHVybiBQLkNhbGlicmlbMTFdPTcsUC5DYWxpYnJpWzEyXT17NzI6Niw5'@;
put 'Njo4LDEyMDoxMCwxNDQ6MTJ9W3ddfHw4LFAuQ2FsaWJyaVsxM109MTAsUC5DYWxpYnJpWzE0XT0xMSxQLkNhbGlicmlbMTZdPTEyLFAuQ2FsaWJyaVsxOF09MTQsUC5DYWxpYnJpWzIwXT0xNixQLlx1NWI4Ylx1NGY1M1sxMV09OCxQLlx1NmUzOFx1MzBiNFx1MzBiN1x1MzBjM1x1MzBhZlsx'@;
put 'MV09OCxQWyJTcGFya2Fzc2UgUmciXVsxMV09NyxQLkFyaWFsWzEwXT03LFBbIkNlbnR1cnkgR290aGljIl1bMTJdPTksUH1FMFs3Ml09bTgoNzIpLEUwWzk2XT1tOCg5NiksRTBbMTIwXT1tOCgxMjApLEUwWzE0NF09bTgoMTQ0KTt2YXIgZzg9RTBbOTZdO2Z1bmN0aW9uIHY4KHcpe3JldHVy'@;
put 'bihnOFt3Lm5hbWV8fHcuRm9udE5hbWVdfHxbXSlbdy5zenx8dy5TaXplXX1mdW5jdGlvbiBoZih3KXtpZih3KXt2YXIgUD12OCh3KTtpZihQKXJldHVybiBfcz1QfXJldHVybiBfcz02fWZ1bmN0aW9uIG1fKHcsUCxEKXtyZXR1cm4gZmYoZnVuY3Rpb24gengodyxQLEQpe3JldHVybltNYXRo'@;
put 'LnJvdW5kKFBbMF0qRCt3WzBdKigxLUQpKSxNYXRoLnJvdW5kKFBbMV0qRCt3WzFdKigxLUQpKSxNYXRoLnJvdW5kKFBbMl0qRCt3WzJdKigxLUQpKV19KFMyKCJudW1iZXIiPT10eXBlb2Ygdy5yZ2I/KCIwMDAwMCIrdy50b1N0cmluZygxNikpLnNsaWNlKC02KTp3LnJnYiksUzIoIm51bWJl'@;
put 'ciI9PXR5cGVvZiBQLnJnYj8oIjAwMDAwIitQLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTYpOlAucmdiKSxEKSl9ZnVuY3Rpb24geTgodyxQLEQpe2lmKEQpc3dpdGNoKCt3KXtjYXNlIDY0Onc9NjU7YnJlYWs7Y2FzZSA2NTp3PTY0fXZhciBlZT1QJiZQWyt3XXx8U3JbK3ddfHxWbFsrdy0yMDBd'@;
put 'O2lmKDgxPT0rdyYmKGVlPVNyWzFdKSxlZXx8KGVlPVNyWzFdKSwhZWUpdGhyb3cgbmV3IEVycm9yKCJiYWQgSUNWIGluZGV4ICIrdyk7cmV0dXJuIGZmKGVlKX1mdW5jdGlvbiBmaCh3LFAsRCl7dmFyIGVlPXt9O3JldHVybiBudWxsIT13LmluZGV4ZWQmJihlZS5pbmRleD1wYXJzZUludCh3'@;
put 'LmluZGV4ZWQsMTApLGVlLnJnYj15OChlZS5pbmRleCxQLkluZGV4ZWQpKSxudWxsIT13LnRoZW1lJiYoZWUudGhlbWU9cGFyc2VJbnQody50aGVtZSwxMCkpLG51bGwhPXcudGludCYmKGVlLnRpbnQ9cGFyc2VGbG9hdCh3LnRpbnQpKSxudWxsIT13LnJnYiYmKGVlLnJnYj13LnJnYi5zbGlj'@;
put 'ZSgtNikpLG51bGwhPWVlLnRoZW1lJiYhZWUucmdiJiZELnRoZW1lRWxlbWVudHMmJihlZS5yZ2I9aWQoRC50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtlZS50aGVtZV0ucmdiLGVlLnRpbnR8fDApLGVlLnJhd19yZ2I9RC50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtlZS50aGVtZV0ucmdiKSxl'@;
put 'ZX1mdW5jdGlvbiBNcCh3LFAsRCxlZSl7UC5Cb3JkZXJzPVtdO3ZhciBvZT17fSxnZT17fSxfZT0hMTsod1swXS5tYXRjaChxdCl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHZlKXt2YXIgTWU9Y24odmUpO3N3aXRjaChqbihNZVswXSkpe2Nhc2UiPGJvcmRlcnMiOmNhc2UiPGJvcmRlcnM+Ijpj'@;
put 'YXNlIjwvYm9yZGVycz4iOmNhc2UiPC9ib3JkZXI+IjpjYXNlIjxsZWZ0Lz4iOmNhc2UiPC9sZWZ0PiI6Y2FzZSI8cmlnaHQvPiI6Y2FzZSI8L3JpZ2h0PiI6Y2FzZSI8dG9wLz4iOmNhc2UiPC90b3A+IjpjYXNlIjxib3R0b20vPiI6Y2FzZSI8L2JvdHRvbT4iOmNhc2UiPGRpYWdvbmFsIjpj'@;
put 'YXNlIjxkaWFnb25hbD4iOmNhc2UiPGRpYWdvbmFsLz4iOmNhc2UiPGhvcml6b250YWwiOmNhc2UiPGhvcml6b250YWw+IjpjYXNlIjxob3Jpem9udGFsLz4iOmNhc2UiPHZlcnRpY2FsIjpjYXNlIjx2ZXJ0aWNhbD4iOmNhc2UiPHZlcnRpY2FsLz4iOmNhc2UiPHN0YXJ0IjpjYXNlIjxzdGFy'@;
put 'dD4iOmNhc2UiPHN0YXJ0Lz4iOmNhc2UiPC9zdGFydD4iOmNhc2UiPGVuZCI6Y2FzZSI8ZW5kPiI6Y2FzZSI8ZW5kLz4iOmNhc2UiPC9lbmQ+IjpjYXNlIjxjb2xvci8+IjpjYXNlIjwvY29sb3I+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztj'@;
put 'YXNlIjxib3JkZXIiOmNhc2UiPGJvcmRlcj4iOmNhc2UiPGJvcmRlci8+IjpvZT17fSxNZS5kaWFnb25hbFVwJiYob2UuZGlhZ29uYWxVcD1fcihNZS5kaWFnb25hbFVwKSksTWUuZGlhZ29uYWxEb3duJiYob2UuZGlhZ29uYWxEb3duPV9yKE1lLmRpYWdvbmFsRG93bikpLFAuQm9yZGVycy5w'@;
put 'dXNoKG9lKTticmVhaztjYXNlIjxsZWZ0IjpjYXNlIjxsZWZ0PiI6Z2U9b2UubGVmdD17fSxNZS5zdHlsZSYmKGdlLnN0eWxlPU1lLnN0eWxlKTticmVhaztjYXNlIjxyaWdodCI6Y2FzZSI8cmlnaHQ+IjpnZT1vZS5yaWdodD17fSxNZS5zdHlsZSYmKGdlLnN0eWxlPU1lLnN0eWxlKTticmVh'@;
put 'aztjYXNlIjx0b3AiOmNhc2UiPHRvcD4iOmdlPW9lLnRvcD17fSxNZS5zdHlsZSYmKGdlLnN0eWxlPU1lLnN0eWxlKTticmVhaztjYXNlIjxib3R0b20iOmNhc2UiPGJvdHRvbT4iOmdlPW9lLmJvdHRvbT17fSxNZS5zdHlsZSYmKGdlLnN0eWxlPU1lLnN0eWxlKTticmVhaztjYXNlIjwvZGlh'@;
put 'Z29uYWw+IjpvZS5kaWFnb25hbD1nZSxnZT17fTticmVhaztjYXNlIjwvaG9yaXpvbnRhbD4iOm9lLmhvcml6b250YWw9Z2UsZ2U9e307YnJlYWs7Y2FzZSI8L3ZlcnRpY2FsPiI6b2UudmVydGljYWw9Z2UsZ2U9e307YnJlYWs7Y2FzZSI8Y29sb3IiOmNhc2UiPGNvbG9yPiI6Z2UuY29sb3J8'@;
put 'fChnZS5jb2xvcj17fSksTWUuYXV0byYmKGdlLmNvbG9yLmF1dG89X3IoTWUuYXV0bykpLG51bGwhPU1lLnJnYj9nZS5jb2xvci5yZ2I9TWUucmdiLnNsaWNlKC02KTpNZS5pbmRleGVkPyhnZS5jb2xvci5pbmRleD1wYXJzZUludChNZS5pbmRleGVkLDEwKSxnZS5jb2xvci5yZ2I9eTgoZ2Uu'@;
put 'Y29sb3IuaW5kZXgsUC5JbmRleGVkLCExKSk6TWUudGhlbWUmJihnZS5jb2xvci50aGVtZT1wYXJzZUludChNZS50aGVtZSwxMCksTWUudGludCYmKGdlLmNvbG9yLnRpbnQ9cGFyc2VGbG9hdChNZS50aW50KSksTWUudGhlbWUmJkQudGhlbWVFbGVtZW50cyYmRC50aGVtZUVsZW1lbnRzLmNs'@;
put 'clNjaGVtZSYmKGdlLmNvbG9yLnJnYj1pZChELnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW2dlLmNvbG9yLnRoZW1lXS5yZ2IsZ2UuY29sb3IudGludHx8MCkpKSwhTWUuYXV0byYmbnVsbD09TWUucmdiJiYhTWUuaW5kZXhlZCYmZGVsZXRlIGdlLmNvbG9yO2JyZWFrO2Nhc2UiPGV4dCI6X2U9'@;
put 'ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOl9lPSExO2JyZWFrO2RlZmF1bHQ6aWYoZWUmJmVlLldURiYmIV9lKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrTWVbMF0rIiBpbiBib3JkZXJzIil9fSl9ZnVuY3Rpb24ga3AodyxQKXt2YXIgRD1bIjwiK1BdO3JldHVybiB3JiZ3LnN0eWxl'@;
put 'PyhELnB1c2goJyBzdHlsZT0iJyt3LnN0eWxlKyciJyksdy5jb2xvcj8oRC5wdXNoKCI+IiksRC5wdXNoKGxkKHcuY29sb3IsITApKSxELmpvaW4oIiIpKyI8LyIrUCsiPiIpOkQuam9pbigiIikrIi8+Iik6RFswXSsiLz4ifWZ1bmN0aW9uIGdfKHcsUCxELGVlKXtQLkZpbGxzPVtdO3ZhciBv'@;
put 'ZT17fSxnZT17fSxfZT0hMSx2ZT0hMTsod1swXS5tYXRjaChxdCl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKE1lKXt2YXIgamU9Y24oTWUpO3N3aXRjaChqbihqZVswXSkpe2Nhc2UiPGZpbGxzIjpjYXNlIjxmaWxscz4iOmNhc2UiPC9maWxscz4iOmNhc2UiPC9maWxsPiI6Y2FzZSI8L2dyYWRp'@;
put 'ZW50RmlsbD4iOmNhc2UiPGJnQ29sb3IvPiI6Y2FzZSI8L2JnQ29sb3I+IjpjYXNlIjxmZ0NvbG9yLz4iOmNhc2UiPC9mZ0NvbG9yPiI6Y2FzZSI8Y29sb3IvPiI6Y2FzZSI8L2NvbG9yPiI6Y2FzZSI8c3RvcC8+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+'@;
put 'IjpicmVhaztjYXNlIjxmaWxsPiI6Y2FzZSI8ZmlsbCI6Y2FzZSI8ZmlsbC8+IjpQLkZpbGxzLnB1c2gob2U9e30pO2JyZWFrO2Nhc2UiPGdyYWRpZW50RmlsbD4iOm9lLnN0b3BzPVtdO2JyZWFrO2Nhc2UiPGdyYWRpZW50RmlsbCI6b2Uuc3RvcHM9W10samUuZGVncmVlJiYob2UuYW5nbGU9'@;
put 'K2plLmRlZ3JlZSk7YnJlYWs7Y2FzZSI8cGF0dGVybkZpbGwiOmNhc2UiPHBhdHRlcm5GaWxsPiI6amUucGF0dGVyblR5cGUmJihvZS5wYXR0ZXJuVHlwZT1qZS5wYXR0ZXJuVHlwZSk7YnJlYWs7Y2FzZSI8cGF0dGVybkZpbGwvPiI6Y2FzZSI8L3BhdHRlcm5GaWxsPiI6aWYoX2UpdGhyb3cg'@;
put 'bmV3IEVycm9yKCJiYWQgc3RvcCIpO2JyZWFrO2Nhc2UiPGNvbG9yIjpjYXNlIjxiZ0NvbG9yIjpjYXNlIjxmZ0NvbG9yIjp2YXIgVWU9am4oamVbMF0pLnNsaWNlKDEpOyJjb2xvciIhPVVlJiYhb2VbVWVdJiYob2VbVWVdPXt9KTt2YXIgWGU9X2U/Z2U6b2VbVWVdO251bGwhPWplLmluZGV4'@;
put 'ZWQmJihYZS5pbmRleD1wYXJzZUludChqZS5pbmRleGVkLDEwKSxYZS5yZ2I9eTgoWGUuaW5kZXgsUC5JbmRleGVkKSksbnVsbCE9amUudGhlbWUmJihYZS50aGVtZT1wYXJzZUludChqZS50aGVtZSwxMCkpLG51bGwhPWplLnRpbnQmJihYZS50aW50PXBhcnNlRmxvYXQoamUudGludCkpLG51'@;
put 'bGwhPWplLnJnYiYmKFhlLnJnYj1qZS5yZ2Iuc2xpY2UoLTYpKSxudWxsIT1qZS5hdXRvJiZkZWxldGUgb2VbVWVdLG51bGwhPVhlLnRoZW1lJiYhWGUucmdiJiZELnRoZW1lRWxlbWVudHMmJihYZS5yZ2I9aWQoRC50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtYZS50aGVtZV0ucmdiLFhlLnRp'@;
put 'bnR8fDApLGVlLldURiYmKFhlLnJhd19yZ2I9RC50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtYZS50aGVtZV0ucmdiKSk7YnJlYWs7Y2FzZSI8c3RvcD4iOl9lPSEwLGdlPXt9O2JyZWFrO2Nhc2UiPHN0b3AiOl9lPSEwLGdlPXt9LG51bGwhPWplLnBvc2l0aW9uJiYoZ2Uudj1wYXJzZUZsb2F0'@;
put 'KGplLnBvc2l0aW9uKSk7YnJlYWs7Y2FzZSI8L3N0b3A+IjpfZT0hMSxvZS5zdG9wcy5wdXNoKGdlKTticmVhaztjYXNlIjxleHQiOnZlPSEwO2JyZWFrO2Nhc2UiPC9leHQ+Ijp2ZT0hMTticmVhaztkZWZhdWx0OmlmKGVlJiZlZS5XVEYmJiF2ZSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2du'@;
put 'aXplZCAiK2plWzBdKyIgaW4gZmlsbHMiKX19KX1mdW5jdGlvbiBjSCh3LFAsRCxlZSl7UC5Gb250cz1bXTt2YXIgb2U9e30sZ2U9ITE7KHdbMF0ubWF0Y2gocXQpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihfZSl7dmFyIHZlPWNuKF9lKTtzd2l0Y2goam4odmVbMF0pKXtjYXNlIjxmb250cyI6'@;
put 'Y2FzZSI8Zm9udHM+IjpjYXNlIjwvZm9udHM+IjpicmVhaztjYXNlIjxmb250IjpjYXNlIjxmb250PiI6aWYoIi8+IiE9X2Uuc2xpY2UoLTIpKWJyZWFrO2Nhc2UiPC9mb250PiI6Y2FzZSI8Zm9udC8+IjpQLkZvbnRzLnB1c2gob2UpLG9lPXt9O2JyZWFrO2Nhc2UiPG5hbWUiOnZlLnZhbCYm'@;
put 'KG9lLm5hbWU9RmkodmUudmFsKSk7YnJlYWs7Y2FzZSI8bmFtZS8+IjpjYXNlIjwvbmFtZT4iOmJyZWFrO2Nhc2UiPGIiOm9lLmJvbGQ9dmUudmFsP19yKHZlLnZhbCk6MTticmVhaztjYXNlIjxiLz4iOmNhc2UiPGI+IjpvZS5ib2xkPTE7YnJlYWs7Y2FzZSI8L2I+IjpicmVhaztjYXNlIjxp'@;
put 'IjpvZS5pdGFsaWM9dmUudmFsP19yKHZlLnZhbCk6MTticmVhaztjYXNlIjxpLz4iOmNhc2UiPGk+IjpvZS5pdGFsaWM9MTticmVhaztjYXNlIjwvaT4iOmJyZWFrO2Nhc2UiPHUiOnN3aXRjaCh2ZS52YWwpe2Nhc2Uibm9uZSI6b2UudW5kZXJsaW5lPTA7YnJlYWs7Y2FzZSJzaW5nbGUiOm9l'@;
put 'LnVuZGVybGluZT0xO2JyZWFrO2Nhc2UiZG91YmxlIjpvZS51bmRlcmxpbmU9MjticmVhaztjYXNlInNpbmdsZUFjY291bnRpbmciOm9lLnVuZGVybGluZT0zMzticmVhaztjYXNlImRvdWJsZUFjY291bnRpbmciOm9lLnVuZGVybGluZT0zNH1icmVhaztjYXNlIjx1Lz4iOmNhc2UiPHU+Ijpv'@;
put 'ZS51bmRlcmxpbmU9MTticmVhaztjYXNlIjwvdT4iOmJyZWFrO2Nhc2UiPHN0cmlrZSI6b2Uuc3RyaWtlPXZlLnZhbD9fcih2ZS52YWwpOjE7YnJlYWs7Y2FzZSI8c3RyaWtlLz4iOm9lLnN0cmlrZT0xO2JyZWFrO2Nhc2UiPG91dGxpbmUiOm9lLm91dGxpbmU9dmUudmFsP19yKHZlLnZhbCk6'@;
put 'MTticmVhaztjYXNlIjxvdXRsaW5lLz4iOm9lLm91dGxpbmU9MTticmVhaztjYXNlIjxzaGFkb3ciOm9lLnNoYWRvdz12ZS52YWw/X3IodmUudmFsKToxO2JyZWFrO2Nhc2UiPHNoYWRvdy8+IjpvZS5zaGFkb3c9MTticmVhaztjYXNlIjxjb25kZW5zZSI6b2UuY29uZGVuc2U9dmUudmFsP19y'@;
put 'KHZlLnZhbCk6MTticmVhaztjYXNlIjxjb25kZW5zZS8+IjpvZS5jb25kZW5zZT0xO2JyZWFrO2Nhc2UiPGV4dGVuZCI6b2UuZXh0ZW5kPXZlLnZhbD9fcih2ZS52YWwpOjE7YnJlYWs7Y2FzZSI8ZXh0ZW5kLz4iOm9lLmV4dGVuZD0xO2JyZWFrO2Nhc2UiPHN6Ijp2ZS52YWwmJihvZS5zej0r'@;
put 'dmUudmFsKTticmVhaztjYXNlIjxzei8+IjpjYXNlIjwvc3o+IjpicmVhaztjYXNlIjx2ZXJ0QWxpZ24iOiJub25lIiE9KHZlLnZhbHx8Im5vbmUiKSYmKG9lLnZhbGlnbj12ZS52YWwucmVwbGFjZSgic2NyaXB0IiwiIikpO2JyZWFrO2Nhc2UiPHZlcnRBbGlnbi8+IjpjYXNlIjwvdmVydEFs'@;
put 'aWduPiI6YnJlYWs7Y2FzZSI8ZmFtaWx5Ijp2ZS52YWwmJihvZS5mYW1pbHk9cGFyc2VJbnQodmUudmFsLDEwKSk7YnJlYWs7Y2FzZSI8ZmFtaWx5Lz4iOmNhc2UiPC9mYW1pbHk+IjpicmVhaztjYXNlIjxzY2hlbWUiOnZlLnZhbCYmKG9lLnNjaGVtZT12ZS52YWwpO2JyZWFrO2Nhc2UiPHNj'@;
put 'aGVtZS8+IjpjYXNlIjwvc2NoZW1lPiI6YnJlYWs7Y2FzZSI8Y2hhcnNldCI6aWYoIjEiPT12ZS52YWwpYnJlYWs7dmUuY29kZXBhZ2U9SVtwYXJzZUludCh2ZS52YWwsMTApXTticmVhaztjYXNlIjxjb2xvciI6b2UuY29sb3J8fChvZS5jb2xvcj17fSksdmUuYXV0byYmKG9lLmNvbG9yLmF1'@;
put 'dG89X3IodmUuYXV0bykpLHZlLnJnYj9vZS5jb2xvci5yZ2I9dmUucmdiLnNsaWNlKC02KTp2ZS5pbmRleGVkPyhvZS5jb2xvci5pbmRleD1wYXJzZUludCh2ZS5pbmRleGVkLDEwKSxvZS5jb2xvci5yZ2I9eTgob2UuY29sb3IuaW5kZXgsUC5JbmRleGVkKSk6dmUudGhlbWUmJihvZS5jb2xv'@;
put 'ci50aGVtZT1wYXJzZUludCh2ZS50aGVtZSwxMCksdmUudGludCYmKG9lLmNvbG9yLnRpbnQ9cGFyc2VGbG9hdCh2ZS50aW50KSksdmUudGhlbWUmJkQudGhlbWVFbGVtZW50cyYmRC50aGVtZUVsZW1lbnRzLmNsclNjaGVtZSYmKG9lLmNvbG9yLnJnYj1pZChELnRoZW1lRWxlbWVudHMuY2xy'@;
put 'U2NoZW1lW29lLmNvbG9yLnRoZW1lXS5yZ2Isb2UuY29sb3IudGludHx8MCkpKTticmVhaztjYXNlIjxjb2xvci8+IjpjYXNlIjwvY29sb3I+IjpicmVhaztjYXNlIjxBbHRlcm5hdGVDb250ZW50IjpnZT0hMDticmVhaztjYXNlIjwvQWx0ZXJuYXRlQ29udGVudD4iOmdlPSExO2JyZWFrO2Nh'@;
put 'c2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGV4dCI6Z2U9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOmdlPSExO2JyZWFrO2RlZmF1bHQ6aWYoZWUmJmVlLldURiYmIWdlKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrdmVbMF0rIiBp'@;
put 'biBmb250cyIpfX0pfXZhciBiOD17MDoibm9uZSIsMToic2luZ2xlIiwyOiJkb3VibGUiLDMzOiJzaW5nbGVBY2NvdW50aW5nIiwzNDoiZG91YmxlQWNjb3VudGluZyJ9LGFkPVsibnVtRm10SWQiLCJmaWxsSWQiLCJmb250SWQiLCJib3JkZXJJZCIsInhmSWQiXSxkaD1bImFwcGx5QWxpZ25t'@;
put 'ZW50IiwiYXBwbHlCb3JkZXIiLCJhcHBseUZpbGwiLCJhcHBseUZvbnQiLCJhcHBseU51bWJlckZvcm1hdCIsImFwcGx5UHJvdGVjdGlvbiIsInBpdm90QnV0dG9uIiwicXVvdGVQcmVmaXgiXSxtSD1mdW5jdGlvbigpe3ZhciB3PS88KD86XHcrOik/Zm9udChbXj5dKik+W1xTXHNdKj88XC8o'@;
put 'Pzpcdys6KT9mb250Pi8sUD0vPCg/Olx3KzopP251bUZtdChbXj5dKilcLz4vLEQ9LzwoPzpcdys6KT9maWxsKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2ZpbGw+LyxvZT0vPCg/Olx3KzopP2JvcmRlcihbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9ib3JkZXI+LztyZXR1cm4gZnVu'@;
put 'Y3Rpb24odmUsTWUsamUsVWUpe3ZhciBmdCxNdCxYZT17fSxpdD17fTtyZXR1cm4oZnQ9dmUubWF0Y2godykpJiYoY0goZnQsWGUsamUsVWUpLChYZS5Gb250c3x8W10pWzBdJiZOdChpdCxYZS5Gb250c1swXSkpLChmdD12ZS5tYXRjaChQKSkmJihNdD1jbihGaShmdFswXSkpLGl0Lno9TXQu'@;
put 'Zm9ybWF0Q29kZT9FcihNdC5mb3JtYXRDb2RlKTooTWUuTnVtYmVyRm10fHxbXSlbK010Lm51bUZtdElkXXx8IkdlbmVyYWwiKSwoZnQ9dmUubWF0Y2goRCkpJiYoZ18oZnQsWGUsamUsVWUpLChYZS5GaWxsc3x8W10pWzBdJiZOdChpdCxYZS5GaWxsc1swXSkpLChmdD12ZS5tYXRjaChvZSkp'@;
put 'JiYoTXAoZnQsWGUsamUsVWUpLChYZS5Cb3JkZXJzfHxbXSlbMF0mJk50KGl0LFhlLkJvcmRlcnNbMF0pKSxpdH19KCksWlE9LzwoPzpcdys6KT9keGY+W1xTXHNdKj88XC8oPzpcdys6KT9keGY+L2csR1E9LzwoPzpcdys6KT90YWJsZVN0eWxlXGIuKj8+W1xTXHNdKj88XC8oPzpcdys6KT90'@;
put 'YWJsZVN0eWxlPi9nO3ZhciBDOD1mdW5jdGlvbigpe3ZhciBQPS88KD86XHcrOik/bnVtRm10cyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9udW1GbXRzPi8sRD0vPCg/Olx3KzopP2NlbGxTdHlsZVhmcyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9jZWxsU3R5bGVYZnM+LyxlZT0v'@;
put 'PCg/Olx3KzopP2NlbGxTdHlsZXMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Y2VsbFN0eWxlcz4vLG9lPS88KD86XHcrOik/Y2VsbFhmcyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9jZWxsWGZzPi8sZ2U9LzwoPzpcdys6KT9maWxscyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6'@;
put 'KT9maWxscz4vLF9lPS88KD86XHcrOik/Zm9udHMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Zm9udHM+Lyx2ZT0vPCg/Olx3KzopP2JvcmRlcnMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Ym9yZGVycz4vLE1lPS88KD86XHcrOik/aW5kZXhlZENvbG9ycyhbXj5dKik+W1xTXHNd'@;
put 'Kj88XC8oPzpcdys6KT9pbmRleGVkQ29sb3JzPi8samU9LzwoPzpcdys6KT90YWJsZVN0eWxlcyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT90YWJsZVN0eWxlcz4vLFVlPS88KD86XHcrOik/ZHhmcyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9keGZzPi87cmV0dXJuIGZ1bmN0aW9u'@;
put 'KGl0LGZ0LE10KXt2YXIgd3QsdXQ9e307cmV0dXJuIGl0Pygod3Q9KGl0PWl0LnJlcGxhY2UoLzwhLS0oW1xzXFNdKj8pLS0+L2dtLCIiKS5yZXBsYWNlKC88IURPQ1RZUEVbXlxbXSpcW1teXF1dKlxdPi9nbSwiIikpLm1hdGNoKE1lKSkmJmZ1bmN0aW9uIHZfKHcsUCxEKXtQLkluZGV4ZWR8'@;
put 'fChQLkluZGV4ZWQ9W10pO3ZhciBlZT0hMTsod1swXS5tYXRjaChxdCl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKG9lKXt2YXIgZ2U9Y24ob2UpO3N3aXRjaChqbihnZVswXSkpe2Nhc2UiPGluZGV4ZWRDb2xvcnM+IjpjYXNlIjxpbmRleGVkQ29sb3JzIjpjYXNlIjxpbmRleGVkQ29sb3JzLz4i'@;
put 'OmNhc2UiPC9pbmRleGVkQ29sb3JzPiI6Y2FzZSI8L3JnYkNvbG9yPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8cmdiQ29sb3IiOmRlbGV0ZSBnZVswXTt2YXIgX2U9cGFyc2VJbnQoZ2UucmdiLnNsaWNlKC02KSwxNik7UC5JbmRl'@;
put 'eGVkLnB1c2goW19lPj4xNiYyNTUsX2U+PjgmMjU1LDI1NSZfZV0pO2JyZWFrO2Nhc2UiPGV4dCI6ZWU9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOmVlPSExO2JyZWFrO2RlZmF1bHQ6aWYoRCYmRC5XVEYmJiFlZSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK2dlWzBdKyIgaW4gY2Vs'@;
put 'bFN0eWxlcyIpfX0pfSh3dCx1dCxNdCksKHd0PWl0Lm1hdGNoKFApKSYmZnVuY3Rpb24gZEgodyxQLEQpe1AuTnVtYmVyRm10PVtdO2Zvcih2YXIgZWU9bXQoUy5fdGFibGUpLG9lPTA7b2U8ZWUubGVuZ3RoOysrb2UpUC5OdW1iZXJGbXRbZWVbb2VdXT1TLl90YWJsZVtlZVtvZV1dO3ZhciBn'@;
put 'ZT13WzBdLm1hdGNoKHF0KTtpZihnZSlmb3Iob2U9MDtvZTxnZS5sZW5ndGg7KytvZSl7dmFyIF9lPWNuKGdlW29lXSk7c3dpdGNoKGpuKF9lWzBdKSl7Y2FzZSI8bnVtRm10cyI6Y2FzZSI8L251bUZtdHM+IjpjYXNlIjxudW1GbXRzLz4iOmNhc2UiPG51bUZtdHM+IjpjYXNlIjwvbnVtRm10'@;
put 'PiI6YnJlYWs7Y2FzZSI8bnVtRm10Ijp2YXIgdmU9RXIoRmkoX2UuZm9ybWF0Q29kZSkpLE1lPXBhcnNlSW50KF9lLm51bUZtdElkLDEwKTtpZihQLk51bWJlckZtdFtNZV09dmUsTWU+MCl7aWYoTWU+MzkyKXtmb3IoTWU9MzkyO01lPjYwJiZudWxsIT1QLk51bWJlckZtdFtNZV07LS1NZSk7'@;
put 'UC5OdW1iZXJGbXRbTWVdPXZlfVMubG9hZCh2ZSxNZSl9YnJlYWs7ZGVmYXVsdDppZihELldURil0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK19lWzBdKyIgaW4gbnVtRm10cyIpfX19KHd0LHV0LE10KSwod3Q9aXQubWF0Y2goX2UpKSYmY0god3QsdXQsZnQsTXQpLCh3dD1pdC5t'@;
put 'YXRjaChnZSkpJiZnXyh3dCx1dCxmdCxNdCksKHd0PWl0Lm1hdGNoKHZlKSkmJk1wKHd0LHV0LGZ0LE10KSwod3Q9aXQubWF0Y2goRCkpJiZmdW5jdGlvbiBaeCh3LFAsRCl7UC5DZWxsU3R5bGVYZj1bXTt2YXIgZWUsb2U9ITE7KHdbMF0ubWF0Y2gocXQpfHxbXSkuZm9yRWFjaChmdW5jdGlv'@;
put 'bihnZSl7dmFyIF9lPWNuKGdlKSx2ZT0wO3N3aXRjaChqbihfZVswXSkpe2Nhc2UiPGNlbGxTdHlsZVhmcyI6Y2FzZSI8Y2VsbFN0eWxlWGZzPiI6Y2FzZSI8Y2VsbFN0eWxlWGZzLz4iOmNhc2UiPC9jZWxsU3R5bGVYZnM+IjpjYXNlIjwveGY+IjpjYXNlIjwvYWxpZ25tZW50PiI6Y2FzZSI8'@;
put 'L3Byb3RlY3Rpb24+IjpjYXNlIjxwcm90ZWN0aW9uLz4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPHhmIjpjYXNlIjx4Zi8+Ijpmb3IoZGVsZXRlKGVlPV9lKVswXSx2ZT0wO3ZlPGFkLmxlbmd0aDsrK3ZlKWVlW2FkW3ZlXV0mJihl'@;
put 'ZVthZFt2ZV1dPXBhcnNlSW50KGVlW2FkW3ZlXV0sMTApKTtmb3IodmU9MDt2ZTxkaC5sZW5ndGg7Kyt2ZSllZVtkaFt2ZV1dJiYoZWVbZGhbdmVdXT1fcihlZVtkaFt2ZV1dKSk7aWYoUC5OdW1iZXJGbXQmJmVlLm51bUZtdElkPjM5Milmb3IodmU9MzkyO3ZlPjYwOy0tdmUpaWYoUC5OdW1i'@;
put 'ZXJGbXRbZWUubnVtRm10SWRdPT1QLk51bWJlckZtdFt2ZV0pe2VlLm51bUZtdElkPXZlO2JyZWFrfVAuQ2VsbFN0eWxlWGYucHVzaChlZSk7YnJlYWs7Y2FzZSI8YWxpZ25tZW50IjpjYXNlIjxhbGlnbm1lbnQvPiI6dmFyIE1lPXt9O19lLnZlcnRpY2FsJiYoTWUudmVydGljYWw9X2UudmVy'@;
put 'dGljYWwpLF9lLmhvcml6b250YWwmJihNZS5ob3Jpem9udGFsPV9lLmhvcml6b250YWwpLG51bGwhPV9lLnRleHRSb3RhdGlvbiYmKE1lLnRleHRSb3RhdGlvbj1fZS50ZXh0Um90YXRpb24pLF9lLmluZGVudCYmKE1lLmluZGVudD1fZS5pbmRlbnQpLF9lLndyYXBUZXh0JiYoTWUud3JhcFRl'@;
put 'eHQ9X2Uud3JhcFRleHQpLF9lLnNocmlua1RvRml0JiYoTWUuc2hyaW5rVG9GaXQ9X3IoX2Uuc2hyaW5rVG9GaXQpKSxlZS5hbGlnbm1lbnQ9TWU7YnJlYWs7Y2FzZSI8cHJvdGVjdGlvbiI6ZWUucHJvdGVjdGlvbj17fSxfcihfZS5oaWRkZW4pJiYoZWUucHJvdGVjdGlvbi5oaWRkZW49ITAp'@;
put 'LG51bGwhPV9lLmxvY2tlZCYmKGVlLnByb3RlY3Rpb24uZWRpdGFibGU9IV9yKF9lLmxvY2tlZCkpO2JyZWFrO2Nhc2UiPGV4dCI6b2U9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOm9lPSExO2JyZWFrO2RlZmF1bHQ6aWYoRCYmRC5XVEYmJiFvZSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXpl'@;
put 'ZCAiK19lWzBdKyIgaW4gY2VsbFN0eWxlWGZzIil9fSl9KHd0LHV0LE10KSwod3Q9aXQubWF0Y2goZWUpKSYmZnVuY3Rpb24gaEgodyxQLEQpe1AuQ2VsbFN0eWxlWGZ8fChQLkNlbGxTdHlsZVhmPVtdKTt2YXIgZWU9ITE7KHdbMF0ubWF0Y2gocXQpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihv'@;
put 'ZSl7dmFyIGdlPWNuKG9lKTtzd2l0Y2goam4oZ2VbMF0pKXtjYXNlIjxjZWxsU3R5bGVzIjpjYXNlIjxjZWxsU3R5bGVzPiI6Y2FzZSI8Y2VsbFN0eWxlcy8+IjpjYXNlIjwvY2VsbFN0eWxlcz4iOmNhc2UiPC94Zj4iOmNhc2UiPC9jZWxsU3R5bGU+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4'@;
put 'dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjxjZWxsU3R5bGUiOmNhc2UiPGNlbGxTdHlsZS8+IjpkZWxldGUgZ2VbMF07dmFyIF9lPStnZS54ZklkO2lmKFAuQ2VsbFN0eWxlWGZbX2VdKVAuQ2VsbFN0eWxlWGZbX2VdLnN0eWxlPUZpKGdlLm5hbWUpO2Vsc2UgaWYoIWdlLmJ1'@;
put 'aWx0aW5JZCl0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIENlbGxTdHlsZSAiK19lKTticmVhaztjYXNlIjxleHQiOmVlPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjplZT0hMTticmVhaztkZWZhdWx0OmlmKEQmJkQuV1RGJiYhZWUpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQg'@;
put 'IitnZVswXSsiIGluIGNlbGxTdHlsZXMiKX19KX0od3QsdXQsTXQpLCh3dD1pdC5tYXRjaChvZSkpJiZmdW5jdGlvbiBVeCh3LFAsRCl7UC5DZWxsWGY9W107dmFyIGVlLG9lPSExOyh3WzBdLm1hdGNoKHF0KXx8W10pLmZvckVhY2goZnVuY3Rpb24oZ2Upe3ZhciBfZT1jbihnZSksdmU9MDtz'@;
put 'd2l0Y2goam4oX2VbMF0pKXtjYXNlIjxjZWxsWGZzIjpjYXNlIjxjZWxsWGZzPiI6Y2FzZSI8Y2VsbFhmcy8+IjpjYXNlIjwvY2VsbFhmcz4iOmNhc2UiPC94Zj4iOmNhc2UiPC9hbGlnbm1lbnQ+IjpjYXNlIjwvcHJvdGVjdGlvbj4iOmNhc2UiPHByb3RlY3Rpb24vPiI6Y2FzZSI8ZXh0THN0'@;
put 'IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8eGYiOmNhc2UiPHhmLz4iOmZvcihkZWxldGUoZWU9X2UpWzBdLHZlPTA7dmU8YWQubGVuZ3RoOysrdmUpZWVbYWRbdmVdXSYmKGVlW2FkW3ZlXV09cGFyc2VJbnQoZWVbYWRbdmVdXSwxMCkpO2Zvcih2ZT0wO3Zl'@;
put 'PGRoLmxlbmd0aDsrK3ZlKWVlW2RoW3ZlXV0mJihlZVtkaFt2ZV1dPV9yKGVlW2RoW3ZlXV0pKTtpZihQLk51bWJlckZtdCYmZWUubnVtRm10SWQ+MzkyKWZvcih2ZT0zOTI7dmU+NjA7LS12ZSlpZihQLk51bWJlckZtdFtlZS5udW1GbXRJZF09PVAuTnVtYmVyRm10W3ZlXSl7ZWUubnVtRm10'@;
put 'SWQ9dmU7YnJlYWt9UC5DZWxsU3R5bGVYZiYmZWUueGZJZCYmUC5DZWxsU3R5bGVYZltlZS54ZklkXSYmUC5DZWxsU3R5bGVYZltlZS54ZklkXS5zdHlsZSYmKGVlLnN0eWxlPVAuQ2VsbFN0eWxlWGZbZWUueGZJZF0uc3R5bGUpLFAuQ2VsbFhmLnB1c2goZWUpO2JyZWFrO2Nhc2UiPGFsaWdu'@;
put 'bWVudCI6Y2FzZSI8YWxpZ25tZW50Lz4iOnZhciBNZT17fTtfZS52ZXJ0aWNhbCYmKE1lLnZlcnRpY2FsPV9lLnZlcnRpY2FsKSxfZS5ob3Jpem9udGFsJiYoTWUuaG9yaXpvbnRhbD1fZS5ob3Jpem9udGFsKSxudWxsIT1fZS50ZXh0Um90YXRpb24mJihNZS50ZXh0Um90YXRpb249X2UudGV4'@;
put 'dFJvdGF0aW9uKSxfZS5pbmRlbnQmJihNZS5pbmRlbnQ9X2UuaW5kZW50KSxfZS53cmFwVGV4dCYmKE1lLndyYXBUZXh0PV9yKF9lLndyYXBUZXh0KSksX2Uuc2hyaW5rVG9GaXQmJihNZS5zaHJpbmtUb0ZpdD1fcihfZS5zaHJpbmtUb0ZpdCkpLGVlLmFsaWdubWVudD1NZTticmVhaztjYXNl'@;
put 'Ijxwcm90ZWN0aW9uIjplZS5wcm90ZWN0aW9uPXt9LF9yKF9lLmhpZGRlbikmJihlZS5wcm90ZWN0aW9uLmhpZGRlbj0hMCksbnVsbCE9X2UubG9ja2VkJiYoZWUucHJvdGVjdGlvbi5lZGl0YWJsZT0hX3IoX2UubG9ja2VkKSk7YnJlYWs7Y2FzZSI8QWx0ZXJuYXRlQ29udGVudCI6Y2FzZSI8'@;
put 'ZXh0IjpvZT0hMDticmVhaztjYXNlIjwvQWx0ZXJuYXRlQ29udGVudD4iOmNhc2UiPC9leHQ+IjpvZT0hMTticmVhaztkZWZhdWx0OmlmKEQmJkQuV1RGJiYhb2UpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitfZVswXSsiIGluIGNlbGxYZnMiKX19KX0od3QsdXQsTXQpLCh3dD1p'@;
put 'dC5tYXRjaChVZSkpJiZmdW5jdGlvbiB5Xyh3LFAsRCxlZSl7UC5EWEZ8fChQLkRYRj1bXSksKHdbMF0ubWF0Y2goWlEpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihvZSl7UC5EWEYucHVzaChtSChvZSxQLEQsZWUpKX0pfSh3dCx1dCxmdCxNdCksKHd0PWl0Lm1hdGNoKGplKSkmJmZ1bmN0aW9u'@;
put 'ICRRKHcsUCxELGVlKXtQLlRhYmxlfHwoUC5UYWJsZT1bXSksKHdbMF0ubWF0Y2goR1EpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihvZSl7UC5UYWJsZS5wdXNoKGZ1bmN0aW9uIFlRKHcsUCxELGVlKXt2YXIgb2U9ITEsZ2U9e307cmV0dXJuKHcubWF0Y2gocXQpfHxbXSkuZm9yRWFjaChmdW5j'@;
put 'dGlvbihfZSl7dmFyIHZlPWNuKF9lKTtzd2l0Y2goam4odmVbMF0pKXtjYXNlIjx0YWJsZVN0eWxlPiI6Y2FzZSI8dGFibGVTdHlsZSI6Z2UubmFtZT12ZS5uYW1lLnJlcGxhY2UoL14oVGFibGV8UGl2b3QpU3R5bGUvLCIiKSxnZS5yYXduYW1lPXZlLm5hbWUsZ2UucGl2b3Q9IXZlLnBpdm90'@;
put 'fHxfcih2ZS5waXZvdCksZ2UudGFibGU9IXZlLnRhYmxlfHxfcih2ZS50YWJsZSk7YnJlYWs7Y2FzZSI8dGFibGVTdHlsZS8+IjpjYXNlIjwvdGFibGVTdHlsZT4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPHRhYmxlU3R5bGVFbGVt'@;
put 'ZW50IjppZih2ZS50eXBlJiZ2ZS5keGZJZCl7aWYoIVAuRFhGfHwhUC5EWEZbK3ZlLmR4ZklkXSl0aHJvdyBuZXcgRXJyb3IoX2UrIiBjYW5ub3QgZmluZCBEWEYiKTtnZVt2ZS50eXBlXT1QLkRYRlsrdmUuZHhmSWRdfWJyZWFrO2Nhc2UiPGV4dCI6b2U9ITA7YnJlYWs7Y2FzZSI8L2V4dD4i'@;
put 'Om9lPSExO2JyZWFrO2RlZmF1bHQ6aWYoZWUmJmVlLldURiYmIW9lKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrdmVbMF0rIiBpbiB0YWJsZVN0eWxlIil9fSksZ2V9KG9lLFAsMCxlZSkpfSl9KHd0LHV0LDAsTXQpLCh1dC5Gb250c3x8W10pWzBdJiZoZih1dC5Gb250c1swXSks'@;
put 'dXQpOnV0fX0oKSxZeD1Ncigic3R5bGVTaGVldCIsbnVsbCx7eG1sbnM6c2EubWFpblswXSwieG1sbnM6dnQiOnNhLnZ0fSk7ZnVuY3Rpb24gV3godyxQKXt2YXIgZWUsRD1bQm4sWXhdO3cuU1NGJiZudWxsIT0oZWU9ZnVuY3Rpb24gXzgodyl7dmFyIFA9WyI8bnVtRm10cz4iXTtyZXR1cm5b'@;
put 'WzUsOF0sWzIzLDI2XSxbNDEsNDRdLFs1MCwzOTJdXS5mb3JFYWNoKGZ1bmN0aW9uKEQpe2Zvcih2YXIgZWU9RFswXTtlZTw9RFsxXTsrK2VlKW51bGwhPXdbZWVdJiYoUFtQLmxlbmd0aF09TXIoIm51bUZtdCIsbnVsbCx7bnVtRm10SWQ6ZWUsZm9ybWF0Q29kZTpCcih3W2VlXSl9KSl9KSwx'@;
put 'PT09UC5sZW5ndGg/IiI6KFBbUC5sZW5ndGhdPSI8L251bUZtdHM+IixQWzBdPU1yKCJudW1GbXRzIixudWxsLHtjb3VudDpQLmxlbmd0aC0yfSkucmVwbGFjZSgiLz4iLCI+IiksUC5qb2luKCIiKSl9KHcuU1NGKSkmJihEW0QubGVuZ3RoXT1lZSksRFtELmxlbmd0aF09ZnVuY3Rpb24gZkgo'@;
put 'dyl7dmFyIFA9W107cmV0dXJuIHcuZm9yRWFjaChmdW5jdGlvbihEKXt2YXIgZWU9WyI8Zm9udD4iXTtELmJvbGQmJmVlLnB1c2goIjxiLz4iKSxELml0YWxpYyYmZWUucHVzaCgiPGkvPiIpLEQuc3RyaWtlJiZlZS5wdXNoKCI8c3RyaWtlLz4iKSxELnNoYWRvdyYmZWUucHVzaCgiPHNoYWRv'@;
put 'dy8+IiksYjhbK0QudW5kZXJsaW5lXSYmZWUucHVzaCgnPHUgdmFsPSInK2I4WytELnVuZGVybGluZV0rJyIvPicpLEQuc3omJmVlLnB1c2goJzxzeiB2YWw9IicrRC5zeisnIi8+JyksRC5jb2xvciYmZWUucHVzaChsZChELmNvbG9yLCEwKSksRC5uYW1lJiZlZS5wdXNoKCc8bmFtZSB2YWw9'@;
put 'IicrRC5uYW1lKyciLz4nKSxELmZhbWlseSYmZWUucHVzaCgnPGZhbWlseSB2YWw9IicrRC5mYW1pbHkrJyIvPicpLEQuc2NoZW1lJiZlZS5wdXNoKCc8c2NoZW1lIHZhbD0iJytELnNjaGVtZSsnIi8+JyksRC52YWxpZ24mJmVlLnB1c2goJzx2ZXJ0QWxpZ24gdmFsPSInK0QudmFsaWduKygi'@;
put 'c3ViIj09RC52YWxpZ258fCJzdXBlciI9PUQudmFsaWduPyJzY3JpcHQiOiIiKSsnIi8+JyksUC5wdXNoKGVlLmpvaW4oIiIpKyI8L2ZvbnQ+Iil9KSwnPGZvbnRzIGNvdW50PSInK1AubGVuZ3RoKyciPicrUC5qb2luKCIiKSsiPC9mb250cz4ifSgody5TdHlsZXN8fHt9KS5Gb250c3x8W10p'@;
put 'LERbRC5sZW5ndGhdPWZ1bmN0aW9uIHVIKHcpe3ZhciBQPVtdO3JldHVybiB3LmZvckVhY2goZnVuY3Rpb24oRCl7dmFyIGVlPW51bGw7aWYoRC5zdG9wcyYmRC5zdG9wcy5sZW5ndGgpe3ZhciBvZT17fTtELmFuZ2xlJiYob2UuZGVncmVlPU1hdGgucm91bmQoRC5hbmdsZSkpLGVlPUQuc3Rv'@;
put 'cHMubWFwKGZ1bmN0aW9uKGdlKXtyZXR1cm4gTXIoInN0b3AiLGxkKGdlLCJjb2xvciIsITApLG51bGwhPWdlLnY/e3Bvc2l0aW9uOmdlLnZ9Ont9KX0pLFAucHVzaCgiPGZpbGw+IitNcigiZ3JhZGllbnRGaWxsIixlZS5qb2luKCIiKSxvZSkrIjwvZmlsbD4iKX1lbHNle2lmKEQuZmdDb2xv'@;
put 'cil7aWYoZWU9KGVlfHwiIikrIjxmZ0NvbG9yICIsRC5mZ0NvbG9yLnRoZW1lKWVlKz0ndGhlbWU9IicrRC5mZ0NvbG9yLnRoZW1lKyciJysoRC5mZ0NvbG9yLnRpbnQ/JyB0aW50PSInK0QuZmdDb2xvci50aW50KyciJzoiIikrIi8+IjtlbHNlIGlmKG51bGwhPUQuZmdDb2xvci5pbmRleCYm'@;
put 'bnVsbD09RC5mZ0NvbG9yLnJnYillZSs9J2luZGV4ZWQ9IicrRC5mZ0NvbG9yLmluZGV4KyciLz4nO2Vsc2UgaWYoRC5mZ0NvbG9yLmF1dG8pZWUrPSdhdXRvPSIxIi8+JztlbHNle2lmKG51bGw9PUQuZmdDb2xvci5yZ2IpdGhyb3cgbmV3IEVycm9yKCJCYWQgY29sb3IgIittdChELmZnQ29s'@;
put 'b3IpLmpvaW4oInwiKSk7ZWUrPSdyZ2I9IkZGJytVYyhELmZnQ29sb3IucmdiKSsnIi8+J30ic29saWQiPT1ELnBhdHRlcm5UeXBlJiYhRC5iZ0NvbG9yJiYoRC5iZ0NvbG9yPXtpbmRleDo2NH0pfWlmKEQuYmdDb2xvcilpZihlZT0oZWV8fCIiKSsiPGJnQ29sb3IgIixELmJnQ29sb3IudGhl'@;
put 'bWUpZWUrPSd0aGVtZT0iJytELmJnQ29sb3IudGhlbWUrJyIvPic7ZWxzZSBpZihudWxsIT1ELmJnQ29sb3IuaW5kZXgmJm51bGw9PUQuYmdDb2xvci5yZ2IpZWUrPSdpbmRleGVkPSInK0QuYmdDb2xvci5pbmRleCsnIi8+JztlbHNlIGlmKEQuYmdDb2xvci5hdXRvKWVlKz0nYXV0bz0iMSIv'@;
put 'Pic7ZWxzZXtpZihudWxsPT1ELmJnQ29sb3IucmdiKXRocm93IG5ldyBFcnJvcigiQmFkIGNvbG9yICIrbXQoRC5iZ0NvbG9yKS5qb2luKCJ8IikpO2VlKz0ncmdiPSJGRicrVWMoRC5iZ0NvbG9yLnJnYikrJyIvPid9UC5wdXNoKCI8ZmlsbD4iK01yKCJwYXR0ZXJuRmlsbCIsZWUse3BhdHRl'@;
put 'cm5UeXBlOkQucGF0dGVyblR5cGV9KSsiPC9maWxsPiIpfX0pLCc8ZmlsbHMgY291bnQ9IicrUC5sZW5ndGgrJyI+JytQLmpvaW4oIiIpKyI8L2ZpbGxzPiJ9KCh3LlN0eWxlc3x8e30pLkZpbGxzfHxbXSksRFtELmxlbmd0aF09ZnVuY3Rpb24galEodyl7dmFyIFA9W107cmV0dXJuIHcuZm9y'@;
put 'RWFjaChmdW5jdGlvbihEKXt2YXIgZWU9W107ZWUucHVzaChrcChELmxlZnQsImxlZnQiKSksZWUucHVzaChrcChELnJpZ2h0LCJyaWdodCIpKSxlZS5wdXNoKGtwKEQudG9wLCJ0b3AiKSksZWUucHVzaChrcChELmJvdHRvbSwiYm90dG9tIikpLGVlLnB1c2goa3AoRC5kaWFnb25hbCwiZGlh'@;
put 'Z29uYWwiKSksUC5wdXNoKCI8Ym9yZGVyPiIrZWUuam9pbigiIikrIjwvYm9yZGVyPiIpfSksJzxib3JkZXJzIGNvdW50PSInK1AubGVuZ3RoKyciPicrUC5qb2luKCIiKSsiPC9ib3JkZXJzPiJ9KCh3LlN0eWxlc3x8e30pLkJvcmRlcnN8fFtdKSxEW0QubGVuZ3RoXT1mdW5jdGlvbiBVUSh3'@;
put 'KXt2YXIgUD1bJzx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSIwIiBmaWxsSWQ9IjAiIGJvcmRlcklkPSIwIi8+J107aWYodylmb3IodmFyIEQ9MTtEPHcubGVuZ3RoOysrRClQLnB1c2goTXIoInhmIixudWxsLHtudW1GbXRJZDp3W0RdLm51bUZtdElkfHwwLGZvbnRJZDp3W0RdLmZvbnRJZHx8'@;
put 'MCxmaWxsSWQ6d1tEXS5maWxsSWR8fDAsYm9yZGVySWQ6d1tEXS5ib3JkZXJJZHx8MH0pKTtyZXR1cm4nPGNlbGxTdHlsZVhmcyBjb3VudD0iJytQLmxlbmd0aCsnIj4nK1Auam9pbigiIikrIjwvY2VsbFN0eWxlWGZzPiJ9KFAuY2VsbFN0eWxlWGZzKSwoZWU9ZnVuY3Rpb24gelEodyl7dmFy'@;
put 'IFA9W107cmV0dXJuIFBbUC5sZW5ndGhdPU1yKCJjZWxsWGZzIixudWxsKSx3LmZvckVhY2goZnVuY3Rpb24oRCl7dmFyIGVlPUQuYWxpZ25tZW50O2RlbGV0ZSBELmFsaWdubWVudDt2YXIgb2U9RC5wcm90ZWN0aW9uO2RlbGV0ZSBELnByb3RlY3Rpb247dmFyIGdlPWVlP01yKCJhbGlnbm1l'@;
put 'bnQiLG51bGwsZWUpOiIiO2dlKz1vZT9NcigicHJvdGVjdGlvbiIsbnVsbCx7aGlkZGVuOm9lLmhpZGRlbj8xOjAsbG9ja2VkOm9lLmVkaXRhYmxlPzA6MX0pOiIiLFBbUC5sZW5ndGhdPU1yKCJ4ZiIsZ2V8fG51bGwsRCksZWUmJihELmFsaWdubWVudD1lZSksb2UmJihELnByb3RlY3Rpb249'@;
put 'b2UpfSksUFtQLmxlbmd0aF09IjwvY2VsbFhmcz4iLDI9PT1QLmxlbmd0aD8iIjooUFswXT1NcigiY2VsbFhmcyIsbnVsbCx7Y291bnQ6UC5sZW5ndGgtMn0pLnJlcGxhY2UoIi8+IiwiPiIpLFAuam9pbigiIikpfShQLmNlbGxYZnMpKSYmKERbRC5sZW5ndGhdPWVlKSxEW0QubGVuZ3RoXT1m'@;
put 'dW5jdGlvbiBwSCh3KXt2YXIgUD1bJzxjZWxsU3R5bGUgbmFtZT0iTm9ybWFsIiB4ZklkPSIwIiBidWlsdGluSWQ9IjAiLz4nXTtpZih3KWZvcih2YXIgRD0xO0Q8dy5sZW5ndGg7KytEKVAucHVzaChNcigiY2VsbFN0eWxlIixudWxsLHtuYW1lOndbRF0ubmFtZSx4ZklkOkR9KSk7cmV0dXJu'@;
put 'JzxjZWxsU3R5bGVzIGNvdW50PSInK1AubGVuZ3RoKyciPicrUC5qb2luKCIiKSsiPC9jZWxsU3R5bGVzPiJ9KFAuY2VsbFN0eWxlWGZzKSx3LlN0eWxlcy5EWEZ8fCh3LlN0eWxlcy5EWEY9W10pO3ZhciBvZT1mdW5jdGlvbiBLUSh3LFAsRCl7dmFyIGVlPVsnPHRhYmxlU3R5bGVzIGNvdW50'@;
put 'PSInKyh3fHxbXSkubGVuZ3RoKyciIGRlZmF1bHRUYWJsZVN0eWxlPSJUYWJsZVN0eWxlTWVkaXVtOSIgZGVmYXVsdFBpdm90U3R5bGU9IlBpdm90U3R5bGVNZWRpdW00IiddO3JldHVybiB3JiZ3Lmxlbmd0aD8oZWVbMF0rPSI+Iix3LmZvckVhY2goZnVuY3Rpb24ob2Upe2VlLnB1c2goZnVu'@;
put 'Y3Rpb24gV1EodyxQLEQpe3ZhciBlZT1bXTtbIndob2xlVGFibGUiLCJoZWFkZXJSb3ciLCJ0b3RhbFJvdyIsImZpcnN0Q29sdW1uIiwibGFzdENvbHVtbiIsImZpcnN0Um93U3RyaXBlIiwic2Vjb25kUm93U3RyaXBlIiwiZmlyc3RDb2x1bW5TdHJpcGUiLCJzZWNvbmRDb2x1bW5TdHJpcGUi'@;
put 'LCJmaXJzdEhlYWRlckNlbGwiLCJsYXN0SGVhZGVyQ2VsbCIsImZpcnN0VG90YWxDZWxsIiwibGFzdFRvdGFsQ2VsbCIsImZpcnN0U3VidG90YWxDb2x1bW4iLCJzZWNvbmRTdWJ0b3RhbENvbHVtbiIsInRoaXJkU3VidG90YWxDb2x1bW4iLCJmaXJzdFN1YnRvdGFsUm93Iiwic2Vjb25kU3Vi'@;
put 'dG90YWxSb3ciLCJ0aGlyZFN1YnRvdGFsUm93IiwiYmxhbmtSb3ciLCJmaXJzdENvbHVtblN1YmhlYWRpbmciLCJzZWNvbmRDb2x1bW5TdWJoZWFkaW5nIiwidGhpcmRDb2x1bW5TdWJoZWFkaW5nIiwiZmlyc3RSb3dTdWJoZWFkaW5nIiwic2Vjb25kUm93U3ViaGVhZGluZyIsInRoaXJkUm93'@;
put 'U3ViaGVhZGluZyIsInBhZ2VGaWVsZExhYmVscyIsInBhZ2VGaWVsZFZhbHVlcyJdLmZvckVhY2goZnVuY3Rpb24oZ2Upe2lmKHdbZ2VdKXt2YXIgX2U9am8oUCx3W2dlXSk7ZWUucHVzaCgnPHRhYmxlU3R5bGVFbGVtZW50IGR4ZklkPSInK19lKyciIHR5cGU9IicrZ2UrJyIvPicpfX0pO3Zh'@;
put 'ciBvZT0nPHRhYmxlU3R5bGUgY291bnQ9IicrZWUubGVuZ3RoKyciIHBpdm90PSInKyArISF3LnBpdm90KyciIG5hbWU9Iicrdy5uYW1lKyciJztyZXR1cm4gZWUubGVuZ3RoP29lKyI+IitlZS5qb2luKCIiKSsiPC90YWJsZVN0eWxlPiI6b2UrIi8+In0ob2UsUCkpfSksZWUuam9pbigiIikr'@;
put 'IjwvdGFibGVTdHlsZXM+Iik6ZWVbMF0rIi8+In0oKHcuU3R5bGVzfHx7fSkuVGFibGV8fFtdLHcuU3R5bGVzLkRYRik7cmV0dXJuIERbRC5sZW5ndGhdPWZ1bmN0aW9uIHc4KHcsUCl7aWYoIXcubGVuZ3RoKXJldHVybic8ZHhmcyBjb3VudD0iMCIvPic7dmFyIEQ9Wyc8ZHhmcyBjb3VudD0i'@;
put 'Jyt3Lmxlbmd0aCsnIj4nXTtyZXR1cm4gdy5mb3JFYWNoKGZ1bmN0aW9uKGVlKXtELnB1c2goZnVuY3Rpb24gZ0godyxQKXt2YXIgRD17Ym9sZDoiYiIsaXRhbGljOiJpIix2YWxpZ246InZlcnRBbGlnbiJ9LGVlPVsiPGR4Zj4iXSxvZT1bXSxnZT1bXSxfZT1bXSxNZT1bXTtyZXR1cm4gbXQo'@;
put 'dykuZm9yRWFjaChmdW5jdGlvbihVZSl7c3dpdGNoKFVlKXtjYXNlImJvbGQiOmNhc2UiaXRhbGljIjpjYXNlInN0cmlrZSI6Y2FzZSJ1bmRlcmxpbmUiOmNhc2UiY29sb3IiOmNhc2UidmFsaWduIjpjYXNlInN6IjpjYXNlIm5hbWUiOmNhc2Uib3V0bGluZSI6Y2FzZSJzaGFkb3ciOmNhc2Ui'@;
put 'Y2hhcnNldCI6Y2FzZSJmYW1pbHkiOmNhc2UiY29uZGVuc2UiOmNhc2UiZXh0ZW5kIjpjYXNlInNjaGVtZSI6b2UucHVzaChVZSk7YnJlYWs7Y2FzZSJiZ0NvbG9yIjpjYXNlImZnQ29sb3IiOl9lLnB1c2goVWUpO2JyZWFrO2Nhc2UieiI6Z2UucHVzaChVZSk7YnJlYWs7Y2FzZSJ0b3AiOmNh'@;
put 'c2UiYm90dG9tIjpjYXNlImxlZnQiOmNhc2UicmlnaHQiOmNhc2UiZGlhZ29uYWwiOmNhc2UidmVydGljYWwiOmNhc2UiaG9yaXpvbnRhbCI6TWUucHVzaChVZSk7YnJlYWs7Y2FzZSJwYXR0ZXJuVHlwZSI6Y2FzZSJkaWFnb25hbERvd24iOmNhc2UiZGlhZ29uYWxVcCI6Y2FzZSJzdG9wcyI6'@;
put 'Y2FzZSJkZWdyZWUiOmJyZWFrO2RlZmF1bHQ6dGhyb3ciVW5yZWNvZ25pemVkICIrVWUrIiBpbiBEWEYifX0pLG9lLmxlbmd0aD4wJiYoZWUucHVzaCgiPGZvbnQ+Iiksb2UuZm9yRWFjaChmdW5jdGlvbihVZSl7c3dpdGNoKFVlKXtjYXNlImJvbGQiOmNhc2UiaXRhbGljIjpjYXNlInN0cmlr'@;
put 'ZSI6Y2FzZSJvdXRsaW5lIjpjYXNlInNoYWRvdyI6Y2FzZSJjb25kZW5zZSI6Y2FzZSJleHRlbmQiOmVlLnB1c2goIjwiKyhEW1VlXXx8VWUpKycgdmFsPSInKyh3W1VlXT8iMSI6IjAiKSsnIi8+Jyk7YnJlYWs7Y2FzZSJjb2xvciI6ZWUucHVzaChsZCh3W1VlXSxVZSwhMCkpO2JyZWFrO2Nh'@;
put 'c2UiZmFtaWx5IjpjYXNlIm5hbWUiOmNhc2Uic3oiOmNhc2Uic2NoZW1lIjplZS5wdXNoKCI8IisoRFtVZV18fFVlKSsnIHZhbD0iJyt3W1VlXSsnIi8+Jyk7YnJlYWs7Y2FzZSJ1bmRlcmxpbmUiOmVlLnB1c2goJzx1IHZhbD0iJytiOFt3W1VlXXx8MF0rJyIvPicpO2JyZWFrO2Nhc2UidmFs'@;
put 'aWduIjplZS5wdXNoKCc8dmVydEFsaWduIHZhbD0iJyt3LnZhbGlnbisoInN1YiI9PXcudmFsaWdufHwic3VwZXIiPT13LnZhbGlnbj8ic2NyaXB0IjoiIikrJyIvPicpO2JyZWFrO2RlZmF1bHQ6dGhyb3ciVW5zdXBwb3J0ZWQgIitVZSsiIDogZm9udCBEWEYifX0pLGVlLnB1c2goIjwvZm9u'@;
put 'dD4iKSksZ2UubGVuZ3RoPjAmJmVlLnB1c2goJzxudW1GbXQgZm9ybWF0Q29kZT0iJytCcih3LnopKyciIG51bUZtdElkPSInK2Z1bmN0aW9uIEhwKHcsUCl7aWYoIm51bWJlciI9PXR5cGVvZiB3KXJldHVybiB3O3ZhciBEPVAucmV2c3NmW3c/PyJHZW5lcmFsIl0sZWU9NjA7aWYobnVsbD09'@;
put 'RClmb3IoO2VlPDM5MjsrK2VlKWlmKG51bGw9PVAuc3NmW2VlXSlyZXR1cm4gUy5sb2FkKHcsZWUpLFAuc3NmW2VlXT13LFAucmV2c3NmW3ddPWVlLGVlO3JldHVybiBEfSh3LnosUCkrJyIvPicpLF9lLmxlbmd0aD4wJiYoZWUucHVzaCgiPGZpbGw+IiksZWUucHVzaCgiPHBhdHRlcm5GaWxs'@;
put 'Iisody5wYXR0ZXJuVHlwZT8nIHBhdHRlcm5UeXBlPSInK3cucGF0dGVyblR5cGUrJyI+JzoiPiIpKSxfZS5mb3JFYWNoKGZ1bmN0aW9uKFVlKXtzd2l0Y2goVWUpe2Nhc2UicGF0dGVyblR5cGUiOmJyZWFrO2Nhc2UiZmdDb2xvciI6Y2FzZSJiZ0NvbG9yIjplZS5wdXNoKGxkKHdbVWVdLFVl'@;
put 'LCEwKSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyJVbnN1cHBvcnRlZCAiK1VlKyIgOiBmaWxsIERYRiJ9fSksZWUucHVzaCgiPC9wYXR0ZXJuRmlsbD4iKSxlZS5wdXNoKCI8L2ZpbGw+IikpLE1lLmxlbmd0aD4wPyhlZS5wdXNoKFsiPGJvcmRlciIsbnVsbCE9dy5kaWFnb25hbERvd24/JyBkaWFn'@;
put 'b25hbERvd249IicrICshIXcuZGlhZ29uYWxEb3duKyciJzoiIixudWxsIT13LmRpYWdvbmFsVXA/JyBkaWFnb25hbFVwPSInKyArISF3LmRpYWdvbmFsVXArJyInOiIiLCI+Il0uam9pbigiIikpLE1lLmZvckVhY2goZnVuY3Rpb24oVWUpe2VlLnB1c2goa3Aod1tVZV0sVWUpKX0pLGVlLnB1'@;
put 'c2goIjwvYm9yZGVyPiIpKToobnVsbCE9dy5kaWFnb25hbERvd258fG51bGwhPXcuZGlhZ29uYWxVcCkmJmVlLnB1c2goWyI8Ym9yZGVyIixudWxsIT13LmRpYWdvbmFsRG93bj8nIGRpYWdvbmFsRG93bj0iJysgKyEhdy5kaWFnb25hbERvd24rJyInOiIiLG51bGwhPXcuZGlhZ29uYWxVcD8n'@;
put 'IGRpYWdvbmFsVXA9IicrICshIXcuZGlhZ29uYWxVcCsnIic6IiIsIi8+Il0uam9pbigiIikpLDE9PWVlLmxlbmd0aD8iPGR4Zi8+IjplZS5qb2luKCIiKSsiPC9keGY+In0oZWUsUCkpfSksRC5qb2luKCIiKSsiPC9keGZzPiJ9KHcuU3R5bGVzLkRYRixQKSxEW0QubGVuZ3RoXT1vZSxELmxl'@;
put 'bmd0aD4yJiYoRFtELmxlbmd0aF09Ijwvc3R5bGVTaGVldD4iLERbMV09RFsxXS5yZXBsYWNlKCIvPiIsIj4iKSksRC5qb2luKCIiKX1mdW5jdGlvbiBFcCh3LFAsRCl7RHx8KEQ9cHIoNis0KlAubGVuZ3RoKSksRC53cml0ZV9zaGlmdCgyLHcpLGN1KFAsRCk7dmFyIGVlPUQubGVuZ3RoPkQu'@;
put 'bD9ELnNsaWNlKDAsRC5sKTpEO3JldHVybiBudWxsPT1ELmwmJihELmw9RC5sZW5ndGgpLGVlfWZ1bmN0aW9uIFM4KHcpe3JldHVybntjb2xvcjokZih3KSxwb3M6eWwodyl9fU5pLlNUWT0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVs'@;
put 'YXRpb25zaGlwcy9zdHlsZXMiO3ZhciBGbT1bIm5vbmUiLCJzb2xpZCIsIm1lZGl1bUdyYXkiLCJkYXJrR3JheSIsImxpZ2h0R3JheSIsImRhcmtIb3Jpem9udGFsIiwiZGFya1ZlcnRpY2FsIiwiZGFya0Rvd24iLCJkYXJrVXAiLCJkYXJrR3JpZCIsImRhcmtUcmVsbGlzIiwibGlnaHRIb3Jp'@;
put 'em9udGFsIiwibGlnaHRWZXJ0aWNhbCIsImxpZ2h0RG93biIsImxpZ2h0VXAiLCJsaWdodEdyaWQiLCJsaWdodFRyZWxsaXMiLCJncmF5MTI1IiwiZ3JheTA2MjUiXSxoaD13ZShGbSksTTg9WyJnZW5lcmFsIiwibGVmdCIsImNlbnRlciIsInJpZ2h0IiwiZmlsbCIsImp1c3RpZnkiLCJjZW50'@;
put 'ZXJDb250aW51b3VzIiwiZGlzdHJpYnV0ZWQiXSxIbT1bInRvcCIsImNlbnRlciIsImJvdHRvbSIsImp1c3RpZnkiLCJkaXN0cmlidXRlZCJdO2Z1bmN0aW9uIF9fKHcsUCxEKXtEfHwoRD1wcigxNikpLEQud3JpdGVfc2hpZnQoMixQfHwwKSxELndyaXRlX3NoaWZ0KDIsdy5udW1GbXRJZHx8'@;
put 'MCksRC53cml0ZV9zaGlmdCgyLHcuZm9udElkfHwwKSxELndyaXRlX3NoaWZ0KDIsdy5maWxsSWR8fDApLEQud3JpdGVfc2hpZnQoMix3LmJvcmRlcklkfHwwKSxELndyaXRlX3NoaWZ0KDEsdy5hbGlnbm1lbnQmJncuYWxpZ25tZW50LnRleHRSb3RhdGlvbnx8MCksRC53cml0ZV9zaGlmdCgx'@;
put 'LHcuYWxpZ25tZW50JiZ3LmFsaWdubWVudC5pbmRlbnR8fDApO3ZhciBlZT0wLG9lPTA7aWYody5hbGlnbm1lbnQpe2lmKHcuYWxpZ25tZW50Lmhvcml6b250YWwpe3ZhciBnZT1NOC5pbmRleE9mKHcuYWxpZ25tZW50Lmhvcml6b250YWwpO2dlPDAmJihnZT0wKSxlZXw9Z2V9aWYody5hbGln'@;
put 'bm1lbnQudmVydGljYWwpe3ZhciBfZT1IbS5pbmRleE9mKHcuYWxpZ25tZW50LnZlcnRpY2FsKTtfZTwwJiYoX2U9MiksZWV8PV9lPDwzfXcuYWxpZ25tZW50LndyYXBUZXh0JiYoZWV8PTY0KSx3LmFsaWdubWVudC5zaHJpbmtUb0ZpdCYmKG9lfD0xKX1yZXR1cm4gRC53cml0ZV9zaGlmdCgx'@;
put 'LGVlKSxELndyaXRlX3NoaWZ0KDEsb2UpLEQud3JpdGVfc2hpZnQoMSwwKSxELndyaXRlX3NoaWZ0KDEsMCksRH12YXIgcGg9WyJub25lIiwidGhpbiIsIm1lZGl1bSIsImRhc2hlZCIsImRvdHRlZCIsInRoaWNrIiwiZG91YmxlIiwiaGFpciIsIm1lZGl1bURhc2hlZCIsImRhc2hEb3QiLCJt'@;
put 'ZWRpdW1EYXNoRG90IiwiZGFzaERvdERvdCIsIm1lZGl1bURhc2hEb3REb3QiLCJzbGFudERhc2hEb3QiXTtmdW5jdGlvbiBObSh3KXt2YXIgUD13LnJlYWRfc2hpZnQoMSk7dy5sKz0xO3ZhciBEPSRmKHcpO3JldHVybntzdHlsZTpwaFtQXSxjb2xvcjpEfX1mdW5jdGlvbiB4cCh3LFApe3Jl'@;
put 'dHVybiBQfHwoUD1wcigxMCkpLHcmJncuc3R5bGUmJiIiIT13LnN0eWxlJiYibm9uZSIhPXcuc3R5bGUmJi0xIT09cGguaW5kZXhPZih3LnN0eWxlKT8oUC53cml0ZV9zaGlmdCgxLHBoLmluZGV4T2Yody5zdHlsZSkpLFAud3JpdGVfc2hpZnQoMSwwKSx3LmNvbG9yP3RoKHcuY29sb3IsUCk6'@;
put 'KFAud3JpdGVfc2hpZnQoNCwwKSxQLndyaXRlX3NoaWZ0KDQsMCkpKTooUC53cml0ZV9zaGlmdCgxLDApLFAud3JpdGVfc2hpZnQoMSwwKSxQLndyaXRlX3NoaWZ0KDQsMCksUC53cml0ZV9zaGlmdCg0LDApKSxQfWZ1bmN0aW9uIHNjKHcsUCl7cmV0dXJuIFB8fChQPXByKDUyKSksUC53cml0'@;
put 'ZV9zaGlmdCg0LHcueGZJZCksUC53cml0ZV9zaGlmdCgyLDEpLFAud3JpdGVfc2hpZnQoMSwrdy5idWlsdGluSWQpLFAud3JpdGVfc2hpZnQoMSwwKSxXZih3Lm5hbWV8fCIiLFApLFAubGVuZ3RoPlAubD9QLnNsaWNlKDAsUC5sKTpQfWZ1bmN0aW9uIFZtKHcsUCl7IVB8fCFQLnRoZW1lRWxl'@;
put 'bWVudHN8fCFQLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lfHxudWxsIT13LnRoZW1lJiYody5yZ2I9aWQoUC50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVt3LnRoZW1lXS5yZ2Isdy50aW50fHwwKSl9ZnVuY3Rpb24ga0godyxQKXt2YXIgRD1BdSgpO3JldHVybiBoaShELCJCcnRCZWdpblN0eWxl'@;
put 'U2hlZXQiKSxmdW5jdGlvbiBXdSh3LFApe2lmKFApe3ZhciBEPTA7W1s1LDhdLFsyMywyNl0sWzQxLDQ0XSxbNTAsMzkyXV0uZm9yRWFjaChmdW5jdGlvbihlZSl7Zm9yKHZhciBvZT1lZVswXTtvZTw9ZWVbMV07KytvZSludWxsIT1QW29lXSYmKytEfSksMCE9RCYmKGhpKHcsIkJydEJlZ2lu'@;
put 'Rm10cyIsRmMoRCkpLFtbNSw4XSxbMjMsMjZdLFs0MSw0NF0sWzUwLDM5Ml1dLmZvckVhY2goZnVuY3Rpb24oZWUpe2Zvcih2YXIgb2U9ZWVbMF07b2U8PWVlWzFdOysrb2UpbnVsbCE9UFtvZV0mJmhpKHcsIkJydEZtdCIsRXAob2UsUFtvZV0pKX0pLGhpKHcsIkJydEVuZEZtdHMiKSl9fShE'@;
put 'LHcuU1NGKSxmdW5jdGlvbiBCbSh3LFApe3ZhciBEPVAubGVuZ3RoOzAhPUQmJihoaSh3LCJCcnRCZWdpbkZvbnRzIixGYyhEKSksUC5mb3JFYWNoKGZ1bmN0aW9uKGVlKXtoaSh3LCJCcnRGb250IixmdW5jdGlvbiBLeCh3LFApe1B8fChQPXByKDE1MykpLFAud3JpdGVfc2hpZnQoMiwyMCp3'@;
put 'LnN6KSxmdW5jdGlvbiBwMih3LFApe1B8fChQPXByKDIpKSxQLndyaXRlX3NoaWZ0KDEsKHcuaXRhbGljPzI6MCl8KHcuc3RyaWtlPzg6MCl8KHcub3V0bGluZT8xNjowKXwody5zaGFkb3c/MzI6MCl8KHcuY29uZGVuc2U/NjQ6MCl8KHcuZXh0ZW5kPzEyODowKSksUC53cml0ZV9zaGlmdCgx'@;
put 'LDApfSh3LFApLFAud3JpdGVfc2hpZnQoMix3LmJvbGQ/NzAwOjQwMCk7dmFyIEQ9MDsic3VwZXIiPT13LnZhbGlnbj9EPTE6InN1YiI9PXcudmFsaWduJiYoRD0yKSxQLndyaXRlX3NoaWZ0KDIsRCksUC53cml0ZV9zaGlmdCgxLHcudW5kZXJsaW5lfHwwKSxQLndyaXRlX3NoaWZ0KDEsdy5m'@;
put 'YW1pbHl8fDApLFAud3JpdGVfc2hpZnQoMSx3LmNoYXJzZXR8fDApLFAud3JpdGVfc2hpZnQoMSwwKSx0aCh3LmNvbG9yLFApO3ZhciBlZT0wO3JldHVybiJtYWpvciI9PXcuc2NoZW1lJiYoZWU9MSksIm1pbm9yIj09dy5zY2hlbWUmJihlZT0yKSxQLndyaXRlX3NoaWZ0KDEsZWUpLGN1KHcu'@;
put 'bmFtZSxQKSxQLmxlbmd0aD5QLmw/UC5zbGljZSgwLFAubCk6UH0oZWUpKX0pLGhpKHcsIkJydEVuZEZvbnRzIikpfShELCh3LlN0eWxlc3x8e30pLkZvbnRzfHxbXSksZnVuY3Rpb24gcXgodyxQKXt2YXIgRD1QLmxlbmd0aDswIT1EJiYoaGkodywiQnJ0QmVnaW5GaWxscyIsRmMoRCkpLFAu'@;
put 'Zm9yRWFjaChmdW5jdGlvbihlZSl7aGkodywiQnJ0RmlsbCIsZnVuY3Rpb24geUgodyxQKXtQfHwoUD1wcig4NCkpO3ZhciBEPWhoW3cucGF0dGVyblR5cGVdO251bGw9PUQmJihEPTQwKSxQLndyaXRlX3NoaWZ0KDQsRD0rRCk7dmFyIGVlPTA7aWYoNDAhPUQpZm9yKHRoKHcuZmdDb2xvcnx8'@;
put 'e2luZGV4OjY0fSxQKSx0aCh3LmJnQ29sb3J8fHtpbmRleDo2NX0sUCk7ZWU8MTI7KytlZSlQLndyaXRlX3NoaWZ0KDQsMCk7ZWxzZXtmb3IoO2VlPDQ7KytlZSlQLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKDtlZTwxMjsrK2VlKVAud3JpdGVfc2hpZnQoNCwwKX1yZXR1cm4gUC5sZW5ndGg+UC5s'@;
put 'P1Auc2xpY2UoMCxQLmwpOlB9KGVlKSl9KSxoaSh3LCJCcnRFbmRGaWxscyIpKX0oRCwody5TdHlsZXN8fHt9KS5GaWxsc3x8W10pLGZ1bmN0aW9uIFh4KHcsUCl7dmFyIEQ9UC5sZW5ndGg7MCE9RCYmKGhpKHcsIkJydEJlZ2luQm9yZGVycyIsRmMoRCkpLFAuZm9yRWFjaChmdW5jdGlvbihl'@;
put 'ZSl7aGkodywiQnJ0Qm9yZGVyIixmdW5jdGlvbiBfSCh3LFApe3JldHVybiBQfHwoUD1wcig1MSkpLFAud3JpdGVfc2hpZnQoMSwwKSx4cCh3LnRvcCxQKSx4cCh3LmJvdHRvbSxQKSx4cCh3LmxlZnQsUCkseHAody5yaWdodCxQKSx4cChudWxsLFApLFAubGVuZ3RoPlAubD9QLnNsaWNlKDAs'@;
put 'UC5sKTpQfShlZSkpfSksaGkodywiQnJ0RW5kQm9yZGVycyIpKX0oRCwody5TdHlsZXN8fHt9KS5Cb3JkZXJzfHxbXSksZnVuY3Rpb24gd0godyxQKXt2YXIgRD0xO2lmKFAmJihEPVAubGVuZ3RoKSxoaSh3LCJCcnRCZWdpbkNlbGxTdHlsZVhGcyIsRmMoRCkpLGhpKHcsIkJydFhGIixfXyh7'@;
put 'bnVtRm10SWQ6MCxmb250SWQ6MCxmaWxsSWQ6MCxib3JkZXJJZDowfSw2NTUzNSkpLFApZm9yKHZhciBlZT0xO2VlPFAubGVuZ3RoOysrZWUpaGkodywiQnJ0WEYiLF9fKHtudW1GbXRJZDpQW2VlXS5udW1GbXRJZHx8MCxmb250SWQ6UFtlZV0uZm9udElkfHwwLGZpbGxJZDpQW2VlXS5maWxs'@;
put 'SWR8fDAsYm9yZGVySWQ6UFtlZV0uYm9yZGVySWR8fDB9LDY1NTM1KSk7aGkodywiQnJ0RW5kQ2VsbFN0eWxlWEZzIil9KEQsUC5jZWxsU3R5bGVYZnMpLGZ1bmN0aW9uIEp4KHcsUCl7aGkodywiQnJ0QmVnaW5DZWxsWEZzIixGYyhQLmxlbmd0aCkpLFAuZm9yRWFjaChmdW5jdGlvbihEKXto'@;
put 'aSh3LCJCcnRYRiIsX18oRCwwKSl9KSxoaSh3LCJCcnRFbmRDZWxsWEZzIil9KEQsUC5jZWxsWGZzKSxmdW5jdGlvbiBDSCh3LFApe3ZhciBEPTE7aWYoUCYmKEQ9UC5sZW5ndGgpLGhpKHcsIkJydEJlZ2luU3R5bGVzIixGYyhEKSksaGkodywiQnJ0U3R5bGUiLHNjKHt4ZklkOjAsYnVpbHRp'@;
put 'bklkOjAsbmFtZToiTm9ybWFsIn0pKSxQKWZvcih2YXIgZWU9MTtlZTxQLmxlbmd0aDsrK2VlKWhpKHcsIkJydFN0eWxlIixzYyh7eGZJZDplZSxidWlsdGluSWQ6MCxuYW1lOlBbZWVdLm5hbWV9KSk7aGkodywiQnJ0RW5kU3R5bGVzIil9KEQsUC5jZWxsU3R5bGVYZnMpLGZ1bmN0aW9uIFF4'@;
put 'KHcpe2hpKHcsIkJydEJlZ2luRFhGcyIsRmMoMCkpLGhpKHcsIkJydEVuZERYRnMiKX0oRCksZnVuY3Rpb24gU0godyl7aGkodywiQnJ0QmVnaW5UYWJsZVN0eWxlcyIsZnVuY3Rpb24gd18odyxQLEQpe3ZhciBlZT1wcigyMDUyKTtyZXR1cm4gZWUud3JpdGVfc2hpZnQoNCx3KSxXZihQLGVl'@;
put 'KSxXZihELGVlKSxlZS5sZW5ndGg+ZWUubD9lZS5zbGljZSgwLGVlLmwpOmVlfSgwLCJUYWJsZVN0eWxlTWVkaXVtOSIsIlBpdm90U3R5bGVNZWRpdW00IikpLGhpKHcsIkJydEVuZFRhYmxlU3R5bGVzIil9KEQpLGhpKEQsIkJydEVuZFN0eWxlU2hlZXQiKSxELmVuZCgpfU5pLlRIRU1FPSJo'@;
put 'dHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3RoZW1lIjt2YXIgRUg9WyI8L2E6bHQxPiIsIjwvYTpkazE+IiwiPC9hOmx0Mj4iLCI8L2E6ZGsyPiIsIjwvYTphY2NlbnQxPiIsIjwvYTphY2NlbnQyPiIsIjwvYTphY2Nl'@;
put 'bnQzPiIsIjwvYTphY2NlbnQ0PiIsIjwvYTphY2NlbnQ1PiIsIjwvYTphY2NlbnQ2PiIsIjwvYTpobGluaz4iLCI8L2E6Zm9sSGxpbms+Il07ZnVuY3Rpb24gU18odyxQLEQpe1AudGhlbWVFbGVtZW50cy5jbHJTY2hlbWU9W107dmFyIGVlPXt9Oyh3WzBdLm1hdGNoKHF0KXx8W10pLmZvckVh'@;
put 'Y2goZnVuY3Rpb24ob2Upe3ZhciBnZT1jbihvZSk7c3dpdGNoKGdlWzBdKXtjYXNlIjxhOmNsclNjaGVtZSI6Y2FzZSI8L2E6Y2xyU2NoZW1lPiI6Y2FzZSI8L2E6c3JnYkNscj4iOmNhc2UiPC9hOnN5c0Nscj4iOmJyZWFrO2Nhc2UiPGE6c3JnYkNsciI6ZWUucmdiPWdlLnZhbDticmVhaztj'@;
put 'YXNlIjxhOnN5c0NsciI6ZWUucmdiPWdlLmxhc3RDbHI7YnJlYWs7Y2FzZSI8YTpkazE+IjpjYXNlIjwvYTpkazE+IjpjYXNlIjxhOmx0MT4iOmNhc2UiPC9hOmx0MT4iOmNhc2UiPGE6ZGsyPiI6Y2FzZSI8L2E6ZGsyPiI6Y2FzZSI8YTpsdDI+IjpjYXNlIjwvYTpsdDI+IjpjYXNlIjxhOmFj'@;
put 'Y2VudDE+IjpjYXNlIjwvYTphY2NlbnQxPiI6Y2FzZSI8YTphY2NlbnQyPiI6Y2FzZSI8L2E6YWNjZW50Mj4iOmNhc2UiPGE6YWNjZW50Mz4iOmNhc2UiPC9hOmFjY2VudDM+IjpjYXNlIjxhOmFjY2VudDQ+IjpjYXNlIjwvYTphY2NlbnQ0PiI6Y2FzZSI8YTphY2NlbnQ1PiI6Y2FzZSI8L2E6'@;
put 'YWNjZW50NT4iOmNhc2UiPGE6YWNjZW50Nj4iOmNhc2UiPC9hOmFjY2VudDY+IjpjYXNlIjxhOmhsaW5rPiI6Y2FzZSI8L2E6aGxpbms+IjpjYXNlIjxhOmZvbEhsaW5rPiI6Y2FzZSI8L2E6Zm9sSGxpbms+IjoiLyI9PT1nZVswXS5jaGFyQXQoMSk/KFAudGhlbWVFbGVtZW50cy5jbHJTY2hl'@;
put 'bWVbRUguaW5kZXhPZihnZVswXSldPWVlLGVlPXt9KTplZS5uYW1lPWdlWzBdLnNsaWNlKDMsZ2VbMF0ubGVuZ3RoLTEpO2JyZWFrO2RlZmF1bHQ6aWYoRCYmRC5XVEYpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgIitnZVswXSsiIGluIGNsclNjaGVtZSIpfX0pfWZ1bmN0aW9uIE1f'@;
put 'KCl7fWZ1bmN0aW9uIHhIKCl7fXZhciBqbT0vPGE6Y2xyU2NoZW1lKFtePl0qKT5bXHNcU10qPFwvYTpjbHJTY2hlbWU+LyxBSD0vPGE6Zm9udFNjaGVtZShbXj5dKik+W1xzXFNdKjxcL2E6Zm9udFNjaGVtZT4vLFRIPS88YTpmbXRTY2hlbWUoW14+XSopPltcc1xTXSo8XC9hOmZtdFNjaGVt'@;
put 'ZT4vLHRBPS88YTp0aGVtZUVsZW1lbnRzKFtePl0qKT5bXHNcU10qPFwvYTp0aGVtZUVsZW1lbnRzPi87ZnVuY3Rpb24gazgodyxQKXtpZighd3x8MD09PXcubGVuZ3RoKXJldHVybiBrOChFMigpKTt2YXIgRCxlZT17fTtpZighKEQ9dy5tYXRjaCh0QSkpKXRocm93IG5ldyBFcnJvcigidGhl'@;
put 'bWVFbGVtZW50cyBub3QgZm91bmQgaW4gdGhlbWUiKTtyZXR1cm4gZnVuY3Rpb24gZUEodyxQLEQpe3ZhciBlZTtQLnRoZW1lRWxlbWVudHM9e30sW1siY2xyU2NoZW1lIixqbSxTX10sWyJmb250U2NoZW1lIixBSCxNX10sWyJmbXRTY2hlbWUiLFRILHhIXV0uZm9yRWFjaChmdW5jdGlvbihv'@;
put 'ZSl7aWYoIShlZT13Lm1hdGNoKG9lWzFdKSkpdGhyb3cgbmV3IEVycm9yKG9lWzBdKyIgbm90IGZvdW5kIGluIHRoZW1lRWxlbWVudHMiKTtvZVsyXShlZSxQLEQpfSl9KERbMF0sZWUsUCksZWUucmF3PXcsZWV9ZnVuY3Rpb24gRTIodyxQKXtpZihQJiZQLnRoZW1lWExTWClyZXR1cm4gUC50'@;
put 'aGVtZVhMU1g7aWYodyYmInN0cmluZyI9PXR5cGVvZiB3LnJhdylyZXR1cm4gdy5yYXc7dmFyIEQ9W0JuXTtyZXR1cm4gRFtELmxlbmd0aF09JzxhOnRoZW1lIHhtbG5zOmE9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9kcmF3aW5nbWwvMjAwNi9tYWluIiBuYW1lPSJPZmZp'@;
put 'Y2UgVGhlbWUiPicsRFtELmxlbmd0aF09IjxhOnRoZW1lRWxlbWVudHM+IixEW0QubGVuZ3RoXT0nPGE6Y2xyU2NoZW1lIG5hbWU9Ik9mZmljZSI+JyxEW0QubGVuZ3RoXT0nPGE6ZGsxPjxhOnN5c0NsciB2YWw9IndpbmRvd1RleHQiIGxhc3RDbHI9IjAwMDAwMCIvPjwvYTpkazE+JyxEW0Qu'@;
put 'bGVuZ3RoXT0nPGE6bHQxPjxhOnN5c0NsciB2YWw9IndpbmRvdyIgbGFzdENscj0iRkZGRkZGIi8+PC9hOmx0MT4nLERbRC5sZW5ndGhdPSc8YTpkazI+PGE6c3JnYkNsciB2YWw9IjFGNDk3RCIvPjwvYTpkazI+JyxEW0QubGVuZ3RoXT0nPGE6bHQyPjxhOnNyZ2JDbHIgdmFsPSJFRUVDRTEi'@;
put 'Lz48L2E6bHQyPicsRFtELmxlbmd0aF09JzxhOmFjY2VudDE+PGE6c3JnYkNsciB2YWw9IjRGODFCRCIvPjwvYTphY2NlbnQxPicsRFtELmxlbmd0aF09JzxhOmFjY2VudDI+PGE6c3JnYkNsciB2YWw9IkMwNTA0RCIvPjwvYTphY2NlbnQyPicsRFtELmxlbmd0aF09JzxhOmFjY2VudDM+PGE6'@;
put 'c3JnYkNsciB2YWw9IjlCQkI1OSIvPjwvYTphY2NlbnQzPicsRFtELmxlbmd0aF09JzxhOmFjY2VudDQ+PGE6c3JnYkNsciB2YWw9IjgwNjRBMiIvPjwvYTphY2NlbnQ0PicsRFtELmxlbmd0aF09JzxhOmFjY2VudDU+PGE6c3JnYkNsciB2YWw9IjRCQUNDNiIvPjwvYTphY2NlbnQ1PicsRFtE'@;
put 'Lmxlbmd0aF09JzxhOmFjY2VudDY+PGE6c3JnYkNsciB2YWw9IkY3OTY0NiIvPjwvYTphY2NlbnQ2PicsRFtELmxlbmd0aF09JzxhOmhsaW5rPjxhOnNyZ2JDbHIgdmFsPSIwMDAwRkYiLz48L2E6aGxpbms+JyxEW0QubGVuZ3RoXT0nPGE6Zm9sSGxpbms+PGE6c3JnYkNsciB2YWw9IjgwMDA4'@;
put 'MCIvPjwvYTpmb2xIbGluaz4nLERbRC5sZW5ndGhdPSI8L2E6Y2xyU2NoZW1lPiIsRFtELmxlbmd0aF09JzxhOmZvbnRTY2hlbWUgbmFtZT0iT2ZmaWNlIj4nLERbRC5sZW5ndGhdPSI8YTptYWpvckZvbnQ+IixEW0QubGVuZ3RoXT0nPGE6bGF0aW4gdHlwZWZhY2U9IkNhbWJyaWEiLz4nLERb'@;
put 'RC5sZW5ndGhdPSc8YTplYSB0eXBlZmFjZT0iIi8+JyxEW0QubGVuZ3RoXT0nPGE6Y3MgdHlwZWZhY2U9IiIvPicsRFtELmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJKcGFuIiB0eXBlZmFjZT0iXHVmZjJkXHVmZjMzIFx1ZmYzMFx1MzBiNFx1MzBiN1x1MzBjM1x1MzBhZiIvPicsRFtELmxl'@;
put 'bmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW5nIiB0eXBlZmFjZT0iXHViOWQxXHVjNzQwIFx1YWNlMFx1YjUxNSIvPicsRFtELmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW5zIiB0eXBlZmFjZT0iXHU1YjhiXHU0ZjUzIi8+JyxEW0QubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbnQi'@;
put 'IHR5cGVmYWNlPSJcdTY1YjBcdTdkMzBcdTY2MGVcdTlhZDQiLz4nLERbRC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQXJhYiIgdHlwZWZhY2U9IlRpbWVzIE5ldyBSb21hbiIvPicsRFtELmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIZWJyIiB0eXBlZmFjZT0iVGltZXMgTmV3IFJvbWFu'@;
put 'Ii8+JyxEW0QubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRoYWkiIHR5cGVmYWNlPSJUYWhvbWEiLz4nLERbRC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iRXRoaSIgdHlwZWZhY2U9Ik55YWxhIi8+JyxEW0QubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkJlbmciIHR5cGVmYWNlPSJWcmlu'@;
put 'ZGEiLz4nLERbRC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iR3VqciIgdHlwZWZhY2U9IlNocnV0aSIvPicsRFtELmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJLaG1yIiB0eXBlZmFjZT0iTW9vbEJvcmFuIi8+JyxEW0QubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IktuZGEiIHR5cGVmYWNl'@;
put 'PSJUdW5nYSIvPicsRFtELmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHdXJ1IiB0eXBlZmFjZT0iUmFhdmkiLz4nLERbRC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQ2FucyIgdHlwZWZhY2U9IkV1cGhlbWlhIi8+JyxEW0QubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkNoZXIiIHR5cGVm'@;
put 'YWNlPSJQbGFudGFnZW5ldCBDaGVyb2tlZSIvPicsRFtELmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJZaWlpIiB0eXBlZmFjZT0iTWljcm9zb2Z0IFlpIEJhaXRpIi8+JyxEW0QubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRpYnQiIHR5cGVmYWNlPSJNaWNyb3NvZnQgSGltYWxheWEiLz4n'@;
put 'LERbRC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGhhYSIgdHlwZWZhY2U9Ik1WIEJvbGkiLz4nLERbRC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iRGV2YSIgdHlwZWZhY2U9Ik1hbmdhbCIvPicsRFtELmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUZWx1IiB0eXBlZmFjZT0iR2F1dGFt'@;
put 'aSIvPicsRFtELmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUYW1sIiB0eXBlZmFjZT0iTGF0aGEiLz4nLERbRC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iU3lyYyIgdHlwZWZhY2U9IkVzdHJhbmdlbG8gRWRlc3NhIi8+JyxEW0QubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik9yeWEiIHR5'@;
put 'cGVmYWNlPSJLYWxpbmdhIi8+JyxEW0QubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik1seW0iIHR5cGVmYWNlPSJLYXJ0aWthIi8+JyxEW0QubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikxhb28iIHR5cGVmYWNlPSJEb2tDaGFtcGEiLz4nLERbRC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0i'@;
put 'U2luaCIgdHlwZWZhY2U9Iklza29vbGEgUG90YSIvPicsRFtELmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJNb25nIiB0eXBlZmFjZT0iTW9uZ29saWFuIEJhaXRpIi8+JyxEW0QubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlZpZXQiIHR5cGVmYWNlPSJUaW1lcyBOZXcgUm9tYW4iLz4nLERb'@;
put 'RC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVWlnaCIgdHlwZWZhY2U9Ik1pY3Jvc29mdCBVaWdodXIiLz4nLERbRC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iR2VvciIgdHlwZWZhY2U9IlN5bGZhZW4iLz4nLERbRC5sZW5ndGhdPSI8L2E6bWFqb3JGb250PiIsRFtELmxlbmd0aF09Ijxh'@;
put 'Om1pbm9yRm9udD4iLERbRC5sZW5ndGhdPSc8YTpsYXRpbiB0eXBlZmFjZT0iQ2FsaWJyaSIvPicsRFtELmxlbmd0aF09JzxhOmVhIHR5cGVmYWNlPSIiLz4nLERbRC5sZW5ndGhdPSc8YTpjcyB0eXBlZmFjZT0iIi8+JyxEW0QubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkpwYW4iIHR5cGVm'@;
put 'YWNlPSJcdWZmMmRcdWZmMzMgXHVmZjMwXHUzMGI0XHUzMGI3XHUzMGMzXHUzMGFmIi8+JyxEW0QubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbmciIHR5cGVmYWNlPSJcdWI5ZDFcdWM3NDAgXHVhY2UwXHViNTE1Ii8+JyxEW0QubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbnMiIHR5'@;
put 'cGVmYWNlPSJcdTViOGJcdTRmNTMiLz4nLERbRC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGFudCIgdHlwZWZhY2U9Ilx1NjViMFx1N2QzMFx1NjYwZVx1OWFkNCIvPicsRFtELmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJBcmFiIiB0eXBlZmFjZT0iQXJpYWwiLz4nLERbRC5sZW5ndGhd'@;
put 'PSc8YTpmb250IHNjcmlwdD0iSGViciIgdHlwZWZhY2U9IkFyaWFsIi8+JyxEW0QubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRoYWkiIHR5cGVmYWNlPSJUYWhvbWEiLz4nLERbRC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iRXRoaSIgdHlwZWZhY2U9Ik55YWxhIi8+JyxEW0QubGVuZ3Ro'@;
put 'XT0nPGE6Zm9udCBzY3JpcHQ9IkJlbmciIHR5cGVmYWNlPSJWcmluZGEiLz4nLERbRC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iR3VqciIgdHlwZWZhY2U9IlNocnV0aSIvPicsRFtELmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJLaG1yIiB0eXBlZmFjZT0iRGF1blBlbmgiLz4nLERbRC5s'@;
put 'ZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iS25kYSIgdHlwZWZhY2U9IlR1bmdhIi8+JyxEW0QubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikd1cnUiIHR5cGVmYWNlPSJSYWF2aSIvPicsRFtELmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJDYW5zIiB0eXBlZmFjZT0iRXVwaGVtaWEiLz4nLERb'@;
put 'RC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQ2hlciIgdHlwZWZhY2U9IlBsYW50YWdlbmV0IENoZXJva2VlIi8+JyxEW0QubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IllpaWkiIHR5cGVmYWNlPSJNaWNyb3NvZnQgWWkgQmFpdGkiLz4nLERbRC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0i'@;
put 'VGlidCIgdHlwZWZhY2U9Ik1pY3Jvc29mdCBIaW1hbGF5YSIvPicsRFtELmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaGFhIiB0eXBlZmFjZT0iTVYgQm9saSIvPicsRFtELmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJEZXZhIiB0eXBlZmFjZT0iTWFuZ2FsIi8+JyxEW0QubGVuZ3RoXT0n'@;
put 'PGE6Zm9udCBzY3JpcHQ9IlRlbHUiIHR5cGVmYWNlPSJHYXV0YW1pIi8+JyxEW0QubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRhbWwiIHR5cGVmYWNlPSJMYXRoYSIvPicsRFtELmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJTeXJjIiB0eXBlZmFjZT0iRXN0cmFuZ2VsbyBFZGVzc2EiLz4n'@;
put 'LERbRC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iT3J5YSIgdHlwZWZhY2U9IkthbGluZ2EiLz4nLERbRC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iTWx5bSIgdHlwZWZhY2U9IkthcnRpa2EiLz4nLERbRC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iTGFvbyIgdHlwZWZhY2U9IkRva0No'@;
put 'YW1wYSIvPicsRFtELmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJTaW5oIiB0eXBlZmFjZT0iSXNrb29sYSBQb3RhIi8+JyxEW0QubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik1vbmciIHR5cGVmYWNlPSJNb25nb2xpYW4gQmFpdGkiLz4nLERbRC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0i'@;
put 'VmlldCIgdHlwZWZhY2U9IkFyaWFsIi8+JyxEW0QubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlVpZ2giIHR5cGVmYWNlPSJNaWNyb3NvZnQgVWlnaHVyIi8+JyxEW0QubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikdlb3IiIHR5cGVmYWNlPSJTeWxmYWVuIi8+JyxEW0QubGVuZ3RoXT0iPC9h'@;
put 'Om1pbm9yRm9udD4iLERbRC5sZW5ndGhdPSI8L2E6Zm9udFNjaGVtZT4iLERbRC5sZW5ndGhdPSc8YTpmbXRTY2hlbWUgbmFtZT0iT2ZmaWNlIj4nLERbRC5sZW5ndGhdPSI8YTpmaWxsU3R5bGVMc3Q+IixEW0QubGVuZ3RoXT0nPGE6c29saWRGaWxsPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xy'@;
put 'Ii8+PC9hOnNvbGlkRmlsbD4nLERbRC5sZW5ndGhdPSc8YTpncmFkRmlsbCByb3RXaXRoU2hhcGU9IjEiPicsRFtELmxlbmd0aF09IjxhOmdzTHN0PiIsRFtELmxlbmd0aF09JzxhOmdzIHBvcz0iMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSI1MDAwMCIvPjxhOnNh'@;
put 'dE1vZCB2YWw9IjMwMDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsRFtELmxlbmd0aF09JzxhOmdzIHBvcz0iMzUwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iMzcwMDAiLz48YTpzYXRNb2QgdmFsPSIzMDAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4n'@;
put 'LERbRC5sZW5ndGhdPSc8YTpncyBwb3M9IjEwMDAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSIxNTAwMCIvPjxhOnNhdE1vZCB2YWw9IjM1MDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsRFtELmxlbmd0aF09IjwvYTpnc0xzdD4iLERbRC5sZW5ndGhdPSc8'@;
put 'YTpsaW4gYW5nPSIxNjIwMDAwMCIgc2NhbGVkPSIxIi8+JyxEW0QubGVuZ3RoXT0iPC9hOmdyYWRGaWxsPiIsRFtELmxlbmd0aF09JzxhOmdyYWRGaWxsIHJvdFdpdGhTaGFwZT0iMSI+JyxEW0QubGVuZ3RoXT0iPGE6Z3NMc3Q+IixEW0QubGVuZ3RoXT0nPGE6Z3MgcG9zPSIwIj48YTpzY2hl'@;
put 'bWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjEwMDAwMCIvPjxhOnNoYWRlIHZhbD0iMTAwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMTMwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxEW0QubGVuZ3RoXT0nPGE6Z3MgcG9zPSIxMDAwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xy'@;
put 'Ij48YTp0aW50IHZhbD0iNTAwMDAiLz48YTpzaGFkZSB2YWw9IjEwMDAwMCIvPjxhOnNhdE1vZCB2YWw9IjM1MDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsRFtELmxlbmd0aF09IjwvYTpnc0xzdD4iLERbRC5sZW5ndGhdPSc8YTpsaW4gYW5nPSIxNjIwMDAwMCIgc2NhbGVkPSIwIi8+'@;
put 'JyxEW0QubGVuZ3RoXT0iPC9hOmdyYWRGaWxsPiIsRFtELmxlbmd0aF09IjwvYTpmaWxsU3R5bGVMc3Q+IixEW0QubGVuZ3RoXT0iPGE6bG5TdHlsZUxzdD4iLERbRC5sZW5ndGhdPSc8YTpsbiB3PSI5NTI1IiBjYXA9ImZsYXQiIGNtcGQ9InNuZyIgYWxnbj0iY3RyIj48YTpzb2xpZEZpbGw+'@;
put 'PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnNoYWRlIHZhbD0iOTUwMDAiLz48YTpzYXRNb2QgdmFsPSIxMDUwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpzb2xpZEZpbGw+PGE6cHJzdERhc2ggdmFsPSJzb2xpZCIvPjwvYTpsbj4nLERbRC5sZW5ndGhdPSc8YTpsbiB3PSIyNTQwMCIgY2Fw'@;
put 'PSJmbGF0IiBjbXBkPSJzbmciIGFsZ249ImN0ciI+PGE6c29saWRGaWxsPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIi8+PC9hOnNvbGlkRmlsbD48YTpwcnN0RGFzaCB2YWw9InNvbGlkIi8+PC9hOmxuPicsRFtELmxlbmd0aF09JzxhOmxuIHc9IjM4MTAwIiBjYXA9ImZsYXQiIGNtcGQ9InNu'@;
put 'ZyIgYWxnbj0iY3RyIj48YTpzb2xpZEZpbGw+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiLz48L2E6c29saWRGaWxsPjxhOnByc3REYXNoIHZhbD0ic29saWQiLz48L2E6bG4+JyxEW0QubGVuZ3RoXT0iPC9hOmxuU3R5bGVMc3Q+IixEW0QubGVuZ3RoXT0iPGE6ZWZmZWN0U3R5bGVMc3Q+IixE'@;
put 'W0QubGVuZ3RoXT0iPGE6ZWZmZWN0U3R5bGU+IixEW0QubGVuZ3RoXT0iPGE6ZWZmZWN0THN0PiIsRFtELmxlbmd0aF09JzxhOm91dGVyU2hkdyBibHVyUmFkPSI0MDAwMCIgZGlzdD0iMjAwMDAiIGRpcj0iNTQwMDAwMCIgcm90V2l0aFNoYXBlPSIwIj48YTpzcmdiQ2xyIHZhbD0iMDAwMDAw'@;
put 'Ij48YTphbHBoYSB2YWw9IjM4MDAwIi8+PC9hOnNyZ2JDbHI+PC9hOm91dGVyU2hkdz4nLERbRC5sZW5ndGhdPSI8L2E6ZWZmZWN0THN0PiIsRFtELmxlbmd0aF09IjwvYTplZmZlY3RTdHlsZT4iLERbRC5sZW5ndGhdPSI8YTplZmZlY3RTdHlsZT4iLERbRC5sZW5ndGhdPSI8YTplZmZlY3RM'@;
put 'c3Q+IixEW0QubGVuZ3RoXT0nPGE6b3V0ZXJTaGR3IGJsdXJSYWQ9IjQwMDAwIiBkaXN0PSIyMzAwMCIgZGlyPSI1NDAwMDAwIiByb3RXaXRoU2hhcGU9IjAiPjxhOnNyZ2JDbHIgdmFsPSIwMDAwMDAiPjxhOmFscGhhIHZhbD0iMzUwMDAiLz48L2E6c3JnYkNscj48L2E6b3V0ZXJTaGR3Pics'@;
put 'RFtELmxlbmd0aF09IjwvYTplZmZlY3RMc3Q+IixEW0QubGVuZ3RoXT0iPC9hOmVmZmVjdFN0eWxlPiIsRFtELmxlbmd0aF09IjxhOmVmZmVjdFN0eWxlPiIsRFtELmxlbmd0aF09IjxhOmVmZmVjdExzdD4iLERbRC5sZW5ndGhdPSc8YTpvdXRlclNoZHcgYmx1clJhZD0iNDAwMDAiIGRpc3Q9'@;
put 'IjIzMDAwIiBkaXI9IjU0MDAwMDAiIHJvdFdpdGhTaGFwZT0iMCI+PGE6c3JnYkNsciB2YWw9IjAwMDAwMCI+PGE6YWxwaGEgdmFsPSIzNTAwMCIvPjwvYTpzcmdiQ2xyPjwvYTpvdXRlclNoZHc+JyxEW0QubGVuZ3RoXT0iPC9hOmVmZmVjdExzdD4iLERbRC5sZW5ndGhdPSc8YTpzY2VuZTNk'@;
put 'PjxhOmNhbWVyYSBwcnN0PSJvcnRob2dyYXBoaWNGcm9udCI+PGE6cm90IGxhdD0iMCIgbG9uPSIwIiByZXY9IjAiLz48L2E6Y2FtZXJhPjxhOmxpZ2h0UmlnIHJpZz0idGhyZWVQdCIgZGlyPSJ0Ij48YTpyb3QgbGF0PSIwIiBsb249IjAiIHJldj0iMTIwMDAwMCIvPjwvYTpsaWdodFJpZz48'@;
put 'L2E6c2NlbmUzZD4nLERbRC5sZW5ndGhdPSc8YTpzcDNkPjxhOmJldmVsVCB3PSI2MzUwMCIgaD0iMjU0MDAiLz48L2E6c3AzZD4nLERbRC5sZW5ndGhdPSI8L2E6ZWZmZWN0U3R5bGU+IixEW0QubGVuZ3RoXT0iPC9hOmVmZmVjdFN0eWxlTHN0PiIsRFtELmxlbmd0aF09IjxhOmJnRmlsbFN0'@;
put 'eWxlTHN0PiIsRFtELmxlbmd0aF09JzxhOnNvbGlkRmlsbD48YTpzY2hlbWVDbHIgdmFsPSJwaENsciIvPjwvYTpzb2xpZEZpbGw+JyxEW0QubGVuZ3RoXT0nPGE6Z3JhZEZpbGwgcm90V2l0aFNoYXBlPSIxIj4nLERbRC5sZW5ndGhdPSI8YTpnc0xzdD4iLERbRC5sZW5ndGhdPSc8YTpncyBw'@;
put 'b3M9IjAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iNDAwMDAiLz48YTpzYXRNb2QgdmFsPSIzNTAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLERbRC5sZW5ndGhdPSc8YTpncyBwb3M9IjQwMDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2'@;
put 'YWw9IjQ1MDAwIi8+PGE6c2hhZGUgdmFsPSI5OTAwMCIvPjxhOnNhdE1vZCB2YWw9IjM1MDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsRFtELmxlbmd0aF09JzxhOmdzIHBvcz0iMTAwMDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6c2hhZGUgdmFsPSIyMDAwMCIvPjxhOnNh'@;
put 'dE1vZCB2YWw9IjI1NTAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsRFtELmxlbmd0aF09IjwvYTpnc0xzdD4iLERbRC5sZW5ndGhdPSc8YTpwYXRoIHBhdGg9ImNpcmNsZSI+PGE6ZmlsbFRvUmVjdCBsPSI1MDAwMCIgdD0iLTgwMDAwIiByPSI1MDAwMCIgYj0iMTgwMDAwIi8+PC9hOnBh'@;
put 'dGg+JyxEW0QubGVuZ3RoXT0iPC9hOmdyYWRGaWxsPiIsRFtELmxlbmd0aF09JzxhOmdyYWRGaWxsIHJvdFdpdGhTaGFwZT0iMSI+JyxEW0QubGVuZ3RoXT0iPGE6Z3NMc3Q+IixEW0QubGVuZ3RoXT0nPGE6Z3MgcG9zPSIwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9'@;
put 'IjgwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMzAwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxEW0QubGVuZ3RoXT0nPGE6Z3MgcG9zPSIxMDAwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTpzaGFkZSB2YWw9IjMwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMjAwMDAwIi8+PC9hOnNj'@;
put 'aGVtZUNscj48L2E6Z3M+JyxEW0QubGVuZ3RoXT0iPC9hOmdzTHN0PiIsRFtELmxlbmd0aF09JzxhOnBhdGggcGF0aD0iY2lyY2xlIj48YTpmaWxsVG9SZWN0IGw9IjUwMDAwIiB0PSI1MDAwMCIgcj0iNTAwMDAiIGI9IjUwMDAwIi8+PC9hOnBhdGg+JyxEW0QubGVuZ3RoXT0iPC9hOmdyYWRG'@;
put 'aWxsPiIsRFtELmxlbmd0aF09IjwvYTpiZ0ZpbGxTdHlsZUxzdD4iLERbRC5sZW5ndGhdPSI8L2E6Zm10U2NoZW1lPiIsRFtELmxlbmd0aF09IjwvYTp0aGVtZUVsZW1lbnRzPiIsRFtELmxlbmd0aF09IjxhOm9iamVjdERlZmF1bHRzPiIsRFtELmxlbmd0aF09IjxhOnNwRGVmPiIsRFtELmxl'@;
put 'bmd0aF09JzxhOnNwUHIvPjxhOmJvZHlQci8+PGE6bHN0U3R5bGUvPjxhOnN0eWxlPjxhOmxuUmVmIGlkeD0iMSI+PGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwvYTpsblJlZj48YTpmaWxsUmVmIGlkeD0iMyI+PGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwvYTpmaWxsUmVmPjxh'@;
put 'OmVmZmVjdFJlZiBpZHg9IjIiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6ZWZmZWN0UmVmPjxhOmZvbnRSZWYgaWR4PSJtaW5vciI+PGE6c2NoZW1lQ2xyIHZhbD0ibHQxIi8+PC9hOmZvbnRSZWY+PC9hOnN0eWxlPicsRFtELmxlbmd0aF09IjwvYTpzcERlZj4iLERbRC5sZW5n'@;
put 'dGhdPSI8YTpsbkRlZj4iLERbRC5sZW5ndGhdPSc8YTpzcFByLz48YTpib2R5UHIvPjxhOmxzdFN0eWxlLz48YTpzdHlsZT48YTpsblJlZiBpZHg9IjIiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6bG5SZWY+PGE6ZmlsbFJlZiBpZHg9IjAiPjxhOnNjaGVtZUNsciB2YWw9ImFj'@;
put 'Y2VudDEiLz48L2E6ZmlsbFJlZj48YTplZmZlY3RSZWYgaWR4PSIxIj48YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmVmZmVjdFJlZj48YTpmb250UmVmIGlkeD0ibWlub3IiPjxhOnNjaGVtZUNsciB2YWw9InR4MSIvPjwvYTpmb250UmVmPjwvYTpzdHlsZT4nLERbRC5sZW5ndGhd'@;
put 'PSI8L2E6bG5EZWY+IixEW0QubGVuZ3RoXT0iPC9hOm9iamVjdERlZmF1bHRzPiIsRFtELmxlbmd0aF09IjxhOmV4dHJhQ2xyU2NoZW1lTHN0Lz4iLERbRC5sZW5ndGhdPSI8L2E6dGhlbWU+IixELmpvaW4oIiIpfWZ1bmN0aW9uIERIKHcpe3ZhciBQPXcucmVhZF9zaGlmdCgyKSxEPXcucmVh'@;
put 'ZF9zaGlmdCgyKS00LGVlPVtQXTtzd2l0Y2goUCl7Y2FzZSA0OmNhc2UgNTpjYXNlIDc6Y2FzZSA4OmNhc2UgOTpjYXNlIDEwOmNhc2UgMTE6Y2FzZSAxMzplZVsxXT1mdW5jdGlvbiBrXyh3KXt2YXIgUD17fTtzd2l0Y2goUC54Y2xyVHlwZT13LnJlYWRfc2hpZnQoMiksUC5uVGludFNoYWRl'@;
put 'PXcucmVhZF9zaGlmdCgyKSxQLnhjbHJUeXBlKXtjYXNlIDA6Y2FzZSA0OncubCs9NDticmVhaztjYXNlIDE6UC54Y2xyVmFsdWU9ZnVuY3Rpb24geDgodyxQKXtyZXR1cm4geHUodyxQKX0odyw0KTticmVhaztjYXNlIDI6UC54Y2xyVmFsdWU9SzYodyk7YnJlYWs7Y2FzZSAzOlAueGNsclZh'@;
put 'bHVlPWZ1bmN0aW9uIG5BKHcpe3JldHVybiB3LnJlYWRfc2hpZnQoNCl9KHcpfXJldHVybiB3LmwrPTgsUH0odyk7YnJlYWs7Y2FzZSA2OmVlWzFdPWZ1bmN0aW9uIE9IKHcsUCl7cmV0dXJuIHh1KHcsUCl9KHcsRCk7YnJlYWs7Y2FzZSAxNDpjYXNlIDE1OmVlWzFdPXcucmVhZF9zaGlmdCgx'@;
put 'PT09RD8xOjIpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgRXh0UHJvcCB0eXBlOiAiK1ArIiAiK0QpfXJldHVybiBlZX1mdW5jdGlvbiBSSCh3LFApe1AuZm9yRWFjaChmdW5jdGlvbihEKXtzd2l0Y2goRFswXSl7Y2FzZSA0OmNhc2UgNTpjYXNlIDY6Y2Fz'@;
put 'ZSA3OmNhc2UgODpjYXNlIDk6Y2FzZSAxMDpjYXNlIDExOmNhc2UgMTQ6Y2FzZSAxNTpicmVhaztjYXNlIDEzOncuZm9udCYmdy5mb250LmNvbG9yJiZBcnJheS5pc0FycmF5KERbMV0ueGNsclZhbHVlKSYmKHcuZm9udC5jb2xvci5yZ2I9ZmYoRFsxXS54Y2xyVmFsdWUpKX19KX1mdW5jdGlv'@;
put 'biBkbCh3KXtyZXR1cm4gdy85MTQ0MDAqazJ9ZnVuY3Rpb24gckEodyxQKXt2YXIgRD17fTtpZih3LnBvcylELng9ZGwody5wb3MueCksRC55PWRsKHcucG9zLnkpO2Vsc2V7aWYoIXcuZnJvbSl0aHJvdyJiYWQgYW5jaG9yIHN0YXJ0IjtELnI9dy5mcm9tLnJ8fDAsRC5jPXcuZnJvbS5jfHww'@;
put 'LHcuZnJvbS5jT2ZmJiYoRC54PWRsKHcuZnJvbS5jT2ZmKSksdy5mcm9tLnJPZmYmJihELnk9ZGwody5mcm9tLnJPZmYpKX1pZih3LmV4dClELnc9ZGwody5leHQueCksRC5oPWRsKHcuZXh0LnkpO2Vsc2V7aWYoIXcudG8pdGhyb3ciYmFkIGFuY2hvciBlbmQiO0QuQz13LnRvLmMsRC5SPXcu'@;
put 'dG8ucix3LnRvLmNPZmYmJihELlg9ZGwody50by5jT2ZmKSksdy50by5yT2ZmJiYoRC5ZPWRsKHcudG8uck9mZikpfXJldHVybiBEfWZ1bmN0aW9uIHgyKHcsUCl7dmFyIEQ9e3g6LTEseTotMSx3Oi0xLGg6LTF9O2lmKHcucG9zKUQueD1kbCh3LnBvcy54KSxELnk9ZGwody5wb3MueSk7ZWxz'@;
put 'ZXtpZighdy5mcm9tKXRocm93ImJhZCBhbmNob3Igc3RhcnQiO0QueD1wZihQLHcuZnJvbS5jLCJDIikrZGwody5mcm9tLmNPZmYpLEQueT1wZihQLHcuZnJvbS5yLCJSIikrZGwody5mcm9tLnJPZmYpfWlmKHcuZXh0KUQudz1kbCh3LmV4dC54KSxELmg9ZGwody5leHQueSk7ZWxzZXtpZigh'@;
put 'dy50byl0aHJvdyJiYWQgYW5jaG9yIGVuZCI7RC53PXBmKFAsdy50by5jLCJDIikrZGwody50by5jT2ZmKS1ELngsRC5oPXBmKFAsdy50by5yLCJSIikrZGwody50by5yT2ZmKS1ELnl9cmV0dXJuIER9ZnVuY3Rpb24gQTgodyxQKXt2YXIgRD17cjotMSxjOi0xLHg6LTEseTotMSxSOi0xLEM6'@;
put 'LTEsWDotMSxZOi0xfTtzd2l0Y2gody50eXBlKXtjYXNlInR3b0NlbGxBbmNob3IiOkQucj13LmZyb20ucixELnk9ZGwody5mcm9tLnJPZmYpLEQuUj13LnRvLnIsRC5ZPWRsKHcudG8uck9mZiksRC5jPXcuZnJvbS5jLEQueD1kbCh3LmZyb20uY09mZiksRC5DPXcudG8uYyxELlg9ZGwody50'@;
put 'by5jT2ZmKTticmVhaztjYXNlIm9uZUNlbGxBbmNob3IiOkQucj13LmZyb20ucixELnk9ZGwody5mcm9tLnJPZmYpO3ZhciBlZT1taChQLEQucixELnkrZGwody5leHQueSkpO0QuUj1lZVswXSxELlk9ZWVbMV0sRC5jPXcuZnJvbS5jLEQueD1kbCh3LmZyb20uY09mZik7dmFyIG9lPU84KFAs'@;
put 'RC5jLEQueCtkbCh3LmV4dC54KSk7RC5DPW9lWzBdLEQuWD1vZVsxXTticmVhaztjYXNlImFic29sdXRlQW5jaG9yIjp2YXIgZ2U9bWgoUCwwLGRsKHcucG9zLnkpKTtELnI9Z2VbMF0sRC55PWdlWzFdO3ZhciBfZT1taChQLEQucixELnkrZGwody5leHQueSkpO0QuUj1fZVswXSxELlk9X2Vb'@;
put 'MV07dmFyIHZlPW1oKFAsMCxkbCh3LnBvcy54KSk7RC5jPXZlWzBdLEQueD12ZVsxXTt2YXIgTWU9bWgoUCxELmMsRC54K2RsKHcuZXh0LngpKTtELkM9TWVbMF0sRC5YPU1lWzFdO2JyZWFrO2RlZmF1bHQ6dGhyb3ciYmFkIGFuY2hvciB0eXBlICIrdy50eXBlfXJldHVybiBEfWZ1bmN0aW9u'@;
put 'IFQ4KHcsUCl7dmFyIEQ9dy50cmltKCkuc3BsaXQoL1xzKixccyovKTtQWyIhcG9zIl09e2M6K0RbMF0seDorRFsxXSxyOitEWzJdLHk6K0RbM10sQzorRFs0XSxYOitEWzVdLFI6K0RbNl0sWTorRFs3XX19ZnVuY3Rpb24gaUEodyxQLEQpe3ZhciBlZT0tMTtpZihudWxsIT13LlJ8fG51bGwh'@;
put 'PXcuQyllZT0wO2Vsc2V7aWYobnVsbD09dy54fHxudWxsPT13Lnl8fG51bGw9PXcud3x8bnVsbD09dy5oKXRocm93ImNhbm5vdCBwYXJzZSBhbmNob3IgIitKU09OLnN0cmluZ2lmeSh3KTtlZT0xKzIqISh3LmN8fHcucil9aWYoZWUhPVApe3N3aXRjaChQKXtjYXNlIDA6Y2FzZSAxOmlmKDMh'@;
put 'PWVlKWJyZWFrO3ZhciBvZT1POChELHcuY3x8MCx3Lnh8fDApO3cuYz1vZVswXSx3Lng9b2VbMV07dmFyIGdlPW1oKEQsdy5yfHwwLHcueXx8MCk7dy5yPWdlWzBdLHcueT1nZVsxXTticmVhaztjYXNlIDM6aWYoMz09ZWUpYnJlYWs7dmFyIF9lPXcuY3x8MCx2ZT13Lnh8fDA7ZGVsZXRlIHcu'@;
put 'YyxkZWxldGUgdy54LHcueD0oX2U/em0oRCxfZSk6MCkrdmU7dmFyIE1lPXcucnx8MCxqZT13Lnl8fDA7ZGVsZXRlIHcucixkZWxldGUgdy55LHcueT0oTWU/QXAoRCxNZSk6MCkramU7YnJlYWs7ZGVmYXVsdDp0aHJvdyJjb252ZXJ0X2FuY2hvciB1bnJlY29nbml6ZWQgdHlwZSAiK1B9c3dp'@;
put 'dGNoKFApe2Nhc2UgMDppZigwPT1lZSlicmVhazt2YXIgVWU9TzgoRCx3LmN8fDAsKHcueHx8MCkrdy53KTtkZWxldGUgdy53LHcuQz1VZVswXSx3Llg9VWVbMV07dmFyIFhlPW1oKEQsdy5yfHwwLCh3Lnl8fDApK3cuaCk7ZGVsZXRlIHcuaCx3LlI9WGVbMF0sdy5ZPVhlWzFdO2JyZWFrO2Nh'@;
put 'c2UgMTpjYXNlIDM6aWYoMCE9ZWUpYnJlYWs7dmFyIGl0PXcuQ3x8MCxmdD13Llh8fDA7ZGVsZXRlIHcuQyxkZWxldGUgdy5YLHcudz16bShELGl0KStmdC0ody5jP3ptKEQsdy5jKTowKS0ody54fHwwKTt2YXIgTXQ9dy5SfHwwLHV0PXcuWXx8MDtkZWxldGUgdy5SLGRlbGV0ZSB3Llksdy5o'@;
put 'PUFwKEQsTXQpK3V0LSh3LnI/QXAoRCx3LnIpOjApLSh3Lnl8fDApO2JyZWFrO2RlZmF1bHQ6dGhyb3ciY29udmVydF9hbmNob3IgdW5yZWNvZ25pemVkIHR5cGUgIitQfX19ZnVuY3Rpb24gb0Eodyl7dmFyIFA9W3cuY3x8MCxNYXRoLnJvdW5kKHcueHx8MCksdy5yfHwwLE1hdGgucm91bmQo'@;
put 'dy55fHwwKV07cmV0dXJuKFA9UC5jb25jYXQody5oJiZ3Lnc/W1BbMF0sTWF0aC5yb3VuZChQWzFdK3cudyksUFsyXSxNYXRoLnJvdW5kKFBbM10rdy5oKV06W3cuQ3x8MCxNYXRoLnJvdW5kKHcuWHx8MCksdy5SfHwwLE1hdGgucm91bmQody5ZfHwwKV0pKS5qb2luKCIsICIpfWZ1bmN0aW9u'@;
put 'IEFwKHcsUCl7aWYoIXcpcmV0dXJuIDA7Zm9yKHZhciBEPTA7LS1QPj0wOyl7dmFyIGVlPSgod1siIXJvd3MiXXx8W10pW1BdfHx7fSkuaHB4O251bGw9PWVlJiYoZWU9KCh3WyIhc2hlZXRGb3JtYXQiXXx8e30pLnJvd3x8e30pLmhweCksbnVsbD09ZWUmJihlZT0yNCksRCs9ZWV9cmV0dXJu'@;
put 'IER9ZnVuY3Rpb24gem0odyxQKXtpZighdylyZXR1cm4gMDtmb3IodmFyIEQ9MDstLVA+PTA7KXt2YXIgZWU9KCh3WyIhY29scyJdfHxbXSlbUF18fHt9KS53cHg7aWYobnVsbD09ZWUmJihlZT0oKHdbIiFzaGVldEZvcm1hdCJdfHx7fSkuY29sfHx7fSkud3B4KSxudWxsPT1lZSl7dmFyIG9l'@;
put 'PXt3Y2g6OC40M307X2Mob2UpLHdbIiFjb2xzIl0mJih3WyIhY29scyJdW1BdPW9lKSxlZT1vZS53cHh9RCs9ZWV9cmV0dXJuIER9ZnVuY3Rpb24gcGYodyxQLEQpe3JldHVybiJDIj09RD96bSh3LFApOkFwKHcsUCl9ZnVuY3Rpb24gbWgodyxQLEQpe3ZhciBlZT1bUCxEXTtpZighdylyZXR1'@;
put 'cm4gZWU7Zm9yKDs7KXt2YXIgb2U9KHdbIiFyb3dzIl18fFtdKVtlZVswXV18fHt9O2lmKG9lLmhpZGRlbikrK2VlWzBdO2Vsc2V7dmFyIGdlPW9lLmhweDtpZihudWxsPT1nZSYmKGdlPSgod1siIXNoZWV0Rm9ybWF0Il18fHt9KS5yb3d8fHt9KS5ocHgpLG51bGw9PWdlJiYoZ2U9ZGYoMTUp'@;
put 'KSxlZVsxXTxnZSlicmVhaztlZVswXSsrLGVlWzFdLT1nZX19cmV0dXJuIGVlfWZ1bmN0aW9uIE84KHcsUCxEKXt2YXIgZWU9W1AsRF07aWYoIXcpcmV0dXJuIGVlO2Zvcig7Oyl7dmFyIG9lPSh3WyIhY29scyJdfHxbXSlbZWVbMF1dfHx7fTtpZihvZS5oaWRkZW58fDA9PT1vZS53cHgpKytl'@;
put 'ZVswXTtlbHNle3ZhciBnZT1vZS53cHg7aWYobnVsbD09Z2UmJihnZT0oKHdbIiFzaGVldEZvcm1hdCJdfHx7fSkuY29sfHx7fSkud3B4KSxudWxsPT1nZSl7dmFyIF9lPXt3Y2g6OC40M307X2MoX2UpLHdbIiFjb2xzIl0mJih3WyIhY29scyJdW2VlWzBdXT1fZSksZ2U9X2Uud3B4fWlmKGVl'@;
put 'WzFdPGdlKWJyZWFrO2VlWzBdKyssZWVbMV0tPWdlfX1yZXR1cm4gZWV9ZnVuY3Rpb24gVWModyl7cmV0dXJuKCIwMDAwMDAiKygibnVtYmVyIj09dHlwZW9mIHc/dy50b1N0cmluZygxNik6dykpLnNsaWNlKC02KX1mdW5jdGlvbiBsZCh3LFAsRCl7dmFyIGVlPSJzdHJpbmciPT10eXBlb2Yg'@;
put 'UD8hIUQ6ISFQOyJzdHJpbmciIT10eXBlb2YgUCYmKFA9ImNvbG9yIik7dmFyIG9lPSI8IitQKyIgIjtyZXR1cm4gdy5hdXRvP29lKydhdXRvPSIxIi8+Jzp3LmluZGV4JiZudWxsPT13LnJnYj9vZSsnaW5kZXhlZD0iJyt3LmluZGV4KyciLz4nOm51bGwhPXcudGhlbWU/b2UrJ3RoZW1lPSIn'@;
put 'K3cudGhlbWUrJyInKyh3LnRpbnQ/JyB0aW50PSInK3cudGludCsnIic6IiIpKyIvPiI6bnVsbCE9dy5yZ2I/b2UrJ3JnYj0iJysoZWU/IkZGIjoiIikrVWMody5yZ2IpKyciLz4nOm9lKyIvPiJ9ZnVuY3Rpb24gVHAodyxQKXtpZighd3x8bnVsbD09dy5yZ2IpcmV0dXJuIFA7Zm9yKHZhciBE'@;
put 'PSgiMDAwMDAwIit3LnJnYi50b1N0cmluZygxNikpLnNsaWNlKC02KSxlZT1bRC5zbGljZSgwLDIpLEQuc2xpY2UoMiw0KSxELnNsaWNlKDQsNildLm1hcChmdW5jdGlvbihfZSl7cmV0dXJuIHBhcnNlSW50KF9lLDE2KX0pLG9lPTA7b2U8U3IubGVuZ3RoOysrb2Upe3ZhciBnZT1TcltvZV07'@;
put 'aWYoZ2VbMF09PWVlWzBdJiZnZVsxXT09ZWVbMV0mJmdlWzJdPT1lZVsyXSlyZXR1cm4gb2V9cmV0dXJuIFNyLmxlbmd0aDw2ND8oU3IucHVzaChbZWVbMF0sZWVbMV0sZWVbMl1dKSxTci5sZW5ndGgtMSk6UH1mdW5jdGlvbiBtZih3KXt2YXIgUD1bIiIsIiIsIiJdO2lmKCF3KXJldHVybltd'@;
put 'O3ZhciBEPSIiLGVlPXcmJncucz9mdW5jdGlvbiBMSCh3KXt2YXIgUD1bIiIsIiJdO2lmKCF3KXJldHVybiBQO2lmKHcuc3omJihQWzBdKz0iJiIrdy5zeixQWzFdPSImMTIiK1BbMV0pLHcubmFtZSYmKFBbMF0rPScmIicrdy5uYW1lKycsUmVndWxhciInLFBbMV09JyYiLSxSZWd1bGFyIicr'@;
put 'UFsxXSksdy5ib2xkJiYoUFswXSs9IiZCIixQWzFdPSImQiIrUFsxXSksdy51bmRlcmxpbmUpe3ZhciBEPTI9PXcudW5kZXJsaW5lPyImRSI6IiZVIjtQWzBdKz1ELFBbMV09RCtQWzFdfXJldHVybiB3Lml0YWxpYyYmKFBbMF0rPSImSSIsUFsxXT0iJkkiK1BbMV0pLHcuY29sb3ImJm51bGwh'@;
put 'PXcuY29sb3IucmdiJiYoUFswXSs9IiZLIitVYyh3LmNvbG9yLnJnYiksUFsxXSs9IiZLMDAwMDAwIiksdy5zdHJpa2UmJihQWzBdKz0iJlMiLFBbMV09IiZTIitQWzFdKSwic3VwZXIiPT13LnZhbGlnbiYmKFBbMF0rPSImWCIsUFsxXT0iJlgiK1BbMV0pLCJzdWIiPT13LnZhbGlnbiYmKFBb'@;
put 'MF0rPSImWSIsUFsxXT0iJlkiK1BbMV0pLFB9KHcucyk6WyIiLCIiXTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHc/W3csdyx3XTpudWxsIT13LmZpcnN0fHxudWxsIT13LmV2ZW58fG51bGwhPXcub2RkPyhudWxsIT13Lm9kZCYmKFBbMF09bWYody5vZGQpWzBdKSx2b2lkIDA9PT13LmZpcnN0'@;
put 'JiZQWzBdJiYoUFsxXT1QWzBdKSxudWxsIT13LmZpcnN0JiYoUFsxXT1tZih3LmZpcnN0KVswXSksbnVsbCE9dy5ldmVuJiYoUFsyXT1tZih3LmV2ZW4pWzBdKSxQKTp3LmxlZnR8fHcuY2VudGVyfHx3LnJpZ2h0Pyh3LmxlZnQmJihEKz0iJkwiK21mKHcubGVmdClbMF0pLHcuY2VudGVyJiYo'@;
put 'RCs9IiZDIittZih3LmNlbnRlcilbMF0pLHcucmlnaHQmJihEKz0iJlIiK21mKHcucmlnaHQpWzBdKSxbRCxELERdKTpudWxsIT13LnY/W0Q9ZWVbMF0rdy52LnJlcGxhY2UoLyYvZywiJiYiKStlZVsxXSxELERdOm51bGwhPXcudz9bRD1lZVswXSt3LncrZWVbMV0sRCxEXTpBcnJheS5pc0Fy'@;
put 'cmF5KHcuUik/KHcuUi5mb3JFYWNoKGZ1bmN0aW9uKG9lKXtEKz1tZihvZSlbMF19KSxbRCxELERdKTpbXX12YXIgRDg9ezE6IkxldHRlciIsMzoiVGFibG9pZCIsNToiTGVnYWwiLDc6IkV4ZWN1dGl2ZSIsODoiQTMiLDk6IkE0IiwxMToiQTUiLDEyOiJCNCIsMTM6IkI1IiwxNDoiRm9saW8i'@;
put 'LDIwOiJFbnZlbG9wZSIsMzc6Ik1vbmFyY2giLDcwOiJBNiJ9LEVfPXdlKEQ4KTtOaS5DT05OPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2Nvbm5lY3Rpb25zIjt2YXIgUjg9TXIoImV4dGVybmFsTGluayIsbnVs'@;
put 'bCx7eG1sbnM6c2EubWFpblswXX0pO05pLklNRz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9pbWFnZSIsTmkuRFJBVz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIw'@;
put 'MDYvcmVsYXRpb25zaGlwcy9kcmF3aW5nIjt2YXIgUEg9e3Q6InRvcCIsY3RyOiJjZW50ZXIiLGI6ImJvdHRvbSIsanVzdDoidG9wIixkaXN0OiJ0b3AifSxjQT17Y3RyOiJjZW50ZXIiLGRpc3Q6ImNlbnRlciIsanVzdDoiY2VudGVyIixqdXN0TG93OiJjZW50ZXIiLGw6ImxlZnQiLHI6InJp'@;
put 'Z2h0Iix0aGFpRGlzdDoiY2VudGVyIn07ZnVuY3Rpb24gZkEoKXt2YXIgdz1bQm5dO3JldHVybiB3LnB1c2goJzx4ZHI6d3NEciB4bWxuczp4ZHI9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9kcmF3aW5nbWwvMjAwNi9zcHJlYWRzaGVldERyYXdpbmciIHhtbG5zOmE9Imh0'@;
put 'dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9kcmF3aW5nbWwvMjAwNi9tYWluIi8+Jyksdy5qb2luKCIiKX1mdW5jdGlvbiBkQSh3KXt2YXIgRCxQPXdbIiFkYXRhIl07cmV0dXJuImJhc2U2NCI9PT13WyIhZGF0YXR5cGUiXT8oKEQ9UC5tYXRjaCgvXmRhdGE6LiosLykpJiYoUD1Q'@;
put 'LnNsaWNlKERbMF0ubGVuZ3RoKSksbGUuZGVjb2RlKFApKTpQfU5pLlRBQkxFPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3RhYmxlIjt2YXIgT3A9LzwoPzpcdys6KT9zaGFwZSg/OlteXHddW14+XSopPz4oW1xz'@;
put 'XFNdKj8pPFwvKD86XHcrOik/c2hhcGU+L2c7ZnVuY3Rpb24gVkgodyxQLEQsZWUpe3ZhciBvZT1bMjE2MDAsMjE2MDBdLGdlPVsibTAsMGwwIixvZVsxXSxvZVswXSxvZVsxXSxvZVswXSwiMHhlIl0uam9pbigiLCIpLF9lPVtNcigieG1sIixudWxsLHsieG1sbnM6diI6R2kudiwieG1sbnM6'@;
put 'byI6R2kubywieG1sbnM6eCI6R2kueCwieG1sbnM6bXYiOkdpLm12fSkucmVwbGFjZSgvXC8+LywiPiIpLE1yKCJvOnNoYXBlbGF5b3V0IixNcigibzppZG1hcCIsbnVsbCx7InY6ZXh0IjoiZWRpdCJ9KSx7InY6ZXh0IjoiZWRpdCJ9KV0sdmU9MTAyNCp3LE1lPUR8fFtdO01lLmxlbmd0aD4w'@;
put 'JiZfZS5wdXNoKE1yKCJ2OnNoYXBldHlwZSIsW01yKCJ2OnN0cm9rZSIsbnVsbCx7am9pbnN0eWxlOiJtaXRlciJ9KSxNcigidjpwYXRoIixudWxsLHtzaGFkb3dvazoiZiIsZXh0cnVzaW9ub2s6ImYiLHN0cm9rZW9rOiJmIixmaWxsb2s6ImYiLCJvOmNvbm5lY3R0eXBlIjoicmVjdCJ9KSxN'@;
put 'cigibzpsb2NrIixudWxsLHsidjpleHQiOiJlZGl0IixzaGFwZXR5cGU6InQifSldLmpvaW4oIiIpLHtpZDoiX3gwMDAwX3QyMDEiLGNvb3Jkc2l6ZTpvZS5qb2luKCIsIiksIm86c3B0IjoyMDEscGF0aDpnZX0pKSxNZS5mb3JFYWNoKGZ1bmN0aW9uKFVlKXsrK3ZlLF9lPV9lLmNvbmNhdChm'@;
put 'dW5jdGlvbiBwQSh3LFApe3ZhciBEPXtpZDoiX3gwMDAwX3MiK1AsdHlwZToiI194MDAwMF90MjAxIixzdHlsZToibXNvLXdyYXAtc3R5bGU6dGlnaHQifTsoIlJhZGlvIj09d1siIXR5cGUiXXx8IkNoZWNrYm94Ij09d1siIXR5cGUiXXx8Ikxpc3QiPT13WyIhdHlwZSJdfHwiRHJvcCI9PXdb'@;
put 'IiF0eXBlIl0pJiYoRC5zdHJva2VkPSJmIiksIkxhYmVsIj09d1siIXR5cGUiXSYmKEQuZmlsbGVkPSJmIik7dmFyIGVlPSIiO3cudCYmaEFbd1siIXR5cGUiXV0mJihlZT1oQVt3WyIhdHlwZSJdXS5yZXBsYWNlKC8jIyMjLyxCcih3LnQpKSk7dmFyIG9lPVtdO3JldHVybiB3Lm1hY3JvJiZv'@;
put 'ZS5wdXNoKHZhKCJ4OkZtbGFNYWNybyIsdy5tYWNybykpLHcubGluayYmb2UucHVzaCh2YSgieDpGbWxhTGluayIsdy5saW5rKSksdy52YWwmJm9lLnB1c2godmEoIlJhZGlvIj09d1siIXR5cGUiXXx8IkNoZWNrYm94Ij09d1siIXR5cGUiXT8ieDpDaGVja2VkIjoieDpWYWwiLFN0cmluZyh3'@;
put 'LnZhbCkpKSx3LnJlZiYmb2UucHVzaCh2YSgieDpGbWxhUmFuZ2UiLHcucmVmKSksdy5zZWwmJiJMaXN0Ij09d1siIXR5cGUiXSYmb2UucHVzaCh2YSgieDpTZWxUeXBlIix3LnNlbCkpLHcubWluJiZvZS5wdXNoKHZhKCJ4Ok1pbiIsU3RyaW5nKHcubWluKSkpLHcubWF4JiZvZS5wdXNoKHZh'@;
put 'KCJ4Ok1heCIsU3RyaW5nKHcubWF4KSkpLHcuc3RlcCYmb2UucHVzaCh2YSgieDpJbmMiLFN0cmluZyh3LnN0ZXApKSksdy5wYWdlJiZvZS5wdXNoKHZhKCJ4OlBhZ2UiLFN0cmluZyh3LnBhZ2UpKSksW10uY29uY2F0KFsiPHY6c2hhcGUiK0ZsKEQpKyI+Il0pLmNvbmNhdChUX1t3WyIhdHlw'@;
put 'ZSJdXXx8W10pLmNvbmNhdChbZWVdKS5jb25jYXQoWyc8eDpDbGllbnREYXRhIE9iamVjdFR5cGU9Iicrd1siIXR5cGUiXSsnIj4nLHZhKCJ4OkFuY2hvciIsb0Eod1siIXBvcyJdKSksdmEoIng6UHJpbnRPYmplY3QiLCJGYWxzZSIpXSkuY29uY2F0KG9lKS5jb25jYXQoSlFbd1siIXR5cGUi'@;
put 'XV18fFtdKS5jb25jYXQoWyI8L3g6Q2xpZW50RGF0YT4iLCI8L3Y6c2hhcGU+Il0pfShVZSx2ZSkpfSk7dmFyIGplPVB8fFtdO3JldHVybiBqZS5sZW5ndGg+MCYmX2UucHVzaChNcigidjpzaGFwZXR5cGUiLFtNcigidjpzdHJva2UiLG51bGwse2pvaW5zdHlsZToibWl0ZXIifSksTXIoInY6'@;
put 'cGF0aCIsbnVsbCx7Z3JhZGllbnRzaGFwZW9rOiJ0Iiwibzpjb25uZWN0dHlwZSI6InJlY3QifSldLmpvaW4oIiIpLHtpZDoiX3gwMDAwX3QyMDIiLGNvb3Jkc2l6ZTpvZS5qb2luKCIsIiksIm86c3B0IjoyMDIscGF0aDpnZX0pKSxqZS5mb3JFYWNoKGZ1bmN0aW9uKFVlKXsrK3ZlLF9lPV9l'@;
put 'LmNvbmNhdChmdW5jdGlvbiBHbSh3LFAsRCl7dmFyIGVlPWNhKHdbMF0pLG9lPXdbMV0uZmlsbHx8e307d1sxXS5zJiYob2U9e3R5cGU6d1sxXS5zLnBhdHRlcm5UeXBlfHwic29saWQifSx3WzFdLnMuZmdDb2xvciYmKG9lLmNvbG9yMj1vZS5jb2xvcjE9IiMiK1VjKHdbMV0ucy5mZ0NvbG9y'@;
put 'LnJnYikpLHdbMV0ucy5iZ0NvbG9yJiYob2UuY29sb3IyPSIjIitVYyh3WzFdLnMuYmdDb2xvci5yZ2IpKSk7dmFyIGdlPXtjb2xvcjI6b2UuY29sb3IyfHwiI0JFRkY4MiIsdHlwZTpvZS50eXBlfHwiZ3JhZGllbnQifTsiZ3JhZGllbnQiPT1nZS50eXBlJiYoZ2UuYW5nbGU9Ii0xODAiKTt2'@;
put 'YXIgX2U9ImdyYWRpZW50Ij09Z2UudHlwZT9NcigibzpmaWxsIixudWxsLHt0eXBlOiJncmFkaWVudFVuc2NhbGVkIiwidjpleHQiOiJ2aWV3In0pOm51bGwsdmU9TXIoInY6ZmlsbCIsX2UsZ2UpLE1lPXt9O3dbMV0uc2hhZG93JiYod1sxXS5zaGFkb3cuY29sb3ImJihNZS5jb2xvcj13WzFd'@;
put 'LnNoYWRvdy5jb2xvciksd1sxXS5zaGFkb3cub24mJihNZS5vbj13WzFdLnNoYWRvdy5vbikpLE1lLm9ic2N1cmVkPSJ0Ijt2YXIgamU9ITAsVWU9ITAsWGU9d1sxXVsiIXBvcyJdP0p0KHdbMV1bIiFwb3MiXSk6bnVsbDtyZXR1cm4gWGUmJihVZT1udWxsPT1YZS5SJiZudWxsPT1YZS5DJiZu'@;
put 'dWxsPT1YZS5YJiZudWxsPT1YZS5ZLGplPSFYZS5yJiYhWGUuYyxpQShYZSwwLEQpKSxbIjx2OnNoYXBlIitGbCh7aWQ6Il94MDAwMF9zIitQLHR5cGU6IiNfeDAwMDBfdDIwMiIsc3R5bGU6InBvc2l0aW9uOmFic29sdXRlOyBtYXJnaW4tbGVmdDo4MHB0O21hcmdpbi10b3A6NXB0O3dpZHRo'@;
put 'OjEwNHB0O2hlaWdodDo2NHB0O3otaW5kZXg6MTAiKyh3WzFdLmhpZGRlbj8iO3Zpc2liaWxpdHk6aGlkZGVuIjoiIiksZmlsbGNvbG9yOm9lLmNvbG9yMXx8IiNFQ0ZBRDQiLHN0cm9rZWNvbG9yOih3WzFdLnN0cm9rZXx8e30pLmNvbG9yfHwiI2VkZWFhMSJ9KSsiPiIsdmUsTXIoInY6c2hh'@;
put 'ZG93IixudWxsLE1lKSxNcigidjpwYXRoIixudWxsLHsibzpjb25uZWN0dHlwZSI6Im5vbmUifSksJzx2OnRleHRib3g+PGRpdiBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0Ij48L2Rpdj48L3Y6dGV4dGJveD4nLCc8eDpDbGllbnREYXRhIE9iamVjdFR5cGU9Ik5vdGUiPicsamU/Ijx4Ok1vdmVX'@;
put 'aXRoQ2VsbHMvPiI6IiIsVWU/Ijx4OlNpemVXaXRoQ2VsbHMvPiI6IiIsdmEoIng6QW5jaG9yIixYZT9vQShYZSk6d1sxXS5yYXdhbmNob3J8fFtlZS5jKzEsMCxlZS5yKzEsMCxlZS5jKzMsMjAsZWUucis1LDIwXS5qb2luKCIsIikpLHZhKCJ4OkF1dG9GaWxsIiwiRmFsc2UiKSx2YSgieDpS'@;
put 'b3ciLFN0cmluZyhlZS5yKSksdmEoIng6Q29sdW1uIixTdHJpbmcoZWUuYykpLHdbMV0uaGlkZGVuPyIiOiI8eDpWaXNpYmxlLz4iLCI8L3g6Q2xpZW50RGF0YT4iLCI8L3Y6c2hhcGU+Il19KFVlLHZlLGVlKSl9KSxfZS5wdXNoKCI8L3htbD4iKSxfZS5qb2luKCIiKX12YXIgSlE9e0J1dHRv'@;
put 'bjpbIjx4OkF1dG9GaWxsPkZhbHNlPC94OkF1dG9GaWxsPiIsIjx4OlRleHRIQWxpZ24+Q2VudGVyPC94OlRleHRIQWxpZ24+IiwiPHg6VGV4dFZBbGlnbj5DZW50ZXI8L3g6VGV4dFZBbGlnbj4iXSxHQm94OlsiPHg6U2l6ZVdpdGhDZWxscy8+IiwiPHg6QXV0b0ZpbGw+RmFsc2U8L3g6QXV0'@;
put 'b0ZpbGw+IiwiPHg6Tm9UaHJlZUQvPiJdLExhYmVsOlsiPHg6QXV0b0ZpbGw+RmFsc2U8L3g6QXV0b0ZpbGw+IiwiPHg6QXV0b0xpbmU+RmFsc2U8L3g6QXV0b0xpbmU+Il0sUmFkaW86WyI8eDpTaXplV2l0aENlbGxzLz4iLCI8eDpBdXRvRmlsbD5GYWxzZTwveDpBdXRvRmlsbD4iLCI8eDpB'@;
put 'dXRvTGluZT5GYWxzZTwveDpBdXRvTGluZT4iLCI8eDpUZXh0VkFsaWduPkNlbnRlcjwveDpUZXh0VkFsaWduPiIsIjx4Ok5vVGhyZWVELz4iXSxDaGVja2JveDpbIjx4OlNpemVXaXRoQ2VsbHMvPiIsIjx4OkF1dG9GaWxsPkZhbHNlPC94OkF1dG9GaWxsPiIsIjx4OkF1dG9MaW5lPkZhbHNl'@;
put 'PC94OkF1dG9MaW5lPiIsIjx4OlRleHRWQWxpZ24+Q2VudGVyPC94OlRleHRWQWxpZ24+IiwiPHg6Tm9UaHJlZUQvPiJdLERyb3A6WyI8eDpTaXplV2l0aENlbGxzLz4iLCI8eDpBdXRvTGluZT5GYWxzZTwveDpBdXRvTGluZT4iLCI8eDpOb1RocmVlRDIvPiIsIjx4OlNlbFR5cGU+U2luZ2xl'@;
put 'PC94OlNlbFR5cGU+IiwiPHg6RHJvcFN0eWxlPkNvbWJvPC94OkRyb3BTdHlsZT4iLCI8eDpMQ1Q+Tm9ybWFsPC94OkxDVD4iLCI8eDpEcm9wTGluZXM+NDwveDpEcm9wTGluZXM+Il0sTGlzdDpbIjx4OlNpemVXaXRoQ2VsbHMvPiIsIjx4OkF1dG9MaW5lPkZhbHNlPC94OkF1dG9MaW5lPiIs'@;
put 'Ijx4Ok5vVGhyZWVEMi8+IiwiPHg6TENUPk5vcm1hbDwveDpMQ1Q+IiwiPHg6VmFsPjA8L3g6VmFsPiIsIjx4Ok1pbj4wPC94Ok1pbj4iLCI8eDpNYXg+NTwveDpNYXg+IiwiPHg6SW5jPjE8L3g6SW5jPiIsIjx4OlBhZ2U+NDwveDpQYWdlPiIsIjx4OkR4PjE1PC94OkR4PiJdLFNjcm9sbDpb'@;
put 'Ijx4OlNpemVXaXRoQ2VsbHMvPiIsIjx4Okhvcml6Lz4iLCI8eDpEeD4xNTwveDpEeD4iXSxTcGluOlsiPHg6RHg+MTU8L3g6RHg+Il19LGhBPXtCdXR0b246Ijx2OnRleHRib3ggc3R5bGU9J21zby1kaXJlY3Rpb24tYWx0OmF1dG8nIG86c2luZ2xlY2xpY2s9J2YnPjxkaXYgc3R5bGU9J3Rl'@;
put 'eHQtYWxpZ246Y2VudGVyJz48Zm9udCBmYWNlPSdDYWxpYnJpJyBzaXplPScyNDAnIGNvbG9yPScjMDAwMDAwJz4jIyMjPC9mb250PjwvZGl2Pjwvdjp0ZXh0Ym94PiIsR0JveDoiPHY6dGV4dGJveCBzdHlsZT0nbXNvLWRpcmVjdGlvbi1hbHQ6YXV0bycgbzpzaW5nbGVjbGljaz0nZic+PGRp'@;
put 'diBzdHlsZT0ndGV4dC1hbGlnbjpsZWZ0Jz48Zm9udCBmYWNlPSdMdWNpZGEgR3JhbmRlJyBzaXplPScyNjAnIGNvbG9yPScjMDAwMDAwJz4jIyMjPC9mb250PjwvZGl2Pjwvdjp0ZXh0Ym94PiIsUmFkaW86Ijx2OnRleHRib3ggc3R5bGU9J21zby1kaXJlY3Rpb24tYWx0OmF1dG8nIG86c2lu'@;
put 'Z2xlY2xpY2s9J2YnPjxkaXYgc3R5bGU9J3RleHQtYWxpZ246bGVmdCc+PGZvbnQgZmFjZT0nTHVjaWRhIEdyYW5kZScgc2l6ZT0nMjYwJyBjb2xvcj0nYXV0byc+IyMjIzwvZm9udD48L2Rpdj48L3Y6dGV4dGJveD4iLExhYmVsOiI8djp0ZXh0Ym94IHN0eWxlPSdtc28tZGlyZWN0aW9uLWFs'@;
put 'dDphdXRvJyBvOnNpbmdsZWNsaWNrPSdmJz48ZGl2IHN0eWxlPSd0ZXh0LWFsaWduOmxlZnQnPjxmb250IGZhY2U9J0x1Y2lkYSBHcmFuZGUnIHNpemU9JzI2MCcgY29sb3I9JyMwMDAwMDAnPiMjIyM8L2ZvbnQ+PC9kaXY+PC92OnRleHRib3g+IixDaGVja2JveDoiPHY6dGV4dGJveCBzdHls'@;
put 'ZT0nbXNvLWRpcmVjdGlvbi1hbHQ6YXV0bycgbzpzaW5nbGVjbGljaz0nZic+PGRpdiBzdHlsZT0ndGV4dC1hbGlnbjpsZWZ0Jz48Zm9udCBmYWNlPSdMdWNpZGEgR3JhbmRlJyBzaXplPScyNjAnIGNvbG9yPScjMDAwMDAwJz4jIyMjPC9mb250PjwvZGl2Pjwvdjp0ZXh0Ym94PiIsc2hlZXRq'@;
put 'czoiZGFmdXEifSxUXz17QnV0dG9uOlsnPHY6ZmlsbCBjb2xvcjI9IiNmMGYwZjAgWzY3XSIgbzpkZXRlY3Rtb3VzZWNsaWNrPSJ0Ii8+JywnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiLz4nXSxHQm94OlsnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiLz4nXSxE'@;
put 'cm9wOlsnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiIHRleHQ9InQiLz4nXSxMaXN0OlsnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiIHRleHQ9InQiLz4nXSxTcGluOlsnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiIHRleHQ9InQiLz4nXSxTY3Jv'@;
put 'bGw6Wyc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIgdGV4dD0idCIvPiddLExhYmVsOlsnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiLz4nXSxSYWRpbzpbJzx2OnBhdGggc2hhZG93b2s9InQiIHN0cm9rZW9rPSJ0IiBmaWxsb2s9InQiLz4nLCc8bzpsb2NrIHY6'@;
put 'ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIvPiddLENoZWNrYm94OlsnPHY6cGF0aCBzaGFkb3dvaz0idCIgc3Ryb2tlb2s9InQiIGZpbGxvaz0idCIvPicsJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0Ii8+J10sc2hlZXRqczpbXX07ZnVuY3Rpb24gTDgodyxQLEQsZWUpe3ZhciBv'@;
put 'ZT17IiFpZCI6e319LGdlPVtNcigieG1sIixudWxsLHsieG1sbnM6diI6R2kudiwieG1sbnM6byI6R2kubywieG1sbnM6eCI6R2kueH0pLnJlcGxhY2UoL1wvPi8sIj4iKSxNcigibzpzaGFwZWxheW91dCIsTXIoIm86aWRtYXAiLG51bGwseyJ2OmV4dCI6ImVkaXQiLGRhdGE6MX0pLHsidjpl'@;
put 'eHQiOiJlZGl0In0pLCc8djpzaGFwZXR5cGUgaWQ9Il94MDAwMF90NzUiIGNvb3Jkc2l6ZT0iMjE2MDAsMjE2MDAiIG86c3B0PSI3NSIgbzpwcmVmZXJyZWxhdGl2ZT0idCIgcGF0aD0ibUA0QDVsQDRAMTFAOUAxMUA5QDV4ZSIgZmlsbGVkPSJmIiBzdHJva2VkPSJmIj4nLCc8djpzdHJva2Ug'@;
put 'am9pbnN0eWxlPSJtaXRlciIvPicsIjx2OmZvcm11bGFzPiIsJzx2OmYgZXFuPSJpZiBsaW5lRHJhd24gcGl4ZWxMaW5lV2lkdGggMCIvPicsJzx2OmYgZXFuPSJzdW0gQDAgMSAwIi8+JywnPHY6ZiBlcW49InN1bSAwIDAgQDEiLz4nLCc8djpmIGVxbj0icHJvZCBAMiAxIDIiLz4nLCc8djpm'@;
put 'IGVxbj0icHJvZCBAMyAyMTYwMCBwaXhlbFdpZHRoIi8+JywnPHY6ZiBlcW49InByb2QgQDMgMjE2MDAgcGl4ZWxIZWlnaHQiLz4nLCc8djpmIGVxbj0ic3VtIEAwIDAgMSIvPicsJzx2OmYgZXFuPSJwcm9kIEA2IDEgMiIvPicsJzx2OmYgZXFuPSJwcm9kIEA3IDIxNjAwIHBpeGVsV2lkdGgi'@;
put 'Lz4nLCc8djpmIGVxbj0ic3VtIEA4IDIxNjAwIDAiLz4nLCc8djpmIGVxbj0icHJvZCBANyAyMTYwMCBwaXhlbEhlaWdodCIvPicsJzx2OmYgZXFuPSJzdW0gQDEwIDIxNjAwIDAiLz4nLCI8L3Y6Zm9ybXVsYXM+IiwnPHY6cGF0aCBvOmV4dHJ1c2lvbm9rPSJmIiBncmFkaWVudHNoYXBlb2s9'@;
put 'InQiIG86Y29ubmVjdHR5cGU9InJlY3QiLz4nLCc8bzpsb2NrIHY6ZXh0PSJlZGl0IiBhc3BlY3RyYXRpbz0idCIvPicsIjwvdjpzaGFwZXR5cGU+Il0sX2U9MTtbImhlYWRlciIsImZvb3RlciJdLmZvckVhY2goZnVuY3Rpb24odmUpe2VlW3ZlXSYmWyJvZGQiLCJldmVuIiwiZmlyc3QiXS5m'@;
put 'b3JFYWNoKGZ1bmN0aW9uKE1lKXtlZVt2ZV1bTWVdJiZbImxlZnQiLCJyaWdodCIsImNlbnRlciJdLmZvckVhY2goZnVuY3Rpb24oamUpe2lmKEFycmF5LmlzQXJyYXkoZWVbdmVdW01lXVtqZV0pKWZvcih2YXIgVWU9MDtVZTxlZVt2ZV1bTWVdW2plXS5sZW5ndGg7KytVZSlpZihlZVt2ZV1b'@;
put 'TWVdW2plXVtVZV0pe3ZhciBYZT1lZVt2ZV1bTWVdW2plXVtVZV07aWYoInJlbW90ZSI9PVhlWyIhZGF0YXR5cGUiXSl0aHJvdyJDYW5ub3QgdXNlIGxpbmtlZCBpbWFnZSBpbiBoZWFkZXIgb3IgZm9vdGVyIjtmb3IoO19uKHcsInhsL21lZGlhL2ltYWdlIitfZSsiLmpwZyIpOykrK19lO3cu'@;
put 'ZmlsZSgieGwvbWVkaWEvaW1hZ2UiK19lKyIuanBnIixkQShYZSkse2JpbmFyeTohMH0pLEdvKG9lLC0xLCIuLi9tZWRpYS9pbWFnZSIrX2UrIi5qcGciLE5pLklNRyk7dmFyIGl0PSJfeDAwMDBfcyIrKDEwMjUrWGUuX2NudCksZnQ9InBvc2l0aW9uOmFic29sdXRlO21hcmdpbi1sZWZ0OjA7'@;
put 'bWFyZ2luLXRvcDowO3otaW5kZXg6IisoWGUuX2NudCsxKSsiOyI7ZnQrPSJ3aWR0aDoiK1hlWyIhcG9zIl0udysicHg7IixmdCs9ImhlaWdodDoiK1hlWyIhcG9zIl0uaCsicHg7Ijt2YXIgTXQ9amUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdmUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCk7'@;
put 'Im9kZCIhPT1NZSYmKE10Kz1NZS50b1VwcGVyQ2FzZSgpKSxlZVt2ZV1bTWVdW2plXS5sZW5ndGg+MSYmKE10Kz1VZSksZ2UucHVzaChNcigidjpzaGFwZSIsWyc8djppbWFnZWRhdGEgbzpyZWxpZD0icklkJysoWGUuX2NudCsxKSsnIiBvOnRpdGxlPSJzaGVldGpzIi8+JywnPG86bG9jayB2'@;
put 'OmV4dD0iZWRpdCIgcm90YXRpb249InQiLz4nXS5qb2luKCIiKSx7aWQ6TXQsIm86c3BpZCI6aXQsdHlwZToiI194MDAwMF90NzUiLHN0eWxlOmZ0fSkpfX0pfSl9KSxnZS5wdXNoKCI8L3htbD4iKSx3LmZpbGUoInhsL2RyYXdpbmdzL3ZtbERyYXdpbmciK0QrIkhGLnZtbCIsZ2Uuam9pbigi'@;
put 'IikpLHcuZmlsZSgieGwvZHJhd2luZ3MvX3JlbHMvdm1sRHJhd2luZyIrRCsiSEYudm1sLnJlbHMiLFhsKG9lKSl9TmkuQ01OVD0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jb21tZW50cyI7dmFyIGdBPU1yKCJj'@;
put 'b21tZW50cyIsbnVsbCx7eG1sbnM6c2EubWFpblswXX0pO2Z1bmN0aW9uIHZBKHcpe3ZhciBQPVtCbixnQV0sRD1bXTtyZXR1cm4gUC5wdXNoKCI8YXV0aG9ycz4iKSx3LmZvckVhY2goZnVuY3Rpb24oZWUpe2VlWzFdLmZvckVhY2goZnVuY3Rpb24ob2Upe3ZhciBnZT1CcihvZS5hKTtELmlu'@;
put 'ZGV4T2YoZ2UpPi0xfHwoRC5wdXNoKGdlKSxQLnB1c2goIjxhdXRob3I+IitnZSsiPC9hdXRob3I+IikpfSl9KSxQLnB1c2goIjwvYXV0aG9ycz4iKSxQLnB1c2goIjxjb21tZW50TGlzdD4iKSx3LmZvckVhY2goZnVuY3Rpb24oZWUpe2VlWzFdLmZvckVhY2goZnVuY3Rpb24ob2Upe1AucHVz'@;
put 'aCgnPGNvbW1lbnQgcmVmPSInK2VlWzBdKyciIGF1dGhvcklkPSInK0QuaW5kZXhPZihCcihvZS5hKSkrJyI+PHRleHQ+JyksUC5wdXNoKG9lLlI/dzIob2UuUik6dmEoInQiLG51bGw9PW9lLnQ/IiI6QnIob2UudCkpKSxQLnB1c2goIjwvdGV4dD48L2NvbW1lbnQ+Iil9KX0pLFAucHVzaCgi'@;
put 'PC9jb21tZW50TGlzdD4iKSxQLmxlbmd0aD4yJiYoUFtQLmxlbmd0aF09IjwvY29tbWVudHM+IixQWzFdPVBbMV0ucmVwbGFjZSgiLz4iLCI+IikpLFAuam9pbigiIil9dmFyIGpIPVR1O2Z1bmN0aW9uIFpIKHcpe3ZhciBQPUF1KCksRD1bXTtyZXR1cm4gaGkoUCwiQnJ0QmVnaW5Db21tZW50'@;
put 'cyIpLGhpKFAsIkJydEJlZ2luQ29tbWVudEF1dGhvcnMiKSx3LmZvckVhY2goZnVuY3Rpb24oZWUpe2VlWzFdLmZvckVhY2goZnVuY3Rpb24ob2Upe0QuaW5kZXhPZihvZS5hKT4tMXx8KEQucHVzaChvZS5hLnNsaWNlKDAsNTQpKSxoaShQLCJCcnRDb21tZW50QXV0aG9yIixmdW5jdGlvbiB6'@;
put 'SCh3KXtyZXR1cm4gY3Uody5zbGljZSgwLDU0KSl9KG9lLmEpKSl9KX0pLGhpKFAsIkJydEVuZENvbW1lbnRBdXRob3JzIiksaGkoUCwiQnJ0QmVnaW5Db21tZW50TGlzdCIpLHcuZm9yRWFjaChmdW5jdGlvbihlZSl7ZWVbMV0uZm9yRWFjaChmdW5jdGlvbihvZSl7b2UuaWF1dGhvcj1ELmlu'@;
put 'ZGV4T2Yob2UuYSk7dmFyIGdlPXtzOmNhKGVlWzBdKSxlOmNhKGVlWzBdKX07aGkoUCwiQnJ0QmVnaW5Db21tZW50IixmdW5jdGlvbiBCSCh3LFApe3JldHVybiBudWxsPT1QJiYoUD1wcigzNikpLFAud3JpdGVfc2hpZnQoNCx3WzFdLmlhdXRob3IpLFgxKHdbMF0sUCksUC53cml0ZV9zaGlm'@;
put 'dCg0LDApLFAud3JpdGVfc2hpZnQoNCwwKSxQLndyaXRlX3NoaWZ0KDQsMCksUC53cml0ZV9zaGlmdCg0LDApLFB9KFtnZSxvZV0pKSxvZS50JiZvZS50Lmxlbmd0aD4wJiZoaShQLCJCcnRDb21tZW50VGV4dCIsZnVuY3Rpb24gc3IodyxQKXt2YXIgRD0hMTtyZXR1cm4gbnVsbD09UCYmKEQ9'@;
put 'ITAsUD1wcigyMys0KncudC5sZW5ndGgpKSxQLndyaXRlX3NoaWZ0KDEsMSksY3Uody50LFApLFAud3JpdGVfc2hpZnQoNCwxKSxmdW5jdGlvbiBZZih3LFApe1B8fChQPXByKDQpKSxQLndyaXRlX3NoaWZ0KDIsdy5pY2h8fDApLFAud3JpdGVfc2hpZnQoMix3LmlmbnR8fDApfSh7aWNoOjAs'@;
put 'aWZudDowfSxQKSxEP1Auc2xpY2UoMCxQLmwpOlB9KG9lKSksaGkoUCwiQnJ0RW5kQ29tbWVudCIpLGRlbGV0ZSBvZS5pYXV0aG9yfSl9KSxoaShQLCJCcnRFbmRDb21tZW50TGlzdCIpLGhpKFAsIkJydEVuZENvbW1lbnRzIiksUC5lbmQoKX12YXIgZ2g9ImFwcGxpY2F0aW9uL3ZuZC5tcy1v'@;
put 'ZmZpY2UudmJhUHJvamVjdCIsUVE9WyJ4bHNiIiwieGxzbSIsInhsYW0iLCJiaWZmOCIsInhsYSJdO05pLkRTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2RpYWxvZ3NoZWV0IixOaS5NUz0iaHR0cDovL3NjaGVt'@;
put 'YXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9yZWxhdGlvbnNoaXBzL3hsTWFjcm9zaGVldCI7dmFyIEEyPWZ1bmN0aW9uKCl7dmFyIHc9LyhefFteQS1aYS16X10pUihcWz8tP1xkK1xdfFsxLTldXGQqfClDKFxbPy0/XGQrXF18WzEtOV1cZCp8KSg/IVtBLVphLXowLTlfXSkvZyxQPXty'@;
put 'OjAsYzowfTtmdW5jdGlvbiBEKGVlLG9lLGdlLF9lKXt2YXIgdmU9ITEsTWU9ITE7MD09Z2UubGVuZ3RoP01lPSEwOiJbIj09Z2UuY2hhckF0KDApJiYoTWU9ITAsZ2U9Z2Uuc2xpY2UoMSwtMSkpLDA9PV9lLmxlbmd0aD92ZT0hMDoiWyI9PV9lLmNoYXJBdCgwKSYmKHZlPSEwLF9lPV9lLnNs'@;
put 'aWNlKDEsLTEpKTt2YXIgamU9Z2UubGVuZ3RoPjA/MHxwYXJzZUludChnZSwxMCk6MCxVZT1fZS5sZW5ndGg+MD8wfHBhcnNlSW50KF9lLDEwKTowO3JldHVybiB2ZT9VZSs9UC5jOi0tVWUsTWU/amUrPVAucjotLWplLG9lKyh2ZT8iIjoiJCIpK0JhKFVlKSsoTWU/IiI6IiQiKStWYShqZSl9'@;
put 'cmV0dXJuIGZ1bmN0aW9uKG9lLGdlKXtyZXR1cm4gUD1nZSxvZS5yZXBsYWNlKHcsRCl9fSgpLERfPS8oXnxbXi5fQS1aMC05XSkoWyRdPykoW0EtWl17MSwyfXxbQS1XXVtBLVpdezJ9fFhbQS1FXVtBLVpdfFhGW0EtRF0pKFskXT8pKDEwWzAtM11cZHs0fXwxMDRbMC03XVxkezN9fDEwNDhb'@;
put 'MC00XVxkezJ9fDEwNDg1WzAtNl1cZHwxMDQ4NTdbMC02XXxbMS05XVxkezAsNX0pKD8hW18uXChBLVphLXowLTldKS9nLElfPWZ1bmN0aW9uKFAsRCl7cmV0dXJuIFAucmVwbGFjZShEXyxmdW5jdGlvbihlZSxvZSxnZSxfZSx2ZSxNZSl7dmFyIGplPWMyKF9lKS0oZ2U/MDpELmMpLFVlPVEw'@;
put 'KE1lKS0odmU/MDpELnIpO3JldHVybiBvZSsiUiIrKDA9PVVlPyIiOnZlP1VlKzE6IlsiK1VlKyJdIikrIkMiKygwPT1qZT8iIjpnZT9qZSsxOiJbIitqZSsiXSIpfSl9O2Z1bmN0aW9uIGJBKHcsUCl7cmV0dXJuIHcucmVwbGFjZShEXyxmdW5jdGlvbihELGVlLG9lLGdlLF9lLHZlKXtyZXR1'@;
put 'cm4gZWUrKCIkIj09b2U/b2UrZ2U6QmEoYzIoZ2UpK1AuYykpKygiJCI9PV9lP19lK3ZlOlZhKFEwKHZlKStQLnIpKX0pLnJlcGxhY2UoLyhcZCspOihcZCspL2csZnVuY3Rpb24oRCxlZSxvZSl7cmV0dXJuIFZhKFEwKGVlKStQLnIpKyI6IitWYShRMChvZSkrUC5yKX0pfWZ1bmN0aW9uIFdI'@;
put 'KHcsUCxEKXt2YXIgb2U9S2EoUCkucyxnZT1jYShEKTtyZXR1cm4gYkEodyx7cjpnZS5yLW9lLnIsYzpnZS5jLW9lLmN9KX1mdW5jdGlvbiBnZih3KXtyZXR1cm4gdy5yZXBsYWNlKC9feGxmblwuL2csIiIpfWZ1bmN0aW9uIGpsKHcpe3cubCs9MX1mdW5jdGlvbiBzZCh3LFApe3ZhciBEPXcu'@;
put 'cmVhZF9zaGlmdCgxPT1QPzE6Mik7cmV0dXJuWzE2MzgzJkQsRD4+MTQmMSxEPj4xNSYxXX1mdW5jdGlvbiBMXyh3LFAsRCl7dmFyIGVlPTI7aWYoRCl7aWYoRC5iaWZmPj0yJiZELmJpZmY8PTUpcmV0dXJuIFBfKHcpOzEyPT1ELmJpZmYmJihlZT00KX12YXIgb2U9dy5yZWFkX3NoaWZ0KGVl'@;
put 'KSxnZT13LnJlYWRfc2hpZnQoZWUpLF9lPXNkKHcsMiksdmU9c2QodywyKTtyZXR1cm57czp7cjpvZSxjOl9lWzBdLGNSZWw6X2VbMV0sclJlbDpfZVsyXX0sZTp7cjpnZSxjOnZlWzBdLGNSZWw6dmVbMV0sclJlbDp2ZVsyXX19fWZ1bmN0aW9uIFBfKHcpe3ZhciBQPXNkKHcsMiksRD1zZCh3'@;
put 'LDIpLGVlPXcucmVhZF9zaGlmdCgxKSxvZT13LnJlYWRfc2hpZnQoMSk7cmV0dXJue3M6e3I6UFswXSxjOmVlLGNSZWw6UFsxXSxyUmVsOlBbMl19LGU6e3I6RFswXSxjOm9lLGNSZWw6RFsxXSxyUmVsOkRbMl19fX1mdW5jdGlvbiBHSCh3LFAsRCl7aWYoRCYmRC5iaWZmPj0yJiZELmJpZmY8'@;
put 'PTUpcmV0dXJuIGZ1bmN0aW9uIG9lZSh3KXt2YXIgUD1zZCh3LDIpLEQ9dy5yZWFkX3NoaWZ0KDEpO3JldHVybntyOlBbMF0sYzpELGNSZWw6UFsxXSxyUmVsOlBbMl19fSh3KTt2YXIgZWU9dy5yZWFkX3NoaWZ0KEQmJjEyPT1ELmJpZmY/NDoyKSxvZT1zZCh3LDIpO3JldHVybntyOmVlLGM6'@;
put 'b2VbMF0sY1JlbDpvZVsxXSxyUmVsOm9lWzJdfX1mdW5jdGlvbiBGXyh3KXt2YXIgUD13LnJlYWRfc2hpZnQoMiksRD13LnJlYWRfc2hpZnQoMik7cmV0dXJue3I6UCxjOjI1NSZELGZRdW90ZWQ6ISEoMTYzODQmRCksY1JlbDpEPj4xNSxyUmVsOkQ+PjE1fX1mdW5jdGlvbiB2aCh3KXtyZXR1'@;
put 'cm5bdy5yZWFkX3NoaWZ0KDEpLHcucmVhZF9zaGlmdCgxKV19ZnVuY3Rpb24gRUEodyxQKXt2YXIgRD1bdy5yZWFkX3NoaWZ0KDEpXTtpZigxMj09UClzd2l0Y2goRFswXSl7Y2FzZSAyOkRbMF09NDticmVhaztjYXNlIDQ6RFswXT0xNjticmVhaztjYXNlIDA6RFswXT0xO2JyZWFrO2Nhc2Ug'@;
put 'MTpEWzBdPTJ9c3dpdGNoKERbMF0pe2Nhc2UgNDpEWzFdPXhvKHcsMSk/IlRSVUUiOiJGQUxTRSIsMTIhPVAmJih3LmwrPTcpO2JyZWFrO2Nhc2UgMzc6Y2FzZSAxNjpEWzFdPW5hW3dbdy5sXV0sdy5sKz0xMj09UD80Ojg7YnJlYWs7Y2FzZSAwOncubCs9ODticmVhaztjYXNlIDE6RFsxXT15'@;
put 'bCh3KTticmVhaztjYXNlIDI6RFsxXT1saCh3LDAse2JpZmY6UD4wJiZQPDg/MjpQfSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkJhZCBTZXJBcjogIitEWzBdKX1yZXR1cm4gRH1mdW5jdGlvbiBCXyh3LFAsRCl7Zm9yKHZhciBlZT13LnJlYWRfc2hpZnQoMTI9PUQuYmlmZj80'@;
put 'OjIpLG9lPVtdLGdlPTA7Z2UhPWVlOysrZ2Upb2UucHVzaCgoMTI9PUQuYmlmZj9vYzpiMikodyw4KSk7cmV0dXJuIG9lfWZ1bmN0aW9uIG9OKHcsUCxEKXt2YXIgZWU9MCxvZT0wOzEyPT1ELmJpZmY/KGVlPXcucmVhZF9zaGlmdCg0KSxvZT13LnJlYWRfc2hpZnQoNCkpOihvZT0xK3cucmVh'@;
put 'ZF9zaGlmdCgxKSxlZT0xK3cucmVhZF9zaGlmdCgyKSksRC5iaWZmPj0yJiZELmJpZmY8OCYmKC0tZWUsMD09LS1vZSYmKG9lPTI1NikpO2Zvcih2YXIgZ2U9MCxfZT1bXTtnZSE9ZWUmJihfZVtnZV09W10pOysrZ2UpZm9yKHZhciB2ZT0wO3ZlIT1vZTsrK3ZlKV9lW2dlXVt2ZV09RUEodyxE'@;
put 'LmJpZmYpO3JldHVybiBfZX1mdW5jdGlvbiBYbSh3LFAsRCl7cmV0dXJuIHcubCs9MixbRl8odyldfWZ1bmN0aW9uIEptKHcpe3JldHVybiB3LmwrPTYsW119dmFyIEY4PVhtLGxOPUptLFpfPUptLEg4PVhtO2Z1bmN0aW9uIHUxKHcpe3JldHVybiB3LmwrPTIsW3lzKHcpLDEmdy5yZWFkX3No'@;
put 'aWZ0KDIpXX12YXIgWV89WG0sV189dTEsc049Sm0sdU49WG0sREE9WG0sSXA9WyJEYXRhIiwiQWxsIiwiSGVhZGVycyIsIj8/IiwiP0RhdGEyIiwiPz8iLCI/RGF0YUhlYWRlcnMiLCI/PyIsIlRvdGFscyIsIj8/IiwiPz8iLCI/PyIsIj9EYXRhVG90YWxzIiwiPz8iLCI/PyIsIj8/IiwiP0N1'@;
put 'cnJlbnQiXSxxYT17MTp7bjoiUHRnRXhwIixmOmZ1bmN0aW9uIHVlZSh3LFAsRCl7cmV0dXJuIHcubCsrLEQmJjEyPT1ELmJpZmY/W3cucmVhZF9zaGlmdCg0LCJpIiksMF06W3cucmVhZF9zaGlmdCgyKSx3LnJlYWRfc2hpZnQoRCYmMj09RC5iaWZmPzE6MildfX0sMjp7bjoiUHRnVGJsIixm'@;
put 'Onh1fSwzOntuOiJQdGdBZGQiLGY6amx9LDQ6e246IlB0Z1N1YiIsZjpqbH0sNTp7bjoiUHRnTXVsIixmOmpsfSw2OntuOiJQdGdEaXYiLGY6amx9LDc6e246IlB0Z1Bvd2VyIixmOmpsfSw4OntuOiJQdGdDb25jYXQiLGY6amx9LDk6e246IlB0Z0x0IixmOmpsfSwxMDp7bjoiUHRnTGUiLGY6'@;
put 'amx9LDExOntuOiJQdGdFcSIsZjpqbH0sMTI6e246IlB0Z0dlIixmOmpsfSwxMzp7bjoiUHRnR3QiLGY6amx9LDE0OntuOiJQdGdOZSIsZjpqbH0sMTU6e246IlB0Z0lzZWN0IixmOmpsfSwxNjp7bjoiUHRnVW5pb24iLGY6amx9LDE3OntuOiJQdGdSYW5nZSIsZjpqbH0sMTg6e246IlB0Z1Vw'@;
put 'bHVzIixmOmpsfSwxOTp7bjoiUHRnVW1pbnVzIixmOmpsfSwyMDp7bjoiUHRnUGVyY2VudCIsZjpqbH0sMjE6e246IlB0Z1BhcmVuIixmOmpsfSwyMjp7bjoiUHRnTWlzc0FyZyIsZjpqbH0sMjM6e246IlB0Z1N0ciIsZjpmdW5jdGlvbiBrQSh3LFAsRCl7cmV0dXJuIHcubCsrLGVkKHcsMCxE'@;
put 'KX19LDI2OntuOiJQdGdTaGVldCIsZjpmdW5jdGlvbiBkTih3LFAsRCl7cmV0dXJuIHcubCs9NSx3LmwrPTIsdy5sKz0yPT1ELmJpZmY/MTo0LFsiUFRHU0hFRVQiXX19LDI3OntuOiJQdGdFbmRTaGVldCIsZjpmdW5jdGlvbiBHXyh3LFAsRCl7cmV0dXJuIHcubCs9Mj09RC5iaWZmPzQ6NSxb'@;
put 'IlBUR0VORFNIRUVUIl19fSwyODp7bjoiUHRnRXJyIixmOmZ1bmN0aW9uIEttKHcpe3JldHVybiB3LmwrKyxuYVt3LnJlYWRfc2hpZnQoMSldfX0sMjk6e246IlB0Z0Jvb2wiLGY6ZnVuY3Rpb24gcW0odyl7cmV0dXJuIHcubCsrLDAhPT13LnJlYWRfc2hpZnQoMSl9fSwzMDp7bjoiUHRnSW50'@;
put 'IixmOmZ1bmN0aW9uIE1pKHcpe3JldHVybiB3LmwrKyx3LnJlYWRfc2hpZnQoMil9fSwzMTp7bjoiUHRnTnVtIixmOmZ1bmN0aW9uIE1BKHcpe3JldHVybiB3LmwrKyx5bCh3KX19LDMyOntuOiJQdGdBcnJheSIsZjpmdW5jdGlvbiBYSCh3LFAsRCl7dmFyIGVlPSg5NiZ3W3cubCsrXSk+PjU7'@;
put 'cmV0dXJuIHcubCs9Mj09RC5iaWZmPzY6MTI9PUQuYmlmZj8xNDo3LFtlZV19fSwzMzp7bjoiUHRnRnVuYyIsZjpmdW5jdGlvbiByTih3LFAsRCl7dmFyIGVlPSg5NiZ3W3cubF0pPj41O3cubCs9MTt2YXIgb2U9dy5yZWFkX3NoaWZ0KEQmJkQuYmlmZjw9Mz8xOjIpO3JldHVyblt0d1tvZV0s'@;
put 'ZXdbb2VdLGVlXX19LDM0OntuOiJQdGdGdW5jVmFyIixmOmZ1bmN0aW9uIGlOKHcsUCxEKXt2YXIgZWU9d1t3LmwrK10sb2U9dy5yZWFkX3NoaWZ0KDEpLGdlPUQmJkQuYmlmZjw9Mz9bODg9PWVlPy0xOjAsdy5yZWFkX3NoaWZ0KDEpXTpmdW5jdGlvbiBTQSh3KXtyZXR1cm5bd1t3LmwrMV0+'@;
put 'PjcsMzI3Njcmdy5yZWFkX3NoaWZ0KDIpXX0odyk7cmV0dXJuW29lLCgwPT09Z2VbMF0/ZXc6dk4pW2dlWzFdXV19fSwzNTp7bjoiUHRnTmFtZSIsZjpmdW5jdGlvbiB4QSh3LFAsRCl7dmFyIGVlPXcucmVhZF9zaGlmdCgxKT4+PjUmMyxnZT13LnJlYWRfc2hpZnQoIUR8fEQuYmlmZj49OD80'@;
put 'OjIpO3N3aXRjaChELmJpZmYpe2Nhc2UgMjp3LmwrPTU7YnJlYWs7Y2FzZSAzOmNhc2UgNDp3LmwrPTg7YnJlYWs7Y2FzZSA1OncubCs9MTJ9cmV0dXJuW2VlLDAsZ2VdfX0sMzY6e246IlB0Z1JlZiIsZjpmdW5jdGlvbiBDQSh3LFAsRCl7dmFyIGVlPSg5NiZ3W3cubF0pPj41O3JldHVybiB3'@;
put 'LmwrPTEsW2VlLEdIKHcsMCxEKV19fSwzNzp7bjoiUHRnQXJlYSIsZjpmdW5jdGlvbiBsZWUodyxQLEQpe3JldHVyblsoOTYmd1t3LmwrK10pPj41LExfKHcsMCxEKV19fSwzODp7bjoiUHRnTWVtQXJlYSIsZjpmdW5jdGlvbiBjZWUodyxQLEQpe3ZhciBlZT13LnJlYWRfc2hpZnQoMSk+Pj41'@;
put 'JjM7cmV0dXJuIHcubCs9RCYmMj09RC5iaWZmPzM6NCxbZWUsdy5yZWFkX3NoaWZ0KEQmJjI9PUQuYmlmZj8xOjIpXX19LDM5OntuOiJQdGdNZW1FcnIiLGY6eHV9LDQwOntuOiJQdGdNZW1Ob01lbSIsZjp4dX0sNDE6e246IlB0Z01lbUZ1bmMiLGY6ZnVuY3Rpb24gel8odyxQLEQpe3JldHVy'@;
put 'blt3LnJlYWRfc2hpZnQoMSk+Pj41JjMsdy5yZWFkX3NoaWZ0KEQmJjI9PUQuYmlmZj8xOjIpXX19LDQyOntuOiJQdGdSZWZFcnIiLGY6ZnVuY3Rpb24gYU4odyxQLEQpe3ZhciBlZT13LnJlYWRfc2hpZnQoMSk+Pj41JjM7cmV0dXJuIHcubCs9NCxELmJpZmY8OCYmdy5sLS0sMTI9PUQuYmlm'@;
put 'ZiYmKHcubCs9MiksW2VlXX19LDQzOntuOiJQdGdBcmVhRXJyIixmOmZ1bmN0aW9uICRIKHcsUCxEKXt2YXIgZWU9KDk2Jndbdy5sKytdKT4+NTtyZXR1cm4gdy5sKz1EJiZELmJpZmY+OD8xMjpELmJpZmY8OD82OjgsW2VlXX19LDQ0OntuOiJQdGdSZWZOIixmOmZ1bmN0aW9uIHROKHcsUCxE'@;
put 'KXt2YXIgZWU9KDk2Jndbdy5sXSk+PjU7dy5sKz0xO3ZhciBvZT1mdW5jdGlvbiBIXyh3LFAsRCl7dmFyIGVlPUQmJkQuYmlmZj9ELmJpZmY6ODtpZihlZT49MiYmZWU8PTUpcmV0dXJuIGZ1bmN0aW9uIGFlZSh3KXt2YXIgUD13LnJlYWRfc2hpZnQoMiksRD13LnJlYWRfc2hpZnQoMSksZWU9'@;
put 'KDMyNzY4JlApPj4xNSxvZT0oMTYzODQmUCk+PjE0O3JldHVybiBQJj0xNjM4MywxPT1lZSYmUD49ODE5MiYmKFAtPTE2Mzg0KSwxPT1vZSYmRD49MTI4JiYoRC09MjU2KSx7cjpQLGM6RCxjUmVsOm9lLHJSZWw6ZWV9fSh3KTt2YXIgb2U9dy5yZWFkX3NoaWZ0KGVlPj0xMj80OjIpLGdlPXcu'@;
put 'cmVhZF9zaGlmdCgyKSxfZT0oMTYzODQmZ2UpPj4xNCx2ZT0oMzI3NjgmZ2UpPj4xNTtpZihnZSY9MTYzODMsMT09dmUpZm9yKDtvZT41MjQyODc7KW9lLT0xMDQ4NTc2O2lmKDE9PV9lKWZvcig7Z2U+ODE5MTspZ2UtPTE2Mzg0O3JldHVybntyOm9lLGM6Z2UsY1JlbDpfZSxyUmVsOnZlfX0o'@;
put 'dywwLEQpO3JldHVybltlZSxvZV19fSw0NTp7bjoiUHRnQXJlYU4iLGY6ZnVuY3Rpb24gcUgodyxQLEQpe3ZhciBlZT0oOTYmd1t3LmwrK10pPj41LG9lPWZ1bmN0aW9uIGllZSh3LFAsRCl7aWYoRC5iaWZmPDgpcmV0dXJuIFBfKHcpO3ZhciBlZT13LnJlYWRfc2hpZnQoMTI9PUQuYmlmZj80'@;
put 'OjIpLG9lPXcucmVhZF9zaGlmdCgxMj09RC5iaWZmPzQ6MiksZ2U9c2QodywyKSxfZT1zZCh3LDIpO3JldHVybntzOntyOmVlLGM6Z2VbMF0sY1JlbDpnZVsxXSxyUmVsOmdlWzJdfSxlOntyOm9lLGM6X2VbMF0sY1JlbDpfZVsxXSxyUmVsOl9lWzJdfX19KHcsMCxEKTtyZXR1cm5bZWUsb2Vd'@;
put 'fX0sNDY6e246IlB0Z01lbUFyZWFOIixmOmZ1bmN0aW9uIE44KHcpe3JldHVyblt3LnJlYWRfc2hpZnQoMSk+Pj41JjMsdy5yZWFkX3NoaWZ0KDIpXX19LDQ3OntuOiJQdGdNZW1Ob01lbU4iLGY6ZnVuY3Rpb24gaE4odyl7cmV0dXJuW3cucmVhZF9zaGlmdCgxKT4+PjUmMyx3LnJlYWRfc2hp'@;
put 'ZnQoMildfX0sNTc6e246IlB0Z05hbWVYIixmOmZ1bmN0aW9uIEFBKHcsUCxEKXtyZXR1cm4gNT09RC5iaWZmP2Z1bmN0aW9uIGpfKHcpe3ZhciBQPXcucmVhZF9zaGlmdCgxKT4+PjUmMyxEPXcucmVhZF9zaGlmdCgyLCJpIik7dy5sKz04O3ZhciBlZT13LnJlYWRfc2hpZnQoMik7cmV0dXJu'@;
put 'IHcubCs9MTIsW1AsRCxlZV19KHcpOlt3LnJlYWRfc2hpZnQoMSk+Pj41JjMsdy5yZWFkX3NoaWZ0KDIpLHcucmVhZF9zaGlmdCg0KV19fSw1ODp7bjoiUHRnUmVmM2QiLGY6ZnVuY3Rpb24gbk4odyxQLEQpe3ZhciBlZT0oOTYmd1t3LmxdKT4+NTt3LmwrPTE7dmFyIG9lPXcucmVhZF9zaGlm'@;
put 'dCgyKTtyZXR1cm4gRCYmNT09RC5iaWZmJiYody5sKz0xMiksW2VlLG9lLEdIKHcsMCxEKV19fSw1OTp7bjoiUHRnQXJlYTNkIixmOmZ1bmN0aW9uIF9BKHcsUCxEKXt2YXIgZWU9KDk2Jndbdy5sKytdKT4+NSxvZT13LnJlYWRfc2hpZnQoMiwiaSIpO2lmKEQmJjU9PT1ELmJpZmYpdy5sKz0x'@;
put 'MjtyZXR1cm5bZWUsb2UsTF8odywwLEQpXX19LDYwOntuOiJQdGdSZWZFcnIzZCIsZjpmdW5jdGlvbiBVXyh3LFAsRCl7dmFyIGVlPSg5NiZ3W3cubCsrXSk+PjUsb2U9dy5yZWFkX3NoaWZ0KDIpLGdlPTQ7aWYoRClzd2l0Y2goRC5iaWZmKXtjYXNlIDU6Z2U9MTU7YnJlYWs7Y2FzZSAxMjpn'@;
put 'ZT02fXJldHVybiB3LmwrPWdlLFtlZSxvZV19fSw2MTp7bjoiUHRnQXJlYUVycjNkIixmOmZ1bmN0aW9uIEtIKHcsUCxEKXt2YXIgZWU9KDk2Jndbdy5sKytdKT4+NSxvZT13LnJlYWRfc2hpZnQoMiksZ2U9ODtpZihEKXN3aXRjaChELmJpZmYpe2Nhc2UgNTp3LmwrPTEyLGdlPTY7YnJlYWs7'@;
put 'Y2FzZSAxMjpnZT0xMn1yZXR1cm4gdy5sKz1nZSxbZWUsb2VdfX0sMjU1Ont9fSxwTj17NjQ6MzIsOTY6MzIsNjU6MzMsOTc6MzMsNjY6MzQsOTg6MzQsNjc6MzUsOTk6MzUsNjg6MzYsMTAwOjM2LDY5OjM3LDEwMTozNyw3MDozOCwxMDI6MzgsNzE6MzksMTAzOjM5LDcyOjQwLDEwNDo0MCw3'@;
put 'Mzo0MSwxMDU6NDEsNzQ6NDIsMTA2OjQyLDc1OjQzLDEwNzo0Myw3Njo0NCwxMDg6NDQsNzc6NDUsMTA5OjQ1LDc4OjQ2LDExMDo0Niw3OTo0NywxMTE6NDcsODg6MzQsMTIwOjM0LDg5OjU3LDEyMTo1Nyw5MDo1OCwxMjI6NTgsOTE6NTksMTIzOjU5LDkyOjYwLDEyNDo2MCw5Mzo2MSwxMjU6'@;
put 'NjF9OyFmdW5jdGlvbigpe2Zvcih2YXIgdyBpbiBwTilxYVt3XT1xYVtwTlt3XV19KCk7dmFyIFJBPXsxOntuOiJQdGdFbGZMZWwiLGY6dTF9LDI6e246IlB0Z0VsZlJ3IixmOnVOfSwzOntuOiJQdGdFbGZDb2wiLGY6Rjh9LDY6e246IlB0Z0VsZlJ3ViIsZjpEQX0sNzp7bjoiUHRnRWxmQ29s'@;
put 'ViIsZjpIOH0sMTA6e246IlB0Z0VsZlJhZGljYWwiLGY6WV99LDExOntuOiJQdGdFbGZSYWRpY2FsUyIsZjpzTn0sMTM6e246IlB0Z0VsZkNvbFMiLGY6bE59LDE1OntuOiJQdGdFbGZDb2xTViIsZjpaX30sMTY6e246IlB0Z0VsZlJhZGljYWxMZWwiLGY6V199LDI1OntuOiJQdGdMaXN0Iixm'@;
put 'OmZ1bmN0aW9uIGNOKHcpe3cubCs9Mjt2YXIgUD13LnJlYWRfc2hpZnQoMiksRD13LnJlYWRfc2hpZnQoMiksZWU9dy5yZWFkX3NoaWZ0KDQpLG9lPXcucmVhZF9zaGlmdCgyKSxnZT13LnJlYWRfc2hpZnQoMik7cmV0dXJue2l4dGk6UCxjb2x0eXBlOjMmRCxydDpJcFtEPj4yJjMxXSxpZHg6'@;
put 'ZWUsYzpvZSxDOmdlfX19LDI5OntuOiJQdGdTeE5hbWUiLGY6ZnVuY3Rpb24gZk4odyl7cmV0dXJuIHcubCs9Mixbdy5yZWFkX3NoaWZ0KDQpXX19LDI1NTp7fX0sVjg9ezA6e246IlB0Z0F0dHJOb29wIixmOmZ1bmN0aW9uIElBKHcpe3JldHVybiB3LmwrPTQsWzAsMF19fSwxOntuOiJQdGdB'@;
put 'dHRyU2VtaSIsZjpmdW5jdGlvbiBEcCh3LFAsRCl7dmFyIGVlPTI1NSZ3W3cubCsxXT8xOjA7cmV0dXJuIHcubCs9RCYmMj09RC5iaWZmPzM6NCxbZWVdfX0sMjp7bjoiUHRnQXR0cklmIixmOmZ1bmN0aW9uIE5fKHcsUCxEKXt2YXIgZWU9MjU1Jndbdy5sKzFdPzE6MDtyZXR1cm4gdy5sKz0y'@;
put 'LFtlZSx3LnJlYWRfc2hpZnQoRCYmMj09RC5iaWZmPzE6MildfX0sNDp7bjoiUHRnQXR0ckNob29zZSIsZjpmdW5jdGlvbiBQOCh3LFAsRCl7dy5sKz0yO2Zvcih2YXIgZWU9dy5yZWFkX3NoaWZ0KEQmJjI9PUQuYmlmZj8xOjIpLG9lPVtdLGdlPTA7Z2U8PWVlOysrZ2Upb2UucHVzaCh3LnJl'@;
put 'YWRfc2hpZnQoRCYmMj09RC5iaWZmPzE6MikpO3JldHVybiBvZX19LDg6e246IlB0Z0F0dHJHb3RvIixmOmZ1bmN0aW9uIEpIKHcsUCxEKXt2YXIgZWU9MjU1Jndbdy5sKzFdPzE6MDtyZXR1cm4gdy5sKz0yLFtlZSx3LnJlYWRfc2hpZnQoRCYmMj09RC5iaWZmPzE6MildfX0sMTY6e246IlB0'@;
put 'Z0F0dHJTdW0iLGY6ZnVuY3Rpb24gc2VlKHcsUCxEKXt3LmwrPUQmJjI9PUQuYmlmZj8zOjR9fSwzMjp7bjoiUHRnQXR0ckJheGNlbCIsZjpmdW5jdGlvbiB3QSh3KXt2YXIgUD0xJndbdy5sKzFdO3JldHVybiB3LmwrPTQsW1AsMV19fSw2NDp7bjoiUHRnQXR0clNwYWNlIixmOmZ1bmN0aW9u'@;
put 'IGVOKHcpe3JldHVybiB3LnJlYWRfc2hpZnQoMiksdmgodyl9fSw2NTp7bjoiUHRnQXR0clNwYWNlU2VtaSIsZjpmdW5jdGlvbiBWXyh3KXtyZXR1cm4gdy5yZWFkX3NoaWZ0KDIpLHZoKHcpfX0sMTI4OntuOiJQdGdBdHRySWZFcnJvciIsZjpmdW5jdGlvbiBRSCh3KXt2YXIgUD0yNTUmd1t3'@;
put 'LmwrMV0/MTowO3JldHVybiB3LmwrPTIsW1Asdy5yZWFkX3NoaWZ0KDIpXX19LDI1NTp7fX07ZnVuY3Rpb24gUnAodyxQLEQsZWUsb2Upe2lmKGVlLmJpZmY8OClyZXR1cm4geHUodyxQKTtmb3IodmFyIGdlPXcubCtQLF9lPVtdLHZlPTA7dmUhPT1ELmxlbmd0aDsrK3ZlKXN3aXRjaChEW3Zl'@;
put 'XVswXSl7Y2FzZSJQdGdBcnJheSI6RFt2ZV1bMV09b04odywwLGVlKSxfZS5wdXNoKERbdmVdWzFdKTticmVhaztjYXNlIlB0Z01lbUFyZWEiOkRbdmVdWzJdPUJfKHcsMCxlZSksX2UucHVzaChEW3ZlXVsyXSk7YnJlYWs7Y2FzZSJQdGdFeHAiOmVlJiYxMj09ZWUuYmlmZiYmKERbdmVdWzFd'@;
put 'WzFdPXcucmVhZF9zaGlmdCg0KSxfZS5wdXNoKERbdmVdWzFdKSk7YnJlYWs7Y2FzZSJQdGdMaXN0IjpjYXNlIlB0Z0VsZlJhZGljYWxTIjpjYXNlIlB0Z0VsZkNvbFMiOmNhc2UiUHRnRWxmQ29sU1YiOnRocm93IlVuc3VwcG9ydGVkICIrRFt2ZV1bMF19cmV0dXJuIFA9Z2Utdy5sLCFvZSYm'@;
put 'MCE9PVAmJl9lLnB1c2goeHUodyxQKSksX2V9ZnVuY3Rpb24gUW0odyxQLEQpe2Zvcih2YXIgb2UsZ2UsZWU9dy5sK1AsX2U9W107ZWUhPXcubDspUD1lZS13Lmwsb2U9cWFbZ2U9d1t3LmxdXSwoMjQ9PT1nZXx8MjU9PT1nZSkmJihvZT0oMjQ9PT1nZT9SQTpWOClbd1t3LmwrMV1dKSxvZSYm'@;
put 'b2UuZj9fZS5wdXNoKFtvZS5uLG9lLmYodyxQLEQpXSk6eHUodyxQKTtyZXR1cm4gX2V9ZnVuY3Rpb24gZmVlKHcpe2Zvcih2YXIgUD1bXSxEPTA7RDx3Lmxlbmd0aDsrK0Qpe2Zvcih2YXIgZWU9d1tEXSxvZT1bXSxnZT0wO2dlPGVlLmxlbmd0aDsrK2dlKXt2YXIgX2U9ZWVbZ2VdO29lLnB1'@;
put 'c2goX2U/Mj09PV9lWzBdPyciJytfZVsxXS5yZXBsYWNlKC8iL2csJyIiJykrJyInOl9lWzFdOiIiKX1QLnB1c2gob2Uuam9pbigiLCIpKX1yZXR1cm4gUC5qb2luKCI7Iil9VjhbMzNdPVY4WzMyXTt2YXIgQjg9e1B0Z0FkZDoiKyIsUHRnQ29uY2F0OiImIixQdGdEaXY6Ii8iLFB0Z0VxOiI9'@;
put 'IixQdGdHZToiPj0iLFB0Z0d0OiI+IixQdGdMZToiPD0iLFB0Z0x0OiI8IixQdGdNdWw6IioiLFB0Z05lOiI8PiIsUHRnUG93ZXI6Il4iLFB0Z1N1YjoiLSJ9LG1OPW5ldyBSZWdFeHAoL1teXHdcdTRFMDAtXHU5RkZGXHUzMDQwLVx1MzBGRl0vKTtmdW5jdGlvbiBqOCh3LFAsRCl7aWYoIXcp'@;
put 'cmV0dXJuIlNIMzNUSlNFUlIwIjtpZihELmJpZmY+OCYmKCF3LlhUSXx8IXcuWFRJW1BdKSlyZXR1cm4gdy5TaGVldE5hbWVzW1BdO2lmKCF3LlhUSSlyZXR1cm4iU0gzM1RKU0VSUjYiO3ZhciBlZT13LlhUSVtQXTtpZihELmJpZmY8OClyZXR1cm4gUD4xZTQmJihQLT02NTUzNiksUDwwJiYo'@;
put 'UD0tUCksMD09UD8iIjp3LlhUSVtQLTFdO2lmKCFlZSlyZXR1cm4iU0gzM1RKU0VSUjEiO3ZhciBvZT0iIjtpZihELmJpZmY+OClzd2l0Y2god1tlZVswXV1bMF0pe2Nhc2UgMzU3OnJldHVybiBvZT0tMT09ZWVbMV0/IiNSRUYiOncuU2hlZXROYW1lc1tlZVsxXV0sZWVbMV09PWVlWzJdP29l'@;
put 'Om9lKyI6Iit3LlNoZWV0TmFtZXNbZWVbMl1dO2Nhc2UgMzU4OnJldHVybiBudWxsIT1ELlNJRD93LlNoZWV0TmFtZXNbRC5TSURdOiJTSDMzVEpTU0FNRSIrd1tlZVswXV1bMF07ZGVmYXVsdDpyZXR1cm4iU0gzM1RKU1NSQyIrd1tlZVswXV1bMF19c3dpdGNoKHdbZWVbMF1dWzBdWzBdKXtj'@;
put 'YXNlIDEwMjU6cmV0dXJuIG9lPS0xPT1lZVsxXT8iI1JFRiI6dy5TaGVldE5hbWVzW2VlWzFdXXx8IlNIMzNUSlNFUlIzIixlZVsxXT09ZWVbMl0/b2U6b2UrIjoiK3cuU2hlZXROYW1lc1tlZVsyXV07Y2FzZSAxNDg0OTpyZXR1cm4gd1tlZVswXV0uc2xpY2UoMSkubWFwKGZ1bmN0aW9uKGdl'@;
put 'KXtyZXR1cm4gZ2UuTmFtZX0pLmpvaW4oIjs7Iik7ZGVmYXVsdDpyZXR1cm4gd1tlZVswXV1bMF1bM10/KG9lPS0xPT1lZVsxXT8iI1JFRiI6d1tlZVswXV1bMF1bM11bZWVbMV1dfHwiU0gzM1RKU0VSUjQiLGVlWzFdPT1lZVsyXT9vZTpvZSsiOiIrd1tlZVswXV1bMF1bM11bZWVbMl1dKToi'@;
put 'U0gzM1RKU0VSUjIifX1mdW5jdGlvbiBPMih3LFAsRCl7cmV0dXJuIGZ1bmN0aW9uICRfKHcsUCl7aWYoISh3fHxQJiZQLmJpZmY8PTUmJlAuYmlmZj49MikpdGhyb3cgbmV3IEVycm9yKCJlbXB0eSBzaGVldCBuYW1lIik7cmV0dXJuLyNSRUYvLnRlc3Qodyk/dzptTi50ZXN0KHcpPyInIit3'@;
put 'KyInIjp3fShqOCh3LFAsRCksRCl9ZnVuY3Rpb24gRHModyxQLEQsZWUsb2UsZ2Upe3ZhciBqZSxVZSxYZSxNdCxfZT1vZSYmb2UuYmlmZnx8OCx2ZT1nZSYmbnVsbCE9UD9QOntzOntjOjAscjowfSxlOntjOjAscjowfX0sTWU9W10saXQ9MCxmdD0wLHV0PSIiO2lmKCF3WzBdfHwhd1swXVsw'@;
put 'XSlyZXR1cm4iIjtmb3IodmFyIHd0PS0xLEh0PSIiLGt0PTAsVHQ9d1swXS5sZW5ndGg7a3Q8VHQ7KytrdCl7dmFyIFl0PXdbMF1ba3RdO3N3aXRjaChZdFswXSl7Y2FzZSJQdGdVbWludXMiOk1lLnB1c2goIi0iK01lLnBvcCgpKTticmVhaztjYXNlIlB0Z1VwbHVzIjpNZS5wdXNoKCIrIitN'@;
put 'ZS5wb3AoKSk7YnJlYWs7Y2FzZSJQdGdQZXJjZW50IjpNZS5wdXNoKE1lLnBvcCgpKyIlIik7YnJlYWs7Y2FzZSJQdGdBZGQiOmNhc2UiUHRnQ29uY2F0IjpjYXNlIlB0Z0RpdiI6Y2FzZSJQdGdFcSI6Y2FzZSJQdGdHZSI6Y2FzZSJQdGdHdCI6Y2FzZSJQdGdMZSI6Y2FzZSJQdGdMdCI6Y2Fz'@;
put 'ZSJQdGdNdWwiOmNhc2UiUHRnTmUiOmNhc2UiUHRnUG93ZXIiOmNhc2UiUHRnU3ViIjppZihqZT1NZS5wb3AoKSxVZT1NZS5wb3AoKSx3dD49MCl7c3dpdGNoKHdbMF1bd3RdWzFdWzBdKXtjYXNlIDA6SHQ9Ym4oIiAiLHdbMF1bd3RdWzFdWzFdKTticmVhaztjYXNlIDE6SHQ9Ym4oIlxyIix3'@;
put 'WzBdW3d0XVsxXVsxXSk7YnJlYWs7ZGVmYXVsdDppZihIdD0iIixvZS5XVEYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIFB0Z0F0dHJTcGFjZVR5cGUgIit3WzBdW3d0XVsxXVswXSl9VWUrPUh0LHd0PS0xfU1lLnB1c2goVWUrQjhbWXRbMF1dK2plKTticmVhaztjYXNlIlB0Z0lzZWN0'@;
put 'IjpqZT1NZS5wb3AoKSxVZT1NZS5wb3AoKSxNZS5wdXNoKFVlKyIgIitqZSk7YnJlYWs7Y2FzZSJQdGdVbmlvbiI6amU9TWUucG9wKCksVWU9TWUucG9wKCksTWUucHVzaChVZSsiLCIramUpO2JyZWFrO2Nhc2UiUHRnUmFuZ2UiOmplPU1lLnBvcCgpLFVlPU1lLnBvcCgpLE1lLnB1c2goVWUr'@;
put 'IjoiK2plKTticmVhaztjYXNlIlB0Z0F0dHJDaG9vc2UiOmNhc2UiUHRnQXR0ckdvdG8iOmNhc2UiUHRnQXR0cklmIjpjYXNlIlB0Z0F0dHJJZkVycm9yIjpjYXNlIlB0Z0F0dHJCYXhjZWwiOmNhc2UiUHRnQXR0clNlbWkiOmNhc2UiUHRnTWVtQXJlYSI6Y2FzZSJQdGdUYmwiOmNhc2UiUHRn'@;
put 'TWVtRXJyIjpjYXNlIlB0Z01lbUFyZWFOIjpjYXNlIlB0Z01lbU5vTWVtTiI6Y2FzZSJQdGdBdHRyTm9vcCI6Y2FzZSJQdGdTaGVldCI6Y2FzZSJQdGdFbmRTaGVldCI6Y2FzZSJQdGdNZW1GdW5jIjpjYXNlIlB0Z01lbU5vTWVtIjpicmVhaztjYXNlIlB0Z1JlZiI6WGU9cGMoWXRbMV1bMV0s'@;
put 'dmUsb2UpLE1lLnB1c2goZWgoWGUsX2UpKTticmVhaztjYXNlIlB0Z1JlZk4iOlhlPUQ/cGMoWXRbMV1bMV0sRCxvZSk6WXRbMV1bMV0sTWUucHVzaChlaChYZSxfZSkpO2JyZWFrO2Nhc2UiUHRnUmVmM2QiOml0PVl0WzFdWzFdLFhlPXBjKFl0WzFdWzJdLHZlLG9lKSx1dD1PMihlZSxpdCxv'@;
put 'ZSksTWUucHVzaCh1dCsiISIrZWgoWGUsX2UpKTticmVhaztjYXNlIlB0Z0Z1bmMiOmNhc2UiUHRnRnVuY1ZhciI6dmFyIHFuPVl0WzFdWzBdLGZuPVl0WzFdWzFdO3FufHwocW49MCk7dmFyIEtuPTA9PShxbiY9MTI3KT9bXTpNZS5zbGljZSgtcW4pO01lLmxlbmd0aC09cW4sIlVzZXIiPT09'@;
put 'Zm4mJihmbj1Lbi5zaGlmdCgpKSxNZS5wdXNoKGZuKyIoIitLbi5qb2luKCIsIikrIikiKTticmVhaztjYXNlIlB0Z0Jvb2wiOk1lLnB1c2goWXRbMV0/IlRSVUUiOiJGQUxTRSIpO2JyZWFrO2Nhc2UiUHRnSW50IjpjYXNlIlB0Z051bSI6TWUucHVzaChTdHJpbmcoWXRbMV0pKTticmVhaztj'@;
put 'YXNlIlB0Z1N0ciI6TWUucHVzaCgnIicrWXRbMV0ucmVwbGFjZSgvIi9nLCciIicpKyciJyk7YnJlYWs7Y2FzZSJQdGdFcnIiOk1lLnB1c2goWXRbMV0pO2JyZWFrO2Nhc2UiUHRnQXJlYU4iOk10PWhyKFl0WzFdWzFdLEQ/e3M6RH06dmUsb2UpLE1lLnB1c2goeGkoTXQsb2UpKTticmVhaztj'@;
put 'YXNlIlB0Z0FyZWEiOk10PWhyKFl0WzFdWzFdLHZlLG9lKSxNZS5wdXNoKHhpKE10LG9lKSk7YnJlYWs7Y2FzZSJQdGdBcmVhM2QiOml0PVl0WzFdWzFdLE10PWhyKFl0WzFdWzJdLHZlLG9lKSx1dD1PMihlZSxpdCxvZSksTWUucHVzaCh1dCsiISIreGkoTXQsb2UpKTticmVhaztjYXNlIlB0'@;
put 'Z0F0dHJTdW0iOk1lLnB1c2goIlNVTSgiK01lLnBvcCgpKyIpIik7YnJlYWs7Y2FzZSJQdGdOYW1lIjp2YXIgem49KGVlLm5hbWVzfHxbXSlbKGZ0PVl0WzFdWzJdKS0xXXx8KGVlWzBdfHxbXSlbZnRdLE9uPXpuP3puLk5hbWU6IlNIMzNUSlNOQU1FIitTdHJpbmcoZnQpO09uIGluIG5nJiYo'@;
put 'T249bmdbT25dKSxNZS5wdXNoKE9uKTticmVhaztjYXNlIlB0Z05hbWVYIjp2YXIgdHIsZXI9WXRbMV1bMV07aWYoZnQ9WXRbMV1bMl0sIShvZS5iaWZmPD01KSl7dmFyIFluPSIiO2lmKDE0ODQ5PT0oKGVlW2VyXXx8W10pWzBdfHxbXSlbMF18fCgxMDI1PT0oKGVlW2VyXXx8W10pWzBdfHxb'@;
put 'XSlbMF0/ZWVbZXJdW2Z0XSYmZWVbZXJdW2Z0XS5pdGFiPjAmJihZbj1lZS5TaGVldE5hbWVzW2VlW2VyXVtmdF0uaXRhYi0xXSsiISIpOlluPWVlLlNoZWV0TmFtZXNbZnQtMV0rIiEiKSxlZVtlcl0mJmVlW2VyXVtmdF0pWW4rPWVlW2VyXVtmdF0uTmFtZTtlbHNlIGlmKGVlWzBdJiZlZVsw'@;
put 'XVtmdF0pWW4rPWVlWzBdW2Z0XS5OYW1lO2Vsc2V7dmFyIGxpPShqOChlZSxlcixvZSl8fCIiKS5zcGxpdCgiOzsiKTtsaVtmdC0xXT9Zbj1saVtmdC0xXTpZbis9IlNIMzNUSlNFUlJYIn1NZS5wdXNoKFluKTticmVha31lcjwwJiYoZXI9LWVyKSxlZVtlcl0mJih0cj1lZVtlcl1bZnRdKSx0'@;
put 'cnx8KHRyPXtOYW1lOiJTSDMzVEpTRVJSWSJ9KSxNZS5wdXNoKHRyLk5hbWUpO2JyZWFrO2Nhc2UiUHRnUGFyZW4iOnZhciBFaT0iKCIsSWk9IikiO2lmKHd0Pj0wKXtzd2l0Y2goSHQ9IiIsd1swXVt3dF1bMV1bMF0pe2Nhc2UgMjpFaT1ibigiICIsd1swXVt3dF1bMV1bMV0pK0VpO2JyZWFr'@;
put 'O2Nhc2UgMzpFaT1ibigiXHIiLHdbMF1bd3RdWzFdWzFdKStFaTticmVhaztjYXNlIDQ6SWk9Ym4oIiAiLHdbMF1bd3RdWzFdWzFdKStJaTticmVhaztjYXNlIDU6SWk9Ym4oIlxyIix3WzBdW3d0XVsxXVsxXSkrSWk7YnJlYWs7ZGVmYXVsdDppZihvZS5XVEYpdGhyb3cgbmV3IEVycm9yKCJV'@;
put 'bmV4cGVjdGVkIFB0Z0F0dHJTcGFjZVR5cGUgIit3WzBdW3d0XVsxXVswXSl9d3Q9LTF9TWUucHVzaChFaStNZS5wb3AoKStJaSk7YnJlYWs7Y2FzZSJQdGdSZWZFcnIiOmNhc2UiUHRnQXJlYUVyciI6Y2FzZSJQdGdBcmVhRXJyM2QiOmNhc2UiUHRnUmVmRXJyM2QiOk1lLnB1c2goIiNSRUYh'@;
put 'Iik7YnJlYWs7Y2FzZSJQdGdFeHAiOnZhciBmcj17YzpELmMscjpELnJ9O2lmKGVlLnNoYXJlZGZbcGkoWGU9e2M6WXRbMV1bMV0scjpZdFsxXVswXX0pXSl7dmFyIERuPWVlLnNoYXJlZGZbcGkoWGUpXTtNZS5wdXNoKERzKERuLHZlLGZyLGVlLG9lKSl9ZWxzZXt2YXIgdnI9ITE7Zm9yKGpl'@;
put 'PTA7amUhPWVlLmFycmF5Zi5sZW5ndGg7KytqZSlpZighKFhlLmM8KFVlPWVlLmFycmF5ZltqZV0pWzBdLnMuY3x8WGUuYz5VZVswXS5lLmN8fFhlLnI8VWVbMF0ucy5yfHxYZS5yPlVlWzBdLmUucikpe01lLnB1c2goRHMoVWVbMV0sdmUsZnIsZWUsb2UpKSx2cj0hMDticmVha312cnx8TWUu'@;
put 'cHVzaChZdFsxXSl9YnJlYWs7Y2FzZSJQdGdBcnJheSI6TWUucHVzaCgieyIrZmVlKFl0WzFdKSsifSIpO2JyZWFrO2Nhc2UiUHRnQXR0clNwYWNlIjpjYXNlIlB0Z0F0dHJTcGFjZVNlbWkiOnd0PWt0O2JyZWFrO2Nhc2UiUHRnTWlzc0FyZyI6TWUucHVzaCgiIik7YnJlYWs7Y2FzZSJQdGdM'@;
put 'aXN0IjpNZS5wdXNoKCJUYWJsZSIrWXRbMV0uaWR4KyJbIyIrWXRbMV0ucnQrIl0iKTticmVhaztjYXNlIlB0Z0VsZkNvbCI6Y2FzZSJQdGdFbGZDb2xTIjpjYXNlIlB0Z0VsZkNvbFNWIjpjYXNlIlB0Z0VsZkNvbFYiOmNhc2UiUHRnRWxmTGVsIjpjYXNlIlB0Z0VsZlJhZGljYWwiOmNhc2Ui'@;
put 'UHRnRWxmUmFkaWNhbExlbCI6Y2FzZSJQdGdFbGZSYWRpY2FsUyI6Y2FzZSJQdGdFbGZSdyI6Y2FzZSJQdGdFbGZSd1YiOnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgRUxGcyIpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgRm9ybXVsYSBUb2tlbjogIitTdHJp'@;
put 'bmcoWXQpKX1pZigzIT1vZS5iaWZmJiZ3dD49MCYmLTE9PVsiUHRnQXR0clNwYWNlIiwiUHRnQXR0clNwYWNlU2VtaSIsIlB0Z0F0dHJHb3RvIl0uaW5kZXhPZih3WzBdW2t0XVswXSkpe3ZhciB4bj0hMDtzd2l0Y2goKFl0PXdbMF1bd3RdKVsxXVswXSl7Y2FzZSA0OnhuPSExO2Nhc2UgMDpI'@;
put 'dD1ibigiICIsWXRbMV1bMV0pO2JyZWFrO2Nhc2UgNTp4bj0hMTtjYXNlIDE6SHQ9Ym4oIlxyIixZdFsxXVsxXSk7YnJlYWs7ZGVmYXVsdDppZihIdD0iIixvZS5XVEYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIFB0Z0F0dHJTcGFjZVR5cGUgIitZdFsxXVswXSl9TWUucHVzaCgoeG4/'@;
put 'SHQ6IiIpK01lLnBvcCgpKyh4bj8iIjpIdCkpLHd0PS0xfX1pZihNZS5sZW5ndGg+MSYmb2UuV1RGKXRocm93IG5ldyBFcnJvcigiYmFkIGZvcm11bGEgc3RhY2siKTtyZXR1cm4gTWVbMF19ZnVuY3Rpb24gS18odyxQLEQpe3ZhciBnZSxlZT13LmwrUCxvZT0yPT1ELmJpZmY/MToyLF9lPXcu'@;
put 'cmVhZF9zaGlmdChvZSk7aWYoNjU1MzU9PV9lKXJldHVybltbXSx4dSh3LFAtMildO3ZhciB2ZT1RbSh3LF9lLEQpO3JldHVybiBQIT09X2Urb2UmJihnZT1ScCh3LFAtX2Utb2UsdmUsRCkpLHcubD1lZSxbdmUsZ2VdfWZ1bmN0aW9uIHRnKHcsUCxEKXt2YXIgb2UsZWU9dy5sK1AsZ2U9dy5y'@;
put 'ZWFkX3NoaWZ0KDIpLF9lPVFtKHcsZ2UsRCk7cmV0dXJuIDY1NTM1PT1nZT9bW10seHUodyxQLTIpXTooUCE9PWdlKzImJihvZT1ScCh3LGVlLWdlLTIsX2UsRCkpLFtfZSxvZV0pfWZ1bmN0aW9uIExwKHcsUCxEKXt2YXIgZWU9dy5sK1Asb2U9amModyk7Mj09RC5iaWZmJiYrK3cubDt2YXIg'@;
put 'Z2U9ZnVuY3Rpb24gTEEodyl7dmFyIFA7aWYoNjU1MzUhPT1Xbih3LHcubCs2KSlyZXR1cm5beWwodyksIm4iXTtzd2l0Y2god1t3LmxdKXtjYXNlIDA6cmV0dXJuIHcubCs9OCxbIlN0cmluZyIsInMiXTtjYXNlIDE6cmV0dXJuIFA9MT09PXdbdy5sKzJdLHcubCs9OCxbUCwiYiJdO2Nhc2Ug'@;
put 'MjpyZXR1cm4gUD13W3cubCsyXSx3LmwrPTgsW1AsImUiXTtjYXNlIDM6cmV0dXJuIHcubCs9OCxbIiIsInMiXX1yZXR1cm5bXX0odyksX2U9dy5yZWFkX3NoaWZ0KDEpOzIhPUQuYmlmZiYmKHcucmVhZF9zaGlmdCgxKSxELmJpZmY+PTUmJncucmVhZF9zaGlmdCg0KSk7dmFyIHZlPWZ1bmN0'@;
put 'aW9uIGVnKHcsUCxEKXt2YXIgZ2UsZWU9dy5sK1Asb2U9Mj09RC5iaWZmPzE6MixfZT13LnJlYWRfc2hpZnQob2UpO2lmKDY1NTM1PT1fZSlyZXR1cm5bW10seHUodyxQLTIpXTt2YXIgdmU9UW0odyxfZSxEKTtyZXR1cm4gUCE9PV9lK29lJiYoZ2U9UnAodyxQLV9lLW9lLHZlLEQpKSx3Lmw9'@;
put 'ZWUsW3ZlLGdlXX0odyxlZS13LmwsRCk7cmV0dXJue2NlbGw6b2UsdmFsOmdlWzBdLGZvcm11bGE6dmUsc2hhcmVkOl9lPj4zJjEsdHQ6Z2VbMV19fWZ1bmN0aW9uIEQyKHcsUCxEKXt2YXIgZWU9dy5yZWFkX3NoaWZ0KDQpLG9lPVFtKHcsZWUsRCksZ2U9dy5yZWFkX3NoaWZ0KDQpO3JldHVy'@;
put 'bltvZSxnZT4wP1JwKHcsZ2Usb2UsRCwhMCk6bnVsbF19dmFyIFBBPUQyLFU4PUQyLEZBPUQyLEhBPWZ1bmN0aW9uIFhfKHcsUCxEKXt2YXIgZWU9dy5yZWFkX3NoaWZ0KDQpLG9lPXcucmVhZF9zaGlmdCg0KSxnZT1RbSh3LGVlLEQpO3JldHVybltnZSxvZT4wP1JwKHcsb2UsZ2UsRCwhMCk6'@;
put 'bnVsbF19LE5BPUQyLGdOPUQyO2Z1bmN0aW9uIEpfKHcpe2lmKCgwfHcpPT13JiZ3PE1hdGgucG93KDIsMTYpJiZ3Pj0wKXt2YXIgUD1wcigxMSk7cmV0dXJuIFAud3JpdGVfc2hpZnQoNCwzKSxQLndyaXRlX3NoaWZ0KDEsMzApLFAud3JpdGVfc2hpZnQoMix3KSxQLndyaXRlX3NoaWZ0KDQs'@;
put 'MCksUH12YXIgRD1wcigxNyk7cmV0dXJuIEQud3JpdGVfc2hpZnQoNCwxMSksRC53cml0ZV9zaGlmdCgxLDMxKSxELndyaXRlX3NoaWZ0KDgsdyksRC53cml0ZV9zaGlmdCg0LDApLER9ZnVuY3Rpb24gVkEodyl7dmFyIFA9cHIoNyk7UC53cml0ZV9zaGlmdCg0LDMrMip3Lmxlbmd0aCksUC53'@;
put 'cml0ZV9zaGlmdCgxLDIzKSxQLndyaXRlX3NoaWZ0KDIsdy5sZW5ndGgpO3ZhciBEPXByKDIqdy5sZW5ndGgpO0Qud3JpdGVfc2hpZnQoMip3Lmxlbmd0aCx3LCJ1dGYxNmxlIik7dmFyIGVlPXByKDQpO3JldHVybiBlZS53cml0ZV9zaGlmdCg0LDApLE0oW1AsRCxlZV0pfWZ1bmN0aW9uIFBw'@;
put 'KHcpe2lmKHcubWF0Y2goL14jKERJVlwvMCF8R0VUVElOR19EQVRBfE5cL0F8TkFNRVw/fE5VTEwhfE5VTSF8UkVGIXxWQUxVRSEpJC8pKXJldHVybiBmdW5jdGlvbiBoZWUodyl7dmFyIFA9cHIoMTApO3JldHVybiBQLndyaXRlX3NoaWZ0KDQsMiksUC53cml0ZV9zaGlmdCgxLDI4KSxQLndy'@;
put 'aXRlX3NoaWZ0KDEsdyksUC53cml0ZV9zaGlmdCg0LDApLFB9KCtxbFt3XSk7aWYody5tYXRjaCgvXlwkPyg/OltBLVddW0EtWl17Mn18WFtBLUVdW0EtWl18WEZbQS1EXXxbQS1aXXsxLDJ9KVwkPyg/OjEwWzAtM11cZHs0fXwxMDRbMC03XVxkezN9fDEwNDhbMC00XVxkezJ9fDEwNDg1WzAt'@;
put 'Nl1cZHwxMDQ4NTdbMC02XXxbMS05XVxkezAsNX0pJC8pKXJldHVybiBmdW5jdGlvbiBRXyh3KXt2YXIgUD1jYSh3KSxEPXByKDE1KTtyZXR1cm4gRC53cml0ZV9zaGlmdCg0LDcpLEQud3JpdGVfc2hpZnQoMSwzNiksRC53cml0ZV9zaGlmdCg0LFAuciksRC53cml0ZV9zaGlmdCgyLFAuY3wo'@;
put 'IiQiPT13LmNoYXJBdCgwKT8wOjEpPDwxNHwody5tYXRjaCgvXCRcZC8pPzA6MSk8PDE1KSxELndyaXRlX3NoaWZ0KDQsMCksRH0odyk7aWYody5tYXRjaCgvXiIuKiIkLykpcmV0dXJuIFZBKHcpO3Rocm93IkZvcm11bGEgfCIrdysifCBub3Qgc3VwcG9ydGVkIGZvciBYTFNCIn12YXIgdk49'@;
put 'ezA6IkJFRVAiLDE6Ik9QRU4iLDI6Ik9QRU4uTElOS1MiLDM6IkNMT1NFLkFMTCIsNDoiU0FWRSIsNToiU0FWRS5BUyIsNjoiRklMRS5ERUxFVEUiLDc6IlBBR0UuU0VUVVAiLDg6IlBSSU5UIiw5OiJQUklOVEVSLlNFVFVQIiwxMDoiUVVJVCIsMTE6Ik5FVy5XSU5ET1ciLDEyOiJBUlJBTkdF'@;
put 'LkFMTCIsMTM6IldJTkRPVy5TSVpFIiwxNDoiV0lORE9XLk1PVkUiLDE1OiJGVUxMIiwxNjoiQ0xPU0UiLDE3OiJSVU4iLDIyOiJTRVQuUFJJTlQuQVJFQSIsMjM6IlNFVC5QUklOVC5USVRMRVMiLDI0OiJTRVQuUEFHRS5CUkVBSyIsMjU6IlJFTU9WRS5QQUdFLkJSRUFLIiwyNjoiRk9OVCIs'@;
put 'Mjc6IkRJU1BMQVkiLDI4OiJQUk9URUNULkRPQ1VNRU5UIiwyOToiUFJFQ0lTSU9OIiwzMDoiQTEuUjFDMSIsMzE6IkNBTENVTEFURS5OT1ciLDMyOiJDQUxDVUxBVElPTiIsMzQ6IkRBVEEuRklORCIsMzU6IkVYVFJBQ1QiLDM2OiJEQVRBLkRFTEVURSIsMzc6IlNFVC5EQVRBQkFTRSIsMzg6'@;
put 'IlNFVC5DUklURVJJQSIsMzk6IlNPUlQiLDQwOiJEQVRBLlNFUklFUyIsNDE6IlRBQkxFIiw0MjoiRk9STUFULk5VTUJFUiIsNDM6IkFMSUdOTUVOVCIsNDQ6IlNUWUxFIiw0NToiQk9SREVSIiw0NjoiQ0VMTC5QUk9URUNUSU9OIiw0NzoiQ09MVU1OLldJRFRIIiw0ODoiVU5ETyIsNDk6IkNV'@;
put 'VCIsNTA6IkNPUFkiLDUxOiJQQVNURSIsNTI6IkNMRUFSIiw1MzoiUEFTVEUuU1BFQ0lBTCIsNTQ6IkVESVQuREVMRVRFIiw1NToiSU5TRVJUIiw1NjoiRklMTC5SSUdIVCIsNTc6IkZJTEwuRE9XTiIsNjE6IkRFRklORS5OQU1FIiw2MjoiQ1JFQVRFLk5BTUVTIiw2MzoiRk9STVVMQS5HT1RP'@;
put 'Iiw2NDoiRk9STVVMQS5GSU5EIiw2NToiU0VMRUNULkxBU1QuQ0VMTCIsNjY6IlNIT1cuQUNUSVZFLkNFTEwiLDY3OiJHQUxMRVJZLkFSRUEiLDY4OiJHQUxMRVJZLkJBUiIsNjk6IkdBTExFUlkuQ09MVU1OIiw3MDoiR0FMTEVSWS5MSU5FIiw3MToiR0FMTEVSWS5QSUUiLDcyOiJHQUxMRVJZ'@;
put 'LlNDQVRURVIiLDczOiJDT01CSU5BVElPTiIsNzQ6IlBSRUZFUlJFRCIsNzU6IkFERC5PVkVSTEFZIiw3NjoiR1JJRExJTkVTIiw3NzoiU0VULlBSRUZFUlJFRCIsNzg6IkFYRVMiLDc5OiJMRUdFTkQiLDgwOiJBVFRBQ0guVEVYVCIsODE6IkFERC5BUlJPVyIsODI6IlNFTEVDVC5DSEFSVCIs'@;
put 'ODM6IlNFTEVDVC5QTE9ULkFSRUEiLDg0OiJQQVRURVJOUyIsODU6Ik1BSU4uQ0hBUlQiLDg2OiJPVkVSTEFZIiw4NzoiU0NBTEUiLDg4OiJGT1JNQVQuTEVHRU5EIiw4OToiRk9STUFULlRFWFQiLDkwOiJFRElULlJFUEVBVCIsOTE6IlBBUlNFIiw5MjoiSlVTVElGWSIsOTM6IkhJREUiLDk0'@;
put 'OiJVTkhJREUiLDk1OiJXT1JLU1BBQ0UiLDk2OiJGT1JNVUxBIiw5NzoiRk9STVVMQS5GSUxMIiw5ODoiRk9STVVMQS5BUlJBWSIsOTk6IkRBVEEuRklORC5ORVhUIiwxMDA6IkRBVEEuRklORC5QUkVWIiwxMDE6IkZPUk1VTEEuRklORC5ORVhUIiwxMDI6IkZPUk1VTEEuRklORC5QUkVWIiwx'@;
put 'MDM6IkFDVElWQVRFIiwxMDQ6IkFDVElWQVRFLk5FWFQiLDEwNToiQUNUSVZBVEUuUFJFViIsMTA2OiJVTkxPQ0tFRC5ORVhUIiwxMDc6IlVOTE9DS0VELlBSRVYiLDEwODoiQ09QWS5QSUNUVVJFIiwxMDk6IlNFTEVDVCIsMTEwOiJERUxFVEUuTkFNRSIsMTExOiJERUxFVEUuRk9STUFUIiwx'@;
put 'MTI6IlZMSU5FIiwxMTM6IkhMSU5FIiwxMTQ6IlZQQUdFIiwxMTU6IkhQQUdFIiwxMTY6IlZTQ1JPTEwiLDExNzoiSFNDUk9MTCIsMTE4OiJBTEVSVCIsMTE5OiJORVciLDEyMDoiQ0FOQ0VMLkNPUFkiLDEyMToiU0hPVy5DTElQQk9BUkQiLDEyMjoiTUVTU0FHRSIsMTI0OiJQQVNURS5MSU5L'@;
put 'IiwxMjU6IkFQUC5BQ1RJVkFURSIsMTI2OiJERUxFVEUuQVJST1ciLDEyNzoiUk9XLkhFSUdIVCIsMTI4OiJGT1JNQVQuTU9WRSIsMTI5OiJGT1JNQVQuU0laRSIsMTMwOiJGT1JNVUxBLlJFUExBQ0UiLDEzMToiU0VORC5LRVlTIiwxMzI6IlNFTEVDVC5TUEVDSUFMIiwxMzM6IkFQUExZLk5B'@;
put 'TUVTIiwxMzQ6IlJFUExBQ0UuRk9OVCIsMTM1OiJGUkVFWkUuUEFORVMiLDEzNjoiU0hPVy5JTkZPIiwxMzc6IlNQTElUIiwxMzg6Ik9OLldJTkRPVyIsMTM5OiJPTi5EQVRBIiwxNDA6IkRJU0FCTEUuSU5QVVQiLDE0MjoiT1VUTElORSIsMTQzOiJMSVNULk5BTUVTIiwxNDQ6IkZJTEUuQ0xP'@;
put 'U0UiLDE0NToiU0FWRS5XT1JLQk9PSyIsMTQ2OiJEQVRBLkZPUk0iLDE0NzoiQ09QWS5DSEFSVCIsMTQ4OiJPTi5USU1FIiwxNDk6IldBSVQiLDE1MDoiRk9STUFULkZPTlQiLDE1MToiRklMTC5VUCIsMTUyOiJGSUxMLkxFRlQiLDE1MzoiREVMRVRFLk9WRVJMQVkiLDE1NToiU0hPUlQuTUVO'@;
put 'VVMiLDE1OToiU0VULlVQREFURS5TVEFUVVMiLDE2MToiQ09MT1IuUEFMRVRURSIsMTYyOiJERUxFVEUuU1RZTEUiLDE2MzoiV0lORE9XLlJFU1RPUkUiLDE2NDoiV0lORE9XLk1BWElNSVpFIiwxNjY6IkNIQU5HRS5MSU5LIiwxNjc6IkNBTENVTEFURS5ET0NVTUVOVCIsMTY4OiJPTi5LRVki'@;
put 'LDE2OToiQVBQLlJFU1RPUkUiLDE3MDoiQVBQLk1PVkUiLDE3MToiQVBQLlNJWkUiLDE3MjoiQVBQLk1JTklNSVpFIiwxNzM6IkFQUC5NQVhJTUlaRSIsMTc0OiJCUklORy5UTy5GUk9OVCIsMTc1OiJTRU5ELlRPLkJBQ0siLDE4NToiTUFJTi5DSEFSVC5UWVBFIiwxODY6Ik9WRVJMQVkuQ0hB'@;
put 'UlQuVFlQRSIsMTg3OiJTRUxFQ1QuRU5EIiwxODg6Ik9QRU4uTUFJTCIsMTg5OiJTRU5ELk1BSUwiLDE5MDoiU1RBTkRBUkQuRk9OVCIsMTkxOiJDT05TT0xJREFURSIsMTkyOiJTT1JULlNQRUNJQUwiLDE5MzoiR0FMTEVSWS4zRC5BUkVBIiwxOTQ6IkdBTExFUlkuM0QuQ09MVU1OIiwxOTU6'@;
put 'IkdBTExFUlkuM0QuTElORSIsMTk2OiJHQUxMRVJZLjNELlBJRSIsMTk3OiJWSUVXLjNEIiwxOTg6IkdPQUwuU0VFSyIsMTk5OiJXT1JLR1JPVVAiLDIwMDoiRklMTC5HUk9VUCIsMjAxOiJVUERBVEUuTElOSyIsMjAyOiJQUk9NT1RFIiwyMDM6IkRFTU9URSIsMjA0OiJTSE9XLkRFVEFJTCIs'@;
put 'MjA2OiJVTkdST1VQIiwyMDc6Ik9CSkVDVC5QUk9QRVJUSUVTIiwyMDg6IlNBVkUuTkVXLk9CSkVDVCIsMjA5OiJTSEFSRSIsMjEwOiJTSEFSRS5OQU1FIiwyMTE6IkRVUExJQ0FURSIsMjEyOiJBUFBMWS5TVFlMRSIsMjEzOiJBU1NJR04uVE8uT0JKRUNUIiwyMTQ6Ik9CSkVDVC5QUk9URUNU'@;
put 'SU9OIiwyMTU6IkhJREUuT0JKRUNUIiwyMTY6IlNFVC5FWFRSQUNUIiwyMTc6IkNSRUFURS5QVUJMSVNIRVIiLDIxODoiU1VCU0NSSUJFLlRPIiwyMTk6IkFUVFJJQlVURVMiLDIyMDoiU0hPVy5UT09MQkFSIiwyMjI6IlBSSU5ULlBSRVZJRVciLDIyMzoiRURJVC5DT0xPUiIsMjI0OiJTSE9X'@;
put 'LkxFVkVMUyIsMjI1OiJGT1JNQVQuTUFJTiIsMjI2OiJGT1JNQVQuT1ZFUkxBWSIsMjI3OiJPTi5SRUNBTEMiLDIyODoiRURJVC5TRVJJRVMiLDIyOToiREVGSU5FLlNUWUxFIiwyNDA6IkxJTkUuUFJJTlQiLDI0MzoiRU5URVIuREFUQSIsMjQ5OiJHQUxMRVJZLlJBREFSIiwyNTA6Ik1FUkdF'@;
put 'LlNUWUxFUyIsMjUxOiJFRElUSU9OLk9QVElPTlMiLDI1MjoiUEFTVEUuUElDVFVSRSIsMjUzOiJQQVNURS5QSUNUVVJFLkxJTksiLDI1NDoiU1BFTExJTkciLDI1NjoiWk9PTSIsMjU5OiJJTlNFUlQuT0JKRUNUIiwyNjA6IldJTkRPVy5NSU5JTUlaRSIsMjY1OiJTT1VORC5OT1RFIiwyNjY6'@;
put 'IlNPVU5ELlBMQVkiLDI2NzoiRk9STUFULlNIQVBFIiwyNjg6IkVYVEVORC5QT0xZR09OIiwyNjk6IkZPUk1BVC5BVVRPIiwyNzI6IkdBTExFUlkuM0QuQkFSIiwyNzM6IkdBTExFUlkuM0QuU1VSRkFDRSIsMjc0OiJGSUxMLkFVVE8iLDI3NjoiQ1VTVE9NSVpFLlRPT0xCQVIiLDI3NzoiQURE'@;
put 'LlRPT0wiLDI3ODoiRURJVC5PQkpFQ1QiLDI3OToiT04uRE9VQkxFQ0xJQ0siLDI4MDoiT04uRU5UUlkiLDI4MToiV09SS0JPT0suQUREIiwyODI6IldPUktCT09LLk1PVkUiLDI4MzoiV09SS0JPT0suQ09QWSIsMjg0OiJXT1JLQk9PSy5PUFRJT05TIiwyODU6IlNBVkUuV09SS1NQQUNFIiwy'@;
put 'ODg6IkNIQVJULldJWkFSRCIsMjg5OiJERUxFVEUuVE9PTCIsMjkwOiJNT1ZFLlRPT0wiLDI5MToiV09SS0JPT0suU0VMRUNUIiwyOTI6IldPUktCT09LLkFDVElWQVRFIiwyOTM6IkFTU0lHTi5UTy5UT09MIiwyOTU6IkNPUFkuVE9PTCIsMjk2OiJSRVNFVC5UT09MIiwyOTc6IkNPTlNUUkFJ'@;
put 'Ti5OVU1FUklDIiwyOTg6IlBBU1RFLlRPT0wiLDMwMjoiV09SS0JPT0suTkVXIiwzMDU6IlNDRU5BUklPLkNFTExTIiwzMDY6IlNDRU5BUklPLkRFTEVURSIsMzA3OiJTQ0VOQVJJTy5BREQiLDMwODoiU0NFTkFSSU8uRURJVCIsMzA5OiJTQ0VOQVJJTy5TSE9XIiwzMTA6IlNDRU5BUklPLlNI'@;
put 'T1cuTkVYVCIsMzExOiJTQ0VOQVJJTy5TVU1NQVJZIiwzMTI6IlBJVk9ULlRBQkxFLldJWkFSRCIsMzEzOiJQSVZPVC5GSUVMRC5QUk9QRVJUSUVTIiwzMTQ6IlBJVk9ULkZJRUxEIiwzMTU6IlBJVk9ULklURU0iLDMxNjoiUElWT1QuQURELkZJRUxEUyIsMzE4OiJPUFRJT05TLkNBTENVTEFU'@;
put 'SU9OIiwzMTk6Ik9QVElPTlMuRURJVCIsMzIwOiJPUFRJT05TLlZJRVciLDMyMToiQURESU4uTUFOQUdFUiIsMzIyOiJNRU5VLkVESVRPUiIsMzIzOiJBVFRBQ0guVE9PTEJBUlMiLDMyNDoiVkJBQWN0aXZhdGUiLDMyNToiT1BUSU9OUy5DSEFSVCIsMzI4OiJWQkEuSU5TRVJULkZJTEUiLDMz'@;
put 'MDoiVkJBLlBST0NFRFVSRS5ERUZJTklUSU9OIiwzMzY6IlJPVVRJTkcuU0xJUCIsMzM4OiJST1VURS5ET0NVTUVOVCIsMzM5OiJNQUlMLkxPR09OIiwzNDI6IklOU0VSVC5QSUNUVVJFIiwzNDM6IkVESVQuVE9PTCIsMzQ0OiJHQUxMRVJZLkRPVUdITlVUIiwzNTA6IkNIQVJULlRSRU5EIiwz'@;
put 'NTI6IlBJVk9ULklURU0uUFJPUEVSVElFUyIsMzU0OiJXT1JLQk9PSy5JTlNFUlQiLDM1NToiT1BUSU9OUy5UUkFOU0lUSU9OIiwzNTY6Ik9QVElPTlMuR0VORVJBTCIsMzcwOiJGSUxURVIuQURWQU5DRUQiLDM3MzoiTUFJTC5BREQuTUFJTEVSIiwzNzQ6Ik1BSUwuREVMRVRFLk1BSUxFUiIs'@;
put 'Mzc1OiJNQUlMLlJFUExZIiwzNzY6Ik1BSUwuUkVQTFkuQUxMIiwzNzc6Ik1BSUwuRk9SV0FSRCIsMzc4OiJNQUlMLk5FWFQuTEVUVEVSIiwzNzk6IkRBVEEuTEFCRUwiLDM4MDoiSU5TRVJULlRJVExFIiwzODE6IkZPTlQuUFJPUEVSVElFUyIsMzgyOiJNQUNSTy5PUFRJT05TIiwzODM6IldP'@;
put 'UktCT09LLkhJREUiLDM4NDoiV09SS0JPT0suVU5ISURFIiwzODU6IldPUktCT09LLkRFTEVURSIsMzg2OiJXT1JLQk9PSy5OQU1FIiwzODg6IkdBTExFUlkuQ1VTVE9NIiwzOTA6IkFERC5DSEFSVC5BVVRPRk9STUFUIiwzOTE6IkRFTEVURS5DSEFSVC5BVVRPRk9STUFUIiwzOTI6IkNIQVJU'@;
put 'LkFERC5EQVRBIiwzOTM6IkFVVE8uT1VUTElORSIsMzk0OiJUQUIuT1JERVIiLDM5NToiU0hPVy5ESUFMT0ciLDM5NjoiU0VMRUNULkFMTCIsMzk3OiJVTkdST1VQLlNIRUVUUyIsMzk4OiJTVUJUT1RBTC5DUkVBVEUiLDM5OToiU1VCVE9UQUwuUkVNT1ZFIiw0MDA6IlJFTkFNRS5PQkpFQ1Qi'@;
put 'LDQxMjoiV09SS0JPT0suU0NST0xMIiw0MTM6IldPUktCT09LLk5FWFQiLDQxNDoiV09SS0JPT0suUFJFViIsNDE1OiJXT1JLQk9PSy5UQUIuU1BMSVQiLDQxNjoiRlVMTC5TQ1JFRU4iLDQxNzoiV09SS0JPT0suUFJPVEVDVCIsNDIwOiJTQ1JPTExCQVIuUFJPUEVSVElFUyIsNDIxOiJQSVZP'@;
put 'VC5TSE9XLlBBR0VTIiw0MjI6IlRFWFQuVE8uQ09MVU1OUyIsNDIzOiJGT1JNQVQuQ0hBUlRUWVBFIiw0MjQ6IkxJTksuRk9STUFUIiw0MjU6IlRSQUNFUi5ESVNQTEFZIiw0MzA6IlRSQUNFUi5OQVZJR0FURSIsNDMxOiJUUkFDRVIuQ0xFQVIiLDQzMjoiVFJBQ0VSLkVSUk9SIiw0MzM6IlBJ'@;
put 'Vk9ULkZJRUxELkdST1VQIiw0MzQ6IlBJVk9ULkZJRUxELlVOR1JPVVAiLDQzNToiQ0hFQ0tCT1guUFJPUEVSVElFUyIsNDM2OiJMQUJFTC5QUk9QRVJUSUVTIiw0Mzc6IkxJU1RCT1guUFJPUEVSVElFUyIsNDM4OiJFRElUQk9YLlBST1BFUlRJRVMiLDQzOToiUElWT1QuUkVGUkVTSCIsNDQw'@;
put 'OiJMSU5LLkNPTUJPIiw0NDE6Ik9QRU4uVEVYVCIsNDQyOiJISURFLkRJQUxPRyIsNDQzOiJTRVQuRElBTE9HLkZPQ1VTIiw0NDQ6IkVOQUJMRS5PQkpFQ1QiLDQ0NToiUFVTSEJVVFRPTi5QUk9QRVJUSUVTIiw0NDY6IlNFVC5ESUFMT0cuREVGQVVMVCIsNDQ3OiJGSUxURVIiLDQ0ODoiRklM'@;
put 'VEVSLlNIT1cuQUxMIiw0NDk6IkNMRUFSLk9VVExJTkUiLDQ1MDoiRlVOQ1RJT04uV0laQVJEIiw0NTE6IkFERC5MSVNULklURU0iLDQ1MjoiU0VULkxJU1QuSVRFTSIsNDUzOiJSRU1PVkUuTElTVC5JVEVNIiw0NTQ6IlNFTEVDVC5MSVNULklURU0iLDQ1NToiU0VULkNPTlRST0wuVkFMVUUi'@;
put 'LDQ1NjoiU0FWRS5DT1BZLkFTIiw0NTg6Ik9QVElPTlMuTElTVFMuQUREIiw0NTk6Ik9QVElPTlMuTElTVFMuREVMRVRFIiw0NjA6IlNFUklFUy5BWEVTIiw0NjE6IlNFUklFUy5YIiw0NjI6IlNFUklFUy5ZIiw0NjM6IkVSUk9SQkFSLlgiLDQ2NDoiRVJST1JCQVIuWSIsNDY1OiJGT1JNQVQu'@;
put 'Q0hBUlQiLDQ2NjoiU0VSSUVTLk9SREVSIiw0Njc6Ik1BSUwuTE9HT0ZGIiw0Njg6IkNMRUFSLlJPVVRJTkcuU0xJUCIsNDY5OiJBUFAuQUNUSVZBVEUuTUlDUk9TT0ZUIiw0NzA6Ik1BSUwuRURJVC5NQUlMRVIiLDQ3MToiT04uU0hFRVQiLDQ3MjoiU1RBTkRBUkQuV0lEVEgiLDQ3MzoiU0NF'@;
put 'TkFSSU8uTUVSR0UiLDQ3NDoiU1VNTUFSWS5JTkZPIiw0NzU6IkZJTkQuRklMRSIsNDc2OiJBQ1RJVkUuQ0VMTC5GT05UIiw0Nzc6IkVOQUJMRS5USVBXSVpBUkQiLDQ3ODoiVkJBLk1BS0UuQURESU4iLDQ4MDoiSU5TRVJUREFUQVRBQkxFIiw0ODE6IldPUktHUk9VUC5PUFRJT05TIiw0ODI6'@;
put 'Ik1BSUwuU0VORC5NQUlMRVIiLDQ4NToiQVVUT0NPUlJFQ1QiLDQ4OToiUE9TVC5ET0NVTUVOVCIsNDkxOiJQSUNLTElTVCIsNDkzOiJWSUVXLlNIT1ciLDQ5NDoiVklFVy5ERUZJTkUiLDQ5NToiVklFVy5ERUxFVEUiLDUwOToiU0hFRVQuQkFDS0dST1VORCIsNTEwOiJJTlNFUlQuTUFQLk9C'@;
put 'SkVDVCIsNTExOiJPUFRJT05TLk1FTk9OTyIsNTE3OiJNU09DSEVDS1MiLDUxODoiTk9STUFMIiw1MTk6IkxBWU9VVCIsNTIwOiJSTS5QUklOVC5BUkVBIiw1MjE6IkNMRUFSLlBSSU5ULkFSRUEiLDUyMjoiQURELlBSSU5ULkFSRUEiLDUyMzoiTU9WRS5CUksiLDU0NToiSElERUNVUlIuTk9U'@;
put 'RSIsNTQ2OiJISURFQUxMLk5PVEVTIiw1NDc6IkRFTEVURS5OT1RFIiw1NDg6IlRSQVZFUlNFLk5PVEVTIiw1NDk6IkFDVElWQVRFLk5PVEVTIiw2MjA6IlBST1RFQ1QuUkVWSVNJT05TIiw2MjE6IlVOUFJPVEVDVC5SRVZJU0lPTlMiLDY0NzoiT1BUSU9OUy5NRSIsNjUzOiJXRUIuUFVCTElT'@;
put 'SCIsNjY3OiJORVdXRUJRVUVSWSIsNjczOiJQSVZPVC5UQUJMRS5DSEFSVCIsNzUzOiJPUFRJT05TLlNBVkUiLDc1NToiT1BUSU9OUy5TUEVMTCIsODA4OiJISURFQUxMLklOS0FOTk9UUyJ9LGV3PXswOiJDT1VOVCIsMToiSUYiLDI6IklTTkEiLDM6IklTRVJST1IiLDQ6IlNVTSIsNToiQVZF'@;
put 'UkFHRSIsNjoiTUlOIiw3OiJNQVgiLDg6IlJPVyIsOToiQ09MVU1OIiwxMDoiTkEiLDExOiJOUFYiLDEyOiJTVERFViIsMTM6IkRPTExBUiIsMTQ6IkZJWEVEIiwxNToiU0lOIiwxNjoiQ09TIiwxNzoiVEFOIiwxODoiQVRBTiIsMTk6IlBJIiwyMDoiU1FSVCIsMjE6IkVYUCIsMjI6IkxOIiwy'@;
put 'MzoiTE9HMTAiLDI0OiJBQlMiLDI1OiJJTlQiLDI2OiJTSUdOIiwyNzoiUk9VTkQiLDI4OiJMT09LVVAiLDI5OiJJTkRFWCIsMzA6IlJFUFQiLDMxOiJNSUQiLDMyOiJMRU4iLDMzOiJWQUxVRSIsMzQ6IlRSVUUiLDM1OiJGQUxTRSIsMzY6IkFORCIsMzc6Ik9SIiwzODoiTk9UIiwzOToiTU9E'@;
put 'Iiw0MDoiRENPVU5UIiw0MToiRFNVTSIsNDI6IkRBVkVSQUdFIiw0MzoiRE1JTiIsNDQ6IkRNQVgiLDQ1OiJEU1RERVYiLDQ2OiJWQVIiLDQ3OiJEVkFSIiw0ODoiVEVYVCIsNDk6IkxJTkVTVCIsNTA6IlRSRU5EIiw1MToiTE9HRVNUIiw1MjoiR1JPV1RIIiw1MzoiR09UTyIsNTQ6IkhBTFQi'@;
put 'LDU1OiJSRVRVUk4iLDU2OiJQViIsNTc6IkZWIiw1ODoiTlBFUiIsNTk6IlBNVCIsNjA6IlJBVEUiLDYxOiJNSVJSIiw2MjoiSVJSIiw2MzoiUkFORCIsNjQ6Ik1BVENIIiw2NToiREFURSIsNjY6IlRJTUUiLDY3OiJEQVkiLDY4OiJNT05USCIsNjk6IllFQVIiLDcwOiJXRUVLREFZIiw3MToi'@;
put 'SE9VUiIsNzI6Ik1JTlVURSIsNzM6IlNFQ09ORCIsNzQ6Ik5PVyIsNzU6IkFSRUFTIiw3NjoiUk9XUyIsNzc6IkNPTFVNTlMiLDc4OiJPRkZTRVQiLDc5OiJBQlNSRUYiLDgwOiJSRUxSRUYiLDgxOiJBUkdVTUVOVCIsODI6IlNFQVJDSCIsODM6IlRSQU5TUE9TRSIsODQ6IkVSUk9SIiw4NToi'@;
put 'U1RFUCIsODY6IlRZUEUiLDg3OiJFQ0hPIiw4ODoiU0VULk5BTUUiLDg5OiJDQUxMRVIiLDkwOiJERVJFRiIsOTE6IldJTkRPV1MiLDkyOiJTRVJJRVMiLDkzOiJET0NVTUVOVFMiLDk0OiJBQ1RJVkUuQ0VMTCIsOTU6IlNFTEVDVElPTiIsOTY6IlJFU1VMVCIsOTc6IkFUQU4yIiw5ODoiQVNJ'@;
put 'TiIsOTk6IkFDT1MiLDEwMDoiQ0hPT1NFIiwxMDE6IkhMT09LVVAiLDEwMjoiVkxPT0tVUCIsMTAzOiJMSU5LUyIsMTA0OiJJTlBVVCIsMTA1OiJJU1JFRiIsMTA2OiJHRVQuRk9STVVMQSIsMTA3OiJHRVQuTkFNRSIsMTA4OiJTRVQuVkFMVUUiLDEwOToiTE9HIiwxMTA6IkVYRUMiLDExMToi'@;
put 'Q0hBUiIsMTEyOiJMT1dFUiIsMTEzOiJVUFBFUiIsMTE0OiJQUk9QRVIiLDExNToiTEVGVCIsMTE2OiJSSUdIVCIsMTE3OiJFWEFDVCIsMTE4OiJUUklNIiwxMTk6IlJFUExBQ0UiLDEyMDoiU1VCU1RJVFVURSIsMTIxOiJDT0RFIiwxMjI6Ik5BTUVTIiwxMjM6IkRJUkVDVE9SWSIsMTI0OiJG'@;
put 'SU5EIiwxMjU6IkNFTEwiLDEyNjoiSVNFUlIiLDEyNzoiSVNURVhUIiwxMjg6IklTTlVNQkVSIiwxMjk6IklTQkxBTksiLDEzMDoiVCIsMTMxOiJOIiwxMzI6IkZPUEVOIiwxMzM6IkZDTE9TRSIsMTM0OiJGU0laRSIsMTM1OiJGUkVBRExOIiwxMzY6IkZSRUFEIiwxMzc6IkZXUklURUxOIiwx'@;
put 'Mzg6IkZXUklURSIsMTM5OiJGUE9TIiwxNDA6IkRBVEVWQUxVRSIsMTQxOiJUSU1FVkFMVUUiLDE0MjoiU0xOIiwxNDM6IlNZRCIsMTQ0OiJEREIiLDE0NToiR0VULkRFRiIsMTQ2OiJSRUZURVhUIiwxNDc6IlRFWFRSRUYiLDE0ODoiSU5ESVJFQ1QiLDE0OToiUkVHSVNURVIiLDE1MDoiQ0FM'@;
put 'TCIsMTUxOiJBREQuQkFSIiwxNTI6IkFERC5NRU5VIiwxNTM6IkFERC5DT01NQU5EIiwxNTQ6IkVOQUJMRS5DT01NQU5EIiwxNTU6IkNIRUNLLkNPTU1BTkQiLDE1NjoiUkVOQU1FLkNPTU1BTkQiLDE1NzoiU0hPVy5CQVIiLDE1ODoiREVMRVRFLk1FTlUiLDE1OToiREVMRVRFLkNPTU1BTkQi'@;
put 'LDE2MDoiR0VULkNIQVJULklURU0iLDE2MToiRElBTE9HLkJPWCIsMTYyOiJDTEVBTiIsMTYzOiJNREVURVJNIiwxNjQ6Ik1JTlZFUlNFIiwxNjU6Ik1NVUxUIiwxNjY6IkZJTEVTIiwxNjc6IklQTVQiLDE2ODoiUFBNVCIsMTY5OiJDT1VOVEEiLDE3MDoiQ0FOQ0VMLktFWSIsMTcxOiJGT1Ii'@;
put 'LDE3MjoiV0hJTEUiLDE3MzoiQlJFQUsiLDE3NDoiTkVYVCIsMTc1OiJJTklUSUFURSIsMTc2OiJSRVFVRVNUIiwxNzc6IlBPS0UiLDE3ODoiRVhFQ1VURSIsMTc5OiJURVJNSU5BVEUiLDE4MDoiUkVTVEFSVCIsMTgxOiJIRUxQIiwxODI6IkdFVC5CQVIiLDE4MzoiUFJPRFVDVCIsMTg0OiJG'@;
put 'QUNUIiwxODU6IkdFVC5DRUxMIiwxODY6IkdFVC5XT1JLU1BBQ0UiLDE4NzoiR0VULldJTkRPVyIsMTg4OiJHRVQuRE9DVU1FTlQiLDE4OToiRFBST0RVQ1QiLDE5MDoiSVNOT05URVhUIiwxOTE6IkdFVC5OT1RFIiwxOTI6Ik5PVEUiLDE5MzoiU1RERVZQIiwxOTQ6IlZBUlAiLDE5NToiRFNU'@;
put 'REVWUCIsMTk2OiJEVkFSUCIsMTk3OiJUUlVOQyIsMTk4OiJJU0xPR0lDQUwiLDE5OToiRENPVU5UQSIsMjAwOiJERUxFVEUuQkFSIiwyMDE6IlVOUkVHSVNURVIiLDIwNDoiVVNET0xMQVIiLDIwNToiRklOREIiLDIwNjoiU0VBUkNIQiIsMjA3OiJSRVBMQUNFQiIsMjA4OiJMRUZUQiIsMjA5'@;
put 'OiJSSUdIVEIiLDIxMDoiTUlEQiIsMjExOiJMRU5CIiwyMTI6IlJPVU5EVVAiLDIxMzoiUk9VTkRET1dOIiwyMTQ6IkFTQyIsMjE1OiJEQkNTIiwyMTY6IlJBTksiLDIxOToiQUREUkVTUyIsMjIwOiJEQVlTMzYwIiwyMjE6IlRPREFZIiwyMjI6IlZEQiIsMjIzOiJFTFNFIiwyMjQ6IkVMU0Uu'@;
put 'SUYiLDIyNToiRU5ELklGIiwyMjY6IkZPUi5DRUxMIiwyMjc6Ik1FRElBTiIsMjI4OiJTVU1QUk9EVUNUIiwyMjk6IlNJTkgiLDIzMDoiQ09TSCIsMjMxOiJUQU5IIiwyMzI6IkFTSU5IIiwyMzM6IkFDT1NIIiwyMzQ6IkFUQU5IIiwyMzU6IkRHRVQiLDIzNjoiQ1JFQVRFLk9CSkVDVCIsMjM3'@;
put 'OiJWT0xBVElMRSIsMjM4OiJMQVNULkVSUk9SIiwyMzk6IkNVU1RPTS5VTkRPIiwyNDA6IkNVU1RPTS5SRVBFQVQiLDI0MToiRk9STVVMQS5DT05WRVJUIiwyNDI6IkdFVC5MSU5LLklORk8iLDI0MzoiVEVYVC5CT1giLDI0NDoiSU5GTyIsMjQ1OiJHUk9VUCIsMjQ2OiJHRVQuT0JKRUNUIiwy'@;
put 'NDc6IkRCIiwyNDg6IlBBVVNFIiwyNTE6IlJFU1VNRSIsMjUyOiJGUkVRVUVOQ1kiLDI1MzoiQURELlRPT0xCQVIiLDI1NDoiREVMRVRFLlRPT0xCQVIiLDI1NToiVXNlciIsMjU2OiJSRVNFVC5UT09MQkFSIiwyNTc6IkVWQUxVQVRFIiwyNTg6IkdFVC5UT09MQkFSIiwyNTk6IkdFVC5UT09M'@;
put 'IiwyNjA6IlNQRUxMSU5HLkNIRUNLIiwyNjE6IkVSUk9SLlRZUEUiLDI2MjoiQVBQLlRJVExFIiwyNjM6IldJTkRPVy5USVRMRSIsMjY0OiJTQVZFLlRPT0xCQVIiLDI2NToiRU5BQkxFLlRPT0wiLDI2NjoiUFJFU1MuVE9PTCIsMjY3OiJSRUdJU1RFUi5JRCIsMjY4OiJHRVQuV09SS0JPT0si'@;
put 'LDI2OToiQVZFREVWIiwyNzA6IkJFVEFESVNUIiwyNzE6IkdBTU1BTE4iLDI3MjoiQkVUQUlOViIsMjczOiJCSU5PTURJU1QiLDI3NDoiQ0hJRElTVCIsMjc1OiJDSElJTlYiLDI3NjoiQ09NQklOIiwyNzc6IkNPTkZJREVOQ0UiLDI3ODoiQ1JJVEJJTk9NIiwyNzk6IkVWRU4iLDI4MDoiRVhQ'@;
put 'T05ESVNUIiwyODE6IkZESVNUIiwyODI6IkZJTlYiLDI4MzoiRklTSEVSIiwyODQ6IkZJU0hFUklOViIsMjg1OiJGTE9PUiIsMjg2OiJHQU1NQURJU1QiLDI4NzoiR0FNTUFJTlYiLDI4ODoiQ0VJTElORyIsMjg5OiJIWVBHRU9NRElTVCIsMjkwOiJMT0dOT1JNRElTVCIsMjkxOiJMT0dJTlYi'@;
put 'LDI5MjoiTkVHQklOT01ESVNUIiwyOTM6Ik5PUk1ESVNUIiwyOTQ6Ik5PUk1TRElTVCIsMjk1OiJOT1JNSU5WIiwyOTY6Ik5PUk1TSU5WIiwyOTc6IlNUQU5EQVJESVpFIiwyOTg6Ik9ERCIsMjk5OiJQRVJNVVQiLDMwMDoiUE9JU1NPTiIsMzAxOiJURElTVCIsMzAyOiJXRUlCVUxMIiwzMDM6'@;
put 'IlNVTVhNWTIiLDMwNDoiU1VNWDJNWTIiLDMwNToiU1VNWDJQWTIiLDMwNjoiQ0hJVEVTVCIsMzA3OiJDT1JSRUwiLDMwODoiQ09WQVIiLDMwOToiRk9SRUNBU1QiLDMxMDoiRlRFU1QiLDMxMToiSU5URVJDRVBUIiwzMTI6IlBFQVJTT04iLDMxMzoiUlNRIiwzMTQ6IlNURVlYIiwzMTU6IlNM'@;
put 'T1BFIiwzMTY6IlRURVNUIiwzMTc6IlBST0IiLDMxODoiREVWU1EiLDMxOToiR0VPTUVBTiIsMzIwOiJIQVJNRUFOIiwzMjE6IlNVTVNRIiwzMjI6IktVUlQiLDMyMzoiU0tFVyIsMzI0OiJaVEVTVCIsMzI1OiJMQVJHRSIsMzI2OiJTTUFMTCIsMzI3OiJRVUFSVElMRSIsMzI4OiJQRVJDRU5U'@;
put 'SUxFIiwzMjk6IlBFUkNFTlRSQU5LIiwzMzA6Ik1PREUiLDMzMToiVFJJTU1FQU4iLDMzMjoiVElOViIsMzM0OiJNT1ZJRS5DT01NQU5EIiwzMzU6IkdFVC5NT1ZJRSIsMzM2OiJDT05DQVRFTkFURSIsMzM3OiJQT1dFUiIsMzM4OiJQSVZPVC5BREQuREFUQSIsMzM5OiJHRVQuUElWT1QuVEFC'@;
put 'TEUiLDM0MDoiR0VULlBJVk9ULkZJRUxEIiwzNDE6IkdFVC5QSVZPVC5JVEVNIiwzNDI6IlJBRElBTlMiLDM0MzoiREVHUkVFUyIsMzQ0OiJTVUJUT1RBTCIsMzQ1OiJTVU1JRiIsMzQ2OiJDT1VOVElGIiwzNDc6IkNPVU5UQkxBTksiLDM0ODoiU0NFTkFSSU8uR0VUIiwzNDk6Ik9QVElPTlMu'@;
put 'TElTVFMuR0VUIiwzNTA6IklTUE1UIiwzNTE6IkRBVEVESUYiLDM1MjoiREFURVNUUklORyIsMzUzOiJOVU1CRVJTVFJJTkciLDM1NDoiUk9NQU4iLDM1NToiT1BFTi5ESUFMT0ciLDM1NjoiU0FWRS5ESUFMT0ciLDM1NzoiVklFVy5HRVQiLDM1ODoiR0VUUElWT1REQVRBIiwzNTk6IkhZUEVS'@;
put 'TElOSyIsMzYwOiJQSE9ORVRJQyIsMzYxOiJBVkVSQUdFQSIsMzYyOiJNQVhBIiwzNjM6Ik1JTkEiLDM2NDoiU1RERVZQQSIsMzY1OiJWQVJQQSIsMzY2OiJTVERFVkEiLDM2NzoiVkFSQSIsMzY4OiJCQUhUVEVYVCIsMzY5OiJUSEFJREFZT0ZXRUVLIiwzNzA6IlRIQUlESUdJVCIsMzcxOiJU'@;
put 'SEFJTU9OVEhPRllFQVIiLDM3MjoiVEhBSU5VTVNPVU5EIiwzNzM6IlRIQUlOVU1TVFJJTkciLDM3NDoiVEhBSVNUUklOR0xFTkdUSCIsMzc1OiJJU1RIQUlESUdJVCIsMzc2OiJST1VOREJBSFRET1dOIiwzNzc6IlJPVU5EQkFIVFVQIiwzNzg6IlRIQUlZRUFSIiwzNzk6IlJURCIsMzgwOiJD'@;
put 'VUJFVkFMVUUiLDM4MToiQ1VCRU1FTUJFUiIsMzgyOiJDVUJFTUVNQkVSUFJPUEVSVFkiLDM4MzoiQ1VCRVJBTktFRE1FTUJFUiIsMzg0OiJIRVgyQklOIiwzODU6IkhFWDJERUMiLDM4NjoiSEVYMk9DVCIsMzg3OiJERUMyQklOIiwzODg6IkRFQzJIRVgiLDM4OToiREVDMk9DVCIsMzkwOiJP'@;
put 'Q1QyQklOIiwzOTE6Ik9DVDJIRVgiLDM5MjoiT0NUMkRFQyIsMzkzOiJCSU4yREVDIiwzOTQ6IkJJTjJPQ1QiLDM5NToiQklOMkhFWCIsMzk2OiJJTVNVQiIsMzk3OiJJTURJViIsMzk4OiJJTVBPV0VSIiwzOTk6IklNQUJTIiw0MDA6IklNU1FSVCIsNDAxOiJJTUxOIiw0MDI6IklNTE9HMiIs'@;
put 'NDAzOiJJTUxPRzEwIiw0MDQ6IklNU0lOIiw0MDU6IklNQ09TIiw0MDY6IklNRVhQIiw0MDc6IklNQVJHVU1FTlQiLDQwODoiSU1DT05KVUdBVEUiLDQwOToiSU1BR0lOQVJZIiw0MTA6IklNUkVBTCIsNDExOiJDT01QTEVYIiw0MTI6IklNU1VNIiw0MTM6IklNUFJPRFVDVCIsNDE0OiJTRVJJ'@;
put 'RVNTVU0iLDQxNToiRkFDVERPVUJMRSIsNDE2OiJTUVJUUEkiLDQxNzoiUVVPVElFTlQiLDQxODoiREVMVEEiLDQxOToiR0VTVEVQIiw0MjA6IklTRVZFTiIsNDIxOiJJU09ERCIsNDIyOiJNUk9VTkQiLDQyMzoiRVJGIiw0MjQ6IkVSRkMiLDQyNToiQkVTU0VMSiIsNDI2OiJCRVNTRUxLIiw0'@;
put 'Mjc6IkJFU1NFTFkiLDQyODoiQkVTU0VMSSIsNDI5OiJYSVJSIiw0MzA6IlhOUFYiLDQzMToiUFJJQ0VNQVQiLDQzMjoiWUlFTERNQVQiLDQzMzoiSU5UUkFURSIsNDM0OiJSRUNFSVZFRCIsNDM1OiJESVNDIiw0MzY6IlBSSUNFRElTQyIsNDM3OiJZSUVMRERJU0MiLDQzODoiVEJJTExFUSIs'@;
put 'NDM5OiJUQklMTFBSSUNFIiw0NDA6IlRCSUxMWUlFTEQiLDQ0MToiUFJJQ0UiLDQ0MjoiWUlFTEQiLDQ0MzoiRE9MTEFSREUiLDQ0NDoiRE9MTEFSRlIiLDQ0NToiTk9NSU5BTCIsNDQ2OiJFRkZFQ1QiLDQ0NzoiQ1VNUFJJTkMiLDQ0ODoiQ1VNSVBNVCIsNDQ5OiJFREFURSIsNDUwOiJFT01P'@;
put 'TlRIIiw0NTE6IllFQVJGUkFDIiw0NTI6IkNPVVBEQVlCUyIsNDUzOiJDT1VQREFZUyIsNDU0OiJDT1VQREFZU05DIiw0NTU6IkNPVVBOQ0QiLDQ1NjoiQ09VUE5VTSIsNDU3OiJDT1VQUENEIiw0NTg6IkRVUkFUSU9OIiw0NTk6Ik1EVVJBVElPTiIsNDYwOiJPRERMUFJJQ0UiLDQ2MToiT0RE'@;
put 'TFlJRUxEIiw0NjI6Ik9EREZQUklDRSIsNDYzOiJPRERGWUlFTEQiLDQ2NDoiUkFOREJFVFdFRU4iLDQ2NToiV0VFS05VTSIsNDY2OiJBTU9SREVHUkMiLDQ2NzoiQU1PUkxJTkMiLDQ2ODoiQ09OVkVSVCIsNzI0OiJTSEVFVEpTIiw0Njk6IkFDQ1JJTlQiLDQ3MDoiQUNDUklOVE0iLDQ3MToi'@;
put 'V09SS0RBWSIsNDcyOiJORVRXT1JLREFZUyIsNDczOiJHQ0QiLDQ3NDoiTVVMVElOT01JQUwiLDQ3NToiTENNIiw0NzY6IkZWU0NIRURVTEUiLDQ3NzoiQ1VCRUtQSU1FTUJFUiIsNDc4OiJDVUJFU0VUIiw0Nzk6IkNVQkVTRVRDT1VOVCIsNDgwOiJJRkVSUk9SIiw0ODE6IkNPVU5USUZTIiw0'@;
put 'ODI6IlNVTUlGUyIsNDgzOiJBVkVSQUdFSUYiLDQ4NDoiQVZFUkFHRUlGUyJ9LHR3PXsyOjEsMzoxLDEwOjAsMTU6MSwxNjoxLDE3OjEsMTg6MSwxOTowLDIwOjEsMjE6MSwyMjoxLDIzOjEsMjQ6MSwyNToxLDI2OjEsMjc6MiwzMDoyLDMxOjMsMzI6MSwzMzoxLDM0OjAsMzU6MCwzODoxLDM5'@;
put 'OjIsNDA6Myw0MTozLDQyOjMsNDM6Myw0NDozLDQ1OjMsNDc6Myw0ODoyLDUzOjEsNjE6Myw2MzowLDY1OjMsNjY6Myw2NzoxLDY4OjEsNjk6MSw3MDoxLDcxOjEsNzI6MSw3MzoxLDc0OjAsNzU6MSw3NjoxLDc3OjEsNzk6Miw4MDoyLDgzOjEsODU6MCw4NjoxLDg5OjAsOTA6MSw5NDowLDk1'@;
put 'OjAsOTc6Miw5ODoxLDk5OjEsMTAxOjMsMTAyOjMsMTA1OjEsMTA2OjEsMTA4OjIsMTExOjEsMTEyOjEsMTEzOjEsMTE0OjEsMTE3OjIsMTE4OjEsMTE5OjQsMTIxOjEsMTI2OjEsMTI3OjEsMTI4OjEsMTI5OjEsMTMwOjEsMTMxOjEsMTMzOjEsMTM0OjEsMTM1OjEsMTM2OjIsMTM3OjIsMTM4'@;
put 'OjIsMTQwOjEsMTQxOjEsMTQyOjMsMTQzOjQsMTQ0OjQsMTYxOjEsMTYyOjEsMTYzOjEsMTY0OjEsMTY1OjIsMTcyOjEsMTc1OjIsMTc2OjIsMTc3OjMsMTc4OjIsMTc5OjEsMTg0OjEsMTg2OjEsMTg5OjMsMTkwOjEsMTk1OjMsMTk2OjMsMTk3OjEsMTk4OjEsMTk5OjMsMjAxOjEsMjA3OjQs'@;
put 'MjEwOjMsMjExOjEsMjEyOjIsMjEzOjIsMjE0OjEsMjE1OjEsMjI1OjAsMjI5OjEsMjMwOjEsMjMxOjEsMjMyOjEsMjMzOjEsMjM0OjEsMjM1OjMsMjQ0OjEsMjQ3OjQsMjUyOjIsMjU3OjEsMjYxOjEsMjcxOjEsMjczOjQsMjc0OjIsMjc1OjIsMjc2OjIsMjc3OjMsMjc4OjMsMjc5OjEsMjgw'@;
put 'OjMsMjgxOjMsMjgyOjMsMjgzOjEsMjg0OjEsMjg1OjIsMjg2OjQsMjg3OjMsMjg4OjIsMjg5OjQsMjkwOjMsMjkxOjMsMjkyOjMsMjkzOjQsMjk0OjEsMjk1OjMsMjk2OjEsMjk3OjMsMjk4OjEsMjk5OjIsMzAwOjMsMzAxOjMsMzAyOjQsMzAzOjIsMzA0OjIsMzA1OjIsMzA2OjIsMzA3OjIs'@;
put 'MzA4OjIsMzA5OjMsMzEwOjIsMzExOjIsMzEyOjIsMzEzOjIsMzE0OjIsMzE1OjIsMzE2OjQsMzI1OjIsMzI2OjIsMzI3OjIsMzI4OjIsMzMxOjIsMzMyOjIsMzM3OjIsMzQyOjEsMzQzOjEsMzQ2OjIsMzQ3OjEsMzUwOjQsMzUxOjMsMzUyOjEsMzUzOjIsMzYwOjEsMzY4OjEsMzY5OjEsMzcw'@;
put 'OjEsMzcxOjEsMzcyOjEsMzczOjEsMzc0OjEsMzc1OjEsMzc2OjEsMzc3OjEsMzc4OjEsMzgyOjMsMzg1OjEsMzkyOjEsMzkzOjEsMzk2OjIsMzk3OjIsMzk4OjIsMzk5OjEsNDAwOjEsNDAxOjEsNDAyOjEsNDAzOjEsNDA0OjEsNDA1OjEsNDA2OjEsNDA3OjEsNDA4OjEsNDA5OjEsNDEwOjEs'@;
put 'NDE0OjQsNDE1OjEsNDE2OjEsNDE3OjIsNDIwOjEsNDIxOjEsNDIyOjIsNDI0OjEsNDI1OjIsNDI2OjIsNDI3OjIsNDI4OjIsNDMwOjMsNDM4OjMsNDM5OjMsNDQwOjMsNDQzOjIsNDQ0OjIsNDQ1OjIsNDQ2OjIsNDQ3OjYsNDQ4OjYsNDQ5OjIsNDUwOjIsNDY0OjIsNDY4OjMsNDc2OjIsNDc5'@;
put 'OjEsNDgwOjIsNjU1MzU6MH0sbmc9eyJfeGxmbi5BQ09UIjoiQUNPVCIsIl94bGZuLkFDT1RIIjoiQUNPVEgiLCJfeGxmbi5BR0dSRUdBVEUiOiJBR0dSRUdBVEUiLCJfeGxmbi5BUkFCSUMiOiJBUkFCSUMiLCJfeGxmbi5BVkVSQUdFSUYiOiJBVkVSQUdFSUYiLCJfeGxmbi5BVkVSQUdFSUZT'@;
put 'IjoiQVZFUkFHRUlGUyIsIl94bGZuLkJBU0UiOiJCQVNFIiwiX3hsZm4uQkVUQS5ESVNUIjoiQkVUQS5ESVNUIiwiX3hsZm4uQkVUQS5JTlYiOiJCRVRBLklOViIsIl94bGZuLkJJTk9NLkRJU1QiOiJCSU5PTS5ESVNUIiwiX3hsZm4uQklOT00uRElTVC5SQU5HRSI6IkJJTk9NLkRJU1QuUkFO'@;
put 'R0UiLCJfeGxmbi5CSU5PTS5JTlYiOiJCSU5PTS5JTlYiLCJfeGxmbi5CSVRBTkQiOiJCSVRBTkQiLCJfeGxmbi5CSVRMU0hJRlQiOiJCSVRMU0hJRlQiLCJfeGxmbi5CSVRPUiI6IkJJVE9SIiwiX3hsZm4uQklUUlNISUZUIjoiQklUUlNISUZUIiwiX3hsZm4uQklUWE9SIjoiQklUWE9SIiwi'@;
put 'X3hsZm4uQ0VJTElORy5NQVRIIjoiQ0VJTElORy5NQVRIIiwiX3hsZm4uQ0VJTElORy5QUkVDSVNFIjoiQ0VJTElORy5QUkVDSVNFIiwiX3hsZm4uQ0hJU1EuRElTVCI6IkNISVNRLkRJU1QiLCJfeGxmbi5DSElTUS5ESVNULlJUIjoiQ0hJU1EuRElTVC5SVCIsIl94bGZuLkNISVNRLklOViI6'@;
put 'IkNISVNRLklOViIsIl94bGZuLkNISVNRLklOVi5SVCI6IkNISVNRLklOVi5SVCIsIl94bGZuLkNISVNRLlRFU1QiOiJDSElTUS5URVNUIiwiX3hsZm4uQ09NQklOQSI6IkNPTUJJTkEiLCJfeGxmbi5DT05DQVQiOiJDT05DQVQiLCJfeGxmbi5DT05GSURFTkNFLk5PUk0iOiJDT05GSURFTkNF'@;
put 'Lk5PUk0iLCJfeGxmbi5DT05GSURFTkNFLlQiOiJDT05GSURFTkNFLlQiLCJfeGxmbi5DT1QiOiJDT1QiLCJfeGxmbi5DT1RIIjoiQ09USCIsIl94bGZuLkNPVU5USUZTIjoiQ09VTlRJRlMiLCJfeGxmbi5DT1ZBUklBTkNFLlAiOiJDT1ZBUklBTkNFLlAiLCJfeGxmbi5DT1ZBUklBTkNFLlMi'@;
put 'OiJDT1ZBUklBTkNFLlMiLCJfeGxmbi5DU0MiOiJDU0MiLCJfeGxmbi5DU0NIIjoiQ1NDSCIsIl94bGZuLkRBWVMiOiJEQVlTIiwiX3hsZm4uREVDSU1BTCI6IkRFQ0lNQUwiLCJfeGxmbi5FQ01BLkNFSUxJTkciOiJFQ01BLkNFSUxJTkciLCJfeGxmbi5FUkYuUFJFQ0lTRSI6IkVSRi5QUkVD'@;
put 'SVNFIiwiX3hsZm4uRVJGQy5QUkVDSVNFIjoiRVJGQy5QUkVDSVNFIiwiX3hsZm4uRVhQT04uRElTVCI6IkVYUE9OLkRJU1QiLCJfeGxmbi5GLkRJU1QiOiJGLkRJU1QiLCJfeGxmbi5GLkRJU1QuUlQiOiJGLkRJU1QuUlQiLCJfeGxmbi5GLklOViI6IkYuSU5WIiwiX3hsZm4uRi5JTlYuUlQi'@;
put 'OiJGLklOVi5SVCIsIl94bGZuLkYuVEVTVCI6IkYuVEVTVCIsIl94bGZuLkZJTFRFUlhNTCI6IkZJTFRFUlhNTCIsIl94bGZuLkZMT09SLk1BVEgiOiJGTE9PUi5NQVRIIiwiX3hsZm4uRkxPT1IuUFJFQ0lTRSI6IkZMT09SLlBSRUNJU0UiLCJfeGxmbi5GT1JFQ0FTVC5FVFMiOiJGT1JFQ0FT'@;
put 'VC5FVFMiLCJfeGxmbi5GT1JFQ0FTVC5FVFMuQ09ORklOVCI6IkZPUkVDQVNULkVUUy5DT05GSU5UIiwiX3hsZm4uRk9SRUNBU1QuRVRTLlNFQVNPTkFMSVRZIjoiRk9SRUNBU1QuRVRTLlNFQVNPTkFMSVRZIiwiX3hsZm4uRk9SRUNBU1QuRVRTLlNUQVQiOiJGT1JFQ0FTVC5FVFMuU1RBVCIs'@;
put 'Il94bGZuLkZPUkVDQVNULkxJTkVBUiI6IkZPUkVDQVNULkxJTkVBUiIsIl94bGZuLkZPUk1VTEFURVhUIjoiRk9STVVMQVRFWFQiLCJfeGxmbi5HQU1NQSI6IkdBTU1BIiwiX3hsZm4uR0FNTUEuRElTVCI6IkdBTU1BLkRJU1QiLCJfeGxmbi5HQU1NQS5JTlYiOiJHQU1NQS5JTlYiLCJfeGxm'@;
put 'bi5HQU1NQUxOLlBSRUNJU0UiOiJHQU1NQUxOLlBSRUNJU0UiLCJfeGxmbi5HQVVTUyI6IkdBVVNTIiwiX3hsZm4uSFlQR0VPTS5ESVNUIjoiSFlQR0VPTS5ESVNUIiwiX3hsZm4uSUZFUlJPUiI6IklGRVJST1IiLCJfeGxmbi5JRk5BIjoiSUZOQSIsIl94bGZuLklGUyI6IklGUyIsIl94bGZu'@;
put 'LklNQ09TSCI6IklNQ09TSCIsIl94bGZuLklNQ09UIjoiSU1DT1QiLCJfeGxmbi5JTUNTQyI6IklNQ1NDIiwiX3hsZm4uSU1DU0NIIjoiSU1DU0NIIiwiX3hsZm4uSU1TRUMiOiJJTVNFQyIsIl94bGZuLklNU0VDSCI6IklNU0VDSCIsIl94bGZuLklNU0lOSCI6IklNU0lOSCIsIl94bGZuLklN'@;
put 'VEFOIjoiSU1UQU4iLCJfeGxmbi5JU0ZPUk1VTEEiOiJJU0ZPUk1VTEEiLCJfeGxmbi5JU08uQ0VJTElORyI6IklTTy5DRUlMSU5HIiwiX3hsZm4uSVNPV0VFS05VTSI6IklTT1dFRUtOVU0iLCJfeGxmbi5MT0dOT1JNLkRJU1QiOiJMT0dOT1JNLkRJU1QiLCJfeGxmbi5MT0dOT1JNLklOViI6'@;
put 'IkxPR05PUk0uSU5WIiwiX3hsZm4uTUFYSUZTIjoiTUFYSUZTIiwiX3hsZm4uTUlOSUZTIjoiTUlOSUZTIiwiX3hsZm4uTU9ERS5NVUxUIjoiTU9ERS5NVUxUIiwiX3hsZm4uTU9ERS5TTkdMIjoiTU9ERS5TTkdMIiwiX3hsZm4uTVVOSVQiOiJNVU5JVCIsIl94bGZuLk5FR0JJTk9NLkRJU1Qi'@;
put 'OiJORUdCSU5PTS5ESVNUIiwiX3hsZm4uTkVUV09SS0RBWVMuSU5UTCI6Ik5FVFdPUktEQVlTLklOVEwiLCJfeGxmbi5OSUdCSU5PTSI6Ik5JR0JJTk9NIiwiX3hsZm4uTk9STS5ESVNUIjoiTk9STS5ESVNUIiwiX3hsZm4uTk9STS5JTlYiOiJOT1JNLklOViIsIl94bGZuLk5PUk0uUy5ESVNU'@;
put 'IjoiTk9STS5TLkRJU1QiLCJfeGxmbi5OT1JNLlMuSU5WIjoiTk9STS5TLklOViIsIl94bGZuLk5VTUJFUlZBTFVFIjoiTlVNQkVSVkFMVUUiLCJfeGxmbi5QRFVSQVRJT04iOiJQRFVSQVRJT04iLCJfeGxmbi5QRVJDRU5USUxFLkVYQyI6IlBFUkNFTlRJTEUuRVhDIiwiX3hsZm4uUEVSQ0VO'@;
put 'VElMRS5JTkMiOiJQRVJDRU5USUxFLklOQyIsIl94bGZuLlBFUkNFTlRSQU5LLkVYQyI6IlBFUkNFTlRSQU5LLkVYQyIsIl94bGZuLlBFUkNFTlRSQU5LLklOQyI6IlBFUkNFTlRSQU5LLklOQyIsIl94bGZuLlBFUk1VVEFUSU9OQSI6IlBFUk1VVEFUSU9OQSIsIl94bGZuLlBISSI6IlBISSIs'@;
put 'Il94bGZuLlBPSVNTT04uRElTVCI6IlBPSVNTT04uRElTVCIsIl94bGZuLlFVQVJUSUxFLkVYQyI6IlFVQVJUSUxFLkVYQyIsIl94bGZuLlFVQVJUSUxFLklOQyI6IlFVQVJUSUxFLklOQyIsIl94bGZuLlFVRVJZU1RSSU5HIjoiUVVFUllTVFJJTkciLCJfeGxmbi5SQU5LLkFWRyI6IlJBTksu'@;
put 'QVZHIiwiX3hsZm4uUkFOSy5FUSI6IlJBTksuRVEiLCJfeGxmbi5SUkkiOiJSUkkiLCJfeGxmbi5TRUMiOiJTRUMiLCJfeGxmbi5TRUNIIjoiU0VDSCIsIl94bGZuLlNIRUVUIjoiU0hFRVQiLCJfeGxmbi5TSEVFVFMiOiJTSEVFVFMiLCJfeGxmbi5TS0VXLlAiOiJTS0VXLlAiLCJfeGxmbi5T'@;
put 'VERFVi5QIjoiU1RERVYuUCIsIl94bGZuLlNUREVWLlMiOiJTVERFVi5TIiwiX3hsZm4uU1VNSUZTIjoiU1VNSUZTIiwiX3hsZm4uU1dJVENIIjoiU1dJVENIIiwiX3hsZm4uVC5ESVNUIjoiVC5ESVNUIiwiX3hsZm4uVC5ESVNULjJUIjoiVC5ESVNULjJUIiwiX3hsZm4uVC5ESVNULlJUIjoi'@;
put 'VC5ESVNULlJUIiwiX3hsZm4uVC5JTlYiOiJULklOViIsIl94bGZuLlQuSU5WLjJUIjoiVC5JTlYuMlQiLCJfeGxmbi5ULlRFU1QiOiJULlRFU1QiLCJfeGxmbi5URVhUSk9JTiI6IlRFWFRKT0lOIiwiX3hsZm4uVU5JQ0hBUiI6IlVOSUNIQVIiLCJfeGxmbi5VTklDT0RFIjoiVU5JQ09ERSIs'@;
put 'Il94bGZuLlZBUi5QIjoiVkFSLlAiLCJfeGxmbi5WQVIuUyI6IlZBUi5TIiwiX3hsZm4uV0VCU0VSVklDRSI6IldFQlNFUlZJQ0UiLCJfeGxmbi5XRUlCVUxMLkRJU1QiOiJXRUlCVUxMLkRJU1QiLCJfeGxmbi5XT1JLREFZLklOVEwiOiJXT1JLREFZLklOVEwiLCJfeGxmbi5YT1IiOiJYT1Ii'@;
put 'LCJfeGxmbi5aLlRFU1QiOiJaLlRFU1QifTtmdW5jdGlvbiBCQSh3KXtyZXR1cm4ib2Y6Ij09dy5zbGljZSgwLDMpJiYodz13LnNsaWNlKDMpKSw2MT09dy5jaGFyQ29kZUF0KDApJiY2MT09KHc9dy5zbGljZSgxKSkuY2hhckNvZGVBdCgwKSYmKHc9dy5zbGljZSgxKSksKHc9KHc9KHc9dy5y'@;
put 'ZXBsYWNlKC9DT01cLk1JQ1JPU09GVFwuL2csIiIpKS5yZXBsYWNlKC9cWygoPzpcLltBLVpdK1swLTldKykoPzo6XC5bQS1aXStbMC05XSspPylcXS9nLGZ1bmN0aW9uKFAsRCl7cmV0dXJuIEQucmVwbGFjZSgvXC4vZywiIil9KSkucmVwbGFjZSgvXFsuKCNbQS1aXSpbPyFdKVxdL2csIiQx'@;
put 'IikpLnJlcGxhY2UoL1s7fl0vZywiLCIpLnJlcGxhY2UoL1x8L2csIjsiKX1mdW5jdGlvbiBqQSh3KXtyZXR1cm4oIm9mOj0iK3cucmVwbGFjZShEXywiJDFbLiQyJDMkNCQ1XSIpLnJlcGxhY2UoL1xdOlxbL2csIjoiKSkucmVwbGFjZSgvOy9nLCJ8IikucmVwbGFjZSgvLC9nLCI7Iil9ZnVu'@;
put 'Y3Rpb24gbncodyl7dmFyIFA9dy5zcGxpdCgiOiIpO3JldHVybltQWzBdLnNwbGl0KCIuIilbMF0sUFswXS5zcGxpdCgiLiIpWzFdKyhQLmxlbmd0aD4xPyI6IisoUFsxXS5zcGxpdCgiLiIpWzFdfHxQWzFdLnNwbGl0KCIuIilbMF0pOiIiKV19ZnVuY3Rpb24gekEodyl7cmV0dXJuIHcucmVw'@;
put 'bGFjZSgvXC4vLCIhIil9dmFyIFo4PXt9LEZwPXt9O05pLldTPVsiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy93b3Jrc2hlZXQiLCJodHRwOi8vcHVybC5vY2xjLm9yZy9vb3htbC9vZmZpY2VEb2N1bWVudC9yZWxh'@;
put 'dGlvbnNoaXBzL3dvcmtzaGVldCJdO3ZhciBjMT10eXBlb2YgTWFwPCJ1IjtmdW5jdGlvbiBydyh3LFAsRCxlZSl7dmFyIG9lPTAsZ2U9dy5sZW5ndGg7aWYoZWUpe2lmKGMxP2VlLmhhcyhQKTpPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZWUsUCkpZm9yKHZhciBfZT1j'@;
put 'MT9lZS5nZXQoUCk6ZWVbUF07b2U8X2UubGVuZ3RoOysrb2UpaWYod1tfZVtvZV1dLnQ9PT1QJiYoIXdbX2Vbb2VdXS5yJiYhRHx8d1tfZVtvZV1dLnI9PUQpKXJldHVybiB3LkNvdW50KyssX2Vbb2VdfWVsc2UgZm9yKDtvZTxnZTsrK29lKWlmKHdbb2VdLnQ9PT1QJiYoIXdbb2VdLnImJiFE'@;
put 'fHx3W29lXS5yPT1EKSlyZXR1cm4gdy5Db3VudCsrLG9lO3JldHVybiB3W2dlXT17dDpQLHI6RH0sdy5Db3VudCsrLHcuVW5pcXVlKyssZWUmJihjMT8oZWUuaGFzKFApfHxlZS5zZXQoUCxbXSksZWUuZ2V0KFApLnB1c2goZ2UpKTooT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5j'@;
put 'YWxsKGVlLFApfHwoZWVbUF09W10pLGVlW1BdLnB1c2goZ2UpKSksZ2V9ZnVuY3Rpb24gdWQodyxQKXt2YXIgRD17bWluOncrMSxtYXg6dysxfSxlZT1fcztpZighUClyZXR1cm4gUDt2YXIgb2U9LTE7cmV0dXJuIFAuYXV0byYmKEQuYmVzdEZpdD0xLFAuYmVzdHdpZHRoJiYob2U9UC5iZXN0'@;
put 'd2lkdGgpLGRlbGV0ZSBQLmJlc3R3aWR0aCksbnVsbCE9UC53cHg/b2U9TTIoUC53cHgpOm51bGwhPVAud2NoP29lPVAud2NoOm51bGwhPVAud2lkdGgmJihELmN1c3RvbVdpZHRoPTEpLG9lPi0xPyhELndpZHRoPW9kKG9lKSxELmN1c3RvbVdpZHRoPTEpOm51bGwhPVAud2lkdGgmJihELndp'@;
put 'ZHRoPVAud2lkdGgpLFAuaGlkZGVuJiYoRC5oaWRkZW49ITApLEQuYmVzdEZpdCYmZGVsZXRlIEQuY3VzdG9tV2lkdGgsX3M9ZWUsbnVsbCE9UC5sZXZlbCYmKEQub3V0bGluZUxldmVsPUQubGV2ZWw9UC5sZXZlbCksbnVsbCE9UC5zdHlsZSYmKEQuc3R5bGU9UC5zdHlsZSksRH1mdW5jdGlv'@;
put 'biBWaSh3LFAsRCl7dmFyIGVlPUthKHdbIiFyZWYiXSksb2U9MCxnZT13WyIhbWVyZ2VzIl18fFtdLF9lPUFycmF5LmlzQXJyYXkodyk7ZTpmb3IodmFyIHZlPTA7dmU8PWVlLmUucjsrK3ZlKXtmb3IodmFyIE1lPTA7TWU8Z2UubGVuZ3RoOysrTWUpaWYoZ2VbTWVdLnMucjw9dmUmJnZlPD1n'@;
put 'ZVtNZV0uZS5yJiZnZVtNZV0ucy5jPD1EJiZEPD1nZVtNZV0uZS5jKWNvbnRpbnVlIGU7dmFyIGplPV9lPyh3W3ZlXXx8W10pW0RdOndbcGkoe3I6dmUsYzpEfSldO2lmKGplKXt2YXIgVWU9MTtpZihqZS5zJiYoVWU9djgoamUucykvZzguQ2FsaWJyaVsxMl18fDEpLGplLncpb2U9TWF0aC5t'@;
put 'YXgob2UsamUudy5sZW5ndGgqVWUpO2Vsc2Ugc3dpdGNoKGplLnQpe2Nhc2UiYiI6Y2FzZSJlIjpvZT1NYXRoLm1heChvZSw1KlVlKTticmVhaztjYXNlInMiOm9lPU1hdGgubWF4KG9lLGplLnYubGVuZ3RoKlVlKjEuMnwwKTticmVhaztjYXNlIm4iOlA2KGplLGplLnYpLG9lPU1hdGgubWF4'@;
put 'KG9lLFN0cmluZyhqZS53fHxqZS52KS5sZW5ndGgqVWUpO2JyZWFrO2Nhc2UiZCI6b2U9TWF0aC5tYXgob2UsOCpVZSl9fX1vZTwxJiYob2U9MSksUC5iZXN0d2lkdGg9b2V9ZnVuY3Rpb24gSTIodyxQKXtpZih3KXt2YXIgRD1bLjcsLjcsLjc1LC43NSwuMywuM107InhsbWwiPT1QJiYoRD1b'@;
put 'MSwxLDEsMSwuNSwuNV0pLG51bGw9PXcubGVmdCYmKHcubGVmdD1EWzBdKSxudWxsPT13LnJpZ2h0JiYody5yaWdodD1EWzFdKSxudWxsPT13LnRvcCYmKHcudG9wPURbMl0pLG51bGw9PXcuYm90dG9tJiYody5ib3R0b209RFszXSksbnVsbD09dy5oZWFkZXImJih3LmhlYWRlcj1EWzRdKSxu'@;
put 'dWxsPT13LmZvb3RlciYmKHcuZm9vdGVyPURbNV0pfX1mdW5jdGlvbiBqbyh3LFApe2Zvcih2YXIgRD1tdChQKSxlZT0wO2VlPHcubGVuZ3RoOysrZWUpe3ZhciBvZT0hMCxnZT13W2VlXTtpZihnZSYmRC5sZW5ndGg9PW10KGdlKS5sZW5ndGgmJihELmZvckVhY2goZnVuY3Rpb24oX2Upe2lm'@;
put 'KG9lKXtpZihudWxsPT09UFtfZV0hPShudWxsPT09Z2VbX2VdKSlyZXR1cm4gdm9pZChvZT0hMSk7aWYoIm9iamVjdCI9PXR5cGVvZiBQW19lXSlpZihbImNvbG9yIiwiZmdDb2xvciIsImJnQ29sb3IiXS5pbmRleE9mKF9lKT4tMSl7aWYoczEoUFtfZV0sZ2VbX2VdKSlyZXR1cm4gdm9pZChv'@;
put 'ZT0hMSl9ZWxzZXtpZighKFsibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIl0uaW5kZXhPZihfZSk+LTEpKXJldHVybiB2b2lkKG9lPSExKTtpZihoOChQW19lXSxnZVtfZV0pKXJldHVybiB2b2lkKG9lPSExKX1pZihQW19lXSE9Z2VbX2VdKXJldHVybiB2b2lkKG9lPSExKX19KSxvZSkp'@;
put 'cmV0dXJuIGVlfXJldHVybiB3W3cubGVuZ3RoXT1KdChQKSx3Lmxlbmd0aC0xfWZ1bmN0aW9uIHdjKHcsUCxELGVlKXt2YXIgb2U9ZWUucmV2c3NmW251bGwhPUQuej9ELno6IkdlbmVyYWwiXSxnZT02MCxfZT13Lmxlbmd0aDtpZihudWxsPT1vZSYmZWUuc3NmKWZvcig7Z2U8MzkyOysrZ2Up'@;
put 'aWYobnVsbD09ZWUuc3NmW2dlXSl7Uy5sb2FkKEQueixnZSksZWUuc3NmW2dlXT1ELnosZWUucmV2c3NmW0Quel09b2U9Z2U7YnJlYWt9dmFyIHZlPTAsTWU9MCxqZT0wLFVlPTA7aWYoZWUuY2VsbFN0eWxlcyl7aWYoRC5zKXtpZihlZS5Gb250cyl7RC5zLmNvbG9yfHwoRC5zLmNvbG9yPXt0'@;
put 'aGVtZToxLHJnYjoiMDAwMDAwIn0pO2Zvcih2YXIgWGU9KEQucy5ib2xkPzE6MCl8KEQucy5pdGFsaWM/MjowKXwoRC5zLnN0cmlrZT80OjApfChELnMuc2hhZG93Pzg6MCk7dmU8ZWUuRm9udHMubGVuZ3RoOysrdmUpe3ZhciBpdD1lZS5Gb250c1t2ZV07aWYobnVsbD09aXQuZm9udGhhc2gm'@;
put 'JihpdC5mb250aGFzaD0oaXQuYm9sZD8xOjApfChpdC5pdGFsaWM/MjowKXwoaXQuc3RyaWtlPzQ6MCl8KGl0LnNoYWRvdz84OjApKSwhKFhlIT1pdC5mb250aGFzaHx8ISFELnMuY29sb3IhPSEhaXQuY29sb3J8fEQucy52YWxpZ24hPWl0LnZhbGlnbnx8KEQucy5zenx8aXQuc3opJiYoRC5z'@;
put 'LnN6fHwxMikhPShpdC5zenx8MTIpfHxELnMubmFtZSYmRC5zLm5hbWUhPWl0Lm5hbWV8fChELnMudW5kZXJsaW5lfHwwKSE9KGl0LnVuZGVybGluZXx8MCl8fEQucy5jb2xvciYmczEoRC5zLmNvbG9yLGl0LmNvbG9yKSkpYnJlYWt9dmU9PWVlLkZvbnRzLmxlbmd0aCYmKGVlLkZvbnRzLnB1'@;
put 'c2goe3N6OkQucy5zenx8MTIsY29sb3I6RC5zLmNvbG9yfHx7dGhlbWU6MSxyZ2I6IjAwMDAwMCJ9LG5hbWU6RC5zLm5hbWV8fCJDYWxpYnJpIixmYW1pbHk6RC5zLmZhbWlseXx8MixzY2hlbWU6RC5zLnNjaGVtZSxib2xkOkQucy5ib2xkLGl0YWxpYzpELnMuaXRhbGljLHN0cmlrZTpELnMu'@;
put 'c3RyaWtlLHNoYWRvdzpELnMuc2hhZG93LHZhbGlnbjpELnMudmFsaWduLHVuZGVybGluZTpELnMudW5kZXJsaW5lfSksMT09ZWUuRm9udHMubGVuZ3RoJiZoZihlZS5Gb250c1swXSkpfWlmKGVlLkZpbGxzKXtmb3IoO01lPGVlLkZpbGxzLmxlbmd0aDsrK01lKXt2YXIgZnQ9ZWUuRmlsbHNb'@;
put 'TWVdO2lmKCEhRC5zLnN0b3BzPT0hIWZ0LnN0b3BzKXtpZihELnMuc3RvcHMpe2lmKEQucy5hbmdsZSE9ZnQuYW5nbGUpY29udGludWU7dmFyIE10PSEwO2lmKEQucy5zdG9wcy5mb3JFYWNoKGZ1bmN0aW9uKGt0LFR0KXtzMShrdCxmdC5zdG9wc1tUdF0pJiYoTXQ9ITEpLGt0LnYhPWZ0LnN0'@;
put 'b3BzW1R0XS52JiYoTXQ9ITEpfSksIU10KWNvbnRpbnVlfWVsc2V7aWYobnVsbD09RC5zLnBhdHRlcm5UeXBlJiZELnMuZmdDb2xvciYmKEQucy5wYXR0ZXJuVHlwZT0ic29saWQiKSxudWxsPT1ELnMucGF0dGVyblR5cGUpYnJlYWs7aWYoRC5zLnBhdHRlcm5UeXBlIT1mdC5wYXR0ZXJuVHlw'@;
put 'ZXx8czEoRC5zLmZnQ29sb3IsZnQuZmdDb2xvcil8fHMxKEQucy5iZ0NvbG9yLGZ0LmJnQ29sb3IpKWNvbnRpbnVlfWJyZWFrfX1pZihNZT09ZWUuRmlsbHMubGVuZ3RoKXt2YXIgdXQ9e307RC5zLnN0b3BzPyhudWxsIT1ELnMuYW5nbGUmJih1dC5hbmdsZT1ELnMuYW5nbGUpLHV0LnN0b3Bz'@;
put 'PVtdLEQucy5zdG9wcy5mb3JFYWNoKGZ1bmN0aW9uKGt0KXt1dC5zdG9wcy5wdXNoKEp0KGt0KSl9KSk6dXQ9e3BhdHRlcm5UeXBlOkQucy5wYXR0ZXJuVHlwZSxmZ0NvbG9yOkQucy5mZ0NvbG9yLGJnQ29sb3I6RC5zLmJnQ29sb3J9LGVlLkZpbGxzLnB1c2godXQpfX1pZihlZS5Cb3JkZXJz'@;
put 'KXtmb3IoO2plPGVlLkJvcmRlcnMubGVuZ3RoOysramUpe3ZhciB3dD1lZS5Cb3JkZXJzW2plXSxIdD0idG9wIjtpZihELnNbSHRdKXtpZighd3RbSHRdfHxELnNbSHRdLnN0eWxlIT13dFtIdF0uc3R5bGV8fHMxKEQuc1tIdF0uY29sb3Isd3RbSHRdLmNvbG9yKSljb250aW51ZX1lbHNlIGlm'@;
put 'KG51bGwhPXd0W0h0XSljb250aW51ZTtpZihELnNbSHQ9ImJvdHRvbSJdKXtpZighd3RbSHRdfHxELnNbSHRdLnN0eWxlIT13dFtIdF0uc3R5bGV8fHMxKEQuc1tIdF0uY29sb3Isd3RbSHRdLmNvbG9yKSljb250aW51ZX1lbHNlIGlmKG51bGwhPXd0W0h0XSljb250aW51ZTtpZihELnNbSHQ9'@;
put 'ImxlZnQiXSl7aWYoIXd0W0h0XXx8RC5zW0h0XS5zdHlsZSE9d3RbSHRdLnN0eWxlfHxzMShELnNbSHRdLmNvbG9yLHd0W0h0XS5jb2xvcikpY29udGludWV9ZWxzZSBpZihudWxsIT13dFtIdF0pY29udGludWU7aWYoRC5zW0h0PSJyaWdodCJdKXtpZighd3RbSHRdfHxELnNbSHRdLnN0eWxl'@;
put 'IT13dFtIdF0uc3R5bGV8fHMxKEQuc1tIdF0uY29sb3Isd3RbSHRdLmNvbG9yKSljb250aW51ZX1lbHNlIGlmKG51bGwhPXd0W0h0XSljb250aW51ZTticmVha31qZT09ZWUuQm9yZGVycy5sZW5ndGgmJmVlLkJvcmRlcnMucHVzaCh7dG9wOkQucy50b3AmJkp0KEQucy50b3ApfHx2b2lkIDAs'@;
put 'Ym90dG9tOkQucy5ib3R0b20mJkp0KEQucy5ib3R0b20pfHx2b2lkIDAsbGVmdDpELnMubGVmdCYmSnQoRC5zLmxlZnQpfHx2b2lkIDAscmlnaHQ6RC5zLnJpZ2h0JiZKdChELnMucmlnaHQpfHx2b2lkIDB9KX1pZihQJiZELnMuc3R5bGUmJiJOb3JtYWwiIT09RC5zLnN0eWxlKXtmb3IoVWU9'@;
put 'MTtVZTxQLmxlbmd0aCYmUFtVZV0ubmFtZSE9RC5zLnN0eWxlOysrVWUpO1VlPT1QLmxlbmd0aCYmUC5wdXNoKHtuYW1lOkQucy5zdHlsZSxudW1GbXRJZDpvZSxmb250SWQ6dmUsZmlsbElkOk1lLGJvcmRlcklkOmplfSl9fWZvcihnZT0wO2dlIT1fZTsrK2dlKWlmKHdbZ2VdLm51bUZtdElk'@;
put 'PT1vZSYmd1tnZV0uZm9udElkPT12ZSYmd1tnZV0uZmlsbElkPT1NZSYmd1tnZV0uYm9yZGVySWQ9PWplJiZ3W2dlXS54ZklkPT1VZSl7aWYoRC5zJiZELnMuYWxpZ25tZW50KXtpZighd1tnZV0uYWxpZ25tZW50KWNvbnRpbnVlO2lmKEQucy5hbGlnbm1lbnQuaG9yaXpvbnRhbCE9d1tnZV0u'@;
put 'YWxpZ25tZW50Lmhvcml6b250YWx8fEQucy5hbGlnbm1lbnQudmVydGljYWwhPXdbZ2VdLmFsaWdubWVudC52ZXJ0aWNhbHx8RC5zLmFsaWdubWVudC53cmFwVGV4dCE9d1tnZV0uYWxpZ25tZW50LndyYXBUZXh0fHxELnMuYWxpZ25tZW50LnNocmlua1RvRml0IT13W2dlXS5hbGlnbm1lbnQu'@;
put 'c2hyaW5rVG9GaXR8fEQucy5hbGlnbm1lbnQudGV4dFJvdGF0aW9uIT13W2dlXS5hbGlnbm1lbnQudGV4dFJvdGF0aW9ufHxELnMuYWxpZ25tZW50LmluZGVudCE9d1tnZV0uYWxpZ25tZW50LmluZGVudCljb250aW51ZX1lbHNlIGlmKHdbZ2VdLmFsaWdubWVudCljb250aW51ZTtpZihELnMp'@;
put 'e2lmKCEhRC5zLmhpZGRlbj09KCF3W2dlXS5wcm90ZWN0aW9ufHwhd1tnZV0ucHJvdGVjdGlvbi5oaWRkZW4pfHwhIUQucy5lZGl0YWJsZT09KCF3W2dlXS5wcm90ZWN0aW9ufHwhd1tnZV0ucHJvdGVjdGlvbi5lZGl0YWJsZSkpY29udGludWV9ZWxzZSBpZih3W2dlXS5wcm90ZWN0aW9uKWNv'@;
put 'bnRpbnVlO3JldHVybiBnZX19ZWxzZSBmb3IoZ2U9MDtnZSE9X2U7KytnZSlpZih3W2dlXS5udW1GbXRJZD09PW9lKXJldHVybiBnZTtyZXR1cm4gd1tfZV09e251bUZtdElkOm9lLGZvbnRJZDp2ZSxmaWxsSWQ6TWUsYm9yZGVySWQ6amUseGZJZDpVZSxhcHBseU51bWJlckZvcm1hdDoxfSx2'@;
put 'ZT4wJiYod1tfZV0uYXBwbHlGb250PTEpLE1lPjAmJih3W19lXS5hcHBseUZpbGw9MSksamU+MCYmKHdbX2VdLmFwcGx5Qm9yZGVyPTEpLCFQJiZELnMmJkQucy5zdHlsZSYmIk5vcm1hbCIhPUQucy5zdHlsZSYmKHdbX2VdLnN0eWxlPUQucy5zdHlsZSksRC5zJiZELnMuYWxpZ25tZW50JiYo'@;
put 'd1tfZV0uYWxpZ25tZW50PXt9LFsiaG9yaXpvbnRhbCIsInZlcnRpY2FsIiwid3JhcFRleHQiLCJzaHJpbmtUb0ZpdCIsImluZGVudCIsInRleHRSb3RhdGlvbiJdLmZvckVhY2goZnVuY3Rpb24oa3Qpe251bGwhPUQucy5hbGlnbm1lbnRba3RdJiYod1tfZV0uYWxpZ25tZW50W2t0XT1ELnMu'@;
put 'YWxpZ25tZW50W2t0XSl9KSksRC5zJiZELnMuaGlkZGVuJiYod1tfZV0ucHJvdGVjdGlvbnx8KHdbX2VdLnByb3RlY3Rpb249e30pLHdbX2VdLnByb3RlY3Rpb24uaGlkZGVuPSEwKSxELnMmJkQucy5lZGl0YWJsZSYmKHdbX2VdLnByb3RlY3Rpb258fCh3W19lXS5wcm90ZWN0aW9uPXt9KSx3'@;
put 'W19lXS5wcm90ZWN0aW9uLmVkaXRhYmxlPSEwKSxfZX1mdW5jdGlvbiBZOCh3LFAsRCxlZSxvZSxnZSxfZSx2ZSl7ImQiPT09dy50JiYic3RyaW5nIj09dHlwZW9mIHcudiYmKHcudj1QdCh3LnYpKTt0cnl7Z2UuY2VsbE5GJiYody56PVMuX3RhYmxlW1BdKX1jYXRjaChqZSl7aWYoZ2UuV1RG'@;
put 'KXRocm93IGplfWlmKCghZ2V8fCExIT09Z2UuY2VsbFRleHQpJiYieiIhPXcudCl0cnl7aWYobnVsbD09Uy5fdGFibGVbUF0mJlMubG9hZChmZVtQXXx8IkdlbmVyYWwiLFApLCJlIj09PXcudCl3Lnc9dy53fHxuYVt3LnZdO2Vsc2UgaWYoMD09PVApaWYoIm4iPT09dy50KXcudz0oMHx3LnYp'@;
put 'PT09dy52P1MuX2dlbmVyYWxfaW50KHcudik6Uy5fZ2VuZXJhbF9udW0ody52KTtlbHNlIGlmKCJkIj09PXcudCl7dmFyIE1lPXFlKHcudik7dy53PSgwfE1lKT09PU1lP1MuX2dlbmVyYWxfaW50KE1lKTpTLl9nZW5lcmFsX251bShNZSl9ZWxzZXtpZih2b2lkIDA9PT13LnYpcmV0dXJuIiI7'@;
put 'dy53PVMuX2dlbmVyYWwody52LEZwKX1lbHNlIHcudz1TLmZvcm1hdChQLCJkIj09PXcudD9xZSh3LnYpOncudixGcCl9Y2F0Y2goamUpe2lmKGdlLldURil0aHJvdyBqZX1pZihnZS5jZWxsU3R5bGVzJiZ2ZSl7aWYody5zPXt9LG51bGwhPUQmJnZlLkZpbGxzKXRyeXtOdCh3LnMsdmUuRmls'@;
put 'bHNbRF0pfWNhdGNoKGplKXtpZihnZS5XVEYpdGhyb3cgamV9aWYobnVsbCE9ZWUmJnZlLkZvbnRzKXRyeXtOdCh3LnMsdmUuRm9udHNbZWVdKX1jYXRjaChqZSl7aWYoZ2UuV1RGKXRocm93IGplfWlmKG51bGwhPW9lJiZ2ZS5Cb3JkZXJzKXRyeXtOdCh3LnMsdmUuQm9yZGVyc1tvZV0pfWNh'@;
put 'dGNoKGplKXtpZihnZS5XVEYpdGhyb3cgamV9fX1mdW5jdGlvbiByZyh3LFAsRCl7aWYodyYmd1siIXJlZiJdKXt2YXIgZWU9UGkod1siIXJlZiJdKTtpZihlZS5lLmM8ZWUucy5jfHxlZS5lLnI8ZWUucy5yKXRocm93IG5ldyBFcnJvcigiQmFkIHJhbmdlICgiK0QrIik6ICIrd1siIXJlZiJd'@;
put 'KX19dmFyIGl3PS88KD86XHc6KT9tZXJnZUNlbGwgcmVmPSJbQS1aMC05Ol0rIlxzKltcL10/Pi9nLGlnPS88KD86XHcrOik/c2hlZXREYXRhW14+XSo+KFtcc1xTXSopPFwvKD86XHcrOik/c2hlZXREYXRhPi8sVUE9LzwoPzpcdzopP2h5cGVybGluayBbXj5dKj4vZ20scGVlPS8iKFx3Kjpc'@;
put 'dyopIi8sb3c9LzwoPzpcdzopP2NvbFxiW14+XSpbXC9dPz4vZyxSMj0vPCg/Olx3Oik/Y29udHJvbFxiW14+XSpbXC9dPz4vZyxXOD0vPCg/Olx3Oik/YXV0b0ZpbHRlcltePl0qKFtcL118PihbXHNcU10qKTxcLyg/Olx3Oik/YXV0b0ZpbHRlcik+L2csYXc9LzwoPzpcdzopP3BhZ2VNYXJn'@;
put 'aW5zW14+XSpcLz4vZyxsdz0vPCg/Olx3Oik/c2hlZXRQclxiKD86W14+YS16XVtePl0qKT9cLz4vLGJOPS88KD86XHc6KT9zaGVldFByb3RlY3Rpb25cYig/OltePmEtel1bXj5dKik/XC8+LyxfTj0vPCg/Olx3Oik/c2hlZXRQcltePl0qKD86W1wvXXw+KFtcc1xTXSopPFwvKD86XHc6KT9z'@;
put 'aGVldFByKT4vLHdOPS88KD86XHc6KT9zaGVldFZpZXdzW14+XSooPzpbXC9dfD4oW1xzXFNdKik8XC8oPzpcdzopP3NoZWV0Vmlld3MpPi8sWkE9LzwoPzpcdys6KT9kYXRhVmFsaWRhdGlvbnNbXj5dKig/OltcL118PihbXHNcU10qPyk8XC8oPzpcdys6KT9kYXRhVmFsaWRhdGlvbnMpPi8s'@;
put 'Rzg9LzwoPzpcdys6KT9jb25kaXRpb25hbEZvcm1hdHRpbmdcYltePl0qKD86W1wvXXw+KFtcc1xTXSo/KTxcLyg/Olx3KzopP2NvbmRpdGlvbmFsRm9ybWF0dGluZyk+L2csTDI9LzwoPzpcdzopP3NoZWV0Rm9ybWF0UHJbXj5dKlwvPi8sc3c9LzwoPzpcdys6KT90YWJsZVBhcnRzLio/Pihb'@;
put 'XHNcU10qPyk8XC8oPzpcdys6KT90YWJsZVBhcnRzPi8sTnA9LzwoPzpcdzopP3BhZ2VTZXR1cFtePl0qXC8+LyxjZD0vPCg/Olx3Oik/cm93QnJlYWtzW14+XSooPzpbXC9dfD4oW1xzXFNdKik8XC8oPzpcdzopP3Jvd0JyZWFrcyk+LyxZQT0vPCg/Olx3Oik/Y29sQnJlYWtzW14+XSooPzpb'@;
put 'XC9dfD4oW1xzXFNdKik8XC8oPzpcdzopP2NvbEJyZWFrcyk+LyxtZWU9LzwoPzpcdzopP2hlYWRlckZvb3RlcltePl0qKD86W1wvXXw+KFtcc1xTXSopPFwvKD86XHc6KT9oZWFkZXJGb290ZXIpPi8sQ049LzwoPzpcdzopP3ByaW50T3B0aW9uc1xiW14+XC9dKlwvPi87dmFyIFdBPS88KD86'@;
put 'XHc6KT90YWJsZVBhcnRcYlteXC8+XSpbXC9dPz4vZztmdW5jdGlvbiAkOCh3LFAsRCxlZSl7dmFyIG9lPWNuKHcpO0QuU2hlZXRzW2VlXXx8KEQuU2hlZXRzW2VlXT17fSksb2UuY29kZU5hbWUmJihELlNoZWV0c1tlZV0uQ29kZU5hbWU9b2UuY29kZU5hbWUpfXZhciBLOD0vPCg/Olx3Oik/'@;
put 'dGFiQ29sb3JbXj5dKltcL10/Pi8sJEE9LzwoPzpcdzopP3BhZ2VTZXRVcFByW14+XSpbXC9dPz4vLEtBPS88KD86XHc6KT9vdXRsaW5lUHJbXj5dKltcL10/Pi8sU2U9e2Rpc3BsYXllZDoiYXNEaXNwbGF5ZWQiLGVuZDoiYXRFbmQiLG5vbmU6Im5vbmUifSx1dz13ZShTZSksU049e2Rpc3Bs'@;
put 'YXllZDoiZGlzcGxheWVkIixub25lOiJibGFuayIsZGFzaDoiZGFzaCIsIm4vYSI6Ik5BIn0sWEE9d2UoU04pLGVUPS88KD86XHc6KT9icmtbXj5dKlwvPi9nLGN3PVsib2JqZWN0cyIsInNjZW5hcmlvcyIsInNlbGVjdExvY2tlZENlbGxzIiwic2VsZWN0VW5sb2NrZWRDZWxscyJdLGZ3PVsi'@;
put 'Zm9ybWF0Q29sdW1ucyIsImZvcm1hdFJvd3MiLCJmb3JtYXRDZWxscyIsImluc2VydENvbHVtbnMiLCJpbnNlcnRSb3dzIiwiaW5zZXJ0SHlwZXJsaW5rcyIsImRlbGV0ZUNvbHVtbnMiLCJkZWxldGVSb3dzIiwic29ydCIsImF1dG9GaWx0ZXIiLCJwaXZvdFRhYmxlcyJdO2Z1bmN0aW9uIHJU'@;
put 'KHcpe3ZhciBQPXt9O3JldHVyblsibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIiwiaGVhZGVyIiwiZm9vdGVyIl0uZm9yRWFjaChmdW5jdGlvbihEKXt3W0RdJiYoUFtEXT1wYXJzZUZsb2F0KHdbRF0pKX0pLFB9dmFyIFg4PXtDdXN0b206ImN1c3RvbSIsRGF0ZToiZGF0ZSIsVGltZToi'@;
put 'dGltZSIsTGVuZ3RoOiJ0ZXh0TGVuZ3RoIixMaXN0OiJsaXN0IixEZWNpbWFsOiJkZWNpbWFsIixXaG9sZToid2hvbGUiLEFueToibm9uZSJ9LG9UPXdlKFg4KSxCcD17SU46ImJldHdlZW4iLE9UOiJub3RCZXR3ZWVuIixFUToiZXF1YWwiLE5FOiJub3RFcXVhbCIsR1Q6ImdyZWF0ZXJUaGFu'@;
put 'IixMVDoibGVzc1RoYW4iLEdFOiJncmVhdGVyVGhhbk9yRXF1YWwiLExFOiJsZXNzVGhhbk9yRXF1YWwifSxhVD13ZShCcCk7ZnVuY3Rpb24gbFQodyxQLEQpe3ZhciBlZT1bXSxvZT17fSxnZT0iIixfZT0hMSx2ZT0wLE1lPTA7cmV0dXJuIHcucmVwbGFjZShxdCxmdW5jdGlvbihqZSxVZSl7'@;
put 'dmFyIFhlPWNuKGplKTtzd2l0Y2goam4oWGVbMF0pKXtjYXNlIjxkYXRhVmFsaWRhdGlvbnMiOmNhc2UiPGRhdGFWYWxpZGF0aW9ucz4iOmNhc2UiPC9kYXRhVmFsaWRhdGlvbnM+IjpicmVhaztjYXNlIjxkYXRhVmFsaWRhdGlvbiI6b2U9e3Q6b1RbWGUudHlwZXx8Im5vbmUiXSxyZWY6KGdl'@;
put 'PVhlLnNxcmVmKT9nZS5pbmRleE9mKCIgIik+LTE/Z2U6UGkoZ2UpOiIifSxYZS5vcGVyYXRvciYmKG9lLm9wPWFUW1hlLm9wZXJhdG9yXSksb2UuYmxhbms9ISFYZS5hbGxvd0JsYW5rJiZfcihYZS5hbGxvd0JsYW5rKSwoIVhlLnNob3dJbnB1dE1lc3NhZ2V8fCFfcihYZS5zaG93SW5wdXRN'@;
put 'ZXNzYWdlKSkmJihvZS5pbnB1dD0hMSksWGUucHJvbXB0VGl0bGUmJigob2UuaW5wdXR8fChvZS5pbnB1dD17fSkpLnRpdGxlPUVyKFhlLnByb21wdFRpdGxlKSksWGUucHJvbXB0JiYoKG9lLmlucHV0fHwob2UuaW5wdXQ9e30pKS5tZXNzYWdlPUVyKFhlLnByb21wdCkpLCghWGUuc2hvd0Vy'@;
put 'cm9yTWVzc2FnZXx8IV9yKFhlLnNob3dFcnJvck1lc3NhZ2UpKSYmKG9lLmVycm9yPSExKSxYZS5lcnJvclRpdGxlJiYoKG9lLmVycm9yfHwob2UuZXJyb3I9e30pKS50aXRsZT1FcihYZS5lcnJvclRpdGxlKSksWGUuZXJyb3ImJigob2UuZXJyb3J8fChvZS5lcnJvcj17fSkpLm1lc3NhZ2U9'@;
put 'RXIoWGUuZXJyb3IpKSxvZS5lcnJvcj9vZS5lcnJvci5zdHlsZT1YZS5lcnJvclN0eWxlfHwic3RvcCI6WGUuZXJyb3JTdHlsZSYmKG9lLmVycm9yPXtzdHlsZTpYZS5lcnJvclN0eWxlfSksb2UudCYmZWUucHVzaChvZSk7YnJlYWs7Y2FzZSI8ZGF0YVZhbGlkYXRpb24vPiI6Y2FzZSI8L2Rh'@;
put 'dGFWYWxpZGF0aW9uPiI6YnJlYWs7Y2FzZSI8c3FyZWY+IjpNZT1VZStqZS5sZW5ndGg7YnJlYWs7Y2FzZSI8L3NxcmVmPiI6Z2U9dy5zbGljZShNZSxVZSksb2UucmVmPWdlP2dlLmluZGV4T2YoIiAiKT4tMT9nZTpQaShnZSk6IiI7YnJlYWs7Y2FzZSI8Zj4iOmNhc2UiPGZvcm11bGExIjpj'@;
put 'YXNlIjxmb3JtdWxhMT4iOmNhc2UiPGZvcm11bGEyIjpjYXNlIjxmb3JtdWxhMj4iOnZlPVVlK2plLmxlbmd0aDticmVhaztjYXNlIjwvZm9ybXVsYTE+IjpjYXNlIjwvZm9ybXVsYTI+IjppZihEKWJyZWFrO2Nhc2UiPC9mPiI6dmFyIGl0PUVyKEZpKHcuc2xpY2UodmUsVWUpKSk7c3dpdGNo'@;
put 'KG9lLnQpe2Nhc2UiTGlzdCI6aWYob2UubHx8b2UuZilicmVhaztpZigzND09aXQuY2hhckNvZGVBdCgwKSl7b2UubD1pdC5zbGljZSgxLC0xKS5zcGxpdCgiLCIpO2JyZWFrfWNhc2UiQ3VzdG9tIjpudWxsPT1vZS5mJiYob2UuZj1pdCk7YnJlYWs7Y2FzZSJEYXRlIjpjYXNlIkRlY2ltYWwi'@;
put 'OmNhc2UiTGVuZ3RoIjpjYXNlIlRpbWUiOmNhc2UiV2hvbGUiOm9lLm9wfHwob2Uub3A9IklOIiksbnVsbD09b2Uudj9vZS52PWlzTmFOKCtpdCk/aXQ6K2l0OihvZS5taW49b2UudixvZS5tYXg9aXNOYU4oK2l0KT9pdDoraXQsZGVsZXRlIG9lLnYpfWJyZWFrO2Nhc2UiPGV4dExzdCI6Y2Fz'@;
put 'ZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGV4dCI6X2U9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOl9lPSExO2JyZWFrO2RlZmF1bHQ6aWYoUCYmUC5XVEYmJiFfZSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK1hlWzBdKyIgaW4gZGF0YSB2YWxpZGF0aW9u'@;
put 'Iil9cmV0dXJuIGplfSksZWV9dmFyIG13PXtJTjoiY29udGFpbnNUZXh0IixPVDoibm90Q29udGFpbnNUZXh0IixTVDoiYmVnaW5zV2l0aCIsTkQ6ImVuZHNXaXRoIn0sc1Q9d2UobXcpLHVUPXtMTToibGFzdE1vbnRoIixMUzoibGFzdDdEYXlzIixMVzoibGFzdFdlZWsiLE5NOiJuZXh0TW9u'@;
put 'dGgiLE5XOiJuZXh0V2VlayIsVE06InRoaXNNb250aCIsVFc6InRoaXNXZWVrIixURDoidG9kYXkiLFRPOiJ0b21vcnJvdyIsWVM6Inllc3RlcmRheSJ9LFROPXdlKHVUKTtmdW5jdGlvbiBKOCh3KXt2YXIgUD17fTtyZXR1cm4gbnVsbCE9dy52YWwmJihpc05hTigrdy52YWwpP1AuZj13LnZh'@;
put 'bDpQLnY9K3cudmFsKSxQLnQ9dy50eXBlLFB9ZnVuY3Rpb24gUDIodyl7cmV0dXJuIE1yKCJjZnZvIixudWxsLHt0eXBlOncudCx2YWw6bnVsbCE9dy52P3cudjpCcih3LmYpfSl9ZnVuY3Rpb24gUTgodyxQLEQsZWUpe3ZhciBvZT1KOCh3KTtyZXR1cm4gb2UuY29sb3I9ZmgoUCxELGVlKSxv'@;
put 'ZX1mdW5jdGlvbiBjVCh3LFAsRCxlZSxvZSl7dmFyIGdlPSh3Lm1hdGNoKC9zcXJlZj0iKFtcdzokIF0qKSIvKXx8W10pWzFdO3JldHVybiBmdW5jdGlvbiBPTih3LFAsRCxlZSxvZSxnZSl7dmFyIF9lPSExLHZlPVtdLE1lPXtmOltdfSxqZT0wLFVlPTAsWGU9e2Nmdm9zOltdLGNvbG9yczpb'@;
put 'XX0saXQ9e30sZnQ9LTEsTXQ9MCx1dD0iIjtyZXR1cm4gdy5yZXBsYWNlKHF0LGZ1bmN0aW9uKHd0LEh0KXt2YXIga3Q9Y24od3QpO3N3aXRjaChqbihrdFswXSkpe2Nhc2UiPGNvbmRpdGlvbmFsRm9ybWF0dGluZyI6Y2FzZSI8L2NvbmRpdGlvbmFsRm9ybWF0dGluZz4iOmJyZWFrO2Nhc2Ui'@;
put 'PGNmUnVsZSI6Y2FzZSI8Y2ZSdWxlPiI6aWYoVWU9SHQsaXQ9a3QsTWU9e3JlZjpQLGY6W119LCF3dC5tYXRjaCgvXC8+LykpYnJlYWs7Y2FzZSI8L2NmUnVsZT4iOnN3aXRjaChpdC5keGZJZCYmb2UmJm9lLkRYRiYmKE1lLnM9b2UuRFhGWytpdC5keGZJZF0pLGl0LnR5cGUpe2Nhc2UiZHVw'@;
put 'bGljYXRlVmFsdWVzIjpNZS50PSJkdXAiO2JyZWFrO2Nhc2UidW5pcXVlVmFsdWVzIjpNZS50PSJ1bmlxdWUiO2JyZWFrO2Nhc2UiY29udGFpbnNCbGFua3MiOk1lLnQ9ImJsYW5rIixNZS52PSEwO2JyZWFrO2Nhc2Uibm90Q29udGFpbnNCbGFua3MiOk1lLnQ9ImJsYW5rIixNZS52PSExO2Jy'@;
put 'ZWFrO2Nhc2UiY29udGFpbnNFcnJvcnMiOk1lLnQ9ImVycm9yIixNZS52PSEwO2JyZWFrO2Nhc2Uibm90Q29udGFpbnNFcnJvcnMiOk1lLnQ9ImVycm9yIixNZS52PSExO2JyZWFrO2Nhc2UiY2VsbElzIjpzd2l0Y2goaXQub3BlcmF0b3Ipe2Nhc2UiY29udGFpbnNUZXh0IjpjYXNlIm5vdENv'@;
put 'bnRhaW5zIjpjYXNlImJlZ2luc1dpdGgiOmNhc2UiZW5kc1dpdGgiOmlmKE1lLnQ9InRleHQiLE1lLm9wPXNUW2l0Lm9wZXJhdG9yXSxudWxsPT1pdC50ZXh0KXRocm93IG5ldyBFcnJvcigiQ0YgVGV4dCBSdWxlICIrTWUub3ArIiBtaXNzaW5nIHRleHQiKTtNZS52PWl0LnRleHQsTWUuZj1N'@;
put 'ZS5mWzBdLG51bGw9PU1lLmYmJmRlbGV0ZSBNZS5mO2JyZWFrO2RlZmF1bHQ6TWUudD0idmFsIixNZS5vcD1hVFtpdC5vcGVyYXRvcl0sMT09TWUuZi5sZW5ndGg/aXNOYU4oK01lLmZbMF0pP01lLmY9TWUuZlswXTooTWUudj0rTWUuZlswXSxkZWxldGUgTWUuZik6KE1lLm1pbj1pc05hTigr'@;
put 'TWUuZlswXSk/TWUuZlswXTorTWUuZlswXSxNZS5tYXg9aXNOYU4oK01lLmZbMV0pP01lLmZbMV06K01lLmZbMV0sZGVsZXRlIE1lLmYpfWJyZWFrO2Nhc2UiZXhwcmVzc2lvbiI6TWUudD0iZm9ybXVsYSIsTWUuZj1NZS5mWzBdO2JyZWFrO2Nhc2UiY29udGFpbnNUZXh0IjpjYXNlIm5vdENv'@;
put 'bnRhaW5zVGV4dCI6Y2FzZSJiZWdpbnNXaXRoIjpjYXNlImVuZHNXaXRoIjppZihNZS50PSJ0ZXh0IixNZS5vcD1zVFtpdC50eXBlXSxudWxsPT1pdC50ZXh0JiZNZS5mLmxlbmd0aDwyKXRocm93IG5ldyBFcnJvcigiQ0YgVGV4dCBSdWxlICIrTWUub3ArIiBtaXNzaW5nIHRleHQiKTtNZS52'@;
put 'PW51bGwhPWl0LnRleHQ/aXQudGV4dDpNZS5mWzFdLm1hdGNoKC8iLioiLyk/TWUuZlsxXS5zbGljZSgxLC0xKTpNZS5mWzFdLE1lLmY9TWUuZlswXSxudWxsPT1NZS5mJiZkZWxldGUgTWUuZjticmVhaztjYXNlImNvbG9yU2NhbGUiOmlmKE1lLnQ9InNjYWxlIiwhTWUuY29sb3JTY2FsZSl0'@;
put 'aHJvdyBuZXcgRXJyb3IoIm1pc3NpbmcgY29sb3JTY2FsZSIpO01lLmNtaW49UTgoKFhlPU1lLmNvbG9yU2NhbGUpLmNmdm9zWzBdLFhlLmNvbG9yc1swXSxvZSxlZSksMz09WGUuY2Z2b3MubGVuZ3RoJiYoTWUuY21pZD1ROChYZS5jZnZvc1sxXSxYZS5jb2xvcnNbMV0sb2UsZWUpKSxNZS5j'@;
put 'bWF4PVE4KFhlLmNmdm9zW1hlLmNmdm9zLmxlbmd0aC0xXSxYZS5jb2xvcnNbWGUuY2Z2b3MubGVuZ3RoLTFdLG9lLGVlKTticmVhaztjYXNlImRhdGFCYXIiOmlmKE1lLnQ9ImJhciIsIU1lLmRhdGFCYXIpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nIGRhdGFCYXIiKTsoWGU9TWUuZGF0YUJh'@;
put 'cikuY29sb3JzWzBdJiYoTWUuY29sb3I9ZmgoWGUuY29sb3JzWzBdLG9lLGVlKSksTWUuY21pbj1KOChYZS5jZnZvc1swXSksTWUuY21heD1KOChYZS5jZnZvc1sxXSk7YnJlYWs7Y2FzZSJpY29uU2V0IjppZihNZS50PSJpY29uIiwhTWUuaWNvblNldCl0aHJvdyBuZXcgRXJyb3IoIm1pc3Np'@;
put 'bmcgaWNvblNldCIpO01lLnRocmVzaD0oWGU9TWUuaWNvblNldCkuY2Z2b3MubWFwKGZ1bmN0aW9uKFR0KXtyZXR1cm4gSjgoVHQpfSksTWUudj1YZS50YWcmJlhlLnRhZy5pY29uU2V0fHwiM1RyYWZmaWNMaWdodHMxIixNZS5yZXY9X3IoWGUudGFnLnJldmVyc2V8fCJmYWxzZSIpLE1lLnBj'@;
put 'dD1fcihYZS50YWcucGVyY2VudHx8InRydWUiKSxNZS5oaWRkZW49IV9yKFhlLnRhZy5zaG93VmFsdWV8fCJ0cnVlIik7YnJlYWs7Y2FzZSJ0aW1lUGVyaW9kIjpNZS50PSJkYXRlIixNZS5vcD1UTltpdC50aW1lUGVyaW9kXTticmVhaztjYXNlImFib3ZlQXZlcmFnZSI6TWUudD0iYXZnIixN'@;
put 'ZS5vcD0iMCI9PWl0LmFib3ZlQXZlcmFnZT8iTCI6IkciLE1lLm9wKz1pdC5zdGREZXY/aXQuc3RkRGV2Ol9yKGl0LmVxdWFsQXZlcmFnZXx8IjAiKT8iRSI6IlQiO2JyZWFrO2Nhc2UidG9wMTAiOk1lLnQ9InJhbmsiLE1lLm9wPShfcihpdC5ib3R0b218fCIwIik/IkIiOiJUIikrKF9yKGl0'@;
put 'LnBlcmNlbnR8fCIwIik/IlAiOiJWIiksTWUudj0raXQucmFuazticmVhaztkZWZhdWx0OnRocm93IlVuc3VwcG9ydGVkIENGIFR5cGUgIitpdC50eXBlfWlmKGRlbGV0ZSBNZS5jb2xvclNjYWxlLGRlbGV0ZSBNZS5kYXRhQmFyLGRlbGV0ZSBNZS5pY29uU2V0LCFNZS50KXRocm93IGNvbnNv'@;
put 'bGUubG9nKHcuc2xpY2UoVWUsSHQrd3QubGVuZ3RoKSksImJhZCBDRiBydWxlIjtudWxsIT1NZS5mJiYhTWUuZi5sZW5ndGgmJmRlbGV0ZSBNZS5mLE1lLmRlbHx8dmUucHVzaChNZSk7YnJlYWs7Y2FzZSI8Zm9ybXVsYSI6Y2FzZSI8Zm9ybXVsYT4iOmplPUh0K3d0Lmxlbmd0aDticmVhaztj'@;
put 'YXNlIjwvZm9ybXVsYT4iOk1lLmYucHVzaChFcih3LnNsaWNlKGplLEh0KSkpO2JyZWFrO2Nhc2UiPGYiOmNhc2UiPGY+IjpqZT1IdCt3dC5sZW5ndGg7YnJlYWs7Y2FzZSI8L2Y+IjpNZS5mLnB1c2goRXIody5zbGljZShqZSxIdCkpKTticmVhaztjYXNlIjxzcXJlZj4iOk10PUh0K3d0Lmxl'@;
put 'bmd0aDticmVhaztjYXNlIjwvc3FyZWY+Ijp1dD13LnNsaWNlKE10LEh0KSxQPXV0P3V0LmluZGV4T2YoIiAiKT4tMT91dDpQaSh1dCk6IiIsTWUucmVmPVAsdmUuZm9yRWFjaChmdW5jdGlvbihUdCl7VHQucmVmPVB9KTticmVhaztjYXNlIjxjb2xvclNjYWxlIjpjYXNlIjxjb2xvclNjYWxl'@;
put 'PiI6Y2FzZSI8ZGF0YUJhciI6Y2FzZSI8ZGF0YUJhcj4iOmNhc2UiPGljb25TZXQiOmNhc2UiPGljb25TZXQ+IjpYZT17Y2Z2b3M6W10sY29sb3JzOltdLHRhZzprdH0samU9SHQrd3QubGVuZ3RoO2JyZWFrO2Nhc2UiPC9jb2xvclNjYWxlPiI6TWUuY29sb3JTY2FsZT1YZTticmVhaztjYXNl'@;
put 'IjwvZGF0YUJhcj4iOk1lLmRhdGFCYXI9WGU7YnJlYWs7Y2FzZSI8L2ljb25TZXQ+IjpNZS5pY29uU2V0PVhlO2JyZWFrO2Nhc2UiPGNmdm8iOmNhc2UiPGNmdm8vPiI6WGUuY2Z2b3MucHVzaChrdCk7YnJlYWs7Y2FzZSI8L2Nmdm8+IjpicmVhaztjYXNlIjxjb2xvciI6WGUuY29sb3JzLnB1'@;
put 'c2goa3QpO2JyZWFrO2Nhc2UiPC9jb2xvcj4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGV4dCI6X2U9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOl9lPSExO2JyZWFrO2Nhc2UiPG5lZ2F0aXZlRmlsbENvbG9yIjpjYXNlIjxheGlzQ29s'@;
put 'b3IiOmNhc2UiPGJvcmRlckNvbG9yIjpjYXNlIjxuZWdhdGl2ZUJvcmRlckNvbG9yIjpjYXNlIjxjZkljb24iOk1lLmRlbD0hMDticmVhaztjYXNlIjxkeGY+IjpfZT0hMCxmdD1IdDticmVhaztjYXNlIjwvZHhmPiI6X2U9ITEsTWUucz1tSCh3LnNsaWNlKGZ0LEh0K3d0Lmxlbmd0aCksb2Us'@;
put 'ZWUsRCk7YnJlYWs7ZGVmYXVsdDppZihEJiZELldURil7aWYoZ2UpYnJlYWs7aWYoIV9lKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIra3RbMF0rIiBpbiBjb25kZm10Iil9fXJldHVybiB3dH0pLHZlfSh3LGdlLFAsRCxlZSxvZSl9dmFyIElOPS88KD86XHc6KT9zaGVldFZpZXco'@;
put 'PzpbXj5hLXpdW14+XSopP1wvPz4vZztmdW5jdGlvbiBhZyh3LFApe3ZhciBEPTAsZWU9MCxvZT0wLGdlPTA7aWYoIVB8fCFQLkNlbGxYZilyZXR1cm4gbnVsbDt2YXIgX2U9UC5DZWxsWGZbd107bnVsbCE9X2UmJihudWxsIT1fZS5udW1GbXRJZCYmKEQ9X2UubnVtRm10SWQpLG51bGwhPV9l'@;
put 'LmZpbGxJZCYmKGVlPV9lLmZpbGxJZCksbnVsbCE9X2UuZm9udElkJiYob2U9X2UuZm9udElkKSxudWxsIT1fZS5ib3JkZXJJZCYmKGdlPV9lLmJvcmRlcklkKSk7dmFyIHZlPXt0OiJ6In07dHJ5e1k4KHZlLEQsZWUsb2UsZ2Use1dURjoxLGNlbGxTdHlsZXM6ITB9LDAsUCl9Y2F0Y2h7fXJl'@;
put 'dHVybiB2ZS5zfWZ1bmN0aW9uIFJOKHcsUCxELGVlKXtpZih2b2lkIDA9PT13LnYmJnZvaWQgMD09PXcuZiYmbnVsbD09dy5zJiYhdy5jfHwieiI9PT13LnQmJiF3LmMmJiFlZS5zaGVldFN0dWJzKXJldHVybiIiO3ZhciBvZT0iIixnZT13LnQsX2U9dy52O2lmKCJ6IiE9PXcudClzd2l0Y2go'@;
put 'dy50KXtjYXNlImIiOm9lPXcudj8iMSI6IjAiO2JyZWFrO2Nhc2UibiI6b2U9IiIrdy52O2JyZWFrO2Nhc2UiZSI6b2U9bmFbdy52XTticmVhaztjYXNlImQiOmVlJiZlZS5jZWxsRGF0ZXM/b2U9UHQody52LC0xKS50b0lTT1N0cmluZygpOigodz1KdCh3KSkudD0ibiIsb2U9IiIrKHcudj1x'@;
put 'ZShQdCh3LnYpKSkpLHR5cGVvZiB3Lno+InUiJiYody56PVMuX3RhYmxlWzE0XSk7YnJlYWs7ZGVmYXVsdDpvZT13LnZ9dmFyIHZlPSJ6Ij09dy50PyIiOnZhKCJ2IixCcihvZSkpLE1lPXtyOlB9LGplPWVlP3djKGVlLmNlbGxYZnMsZWUuY2VsbFN0eWxlWGZzLHcsZWUpOjA7c3dpdGNoKDAh'@;
put 'PT1qZSYmKE1lLnM9amUpLHcudCl7Y2FzZSJuIjpjYXNlInoiOmJyZWFrO2Nhc2UiZCI6TWUudD0iZCI7YnJlYWs7Y2FzZSJiIjpNZS50PSJiIjticmVhaztjYXNlImUiOk1lLnQ9ImUiO2JyZWFrO2RlZmF1bHQ6aWYobnVsbD09dy52KXtkZWxldGUgdy50O2JyZWFrfWlmKGVlJiZlZS5ib29r'@;
put 'U1NUKXt2ZT12YSgidiIsIiIrcncoZWUuU3RyaW5ncyx3LnYsdy5SP3cucj13Mih3LlIpOm51bGwsZWUucmV2U3RyaW5ncykpLE1lLnQ9InMiO2JyZWFrfUFycmF5LmlzQXJyYXkody5SKT8odmU9Ijxpcz4iK3cyKHcuUikrIjwvaXM+IixNZS50PSJpbmxpbmVTdHIiKTpNZS50PSJzdHIifWlm'@;
put 'KHcudCE9Z2UmJih3LnQ9Z2Usdy52PV9lKSx3LmYpe3ZhciBVZT13LkYmJncuRi5zbGljZSgwLFAubGVuZ3RoKT09UD97dDoiYXJyYXkiLHJlZjp3LkZ9Om51bGw7dmU9TXIoImYiLEJyKHcuZiksVWUpKyhudWxsIT13LnY/dmU6IiIpfXJldHVybiB3LmwmJkRbIiFsaW5rcyJdLnB1c2goW1As'@;
put 'dy5sXSksdy5jJiZEWyIhY29tbWVudHMiXS5wdXNoKFtQLHcuY10pLE1yKCJjIix2ZSxNZSl9dmFyIExOPWZ1bmN0aW9uKCl7dmFyIHc9LzwoPzpcdys6KT9jWyBcLz5dLyxQPS88XC8oPzpcdys6KT9yb3c+LyxEPS9yPVsiJ10oW14iJ10qKVsiJ10vLGVlPS88KD86XHcrOik/aXM+KFtcU1xz'@;
put 'XSo/KTxcLyg/Olx3KzopP2lzPi8sb2U9L3JlZj1bIiddKFteIiddKilbIiddLyxnZT1ncygidiIpLF9lPWdzKCJmIik7cmV0dXJuIGZ1bmN0aW9uKE1lLGplLFVlLFhlLGl0LGZ0LE10KXtmb3IodmFyIGZuLEtuLGVyLHRyLHRpLHV0PTAsd3Q9IiIsSHQ9W10sa3Q9W10sVHQ9MCxZdD0wLGdu'@;
put 'PTAscW49IiIsem49MCxPbj0wLFluPTAsanI9MCxsaT0wLEVpPTAsSWk9QXJyYXkuaXNBcnJheShNdC5DZWxsWGYpLGZyPVtdLERuPVtdLHZyPUFycmF5LmlzQXJyYXkoVWUpLHJyPVtdLHhuPXt9LG1yPSExLENpPU1lLnNwbGl0KFApLHpyPSEhWGUuc2hlZXRTdHVicyx6aT0hIVhlLmNlbGxI'@;
put 'VE1MLHdvPSEoITE9PT1YZS5jZWxsVGV4dCYmIVhlLmNlbGxORiYmIVhlLmNlbGxTdHlsZXMpLE9pPTAsWG89Q2kubGVuZ3RoO09pIT1YbzsrK09pKXt2YXIgZm89KHd0PUNpW09pXS50cmltKCkpLmxlbmd0aDtpZigwIT09Zm8pe3ZhciBSbz0wO2U6Zm9yKHV0PTA7dXQ8Zm87Kyt1dClzd2l0'@;
put 'Y2god3RbdXRdKXtjYXNlIj4iOmlmKCIvIiE9d3RbdXQtMV0peysrdXQ7YnJlYWsgZX1YZS5jZWxsU3R5bGVzJiZudWxsIT0oS249Y24od3Quc2xpY2UoUm8sdXQpLCEwKSkuciYmcGFyc2VJbnQoS24uciwxMCkmJih6bj1wYXJzZUludChLbi5yLDEwKSx4bj17fSxtcj0hMSxLbi5odCYmKG1y'@;
put 'PSEwLHhuLmhwdD1wYXJzZUZsb2F0KEtuLmh0KSx4bi5ocHg9ZGYoeG4uaHB0KSksS24uZHlEZXNjZW50JiYobXI9ITAseG4uZHlEZXNjZW50PUtuLmR5RGVzY2VudCksIjEiPT1Lbi5oaWRkZW4mJihtcj0hMCx4bi5oaWRkZW49ITApLG51bGwhPUtuLm91dGxpbmVMZXZlbCYmKG1yPSEwLHhu'@;
put 'LmxldmVsPStLbi5vdXRsaW5lTGV2ZWwpLEtuLnMmJk10JiZNdC5DZWxsWGYmJihtcj0hMCx4bi5zPWFnKEtuLnMsTXQpKSxtciYmKHJyW3puLTFdPXhuKSk7YnJlYWs7Y2FzZSI8IjpSbz11dH1pZihSbz49dXQpYnJlYWs7aWYoem49bnVsbCE9KEtuPWNuKHd0LnNsaWNlKFJvLHV0KSwhMCkp'@;
put 'LnI/cGFyc2VJbnQoS24uciwxMCk6em4rMSxPbj0tMSwhKFhlLnNoZWV0Um93cyYmWGUuc2hlZXRSb3dzPHpuKSl7WGUubm9kaW18fChpdC5zLnI+em4tMSYmKGl0LnMucj16bi0xKSxpdC5lLnI8em4tMSYmKGl0LmUucj16bi0xKSk7dmFyIFRvPXt0OiJyb3ciLHJvdzpbXSxSOnpuLTEsaWR4'@;
put 'OmplfTtYZS5jZWxsU3R5bGVzJiYoeG49e30sbXI9ITEsS24uaHQmJihtcj0hMCx4bi5ocHQ9cGFyc2VGbG9hdChLbi5odCkseG4uaHB4PWRmKHhuLmhwdCkpLEtuLmR5RGVzY2VudCYmKG1yPSEwLHhuLmR5RGVzY2VudD1Lbi5keURlc2NlbnQpLCIxIj09S24uaGlkZGVuJiYobXI9ITAseG4u'@;
put 'aGlkZGVuPSEwKSxudWxsIT1Lbi5vdXRsaW5lTGV2ZWwmJihtcj0hMCx4bi5sZXZlbD0rS24ub3V0bGluZUxldmVsKSxLbi5zJiYobXI9ITAseG4ucz1hZyhLbi5zLE10KSksbXImJihYZS5jYWxsYmFjaz9Uby5wcm9wcz14bjpyclt6bi0xXT14bikpLEh0PXd0LnNsaWNlKHV0KS5zcGxpdCh3'@;
put 'KTtmb3IodmFyIG1pPTA7bWkhPUh0Lmxlbmd0aCYmIjwiPT1IdFttaV0udHJpbSgpLmNoYXJBdCgwKTsrK21pKTtmb3IoSHQ9SHQuc2xpY2UobWkpLHV0PTA7dXQhPUh0Lmxlbmd0aDsrK3V0KWlmKDAhPT0od3Q9SHRbdXRdLnRyaW0oKSkubGVuZ3RoKXtpZihrdD13dC5tYXRjaChEKSxUdD11'@;
put 'dCxZdD0wLGduPTAsd3Q9IjxjICIrKCI8Ij09d3Quc2xpY2UoMCwxKT8iPiI6IiIpK3d0LG51bGwhPWt0JiYyPT09a3QubGVuZ3RoKXtmb3IoVHQ9MCxxbj1rdFsxXSxZdD0wO1l0IT1xbi5sZW5ndGgmJiEoKGduPXFuLmNoYXJDb2RlQXQoWXQpLTY0KTwxfHxnbj4yNik7KytZdClUdD0yNipU'@;
put 'dCtnbjtPbj0tLVR0fWVsc2UrK09uO2ZvcihZdD0wO1l0IT13dC5sZW5ndGgmJjYyIT09d3QuY2hhckNvZGVBdChZdCk7KytZdCk7aWYoKytZdCwoS249Y24od3Quc2xpY2UoMCxZdCksITApKS5yfHwoS24ucj1waSh7cjp6bi0xLGM6T259KSksZm49e3Q6IiJ9LG51bGwhPShrdD0ocW49d3Qu'@;
put 'c2xpY2UoWXQpKS5tYXRjaChnZSkpJiYiIiE9PWt0WzFdJiYoZm4udj1FcihrdFsxXSkpLFhlLmNlbGxGb3JtdWxhKXtpZihudWxsIT0oa3Q9cW4ubWF0Y2goX2UpKSYmIiIhPT1rdFsxXSl7aWYoZm4uZj1FcihGaShrdFsxXSkpLnJlcGxhY2UoL1xyXG4vZywiXG4iKSxYZS54bGZufHwoZm4u'@;
put 'Zj1nZihmbi5mKSksa3RbMF0uaW5kZXhPZigndD0iYXJyYXkiJyk+LTEpZm4uRj0ocW4ubWF0Y2gob2UpfHxbXSlbMV0sZm4uRi5pbmRleE9mKCI6Iik+LTEmJmZyLnB1c2goW1BpKGZuLkYpLGZuLkZdKTtlbHNlIGlmKGt0WzBdLmluZGV4T2YoJ3Q9InNoYXJlZCInKT4tMSl7dHI9Y24oa3Rb'@;
put 'MF0pO3ZhciBybD1FcihGaShrdFsxXSkpO1hlLnhsZm58fChybD1nZihybCkpLERuW3BhcnNlSW50KHRyLnNpLDEwKV09W3RyLHJsLEtuLnJdfX1lbHNlKGt0PXFuLm1hdGNoKC88ZltePl0qXC8+LykpJiZEblsodHI9Y24oa3RbMF0pKS5zaV0mJihmbi5mPVdIKERuW3RyLnNpXVsxXSxEblt0'@;
put 'ci5zaV1bMl0sS24ucikpO3ZhciBBbj1jYShLbi5yKTtmb3IoWXQ9MDtZdDxmci5sZW5ndGg7KytZdClBbi5yPj1mcltZdF1bMF0ucy5yJiZBbi5yPD1mcltZdF1bMF0uZS5yJiZBbi5jPj1mcltZdF1bMF0ucy5jJiZBbi5jPD1mcltZdF1bMF0uZS5jJiYoZm4uRj1mcltZdF1bMV0pfWlmKG51'@;
put 'bGw9PUtuLnQmJnZvaWQgMD09PWZuLnYpaWYoZm4uZnx8Zm4uRilmbi52PTAsZm4udD0ibiI7ZWxzZXtpZighenIpY29udGludWU7Zm4udD0ieiJ9ZWxzZSBmbi50PUtuLnR8fCJuIjtzd2l0Y2goaXQucy5jPk9uJiYoaXQucy5jPU9uKSxpdC5lLmM8T24mJihpdC5lLmM9T24pLGZuLnQpe2Nh'@;
put 'c2UibiI6aWYoIiI9PWZuLnZ8fG51bGw9PWZuLnYpe2lmKCF6ciljb250aW51ZTtmbi50PSJ6In1lbHNlIGZuLnY9cGFyc2VGbG9hdChmbi52KTticmVhaztjYXNlInMiOmlmKHR5cGVvZiBmbi52PiJ1Iil7aWYoIXpyKWNvbnRpbnVlO2ZuLnQ9InoifWVsc2UgZXI9WjhbcGFyc2VJbnQoZm4u'@;
put 'diwxMCldLGZuLnY9ZXIudCxmbi5yPWVyLnIsZXIuUiYmKGZuLlI9ZXIuUiksemkmJihmbi5oPWVyLmgpO2JyZWFrO2Nhc2Uic3RyIjpmbi50PSJzIixmbi52PW51bGwhPWZuLnY/RmkoZm4udik6IiIsemkmJihmbi5oPWxvKGZuLnYpKTticmVhaztjYXNlImlubGluZVN0ciI6a3Q9cW4ubWF0'@;
put 'Y2goZWUpLGZuLnQ9InMiLG51bGwhPWt0JiYoZXI9ZF8oa3RbMV0pKT8oZm4udj1lci50LGVyLlImJihmbi5SPWVyLlIpLHppJiYoZm4uaD1lci5oKSk6Zm4udj0iIjticmVhaztjYXNlImIiOmZuLnY9X3IoZm4udik7YnJlYWs7Y2FzZSJkIjpYZS5jZWxsRGF0ZXM/Zm4udj1QdChmbi52LDEp'@;
put 'Oihmbi52PXFlKFB0KGZuLnYsMSkpLGZuLnQ9Im4iKTticmVhaztjYXNlImUiOiExIT09WGUuY2VsbFRleHQmJihmbi53PWZuLnYpLGZuLnY9cWxbZm4udl19aWYod28pe1luPWpyPWxpPUVpPTAsdGk9bnVsbCxJaSYmdm9pZCAwIT09S24ucyYmbnVsbCE9KHRpPU10LkNlbGxYZltLbi5zXSkm'@;
put 'JihudWxsIT10aS5udW1GbXRJZCYmKFluPXRpLm51bUZtdElkKSxYZS5jZWxsU3R5bGVzJiYobnVsbCE9dGkuZmlsbElkJiYoanI9dGkuZmlsbElkKSxudWxsIT10aS5mb250SWQmJihsaT10aS5mb250SWQpLG51bGwhPXRpLmJvcmRlcklkJiYoRWk9dGkuYm9yZGVySWQpKSk7dHJ5e1k4KGZu'@;
put 'LFluLGpyLGxpLEVpLFhlLDAsTXQpfWNhdGNoe31YZS5jZWxsU3R5bGVzJiZmbi5zJiYodGkmJnRpLmFsaWdubWVudCYmKGZuLnMuYWxpZ25tZW50PUp0KHRpLmFsaWdubWVudCkpLHRpJiZ0aS5wcm90ZWN0aW9uJiYobnVsbCE9dGkucHJvdGVjdGlvbi5oaWRkZW4mJihmbi5zLmhpZGRlbj10'@;
put 'aS5wcm90ZWN0aW9uLmhpZGRlbiksbnVsbCE9dGkucHJvdGVjdGlvbi5lZGl0YWJsZSYmKGZuLnMuZWRpdGFibGU9dGkucHJvdGVjdGlvbi5lZGl0YWJsZSkpLHRpJiZ0aS5zdHlsZSYmKGZuLnMuc3R5bGU9dGkuc3R5bGUpKSxYZS5jZWxsRGF0ZXMmJklpJiYibiI9PWZuLnQmJlMuaXNfZGF0'@;
put 'ZShTLl90YWJsZVtZbl0pJiYoZm4udD0iZCIsZm4udj1odChmbi52KSl9dmFyIEFhO1hlLm5vZGltJiYoQWE9Y2EoS24uciksaXQucy5yPkFhLnImJihpdC5zLnI9QWEuciksaXQuZS5yPEFhLnImJihpdC5lLnI9QWEucikpLFhlLmNhbGxiYWNrPyhBYT1jYShLbi5yKSxUby5yb3dbQWEuY109'@;
put 'Zm4pOnZyPyhVZVsoQWE9Y2EoS24ucikpLnJdfHwoVWVbQWEucl09W10pLFVlW0FhLnJdW0FhLmNdPWZuKTpVZVtLbi5yXT1mbn1YZS5jYWxsYmFjayYmWGUuY2FsbGJhY2soVG8pfX19enImJiFYZS5jYWxsYmFjayYmYWcoMCxNdCkscnIubGVuZ3RoPjAmJihVZVsiIXJvd3MiXT1ycil9fSgp'@;
put 'LGZUPU1yKCJ3b3Jrc2hlZXQiLG51bGwse3htbG5zOnNhLm1haW5bMF0sInhtbG5zOnIiOnNhLnIsInhtbG5zOngxNGFjIjoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2Uvc3ByZWFkc2hlZXRtbC8yMDA5LzkvYWMiLCJ4bWxuczptYyI6Imh0dHA6Ly9zY2hlbWFzLm9wZW54'@;
put 'bWxmb3JtYXRzLm9yZy9tYXJrdXAtY29tcGF0aWJpbGl0eS8yMDA2IiwibWM6SWdub3JhYmxlIjoieDE0YWMifSk7ZnVuY3Rpb24gRk4odyxQLEQsZWUpe3ZhciBfZSxvZT1bQm4sZlRdLHZlPSIiLE1lPUQuU2hlZXRzW0QuU2hlZXROYW1lc1t3XV07bnVsbD09TWUmJihNZT17fSk7dmFyIGpl'@;
put 'PU1lWyIhcmVmIl18fCJBMSIsVWU9UGkoamUpO2lmKFVlLmUuYz4xNjM4M3x8VWUuZS5yPjEwNDg1NzUpe2lmKFAuV1RGKXRocm93IG5ldyBFcnJvcigiUmFuZ2UgIitqZSsiIGV4Y2VlZHMgZm9ybWF0IGxpbWl0IEExOlhGRDEwNDg1NzYiKTtVZS5lLmM9TWF0aC5taW4oVWUuZS5jLDE2Mzgz'@;
put 'KSxVZS5lLnI9TWF0aC5taW4oVWUuZS5jLDEwNDg1NzUpLGplPVZvKFVlKX1lZXx8KGVlPXt9KSxNZVsiIWNvbW1lbnRzIl09W107dmFyIFhlPVtdLGl0PU1lWyIhcHJpbnQiXTtpZihmdW5jdGlvbiBxbyh3LFAsRCxlZSxvZSl7dmFyIGdlPSExLF9lPXt9LHZlPW51bGw7aWYoInhsc3giIT09'@;
put 'ZWUuYm9va1R5cGUmJlAudmJhcmF3KXt2YXIgTWU9UC5TaGVldE5hbWVzW0RdO3RyeXtQLldvcmtib29rJiYoTWU9UC5Xb3JrYm9vay5TaGVldHNbRF0uQ29kZU5hbWV8fE1lKX1jYXRjaHt9Z2U9ITAsX2UuY29kZU5hbWU9QnIoTWUpfXcmJndbIiFjb25kZm10Il0mJihfZS5lbmFibGVGb3Jt'@;
put 'YXRDb25kaXRpb25zQ2FsY3VsYXRpb249IjEiKSx3JiZ3WyIhdGFiY29sb3IiXSYmKHZlPSh2ZXx8IiIpKyc8dGFiQ29sb3IgcmdiPSJGRicrVWMod1siIXRhYmNvbG9yIl0ucmdiKSsnIi8+Jyk7dmFyIGplPSExLFVlPXt9O2lmKCgoKHd8fHt9KVsiIXByaW50Il18fHt9KS5wcm9wc3x8e30p'@;
put 'LmZpdCYmKGplPSEwLFVlLmZpdFRvUGFnZT0xKSxqZSYmKHZlPSh2ZXx8IiIpK01yKCJwYWdlU2V0VXBQciIsbnVsbCxVZSkpLHcmJndbIiFvdXRsaW5lIl0pe3ZhciBYZT17c3VtbWFyeUJlbG93OjEsc3VtbWFyeVJpZ2h0OjF9O3dbIiFvdXRsaW5lIl0uYWJvdmUmJihYZS5zdW1tYXJ5QmVs'@;
put 'b3c9MCksd1siIW91dGxpbmUiXS5sZWZ0JiYoWGUuc3VtbWFyeVJpZ2h0PTApLHZlPSh2ZXx8IiIpK01yKCJvdXRsaW5lUHIiLG51bGwsWGUpfSFnZSYmIXZlfHwob2Vbb2UubGVuZ3RoXT1Ncigic2hlZXRQciIsdmUsX2UpKX0oTWUsRCx3LFAsb2UpLG9lW29lLmxlbmd0aF09TXIoImRpbWVu'@;
put 'c2lvbiIsbnVsbCx7cmVmOmplfSksb2Vbb2UubGVuZ3RoXT1mdW5jdGlvbiBndyh3LFAsRCxlZSl7dmFyIG9lPXt3b3JrYm9va1ZpZXdJZDoiMCJ9O2lmKCgoKGVlfHx7fSkuV29ya2Jvb2t8fHt9KS5WaWV3c3x8W10pLmxlbmd0aCl7dmFyIGdlPWVlLldvcmtib29rLlZpZXdzLF9lPWdlW0Rd'@;
put 'fHxnZVswXTtvZS5yaWdodFRvTGVmdD1fZS5SVEw/IjEiOiIwIixfZS56b29tJiYob2Uuem9vbVNjYWxlPV9lLnpvb20pLG51bGwhPV9lLmdyaWQmJihvZS5zaG93R3JpZExpbmVzPV9lLmdyaWQpLF9lLnZpZXcmJihvZS52aWV3PV9lLnZpZXcpfW51bGwhPXdbIiFncmlkbGluZXMiXSYmKG9l'@;
put 'LnNob3dHcmlkTGluZXM9ISF3WyIhZ3JpZGxpbmVzIl0pO3ZhciB2ZT0iIixNZT17cjowLGM6MH07aWYod1siIXNlbCJdKXtpZighKE1lPXdbIiFzZWwiXS5jZWxsKSl7aWYoIXdbIiFzZWwiXS5yYW5nZSl0aHJvdyBuZXcgRXJyb3IoIk11c3Qgc3BlY2lmeSBhIHNlbGVjdGlvbiBjZWxsIG9y'@;
put 'IHJhbmdlIik7TWU9S2Eod1siIXNlbCJdLnJhbmdlLnJlcGxhY2UoL1xzLiokLywiIikpLnN9InN0cmluZyI9PXR5cGVvZiBNZSYmKE1lPWNhKE1lKSl9dmFyIFVlPXdbIiFmcmVlemUiXT8ic3RyaW5nIj09dHlwZW9mIHdbIiFmcmVlemUiXT9jYSh3WyIhZnJlZXplIl0pOndbIiFmcmVlemUi'@;
put 'XTp7YzowLHI6MH07aWYod1siIWZyZWV6ZSJdKXt2YXIgWGU9cGkoVWUpLGl0PXtzdGF0ZToiZnJvemVuIix4U3BsaXQ6VWUuYyx5U3BsaXQ6VWUucix0b3BMZWZ0Q2VsbDpYZX07d1siIXNlbCJdJiYoaXQuYWN0aXZlUGFuZT0oTWUucj49VWUuciYmVWUucj4wPyJib3R0b20iOiJ0b3AiKSso'@;
put 'TWUuYz49VWUuYyYmVWUuYz4wPyJSaWdodCI6IkxlZnQiKSksdmU9TXIoInBhbmUiLG51bGwsaXQpfWlmKHdbIiFzZWwiXSl7dmFyIGZ0PXthY3RpdmVDZWxsOiJzdHJpbmciPT10eXBlb2YgTWU/TWU6cGkoTWUpfTtmdC5zcXJlZj13WyIhc2VsIl0ucmFuZ2U/d1siIXNlbCJdLnJhbmdlOmZ0'@;
put 'LmFjdGl2ZUNlbGwrIjoiK2Z0LmFjdGl2ZUNlbGwsdmUrPU1yKCJzZWxlY3Rpb24iLG51bGwsZnQpLHdbIiFmcmVlemUiXSYmKFVlLmM+MCYmKGZ0LnBhbmU9InRvcFJpZ2h0Iix2ZSs9TXIoInNlbGVjdGlvbiIsbnVsbCxmdCkpLFVlLnI+MCYmKGZ0LnBhbmU9ImJvdHRvbUxlZnQiLHZlKz1N'@;
put 'cigic2VsZWN0aW9uIixudWxsLGZ0KSksVWUuYz4wJiZVZS5yPjAmJihmdC5wYW5lPSJib3R0b21SaWdodCIsdmUrPU1yKCJzZWxlY3Rpb24iLG51bGwsZnQpKSl9cmV0dXJuIE1yKCJzaGVldFZpZXdzIixNcigic2hlZXRWaWV3Iix2ZXx8bnVsbCxvZSkse30pfShNZSwwLHcsRCksUC5zaGVl'@;
put 'dEZvcm1hdCl7dmFyIGZ0PXtkZWZhdWx0Um93SGVpZ2h0OlAuc2hlZXRGb3JtYXQuZGVmYXVsdFJvd0hlaWdodHx8IjE2IixiYXNlQ29sV2lkdGg6UC5zaGVldEZvcm1hdC5iYXNlQ29sV2lkdGh8fCIxMCJ9O251bGwhPVAuc2hlZXRGb3JtYXQub3V0bGluZUxldmVsUm93JiYoZnQub3V0bGlu'@;
put 'ZUxldmVsUm93PVAuc2hlZXRGb3JtYXQub3V0bGluZUxldmVsUm93KSxvZVtvZS5sZW5ndGhdPU1yKCJzaGVldEZvcm1hdFByIixudWxsLGZ0KX1lbHNlIGlmKE1lWyIhc2hlZXRGb3JtYXQiXSl7dmFyIE10PXt9LHV0PSExO01lWyIhc2hlZXRGb3JtYXQiXS5yb3cmJihNZVsiIXNoZWV0Rm9y'@;
put 'bWF0Il0ucm93LmhwdD8odXQ9ITAsTXQuZGVmYXVsdFJvd0hlaWdodD1NZVsiIXNoZWV0Rm9ybWF0Il0ucm93LmhwdCxNdC5jdXN0b21IZWlnaHQ9MSk6TWVbIiFzaGVldEZvcm1hdCJdLnJvdy5ocHg/KHV0PSEwLE10LmRlZmF1bHRSb3dIZWlnaHQ9dWgoTWVbIiFzaGVldEZvcm1hdCJdLnJv'@;
put 'dy5ocHgpLE10LmN1c3RvbUhlaWdodD0xKTooMD09PU1lWyIhc2hlZXRGb3JtYXQiXS5yb3cuaHB0fHwwPT09TWVbIiFzaGVldEZvcm1hdCJdLnJvdy5ocHh8fE1lWyIhc2hlZXRGb3JtYXQiXS5yb3cuaGlkZGVuKSYmKHV0PSEwLE10LmRlZmF1bHRSb3dIZWlnaHQ9TXQuZGVmYXVsdFJvd0hl'@;
put 'aWdodHx8MTYsTXQuY3VzdG9tSGVpZ2h0PTEsTXQuemVyb0hlaWdodD0xKSxNZVsiIXNoZWV0Rm9ybWF0Il0uZHlEZXNjZW50JiYoTXRbIngxNGFjOmR5RGVzY2VudCJdPU1lWyIhc2hlZXRGb3JtYXQiXS5keURlc2NlbnQpKSxNZVsiIXNoZWV0Rm9ybWF0Il0uY29sJiYoTWVbIiFzaGVldEZv'@;
put 'cm1hdCJdLmNvbC53Y2h8fF9jKE1lWyIhc2hlZXRGb3JtYXQiXS5jb2wpLE10LmRlZmF1bHRDb2xXaWR0aD1NZVsiIXNoZWV0Rm9ybWF0Il0uY29sLndjaCs1L19zfHwwLHV0PSEwKSxudWxsPT1NdC5kZWZhdWx0Um93SGVpZ2h0JiYoTXQuZGVmYXVsdFJvd0hlaWdodD0xNiksbnVsbD09TXQu'@;
put 'ZGVmYXVsdENvbFdpZHRoJiYoTXQuZGVmYXVsdENvbFdpZHRoPTEwKSxNdC5vdXRsaW5lTGV2ZWxSb3c9TXQub3V0bGluZUxldmVsUm93fHw3LHV0JiYob2Vbb2UubGVuZ3RoXT1Ncigic2hlZXRGb3JtYXRQciIsbnVsbCxNdCkpfW51bGwhPU1lWyIhY29scyJdJiZNZVsiIWNvbHMiXS5sZW5n'@;
put 'dGg+MCYmKG9lW29lLmxlbmd0aF09ZnVuY3Rpb24gZHcodyxQLEQpe2Zvcih2YXIgb2UsZWU9WyI8Y29scz4iXSxnZT0wO2dlIT1QLmxlbmd0aDsrK2dlKWlmKG9lPVBbZ2VdKXtpZihvZS5hdXRvJiZWaSh3LG9lLGdlKSxvZS5zfHxvZS56KXt2YXIgX2U9e3Q6InoifTtudWxsIT1vZS5zJiYo'@;
put 'X2Uucz1vZS5zKSxudWxsIT1vZS56JiYoX2Uuej1vZS56KSxvZS5zdHlsZT13YyhELmNlbGxYZnMsRC5jZWxsU3R5bGVYZnMsX2UsRCl9ZWVbZWUubGVuZ3RoXT1NcigiY29sIixudWxsLHVkKGdlLG9lKSl9cmV0dXJuIGVlW2VlLmxlbmd0aF09IjwvY29scz4iLGVlLmpvaW4oIiIpfShNZSxN'@;
put 'ZVsiIWNvbHMiXSxQKSksb2VbX2U9b2UubGVuZ3RoXT0iPHNoZWV0RGF0YS8+IixNZVsiIWxpbmtzIl09W10sbnVsbCE9TWVbIiFyZWYiXSYmKHZlPWZ1bmN0aW9uIFBOKHcsUCxELGVlKXt2YXIgTWUsd3Qsb2U9W10sZ2U9W10sX2U9UGkod1siIXJlZiJdKSx2ZT0iIixqZT0iIixVZT1bXSxY'@;
put 'ZT0wLGl0PTAsZnQ9d1siIXJvd3MiXSxNdD1BcnJheS5pc0FycmF5KHcpLHV0PXtyOmplfSxIdD0tMTtmb3IoaXQ9X2Uucy5jO2l0PD1fZS5lLmM7KytpdClVZVtpdF09QmEoaXQpO2ZvcihYZT1fZS5zLnI7WGU8PV9lLmUucjsrK1hlKXtmb3IoZ2U9W10samU9VmEoWGUpLGl0PV9lLnMuYztp'@;
put 'dDw9X2UuZS5jOysraXQpe01lPVVlW2l0XStqZTt2YXIga3Q9TXQ/KHdbWGVdfHxbXSlbaXRdOndbTWVdO3ZvaWQgMCE9PWt0JiZudWxsIT0odmU9Uk4oa3QsTWUsdyxQKSkmJmdlLnB1c2godmUpfShnZS5sZW5ndGg+MHx8ZnQmJmZ0W1hlXSkmJih1dD17cjpqZX0sZnQmJmZ0W1hlXSYmKCh3'@;
put 'dD1mdFtYZV0pLmhpZGRlbiYmKHV0LmhpZGRlbj0xKSxIdD0tMSx3dC5ocHg/SHQ9dWgod3QuaHB4KTp3dC5ocHQmJihIdD13dC5ocHQpLEh0Pi0xJiYodXQuaHQ9SHQsdXQuY3VzdG9tSGVpZ2h0PTEpLHd0LmxldmVsJiYodXQub3V0bGluZUxldmVsPXd0LmxldmVsKSx3dC5keURlc2NlbnQm'@;
put 'Jih1dFsieDE0YWM6ZHlEZXNjZW50Il09d3QuZHlEZXNjZW50KSx3dC5zJiYodXQucz13YyhQLmNlbGxYZnMsUC5jZWxsU3R5bGVYZnMse3Q6InoiLHM6d3Quc30sUCksdXQuY3VzdG9tRm9ybWF0PTEpKSxvZVtvZS5sZW5ndGhdPU1yKCJyb3ciLGdlLmpvaW4oIiIpLHV0KSl9aWYoZnQpZm9y'@;
put 'KDtYZTxmdC5sZW5ndGg7KytYZSlmdCYmZnRbWGVdJiYodXQ9e3I6WGUrMX0sKHd0PWZ0W1hlXSkuaGlkZGVuJiYodXQuaGlkZGVuPTEpLEh0PS0xLHd0LmhweD9IdD11aCh3dC5ocHgpOnd0LmhwdCYmKEh0PXd0LmhwdCksSHQ+LTEmJih1dC5odD1IdCx1dC5jdXN0b21IZWlnaHQ9MSksd3Qu'@;
put 'bGV2ZWwmJih1dC5vdXRsaW5lTGV2ZWw9d3QubGV2ZWwpLG9lW29lLmxlbmd0aF09TXIoInJvdyIsIiIsdXQpKTtyZXR1cm4gb2Uuam9pbigiIil9KE1lLFApLHZlLmxlbmd0aD4wJiYob2Vbb2UubGVuZ3RoXT12ZSkpLG9lLmxlbmd0aD5fZSsxJiYob2Vbb2UubGVuZ3RoXT0iPC9zaGVldERh'@;
put 'dGE+IixvZVtfZV09b2VbX2VdLnJlcGxhY2UoIi8+IiwiPiIpKSxNZVsiIXByb3RlY3QiXSYmKG9lW29lLmxlbmd0aF09ZnVuY3Rpb24gQWwodyl7dmFyIFA9e3NoZWV0OjF9O3JldHVybiBjdy5mb3JFYWNoKGZ1bmN0aW9uKEQpe251bGwhPXdbRF0mJndbRF0mJihQW0RdPSIxIil9KSxmdy5m'@;
put 'b3JFYWNoKGZ1bmN0aW9uKEQpe251bGwhPXdbRF0mJiF3W0RdJiYoUFtEXT0iMCIpfSksdy5wYXNzd29yZD9QLnBhc3N3b3JkPVZ4KHcucGFzc3dvcmQpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpOncuZW5jcnlwdGlvbiYmKFAuYWxnb3JpdGhtTmFtZT13LmVuY3J5cHRpb24uYWxnbyxQ'@;
put 'Lmhhc2hWYWx1ZT13LmVuY3J5cHRpb24uaGFzaCxQLnNhbHRWYWx1ZT13LmVuY3J5cHRpb24uc2FsdCxQLnNwaW5Db3VudD13LmVuY3J5cHRpb24uc3BpbiksTXIoInNoZWV0UHJvdGVjdGlvbiIsbnVsbCxQKX0oTWVbIiFwcm90ZWN0Il0pKSxudWxsIT1NZVsiIWF1dG9maWx0ZXIiXSYmKG9l'@;
put 'W29lLmxlbmd0aF09ZnVuY3Rpb24gaVQodyxQLEQsZWUpe3ZhciBvZT0ic3RyaW5nIj09dHlwZW9mIHcucmVmP3cucmVmOlZvKHcucmVmKTtELldvcmtib29rfHwoRC5Xb3JrYm9vaz17U2hlZXRzOltdfSksRC5Xb3JrYm9vay5OYW1lc3x8KEQuV29ya2Jvb2suTmFtZXM9W10pO3ZhciBnZT1E'@;
put 'Lldvcmtib29rLk5hbWVzLF9lPUthKG9lKTtfZS5zLnI9PV9lLmUuciYmKF9lLmUucj1LYShQWyIhcmVmIl0pLmUucixvZT1WbyhfZSkpO2Zvcih2YXIgdmU9MDt2ZTxnZS5sZW5ndGg7Kyt2ZSl7dmFyIE1lPWdlW3ZlXTtpZigiX3hsbm0uX0ZpbHRlckRhdGFiYXNlIj09TWUuTmFtZSYmTWUu'@;
put 'U2hlZXQ9PWVlKXtNZS5SZWY9IiciK0QuU2hlZXROYW1lc1tlZV0rIichIitvZTticmVha319cmV0dXJuIHZlPT1nZS5sZW5ndGgmJmdlLnB1c2goe05hbWU6Il94bG5tLl9GaWx0ZXJEYXRhYmFzZSIsU2hlZXQ6ZWUsUmVmOiInIitELlNoZWV0TmFtZXNbZWVdKyInISIrb2V9KSxNcigiYXV0'@;
put 'b0ZpbHRlciIsbnVsbCx7cmVmOm9lfSl9KE1lWyIhYXV0b2ZpbHRlciJdLE1lLEQsdykpLG51bGwhPU1lWyIhbWVyZ2VzIl0mJk1lWyIhbWVyZ2VzIl0ubGVuZ3RoPjAmJihvZVtvZS5sZW5ndGhdPWZ1bmN0aW9uIHllZSh3KXtpZigwPT09dy5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBQPSc8'@;
put 'bWVyZ2VDZWxscyBjb3VudD0iJyt3Lmxlbmd0aCsnIj4nLEQ9MDtEIT13Lmxlbmd0aDsrK0QpUCs9JzxtZXJnZUNlbGwgcmVmPSInK1ZvKHdbRF0pKyciLz4nO3JldHVybiBQKyI8L21lcmdlQ2VsbHM+In0oTWVbIiFtZXJnZXMiXSkpLE1lWyIhY29uZGZtdCJdJiYob2Vbb2UubGVuZ3RoXT1m'@;
put 'dW5jdGlvbiBETih3LFApe3JldHVybiB3Lm1hcChmdW5jdGlvbihELGVlKXtyZXR1cm4gZnVuY3Rpb24gWmModyxQLEQpe3ZhciBlZT13LnM/am8oRC5EWEYsdy5zKTotMSxvZT0ic3RyaW5nIj09dHlwZW9mIHcucmVmP3cucmVmOlZvKHcucmVmKSxfZT1QaShvZS5yZXBsYWNlKC9ccy4qJC8s'@;
put 'IiIpKS5zO19lLnI8MCYmKF9lLnI9MCksX2UuYzwwJiYoX2UuYz0wKTt2YXIgdmU9IiIsTWU9e3ByaW9yaXR5OlArMX07c3dpdGNoKGVlPi0xJiYoTWUuZHhmSWQ9ZWUpLHcudCl7Y2FzZSJ1bmlxdWUiOk1lLnR5cGU9InVuaXF1ZVZhbHVlcyI7YnJlYWs7Y2FzZSJkdXAiOk1lLnR5cGU9ImR1'@;
put 'cGxpY2F0ZVZhbHVlcyI7YnJlYWs7Y2FzZSJibGFuayI6TWUudHlwZT0ody52PyJjIjoibm90QyIpKyJvbnRhaW5zQmxhbmtzIix2ZT0iPGZvcm11bGE+TEVOKFRSSU0oIitwaShfZSkrIikpIisody52PyI9IjoiJmd0OyIpKyIwPC9mb3JtdWxhPiI7YnJlYWs7Y2FzZSJlcnJvciI6TWUudHlw'@;
put 'ZT0ody52PyJjIjoibm90QyIpKyJvbnRhaW5zRXJyb3JzIjticmVhaztjYXNlImZvcm11bGEiOk1lLnR5cGU9ImV4cHJlc3Npb24iLHZlPU1yKCJmb3JtdWxhIixCcih3LmYpLHt9KTticmVhaztjYXNlImRhdGUiOk1lLnR5cGU9InRpbWVQZXJpb2QiLE1lLnRpbWVQZXJpb2Q9dVRbdy5vcF07'@;
put 'YnJlYWs7Y2FzZSJ0ZXh0Ijpzd2l0Y2goTWUudHlwZT1NZS5vcGVyYXRvcj1td1t3Lm9wXSxNZS50ZXh0PXcudix3Lm9wKXtjYXNlIklOIjp2ZT0nPGZvcm11bGE+Tk9UKElTRVJST1IoU0VBUkNIKCInK0JyKHcudikrJyIsJytwaShfZSkrIikpKTwvZm9ybXVsYT4iO2JyZWFrO2Nhc2UiT1Qi'@;
put 'OnZlPSc8Zm9ybXVsYT5JU0VSUk9SKFNFQVJDSCgiJytCcih3LnYpKyciLCcrcGkoX2UpKyIpKTwvZm9ybXVsYT4iO2JyZWFrO2Nhc2UiU1QiOnZlPSI8Zm9ybXVsYT5MRUZUKCIrcGkoX2UpKycsTEVOKCInK0JyKHcudikrJyIpKT0iJytCcih3LnYpKyciPC9mb3JtdWxhPic7YnJlYWs7Y2Fz'@;
put 'ZSJORCI6dmU9Ijxmb3JtdWxhPlJJR0hUKCIrcGkoX2UpKycsTEVOKCInK0JyKHcudikrJyIpKT0iJytCcih3LnYpKyciPC9mb3JtdWxhPid9YnJlYWs7Y2FzZSJ2YWwiOk1lLnR5cGU9ImNlbGxJcyIsTWUub3BlcmF0b3I9QnBbdy5vcF0sdmU9bnVsbCE9dy5taW4/TXIoImZvcm11bGEiLEJy'@;
put 'KFN0cmluZyh3Lm1pbikpLHt9KStNcigiZm9ybXVsYSIsQnIoU3RyaW5nKHcubWF4KSkse30pOk1yKCJmb3JtdWxhIixCcihudWxsIT13LnY/U3RyaW5nKCJzdHJpbmciPT10eXBlb2Ygdy52PyciJyt3LnYucmVwbGFjZSgvIi9nLCciIicpKyciJzp3LnYpOncuZikse30pO2JyZWFrO2Nhc2Ui'@;
put 'YXZnIjpzd2l0Y2goTWUudHlwZT0iYWJvdmVBdmVyYWdlIixNZS5hYm92ZUF2ZXJhZ2U9IkwiPT13Lm9wLmNoYXJBdCgwKT8iMCI6IjEiLHcub3AuY2hhckF0KDEpKXtjYXNlIlQiOk1lLmVxdWFsQXZlcmFnZT0iMCI7YnJlYWs7Y2FzZSJFIjpNZS5lcXVhbEF2ZXJhZ2U9IjEiO2JyZWFrO2Rl'@;
put 'ZmF1bHQ6TWUuc3RkRGV2PXcub3AuY2hhckF0KDEpfWJyZWFrO2Nhc2UicmFuayI6TWUudHlwZT0idG9wMTAiLE1lLmJvdHRvbT0iQiI9PXcub3AuY2hhckF0KDApPyIxIjoiMCIsTWUucGVyY2VudD0iUCI9PXcub3AuY2hhckF0KDEpPyIxIjoiMCIsTWUucmFuaz13LnY7YnJlYWs7Y2FzZSJp'@;
put 'Y29uIjpNZS50eXBlPSJpY29uU2V0Ijt2YXIgamU9e2ljb25TZXQ6dy52LHBlcmNlbnQ6dy5wY3Q/InRydWUiOiJmYWxzZSJ9O3cucmV2JiYoamUucmV2ZXJzZT0idHJ1ZSIpLHcuaGlkZGVuJiYoamUuc2hvd1ZhbHVlPSJmYWxzZSIpLHZlPU1yKCJpY29uU2V0Iix3LnRocmVzaC5tYXAoUDIp'@;
put 'LmpvaW4oIiIpLGplKTticmVhaztjYXNlInNjYWxlIjpNZS50eXBlPSJjb2xvclNjYWxlIix2ZSs9UDIody5jbWluKSx3LmNtaWQmJih2ZSs9UDIody5jbWlkKSksdmUrPVAyKHcuY21heCksdmUrPWxkKHcuY21pbi5jb2xvciksdy5jbWlkJiYodmUrPWxkKHcuY21pZC5jb2xvcikpLHZlPU1y'@;
put 'KCJjb2xvclNjYWxlIix2ZSs9bGQody5jbWF4LmNvbG9yKSx7fSk7YnJlYWs7Y2FzZSJiYXIiOk1lLnR5cGU9ImRhdGFCYXIiLHZlKz1QMih3LmNtaW4pLHZlKz1QMih3LmNtYXgpLHZlPU1yKCJkYXRhQmFyIix2ZSs9bGQody5jb2xvcikse30pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgY29uc29s'@;
put 'ZS5sb2codyksIkNGIG1pc3NpbmcgdHlwZSAiK3cudH1yZXR1cm4nPGNvbmRpdGlvbmFsRm9ybWF0dGluZyBzcXJlZj0iJytvZSsnIj4nK01yKCJjZlJ1bGUiLCIiPT12ZT9udWxsOnZlLE1lKSsiPC9jb25kaXRpb25hbEZvcm1hdHRpbmc+In0oRCxlZSxQKX0pLmpvaW4oIiIpfShNZVsiIWNv'@;
put 'bmRmbXQiXSxQKSksTWVbIiF2YWxpZGF0aW9ucyJdJiYob2Vbb2UubGVuZ3RoXT1mdW5jdGlvbiBBTih3KXtpZighd3x8MD09dy5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBQPVtdLEQ9MCxlZT0wO2VlPHcubGVuZ3RoOysrZWUpe3ZhciBvZT13W2VlXSxnZT1YOFtvZS50XTtpZihvZS5yZWYm'@;
put 'Jigic3RyaW5nIiE9dHlwZW9mIG9lLnJlZnx8LTEhPW9lLnJlZi5pbmRleE9mKCIgIil8fChvZS5yZWY9UGkob2UucmVmKSxvZS5yZWYucyYmIShvZS5yZWYucy5jPDApKSkpeysrRDt2YXIgX2U9e3R5cGU6Z2UsYWxsb3dCbGFuazorKDAhPW9lLmJsYW5rKSxzaG93SW5wdXRNZXNzYWdlOiso'@;
put 'MCE9b2UuaW5wdXQpLHNob3dFcnJvck1lc3NhZ2U6KygwIT1vZS5lcnJvciksc3FyZWY6InN0cmluZyI9PXR5cGVvZiBvZS5yZWY/b2UucmVmOlZvKG9lLnJlZil9O2lmKG9lLmlucHV0JiYob2UuaW5wdXQudGl0bGUmJihfZS5wcm9tcHRUaXRsZT1KaShvZS5pbnB1dC50aXRsZSkpLG9lLmlu'@;
put 'cHV0Lm1lc3NhZ2UmJihfZS5wcm9tcHQ9Smkob2UuaW5wdXQubWVzc2FnZSkpKSxvZS5lcnJvciYmKG9lLmVycm9yLnRpdGxlJiYoX2UuZXJyb3JUaXRsZT1KaShvZS5lcnJvci50aXRsZSkpLG9lLmVycm9yLm1lc3NhZ2UmJihfZS5lcnJvcj1KaShvZS5lcnJvci5tZXNzYWdlKSksb2UuZXJy'@;
put 'b3Iuc3R5bGUmJihfZS5lcnJvclN0eWxlPW9lLmVycm9yLnN0eWxlKSksIWdlKXRocm93IG5ldyBFcnJvcigiQmFkIHZhbGlkYXRpb246IHVucmVjb2duaXplZCB0eXBlICIrb2UudCk7dmFyIHZlPSIiO3N3aXRjaChvZS50KXtjYXNlIkFueSI6YnJlYWs7Y2FzZSJMaXN0IjpjYXNlIkN1c3Rv'@;
put 'bSI6aWYob2UubCl7aWYob2UubC5qb2luKCIsIikubGVuZ3RoPjI1MCl0aHJvdyBuZXcgRXJyb3IoIkRWIGxlbmd0aCA+IDI1MCB0cmlnZ2VycyBjb3JydXB0aW9uIGVycm9ycyBpbiBFeGNlbC4gIFVzZSBhIGxvb2t1cCB0YWJsZSIpO3ZlPSc8Zm9ybXVsYTE+IicrQnIob2UubC5qb2luKCIs'@;
put 'IikpKyciPC9mb3JtdWxhMT4nfWVsc2UgdmU9Ijxmb3JtdWxhMT4iK0JyKG9lLmYpKyI8L2Zvcm11bGExPiI7YnJlYWs7Y2FzZSJEYXRlIjpjYXNlIlRpbWUiOmNhc2UiRGVjaW1hbCI6Y2FzZSJMZW5ndGgiOmNhc2UiV2hvbGUiOmlmKCFCcFtvZS5vcF0pdGhyb3cgbmV3IEVycm9yKCJCYWQg'@;
put 'RGF0YSBWYWxpZGF0aW9uIHR5cGUgIitvZS5vcCsiIGZvciAiK29lLnQpO2lmKF9lLm9wZXJhdG9yPUJwW29lLm9wXSxudWxsIT1vZS52KXZlPSI8Zm9ybXVsYTE+IitCcihTdHJpbmcob2UudiBpbnN0YW5jZW9mIERhdGU/cWUob2Uudik6b2UudikpKyI8L2Zvcm11bGExPiI7ZWxzZXtpZihu'@;
put 'dWxsPT1vZS5taW58fG51bGw9PW9lLm1heCl0aHJvdyBuZXcgRXJyb3IoIkJhZCBEYXRhIFZhbGlkYXRpb246IGB2YCBvciBgbWluYCtgbWF4YCByZXF1aXJlZCBmb3IgVHlwZSAiK29lLnQpO3ZlPSI8Zm9ybXVsYTE+IitCcihTdHJpbmcob2UubWluIGluc3RhbmNlb2YgRGF0ZT9xZShvZS5t'@;
put 'aW4pOm9lLm1pbikpKyI8L2Zvcm11bGExPjxmb3JtdWxhMj4iK0JyKFN0cmluZyhvZS5tYXggaW5zdGFuY2VvZiBEYXRlP3FlKG9lLm1heCk6b2UubWF4KSkrIjwvZm9ybXVsYTI+In19UC5wdXNoKE1yKCJkYXRhVmFsaWRhdGlvbiIsdmV8fG51bGwsX2UpKX19cmV0dXJuIEQ+MD8nPGRhdGFW'@;
put 'YWxpZGF0aW9ucyBjb3VudD0iJytEKyciPicrUC5qb2luKCIiKSsiPC9kYXRhVmFsaWRhdGlvbnM+IjoiIn0oTWVbIiF2YWxpZGF0aW9ucyJdKSk7dmFyIEh0LHd0PS0xLGt0PS0xO2lmKE1lWyIhbGlua3MiXS5sZW5ndGg+MCYmKG9lW29lLmxlbmd0aF09IjxoeXBlcmxpbmtzPiIsTWVbIiFs'@;
put 'aW5rcyJdLmZvckVhY2goZnVuY3Rpb24oZm4pe2ZuWzFdLlRhcmdldCYmKEh0PXtyZWY6Zm5bMF19LCIjIiE9Zm5bMV0uVGFyZ2V0LmNoYXJBdCgwKSYmKGt0PUdvKGVlLC0xLEJyKGZuWzFdLlRhcmdldCkucmVwbGFjZSgvIy4qJC8sIiIpLE5pLkhMSU5LKSxIdFsicjppZCJdPSJySWQiK2t0'@;
put 'KSwod3Q9Zm5bMV0uVGFyZ2V0LmluZGV4T2YoIiMiKSk+LTEmJihIdC5sb2NhdGlvbj1CcihmblsxXS5UYXJnZXQuc2xpY2Uod3QrMSkpKSxmblsxXS5Ub29sdGlwJiYoSHQudG9vbHRpcD1CcihmblsxXS5Ub29sdGlwKSksb2Vbb2UubGVuZ3RoXT1NcigiaHlwZXJsaW5rIixudWxsLEh0KSl9'@;
put 'KSxvZVtvZS5sZW5ndGhdPSI8L2h5cGVybGlua3M+IiksZGVsZXRlIE1lWyIhbGlua3MiXSxpdCl7dmFyIFR0PWZ1bmN0aW9uIFFBKHcpe2lmKHcucHJvcHMpe3ZhciBQPXt9LEQ9dy5wcm9wcztyZXR1cm4gRC5ncmlkbGluZXMmJihQLmdyaWRMaW5lcz1QLmdyaWRMaW5lc1NldD0xKSxELmhl'@;
put 'YWRpbmdzJiYoUC5oZWFkaW5ncz0xKSxELmNlbnRlclgmJihQLmhvcml6b250YWxDZW50ZXJlZD0xKSxELmNlbnRlclkmJihQLnZlcnRpY2FsQ2VudGVyZWQ9MSksTXIoInByaW50T3B0aW9ucyIsbnVsbCxQKX1yZXR1cm4iIn0oaXQpO1R0Lmxlbmd0aCYmKG9lW29lLmxlbmd0aF09VHQpfWlm'@;
put 'KChudWxsIT1NZVsiIW1hcmdpbnMiXXx8aXQmJml0Lm1hcmdpbnMpJiYob2Vbb2UubGVuZ3RoXT1mdW5jdGlvbiBxOCh3KXtyZXR1cm4gSTIodyksTXIoInBhZ2VNYXJnaW5zIixudWxsLHcpfShNZVsiIW1hcmdpbnMiXXx8aXQubWFyZ2lucykpLGl0KXt2YXIgWXQ9ZnVuY3Rpb24gTU4odyl7'@;
put 'aWYody5wcm9wcyl7dmFyIFA9e30sRD13LnByb3BzO2lmKEQub3JpZW50YXRpb24mJihQLm9yaWVudGF0aW9uPUQub3JpZW50YXRpb24pLEQuc2NhbGUmJihQLnNjYWxlPUQuc2NhbGUpLEQuZml0JiYobnVsbCE9RC5maXQuaGVpZ2h0JiYoUC5maXRUb0hlaWdodD1ELmZpdC5oZWlnaHQpLG51'@;
put 'bGwhPUQuZml0LndpZHRoJiYoUC5maXRUb1dpZHRoPUQuZml0LndpZHRoKSksRC5kcGkmJihQLmhvcml6b250YWxEcGk9UC52ZXJ0aWNhbERwaT1ELmRwaSksbnVsbCE9RC5maXJzdCYmKFAuZmlyc3RQYWdlTnVtYmVyPUQuZmlyc3QsUC51c2VGaXJzdFBhZ2VOdW1iZXI9MSksRC5idyYmKFAu'@;
put 'YmxhY2tBbmRXaGl0ZT0xKSxELmRyYWZ0JiYoUC5kcmFmdD0xKSxELmNvbW1lbnRzJiYoUC5jZWxsQ29tbWVudHM9U2VbRC5jb21tZW50c118fCJub25lIiksRC5lcnJvcnMmJihQLmVycm9ycz1TTltELmVycm9yc118fCJub25lIiksRC5wYXBlcilzd2l0Y2godHlwZW9mIEQucGFwZXIpe2Nh'@;
put 'c2UibnVtYmVyIjpQLnBhcGVyU2l6ZT1ELnBhcGVyO2JyZWFrO2Nhc2Uic3RyaW5nIjpFX1tELnBhcGVyXT9QLnBhcGVyU2l6ZT1FX1tELnBhcGVyXTorRC5wYXBlciYmKFAucGFwZXJTaXplPStELnBhcGVyKTticmVhaztjYXNlIm9iamVjdCI6aWYoIUQucGFwZXIuaGVpZ2h0fHwhRC5wYXBl'@;
put 'ci53aWR0aCl0aHJvdyJDdXN0b20gUGFwZXIgU2l6ZSBtdXN0IGluY2x1ZGUgd2lkdGggYW5kIGhlaWdodCEiO1AucGFwZXJIZWlnaHQ9RC5wYXBlci5oZWlnaHQsUC5wYXBlcldpZHRoPUQucGFwZXIud2lkdGh9cmV0dXJuWzEsITAsInRydWUiLCJvdmVyIl0uaW5kZXhPZihELm9yZGVyKT4t'@;
put 'MSYmKFAucGFnZU9yZGVyPSJvdmVyVGhlbkRvd24iKSxNcigicGFnZVNldHVwIixudWxsLFApfXJldHVybiIifShpdCk7WXQubGVuZ3RoJiYob2Vbb2UubGVuZ3RoXT1ZdCksWXQ9ZnVuY3Rpb24gcHcodyl7dmFyIFA9W10sRD0iIixlZT0iIixvZT0iIixnZT0iIixfZT0iIix2ZT0iIixNZT0i'@;
put 'IixqZT1tZih3LmhlYWRlcik7amUubGVuZ3RoJiYoZWU9amVbMF0sdmU9amVbMV0sZ2U9amVbMl0pO3ZhciBVZT1tZih3LmZvb3Rlcik7cmV0dXJuIFVlLmxlbmd0aCYmKG9lPVVlWzBdLE1lPVVlWzFdLF9lPVVlWzJdKSxlZSYmUC5wdXNoKCI8b2RkSGVhZGVyPiIrQnIoZWUpKyI8L29kZEhl'@;
put 'YWRlcj4iKSxvZSYmUC5wdXNoKCI8b2RkRm9vdGVyPiIrQnIob2UpKyI8L29kZEZvb3Rlcj4iKSwoX2UhPW9lfHxnZSE9ZWUpJiYoRCs9JyBkaWZmZXJlbnRPZGRFdmVuPSIxIicsUC5wdXNoKCI8ZXZlbkhlYWRlcj4iK0JyKGdlKSsiPC9ldmVuSGVhZGVyPiIpLFAucHVzaCgiPGV2ZW5Gb290'@;
put 'ZXI+IitCcihfZSkrIjwvZXZlbkZvb3Rlcj4iKSksKE1lIT1vZXx8dmUhPWVlKSYmKEQrPScgZGlmZmVyZW50Rmlyc3Q9IjEiJyxQLnB1c2goIjxmaXJzdEhlYWRlcj4iK0JyKHZlKSsiPC9maXJzdEhlYWRlcj4iKSxQLnB1c2goIjxmaXJzdEZvb3Rlcj4iK0JyKE1lKSsiPC9maXJzdEZvb3Rl'@;
put 'cj4iKSksUC5sZW5ndGg/IjxoZWFkZXJGb290ZXIiK0QrIj4iK1Auam9pbigiIikrIjwvaGVhZGVyRm9vdGVyPiI6IiJ9KGl0KSxZdC5sZW5ndGgmJihvZVtvZS5sZW5ndGhdPVl0KX1pZigobnVsbCE9TWVbIiFyb3dCcmVha3MiXXx8aXQmJml0LnJvd0JyZWFrcykmJihvZVtvZS5sZW5ndGhd'@;
put 'PWZ1bmN0aW9uIEVOKHcpe2lmKDA9PXcubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgUD1bJzxyb3dCcmVha3MgY291bnQ9Iicrdy5sZW5ndGgrJyIgbWFudWFsQnJlYWtDb3VudD0iJyt3Lmxlbmd0aCsnIj4nXSxEPTA7RDx3Lmxlbmd0aDsrK0QpUC5wdXNoKCc8YnJrIGlkPSInK3dbRF0uUisn'@;
put 'IiBtYW49IjEiLz4nKTtyZXR1cm4gUC5qb2luKCIiKSsiPC9yb3dCcmVha3M+In0oTWVbIiFyb3dCcmVha3MiXXx8aXQucm93QnJlYWtzKSksKG51bGwhPU1lWyIhY29sQnJlYWtzIl18fGl0JiZpdC5jb2xCcmVha3MpJiYob2Vbb2UubGVuZ3RoXT1mdW5jdGlvbiBiZWUodyl7aWYoMD09dy5s'@;
put 'ZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBQPVsnPGNvbEJyZWFrcyBjb3VudD0iJyt3Lmxlbmd0aCsnIiBtYW51YWxCcmVha0NvdW50PSInK3cubGVuZ3RoKyciPiddLEQ9MDtEPHcubGVuZ3RoOysrRClQLnB1c2goJzxicmsgaWQ9Iicrd1tEXS5DKyciIG1hbj0iMSIvPicpO3JldHVybiBQLmpv'@;
put 'aW4oIiIpKyI8L2NvbEJyZWFrcz4ifShNZVsiIWNvbEJyZWFrcyJdfHxpdC5jb2xCcmVha3MpKSwoIVB8fFAuaWdub3JlRUN8fG51bGw9PVAuaWdub3JlRUMpJiYob2Vbb2UubGVuZ3RoXT12YSgiaWdub3JlZEVycm9ycyIsTXIoImlnbm9yZWRFcnJvciIsbnVsbCx7bnVtYmVyU3RvcmVkQXNU'@;
put 'ZXh0OjEsc3FyZWY6amV9KSkpLE1lWyIhY2hhcnRzIl0mJlhlLnB1c2guYXBwbHkoWGUsTWVbIiFjaGFydHMiXSksTWVbIiFpbWFnZXMiXSYmWGUucHVzaC5hcHBseShYZSxNZVsiIWltYWdlcyJdKSxNZVsiIXNoYXBlcyJdJiZYZS5wdXNoLmFwcGx5KFhlLE1lWyIhc2hhcGVzIl0pLFhlLmxl'@;
put 'bmd0aD4wJiYoa3Q9R28oZWUsLTEsIi4uL2RyYXdpbmdzL2RyYXdpbmciKyh3KzEpKyIueG1sIixOaS5EUkFXKSxvZVtvZS5sZW5ndGhdPU1yKCJkcmF3aW5nIixudWxsLHsicjppZCI6InJJZCIra3R9KSxNZVsiIWRyYXdpbmciXT1YZSksKE1lWyIhY29tbWVudHMiXS5sZW5ndGg+MHx8KE1l'@;
put 'WyIhY29udHJvbHMiXXx8W10pLmxlbmd0aD4wKSYmKGt0PUdvKGVlLC0xLCIuLi9kcmF3aW5ncy92bWxEcmF3aW5nIisodysxKSsiLnZtbCIsTmkuVk1MKSxvZVtvZS5sZW5ndGhdPU1yKCJsZWdhY3lEcmF3aW5nIixudWxsLHsicjppZCI6InJJZCIra3R9KSxNZVsiIWxlZ2FjeSJdPWt0KSxN'@;
put 'ZVsiIXByaW50Il0mJk1lWyIhcHJpbnQiXS5pbWFnZXMpe3ZhciBnbj1NZVsiIXByaW50Il0uaW1hZ2VzLHFuPTA7WyJoZWFkZXIiLCJmb290ZXIiXS5mb3JFYWNoKGZ1bmN0aW9uKGZuKXtnbltmbl0mJlsib2RkIiwiZXZlbiIsImZpcnN0Il0uZm9yRWFjaChmdW5jdGlvbihLbil7Z25bZm5d'@;
put 'W0tuXSYmWyJsZWZ0IiwicmlnaHQiLCJjZW50ZXIiXS5mb3JFYWNoKGZ1bmN0aW9uKHpuKXtpZihBcnJheS5pc0FycmF5KGduW2ZuXVtLbl1bem5dKSlmb3IodmFyIE9uPTA7T248Z25bZm5dW0tuXVt6bl0ubGVuZ3RoOysrT24pZ25bZm5dW0tuXVt6bl1bT25dJiYoZ25bZm5dW0tuXVt6bl1b'@;
put 'T25dLl9jbnQ9cW4rKyl9KX0pfSkscW4+MCYmKGt0PUdvKGVlLC0xLCIuLi9kcmF3aW5ncy92bWxEcmF3aW5nIisodysxKSsiSEYudm1sIixOaS5WTUwpLG9lW29lLmxlbmd0aF09TXIoImxlZ2FjeURyYXdpbmdIRiIsbnVsbCx7InI6aWQiOiJySWQiK2t0fSksTWVbIiFsZWdhY3lIRiJdPWt0'@;
put 'KX1yZXR1cm4oTWVbIiF0YWJsZXMiXXx8W10pLmxlbmd0aD4wJiYob2Vbb2UubGVuZ3RoXT0nPHRhYmxlUGFydHMgY291bnQ9IicrTWVbIiF0YWJsZXMiXS5sZW5ndGgrJyI+JyxNZVsiIXRhYmxlcyJdLmZvckVhY2goZnVuY3Rpb24oZm4sS24pe2t0PUdvKGVlLC0xLCIuLi90YWJsZXMvdGFi'@;
put 'bGUiKyh3KzEpKyJfIitLbisiLnhtbCIsTmkuVEFCTEUpLG9lW29lLmxlbmd0aF09Jzx0YWJsZVBhcnQgcjppZD0icklkJytrdCsnIi8+J30pLG9lW29lLmxlbmd0aF09IjwvdGFibGVQYXJ0cz4iKSxvZS5sZW5ndGg+MSYmKG9lW29lLmxlbmd0aF09Ijwvd29ya3NoZWV0PiIsb2VbMV09b2Vb'@;
put 'MV0ucmVwbGFjZSgiLz4iLCI+IikpLG9lLmpvaW4oIiIpfWZ1bmN0aW9uIE5OKHcsUCxELGVlKXt2YXIgb2U9ZnVuY3Rpb24gdncodyxQLEQpe3ZhciBlZT1wcigxNDUpLG9lPShEWyIhcm93cyJdfHxbXSlbd118fHt9O2VlLndyaXRlX3NoaWZ0KDQsdyksZWUud3JpdGVfc2hpZnQoNCwwKTt2'@;
put 'YXIgZ2U9MzIwO29lLmhweD9nZT0yMCp1aChvZS5ocHgpOm9lLmhwdCYmKGdlPTIwKm9lLmhwdCksZWUud3JpdGVfc2hpZnQoMixnZSksZWUud3JpdGVfc2hpZnQoMSwwKTt2YXIgX2U9MDtvZS5sZXZlbCYmKF9lfD1vZS5sZXZlbCksb2UuaGlkZGVuJiYoX2V8PTE2KSwob2UuaHB4fHxvZS5o'@;
put 'cHQpJiYoX2V8PTMyKSxlZS53cml0ZV9zaGlmdCgxLF9lKSxlZS53cml0ZV9zaGlmdCgxLDApO3ZhciB2ZT0wLE1lPWVlLmw7ZWUubCs9NDtmb3IodmFyIGplPXtyOncsYzowfSxVZT0wO1VlPDE2OysrVWUpaWYoIShQLnMuYz5VZSsxPDwxMHx8UC5lLmM8VWU8PDEwKSl7Zm9yKHZhciBYZT0t'@;
put 'MSxpdD0tMSxmdD1VZTw8MTA7ZnQ8VWUrMTw8MTA7KytmdClqZS5jPWZ0LChBcnJheS5pc0FycmF5KEQpPyhEW2plLnJdfHxbXSlbamUuY106RFtwaShqZSldKSYmKFhlPDAmJihYZT1mdCksaXQ9ZnQpO1hlPDB8fCgrK3ZlLGVlLndyaXRlX3NoaWZ0KDQsWGUpLGVlLndyaXRlX3NoaWZ0KDQs'@;
put 'aXQpKX12YXIgdXQ9ZWUubDtyZXR1cm4gZWUubD1NZSxlZS53cml0ZV9zaGlmdCg0LHZlKSxlZS5sPXV0LGVlLmxlbmd0aD5lZS5sP2VlLnNsaWNlKDAsZWUubCk6ZWV9KGVlLEQsUCk7KG9lLmxlbmd0aD4xN3x8KFBbIiFyb3dzIl18fFtdKVtlZV0pJiZoaSh3LCJCcnRSb3dIZHIiLG9lKX12'@;
put 'YXIgVk49b2MsQk49WDE7ZnVuY3Rpb24gYlQodyl7cmV0dXJuW3kwKHcpLHlsKHcpLCJuIl19dmFyIEpOPW9jLFNUPVgxLHhUPVsibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIiwiaGVhZGVyIiwiZm9vdGVyIl0scm89WyJBbnkiLCJXaG9sZSIsIkRlY2ltYWwiLCJMaXN0IiwiRGF0ZSIs'@;
put 'IlRpbWUiLCJMZW5ndGgiLCJDdXN0b20iXSxDdz1bIklOIiwiT1QiLCJFUSIsIk5FIiwiR1QiLCJMVCIsIkdFIiwiTEUiXTtmdW5jdGlvbiBmVih3KXt2YXIgUD1wcig0KSxEPVtQXSxlZT1yby5pbmRleE9mKHcudCk7aWYoZWU8MCl0aHJvdyBuZXcgRXJyb3IoIkJhZCB2YWxpZGF0aW9uOiB1'@;
put 'bnJlY29nbml6ZWQgdHlwZSAiK3cudCk7dmFyIGdlPUN3LmluZGV4T2Yody5vcCk7c3dpdGNoKGVlKXtjYXNlIDA6Y2FzZSAzOmNhc2UgNzpnZT0wO2JyZWFrO2RlZmF1bHQ6aWYoLTE9PWdlKXRocm93IG5ldyBFcnJvcigiQmFkIERhdGEgVmFsaWRhdGlvbiB0eXBlICIrdy5vcCsiIGZvciAi'@;
put 'K3cudCl9UC53cml0ZV9zaGlmdCgxLDB8ZWUpLFAud3JpdGVfc2hpZnQoMSwxKSxQLndyaXRlX3NoaWZ0KDEsMTJ8Z2U8PDQpLFAud3JpdGVfc2hpZnQoMSwwKSxELnB1c2goZnVuY3Rpb24gaDIodyl7dmFyIFA9dy5zcGxpdCgvXHMqLFxzKi8pLEQ9cHIoNCk7RC53cml0ZV9zaGlmdCg0LFAu'@;
put 'bGVuZ3RoKTt2YXIgZWU9W0RdO3JldHVybiBQLmZvckVhY2goZnVuY3Rpb24ob2Upe2VlLnB1c2goWDEoUGkob2UpKSl9KSxNKGVlKX0oInN0cmluZyI9PXR5cGVvZiB3LnJlZj93LnJlZjpWbyh3LnJlZikpKTt2YXIgX2U9cHIoMTYpO19lLndyaXRlX3NoaWZ0KDQsNDI5NDk2NzI5NSksX2Uu'@;
put 'd3JpdGVfc2hpZnQoNCw0Mjk0OTY3Mjk1KSxfZS53cml0ZV9zaGlmdCg0LDQyOTQ5NjcyOTUpLF9lLndyaXRlX3NoaWZ0KDQsNDI5NDk2NzI5NSksRC5wdXNoKF9lKTt2YXIgdmU9cHIoOCk7dmUud3JpdGVfc2hpZnQoNCwwKSx2ZS53cml0ZV9zaGlmdCg0LDApO3ZhciBNZT0xO3N3aXRjaCh3'@;
put 'LnQpe2Nhc2UiQW55IjpELnB1c2godmUpLEQucHVzaCh2ZSk7YnJlYWs7Y2FzZSJEZWNpbWFsIjpjYXNlIkxlbmd0aCI6Y2FzZSJXaG9sZSI6aWYobnVsbCE9dy52fHxudWxsIT13LmYpRC5wdXNoKCJudW1iZXIiPT10eXBlb2Ygdy52P0pfKHcudik6UHAobnVsbD09dy52P3cuZjp3LnYpKTtl'@;
put 'bHNle2lmKG51bGw9PXcubWlufHxudWxsPT13Lm1heCl0aHJvdyJVbnN1cHBvcnRlZCBEYXRhIFZhbGlkYXRpb246IGB2YCBvciBgbWluYCtgbWF4YCByZXF1aXJlZCBmb3IgVHlwZSAiK3cudDtELnB1c2goIm51bWJlciI9PXR5cGVvZiB3Lm1pbj9KXyh3Lm1pbik6UHAody5taW4pKSxELnB1'@;
put 'c2goIm51bWJlciI9PXR5cGVvZiB3Lm1heD9KXyh3Lm1heCk6UHAody5tYXgpKSxNZT0yfWJyZWFrO2Nhc2UiTGlzdCI6aWYobnVsbCE9dy5sKXtELnB1c2goVkEody5sLmpvaW4oIiwiKSkpO2JyZWFrfWNhc2UiQ3VzdG9tIjppZigibnVsbCIhPXcuZil7RC5wdXNoKFBwKHcuZikpO2JyZWFr'@;
put 'fXRocm93IlVuc3VwcG9ydGVkIERhdGEgVmFsaWRhdGlvbjogYGZgIisoIkxpc3QiPT13LnQ/IiBvciBgbGAiOiIiKSsiIHJlcXVpcmVkIGZvciBUeXBlICIrdy50O2RlZmF1bHQ6dGhyb3ciWExTQiBkb2VzIG5vdCBzdXBwb3J0IERhdGEgVmFsaWRhdGlvbiB0eXBlICIrdy50fXJldHVybiAx'@;
put 'PT1NZSYmRC5wdXNoKHZlKSxNKEQpfWZ1bmN0aW9uIGhWKHcsUCxELGVlLG9lLGdlLF9lKXtpZih2b2lkIDA9PT1QLnYmJm51bGw9PVAuc3x8InoiPT09UC50JiYhb2Uuc2hlZXRTdHVicylyZXR1cm4hMTt2YXIgdmU9IiI7c3dpdGNoKFAudCl7Y2FzZSJiIjp2ZT1QLnY/IjEiOiIwIjticmVh'@;
put 'aztjYXNlImQiOihQPUp0KFApKS56PVAuenx8Uy5fdGFibGVbMTRdLFAudj1xZShQdChQLnYpKSxQLnQ9Im4iO2JyZWFrO2Nhc2UibiI6Y2FzZSJlIjp2ZT0iIitQLnY7YnJlYWs7ZGVmYXVsdDp2ZT1QLnZ9dmFyIE1lPXtyOkQsYzplZX07c3dpdGNoKE1lLnM9d2Mob2UuY2VsbFhmcyxvZS5j'@;
put 'ZWxsU3R5bGVYZnMsUCxvZSksUC5sJiZnZVsiIWxpbmtzIl0ucHVzaChbcGkoTWUpLFAubF0pLFAuYyYmZ2VbIiFjb21tZW50cyJdLnB1c2goW3BpKE1lKSxQLmNdKSxQLnQpe2Nhc2UicyI6Y2FzZSJzdHIiOmlmKG9lLmJvb2tTU1Qpe2lmKHZlPXJ3KG9lLlN0cmluZ3MsUC52LFAuUj9QLnI9'@;
put 'dzIoUC5SKTpudWxsLG9lLnJldlN0cmluZ3MpLFAuUilmb3IodmFyIGplPTA7amU8UC5SLmxlbmd0aDsrK2plKVAuUltqZV0ucyYmd2Mob2UuY2VsbFhmcyxvZS5jZWxsU3R5bGVYZnMse3Q6Im4iLHY6MCxzOlAuUltqZV0uc30sb2UpO01lLnQ9InMiLE1lLnY9dmUsX2U/aGkodywiQnJ0U2hv'@;
put 'cnRJc3N0IixmdW5jdGlvbiBZTih3LFAsRCl7cmV0dXJuIG51bGw9PUQmJihEPXByKDgpKSxyYyhQLEQpLEQud3JpdGVfc2hpZnQoNCxQLnYpLER9KDAsTWUpKTpoaSh3LCJCcnRDZWxsSXNzdCIsZnVuY3Rpb24gX3codyxQLEQpe3JldHVybiBudWxsPT1EJiYoRD1wcigxMikpLEhpKFAsRCks'@;
put 'RC53cml0ZV9zaGlmdCg0LFAudiksRH0oMCxNZSkpfWVsc2UgTWUudD0ic3RyIixfZT9oaSh3LCJCcnRTaG9ydFN0IixmdW5jdGlvbiBTZWUodyxQLEQpe3JldHVybiBudWxsPT1EJiYoRD1wcig4KzQqdy52Lmxlbmd0aCkpLHJjKFAsRCksY3Uody52LEQpLEQubGVuZ3RoPkQubD9ELnNsaWNl'@;
put 'KDAsRC5sKTpEfShQLE1lKSk6aGkodywiQnJ0Q2VsbFN0IixmdW5jdGlvbiBsZyh3LFAsRCl7cmV0dXJuIG51bGw9PUQmJihEPXByKDEyKzQqdy52Lmxlbmd0aCkpLEhpKFAsRCksY3Uody52LEQpLEQubGVuZ3RoPkQubD9ELnNsaWNlKDAsRC5sKTpEfShQLE1lKSk7cmV0dXJuITA7Y2FzZSJu'@;
put 'IjpyZXR1cm4gUC52PT0oMHxQLnYpJiZQLnY+LTFlMyYmUC52PDFlMz9fZT9oaSh3LCJCcnRTaG9ydFJrIixmdW5jdGlvbiBLTih3LFAsRCl7cmV0dXJuIG51bGw9PUQmJihEPXByKDgpKSxyYyhQLEQpLHhhKHcudixEKSxEfShQLE1lKSk6aGkodywiQnJ0Q2VsbFJrIixmdW5jdGlvbiBDZWUo'@;
put 'dyxQLEQpe3JldHVybiBudWxsPT1EJiYoRD1wcigxMikpLEhpKFAsRCkseGEody52LEQpLER9KFAsTWUpKTpfZT9oaSh3LCJCcnRTaG9ydFJlYWwiLGZ1bmN0aW9uIEdOKHcsUCxEKXtyZXR1cm4gbnVsbD09RCYmKEQ9cHIoMTIpKSxyYyhQLEQpLHp1KHcudixEKSxEfShQLE1lKSk6aGkodywi'@;
put 'QnJ0Q2VsbFJlYWwiLGZ1bmN0aW9uIHd3KHcsUCxEKXtyZXR1cm4gbnVsbD09RCYmKEQ9cHIoMTYpKSxIaShQLEQpLHp1KHcudixEKSxEfShQLE1lKSksITA7Y2FzZSJiIjpyZXR1cm4gTWUudD0iYiIsX2U/aGkodywiQnJ0U2hvcnRCb29sIixmdW5jdGlvbiBidyh3LFAsRCl7cmV0dXJuIG51'@;
put 'bGw9PUQmJihEPXByKDUpKSxyYyhQLEQpLEQud3JpdGVfc2hpZnQoMSx3LnY/MTowKSxEfShQLE1lKSk6aGkodywiQnJ0Q2VsbEJvb2wiLGZ1bmN0aW9uIHBUKHcsUCxEKXtyZXR1cm4gbnVsbD09RCYmKEQ9cHIoOSkpLEhpKFAsRCksRC53cml0ZV9zaGlmdCgxLHcudj8xOjApLER9KFAsTWUp'@;
put 'KSwhMDtjYXNlImUiOnJldHVybiBNZS50PSJlIixfZT9oaSh3LCJCcnRTaG9ydEVycm9yIixmdW5jdGlvbiB2VCh3LFAsRCl7cmV0dXJuIG51bGw9PUQmJihEPXByKDgpKSxyYyhQLEQpLEQud3JpdGVfc2hpZnQoMSx3LnYpLEQud3JpdGVfc2hpZnQoMiwwKSxELndyaXRlX3NoaWZ0KDEsMCks'@;
put 'RH0oUCxNZSkpOmhpKHcsIkJydENlbGxFcnJvciIsZnVuY3Rpb24gbVQodyxQLEQpe3JldHVybiBudWxsPT1EJiYoRD1wcig5KSksSGkoUCxEKSxELndyaXRlX3NoaWZ0KDEsdy52KSxEfShQLE1lKSksITB9cmV0dXJuIF9lP2hpKHcsIkJydFNob3J0QmxhbmsiLGZ1bmN0aW9uIFpOKHcsUCxE'@;
put 'KXtyZXR1cm4gbnVsbD09RCYmKEQ9cHIoNCkpLHJjKFAsRCl9KDAsTWUpKTpoaSh3LCJCcnRDZWxsQmxhbmsiLGZ1bmN0aW9uIFVOKHcsUCxEKXtyZXR1cm4gbnVsbD09RCYmKEQ9cHIoOCkpLEhpKFAsRCl9KDAsTWUpKSwhMH1mdW5jdGlvbiB5Vih3LFAsRCxlZSl7dmFyIG9lPUF1KCksZ2U9'@;
put 'RC5TaGVldE5hbWVzW3ddLF9lPUQuU2hlZXRzW2dlXXx8e30sdmU9Z2U7dHJ5e0QmJkQuV29ya2Jvb2smJih2ZT1ELldvcmtib29rLlNoZWV0c1t3XS5Db2RlTmFtZXx8dmUpfWNhdGNoe312YXIgTWU9UGkoX2VbIiFyZWYiXXx8IkExIik7aWYoTWUuZS5jPjE2MzgzfHxNZS5lLnI+MTA0ODU3'@;
put 'NSl7aWYoUC5XVEYpdGhyb3cgbmV3IEVycm9yKCJSYW5nZSAiKyhfZVsiIXJlZiJdfHwiQTEiKSsiIGV4Y2VlZHMgZm9ybWF0IGxpbWl0IEExOlhGRDEwNDg1NzYiKTtNZS5lLmM9TWF0aC5taW4oTWUuZS5jLDE2MzgzKSxNZS5lLnI9TWF0aC5taW4oTWUuZS5jLDEwNDg1NzUpfXJldHVybiBf'@;
put 'ZVsiIWxpbmtzIl09W10sX2VbIiFjb21tZW50cyJdPVtdLGhpKG9lLCJCcnRCZWdpblNoZWV0IiksKEQudmJhcmF3fHxfZVsiIW91dGxpbmUiXSkmJmhpKG9lLCJCcnRXc1Byb3AiLGZ1bmN0aW9uIHZmKHcsUCxEKXtudWxsPT1EJiYoRD1wcig4NCs0KncubGVuZ3RoKSk7dmFyIGVlPTE5MjtQ'@;
put 'JiYoUC5hYm92ZSYmKGVlJj0tNjUpLFAubGVmdCYmKGVlJj0tMTI5KSksRC53cml0ZV9zaGlmdCgxLGVlKTtmb3IodmFyIG9lPTE7b2U8MzsrK29lKUQud3JpdGVfc2hpZnQoMSwwKTtyZXR1cm4gdGgoe2F1dG86MX0sRCksRC53cml0ZV9zaGlmdCgtNCwtMSksRC53cml0ZV9zaGlmdCgtNCwt'@;
put 'MSksTjYodyxEKSxELnNsaWNlKDAsRC5sKX0odmUsX2VbIiFvdXRsaW5lIl0pKSxoaShvZSwiQnJ0V3NEaW0iLEJOKE1lKSksZnVuY3Rpb24gSVQodyxQLEQpe2hpKHcsIkJydEJlZ2luV3NWaWV3cyIpLGhpKHcsIkJydEJlZ2luV3NWaWV3IixmdW5jdGlvbiBhVih3LFAsRCl7bnVsbD09RCYm'@;
put 'KEQ9cHIoMzApKTt2YXIgZWU9OTI0O3JldHVybigoKFB8fHt9KS5WaWV3c3x8W10pWzBdfHx7fSkuUlRMJiYoZWV8PTMyKSxobih3WyIhZ3JpZGxpbmVzIl0pJiYoZWUmPS01KSxobigoKChQfHx7fSkuVmlld3N8fFtdKVswXXx8e30pLmdyaWQpJiYoZWUmPS01KSxELndyaXRlX3NoaWZ0KDIs'@;
put 'ZWUpLEQud3JpdGVfc2hpZnQoNCwwKSxELndyaXRlX3NoaWZ0KDQsMCksRC53cml0ZV9zaGlmdCg0LDApLEQud3JpdGVfc2hpZnQoMSwwKSxELndyaXRlX3NoaWZ0KDEsMCksRC53cml0ZV9zaGlmdCgyLDApLEQud3JpdGVfc2hpZnQoMiwxMDApLEQud3JpdGVfc2hpZnQoMiwwKSxELndyaXRl'@;
put 'X3NoaWZ0KDIsMCksRC53cml0ZV9zaGlmdCgyLDApLEQud3JpdGVfc2hpZnQoNCwwKSxEfShQLEQpKSxQWyIhZnJlZXplIl0mJmhpKHcsIkJydFBhbmUiLGZ1bmN0aW9uIEVUKHcpe3ZhciBQPWNhKHdbIiFmcmVlemUiXSksRD1wcigyOSk7cmV0dXJuIEQud3JpdGVfc2hpZnQoOCxQLmMsImYi'@;
put 'KSxELndyaXRlX3NoaWZ0KDgsUC5yLCJmIiksRC53cml0ZV9zaGlmdCg0LFAuciksRC53cml0ZV9zaGlmdCg0LFAuYyksRC53cml0ZV9zaGlmdCg0LDApLEQud3JpdGVfc2hpZnQoMSwzKSxEfShQKSksUFsiIXNlbCJdJiZoaSh3LCJCcnRTZWwiLGZ1bmN0aW9uIHRWKHcsUCl7dmFyIEQ9cHIo'@;
put 'MzYpLGVlPXcuY2VsbDtpZighZWUpe2lmKCF3LnJhbmdlKXRocm93IG5ldyBFcnJvcigiTXVzdCBzcGVjaWZ5IGEgc2VsZWN0aW9uIGNlbGwgb3IgcmFuZ2UiKTtlZT1waShLYSh3LnJhbmdlLnJlcGxhY2UoL1xzLiokLywiIikpLnMpfXZhciBvZT0ic3RyaW5nIj09dHlwZW9mIGVlP2NhKGVl'@;
put 'KTplZTtpZihQKXt2YXIgZ2U9InN0cmluZyI9PXR5cGVvZiBQP2NhKFApOlA7RC53cml0ZV9zaGlmdCg0LG9lLnI+PWdlLnImJm9lLmM+PWdlLmM/MDpvZS5yPj1nZS5yJiZvZS5jPGdlLmM/MjpvZS5yPGdlLnImJm9lLmM+PWdlLmM/MTozKX1lbHNlIEQud3JpdGVfc2hpZnQoNCwzKTtyZXR1'@;
put 'cm4gRC53cml0ZV9zaGlmdCg0LG9lLnIpLEQud3JpdGVfc2hpZnQoNCxvZS5jKSxELndyaXRlX3NoaWZ0KDQsMCksRC53cml0ZV9zaGlmdCg0LDEpLEQud3JpdGVfc2hpZnQoNCxvZS5yKSxELndyaXRlX3NoaWZ0KDQsb2UuciksRC53cml0ZV9zaGlmdCg0LG9lLmMpLEQud3JpdGVfc2hpZnQo'@;
put 'NCxvZS5jKSxEfShQWyIhc2VsIl0sUFsiIWZyZWV6ZSJdKSksaGkodywiQnJ0RW5kV3NWaWV3IiksaGkodywiQnJ0RW5kV3NWaWV3cyIpfShvZSxfZSxELldvcmtib29rKSxmdW5jdGlvbiBUVCh3LFApeyFQfHwhUFsiIWNvbHMiXXx8KGhpKHcsIkJydEJlZ2luQ29sSW5mb3MiKSxQWyIhY29s'@;
put 'cyJdLmZvckVhY2goZnVuY3Rpb24oRCxlZSl7RCYmaGkodywiQnJ0Q29sSW5mbyIsZnVuY3Rpb24gTWVlKHcsUCxEKXtudWxsPT1EJiYoRD1wcigxOCkpO3ZhciBlZT11ZCh3LFApO0Qud3JpdGVfc2hpZnQoLTQsdyksRC53cml0ZV9zaGlmdCgtNCx3KSxELndyaXRlX3NoaWZ0KDQsMjU2Kihl'@;
put 'ZS53aWR0aHx8MTApKSxELndyaXRlX3NoaWZ0KDQsMCk7dmFyIG9lPTA7cmV0dXJuIFAuaGlkZGVuJiYob2V8PTEpLCJudW1iZXIiPT10eXBlb2YgZWUud2lkdGgmJihvZXw9MiksUC5sZXZlbCYmKG9lfD1QLmxldmVsPDw4KSxELndyaXRlX3NoaWZ0KDIsb2UpLER9KGVlLEQpKX0pLGhpKHcs'@;
put 'IkJydEVuZENvbEluZm9zIikpfShvZSxfZSksZnVuY3Rpb24gcFYodyxQLEQsZWUpe3ZhciBvZT1QaShQWyIhcmVmIl18fCJBMSIpLF9lPSIiLHZlPVtdO2hpKHcsIkJydEJlZ2luU2hlZXREYXRhIik7dmFyIE1lPUFycmF5LmlzQXJyYXkoUCksamU9b2UuZS5yO1BbIiFyb3dzIl0mJihqZT1N'@;
put 'YXRoLm1heChvZS5lLnIsUFsiIXJvd3MiXS5sZW5ndGgtMSkpO2Zvcih2YXIgVWU9b2Uucy5yO1VlPD1qZTsrK1VlKXtfZT1WYShVZSksTk4odyxQLG9lLFVlKTt2YXIgWGU9ITE7aWYoVWU8PW9lLmUucilmb3IodmFyIGl0PW9lLnMuYztpdDw9b2UuZS5jOysraXQpe1VlPT09b2Uucy5yJiYo'@;
put 'dmVbaXRdPUJhKGl0KSk7dmFyIGZ0PU1lPyhQW1VlXXx8W10pW2l0XTpQW3ZlW2l0XStfZV07WGU9ISFmdCYmaFYodyxmdCxVZSxpdCxlZSxQLFhlKX19aGkodywiQnJ0RW5kU2hlZXREYXRhIil9KG9lLF9lLDAsUCksZnVuY3Rpb24gaXYodyxQKXtQWyIhcHJvdGVjdCJdJiZoaSh3LCJCcnRT'@;
put 'aGVldFByb3RlY3Rpb24iLGZ1bmN0aW9uIHNWKHcsUCl7cmV0dXJuIG51bGw9PVAmJihQPXByKDY2KSksUC53cml0ZV9zaGlmdCgyLHcucGFzc3dvcmQ/Vngody5wYXNzd29yZCk6MCksUC53cml0ZV9zaGlmdCg0LDEpLFtbIm9iamVjdHMiLCExXSxbInNjZW5hcmlvcyIsITFdLFsiZm9ybWF0'@;
put 'Q2VsbHMiLCEwXSxbImZvcm1hdENvbHVtbnMiLCEwXSxbImZvcm1hdFJvd3MiLCEwXSxbImluc2VydENvbHVtbnMiLCEwXSxbImluc2VydFJvd3MiLCEwXSxbImluc2VydEh5cGVybGlua3MiLCEwXSxbImRlbGV0ZUNvbHVtbnMiLCEwXSxbImRlbGV0ZVJvd3MiLCEwXSxbInNlbGVjdExvY2tl'@;
put 'ZENlbGxzIiwhMV0sWyJzb3J0IiwhMF0sWyJhdXRvRmlsdGVyIiwhMF0sWyJwaXZvdFRhYmxlcyIsITBdLFsic2VsZWN0VW5sb2NrZWRDZWxscyIsITFdXS5mb3JFYWNoKGZ1bmN0aW9uKEQpe1Aud3JpdGVfc2hpZnQoNCxEWzFdP251bGw9PXdbRFswXV18fHdbRFswXV0/MDoxOm51bGwhPXdb'@;
put 'RFswXV0mJndbRFswXV0/MDoxKX0pLFB9KFBbIiFwcm90ZWN0Il0pKX0ob2UsX2UpLGZ1bmN0aW9uIERUKHcsUCxELGVlKXtpZihQWyIhYXV0b2ZpbHRlciJdKXt2YXIgb2U9UFsiIWF1dG9maWx0ZXIiXSxnZT0ic3RyaW5nIj09dHlwZW9mIG9lLnJlZj9vZS5yZWY6Vm8ob2UucmVmKTtELldv'@;
put 'cmtib29rfHwoRC5Xb3JrYm9vaz17U2hlZXRzOltdfSksRC5Xb3JrYm9vay5OYW1lc3x8KEQuV29ya2Jvb2suTmFtZXM9W10pO3ZhciBfZT1ELldvcmtib29rLk5hbWVzLHZlPUthKGdlKTt2ZS5zLnI9PXZlLmUuciYmKHZlLmUucj1LYShQWyIhcmVmIl0pLmUucixnZT1Wbyh2ZSkpO2Zvcih2'@;
put 'YXIgTWU9MDtNZTxfZS5sZW5ndGg7KytNZSl7dmFyIGplPV9lW01lXTtpZigiX3hsbm0uX0ZpbHRlckRhdGFiYXNlIj09amUuTmFtZSYmamUuU2hlZXQ9PWVlKXtqZS5SZWY9IiciK0QuU2hlZXROYW1lc1tlZV0rIichIitnZTticmVha319TWU9PV9lLmxlbmd0aCYmX2UucHVzaCh7TmFtZToi'@;
put 'X3hsbm0uX0ZpbHRlckRhdGFiYXNlIixTaGVldDplZSxSZWY6IiciK0QuU2hlZXROYW1lc1tlZV0rIichIitnZX0pLGhpKHcsIkJydEJlZ2luQUZpbHRlciIsWDEoUGkoZ2UpKSksaGkodywiQnJ0RW5kQUZpbHRlciIpfX0ob2UsX2UsRCx3KSxmdW5jdGlvbiBtVih3LFApeyFQfHwhUFsiIW1l'@;
put 'cmdlcyJdfHwoaGkodywiQnJ0QmVnaW5NZXJnZUNlbGxzIixmdW5jdGlvbiBNVCh3LFApe3JldHVybiBudWxsPT1QJiYoUD1wcig0KSksUC53cml0ZV9zaGlmdCg0LHcpLFB9KFBbIiFtZXJnZXMiXS5sZW5ndGgpKSxQWyIhbWVyZ2VzIl0uZm9yRWFjaChmdW5jdGlvbihEKXtoaSh3LCJCcnRN'@;
put 'ZXJnZUNlbGwiLFNUKEQpKX0pLGhpKHcsIkJydEVuZE1lcmdlQ2VsbHMiKSl9KG9lLF9lKSxmdW5jdGlvbiB2Vih3LFApe2lmKFApe2hpKHcsIkJydEJlZ2luRFZhbHMiLGZ1bmN0aW9uIEFUKHcsUCl7bnVsbD09UCYmKFA9cHIoMTgpKSxQLndyaXRlX3NoaWZ0KDIsMCksUC53cml0ZV9zaGlm'@;
put 'dCg0LDApLFAud3JpdGVfc2hpZnQoNCwwKSxQLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKHZhciBEPTAsZWU9MDtlZTx3Lmxlbmd0aDsrK2VlKSgod1tlZV18fHt9KS5yZWZ8fHt9KS5zJiZ3W2VlXS5yZWYucy5jPDB8fCsrRDtyZXR1cm4gUC53cml0ZV9zaGlmdCg0LEQpLFB9KFApKTtmb3IodmFy'@;
put 'IEQ9MDtEPFAubGVuZ3RoOysrRCkoKFBbRF18fHt9KS5yZWZ8fHt9KS5zJiZQW0RdLnJlZi5zLmM8MHx8aGkodywiQnJ0RFZhbCIsZlYoUFtEXSkpO2hpKHcsIkJydEVuZERWYWxzIil9fShvZSxfZVsiIXZhbGlkYXRpb25zIl0pLGZ1bmN0aW9uIGdWKHcsUCxEKXtQWyIhbGlua3MiXS5mb3JF'@;
put 'YWNoKGZ1bmN0aW9uKGVlKXtpZihlZVsxXS5UYXJnZXQpe3ZhciBvZT1HbyhELC0xLGVlWzFdLlRhcmdldC5yZXBsYWNlKC8jLiokLywiIiksTmkuSExJTkspO2hpKHcsIkJydEhMaW5rIixmdW5jdGlvbiBRTih3LFApe3ZhciBEPXByKDUwKzQqKHdbMV0uVGFyZ2V0Lmxlbmd0aCsod1sxXS5U'@;
put 'b29sdGlwfHwiIikubGVuZ3RoKSk7WDEoe3M6Y2Eod1swXSksZTpjYSh3WzBdKX0sRCksanUoInJJZCIrUCxEKTt2YXIgZWU9d1sxXS5UYXJnZXQuaW5kZXhPZigiIyIpO3JldHVybiBjdSgoLTE9PWVlPyIiOndbMV0uVGFyZ2V0LnNsaWNlKGVlKzEpKXx8IiIsRCksY3Uod1sxXS5Ub29sdGlw'@;
put 'fHwiIixEKSxjdSgiIixEKSxELnNsaWNlKDAsRC5sKX0oZWUsb2UpKX19KSxkZWxldGUgUFsiIWxpbmtzIl19KG9lLF9lLGVlKSxfZVsiIW1hcmdpbnMiXSYmaGkob2UsIkJydE1hcmdpbnMiLGZ1bmN0aW9uIGlWKHcsUCl7cmV0dXJuIG51bGw9PVAmJihQPXByKDQ4KSksSTIodykseFQuZm9y'@;
put 'RWFjaChmdW5jdGlvbihEKXt6dSh3W0RdLFApfSksUH0oX2VbIiFtYXJnaW5zIl0pKSwoIVB8fFAuaWdub3JlRUN8fG51bGw9PVAuaWdub3JlRUMpJiZmdW5jdGlvbiBPVCh3LFApeyFQfHwhUFsiIXJlZiJdfHwoaGkodywiQnJ0QmVnaW5DZWxsSWdub3JlRUNzIiksaGkodywiQnJ0Q2VsbEln'@;
put 'bm9yZUVDIixmdW5jdGlvbiBsVih3KXt2YXIgUD1wcigyNCk7cmV0dXJuIFAud3JpdGVfc2hpZnQoNCw0KSxQLndyaXRlX3NoaWZ0KDQsMSksWDEodyxQKSxQfShQaShQWyIhcmVmIl0pKSksaGkodywiQnJ0RW5kQ2VsbElnbm9yZUVDcyIpKX0ob2UsX2UpLGZ1bmN0aW9uIGtlZSh3LFAsRCxl'@;
put 'ZSl7aWYoUFsiIWNvbW1lbnRzIl0ubGVuZ3RoPjApe3ZhciBvZT1HbyhlZSwtMSwiLi4vZHJhd2luZ3Mvdm1sRHJhd2luZyIrKEQrMSkrIi52bWwiLE5pLlZNTCk7aGkodywiQnJ0TGVnYWN5RHJhd2luZyIsanUoInJJZCIrb2UpKSxQWyIhbGVnYWN5Il09b2V9fShvZSxfZSx3LGVlKSxoaShv'@;
put 'ZSwiQnJ0RW5kU2hlZXQiKSxvZS5lbmQoKX1mdW5jdGlvbiBvdih3KXt2YXIgZWUsUD1bXSxEPXcubWF0Y2goL148YzpudW1DYWNoZT4vKTsody5tYXRjaCgvPGM6cHQgaWR4PSIoXGQqKSI+KC4qPyk8XC9jOnB0Pi9nbSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGdlKXt2YXIgX2U9Z2UubWF0'@;
put 'Y2goLzxjOnB0IGlkeD0iKFxkKj8pIj48Yzp2PiguKik8XC9jOnY+PFwvYzpwdD4vKTtfZSYmKFBbK19lWzFdXT1EPytfZVsyXTpfZVsyXSl9KTt2YXIgb2U9RXIoKHcubWF0Y2goLzxjOmZvcm1hdENvZGU+KFtcc1xTXSo/KTxcL2M6Zm9ybWF0Q29kZT4vKXx8WyIiLCJHZW5lcmFsIl0pWzFd'@;
put 'KTtyZXR1cm4ody5tYXRjaCgvPGM6Zj4oLio/KTxcL2M6Zj4vZ20pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihnZSl7ZWU9Z2UucmVwbGFjZSgvPC4qPz4vZywiIil9KSxbUCxvZSxlZV19TmkuQ0hBUlQ9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8y'@;
put 'MDA2L3JlbGF0aW9uc2hpcHMvY2hhcnQiLE5pLkNIQVJURVg9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMTQvcmVsYXRpb25zaGlwcy9jaGFydEV4Ijt2YXIgY2c9LzwoPzpcdys6KT9jaGFydD4oW1xzXFNdKj8pPFwvKD86XHcrOik/Y2hhcnQ+LyxHdT0vPCg/Olx3'@;
put 'KzopP3Bsb3RBcmVhPihbXHNcU10qPyk8XC8oPzpcdys6KT9wbG90QXJlYT4vLEYyPS88KD86XHcrOik/bGVnZW5kPihbXHNcU10qPyk8XC8oPzpcdys6KT9sZWdlbmQ+Lyxhdj0vPCg/Olx3KzopP3RpdGxlPihbXHNcU10qPyk8XC8oPzpcdys6KT90aXRsZT4vO2Z1bmN0aW9uIHgwKHcsUCxE'@;
put 'LGVlLG9lLGdlLF9lLHZlKXt2YXIgTWU9Z2V8fHsiIXR5cGUiOiJjaGFydCJ9O2lmKCF3KXJldHVybiBnZTtfZSYmX2UuQW5jaG9yJiYoTWVbIiFwb3MiXT14MihfZS5BbmNob3IsdmUpLE1lWyIhcG9zVHlwZSJdPV9lLkFuY2hvci50eXBlLnJlcGxhY2UoL0FuY2hvci8sIiIpLE1lWyIhYWJz'@;
put 'cG9zIl09eDIoX2UuQW5jaG9yLHZlKSxNZVsiIXJlbHBvcyJdPUE4KF9lLkFuY2hvcix2ZSkpLE1lWyIhcGxvdCJdPVtdO3ZhciBqZT0iIixVZT0iIixYZT13Lm1hdGNoKGNnKTtYZT8oamU9dy5zbGljZSgwLFhlLmluZGV4KSxVZT13LnNsaWNlKFhlLmluZGV4K1hlWzBdLmxlbmd0aCkpOmpl'@;
put 'PVVlPXc7dmFyIGl0PVtdLGZ0PWplLm1hdGNoKC88YzpsYW5nLio/Pi8pfHx3Lm1hdGNoKC88YzpsYW5nLio/Pi8pfHxVZS5tYXRjaCgvPGM6bGFuZy4qPz4vKTtyZXR1cm4gZnQmJihNZVsiIWxhbmciXT0oY24oZnRbMF0pfHx7fSkudmFsfHwiZW4tVVMiKSxYZSYmKChpdD1YZVsxXS5tYXRj'@;
put 'aChhdikpJiZmdW5jdGlvbiB5Zih3LFApe3ZhciBEPSIiO3cubWF0Y2goLzxjOnJpY2g+LykmJncucmVwbGFjZSgvPGE6dD4oW1xzXFNdKj8pPFwvYTp0Pi9nLGZ1bmN0aW9uKGVlLG9lKXtEKz1vZX0pLFBbIiF0aXRsZSJdPUR8fCJDaGFydCBUaXRsZSJ9KGl0WzFdLE1lKSxmdW5jdGlvbiB6'@;
put 'cCh3LFApe2lmKHcpe3ZhciBEPTAsZWU9MCxvZT0iQSIsZ2U9e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX07dy5yZXBsYWNlKFJyLGZ1bmN0aW9uKF9lLHZlKXt2YXIgTWU9e3Q6dmUsYzpELHc6MCxzZXI6W119LGplPVtdLFVlPShfZS5tYXRjaCgvPGM6c2VyLyl8fFtdKS5pbmRleCxY'@;
put 'ZT1VZT9fZS5zbGljZSgwLFVlKTpfZTsic2NhdHRlciI9PXZlJiYoamU9X2UubWF0Y2goLzxjOnNjYXR0ZXJTdHlsZShbXlwvPl0qKVwvPi9tKSkmJmNuKGplWzBdKSwiYmFyIj09dmUmJihqZT1fZS5tYXRjaCgvPGM6YmFyRGlyKFteXC8+XSopXC8+L20pKSYmKE1lLmJhckRpcj0iYmFyIj09'@;
put 'Y24oamVbMF0pLnZhbD8iaCI6InYiKSwoamU9WGUubWF0Y2goLzxjOmdyb3VwaW5nKFteXC8+XSopXC8+L20pKSYmKE1lLmdyb3VwaW5nPWNuKGplWzBdKS52YWx8fCJzdGFuZGFyZCIpLChfZS5tYXRjaChqcCl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGZ0KXt2YXIgTXQ9W10sdXQ9e30sd3Q9'@;
put 'W107aWYoZnQubWF0Y2goLzxjOnR4Pi8pKXt2YXIgSHQ9b3YoKGZ0Lm1hdGNoKC88Yzp0eD4oW1xzXFNdKj8pPFwvYzp0eD4vKXx8W10pWzFdfHwiIil8fFtdO0h0WzBdJiZIdFswXVswXSYmKHV0Lm5hbWU9SHRbMF1bMF0pLEh0WzJdJiYodXQubmFtZXJlZj1IdFsyXSl9WyJ4VmFsIiwieVZh'@;
put 'bCIsImNhdCIsInZhbCIsImJ1YmJsZVNpemUiXS5mb3JFYWNoKGZ1bmN0aW9uKGt0KXt2YXIgWXQsVHQ9ZnQubWF0Y2gobmV3IFJlZ0V4cCgiPGM6IitrdCsiPltcXHNcXFNdKj88XFwvYzoiK2t0KyI+IiwiZ20iKSk7VHQmJigoVHRbMF0ubWF0Y2goLzxjOmY+KC4qPyk8XC9jOmY+L2dtKXx8'@;
put 'W10pLmZvckVhY2goZnVuY3Rpb24oZ24pe1l0PWduLnJlcGxhY2UoLzwuKj8+L2csIiIpfSksKFR0WzBdLm1hdGNoKC88YzooPzpcdyopQ2FjaGU+W1xzXFNdKj88XC9jOig/Olx3KilDYWNoZT4vZ20pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihnbil7dmFyIHFuPW92KGduKTtnZS5zLnI9Z2Uu'@;
put 'cy5jPTAsZ2UuZS5jPUQsb2U9QmEoRCkscW5bMF0uZm9yRWFjaChmdW5jdGlvbihmbixLbil7UFtvZStWYShLbildPXt0OiJudW1iZXIiPT10eXBlb2YgZm4/Im4iOiJzIix2OmZuLHo6cW5bMV19LGVlPUtufSksZ2UuZS5yPGVlJiYoZ2UuZS5yPWVlKSwrK0QsTWUudysrLE10LnB1c2goa3Qp'@;
put 'LChxblsyXXx8WXQpJiZ3dC5wdXNoKHFuWzJdfHxZdCksInZhbCI9PWt0JiYodXQuej1xblsxXXx8IkdlbmVyYWwiKX0pKX0pLChqZT1fZS5tYXRjaCgvPGM6c21vb3RoKFteXC8+XSopXC8+L20pKSYmKHV0LnNtb290aD1udWxsPT1jbihqZVswXSkudmFsfHxfcihjbihqZVswXSkudmFsKSks'@;
put 'dXQuY29scz1NdCx1dC5yYW5nZXM9d3QsTWUuc2VyLnB1c2godXQpfSksImRvdWdobnV0Ij09dmUmJihqZT1fZS5tYXRjaCgvPGM6aG9sZVNpemUoW15cLz5dKilcLz4vbSkpJiYoTWUuaG9sZT0oY24oamVbMF0pLnZhbHx8MTApLzEwMCksUFsiIXBsb3QiXS5wdXNoKE1lKX0pLEQ+MCYmKFBb'@;
put 'IiFyZWYiXT1WbyhnZSkpfX0oKFhlWzFdLm1hdGNoKEd1KXx8W10pWzFdLE1lKSxudWxsIT0oaXQ9WGVbMV0ubWF0Y2goRjIpKSYmZnVuY3Rpb24gYlYodyxQKXt2YXIgRDtQWyIhbGVnZW5kIl09e3BvczoiciJ9LChEPXcubWF0Y2goLzxjOmxlZ2VuZFBvcyhbXlwvPl0qKVwvPi9tKSkmJihQ'@;
put 'WyIhbGVnZW5kIl0ucG9zPWNuKERbMF0pLnZhbHx8InIiKX0oaXRbMF0sTWUpKSxNZX12YXIgUnI9LzxjOigoPzphcmVhfGxpbmV8c3RvY2t8cmFkYXJ8c2NhdHRlcnxwaWV8ZG91Z2hudXR8YmFyfG9mUGllfHN1cmZhY2V8YnViYmxlKSg/OjNEKT8pQ2hhcnRbXj5dKj4oW1xzXFNdKj8pPFwv'@;
put 'YzooPzphcmVhfGxpbmV8c3RvY2t8cmFkYXJ8c2NhdHRlcnxwaWV8ZG91Z2hudXR8YmFyfG9mUGllfHN1cmZhY2V8YnViYmxlKSg/OjNEKT9DaGFydD4vZ20sanA9LzxjOnNlcj4oW1xzXFNdKj8pPFwvYzpzZXI+L2dtO05pLkNTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcv'@;
put 'b2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2NoYXJ0c2hlZXQiO3ZhciBVcD1NcigiY2hhcnRzaGVldCIsbnVsbCx7eG1sbnM6c2EubWFpblswXSwieG1sbnM6ciI6c2Eucn0pO2Z1bmN0aW9uIFlwKHcsUCxELGVlKXt2YXIgb2U9W0JuLFVwXTtyZXR1cm4gb2UucHVzaCgiPHNo'@;
put 'ZWV0UHIvPiIpLG9lLnB1c2goJzxzaGVldFZpZXdzPjxzaGVldFZpZXcgem9vbVNjYWxlPSIxMDAiIHdvcmtib29rVmlld0lkPSIwIiB6b29tVG9GaXQ9IjEiLz48L3NoZWV0Vmlld3M+Jyksb2Vbb2UubGVuZ3RoXT1NcigiZHJhd2luZyIsbnVsbCx7InI6aWQiOiJySWQxIn0pLEdvKGVlLC0x'@;
put 'LCIuLi9kcmF3aW5ncy9kcmF3aW5nIisodysxKSsiLnhtbCIsTmkuRFJBVyksb2UubGVuZ3RoPjImJihvZVtvZS5sZW5ndGhdPSI8L2NoYXJ0c2hlZXQ+IixvZVsxXT1vZVsxXS5yZXBsYWNlKCIvPiIsIj4iKSksb2Uuam9pbigiIil9ZnVuY3Rpb24gJHAoKXt2YXIgdz1BdSgpO3JldHVybiBo'@;
put 'aSh3LCJCcnRCZWdpblNoZWV0IiksaGkodywiQnJ0RW5kU2hlZXQiKSx3LmVuZCgpfXZhciB5aD1bWyJhbGxvd1JlZnJlc2hRdWVyeSIsITEsImJvb2wiXSxbImF1dG9Db21wcmVzc1BpY3R1cmVzIiwhMCwiYm9vbCJdLFsiYmFja3VwRmlsZSIsITEsImJvb2wiXSxbImNoZWNrQ29tcGF0aWJp'@;
put 'bGl0eSIsITEsImJvb2wiXSxbIkNvZGVOYW1lIiwiIl0sWyJkYXRlMTkwNCIsITEsImJvb2wiXSxbImRlZmF1bHRUaGVtZVZlcnNpb24iLDAsImludCJdLFsiZmlsdGVyUHJpdmFjeSIsITEsImJvb2wiXSxbImhpZGVQaXZvdEZpZWxkTGlzdCIsITEsImJvb2wiXSxbInByb21wdGVkU29sdXRp'@;
put 'b25zIiwhMSwiYm9vbCJdLFsicHVibGlzaEl0ZW1zIiwhMSwiYm9vbCJdLFsicmVmcmVzaEFsbENvbm5lY3Rpb25zIiwhMSwiYm9vbCJdLFsic2F2ZUV4dGVybmFsTGlua1ZhbHVlcyIsITAsImJvb2wiXSxbInNob3dCb3JkZXJVbnNlbGVjdGVkVGFibGVzIiwhMCwiYm9vbCJdLFsic2hvd0lu'@;
put 'a0Fubm90YXRpb24iLCEwLCJib29sIl0sWyJzaG93T2JqZWN0cyIsImFsbCJdLFsic2hvd1Bpdm90Q2hhcnRGaWx0ZXIiLCExLCJib29sIl0sWyJ1cGRhdGVMaW5rcyIsInVzZXJTZXQiXV0sUlQ9W1siYWN0aXZlVGFiIiwwLCJpbnQiXSxbImF1dG9GaWx0ZXJEYXRlR3JvdXBpbmciLCEwLCJi'@;
put 'b29sIl0sWyJmaXJzdFNoZWV0IiwwLCJpbnQiXSxbIm1pbmltaXplZCIsITEsImJvb2wiXSxbInNob3dIb3Jpem9udGFsU2Nyb2xsIiwhMCwiYm9vbCJdLFsic2hvd1NoZWV0VGFicyIsITAsImJvb2wiXSxbInNob3dWZXJ0aWNhbFNjcm9sbCIsITAsImJvb2wiXSxbInRhYlJhdGlvIiw2MDAs'@;
put 'ImludCJdLFsidmlzaWJpbGl0eSIsInZpc2libGUiXV0sTFQ9W10sUFQ9W1siY2FsY0NvbXBsZXRlZCIsInRydWUiXSxbImNhbGNNb2RlIiwiYXV0byJdLFsiY2FsY09uU2F2ZSIsInRydWUiXSxbImNvbmN1cnJlbnRDYWxjIiwidHJ1ZSJdLFsiZnVsbENhbGNPbkxvYWQiLCJmYWxzZSJdLFsi'@;
put 'ZnVsbFByZWNpc2lvbiIsInRydWUiXSxbIml0ZXJhdGUiLCJmYWxzZSJdLFsiaXRlcmF0ZUNvdW50IiwiMTAwIl0sWyJpdGVyYXRlRGVsdGEiLCIwLjAwMSJdLFsicmVmTW9kZSIsIkExIl1dO2Z1bmN0aW9uIFN3KHcsUCl7Zm9yKHZhciBEPTA7RCE9dy5sZW5ndGg7KytEKWZvcih2YXIgZWU9'@;
put 'd1tEXSxvZT0wO29lIT1QLmxlbmd0aDsrK29lKXt2YXIgZ2U9UFtvZV07aWYobnVsbD09ZWVbZ2VbMF1dKWVlW2dlWzBdXT1nZVsxXTtlbHNlIHN3aXRjaChnZVsyXSl7Y2FzZSJib29sIjoic3RyaW5nIj09dHlwZW9mIGVlW2dlWzBdXSYmKGVlW2dlWzBdXT1fcihlZVtnZVswXV0pKTticmVh'@;
put 'aztjYXNlImludCI6InN0cmluZyI9PXR5cGVvZiBlZVtnZVswXV0mJihlZVtnZVswXV09cGFyc2VJbnQoZWVbZ2VbMF1dLDEwKSl9fX1mdW5jdGlvbiBNdyh3LFApe2Zvcih2YXIgRD0wO0QhPVAubGVuZ3RoOysrRCl7dmFyIGVlPVBbRF07aWYobnVsbD09d1tlZVswXV0pd1tlZVswXV09ZWVb'@;
put 'MV07ZWxzZSBzd2l0Y2goZWVbMl0pe2Nhc2UiYm9vbCI6InN0cmluZyI9PXR5cGVvZiB3W2VlWzBdXSYmKHdbZWVbMF1dPV9yKHdbZWVbMF1dKSk7YnJlYWs7Y2FzZSJpbnQiOiJzdHJpbmciPT10eXBlb2Ygd1tlZVswXV0mJih3W2VlWzBdXT1wYXJzZUludCh3W2VlWzBdXSwxMCkpfX19ZnVu'@;
put 'Y3Rpb24ga3codyl7TXcody5XQlByb3BzLHloKSxNdyh3LkNhbGNQcixQVCksU3cody5XQlZpZXcsUlQpLFN3KHcuU2hlZXRzLExUKSxGcC5kYXRlMTkwND1fcih3LldCUHJvcHMuZGF0ZTE5MDQpfXZhciBIVD0iXVsqPy9cXCIuc3BsaXQoIiIpO2Z1bmN0aW9uIEV3KHcsUCl7aWYody5sZW5n'@;
put 'dGg+MzEpe2lmKFApcmV0dXJuITE7dGhyb3cgbmV3IEVycm9yKCJTaGVldCBuYW1lcyBjYW5ub3QgZXhjZWVkIDMxIGNoYXJzIil9dmFyIEQ9ITA7cmV0dXJuIEhULmZvckVhY2goZnVuY3Rpb24oZWUpe2lmKC0xIT13LmluZGV4T2YoZWUpKXtpZighUCl0aHJvdyBuZXcgRXJyb3IoIlNoZWV0'@;
put 'IG5hbWUgY2Fubm90IGNvbnRhaW4gOiBcXCAvID8gKiBbIF0iKTtEPSExfX0pLER9dmFyIEVlZT0vPFx3Kzp3b3JrYm9vay8sQWVlPU1yKCJ3b3JrYm9vayIsbnVsbCx7eG1sbnM6c2EubWFpblswXSwieG1sbnM6ciI6c2Eucn0pO2Z1bmN0aW9uIFNWKHcsUCl7dmFyIEQ9UHx8e30sZWU9W0Ju'@;
put 'XTtlZVtlZS5sZW5ndGhdPUFlZTt2YXIgb2U9dy5Xb3JrYm9vayYmKHcuV29ya2Jvb2suTmFtZXN8fFtdKS5sZW5ndGg+MDt3Lldvcmtib29rJiZ3Lldvcmtib29rLk1vZGlmeSYmKGVlW2VlLmxlbmd0aF09ZnVuY3Rpb24gd1Yodyl7dmFyIFA9e307cmV0dXJuIHcud2FybiYmKFAucmVhZE9u'@;
put 'bHlSZWNvbW1lbmRlZD0xKSxQLnVzZXJOYW1lPXcudXNlcnx8IlNoZWV0IEpTIix3LmVuY3J5cHRpb24mJih3LmVuY3J5cHRpb24uYWxnbyYmKFAuYWxnb3JpdGhtTmFtZT13LmVuY3J5cHRpb24uYWxnbyksdy5lbmNyeXB0aW9uLmhhc2gmJihQLmhhc2hWYWx1ZT13LmVuY3J5cHRpb24uaGFz'@;
put 'aCksdy5lbmNyeXB0aW9uLnNhbHQmJihQLnNhbHRWYWx1ZT13LmVuY3J5cHRpb24uc2FsdCksdy5lbmNyeXB0aW9uLnNwaW4mJihQLnNwaW5Db3VudD13LmVuY3J5cHRpb24uc3BpbikpLE1yKCJmaWxlU2hhcmluZyIsbnVsbCxQKX0ody5Xb3JrYm9vay5Nb2RpZnkpKTt2YXIgZ2U9e2NvZGVO'@;
put 'YW1lOiJUaGlzV29ya2Jvb2sifTt3Lldvcmtib29rJiZ3Lldvcmtib29rLldCUHJvcHMmJih5aC5mb3JFYWNoKGZ1bmN0aW9uKGplKXtudWxsIT13Lldvcmtib29rLldCUHJvcHNbamVbMF1dJiZ3Lldvcmtib29rLldCUHJvcHNbamVbMF1dIT1qZVsxXSYmKGdlW2plWzBdXT13Lldvcmtib29r'@;
put 'LldCUHJvcHNbamVbMF1dKX0pLHcuV29ya2Jvb2suV0JQcm9wcy5Db2RlTmFtZSYmKGdlLmNvZGVOYW1lPXcuV29ya2Jvb2suV0JQcm9wcy5Db2RlTmFtZSxkZWxldGUgZ2UuQ29kZU5hbWUpKSxlZVtlZS5sZW5ndGhdPU1yKCJ3b3JrYm9va1ByIixudWxsLGdlKSx3Lldvcmtib29rJiZ3Lldv'@;
put 'cmtib29rLlByb3RlY3Rpb24mJihlZVtlZS5sZW5ndGhdPWZ1bmN0aW9uIENWKHcpe3ZhciBQPXt9O3JldHVybiB3LmxvY2tTdHJ1Y3R1cmUmJihQLmxvY2tTdHJ1Y3R1cmU9MSksdy5sb2NrV2luZG93cyYmKFAubG9ja1dpbmRvd3M9MSksdy5lbmNyeXB0aW9uJiYody5lbmNyeXB0aW9uLmFs'@;
put 'Z28mJihQLndvcmtib29rQWxnb3JpdGhtTmFtZT13LmVuY3J5cHRpb24uYWxnbyksdy5lbmNyeXB0aW9uLmhhc2gmJihQLndvcmtib29rSGFzaFZhbHVlPXcuZW5jcnlwdGlvbi5oYXNoKSx3LmVuY3J5cHRpb24uc2FsdCYmKFAud29ya2Jvb2tTYWx0VmFsdWU9dy5lbmNyeXB0aW9uLnNhbHQp'@;
put 'LHcuZW5jcnlwdGlvbi5zcGluJiYoUC53b3JrYm9va1NwaW5Db3VudD13LmVuY3J5cHRpb24uc3BpbikpLE1yKCJ3b3JrYm9va1Byb3RlY3Rpb24iLG51bGwsUCl9KHcuV29ya2Jvb2suUHJvdGVjdGlvbikpO3ZhciBfZT13Lldvcmtib29rJiZ3Lldvcmtib29rLlNoZWV0c3x8W10sdmU9MDtp'@;
put 'ZihfZSYmX2VbMF0mJl9lWzBdLkhpZGRlbil7Zm9yKGVlW2VlLmxlbmd0aF09Ijxib29rVmlld3M+Iix2ZT0wO3ZlIT13LlNoZWV0TmFtZXMubGVuZ3RoJiZfZVt2ZV0mJl9lW3ZlXS5IaWRkZW47Kyt2ZSk7dmU9PXcuU2hlZXROYW1lcy5sZW5ndGgmJih2ZT0wKSxlZVtlZS5sZW5ndGhdPSc8'@;
put 'd29ya2Jvb2tWaWV3IGZpcnN0U2hlZXQ9IicrdmUrJyIgYWN0aXZlVGFiPSInK3ZlKyciLz4nLGVlW2VlLmxlbmd0aF09IjwvYm9va1ZpZXdzPiJ9Zm9yKGVlW2VlLmxlbmd0aF09IjxzaGVldHM+Iix2ZT0wO3ZlIT13LlNoZWV0TmFtZXMubGVuZ3RoOysrdmUpe3ZhciBNZT17bmFtZTpCcih3'@;
put 'LlNoZWV0TmFtZXNbdmVdLnNsaWNlKDAsMzEpKX07aWYoTWUuc2hlZXRJZD0iIisodmUrMSksTWVbInI6aWQiXT0icklkIisodmUrMSksX2VbdmVdKXN3aXRjaChfZVt2ZV0uSGlkZGVuKXtjYXNlIDE6TWUuc3RhdGU9ImhpZGRlbiI7YnJlYWs7Y2FzZSAyOk1lLnN0YXRlPSJ2ZXJ5SGlkZGVu'@;
put 'In1lZVtlZS5sZW5ndGhdPU1yKCJzaGVldCIsbnVsbCxNZSl9cmV0dXJuIGVlW2VlLmxlbmd0aF09Ijwvc2hlZXRzPiIsdy5FeHRlcm5hbFdCJiZ3LkV4dGVybmFsV0IubGVuZ3RoJiYoZWVbZWUubGVuZ3RoXT0iPGV4dGVybmFsUmVmZXJlbmNlcz4iLCh3LkV4dGVybmFsV0J8fFtdKS5mb3JF'@;
put 'YWNoKGZ1bmN0aW9uKGplLFVlKXt2YXIgWGU9R28oRC53YnJlbHMsLTEsImV4dGVybmFsTGlua3MvZXh0ZXJuYWxMaW5rIisoVWUrMSkrIi54bWwiLE5pLlhMSU5LKTtlZVtlZS5sZW5ndGhdPSc8ZXh0ZXJuYWxSZWZlcmVuY2UgcjppZD0icklkJytYZSsnIi8+J30pLGVlW2VlLmxlbmd0aF09'@;
put 'IjwvZXh0ZXJuYWxSZWZlcmVuY2VzPiIpLG9lJiYoZWVbZWUubGVuZ3RoXT0iPGRlZmluZWROYW1lcz4iLHcuV29ya2Jvb2smJncuV29ya2Jvb2suTmFtZXMmJncuV29ya2Jvb2suTmFtZXMuZm9yRWFjaChmdW5jdGlvbihqZSl7dmFyIFVlPXtuYW1lOmplLk5hbWV9O2plLkNvbW1lbnQmJihV'@;
put 'ZS5jb21tZW50PWplLkNvbW1lbnQpLG51bGwhPWplLlNoZWV0JiYoVWUubG9jYWxTaGVldElkPSIiK2plLlNoZWV0KSxqZS5IaWRkZW4mJihVZS5oaWRkZW49IjEiKSxqZS5SZWYmJihlZVtlZS5sZW5ndGhdPU1yKCJkZWZpbmVkTmFtZSIsQnIoamUuUmVmKSxVZSkpfSksZWVbZWUubGVuZ3Ro'@;
put 'XT0iPC9kZWZpbmVkTmFtZXM+IiksRCYmRC5waXZvdHMmJkQucGl2b3RzLmxlbmd0aD4wJiYoZWUucHVzaCgiPHBpdm90Q2FjaGVzPiIpLEQucGl2b3RzLmZvckVhY2goZnVuY3Rpb24oamUsVWUpe2VlLnB1c2goJzxwaXZvdENhY2hlIGNhY2hlSWQ9IicrKFVlKzEpKyciIHI6aWQ9InJJZCcr'@;
put 'amVbMl0rJyIvPicpfSksZWUucHVzaCgiPC9waXZvdENhY2hlcz4iKSksZWUubGVuZ3RoPjImJihlZVtlZS5sZW5ndGhdPSI8L3dvcmtib29rPiIsZWVbMV09ZWVbMV0ucmVwbGFjZSgiLz4iLCI+IikpLGVlLmpvaW4oIiIpfWZ1bmN0aW9uIE1WKHcsUCl7cmV0dXJuIFB8fChQPXByKDEyNykp'@;
put 'LFAud3JpdGVfc2hpZnQoNCx3LkhpZGRlbiksUC53cml0ZV9zaGlmdCg0LHcuaVRhYklEKSxqdSh3LnN0clJlbElELFApLGN1KHcubmFtZS5zbGljZSgwLDMxKSxQKSxQLmxlbmd0aD5QLmw/UC5zbGljZSgwLFAubCk6UH1mdW5jdGlvbiBBdyh3LFApe3ZhciBEPXt9O3JldHVybiB3LnJlYWRf'@;
put 'c2hpZnQoNCksRC5BcmNoSUQ9dy5yZWFkX3NoaWZ0KDQpLHcubCs9UC04LER9ZnVuY3Rpb24geFYodyxQKXt2YXIgRD1BdSgpO3JldHVybiBoaShELCJCcnRCZWdpbkJvb2siKSxoaShELCJCcnRGaWxlVmVyc2lvbiIsZnVuY3Rpb24gTlQodyxQKXtQfHwoUD1wcigxMjcpKTtmb3IodmFyIEQ9'@;
put 'MDs0IT1EOysrRClQLndyaXRlX3NoaWZ0KDQsMCk7cmV0dXJuIGN1KCJTaGVldEpTIixQKSxjdShILnZlcnNpb24sUCksY3UoSC52ZXJzaW9uLFApLGN1KCI3MjYyIixQKSxQLmxlbmd0aD5QLmw/UC5zbGljZSgwLFAubCk6UH0oKSksaGkoRCwiQnJ0V2JQcm9wIixmdW5jdGlvbiBFVih3LFAp'@;
put 'e1B8fChQPXByKDcyKSk7dmFyIEQ9MDtyZXR1cm4gdyYmdy5maWx0ZXJQcml2YWN5JiYoRHw9OCksUC53cml0ZV9zaGlmdCg0LEQpLFAud3JpdGVfc2hpZnQoNCwwKSxONih3JiZ3LkNvZGVOYW1lfHwiVGhpc1dvcmtib29rIixQKSxQLnNsaWNlKDAsUC5sKX0ody5Xb3JrYm9vayYmdy5Xb3Jr'@;
put 'Ym9vay5XQlByb3BzfHxudWxsKSksZnVuY3Rpb24gVlQodyxQKXtpZihQLldvcmtib29rJiZQLldvcmtib29rLlNoZWV0cyl7Zm9yKHZhciBEPVAuV29ya2Jvb2suU2hlZXRzLGVlPTAsb2U9LTEsZ2U9LTE7ZWU8RC5sZW5ndGg7KytlZSkhRFtlZV18fCFEW2VlXS5IaWRkZW4mJi0xPT1vZT9v'@;
put 'ZT1lZToxPT1EW2VlXS5IaWRkZW4mJi0xPT1nZSYmKGdlPWVlKTtnZT5vZXx8KGhpKHcsIkJydEJlZ2luQm9va1ZpZXdzIiksaGkodywiQnJ0Qm9va1ZpZXciLGZ1bmN0aW9uIGRnKHcsUCl7cmV0dXJuIFB8fChQPXByKDI5KSksUC53cml0ZV9zaGlmdCgtNCwwKSxQLndyaXRlX3NoaWZ0KC00'@;
put 'LDQ2MCksUC53cml0ZV9zaGlmdCg0LDI4ODAwKSxQLndyaXRlX3NoaWZ0KDQsMTc2MDApLFAud3JpdGVfc2hpZnQoNCw1MDApLFAud3JpdGVfc2hpZnQoNCx3KSxQLndyaXRlX3NoaWZ0KDQsdyksUC53cml0ZV9zaGlmdCgxLDEyMCksUC5sZW5ndGg+UC5sP1Auc2xpY2UoMCxQLmwpOlB9KG9l'@;
put 'KSksaGkodywiQnJ0RW5kQm9va1ZpZXdzIikpfX0oRCx3KSxmdW5jdGlvbiBsdih3LFApe2hpKHcsIkJydEJlZ2luQnVuZGxlU2hzIik7Zm9yKHZhciBEPTA7RCE9UC5TaGVldE5hbWVzLmxlbmd0aDsrK0QpaGkodywiQnJ0QnVuZGxlU2giLE1WKHtIaWRkZW46UC5Xb3JrYm9vayYmUC5Xb3Jr'@;
put 'Ym9vay5TaGVldHMmJlAuV29ya2Jvb2suU2hlZXRzW0RdJiZQLldvcmtib29rLlNoZWV0c1tEXS5IaWRkZW58fDAsaVRhYklEOkQrMSxzdHJSZWxJRDoicklkIisoRCsxKSxuYW1lOlAuU2hlZXROYW1lc1tEXX0pKTtoaSh3LCJCcnRFbmRCdW5kbGVTaHMiKX0oRCx3KSxoaShELCJCcnRFbmRC'@;
put 'b29rIiksRC5lbmQoKX1mdW5jdGlvbiBMVih3LFAsRCxlZSxvZSl7cmV0dXJuKCIuYmluIj09PVAuc2xpY2UoLTQpP3lWOkZOKSh3LEQsZWUsb2UpfWZ1bmN0aW9uIEJUKHcsUCxELGVlLG9lKXtyZXR1cm4oIi5iaW4iPT09UC5zbGljZSgtNCk/JHA6WXApKHcsRCxlZSxvZSl9ZnVuY3Rpb24g'@;
put 'RlYodyxQLEQpe3JldHVybigiLmJpbiI9PT1QLnNsaWNlKC00KT92cDpjOCkodyxEKX1mdW5jdGlvbiB0dCh3LFAsRCl7cmV0dXJuKCIuYmluIj09PVAuc2xpY2UoLTQpP1pIOnZBKSh3LEQpfXZhciBJdz0vKFtcdzpdKyk9KCg/OiIpKFteIl0qKSg/OiIpfCg/OicpKFteJ10qKSg/OicpKS9n'@;
put 'LFJ3PS8oW1x3Ol0rKT0oKD86IikoPzpbXiJdKikoPzoiKXwoPzonKSg/OlteJ10qKSg/OicpKS87ZnVuY3Rpb24gQ2ModyxQKXt2YXIgRD13LnNwbGl0KC9ccysvKSxlZT1bXTtpZihQfHwoZWVbMF09RFswXSksMT09PUQubGVuZ3RoKXJldHVybiBlZTt2YXIgZ2UsX2UsTWUsb2U9dy5tYXRj'@;
put 'aChJdyk7aWYob2UpZm9yKE1lPTA7TWUhPW9lLmxlbmd0aDsrK01lKS0xPT09KF9lPShnZT1vZVtNZV0ubWF0Y2goUncpKVsxXS5pbmRleE9mKCI6IikpP2VlW2dlWzFdXT1nZVsyXS5zbGljZSgxLGdlWzJdLmxlbmd0aC0xKTplZVsieG1sbnM6Ij09PWdlWzFdLnNsaWNlKDAsNik/InhtbG5z'@;
put 'IitnZVsxXS5zbGljZSg2KTpnZVsxXS5zbGljZShfZSsxKV09Z2VbMl0uc2xpY2UoMSxnZVsyXS5sZW5ndGgtMSk7cmV0dXJuIGVlfWZ1bmN0aW9uIGpUKHcpe3ZhciBEPXt9O2lmKDE9PT13LnNwbGl0KC9ccysvKS5sZW5ndGgpcmV0dXJuIEQ7dmFyIG9lLGdlLHZlLGVlPXcubWF0Y2goSXcp'@;
put 'O2lmKGVlKWZvcih2ZT0wO3ZlIT1lZS5sZW5ndGg7Kyt2ZSktMT09PShnZT0ob2U9ZWVbdmVdLm1hdGNoKFJ3KSlbMV0uaW5kZXhPZigiOiIpKT9EW29lWzFdXT1vZVsyXS5zbGljZSgxLG9lWzJdLmxlbmd0aC0xKTpEWyJ4bWxuczoiPT09b2VbMV0uc2xpY2UoMCw2KT8ieG1sbnMiK29lWzFd'@;
put 'LnNsaWNlKDYpOm9lWzFdLnNsaWNlKGdlKzEpXT1vZVsyXS5zbGljZSgxLG9lWzJdLmxlbmd0aC0xKTtyZXR1cm4gRH1mdW5jdGlvbiBIVih3KXt2YXIgUD17fTtpZih3LkRlZmF1bHRSb3dIZWlnaHQpe3ZhciBEPXtocHg6NCpwYXJzZUludCh3LkRlZmF1bHRSb3dIZWlnaHQpLzN9O1NwKEQp'@;
put 'LFAucm93PUR9aWYody5EZWZhdWx0Q29sV2lkdGgpe3ZhciBlZT17d3B4OjQqcGFyc2VJbnQody5EZWZhdWx0Q29sV2lkdGgpLzN9O19jKGVlKSxQLmNvbD1lZX1yZXR1cm4gUH1mdW5jdGlvbiBSZSh3LFAsRCxlZSl7dmFyIG9lPWVlO3N3aXRjaCgoRFswXS5tYXRjaCgvZHQ6ZHQ9IihbXHcu'@;
put 'XSspIi8pfHxbIiIsIiJdKVsxXSl7Y2FzZSJib29sZWFuIjpvZT1fcihlZSk7YnJlYWs7Y2FzZSJpMiI6Y2FzZSJpbnQiOm9lPXBhcnNlSW50KGVlLDEwKTticmVhaztjYXNlInI0IjpjYXNlImZsb2F0IjpvZT1wYXJzZUZsb2F0KGVlKTticmVhaztjYXNlImRhdGUiOmNhc2UiZGF0ZVRpbWUu'@;
put 'dHoiOm9lPVB0KGVlKTticmVhaztjYXNlImk4IjpjYXNlInN0cmluZyI6Y2FzZSJmaXhlZCI6Y2FzZSJ1dWlkIjpjYXNlImJpbi5iYXNlNjQiOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJiYWQgY3VzdHByb3A6IitEWzBdKX13W0VyKFApXT1vZX12YXIgelQ9ezA6Ik5vbmUiLDE6'@;
put 'IlNpbmdsZSIsMjoiRG91YmxlIiwzMzoiU2luZ2xlQWNjb3VudGluZyIsMzQ6IkRvdWJsZUFjY291bnRpbmcifSx5ZT1JZSh6VCk7ZnVuY3Rpb24gQ2UodyxQLEQsZWUpe2lmKGVlLmNlbGxTdHlsZXMpe2lmKEQ9RC5yZXBsYWNlKC9ccysvZywiICIpLFAuSW50ZXJpb3Ipe3ZhciBvZT1QLklu'@;
put 'dGVyaW9yO29lLlBhdHRlcm4mJihvZS5wYXR0ZXJuVHlwZT1MbVtvZS5QYXR0ZXJuXXx8b2UuUGF0dGVybiksb2UuQ29sb3ImJm9lLkNvbG9yLm1hdGNoKC8jWzAtOUEtRmEtZl0qLykmJihvZS5mZ0NvbG9yPXtyZ2I6b2UuQ29sb3Iuc2xpY2UoMSl9KX0hZnVuY3Rpb24gVVQodyl7dy5Cb3Jk'@;
put 'ZXJzJiYody5Cb3JkZXJzLmZvckVhY2goZnVuY3Rpb24oUCl7dmFyIEQ9UC5Qb3NpdGlvbi50b0xvd2VyQ2FzZSgpO3dbRF09e3N0eWxlOnRuKFAuTGluZVN0eWxlLCtQLldlaWdodCksY29sb3I6e3JnYjooUC5Db2xvcnx8IiMwMDAwMDAiKS5zbGljZSgxKX19fSksZGVsZXRlIHcuQm9yZGVy'@;
put 'cyl9KFApO3ZhciBfZSxnZT1ELm1hdGNoKC88KD86XHcrOik/Rm9udFxzW14+XSo+Lyk7Z2UmJihfcigoX2U9Y24oZ2VbMF0pKS5Cb2xkKSYmKFAuQm9sZD0hMCksX3IoX2UuSXRhbGljKSYmKFAuSXRhbGljPSEwKSxfcihfZS5TdHJpa2VUaHJvdWdoKSYmKFAuU3RyaWtlPSEwKSxfZS5TaXpl'@;
put 'JiYoUC5TaXplPStfZS5TaXplKSxQLkZvbnROYW1lPV9lLkZvbnROYW1lP19lLkZvbnROYW1lOiJBcmlhbCIsX2UuVW5kZXJsaW5lJiYoUC5VbmRlcmxpbmU9eWVbX2UuVW5kZXJsaW5lXSksX2UuQ29sb3ImJihQLlJHQj1fZS5Db2xvci5zbGljZSgtNikpKSxQLkFsaWdubWVudCYmKFAuYWxp'@;
put 'Z25tZW50PXt9LFAuQWxpZ25tZW50LlZlcnRpY2FsJiYoUC5hbGlnbm1lbnQudmVydGljYWw9UC5BbGlnbm1lbnQuVmVydGljYWwudG9Mb3dlckNhc2UoKSksUC5BbGlnbm1lbnQuSG9yaXpvbnRhbCYmKFAuYWxpZ25tZW50Lmhvcml6b250YWw9UC5BbGlnbm1lbnQuSG9yaXpvbnRhbC50b0xv'@;
put 'd2VyQ2FzZSgpKSxfcihQLkFsaWdubWVudC5XcmFwVGV4dHx8IjAiKT9QLmFsaWdubWVudC53cmFwVGV4dD0hMDpudWxsPT1QLkFsaWdubWVudC5XcmFwVGV4dCYmZGVsZXRlIFAuYWxpZ25tZW50LndyYXBUZXh0LF9yKFAuQWxpZ25tZW50LlNocmlua1RvRml0fHwiMCIpJiYoUC5hbGlnbm1l'@;
put 'bnQuc2hyaW5rVG9GaXQ9ITApLCtQLkFsaWdubWVudC5JbmRlbnQmJihQLmFsaWdubWVudC5pbmRlbnQ9K1AuQWxpZ25tZW50LkluZGVudHx8MCksK1AuQWxpZ25tZW50LlJvdGF0ZSYmKFAuYWxpZ25tZW50LnRleHRSb3RhdGlvbj0rUC5BbGlnbm1lbnQuUm90YXRlfHwwKSl9d1tQLklEXT1Q'@;
put 'LCgiRGVmYXVsdCI9PVAuSUR8fCJOb3JtYWwiPT1QLk5hbWUpJiZoZihQKX1mdW5jdGlvbiB0bih3LFApe3N3aXRjaCh3KXtjYXNlIk5vbmUiOnJldHVybiJub25lIjtjYXNlIkRhc2giOnJldHVybiJkYXNoZWQiO2Nhc2UiRG90IjpyZXR1cm4iZG90dGVkIjtjYXNlIkRhc2hEb3QiOnJldHVy'@;
put 'biJkYXNoRG90IjtjYXNlIkRhc2hEb3REb3QiOnJldHVybiJkYXNoRG90RG90IjtjYXNlIlNsYW50RGFzaERvdCI6cmV0dXJuInNsYW50RGFzaERvdCI7Y2FzZSJEb3VibGUiOnJldHVybiJkb3VibGUiO2Nhc2UiQ29udGludW91cyI6c3dpdGNoKCtQfHwwKXtjYXNlIDA6cmV0dXJuImhhaXIi'@;
put 'O2Nhc2UgMTpyZXR1cm4idGhpbiI7Y2FzZSAyOnJldHVybiJtZWRpdW0iO2Nhc2UgMzpyZXR1cm4idGhpY2sifXJldHVybiJ0aGluIn1yZXR1cm4gd31mdW5jdGlvbiBaVCh3LFAsRCxlZSxvZSxnZSxfZSx2ZSxNZSxqZSl7dmFyIFVlPSJHZW5lcmFsIixYZT1lZS5TdHlsZUlELGl0PXt9O2pl'@;
put 'PWplfHx7fTt2YXIgZnQ9W10sTXQ9MDtmb3Iodm9pZCAwPT09WGUmJnZlJiYoWGU9dmUuU3R5bGVJRCksdm9pZCAwPT09WGUmJl9lJiYoWGU9X2UuU3R5bGVJRCk7dm9pZCAwIT09Z2VbWGVdOyl7dmFyIHV0PWdlW1hlXTtpZigiR2VuZXJhbCI9PVVlJiZ1dC5uZiYmKFVlPWdlW1hlXS5uZiks'@;
put 'dXQuSW50ZXJpb3ImJmZ0LnB1c2goZ2VbWGVdLkludGVyaW9yKSx1dC5hbGlnbm1lbnQmJihpdC5hbGlnbm1lbnR8fChpdC5hbGlnbm1lbnQ9SnQodXQuYWxpZ25tZW50KSkpLG51bGw9PWl0LmJvbGQmJnV0LkJvbGQmJihpdC5ib2xkPSEwKSxudWxsPT1pdC5pdGFsaWMmJnV0Lkl0YWxpYyYm'@;
put 'KGl0Lml0YWxpYz0hMCksbnVsbD09aXQuc3RyaWtlJiZ1dC5TdHJpa2UmJihpdC5zdHJpa2U9ITApLG51bGw9PWl0LnN6JiZ1dC5TaXplJiYoaXQuc3o9dXQuU2l6ZSksbnVsbD09aXQubmFtZSYmdXQuRm9udE5hbWUmJihpdC5uYW1lPXV0LkZvbnROYW1lKSxudWxsPT1pdC51bmRlcmxpbmUm'@;
put 'JnV0LlVuZGVybGluZSYmKGl0LnVuZGVybGluZT11dC5VbmRlcmxpbmUpLG51bGw9PWl0LmNvbG9yJiZ1dC5SR0ImJihpdC5jb2xvcj17cmdiOnV0LlJHQn0pLFsidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0Il0uZm9yRWFjaChmdW5jdGlvbihUdCl7bnVsbD09aXRbVHRdJiZ1dFtUdF0m'@;
put 'JihpdFtUdF09SnQodXRbVHRdKSl9KSwiRGVmYXVsdCI9PVhlKWJyZWFrO1hlPXV0LlBhcmVudHx8IkRlZmF1bHQifWl0Lm5hbWV8fChpdC5uYW1lPWdlLkRlZmF1bHQmJmdlLkRlZmF1bHQuRm9udE5hbWV8fCJBcmlhbCIpLGl0LnN6fHwoaXQuc3o9Z2UuRGVmYXVsdCYmZ2UuRGVmYXVsdC5T'@;
put 'aXplfHwxMik7dmFyIHd0PSIiO2lmKHd8fGVlLkZvcm11bGF8fCJTdHJpbmciPT1ELlR5cGV8fCJOdW1iZXIiPT1ELlR5cGUpc3dpdGNoKEQuVHlwZSl7Y2FzZSJCb29sZWFuIjplZS50PSJiIixlZS52PV9yKHcpO2JyZWFrO2Nhc2UiU3RyaW5nIjplZS50PSJzIix3dD1YaShFcih3KSksZWUu'@;
put 'dj13LmluZGV4T2YoIjwiKT4tMT9FcihQfHx3KS5yZXBsYWNlKC88W15dKj8+L2csIiIpOnd0LHcuaW5kZXhPZigiPCIpPi0xJiYoZWUuUj1ZYy5odG1sX3RvX3JzKEVyKHcpKSk7YnJlYWs7Y2FzZSJEYXRlVGltZSI6IloiIT13LnNsaWNlKC0xKSYmKHcrPSJaIiksZWUudj0oUHQodyktbmV3'@;
put 'IERhdGUoRGF0ZS5VVEMoMTg5OSwxMSwzMCkpKS84NjRlNSxlZS52IT1lZS52P2VlLnY9RXIodyk6ZWUudjw2MCYmKGVlLnY9ZWUudi0xKSwoIVVlfHwiR2VuZXJhbCI9PVVlKSYmKFVlPSJ5eXl5LW1tLWRkIik7Y2FzZSJOdW1iZXIiOnZvaWQgMD09PWVlLnYmJihlZS52PSt3KSxlZS50fHwo'@;
put 'ZWUudD0ibiIpO2JyZWFrO2Nhc2UiRXJyb3IiOmVlLnQ9ImUiLGVlLnY9cWxbd10sITEhPT1qZS5jZWxsVGV4dCYmKGVlLnc9dyk7YnJlYWs7ZGVmYXVsdDoiIj09dyYmIiI9PVA/ZWUudD0ieiI6KGVlLnQ9InMiLHd0PVhpKEVyKHcpKSxlZS52PXcuaW5kZXhPZigiPCIpPi0xP0VyKFB8fHcp'@;
put 'LnJlcGxhY2UoLzxbXl0qPz4vZywiIik6d3Qsdy5pbmRleE9mKCI8Iik+LTEmJihlZS5SPVljLmh0bWxfdG9fcnMoRXIodykpKSl9ZWxzZSBlZS50PSJ6IixkZWxldGUgZWUudjtpZihmdW5jdGlvbiBMdyh3LFAsRCl7aWYoInoiIT09dy50KXtpZighRHx8ITEhPT1ELmNlbGxUZXh0KXRyeXt3'@;
put 'Lnc9ImUiPT09dy50P3cud3x8bmFbdy52XToiR2VuZXJhbCI9PT1QPyJuIj09PXcudD8oMHx3LnYpPT09dy52P1MuX2dlbmVyYWxfaW50KHcudik6Uy5fZ2VuZXJhbF9udW0ody52KTpTLl9nZW5lcmFsKHcudik6ZnVuY3Rpb24gUWkodyxQKXt2YXIgRD1yZVt3XXx8RXIodyk7cmV0dXJuIkdl'@;
put 'bmVyYWwiPT09RD9TLl9nZW5lcmFsKFApOlMuZm9ybWF0KEQsUCl9KFB8fCJHZW5lcmFsIix3LnYpfWNhdGNoKGdlKXtpZihELldURil0aHJvdyBnZX10cnl7dmFyIGVlPXJlW1BdfHxQfHwiR2VuZXJhbCI7aWYoRC5jZWxsTkYmJih3Lno9ZWUpLEQuY2VsbERhdGVzJiYibiI9PXcudCYmUy5p'@;
put 'c19kYXRlKGVlKSl7dmFyIG9lPVMucGFyc2VfZGF0ZV9jb2RlKHcudik7b2UmJih3LnQ9ImQiLHcudj1uZXcgRGF0ZShvZS55LG9lLm0tMSxvZS5kLG9lLkgsb2UuTSxvZS5TLG9lLnUpKX19Y2F0Y2goZ2Upe2lmKEQuV1RGKXRocm93IGdlfX19KGVlLFVlLGplKSwhMSE9PWplLmNlbGxGb3Jt'@;
put 'dWxhKWlmKGVlLkZvcm11bGEpe3ZhciBIdD1FcihlZS5Gb3JtdWxhKTs2MT09SHQuY2hhckNvZGVBdCgwKSYmKEh0PUh0LnNsaWNlKDEpKSxlZS5mPUEyKEh0LG9lKSxkZWxldGUgZWUuRm9ybXVsYSwiUkMiPT1lZS5BcnJheVJhbmdlP2VlLkY9QTIoIlJDOlJDIixvZSk6ZWUuQXJyYXlSYW5n'@;
put 'ZSYmKGVlLkY9QTIoZWUuQXJyYXlSYW5nZSxvZSksTWUucHVzaChbUGkoZWUuRiksZWUuRl0pKX1lbHNlIGZvcihNdD0wO010PE1lLmxlbmd0aDsrK010KW9lLnI+PU1lW010XVswXS5zLnImJm9lLnI8PU1lW010XVswXS5lLnImJm9lLmM+PU1lW010XVswXS5zLmMmJm9lLmM8PU1lW010XVsw'@;
put 'XS5lLmMmJihlZS5GPU1lW010XVsxXSk7aWYoamUuY2VsbFN0eWxlcyYmKGZ0LmZvckVhY2goZnVuY3Rpb24oVHQpeyFpdC5wYXR0ZXJuVHlwZSYmVHQucGF0dGVyblR5cGUmJihpdC5wYXR0ZXJuVHlwZT1UdC5wYXR0ZXJuVHlwZSksIWl0LmZnQ29sb3ImJlR0LmZnQ29sb3ImJihpdC5mZ0Nv'@;
put 'bG9yPVR0LmZnQ29sb3IpfSksZWUucz1pdCksdm9pZCAwIT09ZWUuU3R5bGVJRCYmKGVlLml4ZmU9ZWUuU3R5bGVJRCksZWUuUiYmZWUucyl7dmFyIGt0PUp0KGVlLnMpO2RlbGV0ZSBrdC5ib2xkLGRlbGV0ZSBrdC5pdGFsaWMsZGVsZXRlIGt0LnVuZGVybGluZSxkZWxldGUga3Quc3RyaWtl'@;
put 'LGVlLlIuZm9yRWFjaChmdW5jdGlvbihUdCl7VHQucz1OdChKdChrdCksVHQucyl9KX19ZnVuY3Rpb24gTlYodyl7dy50PXcudnx8IiIsdy50PXcudC5yZXBsYWNlKC9cclxuL2csIlxuIikucmVwbGFjZSgvXHIvZywiXG4iKSx3LnY9dy53PXcuaXhmZT12b2lkIDB9ZnVuY3Rpb24gUHcodyl7'@;
put 'aWYoZGUmJkJ1ZmZlci5pc0J1ZmZlcih3KSlyZXR1cm4gdy50b1N0cmluZygidXRmOCIpO2lmKCJzdHJpbmciPT10eXBlb2YgdylyZXR1cm4gdztpZih0eXBlb2YgVWludDhBcnJheTwidSImJncgaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiBGaShGKEModykpKTt0aHJvdyBuZXcgRXJy'@;
put 'b3IoIkJhZCBpbnB1dCBmb3JtYXQ6IGV4cGVjdGVkIEJ1ZmZlciBvciBzdHJpbmciKX12YXIgV3I9LzwoXC8/KShbXlxzPz48IVwvOl0qOnwpKFteXHM/PD46XC9cW10rKSg/Oltccz86PFwvXVtePl0qKT8+L2dtO2Z1bmN0aW9uIEdyKHcsUCl7dmFyIEQ9UHx8e30sZWU9VShQdyh3KSk7KCJi'@;
put 'aW5hcnkiPT1ELnR5cGV8fCJhcnJheSI9PUQudHlwZXx8ImJhc2U2NCI9PUQudHlwZSkmJihlZT10eXBlb2YgY3B0YWJsZTwidSI/Y3B0YWJsZS51dGlscy5kZWNvZGUoNjUwMDEsVihlZSkpOkZpKGVlKSk7dmFyIG9lPWVlLnNsaWNlKDAsMTAyNCkudG9Mb3dlckNhc2UoKSxnZT0hMTtpZigo'@;
put 'MTAyMyZvZS5pbmRleE9mKCI+IikpPk1hdGgubWluKDEwMjMmb2UuaW5kZXhPZigiLCIpLDEwMjMmb2UuaW5kZXhPZigiOyIpKSl7dmFyIF9lPUp0KEQpO3JldHVybiBfZS50eXBlPSJzdHJpbmciLHVmLnRvX3dvcmtib29rKGVlLF9lKX1pZigtMT09b2UuaW5kZXhPZigiPD94bWwiKSYmWyJo'@;
put 'dG1sIiwidGFibGUiLCJoZWFkIiwibWV0YSIsInNjcmlwdCIsInN0eWxlIiwiZGl2Il0uZm9yRWFjaChmdW5jdGlvbih1Yyl7b2UuaW5kZXhPZigiPCIrdWMpPj0wJiYoZ2U9ITApfSksZ2UpcmV0dXJuIFljLnRvX3dvcmtib29rKGVlLEQpO3ZhciB2ZSxqZSxNZT1bXTtudWxsIT1uZSYmbnVs'@;
put 'bD09RC5kZW5zZSYmKEQuZGVuc2U9bmUpO3ZhciBmcixVZT17fSxYZT1bXSxpdD1ELmRlbnNlP1tdOnt9LGZ0PSIiLE10PXt9LHV0PXt9LHd0PXt9LEh0PUNjKCc8RGF0YSBzczpUeXBlPSJTdHJpbmciPicpLGt0PTAsVHQ9MCxZdD0wLGduPXtzOntyOjJlNixjOjJlNn0sZTp7cjowLGM6MH19'@;
put 'LHFuPXt9LGZuPXt9LEtuPSIiLHpuPTAsT249W10sZXI9e30sdHI9e30sWW49MCxqcj1bXSxsaT17fSxFaT1bXSxJaT17fSx0aT1bXSxEbj0hMSx2cj1bXSxycj1bXSx4bj17fSxtcj0wLENpPTAsenI9e1NoZWV0czpbXSxXQlByb3BzOntkYXRlMTkwNDohMX19LHppPXt9O1dyLmxhc3RJbmRl'@;
put 'eD0wLGVlPWVlLnJlcGxhY2UoLzwhLS0oW1xzXFNdKj8pLS0+L2dtLCIiKTtmb3IodmFyIHdvPSIiO3ZlPVdyLmV4ZWMoZWUpOylzd2l0Y2godmVbM109KHdvPXZlWzNdKS50b0xvd2VyQ2FzZSgpKXtjYXNlImRhdGEiOmlmKCJkYXRhIj09d28pe2lmKCIvIj09PXZlWzFdKXtpZigoamU9TWUu'@;
put 'cG9wKCkpWzBdIT09dmVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIramUuam9pbigifCIpKX1lbHNlIi8iIT09dmVbMF0uY2hhckF0KHZlWzBdLmxlbmd0aC0yKSYmTWUucHVzaChbdmVbM10sITBdKTticmVha31pZihNZVtNZS5sZW5ndGgtMV1bMV0pYnJlYWs7Ii8iPT09dmVb'@;
put 'MV0/WlQoZWUuc2xpY2Uoa3QsdmUuaW5kZXgpLEtuLEh0LCJjb21tZW50Ij09TWVbTWUubGVuZ3RoLTFdWzBdP0lpOnV0LHtjOlR0LHI6WXR9LHFuLHRpW1R0XSx3dCx2cixEKTooS249IiIsSHQ9Q2ModmVbMF0pLGt0PXZlLmluZGV4K3ZlWzBdLmxlbmd0aCk7YnJlYWs7Y2FzZSJjZWxsIjpp'@;
put 'ZigiLyI9PT12ZVsxXXx8Ii8+Ij09PXZlWzBdLnNsaWNlKC0yKSl7aWYoIi8+Ij09PXZlWzBdLnNsaWNlKC0yKSl7aWYoKHV0PWpUKHZlWzBdKSkuSW5kZXgmJihUdD0rdXQuSW5kZXgtMSksVHQ8Z24ucy5jJiYoZ24ucy5jPVR0KSxUdD5nbi5lLmMmJihnbi5lLmM9VHQpLEVpPVtdLCFELnNo'@;
put 'ZWV0U3R1YnMpeysrVHQ7YnJlYWt9WlQoIiIsIiIse30sImNvbW1lbnQiPT1NZVtNZS5sZW5ndGgtMV1bMF0/SWk6dXQse2M6VHQscjpZdH0scW4sdGlbVHRdLHd0LHZyLEQpfWlmKEVpLmxlbmd0aD4wJiYodXQuYz1FaSksKCFELnNoZWV0Um93c3x8RC5zaGVldFJvd3M+WXQpJiYodm9pZCAw'@;
put 'IT09dXQudnx8RC5zaGVldFN0dWJzKSYmKEQuZGVuc2U/KGl0W1l0XXx8KGl0W1l0XT1bXSksaXRbWXRdW1R0XT11dCk6aXRbQmEoVHQpK1ZhKFl0KV09dXQpLHV0LkhSZWYmJih1dC5sPXtUYXJnZXQ6RXIodXQuSFJlZil9LHV0LkhSZWZTY3JlZW5UaXAmJih1dC5sLlRvb2x0aXA9dXQuSFJl'@;
put 'ZlNjcmVlblRpcCksZGVsZXRlIHV0LkhSZWYsZGVsZXRlIHV0LkhSZWZTY3JlZW5UaXApLCh1dC5NZXJnZUFjcm9zc3x8dXQuTWVyZ2VEb3duKSYmKG1yPVR0KygwfHBhcnNlSW50KHV0Lk1lcmdlQWNyb3NzLDEwKSksQ2k9WXQrKDB8cGFyc2VJbnQodXQuTWVyZ2VEb3duLDEwKSksKG1yPlR0'@;
put 'fHxDaT5ZdCkmJk9uLnB1c2goe3M6e2M6VHQscjpZdH0sZTp7YzptcixyOkNpfX0pKSxELnNoZWV0U3R1YnMpaWYodXQuTWVyZ2VBY3Jvc3N8fHV0Lk1lcmdlRG93bil7Zm9yKHZhciBPaT1UdDtPaTw9bXI7KytPaSlmb3IodmFyIFhvPVl0O1hvPD1DaTsrK1hvKShPaT5UdHx8WG8+WXQpJiYo'@;
put 'RC5kZW5zZT8oaXRbWG9dfHwoaXRbWG9dPVtdKSxpdFtYb11bT2ldPXt0OiJ6In0pOml0W0JhKE9pKStWYShYbyldPXt0OiJ6In0pO1R0PW1yKzF9ZWxzZSsrVHQ7ZWxzZSB1dC5NZXJnZUFjcm9zcz9UdD1tcisxOisrVHR9ZWxzZSh1dD1qVCh2ZVswXSkpLkluZGV4JiYoVHQ9K3V0LkluZGV4'@;
put 'LTEpLFR0PGduLnMuYyYmKGduLnMuYz1UdCksVHQ+Z24uZS5jJiYoZ24uZS5jPVR0KSwiLz4iPT09dmVbMF0uc2xpY2UoLTIpJiYrK1R0LEVpPVtdO2JyZWFrO2Nhc2Uicm93IjoiLyI9PT12ZVsxXXx8Ii8+Ij09PXZlWzBdLnNsaWNlKC0yKT8oWXQ8Z24ucy5yJiYoZ24ucy5yPVl0KSxZdD5n'@;
put 'bi5lLnImJihnbi5lLnI9WXQpLCIvPiI9PT12ZVswXS5zbGljZSgtMikmJih3dD1DYyh2ZVswXSkpLkluZGV4JiYoWXQ9K3d0LkluZGV4LTEpLFR0PTAsKytZdCk6KCh3dD1DYyh2ZVswXSkpLkluZGV4JiYoWXQ9K3d0LkluZGV4LTEpLHhuPXt9LCgiMCI9PXd0LkF1dG9GaXRIZWlnaHR8fHd0'@;
put 'LkhlaWdodCkmJih4bi5ocHQ9cGFyc2VGbG9hdCh3dC5IZWlnaHQpLHhuLmhweD1kZih4bi5ocHQpLHJyW1l0XT14biksIjEiPT13dC5IaWRkZW4mJih4bi5oaWRkZW49ITAscnJbWXRdPXhuKSk7YnJlYWs7Y2FzZSJ3b3Jrc2hlZXQiOmlmKCIvIj09PXZlWzFdKXtpZigoamU9TWUucG9wKCkp'@;
put 'WzBdIT09dmVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIramUuam9pbigifCIpKTtYZS5wdXNoKGZ0KSxnbi5zLnI8PWduLmUuciYmZ24ucy5jPD1nbi5lLmMmJihpdFsiIXJlZiJdPVZvKGduKSxELnNoZWV0Um93cyYmRC5zaGVldFJvd3M8PWduLmUuciYmKGl0WyIhZnVsbHJl'@;
put 'ZiJdPWl0WyIhcmVmIl0sZ24uZS5yPUQuc2hlZXRSb3dzLTEsaXRbIiFyZWYiXT1WbyhnbikpKSxPbi5sZW5ndGgmJihpdFsiIW1lcmdlcyJdPU9uKSx0aS5sZW5ndGg+MCYmKGl0WyIhY29scyJdPXRpKSxyci5sZW5ndGg+MCYmKGl0WyIhcm93cyJdPXJyKSxNdCYmKGl0WyIhc2hlZXRGb3Jt'@;
put 'YXQiXT1IVihNdCkpLFVlW2Z0XT1pdH1lbHNlIGduPXtzOntyOjJlNixjOjJlNn0sZTp7cjowLGM6MH19LFl0PVR0PTAsTWUucHVzaChbdmVbM10sITFdKSxqZT1DYyh2ZVswXSksZnQ9RXIoamUuTmFtZSksaXQ9RC5kZW5zZT9bXTp7fSxPbj1bXSx2cj1bXSxycj1bXSx6ci5TaGVldHMucHVz'@;
put 'aCh6aT17bmFtZTpmdCxIaWRkZW46MH0pO2JyZWFrO2Nhc2UidGFibGUiOmlmKCIvIj09PXZlWzFdKXtpZigoamU9TWUucG9wKCkpWzBdIT09dmVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIramUuam9pbigifCIpKX1lbHNle2lmKCIvPiI9PXZlWzBdLnNsaWNlKC0yKSlicmVh'@;
put 'aztNdD1DYyh2ZVswXSksTWUucHVzaChbdmVbM10sITFdKSx0aT1bXSxEbj0hMX1icmVhaztjYXNlInN0eWxlIjoiLyI9PT12ZVsxXT9DZShxbixmbixLbixEKTooZm49Q2ModmVbMF0pLEtuPSIiKTticmVhaztjYXNlIm51bWJlcmZvcm1hdCI6Zm4ubmY9RXIoQ2ModmVbMF0pLkZvcm1hdHx8'@;
put 'IkdlbmVyYWwiKSxyZVtmbi5uZl0mJihmbi5uZj1yZVtmbi5uZl0pO2Zvcih2YXIgZm89MDszOTIhPWZvJiZTLl90YWJsZVtmb10hPWZuLm5mOysrZm8pO2lmKDM5Mj09Zm8pZm9yKGZvPTU3OzM5MiE9Zm87KytmbylpZihudWxsPT1TLl90YWJsZVtmb10pe1MubG9hZChmbi5uZixmbyk7YnJl'@;
put 'YWt9YnJlYWs7Y2FzZSJjb2x1bW4iOmlmKCJ0YWJsZSIhPT1NZVtNZS5sZW5ndGgtMV1bMF18fCIvIj09PXZlWzFdKWJyZWFrO2lmKChmcj1DYyh2ZVswXSkpLkhpZGRlbiYmKGZyLmhpZGRlbj0hMCxkZWxldGUgZnIuSGlkZGVuKSxmci5XaWR0aD9mci53cHg9NCpwYXJzZUludChmci5XaWR0'@;
put 'aCwxMCkvMzorZnIuQXV0b0ZpdFdpZHRoJiYoZnIuYXV0bz0xKSwhRG4mJmZyLndweD4xMCl7RG49ITAsX3M9Qng7Zm9yKHZhciBSbz0wO1JvPHRpLmxlbmd0aDsrK1JvKXRpW1JvXSYmX2ModGlbUm9dKX1EbiYmX2MoZnIpLHRpW2ZyLkluZGV4LTF8fHRpLmxlbmd0aF09ZnI7Zm9yKHZhciBU'@;
put 'bz0wO1RvPCtmci5TcGFuOysrVG8pdGlbdGkubGVuZ3RoXT1KdChmcik7YnJlYWs7Y2FzZSJuYW1lZHJhbmdlIjppZigiLyI9PT12ZVsxXSlicmVhazt6ci5OYW1lc3x8KHpyLk5hbWVzPVtdKTt2YXIgbWk9Y24odmVbMF0pLHJsPXtOYW1lOm1pLk5hbWUsUmVmOkEyKG1pLlJlZmVyc1RvLnNs'@;
put 'aWNlKDEpLHtyOjAsYzowfSl9O3pyLlNoZWV0cy5sZW5ndGg+MCYmKHJsLlNoZWV0PXpyLlNoZWV0cy5sZW5ndGgtMSksenIuTmFtZXMucHVzaChybCk7YnJlYWs7Y2FzZSJuYW1lZGNlbGwiOmNhc2UiYiI6Y2FzZSJpIjpjYXNlInUiOmNhc2UicyI6Y2FzZSJlbSI6Y2FzZSJoMiI6Y2FzZSJo'@;
put 'MyI6Y2FzZSJzdWIiOmNhc2Uic3VwIjpjYXNlInNwYW4iOmNhc2UicHJvdGVjdGlvbiI6Y2FzZSJwYXJhZ3JhcGhzIjpjYXNlIm5hbWUiOmJyZWFrO2Nhc2UiYWxpZ25tZW50IjppZighRC5jZWxsU3R5bGVzfHwiLyI9PT12ZVsxXSlicmVhaztmbi5BbGlnbm1lbnQ9Q2ModmVbMF0pO2JyZWFr'@;
put 'O2Nhc2UiYm9yZGVycyI6Ii8iIT09dmVbMV0mJihmbi5Cb3JkZXJzPVtdKTticmVhaztjYXNlImJvcmRlciI6aWYoIi8iPT09dmVbMV0pYnJlYWs7Zm4uQm9yZGVyc3x8KGZuLkJvcmRlcnM9W10pLGZuLkJvcmRlcnMucHVzaChDYyh2ZVswXSkpO2JyZWFrO2Nhc2UiZm9udCI6aWYoIi8+Ij09'@;
put 'PXZlWzBdLnNsaWNlKC0yKSl7S24rPXZlWzBdO2JyZWFrfSIvIj09PXZlWzFdP0tuKz1lZS5zbGljZSh6bix2ZS5pbmRleCt2ZVswXS5sZW5ndGgpOnpuPXZlLmluZGV4O2JyZWFrO2Nhc2UiaW50ZXJpb3IiOmlmKCFELmNlbGxTdHlsZXN8fCIvIj09PXZlWzFdKWJyZWFrO2ZuLkludGVyaW9y'@;
put 'PUNjKHZlWzBdKTticmVhaztjYXNlImF1dGhvciI6Y2FzZSJ0aXRsZSI6Y2FzZSJkZXNjcmlwdGlvbiI6Y2FzZSJjcmVhdGVkIjpjYXNlImtleXdvcmRzIjpjYXNlInN1YmplY3QiOmNhc2UiY2F0ZWdvcnkiOmNhc2UiY29tcGFueSI6Y2FzZSJsYXN0YXV0aG9yIjpjYXNlImxhc3RzYXZlZCI6'@;
put 'Y2FzZSJsYXN0cHJpbnRlZCI6Y2FzZSJ2ZXJzaW9uIjpjYXNlInJldmlzaW9uIjpjYXNlInRvdGFsdGltZSI6Y2FzZSJoeXBlcmxpbmtiYXNlIjpjYXNlIm1hbmFnZXIiOmNhc2UiY29udGVudHN0YXR1cyI6Y2FzZSJpZGVudGlmaWVyIjpjYXNlImxhbmd1YWdlIjpjYXNlImFwcG5hbWUiOmlm'@;
put 'KCIvPiI9PT12ZVswXS5zbGljZSgtMikpYnJlYWs7Ii8iPT09dmVbMV0/WGYoZXIsd28sZWUuc2xpY2UoWW4sdmUuaW5kZXgpKTpZbj12ZS5pbmRleCt2ZVswXS5sZW5ndGg7YnJlYWs7Y2FzZSJzdHlsZXMiOmNhc2Uid29ya2Jvb2siOmlmKCIvIj09PXZlWzFdKXtpZigoamU9TWUucG9wKCkp'@;
put 'WzBdIT09dmVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIramUuam9pbigifCIpKX1lbHNlIE1lLnB1c2goW3ZlWzNdLCExXSk7YnJlYWs7Y2FzZSJjb21tZW50IjppZigiLyI9PT12ZVsxXSl7aWYoKGplPU1lLnBvcCgpKVswXSE9PXZlWzNdKXRocm93IG5ldyBFcnJvcigiQmFk'@;
put 'IHN0YXRlOiAiK2plLmpvaW4oInwiKSk7TlYoSWkpLEVpLnB1c2goSWkpfWVsc2UgTWUucHVzaChbdmVbM10sITFdKSxJaT17YTooamU9Q2ModmVbMF0pKS5BdXRob3J9O2JyZWFrO2Nhc2UiYXV0b2ZpbHRlciI6aWYoIi8iPT09dmVbMV0pe2lmKChqZT1NZS5wb3AoKSlbMF0hPT12ZVszXSl0'@;
put 'aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitqZS5qb2luKCJ8IikpfWVsc2UgaWYoIi8iIT09dmVbMF0uY2hhckF0KHZlWzBdLmxlbmd0aC0yKSl7dmFyIEFuPUNjKHZlWzBdKTtpdFsiIWF1dG9maWx0ZXIiXT17cmVmOkEyKEFuLlJhbmdlKS5yZXBsYWNlKC9cJC9nLCIiKX0sTWUucHVz'@;
put 'aChbdmVbM10sITBdKX1icmVhaztjYXNlImRhdGF2YWxpZGF0aW9uIjppZihpdFsiIXZhbGlkYXRpb25zIl18fChpdFsiIXZhbGlkYXRpb25zIl09W10pLCIvIj09PXZlWzFdKXtpZigoamU9TWUucG9wKCkpWzBdIT09dmVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIramUuam9p'@;
put 'bigifCIpKX1lbHNlIi8iIT09dmVbMF0uY2hhckF0KHZlWzBdLmxlbmd0aC0yKSYmTWUucHVzaChbdmVbM10sITBdKSxsaT17fTticmVhaztjYXNlInBpeGVsc3BlcmluY2giOmlmKCIvIj09PXZlWzFdKXt2YXIgQWE9K2VlLnNsaWNlKGt0LHZlLmluZGV4KTsoNzI9PUFhfHw5Nj09QWEpJiZw'@;
put 'OChBYSl9ZWxzZSBrdD12ZS5pbmRleCt2ZVswXS5sZW5ndGg7YnJlYWs7Y2FzZSJjb21wb25lbnRvcHRpb25zIjpjYXNlImRvY3VtZW50cHJvcGVydGllcyI6Y2FzZSJjdXN0b21kb2N1bWVudHByb3BlcnRpZXMiOmNhc2Uib2ZmaWNlZG9jdW1lbnRzZXR0aW5ncyI6Y2FzZSJwaXZvdHRhYmxl'@;
put 'IjpjYXNlInBpdm90Y2FjaGUiOmNhc2UibmFtZXMiOmNhc2UibWFwaW5mbyI6Y2FzZSJwYWdlYnJlYWtzIjpjYXNlInF1ZXJ5dGFibGUiOmNhc2Uic29ydGluZyI6Y2FzZSJzY2hlbWEiOmNhc2UiY29uZGl0aW9uYWxmb3JtYXR0aW5nIjpjYXNlInNtYXJ0dGFndHlwZSI6Y2FzZSJzbWFydHRh'@;
put 'Z3MiOmNhc2UiZXhjZWx3b3JrYm9vayI6Y2FzZSJ3b3JrYm9va29wdGlvbnMiOmNhc2Uid29ya3NoZWV0b3B0aW9ucyI6aWYoIi8iPT09dmVbMV0pe2lmKChqZT1NZS5wb3AoKSlbMF0hPT12ZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitqZS5qb2luKCJ8IikpfWVsc2UiLyIh'@;
put 'PT12ZVswXS5jaGFyQXQodmVbMF0ubGVuZ3RoLTIpJiZNZS5wdXNoKFt2ZVszXSwhMF0pO2JyZWFrO2RlZmF1bHQ6aWYoMD09TWUubGVuZ3RoJiYiZG9jdW1lbnQiPT12ZVszXXx8MD09TWUubGVuZ3RoJiYidW9mIj09dmVbM10pcmV0dXJuIFV3KGVlLEQpO3ZhciBNYT0hMDtzd2l0Y2goTWVb'@;
put 'TWUubGVuZ3RoLTFdWzBdKXtjYXNlIm9mZmljZWRvY3VtZW50c2V0dGluZ3MiOnN3aXRjaCh2ZVszXSl7Y2FzZSJhbGxvd3BuZyI6Y2FzZSJyZW1vdmVwZXJzb25hbGluZm9ybWF0aW9uIjpjYXNlImRvd25sb2FkY29tcG9uZW50cyI6Y2FzZSJsb2NhdGlvbm9mY29tcG9uZW50cyI6Y2FzZSJj'@;
put 'b2xvcnMiOmNhc2UiY29sb3IiOmNhc2UiaW5kZXgiOmNhc2UicmdiIjpjYXNlInRhcmdldHNjcmVlbnNpemUiOmNhc2UicmVhZG9ubHlyZWNvbW1lbmRlZCI6YnJlYWs7ZGVmYXVsdDpNYT0hMX1icmVhaztjYXNlImNvbXBvbmVudG9wdGlvbnMiOnN3aXRjaCh2ZVszXSl7Y2FzZSJ0b29sYmFy'@;
put 'IjpjYXNlImhpZGVvZmZpY2Vsb2dvIjpjYXNlInNwcmVhZHNoZWV0YXV0b2ZpdCI6Y2FzZSJsYWJlbCI6Y2FzZSJjYXB0aW9uIjpjYXNlIm1heGhlaWdodCI6Y2FzZSJtYXh3aWR0aCI6Y2FzZSJuZXh0c2hlZXRudW1iZXIiOmJyZWFrO2RlZmF1bHQ6TWE9ITF9YnJlYWs7Y2FzZSJleGNlbHdv'@;
put 'cmtib29rIjpzd2l0Y2godmVbM10pe2Nhc2UiZGF0ZTE5MDQiOnpyLldCUHJvcHMuZGF0ZTE5MDQ9ITA7YnJlYWs7Y2FzZSJ3aW5kb3doZWlnaHQiOmNhc2Uid2luZG93d2lkdGgiOmNhc2Uid2luZG93dG9weCI6Y2FzZSJ3aW5kb3d0b3B5IjpjYXNlInRhYnJhdGlvIjpjYXNlInByb3RlY3Rz'@;
put 'dHJ1Y3R1cmUiOmNhc2UicHJvdGVjdHdpbmRvdyI6Y2FzZSJwcm90ZWN0d2luZG93cyI6Y2FzZSJhY3RpdmVzaGVldCI6Y2FzZSJkaXNwbGF5aW5rbm90ZXMiOmNhc2UiZmlyc3R2aXNpYmxlc2hlZXQiOmNhc2Uic3VwYm9vayI6Y2FzZSJzaGVldG5hbWUiOmNhc2Uic2hlZXRpbmRleCI6Y2Fz'@;
put 'ZSJzaGVldGluZGV4Zmlyc3QiOmNhc2Uic2hlZXRpbmRleGxhc3QiOmNhc2UiZGxsIjpjYXNlImFjY2VwdGxhYmVsc2luZm9ybXVsYXMiOmNhc2UiZG9ub3RzYXZlbGlua3ZhbHVlcyI6Y2FzZSJpdGVyYXRpb24iOmNhc2UibWF4aXRlcmF0aW9ucyI6Y2FzZSJtYXhjaGFuZ2UiOmNhc2UicGF0'@;
put 'aCI6Y2FzZSJ4Y3QiOmNhc2UiY291bnQiOmNhc2Uic2VsZWN0ZWRzaGVldHMiOmNhc2UiY2FsY3VsYXRpb24iOmNhc2UidW5jYWxjZWQiOmNhc2Uic3RhcnR1cHByb21wdCI6Y2FzZSJjcm4iOmNhc2UiZXh0ZXJubmFtZSI6Y2FzZSJmb3JtdWxhIjpjYXNlImNvbGZpcnN0IjpjYXNlImNvbGxh'@;
put 'c3QiOmNhc2Uid2FudGFkdmlzZSI6Y2FzZSJib29sZWFuIjpjYXNlImVycm9yIjpjYXNlInRleHQiOmNhc2Uib2xlIjpjYXNlIm5vYXV0b3JlY292ZXIiOmNhc2UicHVibGlzaG9iamVjdHMiOmNhc2UiZG9ub3RjYWxjdWxhdGViZWZvcmVzYXZlIjpjYXNlIm51bWJlciI6Y2FzZSJyZWZtb2Rl'@;
put 'cjFjMSI6Y2FzZSJlbWJlZHNhdmVzbWFydHRhZ3MiOmJyZWFrO2RlZmF1bHQ6TWE9ITF9YnJlYWs7Y2FzZSJ3b3JrYm9va29wdGlvbnMiOnN3aXRjaCh2ZVszXSl7Y2FzZSJvd2N2ZXJzaW9uIjpjYXNlImhlaWdodCI6Y2FzZSJ3aWR0aCI6YnJlYWs7ZGVmYXVsdDpNYT0hMX1icmVhaztjYXNl'@;
put 'IndvcmtzaGVldG9wdGlvbnMiOnN3aXRjaCh2ZVszXSl7Y2FzZSJ2aXNpYmxlIjppZigiLz4iIT09dmVbMF0uc2xpY2UoLTIpKWlmKCIvIj09PXZlWzFdKXN3aXRjaChlZS5zbGljZShZbix2ZS5pbmRleCkpe2Nhc2UiU2hlZXRIaWRkZW4iOnppLkhpZGRlbj0xO2JyZWFrO2Nhc2UiU2hlZXRW'@;
put 'ZXJ5SGlkZGVuIjp6aS5IaWRkZW49Mn1lbHNlIFluPXZlLmluZGV4K3ZlWzBdLmxlbmd0aDticmVhaztjYXNlImhlYWRlciI6aXRbIiFtYXJnaW5zIl18fEkyKGl0WyIhbWFyZ2lucyJdPXt9LCJ4bG1sIiksaXRbIiFtYXJnaW5zIl0uaGVhZGVyPWNuKHZlWzBdKS5NYXJnaW47YnJlYWs7Y2Fz'@;
put 'ZSJmb290ZXIiOml0WyIhbWFyZ2lucyJdfHxJMihpdFsiIW1hcmdpbnMiXT17fSwieGxtbCIpLGl0WyIhbWFyZ2lucyJdLmZvb3Rlcj1jbih2ZVswXSkuTWFyZ2luO2JyZWFrO2Nhc2UicGFnZW1hcmdpbnMiOnZhciBJcz1jbih2ZVswXSk7aXRbIiFtYXJnaW5zIl18fEkyKGl0WyIhbWFyZ2lu'@;
put 'cyJdPXt9LCJ4bG1sIiksSXMuVG9wJiYoaXRbIiFtYXJnaW5zIl0udG9wPUlzLlRvcCksSXMuTGVmdCYmKGl0WyIhbWFyZ2lucyJdLmxlZnQ9SXMuTGVmdCksSXMuUmlnaHQmJihpdFsiIW1hcmdpbnMiXS5yaWdodD1Jcy5SaWdodCksSXMuQm90dG9tJiYoaXRbIiFtYXJnaW5zIl0uYm90dG9t'@;
put 'PUlzLkJvdHRvbSk7YnJlYWs7Y2FzZSJkaXNwbGF5cmlnaHR0b2xlZnQiOnpyLlZpZXdzfHwoenIuVmlld3M9W10pLHpyLlZpZXdzWzBdfHwoenIuVmlld3NbMF09e30pLHpyLlZpZXdzWzBdLlJUTD0hMDticmVhaztjYXNlImZyZWV6ZXBhbmVzIjpjYXNlImZyb3plbm5vc3BsaXQiOmNhc2Ui'@;
put 'YWN0aXZlcm93IjpjYXNlImFjdGl2ZWNvbCI6Y2FzZSJ0b3Byb3dib3R0b21wYW5lIjpjYXNlImxlZnRjb2x1bW5yaWdodHBhbmUiOmNhc2UidW5zeW5jZWQiOmNhc2UicHJpbnQiOmNhc2UicHJpbnRlcnJvcnMiOmNhc2UicGFuZXMiOmNhc2Uic2NhbGUiOmNhc2UicGFuZSI6Y2FzZSJudW1i'@;
put 'ZXIiOmNhc2UibGF5b3V0IjpjYXNlInBhZ2VzZXR1cCI6Y2FzZSJzZWxlY3RlZCI6Y2FzZSJwcm90ZWN0b2JqZWN0cyI6Y2FzZSJlbmFibGVzZWxlY3Rpb24iOmNhc2UicHJvdGVjdHNjZW5hcmlvcyI6Y2FzZSJ2YWxpZHByaW50ZXJpbmZvIjpjYXNlImhvcml6b250YWxyZXNvbHV0aW9uIjpj'@;
put 'YXNlInZlcnRpY2FscmVzb2x1dGlvbiI6Y2FzZSJudW1iZXJvZmNvcGllcyI6Y2FzZSJhY3RpdmVwYW5lIjpjYXNlInRvcHJvd3Zpc2libGUiOmNhc2UibGVmdGNvbHVtbnZpc2libGUiOmNhc2UiZml0dG9wYWdlIjpjYXNlInJhbmdlc2VsZWN0aW9uIjpjYXNlInBhcGVyc2l6ZWluZGV4Ijpj'@;
put 'YXNlInBhZ2VsYXlvdXR6b29tIjpjYXNlInBhZ2VicmVha3pvb20iOmNhc2UiZmlsdGVyb24iOmNhc2UiZml0d2lkdGgiOmNhc2UiZml0aGVpZ2h0IjpjYXNlImNvbW1lbnRzbGF5b3V0IjpjYXNlInpvb20iOmNhc2UibGVmdHRvcmlnaHQiOmNhc2UiZ3JpZGxpbmVzIjpjYXNlImFsbG93c29y'@;
put 'dCI6Y2FzZSJhbGxvd2ZpbHRlciI6Y2FzZSJhbGxvd2luc2VydHJvd3MiOmNhc2UiYWxsb3dkZWxldGVyb3dzIjpjYXNlImFsbG93aW5zZXJ0Y29scyI6Y2FzZSJhbGxvd2RlbGV0ZWNvbHMiOmNhc2UiYWxsb3dpbnNlcnRoeXBlcmxpbmtzIjpjYXNlImFsbG93Zm9ybWF0Y2VsbHMiOmNhc2Ui'@;
put 'YWxsb3dzaXplY29scyI6Y2FzZSJhbGxvd3NpemVyb3dzIjpjYXNlInRhYmNvbG9yaW5kZXgiOmNhc2UiZG9ub3RkaXNwbGF5aGVhZGluZ3MiOmNhc2Uic2hvd3BhZ2VsYXlvdXR6b29tIjpjYXNlImJsYWNrYW5kd2hpdGUiOmNhc2UiZG9ub3RkaXNwbGF5emVyb3MiOmNhc2UiZGlzcGxheXBh'@;
put 'Z2VicmVhayI6Y2FzZSJyb3djb2xoZWFkaW5ncyI6Y2FzZSJkb25vdGRpc3BsYXlvdXRsaW5lIjpjYXNlIm5vb3JpZW50YXRpb24iOmNhc2UiYWxsb3d1c2VwaXZvdHRhYmxlcyI6Y2FzZSJ6ZXJvaGVpZ2h0IjpjYXNlInZpZXdhYmxlcmFuZ2UiOmNhc2Uic2VsZWN0aW9uIjpjYXNlInByb3Rl'@;
put 'Y3Rjb250ZW50cyI6YnJlYWs7Y2FzZSJzcGxpdGhvcml6b250YWwiOmNhc2Uic3BsaXR2ZXJ0aWNhbCI6aWYoIi8+IiE9PXZlWzBdLnNsaWNlKC0yKSlpZigiLyI9PXZlWzFdKXtpdFsiIWZyZWV6ZSJdfHwoaXRbIiFmcmVlemUiXT0iQTEiKTt2YXIgdXM9Y2EoaXRbIiFmcmVlemUiXSk7InNw'@;
put 'bGl0aG9yaXpvbnRhbCI9PXZlWzNdP3VzLnI9K2VlLnNsaWNlKFluLHZlLmluZGV4KTp1cy5jPStlZS5zbGljZShZbix2ZS5pbmRleCksaXRbIiFmcmVlemUiXT1waSh1cyl9ZWxzZSBZbj12ZS5pbmRleCt2ZVswXS5sZW5ndGg7YnJlYWs7Y2FzZSJkb25vdGRpc3BsYXlncmlkbGluZXMiOml0'@;
put 'WyIhZ3JpZGxpbmVzIl09ITE7YnJlYWs7Y2FzZSJub3N1bW1hcnlyb3dzYmVsb3dkZXRhaWwiOml0WyIhb3V0bGluZSJdfHwoaXRbIiFvdXRsaW5lIl09e30pLGl0WyIhb3V0bGluZSJdLmFib3ZlPSEwO2JyZWFrO2Nhc2Uibm9zdW1tYXJ5Y29sdW1uc3JpZ2h0ZGV0YWlsIjppdFsiIW91dGxp'@;
put 'bmUiXXx8KGl0WyIhb3V0bGluZSJdPXt9KSxpdFsiIW91dGxpbmUiXS5sZWZ0PSEwO2JyZWFrO2RlZmF1bHQ6TWE9ITF9YnJlYWs7Y2FzZSJwaXZvdHRhYmxlIjpjYXNlInBpdm90Y2FjaGUiOnN3aXRjaCh2ZVszXSl7Y2FzZSJpbW1lZGlhdGVpdGVtc29uZHJvcCI6Y2FzZSJzaG93cGFnZW11'@;
put 'bHRpcGxlaXRlbWxhYmVsIjpjYXNlImNvbXBhY3Ryb3dpbmRlbnQiOmNhc2UibG9jYXRpb24iOmNhc2UicGl2b3RmaWVsZCI6Y2FzZSJvcmllbnRhdGlvbiI6Y2FzZSJsYXlvdXRmb3JtIjpjYXNlImxheW91dHN1YnRvdGFsbG9jYXRpb24iOmNhc2UibGF5b3V0Y29tcGFjdHJvdyI6Y2FzZSJw'@;
put 'b3NpdGlvbiI6Y2FzZSJwaXZvdGl0ZW0iOmNhc2UiZGF0YXR5cGUiOmNhc2UiZGF0YWZpZWxkIjpjYXNlInNvdXJjZW5hbWUiOmNhc2UicGFyZW50ZmllbGQiOmNhc2UicHRsaW5laXRlbXMiOmNhc2UicHRsaW5laXRlbSI6Y2FzZSJjb3VudG9mc2FtZWl0ZW1zIjpjYXNlIml0ZW0iOmNhc2Ui'@;
put 'aXRlbXR5cGUiOmNhc2UicHRzb3VyY2UiOmNhc2UiY2FjaGVpbmRleCI6Y2FzZSJjb25zb2xpZGF0aW9ucmVmZXJlbmNlIjpjYXNlImZpbGVuYW1lIjpjYXNlInJlZmVyZW5jZSI6Y2FzZSJub2NvbHVtbmdyYW5kIjpjYXNlIm5vcm93Z3JhbmQiOmNhc2UiYmxhbmtsaW5lYWZ0ZXJpdGVtcyI6'@;
put 'Y2FzZSJoaWRkZW4iOmNhc2Uic3VidG90YWwiOmNhc2UiYmFzZWZpZWxkIjpjYXNlIm1hcGNoaWxkaXRlbXMiOmNhc2UiZnVuY3Rpb24iOmNhc2UicmVmcmVzaG9uZmlsZW9wZW4iOmNhc2UicHJpbnRzZXR0aXRsZXMiOmNhc2UibWVyZ2VsYWJlbHMiOmNhc2UiZGVmYXVsdHZlcnNpb24iOmNh'@;
put 'c2UicmVmcmVzaG5hbWUiOmNhc2UicmVmcmVzaGRhdGUiOmNhc2UicmVmcmVzaGRhdGVjb3B5IjpjYXNlInZlcnNpb25sYXN0cmVmcmVzaCI6Y2FzZSJ2ZXJzaW9ubGFzdHVwZGF0ZSI6Y2FzZSJ2ZXJzaW9udXBkYXRlYWJsZW1pbiI6Y2FzZSJ2ZXJzaW9ucmVmcmVzaGFibGVtaW4iOmNhc2Ui'@;
put 'Y2FsY3VsYXRpb24iOmJyZWFrO2RlZmF1bHQ6TWE9ITF9YnJlYWs7Y2FzZSJwYWdlYnJlYWtzIjpzd2l0Y2godmVbM10pe2Nhc2UiY29sYnJlYWtzIjpjYXNlImNvbGJyZWFrIjpjYXNlInJvd2JyZWFrcyI6Y2FzZSJyb3dicmVhayI6Y2FzZSJjb2xzdGFydCI6Y2FzZSJjb2xlbmQiOmNhc2Ui'@;
put 'cm93ZW5kIjpicmVhaztkZWZhdWx0Ok1hPSExfWJyZWFrO2Nhc2UiYXV0b2ZpbHRlciI6c3dpdGNoKHZlWzNdKXtjYXNlImF1dG9maWx0ZXJjb2x1bW4iOmNhc2UiYXV0b2ZpbHRlcmNvbmRpdGlvbiI6Y2FzZSJhdXRvZmlsdGVyYW5kIjpjYXNlImF1dG9maWx0ZXJvciI6YnJlYWs7ZGVmYXVs'@;
put 'dDpNYT0hMX1icmVhaztjYXNlInF1ZXJ5dGFibGUiOnN3aXRjaCh2ZVszXSl7Y2FzZSJpZCI6Y2FzZSJhdXRvZm9ybWF0Zm9udCI6Y2FzZSJhdXRvZm9ybWF0cGF0dGVybiI6Y2FzZSJxdWVyeXNvdXJjZSI6Y2FzZSJxdWVyeXR5cGUiOmNhc2UiZW5hYmxlcmVkaXJlY3Rpb25zIjpjYXNlInJl'@;
put 'ZnJlc2hlZGlueGw5IjpjYXNlInVybHN0cmluZyI6Y2FzZSJodG1sdGFibGVzIjpjYXNlImNvbm5lY3Rpb24iOmNhc2UiY29tbWFuZHRleHQiOmNhc2UicmVmcmVzaGluZm8iOmNhc2Uibm90aXRsZXMiOmNhc2UibmV4dGlkIjpjYXNlImNvbHVtbmluZm8iOmNhc2Uib3ZlcndyaXRlY2VsbHMi'@;
put 'OmNhc2UiZG9ub3Rwcm9tcHRmb3JmaWxlIjpjYXNlInRleHR3aXphcmRzZXR0aW5ncyI6Y2FzZSJzb3VyY2UiOmNhc2UibnVtYmVyIjpjYXNlImRlY2ltYWwiOmNhc2UidGhvdXNhbmRzZXBhcmF0b3IiOmNhc2UidHJhaWxpbmdtaW51c251bWJlcnMiOmNhc2UiZm9ybWF0c2V0dGluZ3MiOmNh'@;
put 'c2UiZmllbGR0eXBlIjpjYXNlImRlbGltaXRlcnMiOmNhc2UidGFiIjpjYXNlImNvbW1hIjpjYXNlImF1dG9mb3JtYXRuYW1lIjpjYXNlInZlcnNpb25sYXN0ZWRpdCI6Y2FzZSJ2ZXJzaW9ubGFzdHJlZnJlc2giOmJyZWFrO2RlZmF1bHQ6TWE9ITF9YnJlYWs7Y2FzZSJkYXRhdmFsaWRhdGlv'@;
put 'biI6c3dpdGNoKHZlWzNdKXtjYXNlInJhbmdlIjpsaS5yZWY9dmU7YnJlYWs7Y2FzZSJ0eXBlIjpjYXNlIm1pbiI6Y2FzZSJtYXgiOmNhc2Uic29ydCI6Y2FzZSJkZXNjZW5kaW5nIjpjYXNlIm9yZGVyIjpjYXNlImNhc2VzZW5zaXRpdmUiOmNhc2UidmFsdWUiOmNhc2UiZXJyb3JzdHlsZSI6'@;
put 'Y2FzZSJlcnJvcm1lc3NhZ2UiOmNhc2UiZXJyb3J0aXRsZSI6Y2FzZSJpbnB1dG1lc3NhZ2UiOmNhc2UiaW5wdXR0aXRsZSI6Y2FzZSJjb21ib2hpZGUiOmNhc2UiaW5wdXRoaWRlIjpjYXNlImNvbmRpdGlvbiI6Y2FzZSJxdWFsaWZpZXIiOmNhc2UidXNlYmxhbmsiOmNhc2UidmFsdWUxIjpj'@;
put 'YXNlInZhbHVlMiI6Y2FzZSJmb3JtYXQiOmNhc2UiY2VsbHJhbmdlbGlzdCI6YnJlYWs7ZGVmYXVsdDpNYT0hMX1icmVhaztjYXNlInNvcnRpbmciOmNhc2UiY29uZGl0aW9uYWxmb3JtYXR0aW5nIjpzd2l0Y2godmVbM10pe2Nhc2UicmFuZ2UiOmNhc2UidHlwZSI6Y2FzZSJtaW4iOmNhc2Ui'@;
put 'bWF4IjpjYXNlInNvcnQiOmNhc2UiZGVzY2VuZGluZyI6Y2FzZSJvcmRlciI6Y2FzZSJjYXNlc2Vuc2l0aXZlIjpjYXNlInZhbHVlIjpjYXNlImVycm9yc3R5bGUiOmNhc2UiZXJyb3JtZXNzYWdlIjpjYXNlImVycm9ydGl0bGUiOmNhc2UiY2VsbHJhbmdlbGlzdCI6Y2FzZSJpbnB1dG1lc3Nh'@;
put 'Z2UiOmNhc2UiaW5wdXR0aXRsZSI6Y2FzZSJjb21ib2hpZGUiOmNhc2UiaW5wdXRoaWRlIjpjYXNlImNvbmRpdGlvbiI6Y2FzZSJxdWFsaWZpZXIiOmNhc2UidXNlYmxhbmsiOmNhc2UidmFsdWUxIjpjYXNlInZhbHVlMiI6Y2FzZSJmb3JtYXQiOmJyZWFrO2RlZmF1bHQ6TWE9ITF9YnJlYWs7'@;
put 'Y2FzZSJtYXBpbmZvIjpjYXNlInNjaGVtYSI6Y2FzZSJkYXRhIjpzd2l0Y2godmVbM10pe2Nhc2UibWFwIjpjYXNlImVudHJ5IjpjYXNlInJhbmdlIjpjYXNlInhwYXRoIjpjYXNlImZpZWxkIjpjYXNlInhzZHR5cGUiOmNhc2UiZmlsdGVyb24iOmNhc2UiYWdncmVnYXRlIjpjYXNlImVsZW1l'@;
put 'bnR0eXBlIjpjYXNlImF0dHJpYnV0ZXR5cGUiOmNhc2Uic2NoZW1hIjpjYXNlImVsZW1lbnQiOmNhc2UiY29tcGxleHR5cGUiOmNhc2UiZGF0YXR5cGUiOmNhc2UiYWxsIjpjYXNlImF0dHJpYnV0ZSI6Y2FzZSJleHRlbmRzIjpjYXNlInJvdyI6YnJlYWs7ZGVmYXVsdDpNYT0hMX1icmVhaztj'@;
put 'YXNlInNtYXJ0dGFncyI6YnJlYWs7ZGVmYXVsdDpNYT0hMX1pZihNYXx8dmVbM10ubWF0Y2goLyFcW0NEQVRBLykpYnJlYWs7aWYoIU1lW01lLmxlbmd0aC0xXVsxXSl0aHJvdyJVbnJlY29nbml6ZWQgdGFnOiAiK3ZlWzNdKyJ8IitNZS5qb2luKCJ8Iik7aWYoImN1c3RvbWRvY3VtZW50cHJv'@;
put 'cGVydGllcyI9PT1NZVtNZS5sZW5ndGgtMV1bMF0pe2lmKCIvPiI9PT12ZVswXS5zbGljZSgtMikpYnJlYWs7Ii8iPT09dmVbMV0/UmUodHIsd28sanIsZWUuc2xpY2UoWW4sdmUuaW5kZXgpKTooanI9dmUsWW49dmUuaW5kZXgrdmVbMF0ubGVuZ3RoKTticmVha31pZihELldURil0aHJvdyJV'@;
put 'bnJlY29nbml6ZWQgdGFnOiAiK3ZlWzNdKyJ8IitNZS5qb2luKCJ8Iil9dmFyIHdzPXt9O3JldHVybiFELmJvb2tTaGVldHMmJiFELmJvb2tQcm9wcyYmKHdzLlNoZWV0cz1VZSksd3MuU2hlZXROYW1lcz1YZSx3cy5Xb3JrYm9vaz16cix3cy5TU0Y9Uy5nZXRfdGFibGUoKSx3cy5Qcm9wcz1l'@;
put 'cix3cy5DdXN0cHJvcHM9dHIsd3MuU2hlZXRzJiZ3cy5TaGVldE5hbWVzLmZvckVhY2goZnVuY3Rpb24odWMpe3ZhciBucz13cy5TaGVldHNbdWNdO25zWyIhbWVyZ2VzIl0mJm5zWyIhbWVyZ2VzIl0uZm9yRWFjaChmdW5jdGlvbihRdCl7InN0cmluZyI9PXR5cGVvZiBRdCYmKFF0PUgudXRp'@;
put 'bHMuZGVjb2RlX3JhbmdlKFF0KSk7dmFyIHZuPUgudXRpbHMuZW5jb2RlX2NlbGwoUXQucyksUG49QXJyYXkuaXNBcnJheShucyk/KG5zW1F0LnMucl18fFtdKVtRdC5zLmNdOm5zW3ZuXTtQbiYmUG4ucyYmKG51bGwhPVBuLnMudG9wJiZlYS5zaGVldF9zZXRfcmFuZ2Vfc3R5bGUobnMsUXQs'@;
put 'e3RvcDpQbi5zLnRvcH0pLG51bGwhPVBuLnMuYm90dG9tJiZlYS5zaGVldF9zZXRfcmFuZ2Vfc3R5bGUobnMsUXQse2JvdHRvbTpQbi5zLmJvdHRvbX0pLG51bGwhPVBuLnMubGVmdCYmZWEuc2hlZXRfc2V0X3JhbmdlX3N0eWxlKG5zLFF0LHtsZWZ0OlBuLnMubGVmdH0pLG51bGwhPVBuLnMu'@;
put 'cmlnaHQmJmVhLnNoZWV0X3NldF9yYW5nZV9zdHlsZShucyxRdCx7cmlnaHQ6UG4ucy5yaWdodH0pKX0pfSksd3N9ZnVuY3Rpb24gZXModyxQKXtzd2l0Y2goZHYoUD1QfHx7fSksUC50eXBlfHwiYmFzZTY0Iil7Y2FzZSJiYXNlNjQiOnJldHVybiBHcihsZS5kZWNvZGUodyksUCk7Y2FzZSJi'@;
put 'aW5hcnkiOmNhc2UiYnVmZmVyIjpjYXNlImZpbGUiOnJldHVybiBHcih3LFApO2Nhc2UiYXJyYXkiOnJldHVybiBHcihGKHcpLFApfX1mdW5jdGlvbiBabih3KXtyZXR1cm4gTXIoIk5hbWVkUmFuZ2UiLG51bGwseyJzczpOYW1lIjp3Lk5hbWUsInNzOlJlZmVyc1RvIjoiPSIrSV8ody5SZWYs'@;
put 'e3I6MCxjOjB9KX0pfWZ1bmN0aW9uIEdUKHcsUCxELGVlLG9lLGdlLF9lKXtpZighd3x8bnVsbD09dy52JiZudWxsPT13LmYmJiFlZS5zaGVldFN0dWJzKXJldHVybiIiO3ZhciB2ZT17fTtpZih3LmYmJih2ZVsic3M6Rm9ybXVsYSJdPSI9IitCcihJXyh3LmYsX2UpKSksdy5GJiZ3LkYuc2xp'@;
put 'Y2UoMCxQLmxlbmd0aCk9PVApe3ZhciBNZT1jYSh3LkYuc2xpY2UoUC5sZW5ndGgrMSkpO3ZlWyJzczpBcnJheVJhbmdlIl09IlJDOlIiKyhNZS5yPT1fZS5yPyIiOiJbIisoTWUuci1fZS5yKSsiXSIpKyJDIisoTWUuYz09X2UuYz8iIjoiWyIrKE1lLmMtX2UuYykrIl0iKX1pZih3LmwmJncu'@;
put 'bC5UYXJnZXQmJih2ZVsic3M6SFJlZiJdPUJyKHcubC5UYXJnZXQpLHcubC5Ub29sdGlwJiYodmVbIng6SFJlZlNjcmVlblRpcCJdPUJyKHcubC5Ub29sdGlwKSkpLERbIiFtZXJnZXMiXSlmb3IodmFyIGplPURbIiFtZXJnZXMiXSxVZT0wO1VlIT1qZS5sZW5ndGg7KytVZSlqZVtVZV0ucy5j'@;
put 'IT1fZS5jfHxqZVtVZV0ucy5yIT1fZS5yfHwoamVbVWVdLmUuYz5qZVtVZV0ucy5jJiYodmVbInNzOk1lcmdlQWNyb3NzIl09amVbVWVdLmUuYy1qZVtVZV0ucy5jKSxqZVtVZV0uZS5yPmplW1VlXS5zLnImJih2ZVsic3M6TWVyZ2VEb3duIl09amVbVWVdLmUuci1qZVtVZV0ucy5yKSk7dmFy'@;
put 'IFhlPSIiLGl0PSIiO3N3aXRjaCh3LnQpe2Nhc2UieiI6aWYoIWVlLnNoZWV0U3R1YnMpcmV0dXJuIiI7YnJlYWs7Y2FzZSJuIjpYZT0iTnVtYmVyIixpdD1TdHJpbmcody52KTticmVhaztjYXNlImIiOlhlPSJCb29sZWFuIixpdD13LnY/IjEiOiIwIjticmVhaztjYXNlImUiOlhlPSJFcnJv'@;
put 'ciIsaXQ9bmFbdy52XTticmVhaztjYXNlImQiOlhlPSJEYXRlVGltZSIsaXQ9bmV3IERhdGUody52KS50b0lTT1N0cmluZygpLG51bGw9PXcueiYmKHcuej13Lnp8fFMuX3RhYmxlWzE0XSk7YnJlYWs7Y2FzZSJzIjpYZT0iU3RyaW5nIixpdD1zbyh3LnZ8fCIiKX12YXIgZnQ9d2MoZWUuY2Vs'@;
put 'bFhmcyxudWxsLHcsZWUpO3ZlWyJzczpTdHlsZUlEIl09InMiKygyMStmdCksdmVbInNzOkluZGV4Il09X2UuYysxO3ZhciBNdD1udWxsIT13LnY/aXQ6IiIsdXQ9InoiPT13LnQ/IiI6dy5SP2Z1bmN0aW9uIGpWKHcpe3JldHVybic8c3M6RGF0YSBzczpUeXBlPSJTdHJpbmciIHhtbG5zPSJo'@;
put 'dHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4nK3cubWFwKGZ1bmN0aW9uKEQpe3ZhciBlZT1zbyhELnYpO3JldHVybiBELnMmJihELnMuYm9sZCYmKGVlPSI8Qj4iK2VlKyI8L0I+IiksRC5zLml0YWxpYyYmKGVlPSI8ST4iK2VlKyI8L0k+IiksRC5zLnN0cmlrZSYmKGVlPSI8Uz4i'@;
put 'K2VlKyI8L1M+IiksRC5zLnVuZGVybGluZSYmKGVlPSI8VT4iK2VlKyI8L1U+IiksInN1cGVyIj09RC5zLnZhbGlnbiYmKGVlPSI8U3VwPiIrZWUrIjwvU3VwPiIpLCJzdWIiPT1ELnMudmFsaWduJiYoZWU9IjxTdWI+IitlZSsiPC9TdWI+IiksKEQucy5uYW1lfHxELnMuc3p8fEQucy5jb2xv'@;
put 'ciYmbnVsbCE9RC5zLmNvbG9yLnJnYikmJihlZT1bIjxGb250IixELnMubmFtZT8nIGh0bWw6RmFjZT0iJytELnMubmFtZSsnIic6IiIsRC5zLnN6PycgaHRtbDpTaXplPSInK0Qucy5zeisnIic6IiIsRC5zLmNvbG9yPycgaHRtbDpDb2xvcj0iIycrKCIwMDAwMDAiKygibnVtYmVyIj09dHlw'@;
put 'ZW9mIEQucy5jb2xvci5yZ2I/RC5zLmNvbG9yLnJnYi50b1N0cmluZygxNik6RC5zLmNvbG9yLnJnYikpLnNsaWNlKC02KSsnIic6IiIsIj4iLGVlLCI8L0ZvbnQ+Il0uam9pbigiIikpKSxlZX0pLmpvaW4oIiIpKyI8L0RhdGE+In0ody5SKTonPERhdGEgc3M6VHlwZT0iJytYZSsnIj4nK010'@;
put 'KyI8L0RhdGE+IjtyZXR1cm4ody5jfHxbXSkubGVuZ3RoPjAmJih1dCs9ZnVuY3Rpb24gRncodyl7cmV0dXJuIHcubWFwKGZ1bmN0aW9uKFApe3ZhciBlZT1Ncigic3M6RGF0YSIscG8oUC50fHwiIikse3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIn0pO3JldHVybiBN'@;
put 'cigiQ29tbWVudCIsZWUseyJzczpBdXRob3IiOlAuYX0pfSkuam9pbigiIil9KHcuYykpLE1yKCJDZWxsIix1dCx2ZSl9ZnVuY3Rpb24gJFQodyxQKXt2YXIgRD0nPFJvdyBzczpJbmRleD0iJysodysxKSsnIic7cmV0dXJuIFAmJihQLmhweCYmIVAuaHB0JiYoUC5ocHQ9dWgoUC5ocHgpKSxQ'@;
put 'LmhwdCYmKEQrPScgc3M6QXV0b0ZpdEhlaWdodD0iMCIgc3M6SGVpZ2h0PSInK1AuaHB0KyciJyksUC5oaWRkZW4mJihEKz0nIHNzOkhpZGRlbj0iMSInKSksRCsiPiJ9ZnVuY3Rpb24gR2UodyxQLEQpe3ZhciBlZT1bXSxnZT1ELlNoZWV0c1tELlNoZWV0TmFtZXNbd11dLF9lPWdlP2Z1bmN0'@;
put 'aW9uIFdUKHcsUCxELGVlKXtpZighd3x8ISgoZWV8fHt9KS5Xb3JrYm9va3x8e30pLk5hbWVzKXJldHVybiIiO2Zvcih2YXIgb2U9ZWUuV29ya2Jvb2suTmFtZXMsZ2U9W10sX2U9MDtfZTxvZS5sZW5ndGg7KytfZSl7dmFyIHZlPW9lW19lXTt2ZS5TaGVldD09RCYmKHZlLk5hbWUubWF0Y2go'@;
put 'L15feGxmblwuLyl8fGdlLnB1c2goWm4odmUpKSl9cmV0dXJuIGdlLmpvaW4oIiIpfShnZSwwLHcsRCk6IiI7cmV0dXJuIF9lLmxlbmd0aD4wJiZlZS5wdXNoKCI8TmFtZXM+IitfZSsiPC9OYW1lcz4iKSxfZT1nZT9mdW5jdGlvbiBLVCh3LFAsRCxlZSl7aWYoIXdbIiFyZWYiXSlyZXR1cm4i'@;
put 'Ijt2YXIgb2U9UGkod1siIXJlZiJdKSxnZT13WyIhbWVyZ2VzIl18fFtdLF9lPTAsdmU9W107d1siIWNvbHMiXSYmd1siIWNvbHMiXS5mb3JFYWNoKGZ1bmN0aW9uKHd0LEh0KXtfYyh3dCk7dmFyIGt0PSEhd3Qud2lkdGgsVHQ9dWQoSHQsd3QpLFl0PXsic3M6SW5kZXgiOkh0KzF9O2t0JiYo'@;
put 'WXRbInNzOldpZHRoIl09SXUoVHQud2lkdGgpKSx3dC5oaWRkZW4mJihZdFsic3M6SGlkZGVuIl09IjEiKSx2ZS5wdXNoKE1yKCJDb2x1bW4iLG51bGwsWXQpKX0pO2Zvcih2YXIgTWU9QXJyYXkuaXNBcnJheSh3KSxqZT1vZS5zLnI7amU8PW9lLmUucjsrK2plKXtmb3IodmFyIFVlPVskVChq'@;
put 'ZSwod1siIXJvd3MiXXx8W10pW2plXSldLFhlPW9lLnMuYztYZTw9b2UuZS5jOysrWGUpe3ZhciBpdD0hMTtmb3IoX2U9MDtfZSE9Z2UubGVuZ3RoOysrX2UpaWYoIShnZVtfZV0ucy5jPlhlfHxnZVtfZV0ucy5yPmplfHxnZVtfZV0uZS5jPFhlfHxnZVtfZV0uZS5yPGplKSl7KGdlW19lXS5z'@;
put 'LmMhPVhlfHxnZVtfZV0ucy5yIT1qZSkmJihpdD0hMCk7YnJlYWt9aWYoIWl0KXt2YXIgZnQ9e3I6amUsYzpYZX0sTXQ9cGkoZnQpO1VlLnB1c2goR1QoTWU/KHdbamVdfHxbXSlbWGVdOndbTXRdLE10LHcsUCwwLDAsZnQpKX19VWUucHVzaCgiPC9Sb3c+IiksVWUubGVuZ3RoPjImJnZlLnB1'@;
put 'c2goVWUuam9pbigiIikpfXJldHVybiB2ZS5qb2luKCIiKX0oZ2UsUCk6IiIsX2UubGVuZ3RoPjAmJmVlLnB1c2goIjxUYWJsZT4iK19lKyI8L1RhYmxlPiIpLGVlLnB1c2goZnVuY3Rpb24gRXQodyxQLEQsZWUpe2lmKCF3KXJldHVybiIiO3ZhciBvZT1bXTtpZih3WyIhbWFyZ2lucyJdJiYo'@;
put 'b2UucHVzaCgiPFBhZ2VTZXR1cD4iKSx3WyIhbWFyZ2lucyJdLmhlYWRlciYmb2UucHVzaChNcigiSGVhZGVyIixudWxsLHsieDpNYXJnaW4iOndbIiFtYXJnaW5zIl0uaGVhZGVyfSkpLHdbIiFtYXJnaW5zIl0uZm9vdGVyJiZvZS5wdXNoKE1yKCJGb290ZXIiLG51bGwseyJ4Ok1hcmdpbiI6'@;
put 'd1siIW1hcmdpbnMiXS5mb290ZXJ9KSksb2UucHVzaChNcigiUGFnZU1hcmdpbnMiLG51bGwseyJ4OkJvdHRvbSI6d1siIW1hcmdpbnMiXS5ib3R0b218fCIwLjc1IiwieDpMZWZ0Ijp3WyIhbWFyZ2lucyJdLmxlZnR8fCIwLjciLCJ4OlJpZ2h0Ijp3WyIhbWFyZ2lucyJdLnJpZ2h0fHwiMC43'@;
put 'IiwieDpUb3AiOndbIiFtYXJnaW5zIl0udG9wfHwiMC43NSJ9KSksb2UucHVzaCgiPC9QYWdlU2V0dXA+IikpLGVlJiZlZS5Xb3JrYm9vayYmZWUuV29ya2Jvb2suU2hlZXRzJiZlZS5Xb3JrYm9vay5TaGVldHNbRF0paWYoZWUuV29ya2Jvb2suU2hlZXRzW0RdLkhpZGRlbilvZS5wdXNoKE1y'@;
put 'KCJWaXNpYmxlIiwxPT1lZS5Xb3JrYm9vay5TaGVldHNbRF0uSGlkZGVuPyJTaGVldEhpZGRlbiI6IlNoZWV0VmVyeUhpZGRlbiIse30pKTtlbHNle2Zvcih2YXIgZ2U9MDtnZTxEJiYoIWVlLldvcmtib29rLlNoZWV0c1tnZV18fGVlLldvcmtib29rLlNoZWV0c1tnZV0uSGlkZGVuKTsrK2dl'@;
put 'KTtnZT09RCYmb2UucHVzaCgiPFNlbGVjdGVkLz4iKX1pZigoKCgoZWV8fHt9KS5Xb3JrYm9va3x8e30pLlZpZXdzfHxbXSlbMF18fHt9KS5SVEwmJm9lLnB1c2goIjxEaXNwbGF5UmlnaHRUb0xlZnQvPiIpLGhuKHdbIiFncmlkbGluZXMiXSkmJm9lLnB1c2goIjxEb05vdERpc3BsYXlHcmlk'@;
put 'bGluZXMvPiIpLHdbIiFmcmVlemUiXSl7b2UucHVzaCgiPEZyZWV6ZVBhbmVzLz4iKSxvZS5wdXNoKCI8RnJvemVuTm9TcGxpdC8+Iik7dmFyIF9lPWNhKHdbIiFmcmVlemUiXSk7X2Uucj4wJiYob2UucHVzaCh2YSgiU3BsaXRIb3Jpem9udGFsIiwiIitfZS5yKSksb2UucHVzaCh2YSgiVG9w'@;
put 'Um93Qm90dG9tUGFuZSIsIiIrX2UucikpKSxfZS5jPjAmJihvZS5wdXNoKHZhKCJTcGxpdFZlcnRpY2FsIiwiIitfZS5jKSksb2UucHVzaCh2YSgiTGVmdENvbHVtblJpZ2h0UGFuZSIsIiIrX2UuYykpKX1yZXR1cm4gd1siIXByb3RlY3QiXSYmKG9lLnB1c2godmEoIlByb3RlY3RDb250ZW50'@;
put 'cyIsIlRydWUiKSksd1siIXByb3RlY3QiXS5vYmplY3RzJiZvZS5wdXNoKHZhKCJQcm90ZWN0T2JqZWN0cyIsIlRydWUiKSksd1siIXByb3RlY3QiXS5zY2VuYXJpb3MmJm9lLnB1c2godmEoIlByb3RlY3RTY2VuYXJpb3MiLCJUcnVlIikpLG51bGw9PXdbIiFwcm90ZWN0Il0uc2VsZWN0TG9j'@;
put 'a2VkQ2VsbHN8fHdbIiFwcm90ZWN0Il0uc2VsZWN0TG9ja2VkQ2VsbHM/bnVsbCE9d1siIXByb3RlY3QiXS5zZWxlY3RVbmxvY2tlZENlbGxzJiYhd1siIXByb3RlY3QiXS5zZWxlY3RVbmxvY2tlZENlbGxzJiZvZS5wdXNoKHZhKCJFbmFibGVTZWxlY3Rpb24iLCJVbmxvY2tlZENlbGxzIikp'@;
put 'Om9lLnB1c2godmEoIkVuYWJsZVNlbGVjdGlvbiIsIk5vU2VsZWN0aW9uIikpLFtbImZvcm1hdENlbGxzIiwiQWxsb3dGb3JtYXRDZWxscyJdLFsiZm9ybWF0Q29sdW1ucyIsIkFsbG93U2l6ZUNvbHMiXSxbImZvcm1hdFJvd3MiLCJBbGxvd1NpemVSb3dzIl0sWyJpbnNlcnRDb2x1bW5zIiwi'@;
put 'QWxsb3dJbnNlcnRDb2xzIl0sWyJpbnNlcnRSb3dzIiwiQWxsb3dJbnNlcnRSb3dzIl0sWyJpbnNlcnRIeXBlcmxpbmtzIiwiQWxsb3dJbnNlcnRIeXBlcmxpbmtzIl0sWyJkZWxldGVDb2x1bW5zIiwiQWxsb3dEZWxldGVDb2xzIl0sWyJkZWxldGVSb3dzIiwiQWxsb3dEZWxldGVSb3dzIl0s'@;
put 'WyJzb3J0IiwiQWxsb3dTb3J0Il0sWyJhdXRvRmlsdGVyIiwiQWxsb3dGaWx0ZXIiXSxbInBpdm90VGFibGVzIiwiQWxsb3dVc2VQaXZvdFRhYmxlcyJdXS5mb3JFYWNoKGZ1bmN0aW9uKHZlKXt3WyIhcHJvdGVjdCJdW3ZlWzBdXSYmb2UucHVzaCgiPCIrdmVbMV0rIi8+Iil9KSksMD09b2Uu'@;
put 'bGVuZ3RoPyIiOk1yKCJXb3Jrc2hlZXRPcHRpb25zIixvZS5qb2luKCIiKSx7eG1sbnM6R2kueH0pfShnZSwwLHcsRCkpLGVlLmpvaW4oIiIpfWZ1bmN0aW9uIHpWKHcsUCl7UHx8KFA9e30pLHcuU1NGfHwody5TU0Y9Uy5nZXRfdGFibGUoKSksdy5TU0YmJihRKFMpLFMubG9hZF90YWJsZSh3'@;
put 'LlNTRiksUC5yZXZzc2Y9SWUody5TU0YpLFAucmV2c3NmW3cuU1NGWzY1NTM1XV09MCxQLnNzZj13LlNTRix3LlN0eWxlcz17Rm9udHM6UC5Gb250cz1be3N6OjEyLGNvbG9yOnt0aGVtZToxLHJnYjoiMDAwMDAwIn0sbmFtZToiQ2FsaWJyaSIsZmFtaWx5OjIsc2NoZW1lOiJtaW5vciJ9XSxG'@;
put 'aWxsczpQLkZpbGxzPVt7cGF0dGVyblR5cGU6Im5vbmUifSx7cGF0dGVyblR5cGU6ImdyYXkxMjUifV0sQm9yZGVyczpQLkJvcmRlcnM9W3t9XX0sUC5jZWxsWGZzPVtdLFAuY2VsbFN0eWxlWGZzPVt7bmFtZToiTm9ybWFsIn1dLHdjKFAuY2VsbFhmcyxudWxsLHt9LHtyZXZzc2Y6e0dlbmVy'@;
put 'YWw6MH19KSk7dmFyIEQ9W107RC5wdXNoKGZ1bmN0aW9uIFlUKHcsUCl7dmFyIEQ9W107cmV0dXJuIHcuUHJvcHMmJkQucHVzaChmdW5jdGlvbiBmdSh3LFApe3ZhciBEPVtdO3JldHVybiBtdChpaCkubWFwKGZ1bmN0aW9uKGVlKXtmb3IodmFyIG9lPTA7b2U8VXMubGVuZ3RoOysrb2UpaWYo'@;
put 'VXNbb2VdWzFdPT1lZSlyZXR1cm4gVXNbb2VdO2ZvcihvZT0wO29lPGVmLmxlbmd0aDsrK29lKWlmKGVmW29lXVsxXT09ZWUpcmV0dXJuIGVmW29lXTt0aHJvdyBlZX0pLmZvckVhY2goZnVuY3Rpb24oZWUpe2lmKG51bGwhPXdbZWVbMV1dKXt2YXIgb2U9UCYmUC5Qcm9wcyYmbnVsbCE9UC5Q'@;
put 'cm9wc1tlZVsxXV0/UC5Qcm9wc1tlZVsxXV06d1tlZVsxXV07ImRhdGUiPT09ZWVbMl0mJihvZT1uZXcgRGF0ZShvZSkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9cLlxkKlovLCJaIikpLCJudW1iZXIiPT10eXBlb2Ygb2U/b2U9U3RyaW5nKG9lKTohMD09PW9lfHwhMT09PW9lP29lPW9lPyIx'@;
put 'IjoiMCI6b2UgaW5zdGFuY2VvZiBEYXRlJiYob2U9bmV3IERhdGUob2UpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvXC5cZCpaLywiIikpLEQucHVzaCh2YShpaFtlZVsxXV18fGVlWzFdLG9lKSl9fSksTXIoIkRvY3VtZW50UHJvcGVydGllcyIsRC5qb2luKCIiKSx7eG1sbnM6R2kub30pfSh3'@;
put 'LlByb3BzLFApKSx3LkN1c3Rwcm9wcyYmRC5wdXNoKGZ1bmN0aW9uIGx4KHcsUCl7dmFyIEQ9WyJXb3Jrc2hlZXRzIiwiU2hlZXROYW1lcyJdLGVlPSJDdXN0b21Eb2N1bWVudFByb3BlcnRpZXMiLG9lPVtdO3JldHVybiB3JiZtdCh3KS5mb3JFYWNoKGZ1bmN0aW9uKGdlKXtpZihPYmplY3Qu'@;
put 'cHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodyxnZSkpe2Zvcih2YXIgX2U9MDtfZTxVcy5sZW5ndGg7KytfZSlpZihnZT09VXNbX2VdWzFdKXJldHVybjtmb3IoX2U9MDtfZTxlZi5sZW5ndGg7KytfZSlpZihnZT09ZWZbX2VdWzFdKXJldHVybjtmb3IoX2U9MDtfZTxELmxlbmd0aDsr'@;
put 'K19lKWlmKGdlPT1EW19lXSlyZXR1cm47dmFyIHZlPXdbZ2VdLE1lPSJzdHJpbmciOyJudW1iZXIiPT10eXBlb2YgdmU/KE1lPSJmbG9hdCIsdmU9U3RyaW5nKHZlKSk6ITA9PT12ZXx8ITE9PT12ZT8oTWU9ImJvb2xlYW4iLHZlPXZlPyIxIjoiMCIpOnZlPVN0cmluZyh2ZSksb2UucHVzaChN'@;
put 'cih0byhnZSksdmUseyJkdDpkdCI6TWV9KSl9fSksUCYmbXQoUCkuZm9yRWFjaChmdW5jdGlvbihnZSl7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFAsZ2UpJiYoIXd8fCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodyxnZSkpKXt2YXIgX2U9'@;
put 'UFtnZV0sdmU9InN0cmluZyI7Im51bWJlciI9PXR5cGVvZiBfZT8odmU9ImZsb2F0IixfZT1TdHJpbmcoX2UpKTohMD09PV9lfHwhMT09PV9lPyh2ZT0iYm9vbGVhbiIsX2U9X2U/IjEiOiIwIik6X2UgaW5zdGFuY2VvZiBEYXRlPyh2ZT0iZGF0ZVRpbWUudHoiLF9lPV9lLnRvSVNPU3RyaW5n'@;
put 'KCkpOl9lPVN0cmluZyhfZSksb2UucHVzaChNcih0byhnZSksX2UseyJkdDpkdCI6dmV9KSl9fSksIjwiK2VlKycgeG1sbnM9IicrR2kubysnIj4nK29lLmpvaW4oIiIpKyI8LyIrZWUrIj4ifSh3LlByb3BzLHcuQ3VzdHByb3BzKSksRC5qb2luKCIiKX0odyxQKSksRC5wdXNoKCIiKSxELnB1'@;
put 'c2goIiIpLEQucHVzaCgiIik7Zm9yKHZhciBlZT0wO2VlPHcuU2hlZXROYW1lcy5sZW5ndGg7KytlZSlELnB1c2goTXIoIldvcmtzaGVldCIsR2UoZWUsUCx3KSx7InNzOk5hbWUiOkJyKHcuU2hlZXROYW1lc1tlZV0pfSkpO3JldHVybiBEWzJdPWZ1bmN0aW9uIEJWKHcsUCl7dmFyIGVlPVtb'@;
put 'JzxTdHlsZSBzczpJRD0iRGVmYXVsdCIgc3M6TmFtZT0iTm9ybWFsIj4nLCc8QWxpZ25tZW50IHNzOlZlcnRpY2FsPSJCb3R0b20iLz4nLCI8Qm9yZGVycy8+IiwnPEZvbnQgc3M6Rm9udE5hbWU9IkNhbGlicmkiIHg6RmFtaWx5PSJTd2lzcyIgc3M6U2l6ZT0iMTIiIHNzOkNvbG9yPSIjMDAw'@;
put 'MDAwIi8+JywiPEludGVyaW9yLz4iLCI8TnVtYmVyRm9ybWF0Lz4iLCI8UHJvdGVjdGlvbi8+IiwiPC9TdHlsZT4iXS5qb2luKCIiKV07cmV0dXJuIFAuY2VsbFhmcy5mb3JFYWNoKGZ1bmN0aW9uKG9lLGdlKXt2YXIgX2U9W107aWYob2UuYWxpZ25tZW50KXt2YXIgdmU9e307b2UuYWxpZ25t'@;
put 'ZW50LnNocmlua1RvRml0JiYodmVbInNzOlNocmlua1RvRml0Il09IjEiKSxvZS5hbGlnbm1lbnQud3JhcFRleHQmJih2ZVsic3M6V3JhcFRleHQiXT0iMSIpLG9lLmFsaWdubWVudC52ZXJ0aWNhbCYmKHZlWyJzczpWZXJ0aWNhbCJdPUN0KG9lLmFsaWdubWVudC52ZXJ0aWNhbCkpLG9lLmFs'@;
put 'aWdubWVudC5ob3Jpem9udGFsJiYodmVbInNzOkhvcml6b250YWwiXT1DdChvZS5hbGlnbm1lbnQuaG9yaXpvbnRhbCkpLG9lLmFsaWdubWVudC5pbmRlbnQmJih2ZVsic3M6SW5kZW50Il09b2UuYWxpZ25tZW50LmluZGVudCksb2UuYWxpZ25tZW50LnRleHRSb3RhdGlvbiYmKHZlWyJzczpS'@;
put 'b3RhdGUiXT1vZS5hbGlnbm1lbnQudGV4dFJvdGF0aW9uKSxfZS5wdXNoKE1yKCJBbGlnbm1lbnQiLG51bGwsdmUpKX1lOmlmKG51bGwhPW9lLmZvbnRJZCl7dmFyIE1lPVAuRm9udHNbb2UuZm9udElkXTtpZighTWUpYnJlYWsgZTt2YXIgamU9eyJzczpGb250TmFtZSI6IkNhbGlicmkiLCJz'@;
put 'czpTaXplIjoiMTIifSxVZT0hMTtNZS5ib2xkJiYoVWU9ITAsamVbInNzOkJvbGQiXT0iMSIpLE1lLml0YWxpYyYmKFVlPSEwLGplWyJzczpJdGFsaWMiXT0iMSIpLE1lLnN0cmlrZSYmKFVlPSEwLGplWyJzczpTdHJpa2VUaHJvdWdoIl09IjEiKSxudWxsIT1NZS51bmRlcmxpbmUmJihVZT0h'@;
put 'MCxqZVsic3M6VW5kZXJsaW5lIl09elRbTWUudW5kZXJsaW5lXXx8KE1lLnVuZGVybGluZT8iU2luZ2xlIjoiTm9uZSIpKSxudWxsIT1NZS5zeiYmKFVlPSEwLGplWyJzczpTaXplIl09TWUuc3opLG51bGwhPU1lLm5hbWUmJihVZT0hMCxqZVsic3M6Rm9udE5hbWUiXT1NZS5uYW1lKSxNZS5j'@;
put 'b2xvciYmbnVsbCE9TWUuY29sb3IucmdiJiYoVWU9ITAsamVbInNzOkNvbG9yIl09IiMiKygibnVtYmVyIj09dHlwZW9mIE1lLmNvbG9yLnJnYj8iMDAwMDAwIitNZS5jb2xvci5yZ2IudG9TdHJpbmcoMTYpOk1lLmNvbG9yLnJnYikuc2xpY2UoLTYpKSxbInN1YiIsInN1cGVyIl0uaW5kZXhP'@;
put 'ZihNZS52YWxpZ24pPi0xJiYoamVbInNzOlZlcnRpY2FsQWxpZ24iXT1DdChNZS52YWxpZ24pKyJzY3JpcHQiKSxVZSYmX2UucHVzaChNcigiRm9udCIsbnVsbCxqZSkpfWU6aWYob2UuZmlsbElkPjApe3ZhciBYZT1QLkZpbGxzW29lLmZpbGxJZF07aWYoIVhlfHwhWGUuZmdDb2xvcnx8bnVs'@;
put 'bD09WGUuZmdDb2xvci5yZ2IpYnJlYWsgZTtfZS5wdXNoKE1yKCJJbnRlcmlvciIsbnVsbCx7InNzOlBhdHRlcm4iOnNIW1hlLnBhdHRlcm5UeXBlXXx8IlNvbGlkIiwic3M6Q29sb3IiOiIjIisoIm51bWJlciI9PXR5cGVvZiBYZS5mZ0NvbG9yLnJnYj8iMDAiK1hlLmZnQ29sb3IucmdiLnRv'@;
put 'U3RyaW5nKDE2KTpYZS5mZ0NvbG9yLnJnYikuc2xpY2UoLTYpfSkpfV9lLnB1c2goTXIoIk51bWJlckZvcm1hdCIsbnVsbCx7InNzOkZvcm1hdCI6QnIoUy5fdGFibGVbb2UubnVtRm10SWRdKX0pKTt2YXIgaXQ9eyJzczpJRCI6InMiKygyMStnZSl9O29lLnN0eWxlJiYoaXRbInNzOk5hbWUi'@;
put 'XT1vZS5zdHlsZSksZWUucHVzaChNcigiU3R5bGUiLF9lLmpvaW4oIiIpLGl0KSl9KSxNcigiU3R5bGVzIixlZS5qb2luKCIiKSl9KDAsUCksRFszXT1mdW5jdGlvbiBwZyh3KXtpZighKCh3fHx7fSkuV29ya2Jvb2t8fHt9KS5OYW1lcylyZXR1cm4iIjtmb3IodmFyIFA9dy5Xb3JrYm9vay5O'@;
put 'YW1lcyxEPVtdLGVlPTA7ZWU8UC5sZW5ndGg7KytlZSl7dmFyIG9lPVBbZWVdO251bGw9PW9lLlNoZWV0JiYob2UuTmFtZS5tYXRjaCgvXl94bGZuXC4vKXx8RC5wdXNoKFpuKG9lKSkpfXJldHVybiBNcigiTmFtZXMiLEQuam9pbigiIikpfSh3KSxCbitNcigiV29ya2Jvb2siLEQuam9pbigi'@;
put 'Iikse3htbG5zOkdpLnNzLCJ4bWxuczpvIjpHaS5vLCJ4bWxuczp4IjpHaS54LCJ4bWxuczpzcyI6R2kuc3MsInhtbG5zOmR0IjpHaS5kdCwieG1sbnM6aHRtbCI6R2kuaHRtbH0pfWZ1bmN0aW9uIERyKHcsUCxELGVlKXt2YXIgb2U9RCxnZT1bXSxfZT1QLnNsaWNlKFAubCxQLmwrb2UpO2lm'@;
put 'KGVlJiZlZS5lbmMmJmVlLmVuYy5pbnNpdHUmJl9lLmxlbmd0aD4wKXN3aXRjaCh3Lm4pe2Nhc2UiQk9GIjpjYXNlIkZpbGVQYXNzIjpjYXNlIkZpbGVMb2NrIjpjYXNlIkludGVyZmFjZUhkciI6Y2FzZSJSUkRJbmZvIjpjYXNlIlJSREhlYWQiOmNhc2UiVXNyRXhjbCI6Y2FzZSJFT0YiOmVl'@;
put 'LmVuYy5pbnNpdHUodWUoe2xlbmd0aDpfZS5sZW5ndGh9KSwic2tpcCIpO2JyZWFrO2Nhc2UiQm91bmRTaGVldDgiOmVlLmVuYy5pbnNpdHUodWUoe2xlbmd0aDo0fSksInNraXAiKSxfZT1CdWZmZXIuY29uY2F0KFtCdWZmZXIuZnJvbShfZS5zbGljZSgwLDQpKSxCdWZmZXIuZnJvbShlZS5l'@;
put 'bmMuaW5zaXR1KF9lLnNsaWNlKDQpKSldKTticmVhaztkZWZhdWx0Ol9lPWVlLmVuYy5pbnNpdHUoX2UpfUFycmF5LmlzQXJyYXkoUCkmJiFBcnJheS5pc0FycmF5KF9lKSYmKF9lPUFycmF5LmZyb20oX2UpKSxnZS5wdXNoKF9lKSxQLmwrPW9lO2Zvcih2YXIgdmU9ZjFbV24oUCxQLmwpXSxN'@;
put 'ZT0wO251bGwhPXZlJiYiQ29udGludWUiPT09dmUubi5zbGljZSgwLDgpOylvZT1XbihQLFAubCsyKSxNZT1QLmwrNCxlZSYmZWUuZW5jJiZlZS5lbmMuaW5zaXR1JiZlZS5lbmMuaW5zaXR1KHVlKHtsZW5ndGg6NH0pLCJza2lwIiksIkNvbnRpbnVlRnJ0Ij09dmUubj9NZSs9NDoiQ29udGlu'@;
put 'dWVGcnQiPT12ZS5uLnNsaWNlKDAsMTEpJiYoTWUrPTEyLGVlJiZlZS5lbmMmJmVlLmVuYy5pbnNpdHUmJmVlLmVuYy5pbnNpdHUodWUoe2xlbmd0aDo4fSksInNraXAiKSksX2U9UC5zbGljZShNZSxQLmwrNCtvZSksZWUmJmVlLmVuYyYmZWUuZW5jLmluc2l0dSYmX2UubGVuZ3RoPjAmJihf'@;
put 'ZT1lZS5lbmMuaW5zaXR1KF9lKSksZ2UucHVzaChfZSksUC5sKz00K29lLHZlPWYxW1duKFAsUC5sKV07dmFyIGplPU0oZ2UpO3NzKGplLDApO3ZhciBVZT0wO2plLmxlbnM9W107Zm9yKHZhciBYZT0wO1hlPGdlLmxlbmd0aDsrK1hlKWplLmxlbnMucHVzaChVZSksVWUrPWdlW1hlXS5sZW5n'@;
put 'dGg7aWYoamUubGVuZ3RoPEQpdGhyb3ciWExTIFJlY29yZCAiKyh3JiZ3Lm58fCI/PyIpKyIgVHJ1bmNhdGVkOiAiK2plLmxlbmd0aCsiIDwgIitEO3JldHVybiB3LmYoamUsamUubGVuZ3RoLGVlKX1mdW5jdGlvbiBSdSh3LFAsRCl7aWYoInoiIT09dy50JiZ3LlhGKXt2YXIgZWU9MDt0cnl7'@;
put 'ZWU9dy56fHx3LlhGLm51bUZtdElkfHwwLFAuY2VsbE5GJiYody56PVMuX3RhYmxlW2VlXSl9Y2F0Y2goZ2Upe2lmKFAuV1RGKXRocm93IGdlfWlmKCFQfHwhMSE9PVAuY2VsbFRleHQpdHJ5e3cudz0iZSI9PT13LnQ/dy53fHxuYVt3LnZdOjA9PT1lZXx8IkdlbmVyYWwiPT1lZT8ibiI9PT13'@;
put 'LnQ/KDB8dy52KT09PXcudj9TLl9nZW5lcmFsX2ludCh3LnYpOlMuX2dlbmVyYWxfbnVtKHcudik6Uy5fZ2VuZXJhbCh3LnYpOlMuZm9ybWF0KGVlLHcudix7ZGF0ZTE5MDQ6ISFELGRhdGVORjpQJiZQLmRhdGVORn0pfWNhdGNoKGdlKXtpZihQLldURil0aHJvdyBnZX1pZihQLmNlbGxEYXRl'@;
put 'cyYmZWUmJiJuIj09dy50JiZTLmlzX2RhdGUoUy5fdGFibGVbZWVdfHxTdHJpbmcoZWUpKSl7dmFyIG9lPVMucGFyc2VfZGF0ZV9jb2RlKHcudik7b2UmJih3LnQ9ImQiLHcudj1uZXcgRGF0ZShvZS55LG9lLm0tMSxvZS5kLG9lLkgsb2UuTSxvZS5TLG9lLnUpKX19fWZ1bmN0aW9uIGJoKHcs'@;
put 'UCxEKXtyZXR1cm57djp3LGl4ZmU6UCx0OkR9fXZhciBxVD1mdW5jdGlvbih3LFAsRCl7UFsiIW9iamVjdHMiXT13fSxLcD17U0k6ImUwODU5ZmYyZjk0ZjY4MTBhYjkxMDgwMDJiMjdiM2Q5IixEU0k6IjAyZDVjZGQ1OWMyZTFiMTA5Mzk3MDgwMDJiMmNmOWFlIixVREk6IjA1ZDVjZGQ1OWMy'@;
put 'ZTFiMTA5Mzk3MDgwMDJiMmNmOWFlIn07ZnVuY3Rpb24gbWcodyxQKXt2YXIgRCxlZSxvZSxnZTtpZihQfHwoUD17fSksZHYoUCksaigpLFAuY29kZXBhZ2UmJlIoUC5jb2RlcGFnZSksdy5GdWxsUGF0aHMpe2lmKE5lLmZpbmQodywiL2VuY3J5cHRpb24iKSl0aHJvdyBuZXcgRXJyb3IoIkZp'@;
put 'bGUgaXMgcGFzc3dvcmQtcHJvdGVjdGVkIik7RD1OZS5maW5kKHcsIiFDb21wT2JqIiksZWU9TmUuZmluZCh3LCIvV29ya2Jvb2siKXx8TmUuZmluZCh3LCIvQm9vayIpfWVsc2V7c3dpdGNoKFAudHlwZSl7Y2FzZSJiYXNlNjQiOnc9eChsZS5kZWNvZGUodykpO2JyZWFrO2Nhc2UiYmluYXJ5'@;
put 'Ijp3PXgodyk7YnJlYWs7Y2FzZSJidWZmZXIiOmJyZWFrO2Nhc2UiYXJyYXkiOkFycmF5LmlzQXJyYXkodyl8fCh3PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHcpKX1zcyh3LDApLGVlPXtjb250ZW50Ond9fWlmKEQmJmZ1bmN0aW9uIFRpKHcpe3ZhciBQPXt9LEQ9dy5jb250ZW50O2lm'@;
put 'KEQubD0yOCxQLkFuc2lVc2VyVHlwZT1ELnJlYWRfc2hpZnQoMCwibHBzdHItYW5zaSIpLFAuQW5zaUNsaXBib2FyZEZvcm1hdD1mdW5jdGlvbiBkbSh3KXtyZXR1cm4gZm0odywxKX0oRCksRC5sZW5ndGgtRC5sPD00KXJldHVybiBQO3ZhciBlZT1ELnJlYWRfc2hpZnQoNCk7aWYoMD09ZWV8'@;
put 'fGVlPjQwfHwoRC5sLT00LFAuUmVzZXJ2ZWQxPUQucmVhZF9zaGlmdCgwLCJscHN0ci1hbnNpIiksRC5sZW5ndGgtRC5sPD00KXx8MTkwNzUwNTY1MiE9PShlZT1ELnJlYWRfc2hpZnQoNCkpfHwoUC5Vbmljb2RlQ2xpcGJvYXJkRm9ybWF0PWZ1bmN0aW9uIExiKHcpe3JldHVybiBmbSh3LDIp'@;
put 'fShEKSwwPT0oZWU9RC5yZWFkX3NoaWZ0KDQpKXx8ZWU+NDApKXJldHVybiBQO0QubC09NCxQLlJlc2VydmVkMj1ELnJlYWRfc2hpZnQoMCwibHB3c3RyIil9KEQpLFAuYm9va1Byb3BzJiYhUC5ib29rU2hlZXRzKW9lPXt9O2Vsc2V7dmFyIF9lPWRlPyJidWZmZXIiOiJhcnJheSI7aWYoZWUm'@;
put 'JmVlLmNvbnRlbnQpb2U9ZnVuY3Rpb24gWFQodyxQKXt2YXIgRD17b3B0czp7fX0sZWU9e307bnVsbCE9bmUmJm51bGw9PVAuZGVuc2UmJihQLmRlbnNlPW5lKTt2YXIgWGUsZnQsdXQsd3QsVHQsWXQsb2U9UC5kZW5zZT9bXTp7fSxnZT17fSxfZT17fSx2ZT1udWxsLE1lPVtdLGplPSIiLFVl'@;
put 'PXt9LGl0PSIiLEh0PXt9LGt0PVtdLGduPVtdLHFuPVtdLGZuPXtTaGVldHM6W10sV0JQcm9wczp7ZGF0ZTE5MDQ6ITF9LFZpZXdzOlt7fV19LEtuPXt9LHpuPXtGb250czpbXX0sT249ZnVuY3Rpb24oZWkpe3JldHVybiBlaTw4P1NyW2VpXTplaTw2NCYmcW5bZWktOF18fFNyW2VpXX0sZXI9'@;
put 'ZnVuY3Rpb24oZWksa2Epe3ZhciBDcyx3YT1laS5YRi5kYXRhO3dhJiYod2EucGF0dGVyblR5cGV8fG51bGwhPXdhLmljdkZvcmUpJiZrYSYma2EuY2VsbFN0eWxlcyYmKGVpLnM9e30sZWkucy5wYXR0ZXJuVHlwZT13YS5wYXR0ZXJuVHlwZSxlaS5YRi5mb250JiZOdChlaS5zLGVpLlhGLmZv'@;
put 'bnQpLHdhLmZXcmFwJiYoKGVpLnMuYWxpZ25tZW50fHwoZWkucy5hbGlnbm1lbnQ9e30pKS53cmFwVGV4dD0hMCksd2EuZlNocmlua1RvRml0JiYoKGVpLnMuYWxpZ25tZW50fHwoZWkucy5hbGlnbm1lbnQ9e30pKS5zaHJpbmtUb0ZpdD0hMCksd2EuaGFsaWduJiYoKGVpLnMuYWxpZ25tZW50'@;
put 'fHwoZWkucy5hbGlnbm1lbnQ9e30pKS5ob3Jpem9udGFsPXdhLmhhbGlnbiksd2EudmFsaWduJiYoKGVpLnMuYWxpZ25tZW50fHwoZWkucy5hbGlnbm1lbnQ9e30pKS52ZXJ0aWNhbD13YS52YWxpZ24pLHdhLmNJbmRlbnQmJigoZWkucy5hbGlnbm1lbnR8fChlaS5zLmFsaWdubWVudD17fSkp'@;
put 'LmluZGVudD13YS5jSW5kZW50KSw2NCE9d2EuaWN2Rm9yZSYmNjUhPXdhLmljdkJhY2smJigoQ3M9ZmYoT24od2EuaWN2Rm9yZSkpKSYmKGVpLnMuZmdDb2xvcj17cmdiOkNzfSksKENzPWZmKE9uKHdhLmljdkJhY2spKSkmJihlaS5zLmJnQ29sb3I9e3JnYjpDc30pKSxbIkxlZnQiLCJSaWdo'@;
put 'dCIsIlRvcCIsIkJvdHRvbSJdLmZvckVhY2goZnVuY3Rpb24ocXMpe3dhWyJkZyIrcXNdJiYoZWkuc1txcy50b0xvd2VyQ2FzZSgpXT17c3R5bGU6cGhbd2FbImRnIitxc11dLGNvbG9yOntyZ2I6ZmYoT24od2FbImljdiIrcXNdKSl9fSl9KSl9LHRyPWZ1bmN0aW9uKGVpLGthLHdhKXtpZigh'@;
put 'KENpPjF8fHdhLnNoZWV0Um93cyYmZWkucj49d2Euc2hlZXRSb3dzKSl7aWYod2EuY2VsbFN0eWxlcyYma2EuWEYmJmthLlhGLmRhdGEmJmVyKGthLHdhKSxkZWxldGUga2EuaXhmZSxkZWxldGUga2EuWEYsWGU9ZWksaXQ9cGkoZWkpLCghX2V8fCFfZS5zfHwhX2UuZSkmJihfZT17czp7cjow'@;
put 'LGM6MH0sZTp7cjowLGM6MH19KSxlaS5yPF9lLnMuciYmKF9lLnMucj1laS5yKSxlaS5jPF9lLnMuYyYmKF9lLnMuYz1laS5jKSxlaS5yKzE+X2UuZS5yJiYoX2UuZS5yPWVpLnIrMSksZWkuYysxPl9lLmUuYyYmKF9lLmUuYz1laS5jKzEpLHdhLmNlbGxGb3JtdWxhJiZrYS5mKWZvcih2YXIg'@;
put 'Q3M9MDtDczxrdC5sZW5ndGg7KytDcylpZighKGt0W0NzXVswXS5zLmM+ZWkuY3x8a3RbQ3NdWzBdLnMucj5laS5yfHxrdFtDc11bMF0uZS5jPGVpLmN8fGt0W0NzXVswXS5lLnI8ZWkucikpe2thLkY9Vm8oa3RbQ3NdWzBdKSwoa3RbQ3NdWzBdLnMuYyE9ZWkuY3x8a3RbQ3NdWzBdLnMuciE9'@;
put 'ZWkucikmJmRlbGV0ZSBrYS5mLGthLmYmJihrYS5mPSIiK0RzKGt0W0NzXVsxXSxfZSxlaSx4bixZbikpO2JyZWFrfXdhLmRlbnNlPyhvZVtlaS5yXXx8KG9lW2VpLnJdPVtdKSxvZVtlaS5yXVtlaS5jXT1rYSk6b2VbaXRdPWthfX0sWW49e2VuYzohMSxzYmNjaDowLHNuYW1lczpbXSxzaGFy'@;
put 'ZWRmOkh0LGFycmF5ZjprdCxycnRhYmlkOltdLGxhc3R1c2VyOiIiLGJpZmY6OCxjb2RlcGFnZTowLHdpbmxvY2tlZDowLGNlbGxTdHlsZXM6ISFQJiYhIVAuY2VsbFN0eWxlcyxXVEY6ISFQJiYhIVAud3RmfTtZbi5wYXNzd29yZD1QLnBhc3N3b3JkP1AucGFzc3dvcmQ6IlZlbHZldFN3ZWF0'@;
put 'c2hvcCI7dmFyIGxpLGpyPW51bGwsRWk9W10sSWk9W10sdGk9W10sZnI9W10scnI9ITEseG49W107eG4uU2hlZXROYW1lcz1Zbi5zbmFtZXMseG4uc2hhcmVkZj1Zbi5zaGFyZWRmLHhuLmFycmF5Zj1Zbi5hcnJheWYseG4ubmFtZXM9W10seG4uWFRJPVtdO3ZhciBPaSxtcj0iIixDaT0wLHpy'@;
put 'PTAsemk9W10sd289W107WW4uY29kZXBhZ2U9MTIwMCx6KDEyMDApO2Zvcih2YXIgWG89ITE7dy5sPHcubGVuZ3RoLTE7KXt2YXIgZm89dy5sLFJvPXcucmVhZF9zaGlmdCgyKTtpZihZbiYmWW4uZW5jJiZZbi5lbmMuaW5zaXR1JiZZbi5lbmMuaW5zaXR1KHVlKFswLDBdKSwiaGVhZGVyLTAi'@;
put 'KSwwPT09Um8mJiJFT0YiPT09bXIpYnJlYWs7dmFyIFRvPXcubD09PXcubGVuZ3RoPzA6dy5yZWFkX3NoaWZ0KDIpO1luJiZZbi5lbmMmJlluLmVuYy5pbnNpdHUmJlluLmVuYy5pbnNpdHUodWUoWzAsMF0pLCJsZW5ndGgtMCIpO3ZhciBtaT1mMVtSb107aWYobWkmJm1pLmYpe2lmKFAuYm9v'@;
put 'a1NoZWV0cyYmIkJvdW5kU2hlZXQ4Ij09PW1yJiYiQm91bmRTaGVldDgiIT09bWkubilicmVhaztpZihtcj1taS5uLDI9PT1taS5yfHwxMj09bWkucil7dmFyIHJsPXcucmVhZF9zaGlmdCgyKTtpZihUby09MixZbiYmWW4uZW5jJiZZbi5lbmMuaW5zaXR1JiZZbi5lbmMuaW5zaXR1KHVlKFsw'@;
put 'LDBdKSksIVluLmVuYyYmcmwhPT1SbyYmKCgyNTUmcmwpPDw4fHJsPj44KSE9PVJvKXRocm93IG5ldyBFcnJvcigicnQgbWlzbWF0Y2g6ICIrcmwrIiE9IitSbyk7MTI9PW1pLnImJih3LmwrPTEwLFRvLT0xMCxZbiYmWW4uZW5jJiZZbi5lbmMuaW5zaXR1JiZZbi5lbmMuaW5zaXR1KHVlKFsw'@;
put 'LDAsMCwwLDAsMCwwLDAsMCwwXSkpKX12YXIgQW49RHIobWksdyxUbyxZbiksQWE9bWkubjtpZigwPT1DaSYmIkJPRiIhPUFhKWNvbnRpbnVlO3N3aXRjaChBYSl7Y2FzZSJEYXRlMTkwNCI6RC5vcHRzLkRhdGUxOTA0PWZuLldCUHJvcHMuZGF0ZTE5MDQ9QW47YnJlYWs7Y2FzZSJXcml0ZVBy'@;
put 'b3RlY3QiOkQub3B0cy5Xcml0ZVByb3RlY3Q9ITA7YnJlYWs7Y2FzZSJGaWxlUGFzcyI6aWYoWW4uZW5jfHwody5sPTAsQ2k9MCksWW4uZW5jPUFuLCFQLnBhc3N3b3JkJiZudWxsPT1Bbi52YWxpZCl0aHJvdyBuZXcgRXJyb3IoIkZpbGUgaXMgcGFzc3dvcmQtcHJvdGVjdGVkIik7aWYobnVs'@;
put 'bD09QW4udmFsaWQpdGhyb3cgbmV3IEVycm9yKCJFbmNyeXB0aW9uIHNjaGVtZSB1bnN1cHBvcnRlZCIpO2lmKCFBbi52YWxpZCl0aHJvdyBuZXcgRXJyb3IoIlBhc3N3b3JkIGlzIGluY29ycmVjdCIpO2JyZWFrO2Nhc2UiV3JpdGVBY2Nlc3MiOlluLmxhc3R1c2VyPUFuO2JyZWFrO2Nhc2Ui'@;
put 'RmlsZVNoYXJpbmciOmNhc2UiVGVtcGxhdGUiOmNhc2UiQm9va0Jvb2wiOmNhc2UiVXNlc0VMRnMiOmNhc2UiTVRSU2V0dGluZ3MiOmNhc2UiVW5jYWxjZWQiOmNhc2UiRXh0U1NUIjpjYXNlIkJvb2tFeHQiOmNhc2UiUmljaFRleHRTdHJlYW0iOmNhc2UiQmtIaW0iOmNhc2UiSW5kZXgiOmNh'@;
put 'c2UiUHJvdDRSZXYiOmNhc2UiUHJvdDRSZXZQYXNzIjpicmVhaztjYXNlIkNvZGVQYWdlIjp2YXIgTWE9TnVtYmVyKEFuKTtzd2l0Y2goTWEpe2Nhc2UgMjEwMTA6TWE9MTIwMDticmVhaztjYXNlIDMyNzY4Ok1hPTFlNDticmVhaztjYXNlIDMyNzY5Ok1hPTEyNTJ9eihZbi5jb2RlcGFnZT1N'@;
put 'YSksWG89ITA7YnJlYWs7Y2FzZSJSUlRhYklkIjpZbi5ycnRhYmlkPUFuO2JyZWFrO2Nhc2UiV2luUHJvdGVjdCI6WW4ud2lubG9ja2VkPUFuO2JyZWFrO2Nhc2UiUmVmcmVzaEFsbCI6Y2FzZSJDYWxjQ291bnQiOmNhc2UiQ2FsY0RlbHRhIjpjYXNlIkNhbGNJdGVyIjpjYXNlIkNhbGNNb2Rl'@;
put 'IjpjYXNlIkNhbGNQcmVjaXNpb24iOmNhc2UiQ2FsY1NhdmVSZWNhbGMiOkQub3B0c1tBYV09QW47YnJlYWs7Y2FzZSJDYWxjUmVmTW9kZSI6WW4uQ2FsY1JlZk1vZGU9QW47YnJlYWs7Y2FzZSJGb3JjZUZ1bGxDYWxjdWxhdGlvbiI6RC5vcHRzLkZ1bGxDYWxjPUFuO2JyZWFrO2Nhc2UiV3NC'@;
put 'b29sIjpBbi5mRGlhbG9nJiYob2VbIiF0eXBlIl09ImRpYWxvZyIpLEFuLmZCZWxvd3x8KChvZVsiIW91dGxpbmUiXXx8KG9lWyIhb3V0bGluZSJdPXt9KSkuYWJvdmU9ITApLEFuLmZSaWdodHx8KChvZVsiIW91dGxpbmUiXXx8KG9lWyIhb3V0bGluZSJdPXt9KSkubGVmdD0hMCk7YnJlYWs7'@;
put 'Y2FzZSJYRiI6QW4uZm9udD16bi5Gb250c1tBbi5pZm50PDQ/QW4uaWZudDpBbi5pZm50LTFdLGduLnB1c2goQW4pO2JyZWFrO2Nhc2UiU3VwQm9vayI6eG4ucHVzaChbQW5dKSx4blt4bi5sZW5ndGgtMV0uWFRJPVtdO2JyZWFrO2Nhc2UiRXh0ZXJuTmFtZSI6eG5beG4ubGVuZ3RoLTFdLnB1'@;
put 'c2goQW4pO2JyZWFrO2Nhc2UiTGJsIjpPaT17TmFtZTpBbi5OYW1lLFJlZjpEcyhBbi5yZ2NlLF9lLG51bGwseG4sWW4pfSxBbi5pdGFiPjAmJihPaS5TaGVldD1Bbi5pdGFiLTEpLHhuLm5hbWVzLnB1c2goT2kpLHhuWzBdfHwoeG5bMF09W10seG5bMF0uWFRJPVtdKSx4blt4bi5sZW5ndGgt'@;
put 'MV0ucHVzaChBbiksIl94bG5tLl9GaWx0ZXJEYXRhYmFzZSI9PUFuLk5hbWUmJkFuLml0YWI+MCYmQW4ucmdjZSYmQW4ucmdjZVswXSYmQW4ucmdjZVswXVswXSYmIlB0Z0FyZWEzZCI9PUFuLnJnY2VbMF1bMF1bMF0mJih3b1tBbi5pdGFiLTFdPXtyZWY6Vm8oQW4ucmdjZVswXVswXVsxXVsy'@;
put 'XSl9KTticmVhaztjYXNlIkV4dGVybkNvdW50IjpZbi5FeHRlcm5Db3VudD1BbjticmVhaztjYXNlIkV4dGVyblNoZWV0IjowPT14bi5sZW5ndGgmJih4blswXT1bXSx4blswXS5YVEk9W10pLHhuW3huLmxlbmd0aC0xXS5YVEk9eG5beG4ubGVuZ3RoLTFdLlhUSS5jb25jYXQoQW4pLHhuLlhU'@;
put 'ST14bi5YVEkuY29uY2F0KEFuKTticmVhaztjYXNlIk5hbWVDbXQiOmlmKFluLmJpZmY8OClicmVhaztudWxsIT1PaSYmKE9pLkNvbW1lbnQ9QW5bMV0pO2JyZWFrO2Nhc2UiUHJvdGVjdCI6b2VbIiFwcm90ZWN0Il09QW47YnJlYWs7Y2FzZSJQYXNzd29yZCI6MCE9PUFuJiZZbi5XVEYmJmNv'@;
put 'bnNvbGUuZXJyb3IoIlBhc3N3b3JkIHZlcmlmaWVyOiAiK0FuKTticmVhaztjYXNlIkJvdW5kU2hlZXQ4IjpnZVtBbi5wb3NdPUFuLFluLnNuYW1lcy5wdXNoKEFuLm5hbWUpO2JyZWFrO2Nhc2UiRU9GIjppZihvZVsiIWdyaWRsaW5lcyJdPSFqcnx8anIuZ3JpZCxqcj1udWxsLC0tQ2kpYnJl'@;
put 'YWs7aWYoX2UuZSl7aWYoX2UuZS5yPjAmJl9lLmUuYz4wKXtpZihfZS5lLnItLSxfZS5lLmMtLSxvZVsiIXJlZiJdPVZvKF9lKSxQLnNoZWV0Um93cyYmUC5zaGVldFJvd3M8PV9lLmUucil7dmFyIElzPV9lLmUucjtfZS5lLnI9UC5zaGVldFJvd3MtMSxvZVsiIWZ1bGxyZWYiXT1vZVsiIXJl'@;
put 'ZiJdLG9lWyIhcmVmIl09Vm8oX2UpLF9lLmUucj1Jc31fZS5lLnIrKyxfZS5lLmMrK31FaS5sZW5ndGg+MCYmKG9lWyIhbWVyZ2VzIl09RWkpLElpLmxlbmd0aD4wJiZxVChJaSxvZSx6biksdGkubGVuZ3RoPjAmJihvZVsiIWNvbHMiXT10aSksZnIubGVuZ3RoPjAmJihvZVsiIXJvd3MiXT1m'@;
put 'ciksZm4uU2hlZXRzLnB1c2goS24pfSIiPT09amU/VWU9b2U6ZWVbamVdPW9lLG9lPVAuZGVuc2U/W106e307YnJlYWs7Y2FzZSJCT0YiOmlmKDg9PT1Zbi5iaWZmJiYoWW4uYmlmZj17OToyLDUyMTozLDEwMzM6NH1bUm9dfHx7NTEyOjIsNzY4OjMsMTAyNDo0LDEyODA6NSwxNTM2OjgsMjoy'@;
put 'LDc6Mn1bQW4uQklGRlZlcl18fDgpLFluLmJpZmZndWVzcz0wPT1Bbi5CSUZGVmVyLDA9PUFuLkJJRkZWZXImJjQwOTY9PUFuLmR0JiYoWW4uYmlmZj01LFhvPSEwLHooWW4uY29kZXBhZ2U9Mjg1OTEpKSw4PT1Zbi5iaWZmJiYwPT1Bbi5CSUZGVmVyJiYxNj09QW4uZHQmJihZbi5iaWZmPTIp'@;
put 'LENpKyspYnJlYWs7aWYob2U9UC5kZW5zZT9bXTp7fSxZbi5iaWZmPDgmJiFYbyYmKFhvPSEwLHooWW4uY29kZXBhZ2U9UC5jb2RlcGFnZXx8MTI1MikpLFluLmJpZmY8NXx8MD09QW4uQklGRlZlciYmNDA5Nj09QW4uZHQpeyIiPT09amUmJihqZT0iU2hlZXQxIiksX2U9e3M6e3I6MCxjOjB9'@;
put 'LGU6e3I6MCxjOjB9fTt2YXIgdXM9e3Bvczp3LmwtVG8sbmFtZTpqZX07Z2VbdXMucG9zXT11cyxZbi5zbmFtZXMucHVzaChqZSl9ZWxzZSBqZT0oZ2VbZm9dfHx7bmFtZToiIn0pLm5hbWU7MzI9PUFuLmR0JiYob2VbIiF0eXBlIl09ImNoYXJ0IiksNjQ9PUFuLmR0JiYob2VbIiF0eXBlIl09'@;
put 'Im1hY3JvIiksRWk9W10sSWk9W10sWW4uYXJyYXlmPWt0PVtdLHRpPVtdLGZyPVtdLHJyPSExLEtuPXtIaWRkZW46KGdlW2ZvXXx8e2hzOjB9KS5ocyxuYW1lOmplfTticmVhaztjYXNlIk51bWJlciI6Y2FzZSJCSUZGMk5VTSI6Y2FzZSJCSUZGMklOVCI6ImNoYXJ0Ij09b2VbIiF0eXBlIl0m'@;
put 'JihQLmRlbnNlPyhvZVtBbi5yXXx8W10pW0FuLmNdOm9lW3BpKHtjOkFuLmMscjpBbi5yfSldKSYmKytBbi5jLFR0PXtpeGZlOkFuLml4ZmUsWEY6Z25bQW4uaXhmZV18fHt9LHY6QW4udmFsLHQ6Im4ifSx6cj4wJiYoVHQuej16aVtUdC5peGZlPj44JjYzXSksUnUoVHQsUCxELm9wdHMuRGF0'@;
put 'ZTE5MDQpLHRyKHtjOkFuLmMscjpBbi5yfSxUdCxQKTticmVhaztjYXNlIkJvb2xFcnIiOlR0PXtpeGZlOkFuLml4ZmUsWEY6Z25bQW4uaXhmZV0sdjpBbi52YWwsdDpBbi50fSx6cj4wJiYoVHQuej16aVtUdC5peGZlPj44JjYzXSksUnUoVHQsUCxELm9wdHMuRGF0ZTE5MDQpLHRyKHtjOkFu'@;
put 'LmMscjpBbi5yfSxUdCxQKTticmVhaztjYXNlIlJLIjpUdD17aXhmZTpBbi5peGZlLFhGOmduW0FuLml4ZmVdLHY6QW4ucmtudW0sdDoibiJ9LHpyPjAmJihUdC56PXppW1R0Lml4ZmU+PjgmNjNdKSxSdShUdCxQLEQub3B0cy5EYXRlMTkwNCksdHIoe2M6QW4uYyxyOkFuLnJ9LFR0LFApO2Jy'@;
put 'ZWFrO2Nhc2UiTXVsUmsiOmZvcih2YXIgd3M9QW4uYzt3czw9QW4uQzsrK3dzKXt2YXIgdWM9QW4ucmtyZWNbd3MtQW4uY11bMF07VHQ9e2l4ZmU6dWMsWEY6Z25bdWNdLHY6QW4ucmtyZWNbd3MtQW4uY11bMV0sdDoibiJ9LHpyPjAmJihUdC56PXppW1R0Lml4ZmU+PjgmNjNdKSxSdShUdCxQ'@;
put 'LEQub3B0cy5EYXRlMTkwNCksdHIoe2M6d3MscjpBbi5yfSxUdCxQKX1icmVhaztjYXNlIkZvcm11bGEiOmlmKCJTdHJpbmciPT1Bbi52YWwpe3ZlPUFuO2JyZWFrfWlmKChUdD1iaChBbi52YWwsQW4uY2VsbC5peGZlLEFuLnR0KSkuWEY9Z25bVHQuaXhmZV0sUC5jZWxsRm9ybXVsYSl7dmFy'@;
put 'IG5zPUFuLmZvcm11bGE7aWYobnMmJm5zWzBdJiZuc1swXVswXSYmIlB0Z0V4cCI9PW5zWzBdWzBdWzBdKXt2YXIgUXQ9bnNbMF1bMF1bMV1bMF0sdm49bnNbMF1bMF1bMV1bMV0sUG49cGkoe3I6UXQsYzp2bn0pO0h0W1BuXT9UdC5mPSIiK0RzKEFuLmZvcm11bGEsX2UsQW4uY2VsbCx4bixZ'@;
put 'bik6VHQuRj0oKFAuZGVuc2U/KG9lW1F0XXx8W10pW3ZuXTpvZVtQbl0pfHx7fSkuRn1lbHNlIFR0LmY9IiIrRHMoQW4uZm9ybXVsYSxfZSxBbi5jZWxsLHhuLFluKX16cj4wJiYoVHQuej16aVtUdC5peGZlPj44JjYzXSksUnUoVHQsUCxELm9wdHMuRGF0ZTE5MDQpLHRyKEFuLmNlbGwsVHQs'@;
put 'UCksdmU9QW47YnJlYWs7Y2FzZSJTdHJpbmciOmlmKCF2ZSl0aHJvdyBuZXcgRXJyb3IoIlN0cmluZyByZWNvcmQgZXhwZWN0cyBGb3JtdWxhIik7dmUudmFsPUFuLChUdD1iaChBbix2ZS5jZWxsLml4ZmUsInMiKSkuWEY9Z25bVHQuaXhmZV0sUC5jZWxsRm9ybXVsYSYmKFR0LmY9IiIrRHMo'@;
put 'dmUuZm9ybXVsYSxfZSx2ZS5jZWxsLHhuLFluKSksenI+MCYmKFR0Lno9emlbVHQuaXhmZT4+OCY2M10pLFJ1KFR0LFAsRC5vcHRzLkRhdGUxOTA0KSx0cih2ZS5jZWxsLFR0LFApLHZlPW51bGw7YnJlYWs7Y2FzZSJBcnJheSI6a3QucHVzaChBbik7dmFyICRyPXBpKEFuWzBdLnMpO2lmKGZ0'@;
put 'PVAuZGVuc2U/KG9lW0FuWzBdLnMucl18fFtdKVtBblswXS5zLmNdOm9lWyRyXSxQLmNlbGxGb3JtdWxhJiZmdCl7aWYoIXZlfHwhJHJ8fCFmdClicmVhaztmdC5mPSIiK0RzKEFuWzFdLF9lLEFuWzBdLHhuLFluKSxmdC5GPVZvKEFuWzBdKX1icmVhaztjYXNlIlNockZtbGEiOmlmKCFQLmNl'@;
put 'bGxGb3JtdWxhKWJyZWFrO2lmKGl0KXtpZighdmUpYnJlYWs7SHRbcGkodmUuY2VsbCldPUFuWzBdLCgoZnQ9UC5kZW5zZT8ob2VbdmUuY2VsbC5yXXx8W10pW3ZlLmNlbGwuY106b2VbcGkodmUuY2VsbCldKXx8e30pLmY9IiIrRHMoQW5bMF0sX2UsWGUseG4sWW4pfWJyZWFrO2Nhc2UiTGFi'@;
put 'ZWxTc3QiOlR0PWJoKE1lW0FuLmlzc3RdLnQsQW4uaXhmZSwicyIpLE1lW0FuLmlzc3RdLmgmJihUdC5oPU1lW0FuLmlzc3RdLmgpLFR0LlhGPWduW1R0Lml4ZmVdLHpyPjAmJihUdC56PXppW1R0Lml4ZmU+PjgmNjNdKSxSdShUdCxQLEQub3B0cy5EYXRlMTkwNCksdHIoe2M6QW4uYyxyOkFu'@;
put 'LnJ9LFR0LFApLE1lW0FuLmlzc3RdLlImJihUdC5SPU1lW0FuLmlzc3RdLlIubWFwKGZ1bmN0aW9uKFVpKXt2YXIgZWk9SnQoVWkpO3JldHVybiBVaS5zPT16bi5Gb250c1swXSYmKGVpLnM9VHQucyksZWl9KSk7YnJlYWs7Y2FzZSJCbGFuayI6UC5zaGVldFN0dWJzJiYoVHQ9e2l4ZmU6QW4u'@;
put 'aXhmZSxYRjpnbltBbi5peGZlXSx0OiJ6In0senI+MCYmKFR0Lno9emlbVHQuaXhmZT4+OCY2M10pLFJ1KFR0LFAsRC5vcHRzLkRhdGUxOTA0KSx0cih7YzpBbi5jLHI6QW4ucn0sVHQsUCkpO2JyZWFrO2Nhc2UiTXVsQmxhbmsiOmlmKFAuc2hlZXRTdHVicylmb3IodmFyIFhuPUFuLmM7WG48'@;
put 'PUFuLkM7KytYbil7dmFyIG5pPUFuLml4ZmVbWG4tQW4uY107VHQ9e2l4ZmU6bmksWEY6Z25bbmldLHQ6InoifSx6cj4wJiYoVHQuej16aVtUdC5peGZlPj44JjYzXSksUnUoVHQsUCxELm9wdHMuRGF0ZTE5MDQpLHRyKHtjOlhuLHI6QW4ucn0sVHQsUCl9YnJlYWs7Y2FzZSJSU3RyaW5nIjpj'@;
put 'YXNlIkxhYmVsIjpjYXNlIkJJRkYyU1RSIjooVHQ9YmgoQW4udmFsLEFuLml4ZmUsInMiKSkuWEY9Z25bVHQuaXhmZV0senI+MCYmKFR0Lno9emlbVHQuaXhmZT4+OCY2M10pLFJ1KFR0LFAsRC5vcHRzLkRhdGUxOTA0KSx0cih7YzpBbi5jLHI6QW4ucn0sVHQsUCk7YnJlYWs7Y2FzZSJEaW1l'@;
put 'bnNpb25zIjoxPT09Q2kmJihfZT1Bbik7YnJlYWs7Y2FzZSJTU1QiOihNZT1BbikuZm9yRWFjaChmdW5jdGlvbihVaSl7VWkuX1I/KFVpLl9SWzBdJiZVaS5fUlswXS5pZHg+MCYmVWkuX1IudW5zaGlmdCh7aWR4OjAsaWZudDowfSksVWkuUj1VaS5fUi5tYXAoZnVuY3Rpb24oZWksa2Epe3Jl'@;
put 'dHVybnt0OiJzIix2OlVpLnQuc2xpY2UoZWkuaWR4LChVaS5fUltrYSsxXXx8e30pLmlkeCksczp6bi5Gb250c1tlaS5pZm50PDQ/ZWkuaWZudDplaS5pZm50LTFdfX0pLFAuY2VsbEhUTUwmJihVaS5oPXVfKFVpLlIpKSk6UC5jZWxsSFRNTCYmKFVpLmg9bG8oVWkudCkpLGRlbGV0ZSBVaS5f'@;
put 'Un0pO2JyZWFrO2Nhc2UiRm9ybWF0IjppZig0PT1Zbi5iaWZmKXt6aVt6cisrXT1BblsxXTtmb3IodmFyIG9yPTA7b3I8enIrMTYzJiZTLl90YWJsZVtvcl0hPUFuWzFdOysrb3IpO29yPj0xNjMmJlMubG9hZChBblsxXSx6cisxNjMpfWVsc2UgUy5sb2FkKEFuWzFdLEFuWzBdKTticmVhaztj'@;
put 'YXNlIkJJRkYyRk9STUFUIjp6aVt6cisrXT1Bbjtmb3IodmFyIG9pPTA7b2k8enIrMTYzJiZTLl90YWJsZVtvaV0hPUFuOysrb2kpO29pPj0xNjMmJlMubG9hZChBbix6cisxNjMpO2JyZWFrO2Nhc2UiTWVyZ2VDZWxscyI6RWk9RWkuY29uY2F0KEFuKTticmVhaztjYXNlIk9iaiI6SWlbQW4u'@;
put 'Y21vWzBdXT1Zbi5sYXN0b2JqPUFuO2JyZWFrO2Nhc2UiVHhPIjpZbi5sYXN0b2JqLlR4Tz1BbjticmVhaztjYXNlIkltRGF0YSI6WW4ubGFzdG9iai5JbURhdGE9QW47YnJlYWs7Y2FzZSJITGluayI6Zm9yKHd0PUFuWzBdLnMucjt3dDw9QW5bMF0uZS5yOysrd3QpZm9yKHV0PUFuWzBdLnMu'@;
put 'Yzt1dDw9QW5bMF0uZS5jOysrdXQpKGZ0PVAuZGVuc2U/KG9lW3d0XXx8W10pW3V0XTpvZVtwaSh7Yzp1dCxyOnd0fSldKSYmKGZ0Lmw9QW5bMV0pO2JyZWFrO2Nhc2UiSExpbmtUb29sdGlwIjpmb3Iod3Q9QW5bMF0ucy5yO3d0PD1BblswXS5lLnI7Kyt3dClmb3IodXQ9QW5bMF0ucy5jO3V0'@;
put 'PD1BblswXS5lLmM7Kyt1dCkoZnQ9UC5kZW5zZT8ob2Vbd3RdfHxbXSlbdXRdOm9lW3BpKHtjOnV0LHI6d3R9KV0pJiZmdC5sJiYoZnQubC5Ub29sdGlwPUFuWzFdKTticmVhaztjYXNlIk5vdGUiOmlmKFluLmJpZmY8PTUmJlluLmJpZmY+PTIpYnJlYWs7ZnQ9UC5kZW5zZT8ob2VbQW5bMF0u'@;
put 'cl18fFtdKVtBblswXS5jXTpvZVtwaShBblswXSldO3ZhciB5bz1JaVtBblsyXV07ZnR8fChQLmRlbnNlPyhvZVtBblswXS5yXXx8KG9lW0FuWzBdLnJdPVtdKSxmdD1vZVtBblswXS5yXVtBblswXS5jXT17dDoieiJ9KTpmdD1vZVtwaShBblswXSldPXt0OiJ6In0sX2UuZS5yPU1hdGgubWF4'@;
put 'KF9lLmUucixBblswXS5yKSxfZS5zLnI9TWF0aC5taW4oX2Uucy5yLEFuWzBdLnIpLF9lLmUuYz1NYXRoLm1heChfZS5lLmMsQW5bMF0uYyksX2Uucy5jPU1hdGgubWluKF9lLnMuYyxBblswXS5jKSksZnQuY3x8KGZ0LmM9W10pLGZ0LmMucHVzaCh7YTpBblsxXSx0OnlvLlR4Ty50fSk7YnJl'@;
put 'YWs7ZGVmYXVsdDpzd2l0Y2gobWkubil7Y2FzZSJDbHJ0Q2xpZW50IjpjYXNlIkhlYWRlciI6Y2FzZSJGb290ZXIiOmNhc2UiSENlbnRlciI6Y2FzZSJWQ2VudGVyIjpjYXNlIlBscyI6Y2FzZSJHQ1ciOmNhc2UiTEhSZWNvcmQiOmNhc2UiREJDZWxsIjpjYXNlIkVudEV4VTIiOmNhc2UiU3hW'@;
put 'aWV3IjpjYXNlIlN4dmQiOmNhc2UiU1hWSSI6Y2FzZSJTWFZERXgiOmNhc2UiU3hJdmQiOmNhc2UiU1hTdHJpbmciOmNhc2UiU3luYyI6Y2FzZSJBZGRpbiI6Y2FzZSJTWERJIjpjYXNlIlNYTEkiOmNhc2UiU1hFeCI6Y2FzZSJRc2lTWFRhZyI6Y2FzZSJGZWF0IjpjYXNlIkZlYXRIZHIiOmNh'@;
put 'c2UiRmVhdEhkcjExIjpjYXNlIkZlYXR1cmUxMSI6Y2FzZSJGZWF0dXJlMTIiOmNhc2UiTGlzdDEyIjpjYXNlIlJlY2FsY0lkIjpjYXNlIkR4R0NvbCI6Y2FzZSJGYmkiOmNhc2UiRmJpMiI6Y2FzZSJHZWxGcmFtZSI6Y2FzZSJYRkNSQyI6Y2FzZSJTdHlsZSI6Y2FzZSJTdHlsZUV4dCI6Y2Fz'@;
put 'ZSJTY2VuYXJpb1Byb3RlY3QiOmNhc2UiT2JqUHJvdGVjdCI6Y2FzZSJDb25kRm10MTIiOmNhc2UiVGFibGUiOmNhc2UiVGFibGVTdHlsZXMiOmNhc2UiVGFibGVTdHlsZSI6Y2FzZSJUYWJsZVN0eWxlRWxlbWVudCI6Y2FzZSJTWFN0cmVhbUlEIjpjYXNlIlNYVlMiOmNhc2UiRENvblJlZiI6'@;
put 'Y2FzZSJTWEFkZGwiOmNhc2UiRENvbkJpbiI6Y2FzZSJEQ29uTmFtZSI6Y2FzZSJTWFBJIjpjYXNlIlN4Rm9ybWF0IjpjYXNlIlN4U2VsZWN0IjpjYXNlIlN4UnVsZSI6Y2FzZSJTeEZpbHQiOmNhc2UiU3hJdG0iOmNhc2UiU3hEWEYiOmNhc2UiU2Nlbk1hbiI6Y2FzZSJEQ29uIjpjYXNlIkNl'@;
put 'bGxXYXRjaCI6Y2FzZSJQcmludFJvd0NvbCI6Y2FzZSJQcmludEdyaWQiOmNhc2UiUHJpbnRTaXplIjpjYXNlIlhDVCI6Y2FzZSJDUk4iOmNhc2UiU2NsIjpjYXNlIlNoZWV0RXh0IjpjYXNlIlNoZWV0RXh0T3B0aW9uYWwiOmNhc2UiT2JOb01hY3JvcyI6Y2FzZSJPYlByb2oiOmNhc2UiR1VJ'@;
put 'RFR5cGVMaWIiOmNhc2UiV09wdCI6Y2FzZSJQaG9uZXRpY0luZm8iOmNhc2UiT2xlT2JqZWN0U2l6ZSI6Y2FzZSJEWEYiOmNhc2UiRFhGTiI6Y2FzZSJEWEZOMTIiOmNhc2UiRFhGTjEyTGlzdCI6Y2FzZSJEWEZOMTJOb0NCIjpjYXNlIkR2IjpjYXNlIkRWYWwiOmNhc2UiQlJBSSI6Y2FzZSJT'@;
put 'ZXJpZXMiOmNhc2UiU2VyaWVzVGV4dCI6Y2FzZSJEQ29ubiI6Y2FzZSJEYk9yUGFyYW1RcnkiOmNhc2UiREJRdWVyeUV4dCI6Y2FzZSJPbGVEYkNvbm4iOmNhc2UiRXh0U3RyaW5nIjpjYXNlIklGbXRSZWNvcmQiOmNhc2UiQ29uZEZtdCI6Y2FzZSJDRiI6Y2FzZSJDRjEyIjpjYXNlIkNGRXgi'@;
put 'OmNhc2UiRXhjZWw5RmlsZSI6Y2FzZSJVbml0cyI6Y2FzZSJJbnRlcmZhY2VIZHIiOmNhc2UiTW1zIjpjYXNlIkludGVyZmFjZUVuZCI6Y2FzZSJEU0YiOmNhc2UiQnVpbHRJbkZuR3JvdXBDb3VudCI6Y2FzZSJXaW5kb3cxIjpjYXNlIkhpZGVPYmoiOmNhc2UiR3JpZFNldCI6Y2FzZSJHdXRz'@;
put 'IjpjYXNlIlVzZXJCVmlldyI6Y2FzZSJVc2VyU1ZpZXdCZWdpbiI6Y2FzZSJVc2VyU1ZpZXdFbmQiOmNhc2UiRGVmQ29sV2lkdGgiOmNhc2UiRGVmYXVsdFJvd0hlaWdodCI6YnJlYWs7Y2FzZSJYRkV4dCI6UkgoZ25bQW4uaXhmZV0sQW4uZXh0KTticmVhaztjYXNlIkNvbEluZm8iOmlmKCFZ'@;
put 'bi5jZWxsU3R5bGVzKWJyZWFrO2Zvcig7QW4uZT49QW4uczspdGlbQW4uZS0tXT17d2lkdGg6QW4udy8yNTYsbGV2ZWw6QW4ubGV2ZWx8fDAsaGlkZGVuOiEhKDEmQW4uZmxhZ3MpfSxycnx8KHJyPSEwKSxfYyh0aVtBbi5lKzFdKTticmVhaztjYXNlIlJvdyI6dmFyIGFpPXt9O251bGwhPUFu'@;
put 'LmxldmVsJiYoZnJbQW4ucl09YWksYWkubGV2ZWw9QW4ubGV2ZWwpLEFuLmhpZGRlbiYmKGZyW0FuLnJdPWFpLGFpLmhpZGRlbj0hMCksQW4uaHB0JiYoZnJbQW4ucl09YWksYWkuaHB0PUFuLmhwdCxhaS5ocHg9ZGYoQW4uaHB0KSksQW4uaXhmZSYmKGZyW0FuLnJdPWFpLGVyKFR0PXtpeGZl'@;
put 'OkFuLml4ZmUsWEY6Z25bQW4uaXhmZV18fHt9LHY6MCx0OiJuIn0sUCksYWkucz1UdC5zKTticmVhaztjYXNlIkxlZnRNYXJnaW4iOmNhc2UiUmlnaHRNYXJnaW4iOmNhc2UiVG9wTWFyZ2luIjpjYXNlIkJvdHRvbU1hcmdpbiI6b2VbIiFtYXJnaW5zIl18fEkyKG9lWyIhbWFyZ2lucyJdPXt9'@;
put 'KSxvZVsiIW1hcmdpbnMiXVtBYS5zbGljZSgwLC02KS50b0xvd2VyQ2FzZSgpXT1BbjticmVhaztjYXNlIlNlbGVjdGlvbiI6b2VbIiFzZWwiXT1BbjticmVhaztjYXNlIlNldHVwIjpvZVsiIW1hcmdpbnMiXXx8STIob2VbIiFtYXJnaW5zIl09e30pLG9lWyIhbWFyZ2lucyJdLmhlYWRlcj1B'@;
put 'bi5oZWFkZXIsb2VbIiFtYXJnaW5zIl0uZm9vdGVyPUFuLmZvb3RlcjticmVhaztjYXNlIldpbmRvdzIiOkFuLlJUTCYmKGZuLlZpZXdzWzBdLlJUTD0hMCksanI9QW47YnJlYWs7Y2FzZSJDb3VudHJ5IjpZdD1BbjticmVhaztjYXNlIkZvbnQiOkFuLmljdiYmT24oQW4uaWN2KSYmKEFuLmNv'@;
put 'bG9yPXtyZ2I6ZmYoT24oQW4uaWN2KSl9KSxkZWxldGUgQW4uaWN2LDA9PXpuLkZvbnRzLmxlbmd0aCYmaGYoQW4pLHpuLkZvbnRzLnB1c2goQW4pO2JyZWFrO2Nhc2UiUGFsZXR0ZSI6cW49QW47YnJlYWs7Y2FzZSJUaGVtZSI6bGk9QW47YnJlYWs7Y2FzZSJDb2RlTmFtZSI6amU/S24uQ29k'@;
put 'ZU5hbWU9QW58fEtuLm5hbWU6Zm4uV0JQcm9wcy5Db2RlTmFtZT1Bbnx8IlRoaXNXb3JrYm9vayI7YnJlYWs7Y2FzZSJQYW5lIjooanJ8fHt9KS5mcm96ZW4mJihvZVsiIWZyZWV6ZSJdPXBpKHtyOkFuLnl8fDAsYzpBbi54fHwwfSkpO2JyZWFrO2RlZmF1bHQ6c3dpdGNoKG1pLm4pe2Nhc2Ui'@;
put 'RGF0IjpjYXNlIkJlZ2luIjpjYXNlIkVuZCI6Y2FzZSJTdGFydEJsb2NrIjpjYXNlIkVuZEJsb2NrIjpjYXNlIkZyYW1lIjpjYXNlIkFyZWEiOmNhc2UiQXhpcyI6Y2FzZSJBeGlzTGluZSI6Y2FzZSJUaWNrIjpjYXNlIkF4ZXNVc2VkIjpjYXNlIkNydExheW91dDEyIjpjYXNlIkNydExheW91'@;
put 'dDEyQSI6Y2FzZSJDcnRMaW5rIjpjYXNlIkNydExpbmUiOmNhc2UiQ3J0TWxGcnQiOmNhc2UiQ3J0TWxGcnRDb250aW51ZSI6Y2FzZSJMaW5lRm9ybWF0IjpjYXNlIkFyZWFGb3JtYXQiOmNhc2UiQ2hhcnQiOmNhc2UiQ2hhcnQzZCI6Y2FzZSJDaGFydDNEQmFyU2hhcGUiOmNhc2UiQ2hhcnRG'@;
put 'b3JtYXQiOmNhc2UiQ2hhcnRGcnRJbmZvIjpjYXNlIlBsb3RBcmVhIjpjYXNlIlBsb3RHcm93dGgiOmNhc2UiU2VyaWVzTGlzdCI6Y2FzZSJTZXJQYXJlbnQiOmNhc2UiU2VyQXV4VHJlbmQiOmNhc2UiRGF0YUZvcm1hdCI6Y2FzZSJTZXJUb0NydCI6Y2FzZSJGb250WCI6Y2FzZSJDYXRTZXJS'@;
put 'YW5nZSI6Y2FzZSJBeGNFeHQiOmNhc2UiU2VyRm10IjpjYXNlIlNodFByb3BzIjpjYXNlIkRlZmF1bHRUZXh0IjpjYXNlIlRleHQiOmNhc2UiQ2F0TGFiIjpjYXNlIkRhdGFMYWJFeHRDb250ZW50cyI6Y2FzZSJMZWdlbmQiOmNhc2UiTGVnZW5kRXhjZXB0aW9uIjpjYXNlIlBpZSI6Y2FzZSJT'@;
put 'Y2F0dGVyIjpjYXNlIlBpZUZvcm1hdCI6Y2FzZSJNYXJrZXJGb3JtYXQiOmNhc2UiU3RhcnRPYmplY3QiOmNhc2UiRW5kT2JqZWN0IjpjYXNlIkFsUnVucyI6Y2FzZSJPYmplY3RMaW5rIjpjYXNlIlNJSW5kZXgiOmNhc2UiQXR0YWNoZWRMYWJlbCI6Y2FzZSJZTXVsdCI6Y2FzZSJMaW5lIjpj'@;
put 'YXNlIkJhciI6Y2FzZSJTdXJmIjpjYXNlIkF4aXNQYXJlbnQiOmNhc2UiUG9zIjpjYXNlIlZhbHVlUmFuZ2UiOmNhc2UiU1hWaWV3RXg5IjpjYXNlIlNYVmlld0xpbmsiOmNhc2UiUGl2b3RDaGFydEJpdHMiOmNhc2UiU0Jhc2VSZWYiOmNhc2UiVGV4dFByb3BzU3RyZWFtIjpjYXNlIkxuRXh0'@;
put 'IjpjYXNlIk1rckV4dCI6Y2FzZSJDcnRDb29wdCI6Y2FzZSJRc2kiOmNhc2UiUXNpZiI6Y2FzZSJRc2lyIjpjYXNlIlFzaVNYVGFnIjpjYXNlIlR4dFFyeSI6Y2FzZSJGaWx0ZXJNb2RlIjpjYXNlIkF1dG9GaWx0ZXIiOmNhc2UiQXV0b0ZpbHRlckluZm8iOmNhc2UiQXV0b0ZpbHRlcjEyIjpj'@;
put 'YXNlIkRyb3BEb3duT2JqSWRzIjpjYXNlIlNvcnQiOmNhc2UiU29ydERhdGEiOmNhc2UiU2hhcGVQcm9wc1N0cmVhbSI6Y2FzZSJNc29EcmF3aW5nIjpjYXNlIk1zb0RyYXdpbmdHcm91cCI6Y2FzZSJNc29EcmF3aW5nU2VsZWN0aW9uIjpjYXNlIldlYlB1YiI6Y2FzZSJBdXRvV2ViUHViIjpj'@;
put 'YXNlIkhlYWRlckZvb3RlciI6Y2FzZSJIRlBpY3R1cmUiOmNhc2UiUExWIjpjYXNlIkhvcml6b250YWxQYWdlQnJlYWtzIjpjYXNlIlZlcnRpY2FsUGFnZUJyZWFrcyI6Y2FzZSJCYWNrdXAiOmNhc2UiQ29tcHJlc3NQaWN0dXJlcyI6Y2FzZSJDb21wYXQxMiI6Y2FzZSJDb250aW51ZSI6Y2Fz'@;
put 'ZSJDb250aW51ZUZydDEyIjpjYXNlIkZydEZvbnRMaXN0IjpjYXNlIkZydFdyYXBwZXIiOmJyZWFrO2RlZmF1bHQ6c3dpdGNoKG1pLm4pe2Nhc2UiVGFiSWRDb25mIjpjYXNlIlJhZGFyIjpjYXNlIlJhZGFyQXJlYSI6Y2FzZSJEcm9wQmFyIjpjYXNlIkludGwiOmNhc2UiQ29vcmRMaXN0Ijpj'@;
put 'YXNlIlNlckF1eEVyckJhciI6Y2FzZSJCSUZGMkZPTlRDTFIiOmNhc2UiQklGRjJGTVRDTlQiOmNhc2UiQklGRjJGT05UWFRSQSI6Y2FzZSJCSUZGMlhGIjpjYXNlIkJJRkYzWEYiOmNhc2UiQklGRjRYRiI6Y2FzZSJCSUZGMlhGSU5ERVgiOmNhc2UiQklGRjRGTVRDTlQiOmNhc2UiQklGRjJS'@;
put 'T1ciOmNhc2UiQklGRjJXSU5ET1cyIjpjYXNlIlNDRU5BUklPIjpjYXNlIkRDb25CaW4iOmNhc2UiUGljRiI6Y2FzZSJEYXRhTGFiRXh0IjpjYXNlIkxlbCI6Y2FzZSJCb3BQb3AiOmNhc2UiQm9wUG9wQ3VzdG9tIjpjYXNlIlJlYWxUaW1lRGF0YSI6Y2FzZSJOYW1lIjpjYXNlIkxITkdyYXBo'@;
put 'IjpjYXNlIkZuR3JvdXBOYW1lIjpjYXNlIkFkZE1lbnUiOmNhc2UiTFByIjpjYXNlIkxpc3RPYmoiOmNhc2UiTGlzdEZpZWxkIjpjYXNlIlJSU29ydCI6Y2FzZSJCaWdOYW1lIjpjYXNlIlRvb2xiYXJIZHIiOmNhc2UiVG9vbGJhckVuZCI6Y2FzZSJEREVPYmpOYW1lIjpjYXNlIkZSVEFyY2hJ'@;
put 'ZCQiOmJyZWFrO2RlZmF1bHQ6aWYoUC5XVEYpdGhyb3ciVW5yZWNvZ25pemVkIFJlY29yZCAiK21pLm59fX19fWVsc2Ugdy5sKz1UbyxZbiYmWW4uZW5jJiZZbi5lbmMuaW5zaXR1JiZZbi5lbmMuaW5zaXR1KHVlKHtsZW5ndGg6VG99KSl9cmV0dXJuIEQuU2hlZXROYW1lcz1tdChnZSkuc29y'@;
put 'dChmdW5jdGlvbihVaSxlaSl7cmV0dXJuIE51bWJlcihVaSktTnVtYmVyKGVpKX0pLm1hcChmdW5jdGlvbihVaSl7cmV0dXJuIGdlW1VpXS5uYW1lfSksUC5ib29rU2hlZXRzfHwoRC5TaGVldHM9ZWUpLCFELlNoZWV0TmFtZXMubGVuZ3RoJiZVZVsiIXJlZiJdPyhELlNoZWV0TmFtZXMucHVz'@;
put 'aCgiU2hlZXQxIiksRC5TaGVldHMmJihELlNoZWV0cy5TaGVldDE9VWUpKTpELlByZWFtYmxlPVVlLEQuU2hlZXRzJiZ3by5mb3JFYWNoKGZ1bmN0aW9uKFVpLGVpKXtELlNoZWV0c1tELlNoZWV0TmFtZXNbZWldXVsiIWF1dG9maWx0ZXIiXT1VaX0pLEQuU3RyaW5ncz1NZSxELlNTRj1TLmdl'@;
put 'dF90YWJsZSgpLFluLmVuYyYmKEQuRW5jcnlwdGlvbj1Zbi5lbmMpLGxpJiYoRC5UaGVtZXM9bGkpLEQuTWV0YWRhdGE9e30sdm9pZCAwIT09WXQmJihELk1ldGFkYXRhLkNvdW50cnk9WXQpLHhuLm5hbWVzLmxlbmd0aD4wJiYoZm4uTmFtZXM9eG4ubmFtZXMpLEQuV29ya2Jvb2s9Zm4sRH0o'@;
put 'ZWUuY29udGVudCxQKTtlbHNlIGlmKChnZT1OZS5maW5kKHcsIlBlcmZlY3RPZmZpY2VfTUFJTiIpKSYmZ2UuY29udGVudClvZT1sOC50b193b3JrYm9vayhnZS5jb250ZW50LChQLnR5cGU9X2UsUCkpO2Vsc2V7aWYoIShnZT1OZS5maW5kKHcsIk5hdGl2ZUNvbnRlbnRfTUFJTiIpKXx8IWdl'@;
put 'LmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBXb3JrYm9vayBzdHJlYW0iKTtvZT1sOC50b193b3JrYm9vayhnZS5jb250ZW50LChQLnR5cGU9X2UsUCkpfVAuYm9va1ZCQSYmdy5GdWxsUGF0aHMmJk5lLmZpbmQodywiL19WQkFfUFJPSkVDVF9DVVIvVkJBL2RpciIpJiYo'@;
put 'b2UudmJhcmF3PWZ1bmN0aW9uICRtKHcpe3ZhciBQPU5lLnV0aWxzLmNmYl9uZXcoe3Jvb3Q6IlIifSk7cmV0dXJuIHcuRnVsbFBhdGhzLmZvckVhY2goZnVuY3Rpb24oRCxlZSl7aWYoIi8iIT09RC5zbGljZSgtMSkmJkQubWF0Y2goL19WQkFfUFJPSkVDVF9DVVIvKSl7dmFyIG9lPUQucmVw'@;
put 'bGFjZSgvXlteXC9dKi8sIlIiKS5yZXBsYWNlKC9cL19WQkFfUFJPSkVDVF9DVVJcdTAwMDAqLywiIik7TmUudXRpbHMuY2ZiX2FkZChQLG9lLHcuRmlsZUluZGV4W2VlXS5jb250ZW50KX19KSxOZS53cml0ZShQKX0odykpfXZhciB2ZT17fTtyZXR1cm4gdy5GdWxsUGF0aHMmJmZ1bmN0aW9u'@;
put 'IEpUKHcsUCxEKXt2YXIgZWU9TmUuZmluZCh3LCIhRG9jdW1lbnRTdW1tYXJ5SW5mb3JtYXRpb24iKTtpZihlZSYmZWUuc2l6ZT4wKXRyeXt2YXIgb2U9V2IoZWUsbW0sS3AuRFNJKTtmb3IodmFyIGdlIGluIG9lKVBbZ2VdPW9lW2dlXX1jYXRjaChqZSl7aWYoRC5XVEYpdGhyb3cgamV9dmFy'@;
put 'IF9lPU5lLmZpbmQodywiIVN1bW1hcnlJbmZvcm1hdGlvbiIpO2lmKF9lJiZfZS5zaXplPjApdHJ5e3ZhciB2ZT1XYihfZSxrcixLcC5TSSk7Zm9yKHZhciBNZSBpbiB2ZSludWxsPT1QW01lXSYmKFBbTWVdPXZlW01lXSl9Y2F0Y2goamUpe2lmKEQuV1RGKXRocm93IGplfVAuSGVhZGluZ1Bh'@;
put 'aXJzJiZQLlRpdGxlc09mUGFydHMmJih3MChQLkhlYWRpbmdQYWlycyxQLlRpdGxlc09mUGFydHMsUCxEKSxkZWxldGUgUC5IZWFkaW5nUGFpcnMsZGVsZXRlIFAuVGl0bGVzT2ZQYXJ0cyl9KHcsdmUsUCksb2UuUHJvcHM9b2UuQ3VzdHByb3BzPXZlLFAuYm9va0ZpbGVzJiYob2UuY2ZiPXcp'@;
put 'LG9lfXZhciBIMj17MDp7bjoiQnJ0Um93SGRyIixmOmZ1bmN0aW9uIEhOKHcsUCl7dmFyIEQ9e30sZWU9dy5sK1A7RC5yPXcucmVhZF9zaGlmdCg0KSx3LmwrPTQ7dmFyIG9lPXcucmVhZF9zaGlmdCgyKTt3LmwrPTE7dmFyIGdlPXcucmVhZF9zaGlmdCgxKTtyZXR1cm4gdy5sPWVlLDcmZ2Um'@;
put 'JihELmxldmVsPTcmZ2UpLDE2JmdlJiYoRC5oaWRkZW49ITApLDMyJmdlJiYoRC5ocHQ9b2UvMjApLER9fSwxOntuOiJCcnRDZWxsQmxhbmsiLGY6ZnVuY3Rpb24geXcodyl7cmV0dXJuW2djKHcpXX19LDI6e246IkJydENlbGxSayIsZjpmdW5jdGlvbiAkTih3KXtyZXR1cm5bZ2ModyksaWMo'@;
put 'dyksIm4iXX19LDM6e246IkJydENlbGxFcnJvciIsZjpmdW5jdGlvbiB3ZWUodyl7cmV0dXJuW2djKHcpLHcucmVhZF9zaGlmdCgxKSwiZSJdfX0sNDp7bjoiQnJ0Q2VsbEJvb2wiLGY6ZnVuY3Rpb24gaFQodyl7cmV0dXJuW2djKHcpLHcucmVhZF9zaGlmdCgxKSwiYiJdfX0sNTp7bjoiQnJ0'@;
put 'Q2VsbFJlYWwiLGY6ZnVuY3Rpb24gV04odyl7cmV0dXJuW2djKHcpLHlsKHcpLCJuIl19fSw2OntuOiJCcnRDZWxsU3QiLGY6ZnVuY3Rpb24gdHYodyl7cmV0dXJuW2djKHcpLFR1KHcpLCJzdHIiXX19LDc6e246IkJydENlbGxJc3N0IixmOmZ1bmN0aW9uIHlUKHcpe3JldHVybltnYyh3KSx3'@;
put 'LnJlYWRfc2hpZnQoNCksInMiXX19LDg6e246IkJydEZtbGFTdHJpbmciLGY6ZnVuY3Rpb24gWE4odyxQLEQpe3ZhciBlZT13LmwrUCxvZT1nYyh3KTtvZS5yPURbIiFyb3ciXTt2YXIgX2U9W29lLFR1KHcpLCJzdHIiXTtpZihELmNlbGxGb3JtdWxhKXt3LmwrPTI7dmFyIHZlPVU4KHcsZWUt'@;
put 'dy5sLEQpO19lWzNdPURzKHZlLG51bGwsb2UsRC5zdXBib29rcyxEKX1lbHNlIHcubD1lZTtyZXR1cm4gX2V9fSw5OntuOiJCcnRGbWxhTnVtIixmOmZ1bmN0aW9uIENUKHcsUCxEKXt2YXIgZWU9dy5sK1Asb2U9Z2Modyk7b2Uucj1EWyIhcm93Il07dmFyIF9lPVtvZSx5bCh3KSwibiJdO2lm'@;
put 'KEQuY2VsbEZvcm11bGEpe3cubCs9Mjt2YXIgdmU9VTgodyxlZS13LmwsRCk7X2VbM109RHModmUsbnVsbCxvZSxELnN1cGJvb2tzLEQpfWVsc2Ugdy5sPWVlO3JldHVybiBfZX19LDEwOntuOiJCcnRGbWxhQm9vbCIsZjpmdW5jdGlvbiBxTih3LFAsRCl7dmFyIGVlPXcubCtQLG9lPWdjKHcp'@;
put 'O29lLnI9RFsiIXJvdyJdO3ZhciBfZT1bb2Usdy5yZWFkX3NoaWZ0KDEpLCJiIl07aWYoRC5jZWxsRm9ybXVsYSl7dy5sKz0yO3ZhciB2ZT1VOCh3LGVlLXcubCxEKTtfZVszXT1Ecyh2ZSxudWxsLG9lLEQuc3VwYm9va3MsRCl9ZWxzZSB3Lmw9ZWU7cmV0dXJuIF9lfX0sMTE6e246IkJydEZt'@;
put 'bGFFcnJvciIsZjpmdW5jdGlvbiB3VCh3LFAsRCl7dmFyIGVlPXcubCtQLG9lPWdjKHcpO29lLnI9RFsiIXJvdyJdO3ZhciBfZT1bb2Usdy5yZWFkX3NoaWZ0KDEpLCJlIl07aWYoRC5jZWxsRm9ybXVsYSl7dy5sKz0yO3ZhciB2ZT1VOCh3LGVlLXcubCxEKTtfZVszXT1Ecyh2ZSxudWxsLG9l'@;
put 'LEQuc3VwYm9va3MsRCl9ZWxzZSB3Lmw9ZWU7cmV0dXJuIF9lfX0sMTI6e246IkJydFNob3J0QmxhbmsiLGY6ZnVuY3Rpb24gZFQodyl7cmV0dXJuW3kwKHcpXX19LDEzOntuOiJCcnRTaG9ydFJrIixmOmZ1bmN0aW9uIF9UKHcpe3JldHVyblt5MCh3KSxpYyh3KSwibiJdfX0sMTQ6e246IkJy'@;
put 'dFNob3J0RXJyb3IiLGY6ZnVuY3Rpb24gZ1Qodyl7cmV0dXJuW3kwKHcpLHcucmVhZF9zaGlmdCgxKSwiZSJdfX0sMTU6e246IkJydFNob3J0Qm9vbCIsZjpmdW5jdGlvbiBldih3KXtyZXR1cm5beTAodyksdy5yZWFkX3NoaWZ0KDEpLCJiIl19fSwxNjp7bjoiQnJ0U2hvcnRSZWFsIixmOmJU'@;
put 'fSwxNzp7bjoiQnJ0U2hvcnRTdCIsZjpmdW5jdGlvbiBudih3KXtyZXR1cm5beTAodyksVHUodyksInN0ciJdfX0sMTg6e246IkJydFNob3J0SXNzdCIsZjpmdW5jdGlvbiBmZCh3KXtyZXR1cm5beTAodyksdy5yZWFkX3NoaWZ0KDQpLCJzIl19fSwxOTp7bjoiQnJ0U1NUSXRlbSIsZjpjbH0s'@;
put 'MjA6e246IkJydFBDRElNaXNzaW5nIn0sMjE6e246IkJydFBDRElOdW1iZXIifSwyMjp7bjoiQnJ0UENESUJvb2xlYW4ifSwyMzp7bjoiQnJ0UENESUVycm9yIn0sMjQ6e246IkJydFBDRElTdHJpbmcifSwyNTp7bjoiQnJ0UENESURhdGV0aW1lIn0sMjY6e246IkJydFBDRElJbmRleCJ9LDI3'@;
put 'OntuOiJCcnRQQ0RJQU1pc3NpbmcifSwyODp7bjoiQnJ0UENESUFOdW1iZXIifSwyOTp7bjoiQnJ0UENESUFCb29sZWFuIn0sMzA6e246IkJydFBDRElBRXJyb3IifSwzMTp7bjoiQnJ0UENESUFTdHJpbmcifSwzMjp7bjoiQnJ0UENESUFEYXRldGltZSJ9LDMzOntuOiJCcnRQQ1JSZWNvcmQi'@;
put 'fSwzNDp7bjoiQnJ0UENSUmVjb3JkRHQifSwzNTp7bjoiQnJ0RlJUQmVnaW4ifSwzNjp7bjoiQnJ0RlJURW5kIn0sMzc6e246IkJydEFDQmVnaW4ifSwzODp7bjoiQnJ0QUNFbmQifSwzOTp7bjoiQnJ0TmFtZSIsZjpmdW5jdGlvbiBmZyh3LFAsRCl7dmFyIGVlPXcubCtQO3cubCs9NCx3Lmwr'@;
put 'PTE7dmFyIG9lPXcucmVhZF9zaGlmdCg0KSxnZT12Yyh3KSxfZT1OQSh3LDAsRCksdmU9SGModyk7dy5sPWVlO3ZhciBNZT17TmFtZTpnZSxQdGc6X2V9O3JldHVybiBvZTwyNjg0MzU0NTUmJihNZS5TaGVldD1vZSksdmUmJihNZS5Db21tZW50PXZlKSxNZX19LDQwOntuOiJCcnRJbmRleFJv'@;
put 'd0Jsb2NrIn0sNDI6e246IkJydEluZGV4QmxvY2sifSw0Mzp7bjoiQnJ0Rm9udCIsZjpmdW5jdGlvbiAkeCh3LFAsRCl7dmFyIGVlPXt9O2VlLnN6PXcucmVhZF9zaGlmdCgyKS8yMDt2YXIgb2U9Y20odyk7c3dpdGNoKG9lLmZCb2xkJiYoZWUuYm9sZD0xKSxvZS5mSXRhbGljJiYoZWUuaXRh'@;
put 'bGljPTEpLG9lLmZVbmRlcmxpbmUmJihlZS51bmRlcmxpbmU9MSksb2UuZkNvbmRlbnNlJiYoZWUuY29uZGVuc2U9MSksb2UuZkV4dGVuZCYmKGVlLmV4dGVuZD0xKSxvZS5mU2hhZG93JiYoZWUuc2hhZG93PTEpLG9lLmZPdXRsaW5lJiYoZWUub3V0bGluZT0xKSxvZS5mU3RyaWtlb3V0JiYo'@;
put 'ZWUuc3RyaWtlPTEpLDcwMD09PXcucmVhZF9zaGlmdCgyKSYmKGVlLmJvbGQ9MSksdy5yZWFkX3NoaWZ0KDIpKXtjYXNlIDE6ZWUudmFsaWduPSJzdXBlciI7YnJlYWs7Y2FzZSAyOmVlLnZhbGlnbj0ic3ViIn12YXIgX2U9dy5yZWFkX3NoaWZ0KDEpOzAhPV9lJiYoZWUudW5kZXJsaW5lPV9l'@;
put 'KTt2YXIgdmU9dy5yZWFkX3NoaWZ0KDEpO3ZlPjAmJihlZS5mYW1pbHk9dmUpO3ZhciBNZT13LnJlYWRfc2hpZnQoMSk7c3dpdGNoKE1lPjAmJihlZS5jaGFyc2V0PU1lKSx3LmwrKyxlZS5jb2xvcj0kZih3KSx3LnJlYWRfc2hpZnQoMSkpe2Nhc2UgMTplZS5zY2hlbWU9Im1ham9yIjticmVh'@;
put 'aztjYXNlIDI6ZWUuc2NoZW1lPSJtaW5vciJ9cmV0dXJuIGVlLm5hbWU9VHUodyksZWV9fSw0NDp7bjoiQnJ0Rm10IixmOmZ1bmN0aW9uIEd4KHcsUCl7cmV0dXJuW3cucmVhZF9zaGlmdCgyKSxUdSh3KV19fSw0NTp7bjoiQnJ0RmlsbCIsZjpmdW5jdGlvbiB2SCh3LFApe3ZhciBEPXcubCtQ'@;
put 'LGVlPXt9LG9lPXcucmVhZF9zaGlmdCg0KTtpZig0MCE9b2Upe2VlLnBhdHRlcm5UeXBlPUZtW29lXTt2YXIgZ2U9JGYodyk7NjQhPWdlLmluZGV4JiYoZWUuZmdDb2xvcj1nZSk7dmFyIF9lPSRmKHcpOzY1IT1fZS5pbmRleCYmKGVlLmJnQ29sb3I9X2UpfWVsc2V7dy5sKz0xNix3LnJlYWRf'@;
put 'c2hpZnQoNCkseWwodykseWwodykseWwodykseWwodykseWwodyk7Zm9yKHZhciB2ZT13LnJlYWRfc2hpZnQoNCksTWU9W10samU9MDtqZTx2ZTsrK2plKU1lLnB1c2goUzgodykpfXJldHVybiB3Lmw9RCxlZX19LDQ2OntuOiJCcnRCb3JkZXIiLGY6ZnVuY3Rpb24gYkgodyl7dmFyIFA9e307'@;
put 'dy5yZWFkX3NoaWZ0KDEpO3ZhciBEPU5tKHcpOyJub25lIiE9RC5zdHlsZSYmKFAudG9wPUQpO3ZhciBlZT1ObSh3KTsibm9uZSIhPWVlLnN0eWxlJiYoUC5ib3R0b209ZWUpO3ZhciBvZT1ObSh3KTsibm9uZSIhPW9lLnN0eWxlJiYoUC5sZWZ0PW9lKTt2YXIgZ2U9Tm0odyk7Im5vbmUiIT1n'@;
put 'ZS5zdHlsZSYmKFAucmlnaHQ9Z2UpO3ZhciBfZT1ObSh3KTtyZXR1cm4ibm9uZSIhPV9lLnN0eWxlJiYoUC5kaWFnPV9lKSxQfX0sNDc6e246IkJydFhGIixmOmZ1bmN0aW9uIGJfKHcsUCl7dmFyIEQ9dy5sK1AsZWU9e30sb2U9dy5yZWFkX3NoaWZ0KDIpLGdlPXcucmVhZF9zaGlmdCgyKSxf'@;
put 'ZT13LnJlYWRfc2hpZnQoMiksdmU9dy5yZWFkX3NoaWZ0KDIpLE1lPXcucmVhZF9zaGlmdCgyKSxqZT13LnJlYWRfc2hpZnQoMSk7dy5yZWFkX3NoaWZ0KDEpO3ZhciBVZT13LnJlYWRfc2hpZnQoMiksWGU9dy5yZWFkX3NoaWZ0KDEpO3cubD1ELGVlLnhmSWQ9b2UsZWUubnVtRm10SWQ9Z2Us'@;
put 'ZWUuZm9udElkPV9lLGVlLmZpbGxJZD12ZSxlZS5ib3JkZXJJZD1NZSwxJlhlJiYwIT1lZS5udW1GbXRJZCYmKGVlLmFwcGx5TnVtYmVyRm9ybWF0PSEwKSxlZS5hbGlnbm1lbnQ9e30samU+MCYmKGVlLmFsaWdubWVudC50ZXh0Um90YXRpb249amUpO3ZhciBpdD0hMTtyZXR1cm4gNyZVZSYm'@;
put 'KGl0PSEwLGVlLmFsaWdubWVudC5ob3Jpem9udGFsPU04WzcmVWVdKSxlZS5hbGlnbm1lbnQudmVydGljYWw9SG1bVWU+Pj4zJjddLGVlLmFsaWdubWVudC52ZXJ0aWNhbCYmKGl0PSEwKSxVZT4+PjYmMSYmKGVlLmFsaWdubWVudC53cmFwVGV4dD0hMCksVWU+Pj44JjEmJihlZS5hbGlnbm1l'@;
put 'bnQuc2hyaW5rVG9GaXQ9ITApLGl0fHxkZWxldGUgZWUuYWxpZ25tZW50LDQmWGUmJml0JiYoZWUuYXBwbHlBbGlnbm1lbnQ9ITApLGVlfX0sNDg6e246IkJydFN0eWxlIn0sNDk6e246IkJydENlbGxNZXRhIn0sNTA6e246IkJydFZhbHVlTWV0YSJ9LDUxOntuOiJCcnRNZGIifSw1Mjp7bjoi'@;
put 'QnJ0QmVnaW5GbWQifSw1Mzp7bjoiQnJ0RW5kRm1kIn0sNTQ6e246IkJydEJlZ2luTWR4In0sNTU6e246IkJydEVuZE1keCJ9LDU2OntuOiJCcnRCZWdpbk1keFR1cGxlIn0sNTc6e246IkJydEVuZE1keFR1cGxlIn0sNTg6e246IkJydE1keE1icklzdHIifSw1OTp7bjoiQnJ0U3RyIn0sNjA6'@;
put 'e246IkJydENvbEluZm8iLGY6cmR9LDYyOntuOiJCcnRDZWxsUlN0cmluZyJ9LDYzOntuOiJCcnRDYWxjQ2hhaW5JdGVtJCIsZjpmdW5jdGlvbiBVbSh3KXt2YXIgUD17fTtQLmk9dy5yZWFkX3NoaWZ0KDQpO3ZhciBEPXt9O0Qucj13LnJlYWRfc2hpZnQoNCksRC5jPXcucmVhZF9zaGlmdCg0'@;
put 'KSxQLnI9cGkoRCk7dmFyIGVlPXcucmVhZF9zaGlmdCgxKTtyZXR1cm4gMiZlZSYmKFAubD0iMSIpLDgmZWUmJihQLmE9IjEiKSxQfX0sNjQ6e246IkJydERWYWwiLGY6ZnVuY3Rpb24gcnYodyxQLEQpe3ZhciBlZT13LmwrUCxvZT13LnJlYWRfc2hpZnQoNCksZ2U9YjAodyksX2U9SGModyks'@;
put 'dmU9SGModyksTWU9SGModyksamU9SGModyksVWU9RkEodyxQLEQpLFhlPXcubDxlZT9GQSh3LFAsRCk6bnVsbCxpdD0xNSZvZSxmdD17dDpyb1tpdF0sc3FyZng6Z2UsczpbX2UsdmUsTWUsamVdfTtyZXR1cm4gVWUmJihmdC5mMT1VZSksWGUmJihmdC5mMj1YZSksMD09aXR8fDM9PWl0fHw3'@;
put 'PT1pdHx8KGZ0Lm9wPUN3W29lPj4yMCYxNV0pLGZ0fX0sNjU6e246IkJydFN4dmNlbGxOdW0ifSw2Njp7bjoiQnJ0U3h2Y2VsbFN0ciJ9LDY3OntuOiJCcnRTeHZjZWxsQm9vbCJ9LDY4OntuOiJCcnRTeHZjZWxsRXJyIn0sNjk6e246IkJydFN4dmNlbGxEYXRlIn0sNzA6e246IkJydFN4dmNl'@;
put 'bGxOaWwifSwxMjg6e246IkJydEZpbGVWZXJzaW9uIn0sMTI5OntuOiJCcnRCZWdpblNoZWV0In0sMTMwOntuOiJCcnRFbmRTaGVldCJ9LDEzMTp7bjoiQnJ0QmVnaW5Cb29rIixmOnh1LHA6MH0sMTMyOntuOiJCcnRFbmRCb29rIn0sMTMzOntuOiJCcnRCZWdpbldzVmlld3MifSwxMzQ6e246'@;
put 'IkJydEVuZFdzVmlld3MifSwxMzU6e246IkJydEJlZ2luQm9va1ZpZXdzIn0sMTM2OntuOiJCcnRFbmRCb29rVmlld3MifSwxMzc6e246IkJydEJlZ2luV3NWaWV3IixmOmZ1bmN0aW9uIG9WKHcpe3ZhciBQPXcucmVhZF9zaGlmdCgyKTtyZXR1cm4gdy5sKz0yOCx7UlRMOjMyJlAsZ3JpZDoh'@;
put 'ISg0JlApfX19LDEzODp7bjoiQnJ0RW5kV3NWaWV3In0sMTM5OntuOiJCcnRCZWdpbkNzVmlld3MifSwxNDA6e246IkJydEVuZENzVmlld3MifSwxNDE6e246IkJydEJlZ2luQ3NWaWV3In0sMTQyOntuOiJCcnRFbmRDc1ZpZXcifSwxNDM6e246IkJydEJlZ2luQnVuZGxlU2hzIn0sMTQ0Ontu'@;
put 'OiJCcnRFbmRCdW5kbGVTaHMifSwxNDU6e246IkJydEJlZ2luU2hlZXREYXRhIn0sMTQ2OntuOiJCcnRFbmRTaGVldERhdGEifSwxNDc6e246IkJydFdzUHJvcCIsZjpmdW5jdGlvbiB6Tih3LFApe3ZhciBEPXt9LGVlPXdbdy5sXTtyZXR1cm4rK3cubCxELmFib3ZlPSEoNjQmZWUpLEQubGVm'@;
put 'dD0hKDEyOCZlZSksdy5sKz0xOCxELm5hbWU9ZjIodyxQLTE5KSxEfX0sMTQ4OntuOiJCcnRXc0RpbSIsZjpWTixwOjE2fSwxNTE6e246IkJydFBhbmUiLGY6ZnVuY3Rpb24ga1QodyxQKXt2YXIgRD13LmwrUDt5bCh3KSx5bCh3KTt2YXIgZWU9dy5yZWFkX3NoaWZ0KDQsImkiKSxvZT13LnJl'@;
put 'YWRfc2hpZnQoNCwiaSIpO2lmKHcucmVhZF9zaGlmdCg0KSx3LnJlYWRfc2hpZnQoMSksRCE9dy5sKXRocm93IG5ldyBFcnJvcigiQmFkIEJydFBhbmU6ICIrRCsiICE9ICIrdy5sKTtyZXR1cm5bcGkoe3I6ZWUsYzpvZX0pXX19LDE1Mjp7bjoiQnJ0U2VsIixmOmZ1bmN0aW9uIGVWKHcsUCl7'@;
put 'cmV0dXJuIHcucmVhZF9zaGlmdCg0KSx7Y2VsbDpwaSh7cjp3LnJlYWRfc2hpZnQoNCksYzp3LnJlYWRfc2hpZnQoNCl9KX19fSwxNTM6e246IkJydFdiUHJvcCIsZjpmdW5jdGlvbiBrVih3LFApe3ZhciBEPXt9LGVlPXcucmVhZF9zaGlmdCg0KTtELmRlZmF1bHRUaGVtZVZlcnNpb249dy5y'@;
put 'ZWFkX3NoaWZ0KDQpO3ZhciBvZT1QPjg/VHUodyk6IiI7cmV0dXJuIG9lLmxlbmd0aD4wJiYoRC5Db2RlTmFtZT1vZSksRC5hdXRvQ29tcHJlc3NQaWN0dXJlcz0hISg2NTUzNiZlZSksRC5iYWNrdXBGaWxlPSEhKDY0JmVlKSxELmNoZWNrQ29tcGF0aWJpbGl0eT0hISg0MDk2JmVlKSxELmRh'@;
put 'dGUxOTA0PSEhKDEmZWUpLEQuZmlsdGVyUHJpdmFjeT0hISg4JmVlKSxELmhpZGVQaXZvdEZpZWxkTGlzdD0hISgxMDI0JmVlKSxELnByb21wdGVkU29sdXRpb25zPSEhKDE2JmVlKSxELnB1Ymxpc2hJdGVtcz0hISgyMDQ4JmVlKSxELnJlZnJlc2hBbGxDb25uZWN0aW9ucz0hISgyNjIxNDQm'@;
put 'ZWUpLEQuc2F2ZUV4dGVybmFsTGlua1ZhbHVlcz0hISgxMjgmZWUpLEQuc2hvd0JvcmRlclVuc2VsZWN0ZWRUYWJsZXM9ISEoNCZlZSksRC5zaG93SW5rQW5ub3RhdGlvbj0hISgzMiZlZSksRC5zaG93T2JqZWN0cz1bImFsbCIsInBsYWNlaG9sZGVycyIsIm5vbmUiXVtlZT4+MTMmM10sRC5z'@;
put 'aG93UGl2b3RDaGFydEZpbHRlcj0hISgzMjc2OCZlZSksRC51cGRhdGVMaW5rcz1bInVzZXJTZXQiLCJuZXZlciIsImFsd2F5cyJdW2VlPj44JjNdLER9fSwxNTQ6e246IkJydFdiRmFjdG9pZCJ9LDE1NTp7bjoiQnJ0RmlsZVJlY292ZXIifSwxNTY6e246IkJydEJ1bmRsZVNoIixmOmZ1bmN0'@;
put 'aW9uIFRlZSh3LFApe3ZhciBEPXt9O3JldHVybiBELkhpZGRlbj13LnJlYWRfc2hpZnQoNCksRC5pVGFiSUQ9dy5yZWFkX3NoaWZ0KDQpLEQuc3RyUmVsSUQ9cTEodyxQLTgpLEQubmFtZT1UdSh3KSxEfX0sMTU3OntuOiJCcnRDYWxjUHJvcCJ9LDE1ODp7bjoiQnJ0Qm9va1ZpZXcifSwxNTk6'@;
put 'e246IkJydEJlZ2luU3N0IixmOmZ1bmN0aW9uIEMyKHcpe3JldHVyblt3LnJlYWRfc2hpZnQoNCksdy5yZWFkX3NoaWZ0KDQpXX19LDE2MDp7bjoiQnJ0RW5kU3N0In0sMTYxOntuOiJCcnRCZWdpbkFGaWx0ZXIiLGY6b2N9LDE2Mjp7bjoiQnJ0RW5kQUZpbHRlciJ9LDE2Mzp7bjoiQnJ0QmVn'@;
put 'aW5GaWx0ZXJDb2x1bW4ifSwxNjQ6e246IkJydEVuZEZpbHRlckNvbHVtbiJ9LDE2NTp7bjoiQnJ0QmVnaW5GaWx0ZXJzIn0sMTY2OntuOiJCcnRFbmRGaWx0ZXJzIn0sMTY3OntuOiJCcnRGaWx0ZXIifSwxNjg6e246IkJydENvbG9yRmlsdGVyIn0sMTY5OntuOiJCcnRJY29uRmlsdGVyIn0s'@;
put 'MTcwOntuOiJCcnRUb3AxMEZpbHRlciJ9LDE3MTp7bjoiQnJ0RHluYW1pY0ZpbHRlciJ9LDE3Mjp7bjoiQnJ0QmVnaW5DdXN0b21GaWx0ZXJzIn0sMTczOntuOiJCcnRFbmRDdXN0b21GaWx0ZXJzIn0sMTc0OntuOiJCcnRDdXN0b21GaWx0ZXIifSwxNzU6e246IkJydEFGaWx0ZXJEYXRlR3Jv'@;
put 'dXBJdGVtIn0sMTc2OntuOiJCcnRNZXJnZUNlbGwiLGY6Sk59LDE3Nzp7bjoiQnJ0QmVnaW5NZXJnZUNlbGxzIn0sMTc4OntuOiJCcnRFbmRNZXJnZUNlbGxzIn0sMTc5OntuOiJCcnRCZWdpblBpdm90Q2FjaGVEZWYifSwxODA6e246IkJydEVuZFBpdm90Q2FjaGVEZWYifSwxODE6e246IkJy'@;
put 'dEJlZ2luUENERmllbGRzIn0sMTgyOntuOiJCcnRFbmRQQ0RGaWVsZHMifSwxODM6e246IkJydEJlZ2luUENERmllbGQifSwxODQ6e246IkJydEVuZFBDREZpZWxkIn0sMTg1OntuOiJCcnRCZWdpblBDRFNvdXJjZSJ9LDE4Njp7bjoiQnJ0RW5kUENEU291cmNlIn0sMTg3OntuOiJCcnRCZWdp'@;
put 'blBDRFNSYW5nZSJ9LDE4ODp7bjoiQnJ0RW5kUENEU1JhbmdlIn0sMTg5OntuOiJCcnRCZWdpblBDREZBdGJsIn0sMTkwOntuOiJCcnRFbmRQQ0RGQXRibCJ9LDE5MTp7bjoiQnJ0QmVnaW5QQ0RJUnVuIn0sMTkyOntuOiJCcnRFbmRQQ0RJUnVuIn0sMTkzOntuOiJCcnRCZWdpblBpdm90Q2Fj'@;
put 'aGVSZWNvcmRzIn0sMTk0OntuOiJCcnRFbmRQaXZvdENhY2hlUmVjb3JkcyJ9LDE5NTp7bjoiQnJ0QmVnaW5QQ0RIaWVyYXJjaGllcyJ9LDE5Njp7bjoiQnJ0RW5kUENESGllcmFyY2hpZXMifSwxOTc6e246IkJydEJlZ2luUENESGllcmFyY2h5In0sMTk4OntuOiJCcnRFbmRQQ0RIaWVyYXJj'@;
put 'aHkifSwxOTk6e246IkJydEJlZ2luUENESEZpZWxkc1VzYWdlIn0sMjAwOntuOiJCcnRFbmRQQ0RIRmllbGRzVXNhZ2UifSwyMDE6e246IkJydEJlZ2luRXh0Q29ubmVjdGlvbiJ9LDIwMjp7bjoiQnJ0RW5kRXh0Q29ubmVjdGlvbiJ9LDIwMzp7bjoiQnJ0QmVnaW5FQ0RiUHJvcHMifSwyMDQ6'@;
put 'e246IkJydEVuZEVDRGJQcm9wcyJ9LDIwNTp7bjoiQnJ0QmVnaW5FQ09sYXBQcm9wcyJ9LDIwNjp7bjoiQnJ0RW5kRUNPbGFwUHJvcHMifSwyMDc6e246IkJydEJlZ2luUENEU0NvbnNvbCJ9LDIwODp7bjoiQnJ0RW5kUENEU0NvbnNvbCJ9LDIwOTp7bjoiQnJ0QmVnaW5QQ0RTQ1BhZ2VzIn0s'@;
put 'MjEwOntuOiJCcnRFbmRQQ0RTQ1BhZ2VzIn0sMjExOntuOiJCcnRCZWdpblBDRFNDUGFnZSJ9LDIxMjp7bjoiQnJ0RW5kUENEU0NQYWdlIn0sMjEzOntuOiJCcnRCZWdpblBDRFNDUEl0ZW0ifSwyMTQ6e246IkJydEVuZFBDRFNDUEl0ZW0ifSwyMTU6e246IkJydEJlZ2luUENEU0NTZXRzIn0s'@;
put 'MjE2OntuOiJCcnRFbmRQQ0RTQ1NldHMifSwyMTc6e246IkJydEJlZ2luUENEU0NTZXQifSwyMTg6e246IkJydEVuZFBDRFNDU2V0In0sMjE5OntuOiJCcnRCZWdpblBDREZHcm91cCJ9LDIyMDp7bjoiQnJ0RW5kUENERkdyb3VwIn0sMjIxOntuOiJCcnRCZWdpblBDREZHSXRlbXMifSwyMjI6'@;
put 'e246IkJydEVuZFBDREZHSXRlbXMifSwyMjM6e246IkJydEJlZ2luUENERkdSYW5nZSJ9LDIyNDp7bjoiQnJ0RW5kUENERkdSYW5nZSJ9LDIyNTp7bjoiQnJ0QmVnaW5QQ0RGR0Rpc2NyZXRlIn0sMjI2OntuOiJCcnRFbmRQQ0RGR0Rpc2NyZXRlIn0sMjI3OntuOiJCcnRCZWdpblBDRFNEVHVw'@;
put 'bGVDYWNoZSJ9LDIyODp7bjoiQnJ0RW5kUENEU0RUdXBsZUNhY2hlIn0sMjI5OntuOiJCcnRCZWdpblBDRFNEVENFbnRyaWVzIn0sMjMwOntuOiJCcnRFbmRQQ0RTRFRDRW50cmllcyJ9LDIzMTp7bjoiQnJ0QmVnaW5QQ0RTRFRDRU1lbWJlcnMifSwyMzI6e246IkJydEVuZFBDRFNEVENFTWVt'@;
put 'YmVycyJ9LDIzMzp7bjoiQnJ0QmVnaW5QQ0RTRFRDRU1lbWJlciJ9LDIzNDp7bjoiQnJ0RW5kUENEU0RUQ0VNZW1iZXIifSwyMzU6e246IkJydEJlZ2luUENEU0RUQ1F1ZXJpZXMifSwyMzY6e246IkJydEVuZFBDRFNEVENRdWVyaWVzIn0sMjM3OntuOiJCcnRCZWdpblBDRFNEVENRdWVyeSJ9'@;
put 'LDIzODp7bjoiQnJ0RW5kUENEU0RUQ1F1ZXJ5In0sMjM5OntuOiJCcnRCZWdpblBDRFNEVENTZXRzIn0sMjQwOntuOiJCcnRFbmRQQ0RTRFRDU2V0cyJ9LDI0MTp7bjoiQnJ0QmVnaW5QQ0RTRFRDU2V0In0sMjQyOntuOiJCcnRFbmRQQ0RTRFRDU2V0In0sMjQzOntuOiJCcnRCZWdpblBDRENh'@;
put 'bGNJdGVtcyJ9LDI0NDp7bjoiQnJ0RW5kUENEQ2FsY0l0ZW1zIn0sMjQ1OntuOiJCcnRCZWdpblBDRENhbGNJdGVtIn0sMjQ2OntuOiJCcnRFbmRQQ0RDYWxjSXRlbSJ9LDI0Nzp7bjoiQnJ0QmVnaW5QUnVsZSJ9LDI0ODp7bjoiQnJ0RW5kUFJ1bGUifSwyNDk6e246IkJydEJlZ2luUFJGaWx0'@;
put 'ZXJzIn0sMjUwOntuOiJCcnRFbmRQUkZpbHRlcnMifSwyNTE6e246IkJydEJlZ2luUFJGaWx0ZXIifSwyNTI6e246IkJydEVuZFBSRmlsdGVyIn0sMjUzOntuOiJCcnRCZWdpblBOYW1lcyJ9LDI1NDp7bjoiQnJ0RW5kUE5hbWVzIn0sMjU1OntuOiJCcnRCZWdpblBOYW1lIn0sMjU2OntuOiJC'@;
put 'cnRFbmRQTmFtZSJ9LDI1Nzp7bjoiQnJ0QmVnaW5QTlBhaXJzIn0sMjU4OntuOiJCcnRFbmRQTlBhaXJzIn0sMjU5OntuOiJCcnRCZWdpblBOUGFpciJ9LDI2MDp7bjoiQnJ0RW5kUE5QYWlyIn0sMjYxOntuOiJCcnRCZWdpbkVDV2ViUHJvcHMifSwyNjI6e246IkJydEVuZEVDV2ViUHJvcHMi'@;
put 'fSwyNjM6e246IkJydEJlZ2luRWNXcFRhYmxlcyJ9LDI2NDp7bjoiQnJ0RW5kRUNXUFRhYmxlcyJ9LDI2NTp7bjoiQnJ0QmVnaW5FQ1BhcmFtcyJ9LDI2Njp7bjoiQnJ0RW5kRUNQYXJhbXMifSwyNjc6e246IkJydEJlZ2luRUNQYXJhbSJ9LDI2ODp7bjoiQnJ0RW5kRUNQYXJhbSJ9LDI2OTp7'@;
put 'bjoiQnJ0QmVnaW5QQ0RLUElzIn0sMjcwOntuOiJCcnRFbmRQQ0RLUElzIn0sMjcxOntuOiJCcnRCZWdpblBDREtQSSJ9LDI3Mjp7bjoiQnJ0RW5kUENES1BJIn0sMjczOntuOiJCcnRCZWdpbkRpbXMifSwyNzQ6e246IkJydEVuZERpbXMifSwyNzU6e246IkJydEJlZ2luRGltIn0sMjc2Ontu'@;
put 'OiJCcnRFbmREaW0ifSwyNzc6e246IkJydEluZGV4UGFydEVuZCJ9LDI3ODp7bjoiQnJ0QmVnaW5TdHlsZVNoZWV0In0sMjc5OntuOiJCcnRFbmRTdHlsZVNoZWV0In0sMjgwOntuOiJCcnRCZWdpblNYVmlldyJ9LDI4MTp7bjoiQnJ0RW5kU1hWSSJ9LDI4Mjp7bjoiQnJ0QmVnaW5TWFZJIn0s'@;
put 'MjgzOntuOiJCcnRCZWdpblNYVklzIn0sMjg0OntuOiJCcnRFbmRTWFZJcyJ9LDI4NTp7bjoiQnJ0QmVnaW5TWFZEIn0sMjg2OntuOiJCcnRFbmRTWFZEIn0sMjg3OntuOiJCcnRCZWdpblNYVkRzIn0sMjg4OntuOiJCcnRFbmRTWFZEcyJ9LDI4OTp7bjoiQnJ0QmVnaW5TWFBJIn0sMjkwOntu'@;
put 'OiJCcnRFbmRTWFBJIn0sMjkxOntuOiJCcnRCZWdpblNYUElzIn0sMjkyOntuOiJCcnRFbmRTWFBJcyJ9LDI5Mzp7bjoiQnJ0QmVnaW5TWERJIn0sMjk0OntuOiJCcnRFbmRTWERJIn0sMjk1OntuOiJCcnRCZWdpblNYRElzIn0sMjk2OntuOiJCcnRFbmRTWERJcyJ9LDI5Nzp7bjoiQnJ0QmVn'@;
put 'aW5TWExJIn0sMjk4OntuOiJCcnRFbmRTWExJIn0sMjk5OntuOiJCcnRCZWdpblNYTElSd3MifSwzMDA6e246IkJydEVuZFNYTElSd3MifSwzMDE6e246IkJydEJlZ2luU1hMSUNvbHMifSwzMDI6e246IkJydEVuZFNYTElDb2xzIn0sMzAzOntuOiJCcnRCZWdpblNYRm9ybWF0In0sMzA0Ontu'@;
put 'OiJCcnRFbmRTWEZvcm1hdCJ9LDMwNTp7bjoiQnJ0QmVnaW5TWEZvcm1hdHMifSwzMDY6e246IkJydEVuZFN4Rm9ybWF0cyJ9LDMwNzp7bjoiQnJ0QmVnaW5TeFNlbGVjdCJ9LDMwODp7bjoiQnJ0RW5kU3hTZWxlY3QifSwzMDk6e246IkJydEJlZ2luSVNYVkRSd3MifSwzMTA6e246IkJydEVu'@;
put 'ZElTWFZEUndzIn0sMzExOntuOiJCcnRCZWdpbklTWFZEQ29scyJ9LDMxMjp7bjoiQnJ0RW5kSVNYVkRDb2xzIn0sMzEzOntuOiJCcnRFbmRTWExvY2F0aW9uIn0sMzE0OntuOiJCcnRCZWdpblNYTG9jYXRpb24ifSwzMTU6e246IkJydEVuZFNYVmlldyJ9LDMxNjp7bjoiQnJ0QmVnaW5TWFRI'@;
put 'cyJ9LDMxNzp7bjoiQnJ0RW5kU1hUSHMifSwzMTg6e246IkJydEJlZ2luU1hUSCJ9LDMxOTp7bjoiQnJ0RW5kU1hUSCJ9LDMyMDp7bjoiQnJ0QmVnaW5JU1hUSFJ3cyJ9LDMyMTp7bjoiQnJ0RW5kSVNYVEhSd3MifSwzMjI6e246IkJydEJlZ2luSVNYVEhDb2xzIn0sMzIzOntuOiJCcnRFbmRJ'@;
put 'U1hUSENvbHMifSwzMjQ6e246IkJydEJlZ2luU1hURE1QUyJ9LDMyNTp7bjoiQnJ0RW5kU1hURE1QcyJ9LDMyNjp7bjoiQnJ0QmVnaW5TWFRETVAifSwzMjc6e246IkJydEVuZFNYVERNUCJ9LDMyODp7bjoiQnJ0QmVnaW5TWFRISXRlbXMifSwzMjk6e246IkJydEVuZFNYVEhJdGVtcyJ9LDMz'@;
put 'MDp7bjoiQnJ0QmVnaW5TWFRISXRlbSJ9LDMzMTp7bjoiQnJ0RW5kU1hUSEl0ZW0ifSwzMzI6e246IkJydEJlZ2luTWV0YWRhdGEifSwzMzM6e246IkJydEVuZE1ldGFkYXRhIn0sMzM0OntuOiJCcnRCZWdpbkVzbWR0aW5mbyJ9LDMzNTp7bjoiQnJ0TWR0aW5mbyJ9LDMzNjp7bjoiQnJ0RW5k'@;
put 'RXNtZHRpbmZvIn0sMzM3OntuOiJCcnRCZWdpbkVzbWRiIn0sMzM4OntuOiJCcnRFbmRFc21kYiJ9LDMzOTp7bjoiQnJ0QmVnaW5Fc2ZtZCJ9LDM0MDp7bjoiQnJ0RW5kRXNmbWQifSwzNDE6e246IkJydEJlZ2luU2luZ2xlQ2VsbHMifSwzNDI6e246IkJydEVuZFNpbmdsZUNlbGxzIn0sMzQz'@;
put 'OntuOiJCcnRCZWdpbkxpc3QifSwzNDQ6e246IkJydEVuZExpc3QifSwzNDU6e246IkJydEJlZ2luTGlzdENvbHMifSwzNDY6e246IkJydEVuZExpc3RDb2xzIn0sMzQ3OntuOiJCcnRCZWdpbkxpc3RDb2wifSwzNDg6e246IkJydEVuZExpc3RDb2wifSwzNDk6e246IkJydEJlZ2luTGlzdFht'@;
put 'bENQciJ9LDM1MDp7bjoiQnJ0RW5kTGlzdFhtbENQciJ9LDM1MTp7bjoiQnJ0TGlzdENDRm1sYSJ9LDM1Mjp7bjoiQnJ0TGlzdFRyRm1sYSJ9LDM1Mzp7bjoiQnJ0QmVnaW5FeHRlcm5hbHMifSwzNTQ6e246IkJydEVuZEV4dGVybmFscyJ9LDM1NTp7bjoiQnJ0U3VwQm9va1NyYyIsZjpxMX0s'@;
put 'MzU3OntuOiJCcnRTdXBTZWxmIn0sMzU4OntuOiJCcnRTdXBTYW1lIn0sMzU5OntuOiJCcnRTdXBUYWJzIn0sMzYwOntuOiJCcnRCZWdpblN1cEJvb2sifSwzNjE6e246IkJydFBsYWNlaG9sZGVyTmFtZSJ9LDM2Mjp7bjoiQnJ0RXh0ZXJuU2hlZXQiLGY6dDh9LDM2Mzp7bjoiQnJ0RXh0ZXJu'@;
put 'VGFibGVTdGFydCJ9LDM2NDp7bjoiQnJ0RXh0ZXJuVGFibGVFbmQifSwzNjY6e246IkJydEV4dGVyblJvd0hkciJ9LDM2Nzp7bjoiQnJ0RXh0ZXJuQ2VsbEJsYW5rIn0sMzY4OntuOiJCcnRFeHRlcm5DZWxsUmVhbCJ9LDM2OTp7bjoiQnJ0RXh0ZXJuQ2VsbEJvb2wifSwzNzA6e246IkJydEV4'@;
put 'dGVybkNlbGxFcnJvciJ9LDM3MTp7bjoiQnJ0RXh0ZXJuQ2VsbFN0cmluZyJ9LDM3Mjp7bjoiQnJ0QmVnaW5Fc21keCJ9LDM3Mzp7bjoiQnJ0RW5kRXNtZHgifSwzNzQ6e246IkJydEJlZ2luTWR4U2V0In0sMzc1OntuOiJCcnRFbmRNZHhTZXQifSwzNzY6e246IkJydEJlZ2luTWR4TWJyUHJv'@;
put 'cCJ9LDM3Nzp7bjoiQnJ0RW5kTWR4TWJyUHJvcCJ9LDM3ODp7bjoiQnJ0QmVnaW5NZHhLUEkifSwzNzk6e246IkJydEVuZE1keEtQSSJ9LDM4MDp7bjoiQnJ0QmVnaW5Fc3N0ciJ9LDM4MTp7bjoiQnJ0RW5kRXNzdHIifSwzODI6e246IkJydEJlZ2luUFJGSXRlbSJ9LDM4Mzp7bjoiQnJ0RW5k'@;
put 'UFJGSXRlbSJ9LDM4NDp7bjoiQnJ0QmVnaW5QaXZvdENhY2hlSURzIn0sMzg1OntuOiJCcnRFbmRQaXZvdENhY2hlSURzIn0sMzg2OntuOiJCcnRCZWdpblBpdm90Q2FjaGVJRCJ9LDM4Nzp7bjoiQnJ0RW5kUGl2b3RDYWNoZUlEIn0sMzg4OntuOiJCcnRCZWdpbklTWFZJcyJ9LDM4OTp7bjoi'@;
put 'QnJ0RW5kSVNYVklzIn0sMzkwOntuOiJCcnRCZWdpbkNvbEluZm9zIn0sMzkxOntuOiJCcnRFbmRDb2xJbmZvcyJ9LDM5Mjp7bjoiQnJ0QmVnaW5Sd0JyayJ9LDM5Mzp7bjoiQnJ0RW5kUndCcmsifSwzOTQ6e246IkJydEJlZ2luQ29sQnJrIn0sMzk1OntuOiJCcnRFbmRDb2xCcmsifSwzOTY6'@;
put 'e246IkJydEJyayJ9LDM5Nzp7bjoiQnJ0VXNlckJvb2tWaWV3In0sMzk4OntuOiJCcnRJbmZvIn0sMzk5OntuOiJCcnRDVXNyIn0sNDAwOntuOiJCcnRVc3IifSw0MDE6e246IkJydEJlZ2luVXNlcnMifSw0MDM6e246IkJydEVPRiJ9LDQwNDp7bjoiQnJ0VUNSIn0sNDA1OntuOiJCcnRSUklu'@;
put 'c0RlbCJ9LDQwNjp7bjoiQnJ0UlJFbmRJbnNEZWwifSw0MDc6e246IkJydFJSTW92ZSJ9LDQwODp7bjoiQnJ0UlJFbmRNb3ZlIn0sNDA5OntuOiJCcnRSUkNoZ0NlbGwifSw0MTA6e246IkJydFJSRW5kQ2hnQ2VsbCJ9LDQxMTp7bjoiQnJ0UlJIZWFkZXIifSw0MTI6e246IkJydFJSVXNlclZp'@;
put 'ZXcifSw0MTM6e246IkJydFJSUmVuU2hlZXQifSw0MTQ6e246IkJydFJSSW5zZXJ0U2gifSw0MTU6e246IkJydFJSRGVmTmFtZSJ9LDQxNjp7bjoiQnJ0UlJOb3RlIn0sNDE3OntuOiJCcnRSUkNvbmZsaWN0In0sNDE4OntuOiJCcnRSUlRRU0lGIn0sNDE5OntuOiJCcnRSUkZvcm1hdCJ9LDQy'@;
put 'MDp7bjoiQnJ0UlJFbmRGb3JtYXQifSw0MjE6e246IkJydFJSQXV0b0ZtdCJ9LDQyMjp7bjoiQnJ0QmVnaW5Vc2VyU2hWaWV3cyJ9LDQyMzp7bjoiQnJ0QmVnaW5Vc2VyU2hWaWV3In0sNDI0OntuOiJCcnRFbmRVc2VyU2hWaWV3In0sNDI1OntuOiJCcnRFbmRVc2VyU2hWaWV3cyJ9LDQyNjp7'@;
put 'bjoiQnJ0QXJyRm1sYSIsZjpmdW5jdGlvbiB1Zyh3LFAsRCl7dmFyIGVlPXcubCtQLG9lPUdmKHcpLGdlPXcucmVhZF9zaGlmdCgxKSxfZT1bb2VdO2lmKF9lWzJdPWdlLEQuY2VsbEZvcm11bGEpe3ZhciB2ZT1QQSh3LGVlLXcubCxEKTtfZVsxXT12ZX1lbHNlIHcubD1lZTtyZXR1cm4gX2V9'@;
put 'fSw0Mjc6e246IkJydFNockZtbGEiLGY6ZnVuY3Rpb24gblYodyxQLEQpe3ZhciBlZT13LmwrUCxnZT1bb2ModywxNildO2lmKEQuY2VsbEZvcm11bGEpe3ZhciBfZT1nTih3LGVlLXcubCxEKTtnZVsxXT1fZSx3Lmw9ZWV9ZWxzZSB3Lmw9ZWU7cmV0dXJuIGdlfX0sNDI4OntuOiJCcnRUYWJs'@;
put 'ZSJ9LDQyOTp7bjoiQnJ0QmVnaW5FeHRDb25uZWN0aW9ucyJ9LDQzMDp7bjoiQnJ0RW5kRXh0Q29ubmVjdGlvbnMifSw0MzE6e246IkJydEJlZ2luUENEQ2FsY01lbXMifSw0MzI6e246IkJydEVuZFBDRENhbGNNZW1zIn0sNDMzOntuOiJCcnRCZWdpblBDRENhbGNNZW0ifSw0MzQ6e246IkJy'@;
put 'dEVuZFBDRENhbGNNZW0ifSw0MzU6e246IkJydEJlZ2luUENESEdMZXZlbHMifSw0MzY6e246IkJydEVuZFBDREhHTGV2ZWxzIn0sNDM3OntuOiJCcnRCZWdpblBDREhHTGV2ZWwifSw0Mzg6e246IkJydEVuZFBDREhHTGV2ZWwifSw0Mzk6e246IkJydEJlZ2luUENESEdMR3JvdXBzIn0sNDQw'@;
put 'OntuOiJCcnRFbmRQQ0RIR0xHcm91cHMifSw0NDE6e246IkJydEJlZ2luUENESEdMR3JvdXAifSw0NDI6e246IkJydEVuZFBDREhHTEdyb3VwIn0sNDQzOntuOiJCcnRCZWdpblBDREhHTEdNZW1iZXJzIn0sNDQ0OntuOiJCcnRFbmRQQ0RIR0xHTWVtYmVycyJ9LDQ0NTp7bjoiQnJ0QmVnaW5Q'@;
put 'Q0RIR0xHTWVtYmVyIn0sNDQ2OntuOiJCcnRFbmRQQ0RIR0xHTWVtYmVyIn0sNDQ3OntuOiJCcnRCZWdpblFTSSJ9LDQ0ODp7bjoiQnJ0RW5kUVNJIn0sNDQ5OntuOiJCcnRCZWdpblFTSVIifSw0NTA6e246IkJydEVuZFFTSVIifSw0NTE6e246IkJydEJlZ2luRGVsZXRlZE5hbWVzIn0sNDUy'@;
put 'OntuOiJCcnRFbmREZWxldGVkTmFtZXMifSw0NTM6e246IkJydEJlZ2luRGVsZXRlZE5hbWUifSw0NTQ6e246IkJydEVuZERlbGV0ZWROYW1lIn0sNDU1OntuOiJCcnRCZWdpblFTSUZzIn0sNDU2OntuOiJCcnRFbmRRU0lGcyJ9LDQ1Nzp7bjoiQnJ0QmVnaW5RU0lGIn0sNDU4OntuOiJCcnRF'@;
put 'bmRRU0lGIn0sNDU5OntuOiJCcnRCZWdpbkF1dG9Tb3J0U2NvcGUifSw0NjA6e246IkJydEVuZEF1dG9Tb3J0U2NvcGUifSw0NjE6e246IkJydEJlZ2luQ29uZGl0aW9uYWxGb3JtYXR0aW5nIn0sNDYyOntuOiJCcnRFbmRDb25kaXRpb25hbEZvcm1hdHRpbmcifSw0NjM6e246IkJydEJlZ2lu'@;
put 'Q0ZSdWxlIn0sNDY0OntuOiJCcnRFbmRDRlJ1bGUifSw0NjU6e246IkJydEJlZ2luSWNvblNldCJ9LDQ2Njp7bjoiQnJ0RW5kSWNvblNldCJ9LDQ2Nzp7bjoiQnJ0QmVnaW5EYXRhYmFyIn0sNDY4OntuOiJCcnRFbmREYXRhYmFyIn0sNDY5OntuOiJCcnRCZWdpbkNvbG9yU2NhbGUifSw0NzA6'@;
put 'e246IkJydEVuZENvbG9yU2NhbGUifSw0NzE6e246IkJydENGVk8ifSw0NzI6e246IkJydEV4dGVyblZhbHVlTWV0YSJ9LDQ3Mzp7bjoiQnJ0QmVnaW5Db2xvclBhbGV0dGUifSw0NzQ6e246IkJydEVuZENvbG9yUGFsZXR0ZSJ9LDQ3NTp7bjoiQnJ0SW5kZXhlZENvbG9yIn0sNDc2OntuOiJC'@;
put 'cnRNYXJnaW5zIixmOmZ1bmN0aW9uIHJWKHcpe3ZhciBQPXt9O3JldHVybiB4VC5mb3JFYWNoKGZ1bmN0aW9uKEQpe1BbRF09eWwodyl9KSxQfX0sNDc3OntuOiJCcnRQcmludE9wdGlvbnMifSw0Nzg6e246IkJydFBhZ2VTZXR1cCJ9LDQ3OTp7bjoiQnJ0QmVnaW5IZWFkZXJGb290ZXIifSw0'@;
put 'ODA6e246IkJydEVuZEhlYWRlckZvb3RlciJ9LDQ4MTp7bjoiQnJ0QmVnaW5TWENydEZvcm1hdCJ9LDQ4Mjp7bjoiQnJ0RW5kU1hDcnRGb3JtYXQifSw0ODM6e246IkJydEJlZ2luU1hDcnRGb3JtYXRzIn0sNDg0OntuOiJCcnRFbmRTWENydEZvcm1hdHMifSw0ODU6e246IkJydFdzRm10SW5m'@;
put 'byIsZjpmdW5jdGlvbiBqTih3KXt2YXIgUD17fSxEPXt9LGVlPXt9LG9lPXcucmVhZF9zaGlmdCg0KSxnZT13LnJlYWRfc2hpZnQoMik7ZWUud2NoPW9lPD02NTUzNj9vZS8yNTY6Z2U7dmFyIF9lPXcucmVhZF9zaGlmdCgyKTtELmhwdD1fZS8yMDt2YXIgdmU9dy5yZWFkX3NoaWZ0KDIpO3Jl'@;
put 'dHVybiAyJnZlJiYoRC5oaWRkZW49ITApLDQmdmUmJihQLnRvcHRoaWNrPSEwKSw4JnZlJiYoUC5ib3R0aGljaz0hMCksUC5yb3dvdXRsaW5lPXcucmVhZF9zaGlmdCgxKSxQLmNvbG91dGxpbmU9dy5yZWFkX3NoaWZ0KDEpLFNwKEQpLFAucm93PUQsX2MoZWUpLFAuY29sPWVlLFB9fSw0ODY6'@;
put 'e246IkJydEJlZ2luTWdzIn0sNDg3OntuOiJCcnRFbmRNR3MifSw0ODg6e246IkJydEJlZ2luTUdNYXBzIn0sNDg5OntuOiJCcnRFbmRNR01hcHMifSw0OTA6e246IkJydEJlZ2luTUcifSw0OTE6e246IkJydEVuZE1HIn0sNDkyOntuOiJCcnRCZWdpbk1hcCJ9LDQ5Mzp7bjoiQnJ0RW5kTWFw'@;
put 'In0sNDk0OntuOiJCcnRITGluayIsZjpmdW5jdGlvbiBzZyh3LFApe3ZhciBEPXcubCtQLGVlPW9jKHcsMTYpLG9lPUhjKHcpLGdlPVR1KHcpLF9lPVR1KHcpLHZlPVR1KHcpO3cubD1EO3ZhciBNZT17cmZ4OmVlLHJlbElkOm9lLGxvYzpnZSxkaXNwbGF5OnZlfTtyZXR1cm4gX2UmJihNZS5U'@;
put 'b29sdGlwPV9lKSxNZX19LDQ5NTp7bjoiQnJ0QmVnaW5EQ29uIn0sNDk2OntuOiJCcnRFbmREQ29uIn0sNDk3OntuOiJCcnRCZWdpbkRSZWZzIn0sNDk4OntuOiJCcnRFbmREUmVmcyJ9LDQ5OTp7bjoiQnJ0RFJlZiJ9LDUwMDp7bjoiQnJ0QmVnaW5TY2VuTWFuIn0sNTAxOntuOiJCcnRFbmRT'@;
put 'Y2VuTWFuIn0sNTAyOntuOiJCcnRCZWdpblNjdCJ9LDUwMzp7bjoiQnJ0RW5kU2N0In0sNTA0OntuOiJCcnRTbGMifSw1MDU6e246IkJydEJlZ2luRFhGcyJ9LDUwNjp7bjoiQnJ0RW5kRFhGcyJ9LDUwNzp7bjoiQnJ0RFhGIn0sNTA4OntuOiJCcnRCZWdpblRhYmxlU3R5bGVzIn0sNTA5Ontu'@;
put 'OiJCcnRFbmRUYWJsZVN0eWxlcyJ9LDUxMDp7bjoiQnJ0QmVnaW5UYWJsZVN0eWxlIn0sNTExOntuOiJCcnRFbmRUYWJsZVN0eWxlIn0sNTEyOntuOiJCcnRUYWJsZVN0eWxlRWxlbWVudCJ9LDUxMzp7bjoiQnJ0VGFibGVTdHlsZUNsaWVudCJ9LDUxNDp7bjoiQnJ0QmVnaW5Wb2xEZXBzIn0s'@;
put 'NTE1OntuOiJCcnRFbmRWb2xEZXBzIn0sNTE2OntuOiJCcnRCZWdpblZvbFR5cGUifSw1MTc6e246IkJydEVuZFZvbFR5cGUifSw1MTg6e246IkJydEJlZ2luVm9sTWFpbiJ9LDUxOTp7bjoiQnJ0RW5kVm9sTWFpbiJ9LDUyMDp7bjoiQnJ0QmVnaW5Wb2xUb3BpYyJ9LDUyMTp7bjoiQnJ0RW5k'@;
put 'Vm9sVG9waWMifSw1MjI6e246IkJydFZvbFN1YnRvcGljIn0sNTIzOntuOiJCcnRWb2xSZWYifSw1MjQ6e246IkJydFZvbE51bSJ9LDUyNTp7bjoiQnJ0Vm9sRXJyIn0sNTI2OntuOiJCcnRWb2xTdHIifSw1Mjc6e246IkJydFZvbEJvb2wifSw1Mjg6e246IkJydEJlZ2luQ2FsY0NoYWluJCJ9'@;
put 'LDUyOTp7bjoiQnJ0RW5kQ2FsY0NoYWluJCJ9LDUzMDp7bjoiQnJ0QmVnaW5Tb3J0U3RhdGUifSw1MzE6e246IkJydEVuZFNvcnRTdGF0ZSJ9LDUzMjp7bjoiQnJ0QmVnaW5Tb3J0Q29uZCJ9LDUzMzp7bjoiQnJ0RW5kU29ydENvbmQifSw1MzQ6e246IkJydEJvb2tQcm90ZWN0aW9uIn0sNTM1'@;
put 'OntuOiJCcnRTaGVldFByb3RlY3Rpb24ifSw1MzY6e246IkJydFJhbmdlUHJvdGVjdGlvbiJ9LDUzNzp7bjoiQnJ0UGhvbmV0aWNJbmZvIn0sNTM4OntuOiJCcnRCZWdpbkVDVHh0V2l6In0sNTM5OntuOiJCcnRFbmRFQ1R4dFdpeiJ9LDU0MDp7bjoiQnJ0QmVnaW5FQ1RXRmxkSW5mb0xzdCJ9'@;
put 'LDU0MTp7bjoiQnJ0RW5kRUNUV0ZsZEluZm9Mc3QifSw1NDI6e246IkJydEJlZ2luRUNUd0ZsZEluZm8ifSw1NDg6e246IkJydEZpbGVTaGFyaW5nIn0sNTQ5OntuOiJCcnRPbGVTaXplIn0sNTUwOntuOiJCcnREcmF3aW5nIixmOnExfSw1NTE6e246IkJydExlZ2FjeURyYXdpbmcifSw1NTI6'@;
put 'e246IkJydExlZ2FjeURyYXdpbmdIRiJ9LDU1Mzp7bjoiQnJ0V2ViT3B0In0sNTU0OntuOiJCcnRCZWdpbldlYlB1Ykl0ZW1zIn0sNTU1OntuOiJCcnRFbmRXZWJQdWJJdGVtcyJ9LDU1Njp7bjoiQnJ0QmVnaW5XZWJQdWJJdGVtIn0sNTU3OntuOiJCcnRFbmRXZWJQdWJJdGVtIn0sNTU4Ontu'@;
put 'OiJCcnRCZWdpblNYQ29uZEZtdCJ9LDU1OTp7bjoiQnJ0RW5kU1hDb25kRm10In0sNTYwOntuOiJCcnRCZWdpblNYQ29uZEZtdHMifSw1NjE6e246IkJydEVuZFNYQ29uZEZtdHMifSw1NjI6e246IkJydEJrSGltIn0sNTY0OntuOiJCcnRDb2xvciJ9LDU2NTp7bjoiQnJ0QmVnaW5JbmRleGVk'@;
put 'Q29sb3JzIn0sNTY2OntuOiJCcnRFbmRJbmRleGVkQ29sb3JzIn0sNTY5OntuOiJCcnRCZWdpbk1SVUNvbG9ycyJ9LDU3MDp7bjoiQnJ0RW5kTVJVQ29sb3JzIn0sNTcyOntuOiJCcnRNUlVDb2xvciJ9LDU3Mzp7bjoiQnJ0QmVnaW5EVmFscyJ9LDU3NDp7bjoiQnJ0RW5kRFZhbHMifSw1Nzc6'@;
put 'e246IkJydFN1cE5hbWVTdGFydCJ9LDU3ODp7bjoiQnJ0U3VwTmFtZVZhbHVlU3RhcnQifSw1Nzk6e246IkJydFN1cE5hbWVWYWx1ZUVuZCJ9LDU4MDp7bjoiQnJ0U3VwTmFtZU51bSJ9LDU4MTp7bjoiQnJ0U3VwTmFtZUVyciJ9LDU4Mjp7bjoiQnJ0U3VwTmFtZVN0In0sNTgzOntuOiJCcnRT'@;
put 'dXBOYW1lTmlsIn0sNTg0OntuOiJCcnRTdXBOYW1lQm9vbCJ9LDU4NTp7bjoiQnJ0U3VwTmFtZUZtbGEifSw1ODY6e246IkJydFN1cE5hbWVCaXRzIn0sNTg3OntuOiJCcnRTdXBOYW1lRW5kIn0sNTg4OntuOiJCcnRFbmRTdXBCb29rIn0sNTg5OntuOiJCcnRDZWxsU21hcnRUYWdQcm9wZXJ0'@;
put 'eSJ9LDU5MDp7bjoiQnJ0QmVnaW5DZWxsU21hcnRUYWcifSw1OTE6e246IkJydEVuZENlbGxTbWFydFRhZyJ9LDU5Mjp7bjoiQnJ0QmVnaW5DZWxsU21hcnRUYWdzIn0sNTkzOntuOiJCcnRFbmRDZWxsU21hcnRUYWdzIn0sNTk0OntuOiJCcnRCZWdpblNtYXJ0VGFncyJ9LDU5NTp7bjoiQnJ0'@;
put 'RW5kU21hcnRUYWdzIn0sNTk2OntuOiJCcnRTbWFydFRhZ1R5cGUifSw1OTc6e246IkJydEJlZ2luU21hcnRUYWdUeXBlcyJ9LDU5ODp7bjoiQnJ0RW5kU21hcnRUYWdUeXBlcyJ9LDU5OTp7bjoiQnJ0QmVnaW5TWEZpbHRlcnMifSw2MDA6e246IkJydEVuZFNYRmlsdGVycyJ9LDYwMTp7bjoi'@;
put 'QnJ0QmVnaW5TWEZJTFRFUiJ9LDYwMjp7bjoiQnJ0RW5kU1hGaWx0ZXIifSw2MDM6e246IkJydEJlZ2luRmlsbHMifSw2MDQ6e246IkJydEVuZEZpbGxzIn0sNjA1OntuOiJCcnRCZWdpbkNlbGxXYXRjaGVzIn0sNjA2OntuOiJCcnRFbmRDZWxsV2F0Y2hlcyJ9LDYwNzp7bjoiQnJ0Q2VsbFdh'@;
put 'dGNoIn0sNjA4OntuOiJCcnRCZWdpbkNSRXJycyJ9LDYwOTp7bjoiQnJ0RW5kQ1JFcnJzIn0sNjEwOntuOiJCcnRDcmFzaFJlY0VyciJ9LDYxMTp7bjoiQnJ0QmVnaW5Gb250cyJ9LDYxMjp7bjoiQnJ0RW5kRm9udHMifSw2MTM6e246IkJydEJlZ2luQm9yZGVycyJ9LDYxNDp7bjoiQnJ0RW5k'@;
put 'Qm9yZGVycyJ9LDYxNTp7bjoiQnJ0QmVnaW5GbXRzIn0sNjE2OntuOiJCcnRFbmRGbXRzIn0sNjE3OntuOiJCcnRCZWdpbkNlbGxYRnMifSw2MTg6e246IkJydEVuZENlbGxYRnMifSw2MTk6e246IkJydEJlZ2luU3R5bGVzIn0sNjIwOntuOiJCcnRFbmRTdHlsZXMifSw2MjU6e246IkJydEJp'@;
put 'Z05hbWUifSw2MjY6e246IkJydEJlZ2luQ2VsbFN0eWxlWEZzIn0sNjI3OntuOiJCcnRFbmRDZWxsU3R5bGVYRnMifSw2Mjg6e246IkJydEJlZ2luQ29tbWVudHMifSw2Mjk6e246IkJydEVuZENvbW1lbnRzIn0sNjMwOntuOiJCcnRCZWdpbkNvbW1lbnRBdXRob3JzIn0sNjMxOntuOiJCcnRF'@;
put 'bmRDb21tZW50QXV0aG9ycyJ9LDYzMjp7bjoiQnJ0Q29tbWVudEF1dGhvciIsZjpqSH0sNjMzOntuOiJCcnRCZWdpbkNvbW1lbnRMaXN0In0sNjM0OntuOiJCcnRFbmRDb21tZW50TGlzdCJ9LDYzNTp7bjoiQnJ0QmVnaW5Db21tZW50IixmOmZ1bmN0aW9uIHlBKHcpe3ZhciBQPXt9O1AuaWF1'@;
put 'dGhvcj13LnJlYWRfc2hpZnQoNCk7dmFyIEQ9b2ModywxNik7cmV0dXJuIFAucmZ4PUQucyxQLnJlZj1waShELnMpLHcubCs9MTYsUH19LDYzNjp7bjoiQnJ0RW5kQ29tbWVudCJ9LDYzNzp7bjoiQnJ0Q29tbWVudFRleHQiLGY6UmJ9LDYzODp7bjoiQnJ0QmVnaW5PbGVPYmplY3RzIn0sNjM5'@;
put 'OntuOiJCcnRPbGVPYmplY3QifSw2NDA6e246IkJydEVuZE9sZU9iamVjdHMifSw2NDE6e246IkJydEJlZ2luU3hydWxlcyJ9LDY0Mjp7bjoiQnJ0RW5kU3hSdWxlcyJ9LDY0Mzp7bjoiQnJ0QmVnaW5BY3RpdmVYQ29udHJvbHMifSw2NDQ6e246IkJydEFjdGl2ZVgifSw2NDU6e246IkJydEVu'@;
put 'ZEFjdGl2ZVhDb250cm9scyJ9LDY0Njp7bjoiQnJ0QmVnaW5QQ0RTRFRDRU1lbWJlcnNTb3J0QnkifSw2NDg6e246IkJydEJlZ2luQ2VsbElnbm9yZUVDcyJ9LDY0OTp7bjoiQnJ0Q2VsbElnbm9yZUVDIn0sNjUwOntuOiJCcnRFbmRDZWxsSWdub3JlRUNzIn0sNjUxOntuOiJCcnRDc1Byb3Ai'@;
put 'LGY6ZnVuY3Rpb24gV3AodyxQKXtyZXR1cm4gdy5sKz0xMCx7bmFtZTpUdSh3KX19fSw2NTI6e246IkJydENzUGFnZVNldHVwIn0sNjUzOntuOiJCcnRCZWdpblVzZXJDc1ZpZXdzIn0sNjU0OntuOiJCcnRFbmRVc2VyQ3NWaWV3cyJ9LDY1NTp7bjoiQnJ0QmVnaW5Vc2VyQ3NWaWV3In0sNjU2'@;
put 'OntuOiJCcnRFbmRVc2VyQ3NWaWV3In0sNjU3OntuOiJCcnRCZWdpblBjZFNGQ0lFbnRyaWVzIn0sNjU4OntuOiJCcnRFbmRQQ0RTRkNJRW50cmllcyJ9LDY1OTp7bjoiQnJ0UENEU0ZDSUVudHJ5In0sNjYwOntuOiJCcnRCZWdpbkxpc3RQYXJ0cyJ9LDY2MTp7bjoiQnJ0TGlzdFBhcnQifSw2'@;
put 'NjI6e246IkJydEVuZExpc3RQYXJ0cyJ9LDY2Mzp7bjoiQnJ0U2hlZXRDYWxjUHJvcCJ9LDY2NDp7bjoiQnJ0QmVnaW5Gbkdyb3VwIn0sNjY1OntuOiJCcnRGbkdyb3VwIn0sNjY2OntuOiJCcnRFbmRGbkdyb3VwIn0sNjY3OntuOiJCcnRTdXBBZGRpbiJ9LDY2ODp7bjoiQnJ0U1hURE1QT3Jk'@;
put 'ZXIifSw2Njk6e246IkJydENzUHJvdGVjdGlvbiJ9LDY3MTp7bjoiQnJ0QmVnaW5Xc1NvcnRNYXAifSw2NzI6e246IkJydEVuZFdzU29ydE1hcCJ9LDY3Mzp7bjoiQnJ0QmVnaW5SUlNvcnQifSw2NzQ6e246IkJydEVuZFJSU29ydCJ9LDY3NTp7bjoiQnJ0UlJTb3J0SXRlbSJ9LDY3Njp7bjoi'@;
put 'QnJ0RmlsZVNoYXJpbmdJc28ifSw2Nzc6e246IkJydEJvb2tQcm90ZWN0aW9uSXNvIn0sNjc4OntuOiJCcnRTaGVldFByb3RlY3Rpb25Jc28ifSw2Nzk6e246IkJydENzUHJvdGVjdGlvbklzbyJ9LDY4MDp7bjoiQnJ0UmFuZ2VQcm90ZWN0aW9uSXNvIn0sNjgxOntuOiJCcnREVmFsTGlzdCJ9'@;
put 'LDEwMjQ6e246IkJydFJ3RGVzY2VudCJ9LDEwMjU6e246IkJydEtub3duRm9udHMifSwxMDI2OntuOiJCcnRCZWdpblNYVHVwbGVTZXQifSwxMDI3OntuOiJCcnRFbmRTWFR1cGxlU2V0In0sMTAyODp7bjoiQnJ0QmVnaW5TWFR1cGxlU2V0SGVhZGVyIn0sMTAyOTp7bjoiQnJ0RW5kU1hUdXBs'@;
put 'ZVNldEhlYWRlciJ9LDEwMzA6e246IkJydFNYVHVwbGVTZXRIZWFkZXJJdGVtIn0sMTAzMTp7bjoiQnJ0QmVnaW5TWFR1cGxlU2V0RGF0YSJ9LDEwMzI6e246IkJydEVuZFNYVHVwbGVTZXREYXRhIn0sMTAzMzp7bjoiQnJ0QmVnaW5TWFR1cGxlU2V0Um93In0sMTAzNDp7bjoiQnJ0RW5kU1hU'@;
put 'dXBsZVNldFJvdyJ9LDEwMzU6e246IkJydFNYVHVwbGVTZXRSb3dJdGVtIn0sMTAzNjp7bjoiQnJ0TmFtZUV4dCJ9LDEwMzc6e246IkJydFBDREgxNCJ9LDEwMzg6e246IkJydEJlZ2luUENEQ2FsY01lbTE0In0sMTAzOTp7bjoiQnJ0RW5kUENEQ2FsY01lbTE0In0sMTA0MDp7bjoiQnJ0U1hU'@;
put 'SDE0In0sMTA0MTp7bjoiQnJ0QmVnaW5TcGFya2xpbmVHcm91cCJ9LDEwNDI6e246IkJydEVuZFNwYXJrbGluZUdyb3VwIn0sMTA0Mzp7bjoiQnJ0U3BhcmtsaW5lIn0sMTA0NDp7bjoiQnJ0U1hESTE0In0sMTA0NTp7bjoiQnJ0V3NGbXRJbmZvRXgxNCJ9LDEwNDY6e246IkJydEJlZ2luQ29u'@;
put 'ZGl0aW9uYWxGb3JtYXR0aW5nMTQifSwxMDQ3OntuOiJCcnRFbmRDb25kaXRpb25hbEZvcm1hdHRpbmcxNCJ9LDEwNDg6e246IkJydEJlZ2luQ0ZSdWxlMTQifSwxMDQ5OntuOiJCcnRFbmRDRlJ1bGUxNCJ9LDEwNTA6e246IkJydENGVk8xNCJ9LDEwNTE6e246IkJydEJlZ2luRGF0YWJhcjE0'@;
put 'In0sMTA1Mjp7bjoiQnJ0QmVnaW5JY29uU2V0MTQifSwxMDUzOntuOiJCcnREVmFsMTQiLGY6ZnVuY3Rpb24gdVYodyxQLEQpe3ZhciBlZT1mdW5jdGlvbiBLdCh3LFAsRCl7dmFyIGVlPXcucmVhZF9zaGlmdCg0KSxvZT17fTtyZXR1cm4gMSZlZSYmKG9lLnJlZnM9ZnVuY3Rpb24gVW4odyl7'@;
put 'Zm9yKHZhciBQPXcucmVhZF9zaGlmdCg0KSxEPVtdO1AtLSA+MDspRC5wdXNoKFByKHcpKTtyZXR1cm4gRH0odykpLDImZWUmJihvZS5zcXJlZnM9ZnVuY3Rpb24gU28odyl7Zm9yKHZhciBQPXcucmVhZF9zaGlmdCg0KSxEPVtdO1AtLSA+MDspRC5wdXNoKHJhKHcpKTtyZXR1cm4gRH0odykp'@;
put 'LDQmZWUmJihvZS5mb3JtdWxhcz1mdW5jdGlvbiBZYSh3LFAsRCl7Zm9yKHZhciBlZT13LnJlYWRfc2hpZnQoNCksb2U9W107ZWUtLSA+MDspb2UucHVzaChodSh3LDAsRCkpO3JldHVybiBvZX0odywwLEQpKSw4JmVlJiYob2UucmVsSUQ9ZnVuY3Rpb24gRjYodyl7dmFyIFA9dy5yZWFkX3No'@;
put 'aWZ0KDIpO3JldHVybiAwPT09UD8iIjp3LnJlYWRfc2hpZnQoUCwidXRmMTZsZSIpfSh3KSksb2V9KHcsMCxEKSxvZT13LnJlYWRfc2hpZnQoNCksZ2U9SGModyksX2U9SGModyksdmU9SGModyksTWU9SGModyksamU9KGVlLmZvcm11bGFzfHxbXSlbMF0sVWU9KGVlLmZvcm11bGFzfHxbXSlb'@;
put 'MV0sWGU9MTUmb2UsaXQ9e3Q6cm9bWGVdLHNxcmZ4OmVlLnNxcmVmc1swXSxzOltnZSxfZSx2ZSxNZV19O3JldHVybiBqZSYmKGl0LmYxPWplKSxVZSYmKGl0LmYyPVVlKSwwPT1YZXx8Mz09WGV8fDc9PVhlfHwoaXQub3A9Q3dbb2U+PjIwJjE1XSksaXR9fSwxMDU0OntuOiJCcnRCZWdpbkRW'@;
put 'YWxzMTQifSwxMDU1OntuOiJCcnRDb2xvcjE0In0sMTA1Njp7bjoiQnJ0QmVnaW5TcGFya2xpbmVzIn0sMTA1Nzp7bjoiQnJ0RW5kU3BhcmtsaW5lcyJ9LDEwNTg6e246IkJydEJlZ2luU3BhcmtsaW5lR3JvdXBzIn0sMTA1OTp7bjoiQnJ0RW5kU3BhcmtsaW5lR3JvdXBzIn0sMTA2MTp7bjoi'@;
put 'QnJ0U1hWRDE0In0sMTA2Mjp7bjoiQnJ0QmVnaW5TWFZpZXcxNCJ9LDEwNjM6e246IkJydEVuZFNYVmlldzE0In0sMTA2NDp7bjoiQnJ0QmVnaW5TWFZpZXcxNiJ9LDEwNjU6e246IkJydEVuZFNYVmlldzE2In0sMTA2Njp7bjoiQnJ0QmVnaW5QQ0QxNCJ9LDEwNjc6e246IkJydEVuZFBDRDE0'@;
put 'In0sMTA2ODp7bjoiQnJ0QmVnaW5FeHRDb25uMTQifSwxMDY5OntuOiJCcnRFbmRFeHRDb25uMTQifSwxMDcwOntuOiJCcnRCZWdpblNsaWNlckNhY2hlSURzIn0sMTA3MTp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVJRHMifSwxMDcyOntuOiJCcnRCZWdpblNsaWNlckNhY2hlSUQifSwxMDczOntu'@;
put 'OiJCcnRFbmRTbGljZXJDYWNoZUlEIn0sMTA3NTp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZSJ9LDEwNzY6e246IkJydEVuZFNsaWNlckNhY2hlIn0sMTA3Nzp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZURlZiJ9LDEwNzg6e246IkJydEVuZFNsaWNlckNhY2hlRGVmIn0sMTA3OTp7bjoiQnJ0QmVn'@;
put 'aW5TbGljZXJzRXgifSwxMDgwOntuOiJCcnRFbmRTbGljZXJzRXgifSwxMDgxOntuOiJCcnRCZWdpblNsaWNlckV4In0sMTA4Mjp7bjoiQnJ0RW5kU2xpY2VyRXgifSwxMDgzOntuOiJCcnRCZWdpblNsaWNlciJ9LDEwODQ6e246IkJydEVuZFNsaWNlciJ9LDEwODU6e246IkJydFNsaWNlckNh'@;
put 'Y2hlUGl2b3RUYWJsZXMifSwxMDg2OntuOiJCcnRCZWdpblNsaWNlckNhY2hlT2xhcEltcGwifSwxMDg3OntuOiJCcnRFbmRTbGljZXJDYWNoZU9sYXBJbXBsIn0sMTA4ODp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZUxldmVsc0RhdGEifSwxMDg5OntuOiJCcnRFbmRTbGljZXJDYWNoZUxldmVs'@;
put 'c0RhdGEifSwxMDkwOntuOiJCcnRCZWdpblNsaWNlckNhY2hlTGV2ZWxEYXRhIn0sMTA5MTp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVMZXZlbERhdGEifSwxMDkyOntuOiJCcnRCZWdpblNsaWNlckNhY2hlU2lSYW5nZXMifSwxMDkzOntuOiJCcnRFbmRTbGljZXJDYWNoZVNpUmFuZ2VzIn0sMTA5'@;
put 'NDp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZVNpUmFuZ2UifSwxMDk1OntuOiJCcnRFbmRTbGljZXJDYWNoZVNpUmFuZ2UifSwxMDk2OntuOiJCcnRTbGljZXJDYWNoZU9sYXBJdGVtIn0sMTA5Nzp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZVNlbGVjdGlvbnMifSwxMDk4OntuOiJCcnRTbGljZXJD'@;
put 'YWNoZVNlbGVjdGlvbiJ9LDEwOTk6e246IkJydEVuZFNsaWNlckNhY2hlU2VsZWN0aW9ucyJ9LDExMDA6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVOYXRpdmUifSwxMTAxOntuOiJCcnRFbmRTbGljZXJDYWNoZU5hdGl2ZSJ9LDExMDI6e246IkJydFNsaWNlckNhY2hlTmF0aXZlSXRlbSJ9LDEx'@;
put 'MDM6e246IkJydFJhbmdlUHJvdGVjdGlvbjE0In0sMTEwNDp7bjoiQnJ0UmFuZ2VQcm90ZWN0aW9uSXNvMTQifSwxMTA1OntuOiJCcnRDZWxsSWdub3JlRUMxNCJ9LDExMTE6e246IkJydExpc3QxNCJ9LDExMTI6e246IkJydENGSWNvbiJ9LDExMTM6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVz'@;
put 'UGl2b3RDYWNoZUlEcyJ9LDExMTQ6e246IkJydEVuZFNsaWNlckNhY2hlc1Bpdm90Q2FjaGVJRHMifSwxMTE1OntuOiJCcnRCZWdpblNsaWNlcnMifSwxMTE2OntuOiJCcnRFbmRTbGljZXJzIn0sMTExNzp7bjoiQnJ0V2JQcm9wMTQifSwxMTE4OntuOiJCcnRCZWdpblNYRWRpdCJ9LDExMTk6'@;
put 'e246IkJydEVuZFNYRWRpdCJ9LDExMjA6e246IkJydEJlZ2luU1hFZGl0cyJ9LDExMjE6e246IkJydEVuZFNYRWRpdHMifSwxMTIyOntuOiJCcnRCZWdpblNYQ2hhbmdlIn0sMTEyMzp7bjoiQnJ0RW5kU1hDaGFuZ2UifSwxMTI0OntuOiJCcnRCZWdpblNYQ2hhbmdlcyJ9LDExMjU6e246IkJy'@;
put 'dEVuZFNYQ2hhbmdlcyJ9LDExMjY6e246IkJydFNYVHVwbGVJdGVtcyJ9LDExMjg6e246IkJydEJlZ2luU2xpY2VyU3R5bGUifSwxMTI5OntuOiJCcnRFbmRTbGljZXJTdHlsZSJ9LDExMzA6e246IkJydFNsaWNlclN0eWxlRWxlbWVudCJ9LDExMzE6e246IkJydEJlZ2luU3R5bGVTaGVldEV4'@;
put 'dDE0In0sMTEzMjp7bjoiQnJ0RW5kU3R5bGVTaGVldEV4dDE0In0sMTEzMzp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZXNQaXZvdENhY2hlSUQifSwxMTM0OntuOiJCcnRFbmRTbGljZXJDYWNoZXNQaXZvdENhY2hlSUQifSwxMTM1OntuOiJCcnRCZWdpbkNvbmRpdGlvbmFsRm9ybWF0dGluZ3Mi'@;
put 'fSwxMTM2OntuOiJCcnRFbmRDb25kaXRpb25hbEZvcm1hdHRpbmdzIn0sMTEzNzp7bjoiQnJ0QmVnaW5QQ0RDYWxjTWVtRXh0In0sMTEzODp7bjoiQnJ0RW5kUENEQ2FsY01lbUV4dCJ9LDExMzk6e246IkJydEJlZ2luUENEQ2FsY01lbXNFeHQifSwxMTQwOntuOiJCcnRFbmRQQ0RDYWxjTWVt'@;
put 'c0V4dCJ9LDExNDE6e246IkJydFBDREZpZWxkMTQifSwxMTQyOntuOiJCcnRCZWdpblNsaWNlclN0eWxlcyJ9LDExNDM6e246IkJydEVuZFNsaWNlclN0eWxlcyJ9LDExNDQ6e246IkJydEJlZ2luU2xpY2VyU3R5bGVFbGVtZW50cyJ9LDExNDU6e246IkJydEVuZFNsaWNlclN0eWxlRWxlbWVu'@;
put 'dHMifSwxMTQ2OntuOiJCcnRDRlJ1bGVFeHQifSwxMTQ3OntuOiJCcnRCZWdpblNYQ29uZEZtdDE0In0sMTE0ODp7bjoiQnJ0RW5kU1hDb25kRm10MTQifSwxMTQ5OntuOiJCcnRCZWdpblNYQ29uZEZtdHMxNCJ9LDExNTA6e246IkJydEVuZFNYQ29uZEZtdHMxNCJ9LDExNTI6e246IkJydEJl'@;
put 'Z2luU29ydENvbmQxNCJ9LDExNTM6e246IkJydEVuZFNvcnRDb25kMTQifSwxMTU0OntuOiJCcnRFbmREVmFsczE0In0sMTE1NTp7bjoiQnJ0RW5kSWNvblNldDE0In0sMTE1Njp7bjoiQnJ0RW5kRGF0YWJhcjE0In0sMTE1Nzp7bjoiQnJ0QmVnaW5Db2xvclNjYWxlMTQifSwxMTU4OntuOiJC'@;
put 'cnRFbmRDb2xvclNjYWxlMTQifSwxMTU5OntuOiJCcnRCZWdpblN4cnVsZXMxNCJ9LDExNjA6e246IkJydEVuZFN4cnVsZXMxNCJ9LDExNjE6e246IkJydEJlZ2luUFJ1bGUxNCJ9LDExNjI6e246IkJydEVuZFBSdWxlMTQifSwxMTYzOntuOiJCcnRCZWdpblBSRmlsdGVyczE0In0sMTE2NDp7'@;
put 'bjoiQnJ0RW5kUFJGaWx0ZXJzMTQifSwxMTY1OntuOiJCcnRCZWdpblBSRmlsdGVyMTQifSwxMTY2OntuOiJCcnRFbmRQUkZpbHRlcjE0In0sMTE2Nzp7bjoiQnJ0QmVnaW5QUkZJdGVtMTQifSwxMTY4OntuOiJCcnRFbmRQUkZJdGVtMTQifSwxMTY5OntuOiJCcnRCZWdpbkNlbGxJZ25vcmVF'@;
put 'Q3MxNCJ9LDExNzA6e246IkJydEVuZENlbGxJZ25vcmVFQ3MxNCJ9LDExNzE6e246IkJydER4ZjE0In0sMTE3Mjp7bjoiQnJ0QmVnaW5EeEYxNHMifSwxMTczOntuOiJCcnRFbmREeGYxNHMifSwxMTc3OntuOiJCcnRGaWx0ZXIxNCJ9LDExNzg6e246IkJydEJlZ2luQ3VzdG9tRmlsdGVyczE0'@;
put 'In0sMTE4MDp7bjoiQnJ0Q3VzdG9tRmlsdGVyMTQifSwxMTgxOntuOiJCcnRJY29uRmlsdGVyMTQifSwxMTgyOntuOiJCcnRQaXZvdENhY2hlQ29ubmVjdGlvbk5hbWUifSwyMDQ4OntuOiJCcnRCZWdpbkRlY291cGxlZFBpdm90Q2FjaGVJRHMifSwyMDQ5OntuOiJCcnRFbmREZWNvdXBsZWRQ'@;
put 'aXZvdENhY2hlSURzIn0sMjA1MDp7bjoiQnJ0RGVjb3VwbGVkUGl2b3RDYWNoZUlEIn0sMjA1MTp7bjoiQnJ0QmVnaW5QaXZvdFRhYmxlUmVmcyJ9LDIwNTI6e246IkJydEVuZFBpdm90VGFibGVSZWZzIn0sMjA1Mzp7bjoiQnJ0UGl2b3RUYWJsZVJlZiJ9LDIwNTQ6e246IkJydFNsaWNlckNh'@;
put 'Y2hlQm9va1Bpdm90VGFibGVzIn0sMjA1NTp7bjoiQnJ0QmVnaW5TeHZjZWxscyJ9LDIwNTY6e246IkJydEVuZFN4dmNlbGxzIn0sMjA1Nzp7bjoiQnJ0QmVnaW5TeFJvdyJ9LDIwNTg6e246IkJydEVuZFN4Um93In0sMjA2MDp7bjoiQnJ0UGNkQ2FsY01lbTE1In0sMjA2Nzp7bjoiQnJ0UXNp'@;
put 'MTUifSwyMDY4OntuOiJCcnRCZWdpbldlYkV4dGVuc2lvbnMifSwyMDY5OntuOiJCcnRFbmRXZWJFeHRlbnNpb25zIn0sMjA3MDp7bjoiQnJ0V2ViRXh0ZW5zaW9uIn0sMjA3MTp7bjoiQnJ0QWJzUGF0aDE1In0sMjA3Mjp7bjoiQnJ0QmVnaW5QaXZvdFRhYmxlVUlTZXR0aW5ncyJ9LDIwNzM6'@;
put 'e246IkJydEVuZFBpdm90VGFibGVVSVNldHRpbmdzIn0sMjA3NTp7bjoiQnJ0VGFibGVTbGljZXJDYWNoZUlEcyJ9LDIwNzY6e246IkJydFRhYmxlU2xpY2VyQ2FjaGVJRCJ9LDIwNzc6e246IkJydEJlZ2luVGFibGVTbGljZXJDYWNoZSJ9LDIwNzg6e246IkJydEVuZFRhYmxlU2xpY2VyQ2Fj'@;
put 'aGUifSwyMDc5OntuOiJCcnRTeEZpbHRlcjE1In0sMjA4MDp7bjoiQnJ0QmVnaW5UaW1lbGluZUNhY2hlUGl2b3RDYWNoZUlEcyJ9LDIwODE6e246IkJydEVuZFRpbWVsaW5lQ2FjaGVQaXZvdENhY2hlSURzIn0sMjA4Mjp7bjoiQnJ0VGltZWxpbmVDYWNoZVBpdm90Q2FjaGVJRCJ9LDIwODM6'@;
put 'e246IkJydEJlZ2luVGltZWxpbmVDYWNoZUlEcyJ9LDIwODQ6e246IkJydEVuZFRpbWVsaW5lQ2FjaGVJRHMifSwyMDg1OntuOiJCcnRCZWdpblRpbWVsaW5lQ2FjaGVJRCJ9LDIwODY6e246IkJydEVuZFRpbWVsaW5lQ2FjaGVJRCJ9LDIwODc6e246IkJydEJlZ2luVGltZWxpbmVzRXgifSwy'@;
put 'MDg4OntuOiJCcnRFbmRUaW1lbGluZXNFeCJ9LDIwODk6e246IkJydEJlZ2luVGltZWxpbmVFeCJ9LDIwOTA6e246IkJydEVuZFRpbWVsaW5lRXgifSwyMDkxOntuOiJCcnRXb3JrQm9va1ByMTUifSwyMDkyOntuOiJCcnRQQ0RIMTUifSwyMDkzOntuOiJCcnRCZWdpblRpbWVsaW5lU3R5bGUi'@;
put 'fSwyMDk0OntuOiJCcnRFbmRUaW1lbGluZVN0eWxlIn0sMjA5NTp7bjoiQnJ0VGltZWxpbmVTdHlsZUVsZW1lbnQifSwyMDk2OntuOiJCcnRCZWdpblRpbWVsaW5lU3R5bGVzaGVldEV4dDE1In0sMjA5Nzp7bjoiQnJ0RW5kVGltZWxpbmVTdHlsZXNoZWV0RXh0MTUifSwyMDk4OntuOiJCcnRC'@;
put 'ZWdpblRpbWVsaW5lU3R5bGVzIn0sMjA5OTp7bjoiQnJ0RW5kVGltZWxpbmVTdHlsZXMifSwyMTAwOntuOiJCcnRCZWdpblRpbWVsaW5lU3R5bGVFbGVtZW50cyJ9LDIxMDE6e246IkJydEVuZFRpbWVsaW5lU3R5bGVFbGVtZW50cyJ9LDIxMDI6e246IkJydER4ZjE1In0sMjEwMzp7bjoiQnJ0'@;
put 'QmVnaW5EeGZzMTUifSwyMTA0OntuOiJicnRFbmREeGZzMTUifSwyMTA1OntuOiJCcnRTbGljZXJDYWNoZUhpZGVJdGVtc1dpdGhOb0RhdGEifSwyMTA2OntuOiJCcnRCZWdpbkl0ZW1VbmlxdWVOYW1lcyJ9LDIxMDc6e246IkJydEVuZEl0ZW1VbmlxdWVOYW1lcyJ9LDIxMDg6e246IkJydEl0'@;
put 'ZW1VbmlxdWVOYW1lIn0sMjEwOTp7bjoiQnJ0QmVnaW5FeHRDb25uMTUifSwyMTEwOntuOiJCcnRFbmRFeHRDb25uMTUifSwyMTExOntuOiJCcnRCZWdpbk9sZWRiUHIxNSJ9LDIxMTI6e246IkJydEVuZE9sZWRiUHIxNSJ9LDIxMTM6e246IkJydEJlZ2luRGF0YUZlZWRQcjE1In0sMjExNDp7'@;
put 'bjoiQnJ0RW5kRGF0YUZlZWRQcjE1In0sMjExNTp7bjoiQnJ0VGV4dFByMTUifSwyMTE2OntuOiJCcnRSYW5nZVByMTUifSwyMTE3OntuOiJCcnREYkNvbW1hbmQxNSJ9LDIxMTg6e246IkJydEJlZ2luRGJUYWJsZXMxNSJ9LDIxMTk6e246IkJydEVuZERiVGFibGVzMTUifSwyMTIwOntuOiJC'@;
put 'cnREYlRhYmxlMTUifSwyMTIxOntuOiJCcnRCZWdpbkRhdGFNb2RlbCJ9LDIxMjI6e246IkJydEVuZERhdGFNb2RlbCJ9LDIxMjM6e246IkJydEJlZ2luTW9kZWxUYWJsZXMifSwyMTI0OntuOiJCcnRFbmRNb2RlbFRhYmxlcyJ9LDIxMjU6e246IkJydE1vZGVsVGFibGUifSwyMTI2OntuOiJC'@;
put 'cnRCZWdpbk1vZGVsUmVsYXRpb25zaGlwcyJ9LDIxMjc6e246IkJydEVuZE1vZGVsUmVsYXRpb25zaGlwcyJ9LDIxMjg6e246IkJydE1vZGVsUmVsYXRpb25zaGlwIn0sMjEyOTp7bjoiQnJ0QmVnaW5FQ1R4dFdpejE1In0sMjEzMDp7bjoiQnJ0RW5kRUNUeHRXaXoxNSJ9LDIxMzE6e246IkJy'@;
put 'dEJlZ2luRUNUV0ZsZEluZm9Mc3QxNSJ9LDIxMzI6e246IkJydEVuZEVDVFdGbGRJbmZvTHN0MTUifSwyMTMzOntuOiJCcnRCZWdpbkVDVFdGbGRJbmZvMTUifSwyMTM0OntuOiJCcnRGaWVsZExpc3RBY3RpdmVJdGVtIn0sMjEzNTp7bjoiQnJ0UGl2b3RDYWNoZUlkVmVyc2lvbiJ9LDIxMzY6'@;
put 'e246IkJydFNYREkxNSJ9LDIxMzc6e246IkJydEJlZ2luTW9kZWxUaW1lR3JvdXBpbmdzIn0sMjEzODp7bjoiQnJ0RW5kTW9kZWxUaW1lR3JvdXBpbmdzIn0sMjEzOTp7bjoiQnJ0QmVnaW5Nb2RlbFRpbWVHcm91cGluZyJ9LDIxNDA6e246IkJydEVuZE1vZGVsVGltZUdyb3VwaW5nIn0sMjE0'@;
put 'MTp7bjoiQnJ0TW9kZWxUaW1lR3JvdXBpbmdDYWxjQ29sIn0sMzA3Mjp7bjoiQnJ0VWlkIn0sMzA3Mzp7bjoiQnJ0UmV2aXNpb25QdHIifSw1MDk1OntuOiJCcnRCZWdpbkNhbGNGZWF0dXJlcyJ9LDUwOTY6e246IkJydEVuZENhbGNGZWF0dXJlcyJ9LDUwOTc6e246IkJydENhbGNGZWF0dXJl'@;
put 'In0sNjU1MzU6e246IiJ9fSxnZz1LZShIMiwibiIpO2dnLkJydEZSVEFyY2hJRCQ9MTY7dmFyIGYxPXs2OntuOiJGb3JtdWxhIixmOkxwfSwxMDp7bjoiRU9GIixmOlFmfSwxMjp7bjoiQ2FsY0NvdW50IixmOnlzfSwxMzp7bjoiQ2FsY01vZGUiLGY6eXN9LDE0OntuOiJDYWxjUHJlY2lzaW9u'@;
put 'IixmOnhvfSwxNTp7bjoiQ2FsY1JlZk1vZGUiLGY6eG99LDE2OntuOiJDYWxjRGVsdGEiLGY6eWx9LDE3OntuOiJDYWxjSXRlciIsZjp4b30sMTg6e246IlByb3RlY3QiLGY6eG99LDE5OntuOiJQYXNzd29yZCIsZjp5c30sMjA6e246IkhlYWRlciIsZjpzZn0sMjE6e246IkZvb3RlciIsZjpz'@;
put 'Zn0sMjM6e246IkV4dGVyblNoZWV0IixmOnQ4fSwyNDp7bjoiTGJsIixmOnZ4fSwyNTp7bjoiV2luUHJvdGVjdCIsZjp4b30sMjY6e246IlZlcnRpY2FsUGFnZUJyZWFrcyJ9LDI3OntuOiJIb3Jpem9udGFsUGFnZUJyZWFrcyJ9LDI4OntuOiJOb3RlIixmOmZ1bmN0aW9uIHd4KHcsUCxEKXty'@;
put 'ZXR1cm4gZnVuY3Rpb24gb18odyxQLEQpe2lmKCEoRC5iaWZmPDgpKXt2YXIgZWU9dy5yZWFkX3NoaWZ0KDIpLG9lPXcucmVhZF9zaGlmdCgyKSxnZT13LnJlYWRfc2hpZnQoMiksX2U9dy5yZWFkX3NoaWZ0KDIpLHZlPWxoKHcsMCxEKTtyZXR1cm4gRC5iaWZmPDgmJncucmVhZF9zaGlmdCgx'@;
put 'KSxbe3I6ZWUsYzpvZX0sdmUsX2UsZ2VdfX0odywwLEQpfX0sMjk6e246IlNlbGVjdGlvbiIsZjpmdW5jdGlvbiBtcCh3LFAsRCl7cmV0dXJuIEQmJkQuYmlmZjw1Pyh3LmwrPVAse2NlbGw6e3I6MCxjOjB9fSk6KHcucmVhZF9zaGlmdCgxKSx7Y2VsbDpwaSh7cjp3LnJlYWRfc2hpZnQoMiks'@;
put 'Yzp3LnJlYWRfc2hpZnQoMil9KX0pfX0sMzQ6e246IkRhdGUxOTA0IixmOnhvfSwzNTp7bjoiRXh0ZXJuTmFtZSIsZjpuX30sMzg6e246IkxlZnRNYXJnaW4iLGY6eWx9LDM5OntuOiJSaWdodE1hcmdpbiIsZjp5bH0sNDA6e246IlRvcE1hcmdpbiIsZjp5bH0sNDE6e246IkJvdHRvbU1hcmdp'@;
put 'biIsZjp5bH0sNDI6e246IlByaW50Um93Q29sIixmOnhvfSw0Mzp7bjoiUHJpbnRHcmlkIixmOnhvfSw0Nzp7bjoiRmlsZVBhc3MiLGY6ZnVuY3Rpb24gR3ModyxQLEQpe2lmKEQuZW5jKXJldHVybiBELmVuYzt2YXIgZWU9e1R5cGU6RC5iaWZmPj04P3cucmVhZF9zaGlmdCgyKTowfTtyZXR1'@;
put 'cm4gZWUuVHlwZT9mdW5jdGlvbiBvSCh3LFAsRCxlZSl7dmFyIG9lPWVlfHx7fTtpZihvZS5JbmZvPXcucmVhZF9zaGlmdCgyKSx3LmwtPTIsMT09PW9lLkluZm8pe2lmKG9lLkRhdGE9ZnVuY3Rpb24gTlEodyl7dmFyIFA9e30sRD1QLkVuY3J5cHRpb25WZXJzaW9uSW5mbz1sMSh3LDQpO2lm'@;
put 'KDEhPUQuTWFqb3J8fDEhPUQuTWlub3IpdGhyb3cidW5yZWNvZ25pemVkIHZlcnNpb24gY29kZSAiK0QuTWFqb3IrIiA6ICIrRC5NaW5vcjtyZXR1cm4gUC5TYWx0PXcucmVhZF9zaGlmdCgxNiksUC5FbmNyeXB0ZWRWZXJpZmllcj13LnJlYWRfc2hpZnQoMTYpLFAuRW5jcnlwdGVkVmVyaWZp'@;
put 'ZXJIYXNoPXcucmVhZF9zaGlmdCgxNiksUH0odyksRC5wYXNzd29yZCYmdHlwZW9mIGZ2PCJ1Iil7dmFyIGdlPWZ2KEQucGFzc3dvcmQsb2UuRGF0YS5TYWx0LCIwMDAwMDAwMCIpLF9lPXVlKG9lLkRhdGEuRW5jcnlwdGVkVmVyaWZpZXIrb2UuRGF0YS5FbmNyeXB0ZWRWZXJpZmllckhhc2gs'@;
put 'ImhleCIpLHZlPVVmLnJjNCh1ZShnZSwiaGV4IikudG9TdHJpbmcoImJpbmFyeSIpLF9lKTtlZS52YWxpZD1VZi5tZDUodmUuc2xpY2UoMCwxNikpPT1CdWZmZXIuZnJvbSh2ZS5zbGljZSgxNikpLnRvU3RyaW5nKCJoZXgiKSxvZS5EYXRhLktleT1nZSxlZS5pbnNpdHU9ZnVuY3Rpb24gYXIo'@;
put 'dyxQKXt2YXIgRD1uZXcgQXJyYXkoMjU2KSxlZT0wLG9lPTAsZ2U9MCxfZT0wO2Z1bmN0aW9uIHZlKGl0KXtmb3IoZWU9MCxvZT0wLGdlPTAsX2U9MCxvZT0wOzI1NiE9b2U7KytvZSlEW29lXT1vZTtmb3IoZ2U9MCxvZT0wOzI1NiE9b2U7KytvZSl7dHJ5e2dlPWdlK0Rbb2VdK2l0W29lJWl0'@;
put 'Lmxlbmd0aF0uY2hhckNvZGVBdCgwKSYyNTV9Y2F0Y2goZnQpe3Rocm93IGNvbnNvbGUubG9nKG9lLGl0W29lJWl0Lmxlbmd0aF0pLGZ0fV9lPURbb2VdLERbb2VdPURbZ2VdLERbZ2VdPV9lfW9lPWdlPTB9ZnVuY3Rpb24gTWUoaXQpe3ZhciBmdD1ZKGl0Lmxlbmd0aCk7Zm9yKGVlPTA7ZWUh'@;
put 'PWl0Lmxlbmd0aDsrK2VlKV9lPURbb2U9b2UrMSYyNTVdLERbb2VdPURbZ2U9KGdlK0Rbb2VdKSUyNTZdLERbZ2VdPV9lLGZ0W2VlXT1pdFtlZV1eRFtEW29lXStEW2dlXSYyNTVdO3JldHVybiBCdWZmZXIuZnJvbShmdCl9dmFyIGplPXcuS2V5LFVlPTA7dmUodWUoamUsImhleCIpLnRvU3Ry'@;
put 'aW5nKCJiaW5hcnkiKSk7dmFyIFhlPTA7cmV0dXJuIGZ1bmN0aW9uKGl0KXtpZihYZStpdC5sZW5ndGg8MTAyNClyZXR1cm4gWGUrPWl0Lmxlbmd0aCxNZShpdCk7dmFyIHV0PTAsd3Q9dWUoaXQuc2xpY2UodXQsdXQrKE10PTEwMjQtWGUpKSk7dXQrPU10LFhlPTA7dmFyIEh0PU1lKHd0KTtm'@;
put 'b3IodXQ9PWl0Lmxlbmd0aCYmKCsrVWUsamU9ZnYoUCx3LlNhbHQsY3YoVWUpKSx2ZSh1ZShqZSwiaGV4IikudG9TdHJpbmcoImJpbmFyeSIpKSk7dXQ8aXQubGVuZ3RoOyl7KytVZSxqZT1mdihQLHcuU2FsdCxjdihVZSkpLHZlKEJ1ZmZlci5mcm9tKGplLCJoZXgiKS50b1N0cmluZygiYmlu'@;
put 'YXJ5IikpO3ZhciBNdD1NYXRoLm1pbigxMDI0LGl0Lmxlbmd0aC11dCk7d3Q9dWUoaXQuc2xpY2UodXQsdXQrTXQpKSx1dCs9TXQsWGU9TXQsSHQ9QnVmZmVyLmNvbmNhdChbSHQsTWUod3QpXSl9cmV0dXJuIEh0fX0ob2UuRGF0YSxELnBhc3N3b3JkKX19ZWxzZSBpZihvZS5EYXRhPWZ1bmN0'@;
put 'aW9uIEhRKHcsUCl7dmFyIEQ9e30sZWU9RC5FbmNyeXB0aW9uVmVyc2lvbkluZm89bDEodyw0KTtpZihQLT00LDIhPWVlLk1pbm9yKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIG1pbm9yIHZlcnNpb24gY29kZTogIitlZS5NaW5vcik7aWYoZWUuTWFqb3I+NHx8ZWUuTWFqb3I8Mil0'@;
put 'aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCBtYWpvciB2ZXJzaW9uIGNvZGU6ICIrZWUuTWFqb3IpO0QuRmxhZ3M9dy5yZWFkX3NoaWZ0KDQpLFAtPTQ7dmFyIG9lPXcucmVhZF9zaGlmdCg0KTtyZXR1cm4gUC09NCxELkVuY3J5cHRpb25IZWFkZXI9aF8odyxvZSksRC5FbmNyeXB0aW9u'@;
put 'VmVyaWZpZXI9ZjgodyxQLT1vZSksRH0odyxQKSxvZS5EYXRhJiZvZS5EYXRhLkVuY3J5cHRpb25IZWFkZXImJjI2NjI1PT09b2UuRGF0YS5FbmNyeXB0aW9uSGVhZGVyLkFsZ0lEJiZELnBhc3N3b3JkJiZ0eXBlb2Ygd3I8InUiKXt2YXIgTWU9d3IoRC5wYXNzd29yZCxvZS5EYXRhLkVuY3J5'@;
put 'cHRpb25WZXJpZmllci5TYWx0LnRvU3RyaW5nKCJoZXgiKSwiMDAwMDAwMDAiKSxqZT1vZS5EYXRhLkVuY3J5cHRpb25IZWFkZXIuS2V5U2l6ZT4+PjM7NT09amV8fGplPE1lLmxlbmd0aCYmKE1lPU1lLnNsaWNlKDAsamUpKTt2YXIgVWU9dWUob2UuRGF0YS5FbmNyeXB0aW9uVmVyaWZpZXIu'@;
put 'VmVyaWZpZXIudG9TdHJpbmcoImhleCIpK29lLkRhdGEuRW5jcnlwdGlvblZlcmlmaWVyLlZlcmlmaWVySGFzaC50b1N0cmluZygiaGV4IiksImhleCIpLFhlPVVmLnJjNChNZS50b1N0cmluZygiYmluYXJ5IiksVWUpO2VlLnZhbGlkPXRzKFhlLnNsaWNlKDAsamUpLCJTSEExIikudG9TdHJp'@;
put 'bmcoImhleCIpPT1YZS5zbGljZShqZSkudG9TdHJpbmcoImhleCIpLG9lLkRhdGEuS2V5PU1lLGVlLnZhbGlkJiYoZWUuaW5zaXR1PWZ1bmN0aW9uICR1KHcsUCl7dmFyIEQ9bmV3IEFycmF5KDI1NiksZWU9MCxvZT0wLGdlPTAsX2U9MCx2ZT13LkVuY3J5cHRpb25IZWFkZXIuS2V5U2l6ZT4+'@;
put 'PjM7ZnVuY3Rpb24gTWUoZnQpe2ZvcihmdD1CdWZmZXIuZnJvbShmdC5zbGljZSgwLHZlKSksZWU9MCxvZT0wLGdlPTAsX2U9MCxvZT0wOzI1NiE9b2U7KytvZSlEW29lXT1vZTtmb3IoZ2U9MCxvZT0wOzI1NiE9b2U7KytvZSl7dmFyIE10PWZ0W29lJWZ0Lmxlbmd0aF07Z2U9Z2UrRFtvZV0r'@;
put 'KCJzdHJpbmciPT10eXBlb2YgTXQ/TXQuY2hhckNvZGVBdCgwKTpNdCkmMjU1LF9lPURbb2VdLERbb2VdPURbZ2VdLERbZ2VdPV9lfW9lPWdlPTB9ZnVuY3Rpb24gamUoZnQpe3ZhciBNdD1ZKGZ0Lmxlbmd0aCk7Zm9yKGVlPTA7ZWUhPWZ0Lmxlbmd0aDsrK2VlKV9lPURbb2U9b2UrMSYyNTVd'@;
put 'LERbb2VdPURbZ2U9KGdlK0Rbb2VdKSUyNTZdLERbZ2VdPV9lLE10W2VlXT1mdFtlZV1eRFtEW29lXStEW2dlXSYyNTVdO3JldHVybiBCdWZmZXIuZnJvbShNdCl9dmFyIFVlPXcuS2V5LFhlPTA7TWUodWUoVWUsImhleCIpLnRvU3RyaW5nKCJiaW5hcnkiKSk7dmFyIGl0PTA7cmV0dXJuIGZ1'@;
put 'bmN0aW9uKGZ0KXtpZihpdCtmdC5sZW5ndGg8MTAyNClyZXR1cm4gaXQrPWZ0Lmxlbmd0aCxqZShmdCk7dmFyIHV0PTEwMjQtaXQsd3Q9MCxIdD1CdWZmZXIuZnJvbShmdC5zbGljZSh3dCx3dCt1dCkpO3d0Kz11dCxpdD0wO3ZhciBrdD1qZShIdCk7Zm9yKHd0PT1mdC5sZW5ndGgmJigrK1hl'@;
put 'LFVlPXdyKFAsdy5FbmNyeXB0aW9uVmVyaWZpZXIuU2FsdCxjdihYZSkpLE1lKEJ1ZmZlci5mcm9tKFVlLCJoZXgiKS50b1N0cmluZygiYmluYXJ5IikpKTt3dDxmdC5sZW5ndGg7KSsrWGUsVWU9d3IoUCx3LkVuY3J5cHRpb25WZXJpZmllci5TYWx0LGN2KFhlKSksTWUoQnVmZmVyLmZyb20o'@;
put 'VWUsImhleCIpLnRvU3RyaW5nKCJiaW5hcnkiKSksdXQ9TWF0aC5taW4oMTAyNCxmdC5sZW5ndGgtd3QpLEh0PUJ1ZmZlci5mcm9tKGZ0LnNsaWNlKHd0LHd0K3V0KSksd3QrPXV0LHV0PDEwMjQmJihpdD11dCksa3Q9QnVmZmVyLmNvbmNhdChba3QsamUoSHQpXSk7cmV0dXJuIGt0fX0ob2Uu'@;
put 'RGF0YSxELnBhc3N3b3JkKSl9cmV0dXJuIG9lfSh3LFAtMixELGVlKTpmdW5jdGlvbiBpSCh3LFAsRCxlZSl7dmFyIG9lPXtrZXk6eXModyksdmVyaWZpY2F0aW9uQnl0ZXM6eXModyl9O0QucGFzc3dvcmQmJihvZS52ZXJpZmllcj1WeChELnBhc3N3b3JkKSksZWUudmFsaWQ9b2UudmVyaWZp'@;
put 'Y2F0aW9uQnl0ZXM9PT1vZS52ZXJpZmllcixlZS52YWxpZCYmKGVlLmluc2l0dT1mdW5jdGlvbih3LFApe3ZhciBEPVB8fDAsZWU9ckgodyk7cmV0dXJuIGZ1bmN0aW9uKG9lKXt2YXIgZ2U9ZnVuY3Rpb24odyxQLEQsZWUsb2Upe3ZhciBnZSxfZTtmb3Iob2V8fChvZT1QKSxlZXx8KGVlPXJI'@;
put 'KCIiKSksZ2U9MDtnZSE9UC5sZW5ndGg7KytnZSlfZT0yNTUmKChfZT1QW2dlXSk+PjV8X2U8PDMpLG9lW2dlXT1fZV49ZWVbRF0sRD1EKzEmMTU7cmV0dXJuW29lLEQsZWVdfSgwLG9lLEQsZWUpO3JldHVybiBEPWdlWzFdLGdlWzBdfX0oRC5wYXNzd29yZCwwKSl9KHcsMCxELGVlKSxlZX19'@;
put 'LDQ5OntuOiJGb250IixmOmZ1bmN0aW9uIGh4KHcsUCxEKXt2YXIgZWU9e3N6OncucmVhZF9zaGlmdCgyKS8yMH0sb2U9Y20odyk7b2UuZkJvbGQmJihlZS5ib2xkPTEpLG9lLmZJdGFsaWMmJihlZS5pdGFsaWM9MSksb2UuZlVuZGVybGluZSYmKGVlLnVuZGVybGluZT0xKSxvZS5mQ29uZGVu'@;
put 'c2UmJihlZS5jb25kZW5zZT0xKSxvZS5mRXh0ZW5kJiYoZWUuZXh0ZW5kPTEpLG9lLmZTaGFkb3cmJihlZS5zaGFkb3c9MSksb2UuZk91dGxpbmUmJihlZS5vdXRsaW5lPTEpLG9lLmZTdHJpa2VvdXQmJihlZS5zdHJpa2U9MSk7dmFyIGdlPUQmJkQuYmlmZnx8ODtpZigyIT1nZSYmKGVlLmlj'@;
put 'dj13LnJlYWRfc2hpZnQoMiksMyE9Z2UmJjQhPWdlKSl7c3dpdGNoKDcwMD09PXcucmVhZF9zaGlmdCgyKSYmKGVlLmJvbGQ9MSksdy5yZWFkX3NoaWZ0KDIpKXtjYXNlIDE6ZWUudmFsaWduPSJzdXBlciI7YnJlYWs7Y2FzZSAyOmVlLnZhbGlnbj0ic3ViIn12YXIgdmU9dy5yZWFkX3NoaWZ0'@;
put 'KDEpOzAhPXZlJiYoZWUudW5kZXJsaW5lPXZlKTt2YXIgTWU9dy5yZWFkX3NoaWZ0KDEpO01lPjAmJihlZS5mYW1pbHk9TWUpO3ZhciBqZT13LnJlYWRfc2hpZnQoMSk7amU+MCYmKGVlLmNoYXJzZXQ9amUpLHcubCs9MX1yZXR1cm4gZWUubmFtZT1lZCh3LDAsRCksZWV9fSw1MTp7bjoiUHJp'@;
put 'bnRTaXplIixmOnlzfSw2MDp7bjoiQ29udGludWUifSw2MTp7bjoiV2luZG93MSIsZjpmdW5jdGlvbiBCbyh3KXtyZXR1cm57UG9zOlt3LnJlYWRfc2hpZnQoMiksdy5yZWFkX3NoaWZ0KDIpXSxEaW06W3cucmVhZF9zaGlmdCgyKSx3LnJlYWRfc2hpZnQoMildLEZsYWdzOncucmVhZF9zaGlm'@;
put 'dCgyKSxDdXJUYWI6dy5yZWFkX3NoaWZ0KDIpLEZpcnN0VGFiOncucmVhZF9zaGlmdCgyKSxTZWxlY3RlZDp3LnJlYWRfc2hpZnQoMiksVGFiUmF0aW86dy5yZWFkX3NoaWZ0KDIpfX19LDY0OntuOiJCYWNrdXAiLGY6eG99LDY1OntuOiJQYW5lIixmOmZ1bmN0aW9uIERGKHcsUCxEKXtpZihE'@;
put 'JiZELmJpZmY8NSlyZXR1cm57fTt2YXIgZWU9e307cmV0dXJuIGVlLng9dy5yZWFkX3NoaWZ0KDIpLGVlLnk9dy5yZWFkX3NoaWZ0KDIpLGVlLnJ3VG9wPXcucmVhZF9zaGlmdCgyKSxlZS5jb2xMZWZ0PXcucmVhZF9zaGlmdCgyKSxlZS5wbm5BY2N0PXcucmVhZF9zaGlmdCgxKSx3LnJlYWRf'@;
put 'c2hpZnQoMSksZWV9fSw2Njp7bjoiQ29kZVBhZ2UiLGY6eXN9LDc3OntuOiJQbHMiLGY6eHV9LDgwOntuOiJEQ29uIn0sODE6e246IkRDb25SZWYifSw4Mjp7bjoiRENvbk5hbWUifSw4NTp7bjoiRGVmQ29sV2lkdGgiLGY6eXN9LDg5OntuOiJYQ1QifSw5MDp7bjoiQ1JOIn0sOTE6e246IkZp'@;
put 'bGVTaGFyaW5nIn0sOTI6e246IldyaXRlQWNjZXNzIixmOmZ1bmN0aW9uIEo2KHcsUCxEKXtpZihELmVuYylyZXR1cm4gdy5sKz1QLCIiO3ZhciBlZT13Lmwsb2U9bGgodywwLEQpO3JldHVybiB3LnJlYWRfc2hpZnQoUCtlZS13LmwpLG9lfX0sOTM6e246Ik9iaiIsZjpmdW5jdGlvbiBNeCh3'@;
put 'LFAsRCl7aWYoRCYmRC5iaWZmPDgpcmV0dXJuIGZ1bmN0aW9uIGpGKHcsUCxEKXt3LmwrPTQ7dmFyIGVlPXcucmVhZF9zaGlmdCgyKSxvZT13LnJlYWRfc2hpZnQoMiksZ2U9dy5yZWFkX3NoaWZ0KDIpO3cubCs9Mix3LmwrPTIsdy5sKz0yLHcubCs9Mix3LmwrPTIsdy5sKz0yLHcubCs9Mix3'@;
put 'LmwrPTIsdy5sKz0yLHcubCs9Njt2YXIgX2U9W107cmV0dXJuIF9lLnB1c2goKG44W2VlXXx8eHUpKHcsUC09MzYsRCkpLHtjbW86W29lLGVlLGdlXSxmdDpfZX19KHcsUCxEKTt2YXIgZWU9RW0odyksb2U9ZnVuY3Rpb24gcjEodyxQLEQpe2Zvcih2YXIgZWU9dy5sK1Asb2U9W107dy5sPGVl'@;
put 'Oyl7dmFyIGdlPXcucmVhZF9zaGlmdCgyKTt3LmwtPTI7dHJ5e29lW2dlXT1YNltnZV0odyxlZS13LmwpfWNhdGNoe3JldHVybiB3Lmw9ZWUsb2V9fXJldHVybiB3LmwhPWVlJiYody5sPWVlKSxvZX0odyxQLTIyKTtyZXR1cm57Y21vOmVlLGZ0Om9lfX19LDk0OntuOiJVbmNhbGNlZCJ9LDk1'@;
put 'OntuOiJDYWxjU2F2ZVJlY2FsYyIsZjp4b30sOTY6e246IlRlbXBsYXRlIn0sOTc6e246IkludGwifSw5OTp7bjoiT2JqUHJvdGVjdCIsZjp4b30sMTI1OntuOiJDb2xJbmZvIixmOnJkfSwxMjg6e246Ikd1dHMiLGY6ZnVuY3Rpb24gVFEodyl7dy5sKz00O3ZhciBQPVt3LnJlYWRfc2hpZnQo'@;
put 'Miksdy5yZWFkX3NoaWZ0KDIpXTtpZigwIT09UFswXSYmUFswXS0tLDAhPT1QWzFdJiZQWzFdLS0sUFswXT43fHxQWzFdPjcpdGhyb3cgbmV3IEVycm9yKCJCYWQgR3V0dGVyczogIitQLmpvaW4oInwiKSk7cmV0dXJuIFB9fSwxMjk6e246IldzQm9vbCIsZjpmdW5jdGlvbiBfbCh3LFAsRCl7'@;
put 'dmFyIGVlPUQmJjg9PUQuYmlmZnx8Mj09UD93LnJlYWRfc2hpZnQoMik6KHcubCs9UCwwKTtyZXR1cm57ZkRpYWxvZzoxNiZlZSxmQmVsb3c6NjQmZWUsZlJpZ2h0OjEyOCZlZX19fSwxMzA6e246IkdyaWRTZXQiLGY6eXN9LDEzMTp7bjoiSENlbnRlciIsZjp4b30sMTMyOntuOiJWQ2VudGVy'@;
put 'IixmOnhvfSwxMzM6e246IkJvdW5kU2hlZXQ4IixmOmZ1bmN0aW9uIEFtKHcsUCxEKXt2YXIgZWU9dy5yZWFkX3NoaWZ0KDQpLG9lPTMmdy5yZWFkX3NoaWZ0KDEpLGdlPXcucmVhZF9zaGlmdCgxKTtzd2l0Y2goZ2Upe2Nhc2UgMDpnZT0iV29ya3NoZWV0IjticmVhaztjYXNlIDE6Z2U9Ik1h'@;
put 'Y3Jvc2hlZXQiO2JyZWFrO2Nhc2UgMjpnZT0iQ2hhcnRzaGVldCI7YnJlYWs7Y2FzZSA2OmdlPSJWQkFNb2R1bGUifXZhciBfZT1lZCh3LDAsRCk7cmV0dXJuIDA9PT1fZS5sZW5ndGgmJihfZT0iU2hlZXQxIikse3BvczplZSxoczpvZSxkdDpnZSxuYW1lOl9lfX19LDEzNDp7bjoiV3JpdGVQ'@;
put 'cm90ZWN0In0sMTQwOntuOiJDb3VudHJ5IixmOmZ1bmN0aW9uIFpGKHcpe3ZhciBELFA9WzAsMF07cmV0dXJuIEQ9dy5yZWFkX3NoaWZ0KDIpLFBbMF09QjZbRF18fEQsRD13LnJlYWRfc2hpZnQoMiksUFsxXT1CNltEXXx8RCxQfX0sMTQxOntuOiJIaWRlT2JqIixmOnlzfSwxNDQ6e246IlNv'@;
put 'cnQifSwxNDY6e246IlBhbGV0dGUiLGY6ZnVuY3Rpb24ga3godyl7Zm9yKHZhciBQPXcucmVhZF9zaGlmdCgyKSxEPVtdO1AtLSA+MDspRC5wdXNoKCRiKHcpKTtyZXR1cm4gRH19LDE1MTp7bjoiU3luYyJ9LDE1Mjp7bjoiTFByIn0sMTUzOntuOiJEeEdDb2wifSwxNTQ6e246IkZuR3JvdXBO'@;
put 'YW1lIn0sMTU1OntuOiJGaWx0ZXJNb2RlIn0sMTU2OntuOiJCdWlsdEluRm5Hcm91cENvdW50IixmOnlzfSwxNTc6e246IkF1dG9GaWx0ZXJJbmZvIn0sMTU4OntuOiJBdXRvRmlsdGVyIn0sMTYwOntuOiJTY2wiLGY6QXh9LDE2MTp7bjoiU2V0dXAiLGY6ZnVuY3Rpb24gaTgodyxQKXt2YXIg'@;
put 'RD17fTtyZXR1cm4gUDwzMnx8KHcubCs9MTYsRC5oZWFkZXI9eWwodyksRC5mb290ZXI9eWwodyksdy5sKz0yKSxEfX0sMTc0OntuOiJTY2VuTWFuIn0sMTc1OntuOiJTQ0VOQVJJTyJ9LDE3Njp7bjoiU3hWaWV3In0sMTc3OntuOiJTeHZkIn0sMTc4OntuOiJTWFZJIn0sMTgwOntuOiJTeEl2'@;
put 'ZCJ9LDE4MTp7bjoiU1hMSSJ9LDE4Mjp7bjoiU1hQSSJ9LDE4NDp7bjoiRG9jUm91dGUifSwxODU6e246IlJlY2lwTmFtZSJ9LDE4OTp7bjoiTXVsUmsiLGY6ZnVuY3Rpb24gcHgodyxQKXtmb3IodmFyIEQ9dy5sK1AtMixlZT13LnJlYWRfc2hpZnQoMiksb2U9dy5yZWFkX3NoaWZ0KDIpLGdl'@;
put 'PVtdO3cubDxEOylnZS5wdXNoKFhiKHcpKTtpZih3LmwhPT1EKXRocm93IG5ldyBFcnJvcigiTXVsUksgcmVhZCBlcnJvciIpO3ZhciBfZT13LnJlYWRfc2hpZnQoMik7aWYoZ2UubGVuZ3RoIT1fZS1vZSsxKXRocm93IG5ldyBFcnJvcigiTXVsUksgbGVuZ3RoIG1pc21hdGNoIik7cmV0dXJu'@;
put 'e3I6ZWUsYzpvZSxDOl9lLHJrcmVjOmdlfX19LDE5MDp7bjoiTXVsQmxhbmsiLGY6ZnVuY3Rpb24gVG0odyxQKXtmb3IodmFyIEQ9dy5sK1AtMixlZT13LnJlYWRfc2hpZnQoMiksb2U9dy5yZWFkX3NoaWZ0KDIpLGdlPVtdO3cubDxEOylnZS5wdXNoKHcucmVhZF9zaGlmdCgyKSk7aWYody5s'@;
put 'IT09RCl0aHJvdyBuZXcgRXJyb3IoIk11bEJsYW5rIHJlYWQgZXJyb3IiKTt2YXIgX2U9dy5yZWFkX3NoaWZ0KDIpO2lmKGdlLmxlbmd0aCE9X2Utb2UrMSl0aHJvdyBuZXcgRXJyb3IoIk11bEJsYW5rIGxlbmd0aCBtaXNtYXRjaCIpO3JldHVybntyOmVlLGM6b2UsQzpfZSxpeGZlOmdlfX19'@;
put 'LDE5Mzp7bjoiTW1zIixmOlFmfSwxOTc6e246IlNYREkifSwxOTg6e246IlNYREIifSwxOTk6e246IlNYRkRCIn0sMjAwOntuOiJTWERCQiJ9LDIwMTp7bjoiU1hOdW0ifSwyMDI6e246IlN4Qm9vbCIsZjp4b30sMjAzOntuOiJTeEVyciJ9LDIwNDp7bjoiU1hJbnQifSwyMDU6e246IlNYU3Ry'@;
put 'aW5nIn0sMjA2OntuOiJTWER0ciJ9LDIwNzp7bjoiU3hOaWwifSwyMDg6e246IlNYVGJsIn0sMjA5OntuOiJTWFRCUkdJSVRNIn0sMjEwOntuOiJTeFRicGcifSwyMTE6e246Ik9iUHJvaiJ9LDIxMzp7bjoiU1hTdHJlYW1JRCJ9LDIxNTp7bjoiREJDZWxsIn0sMjE2OntuOiJTWFJuZyJ9LDIx'@;
put 'Nzp7bjoiU3hJc3hvcGVyIn0sMjE4OntuOiJCb29rQm9vbCIsZjp5c30sMjIwOntuOiJEYk9yUGFyYW1RcnkifSwyMjE6e246IlNjZW5hcmlvUHJvdGVjdCIsZjp4b30sMjIyOntuOiJPbGVPYmplY3RTaXplIn0sMjI0OntuOiJYRiIsZjpmdW5jdGlvbiB0Xyh3LFAsRCl7dmFyIGVlPXt9O3Jl'@;
put 'dHVybiBlZS5pZm50PXcucmVhZF9zaGlmdCgyKSxlZS5udW1GbXRJZD13LnJlYWRfc2hpZnQoMiksZWUuZmxhZ3M9dy5yZWFkX3NoaWZ0KDIpLGVlLmZTdHlsZT1lZS5mbGFncz4+MiYxLGVlLmRhdGE9ZnVuY3Rpb24gbGYodyxQLEQsZWUpe3ZhciBvZT17fSxnZT13LnJlYWRfc2hpZnQoNCks'@;
put 'X2U9dy5yZWFkX3NoaWZ0KDQpLHZlPXcucmVhZF9zaGlmdCg0KSxNZT13LnJlYWRfc2hpZnQoMik7aWYob2UucGF0dGVyblR5cGU9RGlbdmU+PjI2XSwhZWUuY2VsbFN0eWxlcylyZXR1cm4gb2U7dmFyIGplPTcmZ2U7c3dpdGNoKGplKXtjYXNlIDE6b2UuaGFsaWduPSJsZWZ0IjticmVhaztj'@;
put 'YXNlIDI6b2UuaGFsaWduPSJjZW50ZXIiO2JyZWFrO2Nhc2UgMzpvZS5oYWxpZ249InJpZ2h0In1zd2l0Y2gob2UuZldyYXA9Z2U+PjMmMSxqZT1nZT4+NCY3KXtjYXNlIDA6b2UudmFsaWduPSJ0b3AiO2JyZWFrO2Nhc2UgMTpvZS52YWxpZ249ImNlbnRlciI7YnJlYWs7Y2FzZSAyOm9lLnZh'@;
put 'bGlnbj0iYm90dG9tIn1yZXR1cm4gb2UuZkp1c3RMYXN0PWdlPj43JjEsb2UudHJvdD1nZT4+OCYyNTUsb2UuY0luZGVudD1nZT4+MTYmMTUsb2UuZlNocmlua1RvRml0PWdlPj4yMCYxLG9lLmlSZWFkT3JkZXI9Z2U+PjIyJjIsb2UuZkF0ck51bT1nZT4+MjYmMSxvZS5mQXRyRm50PWdlPj4y'@;
put 'NyYxLG9lLmZBdHJBbGM9Z2U+PjI4JjEsb2UuZkF0ckJkcj1nZT4+MjkmMSxvZS5mQXRyUGF0PWdlPj4zMCYxLG9lLmZBdHJQcm90PWdlPj4zMSYxLG9lLmRnTGVmdD0xNSZfZSxvZS5kZ1JpZ2h0PV9lPj40JjE1LG9lLmRnVG9wPV9lPj44JjE1LG9lLmRnQm90dG9tPV9lPj4xMiYxNSxvZS5p'@;
put 'Y3ZMZWZ0PV9lPj4xNiYxMjcsb2UuaWN2UmlnaHQ9X2U+PjIzJjEyNyxvZS5ncmJpdERpYWc9X2U+PjMwJjMsb2UuaWN2VG9wPTEyNyZ2ZSxvZS5pY3ZCb3R0b209dmU+PjcmMTI3LG9lLmljdkRpYWc9dmU+PjE0JjEyNyxvZS5kZ0RpYWc9dmU+PjIxJjE1LG9lLmljdkZvcmU9MTI3Jk1lLG9l'@;
put 'LmljdkJhY2s9TWU+PjcmMTI3LG9lLmZzeEJ1dHRvbj1NZT4+MTQmMSxvZX0odywwLDAsRCksZWV9fSwyMjU6e246IkludGVyZmFjZUhkciIsZjpmdW5jdGlvbiBTMCh3LFApe3JldHVybiAwPT09UHx8dy5yZWFkX3NoaWZ0KDIpLDEyMDB9fSwyMjY6e246IkludGVyZmFjZUVuZCIsZjpRZn0s'@;
put 'MjI3OntuOiJTWFZTIn0sMjI5OntuOiJNZXJnZUNlbGxzIixmOmZ1bmN0aW9uIEN4KHcsUCl7Zm9yKHZhciBEPVtdLGVlPXcucmVhZF9zaGlmdCgyKTtlZS0tOylELnB1c2goYjIodykpO3JldHVybiBEfX0sMjMzOntuOiJCa0hpbSJ9LDIzNTp7bjoiTXNvRHJhd2luZ0dyb3VwIn0sMjM2Ontu'@;
put 'OiJNc29EcmF3aW5nIn0sMjM3OntuOiJNc29EcmF3aW5nU2VsZWN0aW9uIn0sMjM5OntuOiJQaG9uZXRpY0luZm8ifSwyNDA6e246IlN4UnVsZSJ9LDI0MTp7bjoiU1hFeCJ9LDI0Mjp7bjoiU3hGaWx0In0sMjQ0OntuOiJTeERYRiJ9LDI0NTp7bjoiU3hJdG0ifSwyNDY6e246IlN4TmFtZSJ9'@;
put 'LDI0Nzp7bjoiU3hTZWxlY3QifSwyNDg6e246IlNYUGFpciJ9LDI0OTp7bjoiU3hGbWxhIn0sMjUxOntuOiJTeEZvcm1hdCJ9LDI1Mjp7bjoiU1NUIixmOmZ1bmN0aW9uIFdzKHcsUCl7Zm9yKHZhciBEPXcubCtQLGVlPXcucmVhZF9zaGlmdCg0KSxvZT13LnJlYWRfc2hpZnQoNCksZ2U9W10s'@;
put 'X2U9MDtfZSE9b2UmJncubDxEOysrX2UpZ2UucHVzaChHNih3KSk7cmV0dXJuIGdlLkNvdW50PWVlLGdlLlVuaXF1ZT1vZSxnZX19LDI1Mzp7bjoiTGFiZWxTc3QiLGY6ZnVuY3Rpb24gUkYodyl7dmFyIFA9amModyk7cmV0dXJuIFAuaXNzdD13LnJlYWRfc2hpZnQoNCksUH19LDI1NTp7bjoi'@;
put 'RXh0U1NUIixmOmZ1bmN0aW9uIEFlKHcsUCl7dmFyIEQ9e307cmV0dXJuIEQuZHNzdD13LnJlYWRfc2hpZnQoMiksdy5sKz1QLTIsRH19LDI1Njp7bjoiU1hWREV4In0sMjU5OntuOiJTWEZvcm11bGEifSwyOTA6e246IlNYREJFeCJ9LDMxMTp7bjoiUlJESW5zRGVsIn0sMzEyOntuOiJSUkRI'@;
put 'ZWFkIn0sMzE1OntuOiJSUkRDaGdDZWxsIn0sMzE3OntuOiJSUlRhYklkIixmOmFmfSwzMTg6e246IlJSRFJlblNoZWV0In0sMzE5OntuOiJSUlNvcnQifSwzMjA6e246IlJSRE1vdmUifSwzMzA6e246IlJSRm9ybWF0In0sMzMxOntuOiJSUkF1dG9GbXQifSwzMzM6e246IlJSSW5zZXJ0U2gi'@;
put 'fSwzMzQ6e246IlJSRE1vdmVCZWdpbiJ9LDMzNTp7bjoiUlJETW92ZUVuZCJ9LDMzNjp7bjoiUlJESW5zRGVsQmVnaW4ifSwzMzc6e246IlJSREluc0RlbEVuZCJ9LDMzODp7bjoiUlJEQ29uZmxpY3QifSwzMzk6e246IlJSRERlZk5hbWUifSwzNDA6e246IlJSRFJzdEV0eHAifSwzNTE6e246'@;
put 'IkxSbmcifSwzNTI6e246IlVzZXNFTEZzIixmOnhvfSwzNTM6e246IkRTRiIsZjpRZn0sNDAxOntuOiJDVXNyIn0sNDAyOntuOiJDYlVzciJ9LDQwMzp7bjoiVXNySW5mbyJ9LDQwNDp7bjoiVXNyRXhjbCJ9LDQwNTp7bjoiRmlsZUxvY2sifSw0MDY6e246IlJSREluZm8ifSw0MDc6e246IkJD'@;
put 'VXNycyJ9LDQwODp7bjoiVXNyQ2hrIn0sNDI1OntuOiJVc2VyQlZpZXcifSw0MjY6e246IlVzZXJTVmlld0JlZ2luIn0sNDI3OntuOiJVc2VyU1ZpZXdFbmQifSw0Mjg6e246IlJSRFVzZXJWaWV3In0sNDI5OntuOiJRc2kifSw0MzA6e246IlN1cEJvb2siLGY6ZnVuY3Rpb24gVkYodyxQLEQp'@;
put 'e3ZhciBlZT13LmwrUCxvZT13LnJlYWRfc2hpZnQoMiksZ2U9dy5yZWFkX3NoaWZ0KDIpO2lmKEQuc2JjY2g9Z2UsMTAyNT09Z2V8fDE0ODQ5PT1nZSlyZXR1cm5bZ2Usb2VdO2lmKGdlPDF8fGdlPjI1NSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgU3VwQm9vayB0eXBlOiAiK2dlKTtm'@;
put 'b3IodmFyIF9lPXRkKHcsZ2UpLHZlPVtdO2VlPncubDspdmUucHVzaChhaCh3KSk7cmV0dXJuW2dlLG9lLF9lLHZlXX19LDQzMTp7bjoiUHJvdDRSZXYiLGY6eG99LDQzMjp7bjoiQ29uZEZtdCJ9LDQzMzp7bjoiQ0YifSw0MzQ6e246IkRWYWwifSw0Mzc6e246IkRDb25CaW4ifSw0Mzg6e246'@;
put 'IlR4TyIsZjpmdW5jdGlvbiB6Rih3LFAsRCl7dmFyIGVlPXcubCxvZT0iIixnZT0tMTt0cnl7dy5sKz00LC0xPT1bMCw1LDcsMTEsMTIsMTRdLmluZGV4T2YoKEQubGFzdG9ianx8e2NtbzpbMCwwXX0pLmNtb1sxXSk/dy5sKz02OmZ1bmN0aW9uIFZjKHcpe3ZhciBQPXcucmVhZF9zaGlmdCgx'@;
put 'KTt3LmwrKzt2YXIgRD13LnJlYWRfc2hpZnQoMik7dy5sKz0yfSh3KTt2YXIgTWU9dy5yZWFkX3NoaWZ0KDIpO3cucmVhZF9zaGlmdCgyKSxnZT13LnJlYWRfc2hpZnQoMik7dmFyIFVlPXcucmVhZF9zaGlmdCgyKTt3LmwrPVVlO2Zvcih2YXIgWGU9MTtYZTx3LmxlbnMubGVuZ3RoLTE7KytY'@;
put 'ZSl7aWYody5sLWVlIT13LmxlbnNbWGVdKXRocm93IG5ldyBFcnJvcigiVHhPOiBiYWQgY29udGludWUgcmVjb3JkIik7dmFyIGl0PXdbdy5sXTtpZigob2UrPXRkKHcsdy5sZW5zW1hlKzFdLXcubGVuc1tYZV0tMSkpLmxlbmd0aD49KGl0P01lOjIqTWUpKWJyZWFrfWlmKG9lLmxlbmd0aCE9'@;
put 'PU1lJiZvZS5sZW5ndGghPT0yKk1lKXRocm93IG5ldyBFcnJvcigiY2NoVGV4dDogIitNZSsiICE9ICIrb2UubGVuZ3RoKTtyZXR1cm4gdy5sPWVlK1Ase3Q6b2UsaWZudDpnZX19Y2F0Y2h7cmV0dXJuIHcubD1lZStQLHt0Om9lLGlmbnQ6Z2V9fX19LDQzOTp7bjoiUmVmcmVzaEFsbCIsZjp4'@;
put 'b30sNDQwOntuOiJITGluayIsZjpmdW5jdGlvbiBsYyh3LFApe3ZhciBEPWIyKHcpO3cubCs9MTY7dmFyIGVlPWZ1bmN0aW9uIEJjKHcsUCl7dmFyIEQ9dy5sK1AsZWU9dy5yZWFkX3NoaWZ0KDQpO2lmKDIhPT1lZSl0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBzdHJlYW1WZXJzaW9u'@;
put 'OiAiK2VlKTt2YXIgb2U9dy5yZWFkX3NoaWZ0KDIpO3cubCs9Mjt2YXIgZ2UsX2UsdmUsTWUsVWUsWGUsamU9IiI7MTYmb2UmJihnZT1rbSh3KSksMTI4Jm9lJiYoX2U9a20odykpLDI1Nz09KDI1NyZvZSkmJih2ZT1rbSh3KSksMT09KDI1NyZvZSkmJihNZT1mdW5jdGlvbiB1cCh3LFApe3Zh'@;
put 'ciBEPXcucmVhZF9zaGlmdCgxNik7c3dpdGNoKEQpe2Nhc2UiZTBjOWVhNzlmOWJhY2UxMThjODIwMGFhMDA0YmE5MGIiOnJldHVybiBmdW5jdGlvbiBzcCh3KXt2YXIgUD13LnJlYWRfc2hpZnQoNCksRD13LmwsZWU9ITE7UD4yNCYmKHcubCs9UC0yNCwiNzk1ODgxZjQzYjFkN2Y0OGFmMmM4'@;
put 'MjVkYzQ4NTI3NjMiPT09dy5yZWFkX3NoaWZ0KDE2KSYmKGVlPSEwKSx3Lmw9RCk7dmFyIG9lPXcucmVhZF9zaGlmdCgoZWU/UC0yNDpQKT4+MSwidXRmMTZsZSIpLnJlcGxhY2UoeSwiIik7cmV0dXJuIGVlJiYody5sKz0yNCksb2V9KHcpO2Nhc2UiMDMwMzAwMDAwMDAwMDAwMGMwMDAwMDAw'@;
put 'MDAwMDAwNDYiOnJldHVybiBmdW5jdGlvbiBicyh3KXtmb3IodmFyIFA9dy5yZWFkX3NoaWZ0KDIpLEQ9IiI7UC0tID4wOylEKz0iLi4vIjt2YXIgZWU9dy5yZWFkX3NoaWZ0KDAsImxwc3RyLWFuc2kiKTtpZih3LmwrPTIsNTcwMDUhPXcucmVhZF9zaGlmdCgyKSl0aHJvdyBuZXcgRXJyb3Io'@;
put 'IkJhZCBGaWxlTW9uaWtlciIpO2lmKDA9PT13LnJlYWRfc2hpZnQoNCkpcmV0dXJuIEQrZWUucmVwbGFjZSgvXFwvZywiLyIpO3ZhciBnZT13LnJlYWRfc2hpZnQoNCk7aWYoMyE9dy5yZWFkX3NoaWZ0KDIpKXRocm93IG5ldyBFcnJvcigiQmFkIEZpbGVNb25pa2VyIik7cmV0dXJuIEQrdy5y'@;
put 'ZWFkX3NoaWZ0KGdlPj4xLCJ1dGYxNmxlIikucmVwbGFjZSh5LCIiKX0odyk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIE1vbmlrZXIgIitEKX19KHcpKSw4Jm9lJiYoamU9a20odykpLDMyJm9lJiYoVWU9dy5yZWFkX3NoaWZ0KDE2KSksNjQmb2UmJihYZT1PdSh3KSks'@;
put 'dy5sPUQ7dmFyIGl0PV9lfHx2ZXx8TWV8fCIiO2l0JiZqZSYmKGl0Kz0iIyIramUpLGl0fHwoaXQ9IiMiK2plKSwyJm9lJiYiLyI9PWl0LmNoYXJBdCgwKSYmIi8iIT1pdC5jaGFyQXQoMSkmJihpdD0iZmlsZTovLyIraXQpO3ZhciBmdD17VGFyZ2V0Oml0fTtyZXR1cm4gVWUmJihmdC5ndWlk'@;
put 'PVVlKSxYZSYmKGZ0LnRpbWU9WGUpLGdlJiYoZnQuVG9vbHRpcD1nZSksZnR9KHcsUC0yNCk7cmV0dXJuW0QsZWVdfX0sNDQxOntuOiJMZWwifSw0NDI6e246IkNvZGVOYW1lIixmOmFofSw0NDM6e246IlNYRkRCVHlwZSJ9LDQ0NDp7bjoiUHJvdDRSZXZQYXNzIixmOnlzfSw0NDU6e246Ik9i'@;
put 'Tm9NYWNyb3MifSw0NDY6e246IkR2In0sNDQ4OntuOiJFeGNlbDlGaWxlIixmOlFmfSw0NDk6e246IlJlY2FsY0lkIixmOmZ1bmN0aW9uIE0wKHcpe3JldHVybiB3LnJlYWRfc2hpZnQoMiksdy5yZWFkX3NoaWZ0KDQpfSxyOjJ9LDQ1MDp7bjoiRW50RXhVMiIsZjpRZn0sNTEyOntuOiJEaW1l'@;
put 'bnNpb25zIixmOlV0fSw1MTM6e246IkJsYW5rIixmOnh4fSw1MTU6e246Ik51bWJlciIsZjpmdW5jdGlvbiBneCh3LFAsRCl7RC5iaWZmZ3Vlc3MmJjI9PUQuYmlmZiYmKEQuYmlmZj01KTt2YXIgZWU9amModyksb2U9eWwodyk7cmV0dXJuIGVlLnZhbD1vZSxlZX19LDUxNjp7bjoiTGFiZWwi'@;
put 'LGY6ZnVuY3Rpb24gUEYodyxQLEQpe0QuYmlmZmd1ZXNzJiYyPT1ELmJpZmYmJihELmJpZmY9NSk7dmFyIG9lPWpjKHcpOzI9PUQuYmlmZiYmdy5sKys7dmFyIGdlPWFoKHcsMCxEKTtyZXR1cm4gb2UudmFsPWdlLG9lfX0sNTE3OntuOiJCb29sRXJyIixmOll1fSw1MTk6e246IlN0cmluZyIs'@;
put 'ZjokRn0sNTIwOntuOiJSb3ciLGY6ZnVuY3Rpb24gSmUodyl7dmFyIFA9e307UC5yPXcucmVhZF9zaGlmdCgyKSxQLmM9dy5yZWFkX3NoaWZ0KDIpLFAuY250PXcucmVhZF9zaGlmdCgyKS1QLmM7dmFyIEQ9dy5yZWFkX3NoaWZ0KDIpO3cubCs9NDt2YXIgZWU9dy5yZWFkX3NoaWZ0KDEpO3cu'@;
put 'bCs9MTt2YXIgb2U9dy5yZWFkX3NoaWZ0KDIpO3JldHVybiBQLml4ZmU9NDA5NSZvZSw3JmVlJiYoUC5sZXZlbD03JmVlKSwzMiZlZSYmKFAuaGlkZGVuPSEwKSw2NCZlZSYmKFAuaHB0PUQvMjApLFB9fSw1MjM6e246IkluZGV4In0sNTQ1OntuOiJBcnJheSIsZjpieH0sNTQ5OntuOiJEZWZh'@;
put 'dWx0Um93SGVpZ2h0IixmOmExfSw1NjY6e246IlRhYmxlIn0sNTc0OntuOiJXaW5kb3cyIixmOmZ1bmN0aW9uIEFRKHcsUCxEKXtpZihEJiZELmJpZmY+PTImJkQuYmlmZjw1KXJldHVybnt9O3ZhciBlZT13LnJlYWRfc2hpZnQoMik7cmV0dXJue1JUTDo2NCZlZSxncmlkOiEhKDImZWUpLGZy'@;
put 'b3plbjohISg4JmVlKX19fSw2Mzg6e246IlJLIixmOmZ1bmN0aW9uIER1KHcpe3ZhciBQPXcucmVhZF9zaGlmdCgyKSxEPXcucmVhZF9zaGlmdCgyKSxlZT1YYih3KTtyZXR1cm57cjpQLGM6RCxpeGZlOmVlWzBdLHJrbnVtOmVlWzFdfX19LDY1OTp7bjoiU3R5bGUiLGY6ZnVuY3Rpb24gTkYo'@;
put 'dyxQLEQpe3JldHVybiB3LmwrPVAse319fSwxMDQ4OntuOiJCaWdOYW1lIn0sMTA1NDp7bjoiRm9ybWF0IixmOmZ1bmN0aW9uIEhGKHcsUCxEKXtyZXR1cm5bdy5yZWFkX3NoaWZ0KDIpLGxoKHcsMCxEKV19fSwxMDg0OntuOiJDb250aW51ZUJpZ05hbWUifSwxMjEyOntuOiJTaHJGbWxhIixm'@;
put 'OmZ1bmN0aW9uIGlfKHcsUCxEKXt2YXIgZWU9cTYodyk7dy5sKys7dmFyIG9lPXcucmVhZF9zaGlmdCgxKTtyZXR1cm5bdGcodyxQLT04LEQpLG9lLGVlXX19LDIwNDg6e246IkhMaW5rVG9vbHRpcCIsZjpmdW5jdGlvbiBRbCh3LFApe3cucmVhZF9zaGlmdCgyKTt2YXIgRD1iMih3KSxlZT13'@;
put 'LnJlYWRfc2hpZnQoKFAtMTApLzIsImRiY3MtY29udCIpO3JldHVybltELGVlPWVlLnJlcGxhY2UoeSwiIildfX0sMjA0OTp7bjoiV2ViUHViIn0sMjA1MDp7bjoiUXNpU1hUYWcifSwyMDUxOntuOiJEQlF1ZXJ5RXh0In0sMjA1Mjp7bjoiRXh0U3RyaW5nIn0sMjA1Mzp7bjoiVHh0UXJ5In0s'@;
put 'MjA1NDp7bjoiUXNpciJ9LDIwNTU6e246IlFzaWYifSwyMDU2OntuOiJSUkRUUVNJRiJ9LDIwNTc6e246IkJPRiIsZjp6Y30sMjA1ODp7bjoiT2xlRGJDb25uIn0sMjA1OTp7bjoiV09wdCJ9LDIwNjA6e246IlNYVmlld0V4In0sMjA2MTp7bjoiU1hUSCJ9LDIwNjI6e246IlNYUElFeCJ9LDIw'@;
put 'NjM6e246IlNYVkRURXgifSwyMDY0OntuOiJTWFZpZXdFeDkifSwyMDY2OntuOiJDb250aW51ZUZydCJ9LDIwNjc6e246IlJlYWxUaW1lRGF0YSJ9LDIxMjg6e246IkNoYXJ0RnJ0SW5mbyJ9LDIxMjk6e246IkZydFdyYXBwZXIifSwyMTMwOntuOiJTdGFydEJsb2NrIn0sMjEzMTp7bjoiRW5k'@;
put 'QmxvY2sifSwyMTMyOntuOiJTdGFydE9iamVjdCJ9LDIxMzM6e246IkVuZE9iamVjdCJ9LDIxMzQ6e246IkNhdExhYiJ9LDIxMzU6e246IllNdWx0In0sMjEzNjp7bjoiU1hWaWV3TGluayJ9LDIxMzc6e246IlBpdm90Q2hhcnRCaXRzIn0sMjEzODp7bjoiRnJ0Rm9udExpc3QifSwyMTQ2Ontu'@;
put 'OiJTaGVldEV4dCJ9LDIxNDc6e246IkJvb2tFeHQiLHI6MTJ9LDIxNDg6e246IlNYQWRkbCJ9LDIxNDk6e246IkNyRXJyIn0sMjE1MDp7bjoiSEZQaWN0dXJlIn0sMjE1MTp7bjoiRmVhdEhkciIsZjpRZn0sMjE1Mjp7bjoiRmVhdCJ9LDIxNTQ6e246IkRhdGFMYWJFeHQifSwyMTU1OntuOiJE'@;
put 'YXRhTGFiRXh0Q29udGVudHMifSwyMTU2OntuOiJDZWxsV2F0Y2gifSwyMTYxOntuOiJGZWF0SGRyMTEifSwyMTYyOntuOiJGZWF0dXJlMTEifSwyMTY0OntuOiJEcm9wRG93bk9iaklkcyJ9LDIxNjU6e246IkNvbnRpbnVlRnJ0MTEifSwyMTY2OntuOiJEQ29ubiJ9LDIxNjc6e246Ikxpc3Qx'@;
put 'MiJ9LDIxNjg6e246IkZlYXR1cmUxMiJ9LDIxNjk6e246IkNvbmRGbXQxMiJ9LDIxNzA6e246IkNGMTIifSwyMTcxOntuOiJDRkV4In0sMjE3Mjp7bjoiWEZDUkMiLGY6ZnVuY3Rpb24gcjgodyl7dy5sKz0yO3ZhciBQPXtjeGZzOjAsY3JjOjB9O3JldHVybiBQLmN4ZnM9dy5yZWFkX3NoaWZ0'@;
put 'KDIpLFAuY3JjPXcucmVhZF9zaGlmdCg0KSxQfSxyOjEyfSwyMTczOntuOiJYRkV4dCIsZjpmdW5jdGlvbiBJSCh3LFApe3cubCs9Mjt2YXIgZWU9dy5yZWFkX3NoaWZ0KDIpO3cubCs9Mjtmb3IodmFyIG9lPXcucmVhZF9zaGlmdCgyKSxnZT1bXTtvZS0tID4wOylnZS5wdXNoKERIKHcpKTty'@;
put 'ZXR1cm57aXhmZTplZSxleHQ6Z2V9fSxyOjEyfSwyMTc0OntuOiJBdXRvRmlsdGVyMTIifSwyMTc1OntuOiJDb250aW51ZUZydDEyIn0sMjE4MDp7bjoiTURUSW5mbyJ9LDIxODE6e246Ik1EWFN0ciJ9LDIxODI6e246Ik1EWFR1cGxlIn0sMjE4Mzp7bjoiTURYU2V0In0sMjE4NDp7bjoiTURY'@;
put 'UHJvcCJ9LDIxODU6e246Ik1EWEtQSSJ9LDIxODY6e246Ik1EQiJ9LDIxODc6e246IlBMViJ9LDIxODg6e246IkNvbXBhdDEyIixmOnhvLHI6MTJ9LDIxODk6e246IkRYRiJ9LDIxOTA6e246IlRhYmxlU3R5bGVzIixyOjEyfSwyMTkxOntuOiJUYWJsZVN0eWxlIn0sMjE5Mjp7bjoiVGFibGVT'@;
put 'dHlsZUVsZW1lbnQifSwyMTk0OntuOiJTdHlsZUV4dCJ9LDIxOTU6e246Ik5hbWVQdWJsaXNoIn0sMjE5Njp7bjoiTmFtZUNtdCIsZjpmdW5jdGlvbiB5eCh3LFAsRCl7aWYoIShELmJpZmY8OCkpe3ZhciBlZT13LnJlYWRfc2hpZnQoMiksb2U9dy5yZWFkX3NoaWZ0KDIpO3JldHVyblt0ZCh3'@;
put 'LGVlLEQpLHRkKHcsb2UsRCldfXcubCs9UH0scjoxMn0sMjE5Nzp7bjoiU29ydERhdGEifSwyMTk4OntuOiJUaGVtZSIsZjpmdW5jdGlvbiBFOCh3LFAsRCl7dmFyIGVlPXcubCtQO2lmKDEyNDIyNiE9PXcucmVhZF9zaGlmdCg0KSl7aWYoIUQuY2VsbFN0eWxlcylyZXR1cm4gdm9pZCh3Lmw9'@;
put 'ZWUpO3ZhciBfZSxnZT13LnNsaWNlKHcubCk7dy5sPWVlO3RyeXtfZT1UbihnZSx7dHlwZToiYXJyYXkifSl9Y2F0Y2h7cmV0dXJufXZhciB2ZT1ubihfZSwidGhlbWUvdGhlbWUvdGhlbWUxLnhtbCIsITApO2lmKHZlKXJldHVybiBrOCh2ZSxEKX19LHI6MTJ9LDIxOTk6e246IkdVSURUeXBl'@;
put 'TGliIn0sMjIwMDp7bjoiRm5HcnAxMiJ9LDIyMDE6e246Ik5hbWVGbkdycDEyIn0sMjIwMjp7bjoiTVRSU2V0dGluZ3MiLGY6ZnVuY3Rpb24gX3godyl7cmV0dXJuWzAhPT13LnJlYWRfc2hpZnQoNCksMCE9PXcucmVhZF9zaGlmdCg0KSx3LnJlYWRfc2hpZnQoNCldfSxyOjEyfSwyMjAzOntu'@;
put 'OiJDb21wcmVzc1BpY3R1cmVzIixmOlFmfSwyMjA0OntuOiJIZWFkZXJGb290ZXIifSwyMjA1OntuOiJDcnRMYXlvdXQxMiJ9LDIyMDY6e246IkNydE1sRnJ0In0sMjIwNzp7bjoiQ3J0TWxGcnRDb250aW51ZSJ9LDIyMTE6e246IkZvcmNlRnVsbENhbGN1bGF0aW9uIixmOmZ1bmN0aW9uIFJ0'@;
put 'KHcpe3ZhciBQPWZ1bmN0aW9uIEtiKHcpe3ZhciBQPXcucmVhZF9zaGlmdCgyKSxEPXcucmVhZF9zaGlmdCgyKTtyZXR1cm4gdy5sKz04LHt0eXBlOlAsZmxhZ3M6RH19KHcpO2lmKDIyMTEhPVAudHlwZSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgRnV0dXJlIFJlY29yZCAiK1AudHlwZSk7'@;
put 'cmV0dXJuIDAhPT13LnJlYWRfc2hpZnQoNCl9fSwyMjEyOntuOiJTaGFwZVByb3BzU3RyZWFtIn0sMjIxMzp7bjoiVGV4dFByb3BzU3RyZWFtIn0sMjIxNDp7bjoiUmljaFRleHRTdHJlYW0ifSwyMjE1OntuOiJDcnRMYXlvdXQxMkEifSw0MDk3OntuOiJVbml0cyJ9LDQwOTg6e246IkNoYXJ0'@;
put 'In0sNDA5OTp7bjoiU2VyaWVzIn0sNDEwMjp7bjoiRGF0YUZvcm1hdCJ9LDQxMDM6e246IkxpbmVGb3JtYXQifSw0MTA1OntuOiJNYXJrZXJGb3JtYXQifSw0MTA2OntuOiJBcmVhRm9ybWF0In0sNDEwNzp7bjoiUGllRm9ybWF0In0sNDEwODp7bjoiQXR0YWNoZWRMYWJlbCJ9LDQxMDk6e246'@;
put 'IlNlcmllc1RleHQifSw0MTE2OntuOiJDaGFydEZvcm1hdCJ9LDQxMTc6e246IkxlZ2VuZCJ9LDQxMTg6e246IlNlcmllc0xpc3QifSw0MTE5OntuOiJCYXIifSw0MTIwOntuOiJMaW5lIn0sNDEyMTp7bjoiUGllIn0sNDEyMjp7bjoiQXJlYSJ9LDQxMjM6e246IlNjYXR0ZXIifSw0MTI0Ontu'@;
put 'OiJDcnRMaW5lIn0sNDEyNTp7bjoiQXhpcyJ9LDQxMjY6e246IlRpY2sifSw0MTI3OntuOiJWYWx1ZVJhbmdlIn0sNDEyODp7bjoiQ2F0U2VyUmFuZ2UifSw0MTI5OntuOiJBeGlzTGluZSJ9LDQxMzA6e246IkNydExpbmsifSw0MTMyOntuOiJEZWZhdWx0VGV4dCJ9LDQxMzM6e246IlRleHQi'@;
put 'fSw0MTM0OntuOiJGb250WCIsZjp5c30sNDEzNTp7bjoiT2JqZWN0TGluayJ9LDQxNDY6e246IkZyYW1lIn0sNDE0Nzp7bjoiQmVnaW4ifSw0MTQ4OntuOiJFbmQifSw0MTQ5OntuOiJQbG90QXJlYSJ9LDQxNTQ6e246IkNoYXJ0M2QifSw0MTU2OntuOiJQaWNGIn0sNDE1Nzp7bjoiRHJvcEJh'@;
put 'ciJ9LDQxNTg6e246IlJhZGFyIn0sNDE1OTp7bjoiU3VyZiJ9LDQxNjA6e246IlJhZGFyQXJlYSJ9LDQxNjE6e246IkF4aXNQYXJlbnQifSw0MTYzOntuOiJMZWdlbmRFeGNlcHRpb24ifSw0MTY0OntuOiJTaHRQcm9wcyIsZjpmdW5jdGlvbiBhOCh3LFAsRCl7dmFyIGVlPXthcmVhOiExfTtp'@;
put 'Zig1IT1ELmJpZmYpcmV0dXJuIHcubCs9UCxlZTt2YXIgb2U9dy5yZWFkX3NoaWZ0KDEpO3JldHVybiB3LmwrPTMsMTYmb2UmJihlZS5hcmVhPSEwKSxlZX19LDQxNjU6e246IlNlclRvQ3J0In0sNDE2Njp7bjoiQXhlc1VzZWQifSw0MTY4OntuOiJTQmFzZVJlZiJ9LDQxNzA6e246IlNlclBh'@;
put 'cmVudCJ9LDQxNzE6e246IlNlckF1eFRyZW5kIn0sNDE3NDp7bjoiSUZtdFJlY29yZCJ9LDQxNzU6e246IlBvcyJ9LDQxNzY6e246IkFsUnVucyJ9LDQxNzc6e246IkJSQUkifSw0MTg3OntuOiJTZXJBdXhFcnJCYXIifSw0MTg4OntuOiJDbHJ0Q2xpZW50IixmOmZ1bmN0aW9uIFdGKHcpe2Zv'@;
put 'cih2YXIgUD13LnJlYWRfc2hpZnQoMiksRD1bXTtQLS0gPjA7KUQucHVzaCgkYih3KSk7cmV0dXJuIER9fSw0MTg5OntuOiJTZXJGbXQifSw0MTkxOntuOiJDaGFydDNEQmFyU2hhcGUifSw0MTkyOntuOiJGYmkifSw0MTkzOntuOiJCb3BQb3AifSw0MTk0OntuOiJBeGNFeHQifSw0MTk1Ontu'@;
put 'OiJEYXQifSw0MTk2OntuOiJQbG90R3Jvd3RoIn0sNDE5Nzp7bjoiU0lJbmRleCJ9LDQxOTg6e246IkdlbEZyYW1lIn0sNDE5OTp7bjoiQm9wUG9wQ3VzdG9tIn0sNDIwMDp7bjoiRmJpMiJ9LDA6e246IkRpbWVuc2lvbnMiLGY6VXR9LDE6e246IkJJRkYyQkxBTksifSwyOntuOiJCSUZGMklO'@;
put 'VCIsZjpmdW5jdGlvbiBxRih3KXt2YXIgUD1qYyh3KTsrK3cubDt2YXIgRD13LnJlYWRfc2hpZnQoMik7cmV0dXJuIFAudD0ibiIsUC52YWw9RCxQfX0sMzp7bjoiQklGRjJOVU0iLGY6ZnVuY3Rpb24gbF8odyl7dmFyIFA9amModyk7Kyt3Lmw7dmFyIEQ9eWwodyk7cmV0dXJuIFAudD0ibiIs'@;
put 'UC52YWw9RCxQfX0sNDp7bjoiQklGRjJTVFIiLGY6ZnVuY3Rpb24gT1EodyxQLEQpe0QuYmlmZmd1ZXNzJiY1PT1ELmJpZmYmJihELmJpZmY9Mik7dmFyIGVlPWpjKHcpOysrdy5sO3ZhciBvZT1saCh3LDAsRCk7cmV0dXJuIGVlLnQ9InN0ciIsZWUudmFsPW9lLGVlfX0sNTp7bjoiQm9vbEVy'@;
put 'ciIsZjpZdX0sNzp7bjoiU3RyaW5nIixmOmZ1bmN0aW9uIElRKHcpe3ZhciBQPXcucmVhZF9zaGlmdCgxKTtyZXR1cm4gMD09PVA/KHcubCsrLCIiKTp3LnJlYWRfc2hpZnQoUCwic2Jjcy1jb250Iil9fSw4OntuOiJCSUZGMlJPVyJ9LDk6e246IkJPRiIsZjp6Y30sMTE6e246IkluZGV4In0s'@;
put 'MjI6e246IkV4dGVybkNvdW50IixmOnlzfSwzMDp7bjoiQklGRjJGT1JNQVQiLGY6SWF9LDMxOntuOiJCSUZGMkZNVENOVCJ9LDMyOntuOiJCSUZGMkNPTElORk8ifSwzMzp7bjoiQXJyYXkiLGY6Ynh9LDM2OntuOiJDT0xXSURUSCJ9LDM3OntuOiJEZWZhdWx0Um93SGVpZ2h0IixmOmExfSw1'@;
put 'MDp7bjoiQklGRjJGT05UWFRSQSIsZjpmdW5jdGlvbiBSUSh3LFApe3cubCs9Nix3LmwrPTIsdy5sKz0xLHcubCs9Myx3LmwrPTEsdy5sKz1QLTEzfX0sNjI6e246IkJJRkYyV0lORE9XMiJ9LDUyOntuOiJEREVPYmpOYW1lIn0sNjc6e246IkJJRkYyWEYifSw2ODp7bjoiQklGRjJYRklOREVY'@;
put 'IixmOnlzfSw2OTp7bjoiQklGRjJGT05UQ0xSIn0sODY6e246IkJJRkY0Rk1UQ05UIn0sMTI2OntuOiJSSyJ9LDEyNzp7bjoiSW1EYXRhIixmOmZ1bmN0aW9uIEtGKHcpe3ZhciBQPXcucmVhZF9zaGlmdCgyKSxEPXcucmVhZF9zaGlmdCgyKSxlZT13LnJlYWRfc2hpZnQoNCksb2U9e2ZtdDpQ'@;
put 'LGVudjpELGxlbjplZSxkYXRhOncuc2xpY2Uody5sLHcubCtlZSl9O3JldHVybiB3LmwrPWVlLG9lfX0sMTM1OntuOiJBZGRpbiJ9LDEzNjp7bjoiRWRnIn0sMTM3OntuOiJQdWIifSwxNDU6e246IlN1YiJ9LDE0ODp7bjoiTEhSZWNvcmQifSwxNDk6e246IkxITkdyYXBoIn0sMTUwOntuOiJT'@;
put 'b3VuZCJ9LDE2OTp7bjoiQ29vcmRMaXN0In0sMTcxOntuOiJHQ1cifSwxODg6e246IlNockZtbGEifSwxOTE6e246IlRvb2xiYXJIZHIifSwxOTI6e246IlRvb2xiYXJFbmQifSwxOTQ6e246IkFkZE1lbnUifSwxOTU6e246IkRlbE1lbnUifSwyMTQ6e246IlJTdHJpbmciLGY6ZnVuY3Rpb24g'@;
put 'VHgodyxQLEQpe3ZhciBlZT13LmwrUCxvZT1qYyh3KSxnZT13LnJlYWRfc2hpZnQoMiksX2U9dGQodyxnZSxEKTtyZXR1cm4gdy5sPWVlLG9lLnQ9InN0ciIsb2UudmFsPV9lLG9lfX0sMjIzOntuOiJVRERlc2MifSwyMzQ6e246IlRhYklkQ29uZiJ9LDM1NDp7bjoiWEw1TW9kaWZ5In0sNDIx'@;
put 'OntuOiJGaWxlU2hhcmluZzIifSw1MTg6e246IkZvcm11bGEiLGY6THB9LDUyMTp7bjoiQk9GIixmOnpjfSw1MzY6e246IkxibCIsZjp2eH0sNTQ3OntuOiJFeHRlcm5OYW1lIixmOm5ffSw1NjE6e246IkZvbnQifSw1Nzk6e246IkJJRkYzWEYifSwxMDMwOntuOiJGb3JtdWxhIixmOkxwfSwx'@;
put 'MDMzOntuOiJCT0YiLGY6emN9LDEwOTE6e246IkJJRkY0WEYifSwyMTU3OntuOiJGZWF0SW5mbyJ9LDIxNjM6e246IkZlYXRJbmZvMTEifSwyMTc3OntuOiJTWEFkZGwxMiJ9LDIyNDA6e246IkF1dG9XZWJQdWIifSwyMjQxOntuOiJMaXN0T2JqIn0sMjI0Mjp7bjoiTGlzdEZpZWxkIn0sMjI0'@;
put 'Mzp7bjoiTGlzdERWIn0sMjI0NDp7bjoiTGlzdENvbmRGbXQifSwyMjQ1OntuOiJMaXN0Q0YifSwyMjQ2OntuOiJGTVFyeSJ9LDIyNDc6e246IkZNU1FyeSJ9LDIyNDg6e246IlBMViJ9LDIyNDk6e246IkxuRXh0In0sMjI1MDp7bjoiTWtyRXh0In0sMjI1MTp7bjoiQ3J0Q29vcHQifSwyMjYy'@;
put 'OntuOiJGUlRBcmNoSWQkIixyOjEyfSwyOTI4Mjp7fX0sdE89S2UoZjEsIm4iKTtmdW5jdGlvbiBTaSh3LFAsRCxlZSl7dmFyIG9lPStQfHwrdE9bUF07aWYoIWlzTmFOKG9lKSl7dmFyIGdlPWVlfHwoRHx8W10pLmxlbmd0aHx8MCxfZT13Lm5leHQoNCk7X2Uud3JpdGVfc2hpZnQoMixvZSks'@;
put 'X2Uud3JpdGVfc2hpZnQoMixnZSksZ2U+MCYmbDIoRCkmJncucHVzaChEKX19ZnVuY3Rpb24gZDEodyxQLEQpe3JldHVybiB3fHwodz1wcig3KSksdy53cml0ZV9zaGlmdCgyLFApLHcud3JpdGVfc2hpZnQoMixEKSx3LndyaXRlX3NoaWZ0KDIsMCksdy53cml0ZV9zaGlmdCgxLDApLHd9ZnVu'@;
put 'Y3Rpb24gVncodyxQLEQsZWUpe2lmKG51bGwhPVAudilzd2l0Y2goUC50KXtjYXNlImQiOmNhc2UibiI6dmFyIG9lPSJkIj09UC50P3FlKFB0KFAudikpOlAudjtyZXR1cm4gdm9pZChvZT09KDB8b2UpJiZvZT49MCYmb2U8NjU1MzY/U2kodywyLGZ1bmN0aW9uIFhGKHcsUCxEKXt2YXIgZWU9'@;
put 'cHIoOSk7cmV0dXJuIGQxKGVlLHcsUCksZWUud3JpdGVfc2hpZnQoMixEKSxlZX0oRCxlZSxvZSkpOlNpKHcsMyxmdW5jdGlvbiBEUSh3LFAsRCl7dmFyIGVlPXByKDE1KTtyZXR1cm4gZDEoZWUsdyxQKSxlZS53cml0ZV9zaGlmdCg4LEQsImYiKSxlZX0oRCxlZSxvZSkpKTtjYXNlImIiOmNh'@;
put 'c2UiZSI6cmV0dXJuIHZvaWQgU2kodyw1LGZ1bmN0aW9uIE53KHcsUCxELGVlKXt2YXIgb2U9cHIoOSk7cmV0dXJuIGQxKG9lLHcsUCksR2IoRCxlZXx8ImIiLG9lKSxvZX0oRCxlZSxQLnYsUC50KSk7Y2FzZSJzIjpjYXNlInN0ciI6cmV0dXJuIHZvaWQgU2kodyw0LGZ1bmN0aW9uIFVWKHcs'@;
put 'UCxEKXt2YXIgZWU9cHIoOCsyKkQubGVuZ3RoKTtyZXR1cm4gZDEoZWUsdyxQKSxlZS53cml0ZV9zaGlmdCgxLEQubGVuZ3RoKSxlZS53cml0ZV9zaGlmdChELmxlbmd0aCxELCJzYmNzIiksZWUubDxlZS5sZW5ndGg/ZWUuc2xpY2UoMCxlZS5sKTplZX0oRCxlZSwoUC52fHwiIikuc2xpY2Uo'@;
put 'MCwyNTUpKSl9U2kodywxLGQxKG51bGwsRCxlZSkpfWZ1bmN0aW9uIEdWKHcsUCxELGVlLG9lKXt2YXIgZ2U9MTYrd2Mob2UuY2VsbFhmcyxvZS5jZWxsU3R5bGVYZnMsUCxvZSk7aWYobnVsbCE9UC52fHxQLmJmKWlmKFAuYmYpU2kodywiRm9ybXVsYSIsZnVuY3Rpb24gZGVlKHcsUCxELGVl'@;
put 'LG9lKXt2YXIgZ2U9dDEoUCxELG9lKSxfZT1mdW5jdGlvbiBxXyh3KXtpZihudWxsPT13KXt2YXIgUD1wcig4KTtyZXR1cm4gUC53cml0ZV9zaGlmdCgxLDMpLFAud3JpdGVfc2hpZnQoMSwwKSxQLndyaXRlX3NoaWZ0KDIsMCksUC53cml0ZV9zaGlmdCgyLDApLFAud3JpdGVfc2hpZnQoMiw2'@;
put 'NTUzNSksUH1yZXR1cm4genUoIm51bWJlciI9PXR5cGVvZiB3P3c6MCl9KHcudiksdmU9cHIoNik7dmUud3JpdGVfc2hpZnQoMiwzMyksdmUud3JpdGVfc2hpZnQoNCwwKTtmb3IodmFyIGplPXByKHcuYmYubGVuZ3RoKSxVZT0wO1VlPHcuYmYubGVuZ3RoOysrVWUpamVbVWVdPXcuYmZbVWVd'@;
put 'O3JldHVybiBNKFtnZSxfZSx2ZSxqZV0pfShQLEQsZWUsMCxnZSkpO2Vsc2Ugc3dpdGNoKFAudCl7Y2FzZSJkIjpjYXNlIm4iOlNpKHcsIk51bWJlciIsZnVuY3Rpb24gcHAodyxQLEQsZWUpe3ZhciBvZT1wcigxNCk7cmV0dXJuIHQxKHcsUCxlZSxvZSksenUoRCxvZSksb2V9KEQsZWUsImQi'@;
put 'PT1QLnQ/cWUoUHQoUC52KSk6UC52LGdlKSk7YnJlYWs7Y2FzZSJiIjpjYXNlImUiOlNpKHcsNTE3LGZ1bmN0aW9uIG5kKHcsUCxELGVlLG9lLGdlKXt2YXIgX2U9cHIoOCk7cmV0dXJuIHQxKHcsUCxlZSxfZSksR2IoRCxnZSxfZSksX2V9KEQsZWUsUC52LGdlLDAsUC50KSk7YnJlYWs7Y2Fz'@;
put 'ZSJzIjpjYXNlInN0ciI6aWYob2UuYm9va1NTVCl7dmFyIHZlPXJ3KG9lLlN0cmluZ3MsUC52LFAuUj9QLnI9dzIoUC5SKTpudWxsLG9lLnJldlN0cmluZ3MpO2lmKFAuUilmb3IodmFyIE1lPTA7TWU8UC5SLmxlbmd0aDsrK01lKVAuUltNZV0ucyYmd2Mob2UuY2VsbFhmcyxvZS5jZWxsU3R5'@;
put 'bGVYZnMse3Q6Im4iLHY6MCxzOlAuUltNZV0uc30sb2UpO1NpKHcsIkxhYmVsU3N0IixmdW5jdGlvbiBMRih3LFAsRCxlZSl7dmFyIG9lPXByKDEwKTtyZXR1cm4gdDEodyxQLGVlLG9lKSxvZS53cml0ZV9zaGlmdCg0LEQpLG9lfShELGVlLHZlLGdlKSl9ZWxzZSBTaSh3LCJMYWJlbCIsZnVu'@;
put 'Y3Rpb24gRkYodyxQLEQsZWUsb2Upe3ZhciBnZT0hb2V8fDg9PW9lLmJpZmYsX2U9cHIoK2dlKzgrKDErZ2UpKkQubGVuZ3RoKTtyZXR1cm4gdDEodyxQLGVlLF9lKSxfZS53cml0ZV9zaGlmdCgyLEQubGVuZ3RoKSxnZSYmX2Uud3JpdGVfc2hpZnQoMSwxKSxfZS53cml0ZV9zaGlmdCgoMStn'@;
put 'ZSkqRC5sZW5ndGgsRCxnZT8idXRmMTZsZSI6InNiY3MiKSxfZX0oRCxlZSwoUC52fHwiIikuc2xpY2UoMCwyNTUpLGdlLG9lKSk7YnJlYWs7ZGVmYXVsdDpTaSh3LCJCbGFuayIsdDEoRCxlZSxnZSkpfWVsc2UgU2kodywiQmxhbmsiLHQxKEQsZWUsZ2UpKX1mdW5jdGlvbiAkVih3LFAsRCl7'@;
put 'dmFyIFVlLGVlPUF1KCksb2U9RC5TaGVldE5hbWVzW3ddLGdlPUQuU2hlZXRzW29lXXx8e30sX2U9KER8fHt9KS5Xb3JrYm9va3x8e30sdmU9KF9lLlNoZWV0c3x8W10pW3ddfHx7fSxNZT1BcnJheS5pc0FycmF5KGdlKSxqZT04PT1QLmJpZmYsWGU9IiIsaXQ9W10sZnQ9UGkoZ2VbIiFyZWYi'@;
put 'XXx8IkExIiksTXQ9amU/NjU1MzY6MTYzODQ7aWYoZnQuZS5jPjI1NXx8ZnQuZS5yPj1NdCl7aWYoUC5XVEYpdGhyb3cgbmV3IEVycm9yKCJSYW5nZSAiKyhnZVsiIXJlZiJdfHwiQTEiKSsiIGV4Y2VlZHMgZm9ybWF0IGxpbWl0IEExOklWMTYzODQiKTtmdC5lLmM9TWF0aC5taW4oZnQuZS5j'@;
put 'LDI1NSksZnQuZS5yPU1hdGgubWluKGZ0LmUuYyxNdC0xKX1TaShlZSwyMDU3LHhtKDAsMTYsUCkpLFNpKGVlLCJDYWxjTW9kZSIsYmMoMSkpLFNpKGVlLCJDYWxjQ291bnQiLGJjKDEwMCkpLFNpKGVlLCJDYWxjUmVmTW9kZSIsWnMoITApKSxTaShlZSwiQ2FsY0l0ZXIiLFpzKCExKSksU2ko'@;
put 'ZWUsIkNhbGNEZWx0YSIsenUoLjAwMSkpLFNpKGVlLCJDYWxjU2F2ZVJlY2FsYyIsWnMoITApKSxTaShlZSwiUHJpbnRSb3dDb2wiLFpzKCExKSksU2koZWUsIlByaW50R3JpZCIsWnMoITEpKSxTaShlZSwiR3JpZFNldCIsYmMoMSkpLFNpKGVlLCJHdXRzIixmdW5jdGlvbiBteCh3KXt2YXIg'@;
put 'UD1wcig4KTtyZXR1cm4gUC53cml0ZV9zaGlmdCg0LDApLFAud3JpdGVfc2hpZnQoMix3WzBdP3dbMF0rMTowKSxQLndyaXRlX3NoaWZ0KDIsd1sxXT93WzFdKzE6MCksUH0oWzAsMF0pKSxTaShlZSwiSENlbnRlciIsWnMoITEpKSxTaShlZSwiVkNlbnRlciIsWnMoITEpKTt2YXIgdXQ9Z2Vb'@;
put 'IiFwcmludCJdJiZnZVsiIXByaW50Il0ubWFyZ2luc3x8Z2VbIiFtYXJnaW5zIl07dXQmJihudWxsIT11dC5sZWZ0JiZTaShlZSwiTGVmdE1hcmdpbiIsenUodXQubGVmdCkpLG51bGwhPXV0LnJpZ2h0JiZTaShlZSwiUmlnaHRNYXJnaW4iLHp1KHV0LnJpZ2h0KSksbnVsbCE9dXQudG9wJiZT'@;
put 'aShlZSwiVG9wTWFyZ2luIix6dSh1dC50b3ApKSxudWxsIT11dC5ib3R0b20mJlNpKGVlLCJCb3R0b21NYXJnaW4iLHp1KHV0LmJvdHRvbSkpLChudWxsIT11dC5oZWFkZXJ8fG51bGwhPXV0LmZvb3RlcikmJlNpKGVlLCJTZXR1cCIsZnVuY3Rpb24gbzgodyxQKXt2YXIgRD1wcigzNCksZWU9'@;
put 'ITEsb2U9NzA7cmV0dXJuImxhbmRzY2FwZSI9PShQLnByb3BzfHx7fSkub3JpZW50YXRpb24mJihlZT0hMCxvZSY9LTY3KSxlZSYmKG9lJj0tNSksRC53cml0ZV9zaGlmdCgyLDEpLEQud3JpdGVfc2hpZnQoMiwxMDApLEQud3JpdGVfc2hpZnQoMiwwKSxELndyaXRlX3NoaWZ0KDIsMCksRC53'@;
put 'cml0ZV9zaGlmdCgyLDApLEQud3JpdGVfc2hpZnQoMSxvZSksRC53cml0ZV9zaGlmdCgxLDApLEQud3JpdGVfc2hpZnQoMiw2MDApLEQud3JpdGVfc2hpZnQoMiw2MDApLHp1KG51bGw9PXcuaGVhZGVyPy41OncuaGVhZGVyLEQpLHp1KG51bGw9PXcuZm9vdGVyPy41OncuZm9vdGVyLEQpLEQu'@;
put 'd3JpdGVfc2hpZnQoMiwxKSxEfSh1dCxnZVsiIXByaW50Il18fHt9KSkpLGplJiZmdW5jdGlvbiByTyh3LFAsRCl7aWYoUCl7dmFyIGVlPTA7UC5mb3JFYWNoKGZ1bmN0aW9uKG9lLGdlKXsrK2VlPD0yNTYmJm9lJiYob2UuYXV0byYmVmkoRCxvZSxnZSksU2kodywiQ29sSW5mbyIsZnVuY3Rp'@;
put 'b24gR0YodyxQKXt2YXIgRD1wcigxMik7RC53cml0ZV9zaGlmdCgyLFApLEQud3JpdGVfc2hpZnQoMixQKSxELndyaXRlX3NoaWZ0KDIsMjU2Kncud2lkdGgpLEQud3JpdGVfc2hpZnQoMiwwKTt2YXIgZWU9MDtyZXR1cm4gdy5oaWRkZW4mJihlZXw9MSksRC53cml0ZV9zaGlmdCgxLGVlKSxE'@;
put 'LndyaXRlX3NoaWZ0KDEsZWU9dy5sZXZlbHx8MCksRC53cml0ZV9zaGlmdCgyLDApLER9KHVkKGdlLG9lKSxnZSkpKX0pfX0oZWUsZ2VbIiFjb2xzIl0sZ2UpLFNpKGVlLCJEaW1lbnNpb25zIixmdW5jdGlvbiBadCh3LFApe3ZhciBEPTghPVAuYmlmZiYmUC5iaWZmPzI6NCxlZT1wcigyKkQr'@;
put 'Nik7cmV0dXJuIGVlLndyaXRlX3NoaWZ0KEQsdy5zLnIpLGVlLndyaXRlX3NoaWZ0KEQsdy5lLnIrMSksZWUud3JpdGVfc2hpZnQoMix3LnMuYyksZWUud3JpdGVfc2hpZnQoMix3LmUuYysxKSxlZS53cml0ZV9zaGlmdCgyLDApLGVlfShmdCxQKSksamUmJihnZVsiIWxpbmtzIl09W10pLGdl'@;
put 'WyIhcm93cyJdJiZqZSYmZ2VbIiFyb3dzIl0uZm9yRWFjaChmdW5jdGlvbihZdCxnbil7Zm9yKHZhciBxbj1WYShnbiksZm49MjU2LEtuPTAsem49WXQucz8xNit3YyhQLmNlbGxYZnMsUC5jZWxsU3R5bGVYZnMse3Q6Im4iLHY6MCxzOll0LnN9LFApOjAsT249ZnQucy5jO09uPD1mdC5lLmM7'@;
put 'KytPbikoTWU/KGdlW2duXXx8W10pW09uXTpnZVtpdFtPbl0rcW5dKSYmKE9uPGZuJiYoZm49T24pLE9uPktuJiYoS249T24pKTtLbjxmbiYmKGZuPUtuPTApLFNpKGVlLCJSb3ciLGZ1bmN0aW9uIGJ0KHcsUCxEKXt2YXIgZWU9cHIoMTYpO2VlLndyaXRlX3NoaWZ0KDIsUCksZWUud3JpdGVf'@;
put 'c2hpZnQoMixEWzBdKSxlZS53cml0ZV9zaGlmdCgyLERbMV0rMSksZWUud3JpdGVfc2hpZnQoMiwyMCp3LmhwdHx8MjAqdWgody5ocHgpfHwzMzApLGVlLndyaXRlX3NoaWZ0KDQsMCk7dmFyIG9lPTA7cmV0dXJuIG9lfD0wfHcubGV2ZWwsdy5oaWRkZW4mJihvZXw9MzIpLG9lfD02NCxEWzJd'@;
put 'JiYob2V8PTEyOCksZWUud3JpdGVfc2hpZnQoMSxvZSksZWUud3JpdGVfc2hpZnQoMSwxKSxlZS53cml0ZV9zaGlmdCgyLERbMl18fDApLGVlfShZdCxnbixbZm4sS24sem5dKSl9KTtmb3IodmFyIHd0PWZ0LnMucjt3dDw9ZnQuZS5yOysrd3Qpe1hlPVZhKHd0KTtmb3IodmFyIEh0PWZ0LnMu'@;
put 'YztIdDw9ZnQuZS5jOysrSHQpe3d0PT09ZnQucy5yJiYoaXRbSHRdPUJhKEh0KSksVWU9aXRbSHRdK1hlO3ZhciBrdD1NZT8oZ2Vbd3RdfHxbXSlbSHRdOmdlW1VlXTtrdCYmKEdWKGVlLGt0LHd0LEh0LFApLGplJiZrdC5sJiZnZVsiIWxpbmtzIl0ucHVzaChbVWUsa3QubF0pKX19dmFyIFR0'@;
put 'PXZlLkNvZGVOYW1lfHx2ZS5uYW1lfHxvZTtyZXR1cm4oamV8fDU9PVAuYmlmZiYmZ2VbIiFmcmVlemUiXSkmJlNpKGVlLCJXaW5kb3cyIixmdW5jdGlvbiBPRih3LFAsRCxlZSl7dmFyIG9lPWVlJiZlZS5iaWZmfHw4LGdlPXByKDg9PW9lPzE4OjEwKSxfZT0xNzE4O3JldHVybiBEPjAmJihf'@;
put 'ZSY9LTUxMyksaG4oUFsiIWdyaWRsaW5lcyJdKSYmKF9lJj0tMyksUFsiIWZyZWV6ZSJdJiYoX2V8PTgpLHcmJncuUlRMJiYoX2V8PTY0KSw1PT1vZSYmKF9lPTQ0NiksZ2Uud3JpdGVfc2hpZnQoMixfZSksOD09b2U/KGdlLndyaXRlX3NoaWZ0KDQsMCksZ2Uud3JpdGVfc2hpZnQoNCw2NCks'@;
put 'Z2Uud3JpdGVfc2hpZnQoNCwwKSxnZS53cml0ZV9zaGlmdCg0LDApKTooZ2Uud3JpdGVfc2hpZnQoNCwwKSxnZS53cml0ZV9zaGlmdCg0LDApKSxnZX0oKF9lLlZpZXdzfHxbXSlbMF0sZ2UsdykpLChqZXx8NT09UC5iaWZmKSYmZ2VbIiFmcmVlemUiXSYmU2koZWUsIlBhbmUiLGZ1bmN0aW9u'@;
put 'IElGKHcpeyJzdHJpbmciPT10eXBlb2YgdyYmKHc9Y2EodykpO3ZhciBQPXByKDEwKTtyZXR1cm4gUC53cml0ZV9zaGlmdCgyLHcuYyksUC53cml0ZV9zaGlmdCgyLHcuciksUC53cml0ZV9zaGlmdCgyLHcuciksUC53cml0ZV9zaGlmdCgyLHcuYyksUC53cml0ZV9zaGlmdCgxLDMpLFAud3Jp'@;
put 'dGVfc2hpZnQoMSwwKSxQfShnZVsiIWZyZWV6ZSJdKSksamUmJmdlWyIhc2VsIl0mJlNpKGVlLCJTZWxlY3Rpb24iLGZ1bmN0aW9uIE9tKHcsUCl7dmFyIEQ9cHIoMTUpLGVlPXcuY2VsbDtpZighZWUpe2lmKCF3LnJhbmdlKXRocm93IG5ldyBFcnJvcigiTXVzdCBzcGVjaWZ5IGEgc2VsZWN0'@;
put 'aW9uIGNlbGwgb3IgcmFuZ2UiKTtlZT1waShLYSh3LnJhbmdlLnJlcGxhY2UoL1xzLiokLywiIikpLnMpfXZhciBvZT0ic3RyaW5nIj09dHlwZW9mIGVlP2NhKGVlKTplZTtpZihQKXt2YXIgZ2U9InN0cmluZyI9PXR5cGVvZiBQP2NhKFApOlA7RC53cml0ZV9zaGlmdCgxLG9lLnI+PWdlLnIm'@;
put 'Jm9lLmM+PWdlLmM/MDpvZS5yPj1nZS5yJiZvZS5jPGdlLmM/MjpvZS5yPGdlLnImJm9lLmM+PWdlLmM/MTozKX1lbHNlIEQud3JpdGVfc2hpZnQoMSwzKTtyZXR1cm4gRC53cml0ZV9zaGlmdCgyLG9lLnIpLEQud3JpdGVfc2hpZnQoMixvZS5jKSxELndyaXRlX3NoaWZ0KDIsMCksRC53cml0'@;
put 'ZV9zaGlmdCgyLDEpLGZ1bmN0aW9uIEpiKHcsUCl7UHx8KFA9cHIoNikpLFAud3JpdGVfc2hpZnQoMix3LnM/dy5zLnI6dy5yKSxQLndyaXRlX3NoaWZ0KDIsdy5lP3cuZS5yOncuciksUC53cml0ZV9zaGlmdCgxLHcucz93LnMuYzp3LmMpLFAud3JpdGVfc2hpZnQoMSx3LmU/dy5lLmM6dy5j'@;
put 'KX0oe3M6b2UsZTpvZX0sRCksRH0oZ2VbIiFzZWwiXSxnZVsiIWZyZWV6ZSJdKSksamUmJihnZVsiIW1lcmdlcyJdfHxbXSkubGVuZ3RoJiZTaShlZSwiTWVyZ2VDZWxscyIsZnVuY3Rpb24gU3godyl7dmFyIFA9cHIoMis4KncubGVuZ3RoKTtQLndyaXRlX3NoaWZ0KDIsdy5sZW5ndGgpO2Zv'@;
put 'cih2YXIgRD0wO0Q8dy5sZW5ndGg7KytEKW4xKHdbRF0sUCk7cmV0dXJuIFB9KGdlWyIhbWVyZ2VzIl0pKSxqZSYmZnVuY3Rpb24gJHModyxQKXtmb3IodmFyIEQ9MDtEPFBbIiFsaW5rcyJdLmxlbmd0aDsrK0Qpe3ZhciBlZT1QWyIhbGlua3MiXVtEXTtTaSh3LCJITGluayIsXzIoZWUpKSxl'@;
put 'ZVsxXS5Ub29sdGlwJiZTaSh3LCJITGlua1Rvb2x0aXAiLFVGKGVlKSl9ZGVsZXRlIFBbIiFsaW5rcyJdfShlZSxnZSksU2koZWUsIkNvZGVOYW1lIiwkNihUdCkpLGplJiZmdW5jdGlvbiBuTyh3LFApe3ZhciBEPXByKDE5KTtELndyaXRlX3NoaWZ0KDQsMjE1MSksRC53cml0ZV9zaGlmdCg0'@;
put 'LDApLEQud3JpdGVfc2hpZnQoNCwwKSxELndyaXRlX3NoaWZ0KDIsMyksRC53cml0ZV9zaGlmdCgxLDEpLEQud3JpdGVfc2hpZnQoNCwwKSxTaSh3LCJGZWF0SGRyIixEKSwoRD1wcigzOSkpLndyaXRlX3NoaWZ0KDQsMjE1MiksRC53cml0ZV9zaGlmdCg0LDApLEQud3JpdGVfc2hpZnQoNCww'@;
put 'KSxELndyaXRlX3NoaWZ0KDIsMyksRC53cml0ZV9zaGlmdCgxLDApLEQud3JpdGVfc2hpZnQoNCwwKSxELndyaXRlX3NoaWZ0KDIsMSksRC53cml0ZV9zaGlmdCg0LDQpLEQud3JpdGVfc2hpZnQoMiwwKSxuMShQaShQWyIhcmVmIl18fCJBMSIpLEQpLEQud3JpdGVfc2hpZnQoNCw0KSxTaSh3'@;
put 'LCJGZWF0IixEKX0oZWUsZ2UpLFNpKGVlLCJFT0YiKSxlZS5lbmQoKX1mdW5jdGlvbiBpTyh3LFAsRCl7dmFyIGVlPUF1KCksb2U9KHd8fHt9KS5Xb3JrYm9va3x8e30sZ2U9b2UuU2hlZXRzfHxbXSxfZT1vZS5XQlByb3BzfHx7fSx2ZT04PT1ELmJpZmYsTWU9NT09RC5iaWZmO1NpKGVlLDIw'@;
put 'NTcseG0oMCw1LEQpKSwieGxhIj09RC5ib29rVHlwZSYmU2koZWUsIkFkZGluIiksU2koZWUsIkludGVyZmFjZUhkciIsdmU/YmMoMTIwMCk6bnVsbCksU2koZWUsIk1tcyIsZnVuY3Rpb24gY3godyxQKXtQfHwoUD1wcih3KSk7Zm9yKHZhciBEPTA7RDx3OysrRClQLndyaXRlX3NoaWZ0KDEs'@;
put 'MCk7cmV0dXJuIFB9KDIpKSxNZSYmU2koZWUsIlRvb2xiYXJIZHIiKSxNZSYmU2koZWUsIlRvb2xiYXJFbmQiKSxTaShlZSwiSW50ZXJmYWNlRW5kIiksU2koZWUsIldyaXRlQWNjZXNzIixmdW5jdGlvbiBRNih3LFApe3ZhciBEPSFQfHw4PT1QLmJpZmYsZWU9cHIoRD8xMTI6NTQpO2Zvcihl'@;
put 'ZS53cml0ZV9zaGlmdCg4PT1QLmJpZmY/MjoxLDcpLEQmJmVlLndyaXRlX3NoaWZ0KDEsMCksZWUud3JpdGVfc2hpZnQoNCw4NTkwMDcwNTkpLGVlLndyaXRlX3NoaWZ0KDQsNTQ1ODU0OHwoRD8wOjUzNjg3MDkxMikpO2VlLmw8ZWUubGVuZ3RoOyllZS53cml0ZV9zaGlmdCgxLEQ/MDozMik7'@;
put 'cmV0dXJuIGVlfSgwLEQpKSxTaShlZSwiQ29kZVBhZ2UiLGJjKHZlPzEyMDA6MTI1MikpLHZlJiZTaShlZSwiRFNGIixiYygwKSksdmUmJlNpKGVlLCJFeGNlbDlGaWxlIiksU2koZWUsIlJSVGFiSWQiLGZ1bmN0aW9uIGFfKHcpe2Zvcih2YXIgUD1wcigyKncpLEQ9MDtEPHc7KytEKVAud3Jp'@;
put 'dGVfc2hpZnQoMixEKzEpO3JldHVybiBQfSh3LlNoZWV0TmFtZXMubGVuZ3RoKSksdmUmJncudmJhcmF3JiZTaShlZSwiT2JQcm9qIiksdmUmJncudmJhcmF3JiZTaShlZSwiQ29kZU5hbWUiLCQ2KF9lLkNvZGVOYW1lfHwiVGhpc1dvcmtib29rIikpLFNpKGVlLCJCdWlsdEluRm5Hcm91cENv'@;
put 'dW50IixiYygxNykpLFNpKGVlLCJXaW5Qcm90ZWN0IixacyghMSkpLFNpKGVlLCJQcm90ZWN0IixacyghMSkpLFNpKGVlLCJQYXNzd29yZCIsYmMoMCkpLHZlJiZTaShlZSwiUHJvdDRSZXYiLFpzKCExKSksdmUmJlNpKGVlLCJQcm90NFJldlBhc3MiLGJjKDApKSxTaShlZSwiV2luZG93MSIs'@;
put 'ZnVuY3Rpb24gZHgoKXt2YXIgdz1wcigxOCk7cmV0dXJuIHcud3JpdGVfc2hpZnQoMiwwKSx3LndyaXRlX3NoaWZ0KDIsMCksdy53cml0ZV9zaGlmdCgyLDI5MjgwKSx3LndyaXRlX3NoaWZ0KDIsMTc2MDApLHcud3JpdGVfc2hpZnQoMiw1Niksdy53cml0ZV9zaGlmdCgyLDApLHcud3JpdGVf'@;
put 'c2hpZnQoMiwwKSx3LndyaXRlX3NoaWZ0KDIsMSksdy53cml0ZV9zaGlmdCgyLDUwMCksd30oKSksU2koZWUsIkJhY2t1cCIsWnMoITEpKSxTaShlZSwiSGlkZU9iaiIsYmMoMCkpLFNpKGVlLCJEYXRlMTkwNCIsWnMoInRydWUiPT1mdW5jdGlvbiBGVCh3KXtyZXR1cm4gdy5Xb3JrYm9vayYm'@;
put 'dy5Xb3JrYm9vay5XQlByb3BzJiZfcih3Lldvcmtib29rLldCUHJvcHMuZGF0ZTE5MDQpPyJ0cnVlIjoiZmFsc2UifSh3KSkpLFNpKGVlLCJDYWxjUHJlY2lzaW9uIixacyghMCkpLHZlJiZTaShlZSwiUmVmcmVzaEFsbCIsWnMoITEpKSxTaShlZSwiQm9va0Jvb2wiLGJjKDApKSxTcj15bShb'@;
put 'MCwxNjc3NzIxNSwxNjcxMTY4MCw2NTI4MCwyNTUsMTY3NzY5NjAsMTY3MTE5MzUsNjU1MzUsMCwxNjc3NzIxNSwxNjcxMTY4MCw2NTI4MCwyNTUsMTY3NzY5NjAsMTY3MTE5MzUsNjU1MzVdKSxmdW5jdGlvbiBaVih3LFAsRCl7KCgoUHx8e30pLlN0eWxlc3x8e30pLkZvbnRzfHxbe3N6OjEy'@;
put 'LGNvbG9yOnt0aGVtZToxfSxuYW1lOiJBcmlhbCIsZmFtaWx5OjIsc2NoZW1lOiJtaW5vciJ9XSkuZm9yRWFjaChmdW5jdGlvbihlZSl7U2kodywiRm9udCIsZnVuY3Rpb24gaHAodyxQKXt2YXIgRD13Lm5hbWV8fCJBcmlhbCIsZWU9UCYmNT09UC5iaWZmLGdlPXByKGVlPzE1K0QubGVuZ3Ro'@;
put 'OjE2KzIqRC5sZW5ndGgpO2dlLndyaXRlX3NoaWZ0KDIsMjAqKHcuc3p8fDEyKSk7dmFyIF9lPTA7cmV0dXJuIHcuYm9sZCYmKF9lfD0xKSx3Lml0YWxpYyYmKF9lfD0yKSx3LnN0cmlrZSYmKF9lfD04KSx3LnNoYWRvdyYmKF9lfD0zMiksZ2Uud3JpdGVfc2hpZnQoMSxfZSksZ2Uud3JpdGVf'@;
put 'c2hpZnQoMSwwKSxnZS53cml0ZV9zaGlmdCgyLHcuY29sb3I/VHAody5jb2xvciw2NCk6NjQpLGdlLndyaXRlX3NoaWZ0KDIsdy5ib2xkPzcwMDo0MDApLGdlLndyaXRlX3NoaWZ0KDIsInN1cGVyIj09dy52YWxpZ24/MToic3ViIj09dy52YWxpZ24/MjowKSxnZS53cml0ZV9zaGlmdCgxLHcu'@;
put 'dW5kZXJsaW5lfHwwKSxnZS53cml0ZV9zaGlmdCgxLGdlLmZhbWlseXx8MCksZ2Uud3JpdGVfc2hpZnQoMSxnZS5jaGFyc2V0fHwwKSxnZS53cml0ZV9zaGlmdCgxLDApLGdlLndyaXRlX3NoaWZ0KDEsRC5sZW5ndGgpLGVlfHxnZS53cml0ZV9zaGlmdCgxLDEpLGdlLndyaXRlX3NoaWZ0KChl'@;
put 'ZT8xOjIpKkQubGVuZ3RoLEQsZWU/InNiY3MiOiJ1dGYxNmxlIiksZ2V9KGVlLEQpKX0pfShlZSx3LEQpLGZ1bmN0aW9uIFlWKHcsUCxEKXtQJiZbWzUsOF0sWzIzLDI2XSxbNDEsNDRdLFs1MCwzOTJdXS5mb3JFYWNoKGZ1bmN0aW9uKGVlKXtmb3IodmFyIG9lPWVlWzBdO29lPD1lZVsxXTsr'@;
put 'K29lKW51bGwhPVBbb2VdJiZTaSh3LCJGb3JtYXQiLFFyKG9lLFBbb2VdLEQpKX0pfShlZSx3LlNTRixEKSxmdW5jdGlvbiBXVih3LFApe2Zvcih2YXIgRD0wO0Q8MTY7KytEKVNpKHcsIlhGIixlOCh7bnVtRm10SWQ6MCxzdHlsZTohMH0sMCxQKSk7UC5jZWxsWGZzLmZvckVhY2goZnVuY3Rp'@;
put 'b24oZWUpe1NpKHcsIlhGIixlOChlZSwwLFApKX0pfShlZSxEKSxTaShlZSwiUGFsZXR0ZSIsZnVuY3Rpb24gRXgodyl7dmFyIFA9cHIoMjI2KTtQLndyaXRlX3NoaWZ0KDIsNTYpO2Zvcih2YXIgRD0wO0Q8NTY7KytEKXt2YXIgZWU9d1tEKzhdfHxpcFtEKzhdO1Aud3JpdGVfc2hpZnQoMSxl'@;
put 'ZVswXSksUC53cml0ZV9zaGlmdCgxLGVlWzFdKSxQLndyaXRlX3NoaWZ0KDEsZWVbMl0pLFAud3JpdGVfc2hpZnQoMSwwKX1yZXR1cm4gUH0oU3IpKSxTcj1KdChpcCksdmUmJlNpKGVlLCJVc2VzRUxGcyIsWnMoITEpKTt2YXIgVWU9ZWUuZW5kKCksWGU9QXUoKTt2ZSYmU2koWGUsIkNvdW50'@;
put 'cnkiLGZ1bmN0aW9uIFlGKHcpe3JldHVybiB3fHwodz1wcig0KSksdy53cml0ZV9zaGlmdCgyLDEpLHcud3JpdGVfc2hpZnQoMiwxKSx3fSgpKSx2ZSYmRC5TdHJpbmdzJiZmdW5jdGlvbiBIdyh3LFAsRCxlZSl7dmFyIG9lPWVlfHwoRHx8W10pLmxlbmd0aHx8MDtpZihvZTw9ODIyNClyZXR1'@;
put 'cm4gU2kodyxQLEQsb2UpO3ZhciBnZT0rUHx8K3RPW1BdO2lmKCFpc05hTihnZSkpe2Zvcih2YXIgX2U9RC5wYXJ0c3x8W10sdmU9MCxNZT0wLGplPTA7amUrKF9lW3ZlXXx8ODIyNCk8PTgyMjQ7KWplKz1fZVt2ZV18fDgyMjQsdmUrKzt2YXIgVWU9dy5uZXh0KDQpO2ZvcihVZS53cml0ZV9z'@;
put 'aGlmdCgyLGdlKSxVZS53cml0ZV9zaGlmdCgyLGplKSx3LnB1c2goRC5zbGljZShNZSxNZStqZSkpLE1lKz1qZTtNZTxvZTspe2ZvcigoVWU9dy5uZXh0KDQpKS53cml0ZV9zaGlmdCgyLDYwKSxqZT0wO2plKyhfZVt2ZV18fDgyMjQpPD04MjI0OylqZSs9X2VbdmVdfHw4MjI0LHZlKys7VWUu'@;
put 'd3JpdGVfc2hpZnQoMixqZSksdy5wdXNoKEQuc2xpY2UoTWUsTWUramUpKSxNZSs9amV9fX0oWGUsIlNTVCIsZnVuY3Rpb24gU2EodyxQKXt2YXIgRD1wcig4KTtELndyaXRlX3NoaWZ0KDQsdy5Db3VudCksRC53cml0ZV9zaGlmdCg0LHcuVW5pcXVlKTtmb3IodmFyIGVlPVtdLG9lPTA7b2U8'@;
put 'dy5sZW5ndGg7KytvZSllZVtvZV09ZTEod1tvZV0sUCk7dmFyIGdlPU0oW0RdLmNvbmNhdChlZSkpO3JldHVybiBnZS5wYXJ0cz1bRC5sZW5ndGhdLmNvbmNhdChlZS5tYXAoZnVuY3Rpb24oX2Upe3JldHVybiBfZS5sZW5ndGh9KSksZ2V9KEQuU3RyaW5ncyxEKSksU2koWGUsIkVPRiIpO3Zh'@;
put 'ciBpdD1YZS5lbmQoKSxmdD1BdSgpLE10PTAsdXQ9MDtmb3IodXQ9MDt1dDx3LlNoZWV0TmFtZXMubGVuZ3RoOysrdXQpTXQrPSh2ZT8xMjoxMSkrKHZlPzI6MSkqdy5TaGVldE5hbWVzW3V0XS5sZW5ndGg7dmFyIHd0PVVlLmxlbmd0aCtNdCtpdC5sZW5ndGg7Zm9yKHV0PTA7dXQ8dy5TaGVl'@;
put 'dE5hbWVzLmxlbmd0aDsrK3V0KVNpKGZ0LCJCb3VuZFNoZWV0OCIsbzEoe3Bvczp3dCxoczooZ2VbdXRdfHx7fSkuSGlkZGVufHwwLGR0OjAsbmFtZTp3LlNoZWV0TmFtZXNbdXRdfSxEKSksd3QrPVBbdXRdLmxlbmd0aDt2YXIga3Q9ZnQuZW5kKCk7aWYoTXQhPWt0Lmxlbmd0aCl0aHJvdyBu'@;
put 'ZXcgRXJyb3IoIkJTOCAiK010KyIgIT0gIitrdC5sZW5ndGgpO3ZhciBUdD1bXTtyZXR1cm4gVWUubGVuZ3RoJiZUdC5wdXNoKFVlKSxrdC5sZW5ndGgmJlR0LnB1c2goa3QpLGl0Lmxlbmd0aCYmVHQucHVzaChpdCksa2woW1R0XSl9ZnVuY3Rpb24gQncodyxQKXt2YXIgRD1QfHx7fTtzd2l0'@;
put 'Y2goRC5iaWZmfHwyKXtjYXNlIDg6Y2FzZSA1OnJldHVybiBmdW5jdGlvbiBLVih3LFApe3ZhciBEPVB8fHt9LGVlPVtdO3A4KFAmJlAuUFBJfHw5NiksdyYmIXcuU1NGJiYody5TU0Y9Uy5nZXRfdGFibGUoKSksdyYmdy5TU0YmJihRKFMpLFMubG9hZF90YWJsZSh3LlNTRiksRC5yZXZzc2Y9'@;
put 'SWUody5TU0YpLEQucmV2c3NmW3cuU1NGWzY1NTM1XV09MCxELnNzZj13LlNTRiksdy5TdHlsZXM9e0ZvbnRzOkQuRm9udHM9W3tzejoxMixjb2xvcjp7dGhlbWU6MSxyZ2I6IjAwMDAwMCJ9LG5hbWU6IkNhbGlicmkiLGZhbWlseToyLHNjaGVtZToibWlub3IifV0sRmlsbHM6RC5GaWxscz1b'@;
put 'e3BhdHRlcm5UeXBlOiJub25lIn0se3BhdHRlcm5UeXBlOiJncmF5MTI1In1dLEJvcmRlcnM6RC5Cb3JkZXJzPVt7fV0sRFhGOkQuRFhGPXcuU3R5bGVzJiZ3LlN0eWxlcy5EWEZ8fFtdfSxoZihELkZvbnRzWzBdKSxELlN0cmluZ3M9W10sRC5TdHJpbmdzLkNvdW50PTAsRC5TdHJpbmdzLlVu'@;
put 'aXF1ZT0wLGMxP0QucmV2U3RyaW5ncz1uZXcgTWFwOihELnJldlN0cmluZ3M9e30sRC5yZXZTdHJpbmdzLmZvbz1bXSxkZWxldGUgRC5yZXZTdHJpbmdzLmZvbyksJHcoRCksRC5jZWxsWGZzPVtdLEQuY2VsbFN0eWxlWGZzPVt7bmFtZToiTm9ybWFsIn1dLHdjKEQuY2VsbFhmcyxELmNlbGxT'@;
put 'dHlsZVhmcyx7fSx7cmV2c3NmOntHZW5lcmFsOjB9fSksdy5Qcm9wc3x8KHcuUHJvcHM9e30pO2Zvcih2YXIgb2U9MDtvZTx3LlNoZWV0TmFtZXMubGVuZ3RoOysrb2UpZWVbZWUubGVuZ3RoXT0kVihvZSxELHcpO3JldHVybiBlZS51bnNoaWZ0KGlPKHcsZWUsRCkpLGtsKFtlZV0pfSh3LFAp'@;
put 'O2Nhc2UgNDpjYXNlIDM6Y2FzZSAyOnJldHVybiBmdW5jdGlvbiBJZWUodyxQKXt2YXIgRD1QfHx7fTtudWxsIT1uZSYmbnVsbD09RC5kZW5zZSYmKEQuZGVuc2U9bmUpO2Zvcih2YXIgZWU9QXUoKSxvZT0wLGdlPTA7Z2U8dy5TaGVldE5hbWVzLmxlbmd0aDsrK2dlKXcuU2hlZXROYW1lc1tn'@;
put 'ZV09PUQuc2hlZXQmJihvZT1nZSk7aWYoMD09b2UmJkQuc2hlZXQmJncuU2hlZXROYW1lc1swXSE9RC5zaGVldCl0aHJvdyBuZXcgRXJyb3IoIlNoZWV0IG5vdCBmb3VuZDogIitELnNoZWV0KTtyZXR1cm4gU2koZWUsND09RC5iaWZmPzEwMzM6Mz09RC5iaWZmPzUyMTo5LHhtKDAsMTYsRCkp'@;
put 'LGZ1bmN0aW9uIERlZSh3LFAsRCxlZSl7dmFyIF9lLG9lPUFycmF5LmlzQXJyYXkoUCksZ2U9UGkoUFsiIXJlZiJdfHwiQTEiKSx2ZT0iIixNZT1bXTtpZihnZS5lLmM+MjU1fHxnZS5lLnI+MTYzODMpe2lmKGVlLldURil0aHJvdyBuZXcgRXJyb3IoIlJhbmdlICIrKFBbIiFyZWYiXXx8IkEx'@;
put 'IikrIiBleGNlZWRzIGZvcm1hdCBsaW1pdCBBMTpJVjE2Mzg0Iik7Z2UuZS5jPU1hdGgubWluKGdlLmUuYywyNTUpLGdlLmUucj1NYXRoLm1pbihnZS5lLmMsMTYzODMpLF9lPVZvKGdlKX1mb3IodmFyIGplPWdlLnMucjtqZTw9Z2UuZS5yOysramUpe3ZlPVZhKGplKTtmb3IodmFyIFVlPWdl'@;
put 'LnMuYztVZTw9Z2UuZS5jOysrVWUpe2plPT09Z2Uucy5yJiYoTWVbVWVdPUJhKFVlKSksX2U9TWVbVWVdK3ZlO3ZhciBYZT1vZT8oUFtqZV18fFtdKVtVZV06UFtfZV07WGUmJlZ3KHcsWGUsamUsVWUpfX19KGVlLHcuU2hlZXRzW3cuU2hlZXROYW1lc1tvZV1dLDAsRCksU2koZWUsMTApLGVl'@;
put 'LmVuZCgpfSh3LFApfXRocm93IG5ldyBFcnJvcigiaW52YWxpZCB0eXBlICIrRC5ib29rVHlwZSsiIGZvciBCSUZGIil9dmFyIFljPWZ1bmN0aW9uKCl7dmFyIHc9e2NlbnRlckNvbnRpbnVvdXM6ImNlbnRlciIsanVzdGlmeToibGVmdCJ9O2Z1bmN0aW9uIEQoWGUsaXQpe3ZhciBmdD1pdHx8'@;
put 'e307bnVsbCE9bmUmJm51bGw9PWZ0LmRlbnNlJiYoZnQuZGVuc2U9bmUpO3ZhciBNdD1mdC5kZW5zZT9bXTp7fSx1dD0oWGU9WGUucmVwbGFjZSgvPCEtLS4qPy0tPi9nLCIiKSkubWF0Y2goLzx0YWJsZS9pKTtpZighdXQpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIEhUTUw6IGNvdWxkIG5v'@;
put 'dCBmaW5kIDx0YWJsZT4iKTt2YXIgd3Q9WGUubWF0Y2goLzxcL3RhYmxlL2kpLEh0PXV0LmluZGV4LGt0PXd0JiZ3dC5pbmRleHx8WGUubGVuZ3RoLFR0PWZ1bmN0aW9uIHB0KHcsUCxEKXtpZihObnx8InN0cmluZyI9PXR5cGVvZiBQKXJldHVybiB3LnNwbGl0KFApO2Zvcih2YXIgZWU9dy5z'@;
put 'cGxpdChQKSxvZT1bZWVbMF1dLGdlPTE7Z2U8ZWUubGVuZ3RoOysrZ2Upb2UucHVzaChEKSxvZS5wdXNoKGVlW2dlXSk7cmV0dXJuIG9lfShYZS5zbGljZShIdCxrdCksLyg6Pzx0cltePl0qPikvaSwiPHRyPiIpLFl0PS0xLGduPTAscW49MCxmbj0wLEtuPXtzOntyOjFlNyxjOjFlN30sZTp7'@;
put 'cjowLGM6MH19LHpuPVtdO2ZvcihIdD0wO0h0PFR0Lmxlbmd0aDsrK0h0KXt2YXIgT249VHRbSHRdLnRyaW0oKSxlcj1Pbi5zbGljZSgwLDMpLnRvTG93ZXJDYXNlKCk7aWYoIjx0ciIhPWVyKXtpZigiPHRkIj09ZXJ8fCI8dGgiPT1lcil7dmFyIHRyPU9uLnNwbGl0KC88XC90W2RoXT4vaSk7'@;
put 'Zm9yKGt0PTA7a3Q8dHIubGVuZ3RoOysra3Qpe3ZhciBZbj10cltrdF0udHJpbSgpO2lmKFluLm1hdGNoKC88dFtkaF0vaSkpe2Zvcih2YXIganI9WW4sbGk9MDsiPCI9PWpyLmNoYXJBdCgwKSYmKGxpPWpyLmluZGV4T2YoIj4iKSk+LTE7KWpyPWpyLnNsaWNlKGxpKzEpO2Zvcih2YXIgRWk9'@;
put 'MDtFaTx6bi5sZW5ndGg7KytFaSl7dmFyIElpPXpuW0VpXTtJaS5zLmM9PWduJiZJaS5zLnI8WXQmJll0PD1JaS5lLnImJihnbj1JaS5lLmMrMSxFaT0tMSl9dmFyIHRpPWNuKFluLnNsaWNlKDAsWW4uaW5kZXhPZigiPiIpKSk7Zm49dGkuY29sc3Bhbj8rdGkuY29sc3BhbjoxLCgocW49K3Rp'@;
put 'LnJvd3NwYW4pPjF8fGZuPjEpJiZ6bi5wdXNoKHtzOntyOll0LGM6Z259LGU6e3I6WXQrKHFufHwxKS0xLGM6Z24rZm4tMX19KTt2YXIgZnI9dGkudHx8dGlbImRhdGEtdCJdfHwiIjtpZighanIubGVuZ3RoKXtnbis9Zm47Y29udGludWV9aWYoanI9QnUoanIpLEtuLnMucj5ZdCYmKEtuLnMu'@;
put 'cj1ZdCksS24uZS5yPFl0JiYoS24uZS5yPVl0KSxLbi5zLmM+Z24mJihLbi5zLmM9Z24pLEtuLmUuYzxnbiYmKEtuLmUuYz1nbiksanIubGVuZ3RoKXt2YXIgRG49e3Q6InMiLHY6anJ9O2Z0LnJhd3x8IWpyLnRyaW0oKS5sZW5ndGh8fCJzIj09ZnJ8fChEbj0kbihqcixmdCkpLGZ0LmRlbnNl'@;
put 'PyhNdFtZdF18fChNdFtZdF09W10pLE10W1l0XVtnbl09RG4pOk10W3BpKHtyOll0LGM6Z259KV09RG4sZ24rPWZufX19fX1lbHNle2lmKCsrWXQsZnQuc2hlZXRSb3dzJiZmdC5zaGVldFJvd3M8PVl0KXstLVl0O2JyZWFrfWduPTB9fXJldHVybiBNdFsiIXJlZiJdPVZvKEtuKSx6bi5sZW5n'@;
put 'dGgmJihNdFsiIW1lcmdlcyJdPXpuKSxNdH1mdW5jdGlvbiBvZShYZSxpdCxmdCxNdCx1dCx3dCl7dmFyIFR0LEh0PVhlWyIhbWVyZ2VzIl18fFtdLGt0PVtdLFl0PXtzdHlsZTpbXX0sZ249ITE7ZnVuY3Rpb24gcW4oT2ksWG8sZm8pe3ZhciBSbz0iIixUbz0wO2lmKFR0W09pXSlzd2l0Y2go'@;
put 'VHRbT2ldLnN0eWxlKXtjYXNlInRoaW4iOmNhc2UiaGFpciI6Um89InNvbGlkIixUbz0xO2JyZWFrO2Nhc2UibWVkaXVtIjpSbz0ic29saWQiLFRvPTI7YnJlYWs7Y2FzZSJ0aGljayI6Um89InNvbGlkIixUbz0zO2JyZWFrO2Nhc2UiZG91YmxlIjpSbz0iZG91YmxlIixUbz0zO2JyZWFrO2Nh'@;
put 'c2UiZG90dGVkIjpjYXNlImRhc2hEb3REb3QiOlJvPSJkb3R0ZWQiLFRvPTE7YnJlYWs7Y2FzZSJtZWRpdW1EYXNoRG90RG90IjpSbz0iZG90dGVkIixUbz0yO2JyZWFrO2Nhc2UiZGFzaGVkIjpjYXNlImRhc2hEb3QiOmNhc2Uic2xhbnREYXNoRG90IjpSbz0iZGFzaGVkIixUbz0xO2JyZWFr'@;
put 'O2Nhc2UibWVkaXVtRGFzaGVkIjpjYXNlIm1lZGl1bURhc2hEb3QiOlJvPSJkYXNoZWQiLFRvPTJ9ZTppZigwPT1Ubyl7c3dpdGNoKE9pKXtjYXNlInRvcCI6LS1YbzticmVhaztjYXNlImxlZnQiOi0tZm87YnJlYWs7Y2FzZSJib3R0b20iOisrWG87YnJlYWs7Y2FzZSJyaWdodCI6Kytmb312'@;
put 'YXIgbWk9WG8+PTAmJmZvPj0wP010LmRlbnNlPyhYZVtYb118fFtdKVtmb106WGVbcGkoe3I6WG8sYzpmb30pXTpudWxsO2lmKG1pKXtpZihtaS5zJiZtaS5zW3t0b3A6ImJvdHRvbSIsYm90dG9tOiJ0b3AiLGxlZnQ6InJpZ2h0IixyaWdodDoibGVmdCJ9W09pXV0pYnJlYWsgZTttaS5zJiZt'@;
put 'aS5zLmZnQ29sb3ImJihUbz0xKX1UdC5mZ0NvbG9yJiYoVG89MSksIW1pJiZnbiYmMD09VG8mJihUbz0xKX0wIT1UbyYmVG8mJihZdC5zdHlsZS5wdXNoKCJib3JkZXItIitPaSsiLXN0eWxlOiIrKFJvfHwidHJhbnNwYXJlbnQiKSksWXQuc3R5bGUucHVzaCgiYm9yZGVyLSIrT2krIi13aWR0'@;
put 'aDoiK1RvKyJweCIpLCIiPT1Sbz9ZdC5zdHlsZS5wdXNoKCJib3JkZXItIitPaSsiLWNvbG9yOiB0cmFuc3BhcmVudCIpOlR0W09pXS5jb2xvciYmVHRbT2ldLmNvbG9yLnJnYiYmWXQuc3R5bGUucHVzaCgiYm9yZGVyLSIrT2krIi1jb2xvcjojIitVYyhUdFtPaV0uY29sb3IucmdiKSkpfWZv'@;
put 'cih2YXIgZm49aXQucy5jO2ZuPD1pdC5lLmM7Kytmbil7Zm9yKHZhciBLbj0wLHpuPTAsT249MDtPbjxIdC5sZW5ndGg7KytPbilpZighKEh0W09uXS5zLnI+ZnR8fEh0W09uXS5zLmM+Zm58fEh0W09uXS5lLnI8ZnR8fEh0W09uXS5lLmM8Zm4pKXtpZihIdFtPbl0ucy5yPGZ0fHxIdFtPbl0u'@;
put 'cy5jPGZuKXtLbj0tMTticmVha31Lbj1IdFtPbl0uZS5yLUh0W09uXS5zLnIrMSx6bj1IdFtPbl0uZS5jLUh0W09uXS5zLmMrMTticmVha31pZighKEtuPDApKXt2YXIgZXI9cGkoe3I6ZnQsYzpmbn0pLHRyPU10LmRlbnNlPyhYZVtmdF18fFtdKVtmbl06WGVbZXJdO3RyP2duPSExOihnbj0h'@;
put 'MCx0cj17dDoieiIsczp7fX0pO3ZhciBZbj0ieiI9PXRyLnQ/IiI6dHIuaHx8bG8odHIud3x8KG1jKHRyKSx0ci53KXx8IiIpO2lmKFl0PXtzdHlsZTpbXX0sVHQ9dHIucyl7dmFyIGpyPTE7aWYoKCJzdXBlciI9PVR0LnZhbGlnbnx8InN1YiI9PVR0LnZhbGlnbikmJihqcj0uODMsWW49TXIo'@;
put 'InNwYW4iLFluLHtzdHlsZToidmVydGljYWwtYWxpZ246ICIrVHQudmFsaWdufSkpLFl0LnN0eWxlLnB1c2goImZvbnQtd2VpZ2h0OiIrKFR0LmJvbGQ/NzAwOjQwMCkpLFR0Lml0YWxpYyYmWXQuc3R5bGUucHVzaCgiZm9udC1zdHlsZTogaXRhbGljIiksKFR0LnVuZGVybGluZXx8VHQuc3Ry'@;
put 'aWtlKSYmWXQuc3R5bGUucHVzaCgidGV4dC1kZWNvcmF0aW9uOiIrKFR0LnVuZGVybGluZT8iIHVuZGVybGluZSI6IiIpKyhUdC5zdHJpa2U/IiBsaW5lLXRocm91Z2giOiIiKSksVHQuY29sb3ImJlR0LmNvbG9yLnJnYiYmWXQuc3R5bGUucHVzaCgiY29sb3I6ICMiK1VjKFR0LmNvbG9yLnJn'@;
put 'YikpLFR0Lm5hbWUmJll0LnN0eWxlLnB1c2goImZvbnQtZmFtaWx5OiIrVHQubmFtZSsiLCBzYW5zLXNlcmlmIiksVHQuc3omJll0LnN0eWxlLnB1c2goImZvbnQtc2l6ZToiK1R0LnN6KmpyKyJwdCIpLG51bGwhPT1UdC5wYXR0ZXJuVHlwZSYmVHQuZmdDb2xvciYmVHQuZmdDb2xvci5yZ2Im'@;
put 'Jll0LnN0eWxlLnB1c2goImJhY2tncm91bmQtY29sb3I6ICMiK1VjKFR0LmZnQ29sb3IucmdiKSksWyJ0b3AiLCJsZWZ0Il0uZm9yRWFjaChmdW5jdGlvbihPaSl7cW4oT2ksZnQsZm4pfSksS24+MXx8em4+MSl7dmFyIGxpPXBpKHtyOmZ0K0tuLTEsYzpmbit6bi0xfSksRWk9TXQuZGVuc2U/'@;
put 'KFhlW2Z0K0tuLTFdfHxbXSlbZm4rem4tMV06WGVbbGldLHRpPVR0O1R0PUVpJiZFaS5zfHxUdCxbImJvdHRvbSIsInJpZ2h0Il0uZm9yRWFjaChmdW5jdGlvbihPaSl7cW4oT2ksZnQsZm4pfSksVHQ9dGl9ZWxzZVsiYm90dG9tIiwicmlnaHQiXS5mb3JFYWNoKGZ1bmN0aW9uKE9pKXtxbihP'@;
put 'aSxmdCxmbil9KTtpZihUdC5hbGlnbm1lbnQpe2lmKFR0LmFsaWdubWVudC5ob3Jpem9udGFsP1l0LnN0eWxlLnB1c2goInRleHQtYWxpZ246ICIrKHdbVHQuYWxpZ25tZW50Lmhvcml6b250YWxdfHxUdC5hbGlnbm1lbnQuaG9yaXpvbnRhbCkpOiJuIj09dHIudCYmWXQuc3R5bGUucHVzaCgi'@;
put 'dGV4dC1hbGlnbjogcmlnaHQiKSxUdC5hbGlnbm1lbnQudmVydGljYWwpe3ZhciBmcj1UdC5hbGlnbm1lbnQudmVydGljYWw7WXQuc3R5bGUucHVzaCgidmVydGljYWwtYWxpZ246ICIrKCJjZW50ZXIiPT1mcj8ibWlkZGxlIjpmcikpfWlmKFR0LmFsaWdubWVudC53cmFwVGV4dClZdC5zdHls'@;
put 'ZS5wdXNoKCJ3aGl0ZS1zcGFjZTogcHJlLXdyYXAiKTtlbHNle3ZhciBEbj1NdC5kZW5zZT8oWGVbZnRdfHxbXSlbZm4rMV06WGVbcGkoe3I6ZnQsYzpmbisxfSldO0RuJiYieiIhPURuLnQmJll0LnN0eWxlLnB1c2goIndoaXRlLXNwYWNlOiBwcmUtd3JhcCIpfX1lbHNlIm4iPT10ci50JiZZ'@;
put 'dC5zdHlsZS5wdXNoKCJ0ZXh0LWFsaWduOiByaWdodCIpO3ZhciB2cj0oKFhlWyIhY29scyJdfHxbXSlbZm5dfHx7fSkud3B4O251bGw9PXZyJiYodnI9KChYZVsiIXNoZWV0Rm9ybWF0Il18fHt9KS5jb2x8fHt9KS53cHgpfXZhciBycj0wO2lmKHpuPD0xJiZLbjw9MSYmKHJyPSgoWGVbIiFj'@;
put 'b2xzIl18fFtdKVtmbl18fHt9KS53cHgpJiZZdC5zdHlsZS5wdXNoKCJ3aWR0aDogIitycisicHgiKSxYZVsiIWNvbmRmbXQiXSYmZ2UodHIsZnQsZm4sWGVbIiFjb25kZm10Il0sWXQuc3R5bGUsWGUpLDA9PVl0LnN0eWxlLmxlbmd0aD9kZWxldGUgWXQuc3R5bGU6WXQuc3R5bGU9WXQuc3R5'@;
put 'bGUuam9pbigiOyIpLE10LmNzcyl7dmFyIHhuPXV0LmluZGV4T2YoWXQuc3R5bGUpOy0xPT14biYmKHV0LnB1c2goWXQuc3R5bGUpLHhuPXV0Lmxlbmd0aC0xKSxkZWxldGUgWXQuc3R5bGUsWXQuY2xhc3M9InNqcyIrKHd0fHwiIikrIi0iK3hufUtuPjEmJihZdC5yb3dzcGFuPUtuKSx6bj4x'@;
put 'JiYoWXQuY29sc3Bhbj16biksTXQuZWRpdGFibGU/WW49JzxzcGFuIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSI+JytZbisiPC9zcGFuPiI6dHImJihZdFsiZGF0YS10Il09dHImJnRyLnR8fCJ6IixudWxsIT10ci52JiYoWXRbImRhdGEtdiJdPXRyLnYpLG51bGwhPXRyLnomJihZdFsiZGF0YS16'@;
put 'Il09dHIueikpLFl0LmlkPShNdC5pZHx8InNqcyIpKyItIitlcixrdC5wdXNoKE1yKCJ0ZCIsWW4sWXQpKX19dmFyIENpLG1yPXtzdHlsZTpbXX07KENpPVhlWyIhc2hlZXRGb3JtYXQiXSkmJkNpLnJvdyYmKFNwKENpLnJvdyksQ2kucm93LmhweCYmKG1yLnN0eWxlLnB1c2goWyJoZWlnaHQi'@;
put 'LENpLnJvdy5ocHgrInB4Il0pLG1yLmhlaWdodD1NYXRoLnJvdW5kKENpLnJvdy5ocHgpKSk7dmFyIHpyPVhlWyIhcm93cyJdO2lmKHpyJiZ6cltmdF0pe3ZhciB6aT16cltmdF07emkuaHB4JiYobXIuc3R5bGUucHVzaChbImhlaWdodCIsK3ppLmhweCsicHgiXSksbXIuaGVpZ2h0PU1hdGgu'@;
put 'cm91bmQoemkuaHB4KSksemkuaGlkZGVuJiZtci5zdHlsZS5wdXNoKFsiZGlzcGxheSIsIm5vbmUiXSl9dmFyIHdvPVtdO3JldHVybiBtci5zdHlsZT1tci5zdHlsZS5yZXZlcnNlKCkuZmlsdGVyKGZ1bmN0aW9uKE9pKXtyZXR1cm4hKHdvLmluZGV4T2YoT2lbMF0pPi0xfHwod28ucHVzaChP'@;
put 'aVswXSksMCkpfSkubWFwKGZ1bmN0aW9uKE9pKXtyZXR1cm4gT2lbMF0rIjoiK09pWzFdfSksMD09bXIuc3R5bGUubGVuZ3RoP2RlbGV0ZSBtci5zdHlsZTptci5zdHlsZT1tci5zdHlsZS5qb2luKCI7IiksTXIoInRyIixrdC5qb2luKCIiKSxtcil9ZnVuY3Rpb24gZ2UoWGUsaXQsZnQsTXQs'@;
put 'dXQsd3Qpe010LmZvckVhY2goZnVuY3Rpb24oSHQpe2lmKEh0Ll9yZWZ8fChIdC5fcmVmPSJzdHJpbmciPT10eXBlb2YgSHQucmVmP0thKEh0LnJlZik6SHQucmVmKSwhKEh0Ll9yZWYucy5jPmZ0fHxIdC5fcmVmLmUuYzxmdHx8SHQuX3JlZi5zLnI+aXR8fEh0Ll9yZWYuZS5yPGl0fHwic2Nh'@;
put 'bGUiIT09SHQudCkpe2lmKCJuIiE9WGUudClyZXR1cm47dmFyIGt0O2lmKG51bGw9PUh0Ll9taW4pe0h0Ll92YWx1ZXM9W107Zm9yKHZhciBUdD1IdC5fcmVmLnMucjtUdDw9SHQuX3JlZi5lLnI7KytUdClmb3IodmFyIFl0PUh0Ll9yZWYucy5jO1l0PD1IdC5fcmVmLmUuYzsrK1l0KXt2YXIg'@;
put 'Z249QXJyYXkuaXNBcnJheSh3dCk/KHd0W1R0XXx8W10pW1l0XTp3dFtwaSh7cjpUdCxjOll0fSldO2duJiYibiI9PWduLnQmJkh0Ll92YWx1ZXMucHVzaChnbi52KX1pZihIdC5fdmFsdWVzLnNvcnQoZnVuY3Rpb24ocW4sZm4pe3JldHVybiBxbi1mbn0pLEh0Ll9taW49SHQuX3ZhbHVlc1sw'@;
put 'XSxIdC5fbWF4PUh0Ll92YWx1ZXMuc2xpY2UoLTEpWzBdLEh0Ll9iYW5kPUh0Ll9tYXgtSHQuX21pbixIdC5jbWlkKXtzd2l0Y2goSHQuY21pZC50KXtjYXNlIm51bSI6SHQuX21pZD1IdC5jbWlkLnY7YnJlYWs7Y2FzZSJwZXJjZW50IjpIdC5fbWlkPUh0LmNtaWQudi8xMDAqSHQuX2JhbmQr'@;
put 'SHQuX21pbjticmVhaztjYXNlInBlcmNlbnRpbGUiOkh0Ll9taWQ9ZnVuY3Rpb24gcG4odyxQKXtpZigwPT1QKXJldHVybiB3WzBdO2lmKDEwMD09UClyZXR1cm4gd1t3Lmxlbmd0aC0xXTt2YXIgZWU9UC8xMDAqKHcubGVuZ3RoLTEpLG9lPWVlLU1hdGguZmxvb3IoZWUpO3JldHVybiBvZSp3'@;
put 'W01hdGguY2VpbChlZSldKygxLW9lKSp3W01hdGguZmxvb3IoZWUpXX0oSHQuX3ZhbHVlcyxIdC5jbWlkLnYpfUh0Ll9iYW5kaD1IdC5fbWF4LUh0Ll9taWQsSHQuX2JhbmRsPUh0Ll9taWQtSHQuX21pbn19KGt0PUh0LmNtaWQ/WGUudj49SHQuX21pZD9tXyhIdC5jbWlkLmNvbG9yLEh0LmNt'@;
put 'YXguY29sb3IsKFhlLnYtSHQuX21pZCkvSHQuX2JhbmRoKTptXyhIdC5jbWluLmNvbG9yLEh0LmNtaWQuY29sb3IsKFhlLnYtSHQuX21pbikvSHQuX2JhbmRsKTptXyhIdC5jbWluLmNvbG9yLEh0LmNtYXguY29sb3IsKFhlLnYtSHQuX21pbikvSHQuX2JhbmQpKSYmdXQucHVzaCgiYmFja2dy'@;
put 'b3VuZC1jb2xvcjogIyIra3QpfX0pfWZ1bmN0aW9uIF9lKFhlLGl0KXt2YXIgZnQ9e3NwYW46aXR8fDEsc3R5bGU6IiJ9LE10PVtdO3JldHVybiBYZSYmWGUud3B4JiYoZnQud2lkdGg9TWF0aC5yb3VuZCg0KlhlLndweC8zKSxNdC5wdXNoKCJ3aWR0aDoiKyhYZS53cHh8fDApKyJweCIpKSxN'@;
put 'dC5sZW5ndGg+MCYmKGZ0LnN0eWxlPU10LmpvaW4oIjsiKSksTXIoImNvbCIsbnVsbCxmdCl9ZnVuY3Rpb24gdmUoWGUsaXQsZnQpe3ZhciBNdD17Ym9yZGVyOjAsY2VsbHBhZGRpbmc6MCxjZWxsc3BhY2luZzowLHN0eWxlOlsiYm9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlIiwidGFibGUtbGF5'@;
put 'b3V0OmZpeGVkIl0uam9pbigiOyIpfTtmdCYmZnQuaWQmJihNdC5pZD1mdC5pZCk7dmFyIHV0PVhlWyIhY29scyJdLHd0PVhlWyIhc2hlZXRGb3JtYXQiXTtpZihYZSYmdXQpe2Zvcih2YXIgSHQ9MCxUdD1pdC5zLmM7VHQ8PWl0LmUuYzsrK1R0KXt2YXIgWXQ9dXRbVHRdO0h0Kz1ZdCYmWXQu'@;
put 'd3B4P1l0LndweDp3dCYmd3QuY29sJiZ3dC5jb2wud3B4P3d0LmNvbC53cHg6NTN9TXQuc3R5bGUrPSI7d2lkdGg6IitIdCsicHgifXZhciBxbixnbj1bIjx0YWJsZSIrRmwoTXQpKyI+Il07aWYoZ24ucHVzaCgiPHN0eWxlPnRkIHsgcGFkZGluZy10b3A6IDFweDsgcGFkZGluZy1yaWdodDox'@;
put 'cHg7IHBhZGRpbmctbGVmdDoxcHg7IHRleHQtYWxpZ246Z2VuZXJhbDsgdmVydGljYWwtYWxpZ246Ym90dG9tOyBib3JkZXI6MXB4IHNvbGlkOyBib3JkZXItY29sb3I6IisoZnQmJmZ0LmdyaWRjb2xvcj9mdC5ncmlkY29sb3I6aG4oWGVbIiFncmlkbGluZXMiXSk/InRyYW5zcGFyZW50Ijoi'@;
put 'YmxhY2siKSsiOyB3aGl0ZS1zcGFjZTpub3dyYXA7IHRleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9PC9zdHlsZT4iKSxnbi5wdXNoKCc8Y29sZ3JvdXAgc3Bhbj0iJysoaXQuZS5jLWl0LnMuYysxKSsnIj4nKSx1dCl7Zm9yKHZhciBmbj1pdC5zLmM7Zm48TWF0aC5taW4odXQubGVuZ3RoLGl0LmUu'@;
put 'YysxKTsrK2ZuKSEocW49dXRbZm5dKSYmd3QmJnd0LmNvbCYmKHFuPXd0LmNvbCkscW58fChxbj17d3B4OjUzfSksZ24ucHVzaChfZShxbiwxKSk7aXQuZS5jLWl0LnMuYysxPnV0Lmxlbmd0aCYmKHFuPW51bGwsd3QmJnd0LmNvbCYmKHFuPXd0LmNvbCkscW58fChxbj17d3B4OjUzfSksZ24u'@;
put 'cHVzaChfZShxbixpdC5lLmMtaXQucy5jKzEtdXQubGVuZ3RoKSkpfWVsc2UgcW49bnVsbCx3dCYmd3QuY29sJiYocW49d3QuY29sKSxxbnx8KHFuPXt3cHg6NTN9KSxnbi5wdXNoKF9lKHFuLGl0LmUuYy1pdC5zLmMrMSkpO3JldHVybiBnbi5wdXNoKCI8L2NvbGdyb3VwPiIpLGduLmpvaW4o'@;
put 'IiIpfXZhciBNZT0nPGh0bWw+PGhlYWQ+PG1ldGEgY2hhcnNldD0idXRmLTgiLz48dGl0bGU+U2hlZXRKUyBUYWJsZSBFeHBvcnQ8L3RpdGxlPjwvaGVhZD48Ym9keT4nLGplPSI8L2JvZHk+PC9odG1sPiI7cmV0dXJue3RvX3dvcmtib29rOmZ1bmN0aW9uIGVlKFhlLGl0KXtyZXR1cm4gWmYo'@;
put 'RChYZSxpdCksaXQpfSx0b19zaGVldDpELF9yb3c6b2UsQkVHSU46TWUsRU5EOmplLF9wcmVhbWJsZTp2ZSxodG1sX3RvX3JzOmZ1bmN0aW9uIFAoWGUpe3ZhciBpdD1bXSxmdD17fSxNdD0wO3JldHVybiBYZS5yZXBsYWNlKC88KFwvPykoW15ccz8+IVwvOl0qOnwpKFteXHM/PjpcL10rKVte'@;
put 'Pl0qPi9nbSxmdW5jdGlvbih1dCx3dCxIdCxrdCxUdCl7dmFyIGduPWpuKGNuKHV0KVswXSkucmVwbGFjZSgvWzxcLz5dL2csIiIpLHFuPVhlLnNsaWNlKE10LFR0KS5yZXBsYWNlKC9ccy9nLCIgIik7c3dpdGNoKHFuLmxlbmd0aD4wJiYoaXQucHVzaCh7dDoicyIsdjpxbixzOmZ0fSksZnQ9'@;
put 'SnQoZnQpKSxnbi50b0xvd2VyQ2FzZSgpKXtjYXNlImIiOiIvIiE9d3Q/ZnQuYm9sZD0hMDpkZWxldGUgZnQuYm9sZDticmVhaztjYXNlImkiOiIvIiE9d3Q/ZnQuaXRhbGljPSEwOmRlbGV0ZSBmdC5pdGFsaWM7YnJlYWs7Y2FzZSJ1IjoiLyIhPXd0P2Z0LnVuZGVybGluZT0xOmRlbGV0ZSBm'@;
put 'dC51bmRlcmxpbmU7YnJlYWs7Y2FzZSJzIjoiLyIhPXd0P2Z0LnN0cmlrZT0hMDpkZWxldGUgZnQuc3RyaWtlfXJldHVybiBNdD1UdCt1dC5sZW5ndGgsdXR9KSxpdH0sZnJvbV9zaGVldDpmdW5jdGlvbiBVZShYZSxpdCl7dmFyIGZ0PWl0fHx7fSx1dD1udWxsIT1mdC5mb290ZXI/ZnQuZm9v'@;
put 'dGVyOmplLHd0PVtudWxsIT1mdC5oZWFkZXI/ZnQuaGVhZGVyOk1lLCIiXSxIdD1bXSxrdD0obmV3IERhdGUpLnZhbHVlT2YoKTtYZXx8KFhlPXt9KSxYZVsiIXJlZiJdfHwoWGVbIiFyZWYiXT0iQTE6QTEiKTt2YXIgVHQ9S2EoWGVbIiFyZWYiXSk7aWYoZnQuZGVuc2U9QXJyYXkuaXNBcnJh'@;
put 'eShYZSksZnQuc2tpcGVuZCl7dmFyIFl0PVR0LmUucjtlOmZvcig7WXQ+PVR0LnMucjstLVl0KWZvcih2YXIgZ249VHQuZS5jO2duPj1UdC5zLmM7LS1nbilpZihudWxsIT0oKGZ0LmRlbnNlPyhYZVtZdF18fFtdKVtnbl06WGVbcGkoe3I6WXQsYzpnbn0pXSl8fHt9KS52KWJyZWFrIGU7VHQu'@;
put 'ZS5yPVl0O3ZhciBxbj1UdC5lLmM7ZTpmb3IoO3FuPj1UdC5zLmM7LS1xbilmb3IodmFyIGZuPVR0LmUucjtmbj49VHQucy5yOy0tZm4paWYobnVsbCE9KChmdC5kZW5zZT8oWGVbZm5dfHxbXSlbcW5dOlhlW3BpKHtyOmZuLGM6cW59KV0pfHx7fSkudilicmVhayBlO1R0LmUuYz1xbn13dC5w'@;
put 'dXNoKHZlKFhlLFR0LGZ0KSk7Zm9yKHZhciBLbj1UdC5zLnI7S248PVR0LmUucjsrK0tuKXd0LnB1c2gob2UoWGUsVHQsS24sZnQsSHQsa3QpKTtyZXR1cm4gd3QucHVzaCgiPC90YWJsZT4iK3V0KSxmdC5jc3MmJih3dFsxXT0iPHN0eWxlPlxuIitIdC5tYXAoZnVuY3Rpb24oem4sT24pe3Jl'@;
put 'dHVybiIuc2pzIitrdCsiLSIrT24rIiB7Iit6bisifSJ9KS5qb2luKCJcbiIpKyI8L3N0eWxlPiIpLHd0LmpvaW4oIiIpfX19KCk7ZnVuY3Rpb24gTjIodyxQLEQpe3ZhciBlZT17fTtpZih0eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZT4idSIpcmV0dXJuIGVlO3ZhciBvZT1nZXRDb21wdXRlZFN0'@;
put 'eWxlKHcpO2lmKCg3MDA9PW9lWyJmb250LXdlaWdodCJdfHwiYm9sZCI9PW9lWyJmb250LXdlaWdodCJdKSYmKGVlLmJvbGQ9ITApLChvZVsiZm9udC1zdHlsZSJdfHwiIikubWF0Y2goL2l0YWxpYy8pJiYoZWUuaXRhbGljPSEwKSwob2VbInRleHQtZGVjb3JhdGlvbiJdfHwiIikubWF0Y2go'@;
put 'L3VuZGVybGluZS8pJiYoZWUudW5kZXJsaW5lPTEpLChvZVsidGV4dC1kZWNvcmF0aW9uIl18fCIiKS5tYXRjaCgvbGluZS10aHJvdWdoLykmJihlZS5zdHJpa2U9MSkscGFyc2VJbnQob2VbImZvbnQtc2l6ZSJdKSYmKGVlLnN6PXBhcnNlRmxvYXQob2VbImZvbnQtc2l6ZSJdKSoob2VbImZv'@;
put 'bnQtc2l6ZSJdLm1hdGNoKC9weC8pPzMvNDoxKSksb2VbImZvbnQtZmFtaWx5Il0mJihlZS5uYW1lPW9lWyJmb250LWZhbWlseSJdLnNwbGl0KCIsIilbMF0ucmVwbGFjZSgvXHMqIlxzKi9nLCIiKSksb2UuY29sb3Ipe3ZhciBnZT1QbShvZS5jb2xvci50b0xvd2VyQ2FzZSgpLCEwKTtnZT49'@;
put 'MCYmKGVlLmNvbG9yPXtyZ2I6Z2V9KX1zd2l0Y2gob2VbInRleHQtdHJhbnNmb3JtIl0mJihlZS50ZXh0X3RyYW5zZm9ybT1vZVsidGV4dC10cmFuc2Zvcm0iXS50b0xvd2VyQ2FzZSgpKSwibm9uZSIhPShvZVsidGV4dC1zaGFkb3ciXXx8Im5vbmUiKSYmKGVlLnNoYWRvdz0hMCksb2VbInRl'@;
put 'eHQtYWxpZ24iXSl7Y2FzZSJjZW50ZXIiOmVlLmFsaWdubWVudD17aG9yaXpvbnRhbDoiY2VudGVyIn07YnJlYWs7Y2FzZSJyaWdodCI6ZWUuYWxpZ25tZW50PXtob3Jpem9udGFsOiJyaWdodCJ9O2JyZWFrO2Nhc2UibGVmdCI6ZWUuYWxpZ25tZW50PXtob3Jpem9udGFsOiJsZWZ0In07YnJl'@;
put 'YWs7Y2FzZSJqdXN0aWZ5IjplZS5hbGlnbm1lbnQ9e2hvcml6b250YWw6Imp1c3RpZnkifX1zd2l0Y2gob2VbInZlcnRpY2FsLWFsaWduIl0pe2Nhc2UidG9wIjpjYXNlIm1pZGRsZSI6Y2FzZSJib3R0b20iOmVlLmFsaWdubWVudHx8KGVlLmFsaWdubWVudD17fSksZWUuYWxpZ25tZW50LnZl'@;
put 'cnRpY2FsPW9lWyJ2ZXJ0aWNhbC1hbGlnbiJdLCJtaWRkbGUiPT1lZS5hbGlnbm1lbnQudmVydGljYWwmJihlZS5hbGlnbm1lbnQudmVydGljYWw9ImNlbnRlciIpO2JyZWFrO2Nhc2Uic3ViIjpjYXNlInN1cGVyIjplZS52YWxpZ249b2VbInZlcnRpY2FsLWFsaWduIl0sZWUuc3omJihlZS5z'@;
put 'ei89LjgzKX12YXIgX2U9UCYmZ2V0Q29tcHV0ZWRTdHlsZShQKTtyZXR1cm4gX2UmJkQmJlAmJlsibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIl0uZm9yRWFjaChmdW5jdGlvbih2ZSl7dmFyIE1lPXZlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3ZlLnNsaWNlKDEpLGplPV9lWyJib3Jk'@;
put 'ZXItIit2ZSsiLXN0eWxlIl07aWYoKCJub25lIj09amV8fCFqZSkmJihqZT1fZVsiYm9yZGVyIitNZSsiU3R5bGUiXSksIm5vbmUiIT1qZSYmamUpe3ZhciBVZT1wYXJzZUludChfZVsiYm9yZGVyLSIrdmUrIi13aWR0aCJdfHxfZVsiYm9yZGVyIitNZSsiV2lkdGgiXSwxMCksWGU9InRoaW4i'@;
put 'O2lmKFVlPjApe3N3aXRjaChqZSl7Y2FzZSJkb3VibGUiOlhlPSJkb3VibGUiO2JyZWFrO2Nhc2UiZGFzaGVkIjpYZT1VZT49Mj8ibWVkaXVtRGFzaGVkIjoiZGFzaGVkIjticmVhaztjYXNlImRvdHRlZCI6WGU9VWU+PTI/Im1lZGl1bURhc2hEb3REb3QiOiJkb3R0ZWQiO2JyZWFrO2Nhc2Ui'@;
put 'c29saWQiOlhlPVVlPj0zPyJ0aGljayI6VWU+PTI/Im1lZGl1bSI6InRoaW4ifWlmKGVlW3ZlXT17c3R5bGU6WGV9LF9lWyJib3JkZXItIit2ZSsiLWNvbG9yIl18fF9lWyJib3JkZXIiK01lKyJDb2xvciJdKXt2YXIgaXQ9UG0oKF9lWyJib3JkZXItIit2ZSsiLWNvbG9yIl18fF9lWyJib3Jk'@;
put 'ZXIiK01lKyJDb2xvciJdKS50b0xvd2VyQ2FzZSgpLCEwKTtpdD49MCYmKGVlW3ZlXS5jb2xvcj17cmdiOml0fSl9fX19KSxlZX1mdW5jdGlvbiBqdyh3LFAsRCl7dmFyIGVlPXcuY2hpbGROb2RlcztpZigxPT13Lm5vZGVUeXBlKXN3aXRjaCh3LnRhZ05hbWUudG9Mb3dlckNhc2UoKSl7Y2Fz'@;
put 'ZSJwIjpQLmxlbmd0aD4wJiZQLnB1c2goe3Q6InQiLHY6IlxuIixzOkR9KTticmVhaztjYXNlInNlbGVjdCI6cmV0dXJuIGZ1bmN0aW9uIFhWKHcsUCxEKXtQLnB1c2goe3Q6InQiLHY6dy5jaGlsZHJlblt3LnNlbGVjdGVkSW5kZXhdLmlubmVyVGV4dCxzOkR9KX0odyxQLEQpfWlmKGVlLmxl'@;
put 'bmd0aD4wKXt2YXIgb2U9TjIodyxudWxsLCExKTtEJiYoRC51bmRlcmxpbmUmJihvZS51bmRlcmxpbmU9RC51bmRlcmxpbmUpLEQuc3RyaWtlJiYob2Uuc3RyaWtlPUQuc3RyaWtlKSk7Zm9yKHZhciBnZT0wO2dlPGVlLmxlbmd0aDsrK2dlKXt0cnl7aWYoZWVbZ2VdLmdldEF0dHJpYnV0ZSgi'@;
put 'YXJpYS1oaWRkZW4iKSljb250aW51ZX1jYXRjaHt9ancoZWVbZ2VdLFAsb2UpfWRlbGV0ZSBvZS50ZXh0X3RyYW5zZm9ybX1lbHNlIGlmKDM9PXcubm9kZVR5cGUpe3ZhciBfZT17dDoidCIsdjp3Lm5vZGVWYWx1ZS5yZXBsYWNlKC9eW1xuIF0rLywiICIpLnJlcGxhY2UoL1tcbiBdKyQvLCIg'@;
put 'IiksczpEfTtzd2l0Y2goRC50ZXh0X3RyYW5zZm9ybSl7Y2FzZSJ1cHBlcmNhc2UiOl9lLnY9X2Uudi50b1VwcGVyQ2FzZSgpO2JyZWFrO2Nhc2UibG93ZXJjYXNlIjpfZS52PV9lLnYudG9Mb3dlckNhc2UoKX0oUC5sZW5ndGg+MHx8X2UudiYmIiAiIT1fZS52KSYmUC5wdXNoKF9lKX1lbHNl'@;
put 'IDE9PXcubm9kZVR5cGUmJiJiciI9PT13LnRhZ05hbWUudG9Mb3dlckNhc2UoKSYmUC5wdXNoKHt0OiJ0Iix2OiJcbiIsczpEfSl9ZnVuY3Rpb24gencodyxQLEQsZWUsb2Upe3ZhciBfZSxnZT13LmlubmVySFRNTDtpZih0eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZTwidSIpc3dpdGNoKF9lPWdl'@;
put 'dENvbXB1dGVkU3R5bGUodyksKF9lWyJ3aGl0ZS1zcGFjZSJdfHwiIikubWF0Y2goL3ByZS8pJiYoZ2U9Z2UucmVwbGFjZSgvXG4vZywiPGJyLz4iKSksKF9lWyJ0ZXh0LXRyYW5zZm9ybSJdfHwiIikudG9Mb3dlckNhc2UoKSl7Y2FzZSJ1cHBlcmNhc2UiOmdlPWdlLnRvVXBwZXJDYXNlKCk7'@;
put 'YnJlYWs7Y2FzZSJsb3dlcmNhc2UiOmdlPWdlLnRvTG93ZXJDYXNlKCl9dmFyIHZlPWZ1bmN0aW9uIHFWKHcsUCxELGVlKXt2YXIgb2U9e3Q6InMiLHY6UH0sZ2U9IiI7aWYodyl7RD13LmdldEF0dHJpYnV0ZSgiZGF0YS10Iil8fHcuZ2V0QXR0cmlidXRlKCJ0Iik7dmFyIF9lPXcuZ2V0QXR0'@;
put 'cmlidXRlKCJkYXRhLXYiKXx8dy5nZXRBdHRyaWJ1dGUoInYiKTtpZihudWxsIT0oZ2U9dy5nZXRBdHRyaWJ1dGUoImRhdGEteiIpfHx3LmdldEF0dHJpYnV0ZSgieiIpKSYmKG9lLno9Z2UpLG51bGwhPUQmJm51bGwhPV9lKXJldHVybiBvZS50PUQsb2Uudj1fZSxvZX1yZXR1cm4gbnVsbCE9'@;
put 'UCYmKDA9PVAubGVuZ3RoP29lLnQ9RHx8InoiOmVlLnJhd3x8IVAudHJpbSgpLmxlbmd0aHx8InMiPT1EfHwob2U9JG4oUCxlZSkpKSxnZSYmKG9lLno9Z2UpLG9lfSh3LEJ1KGdlKSxELG9lKTtpZih0eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZTwidSImJih2ZS5zPU4yKHcsUCxvZS5ib3JkZXJz'@;
put 'KSxkZWxldGUgdmUucy50ZXh0X3RyYW5zZm9ybSx3LmNoaWxkTm9kZXMubGVuZ3RoPjF8fDE9PXcuY2hpbGROb2Rlcy5sZW5ndGgmJjMhPXcuY2hpbGROb2Rlc1swXS5ub2RlVHlwZSkpc3dpdGNoKGp3KHcsdmUuUj1bXSxudWxsKSx2ZS5SJiZ2ZS5SW3ZlLlIubGVuZ3RoLTFdJiYiXG4iPT12'@;
put 'ZS5SW3ZlLlIubGVuZ3RoLTFdLnYmJnZlLlIubGVuZ3RoLS0sKF9lWyJ0ZXh0LXRyYW5zZm9ybSJdfHwiIikudG9Mb3dlckNhc2UoKSl7Y2FzZSJ1cHBlcmNhc2UiOnZlLlIuZm9yRWFjaChmdW5jdGlvbihpdCl7aXQudj1pdC52LnRvVXBwZXJDYXNlKCl9KTticmVhaztjYXNlImxvd2VyY2Fz'@;
put 'ZSI6dmUuUi5mb3JFYWNoKGZ1bmN0aW9uKGl0KXtpdC52PWl0LnYudG9Mb3dlckNhc2UoKX0pfWlmKCJzIj09dmUudCl7dmFyIE1lPXZlLnYubWF0Y2goL1xuLyk7IU1lJiZ2ZS5SJiZ2ZS5SLmZvckVhY2goZnVuY3Rpb24oaXQpeyJzdHJpbmciPT10eXBlb2YgaXQudiYmaXQudi5tYXRjaCgv'@;
put 'XG4vKSYmKE1lPSEwKX0pLCJzIj09dmUudCYmTWUmJih2ZS5zfHwodmUucz17fSksdmUucy5hbGlnbm1lbnR8fCh2ZS5zLmFsaWdubWVudD17fSksdmUucy5hbGlnbm1lbnQud3JhcFRleHQ9ITApfWlmKFApe3ZhciBqZT0iIixVZT1QLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJBIik7aWYoVWUm'@;
put 'JlVlLmxlbmd0aClmb3IodmFyIFhlPTA7WGU8VWUubGVuZ3RoJiYoIVVlW1hlXS5oYXNBdHRyaWJ1dGUoImhyZWYiKXx8IiMiPT0oamU9VWVbWGVdLmdldEF0dHJpYnV0ZSgiaHJlZiIpKS5jaGFyQXQoMCkpOysrWGUpO2plJiYiIyIhPWplLmNoYXJBdCgwKSYmKHZlLmw9e1RhcmdldDpqZX0p'@;
put 'fXJldHVybiB2ZX1mdW5jdGlvbiBhTyh3LFAsRCl7dmFyIG9lLGVlPVAucm93cztpZighZWUpe2lmKEQmJm51bGwhPUQub3JpZ2luKXRocm93IlVuc3VwcG9ydGVkIG9yaWdpbiB3aGVuICIrUC50YWdOYW1lKyIgaXMgbm90IGEgVEFCTEUiO3JldHVybiBmdW5jdGlvbiBvTyh3LFAsRCl7RD1K'@;
put 'U09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KER8fHt9KSk7dmFyIGdlPXtzOntyOjAsYzowfSxlOntyOjAsYzowfX07d1siIW1lcmdlcyJdfHwod1siIW1lcmdlcyJdPVtdKTtmb3IodmFyIHZlLF9lPVAuY2hpbGRyZW4sTWU9MCxqZT0wO2plPF9lLmxlbmd0aDsrK2plKXt2YXIgaXQsVWU9X2Vb'@;
put 'amVdLFhlPSIiO3RyeXt0eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZTwidSI/aXQ9Z2V0Q29tcHV0ZWRTdHlsZTpVZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3JiYiZnVuY3Rpb24iPT10eXBlb2YgVWUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlJiYoaXQ9VWUu'@;
put 'b3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKX1jYXRjaHt9aWYoIWl0fHwibm9uZSIhPWl0KFVlKS5kaXNwbGF5KXN3aXRjaChVZS50YWdOYW1lLnRvVXBwZXJDYXNlKCkpe2Nhc2UiVEFCTEUiOk1lPS0xLHdbIiFyZWYiXSYmKEQub3JpZ2luPS0xKSxhTyh3LFVl'@;
put 'LEQpO2JyZWFrO2Nhc2UiQlIiOmNhc2UiSFIiOk1lPS0xLHdbIiFyZWYiXT8oKysoZ2U9S2Eod1siIXJlZiJdKSkuZS5yLHdbIiFyZWYiXT1WbyhnZSkpOndbIiFyZWYiXT0iQTE6QTEiO2JyZWFrO2Nhc2UiRElWIjpjYXNlIlAiOmNhc2UiSDEiOmNhc2UiSDIiOmNhc2UiSDMiOmNhc2UiSDQi'@;
put 'OmNhc2UiSDUiOmNhc2UiSDYiOk1lPS0xLHZlPXp3KFVlLG51bGwsIiIsMCxEKSx3WyIhcmVmIl0/KEQub3JpZ2luPS0xLHYwKHcsW1t2ZV1dLEQpKTood1siIXJlZiJdPSJBMSIsQXJyYXkuaXNBcnJheSh3KT8od1swXXx8KHdbMF09W10pLHdbMF1bMF09dmUpOncuQTE9dmUpLHdbIiFyb3dz'@;
put 'Il18fCh3WyIhcm93cyJdPVtdKSxpdCYmKGdlPUthKHdbIiFyZWYiXSksKFhlPWl0KFVlKS5oZWlnaHQpJiYiYXV0byIhPVhlJiYod1siIXJvd3MiXVtnZS5lLnJdPXtocHQ6cGFyc2VJbnQoWGUsMTApfSkpO2JyZWFrO2Nhc2UiU1BBTiI6Y2FzZSJBIjpjYXNlIkIiOmNhc2UiRU0iOmNhc2Ui'@;
put 'SSI6Y2FzZSJGT05UIjpjYXNlIlMiOmNhc2UiU1VCIjpjYXNlIlNVUCI6Y2FzZSJVIjp2ZT16dyhVZSxudWxsLCIiLDAsRCksd1siIXJlZiJdfHwod1siIXJlZiJdPSJBMTpBMSIpLHYwKHcsW1t2ZV1dLHtvcmlnaW46cGkoe3I6KE1lPDA/MTowKSsoZ2U9S2Eod1siIXJlZiJdKSkuZS5yLGM6'@;
put 'KytNZX0pfSk7YnJlYWs7Y2FzZSJETCI6Y2FzZSJVTCI6Y2FzZSJPTCI6TWU9LTEsY29uc29sZS5lcnJvcigiSFRNTCBDb252ZXJzaW9uIGRvZXMgbm90IHN1cHBvcnQgbGlzdCBlbGVtZW50ICIrVWUudGFnTmFtZS50b1VwcGVyQ2FzZSgpKTticmVhaztkZWZhdWx0Ok1lPS0xLGNvbnNvbGUu'@;
put 'ZXJyb3IoIlNraXBwaW5nICIrVWUudGFnTmFtZS50b1VwcGVyQ2FzZSgpKX19cmV0dXJuIHd9KHcsUCxEKX10cnl7dHlwZW9mIGdldENvbXB1dGVkU3R5bGU8InUiP29lPWdldENvbXB1dGVkU3R5bGU6UC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3JiYiZnVuY3Rpb24iPT10eXBlb2YgUC5v'@;
put 'd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUmJihvZT1QLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSl9Y2F0Y2h7fXZhciBnZT1EfHx7fTtudWxsIT1uZSYmKGdlLmRlbnNlPW5lKTt2YXIgX2U9MCx2ZT0wO2lmKG51bGwhPWdlLm9y'@;
put 'aWdpbilpZigibnVtYmVyIj09dHlwZW9mIGdlLm9yaWdpbilfZT1nZS5vcmlnaW47ZWxzZXt2YXIgTWU9InN0cmluZyI9PXR5cGVvZiBnZS5vcmlnaW4/Y2EoZ2Uub3JpZ2luKTpnZS5vcmlnaW47X2U9TWUucix2ZT1NZS5jfXZhciBqZT1NYXRoLm1pbihnZS5zaGVldFJvd3N8fDFlNyxlZS5s'@;
put 'ZW5ndGgpLFVlPXtzOntyOjAsYzowfSxlOntyOl9lLGM6dmV9fTtpZih3WyIhcmVmIl0pe3ZhciBYZT1LYSh3WyIhcmVmIl0pO1VlLnMucj1NYXRoLm1pbihVZS5zLnIsWGUucy5yKSxVZS5zLmM9TWF0aC5taW4oVWUucy5jLFhlLnMuYyksVWUuZS5yPU1hdGgubWF4KFVlLmUucixYZS5lLnIp'@;
put 'LFVlLmUuYz1NYXRoLm1heChVZS5lLmMsWGUuZS5jKSwtMT09X2UmJihVZS5lLnI9X2U9WGUuZS5yKzEpfXZhciBpdD1bXSxmdD0wLE10PXdbIiFyb3dzIl18fCh3WyIhcm93cyJdPVtdKSx1dD0wLHd0PTAsSHQ9MCxrdD0wLFR0PTAsWXQ9MDtmb3Iod1siIWNvbHMiXXx8KHdbIiFjb2xzIl09'@;
put 'W10pO3V0PGVlLmxlbmd0aCYmd3Q8amU7Kyt1dCl7Zm9yKHZhciBnbj1lZVt1dF0scW49Z24ucGFyZW50RWxlbWVudDsiVEFCTEUiIT1xbi50YWdOYW1lLnRvVXBwZXJDYXNlKCk7KXFuPXFuLnBhcmVudEVsZW1lbnQ7aWYocW49PVApe2U6aWYodHlwZW9mIG9lPCJ1Iil7dmFyIGZuPW9lKGdu'@;
put 'KTtpZihudWxsPT1mbilicmVhayBlO2lmKGZuLnN0eWxlfHwoZm4uc3R5bGU9e30pLGdlLmRpc3BsYXkmJiJub25lIj09KGZuLmRpc3BsYXl8fGZuLnN0eWxlLmRpc3BsYXkpKWNvbnRpbnVlOyJub25lIj09KGZuLmRpc3BsYXl8fGZuLnN0eWxlLmRpc3BsYXkpJiYoKE10W3d0XXx8KE10W3d0'@;
put 'XT17fSkpLmhpZGRlbj0hMCl9dmFyIEtuPWduLmNlbGxzO2ZvcihIdD1rdD0wO0h0PEtuLmxlbmd0aDsrK0h0KXt2YXIgem49S25bSHRdLE9uPW51bGw7aWYoISh0eXBlb2Ygb2U8InUiJiYobnVsbD09T24mJihPbj1vZSh6bikpLE9uLnN0eWxlfHwoT24uc3R5bGU9e30pLGdlLmRpc3BsYXkm'@;
put 'Jm51bGwhPU9uJiYibm9uZSI9PShPbi5kaXNwbGF5fHxPbi5zdHlsZS5kaXNwbGF5KSkpKXtmb3IoWXQ9K3puLmdldEF0dHJpYnV0ZSgiY29sc3BhbiIpfHwxLGZ0PTA7ZnQ8aXQubGVuZ3RoOysrZnQpe3ZhciBlcj1pdFtmdF07ZXIucy5jPT1rdCt2ZSYmZXIucy5yPHd0K19lJiZ3dCtfZTw9'@;
put 'ZXIuZS5yJiYoa3Q9ZXIuZS5jKzEtdmUsZnQ9LTEpfSgoVHQ9K3puLmdldEF0dHJpYnV0ZSgicm93c3BhbiIpfHwxKT4xfHxZdD4xKSYmaXQucHVzaCh7czp7cjp3dCtfZSxjOmt0K3ZlfSxlOntyOnd0K19lKyhUdHx8MSktMSxjOmt0K3ZlKyhZdHx8MSktMX19KTt2YXIgdHI9em4uZ2V0QXR0'@;
put 'cmlidXRlKCJ0Iil8fCIiLFluPXpuLmdldEF0dHJpYnV0ZSgiYmdjb2xvciIpO2U6aWYodHlwZW9mIG9lPCJ1Iil7aWYobnVsbD09T24mJihPbj1vZSh6bikpLG51bGw9PU9uKWJyZWFrIGU7aWYoT24uc3R5bGV8fChPbi5zdHlsZT17fSksMT09WXQmJk9uLndpZHRoJiYod1siIWNvbHMiXVtr'@;
put 'dCt2ZV09d1siIWNvbHMiXVtrdCt2ZV18fHt9LE9uLndpZHRoLm1hdGNoKC9weC8pP3dbIiFjb2xzIl1ba3QrdmVdLndweD1NYXRoLm1heChwYXJzZUludChPbi53aWR0aCwxMCkrNSx3WyIhY29scyJdW2t0K3ZlXS53cHh8fDApOk9uLndpZHRoLm1hdGNoKC9wdC8pJiYod1siIWNvbHMiXVtr'@;
put 'dCt2ZV0ud3B4PU1hdGgubWF4KDQqcGFyc2VJbnQoT24ud2lkdGgsMTApLzMrNSx3WyIhY29scyJdW2t0K3ZlXS53cHh8fDApKSksVHQ8PTEpe010W3d0K19lXXx8KE10W3d0K19lXT17fSk7dmFyIGpyPU9uLmhlaWdodDsoanI9anIubWF0Y2goL3B0Lyk/ZGYocGFyc2VJbnQoanIsMTApKTpw'@;
put 'YXJzZUludChqciwxMCkpPihNdFt3dCtfZV0uaHB4fHxkZihNdFt3dCtfZV0uaHB0KXx8MCkmJihkZWxldGUgTXRbd3QrX2VdLmhwdCxNdFt3dCtfZV0uaHB4PWpyKX19dmFyIGxpPXpuO2lmKHpuLmZpcnN0RWxlbWVudENoaWxkJiYxPT16bi5jaGlsZHJlbi5sZW5ndGgmJiJzcGFuIj09em4u'@;
put 'Zmlyc3RFbGVtZW50Q2hpbGQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSl7Zm9yKHZhciBFaT0wLElpPXpuLmNoaWxkTm9kZXMsdGk9MDt0aTxJaS5sZW5ndGg7Kyt0aSkzPT1JaVt0aV0ubm9kZVR5cGUmJisrRWk7MD09RWkmJih6bj16bi5maXJzdEVsZW1lbnRDaGlsZCl9dmFyIGZyPXp3KHpu'@;
put 'LGxpLHRyLDAsZ2UpO2lmKE9uKXt2YXIgRG49b2Uoem4pO2lmKERuJiYhRG4uc3R5bGUmJihEbi5zdHlsZT17fSksKERuJiZEblsiYmFja2dyb3VuZC1jb2xvciJdfHxPblsiYmFja2dyb3VuZC1jb2xvciJdKSYmKGZyLnN8fChmci5zPXt9KSwhZnIucy5mZ0NvbG9yKSl0cnl7dmFyIHZyPURu'@;
put 'JiZEblsiYmFja2dyb3VuZC1jb2xvciJdfHxPblsiYmFja2dyb3VuZC1jb2xvciJdO3ZyLm1hdGNoKC9yZ2JhWyhdXHMqMC4qWyldL2kpJiYodnI9T25bImJhY2tncm91bmQtY29sb3IiXSk7dmFyIHJyPVBtKHZyLnRvTG93ZXJDYXNlKCksITApO3JyPj0wJiYoZnIucy5mZ0NvbG9yPXtyZ2I6'@;
put 'cnJ9KX1jYXRjaHt9c3dpdGNoKE9uWyJ2ZXJ0aWNhbC1hbGlnbiJdKXtjYXNlIm1pZGRsZSI6Y2FzZSJiYXNlbGluZSI6ZnIuc3x8KGZyLnM9e30pLGZyLnMuYWxpZ25tZW50fHwoZnIucy5hbGlnbm1lbnQ9e30pLGZyLnMuYWxpZ25tZW50LnZlcnRpY2FsPSJjZW50ZXIifX1pZihZbiYmKGZy'@;
put 'LnN8fChmci5zPXt9KSwhZnIucy5mZ0NvbG9yKSl0cnl7dmFyIHhuPVBtKFluLnRvTG93ZXJDYXNlKCksITApO3huPj0wJiYoZnIucy5mZ0NvbG9yPXtyZ2I6eG59KX1jYXRjaHt9aWYoZ2UuZGVuc2U/KHdbd3QrX2VdfHwod1t3dCtfZV09W10pLHdbd3QrX2VdW2t0K3ZlXT1mcik6d1twaSh7'@;
put 'YzprdCt2ZSxyOnd0K19lfSldPWZyLFR0PjF8fFl0PjEpZm9yKHZhciBtcj13dDttcjx3dCtUdDsrK21yKWZvcih2YXIgQ2k9a3Q7Q2k8a3QrWXQ7KytDaSl3dD09bXImJmt0PT1DaXx8KGdlLmRlbnNlPyh3W21yK19lXXx8KHdbbXIrX2VdPVtdKSx3W21yK19lXVtDaSt2ZV09e3Q6InoiLHM6'@;
put 'SnQoZnIuc3x8e30pfSk6d1twaSh7YzpDaSt2ZSxyOm1yK19lfSldPXt0OiJ6IixzOkp0KGZyLnN8fHt9KX0pO1VlLmUuYzxrdCt2ZSYmKFVlLmUuYz1rdCt2ZSksa3QrPVl0fX0rK3d0fX1pZihpdC5sZW5ndGgmJih3WyIhbWVyZ2VzIl09KHdbIiFtZXJnZXMiXXx8W10pLmNvbmNhdChpdCkp'@;
put 'LFVlLmUucj1NYXRoLm1heChVZS5lLnIsd3QtMStfZSksd1siIXJlZiJdPVZvKFVlKSx3dD49amUmJih3WyIhZnVsbHJlZiJdPVZvKChVZS5lLnI9ZWUubGVuZ3RoLXV0K3d0LTErX2UsVWUpKSksZ2UuYm9yZGVycylmb3Iod3Q9VWUucy5yO3d0PD1VZS5lLnI7Kyt3dClmb3Ioa3Q9VWUucy5j'@;
put 'O2t0PD1VZS5lLmM7KytrdClpZighZ2UuZGVuc2Upe3ZhciB6cj13W3BpKHtyOnd0LGM6a3R9KV07aWYoIXpyfHwhenIucyljb250aW51ZTtpZih3dD4wKXt2YXIgemk9d1twaSh7cjp3dC0xLGM6a3R9KV07emkmJnppLnMmJnppLnMuYm90dG9tJiZkZWxldGUgenIucy50b3B9aWYoa3Q+MCl7'@;
put 'dmFyIHdvPXdbcGkoe3I6d3QsYzprdC0xfSldO3dvJiZ3by5zJiZ3by5zLmJvdHRvbSYmZGVsZXRlIHpyLnMubGVmdH19cmV0dXJuIHd9ZnVuY3Rpb24gV2ModyxQKXtyZXR1cm4gYU8oKFB8fHt9KS5kZW5zZT9bXTp7fSx3LFApfXZhciBoMT1mdW5jdGlvbigpe3ZhciB3PWZ1bmN0aW9uKGVl'@;
put 'LG9lLGdlKXt2YXIgX2U9ZWUucmVwbGFjZSgvW1x0XHJcbl0vZywiICIpLnRyaW0oKS5yZXBsYWNlKC8gKy9nLCIgIikucmVwbGFjZSgvPHRleHQ6c1wvPi9nLCIgIikucmVwbGFjZSgvPHRleHQ6cyB0ZXh0OmM9IihcZCspIlwvPi9nLGZ1bmN0aW9uKFVlLFhlKXtyZXR1cm4gQXJyYXkocGFy'@;
put 'c2VJbnQoWGUsMTApKzEpLmpvaW4oIiAiKX0pLnJlcGxhY2UoLzx0ZXh0OnRhYltePl0qXC8+L2csIlx0IikucmVwbGFjZSgvPHRleHQ6bGluZS1icmVha1wvPi9nLCJcbiIpLHZlPUVyKF9lLnJlcGxhY2UoLzxbXj5dKj4vZywiIikpLE1lPVtdLGplPTA7cmV0dXJuIF9lLnJlcGxhY2UoLyg8'@;
put 'dGV4dDpzcGFuLio/PikoLio/KTxbXC9ddGV4dDpzcGFuPi9nLGZ1bmN0aW9uKFVlLFhlLGl0LGZ0KXtmdCE9amUmJk1lLnB1c2goe3Q6InMiLHY6RXIoX2Uuc2xpY2UoamUsZnQpKX0pO3ZhciBNdD17dDoicyIsdjpFcihpdCl9LHV0PWNuKFhlKVsic3R5bGUtbmFtZSJdO3JldHVybiB1dCYm'@;
put 'Z2VbdXRdJiYoTXQucz1KdChnZVt1dF0pKSxNZS5wdXNoKE10KSxqZT1mdCtVZS5sZW5ndGgsIiJ9KSxqZTxfZS5sZW5ndGgmJk1lLnB1c2goe3Q6InMiLHY6RXIoX2Uuc2xpY2UoamUpKX0pLFt2ZSxNZV19LFA9e2RheTpbImQiLCJkZCJdLG1vbnRoOlsibSIsIm1tIl0seWVhcjpbInkiLCJ5'@;
put 'eSJdLGhvdXJzOlsiaCIsImhoIl0sbWludXRlczpbIm0iLCJtbSJdLHNlY29uZHM6WyJzIiwic3MiXSwiYW0tcG0iOlsiQS9QIiwiQU0vUE0iXSwiZGF5LW9mLXdlZWsiOlsiZGRkIiwiZGRkZCJdLGVyYTpbImUiLCJlZSJdLHF1YXJ0ZXI6WyJcXFFtIiwnbVxcInRoIHF1YXJ0ZXIiJ119LEQ9'@;
put 'ZnVuY3Rpb24oZWUsb2Upe3ZhciBnZT1jbihlZS5zbGljZSgwLGVlLmluZGV4T2YoIj4iKSkpLF9lPWVlLnNsaWNlKGVlLmluZGV4T2YoIj4iKSsxKSx2ZT17bmFtZTpnZS5uYW1lLGZhbWlseTpnZS5mYW1pbHl9O1tbInBhcmVudCIsInBhcmVudC1zdHlsZS1uYW1lIl0sWyJkYXRhbmFtZSIs'@;
put 'ImRhdGEtc3R5bGUtbmFtZSJdLFsibXBuYW1lIiwibWFzdGVyLXBhZ2UtbmFtZSJdXS5mb3JFYWNoKGZ1bmN0aW9uKGplKXtnZVtqZVsxXV0mJih2ZVtqZVswXV09Z2VbamVbMV1dKX0pO3ZhciBNZT17fTtfZS5yZXBsYWNlKHF0LGZ1bmN0aW9uKGplKXt2YXIgVWU9Y24oamUpO2lmKCI8c3R5'@;
put 'bGU6dGV4dC1wcm9wZXJ0aWVzIj09PVVlWzBdKXtpZihVZVsiZm9udC13ZWlnaHQiXSYmKE1lLmJvbGQ9KygiYm9sZCI9PVVlWyJmb250LXdlaWdodCJdfHwiNzAwIj09VWVbImZvbnQtd2VpZ2h0Il0pKSwoIml0YWxpYyI9PVVlWyJmb250LXN0eWxlIl18fCJvYmxpcXVlIj09VWVbImZvbnQt'@;
put 'c3R5bGUiXSkmJihNZS5pdGFsaWM9MSksIm5vbmUiIT0oVWVbInRleHQtdW5kZXJsaW5lLXN0eWxlIl18fCJub25lIik/TWUudW5kZXJsaW5lPSJkb3VibGUiPT1VZVsidGV4dC11bmRlcmxpbmUtdHlwZSJdPzI6MTooVWVbInRleHQtdW5kZXJsaW5lLXN0eWxlIl18fCJub25lIj09VWVbInRl'@;
put 'eHQtdW5kZXJsaW5lLXR5cGUiXSkmJihNZS51bmRlcmxpbmU9MCksKFVlWyJmb250LXNpemUiXXx8IiIpLm1hdGNoKC9wdCQvKSYmKE1lLnN6PStVZVsiZm9udC1zaXplIl0ucmVwbGFjZSgicHQiLCIiKSksIm5vbmUiIT0oVWVbInRleHQtbGluZS10aHJvdWdoLXN0eWxlIl18fCJub25lIikm'@;
put 'JihNZS5zdHJpa2U9MSksVWVbImZvbnQtbmFtZSJdJiYoTWUubmFtZT1VZVsiZm9udC1uYW1lIl0pLFVlLmNvbG9yKXt2YXIgWGU9UG0oVWUuY29sb3IsITApO1hlPj0wJiYoTWUuY29sb3I9WGUpfXN3aXRjaChVZVsidGV4dC1wb3NpdGlvbiJdKXtjYXNlInN1cGVyIjpNZS52YWxpZ249InN1'@;
put 'cGVyIjticmVhaztjYXNlInN1YiI6TWUudmFsaWduPSJzdWIiO2JyZWFrO2RlZmF1bHQ6KFVlWyJ0ZXh0LXBvc2l0aW9uIl18fCIiKS5tYXRjaCgvJS8pJiYoTWUudmFsaWduPSItIj09VWVbInRleHQtcG9zaXRpb24iXS5jaGFyQXQoMCk/InN1YiI6InN1cGVyIil9Im5vbmUiIT0oVWVbInRl'@;
put 'eHQtc2hhZG93Il18fCJub25lIikmJihNZS5zaGFkb3c9MSl9cmV0dXJuIiJ9KSxvZVtnZS5uYW1lXT1NZX07cmV0dXJuIGZ1bmN0aW9uKG9lLGdlKXt2YXIgX2U9Z2V8fHt9O251bGwhPW5lJiZudWxsPT1fZS5kZW5zZSYmKF9lLmRlbnNlPW5lKTt2YXIgamUsVWUsTXQsdXQsVHQsWXQsdmU9'@;
put 'UHcob2UpLE1lPVtdLFhlPXtuYW1lOiIifSxpdD0iIixmdD0wLHd0PXt9LEh0PVtdLGt0PV9lLmRlbnNlP1tdOnt9LGduPXt2YWx1ZToiIn0scW49IiIsZm49MCx6bj1bXSxPbj0tMSxlcj0tMSx0cj17czp7cjoxZTYsYzoxZTd9LGU6e3I6MCxjOjB9fSxZbj0wLGpyPXt9LGxpPVtdLEVpPXt9'@;
put 'LElpPTAsdGk9MCxmcj1bXSxEbj0xLHZyPTEscnI9W10seG49e05hbWVzOltdfSxtcj17fSxDaT1bIiIsIiJdLHpyPVtdLHppPXt9LHdvPXt9LE9pPTAsWG89IiIsZm89MCxSbz0hMSxUbz0hMSxtaT0wO2ZvcihXci5sYXN0SW5kZXg9MCx2ZT12ZS5yZXBsYWNlKC88IS0tKFtcc1xTXSo/KS0t'@;
put 'Pi9nbSwiIikucmVwbGFjZSgvPCFET0NUWVBFW15cW10qXFtbXlxdXSpcXT4vZ20sIiIpO1R0PVdyLmV4ZWModmUpOylzd2l0Y2goVHRbM109VHRbM10ucmVwbGFjZSgvXy4qJC8sIiIpKXtjYXNlInRhYmxlIjpjYXNlIlx1NWRlNVx1NGY1Y1x1ODg2OCI6Ii8iPT09VHRbMV0/KGt0WyIhcmVm'@;
put 'Il09dHIuZS5jPj10ci5zLmMmJnRyLmUucj49dHIucy5yP1ZvKHRyKToiQTE6QTEiLF9lLnNoZWV0Um93cz4wJiZfZS5zaGVldFJvd3M8PXRyLmUuciYmKGt0WyIhZnVsbHJlZiJdPWt0WyIhcmVmIl0sdHIuZS5yPV9lLnNoZWV0Um93cy0xLGt0WyIhcmVmIl09Vm8odHIpKSxsaS5sZW5ndGgm'@;
put 'JihrdFsiIW1lcmdlcyJdPWxpKSxmci5sZW5ndGgmJihrdFsiIXJvd3MiXT1mciksTXQubmFtZT1NdC5cdTU0MGRcdTc5ZjB8fE10Lm5hbWUsdHlwZW9mIEpTT048InUiJiZKU09OLnN0cmluZ2lmeShNdCksSHQucHVzaChNdC5uYW1lKSx3dFtNdC5uYW1lXT1rdCxUbz0hMSk6Ii8iIT09VHRb'@;
put 'MF0uY2hhckF0KFR0WzBdLmxlbmd0aC0yKSYmKE10PWNuKFR0WzBdLCExKSxPbj1lcj0tMSx0ci5zLnI9dHIucy5jPTFlNyx0ci5lLnI9dHIuZS5jPTAsa3Q9X2UuZGVuc2U/W106e30sbGk9W10sZnI9W10sVG89ITApO2JyZWFrO2Nhc2UidGFibGUtcm93LWdyb3VwIjoiLyI9PT1UdFsxXT8t'@;
put 'LVluOisrWW47YnJlYWs7Y2FzZSJ0YWJsZS1yb3ciOmNhc2UiXHU4ODRjIjppZigiLyI9PT1UdFsxXSl7T24rPURuLERuPTE7YnJlYWt9aWYoKHV0PWNuKFR0WzBdLCExKSkuXHU4ODRjXHU1M2Y3P09uPXV0Llx1ODg0Y1x1NTNmNy0xOi0xPT1PbiYmKE9uPTApLChEbj0rdXRbIm51bWJlci1y'@;
put 'b3dzLXJlcGVhdGVkIl18fDEpPDEwKWZvcihtaT0wO21pPERuOysrbWkpWW4+MCYmKGZyW09uK21pXT17bGV2ZWw6WW59KTtlcj0tMTticmVhaztjYXNlImNvdmVyZWQtdGFibGUtY2VsbCI6Ii8iIT09VHRbMV0mJisrZXIsX2Uuc2hlZXRTdHVicyYmKF9lLmRlbnNlPyhrdFtPbl18fChrdFtP'@;
put 'bl09W10pLGt0W09uXVtlcl09e3Q6InoifSk6a3RbcGkoe3I6T24sYzplcn0pXT17dDoieiJ9KSxxbj0iIix6bj1bXTticmVhaztjYXNlInRhYmxlLWNlbGwiOmNhc2UiXHU2NTcwXHU2MzZlIjppZigiLyI9PT1UdFswXS5jaGFyQXQoVHRbMF0ubGVuZ3RoLTIpKSsrZXIsZ249Y24oVHRbMF0s'@;
put 'ITEpLHZyPXBhcnNlSW50KGduWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdfHwiMSIsMTApLFl0PXt0OiJ6Iix2Om51bGx9LGduLmZvcm11bGEmJjAhPV9lLmNlbGxGb3JtdWxhJiYoWXQuZj1CQShFcihnbi5mb3JtdWxhKSkpLCJzdHJpbmciPT0oZ24uXHU2NTcwXHU2MzZlXHU3YzdiXHU1'@;
put 'NzhifHxnblsidmFsdWUtdHlwZSJdKSYmKFl0LnQ9InMiLFl0LnY9RXIoZ25bInN0cmluZy12YWx1ZSJdfHwiIiksX2UuZGVuc2U/KGt0W09uXXx8KGt0W09uXT1bXSksa3RbT25dW2VyXT1ZdCk6a3RbcGkoe3I6T24sYzplcn0pXT1ZdCksZXIrPXZyLTE7ZWxzZSBpZigiLyIhPT1UdFsxXSl7'@;
put 'dnI9MTt2YXIgcmw9RG4/T24rRG4tMTpPbjtpZigrK2VyPnRyLmUuYyYmKHRyLmUuYz1lciksZXI8dHIucy5jJiYodHIucy5jPWVyKSxPbjx0ci5zLnImJih0ci5zLnI9T24pLHJsPnRyLmUuciYmKHRyLmUucj1ybCksenI9W10semk9e30sWXQ9e3Q6KGduPWNuKFR0WzBdLCExKSkuXHU2NTcw'@;
put 'XHU2MzZlXHU3YzdiXHU1NzhifHxnblsidmFsdWUtdHlwZSJdLHY6bnVsbH0sX2UuY2VsbEZvcm11bGEpaWYoZ24uZm9ybXVsYSYmKGduLmZvcm11bGE9RXIoZ24uZm9ybXVsYSkpLGduWyJudW1iZXItbWF0cml4LWNvbHVtbnMtc3Bhbm5lZCJdJiZnblsibnVtYmVyLW1hdHJpeC1yb3dzLXNw'@;
put 'YW5uZWQiXSYmKElpPXBhcnNlSW50KGduWyJudW1iZXItbWF0cml4LXJvd3Mtc3Bhbm5lZCJdLDEwKXx8MCx0aT1wYXJzZUludChnblsibnVtYmVyLW1hdHJpeC1jb2x1bW5zLXNwYW5uZWQiXSwxMCl8fDAsWXQuRj1WbyhFaT17czp7cjpPbixjOmVyfSxlOntyOk9uK0lpLTEsYzplcit0aS0x'@;
put 'fX0pLHJyLnB1c2goW0VpLFl0LkZdKSksZ24uZm9ybXVsYSlZdC5mPUJBKGduLmZvcm11bGEpO2Vsc2UgZm9yKG1pPTA7bWk8cnIubGVuZ3RoOysrbWkpT24+PXJyW21pXVswXS5zLnImJk9uPD1yclttaV1bMF0uZS5yJiZlcj49cnJbbWldWzBdLnMuYyYmZXI8PXJyW21pXVswXS5lLmMmJihZ'@;
put 'dC5GPXJyW21pXVsxXSk7c3dpdGNoKChnblsibnVtYmVyLWNvbHVtbnMtc3Bhbm5lZCJdfHxnblsibnVtYmVyLXJvd3Mtc3Bhbm5lZCJdKSYmKElpPXBhcnNlSW50KGduWyJudW1iZXItcm93cy1zcGFubmVkIl0sMTApfHwwLHRpPXBhcnNlSW50KGduWyJudW1iZXItY29sdW1ucy1zcGFubmVk'@;
put 'Il0sMTApfHwwLGxpLnB1c2goRWk9e3M6e3I6T24sYzplcn0sZTp7cjpPbitJaS0xLGM6ZXIrdGktMX19KSksZ25bIm51bWJlci1jb2x1bW5zLXJlcGVhdGVkIl0mJih2cj1wYXJzZUludChnblsibnVtYmVyLWNvbHVtbnMtcmVwZWF0ZWQiXSwxMCkpLFl0LnQpe2Nhc2UiYm9vbGVhbiI6WXQu'@;
put 'dD0iYiIsWXQudj1fcihnblsiYm9vbGVhbi12YWx1ZSJdKTticmVhaztjYXNlImZsb2F0IjpjYXNlInBlcmNlbnRhZ2UiOmNhc2UiY3VycmVuY3kiOll0LnQ9Im4iLFl0LnY9cGFyc2VGbG9hdChnbi52YWx1ZSk7YnJlYWs7Y2FzZSJkYXRlIjpZdC50PSJkIixZdC52PVB0KGduWyJkYXRlLXZh'@;
put 'bHVlIl0pLF9lLmNlbGxEYXRlc3x8KFl0LnQ9Im4iLFl0LnY9cWUoWXQudikpLFl0Lno9Im0vZC95eSI7YnJlYWs7Y2FzZSJ0aW1lIjpZdC50PSJuIixZdC52PWF0KGduWyJ0aW1lLXZhbHVlIl0pLzg2NDAwLF9lLmNlbGxEYXRlcyYmKFl0LnQ9ImQiLFl0LnY9aHQoWXQudikpLFl0Lno9IkhI'@;
put 'Ok1NOlNTIjticmVhaztjYXNlIm51bWJlciI6WXQudD0ibiIsWXQudj1wYXJzZUZsb2F0KGduLlx1NjU3MFx1NjM2ZVx1NjU3MFx1NTAzYyk7YnJlYWs7ZGVmYXVsdDppZigic3RyaW5nIiE9PVl0LnQmJiJ0ZXh0IiE9PVl0LnQmJll0LnQpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCB2'@;
put 'YWx1ZSB0eXBlICIrWXQudCk7WXQudD0icyIsbnVsbCE9Z25bInN0cmluZy12YWx1ZSJdJiYocW49RXIoZ25bInN0cmluZy12YWx1ZSJdKSx6bj1bXSl9fWVsc2V7aWYoUm89ITEsInMiPT09WXQudCYmKFl0LnY9cW58fCIiLHpuLmxlbmd0aCYmKFl0LlI9em4pLFJvPTA9PWZuKSxtci5UYXJn'@;
put 'ZXQmJihZdC5sPW1yKSx6ci5sZW5ndGg+MCYmKFl0LmM9enIsenI9W10pLHFuJiYhMSE9PV9lLmNlbGxUZXh0JiYoWXQudz1xbiksUm8mJihZdC50PSJ6IixkZWxldGUgWXQudiksX2UuY2VsbEhUTUwmJihZdC5oPVl0LlI/dV8oWXQuUik6bG8oIiIrWXQudikpLCghUm98fF9lLnNoZWV0U3R1'@;
put 'YnMpJiYhKF9lLnNoZWV0Um93cyYmX2Uuc2hlZXRSb3dzPD1PbikpZm9yKHZhciBBbj0wO0FuPERuOysrQW4pe2lmKHZyPXBhcnNlSW50KGduWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdfHwiMSIsMTApLF9lLmRlbnNlKWZvcihrdFtPbitBbl18fChrdFtPbitBbl09W10pLGt0W09uK0Fu'@;
put 'XVtlcl09MD09QW4/WXQ6SnQoWXQpOy0tdnI+MDspa3RbT24rQW5dW2VyK3ZyXT1KdChZdCk7ZWxzZSBmb3Ioa3RbcGkoe3I6T24rQW4sYzplcn0pXT1ZdDstLXZyPjA7KWt0W3BpKHtyOk9uK0FuLGM6ZXIrdnJ9KV09SnQoWXQpO3RyLmUuYzw9ZXImJih0ci5lLmM9ZXIpfWVyKz0odnI9cGFy'@;
put 'c2VJbnQoZ25bIm51bWJlci1jb2x1bW5zLXJlcGVhdGVkIl18fCIxIiwxMCkpLTEsdnI9MCxZdD17fSxxbj0iIix6bj1bXX1tcj17fTticmVhaztjYXNlImRvY3VtZW50IjpjYXNlImRvY3VtZW50LWNvbnRlbnQiOmNhc2UiXHU3NTM1XHU1YjUwXHU4ODY4XHU2ODNjXHU2NTg3XHU2ODYzIjpj'@;
put 'YXNlInNwcmVhZHNoZWV0IjpjYXNlIlx1NGUzYlx1NGY1MyI6Y2FzZSJzY3JpcHRzIjpjYXNlInN0eWxlcyI6Y2FzZSJmb250LWZhY2UtZGVjbHMiOmNhc2UibWFzdGVyLXN0eWxlcyI6aWYoIi8iPT09VHRbMV0pe2lmKChqZT1NZS5wb3AoKSlbMF0hPT1UdFszXSl0aHJvdyJCYWQgc3RhdGU6'@;
put 'ICIramV9ZWxzZSIvIiE9PVR0WzBdLmNoYXJBdChUdFswXS5sZW5ndGgtMikmJk1lLnB1c2goW1R0WzNdLCEwXSk7YnJlYWs7Y2FzZSJhbm5vdGF0aW9uIjppZigiLyI9PT1UdFsxXSl7aWYoKGplPU1lLnBvcCgpKVswXSE9PVR0WzNdKXRocm93IkJhZCBzdGF0ZTogIitqZTt6aS50PXFuLHpu'@;
put 'Lmxlbmd0aCYmKHppLlI9em4pLHppLmE9WG8senIucHVzaCh6aSl9ZWxzZSIvIiE9PVR0WzBdLmNoYXJBdChUdFswXS5sZW5ndGgtMikmJk1lLnB1c2goW1R0WzNdLCExXSk7WG89IiIsZm89MCxxbj0iIixmbj0wLHpuPVtdO2JyZWFrO2Nhc2UiY3JlYXRvciI6Ii8iPT09VHRbMV0/WG89dmUu'@;
put 'c2xpY2UoZm8sVHQuaW5kZXgpOmZvPVR0LmluZGV4K1R0WzBdLmxlbmd0aDticmVhaztjYXNlIm1ldGEiOmNhc2UiXHU1MTQzXHU2NTcwXHU2MzZlIjpjYXNlInNldHRpbmdzIjpjYXNlImNvbmZpZy1pdGVtLXNldCI6Y2FzZSJjb25maWctaXRlbS1tYXAtaW5kZXhlZCI6Y2FzZSJjb25maWct'@;
put 'aXRlbS1tYXAtZW50cnkiOmNhc2UiY29uZmlnLWl0ZW0tbWFwLW5hbWVkIjpjYXNlInNoYXBlcyI6Y2FzZSJmcmFtZSI6Y2FzZSJ0ZXh0LWJveCI6Y2FzZSJpbWFnZSI6Y2FzZSJkYXRhLXBpbG90LXRhYmxlcyI6Y2FzZSJsaXN0LXN0eWxlIjpjYXNlImZvcm0iOmNhc2UiZGRlLWxpbmtzIjpj'@;
put 'YXNlImV2ZW50LWxpc3RlbmVycyI6Y2FzZSJjaGFydCI6aWYoIi8iPT09VHRbMV0pe2lmKChqZT1NZS5wb3AoKSlbMF0hPT1UdFszXSl0aHJvdyJCYWQgc3RhdGU6ICIramV9ZWxzZSIvIiE9PVR0WzBdLmNoYXJBdChUdFswXS5sZW5ndGgtMikmJk1lLnB1c2goW1R0WzNdLCExXSk7cW49IiIs'@;
put 'Zm49MCx6bj1bXTticmVhaztjYXNlInNjaWVudGlmaWMtbnVtYmVyIjpjYXNlImN1cnJlbmN5LXN5bWJvbCI6Y2FzZSJjdXJyZW5jeS1zdHlsZSI6Y2FzZSJzY3JpcHQiOmNhc2UibGlicmFyaWVzIjpjYXNlImF1dG9tYXRpYy1zdHlsZXMiOmNhc2UiZGVmYXVsdC1zdHlsZSI6Y2FzZSJwYWdl'@;
put 'LWxheW91dCI6Y2FzZSJtYXAiOmNhc2UiZm9udC1mYWNlIjpjYXNlInBhcmFncmFwaC1wcm9wZXJ0aWVzIjpjYXNlInRhYmxlLXByb3BlcnRpZXMiOmNhc2UidGFibGUtY29sdW1uLXByb3BlcnRpZXMiOmNhc2UidGFibGUtcm93LXByb3BlcnRpZXMiOmNhc2UidGFibGUtY2VsbC1wcm9wZXJ0'@;
put 'aWVzIjpjYXNlImZyYWN0aW9uIjpjYXNlImJvb2xlYW4tc3R5bGUiOmNhc2UiYm9vbGVhbiI6Y2FzZSJ0ZXh0LXN0eWxlIjpjYXNlInRleHQtY29udGVudCI6Y2FzZSJ0ZXh0LXByb3BlcnRpZXMiOmNhc2UiZW1iZWRkZWQtdGV4dCI6Y2FzZSJib2R5IjpjYXNlIlx1NzUzNVx1NWI1MFx1ODg2'@;
put 'OFx1NjgzYyI6Y2FzZSJmb3JtcyI6Y2FzZSJ0YWJsZS1jb2x1bW4iOmNhc2UidGFibGUtaGVhZGVyLXJvd3MiOmNhc2UidGFibGUtcm93cyI6Y2FzZSJ0YWJsZS1jb2x1bW4tZ3JvdXAiOmNhc2UidGFibGUtaGVhZGVyLWNvbHVtbnMiOmNhc2UidGFibGUtY29sdW1ucyI6Y2FzZSJudWxsLWRh'@;
put 'dGUiOmNhc2UiZ3JhcGhpYy1wcm9wZXJ0aWVzIjpjYXNlImNhbGN1bGF0aW9uLXNldHRpbmdzIjpjYXNlIm5hbWVkLWV4cHJlc3Npb25zIjpjYXNlImxhYmVsLXJhbmdlIjpjYXNlImxhYmVsLXJhbmdlcyI6Y2FzZSJuYW1lZC1leHByZXNzaW9uIjpjYXNlInNvcnQiOmNhc2Uic29ydC1ieSI6'@;
put 'Y2FzZSJzb3J0LWdyb3VwcyI6Y2FzZSJ0YWIiOmNhc2UibGluZS1icmVhayI6Y2FzZSJzcGFuIjpjYXNlInMiOmNhc2UiZGF0ZSI6Y2FzZSJvYmplY3QiOmNhc2UidGl0bGUiOmNhc2UiXHU2ODA3XHU5ODk4IjpjYXNlImRlc2MiOmNhc2UiYmluYXJ5LWRhdGEiOmNhc2UidGFibGUtc291cmNl'@;
put 'IjpjYXNlInNjZW5hcmlvIjpjYXNlIml0ZXJhdGlvbiI6Y2FzZSJjb250ZW50LXZhbGlkYXRpb25zIjpjYXNlImNvbnRlbnQtdmFsaWRhdGlvbiI6Y2FzZSJoZWxwLW1lc3NhZ2UiOmNhc2UiZXJyb3ItbWVzc2FnZSI6Y2FzZSJkYXRhYmFzZS1yYW5nZXMiOmNhc2UiZmlsdGVyIjpjYXNlImZp'@;
put 'bHRlci1hbmQiOmNhc2UiZmlsdGVyLW9yIjpjYXNlImZpbHRlci1jb25kaXRpb24iOmNhc2UibGlzdC1sZXZlbC1zdHlsZS1idWxsZXQiOmNhc2UibGlzdC1sZXZlbC1zdHlsZS1udW1iZXIiOmNhc2UibGlzdC1sZXZlbC1wcm9wZXJ0aWVzIjpjYXNlInNlbmRlci1maXJzdG5hbWUiOmNhc2Ui'@;
put 'c2VuZGVyLWxhc3RuYW1lIjpjYXNlInNlbmRlci1pbml0aWFscyI6Y2FzZSJzZW5kZXItdGl0bGUiOmNhc2Uic2VuZGVyLXBvc2l0aW9uIjpjYXNlInNlbmRlci1lbWFpbCI6Y2FzZSJzZW5kZXItcGhvbmUtcHJpdmF0ZSI6Y2FzZSJzZW5kZXItZmF4IjpjYXNlInNlbmRlci1jb21wYW55Ijpj'@;
put 'YXNlInNlbmRlci1waG9uZS13b3JrIjpjYXNlInNlbmRlci1zdHJlZXQiOmNhc2Uic2VuZGVyLWNpdHkiOmNhc2Uic2VuZGVyLXBvc3RhbC1jb2RlIjpjYXNlInNlbmRlci1jb3VudHJ5IjpjYXNlInNlbmRlci1zdGF0ZS1vci1wcm92aW5jZSI6Y2FzZSJhdXRob3ItbmFtZSI6Y2FzZSJhdXRo'@;
put 'b3ItaW5pdGlhbHMiOmNhc2UiY2hhcHRlciI6Y2FzZSJmaWxlLW5hbWUiOmNhc2UidGVtcGxhdGUtbmFtZSI6Y2FzZSJzaGVldC1uYW1lIjpjYXNlImV2ZW50LWxpc3RlbmVyIjpjYXNlImluaXRpYWwtY3JlYXRvciI6Y2FzZSJjcmVhdGlvbi1kYXRlIjpjYXNlInByaW50LWRhdGUiOmNhc2Ui'@;
put 'Z2VuZXJhdG9yIjpjYXNlImRvY3VtZW50LXN0YXRpc3RpYyI6Y2FzZSJ1c2VyLWRlZmluZWQiOmNhc2UiZWRpdGluZy1kdXJhdGlvbiI6Y2FzZSJlZGl0aW5nLWN5Y2xlcyI6Y2FzZSJjb25maWctaXRlbSI6Y2FzZSJwYWdlLW51bWJlciI6Y2FzZSJwYWdlLWNvdW50IjpjYXNlInRpbWUiOmNh'@;
put 'c2UiY2VsbC1yYW5nZS1zb3VyY2UiOmNhc2UiZGV0ZWN0aXZlIjpjYXNlIm9wZXJhdGlvbiI6Y2FzZSJoaWdobGlnaHRlZC1yYW5nZSI6Y2FzZSJkYXRhLXBpbG90LXRhYmxlIjpjYXNlInNvdXJjZS1jZWxsLXJhbmdlIjpjYXNlInNvdXJjZS1zZXJ2aWNlIjpjYXNlImRhdGEtcGlsb3QtZmll'@;
put 'bGQiOmNhc2UiZGF0YS1waWxvdC1sZXZlbCI6Y2FzZSJkYXRhLXBpbG90LXN1YnRvdGFscyI6Y2FzZSJkYXRhLXBpbG90LXN1YnRvdGFsIjpjYXNlImRhdGEtcGlsb3QtbWVtYmVycyI6Y2FzZSJkYXRhLXBpbG90LW1lbWJlciI6Y2FzZSJkYXRhLXBpbG90LWRpc3BsYXktaW5mbyI6Y2FzZSJk'@;
put 'YXRhLXBpbG90LXNvcnQtaW5mbyI6Y2FzZSJkYXRhLXBpbG90LWxheW91dC1pbmZvIjpjYXNlImRhdGEtcGlsb3QtZmllbGQtcmVmZXJlbmNlIjpjYXNlImRhdGEtcGlsb3QtZ3JvdXBzIjpjYXNlImRhdGEtcGlsb3QtZ3JvdXAiOmNhc2UiZGF0YS1waWxvdC1ncm91cC1tZW1iZXIiOmNhc2Ui'@;
put 'cmVjdCI6Y2FzZSJkZGUtY29ubmVjdGlvbi1kZWNscyI6Y2FzZSJkZGUtY29ubmVjdGlvbi1kZWNsIjpjYXNlImRkZS1saW5rIjpjYXNlImRkZS1zb3VyY2UiOmNhc2UicHJvcGVydGllcyI6Y2FzZSJwcm9wZXJ0eSI6Y2FzZSJ0YWJsZS1wcm90ZWN0aW9uIjpjYXNlImRhdGEtcGlsb3QtZ3Jh'@;
put 'bmQtdG90YWwiOmNhc2Uib2ZmaWNlLWRvY3VtZW50LWNvbW1vbi1hdHRycyI6YnJlYWs7Y2FzZSJudW1iZXItc3R5bGUiOmNhc2UicGVyY2VudGFnZS1zdHlsZSI6Y2FzZSJkYXRlLXN0eWxlIjpjYXNlInRpbWUtc3R5bGUiOmlmKCIvIj09PVR0WzFdKXtpZihqcltYZS5uYW1lXT1pdCwoamU9'@;
put 'TWUucG9wKCkpWzBdIT09VHRbM10pdGhyb3ciQmFkIHN0YXRlOiAiK2plfWVsc2UiLyIhPT1UdFswXS5jaGFyQXQoVHRbMF0ubGVuZ3RoLTIpJiYoaXQ9IiIsWGU9Y24oVHRbMF0sITEpLE1lLnB1c2goW1R0WzNdLCEwXSkpO2JyZWFrO2Nhc2Uic3R5bGUiOiIvPiI9PT1UdFswXS5zbGljZSgt'@;
put 'Mik/RChUdFswXSx3byk6Ii8iPT1UdFsxXT9EKHZlLnNsaWNlKE9pLFR0LmluZGV4K1R0WzBdLmxlbmd0aCksd28pOk9pPVR0LmluZGV4O2JyZWFrO2Nhc2UibnVtYmVyIjpjYXNlImRheSI6Y2FzZSJtb250aCI6Y2FzZSJ5ZWFyIjpjYXNlImVyYSI6Y2FzZSJkYXktb2Ytd2VlayI6Y2FzZSJ3'@;
put 'ZWVrLW9mLXllYXIiOmNhc2UicXVhcnRlciI6Y2FzZSJob3VycyI6Y2FzZSJtaW51dGVzIjpjYXNlInNlY29uZHMiOmNhc2UiYW0tcG0iOnN3aXRjaChNZVtNZS5sZW5ndGgtMV1bMF0pe2Nhc2UidGltZS1zdHlsZSI6Y2FzZSJkYXRlLXN0eWxlIjpVZT1jbihUdFswXSwhMSksaXQrPVBbVHRb'@;
put 'M11dWyJsb25nIj09PVVlLnN0eWxlPzE6MF19YnJlYWs7Y2FzZSJ0ZXh0IjppZigiLz4iPT09VHRbMF0uc2xpY2UoLTIpKWJyZWFrO2lmKCIvIj09PVR0WzFdKXN3aXRjaChNZVtNZS5sZW5ndGgtMV1bMF0pe2Nhc2UibnVtYmVyLXN0eWxlIjpjYXNlImRhdGUtc3R5bGUiOmNhc2UidGltZS1z'@;
put 'dHlsZSI6aXQrPXZlLnNsaWNlKGZ0LFR0LmluZGV4KX1lbHNlIGZ0PVR0LmluZGV4K1R0WzBdLmxlbmd0aDticmVhaztjYXNlIm5hbWVkLXJhbmdlIjpDaT1udygoVWU9Y24oVHRbMF0sITEpKVsiY2VsbC1yYW5nZS1hZGRyZXNzIl0pO3ZhciBBYT17TmFtZTpVZS5uYW1lLFJlZjpDaVswXSsi'@;
put 'ISIrQ2lbMV19O1RvJiYoQWEuU2hlZXQ9SHQubGVuZ3RoKSx4bi5OYW1lcy5wdXNoKEFhKTticmVhaztjYXNlInAiOmNhc2UiXHU2NTg3XHU2NzJjXHU0ZTMyIjppZihbIm1hc3Rlci1zdHlsZXMiXS5pbmRleE9mKE1lW01lLmxlbmd0aC0xXVswXSk+LTEpYnJlYWs7aWYoIi8iIT09VHRbMV18'@;
put 'fGduJiZnblsic3RyaW5nLXZhbHVlIl0pY24oVHRbMF0sITEpLGZuPVR0LmluZGV4K1R0WzBdLmxlbmd0aDtlbHNle3ZhciBNYT13KHZlLnNsaWNlKGZuLFR0LmluZGV4KSwwLHdvKTtxbj0ocW4ubGVuZ3RoPjA/cW4rIlxuIjoiIikrTWFbMF0sem49TWFbMV19YnJlYWs7Y2FzZSJkYXRhYmFz'@;
put 'ZS1yYW5nZSI6aWYoIi8iPT09VHRbMV0pYnJlYWs7dHJ5e3d0WyhDaT1udyhjbihUdFswXSlbInRhcmdldC1yYW5nZS1hZGRyZXNzIl0pKVswXV1bIiFhdXRvZmlsdGVyIl09e3JlZjpDaVsxXX19Y2F0Y2h7fWJyZWFrO2Nhc2UiYSI6aWYoIi8iIT09VHRbMV0pe2lmKCEobXI9Y24oVHRbMF0s'@;
put 'ITEpKS5ocmVmKWJyZWFrO21yLlRhcmdldD1Fcihtci5ocmVmKSxkZWxldGUgbXIuaHJlZiwiIyI9PW1yLlRhcmdldC5jaGFyQXQoMCkmJm1yLlRhcmdldC5pbmRleE9mKCIuIik+LTE/KENpPW53KG1yLlRhcmdldC5zbGljZSgxKSksbXIuVGFyZ2V0PSIjIitDaVswXSsiISIrQ2lbMV0pOm1y'@;
put 'LlRhcmdldC5tYXRjaCgvXlwuXC5bXFxcL10vKSYmKG1yLlRhcmdldD1tci5UYXJnZXQuc2xpY2UoMykpfWJyZWFrO2RlZmF1bHQ6c3dpdGNoKFR0WzJdKXtjYXNlImRjOiI6Y2FzZSJjYWxjZXh0OiI6Y2FzZSJsb2V4dDoiOmNhc2Uib29vOiI6Y2FzZSJjaGFydG9vbzoiOmNhc2UiZHJhdzoi'@;
put 'OmNhc2Uic3R5bGU6IjpjYXNlImNoYXJ0OiI6Y2FzZSJmb3JtOiI6Y2FzZSJ1b2Y6IjpjYXNlIlx1ODg2ODoiOmNhc2UiXHU1YjU3OiI6YnJlYWs7ZGVmYXVsdDppZihfZS5XVEYpdGhyb3cgbmV3IEVycm9yKFR0KX19dmFyIElzPXtTaGVldHM6d3QsU2hlZXROYW1lczpIdCxXb3JrYm9vazp4'@;
put 'bn07cmV0dXJuIF9lLmJvb2tTaGVldHMmJmRlbGV0ZSBJcy5TaGVldHMsSXN9fSgpO2Z1bmN0aW9uIFV3KHcsUCl7cmV0dXJuIGgxKHcsUCl9dmFyIGJmPWZ1bmN0aW9uKCl7dmFyIHc9WyIgIDxvZmZpY2U6bWFzdGVyLXN0eWxlcz4iLCcgICAgPHN0eWxlOm1hc3Rlci1wYWdlIHN0eWxlOm5h'@;
put 'bWU9Im1wMSIgc3R5bGU6cGFnZS1sYXlvdXQtbmFtZT0ibXAxIj4nLCIgICAgICA8c3R5bGU6aGVhZGVyLz4iLCcgICAgICA8c3R5bGU6aGVhZGVyLWxlZnQgc3R5bGU6ZGlzcGxheT0iZmFsc2UiLz4nLCIgICAgICA8c3R5bGU6Zm9vdGVyLz4iLCcgICAgICA8c3R5bGU6Zm9vdGVyLWxlZnQg'@;
put 'c3R5bGU6ZGlzcGxheT0iZmFsc2UiLz4nLCIgICAgPC9zdHlsZTptYXN0ZXItcGFnZT4iLCIgIDwvb2ZmaWNlOm1hc3Rlci1zdHlsZXM+Il0uam9pbigiXG4iKSxQPSI8b2ZmaWNlOmRvY3VtZW50LXN0eWxlcyAiK0ZsKHsieG1sbnM6b2ZmaWNlIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5k'@;
put 'b2N1bWVudDp4bWxuczpvZmZpY2U6MS4wIiwieG1sbnM6dGFibGUiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnRhYmxlOjEuMCIsInhtbG5zOnN0eWxlIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpzdHlsZToxLjAiLCJ4bWxuczp0ZXh0'@;
put 'IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczp0ZXh0OjEuMCIsInhtbG5zOmRyYXciOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmRyYXdpbmc6MS4wIiwieG1sbnM6Zm8iOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5z'@;
put 'OnhzbC1mby1jb21wYXRpYmxlOjEuMCIsInhtbG5zOnhsaW5rIjoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsInhtbG5zOmRjIjoiaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iLCJ4bWxuczpudW1iZXIiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50Onht'@;
put 'bG5zOmRhdGFzdHlsZToxLjAiLCJ4bWxuczpzdmciOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnN2Zy1jb21wYXRpYmxlOjEuMCIsInhtbG5zOm9mIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpvZjoxLjIiLCJvZmZpY2U6dmVyc2lvbiI6'@;
put 'IjEuMiJ9KSsiPlxuIit3KyJcbjwvb2ZmaWNlOmRvY3VtZW50LXN0eWxlcz4iO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBCbitQfX0oKSxBMD1mdW5jdGlvbigpe3ZhciB3PWZ1bmN0aW9uKHZlLE1lKXtyZXR1cm4gQnIodmUpLnJlcGxhY2UoLyAgKy9nLGZ1bmN0aW9uKGplKXtyZXR1cm4n'@;
put 'PHRleHQ6cyB0ZXh0OmM9IicramUubGVuZ3RoKyciLz4nfSkucmVwbGFjZSgvXHQvZywiPHRleHQ6dGFiLz4iKS5yZXBsYWNlKC9cbi9nLE1lPyI8dGV4dDpsaW5lLWJyZWFrLz4iOiI8L3RleHQ6cD48dGV4dDpwPiIpLnJlcGxhY2UoL14gLywiPHRleHQ6cy8+IikucmVwbGFjZSgvICQvLCI8'@;
put 'dGV4dDpzLz4iKX0sUD1mdW5jdGlvbih2ZSl7cmV0dXJuIHZlLm1hcChmdW5jdGlvbihNZSl7dmFyIGplPSIiO3JldHVybiBudWxsIT1NZS5vZHMmJihqZSs9JyB0ZXh0OnN0eWxlLW5hbWU9IlQnK01lLm9kcysnIicpLE1lLnY/Ijx0ZXh0OnNwYW4iK2plKyI+Iit3KE1lLnYsITApKyI8L3Rl'@;
put 'eHQ6c3Bhbj4iOiIifSkuam9pbigiIil9LEQ9IiAgICAgICAgICA8dGFibGU6dGFibGUtY2VsbCAvPlxuIixvZT1mdW5jdGlvbih2ZSxNZSxqZSl7dmFyIFVlPVtdO1VlLnB1c2goJyAgICAgIDx0YWJsZTp0YWJsZSB0YWJsZTpuYW1lPSInK0JyKE1lLlNoZWV0TmFtZXNbamVdKSsnIiB0YWJs'@;
put 'ZTpzdHlsZS1uYW1lPSJ0YTEiPlxuJyk7dmFyIFhlPTAsaXQ9MCxmdD1LYSh2ZVsiIXJlZiJdfHwiQTEiKSxNdD12ZVsiIW1lcmdlcyJdfHxbXSx1dD0wLHd0PUFycmF5LmlzQXJyYXkodmUpO2lmKHZlWyIhY29scyJdKWZvcihpdD0wO2l0PD1mdC5lLmM7KytpdClVZS5wdXNoKCIgICAgICAg'@;
put 'IDx0YWJsZTp0YWJsZS1jb2x1bW4iKyh2ZVsiIWNvbHMiXVtpdF0/JyB0YWJsZTpzdHlsZS1uYW1lPSJjbycrdmVbIiFjb2xzIl1baXRdLm9kcysnIic6IiIpKyI+PC90YWJsZTp0YWJsZS1jb2x1bW4+XG4iKTt2YXIga3Q9dmVbIiFyb3dzIl18fFtdO2ZvcihYZT0wO1hlPGZ0LnMucjsrK1hl'@;
put 'KVVlLnB1c2goIiAgICAgICAgPHRhYmxlOnRhYmxlLXJvdyIrKGt0W1hlXT8nIHRhYmxlOnN0eWxlLW5hbWU9InJvJytrdFtYZV0ub2RzKyciJzoiIikrIj48L3RhYmxlOnRhYmxlLXJvdz5cbiIpO2Zvcig7WGU8PWZ0LmUucjsrK1hlKXtmb3IoVWUucHVzaCgiICAgICAgICA8dGFibGU6dGFi'@;
put 'bGUtcm93Iisoa3RbWGVdPycgdGFibGU6c3R5bGUtbmFtZT0icm8nK2t0W1hlXS5vZHMrJyInOiIiKSsiPlxuIiksaXQ9MDtpdDxmdC5zLmM7KytpdClVZS5wdXNoKEQpO2Zvcig7aXQ8PWZ0LmUuYzsrK2l0KXt2YXIgVHQ9ITEsWXQ9e30sZ249IiI7Zm9yKHV0PTA7dXQhPU10Lmxlbmd0aDsr'@;
put 'K3V0KWlmKCEoTXRbdXRdLnMuYz5pdHx8TXRbdXRdLnMucj5YZXx8TXRbdXRdLmUuYzxpdHx8TXRbdXRdLmUucjxYZSkpeyhNdFt1dF0ucy5jIT1pdHx8TXRbdXRdLnMuciE9WGUpJiYoVHQ9ITApLFl0WyJ0YWJsZTpudW1iZXItY29sdW1ucy1zcGFubmVkIl09TXRbdXRdLmUuYy1NdFt1dF0u'@;
put 'cy5jKzEsWXRbInRhYmxlOm51bWJlci1yb3dzLXNwYW5uZWQiXT1NdFt1dF0uZS5yLU10W3V0XS5zLnIrMTticmVha31pZihUdClVZS5wdXNoKCIgICAgICAgICAgPHRhYmxlOmNvdmVyZWQtdGFibGUtY2VsbC8+XG4iKTtlbHNle3ZhciBxbj1waSh7cjpYZSxjOml0fSksZm49d3Q/KHZlW1hl'@;
put 'XXx8W10pW2l0XTp2ZVtxbl07aWYoZm4mJmZuLmYmJihZdFsidGFibGU6Zm9ybXVsYSJdPUJyKGpBKGZuLmYpKSxmbi5GJiZmbi5GLnNsaWNlKDAscW4ubGVuZ3RoKT09cW4pKXt2YXIgS249S2EoZm4uRik7WXRbInRhYmxlOm51bWJlci1tYXRyaXgtY29sdW1ucy1zcGFubmVkIl09S24uZS5j'@;
put 'LUtuLnMuYysxLFl0WyJ0YWJsZTpudW1iZXItbWF0cml4LXJvd3Mtc3Bhbm5lZCJdPUtuLmUuci1Lbi5zLnIrMX1pZihmbil7c3dpdGNoKGZuLnQpe2Nhc2UiYiI6Z249Zm4udj8iVFJVRSI6IkZBTFNFIixZdFsib2ZmaWNlOnZhbHVlLXR5cGUiXT0iYm9vbGVhbiIsWXRbIm9mZmljZTpib29s'@;
put 'ZWFuLXZhbHVlIl09Zm4udj8idHJ1ZSI6ImZhbHNlIjticmVhaztjYXNlIm4iOmduPWZuLnd8fFN0cmluZyhmbi52fHwwKSxZdFsib2ZmaWNlOnZhbHVlLXR5cGUiXT0iZmxvYXQiLFl0WyJvZmZpY2U6dmFsdWUiXT1mbi52fHwwO2JyZWFrO2Nhc2UicyI6Y2FzZSJzdHIiOmduPWZuLnYsWXRb'@;
put 'Im9mZmljZTp2YWx1ZS10eXBlIl09InN0cmluZyI7YnJlYWs7Y2FzZSJkIjpnbj1mbi53fHxQdChmbi52KS50b0lTT1N0cmluZygpLFl0WyJvZmZpY2U6dmFsdWUtdHlwZSJdPSJkYXRlIixZdFsib2ZmaWNlOmRhdGUtdmFsdWUiXT1QdChmbi52KS50b0lTT1N0cmluZygpLFl0WyJ0YWJsZTpz'@;
put 'dHlsZS1uYW1lIl09ImNlMSI7YnJlYWs7ZGVmYXVsdDpVZS5wdXNoKEQpO2NvbnRpbnVlfW51bGwhPWZuLm9kcyYmIVl0WyJ0YWJsZTpzdHlsZS1uYW1lIl0mJihZdFsidGFibGU6c3R5bGUtbmFtZSJdPSJjZSIrZm4ub2RzKTt2YXIgem49IWZuLlJ8fGZuLmwmJmZuLmwuVGFyZ2V0P3coZ24p'@;
put 'OlAoZm4uUik7aWYoZm4ubCYmZm4ubC5UYXJnZXQpe3ZhciBPbj1mbi5sLlRhcmdldDsiIyIhPShPbj0iIyI9PU9uLmNoYXJBdCgwKT8iIyIrekEoT24uc2xpY2UoMSkpOk9uKS5jaGFyQXQoMCkmJiFPbi5tYXRjaCgvXlx3KzovKSYmKE9uPSIuLi8iK09uKSx6bj1NcigidGV4dDphIix6bix7'@;
put 'InhsaW5rOmhyZWYiOk9uLnJlcGxhY2UoLyYvZywiJmFtcDsiKX0pfVVlLnB1c2goIiAgICAgICAgICAiK01yKCJ0YWJsZTp0YWJsZS1jZWxsIixNcigidGV4dDpwIix6bix7fSksWXQpKyJcbiIpfWVsc2UgVWUucHVzaChEKX19VWUucHVzaCgiICAgICAgICA8L3RhYmxlOnRhYmxlLXJvdz5c'@;
put 'biIpfXJldHVybiBVZS5wdXNoKCIgICAgICA8L3RhYmxlOnRhYmxlPlxuIiksVWUuam9pbigiIil9LGdlPXtjZW50ZXI6ImNlbnRlciIsbGVmdDoic3RhcnQiLHJpZ2h0OiJlbmQifTtyZXR1cm4gZnVuY3Rpb24oTWUsamUpe3ZhciBVZT1bQm5dLFhlPUZsKHsieG1sbnM6b2ZmaWNlIjoidXJu'@;
put 'Om9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpvZmZpY2U6MS4wIiwieG1sbnM6dGFibGUiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnRhYmxlOjEuMCIsInhtbG5zOnN0eWxlIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpz'@;
put 'dHlsZToxLjAiLCJ4bWxuczp0ZXh0IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczp0ZXh0OjEuMCIsInhtbG5zOmRyYXciOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmRyYXdpbmc6MS4wIiwieG1sbnM6Zm8iOiJ1cm46b2FzaXM6bmFtZXM6'@;
put 'dGM6b3BlbmRvY3VtZW50OnhtbG5zOnhzbC1mby1jb21wYXRpYmxlOjEuMCIsInhtbG5zOnhsaW5rIjoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsInhtbG5zOmRjIjoiaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iLCJ4bWxuczptZXRhIjoidXJuOm9hc2lzOm5hbWVz'@;
put 'OnRjOm9wZW5kb2N1bWVudDp4bWxuczptZXRhOjEuMCIsInhtbG5zOm51bWJlciI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6ZGF0YXN0eWxlOjEuMCIsInhtbG5zOnByZXNlbnRhdGlvbiI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6cHJl'@;
put 'c2VudGF0aW9uOjEuMCIsInhtbG5zOnN2ZyI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6c3ZnLWNvbXBhdGlibGU6MS4wIiwieG1sbnM6Y2hhcnQiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmNoYXJ0OjEuMCIsInhtbG5zOmRyM2QiOiJ1'@;
put 'cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmRyM2Q6MS4wIiwieG1sbnM6bWF0aCI6Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiLCJ4bWxuczpmb3JtIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpmb3JtOjEuMCIsInhtbG5z'@;
put 'OnNjcmlwdCI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6c2NyaXB0OjEuMCIsInhtbG5zOm9vbyI6Imh0dHA6Ly9vcGVub2ZmaWNlLm9yZy8yMDA0L29mZmljZSIsInhtbG5zOm9vb3ciOiJodHRwOi8vb3Blbm9mZmljZS5vcmcvMjAwNC93cml0ZXIiLCJ4bWxuczpv'@;
put 'b29jIjoiaHR0cDovL29wZW5vZmZpY2Uub3JnLzIwMDQvY2FsYyIsInhtbG5zOmRvbSI6Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLWV2ZW50cyIsInhtbG5zOnhmb3JtcyI6Imh0dHA6Ly93d3cudzMub3JnLzIwMDIveGZvcm1zIiwieG1sbnM6eHNkIjoiaHR0cDovL3d3dy53My5vcmcv'@;
put 'MjAwMS9YTUxTY2hlbWEiLCJ4bWxuczp4c2kiOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIsInhtbG5zOnNoZWV0IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDpzaDMzdGpzOjEuMCIsInhtbG5zOnJwdCI6Imh0dHA6Ly9vcGVub2ZmaWNlLm9y'@;
put 'Zy8yMDA1L3JlcG9ydCIsInhtbG5zOm9mIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpvZjoxLjIiLCJ4bWxuczp4aHRtbCI6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJ4bWxuczpncmRkbCI6Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvZy9kYXRhLXZp'@;
put 'ZXcjIiwieG1sbnM6dGFibGVvb28iOiJodHRwOi8vb3Blbm9mZmljZS5vcmcvMjAwOS90YWJsZSIsInhtbG5zOmRyYXdvb28iOiJodHRwOi8vb3Blbm9mZmljZS5vcmcvMjAxMC9kcmF3IiwieG1sbnM6Y2FsY2V4dCI6InVybjpvcmc6ZG9jdW1lbnRmb3VuZGF0aW9uOm5hbWVzOmV4cGVyaW1l'@;
put 'bnRhbDpjYWxjOnhtbG5zOmNhbGNleHQ6MS4wIiwieG1sbnM6bG9leHQiOiJ1cm46b3JnOmRvY3VtZW50Zm91bmRhdGlvbjpuYW1lczpleHBlcmltZW50YWw6b2ZmaWNlOnhtbG5zOmxvZXh0OjEuMCIsInhtbG5zOmZpZWxkIjoidXJuOm9wZW5vZmZpY2U6bmFtZXM6ZXhwZXJpbWVudGFsOm9v'@;
put 'by1tcy1pbnRlcm9wOnhtbG5zOmZpZWxkOjEuMCIsInhtbG5zOmZvcm14IjoidXJuOm9wZW5vZmZpY2U6bmFtZXM6ZXhwZXJpbWVudGFsOm9veG1sLW9kZi1pbnRlcm9wOnhtbG5zOmZvcm06MS4wIiwieG1sbnM6Y3NzM3QiOiJodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXRleHQvIiwib2Zm'@;
put 'aWNlOnZlcnNpb24iOiIxLjIifSksaXQ9RmwoeyJ4bWxuczpjb25maWciOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmNvbmZpZzoxLjAiLCJvZmZpY2U6bWltZXR5cGUiOiJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0In0pOyJm'@;
put 'b2RzIj09amUuYm9va1R5cGU/KFVlLnB1c2goIjxvZmZpY2U6ZG9jdW1lbnQiK1hlK2l0KyI+XG4iKSxVZS5wdXNoKF9tKCkucmVwbGFjZSgvb2ZmaWNlOmRvY3VtZW50LW1ldGEvZywib2ZmaWNlOm1ldGEiKSkpOlVlLnB1c2goIjxvZmZpY2U6ZG9jdW1lbnQtY29udGVudCIrWGUrIj5cbiIp'@;
put 'LGZ1bmN0aW9uKHZlLE1lKXt2YXIgamU9W10sVWU9e307amUucHVzaCgiIDxvZmZpY2U6YXV0b21hdGljLXN0eWxlcz5cbiIpLGplLnB1c2goJyAgPG51bWJlcjpkYXRlLXN0eWxlIHN0eWxlOm5hbWU9Ik4zNyIgbnVtYmVyOmF1dG9tYXRpYy1vcmRlcj0idHJ1ZSI+XG4nKSxqZS5wdXNoKCcg'@;
put 'ICA8bnVtYmVyOm1vbnRoIG51bWJlcjpzdHlsZT0ibG9uZyIvPlxuJyksamUucHVzaCgiICAgPG51bWJlcjp0ZXh0Pi88L251bWJlcjp0ZXh0PlxuIiksamUucHVzaCgnICAgPG51bWJlcjpkYXkgbnVtYmVyOnN0eWxlPSJsb25nIi8+XG4nKSxqZS5wdXNoKCIgICA8bnVtYmVyOnRleHQ+Lzwv'@;
put 'bnVtYmVyOnRleHQ+XG4iKSxqZS5wdXNoKCIgICA8bnVtYmVyOnllYXIvPlxuIiksamUucHVzaCgiICA8L251bWJlcjpkYXRlLXN0eWxlPlxuIik7dmFyIFhlPTA7TWUuU2hlZXROYW1lcy5tYXAoZnVuY3Rpb24odXQpe3JldHVybiBNZS5TaGVldHNbdXRdfSkuZm9yRWFjaChmdW5jdGlvbih1'@;
put 'dCl7aWYodXQmJnV0WyIhY29scyJdKWZvcih2YXIgd3Q9MDt3dDx1dFsiIWNvbHMiXS5sZW5ndGg7Kyt3dClpZih1dFsiIWNvbHMiXVt3dF0pe3ZhciBIdD11dFsiIWNvbHMiXVt3dF07aWYobnVsbD09SHQud2lkdGgmJm51bGw9PUh0LndweCYmbnVsbD09SHQud2NoKWNvbnRpbnVlO19jKEh0'@;
put 'KSxIdC5vZHM9WGU7dmFyIGt0PXV0WyIhY29scyJdW3d0XS53cHgrInB4IjtqZS5wdXNoKCcgIDxzdHlsZTpzdHlsZSBzdHlsZTpuYW1lPSJjbycrWGUrJyIgc3R5bGU6ZmFtaWx5PSJ0YWJsZS1jb2x1bW4iPlxuJyksamUucHVzaCgnICAgPHN0eWxlOnRhYmxlLWNvbHVtbi1wcm9wZXJ0aWVz'@;
put 'IGZvOmJyZWFrLWJlZm9yZT0iYXV0byIgc3R5bGU6Y29sdW1uLXdpZHRoPSInK2t0KyciLz5cbicpLGplLnB1c2goIiAgPC9zdHlsZTpzdHlsZT5cbiIpLCsrWGV9fSk7dmFyIGl0PTA7TWUuU2hlZXROYW1lcy5tYXAoZnVuY3Rpb24odXQpe3JldHVybiBNZS5TaGVldHNbdXRdfSkuZm9yRWFj'@;
put 'aChmdW5jdGlvbih1dCl7aWYodXQmJnV0WyIhcm93cyJdKWZvcih2YXIgd3Q9MDt3dDx1dFsiIXJvd3MiXS5sZW5ndGg7Kyt3dClpZih1dFsiIXJvd3MiXVt3dF0pe3V0WyIhcm93cyJdW3d0XS5vZHM9aXQ7dmFyIEh0PXV0WyIhcm93cyJdW3d0XS5ocHgrInB4IjtqZS5wdXNoKCcgIDxzdHls'@;
put 'ZTpzdHlsZSBzdHlsZTpuYW1lPSJybycraXQrJyIgc3R5bGU6ZmFtaWx5PSJ0YWJsZS1yb3ciPlxuJyksamUucHVzaCgnICAgPHN0eWxlOnRhYmxlLXJvdy1wcm9wZXJ0aWVzIGZvOmJyZWFrLWJlZm9yZT0iYXV0byIgc3R5bGU6cm93LWhlaWdodD0iJytIdCsnIi8+XG4nKSxqZS5wdXNoKCIg'@;
put 'IDwvc3R5bGU6c3R5bGU+XG4iKSwrK2l0fX0pLGplLnB1c2goJyAgPHN0eWxlOnN0eWxlIHN0eWxlOm5hbWU9InRhMSIgc3R5bGU6ZmFtaWx5PSJ0YWJsZSIgc3R5bGU6bWFzdGVyLXBhZ2UtbmFtZT0ibXAxIj5cbicpLGplLnB1c2goJyAgIDxzdHlsZTp0YWJsZS1wcm9wZXJ0aWVzIHRhYmxl'@;
put 'OmRpc3BsYXk9InRydWUiIHN0eWxlOndyaXRpbmctbW9kZT0ibHItdGIiLz5cbicpLGplLnB1c2goIiAgPC9zdHlsZTpzdHlsZT5cbiIpLGplLnB1c2goJyAgPHN0eWxlOnN0eWxlIHN0eWxlOm5hbWU9ImNlMSIgc3R5bGU6ZmFtaWx5PSJ0YWJsZS1jZWxsIiBzdHlsZTpwYXJlbnQtc3R5bGUt'@;
put 'bmFtZT0iRGVmYXVsdCIgc3R5bGU6ZGF0YS1zdHlsZS1uYW1lPSJOMzciLz5cbicpO3ZhciBmdD0yO2l0PTAsTWUuU2hlZXROYW1lcy5tYXAoZnVuY3Rpb24odXQpe3JldHVybiBNZS5TaGVldHNbdXRdfSkuZm9yRWFjaChmdW5jdGlvbih1dCl7aWYodXQpZm9yKHZhciB3dD0wLEh0PTAsa3Q9'@;
put 'S2EodXRbIiFyZWYiXSksVHQ9QXJyYXkuaXNBcnJheSh1dCk7d3Q8PWt0LmUucjsrK3d0KWZvcihIdD0wO0h0PD1rdC5lLmM7KytIdCl7dmFyIFl0PXBpKHtyOnd0LGM6SHR9KSxnbj1UdD8odXRbd3RdfHxbXSlbSHRdOnV0W1l0XTtpZihnbiYmKGduLnN8fGduLlIpKXt2YXIgcW49W107Z24u'@;
put 'cyYmcW4ucHVzaChbZ24sITBdKSxnbi5SJiZnbi5SLmZvckVhY2goZnVuY3Rpb24oZm4pe2ZuJiZmbi5zJiZxbi5wdXNoKFtmbiwhMV0pfSkscW4uZm9yRWFjaChmdW5jdGlvbihmbil7dmFyIEtuPWZuWzBdLHpuPUtuLnMsT249IiIsZXI9eyJzdHlsZTpuYW1lIjooZm5bMV0/ImNlIjoiVCIp'@;
put 'K2Z0LCJzdHlsZTpmYW1pbHkiOmZuWzFdPyJ0YWJsZS1jZWxsIjoidGV4dCJ9O2ZuWzFdJiYoZXJbInN0eWxlOnBhcmVudC1zdHlsZS1uYW1lIl09IkRlZmF1bHQiLGVyWyJzdHlsZTpkYXRhLXN0eWxlLW5hbWUiXT0iTjAiKTt2YXIgdHI9e30sWW49ITEsanI9e30sbGk9ITEsRWk9e30sSWk9'@;
put 'ITE7aWYoem4uY29sb3ImJihqclsiZm86Y29sb3IiXT0iIyIrVWMoem4uY29sb3IucmdiKSxsaT0hMCksem4uc3omJihqclsiZm86Zm9udC1zaXplIl09em4uc3orInB0IixsaT0hMCksem4uYm9sZCYmKGpyWyJmbzpmb250LXdlaWdodCJdPSJib2xkIixsaT0hMCksem4uaXRhbGljJiYoanJb'@;
put 'ImZvOmZvbnQtc3R5bGUiXT0iaXRhbGljIixsaT0hMCksem4ubmFtZSYmKFVlW3puLm5hbWVdfHwoVWVbem4ubmFtZV09em4ubmFtZS5tYXRjaCgvIC8pPyImYXBvczsiK3puLm5hbWUrIiZhcG9zOyI6em4ubmFtZSksanJbInN0eWxlOmZvbnQtbmFtZSJdPXpuLm5hbWUsbGk9ITApLHpuLnN0'@;
put 'cmlrZSYmKGpyWyJzdHlsZTp0ZXh0LWxpbmUtdGhyb3VnaC1zdHlsZSJdPSJzb2xpZCIsanJbInN0eWxlOnRleHQtbGluZS10aHJvdWdoLXR5cGUiXT0ic2luZ2xlIixsaT0hMCksem4udW5kZXJsaW5lJiYoanJbInN0eWxlOnRleHQtdW5kZXJsaW5lLXN0eWxlIl09InNvbGlkIixqclsic3R5'@;
put 'bGU6dGV4dC11bmRlcmxpbmUtd2lkdGgiXT0iYXV0byIsanJbInN0eWxlOnRleHQtdW5kZXJsaW5lLWNvbG9yIl09ImZvbnQtY29sb3IiLGxpPSEwKSxmblsxXSl7aWYoem4uYWxpZ25tZW50KXt2YXIgdGk9em4uYWxpZ25tZW50O3RpLndyYXBUZXh0JiYodHJbImZvOndyYXAtb3B0aW9uIl09'@;
put 'IndyYXAiLFluPSEwKSx0aS52ZXJ0aWNhbCYmKHRyWyJzdHlsZTp2ZXJ0aWNhbC1hbGlnbiJdPSJjZW50ZXIiPT10aS52ZXJ0aWNhbD8ibWlkZGxlIjp0aS52ZXJ0aWNhbCxZbj0hMCksZ2VbdGkuaG9yaXpvbnRhbF0mJihFaVsiZm86dGV4dC1hbGlnbiJdPWdlW3RpLmhvcml6b250YWxdLElp'@;
put 'PSEwKX16bi5mZ0NvbG9yJiYodHJbImZvOmJhY2tncm91bmQtY29sb3IiXT0iIyIrVWMoem4uZmdDb2xvci5yZ2IpLFluPSEwKX1ZbiYmKE9uKz1Ncigic3R5bGU6dGFibGUtY2VsbC1wcm9wZXJ0aWVzIixudWxsLHRyKSksbGkmJihPbis9TXIoInN0eWxlOnRleHQtcHJvcGVydGllcyIsbnVs'@;
put 'bCxqcikpLElpJiYoT24rPU1yKCJzdHlsZTpwYXJhZ3JhcGgtcHJvcGVydGllcyIsbnVsbCxFaSkpLGplLnB1c2goIiAgIitNcigic3R5bGU6c3R5bGUiLE9uLGVyKSsiXG4iKSxLbi5vZHM9ZnQsKytmdH0pfX19KSxqZS5wdXNoKCIgPC9vZmZpY2U6YXV0b21hdGljLXN0eWxlcz5cbiIpO3Zh'@;
put 'ciBNdD0iIDxvZmZpY2U6Zm9udC1mYWNlLWRlY2xzPlxuIittdChVZSkubWFwKGZ1bmN0aW9uKHV0KXtyZXR1cm4nICA8c3R5bGU6Zm9udC1mYWNlIHN0eWxlOm5hbWU9IicrdXQrJyIgc3ZnOmZvbnQtZmFtaWx5PSInK1VlW3V0XSsnIi8+XG4nfSkuam9pbigiIikrIiA8L29mZmljZTpmb250'@;
put 'LWZhY2UtZGVjbHM+XG4iO3ZlLnB1c2goTXQpLHZlLnB1c2goamUuam9pbigiIikpfShVZSxNZSksVWUucHVzaCgiICA8b2ZmaWNlOmJvZHk+XG4iKSxVZS5wdXNoKCIgICAgPG9mZmljZTpzcHJlYWRzaGVldD5cbiIpO2Zvcih2YXIgZnQ9MDtmdCE9TWUuU2hlZXROYW1lcy5sZW5ndGg7Kytm'@;
put 'dClVZS5wdXNoKG9lKE1lLlNoZWV0c1tNZS5TaGVldE5hbWVzW2Z0XV0sTWUsZnQpKTtyZXR1cm4gVWUucHVzaCgiICAgIDwvb2ZmaWNlOnNwcmVhZHNoZWV0PlxuIiksVWUucHVzaCgiICA8L29mZmljZTpib2R5PlxuIiksVWUucHVzaCgiZm9kcyI9PWplLmJvb2tUeXBlPyI8L29mZmljZTpk'@;
put 'b2N1bWVudD4iOiI8L29mZmljZTpkb2N1bWVudC1jb250ZW50PiIpLFVlLmpvaW4oIiIpfX0oKTtmdW5jdGlvbiBUMCh3LFApe2lmKCJmb2RzIj09UC5ib29rVHlwZSlyZXR1cm4gQTAodyxQKTt2YXIgRD1NbigpLGVlPSIiLG9lPVtdLGdlPVtdO3JldHVybiBHdChELGVlPSJtaW1ldHlwZSIs'@;
put 'ImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXQiKSxHdChELGVlPSJjb250ZW50LnhtbCIsQTAodyxQKSksb2UucHVzaChbZWUsInRleHQveG1sIl0pLGdlLnB1c2goW2VlLCJDb250ZW50RmlsZSJdKSxHdChELGVlPSJzdHlsZXMueG1sIixiZih3LFApKSxv'@;
put 'ZS5wdXNoKFtlZSwidGV4dC94bWwiXSksZ2UucHVzaChbZWUsIlN0eWxlc0ZpbGUiXSksR3QoRCxlZT0ibWV0YS54bWwiLEJuK19tKCkpLG9lLnB1c2goW2VlLCJ0ZXh0L3htbCJdKSxnZS5wdXNoKFtlZSwiTWV0YWRhdGFGaWxlIl0pLEd0KEQsZWU9Im1hbmlmZXN0LnJkZiIsZnVuY3Rpb24g'@;
put 'ZzIodyl7dmFyIFA9W0JuXTtQLnB1c2goJzxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+XG4nKTtmb3IodmFyIEQ9MDtEIT13Lmxlbmd0aDsrK0QpUC5wdXNoKFExKHdbRF1bMF0sd1tEXVsxXSkpLFAucHVzaChabygiIix3'@;
put 'W0RdWzBdKSk7cmV0dXJuIFAucHVzaChRMSgiIiwiRG9jdW1lbnQiLCJwa2ciKSksUC5wdXNoKCI8L3JkZjpSREY+IiksUC5qb2luKCIiKX0oZ2UpKSxvZS5wdXNoKFtlZSwiYXBwbGljYXRpb24vcmRmK3htbCJdKSxHdChELGVlPSJNRVRBLUlORi9tYW5pZmVzdC54bWwiLGZ1bmN0aW9uIHFm'@;
put 'KHcpe3ZhciBQPVtCbl07UC5wdXNoKCc8bWFuaWZlc3Q6bWFuaWZlc3QgeG1sbnM6bWFuaWZlc3Q9InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6bWFuaWZlc3Q6MS4wIiBtYW5pZmVzdDp2ZXJzaW9uPSIxLjIiPlxuJyksUC5wdXNoKCcgIDxtYW5pZmVzdDpmaWxlLWVu'@;
put 'dHJ5IG1hbmlmZXN0OmZ1bGwtcGF0aD0iLyIgbWFuaWZlc3Q6dmVyc2lvbj0iMS4yIiBtYW5pZmVzdDptZWRpYS10eXBlPSJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0Ii8+XG4nKTtmb3IodmFyIEQ9MDtEPHcubGVuZ3RoOysrRClQLnB1c2goJyAgPG1h'@;
put 'bmlmZXN0OmZpbGUtZW50cnkgbWFuaWZlc3Q6ZnVsbC1wYXRoPSInK3dbRF1bMF0rJyIgbWFuaWZlc3Q6bWVkaWEtdHlwZT0iJyt3W0RdWzFdKyciLz5cbicpO3JldHVybiBQLnB1c2goIjwvbWFuaWZlc3Q6bWFuaWZlc3Q+IiksUC5qb2luKCIiKX0ob2UpKSxEfWZ1bmN0aW9uIF9mKHcpe3Jl'@;
put 'dHVybiBmdW5jdGlvbihELGVlKXt2YXIgb2U9ZnVuY3Rpb24gc08odyxQKXtpZighUClyZXR1cm4gMDt2YXIgRD13LlNoZWV0TmFtZXMuaW5kZXhPZihQKTtpZigtMT09RCl0aHJvdyBuZXcgRXJyb3IoIlNoZWV0IG5vdCBmb3VuZDogIitQKTtyZXR1cm4gRH0oRCxlZS5zaGVldCk7cmV0dXJu'@;
put 'IHcuZnJvbV9zaGVldChELlNoZWV0c1tELlNoZWV0TmFtZXNbb2VdXSxlZSxEKX19dmFyIEpWPV9mKFljKSxRVj1fZih7ZnJvbV9zaGVldDpLc30pLGVCPV9mKHR5cGVvZiBzXzwidSI/c186e30pLHRCPV9mKHR5cGVvZiBncDwidSI/Z3A6e30pLFp3PV9mKHR5cGVvZiB1ZjwidSI/dWY6e30p'@;
put 'LHZnPV9mKHR5cGVvZiBkODwidSI/ZDg6e30pLG5CPV9mKHtmcm9tX3NoZWV0Om1CfSksdU89X2YodHlwZW9mIHNoPCJ1Ij9zaDp7fSksckI9X2YodHlwZW9mIERtPCJ1Ij9EbTp7fSkscHU9VCg3NzkwMyl8fHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuY3J5cHRvQnJvd3NlcmlmeTtpZigh'@;
put 'cHUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBjcnlwdG8gZXh0ZW5zaW9ucyEiKTt2YXIgWXc9e1NIQTUxMjoic2hhNTEyIixTSEEyNTY6InNoYTI1NiIsU0hBMzg0OiJzaGEzODQiLFNIQTE6InNoYTEiLE1ENToibWQ1IixNRDQ6Im1kNCIsTUQyOiJtZDIifTtmdW5jdGlvbiB0cyh3'@;
put 'LFApe3N3aXRjaChQPShQfHwiIikucmVwbGFjZSgvLS9nLCIiKSl7Y2FzZSJTSEEtNTEyIjpjYXNlIlNIQTUxMiI6cmV0dXJuIG5ldyBwdS5jcmVhdGVIYXNoKCJzaGE1MTIiKS51cGRhdGUodykuZGlnZXN0KCk7Y2FzZSJTSEEtMSI6Y2FzZSJTSEExIjpyZXR1cm4gbmV3IHB1LmNyZWF0ZUhh'@;
put 'c2goInNoYTEiKS51cGRhdGUodykuZGlnZXN0KCk7Y2FzZSJNRDIiOnJldHVybiBuZXcgcHUuY3JlYXRlSGFzaCgibWQyIikudXBkYXRlKHcpLmRpZ2VzdCgpO2RlZmF1bHQ6aWYoWXdbUF0pcmV0dXJuIG5ldyBwdS5jcmVhdGVIYXNoKFl3W1BdKS51cGRhdGUodykuZGlnZXN0KCk7dGhyb3cg'@;
put 'bmV3IEVycm9yKCJVbnN1cHBvcnRlZCBoYXNoIGFsZ29yaXRobSAiK1ApfX1mdW5jdGlvbiB3Zih3LFAsRCl7aWYoInJjMiI9PUQpdGhyb3ciVW5zdXBwb3J0ZWQgUkMyIjt2YXIgZWU9cHUuY3JlYXRlRGVjaXBoZXJpdihEfHwiYWVzLTI1Ni1jYmMiLHcsUCk7cmV0dXJuIGVlLnNldEF1dG9Q'@;
put 'YWRkaW5nKCExKSxlZX1mdW5jdGlvbiBjdih3KXtyZXR1cm5bKCIwMCIrKDI1NSZ3KS50b1N0cmluZygxNikpLnNsaWNlKC0yKSwoIjAwIisodz4+PjgmMjU1KS50b1N0cmluZygxNikpLnNsaWNlKC0yKSwoIjAwIisodz4+PjE2JjI1NSkudG9TdHJpbmcoMTYpKS5zbGljZSgtMiksKCIwMCIr'@;
put 'KHc+Pj4yNCYyNTUpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpXS5qb2luKCIiKX12YXIgZnY9ZnVuY3Rpb24odyxQLEQpe2Zvcih2YXIgZWU9InN0cmluZyI9PXR5cGVvZiBQP0J1ZmZlci5mcm9tKFAsImhleCIpOlAsb2U9InN0cmluZyI9PXR5cGVvZiB3P0J1ZmZlci5mcm9tKGNwdGFibGUu'@;
put 'dXRpbHMuZW5jb2RlKDEyMDAsdykpOncsZ2U9InN0cmluZyI9PXR5cGVvZiBEP0J1ZmZlci5mcm9tKEQsImhleCIpOkQsX2U9dHMob2UsIk1ENSIpLHZlPUJ1ZmZlci5jb25jYXQoW19lLnNsaWNlKDAsNSksZWVdKSxNZT0wO01lPDQ7KytNZSl2ZT1CdWZmZXIuY29uY2F0KFt2ZSx2ZV0pO3Zh'@;
put 'ciBqZT10cyh2ZSwiTUQ1Iik7cmV0dXJuKHRzKEJ1ZmZlci5jb25jYXQoW2plLnNsaWNlKDAsNSksZ2VdKSwiTUQ1IikudG9TdHJpbmcoImhleCIpKyIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIpLnNsaWNlKDAsMzIpfSx3cj1mdW5jdGlvbih3LFAsRCl7dmFyIGVlPSJzdHJp'@;
put 'bmciPT10eXBlb2YgUD9CdWZmZXIuZnJvbShQLCJoZXgiKTpQLG9lPSJzdHJpbmciPT10eXBlb2Ygdz9CdWZmZXIuZnJvbShjcHRhYmxlLnV0aWxzLmVuY29kZSgxMjAwLHcpKTp3LGdlPSJzdHJpbmciPT10eXBlb2YgRD9CdWZmZXIuZnJvbShELCJoZXgiKTpELF9lPXRzKEJ1ZmZlci5jb25j'@;
put 'YXQoW2VlLG9lXSksIlNIQTEiKTtyZXR1cm4gdHMoQnVmZmVyLmNvbmNhdChbX2UsZ2VdKSwiU0hBMSIpfSxPMD1mdW5jdGlvbigpe2Z1bmN0aW9uIFAoKXt9UC5wcm90b3R5cGUuYnVpbGQ9ZnVuY3Rpb24odXQpe3RoaXMuX2k9MDt2YXIgd3Q9dGhpcy5fYnVpbGQodXQsIiIpO3JldHVybiIi'@;
put 'PT09d3Q/IiI6Jzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4nK3d0fSxQLnByb3RvdHlwZS5fYnVpbGQ9ZnVuY3Rpb24odXQsd3Qpe2lmKHRoaXMuX2krKyUxZTY9PTAmJih0aGlzLl9jPXd0WzBdKSxudWxsPT11dHx8Im9iamVjdCIhPXR5'@;
put 'cGVvZiB1dCYmImZ1bmN0aW9uIiE9dHlwZW9mIHV0KW51bGwhPXV0JiYod3QrPWZ1bmN0aW9uIHcodXQsd3Qpe3JldHVybiBudWxsPT11dHx8KHV0PXV0LnRvU3RyaW5nKCkucmVwbGFjZSgvJi9nLCImYW1wOyIpLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpLHd0'@;
put 'JiYodXQ9dXQucmVwbGFjZSgvIi9nLCImcXVvdDsiKSkpLHV0fSh1dCkpO2Vsc2V7aWYoIXV0Lm5hbWUpdGhyb3cgbmV3IEVycm9yKCJYTUwgbm9kZSBkb2VzIG5vdCBoYXZlIG5hbWU6ICIrSlNPTi5zdHJpbmdpZnkodXQpKTt3dCs9IjwiK3V0Lm5hbWU7dmFyIEh0PXRoaXM7d3QrPXV0LmF0'@;
put 'dHJpYnV0ZXMmJkZsKHV0LmF0dHJpYnV0ZXMpfHwiIixBcnJheS5pc0FycmF5KHV0LmNoaWxkcmVuKSYmMCE9dXQuY2hpbGRyZW4ubGVuZ3RoPyh3dCs9Ij4iLHV0LmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oa3Qpe3d0PUh0Ll9idWlsZChrdCx3dCl9KSx3dCs9IjwvIit1dC5uYW1lKyI+'@;
put 'Iik6d3QrPSIvPiJ9cmV0dXJuIHd0fTt2YXIgRD1CdWZmZXIuZnJvbShbNCwwLDQsMCw2NCwwLDAsMF0pLGdlPXtkYXRhSW50ZWdyaXR5OntobWFjS2V5OkJ1ZmZlci5mcm9tKFs5NSwxNzgsMTczLDEsMTIsMTg1LDIyNSwyNDZdKSxobWFjVmFsdWU6QnVmZmVyLmZyb20oWzE2MCwxMDMsMTI3'@;
put 'LDIsMTc4LDQ0LDEzMiw1MV0pfSxrZXk6QnVmZmVyLmZyb20oWzIwLDExMCwxMSwyMzEsMTcxLDE3MiwyMDgsMjE0XSksdmVyaWZpZXJIYXNoOntpbnB1dDpCdWZmZXIuZnJvbShbMjU0LDE2NywyMTAsMTE4LDU5LDc1LDE1OCwxMjFdKSx2YWx1ZTpCdWZmZXIuZnJvbShbMjE1LDE3MCwxNSwx'@;
put 'MDksNDgsOTcsNTIsNzhdKX19O2Z1bmN0aW9uIF9lKHV0LHd0LEh0LGt0LFR0LFl0KXt2YXIgZ249d3QudG9Mb3dlckNhc2UoKSsiLSIrOCprdC5sZW5ndGg7aWYoIkNoYWluaW5nTW9kZUNCQyIhPT1IdCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gY2lwaGVyIGNoYWluaW5nOiAiK0h0KTt2'@;
put 'YXIgcW49cHVbdXQ/ImNyZWF0ZUNpcGhlcml2IjoiY3JlYXRlRGVjaXBoZXJpdiJdKGduKz0iLWNiYyIsa3QsVHQpO3FuLnNldEF1dG9QYWRkaW5nKCExKTt2YXIgZm49cW4udXBkYXRlKFl0KSxLbj1bZm5dO3RyeXt2YXIgem49cW4uZmluYWwoKTtLbi5wdXNoKHpuKX1jYXRjaHt9cmV0dXJu'@;
put 'IEJ1ZmZlci5jb25jYXQoS24pfWZ1bmN0aW9uIHZlKHV0KXt1dD11dC50b0xvd2VyQ2FzZSgpO3ZhciB3dD1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtpZihwdS5nZXRIYXNoZXMoKS5pbmRleE9mKHV0KTwwKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgaGFzaCBhbGdvcml0aG0g'@;
put 'Iit1dCk7dmFyIGt0PXB1LmNyZWF0ZUhhc2godXQpO3JldHVybiBrdC51cGRhdGUoQnVmZmVyLmNvbmNhdCh3dCkpLGt0LmRpZ2VzdCgpfWZ1bmN0aW9uIE1lKHV0LHd0LEh0LGt0KXsibnVtYmVyIj09dHlwZW9mIGt0JiYoa3Q9amUoa3QpKTt2YXIgVHQ9dmUodXQsd3Qsa3QpO2lmKFR0Lmxl'@;
put 'bmd0aDxIdCl7dmFyIFl0PUJ1ZmZlci5hbGxvYyhIdCw1NCk7VHQuY29weShZdCksVHQ9WXR9ZWxzZSBUdC5sZW5ndGg+SHQmJihUdD1UdC5zbGljZSgwLEh0KSk7cmV0dXJuIFR0fWZ1bmN0aW9uIGplKHV0LHd0KXt2YXIgSHQ9QnVmZmVyLmFsbG9jKHd0fHw0KTtyZXR1cm4gSHQud3JpdGVV'@;
put 'SW50MzJMRSh1dCwwKSxIdH1mdW5jdGlvbiBVZSh1dCx3dCxIdCxrdCxUdCxZdCl7Zm9yKHZhciBxbj12ZSh3dCxIdCxCdWZmZXIuZnJvbSh1dCwidXRmMTZsZSIpKSxmbj0wO2ZuPGt0O2ZuKyspcW49dmUod3QsamUoZm4pLHFuKTt2YXIgem49VHQvODtpZigocW49dmUod3QscW4sWXQpKS5s'@;
put 'ZW5ndGg8em4pe3ZhciBPbj1CdWZmZXIuYWxsb2Moem4sNTQpO3FuLmNvcHkoT24pLHFuPU9ufWVsc2UgcW4ubGVuZ3RoPnpuJiYocW49cW4uc2xpY2UoMCx6bikpO3JldHVybiBxbn1yZXR1cm4gcHUucmFuZG9tQnl0ZXN8fChwdS5yYW5kb21CeXRlcz1mdW5jdGlvbih1dCl7Zm9yKHZhciB3'@;
put 'dD1CdWZmZXIuYWxsb2ModXQpLEh0PTA7SHQ8dXQ7KytIdCl3dFtIdF09TWF0aC5mbG9vcigyNTYqTWF0aC5yYW5kb20oKSk7cmV0dXJuIHd0fSksZnVuY3Rpb24gTXQodXQsd3Qpe2lmKCJzdHJpbmciPT10eXBlb2YgdXQpcmV0dXJuIE10KEJ1ZmZlci5mcm9tKHV0LCJiaW5hcnkiKSx3dCk7'@;
put 'dmFyIEh0PXB1LnJhbmRvbUJ5dGVzKDMyKSxrdD17cGFja2FnZTp7Y2lwaGVyQWxnb3JpdGhtOiJBRVMiLGNpcGhlckNoYWluaW5nOiJDaGFpbmluZ01vZGVDQkMiLHNhbHRWYWx1ZTpwdS5yYW5kb21CeXRlcygxNiksaGFzaEFsZ29yaXRobToiU0hBNTEyIixoYXNoU2l6ZTo2NCxibG9ja1Np'@;
put 'emU6MTYsa2V5Qml0czo4Kkh0Lmxlbmd0aH0sa2V5OntjaXBoZXJBbGdvcml0aG06IkFFUyIsY2lwaGVyQ2hhaW5pbmc6IkNoYWluaW5nTW9kZUNCQyIsc2FsdFZhbHVlOnB1LnJhbmRvbUJ5dGVzKDE2KSxoYXNoQWxnb3JpdGhtOiJTSEE1MTIiLGhhc2hTaXplOjY0LGJsb2NrU2l6ZToxNixz'@;
put 'cGluQ291bnQ6MSxrZXlCaXRzOjI1Nn19LFR0PWZ1bmN0aW9uIFhlKHV0LHd0LEh0LGt0LFR0LFl0LGduLHFuKXtmb3IodmFyIGZuPVtdLEtuPXV0PzA6OCx6bj0wLE9uPTAsZXI9MDtlcjxxbi5sZW5ndGg7KXsoZXI9KE9uPWVyKSs0MDk2KT5xbi5sZW5ndGgmJihlcj1xbi5sZW5ndGgpO3Zh'@;
put 'ciB0cj1xbi5zbGljZShPbitLbixlcitLbiksWW49dHIubGVuZ3RoJVR0O1luJiYodHI9QnVmZmVyLmNvbmNhdChbdHIsQnVmZmVyLmFsbG9jKFR0LVluKV0pKTt2YXIgbGk9X2UodXQsd3QsSHQsZ24sTWUoa3QsWXQsVHQsem4pLHRyKTtmbi5wdXNoKGxpKSx6bisrfXZhciBFaT1CdWZmZXIu'@;
put 'Y29uY2F0KGZuKTtpZih1dClFaT1CdWZmZXIuY29uY2F0KFtqZShxbi5sZW5ndGgsOCksRWldKTtlbHNle3ZhciBJaT1xbi5yZWFkVUludDMyTEUoMCk7RWk9RWkuc2xpY2UoMCxJaSl9cmV0dXJuIEVpfSghMCxrdC5wYWNrYWdlLmNpcGhlckFsZ29yaXRobSxrdC5wYWNrYWdlLmNpcGhlckNo'@;
put 'YWluaW5nLGt0LnBhY2thZ2UuaGFzaEFsZ29yaXRobSxrdC5wYWNrYWdlLmJsb2NrU2l6ZSxrdC5wYWNrYWdlLnNhbHRWYWx1ZSxIdCx1dCksWXQ9cHUucmFuZG9tQnl0ZXMoNjQpLGduPU1lKGt0LnBhY2thZ2UuaGFzaEFsZ29yaXRobSxrdC5wYWNrYWdlLnNhbHRWYWx1ZSxrdC5wYWNrYWdl'@;
put 'LmJsb2NrU2l6ZSxnZS5kYXRhSW50ZWdyaXR5LmhtYWNLZXkpLHFuPV9lKCEwLGt0LnBhY2thZ2UuY2lwaGVyQWxnb3JpdGhtLGt0LnBhY2thZ2UuY2lwaGVyQ2hhaW5pbmcsSHQsZ24sWXQpLGZuPWZ1bmN0aW9uIGl0KHV0LHd0KXt1dD11dC50b0xvd2VyQ2FzZSgpO3ZhciBIdD1bXS5zbGlj'@;
put 'ZS5jYWxsKGFyZ3VtZW50cywyKTtpZihwdS5nZXRIYXNoZXMoKS5pbmRleE9mKHV0KTwwKXRocm93IG5ldyBFcnJvcigiSE1BQyBhbGdvcml0aG0gJyIrdXQrIicgbm90IHN1cHBvcnRlZCEiKTt2YXIgVHQ9cHUuY3JlYXRlSG1hYyh1dCx3dCk7cmV0dXJuIFR0LnVwZGF0ZShCdWZmZXIuY29u'@;
put 'Y2F0KEh0KSksVHQuZGlnZXN0KCl9KGt0LnBhY2thZ2UuaGFzaEFsZ29yaXRobSxZdCxUdCksS249TWUoa3QucGFja2FnZS5oYXNoQWxnb3JpdGhtLGt0LnBhY2thZ2Uuc2FsdFZhbHVlLGt0LnBhY2thZ2UuYmxvY2tTaXplLGdlLmRhdGFJbnRlZ3JpdHkuaG1hY1ZhbHVlKSx6bj1fZSghMCxr'@;
put 'dC5wYWNrYWdlLmNpcGhlckFsZ29yaXRobSxrdC5wYWNrYWdlLmNpcGhlckNoYWluaW5nLEh0LEtuLGZuKTtrdC5kYXRhSW50ZWdyaXR5PXtlbmNyeXB0ZWRIbWFjS2V5OnFuLGVuY3J5cHRlZEhtYWNWYWx1ZTp6bn07dmFyIE9uPVVlKHd0LGt0LmtleS5oYXNoQWxnb3JpdGhtLGt0LmtleS5z'@;
put 'YWx0VmFsdWUsa3Qua2V5LnNwaW5Db3VudCxrdC5rZXkua2V5Qml0cyxnZS5rZXkpO2t0LmtleS5lbmNyeXB0ZWRLZXlWYWx1ZT1fZSghMCxrdC5rZXkuY2lwaGVyQWxnb3JpdGhtLGt0LmtleS5jaXBoZXJDaGFpbmluZyxPbixrdC5rZXkuc2FsdFZhbHVlLEh0KTt2YXIgZXI9cHUucmFuZG9t'@;
put 'Qnl0ZXMoMTYpLHRyPVVlKHd0LGt0LmtleS5oYXNoQWxnb3JpdGhtLGt0LmtleS5zYWx0VmFsdWUsa3Qua2V5LnNwaW5Db3VudCxrdC5rZXkua2V5Qml0cyxnZS52ZXJpZmllckhhc2guaW5wdXQpO2t0LmtleS5lbmNyeXB0ZWRWZXJpZmllckhhc2hJbnB1dD1fZSghMCxrdC5rZXkuY2lwaGVy'@;
put 'QWxnb3JpdGhtLGt0LmtleS5jaXBoZXJDaGFpbmluZyx0cixrdC5rZXkuc2FsdFZhbHVlLGVyKTt2YXIgWW49dmUoa3Qua2V5Lmhhc2hBbGdvcml0aG0sZXIpLGpyPVVlKHd0LGt0LmtleS5oYXNoQWxnb3JpdGhtLGt0LmtleS5zYWx0VmFsdWUsa3Qua2V5LnNwaW5Db3VudCxrdC5rZXkua2V5'@;
put 'Qml0cyxnZS52ZXJpZmllckhhc2gudmFsdWUpO2t0LmtleS5lbmNyeXB0ZWRWZXJpZmllckhhc2hWYWx1ZT1fZSghMCxrdC5rZXkuY2lwaGVyQWxnb3JpdGhtLGt0LmtleS5jaXBoZXJDaGFpbmluZyxqcixrdC5rZXkuc2FsdFZhbHVlLFluKTt2YXIgbGk9ZnVuY3Rpb24gZnQodXQpe3ZhciB3'@;
put 'dD17bmFtZToiZW5jcnlwdGlvbiIsYXR0cmlidXRlczp7eG1sbnM6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYvZW5jcnlwdGlvbiIsInhtbG5zOnAiOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L2tleUVuY3J5cHRvci9wYXNzd29y'@;
put 'ZCIsInhtbG5zOmMiOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L2tleUVuY3J5cHRvci9jZXJ0aWZpY2F0ZSJ9LGNoaWxkcmVuOlt7bmFtZToia2V5RGF0YSIsYXR0cmlidXRlczp7c2FsdFNpemU6dXQucGFja2FnZS5zYWx0VmFsdWUubGVuZ3RoLGJsb2NrU2l6'@;
put 'ZTp1dC5wYWNrYWdlLmJsb2NrU2l6ZSxrZXlCaXRzOnV0LnBhY2thZ2Uua2V5Qml0cyxoYXNoU2l6ZTp1dC5wYWNrYWdlLmhhc2hTaXplLGNpcGhlckFsZ29yaXRobTp1dC5wYWNrYWdlLmNpcGhlckFsZ29yaXRobSxjaXBoZXJDaGFpbmluZzp1dC5wYWNrYWdlLmNpcGhlckNoYWluaW5nLGhh'@;
put 'c2hBbGdvcml0aG06dXQucGFja2FnZS5oYXNoQWxnb3JpdGhtLHNhbHRWYWx1ZTp1dC5wYWNrYWdlLnNhbHRWYWx1ZS50b1N0cmluZygiYmFzZTY0Iil9fSx7bmFtZToiZGF0YUludGVncml0eSIsYXR0cmlidXRlczp7ZW5jcnlwdGVkSG1hY0tleTp1dC5kYXRhSW50ZWdyaXR5LmVuY3J5cHRl'@;
put 'ZEhtYWNLZXkudG9TdHJpbmcoImJhc2U2NCIpLGVuY3J5cHRlZEhtYWNWYWx1ZTp1dC5kYXRhSW50ZWdyaXR5LmVuY3J5cHRlZEhtYWNWYWx1ZS50b1N0cmluZygiYmFzZTY0Iil9fSx7bmFtZToia2V5RW5jcnlwdG9ycyIsY2hpbGRyZW46W3tuYW1lOiJrZXlFbmNyeXB0b3IiLGF0dHJpYnV0'@;
put 'ZXM6e3VyaToiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9rZXlFbmNyeXB0b3IvcGFzc3dvcmQifSxjaGlsZHJlbjpbe25hbWU6InA6ZW5jcnlwdGVkS2V5IixhdHRyaWJ1dGVzOntzcGluQ291bnQ6dXQua2V5LnNwaW5Db3VudCxzYWx0U2l6ZTp1dC5rZXkuc2Fs'@;
put 'dFZhbHVlLmxlbmd0aCxibG9ja1NpemU6dXQua2V5LmJsb2NrU2l6ZSxrZXlCaXRzOnV0LmtleS5rZXlCaXRzLGhhc2hTaXplOnV0LmtleS5oYXNoU2l6ZSxjaXBoZXJBbGdvcml0aG06dXQua2V5LmNpcGhlckFsZ29yaXRobSxjaXBoZXJDaGFpbmluZzp1dC5rZXkuY2lwaGVyQ2hhaW5pbmcs'@;
put 'aGFzaEFsZ29yaXRobTp1dC5rZXkuaGFzaEFsZ29yaXRobSxzYWx0VmFsdWU6dXQua2V5LnNhbHRWYWx1ZS50b1N0cmluZygiYmFzZTY0IiksZW5jcnlwdGVkVmVyaWZpZXJIYXNoSW5wdXQ6dXQua2V5LmVuY3J5cHRlZFZlcmlmaWVySGFzaElucHV0LnRvU3RyaW5nKCJiYXNlNjQiKSxlbmNy'@;
put 'eXB0ZWRWZXJpZmllckhhc2hWYWx1ZTp1dC5rZXkuZW5jcnlwdGVkVmVyaWZpZXJIYXNoVmFsdWUudG9TdHJpbmcoImJhc2U2NCIpLGVuY3J5cHRlZEtleVZhbHVlOnV0LmtleS5lbmNyeXB0ZWRLZXlWYWx1ZS50b1N0cmluZygiYmFzZTY0Iil9fV19XX1dfSxrdD0obmV3IFApLmJ1aWxkKHd0'@;
put 'KTtyZXR1cm4gQnVmZmVyLmNvbmNhdChbRCxCdWZmZXIuZnJvbShrdCwidXRmOCIpXSl9KGt0KSxFaT1OZS51dGlscy5jZmJfbmV3KCk7cmV0dXJuIE5lLnV0aWxzLmNmYl9hZGQoRWksIkVuY3J5cHRpb25JbmZvIixsaSksTmUudXRpbHMuY2ZiX2FkZChFaSwiRW5jcnlwdGVkUGFja2FnZSIs'@;
put 'VHQpLEVpfX0oKTtmdW5jdGlvbiB5Zyh3KXtyZXR1cm4gZnVuY3Rpb24oRCl7Zm9yKHZhciBlZT0wO2VlIT13Lmxlbmd0aDsrK2VlKXt2YXIgb2U9d1tlZV07dm9pZCAwPT09RFtvZVswXV0mJihEW29lWzBdXT1vZVsxXSksIm4iPT09b2VbMl0mJihEW29lWzBdXT1OdW1iZXIoRFtvZVswXV0p'@;
put 'KX19fXZhciBkdj1mdW5jdGlvbih3KXt5ZyhbWyJjZWxsTkYiLCExXSxbImNlbGxIVE1MIiwhMF0sWyJjZWxsRm9ybXVsYSIsITBdLFsiY2VsbFN0eWxlcyIsITFdLFsiY2VsbFRleHQiLCEwXSxbImNlbGxEYXRlcyIsITFdLFsic2hlZXRTdHVicyIsITFdLFsic2hlZXRSb3dzIiwwLCJuIl0s'@;
put 'WyJib29rRGVwcyIsITFdLFsiYm9va1NoZWV0cyIsITFdLFsiYm9va1Byb3BzIiwhMV0sWyJib29rRmlsZXMiLCExXSxbImJvb2tWQkEiLCExXSxbInBhc3N3b3JkIiwiIl0sWyJXVEYiLCExXV0pKHcpLHcuYm9va0ltYWdlcyYmKHcuY2VsbFN0eWxlcz0hMCl9LCR3PXlnKFtbImNlbGxEYXRl'@;
put 'cyIsITFdLFsiYm9va1NTVCIsITFdLFsiYm9va1R5cGUiLCJ4bHN4Il0sWyJjb21wcmVzc2lvbiIsITFdLFsiV1RGIiwhMV1dKTtmdW5jdGlvbiBmTyh3KXtyZXR1cm4gTmkuV1MuaW5kZXhPZih3KT4tMT8ic2hlZXQiOk5pLkNTJiZ3PT1OaS5DUz8iY2hhcnQiOk5pLkRTJiZ3PT1OaS5EUz8i'@;
put 'ZGlhbG9nIjpOaS5NUyYmdz09TmkuTVM/Im1hY3JvIjp3JiZ3Lmxlbmd0aD93OiJzaGVldCJ9dmFyIGh2PVtdO2Z1bmN0aW9uIG9CKHcsUCxELGVlLG9lLGdlLF9lLHZlLE1lLGplLFVlLFhlKXt0cnl7Z2VbZWVdPVBvKG5uKHcsRCwhMCksUCk7dmFyIGZ0LGl0PUl0KHcsUCk7c3dpdGNoKHZl'@;
put 'KXtjYXNlInNoZWV0IjpmdD1mdW5jdGlvbiBBVih3LFAsRCxlZSxvZSxnZSxfZSx2ZSl7cmV0dXJuIi5iaW4iPT09UC5zbGljZSgtNCk/ZnVuY3Rpb24gZFYodyxQLEQsZWUsb2UsZ2UsX2Upe2lmKCF3KXJldHVybiB3O3ZhciB2ZT1QfHx7fTtlZXx8KGVlPXsiIWlkIjp7fX0pLG51bGwhPW5l'@;
put 'JiZudWxsPT12ZS5kZW5zZSYmKHZlLmRlbnNlPW5lKTt2YXIgamUsTXQsdXQsd3QsSHQsa3QsVHQsWXQsZ24scW4sTWU9dmUuZGVuc2U/W106e30sVWU9e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX0sWGU9W10saXQ9ITEsZnQ9ITEsZm49W107dmUuYmlmZj0xMix2ZVsiIXJvdyJdPTA7'@;
put 'dmFyIEtuPTAsem49ITEsT249W10sZXI9e30sdHI9dmUuc3VwYm9va3N8fG9lLnN1cGJvb2tzfHxbW11dO2lmKHRyLnNoYXJlZGY9ZXIsdHIuYXJyYXlmPU9uLHRyLlNoZWV0TmFtZXM9b2UuU2hlZXROYW1lc3x8b2UuU2hlZXRzLm1hcChmdW5jdGlvbih0aSl7cmV0dXJuIHRpLm5hbWV9KSwh'@;
put 'dmUuc3VwYm9va3MmJih2ZS5zdXBib29rcz10cixvZS5OYW1lcykpZm9yKHZhciBZbj0wO1luPG9lLk5hbWVzLmxlbmd0aDsrK1luKXRyWzBdW1luKzFdPW9lLk5hbWVzW1luXTt2YXIganI9W10sbGk9W10sRWk9ITE7aWYoSDJbMTZdPXtuOiJCcnRTaG9ydFJlYWwiLGY6YlR9LHpvKHcsZnVu'@;
put 'Y3Rpb24oZnIsRG4sdnIpe2lmKCFmdClzd2l0Y2godnIpe2Nhc2UgMTQ4OmplPWZyO2JyZWFrO2Nhc2UgMDpNdD1mcix2ZS5zaGVldFJvd3MmJnZlLnNoZWV0Um93czw9TXQuciYmKGZ0PSEwKSxnbj1WYShIdD1NdC5yKSx2ZVsiIXJvdyJdPU10LnIsKGZyLmhpZGRlbnx8ZnIuaHB0fHxudWxs'@;
put 'IT1mci5sZXZlbCkmJihmci5ocHQmJihmci5ocHg9ZGYoZnIuaHB0KSksbGlbZnIucl09ZnIpO2JyZWFrO2Nhc2UgMjpjYXNlIDM6Y2FzZSA0OmNhc2UgNTpjYXNlIDY6Y2FzZSA3OmNhc2UgODpjYXNlIDk6Y2FzZSAxMDpjYXNlIDExOmNhc2UgMTM6Y2FzZSAxNDpjYXNlIDE1OmNhc2UgMTY6'@;
put 'Y2FzZSAxNzpjYXNlIDE4OnN3aXRjaCh1dD17dDpmclsyXX0sZnJbMl0pe2Nhc2UibiI6dXQudj1mclsxXTticmVhaztjYXNlInMiOnV0LnY9KFl0PVo4W2ZyWzFdXSkudCx2ZS5jZWxsU3R5bGVzJiYodXQuUj1mdW5jdGlvbiBlSCh3LFApe2lmKHcuUilyZXR1cm4gdy5SO2lmKFAmJlAuRm9u'@;
put 'dHMmJigxIT13LnIubGVuZ3RofHwwIT13LnJbMF0uaWNoKSl7dy5SPVtdO3ZhciBEPTAsZWU9dy5yW0RdLG9lPXcucltEKzFdO2ZvcihlZS5pY2g+MCYmdy5SLnB1c2goe3Q6InMiLHY6dy50LnNsaWNlKDAsZWUuaWNoKX0pO0Q8dy5yLmxlbmd0aC0xOysrRCl3LlIucHVzaCh7dDoicyIsdjp3'@;
put 'LnQuc2xpY2UoKGVlPXcucltEXSkuaWNoLChvZT13LnJbRCsxXSkuaWNoKSxzOlAuRm9udHNbZWUuaWZudF19KTtyZXR1cm4gdy5SLnB1c2goe3Q6InMiLHY6dy50LnNsaWNlKChvZXx8ZWUpLmljaCksczpQLkZvbnRzWyhvZXx8ZWUpLmlmbnRdfSksdy5SfX0oWXQsX2UpKTticmVhaztjYXNl'@;
put 'ImIiOnV0LnY9ISFmclsxXTticmVhaztjYXNlImUiOnV0LnY9ZnJbMV0sITEhPT12ZS5jZWxsVGV4dCYmKHV0Lnc9bmFbdXQudl0pO2JyZWFrO2Nhc2Uic3RyIjp1dC50PSJzIix1dC52PWZyWzFdfWlmKCh3dD1fZS5DZWxsWGZbZnJbMF0uaVN0eWxlUmVmXSkmJlk4KHV0LHd0Lm51bUZtdElk'@;
put 'LHd0LmZpbGxJZCx3dC5mb250SWQsd3QuYm9yZGVySWQsdmUsMCxfZSksdmUuY2VsbFN0eWxlcyYmdXQucyYmd3QuYWxpZ25tZW50JiYodXQucy5hbGlnbm1lbnQ9SnQod3QuYWxpZ25tZW50KSksa3Q9LTE9PWZyWzBdLmM/a3QrMTpmclswXS5jLHZlLmRlbnNlPyhNZVtIdF18fChNZVtIdF09'@;
put 'W10pLE1lW0h0XVtrdF09dXQpOk1lW0JhKGt0KStnbl09dXQsdmUuY2VsbEZvcm11bGEpe2Zvcih6bj0hMSxLbj0wO0tuPE9uLmxlbmd0aDsrK0tuKXt2YXIgcnI9T25bS25dO010LnI+PXJyWzBdLnMuciYmTXQucjw9cnJbMF0uZS5yJiZrdD49cnJbMF0ucy5jJiZrdDw9cnJbMF0uZS5jJiYo'@;
put 'dXQuRj1WbyhyclswXSksem49ITApfSF6biYmZnIubGVuZ3RoPjMmJih1dC5mPWZyWzNdKX1pZihVZS5zLnI+TXQuciYmKFVlLnMucj1NdC5yKSxVZS5zLmM+a3QmJihVZS5zLmM9a3QpLFVlLmUucjxNdC5yJiYoVWUuZS5yPU10LnIpLFVlLmUuYzxrdCYmKFVlLmUuYz1rdCksdmUuY2VsbERh'@;
put 'dGVzJiZ3dCYmIm4iPT11dC50JiZTLmlzX2RhdGUoUy5fdGFibGVbd3QubnVtRm10SWRdKSl7dmFyIHhuPVMucGFyc2VfZGF0ZV9jb2RlKHV0LnYpO3huJiYodXQudD0iZCIsdXQudj1uZXcgRGF0ZSh4bi55LHhuLm0tMSx4bi5kLHhuLkgseG4uTSx4bi5TLHhuLnUpKX1icmVhaztjYXNlIDE6'@;
put 'Y2FzZSAxMjppZighdmUuc2hlZXRTdHVic3x8aXQpYnJlYWs7dXQ9e3Q6InoiLHY6dm9pZCAwfSxrdD0tMT09ZnJbMF0uYz9rdCsxOmZyWzBdLmMsKHd0PV9lLkNlbGxYZltmclswXS5pU3R5bGVSZWZdKSYmWTgodXQsd3QubnVtRm10SWQsd3QuZmlsbElkLHd0LmZvbnRJZCx3dC5ib3JkZXJJ'@;
put 'ZCx2ZSwwLF9lKSx2ZS5jZWxsU3R5bGVzJiZ1dC5zJiZ3dC5hbGlnbm1lbnQmJih1dC5zLmFsaWdubWVudD1KdCh3dC5hbGlnbm1lbnQpKSx2ZS5kZW5zZT8oTWVbSHRdfHwoTWVbSHRdPVtdKSxNZVtIdF1ba3RdPXV0KTpNZVtCYShrdCkrZ25dPXV0LFVlLnMucj5NdC5yJiYoVWUucy5yPU10'@;
put 'LnIpLFVlLnMuYz5rdCYmKFVlLnMuYz1rdCksVWUuZS5yPE10LnImJihVZS5lLnI9TXQuciksVWUuZS5jPGt0JiYoVWUuZS5jPWt0KTticmVhaztjYXNlIDE3Njpmbi5wdXNoKGZyKTticmVhaztjYXNlIDQ5NDp2YXIgbXI9ZWVbIiFpZCJdW2ZyLnJlbElkXTtmb3IobXI/KGZyLlRhcmdldD1t'@;
put 'ci5UYXJnZXQsZnIubG9jJiYoZnIuVGFyZ2V0Kz0iIyIrZnIubG9jKSxmci5SZWw9bXIpOiIiPT1mci5yZWxJZCYmKGZyLlRhcmdldD0iIyIrZnIubG9jKSxIdD1mci5yZngucy5yO0h0PD1mci5yZnguZS5yOysrSHQpZm9yKGt0PWZyLnJmeC5zLmM7a3Q8PWZyLnJmeC5lLmM7KytrdCl2ZS5k'@;
put 'ZW5zZT8oTWVbSHRdfHwoTWVbSHRdPVtdKSxNZVtIdF1ba3RdfHwoTWVbSHRdW2t0XT17dDoieiIsdjp2b2lkIDB9KSxNZVtIdF1ba3RdLmw9ZnIpOihUdD1waSh7YzprdCxyOkh0fSksTWVbVHRdfHwoTWVbVHRdPXt0OiJ6Iix2OnZvaWQgMH0pLE1lW1R0XS5sPWZyKTticmVhaztjYXNlIDQy'@;
put 'NjppZighdmUuY2VsbEZvcm11bGEpYnJlYWs7T24ucHVzaChmciksKHFuPXZlLmRlbnNlP01lW0h0XVtrdF06TWVbQmEoa3QpK2duXSkuZj1EcyhmclsxXSxVZSx7cjpNdC5yLGM6a3R9LHRyLHZlKSxxbi5GPVZvKGZyWzBdKTticmVhaztjYXNlIDQyNzppZighdmUuY2VsbEZvcm11bGEpYnJl'@;
put 'YWs7ZXJbcGkoZnJbMF0ucyldPWZyWzFdLChxbj12ZS5kZW5zZT9NZVtIdF1ba3RdOk1lW0JhKGt0KStnbl0pLmY9RHMoZnJbMV0sVWUse3I6TXQucixjOmt0fSx0cix2ZSk7YnJlYWs7Y2FzZSA2MDppZighdmUuY2VsbFN0eWxlcylicmVhaztmb3IoO2ZyLmU+PWZyLnM7KWpyW2ZyLmUtLV09'@;
put 'e3dpZHRoOmZyLncvMjU2LGhpZGRlbjohISgxJmZyLmZsYWdzKSxsZXZlbDpmci5sZXZlbH0sRWl8fChFaT0hMCksX2MoanJbZnIuZSsxXSk7YnJlYWs7Y2FzZSAxNjE6TWVbIiFhdXRvZmlsdGVyIl09e3JlZjpWbyhmcil9O2JyZWFrO2Nhc2UgNDc2Ok1lWyIhbWFyZ2lucyJdPWZyO2JyZWFr'@;
put 'O2Nhc2UgMTQ3Om9lLlNoZWV0c1tEXXx8KG9lLlNoZWV0c1tEXT17fSksZnIubmFtZSYmKG9lLlNoZWV0c1tEXS5Db2RlTmFtZT1mci5uYW1lKSwoZnIuYWJvdmV8fGZyLmxlZnQpJiYoTWVbIiFvdXRsaW5lIl09e2Fib3ZlOmZyLmFib3ZlLGxlZnQ6ZnIubGVmdH0pO2JyZWFrO2Nhc2UgMTM3'@;
put 'Om9lLlZpZXdzfHwob2UuVmlld3M9W3t9XSksb2UuVmlld3NbMF18fChvZS5WaWV3c1swXT17fSksZnIuUlRMJiYob2UuVmlld3NbMF0uUlRMPSEwKSxmci5ncmlkfHwob2UuVmlld3NbMF0uZ3JpZD0hMSxNZVsiIWdyaWRsaW5lcyJdPSExKTticmVhaztjYXNlIDQ4NTpNZVsiIXNoZWV0Rm9y'@;
put 'bWF0Il09ZnI7YnJlYWs7Y2FzZSA2NDpjYXNlIDEwNTM6IWZ1bmN0aW9uIGNWKHcsUCxELGVlKXtpZihQKXt2YXIgb2U9e3JlZjpQLnNxcmZ4LHQ6UC50fTtQLm9wJiYob2Uub3A9UC5vcCk7dmFyIGdlPSIiLF9lPSIiLHZlPVAuc3FyZng/InN0cmluZyI9PXR5cGVvZiBQLnNxcmZ4P1BpKFAu'@;
put 'c3FyZnguc3BsaXQoIiwiKVswXSk6UC5zcXJmeDpudWxsO2lmKFAuZjEmJihnZT1EcyhQLmYxLHZlLG51bGwsRCxlZSwhMCkpLFAuZjImJihfZT1EcyhQLmYyLHZlLG51bGwsRCxlZSwhMCkpLFAub3AmJlsiSU4iLCJPVCJdLmluZGV4T2YoUC5vcCk+PS0xKW9lLm1pbj1nZSxvZS5tYXg9X2U7'@;
put 'ZWxzZSBpZihQLm9wKW9lLnY9Z2U7ZWxzZSB0cnl7c3dpdGNoKFAudCl7Y2FzZSJMaXN0IjppZigiUHRnU3RyIj09PVAuZjFbMF1bMF1bMF0mJjE9PVAuZjFbMF0ubGVuZ3RoKXtvZS5sPVAuZjFbMF1bMF1bMV0uc3BsaXQoIiwiKTticmVha31jYXNlIkN1c3RvbSI6b2UuZj1nZX19Y2F0Y2h7'@;
put 'fXdbIiF2YWxpZGF0aW9ucyJdfHwod1siIXZhbGlkYXRpb25zIl09W10pLHdbIiF2YWxpZGF0aW9ucyJdLnB1c2gob2UpfX0oTWUsZnIsdHIsdmUpO2JyZWFrO2Nhc2UgMTUxOk1lWyIhZnJlZXplIl09ZnJbMF07YnJlYWs7Y2FzZSAxNTI6TWVbIiFzZWwiXT1mcjticmVhaztjYXNlIDE3NTpj'@;
put 'YXNlIDY0NDpjYXNlIDYyNTpjYXNlIDU2MjpjYXNlIDM5NjpjYXNlIDExMTI6Y2FzZSAxMTQ2OmNhc2UgNDcxOmNhc2UgMTA1MDpjYXNlIDY0OTpjYXNlIDExMDU6Y2FzZSA0OTpjYXNlIDU4OTpjYXNlIDYwNzpjYXNlIDU2NDpjYXNlIDEwNTU6Y2FzZSAxNjg6Y2FzZSAxNzQ6Y2FzZSAxMTgw'@;
put 'OmNhc2UgNDk5OmNhc2UgNTA3OmNhc2UgNTUwOmNhc2UgMTcxOmNhc2UgMTY3OmNhc2UgMTE3NzpjYXNlIDE2OTpjYXNlIDExODE6Y2FzZSA1NTE6Y2FzZSA1NTI6Y2FzZSA2NjE6Y2FzZSA2Mzk6Y2FzZSA0Nzg6Y2FzZSA1Mzc6Y2FzZSA0Nzc6Y2FzZSA1MzY6Y2FzZSAxMTAzOmNhc2UgNjgw'@;
put 'OmNhc2UgMTEwNDpjYXNlIDEwMjQ6Y2FzZSA2NjM6Y2FzZSA1MzU6Y2FzZSA2Nzg6Y2FzZSA1MDQ6Y2FzZSAxMDQzOmNhc2UgNDI4OmNhc2UgMTcwOmNhc2UgMzA3MjpjYXNlIDUwOmNhc2UgMjA3MDpjYXNlIDEwNDU6YnJlYWs7Y2FzZSAzNTppdD0hMDticmVhaztjYXNlIDM2Oml0PSExO2Jy'@;
put 'ZWFrO2Nhc2UgMzc6WGUucHVzaChEbiksaXQ9ITA7YnJlYWs7Y2FzZSAzODpYZS5wb3AoKSxpdD0hMTticmVhaztkZWZhdWx0OmlmKCEoKERufHwiIikuaW5kZXhPZigiQmVnaW4iKT4wKSYmISgoRG58fCIiKS5pbmRleE9mKCJFbmQiKT4wKSYmKCFpdHx8dmUuV1RGJiYiQnJ0QUNCZWdpbiIh'@;
put 'PVhlW1hlLmxlbmd0aC0xXSkpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAiK3ZyKyIgIitEbil9fSx2ZSksZGVsZXRlIHZlLnN1cGJvb2tzLGRlbGV0ZSB2ZVsiIXJvdyJdLCFNZVsiIXJlZiJdJiYoVWUucy5yPDJlNnx8amUmJihqZS5lLnI+MHx8amUuZS5jPjB8fGplLnMu'@;
put 'cj4wfHxqZS5zLmM+MCkpJiYoTWVbIiFyZWYiXT1WbyhqZXx8VWUpKSx2ZS5zaGVldFJvd3MmJk1lWyIhcmVmIl0pe3ZhciBJaT1QaShNZVsiIXJlZiJdKTt2ZS5zaGVldFJvd3M8PStJaS5lLnImJihJaS5lLnI9dmUuc2hlZXRSb3dzLTEsSWkuZS5yPlVlLmUuciYmKElpLmUucj1VZS5lLnIp'@;
put 'LElpLmUucjxJaS5zLnImJihJaS5zLnI9SWkuZS5yKSxJaS5lLmM+VWUuZS5jJiYoSWkuZS5jPVVlLmUuYyksSWkuZS5jPElpLnMuYyYmKElpLnMuYz1JaS5lLmMpLE1lWyIhZnVsbHJlZiJdPU1lWyIhcmVmIl0sTWVbIiFyZWYiXT1WbyhJaSkpfXJldHVybiBmbi5sZW5ndGg+MCYmKE1lWyIh'@;
put 'bWVyZ2VzIl09Zm4pLGpyLmxlbmd0aD4wJiYoTWVbIiFjb2xzIl09anIpLGxpLmxlbmd0aD4wJiYoTWVbIiFyb3dzIl09bGkpLE1lfSh3LGVlLEQsb2UsZ2UsMCx2ZSk6ZnVuY3Rpb24gZ2VlKHcsUCxELGVlLG9lLGdlLF9lKXtpZighdylyZXR1cm4gdztlZXx8KGVlPXsiIWlkIjp7fX0pLG51'@;
put 'bGwhPW5lJiZudWxsPT1QLmRlbnNlJiYoUC5kZW5zZT1uZSk7dmFyIHZlPVAuZGVuc2U/W106e30sTWU9e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX0samU9IiIsVWU9IiIsWGU9dy5tYXRjaChpZyk7WGU/KGplPXcuc2xpY2UoMCxYZS5pbmRleCksVWU9dy5zbGljZShYZS5pbmRleCtY'@;
put 'ZVswXS5sZW5ndGgpKTpqZT1VZT13O3ZhciBpdD1VZS5sYXN0SW5kZXhPZigiZXh0THN0IiksTXQ9KC0xPT1pdHx8VWUuc2xpY2UoaXQpLGplLm1hdGNoKGx3KSk7TXQ/JDgoTXRbMF0sMCxvZSxEKTooTXQ9amUubWF0Y2goX04pKSYmZnVuY3Rpb24gcUEodyxQLEQsZWUsb2UsZ2UsX2UpeyQ4'@;
put 'KHcuc2xpY2UoMCx3LmluZGV4T2YoIj4iKSksMCxlZSxvZSk7dmFyIHZlPVAubWF0Y2goSzgpO2lmKHZlKXt2YXIgamU9ZmgoY24odmVbMF0pLGdlLF9lKTtEWyIhdGFiY29sb3IiXT1qZX1pZigodmU9UC5tYXRjaCgkQSkpJiZjbih2ZVswXSkuZml0VG9QYWdlJiYoRFsiIXByaW50Il18fChE'@;
put 'WyIhcHJpbnQiXT17fSksRFsiIXByaW50Il0ucHJvcHN8fChEWyIhcHJpbnQiXS5wcm9wcz17fSksRFsiIXByaW50Il0ucHJvcHMuZml0fHwoRFsiIXByaW50Il0ucHJvcHMuZml0PXt9KSxudWxsPT1EWyIhcHJpbnQiXS5wcm9wcy5maXQuaGVpZ2h0JiYoRFsiIXByaW50Il0ucHJvcHMuZml0'@;
put 'LmhlaWdodD0xKSxudWxsPT1EWyIhcHJpbnQiXS5wcm9wcy5maXQud2lkdGgmJihEWyIhcHJpbnQiXS5wcm9wcy5maXQud2lkdGg9MSkpLHZlPVAubWF0Y2goS0EpKXtEWyIhb3V0bGluZSJdPXt9O3ZhciBYZT1jbih2ZVswXSk7WGUuc3VtbWFyeUJlbG93JiYoRFsiIW91dGxpbmUiXS5hYm92'@;
put 'ZT0hX3IoWGUuc3VtbWFyeUJlbG93KSksWGUuc3VtbWFyeVJpZ2h0JiYoRFsiIW91dGxpbmUiXS5sZWZ0PSFfcihYZS5zdW1tYXJ5UmlnaHQpKX19KE10WzBdLE10WzFdfHwiIix2ZSxvZSxELF9lLGdlKTt2YXIgdXQ9KGplLm1hdGNoKC88KD86XHcqOik/ZGltZW5zaW9uLyl8fHtpbmRleDot'@;
put 'MX0pLmluZGV4O2lmKHV0PjApe3ZhciB3dD1qZS5zbGljZSh1dCx1dCs1MCkubWF0Y2gocGVlKTt3dCYmKCFQfHwhUC5ub2RpbSkmJmZ1bmN0aW9uIHlOKHcsUCl7dmFyIEQ9UGkoUCk7RC5zLnI8PUQuZS5yJiZELnMuYzw9RC5lLmMmJkQucy5yPj0wJiZELnMuYz49MCYmKHdbIiFyZWYiXT1W'@;
put 'byhEKSl9KHZlLHd0WzFdKX12YXIgSHQ9amUubWF0Y2god04pO0h0JiZIdFsxXSYmZnVuY3Rpb24gX2VlKHcsUCxELGVlKXtELlZpZXdzfHwoRC5WaWV3cz1be31dKTt2YXIgb2U9MDt3LnJlcGxhY2UoSU4sZnVuY3Rpb24oZ2UsX2Upe3ZhciB2ZT1jbihnZSk7aWYoRC5WaWV3c1tlZV18fChE'@;
put 'LlZpZXdzW2VlXT17fSksX3IodmUucmlnaHRUb0xlZnQpJiYoRC5WaWV3c1tlZV0uUlRMPSEwKSx2ZS5zaG93R3JpZExpbmVzJiYoRC5WaWV3c1tlZV0uZ3JpZD1fcih2ZS5zaG93R3JpZExpbmVzKSxudWxsPT1QWyIhZ3JpZGxpbmVzIl0mJihQWyIhZ3JpZGxpbmVzIl09X3IodmUuc2hvd0dy'@;
put 'aWRMaW5lcykpKSwrdmUuem9vbVNjYWxlJiYoRC5WaWV3c1tlZV0uem9vbT0rdmUuem9vbVNjYWxlKSx2ZS52aWV3JiYoRC5WaWV3c1tlZV0udmlldz12ZS52aWV3KSwxPT0rK29lJiYiLz4iIT1nZS5zbGljZSgtMikpe3ZhciBNZT13LnNsaWNlKF9lK2dlLmxlbmd0aCksamU9TWUubWF0Y2go'@;
put 'LzxcLyg/Olx3Oik/c2hlZXRWaWV3KD86W14+YS16XVtePl0qKT9cLz8+Lyk7aWYoIWplKXJldHVybiIiO3ZhciBVZT0oTWU9TWUuc2xpY2UoMCxqZS5pbmRleCkpLm1hdGNoKC88KD86XHc6KT9wYW5lKD86W14+YS16XVtePl0qKT9cLz8+Lyk7aWYoVWUpe3ZhciBYZT1jbihVZVswXSk7ImZy'@;
put 'b3plbiI9PVhlLnN0YXRlP1BbIiFmcmVlemUiXT1CYSgrWGUueFNwbGl0fHwwKStWYSgrWGUueVNwbGl0fHwwKTpYZS50b3BMZWZ0Q2VsbCYmKFBbIiFmcmVlemUiXT1YZS50b3BMZWZ0Q2VsbCl9dmFyIGl0PU1lLm1hdGNoKC88KD86XHc6KT9zZWxlY3Rpb24oPzpbXj5hLXpdW14+XSopP1wv'@;
put 'Pz4vKTtpZihpdCl7dmFyIGZ0PWNuKGl0WzBdKTtpZihmdC5hY3RpdmVDZWxsJiYoUFsiIXNlbCJdPXtjZWxsOmZ0LmFjdGl2ZUNlbGx9KSxmdC5zcXJlZil7dmFyIE10PWZ0LnNxcmVmLnJlcGxhY2UoL1xzLiokLywiIik7UFsiIXNlbCJdfHwoUFsiIXNlbCJdPXtjZWxsOnBpKEthKE10KS5z'@;
put 'KX0pLFBbIiFzZWwiXS5yYW5nZT1mdC5zcXJlZn19fXJldHVybiIifSl9KEh0WzFdLHZlLG9lLEQpO3ZhciBrdD1qZS5tYXRjaChMMiksVHQ9W107aWYoUC5jZWxsU3R5bGVzKXt2YXIgWXQ9amUubWF0Y2gob3cpO1l0JiZmdW5jdGlvbiBWcCh3LFAsRCl7Zm9yKHZhciBlZT0hMSxvZT0wO29l'@;
put 'IT1QLmxlbmd0aDsrK29lKXt2YXIgZ2U9Y24oUFtvZV0sITApO2dlLmhpZGRlbiYmKGdlLmhpZGRlbj1fcihnZS5oaWRkZW4pKTt2YXIgX2U9cGFyc2VJbnQoZ2UubWluLDEwKS0xLHZlPXBhcnNlSW50KGdlLm1heCwxMCktMTtmb3IoZ2Uub3V0bGluZUxldmVsJiYoZ2UubGV2ZWw9K2dlLm91'@;
put 'dGxpbmVMZXZlbHx8MCksZGVsZXRlIGdlLm1pbixkZWxldGUgZ2UubWF4LGdlLndpZHRoPStnZS53aWR0aCwhZWUmJmdlLndpZHRoJiYoZWU9ITApLF9jKGdlKSxnZS5zdHlsZSYmKGdlLnM9YWcoZ2Uuc3R5bGUsRCkpO19lPD12ZTspd1tfZSsrXT1KdChnZSl9fShUdCxZdCxfZSl9aWYoWGUm'@;
put 'JkxOKFhlWzFdLEQsdmUsUCxNZSxnZSxfZSksUC5jYWxsYmFjaylyZXR1cm4gdmU7dmFyIGduPVVlLm1hdGNoKGJOKTtnbiYmKHZlWyIhcHJvdGVjdCJdPWZ1bmN0aW9uIHJ0KHcpe3ZhciBQPWNuKHcsITAsITApLEQ9e307aWYoX3IoUC5zaGVldCkpcmV0dXJuIGN3LmZvckVhY2goZnVuY3Rp'@;
put 'b24oZWUpe0RbZWVdPW51bGwhPVBbZWVdJiZfcihQW2VlXSl9KSxmdy5mb3JFYWNoKGZ1bmN0aW9uKGVlKXtEW2VlXT1udWxsPT1QW2VlXXx8X3IoUFtlZV0pfSksUC5hbGdvcml0aG1OYW1lJiYoRC5lbmNyeXB0aW9uPXthbGdvOlAuYWxnb3JpdGhtTmFtZSxoYXNoOlAuaGFzaFZhbHVlLHNh'@;
put 'bHQ6UC5zYWx0VmFsdWUsc3BpbjorUC5zcGluQ291bnR8fDFlNX0pLER9KGduWzBdKSk7dmFyIHFuPVVlLm1hdGNoKFc4KTtxbiYmKHZlWyIhYXV0b2ZpbHRlciJdPWZ1bmN0aW9uIG9nKHcpe3JldHVybntyZWY6KHcubWF0Y2goL3JlZj0iKFteIl0qKSIvKXx8W10pWzFdfX0ocW5bMF0pKTt2'@;
put 'YXIgZm49W10sS249VWUubWF0Y2goaXcpO2lmKEtuKWZvcih1dD0wO3V0IT1Lbi5sZW5ndGg7Kyt1dClmblt1dF09UGkoS25bdXRdLnNsaWNlKEtuW3V0XS5pbmRleE9mKCciJykrMSkpO3ZhciB6bj0oLTE9PWl0P1VlOlVlLnNsaWNlKDAsaXQpKS5tYXRjaChHOCk7em4mJih2ZVsiIWNvbmRm'@;
put 'bXQiXT1bXS5jb25jYXQuYXBwbHkoW10sem4ubWFwKGZ1bmN0aW9uKERuKXtyZXR1cm4gY1QoRG4sUCxnZSxfZSl9KSkpLGl0Pi0xJiYoem49VWUuc2xpY2UoaXQpLm1hdGNoKEc4KSkmJih2ZVsiIWNvbmRmbXQiXXx8KHZlWyIhY29uZGZtdCJdPVtdKSx2ZVsiIWNvbmRmbXQiXT12ZVsiIWNv'@;
put 'bmRmbXQiXS5jb25jYXQuYXBwbHkodmVbIiFjb25kZm10Il0sem4ubWFwKGZ1bmN0aW9uKERuKXtyZXR1cm4gY1QoRG4sUCxnZSxfZSwhMCl9KSkpO3ZhciBPbj0oLTE9PWl0P1VlOlVlLnNsaWNlKDAsaXQpKS5tYXRjaChaQSk7T24mJih2ZVsiIXZhbGlkYXRpb25zIl09bFQoT25bMF0sUCkp'@;
put 'LGl0Pi0xJiYoT249VWUuc2xpY2UoaXQpLm1hdGNoKFpBKSkmJih2ZVsiIXZhbGlkYXRpb25zIl18fCh2ZVsiIXZhbGlkYXRpb25zIl09W10pLHZlWyIhdmFsaWRhdGlvbnMiXT12ZVsiIXZhbGlkYXRpb25zIl0uY29uY2F0KGxUKE9uWzBdLFAsITApKSk7dmFyIGVyPVVlLm1hdGNoKFVBKTtl'@;
put 'ciYmZnVuY3Rpb24gblQodyxQLEQpe2Zvcih2YXIgZWU9QXJyYXkuaXNBcnJheSh3KSxvZT0wO29lIT1QLmxlbmd0aDsrK29lKXt2YXIgZ2U9Y24oRmkoUFtvZV0pLCEwKTtpZighZ2UucmVmKXJldHVybjt2YXIgX2U9KChEfHx7fSlbIiFpZCJdfHxbXSlbZ2UuaWRdO19lPyhnZS5UYXJnZXQ9'@;
put 'X2UuVGFyZ2V0LGdlLmxvY2F0aW9uJiYoZ2UuVGFyZ2V0Kz0iIyIrRXIoZ2UubG9jYXRpb24pKSk6KGdlLlRhcmdldD0iIyIrRXIoZ2UubG9jYXRpb24pLF9lPXtUYXJnZXQ6Z2UuVGFyZ2V0LFRhcmdldE1vZGU6IkludGVybmFsIn0pLGdlLlJlbD1fZSxnZS50b29sdGlwJiYoZ2UuVG9vbHRp'@;
put 'cD1nZS50b29sdGlwLGRlbGV0ZSBnZS50b29sdGlwKTtmb3IodmFyIHZlPVBpKGdlLnJlZiksTWU9dmUucy5yO01lPD12ZS5lLnI7KytNZSlmb3IodmFyIGplPXZlLnMuYztqZTw9dmUuZS5jOysramUpe3ZhciBVZT1waSh7YzpqZSxyOk1lfSk7ZWU/KHdbTWVdfHwod1tNZV09W10pLHdbTWVd'@;
put 'W2plXXx8KHdbTWVdW2plXT17dDoieiIsdjp2b2lkIDB9KSx3W01lXVtqZV0ubD1nZSk6KHdbVWVdfHwod1tVZV09e3Q6InoiLHY6dm9pZCAwfSksd1tVZV0ubD1nZSl9fX0odmUsZXIsZWUpO3ZhciB0cj1VZS5tYXRjaChDTik7dHImJmZ1bmN0aW9uIGtOKHcsUCl7dmFyIEQ9Y24odywhMSwh'@;
put 'MCk7UFsiIXByaW50Il18fChQWyIhcHJpbnQiXT17fSksUFsiIXByaW50Il0ucHJvcHN8fChQWyIhcHJpbnQiXS5wcm9wcz17fSk7dmFyIGVlPVBbIiFwcmludCJdLnByb3BzO0QuZ3JpZExpbmVzJiYoZWUuZ3JpZGxpbmVzPV9yKEQuZ3JpZExpbmVzKSksbnVsbCE9RC5ob3Jpem9udGFsQ2Vu'@;
put 'dGVyZWQmJihlZS5jZW50ZXJYPV9yKEQuaG9yaXpvbnRhbENlbnRlcmVkKSksbnVsbCE9RC52ZXJ0aWNhbENlbnRlcmVkJiYoZWUuY2VudGVyWT1fcihELnZlcnRpY2FsQ2VudGVyZWQpKX0odHJbMF0sdmUpO3ZhciBZbj1VZS5tYXRjaChhdyk7WW4mJigodmVbIiFwcmludCJdfHwodmVbIiFw'@;
put 'cmludCJdPXt9KSkubWFyZ2lucz12ZVsiIW1hcmdpbnMiXT1yVChjbihZblswXSkpKTt2YXIganI9VWUubWF0Y2goTnApO2pyJiZmdW5jdGlvbiBKQSh3LFApe3ZhciBEPWNuKHcsITEsITApO2RlbGV0ZSBELmlkLGRlbGV0ZSBEWzBdLFBbIiFwcmludCJdfHwoUFsiIXByaW50Il09e30pLFBb'@;
put 'IiFwcmludCJdLnByb3BzfHwoUFsiIXByaW50Il0ucHJvcHM9e30pO3ZhciBlZT1QWyIhcHJpbnQiXS5wcm9wcztELm9yaWVudGF0aW9uJiYoZWUub3JpZW50YXRpb249RC5vcmllbnRhdGlvbiksRC5zY2FsZSYmKGVlLnNjYWxlPStELnNjYWxlKSwrRC5maXRUb0hlaWdodD49MCYmKChlZS5m'@;
put 'aXR8fChlZS5maXQ9e30pKS5oZWlnaHQ9K0QuZml0VG9IZWlnaHQpLCtELmZpdFRvV2lkdGg+PTAmJigoZWUuZml0fHwoZWUuZml0PXt9KSkud2lkdGg9K0QuZml0VG9XaWR0aCksRC5wYXBlckhlaWdodCYmRC5wYXBlcldpZHRoP2VlLnBhcGVyPXt3aWR0aDpELnBhcGVyV2lkdGgsaGVpZ2h0'@;
put 'OkQucGFwZXJIZWlnaHR9OkQucGFwZXJTaXplJiYoZWUucGFwZXI9RDhbZWUucGFwZXI9K0QucGFwZXJTaXplXXx8ZWUucGFwZXIpLEQuaG9yaXpvbnRhbERwaT9lZS5kcGk9K0QuaG9yaXpvbnRhbERwaTpELnZlcnRpY2FsRHBpJiYoZWUuZHBpPStELnZlcnRpY2FsRHBpKSwiYXV0b21hdGlj'@;
put 'IiE9KEQuZmlyc3RQYWdlTnVtYmVyfHwiYXV0b21hdGljIikmJihlZS5maXJzdD0rRC5maXJzdFBhZ2VOdW1iZXIpLF9yKEQuYmxhY2tBbmRXaGl0ZSkmJihlZS5idz0hMCksX3IoRC5kcmFmdCkmJihlZS5kcmFmdD0hMCksIm92ZXJUaGVuRG93biI9PUQucGFnZU9yZGVyJiYoZWUub3JkZXI9'@;
put 'Im92ZXIiKSx1d1tELmNlbGxDb21tZW50c10mJihlZS5jb21tZW50cz11d1tELmNlbGxDb21tZW50c10pLFhBW0QuZXJyb3JzXSYmKGVlLmVycm9ycz1YQVtELmVycm9yc10pfShqclswXSx2ZSk7dmFyIGxpPVVlLm1hdGNoKG1lZSk7bGkmJmZ1bmN0aW9uIGh3KHcsUCl7aWYoUFsiIXByaW50'@;
put 'Il18fChQWyIhcHJpbnQiXT17fSksd1sxXSl7dmFyIEQ9IiIsZWU9MDt3WzFdLnJlcGxhY2UocXQsZnVuY3Rpb24ob2UsZ2Upe2lmKCIvIiE9b2UuY2hhckF0KDEpKUQ9b2Uuc2xpY2UoMSwtMSksZWU9Z2Urb2UubGVuZ3RoO2Vsc2UgaWYoRCl7dmFyIF9lPUQubWF0Y2goL0hlYWRlci8pPyJo'@;
put 'ZWFkZXIiOiJmb290ZXIiLHZlPUQucmVwbGFjZSgvSGVhZGVyfEZvb3Rlci8sIiIpO0Q9IiIsUFsiIXByaW50Il1bX2VdfHwoUFsiIXByaW50Il1bX2VdPXt9KSxQWyIhcHJpbnQiXVtfZV1bdmVdPUVyKEZpKHdbMV0uc2xpY2UoZWUsZ2UpKSl9fSl9fShsaSx2ZSk7dmFyIEVpPVVlLm1hdGNo'@;
put 'KGNkKTtFaSYmKCh2ZVsiIXByaW50Il18fCh2ZVsiIXByaW50Il09e30pKS5yb3dCcmVha3M9dmVbIiFyb3dCcmVha3MiXT1mdW5jdGlvbiB0VCh3KXt2YXIgUD1bXTtyZXR1cm4ody5tYXRjaChlVCl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKEQpe3ZhciBlZT1jbihEKTtQLnB1c2goe1I6K2Vl'@;
put 'LmlkfSl9KSxQfShFaVswXSkpO3ZhciBJaT1VZS5tYXRjaChZQSk7SWkmJigodmVbIiFwcmludCJdfHwodmVbIiFwcmludCJdPXt9KSkuY29sQnJlYWtzPXZlWyIhY29sQnJlYWtzIl09ZnVuY3Rpb24geE4odyl7dmFyIFA9W107cmV0dXJuKHcubWF0Y2goZVQpfHxbXSkuZm9yRWFjaChmdW5j'@;
put 'dGlvbihEKXt2YXIgZWU9Y24oRCk7UC5wdXNoKHtDOitlZS5pZH0pfSksUH0oSWlbMF0pKTt2YXIgdGk9W107aWYoKHRpPVVlLm1hdGNoKC9kcmF3aW5nIHI6aWQ9IiguKj8pIi8pKSYmKHZlWyIhcmVsIl09dGlbMV0pLCh0aT1VZS5tYXRjaCgvbGVnYWN5RHJhd2luZyByOmlkPSIoLio/KSIv'@;
put 'KSkmJih2ZVsiIWxlZ3JlbCJdPXRpWzFdKSwodGk9VWUubWF0Y2goUjIpKSYmKHZlWyIhY3RybGlkIl09dGkubWFwKGZ1bmN0aW9uKERuKXtyZXR1cm4gY24oRG4pfSkpLCh0aT1VZS5tYXRjaChzdykpJiZmdW5jdGlvbiBHQSh3LFApe3dbIiF0YWJsZXJlZnMiXXx8KHdbIiF0YWJsZXJlZnMi'@;
put 'XT1bXSksKFAubWF0Y2goV0EpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihEKXt3WyIhdGFibGVyZWZzIl0ucHVzaChjbihEKS5pZCl9KX0odmUsdGlbMV0pLFAmJlAubm9kaW0mJihNZS5zLmM9TWUucy5yPTApLCF2ZVsiIXJlZiJdJiZNZS5lLmM+PU1lLnMuYyYmTWUuZS5yPj1NZS5zLnImJih2'@;
put 'ZVsiIXJlZiJdPVZvKE1lKSksUC5zaGVldFJvd3M+MCYmdmVbIiFyZWYiXSl7dmFyIGZyPVBpKHZlWyIhcmVmIl0pO1Auc2hlZXRSb3dzPD0rZnIuZS5yJiYoZnIuZS5yPVAuc2hlZXRSb3dzLTEsZnIuZS5yPk1lLmUuciYmKGZyLmUucj1NZS5lLnIpLGZyLmUucjxmci5zLnImJihmci5zLnI9'@;
put 'ZnIuZS5yKSxmci5lLmM+TWUuZS5jJiYoZnIuZS5jPU1lLmUuYyksZnIuZS5jPGZyLnMuYyYmKGZyLnMuYz1mci5lLmMpLHZlWyIhZnVsbHJlZiJdPXZlWyIhcmVmIl0sdmVbIiFyZWYiXT1WbyhmcikpfXJldHVybiBrdCYmKHZlWyIhc2hlZXRGb3JtYXQiXT1mdW5jdGlvbiB2ZWUodyl7dmFy'@;
put 'IFA9e30sRD17fSxlZT0hMSxvZT17fSxnZT0hMTtyZXR1cm4gdy5kZWZhdWx0Um93SGVpZ2h0JiYoZWU9ITAsRC5ocHQ9cGFyc2VGbG9hdCh3LmRlZmF1bHRSb3dIZWlnaHQpKSx3Lnplcm9IZWlnaHQmJihlZT0hMCxELmhpZGRlbj1fcih3Lnplcm9IZWlnaHQpKSx3LmJhc2VDb2xXaWR0aD8o'@;
put 'Z2U9ITAsb2Uud2NoPXBhcnNlRmxvYXQody5iYXNlQ29sV2lkdGgpKTp3LmRlZmF1bHRDb2xXaWR0aCYmKGdlPSEwLG9lLndjaD1wYXJzZUZsb2F0KHcuZGVmYXVsdENvbFdpZHRoKS01L19zKSx3Lm91dGxpbmVMZXZlbENvbCYmKFAuY29sb3V0bGluZT1wYXJzZUludCh3Lm91dGxpbmVMZXZl'@;
put 'bENvbCkpLHcub3V0bGluZUxldmVsUm93JiYoUC5yb3dvdXRsaW5lPXBhcnNlSW50KHcub3V0bGluZUxldmVsUm93KSksdy50aGlja0JvdHRvbSYmKFAuYm90dGhpY2s9X3Iody50aGlja0JvdHRvbSkpLHcudGhpY2tUb3AmJihQLnRvcHRoaWNrPV9yKHcudGhpY2tUb3ApKSx3LmR5RGVzY2Vu'@;
put 'dCYmKFAuZHlEZXNjZW50PXBhcnNlRmxvYXQody5keURlc2NlbnQpKSxlZSYmKFNwKEQpLFAucm93PUQpLGdlJiYoX2Mob2UpLFAuY29sPW9lKSxQfShjbihrdFswXSkpKSxUdC5sZW5ndGg+MCYmKHZlWyIhY29scyJdPVR0KSxmbi5sZW5ndGg+MCYmKHZlWyIhbWVyZ2VzIl09Zm4pLGVlWyIh'@;
put 'aWQiXVt2ZVsiIXJlbCJdXSYmKHZlWyIhZHJhd2VsIl09ZWVbIiFpZCJdW3ZlWyIhcmVsIl1dKSxlZVsiIWlkIl1bdmVbIiFsZWdyZWwiXV0mJih2ZVsiIWxlZ2RyYXdlbCJdPWVlWyIhaWQiXVt2ZVsiIWxlZ3JlbCJdXSksKHZlWyIhY3RybGlkIl18fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKERu'@;
put 'KXtEbi5yZWw9ZWVbIiFpZCJdW0RuLmlkXX0pLG51bGw9PXZlWyIhZ3JpZGxpbmVzIl0mJih2ZVsiIWdyaWRsaW5lcyJdPSEwKSx2ZX0odyxlZSxELG9lLGdlLF9lLHZlKX0oaXQsUCxvZSxNZSxnZVtlZV0samUsVWUsWGUpO2JyZWFrO2Nhc2UiY2hhcnQiOmZ0PWZ1bmN0aW9uIFRWKHcsUCxE'@;
put 'LGVlLG9lLGdlLF9lLHZlKXtyZXR1cm4iLmJpbiI9PT1QLnNsaWNlKC00KT9mdW5jdGlvbiBHcCh3LFAsRCxlZSxvZSl7aWYoIXcpcmV0dXJuIHc7ZWV8fChlZT17IiFpZCI6e319KTt2YXIgZ2U9eyIhdHlwZSI6ImNoYXJ0IiwiIWRyYXdlbCI6bnVsbCwiIXJlbCI6IiJ9LF9lPVtdLHZlPSEx'@;
put 'O3JldHVybiB6byh3LGZ1bmN0aW9uKGplLFVlLFhlKXtzd2l0Y2goWGUpe2Nhc2UgNTUwOmdlWyIhcmVsIl09amU7YnJlYWs7Y2FzZSA2NTE6b2UuU2hlZXRzW0RdfHwob2UuU2hlZXRzW0RdPXt9KSxqZS5uYW1lJiYob2UuU2hlZXRzW0RdLkNvZGVOYW1lPWplLm5hbWUpO2JyZWFrO2Nhc2Ug'@;
put 'NTYyOmNhc2UgNjUyOmNhc2UgNjY5OmNhc2UgNjc5OmNhc2UgNTUxOmNhc2UgNTUyOmNhc2UgNDc2OmNhc2UgMzA3MjpicmVhaztjYXNlIDM1OnZlPSEwO2JyZWFrO2Nhc2UgMzY6dmU9ITE7YnJlYWs7Y2FzZSAzNzpfZS5wdXNoKFVlKTticmVhaztjYXNlIDM4Ol9lLnBvcCgpO2JyZWFrO2Rl'@;
put 'ZmF1bHQ6aWYoKFVlfHwiIikuaW5kZXhPZigiQmVnaW4iKT4wKV9lLnB1c2goVWUpO2Vsc2UgaWYoKFVlfHwiIikuaW5kZXhPZigiRW5kIik+MClfZS5wb3AoKTtlbHNlIGlmKCF2ZXx8UC5XVEYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAiK1hlKyIgIitVZSl9fSxQKSxl'@;
put 'ZVsiIWlkIl1bZ2VbIiFyZWwiXV0mJihnZVsiIWRyYXdlbCJdPWVlWyIhaWQiXVtnZVsiIXJlbCJdXSksZ2V9KHcsZWUsRCxvZSxnZSk6ZnVuY3Rpb24gWnAodyxQLEQsZWUsb2Upe2lmKCF3KXJldHVybiB3O2VlfHwoZWU9eyIhaWQiOnt9fSk7dmFyIF9lLGdlPXsiIXR5cGUiOiJjaGFydCIs'@;
put 'IiFkcmF3ZWwiOm51bGwsIiFyZWwiOiIifSx2ZT13Lm1hdGNoKGx3KTt2ZSYmJDgodmVbMF0sMCxvZSxEKTt2YXIgTWU9dy5tYXRjaChhdyk7cmV0dXJuIE1lJiYoZ2VbIiFtYXJnaW5zIl09clQoY24oTWVbMF0pKSksKF9lPXcubWF0Y2goL2RyYXdpbmcgcjppZD0iKC4qPykiLykpJiYoZ2Vb'@;
put 'IiFyZWwiXT1fZVsxXSksZWVbIiFpZCJdW2dlWyIhcmVsIl1dJiYoZ2VbIiFkcmF3ZWwiXT1lZVsiIWlkIl1bZ2VbIiFyZWwiXV0pLGdlfSh3LDAsRCxvZSxnZSl9KGl0LFAsb2UsTWUsZ2VbZWVdLGplKTticmVhaztjYXNlIm1hY3JvIjpmdD1mdW5jdGlvbiBPVih3LFAsRCxlZSxvZSxnZSxf'@;
put 'ZSx2ZSl7cmV0dXJuIFAuc2xpY2UoLTQpLHsiIXR5cGUiOiJtYWNybyJ9fSgwLFApO2JyZWFrO2Nhc2UiZGlhbG9nIjpmdD1mdW5jdGlvbiBEVih3LFAsRCxlZSxvZSxnZSxfZSx2ZSl7cmV0dXJuIFAuc2xpY2UoLTQpLHsiIXR5cGUiOiJkaWFsb2cifX0oMCxQKTticmVhaztkZWZhdWx0OnRo'@;
put 'cm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHNoZWV0IHR5cGUgIit2ZSl9aWYoTWUuY2FsbGJhY2spcmV0dXJuO19lW2VlXT1mdCxmdW5jdGlvbiBoTyh3LFAsRCxlZSxvZSxnZSxfZSx2ZSl7aWYodyYmd1siIWRyYXdlbCJdKXt2YXIgTWU9c24od1siIWRyYXdlbCJdLlRhcmdldCxlZSks'@;
put 'amU9amkoTWUpLFVlPWZ1bmN0aW9uIEhIKHcsUCxELGVlLG9lKXt2YXIgZ2U9e2NoYXJ0czpbXSxpbWFnZXM6W10sc2hhcGVzOltdfTtpZighdylyZXR1cm4gZ2U7dmFyIF9lPW9lfHx7fTtyZXR1cm4ody5tYXRjaCgvPFtePF0qPyhhYnNvbHV0ZUFuY2hvcnxvbmVDZWxsQW5jaG9yfHR3b0Nl'@;
put 'bGxBbmNob3IpLio/KGFic29sdXRlQW5jaG9yfG9uZUNlbGxBbmNob3J8dHdvQ2VsbEFuY2hvcikuKj8+L2cpfHxbXSkuZm9yRWFjaChmdW5jdGlvbih2ZSl7dmFyIE1lPSIiLGplPXt0eXBlOiIifSxVZT17fSxYZT0hMCxpdD0hMSxmdD0hMSxNdD0hMSx1dD17czp7fX0sd3Q9LTEsSHQ9W10s'@;
put 'a3Q9W10sVHQ9e3M6e2FsaWdubWVudDp7aG9yaXpvbnRhbDoiY2VudGVyIix2ZXJ0aWNhbDoiY2VudGVyIn19fSxZdD0iIixnbj0tMSxmbj17fTt2ZS5yZXBsYWNlKHF0LGZ1bmN0aW9uKEtuLHpuKXtIdD1udWxsO3ZhciBPbj1jbihLbiksZXI9am4oT25bMF0pLnJlcGxhY2UoL1tcL10/PiQv'@;
put 'LCIiKTtzd2l0Y2goZXIpe2Nhc2UiPGNsaWVudERhdGEiOmJyZWFrO2Nhc2UiPGFic29sdXRlQW5jaG9yIjpjYXNlIjxvbmVDZWxsQW5jaG9yIjpjYXNlIjx0d29DZWxsQW5jaG9yIjpqZS50eXBlPWpuKE9uWzBdKS5yZXBsYWNlKC9bPD5dL2csIiIpO2JyZWFrO2Nhc2UiPC9hYnNvbHV0ZUFu'@;
put 'Y2hvciI6Y2FzZSI8L29uZUNlbGxBbmNob3IiOmNhc2UiPC90d29DZWxsQW5jaG9yIjpicmVhaztjYXNlIjxwb3MiOmplLnBvcz17eDorT24ueCx5OitPbi55fTticmVhaztjYXNlIjxleHQiOlhlJiYoamUuZXh0PXt4OitPbi5jeCx5OitPbi5jeX0pO2JyZWFrO2Nhc2UiPGZyb20iOmNhc2Ui'@;
put 'PHRvIjpVZT17fTticmVhaztjYXNlIjwvZnJvbSI6WGUmJihqZS5mcm9tPVVlKTticmVhaztjYXNlIjwvdG8iOlhlJiYoamUudG89VWUpO2JyZWFrO2Nhc2UiPGNvbCI6Y2FzZSI8Y29sT2ZmIjpjYXNlIjxyb3ciOmNhc2UiPHJvd09mZiI6d3Q9em4rS24ubGVuZ3RoO2JyZWFrO2Nhc2UiPC9j'@;
put 'b2wiOlVlLmM9K3ZlLnNsaWNlKHd0LHpuKTticmVhaztjYXNlIjwvY29sT2ZmIjpVZS5jT2ZmPSt2ZS5zbGljZSh3dCx6bik7YnJlYWs7Y2FzZSI8L3JvdyI6VWUucj0rdmUuc2xpY2Uod3Qsem4pO2JyZWFrO2Nhc2UiPC9yb3dPZmYiOlVlLnJPZmY9K3ZlLnNsaWNlKHd0LHpuKTticmVhaztj'@;
put 'YXNlIjxzcCI6TWU9InNoYXBlIixUdC5BbmNob3I9amUsZ2Uuc2hhcGVzLnB1c2goVHQpLFhlPSExO2JyZWFrO2Nhc2UiPC9zcCI6WGU9ITA7YnJlYWs7Y2FzZSI8Z3JhcGhpY0ZyYW1lIjpNZT0iZ3JhcGhpYyIsWGU9ITE7YnJlYWs7Y2FzZSI8L2dyYXBoaWNGcmFtZSI6WGU9ITA7YnJlYWs7'@;
put 'Y2FzZSI8cGljIjpNZT0icGljdHVyZSIsWGU9ITE7YnJlYWs7Y2FzZSI8L3BpYyI6WGU9ITA7YnJlYWs7Y2FzZSI8Z3JwU3AiOk1lPSJncm91cHNoYXBlIixYZT0hMTticmVhaztjYXNlIjwvZ3JwU3AiOlhlPSEwO2JyZWFrO2Nhc2UiPGdyYXBoaWMiOmNhc2UiPC9ncmFwaGljIjpjYXNlIjx4'@;
put 'ZnJtIjpjYXNlIjwveGZybSI6Y2FzZSI8b2ZmIjpicmVhaztjYXNlIjxncmFwaGljRGF0YSI6aXQ9ITA7YnJlYWs7Y2FzZSI8L2dyYXBoaWNEYXRhIjppdD0hMTticmVhaztjYXNlIjxibGlwRmlsbCI6aXQ9ITA7YnJlYWs7Y2FzZSI8L2JsaXBGaWxsIjppdD0hMTticmVhaztjYXNlIjwvYmxp'@;
put 'cCI6YnJlYWs7Y2FzZSI8c3JjUmVjdCI6aXQ9ITA7YnJlYWs7Y2FzZSI8L3NyY1JlY3QiOml0PSExO2JyZWFrO2Nhc2UiPG5vRmlsbCI6aWYoZnQpYnJlYWs7IjxzcFByIj09a3Quc2xpY2UoLTEpWzBdJiYoVHQucy5mZ0NvbG9yPW51bGwpO2JyZWFrO2Nhc2UiPC9zb2xpZEZpbGwiOmlmKGZ0'@;
put 'fHxNdClicmVhazsiPHNwUHIiPT1rdC5zbGljZSgtMilbMF0/VHQucy5mZ0NvbG9yPWZuOiI8clByIj09a3Quc2xpY2UoLTIpWzBdJiZrdC5pbmRleE9mKCI8dHhCb2R5Iik+LTEmJih1dC5zLmNvbG9yPWZuKSxmbj17fSxNdD0hMTticmVhaztjYXNlIjxwcnN0R2VvbSI6InNoYXBlIj09TWUm'@;
put 'JihUdFsiIXNoYXBlIl09T24ucHJzdCk7YnJlYWs7Y2FzZSI8L3Byc3RHZW9tIjpjYXNlIjxhdkxzdCI6YnJlYWs7Y2FzZSI8dHhCb2R5IjppdD0hMCxUdC5SPVtdO2JyZWFrO2Nhc2UiPC90eEJvZHkiOml0PSExO2JyZWFrO2Nhc2UiPGJvZHlQciI6VHQucy5hbGlnbm1lbnQudmVydGljYWw9'@;
put 'UEhbT24uYW5jaG9yfHwidCJdfHwidG9wIjticmVhaztjYXNlIjxsc3RTdHlsZSI6YnJlYWs7Y2FzZSI8dCI6Z249em4rS24ubGVuZ3RoO2JyZWFrO2Nhc2UiPGJyIjpjYXNlIjxici8+IjpZdCs9IlxuIjticmVhaztjYXNlIjwvdCI6WXQrPXZlLnNsaWNlKGduLHpuKTticmVhaztjYXNlIjxw'@;
put 'UHIiOlR0LnMuYWxpZ25tZW50Lmhvcml6b250YWx8fChUdC5zLmFsaWdubWVudC5ob3Jpem9udGFsPWNBW09uLmFsZ258fCJsIl18fCJsZWZ0Iiksa3QuaW5kZXhPZigiPHR4Qm9keSIpPi0xJiYodXQucy5hbGlnbm1lbnQuaG9yaXpvbnRhbD1jQVtPbi5hbGdufHwibCJdfHwibGVmdCIpO2Jy'@;
put 'ZWFrO2Nhc2UiPHJQciI6T24uc3omJmt0LmluZGV4T2YoIjx0eEJvZHkiKT4tMSYmKFR0LnMuc3o9dXQucy5zej0rT24uc3ovMTAwKTticmVhaztjYXNlIjxwIjpZdD0iIix1dD17dDoicyIsdjoiIixzOnthbGlnbm1lbnQ6e319fTticmVhaztjYXNlIjwvcCI6InNoYXBlIj09TWUmJmt0Lmlu'@;
put 'ZGV4T2YoIjx0eEJvZHkiKT4tMSYmKFR0LnY9KFR0LnZ8fCIiKStZdCx1dC52PVl0LFR0LlIucHVzaCh1dCkpO2JyZWFrO2Nhc2UiPGxhdGluIjpPbi50eXBlZmFjZSYma3QuaW5kZXhPZigiPHR4Qm9keSIpPi0xJiYodXQucy5uYW1lPU9uLnR5cGVmYWNlKTticmVhaztjYXNlIjxzdHlsZSI6'@;
put 'aXQ9ITAsZnQ9ITA7YnJlYWs7Y2FzZSI8L3N0eWxlIjppdD0hMSxmdD0hMTticmVhaztjYXNlIjxsblJlZiI6Y2FzZSI8ZmlsbFJlZiI6Y2FzZSI8ZWZmZWN0UmVmIjpjYXNlIjxmb250UmVmIjpicmVhaztjYXNlIjwvZmlsbFJlZiI6IWZ0JiYic2hhcGUiPT1NZSYmKFR0LnMuZmdDb2xvcj1m'@;
put 'biksZm49e307YnJlYWs7Y2FzZSI8L2ZvbnRSZWYiOiFmdCYmInNoYXBlIj09TWUmJihUdC5zLmNvbG9yPWZuKSxmbj17fTticmVhaztjYXNlIjxzY2hlbWVDbHIiOnZhciB0cj17YmcxOiJsdDEiLGJnMjoibHQyIix0eDE6ImRrMSIsdHgyOiJkazIifVtPbi52YWxdfHxPbi52YWwsWW49KChl'@;
put 'ZS50aGVtZUVsZW1lbnRzfHx7fSkuY2xyU2NoZW1lfHxbXSkuZmluZChmdW5jdGlvbihsaSl7cmV0dXJuIGxpLm5hbWU9PXRyfSk7WW4/Zm4ucmdiPVluLnJnYjpNdD0hMDticmVhaztjYXNlIjxzY3JnYkNsciI6TXQ9ITA7YnJlYWs7Y2FzZSI8c3JnYkNsciI6Zm4ucmdiPU9uLnZhbC5zbGlj'@;
put 'ZSgtNik7YnJlYWs7Y2FzZSI8aHNsQ2xyIjpjYXNlIjxzeXNDbHIiOmNhc2UiPHByc3RDbHIiOk10PSEwO2JyZWFrO2Nhc2UiPGNoYXJ0IjpIdD1nZS5jaGFydHM7dmFyIGpyPU9uLmlkO2Nhc2UiPGJsaXAiOkh0fHwoSHQ9Z2UuaW1hZ2VzLGpyPU9uLmVtYmVkKSxIdC5wdXNoKHtBbmNob3I6'@;
put 'amUsVGFyZ2V0OihQWyIhaWQiXVtqcl18fHt9KS5UYXJnZXR9KSxPbi5saW5rJiYoSHRbSHQubGVuZ3RoLTFdLkxpbms9KFBbIiFpZCJdW09uLmxpbmtdfHx7fSkuVGFyZ2V0KTticmVhaztjYXNlIjxncnBTcFByIjppdD0hMDticmVhaztjYXNlIjwvZ3JwU3BQciI6aXQ9ITE7YnJlYWs7Y2Fz'@;
put 'ZSI8bnZHcnBTcFByIjppdD0hMDticmVhaztjYXNlIjwvbnZHcnBTcFByIjppdD0hMTticmVhaztjYXNlIjxzcFByIjppdD0hMDticmVhaztjYXNlIjwvc3BQciI6aXQ9ITE7YnJlYWs7Y2FzZSI8c3RyZXRjaCI6Y2FzZSI8L3N0cmV0Y2giOmNhc2UiPGZpbGxSZWN0IjpjYXNlIjxudkdyYXBo'@;
put 'aWNGcmFtZVByIjpjYXNlIjwvbnZHcmFwaGljRnJhbWVQciI6Y2FzZSI8Y052R3JhcGhpY0ZyYW1lUHIiOmNhc2UiPC9jTnZHcmFwaGljRnJhbWVQciI6Y2FzZSI8Z3JhcGhpY0ZyYW1lTG9ja3MiOmNhc2UiPG52UGljUHIiOmNhc2UiPC9udlBpY1ByIjpjYXNlIjxjTnZQaWNQciI6Y2FzZSI8'@;
put 'L2NOdlBpY1ByIjpjYXNlIjxwaWNMb2NrcyI6Y2FzZSI8Y052R3JwU3BQciI6Y2FzZSI8L2NOdkdycFNwUHIiOmNhc2UiPGdycFNwTG9ja3MiOmNhc2UiPG52U3BQciI6Y2FzZSI8L252U3BQciI6Y2FzZSI8Y052U3BQciI6Y2FzZSI8L2NOdlNwUHIiOmNhc2UiPHNwTG9ja3MiOmJyZWFrO2Nh'@;
put 'c2UiPGNOdlByIjppdD0hMDticmVhaztjYXNlIjwvY052UHIiOml0PSExO2JyZWFrO2Nhc2UiPGN4blNwIjppdD0hMDticmVhaztjYXNlIjwvY3huU3AiOml0PSExO2JyZWFrO2Nhc2UiPGNOdkN4blNwUHIiOml0PSEwO2JyZWFrO2Nhc2UiPC9jTnZDeG5TcFByIjppdD0hMTticmVhaztjYXNl'@;
put 'IjxudkN4blNwUHIiOmNhc2UiPC9udkN4blNwUHIiOmJyZWFrO2Nhc2UiPGV4dExzdCI6aXQ9ITAsZnQ9ITA7YnJlYWs7Y2FzZSI8L2V4dExzdCI6aXQ9ITEsZnQ9ITE7YnJlYWs7Y2FzZSI8L2V4dCI6YnJlYWs7ZGVmYXVsdDppZihfZSYmX2UuV1RGJiYhaXQpdGhyb3cgbmV3IEVycm9yKCJ1'@;
put 'bnJlY29nbml6ZWQgIitPblswXSsiIGluIGRyYXdpbmciKX1yZXR1cm4iPC8iPT1lci5zbGljZSgwLDIpP2t0LnBvcCgpOiIvPiIhPUtuLnNsaWNlKEtuLmxlbmd0aC0yKSYma3QucHVzaChlciksIiJ9KX0pLGdlfShubihELE1lLCEwKSxQbyhubihELGplLCEwKSxNZSksMCx2ZSxvZSk7aWYo'@;
put 'VWUpe2lmKFVlLmNoYXJ0cylmb3IodmFyIFhlPTA7WGU8VWUuY2hhcnRzLmxlbmd0aDsrK1hlKXt2YXIgaXQ9VWUuY2hhcnRzW1hlXSxmdD1zbihpdC5UYXJnZXQsTWUpLE10PWppKGZ0KSx1dD0iY2hhcnQiPT1QJiYwPT1YZSx3dD14MChubihELGZ0LCEwKSwwLDAsUG8obm4oRCxNdCwhMCks'@;
put 'ZnQpLDAsdXQ/dzpudWxsLGl0LHV0P251bGw6dyk7dXR8fCh3WyIhY2hhcnRzIl18fCh3WyIhY2hhcnRzIl09W10pLHdbIiFjaGFydHMiXS5wdXNoKHd0KSl9aWYob2UuYm9va0ltYWdlcyYmVWUuaW1hZ2VzKWZvcih2YXIgSHQ9MDtIdDxVZS5pbWFnZXMubGVuZ3RoOysrSHQpe3ZhciBrdD1V'@;
put 'ZS5pbWFnZXNbSHRdLFR0PXsiIXR5cGUiOiJpbWFnZSIsIiFwb3MiOnJBKGt0LkFuY2hvciksIiFwb3NUeXBlIjprdC5BbmNob3IudHlwZS5yZXBsYWNlKC9BbmNob3IvLCIiKSwiIWFic3BvcyI6eDIoa3QuQW5jaG9yLHcpLCIhcmVscG9zIjpBOChrdC5BbmNob3Isdyl9O2lmKGt0LlRhcmdl'@;
put 'dCYmKFR0WyIhcGF0aCJdPXNuKGt0LlRhcmdldCxNZSksVHRbIiFkYXRhIl09SXQoRCxUdFsiIXBhdGgiXSksVHRbIiFkYXRhdHlwZSJdPSJzdHJpbmciPT10eXBlb2YgVHRbIiFkYXRhIl0/ImJpbmFyeSI6ImJ1ZmZlciIpLGt0LkxpbmsmJihUdFsiIWRhdGF0eXBlIl18fChUdFsiIWRhdGF0'@;
put 'eXBlIl09InJlbW90ZSIpLFR0WyIhbGluayJdPWt0LkxpbmspLCFUdFsiIWRhdGF0eXBlIl0pdGhyb3ciSW1hZ2UgZGF0YSBjYW5ub3QgYmUgZm91bmQiO3dbIiFpbWFnZXMiXXx8KHdbIiFpbWFnZXMiXT1bXSksd1siIWltYWdlcyJdLnB1c2goVHQpfXZhciBZdCxnbjtpZihVZS5zaGFwZXMp'@;
put 'Zm9yKHZhciBmbj0wO2ZuPFVlLnNoYXBlcy5sZW5ndGg7Kytmbilnbj17IiF0eXBlIjoic2hhcGUiLCIhcG9zIjp4MigoWXQ9VWUuc2hhcGVzW2ZuXSkuQW5jaG9yLHcpLCIhcG9zVHlwZSI6WXQuQW5jaG9yLnR5cGUucmVwbGFjZSgvQW5jaG9yLywiIiksIiFhYnNwb3MiOngyKFl0LkFuY2hv'@;
put 'cix3KSwiIXJlbHBvcyI6QTgoWXQuQW5jaG9yLHcpfSxbInYiLCIhc2hhcGUiLCJzIiwiUiJdLmZvckVhY2gocW4pLHdbIiFzaGFwZXMiXXx8KHdbIiFzaGFwZXMiXT1bXSksd1siIXNoYXBlcyJdLnB1c2goZ24pfX1mdW5jdGlvbiBxbihLbil7WXRbS25dJiYoZ25bS25dPVl0W0tuXSl9fShm'@;
put 'dCx2ZSx3LFAsTWUsMCwwLFVlKTt2YXIgTXQ9W107cmV0dXJuIGdlJiZnZVtlZV0mJm10KGdlW2VlXSkuZm9yRWFjaChmdW5jdGlvbih1dCl7aWYoZ2VbZWVdW3V0XS5UeXBlPT1OaS5DTU5UKXt2YXIgd3Q9c24oZ2VbZWVdW3V0XS5UYXJnZXQsUCk7aWYoIShNdD1mdW5jdGlvbiBPZWUodyxQ'@;
put 'LEQpe3JldHVybiIuYmluIj09PVAuc2xpY2UoLTQpP2Z1bmN0aW9uIFVIKHcsUCl7dmFyIEQ9W10sZWU9W10sb2U9e30sZ2U9ITE7cmV0dXJuIHpvKHcsZnVuY3Rpb24odmUsTWUsamUpe3N3aXRjaChqZSl7Y2FzZSA2MzI6ZWUucHVzaCh2ZSk7YnJlYWs7Y2FzZSA2MzU6b2U9dmU7YnJlYWs7'@;
put 'Y2FzZSA2Mzc6b2UudD12ZS50LG9lLmg9dmUuaCxvZS5yPXZlLnI7YnJlYWs7Y2FzZSA2MzY6aWYob2UuYXV0aG9yPWVlW29lLmlhdXRob3JdLGRlbGV0ZSBvZS5pYXV0aG9yLFAuc2hlZXRSb3dzJiZvZS5yZngmJlAuc2hlZXRSb3dzPD1vZS5yZngucilicmVhaztvZS50fHwob2UudD0iIiks'@;
put 'ZGVsZXRlIG9lLnJmeCxELnB1c2gob2UpO2JyZWFrO2Nhc2UgMzA3MjpjYXNlIDM3OmNhc2UgMzg6YnJlYWs7Y2FzZSAzNTpnZT0hMDticmVhaztjYXNlIDM2OmdlPSExO2JyZWFrO2RlZmF1bHQ6aWYoISgoTWV8fCIiKS5pbmRleE9mKCJCZWdpbiIpPjApJiYhKChNZXx8IiIpLmluZGV4T2Yo'@;
put 'IkVuZCIpPjApJiYoIWdlfHxQLldURikpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAiK2plKyIgIitNZSl9fSksRH0odyxEKTpmdW5jdGlvbiBtQSh3LFApe2lmKHcubWF0Y2goLzwoPzpcdys6KT9jb21tZW50cyAqXC8+LykpcmV0dXJuW107dmFyIEQ9W10sZWU9W10sb2U9'@;
put 'dy5tYXRjaCgvPCg/Olx3KzopP2F1dGhvcnM+KFtcc1xTXSopPFwvKD86XHcrOik/YXV0aG9ycz4vKTtvZSYmb2VbMV0mJm9lWzFdLnNwbGl0KC88XC9cdyo6P2F1dGhvcj4vKS5mb3JFYWNoKGZ1bmN0aW9uKF9lKXtpZigiIiE9PV9lJiYiIiE9PV9lLnRyaW0oKSl7dmFyIHZlPV9lLm1hdGNo'@;
put 'KC88KD86XHcrOik/YXV0aG9yW14+XSo+KC4qKS8pO3ZlJiZELnB1c2godmVbMV0pfX0pO3ZhciBnZT13Lm1hdGNoKC88KD86XHcrOik/Y29tbWVudExpc3Q+KFtcc1xTXSopPFwvKD86XHcrOik/Y29tbWVudExpc3Q+Lyk7cmV0dXJuIGdlJiZnZVsxXSYmZ2VbMV0uc3BsaXQoLzxcL1x3Kjo/'@;
put 'Y29tbWVudD4vKS5mb3JFYWNoKGZ1bmN0aW9uKF9lKXtpZigiIiE9PV9lJiYiIiE9PV9lLnRyaW0oKSl7dmFyIHZlPV9lLm1hdGNoKC88KD86XHcrOik/Y29tbWVudFtePl0qPi8pO2lmKHZlKXt2YXIgTWU9Y24odmVbMF0pLGplPXthdXRob3I6TWUuYXV0aG9ySWQmJkRbTWUuYXV0aG9ySWRd'@;
put 'fHwic2hlZXRqc2dob3N0IixyZWY6TWUucmVmLGd1aWQ6TWUuZ3VpZH0sVWU9Y2EoTWUucmVmKTtpZighKFAuc2hlZXRSb3dzJiZQLnNoZWV0Um93czw9VWUucikpe3ZhciBYZT1fZS5tYXRjaCgvPCg/Olx3KzopP3RleHQ+KFtcc1xTXSopPFwvKD86XHcrOik/dGV4dD4vKSxpdD0hIVhlJiYh'@;
put 'IVhlWzFdJiZkXyhYZVsxXSl8fHtyOiIiLHQ6IiIsaDoiIn07amUucj1pdC5yLCI8dD48L3Q+Ij09aXQuciYmKGl0LnQ9aXQuaD0iIiksamUudD0oaXQudHx8IiIpLnJlcGxhY2UoL1xyXG4vZywiXG4iKS5yZXBsYWNlKC9cci9nLCJcbiIpLFAuY2VsbEhUTUwmJihqZS5oPWl0LmgpLGVlLnB1'@;
put 'c2goamUpfX19fSksZWV9KHcsRCl9KEl0KHcsd3QsITApLHd0LE1lKSl8fCFNdC5sZW5ndGgpcmV0dXJuOyFmdW5jdGlvbiBPXyh3LFApe3ZhciBlZSxEPUFycmF5LmlzQXJyYXkodyk7UC5mb3JFYWNoKGZ1bmN0aW9uKG9lKXt2YXIgZ2U9Y2Eob2UucmVmKTtpZihEPyh3W2dlLnJdfHwod1tn'@;
put 'ZS5yXT1bXSksZWU9d1tnZS5yXVtnZS5jXSk6ZWU9d1tvZS5yZWZdLCFlZSl7ZWU9e3Q6InoifSxEP3dbZ2Uucl1bZ2UuY109ZWU6d1tvZS5yZWZdPWVlO3ZhciBfZT1QaSh3WyIhcmVmIl18fCJCRFdHTzEwMDAwMDE6QTEiKTtfZS5zLnI+Z2UuciYmKF9lLnMucj1nZS5yKSxfZS5lLnI8Z2Uu'@;
put 'ciYmKF9lLmUucj1nZS5yKSxfZS5zLmM+Z2UuYyYmKF9lLnMuYz1nZS5jKSxfZS5lLmM8Z2UuYyYmKF9lLmUuYz1nZS5jKTt2YXIgdmU9Vm8oX2UpO3ZlIT09d1siIXJlZiJdJiYod1siIXJlZiJdPXZlKX1lZS5jfHwoZWUuYz1bXSk7dmFyIE1lPXthOm9lLmF1dGhvcix0Om9lLnQscjpvZS5y'@;
put 'fTtNZS5yJiYic3RyaW5nIj09dHlwZW9mIE1lLnImJihNZS5SPXM4KE1lLnIpKSxvZS5oJiYoTWUuaD1vZS5oKSxlZS5jLnB1c2goTWUpfSl9KGZ0LE10KX19KSxmdW5jdGlvbiBpQih3LFAsRCxlZSxvZSxnZSxfZSl7IXd8fCF3WyIhdGFibGVyZWZzIl18fCFEfHwhRFsiIWlkIl18fCh3WyIh'@;
put 'dGFibGVzIl09W10sd1siIXRhYmxlcmVmcyJdLmZvckVhY2goZnVuY3Rpb24odmUpe3ZhciBNZT1EWyIhaWQiXVt2ZV07aWYoTWUmJk1lLlRhcmdldCl7dmFyIGplPXNuKE1lLlRhcmdldCxlZSk7IWZ1bmN0aW9uIFltKHcsUCxELGVlLG9lKXt2YXIgZ2U9e3N0eWxlOnt9LGhlYWRlcjowfSxf'@;
put 'ZT0hMTt3LnJlcGxhY2UocXQsZnVuY3Rpb24odmUpe3ZhciBNZT1jbih2ZSk7c3dpdGNoKGpuKE1lWzBdKSl7Y2FzZSI8P3htbCI6Y2FzZSI8L3RhYmxlPiI6Y2FzZSI8L2F1dG9GaWx0ZXI+IjpjYXNlIjxzb3J0U3RhdGUiOmNhc2UiPHNvcnRTdGF0ZT4iOmNhc2UiPC9zb3J0U3RhdGU+Ijpj'@;
put 'YXNlIjwvdGFibGVDb2x1bW5zIjpjYXNlIjwvdGFibGVDb2x1bW5zPiI6Y2FzZSI8L3RhYmxlQ29sdW1uPiI6Y2FzZSI8Y2FsY3VsYXRlZENvbHVtbkZvcm11bGE+IjpjYXNlIjxjYWxjdWxhdGVkQ29sdW1uRm9ybXVsYSI6Y2FzZSI8L2NhbGN1bGF0ZWRDb2x1bW5Gb3JtdWxhPiI6Y2FzZSI8'@;
put 'dG90YWxzUm93Rm9ybXVsYT4iOmNhc2UiPHRvdGFsc1Jvd0Zvcm11bGEiOmNhc2UiPC90b3RhbHNSb3dGb3JtdWxhPiI6Y2FzZSI8eG1sQ29sdW1uUHI+IjpjYXNlIjx4bWxDb2x1bW5QciI6Y2FzZSI8L3htbENvbHVtblByPiI6Y2FzZSI8c29ydENvbmRpdGlvbj4iOmNhc2UiPHNvcnRDb25k'@;
put 'aXRpb24iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmNhc2UiPGV4dExzdC8+IjpicmVhaztjYXNlIjx0YWJsZSI6TWUucmVmJiYoZ2UucmVmPU1lLnJlZiksTWUubmFtZT9nZS5uYW1lPU1lLm5hbWU6TWUuZGlzcGxheU5hbWUmJihnZS5uYW1lPU1lLmRp'@;
put 'c3BsYXlOYW1lKSxudWxsIT1NZS5oZWFkZXJyb3djb3VudCYmMSE9K01lLmhlYWRlcnJvd2NvdW50P2dlLmhlYWRlcj0rTWUuaGVhZGVycm93Y291bnQ6bnVsbD09TWUuaGVhZGVycm93Y291bnQmJihnZS5oZWFkZXI9MSk7YnJlYWs7Y2FzZSI8YXV0b0ZpbHRlciI6Y2FzZSI8YXV0b0ZpbHRl'@;
put 'cj4iOmdlLmZpbHRlcj0hMDticmVhaztjYXNlIjx0YWJsZUNvbHVtbnMiOmNhc2UiPHRhYmxlQ29sdW1ucz4iOmdlLmNvbHM9W107YnJlYWs7Y2FzZSI8dGFibGVTdHlsZUluZm8iOk1lLnNob3dSb3dTdHJpcGVzJiYoZ2Uuc3R5bGUucm93c3RyaXBlPV9yKE1lLnNob3dSb3dTdHJpcGVzKSks'@;
put 'TWUuc2hvd0NvbHVtblN0cmlwZXMmJihnZS5zdHlsZS5jb2xzdHJpcGU9X3IoTWUuc2hvd0NvbHVtblN0cmlwZXMpKSxNZS5zaG93Rmlyc3RDb2x1bW4mJihnZS5zdHlsZS5jb2xmaXJzdD1fcihNZS5zaG93Rmlyc3RDb2x1bW4pKSxNZS5zaG93TGFzdENvbHVtbiYmKGdlLnN0eWxlLmNvbGxh'@;
put 'c3Q9X3IoTWUuc2hvd0xhc3RDb2x1bW4pKSxNZS5uYW1lJiYoZ2Uuc3R5bGUubmFtZT1NZS5uYW1lLnJlcGxhY2UoL15UYWJsZVN0eWxlLywiIikpO2JyZWFrO2Nhc2UiPHRhYmxlQ29sdW1uIjpjYXNlIjx0YWJsZUNvbHVtbj4iOmdlLmNvbHMucHVzaCh7aWQ6K01lLmlkLG5hbWU6TWUubmFt'@;
put 'ZX0pO2JyZWFrO2Nhc2UiPGZpbHRlckNvbHVtbj4iOmNhc2UiPGZpbHRlckNvbHVtbiI6Y2FzZSI8Y3VzdG9tRmlsdGVycyI6Y2FzZSI8Y3VzdG9tRmlsdGVycz4iOmNhc2UiPGV4dCI6X2U9ITA7YnJlYWs7Y2FzZSI8L2ZpbHRlckNvbHVtbj4iOmNhc2UiPC9jdXN0b21GaWx0ZXJzPiI6Y2Fz'@;
put 'ZSI8L2V4dD4iOl9lPSExO2JyZWFrO2RlZmF1bHQ6aWYoIV9lJiZvZS5XVEYpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitNZVswXSsiIGluIHRhYmxlIil9cmV0dXJuIHZlfSksZ2UuZmlsdGVyfHwoZ2UuZmlsdGVyPSExKSxnZS5zdHlsZS5uYW1lJiYhZ2Uuc3R5bGUubmFtZS5t'@;
put 'YXRjaCgvXihMaWdodHxNZWRpdW18RGFyaylcZCskLykmJkQuVGFibGUmJkQuVGFibGUuZm9yRWFjaChmdW5jdGlvbih2ZSl7KHZlLm5hbWU9PWdlLnN0eWxlLm5hbWV8fHZlLnJhd25hbWU9PWdlLnN0eWxlLm5hbWUpJiYoZ2Uuc3R5bGUucmF3PUp0KHZlKSl9KSxQWyIhdGFibGVzIl0ucHVz'@;
put 'aChnZSl9KEl0KFAsamUsITApLHcsb2UsMCxfZSl9fSksZGVsZXRlIHdbIiF0YWJsZXJlZnMiXSl9KGZ0LHcsZ2VbZWVdLFAsWGUsMCxNZSksdHlwZW9mIHBhcnNlX3NoZWV0X3Bpdm90PCJ1IiYmaHYucHVzaChbZnQsdyxnZVtlZV0sUCx7U2hlZXRzOl9lfSxYZSxNZV0pLGZ1bmN0aW9uIHBP'@;
put 'KHcsUCxELGVlLG9lLGdlLF9lLHZlKXtpZih3JiZ3WyIhbGVnZHJhd2VsIl0pe3ZhciBNZT1zbih3WyIhbGVnZHJhd2VsIl0uVGFyZ2V0LGVlKSxqZT1ubihELE1lLCEwKTtqZSYmZnVuY3Rpb24gTkgodyxQLEQpe3ZhciBlZT0wOyh3Lm1hdGNoKE9wKXx8W10pLmZvckVhY2goZnVuY3Rpb24o'@;
put 'b2Upe3ZhciBIdCxrdCxUdCxZdCxnbixxbixmbixLbixnZT0iIixfZT0hMCx2ZT0iIixNZT0tMSxqZT17fSxVZT17fSxYZT17fSxpdD0tMSxmdD0tMSxNdD0iIix1dD0iIix3dD0iIix6bj0hMSxPbj0hMTtzd2l0Y2gob2UucmVwbGFjZShxdCxmdW5jdGlvbihZbixqcil7dmFyIGxpPWNuKFlu'@;
put 'KTtzd2l0Y2goam4obGlbMF0pKXtjYXNlIjxzaGFwZSI6bGkuZmlsbGNvbG9yJiYoamUuY29sb3IxPWxpLmZpbGxjb2xvciksbGkuc3Ryb2tlY29sb3ImJihYZS5jb2xvcj1saS5zdHJva2Vjb2xvcik7YnJlYWs7Y2FzZSI8ZmlsbCI6Y2FzZSI8ZmlsbD4iOiI8djpmaWxsIj09bGlbMF0mJihs'@;
put 'aS5jb2xvcjImJihqZS5jb2xvcjI9bGkuY29sb3IyKSxsaS50eXBlJiYoamUudHlwZT1saS50eXBlKSk7YnJlYWs7Y2FzZSI8L2ZpbGw+IjpjYXNlIjxsb2NrIjpjYXNlIjxsb2NrLz4iOmJyZWFrO2Nhc2UiPHNoYWRvdyI6bGkuY29sb3ImJihVZS5jb2xvcj1saS5jb2xvciksbGkub24mJihV'@;
put 'ZS5vbj1saS5vbik7YnJlYWs7Y2FzZSI8Q2xpZW50RGF0YSI6bGkuT2JqZWN0VHlwZSYmKGdlPWxpLk9iamVjdFR5cGUpO2JyZWFrO2Nhc2UiPFZpc2libGUiOmNhc2UiPFZpc2libGUvPiI6X2U9ITE7YnJlYWs7Y2FzZSI8QW5jaG9yIjpjYXNlIjxBbmNob3I+IjpjYXNlIjxSb3ciOmNhc2Ui'@;
put 'PFJvdz4iOmNhc2UiPENvbHVtbiI6Y2FzZSI8Q29sdW1uPiI6Y2FzZSI8Rm1sYU1hY3JvIjpjYXNlIjxGbWxhTWFjcm8+IjpjYXNlIjxGbWxhTGluayI6Y2FzZSI8Rm1sYUxpbms+IjpjYXNlIjxGbWxhUmFuZ2UiOmNhc2UiPEZtbGFSYW5nZT4iOmNhc2UiPFNlbFR5cGUiOmNhc2UiPFNlbFR5'@;
put 'cGU+IjpjYXNlIjxWYWwiOmNhc2UiPFZhbD4iOmNhc2UiPE1pbiI6Y2FzZSI8TWluPiI6Y2FzZSI8TWF4IjpjYXNlIjxNYXg+IjpjYXNlIjxJbmMiOmNhc2UiPEluYz4iOmNhc2UiPFBhZ2UiOmNhc2UiPFBhZ2U+IjpjYXNlIjxDaGVja2VkIjpjYXNlIjxDaGVja2VkPiI6Y2FzZSI8dGV4dGJv'@;
put 'eCI6Y2FzZSI8dGV4dGJveD4iOk1lPWpyK1luLmxlbmd0aDticmVhaztjYXNlIjwvQW5jaG9yPiI6dmU9b2Uuc2xpY2UoTWUsanIpLnRyaW0oKTticmVhaztjYXNlIjwvUm93PiI6aXQ9K29lLnNsaWNlKE1lLGpyKS50cmltKCk7YnJlYWs7Y2FzZSI8L0NvbHVtbj4iOmZ0PStvZS5zbGljZShN'@;
put 'ZSxqcikudHJpbSgpO2JyZWFrO2Nhc2UiPC9GbWxhTWFjcm8+IjpNdD1vZS5zbGljZShNZSxqcikudHJpbSgpO2JyZWFrO2Nhc2UiPC9GbWxhTGluaz4iOnV0PW9lLnNsaWNlKE1lLGpyKS50cmltKCk7YnJlYWs7Y2FzZSI8L0ZtbGFSYW5nZT4iOmZuPW9lLnNsaWNlKE1lLGpyKS50cmltKCk7'@;
put 'YnJlYWs7Y2FzZSI8L1NlbFR5cGU+IjpLbj1vZS5zbGljZShNZSxqcikudHJpbSgpO2JyZWFrO2Nhc2UiPC9WYWw+IjpIdD0rb2Uuc2xpY2UoTWUsanIpLnRyaW0oKTticmVhaztjYXNlIjwvTWluPiI6a3Q9K29lLnNsaWNlKE1lLGpyKS50cmltKCk7YnJlYWs7Y2FzZSI8L01heD4iOlR0PStv'@;
put 'ZS5zbGljZShNZSxqcikudHJpbSgpO2JyZWFrO2Nhc2UiPC9JbmM+IjpZdD0rb2Uuc2xpY2UoTWUsanIpLnRyaW0oKTticmVhaztjYXNlIjwvUGFnZT4iOmduPStvZS5zbGljZShNZSxqcikudHJpbSgpO2JyZWFrO2Nhc2UiPC9DaGVja2VkPiI6cW49K29lLnNsaWNlKE1lLGpyKS50cmltKCk7'@;
put 'YnJlYWs7Y2FzZSI8L3RleHRib3g+Ijp3dD1vZS5zbGljZShNZSxqcikudHJpbSgpO2JyZWFrO2Nhc2UiPE1vdmVXaXRoQ2VsbHMvPiI6Y2FzZSI8TW92ZVdpdGhDZWxscz4iOnpuPSEwO2JyZWFrO2Nhc2UiPFNpemVXaXRoQ2VsbHMvPiI6Y2FzZSI8U2l6ZVdpdGhDZWxscz4iOk9uPSEwfXJl'@;
put 'dHVybiIifSksZ2Upe2Nhc2UiTm90ZSI6dmFyIGVyPWVhLnNoZWV0X2dldF9jZWxsKFAsaXQ+PTAmJmZ0Pj0wP3BpKHtyOml0LGM6ZnR9KTpEW2VlXS5yZWYpO2VyLmMmJihlci5jLmhpZGRlbj1fZSx2ZSYmKGVyLmMucmF3YW5jaG9yPXZlLFQ4KHZlLGVyLmMpLGlBKGVyLmNbIiFwb3MiXSwy'@;
put 'KiEhem4rISFPbixQKSksamUuY29sb3IxJiYoZXIuYy5maWxsPWplKSxVZS5jb2xvciYmKGVyLmMuc2hhZG93PVVlKSxYZS5jb2xvciYmKGVyLmMuc3Ryb2tlPVhlKSksKytlZTticmVhaztjYXNlIkJ1dHRvbiI6Y2FzZSJHQm94IjpjYXNlIkRyb3AiOmNhc2UiTGFiZWwiOmNhc2UiQ2hlY2ti'@;
put 'b3giOmNhc2UiU2Nyb2xsIjpjYXNlIkxpc3QiOmNhc2UiUmFkaW8iOmNhc2UiU3BpbiI6Y2FzZSJFZGl0IjpQWyIhY29udHJvbHMiXXx8KFBbIiFjb250cm9scyJdPVtdKTt2YXIgdHI9eyIhdHlwZSI6Z2V9O3ZlJiZUOCh2ZSx0ciksTXQmJih0ci5tYWNybz1NdC5yZXBsYWNlKCJbMF0hIiwi'@;
put 'IikpLHV0JiYodHIubGluaz11dCksIlNjcm9sbCI9PWdlfHwiU3BpbiI9PWdlPyhudWxsPT1IdCYmKEh0PTApLG51bGw9PWt0JiYoa3Q9MCksbnVsbD09VHQmJihUdD0zZTQpLG51bGw9PVl0JiYoWXQ9MSksIlNjcm9sbCI9PWdlJiZudWxsPT1nbiYmKGduPTEwKSk6IlJhZGlvIj09Z2V8fCJD'@;
put 'aGVja2JveCI9PWdlPyhudWxsPT1xbiYmKHFuPTApLEh0PXFuKTooIkxpc3QiPT1nZXx8IkRyb3AiPT1nZSkmJihudWxsIT1mbiYmKHRyLnJlZj1mbiksbnVsbD09S24mJihLbj0iU2luZ2xlIiksIkxpc3QiPT1nZSYmKHRyLnNlbD1LbikpLG51bGwhPUh0JiYodHIudmFsPUh0KSxudWxsIT1r'@;
put 'dCYmKHRyLm1pbj1rdCksbnVsbCE9VHQmJih0ci5tYXg9VHQpLG51bGwhPVl0JiYodHIuc3RlcD1ZdCksbnVsbCE9Z24mJih0ci5wYWdlPWduKSx3dCYmKHRyLnQ9d3QucmVwbGFjZSgvXHMqPFtcc1xTXSo/PlxzKi9nLCIiKSksUFsiIWNvbnRyb2xzIl0ucHVzaCh0cil9fSl9KEZpKGplKSx3'@;
put 'LHZlfHxbXSksd1siIUxEUCJdPU1lLHdbIiFjdHJsaWQiXSYmd1siIWN0cmxpZCJdLmZvckVhY2goZnVuY3Rpb24oVWUpe2lmKFVlLnJlbCYmVWUucmVsLlRhcmdldCl7dmFyIFhlPXNuKFVlLnJlbC5UYXJnZXQsZWUpO1VlLnBhdGg9WGUsZGVsZXRlIFVlLnJlbH19KX19KGZ0LDAsdyxQLDAs'@;
put 'MCwwLE10KSxmdH1jYXRjaCh1dCl7aWYoTWUuV1RGKXRocm93IHV0fX1mdW5jdGlvbiBtdSh3KXtyZXR1cm4iLyI9PXcuY2hhckF0KDApP3cuc2xpY2UoMSk6d312YXIgYUI9ZnVuY3Rpb24oKXt9O2Z1bmN0aW9uIG1PKHcsUCl7aWYoaHY9W10sZHYoUD1QfHx7fSksX24odywiTUVUQS1JTkYv'@;
put 'bWFuaWZlc3QueG1sIil8fF9uKHcsIm9iamVjdGRhdGEueG1sIikpcmV0dXJuIGZ1bmN0aW9uIGxPKHcsUCl7UD1QfHx7fSxfbih3LCJNRVRBLUlORi9tYW5pZmVzdC54bWwiKSYmZnVuY3Rpb24gQmwodyxQKXtmb3IodmFyIGVlLG9lLEQ9UHcodyk7ZWU9V3IuZXhlYyhEKTspc3dpdGNoKGVl'@;
put 'WzNdKXtjYXNlIm1hbmlmZXN0IjpicmVhaztjYXNlImZpbGUtZW50cnkiOmlmKCIvIj09KG9lPWNuKGVlWzBdLCExKSkucGF0aCYmb2UudHlwZSE9PU5jKXRocm93IG5ldyBFcnJvcigiVGhpcyBPcGVuRG9jdW1lbnQgaXMgbm90IGEgc3ByZWFkc2hlZXQiKTticmVhaztjYXNlImVuY3J5cHRp'@;
put 'b24tZGF0YSI6Y2FzZSJhbGdvcml0aG0iOmNhc2Uic3RhcnQta2V5LWdlbmVyYXRpb24iOmNhc2Uia2V5LWRlcml2YXRpb24iOnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgT0RTIEVuY3J5cHRpb24iKTtkZWZhdWx0OmlmKFAmJlAuV1RGKXRocm93IGVlfX0oSXQodywiTUVUQS1JTkYv'@;
put 'bWFuaWZlc3QueG1sIiksUCk7dmFyIEQ9bm4odywiY29udGVudC54bWwiKTtpZighRCl0aHJvdyBuZXcgRXJyb3IoIk1pc3NpbmcgY29udGVudC54bWwgaW4gT0RTIC8gVU9GIGZpbGUiKTt2YXIgZWU9aDEoRmkoRCksUCk7cmV0dXJuIF9uKHcsIm1ldGEueG1sIikmJihlZS5Qcm9wcz1uaChJ'@;
put 'dCh3LCJtZXRhLnhtbCIpKSksZWV9KHcsUCk7aWYoX24odywiSW5kZXgvRG9jdW1lbnQuaXdhIikpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBOVU1CRVJTIGZpbGUiKTt2YXIgZ2UsX2UsRD1mdW5jdGlvbiB2dCh3KXtmb3IodmFyIFA9dy5GdWxsUGF0aHN8fG10KHcuZmlsZXMpLEQ9'@;
put 'W10sZWU9MDtlZTxQLmxlbmd0aDsrK2VlKSIvIiE9UFtlZV0uc2xpY2UoLTEpJiZELnB1c2goUFtlZV0pO3JldHVybiBELnNvcnQoKX0odyksZWU9ZnVuY3Rpb24gajYodyl7dmFyIFA9e3dvcmtib29rczpbXSxzaGVldHM6W10sY2hhcnRzOltdLGRpYWxvZ3M6W10sbWFjcm9zOltdLHJlbHM6'@;
put 'W10sc3RyczpbXSxjb21tZW50czpbXSxsaW5rczpbXSxjb3JlcHJvcHM6W10sZXh0cHJvcHM6W10sY3VzdHByb3BzOltdLHRoZW1lczpbXSxzdHlsZXM6W10sY2FsY2NoYWluczpbXSx2YmE6W10sZHJhd2luZ3M6W10scGl2b3RzOltdLHBpdm90Y2FjaGVzOltdLHBpdm90cmVjb3JkczpbXSxk'@;
put 'YXRhbW9kZWxzOltdLGNoYXJ0b2JqczpbXSxjaGFydHN0eWxlczpbXSxjaGFydGNvbG9yczpbXSxjaGFydGV4czpbXSx0YWJsZXM6W10sY29ubnM6W10sY3RybHByb3BzOltdLGN1c3RvbXhtbHByb3BzOltdLFRPRE86W10seG1sbnM6IiJ9O2lmKCF3fHwhdy5tYXRjaClyZXR1cm4gUDt2YXIg'@;
put 'RD17fTtpZigody5tYXRjaChxdCl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGVlKXt2YXIgb2U9Y24oZWUpO3N3aXRjaChvZVswXS5yZXBsYWNlKEhuLCI8Iikpe2Nhc2UiPD94bWwiOmJyZWFrO2Nhc2UiPFR5cGVzIjpQLnhtbG5zPW9lWyJ4bWxucyIrKG9lWzBdLm1hdGNoKC88KFx3Kyk6Lyl8'@;
put 'fFsiIiwiIl0pWzFdXTticmVhaztjYXNlIjxEZWZhdWx0IjpEW29lLkV4dGVuc2lvbi50b0xvd2VyQ2FzZSgpXT1vZS5Db250ZW50VHlwZTticmVhaztjYXNlIjxPdmVycmlkZSI6dm9pZCAwIT09UFt6c1tvZS5Db250ZW50VHlwZV1dJiZQW3pzW29lLkNvbnRlbnRUeXBlXV0ucHVzaChvZS5Q'@;
put 'YXJ0TmFtZSl9fSksUC54bWxucyE9PXNhLkNUKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBOYW1lc3BhY2U6ICIrUC54bWxucyk7cmV0dXJuIFAuY2FsY2NoYWluPVAuY2FsY2NoYWlucy5sZW5ndGg+MD9QLmNhbGNjaGFpbnNbMF06IiIsUC5zc3Q9UC5zdHJzLmxlbmd0aD4wP1Auc3Ryc1sw'@;
put 'XToiIixQLnN0eWxlPVAuc3R5bGVzLmxlbmd0aD4wP1Auc3R5bGVzWzBdOiIiLFAuY29ubj1QLmNvbm5zLmxlbmd0aD4wP1AuY29ubnNbMF06IiIsUC5kZWZhdWx0cz1ELGRlbGV0ZSBQLmNhbGNjaGFpbnMsUH0obm4odywiW0NvbnRlbnRfVHlwZXNdLnhtbCIpKSxvZT0hMTtpZigwPT09ZWUu'@;
put 'd29ya2Jvb2tzLmxlbmd0aCYmSXQodyxfZT0ieGwvd29ya2Jvb2sueG1sIiwhMCkmJmVlLndvcmtib29rcy5wdXNoKF9lKSwwPT09ZWUud29ya2Jvb2tzLmxlbmd0aCl7aWYoIUl0KHcsX2U9InhsL3dvcmtib29rLmJpbiIsITApKXRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQgd29y'@;
put 'a2Jvb2siKTtlZS53b3JrYm9va3MucHVzaChfZSksb2U9ITB9ImJpbiI9PWVlLndvcmtib29rc1swXS5zbGljZSgtMykmJihvZT0hMCk7dmFyIHZlPXt9LE1lPXt9O2lmKCFQLmJvb2tTaGVldHMmJiFQLmJvb2tQcm9wcyl7aWYoWjg9W10sZWUuc3N0KXRyeXtaOD1mdW5jdGlvbiB1dih3LFAs'@;
put 'RCl7cmV0dXJuIi5iaW4iPT09UC5zbGljZSgtNCk/ZnVuY3Rpb24gUUYodyxQKXt2YXIgRD1bXSxlZT0hMTtyZXR1cm4gem8odyxmdW5jdGlvbihnZSxfZSx2ZSl7c3dpdGNoKHZlKXtjYXNlIDE1OTpELkNvdW50PWdlWzBdLEQuVW5pcXVlPWdlWzFdO2JyZWFrO2Nhc2UgMTk6RC5wdXNoKGdl'@;
put 'KTticmVhaztjYXNlIDE2MDpyZXR1cm4hMDtjYXNlIDM1OmVlPSEwO2JyZWFrO2Nhc2UgMzY6ZWU9ITE7YnJlYWs7ZGVmYXVsdDppZihfZS5pbmRleE9mKCJCZWdpbiIpPjB8fF9lLmluZGV4T2YoIkVuZCIpLCFlZXx8UC5XVEYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAi'@;
put 'K3ZlKyIgIitfZSl9fSksRH0odyxEKTpmdW5jdGlvbiBQeCh3LFApe3ZhciBEPVtdLGVlPSIiO2lmKCF3KXJldHVybiBEO3ZhciBvZT13Lm1hdGNoKEl4KTtpZihvZSl7ZWU9b2VbMl0ucmVwbGFjZShSeCwiIikuc3BsaXQoTHgpO2Zvcih2YXIgZ2U9MDtnZSE9ZWUubGVuZ3RoOysrZ2Upe3Zh'@;
put 'ciBfZT1kXyhlZVtnZV0udHJpbSgpLFApO251bGwhPV9lJiYoRFtELmxlbmd0aF09X2UpfW9lPWNuKG9lWzFdKSxELkNvdW50PW9lLmNvdW50LEQuVW5pcXVlPW9lLnVuaXF1ZUNvdW50fXJldHVybiBEfSh3LEQpfShJdCh3LG11KGVlLnNzdCkpLGVlLnNzdCxQKX1jYXRjaChycil7aWYoUC5X'@;
put 'VEYpdGhyb3cgcnJ9UC5jZWxsU3R5bGVzJiZlZS50aGVtZXMubGVuZ3RoJiYodmU9ZnVuY3Rpb24gc3YodyxQLEQpe3JldHVybiBrOCh3LEQpfShubih3LGVlLnRoZW1lc1swXS5yZXBsYWNlKC9eXC8vLCIiKSwhMCl8fCIiLDAsUCkpLGVlLnN0eWxlJiYoTWU9ZnVuY3Rpb24gT3codyxQLEQs'@;
put 'ZWUpe3JldHVybiIuYmluIj09PVAuc2xpY2UoLTQpP2Z1bmN0aW9uIENfKHcsUCxEKXt2YXIgZWU9e051bWJlckZtdDpbXX07Zm9yKHZhciBvZSBpbiBTLl90YWJsZSllZS5OdW1iZXJGbXRbb2VdPVMuX3RhYmxlW29lXTtlZS5DZWxsWGY9W10sZWUuRm9udHM9W10sZWUuRmlsbHM9W10sZWUu'@;
put 'Qm9yZGVycz1bXTt2YXIgZ2U9W10sX2U9ITE7cmV0dXJuIHpvKHcsZnVuY3Rpb24oTWUsamUsVWUpe3N3aXRjaChVZSl7Y2FzZSA0NDplZS5OdW1iZXJGbXRbTWVbMF1dPU1lWzFdLFMubG9hZChNZVsxXSxNZVswXSk7YnJlYWs7Y2FzZSA0MzpWbShNZS5jb2xvcixQKSxlZS5Gb250cy5wdXNo'@;
put 'KE1lKTticmVhaztjYXNlIDEwMjU6Y2FzZSA0ODpjYXNlIDUwNzpjYXNlIDU3MjpjYXNlIDQ3NTpjYXNlIDExNzE6Y2FzZSAyMTAyOmNhc2UgMTEzMDpjYXNlIDUxMjpjYXNlIDIwOTU6Y2FzZSAzMDcyOmJyZWFrO2Nhc2UgNDU6TWUuZmdDb2xvciYmVm0oTWUuZmdDb2xvcixQKSxNZS5iZ0Nv'@;
put 'bG9yJiZWbShNZS5iZ0NvbG9yLFApLGVlLkZpbGxzLnB1c2goTWUpO2JyZWFrO2Nhc2UgNDY6WyJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJkaWFnIl0uZm9yRWFjaChmdW5jdGlvbihYZSl7TWVbWGVdJiZNZVtYZV0uY29sb3ImJlZtKE1lW1hlXS5jb2xvcixQKX0pLGVlLkJvcmRl'@;
put 'cnMucHVzaChNZSk7YnJlYWs7Y2FzZSA0NzoiQnJ0QmVnaW5DZWxsWEZzIj09Z2VbZ2UubGVuZ3RoLTFdJiZlZS5DZWxsWGYucHVzaChNZSk7YnJlYWs7Y2FzZSAzNTpfZT0hMDticmVhaztjYXNlIDM2Ol9lPSExO2JyZWFrO2Nhc2UgMzc6Z2UucHVzaChqZSksX2U9ITA7YnJlYWs7Y2FzZSAz'@;
put 'ODpnZS5wb3AoKSxfZT0hMTticmVhaztkZWZhdWx0OmlmKChqZXx8IiIpLmluZGV4T2YoIkJlZ2luIik+MClnZS5wdXNoKGplKTtlbHNlIGlmKChqZXx8IiIpLmluZGV4T2YoIkVuZCIpPjApZ2UucG9wKCk7ZWxzZSBpZighX2V8fEQuV1RGJiYiQnJ0QUNCZWdpbiIhPWdlW2dlLmxlbmd0aC0x'@;
put 'XSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkICIrVWUrIiAiK2plKX19KSwoZWUuRm9udHN8fFtdKVswXSYmaGYoZWUuRm9udHNbMF0pLGVlfSh3LEQsZWUpOkM4KHcsRCxlZSl9KEl0KHcsbXUoZWUuc3R5bGUpKSxlZS5zdHlsZSx2ZSxQKSl9dmFyIGplPWVlLmxpbmtzLm1h'@;
put 'cChmdW5jdGlvbihycil7dHJ5e3ZhciB4bj1Qbyhubih3LGppKG11KHJyKSkpLHJyKTtyZXR1cm4gZnVuY3Rpb24gUlYodyxQLEQsZWUpe3JldHVybiIuYmluIj09PUQuc2xpY2UoLTQpP2Z1bmN0aW9uIFptKHcsUCxELGVlKXtpZighdylyZXR1cm4gdzt2YXIgb2U9ZWV8fHt9LGdlPSExO3pv'@;
put 'KHcsZnVuY3Rpb24oTWUsamUsVWUpe3N3aXRjaChVZSl7Y2FzZSAzNTk6Y2FzZSAzNjM6Y2FzZSAzNjQ6Y2FzZSAzNjY6Y2FzZSAzNjc6Y2FzZSAzNjg6Y2FzZSAzNjk6Y2FzZSAzNzA6Y2FzZSAzNzE6Y2FzZSA0NzI6Y2FzZSA1Nzc6Y2FzZSA1Nzg6Y2FzZSA1Nzk6Y2FzZSA1ODA6Y2FzZSA1'@;
put 'ODE6Y2FzZSA1ODI6Y2FzZSA1ODM6Y2FzZSA1ODQ6Y2FzZSA1ODU6Y2FzZSA1ODY6Y2FzZSA1ODc6YnJlYWs7Y2FzZSAzNTpnZT0hMDticmVhaztjYXNlIDM2OmdlPSExO2JyZWFrO2RlZmF1bHQ6aWYoISgoamV8fCIiKS5pbmRleE9mKCJCZWdpbiIpPjApJiYhKChqZXx8IiIpLmluZGV4T2Yo'@;
put 'IkVuZCIpPjApJiYoIWdlfHxvZS5XVEYpKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCByZWNvcmQgIitVZS50b1N0cmluZygxNikrIiAiK2plKX19LG9lKX0odywwLDAsZWUpOmZ1bmN0aW9uIHhfKHcsUCxELGVlKXt2YXIgb2U9ZWV8fHt9LGdlPXtTaGVldE5hbWVzOltdLFNoZWV0czp7'@;
put 'fX0sdmU9ITEsTWU9e30samU9LTEsVWU9LTEsWGU9e3M6e3I6MCxjOjB9LGU6e3I6LTEsYzotMX19LGl0PXt9LGZ0PTA7cmV0dXJuKHd8fCIiKS5yZXBsYWNlKHF0LGZ1bmN0aW9uKE10LHV0KXt2YXIgd3Q9Y24oTXQpO3N3aXRjaChqbih3dFswXSkpe2Nhc2UiPD94bWwiOmNhc2UiPGV4dGVy'@;
put 'bmFsTGluayI6Y2FzZSI8L2V4dGVybmFsTGluaz4iOmNhc2UiPC9leHRlcm5hbEJvb2s+IjpjYXNlIjxzaGVldE5hbWVzIjpjYXNlIjxzaGVldE5hbWVzPiI6Y2FzZSI8L3NoZWV0TmFtZXM+IjpjYXNlIjxzaGVldERhdGFTZXQ+IjpjYXNlIjxzaGVldERhdGFTZXQvPiI6Y2FzZSI8L3NoZWV0'@;
put 'RGF0YVNldD4iOmNhc2UiPC9yb3c+IjpicmVhaztjYXNlIjxleHRlcm5hbEJvb2siOmNhc2UiPGV4dGVybmFsQm9vaz4iOmdlLlRhcmdldD1QWyIhaWQiXVt3dC5pZF0uVGFyZ2V0LGdlLk1pc3Npbmc9UFsiIWlkIl1bd3QuaWRdLlR5cGU9PU5pLlhNSVNTO2JyZWFrO2Nhc2UiPHNoZWV0TmFt'@;
put 'ZSI6Z2UuU2hlZXROYW1lcy5wdXNoKEVyKEZpKHd0LnZhbCkpKTticmVhaztjYXNlIjxzaGVldERhdGEiOk1lPXt9LGdlLlNoZWV0c1tnZS5TaGVldE5hbWVzW3d0LnNoZWV0SWRdXT1fcih3dC5yZWZyZXNoRXJyb3J8fCIwIik/bnVsbDpNZTticmVhaztjYXNlIjwvc2hlZXREYXRhPiI6WGUu'@;
put 'ZS5jPj0wJiYoTWVbIiFyZWYiXT1WbyhYZSkpO2JyZWFrO2Nhc2UiPHJvdyI6Y2FzZSI8cm93PiI6d3Qucj9qZT1wYXJzZUludCh3dC5yLDEwKS0xOmplKyssVWU9LTE7YnJlYWs7Y2FzZSI8Y2VsbCI6Y2FzZSI8Y2VsbD4iOnd0LnI/VWU9Y2Eod3QucikuYzorK1VlLGl0LnQ9d3QudHx8Im4i'@;
put 'LCJzdHIiPT1pdC50JiYoaXQudD0icyIpO2JyZWFrO2Nhc2UiPC9jZWxsPiI6WGUuZS5yPGplJiYoWGUuZS5yPWplKSxYZS5lLmM8VWUmJihYZS5lLmM9VWUpLE1lW3BpKHtyOmplLGM6VWV9KV09aXQsaXQ9e307YnJlYWs7Y2FzZSI8diI6Y2FzZSI8dj4iOmZ0PU10Lmxlbmd0aCt1dDticmVh'@;
put 'aztjYXNlIjwvdj4iOnZhciBIdD1Fcih3LnNsaWNlKGZ0LHV0KSk7aXQudj0ibiI9PWl0LnQ/cGFyc2VGbG9hdChIdCk6SHQ7YnJlYWs7Y2FzZSI8di8+IjppdC52PSIiO2JyZWFrO2Nhc2UiPGRlZmluZWROYW1lcz4iOnZlPSEwO2JyZWFrO2Nhc2UiPC9kZWZpbmVkTmFtZXM+Ijp2ZT0hMTti'@;
put 'cmVhaztkZWZhdWx0OmlmKCF2ZSYmb2UuV1RGKXRocm93InVucmVjb2duaXplZCAiK3d0WzBdKyIgaW4gZXh0ZXJuYWwgbGluayJ9fSksZ2V9KHcsUCwwLGVlKX0oSXQodyxtdShycikpLHhuLHJyLFApfWNhdGNoe319KSxVZT1mdW5jdGlvbiBoZyh3LFAsRCl7cmV0dXJuIi5iaW4iPT09UC5z'@;
put 'bGljZSgtNCk/ZnVuY3Rpb24gVHcodyxQKXt2YXIgRD17QXBwVmVyc2lvbjp7fSxXQlByb3BzOnt9LFdCVmlldzpbXSxTaGVldHM6W10sQ2FsY1ByOnt9LHhtbG5zOiIifSxlZT1bXSxvZT0hMTtQfHwoUD17fSksUC5iaWZmPTEyO3ZhciBnZT1bXSxfZT1bW11dO3JldHVybiBfZS5TaGVldE5h'@;
put 'bWVzPVtdLF9lLlhUST1bXSxIMlsxNl09e246IkJydEZSVEFyY2hJRCQiLGY6QXd9LHpvKHcsZnVuY3Rpb24oTWUsamUsVWUpe3N3aXRjaChVZSl7Y2FzZSAxNTY6X2UuU2hlZXROYW1lcy5wdXNoKE1lLm5hbWUpLEQuU2hlZXRzLnB1c2goTWUpO2JyZWFrO2Nhc2UgMTUzOkQuV0JQcm9wcz1N'@;
put 'ZTticmVhaztjYXNlIDM5Om51bGwhPU1lLlNoZWV0JiYoUC5TSUQ9TWUuU2hlZXQpLE1lLlJlZj1EcyhNZS5QdGcsbnVsbCxudWxsLF9lLFApLGRlbGV0ZSBQLlNJRCxkZWxldGUgTWUuUHRnLGdlLnB1c2goTWUpO2JyZWFrO2Nhc2UgMTAzNjpjYXNlIDM2MTpjYXNlIDIwNzE6Y2FzZSAxNTg6'@;
put 'Y2FzZSAxNDM6Y2FzZSA2NjQ6Y2FzZSAzNTM6Y2FzZSAzMDcyOmNhc2UgMzA3MzpjYXNlIDUzNDpjYXNlIDY3NzpjYXNlIDE1NzpjYXNlIDYxMDpjYXNlIDIwNTA6Y2FzZSAxNTU6Y2FzZSA1NDg6Y2FzZSA2NzY6Y2FzZSAxMjg6Y2FzZSA2NjU6Y2FzZSAyMTI4OmNhc2UgMjEyNTpjYXNlIDU0'@;
put 'OTpjYXNlIDIwNTM6Y2FzZSA1OTY6Y2FzZSAyMDc2OmNhc2UgMjA3NTpjYXNlIDIwODI6Y2FzZSAzOTc6Y2FzZSAxNTQ6Y2FzZSAxMTE3OmNhc2UgNTUzOmNhc2UgMjA5MTpjYXNlIDE2OmJyZWFrO2Nhc2UgMzU3OmNhc2UgMzU4OmNhc2UgMzU1OmNhc2UgNjY3Ol9lWzBdLmxlbmd0aD9fZS5w'@;
put 'dXNoKFtVZSxNZV0pOl9lWzBdPVtVZSxNZV0sX2VbX2UubGVuZ3RoLTFdLlhUST1bXTticmVhaztjYXNlIDM2MjowPT09X2UubGVuZ3RoJiYoX2VbMF09W10sX2VbMF0uWFRJPVtdKSxfZVtfZS5sZW5ndGgtMV0uWFRJPV9lW19lLmxlbmd0aC0xXS5YVEkuY29uY2F0KE1lKSxfZS5YVEk9X2Uu'@;
put 'WFRJLmNvbmNhdChNZSk7YnJlYWs7Y2FzZSAzNTpjYXNlIDM3OmVlLnB1c2goamUpLG9lPSEwO2JyZWFrO2Nhc2UgMzY6Y2FzZSAzODplZS5wb3AoKSxvZT0hMTticmVhaztkZWZhdWx0OmlmKCEoKGplfHwiIikuaW5kZXhPZigiQmVnaW4iKT4wKSYmISgoamV8fCIiKS5pbmRleE9mKCJFbmQi'@;
put 'KT4wKSYmKCFvZXx8UC5XVEYmJiJCcnRBQ0JlZ2luIiE9ZWVbZWUubGVuZ3RoLTFdJiYiQnJ0RlJUQmVnaW4iIT1lZVtlZS5sZW5ndGgtMV0pKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCByZWNvcmQgIitVZSsiICIramUpfX0sUCksa3coRCksRC5OYW1lcz1nZSxELnN1cGJvb2tzPV9l'@;
put 'LER9KHcsRCk6ZnVuY3Rpb24geGVlKHcsUCl7aWYoIXcpdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCBmaWxlIik7dmFyIEQ9e0FwcFZlcnNpb246e30sV0JQcm9wczp7fSxXQlZpZXc6W10sU2hlZXRzOltdLENhbGNQcjp7fSxOYW1lczpbXSxFeHRlcm46W10seG1sbnM6IiJ9LGVl'@;
put 'PSExLG9lPSJ4bWxucyIsZ2U9e30sX2U9MDtpZih3LnJlcGxhY2UocXQsZnVuY3Rpb24oTWUsamUpe3ZhciBVZT1jbihNZSk7c3dpdGNoKGpuKFVlWzBdKSl7Y2FzZSI8P3htbCI6Y2FzZSI8L3dvcmtib29rPiI6Y2FzZSI8ZmlsZVZlcnNpb24vPiI6Y2FzZSI8L2ZpbGVWZXJzaW9uPiI6Y2Fz'@;
put 'ZSI8ZmlsZVNoYXJpbmcvPiI6Y2FzZSI8L3dvcmtib29rUHI+IjpjYXNlIjx3b3JrYm9va1Byb3RlY3Rpb24vPiI6Y2FzZSI8Ym9va1ZpZXdzIjpjYXNlIjxib29rVmlld3M+IjpjYXNlIjwvYm9va1ZpZXdzPiI6Y2FzZSI8L3dvcmtib29rVmlldz4iOmNhc2UiPHNoZWV0cyI6Y2FzZSI8c2hl'@;
put 'ZXRzPiI6Y2FzZSI8L3NoZWV0cz4iOmNhc2UiPC9zaGVldD4iOmNhc2UiPGZ1bmN0aW9uR3JvdXBzIjpjYXNlIjxmdW5jdGlvbkdyb3Vwcy8+IjpjYXNlIjxmdW5jdGlvbkdyb3VwIjpjYXNlIjxleHRlcm5hbFJlZmVyZW5jZXMiOmNhc2UiPC9leHRlcm5hbFJlZmVyZW5jZXM+IjpjYXNlIjxl'@;
put 'eHRlcm5hbFJlZmVyZW5jZXM+IjpjYXNlIjxkZWZpbmVkTmFtZXMvPiI6Y2FzZSI8ZGVmaW5lZE5hbWUvPiI6Y2FzZSI8L2NhbGNQcj4iOmNhc2UiPG9sZVNpemUiOmNhc2UiPGN1c3RvbVdvcmtib29rVmlld3M+IjpjYXNlIjwvY3VzdG9tV29ya2Jvb2tWaWV3cz4iOmNhc2UiPGN1c3RvbVdv'@;
put 'cmtib29rVmlld3MiOmNhc2UiPGN1c3RvbVdvcmtib29rVmlldyI6Y2FzZSI8L2N1c3RvbVdvcmtib29rVmlldz4iOmNhc2UiPHBpdm90Q2FjaGVzPiI6Y2FzZSI8L3Bpdm90Q2FjaGVzPiI6Y2FzZSI8cGl2b3RDYWNoZXMiOmNhc2UiPHBpdm90Q2FjaGUiOmNhc2UiPHNtYXJ0VGFnUHIiOmNh'@;
put 'c2UiPHNtYXJ0VGFnUHIvPiI6Y2FzZSI8c21hcnRUYWdUeXBlcyI6Y2FzZSI8c21hcnRUYWdUeXBlcz4iOmNhc2UiPC9zbWFydFRhZ1R5cGVzPiI6Y2FzZSI8c21hcnRUYWdUeXBlIjpjYXNlIjx3ZWJQdWJsaXNoaW5nIjpjYXNlIjx3ZWJQdWJsaXNoaW5nLz4iOmNhc2UiPGZpbGVSZWNvdmVy'@;
put 'eVByIjpjYXNlIjxmaWxlUmVjb3ZlcnlQci8+IjpjYXNlIjx3ZWJQdWJsaXNoT2JqZWN0cz4iOmNhc2UiPHdlYlB1Ymxpc2hPYmplY3RzIjpjYXNlIjwvd2ViUHVibGlzaE9iamVjdHM+IjpjYXNlIjx3ZWJQdWJsaXNoT2JqZWN0IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2Ui'@;
put 'PC9leHRMc3Q+IjpjYXNlIjxleHRMc3QvPiI6Y2FzZSI8QXJjaElEIjpjYXNlIjxyZXZpc2lvblB0ciI6YnJlYWs7Y2FzZSI8d29ya2Jvb2siOk1lLm1hdGNoKEVlZSkmJihvZT0ieG1sbnMiK01lLm1hdGNoKC88KFx3Kyk6LylbMV0pLEQueG1sbnM9VWVbb2VdO2JyZWFrO2Nhc2UiPGZpbGVW'@;
put 'ZXJzaW9uIjpkZWxldGUgVWVbMF0sRC5BcHBWZXJzaW9uPVVlO2JyZWFrO2Nhc2UiPGZpbGVTaGFyaW5nIjpELk1vZGlmeT17dXNlcjpVZS51c2VyTmFtZSx3YXJuOl9yKFVlLnJlYWRPbmx5UmVjb21tZW5kZWR8fCJmYWxzZSIpfSwoVWUuYWxnb3JpdGhtTmFtZXx8VWUuaGFzaFZhbHVlfHxV'@;
put 'ZS5zYWx0VmFsdWV8fFVlLnNwaW5Db3VudCkmJihELk1vZGlmeS5lbmNyeXB0aW9uPXthbGdvOlVlLmFsZ29yaXRobU5hbWUsaGFzaDpVZS5oYXNoVmFsdWUsc2FsdDpVZS5zYWx0VmFsdWUsc3BpbjorVWUuc3BpbkNvdW50fHwxZTV9KTticmVhaztjYXNlIjx3b3JrYm9va1ByIjpjYXNlIjx3'@;
put 'b3JrYm9va1ByLz4iOnloLmZvckVhY2goZnVuY3Rpb24oaXQpe2lmKG51bGwhPVVlW2l0WzBdXSlzd2l0Y2goaXRbMl0pe2Nhc2UiYm9vbCI6RC5XQlByb3BzW2l0WzBdXT1fcihVZVtpdFswXV0pO2JyZWFrO2Nhc2UiaW50IjpELldCUHJvcHNbaXRbMF1dPXBhcnNlSW50KFVlW2l0WzBdXSwx'@;
put 'MCk7YnJlYWs7ZGVmYXVsdDpELldCUHJvcHNbaXRbMF1dPVVlW2l0WzBdXX19KSxVZS5jb2RlTmFtZSYmKEQuV0JQcm9wcy5Db2RlTmFtZT1GaShVZS5jb2RlTmFtZSkpO2JyZWFrO2Nhc2UiPHdvcmtib29rUHJvdGVjdGlvbiI6dmFyIFhlPUQuUHJvdGVjdGlvbnx8e307WGUubG9ja1N0cnVj'@;
put 'dHVyZT1fcihVZS5sb2NrU3RydWN0dXJlfHwiZmFsc2UiKSxYZS5sb2NrV2luZG93cz1fcihVZS5sb2NrV2luZG93c3x8ImZhbHNlIiksVWUud29ya2Jvb2tBbGdvcml0aG1OYW1lJiYoWGUuZW5jcnlwdGlvbj17YWxnbzpVZS53b3JrYm9va0FsZ29yaXRobU5hbWUsaGFzaDpVZS53b3JrYm9v'@;
put 'a0hhc2hWYWx1ZSxzYWx0OlVlLndvcmtib29rU2FsdFZhbHVlLHNwaW46K1VlLndvcmtib29rU3BpbkNvdW50fHwxZTV9KSxELlByb3RlY3Rpb249WGU7YnJlYWs7Y2FzZSI8d29ya2Jvb2tWaWV3IjpjYXNlIjx3b3JrYm9va1ZpZXcvPiI6ZGVsZXRlIFVlWzBdLEQuV0JWaWV3LnB1c2goVWUp'@;
put 'O2JyZWFrO2Nhc2UiPHNoZWV0Ijpzd2l0Y2goVWUuc3RhdGUpe2Nhc2UiaGlkZGVuIjpVZS5IaWRkZW49MTticmVhaztjYXNlInZlcnlIaWRkZW4iOlVlLkhpZGRlbj0yO2JyZWFrO2RlZmF1bHQ6VWUuSGlkZGVuPTB9ZGVsZXRlIFVlLnN0YXRlLFVlLm5hbWU9RXIoRmkoVWUubmFtZSkpLGRl'@;
put 'bGV0ZSBVZVswXSxELlNoZWV0cy5wdXNoKFVlKTticmVhaztjYXNlIjxleHRlcm5hbFJlZmVyZW5jZSI6RC5FeHRlcm4ucHVzaChVZS5pZCk7YnJlYWs7Y2FzZSI8ZGVmaW5lZE5hbWVzPiI6Y2FzZSI8ZGVmaW5lZE5hbWVzIjpjYXNlIjxleHQiOmNhc2UiPEFsdGVybmF0ZUNvbnRlbnQiOmNh'@;
put 'c2UiPEFsdGVybmF0ZUNvbnRlbnQ+IjplZT0hMDticmVhaztjYXNlIjwvZGVmaW5lZE5hbWVzPiI6Y2FzZSI8L2V4dD4iOmNhc2UiPC9BbHRlcm5hdGVDb250ZW50PiI6ZWU9ITE7YnJlYWs7Y2FzZSI8ZGVmaW5lZE5hbWUiOihnZT17fSkuTmFtZT1GaShVZS5uYW1lKSxVZS5jb21tZW50JiYo'@;
put 'Z2UuQ29tbWVudD1VZS5jb21tZW50KSxVZS5sb2NhbFNoZWV0SWQmJihnZS5TaGVldD0rVWUubG9jYWxTaGVldElkKSxfcihVZS5oaWRkZW58fCIwIikmJihnZS5IaWRkZW49ITApLF9lPWplK01lLmxlbmd0aDticmVhaztjYXNlIjwvZGVmaW5lZE5hbWU+IjpnZS5SZWY9RXIoRmkody5zbGlj'@;
put 'ZShfZSxqZSkpKSxELk5hbWVzLnB1c2goZ2UpO2JyZWFrO2Nhc2UiPGNhbGNQciI6Y2FzZSI8Y2FsY1ByLz4iOmRlbGV0ZSBVZVswXSxELkNhbGNQcj1VZTticmVhaztkZWZhdWx0OmlmKCFlZSYmUC5XVEYpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitVZVswXSsiIGluIHdvcmti'@;
put 'b29rIil9cmV0dXJuIE1lfSksLTE9PT1zYS5tYWluLmluZGV4T2YoRC54bWxucykpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIE5hbWVzcGFjZTogIitELnhtbG5zKTtyZXR1cm4ga3coRCksRH0odyxEKX0oSXQodyxtdShlZS53b3JrYm9va3NbMF0pKSxlZS53b3JrYm9va3NbMF0sUCksWGU9'@;
put 'e30saXQ9IiI7ZWUuY29yZXByb3BzLmxlbmd0aCYmKChpdD1JdCh3LG11KGVlLmNvcmVwcm9wc1swXSksITApKSYmKFhlPW5oKGl0KSksMCE9PWVlLmV4dHByb3BzLmxlbmd0aCYmKGl0PUl0KHcsbXUoZWUuZXh0cHJvcHNbMF0pLCEwKSkmJmZ1bmN0aW9uIGFwKHcsUCxEKXt2YXIgZWU9e307'@;
put 'UHx8KFA9e30pLHc9RmkodyksZWYuZm9yRWFjaChmdW5jdGlvbihvZSl7dmFyIGdlPSh3Lm1hdGNoKGdzKG9lWzBdKSl8fFtdKVsxXTtzd2l0Y2gob2VbMl0pe2Nhc2Uic3RyaW5nIjpnZSYmKFBbb2VbMV1dPUVyKGdlKSk7YnJlYWs7Y2FzZSJib29sIjpQW29lWzFdXT0idHJ1ZSI9PT1nZTti'@;
put 'cmVhaztjYXNlInJhdyI6dmFyIF9lPXcubWF0Y2gobmV3IFJlZ0V4cCgiPCIrb2VbMF0rIltePl0qPihbXFxzXFxTXSo/KTwvIitvZVswXSsiPiIpKTtfZSYmX2UubGVuZ3RoPjAmJihlZVtvZVsxXV09X2VbMV0pfX0pLGVlLkhlYWRpbmdQYWlycyYmZWUuVGl0bGVzT2ZQYXJ0cyYmdzAoZWUu'@;
put 'SGVhZGluZ1BhaXJzLGVlLlRpdGxlc09mUGFydHMsUCxEKX0oaXQsWGUsUCkpO3ZhciBmdD17fTsoIVAuYm9va1NoZWV0c3x8UC5ib29rUHJvcHMpJiYwIT09ZWUuY3VzdHByb3BzLmxlbmd0aCYmKGl0PW5uKHcsbXUoZWUuY3VzdHByb3BzWzBdKSwhMCkpJiYoZnQ9ZnVuY3Rpb24gd20odyxQ'@;
put 'KXt2YXIgRD17fSxlZT0iIixvZT13Lm1hdGNoKGF4KTtpZihvZSlmb3IodmFyIGdlPTA7Z2UhPW9lLmxlbmd0aDsrK2dlKXt2YXIgX2U9b2VbZ2VdLHZlPWNuKF9lKTtzd2l0Y2godmVbMF0pe2Nhc2UiPD94bWwiOmNhc2UiPFByb3BlcnRpZXMiOmJyZWFrO2Nhc2UiPHByb3BlcnR5IjplZT1F'@;
put 'cih2ZS5uYW1lKTticmVhaztjYXNlIjwvcHJvcGVydHk+IjplZT1udWxsO2JyZWFrO2RlZmF1bHQ6aWYoMD09PV9lLmluZGV4T2YoIjx2dDoiKSl7dmFyIE1lPV9lLnNwbGl0KCI+IiksamU9TWVbMF0uc2xpY2UoNCksVWU9TWVbMV07c3dpdGNoKGplKXtjYXNlImxwc3RyIjpjYXNlImJzdHIi'@;
put 'OmNhc2UibHB3c3RyIjpjYXNlImN5IjpjYXNlImVycm9yIjpEW2VlXT1FcihVZSk7YnJlYWs7Y2FzZSJib29sIjpEW2VlXT1fcihVZSk7YnJlYWs7Y2FzZSJpMSI6Y2FzZSJpMiI6Y2FzZSJpNCI6Y2FzZSJpOCI6Y2FzZSJpbnQiOmNhc2UidWludCI6RFtlZV09cGFyc2VJbnQoVWUsMTApO2Jy'@;
put 'ZWFrO2Nhc2UicjQiOmNhc2UicjgiOmNhc2UiZGVjaW1hbCI6RFtlZV09cGFyc2VGbG9hdChVZSk7YnJlYWs7Y2FzZSJmaWxldGltZSI6Y2FzZSJkYXRlIjpEW2VlXT1QdChVZSk7YnJlYWs7ZGVmYXVsdDppZigiLyI9PWplLnNsaWNlKC0xKSlicmVhaztQLldURiYmdHlwZW9mIGNvbnNvbGU8'@;
put 'InUiJiZjb25zb2xlLndhcm4oIlVuZXhwZWN0ZWQiLF9lLGplLE1lKX19ZWxzZSBpZigiPC8iIT09X2Uuc2xpY2UoMCwyKSYmUC5XVEYpdGhyb3cgbmV3IEVycm9yKF9lKX19cmV0dXJuIER9KGl0LFApKTt2YXIgTXQ9e307aWYoKFAuYm9va1NoZWV0c3x8UC5ib29rUHJvcHMpJiYoVWUuU2hl'@;
put 'ZXRzP2dlPVVlLlNoZWV0cy5tYXAoZnVuY3Rpb24oeG4pe3JldHVybiB4bi5uYW1lfSk6WGUuV29ya3NoZWV0cyYmWGUuU2hlZXROYW1lcy5sZW5ndGg+MCYmKGdlPVhlLlNoZWV0TmFtZXMpLFAuYm9va1Byb3BzJiYoTXQuUHJvcHM9WGUsTXQuQ3VzdHByb3BzPWZ0KSxQLmJvb2tTaGVldHMm'@;
put 'JnR5cGVvZiBnZTwidSImJihNdC5TaGVldE5hbWVzPWdlKSxQLmJvb2tTaGVldHM/TXQuU2hlZXROYW1lczpQLmJvb2tQcm9wcykpcmV0dXJuIE10O2dlPXt9O3ZhciB1dD17fTtQLmJvb2tEZXBzJiZlZS5jYWxjY2hhaW4mJih1dD1mdW5jdGlvbiBJVih3LFAsRCl7cmV0dXJuIi5iaW4iPT09'@;
put 'UC5zbGljZSgtNCk/ZnVuY3Rpb24gc0EodyxQLEQpe3ZhciBlZT1bXTtyZXR1cm4gem8odyxmdW5jdGlvbihfZSx2ZSxNZSl7aWYoNjM9PT1NZSllZS5wdXNoKF9lKTtlbHNlIGlmKCEoKHZlfHwiIikuaW5kZXhPZigiQmVnaW4iKT4wfHwodmV8fCIiKS5pbmRleE9mKCJFbmQiKT4wKSl0aHJv'@;
put 'dyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkICIrTWUrIiAiK3ZlKX0pLGVlfSh3KTpmdW5jdGlvbiBJOCh3KXt2YXIgUD1bXTtpZighdylyZXR1cm4gUDt2YXIgRD0xO3JldHVybih3Lm1hdGNoKHF0KXx8W10pLmZvckVhY2goZnVuY3Rpb24oZWUpe3ZhciBvZT1jbihlZSk7c3dpdGNo'@;
put 'KG9lWzBdKXtjYXNlIjw/eG1sIjpjYXNlIjxjYWxjQ2hhaW4iOmNhc2UiPGNhbGNDaGFpbj4iOmNhc2UiPC9jYWxjQ2hhaW4+IjpicmVhaztjYXNlIjxjIjpkZWxldGUgb2VbMF0sb2UuaT9EPW9lLmk6b2UuaT1ELFAucHVzaChvZSl9fSksUH0odyl9KEl0KHcsbXUoZWUuY2FsY2NoYWluKSks'@;
put 'ZWUuY2FsY2NoYWluKSk7dmFyIGt0LFR0LHd0PTAsSHQ9e30sWXQ9VWUuU2hlZXRzO1hlLldvcmtzaGVldHM9WXQubGVuZ3RoLFhlLlNoZWV0TmFtZXM9W107Zm9yKHZhciBnbj0wO2duIT1ZdC5sZW5ndGg7KytnbilYZS5TaGVldE5hbWVzW2duXT1ZdFtnbl0ubmFtZTt2YXIgcW49b2U/ImJp'@;
put 'biI6InhtbCIsZm49ZWUud29ya2Jvb2tzWzBdLmxhc3RJbmRleE9mKCIvIiksS249KGVlLndvcmtib29rc1swXS5zbGljZSgwLGZuKzEpKyJfcmVscy8iK2VlLndvcmtib29rc1swXS5zbGljZShmbisxKSsiLnJlbHMiKS5yZXBsYWNlKC9eXC8vLCIiKTtfbih3LEtuKXx8KEtuPSJ4bC9fcmVs'@;
put 'cy93b3JrYm9vay4iK3FuKyIucmVscyIpO3ZhciB6bj1Qbyhubih3LEtuLCEwKSxLbiksT249em4sZXI9W107em4mJihVZSYmVWUuRXh0ZXJuJiZVZS5FeHRlcm4ubGVuZ3RoJiZVZS5FeHRlcm4uZm9yRWFjaChmdW5jdGlvbihycix4bil7dmFyIENpPSgiL3hsLyIrem5bIiFpZCJdW3JyXS5U'@;
put 'YXJnZXQpLnJlcGxhY2UoL1tcL11bXC9dL2csIi8iKSx6cj1lZS5saW5rcy5pbmRleE9mKENpKTt6cj4tMSYmKGVyW3huXT1qZVt6cl0pfSksVWUmJmRlbGV0ZSBVZS5FeHRlcm4pLHpuJiYoem49ZnVuY3Rpb24gZE8odyxQKXtpZighdylyZXR1cm4gMDt0cnl7dz1QLm1hcChmdW5jdGlvbihl'@;
put 'ZSl7cmV0dXJuIGVlLmlkfHwoZWUuaWQ9ZWUuc3RyUmVsSUQpLFtlZS5uYW1lLHdbIiFpZCJdW2VlLmlkXS5UYXJnZXQsZk8od1siIWlkIl1bZWUuaWRdLlR5cGUpXX0pfWNhdGNoe3JldHVybiBudWxsfXJldHVybiB3JiYwIT09dy5sZW5ndGg/dzpudWxsfSh6bixVZS5TaGVldHMpKTt2YXIg'@;
put 'dHI9X24odywieGwvd29ya3NoZWV0cy9zaGVldC54bWwiKT8xOjAsWW49W10sanI9W107ZTpmb3Iod3Q9MDt3dCE9WGUuV29ya3NoZWV0czsrK3d0KXt2YXIgbGk9InNoZWV0IjtpZih6biYmem5bd3RdPyhrdD0ieGwvIit6blt3dF1bMV0ucmVwbGFjZSgvW1wvXT94bFwvLywiIiksX24odyxr'@;
put 'dCl8fChrdD16blt3dF1bMV0pLF9uKHcsa3QpfHwoa3Q9S24ucmVwbGFjZSgvX3JlbHNcLy4qJC8sIiIpK3puW3d0XVsxXSksbGk9em5bd3RdWzJdKTprdD0oa3Q9InhsL3dvcmtzaGVldHMvc2hlZXQiKyh3dCsxLXRyKSsiLiIrcW4pLnJlcGxhY2UoL3NoZWV0MFwuLywic2hlZXQuIiksVHQ9'@;
put 'a3QucmVwbGFjZSgvXiguKikoXC8pKFteXC9dKikkLywiJDEvX3JlbHMvJDMucmVscyIpLFluLnB1c2goa3QpLFAmJm51bGwhPVAuc2hlZXRzKXN3aXRjaCh0eXBlb2YgUC5zaGVldHMpe2Nhc2UibnVtYmVyIjppZih3dCE9UC5zaGVldHMpY29udGludWUgZTticmVhaztjYXNlInN0cmluZyI6'@;
put 'aWYoWGUuU2hlZXROYW1lc1t3dF0udG9Mb3dlckNhc2UoKSE9UC5zaGVldHMudG9Mb3dlckNhc2UoKSljb250aW51ZSBlO2JyZWFrO2RlZmF1bHQ6aWYoQXJyYXkuaXNBcnJheSYmQXJyYXkuaXNBcnJheShQLnNoZWV0cykpe2Zvcih2YXIgRWk9MCxJaT0wO0lpIT1QLnNoZWV0cy5sZW5ndGg7'@;
put 'KytJaSkibnVtYmVyIj09dHlwZW9mIFAuc2hlZXRzW0lpXSYmUC5zaGVldHNbSWldPT13dCYmKEVpPTEpLCJzdHJpbmciPT10eXBlb2YgUC5zaGVldHNbSWldJiZQLnNoZWV0c1tJaV0udG9Mb3dlckNhc2UoKT09WGUuU2hlZXROYW1lc1t3dF0udG9Mb3dlckNhc2UoKSYmKEVpPTEpO2lmKCFF'@;
put 'aSljb250aW51ZSBlfX1pZighUC5za2lwUGFyc2Upe3ZhciB0aT1vQih3LGt0LFR0LFhlLlNoZWV0TmFtZXNbd3RdLHd0LEh0LGdlLGxpLFAsVWUsdmUsTWUpO3RpJiZ0aVsiIUxEUCJdJiYoanJbd3RdPXRpWyIhTERQIl0sZGVsZXRlIHRpWyIhTERQIl0pfX1pZih0eXBlb2YgcGFyc2Vfc2hl'@;
put 'ZXRfcGl2b3Q8InUiKWZvcih3dD0wO3d0PGh2Lmxlbmd0aDsrK3d0KXBhcnNlX3NoZWV0X3Bpdm90LmFwcGx5KG51bGwsaHZbd3RdKTtpZihNdD17RGlyZWN0b3J5OmVlLFdvcmtib29rOlVlLFByb3BzOlhlLEN1c3Rwcm9wczpmdCxEZXBzOnV0LFNoZWV0czpnZSxTaGVldE5hbWVzOlhlLlNo'@;
put 'ZWV0TmFtZXMsU3RyaW5nczpaOCxTdHlsZXM6TWUsVGhlbWVzOnZlLFNTRjpTLmdldF90YWJsZSgpfSwhUC5za2lwUGFyc2Upe2lmKGZ1bmN0aW9uIGFBKHcpeyF3fHwhdy5Xb3JrYm9va3x8IXcuV29ya2Jvb2suTmFtZXN8fHcuV29ya2Jvb2suTmFtZXMuZm9yRWFjaChmdW5jdGlvbihQKXtp'@;
put 'ZihQLk5hbWUmJiJfeGxubS4iPT1QLk5hbWUuc2xpY2UoMCw2KSYmKCJfeGxubS5QcmludF9BcmVhIj09UC5OYW1lfHwiX3hsbm0uUHJpbnRfVGl0bGVzIj09UC5OYW1lKSl7dmFyIEQ9dy5TaGVldHNbdy5TaGVldE5hbWVzW1AuU2hlZXRdXTtpZihEKXtEWyIhcHJpbnQiXXx8KERbIiFwcmlu'@;
put 'dCJdPXt9KSxEWyIhcHJpbnQiXS5wcm9wc3x8KERbIiFwcmludCJdLnByb3BzPXt9KTt2YXIgZWU9RFsiIXByaW50Il0sb2U9UC5SZWY7aWYoIl94bG5tLlByaW50X0FyZWEiPT1QLk5hbWUpe29lLmluZGV4T2YoIiEiKT4tMSYmKG9lPW9lLnNsaWNlKG9lLmluZGV4T2YoIiEiKSsxKSk7dmFy'@;
put 'IGdlPVBpKG9lPW9lLnJlcGxhY2UoL1skXS9nLCIiKSk7ZWUuYXJlYT1nZX1lbHNlIl94bG5tLlByaW50X1RpdGxlcyI9PVAuTmFtZSYmKGVlLnRpdGxlcz17czp7cjotMSxjOi0xfSxlOntyOi0xLGM6LTF9fSxvZS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24oX2Upe3ZhciBNZT1LYShf'@;
put 'ZS5zbGljZShfZS5pbmRleE9mKCIhIikrMSkucmVwbGFjZSgvWyRdL2csIiIpKTtNZS5zLmM+LTEmJihlZS50aXRsZXMucy5jPU1lLnMuYyksTWUuZS5jPi0xJiYoZWUudGl0bGVzLmUuYz1NZS5lLmMpLE1lLnMucj4tMSYmKGVlLnRpdGxlcy5zLnI9TWUucy5yKSxNZS5lLnI+LTEmJihlZS50'@;
put 'aXRsZXMuZS5yPU1lLmUucil9KSl9fX0pfShNdCksUCYmUC5ib29rRmlsZXMmJihNdC5rZXlzPUQsTXQuZmlsZXM9dy5maWxlcyksUCYmUC5ib29rVkJBJiYoZWUudmJhLmxlbmd0aD4wP010LnZiYXJhdz1JdCh3LG11KGVlLnZiYVswXSksITApOmVlLmRlZmF1bHRzJiZlZS5kZWZhdWx0cy5i'@;
put 'aW49PT1naCYmKE10LnZiYXJhdz1JdCh3LCJ4bC92YmFQcm9qZWN0LmJpbiIsITApKSksT24mJk9uWyIhaWQiXSl7Zm9yKHZhciBmcj1bXSxEbj0xO0RuPD0xMDI0OysrRG4pT25bIiFpZCJdWyJySWQiK0RuXSYmT25bIiFpZCJdWyJySWQiK0RuXS5UeXBlJiYvY3VzdG9tWG1sJC8udGVzdChP'@;
put 'blsiIWlkIl1bInJJZCIrRG5dLlR5cGUpJiZmci5wdXNoKHNuKE9uWyIhaWQiXVsicklkIitEbl0uVGFyZ2V0LGVlLndvcmtib29rc1swXSkpO2ZyLmxlbmd0aD4wJiYoTXQuQ3VzdG9tWE1MPVtdLGZyLmZvckVhY2goZnVuY3Rpb24ocnIpe3ZhciB4bj17ZGF0YTpubih3LG11KHJyKSl9LG1y'@;
put 'PWppKHJyKTt0cnl7dmFyIENpPVBvKG5uKHcsbXUobXIpLCEwKSxtcik7aWYoQ2kpZm9yKHZhciB6cj0xO3pyPD0xMDI0OysrenIpQ2lbIiFpZCJdWyJySWQiK3pyXSYmQ2lbIiFpZCJdWyJySWQiK3pyXS5UeXBlJiYvY3VzdG9tWG1sUHJvcHMkLy50ZXN0KENpWyIhaWQiXVsicklkIit6cl0u'@;
put 'VHlwZSkmJih4bi5wcm9wcz1ubih3LG11KHNuKENpWyIhaWQiXVsicklkIit6cl0uVGFyZ2V0LHJyKSkpKX1jYXRjaHt9TXQuQ3VzdG9tWE1MLnB1c2goeG4pfSkpfXZhciB2cj1EdCh3LCJ4bC9tb2RlbC9pdGVtLmRhdGEiLCEwKTt2ciYmKE10Lm1vZGVsPXZyKSxlZS5jb25uJiYoTXQuY29u'@;
put 'bj1JdCh3LG11KGVlLmNvbm4pLCEwKSksZXIubGVuZ3RoJiYoTXQuRXh0ZXJuYWxXQj1lciksVWUmJihVZS5QUEk9azIpfXJldHVybiBQLnRlbXBsYXRlJiYoTXQuX3dzcGF0aHM9WW4sTXQuX3N0eXBhdGg9bXUoZWUuc3R5bGV8fCIiKSxNdC5fd2JwYXRoPW11KGVlLndvcmtib29rc1swXXx8'@;
put 'InhsL3dvcmtib29rLnhtbCIpLE10Ll92bWxwYXRocz1qcixNdC5fd2JyZWxzcGF0aD1LbixNdC5fY3Q9bm4odywiW0NvbnRlbnRfVHlwZXNdLnhtbCIpLE10LmZpbGVzPXcuZmlsZXMsYUIoTXQsdyxQKSksTXR9ZnVuY3Rpb24gbEIodyxQKXt2YXIgRD1QfHx7fTtELnBhc3N3b3JkfHwoRC5w'@;
put 'YXNzd29yZD0iVmVsdmV0U3dlYXRzaG9wIik7dmFyIGVlPSJXb3JrYm9vayIsb2U9TmUuZmluZCh3LGVlKTt0cnl7aWYoIShvZT1OZS5maW5kKHcsZWU9Ii8hRGF0YVNwYWNlcy9WZXJzaW9uIikpfHwhb2UuY29udGVudCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxl'@;
put 'IG1pc3NpbmcgIitlZSk7aWYoZnVuY3Rpb24gdEgodyl7dmFyIFA9e307UC5pZD13LnJlYWRfc2hpZnQoMCwibHBwNCIpLFAuUj1sMSh3LDQpLFAuVT1sMSh3LDQpLFAuVz1sMSh3LDQpfShvZS5jb250ZW50KSwhKG9lPU5lLmZpbmQodyxlZT0iLyFEYXRhU3BhY2VzL0RhdGFTcGFjZU1hcCIp'@;
put 'KXx8IW9lLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5nICIrZWUpO3ZhciBnZT1mdW5jdGlvbiBJbSh3KXt2YXIgUD1bXTt3LmwrPTQ7Zm9yKHZhciBEPXcucmVhZF9zaGlmdCg0KTtELS0gPjA7KVAucHVzaChOeCh3KSk7cmV0dXJuIFB9'@;
put 'KG9lLmNvbnRlbnQpO2lmKDEhPT1nZS5sZW5ndGh8fDEhPT1nZVswXS5jb21wcy5sZW5ndGh8fDAhPT1nZVswXS5jb21wc1swXS50fHwiU3Ryb25nRW5jcnlwdGlvbkRhdGFTcGFjZSIhPT1nZVswXS5uYW1lfHwiRW5jcnlwdGVkUGFja2FnZSIhPT1nZVswXS5jb21wc1swXS52KXRocm93IG5l'@;
put 'dyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgYmFkICIrZWUpO2lmKCEob2U9TmUuZmluZCh3LGVlPSIvIURhdGFTcGFjZXMvRGF0YVNwYWNlSW5mby9TdHJvbmdFbmNyeXB0aW9uRGF0YVNwYWNlIikpfHwhb2UuY29udGVudCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5'@;
put 'cHRlZCBmaWxlIG1pc3NpbmcgIitlZSk7dmFyIF9lPWZ1bmN0aW9uIHlwKHcpe3ZhciBQPVtdO3cubCs9NDtmb3IodmFyIEQ9dy5yZWFkX3NoaWZ0KDQpO0QtLSA+MDspUC5wdXNoKHcucmVhZF9zaGlmdCgwLCJscHA0IikpO3JldHVybiBQfShvZS5jb250ZW50KTtpZigxIT1fZS5sZW5ndGh8'@;
put 'fCJTdHJvbmdFbmNyeXB0aW9uVHJhbnNmb3JtIiE9X2VbMF0pdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBiYWQgIitlZSk7aWYoIShvZT1OZS5maW5kKHcsZWU9Ii8hRGF0YVNwYWNlcy9UcmFuc2Zvcm1JbmZvL1N0cm9uZ0VuY3J5cHRpb25UcmFuc2Zvcm0vIVBy'@;
put 'aW1hcnkiKSl8fCFvZS5jb250ZW50KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgbWlzc2luZyAiK2VlKTshZnVuY3Rpb24gX3Aodyl7dmFyIFA9ZnVuY3Rpb24gYnAodyl7dmFyIFA9e307cmV0dXJuIHcucmVhZF9zaGlmdCg0KSx3LmwrPTQsUC5pZD13LnJlYWRf'@;
put 'c2hpZnQoMCwibHBwNCIpLFAubmFtZT13LnJlYWRfc2hpZnQoMCwibHBwNCIpLFAuUj1sMSh3LDQpLFAuVT1sMSh3LDQpLFAuVz1sMSh3LDQpLFB9KHcpO2lmKFAuZW5hbWU9dy5yZWFkX3NoaWZ0KDAsIjhscHA0IiksUC5ibGtzej13LnJlYWRfc2hpZnQoNCksUC5jbW9kZT13LnJlYWRfc2hp'@;
put 'ZnQoNCksNCE9dy5yZWFkX3NoaWZ0KDQpKXRocm93IG5ldyBFcnJvcigiQmFkICFQcmltYXJ5IHJlY29yZCIpO3JldHVybiBQfShvZS5jb250ZW50KX1jYXRjaHt9aWYoIShvZT1OZS5maW5kKHcsZWU9Ii9FbmNyeXB0aW9uSW5mbyIpKXx8IW9lLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJF'@;
put 'Q01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5nICIrZWUpO3ZhciB2ZT1mdW5jdGlvbiB3cCh3KXt2YXIgUD1sMSh3KTtzd2l0Y2goUC5NaW5vcil7Y2FzZSAyOnJldHVybltQLk1pbm9yLFBRKHcpXTtjYXNlIDM6cmV0dXJuW1AuTWlub3IsbkgoKV07Y2FzZSA0OnJldHVybltQLk1pbm9y'@;
put 'LEZRKHcpXX10aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIHVucmVjb2duaXplZCBWZXJzaW9uOiAiK1AuTWlub3IpfShvZS5jb250ZW50KTtpZighKG9lPU5lLmZpbmQodyxlZT0iL0VuY3J5cHRlZFBhY2thZ2UiKSl8fCFvZS5jb250ZW50KXRocm93IG5ldyBFcnJv'@;
put 'cigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgbWlzc2luZyAiK2VlKTtpZig0PT12ZVswXSlyZXR1cm4gZnVuY3Rpb24gWWUodyxQLEQsZWUpe3ZhciBvZT1OZS51dGlscy5wcmVwX2Jsb2I7aWYoImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYva2V5RW5jcnlwdG9y'@;
put 'L3Bhc3N3b3JkIiE9dy51cmkpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBFQ01BLTM3NiBBZ2lsZSBVUkkgIit3LnVyaSk7dmFyIGdlPXcuZW5jc1swXSxfZT1nZS5oYXNoQWxnb3JpdGhtLHZlPSJhZXMtMjU2LWNiYyIsTWU9QnVmZmVyLmZyb20oZ2Uuc2FsdFZhbHVlLCJiYXNlNjQi'@;
put 'KSxqZT1CdWZmZXIuZnJvbSh3LnNhbHRWYWx1ZSwiYmFzZTY0IiksVWU9K2dlLmJsb2NrU2l6ZSxYZT0rZ2Uua2V5Qml0cz4+MyxpdD10cyhCdWZmZXIuY29uY2F0KFtNZSxCdWZmZXIuZnJvbShjcHRhYmxlLnV0aWxzLmVuY29kZSgxMjAwLEQpKV0pLF9lKSxmdD1CdWZmZXIuYWxsb2MoNCk7'@;
put 'b2UoZnQsMCk7Zm9yKHZhciBNdD0wO010PGdlLnNwaW5Db3VudDsrK010KWZ0Lmw9MCxmdC53cml0ZV9zaGlmdCg0LE10KSxpdD10cyhCdWZmZXIuY29uY2F0KFtmdCxpdF0pLF9lKTt2YXIgdXQ9ZnVuY3Rpb24odHIsWW4sanIsbGkpe3ZhciBFaT10cyhCdWZmZXIuY29uY2F0KFt0cixCdWZm'@;
put 'ZXIuZnJvbShbMjAsMTEwLDExLDIzMSwxNzEsMTcyLDIwOCwyMTRdKV0pLGxpKSxJaT1FaS5sZW5ndGg+PWpyP0VpLnNsaWNlKDAsanIpOkJ1ZmZlci5hbGxvYyhqcik7aWYoRWkubGVuZ3RoPGpyKXtmb3IodmFyIHRpPTA7dGk8RWkubGVuZ3RoOysrdGkpSWlbdGldPUVpW3RpXTtmb3IoO3Rp'@;
put 'PGpyOysrdGkpSWlbdGldPTU0fXJldHVybiBJaX0oaXQsMCxYZSxfZSk7c3dpdGNoKGdlLmNpcGhlckFsZ29yaXRobSl7Y2FzZSJBRVMiOmlmKCJDaGFpbmluZ01vZGVDQkMiIT1nZS5jaXBoZXJDaGFpbmluZyl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGNpcGhlciBjaGFpbmluZyAi'@;
put 'K2dlLmNpcGhlckNoYWluaW5nKTt2ZT0iYWVzLSIrZ2Uua2V5Qml0cysiLWNiYyI7YnJlYWs7Y2FzZSJSQzIiOnZlPSJyYzIiO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBjaXBoZXIgYWxnbyAiK2dlLmNpcGhlckFsZ29yaXRobSl9TWU9ZnVuY3Rpb24oZXIp'@;
put 'e2Zvcih2YXIgdHI9QnVmZmVyLmFsbG9jKFVlKSxZbj0wO1luPFVlOysrWW4pdHJbWW5dPVluPGVyLmxlbmd0aD9lcltZbl06NTQ7cmV0dXJuIHRyfShNZSk7dmFyIHd0PUJ1ZmZlci5mcm9tKGdlLmVuY3J5cHRlZEtleVZhbHVlLCJiYXNlNjQiKSxIdD13Zih1dCxNZSx2ZSkudXBkYXRlKHd0'@;
put 'KSxrdD13Zih0cyhCdWZmZXIuY29uY2F0KFtpdCxCdWZmZXIuZnJvbShbMjE1LDE3MCwxNSwxMDksNDgsOTcsNTIsNzhdKV0pLF9lKS5zbGljZSgwLFhlKSxNZSx2ZSkudXBkYXRlKEJ1ZmZlci5mcm9tKGdlLmVuY3J5cHRlZFZlcmlmaWVySGFzaFZhbHVlLCJiYXNlNjQiKSksVHQ9dHMod2Yo'@;
put 'dHMoQnVmZmVyLmNvbmNhdChbaXQsQnVmZmVyLmZyb20oWzI1NCwxNjcsMjEwLDExOCw1OSw3NSwxNTgsMTIxXSldKSxfZSkuc2xpY2UoMCxYZSksTWUsdmUpLnVwZGF0ZShCdWZmZXIuZnJvbShnZS5lbmNyeXB0ZWRWZXJpZmllckhhc2hJbnB1dCwiYmFzZTY0IikpLF9lKSxZdD0rZ2UuaGFz'@;
put 'aFNpemV8fE1hdGgubWluKGt0Lmxlbmd0aCxUdC5sZW5ndGgpO2lmKDAhPWt0LnNsaWNlKDAsWXQpLmNvbXBhcmUoVHQuc2xpY2UoMCxZdCkpKXRocm93IG5ldyBFcnJvcigiSW5jb3JyZWN0IFBhc3N3b3JkIik7b2UoUCwwKTt2YXIgZ249UC5yZWFkX3NoaWZ0KDQpO1AubCs9NDt2YXIgcW49'@;
put 'W10sZm49QnVmZmVyLmNvbmNhdChbamUsQnVmZmVyLmFsbG9jKDQpXSk7Zm9yKG9lKGZuKSxNdD0wO1AubDxQLmxlbmd0aDspZm4ubD1NZS5sZW5ndGgsZm4ud3JpdGVfc2hpZnQoNCxNdCkscW4ucHVzaCh3ZihIdCx0cyhCdWZmZXIuZnJvbShmbiksX2UpLnNsaWNlKDAsMTYpLHZlKS51cGRh'@;
put 'dGUoQnVmZmVyLmZyb20oUC5zbGljZShQLmwsUC5sKzQwOTYpKSkpLFAubCs9NDA5NiwrK010O3ZhciB6bj1CdWZmZXIuY29uY2F0KHFuKS5zbGljZSgwLGduKSxPbj1KdChlZSk7cmV0dXJuIE9uLnR5cGU9ImJ1ZmZlciIsVjIoem4sT24pfSh2ZVsxXSxvZS5jb250ZW50LEQucGFzc3dvcmR8'@;
put 'fCIiLEQpO2lmKDI9PXZlWzBdKXJldHVybiBmdW5jdGlvbiBHdyh3LFAsRCxlZSl7dmFyIG9lPU5lLnV0aWxzLnByZXBfYmxvYjtpZigiU3RkIiE9PXcudCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEJhZCBTdGFuZGFyZCBFbmNyeXB0aW9uIik7dmFyIGdlPXcudi5TYWx0LF9lPXcudi5W'@;
put 'ZXJpZmllcix2ZT13LnYuVmVyaWZpZXJIYXNoO2lmKDM2IT13LmguRmxhZ3MpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBTdGFuZGFyZCBFbmNyeXB0aW9uIGJhZCBGbGFncyIpO3ZhciBNZT0wLGplPSIiO3N3aXRjaCh3LmguQWxnSUQpe2Nhc2UgMjYxMjY6TWU9MTI4LGplPSJhZXMtMTI4'@;
put 'LWVjYiI7YnJlYWs7Y2FzZSAyNjEyNzpNZT0xOTYsamU9ImFlcy0xOTItZWNiIjticmVhaztjYXNlIDI2MTI4Ok1lPTI1NixqZT0iYWVzLTI1Ni1lY2IiO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBCYWQgU3RhbmRhcmQgRW5jcnlwdGlvbiIpfWlmKDMyNzcyIT13'@;
put 'LmguQWxnSURIYXNoKXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgQmFkIFN0YW5kYXJkIEVuY3J5cHRpb24iKTtpZih3LmguS2V5U2l6ZSE9TWUpdGhyb3cgbmV3IEVycm9yKCJBbGdJRC9LZXlTaXplIG1pc21hdGNoIik7aWYoMjQhPXcuaC5Qcm92aWRlclR5cGUpdGhyb3cgbmV3IEVycm9y'@;
put 'KCJFQ01BLTM3NiB1bnN1cHBvcnRlZCBQcm92aWRlclR5cGUgIit3LmguUHJvdmlkZXJUeXBlKTtpZigiTWljcm9zb2Z0IEVuaGFuY2VkIFJTQSBhbmQgQUVTIENyeXB0b2dyYXBoaWMgUHJvdmlkZXIiIT09dy5oLkNTUE5hbWUuc2xpY2UoMCw1MykpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBv'@;
put 'cnRlZCBDcnlwdG8gUHJvdmlkZXIgIit3LmguQ1NQTmFtZSk7dmFyIFhlPSJTSEEtMSIsaXQ9TWU+PjMsZnQ9dHMoQnVmZmVyLmNvbmNhdChbZ2UsY3B0YWJsZS51dGlscy5lbmNvZGUoMTIwMCxEKV0pLFhlKSxNdD1CdWZmZXIuYWxsb2MoNCk7b2UoTXQsMCk7Zm9yKHZhciB1dD0wO3V0PDVl'@;
put 'NDsrK3V0KU10Lmw9MCxNdC53cml0ZV9zaGlmdCg0LHV0KSxmdD10cyhCdWZmZXIuY29uY2F0KFtNdCxmdF0pLFhlKTtNdC5sPTAsTXQud3JpdGVfc2hpZnQoNCwwKTt2YXIgcW4sZm4sS24sem4sT24sSHQ9KHpuPShLbj1mdW5jdGlvbih0cixZbixqcil7Zm9yKHZhciBsaT1CdWZmZXIuYWxs'@;
put 'b2MoNjQpLEVpPTA7RWk8bGkubGVuZ3RoOysrRWkpbGlbRWldPXRyO2ZvcihFaT0wO0VpPFluLmxlbmd0aDsrK0VpKWxpW0VpXV49WW5bRWldO3JldHVybiB0cyhsaSxqcil9KSg1NCxxbj10cyhCdWZmZXIuY29uY2F0KFtmdCxNdF0pLFhlKSxmbj1YZSksT249S24oOTIscW4sZm4pLEJ1ZmZl'@;
put 'ci5jb25jYXQoW3puLE9uXSkuc2xpY2UoMCxpdCkpO2lmKHdmKEh0LEJ1ZmZlci5hbGxvYygwKSxqZSkudXBkYXRlKHZlKS5zbGljZSgwLDIwKS5jb21wYXJlKHRzKHdmKEh0LEJ1ZmZlci5hbGxvYygwKSxqZSkudXBkYXRlKF9lKSxYZSkpKXRocm93IG5ldyBFcnJvcigiSW5jb3JyZWN0IFBh'@;
put 'c3N3b3JkIik7b2UoUCwwKTt2YXIga3Q9UC5yZWFkX3NoaWZ0KDQpO1AubCs9NDt2YXIgVHQ9W107Zm9yKHV0PTA7UC5sPFAubGVuZ3RoOylUdC5wdXNoKHdmKEh0LEJ1ZmZlci5hbGxvYygwKSxqZSkudXBkYXRlKFAuc2xpY2UoUC5sLFAubCs0MDk2KSkpLFAubCs9NDA5NiwrK3V0O3JldHVy'@;
put 'biBWMihCdWZmZXIuY29uY2F0KFR0KS5zbGljZSgwLGt0KSxlZSl9KHZlWzFdLG9lLmNvbnRlbnQsRC5wYXNzd29yZHx8IiIsRCk7dGhyb3cgbmV3IEVycm9yKCJGaWxlIGlzIHBhc3N3b3JkLXByb3RlY3RlZCIpfXZhciBzQj1mdW5jdGlvbigpe307ZnVuY3Rpb24gdUIodyxQKXtpZihQLnRl'@;
put 'bXBsYXRlKXJldHVybiBzQih3LFApO2lmKCJvZHMiPT1QLmJvb2tUeXBlKXJldHVybiBUMCh3LFApO3A4KFAmJlAuUFBJfHw5NiksdyYmIXcuU1NGJiYody5TU0Y9Uy5nZXRfdGFibGUoKSksdyYmdy5TU0YmJihRKFMpLFMubG9hZF90YWJsZSh3LlNTRiksUC5yZXZzc2Y9SWUody5TU0YpLFAu'@;
put 'cmV2c3NmW3cuU1NGWzY1NTM1XV09MCxQLnNzZj13LlNTRiksdy5TdHlsZXM9e0ZvbnRzOlAuRm9udHM9W3tzejoxMixjb2xvcjp7dGhlbWU6MSxyZ2I6IjAwMDAwMCJ9LG5hbWU6IkNhbGlicmkiLGZhbWlseToyLHNjaGVtZToibWlub3IifV0sRmlsbHM6UC5GaWxscz1be3BhdHRlcm5UeXBl'@;
put 'OiJub25lIn0se3BhdHRlcm5UeXBlOiJncmF5MTI1In1dLEJvcmRlcnM6UC5Cb3JkZXJzPVt7fV0sRFhGOlAuRFhGPXcuU3R5bGVzJiZ3LlN0eWxlcy5EWEZ8fFtdLFRhYmxlOlAuVGFibGU9dy5TdHlsZXMmJncuU3R5bGVzLlRhYmxlfHxbXX0sUC5vdmVycmlkZU1EVz9fcz1QLm92ZXJyaWRl'@;
put 'TURXOmhmKFAuRm9udHNbMF0pLFAucmVscz17fSxQLndicmVscz17fSxQLlN0cmluZ3M9W10sUC5TdHJpbmdzLkNvdW50PTAsUC5TdHJpbmdzLlVuaXF1ZT0wLGMxP1AucmV2U3RyaW5ncz1uZXcgTWFwOihQLnJldlN0cmluZ3M9e30sUC5yZXZTdHJpbmdzLmZvbz1bXSxkZWxldGUgUC5yZXZT'@;
put 'dHJpbmdzLmZvbyk7dmFyIEQ9Inhsc2IiPT1QLmJvb2tUeXBlPyJiaW4iOiJ4bWwiLGVlPVFRLmluZGV4T2YoUC5ib29rVHlwZSk+LTEsb2U9e3dvcmtib29rczpbXSxzaGVldHM6W10sY2hhcnRzOltdLGRpYWxvZ3M6W10sbWFjcm9zOltdLHJlbHM6W10sc3RyczpbXSxjb21tZW50czpbXSxs'@;
put 'aW5rczpbXSxjb3JlcHJvcHM6W10sZXh0cHJvcHM6W10sY3VzdHByb3BzOltdLHRoZW1lczpbXSxzdHlsZXM6W10sY2FsY2NoYWluczpbXSx2YmE6W10sZHJhd2luZ3M6W10scGl2b3RzOltdLHBpdm90Y2FjaGVzOltdLHBpdm90cmVjb3JkczpbXSxkYXRhbW9kZWxzOltdLGNoYXJ0b2Jqczpb'@;
put 'XSxjaGFydHN0eWxlczpbXSxjaGFydGNvbG9yczpbXSxjaGFydGV4czpbXSx0YWJsZXM6W10sY29ubnM6W10sY3RybHByb3BzOltdLGN1c3RvbXhtbHByb3BzOltdLFRPRE86W10seG1sbnM6IiJ9OyR3KFA9UHx8e30pO3ZhciBnZT1NbigpLF9lPSIiLHZlPTA7aWYoUC5jZWxsWGZzPVtdLFAu'@;
put 'Y2VsbFN0eWxlWGZzPVt7bmFtZToiTm9ybWFsIn1dLHdjKFAuY2VsbFhmcyxQLmNlbGxTdHlsZVhmcyx7fSx7cmV2c3NmOntHZW5lcmFsOjB9fSksdy5Qcm9wc3x8KHcuUHJvcHM9e30pLEd0KGdlLF9lPSJkb2NQcm9wcy9jb3JlLnhtbCIsZnVuY3Rpb24gdjIodyxQKXt2YXIgRD1QfHx7fSxl'@;
put 'ZT1bQm4scmhdLG9lPXt9O2lmKCF3JiYhRC5Qcm9wcylyZXR1cm4gZWUuam9pbigiIik7dyYmKG51bGwhPXcuQ3JlYXRlZERhdGUmJnljKCJkY3Rlcm1zOmNyZWF0ZWQiLCJzdHJpbmciPT10eXBlb2Ygdy5DcmVhdGVkRGF0ZT93LkNyZWF0ZWREYXRlOnIyKHcuQ3JlYXRlZERhdGUsRC5XVEYp'@;
put 'LHsieHNpOnR5cGUiOiJkY3Rlcm1zOlczQ0RURiJ9LGVlLG9lKSxudWxsIT13Lk1vZGlmaWVkRGF0ZSYmeWMoImRjdGVybXM6bW9kaWZpZWQiLCJzdHJpbmciPT10eXBlb2Ygdy5Nb2RpZmllZERhdGU/dy5Nb2RpZmllZERhdGU6cjIody5Nb2RpZmllZERhdGUsRC5XVEYpLHsieHNpOnR5cGUi'@;
put 'OiJkY3Rlcm1zOlczQ0RURiJ9LGVlLG9lKSk7Zm9yKHZhciBnZT0wO2dlIT1Vcy5sZW5ndGg7KytnZSl7dmFyIF9lPVVzW2dlXSx2ZT1ELlByb3BzJiZudWxsIT1ELlByb3BzW19lWzFdXT9ELlByb3BzW19lWzFdXTp3P3dbX2VbMV1dOm51bGw7ITA9PT12ZT92ZT0iMSI6ITE9PT12ZT92ZT0i'@;
put 'MCI6Im51bWJlciI9PXR5cGVvZiB2ZSYmKHZlPVN0cmluZyh2ZSkpLG51bGwhPXZlJiZ5YyhfZVswXSx2ZSxudWxsLGVlLG9lKX1yZXR1cm4gZWUubGVuZ3RoPjImJihlZVtlZS5sZW5ndGhdPSI8L2NwOmNvcmVQcm9wZXJ0aWVzPiIsZWVbMV09ZWVbMV0ucmVwbGFjZSgiLz4iLCI+IikpLGVl'@;
put 'LmpvaW4oIiIpfSh3LlByb3BzLFApKSxvZS5jb3JlcHJvcHMucHVzaChfZSksR28oUC5yZWxzLDIsX2UsTmkuQ09SRV9QUk9QUyksX2U9ImRvY1Byb3BzL2FwcC54bWwiLCF3LlByb3BzfHwhdy5Qcm9wcy5TaGVldE5hbWVzKWlmKHcuV29ya2Jvb2smJncuV29ya2Jvb2suU2hlZXRzKXtmb3Io'@;
put 'dmFyIE1lPVtdLGplPTA7amU8dy5TaGVldE5hbWVzLmxlbmd0aDsrK2plKTIhPSh3Lldvcmtib29rLlNoZWV0c1tqZV18fHt9KS5IaWRkZW4mJk1lLnB1c2gody5TaGVldE5hbWVzW2plXSk7dy5Qcm9wcy5TaGVldE5hbWVzPU1lfWVsc2Ugdy5Qcm9wcy5TaGVldE5hbWVzPXcuU2hlZXROYW1l'@;
put 'czt3LlByb3BzLldvcmtzaGVldHM9dy5Qcm9wcy5TaGVldE5hbWVzLmxlbmd0aCxHdChnZSxfZSxmdW5jdGlvbiB5YSh3KXt2YXIgUD1bXSxEPU1yO3JldHVybiB3fHwodz17fSksdy5BcHBsaWNhdGlvbj0iU2hlZXRKUyIsUFtQLmxlbmd0aF09Qm4sUFtQLmxlbmd0aF09bHAsZWYuZm9yRWFj'@;
put 'aChmdW5jdGlvbihlZSl7aWYodm9pZCAwIT09d1tlZVsxXV0pe3ZhciBvZTtzd2l0Y2goZWVbMl0pe2Nhc2Uic3RyaW5nIjpvZT1CcihTdHJpbmcod1tlZVsxXV0pKTticmVhaztjYXNlImJvb2wiOm9lPXdbZWVbMV1dPyJ0cnVlIjoiZmFsc2UifXZvaWQgMCE9PW9lJiYoUFtQLmxlbmd0aF09'@;
put 'RChlZVswXSxvZSkpfX0pLFBbUC5sZW5ndGhdPUQoIkhlYWRpbmdQYWlycyIsRCgidnQ6dmVjdG9yIixEKCJ2dDp2YXJpYW50IiwiPHZ0Omxwc3RyPldvcmtzaGVldHM8L3Z0Omxwc3RyPiIpK0QoInZ0OnZhcmlhbnQiLEQoInZ0Omk0IixTdHJpbmcody5Xb3Jrc2hlZXRzKSkpLHtzaXplOjIs'@;
put 'YmFzZVR5cGU6InZhcmlhbnQifSkpLFBbUC5sZW5ndGhdPUQoIlRpdGxlc09mUGFydHMiLEQoInZ0OnZlY3RvciIsdy5TaGVldE5hbWVzLm1hcChmdW5jdGlvbihlZSl7cmV0dXJuIjx2dDpscHN0cj4iK0JyKGVlKSsiPC92dDpscHN0cj4ifSkuam9pbigiIikse3NpemU6dy5Xb3Jrc2hlZXRz'@;
put 'LGJhc2VUeXBlOiJscHN0ciJ9KSksUC5sZW5ndGg+MiYmKFBbUC5sZW5ndGhdPSI8L1Byb3BlcnRpZXM+IixQWzFdPVBbMV0ucmVwbGFjZSgiLz4iLCI+IikpLFAuam9pbigiIil9KHcuUHJvcHMpKSxvZS5leHRwcm9wcy5wdXNoKF9lKSxHbyhQLnJlbHMsMyxfZSxOaS5FWFRfUFJPUFMpLHcu'@;
put 'Q3VzdHByb3BzIT09dy5Qcm9wcyYmbXQody5DdXN0cHJvcHN8fHt9KS5sZW5ndGg+MCYmKEd0KGdlLF9lPSJkb2NQcm9wcy9jdXN0b20ueG1sIixmdW5jdGlvbiBDMCh3KXt2YXIgUD1bQm4sejZdO2lmKCF3KXJldHVybiBQLmpvaW4oIiIpO3ZhciBEPTE7cmV0dXJuIG10KHcpLmZvckVhY2go'@;
put 'ZnVuY3Rpb24ob2UpeysrRCxQW1AubGVuZ3RoXT1NcigicHJvcGVydHkiLGZ1bmN0aW9uIG5sKHcsUCl7c3dpdGNoKHR5cGVvZiB3KXtjYXNlInN0cmluZyI6dmFyIEQ9TXIoInZ0Omxwd3N0ciIsQnIodykpO3JldHVybiBQJiYoRD1ELnJlcGxhY2UoLyZxdW90Oy9nLCJfeDAwMjJfIikpLEQ7'@;
put 'Y2FzZSJudW1iZXIiOnJldHVybiBNcigoMHx3KT09dz8idnQ6aTQiOiJ2dDpyOCIsQnIoU3RyaW5nKHcpKSk7Y2FzZSJib29sZWFuIjpyZXR1cm4gTXIoInZ0OmJvb2wiLHc/InRydWUiOiJmYWxzZSIpfWlmKHcgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBNcigidnQ6ZmlsZXRpbWUiLHIyKHcp'@;
put 'KTt0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBzZXJpYWxpemUgIit3KX0od1tvZV0sITApLHtmbXRpZDoie0Q1Q0RENTA1LTJFOUMtMTAxQi05Mzk3LTA4MDAyQjJDRjlBRX0iLHBpZDpELG5hbWU6QnIob2UpfSl9KSxQLmxlbmd0aD4yJiYoUFtQLmxlbmd0aF09IjwvUHJvcGVydGllcz4i'@;
put 'LFBbMV09UFsxXS5yZXBsYWNlKCIvPiIsIj4iKSksUC5qb2luKCIiKX0ody5DdXN0cHJvcHMpKSxvZS5jdXN0cHJvcHMucHVzaChfZSksR28oUC5yZWxzLDQsX2UsTmkuQ1VTVF9QUk9QUykpO3ZhciBVZT1bXSxYZT1bXTtmdW5jdGlvbiBpdChnbixxbil7WGUucHVzaChbdmUtMSxxbixnbl0p'@;
put 'fWZ1bmN0aW9uIGZ0KGduKXtVZS5wdXNoKFt2ZS0xLGduXSksR28oTXQsLTEsIi4uL3Bpdm90VGFibGVzL3Bpdm90VGFibGUiK1VlLmxlbmd0aCsiLiIrRCxOaS5QSVZPVCl9Zm9yKHZlPTE7dmU8PXcuU2hlZXROYW1lcy5sZW5ndGg7Kyt2ZSl7dmFyIE10PXsiIWlkIjp7fX0sdXQ9dy5TaGVl'@;
put 'dHNbdy5TaGVldE5hbWVzW3ZlLTFdXSx3dD0odXR8fHt9KVsiIXR5cGUiXXx8InNoZWV0Ijtzd2l0Y2god3Qpe2Nhc2UiY2hhcnQiOmlmKHR5cGVvZiB3cml0ZV9kcmF3aW5nXzwidSIpe0d0KGdlLF9lPSJ4bC9jaGFydHNoZWV0cy9zaGVldCIrdmUrIi4iK0QsQlQodmUtMSxfZSxQLHcsTXQp'@;
put 'KSxvZS5jaGFydHMucHVzaChfZSksR28oUC53YnJlbHMsLTEsImNoYXJ0c2hlZXRzL3NoZWV0Iit2ZSsiLiIrRCxOaS5DUyk7YnJlYWt9ZGVmYXVsdDpHdChnZSxfZT0ieGwvd29ya3NoZWV0cy9zaGVldCIrdmUrIi4iK0QsTFYodmUtMSxfZSxQLHcsTXQpKSxvZS5zaGVldHMucHVzaChfZSks'@;
put 'R28oUC53YnJlbHMsLTEsIndvcmtzaGVldHMvc2hlZXQiK3ZlKyIuIitELE5pLldTWzBdKX1pZih1dCl7ImNoYXJ0Ij09d3QmJiF1dFsiIXBvcyJdJiYodXRbIiFwb3MiXT17eDowLHk6MCx3OjkwMCxoOjYwMH0pO3ZhciBIdD11dFsiIWNvbW1lbnRzIl0sa3Q9ITE7aWYoSHQmJkh0Lmxlbmd0'@;
put 'aD4wKXt2YXIgVHQ9InhsL2NvbW1lbnRzIit2ZSsiLiIrRDtHdChnZSxUdCx0dChIdCxUdCxQKSksb2UuY29tbWVudHMucHVzaChUdCksR28oTXQsLTEsIi4uL2NvbW1lbnRzIit2ZSsiLiIrRCxOaS5DTU5UKSxrdD0hMH0odXRbIiFjb250cm9scyJdfHxbXSkubGVuZ3RoPjAmJihrdD0hMCks'@;
put 'dXRbIiFsZWdhY3kiXSYma3QmJkd0KGdlLCJ4bC9kcmF3aW5ncy92bWxEcmF3aW5nIit2ZSsiLnZtbCIsVkgodmUsdXRbIiFjb21tZW50cyJdLHV0WyIhY29udHJvbHMiXSx1dCkpLHV0WyIhbGVnYWN5SEYiXSYmTDgoZ2UsMCx2ZSx1dFsiIXByaW50Il0uaW1hZ2VzKTt2YXIgWXQ9KCJjaGFy'@;
put 'dCI9PXV0WyIhdHlwZSJdP1t1dF06dXRbIiFjaGFydHMiXXx8W10pLmNvbmNhdCgodXRbIiFpbWFnZXMiXXx8W10pLm1hcChmdW5jdGlvbihnbil7cmV0dXJuIGduWyIhdHlwZSJdfHwoZ25bIiF0eXBlIl09ImltYWdlIiksZ259KSkuY29uY2F0KCh1dFsiIXNoYXBlcyJdfHxbXSkubWFwKGZ1'@;
put 'bmN0aW9uKGduKXtyZXR1cm4gZ25bIiF0eXBlIl18fChnblsiIXR5cGUiXT0ic2hhcGUiKSxnbn0pKTtZdCYmWXQubGVuZ3RoJiYodHlwZW9mIHdyaXRlX2RyYXdpbmdfPCJ1Ij93cml0ZV9kcmF3aW5nXyhnZSxvZSx2ZSx1dCxZdCk6KEd0KGdlLCJ4bC9kcmF3aW5ncy9kcmF3aW5nIit2ZSsi'@;
put 'LnhtbCIsZkEoKSksb2UuZHJhd2luZ3MucHVzaCgieGwvZHJhd2luZ3MvZHJhd2luZyIrdmUrIi54bWwiKSkpLGRlbGV0ZSB1dFsiIWNvbW1lbnRzIl0sZGVsZXRlIHV0WyIhbGVnYWN5Il0sZGVsZXRlIHV0WyIhbGVnYWN5SEYiXX11dCYmdXRbIiFwaXZvdHMiXSYmInhtbCI9PUQmJnR5cGVv'@;
put 'ZiB3cml0ZV9waXZvdF94bWw8InUiJiZ1dFsiIXBpdm90cyJdLmZvckVhY2goZnQpLE10WyIhaWQiXS5ySWQxJiZHdChnZSxqaShfZSksWGwoTXQpKSx1dCYmdXRbIiF0YWJsZXMiXSYmInhtbCI9PUQmJnV0WyIhdGFibGVzIl0uZm9yRWFjaChpdCl9cmV0dXJuIG51bGwhPVAuU3RyaW5ncyYm'@;
put 'UC5TdHJpbmdzLmxlbmd0aD4wJiYoR3QoZ2UsX2U9InhsL3NoYXJlZFN0cmluZ3MuIitELEZWKFAuU3RyaW5ncyxfZSxQKSksb2Uuc3Rycy5wdXNoKF9lKSxHbyhQLndicmVscywtMSwic2hhcmVkU3RyaW5ncy4iK0QsTmkuU1NUKSksInhtbCI9PUQmJnR5cGVvZiB3cml0ZV9waXZvdF94bWw8'@;
put 'InUiJiZ3cml0ZV9waXZvdF94bWwoVWUsdyxnZSxvZSxQKSwieG1sIj09RCYmZnVuY3Rpb24gV20odyxQLEQsZWUpe3cuZm9yRWFjaChmdW5jdGlvbihvZSxnZSl7dmFyIF9lPVAuU2hlZXRzW1AuU2hlZXROYW1lc1tvZVswXV1dLHZlPSJ4bC90YWJsZXMvdGFibGUiKyhvZVswXSsxKSsiXyIr'@;
put 'b2VbMV0rIi54bWwiO2VlLnRhYmxlcy5wdXNoKHZlKTt2YXIgTWU9b2VbMl0ucmVmfHxfZVsiIXJlZiJdOyJzdHJpbmciIT10eXBlb2YgTWUmJihNZT1WbyhNZSkpO3ZhciBqZT1QaShNZSksVWU9b2VbMl0ubmFtZXx8InNqc3RibF8iK29lWzBdKyJfIitvZVsxXSxYZT1bQm5dLGl0PSFobihv'@;
put 'ZVsyXS5oZWFkZXIpLGZ0PWl0JiYhaG4ob2VbMl0uZmlsdGVyKTtYZS5wdXNoKCc8dGFibGUgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9zcHJlYWRzaGVldG1sLzIwMDYvbWFpbiIgaWQ9IicrKGdlKzEpKyciIG5hbWU9IicrQnIoVWUpKyciIGRpc3BsYXlOYW1l'@;
put 'PSInK0JyKFVlKSsnIiByZWY9IicrTWUrJyIgJysobnVsbCE9b2VbMl0uaGVhZGVyJiYxIT1vZVsyXS5oZWFkZXI/J2hlYWRlclJvd0NvdW50PSInKyhvZVsyXS5oZWFkZXJ8fDApKyciICc6IiIpKyI+IiksZnQmJlhlLnB1c2goJzxhdXRvRmlsdGVyIHJlZj0iJytNZSsnIi8+JyksWGUucHVz'@;
put 'aCgnPHRhYmxlQ29sdW1ucyBjb3VudD0iJysoamUuZS5jLWplLnMuYysxKSsnIj4nKTtmb3IodmFyIE10PVtdLHV0PWplLnMuYzt1dDw9amUuZS5jOysrdXQpaWYoaXQpe2Zvcih2YXIgd3Q9cGkoe3I6amUucy5yLGM6dXR9KSxIdD1fZVt3dF0sa3Q9b2VbMl0uY29scyYmb2VbMl0uY29sc1t1'@;
put 'dC1qZS5zLmNdJiZvZVsyXS5jb2xzW3V0LWplLnMuY10ubmFtZXx8SHQmJihIdC53fHxIdC52KXx8IkNvbHVtbiAiKyh1dC1qZS5zLmMrMSksVHQ9a3QsWXQ9MTtNdC5pbmRleE9mKFR0KT4tMSYmKytZdDwxNjM4NDspVHQ9a3QrWXQ7aWYoVHQhPWt0KXRocm93InRhYmxlIGNvbHVtbnMgIit1'@;
put 'dCsiIGFuZCAiKyhNdC5pbmRleE9mKGt0KStqZS5zLmMpKyIgaGF2ZSB0aGUgc2FtZSBoZWFkZXIgJyIra3QrIic7IHRyeSBzZXR0aW5nIGNlbGwgIit3dCsiIHRvICciK1R0KyInIjtNdC5wdXNoKFR0KSxYZS5wdXNoKCc8dGFibGVDb2x1bW4gaWQ9IicrKG9lWzJdLmNvbHMmJm9lWzJdLmNv'@;
put 'bHNbdXQtamUucy5jXSYmbnVsbCE9b2VbMl0uY29sc1t1dC1qZS5zLmNdLmlkP29lWzJdLmNvbHNbdXQtamUucy5jXS5pZDp1dC1qZS5zLmMrMSkrJyIgbmFtZT0iJytCcihUdCkrJyIvPicpfWVsc2UgWGUucHVzaChvZVsyXS5jb2xzJiZvZVsyXS5jb2xzW3V0LWplLnMuY10/Jzx0YWJsZUNv'@;
put 'bHVtbiBpZD0iJytvZVsyXS5jb2xzW3V0LWplLnMuY10uaWQrJyIgbmFtZT0iJytvZVsyXS5jb2xzW3V0LWplLnMuY10ubmFtZSsnIi8+JzonPHRhYmxlQ29sdW1uIGlkPSInKyh1dC1qZS5zLmMrMSkrJyIgdW5pcXVlTmFtZT0iJysodXQtamUucy5jKzEpKyciIG5hbWU9IicrKHV0LWplLnMu'@;
put 'YysxKSsnIi8+Jyk7WGUucHVzaCgiPC90YWJsZUNvbHVtbnM+Iik7dmFyIHFuPSsoITEhPT0ob2VbMl0uc3R5bGV8fHt9KS5yb3dzdHJpcGUpLGZuPSshIShvZVsyXS5zdHlsZXx8e30pLmNvbHN0cmlwZSxLbj0rISEob2VbMl0uc3R5bGV8fHt9KS5jb2xmaXJzdCx6bj0rISEob2VbMl0uc3R5'@;
put 'bGV8fHt9KS5jb2xsYXN0LE9uPShvZVsyXS5zdHlsZXx8e30pLm5hbWV8fCJNZWRpdW05IjtPbj1Pbi5tYXRjaCgvXihMaWdodHxNZWRpdW18RGFyaylcZCskLyk/IlRhYmxlU3R5bGUiK09uOk9uLFhlLnB1c2goJzx0YWJsZVN0eWxlSW5mbyBuYW1lPSInK09uKyciIHNob3dGaXJzdENvbHVt'@;
put 'bj0iJytLbisnIiBzaG93TGFzdENvbHVtbj0iJyt6bisnIiBzaG93Um93U3RyaXBlcz0iJytxbisnIiBzaG93Q29sdW1uU3RyaXBlcz0iJytmbisnIi8+JyksWGUucHVzaCgiPC90YWJsZT4iKSxHdChELHZlLFhlLmpvaW4oIiIpKX0pfShYZSx3LGdlLG9lKSwieG1sIj09RCYmKHcuRXh0ZXJu'@;
put 'YWxXQnx8W10pLmxlbmd0aCYmZnVuY3Rpb24gQV8odyxQLEQpe0QubGlua3N8fChELmxpbmtzPVtdKSx3LkV4dGVybmFsV0ImJncuRXh0ZXJuYWxXQi5mb3JFYWNoKGZ1bmN0aW9uKGVlLG9lKXt2YXIgZ2U9Ii94bC9leHRlcm5hbExpbmtzL19yZWxzL2V4dGVybmFsTGluayIrKG9lKzEpKyIu'@;
put 'eG1sLnJlbHMiLF9lPXt9O0dvKF9lLC0xLGVlLlRhcmdldCxlZS5NaXNzaW5nP05pLlhNSVNTOk5pLlhQQVRIKSxHdChQLG11KGdlKSxYbChfZSkpO3ZhciB2ZT0iL3hsL2V4dGVybmFsTGlua3MvZXh0ZXJuYWxMaW5rIisob2UrMSkrIi54bWwiO0QubGlua3MucHVzaCh2ZSksR3QoUCxtdSh2'@;
put 'ZSksZnVuY3Rpb24gdUEodyl7dmFyIFA9W0JuLFI4XTtyZXR1cm4ody5TaGVldE5hbWVzfHxbXSkubGVuZ3RoJiYoUC5wdXNoKCc8ZXh0ZXJuYWxCb29rIHhtbG5zOnI9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMi'@;
put 'IHI6aWQ9InJJZDEiPicpLFAucHVzaCgiPHNoZWV0TmFtZXM+Iiksdy5TaGVldE5hbWVzLmZvckVhY2goZnVuY3Rpb24oRCl7UC5wdXNoKCc8c2hlZXROYW1lIHZhbD0iJytCcihEKSsnIi8+Jyl9KSxQLnB1c2goIjwvc2hlZXROYW1lcz4iKSxQLnB1c2goIjxzaGVldERhdGFTZXQ+Iiksdy5T'@;
put 'aGVldE5hbWVzLmZvckVhY2goZnVuY3Rpb24oRCxlZSl7dmFyIG9lPXcuU2hlZXRzW0RdLGdlPXtzaGVldElkOmVlfSxfZT1udWxsO2lmKG51bGw9PW9lKWdlLnJlZnJlc2hFcnJvcj0xO2Vsc2UgaWYob2VbIiFyZWYiXSl7dmFyIHZlPUthKG9lWyIhcmVmIl0pO19lPSIiO2Zvcih2YXIgTWU9'@;
put 'dmUucy5yO01lPD12ZS5lLnI7KytNZSl7Zm9yKHZhciBqZT0iIixVZT12ZS5zLmM7VWU8PXZlLmUuYzsrK1VlKXt2YXIgWGU9cGkoe3I6TWUsYzpVZX0pO29lW1hlXSYmKGplfHwoamU9Jzxyb3cgcj0iJysoTWUrMSkrJyI+JyksamUrPSc8Y2VsbCByPSInK1hlKyciJysob2VbWGVdLnQ/JyB0'@;
put 'PSInK29lW1hlXS50KyciJzoiIikrIj48dj4iK0JyKG9lW1hlXS52KSsiPC92PjwvY2VsbD4iKX1qZSYmKF9lKz1qZSsiPC9yb3c+Iil9fVAucHVzaChNcigic2hlZXREYXRhIixfZSxnZSkpfSksUC5wdXNoKCI8L3NoZWV0RGF0YVNldD4iKSxQLnB1c2goIjwvZXh0ZXJuYWxCb29rPiIpKSxQ'@;
put 'Lmxlbmd0aD4yJiYoUFtQLmxlbmd0aF09IjwvZXh0ZXJuYWxMaW5rPiIsUFsxXT1QWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxQLmpvaW4oIiIpfShlZSkpfSl9KHcsZ2Usb2UpLCJ4bWwiPT1EJiZmdW5jdGlvbiBsQSh3KXt2YXIgUCxEO3cuV29ya2Jvb2t8fCh3Lldvcmtib29rPXtOYW1lczpb'@;
put 'XX0pLHcuV29ya2Jvb2suTmFtZXN8fCh3Lldvcmtib29rLk5hbWVzPVtdKTtmb3IodmFyIGVlPXcuV29ya2Jvb2suTmFtZXMsb2U9MDtvZTx3LlNoZWV0TmFtZXMubGVuZ3RoOysrb2Upe3ZhciBnZT13LlNoZWV0TmFtZXNbb2VdLF9lPXcuU2hlZXRzW2dlXTtpZihfZSYmX2VbIiFwcmludCJd'@;
put 'KXt2YXIgdmU9IiciK2dlKyInISIsTWU9X2VbIiFwcmludCJdO2lmKE1lKXt2YXIgamU9IShQPU1lLmFyZWEpLFVlPSEoRD1NZS50aXRsZXMpLFhlPVA/InN0cmluZyI9PXR5cGVvZiBQP1A6Vm8oUCk6IiI7aWYoUCYmKGVlLmZvckVhY2goZnVuY3Rpb24oZnQpe2Z0LlNoZWV0PT1vZSYmIWpl'@;
put 'JiYiX3hsbm0uUHJpbnRfQXJlYSI9PWZ0Lk5hbWUmJihqZT0hMCxmdC5SZWY9dmUrWGUpfSksamV8fGVlLnB1c2goe05hbWU6Il94bG5tLlByaW50X0FyZWEiLFJlZjp2ZStYZSxTaGVldDpvZX0pKSxEKXt2YXIgaXQ9IiI7RC5zLmM+LTEmJkQuZS5jPi0xJiYoaXQrPXZlK0JhKEQucy5jKSsi'@;
put 'OiIrQmEoRC5lLmMpKyIsIiksRC5zLnI+LTEmJkQuZS5yPi0xJiYoaXQrPXZlK1ZhKEQucy5yKSsiOiIrVmEoRC5lLnIpKyIsIiksaXQ9aXQuc2xpY2UoMCwtMSksZWUuZm9yRWFjaChmdW5jdGlvbihmdCl7ZnQuU2hlZXQ9PW9lJiYhVWUmJiJfeGxubS5QcmludF9UaXRsZXMiPT1mdC5OYW1l'@;
put 'JiYoamU9ITAsZnQuUmVmPWl0KX0pLFVlfHxlZS5wdXNoKHtOYW1lOiJfeGxubS5QcmludF9UaXRsZXMiLFJlZjppdCxTaGVldDpvZX0pfX19fX0odyksR3QoZ2UsX2U9InhsL3dvcmtib29rLiIrRCxmdW5jdGlvbiBEdyh3LFAsRCl7cmV0dXJuKCIuYmluIj09PVAuc2xpY2UoLTQpP3hWOlNW'@;
put 'KSh3LEQpfSh3LF9lLFApKSxvZS53b3JrYm9va3MucHVzaChfZSksR28oUC5yZWxzLDEsX2UsTmkuV0IpLEd0KGdlLF9lPSJ4bC90aGVtZS90aGVtZTEueG1sIixFMih3LlRoZW1lcyxQKSksb2UudGhlbWVzLnB1c2goX2UpLEdvKFAud2JyZWxzLC0xLCJ0aGVtZS90aGVtZTEueG1sIixOaS5U'@;
put 'SEVNRSksR3QoZ2UsX2U9InhsL3N0eWxlcy4iK0QsZnVuY3Rpb24gUFYodyxQLEQpe3JldHVybigiLmJpbiI9PT1QLnNsaWNlKC00KT9rSDpXeCkodyxEKX0odyxfZSxQKSksb2Uuc3R5bGVzLnB1c2goX2UpLEdvKFAud2JyZWxzLC0xLCJzdHlsZXMuIitELE5pLlNUWSksdy52YmFyYXcmJmVl'@;
put 'JiYoR3QoZ2UsX2U9InhsL3ZiYVByb2plY3QuYmluIix3LnZiYXJhdyksb2UudmJhLnB1c2goX2UpLEdvKFAud2JyZWxzLC0xLCJ2YmFQcm9qZWN0LmJpbiIsTmkuVkJBKSksdy5tb2RlbCYmdy5tb2RlbC5sZW5ndGgmJihHdChnZSwieGwvbW9kZWwvaXRlbS5kYXRhIix3Lm1vZGVsKSxHbyhQ'@;
put 'LndicmVscywtMSwibW9kZWwvaXRlbS5kYXRhIixOaS5QV1JQRCkpLHcuY29ubiYmKEd0KGdlLCJ4bC9jb25uZWN0aW9ucy54bWwiLHcuY29ubiksb2UuY29ubnMucHVzaCgiL3hsL2Nvbm5lY3Rpb25zLnhtbCIpLEdvKFAud2JyZWxzLC0xLCJjb25uZWN0aW9ucy54bWwiLE5pLkNPTk4pKSx3'@;
put 'LkN1c3RvbVhNTCYmdy5DdXN0b21YTUwuZm9yRWFjaChmdW5jdGlvbihnbixxbil7aWYoR3QoZ2UsImN1c3RvbVhtbC9pdGVtIisocW4rMSkrIi54bWwiLGduLmRhdGEpLEdvKFAud2JyZWxzLC0xLCIuLi9jdXN0b21YbWwvaXRlbSIrKHFuKzEpKyIueG1sIixOaS5DWE1MKSxnbi5wcm9wcyl7'@;
put 'R3QoZ2UsImN1c3RvbVhtbC9pdGVtUHJvcHMiKyhxbisxKSsiLnhtbCIsZ24ucHJvcHMpLG9lLmN1c3RvbXhtbHByb3BzLnB1c2goIi9jdXN0b21YbWwvaXRlbVByb3BzIisocW4rMSkrIi54bWwiKTt2YXIgZm49e307R28oZm4sLTEsIml0ZW1Qcm9wcyIrKHFuKzEpKyIueG1sIixOaS5DWE1M'@;
put 'UCksR3QoZ2UsImN1c3RvbVhtbC9fcmVscy9pdGVtIisocW4rMSkrIi54bWwucmVscyIsWGwoZm4pKX19KSxHdChnZSwiW0NvbnRlbnRfVHlwZXNdLnhtbCIsZnVuY3Rpb24gVmIodyxQLEQpe3ZhciBvZSxlZT1bXTtEfHwoZWVbZWUubGVuZ3RoXT1CbixlZVtlZS5sZW5ndGhdPW9wLGVlPWVl'@;
put 'LmNvbmNhdChOYikpO3ZhciBnZT1mdW5jdGlvbihNZSl7d1tNZV0mJndbTWVdLmxlbmd0aD4wJiYoZWVbZWUubGVuZ3RoXT1NcigiT3ZlcnJpZGUiLG51bGwse1BhcnROYW1lOigiLyI9PShvZT13W01lXVswXSlbMF0/IiI6Ii8iKStvZSxDb250ZW50VHlwZTpLZltNZV1bUC5ib29rVHlwZXx8'@;
put 'Inhsc3giXX0pKX0sX2U9ZnVuY3Rpb24oTWUpeyh3W01lXXx8W10pLmZvckVhY2goZnVuY3Rpb24oamUpe2VlW2VlLmxlbmd0aF09TXIoIk92ZXJyaWRlIixudWxsLHtQYXJ0TmFtZTooIi8iPT1qZVswXT8iIjoiLyIpK2plLENvbnRlbnRUeXBlOktmW01lXVtQLmJvb2tUeXBlfHwieGxzeCJd'@;
put 'fSl9KX0sdmU9ZnVuY3Rpb24oTWUpeyh3W01lXXx8W10pLmZvckVhY2goZnVuY3Rpb24oamUpe2VlW2VlLmxlbmd0aF09TXIoIk92ZXJyaWRlIixudWxsLHtQYXJ0TmFtZTooIi8iPT1qZVswXT8iIjoiLyIpK2plLENvbnRlbnRUeXBlOlp1W01lXVswXX0pfSl9O3JldHVybiBnZSgid29ya2Jv'@;
put 'b2tzIiksX2UoInNoZWV0cyIpLF9lKCJjaGFydHMiKSx2ZSgidGhlbWVzIiksWyJzdHJzIiwic3R5bGVzIiwiY29ubnMiXS5mb3JFYWNoKGdlKSxbImNvcmVwcm9wcyIsImV4dHByb3BzIiwiY3VzdHByb3BzIl0uZm9yRWFjaCh2ZSksdmUoInZiYSIpLHZlKCJjb21tZW50cyIpLHZlKCJkcmF3'@;
put 'aW5ncyIpLF9lKCJ0YWJsZXMiKSxfZSgicGl2b3RzIiksX2UoInBpdm90Y2FjaGVzIiksX2UoInBpdm90cmVjb3JkcyIpLHZlKCJkYXRhbW9kZWxzIiksdmUoImN0cmxwcm9wcyIpLHZlKCJjaGFydG9ianMiKSx2ZSgiY2hhcnRzdHlsZXMiKSx2ZSgiY2hhcnRjb2xvcnMiKSx2ZSgiY2hhcnRl'@;
put 'eHMiKSxfZSgibGlua3MiKSx2ZSgiY3VzdG9teG1scHJvcHMiKSwhRCYmZWUubGVuZ3RoPjImJihlZVtlZS5sZW5ndGhdPSI8L1R5cGVzPiIsZWVbMV09ZWVbMV0ucmVwbGFjZSgiLz4iLCI+IikpLGVlLmpvaW4oIiIpfShvZSxQKSksR3QoZ2UsIl9yZWxzLy5yZWxzIixYbChQLnJlbHMpKSxH'@;
put 'dChnZSwieGwvX3JlbHMvd29ya2Jvb2suIitEKyIucmVscyIsWGwoUC53YnJlbHMpKSxkZWxldGUgUC5Gb250cyxkZWxldGUgUC5GaWxscyxkZWxldGUgUC5Cb3JkZXJzLGRlbGV0ZSBQLnJldnNzZixkZWxldGUgUC5zc2YsZ2V9ZnVuY3Rpb24gS3codyxQKXt2YXIgRD0iIjtzd2l0Y2goKFB8'@;
put 'fHt9KS50eXBlfHwiYmFzZTY0Iil7Y2FzZSJidWZmZXIiOmNhc2UiYXJyYXkiOnJldHVyblt3WzBdLHdbMV0sd1syXSx3WzNdLHdbNF0sd1s1XSx3WzZdLHdbN11dO2Nhc2UiYmFzZTY0IjpEPWxlLmRlY29kZSh3LnNsaWNlKDAsMTIpKTticmVhaztjYXNlImJpbmFyeSI6RD13O2JyZWFrO2Rl'@;
put 'ZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiKyhQJiZQLnR5cGV8fCJ1bmRlZmluZWQiKSl9cmV0dXJuW0QuY2hhckNvZGVBdCgwKSxELmNoYXJDb2RlQXQoMSksRC5jaGFyQ29kZUF0KDIpLEQuY2hhckNvZGVBdCgzKSxELmNoYXJDb2RlQXQoNCksRC5jaGFyQ29k'@;
put 'ZUF0KDUpLEQuY2hhckNvZGVBdCg2KSxELmNoYXJDb2RlQXQoNyldfWZ1bmN0aW9uIGdPKHcsUCl7dmFyIEQ9MDtlOmZvcig7RDx3Lmxlbmd0aDspc3dpdGNoKHcuY2hhckNvZGVBdChEKSl7Y2FzZSAxMDpjYXNlIDEzOmNhc2UgMzI6KytEO2JyZWFrO2Nhc2UgNjA6cmV0dXJuIGVzKHcuc2xp'@;
put 'Y2UoRCksUCk7ZGVmYXVsdDpicmVhayBlfXJldHVybiB1Zi50b193b3JrYm9vayh3LFApfWZ1bmN0aW9uIHF3KHcsUCxELGVlKXtyZXR1cm4gZWU/KEQudHlwZT0ic3RyaW5nIix1Zi50b193b3JrYm9vayh3LEQpKTp1Zi50b193b3JrYm9vayhQLEQpfWZ1bmN0aW9uIFYyKHcsUCl7dmFyIEQ9'@;
put 'Uy5nZXRsb2NhbGUoKTtRKFMpLFMuc2V0bG9jYWxlKEQpLGooKTt2YXIgZWU9UHx8e307aWYodHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmdyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXJldHVybiBWMihuZXcgVWludDhBcnJheSh3KSwoKGVlPUp0KGVlKSkudHlwZT0iYXJyYXkiLGVlKSk7dmFy'@;
put 'IGdlLG9lPXcsX2U9ITE7aWYocDgoazI9ZWUuUFBJfHxwXyksZWUuY2VsbFN0eWxlcyYmKGVlLmNlbGxORj0hMCxlZS5zaGVldFN0dWJzPSEwKSxGcD17fSxlZS5kYXRlTkYmJihGcC5kYXRlTkY9ZWUuZGF0ZU5GKSxlZS50eXBlfHwoZWUudHlwZT1kZSYmQnVmZmVyLmlzQnVmZmVyKHcpPyJi'@;
put 'dWZmZXIiOiJiYXNlNjQiKSwiZmlsZSI9PWVlLnR5cGUmJihlZS50eXBlPWRlPyJidWZmZXIiOiJiaW5hcnkiLG9lPWZ1bmN0aW9uIFFlKHcpe2lmKHR5cGVvZiBMZTwidSIpcmV0dXJuIExlLnJlYWRGaWxlU3luYyh3KTtpZih0eXBlb2YgJDwidSImJnR5cGVvZiBGaWxlPCJ1IiYmdHlwZW9m'@;
put 'IEZvbGRlcjwidSIpdHJ5e3ZhciBQPUZpbGUodyk7UC5vcGVuKCJyIiksUC5lbmNvZGluZz0iYmluYXJ5Ijt2YXIgRD1QLnJlYWQoKTtyZXR1cm4gUC5jbG9zZSgpLER9Y2F0Y2goZWUpe2lmKCFlZS5tZXNzYWdlfHwhZWUubWVzc2FnZS5tYXRjaCgvb25zdHJ1Y3QvKSl0aHJvdyBlZX10aHJv'@;
put 'dyBuZXcgRXJyb3IoIkNhbm5vdCBhY2Nlc3MgZmlsZSAiK3cpfSh3KSksInN0cmluZyI9PWVlLnR5cGUmJihfZT0hMCxlZS50eXBlPSJiaW5hcnkiLGVlLmNvZGVwYWdlPTY1MDAxLG9lPWZ1bmN0aW9uIHBCKHcpe3JldHVybiB3Lm1hdGNoKC9bXlx4MDAtXHg3Rl0vKT9Ibyh3KTp3fSh3KSks'@;
put 'ImFycmF5Ij09ZWUudHlwZSYmdHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZ3IGluc3RhbmNlb2YgVWludDhBcnJheSYmdHlwZW9mIEFycmF5QnVmZmVyPCJ1Iil7dmFyIHZlPW5ldyBBcnJheUJ1ZmZlcigzKSxNZT1uZXcgVWludDhBcnJheSh2ZSk7aWYoTWUuZm9vPSJiYXIiLCFNZS5mb28pcmV0'@;
put 'dXJuKGVlPUp0KGVlKSkudHlwZT0iYXJyYXkiLFYyKEMob2UpLGVlKX1zd2l0Y2goKGdlPUt3KG9lLGVlKSlbMF0pe2Nhc2UgMjA4OmlmKDIwNz09PWdlWzFdJiYxNz09PWdlWzJdJiYyMjQ9PT1nZVszXSYmMTYxPT09Z2VbNF0mJjE3Nz09PWdlWzVdJiYyNj09PWdlWzZdJiYyMjU9PT1nZVs3'@;
put 'XSlyZXR1cm4gZnVuY3Rpb24gY0IodyxQKXtyZXR1cm4gTmUuZmluZCh3LCJFbmNyeXB0ZWRQYWNrYWdlIik/bEIodyxQKTptZyh3LFApfShOZS5yZWFkKG9lLGVlKSxlZSk7YnJlYWs7Y2FzZSA5OmlmKGdlWzFdPD04KXJldHVybiBtZyhvZSxlZSk7YnJlYWs7Y2FzZSA2MDpyZXR1cm4gZXMo'@;
put 'b2UsZWUpO2Nhc2UgNzM6aWYoNzM9PT1nZVsxXSYmNDI9PT1nZVsyXSYmMD09PWdlWzNdKXRocm93IG5ldyBFcnJvcigiVElGRiBJbWFnZSBGaWxlIGlzIG5vdCBhIHNwcmVhZHNoZWV0Iik7aWYoNjg9PT1nZVsxXSlyZXR1cm4gZnVuY3Rpb24gTFEodyxQKXt2YXIgRD1QfHx7fSxlZT0hIUQu'@;
put 'V1RGO0QuV1RGPSEwO3RyeXt2YXIgb2U9c18udG9fd29ya2Jvb2sodyxEKTtyZXR1cm4gRC5XVEY9ZWUsb2V9Y2F0Y2goZ2Upe2lmKEQuV1RGPWVlLCFnZS5tZXNzYWdlLm1hdGNoKC9TWUxLIGJhZCByZWNvcmQgSUQvKSYmZWUpdGhyb3cgZ2U7cmV0dXJuIHVmLnRvX3dvcmtib29rKHcsUCl9'@;
put 'fShvZSxlZSk7YnJlYWs7Y2FzZSA4NDppZig2NT09PWdlWzFdJiY2Nj09PWdlWzJdJiY3Nj09PWdlWzNdKXJldHVybiBncC50b193b3JrYm9vayhvZSxlZSk7YnJlYWs7Y2FzZSA4MDpyZXR1cm4gNzU9PT1nZVsxXSYmZ2VbMl08OSYmZ2VbM108OT9mdW5jdGlvbiBmQih3LFApe3ZhciBlZT13'@;
put 'LG9lPVB8fHt9O3JldHVybiBvZS50eXBlfHwob2UudHlwZT1kZSYmQnVmZmVyLmlzQnVmZmVyKHcpPyJidWZmZXIiOiJiYXNlNjQiKSxtTyhUbihlZSxvZSksb2UpfShvZSxlZSk6cXcodyxvZSxlZSxfZSk7Y2FzZSAyMzk6cmV0dXJuIDYwPT09Z2VbM10/ZXMob2UsZWUpOnF3KHcsb2UsZWUs'@;
put 'X2UpO2Nhc2UgMjU1OmlmKDI1ND09PWdlWzFdKXJldHVybiBmdW5jdGlvbiBoQih3LFApe3ZhciBEPXc7cmV0dXJuImJhc2U2NCI9PVAudHlwZSYmKEQ9bGUuZGVjb2RlKEQpKSxEPWNwdGFibGUudXRpbHMuZGVjb2RlKDEyMDAsRC5zbGljZSgyKSwic3RyIiksUC50eXBlPSJiaW5hcnkiLGdP'@;
put 'KEQsUCl9KG9lLGVlKTticmVhaztjYXNlIDA6aWYoMD09PWdlWzFdJiZnZVsyXT49MiYmMD09PWdlWzNdKXJldHVybiBsOC50b193b3JrYm9vayhvZSxlZSk7YnJlYWs7Y2FzZSAzOmNhc2UgMTMxOmNhc2UgMTM5OmNhc2UgMTQwOnJldHVybiBzaC50b193b3JrYm9vayhvZSxlZSk7Y2FzZSAx'@;
put 'MjM6aWYoOTI9PT1nZVsxXSYmMTE0PT09Z2VbMl0mJjExNj09PWdlWzNdKXJldHVybiBkOC50b193b3JrYm9vayhvZSxlZSk7YnJlYWs7Y2FzZSAxMDpjYXNlIDEzOmNhc2UgMzI6cmV0dXJuIGZ1bmN0aW9uIGRCKHcsUCl7dmFyIEQ9IiIsZWU9S3codyxQKTtzd2l0Y2goUC50eXBlKXtjYXNl'@;
put 'ImJhc2U2NCI6RD1sZS5kZWNvZGUodyk7YnJlYWs7Y2FzZSJiaW5hcnkiOkQ9dzticmVhaztjYXNlImJ1ZmZlciI6RD13LnRvU3RyaW5nKCJiaW5hcnkiKTticmVhaztjYXNlImFycmF5IjpEPUF0KHcpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAi'@;
put 'K1AudHlwZSl9cmV0dXJuIDIzOT09ZWVbMF0mJjE4Nz09ZWVbMV0mJjE5MT09ZWVbMl0mJihEPUZpKEQpKSxnTyhELFApfShvZSxlZSl9cmV0dXJuIHNoLnZlcnNpb25zLmluZGV4T2YoZ2VbMF0pPi0xJiZnZVsyXTw9MTImJmdlWzNdPD0zMT9zaC50b193b3JrYm9vayhvZSxlZSk6cXcodyxv'@;
put 'ZSxlZSxfZSl9ZnVuY3Rpb24gWHcodyxQKXt2YXIgRD1QfHx7fTtyZXR1cm4gRC50eXBlPSJmaWxlIixWMih3LEQpfWZ1bmN0aW9uIEp3KHcsUCl7c3dpdGNoKFAudHlwZSl7Y2FzZSJiYXNlNjQiOmNhc2UiYmluYXJ5IjpicmVhaztjYXNlImJ1ZmZlciI6Y2FzZSJhcnJheSI6UC50eXBlPSIi'@;
put 'O2JyZWFrO2Nhc2UiZmlsZSI6cmV0dXJuIEhlKFAuZmlsZSxOZS53cml0ZSh3LHt0eXBlOmRlPyJidWZmZXIiOiIifSkpO2Nhc2Uic3RyaW5nIjp0aHJvdyBuZXcgRXJyb3IoIidzdHJpbmcnIG91dHB1dCB0eXBlIGludmFsaWQgZm9yICciK1AuYm9va1R5cGUrIicgZmlsZXMiKTtkZWZhdWx0'@;
put 'OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitQLnR5cGUpfXJldHVybiBOZS53cml0ZSh3LFApfWZ1bmN0aW9uIHAxKHcsUCxEKXtEfHwoRD0iIik7dmFyIGVlPUQrdztzd2l0Y2goUC50eXBlKXtjYXNlImJhc2U2NCI6cmV0dXJuIGxlLmVuY29kZShIbyhlZSkpO2Nhc2Ui'@;
put 'YmluYXJ5IjpyZXR1cm4gSG8oZWUpO2Nhc2Uic3RyaW5nIjpyZXR1cm4gdztjYXNlImZpbGUiOnJldHVybiBIZShQLmZpbGUsZWUsInV0ZjgiKTtjYXNlImJ1ZmZlciI6cmV0dXJuIGRlP3VlKGVlLCJ1dGY4Iik6cDEoZWUse3R5cGU6ImJpbmFyeSJ9KS5zcGxpdCgiIikubWFwKGZ1bmN0aW9u'@;
put 'KG9lKXtyZXR1cm4gb2UuY2hhckNvZGVBdCgwKX0pfXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitQLnR5cGUpfWZ1bmN0aW9uIFF3KHcsUCl7c3dpdGNoKFAudHlwZSl7Y2FzZSJzdHJpbmciOmNhc2UiYmFzZTY0IjpjYXNlImJpbmFyeSI6Zm9yKHZhciBEPSIiLGVlPTA7'@;
put 'ZWU8dy5sZW5ndGg7KytlZSlEKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHdbZWVdKTtyZXR1cm4iYmFzZTY0Ij09UC50eXBlP2xlLmVuY29kZShEKToic3RyaW5nIj09UC50eXBlP0ZpKEQpOkQ7Y2FzZSJmaWxlIjpyZXR1cm4gSGUoUC5maWxlLHcpO2Nhc2UiYnVmZmVyIjpyZXR1cm4gdztkZWZh'@;
put 'dWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitQLnR5cGUpfX1mdW5jdGlvbiBiZyh3LFApe2ooKSxmdW5jdGlvbiBfVih3KXtpZighd3x8IXcuU2hlZXROYW1lc3x8IXcuU2hlZXRzKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBXb3JrYm9vayIpO2lmKCF3LlNoZWV0'@;
put 'TmFtZXMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiV29ya2Jvb2sgaXMgZW1wdHkiKTshZnVuY3Rpb24geHcodyxQLEQpe3cuZm9yRWFjaChmdW5jdGlvbihlZSxvZSl7RXcoZWUpO2Zvcih2YXIgZ2U9MDtnZTxvZTsrK2dlKWlmKGVlPT13W2dlXSl0aHJvdyBuZXcgRXJyb3IoIkR1cGxpY2F0'@;
put 'ZSBTaGVldCBOYW1lOiAiK2VlKTtpZihEKXt2YXIgX2U9UCYmUFtvZV0mJlBbb2VdLkNvZGVOYW1lfHxlZTtpZig5NT09X2UuY2hhckNvZGVBdCgwKSYmX2UubGVuZ3RoPjIyKXRocm93IG5ldyBFcnJvcigiQmFkIENvZGUgTmFtZTogV29ya3NoZWV0IitfZSl9fSl9KHcuU2hlZXROYW1lcyx3'@;
put 'Lldvcmtib29rJiZ3Lldvcmtib29rLlNoZWV0c3x8W10sISF3LnZiYXJhdyk7Zm9yKHZhciBEPTA7RDx3LlNoZWV0TmFtZXMubGVuZ3RoOysrRClyZyh3LlNoZWV0c1t3LlNoZWV0TmFtZXNbRF1dLDAsRCl9KHcpO3ZhciBEPVB8fHt9O2lmKEQuY2VsbFN0eWxlcyYmKEQuY2VsbE5GPSEwLEQu'@;
put 'c2hlZXRTdHVicz0hMCksImFycmF5Ij09RC50eXBlKXtELnR5cGU9ImJpbmFyeSI7dmFyIGVlPWJnKHcsRCk7cmV0dXJuIEQudHlwZT0iYXJyYXkiLE4oZWUpfXN3aXRjaChELmJvb2tUeXBlfHwieGxzYiIpe2Nhc2UieG1sIjpjYXNlInhsbWwiOnJldHVybiBwMSh6Vih3LEQpLEQpO2Nhc2Ui'@;
put 'c2xrIjpjYXNlInN5bGsiOnJldHVybiBwMShlQih3LEQpLEQpO2Nhc2UiaHRtIjpjYXNlImh0bWwiOnJldHVybiBwMShKVih3LEQpLEQpO2Nhc2UidHh0IjpyZXR1cm4gZnVuY3Rpb24gYk8odyxQKXtzd2l0Y2goUC50eXBlKXtjYXNlImJhc2U2NCI6cmV0dXJuIGxlLmVuY29kZSh3KTtjYXNl'@;
put 'ImJpbmFyeSI6Y2FzZSJzdHJpbmciOnJldHVybiB3O2Nhc2UiZmlsZSI6cmV0dXJuIEhlKFAuZmlsZSx3LCJiaW5hcnkiKTtjYXNlImJ1ZmZlciI6cmV0dXJuIGRlP3VlKHcsImJpbmFyeSIpOncuc3BsaXQoIiIpLm1hcChmdW5jdGlvbihEKXtyZXR1cm4gRC5jaGFyQ29kZUF0KDApfSl9dGhy'@;
put 'b3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK1AudHlwZSl9KG5CKHcsRCksRCk7Y2FzZSJjc3YiOnJldHVybiBwMShRVih3LEQpLEQsIlx1ZmVmZiIpO2Nhc2UiZGlmIjpyZXR1cm4gcDEodEIodyxEKSxEKTtjYXNlImRiZiI6cmV0dXJuIFF3KHVPKHcsRCksRCk7Y2FzZSJwcm4i'@;
put 'OnJldHVybiBwMShadyh3LEQpLEQpO2Nhc2UicnRmIjpyZXR1cm4gcDEodmcodyxEKSxEKTtjYXNlImV0aCI6cmV0dXJuIHAxKHJCKHcsRCksRCk7Y2FzZSJmb2RzIjpyZXR1cm4gcDEoVDAodyxEKSxEKTtjYXNlImJpZmYyIjpELmJpZmZ8fChELmJpZmY9Mik7Y2FzZSJiaWZmMyI6RC5iaWZm'@;
put 'fHwoRC5iaWZmPTMpO2Nhc2UiYmlmZjQiOnJldHVybiBELmJpZmZ8fChELmJpZmY9NCksUXcoQncodyxEKSxEKTtjYXNlImJpZmY1IjpELmJpZmZ8fChELmJpZmY9NSk7Y2FzZSJiaWZmOCI6Y2FzZSJ4bGEiOmNhc2UieGxzIjpyZXR1cm4gRC5iaWZmfHwoRC5iaWZmPTgpLGZ1bmN0aW9uIHlP'@;
put 'KHcsUCl7dmFyIEQ9UHx8e307cmV0dXJuIEp3KGZ1bmN0aW9uIGVPKHcsUCl7dmFyIEQ9UHx8e30sZWU9TmUudXRpbHMuY2ZiX25ldyh7cm9vdDoiUiJ9KSxvZT0iL1dvcmtib29rIjtzd2l0Y2goRC5ib29rVHlwZXx8InhscyIpe2Nhc2UieGxzIjpELmJvb2tUeXBlPSJiaWZmOCI7Y2FzZSJ4'@;
put 'bGEiOkQuYm9va1R5cGV8fChELmJvb2tUeXBlPSJ4bGEiKTtjYXNlImJpZmY4IjpvZT0iL1dvcmtib29rIixELmJpZmY9ODticmVhaztjYXNlImJpZmY1IjpvZT0iL0Jvb2siLEQuYmlmZj01O2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHR5cGUgIitELmJvb2tUeXBl'@;
put 'KyIgZm9yIFhMUyBDRkIiKX1yZXR1cm4gTmUudXRpbHMuY2ZiX2FkZChlZSxvZSxCdyh3LEQpKSw4PT1ELmJpZmYmJih3LlByb3BzfHx3LkN1c3Rwcm9wcykmJmZ1bmN0aW9uIFFUKHcsUCl7dmFyIF9lLEQ9W10sZWU9W10sb2U9W10sZ2U9MDtpZih3LlByb3BzKWZvcihfZT1tdCh3LlByb3Bz'@;
put 'KSxnZT0wO2dlPF9lLmxlbmd0aDsrK2dlKShPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZ20sX2VbZ2VdKT9EOk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2bSxfZVtnZV0pP2VlOm9lKS5wdXNoKFtfZVtnZV0sdy5Qcm9wc1tfZVtnZV1dXSk7aWYo'@;
put 'dy5DdXN0cHJvcHMpZm9yKF9lPW10KHcuQ3VzdHByb3BzKSxnZT0wO2dlPF9lLmxlbmd0aDsrK2dlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh3LlByb3BzfHx7fSxfZVtnZV0pfHwoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGdtLF9lW2dlXSk/'@;
put 'RDpPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodm0sX2VbZ2VdKT9lZTpvZSkucHVzaChbX2VbZ2VdLHcuQ3VzdHByb3BzW19lW2dlXV1dKTt2YXIgdmU9W107Zm9yKGdlPTA7Z2U8b2UubGVuZ3RoOysrZ2UpWTYuaW5kZXhPZihvZVtnZV1bMF0pPi0xfHxudWxsIT1vZVtn'@;
put 'ZV1bMV0mJnZlLnB1c2gob2VbZ2VdKTtlZS5sZW5ndGgmJk5lLnV0aWxzLmNmYl9hZGQoUCwiL1x4MDVTdW1tYXJ5SW5mb3JtYXRpb24iLHdpKGVlLEtwLlNJLHZtLGtyKSksKEQubGVuZ3RofHx2ZS5sZW5ndGgpJiZOZS51dGlscy5jZmJfYWRkKFAsIi9ceDA1RG9jdW1lbnRTdW1tYXJ5SW5m'@;
put 'b3JtYXRpb24iLHdpKEQsS3AuRFNJLGdtLG1tLHZlLmxlbmd0aD92ZTpudWxsLEtwLlVESSkpfSh3LGVlKSw4PT1ELmJpZmYmJncudmJhcmF3JiZmdW5jdGlvbiBZSCh3LFApe1AuRnVsbFBhdGhzLmZvckVhY2goZnVuY3Rpb24oRCxlZSl7aWYoMCE9ZWUpe3ZhciBvZT1ELnJlcGxhY2UoL1te'@;
put 'XC9dKltcL10vLCIvX1ZCQV9QUk9KRUNUX0NVUi8iKTsiLyIhPT1vZS5zbGljZSgtMSkmJk5lLnV0aWxzLmNmYl9hZGQodyxvZSxQLkZpbGVJbmRleFtlZV0uY29udGVudCl9fSl9KGVlLE5lLnJlYWQody52YmFyYXcse3R5cGU6InN0cmluZyI9PXR5cGVvZiB3LnZiYXJhdz8iYmluYXJ5Ijoi'@;
put 'YnVmZmVyIn0pKSxlZX0odyxEKSxEKX0odyxEKTtjYXNlInhsc3giOmNhc2UieGxzbSI6Y2FzZSJ4bGFtIjpjYXNlInhsc2IiOmNhc2Uib2RzIjpyZXR1cm4gZnVuY3Rpb24gdk8odyxQKXt2YXIgRD1QfHx7fSxlZT11Qih3LEQpLG9lPXt9O2lmKEQuY29tcHJlc3Npb24mJihvZS5jb21wcmVz'@;
put 'c2lvbj0iREVGTEFURSIpLEQucGFzc3dvcmQpb2UudHlwZT1kZT8ibm9kZWJ1ZmZlciI6InN0cmluZyI7ZWxzZSBzd2l0Y2goRC50eXBlKXtjYXNlImJhc2U2NCI6b2UudHlwZT0iYmFzZTY0IjticmVhaztjYXNlImJpbmFyeSI6b2UudHlwZT0ic3RyaW5nIjticmVhaztjYXNlInN0cmluZyI6'@;
put 'dGhyb3cgbmV3IEVycm9yKCInc3RyaW5nJyBvdXRwdXQgdHlwZSBpbnZhbGlkIGZvciAnIitELmJvb2tUeXBlKyInIGZpbGVzIik7Y2FzZSJidWZmZXIiOmNhc2UiZmlsZSI6b2UudHlwZT1kZT8ibm9kZWJ1ZmZlciI6InN0cmluZyI7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVu'@;
put 'cmVjb2duaXplZCB0eXBlICIrRC50eXBlKX12YXIgZ2U9ZWUuRnVsbFBhdGhzP05lLndyaXRlKGVlLHtmaWxlVHlwZToiemlwIix0eXBlOntub2RlYnVmZmVyOiJidWZmZXIiLHN0cmluZzoiYmluYXJ5In1bb2UudHlwZV18fG9lLnR5cGV9KTplZS5nZW5lcmF0ZShvZSk7cmV0dXJuIEQucGFz'@;
put 'c3dvcmQmJnR5cGVvZiBPMDwidSI/SncoTzAoZ2UsRC5wYXNzd29yZCksRCk6ImZpbGUiPT09RC50eXBlP0hlKEQuZmlsZSxnZSk6InN0cmluZyI9PUQudHlwZT9GaShnZSk6Z2V9KHcsRCk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBib29rVHlwZSB8IitELmJvb2tU'@;
put 'eXBlKyJ8Iil9fWZ1bmN0aW9uIG0xKHcpe2lmKCF3LmJvb2tUeXBlKXt2YXIgRD13LmZpbGUuc2xpY2Uody5maWxlLmxhc3RJbmRleE9mKCIuIikpLnRvTG93ZXJDYXNlKCk7RC5tYXRjaCgvXlwuW2Etel0rJC8pJiYody5ib29rVHlwZT1ELnNsaWNlKDEpKSx3LmJvb2tUeXBlPXt4bHM6ImJp'@;
put 'ZmY4IixodG06Imh0bWwiLHNsazoic3lsayIsc29jaWFsY2FsYzoiZXRoIixTaDMzdEpTOiJXVEYifVt3LmJvb2tUeXBlXXx8dy5ib29rVHlwZX19ZnVuY3Rpb24gX2codyxQLEQpe3ZhciBlZT1EfHx7fTtyZXR1cm4gZWUudHlwZT0iZmlsZSIsZWUuZmlsZT1QLG0xKGVlKSxiZyh3LGVlKX1m'@;
put 'dW5jdGlvbiBfTyh3LFAsRCxlZSxvZSxnZSxfZSx2ZSl7dmFyIE1lPVZhKEQpLGplPXZlLmRlZnZhbCxVZT12ZS5yYXcsWGU9ITAsaXQ9MT09PW9lP1tdOnt9O2lmKDEhPT1vZSlpZihPYmplY3QuZGVmaW5lUHJvcGVydHkpdHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShpdCwiX19yb3dOdW1f'@;
put 'XyIse3ZhbHVlOkQsZW51bWVyYWJsZTohMX0pfWNhdGNoe2l0Ll9fcm93TnVtX189RH1lbHNlIGl0Ll9fcm93TnVtX189RDtpZighX2V8fHdbRF0pZm9yKHZhciBmdD1QLnMuYztmdDw9UC5lLmM7KytmdCl7dmFyIE10PV9lP3dbRF1bZnRdOndbZWVbZnRdK01lXTtpZih2b2lkIDAhPT1NdCYm'@;
put 'dm9pZCAwIT09TXQudCl7dmFyIHV0PU10LnY7c3dpdGNoKE10LnQpe2Nhc2UieiI6aWYobnVsbD09dXQpYnJlYWs7Y29udGludWU7Y2FzZSJlIjp1dD0wPT11dD9udWxsOnZvaWQgMDticmVhaztjYXNlInMiOmNhc2UiZCI6Y2FzZSJiIjpjYXNlIm4iOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3'@;
put 'IEVycm9yKCJ1bnJlY29nbml6ZWQgdHlwZSAiK010LnQpfWlmKG51bGwhPWdlW2Z0XSl7aWYobnVsbD09dXQpaWYoImUiPT1NdC50JiZudWxsPT09dXQpaXRbZ2VbZnRdXT1udWxsO2Vsc2UgaWYodm9pZCAwIT09amUpaXRbZ2VbZnRdXT1qZTtlbHNle2lmKCFVZXx8bnVsbCE9PXV0KWNvbnRp'@;
put 'bnVlO2l0W2dlW2Z0XV09bnVsbH1lbHNlIGl0W2dlW2Z0XV09VWU/dXQ6bWMoTXQsdXQsdmUpO251bGwhPXV0JiYoWGU9ITEpfX1lbHNle2lmKHZvaWQgMD09PWplKWNvbnRpbnVlO251bGwhPWdlW2Z0XSYmKGl0W2dlW2Z0XV09amUpfX1yZXR1cm57cm93Oml0LGlzZW1wdHk6WGV9fWZ1bmN0'@;
put 'aW9uIHB2KHcsUCl7aWYobnVsbD09d3x8bnVsbD09d1siIXJlZiJdKXJldHVybltdO3ZhciBEPXt0OiJuIix2OjB9LGVlPTAsb2U9MSxnZT1bXSxfZT0wLHZlPSIiLE1lPUpTT04ucGFyc2UoJ3sicyI6eyJyIjowLCJjIjowfSwiZSI6eyJyIjowLCJjIjowfX0nKSxqZT1QfHx7fSxVZT1udWxs'@;
put 'IT1qZS5yYW5nZT9qZS5yYW5nZTp3WyIhcmVmIl07c3dpdGNoKDE9PT1qZS5oZWFkZXI/ZWU9MToiQSI9PT1qZS5oZWFkZXI/ZWU9MjpBcnJheS5pc0FycmF5KGplLmhlYWRlcik/ZWU9MzpudWxsPT1qZS5oZWFkZXImJihlZT0wKSx0eXBlb2YgVWUpe2Nhc2Uic3RyaW5nIjpNZT1QaShVZSk7'@;
put 'YnJlYWs7Y2FzZSJudW1iZXIiOihNZT1QaSh3WyIhcmVmIl0pKS5zLnI9VWU7YnJlYWs7ZGVmYXVsdDpNZT1VZX1lZT4wJiYob2U9MCk7dmFyIFhlPVZhKE1lLnMuciksaXQ9W10sZnQ9W10sTXQ9MCx1dD0wLHd0PUFycmF5LmlzQXJyYXkodyksSHQ9TWUucy5yLGt0PTAsVHQ9MDtmb3Iod3Qm'@;
put 'JiF3W0h0XSYmKHdbSHRdPVtdKSxrdD1NZS5zLmM7a3Q8PU1lLmUuYzsrK2t0KXN3aXRjaChpdFtrdF09QmEoa3QpLEQ9d3Q/d1tIdF1ba3RdOndbaXRba3RdK1hlXSxlZSl7Y2FzZSAxOmdlW2t0XT1rdC1NZS5zLmM7YnJlYWs7Y2FzZSAyOmdlW2t0XT1pdFtrdF07YnJlYWs7Y2FzZSAzOmdl'@;
put 'W2t0XT1qZS5oZWFkZXJba3QtTWUucy5jXTticmVhaztkZWZhdWx0OmZvcihudWxsPT1EJiYoRD1KU09OLnBhcnNlKCd7InciOiAiX19FTVBUWSIsICJ0IjogInMifScpKSx2ZT1fZT1tYyhELG51bGwsamUpLHV0PTAsVHQ9MDtUdDxnZS5sZW5ndGg7KytUdClnZVtUdF09PXZlJiYodmU9X2Ur'@;
put 'Il8iKyArK3V0KTtnZVtrdF09dmV9Zm9yKEh0PU1lLnMucitvZTtIdDw9TWUuZS5yOysrSHQpe3ZhciBZdD1fTyh3LE1lLEh0LGl0LGVlLGdlLHd0LGplKTsoITE9PT1ZdC5pc2VtcHR5fHwoMT09PWVlPyExIT09amUuYmxhbmtyb3dzOmplLmJsYW5rcm93cykpJiYoZnRbTXQrK109WXQucm93'@;
put 'KX1yZXR1cm4gZnQubGVuZ3RoPU10LGZ0fXZhciBkZD0vIi9nO2Z1bmN0aW9uIHdPKHcsUCxELGVlLG9lLGdlLF9lLHZlKXtmb3IodmFyIE1lPSEwLGplPVtdLFVlPSIiLFhlPVZhKEQpLGl0PVAucy5jO2l0PD1QLmUuYzsrK2l0KWlmKGVlW2l0XSl7dmFyIGZ0PXZlLmRlbnNlPyh3W0RdfHxb'@;
put 'XSlbaXRdOndbZWVbaXRdK1hlXTtpZihudWxsPT1mdClVZT0iIjtlbHNlIGlmKG51bGwhPWZ0LnYpe01lPSExLFVlPSIiK21jKGZ0LG51bGwsdmUpO2Zvcih2YXIgTXQ9MCx1dD0wO010IT09VWUubGVuZ3RoOysrTXQpaWYoKHV0PVVlLmNoYXJDb2RlQXQoTXQpKT09PW9lfHx1dD09PWdlfHwz'@;
put 'ND09PXV0KXtVZT0nIicrVWUucmVwbGFjZShkZCwnIiInKSsnIic7YnJlYWt9IklEIj09VWUmJihVZT0nIklEIicpfWVsc2UgbnVsbD09ZnQuZnx8ZnQuRj9VZT0iIjooTWU9ITEsKFVlPSI9IitmdC5mKS5pbmRleE9mKCIsIik+PTAmJihVZT0nIicrVWUucmVwbGFjZShkZCwnIiInKSsnIicp'@;
put 'KTtqZS5wdXNoKFVlKX1yZXR1cm4hMT09PXZlLmJsYW5rcm93cyYmTWU/bnVsbDpqZS5qb2luKF9lKX1mdW5jdGlvbiBLcyh3LFApe3ZhciBEPVtdLGVlPVA/P3t9O2lmKG51bGw9PXd8fG51bGw9PXdbIiFyZWYiXSlyZXR1cm4iIjt2YXIgb2U9UGkod1siIXJlZiJdKSxnZT12b2lkIDAhPT1l'@;
put 'ZS5GUz9lZS5GUzoiLCIsX2U9Z2UuY2hhckNvZGVBdCgwKSx2ZT12b2lkIDAhPT1lZS5SUz9lZS5SUzoiXG4iLE1lPXZlLmNoYXJDb2RlQXQoMCksamU9bmV3IFJlZ0V4cCgoInwiPT1nZT8iXFx8IjpnZSkrIiskIiksVWU9IiIsWGU9W107ZWUuZGVuc2U9QXJyYXkuaXNBcnJheSh3KTtmb3Io'@;
put 'dmFyIGl0PWVlLnNraXBIaWRkZW4mJndbIiFjb2xzIl18fFtdLGZ0PWVlLnNraXBIaWRkZW4mJndbIiFyb3dzIl18fFtdLE10PW9lLnMuYztNdDw9b2UuZS5jOysrTXQpKGl0W010XXx8e30pLmhpZGRlbnx8KFhlW010XT1CYShNdCkpO2Zvcih2YXIgdXQ9b2Uucy5yO3V0PD1vZS5lLnI7Kyt1'@;
put 'dCkoZnRbdXRdfHx7fSkuaGlkZGVufHxudWxsIT0oVWU9d08odyxvZSx1dCxYZSxfZSxNZSxnZSxlZSkpJiYoZWUuc3RyaXAmJihVZT1VZS5yZXBsYWNlKGplLCIiKSksRC5wdXNoKFVlK3ZlKSk7cmV0dXJuIGRlbGV0ZSBlZS5kZW5zZSxELmpvaW4oIiIpfWZ1bmN0aW9uIG1CKHcsUCl7UHx8'@;
put 'KFA9e30pLFAuRlM9Ilx0IixQLlJTPSJcbiI7dmFyIEQ9S3ModyxQKTtpZih0eXBlb2YgY3B0YWJsZT4idSJ8fCJzdHJpbmciPT1QLnR5cGUpcmV0dXJuIEQ7dmFyIGVlPWNwdGFibGUudXRpbHMuZW5jb2RlKDEyMDAsRCwic3RyIik7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoMjU1KStT'@;
put 'dHJpbmcuZnJvbUNoYXJDb2RlKDI1NCkrZWV9ZnVuY3Rpb24gbXYodyl7dmFyIEQsUD0iIixlZT0iIjtpZihudWxsPT13fHxudWxsPT13WyIhcmVmIl0pcmV0dXJuW107dmFyIHZlLG9lPVBpKHdbIiFyZWYiXSksZ2U9IiIsX2U9W10sTWU9W10samU9QXJyYXkuaXNBcnJheSh3KTtmb3IodmU9'@;
put 'b2Uucy5jO3ZlPD1vZS5lLmM7Kyt2ZSlfZVt2ZV09QmEodmUpO2Zvcih2YXIgVWU9b2Uucy5yO1VlPD1vZS5lLnI7KytVZSlmb3IoZ2U9VmEoVWUpLHZlPW9lLnMuYzt2ZTw9b2UuZS5jOysrdmUpaWYoUD1fZVt2ZV0rZ2UsZWU9IiIsdm9pZCAwIT09KEQ9amU/KHdbVWVdfHxbXSlbdmVdOndb'@;
put 'UF0pKXtpZihudWxsIT1ELkYpe2lmKFA9RC5GLCFELmYpY29udGludWU7ZWU9RC5mLC0xPT1QLmluZGV4T2YoIjoiKSYmKFA9UCsiOiIrUCl9aWYobnVsbCE9RC5mKWVlPUQuZjtlbHNle2lmKCJ6Ij09RC50KWNvbnRpbnVlO2lmKCJuIj09RC50JiZudWxsIT1ELnYpZWU9IiIrRC52O2Vsc2Ug'@;
put 'aWYoImIiPT1ELnQpZWU9RC52PyJUUlVFIjoiRkFMU0UiO2Vsc2UgaWYodm9pZCAwIT09RC53KWVlPSInIitELnc7ZWxzZXtpZih2b2lkIDA9PT1ELnYpY29udGludWU7ZWU9InMiPT1ELnQ/IiciK0QudjoiIitELnZ9fU1lW01lLmxlbmd0aF09UCsiPSIrZWV9cmV0dXJuIE1lfWZ1bmN0aW9u'@;
put 'IGVDKHcsUCxEKXt2YXIgZWU9RHx8e30sb2U9KyFlZS5za2lwSGVhZGVyLGdlPXd8fHt9LF9lPTAsdmU9MDtpZihnZSYmbnVsbCE9ZWUub3JpZ2luKWlmKCJudW1iZXIiPT10eXBlb2YgZWUub3JpZ2luKV9lPWVlLm9yaWdpbjtlbHNle3ZhciBNZT0ic3RyaW5nIj09dHlwZW9mIGVlLm9yaWdp'@;
put 'bj9jYShlZS5vcmlnaW4pOmVlLm9yaWdpbjtfZT1NZS5yLHZlPU1lLmN9dmFyIGplLFVlPUpTT04ucGFyc2UoJ3sicyI6IHsiYyI6MCwgInIiOjB9LCAiZSI6IHsiYyI6MCwgInIiOjB9fScpO2lmKFVlLmUuYz12ZSxVZS5lLnI9X2UrUC5sZW5ndGgtMStvZSxnZVsiIXJlZiJdKXt2YXIgWGU9'@;
put 'UGkoZ2VbIiFyZWYiXSk7VWUuZS5jPU1hdGgubWF4KFVlLmUuYyxYZS5lLmMpLFVlLmUucj1NYXRoLm1heChVZS5lLnIsWGUuZS5yKSwtMT09X2UmJihVZS5lLnI9KF9lPVhlLmUucisxKStQLmxlbmd0aC0xK29lKX1lbHNlLTE9PV9lJiYoX2U9MCxVZS5lLnI9UC5sZW5ndGgtMStvZSk7dmFy'@;
put 'IGl0PWVlLmhlYWRlcnx8W10sZnQ9MDtQLmZvckVhY2goZnVuY3Rpb24odXQsd3Qpe210KHV0KS5mb3JFYWNoKGZ1bmN0aW9uKEh0KXstMT09KGZ0PWl0LmluZGV4T2YoSHQpKSYmKGl0W2Z0PWl0Lmxlbmd0aF09SHQpO3ZhciBrdD11dFtIdF0sVHQ9InoiLFl0PSIiLGduPXBpKHtjOnZlK2Z0'@;
put 'LHI6X2Urd3Qrb2V9KTtpZihqZT1lYS5zaGVldF9nZXRfY2VsbChnZSxnbiksIWt0fHwib2JqZWN0IiE9dHlwZW9mIGt0fHxrdCBpbnN0YW5jZW9mIERhdGUpe2lmKCJudW1iZXIiPT10eXBlb2Yga3Q/VHQ9Im4iOiJib29sZWFuIj09dHlwZW9mIGt0P1R0PSJiIjoic3RyaW5nIj09dHlwZW9m'@;
put 'IGt0P1R0PSJzIjprdCBpbnN0YW5jZW9mIERhdGU/KFR0PSJkIixlZS5jZWxsRGF0ZXN8fChUdD0ibiIsa3Q9cWUoa3QpKSxZdD1qZS56JiZTLmlzX2RhdGUoamUueik/amUuejplZS5kYXRlTkZ8fFMuX3RhYmxlWzE0XSk6bnVsbD09PWt0JiZlZS5udWxsRXJyb3ImJihUdD0iZSIsa3Q9MCks'@;
put 'amU/KGplLnQ9VHQsamUudj1rdCxkZWxldGUgamUudyxkZWxldGUgamUuUixZdCYmKGplLno9WXQpKTpnZVtnbl09amU9e3Q6VHQsdjprdH0sWXQmJihqZS56PVl0KSxqZSYmamUuaCl0cnl7aWYoamUuUj1ZYy5odG1sX3RvX3JzKGplLmgpLCFqZS52KXtqZS52PSIiO2Zvcih2YXIgcW49MDtx'@;
put 'bjxqZS5SLmxlbmd0aDsrK3FuKWplLnYrPWplLlJbcW5dLnZ8fCIifX1jYXRjaHt9fWVsc2UgZ2VbZ25dPWt0fSl9KSxVZS5lLmM9TWF0aC5tYXgoVWUuZS5jLHZlK2l0Lmxlbmd0aC0xKTt2YXIgTXQ9VmEoX2UpO2lmKG9lKWZvcihmdD0wO2Z0PGl0Lmxlbmd0aDsrK2Z0KWdlW0JhKGZ0K3Zl'@;
put 'KStNdF09e3Q6InMiLHY6aXRbZnRdfTtyZXR1cm4gZ2VbIiFyZWYiXT1WbyhVZSksZ2V9dmFyIGVhPXtlbmNvZGVfY29sOkJhLGVuY29kZV9yb3c6VmEsZW5jb2RlX2NlbGw6cGksZW5jb2RlX3JhbmdlOlZvLGRlY29kZV9jb2w6YzIsZGVjb2RlX3JvdzpRMCxzcGxpdF9jZWxsOmZ1bmN0aW9u'@;
put 'IHVtKHcpe3JldHVybiB3LnJlcGxhY2UoLyhcJD9bQS1aXSopKFwkP1xkKikvLCIkMSwkMiIpLnNwbGl0KCIsIil9LGRlY29kZV9jZWxsOmNhLGRlY29kZV9yYW5nZTpLYSxmb3JtYXRfY2VsbDptYyxnZXRfZm9ybXVsYWU6bXYsbWFrZV9jc3Y6S3MsbWFrZV9qc29uOnB2LG1ha2VfZm9ybXVs'@;
put 'YWU6bXYsaHRtbF90b19yczpZYy5odG1sX3RvX3JzLHNoZWV0X2FkZF9hb2E6djAsc2hlZXRfYWRkX2pzb246ZUMsc2hlZXRfYWRkX2RvbTphTyxhb2FfdG9fc2hlZXQ6JDEsanNvbl90b19zaGVldDpmdW5jdGlvbiBSZWUodyxQKXtyZXR1cm4gZUMobnVsbCx3LFApfSx0YWJsZV90b19zaGVl'@;
put 'dDpXYyx0YWJsZV90b19ib29rOmZ1bmN0aW9uIGdyKHcsUCl7cmV0dXJuIFpmKFdjKHcsUCksUCl9LHNoZWV0X3RvX2NzdjpLcyxzaGVldF90b190eHQ6bUIsc2hlZXRfdG9fanNvbjpwdixzaGVldF90b19odG1sOlljLmZyb21fc2hlZXQsc2hlZXRfdG9fZm9ybXVsYWU6bXYsc2hlZXRfdG9f'@;
put 'cm93X29iamVjdF9hcnJheTpwdn07ZnVuY3Rpb24gQ08odyxQLEQsZWUsb2Upe3ZhciBnZTtpZih3LnN0eWxlJiYhKHcuX3JhbmdlJiYoZ2U9InN0cmluZyI9PXR5cGVvZiB3Ll9yYW5nZT9ILnV0aWxzLmRlY29kZV9yYW5nZSh3Ll9yYW5nZSk6dy5fcmFuZ2UsRC5jPmdlLmUuY3x8RC5jPGdl'@;
put 'LnMuY3x8RC5yPmdlLmUucnx8RC5yPGdlLnMucikpJiZnZSl7dmFyIF9lPXcuc3R5bGUuc3R5bGU7aWYoX2Upe19lLndob2xlVGFibGUmJmVhLmFwcGx5X3N0eWxlX2RlbHRhKGVlLF9lLndob2xlVGFibGUpO2U6aWYoX2UuaGVhZGVyUm93KWlmKG9lKXtpZihELnIhPWdlLnMucilicmVhayBl'@;
put 'O2huKHcuc3R5bGUuY29saGVhZCl8fGVhLmFwcGx5X3N0eWxlX2RlbHRhKGVlLF9lLmhlYWRlclJvdyl9ZWxzZXtpZihELnIhPWdlLnMucilicmVhayBlO2huKHcuaGVhZGVyKXx8ZWEuYXBwbHlfc3R5bGVfZGVsdGEoZWUsX2UuaGVhZGVyUm93KX19fX1lYS50ZXN0X3Bhc3N3b3JkPWZ1bmN0'@;
put 'aW9uIGNPKHcsUCl7dmFyIEQ9QnVmZmVyLmZyb20ody5zYWx0LCJiYXNlNjQiKSxlZT13LmFsZ28sb2U9dHMoQnVmZmVyLmNvbmNhdChbRCxCdWZmZXIuZnJvbShjcHRhYmxlLnV0aWxzLmVuY29kZSgxMjAwLFApKV0pLGVlKSxnZT1CdWZmZXIuYWxsb2MoNCk7c3MoZ2UsMCk7Zm9yKHZhciBf'@;
put 'ZT0wO19lPHcuc3BpbjsrK19lKWdlLmw9MCxnZS53cml0ZV9zaGlmdCg0LF9lKSxvZT10cyhCdWZmZXIuY29uY2F0KFtvZSxnZV0pLGVlKTt2YXIgdmU9QnVmZmVyLmZyb20ody5oYXNoLCJiYXNlNjQiKTtyZXR1cm4gMD09b2UuY29tcGFyZSh2ZSl9LGVhLmhhc2hfcGFzc3dvcmQ9ZnVuY3Rp'@;
put 'b24gV3codyl7dmFyIFA9e2FsZ286IlNIQS01MTIiLHNhbHQ6IlUyaGxaWFJLVXk1amIyMHZlR3h6ZUE9PSIsc3BpbjoxZTN9LEQ9QnVmZmVyLmZyb20oUC5zYWx0LCJiYXNlNjQiKSxlZT1QLmFsZ28sb2U9dHMoQnVmZmVyLmNvbmNhdChbRCxCdWZmZXIuZnJvbShjcHRhYmxlLnV0aWxzLmVu'@;
put 'Y29kZSgxMjAwLHcpKV0pLGVlKSxnZT1CdWZmZXIuYWxsb2MoNCk7c3MoZ2UsMCk7Zm9yKHZhciBfZT0wO19lPFAuc3BpbjsrK19lKWdlLmw9MCxnZS53cml0ZV9zaGlmdCg0LF9lKSxvZT10cyhCdWZmZXIuY29uY2F0KFtvZSxnZV0pLGVlKTtyZXR1cm4gUC5oYXNoPW9lLnRvU3RyaW5nKCJi'@;
put 'YXNlNjQiKSxQfSxlYS5zaGVldF9zZXRfcmFuZ2Vfc3R5bGU9ZnVuY3Rpb24odyxQLEQpe2lmKEQpe3ZhciBlZT0ic3RyaW5nIj09dHlwZW9mIFA/UGkoUCk6UDtudWxsIT1lZS5yJiZudWxsIT1lZS5jJiYoZWU9e3M6ZWUsZTplZX0pO3ZhciB2ZSxvZT1lZS5zLnIsZ2U9MCxfZT0iIixNZT1L'@;
put 'YSh3WyIhcmVmIl18fCJBMSIpO01lLnMucj5lZS5zLnImJihNZS5zLnI9ZWUucy5yKSxNZS5zLmM+ZWUucy5jJiYoTWUucy5jPWVlLnMuYyksTWUuZS5yPGVlLmUuciYmKE1lLmUucj1lZS5lLnIpLE1lLmUuYzxlZS5lLmMmJihNZS5lLmM9ZWUuZS5jKSx3WyIhcmVmIl09Vm8oTWUpO2Zvcih2'@;
put 'YXIgVWU9QXJyYXkuaXNBcnJheSh3KTtvZTw9ZWUuZS5yOysrb2UpZm9yKGdlPWVlLnMuYztnZTw9ZWUuZS5jOysrZ2UpVWU/KHdbb2VdfHwod1tvZV09W10pLHdbb2VdW2dlXXx8KHdbb2VdW2dlXT17dDoieiJ9KSx2ZT13W29lXVtnZV0pOih3W19lPXBpKHtyOm9lLGM6Z2V9KV18fCh3W19l'@;
put 'XT17dDoieiJ9KSx2ZT13W19lXSksdmUuc3x8KHZlLnM9e30pLE9iamVjdC5rZXlzKEQpLmZvckVhY2goamUpLHZlLnMucGF0dGVyblR5cGUmJiF2ZS5zLmZnQ29sb3ImJihkZWxldGUgdmUucy5wYXR0ZXJuVHlwZSxkZWxldGUgdmUucy5iZ0NvbG9yKSwodmUucy5mZ0NvbG9yfHx2ZS5zLmJn'@;
put 'Q29sb3IpJiYibm9uZSI9PSh2ZS5zLnBhdHRlcm5UeXBlfHwibm9uZSIpJiYodmUucy5wYXR0ZXJuVHlwZT0ic29saWQiKTtpZihvZT1lZS5zLnIsRC50b3B8fG51bGw9PT1ELnRvcClmb3IoZ2U9ZWUucy5jO2dlPD1lZS5lLmM7KytnZSl7aWYoVWUpe2lmKCF3W29lXSljb250aW51ZTt2ZT13'@;
put 'W29lXVtnZV19ZWxzZSBfZT1waSh7cjpvZSxjOmdlfSksdmU9d1tfZV07dmUmJihudWxsPT09RC50b3A/ZGVsZXRlIHZlLnMudG9wOnZlLnMudG9wPUp0KEQudG9wKSl9aWYob2U9ZWUuZS5yLEQuYm90dG9tfHxudWxsPT09RC5ib3R0b20pZm9yKGdlPWVlLnMuYztnZTw9ZWUuZS5jOysrZ2Up'@;
put 'e2lmKFVlKXtpZighd1tvZV0pY29udGludWU7dmU9d1tvZV1bZ2VdfWVsc2UgX2U9cGkoe3I6b2UsYzpnZX0pLHZlPXdbX2VdO3ZlJiYobnVsbD09PUQuYm90dG9tP2RlbGV0ZSB2ZS5zLmJvdHRvbTp2ZS5zLmJvdHRvbT1KdChELmJvdHRvbSkpfWlmKGdlPWVlLnMuYyxELmxlZnR8fG51bGw9'@;
put 'PT1ELmxlZnQpZm9yKG9lPWVlLnMucjtvZTw9ZWUuZS5yOysrb2Upe2lmKFVlKXtpZighd1tvZV0pY29udGludWU7dmU9d1tvZV1bZ2VdfWVsc2UgX2U9cGkoe3I6b2UsYzpnZX0pLHZlPXdbX2VdO3ZlJiYobnVsbD09PUQubGVmdD9kZWxldGUgdmUucy5sZWZ0OnZlLnMubGVmdD1KdChELmxl'@;
put 'ZnQpKX1pZihnZT1lZS5lLmMsRC5yaWdodHx8bnVsbD09PUQucmlnaHQpZm9yKG9lPWVlLnMucjtvZTw9ZWUuZS5yOysrb2Upe2lmKFVlKXtpZighd1tvZV0pY29udGludWU7dmU9d1tvZV1bZ2VdfWVsc2UgX2U9cGkoe3I6b2UsYzpnZX0pLHZlPXdbX2VdO3ZlJiYobnVsbD09PUQucmlnaHQ/'@;
put 'ZGVsZXRlIHZlLnMucmlnaHQ6dmUucy5yaWdodD1KdChELnJpZ2h0KSl9fWZ1bmN0aW9uIGplKFhlKXtpZigidG9wIiE9WGUmJiJib3R0b20iIT1YZSYmImxlZnQiIT1YZSYmInJpZ2h0IiE9WGUpe2lmKCJ6Ij09WGUpcmV0dXJuIHZvaWQodmUuej1ELnopO2lmKCJhbGlnbm1lbnQiPT1YZSly'@;
put 'ZXR1cm4gdm9pZCh2ZS5zW1hlXT9PYmplY3Qua2V5cyhEW1hlXSkuZm9yRWFjaChmdW5jdGlvbihpdCl7dmUuc1tYZV1baXRdPURbWGVdW2l0XX0pOnZlLnNbWGVdPUp0KERbWGVdKSk7aWYoImluY29sIj09WGUpcmV0dXJuIGdlPmVlLnMuYyYmKG51bGw9PT1ELmxlZnQ/ZGVsZXRlIHZlLnMu'@;
put 'bGVmdDp2ZS5zLmxlZnQ9Im9iamVjdCI9PXR5cGVvZiBEW1hlXT9KdChEW1hlXSk6RFtYZV0pLHZvaWQoZ2U8ZWUuZS5jJiYobnVsbD09PUQucmlnaHQ/ZGVsZXRlIHZlLnMucmlnaHQ6dmUucy5yaWdodD0ib2JqZWN0Ij09dHlwZW9mIERbWGVdP0p0KERbWGVdKTpEW1hlXSkpO2lmKCJpbnJv'@;
put 'dyI9PVhlKXJldHVybiBvZT5lZS5zLnImJihudWxsPT09RC50b3A/ZGVsZXRlIHZlLnMudG9wOnZlLnMudG9wPSJvYmplY3QiPT10eXBlb2YgRFtYZV0/SnQoRFtYZV0pOkRbWGVdKSx2b2lkKG9lPGVlLmUuciYmKG51bGw9PT1ELmJvdHRvbT9kZWxldGUgdmUucy5ib3R0b206dmUucy5ib3R0'@;
put 'b209Im9iamVjdCI9PXR5cGVvZiBEW1hlXT9KdChEW1hlXSk6RFtYZV0pKTtudWxsPT09RFtYZV0/ZGVsZXRlIHZlLnNbWGVdOnZlLnNbWGVdPURbWGVdJiZBcnJheS5pc0FycmF5KERbWGVdKT9EW1hlXS5zbGljZSgpLm1hcChmdW5jdGlvbihpdCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBp'@;
put 'dD9KdChpdCk6aXR9KToib2JqZWN0Ij09dHlwZW9mIERbWGVdP0p0KERbWGVdKTpEW1hlXX19fSxlYS5hcHBseV9zdHlsZV9kZWx0YT1mdW5jdGlvbih3LFApe1sic3oiLCJib2xkIiwiaXRhbGljIiwidW5kZXJsaW5lIiwic3RyaWtlIiwibmFtZSIsInZhbGlnbiJdLmZvckVhY2goZnVuY3Rp'@;
put 'b24oRCl7dmFyIGVlPUQ7ImJnQ29sb3IiPT1EP2VlPSJmZ0NvbG9yIjoiZmdDb2xvciI9PUQmJihlZT0iYmdDb2xvciIpLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChQLEQpJiYobnVsbD09PVBbRF0/ZGVsZXRlIHdbZWVdOm51bGwhPVBbRF0mJih3W2VlXT1QW0RdKSl9'@;
put 'KSxbImxlZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSIsImFsaWdubWVudCIsInByb3RlY3Rpb24iLCJjb2xvciIsImZnQ29sb3IiLCJiZ0NvbG9yIl0uZm9yRWFjaChmdW5jdGlvbihEKXtPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUCxEKSYmKG51bGw9PT1QW0RdP2Rl'@;
put 'bGV0ZSB3W0RdOm51bGwhPVBbRF0mJih3W0RdPUp0KFBbRF0pKSl9KX0sZWEuZ2V0X2NvbXB1dGVkX3N0eWxlPWZ1bmN0aW9uKHcsUCl7InN0cmluZyI9PXR5cGVvZiBQJiYoUD1ILnV0aWxzLmRlY29kZV9jZWxsKFApKTt2YXIgRD1BcnJheS5pc0FycmF5KHcpPyh3W1Aucl18fFtdKVtQLmNd'@;
put 'OndbSC51dGlscy5lbmNvZGVfY2VsbChQKV0sZWU9SnQoRCYmRC5zfHx7fSk7cmV0dXJuIHdbIiF0YWJsZXMiXSYmd1siIXRhYmxlcyJdLmZvckVhY2goZnVuY3Rpb24ob2Upe0NPKG9lLDAsUCxlZSl9KSx3WyIhcGl2b3RzIl0mJndbIiFwaXZvdHMiXS5mb3JFYWNoKGZ1bmN0aW9uKG9lKXtD'@;
put 'TyhvZSwwLFAsZWUsITApfSksZWV9O3ZhciBTTz17fTtlYS5jZWxsX2FycmF5X3RvX2Nzdl9yb3c9ZnVuY3Rpb24odyxQKXt2YXIgRD1QPz97fSxlZT12b2lkIDAhPT1ELkZTP0QuRlM6IiwiLG9lPWVlLmNoYXJDb2RlQXQoMCksZ2U9dm9pZCAwIT09RC5SUz9ELlJTOiJcbiIsX2U9Z2UuY2hh'@;
put 'ckNvZGVBdCgwKSx2ZT1TT1tlZV18fChTT1tlZV09bmV3IFJlZ0V4cCgoInwiPT1lZT8iXFx8IjplZSkrIiskIikpLE1lPWZ1bmN0aW9uIHFwKHcsUCxELGVlLG9lKXtmb3IodmFyIGdlPSEwLF9lPVtdLHZlPSIiLE1lPTA7TWU8PXcubGVuZ3RoLTE7KytNZSl7dmFyIGplPXdbTWVdO2lmKG51'@;
put 'bGw9PWplKXZlPSIiO2Vsc2UgaWYobnVsbCE9amUudil7Z2U9ITEsdmU9IiIrbWMoamUsbnVsbCxvZSk7Zm9yKHZhciBVZT0wLFhlPTA7VWUhPT12ZS5sZW5ndGg7KytVZSlpZigoWGU9dmUuY2hhckNvZGVBdChVZSkpPT09UHx8WGU9PT1EfHwzND09PVhlKXt2ZT0nIicrdmUucmVwbGFjZShk'@;
put 'ZCwnIiInKSsnIic7YnJlYWt9IklEIj09dmUmJih2ZT0nIklEIicpfWVsc2UgbnVsbD09amUuZnx8amUuRj92ZT0iIjooZ2U9ITEsKHZlPSI9IitqZS5mKS5pbmRleE9mKCIsIik+PTAmJih2ZT0nIicrdmUucmVwbGFjZShkZCwnIiInKSsnIicpKTtfZS5wdXNoKHZlKX1yZXR1cm4hMT09PW9l'@;
put 'LmJsYW5rcm93cyYmZ2U/bnVsbDpfZS5qb2luKGVlKX0odyxvZSxfZSxlZSxEKTtyZXR1cm4gRC5zdHJpcCYmKE1lPU1lLnJlcGxhY2UodmUsIiIpKSxNZStnZX0sZnVuY3Rpb24odyl7ZnVuY3Rpb24gRChnZSxfZSx2ZSl7cmV0dXJuIG51bGwhPWdlW19lXT9nZVtfZV06Z2VbX2VdPXZlfWZ1'@;
put 'bmN0aW9uIGVlKGdlLF9lLHZlKXtpZigic3RyaW5nIj09dHlwZW9mIF9lKXtpZihBcnJheS5pc0FycmF5KGdlKSl7dmFyIE1lPWNhKF9lKTtyZXR1cm4gZ2VbTWUucl18fChnZVtNZS5yXT1bXSksZ2VbTWUucl1bTWUuY118fChnZVtNZS5yXVtNZS5jXT17dDoieiJ9KX1yZXR1cm4gZ2VbX2Vd'@;
put 'fHwoZ2VbX2VdPXt0OiJ6In0pfXJldHVybiBlZShnZSxwaSgibnVtYmVyIiE9dHlwZW9mIF9lP19lOntyOl9lLGM6dmV8fDB9KSl9dy5jb25zdHM9dy5jb25zdHN8fHt9LHcuc2hlZXRfZ2V0X2NlbGw9ZWUsdy5ib29rX25ldz1mdW5jdGlvbigpe3JldHVybntTaGVldE5hbWVzOltdLFNoZWV0'@;
put 'czp7fX19LHcuYm9va19hcHBlbmRfc2hlZXQ9ZnVuY3Rpb24oZ2UsX2UsdmUpe2lmKCF2ZSlmb3IodmFyIE1lPTE7TWU8PTY1NTM1JiYtMSE9Z2UuU2hlZXROYW1lcy5pbmRleE9mKHZlPSJTaGVldCIrTWUpOysrTWUpO2lmKEV3KHZlKSxnZS5TaGVldE5hbWVzLmluZGV4T2YodmUpPj0wKXRo'@;
put 'cm93IG5ldyBFcnJvcigiV29ya3NoZWV0IHdpdGggbmFtZSB8Iit2ZSsifCBhbHJlYWR5IGV4aXN0cyEiKTtnZS5TaGVldE5hbWVzLnB1c2godmUpLGdlLlNoZWV0c1t2ZV09X2V9LHcuYm9va19zZXRfc2hlZXRfdmlzaWJpbGl0eT1mdW5jdGlvbihnZSxfZSx2ZSl7RChnZSwiV29ya2Jvb2si'@;
put 'LHt9KSxEKGdlLldvcmtib29rLCJTaGVldHMiLFtdKTt2YXIgTWU9ZnVuY3Rpb24gb2UoZ2UsX2Upe2lmKCJudW1iZXIiPT10eXBlb2YgX2Upe2lmKF9lPj0wJiZnZS5TaGVldE5hbWVzLmxlbmd0aD5fZSlyZXR1cm4gX2U7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBzaGVldCAjICIr'@;
put 'X2UpfWlmKCJzdHJpbmciPT10eXBlb2YgX2Upe3ZhciB2ZT1nZS5TaGVldE5hbWVzLmluZGV4T2YoX2UpO2lmKHZlPi0xKXJldHVybiB2ZTt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIHNoZWV0IG5hbWUgfCIrX2UrInwiKX10aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIHNoZWV0'@;
put 'IHwiK19lKyJ8Iil9KGdlLF9lKTtzd2l0Y2goRChnZS5Xb3JrYm9vay5TaGVldHMsTWUse30pLHZlKXtjYXNlIDA6Y2FzZSAxOmNhc2UgMjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiQmFkIHNoZWV0IHZpc2liaWxpdHkgc2V0dGluZyAiK3ZlKX1nZS5Xb3JrYm9vay5TaGVldHNb'@;
put 'TWVdLkhpZGRlbj12ZX0sZnVuY3Rpb24gUChnZSl7Z2UuZm9yRWFjaChmdW5jdGlvbihfZSl7dy5jb25zdHNbX2VbMF1dPV9lWzFdfSl9KFtbIlNIRUVUX1ZJU0lCTEUiLDBdLFsiU0hFRVRfSElEREVOIiwxXSxbIlNIRUVUX1ZFUllfSElEREVOIiwyXV0pLHcuY2VsbF9zZXRfbnVtYmVyX2Zv'@;
put 'cm1hdD1mdW5jdGlvbihnZSxfZSl7cmV0dXJuIGdlLno9X2UsZ2V9LHcuY2VsbF9zZXRfaHlwZXJsaW5rPWZ1bmN0aW9uKGdlLF9lLHZlKXtyZXR1cm4gX2U/KGdlLmw9e1RhcmdldDpfZX0sdmUmJihnZS5sLlRvb2x0aXA9dmUpLGdlLnN8fChnZS5zPXt9KSxnZS5zLmNvbG9yPXt0aGVtZTox'@;
put 'MH0pOihkZWxldGUgZ2UubCxnZS5zJiZnZS5zLmNvbG9yJiYxMD09Z2Uucy5jb2xvci50aGVtZSYmZGVsZXRlIGdlLnMuY29sb3IpLGdlfSx3LmNlbGxfc2V0X2ludGVybmFsX2xpbms9ZnVuY3Rpb24oZ2UsX2UsdmUpe3JldHVybiB3LmNlbGxfc2V0X2h5cGVybGluayhnZSwiIyIrX2UsdmUp'@;
put 'fSx3LmNlbGxfYWRkX2NvbW1lbnQ9ZnVuY3Rpb24oZ2UsX2UsdmUpe2dlLmN8fChnZS5jPVtdKSxnZS5jLnB1c2goe3Q6X2UsYTp2ZXx8IlNoZWV0SlMifSl9LHcuc2hlZXRfc2V0X2FycmF5X2Zvcm11bGE9ZnVuY3Rpb24oZ2UsX2UsdmUpe2Zvcih2YXIgTWU9InN0cmluZyIhPXR5cGVvZiBf'@;
put 'ZT9fZTpQaShfZSksamU9InN0cmluZyI9PXR5cGVvZiBfZT9fZTpWbyhfZSksVWU9TWUucy5yO1VlPD1NZS5lLnI7KytVZSlmb3IodmFyIFhlPU1lLnMuYztYZTw9TWUuZS5jOysrWGUpe3ZhciBpdD1lZShnZSxVZSxYZSk7aXQudD0ibiIsaXQuRj1qZSxkZWxldGUgaXQudixVZT09TWUucy5y'@;
put 'JiZYZT09TWUucy5jJiYoaXQuZj12ZSl9cmV0dXJuIGdlfX0oZWEpLGRlJiZmdW5jdGlvbigpe3ZhciB3PVQoNTE3OTMpLlJlYWRhYmxlO0guc3RyZWFtPXt0b19qc29uOmZ1bmN0aW9uKG9lLGdlKXt2YXIgX2U9dyh7b2JqZWN0TW9kZTohMH0pO2lmKG51bGw9PW9lfHxudWxsPT1vZVsiIXJl'@;
put 'ZiJdKXJldHVybiBfZS5wdXNoKG51bGwpLF9lO3ZhciB2ZT17dDoibiIsdjowfSxNZT0wLGplPTEsVWU9W10sWGU9MCxpdD0iIixmdD17czp7cjowLGM6MH0sZTp7cjowLGM6MH19LE10PWdlfHx7fSx1dD1udWxsIT1NdC5yYW5nZT9NdC5yYW5nZTpvZVsiIXJlZiJdO3N3aXRjaCgxPT09TXQu'@;
put 'aGVhZGVyP01lPTE6IkEiPT09TXQuaGVhZGVyP01lPTI6QXJyYXkuaXNBcnJheShNdC5oZWFkZXIpJiYoTWU9MyksdHlwZW9mIHV0KXtjYXNlInN0cmluZyI6ZnQ9UGkodXQpO2JyZWFrO2Nhc2UibnVtYmVyIjooZnQ9UGkob2VbIiFyZWYiXSkpLnMucj11dDticmVhaztkZWZhdWx0OmZ0PXV0'@;
put 'fU1lPjAmJihqZT0wKTt2YXIgd3Q9VmEoZnQucy5yKSxIdD1bXSxrdD0wLFR0PUFycmF5LmlzQXJyYXkob2UpLFl0PWZ0LnMucixnbj0wLHFuPTA7Zm9yKFR0JiYhb2VbWXRdJiYob2VbWXRdPVtdKSxnbj1mdC5zLmM7Z248PWZ0LmUuYzsrK2duKXN3aXRjaChIdFtnbl09QmEoZ24pLHZlPVR0'@;
put 'P29lW1l0XVtnbl06b2VbSHRbZ25dK3d0XSxNZSl7Y2FzZSAxOlVlW2duXT1nbi1mdC5zLmM7YnJlYWs7Y2FzZSAyOlVlW2duXT1IdFtnbl07YnJlYWs7Y2FzZSAzOlVlW2duXT1NdC5oZWFkZXJbZ24tZnQucy5jXTticmVhaztkZWZhdWx0OmZvcihudWxsPT12ZSYmKHZlPXt3OiJfX0VNUFRZ'@;
put 'Iix0OiJzIn0pLGl0PVhlPW1jKHZlLG51bGwsTXQpLGt0PTAscW49MDtxbjxVZS5sZW5ndGg7KytxbilVZVtxbl09PWl0JiYoaXQ9WGUrIl8iKyArK2t0KTtVZVtnbl09aXR9cmV0dXJuIFl0PWZ0LnMucitqZSxfZS5fcmVhZD1mdW5jdGlvbigpe2lmKFl0PmZ0LmUucilyZXR1cm4gX2UucHVz'@;
put 'aChudWxsKTtmb3IoO1l0PD1mdC5lLnI7KXt2YXIgZm49X08ob2UsZnQsWXQsSHQsTWUsVWUsVHQsTXQpO2lmKCsrWXQsITE9PT1mbi5pc2VtcHR5fHwoMT09PU1lPyExIT09TXQuYmxhbmtyb3dzOk10LmJsYW5rcm93cykpe19lLnB1c2goZm4ucm93KTticmVha319fSxfZX0sdG9faHRtbDpm'@;
put 'dW5jdGlvbihvZSxnZSl7dmFyIF9lPXcoKSx2ZT1nZXx8e30samU9bnVsbCE9dmUuZm9vdGVyP3ZlLmZvb3RlcjpZYy5FTkQ7X2UucHVzaChudWxsIT12ZS5oZWFkZXI/dmUuaGVhZGVyOlljLkJFR0lOKTt2YXIgVWU9S2Eob2VbIiFyZWYiXSk7dmUuZGVuc2U9QXJyYXkuaXNBcnJheShvZSks'@;
put 'X2UucHVzaChZYy5fcHJlYW1ibGUob2UsVWUsdmUpKTt2YXIgWGU9VWUucy5yLGl0PSExLGZ0PVtdO3JldHVybiBfZS5fcmVhZD1mdW5jdGlvbigpe2lmKFhlPlVlLmUucilyZXR1cm4gaXR8fChpdD0hMCxfZS5wdXNoKCI8L3RhYmxlPiIramUpKSxfZS5wdXNoKG51bGwpO2Zvcig7WGU8PVVl'@;
put 'LmUucjspe19lLnB1c2goWWMuX3JvdyhvZSxVZSxYZSx2ZSxmdCwiIikpLCsrWGU7YnJlYWt9fSxfZX0sdG9fY3N2OmZ1bmN0aW9uKG9lLGdlKXt2YXIgX2U9dygpLHZlPWdlPz97fTtpZihudWxsPT1vZXx8bnVsbD09b2VbIiFyZWYiXSlyZXR1cm4gX2UucHVzaChudWxsKSxfZTt2YXIgTWU9'@;
put 'UGkob2VbIiFyZWYiXSksamU9dm9pZCAwIT09dmUuRlM/dmUuRlM6IiwiLFVlPWplLmNoYXJDb2RlQXQoMCksWGU9dm9pZCAwIT09dmUuUlM/dmUuUlM6IlxuIixpdD1YZS5jaGFyQ29kZUF0KDApLGZ0PW5ldyBSZWdFeHAoKCJ8Ij09amU/IlxcfCI6amUpKyIrJCIpLE10PSIiLHV0PVtdO3Zl'@;
put 'LmRlbnNlPUFycmF5LmlzQXJyYXkob2UpO2Zvcih2YXIgd3Q9dmUuc2tpcEhpZGRlbiYmb2VbIiFjb2xzIl18fFtdLEh0PXZlLnNraXBIaWRkZW4mJm9lWyIhcm93cyJdfHxbXSxrdD1NZS5zLmM7a3Q8PU1lLmUuYzsrK2t0KSh3dFtrdF18fHt9KS5oaWRkZW58fCh1dFtrdF09QmEoa3QpKTt2'@;
put 'YXIgVHQ9TWUucy5yLFl0PSExO3JldHVybiBfZS5fcmVhZD1mdW5jdGlvbigpe2lmKCFZdClyZXR1cm4gWXQ9ITAsX2UucHVzaCgiXHVmZWZmIik7Zm9yKDtUdDw9TWUuZS5yOylpZigrK1R0LCEoSHRbVHQtMV18fHt9KS5oaWRkZW4mJm51bGwhPShNdD13TyhvZSxNZSxUdC0xLHV0LFVlLGl0'@;
put 'LGplLHZlKSkpe3ZlLnN0cmlwJiYoTXQ9TXQucmVwbGFjZShmdCwiIikpLF9lLnB1c2goTXQrWGUpO2JyZWFrfXJldHVybiBUdD5NZS5lLnI/X2UucHVzaChudWxsKTp2b2lkIDB9LF9lfX19KCksSC5wYXJzZV94bHNjZmI9bWcsSC5wYXJzZV96aXA9bU8sSC5yZWFkPVYyLEgucmVhZEZpbGU9'@;
put 'WHcsSC5yZWFkRmlsZVN5bmM9WHcsSC53cml0ZT1iZyxILndyaXRlRmlsZT1fZyxILndyaXRlRmlsZVN5bmM9X2csSC53cml0ZUZpbGVBc3luYz1mdW5jdGlvbiBCMih3LFAsRCxlZSl7dmFyIG9lPUR8fHt9O29lLnR5cGU9ImZpbGUiLG9lLmZpbGU9dyxtMShvZSksb2UudHlwZT0iYnVmZmVy'@;
put 'Ijt2YXIgZ2U9ZWU7cmV0dXJuIGdlIGluc3RhbmNlb2YgRnVuY3Rpb258fChnZT1EKSxMZS53cml0ZUZpbGUodyxiZyhQLG9lKSxnZSl9LEguc2V0X2RhdGVfc3R5bGU9ZnVuY3Rpb24gJGUodyl7c3dpdGNoKHcpe2Nhc2UgMDpFZSgpO2JyZWFrO2Nhc2UgMTohZnVuY3Rpb24gRGUoKXt2YXIg'@;
put 'dz1uZXcgRGF0ZTtudD1ldC5nZXRUaW1lKCkrNmU0Kih3LmdldFRpbWV6b25lT2Zmc2V0KCktZXQuZ2V0VGltZXpvbmVPZmZzZXQoKSk7dmFyIFA9dy5nZXRUaW1lem9uZU9mZnNldCgpO3FlPWZ1bmN0aW9uKGVlLG9lKXt2YXIgZ2U9ZWUuZ2V0VGltZSgpO3JldHVybiBvZSYmKGdlLT0xMjYz'@;
put 'MTY4ZTUpLChnZS0oZXQuZ2V0VGltZSgpKzZlNCooZWUuZ2V0VGltZXpvbmVPZmZzZXQoKS1ldC5nZXRUaW1lem9uZU9mZnNldCgpKSkpLzg2NGU1fSxodD1mdW5jdGlvbihlZSl7dmFyIG9lPW5ldyBEYXRlO3JldHVybiBvZS5zZXRUaW1lKDI0KmVlKjYwKjYwKjFlMytudCksb2UuZ2V0VGlt'@;
put 'ZXpvbmVPZmZzZXQoKSE9PVAmJm9lLnNldFRpbWUob2UuZ2V0VGltZSgpKzZlNCoob2UuZ2V0VGltZXpvbmVPZmZzZXQoKS1QKSksb2V9fSgpfX0sSC51dGlscz1lYSxILlNTRj1TLHR5cGVvZiBOZTwidSImJihILkNGQj1OZSl9KHplKX0sMjc0MTQ6KFdlLHplLFQpPT57InVzZSBzdHJpY3Qi'@;
put 'O2NvbnN0IHNlPXplO3NlLmJpZ251bT1UKDUwNDcpLHNlLmRlZmluZT1UKDkwMzAyKS5kZWZpbmUsc2UuYmFzZT1UKDQwNTEwKSxzZS5jb25zdGFudHM9VCg0NDE1NSksc2UuZGVjb2RlcnM9VCg3MTMwMSksc2UuZW5jb2RlcnM9VCgyMzY5Myl9LDkwMzAyOihXZSx6ZSxUKT0+eyJ1c2Ugc3Ry'@;
put 'aWN0Ijtjb25zdCBzZT1UKDIzNjkzKSxrPVQoNzEzMDEpLHY9VCg2NjY5OCk7ZnVuY3Rpb24gSChCLEwpe3RoaXMubmFtZT1CLHRoaXMuYm9keT1MLHRoaXMuZGVjb2RlcnM9e30sdGhpcy5lbmNvZGVycz17fX16ZS5kZWZpbmU9ZnVuY3Rpb24oTCxLKXtyZXR1cm4gbmV3IEgoTCxLKX0sSC5w'@;
put 'cm90b3R5cGUuX2NyZWF0ZU5hbWVkPWZ1bmN0aW9uKEwpe2NvbnN0IEs9dGhpcy5uYW1lO2Z1bmN0aW9uIEooSSl7dGhpcy5faW5pdE5hbWVkKEksSyl9cmV0dXJuIHYoSixMKSxKLnByb3RvdHlwZS5faW5pdE5hbWVkPWZ1bmN0aW9uKFIsRSl7TC5jYWxsKHRoaXMsUixFKX0sbmV3IEoodGhp'@;
put 'cyl9LEgucHJvdG90eXBlLl9nZXREZWNvZGVyPWZ1bmN0aW9uKEwpe3JldHVybiB0aGlzLmRlY29kZXJzLmhhc093blByb3BlcnR5KEw9THx8ImRlciIpfHwodGhpcy5kZWNvZGVyc1tMXT10aGlzLl9jcmVhdGVOYW1lZChrW0xdKSksdGhpcy5kZWNvZGVyc1tMXX0sSC5wcm90b3R5cGUuZGVj'@;
put 'b2RlPWZ1bmN0aW9uKEwsSyxKKXtyZXR1cm4gdGhpcy5fZ2V0RGVjb2RlcihLKS5kZWNvZGUoTCxKKX0sSC5wcm90b3R5cGUuX2dldEVuY29kZXI9ZnVuY3Rpb24oTCl7cmV0dXJuIHRoaXMuZW5jb2RlcnMuaGFzT3duUHJvcGVydHkoTD1MfHwiZGVyIil8fCh0aGlzLmVuY29kZXJzW0xdPXRo'@;
put 'aXMuX2NyZWF0ZU5hbWVkKHNlW0xdKSksdGhpcy5lbmNvZGVyc1tMXX0sSC5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKEwsSyxKKXtyZXR1cm4gdGhpcy5fZ2V0RW5jb2RlcihLKS5lbmNvZGUoTCxKKX19LDc1NzIwOihXZSx6ZSxUKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBzZT1UKDY2Njk4'@;
put 'KSxrPVQoOTU2ODQpLmIsdj1UKDI0MTc5KS5CdWZmZXI7ZnVuY3Rpb24gaGUoQixMKXtrLmNhbGwodGhpcyxMKSx2LmlzQnVmZmVyKEIpPyh0aGlzLmJhc2U9Qix0aGlzLm9mZnNldD0wLHRoaXMubGVuZ3RoPUIubGVuZ3RoKTp0aGlzLmVycm9yKCJJbnB1dCBub3QgQnVmZmVyIil9ZnVuY3Rp'@;
put 'b24gSChCLEwpe2lmKEFycmF5LmlzQXJyYXkoQikpdGhpcy5sZW5ndGg9MCx0aGlzLnZhbHVlPUIubWFwKGZ1bmN0aW9uKEspe3JldHVybiBILmlzRW5jb2RlckJ1ZmZlcihLKXx8KEs9bmV3IEgoSyxMKSksdGhpcy5sZW5ndGgrPUsubGVuZ3RoLEt9LHRoaXMpO2Vsc2UgaWYoIm51bWJlciI9'@;
put 'PXR5cGVvZiBCKXtpZighKDA8PUImJkI8PTI1NSkpcmV0dXJuIEwuZXJyb3IoIm5vbi1ieXRlIEVuY29kZXJCdWZmZXIgdmFsdWUiKTt0aGlzLnZhbHVlPUIsdGhpcy5sZW5ndGg9MX1lbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgQil0aGlzLnZhbHVlPUIsdGhpcy5sZW5ndGg9di5ieXRlTGVu'@;
put 'Z3RoKEIpO2Vsc2V7aWYoIXYuaXNCdWZmZXIoQikpcmV0dXJuIEwuZXJyb3IoIlVuc3VwcG9ydGVkIHR5cGU6ICIrdHlwZW9mIEIpO3RoaXMudmFsdWU9Qix0aGlzLmxlbmd0aD1CLmxlbmd0aH19c2UoaGUsayksemUuQz1oZSxoZS5pc0RlY29kZXJCdWZmZXI9ZnVuY3Rpb24oTCl7cmV0dXJu'@;
put 'IEwgaW5zdGFuY2VvZiBoZXx8Im9iamVjdCI9PXR5cGVvZiBMJiZ2LmlzQnVmZmVyKEwuYmFzZSkmJiJEZWNvZGVyQnVmZmVyIj09PUwuY29uc3RydWN0b3IubmFtZSYmIm51bWJlciI9PXR5cGVvZiBMLm9mZnNldCYmIm51bWJlciI9PXR5cGVvZiBMLmxlbmd0aCYmImZ1bmN0aW9uIj09dHlw'@;
put 'ZW9mIEwuc2F2ZSYmImZ1bmN0aW9uIj09dHlwZW9mIEwucmVzdG9yZSYmImZ1bmN0aW9uIj09dHlwZW9mIEwuaXNFbXB0eSYmImZ1bmN0aW9uIj09dHlwZW9mIEwucmVhZFVJbnQ4JiYiZnVuY3Rpb24iPT10eXBlb2YgTC5za2lwJiYiZnVuY3Rpb24iPT10eXBlb2YgTC5yYXd9LGhlLnByb3Rv'@;
put 'dHlwZS5zYXZlPWZ1bmN0aW9uKCl7cmV0dXJue29mZnNldDp0aGlzLm9mZnNldCxyZXBvcnRlcjprLnByb3RvdHlwZS5zYXZlLmNhbGwodGhpcyl9fSxoZS5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbihMKXtjb25zdCBLPW5ldyBoZSh0aGlzLmJhc2UpO3JldHVybiBLLm9mZnNldD1MLm9m'@;
put 'ZnNldCxLLmxlbmd0aD10aGlzLm9mZnNldCx0aGlzLm9mZnNldD1MLm9mZnNldCxrLnByb3RvdHlwZS5yZXN0b3JlLmNhbGwodGhpcyxMLnJlcG9ydGVyKSxLfSxoZS5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9mZnNldD09PXRoaXMubGVuZ3RofSxoZS5wcm90'@;
put 'b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKEwpe3JldHVybiB0aGlzLm9mZnNldCsxPD10aGlzLmxlbmd0aD90aGlzLmJhc2UucmVhZFVJbnQ4KHRoaXMub2Zmc2V0KyssITApOnRoaXMuZXJyb3IoTHx8IkRlY29kZXJCdWZmZXIgb3ZlcnJ1biIpfSxoZS5wcm90b3R5cGUuc2tpcD1mdW5jdGlv'@;
put 'bihMLEspe2lmKCEodGhpcy5vZmZzZXQrTDw9dGhpcy5sZW5ndGgpKXJldHVybiB0aGlzLmVycm9yKEt8fCJEZWNvZGVyQnVmZmVyIG92ZXJydW4iKTtjb25zdCBKPW5ldyBoZSh0aGlzLmJhc2UpO3JldHVybiBKLl9yZXBvcnRlclN0YXRlPXRoaXMuX3JlcG9ydGVyU3RhdGUsSi5vZmZzZXQ9'@;
put 'dGhpcy5vZmZzZXQsSi5sZW5ndGg9dGhpcy5vZmZzZXQrTCx0aGlzLm9mZnNldCs9TCxKfSxoZS5wcm90b3R5cGUucmF3PWZ1bmN0aW9uKEwpe3JldHVybiB0aGlzLmJhc2Uuc2xpY2UoTD9MLm9mZnNldDp0aGlzLm9mZnNldCx0aGlzLmxlbmd0aCl9LHplLlI9SCxILmlzRW5jb2RlckJ1ZmZl'@;
put 'cj1mdW5jdGlvbihMKXtyZXR1cm4gTCBpbnN0YW5jZW9mIEh8fCJvYmplY3QiPT10eXBlb2YgTCYmIkVuY29kZXJCdWZmZXIiPT09TC5jb25zdHJ1Y3Rvci5uYW1lJiYibnVtYmVyIj09dHlwZW9mIEwubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgTC5qb2lufSxILnByb3RvdHlwZS5qb2lu'@;
put 'PWZ1bmN0aW9uKEwsSyl7cmV0dXJuIEx8fChMPXYuYWxsb2ModGhpcy5sZW5ndGgpKSxLfHwoSz0wKSwwPT09dGhpcy5sZW5ndGh8fChBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpP3RoaXMudmFsdWUuZm9yRWFjaChmdW5jdGlvbihKKXtKLmpvaW4oTCxLKSxLKz1KLmxlbmd0aH0pOigibnVt'@;
put 'YmVyIj09dHlwZW9mIHRoaXMudmFsdWU/TFtLXT10aGlzLnZhbHVlOiJzdHJpbmciPT10eXBlb2YgdGhpcy52YWx1ZT9MLndyaXRlKHRoaXMudmFsdWUsSyk6di5pc0J1ZmZlcih0aGlzLnZhbHVlKSYmdGhpcy52YWx1ZS5jb3B5KEwsSyksSys9dGhpcy5sZW5ndGgpKSxMfX0sNDA1MTA6KFdl'@;
put 'LHplLFQpPT57InVzZSBzdHJpY3QiO2NvbnN0IHNlPXplO3NlLlJlcG9ydGVyPVQoOTU2ODQpLmIsc2UuRGVjb2RlckJ1ZmZlcj1UKDc1NzIwKS5DLHNlLkVuY29kZXJCdWZmZXI9VCg3NTcyMCkuUixzZS5Ob2RlPVQoNTg1MzMpfSw1ODUzMzooV2UsemUsVCk9PnsidXNlIHN0cmljdCI7Y29u'@;
put 'c3Qgc2U9VCg5NTY4NCkuYixrPVQoNzU3MjApLlIsdj1UKDc1NzIwKS5DLGhlPVQoNTc3OTgpLEg9WyJzZXEiLCJzZXFvZiIsInNldCIsInNldG9mIiwib2JqaWQiLCJib29sIiwiZ2VudGltZSIsInV0Y3RpbWUiLCJudWxsXyIsImVudW0iLCJpbnQiLCJvYmpEZXNjIiwiYml0c3RyIiwiYm1w'@;
put 'c3RyIiwiY2hhcnN0ciIsImdlbnN0ciIsImdyYXBoc3RyIiwiaWE1c3RyIiwiaXNvNjQ2c3RyIiwibnVtc3RyIiwib2N0c3RyIiwicHJpbnRzdHIiLCJ0NjFzdHIiLCJ1bmlzdHIiLCJ1dGY4c3RyIiwidmlkZW9zdHIiXSxCPVsia2V5Iiwib2JqIiwidXNlIiwib3B0aW9uYWwiLCJleHBsaWNp'@;
put 'dCIsImltcGxpY2l0IiwiZGVmIiwiY2hvaWNlIiwiYW55IiwiY29udGFpbnMiXS5jb25jYXQoSCk7ZnVuY3Rpb24gSyhJLFIsRSl7Y29uc3Qgej17fTt0aGlzLl9iYXNlU3RhdGU9eix6Lm5hbWU9RSx6LmVuYz1JLHoucGFyZW50PVJ8fG51bGwsei5jaGlsZHJlbj1udWxsLHoudGFnPW51bGws'@;
put 'ei5hcmdzPW51bGwsei5yZXZlcnNlQXJncz1udWxsLHouY2hvaWNlPW51bGwsei5vcHRpb25hbD0hMSx6LmFueT0hMSx6Lm9iaj0hMSx6LnVzZT1udWxsLHoudXNlRGVjb2Rlcj1udWxsLHoua2V5PW51bGwsei5kZWZhdWx0PW51bGwsei5leHBsaWNpdD1udWxsLHouaW1wbGljaXQ9bnVsbCx6'@;
put 'LmNvbnRhaW5zPW51bGwsei5wYXJlbnR8fCh6LmNoaWxkcmVuPVtdLHRoaXMuX3dyYXAoKSl9V2UuZXhwb3J0cz1LO2NvbnN0IEo9WyJlbmMiLCJwYXJlbnQiLCJjaGlsZHJlbiIsInRhZyIsImFyZ3MiLCJyZXZlcnNlQXJncyIsImNob2ljZSIsIm9wdGlvbmFsIiwiYW55Iiwib2JqIiwidXNl'@;
put 'IiwiYWx0ZXJlZFVzZSIsImtleSIsImRlZmF1bHQiLCJleHBsaWNpdCIsImltcGxpY2l0IiwiY29udGFpbnMiXTtLLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe2NvbnN0IFI9dGhpcy5fYmFzZVN0YXRlLEU9e307Si5mb3JFYWNoKGZ1bmN0aW9uKGope0Vbal09UltqXX0pO2NvbnN0IHo9'@;
put 'bmV3IHRoaXMuY29uc3RydWN0b3IoRS5wYXJlbnQpO3JldHVybiB6Ll9iYXNlU3RhdGU9RSx6fSxLLnByb3RvdHlwZS5fd3JhcD1mdW5jdGlvbigpe2NvbnN0IFI9dGhpcy5fYmFzZVN0YXRlO0IuZm9yRWFjaChmdW5jdGlvbihFKXt0aGlzW0VdPWZ1bmN0aW9uKCl7Y29uc3Qgaj1uZXcgdGhp'@;
put 'cy5jb25zdHJ1Y3Rvcih0aGlzKTtyZXR1cm4gUi5jaGlsZHJlbi5wdXNoKGopLGpbRV0uYXBwbHkoaixhcmd1bWVudHMpfX0sdGhpcyl9LEsucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKFIpe2NvbnN0IEU9dGhpcy5fYmFzZVN0YXRlO2hlKG51bGw9PT1FLnBhcmVudCksUi5jYWxsKHRoaXMp'@;
put 'LEUuY2hpbGRyZW49RS5jaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24oeil7cmV0dXJuIHouX2Jhc2VTdGF0ZS5wYXJlbnQ9PT10aGlzfSx0aGlzKSxoZS5lcXVhbChFLmNoaWxkcmVuLmxlbmd0aCwxLCJSb290IG5vZGUgY2FuIGhhdmUgb25seSBvbmUgY2hpbGQiKX0sSy5wcm90b3R5cGUuX3Vz'@;
put 'ZUFyZ3M9ZnVuY3Rpb24oUil7Y29uc3QgRT10aGlzLl9iYXNlU3RhdGUsej1SLmZpbHRlcihmdW5jdGlvbihqKXtyZXR1cm4gaiBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3J9LHRoaXMpO1I9Ui5maWx0ZXIoZnVuY3Rpb24oail7cmV0dXJuIShqIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1'@;
put 'Y3Rvcil9LHRoaXMpLDAhPT16Lmxlbmd0aCYmKGhlKG51bGw9PT1FLmNoaWxkcmVuKSxFLmNoaWxkcmVuPXosei5mb3JFYWNoKGZ1bmN0aW9uKGope2ouX2Jhc2VTdGF0ZS5wYXJlbnQ9dGhpc30sdGhpcykpLDAhPT1SLmxlbmd0aCYmKGhlKG51bGw9PT1FLmFyZ3MpLEUuYXJncz1SLEUucmV2'@;
put 'ZXJzZUFyZ3M9Ui5tYXAoZnVuY3Rpb24oail7aWYoIm9iamVjdCIhPXR5cGVvZiBqfHxqLmNvbnN0cnVjdG9yIT09T2JqZWN0KXJldHVybiBqO2NvbnN0IFY9e307cmV0dXJuIE9iamVjdC5rZXlzKGopLmZvckVhY2goZnVuY3Rpb24oRyl7Rz09KDB8RykmJihHfD0wKSxWW2pbR11dPUd9KSxW'@;
put 'fSkpfSxbIl9wZWVrVGFnIiwiX2RlY29kZVRhZyIsIl91c2UiLCJfZGVjb2RlU3RyIiwiX2RlY29kZU9iamlkIiwiX2RlY29kZVRpbWUiLCJfZGVjb2RlTnVsbCIsIl9kZWNvZGVJbnQiLCJfZGVjb2RlQm9vbCIsIl9kZWNvZGVMaXN0IiwiX2VuY29kZUNvbXBvc2l0ZSIsIl9lbmNvZGVTdHIi'@;
put 'LCJfZW5jb2RlT2JqaWQiLCJfZW5jb2RlVGltZSIsIl9lbmNvZGVOdWxsIiwiX2VuY29kZUludCIsIl9lbmNvZGVCb29sIl0uZm9yRWFjaChmdW5jdGlvbihJKXtLLnByb3RvdHlwZVtJXT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihJKyIgbm90IGltcGxlbWVudGVkIGZvciBlbmNvZGlu'@;
put 'ZzogIit0aGlzLl9iYXNlU3RhdGUuZW5jKX19KSxILmZvckVhY2goZnVuY3Rpb24oSSl7Sy5wcm90b3R5cGVbSV09ZnVuY3Rpb24oKXtjb25zdCBFPXRoaXMuX2Jhc2VTdGF0ZSx6PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIGhlKG51bGw9PT1FLnRhZyks'@;
put 'RS50YWc9SSx0aGlzLl91c2VBcmdzKHopLHRoaXN9fSksSy5wcm90b3R5cGUudXNlPWZ1bmN0aW9uKFIpe2hlKFIpO2NvbnN0IEU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBoZShudWxsPT09RS51c2UpLEUudXNlPVIsdGhpc30sSy5wcm90b3R5cGUub3B0aW9uYWw9ZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gdGhpcy5fYmFzZVN0YXRlLm9wdGlvbmFsPSEwLHRoaXN9LEsucHJvdG90eXBlLmRlZj1mdW5jdGlvbihSKXtjb25zdCBFPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gaGUobnVsbD09PUUuZGVmYXVsdCksRS5kZWZhdWx0PVIsRS5vcHRpb25hbD0hMCx0aGlzfSxLLnByb3RvdHlwZS5leHBs'@;
put 'aWNpdD1mdW5jdGlvbihSKXtjb25zdCBFPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gaGUobnVsbD09PUUuZXhwbGljaXQmJm51bGw9PT1FLmltcGxpY2l0KSxFLmV4cGxpY2l0PVIsdGhpc30sSy5wcm90b3R5cGUuaW1wbGljaXQ9ZnVuY3Rpb24oUil7Y29uc3QgRT10aGlzLl9iYXNlU3RhdGU7'@;
put 'cmV0dXJuIGhlKG51bGw9PT1FLmV4cGxpY2l0JiZudWxsPT09RS5pbXBsaWNpdCksRS5pbXBsaWNpdD1SLHRoaXN9LEsucHJvdG90eXBlLm9iaj1mdW5jdGlvbigpe2NvbnN0IFI9dGhpcy5fYmFzZVN0YXRlLEU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4g'@;
put 'Ui5vYmo9ITAsMCE9PUUubGVuZ3RoJiZ0aGlzLl91c2VBcmdzKEUpLHRoaXN9LEsucHJvdG90eXBlLmtleT1mdW5jdGlvbihSKXtjb25zdCBFPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gaGUobnVsbD09PUUua2V5KSxFLmtleT1SLHRoaXN9LEsucHJvdG90eXBlLmFueT1mdW5jdGlvbigpe3Jl'@;
put 'dHVybiB0aGlzLl9iYXNlU3RhdGUuYW55PSEwLHRoaXN9LEsucHJvdG90eXBlLmNob2ljZT1mdW5jdGlvbihSKXtjb25zdCBFPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gaGUobnVsbD09PUUuY2hvaWNlKSxFLmNob2ljZT1SLHRoaXMuX3VzZUFyZ3MoT2JqZWN0LmtleXMoUikubWFwKGZ1bmN0'@;
put 'aW9uKHope3JldHVybiBSW3pdfSkpLHRoaXN9LEsucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKFIpe2NvbnN0IEU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBoZShudWxsPT09RS51c2UpLEUuY29udGFpbnM9Uix0aGlzfSxLLnByb3RvdHlwZS5fZGVjb2RlPWZ1bmN0aW9uKFIsRSl7Y29u'@;
put 'c3Qgej10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PXoucGFyZW50KXJldHVybiBSLndyYXBSZXN1bHQoei5jaGlsZHJlblswXS5fZGVjb2RlKFIsRSkpO2xldCBXLGo9ei5kZWZhdWx0LFY9ITAsRz1udWxsO2lmKG51bGwhPT16LmtleSYmKEc9Ui5lbnRlcktleSh6LmtleSkpLHoub3B0aW9u'@;
put 'YWwpe2xldCBVPW51bGw7aWYobnVsbCE9PXouZXhwbGljaXQ/VT16LmV4cGxpY2l0Om51bGwhPT16LmltcGxpY2l0P1U9ei5pbXBsaWNpdDpudWxsIT09ei50YWcmJihVPXoudGFnKSxudWxsIT09VXx8ei5hbnkpe2lmKFY9dGhpcy5fcGVla1RhZyhSLFUsei5hbnkpLFIuaXNFcnJvcihWKSly'@;
put 'ZXR1cm4gVn1lbHNle2NvbnN0IHE9Ui5zYXZlKCk7dHJ5e251bGw9PT16LmNob2ljZT90aGlzLl9kZWNvZGVHZW5lcmljKHoudGFnLFIsRSk6dGhpcy5fZGVjb2RlQ2hvaWNlKFIsRSksVj0hMH1jYXRjaHtWPSExfVIucmVzdG9yZShxKX19aWYoei5vYmomJlYmJihXPVIuZW50ZXJPYmplY3Qo'@;
put 'KSksVil7aWYobnVsbCE9PXouZXhwbGljaXQpe2NvbnN0IHE9dGhpcy5fZGVjb2RlVGFnKFIsei5leHBsaWNpdCk7aWYoUi5pc0Vycm9yKHEpKXJldHVybiBxO1I9cX1jb25zdCBVPVIub2Zmc2V0O2lmKG51bGw9PT16LnVzZSYmbnVsbD09PXouY2hvaWNlKXtsZXQgcTt6LmFueSYmKHE9Ui5z'@;
put 'YXZlKCkpO2NvbnN0IHRlPXRoaXMuX2RlY29kZVRhZyhSLG51bGwhPT16LmltcGxpY2l0P3ouaW1wbGljaXQ6ei50YWcsei5hbnkpO2lmKFIuaXNFcnJvcih0ZSkpcmV0dXJuIHRlO3ouYW55P2o9Ui5yYXcocSk6Uj10ZX1pZihFJiZFLnRyYWNrJiZudWxsIT09ei50YWcmJkUudHJhY2soUi5w'@;
put 'YXRoKCksVSxSLmxlbmd0aCwidGFnZ2VkIiksRSYmRS50cmFjayYmbnVsbCE9PXoudGFnJiZFLnRyYWNrKFIucGF0aCgpLFIub2Zmc2V0LFIubGVuZ3RoLCJjb250ZW50Iiksei5hbnl8fChqPW51bGw9PT16LmNob2ljZT90aGlzLl9kZWNvZGVHZW5lcmljKHoudGFnLFIsRSk6dGhpcy5fZGVj'@;
put 'b2RlQ2hvaWNlKFIsRSkpLFIuaXNFcnJvcihqKSlyZXR1cm4gajtpZighei5hbnkmJm51bGw9PT16LmNob2ljZSYmbnVsbCE9PXouY2hpbGRyZW4mJnouY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbih0ZSl7dGUuX2RlY29kZShSLEUpfSksei5jb250YWlucyYmKCJvY3RzdHIiPT09ei50YWd8'@;
put 'fCJiaXRzdHIiPT09ei50YWcpKXtjb25zdCBxPW5ldyB2KGopO2o9dGhpcy5fZ2V0VXNlKHouY29udGFpbnMsUi5fcmVwb3J0ZXJTdGF0ZS5vYmopLl9kZWNvZGUocSxFKX19cmV0dXJuIHoub2JqJiZWJiYoaj1SLmxlYXZlT2JqZWN0KFcpKSxudWxsPT09ei5rZXl8fG51bGw9PT1qJiYhMCE9'@;
put 'PVY/bnVsbCE9PUcmJlIuZXhpdEtleShHKTpSLmxlYXZlS2V5KEcsei5rZXksaiksan0sSy5wcm90b3R5cGUuX2RlY29kZUdlbmVyaWM9ZnVuY3Rpb24oUixFLHope2NvbnN0IGo9dGhpcy5fYmFzZVN0YXRlO3JldHVybiJzZXEiPT09Unx8InNldCI9PT1SP251bGw6InNlcW9mIj09PVJ8fCJz'@;
put 'ZXRvZiI9PT1SP3RoaXMuX2RlY29kZUxpc3QoRSxSLGouYXJnc1swXSx6KTovc3RyJC8udGVzdChSKT90aGlzLl9kZWNvZGVTdHIoRSxSLHopOiJvYmppZCI9PT1SJiZqLmFyZ3M/dGhpcy5fZGVjb2RlT2JqaWQoRSxqLmFyZ3NbMF0sai5hcmdzWzFdLHopOiJvYmppZCI9PT1SP3RoaXMuX2Rl'@;
put 'Y29kZU9iamlkKEUsbnVsbCxudWxsLHopOiJnZW50aW1lIj09PVJ8fCJ1dGN0aW1lIj09PVI/dGhpcy5fZGVjb2RlVGltZShFLFIseik6Im51bGxfIj09PVI/dGhpcy5fZGVjb2RlTnVsbChFLHopOiJib29sIj09PVI/dGhpcy5fZGVjb2RlQm9vbChFLHopOiJvYmpEZXNjIj09PVI/dGhpcy5f'@;
put 'ZGVjb2RlU3RyKEUsUix6KToiaW50Ij09PVJ8fCJlbnVtIj09PVI/dGhpcy5fZGVjb2RlSW50KEUsai5hcmdzJiZqLmFyZ3NbMF0seik6bnVsbCE9PWoudXNlP3RoaXMuX2dldFVzZShqLnVzZSxFLl9yZXBvcnRlclN0YXRlLm9iaikuX2RlY29kZShFLHopOkUuZXJyb3IoInVua25vd24gdGFn'@;
put 'OiAiK1IpfSxLLnByb3RvdHlwZS5fZ2V0VXNlPWZ1bmN0aW9uKFIsRSl7Y29uc3Qgej10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIHoudXNlRGVjb2Rlcj10aGlzLl91c2UoUixFKSxoZShudWxsPT09ei51c2VEZWNvZGVyLl9iYXNlU3RhdGUucGFyZW50KSx6LnVzZURlY29kZXI9ei51c2VEZWNv'@;
put 'ZGVyLl9iYXNlU3RhdGUuY2hpbGRyZW5bMF0sei5pbXBsaWNpdCE9PXoudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmltcGxpY2l0JiYoei51c2VEZWNvZGVyPXoudXNlRGVjb2Rlci5jbG9uZSgpLHoudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmltcGxpY2l0PXouaW1wbGljaXQpLHoudXNlRGVjb2Rl'@;
put 'cn0sSy5wcm90b3R5cGUuX2RlY29kZUNob2ljZT1mdW5jdGlvbihSLEUpe2NvbnN0IHo9dGhpcy5fYmFzZVN0YXRlO2xldCBqPW51bGwsVj0hMTtyZXR1cm4gT2JqZWN0LmtleXMoei5jaG9pY2UpLnNvbWUoZnVuY3Rpb24oRyl7Y29uc3QgVz1SLnNhdmUoKSxVPXouY2hvaWNlW0ddO3RyeXtj'@;
put 'b25zdCBxPVUuX2RlY29kZShSLEUpO2lmKFIuaXNFcnJvcihxKSlyZXR1cm4hMTtqPXt0eXBlOkcsdmFsdWU6cX0sVj0hMH1jYXRjaHtyZXR1cm4gUi5yZXN0b3JlKFcpLCExfXJldHVybiEwfSx0aGlzKSxWP2o6Ui5lcnJvcigiQ2hvaWNlIG5vdCBtYXRjaGVkIil9LEsucHJvdG90eXBlLl9j'@;
put 'cmVhdGVFbmNvZGVyQnVmZmVyPWZ1bmN0aW9uKFIpe3JldHVybiBuZXcgayhSLHRoaXMucmVwb3J0ZXIpfSxLLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKFIsRSx6KXtjb25zdCBqPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsIT09ai5kZWZhdWx0JiZqLmRlZmF1bHQ9PT1SKXJldHVybjtj'@;
put 'b25zdCBWPXRoaXMuX2VuY29kZVZhbHVlKFIsRSx6KTtyZXR1cm4gdm9pZCAwPT09Vnx8dGhpcy5fc2tpcERlZmF1bHQoVixFLHopP3ZvaWQgMDpWfSxLLnByb3RvdHlwZS5fZW5jb2RlVmFsdWU9ZnVuY3Rpb24oUixFLHope2NvbnN0IGo9dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1qLnBh'@;
put 'cmVudClyZXR1cm4gai5jaGlsZHJlblswXS5fZW5jb2RlKFIsRXx8bmV3IHNlKTtsZXQgVj1udWxsO2lmKHRoaXMucmVwb3J0ZXI9RSxqLm9wdGlvbmFsJiZ2b2lkIDA9PT1SKXtpZihudWxsPT09ai5kZWZhdWx0KXJldHVybjtSPWouZGVmYXVsdH1sZXQgRz1udWxsLFc9ITE7aWYoai5hbnkp'@;
put 'Vj10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFIpO2Vsc2UgaWYoai5jaG9pY2UpVj10aGlzLl9lbmNvZGVDaG9pY2UoUixFKTtlbHNlIGlmKGouY29udGFpbnMpRz10aGlzLl9nZXRVc2Uoai5jb250YWlucyx6KS5fZW5jb2RlKFIsRSksVz0hMDtlbHNlIGlmKGouY2hpbGRyZW4pRz1qLmNo'@;
put 'aWxkcmVuLm1hcChmdW5jdGlvbihVKXtpZigibnVsbF8iPT09VS5fYmFzZVN0YXRlLnRhZylyZXR1cm4gVS5fZW5jb2RlKG51bGwsRSxSKTtpZihudWxsPT09VS5fYmFzZVN0YXRlLmtleSlyZXR1cm4gRS5lcnJvcigiQ2hpbGQgc2hvdWxkIGhhdmUgYSBrZXkiKTtjb25zdCBxPUUuZW50ZXJL'@;
put 'ZXkoVS5fYmFzZVN0YXRlLmtleSk7aWYoIm9iamVjdCIhPXR5cGVvZiBSKXJldHVybiBFLmVycm9yKCJDaGlsZCBleHBlY3RlZCwgYnV0IGlucHV0IGlzIG5vdCBvYmplY3QiKTtjb25zdCB0ZT1VLl9lbmNvZGUoUltVLl9iYXNlU3RhdGUua2V5XSxFLFIpO3JldHVybiBFLmxlYXZlS2V5KHEp'@;
put 'LHRlfSx0aGlzKS5maWx0ZXIoZnVuY3Rpb24oVSl7cmV0dXJuIFV9KSxHPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoRyk7ZWxzZSBpZigic2Vxb2YiPT09ai50YWd8fCJzZXRvZiI9PT1qLnRhZyl7aWYoIWouYXJnc3x8MSE9PWouYXJncy5sZW5ndGgpcmV0dXJuIEUuZXJyb3IoIlRvbyBt'@;
put 'YW55IGFyZ3MgZm9yIDogIitqLnRhZyk7aWYoIUFycmF5LmlzQXJyYXkoUikpcmV0dXJuIEUuZXJyb3IoInNlcW9mL3NldG9mLCBidXQgZGF0YSBpcyBub3QgQXJyYXkiKTtjb25zdCBVPXRoaXMuY2xvbmUoKTtVLl9iYXNlU3RhdGUuaW1wbGljaXQ9bnVsbCxHPXRoaXMuX2NyZWF0ZUVuY29k'@;
put 'ZXJCdWZmZXIoUi5tYXAoZnVuY3Rpb24ocSl7cmV0dXJuIHRoaXMuX2dldFVzZSh0aGlzLl9iYXNlU3RhdGUuYXJnc1swXSxSKS5fZW5jb2RlKHEsRSl9LFUpKX1lbHNlIG51bGwhPT1qLnVzZT9WPXRoaXMuX2dldFVzZShqLnVzZSx6KS5fZW5jb2RlKFIsRSk6KEc9dGhpcy5fZW5jb2RlUHJp'@;
put 'bWl0aXZlKGoudGFnLFIpLFc9ITApO2lmKCFqLmFueSYmbnVsbD09PWouY2hvaWNlKXtjb25zdCBVPW51bGwhPT1qLmltcGxpY2l0P2ouaW1wbGljaXQ6ai50YWcscT1udWxsPT09ai5pbXBsaWNpdD8idW5pdmVyc2FsIjoiY29udGV4dCI7bnVsbD09PVU/bnVsbD09PWoudXNlJiZFLmVycm9y'@;
put 'KCJUYWcgY291bGQgYmUgb21pdHRlZCBvbmx5IGZvciAudXNlKCkiKTpudWxsPT09ai51c2UmJihWPXRoaXMuX2VuY29kZUNvbXBvc2l0ZShVLFcscSxHKSl9cmV0dXJuIG51bGwhPT1qLmV4cGxpY2l0JiYoVj10aGlzLl9lbmNvZGVDb21wb3NpdGUoai5leHBsaWNpdCwhMSwiY29udGV4dCIs'@;
put 'VikpLFZ9LEsucHJvdG90eXBlLl9lbmNvZGVDaG9pY2U9ZnVuY3Rpb24oUixFKXtjb25zdCB6PXRoaXMuX2Jhc2VTdGF0ZSxqPXouY2hvaWNlW1IudHlwZV07cmV0dXJuIGp8fGhlKCExLFIudHlwZSsiIG5vdCBmb3VuZCBpbiAiK0pTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKHouY2hvaWNl'@;
put 'KSkpLGouX2VuY29kZShSLnZhbHVlLEUpfSxLLnByb3RvdHlwZS5fZW5jb2RlUHJpbWl0aXZlPWZ1bmN0aW9uKFIsRSl7Y29uc3Qgej10aGlzLl9iYXNlU3RhdGU7aWYoL3N0ciQvLnRlc3QoUikpcmV0dXJuIHRoaXMuX2VuY29kZVN0cihFLFIpO2lmKCJvYmppZCI9PT1SJiZ6LmFyZ3MpcmV0'@;
put 'dXJuIHRoaXMuX2VuY29kZU9iamlkKEUsei5yZXZlcnNlQXJnc1swXSx6LmFyZ3NbMV0pO2lmKCJvYmppZCI9PT1SKXJldHVybiB0aGlzLl9lbmNvZGVPYmppZChFLG51bGwsbnVsbCk7aWYoImdlbnRpbWUiPT09Unx8InV0Y3RpbWUiPT09UilyZXR1cm4gdGhpcy5fZW5jb2RlVGltZShFLFIp'@;
put 'O2lmKCJudWxsXyI9PT1SKXJldHVybiB0aGlzLl9lbmNvZGVOdWxsKCk7aWYoImludCI9PT1SfHwiZW51bSI9PT1SKXJldHVybiB0aGlzLl9lbmNvZGVJbnQoRSx6LmFyZ3MmJnoucmV2ZXJzZUFyZ3NbMF0pO2lmKCJib29sIj09PVIpcmV0dXJuIHRoaXMuX2VuY29kZUJvb2woRSk7aWYoIm9i'@;
put 'akRlc2MiPT09UilyZXR1cm4gdGhpcy5fZW5jb2RlU3RyKEUsUik7dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCB0YWc6ICIrUil9LEsucHJvdG90eXBlLl9pc051bXN0cj1mdW5jdGlvbihSKXtyZXR1cm4vXlswLTkgXSokLy50ZXN0KFIpfSxLLnByb3RvdHlwZS5faXNQcmludHN0cj1m'@;
put 'dW5jdGlvbihSKXtyZXR1cm4vXltBLVphLXowLTkgJygpKywtLi86PT9dKiQvLnRlc3QoUil9fSw5NTY4NDooV2UsemUsVCk9PnsidXNlIHN0cmljdCI7Y29uc3Qgc2U9VCg2NjY5OCk7ZnVuY3Rpb24gayhoZSl7dGhpcy5fcmVwb3J0ZXJTdGF0ZT17b2JqOm51bGwscGF0aDpbXSxvcHRpb25z'@;
put 'OmhlfHx7fSxlcnJvcnM6W119fWZ1bmN0aW9uIHYoaGUsSCl7dGhpcy5wYXRoPWhlLHRoaXMucmV0aHJvdyhIKX16ZS5iPWssay5wcm90b3R5cGUuaXNFcnJvcj1mdW5jdGlvbihIKXtyZXR1cm4gSCBpbnN0YW5jZW9mIHZ9LGsucHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24oKXtjb25zdCBIPXRo'@;
put 'aXMuX3JlcG9ydGVyU3RhdGU7cmV0dXJue29iajpILm9iaixwYXRoTGVuOkgucGF0aC5sZW5ndGh9fSxrLnByb3RvdHlwZS5yZXN0b3JlPWZ1bmN0aW9uKEgpe2NvbnN0IEI9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtCLm9iaj1ILm9iaixCLnBhdGg9Qi5wYXRoLnNsaWNlKDAsSC5wYXRoTGVuKX0s'@;
put 'ay5wcm90b3R5cGUuZW50ZXJLZXk9ZnVuY3Rpb24oSCl7cmV0dXJuIHRoaXMuX3JlcG9ydGVyU3RhdGUucGF0aC5wdXNoKEgpfSxrLnByb3RvdHlwZS5leGl0S2V5PWZ1bmN0aW9uKEgpe2NvbnN0IEI9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtCLnBhdGg9Qi5wYXRoLnNsaWNlKDAsSC0xKX0say5w'@;
put 'cm90b3R5cGUubGVhdmVLZXk9ZnVuY3Rpb24oSCxCLEwpe2NvbnN0IEs9dGhpcy5fcmVwb3J0ZXJTdGF0ZTt0aGlzLmV4aXRLZXkoSCksbnVsbCE9PUsub2JqJiYoSy5vYmpbQl09TCl9LGsucHJvdG90eXBlLnBhdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVwb3J0ZXJTdGF0ZS5wYXRo'@;
put 'LmpvaW4oIi8iKX0say5wcm90b3R5cGUuZW50ZXJPYmplY3Q9ZnVuY3Rpb24oKXtjb25zdCBIPXRoaXMuX3JlcG9ydGVyU3RhdGUsQj1ILm9iajtyZXR1cm4gSC5vYmo9e30sQn0say5wcm90b3R5cGUubGVhdmVPYmplY3Q9ZnVuY3Rpb24oSCl7Y29uc3QgQj10aGlzLl9yZXBvcnRlclN0YXRl'@;
put 'LEw9Qi5vYmo7cmV0dXJuIEIub2JqPUgsTH0say5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24oSCl7bGV0IEI7Y29uc3QgTD10aGlzLl9yZXBvcnRlclN0YXRlLEs9SCBpbnN0YW5jZW9mIHY7aWYoQj1LP0g6bmV3IHYoTC5wYXRoLm1hcChmdW5jdGlvbihKKXtyZXR1cm4iWyIrSlNPTi5zdHJp'@;
put 'bmdpZnkoSikrIl0ifSkuam9pbigiIiksSC5tZXNzYWdlfHxILEguc3RhY2spLCFMLm9wdGlvbnMucGFydGlhbCl0aHJvdyBCO3JldHVybiBLfHxMLmVycm9ycy5wdXNoKEIpLEJ9LGsucHJvdG90eXBlLndyYXBSZXN1bHQ9ZnVuY3Rpb24oSCl7Y29uc3QgQj10aGlzLl9yZXBvcnRlclN0YXRl'@;
put 'O3JldHVybiBCLm9wdGlvbnMucGFydGlhbD97cmVzdWx0OnRoaXMuaXNFcnJvcihIKT9udWxsOkgsZXJyb3JzOkIuZXJyb3JzfTpIfSxzZSh2LEVycm9yKSx2LnByb3RvdHlwZS5yZXRocm93PWZ1bmN0aW9uKEgpe2lmKHRoaXMubWVzc2FnZT1IKyIgYXQ6ICIrKHRoaXMucGF0aHx8IihzaGFs'@;
put 'bG93KSIpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlJiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHYpLCF0aGlzLnN0YWNrKXRyeXt0aHJvdyBuZXcgRXJyb3IodGhpcy5tZXNzYWdlKX1jYXRjaChCKXt0aGlzLnN0YWNrPUIuc3RhY2t9cmV0dXJuIHRoaXN9fSw2NTA4NjooV2UsemUp'@;
put 'PT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIFQoc2Upe2NvbnN0IGs9e307cmV0dXJuIE9iamVjdC5rZXlzKHNlKS5mb3JFYWNoKGZ1bmN0aW9uKHYpeygwfHYpPT12JiYodnw9MCksa1tzZVt2XV09dn0pLGt9emUudGFnQ2xhc3M9ezA6InVuaXZlcnNhbCIsMToiYXBwbGljYXRpb24iLDI6ImNv'@;
put 'bnRleHQiLDM6InByaXZhdGUifSx6ZS50YWdDbGFzc0J5TmFtZT1UKHplLnRhZ0NsYXNzKSx6ZS50YWc9ezA6ImVuZCIsMToiYm9vbCIsMjoiaW50IiwzOiJiaXRzdHIiLDQ6Im9jdHN0ciIsNToibnVsbF8iLDY6Im9iamlkIiw3OiJvYmpEZXNjIiw4OiJleHRlcm5hbCIsOToicmVhbCIsMTA6'@;
put 'ImVudW0iLDExOiJlbWJlZCIsMTI6InV0ZjhzdHIiLDEzOiJyZWxhdGl2ZU9pZCIsMTY6InNlcSIsMTc6InNldCIsMTg6Im51bXN0ciIsMTk6InByaW50c3RyIiwyMDoidDYxc3RyIiwyMToidmlkZW9zdHIiLDIyOiJpYTVzdHIiLDIzOiJ1dGN0aW1lIiwyNDoiZ2VudGltZSIsMjU6ImdyYXBo'@;
put 'c3RyIiwyNjoiaXNvNjQ2c3RyIiwyNzoiZ2Vuc3RyIiwyODoidW5pc3RyIiwyOToiY2hhcnN0ciIsMzA6ImJtcHN0ciJ9LHplLnRhZ0J5TmFtZT1UKHplLnRhZyl9LDQ0MTU1OihXZSx6ZSxUKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBzZT16ZTtzZS5fcmV2ZXJzZT1mdW5jdGlvbih2KXtjb25z'@;
put 'dCBoZT17fTtyZXR1cm4gT2JqZWN0LmtleXModikuZm9yRWFjaChmdW5jdGlvbihIKXsoMHxIKT09SCYmKEh8PTApLGhlW3ZbSF1dPUh9KSxoZX0sc2UuZGVyPVQoNjUwODYpfSw5NjgzNTooV2UsemUsVCk9PnsidXNlIHN0cmljdCI7Y29uc3Qgc2U9VCg2NjY5OCksaz1UKDUwNDcpLHY9VCg3'@;
put 'NTcyMCkuQyxoZT1UKDU4NTMzKSxIPVQoNjUwODYpO2Z1bmN0aW9uIEIoSSl7dGhpcy5lbmM9ImRlciIsdGhpcy5uYW1lPUkubmFtZSx0aGlzLmVudGl0eT1JLHRoaXMudHJlZT1uZXcgTCx0aGlzLnRyZWUuX2luaXQoSS5ib2R5KX1mdW5jdGlvbiBMKEkpe2hlLmNhbGwodGhpcywiZGVyIixJ'@;
put 'KX1mdW5jdGlvbiBLKEksUil7bGV0IEU9SS5yZWFkVUludDgoUik7aWYoSS5pc0Vycm9yKEUpKXJldHVybiBFO2NvbnN0IHo9SC50YWdDbGFzc1tFPj42XSxqPTA9PSgzMiZFKTtpZigzMT09KDMxJkUpKXtsZXQgRz1FO2ZvcihFPTA7MTI4PT0oMTI4JkcpOyl7aWYoRz1JLnJlYWRVSW50OChS'@;
put 'KSxJLmlzRXJyb3IoRykpcmV0dXJuIEc7RTw8PTcsRXw9MTI3Jkd9fWVsc2UgRSY9MzE7cmV0dXJue2Nsczp6LHByaW1pdGl2ZTpqLHRhZzpFLHRhZ1N0cjpILnRhZ1tFXX19ZnVuY3Rpb24gSihJLFIsRSl7bGV0IHo9SS5yZWFkVUludDgoRSk7aWYoSS5pc0Vycm9yKHopKXJldHVybiB6O2lm'@;
put 'KCFSJiYxMjg9PT16KXJldHVybiBudWxsO2lmKCEoMTI4JnopKXJldHVybiB6O2NvbnN0IGo9MTI3Jno7aWYoaj40KXJldHVybiBJLmVycm9yKCJsZW5ndGggb2N0ZWN0IGlzIHRvbyBsb25nIik7ej0wO2ZvcihsZXQgVj0wO1Y8ajtWKyspe3o8PD04O2NvbnN0IEc9SS5yZWFkVUludDgoRSk7'@;
put 'aWYoSS5pc0Vycm9yKEcpKXJldHVybiBHO3p8PUd9cmV0dXJuIHp9V2UuZXhwb3J0cz1CLEIucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbihSLEUpe3JldHVybiB2LmlzRGVjb2RlckJ1ZmZlcihSKXx8KFI9bmV3IHYoUixFKSksdGhpcy50cmVlLl9kZWNvZGUoUixFKX0sc2UoTCxoZSksTC5w'@;
put 'cm90b3R5cGUuX3BlZWtUYWc9ZnVuY3Rpb24oUixFLHope2lmKFIuaXNFbXB0eSgpKXJldHVybiExO2NvbnN0IGo9Ui5zYXZlKCksVj1LKFIsJ0ZhaWxlZCB0byBwZWVrIHRhZzogIicrRSsnIicpO3JldHVybiBSLmlzRXJyb3IoVik/VjooUi5yZXN0b3JlKGopLFYudGFnPT09RXx8Vi50YWdT'@;
put 'dHI9PT1FfHxWLnRhZ1N0cisib2YiPT09RXx8eil9LEwucHJvdG90eXBlLl9kZWNvZGVUYWc9ZnVuY3Rpb24oUixFLHope2NvbnN0IGo9SyhSLCdGYWlsZWQgdG8gZGVjb2RlIHRhZyBvZiAiJytFKyciJyk7aWYoUi5pc0Vycm9yKGopKXJldHVybiBqO2xldCBWPUooUixqLnByaW1pdGl2ZSwn'@;
put 'RmFpbGVkIHRvIGdldCBsZW5ndGggb2YgIicrRSsnIicpO2lmKFIuaXNFcnJvcihWKSlyZXR1cm4gVjtpZigheiYmai50YWchPT1FJiZqLnRhZ1N0ciE9PUUmJmoudGFnU3RyKyJvZiIhPT1FKXJldHVybiBSLmVycm9yKCdGYWlsZWQgdG8gbWF0Y2ggdGFnOiAiJytFKyciJyk7aWYoai5wcmlt'@;
put 'aXRpdmV8fG51bGwhPT1WKXJldHVybiBSLnNraXAoViwnRmFpbGVkIHRvIG1hdGNoIGJvZHkgb2Y6ICInK0UrJyInKTtjb25zdCBHPVIuc2F2ZSgpLFc9dGhpcy5fc2tpcFVudGlsRW5kKFIsJ0ZhaWxlZCB0byBza2lwIGluZGVmaW5pdGUgbGVuZ3RoIGJvZHk6ICInK3RoaXMudGFnKyciJyk7'@;
put 'cmV0dXJuIFIuaXNFcnJvcihXKT9XOihWPVIub2Zmc2V0LUcub2Zmc2V0LFIucmVzdG9yZShHKSxSLnNraXAoViwnRmFpbGVkIHRvIG1hdGNoIGJvZHkgb2Y6ICInK0UrJyInKSl9LEwucHJvdG90eXBlLl9za2lwVW50aWxFbmQ9ZnVuY3Rpb24oUixFKXtmb3IoOzspe2NvbnN0IHo9SyhSLEUp'@;
put 'O2lmKFIuaXNFcnJvcih6KSlyZXR1cm4gejtjb25zdCBqPUooUix6LnByaW1pdGl2ZSxFKTtpZihSLmlzRXJyb3IoaikpcmV0dXJuIGo7bGV0IFY7aWYoVj16LnByaW1pdGl2ZXx8bnVsbCE9PWo/Ui5za2lwKGopOnRoaXMuX3NraXBVbnRpbEVuZChSLEUpLFIuaXNFcnJvcihWKSlyZXR1cm4g'@;
put 'VjtpZigiZW5kIj09PXoudGFnU3RyKWJyZWFrfX0sTC5wcm90b3R5cGUuX2RlY29kZUxpc3Q9ZnVuY3Rpb24oUixFLHosail7Y29uc3QgVj1bXTtmb3IoOyFSLmlzRW1wdHkoKTspe2NvbnN0IEc9dGhpcy5fcGVla1RhZyhSLCJlbmQiKTtpZihSLmlzRXJyb3IoRykpcmV0dXJuIEc7Y29uc3Qg'@;
put 'Vz16LmRlY29kZShSLCJkZXIiLGopO2lmKFIuaXNFcnJvcihXKSYmRylicmVhaztWLnB1c2goVyl9cmV0dXJuIFZ9LEwucHJvdG90eXBlLl9kZWNvZGVTdHI9ZnVuY3Rpb24oUixFKXtpZigiYml0c3RyIj09PUUpe2NvbnN0IHo9Ui5yZWFkVUludDgoKTtyZXR1cm4gUi5pc0Vycm9yKHopP3o6'@;
put 'e3VudXNlZDp6LGRhdGE6Ui5yYXcoKX19aWYoImJtcHN0ciI9PT1FKXtjb25zdCB6PVIucmF3KCk7aWYoei5sZW5ndGglMj09MSlyZXR1cm4gUi5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IGJtcHN0ciBsZW5ndGggbWlzbWF0Y2giKTtsZXQgaj0iIjtmb3IobGV0IFY9MDtWPHou'@;
put 'bGVuZ3RoLzI7VisrKWorPVN0cmluZy5mcm9tQ2hhckNvZGUoei5yZWFkVUludDE2QkUoMipWKSk7cmV0dXJuIGp9aWYoIm51bXN0ciI9PT1FKXtjb25zdCB6PVIucmF3KCkudG9TdHJpbmcoImFzY2lpIik7cmV0dXJuIHRoaXMuX2lzTnVtc3RyKHopP3o6Ui5lcnJvcigiRGVjb2Rpbmcgb2Yg'@;
put 'c3RyaW5nIHR5cGU6IG51bXN0ciB1bnN1cHBvcnRlZCBjaGFyYWN0ZXJzIil9aWYoIm9jdHN0ciI9PT1FKXJldHVybiBSLnJhdygpO2lmKCJvYmpEZXNjIj09PUUpcmV0dXJuIFIucmF3KCk7aWYoInByaW50c3RyIj09PUUpe2NvbnN0IHo9Ui5yYXcoKS50b1N0cmluZygiYXNjaWkiKTtyZXR1'@;
put 'cm4gdGhpcy5faXNQcmludHN0cih6KT96OlIuZXJyb3IoIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiBwcmludHN0ciB1bnN1cHBvcnRlZCBjaGFyYWN0ZXJzIil9cmV0dXJuL3N0ciQvLnRlc3QoRSk/Ui5yYXcoKS50b1N0cmluZygpOlIuZXJyb3IoIkRlY29kaW5nIG9mIHN0cmluZyB0eXBl'@;
put 'OiAiK0UrIiB1bnN1cHBvcnRlZCIpfSxMLnByb3RvdHlwZS5fZGVjb2RlT2JqaWQ9ZnVuY3Rpb24oUixFLHope2xldCBqO2NvbnN0IFY9W107bGV0IEc9MCxXPTA7Zm9yKDshUi5pc0VtcHR5KCk7KVc9Ui5yZWFkVUludDgoKSxHPDw9NyxHfD0xMjcmVywxMjgmV3x8KFYucHVzaChHKSxHPTAp'@;
put 'O2lmKDEyOCZXJiZWLnB1c2goRyksaj16P1Y6W1ZbMF0vNDB8MCxWWzBdJTQwXS5jb25jYXQoVi5zbGljZSgxKSksRSl7bGV0IHRlPUVbai5qb2luKCIgIildO3ZvaWQgMD09PXRlJiYodGU9RVtqLmpvaW4oIi4iKV0pLHZvaWQgMCE9PXRlJiYoaj10ZSl9cmV0dXJuIGp9LEwucHJvdG90eXBl'@;
put 'Ll9kZWNvZGVUaW1lPWZ1bmN0aW9uKFIsRSl7Y29uc3Qgej1SLnJhdygpLnRvU3RyaW5nKCk7bGV0IGosVixHLFcsVSxxO2lmKCJnZW50aW1lIj09PUUpaj0wfHouc2xpY2UoMCw0KSxWPTB8ei5zbGljZSg0LDYpLEc9MHx6LnNsaWNlKDYsOCksVz0wfHouc2xpY2UoOCwxMCksVT0wfHouc2xp'@;
put 'Y2UoMTAsMTIpLHE9MHx6LnNsaWNlKDEyLDE0KTtlbHNle2lmKCJ1dGN0aW1lIiE9PUUpcmV0dXJuIFIuZXJyb3IoIkRlY29kaW5nICIrRSsiIHRpbWUgaXMgbm90IHN1cHBvcnRlZCB5ZXQiKTtqPTB8ei5zbGljZSgwLDIpLFY9MHx6LnNsaWNlKDIsNCksRz0wfHouc2xpY2UoNCw2KSxXPTB8'@;
put 'ei5zbGljZSg2LDgpLFU9MHx6LnNsaWNlKDgsMTApLHE9MHx6LnNsaWNlKDEwLDEyKSxqPWo8NzA/MmUzK2o6MTkwMCtqfXJldHVybiBEYXRlLlVUQyhqLFYtMSxHLFcsVSxxLDApfSxMLnByb3RvdHlwZS5fZGVjb2RlTnVsbD1mdW5jdGlvbigpe3JldHVybiBudWxsfSxMLnByb3RvdHlwZS5f'@;
put 'ZGVjb2RlQm9vbD1mdW5jdGlvbihSKXtjb25zdCBFPVIucmVhZFVJbnQ4KCk7cmV0dXJuIFIuaXNFcnJvcihFKT9FOjAhPT1FfSxMLnByb3RvdHlwZS5fZGVjb2RlSW50PWZ1bmN0aW9uKFIsRSl7Y29uc3Qgej1SLnJhdygpO2xldCBqPW5ldyBrKHopO3JldHVybiBFJiYoaj1FW2oudG9TdHJp'@;
put 'bmcoMTApXXx8aiksan0sTC5wcm90b3R5cGUuX3VzZT1mdW5jdGlvbihSLEUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBSJiYoUj1SKEUpKSxSLl9nZXREZWNvZGVyKCJkZXIiKS50cmVlfX0sNzEzMDE6KFdlLHplLFQpPT57InVzZSBzdHJpY3QiO2NvbnN0IHNlPXplO3NlLmRlcj1UKDk2'@;
put 'ODM1KSxzZS5wZW09VCgyMjA4KX0sMjIwODooV2UsemUsVCk9PnsidXNlIHN0cmljdCI7Y29uc3Qgc2U9VCg2NjY5OCksaz1UKDI0MTc5KS5CdWZmZXIsdj1UKDk2ODM1KTtmdW5jdGlvbiBoZShIKXt2LmNhbGwodGhpcyxIKSx0aGlzLmVuYz0icGVtIn1zZShoZSx2KSxXZS5leHBvcnRzPWhl'@;
put 'LGhlLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24oQixMKXtjb25zdCBLPUIudG9TdHJpbmcoKS5zcGxpdCgvW1xyXG5dKy9nKSxKPUwubGFiZWwudG9VcHBlckNhc2UoKSxJPS9eLS0tLS0oQkVHSU58RU5EKSAoW14tXSspLS0tLS0kLztsZXQgUj0tMSxFPS0xO2ZvcihsZXQgVj0wO1Y8Sy5s'@;
put 'ZW5ndGg7VisrKXtjb25zdCBHPUtbVl0ubWF0Y2goSSk7aWYobnVsbCE9PUcmJkdbMl09PT1KKXtpZigtMSE9PVIpe2lmKCJFTkQiIT09R1sxXSlicmVhaztFPVY7YnJlYWt9aWYoIkJFR0lOIiE9PUdbMV0pYnJlYWs7Uj1WfX1pZigtMT09PVJ8fC0xPT09RSl0aHJvdyBuZXcgRXJyb3IoIlBF'@;
put 'TSBzZWN0aW9uIG5vdCBmb3VuZCBmb3I6ICIrSik7Y29uc3Qgej1LLnNsaWNlKFIrMSxFKS5qb2luKCIiKTt6LnJlcGxhY2UoL1teYS16MC05Ky89XSsvZ2ksIiIpO2NvbnN0IGo9ay5mcm9tKHosImJhc2U2NCIpO3JldHVybiB2LnByb3RvdHlwZS5kZWNvZGUuY2FsbCh0aGlzLGosTCl9fSw2'@;
put 'OTEzMzooV2UsemUsVCk9PnsidXNlIHN0cmljdCI7Y29uc3Qgc2U9VCg2NjY5OCksaz1UKDI0MTc5KS5CdWZmZXIsdj1UKDU4NTMzKSxoZT1UKDY1MDg2KTtmdW5jdGlvbiBIKEope3RoaXMuZW5jPSJkZXIiLHRoaXMubmFtZT1KLm5hbWUsdGhpcy5lbnRpdHk9Six0aGlzLnRyZWU9bmV3IEIs'@;
put 'dGhpcy50cmVlLl9pbml0KEouYm9keSl9ZnVuY3Rpb24gQihKKXt2LmNhbGwodGhpcywiZGVyIixKKX1mdW5jdGlvbiBMKEope3JldHVybiBKPDEwPyIwIitKOkp9V2UuZXhwb3J0cz1ILEgucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbihJLFIpe3JldHVybiB0aGlzLnRyZWUuX2VuY29kZShJ'@;
put 'LFIpLmpvaW4oKX0sc2UoQix2KSxCLnByb3RvdHlwZS5fZW5jb2RlQ29tcG9zaXRlPWZ1bmN0aW9uKEksUixFLHope2NvbnN0IGo9ZnVuY3Rpb24gSyhKLEksUixFKXtsZXQgejtpZigic2Vxb2YiPT09Sj9KPSJzZXEiOiJzZXRvZiI9PT1KJiYoSj0ic2V0IiksaGUudGFnQnlOYW1lLmhhc093'@;
put 'blByb3BlcnR5KEopKXo9aGUudGFnQnlOYW1lW0pdO2Vsc2V7aWYoIm51bWJlciIhPXR5cGVvZiBKfHwoMHxKKSE9PUopcmV0dXJuIEUuZXJyb3IoIlVua25vd24gdGFnOiAiK0opO3o9Sn1yZXR1cm4gej49MzE/RS5lcnJvcigiTXVsdGktb2N0ZXQgdGFnIGVuY29kaW5nIHVuc3VwcG9ydGVk'@;
put 'Iik6KEl8fCh6fD0zMiksenw9aGUudGFnQ2xhc3NCeU5hbWVbUnx8InVuaXZlcnNhbCJdPDw2LHopfShJLFIsRSx0aGlzLnJlcG9ydGVyKTtpZih6Lmxlbmd0aDwxMjgpe2NvbnN0IFc9ay5hbGxvYygyKTtyZXR1cm4gV1swXT1qLFdbMV09ei5sZW5ndGgsdGhpcy5fY3JlYXRlRW5jb2RlckJ1'@;
put 'ZmZlcihbVyx6XSl9bGV0IFY9MTtmb3IobGV0IFc9ei5sZW5ndGg7Vz49MjU2O1c+Pj04KVYrKztjb25zdCBHPWsuYWxsb2MoMitWKTtHWzBdPWosR1sxXT0xMjh8Vjtmb3IobGV0IFc9MStWLFU9ei5sZW5ndGg7VT4wO1ctLSxVPj49OClHW1ddPTI1NSZVO3JldHVybiB0aGlzLl9jcmVhdGVF'@;
put 'bmNvZGVyQnVmZmVyKFtHLHpdKX0sQi5wcm90b3R5cGUuX2VuY29kZVN0cj1mdW5jdGlvbihJLFIpe2lmKCJiaXRzdHIiPT09UilyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbMHxJLnVudXNlZCxJLmRhdGFdKTtpZigiYm1wc3RyIj09PVIpe2NvbnN0IEU9ay5hbGxvYygyKkku'@;
put 'bGVuZ3RoKTtmb3IobGV0IHo9MDt6PEkubGVuZ3RoO3orKylFLndyaXRlVUludDE2QkUoSS5jaGFyQ29kZUF0KHopLDIqeik7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoRSl9cmV0dXJuIm51bXN0ciI9PT1SP3RoaXMuX2lzTnVtc3RyKEkpP3RoaXMuX2NyZWF0ZUVuY29kZXJC'@;
put 'dWZmZXIoSSk6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IG51bXN0ciBzdXBwb3J0cyBvbmx5IGRpZ2l0cyBhbmQgc3BhY2UiKToicHJpbnRzdHIiPT09Uj90aGlzLl9pc1ByaW50c3RyKEkpP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoSSk6dGhpcy5y'@;
put 'ZXBvcnRlci5lcnJvcigiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IHByaW50c3RyIHN1cHBvcnRzIG9ubHkgbGF0aW4gdXBwZXIgYW5kIGxvd2VyIGNhc2UgbGV0dGVycywgZGlnaXRzLCBzcGFjZSwgYXBvc3Ryb3BoZSwgbGVmdCBhbmQgcmlndGggcGFyZW50aGVzaXMsIHBsdXMgc2lnbiwg'@;
put 'Y29tbWEsIGh5cGhlbiwgZG90LCBzbGFzaCwgY29sb24sIGVxdWFsIHNpZ24sIHF1ZXN0aW9uIG1hcmsiKTovc3RyJC8udGVzdChSKXx8Im9iakRlc2MiPT09Uj90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEkpOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nIG9mIHN0cmluZyB0eXBl'@;
put 'OiAiK1IrIiB1bnN1cHBvcnRlZCIpfSxCLnByb3RvdHlwZS5fZW5jb2RlT2JqaWQ9ZnVuY3Rpb24oSSxSLEUpe2lmKCJzdHJpbmciPT10eXBlb2YgSSl7aWYoIVIpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoInN0cmluZyBvYmppZCBnaXZlbiwgYnV0IG5vIHZhbHVlcyBtYXAgZm91bmQi'@;
put 'KTtpZighUi5oYXNPd25Qcm9wZXJ0eShJKSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigib2JqaWQgbm90IGZvdW5kIGluIHZhbHVlcyBtYXAiKTtJPVJbSV0uc3BsaXQoL1tccy5dKy9nKTtmb3IobGV0IEc9MDtHPEkubGVuZ3RoO0crKylJW0ddfD0wfWVsc2UgaWYoQXJyYXkuaXNBcnJh'@;
put 'eShJKSl7ST1JLnNsaWNlKCk7Zm9yKGxldCBHPTA7RzxJLmxlbmd0aDtHKyspSVtHXXw9MH1pZighQXJyYXkuaXNBcnJheShJKSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigib2JqaWQoKSBzaG91bGQgYmUgZWl0aGVyIGFycmF5IG9yIHN0cmluZywgZ290OiAiK0pTT04uc3RyaW5naWZ5'@;
put 'KEkpKTtpZighRSl7aWYoSVsxXT49NDApcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIlNlY29uZCBvYmppZCBpZGVudGlmaWVyIE9PQiIpO0kuc3BsaWNlKDAsMiw0MCpJWzBdK0lbMV0pfWxldCB6PTA7Zm9yKGxldCBHPTA7RzxJLmxlbmd0aDtHKyspe2xldCBXPUlbR107Zm9yKHorKztX'@;
put 'Pj0xMjg7Vz4+PTcpeisrfWNvbnN0IGo9ay5hbGxvYyh6KTtsZXQgVj1qLmxlbmd0aC0xO2ZvcihsZXQgRz1JLmxlbmd0aC0xO0c+PTA7Ry0tKXtsZXQgVz1JW0ddO2ZvcihqW1YtLV09MTI3Jlc7KFc+Pj03KT4wOylqW1YtLV09MTI4fDEyNyZXfXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVy'@;
put 'QnVmZmVyKGopfSxCLnByb3RvdHlwZS5fZW5jb2RlVGltZT1mdW5jdGlvbihJLFIpe2xldCBFO2NvbnN0IHo9bmV3IERhdGUoSSk7cmV0dXJuImdlbnRpbWUiPT09Uj9FPVtMKHouZ2V0VVRDRnVsbFllYXIoKSksTCh6LmdldFVUQ01vbnRoKCkrMSksTCh6LmdldFVUQ0RhdGUoKSksTCh6Lmdl'@;
put 'dFVUQ0hvdXJzKCkpLEwoei5nZXRVVENNaW51dGVzKCkpLEwoei5nZXRVVENTZWNvbmRzKCkpLCJaIl0uam9pbigiIik6InV0Y3RpbWUiPT09Uj9FPVtMKHouZ2V0VVRDRnVsbFllYXIoKSUxMDApLEwoei5nZXRVVENNb250aCgpKzEpLEwoei5nZXRVVENEYXRlKCkpLEwoei5nZXRVVENIb3Vy'@;
put 'cygpKSxMKHouZ2V0VVRDTWludXRlcygpKSxMKHouZ2V0VVRDU2Vjb25kcygpKSwiWiJdLmpvaW4oIiIpOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nICIrUisiIHRpbWUgaXMgbm90IHN1cHBvcnRlZCB5ZXQiKSx0aGlzLl9lbmNvZGVTdHIoRSwib2N0c3RyIil9LEIucHJvdG90eXBl'@;
put 'Ll9lbmNvZGVOdWxsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoIiIpfSxCLnByb3RvdHlwZS5fZW5jb2RlSW50PWZ1bmN0aW9uKEksUil7aWYoInN0cmluZyI9PXR5cGVvZiBJKXtpZighUilyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigiU3RyaW5nIGlu'@;
put 'dCBvciBlbnVtIGdpdmVuLCBidXQgbm8gdmFsdWVzIG1hcCIpO2lmKCFSLmhhc093blByb3BlcnR5KEkpKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJWYWx1ZXMgbWFwIGRvZXNuJ3QgY29udGFpbjogIitKU09OLnN0cmluZ2lmeShJKSk7ST1SW0ldfWlmKCJudW1iZXIiIT10eXBlb2Yg'@;
put 'SSYmIWsuaXNCdWZmZXIoSSkpe2NvbnN0IGo9SS50b0FycmF5KCk7IUkuc2lnbiYmMTI4JmpbMF0mJmoudW5zaGlmdCgwKSxJPWsuZnJvbShqKX1pZihrLmlzQnVmZmVyKEkpKXtsZXQgaj1JLmxlbmd0aDswPT09SS5sZW5ndGgmJmorKztjb25zdCBWPWsuYWxsb2Moaik7cmV0dXJuIEkuY29w'@;
put 'eShWKSwwPT09SS5sZW5ndGgmJihWWzBdPTApLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoVil9aWYoSTwxMjgpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoSSk7aWYoSTwyNTYpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWzAsSV0pO2xldCBFPTE7Zm9yKGxl'@;
put 'dCBqPUk7aj49MjU2O2o+Pj04KUUrKztjb25zdCB6PW5ldyBBcnJheShFKTtmb3IobGV0IGo9ei5sZW5ndGgtMTtqPj0wO2otLSl6W2pdPTI1NSZJLEk+Pj04O3JldHVybiAxMjgmelswXSYmei51bnNoaWZ0KDApLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoay5mcm9tKHopKX0sQi5wcm90'@;
put 'b3R5cGUuX2VuY29kZUJvb2w9ZnVuY3Rpb24oSSl7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoST8yNTU6MCl9LEIucHJvdG90eXBlLl91c2U9ZnVuY3Rpb24oSSxSKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgSSYmKEk9SShSKSksSS5fZ2V0RW5jb2RlcigiZGVyIikudHJl'@;
put 'ZX0sQi5wcm90b3R5cGUuX3NraXBEZWZhdWx0PWZ1bmN0aW9uKEksUixFKXtjb25zdCB6PXRoaXMuX2Jhc2VTdGF0ZTtsZXQgajtpZihudWxsPT09ei5kZWZhdWx0KXJldHVybiExO2NvbnN0IFY9SS5qb2luKCk7aWYodm9pZCAwPT09ei5kZWZhdWx0QnVmZmVyJiYoei5kZWZhdWx0QnVmZmVy'@;
put 'PXRoaXMuX2VuY29kZVZhbHVlKHouZGVmYXVsdCxSLEUpLmpvaW4oKSksVi5sZW5ndGghPT16LmRlZmF1bHRCdWZmZXIubGVuZ3RoKXJldHVybiExO2ZvcihqPTA7ajxWLmxlbmd0aDtqKyspaWYoVltqXSE9PXouZGVmYXVsdEJ1ZmZlcltqXSlyZXR1cm4hMTtyZXR1cm4hMH19LDIzNjkzOihX'@;
put 'ZSx6ZSxUKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBzZT16ZTtzZS5kZXI9VCg2OTEzMyksc2UucGVtPVQoNzkwMCl9LDc5MDA6KFdlLHplLFQpPT57InVzZSBzdHJpY3QiO2NvbnN0IHNlPVQoNjY2OTgpLGs9VCg2OTEzMyk7ZnVuY3Rpb24gdihoZSl7ay5jYWxsKHRoaXMsaGUpLHRoaXMuZW5j'@;
put 'PSJwZW0ifXNlKHYsayksV2UuZXhwb3J0cz12LHYucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbihILEIpe2NvbnN0IEs9ay5wcm90b3R5cGUuZW5jb2RlLmNhbGwodGhpcyxIKS50b1N0cmluZygiYmFzZTY0IiksSj1bIi0tLS0tQkVHSU4gIitCLmxhYmVsKyItLS0tLSJdO2ZvcihsZXQgST0w'@;
put 'O0k8Sy5sZW5ndGg7SSs9NjQpSi5wdXNoKEsuc2xpY2UoSSxJKzY0KSk7cmV0dXJuIEoucHVzaCgiLS0tLS1FTkQgIitCLmxhYmVsKyItLS0tLSIpLEouam9pbigiXG4iKX19LDUwNDc6ZnVuY3Rpb24oV2UsemUsVCl7IWZ1bmN0aW9uKHNlLGspeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB2KFks'@;
put 'Yil7aWYoIVkpdGhyb3cgbmV3IEVycm9yKGJ8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gaGUoWSxiKXtZLnN1cGVyXz1iO3ZhciB4PWZ1bmN0aW9uKCl7fTt4LnByb3RvdHlwZT1iLnByb3RvdHlwZSxZLnByb3RvdHlwZT1uZXcgeCxZLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1ZfWZ1'@;
put 'bmN0aW9uIEgoWSxiLHgpe2lmKEguaXNCTihZKSlyZXR1cm4gWTt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09WSYmKCgibGUiPT09Ynx8ImJlIj09PWIpJiYoeD1iLGI9MTApLHRoaXMuX2luaXQoWXx8MCxifHwxMCx4'@;
put 'fHwiYmUiKSl9dmFyIEI7Im9iamVjdCI9PXR5cGVvZiBzZT9zZS5leHBvcnRzPUg6ay5CTj1ILEguQk49SCxILndvcmRTaXplPTI2O3RyeXtCPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjpUKDgwOTUwKS5CdWZmZXJ9Y2F0Y2h7fWZ1'@;
put 'bmN0aW9uIEwoWSxiKXt2YXIgeD1ZLmNoYXJDb2RlQXQoYik7cmV0dXJuIHg+PTY1JiZ4PD03MD94LTU1Ong+PTk3JiZ4PD0xMDI/eC04Nzp4LTQ4JjE1fWZ1bmN0aW9uIEsoWSxiLHgpe3ZhciBOPUwoWSx4KTtyZXR1cm4geC0xPj1iJiYoTnw9TChZLHgtMSk8PDQpLE59ZnVuY3Rpb24gSihZ'@;
put 'LGIseCxOKXtmb3IodmFyIEY9MCxnPU1hdGgubWluKFkubGVuZ3RoLHgpLEM9YjtDPGc7QysrKXt2YXIgTT1ZLmNoYXJDb2RlQXQoQyktNDg7Rio9TixGKz1NPj00OT9NLTQ5KzEwOk0+PTE3P00tMTcrMTA6TX1yZXR1cm4gRn1ILmlzQk49ZnVuY3Rpb24oYil7cmV0dXJuIGIgaW5zdGFuY2Vv'@;
put 'ZiBIfHxudWxsIT09YiYmIm9iamVjdCI9PXR5cGVvZiBiJiZiLmNvbnN0cnVjdG9yLndvcmRTaXplPT09SC53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShiLndvcmRzKX0sSC5tYXg9ZnVuY3Rpb24oYix4KXtyZXR1cm4gYi5jbXAoeCk+MD9iOnh9LEgubWluPWZ1bmN0aW9uKGIseCl7cmV0dXJu'@;
put 'IGIuY21wKHgpPDA/Yjp4fSxILnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihiLHgsTil7aWYoIm51bWJlciI9PXR5cGVvZiBiKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKGIseCxOKTtpZigib2JqZWN0Ij09dHlwZW9mIGIpcmV0dXJuIHRoaXMuX2luaXRBcnJheShiLHgsTik7ImhleCI9PT14'@;
put 'JiYoeD0xNiksdih4PT09KDB8eCkmJng+PTImJng8PTM2KTt2YXIgRj0wOyItIj09PShiPWIudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoRisrLHRoaXMubmVnYXRpdmU9MSksRjxiLmxlbmd0aCYmKDE2PT09eD90aGlzLl9wYXJzZUhleChiLEYsTik6KHRoaXMuX3BhcnNl'@;
put 'QmFzZShiLHgsRiksImxlIj09PU4mJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSx4LE4pKSl9LEgucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKGIseCxOKXtiPDAmJih0aGlzLm5lZ2F0aXZlPTEsYj0tYiksYjw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmYl0s'@;
put 'dGhpcy5sZW5ndGg9MSk6Yjw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZiLGIvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOih2KGI8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmYixiLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRo'@;
put 'aXMubGVuZ3RoPTMpLCJsZSI9PT1OJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCkseCxOKX0sSC5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihiLHgsTil7aWYodigibnVtYmVyIj09dHlwZW9mIGIubGVuZ3RoKSxiLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0s'@;
put 'dGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChiLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBGPTA7Rjx0aGlzLmxlbmd0aDtGKyspdGhpcy53b3Jkc1tGXT0wO3ZhciBnLEMsTT0wO2lmKCJiZSI9PT1OKWZvcihGPWIu'@;
put 'bGVuZ3RoLTEsZz0wO0Y+PTA7Ri09Myl0aGlzLndvcmRzW2ddfD0oQz1iW0ZdfGJbRi0xXTw8OHxiW0YtMl08PDE2KTw8TSY2NzEwODg2Myx0aGlzLndvcmRzW2crMV09Qz4+PjI2LU0mNjcxMDg4NjMsKE0rPTI0KT49MjYmJihNLT0yNixnKyspO2Vsc2UgaWYoImxlIj09PU4pZm9yKEY9MCxn'@;
put 'PTA7RjxiLmxlbmd0aDtGKz0zKXRoaXMud29yZHNbZ118PShDPWJbRl18YltGKzFdPDw4fGJbRisyXTw8MTYpPDxNJjY3MTA4ODYzLHRoaXMud29yZHNbZysxXT1DPj4+MjYtTSY2NzEwODg2MywoTSs9MjQpPj0yNiYmKE0tPTI2LGcrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sSC5wcm90b3R5'@;
put 'cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKGIseCxOKXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKGIubGVuZ3RoLXgpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEY9MDtGPHRoaXMubGVuZ3RoO0YrKyl0aGlzLndvcmRzW0ZdPTA7dmFyIE0sZz0wLEM9MDtpZigi'@;
put 'YmUiPT09Tilmb3IoRj1iLmxlbmd0aC0xO0Y+PXg7Ri09MilNPUsoYix4LEYpPDxnLHRoaXMud29yZHNbQ118PTY3MTA4ODYzJk0sZz49MTg/KGctPTE4LHRoaXMud29yZHNbQys9MV18PU0+Pj4yNik6Zys9ODtlbHNlIGZvcihGPShiLmxlbmd0aC14KSUyPT0wP3grMTp4O0Y8Yi5sZW5ndGg7'@;
put 'Ris9MilNPUsoYix4LEYpPDxnLHRoaXMud29yZHNbQ118PTY3MTA4ODYzJk0sZz49MTg/KGctPTE4LHRoaXMud29yZHNbQys9MV18PU0+Pj4yNik6Zys9ODt0aGlzLnN0cmlwKCl9LEgucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oYix4LE4pe3RoaXMud29yZHM9WzBdLHRoaXMubGVu'@;
put 'Z3RoPTE7Zm9yKHZhciBGPTAsZz0xO2c8PTY3MTA4ODYzO2cqPXgpRisrO0YtLSxnPWcveHwwO2Zvcih2YXIgQz1iLmxlbmd0aC1OLE09QyVGLHk9TWF0aC5taW4oQyxDLU0pK04scD0wLFM9TjtTPHk7Uys9RilwPUooYixTLFMrRix4KSx0aGlzLmltdWxuKGcpLHRoaXMud29yZHNbMF0rcDw2'@;
put 'NzEwODg2ND90aGlzLndvcmRzWzBdKz1wOnRoaXMuX2lhZGRuKHApO2lmKDAhPT1NKXt2YXIgUT0xO2ZvcihwPUooYixTLGIubGVuZ3RoLHgpLFM9MDtTPE07UysrKVEqPXg7dGhpcy5pbXVsbihRKSx0aGlzLndvcmRzWzBdK3A8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9cDp0aGlzLl9pYWRk'@;
put 'bihwKX10aGlzLnN0cmlwKCl9LEgucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYil7Yi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgeD0wO3g8dGhpcy5sZW5ndGg7eCsrKWIud29yZHNbeF09dGhpcy53b3Jkc1t4XTtiLmxlbmd0aD10aGlzLmxlbmd0aCxiLm5lZ2F0aXZl'@;
put 'PXRoaXMubmVnYXRpdmUsYi5yZWQ9dGhpcy5yZWR9LEgucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGI9bmV3IEgobnVsbCk7cmV0dXJuIHRoaXMuY29weShiKSxifSxILnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKGIpe2Zvcig7dGhpcy5sZW5ndGg8YjspdGhpcy53b3Jkc1t0'@;
put 'aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxILnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LEgucHJvdG90eXBlLl9ub3Jt'@;
put 'U2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSxILnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2'@;
put 'KSsiPiJ9O3ZhciBJPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwi'@;
put 'MDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAw'@;
put 'MDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLFI9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1'@;
put 'LDUsNV0sRT1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1'@;
put 'ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBqKFksYix4KXt4'@;
put 'Lm5lZ2F0aXZlPWIubmVnYXRpdmVeWS5uZWdhdGl2ZTt2YXIgTj1ZLmxlbmd0aCtiLmxlbmd0aHwwO3gubGVuZ3RoPU4sTj1OLTF8MDt2YXIgRj0wfFkud29yZHNbMF0sZz0wfGIud29yZHNbMF0sQz1GKmcseT1DLzY3MTA4ODY0fDA7eC53b3Jkc1swXT02NzEwODg2MyZDO2Zvcih2YXIgcD0x'@;
put 'O3A8TjtwKyspe2Zvcih2YXIgUz15Pj4+MjYsUT02NzEwODg2MyZ5LHJlPU1hdGgubWluKHAsYi5sZW5ndGgtMSksZmU9TWF0aC5tYXgoMCxwLVkubGVuZ3RoKzEpO2ZlPD1yZTtmZSsrKVMrPShDPShGPTB8WS53b3Jkc1twLWZlfDBdKSooZz0wfGIud29yZHNbZmVdKStRKS82NzEwODg2NHww'@;
put 'LFE9NjcxMDg4NjMmQzt4LndvcmRzW3BdPTB8USx5PTB8U31yZXR1cm4gMCE9PXk/eC53b3Jkc1twXT0wfHk6eC5sZW5ndGgtLSx4LnN0cmlwKCl9SC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oYix4KXt2YXIgTjtpZih4PTB8eHx8MSwxNj09PShiPWJ8fDEwKXx8ImhleCI9PT1iKXtO'@;
put 'PSIiO2Zvcih2YXIgRj0wLGc9MCxDPTA7Qzx0aGlzLmxlbmd0aDtDKyspe3ZhciBNPXRoaXMud29yZHNbQ10seT0oMTY3NzcyMTUmKE08PEZ8ZykpLnRvU3RyaW5nKDE2KTtOPTAhPShnPU0+Pj4yNC1GJjE2Nzc3MjE1KXx8QyE9PXRoaXMubGVuZ3RoLTE/SVs2LXkubGVuZ3RoXSt5K046eStO'@;
put 'LChGKz0yKT49MjYmJihGLT0yNixDLS0pfWZvcigwIT09ZyYmKE49Zy50b1N0cmluZygxNikrTik7Ti5sZW5ndGgleCE9MDspTj0iMCIrTjtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihOPSItIitOKSxOfWlmKGI9PT0oMHxiKSYmYj49MiYmYjw9MzYpe3ZhciBwPVJbYl0sUz1FW2JdO049'@;
put 'IiI7dmFyIFE9dGhpcy5jbG9uZSgpO2ZvcihRLm5lZ2F0aXZlPTA7IVEuaXNaZXJvKCk7KXt2YXIgcmU9US5tb2RuKFMpLnRvU3RyaW5nKGIpO049KFE9US5pZGl2bihTKSkuaXNaZXJvKCk/cmUrTjpJW3AtcmUubGVuZ3RoXStyZStOfWZvcih0aGlzLmlzWmVybygpJiYoTj0iMCIrTik7Ti5s'@;
put 'ZW5ndGgleCE9MDspTj0iMCIrTjtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihOPSItIitOKSxOfXYoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sSC5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhp'@;
put 'cy5sZW5ndGg/Yis9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2IrPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZ2KCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVw'@;
put 'IHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tYjpifSxILnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LEgucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKGIseCl7cmV0dXJuIHYodHlwZW9mIEI8InUiKSx0aGlzLnRvQXJyYXlM'@;
put 'aWtlKEIsYix4KX0sSC5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihiLHgpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGIseCl9LEgucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKGIseCxOKXt2YXIgRj10aGlzLmJ5dGVMZW5ndGgoKSxnPU58fE1hdGgubWF4KDEsRik7'@;
put 'dihGPD1nLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksdihnPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgeSxwLEM9ImxlIj09PXgsTT1uZXcgYihnKSxTPXRoaXMuY2xvbmUoKTtpZihDKXtmb3IocD0wOyFTLmlzWmVy'@;
put 'bygpO3ArKyl5PVMuYW5kbG4oMjU1KSxTLml1c2hybig4KSxNW3BdPXk7Zm9yKDtwPGc7cCsrKU1bcF09MH1lbHNle2ZvcihwPTA7cDxnLUY7cCsrKU1bcF09MDtmb3IocD0wOyFTLmlzWmVybygpO3ArKyl5PVMuYW5kbG4oMjU1KSxTLml1c2hybig4KSxNW2ctcC0xXT15fXJldHVybiBNfSxI'@;
put 'LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oYil7cmV0dXJuIDMyLU1hdGguY2x6MzIoYil9OmZ1bmN0aW9uKGIpe3ZhciB4PWIsTj0wO3JldHVybiB4Pj00MDk2JiYoTis9MTMseD4+Pj0xMykseD49NjQmJihOKz03LHg+Pj49NykseD49OCYmKE4rPTQseD4+Pj00'@;
put 'KSx4Pj0yJiYoTis9Mix4Pj4+PTIpLE4reH0sSC5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGIpe2lmKDA9PT1iKXJldHVybiAyNjt2YXIgeD1iLE49MDtyZXR1cm4gODE5MSZ4fHwoTis9MTMseD4+Pj0xMyksMTI3Jnh8fChOKz03LHg+Pj49NyksMTUmeHx8KE4rPTQseD4+Pj00KSwz'@;
put 'Jnh8fChOKz0yLHg+Pj49MiksMSZ4fHxOKyssTn0sSC5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIHg9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkreH0sSC5wcm90b3R5cGUuemVyb0JpdHM9ZnVu'@;
put 'Y3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgYj0wLHg9MDt4PHRoaXMubGVuZ3RoO3grKyl7dmFyIE49dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1t4XSk7aWYoYis9TiwyNiE9PU4pYnJlYWt9cmV0dXJuIGJ9LEgucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LEgucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihiKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihiKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LEgucHJvdG90eXBlLmZyb21Ud29zPWZ1'@;
put 'bmN0aW9uKGIpe3JldHVybiB0aGlzLnRlc3RuKGItMSk/dGhpcy5ub3RuKGIpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LEgucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxILnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4g'@;
put 'dGhpcy5jbG9uZSgpLmluZWcoKX0sSC5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sSC5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihiKXtmb3IoO3RoaXMubGVuZ3RoPGIubGVuZ3RoOyl0aGlzLndvcmRzW3Ro'@;
put 'aXMubGVuZ3RoKytdPTA7Zm9yKHZhciB4PTA7eDxiLmxlbmd0aDt4KyspdGhpcy53b3Jkc1t4XT10aGlzLndvcmRzW3hdfGIud29yZHNbeF07cmV0dXJuIHRoaXMuc3RyaXAoKX0sSC5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKGIpe3JldHVybiB2KDA9PSh0aGlzLm5lZ2F0aXZlfGIubmVnYXRp'@;
put 'dmUpKSx0aGlzLml1b3IoYil9LEgucHJvdG90eXBlLm9yPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKGIpOmIuY2xvbmUoKS5pb3IodGhpcyl9LEgucHJvdG90eXBlLnVvcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5s'@;
put 'ZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoYik6Yi5jbG9uZSgpLml1b3IodGhpcyl9LEgucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKGIpe3ZhciB4O3g9dGhpcy5sZW5ndGg+Yi5sZW5ndGg/Yjp0aGlzO2Zvcih2YXIgTj0wO048eC5sZW5ndGg7TisrKXRoaXMud29yZHNbTl09dGhpcy53b3Jk'@;
put 'c1tOXSZiLndvcmRzW05dO3JldHVybiB0aGlzLmxlbmd0aD14Lmxlbmd0aCx0aGlzLnN0cmlwKCl9LEgucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oYil7cmV0dXJuIHYoMD09KHRoaXMubmVnYXRpdmV8Yi5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoYil9LEgucHJvdG90eXBlLmFuZD1mdW5jdGlv'@;
put 'bihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoYik6Yi5jbG9uZSgpLmlhbmQodGhpcyl9LEgucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChiKTpiLmNsb25lKCku'@;
put 'aXVhbmQodGhpcyl9LEgucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKGIpe3ZhciB4LE47dGhpcy5sZW5ndGg+Yi5sZW5ndGg/KHg9dGhpcyxOPWIpOih4PWIsTj10aGlzKTtmb3IodmFyIEY9MDtGPE4ubGVuZ3RoO0YrKyl0aGlzLndvcmRzW0ZdPXgud29yZHNbRl1eTi53b3Jkc1tGXTtpZih0'@;
put 'aGlzIT09eClmb3IoO0Y8eC5sZW5ndGg7RisrKXRoaXMud29yZHNbRl09eC53b3Jkc1tGXTtyZXR1cm4gdGhpcy5sZW5ndGg9eC5sZW5ndGgsdGhpcy5zdHJpcCgpfSxILnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKGIpe3JldHVybiB2KDA9PSh0aGlzLm5lZ2F0aXZlfGIubmVnYXRpdmUpKSx0'@;
put 'aGlzLml1eG9yKGIpfSxILnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKGIpOmIuY2xvbmUoKS5peG9yKHRoaXMpfSxILnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxl'@;
put 'bmd0aD90aGlzLmNsb25lKCkuaXV4b3IoYik6Yi5jbG9uZSgpLml1eG9yKHRoaXMpfSxILnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihiKXt2KCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFyIHg9MHxNYXRoLmNlaWwoYi8yNiksTj1iJTI2O3RoaXMuX2V4cGFuZCh4KSxOPjAmJngtLTtm'@;
put 'b3IodmFyIEY9MDtGPHg7RisrKXRoaXMud29yZHNbRl09NjcxMDg4NjMmfnRoaXMud29yZHNbRl07cmV0dXJuIE4+MCYmKHRoaXMud29yZHNbRl09fnRoaXMud29yZHNbRl0mNjcxMDg4NjM+PjI2LU4pLHRoaXMuc3RyaXAoKX0sSC5wcm90b3R5cGUubm90bj1mdW5jdGlvbihiKXtyZXR1cm4g'@;
put 'dGhpcy5jbG9uZSgpLmlub3RuKGIpfSxILnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKGIseCl7digibnVtYmVyIj09dHlwZW9mIGImJmI+PTApO3ZhciBOPWIvMjZ8MCxGPWIlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZChOKzEpLHRoaXMud29yZHNbTl09eD90aGlzLndvcmRzW05dfDE8PEY6dGhp'@;
put 'cy53b3Jkc1tOXSZ+KDE8PEYpLHRoaXMuc3RyaXAoKX0sSC5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihiKXt2YXIgeCxOLEY7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1iLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAseD10aGlzLmlzdWIoYiksdGhpcy5uZWdhdGl2ZV49MSx0'@;
put 'aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Yi5uZWdhdGl2ZSlyZXR1cm4gYi5uZWdhdGl2ZT0wLHg9dGhpcy5pc3ViKGIpLGIubmVnYXRpdmU9MSx4Ll9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPmIubGVuZ3RoPyhOPXRoaXMsRj1iKTooTj1iLEY9dGhpcyk7Zm9y'@;
put 'KHZhciBnPTAsQz0wO0M8Ri5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmKHg9KDB8Ti53b3Jkc1tDXSkrKDB8Ri53b3Jkc1tDXSkrZyksZz14Pj4+MjY7Zm9yKDswIT09ZyYmQzxOLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyYoeD0oMHxOLndvcmRzW0NdKStn'@;
put 'KSxnPXg+Pj4yNjtpZih0aGlzLmxlbmd0aD1OLmxlbmd0aCwwIT09Zyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1nLHRoaXMubGVuZ3RoKys7ZWxzZSBpZihOIT09dGhpcylmb3IoO0M8Ti5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109Ti53b3Jkc1tDXTtyZXR1cm4gdGhpc30sSC5wcm90b3R5'@;
put 'cGUuYWRkPWZ1bmN0aW9uKGIpe3ZhciB4O3JldHVybiAwIT09Yi5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KGIubmVnYXRpdmU9MCx4PXRoaXMuc3ViKGIpLGIubmVnYXRpdmVePTEseCk6MD09PWIubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAseD1i'@;
put 'LnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEseCk6dGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQoYik6Yi5jbG9uZSgpLmlhZGQodGhpcyl9LEgucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oYil7aWYoMCE9PWIubmVnYXRpdmUpe2IubmVnYXRpdmU9MDt2YXIgeD10aGlz'@;
put 'LmlhZGQoYik7cmV0dXJuIGIubmVnYXRpdmU9MSx4Ll9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKGIpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBGLGcsTj10aGlzLmNtcChiKTtpZigwPT09Tily'@;
put 'ZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7Tj4wPyhGPXRoaXMsZz1iKTooRj1iLGc9dGhpcyk7Zm9yKHZhciBDPTAsTT0wO008Zy5sZW5ndGg7TSsrKUM9KHg9KDB8Ri53b3Jkc1tNXSktKDB8Zy53b3Jkc1tNXSkrQyk+PjI2LHRoaXMu'@;
put 'd29yZHNbTV09NjcxMDg4NjMmeDtmb3IoOzAhPT1DJiZNPEYubGVuZ3RoO00rKylDPSh4PSgwfEYud29yZHNbTV0pK0MpPj4yNix0aGlzLndvcmRzW01dPTY3MTA4ODYzJng7aWYoMD09PUMmJk08Ri5sZW5ndGgmJkYhPT10aGlzKWZvcig7TTxGLmxlbmd0aDtNKyspdGhpcy53b3Jkc1tNXT1G'@;
put 'LndvcmRzW01dO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxNKSxGIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSxILnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKGIpfTt2YXIgVj1mdW5jdGlv'@;
put 'bihiLHgsTil7dmFyIHkscCxTLEY9Yi53b3JkcyxnPXgud29yZHMsQz1OLndvcmRzLE09MCxRPTB8RlswXSxyZT04MTkxJlEsZmU9UT4+PjEzLG1lPTB8RlsxXSxrZT04MTkxJm1lLFRlPW1lPj4+MTMsUGU9MHxGWzJdLEZlPTgxOTEmUGUsTmU9UGU+Pj4xMyxMZT0wfEZbM10sQmU9ODE5MSZM'@;
put 'ZSxIZT1MZT4+PjEzLFFlPTB8Rls0XSxtdD04MTkxJlFlLEtlPVFlPj4+MTMsd2U9MHxGWzVdLEllPTgxOTEmd2UsT2U9d2U+Pj4xMyxldD0wfEZbNl0sbnQ9ODE5MSZldCxxZT1ldD4+PjEzLGh0PTB8Rls3XSxFZT04MTkxJmh0LERlPWh0Pj4+MTMsJGU9MHxGWzhdLGF0PTgxOTEmJGUsY3Q9'@;
put 'JGU+Pj4xMyxPdD0wfEZbOV0sUHQ9ODE5MSZPdCxBdD1PdD4+PjEzLEp0PTB8Z1swXSxtbj04MTkxJkp0LE50PUp0Pj4+MTMsYm49MHxnWzFdLEduPTgxOTEmYm4sb249Ym4+Pj4xMywkbj0wfGdbMl0sTm49ODE5MSYkbixwdD0kbj4+PjEzLHBuPTB8Z1szXSxobj04MTkxJnBuLEN0PXBuPj4+'@;
put 'MTMsZW49MHxnWzRdLF90PTgxOTEmZW4sVnQ9ZW4+Pj4xMyxfbj0wfGdbNV0sb3Q9ODE5MSZfbixJdD1fbj4+PjEzLG5uPTB8Z1s2XSxEdD04MTkxJm5uLHZ0PW5uPj4+MTMsR3Q9MHxnWzddLExuPTgxOTEmR3QsenQ9R3Q+Pj4xMyxNbj0wfGdbOF0sVG49ODE5MSZNbixzbj1Nbj4+PjEzLEJu'@;
put 'PTB8Z1s5XSxGbj04MTkxJkJuLHF0PUJuPj4+MTM7Ti5uZWdhdGl2ZT1iLm5lZ2F0aXZlXngubmVnYXRpdmUsTi5sZW5ndGg9MTk7dmFyIEhuPShNKyh5PU1hdGguaW11bChyZSxtbikpfDApKygoODE5MSYocD0ocD1NYXRoLmltdWwocmUsTnQpKStNYXRoLmltdWwoZmUsbW4pfDApKTw8MTMp'@;
put 'fDA7TT0oKFM9TWF0aC5pbXVsKGZlLE50KSkrKHA+Pj4xMyl8MCkrKEhuPj4+MjYpfDAsSG4mPTY3MTA4ODYzLHk9TWF0aC5pbXVsKGtlLG1uKSxwPShwPU1hdGguaW11bChrZSxOdCkpK01hdGguaW11bChUZSxtbil8MCxTPU1hdGguaW11bChUZSxOdCk7dmFyIGlpPShNKyh5PXkrTWF0aC5p'@;
put 'bXVsKHJlLEduKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwocmUsb24pfDApK01hdGguaW11bChmZSxHbil8MCkpPDwxMyl8MDtNPSgoUz1TK01hdGguaW11bChmZSxvbil8MCkrKHA+Pj4xMyl8MCkrKGlpPj4+MjYpfDAsaWkmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKEZlLG1uKSxw'@;
put 'PShwPU1hdGguaW11bChGZSxOdCkpK01hdGguaW11bChOZSxtbil8MCxTPU1hdGguaW11bChOZSxOdCkseT15K01hdGguaW11bChrZSxHbil8MCxwPShwPXArTWF0aC5pbXVsKGtlLG9uKXwwKStNYXRoLmltdWwoVGUsR24pfDAsUz1TK01hdGguaW11bChUZSxvbil8MDt2YXIgY249KE0rKHk9'@;
put 'eStNYXRoLmltdWwocmUsTm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChyZSxwdCl8MCkrTWF0aC5pbXVsKGZlLE5uKXwwKSk8PDEzKXwwO009KChTPVMrTWF0aC5pbXVsKGZlLHB0KXwwKSsocD4+PjEzKXwwKSsoY24+Pj4yNil8MCxjbiY9NjcxMDg4NjMseT1NYXRoLmltdWwo'@;
put 'QmUsbW4pLHA9KHA9TWF0aC5pbXVsKEJlLE50KSkrTWF0aC5pbXVsKEhlLG1uKXwwLFM9TWF0aC5pbXVsKEhlLE50KSx5PXkrTWF0aC5pbXVsKEZlLEduKXwwLHA9KHA9cCtNYXRoLmltdWwoRmUsb24pfDApK01hdGguaW11bChOZSxHbil8MCxTPVMrTWF0aC5pbXVsKE5lLG9uKXwwLHk9eStN'@;
put 'YXRoLmltdWwoa2UsTm4pfDAscD0ocD1wK01hdGguaW11bChrZSxwdCl8MCkrTWF0aC5pbXVsKFRlLE5uKXwwLFM9UytNYXRoLmltdWwoVGUscHQpfDA7dmFyIGpuPShNKyh5PXkrTWF0aC5pbXVsKHJlLGhuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwocmUsQ3QpfDApK01hdGgu'@;
put 'aW11bChmZSxobil8MCkpPDwxMyl8MDtNPSgoUz1TK01hdGguaW11bChmZSxDdCl8MCkrKHA+Pj4xMyl8MCkrKGpuPj4+MjYpfDAsam4mPTY3MTA4ODYzLHk9TWF0aC5pbXVsKG10LG1uKSxwPShwPU1hdGguaW11bChtdCxOdCkpK01hdGguaW11bChLZSxtbil8MCxTPU1hdGguaW11bChLZSxO'@;
put 'dCkseT15K01hdGguaW11bChCZSxHbil8MCxwPShwPXArTWF0aC5pbXVsKEJlLG9uKXwwKStNYXRoLmltdWwoSGUsR24pfDAsUz1TK01hdGguaW11bChIZSxvbil8MCx5PXkrTWF0aC5pbXVsKEZlLE5uKXwwLHA9KHA9cCtNYXRoLmltdWwoRmUscHQpfDApK01hdGguaW11bChOZSxObil8MCxT'@;
put 'PVMrTWF0aC5pbXVsKE5lLHB0KXwwLHk9eStNYXRoLmltdWwoa2UsaG4pfDAscD0ocD1wK01hdGguaW11bChrZSxDdCl8MCkrTWF0aC5pbXVsKFRlLGhuKXwwLFM9UytNYXRoLmltdWwoVGUsQ3QpfDA7dmFyIFhyPShNKyh5PXkrTWF0aC5pbXVsKHJlLF90KXwwKXwwKSsoKDgxOTEmKHA9KHA9'@;
put 'cCtNYXRoLmltdWwocmUsVnQpfDApK01hdGguaW11bChmZSxfdCl8MCkpPDwxMyl8MDtNPSgoUz1TK01hdGguaW11bChmZSxWdCl8MCkrKHA+Pj4xMyl8MCkrKFhyPj4+MjYpfDAsWHImPTY3MTA4ODYzLHk9TWF0aC5pbXVsKEllLG1uKSxwPShwPU1hdGguaW11bChJZSxOdCkpK01hdGguaW11'@;
put 'bChPZSxtbil8MCxTPU1hdGguaW11bChPZSxOdCkseT15K01hdGguaW11bChtdCxHbil8MCxwPShwPXArTWF0aC5pbXVsKG10LG9uKXwwKStNYXRoLmltdWwoS2UsR24pfDAsUz1TK01hdGguaW11bChLZSxvbil8MCx5PXkrTWF0aC5pbXVsKEJlLE5uKXwwLHA9KHA9cCtNYXRoLmltdWwoQmUs'@;
put 'cHQpfDApK01hdGguaW11bChIZSxObil8MCxTPVMrTWF0aC5pbXVsKEhlLHB0KXwwLHk9eStNYXRoLmltdWwoRmUsaG4pfDAscD0ocD1wK01hdGguaW11bChGZSxDdCl8MCkrTWF0aC5pbXVsKE5lLGhuKXwwLFM9UytNYXRoLmltdWwoTmUsQ3QpfDAseT15K01hdGguaW11bChrZSxfdCl8MCxw'@;
put 'PShwPXArTWF0aC5pbXVsKGtlLFZ0KXwwKStNYXRoLmltdWwoVGUsX3QpfDAsUz1TK01hdGguaW11bChUZSxWdCl8MDt2YXIgdmk9KE0rKHk9eStNYXRoLmltdWwocmUsb3QpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChyZSxJdCl8MCkrTWF0aC5pbXVsKGZlLG90KXwwKSk8PDEz'@;
put 'KXwwO009KChTPVMrTWF0aC5pbXVsKGZlLEl0KXwwKSsocD4+PjEzKXwwKSsodmk+Pj4yNil8MCx2aSY9NjcxMDg4NjMseT1NYXRoLmltdWwobnQsbW4pLHA9KHA9TWF0aC5pbXVsKG50LE50KSkrTWF0aC5pbXVsKHFlLG1uKXwwLFM9TWF0aC5pbXVsKHFlLE50KSx5PXkrTWF0aC5pbXVsKEll'@;
put 'LEduKXwwLHA9KHA9cCtNYXRoLmltdWwoSWUsb24pfDApK01hdGguaW11bChPZSxHbil8MCxTPVMrTWF0aC5pbXVsKE9lLG9uKXwwLHk9eStNYXRoLmltdWwobXQsTm4pfDAscD0ocD1wK01hdGguaW11bChtdCxwdCl8MCkrTWF0aC5pbXVsKEtlLE5uKXwwLFM9UytNYXRoLmltdWwoS2UscHQp'@;
put 'fDAseT15K01hdGguaW11bChCZSxobil8MCxwPShwPXArTWF0aC5pbXVsKEJlLEN0KXwwKStNYXRoLmltdWwoSGUsaG4pfDAsUz1TK01hdGguaW11bChIZSxDdCl8MCx5PXkrTWF0aC5pbXVsKEZlLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoRmUsVnQpfDApK01hdGguaW11bChOZSxfdCl8MCxT'@;
put 'PVMrTWF0aC5pbXVsKE5lLFZ0KXwwLHk9eStNYXRoLmltdWwoa2Usb3QpfDAscD0ocD1wK01hdGguaW11bChrZSxJdCl8MCkrTWF0aC5pbXVsKFRlLG90KXwwLFM9UytNYXRoLmltdWwoVGUsSXQpfDA7dmFyIEVyPShNKyh5PXkrTWF0aC5pbXVsKHJlLER0KXwwKXwwKSsoKDgxOTEmKHA9KHA9'@;
put 'cCtNYXRoLmltdWwocmUsdnQpfDApK01hdGguaW11bChmZSxEdCl8MCkpPDwxMyl8MDtNPSgoUz1TK01hdGguaW11bChmZSx2dCl8MCkrKHA+Pj4xMyl8MCkrKEVyPj4+MjYpfDAsRXImPTY3MTA4ODYzLHk9TWF0aC5pbXVsKEVlLG1uKSxwPShwPU1hdGguaW11bChFZSxOdCkpK01hdGguaW11'@;
put 'bChEZSxtbil8MCxTPU1hdGguaW11bChEZSxOdCkseT15K01hdGguaW11bChudCxHbil8MCxwPShwPXArTWF0aC5pbXVsKG50LG9uKXwwKStNYXRoLmltdWwocWUsR24pfDAsUz1TK01hdGguaW11bChxZSxvbil8MCx5PXkrTWF0aC5pbXVsKEllLE5uKXwwLHA9KHA9cCtNYXRoLmltdWwoSWUs'@;
put 'cHQpfDApK01hdGguaW11bChPZSxObil8MCxTPVMrTWF0aC5pbXVsKE9lLHB0KXwwLHk9eStNYXRoLmltdWwobXQsaG4pfDAscD0ocD1wK01hdGguaW11bChtdCxDdCl8MCkrTWF0aC5pbXVsKEtlLGhuKXwwLFM9UytNYXRoLmltdWwoS2UsQ3QpfDAseT15K01hdGguaW11bChCZSxfdCl8MCxw'@;
put 'PShwPXArTWF0aC5pbXVsKEJlLFZ0KXwwKStNYXRoLmltdWwoSGUsX3QpfDAsUz1TK01hdGguaW11bChIZSxWdCl8MCx5PXkrTWF0aC5pbXVsKEZlLG90KXwwLHA9KHA9cCtNYXRoLmltdWwoRmUsSXQpfDApK01hdGguaW11bChOZSxvdCl8MCxTPVMrTWF0aC5pbXVsKE5lLEl0KXwwLHk9eStN'@;
put 'YXRoLmltdWwoa2UsRHQpfDAscD0ocD1wK01hdGguaW11bChrZSx2dCl8MCkrTWF0aC5pbXVsKFRlLER0KXwwLFM9UytNYXRoLmltdWwoVGUsdnQpfDA7dmFyIFlpPShNKyh5PXkrTWF0aC5pbXVsKHJlLExuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwocmUsenQpfDApK01hdGgu'@;
put 'aW11bChmZSxMbil8MCkpPDwxMyl8MDtNPSgoUz1TK01hdGguaW11bChmZSx6dCl8MCkrKHA+Pj4xMyl8MCkrKFlpPj4+MjYpfDAsWWkmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKGF0LG1uKSxwPShwPU1hdGguaW11bChhdCxOdCkpK01hdGguaW11bChjdCxtbil8MCxTPU1hdGguaW11bChjdCxO'@;
put 'dCkseT15K01hdGguaW11bChFZSxHbil8MCxwPShwPXArTWF0aC5pbXVsKEVlLG9uKXwwKStNYXRoLmltdWwoRGUsR24pfDAsUz1TK01hdGguaW11bChEZSxvbil8MCx5PXkrTWF0aC5pbXVsKG50LE5uKXwwLHA9KHA9cCtNYXRoLmltdWwobnQscHQpfDApK01hdGguaW11bChxZSxObil8MCxT'@;
put 'PVMrTWF0aC5pbXVsKHFlLHB0KXwwLHk9eStNYXRoLmltdWwoSWUsaG4pfDAscD0ocD1wK01hdGguaW11bChJZSxDdCl8MCkrTWF0aC5pbXVsKE9lLGhuKXwwLFM9UytNYXRoLmltdWwoT2UsQ3QpfDAseT15K01hdGguaW11bChtdCxfdCl8MCxwPShwPXArTWF0aC5pbXVsKG10LFZ0KXwwKStN'@;
put 'YXRoLmltdWwoS2UsX3QpfDAsUz1TK01hdGguaW11bChLZSxWdCl8MCx5PXkrTWF0aC5pbXVsKEJlLG90KXwwLHA9KHA9cCtNYXRoLmltdWwoQmUsSXQpfDApK01hdGguaW11bChIZSxvdCl8MCxTPVMrTWF0aC5pbXVsKEhlLEl0KXwwLHk9eStNYXRoLmltdWwoRmUsRHQpfDAscD0ocD1wK01h'@;
put 'dGguaW11bChGZSx2dCl8MCkrTWF0aC5pbXVsKE5lLER0KXwwLFM9UytNYXRoLmltdWwoTmUsdnQpfDAseT15K01hdGguaW11bChrZSxMbil8MCxwPShwPXArTWF0aC5pbXVsKGtlLHp0KXwwKStNYXRoLmltdWwoVGUsTG4pfDAsUz1TK01hdGguaW11bChUZSx6dCl8MDt2YXIgSnI9KE0rKHk9'@;
put 'eStNYXRoLmltdWwocmUsVG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChyZSxzbil8MCkrTWF0aC5pbXVsKGZlLFRuKXwwKSk8PDEzKXwwO009KChTPVMrTWF0aC5pbXVsKGZlLHNuKXwwKSsocD4+PjEzKXwwKSsoSnI+Pj4yNil8MCxKciY9NjcxMDg4NjMseT1NYXRoLmltdWwo'@;
put 'UHQsbW4pLHA9KHA9TWF0aC5pbXVsKFB0LE50KSkrTWF0aC5pbXVsKEF0LG1uKXwwLFM9TWF0aC5pbXVsKEF0LE50KSx5PXkrTWF0aC5pbXVsKGF0LEduKXwwLHA9KHA9cCtNYXRoLmltdWwoYXQsb24pfDApK01hdGguaW11bChjdCxHbil8MCxTPVMrTWF0aC5pbXVsKGN0LG9uKXwwLHk9eStN'@;
put 'YXRoLmltdWwoRWUsTm4pfDAscD0ocD1wK01hdGguaW11bChFZSxwdCl8MCkrTWF0aC5pbXVsKERlLE5uKXwwLFM9UytNYXRoLmltdWwoRGUscHQpfDAseT15K01hdGguaW11bChudCxobil8MCxwPShwPXArTWF0aC5pbXVsKG50LEN0KXwwKStNYXRoLmltdWwocWUsaG4pfDAsUz1TK01hdGgu'@;
put 'aW11bChxZSxDdCl8MCx5PXkrTWF0aC5pbXVsKEllLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoSWUsVnQpfDApK01hdGguaW11bChPZSxfdCl8MCxTPVMrTWF0aC5pbXVsKE9lLFZ0KXwwLHk9eStNYXRoLmltdWwobXQsb3QpfDAscD0ocD1wK01hdGguaW11bChtdCxJdCl8MCkrTWF0aC5pbXVs'@;
put 'KEtlLG90KXwwLFM9UytNYXRoLmltdWwoS2UsSXQpfDAseT15K01hdGguaW11bChCZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKEJlLHZ0KXwwKStNYXRoLmltdWwoSGUsRHQpfDAsUz1TK01hdGguaW11bChIZSx2dCl8MCx5PXkrTWF0aC5pbXVsKEZlLExuKXwwLHA9KHA9cCtNYXRoLmltdWwo'@;
put 'RmUsenQpfDApK01hdGguaW11bChOZSxMbil8MCxTPVMrTWF0aC5pbXVsKE5lLHp0KXwwLHk9eStNYXRoLmltdWwoa2UsVG4pfDAscD0ocD1wK01hdGguaW11bChrZSxzbil8MCkrTWF0aC5pbXVsKFRlLFRuKXwwLFM9UytNYXRoLmltdWwoVGUsc24pfDA7dmFyIGFvPShNKyh5PXkrTWF0aC5p'@;
put 'bXVsKHJlLEZuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwocmUscXQpfDApK01hdGguaW11bChmZSxGbil8MCkpPDwxMyl8MDtNPSgoUz1TK01hdGguaW11bChmZSxxdCl8MCkrKHA+Pj4xMyl8MCkrKGFvPj4+MjYpfDAsYW8mPTY3MTA4ODYzLHk9TWF0aC5pbXVsKFB0LEduKSxw'@;
put 'PShwPU1hdGguaW11bChQdCxvbikpK01hdGguaW11bChBdCxHbil8MCxTPU1hdGguaW11bChBdCxvbikseT15K01hdGguaW11bChhdCxObil8MCxwPShwPXArTWF0aC5pbXVsKGF0LHB0KXwwKStNYXRoLmltdWwoY3QsTm4pfDAsUz1TK01hdGguaW11bChjdCxwdCl8MCx5PXkrTWF0aC5pbXVs'@;
put 'KEVlLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoRWUsQ3QpfDApK01hdGguaW11bChEZSxobil8MCxTPVMrTWF0aC5pbXVsKERlLEN0KXwwLHk9eStNYXRoLmltdWwobnQsX3QpfDAscD0ocD1wK01hdGguaW11bChudCxWdCl8MCkrTWF0aC5pbXVsKHFlLF90KXwwLFM9UytNYXRoLmltdWwocWUs'@;
put 'VnQpfDAseT15K01hdGguaW11bChJZSxvdCl8MCxwPShwPXArTWF0aC5pbXVsKEllLEl0KXwwKStNYXRoLmltdWwoT2Usb3QpfDAsUz1TK01hdGguaW11bChPZSxJdCl8MCx5PXkrTWF0aC5pbXVsKG10LER0KXwwLHA9KHA9cCtNYXRoLmltdWwobXQsdnQpfDApK01hdGguaW11bChLZSxEdCl8'@;
put 'MCxTPVMrTWF0aC5pbXVsKEtlLHZ0KXwwLHk9eStNYXRoLmltdWwoQmUsTG4pfDAscD0ocD1wK01hdGguaW11bChCZSx6dCl8MCkrTWF0aC5pbXVsKEhlLExuKXwwLFM9UytNYXRoLmltdWwoSGUsenQpfDAseT15K01hdGguaW11bChGZSxUbil8MCxwPShwPXArTWF0aC5pbXVsKEZlLHNuKXww'@;
put 'KStNYXRoLmltdWwoTmUsVG4pfDAsUz1TK01hdGguaW11bChOZSxzbil8MDt2YXIgQnI9KE0rKHk9eStNYXRoLmltdWwoa2UsRm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChrZSxxdCl8MCkrTWF0aC5pbXVsKFRlLEZuKXwwKSk8PDEzKXwwO009KChTPVMrTWF0aC5pbXVsKFRl'@;
put 'LHF0KXwwKSsocD4+PjEzKXwwKSsoQnI+Pj4yNil8MCxCciY9NjcxMDg4NjMseT1NYXRoLmltdWwoUHQsTm4pLHA9KHA9TWF0aC5pbXVsKFB0LHB0KSkrTWF0aC5pbXVsKEF0LE5uKXwwLFM9TWF0aC5pbXVsKEF0LHB0KSx5PXkrTWF0aC5pbXVsKGF0LGhuKXwwLHA9KHA9cCtNYXRoLmltdWwo'@;
put 'YXQsQ3QpfDApK01hdGguaW11bChjdCxobil8MCxTPVMrTWF0aC5pbXVsKGN0LEN0KXwwLHk9eStNYXRoLmltdWwoRWUsX3QpfDAscD0ocD1wK01hdGguaW11bChFZSxWdCl8MCkrTWF0aC5pbXVsKERlLF90KXwwLFM9UytNYXRoLmltdWwoRGUsVnQpfDAseT15K01hdGguaW11bChudCxvdCl8'@;
put 'MCxwPShwPXArTWF0aC5pbXVsKG50LEl0KXwwKStNYXRoLmltdWwocWUsb3QpfDAsUz1TK01hdGguaW11bChxZSxJdCl8MCx5PXkrTWF0aC5pbXVsKEllLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoSWUsdnQpfDApK01hdGguaW11bChPZSxEdCl8MCxTPVMrTWF0aC5pbXVsKE9lLHZ0KXwwLHk9'@;
put 'eStNYXRoLmltdWwobXQsTG4pfDAscD0ocD1wK01hdGguaW11bChtdCx6dCl8MCkrTWF0aC5pbXVsKEtlLExuKXwwLFM9UytNYXRoLmltdWwoS2UsenQpfDAseT15K01hdGguaW11bChCZSxUbil8MCxwPShwPXArTWF0aC5pbXVsKEJlLHNuKXwwKStNYXRoLmltdWwoSGUsVG4pfDAsUz1TK01h'@;
put 'dGguaW11bChIZSxzbil8MDt2YXIgSmk9KE0rKHk9eStNYXRoLmltdWwoRmUsRm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChGZSxxdCl8MCkrTWF0aC5pbXVsKE5lLEZuKXwwKSk8PDEzKXwwO009KChTPVMrTWF0aC5pbXVsKE5lLHF0KXwwKSsocD4+PjEzKXwwKSsoSmk+Pj4y'@;
put 'Nil8MCxKaSY9NjcxMDg4NjMseT1NYXRoLmltdWwoUHQsaG4pLHA9KHA9TWF0aC5pbXVsKFB0LEN0KSkrTWF0aC5pbXVsKEF0LGhuKXwwLFM9TWF0aC5pbXVsKEF0LEN0KSx5PXkrTWF0aC5pbXVsKGF0LF90KXwwLHA9KHA9cCtNYXRoLmltdWwoYXQsVnQpfDApK01hdGguaW11bChjdCxfdCl8'@;
put 'MCxTPVMrTWF0aC5pbXVsKGN0LFZ0KXwwLHk9eStNYXRoLmltdWwoRWUsb3QpfDAscD0ocD1wK01hdGguaW11bChFZSxJdCl8MCkrTWF0aC5pbXVsKERlLG90KXwwLFM9UytNYXRoLmltdWwoRGUsSXQpfDAseT15K01hdGguaW11bChudCxEdCl8MCxwPShwPXArTWF0aC5pbXVsKG50LHZ0KXww'@;
put 'KStNYXRoLmltdWwocWUsRHQpfDAsUz1TK01hdGguaW11bChxZSx2dCl8MCx5PXkrTWF0aC5pbXVsKEllLExuKXwwLHA9KHA9cCtNYXRoLmltdWwoSWUsenQpfDApK01hdGguaW11bChPZSxMbil8MCxTPVMrTWF0aC5pbXVsKE9lLHp0KXwwLHk9eStNYXRoLmltdWwobXQsVG4pfDAscD0ocD1w'@;
put 'K01hdGguaW11bChtdCxzbil8MCkrTWF0aC5pbXVsKEtlLFRuKXwwLFM9UytNYXRoLmltdWwoS2Usc24pfDA7dmFyIHRvPShNKyh5PXkrTWF0aC5pbXVsKEJlLEZuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoQmUscXQpfDApK01hdGguaW11bChIZSxGbil8MCkpPDwxMyl8MDtN'@;
put 'PSgoUz1TK01hdGguaW11bChIZSxxdCl8MCkrKHA+Pj4xMyl8MCkrKHRvPj4+MjYpfDAsdG8mPTY3MTA4ODYzLHk9TWF0aC5pbXVsKFB0LF90KSxwPShwPU1hdGguaW11bChQdCxWdCkpK01hdGguaW11bChBdCxfdCl8MCxTPU1hdGguaW11bChBdCxWdCkseT15K01hdGguaW11bChhdCxvdCl8'@;
put 'MCxwPShwPXArTWF0aC5pbXVsKGF0LEl0KXwwKStNYXRoLmltdWwoY3Qsb3QpfDAsUz1TK01hdGguaW11bChjdCxJdCl8MCx5PXkrTWF0aC5pbXVsKEVlLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoRWUsdnQpfDApK01hdGguaW11bChEZSxEdCl8MCxTPVMrTWF0aC5pbXVsKERlLHZ0KXwwLHk9'@;
put 'eStNYXRoLmltdWwobnQsTG4pfDAscD0ocD1wK01hdGguaW11bChudCx6dCl8MCkrTWF0aC5pbXVsKHFlLExuKXwwLFM9UytNYXRoLmltdWwocWUsenQpfDAseT15K01hdGguaW11bChJZSxUbil8MCxwPShwPXArTWF0aC5pbXVsKEllLHNuKXwwKStNYXRoLmltdWwoT2UsVG4pfDAsUz1TK01h'@;
put 'dGguaW11bChPZSxzbil8MDt2YXIgY289KE0rKHk9eStNYXRoLmltdWwobXQsRm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChtdCxxdCl8MCkrTWF0aC5pbXVsKEtlLEZuKXwwKSk8PDEzKXwwO009KChTPVMrTWF0aC5pbXVsKEtlLHF0KXwwKSsocD4+PjEzKXwwKSsoY28+Pj4y'@;
put 'Nil8MCxjbyY9NjcxMDg4NjMseT1NYXRoLmltdWwoUHQsb3QpLHA9KHA9TWF0aC5pbXVsKFB0LEl0KSkrTWF0aC5pbXVsKEF0LG90KXwwLFM9TWF0aC5pbXVsKEF0LEl0KSx5PXkrTWF0aC5pbXVsKGF0LER0KXwwLHA9KHA9cCtNYXRoLmltdWwoYXQsdnQpfDApK01hdGguaW11bChjdCxEdCl8'@;
put 'MCxTPVMrTWF0aC5pbXVsKGN0LHZ0KXwwLHk9eStNYXRoLmltdWwoRWUsTG4pfDAscD0ocD1wK01hdGguaW11bChFZSx6dCl8MCkrTWF0aC5pbXVsKERlLExuKXwwLFM9UytNYXRoLmltdWwoRGUsenQpfDAseT15K01hdGguaW11bChudCxUbil8MCxwPShwPXArTWF0aC5pbXVsKG50LHNuKXww'@;
put 'KStNYXRoLmltdWwocWUsVG4pfDAsUz1TK01hdGguaW11bChxZSxzbil8MDt2YXIgbG89KE0rKHk9eStNYXRoLmltdWwoSWUsRm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChJZSxxdCl8MCkrTWF0aC5pbXVsKE9lLEZuKXwwKSk8PDEzKXwwO009KChTPVMrTWF0aC5pbXVsKE9l'@;
put 'LHF0KXwwKSsocD4+PjEzKXwwKSsobG8+Pj4yNil8MCxsbyY9NjcxMDg4NjMseT1NYXRoLmltdWwoUHQsRHQpLHA9KHA9TWF0aC5pbXVsKFB0LHZ0KSkrTWF0aC5pbXVsKEF0LER0KXwwLFM9TWF0aC5pbXVsKEF0LHZ0KSx5PXkrTWF0aC5pbXVsKGF0LExuKXwwLHA9KHA9cCtNYXRoLmltdWwo'@;
put 'YXQsenQpfDApK01hdGguaW11bChjdCxMbil8MCxTPVMrTWF0aC5pbXVsKGN0LHp0KXwwLHk9eStNYXRoLmltdWwoRWUsVG4pfDAscD0ocD1wK01hdGguaW11bChFZSxzbil8MCkrTWF0aC5pbXVsKERlLFRuKXwwLFM9UytNYXRoLmltdWwoRGUsc24pfDA7dmFyIHNvPShNKyh5PXkrTWF0aC5p'@;
put 'bXVsKG50LEZuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobnQscXQpfDApK01hdGguaW11bChxZSxGbil8MCkpPDwxMyl8MDtNPSgoUz1TK01hdGguaW11bChxZSxxdCl8MCkrKHA+Pj4xMyl8MCkrKHNvPj4+MjYpfDAsc28mPTY3MTA4ODYzLHk9TWF0aC5pbXVsKFB0LExuKSxw'@;
put 'PShwPU1hdGguaW11bChQdCx6dCkpK01hdGguaW11bChBdCxMbil8MCxTPU1hdGguaW11bChBdCx6dCkseT15K01hdGguaW11bChhdCxUbil8MCxwPShwPXArTWF0aC5pbXVsKGF0LHNuKXwwKStNYXRoLmltdWwoY3QsVG4pfDAsUz1TK01hdGguaW11bChjdCxzbil8MDt2YXIgWGk9KE0rKHk9'@;
put 'eStNYXRoLmltdWwoRWUsRm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChFZSxxdCl8MCkrTWF0aC5pbXVsKERlLEZuKXwwKSk8PDEzKXwwO009KChTPVMrTWF0aC5pbXVsKERlLHF0KXwwKSsocD4+PjEzKXwwKSsoWGk+Pj4yNil8MCxYaSY9NjcxMDg4NjMseT1NYXRoLmltdWwo'@;
put 'UHQsVG4pLHA9KHA9TWF0aC5pbXVsKFB0LHNuKSkrTWF0aC5pbXVsKEF0LFRuKXwwLFM9TWF0aC5pbXVsKEF0LHNuKTt2YXIgcG89KE0rKHk9eStNYXRoLmltdWwoYXQsRm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChhdCxxdCl8MCkrTWF0aC5pbXVsKGN0LEZuKXwwKSk8PDEz'@;
put 'KXwwO009KChTPVMrTWF0aC5pbXVsKGN0LHF0KXwwKSsocD4+PjEzKXwwKSsocG8+Pj4yNil8MCxwbyY9NjcxMDg4NjM7dmFyIF9yPShNKyh5PU1hdGguaW11bChQdCxGbikpfDApKygoODE5MSYocD0ocD1NYXRoLmltdWwoUHQscXQpKStNYXRoLmltdWwoQXQsRm4pfDApKTw8MTMpfDA7cmV0'@;
put 'dXJuIE09KChTPU1hdGguaW11bChBdCxxdCkpKyhwPj4+MTMpfDApKyhfcj4+PjI2KXwwLF9yJj02NzEwODg2MyxDWzBdPUhuLENbMV09aWksQ1syXT1jbixDWzNdPWpuLENbNF09WHIsQ1s1XT12aSxDWzZdPUVyLENbN109WWksQ1s4XT1KcixDWzldPWFvLENbMTBdPUJyLENbMTFdPUppLENb'@;
put 'MTJdPXRvLENbMTNdPWNvLENbMTRdPWxvLENbMTVdPXNvLENbMTZdPVhpLENbMTddPXBvLENbMThdPV9yLDAhPT1NJiYoQ1sxOV09TSxOLmxlbmd0aCsrKSxOfTtmdW5jdGlvbiBXKFksYix4KXtyZXR1cm4obmV3IFUpLm11bHAoWSxiLHgpfWZ1bmN0aW9uIFUoWSxiKXt0aGlzLng9WSx0aGlz'@;
put 'Lnk9Yn1NYXRoLmltdWx8fChWPWopLEgucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKGIseCl7dmFyIE4sRj10aGlzLmxlbmd0aCtiLmxlbmd0aDtyZXR1cm4gTj0xMD09PXRoaXMubGVuZ3RoJiYxMD09PWIubGVuZ3RoP1YodGhpcyxiLHgpOkY8NjM/aih0aGlzLGIseCk6RjwxMDI0P2Z1bmN0'@;
put 'aW9uIEcoWSxiLHgpe3gubmVnYXRpdmU9Yi5uZWdhdGl2ZV5ZLm5lZ2F0aXZlLHgubGVuZ3RoPVkubGVuZ3RoK2IubGVuZ3RoO2Zvcih2YXIgTj0wLEY9MCxnPTA7Zzx4Lmxlbmd0aC0xO2crKyl7dmFyIEM9RjtGPTA7Zm9yKHZhciBNPTY3MTA4ODYzJk4seT1NYXRoLm1pbihnLGIubGVuZ3Ro'@;
put 'LTEpLHA9TWF0aC5tYXgoMCxnLVkubGVuZ3RoKzEpO3A8PXk7cCsrKXt2YXIgZmU9KDB8WS53b3Jkc1tnLXBdKSooMHxiLndvcmRzW3BdKSxtZT02NzEwODg2MyZmZTtNPTY3MTA4ODYzJihtZT1tZStNfDApLEYrPShDPShDPUMrKGZlLzY3MTA4ODY0fDApfDApKyhtZT4+PjI2KXwwKT4+PjI2'@;
put 'LEMmPTY3MTA4ODYzfXgud29yZHNbZ109TSxOPUMsQz1GfXJldHVybiAwIT09Tj94LndvcmRzW2ddPU46eC5sZW5ndGgtLSx4LnN0cmlwKCl9KHRoaXMsYix4KTpXKHRoaXMsYix4KSxOfSxVLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKGIpe2Zvcih2YXIgeD1uZXcgQXJyYXkoYiksTj1I'@;
put 'LnByb3RvdHlwZS5fY291bnRCaXRzKGIpLTEsRj0wO0Y8YjtGKyspeFtGXT10aGlzLnJldkJpbihGLE4sYik7cmV0dXJuIHh9LFUucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihiLHgsTil7aWYoMD09PWJ8fGI9PT1OLTEpcmV0dXJuIGI7Zm9yKHZhciBGPTAsZz0wO2c8eDtnKyspRnw9KDEm'@;
put 'Yik8PHgtZy0xLGI+Pj0xO3JldHVybiBGfSxVLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKGIseCxOLEYsZyxDKXtmb3IodmFyIE09MDtNPEM7TSsrKUZbTV09eFtiW01dXSxnW01dPU5bYltNXV19LFUucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihiLHgsTixGLGcsQyl7dGhpcy5w'@;
put 'ZXJtdXRlKEMsYix4LE4sRixnKTtmb3IodmFyIE09MTtNPGc7TTw8PTEpZm9yKHZhciB5PU08PDEscD1NYXRoLmNvcygyKk1hdGguUEkveSksUz1NYXRoLnNpbigyKk1hdGguUEkveSksUT0wO1E8ZztRKz15KWZvcih2YXIgcmU9cCxmZT1TLG1lPTA7bWU8TTttZSsrKXt2YXIga2U9TltRK21l'@;
put 'XSxUZT1GW1ErbWVdLFBlPU5bUSttZStNXSxGZT1GW1ErbWUrTV0sTmU9cmUqUGUtZmUqRmU7RmU9cmUqRmUrZmUqUGUsTltRK21lXT1rZSsoUGU9TmUpLEZbUSttZV09VGUrRmUsTltRK21lK01dPWtlLVBlLEZbUSttZStNXT1UZS1GZSxtZSE9PXkmJihOZT1wKnJlLVMqZmUsZmU9cCpmZStT'@;
put 'KnJlLHJlPU5lKX19LFUucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKGIseCl7dmFyIE49MXxNYXRoLm1heCh4LGIpLEY9MSZOLGc9MDtmb3IoTj1OLzJ8MDtOO04+Pj49MSlnKys7cmV0dXJuIDE8PGcrMStGfSxVLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oYix4LE4pe2lm'@;
put 'KCEoTjw9MSkpZm9yKHZhciBGPTA7RjxOLzI7RisrKXt2YXIgZz1iW0ZdO2JbRl09YltOLUYtMV0sYltOLUYtMV09ZyxnPXhbRl0seFtGXT0teFtOLUYtMV0seFtOLUYtMV09LWd9fSxVLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oYix4KXtmb3IodmFyIE49MCxGPTA7Rjx4LzI7'@;
put 'RisrKXt2YXIgZz04MTkyKk1hdGgucm91bmQoYlsyKkYrMV0veCkrTWF0aC5yb3VuZChiWzIqRl0veCkrTjtiW0ZdPTY3MTA4ODYzJmcsTj1nPDY3MTA4ODY0PzA6Zy82NzEwODg2NHwwfXJldHVybiBifSxVLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKGIseCxOLEYpe2Zvcih2YXIg'@;
put 'Zz0wLEM9MDtDPHg7QysrKU5bMipDXT04MTkxJihnKz0wfGJbQ10pLE5bMipDKzFdPTgxOTEmKGc+Pj49MTMpLGc+Pj49MTM7Zm9yKEM9Mip4O0M8RjsrK0MpTltDXT0wO3YoMD09PWcpLHYoMD09KC04MTkyJmcpKX0sVS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihiKXtmb3IodmFyIHg9bmV3'@;
put 'IEFycmF5KGIpLE49MDtOPGI7TisrKXhbTl09MDtyZXR1cm4geH0sVS5wcm90b3R5cGUubXVscD1mdW5jdGlvbihiLHgsTil7dmFyIEY9Mip0aGlzLmd1ZXNzTGVuMTNiKGIubGVuZ3RoLHgubGVuZ3RoKSxnPXRoaXMubWFrZVJCVChGKSxDPXRoaXMuc3R1YihGKSxNPW5ldyBBcnJheShGKSx5'@;
put 'PW5ldyBBcnJheShGKSxwPW5ldyBBcnJheShGKSxTPW5ldyBBcnJheShGKSxRPW5ldyBBcnJheShGKSxyZT1uZXcgQXJyYXkoRiksZmU9Ti53b3JkcztmZS5sZW5ndGg9Rix0aGlzLmNvbnZlcnQxM2IoYi53b3JkcyxiLmxlbmd0aCxNLEYpLHRoaXMuY29udmVydDEzYih4LndvcmRzLHgubGVu'@;
put 'Z3RoLFMsRiksdGhpcy50cmFuc2Zvcm0oTSxDLHkscCxGLGcpLHRoaXMudHJhbnNmb3JtKFMsQyxRLHJlLEYsZyk7Zm9yKHZhciBtZT0wO21lPEY7bWUrKyl7dmFyIGtlPXlbbWVdKlFbbWVdLXBbbWVdKnJlW21lXTtwW21lXT15W21lXSpyZVttZV0rcFttZV0qUVttZV0seVttZV09a2V9cmV0'@;
put 'dXJuIHRoaXMuY29uanVnYXRlKHkscCxGKSx0aGlzLnRyYW5zZm9ybSh5LHAsZmUsQyxGLGcpLHRoaXMuY29uanVnYXRlKGZlLEMsRiksdGhpcy5ub3JtYWxpemUxM2IoZmUsRiksTi5uZWdhdGl2ZT1iLm5lZ2F0aXZlXngubmVnYXRpdmUsTi5sZW5ndGg9Yi5sZW5ndGgreC5sZW5ndGgsTi5z'@;
put 'dHJpcCgpfSxILnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oYil7dmFyIHg9bmV3IEgobnVsbCk7cmV0dXJuIHgud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2IubGVuZ3RoKSx0aGlzLm11bFRvKGIseCl9LEgucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oYil7dmFyIHg9bmV3IEgobnVsbCk7'@;
put 'cmV0dXJuIHgud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2IubGVuZ3RoKSxXKHRoaXMsYix4KX0sSC5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKGIsdGhpcyl9LEgucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGIpe3YoIm51bWJlciI9'@;
put 'PXR5cGVvZiBiKSx2KGI8NjcxMDg4NjQpO2Zvcih2YXIgeD0wLE49MDtOPHRoaXMubGVuZ3RoO04rKyl7dmFyIEY9KDB8dGhpcy53b3Jkc1tOXSkqYixnPSg2NzEwODg2MyZGKSsoNjcxMDg4NjMmeCk7eD4+PTI2LHgrPUYvNjcxMDg4NjR8MCx4Kz1nPj4+MjYsdGhpcy53b3Jkc1tOXT02NzEw'@;
put 'ODg2MyZnfXJldHVybiAwIT09eCYmKHRoaXMud29yZHNbTl09eCx0aGlzLmxlbmd0aCsrKSx0aGlzfSxILnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oYil9LEgucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlz'@;
put 'KX0sSC5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sSC5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGIpe3ZhciB4PWZ1bmN0aW9uIHooWSl7Zm9yKHZhciBiPW5ldyBBcnJheShZLmJpdExlbmd0aCgpKSx4PTA7eDxiLmxlbmd0aDt4Kysp'@;
put 'e3ZhciBGPXglMjY7Ylt4XT0oWS53b3Jkc1t4LzI2fDBdJjE8PEYpPj4+Rn1yZXR1cm4gYn0oYik7aWYoMD09PXgubGVuZ3RoKXJldHVybiBuZXcgSCgxKTtmb3IodmFyIE49dGhpcyxGPTA7Rjx4Lmxlbmd0aCYmMD09PXhbRl07RisrLE49Ti5zcXIoKSk7aWYoKytGPHgubGVuZ3RoKWZvcih2'@;
put 'YXIgZz1OLnNxcigpO0Y8eC5sZW5ndGg7RisrLGc9Zy5zcXIoKSkwIT09eFtGXSYmKE49Ti5tdWwoZykpO3JldHVybiBOfSxILnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oYil7digibnVtYmVyIj09dHlwZW9mIGImJmI+PTApO3ZhciBnLHg9YiUyNixOPShiLXgpLzI2LEY9NjcxMDg4NjM+'@;
put 'Pj4yNi14PDwyNi14O2lmKDAhPT14KXt2YXIgQz0wO2ZvcihnPTA7Zzx0aGlzLmxlbmd0aDtnKyspe3ZhciBNPXRoaXMud29yZHNbZ10mRjt0aGlzLndvcmRzW2ddPSgwfHRoaXMud29yZHNbZ10pLU08PHh8QyxDPU0+Pj4yNi14fUMmJih0aGlzLndvcmRzW2ddPUMsdGhpcy5sZW5ndGgrKyl9'@;
put 'aWYoMCE9PU4pe2ZvcihnPXRoaXMubGVuZ3RoLTE7Zz49MDtnLS0pdGhpcy53b3Jkc1tnK05dPXRoaXMud29yZHNbZ107Zm9yKGc9MDtnPE47ZysrKXRoaXMud29yZHNbZ109MDt0aGlzLmxlbmd0aCs9Tn1yZXR1cm4gdGhpcy5zdHJpcCgpfSxILnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihi'@;
put 'KXtyZXR1cm4gdigwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oYil9LEgucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihiLHgsTil7dmFyIEY7digibnVtYmVyIj09dHlwZW9mIGImJmI+PTApLEY9eD8oeC14JTI2KS8yNjowO3ZhciBnPWIlMjYsQz1NYXRoLm1pbigoYi1nKS8yNix0'@;
put 'aGlzLmxlbmd0aCksTT02NzEwODg2M142NzEwODg2Mz4+Pmc8PGcseT1OO2lmKEYtPUMsRj1NYXRoLm1heCgwLEYpLHkpe2Zvcih2YXIgcD0wO3A8QztwKyspeS53b3Jkc1twXT10aGlzLndvcmRzW3BdO3kubGVuZ3RoPUN9aWYoMCE9PUMpaWYodGhpcy5sZW5ndGg+Qylmb3IodGhpcy5sZW5n'@;
put 'dGgtPUMscD0wO3A8dGhpcy5sZW5ndGg7cCsrKXRoaXMud29yZHNbcF09dGhpcy53b3Jkc1twK0NdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIFM9MDtmb3IocD10aGlzLmxlbmd0aC0xO3A+PTAmJigwIT09U3x8cD49Rik7cC0tKXt2YXIgUT0wfHRoaXMud29yZHNb'@;
put 'cF07dGhpcy53b3Jkc1twXT1TPDwyNi1nfFE+Pj5nLFM9USZNfXJldHVybiB5JiYwIT09UyYmKHkud29yZHNbeS5sZW5ndGgrK109UyksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sSC5wcm90b3R5cGUuaXNocm49ZnVuY3Rp'@;
put 'b24oYix4LE4pe3JldHVybiB2KDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihiLHgsTil9LEgucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihiKX0sSC5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUo'@;
put 'KS5pdXNobG4oYil9LEgucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihiKX0sSC5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oYil9LEgucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKGIpe3Yo'@;
put 'Im51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgeD1iJTI2LE49KGIteCkvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9Tnx8ISh0aGlzLndvcmRzW05dJjE8PHgpKX0sSC5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKGIpe3YoIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgeD1iJTI2'@;
put 'LE49KGIteCkvMjY7cmV0dXJuIHYoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD1OP3RoaXM6KDAhPT14JiZOKyssdGhpcy5sZW5ndGg9TWF0aC5taW4oTix0aGlzLmxlbmd0aCksMCE9PXgmJih0aGlzLndv'@;
put 'cmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+Png8PHgpLHRoaXMuc3RyaXAoKSl9LEgucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGIpfSxILnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihiKXtyZXR1cm4gdigibnVt'@;
put 'YmVyIj09dHlwZW9mIGIpLHYoYjw2NzEwODg2NCksYjwwP3RoaXMuaXN1Ym4oLWIpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8Yj8odGhpcy53b3Jkc1swXT1iLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhp'@;
put 'cy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oYiksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGIpfSxILnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oYil7dGhpcy53b3Jkc1swXSs9Yjtmb3IodmFyIHg9MDt4PHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW3hdPj02NzEwODg2NDt4'@;
put 'KyspdGhpcy53b3Jkc1t4XS09NjcxMDg4NjQseD09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1t4KzFdPTE6dGhpcy53b3Jkc1t4KzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLHgrMSksdGhpc30sSC5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oYil7aWYo'@;
put 'digibnVtYmVyIj09dHlwZW9mIGIpLHYoYjw2NzEwODg2NCksYjwwKXJldHVybiB0aGlzLmlhZGRuKC1iKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4oYiksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09YiwxPT09'@;
put 'dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgeD0wO3g8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbeF08MDt4KyspdGhpcy53b3Jkc1t4XSs9NjcxMDg4NjQsdGhpcy53b3Jkc1t4KzFd'@;
put 'LT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LEgucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihiKX0sSC5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKGIpfSxILnByb3RvdHlwZS5pYWJzPWZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxILnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sSC5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKGIseCxOKXt2YXIgZzt0aGlzLl9leHBhbmQoYi5sZW5ndGgrTik7dmFy'@;
put 'IEMsTT0wO2ZvcihnPTA7ZzxiLmxlbmd0aDtnKyspe0M9KDB8dGhpcy53b3Jkc1tnK05dKStNO3ZhciB5PSgwfGIud29yZHNbZ10pKng7TT0oKEMtPTY3MTA4ODYzJnkpPj4yNiktKHkvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tnK05dPTY3MTA4ODYzJkN9Zm9yKDtnPHRoaXMubGVuZ3RoLU47'@;
put 'ZysrKU09KEM9KDB8dGhpcy53b3Jkc1tnK05dKStNKT4+MjYsdGhpcy53b3Jkc1tnK05dPTY3MTA4ODYzJkM7aWYoMD09PU0pcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IodigtMT09PU0pLE09MCxnPTA7Zzx0aGlzLmxlbmd0aDtnKyspTT0oQz0tKDB8dGhpcy53b3Jkc1tnXSkrTSk+PjI2LHRo'@;
put 'aXMud29yZHNbZ109NjcxMDg4NjMmQztyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sSC5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oYix4KXt2YXIgTixGPXRoaXMuY2xvbmUoKSxnPWIsQz0wfGcud29yZHNbZy5sZW5ndGgtMV07MCE9KE49MjYtdGhpcy5fY291bnRC'@;
put 'aXRzKEMpKSYmKGc9Zy51c2hsbihOKSxGLml1c2hsbihOKSxDPTB8Zy53b3Jkc1tnLmxlbmd0aC0xXSk7dmFyIHAseT1GLmxlbmd0aC1nLmxlbmd0aDtpZigibW9kIiE9PXgpeyhwPW5ldyBIKG51bGwpKS5sZW5ndGg9eSsxLHAud29yZHM9bmV3IEFycmF5KHAubGVuZ3RoKTtmb3IodmFyIFM9'@;
put 'MDtTPHAubGVuZ3RoO1MrKylwLndvcmRzW1NdPTB9dmFyIFE9Ri5jbG9uZSgpLl9pc2hsbnN1Ym11bChnLDEseSk7MD09PVEubmVnYXRpdmUmJihGPVEscCYmKHAud29yZHNbeV09MSkpO2Zvcih2YXIgcmU9eS0xO3JlPj0wO3JlLS0pe3ZhciBmZT02NzEwODg2NCooMHxGLndvcmRzW2cubGVu'@;
put 'Z3RoK3JlXSkrKDB8Ri53b3Jkc1tnLmxlbmd0aCtyZS0xXSk7Zm9yKGZlPU1hdGgubWluKGZlL0N8MCw2NzEwODg2MyksRi5faXNobG5zdWJtdWwoZyxmZSxyZSk7MCE9PUYubmVnYXRpdmU7KWZlLS0sRi5uZWdhdGl2ZT0wLEYuX2lzaGxuc3VibXVsKGcsMSxyZSksRi5pc1plcm8oKXx8KEYu'@;
put 'bmVnYXRpdmVePTEpO3AmJihwLndvcmRzW3JlXT1mZSl9cmV0dXJuIHAmJnAuc3RyaXAoKSxGLnN0cmlwKCksImRpdiIhPT14JiYwIT09TiYmRi5pdXNocm4oTikse2RpdjpwfHxudWxsLG1vZDpGfX0sSC5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGIseCxOKXtyZXR1cm4gdighYi5pc1pl'@;
put 'cm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyBIKDApLG1vZDpuZXcgSCgwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1iLm5lZ2F0aXZlPyhDPXRoaXMubmVnKCkuZGl2bW9kKGIseCksIm1vZCIhPT14JiYoRj1DLmRpdi5uZWcoKSksImRpdiIhPT14JiYoZz1DLm1vZC5uZWcoKSxOJiYw'@;
put 'IT09Zy5uZWdhdGl2ZSYmZy5pYWRkKGIpKSx7ZGl2OkYsbW9kOmd9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWIubmVnYXRpdmU/KEM9dGhpcy5kaXZtb2QoYi5uZWcoKSx4KSwibW9kIiE9PXgmJihGPUMuZGl2Lm5lZygpKSx7ZGl2OkYsbW9kOkMubW9kfSk6dGhpcy5uZWdhdGl2ZSZiLm5l'@;
put 'Z2F0aXZlPyhDPXRoaXMubmVnKCkuZGl2bW9kKGIubmVnKCkseCksImRpdiIhPT14JiYoZz1DLm1vZC5uZWcoKSxOJiYwIT09Zy5uZWdhdGl2ZSYmZy5pc3ViKGIpKSx7ZGl2OkMuZGl2LG1vZDpnfSk6Yi5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGIpPDA/e2RpdjpuZXcgSCgwKSxt'@;
put 'b2Q6dGhpc306MT09PWIubGVuZ3RoPyJkaXYiPT09eD97ZGl2OnRoaXMuZGl2bihiLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT14P3tkaXY6bnVsbCxtb2Q6bmV3IEgodGhpcy5tb2RuKGIud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oYi53b3Jkc1swXSksbW9kOm5ldyBIKHRoaXMu'@;
put 'bW9kbihiLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoYix4KTt2YXIgRixnLEN9LEgucHJvdG90eXBlLmRpdj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5kaXZtb2QoYiwiZGl2IiwhMSkuZGl2fSxILnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuZGl2bW9kKGIsIm1v'@;
put 'ZCIsITEpLm1vZH0sSC5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5kaXZtb2QoYiwibW9kIiwhMCkubW9kfSxILnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihiKXt2YXIgeD10aGlzLmRpdm1vZChiKTtpZih4Lm1vZC5pc1plcm8oKSlyZXR1cm4geC5kaXY7dmFy'@;
put 'IE49MCE9PXguZGl2Lm5lZ2F0aXZlP3gubW9kLmlzdWIoYik6eC5tb2QsRj1iLnVzaHJuKDEpLGc9Yi5hbmRsbigxKSxDPU4uY21wKEYpO3JldHVybiBDPDB8fDE9PT1nJiYwPT09Qz94LmRpdjowIT09eC5kaXYubmVnYXRpdmU/eC5kaXYuaXN1Ym4oMSk6eC5kaXYuaWFkZG4oMSl9LEgucHJv'@;
put 'dG90eXBlLm1vZG49ZnVuY3Rpb24oYil7dihiPD02NzEwODg2Myk7Zm9yKHZhciB4PSgxPDwyNiklYixOPTAsRj10aGlzLmxlbmd0aC0xO0Y+PTA7Ri0tKU49KHgqTisoMHx0aGlzLndvcmRzW0ZdKSklYjtyZXR1cm4gTn0sSC5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24oYil7dihiPD02NzEw'@;
put 'ODg2Myk7Zm9yKHZhciB4PTAsTj10aGlzLmxlbmd0aC0xO04+PTA7Ti0tKXt2YXIgRj0oMHx0aGlzLndvcmRzW05dKSs2NzEwODg2NCp4O3RoaXMud29yZHNbTl09Ri9ifDAseD1GJWJ9cmV0dXJuIHRoaXMuc3RyaXAoKX0sSC5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihiKXtyZXR1cm4gdGhp'@;
put 'cy5jbG9uZSgpLmlkaXZuKGIpfSxILnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKGIpe3YoMD09PWIubmVnYXRpdmUpLHYoIWIuaXNaZXJvKCkpO3ZhciB4PXRoaXMsTj1iLmNsb25lKCk7eD0wIT09eC5uZWdhdGl2ZT94LnVtb2QoYik6eC5jbG9uZSgpO2Zvcih2YXIgRj1uZXcgSCgxKSxnPW5l'@;
put 'dyBIKDApLEM9bmV3IEgoMCksTT1uZXcgSCgxKSx5PTA7eC5pc0V2ZW4oKSYmTi5pc0V2ZW4oKTspeC5pdXNocm4oMSksTi5pdXNocm4oMSksKyt5O2Zvcih2YXIgcD1OLmNsb25lKCksUz14LmNsb25lKCk7IXguaXNaZXJvKCk7KXtmb3IodmFyIFE9MCxyZT0xOyEoeC53b3Jkc1swXSZyZSkm'@;
put 'JlE8MjY7KytRLHJlPDw9MSk7aWYoUT4wKWZvcih4Lml1c2hybihRKTtRLS0gPjA7KShGLmlzT2RkKCl8fGcuaXNPZGQoKSkmJihGLmlhZGQocCksZy5pc3ViKFMpKSxGLml1c2hybigxKSxnLml1c2hybigxKTtmb3IodmFyIGZlPTAsbWU9MTshKE4ud29yZHNbMF0mbWUpJiZmZTwyNjsrK2Zl'@;
put 'LG1lPDw9MSk7aWYoZmU+MClmb3IoTi5pdXNocm4oZmUpO2ZlLS0gPjA7KShDLmlzT2RkKCl8fE0uaXNPZGQoKSkmJihDLmlhZGQocCksTS5pc3ViKFMpKSxDLml1c2hybigxKSxNLml1c2hybigxKTt4LmNtcChOKT49MD8oeC5pc3ViKE4pLEYuaXN1YihDKSxnLmlzdWIoTSkpOihOLmlzdWIo'@;
put 'eCksQy5pc3ViKEYpLE0uaXN1YihnKSl9cmV0dXJue2E6QyxiOk0sZ2NkOk4uaXVzaGxuKHkpfX0sSC5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKGIpe3YoMD09PWIubmVnYXRpdmUpLHYoIWIuaXNaZXJvKCkpO3ZhciBRLHg9dGhpcyxOPWIuY2xvbmUoKTt4PTAhPT14Lm5lZ2F0aXZlP3gu'@;
put 'dW1vZChiKTp4LmNsb25lKCk7Zm9yKHZhciBGPW5ldyBIKDEpLGc9bmV3IEgoMCksQz1OLmNsb25lKCk7eC5jbXBuKDEpPjAmJk4uY21wbigxKT4wOyl7Zm9yKHZhciBNPTAseT0xOyEoeC53b3Jkc1swXSZ5KSYmTTwyNjsrK00seTw8PTEpO2lmKE0+MClmb3IoeC5pdXNocm4oTSk7TS0tID4w'@;
put 'OylGLmlzT2RkKCkmJkYuaWFkZChDKSxGLml1c2hybigxKTtmb3IodmFyIHA9MCxTPTE7IShOLndvcmRzWzBdJlMpJiZwPDI2OysrcCxTPDw9MSk7aWYocD4wKWZvcihOLml1c2hybihwKTtwLS0gPjA7KWcuaXNPZGQoKSYmZy5pYWRkKEMpLGcuaXVzaHJuKDEpO3guY21wKE4pPj0wPyh4Lmlz'@;
put 'dWIoTiksRi5pc3ViKGcpKTooTi5pc3ViKHgpLGcuaXN1YihGKSl9cmV0dXJuKFE9MD09PXguY21wbigxKT9GOmcpLmNtcG4oMCk8MCYmUS5pYWRkKGIpLFF9LEgucHJvdG90eXBlLmdjZD1mdW5jdGlvbihiKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBiLmFicygpO2lmKGIuaXNaZXJvKCkp'@;
put 'cmV0dXJuIHRoaXMuYWJzKCk7dmFyIHg9dGhpcy5jbG9uZSgpLE49Yi5jbG9uZSgpO3gubmVnYXRpdmU9MCxOLm5lZ2F0aXZlPTA7Zm9yKHZhciBGPTA7eC5pc0V2ZW4oKSYmTi5pc0V2ZW4oKTtGKyspeC5pdXNocm4oMSksTi5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO3guaXNFdmVuKCk7KXgu'@;
put 'aXVzaHJuKDEpO2Zvcig7Ti5pc0V2ZW4oKTspTi5pdXNocm4oMSk7dmFyIGc9eC5jbXAoTik7aWYoZzwwKXt2YXIgQz14O3g9TixOPUN9ZWxzZSBpZigwPT09Z3x8MD09PU4uY21wbigxKSlicmVhazt4LmlzdWIoTil9cmV0dXJuIE4uaXVzaGxuKEYpfSxILnByb3RvdHlwZS5pbnZtPWZ1bmN0'@;
put 'aW9uKGIpe3JldHVybiB0aGlzLmVnY2QoYikuYS51bW9kKGIpfSxILnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09KDEmdGhpcy53b3Jkc1swXSl9LEgucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PSgxJnRoaXMud29yZHNbMF0pfSxILnByb3RvdHlw'@;
put 'ZS5hbmRsbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZifSxILnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihiKXt2KCJudW1iZXIiPT10eXBlb2YgYik7dmFyIHg9YiUyNixOPShiLXgpLzI2LEY9MTw8eDtpZih0aGlzLmxlbmd0aDw9TilyZXR1cm4gdGhpcy5fZXhwYW5kKE4r'@;
put 'MSksdGhpcy53b3Jkc1tOXXw9Rix0aGlzO2Zvcih2YXIgZz1GLEM9TjswIT09ZyYmQzx0aGlzLmxlbmd0aDtDKyspe3ZhciBNPTB8dGhpcy53b3Jkc1tDXTtnPShNKz1nKT4+PjI2LHRoaXMud29yZHNbQ109TSY9NjcxMDg4NjN9cmV0dXJuIDAhPT1nJiYodGhpcy53b3Jkc1tDXT1nLHRoaXMu'@;
put 'bGVuZ3RoKyspLHRoaXN9LEgucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxILnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKGIpe3ZhciBOLHg9YjwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYheClyZXR1cm4tMTtp'@;
put 'ZigwPT09dGhpcy5uZWdhdGl2ZSYmeClyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSlOPTE7ZWxzZXt4JiYoYj0tYiksdihiPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgRj0wfHRoaXMud29yZHNbMF07Tj1GPT09Yj8wOkY8Yj8tMToxfXJldHVybiAw'@;
put 'IT09dGhpcy5uZWdhdGl2ZT8wfC1OOk59LEgucHJvdG90eXBlLmNtcD1mdW5jdGlvbihiKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWIubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1iLm5lZ2F0aXZlKXJldHVybiAxO3ZhciB4PXRoaXMudWNtcChiKTty'@;
put 'ZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwteDp4fSxILnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKGIpe2lmKHRoaXMubGVuZ3RoPmIubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPGIubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgeD0wLE49dGhpcy5sZW5ndGgtMTtOPj0wO04tLSl7'@;
put 'dmFyIEY9MHx0aGlzLndvcmRzW05dLGc9MHxiLndvcmRzW05dO2lmKEYhPT1nKXtGPGc/eD0tMTpGPmcmJih4PTEpO2JyZWFrfX1yZXR1cm4geH0sSC5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKGIpe3JldHVybiAxPT09dGhpcy5jbXBuKGIpfSxILnByb3RvdHlwZS5ndD1mdW5jdGlvbihiKXty'@;
put 'ZXR1cm4gMT09PXRoaXMuY21wKGIpfSxILnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNtcG4oYik+PTB9LEgucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbXAoYik+PTB9LEgucHJvdG90eXBlLmx0bj1mdW5jdGlvbihiKXtyZXR1cm4tMT09'@;
put 'PXRoaXMuY21wbihiKX0sSC5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oYil7cmV0dXJuLTE9PT10aGlzLmNtcChiKX0sSC5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbXBuKGIpPD0wfSxILnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY21wKGIp'@;
put 'PD0wfSxILnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oYil7cmV0dXJuIDA9PT10aGlzLmNtcG4oYil9LEgucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGIpe3JldHVybiAwPT09dGhpcy5jbXAoYil9LEgucmVkPWZ1bmN0aW9uKGIpe3JldHVybiBuZXcgdWUoYil9LEgucHJvdG90eXBlLnRvUmVkPWZ1'@;
put 'bmN0aW9uKGIpe3JldHVybiB2KCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHYoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksYi5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGIpfSxILnByb3RvdHlw'@;
put 'ZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHYodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sSC5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKGIpe3JldHVybiB0'@;
put 'aGlzLnJlZD1iLHRoaXN9LEgucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKGIpe3JldHVybiB2KCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKGIpfSxILnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oYil7cmV0dXJu'@;
put 'IHYodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxiKX0sSC5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihiKXtyZXR1cm4gdih0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlz'@;
put 'LnJlZC5pYWRkKHRoaXMsYil9LEgucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihiKXtyZXR1cm4gdih0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLGIpfSxILnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKGIpe3JldHVy'@;
put 'biB2KHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxiKX0sSC5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGIpe3JldHVybiB2KHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhp'@;
put 'cy5yZWQuc2hsKHRoaXMsYil9LEgucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihiKXtyZXR1cm4gdih0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsYiksdGhpcy5yZWQubXVsKHRoaXMsYil9LEgucHJvdG90eXBl'@;
put 'LnJlZElNdWw9ZnVuY3Rpb24oYil7cmV0dXJuIHYodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGIpLHRoaXMucmVkLmltdWwodGhpcyxiKX0sSC5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHYo'@;
put 'dGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LEgucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdih0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGgg'@;
put 'cmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxILnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHYodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEo'@;
put 'dGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sSC5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiB2KHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LEgucHJv'@;
put 'dG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiB2KHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxILnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oYil7cmV0dXJuIHYo'@;
put 'dGhpcy5yZWQmJiFiLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxiKX07dmFyIHE9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiB0ZShZLGIpe3RoaXMubmFtZT1ZLHRo'@;
put 'aXMucD1uZXcgSChiLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgSCgxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gbmUoKXt0ZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZm'@;
put 'ZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIGllKCl7dGUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBsZSgp'@;
put 'e3RlLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gZGUoKXt0ZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYg'@;
put 'ZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIHVlKFkpe2lmKCJzdHJpbmciPT10eXBlb2YgWSl7dmFyIGI9SC5fcHJpbWUoWSk7dGhpcy5tPWIucCx0aGlzLnByaW1lPWJ9ZWxzZSB2KFkuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09WSx0aGlzLnBy'@;
put 'aW1lPW51bGx9ZnVuY3Rpb24gY2UoWSl7dWUuY2FsbCh0aGlzLFkpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IEgoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhp'@;
put 'cy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMu'@;
put 'bWludil9dGUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgYj1uZXcgSChudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLGJ9LHRlLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKGIpe3ZhciBOLHg9Yjtkb3t0aGlzLnNwbGl0KHgsdGhp'@;
put 'cy50bXApLE49KHg9KHg9dGhpcy5pbXVsSyh4KSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKE4+dGhpcy5uKTt2YXIgRj1OPHRoaXMubj8tMTp4LnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PUY/KHgud29yZHNbMF09MCx4Lmxlbmd0aD0xKTpGPjA/eC5pc3ViKHRoaXMucCk6'@;
put 'dm9pZCAwIT09eC5zdHJpcD94LnN0cmlwKCk6eC5fc3RyaXAoKSx4fSx0ZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oYix4KXtiLml1c2hybih0aGlzLm4sMCx4KX0sdGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGIpe3JldHVybiBiLmltdWwodGhpcy5rKX0saGUobmUsdGUpLG5lLnBy'@;
put 'b3RvdHlwZS5zcGxpdD1mdW5jdGlvbihiLHgpe2Zvcih2YXIgTj00MTk0MzAzLEY9TWF0aC5taW4oYi5sZW5ndGgsOSksZz0wO2c8RjtnKyspeC53b3Jkc1tnXT1iLndvcmRzW2ddO2lmKHgubGVuZ3RoPUYsYi5sZW5ndGg8PTkpcmV0dXJuIGIud29yZHNbMF09MCx2b2lkKGIubGVuZ3RoPTEp'@;
put 'O3ZhciBDPWIud29yZHNbOV07Zm9yKHgud29yZHNbeC5sZW5ndGgrK109QyZOLGc9MTA7ZzxiLmxlbmd0aDtnKyspe3ZhciBNPTB8Yi53b3Jkc1tnXTtiLndvcmRzW2ctMTBdPShNJk4pPDw0fEM+Pj4yMixDPU19Yi53b3Jkc1tnLTEwXT1DPj4+PTIyLGIubGVuZ3RoLT0wPT09QyYmYi5sZW5n'@;
put 'dGg+MTA/MTA6OX0sbmUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGIpe2Iud29yZHNbYi5sZW5ndGhdPTAsYi53b3Jkc1tiLmxlbmd0aCsxXT0wLGIubGVuZ3RoKz0yO2Zvcih2YXIgeD0wLE49MDtOPGIubGVuZ3RoO04rKyl7dmFyIEY9MHxiLndvcmRzW05dO2Iud29yZHNbTl09NjcxMDg4'@;
put 'NjMmKHgrPTk3NypGKSx4PTY0KkYrKHgvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1iLndvcmRzW2IubGVuZ3RoLTFdJiYoYi5sZW5ndGgtLSwwPT09Yi53b3Jkc1tiLmxlbmd0aC0xXSYmYi5sZW5ndGgtLSksYn0saGUoaWUsdGUpLGhlKGxlLHRlKSxoZShkZSx0ZSksZGUucHJvdG90eXBlLmlt'@;
put 'dWxLPWZ1bmN0aW9uKGIpe2Zvcih2YXIgeD0wLE49MDtOPGIubGVuZ3RoO04rKyl7dmFyIEY9MTkqKDB8Yi53b3Jkc1tOXSkreCxnPTY3MTA4ODYzJkY7Rj4+Pj0yNixiLndvcmRzW05dPWcseD1GfXJldHVybiAwIT09eCYmKGIud29yZHNbYi5sZW5ndGgrK109eCksYn0sSC5fcHJpbWU9ZnVu'@;
put 'Y3Rpb24oYil7aWYocVtiXSlyZXR1cm4gcVtiXTt2YXIgeDtpZigiazI1NiI9PT1iKXg9bmV3IG5lO2Vsc2UgaWYoInAyMjQiPT09Yil4PW5ldyBpZTtlbHNlIGlmKCJwMTkyIj09PWIpeD1uZXcgbGU7ZWxzZXtpZigicDI1NTE5IiE9PWIpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1l'@;
put 'ICIrYik7eD1uZXcgZGV9cmV0dXJuIHFbYl09eCx4fSx1ZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oYil7digwPT09Yi5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSx2KGIucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LHVlLnBy'@;
put 'b3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihiLHgpe3YoMD09KGIubmVnYXRpdmV8eC5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksdihiLnJlZCYmYi5yZWQ9PT14LnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSx1ZS5wcm90b3R5cGUu'@;
put 'aW1vZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoYikuX2ZvcmNlUmVkKHRoaXMpOmIudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sdWUucHJvdG90eXBlLm5lZz1mdW5jdGlvbihiKXtyZXR1cm4gYi5pc1plcm8oKT9iLmNsb25lKCk6dGhp'@;
put 'cy5tLnN1YihiKS5fZm9yY2VSZWQodGhpcyl9LHVlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYix4KXt0aGlzLl92ZXJpZnkyKGIseCk7dmFyIE49Yi5hZGQoeCk7cmV0dXJuIE4uY21wKHRoaXMubSk+PTAmJk4uaXN1Yih0aGlzLm0pLE4uX2ZvcmNlUmVkKHRoaXMpfSx1ZS5wcm90b3R5cGUu'@;
put 'aWFkZD1mdW5jdGlvbihiLHgpe3RoaXMuX3ZlcmlmeTIoYix4KTt2YXIgTj1iLmlhZGQoeCk7cmV0dXJuIE4uY21wKHRoaXMubSk+PTAmJk4uaXN1Yih0aGlzLm0pLE59LHVlLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oYix4KXt0aGlzLl92ZXJpZnkyKGIseCk7dmFyIE49Yi5zdWIoeCk7cmV0'@;
put 'dXJuIE4uY21wbigwKTwwJiZOLmlhZGQodGhpcy5tKSxOLl9mb3JjZVJlZCh0aGlzKX0sdWUucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oYix4KXt0aGlzLl92ZXJpZnkyKGIseCk7dmFyIE49Yi5pc3ViKHgpO3JldHVybiBOLmNtcG4oMCk8MCYmTi5pYWRkKHRoaXMubSksTn0sdWUucHJvdG90'@;
put 'eXBlLnNobD1mdW5jdGlvbihiLHgpe3JldHVybiB0aGlzLl92ZXJpZnkxKGIpLHRoaXMuaW1vZChiLnVzaGxuKHgpKX0sdWUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oYix4KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihiLHgpLHRoaXMuaW1vZChiLmltdWwoeCkpfSx1ZS5wcm90b3R5cGUubXVs'@;
put 'PWZ1bmN0aW9uKGIseCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoYix4KSx0aGlzLmltb2QoYi5tdWwoeCkpfSx1ZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5pbXVsKGIsYi5jbG9uZSgpKX0sdWUucHJvdG90eXBlLnNxcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5t'@;
put 'dWwoYixiKX0sdWUucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oYil7aWYoYi5pc1plcm8oKSlyZXR1cm4gYi5jbG9uZSgpO3ZhciB4PXRoaXMubS5hbmRsbigzKTtpZih2KHglMj09MSksMz09PXgpe3ZhciBOPXRoaXMubS5hZGQobmV3IEgoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3co'@;
put 'YixOKX1mb3IodmFyIEY9dGhpcy5tLnN1Ym4oMSksZz0wOyFGLmlzWmVybygpJiYwPT09Ri5hbmRsbigxKTspZysrLEYuaXVzaHJuKDEpO3YoIUYuaXNaZXJvKCkpO3ZhciBDPW5ldyBIKDEpLnRvUmVkKHRoaXMpLE09Qy5yZWROZWcoKSx5PXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxwPXRo'@;
put 'aXMubS5iaXRMZW5ndGgoKTtmb3IocD1uZXcgSCgyKnAqcCkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KHAseSkuY21wKE0pOylwLnJlZElBZGQoTSk7Zm9yKHZhciBTPXRoaXMucG93KHAsRiksUT10aGlzLnBvdyhiLEYuYWRkbigxKS5pdXNocm4oMSkpLHJlPXRoaXMucG93KGIsRiksZmU9'@;
put 'ZzswIT09cmUuY21wKEMpOyl7Zm9yKHZhciBtZT1yZSxrZT0wOzAhPT1tZS5jbXAoQyk7a2UrKyltZT1tZS5yZWRTcXIoKTt2KGtlPGZlKTt2YXIgVGU9dGhpcy5wb3coUyxuZXcgSCgxKS5pdXNobG4oZmUta2UtMSkpO1E9US5yZWRNdWwoVGUpLFM9VGUucmVkU3FyKCkscmU9cmUucmVkTXVs'@;
put 'KFMpLGZlPWtlfXJldHVybiBRfSx1ZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihiKXt2YXIgeD1iLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09eC5uZWdhdGl2ZT8oeC5uZWdhdGl2ZT0wLHRoaXMuaW1vZCh4KS5yZWROZWcoKSk6dGhpcy5pbW9kKHgpfSx1ZS5wcm90b3R5cGUucG93PWZ1'@;
put 'bmN0aW9uKGIseCl7aWYoeC5pc1plcm8oKSlyZXR1cm4gbmV3IEgoMSkudG9SZWQodGhpcyk7aWYoMD09PXguY21wbigxKSlyZXR1cm4gYi5jbG9uZSgpO3ZhciBGPW5ldyBBcnJheSgxNik7RlswXT1uZXcgSCgxKS50b1JlZCh0aGlzKSxGWzFdPWI7Zm9yKHZhciBnPTI7ZzxGLmxlbmd0aDtn'@;
put 'KyspRltnXT10aGlzLm11bChGW2ctMV0sYik7dmFyIEM9RlswXSxNPTAseT0wLHA9eC5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PXAmJihwPTI2KSxnPXgubGVuZ3RoLTE7Zz49MDtnLS0pe2Zvcih2YXIgUz14LndvcmRzW2ddLFE9cC0xO1E+PTA7US0tKXt2YXIgcmU9Uz4+USYxO0MhPT1GWzBd'@;
put 'JiYoQz10aGlzLnNxcihDKSksMCE9PXJlfHwwIT09TT8oTTw8PTEsTXw9cmUsKDQ9PSsreXx8MD09PWcmJjA9PT1RKSYmKEM9dGhpcy5tdWwoQyxGW01dKSx5PTAsTT0wKSk6eT0wfXA9MjZ9cmV0dXJuIEN9LHVlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oYil7dmFyIHg9Yi51bW9k'@;
put 'KHRoaXMubSk7cmV0dXJuIHg9PT1iP3guY2xvbmUoKTp4fSx1ZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oYil7dmFyIHg9Yi5jbG9uZSgpO3JldHVybiB4LnJlZD1udWxsLHh9LEgubW9udD1mdW5jdGlvbihiKXtyZXR1cm4gbmV3IGNlKGIpfSxoZShjZSx1ZSksY2UucHJvdG90'@;
put 'eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5pbW9kKGIudXNobG4odGhpcy5zaGlmdCkpfSxjZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oYil7dmFyIHg9dGhpcy5pbW9kKGIubXVsKHRoaXMucmludikpO3JldHVybiB4LnJlZD1udWxsLHh9LGNlLnByb3Rv'@;
put 'dHlwZS5pbXVsPWZ1bmN0aW9uKGIseCl7aWYoYi5pc1plcm8oKXx8eC5pc1plcm8oKSlyZXR1cm4gYi53b3Jkc1swXT0wLGIubGVuZ3RoPTEsYjt2YXIgTj1iLmltdWwoeCksRj1OLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5t'@;
put 'KSxnPU4uaXN1YihGKS5pdXNocm4odGhpcy5zaGlmdCksQz1nO3JldHVybiBnLmNtcCh0aGlzLm0pPj0wP0M9Zy5pc3ViKHRoaXMubSk6Zy5jbXBuKDApPDAmJihDPWcuaWFkZCh0aGlzLm0pKSxDLl9mb3JjZVJlZCh0aGlzKX0sY2UucHJvdG90eXBlLm11bD1mdW5jdGlvbihiLHgpe2lmKGIu'@;
put 'aXNaZXJvKCl8fHguaXNaZXJvKCkpcmV0dXJuIG5ldyBIKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgTj1iLm11bCh4KSxGPU4ubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGc9Ti5pc3ViKEYpLml1c2hybih0aGlzLnNoaWZ0'@;
put 'KSxDPWc7cmV0dXJuIGcuY21wKHRoaXMubSk+PTA/Qz1nLmlzdWIodGhpcy5tKTpnLmNtcG4oMCk8MCYmKEM9Zy5pYWRkKHRoaXMubSkpLEMuX2ZvcmNlUmVkKHRoaXMpfSxjZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5pbW9kKGIuX2ludm1wKHRoaXMubSkubXVs'@;
put 'KHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShXZT1ULm5tZChXZSksdGhpcyl9LDM2MDcyOihXZSx6ZSk9PnshZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7Zm9yKHZhciBUPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsv'@;
put 'IixzZT1uZXcgVWludDhBcnJheSgyNTYpLGs9MDtrPDY0O2srKylzZVtULmNoYXJDb2RlQXQoayldPWs7emUuYz1mdW5jdGlvbih2KXt2YXIgSCxoZT1uZXcgVWludDhBcnJheSh2KSxCPWhlLmxlbmd0aCxMPSIiO2ZvcihIPTA7SDxCO0grPTMpTCs9VFtoZVtIXT4+Ml0sTCs9VFsoMyZoZVtI'@;
put 'XSk8PDR8aGVbSCsxXT4+NF0sTCs9VFsoMTUmaGVbSCsxXSk8PDJ8aGVbSCsyXT4+Nl0sTCs9VFs2MyZoZVtIKzJdXTtyZXR1cm4gQiUzPT0yP0w9TC5zdWJzdHJpbmcoMCxMLmxlbmd0aC0xKSsiPSI6QiUzPT0xJiYoTD1MLnN1YnN0cmluZygwLEwubGVuZ3RoLTIpKyI9PSIpLEx9LHplLko9'@;
put 'ZnVuY3Rpb24odil7dmFyIEIsSyxKLEksUixoZT0uNzUqdi5sZW5ndGgsSD12Lmxlbmd0aCxMPTA7Ij0iPT09dlt2Lmxlbmd0aC0xXSYmKGhlLS0sIj0iPT09dlt2Lmxlbmd0aC0yXSYmaGUtLSk7dmFyIEU9bmV3IEFycmF5QnVmZmVyKGhlKSx6PW5ldyBVaW50OEFycmF5KEUpO2ZvcihCPTA7'@;
put 'QjxIO0IrPTQpSz1zZVt2LmNoYXJDb2RlQXQoQildLEo9c2Vbdi5jaGFyQ29kZUF0KEIrMSldLEk9c2Vbdi5jaGFyQ29kZUF0KEIrMildLFI9c2Vbdi5jaGFyQ29kZUF0KEIrMyldLHpbTCsrXT1LPDwyfEo+PjQseltMKytdPSgxNSZKKTw8NHxJPj4yLHpbTCsrXT0oMyZJKTw8Nnw2MyZSO3Jl'@;
put 'dHVybiBFfX0oKX0sOTkxOTooV2UsemUpPT57InVzZSBzdHJpY3QiO3plLmJ5dGVMZW5ndGg9ZnVuY3Rpb24gTCh6KXt2YXIgaj1CKHopLEc9alsxXTtyZXR1cm4gMyooalswXStHKS80LUd9LHplLnRvQnl0ZUFycmF5PWZ1bmN0aW9uIEooeil7dmFyIGosbmUsVj1CKHopLEc9VlswXSxXPVZb'@;
put 'MV0sVT1uZXcgayhmdW5jdGlvbiBLKHosaixWKXtyZXR1cm4gMyooaitWKS80LVZ9KDAsRyxXKSkscT0wLHRlPVc+MD9HLTQ6Rztmb3IobmU9MDtuZTx0ZTtuZSs9NClqPXNlW3ouY2hhckNvZGVBdChuZSldPDwxOHxzZVt6LmNoYXJDb2RlQXQobmUrMSldPDwxMnxzZVt6LmNoYXJDb2RlQXQo'@;
put 'bmUrMildPDw2fHNlW3ouY2hhckNvZGVBdChuZSszKV0sVVtxKytdPWo+PjE2JjI1NSxVW3ErK109aj4+OCYyNTUsVVtxKytdPTI1NSZqO3JldHVybiAyPT09VyYmKGo9c2Vbei5jaGFyQ29kZUF0KG5lKV08PDJ8c2Vbei5jaGFyQ29kZUF0KG5lKzEpXT4+NCxVW3ErK109MjU1JmopLDE9PT1X'@;
put 'JiYoaj1zZVt6LmNoYXJDb2RlQXQobmUpXTw8MTB8c2Vbei5jaGFyQ29kZUF0KG5lKzEpXTw8NHxzZVt6LmNoYXJDb2RlQXQobmUrMildPj4yLFVbcSsrXT1qPj44JjI1NSxVW3ErK109MjU1JmopLFV9LHplLmZyb21CeXRlQXJyYXk9ZnVuY3Rpb24gRSh6KXtmb3IodmFyIGosVj16Lmxlbmd0'@;
put 'aCxHPVYlMyxXPVtdLFU9MTYzODMscT0wLHRlPVYtRztxPHRlO3ErPVUpVy5wdXNoKFIoeixxLHErVT50ZT90ZTpxK1UpKTtyZXR1cm4gMT09PUc/Vy5wdXNoKFRbKGo9eltWLTFdKT4+Ml0rVFtqPDw0JjYzXSsiPT0iKToyPT09RyYmVy5wdXNoKFRbKGo9KHpbVi0yXTw8OCkreltWLTFdKT4+'@;
put 'MTBdK1Rbaj4+NCY2M10rVFtqPDwyJjYzXSsiPSIpLFcuam9pbigiIil9O2Zvcih2YXIgVD1bXSxzZT1bXSxrPXR5cGVvZiBVaW50OEFycmF5PCJ1Ij9VaW50OEFycmF5OkFycmF5LHY9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2'@;
put 'Nzg5Ky8iLGhlPTA7aGU8NjQ7KytoZSlUW2hlXT12W2hlXSxzZVt2LmNoYXJDb2RlQXQoaGUpXT1oZTtmdW5jdGlvbiBCKHope3ZhciBqPXoubGVuZ3RoO2lmKGolND4wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCIpO3Zh'@;
put 'ciBWPXouaW5kZXhPZigiPSIpO3JldHVybi0xPT09ViYmKFY9aiksW1YsVj09PWo/MDo0LVYlNF19ZnVuY3Rpb24gSSh6KXtyZXR1cm4gVFt6Pj4xOCY2M10rVFt6Pj4xMiY2M10rVFt6Pj42JjYzXStUWzYzJnpdfWZ1bmN0aW9uIFIoeixqLFYpe2Zvcih2YXIgVz1bXSxVPWo7VTxWO1UrPTMp'@;
put 'Vy5wdXNoKEkoKHpbVV08PDE2JjE2NzExNjgwKSsoeltVKzFdPDw4JjY1MjgwKSsoMjU1JnpbVSsyXSkpKTtyZXR1cm4gVy5qb2luKCIiKX1zZVsiLSIuY2hhckNvZGVBdCgwKV09NjIsc2VbIl8iLmNoYXJDb2RlQXQoMCldPTYzfSw2MjY2MjpmdW5jdGlvbihXZSx6ZSxUKXshZnVuY3Rpb24o'@;
put 'c2Usayl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHYoTixGKXtpZighTil0aHJvdyBuZXcgRXJyb3IoRnx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBoZShOLEYpe04uc3VwZXJfPUY7dmFyIGc9ZnVuY3Rpb24oKXt9O2cucHJvdG90eXBlPUYucHJvdG90eXBlLE4ucHJvdG90eXBlPW5l'@;
put 'dyBnLE4ucHJvdG90eXBlLmNvbnN0cnVjdG9yPU59ZnVuY3Rpb24gSChOLEYsZyl7aWYoSC5pc0JOKE4pKXJldHVybiBOO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1OJiYoKCJsZSI9PT1GfHwiYmUiPT09RikmJihn'@;
put 'PUYsRj0xMCksdGhpcy5faW5pdChOfHwwLEZ8fDEwLGd8fCJiZSIpKX12YXIgQjsib2JqZWN0Ij09dHlwZW9mIHNlP3NlLmV4cG9ydHM9SDprLkJOPUgsSC5CTj1ILEgud29yZFNpemU9MjY7dHJ5e0I9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cu'@;
put 'QnVmZmVyOlQoNDY2MDEpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gTChOLEYpe3ZhciBnPU4uY2hhckNvZGVBdChGKTtyZXR1cm4gZz49NDgmJmc8PTU3P2ctNDg6Zz49NjUmJmc8PTcwP2ctNTU6Zz49OTcmJmc8PTEwMj9nLTg3OnZvaWQgdighMSwiSW52YWxpZCBjaGFyYWN0ZXIgaW4gIitO'@;
put 'KX1mdW5jdGlvbiBLKE4sRixnKXt2YXIgQz1MKE4sZyk7cmV0dXJuIGctMT49RiYmKEN8PUwoTixnLTEpPDw0KSxDfWZ1bmN0aW9uIEooTixGLGcsQyl7Zm9yKHZhciBNPTAseT0wLHA9TWF0aC5taW4oTi5sZW5ndGgsZyksUz1GO1M8cDtTKyspe3ZhciBRPU4uY2hhckNvZGVBdChTKS00ODtN'@;
put 'Kj1DLHk9UT49NDk/US00OSsxMDpRPj0xNz9RLTE3KzEwOlEsdihRPj0wJiZ5PEMsIkludmFsaWQgY2hhcmFjdGVyIiksTSs9eX1yZXR1cm4gTX1mdW5jdGlvbiBJKE4sRil7Ti53b3Jkcz1GLndvcmRzLE4ubGVuZ3RoPUYubGVuZ3RoLE4ubmVnYXRpdmU9Ri5uZWdhdGl2ZSxOLnJlZD1GLnJl'@;
put 'ZH1pZihILmlzQk49ZnVuY3Rpb24oRil7cmV0dXJuIEYgaW5zdGFuY2VvZiBIfHxudWxsIT09RiYmIm9iamVjdCI9PXR5cGVvZiBGJiZGLmNvbnN0cnVjdG9yLndvcmRTaXplPT09SC53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShGLndvcmRzKX0sSC5tYXg9ZnVuY3Rpb24oRixnKXtyZXR1cm4g'@;
put 'Ri5jbXAoZyk+MD9GOmd9LEgubWluPWZ1bmN0aW9uKEYsZyl7cmV0dXJuIEYuY21wKGcpPDA/RjpnfSxILnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihGLGcsQyl7aWYoIm51bWJlciI9PXR5cGVvZiBGKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKEYsZyxDKTtpZigib2JqZWN0Ij09dHlwZW9m'@;
put 'IEYpcmV0dXJuIHRoaXMuX2luaXRBcnJheShGLGcsQyk7ImhleCI9PT1nJiYoZz0xNiksdihnPT09KDB8ZykmJmc+PTImJmc8PTM2KTt2YXIgTT0wOyItIj09PShGPUYudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoTSsrLHRoaXMubmVnYXRpdmU9MSksTTxGLmxlbmd0aCYm'@;
put 'KDE2PT09Zz90aGlzLl9wYXJzZUhleChGLE0sQyk6KHRoaXMuX3BhcnNlQmFzZShGLGcsTSksImxlIj09PUMmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxnLEMpKSl9LEgucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKEYsZyxDKXtGPDAmJih0aGlzLm5lZ2F0aXZlPTEs'@;
put 'Rj0tRiksRjw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmRl0sdGhpcy5sZW5ndGg9MSk6Rjw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZGLEYvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOih2KEY8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53'@;
put 'b3Jkcz1bNjcxMDg4NjMmRixGLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT1DJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksZyxDKX0sSC5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihGLGcsQyl7aWYodigibnVtYmVyIj09dHlwZW9mIEYu'@;
put 'bGVuZ3RoKSxGLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChGLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBNPTA7TTx0aGlzLmxlbmd0aDtNKyspdGhpcy53'@;
put 'b3Jkc1tNXT0wO3ZhciB5LHAsUz0wO2lmKCJiZSI9PT1DKWZvcihNPUYubGVuZ3RoLTEseT0wO00+PTA7TS09Myl0aGlzLndvcmRzW3ldfD0ocD1GW01dfEZbTS0xXTw8OHxGW00tMl08PDE2KTw8UyY2NzEwODg2Myx0aGlzLndvcmRzW3krMV09cD4+PjI2LVMmNjcxMDg4NjMsKFMrPTI0KT49'@;
put 'MjYmJihTLT0yNix5KyspO2Vsc2UgaWYoImxlIj09PUMpZm9yKE09MCx5PTA7TTxGLmxlbmd0aDtNKz0zKXRoaXMud29yZHNbeV18PShwPUZbTV18RltNKzFdPDw4fEZbTSsyXTw8MTYpPDxTJjY3MTA4ODYzLHRoaXMud29yZHNbeSsxXT1wPj4+MjYtUyY2NzEwODg2MywoUys9MjQpPj0yNiYm'@;
put 'KFMtPTI2LHkrKyk7cmV0dXJuIHRoaXMuX3N0cmlwKCl9LEgucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihGLGcsQyl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChGLmxlbmd0aC1nKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBNPTA7TTx0aGlzLmxl'@;
put 'bmd0aDtNKyspdGhpcy53b3Jkc1tNXT0wO3ZhciBTLHk9MCxwPTA7aWYoImJlIj09PUMpZm9yKE09Ri5sZW5ndGgtMTtNPj1nO00tPTIpUz1LKEYsZyxNKTw8eSx0aGlzLndvcmRzW3BdfD02NzEwODg2MyZTLHk+PTE4Pyh5LT0xOCx0aGlzLndvcmRzW3ArPTFdfD1TPj4+MjYpOnkrPTg7ZWxz'@;
put 'ZSBmb3IoTT0oRi5sZW5ndGgtZyklMj09MD9nKzE6ZztNPEYubGVuZ3RoO00rPTIpUz1LKEYsZyxNKTw8eSx0aGlzLndvcmRzW3BdfD02NzEwODg2MyZTLHk+PTE4Pyh5LT0xOCx0aGlzLndvcmRzW3ArPTFdfD1TPj4+MjYpOnkrPTg7dGhpcy5fc3RyaXAoKX0sSC5wcm90b3R5cGUuX3BhcnNl'@;
put 'QmFzZT1mdW5jdGlvbihGLGcsQyl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIE09MCx5PTE7eTw9NjcxMDg4NjM7eSo9ZylNKys7TS0tLHk9eS9nfDA7Zm9yKHZhciBwPUYubGVuZ3RoLUMsUz1wJU0sUT1NYXRoLm1pbihwLHAtUykrQyxyZT0wLGZlPUM7ZmU8UTtmZSs9'@;
put 'TSlyZT1KKEYsZmUsZmUrTSxnKSx0aGlzLmltdWxuKHkpLHRoaXMud29yZHNbMF0rcmU8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9cmU6dGhpcy5faWFkZG4ocmUpO2lmKDAhPT1TKXt2YXIgbWU9MTtmb3IocmU9SihGLGZlLEYubGVuZ3RoLGcpLGZlPTA7ZmU8UztmZSsrKW1lKj1nO3RoaXMu'@;
put 'aW11bG4obWUpLHRoaXMud29yZHNbMF0rcmU8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9cmU6dGhpcy5faWFkZG4ocmUpfXRoaXMuX3N0cmlwKCl9LEgucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oRil7Ri53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgZz0wO2c8dGhpcy5s'@;
put 'ZW5ndGg7ZysrKUYud29yZHNbZ109dGhpcy53b3Jkc1tnXTtGLmxlbmd0aD10aGlzLmxlbmd0aCxGLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsRi5yZWQ9dGhpcy5yZWR9LEgucHJvdG90eXBlLl9tb3ZlPWZ1bmN0aW9uKEYpe0koRix0aGlzKX0sSC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24o'@;
put 'KXt2YXIgRj1uZXcgSChudWxsKTtyZXR1cm4gdGhpcy5jb3B5KEYpLEZ9LEgucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oRil7Zm9yKDt0aGlzLmxlbmd0aDxGOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LEgucHJvdG90eXBlLl9zdHJpcD1mdW5jdGlvbigp'@;
put 'e2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LEgucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBd'@;
put 'JiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx0eXBlb2YgU3ltYm9sPCJ1IiYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbC5mb3IpdHJ5e0gucHJvdG90eXBlW1N5bWJvbC5mb3IoIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tIildPVJ9Y2F0Y2h7SC5wcm90b3R5cGUuaW5zcGVjdD1SfWVs'@;
put 'c2UgSC5wcm90b3R5cGUuaW5zcGVjdD1SO2Z1bmN0aW9uIFIoKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In12YXIgRT1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIs'@;
put 'IjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIs'@;
put 'IjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAw'@;
put 'MDAwMDAwMDAiXSx6PVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLGo9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0'@;
put 'MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwy'@;
put 'MDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gVyhOLEYsZyl7Zy5uZWdhdGl2ZT1GLm5lZ2F0aXZlXk4ubmVnYXRpdmU7dmFyIEM9Ti5sZW5ndGgrRi5sZW5ndGh8MDtnLmxlbmd0aD1DLEM9Qy0xfDA7'@;
put 'dmFyIE09MHxOLndvcmRzWzBdLHk9MHxGLndvcmRzWzBdLHA9TSp5LFE9cC82NzEwODg2NHwwO2cud29yZHNbMF09NjcxMDg4NjMmcDtmb3IodmFyIHJlPTE7cmU8QztyZSsrKXtmb3IodmFyIGZlPVE+Pj4yNixtZT02NzEwODg2MyZRLGtlPU1hdGgubWluKHJlLEYubGVuZ3RoLTEpLFRlPU1h'@;
put 'dGgubWF4KDAscmUtTi5sZW5ndGgrMSk7VGU8PWtlO1RlKyspZmUrPShwPShNPTB8Ti53b3Jkc1tyZS1UZXwwXSkqKHk9MHxGLndvcmRzW1RlXSkrbWUpLzY3MTA4ODY0fDAsbWU9NjcxMDg4NjMmcDtnLndvcmRzW3JlXT0wfG1lLFE9MHxmZX1yZXR1cm4gMCE9PVE/Zy53b3Jkc1tyZV09MHxR'@;
put 'OmcubGVuZ3RoLS0sZy5fc3RyaXAoKX1ILnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihGLGcpe3ZhciBDO2lmKGc9MHxnfHwxLDE2PT09KEY9Rnx8MTApfHwiaGV4Ij09PUYpe0M9IiI7Zm9yKHZhciBNPTAseT0wLHA9MDtwPHRoaXMubGVuZ3RoO3ArKyl7dmFyIFM9dGhpcy53b3Jkc1tw'@;
put 'XSxRPSgxNjc3NzIxNSYoUzw8TXx5KSkudG9TdHJpbmcoMTYpO3k9Uz4+PjI0LU0mMTY3NzcyMTUsKE0rPTIpPj0yNiYmKE0tPTI2LHAtLSksQz0wIT09eXx8cCE9PXRoaXMubGVuZ3RoLTE/RVs2LVEubGVuZ3RoXStRK0M6UStDfWZvcigwIT09eSYmKEM9eS50b1N0cmluZygxNikrQyk7Qy5s'@;
put 'ZW5ndGglZyE9MDspQz0iMCIrQztyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihDPSItIitDKSxDfWlmKEY9PT0oMHxGKSYmRj49MiYmRjw9MzYpe3ZhciByZT16W0ZdLGZlPWpbRl07Qz0iIjt2YXIgbWU9dGhpcy5jbG9uZSgpO2ZvcihtZS5uZWdhdGl2ZT0wOyFtZS5pc1plcm8oKTspe3Zh'@;
put 'ciBrZT1tZS5tb2RybihmZSkudG9TdHJpbmcoRik7Qz0obWU9bWUuaWRpdm4oZmUpKS5pc1plcm8oKT9rZStDOkVbcmUta2UubGVuZ3RoXStrZStDfWZvcih0aGlzLmlzWmVybygpJiYoQz0iMCIrQyk7Qy5sZW5ndGglZyE9MDspQz0iMCIrQztyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihD'@;
put 'PSItIitDKSxDfXYoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sSC5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgRj10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/Ris9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5n'@;
put 'dGgmJjE9PT10aGlzLndvcmRzWzJdP0YrPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZ2KCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tRjpGfSxILnByb3RvdHlw'@;
put 'ZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNiwyKX0sQiYmKEgucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKEYsZyl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQixGLGcpfSksSC5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihGLGcpe3JldHVybiB0aGlz'@;
put 'LnRvQXJyYXlMaWtlKEFycmF5LEYsZyl9LEgucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKEYsZyxDKXt0aGlzLl9zdHJpcCgpO3ZhciBNPXRoaXMuYnl0ZUxlbmd0aCgpLHk9Q3x8TWF0aC5tYXgoMSxNKTt2KE08PXksImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5n'@;
put 'dGgiKSx2KHk+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIik7dmFyIHA9ZnVuY3Rpb24oRixnKXtyZXR1cm4gRi5hbGxvY1Vuc2FmZT9GLmFsbG9jVW5zYWZlKGcpOm5ldyBGKGcpfShGLHkpO3JldHVybiB0aGlzWyJfdG9BcnJheUxpa2UiKygibGUiPT09Zz8iTEUiOiJCRSIpXShw'@;
put 'LE0pLHB9LEgucHJvdG90eXBlLl90b0FycmF5TGlrZUxFPWZ1bmN0aW9uKEYsZyl7Zm9yKHZhciBDPTAsTT0wLHk9MCxwPTA7eTx0aGlzLmxlbmd0aDt5Kyspe3ZhciBTPXRoaXMud29yZHNbeV08PHB8TTtGW0MrK109MjU1JlMsQzxGLmxlbmd0aCYmKEZbQysrXT1TPj44JjI1NSksQzxGLmxl'@;
put 'bmd0aCYmKEZbQysrXT1TPj4xNiYyNTUpLDY9PT1wPyhDPEYubGVuZ3RoJiYoRltDKytdPVM+PjI0JjI1NSksTT0wLHA9MCk6KE09Uz4+PjI0LHArPTIpfWlmKEM8Ri5sZW5ndGgpZm9yKEZbQysrXT1NO0M8Ri5sZW5ndGg7KUZbQysrXT0wfSxILnByb3RvdHlwZS5fdG9BcnJheUxpa2VCRT1m'@;
put 'dW5jdGlvbihGLGcpe2Zvcih2YXIgQz1GLmxlbmd0aC0xLE09MCx5PTAscD0wO3k8dGhpcy5sZW5ndGg7eSsrKXt2YXIgUz10aGlzLndvcmRzW3ldPDxwfE07RltDLS1dPTI1NSZTLEM+PTAmJihGW0MtLV09Uz4+OCYyNTUpLEM+PTAmJihGW0MtLV09Uz4+MTYmMjU1KSw2PT09cD8oQz49MCYm'@;
put 'KEZbQy0tXT1TPj4yNCYyNTUpLE09MCxwPTApOihNPVM+Pj4yNCxwKz0yKX1pZihDPj0wKWZvcihGW0MtLV09TTtDPj0wOylGW0MtLV09MH0sSC5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKEYpe3JldHVybiAzMi1NYXRoLmNsejMyKEYpfTpmdW5jdGlvbihGKXt2'@;
put 'YXIgZz1GLEM9MDtyZXR1cm4gZz49NDA5NiYmKEMrPTEzLGc+Pj49MTMpLGc+PTY0JiYoQys9NyxnPj4+PTcpLGc+PTgmJihDKz00LGc+Pj49NCksZz49MiYmKEMrPTIsZz4+Pj0yKSxDK2d9LEgucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihGKXtpZigwPT09RilyZXR1cm4gMjY7dmFy'@;
put 'IGc9RixDPTA7cmV0dXJuIDgxOTEmZ3x8KEMrPTEzLGc+Pj49MTMpLDEyNyZnfHwoQys9NyxnPj4+PTcpLDE1Jmd8fChDKz00LGc+Pj49NCksMyZnfHwoQys9MixnPj4+PTIpLDEmZ3x8QysrLEN9LEgucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBnPXRoaXMuX2NvdW50Qml0'@;
put 'cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK2d9LEgucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIEY9MCxnPTA7Zzx0aGlzLmxlbmd0aDtnKyspe3ZhciBDPXRoaXMuX3pl'@;
put 'cm9CaXRzKHRoaXMud29yZHNbZ10pO2lmKEYrPUMsMjYhPT1DKWJyZWFrfXJldHVybiBGfSxILnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSxILnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24oRil7cmV0dXJuIDAh'@;
put 'PT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4oRikuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSxILnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihGKXtyZXR1cm4gdGhpcy50ZXN0bihGLTEpP3RoaXMubm90bihGKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSxILnByb3Rv'@;
put 'dHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sSC5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LEgucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRp'@;
put 'dmVePTEpLHRoaXN9LEgucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24oRil7Zm9yKDt0aGlzLmxlbmd0aDxGLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgZz0wO2c8Ri5sZW5ndGg7ZysrKXRoaXMud29yZHNbZ109dGhpcy53b3Jkc1tnXXxGLndvcmRzW2ddO3Jl'@;
put 'dHVybiB0aGlzLl9zdHJpcCgpfSxILnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oRil7cmV0dXJuIHYoMD09KHRoaXMubmVnYXRpdmV8Ri5uZWdhdGl2ZSkpLHRoaXMuaXVvcihGKX0sSC5wcm90b3R5cGUub3I9ZnVuY3Rpb24oRil7cmV0dXJuIHRoaXMubGVuZ3RoPkYubGVuZ3RoP3RoaXMuY2xv'@;
put 'bmUoKS5pb3IoRik6Ri5jbG9uZSgpLmlvcih0aGlzKX0sSC5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKEYpe3JldHVybiB0aGlzLmxlbmd0aD5GLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihGKTpGLmNsb25lKCkuaXVvcih0aGlzKX0sSC5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oRil7dmFy'@;
put 'IGc7Zz10aGlzLmxlbmd0aD5GLmxlbmd0aD9GOnRoaXM7Zm9yKHZhciBDPTA7QzxnLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT10aGlzLndvcmRzW0NdJkYud29yZHNbQ107cmV0dXJuIHRoaXMubGVuZ3RoPWcubGVuZ3RoLHRoaXMuX3N0cmlwKCl9LEgucHJvdG90eXBlLmlhbmQ9ZnVuY3Rp'@;
put 'b24oRil7cmV0dXJuIHYoMD09KHRoaXMubmVnYXRpdmV8Ri5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoRil9LEgucHJvdG90eXBlLmFuZD1mdW5jdGlvbihGKXtyZXR1cm4gdGhpcy5sZW5ndGg+Ri5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoRik6Ri5jbG9uZSgpLmlhbmQodGhpcyl9LEgucHJv'@;
put 'dG90eXBlLnVhbmQ9ZnVuY3Rpb24oRil7cmV0dXJuIHRoaXMubGVuZ3RoPkYubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChGKTpGLmNsb25lKCkuaXVhbmQodGhpcyl9LEgucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKEYpe3ZhciBnLEM7dGhpcy5sZW5ndGg+Ri5sZW5ndGg/KGc9dGhpcyxD'@;
put 'PUYpOihnPUYsQz10aGlzKTtmb3IodmFyIE09MDtNPEMubGVuZ3RoO00rKyl0aGlzLndvcmRzW01dPWcud29yZHNbTV1eQy53b3Jkc1tNXTtpZih0aGlzIT09Zylmb3IoO008Zy5sZW5ndGg7TSsrKXRoaXMud29yZHNbTV09Zy53b3Jkc1tNXTtyZXR1cm4gdGhpcy5sZW5ndGg9Zy5sZW5ndGgs'@;
put 'dGhpcy5fc3RyaXAoKX0sSC5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihGKXtyZXR1cm4gdigwPT0odGhpcy5uZWdhdGl2ZXxGLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihGKX0sSC5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKEYpe3JldHVybiB0aGlzLmxlbmd0aD5GLmxlbmd0aD90aGlzLmNsb25l'@;
put 'KCkuaXhvcihGKTpGLmNsb25lKCkuaXhvcih0aGlzKX0sSC5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihGKXtyZXR1cm4gdGhpcy5sZW5ndGg+Ri5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKEYpOkYuY2xvbmUoKS5pdXhvcih0aGlzKX0sSC5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24oRil7'@;
put 'digibnVtYmVyIj09dHlwZW9mIEYmJkY+PTApO3ZhciBnPTB8TWF0aC5jZWlsKEYvMjYpLEM9RiUyNjt0aGlzLl9leHBhbmQoZyksQz4wJiZnLS07Zm9yKHZhciBNPTA7TTxnO00rKyl0aGlzLndvcmRzW01dPTY3MTA4ODYzJn50aGlzLndvcmRzW01dO3JldHVybiBDPjAmJih0aGlzLndvcmRz'@;
put 'W01dPX50aGlzLndvcmRzW01dJjY3MTA4ODYzPj4yNi1DKSx0aGlzLl9zdHJpcCgpfSxILnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKEYpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4oRil9LEgucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oRixnKXt2KCJudW1iZXIiPT10eXBlb2YgRiYmRj49'@;
put 'MCk7dmFyIEM9Ri8yNnwwLE09RiUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKEMrMSksdGhpcy53b3Jkc1tDXT1nP3RoaXMud29yZHNbQ118MTw8TTp0aGlzLndvcmRzW0NdJn4oMTw8TSksdGhpcy5fc3RyaXAoKX0sSC5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihGKXt2YXIgZyxDLE07aWYoMCE9'@;
put 'PXRoaXMubmVnYXRpdmUmJjA9PT1GLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsZz10aGlzLmlzdWIoRiksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Ri5uZWdhdGl2ZSlyZXR1cm4gRi5uZWdhdGl2ZT0wLGc9dGhp'@;
put 'cy5pc3ViKEYpLEYubmVnYXRpdmU9MSxnLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPkYubGVuZ3RoPyhDPXRoaXMsTT1GKTooQz1GLE09dGhpcyk7Zm9yKHZhciB5PTAscD0wO3A8TS5sZW5ndGg7cCsrKXRoaXMud29yZHNbcF09NjcxMDg4NjMmKGc9KDB8Qy53b3Jkc1twXSkrKDB8TS53b3Jk'@;
put 'c1twXSkreSkseT1nPj4+MjY7Zm9yKDswIT09eSYmcDxDLmxlbmd0aDtwKyspdGhpcy53b3Jkc1twXT02NzEwODg2MyYoZz0oMHxDLndvcmRzW3BdKSt5KSx5PWc+Pj4yNjtpZih0aGlzLmxlbmd0aD1DLmxlbmd0aCwwIT09eSl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT15LHRoaXMubGVuZ3Ro'@;
put 'Kys7ZWxzZSBpZihDIT09dGhpcylmb3IoO3A8Qy5sZW5ndGg7cCsrKXRoaXMud29yZHNbcF09Qy53b3Jkc1twXTtyZXR1cm4gdGhpc30sSC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKEYpe3ZhciBnO3JldHVybiAwIT09Ri5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KEYubmVnYXRpdmU9'@;
put 'MCxnPXRoaXMuc3ViKEYpLEYubmVnYXRpdmVePTEsZyk6MD09PUYubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsZz1GLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsZyk6dGhpcy5sZW5ndGg+Ri5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQoRik6Ri5jbG9u'@;
put 'ZSgpLmlhZGQodGhpcyl9LEgucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oRil7aWYoMCE9PUYubmVnYXRpdmUpe0YubmVnYXRpdmU9MDt2YXIgZz10aGlzLmlhZGQoRik7cmV0dXJuIEYubmVnYXRpdmU9MSxnLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5l'@;
put 'Z2F0aXZlPTAsdGhpcy5pYWRkKEYpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBNLHksQz10aGlzLmNtcChGKTtpZigwPT09QylyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7Qz4wPyhNPXRoaXMseT1GKTooTT1G'@;
put 'LHk9dGhpcyk7Zm9yKHZhciBwPTAsUz0wO1M8eS5sZW5ndGg7UysrKXA9KGc9KDB8TS53b3Jkc1tTXSktKDB8eS53b3Jkc1tTXSkrcCk+PjI2LHRoaXMud29yZHNbU109NjcxMDg4NjMmZztmb3IoOzAhPT1wJiZTPE0ubGVuZ3RoO1MrKylwPShnPSgwfE0ud29yZHNbU10pK3ApPj4yNix0aGlz'@;
put 'LndvcmRzW1NdPTY3MTA4ODYzJmc7aWYoMD09PXAmJlM8TS5sZW5ndGgmJk0hPT10aGlzKWZvcig7UzxNLmxlbmd0aDtTKyspdGhpcy53b3Jkc1tTXT1NLndvcmRzW1NdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxTKSxNIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9'@;
put 'MSksdGhpcy5fc3RyaXAoKX0sSC5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKEYpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihGKX07dmFyIFU9ZnVuY3Rpb24oRixnLEMpe3ZhciBRLHJlLGZlLE09Ri53b3Jkcyx5PWcud29yZHMscD1DLndvcmRzLFM9MCxtZT0wfE1bMF0sa2U9ODE5MSZtZSxU'@;
put 'ZT1tZT4+PjEzLFBlPTB8TVsxXSxGZT04MTkxJlBlLE5lPVBlPj4+MTMsTGU9MHxNWzJdLEJlPTgxOTEmTGUsSGU9TGU+Pj4xMyxRZT0wfE1bM10sbXQ9ODE5MSZRZSxLZT1RZT4+PjEzLHdlPTB8TVs0XSxJZT04MTkxJndlLE9lPXdlPj4+MTMsZXQ9MHxNWzVdLG50PTgxOTEmZXQscWU9ZXQ+'@;
put 'Pj4xMyxodD0wfE1bNl0sRWU9ODE5MSZodCxEZT1odD4+PjEzLCRlPTB8TVs3XSxhdD04MTkxJiRlLGN0PSRlPj4+MTMsT3Q9MHxNWzhdLFB0PTgxOTEmT3QsQXQ9T3Q+Pj4xMyxKdD0wfE1bOV0sbW49ODE5MSZKdCxOdD1KdD4+PjEzLGJuPTB8eVswXSxHbj04MTkxJmJuLG9uPWJuPj4+MTMs'@;
put 'JG49MHx5WzFdLE5uPTgxOTEmJG4scHQ9JG4+Pj4xMyxwbj0wfHlbMl0saG49ODE5MSZwbixDdD1wbj4+PjEzLGVuPTB8eVszXSxfdD04MTkxJmVuLFZ0PWVuPj4+MTMsX249MHx5WzRdLG90PTgxOTEmX24sSXQ9X24+Pj4xMyxubj0wfHlbNV0sRHQ9ODE5MSZubix2dD1ubj4+PjEzLEd0PTB8'@;
put 'eVs2XSxMbj04MTkxJkd0LHp0PUd0Pj4+MTMsTW49MHx5WzddLFRuPTgxOTEmTW4sc249TW4+Pj4xMyxCbj0wfHlbOF0sRm49ODE5MSZCbixxdD1Cbj4+PjEzLEhuPTB8eVs5XSxpaT04MTkxJkhuLGNuPUhuPj4+MTM7Qy5uZWdhdGl2ZT1GLm5lZ2F0aXZlXmcubmVnYXRpdmUsQy5sZW5ndGg9'@;
put 'MTk7dmFyIGpuPShTKyhRPU1hdGguaW11bChrZSxHbikpfDApKygoODE5MSYocmU9KHJlPU1hdGguaW11bChrZSxvbikpK01hdGguaW11bChUZSxHbil8MCkpPDwxMyl8MDtTPSgoZmU9TWF0aC5pbXVsKFRlLG9uKSkrKHJlPj4+MTMpfDApKyhqbj4+PjI2KXwwLGpuJj02NzEwODg2MyxRPU1h'@;
put 'dGguaW11bChGZSxHbikscmU9KHJlPU1hdGguaW11bChGZSxvbikpK01hdGguaW11bChOZSxHbil8MCxmZT1NYXRoLmltdWwoTmUsb24pO3ZhciBYcj0oUysoUT1RK01hdGguaW11bChrZSxObil8MCl8MCkrKCg4MTkxJihyZT0ocmU9cmUrTWF0aC5pbXVsKGtlLHB0KXwwKStNYXRoLmltdWwo'@;
put 'VGUsTm4pfDApKTw8MTMpfDA7Uz0oKGZlPWZlK01hdGguaW11bChUZSxwdCl8MCkrKHJlPj4+MTMpfDApKyhYcj4+PjI2KXwwLFhyJj02NzEwODg2MyxRPU1hdGguaW11bChCZSxHbikscmU9KHJlPU1hdGguaW11bChCZSxvbikpK01hdGguaW11bChIZSxHbil8MCxmZT1NYXRoLmltdWwoSGUs'@;
put 'b24pLFE9UStNYXRoLmltdWwoRmUsTm4pfDAscmU9KHJlPXJlK01hdGguaW11bChGZSxwdCl8MCkrTWF0aC5pbXVsKE5lLE5uKXwwLGZlPWZlK01hdGguaW11bChOZSxwdCl8MDt2YXIgdmk9KFMrKFE9UStNYXRoLmltdWwoa2UsaG4pfDApfDApKygoODE5MSYocmU9KHJlPXJlK01hdGguaW11'@;
put 'bChrZSxDdCl8MCkrTWF0aC5pbXVsKFRlLGhuKXwwKSk8PDEzKXwwO1M9KChmZT1mZStNYXRoLmltdWwoVGUsQ3QpfDApKyhyZT4+PjEzKXwwKSsodmk+Pj4yNil8MCx2aSY9NjcxMDg4NjMsUT1NYXRoLmltdWwobXQsR24pLHJlPShyZT1NYXRoLmltdWwobXQsb24pKStNYXRoLmltdWwoS2Us'@;
put 'R24pfDAsZmU9TWF0aC5pbXVsKEtlLG9uKSxRPVErTWF0aC5pbXVsKEJlLE5uKXwwLHJlPShyZT1yZStNYXRoLmltdWwoQmUscHQpfDApK01hdGguaW11bChIZSxObil8MCxmZT1mZStNYXRoLmltdWwoSGUscHQpfDAsUT1RK01hdGguaW11bChGZSxobil8MCxyZT0ocmU9cmUrTWF0aC5pbXVs'@;
put 'KEZlLEN0KXwwKStNYXRoLmltdWwoTmUsaG4pfDAsZmU9ZmUrTWF0aC5pbXVsKE5lLEN0KXwwO3ZhciBFcj0oUysoUT1RK01hdGguaW11bChrZSxfdCl8MCl8MCkrKCg4MTkxJihyZT0ocmU9cmUrTWF0aC5pbXVsKGtlLFZ0KXwwKStNYXRoLmltdWwoVGUsX3QpfDApKTw8MTMpfDA7Uz0oKGZl'@;
put 'PWZlK01hdGguaW11bChUZSxWdCl8MCkrKHJlPj4+MTMpfDApKyhFcj4+PjI2KXwwLEVyJj02NzEwODg2MyxRPU1hdGguaW11bChJZSxHbikscmU9KHJlPU1hdGguaW11bChJZSxvbikpK01hdGguaW11bChPZSxHbil8MCxmZT1NYXRoLmltdWwoT2Usb24pLFE9UStNYXRoLmltdWwobXQsTm4p'@;
put 'fDAscmU9KHJlPXJlK01hdGguaW11bChtdCxwdCl8MCkrTWF0aC5pbXVsKEtlLE5uKXwwLGZlPWZlK01hdGguaW11bChLZSxwdCl8MCxRPVErTWF0aC5pbXVsKEJlLGhuKXwwLHJlPShyZT1yZStNYXRoLmltdWwoQmUsQ3QpfDApK01hdGguaW11bChIZSxobil8MCxmZT1mZStNYXRoLmltdWwo'@;
put 'SGUsQ3QpfDAsUT1RK01hdGguaW11bChGZSxfdCl8MCxyZT0ocmU9cmUrTWF0aC5pbXVsKEZlLFZ0KXwwKStNYXRoLmltdWwoTmUsX3QpfDAsZmU9ZmUrTWF0aC5pbXVsKE5lLFZ0KXwwO3ZhciBZaT0oUysoUT1RK01hdGguaW11bChrZSxvdCl8MCl8MCkrKCg4MTkxJihyZT0ocmU9cmUrTWF0'@;
put 'aC5pbXVsKGtlLEl0KXwwKStNYXRoLmltdWwoVGUsb3QpfDApKTw8MTMpfDA7Uz0oKGZlPWZlK01hdGguaW11bChUZSxJdCl8MCkrKHJlPj4+MTMpfDApKyhZaT4+PjI2KXwwLFlpJj02NzEwODg2MyxRPU1hdGguaW11bChudCxHbikscmU9KHJlPU1hdGguaW11bChudCxvbikpK01hdGguaW11'@;
put 'bChxZSxHbil8MCxmZT1NYXRoLmltdWwocWUsb24pLFE9UStNYXRoLmltdWwoSWUsTm4pfDAscmU9KHJlPXJlK01hdGguaW11bChJZSxwdCl8MCkrTWF0aC5pbXVsKE9lLE5uKXwwLGZlPWZlK01hdGguaW11bChPZSxwdCl8MCxRPVErTWF0aC5pbXVsKG10LGhuKXwwLHJlPShyZT1yZStNYXRo'@;
put 'LmltdWwobXQsQ3QpfDApK01hdGguaW11bChLZSxobil8MCxmZT1mZStNYXRoLmltdWwoS2UsQ3QpfDAsUT1RK01hdGguaW11bChCZSxfdCl8MCxyZT0ocmU9cmUrTWF0aC5pbXVsKEJlLFZ0KXwwKStNYXRoLmltdWwoSGUsX3QpfDAsZmU9ZmUrTWF0aC5pbXVsKEhlLFZ0KXwwLFE9UStNYXRo'@;
put 'LmltdWwoRmUsb3QpfDAscmU9KHJlPXJlK01hdGguaW11bChGZSxJdCl8MCkrTWF0aC5pbXVsKE5lLG90KXwwLGZlPWZlK01hdGguaW11bChOZSxJdCl8MDt2YXIgSnI9KFMrKFE9UStNYXRoLmltdWwoa2UsRHQpfDApfDApKygoODE5MSYocmU9KHJlPXJlK01hdGguaW11bChrZSx2dCl8MCkr'@;
put 'TWF0aC5pbXVsKFRlLER0KXwwKSk8PDEzKXwwO1M9KChmZT1mZStNYXRoLmltdWwoVGUsdnQpfDApKyhyZT4+PjEzKXwwKSsoSnI+Pj4yNil8MCxKciY9NjcxMDg4NjMsUT1NYXRoLmltdWwoRWUsR24pLHJlPShyZT1NYXRoLmltdWwoRWUsb24pKStNYXRoLmltdWwoRGUsR24pfDAsZmU9TWF0'@;
put 'aC5pbXVsKERlLG9uKSxRPVErTWF0aC5pbXVsKG50LE5uKXwwLHJlPShyZT1yZStNYXRoLmltdWwobnQscHQpfDApK01hdGguaW11bChxZSxObil8MCxmZT1mZStNYXRoLmltdWwocWUscHQpfDAsUT1RK01hdGguaW11bChJZSxobil8MCxyZT0ocmU9cmUrTWF0aC5pbXVsKEllLEN0KXwwKStN'@;
put 'YXRoLmltdWwoT2UsaG4pfDAsZmU9ZmUrTWF0aC5pbXVsKE9lLEN0KXwwLFE9UStNYXRoLmltdWwobXQsX3QpfDAscmU9KHJlPXJlK01hdGguaW11bChtdCxWdCl8MCkrTWF0aC5pbXVsKEtlLF90KXwwLGZlPWZlK01hdGguaW11bChLZSxWdCl8MCxRPVErTWF0aC5pbXVsKEJlLG90KXwwLHJl'@;
put 'PShyZT1yZStNYXRoLmltdWwoQmUsSXQpfDApK01hdGguaW11bChIZSxvdCl8MCxmZT1mZStNYXRoLmltdWwoSGUsSXQpfDAsUT1RK01hdGguaW11bChGZSxEdCl8MCxyZT0ocmU9cmUrTWF0aC5pbXVsKEZlLHZ0KXwwKStNYXRoLmltdWwoTmUsRHQpfDAsZmU9ZmUrTWF0aC5pbXVsKE5lLHZ0'@;
put 'KXwwO3ZhciBhbz0oUysoUT1RK01hdGguaW11bChrZSxMbil8MCl8MCkrKCg4MTkxJihyZT0ocmU9cmUrTWF0aC5pbXVsKGtlLHp0KXwwKStNYXRoLmltdWwoVGUsTG4pfDApKTw8MTMpfDA7Uz0oKGZlPWZlK01hdGguaW11bChUZSx6dCl8MCkrKHJlPj4+MTMpfDApKyhhbz4+PjI2KXwwLGFv'@;
put 'Jj02NzEwODg2MyxRPU1hdGguaW11bChhdCxHbikscmU9KHJlPU1hdGguaW11bChhdCxvbikpK01hdGguaW11bChjdCxHbil8MCxmZT1NYXRoLmltdWwoY3Qsb24pLFE9UStNYXRoLmltdWwoRWUsTm4pfDAscmU9KHJlPXJlK01hdGguaW11bChFZSxwdCl8MCkrTWF0aC5pbXVsKERlLE5uKXww'@;
put 'LGZlPWZlK01hdGguaW11bChEZSxwdCl8MCxRPVErTWF0aC5pbXVsKG50LGhuKXwwLHJlPShyZT1yZStNYXRoLmltdWwobnQsQ3QpfDApK01hdGguaW11bChxZSxobil8MCxmZT1mZStNYXRoLmltdWwocWUsQ3QpfDAsUT1RK01hdGguaW11bChJZSxfdCl8MCxyZT0ocmU9cmUrTWF0aC5pbXVs'@;
put 'KEllLFZ0KXwwKStNYXRoLmltdWwoT2UsX3QpfDAsZmU9ZmUrTWF0aC5pbXVsKE9lLFZ0KXwwLFE9UStNYXRoLmltdWwobXQsb3QpfDAscmU9KHJlPXJlK01hdGguaW11bChtdCxJdCl8MCkrTWF0aC5pbXVsKEtlLG90KXwwLGZlPWZlK01hdGguaW11bChLZSxJdCl8MCxRPVErTWF0aC5pbXVs'@;
put 'KEJlLER0KXwwLHJlPShyZT1yZStNYXRoLmltdWwoQmUsdnQpfDApK01hdGguaW11bChIZSxEdCl8MCxmZT1mZStNYXRoLmltdWwoSGUsdnQpfDAsUT1RK01hdGguaW11bChGZSxMbil8MCxyZT0ocmU9cmUrTWF0aC5pbXVsKEZlLHp0KXwwKStNYXRoLmltdWwoTmUsTG4pfDAsZmU9ZmUrTWF0'@;
put 'aC5pbXVsKE5lLHp0KXwwO3ZhciBCcj0oUysoUT1RK01hdGguaW11bChrZSxUbil8MCl8MCkrKCg4MTkxJihyZT0ocmU9cmUrTWF0aC5pbXVsKGtlLHNuKXwwKStNYXRoLmltdWwoVGUsVG4pfDApKTw8MTMpfDA7Uz0oKGZlPWZlK01hdGguaW11bChUZSxzbil8MCkrKHJlPj4+MTMpfDApKyhC'@;
put 'cj4+PjI2KXwwLEJyJj02NzEwODg2MyxRPU1hdGguaW11bChQdCxHbikscmU9KHJlPU1hdGguaW11bChQdCxvbikpK01hdGguaW11bChBdCxHbil8MCxmZT1NYXRoLmltdWwoQXQsb24pLFE9UStNYXRoLmltdWwoYXQsTm4pfDAscmU9KHJlPXJlK01hdGguaW11bChhdCxwdCl8MCkrTWF0aC5p'@;
put 'bXVsKGN0LE5uKXwwLGZlPWZlK01hdGguaW11bChjdCxwdCl8MCxRPVErTWF0aC5pbXVsKEVlLGhuKXwwLHJlPShyZT1yZStNYXRoLmltdWwoRWUsQ3QpfDApK01hdGguaW11bChEZSxobil8MCxmZT1mZStNYXRoLmltdWwoRGUsQ3QpfDAsUT1RK01hdGguaW11bChudCxfdCl8MCxyZT0ocmU9'@;
put 'cmUrTWF0aC5pbXVsKG50LFZ0KXwwKStNYXRoLmltdWwocWUsX3QpfDAsZmU9ZmUrTWF0aC5pbXVsKHFlLFZ0KXwwLFE9UStNYXRoLmltdWwoSWUsb3QpfDAscmU9KHJlPXJlK01hdGguaW11bChJZSxJdCl8MCkrTWF0aC5pbXVsKE9lLG90KXwwLGZlPWZlK01hdGguaW11bChPZSxJdCl8MCxR'@;
put 'PVErTWF0aC5pbXVsKG10LER0KXwwLHJlPShyZT1yZStNYXRoLmltdWwobXQsdnQpfDApK01hdGguaW11bChLZSxEdCl8MCxmZT1mZStNYXRoLmltdWwoS2UsdnQpfDAsUT1RK01hdGguaW11bChCZSxMbil8MCxyZT0ocmU9cmUrTWF0aC5pbXVsKEJlLHp0KXwwKStNYXRoLmltdWwoSGUsTG4p'@;
put 'fDAsZmU9ZmUrTWF0aC5pbXVsKEhlLHp0KXwwLFE9UStNYXRoLmltdWwoRmUsVG4pfDAscmU9KHJlPXJlK01hdGguaW11bChGZSxzbil8MCkrTWF0aC5pbXVsKE5lLFRuKXwwLGZlPWZlK01hdGguaW11bChOZSxzbil8MDt2YXIgSmk9KFMrKFE9UStNYXRoLmltdWwoa2UsRm4pfDApfDApKygo'@;
put 'ODE5MSYocmU9KHJlPXJlK01hdGguaW11bChrZSxxdCl8MCkrTWF0aC5pbXVsKFRlLEZuKXwwKSk8PDEzKXwwO1M9KChmZT1mZStNYXRoLmltdWwoVGUscXQpfDApKyhyZT4+PjEzKXwwKSsoSmk+Pj4yNil8MCxKaSY9NjcxMDg4NjMsUT1NYXRoLmltdWwobW4sR24pLHJlPShyZT1NYXRoLmlt'@;
put 'dWwobW4sb24pKStNYXRoLmltdWwoTnQsR24pfDAsZmU9TWF0aC5pbXVsKE50LG9uKSxRPVErTWF0aC5pbXVsKFB0LE5uKXwwLHJlPShyZT1yZStNYXRoLmltdWwoUHQscHQpfDApK01hdGguaW11bChBdCxObil8MCxmZT1mZStNYXRoLmltdWwoQXQscHQpfDAsUT1RK01hdGguaW11bChhdCxo'@;
put 'bil8MCxyZT0ocmU9cmUrTWF0aC5pbXVsKGF0LEN0KXwwKStNYXRoLmltdWwoY3QsaG4pfDAsZmU9ZmUrTWF0aC5pbXVsKGN0LEN0KXwwLFE9UStNYXRoLmltdWwoRWUsX3QpfDAscmU9KHJlPXJlK01hdGguaW11bChFZSxWdCl8MCkrTWF0aC5pbXVsKERlLF90KXwwLGZlPWZlK01hdGguaW11'@;
put 'bChEZSxWdCl8MCxRPVErTWF0aC5pbXVsKG50LG90KXwwLHJlPShyZT1yZStNYXRoLmltdWwobnQsSXQpfDApK01hdGguaW11bChxZSxvdCl8MCxmZT1mZStNYXRoLmltdWwocWUsSXQpfDAsUT1RK01hdGguaW11bChJZSxEdCl8MCxyZT0ocmU9cmUrTWF0aC5pbXVsKEllLHZ0KXwwKStNYXRo'@;
put 'LmltdWwoT2UsRHQpfDAsZmU9ZmUrTWF0aC5pbXVsKE9lLHZ0KXwwLFE9UStNYXRoLmltdWwobXQsTG4pfDAscmU9KHJlPXJlK01hdGguaW11bChtdCx6dCl8MCkrTWF0aC5pbXVsKEtlLExuKXwwLGZlPWZlK01hdGguaW11bChLZSx6dCl8MCxRPVErTWF0aC5pbXVsKEJlLFRuKXwwLHJlPShy'@;
put 'ZT1yZStNYXRoLmltdWwoQmUsc24pfDApK01hdGguaW11bChIZSxUbil8MCxmZT1mZStNYXRoLmltdWwoSGUsc24pfDAsUT1RK01hdGguaW11bChGZSxGbil8MCxyZT0ocmU9cmUrTWF0aC5pbXVsKEZlLHF0KXwwKStNYXRoLmltdWwoTmUsRm4pfDAsZmU9ZmUrTWF0aC5pbXVsKE5lLHF0KXww'@;
put 'O3ZhciB0bz0oUysoUT1RK01hdGguaW11bChrZSxpaSl8MCl8MCkrKCg4MTkxJihyZT0ocmU9cmUrTWF0aC5pbXVsKGtlLGNuKXwwKStNYXRoLmltdWwoVGUsaWkpfDApKTw8MTMpfDA7Uz0oKGZlPWZlK01hdGguaW11bChUZSxjbil8MCkrKHJlPj4+MTMpfDApKyh0bz4+PjI2KXwwLHRvJj02'@;
put 'NzEwODg2MyxRPU1hdGguaW11bChtbixObikscmU9KHJlPU1hdGguaW11bChtbixwdCkpK01hdGguaW11bChOdCxObil8MCxmZT1NYXRoLmltdWwoTnQscHQpLFE9UStNYXRoLmltdWwoUHQsaG4pfDAscmU9KHJlPXJlK01hdGguaW11bChQdCxDdCl8MCkrTWF0aC5pbXVsKEF0LGhuKXwwLGZl'@;
put 'PWZlK01hdGguaW11bChBdCxDdCl8MCxRPVErTWF0aC5pbXVsKGF0LF90KXwwLHJlPShyZT1yZStNYXRoLmltdWwoYXQsVnQpfDApK01hdGguaW11bChjdCxfdCl8MCxmZT1mZStNYXRoLmltdWwoY3QsVnQpfDAsUT1RK01hdGguaW11bChFZSxvdCl8MCxyZT0ocmU9cmUrTWF0aC5pbXVsKEVl'@;
put 'LEl0KXwwKStNYXRoLmltdWwoRGUsb3QpfDAsZmU9ZmUrTWF0aC5pbXVsKERlLEl0KXwwLFE9UStNYXRoLmltdWwobnQsRHQpfDAscmU9KHJlPXJlK01hdGguaW11bChudCx2dCl8MCkrTWF0aC5pbXVsKHFlLER0KXwwLGZlPWZlK01hdGguaW11bChxZSx2dCl8MCxRPVErTWF0aC5pbXVsKEll'@;
put 'LExuKXwwLHJlPShyZT1yZStNYXRoLmltdWwoSWUsenQpfDApK01hdGguaW11bChPZSxMbil8MCxmZT1mZStNYXRoLmltdWwoT2UsenQpfDAsUT1RK01hdGguaW11bChtdCxUbil8MCxyZT0ocmU9cmUrTWF0aC5pbXVsKG10LHNuKXwwKStNYXRoLmltdWwoS2UsVG4pfDAsZmU9ZmUrTWF0aC5p'@;
put 'bXVsKEtlLHNuKXwwLFE9UStNYXRoLmltdWwoQmUsRm4pfDAscmU9KHJlPXJlK01hdGguaW11bChCZSxxdCl8MCkrTWF0aC5pbXVsKEhlLEZuKXwwLGZlPWZlK01hdGguaW11bChIZSxxdCl8MDt2YXIgY289KFMrKFE9UStNYXRoLmltdWwoRmUsaWkpfDApfDApKygoODE5MSYocmU9KHJlPXJl'@;
put 'K01hdGguaW11bChGZSxjbil8MCkrTWF0aC5pbXVsKE5lLGlpKXwwKSk8PDEzKXwwO1M9KChmZT1mZStNYXRoLmltdWwoTmUsY24pfDApKyhyZT4+PjEzKXwwKSsoY28+Pj4yNil8MCxjbyY9NjcxMDg4NjMsUT1NYXRoLmltdWwobW4saG4pLHJlPShyZT1NYXRoLmltdWwobW4sQ3QpKStNYXRo'@;
put 'LmltdWwoTnQsaG4pfDAsZmU9TWF0aC5pbXVsKE50LEN0KSxRPVErTWF0aC5pbXVsKFB0LF90KXwwLHJlPShyZT1yZStNYXRoLmltdWwoUHQsVnQpfDApK01hdGguaW11bChBdCxfdCl8MCxmZT1mZStNYXRoLmltdWwoQXQsVnQpfDAsUT1RK01hdGguaW11bChhdCxvdCl8MCxyZT0ocmU9cmUr'@;
put 'TWF0aC5pbXVsKGF0LEl0KXwwKStNYXRoLmltdWwoY3Qsb3QpfDAsZmU9ZmUrTWF0aC5pbXVsKGN0LEl0KXwwLFE9UStNYXRoLmltdWwoRWUsRHQpfDAscmU9KHJlPXJlK01hdGguaW11bChFZSx2dCl8MCkrTWF0aC5pbXVsKERlLER0KXwwLGZlPWZlK01hdGguaW11bChEZSx2dCl8MCxRPVEr'@;
put 'TWF0aC5pbXVsKG50LExuKXwwLHJlPShyZT1yZStNYXRoLmltdWwobnQsenQpfDApK01hdGguaW11bChxZSxMbil8MCxmZT1mZStNYXRoLmltdWwocWUsenQpfDAsUT1RK01hdGguaW11bChJZSxUbil8MCxyZT0ocmU9cmUrTWF0aC5pbXVsKEllLHNuKXwwKStNYXRoLmltdWwoT2UsVG4pfDAs'@;
put 'ZmU9ZmUrTWF0aC5pbXVsKE9lLHNuKXwwLFE9UStNYXRoLmltdWwobXQsRm4pfDAscmU9KHJlPXJlK01hdGguaW11bChtdCxxdCl8MCkrTWF0aC5pbXVsKEtlLEZuKXwwLGZlPWZlK01hdGguaW11bChLZSxxdCl8MDt2YXIgbG89KFMrKFE9UStNYXRoLmltdWwoQmUsaWkpfDApfDApKygoODE5'@;
put 'MSYocmU9KHJlPXJlK01hdGguaW11bChCZSxjbil8MCkrTWF0aC5pbXVsKEhlLGlpKXwwKSk8PDEzKXwwO1M9KChmZT1mZStNYXRoLmltdWwoSGUsY24pfDApKyhyZT4+PjEzKXwwKSsobG8+Pj4yNil8MCxsbyY9NjcxMDg4NjMsUT1NYXRoLmltdWwobW4sX3QpLHJlPShyZT1NYXRoLmltdWwo'@;
put 'bW4sVnQpKStNYXRoLmltdWwoTnQsX3QpfDAsZmU9TWF0aC5pbXVsKE50LFZ0KSxRPVErTWF0aC5pbXVsKFB0LG90KXwwLHJlPShyZT1yZStNYXRoLmltdWwoUHQsSXQpfDApK01hdGguaW11bChBdCxvdCl8MCxmZT1mZStNYXRoLmltdWwoQXQsSXQpfDAsUT1RK01hdGguaW11bChhdCxEdCl8'@;
put 'MCxyZT0ocmU9cmUrTWF0aC5pbXVsKGF0LHZ0KXwwKStNYXRoLmltdWwoY3QsRHQpfDAsZmU9ZmUrTWF0aC5pbXVsKGN0LHZ0KXwwLFE9UStNYXRoLmltdWwoRWUsTG4pfDAscmU9KHJlPXJlK01hdGguaW11bChFZSx6dCl8MCkrTWF0aC5pbXVsKERlLExuKXwwLGZlPWZlK01hdGguaW11bChE'@;
put 'ZSx6dCl8MCxRPVErTWF0aC5pbXVsKG50LFRuKXwwLHJlPShyZT1yZStNYXRoLmltdWwobnQsc24pfDApK01hdGguaW11bChxZSxUbil8MCxmZT1mZStNYXRoLmltdWwocWUsc24pfDAsUT1RK01hdGguaW11bChJZSxGbil8MCxyZT0ocmU9cmUrTWF0aC5pbXVsKEllLHF0KXwwKStNYXRoLmlt'@;
put 'dWwoT2UsRm4pfDAsZmU9ZmUrTWF0aC5pbXVsKE9lLHF0KXwwO3ZhciBzbz0oUysoUT1RK01hdGguaW11bChtdCxpaSl8MCl8MCkrKCg4MTkxJihyZT0ocmU9cmUrTWF0aC5pbXVsKG10LGNuKXwwKStNYXRoLmltdWwoS2UsaWkpfDApKTw8MTMpfDA7Uz0oKGZlPWZlK01hdGguaW11bChLZSxj'@;
put 'bil8MCkrKHJlPj4+MTMpfDApKyhzbz4+PjI2KXwwLHNvJj02NzEwODg2MyxRPU1hdGguaW11bChtbixvdCkscmU9KHJlPU1hdGguaW11bChtbixJdCkpK01hdGguaW11bChOdCxvdCl8MCxmZT1NYXRoLmltdWwoTnQsSXQpLFE9UStNYXRoLmltdWwoUHQsRHQpfDAscmU9KHJlPXJlK01hdGgu'@;
put 'aW11bChQdCx2dCl8MCkrTWF0aC5pbXVsKEF0LER0KXwwLGZlPWZlK01hdGguaW11bChBdCx2dCl8MCxRPVErTWF0aC5pbXVsKGF0LExuKXwwLHJlPShyZT1yZStNYXRoLmltdWwoYXQsenQpfDApK01hdGguaW11bChjdCxMbil8MCxmZT1mZStNYXRoLmltdWwoY3QsenQpfDAsUT1RK01hdGgu'@;
put 'aW11bChFZSxUbil8MCxyZT0ocmU9cmUrTWF0aC5pbXVsKEVlLHNuKXwwKStNYXRoLmltdWwoRGUsVG4pfDAsZmU9ZmUrTWF0aC5pbXVsKERlLHNuKXwwLFE9UStNYXRoLmltdWwobnQsRm4pfDAscmU9KHJlPXJlK01hdGguaW11bChudCxxdCl8MCkrTWF0aC5pbXVsKHFlLEZuKXwwLGZlPWZl'@;
put 'K01hdGguaW11bChxZSxxdCl8MDt2YXIgWGk9KFMrKFE9UStNYXRoLmltdWwoSWUsaWkpfDApfDApKygoODE5MSYocmU9KHJlPXJlK01hdGguaW11bChJZSxjbil8MCkrTWF0aC5pbXVsKE9lLGlpKXwwKSk8PDEzKXwwO1M9KChmZT1mZStNYXRoLmltdWwoT2UsY24pfDApKyhyZT4+PjEzKXww'@;
put 'KSsoWGk+Pj4yNil8MCxYaSY9NjcxMDg4NjMsUT1NYXRoLmltdWwobW4sRHQpLHJlPShyZT1NYXRoLmltdWwobW4sdnQpKStNYXRoLmltdWwoTnQsRHQpfDAsZmU9TWF0aC5pbXVsKE50LHZ0KSxRPVErTWF0aC5pbXVsKFB0LExuKXwwLHJlPShyZT1yZStNYXRoLmltdWwoUHQsenQpfDApK01h'@;
put 'dGguaW11bChBdCxMbil8MCxmZT1mZStNYXRoLmltdWwoQXQsenQpfDAsUT1RK01hdGguaW11bChhdCxUbil8MCxyZT0ocmU9cmUrTWF0aC5pbXVsKGF0LHNuKXwwKStNYXRoLmltdWwoY3QsVG4pfDAsZmU9ZmUrTWF0aC5pbXVsKGN0LHNuKXwwLFE9UStNYXRoLmltdWwoRWUsRm4pfDAscmU9'@;
put 'KHJlPXJlK01hdGguaW11bChFZSxxdCl8MCkrTWF0aC5pbXVsKERlLEZuKXwwLGZlPWZlK01hdGguaW11bChEZSxxdCl8MDt2YXIgcG89KFMrKFE9UStNYXRoLmltdWwobnQsaWkpfDApfDApKygoODE5MSYocmU9KHJlPXJlK01hdGguaW11bChudCxjbil8MCkrTWF0aC5pbXVsKHFlLGlpKXww'@;
put 'KSk8PDEzKXwwO1M9KChmZT1mZStNYXRoLmltdWwocWUsY24pfDApKyhyZT4+PjEzKXwwKSsocG8+Pj4yNil8MCxwbyY9NjcxMDg4NjMsUT1NYXRoLmltdWwobW4sTG4pLHJlPShyZT1NYXRoLmltdWwobW4senQpKStNYXRoLmltdWwoTnQsTG4pfDAsZmU9TWF0aC5pbXVsKE50LHp0KSxRPVEr'@;
put 'TWF0aC5pbXVsKFB0LFRuKXwwLHJlPShyZT1yZStNYXRoLmltdWwoUHQsc24pfDApK01hdGguaW11bChBdCxUbil8MCxmZT1mZStNYXRoLmltdWwoQXQsc24pfDAsUT1RK01hdGguaW11bChhdCxGbil8MCxyZT0ocmU9cmUrTWF0aC5pbXVsKGF0LHF0KXwwKStNYXRoLmltdWwoY3QsRm4pfDAs'@;
put 'ZmU9ZmUrTWF0aC5pbXVsKGN0LHF0KXwwO3ZhciBfcj0oUysoUT1RK01hdGguaW11bChFZSxpaSl8MCl8MCkrKCg4MTkxJihyZT0ocmU9cmUrTWF0aC5pbXVsKEVlLGNuKXwwKStNYXRoLmltdWwoRGUsaWkpfDApKTw8MTMpfDA7Uz0oKGZlPWZlK01hdGguaW11bChEZSxjbil8MCkrKHJlPj4+'@;
put 'MTMpfDApKyhfcj4+PjI2KXwwLF9yJj02NzEwODg2MyxRPU1hdGguaW11bChtbixUbikscmU9KHJlPU1hdGguaW11bChtbixzbikpK01hdGguaW11bChOdCxUbil8MCxmZT1NYXRoLmltdWwoTnQsc24pLFE9UStNYXRoLmltdWwoUHQsRm4pfDAscmU9KHJlPXJlK01hdGguaW11bChQdCxxdCl8'@;
put 'MCkrTWF0aC5pbXVsKEF0LEZuKXwwLGZlPWZlK01hdGguaW11bChBdCxxdCl8MDt2YXIgRmk9KFMrKFE9UStNYXRoLmltdWwoYXQsaWkpfDApfDApKygoODE5MSYocmU9KHJlPXJlK01hdGguaW11bChhdCxjbil8MCkrTWF0aC5pbXVsKGN0LGlpKXwwKSk8PDEzKXwwO1M9KChmZT1mZStNYXRo'@;
put 'LmltdWwoY3QsY24pfDApKyhyZT4+PjEzKXwwKSsoRmk+Pj4yNil8MCxGaSY9NjcxMDg4NjMsUT1NYXRoLmltdWwobW4sRm4pLHJlPShyZT1NYXRoLmltdWwobW4scXQpKStNYXRoLmltdWwoTnQsRm4pfDAsZmU9TWF0aC5pbXVsKE50LHF0KTt2YXIgSG89KFMrKFE9UStNYXRoLmltdWwoUHQs'@;
put 'aWkpfDApfDApKygoODE5MSYocmU9KHJlPXJlK01hdGguaW11bChQdCxjbil8MCkrTWF0aC5pbXVsKEF0LGlpKXwwKSk8PDEzKXwwO1M9KChmZT1mZStNYXRoLmltdWwoQXQsY24pfDApKyhyZT4+PjEzKXwwKSsoSG8+Pj4yNil8MCxIbyY9NjcxMDg4NjM7dmFyIGdhPShTKyhRPU1hdGguaW11'@;
put 'bChtbixpaSkpfDApKygoODE5MSYocmU9KHJlPU1hdGguaW11bChtbixjbikpK01hdGguaW11bChOdCxpaSl8MCkpPDwxMyl8MDtyZXR1cm4gUz0oKGZlPU1hdGguaW11bChOdCxjbikpKyhyZT4+PjEzKXwwKSsoZ2E+Pj4yNil8MCxnYSY9NjcxMDg4NjMscFswXT1qbixwWzFdPVhyLHBbMl09'@;
put 'dmkscFszXT1FcixwWzRdPVlpLHBbNV09SnIscFs2XT1hbyxwWzddPUJyLHBbOF09SmkscFs5XT10byxwWzEwXT1jbyxwWzExXT1sbyxwWzEyXT1zbyxwWzEzXT1YaSxwWzE0XT1wbyxwWzE1XT1fcixwWzE2XT1GaSxwWzE3XT1IbyxwWzE4XT1nYSwwIT09UyYmKHBbMTldPVMsQy5sZW5ndGgr'@;
put 'KyksQ307ZnVuY3Rpb24gcShOLEYsZyl7Zy5uZWdhdGl2ZT1GLm5lZ2F0aXZlXk4ubmVnYXRpdmUsZy5sZW5ndGg9Ti5sZW5ndGgrRi5sZW5ndGg7Zm9yKHZhciBDPTAsTT0wLHk9MDt5PGcubGVuZ3RoLTE7eSsrKXt2YXIgcD1NO009MDtmb3IodmFyIFM9NjcxMDg4NjMmQyxRPU1hdGgubWlu'@;
put 'KHksRi5sZW5ndGgtMSkscmU9TWF0aC5tYXgoMCx5LU4ubGVuZ3RoKzEpO3JlPD1RO3JlKyspe3ZhciBUZT0oMHxOLndvcmRzW3ktcmVdKSooMHxGLndvcmRzW3JlXSksUGU9NjcxMDg4NjMmVGU7Uz02NzEwODg2MyYoUGU9UGUrU3wwKSxNKz0ocD0ocD1wKyhUZS82NzEwODg2NHwwKXwwKSso'@;
put 'UGU+Pj4yNil8MCk+Pj4yNixwJj02NzEwODg2M31nLndvcmRzW3ldPVMsQz1wLHA9TX1yZXR1cm4gMCE9PUM/Zy53b3Jkc1t5XT1DOmcubGVuZ3RoLS0sZy5fc3RyaXAoKX1mdW5jdGlvbiB0ZShOLEYsZyl7cmV0dXJuIHEoTixGLGcpfWZ1bmN0aW9uIG5lKE4sRil7dGhpcy54PU4sdGhpcy55'@;
put 'PUZ9TWF0aC5pbXVsfHwoVT1XKSxILnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihGLGcpe3ZhciBNPXRoaXMubGVuZ3RoK0YubGVuZ3RoO3JldHVybiAxMD09PXRoaXMubGVuZ3RoJiYxMD09PUYubGVuZ3RoP1UodGhpcyxGLGcpOk08NjM/Vyh0aGlzLEYsZyk6TTwxMDI0P3EodGhpcyxGLGcp'@;
put 'OnRlKHRoaXMsRixnKX0sbmUucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oRil7Zm9yKHZhciBnPW5ldyBBcnJheShGKSxDPUgucHJvdG90eXBlLl9jb3VudEJpdHMoRiktMSxNPTA7TTxGO00rKylnW01dPXRoaXMucmV2QmluKE0sQyxGKTtyZXR1cm4gZ30sbmUucHJvdG90eXBlLnJldkJp'@;
put 'bj1mdW5jdGlvbihGLGcsQyl7aWYoMD09PUZ8fEY9PT1DLTEpcmV0dXJuIEY7Zm9yKHZhciBNPTAseT0wO3k8Zzt5KyspTXw9KDEmRik8PGcteS0xLEY+Pj0xO3JldHVybiBNfSxuZS5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihGLGcsQyxNLHkscCl7Zm9yKHZhciBTPTA7UzxwO1MrKylN'@;
put 'W1NdPWdbRltTXV0seVtTXT1DW0ZbU11dfSxuZS5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKEYsZyxDLE0seSxwKXt0aGlzLnBlcm11dGUocCxGLGcsQyxNLHkpO2Zvcih2YXIgUz0xO1M8eTtTPDw9MSlmb3IodmFyIFE9Uzw8MSxyZT1NYXRoLmNvcygyKk1hdGguUEkvUSksZmU9TWF0'@;
put 'aC5zaW4oMipNYXRoLlBJL1EpLG1lPTA7bWU8eTttZSs9USlmb3IodmFyIGtlPXJlLFRlPWZlLFBlPTA7UGU8UztQZSsrKXt2YXIgRmU9Q1ttZStQZV0sTmU9TVttZStQZV0sTGU9Q1ttZStQZStTXSxCZT1NW21lK1BlK1NdLEhlPWtlKkxlLVRlKkJlO0JlPWtlKkJlK1RlKkxlLENbbWUrUGVd'@;
put 'PUZlKyhMZT1IZSksTVttZStQZV09TmUrQmUsQ1ttZStQZStTXT1GZS1MZSxNW21lK1BlK1NdPU5lLUJlLFBlIT09USYmKEhlPXJlKmtlLWZlKlRlLFRlPXJlKlRlK2ZlKmtlLGtlPUhlKX19LG5lLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihGLGcpe3ZhciBDPTF8TWF0aC5tYXgo'@;
put 'ZyxGKSxNPTEmQyx5PTA7Zm9yKEM9Qy8yfDA7QztDPj4+PTEpeSsrO3JldHVybiAxPDx5KzErTX0sbmUucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihGLGcsQyl7aWYoIShDPD0xKSlmb3IodmFyIE09MDtNPEMvMjtNKyspe3ZhciB5PUZbTV07RltNXT1GW0MtTS0xXSxGW0MtTS0xXT15'@;
put 'LHk9Z1tNXSxnW01dPS1nW0MtTS0xXSxnW0MtTS0xXT0teX19LG5lLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oRixnKXtmb3IodmFyIEM9MCxNPTA7TTxnLzI7TSsrKXt2YXIgeT04MTkyKk1hdGgucm91bmQoRlsyKk0rMV0vZykrTWF0aC5yb3VuZChGWzIqTV0vZykrQztGW01d'@;
put 'PTY3MTA4ODYzJnksQz15PDY3MTA4ODY0PzA6eS82NzEwODg2NHwwfXJldHVybiBGfSxuZS5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihGLGcsQyxNKXtmb3IodmFyIHk9MCxwPTA7cDxnO3ArKylDWzIqcF09ODE5MSYoeSs9MHxGW3BdKSxDWzIqcCsxXT04MTkxJih5Pj4+PTEzKSx5'@;
put 'Pj4+PTEzO2ZvcihwPTIqZztwPE07KytwKUNbcF09MDt2KDA9PT15KSx2KDA9PSgtODE5MiZ5KSl9LG5lLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKEYpe2Zvcih2YXIgZz1uZXcgQXJyYXkoRiksQz0wO0M8RjtDKyspZ1tDXT0wO3JldHVybiBnfSxuZS5wcm90b3R5cGUubXVscD1mdW5jdGlv'@;
put 'bihGLGcsQyl7dmFyIE09Mip0aGlzLmd1ZXNzTGVuMTNiKEYubGVuZ3RoLGcubGVuZ3RoKSx5PXRoaXMubWFrZVJCVChNKSxwPXRoaXMuc3R1YihNKSxTPW5ldyBBcnJheShNKSxRPW5ldyBBcnJheShNKSxyZT1uZXcgQXJyYXkoTSksZmU9bmV3IEFycmF5KE0pLG1lPW5ldyBBcnJheShNKSxr'@;
put 'ZT1uZXcgQXJyYXkoTSksVGU9Qy53b3JkcztUZS5sZW5ndGg9TSx0aGlzLmNvbnZlcnQxM2IoRi53b3JkcyxGLmxlbmd0aCxTLE0pLHRoaXMuY29udmVydDEzYihnLndvcmRzLGcubGVuZ3RoLGZlLE0pLHRoaXMudHJhbnNmb3JtKFMscCxRLHJlLE0seSksdGhpcy50cmFuc2Zvcm0oZmUscCxt'@;
put 'ZSxrZSxNLHkpO2Zvcih2YXIgUGU9MDtQZTxNO1BlKyspe3ZhciBGZT1RW1BlXSptZVtQZV0tcmVbUGVdKmtlW1BlXTtyZVtQZV09UVtQZV0qa2VbUGVdK3JlW1BlXSptZVtQZV0sUVtQZV09RmV9cmV0dXJuIHRoaXMuY29uanVnYXRlKFEscmUsTSksdGhpcy50cmFuc2Zvcm0oUSxyZSxUZSxw'@;
put 'LE0seSksdGhpcy5jb25qdWdhdGUoVGUscCxNKSx0aGlzLm5vcm1hbGl6ZTEzYihUZSxNKSxDLm5lZ2F0aXZlPUYubmVnYXRpdmVeZy5uZWdhdGl2ZSxDLmxlbmd0aD1GLmxlbmd0aCtnLmxlbmd0aCxDLl9zdHJpcCgpfSxILnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oRil7dmFyIGc9bmV3IEgo'@;
put 'bnVsbCk7cmV0dXJuIGcud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK0YubGVuZ3RoKSx0aGlzLm11bFRvKEYsZyl9LEgucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oRil7dmFyIGc9bmV3IEgobnVsbCk7cmV0dXJuIGcud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK0YubGVuZ3RoKSx0'@;
put 'ZSh0aGlzLEYsZyl9LEgucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oRil7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhGLHRoaXMpfSxILnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihGKXt2YXIgZz1GPDA7ZyYmKEY9LUYpLHYoIm51bWJlciI9PXR5cGVvZiBGKSx2KEY8NjcxMDg4NjQpO2Zv'@;
put 'cih2YXIgQz0wLE09MDtNPHRoaXMubGVuZ3RoO00rKyl7dmFyIHk9KDB8dGhpcy53b3Jkc1tNXSkqRixwPSg2NzEwODg2MyZ5KSsoNjcxMDg4NjMmQyk7Qz4+PTI2LEMrPXkvNjcxMDg4NjR8MCxDKz1wPj4+MjYsdGhpcy53b3Jkc1tNXT02NzEwODg2MyZwfXJldHVybiAwIT09QyYmKHRoaXMu'@;
put 'd29yZHNbTV09Qyx0aGlzLmxlbmd0aCsrKSxnP3RoaXMuaW5lZygpOnRoaXN9LEgucHJvdG90eXBlLm11bG49ZnVuY3Rpb24oRil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihGKX0sSC5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxILnByb3RvdHlw'@;
put 'ZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSxILnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oRil7dmFyIGc9ZnVuY3Rpb24gRyhOKXtmb3IodmFyIEY9bmV3IEFycmF5KE4uYml0TGVuZ3RoKCkpLGc9MDtnPEYubGVuZ3RoO2crKylGW2ddPU4ud29yZHNb'@;
put 'Zy8yNnwwXT4+PmclMjYmMTtyZXR1cm4gRn0oRik7aWYoMD09PWcubGVuZ3RoKXJldHVybiBuZXcgSCgxKTtmb3IodmFyIEM9dGhpcyxNPTA7TTxnLmxlbmd0aCYmMD09PWdbTV07TSsrLEM9Qy5zcXIoKSk7aWYoKytNPGcubGVuZ3RoKWZvcih2YXIgeT1DLnNxcigpO008Zy5sZW5ndGg7TSsr'@;
put 'LHk9eS5zcXIoKSkwIT09Z1tNXSYmKEM9Qy5tdWwoeSkpO3JldHVybiBDfSxILnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oRil7digibnVtYmVyIj09dHlwZW9mIEYmJkY+PTApO3ZhciB5LGc9RiUyNixDPShGLWcpLzI2LE09NjcxMDg4NjM+Pj4yNi1nPDwyNi1nO2lmKDAhPT1nKXt2YXIg'@;
put 'cD0wO2Zvcih5PTA7eTx0aGlzLmxlbmd0aDt5Kyspe3ZhciBTPXRoaXMud29yZHNbeV0mTTt0aGlzLndvcmRzW3ldPSgwfHRoaXMud29yZHNbeV0pLVM8PGd8cCxwPVM+Pj4yNi1nfXAmJih0aGlzLndvcmRzW3ldPXAsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PUMpe2Zvcih5PXRoaXMubGVuZ3Ro'@;
put 'LTE7eT49MDt5LS0pdGhpcy53b3Jkc1t5K0NdPXRoaXMud29yZHNbeV07Zm9yKHk9MDt5PEM7eSsrKXRoaXMud29yZHNbeV09MDt0aGlzLmxlbmd0aCs9Q31yZXR1cm4gdGhpcy5fc3RyaXAoKX0sSC5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oRil7cmV0dXJuIHYoMD09PXRoaXMubmVnYXRp'@;
put 'dmUpLHRoaXMuaXVzaGxuKEYpfSxILnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oRixnLEMpe3ZhciBNO3YoIm51bWJlciI9PXR5cGVvZiBGJiZGPj0wKSxNPWc/KGctZyUyNikvMjY6MDt2YXIgeT1GJTI2LHA9TWF0aC5taW4oKEYteSkvMjYsdGhpcy5sZW5ndGgpLFM9NjcxMDg4NjNeNjcx'@;
put 'MDg4NjM+Pj55PDx5LFE9QztpZihNLT1wLE09TWF0aC5tYXgoMCxNKSxRKXtmb3IodmFyIHJlPTA7cmU8cDtyZSsrKVEud29yZHNbcmVdPXRoaXMud29yZHNbcmVdO1EubGVuZ3RoPXB9aWYoMCE9PXApaWYodGhpcy5sZW5ndGg+cClmb3IodGhpcy5sZW5ndGgtPXAscmU9MDtyZTx0aGlzLmxl'@;
put 'bmd0aDtyZSsrKXRoaXMud29yZHNbcmVdPXRoaXMud29yZHNbcmUrcF07ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgZmU9MDtmb3IocmU9dGhpcy5sZW5ndGgtMTtyZT49MCYmKDAhPT1mZXx8cmU+PU0pO3JlLS0pe3ZhciBtZT0wfHRoaXMud29yZHNbcmVdO3RoaXMu'@;
put 'd29yZHNbcmVdPWZlPDwyNi15fG1lPj4+eSxmZT1tZSZTfXJldHVybiBRJiYwIT09ZmUmJihRLndvcmRzW1EubGVuZ3RoKytdPWZlKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5fc3RyaXAoKX0sSC5wcm90b3R5cGUuaXNocm49ZnVuY3Rp'@;
put 'b24oRixnLEMpe3JldHVybiB2KDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihGLGcsQyl9LEgucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oRil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihGKX0sSC5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oRil7cmV0dXJuIHRoaXMuY2xvbmUo'@;
put 'KS5pdXNobG4oRil9LEgucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oRil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihGKX0sSC5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oRil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oRil9LEgucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKEYpe3Yo'@;
put 'Im51bWJlciI9PXR5cGVvZiBGJiZGPj0wKTt2YXIgZz1GJTI2LEM9KEYtZykvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9Q3x8ISh0aGlzLndvcmRzW0NdJjE8PGcpKX0sSC5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKEYpe3YoIm51bWJlciI9PXR5cGVvZiBGJiZGPj0wKTt2YXIgZz1GJTI2'@;
put 'LEM9KEYtZykvMjY7cmV0dXJuIHYoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD1DP3RoaXM6KDAhPT1nJiZDKyssdGhpcy5sZW5ndGg9TWF0aC5taW4oQyx0aGlzLmxlbmd0aCksMCE9PWcmJih0aGlzLndv'@;
put 'cmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+Pmc8PGcpLHRoaXMuX3N0cmlwKCkpfSxILnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihGKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihGKX0sSC5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oRil7cmV0dXJuIHYoIm51'@;
put 'bWJlciI9PXR5cGVvZiBGKSx2KEY8NjcxMDg4NjQpLEY8MD90aGlzLmlzdWJuKC1GKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPD1GPyh0aGlzLndvcmRzWzBdPUYtKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0'@;
put 'aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihGKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4oRil9LEgucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihGKXt0aGlzLndvcmRzWzBdKz1GO2Zvcih2YXIgZz0wO2c8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbZ10+PTY3MTA4ODY0'@;
put 'O2crKyl0aGlzLndvcmRzW2ddLT02NzEwODg2NCxnPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW2crMV09MTp0aGlzLndvcmRzW2crMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsZysxKSx0aGlzfSxILnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihGKXtp'@;
put 'Zih2KCJudW1iZXIiPT10eXBlb2YgRiksdihGPDY3MTA4ODY0KSxGPDApcmV0dXJuIHRoaXMuaWFkZG4oLUYpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihGKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1GLDE9'@;
put 'PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBnPTA7Zzx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tnXTwwO2crKyl0aGlzLndvcmRzW2ddKz02NzEwODg2NCx0aGlzLndvcmRzW2cr'@;
put 'MV0tPTE7cmV0dXJuIHRoaXMuX3N0cmlwKCl9LEgucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oRil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihGKX0sSC5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihGKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKEYpfSxILnByb3RvdHlwZS5pYWJzPWZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxILnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sSC5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKEYsZyxDKXt2YXIgeTt0aGlzLl9leHBhbmQoRi5sZW5ndGgrQyk7'@;
put 'dmFyIHAsUz0wO2Zvcih5PTA7eTxGLmxlbmd0aDt5Kyspe3A9KDB8dGhpcy53b3Jkc1t5K0NdKStTO3ZhciBRPSgwfEYud29yZHNbeV0pKmc7Uz0oKHAtPTY3MTA4ODYzJlEpPj4yNiktKFEvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1t5K0NdPTY3MTA4ODYzJnB9Zm9yKDt5PHRoaXMubGVuZ3Ro'@;
put 'LUM7eSsrKVM9KHA9KDB8dGhpcy53b3Jkc1t5K0NdKStTKT4+MjYsdGhpcy53b3Jkc1t5K0NdPTY3MTA4ODYzJnA7aWYoMD09PVMpcmV0dXJuIHRoaXMuX3N0cmlwKCk7Zm9yKHYoLTE9PT1TKSxTPTAseT0wO3k8dGhpcy5sZW5ndGg7eSsrKVM9KHA9LSgwfHRoaXMud29yZHNbeV0pK1MpPj4y'@;
put 'Nix0aGlzLndvcmRzW3ldPTY3MTA4ODYzJnA7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLl9zdHJpcCgpfSxILnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihGLGcpe3ZhciBDLE09dGhpcy5jbG9uZSgpLHk9RixwPTB8eS53b3Jkc1t5Lmxlbmd0aC0xXTswIT0oQz0yNi10aGlzLl9j'@;
put 'b3VudEJpdHMocCkpJiYoeT15LnVzaGxuKEMpLE0uaXVzaGxuKEMpLHA9MHx5LndvcmRzW3kubGVuZ3RoLTFdKTt2YXIgcmUsUT1NLmxlbmd0aC15Lmxlbmd0aDtpZigibW9kIiE9PWcpeyhyZT1uZXcgSChudWxsKSkubGVuZ3RoPVErMSxyZS53b3Jkcz1uZXcgQXJyYXkocmUubGVuZ3RoKTtm'@;
put 'b3IodmFyIGZlPTA7ZmU8cmUubGVuZ3RoO2ZlKyspcmUud29yZHNbZmVdPTB9dmFyIG1lPU0uY2xvbmUoKS5faXNobG5zdWJtdWwoeSwxLFEpOzA9PT1tZS5uZWdhdGl2ZSYmKE09bWUscmUmJihyZS53b3Jkc1tRXT0xKSk7Zm9yKHZhciBrZT1RLTE7a2U+PTA7a2UtLSl7dmFyIFRlPTY3MTA4'@;
put 'ODY0KigwfE0ud29yZHNbeS5sZW5ndGgra2VdKSsoMHxNLndvcmRzW3kubGVuZ3RoK2tlLTFdKTtmb3IoVGU9TWF0aC5taW4oVGUvcHwwLDY3MTA4ODYzKSxNLl9pc2hsbnN1Ym11bCh5LFRlLGtlKTswIT09TS5uZWdhdGl2ZTspVGUtLSxNLm5lZ2F0aXZlPTAsTS5faXNobG5zdWJtdWwoeSwx'@;
put 'LGtlKSxNLmlzWmVybygpfHwoTS5uZWdhdGl2ZV49MSk7cmUmJihyZS53b3Jkc1trZV09VGUpfXJldHVybiByZSYmcmUuX3N0cmlwKCksTS5fc3RyaXAoKSwiZGl2IiE9PWcmJjAhPT1DJiZNLml1c2hybihDKSx7ZGl2OnJlfHxudWxsLG1vZDpNfX0sSC5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0'@;
put 'aW9uKEYsZyxDKXtyZXR1cm4gdighRi5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyBIKDApLG1vZDpuZXcgSCgwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1GLm5lZ2F0aXZlPyhwPXRoaXMubmVnKCkuZGl2bW9kKEYsZyksIm1vZCIhPT1nJiYoTT1wLmRpdi5uZWcoKSksImRp'@;
put 'diIhPT1nJiYoeT1wLm1vZC5uZWcoKSxDJiYwIT09eS5uZWdhdGl2ZSYmeS5pYWRkKEYpKSx7ZGl2Ok0sbW9kOnl9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PUYubmVnYXRpdmU/KHA9dGhpcy5kaXZtb2QoRi5uZWcoKSxnKSwibW9kIiE9PWcmJihNPXAuZGl2Lm5lZygpKSx7ZGl2Ok0sbW9k'@;
put 'OnAubW9kfSk6dGhpcy5uZWdhdGl2ZSZGLm5lZ2F0aXZlPyhwPXRoaXMubmVnKCkuZGl2bW9kKEYubmVnKCksZyksImRpdiIhPT1nJiYoeT1wLm1vZC5uZWcoKSxDJiYwIT09eS5uZWdhdGl2ZSYmeS5pc3ViKEYpKSx7ZGl2OnAuZGl2LG1vZDp5fSk6Ri5sZW5ndGg+dGhpcy5sZW5ndGh8fHRo'@;
put 'aXMuY21wKEYpPDA/e2RpdjpuZXcgSCgwKSxtb2Q6dGhpc306MT09PUYubGVuZ3RoPyJkaXYiPT09Zz97ZGl2OnRoaXMuZGl2bihGLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1nP3tkaXY6bnVsbCxtb2Q6bmV3IEgodGhpcy5tb2RybihGLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZu'@;
put 'KEYud29yZHNbMF0pLG1vZDpuZXcgSCh0aGlzLm1vZHJuKEYud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihGLGcpO3ZhciBNLHkscH0sSC5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKEYpe3JldHVybiB0aGlzLmRpdm1vZChGLCJkaXYiLCExKS5kaXZ9LEgucHJvdG90eXBlLm1vZD1mdW5jdGlv'@;
put 'bihGKXtyZXR1cm4gdGhpcy5kaXZtb2QoRiwibW9kIiwhMSkubW9kfSxILnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKEYpe3JldHVybiB0aGlzLmRpdm1vZChGLCJtb2QiLCEwKS5tb2R9LEgucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKEYpe3ZhciBnPXRoaXMuZGl2bW9kKEYpO2lmKGcu'@;
put 'bW9kLmlzWmVybygpKXJldHVybiBnLmRpdjt2YXIgQz0wIT09Zy5kaXYubmVnYXRpdmU/Zy5tb2QuaXN1YihGKTpnLm1vZCxNPUYudXNocm4oMSkseT1GLmFuZGxuKDEpLHA9Qy5jbXAoTSk7cmV0dXJuIHA8MHx8MT09PXkmJjA9PT1wP2cuZGl2OjAhPT1nLmRpdi5uZWdhdGl2ZT9nLmRpdi5p'@;
put 'c3VibigxKTpnLmRpdi5pYWRkbigxKX0sSC5wcm90b3R5cGUubW9kcm49ZnVuY3Rpb24oRil7dmFyIGc9RjwwO2cmJihGPS1GKSx2KEY8PTY3MTA4ODYzKTtmb3IodmFyIEM9KDE8PDI2KSVGLE09MCx5PXRoaXMubGVuZ3RoLTE7eT49MDt5LS0pTT0oQypNKygwfHRoaXMud29yZHNbeV0pKSVG'@;
put 'O3JldHVybiBnPy1NOk19LEgucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oRil7cmV0dXJuIHRoaXMubW9kcm4oRil9LEgucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKEYpe3ZhciBnPUY8MDtnJiYoRj0tRiksdihGPD02NzEwODg2Myk7Zm9yKHZhciBDPTAsTT10aGlzLmxlbmd0aC0xO00+PTA7'@;
put 'TS0tKXt2YXIgeT0oMHx0aGlzLndvcmRzW01dKSs2NzEwODg2NCpDO3RoaXMud29yZHNbTV09eS9GfDAsQz15JUZ9cmV0dXJuIHRoaXMuX3N0cmlwKCksZz90aGlzLmluZWcoKTp0aGlzfSxILnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKEYpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4oRil9'@;
put 'LEgucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24oRil7digwPT09Ri5uZWdhdGl2ZSksdighRi5pc1plcm8oKSk7dmFyIGc9dGhpcyxDPUYuY2xvbmUoKTtnPTAhPT1nLm5lZ2F0aXZlP2cudW1vZChGKTpnLmNsb25lKCk7Zm9yKHZhciBNPW5ldyBIKDEpLHk9bmV3IEgoMCkscD1uZXcgSCgwKSxT'@;
put 'PW5ldyBIKDEpLFE9MDtnLmlzRXZlbigpJiZDLmlzRXZlbigpOylnLml1c2hybigxKSxDLml1c2hybigxKSwrK1E7Zm9yKHZhciByZT1DLmNsb25lKCksZmU9Zy5jbG9uZSgpOyFnLmlzWmVybygpOyl7Zm9yKHZhciBtZT0wLGtlPTE7IShnLndvcmRzWzBdJmtlKSYmbWU8MjY7KyttZSxrZTw8'@;
put 'PTEpO2lmKG1lPjApZm9yKGcuaXVzaHJuKG1lKTttZS0tID4wOykoTS5pc09kZCgpfHx5LmlzT2RkKCkpJiYoTS5pYWRkKHJlKSx5LmlzdWIoZmUpKSxNLml1c2hybigxKSx5Lml1c2hybigxKTtmb3IodmFyIFRlPTAsUGU9MTshKEMud29yZHNbMF0mUGUpJiZUZTwyNjsrK1RlLFBlPDw9MSk7'@;
put 'aWYoVGU+MClmb3IoQy5pdXNocm4oVGUpO1RlLS0gPjA7KShwLmlzT2RkKCl8fFMuaXNPZGQoKSkmJihwLmlhZGQocmUpLFMuaXN1YihmZSkpLHAuaXVzaHJuKDEpLFMuaXVzaHJuKDEpO2cuY21wKEMpPj0wPyhnLmlzdWIoQyksTS5pc3ViKHApLHkuaXN1YihTKSk6KEMuaXN1YihnKSxwLmlz'@;
put 'dWIoTSksUy5pc3ViKHkpKX1yZXR1cm57YTpwLGI6UyxnY2Q6Qy5pdXNobG4oUSl9fSxILnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24oRil7digwPT09Ri5uZWdhdGl2ZSksdighRi5pc1plcm8oKSk7dmFyIG1lLGc9dGhpcyxDPUYuY2xvbmUoKTtnPTAhPT1nLm5lZ2F0aXZlP2cudW1vZChG'@;
put 'KTpnLmNsb25lKCk7Zm9yKHZhciBNPW5ldyBIKDEpLHk9bmV3IEgoMCkscD1DLmNsb25lKCk7Zy5jbXBuKDEpPjAmJkMuY21wbigxKT4wOyl7Zm9yKHZhciBTPTAsUT0xOyEoZy53b3Jkc1swXSZRKSYmUzwyNjsrK1MsUTw8PTEpO2lmKFM+MClmb3IoZy5pdXNocm4oUyk7Uy0tID4wOylNLmlz'@;
put 'T2RkKCkmJk0uaWFkZChwKSxNLml1c2hybigxKTtmb3IodmFyIHJlPTAsZmU9MTshKEMud29yZHNbMF0mZmUpJiZyZTwyNjsrK3JlLGZlPDw9MSk7aWYocmU+MClmb3IoQy5pdXNocm4ocmUpO3JlLS0gPjA7KXkuaXNPZGQoKSYmeS5pYWRkKHApLHkuaXVzaHJuKDEpO2cuY21wKEMpPj0wPyhn'@;
put 'LmlzdWIoQyksTS5pc3ViKHkpKTooQy5pc3ViKGcpLHkuaXN1YihNKSl9cmV0dXJuKG1lPTA9PT1nLmNtcG4oMSk/TTp5KS5jbXBuKDApPDAmJm1lLmlhZGQoRiksbWV9LEgucHJvdG90eXBlLmdjZD1mdW5jdGlvbihGKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBGLmFicygpO2lmKEYuaXNa'@;
put 'ZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIGc9dGhpcy5jbG9uZSgpLEM9Ri5jbG9uZSgpO2cubmVnYXRpdmU9MCxDLm5lZ2F0aXZlPTA7Zm9yKHZhciBNPTA7Zy5pc0V2ZW4oKSYmQy5pc0V2ZW4oKTtNKyspZy5pdXNocm4oMSksQy5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO2cuaXNFdmVu'@;
put 'KCk7KWcuaXVzaHJuKDEpO2Zvcig7Qy5pc0V2ZW4oKTspQy5pdXNocm4oMSk7dmFyIHk9Zy5jbXAoQyk7aWYoeTwwKXt2YXIgcD1nO2c9QyxDPXB9ZWxzZSBpZigwPT09eXx8MD09PUMuY21wbigxKSlicmVhaztnLmlzdWIoQyl9cmV0dXJuIEMuaXVzaGxuKE0pfSxILnByb3RvdHlwZS5pbnZt'@;
put 'PWZ1bmN0aW9uKEYpe3JldHVybiB0aGlzLmVnY2QoRikuYS51bW9kKEYpfSxILnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09KDEmdGhpcy53b3Jkc1swXSl9LEgucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PSgxJnRoaXMud29yZHNbMF0pfSxILnBy'@;
put 'b3RvdHlwZS5hbmRsbj1mdW5jdGlvbihGKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZGfSxILnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihGKXt2KCJudW1iZXIiPT10eXBlb2YgRik7dmFyIGc9RiUyNixDPShGLWcpLzI2LE09MTw8ZztpZih0aGlzLmxlbmd0aDw9QylyZXR1cm4gdGhpcy5fZXhw'@;
put 'YW5kKEMrMSksdGhpcy53b3Jkc1tDXXw9TSx0aGlzO2Zvcih2YXIgeT1NLHA9QzswIT09eSYmcDx0aGlzLmxlbmd0aDtwKyspe3ZhciBTPTB8dGhpcy53b3Jkc1twXTt5PShTKz15KT4+PjI2LHRoaXMud29yZHNbcF09UyY9NjcxMDg4NjN9cmV0dXJuIDAhPT15JiYodGhpcy53b3Jkc1twXT15'@;
put 'LHRoaXMubGVuZ3RoKyspLHRoaXN9LEgucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxILnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKEYpe3ZhciBDLGc9RjwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhZylyZXR1'@;
put 'cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmZylyZXR1cm4gMTtpZih0aGlzLl9zdHJpcCgpLHRoaXMubGVuZ3RoPjEpQz0xO2Vsc2V7ZyYmKEY9LUYpLHYoRjw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIE09MHx0aGlzLndvcmRzWzBdO0M9TT09PUY/MDpNPEY/LTE6MX1y'@;
put 'ZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtQzpDfSxILnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oRil7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1GLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Ri5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgZz10aGlzLnVj'@;
put 'bXAoRik7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LWc6Z30sSC5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihGKXtpZih0aGlzLmxlbmd0aD5GLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxGLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIGc9MCxDPXRoaXMubGVuZ3RoLTE7Qz49'@;
put 'MDtDLS0pe3ZhciBNPTB8dGhpcy53b3Jkc1tDXSx5PTB8Ri53b3Jkc1tDXTtpZihNIT09eSl7TTx5P2c9LTE6TT55JiYoZz0xKTticmVha319cmV0dXJuIGd9LEgucHJvdG90eXBlLmd0bj1mdW5jdGlvbihGKXtyZXR1cm4gMT09PXRoaXMuY21wbihGKX0sSC5wcm90b3R5cGUuZ3Q9ZnVuY3Rp'@;
put 'b24oRil7cmV0dXJuIDE9PT10aGlzLmNtcChGKX0sSC5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihGKXtyZXR1cm4gdGhpcy5jbXBuKEYpPj0wfSxILnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oRil7cmV0dXJuIHRoaXMuY21wKEYpPj0wfSxILnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oRil7cmV0'@;
put 'dXJuLTE9PT10aGlzLmNtcG4oRil9LEgucHJvdG90eXBlLmx0PWZ1bmN0aW9uKEYpe3JldHVybi0xPT09dGhpcy5jbXAoRil9LEgucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oRil7cmV0dXJuIHRoaXMuY21wbihGKTw9MH0sSC5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKEYpe3JldHVybiB0aGlz'@;
put 'LmNtcChGKTw9MH0sSC5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKEYpe3JldHVybiAwPT09dGhpcy5jbXBuKEYpfSxILnByb3RvdHlwZS5lcT1mdW5jdGlvbihGKXtyZXR1cm4gMD09PXRoaXMuY21wKEYpfSxILnJlZD1mdW5jdGlvbihGKXtyZXR1cm4gbmV3IGIoRil9LEgucHJvdG90eXBlLnRv'@;
put 'UmVkPWZ1bmN0aW9uKEYpe3JldHVybiB2KCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHYoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksRi5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKEYpfSxILnBy'@;
put 'b3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHYodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sSC5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKEYpe3Jl'@;
put 'dHVybiB0aGlzLnJlZD1GLHRoaXN9LEgucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKEYpe3JldHVybiB2KCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKEYpfSxILnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oRil7'@;
put 'cmV0dXJuIHYodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxGKX0sSC5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihGKXtyZXR1cm4gdih0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMi'@;
put 'KSx0aGlzLnJlZC5pYWRkKHRoaXMsRil9LEgucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihGKXtyZXR1cm4gdih0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLEYpfSxILnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKEYp'@;
put 'e3JldHVybiB2KHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxGKX0sSC5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKEYpe3JldHVybiB2KHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJz'@;
put 'IiksdGhpcy5yZWQuc2hsKHRoaXMsRil9LEgucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihGKXtyZXR1cm4gdih0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsRiksdGhpcy5yZWQubXVsKHRoaXMsRil9LEgucHJv'@;
put 'dG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oRil7cmV0dXJuIHYodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLEYpLHRoaXMucmVkLmltdWwodGhpcyxGKX0sSC5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIHYodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LEgucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdih0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5'@;
put 'IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxILnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHYodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3Zl'@;
put 'cmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sSC5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiB2KHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9'@;
put 'LEgucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiB2KHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxILnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oRil7cmV0'@;
put 'dXJuIHYodGhpcy5yZWQmJiFGLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxGKX07dmFyIGllPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gbGUoTixGKXt0aGlzLm5h'@;
put 'bWU9Tix0aGlzLnA9bmV3IEgoRiwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IEgoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIGRlKCl7bGUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZm'@;
put 'ZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiB1ZSgpe2xlLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rp'@;
put 'b24gY2UoKXtsZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIFkoKXtsZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZm'@;
put 'ZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIGIoTil7aWYoInN0cmluZyI9PXR5cGVvZiBOKXt2YXIgRj1ILl9wcmltZShOKTt0aGlzLm09Ri5wLHRoaXMucHJpbWU9Rn1lbHNlIHYoTi5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1OLHRo'@;
put 'aXMucHJpbWU9bnVsbH1mdW5jdGlvbiB4KE4pe2IuY2FsbCh0aGlzLE4pLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IEgoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9'@;
put 'dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRo'@;
put 'aXMubWludil9bGUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgRj1uZXcgSChudWxsKTtyZXR1cm4gRi53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLEZ9LGxlLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKEYpe3ZhciBDLGc9Rjtkb3t0aGlzLnNwbGl0KGcs'@;
put 'dGhpcy50bXApLEM9KGc9KGc9dGhpcy5pbXVsSyhnKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKEM+dGhpcy5uKTt2YXIgTT1DPHRoaXMubj8tMTpnLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PU0/KGcud29yZHNbMF09MCxnLmxlbmd0aD0xKTpNPjA/Zy5pc3ViKHRoaXMu'@;
put 'cCk6dm9pZCAwIT09Zy5zdHJpcD9nLnN0cmlwKCk6Zy5fc3RyaXAoKSxnfSxsZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oRixnKXtGLml1c2hybih0aGlzLm4sMCxnKX0sbGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKEYpe3JldHVybiBGLmltdWwodGhpcy5rKX0saGUoZGUsbGUpLGRl'@;
put 'LnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihGLGcpe2Zvcih2YXIgQz00MTk0MzAzLE09TWF0aC5taW4oRi5sZW5ndGgsOSkseT0wO3k8TTt5KyspZy53b3Jkc1t5XT1GLndvcmRzW3ldO2lmKGcubGVuZ3RoPU0sRi5sZW5ndGg8PTkpcmV0dXJuIEYud29yZHNbMF09MCx2b2lkKEYubGVuZ3Ro'@;
put 'PTEpO3ZhciBwPUYud29yZHNbOV07Zm9yKGcud29yZHNbZy5sZW5ndGgrK109cCZDLHk9MTA7eTxGLmxlbmd0aDt5Kyspe3ZhciBTPTB8Ri53b3Jkc1t5XTtGLndvcmRzW3ktMTBdPShTJkMpPDw0fHA+Pj4yMixwPVN9Ri53b3Jkc1t5LTEwXT1wPj4+PTIyLEYubGVuZ3RoLT0wPT09cCYmRi5s'@;
put 'ZW5ndGg+MTA/MTA6OX0sZGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKEYpe0Yud29yZHNbRi5sZW5ndGhdPTAsRi53b3Jkc1tGLmxlbmd0aCsxXT0wLEYubGVuZ3RoKz0yO2Zvcih2YXIgZz0wLEM9MDtDPEYubGVuZ3RoO0MrKyl7dmFyIE09MHxGLndvcmRzW0NdO0Yud29yZHNbQ109Njcx'@;
put 'MDg4NjMmKGcrPTk3NypNKSxnPTY0Kk0rKGcvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1GLndvcmRzW0YubGVuZ3RoLTFdJiYoRi5sZW5ndGgtLSwwPT09Ri53b3Jkc1tGLmxlbmd0aC0xXSYmRi5sZW5ndGgtLSksRn0saGUodWUsbGUpLGhlKGNlLGxlKSxoZShZLGxlKSxZLnByb3RvdHlwZS5p'@;
put 'bXVsSz1mdW5jdGlvbihGKXtmb3IodmFyIGc9MCxDPTA7QzxGLmxlbmd0aDtDKyspe3ZhciBNPTE5KigwfEYud29yZHNbQ10pK2cseT02NzEwODg2MyZNO00+Pj49MjYsRi53b3Jkc1tDXT15LGc9TX1yZXR1cm4gMCE9PWcmJihGLndvcmRzW0YubGVuZ3RoKytdPWcpLEZ9LEguX3ByaW1lPWZ1'@;
put 'bmN0aW9uKEYpe2lmKGllW0ZdKXJldHVybiBpZVtGXTt2YXIgZztpZigiazI1NiI9PT1GKWc9bmV3IGRlO2Vsc2UgaWYoInAyMjQiPT09RilnPW5ldyB1ZTtlbHNlIGlmKCJwMTkyIj09PUYpZz1uZXcgY2U7ZWxzZXtpZigicDI1NTE5IiE9PUYpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHBy'@;
put 'aW1lICIrRik7Zz1uZXcgWX1yZXR1cm4gaWVbRl09ZyxnfSxiLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihGKXt2KDA9PT1GLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHYoRi5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sYi5w'@;
put 'cm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oRixnKXt2KDA9PShGLm5lZ2F0aXZlfGcubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHYoRi5yZWQmJkYucmVkPT09Zy5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sYi5wcm90b3R5cGUu'@;
put 'aW1vZD1mdW5jdGlvbihGKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoRikuX2ZvcmNlUmVkKHRoaXMpOihJKEYsRi51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpKSxGKX0sYi5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKEYpe3JldHVybiBGLmlzWmVybygpP0YuY2xv'@;
put 'bmUoKTp0aGlzLm0uc3ViKEYpLl9mb3JjZVJlZCh0aGlzKX0sYi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKEYsZyl7dGhpcy5fdmVyaWZ5MihGLGcpO3ZhciBDPUYuYWRkKGcpO3JldHVybiBDLmNtcCh0aGlzLm0pPj0wJiZDLmlzdWIodGhpcy5tKSxDLl9mb3JjZVJlZCh0aGlzKX0sYi5wcm90'@;
put 'b3R5cGUuaWFkZD1mdW5jdGlvbihGLGcpe3RoaXMuX3ZlcmlmeTIoRixnKTt2YXIgQz1GLmlhZGQoZyk7cmV0dXJuIEMuY21wKHRoaXMubSk+PTAmJkMuaXN1Yih0aGlzLm0pLEN9LGIucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihGLGcpe3RoaXMuX3ZlcmlmeTIoRixnKTt2YXIgQz1GLnN1Yihn'@;
put 'KTtyZXR1cm4gQy5jbXBuKDApPDAmJkMuaWFkZCh0aGlzLm0pLEMuX2ZvcmNlUmVkKHRoaXMpfSxiLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKEYsZyl7dGhpcy5fdmVyaWZ5MihGLGcpO3ZhciBDPUYuaXN1YihnKTtyZXR1cm4gQy5jbXBuKDApPDAmJkMuaWFkZCh0aGlzLm0pLEN9LGIucHJv'@;
put 'dG90eXBlLnNobD1mdW5jdGlvbihGLGcpe3JldHVybiB0aGlzLl92ZXJpZnkxKEYpLHRoaXMuaW1vZChGLnVzaGxuKGcpKX0sYi5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihGLGcpe3JldHVybiB0aGlzLl92ZXJpZnkyKEYsZyksdGhpcy5pbW9kKEYuaW11bChnKSl9LGIucHJvdG90eXBlLm11'@;
put 'bD1mdW5jdGlvbihGLGcpe3JldHVybiB0aGlzLl92ZXJpZnkyKEYsZyksdGhpcy5pbW9kKEYubXVsKGcpKX0sYi5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihGKXtyZXR1cm4gdGhpcy5pbXVsKEYsRi5jbG9uZSgpKX0sYi5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKEYpe3JldHVybiB0aGlzLm11'@;
put 'bChGLEYpfSxiLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKEYpe2lmKEYuaXNaZXJvKCkpcmV0dXJuIEYuY2xvbmUoKTt2YXIgZz10aGlzLm0uYW5kbG4oMyk7aWYodihnJTI9PTEpLDM9PT1nKXt2YXIgQz10aGlzLm0uYWRkKG5ldyBIKDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KEYs'@;
put 'Qyl9Zm9yKHZhciBNPXRoaXMubS5zdWJuKDEpLHk9MDshTS5pc1plcm8oKSYmMD09PU0uYW5kbG4oMSk7KXkrKyxNLml1c2hybigxKTt2KCFNLmlzWmVybygpKTt2YXIgcD1uZXcgSCgxKS50b1JlZCh0aGlzKSxTPXAucmVkTmVnKCksUT10aGlzLm0uc3VibigxKS5pdXNocm4oMSkscmU9dGhp'@;
put 'cy5tLmJpdExlbmd0aCgpO2ZvcihyZT1uZXcgSCgyKnJlKnJlKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cocmUsUSkuY21wKFMpOylyZS5yZWRJQWRkKFMpO2Zvcih2YXIgZmU9dGhpcy5wb3cocmUsTSksbWU9dGhpcy5wb3coRixNLmFkZG4oMSkuaXVzaHJuKDEpKSxrZT10aGlzLnBvdyhG'@;
put 'LE0pLFRlPXk7MCE9PWtlLmNtcChwKTspe2Zvcih2YXIgUGU9a2UsRmU9MDswIT09UGUuY21wKHApO0ZlKyspUGU9UGUucmVkU3FyKCk7dihGZTxUZSk7dmFyIE5lPXRoaXMucG93KGZlLG5ldyBIKDEpLml1c2hsbihUZS1GZS0xKSk7bWU9bWUucmVkTXVsKE5lKSxmZT1OZS5yZWRTcXIoKSxr'@;
put 'ZT1rZS5yZWRNdWwoZmUpLFRlPUZlfXJldHVybiBtZX0sYi5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihGKXt2YXIgZz1GLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09Zy5uZWdhdGl2ZT8oZy5uZWdhdGl2ZT0wLHRoaXMuaW1vZChnKS5yZWROZWcoKSk6dGhpcy5pbW9kKGcpfSxiLnByb3Rv'@;
put 'dHlwZS5wb3c9ZnVuY3Rpb24oRixnKXtpZihnLmlzWmVybygpKXJldHVybiBuZXcgSCgxKS50b1JlZCh0aGlzKTtpZigwPT09Zy5jbXBuKDEpKXJldHVybiBGLmNsb25lKCk7dmFyIE09bmV3IEFycmF5KDE2KTtNWzBdPW5ldyBIKDEpLnRvUmVkKHRoaXMpLE1bMV09Rjtmb3IodmFyIHk9Mjt5'@;
put 'PE0ubGVuZ3RoO3krKylNW3ldPXRoaXMubXVsKE1beS0xXSxGKTt2YXIgcD1NWzBdLFM9MCxRPTAscmU9Zy5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PXJlJiYocmU9MjYpLHk9Zy5sZW5ndGgtMTt5Pj0wO3ktLSl7Zm9yKHZhciBmZT1nLndvcmRzW3ldLG1lPXJlLTE7bWU+PTA7bWUtLSl7dmFy'@;
put 'IGtlPWZlPj5tZSYxO3AhPT1NWzBdJiYocD10aGlzLnNxcihwKSksMCE9PWtlfHwwIT09Uz8oUzw8PTEsU3w9a2UsKDQ9PSsrUXx8MD09PXkmJjA9PT1tZSkmJihwPXRoaXMubXVsKHAsTVtTXSksUT0wLFM9MCkpOlE9MH1yZT0yNn1yZXR1cm4gcH0sYi5wcm90b3R5cGUuY29udmVydFRvPWZ1'@;
put 'bmN0aW9uKEYpe3ZhciBnPUYudW1vZCh0aGlzLm0pO3JldHVybiBnPT09Rj9nLmNsb25lKCk6Z30sYi5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oRil7dmFyIGc9Ri5jbG9uZSgpO3JldHVybiBnLnJlZD1udWxsLGd9LEgubW9udD1mdW5jdGlvbihGKXtyZXR1cm4gbmV3IHgoRil9'@;
put 'LGhlKHgsYikseC5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKEYpe3JldHVybiB0aGlzLmltb2QoRi51c2hsbih0aGlzLnNoaWZ0KSl9LHgucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKEYpe3ZhciBnPXRoaXMuaW1vZChGLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gZy5yZWQ9'@;
put 'bnVsbCxnfSx4LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKEYsZyl7aWYoRi5pc1plcm8oKXx8Zy5pc1plcm8oKSlyZXR1cm4gRi53b3Jkc1swXT0wLEYubGVuZ3RoPTEsRjt2YXIgQz1GLmltdWwoZyksTT1DLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNo'@;
put 'aWZ0KS5tdWwodGhpcy5tKSx5PUMuaXN1YihNKS5pdXNocm4odGhpcy5zaGlmdCkscD15O3JldHVybiB5LmNtcCh0aGlzLm0pPj0wP3A9eS5pc3ViKHRoaXMubSk6eS5jbXBuKDApPDAmJihwPXkuaWFkZCh0aGlzLm0pKSxwLl9mb3JjZVJlZCh0aGlzKX0seC5wcm90b3R5cGUubXVsPWZ1bmN0'@;
put 'aW9uKEYsZyl7aWYoRi5pc1plcm8oKXx8Zy5pc1plcm8oKSlyZXR1cm4gbmV3IEgoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciBDPUYubXVsKGcpLE09Qy5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSkseT1DLmlzdWIoTSkuaXVz'@;
put 'aHJuKHRoaXMuc2hpZnQpLHA9eTtyZXR1cm4geS5jbXAodGhpcy5tKT49MD9wPXkuaXN1Yih0aGlzLm0pOnkuY21wbigwKTwwJiYocD15LmlhZGQodGhpcy5tKSkscC5fZm9yY2VSZWQodGhpcyl9LHgucHJvdG90eXBlLmludm09ZnVuY3Rpb24oRil7cmV0dXJuIHRoaXMuaW1vZChGLl9pbnZt'@;
put 'cCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oV2U9VC5ubWQoV2UpLHRoaXMpfSw2MDA4MjooV2UsemUsVCk9Pnt2YXIgc2U7ZnVuY3Rpb24gayhoZSl7dGhpcy5yYW5kPWhlfWlmKFdlLmV4cG9ydHM9ZnVuY3Rpb24oSCl7cmV0dXJuIHNlfHwoc2U9bmV3IGsobnVs'@;
put 'bCkpLHNlLmdlbmVyYXRlKEgpfSxXZS5leHBvcnRzLlJhbmQ9ayxrLnByb3RvdHlwZS5nZW5lcmF0ZT1mdW5jdGlvbihIKXtyZXR1cm4gdGhpcy5fcmFuZChIKX0say5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24oSCl7aWYodGhpcy5yYW5kLmdldEJ5dGVzKXJldHVybiB0aGlzLnJhbmQuZ2V0'@;
put 'Qnl0ZXMoSCk7Zm9yKHZhciBCPW5ldyBVaW50OEFycmF5KEgpLEw9MDtMPEIubGVuZ3RoO0wrKylCW0xdPXRoaXMucmFuZC5nZXRCeXRlKCk7cmV0dXJuIEJ9LCJvYmplY3QiPT10eXBlb2Ygc2VsZilzZWxmLmNyeXB0byYmc2VsZi5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzP2sucHJvdG90eXBl'@;
put 'Ll9yYW5kPWZ1bmN0aW9uKEgpe3ZhciBCPW5ldyBVaW50OEFycmF5KEgpO3JldHVybiBzZWxmLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoQiksQn06c2VsZi5tc0NyeXB0byYmc2VsZi5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXM/ay5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24oSCl7dmFyIEI9'@;
put 'bmV3IFVpbnQ4QXJyYXkoSCk7cmV0dXJuIHNlbGYubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKEIpLEJ9OiJvYmplY3QiPT10eXBlb2Ygd2luZG93JiYoay5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCB5ZXQiKX0pO2Vsc2UgdHJ5'@;
put 'e3ZhciB2PVQoNzc5MDMpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB2LnJhbmRvbUJ5dGVzKXRocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCIpO2sucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKEgpe3JldHVybiB2LnJhbmRvbUJ5dGVzKEgpfX1jYXRjaHt9fSw2NDAzOihXZSx6ZSxUKT0+'@;
put 'e3ZhciBzZT1UKDg0MykuQnVmZmVyO2Z1bmN0aW9uIGsoSyl7c2UuaXNCdWZmZXIoSyl8fChLPXNlLmZyb20oSykpO2Zvcih2YXIgSj1LLmxlbmd0aC80fDAsST1uZXcgQXJyYXkoSiksUj0wO1I8SjtSKyspSVtSXT1LLnJlYWRVSW50MzJCRSg0KlIpO3JldHVybiBJfWZ1bmN0aW9uIHYoSyl7'@;
put 'Zm9yKDswPEsubGVuZ3RoO0srKylLWzBdPTB9ZnVuY3Rpb24gaGUoSyxKLEksUixFKXtmb3IodmFyIG5lLGllLGxlLGRlLHo9SVswXSxqPUlbMV0sVj1JWzJdLEc9SVszXSxXPUtbMF1eSlswXSxVPUtbMV1eSlsxXSxxPUtbMl1eSlsyXSx0ZT1LWzNdXkpbM10sdWU9NCxjZT0xO2NlPEU7Y2Ur'@;
put 'KyluZT16W1c+Pj4yNF1ealtVPj4+MTYmMjU1XV5WW3E+Pj44JjI1NV1eR1syNTUmdGVdXkpbdWUrK10saWU9eltVPj4+MjRdXmpbcT4+PjE2JjI1NV1eVlt0ZT4+PjgmMjU1XV5HWzI1NSZXXV5KW3VlKytdLGxlPXpbcT4+PjI0XV5qW3RlPj4+MTYmMjU1XV5WW1c+Pj44JjI1NV1eR1syNTUm'@;
put 'VV1eSlt1ZSsrXSxkZT16W3RlPj4+MjRdXmpbVz4+PjE2JjI1NV1eVltVPj4+OCYyNTVdXkdbMjU1JnFdXkpbdWUrK10sVz1uZSxVPWllLHE9bGUsdGU9ZGU7cmV0dXJuIG5lPShSW1c+Pj4yNF08PDI0fFJbVT4+PjE2JjI1NV08PDE2fFJbcT4+PjgmMjU1XTw8OHxSWzI1NSZ0ZV0pXkpbdWUr'@;
put 'K10saWU9KFJbVT4+PjI0XTw8MjR8UltxPj4+MTYmMjU1XTw8MTZ8Ult0ZT4+PjgmMjU1XTw8OHxSWzI1NSZXXSleSlt1ZSsrXSxsZT0oUltxPj4+MjRdPDwyNHxSW3RlPj4+MTYmMjU1XTw8MTZ8UltXPj4+OCYyNTVdPDw4fFJbMjU1JlVdKV5KW3VlKytdLGRlPShSW3RlPj4+MjRdPDwyNHxS'@;
put 'W1c+Pj4xNiYyNTVdPDwxNnxSW1U+Pj44JjI1NV08PDh8UlsyNTUmcV0pXkpbdWUrK10sW25lPj4+PTAsaWU+Pj49MCxsZT4+Pj0wLGRlPj4+PTBdfXZhciBIPVswLDEsMiw0LDgsMTYsMzIsNjQsMTI4LDI3LDU0XSxCPWZ1bmN0aW9uKCl7Zm9yKHZhciBLPW5ldyBBcnJheSgyNTYpLEo9MDtK'@;
put 'PDI1NjtKKyspS1tKXT1KPDEyOD9KPDwxOko8PDFeMjgzO2Zvcih2YXIgST1bXSxSPVtdLEU9W1tdLFtdLFtdLFtdXSx6PVtbXSxbXSxbXSxbXV0saj0wLFY9MCxHPTA7RzwyNTY7KytHKXt2YXIgVz1WXlY8PDFeVjw8Ml5WPDwzXlY8PDQ7SVtqXT1XPVc+Pj44XjI1NSZXXjk5LFJbV109ajt2'@;
put 'YXIgVT1LW2pdLHE9S1tVXSx0ZT1LW3FdLG5lPTI1NypLW1ddXjE2ODQzMDA4Klc7RVswXVtqXT1uZTw8MjR8bmU+Pj44LEVbMV1bal09bmU8PDE2fG5lPj4+MTYsRVsyXVtqXT1uZTw8OHxuZT4+PjI0LEVbM11bal09bmUselswXVtXXT0obmU9MTY4NDMwMDkqdGVeNjU1MzcqcV4yNTcqVV4x'@;
put 'Njg0MzAwOCpqKTw8MjR8bmU+Pj44LHpbMV1bV109bmU8PDE2fG5lPj4+MTYselsyXVtXXT1uZTw8OHxuZT4+PjI0LHpbM11bV109bmUsMD09PWo/aj1WPTE6KGo9VV5LW0tbS1t0ZV5VXV1dLFZePUtbS1tWXV0pfXJldHVybntTQk9YOkksSU5WX1NCT1g6UixTVUJfTUlYOkUsSU5WX1NVQl9N'@;
put 'SVg6en19KCk7ZnVuY3Rpb24gTChLKXt0aGlzLl9rZXk9ayhLKSx0aGlzLl9yZXNldCgpfUwuYmxvY2tTaXplPTE2LEwua2V5U2l6ZT0zMixMLnByb3RvdHlwZS5ibG9ja1NpemU9TC5ibG9ja1NpemUsTC5wcm90b3R5cGUua2V5U2l6ZT1MLmtleVNpemUsTC5wcm90b3R5cGUuX3Jlc2V0PWZ1'@;
put 'bmN0aW9uKCl7Zm9yKHZhciBLPXRoaXMuX2tleSxKPUsubGVuZ3RoLEk9Sis2LFI9NCooSSsxKSxFPVtdLHo9MDt6PEo7eisrKUVbel09S1t6XTtmb3Ioej1KO3o8Ujt6Kyspe3ZhciBqPUVbei0xXTt6JUo9PTA/KGo9Qi5TQk9YWyhqPWo8PDh8aj4+PjI0KT4+PjI0XTw8MjR8Qi5TQk9YW2o+'@;
put 'Pj4xNiYyNTVdPDwxNnxCLlNCT1hbaj4+PjgmMjU1XTw8OHxCLlNCT1hbMjU1JmpdLGpePUhbei9KfDBdPDwyNCk6Sj42JiZ6JUo9PTQmJihqPUIuU0JPWFtqPj4+MjRdPDwyNHxCLlNCT1hbaj4+PjE2JjI1NV08PDE2fEIuU0JPWFtqPj4+OCYyNTVdPDw4fEIuU0JPWFsyNTUmal0pLEVbel09'@;
put 'RVt6LUpdXmp9Zm9yKHZhciBWPVtdLEc9MDtHPFI7RysrKXt2YXIgVz1SLUcsVT1FW1ctKEclND8wOjQpXTtWW0ddPUc8NHx8Vzw9ND9VOkIuSU5WX1NVQl9NSVhbMF1bQi5TQk9YW1U+Pj4yNF1dXkIuSU5WX1NVQl9NSVhbMV1bQi5TQk9YW1U+Pj4xNiYyNTVdXV5CLklOVl9TVUJfTUlYWzJd'@;
put 'W0IuU0JPWFtVPj4+OCYyNTVdXV5CLklOVl9TVUJfTUlYWzNdW0IuU0JPWFsyNTUmVV1dfXRoaXMuX25Sb3VuZHM9SSx0aGlzLl9rZXlTY2hlZHVsZT1FLHRoaXMuX2ludktleVNjaGVkdWxlPVZ9LEwucHJvdG90eXBlLmVuY3J5cHRCbG9ja1Jhdz1mdW5jdGlvbihLKXtyZXR1cm4gaGUoSz1r'@;
put 'KEspLHRoaXMuX2tleVNjaGVkdWxlLEIuU1VCX01JWCxCLlNCT1gsdGhpcy5fblJvdW5kcyl9LEwucHJvdG90eXBlLmVuY3J5cHRCbG9jaz1mdW5jdGlvbihLKXt2YXIgSj10aGlzLmVuY3J5cHRCbG9ja1JhdyhLKSxJPXNlLmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gSS53cml0ZVVJbnQzMkJF'@;
put 'KEpbMF0sMCksSS53cml0ZVVJbnQzMkJFKEpbMV0sNCksSS53cml0ZVVJbnQzMkJFKEpbMl0sOCksSS53cml0ZVVJbnQzMkJFKEpbM10sMTIpLEl9LEwucHJvdG90eXBlLmRlY3J5cHRCbG9jaz1mdW5jdGlvbihLKXt2YXIgSj0oSz1rKEspKVsxXTtLWzFdPUtbM10sS1szXT1KO3ZhciBJPWhl'@;
put 'KEssdGhpcy5faW52S2V5U2NoZWR1bGUsQi5JTlZfU1VCX01JWCxCLklOVl9TQk9YLHRoaXMuX25Sb3VuZHMpLFI9c2UuYWxsb2NVbnNhZmUoMTYpO3JldHVybiBSLndyaXRlVUludDMyQkUoSVswXSwwKSxSLndyaXRlVUludDMyQkUoSVszXSw0KSxSLndyaXRlVUludDMyQkUoSVsyXSw4KSxS'@;
put 'LndyaXRlVUludDMyQkUoSVsxXSwxMiksUn0sTC5wcm90b3R5cGUuc2NydWI9ZnVuY3Rpb24oKXt2KHRoaXMuX2tleVNjaGVkdWxlKSx2KHRoaXMuX2ludktleVNjaGVkdWxlKSx2KHRoaXMuX2tleSl9LFdlLmV4cG9ydHMuQUVTPUx9LDU2MDg3OihXZSx6ZSxUKT0+e3ZhciBzZT1UKDY0MDMp'@;
put 'LGs9VCg4NDMpLkJ1ZmZlcix2PVQoODY0MjApLGhlPVQoNjY2OTgpLEg9VCgxNTAzKSxCPVQoNjM2MzYpLEw9VCg5MTA3KTtmdW5jdGlvbiBJKFIsRSx6LGope3YuY2FsbCh0aGlzKTt2YXIgVj1rLmFsbG9jKDQsMCk7dGhpcy5fY2lwaGVyPW5ldyBzZS5BRVMoRSk7dmFyIEc9dGhpcy5fY2lw'@;
put 'aGVyLmVuY3J5cHRCbG9jayhWKTt0aGlzLl9naGFzaD1uZXcgSChHKSx6PWZ1bmN0aW9uIEooUixFLHope2lmKDEyPT09RS5sZW5ndGgpcmV0dXJuIFIuX2ZpbklEPWsuY29uY2F0KFtFLGsuZnJvbShbMCwwLDAsMV0pXSksay5jb25jYXQoW0Usay5mcm9tKFswLDAsMCwyXSldKTt2YXIgaj1u'@;
put 'ZXcgSCh6KSxWPUUubGVuZ3RoLEc9ViUxNjtqLnVwZGF0ZShFKSxHJiZqLnVwZGF0ZShrLmFsbG9jKEc9MTYtRywwKSksai51cGRhdGUoay5hbGxvYyg4LDApKTt2YXIgVz04KlYsVT1rLmFsbG9jKDgpO1Uud3JpdGVVSW50QkUoVywwLDgpLGoudXBkYXRlKFUpLFIuX2ZpbklEPWouc3RhdGU7'@;
put 'dmFyIHE9ay5mcm9tKFIuX2ZpbklEKTtyZXR1cm4gTChxKSxxfSh0aGlzLHosRyksdGhpcy5fcHJldj1rLmZyb20oeiksdGhpcy5fY2FjaGU9ay5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9zZWNDYWNoZT1rLmFsbG9jVW5zYWZlKDApLHRoaXMuX2RlY3J5cHQ9aix0aGlzLl9hbGVuPTAsdGhpcy5f'@;
put 'bGVuPTAsdGhpcy5fbW9kZT1SLHRoaXMuX2F1dGhUYWc9bnVsbCx0aGlzLl9jYWxsZWQ9ITF9aGUoSSx2KSxJLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFIpe2lmKCF0aGlzLl9jYWxsZWQmJnRoaXMuX2FsZW4pe3ZhciBFPTE2LXRoaXMuX2FsZW4lMTY7RTwxNiYmKEU9ay5hbGxvYyhF'@;
put 'LDApLHRoaXMuX2doYXNoLnVwZGF0ZShFKSl9dGhpcy5fY2FsbGVkPSEwO3ZhciB6PXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLFIpO3JldHVybiB0aGlzLl9naGFzaC51cGRhdGUodGhpcy5fZGVjcnlwdD9SOnopLHRoaXMuX2xlbis9Ui5sZW5ndGgsen0sSS5wcm90b3R5cGUuX2ZpbmFsPWZ1'@;
put 'bmN0aW9uKCl7aWYodGhpcy5fZGVjcnlwdCYmIXRoaXMuX2F1dGhUYWcpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBzdGF0ZSBvciB1bmFibGUgdG8gYXV0aGVudGljYXRlIGRhdGEiKTt2YXIgUj1CKHRoaXMuX2doYXNoLmZpbmFsKDgqdGhpcy5fYWxlbiw4KnRoaXMuX2xlbiksdGhp'@;
put 'cy5fY2lwaGVyLmVuY3J5cHRCbG9jayh0aGlzLl9maW5JRCkpO2lmKHRoaXMuX2RlY3J5cHQmJmZ1bmN0aW9uIEsoUixFKXt2YXIgej0wO1IubGVuZ3RoIT09RS5sZW5ndGgmJnorKztmb3IodmFyIGo9TWF0aC5taW4oUi5sZW5ndGgsRS5sZW5ndGgpLFY9MDtWPGo7KytWKXorPVJbVl1eRVtW'@;
put 'XTtyZXR1cm4gen0oUix0aGlzLl9hdXRoVGFnKSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHN0YXRlIG9yIHVuYWJsZSB0byBhdXRoZW50aWNhdGUgZGF0YSIpO3RoaXMuX2F1dGhUYWc9Uix0aGlzLl9jaXBoZXIuc2NydWIoKX0sSS5wcm90b3R5cGUuZ2V0QXV0aFRhZz1mdW5jdGlv'@;
put 'bigpe2lmKHRoaXMuX2RlY3J5cHR8fCFrLmlzQnVmZmVyKHRoaXMuX2F1dGhUYWcpKXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKTtyZXR1cm4gdGhpcy5fYXV0aFRhZ30sSS5wcm90b3R5cGUuc2V0QXV0aFRhZz1mdW5j'@;
put 'dGlvbihFKXtpZighdGhpcy5fZGVjcnlwdCl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIik7dGhpcy5fYXV0aFRhZz1FfSxJLnByb3RvdHlwZS5zZXRBQUQ9ZnVuY3Rpb24oRSl7aWYodGhpcy5fY2FsbGVkKXRocm93IG5l'@;
put 'dyBFcnJvcigiQXR0ZW1wdGluZyB0byBzZXQgQUFEIGluIHVuc3VwcG9ydGVkIHN0YXRlIik7dGhpcy5fZ2hhc2gudXBkYXRlKEUpLHRoaXMuX2FsZW4rPUUubGVuZ3RofSxXZS5leHBvcnRzPUl9LDgyNDg5OihXZSx6ZSxUKT0+e3ZhciBzZT1UKDEyNjg5KSxrPVQoNTAwNDYpLHY9VCg0NDk0'@;
put 'Nik7emUuY3JlYXRlQ2lwaGVyPXplLkNpcGhlcj1zZS5jcmVhdGVDaXBoZXIsemUuY3JlYXRlQ2lwaGVyaXY9emUuQ2lwaGVyaXY9c2UuY3JlYXRlQ2lwaGVyaXYsemUuY3JlYXRlRGVjaXBoZXI9emUuRGVjaXBoZXI9ay5jcmVhdGVEZWNpcGhlcix6ZS5jcmVhdGVEZWNpcGhlcml2PXplLkRl'@;
put 'Y2lwaGVyaXY9ay5jcmVhdGVEZWNpcGhlcml2LHplLmxpc3RDaXBoZXJzPXplLmdldENpcGhlcnM9ZnVuY3Rpb24gaGUoKXtyZXR1cm4gT2JqZWN0LmtleXModil9fSw1MDA0NjooV2UsemUsVCk9Pnt2YXIgc2U9VCg1NjA4Nyksaz1UKDg0MykuQnVmZmVyLHY9VCgxMjQyMSksaGU9VCg4OTM1'@;
put 'NCksSD1UKDg2NDIwKSxCPVQoNjQwMyksTD1UKDM2NTA1KTtmdW5jdGlvbiBKKGosVixHKXtILmNhbGwodGhpcyksdGhpcy5fY2FjaGU9bmV3IEksdGhpcy5fbGFzdD12b2lkIDAsdGhpcy5fY2lwaGVyPW5ldyBCLkFFUyhWKSx0aGlzLl9wcmV2PWsuZnJvbShHKSx0aGlzLl9tb2RlPWosdGhp'@;
put 'cy5fYXV0b3BhZGRpbmc9ITB9ZnVuY3Rpb24gSSgpe3RoaXMuY2FjaGU9ay5hbGxvY1Vuc2FmZSgwKX1mdW5jdGlvbiBFKGosVixHKXt2YXIgVz12W2oudG9Mb3dlckNhc2UoKV07aWYoIVcpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7aWYoInN0cmluZyI9PXR5'@;
put 'cGVvZiBHJiYoRz1rLmZyb20oRykpLCJHQ00iIT09Vy5tb2RlJiZHLmxlbmd0aCE9PVcuaXYpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBpdiBsZW5ndGggIitHLmxlbmd0aCk7aWYoInN0cmluZyI9PXR5cGVvZiBWJiYoVj1rLmZyb20oVikpLFYubGVuZ3RoIT09Vy5rZXkvOCl0aHJv'@;
put 'dyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGtleSBsZW5ndGggIitWLmxlbmd0aCk7cmV0dXJuInN0cmVhbSI9PT1XLnR5cGU/bmV3IGhlKFcubW9kdWxlLFYsRywhMCk6ImF1dGgiPT09Vy50eXBlP25ldyBzZShXLm1vZHVsZSxWLEcsITApOm5ldyBKKFcubW9kdWxlLFYsRyl9VCg2NjY5OCko'@;
put 'SixIKSxKLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGope3RoaXMuX2NhY2hlLmFkZChqKTtmb3IodmFyIFYsRyxXPVtdO1Y9dGhpcy5fY2FjaGUuZ2V0KHRoaXMuX2F1dG9wYWRkaW5nKTspRz10aGlzLl9tb2RlLmRlY3J5cHQodGhpcyxWKSxXLnB1c2goRyk7cmV0dXJuIGsuY29uY2F0'@;
put 'KFcpfSxKLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgaj10aGlzLl9jYWNoZS5mbHVzaCgpO2lmKHRoaXMuX2F1dG9wYWRkaW5nKXJldHVybiBmdW5jdGlvbiBSKGope3ZhciBWPWpbMTVdO2lmKFY8MXx8Vj4xNil0aHJvdyBuZXcgRXJyb3IoInVuYWJsZSB0byBkZWNyeXB0IGRh'@;
put 'dGEiKTtmb3IodmFyIEc9LTE7KytHPFY7KWlmKGpbRysoMTYtVildIT09Vil0aHJvdyBuZXcgRXJyb3IoInVuYWJsZSB0byBkZWNyeXB0IGRhdGEiKTtpZigxNiE9PVYpcmV0dXJuIGouc2xpY2UoMCwxNi1WKX0odGhpcy5fbW9kZS5kZWNyeXB0KHRoaXMsaikpO2lmKGopdGhyb3cgbmV3IEVy'@;
put 'cm9yKCJkYXRhIG5vdCBtdWx0aXBsZSBvZiBibG9jayBsZW5ndGgiKX0sSi5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24oail7cmV0dXJuIHRoaXMuX2F1dG9wYWRkaW5nPSEhaix0aGlzfSxJLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oail7dGhpcy5jYWNoZT1rLmNvbmNhdChb'@;
put 'dGhpcy5jYWNoZSxqXSl9LEkucHJvdG90eXBlLmdldD1mdW5jdGlvbihqKXt2YXIgVjtpZihqKXtpZih0aGlzLmNhY2hlLmxlbmd0aD4xNilyZXR1cm4gVj10aGlzLmNhY2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksVn1lbHNlIGlmKHRoaXMuY2FjaGUu'@;
put 'bGVuZ3RoPj0xNilyZXR1cm4gVj10aGlzLmNhY2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksVjtyZXR1cm4gbnVsbH0sSS5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXtpZih0aGlzLmNhY2hlLmxlbmd0aClyZXR1cm4gdGhpcy5jYWNoZX0semUuY3Jl'@;
put 'YXRlRGVjaXBoZXI9ZnVuY3Rpb24geihqLFYpe3ZhciBHPXZbai50b0xvd2VyQ2FzZSgpXTtpZighRyl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTt2YXIgVz1MKFYsITEsRy5rZXksRy5pdik7cmV0dXJuIEUoaixXLmtleSxXLml2KX0semUuY3JlYXRlRGVjaXBo'@;
put 'ZXJpdj1FfSwxMjY4OTooV2UsemUsVCk9Pnt2YXIgc2U9VCgxMjQyMSksaz1UKDU2MDg3KSx2PVQoODQzKS5CdWZmZXIsaGU9VCg4OTM1NCksSD1UKDg2NDIwKSxCPVQoNjQwMyksTD1UKDM2NTA1KTtmdW5jdGlvbiBKKGosVixHKXtILmNhbGwodGhpcyksdGhpcy5fY2FjaGU9bmV3IFIsdGhp'@;
put 'cy5fY2lwaGVyPW5ldyBCLkFFUyhWKSx0aGlzLl9wcmV2PXYuZnJvbShHKSx0aGlzLl9tb2RlPWosdGhpcy5fYXV0b3BhZGRpbmc9ITB9VCg2NjY5OCkoSixIKSxKLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGope3RoaXMuX2NhY2hlLmFkZChqKTtmb3IodmFyIFYsRyxXPVtdO1Y9dGhp'@;
put 'cy5fY2FjaGUuZ2V0KCk7KUc9dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsViksVy5wdXNoKEcpO3JldHVybiB2LmNvbmNhdChXKX07dmFyIEk9di5hbGxvYygxNiwxNik7ZnVuY3Rpb24gUigpe3RoaXMuY2FjaGU9di5hbGxvY1Vuc2FmZSgwKX1mdW5jdGlvbiBFKGosVixHKXt2YXIgVz1zZVtq'@;
put 'LnRvTG93ZXJDYXNlKCldO2lmKCFXKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgViYmKFY9di5mcm9tKFYpKSxWLmxlbmd0aCE9PVcua2V5LzgpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBrZXkgbGVuZ3RoICIrVi5s'@;
put 'ZW5ndGgpO2lmKCJzdHJpbmciPT10eXBlb2YgRyYmKEc9di5mcm9tKEcpKSwiR0NNIiE9PVcubW9kZSYmRy5sZW5ndGghPT1XLml2KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgaXYgbGVuZ3RoICIrRy5sZW5ndGgpO3JldHVybiJzdHJlYW0iPT09Vy50eXBlP25ldyBoZShXLm1vZHVs'@;
put 'ZSxWLEcpOiJhdXRoIj09PVcudHlwZT9uZXcgayhXLm1vZHVsZSxWLEcpOm5ldyBKKFcubW9kdWxlLFYsRyl9Si5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIGo9dGhpcy5fY2FjaGUuZmx1c2goKTtpZih0aGlzLl9hdXRvcGFkZGluZylyZXR1cm4gaj10aGlzLl9tb2RlLmVuY3J5'@;
put 'cHQodGhpcyxqKSx0aGlzLl9jaXBoZXIuc2NydWIoKSxqO2lmKCFqLmVxdWFscyhJKSl0aHJvdyB0aGlzLl9jaXBoZXIuc2NydWIoKSxuZXcgRXJyb3IoImRhdGEgbm90IG11bHRpcGxlIG9mIGJsb2NrIGxlbmd0aCIpfSxKLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbihqKXty'@;
put 'ZXR1cm4gdGhpcy5fYXV0b3BhZGRpbmc9ISFqLHRoaXN9LFIucHJvdG90eXBlLmFkZD1mdW5jdGlvbihqKXt0aGlzLmNhY2hlPXYuY29uY2F0KFt0aGlzLmNhY2hlLGpdKX0sUi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7aWYodGhpcy5jYWNoZS5sZW5ndGg+MTUpe3ZhciBqPXRoaXMuY2Fj'@;
put 'aGUuc2xpY2UoMCwxNik7cmV0dXJuIHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksan1yZXR1cm4gbnVsbH0sUi5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXtmb3IodmFyIGo9MTYtdGhpcy5jYWNoZS5sZW5ndGgsVj12LmFsbG9jVW5zYWZlKGopLEc9LTE7KytHPGo7KVYud3Jp'@;
put 'dGVVSW50OChqLEcpO3JldHVybiB2LmNvbmNhdChbdGhpcy5jYWNoZSxWXSl9LHplLmNyZWF0ZUNpcGhlcml2PUUsemUuY3JlYXRlQ2lwaGVyPWZ1bmN0aW9uIHooaixWKXt2YXIgRz1zZVtqLnRvTG93ZXJDYXNlKCldO2lmKCFHKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUg'@;
put 'dHlwZSIpO3ZhciBXPUwoViwhMSxHLmtleSxHLml2KTtyZXR1cm4gRShqLFcua2V5LFcuaXYpfX0sMTUwMzooV2UsemUsVCk9Pnt2YXIgc2U9VCg4NDMpLkJ1ZmZlcixrPXNlLmFsbG9jKDE2LDApO2Z1bmN0aW9uIGhlKEIpe3ZhciBMPXNlLmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gTC53cml0'@;
put 'ZVVJbnQzMkJFKEJbMF0+Pj4wLDApLEwud3JpdGVVSW50MzJCRShCWzFdPj4+MCw0KSxMLndyaXRlVUludDMyQkUoQlsyXT4+PjAsOCksTC53cml0ZVVJbnQzMkJFKEJbM10+Pj4wLDEyKSxMfWZ1bmN0aW9uIEgoQil7dGhpcy5oPUIsdGhpcy5zdGF0ZT1zZS5hbGxvYygxNiwwKSx0aGlzLmNh'@;
put 'Y2hlPXNlLmFsbG9jVW5zYWZlKDApfUgucHJvdG90eXBlLmdoYXNoPWZ1bmN0aW9uKEIpe2Zvcih2YXIgTD0tMTsrK0w8Qi5sZW5ndGg7KXRoaXMuc3RhdGVbTF1ePUJbTF07dGhpcy5fbXVsdGlwbHkoKX0sSC5wcm90b3R5cGUuX211bHRpcGx5PWZ1bmN0aW9uKCl7Zm9yKHZhciBLLEksQj1m'@;
put 'dW5jdGlvbiB2KEIpe3JldHVybltCLnJlYWRVSW50MzJCRSgwKSxCLnJlYWRVSW50MzJCRSg0KSxCLnJlYWRVSW50MzJCRSg4KSxCLnJlYWRVSW50MzJCRSgxMildfSh0aGlzLmgpLEw9WzAsMCwwLDBdLFI9LTE7KytSPDEyODspe2ZvcigwIT0odGhpcy5zdGF0ZVt+fihSLzgpXSYxPDw3LVIl'@;
put 'OCkmJihMWzBdXj1CWzBdLExbMV1ePUJbMV0sTFsyXV49QlsyXSxMWzNdXj1CWzNdKSxJPTAhPSgxJkJbM10pLEs9MztLPjA7Sy0tKUJbS109QltLXT4+PjF8KDEmQltLLTFdKTw8MzE7QlswXT1CWzBdPj4+MSxJJiYoQlswXT1CWzBdXjIyNTw8MjQpfXRoaXMuc3RhdGU9aGUoTCl9LEgucHJv'@;
put 'dG90eXBlLnVwZGF0ZT1mdW5jdGlvbihCKXt0aGlzLmNhY2hlPXNlLmNvbmNhdChbdGhpcy5jYWNoZSxCXSk7Zm9yKHZhciBMO3RoaXMuY2FjaGUubGVuZ3RoPj0xNjspTD10aGlzLmNhY2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksdGhpcy5naGFzaChM'@;
put 'KX0sSC5wcm90b3R5cGUuZmluYWw9ZnVuY3Rpb24oQixMKXtyZXR1cm4gdGhpcy5jYWNoZS5sZW5ndGgmJnRoaXMuZ2hhc2goc2UuY29uY2F0KFt0aGlzLmNhY2hlLGtdLDE2KSksdGhpcy5naGFzaChoZShbMCxCLDAsTF0pKSx0aGlzLnN0YXRlfSxXZS5leHBvcnRzPUh9LDkxMDc6V2U9PntX'@;
put 'ZS5leHBvcnRzPWZ1bmN0aW9uIHplKFQpe2Zvcih2YXIgayxzZT1ULmxlbmd0aDtzZS0tOyl7aWYoMjU1IT09KGs9VC5yZWFkVUludDgoc2UpKSl7aysrLFQud3JpdGVVSW50OChrLHNlKTticmVha31ULndyaXRlVUludDgoMCxzZSl9fX0sMzExNzU6KFdlLHplLFQpPT57dmFyIHNlPVQoNjM2'@;
put 'MzYpO3plLmVuY3J5cHQ9ZnVuY3Rpb24oayx2KXt2YXIgaGU9c2UodixrLl9wcmV2KTtyZXR1cm4gay5fcHJldj1rLl9jaXBoZXIuZW5jcnlwdEJsb2NrKGhlKSxrLl9wcmV2fSx6ZS5kZWNyeXB0PWZ1bmN0aW9uKGssdil7dmFyIGhlPWsuX3ByZXY7ay5fcHJldj12O3ZhciBIPWsuX2NpcGhl'@;
put 'ci5kZWNyeXB0QmxvY2sodik7cmV0dXJuIHNlKEgsaGUpfX0sNDM2MzE6KFdlLHplLFQpPT57dmFyIHNlPVQoODQzKS5CdWZmZXIsaz1UKDYzNjM2KTtmdW5jdGlvbiB2KGhlLEgsQil7dmFyIEw9SC5sZW5ndGgsSz1rKEgsaGUuX2NhY2hlKTtyZXR1cm4gaGUuX2NhY2hlPWhlLl9jYWNoZS5z'@;
put 'bGljZShMKSxoZS5fcHJldj1zZS5jb25jYXQoW2hlLl9wcmV2LEI/SDpLXSksS316ZS5lbmNyeXB0PWZ1bmN0aW9uKGhlLEgsQil7Zm9yKHZhciBLLEw9c2UuYWxsb2NVbnNhZmUoMCk7SC5sZW5ndGg7KXtpZigwPT09aGUuX2NhY2hlLmxlbmd0aCYmKGhlLl9jYWNoZT1oZS5fY2lwaGVyLmVu'@;
put 'Y3J5cHRCbG9jayhoZS5fcHJldiksaGUuX3ByZXY9c2UuYWxsb2NVbnNhZmUoMCkpLCEoaGUuX2NhY2hlLmxlbmd0aDw9SC5sZW5ndGgpKXtMPXNlLmNvbmNhdChbTCx2KGhlLEgsQildKTticmVha31MPXNlLmNvbmNhdChbTCx2KGhlLEguc2xpY2UoMCxLPWhlLl9jYWNoZS5sZW5ndGgpLEIp'@;
put 'XSksSD1ILnNsaWNlKEspfXJldHVybiBMfX0sMzM4OTI6KFdlLHplLFQpPT57dmFyIHNlPVQoODQzKS5CdWZmZXI7ZnVuY3Rpb24gayhoZSxILEIpe2Zvcih2YXIgUixFLEs9LTEsST0wOysrSzw4OylJKz0oMTI4JihFPWhlLl9jaXBoZXIuZW5jcnlwdEJsb2NrKGhlLl9wcmV2KVswXV4oUj1I'@;
put 'JjE8PDctSz8xMjg6MCkpKT4+SyU4LGhlLl9wcmV2PXYoaGUuX3ByZXYsQj9SOkUpO3JldHVybiBJfWZ1bmN0aW9uIHYoaGUsSCl7dmFyIEI9aGUubGVuZ3RoLEw9LTEsSz1zZS5hbGxvY1Vuc2FmZShoZS5sZW5ndGgpO2ZvcihoZT1zZS5jb25jYXQoW2hlLHNlLmZyb20oW0hdKV0pOysrTDxC'@;
put 'OylLW0xdPWhlW0xdPDwxfGhlW0wrMV0+Pjc7cmV0dXJuIEt9emUuZW5jcnlwdD1mdW5jdGlvbihoZSxILEIpe2Zvcih2YXIgTD1ILmxlbmd0aCxLPXNlLmFsbG9jVW5zYWZlKEwpLEo9LTE7KytKPEw7KUtbSl09ayhoZSxIW0pdLEIpO3JldHVybiBLfX0sMzY3ODc6KFdlLHplLFQpPT57dmFy'@;
put 'IHNlPVQoODQzKS5CdWZmZXI7ZnVuY3Rpb24gayh2LGhlLEgpe3ZhciBMPXYuX2NpcGhlci5lbmNyeXB0QmxvY2sodi5fcHJldilbMF1eaGU7cmV0dXJuIHYuX3ByZXY9c2UuY29uY2F0KFt2Ll9wcmV2LnNsaWNlKDEpLHNlLmZyb20oW0g/aGU6TF0pXSksTH16ZS5lbmNyeXB0PWZ1bmN0aW9u'@;
put 'KHYsaGUsSCl7Zm9yKHZhciBCPWhlLmxlbmd0aCxMPXNlLmFsbG9jVW5zYWZlKEIpLEs9LTE7KytLPEI7KUxbS109ayh2LGhlW0tdLEgpO3JldHVybiBMfX0sODUyNjg6KFdlLHplLFQpPT57dmFyIHNlPVQoNjM2MzYpLGs9VCg4NDMpLkJ1ZmZlcix2PVQoOTEwNyk7ZnVuY3Rpb24gaGUoQil7'@;
put 'dmFyIEw9Qi5fY2lwaGVyLmVuY3J5cHRCbG9ja1JhdyhCLl9wcmV2KTtyZXR1cm4gdihCLl9wcmV2KSxMfXplLmVuY3J5cHQ9ZnVuY3Rpb24oQixMKXt2YXIgSz1NYXRoLmNlaWwoTC5sZW5ndGgvMTYpLEo9Qi5fY2FjaGUubGVuZ3RoO0IuX2NhY2hlPWsuY29uY2F0KFtCLl9jYWNoZSxrLmFs'@;
put 'bG9jVW5zYWZlKDE2KkspXSk7Zm9yKHZhciBJPTA7STxLO0krKyl7dmFyIFI9aGUoQiksRT1KKzE2Kkk7Qi5fY2FjaGUud3JpdGVVSW50MzJCRShSWzBdLEUrMCksQi5fY2FjaGUud3JpdGVVSW50MzJCRShSWzFdLEUrNCksQi5fY2FjaGUud3JpdGVVSW50MzJCRShSWzJdLEUrOCksQi5fY2Fj'@;
put 'aGUud3JpdGVVSW50MzJCRShSWzNdLEUrMTIpfXZhciB6PUIuX2NhY2hlLnNsaWNlKDAsTC5sZW5ndGgpO3JldHVybiBCLl9jYWNoZT1CLl9jYWNoZS5zbGljZShMLmxlbmd0aCksc2UoTCx6KX19LDQ1OTk1OihXZSx6ZSk9Pnt6ZS5lbmNyeXB0PWZ1bmN0aW9uKFQsc2Upe3JldHVybiBULl9j'@;
put 'aXBoZXIuZW5jcnlwdEJsb2NrKHNlKX0semUuZGVjcnlwdD1mdW5jdGlvbihULHNlKXtyZXR1cm4gVC5fY2lwaGVyLmRlY3J5cHRCbG9jayhzZSl9fSwxMjQyMTooV2UsemUsVCk9Pnt2YXIgc2U9e0VDQjpUKDQ1OTk1KSxDQkM6VCgzMTE3NSksQ0ZCOlQoNDM2MzEpLENGQjg6VCgzNjc4Nyks'@;
put 'Q0ZCMTpUKDMzODkyKSxPRkI6VCgzNDUzMiksQ1RSOlQoODUyNjgpLEdDTTpUKDg1MjY4KX0saz1UKDQ0OTQ2KTtmb3IodmFyIHYgaW4gaylrW3ZdLm1vZHVsZT1zZVtrW3ZdLm1vZGVdO1dlLmV4cG9ydHM9a30sMzQ1MzI6KFdlLHplLFQpPT57dmFyIHNlPVQoNjM2MzYpO2Z1bmN0aW9uIGso'@;
put 'dil7cmV0dXJuIHYuX3ByZXY9di5fY2lwaGVyLmVuY3J5cHRCbG9jayh2Ll9wcmV2KSx2Ll9wcmV2fXplLmVuY3J5cHQ9ZnVuY3Rpb24odixoZSl7Zm9yKDt2Ll9jYWNoZS5sZW5ndGg8aGUubGVuZ3RoOyl2Ll9jYWNoZT1CdWZmZXIuY29uY2F0KFt2Ll9jYWNoZSxrKHYpXSk7dmFyIEg9di5f'@;
put 'Y2FjaGUuc2xpY2UoMCxoZS5sZW5ndGgpO3JldHVybiB2Ll9jYWNoZT12Ll9jYWNoZS5zbGljZShoZS5sZW5ndGgpLHNlKGhlLEgpfX0sODkzNTQ6KFdlLHplLFQpPT57dmFyIHNlPVQoNjQwMyksaz1UKDg0MykuQnVmZmVyLHY9VCg4NjQyMCk7ZnVuY3Rpb24gSChCLEwsSyxKKXt2LmNhbGwo'@;
put 'dGhpcyksdGhpcy5fY2lwaGVyPW5ldyBzZS5BRVMoTCksdGhpcy5fcHJldj1rLmZyb20oSyksdGhpcy5fY2FjaGU9ay5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9zZWNDYWNoZT1rLmFsbG9jVW5zYWZlKDApLHRoaXMuX2RlY3J5cHQ9Six0aGlzLl9tb2RlPUJ9VCg2NjY5OCkoSCx2KSxILnByb3Rv'@;
put 'dHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEIpe3JldHVybiB0aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxCLHRoaXMuX2RlY3J5cHQpfSxILnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt0aGlzLl9jaXBoZXIuc2NydWIoKX0sV2UuZXhwb3J0cz1IfSwyNTYwMDooV2UsemUsVCk9Pnt2YXIgc2U9'@;
put 'VCgxNDk0OCksaz1UKDgyNDg5KSx2PVQoMTI0MjEpLGhlPVQoODk0MDIpLEg9VCgzNjUwNSk7ZnVuY3Rpb24gSyhSLEUseil7aWYoUj1SLnRvTG93ZXJDYXNlKCksdltSXSlyZXR1cm4gay5jcmVhdGVDaXBoZXJpdihSLEUseik7aWYoaGVbUl0pcmV0dXJuIG5ldyBzZSh7a2V5OkUsaXY6eixt'@;
put 'b2RlOlJ9KTt0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKX1mdW5jdGlvbiBKKFIsRSx6KXtpZihSPVIudG9Mb3dlckNhc2UoKSx2W1JdKXJldHVybiBrLmNyZWF0ZURlY2lwaGVyaXYoUixFLHopO2lmKGhlW1JdKXJldHVybiBuZXcgc2Uoe2tleTpFLGl2OnosbW9k'@;
put 'ZTpSLGRlY3J5cHQ6ITB9KTt0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKX16ZS5jcmVhdGVDaXBoZXI9emUuQ2lwaGVyPWZ1bmN0aW9uIEIoUixFKXt2YXIgeixqO2lmKFI9Ui50b0xvd2VyQ2FzZSgpLHZbUl0pej12W1JdLmtleSxqPXZbUl0uaXY7ZWxzZXtpZigh'@;
put 'aGVbUl0pdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7ej04KmhlW1JdLmtleSxqPWhlW1JdLml2fXZhciBWPUgoRSwhMSx6LGopO3JldHVybiBLKFIsVi5rZXksVi5pdil9LHplLmNyZWF0ZUNpcGhlcml2PXplLkNpcGhlcml2PUssemUuY3JlYXRlRGVjaXBoZXI9'@;
put 'emUuRGVjaXBoZXI9ZnVuY3Rpb24gTChSLEUpe3ZhciB6LGo7aWYoUj1SLnRvTG93ZXJDYXNlKCksdltSXSl6PXZbUl0ua2V5LGo9dltSXS5pdjtlbHNle2lmKCFoZVtSXSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTt6PTgqaGVbUl0ua2V5LGo9aGVbUl0uaXZ9'@;
put 'dmFyIFY9SChFLCExLHosaik7cmV0dXJuIEooUixWLmtleSxWLml2KX0semUuY3JlYXRlRGVjaXBoZXJpdj16ZS5EZWNpcGhlcml2PUosemUubGlzdENpcGhlcnM9emUuZ2V0Q2lwaGVycz1mdW5jdGlvbiBJKCl7cmV0dXJuIE9iamVjdC5rZXlzKGhlKS5jb25jYXQoay5nZXRDaXBoZXJzKCkp'@;
put 'fX0sMTQ5NDg6KFdlLHplLFQpPT57dmFyIHNlPVQoODY0MjApLGs9VCg0MDEzMiksdj1UKDY2Njk4KSxoZT1UKDg0MykuQnVmZmVyLEg9eyJkZXMtZWRlMy1jYmMiOmsuQ0JDLmluc3RhbnRpYXRlKGsuRURFKSwiZGVzLWVkZTMiOmsuRURFLCJkZXMtZWRlLWNiYyI6ay5DQkMuaW5zdGFudGlh'@;
put 'dGUoay5FREUpLCJkZXMtZWRlIjprLkVERSwiZGVzLWNiYyI6ay5DQkMuaW5zdGFudGlhdGUoay5ERVMpLCJkZXMtZWNiIjprLkRFU307ZnVuY3Rpb24gQihMKXtzZS5jYWxsKHRoaXMpO3ZhciBJLEs9TC5tb2RlLnRvTG93ZXJDYXNlKCksSj1IW0tdO0k9TC5kZWNyeXB0PyJkZWNyeXB0Ijoi'@;
put 'ZW5jcnlwdCI7dmFyIFI9TC5rZXk7aGUuaXNCdWZmZXIoUil8fChSPWhlLmZyb20oUikpLCgiZGVzLWVkZSI9PT1LfHwiZGVzLWVkZS1jYmMiPT09SykmJihSPWhlLmNvbmNhdChbUixSLnNsaWNlKDAsOCldKSk7dmFyIEU9TC5pdjtoZS5pc0J1ZmZlcihFKXx8KEU9aGUuZnJvbShFKSksdGhp'@;
put 'cy5fZGVzPUouY3JlYXRlKHtrZXk6UixpdjpFLHR5cGU6SX0pfUguZGVzPUhbImRlcy1jYmMiXSxILmRlczM9SFsiZGVzLWVkZTMtY2JjIl0sV2UuZXhwb3J0cz1CLHYoQixzZSksQi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihMKXtyZXR1cm4gaGUuZnJvbSh0aGlzLl9kZXMudXBkYXRl'@;
put 'KEwpKX0sQi5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIGhlLmZyb20odGhpcy5fZGVzLmZpbmFsKCkpfX0sODk0MDI6KFdlLHplKT0+e3plWyJkZXMtZWNiIl09e2tleTo4LGl2OjB9LHplWyJkZXMtY2JjIl09emUuZGVzPXtrZXk6OCxpdjo4fSx6ZVsiZGVzLWVkZTMtY2Jj'@;
put 'Il09emUuZGVzMz17a2V5OjI0LGl2Ojh9LHplWyJkZXMtZWRlMyJdPXtrZXk6MjQsaXY6MH0semVbImRlcy1lZGUtY2JjIl09e2tleToxNixpdjo4fSx6ZVsiZGVzLWVkZSJdPXtrZXk6MTYsaXY6MH19LDcxOTQ2OihXZSx6ZSxUKT0+e3ZhciBzZT1UKDYyNjYyKSxrPVQoNDQwMTkpO2Z1bmN0'@;
put 'aW9uIGhlKEIpe3ZhciBLLEw9Qi5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtkb3tLPW5ldyBzZShrKEwpKX13aGlsZShLLmNtcChCLm1vZHVsdXMpPj0wfHwhSy51bW9kKEIucHJpbWUxKXx8IUsudW1vZChCLnByaW1lMikpO3JldHVybiBLfWZ1bmN0aW9uIEgoQixMKXt2YXIgSz1mdW5jdGlvbiB2'@;
put 'KEIpe3ZhciBMPWhlKEIpO3JldHVybntibGluZGVyOkwudG9SZWQoc2UubW9udChCLm1vZHVsdXMpKS5yZWRQb3cobmV3IHNlKEIucHVibGljRXhwb25lbnQpKS5mcm9tUmVkKCksdW5ibGluZGVyOkwuaW52bShCLm1vZHVsdXMpfX0oTCksSj1MLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLEk9bmV3'@;
put 'IHNlKEIpLm11bChLLmJsaW5kZXIpLnVtb2QoTC5tb2R1bHVzKSxSPUkudG9SZWQoc2UubW9udChMLnByaW1lMSkpLEU9SS50b1JlZChzZS5tb250KEwucHJpbWUyKSksej1MLmNvZWZmaWNpZW50LGo9TC5wcmltZTEsVj1MLnByaW1lMixHPVIucmVkUG93KEwuZXhwb25lbnQxKS5mcm9tUmVk'@;
put 'KCksVz1FLnJlZFBvdyhMLmV4cG9uZW50MikuZnJvbVJlZCgpLFU9Ry5pc3ViKFcpLmltdWwoeikudW1vZChqKS5pbXVsKFYpO3JldHVybiBXLmlhZGQoVSkuaW11bChLLnVuYmxpbmRlcikudW1vZChMLm1vZHVsdXMpLnRvQXJyYXlMaWtlKEJ1ZmZlciwiYmUiLEopfUguZ2V0cj1oZSxXZS5l'@;
put 'eHBvcnRzPUh9LDgxNjk5OihXZSx6ZSxUKT0+e1dlLmV4cG9ydHM9VCg3NTIwNyl9LDI3Njg2OihXZSx6ZSxUKT0+e3ZhciBzZT1UKDg0MykuQnVmZmVyLGs9VCg5NjM2Miksdj1UKDk2NzQ1KSxoZT1UKDY2Njk4KSxIPVQoNjM2MDIpLEI9VCg1MTE3MyksTD1UKDc1MjA3KTtmdW5jdGlvbiBL'@;
put 'KEUpe3YuV3JpdGFibGUuY2FsbCh0aGlzKTt2YXIgej1MW0VdO2lmKCF6KXRocm93IG5ldyBFcnJvcigiVW5rbm93biBtZXNzYWdlIGRpZ2VzdCIpO3RoaXMuX2hhc2hUeXBlPXouaGFzaCx0aGlzLl9oYXNoPWsoei5oYXNoKSx0aGlzLl90YWc9ei5pZCx0aGlzLl9zaWduVHlwZT16LnNpZ259'@;
put 'ZnVuY3Rpb24gSihFKXt2LldyaXRhYmxlLmNhbGwodGhpcyk7dmFyIHo9TFtFXTtpZigheil0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gbWVzc2FnZSBkaWdlc3QiKTt0aGlzLl9oYXNoPWsoei5oYXNoKSx0aGlzLl90YWc9ei5pZCx0aGlzLl9zaWduVHlwZT16LnNpZ259ZnVuY3Rpb24gSShF'@;
put 'KXtyZXR1cm4gbmV3IEsoRSl9ZnVuY3Rpb24gUihFKXtyZXR1cm4gbmV3IEooRSl9T2JqZWN0LmtleXMoTCkuZm9yRWFjaChmdW5jdGlvbihFKXtMW0VdLmlkPXNlLmZyb20oTFtFXS5pZCwiaGV4IiksTFtFLnRvTG93ZXJDYXNlKCldPUxbRV19KSxoZShLLHYuV3JpdGFibGUpLEsucHJvdG90'@;
put 'eXBlLl93cml0ZT1mdW5jdGlvbih6LGosVil7dGhpcy5faGFzaC51cGRhdGUoeiksVigpfSxLLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oeixqKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHomJih6PXNlLmZyb20oeixqKSksdGhpcy5faGFzaC51cGRhdGUoeiksdGhpc30sSy5wcm90b3R5'@;
put 'cGUuc2lnbj1mdW5jdGlvbih6LGope3RoaXMuZW5kKCk7dmFyIFY9dGhpcy5faGFzaC5kaWdlc3QoKSxHPUgoVix6LHRoaXMuX2hhc2hUeXBlLHRoaXMuX3NpZ25UeXBlLHRoaXMuX3RhZyk7cmV0dXJuIGo/Ry50b1N0cmluZyhqKTpHfSxoZShKLHYuV3JpdGFibGUpLEoucHJvdG90eXBlLl93'@;
put 'cml0ZT1mdW5jdGlvbih6LGosVil7dGhpcy5faGFzaC51cGRhdGUoeiksVigpfSxKLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oeixqKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHomJih6PXNlLmZyb20oeixqKSksdGhpcy5faGFzaC51cGRhdGUoeiksdGhpc30sSi5wcm90b3R5cGUudmVy'@;
put 'aWZ5PWZ1bmN0aW9uKHosaixWKXsic3RyaW5nIj09dHlwZW9mIGomJihqPXNlLmZyb20oaixWKSksdGhpcy5lbmQoKTt2YXIgRz10aGlzLl9oYXNoLmRpZ2VzdCgpO3JldHVybiBCKGosRyx6LHRoaXMuX3NpZ25UeXBlLHRoaXMuX3RhZyl9LFdlLmV4cG9ydHM9e1NpZ246SSxWZXJpZnk6Uixj'@;
put 'cmVhdGVTaWduOkksY3JlYXRlVmVyaWZ5OlJ9fSw2MzYwMjooV2UsemUsVCk9Pnt2YXIgc2U9VCg4NDMpLkJ1ZmZlcixrPVQoODU4MjUpLHY9VCg3MTk0NiksaGU9VCg4ODY1MSkuZWMsSD1UKDYyNjYyKSxCPVQoODc5ODMpLEw9VCgxMzA4KTtmdW5jdGlvbiBFKFcsVSxxLHRlKXtpZigoVz1z'@;
put 'ZS5mcm9tKFcudG9BcnJheSgpKSkubGVuZ3RoPFUuYnl0ZUxlbmd0aCgpKXt2YXIgbmU9c2UuYWxsb2MoVS5ieXRlTGVuZ3RoKCktVy5sZW5ndGgpO1c9c2UuY29uY2F0KFtuZSxXXSl9dmFyIGllPXEubGVuZ3RoLGxlPWZ1bmN0aW9uIGooVyxVKXtXPShXPXooVyxVKSkubW9kKFUpO3ZhciBx'@;
put 'PXNlLmZyb20oVy50b0FycmF5KCkpO2lmKHEubGVuZ3RoPFUuYnl0ZUxlbmd0aCgpKXt2YXIgdGU9c2UuYWxsb2MoVS5ieXRlTGVuZ3RoKCktcS5sZW5ndGgpO3E9c2UuY29uY2F0KFt0ZSxxXSl9cmV0dXJuIHF9KHEsVSksZGU9c2UuYWxsb2MoaWUpO2RlLmZpbGwoMSk7dmFyIHVlPXNlLmFs'@;
put 'bG9jKGllKTtyZXR1cm4gdWU9ayh0ZSx1ZSkudXBkYXRlKGRlKS51cGRhdGUoc2UuZnJvbShbMF0pKS51cGRhdGUoVykudXBkYXRlKGxlKS5kaWdlc3QoKSxkZT1rKHRlLHVlKS51cGRhdGUoZGUpLmRpZ2VzdCgpLHtrOnVlPWsodGUsdWUpLnVwZGF0ZShkZSkudXBkYXRlKHNlLmZyb20oWzFd'@;
put 'KSkudXBkYXRlKFcpLnVwZGF0ZShsZSkuZGlnZXN0KCksdjpkZT1rKHRlLHVlKS51cGRhdGUoZGUpLmRpZ2VzdCgpfX1mdW5jdGlvbiB6KFcsVSl7dmFyIHE9bmV3IEgoVyksdGU9KFcubGVuZ3RoPDwzKS1VLmJpdExlbmd0aCgpO3JldHVybiB0ZT4wJiZxLmlzaHJuKHRlKSxxfWZ1bmN0aW9u'@;
put 'IFYoVyxVLHEpe3ZhciB0ZSxuZTtkb3tmb3IodGU9c2UuYWxsb2MoMCk7OCp0ZS5sZW5ndGg8Vy5iaXRMZW5ndGgoKTspVS52PWsocSxVLmspLnVwZGF0ZShVLnYpLmRpZ2VzdCgpLHRlPXNlLmNvbmNhdChbdGUsVS52XSk7bmU9eih0ZSxXKSxVLms9ayhxLFUuaykudXBkYXRlKFUudikudXBk'@;
put 'YXRlKHNlLmZyb20oWzBdKSkuZGlnZXN0KCksVS52PWsocSxVLmspLnVwZGF0ZShVLnYpLmRpZ2VzdCgpfXdoaWxlKC0xIT09bmUuY21wKFcpKTtyZXR1cm4gbmV9ZnVuY3Rpb24gRyhXLFUscSx0ZSl7cmV0dXJuIFcudG9SZWQoSC5tb250KHEpKS5yZWRQb3coVSkuZnJvbVJlZCgpLm1vZCh0'@;
put 'ZSl9V2UuZXhwb3J0cz1mdW5jdGlvbiBLKFcsVSxxLHRlLG5lKXt2YXIgaWU9QihVKTtpZihpZS5jdXJ2ZSl7aWYoImVjZHNhIiE9PXRlJiYiZWNkc2EvcnNhIiE9PXRlKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbiBKKFcsVSl7dmFy'@;
put 'IHE9TFtVLmN1cnZlLmpvaW4oIi4iKV07aWYoIXEpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGN1cnZlICIrVS5jdXJ2ZS5qb2luKCIuIikpO3ZhciBpZT1uZXcgaGUocSkua2V5RnJvbVByaXZhdGUoVS5wcml2YXRlS2V5KS5zaWduKFcpO3JldHVybiBzZS5mcm9tKGllLnRvREVSKCkpfShX'@;
put 'LGllKX1pZigiZHNhIj09PWllLnR5cGUpe2lmKCJkc2EiIT09dGUpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwcml2YXRlIGtleSB0eXBlIik7cmV0dXJuIGZ1bmN0aW9uIEkoVyxVLHEpe2Zvcih2YXIgdWUsdGU9VS5wYXJhbXMucHJpdl9rZXksbmU9VS5wYXJhbXMucCxpZT1VLnBhcmFtcy5x'@;
put 'LGxlPVUucGFyYW1zLmcsZGU9bmV3IEgoMCksY2U9eihXLGllKS5tb2QoaWUpLFk9ITEsYj1FKHRlLGllLFcscSk7ITE9PT1ZOylkZT1HKGxlLHVlPVYoaWUsYixxKSxuZSxpZSksMD09PShZPXVlLmludm0oaWUpLmltdWwoY2UuYWRkKHRlLm11bChkZSkpKS5tb2QoaWUpKS5jbXBuKDApJiYo'@;
put 'WT0hMSxkZT1uZXcgSCgwKSk7cmV0dXJuIGZ1bmN0aW9uIFIoVyxVKXtXPVcudG9BcnJheSgpLFU9VS50b0FycmF5KCksMTI4JldbMF0mJihXPVswXS5jb25jYXQoVykpLDEyOCZVWzBdJiYoVT1bMF0uY29uY2F0KFUpKTt2YXIgdGU9WzQ4LFcubGVuZ3RoK1UubGVuZ3RoKzQsMixXLmxlbmd0'@;
put 'aF07cmV0dXJuIHRlPXRlLmNvbmNhdChXLFsyLFUubGVuZ3RoXSxVKSxzZS5mcm9tKHRlKX0oZGUsWSl9KFcsaWUscSl9aWYoInJzYSIhPT10ZSYmImVjZHNhL3JzYSIhPT10ZSl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHByaXZhdGUga2V5IHR5cGUiKTtXPXNlLmNvbmNhdChbbmUsV10pO2Zv'@;
put 'cih2YXIgbGU9aWUubW9kdWx1cy5ieXRlTGVuZ3RoKCksZGU9WzAsMV07Vy5sZW5ndGgrZGUubGVuZ3RoKzE8bGU7KWRlLnB1c2goMjU1KTtkZS5wdXNoKDApO2Zvcih2YXIgdWU9LTE7Kyt1ZTxXLmxlbmd0aDspZGUucHVzaChXW3VlXSk7cmV0dXJuIHYoZGUsaWUpfSxXZS5leHBvcnRzLmdl'@;
put 'dEtleT1FLFdlLmV4cG9ydHMubWFrZUtleT1WfSw1MTE3MzooV2UsemUsVCk9Pnt2YXIgc2U9VCg4NDMpLkJ1ZmZlcixrPVQoNjI2NjIpLHY9VCg4ODY1MSkuZWMsaGU9VCg4Nzk4MyksSD1UKDEzMDgpO2Z1bmN0aW9uIEooSSxSKXtpZihJLmNtcG4oMCk8PTApdGhyb3cgbmV3IEVycm9yKCJp'@;
put 'bnZhbGlkIHNpZyIpO2lmKEkuY21wKFIpPj1SKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaWciKX1XZS5leHBvcnRzPWZ1bmN0aW9uIEIoSSxSLEUseixqKXt2YXIgVj1oZShFKTtpZigiZWMiPT09Vi50eXBlKXtpZigiZWNkc2EiIT09eiYmImVjZHNhL3JzYSIhPT16KXRocm93IG5ldyBF'@;
put 'cnJvcigid3JvbmcgcHVibGljIGtleSB0eXBlIik7cmV0dXJuIGZ1bmN0aW9uIEwoSSxSLEUpe3ZhciB6PUhbRS5kYXRhLmFsZ29yaXRobS5jdXJ2ZS5qb2luKCIuIildO2lmKCF6KXRocm93IG5ldyBFcnJvcigidW5rbm93biBjdXJ2ZSAiK0UuZGF0YS5hbGdvcml0aG0uY3VydmUuam9pbigi'@;
put 'LiIpKTtyZXR1cm4gbmV3IHYoeikudmVyaWZ5KFIsSSxFLmRhdGEuc3ViamVjdFByaXZhdGVLZXkuZGF0YSl9KEksUixWKX1pZigiZHNhIj09PVYudHlwZSl7aWYoImRzYSIhPT16KXRocm93IG5ldyBFcnJvcigid3JvbmcgcHVibGljIGtleSB0eXBlIik7cmV0dXJuIGZ1bmN0aW9uIEsoSSxS'@;
put 'LEUpe3ZhciB6PUUuZGF0YS5wLGo9RS5kYXRhLnEsVj1FLmRhdGEuZyxHPUUuZGF0YS5wdWJfa2V5LFc9aGUuc2lnbmF0dXJlLmRlY29kZShJLCJkZXIiKSxVPVcucyxxPVcucjtKKFUsaiksSihxLGopO3ZhciB0ZT1rLm1vbnQoeiksbmU9VS5pbnZtKGopO3JldHVybiAwPT09Vi50b1JlZCh0'@;
put 'ZSkucmVkUG93KG5ldyBrKFIpLm11bChuZSkubW9kKGopKS5mcm9tUmVkKCkubXVsKEcudG9SZWQodGUpLnJlZFBvdyhxLm11bChuZSkubW9kKGopKS5mcm9tUmVkKCkpLm1vZCh6KS5tb2QoaikuY21wKHEpfShJLFIsVil9aWYoInJzYSIhPT16JiYiZWNkc2EvcnNhIiE9PXopdGhyb3cgbmV3'@;
put 'IEVycm9yKCJ3cm9uZyBwdWJsaWMga2V5IHR5cGUiKTtSPXNlLmNvbmNhdChbaixSXSk7Zm9yKHZhciBHPVYubW9kdWx1cy5ieXRlTGVuZ3RoKCksVz1bMV0sVT0wO1IubGVuZ3RoK1cubGVuZ3RoKzI8RzspVy5wdXNoKDI1NSksVSsrO1cucHVzaCgwKTtmb3IodmFyIHE9LTE7KytxPFIubGVu'@;
put 'Z3RoOylXLnB1c2goUltxXSk7Vz1zZS5mcm9tKFcpO3ZhciB0ZT1rLm1vbnQoVi5tb2R1bHVzKTtJPShJPW5ldyBrKEkpLnRvUmVkKHRlKSkucmVkUG93KG5ldyBrKFYucHVibGljRXhwb25lbnQpKSxJPXNlLmZyb20oSS5mcm9tUmVkKCkudG9BcnJheSgpKTt2YXIgbmU9VTw4PzE6MDtmb3Io'@;
put 'Rz1NYXRoLm1pbihJLmxlbmd0aCxXLmxlbmd0aCksSS5sZW5ndGghPT1XLmxlbmd0aCYmKG5lPTEpLHE9LTE7KytxPEc7KW5lfD1JW3FdXldbcV07cmV0dXJuIDA9PT1uZX19LDYzNjM2OldlPT57V2UuZXhwb3J0cz1mdW5jdGlvbihULHNlKXtmb3IodmFyIGs9TWF0aC5taW4oVC5sZW5ndGgs'@;
put 'c2UubGVuZ3RoKSx2PW5ldyBCdWZmZXIoayksaGU9MDtoZTxrOysraGUpdltoZV09VFtoZV1ec2VbaGVdO3JldHVybiB2fX0sMzkwMDc6KFdlLHplLFQpPT57InVzZSBzdHJpY3QiO3ZhciBzZT1UKDk5MTkpLGs9VCgyMjYwMSksdj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYiZnVuY3Rp'@;
put 'b24iPT10eXBlb2YgU3ltYm9sLmZvcj9TeW1ib2wuZm9yKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpOm51bGw7emUuQnVmZmVyPUwsemUuU2xvd0J1ZmZlcj1mdW5jdGlvbiBVKEtlKXtyZXR1cm4rS2UhPUtlJiYoS2U9MCksTC5hbGxvYygrS2UpfSx6ZS5JTlNQRUNUX01BWF9CWVRF'@;
put 'Uz01MDt2YXIgaGU9MjE0NzQ4MzY0NztmdW5jdGlvbiBCKEtlKXtpZihLZT5oZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInK0tlKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKTt2YXIgd2U9bmV3IFVpbnQ4QXJyYXkoS2UpO3JldHVybiBPYmplY3Quc2V0UHJv'@;
put 'dG90eXBlT2Yod2UsTC5wcm90b3R5cGUpLHdlfWZ1bmN0aW9uIEwoS2Usd2UsSWUpe2lmKCJudW1iZXIiPT10eXBlb2YgS2Upe2lmKCJzdHJpbmciPT10eXBlb2Ygd2UpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJzdHJpbmciIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuIFJl'@;
put 'Y2VpdmVkIHR5cGUgbnVtYmVyJyk7cmV0dXJuIFIoS2UpfXJldHVybiBLKEtlLHdlLEllKX1mdW5jdGlvbiBLKEtlLHdlLEllKXtpZigic3RyaW5nIj09dHlwZW9mIEtlKXJldHVybiBmdW5jdGlvbiBFKEtlLHdlKXtpZigoInN0cmluZyIhPXR5cGVvZiB3ZXx8IiI9PT13ZSkmJih3ZT0idXRm'@;
put 'OCIpLCFMLmlzRW5jb2Rpbmcod2UpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrd2UpO3ZhciBJZT0wfHEoS2Usd2UpLE9lPUIoSWUpLGV0PU9lLndyaXRlKEtlLHdlKTtyZXR1cm4gZXQhPT1JZSYmKE9lPU9lLnNsaWNlKDAsZXQpKSxPZX0oS2Usd2UpO2lmKEFy'@;
put 'cmF5QnVmZmVyLmlzVmlldyhLZSkpcmV0dXJuIGZ1bmN0aW9uIGooS2Upe2lmKEhlKEtlLFVpbnQ4QXJyYXkpKXt2YXIgd2U9bmV3IFVpbnQ4QXJyYXkoS2UpO3JldHVybiBWKHdlLmJ1ZmZlcix3ZS5ieXRlT2Zmc2V0LHdlLmJ5dGVMZW5ndGgpfXJldHVybiB6KEtlKX0oS2UpO2lmKG51bGw9'@;
put 'PUtlKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICIrdHlwZW9mIEtlKTtpZihIZShLZSxBcnJheUJ1'@;
put 'ZmZlcil8fEtlJiZIZShLZS5idWZmZXIsQXJyYXlCdWZmZXIpfHx0eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXI8InUiJiYoSGUoS2UsU2hhcmVkQXJyYXlCdWZmZXIpfHxLZSYmSGUoS2UuYnVmZmVyLFNoYXJlZEFycmF5QnVmZmVyKSkpcmV0dXJuIFYoS2Usd2UsSWUpO2lmKCJudW1iZXIiPT10'@;
put 'eXBlb2YgS2UpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ2YWx1ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJyk7dmFyIE9lPUtlLnZhbHVlT2YmJktlLnZhbHVlT2YoKTtpZihudWxsIT1PZSYmT2UhPT1LZSlyZXR1cm4gTC5m'@;
put 'cm9tKE9lLHdlLEllKTt2YXIgZXQ9ZnVuY3Rpb24gRyhLZSl7aWYoTC5pc0J1ZmZlcihLZSkpe3ZhciB3ZT0wfFcoS2UubGVuZ3RoKSxJZT1CKHdlKTtyZXR1cm4gMD09PUllLmxlbmd0aHx8S2UuY29weShJZSwwLDAsd2UpLEllfXJldHVybiB2b2lkIDAhPT1LZS5sZW5ndGg/Im51bWJlciIh'@;
put 'PXR5cGVvZiBLZS5sZW5ndGh8fFFlKEtlLmxlbmd0aCk/QigwKTp6KEtlKToiQnVmZmVyIj09PUtlLnR5cGUmJkFycmF5LmlzQXJyYXkoS2UuZGF0YSk/eihLZS5kYXRhKTp2b2lkIDB9KEtlKTtpZihldClyZXR1cm4gZXQ7aWYodHlwZW9mIFN5bWJvbDwidSImJm51bGwhPVN5bWJvbC50b1By'@;
put 'aW1pdGl2ZSYmImZ1bmN0aW9uIj09dHlwZW9mIEtlW1N5bWJvbC50b1ByaW1pdGl2ZV0pcmV0dXJuIEwuZnJvbShLZVtTeW1ib2wudG9QcmltaXRpdmVdKCJzdHJpbmciKSx3ZSxJZSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUg'@;
put 'c3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgS2UpfWZ1bmN0aW9uIEooS2Upe2lmKCJudW1iZXIiIT10eXBlb2YgS2UpdGhyb3cgbmV3IFR5cGVFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3Qg'@;
put 'YmUgb2YgdHlwZSBudW1iZXInKTtpZihLZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicrS2UrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpfWZ1bmN0aW9uIFIoS2Upe3JldHVybiBKKEtlKSxCKEtlPDA/MDowfFcoS2UpKX1mdW5jdGlvbiB6KEtlKXtmb3Io'@;
put 'dmFyIHdlPUtlLmxlbmd0aDwwPzA6MHxXKEtlLmxlbmd0aCksSWU9Qih3ZSksT2U9MDtPZTx3ZTtPZSs9MSlJZVtPZV09MjU1JktlW09lXTtyZXR1cm4gSWV9ZnVuY3Rpb24gVihLZSx3ZSxJZSl7aWYod2U8MHx8S2UuYnl0ZUxlbmd0aDx3ZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignIm9mZnNl'@;
put 'dCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7aWYoS2UuYnl0ZUxlbmd0aDx3ZSsoSWV8fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCcibGVuZ3RoIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTt2YXIgT2U7cmV0dXJuIE9lPXZvaWQgMD09PXdlJiZ2b2lkIDA9PT1JZT9u'@;
put 'ZXcgVWludDhBcnJheShLZSk6dm9pZCAwPT09SWU/bmV3IFVpbnQ4QXJyYXkoS2Usd2UpOm5ldyBVaW50OEFycmF5KEtlLHdlLEllKSxPYmplY3Quc2V0UHJvdG90eXBlT2YoT2UsTC5wcm90b3R5cGUpLE9lfWZ1bmN0aW9uIFcoS2Upe2lmKEtlPj1oZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigi'@;
put 'QXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweCIraGUudG9TdHJpbmcoMTYpKyIgYnl0ZXMiKTtyZXR1cm4gMHxLZX1mdW5jdGlvbiBxKEtlLHdlKXtpZihMLmlzQnVmZmVyKEtlKSlyZXR1cm4gS2UubGVuZ3RoO2lmKEFycmF5QnVmZmVyLmlz'@;
put 'VmlldyhLZSl8fEhlKEtlLEFycmF5QnVmZmVyKSlyZXR1cm4gS2UuYnl0ZUxlbmd0aDtpZigic3RyaW5nIiE9dHlwZW9mIEtlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAic3RyaW5nIiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBvciBBcnJheUJ1ZmZl'@;
put 'ci4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBLZSk7dmFyIEllPUtlLmxlbmd0aCxPZT1hcmd1bWVudHMubGVuZ3RoPjImJiEwPT09YXJndW1lbnRzWzJdO2lmKCFPZSYmMD09PUllKXJldHVybiAwO2Zvcih2YXIgZXQ9ITE7Oylzd2l0Y2god2Upe2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpj'@;
put 'YXNlImJpbmFyeSI6cmV0dXJuIEllO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIFBlKEtlKS5sZW5ndGg7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiAyKkllO2Nhc2UiaGV4IjpyZXR1cm4gSWU+Pj4xO2Nhc2UiYmFzZTY0'@;
put 'IjpyZXR1cm4gTGUoS2UpLmxlbmd0aDtkZWZhdWx0OmlmKGV0KXJldHVybiBPZT8tMTpQZShLZSkubGVuZ3RoO3dlPSgiIit3ZSkudG9Mb3dlckNhc2UoKSxldD0hMH19ZnVuY3Rpb24gdGUoS2Usd2UsSWUpe3ZhciBPZT0hMTtpZigodm9pZCAwPT09d2V8fHdlPDApJiYod2U9MCksd2U+dGhp'@;
put 'cy5sZW5ndGh8fCgodm9pZCAwPT09SWV8fEllPnRoaXMubGVuZ3RoKSYmKEllPXRoaXMubGVuZ3RoKSxJZTw9MCl8fChJZT4+Pj0wKTw9KHdlPj4+PTApKXJldHVybiIiO2ZvcihLZXx8KEtlPSJ1dGY4Iik7Oylzd2l0Y2goS2Upe2Nhc2UiaGV4IjpyZXR1cm4geSh0aGlzLHdlLEllKTtjYXNl'@;
put 'InV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBOKHRoaXMsd2UsSWUpO2Nhc2UiYXNjaWkiOnJldHVybiBDKHRoaXMsd2UsSWUpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIE0odGhpcyx3ZSxJZSk7Y2FzZSJiYXNlNjQiOnJldHVybiB4KHRoaXMsd2UsSWUpO2Nhc2UidWNzMiI6'@;
put 'Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gcCh0aGlzLHdlLEllKTtkZWZhdWx0OmlmKE9lKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrS2UpO0tlPShLZSsiIikudG9Mb3dlckNhc2UoKSxPZT0hMH19ZnVuY3Rpb24gbmUo'@;
put 'S2Usd2UsSWUpe3ZhciBPZT1LZVt3ZV07S2Vbd2VdPUtlW0llXSxLZVtJZV09T2V9ZnVuY3Rpb24gaWUoS2Usd2UsSWUsT2UsZXQpe2lmKDA9PT1LZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiBJZT8oT2U9SWUsSWU9MCk6SWU+MjE0NzQ4MzY0Nz9JZT0yMTQ3NDgzNjQ3'@;
put 'OkllPC0yMTQ3NDgzNjQ4JiYoSWU9LTIxNDc0ODM2NDgpLFFlKEllPStJZSkmJihJZT1ldD8wOktlLmxlbmd0aC0xKSxJZTwwJiYoSWU9S2UubGVuZ3RoK0llKSxJZT49S2UubGVuZ3RoKXtpZihldClyZXR1cm4tMTtJZT1LZS5sZW5ndGgtMX1lbHNlIGlmKEllPDApe2lmKCFldClyZXR1cm4t'@;
put 'MTtJZT0wfWlmKCJzdHJpbmciPT10eXBlb2Ygd2UmJih3ZT1MLmZyb20od2UsT2UpKSxMLmlzQnVmZmVyKHdlKSlyZXR1cm4gMD09PXdlLmxlbmd0aD8tMTpsZShLZSx3ZSxJZSxPZSxldCk7aWYoIm51bWJlciI9PXR5cGVvZiB3ZSlyZXR1cm4gd2UmPTI1NSwiZnVuY3Rpb24iPT10eXBlb2Yg'@;
put 'VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZj9ldD9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoS2Usd2UsSWUpOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoS2Usd2UsSWUpOmxlKEtlLFt3ZV0sSWUsT2UsZXQpO3Rocm93IG5ldyBUeXBlRXJyb3Io'@;
put 'InZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlciIpfWZ1bmN0aW9uIGxlKEtlLHdlLEllLE9lLGV0KXt2YXIgRGUsbnQ9MSxxZT1LZS5sZW5ndGgsaHQ9d2UubGVuZ3RoO2lmKHZvaWQgMCE9PU9lJiYoInVjczIiPT09KE9lPVN0cmluZyhPZSkudG9Mb3dlckNhc2UoKSl8fCJ1'@;
put 'Y3MtMiI9PT1PZXx8InV0ZjE2bGUiPT09T2V8fCJ1dGYtMTZsZSI9PT1PZSkpe2lmKEtlLmxlbmd0aDwyfHx3ZS5sZW5ndGg8MilyZXR1cm4tMTtudD0yLHFlLz0yLGh0Lz0yLEllLz0yfWZ1bmN0aW9uIEVlKE90LFB0KXtyZXR1cm4gMT09PW50P090W1B0XTpPdC5yZWFkVUludDE2QkUoUHQq'@;
put 'bnQpfWlmKGV0KXt2YXIgJGU9LTE7Zm9yKERlPUllO0RlPHFlO0RlKyspaWYoRWUoS2UsRGUpPT09RWUod2UsLTE9PT0kZT8wOkRlLSRlKSl7aWYoLTE9PT0kZSYmKCRlPURlKSxEZS0kZSsxPT09aHQpcmV0dXJuICRlKm50fWVsc2UtMSE9PSRlJiYoRGUtPURlLSRlKSwkZT0tMX1lbHNlIGZv'@;
put 'cihJZStodD5xZSYmKEllPXFlLWh0KSxEZT1JZTtEZT49MDtEZS0tKXtmb3IodmFyIGF0PSEwLGN0PTA7Y3Q8aHQ7Y3QrKylpZihFZShLZSxEZStjdCkhPT1FZSh3ZSxjdCkpe2F0PSExO2JyZWFrfWlmKGF0KXJldHVybiBEZX1yZXR1cm4tMX1mdW5jdGlvbiBkZShLZSx3ZSxJZSxPZSl7SWU9'@;
put 'TnVtYmVyKEllKXx8MDt2YXIgZXQ9S2UubGVuZ3RoLUllO09lPyhPZT1OdW1iZXIoT2UpKT5ldCYmKE9lPWV0KTpPZT1ldDt2YXIgbnQ9d2UubGVuZ3RoO09lPm50LzImJihPZT1udC8yKTtmb3IodmFyIHFlPTA7cWU8T2U7KytxZSl7dmFyIGh0PXBhcnNlSW50KHdlLnN1YnN0cigyKnFlLDIp'@;
put 'LDE2KTtpZihRZShodCkpcmV0dXJuIHFlO0tlW0llK3FlXT1odH1yZXR1cm4gcWV9ZnVuY3Rpb24gdWUoS2Usd2UsSWUsT2Upe3JldHVybiBCZShQZSh3ZSxLZS5sZW5ndGgtSWUpLEtlLEllLE9lKX1mdW5jdGlvbiBjZShLZSx3ZSxJZSxPZSl7cmV0dXJuIEJlKGZ1bmN0aW9uIEZlKEtlKXtm'@;
put 'b3IodmFyIHdlPVtdLEllPTA7SWU8S2UubGVuZ3RoOysrSWUpd2UucHVzaCgyNTUmS2UuY2hhckNvZGVBdChJZSkpO3JldHVybiB3ZX0od2UpLEtlLEllLE9lKX1mdW5jdGlvbiBZKEtlLHdlLEllLE9lKXtyZXR1cm4gQmUoTGUod2UpLEtlLEllLE9lKX1mdW5jdGlvbiBiKEtlLHdlLEllLE9l'@;
put 'KXtyZXR1cm4gQmUoZnVuY3Rpb24gTmUoS2Usd2Upe2Zvcih2YXIgSWUsT2UsbnQ9W10scWU9MDtxZTxLZS5sZW5ndGgmJiEoKHdlLT0yKTwwKTsrK3FlKU9lPShJZT1LZS5jaGFyQ29kZUF0KHFlKSk+PjgsbnQucHVzaChJZSUyNTYpLG50LnB1c2goT2UpO3JldHVybiBudH0od2UsS2UubGVu'@;
put 'Z3RoLUllKSxLZSxJZSxPZSl9ZnVuY3Rpb24geChLZSx3ZSxJZSl7cmV0dXJuIHNlLmZyb21CeXRlQXJyYXkoMD09PXdlJiZJZT09PUtlLmxlbmd0aD9LZTpLZS5zbGljZSh3ZSxJZSkpfWZ1bmN0aW9uIE4oS2Usd2UsSWUpe0llPU1hdGgubWluKEtlLmxlbmd0aCxJZSk7Zm9yKHZhciBPZT1b'@;
put 'XSxldD13ZTtldDxJZTspe3ZhciBFZSxEZSwkZSxhdCxudD1LZVtldF0scWU9bnVsbCxodD1udD4yMzk/NDpudD4yMjM/MzpudD4xOTE/MjoxO2lmKGV0K2h0PD1JZSlzd2l0Y2goaHQpe2Nhc2UgMTpudDwxMjgmJihxZT1udCk7YnJlYWs7Y2FzZSAyOjEyOD09KDE5MiYoRWU9S2VbZXQrMV0p'@;
put 'KSYmKGF0PSgzMSZudCk8PDZ8NjMmRWUpPjEyNyYmKHFlPWF0KTticmVhaztjYXNlIDM6RGU9S2VbZXQrMl0sMTI4PT0oMTkyJihFZT1LZVtldCsxXSkpJiYxMjg9PSgxOTImRGUpJiYoYXQ9KDE1Jm50KTw8MTJ8KDYzJkVlKTw8Nnw2MyZEZSk+MjA0NyYmKGF0PDU1Mjk2fHxhdD41NzM0Mykm'@;
put 'JihxZT1hdCk7YnJlYWs7Y2FzZSA0OkRlPUtlW2V0KzJdLCRlPUtlW2V0KzNdLDEyOD09KDE5MiYoRWU9S2VbZXQrMV0pKSYmMTI4PT0oMTkyJkRlKSYmMTI4PT0oMTkyJiRlKSYmKGF0PSgxNSZudCk8PDE4fCg2MyZFZSk8PDEyfCg2MyZEZSk8PDZ8NjMmJGUpPjY1NTM1JiZhdDwxMTE0MTEy'@;
put 'JiYocWU9YXQpfW51bGw9PT1xZT8ocWU9NjU1MzMsaHQ9MSk6cWU+NjU1MzUmJihPZS5wdXNoKChxZS09NjU1MzYpPj4+MTAmMTAyM3w1NTI5NikscWU9NTYzMjB8MTAyMyZxZSksT2UucHVzaChxZSksZXQrPWh0fXJldHVybiBmdW5jdGlvbiBnKEtlKXt2YXIgd2U9S2UubGVuZ3RoO2lmKHdl'@;
put 'PD1GKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxLZSk7Zm9yKHZhciBJZT0iIixPZT0wO09lPHdlOylJZSs9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsS2Uuc2xpY2UoT2UsT2UrPUYpKTtyZXR1cm4gSWV9KE9lKX16ZS5rTWF4TGVuZ3RoPWhlLCEo'@;
put 'TC5UWVBFRF9BUlJBWV9TVVBQT1JUPWZ1bmN0aW9uIEgoKXt0cnl7dmFyIEtlPW5ldyBVaW50OEFycmF5KDEpLHdlPXtmb286ZnVuY3Rpb24oKXtyZXR1cm4gNDJ9fTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHdlLFVpbnQ4QXJyYXkucHJvdG90eXBlKSxPYmplY3Quc2V0UHJvdG90'@;
put 'eXBlT2YoS2Usd2UpLDQyPT09S2UuZm9vKCl9Y2F0Y2h7cmV0dXJuITF9fSgpKSYmdHlwZW9mIGNvbnNvbGU8InUiJiYiZnVuY3Rpb24iPT10eXBlb2YgY29uc29sZS5lcnJvciYmY29uc29sZS5lcnJvcigiVGhpcyBicm93c2VyIGxhY2tzIHR5cGVkIGFycmF5IChVaW50OEFycmF5KSBzdXBw'@;
put 'b3J0IHdoaWNoIGlzIHJlcXVpcmVkIGJ5IGBidWZmZXJgIHY1LnguIFVzZSBgYnVmZmVyYCB2NC54IGlmIHlvdSByZXF1aXJlIG9sZCBicm93c2VyIHN1cHBvcnQuIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KEwucHJvdG90eXBlLCJwYXJlbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlv'@;
put 'bigpe2lmKEwuaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMLnByb3RvdHlwZSwib2Zmc2V0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZihMLmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ5dGVPZmZzZXR9fSks'@;
put 'TC5wb29sU2l6ZT04MTkyLEwuZnJvbT1mdW5jdGlvbihLZSx3ZSxJZSl7cmV0dXJuIEsoS2Usd2UsSWUpfSxPYmplY3Quc2V0UHJvdG90eXBlT2YoTC5wcm90b3R5cGUsVWludDhBcnJheS5wcm90b3R5cGUpLE9iamVjdC5zZXRQcm90b3R5cGVPZihMLFVpbnQ4QXJyYXkpLEwuYWxsb2M9ZnVu'@;
put 'Y3Rpb24oS2Usd2UsSWUpe3JldHVybiBmdW5jdGlvbiBJKEtlLHdlLEllKXtyZXR1cm4gSihLZSksS2U8PTA/QihLZSk6dm9pZCAwIT09d2U/InN0cmluZyI9PXR5cGVvZiBJZT9CKEtlKS5maWxsKHdlLEllKTpCKEtlKS5maWxsKHdlKTpCKEtlKX0oS2Usd2UsSWUpfSxMLmFsbG9jVW5zYWZl'@;
put 'PWZ1bmN0aW9uKEtlKXtyZXR1cm4gUihLZSl9LEwuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKEtlKXtyZXR1cm4gUihLZSl9LEwuaXNCdWZmZXI9ZnVuY3Rpb24od2Upe3JldHVybiBudWxsIT13ZSYmITA9PT13ZS5faXNCdWZmZXImJndlIT09TC5wcm90b3R5cGV9LEwuY29tcGFyZT1mdW5j'@;
put 'dGlvbih3ZSxJZSl7aWYoSGUod2UsVWludDhBcnJheSkmJih3ZT1MLmZyb20od2Usd2Uub2Zmc2V0LHdlLmJ5dGVMZW5ndGgpKSxIZShJZSxVaW50OEFycmF5KSYmKEllPUwuZnJvbShJZSxJZS5vZmZzZXQsSWUuYnl0ZUxlbmd0aCkpLCFMLmlzQnVmZmVyKHdlKXx8IUwuaXNCdWZmZXIoSWUp'@;
put 'KXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiYnVmMSIsICJidWYyIiBhcmd1bWVudHMgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheScpO2lmKHdlPT09SWUpcmV0dXJuIDA7Zm9yKHZhciBPZT13ZS5sZW5ndGgsZXQ9SWUubGVuZ3RoLG50PTAscWU9TWF0aC5taW4o'@;
put 'T2UsZXQpO250PHFlOysrbnQpaWYod2VbbnRdIT09SWVbbnRdKXtPZT13ZVtudF0sZXQ9SWVbbnRdO2JyZWFrfXJldHVybiBPZTxldD8tMTpldDxPZT8xOjB9LEwuaXNFbmNvZGluZz1mdW5jdGlvbih3ZSl7c3dpdGNoKFN0cmluZyh3ZSkudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2Ui'@;
put 'dXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxMLmNvbmNhdD1mdW5jdGlv'@;
put 'bih3ZSxJZSl7aWYoIUFycmF5LmlzQXJyYXkod2UpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09d2UubGVuZ3RoKXJldHVybiBMLmFsbG9jKDApO3ZhciBPZTtpZih2b2lkIDA9PT1JZSlmb3IoSWU9MCxP'@;
put 'ZT0wO09lPHdlLmxlbmd0aDsrK09lKUllKz13ZVtPZV0ubGVuZ3RoO3ZhciBldD1MLmFsbG9jVW5zYWZlKEllKSxudD0wO2ZvcihPZT0wO09lPHdlLmxlbmd0aDsrK09lKXt2YXIgcWU9d2VbT2VdO2lmKEhlKHFlLFVpbnQ4QXJyYXkpKW50K3FlLmxlbmd0aD5ldC5sZW5ndGg/TC5mcm9tKHFl'@;
put 'KS5jb3B5KGV0LG50KTpVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChldCxxZSxudCk7ZWxzZXtpZighTC5pc0J1ZmZlcihxZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO3FlLmNvcHkoZXQsbnQpfW50Kz1x'@;
put 'ZS5sZW5ndGh9cmV0dXJuIGV0fSxMLmJ5dGVMZW5ndGg9cSxMLnByb3RvdHlwZS5faXNCdWZmZXI9ITAsTC5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7dmFyIHdlPXRoaXMubGVuZ3RoO2lmKHdlJTIhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBt'@;
put 'dWx0aXBsZSBvZiAxNi1iaXRzIik7Zm9yKHZhciBJZT0wO0llPHdlO0llKz0yKW5lKHRoaXMsSWUsSWUrMSk7cmV0dXJuIHRoaXN9LEwucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbigpe3ZhciB3ZT10aGlzLmxlbmd0aDtpZih3ZSU0IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIg'@;
put 'c2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cyIpO2Zvcih2YXIgSWU9MDtJZTx3ZTtJZSs9NCluZSh0aGlzLEllLEllKzMpLG5lKHRoaXMsSWUrMSxJZSsyKTtyZXR1cm4gdGhpc30sTC5wcm90b3R5cGUuc3dhcDY0PWZ1bmN0aW9uKCl7dmFyIHdlPXRoaXMubGVuZ3RoO2lmKHdl'@;
put 'JTghPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzIik7Zm9yKHZhciBJZT0wO0llPHdlO0llKz04KW5lKHRoaXMsSWUsSWUrNyksbmUodGhpcyxJZSsxLEllKzYpLG5lKHRoaXMsSWUrMixJZSs1KSxuZSh0aGlzLEllKzMs'@;
put 'SWUrNCk7cmV0dXJuIHRoaXN9LEwucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nPUwucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIHdlPXRoaXMubGVuZ3RoO3JldHVybiAwPT09d2U/IiI6MD09PWFyZ3VtZW50cy5sZW5ndGg/Tih0aGlzLDAsd2UpOnRlLmFwcGx5KHRoaXMsYXJn'@;
put 'dW1lbnRzKX0sTC5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHdlKXtpZighTC5pc0J1ZmZlcih3ZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3JldHVybiB0aGlzPT09d2V8fDA9PT1MLmNvbXBhcmUodGhpcyx3ZSl9LEwucHJvdG90eXBlLmlu'@;
put 'c3BlY3Q9ZnVuY3Rpb24oKXt2YXIgd2U9IiIsSWU9emUuSU5TUEVDVF9NQVhfQllURVM7cmV0dXJuIHdlPXRoaXMudG9TdHJpbmcoImhleCIsMCxJZSkucmVwbGFjZSgvKC57Mn0pL2csIiQxICIpLnRyaW0oKSx0aGlzLmxlbmd0aD5JZSYmKHdlKz0iIC4uLiAiKSwiPEJ1ZmZlciAiK3dlKyI+'@;
put 'In0sdiYmKEwucHJvdG90eXBlW3ZdPUwucHJvdG90eXBlLmluc3BlY3QpLEwucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24od2UsSWUsT2UsZXQsbnQpe2lmKEhlKHdlLFVpbnQ4QXJyYXkpJiYod2U9TC5mcm9tKHdlLHdlLm9mZnNldCx3ZS5ieXRlTGVuZ3RoKSksIUwuaXNCdWZmZXIod2Up'@;
put 'KXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidGFyZ2V0IiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5LiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIHdlKTtpZih2b2lkIDA9PT1JZSYmKEllPTApLHZvaWQgMD09PU9lJiYoT2U9d2U/d2UubGVuZ3Ro'@;
put 'OjApLHZvaWQgMD09PWV0JiYoZXQ9MCksdm9pZCAwPT09bnQmJihudD10aGlzLmxlbmd0aCksSWU8MHx8T2U+d2UubGVuZ3RofHxldDwwfHxudD50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7aWYoZXQ+PW50JiZJZT49T2UpcmV0dXJuIDA7'@;
put 'aWYoZXQ+PW50KXJldHVybi0xO2lmKEllPj1PZSlyZXR1cm4gMTtpZih0aGlzPT09d2UpcmV0dXJuIDA7Zm9yKHZhciBxZT0obnQ+Pj49MCktKGV0Pj4+PTApLGh0PShPZT4+Pj0wKS0oSWU+Pj49MCksRWU9TWF0aC5taW4ocWUsaHQpLERlPXRoaXMuc2xpY2UoZXQsbnQpLCRlPXdlLnNsaWNl'@;
put 'KEllLE9lKSxhdD0wO2F0PEVlOysrYXQpaWYoRGVbYXRdIT09JGVbYXRdKXtxZT1EZVthdF0saHQ9JGVbYXRdO2JyZWFrfXJldHVybiBxZTxodD8tMTpodDxxZT8xOjB9LEwucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKHdlLEllLE9lKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZih3ZSxJ'@;
put 'ZSxPZSl9LEwucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24od2UsSWUsT2Upe3JldHVybiBpZSh0aGlzLHdlLEllLE9lLCEwKX0sTC5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24od2UsSWUsT2Upe3JldHVybiBpZSh0aGlzLHdlLEllLE9lLCExKX0sTC5wcm90b3R5cGUud3JpdGU9'@;
put 'ZnVuY3Rpb24od2UsSWUsT2UsZXQpe2lmKHZvaWQgMD09PUllKWV0PSJ1dGY4IixPZT10aGlzLmxlbmd0aCxJZT0wO2Vsc2UgaWYodm9pZCAwPT09T2UmJiJzdHJpbmciPT10eXBlb2YgSWUpZXQ9SWUsT2U9dGhpcy5sZW5ndGgsSWU9MDtlbHNle2lmKCFpc0Zpbml0ZShJZSkpdGhyb3cgbmV3'@;
put 'IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO0llPj4+PTAsaXNGaW5pdGUoT2UpPyhPZT4+Pj0wLHZvaWQgMD09PWV0JiYoZXQ9InV0ZjgiKSk6KGV0PU9lLE9lPXZvaWQgMCl9dmFyIG50PXRo'@;
put 'aXMubGVuZ3RoLUllO2lmKCh2b2lkIDA9PT1PZXx8T2U+bnQpJiYoT2U9bnQpLHdlLmxlbmd0aD4wJiYoT2U8MHx8SWU8MCl8fEllPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcyIpO2V0fHwoZXQ9InV0Zjgi'@;
put 'KTtmb3IodmFyIHFlPSExOzspc3dpdGNoKGV0KXtjYXNlImhleCI6cmV0dXJuIGRlKHRoaXMsd2UsSWUsT2UpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIHVlKHRoaXMsd2UsSWUsT2UpO2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIGNlKHRoaXMs'@;
put 'd2UsSWUsT2UpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gWSh0aGlzLHdlLEllLE9lKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIGIodGhpcyx3ZSxJZSxPZSk7ZGVmYXVsdDppZihxZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3du'@;
put 'IGVuY29kaW5nOiAiK2V0KTtldD0oIiIrZXQpLnRvTG93ZXJDYXNlKCkscWU9ITB9fSxMLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiQnVmZmVyIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O3ZhciBGPTQwOTY7'@;
put 'ZnVuY3Rpb24gQyhLZSx3ZSxJZSl7dmFyIE9lPSIiO0llPU1hdGgubWluKEtlLmxlbmd0aCxJZSk7Zm9yKHZhciBldD13ZTtldDxJZTsrK2V0KU9lKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDEyNyZLZVtldF0pO3JldHVybiBPZX1mdW5jdGlvbiBNKEtlLHdlLEllKXt2YXIgT2U9IiI7SWU9TWF0'@;
put 'aC5taW4oS2UubGVuZ3RoLEllKTtmb3IodmFyIGV0PXdlO2V0PEllOysrZXQpT2UrPVN0cmluZy5mcm9tQ2hhckNvZGUoS2VbZXRdKTtyZXR1cm4gT2V9ZnVuY3Rpb24geShLZSx3ZSxJZSl7dmFyIE9lPUtlLmxlbmd0aDsoIXdlfHx3ZTwwKSYmKHdlPTApLCghSWV8fEllPDB8fEllPk9lKSYm'@;
put 'KEllPU9lKTtmb3IodmFyIGV0PSIiLG50PXdlO250PEllOysrbnQpZXQrPW10W0tlW250XV07cmV0dXJuIGV0fWZ1bmN0aW9uIHAoS2Usd2UsSWUpe2Zvcih2YXIgT2U9S2Uuc2xpY2Uod2UsSWUpLGV0PSIiLG50PTA7bnQ8T2UubGVuZ3RoLTE7bnQrPTIpZXQrPVN0cmluZy5mcm9tQ2hhckNv'@;
put 'ZGUoT2VbbnRdKzI1NipPZVtudCsxXSk7cmV0dXJuIGV0fWZ1bmN0aW9uIFMoS2Usd2UsSWUpe2lmKEtlJTEhPTB8fEtlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIpO2lmKEtlK3dlPkllKXRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNz'@;
put 'IGJleW9uZCBidWZmZXIgbGVuZ3RoIil9ZnVuY3Rpb24gUShLZSx3ZSxJZSxPZSxldCxudCl7aWYoIUwuaXNCdWZmZXIoS2UpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWZmZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtpZih3ZT5ldHx8d2U8bnQpdGhyb3cgbmV3'@;
put 'IFJhbmdlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKEllK09lPktlLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gcmUoS2Usd2UsSWUsT2UsZXQsbnQpe2lmKEllK09lPktlLmxlbmd0aCl0aHJv'@;
put 'dyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYoSWU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gZmUoS2Usd2UsSWUsT2UsZXQpe3JldHVybiB3ZT0rd2UsSWU+Pj49MCxldHx8cmUoS2UsMCxJZSw0KSxrLndyaXRl'@;
put 'KEtlLHdlLEllLE9lLDIzLDQpLEllKzR9ZnVuY3Rpb24gbWUoS2Usd2UsSWUsT2UsZXQpe3JldHVybiB3ZT0rd2UsSWU+Pj49MCxldHx8cmUoS2UsMCxJZSw4KSxrLndyaXRlKEtlLHdlLEllLE9lLDUyLDgpLEllKzh9TC5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24od2UsSWUpe3ZhciBPZT10'@;
put 'aGlzLmxlbmd0aDsod2U9fn53ZSk8MD8od2UrPU9lKTwwJiYod2U9MCk6d2U+T2UmJih3ZT1PZSksKEllPXZvaWQgMD09PUllP09lOn5+SWUpPDA/KEllKz1PZSk8MCYmKEllPTApOkllPk9lJiYoSWU9T2UpLEllPHdlJiYoSWU9d2UpO3ZhciBldD10aGlzLnN1YmFycmF5KHdlLEllKTtyZXR1'@;
put 'cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKGV0LEwucHJvdG90eXBlKSxldH0sTC5wcm90b3R5cGUucmVhZFVpbnRMRT1MLnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKHdlLEllLE9lKXt3ZT4+Pj0wLEllPj4+PTAsT2V8fFMod2UsSWUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgZXQ9dGhp'@;
put 'c1t3ZV0sbnQ9MSxxZT0wOysrcWU8SWUmJihudCo9MjU2KTspZXQrPXRoaXNbd2UrcWVdKm50O3JldHVybiBldH0sTC5wcm90b3R5cGUucmVhZFVpbnRCRT1MLnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKHdlLEllLE9lKXt3ZT4+Pj0wLEllPj4+PTAsT2V8fFMod2UsSWUsdGhpcy5s'@;
put 'ZW5ndGgpO2Zvcih2YXIgZXQ9dGhpc1t3ZSstLUllXSxudD0xO0llPjAmJihudCo9MjU2KTspZXQrPXRoaXNbd2UrLS1JZV0qbnQ7cmV0dXJuIGV0fSxMLnByb3RvdHlwZS5yZWFkVWludDg9TC5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKHdlLEllKXtyZXR1cm4gd2U+Pj49MCxJZXx8'@;
put 'Uyh3ZSwxLHRoaXMubGVuZ3RoKSx0aGlzW3dlXX0sTC5wcm90b3R5cGUucmVhZFVpbnQxNkxFPUwucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbih3ZSxJZSl7cmV0dXJuIHdlPj4+PTAsSWV8fFMod2UsMix0aGlzLmxlbmd0aCksdGhpc1t3ZV18dGhpc1t3ZSsxXTw8OH0sTC5wcm90'@;
put 'b3R5cGUucmVhZFVpbnQxNkJFPUwucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbih3ZSxJZSl7cmV0dXJuIHdlPj4+PTAsSWV8fFMod2UsMix0aGlzLmxlbmd0aCksdGhpc1t3ZV08PDh8dGhpc1t3ZSsxXX0sTC5wcm90b3R5cGUucmVhZFVpbnQzMkxFPUwucHJvdG90eXBlLnJlYWRV'@;
put 'SW50MzJMRT1mdW5jdGlvbih3ZSxJZSl7cmV0dXJuIHdlPj4+PTAsSWV8fFMod2UsNCx0aGlzLmxlbmd0aCksKHRoaXNbd2VdfHRoaXNbd2UrMV08PDh8dGhpc1t3ZSsyXTw8MTYpKzE2Nzc3MjE2KnRoaXNbd2UrM119LEwucHJvdG90eXBlLnJlYWRVaW50MzJCRT1MLnByb3RvdHlwZS5yZWFk'@;
put 'VUludDMyQkU9ZnVuY3Rpb24od2UsSWUpe3JldHVybiB3ZT4+Pj0wLEllfHxTKHdlLDQsdGhpcy5sZW5ndGgpLDE2Nzc3MjE2KnRoaXNbd2VdKyh0aGlzW3dlKzFdPDwxNnx0aGlzW3dlKzJdPDw4fHRoaXNbd2UrM10pfSxMLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24od2UsSWUsT2Up'@;
put 'e3dlPj4+PTAsSWU+Pj49MCxPZXx8Uyh3ZSxJZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBldD10aGlzW3dlXSxudD0xLHFlPTA7KytxZTxJZSYmKG50Kj0yNTYpOylldCs9dGhpc1t3ZStxZV0qbnQ7cmV0dXJuIGV0Pj0obnQqPTEyOCkmJihldC09TWF0aC5wb3coMiw4KkllKSksZXR9LEwucHJv'@;
put 'dG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbih3ZSxJZSxPZSl7d2U+Pj49MCxJZT4+Pj0wLE9lfHxTKHdlLEllLHRoaXMubGVuZ3RoKTtmb3IodmFyIGV0PUllLG50PTEscWU9dGhpc1t3ZSstLWV0XTtldD4wJiYobnQqPTI1Nik7KXFlKz10aGlzW3dlKy0tZXRdKm50O3JldHVybiBxZT49KG50'@;
put 'Kj0xMjgpJiYocWUtPU1hdGgucG93KDIsOCpJZSkpLHFlfSxMLnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbih3ZSxJZSl7cmV0dXJuIHdlPj4+PTAsSWV8fFMod2UsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbd2VdPy0xKigyNTUtdGhpc1t3ZV0rMSk6dGhpc1t3ZV19LEwucHJvdG90eXBl'@;
put 'LnJlYWRJbnQxNkxFPWZ1bmN0aW9uKHdlLEllKXt3ZT4+Pj0wLEllfHxTKHdlLDIsdGhpcy5sZW5ndGgpO3ZhciBPZT10aGlzW3dlXXx0aGlzW3dlKzFdPDw4O3JldHVybiAzMjc2OCZPZT80Mjk0OTAxNzYwfE9lOk9lfSxMLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbih3ZSxJZSl7'@;
put 'd2U+Pj49MCxJZXx8Uyh3ZSwyLHRoaXMubGVuZ3RoKTt2YXIgT2U9dGhpc1t3ZSsxXXx0aGlzW3dlXTw8ODtyZXR1cm4gMzI3NjgmT2U/NDI5NDkwMTc2MHxPZTpPZX0sTC5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24od2UsSWUpe3JldHVybiB3ZT4+Pj0wLEllfHxTKHdlLDQsdGhp'@;
put 'cy5sZW5ndGgpLHRoaXNbd2VdfHRoaXNbd2UrMV08PDh8dGhpc1t3ZSsyXTw8MTZ8dGhpc1t3ZSszXTw8MjR9LEwucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKHdlLEllKXtyZXR1cm4gd2U+Pj49MCxJZXx8Uyh3ZSw0LHRoaXMubGVuZ3RoKSx0aGlzW3dlXTw8MjR8dGhpc1t3ZSsx'@;
put 'XTw8MTZ8dGhpc1t3ZSsyXTw8OHx0aGlzW3dlKzNdfSxMLnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbih3ZSxJZSl7cmV0dXJuIHdlPj4+PTAsSWV8fFMod2UsNCx0aGlzLmxlbmd0aCksay5yZWFkKHRoaXMsd2UsITAsMjMsNCl9LEwucHJvdG90eXBlLnJlYWRGbG9hdEJFPWZ1bmN0'@;
put 'aW9uKHdlLEllKXtyZXR1cm4gd2U+Pj49MCxJZXx8Uyh3ZSw0LHRoaXMubGVuZ3RoKSxrLnJlYWQodGhpcyx3ZSwhMSwyMyw0KX0sTC5wcm90b3R5cGUucmVhZERvdWJsZUxFPWZ1bmN0aW9uKHdlLEllKXtyZXR1cm4gd2U+Pj49MCxJZXx8Uyh3ZSw4LHRoaXMubGVuZ3RoKSxrLnJlYWQodGhp'@;
put 'cyx3ZSwhMCw1Miw4KX0sTC5wcm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKHdlLEllKXtyZXR1cm4gd2U+Pj49MCxJZXx8Uyh3ZSw4LHRoaXMubGVuZ3RoKSxrLnJlYWQodGhpcyx3ZSwhMSw1Miw4KX0sTC5wcm90b3R5cGUud3JpdGVVaW50TEU9TC5wcm90b3R5cGUud3JpdGVVSW50'@;
put 'TEU9ZnVuY3Rpb24od2UsSWUsT2UsZXQpe3dlPSt3ZSxJZT4+Pj0wLE9lPj4+PTAsZXR8fFEodGhpcyx3ZSxJZSxPZSxNYXRoLnBvdygyLDgqT2UpLTEsMCk7dmFyIHFlPTEsaHQ9MDtmb3IodGhpc1tJZV09MjU1JndlOysraHQ8T2UmJihxZSo9MjU2KTspdGhpc1tJZStodF09d2UvcWUmMjU1'@;
put 'O3JldHVybiBJZStPZX0sTC5wcm90b3R5cGUud3JpdGVVaW50QkU9TC5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24od2UsSWUsT2UsZXQpe3dlPSt3ZSxJZT4+Pj0wLE9lPj4+PTAsZXR8fFEodGhpcyx3ZSxJZSxPZSxNYXRoLnBvdygyLDgqT2UpLTEsMCk7dmFyIHFlPU9lLTEsaHQ9'@;
put 'MTtmb3IodGhpc1tJZStxZV09MjU1JndlOy0tcWU+PTAmJihodCo9MjU2KTspdGhpc1tJZStxZV09d2UvaHQmMjU1O3JldHVybiBJZStPZX0sTC5wcm90b3R5cGUud3JpdGVVaW50OD1MLnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKHdlLEllLE9lKXtyZXR1cm4gd2U9K3dlLEllPj4+'@;
put 'PTAsT2V8fFEodGhpcyx3ZSxJZSwxLDI1NSwwKSx0aGlzW0llXT0yNTUmd2UsSWUrMX0sTC5wcm90b3R5cGUud3JpdGVVaW50MTZMRT1MLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKHdlLEllLE9lKXtyZXR1cm4gd2U9K3dlLEllPj4+PTAsT2V8fFEodGhpcyx3ZSxJZSwyLDY1'@;
put 'NTM1LDApLHRoaXNbSWVdPTI1NSZ3ZSx0aGlzW0llKzFdPXdlPj4+OCxJZSsyfSxMLnByb3RvdHlwZS53cml0ZVVpbnQxNkJFPUwucHJvdG90eXBlLndyaXRlVUludDE2QkU9ZnVuY3Rpb24od2UsSWUsT2Upe3JldHVybiB3ZT0rd2UsSWU+Pj49MCxPZXx8USh0aGlzLHdlLEllLDIsNjU1MzUs'@;
put 'MCksdGhpc1tJZV09d2U+Pj44LHRoaXNbSWUrMV09MjU1JndlLEllKzJ9LEwucHJvdG90eXBlLndyaXRlVWludDMyTEU9TC5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbih3ZSxJZSxPZSl7cmV0dXJuIHdlPSt3ZSxJZT4+Pj0wLE9lfHxRKHRoaXMsd2UsSWUsNCw0Mjk0OTY3Mjk1'@;
put 'LDApLHRoaXNbSWUrM109d2U+Pj4yNCx0aGlzW0llKzJdPXdlPj4+MTYsdGhpc1tJZSsxXT13ZT4+PjgsdGhpc1tJZV09MjU1JndlLEllKzR9LEwucHJvdG90eXBlLndyaXRlVWludDMyQkU9TC5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbih3ZSxJZSxPZSl7cmV0dXJuIHdlPSt3'@;
put 'ZSxJZT4+Pj0wLE9lfHxRKHRoaXMsd2UsSWUsNCw0Mjk0OTY3Mjk1LDApLHRoaXNbSWVdPXdlPj4+MjQsdGhpc1tJZSsxXT13ZT4+PjE2LHRoaXNbSWUrMl09d2U+Pj44LHRoaXNbSWUrM109MjU1JndlLEllKzR9LEwucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24od2UsSWUsT2UsZXQp'@;
put 'e2lmKHdlPSt3ZSxJZT4+Pj0wLCFldCl7dmFyIG50PU1hdGgucG93KDIsOCpPZS0xKTtRKHRoaXMsd2UsSWUsT2UsbnQtMSwtbnQpfXZhciBxZT0wLGh0PTEsRWU9MDtmb3IodGhpc1tJZV09MjU1JndlOysrcWU8T2UmJihodCo9MjU2KTspd2U8MCYmMD09PUVlJiYwIT09dGhpc1tJZStxZS0x'@;
put 'XSYmKEVlPTEpLHRoaXNbSWUrcWVdPSh3ZS9odD4+MCktRWUmMjU1O3JldHVybiBJZStPZX0sTC5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbih3ZSxJZSxPZSxldCl7aWYod2U9K3dlLEllPj4+PTAsIWV0KXt2YXIgbnQ9TWF0aC5wb3coMiw4Kk9lLTEpO1EodGhpcyx3ZSxJZSxPZSxu'@;
put 'dC0xLC1udCl9dmFyIHFlPU9lLTEsaHQ9MSxFZT0wO2Zvcih0aGlzW0llK3FlXT0yNTUmd2U7LS1xZT49MCYmKGh0Kj0yNTYpOyl3ZTwwJiYwPT09RWUmJjAhPT10aGlzW0llK3FlKzFdJiYoRWU9MSksdGhpc1tJZStxZV09KHdlL2h0Pj4wKS1FZSYyNTU7cmV0dXJuIEllK09lfSxMLnByb3Rv'@;
put 'dHlwZS53cml0ZUludDg9ZnVuY3Rpb24od2UsSWUsT2Upe3JldHVybiB3ZT0rd2UsSWU+Pj49MCxPZXx8USh0aGlzLHdlLEllLDEsMTI3LC0xMjgpLHdlPDAmJih3ZT0yNTUrd2UrMSksdGhpc1tJZV09MjU1JndlLEllKzF9LEwucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbih3ZSxJ'@;
put 'ZSxPZSl7cmV0dXJuIHdlPSt3ZSxJZT4+Pj0wLE9lfHxRKHRoaXMsd2UsSWUsMiwzMjc2NywtMzI3NjgpLHRoaXNbSWVdPTI1NSZ3ZSx0aGlzW0llKzFdPXdlPj4+OCxJZSsyfSxMLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24od2UsSWUsT2Upe3JldHVybiB3ZT0rd2UsSWU+Pj49'@;
put 'MCxPZXx8USh0aGlzLHdlLEllLDIsMzI3NjcsLTMyNzY4KSx0aGlzW0llXT13ZT4+PjgsdGhpc1tJZSsxXT0yNTUmd2UsSWUrMn0sTC5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uKHdlLEllLE9lKXtyZXR1cm4gd2U9K3dlLEllPj4+PTAsT2V8fFEodGhpcyx3ZSxJZSw0LDIxNDc0'@;
put 'ODM2NDcsLTIxNDc0ODM2NDgpLHRoaXNbSWVdPTI1NSZ3ZSx0aGlzW0llKzFdPXdlPj4+OCx0aGlzW0llKzJdPXdlPj4+MTYsdGhpc1tJZSszXT13ZT4+PjI0LEllKzR9LEwucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbih3ZSxJZSxPZSl7cmV0dXJuIHdlPSt3ZSxJZT4+Pj0wLE9l'@;
put 'fHxRKHRoaXMsd2UsSWUsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx3ZTwwJiYod2U9NDI5NDk2NzI5NSt3ZSsxKSx0aGlzW0llXT13ZT4+PjI0LHRoaXNbSWUrMV09d2U+Pj4xNix0aGlzW0llKzJdPXdlPj4+OCx0aGlzW0llKzNdPTI1NSZ3ZSxJZSs0fSxMLnByb3RvdHlwZS53cml0ZUZs'@;
put 'b2F0TEU9ZnVuY3Rpb24od2UsSWUsT2Upe3JldHVybiBmZSh0aGlzLHdlLEllLCEwLE9lKX0sTC5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKHdlLEllLE9lKXtyZXR1cm4gZmUodGhpcyx3ZSxJZSwhMSxPZSl9LEwucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24od2Us'@;
put 'SWUsT2Upe3JldHVybiBtZSh0aGlzLHdlLEllLCEwLE9lKX0sTC5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbih3ZSxJZSxPZSl7cmV0dXJuIG1lKHRoaXMsd2UsSWUsITEsT2UpfSxMLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHdlLEllLE9lLGV0KXtpZighTC5pc0J1ZmZlcih3'@;
put 'ZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXJndW1lbnQgc2hvdWxkIGJlIGEgQnVmZmVyIik7aWYoT2V8fChPZT0wKSwhZXQmJjAhPT1ldCYmKGV0PXRoaXMubGVuZ3RoKSxJZT49d2UubGVuZ3RoJiYoSWU9d2UubGVuZ3RoKSxJZXx8KEllPTApLGV0PjAmJmV0PE9lJiYoZXQ9T2UpLGV0PT09'@;
put 'T2V8fDA9PT13ZS5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZihJZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzIik7aWYoT2U8MHx8T2U+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFu'@;
put 'Z2UiKTtpZihldDwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO2V0PnRoaXMubGVuZ3RoJiYoZXQ9dGhpcy5sZW5ndGgpLHdlLmxlbmd0aC1JZTxldC1PZSYmKGV0PXdlLmxlbmd0aC1JZStPZSk7dmFyIG50PWV0LU9lO3JldHVybiB0aGlzPT09d2Um'@;
put 'JiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluP3RoaXMuY29weVdpdGhpbihJZSxPZSxldCk6VWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwod2UsdGhpcy5zdWJhcnJheShPZSxldCksSWUpLG50fSxMLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9u'@;
put 'KHdlLEllLE9lLGV0KXtpZigic3RyaW5nIj09dHlwZW9mIHdlKXtpZigic3RyaW5nIj09dHlwZW9mIEllPyhldD1JZSxJZT0wLE9lPXRoaXMubGVuZ3RoKToic3RyaW5nIj09dHlwZW9mIE9lJiYoZXQ9T2UsT2U9dGhpcy5sZW5ndGgpLHZvaWQgMCE9PWV0JiYic3RyaW5nIiE9dHlwZW9mIGV0'@;
put 'KXRocm93IG5ldyBUeXBlRXJyb3IoImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmciKTtpZigic3RyaW5nIj09dHlwZW9mIGV0JiYhTC5pc0VuY29kaW5nKGV0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK2V0KTtpZigxPT09d2UubGVuZ3RoKXt2YXIgbnQ9d2Uu'@;
put 'Y2hhckNvZGVBdCgwKTsoInV0ZjgiPT09ZXQmJm50PDEyOHx8ImxhdGluMSI9PT1ldCkmJih3ZT1udCl9fWVsc2UibnVtYmVyIj09dHlwZW9mIHdlP3dlJj0yNTU6ImJvb2xlYW4iPT10eXBlb2Ygd2UmJih3ZT1OdW1iZXIod2UpKTtpZihJZTwwfHx0aGlzLmxlbmd0aDxJZXx8dGhpcy5sZW5n'@;
put 'dGg8T2UpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk91dCBvZiByYW5nZSBpbmRleCIpO2lmKE9lPD1JZSlyZXR1cm4gdGhpczt2YXIgcWU7aWYoSWU+Pj49MCxPZT12b2lkIDA9PT1PZT90aGlzLmxlbmd0aDpPZT4+PjAsd2V8fCh3ZT0wKSwibnVtYmVyIj09dHlwZW9mIHdlKWZvcihxZT1JZTtx'@;
put 'ZTxPZTsrK3FlKXRoaXNbcWVdPXdlO2Vsc2V7dmFyIGh0PUwuaXNCdWZmZXIod2UpP3dlOkwuZnJvbSh3ZSxldCksRWU9aHQubGVuZ3RoO2lmKDA9PT1FZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgdmFsdWUgIicrd2UrJyIgaXMgaW52YWxpZCBmb3IgYXJndW1lbnQgInZhbHVlIicpO2Zv'@;
put 'cihxZT0wO3FlPE9lLUllOysrcWUpdGhpc1txZStJZV09aHRbcWUlRWVdfXJldHVybiB0aGlzfTt2YXIga2U9L1teKy8wLTlBLVphLXotX10vZztmdW5jdGlvbiBQZShLZSx3ZSl7d2U9d2V8fDEvMDtmb3IodmFyIEllLE9lPUtlLmxlbmd0aCxldD1udWxsLG50PVtdLHFlPTA7cWU8T2U7Kytx'@;
put 'ZSl7aWYoKEllPUtlLmNoYXJDb2RlQXQocWUpKT41NTI5NSYmSWU8NTczNDQpe2lmKCFldCl7aWYoSWU+NTYzMTkpeyh3ZS09Myk+LTEmJm50LnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWlmKHFlKzE9PT1PZSl7KHdlLT0zKT4tMSYmbnQucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9'@;
put 'ZXQ9SWU7Y29udGludWV9aWYoSWU8NTYzMjApeyh3ZS09Myk+LTEmJm50LnB1c2goMjM5LDE5MSwxODkpLGV0PUllO2NvbnRpbnVlfUllPTY1NTM2KyhldC01NTI5Njw8MTB8SWUtNTYzMjApfWVsc2UgZXQmJih3ZS09Myk+LTEmJm50LnB1c2goMjM5LDE5MSwxODkpO2lmKGV0PW51bGwsSWU8'@;
put 'MTI4KXtpZigod2UtPTEpPDApYnJlYWs7bnQucHVzaChJZSl9ZWxzZSBpZihJZTwyMDQ4KXtpZigod2UtPTIpPDApYnJlYWs7bnQucHVzaChJZT4+NnwxOTIsNjMmSWV8MTI4KX1lbHNlIGlmKEllPDY1NTM2KXtpZigod2UtPTMpPDApYnJlYWs7bnQucHVzaChJZT4+MTJ8MjI0LEllPj42JjYz'@;
put 'fDEyOCw2MyZJZXwxMjgpfWVsc2V7aWYoIShJZTwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpO2lmKCh3ZS09NCk8MClicmVhaztudC5wdXNoKEllPj4xOHwyNDAsSWU+PjEyJjYzfDEyOCxJZT4+NiY2M3wxMjgsNjMmSWV8MTI4KX19cmV0dXJuIG50fWZ1'@;
put 'bmN0aW9uIExlKEtlKXtyZXR1cm4gc2UudG9CeXRlQXJyYXkoZnVuY3Rpb24gVGUoS2Upe2lmKChLZT0oS2U9S2Uuc3BsaXQoIj0iKVswXSkudHJpbSgpLnJlcGxhY2Uoa2UsIiIpKS5sZW5ndGg8MilyZXR1cm4iIjtmb3IoO0tlLmxlbmd0aCU0IT0wOylLZSs9Ij0iO3JldHVybiBLZX0oS2Up'@;
put 'KX1mdW5jdGlvbiBCZShLZSx3ZSxJZSxPZSl7Zm9yKHZhciBldD0wO2V0PE9lJiYhKGV0K0llPj13ZS5sZW5ndGh8fGV0Pj1LZS5sZW5ndGgpOysrZXQpd2VbZXQrSWVdPUtlW2V0XTtyZXR1cm4gZXR9ZnVuY3Rpb24gSGUoS2Usd2Upe3JldHVybiBLZSBpbnN0YW5jZW9mIHdlfHxudWxsIT1L'@;
put 'ZSYmbnVsbCE9S2UuY29uc3RydWN0b3ImJm51bGwhPUtlLmNvbnN0cnVjdG9yLm5hbWUmJktlLmNvbnN0cnVjdG9yLm5hbWU9PT13ZS5uYW1lfWZ1bmN0aW9uIFFlKEtlKXtyZXR1cm4gS2UhPUtlfXZhciBtdD1mdW5jdGlvbigpe2Zvcih2YXIgS2U9IjAxMjM0NTY3ODlhYmNkZWYiLHdlPW5l'@;
put 'dyBBcnJheSgyNTYpLEllPTA7SWU8MTY7KytJZSlmb3IodmFyIE9lPTE2KkllLGV0PTA7ZXQ8MTY7KytldCl3ZVtPZStldF09S2VbSWVdK0tlW2V0XTtyZXR1cm4gd2V9KCl9LDg2NDIwOihXZSx6ZSxUKT0+e3ZhciBzZT1UKDg0MykuQnVmZmVyLGs9VCg1MTc5MykuVHJhbnNmb3JtLHY9VCg3'@;
put 'MjAyNCkucztmdW5jdGlvbiBIKEIpe2suY2FsbCh0aGlzKSx0aGlzLmhhc2hNb2RlPSJzdHJpbmciPT10eXBlb2YgQix0aGlzLmhhc2hNb2RlP3RoaXNbQl09dGhpcy5fZmluYWxPckRpZ2VzdDp0aGlzLmZpbmFsPXRoaXMuX2ZpbmFsT3JEaWdlc3QsdGhpcy5fZmluYWwmJih0aGlzLl9fZmlu'@;
put 'YWw9dGhpcy5fZmluYWwsdGhpcy5fZmluYWw9bnVsbCksdGhpcy5fZGVjb2Rlcj1udWxsLHRoaXMuX2VuY29kaW5nPW51bGx9VCg2NjY5OCkoSCxrKSxILnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oQixMLEspeyJzdHJpbmciPT10eXBlb2YgQiYmKEI9c2UuZnJvbShCLEwpKTt2YXIgSj10'@;
put 'aGlzLl91cGRhdGUoQik7cmV0dXJuIHRoaXMuaGFzaE1vZGU/dGhpczooSyYmKEo9dGhpcy5fdG9TdHJpbmcoSixLKSksSil9LEgucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKCl7fSxILnByb3RvdHlwZS5nZXRBdXRoVGFnPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJ0'@;
put 'cnlpbmcgdG8gZ2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIil9LEgucHJvdG90eXBlLnNldEF1dGhUYWc9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInRyeWluZyB0byBzZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKX0sSC5wcm90b3R5cGUuc2V0QUFEPWZ1'@;
put 'bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJ0cnlpbmcgdG8gc2V0IGFhZCBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpfSxILnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKEIsTCxLKXt2YXIgSjt0cnl7dGhpcy5oYXNoTW9kZT90aGlzLl91cGRhdGUoQik6dGhpcy5wdXNoKHRoaXMuX3Vw'@;
put 'ZGF0ZShCKSl9Y2F0Y2goSSl7Sj1JfWZpbmFsbHl7SyhKKX19LEgucHJvdG90eXBlLl9mbHVzaD1mdW5jdGlvbihCKXt2YXIgTDt0cnl7dGhpcy5wdXNoKHRoaXMuX19maW5hbCgpKX1jYXRjaChLKXtMPUt9QihMKX0sSC5wcm90b3R5cGUuX2ZpbmFsT3JEaWdlc3Q9ZnVuY3Rpb24oQil7dmFy'@;
put 'IEw9dGhpcy5fX2ZpbmFsKCl8fHNlLmFsbG9jKDApO3JldHVybiBCJiYoTD10aGlzLl90b1N0cmluZyhMLEIsITApKSxMfSxILnByb3RvdHlwZS5fdG9TdHJpbmc9ZnVuY3Rpb24oQixMLEspe2lmKHRoaXMuX2RlY29kZXJ8fCh0aGlzLl9kZWNvZGVyPW5ldyB2KEwpLHRoaXMuX2VuY29kaW5n'@;
put 'PUwpLHRoaXMuX2VuY29kaW5nIT09TCl0aHJvdyBuZXcgRXJyb3IoImNhbid0IHN3aXRjaCBlbmNvZGluZ3MiKTt2YXIgSj10aGlzLl9kZWNvZGVyLndyaXRlKEIpO3JldHVybiBLJiYoSis9dGhpcy5fZGVjb2Rlci5lbmQoKSksSn0sV2UuZXhwb3J0cz1IfSwzODg0MDooV2UsemUsVCk9Pnt2'@;
put 'YXIgc2U9VCg4ODY1MSksaz1UKDMxODUpO1dlLmV4cG9ydHM9ZnVuY3Rpb24oTCl7cmV0dXJuIG5ldyBoZShMKX07dmFyIHY9e3NlY3AyNTZrMTp7bmFtZToic2VjcDI1NmsxIixieXRlTGVuZ3RoOjMyfSxzZWNwMjI0cjE6e25hbWU6InAyMjQiLGJ5dGVMZW5ndGg6Mjh9LHByaW1lMjU2djE6'@;
put 'e25hbWU6InAyNTYiLGJ5dGVMZW5ndGg6MzJ9LHByaW1lMTkydjE6e25hbWU6InAxOTIiLGJ5dGVMZW5ndGg6MjR9LGVkMjU1MTk6e25hbWU6ImVkMjU1MTkiLGJ5dGVMZW5ndGg6MzJ9LHNlY3AzODRyMTp7bmFtZToicDM4NCIsYnl0ZUxlbmd0aDo0OH0sc2VjcDUyMXIxOntuYW1lOiJwNTIx'@;
put 'IixieXRlTGVuZ3RoOjY2fX07ZnVuY3Rpb24gaGUoQil7dGhpcy5jdXJ2ZVR5cGU9dltCXSx0aGlzLmN1cnZlVHlwZXx8KHRoaXMuY3VydmVUeXBlPXtuYW1lOkJ9KSx0aGlzLmN1cnZlPW5ldyBzZS5lYyh0aGlzLmN1cnZlVHlwZS5uYW1lKSx0aGlzLmtleXM9dm9pZCAwfWZ1bmN0aW9uIEgo'@;
put 'QixMLEspe0FycmF5LmlzQXJyYXkoQil8fChCPUIudG9BcnJheSgpKTt2YXIgSj1uZXcgQnVmZmVyKEIpO2lmKEsmJkoubGVuZ3RoPEspe3ZhciBJPW5ldyBCdWZmZXIoSy1KLmxlbmd0aCk7SS5maWxsKDApLEo9QnVmZmVyLmNvbmNhdChbSSxKXSl9cmV0dXJuIEw/Si50b1N0cmluZyhMKTpK'@;
put 'fXYucDIyND12LnNlY3AyMjRyMSx2LnAyNTY9di5zZWNwMjU2cjE9di5wcmltZTI1NnYxLHYucDE5Mj12LnNlY3AxOTJyMT12LnByaW1lMTkydjEsdi5wMzg0PXYuc2VjcDM4NHIxLHYucDUyMT12LnNlY3A1MjFyMSxoZS5wcm90b3R5cGUuZ2VuZXJhdGVLZXlzPWZ1bmN0aW9uKEIsTCl7cmV0'@;
put 'dXJuIHRoaXMua2V5cz10aGlzLmN1cnZlLmdlbktleVBhaXIoKSx0aGlzLmdldFB1YmxpY0tleShCLEwpfSxoZS5wcm90b3R5cGUuY29tcHV0ZVNlY3JldD1mdW5jdGlvbihCLEwsSyl7cmV0dXJuIEw9THx8InV0ZjgiLEJ1ZmZlci5pc0J1ZmZlcihCKXx8KEI9bmV3IEJ1ZmZlcihCLEwpKSxI'@;
put 'KHRoaXMuY3VydmUua2V5RnJvbVB1YmxpYyhCKS5nZXRQdWJsaWMoKS5tdWwodGhpcy5rZXlzLmdldFByaXZhdGUoKSkuZ2V0WCgpLEssdGhpcy5jdXJ2ZVR5cGUuYnl0ZUxlbmd0aCl9LGhlLnByb3RvdHlwZS5nZXRQdWJsaWNLZXk9ZnVuY3Rpb24oQixMKXt2YXIgSz10aGlzLmtleXMuZ2V0'@;
put 'UHVibGljKCJjb21wcmVzc2VkIj09PUwsITApO3JldHVybiJoeWJyaWQiPT09TCYmKEtbMF09S1tLLmxlbmd0aC0xXSUyPzc6NiksSChLLEIpfSxoZS5wcm90b3R5cGUuZ2V0UHJpdmF0ZUtleT1mdW5jdGlvbihCKXtyZXR1cm4gSCh0aGlzLmtleXMuZ2V0UHJpdmF0ZSgpLEIpfSxoZS5wcm90'@;
put 'b3R5cGUuc2V0UHVibGljS2V5PWZ1bmN0aW9uKEIsTCl7cmV0dXJuIEw9THx8InV0ZjgiLEJ1ZmZlci5pc0J1ZmZlcihCKXx8KEI9bmV3IEJ1ZmZlcihCLEwpKSx0aGlzLmtleXMuX2ltcG9ydFB1YmxpYyhCKSx0aGlzfSxoZS5wcm90b3R5cGUuc2V0UHJpdmF0ZUtleT1mdW5jdGlvbihCLEwp'@;
put 'e0w9THx8InV0ZjgiLEJ1ZmZlci5pc0J1ZmZlcihCKXx8KEI9bmV3IEJ1ZmZlcihCLEwpKTt2YXIgSz1uZXcgayhCKTtyZXR1cm4gSz1LLnRvU3RyaW5nKDE2KSx0aGlzLmtleXM9dGhpcy5jdXJ2ZS5nZW5LZXlQYWlyKCksdGhpcy5rZXlzLl9pbXBvcnRQcml2YXRlKEspLHRoaXN9fSwzMTg1'@;
put 'OmZ1bmN0aW9uKFdlLHplLFQpeyFmdW5jdGlvbihzZSxrKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdihZLGIpe2lmKCFZKXRocm93IG5ldyBFcnJvcihifHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIGhlKFksYil7WS5zdXBlcl89Yjt2YXIgeD1mdW5jdGlvbigpe307eC5wcm90b3R5'@;
put 'cGU9Yi5wcm90b3R5cGUsWS5wcm90b3R5cGU9bmV3IHgsWS5wcm90b3R5cGUuY29uc3RydWN0b3I9WX1mdW5jdGlvbiBIKFksYix4KXtpZihILmlzQk4oWSkpcmV0dXJuIFk7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9'@;
put 'PVkmJigoImxlIj09PWJ8fCJiZSI9PT1iKSYmKHg9YixiPTEwKSx0aGlzLl9pbml0KFl8fDAsYnx8MTAseHx8ImJlIikpfXZhciBCOyJvYmplY3QiPT10eXBlb2Ygc2U/c2UuZXhwb3J0cz1IOmsuQk49SCxILkJOPUgsSC53b3JkU2l6ZT0yNjt0cnl7Qj10eXBlb2Ygd2luZG93PCJ1IiYmdHlw'@;
put 'ZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6VCg4NjIzKS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIEwoWSxiKXt2YXIgeD1ZLmNoYXJDb2RlQXQoYik7cmV0dXJuIHg+PTY1JiZ4PD03MD94LTU1Ong+PTk3JiZ4PD0xMDI/eC04Nzp4LTQ4JjE1fWZ1bmN0aW9uIEsoWSxiLHgp'@;
put 'e3ZhciBOPUwoWSx4KTtyZXR1cm4geC0xPj1iJiYoTnw9TChZLHgtMSk8PDQpLE59ZnVuY3Rpb24gSihZLGIseCxOKXtmb3IodmFyIEY9MCxnPU1hdGgubWluKFkubGVuZ3RoLHgpLEM9YjtDPGc7QysrKXt2YXIgTT1ZLmNoYXJDb2RlQXQoQyktNDg7Rio9TixGKz1NPj00OT9NLTQ5KzEwOk0+'@;
put 'PTE3P00tMTcrMTA6TX1yZXR1cm4gRn1ILmlzQk49ZnVuY3Rpb24oYil7cmV0dXJuIGIgaW5zdGFuY2VvZiBIfHxudWxsIT09YiYmIm9iamVjdCI9PXR5cGVvZiBiJiZiLmNvbnN0cnVjdG9yLndvcmRTaXplPT09SC53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShiLndvcmRzKX0sSC5tYXg9ZnVu'@;
put 'Y3Rpb24oYix4KXtyZXR1cm4gYi5jbXAoeCk+MD9iOnh9LEgubWluPWZ1bmN0aW9uKGIseCl7cmV0dXJuIGIuY21wKHgpPDA/Yjp4fSxILnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihiLHgsTil7aWYoIm51bWJlciI9PXR5cGVvZiBiKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKGIseCxOKTtp'@;
put 'Zigib2JqZWN0Ij09dHlwZW9mIGIpcmV0dXJuIHRoaXMuX2luaXRBcnJheShiLHgsTik7ImhleCI9PT14JiYoeD0xNiksdih4PT09KDB8eCkmJng+PTImJng8PTM2KTt2YXIgRj0wOyItIj09PShiPWIudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoRisrLHRoaXMubmVnYXRp'@;
put 'dmU9MSksRjxiLmxlbmd0aCYmKDE2PT09eD90aGlzLl9wYXJzZUhleChiLEYsTik6KHRoaXMuX3BhcnNlQmFzZShiLHgsRiksImxlIj09PU4mJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSx4LE4pKSl9LEgucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKGIseCxOKXtiPDAm'@;
put 'Jih0aGlzLm5lZ2F0aXZlPTEsYj0tYiksYjw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmYl0sdGhpcy5sZW5ndGg9MSk6Yjw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZiLGIvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOih2KGI8OTAwNzE5'@;
put 'OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmYixiLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT1OJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCkseCxOKX0sSC5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihiLHgsTil7aWYodigi'@;
put 'bnVtYmVyIj09dHlwZW9mIGIubGVuZ3RoKSxiLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChiLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBGPTA7Rjx0aGlz'@;
put 'Lmxlbmd0aDtGKyspdGhpcy53b3Jkc1tGXT0wO3ZhciBnLEMsTT0wO2lmKCJiZSI9PT1OKWZvcihGPWIubGVuZ3RoLTEsZz0wO0Y+PTA7Ri09Myl0aGlzLndvcmRzW2ddfD0oQz1iW0ZdfGJbRi0xXTw8OHxiW0YtMl08PDE2KTw8TSY2NzEwODg2Myx0aGlzLndvcmRzW2crMV09Qz4+PjI2LU0m'@;
put 'NjcxMDg4NjMsKE0rPTI0KT49MjYmJihNLT0yNixnKyspO2Vsc2UgaWYoImxlIj09PU4pZm9yKEY9MCxnPTA7RjxiLmxlbmd0aDtGKz0zKXRoaXMud29yZHNbZ118PShDPWJbRl18YltGKzFdPDw4fGJbRisyXTw8MTYpPDxNJjY3MTA4ODYzLHRoaXMud29yZHNbZysxXT1DPj4+MjYtTSY2NzEw'@;
put 'ODg2MywoTSs9MjQpPj0yNiYmKE0tPTI2LGcrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sSC5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKGIseCxOKXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKGIubGVuZ3RoLXgpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3Io'@;
put 'dmFyIEY9MDtGPHRoaXMubGVuZ3RoO0YrKyl0aGlzLndvcmRzW0ZdPTA7dmFyIE0sZz0wLEM9MDtpZigiYmUiPT09Tilmb3IoRj1iLmxlbmd0aC0xO0Y+PXg7Ri09MilNPUsoYix4LEYpPDxnLHRoaXMud29yZHNbQ118PTY3MTA4ODYzJk0sZz49MTg/KGctPTE4LHRoaXMud29yZHNbQys9MV18'@;
put 'PU0+Pj4yNik6Zys9ODtlbHNlIGZvcihGPShiLmxlbmd0aC14KSUyPT0wP3grMTp4O0Y8Yi5sZW5ndGg7Ris9MilNPUsoYix4LEYpPDxnLHRoaXMud29yZHNbQ118PTY3MTA4ODYzJk0sZz49MTg/KGctPTE4LHRoaXMud29yZHNbQys9MV18PU0+Pj4yNik6Zys9ODt0aGlzLnN0cmlwKCl9LEgu'@;
put 'cHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oYix4LE4pe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBGPTAsZz0xO2c8PTY3MTA4ODYzO2cqPXgpRisrO0YtLSxnPWcveHwwO2Zvcih2YXIgQz1iLmxlbmd0aC1OLE09QyVGLHk9TWF0aC5taW4oQyxDLU0pK04scD0w'@;
put 'LFM9TjtTPHk7Uys9RilwPUooYixTLFMrRix4KSx0aGlzLmltdWxuKGcpLHRoaXMud29yZHNbMF0rcDw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1wOnRoaXMuX2lhZGRuKHApO2lmKDAhPT1NKXt2YXIgUT0xO2ZvcihwPUooYixTLGIubGVuZ3RoLHgpLFM9MDtTPE07UysrKVEqPXg7dGhpcy5p'@;
put 'bXVsbihRKSx0aGlzLndvcmRzWzBdK3A8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9cDp0aGlzLl9pYWRkbihwKX10aGlzLnN0cmlwKCl9LEgucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYil7Yi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgeD0wO3g8dGhpcy5sZW5ndGg7'@;
put 'eCsrKWIud29yZHNbeF09dGhpcy53b3Jkc1t4XTtiLmxlbmd0aD10aGlzLmxlbmd0aCxiLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsYi5yZWQ9dGhpcy5yZWR9LEgucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGI9bmV3IEgobnVsbCk7cmV0dXJuIHRoaXMuY29weShiKSxifSxILnBy'@;
put 'b3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKGIpe2Zvcig7dGhpcy5sZW5ndGg8YjspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxILnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgt'@;
put 'MV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LEgucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSxILnByb3RvdHlwZS5pbnNwZWN0PWZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBJPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAw'@;
put 'MDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAw'@;
put 'MDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLFI9WzAsMCwyNSwxNiwxMiwx'@;
put 'MSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sRT1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgw'@;
put 'OCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0'@;
put 'NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBqKFksYix4KXt4Lm5lZ2F0aXZlPWIubmVnYXRpdmVeWS5uZWdhdGl2ZTt2YXIgTj1ZLmxlbmd0aCtiLmxlbmd0aHwwO3gubGVuZ3RoPU4sTj1OLTF8MDt2YXIgRj0wfFkud29yZHNbMF0sZz0wfGIud29y'@;
put 'ZHNbMF0sQz1GKmcseT1DLzY3MTA4ODY0fDA7eC53b3Jkc1swXT02NzEwODg2MyZDO2Zvcih2YXIgcD0xO3A8TjtwKyspe2Zvcih2YXIgUz15Pj4+MjYsUT02NzEwODg2MyZ5LHJlPU1hdGgubWluKHAsYi5sZW5ndGgtMSksZmU9TWF0aC5tYXgoMCxwLVkubGVuZ3RoKzEpO2ZlPD1yZTtmZSsr'@;
put 'KVMrPShDPShGPTB8WS53b3Jkc1twLWZlfDBdKSooZz0wfGIud29yZHNbZmVdKStRKS82NzEwODg2NHwwLFE9NjcxMDg4NjMmQzt4LndvcmRzW3BdPTB8USx5PTB8U31yZXR1cm4gMCE9PXk/eC53b3Jkc1twXT0wfHk6eC5sZW5ndGgtLSx4LnN0cmlwKCl9SC5wcm90b3R5cGUudG9TdHJpbmc9'@;
put 'ZnVuY3Rpb24oYix4KXt2YXIgTjtpZih4PTB8eHx8MSwxNj09PShiPWJ8fDEwKXx8ImhleCI9PT1iKXtOPSIiO2Zvcih2YXIgRj0wLGc9MCxDPTA7Qzx0aGlzLmxlbmd0aDtDKyspe3ZhciBNPXRoaXMud29yZHNbQ10seT0oMTY3NzcyMTUmKE08PEZ8ZykpLnRvU3RyaW5nKDE2KTtOPTAhPShn'@;
put 'PU0+Pj4yNC1GJjE2Nzc3MjE1KXx8QyE9PXRoaXMubGVuZ3RoLTE/SVs2LXkubGVuZ3RoXSt5K046eStOLChGKz0yKT49MjYmJihGLT0yNixDLS0pfWZvcigwIT09ZyYmKE49Zy50b1N0cmluZygxNikrTik7Ti5sZW5ndGgleCE9MDspTj0iMCIrTjtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUm'@;
put 'JihOPSItIitOKSxOfWlmKGI9PT0oMHxiKSYmYj49MiYmYjw9MzYpe3ZhciBwPVJbYl0sUz1FW2JdO049IiI7dmFyIFE9dGhpcy5jbG9uZSgpO2ZvcihRLm5lZ2F0aXZlPTA7IVEuaXNaZXJvKCk7KXt2YXIgcmU9US5tb2RuKFMpLnRvU3RyaW5nKGIpO049KFE9US5pZGl2bihTKSkuaXNaZXJv'@;
put 'KCk/cmUrTjpJW3AtcmUubGVuZ3RoXStyZStOfWZvcih0aGlzLmlzWmVybygpJiYoTj0iMCIrTik7Ti5sZW5ndGgleCE9MDspTj0iMCIrTjtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihOPSItIitOKSxOfXYoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sSC5wcm90'@;
put 'b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/Yis9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2IrPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53'@;
put 'b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZ2KCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tYjpifSxILnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LEgucHJvdG90eXBl'@;
put 'LnRvQnVmZmVyPWZ1bmN0aW9uKGIseCl7cmV0dXJuIHYodHlwZW9mIEI8InUiKSx0aGlzLnRvQXJyYXlMaWtlKEIsYix4KX0sSC5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihiLHgpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGIseCl9LEgucHJvdG90eXBlLnRvQXJyYXlMaWtl'@;
put 'PWZ1bmN0aW9uKGIseCxOKXt2YXIgRj10aGlzLmJ5dGVMZW5ndGgoKSxnPU58fE1hdGgubWF4KDEsRik7dihGPD1nLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksdihnPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgeSxw'@;
put 'LEM9ImxlIj09PXgsTT1uZXcgYihnKSxTPXRoaXMuY2xvbmUoKTtpZihDKXtmb3IocD0wOyFTLmlzWmVybygpO3ArKyl5PVMuYW5kbG4oMjU1KSxTLml1c2hybig4KSxNW3BdPXk7Zm9yKDtwPGc7cCsrKU1bcF09MH1lbHNle2ZvcihwPTA7cDxnLUY7cCsrKU1bcF09MDtmb3IocD0wOyFTLmlz'@;
put 'WmVybygpO3ArKyl5PVMuYW5kbG4oMjU1KSxTLml1c2hybig4KSxNW2ctcC0xXT15fXJldHVybiBNfSxILnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oYil7cmV0dXJuIDMyLU1hdGguY2x6MzIoYil9OmZ1bmN0aW9uKGIpe3ZhciB4PWIsTj0wO3JldHVybiB4Pj00'@;
put 'MDk2JiYoTis9MTMseD4+Pj0xMykseD49NjQmJihOKz03LHg+Pj49NykseD49OCYmKE4rPTQseD4+Pj00KSx4Pj0yJiYoTis9Mix4Pj4+PTIpLE4reH0sSC5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGIpe2lmKDA9PT1iKXJldHVybiAyNjt2YXIgeD1iLE49MDtyZXR1cm4gODE5MSZ4'@;
put 'fHwoTis9MTMseD4+Pj0xMyksMTI3Jnh8fChOKz03LHg+Pj49NyksMTUmeHx8KE4rPTQseD4+Pj00KSwzJnh8fChOKz0yLHg+Pj49MiksMSZ4fHxOKyssTn0sSC5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIHg9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5n'@;
put 'dGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkreH0sSC5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgYj0wLHg9MDt4PHRoaXMubGVuZ3RoO3grKyl7dmFyIE49dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1t4XSk7'@;
put 'aWYoYis9TiwyNiE9PU4pYnJlYWt9cmV0dXJuIGJ9LEgucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LEgucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihiKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5h'@;
put 'YnMoKS5pbm90bihiKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LEgucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnRlc3RuKGItMSk/dGhpcy5ub3RuKGIpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LEgucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxILnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sSC5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sSC5wcm90b3R5'@;
put 'cGUuaXVvcj1mdW5jdGlvbihiKXtmb3IoO3RoaXMubGVuZ3RoPGIubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciB4PTA7eDxiLmxlbmd0aDt4KyspdGhpcy53b3Jkc1t4XT10aGlzLndvcmRzW3hdfGIud29yZHNbeF07cmV0dXJuIHRoaXMuc3RyaXAoKX0sSC5w'@;
put 'cm90b3R5cGUuaW9yPWZ1bmN0aW9uKGIpe3JldHVybiB2KDA9PSh0aGlzLm5lZ2F0aXZlfGIubmVnYXRpdmUpKSx0aGlzLml1b3IoYil9LEgucHJvdG90eXBlLm9yPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKGIpOmIuY2xvbmUoKS5p'@;
put 'b3IodGhpcyl9LEgucHJvdG90eXBlLnVvcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoYik6Yi5jbG9uZSgpLml1b3IodGhpcyl9LEgucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKGIpe3ZhciB4O3g9dGhpcy5sZW5ndGg+Yi5sZW5n'@;
put 'dGg/Yjp0aGlzO2Zvcih2YXIgTj0wO048eC5sZW5ndGg7TisrKXRoaXMud29yZHNbTl09dGhpcy53b3Jkc1tOXSZiLndvcmRzW05dO3JldHVybiB0aGlzLmxlbmd0aD14Lmxlbmd0aCx0aGlzLnN0cmlwKCl9LEgucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oYil7cmV0dXJuIHYoMD09KHRoaXMu'@;
put 'bmVnYXRpdmV8Yi5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoYil9LEgucHJvdG90eXBlLmFuZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoYik6Yi5jbG9uZSgpLmlhbmQodGhpcyl9LEgucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oYil7'@;
put 'cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChiKTpiLmNsb25lKCkuaXVhbmQodGhpcyl9LEgucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKGIpe3ZhciB4LE47dGhpcy5sZW5ndGg+Yi5sZW5ndGg/KHg9dGhpcyxOPWIpOih4PWIsTj10aGlzKTtmb3IodmFy'@;
put 'IEY9MDtGPE4ubGVuZ3RoO0YrKyl0aGlzLndvcmRzW0ZdPXgud29yZHNbRl1eTi53b3Jkc1tGXTtpZih0aGlzIT09eClmb3IoO0Y8eC5sZW5ndGg7RisrKXRoaXMud29yZHNbRl09eC53b3Jkc1tGXTtyZXR1cm4gdGhpcy5sZW5ndGg9eC5sZW5ndGgsdGhpcy5zdHJpcCgpfSxILnByb3RvdHlw'@;
put 'ZS5peG9yPWZ1bmN0aW9uKGIpe3JldHVybiB2KDA9PSh0aGlzLm5lZ2F0aXZlfGIubmVnYXRpdmUpKSx0aGlzLml1eG9yKGIpfSxILnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKGIpOmIuY2xvbmUoKS5peG9y'@;
put 'KHRoaXMpfSxILnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IoYik6Yi5jbG9uZSgpLml1eG9yKHRoaXMpfSxILnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihiKXt2KCJudW1iZXIiPT10eXBlb2YgYiYmYj49'@;
put 'MCk7dmFyIHg9MHxNYXRoLmNlaWwoYi8yNiksTj1iJTI2O3RoaXMuX2V4cGFuZCh4KSxOPjAmJngtLTtmb3IodmFyIEY9MDtGPHg7RisrKXRoaXMud29yZHNbRl09NjcxMDg4NjMmfnRoaXMud29yZHNbRl07cmV0dXJuIE4+MCYmKHRoaXMud29yZHNbRl09fnRoaXMud29yZHNbRl0mNjcxMDg4'@;
put 'NjM+PjI2LU4pLHRoaXMuc3RyaXAoKX0sSC5wcm90b3R5cGUubm90bj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKGIpfSxILnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKGIseCl7digibnVtYmVyIj09dHlwZW9mIGImJmI+PTApO3ZhciBOPWIvMjZ8MCxGPWIlMjY7cmV0'@;
put 'dXJuIHRoaXMuX2V4cGFuZChOKzEpLHRoaXMud29yZHNbTl09eD90aGlzLndvcmRzW05dfDE8PEY6dGhpcy53b3Jkc1tOXSZ+KDE8PEYpLHRoaXMuc3RyaXAoKX0sSC5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihiKXt2YXIgeCxOLEY7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1iLm5lZ2F0'@;
put 'aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAseD10aGlzLmlzdWIoYiksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Yi5uZWdhdGl2ZSlyZXR1cm4gYi5uZWdhdGl2ZT0wLHg9dGhpcy5pc3ViKGIpLGIubmVnYXRpdmU9MSx4Ll9u'@;
put 'b3JtU2lnbigpO3RoaXMubGVuZ3RoPmIubGVuZ3RoPyhOPXRoaXMsRj1iKTooTj1iLEY9dGhpcyk7Zm9yKHZhciBnPTAsQz0wO0M8Ri5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmKHg9KDB8Ti53b3Jkc1tDXSkrKDB8Ri53b3Jkc1tDXSkrZyksZz14Pj4+MjY7Zm9yKDswIT09'@;
put 'ZyYmQzxOLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyYoeD0oMHxOLndvcmRzW0NdKStnKSxnPXg+Pj4yNjtpZih0aGlzLmxlbmd0aD1OLmxlbmd0aCwwIT09Zyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1nLHRoaXMubGVuZ3RoKys7ZWxzZSBpZihOIT09dGhpcylmb3IoO0M8'@;
put 'Ti5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109Ti53b3Jkc1tDXTtyZXR1cm4gdGhpc30sSC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGIpe3ZhciB4O3JldHVybiAwIT09Yi5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KGIubmVnYXRpdmU9MCx4PXRoaXMuc3ViKGIpLGIubmVnYXRpdmVe'@;
put 'PTEseCk6MD09PWIubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAseD1iLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEseCk6dGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQoYik6Yi5jbG9uZSgpLmlhZGQodGhpcyl9LEgucHJvdG90eXBl'@;
put 'LmlzdWI9ZnVuY3Rpb24oYil7aWYoMCE9PWIubmVnYXRpdmUpe2IubmVnYXRpdmU9MDt2YXIgeD10aGlzLmlhZGQoYik7cmV0dXJuIGIubmVnYXRpdmU9MSx4Ll9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKGIpLHRoaXMu'@;
put 'bmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBGLGcsTj10aGlzLmNtcChiKTtpZigwPT09TilyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7Tj4wPyhGPXRoaXMsZz1iKTooRj1iLGc9dGhpcyk7Zm9yKHZhciBDPTAsTT0wO008'@;
put 'Zy5sZW5ndGg7TSsrKUM9KHg9KDB8Ri53b3Jkc1tNXSktKDB8Zy53b3Jkc1tNXSkrQyk+PjI2LHRoaXMud29yZHNbTV09NjcxMDg4NjMmeDtmb3IoOzAhPT1DJiZNPEYubGVuZ3RoO00rKylDPSh4PSgwfEYud29yZHNbTV0pK0MpPj4yNix0aGlzLndvcmRzW01dPTY3MTA4ODYzJng7aWYoMD09'@;
put 'PUMmJk08Ri5sZW5ndGgmJkYhPT10aGlzKWZvcig7TTxGLmxlbmd0aDtNKyspdGhpcy53b3Jkc1tNXT1GLndvcmRzW01dO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxNKSxGIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSxILnByb3RvdHlw'@;
put 'ZS5zdWI9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKGIpfTt2YXIgVj1mdW5jdGlvbihiLHgsTil7dmFyIHkscCxTLEY9Yi53b3JkcyxnPXgud29yZHMsQz1OLndvcmRzLE09MCxRPTB8RlswXSxyZT04MTkxJlEsZmU9UT4+PjEzLG1lPTB8RlsxXSxrZT04MTkxJm1lLFRl'@;
put 'PW1lPj4+MTMsUGU9MHxGWzJdLEZlPTgxOTEmUGUsTmU9UGU+Pj4xMyxMZT0wfEZbM10sQmU9ODE5MSZMZSxIZT1MZT4+PjEzLFFlPTB8Rls0XSxtdD04MTkxJlFlLEtlPVFlPj4+MTMsd2U9MHxGWzVdLEllPTgxOTEmd2UsT2U9d2U+Pj4xMyxldD0wfEZbNl0sbnQ9ODE5MSZldCxxZT1ldD4+'@;
put 'PjEzLGh0PTB8Rls3XSxFZT04MTkxJmh0LERlPWh0Pj4+MTMsJGU9MHxGWzhdLGF0PTgxOTEmJGUsY3Q9JGU+Pj4xMyxPdD0wfEZbOV0sUHQ9ODE5MSZPdCxBdD1PdD4+PjEzLEp0PTB8Z1swXSxtbj04MTkxJkp0LE50PUp0Pj4+MTMsYm49MHxnWzFdLEduPTgxOTEmYm4sb249Ym4+Pj4xMywk'@;
put 'bj0wfGdbMl0sTm49ODE5MSYkbixwdD0kbj4+PjEzLHBuPTB8Z1szXSxobj04MTkxJnBuLEN0PXBuPj4+MTMsZW49MHxnWzRdLF90PTgxOTEmZW4sVnQ9ZW4+Pj4xMyxfbj0wfGdbNV0sb3Q9ODE5MSZfbixJdD1fbj4+PjEzLG5uPTB8Z1s2XSxEdD04MTkxJm5uLHZ0PW5uPj4+MTMsR3Q9MHxn'@;
put 'WzddLExuPTgxOTEmR3QsenQ9R3Q+Pj4xMyxNbj0wfGdbOF0sVG49ODE5MSZNbixzbj1Nbj4+PjEzLEJuPTB8Z1s5XSxGbj04MTkxJkJuLHF0PUJuPj4+MTM7Ti5uZWdhdGl2ZT1iLm5lZ2F0aXZlXngubmVnYXRpdmUsTi5sZW5ndGg9MTk7dmFyIEhuPShNKyh5PU1hdGguaW11bChyZSxtbikp'@;
put 'fDApKygoODE5MSYocD0ocD1NYXRoLmltdWwocmUsTnQpKStNYXRoLmltdWwoZmUsbW4pfDApKTw8MTMpfDA7TT0oKFM9TWF0aC5pbXVsKGZlLE50KSkrKHA+Pj4xMyl8MCkrKEhuPj4+MjYpfDAsSG4mPTY3MTA4ODYzLHk9TWF0aC5pbXVsKGtlLG1uKSxwPShwPU1hdGguaW11bChrZSxOdCkp'@;
put 'K01hdGguaW11bChUZSxtbil8MCxTPU1hdGguaW11bChUZSxOdCk7dmFyIGlpPShNKyh5PXkrTWF0aC5pbXVsKHJlLEduKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwocmUsb24pfDApK01hdGguaW11bChmZSxHbil8MCkpPDwxMyl8MDtNPSgoUz1TK01hdGguaW11bChmZSxvbil8'@;
put 'MCkrKHA+Pj4xMyl8MCkrKGlpPj4+MjYpfDAsaWkmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKEZlLG1uKSxwPShwPU1hdGguaW11bChGZSxOdCkpK01hdGguaW11bChOZSxtbil8MCxTPU1hdGguaW11bChOZSxOdCkseT15K01hdGguaW11bChrZSxHbil8MCxwPShwPXArTWF0aC5pbXVsKGtlLG9u'@;
put 'KXwwKStNYXRoLmltdWwoVGUsR24pfDAsUz1TK01hdGguaW11bChUZSxvbil8MDt2YXIgY249KE0rKHk9eStNYXRoLmltdWwocmUsTm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChyZSxwdCl8MCkrTWF0aC5pbXVsKGZlLE5uKXwwKSk8PDEzKXwwO009KChTPVMrTWF0aC5pbXVs'@;
put 'KGZlLHB0KXwwKSsocD4+PjEzKXwwKSsoY24+Pj4yNil8MCxjbiY9NjcxMDg4NjMseT1NYXRoLmltdWwoQmUsbW4pLHA9KHA9TWF0aC5pbXVsKEJlLE50KSkrTWF0aC5pbXVsKEhlLG1uKXwwLFM9TWF0aC5pbXVsKEhlLE50KSx5PXkrTWF0aC5pbXVsKEZlLEduKXwwLHA9KHA9cCtNYXRoLmlt'@;
put 'dWwoRmUsb24pfDApK01hdGguaW11bChOZSxHbil8MCxTPVMrTWF0aC5pbXVsKE5lLG9uKXwwLHk9eStNYXRoLmltdWwoa2UsTm4pfDAscD0ocD1wK01hdGguaW11bChrZSxwdCl8MCkrTWF0aC5pbXVsKFRlLE5uKXwwLFM9UytNYXRoLmltdWwoVGUscHQpfDA7dmFyIGpuPShNKyh5PXkrTWF0'@;
put 'aC5pbXVsKHJlLGhuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwocmUsQ3QpfDApK01hdGguaW11bChmZSxobil8MCkpPDwxMyl8MDtNPSgoUz1TK01hdGguaW11bChmZSxDdCl8MCkrKHA+Pj4xMyl8MCkrKGpuPj4+MjYpfDAsam4mPTY3MTA4ODYzLHk9TWF0aC5pbXVsKG10LG1u'@;
put 'KSxwPShwPU1hdGguaW11bChtdCxOdCkpK01hdGguaW11bChLZSxtbil8MCxTPU1hdGguaW11bChLZSxOdCkseT15K01hdGguaW11bChCZSxHbil8MCxwPShwPXArTWF0aC5pbXVsKEJlLG9uKXwwKStNYXRoLmltdWwoSGUsR24pfDAsUz1TK01hdGguaW11bChIZSxvbil8MCx5PXkrTWF0aC5p'@;
put 'bXVsKEZlLE5uKXwwLHA9KHA9cCtNYXRoLmltdWwoRmUscHQpfDApK01hdGguaW11bChOZSxObil8MCxTPVMrTWF0aC5pbXVsKE5lLHB0KXwwLHk9eStNYXRoLmltdWwoa2UsaG4pfDAscD0ocD1wK01hdGguaW11bChrZSxDdCl8MCkrTWF0aC5pbXVsKFRlLGhuKXwwLFM9UytNYXRoLmltdWwo'@;
put 'VGUsQ3QpfDA7dmFyIFhyPShNKyh5PXkrTWF0aC5pbXVsKHJlLF90KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwocmUsVnQpfDApK01hdGguaW11bChmZSxfdCl8MCkpPDwxMyl8MDtNPSgoUz1TK01hdGguaW11bChmZSxWdCl8MCkrKHA+Pj4xMyl8MCkrKFhyPj4+MjYpfDAsWHIm'@;
put 'PTY3MTA4ODYzLHk9TWF0aC5pbXVsKEllLG1uKSxwPShwPU1hdGguaW11bChJZSxOdCkpK01hdGguaW11bChPZSxtbil8MCxTPU1hdGguaW11bChPZSxOdCkseT15K01hdGguaW11bChtdCxHbil8MCxwPShwPXArTWF0aC5pbXVsKG10LG9uKXwwKStNYXRoLmltdWwoS2UsR24pfDAsUz1TK01h'@;
put 'dGguaW11bChLZSxvbil8MCx5PXkrTWF0aC5pbXVsKEJlLE5uKXwwLHA9KHA9cCtNYXRoLmltdWwoQmUscHQpfDApK01hdGguaW11bChIZSxObil8MCxTPVMrTWF0aC5pbXVsKEhlLHB0KXwwLHk9eStNYXRoLmltdWwoRmUsaG4pfDAscD0ocD1wK01hdGguaW11bChGZSxDdCl8MCkrTWF0aC5p'@;
put 'bXVsKE5lLGhuKXwwLFM9UytNYXRoLmltdWwoTmUsQ3QpfDAseT15K01hdGguaW11bChrZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKGtlLFZ0KXwwKStNYXRoLmltdWwoVGUsX3QpfDAsUz1TK01hdGguaW11bChUZSxWdCl8MDt2YXIgdmk9KE0rKHk9eStNYXRoLmltdWwocmUsb3QpfDApfDAp'@;
put 'KygoODE5MSYocD0ocD1wK01hdGguaW11bChyZSxJdCl8MCkrTWF0aC5pbXVsKGZlLG90KXwwKSk8PDEzKXwwO009KChTPVMrTWF0aC5pbXVsKGZlLEl0KXwwKSsocD4+PjEzKXwwKSsodmk+Pj4yNil8MCx2aSY9NjcxMDg4NjMseT1NYXRoLmltdWwobnQsbW4pLHA9KHA9TWF0aC5pbXVsKG50'@;
put 'LE50KSkrTWF0aC5pbXVsKHFlLG1uKXwwLFM9TWF0aC5pbXVsKHFlLE50KSx5PXkrTWF0aC5pbXVsKEllLEduKXwwLHA9KHA9cCtNYXRoLmltdWwoSWUsb24pfDApK01hdGguaW11bChPZSxHbil8MCxTPVMrTWF0aC5pbXVsKE9lLG9uKXwwLHk9eStNYXRoLmltdWwobXQsTm4pfDAscD0ocD1w'@;
put 'K01hdGguaW11bChtdCxwdCl8MCkrTWF0aC5pbXVsKEtlLE5uKXwwLFM9UytNYXRoLmltdWwoS2UscHQpfDAseT15K01hdGguaW11bChCZSxobil8MCxwPShwPXArTWF0aC5pbXVsKEJlLEN0KXwwKStNYXRoLmltdWwoSGUsaG4pfDAsUz1TK01hdGguaW11bChIZSxDdCl8MCx5PXkrTWF0aC5p'@;
put 'bXVsKEZlLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoRmUsVnQpfDApK01hdGguaW11bChOZSxfdCl8MCxTPVMrTWF0aC5pbXVsKE5lLFZ0KXwwLHk9eStNYXRoLmltdWwoa2Usb3QpfDAscD0ocD1wK01hdGguaW11bChrZSxJdCl8MCkrTWF0aC5pbXVsKFRlLG90KXwwLFM9UytNYXRoLmltdWwo'@;
put 'VGUsSXQpfDA7dmFyIEVyPShNKyh5PXkrTWF0aC5pbXVsKHJlLER0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwocmUsdnQpfDApK01hdGguaW11bChmZSxEdCl8MCkpPDwxMyl8MDtNPSgoUz1TK01hdGguaW11bChmZSx2dCl8MCkrKHA+Pj4xMyl8MCkrKEVyPj4+MjYpfDAsRXIm'@;
put 'PTY3MTA4ODYzLHk9TWF0aC5pbXVsKEVlLG1uKSxwPShwPU1hdGguaW11bChFZSxOdCkpK01hdGguaW11bChEZSxtbil8MCxTPU1hdGguaW11bChEZSxOdCkseT15K01hdGguaW11bChudCxHbil8MCxwPShwPXArTWF0aC5pbXVsKG50LG9uKXwwKStNYXRoLmltdWwocWUsR24pfDAsUz1TK01h'@;
put 'dGguaW11bChxZSxvbil8MCx5PXkrTWF0aC5pbXVsKEllLE5uKXwwLHA9KHA9cCtNYXRoLmltdWwoSWUscHQpfDApK01hdGguaW11bChPZSxObil8MCxTPVMrTWF0aC5pbXVsKE9lLHB0KXwwLHk9eStNYXRoLmltdWwobXQsaG4pfDAscD0ocD1wK01hdGguaW11bChtdCxDdCl8MCkrTWF0aC5p'@;
put 'bXVsKEtlLGhuKXwwLFM9UytNYXRoLmltdWwoS2UsQ3QpfDAseT15K01hdGguaW11bChCZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKEJlLFZ0KXwwKStNYXRoLmltdWwoSGUsX3QpfDAsUz1TK01hdGguaW11bChIZSxWdCl8MCx5PXkrTWF0aC5pbXVsKEZlLG90KXwwLHA9KHA9cCtNYXRoLmlt'@;
put 'dWwoRmUsSXQpfDApK01hdGguaW11bChOZSxvdCl8MCxTPVMrTWF0aC5pbXVsKE5lLEl0KXwwLHk9eStNYXRoLmltdWwoa2UsRHQpfDAscD0ocD1wK01hdGguaW11bChrZSx2dCl8MCkrTWF0aC5pbXVsKFRlLER0KXwwLFM9UytNYXRoLmltdWwoVGUsdnQpfDA7dmFyIFlpPShNKyh5PXkrTWF0'@;
put 'aC5pbXVsKHJlLExuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwocmUsenQpfDApK01hdGguaW11bChmZSxMbil8MCkpPDwxMyl8MDtNPSgoUz1TK01hdGguaW11bChmZSx6dCl8MCkrKHA+Pj4xMyl8MCkrKFlpPj4+MjYpfDAsWWkmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKGF0LG1u'@;
put 'KSxwPShwPU1hdGguaW11bChhdCxOdCkpK01hdGguaW11bChjdCxtbil8MCxTPU1hdGguaW11bChjdCxOdCkseT15K01hdGguaW11bChFZSxHbil8MCxwPShwPXArTWF0aC5pbXVsKEVlLG9uKXwwKStNYXRoLmltdWwoRGUsR24pfDAsUz1TK01hdGguaW11bChEZSxvbil8MCx5PXkrTWF0aC5p'@;
put 'bXVsKG50LE5uKXwwLHA9KHA9cCtNYXRoLmltdWwobnQscHQpfDApK01hdGguaW11bChxZSxObil8MCxTPVMrTWF0aC5pbXVsKHFlLHB0KXwwLHk9eStNYXRoLmltdWwoSWUsaG4pfDAscD0ocD1wK01hdGguaW11bChJZSxDdCl8MCkrTWF0aC5pbXVsKE9lLGhuKXwwLFM9UytNYXRoLmltdWwo'@;
put 'T2UsQ3QpfDAseT15K01hdGguaW11bChtdCxfdCl8MCxwPShwPXArTWF0aC5pbXVsKG10LFZ0KXwwKStNYXRoLmltdWwoS2UsX3QpfDAsUz1TK01hdGguaW11bChLZSxWdCl8MCx5PXkrTWF0aC5pbXVsKEJlLG90KXwwLHA9KHA9cCtNYXRoLmltdWwoQmUsSXQpfDApK01hdGguaW11bChIZSxv'@;
put 'dCl8MCxTPVMrTWF0aC5pbXVsKEhlLEl0KXwwLHk9eStNYXRoLmltdWwoRmUsRHQpfDAscD0ocD1wK01hdGguaW11bChGZSx2dCl8MCkrTWF0aC5pbXVsKE5lLER0KXwwLFM9UytNYXRoLmltdWwoTmUsdnQpfDAseT15K01hdGguaW11bChrZSxMbil8MCxwPShwPXArTWF0aC5pbXVsKGtlLHp0'@;
put 'KXwwKStNYXRoLmltdWwoVGUsTG4pfDAsUz1TK01hdGguaW11bChUZSx6dCl8MDt2YXIgSnI9KE0rKHk9eStNYXRoLmltdWwocmUsVG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChyZSxzbil8MCkrTWF0aC5pbXVsKGZlLFRuKXwwKSk8PDEzKXwwO009KChTPVMrTWF0aC5pbXVs'@;
put 'KGZlLHNuKXwwKSsocD4+PjEzKXwwKSsoSnI+Pj4yNil8MCxKciY9NjcxMDg4NjMseT1NYXRoLmltdWwoUHQsbW4pLHA9KHA9TWF0aC5pbXVsKFB0LE50KSkrTWF0aC5pbXVsKEF0LG1uKXwwLFM9TWF0aC5pbXVsKEF0LE50KSx5PXkrTWF0aC5pbXVsKGF0LEduKXwwLHA9KHA9cCtNYXRoLmlt'@;
put 'dWwoYXQsb24pfDApK01hdGguaW11bChjdCxHbil8MCxTPVMrTWF0aC5pbXVsKGN0LG9uKXwwLHk9eStNYXRoLmltdWwoRWUsTm4pfDAscD0ocD1wK01hdGguaW11bChFZSxwdCl8MCkrTWF0aC5pbXVsKERlLE5uKXwwLFM9UytNYXRoLmltdWwoRGUscHQpfDAseT15K01hdGguaW11bChudCxo'@;
put 'bil8MCxwPShwPXArTWF0aC5pbXVsKG50LEN0KXwwKStNYXRoLmltdWwocWUsaG4pfDAsUz1TK01hdGguaW11bChxZSxDdCl8MCx5PXkrTWF0aC5pbXVsKEllLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoSWUsVnQpfDApK01hdGguaW11bChPZSxfdCl8MCxTPVMrTWF0aC5pbXVsKE9lLFZ0KXww'@;
put 'LHk9eStNYXRoLmltdWwobXQsb3QpfDAscD0ocD1wK01hdGguaW11bChtdCxJdCl8MCkrTWF0aC5pbXVsKEtlLG90KXwwLFM9UytNYXRoLmltdWwoS2UsSXQpfDAseT15K01hdGguaW11bChCZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKEJlLHZ0KXwwKStNYXRoLmltdWwoSGUsRHQpfDAsUz1T'@;
put 'K01hdGguaW11bChIZSx2dCl8MCx5PXkrTWF0aC5pbXVsKEZlLExuKXwwLHA9KHA9cCtNYXRoLmltdWwoRmUsenQpfDApK01hdGguaW11bChOZSxMbil8MCxTPVMrTWF0aC5pbXVsKE5lLHp0KXwwLHk9eStNYXRoLmltdWwoa2UsVG4pfDAscD0ocD1wK01hdGguaW11bChrZSxzbil8MCkrTWF0'@;
put 'aC5pbXVsKFRlLFRuKXwwLFM9UytNYXRoLmltdWwoVGUsc24pfDA7dmFyIGFvPShNKyh5PXkrTWF0aC5pbXVsKHJlLEZuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwocmUscXQpfDApK01hdGguaW11bChmZSxGbil8MCkpPDwxMyl8MDtNPSgoUz1TK01hdGguaW11bChmZSxxdCl8'@;
put 'MCkrKHA+Pj4xMyl8MCkrKGFvPj4+MjYpfDAsYW8mPTY3MTA4ODYzLHk9TWF0aC5pbXVsKFB0LEduKSxwPShwPU1hdGguaW11bChQdCxvbikpK01hdGguaW11bChBdCxHbil8MCxTPU1hdGguaW11bChBdCxvbikseT15K01hdGguaW11bChhdCxObil8MCxwPShwPXArTWF0aC5pbXVsKGF0LHB0'@;
put 'KXwwKStNYXRoLmltdWwoY3QsTm4pfDAsUz1TK01hdGguaW11bChjdCxwdCl8MCx5PXkrTWF0aC5pbXVsKEVlLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoRWUsQ3QpfDApK01hdGguaW11bChEZSxobil8MCxTPVMrTWF0aC5pbXVsKERlLEN0KXwwLHk9eStNYXRoLmltdWwobnQsX3QpfDAscD0o'@;
put 'cD1wK01hdGguaW11bChudCxWdCl8MCkrTWF0aC5pbXVsKHFlLF90KXwwLFM9UytNYXRoLmltdWwocWUsVnQpfDAseT15K01hdGguaW11bChJZSxvdCl8MCxwPShwPXArTWF0aC5pbXVsKEllLEl0KXwwKStNYXRoLmltdWwoT2Usb3QpfDAsUz1TK01hdGguaW11bChPZSxJdCl8MCx5PXkrTWF0'@;
put 'aC5pbXVsKG10LER0KXwwLHA9KHA9cCtNYXRoLmltdWwobXQsdnQpfDApK01hdGguaW11bChLZSxEdCl8MCxTPVMrTWF0aC5pbXVsKEtlLHZ0KXwwLHk9eStNYXRoLmltdWwoQmUsTG4pfDAscD0ocD1wK01hdGguaW11bChCZSx6dCl8MCkrTWF0aC5pbXVsKEhlLExuKXwwLFM9UytNYXRoLmlt'@;
put 'dWwoSGUsenQpfDAseT15K01hdGguaW11bChGZSxUbil8MCxwPShwPXArTWF0aC5pbXVsKEZlLHNuKXwwKStNYXRoLmltdWwoTmUsVG4pfDAsUz1TK01hdGguaW11bChOZSxzbil8MDt2YXIgQnI9KE0rKHk9eStNYXRoLmltdWwoa2UsRm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11'@;
put 'bChrZSxxdCl8MCkrTWF0aC5pbXVsKFRlLEZuKXwwKSk8PDEzKXwwO009KChTPVMrTWF0aC5pbXVsKFRlLHF0KXwwKSsocD4+PjEzKXwwKSsoQnI+Pj4yNil8MCxCciY9NjcxMDg4NjMseT1NYXRoLmltdWwoUHQsTm4pLHA9KHA9TWF0aC5pbXVsKFB0LHB0KSkrTWF0aC5pbXVsKEF0LE5uKXww'@;
put 'LFM9TWF0aC5pbXVsKEF0LHB0KSx5PXkrTWF0aC5pbXVsKGF0LGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoYXQsQ3QpfDApK01hdGguaW11bChjdCxobil8MCxTPVMrTWF0aC5pbXVsKGN0LEN0KXwwLHk9eStNYXRoLmltdWwoRWUsX3QpfDAscD0ocD1wK01hdGguaW11bChFZSxWdCl8MCkrTWF0'@;
put 'aC5pbXVsKERlLF90KXwwLFM9UytNYXRoLmltdWwoRGUsVnQpfDAseT15K01hdGguaW11bChudCxvdCl8MCxwPShwPXArTWF0aC5pbXVsKG50LEl0KXwwKStNYXRoLmltdWwocWUsb3QpfDAsUz1TK01hdGguaW11bChxZSxJdCl8MCx5PXkrTWF0aC5pbXVsKEllLER0KXwwLHA9KHA9cCtNYXRo'@;
put 'LmltdWwoSWUsdnQpfDApK01hdGguaW11bChPZSxEdCl8MCxTPVMrTWF0aC5pbXVsKE9lLHZ0KXwwLHk9eStNYXRoLmltdWwobXQsTG4pfDAscD0ocD1wK01hdGguaW11bChtdCx6dCl8MCkrTWF0aC5pbXVsKEtlLExuKXwwLFM9UytNYXRoLmltdWwoS2UsenQpfDAseT15K01hdGguaW11bChC'@;
put 'ZSxUbil8MCxwPShwPXArTWF0aC5pbXVsKEJlLHNuKXwwKStNYXRoLmltdWwoSGUsVG4pfDAsUz1TK01hdGguaW11bChIZSxzbil8MDt2YXIgSmk9KE0rKHk9eStNYXRoLmltdWwoRmUsRm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChGZSxxdCl8MCkrTWF0aC5pbXVsKE5lLEZu'@;
put 'KXwwKSk8PDEzKXwwO009KChTPVMrTWF0aC5pbXVsKE5lLHF0KXwwKSsocD4+PjEzKXwwKSsoSmk+Pj4yNil8MCxKaSY9NjcxMDg4NjMseT1NYXRoLmltdWwoUHQsaG4pLHA9KHA9TWF0aC5pbXVsKFB0LEN0KSkrTWF0aC5pbXVsKEF0LGhuKXwwLFM9TWF0aC5pbXVsKEF0LEN0KSx5PXkrTWF0'@;
put 'aC5pbXVsKGF0LF90KXwwLHA9KHA9cCtNYXRoLmltdWwoYXQsVnQpfDApK01hdGguaW11bChjdCxfdCl8MCxTPVMrTWF0aC5pbXVsKGN0LFZ0KXwwLHk9eStNYXRoLmltdWwoRWUsb3QpfDAscD0ocD1wK01hdGguaW11bChFZSxJdCl8MCkrTWF0aC5pbXVsKERlLG90KXwwLFM9UytNYXRoLmlt'@;
put 'dWwoRGUsSXQpfDAseT15K01hdGguaW11bChudCxEdCl8MCxwPShwPXArTWF0aC5pbXVsKG50LHZ0KXwwKStNYXRoLmltdWwocWUsRHQpfDAsUz1TK01hdGguaW11bChxZSx2dCl8MCx5PXkrTWF0aC5pbXVsKEllLExuKXwwLHA9KHA9cCtNYXRoLmltdWwoSWUsenQpfDApK01hdGguaW11bChP'@;
put 'ZSxMbil8MCxTPVMrTWF0aC5pbXVsKE9lLHp0KXwwLHk9eStNYXRoLmltdWwobXQsVG4pfDAscD0ocD1wK01hdGguaW11bChtdCxzbil8MCkrTWF0aC5pbXVsKEtlLFRuKXwwLFM9UytNYXRoLmltdWwoS2Usc24pfDA7dmFyIHRvPShNKyh5PXkrTWF0aC5pbXVsKEJlLEZuKXwwKXwwKSsoKDgx'@;
put 'OTEmKHA9KHA9cCtNYXRoLmltdWwoQmUscXQpfDApK01hdGguaW11bChIZSxGbil8MCkpPDwxMyl8MDtNPSgoUz1TK01hdGguaW11bChIZSxxdCl8MCkrKHA+Pj4xMyl8MCkrKHRvPj4+MjYpfDAsdG8mPTY3MTA4ODYzLHk9TWF0aC5pbXVsKFB0LF90KSxwPShwPU1hdGguaW11bChQdCxWdCkp'@;
put 'K01hdGguaW11bChBdCxfdCl8MCxTPU1hdGguaW11bChBdCxWdCkseT15K01hdGguaW11bChhdCxvdCl8MCxwPShwPXArTWF0aC5pbXVsKGF0LEl0KXwwKStNYXRoLmltdWwoY3Qsb3QpfDAsUz1TK01hdGguaW11bChjdCxJdCl8MCx5PXkrTWF0aC5pbXVsKEVlLER0KXwwLHA9KHA9cCtNYXRo'@;
put 'LmltdWwoRWUsdnQpfDApK01hdGguaW11bChEZSxEdCl8MCxTPVMrTWF0aC5pbXVsKERlLHZ0KXwwLHk9eStNYXRoLmltdWwobnQsTG4pfDAscD0ocD1wK01hdGguaW11bChudCx6dCl8MCkrTWF0aC5pbXVsKHFlLExuKXwwLFM9UytNYXRoLmltdWwocWUsenQpfDAseT15K01hdGguaW11bChJ'@;
put 'ZSxUbil8MCxwPShwPXArTWF0aC5pbXVsKEllLHNuKXwwKStNYXRoLmltdWwoT2UsVG4pfDAsUz1TK01hdGguaW11bChPZSxzbil8MDt2YXIgY289KE0rKHk9eStNYXRoLmltdWwobXQsRm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChtdCxxdCl8MCkrTWF0aC5pbXVsKEtlLEZu'@;
put 'KXwwKSk8PDEzKXwwO009KChTPVMrTWF0aC5pbXVsKEtlLHF0KXwwKSsocD4+PjEzKXwwKSsoY28+Pj4yNil8MCxjbyY9NjcxMDg4NjMseT1NYXRoLmltdWwoUHQsb3QpLHA9KHA9TWF0aC5pbXVsKFB0LEl0KSkrTWF0aC5pbXVsKEF0LG90KXwwLFM9TWF0aC5pbXVsKEF0LEl0KSx5PXkrTWF0'@;
put 'aC5pbXVsKGF0LER0KXwwLHA9KHA9cCtNYXRoLmltdWwoYXQsdnQpfDApK01hdGguaW11bChjdCxEdCl8MCxTPVMrTWF0aC5pbXVsKGN0LHZ0KXwwLHk9eStNYXRoLmltdWwoRWUsTG4pfDAscD0ocD1wK01hdGguaW11bChFZSx6dCl8MCkrTWF0aC5pbXVsKERlLExuKXwwLFM9UytNYXRoLmlt'@;
put 'dWwoRGUsenQpfDAseT15K01hdGguaW11bChudCxUbil8MCxwPShwPXArTWF0aC5pbXVsKG50LHNuKXwwKStNYXRoLmltdWwocWUsVG4pfDAsUz1TK01hdGguaW11bChxZSxzbil8MDt2YXIgbG89KE0rKHk9eStNYXRoLmltdWwoSWUsRm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11'@;
put 'bChJZSxxdCl8MCkrTWF0aC5pbXVsKE9lLEZuKXwwKSk8PDEzKXwwO009KChTPVMrTWF0aC5pbXVsKE9lLHF0KXwwKSsocD4+PjEzKXwwKSsobG8+Pj4yNil8MCxsbyY9NjcxMDg4NjMseT1NYXRoLmltdWwoUHQsRHQpLHA9KHA9TWF0aC5pbXVsKFB0LHZ0KSkrTWF0aC5pbXVsKEF0LER0KXww'@;
put 'LFM9TWF0aC5pbXVsKEF0LHZ0KSx5PXkrTWF0aC5pbXVsKGF0LExuKXwwLHA9KHA9cCtNYXRoLmltdWwoYXQsenQpfDApK01hdGguaW11bChjdCxMbil8MCxTPVMrTWF0aC5pbXVsKGN0LHp0KXwwLHk9eStNYXRoLmltdWwoRWUsVG4pfDAscD0ocD1wK01hdGguaW11bChFZSxzbil8MCkrTWF0'@;
put 'aC5pbXVsKERlLFRuKXwwLFM9UytNYXRoLmltdWwoRGUsc24pfDA7dmFyIHNvPShNKyh5PXkrTWF0aC5pbXVsKG50LEZuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobnQscXQpfDApK01hdGguaW11bChxZSxGbil8MCkpPDwxMyl8MDtNPSgoUz1TK01hdGguaW11bChxZSxxdCl8'@;
put 'MCkrKHA+Pj4xMyl8MCkrKHNvPj4+MjYpfDAsc28mPTY3MTA4ODYzLHk9TWF0aC5pbXVsKFB0LExuKSxwPShwPU1hdGguaW11bChQdCx6dCkpK01hdGguaW11bChBdCxMbil8MCxTPU1hdGguaW11bChBdCx6dCkseT15K01hdGguaW11bChhdCxUbil8MCxwPShwPXArTWF0aC5pbXVsKGF0LHNu'@;
put 'KXwwKStNYXRoLmltdWwoY3QsVG4pfDAsUz1TK01hdGguaW11bChjdCxzbil8MDt2YXIgWGk9KE0rKHk9eStNYXRoLmltdWwoRWUsRm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChFZSxxdCl8MCkrTWF0aC5pbXVsKERlLEZuKXwwKSk8PDEzKXwwO009KChTPVMrTWF0aC5pbXVs'@;
put 'KERlLHF0KXwwKSsocD4+PjEzKXwwKSsoWGk+Pj4yNil8MCxYaSY9NjcxMDg4NjMseT1NYXRoLmltdWwoUHQsVG4pLHA9KHA9TWF0aC5pbXVsKFB0LHNuKSkrTWF0aC5pbXVsKEF0LFRuKXwwLFM9TWF0aC5pbXVsKEF0LHNuKTt2YXIgcG89KE0rKHk9eStNYXRoLmltdWwoYXQsRm4pfDApfDAp'@;
put 'KygoODE5MSYocD0ocD1wK01hdGguaW11bChhdCxxdCl8MCkrTWF0aC5pbXVsKGN0LEZuKXwwKSk8PDEzKXwwO009KChTPVMrTWF0aC5pbXVsKGN0LHF0KXwwKSsocD4+PjEzKXwwKSsocG8+Pj4yNil8MCxwbyY9NjcxMDg4NjM7dmFyIF9yPShNKyh5PU1hdGguaW11bChQdCxGbikpfDApKygo'@;
put 'ODE5MSYocD0ocD1NYXRoLmltdWwoUHQscXQpKStNYXRoLmltdWwoQXQsRm4pfDApKTw8MTMpfDA7cmV0dXJuIE09KChTPU1hdGguaW11bChBdCxxdCkpKyhwPj4+MTMpfDApKyhfcj4+PjI2KXwwLF9yJj02NzEwODg2MyxDWzBdPUhuLENbMV09aWksQ1syXT1jbixDWzNdPWpuLENbNF09WHIs'@;
put 'Q1s1XT12aSxDWzZdPUVyLENbN109WWksQ1s4XT1KcixDWzldPWFvLENbMTBdPUJyLENbMTFdPUppLENbMTJdPXRvLENbMTNdPWNvLENbMTRdPWxvLENbMTVdPXNvLENbMTZdPVhpLENbMTddPXBvLENbMThdPV9yLDAhPT1NJiYoQ1sxOV09TSxOLmxlbmd0aCsrKSxOfTtmdW5jdGlvbiBXKFks'@;
put 'Yix4KXtyZXR1cm4obmV3IFUpLm11bHAoWSxiLHgpfWZ1bmN0aW9uIFUoWSxiKXt0aGlzLng9WSx0aGlzLnk9Yn1NYXRoLmltdWx8fChWPWopLEgucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKGIseCl7dmFyIE4sRj10aGlzLmxlbmd0aCtiLmxlbmd0aDtyZXR1cm4gTj0xMD09PXRoaXMubGVu'@;
put 'Z3RoJiYxMD09PWIubGVuZ3RoP1YodGhpcyxiLHgpOkY8NjM/aih0aGlzLGIseCk6RjwxMDI0P2Z1bmN0aW9uIEcoWSxiLHgpe3gubmVnYXRpdmU9Yi5uZWdhdGl2ZV5ZLm5lZ2F0aXZlLHgubGVuZ3RoPVkubGVuZ3RoK2IubGVuZ3RoO2Zvcih2YXIgTj0wLEY9MCxnPTA7Zzx4Lmxlbmd0aC0x'@;
put 'O2crKyl7dmFyIEM9RjtGPTA7Zm9yKHZhciBNPTY3MTA4ODYzJk4seT1NYXRoLm1pbihnLGIubGVuZ3RoLTEpLHA9TWF0aC5tYXgoMCxnLVkubGVuZ3RoKzEpO3A8PXk7cCsrKXt2YXIgZmU9KDB8WS53b3Jkc1tnLXBdKSooMHxiLndvcmRzW3BdKSxtZT02NzEwODg2MyZmZTtNPTY3MTA4ODYz'@;
put 'JihtZT1tZStNfDApLEYrPShDPShDPUMrKGZlLzY3MTA4ODY0fDApfDApKyhtZT4+PjI2KXwwKT4+PjI2LEMmPTY3MTA4ODYzfXgud29yZHNbZ109TSxOPUMsQz1GfXJldHVybiAwIT09Tj94LndvcmRzW2ddPU46eC5sZW5ndGgtLSx4LnN0cmlwKCl9KHRoaXMsYix4KTpXKHRoaXMsYix4KSxO'@;
put 'fSxVLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKGIpe2Zvcih2YXIgeD1uZXcgQXJyYXkoYiksTj1ILnByb3RvdHlwZS5fY291bnRCaXRzKGIpLTEsRj0wO0Y8YjtGKyspeFtGXT10aGlzLnJldkJpbihGLE4sYik7cmV0dXJuIHh9LFUucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihiLHgs'@;
put 'Til7aWYoMD09PWJ8fGI9PT1OLTEpcmV0dXJuIGI7Zm9yKHZhciBGPTAsZz0wO2c8eDtnKyspRnw9KDEmYik8PHgtZy0xLGI+Pj0xO3JldHVybiBGfSxVLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKGIseCxOLEYsZyxDKXtmb3IodmFyIE09MDtNPEM7TSsrKUZbTV09eFtiW01dXSxnW01d'@;
put 'PU5bYltNXV19LFUucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihiLHgsTixGLGcsQyl7dGhpcy5wZXJtdXRlKEMsYix4LE4sRixnKTtmb3IodmFyIE09MTtNPGc7TTw8PTEpZm9yKHZhciB5PU08PDEscD1NYXRoLmNvcygyKk1hdGguUEkveSksUz1NYXRoLnNpbigyKk1hdGguUEkveSks'@;
put 'UT0wO1E8ZztRKz15KWZvcih2YXIgcmU9cCxmZT1TLG1lPTA7bWU8TTttZSsrKXt2YXIga2U9TltRK21lXSxUZT1GW1ErbWVdLFBlPU5bUSttZStNXSxGZT1GW1ErbWUrTV0sTmU9cmUqUGUtZmUqRmU7RmU9cmUqRmUrZmUqUGUsTltRK21lXT1rZSsoUGU9TmUpLEZbUSttZV09VGUrRmUsTltR'@;
put 'K21lK01dPWtlLVBlLEZbUSttZStNXT1UZS1GZSxtZSE9PXkmJihOZT1wKnJlLVMqZmUsZmU9cCpmZStTKnJlLHJlPU5lKX19LFUucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKGIseCl7dmFyIE49MXxNYXRoLm1heCh4LGIpLEY9MSZOLGc9MDtmb3IoTj1OLzJ8MDtOO04+Pj49MSln'@;
put 'Kys7cmV0dXJuIDE8PGcrMStGfSxVLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oYix4LE4pe2lmKCEoTjw9MSkpZm9yKHZhciBGPTA7RjxOLzI7RisrKXt2YXIgZz1iW0ZdO2JbRl09YltOLUYtMV0sYltOLUYtMV09ZyxnPXhbRl0seFtGXT0teFtOLUYtMV0seFtOLUYtMV09LWd9fSxV'@;
put 'LnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oYix4KXtmb3IodmFyIE49MCxGPTA7Rjx4LzI7RisrKXt2YXIgZz04MTkyKk1hdGgucm91bmQoYlsyKkYrMV0veCkrTWF0aC5yb3VuZChiWzIqRl0veCkrTjtiW0ZdPTY3MTA4ODYzJmcsTj1nPDY3MTA4ODY0PzA6Zy82NzEwODg2NHww'@;
put 'fXJldHVybiBifSxVLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKGIseCxOLEYpe2Zvcih2YXIgZz0wLEM9MDtDPHg7QysrKU5bMipDXT04MTkxJihnKz0wfGJbQ10pLE5bMipDKzFdPTgxOTEmKGc+Pj49MTMpLGc+Pj49MTM7Zm9yKEM9Mip4O0M8RjsrK0MpTltDXT0wO3YoMD09PWcp'@;
put 'LHYoMD09KC04MTkyJmcpKX0sVS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihiKXtmb3IodmFyIHg9bmV3IEFycmF5KGIpLE49MDtOPGI7TisrKXhbTl09MDtyZXR1cm4geH0sVS5wcm90b3R5cGUubXVscD1mdW5jdGlvbihiLHgsTil7dmFyIEY9Mip0aGlzLmd1ZXNzTGVuMTNiKGIubGVuZ3Ro'@;
put 'LHgubGVuZ3RoKSxnPXRoaXMubWFrZVJCVChGKSxDPXRoaXMuc3R1YihGKSxNPW5ldyBBcnJheShGKSx5PW5ldyBBcnJheShGKSxwPW5ldyBBcnJheShGKSxTPW5ldyBBcnJheShGKSxRPW5ldyBBcnJheShGKSxyZT1uZXcgQXJyYXkoRiksZmU9Ti53b3JkcztmZS5sZW5ndGg9Rix0aGlzLmNv'@;
put 'bnZlcnQxM2IoYi53b3JkcyxiLmxlbmd0aCxNLEYpLHRoaXMuY29udmVydDEzYih4LndvcmRzLHgubGVuZ3RoLFMsRiksdGhpcy50cmFuc2Zvcm0oTSxDLHkscCxGLGcpLHRoaXMudHJhbnNmb3JtKFMsQyxRLHJlLEYsZyk7Zm9yKHZhciBtZT0wO21lPEY7bWUrKyl7dmFyIGtlPXlbbWVdKlFb'@;
put 'bWVdLXBbbWVdKnJlW21lXTtwW21lXT15W21lXSpyZVttZV0rcFttZV0qUVttZV0seVttZV09a2V9cmV0dXJuIHRoaXMuY29uanVnYXRlKHkscCxGKSx0aGlzLnRyYW5zZm9ybSh5LHAsZmUsQyxGLGcpLHRoaXMuY29uanVnYXRlKGZlLEMsRiksdGhpcy5ub3JtYWxpemUxM2IoZmUsRiksTi5u'@;
put 'ZWdhdGl2ZT1iLm5lZ2F0aXZlXngubmVnYXRpdmUsTi5sZW5ndGg9Yi5sZW5ndGgreC5sZW5ndGgsTi5zdHJpcCgpfSxILnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oYil7dmFyIHg9bmV3IEgobnVsbCk7cmV0dXJuIHgud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2IubGVuZ3RoKSx0aGlz'@;
put 'Lm11bFRvKGIseCl9LEgucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oYil7dmFyIHg9bmV3IEgobnVsbCk7cmV0dXJuIHgud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2IubGVuZ3RoKSxXKHRoaXMsYix4KX0sSC5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9u'@;
put 'ZSgpLm11bFRvKGIsdGhpcyl9LEgucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGIpe3YoIm51bWJlciI9PXR5cGVvZiBiKSx2KGI8NjcxMDg4NjQpO2Zvcih2YXIgeD0wLE49MDtOPHRoaXMubGVuZ3RoO04rKyl7dmFyIEY9KDB8dGhpcy53b3Jkc1tOXSkqYixnPSg2NzEwODg2MyZGKSsoNjcx'@;
put 'MDg4NjMmeCk7eD4+PTI2LHgrPUYvNjcxMDg4NjR8MCx4Kz1nPj4+MjYsdGhpcy53b3Jkc1tOXT02NzEwODg2MyZnfXJldHVybiAwIT09eCYmKHRoaXMud29yZHNbTl09eCx0aGlzLmxlbmd0aCsrKSx0aGlzfSxILnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25l'@;
put 'KCkuaW11bG4oYil9LEgucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sSC5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sSC5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGIpe3ZhciB4PWZ1bmN0aW9u'@;
put 'IHooWSl7Zm9yKHZhciBiPW5ldyBBcnJheShZLmJpdExlbmd0aCgpKSx4PTA7eDxiLmxlbmd0aDt4Kyspe3ZhciBGPXglMjY7Ylt4XT0oWS53b3Jkc1t4LzI2fDBdJjE8PEYpPj4+Rn1yZXR1cm4gYn0oYik7aWYoMD09PXgubGVuZ3RoKXJldHVybiBuZXcgSCgxKTtmb3IodmFyIE49dGhpcyxG'@;
put 'PTA7Rjx4Lmxlbmd0aCYmMD09PXhbRl07RisrLE49Ti5zcXIoKSk7aWYoKytGPHgubGVuZ3RoKWZvcih2YXIgZz1OLnNxcigpO0Y8eC5sZW5ndGg7RisrLGc9Zy5zcXIoKSkwIT09eFtGXSYmKE49Ti5tdWwoZykpO3JldHVybiBOfSxILnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oYil7digi'@;
put 'bnVtYmVyIj09dHlwZW9mIGImJmI+PTApO3ZhciBnLHg9YiUyNixOPShiLXgpLzI2LEY9NjcxMDg4NjM+Pj4yNi14PDwyNi14O2lmKDAhPT14KXt2YXIgQz0wO2ZvcihnPTA7Zzx0aGlzLmxlbmd0aDtnKyspe3ZhciBNPXRoaXMud29yZHNbZ10mRjt0aGlzLndvcmRzW2ddPSgwfHRoaXMud29y'@;
put 'ZHNbZ10pLU08PHh8QyxDPU0+Pj4yNi14fUMmJih0aGlzLndvcmRzW2ddPUMsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PU4pe2ZvcihnPXRoaXMubGVuZ3RoLTE7Zz49MDtnLS0pdGhpcy53b3Jkc1tnK05dPXRoaXMud29yZHNbZ107Zm9yKGc9MDtnPE47ZysrKXRoaXMud29yZHNbZ109MDt0aGlz'@;
put 'Lmxlbmd0aCs9Tn1yZXR1cm4gdGhpcy5zdHJpcCgpfSxILnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihiKXtyZXR1cm4gdigwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oYil9LEgucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihiLHgsTil7dmFyIEY7digibnVtYmVyIj09dHlwZW9m'@;
put 'IGImJmI+PTApLEY9eD8oeC14JTI2KS8yNjowO3ZhciBnPWIlMjYsQz1NYXRoLm1pbigoYi1nKS8yNix0aGlzLmxlbmd0aCksTT02NzEwODg2M142NzEwODg2Mz4+Pmc8PGcseT1OO2lmKEYtPUMsRj1NYXRoLm1heCgwLEYpLHkpe2Zvcih2YXIgcD0wO3A8QztwKyspeS53b3Jkc1twXT10aGlz'@;
put 'LndvcmRzW3BdO3kubGVuZ3RoPUN9aWYoMCE9PUMpaWYodGhpcy5sZW5ndGg+Qylmb3IodGhpcy5sZW5ndGgtPUMscD0wO3A8dGhpcy5sZW5ndGg7cCsrKXRoaXMud29yZHNbcF09dGhpcy53b3Jkc1twK0NdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIFM9MDtmb3Io'@;
put 'cD10aGlzLmxlbmd0aC0xO3A+PTAmJigwIT09U3x8cD49Rik7cC0tKXt2YXIgUT0wfHRoaXMud29yZHNbcF07dGhpcy53b3Jkc1twXT1TPDwyNi1nfFE+Pj5nLFM9USZNfXJldHVybiB5JiYwIT09UyYmKHkud29yZHNbeS5sZW5ndGgrK109UyksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jk'@;
put 'c1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sSC5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oYix4LE4pe3JldHVybiB2KDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihiLHgsTil9LEgucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUo'@;
put 'KS5pc2hsbihiKX0sSC5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oYil9LEgucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihiKX0sSC5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oYil7cmV0'@;
put 'dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oYil9LEgucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKGIpe3YoIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgeD1iJTI2LE49KGIteCkvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9Tnx8ISh0aGlzLndvcmRzW05dJjE8PHgpKX0sSC5wcm90b3R5'@;
put 'cGUuaW1hc2tuPWZ1bmN0aW9uKGIpe3YoIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgeD1iJTI2LE49KGIteCkvMjY7cmV0dXJuIHYoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD1OP3RoaXM6KDAh'@;
put 'PT14JiZOKyssdGhpcy5sZW5ndGg9TWF0aC5taW4oTix0aGlzLmxlbmd0aCksMCE9PXgmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+Png8PHgpLHRoaXMuc3RyaXAoKSl9LEgucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNs'@;
put 'b25lKCkuaW1hc2tuKGIpfSxILnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihiKXtyZXR1cm4gdigibnVtYmVyIj09dHlwZW9mIGIpLHYoYjw2NzEwODg2NCksYjwwP3RoaXMuaXN1Ym4oLWIpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8Yj8o'@;
put 'dGhpcy53b3Jkc1swXT1iLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oYiksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGIpfSxILnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oYil7dGhpcy53b3Jk'@;
put 'c1swXSs9Yjtmb3IodmFyIHg9MDt4PHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW3hdPj02NzEwODg2NDt4KyspdGhpcy53b3Jkc1t4XS09NjcxMDg4NjQseD09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1t4KzFdPTE6dGhpcy53b3Jkc1t4KzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgu'@;
put 'bWF4KHRoaXMubGVuZ3RoLHgrMSksdGhpc30sSC5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oYil7aWYodigibnVtYmVyIj09dHlwZW9mIGIpLHYoYjw2NzEwODg2NCksYjwwKXJldHVybiB0aGlzLmlhZGRuKC1iKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0w'@;
put 'LHRoaXMuaWFkZG4oYiksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09YiwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgeD0wO3g8dGhpcy5sZW5ndGgm'@;
put 'JnRoaXMud29yZHNbeF08MDt4KyspdGhpcy53b3Jkc1t4XSs9NjcxMDg4NjQsdGhpcy53b3Jkc1t4KzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LEgucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihiKX0sSC5wcm90b3R5cGUuc3Vibj1mdW5j'@;
put 'dGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKGIpfSxILnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxILnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sSC5wcm90b3R5cGUuX2lz'@;
put 'aGxuc3VibXVsPWZ1bmN0aW9uKGIseCxOKXt2YXIgZzt0aGlzLl9leHBhbmQoYi5sZW5ndGgrTik7dmFyIEMsTT0wO2ZvcihnPTA7ZzxiLmxlbmd0aDtnKyspe0M9KDB8dGhpcy53b3Jkc1tnK05dKStNO3ZhciB5PSgwfGIud29yZHNbZ10pKng7TT0oKEMtPTY3MTA4ODYzJnkpPj4yNiktKHkv'@;
put 'NjcxMDg4NjR8MCksdGhpcy53b3Jkc1tnK05dPTY3MTA4ODYzJkN9Zm9yKDtnPHRoaXMubGVuZ3RoLU47ZysrKU09KEM9KDB8dGhpcy53b3Jkc1tnK05dKStNKT4+MjYsdGhpcy53b3Jkc1tnK05dPTY3MTA4ODYzJkM7aWYoMD09PU0pcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IodigtMT09PU0p'@;
put 'LE09MCxnPTA7Zzx0aGlzLmxlbmd0aDtnKyspTT0oQz0tKDB8dGhpcy53b3Jkc1tnXSkrTSk+PjI2LHRoaXMud29yZHNbZ109NjcxMDg4NjMmQztyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sSC5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oYix4KXt2YXIgTixGPXRo'@;
put 'aXMuY2xvbmUoKSxnPWIsQz0wfGcud29yZHNbZy5sZW5ndGgtMV07MCE9KE49MjYtdGhpcy5fY291bnRCaXRzKEMpKSYmKGc9Zy51c2hsbihOKSxGLml1c2hsbihOKSxDPTB8Zy53b3Jkc1tnLmxlbmd0aC0xXSk7dmFyIHAseT1GLmxlbmd0aC1nLmxlbmd0aDtpZigibW9kIiE9PXgpeyhwPW5l'@;
put 'dyBIKG51bGwpKS5sZW5ndGg9eSsxLHAud29yZHM9bmV3IEFycmF5KHAubGVuZ3RoKTtmb3IodmFyIFM9MDtTPHAubGVuZ3RoO1MrKylwLndvcmRzW1NdPTB9dmFyIFE9Ri5jbG9uZSgpLl9pc2hsbnN1Ym11bChnLDEseSk7MD09PVEubmVnYXRpdmUmJihGPVEscCYmKHAud29yZHNbeV09MSkp'@;
put 'O2Zvcih2YXIgcmU9eS0xO3JlPj0wO3JlLS0pe3ZhciBmZT02NzEwODg2NCooMHxGLndvcmRzW2cubGVuZ3RoK3JlXSkrKDB8Ri53b3Jkc1tnLmxlbmd0aCtyZS0xXSk7Zm9yKGZlPU1hdGgubWluKGZlL0N8MCw2NzEwODg2MyksRi5faXNobG5zdWJtdWwoZyxmZSxyZSk7MCE9PUYubmVnYXRp'@;
put 'dmU7KWZlLS0sRi5uZWdhdGl2ZT0wLEYuX2lzaGxuc3VibXVsKGcsMSxyZSksRi5pc1plcm8oKXx8KEYubmVnYXRpdmVePTEpO3AmJihwLndvcmRzW3JlXT1mZSl9cmV0dXJuIHAmJnAuc3RyaXAoKSxGLnN0cmlwKCksImRpdiIhPT14JiYwIT09TiYmRi5pdXNocm4oTikse2RpdjpwfHxudWxs'@;
put 'LG1vZDpGfX0sSC5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGIseCxOKXtyZXR1cm4gdighYi5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyBIKDApLG1vZDpuZXcgSCgwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1iLm5lZ2F0aXZlPyhDPXRoaXMubmVnKCkuZGl2bW9kKGIs'@;
put 'eCksIm1vZCIhPT14JiYoRj1DLmRpdi5uZWcoKSksImRpdiIhPT14JiYoZz1DLm1vZC5uZWcoKSxOJiYwIT09Zy5uZWdhdGl2ZSYmZy5pYWRkKGIpKSx7ZGl2OkYsbW9kOmd9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWIubmVnYXRpdmU/KEM9dGhpcy5kaXZtb2QoYi5uZWcoKSx4KSwibW9k'@;
put 'IiE9PXgmJihGPUMuZGl2Lm5lZygpKSx7ZGl2OkYsbW9kOkMubW9kfSk6dGhpcy5uZWdhdGl2ZSZiLm5lZ2F0aXZlPyhDPXRoaXMubmVnKCkuZGl2bW9kKGIubmVnKCkseCksImRpdiIhPT14JiYoZz1DLm1vZC5uZWcoKSxOJiYwIT09Zy5uZWdhdGl2ZSYmZy5pc3ViKGIpKSx7ZGl2OkMuZGl2'@;
put 'LG1vZDpnfSk6Yi5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGIpPDA/e2RpdjpuZXcgSCgwKSxtb2Q6dGhpc306MT09PWIubGVuZ3RoPyJkaXYiPT09eD97ZGl2OnRoaXMuZGl2bihiLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT14P3tkaXY6bnVsbCxtb2Q6bmV3IEgodGhpcy5t'@;
put 'b2RuKGIud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oYi53b3Jkc1swXSksbW9kOm5ldyBIKHRoaXMubW9kbihiLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoYix4KTt2YXIgRixnLEN9LEgucHJvdG90eXBlLmRpdj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5kaXZtb2QoYiwiZGl2Iiwh'@;
put 'MSkuZGl2fSxILnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuZGl2bW9kKGIsIm1vZCIsITEpLm1vZH0sSC5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5kaXZtb2QoYiwibW9kIiwhMCkubW9kfSxILnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlv'@;
put 'bihiKXt2YXIgeD10aGlzLmRpdm1vZChiKTtpZih4Lm1vZC5pc1plcm8oKSlyZXR1cm4geC5kaXY7dmFyIE49MCE9PXguZGl2Lm5lZ2F0aXZlP3gubW9kLmlzdWIoYik6eC5tb2QsRj1iLnVzaHJuKDEpLGc9Yi5hbmRsbigxKSxDPU4uY21wKEYpO3JldHVybiBDPDB8fDE9PT1nJiYwPT09Qz94'@;
put 'LmRpdjowIT09eC5kaXYubmVnYXRpdmU/eC5kaXYuaXN1Ym4oMSk6eC5kaXYuaWFkZG4oMSl9LEgucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oYil7dihiPD02NzEwODg2Myk7Zm9yKHZhciB4PSgxPDwyNiklYixOPTAsRj10aGlzLmxlbmd0aC0xO0Y+PTA7Ri0tKU49KHgqTisoMHx0aGlzLndv'@;
put 'cmRzW0ZdKSklYjtyZXR1cm4gTn0sSC5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24oYil7dihiPD02NzEwODg2Myk7Zm9yKHZhciB4PTAsTj10aGlzLmxlbmd0aC0xO04+PTA7Ti0tKXt2YXIgRj0oMHx0aGlzLndvcmRzW05dKSs2NzEwODg2NCp4O3RoaXMud29yZHNbTl09Ri9ifDAseD1GJWJ9'@;
put 'cmV0dXJuIHRoaXMuc3RyaXAoKX0sSC5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKGIpfSxILnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKGIpe3YoMD09PWIubmVnYXRpdmUpLHYoIWIuaXNaZXJvKCkpO3ZhciB4PXRoaXMsTj1iLmNsb25lKCk7'@;
put 'eD0wIT09eC5uZWdhdGl2ZT94LnVtb2QoYik6eC5jbG9uZSgpO2Zvcih2YXIgRj1uZXcgSCgxKSxnPW5ldyBIKDApLEM9bmV3IEgoMCksTT1uZXcgSCgxKSx5PTA7eC5pc0V2ZW4oKSYmTi5pc0V2ZW4oKTspeC5pdXNocm4oMSksTi5pdXNocm4oMSksKyt5O2Zvcih2YXIgcD1OLmNsb25lKCks'@;
put 'Uz14LmNsb25lKCk7IXguaXNaZXJvKCk7KXtmb3IodmFyIFE9MCxyZT0xOyEoeC53b3Jkc1swXSZyZSkmJlE8MjY7KytRLHJlPDw9MSk7aWYoUT4wKWZvcih4Lml1c2hybihRKTtRLS0gPjA7KShGLmlzT2RkKCl8fGcuaXNPZGQoKSkmJihGLmlhZGQocCksZy5pc3ViKFMpKSxGLml1c2hybigx'@;
put 'KSxnLml1c2hybigxKTtmb3IodmFyIGZlPTAsbWU9MTshKE4ud29yZHNbMF0mbWUpJiZmZTwyNjsrK2ZlLG1lPDw9MSk7aWYoZmU+MClmb3IoTi5pdXNocm4oZmUpO2ZlLS0gPjA7KShDLmlzT2RkKCl8fE0uaXNPZGQoKSkmJihDLmlhZGQocCksTS5pc3ViKFMpKSxDLml1c2hybigxKSxNLml1'@;
put 'c2hybigxKTt4LmNtcChOKT49MD8oeC5pc3ViKE4pLEYuaXN1YihDKSxnLmlzdWIoTSkpOihOLmlzdWIoeCksQy5pc3ViKEYpLE0uaXN1YihnKSl9cmV0dXJue2E6QyxiOk0sZ2NkOk4uaXVzaGxuKHkpfX0sSC5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKGIpe3YoMD09PWIubmVnYXRpdmUp'@;
put 'LHYoIWIuaXNaZXJvKCkpO3ZhciBRLHg9dGhpcyxOPWIuY2xvbmUoKTt4PTAhPT14Lm5lZ2F0aXZlP3gudW1vZChiKTp4LmNsb25lKCk7Zm9yKHZhciBGPW5ldyBIKDEpLGc9bmV3IEgoMCksQz1OLmNsb25lKCk7eC5jbXBuKDEpPjAmJk4uY21wbigxKT4wOyl7Zm9yKHZhciBNPTAseT0xOyEo'@;
put 'eC53b3Jkc1swXSZ5KSYmTTwyNjsrK00seTw8PTEpO2lmKE0+MClmb3IoeC5pdXNocm4oTSk7TS0tID4wOylGLmlzT2RkKCkmJkYuaWFkZChDKSxGLml1c2hybigxKTtmb3IodmFyIHA9MCxTPTE7IShOLndvcmRzWzBdJlMpJiZwPDI2OysrcCxTPDw9MSk7aWYocD4wKWZvcihOLml1c2hybihw'@;
put 'KTtwLS0gPjA7KWcuaXNPZGQoKSYmZy5pYWRkKEMpLGcuaXVzaHJuKDEpO3guY21wKE4pPj0wPyh4LmlzdWIoTiksRi5pc3ViKGcpKTooTi5pc3ViKHgpLGcuaXN1YihGKSl9cmV0dXJuKFE9MD09PXguY21wbigxKT9GOmcpLmNtcG4oMCk8MCYmUS5pYWRkKGIpLFF9LEgucHJvdG90eXBlLmdj'@;
put 'ZD1mdW5jdGlvbihiKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBiLmFicygpO2lmKGIuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIHg9dGhpcy5jbG9uZSgpLE49Yi5jbG9uZSgpO3gubmVnYXRpdmU9MCxOLm5lZ2F0aXZlPTA7Zm9yKHZhciBGPTA7eC5pc0V2ZW4oKSYmTi5pc0V2'@;
put 'ZW4oKTtGKyspeC5pdXNocm4oMSksTi5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO3guaXNFdmVuKCk7KXguaXVzaHJuKDEpO2Zvcig7Ti5pc0V2ZW4oKTspTi5pdXNocm4oMSk7dmFyIGc9eC5jbXAoTik7aWYoZzwwKXt2YXIgQz14O3g9TixOPUN9ZWxzZSBpZigwPT09Z3x8MD09PU4uY21wbigx'@;
put 'KSlicmVhazt4LmlzdWIoTil9cmV0dXJuIE4uaXVzaGxuKEYpfSxILnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmVnY2QoYikuYS51bW9kKGIpfSxILnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09KDEmdGhpcy53b3Jkc1swXSl9LEgucHJvdG90'@;
put 'eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PSgxJnRoaXMud29yZHNbMF0pfSxILnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZifSxILnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihiKXt2KCJudW1iZXIiPT10eXBlb2YgYik7dmFyIHg9YiUy'@;
put 'NixOPShiLXgpLzI2LEY9MTw8eDtpZih0aGlzLmxlbmd0aDw9TilyZXR1cm4gdGhpcy5fZXhwYW5kKE4rMSksdGhpcy53b3Jkc1tOXXw9Rix0aGlzO2Zvcih2YXIgZz1GLEM9TjswIT09ZyYmQzx0aGlzLmxlbmd0aDtDKyspe3ZhciBNPTB8dGhpcy53b3Jkc1tDXTtnPShNKz1nKT4+PjI2LHRo'@;
put 'aXMud29yZHNbQ109TSY9NjcxMDg4NjN9cmV0dXJuIDAhPT1nJiYodGhpcy53b3Jkc1tDXT1nLHRoaXMubGVuZ3RoKyspLHRoaXN9LEgucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxILnByb3RvdHlwZS5jbXBu'@;
put 'PWZ1bmN0aW9uKGIpe3ZhciBOLHg9YjwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYheClyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmeClyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSlOPTE7ZWxzZXt4JiYoYj0tYiksdihiPD02NzEwODg2MywiTnVtYmVyIGlz'@;
put 'IHRvbyBiaWciKTt2YXIgRj0wfHRoaXMud29yZHNbMF07Tj1GPT09Yj8wOkY8Yj8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1OOk59LEgucHJvdG90eXBlLmNtcD1mdW5jdGlvbihiKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWIubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09'@;
put 'PXRoaXMubmVnYXRpdmUmJjAhPT1iLm5lZ2F0aXZlKXJldHVybiAxO3ZhciB4PXRoaXMudWNtcChiKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwteDp4fSxILnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKGIpe2lmKHRoaXMubGVuZ3RoPmIubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVu'@;
put 'Z3RoPGIubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgeD0wLE49dGhpcy5sZW5ndGgtMTtOPj0wO04tLSl7dmFyIEY9MHx0aGlzLndvcmRzW05dLGc9MHxiLndvcmRzW05dO2lmKEYhPT1nKXtGPGc/eD0tMTpGPmcmJih4PTEpO2JyZWFrfX1yZXR1cm4geH0sSC5wcm90b3R5cGUuZ3RuPWZ1bmN0'@;
put 'aW9uKGIpe3JldHVybiAxPT09dGhpcy5jbXBuKGIpfSxILnByb3RvdHlwZS5ndD1mdW5jdGlvbihiKXtyZXR1cm4gMT09PXRoaXMuY21wKGIpfSxILnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNtcG4oYik+PTB9LEgucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihiKXty'@;
put 'ZXR1cm4gdGhpcy5jbXAoYik+PTB9LEgucHJvdG90eXBlLmx0bj1mdW5jdGlvbihiKXtyZXR1cm4tMT09PXRoaXMuY21wbihiKX0sSC5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oYil7cmV0dXJuLTE9PT10aGlzLmNtcChiKX0sSC5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhp'@;
put 'cy5jbXBuKGIpPD0wfSxILnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY21wKGIpPD0wfSxILnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oYil7cmV0dXJuIDA9PT10aGlzLmNtcG4oYil9LEgucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGIpe3JldHVybiAwPT09dGhpcy5jbXAo'@;
put 'Yil9LEgucmVkPWZ1bmN0aW9uKGIpe3JldHVybiBuZXcgdWUoYil9LEgucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKGIpe3JldHVybiB2KCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHYoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5'@;
put 'IHdpdGggcG9zaXRpdmVzIiksYi5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGIpfSxILnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHYodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5j'@;
put 'b252ZXJ0RnJvbSh0aGlzKX0sSC5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnJlZD1iLHRoaXN9LEgucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKGIpe3JldHVybiB2KCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4'@;
put 'dCIpLHRoaXMuX2ZvcmNlUmVkKGIpfSxILnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oYil7cmV0dXJuIHYodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxiKX0sSC5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihiKXty'@;
put 'ZXR1cm4gdih0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsYil9LEgucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihiKXtyZXR1cm4gdih0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIp'@;
put 'LHRoaXMucmVkLnN1Yih0aGlzLGIpfSxILnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKGIpe3JldHVybiB2KHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxiKX0sSC5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGIp'@;
put 'e3JldHVybiB2KHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsYil9LEgucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihiKXtyZXR1cm4gdih0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIp'@;
put 'LHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsYiksdGhpcy5yZWQubXVsKHRoaXMsYil9LEgucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oYil7cmV0dXJuIHYodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGIpLHRo'@;
put 'aXMucmVkLmltdWwodGhpcyxiKX0sSC5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHYodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LEgucHJvdG90eXBlLnJl'@;
put 'ZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdih0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxILnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHYodGhpcy5y'@;
put 'ZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sSC5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiB2KHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQg'@;
put 'bnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LEgucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiB2KHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyks'@;
put 'dGhpcy5yZWQubmVnKHRoaXMpfSxILnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oYil7cmV0dXJuIHYodGhpcy5yZWQmJiFiLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxiKX07dmFyIHE9e2syNTY6bnVsbCxwMjI0'@;
put 'Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiB0ZShZLGIpe3RoaXMubmFtZT1ZLHRoaXMucD1uZXcgSChiLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgSCgxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1w'@;
put 'KCl9ZnVuY3Rpb24gbmUoKXt0ZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIGllKCl7dGUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYg'@;
put 'ZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBsZSgpe3RlLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gZGUoKXt0ZS5jYWxsKHRoaXMs'@;
put 'IjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIHVlKFkpe2lmKCJzdHJpbmciPT10eXBlb2YgWSl7dmFyIGI9SC5fcHJpbWUoWSk7dGhpcy5tPWIucCx0aGlzLnByaW1lPWJ9ZWxzZSB2'@;
put 'KFkuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09WSx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gY2UoWSl7dWUuY2FsbCh0aGlzLFkpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10'@;
put 'aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IEgoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0p'@;
put 'LHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9dGUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgYj1uZXcgSChudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLGJ9LHRl'@;
put 'LnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKGIpe3ZhciBOLHg9Yjtkb3t0aGlzLnNwbGl0KHgsdGhpcy50bXApLE49KHg9KHg9dGhpcy5pbXVsSyh4KSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKE4+dGhpcy5uKTt2YXIgRj1OPHRoaXMubj8tMTp4LnVjbXAodGhpcy5w'@;
put 'KTtyZXR1cm4gMD09PUY/KHgud29yZHNbMF09MCx4Lmxlbmd0aD0xKTpGPjA/eC5pc3ViKHRoaXMucCk6dm9pZCAwIT09eC5zdHJpcD94LnN0cmlwKCk6eC5fc3RyaXAoKSx4fSx0ZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oYix4KXtiLml1c2hybih0aGlzLm4sMCx4KX0sdGUucHJvdG90'@;
put 'eXBlLmltdWxLPWZ1bmN0aW9uKGIpe3JldHVybiBiLmltdWwodGhpcy5rKX0saGUobmUsdGUpLG5lLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihiLHgpe2Zvcih2YXIgTj00MTk0MzAzLEY9TWF0aC5taW4oYi5sZW5ndGgsOSksZz0wO2c8RjtnKyspeC53b3Jkc1tnXT1iLndvcmRzW2ddO2lm'@;
put 'KHgubGVuZ3RoPUYsYi5sZW5ndGg8PTkpcmV0dXJuIGIud29yZHNbMF09MCx2b2lkKGIubGVuZ3RoPTEpO3ZhciBDPWIud29yZHNbOV07Zm9yKHgud29yZHNbeC5sZW5ndGgrK109QyZOLGc9MTA7ZzxiLmxlbmd0aDtnKyspe3ZhciBNPTB8Yi53b3Jkc1tnXTtiLndvcmRzW2ctMTBdPShNJk4p'@;
put 'PDw0fEM+Pj4yMixDPU19Yi53b3Jkc1tnLTEwXT1DPj4+PTIyLGIubGVuZ3RoLT0wPT09QyYmYi5sZW5ndGg+MTA/MTA6OX0sbmUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGIpe2Iud29yZHNbYi5sZW5ndGhdPTAsYi53b3Jkc1tiLmxlbmd0aCsxXT0wLGIubGVuZ3RoKz0yO2Zvcih2YXIg'@;
put 'eD0wLE49MDtOPGIubGVuZ3RoO04rKyl7dmFyIEY9MHxiLndvcmRzW05dO2Iud29yZHNbTl09NjcxMDg4NjMmKHgrPTk3NypGKSx4PTY0KkYrKHgvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1iLndvcmRzW2IubGVuZ3RoLTFdJiYoYi5sZW5ndGgtLSwwPT09Yi53b3Jkc1tiLmxlbmd0aC0xXSYm'@;
put 'Yi5sZW5ndGgtLSksYn0saGUoaWUsdGUpLGhlKGxlLHRlKSxoZShkZSx0ZSksZGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGIpe2Zvcih2YXIgeD0wLE49MDtOPGIubGVuZ3RoO04rKyl7dmFyIEY9MTkqKDB8Yi53b3Jkc1tOXSkreCxnPTY3MTA4ODYzJkY7Rj4+Pj0yNixiLndvcmRzW05d'@;
put 'PWcseD1GfXJldHVybiAwIT09eCYmKGIud29yZHNbYi5sZW5ndGgrK109eCksYn0sSC5fcHJpbWU9ZnVuY3Rpb24oYil7aWYocVtiXSlyZXR1cm4gcVtiXTt2YXIgeDtpZigiazI1NiI9PT1iKXg9bmV3IG5lO2Vsc2UgaWYoInAyMjQiPT09Yil4PW5ldyBpZTtlbHNlIGlmKCJwMTkyIj09PWIp'@;
put 'eD1uZXcgbGU7ZWxzZXtpZigicDI1NTE5IiE9PWIpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrYik7eD1uZXcgZGV9cmV0dXJuIHFbYl09eCx4fSx1ZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oYil7digwPT09Yi5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBw'@;
put 'b3NpdGl2ZXMiKSx2KGIucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LHVlLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihiLHgpe3YoMD09KGIubmVnYXRpdmV8eC5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksdihiLnJlZCYmYi5y'@;
put 'ZWQ9PT14LnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSx1ZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoYikuX2ZvcmNlUmVkKHRoaXMpOmIudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0s'@;
put 'dWUucHJvdG90eXBlLm5lZz1mdW5jdGlvbihiKXtyZXR1cm4gYi5pc1plcm8oKT9iLmNsb25lKCk6dGhpcy5tLnN1YihiKS5fZm9yY2VSZWQodGhpcyl9LHVlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYix4KXt0aGlzLl92ZXJpZnkyKGIseCk7dmFyIE49Yi5hZGQoeCk7cmV0dXJuIE4uY21w'@;
put 'KHRoaXMubSk+PTAmJk4uaXN1Yih0aGlzLm0pLE4uX2ZvcmNlUmVkKHRoaXMpfSx1ZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihiLHgpe3RoaXMuX3ZlcmlmeTIoYix4KTt2YXIgTj1iLmlhZGQoeCk7cmV0dXJuIE4uY21wKHRoaXMubSk+PTAmJk4uaXN1Yih0aGlzLm0pLE59LHVlLnByb3Rv'@;
put 'dHlwZS5zdWI9ZnVuY3Rpb24oYix4KXt0aGlzLl92ZXJpZnkyKGIseCk7dmFyIE49Yi5zdWIoeCk7cmV0dXJuIE4uY21wbigwKTwwJiZOLmlhZGQodGhpcy5tKSxOLl9mb3JjZVJlZCh0aGlzKX0sdWUucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oYix4KXt0aGlzLl92ZXJpZnkyKGIseCk7dmFy'@;
put 'IE49Yi5pc3ViKHgpO3JldHVybiBOLmNtcG4oMCk8MCYmTi5pYWRkKHRoaXMubSksTn0sdWUucHJvdG90eXBlLnNobD1mdW5jdGlvbihiLHgpe3JldHVybiB0aGlzLl92ZXJpZnkxKGIpLHRoaXMuaW1vZChiLnVzaGxuKHgpKX0sdWUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oYix4KXtyZXR1'@;
put 'cm4gdGhpcy5fdmVyaWZ5MihiLHgpLHRoaXMuaW1vZChiLmltdWwoeCkpfSx1ZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGIseCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoYix4KSx0aGlzLmltb2QoYi5tdWwoeCkpfSx1ZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5p'@;
put 'bXVsKGIsYi5jbG9uZSgpKX0sdWUucHJvdG90eXBlLnNxcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5tdWwoYixiKX0sdWUucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oYil7aWYoYi5pc1plcm8oKSlyZXR1cm4gYi5jbG9uZSgpO3ZhciB4PXRoaXMubS5hbmRsbigzKTtpZih2KHglMj09MSks'@;
put 'Mz09PXgpe3ZhciBOPXRoaXMubS5hZGQobmV3IEgoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coYixOKX1mb3IodmFyIEY9dGhpcy5tLnN1Ym4oMSksZz0wOyFGLmlzWmVybygpJiYwPT09Ri5hbmRsbigxKTspZysrLEYuaXVzaHJuKDEpO3YoIUYuaXNaZXJvKCkpO3ZhciBDPW5ldyBI'@;
put 'KDEpLnRvUmVkKHRoaXMpLE09Qy5yZWROZWcoKSx5PXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxwPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IocD1uZXcgSCgyKnAqcCkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KHAseSkuY21wKE0pOylwLnJlZElBZGQoTSk7Zm9yKHZhciBTPXRoaXMucG93'@;
put 'KHAsRiksUT10aGlzLnBvdyhiLEYuYWRkbigxKS5pdXNocm4oMSkpLHJlPXRoaXMucG93KGIsRiksZmU9ZzswIT09cmUuY21wKEMpOyl7Zm9yKHZhciBtZT1yZSxrZT0wOzAhPT1tZS5jbXAoQyk7a2UrKyltZT1tZS5yZWRTcXIoKTt2KGtlPGZlKTt2YXIgVGU9dGhpcy5wb3coUyxuZXcgSCgx'@;
put 'KS5pdXNobG4oZmUta2UtMSkpO1E9US5yZWRNdWwoVGUpLFM9VGUucmVkU3FyKCkscmU9cmUucmVkTXVsKFMpLGZlPWtlfXJldHVybiBRfSx1ZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihiKXt2YXIgeD1iLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09eC5uZWdhdGl2ZT8oeC5uZWdhdGl2'@;
put 'ZT0wLHRoaXMuaW1vZCh4KS5yZWROZWcoKSk6dGhpcy5pbW9kKHgpfSx1ZS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGIseCl7aWYoeC5pc1plcm8oKSlyZXR1cm4gbmV3IEgoMSkudG9SZWQodGhpcyk7aWYoMD09PXguY21wbigxKSlyZXR1cm4gYi5jbG9uZSgpO3ZhciBGPW5ldyBBcnJheSgx'@;
put 'Nik7RlswXT1uZXcgSCgxKS50b1JlZCh0aGlzKSxGWzFdPWI7Zm9yKHZhciBnPTI7ZzxGLmxlbmd0aDtnKyspRltnXT10aGlzLm11bChGW2ctMV0sYik7dmFyIEM9RlswXSxNPTAseT0wLHA9eC5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PXAmJihwPTI2KSxnPXgubGVuZ3RoLTE7Zz49MDtnLS0p'@;
put 'e2Zvcih2YXIgUz14LndvcmRzW2ddLFE9cC0xO1E+PTA7US0tKXt2YXIgcmU9Uz4+USYxO0MhPT1GWzBdJiYoQz10aGlzLnNxcihDKSksMCE9PXJlfHwwIT09TT8oTTw8PTEsTXw9cmUsKDQ9PSsreXx8MD09PWcmJjA9PT1RKSYmKEM9dGhpcy5tdWwoQyxGW01dKSx5PTAsTT0wKSk6eT0wfXA9'@;
put 'MjZ9cmV0dXJuIEN9LHVlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oYil7dmFyIHg9Yi51bW9kKHRoaXMubSk7cmV0dXJuIHg9PT1iP3guY2xvbmUoKTp4fSx1ZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oYil7dmFyIHg9Yi5jbG9uZSgpO3JldHVybiB4LnJlZD1udWxs'@;
put 'LHh9LEgubW9udD1mdW5jdGlvbihiKXtyZXR1cm4gbmV3IGNlKGIpfSxoZShjZSx1ZSksY2UucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5pbW9kKGIudXNobG4odGhpcy5zaGlmdCkpfSxjZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oYil7dmFy'@;
put 'IHg9dGhpcy5pbW9kKGIubXVsKHRoaXMucmludikpO3JldHVybiB4LnJlZD1udWxsLHh9LGNlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGIseCl7aWYoYi5pc1plcm8oKXx8eC5pc1plcm8oKSlyZXR1cm4gYi53b3Jkc1swXT0wLGIubGVuZ3RoPTEsYjt2YXIgTj1iLmltdWwoeCksRj1OLm1h'@;
put 'c2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxnPU4uaXN1YihGKS5pdXNocm4odGhpcy5zaGlmdCksQz1nO3JldHVybiBnLmNtcCh0aGlzLm0pPj0wP0M9Zy5pc3ViKHRoaXMubSk6Zy5jbXBuKDApPDAmJihDPWcuaWFkZCh0aGlz'@;
put 'Lm0pKSxDLl9mb3JjZVJlZCh0aGlzKX0sY2UucHJvdG90eXBlLm11bD1mdW5jdGlvbihiLHgpe2lmKGIuaXNaZXJvKCl8fHguaXNaZXJvKCkpcmV0dXJuIG5ldyBIKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgTj1iLm11bCh4KSxGPU4ubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludiku'@;
put 'aW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGc9Ti5pc3ViKEYpLml1c2hybih0aGlzLnNoaWZ0KSxDPWc7cmV0dXJuIGcuY21wKHRoaXMubSk+PTA/Qz1nLmlzdWIodGhpcy5tKTpnLmNtcG4oMCk8MCYmKEM9Zy5pYWRkKHRoaXMubSkpLEMuX2ZvcmNlUmVkKHRoaXMpfSxjZS5wcm90'@;
put 'b3R5cGUuaW52bT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5pbW9kKGIuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShXZT1ULm5tZChXZSksdGhpcyl9LDk2MzYyOihXZSx6ZSxUKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgc2U9VCg2NjY5OCksaz1UKDc1ODI5'@;
put 'KSx2PVQoMzk3MDYpLGhlPVQoOTc5NjUpLEg9VCg4NjQyMCk7ZnVuY3Rpb24gQihMKXtILmNhbGwodGhpcywiZGlnZXN0IiksdGhpcy5faGFzaD1MfXNlKEIsSCksQi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihMKXt0aGlzLl9oYXNoLnVwZGF0ZShMKX0sQi5wcm90b3R5cGUuX2ZpbmFs'@;
put 'PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hhc2guZGlnZXN0KCl9LFdlLmV4cG9ydHM9ZnVuY3Rpb24oSyl7cmV0dXJuIm1kNSI9PT0oSz1LLnRvTG93ZXJDYXNlKCkpP25ldyBrOiJybWQxNjAiPT09S3x8InJpcGVtZDE2MCI9PT1LP25ldyB2Om5ldyBCKGhlKEspKX19LDg3NTg4OihXZSx6'@;
put 'ZSxUKT0+e3ZhciBzZT1UKDc1ODI5KTtXZS5leHBvcnRzPWZ1bmN0aW9uKGspe3JldHVybihuZXcgc2UpLnVwZGF0ZShrKS5kaWdlc3QoKX19LDg1ODI1OihXZSx6ZSxUKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgc2U9VCg2NjY5OCksaz1UKDk1OTIyKSx2PVQoODY0MjApLGhlPVQoODQzKS5CdWZm'@;
put 'ZXIsSD1UKDg3NTg4KSxCPVQoMzk3MDYpLEw9VCg5Nzk2NSksSz1oZS5hbGxvYygxMjgpO2Z1bmN0aW9uIEooSSxSKXt2LmNhbGwodGhpcywiZGlnZXN0IiksInN0cmluZyI9PXR5cGVvZiBSJiYoUj1oZS5mcm9tKFIpKTt2YXIgRT0ic2hhNTEyIj09PUl8fCJzaGEzODQiPT09ST8xMjg6NjQ7'@;
put 'dGhpcy5fYWxnPUksdGhpcy5fa2V5PVIsUi5sZW5ndGg+RT9SPSgicm1kMTYwIj09PUk/bmV3IEI6TChJKSkudXBkYXRlKFIpLmRpZ2VzdCgpOlIubGVuZ3RoPEUmJihSPWhlLmNvbmNhdChbUixLXSxFKSk7Zm9yKHZhciBqPXRoaXMuX2lwYWQ9aGUuYWxsb2NVbnNhZmUoRSksVj10aGlzLl9v'@;
put 'cGFkPWhlLmFsbG9jVW5zYWZlKEUpLEc9MDtHPEU7RysrKWpbR109NTReUltHXSxWW0ddPTkyXlJbR107dGhpcy5faGFzaD0icm1kMTYwIj09PUk/bmV3IEI6TChJKSx0aGlzLl9oYXNoLnVwZGF0ZShqKX1zZShKLHYpLEoucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oSSl7dGhpcy5faGFz'@;
put 'aC51cGRhdGUoSSl9LEoucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBJPXRoaXMuX2hhc2guZGlnZXN0KCk7cmV0dXJuKCJybWQxNjAiPT09dGhpcy5fYWxnP25ldyBCOkwodGhpcy5fYWxnKSkudXBkYXRlKHRoaXMuX29wYWQpLnVwZGF0ZShJKS5kaWdlc3QoKX0sV2UuZXhwb3J0'@;
put 'cz1mdW5jdGlvbihSLEUpe3JldHVybiJybWQxNjAiPT09KFI9Ui50b0xvd2VyQ2FzZSgpKXx8InJpcGVtZDE2MCI9PT1SP25ldyBKKCJybWQxNjAiLEUpOiJtZDUiPT09Uj9uZXcgayhILEUpOm5ldyBKKFIsRSl9fSw5NTkyMjooV2UsemUsVCk9PnsidXNlIHN0cmljdCI7dmFyIHNlPVQoNjY2'@;
put 'OTgpLGs9VCg4NDMpLkJ1ZmZlcix2PVQoODY0MjApLGhlPWsuYWxsb2MoMTI4KSxIPTY0O2Z1bmN0aW9uIEIoTCxLKXt2LmNhbGwodGhpcywiZGlnZXN0IiksInN0cmluZyI9PXR5cGVvZiBLJiYoSz1rLmZyb20oSykpLHRoaXMuX2FsZz1MLHRoaXMuX2tleT1LLEsubGVuZ3RoPkg/Sz1MKEsp'@;
put 'OksubGVuZ3RoPEgmJihLPWsuY29uY2F0KFtLLGhlXSxIKSk7Zm9yKHZhciBKPXRoaXMuX2lwYWQ9ay5hbGxvY1Vuc2FmZShIKSxJPXRoaXMuX29wYWQ9ay5hbGxvY1Vuc2FmZShIKSxSPTA7UjxIO1IrKylKW1JdPTU0XktbUl0sSVtSXT05Ml5LW1JdO3RoaXMuX2hhc2g9W0pdfXNlKEIsdiks'@;
put 'Qi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihMKXt0aGlzLl9oYXNoLnB1c2goTCl9LEIucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBMPXRoaXMuX2FsZyhrLmNvbmNhdCh0aGlzLl9oYXNoKSk7cmV0dXJuIHRoaXMuX2FsZyhrLmNvbmNhdChbdGhpcy5fb3BhZCxMXSkpfSxX'@;
put 'ZS5leHBvcnRzPUJ9LDc3OTAzOihXZSx6ZSxUKT0+eyJ1c2Ugc3RyaWN0Ijt6ZS5yYW5kb21CeXRlcz16ZS5ybmc9emUucHNldWRvUmFuZG9tQnl0ZXM9emUucHJuZz1UKDQ0MDE5KSx6ZS5jcmVhdGVIYXNoPXplLkhhc2g9VCg5NjM2MiksemUuY3JlYXRlSG1hYz16ZS5IbWFjPVQoODU4MjUp'@;
put 'O3ZhciBzZT1UKDgxNjk5KSxrPU9iamVjdC5rZXlzKHNlKSx2PVsic2hhMSIsInNoYTIyNCIsInNoYTI1NiIsInNoYTM4NCIsInNoYTUxMiIsIm1kNSIsInJtZDE2MCJdLmNvbmNhdChrKTt6ZS5nZXRIYXNoZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdn07dmFyIGhlPVQoNTcxMDApO3plLnBia2Rm'@;
put 'Mj1oZS5wYmtkZjIsemUucGJrZGYyU3luYz1oZS5wYmtkZjJTeW5jO3ZhciBIPVQoMjU2MDApO3plLkNpcGhlcj1ILkNpcGhlcix6ZS5jcmVhdGVDaXBoZXI9SC5jcmVhdGVDaXBoZXIsemUuQ2lwaGVyaXY9SC5DaXBoZXJpdix6ZS5jcmVhdGVDaXBoZXJpdj1ILmNyZWF0ZUNpcGhlcml2LHpl'@;
put 'LkRlY2lwaGVyPUguRGVjaXBoZXIsemUuY3JlYXRlRGVjaXBoZXI9SC5jcmVhdGVEZWNpcGhlcix6ZS5EZWNpcGhlcml2PUguRGVjaXBoZXJpdix6ZS5jcmVhdGVEZWNpcGhlcml2PUguY3JlYXRlRGVjaXBoZXJpdix6ZS5nZXRDaXBoZXJzPUguZ2V0Q2lwaGVycyx6ZS5saXN0Q2lwaGVycz1I'@;
put 'Lmxpc3RDaXBoZXJzO3ZhciBCPVQoNDUxNDQpO3plLkRpZmZpZUhlbGxtYW5Hcm91cD1CLkRpZmZpZUhlbGxtYW5Hcm91cCx6ZS5jcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXA9Qi5jcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXAsemUuZ2V0RGlmZmllSGVsbG1hbj1CLmdldERpZmZpZUhlbGxtYW4s'@;
put 'emUuY3JlYXRlRGlmZmllSGVsbG1hbj1CLmNyZWF0ZURpZmZpZUhlbGxtYW4semUuRGlmZmllSGVsbG1hbj1CLkRpZmZpZUhlbGxtYW47dmFyIEw9VCgyNzY4Nik7emUuY3JlYXRlU2lnbj1MLmNyZWF0ZVNpZ24semUuU2lnbj1MLlNpZ24semUuY3JlYXRlVmVyaWZ5PUwuY3JlYXRlVmVyaWZ5'@;
put 'LHplLlZlcmlmeT1MLlZlcmlmeSx6ZS5jcmVhdGVFQ0RIPVQoMzg4NDApO3ZhciBLPVQoMjcwNTApO3plLnB1YmxpY0VuY3J5cHQ9Sy5wdWJsaWNFbmNyeXB0LHplLnByaXZhdGVFbmNyeXB0PUsucHJpdmF0ZUVuY3J5cHQsemUucHVibGljRGVjcnlwdD1LLnB1YmxpY0RlY3J5cHQsemUucHJp'@;
put 'dmF0ZURlY3J5cHQ9Sy5wcml2YXRlRGVjcnlwdDt2YXIgSj1UKDYxMjM3KTt6ZS5yYW5kb21GaWxsPUoucmFuZG9tRmlsbCx6ZS5yYW5kb21GaWxsU3luYz1KLnJhbmRvbUZpbGxTeW5jLHplLmNyZWF0ZUNyZWRlbnRpYWxzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFsic29ycnksIGNy'@;
put 'ZWF0ZUNyZWRlbnRpYWxzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCJ3ZSBhY2NlcHQgcHVsbCByZXF1ZXN0cyIsImh0dHBzOi8vZ2l0aHViLmNvbS9jcnlwdG8tYnJvd3NlcmlmeS9jcnlwdG8tYnJvd3NlcmlmeSJdLmpvaW4oIlxuIikpfSx6ZS5jb25zdGFudHM9e0RIX0NIRUNLX1BfTk9U'@;
put 'X1NBRkVfUFJJTUU6MixESF9DSEVDS19QX05PVF9QUklNRToxLERIX1VOQUJMRV9UT19DSEVDS19HRU5FUkFUT1I6NCxESF9OT1RfU1VJVEFCTEVfR0VORVJBVE9SOjgsTlBOX0VOQUJMRUQ6MSxBTFBOX0VOQUJMRUQ6MSxSU0FfUEtDUzFfUEFERElORzoxLFJTQV9TU0xWMjNfUEFERElORzoy'@;
put 'LFJTQV9OT19QQURESU5HOjMsUlNBX1BLQ1MxX09BRVBfUEFERElORzo0LFJTQV9YOTMxX1BBRERJTkc6NSxSU0FfUEtDUzFfUFNTX1BBRERJTkc6NixQT0lOVF9DT05WRVJTSU9OX0NPTVBSRVNTRUQ6MixQT0lOVF9DT05WRVJTSU9OX1VOQ09NUFJFU1NFRDo0LFBPSU5UX0NPTlZFUlNJT05f'@;
put 'SFlCUklEOjZ9fSwxMDAxMjpmdW5jdGlvbihXZSx6ZSl7dmFyIHNlLHYsaGUsSCxCLEwsSyxKLEksUixFLGosVDtXZS5leHBvcnRzPShUPVR8fChzZT1NYXRoLHY9T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24oKXtmdW5jdGlvbiBWKCl7fXJldHVybiBmdW5jdGlvbihHKXt2YXIgVztyZXR1cm4g'@;
put 'Vi5wcm90b3R5cGU9RyxXPW5ldyBWLFYucHJvdG90eXBlPW51bGwsV319KCksSD0oaGU9e30pLmxpYj17fSxCPUguQmFzZT17ZXh0ZW5kOmZ1bmN0aW9uKFYpe3ZhciBHPXYodGhpcyk7cmV0dXJuIFYmJkcubWl4SW4oViksKCFHLmhhc093blByb3BlcnR5KCJpbml0Iil8fHRoaXMuaW5pdD09'@;
put 'PUcuaW5pdCkmJihHLmluaXQ9ZnVuY3Rpb24oKXtHLiRzdXBlci5pbml0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLEcuaW5pdC5wcm90b3R5cGU9RyxHLiRzdXBlcj10aGlzLEd9LGNyZWF0ZTpmdW5jdGlvbigpe3ZhciBWPXRoaXMuZXh0ZW5kKCk7cmV0dXJuIFYuaW5pdC5hcHBseShWLGFy'@;
put 'Z3VtZW50cyksVn0saW5pdDpmdW5jdGlvbigpe30sbWl4SW46ZnVuY3Rpb24oVil7Zm9yKHZhciBHIGluIFYpVi5oYXNPd25Qcm9wZXJ0eShHKSYmKHRoaXNbR109VltHXSk7Vi5oYXNPd25Qcm9wZXJ0eSgidG9TdHJpbmciKSYmKHRoaXMudG9TdHJpbmc9Vi50b1N0cmluZyl9LGNsb25lOmZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5pdC5wcm90b3R5cGUuZXh0ZW5kKHRoaXMpfX0sTD1ILldvcmRBcnJheT1CLmV4dGVuZCh7aW5pdDpmdW5jdGlvbihWLEcpe1Y9dGhpcy53b3Jkcz1WfHxbXSx0aGlzLnNpZ0J5dGVzPW51bGwhPUc/Rzo0KlYubGVuZ3RofSx0b1N0cmluZzpmdW5jdGlv'@;
put 'bihWKXtyZXR1cm4oVnx8Sikuc3RyaW5naWZ5KHRoaXMpfSxjb25jYXQ6ZnVuY3Rpb24oVil7dmFyIEc9dGhpcy53b3JkcyxXPVYud29yZHMsVT10aGlzLnNpZ0J5dGVzLHE9Vi5zaWdCeXRlcztpZih0aGlzLmNsYW1wKCksVSU0KWZvcih2YXIgdGU9MDt0ZTxxO3RlKyspR1tVK3RlPj4+Ml18'@;
put 'PShXW3RlPj4+Ml0+Pj4yNC10ZSU0KjgmMjU1KTw8MjQtKFUrdGUpJTQqODtlbHNlIGZvcih0ZT0wO3RlPHE7dGUrPTQpR1tVK3RlPj4+Ml09V1t0ZT4+PjJdO3JldHVybiB0aGlzLnNpZ0J5dGVzKz1xLHRoaXN9LGNsYW1wOmZ1bmN0aW9uKCl7dmFyIFY9dGhpcy53b3JkcyxHPXRoaXMuc2ln'@;
put 'Qnl0ZXM7VltHPj4+Ml0mPTQyOTQ5NjcyOTU8PDMyLUclNCo4LFYubGVuZ3RoPXNlLmNlaWwoRy80KX0sY2xvbmU6ZnVuY3Rpb24oKXt2YXIgVj1CLmNsb25lLmNhbGwodGhpcyk7cmV0dXJuIFYud29yZHM9dGhpcy53b3Jkcy5zbGljZSgwKSxWfSxyYW5kb206ZnVuY3Rpb24oVil7Zm9yKHZh'@;
put 'ciBxLEc9W10sVz1mdW5jdGlvbihpZSl7dmFyIGxlPTk4NzY1NDMyMSxkZT00Mjk0OTY3Mjk1O3JldHVybiBmdW5jdGlvbigpe3ZhciB1ZT0oKGxlPTM2OTY5Kig2NTUzNSZsZSkrKGxlPj4xNikmZGUpPDwxNikrKGllPTE4ZTMqKDY1NTM1JmllKSsoaWU+PjE2KSZkZSkmZGU7cmV0dXJuIHVl'@;
put 'Lz00Mjk0OTY3Mjk2LCh1ZSs9LjUpKihzZS5yYW5kb20oKT4uNT8xOi0xKX19LFU9MDtVPFY7VSs9NCl7dmFyIHRlPVcoNDI5NDk2NzI5NioocXx8c2UucmFuZG9tKCkpKTtxPTk4NzY1NDA3MSp0ZSgpLEcucHVzaCg0Mjk0OTY3Mjk2KnRlKCl8MCl9cmV0dXJuIG5ldyBMLmluaXQoRyxWKX19'@;
put 'KSxLPWhlLmVuYz17fSxKPUsuSGV4PXtzdHJpbmdpZnk6ZnVuY3Rpb24oVil7Zm9yKHZhciBHPVYud29yZHMsVz1WLnNpZ0J5dGVzLFU9W10scT0wO3E8VztxKyspe3ZhciB0ZT1HW3E+Pj4yXT4+PjI0LXElNCo4JjI1NTtVLnB1c2goKHRlPj4+NCkudG9TdHJpbmcoMTYpKSxVLnB1c2goKDE1'@;
put 'JnRlKS50b1N0cmluZygxNikpfXJldHVybiBVLmpvaW4oIiIpfSxwYXJzZTpmdW5jdGlvbihWKXtmb3IodmFyIEc9Vi5sZW5ndGgsVz1bXSxVPTA7VTxHO1UrPTIpV1tVPj4+M118PXBhcnNlSW50KFYuc3Vic3RyKFUsMiksMTYpPDwyNC1VJTgqNDtyZXR1cm4gbmV3IEwuaW5pdChXLEcvMil9'@;
put 'fSxJPUsuTGF0aW4xPXtzdHJpbmdpZnk6ZnVuY3Rpb24oVil7Zm9yKHZhciBHPVYud29yZHMsVz1WLnNpZ0J5dGVzLFU9W10scT0wO3E8VztxKyspVS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoR1txPj4+Ml0+Pj4yNC1xJTQqOCYyNTUpKTtyZXR1cm4gVS5qb2luKCIiKX0scGFyc2U6ZnVu'@;
put 'Y3Rpb24oVil7Zm9yKHZhciBHPVYubGVuZ3RoLFc9W10sVT0wO1U8RztVKyspV1tVPj4+Ml18PSgyNTUmVi5jaGFyQ29kZUF0KFUpKTw8MjQtVSU0Kjg7cmV0dXJuIG5ldyBMLmluaXQoVyxHKX19LFI9Sy5VdGY4PXtzdHJpbmdpZnk6ZnVuY3Rpb24oVil7dHJ5e3JldHVybiBkZWNvZGVVUklD'@;
put 'b21wb25lbnQoZXNjYXBlKEkuc3RyaW5naWZ5KFYpKSl9Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKCJNYWxmb3JtZWQgVVRGLTggZGF0YSIpfX0scGFyc2U6ZnVuY3Rpb24oVil7cmV0dXJuIEkucGFyc2UodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KFYpKSl9fSxFPUguQnVmZmVyZWRCbG9j'@;
put 'a0FsZ29yaXRobT1CLmV4dGVuZCh7cmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9kYXRhPW5ldyBMLmluaXQsdGhpcy5fbkRhdGFCeXRlcz0wfSxfYXBwZW5kOmZ1bmN0aW9uKFYpeyJzdHJpbmciPT10eXBlb2YgViYmKFY9Ui5wYXJzZShWKSksdGhpcy5fZGF0YS5jb25jYXQoViksdGhpcy5fbkRh'@;
put 'dGFCeXRlcys9Vi5zaWdCeXRlc30sX3Byb2Nlc3M6ZnVuY3Rpb24oVil7dmFyIEc9dGhpcy5fZGF0YSxXPUcud29yZHMsVT1HLnNpZ0J5dGVzLHE9dGhpcy5ibG9ja1NpemUsbmU9VS8oNCpxKSxpZT0obmU9Vj9zZS5jZWlsKG5lKTpzZS5tYXgoKDB8bmUpLXRoaXMuX21pbkJ1ZmZlclNpemUs'@;
put 'MCkpKnEsbGU9c2UubWluKDQqaWUsVSk7aWYoaWUpe2Zvcih2YXIgZGU9MDtkZTxpZTtkZSs9cSl0aGlzLl9kb1Byb2Nlc3NCbG9jayhXLGRlKTt2YXIgdWU9Vy5zcGxpY2UoMCxpZSk7Ry5zaWdCeXRlcy09bGV9cmV0dXJuIG5ldyBMLmluaXQodWUsbGUpfSxjbG9uZTpmdW5jdGlvbigpe3Zh'@;
put 'ciBWPUIuY2xvbmUuY2FsbCh0aGlzKTtyZXR1cm4gVi5fZGF0YT10aGlzLl9kYXRhLmNsb25lKCksVn0sX21pbkJ1ZmZlclNpemU6MH0pLEguSGFzaGVyPUUuZXh0ZW5kKHtjZmc6Qi5leHRlbmQoKSxpbml0OmZ1bmN0aW9uKFYpe3RoaXMuY2ZnPXRoaXMuY2ZnLmV4dGVuZChWKSx0aGlzLnJl'@;
put 'c2V0KCl9LHJlc2V0OmZ1bmN0aW9uKCl7RS5yZXNldC5jYWxsKHRoaXMpLHRoaXMuX2RvUmVzZXQoKX0sdXBkYXRlOmZ1bmN0aW9uKFYpe3JldHVybiB0aGlzLl9hcHBlbmQoViksdGhpcy5fcHJvY2VzcygpLHRoaXN9LGZpbmFsaXplOmZ1bmN0aW9uKFYpe3JldHVybiBWJiZ0aGlzLl9hcHBl'@;
put 'bmQoViksdGhpcy5fZG9GaW5hbGl6ZSgpfSxibG9ja1NpemU6MTYsX2NyZWF0ZUhlbHBlcjpmdW5jdGlvbihWKXtyZXR1cm4gZnVuY3Rpb24oRyxXKXtyZXR1cm4gbmV3IFYuaW5pdChXKS5maW5hbGl6ZShHKX19LF9jcmVhdGVIbWFjSGVscGVyOmZ1bmN0aW9uKFYpe3JldHVybiBmdW5jdGlv'@;
put 'bihHLFcpe3JldHVybiBuZXcgai5ITUFDLmluaXQoVixXKS5maW5hbGl6ZShHKX19fSksaj1oZS5hbGdvPXt9LGhlKSxUKX0sOTI4NzM6ZnVuY3Rpb24oV2UsemUsVCl7dmFyIHNlO1dlLmV4cG9ydHM9KHNlPVQoMTAwMTIpLGZ1bmN0aW9uKGspe3ZhciB2PXNlLGhlPXYubGliLEg9aGUuV29y'@;
put 'ZEFycmF5LEI9aGUuSGFzaGVyLEw9di5hbGdvLEs9W107IWZ1bmN0aW9uKCl7Zm9yKHZhciBqPTA7ajw2NDtqKyspS1tqXT00Mjk0OTY3Mjk2KmsuYWJzKGsuc2luKGorMSkpfDB9KCk7dmFyIEo9TC5NRDU9Qi5leHRlbmQoe19kb1Jlc2V0OmZ1bmN0aW9uKCl7dGhpcy5faGFzaD1uZXcgSC5p'@;
put 'bml0KFsxNzMyNTg0MTkzLDQwMjMyMzM0MTcsMjU2MjM4MzEwMiwyNzE3MzM4NzhdKX0sX2RvUHJvY2Vzc0Jsb2NrOmZ1bmN0aW9uKGosVil7Zm9yKHZhciBHPTA7RzwxNjtHKyspe3ZhciBXPVYrRyxVPWpbV107altXXT0xNjcxMTkzNSYoVTw8OHxVPj4+MjQpfDQyNzgyNTUzNjAmKFU8PDI0'@;
put 'fFU+Pj44KX12YXIgcT10aGlzLl9oYXNoLndvcmRzLHRlPWpbViswXSxuZT1qW1YrMV0saWU9altWKzJdLGxlPWpbViszXSxkZT1qW1YrNF0sdWU9altWKzVdLGNlPWpbVis2XSxZPWpbVis3XSxiPWpbVis4XSx4PWpbVis5XSxOPWpbVisxMF0sRj1qW1YrMTFdLGc9altWKzEyXSxDPWpbVisx'@;
put 'M10sTT1qW1YrMTRdLHk9altWKzE1XSxwPXFbMF0sUz1xWzFdLFE9cVsyXSxyZT1xWzNdO3A9SShwLFMsUSxyZSx0ZSw3LEtbMF0pLHJlPUkocmUscCxTLFEsbmUsMTIsS1sxXSksUT1JKFEscmUscCxTLGllLDE3LEtbMl0pLFM9SShTLFEscmUscCxsZSwyMixLWzNdKSxwPUkocCxTLFEscmUs'@;
put 'ZGUsNyxLWzRdKSxyZT1JKHJlLHAsUyxRLHVlLDEyLEtbNV0pLFE9SShRLHJlLHAsUyxjZSwxNyxLWzZdKSxTPUkoUyxRLHJlLHAsWSwyMixLWzddKSxwPUkocCxTLFEscmUsYiw3LEtbOF0pLHJlPUkocmUscCxTLFEseCwxMixLWzldKSxRPUkoUSxyZSxwLFMsTiwxNyxLWzEwXSksUz1JKFMs'@;
put 'USxyZSxwLEYsMjIsS1sxMV0pLHA9SShwLFMsUSxyZSxnLDcsS1sxMl0pLHJlPUkocmUscCxTLFEsQywxMixLWzEzXSksUT1JKFEscmUscCxTLE0sMTcsS1sxNF0pLHA9UihwLFM9SShTLFEscmUscCx5LDIyLEtbMTVdKSxRLHJlLG5lLDUsS1sxNl0pLHJlPVIocmUscCxTLFEsY2UsOSxLWzE3'@;
put 'XSksUT1SKFEscmUscCxTLEYsMTQsS1sxOF0pLFM9UihTLFEscmUscCx0ZSwyMCxLWzE5XSkscD1SKHAsUyxRLHJlLHVlLDUsS1syMF0pLHJlPVIocmUscCxTLFEsTiw5LEtbMjFdKSxRPVIoUSxyZSxwLFMseSwxNCxLWzIyXSksUz1SKFMsUSxyZSxwLGRlLDIwLEtbMjNdKSxwPVIocCxTLFEs'@;
put 'cmUseCw1LEtbMjRdKSxyZT1SKHJlLHAsUyxRLE0sOSxLWzI1XSksUT1SKFEscmUscCxTLGxlLDE0LEtbMjZdKSxTPVIoUyxRLHJlLHAsYiwyMCxLWzI3XSkscD1SKHAsUyxRLHJlLEMsNSxLWzI4XSkscmU9UihyZSxwLFMsUSxpZSw5LEtbMjldKSxRPVIoUSxyZSxwLFMsWSwxNCxLWzMwXSks'@;
put 'cD1FKHAsUz1SKFMsUSxyZSxwLGcsMjAsS1szMV0pLFEscmUsdWUsNCxLWzMyXSkscmU9RShyZSxwLFMsUSxiLDExLEtbMzNdKSxRPUUoUSxyZSxwLFMsRiwxNixLWzM0XSksUz1FKFMsUSxyZSxwLE0sMjMsS1szNV0pLHA9RShwLFMsUSxyZSxuZSw0LEtbMzZdKSxyZT1FKHJlLHAsUyxRLGRl'@;
put 'LDExLEtbMzddKSxRPUUoUSxyZSxwLFMsWSwxNixLWzM4XSksUz1FKFMsUSxyZSxwLE4sMjMsS1szOV0pLHA9RShwLFMsUSxyZSxDLDQsS1s0MF0pLHJlPUUocmUscCxTLFEsdGUsMTEsS1s0MV0pLFE9RShRLHJlLHAsUyxsZSwxNixLWzQyXSksUz1FKFMsUSxyZSxwLGNlLDIzLEtbNDNdKSxw'@;
put 'PUUocCxTLFEscmUseCw0LEtbNDRdKSxyZT1FKHJlLHAsUyxRLGcsMTEsS1s0NV0pLFE9RShRLHJlLHAsUyx5LDE2LEtbNDZdKSxwPXoocCxTPUUoUyxRLHJlLHAsaWUsMjMsS1s0N10pLFEscmUsdGUsNixLWzQ4XSkscmU9eihyZSxwLFMsUSxZLDEwLEtbNDldKSxRPXooUSxyZSxwLFMsTSwx'@;
put 'NSxLWzUwXSksUz16KFMsUSxyZSxwLHVlLDIxLEtbNTFdKSxwPXoocCxTLFEscmUsZyw2LEtbNTJdKSxyZT16KHJlLHAsUyxRLGxlLDEwLEtbNTNdKSxRPXooUSxyZSxwLFMsTiwxNSxLWzU0XSksUz16KFMsUSxyZSxwLG5lLDIxLEtbNTVdKSxwPXoocCxTLFEscmUsYiw2LEtbNTZdKSxyZT16'@;
put 'KHJlLHAsUyxRLHksMTAsS1s1N10pLFE9eihRLHJlLHAsUyxjZSwxNSxLWzU4XSksUz16KFMsUSxyZSxwLEMsMjEsS1s1OV0pLHA9eihwLFMsUSxyZSxkZSw2LEtbNjBdKSxyZT16KHJlLHAsUyxRLEYsMTAsS1s2MV0pLFE9eihRLHJlLHAsUyxpZSwxNSxLWzYyXSksUz16KFMsUSxyZSxwLHgs'@;
put 'MjEsS1s2M10pLHFbMF09cVswXStwfDAscVsxXT1xWzFdK1N8MCxxWzJdPXFbMl0rUXwwLHFbM109cVszXStyZXwwfSxfZG9GaW5hbGl6ZTpmdW5jdGlvbigpe3ZhciBqPXRoaXMuX2RhdGEsVj1qLndvcmRzLEc9OCp0aGlzLl9uRGF0YUJ5dGVzLFc9OCpqLnNpZ0J5dGVzO1ZbVz4+PjVdfD0x'@;
put 'Mjg8PDI0LVclMzI7dmFyIFU9ay5mbG9vcihHLzQyOTQ5NjcyOTYpLHE9RztWWzE1KyhXKzY0Pj4+OTw8NCldPTE2NzExOTM1JihVPDw4fFU+Pj4yNCl8NDI3ODI1NTM2MCYoVTw8MjR8VT4+PjgpLFZbMTQrKFcrNjQ+Pj45PDw0KV09MTY3MTE5MzUmKHE8PDh8cT4+PjI0KXw0Mjc4MjU1MzYw'@;
put 'JihxPDwyNHxxPj4+OCksai5zaWdCeXRlcz00KihWLmxlbmd0aCsxKSx0aGlzLl9wcm9jZXNzKCk7Zm9yKHZhciB0ZT10aGlzLl9oYXNoLG5lPXRlLndvcmRzLGllPTA7aWU8NDtpZSsrKXt2YXIgbGU9bmVbaWVdO25lW2llXT0xNjcxMTkzNSYobGU8PDh8bGU+Pj4yNCl8NDI3ODI1NTM2MCYo'@;
put 'bGU8PDI0fGxlPj4+OCl9cmV0dXJuIHRlfSxjbG9uZTpmdW5jdGlvbigpe3ZhciBqPUIuY2xvbmUuY2FsbCh0aGlzKTtyZXR1cm4gai5faGFzaD10aGlzLl9oYXNoLmNsb25lKCksan19KTtmdW5jdGlvbiBJKGosVixHLFcsVSxxLHRlKXt2YXIgbmU9aisoViZHfH5WJlcpK1UrdGU7cmV0dXJu'@;
put 'KG5lPDxxfG5lPj4+MzItcSkrVn1mdW5jdGlvbiBSKGosVixHLFcsVSxxLHRlKXt2YXIgbmU9aisoViZXfEcmflcpK1UrdGU7cmV0dXJuKG5lPDxxfG5lPj4+MzItcSkrVn1mdW5jdGlvbiBFKGosVixHLFcsVSxxLHRlKXt2YXIgbmU9aisoVl5HXlcpK1UrdGU7cmV0dXJuKG5lPDxxfG5lPj4+'@;
put 'MzItcSkrVn1mdW5jdGlvbiB6KGosVixHLFcsVSxxLHRlKXt2YXIgbmU9aisoR14oVnx+VykpK1UrdGU7cmV0dXJuKG5lPDxxfG5lPj4+MzItcSkrVn12Lk1ENT1CLl9jcmVhdGVIZWxwZXIoSiksdi5IbWFjTUQ1PUIuX2NyZWF0ZUhtYWNIZWxwZXIoSil9KE1hdGgpLHNlLk1ENSl9LDQwMTMy'@;
put 'OihXZSx6ZSxUKT0+eyJ1c2Ugc3RyaWN0Ijt6ZS51dGlscz1UKDUyMjk0KSx6ZS5DaXBoZXI9VCgyOTQ4NCksemUuREVTPVQoMTQzNzQpLHplLkNCQz1UKDEyMDY2KSx6ZS5FREU9VCg1OTcxMCl9LDEyMDY2OihXZSx6ZSxUKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgc2U9VCg1Nzc5OCksaz1UKDY2'@;
put 'Njk4KSx2PXt9O2Z1bmN0aW9uIGhlKEIpe3NlLmVxdWFsKEIubGVuZ3RoLDgsIkludmFsaWQgSVYgbGVuZ3RoIiksdGhpcy5pdj1uZXcgQXJyYXkoOCk7Zm9yKHZhciBMPTA7TDx0aGlzLml2Lmxlbmd0aDtMKyspdGhpcy5pdltMXT1CW0xdfXplLmluc3RhbnRpYXRlPWZ1bmN0aW9uIEgoQil7'@;
put 'ZnVuY3Rpb24gTChSKXtCLmNhbGwodGhpcyxSKSx0aGlzLl9jYmNJbml0KCl9ayhMLEIpO2Zvcih2YXIgSz1PYmplY3Qua2V5cyh2KSxKPTA7SjxLLmxlbmd0aDtKKyspe3ZhciBJPUtbSl07TC5wcm90b3R5cGVbSV09dltJXX1yZXR1cm4gTC5jcmVhdGU9ZnVuY3Rpb24oRSl7cmV0dXJuIG5l'@;
put 'dyBMKEUpfSxMfSx2Ll9jYmNJbml0PWZ1bmN0aW9uKCl7dmFyIEw9bmV3IGhlKHRoaXMub3B0aW9ucy5pdik7dGhpcy5fY2JjU3RhdGU9TH0sdi5fdXBkYXRlPWZ1bmN0aW9uKEwsSyxKLEkpe3ZhciBFPXRoaXMuY29uc3RydWN0b3Iuc3VwZXJfLnByb3RvdHlwZSx6PXRoaXMuX2NiY1N0YXRl'@;
put 'Lml2O2lmKCJlbmNyeXB0Ij09PXRoaXMudHlwZSl7Zm9yKHZhciBqPTA7ajx0aGlzLmJsb2NrU2l6ZTtqKyspeltqXV49TFtLK2pdO2ZvcihFLl91cGRhdGUuY2FsbCh0aGlzLHosMCxKLEkpLGo9MDtqPHRoaXMuYmxvY2tTaXplO2orKyl6W2pdPUpbSStqXX1lbHNle2ZvcihFLl91cGRhdGUu'@;
put 'Y2FsbCh0aGlzLEwsSyxKLEkpLGo9MDtqPHRoaXMuYmxvY2tTaXplO2orKylKW0kral1ePXpbal07Zm9yKGo9MDtqPHRoaXMuYmxvY2tTaXplO2orKyl6W2pdPUxbSytqXX19fSwyOTQ4NDooV2UsemUsVCk9PnsidXNlIHN0cmljdCI7dmFyIHNlPVQoNTc3OTgpO2Z1bmN0aW9uIGsodil7dGhp'@;
put 'cy5vcHRpb25zPXYsdGhpcy50eXBlPXRoaXMub3B0aW9ucy50eXBlLHRoaXMuYmxvY2tTaXplPTgsdGhpcy5faW5pdCgpLHRoaXMuYnVmZmVyPW5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSksdGhpcy5idWZmZXJPZmY9MCx0aGlzLnBhZGRpbmc9ITEhPT12LnBhZGRpbmd9V2UuZXhwb3J0cz1r'@;
put 'LGsucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKCl7fSxrLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oaGUpe3JldHVybiAwPT09aGUubGVuZ3RoP1tdOiJkZWNyeXB0Ij09PXRoaXMudHlwZT90aGlzLl91cGRhdGVEZWNyeXB0KGhlKTp0aGlzLl91cGRhdGVFbmNyeXB0KGhlKX0say5wcm90'@;
put 'b3R5cGUuX2J1ZmZlcj1mdW5jdGlvbihoZSxIKXtmb3IodmFyIEI9TWF0aC5taW4odGhpcy5idWZmZXIubGVuZ3RoLXRoaXMuYnVmZmVyT2ZmLGhlLmxlbmd0aC1IKSxMPTA7TDxCO0wrKyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlck9mZitMXT1oZVtIK0xdO3JldHVybiB0aGlzLmJ1ZmZlck9m'@;
put 'Zis9QixCfSxrLnByb3RvdHlwZS5fZmx1c2hCdWZmZXI9ZnVuY3Rpb24oaGUsSCl7cmV0dXJuIHRoaXMuX3VwZGF0ZSh0aGlzLmJ1ZmZlciwwLGhlLEgpLHRoaXMuYnVmZmVyT2ZmPTAsdGhpcy5ibG9ja1NpemV9LGsucHJvdG90eXBlLl91cGRhdGVFbmNyeXB0PWZ1bmN0aW9uKGhlKXt2YXIg'@;
put 'SD0wLEI9MCxLPW5ldyBBcnJheSgoKHRoaXMuYnVmZmVyT2ZmK2hlLmxlbmd0aCkvdGhpcy5ibG9ja1NpemV8MCkqdGhpcy5ibG9ja1NpemUpOzAhPT10aGlzLmJ1ZmZlck9mZiYmKEgrPXRoaXMuX2J1ZmZlcihoZSxIKSx0aGlzLmJ1ZmZlck9mZj09PXRoaXMuYnVmZmVyLmxlbmd0aCYmKEIr'@;
put 'PXRoaXMuX2ZsdXNoQnVmZmVyKEssQikpKTtmb3IodmFyIEo9aGUubGVuZ3RoLShoZS5sZW5ndGgtSCkldGhpcy5ibG9ja1NpemU7SDxKO0grPXRoaXMuYmxvY2tTaXplKXRoaXMuX3VwZGF0ZShoZSxILEssQiksQis9dGhpcy5ibG9ja1NpemU7Zm9yKDtIPGhlLmxlbmd0aDtIKyssdGhpcy5i'@;
put 'dWZmZXJPZmYrKyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlck9mZl09aGVbSF07cmV0dXJuIEt9LGsucHJvdG90eXBlLl91cGRhdGVEZWNyeXB0PWZ1bmN0aW9uKGhlKXtmb3IodmFyIEg9MCxCPTAsTD1NYXRoLmNlaWwoKHRoaXMuYnVmZmVyT2ZmK2hlLmxlbmd0aCkvdGhpcy5ibG9ja1NpemUp'@;
put 'LTEsSz1uZXcgQXJyYXkoTCp0aGlzLmJsb2NrU2l6ZSk7TD4wO0wtLSlIKz10aGlzLl9idWZmZXIoaGUsSCksQis9dGhpcy5fZmx1c2hCdWZmZXIoSyxCKTtyZXR1cm4gSCs9dGhpcy5fYnVmZmVyKGhlLEgpLEt9LGsucHJvdG90eXBlLmZpbmFsPWZ1bmN0aW9uKGhlKXt2YXIgSCxCO3JldHVy'@;
put 'biBoZSYmKEg9dGhpcy51cGRhdGUoaGUpKSxCPSJlbmNyeXB0Ij09PXRoaXMudHlwZT90aGlzLl9maW5hbEVuY3J5cHQoKTp0aGlzLl9maW5hbERlY3J5cHQoKSxIP0guY29uY2F0KEIpOkJ9LGsucHJvdG90eXBlLl9wYWQ9ZnVuY3Rpb24oaGUsSCl7aWYoMD09PUgpcmV0dXJuITE7Zm9yKDtI'@;
put 'PGhlLmxlbmd0aDspaGVbSCsrXT0wO3JldHVybiEwfSxrLnByb3RvdHlwZS5fZmluYWxFbmNyeXB0PWZ1bmN0aW9uKCl7aWYoIXRoaXMuX3BhZCh0aGlzLmJ1ZmZlcix0aGlzLmJ1ZmZlck9mZikpcmV0dXJuW107dmFyIGhlPW5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSk7cmV0dXJuIHRoaXMu'@;
put 'X3VwZGF0ZSh0aGlzLmJ1ZmZlciwwLGhlLDApLGhlfSxrLnByb3RvdHlwZS5fdW5wYWQ9ZnVuY3Rpb24oaGUpe3JldHVybiBoZX0say5wcm90b3R5cGUuX2ZpbmFsRGVjcnlwdD1mdW5jdGlvbigpe3NlLmVxdWFsKHRoaXMuYnVmZmVyT2ZmLHRoaXMuYmxvY2tTaXplLCJOb3QgZW5vdWdoIGRh'@;
put 'dGEgdG8gZGVjcnlwdCIpO3ZhciBoZT1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpO3JldHVybiB0aGlzLl9mbHVzaEJ1ZmZlcihoZSwwKSx0aGlzLl91bnBhZChoZSl9fSwxNDM3NDooV2UsemUsVCk9PnsidXNlIHN0cmljdCI7dmFyIHNlPVQoNTc3OTgpLGs9VCg2NjY5OCksdj1UKDUyMjk0'@;
put 'KSxoZT1UKDI5NDg0KTtmdW5jdGlvbiBIKCl7dGhpcy50bXA9bmV3IEFycmF5KDIpLHRoaXMua2V5cz1udWxsfWZ1bmN0aW9uIEIoSyl7aGUuY2FsbCh0aGlzLEspO3ZhciBKPW5ldyBIO3RoaXMuX2Rlc1N0YXRlPUosdGhpcy5kZXJpdmVLZXlzKEosSy5rZXkpfWsoQixoZSksV2UuZXhwb3J0'@;
put 'cz1CLEIuY3JlYXRlPWZ1bmN0aW9uKEope3JldHVybiBuZXcgQihKKX07dmFyIEw9WzEsMSwyLDIsMiwyLDIsMiwxLDIsMiwyLDIsMiwyLDFdO0IucHJvdG90eXBlLmRlcml2ZUtleXM9ZnVuY3Rpb24oSixJKXtKLmtleXM9bmV3IEFycmF5KDMyKSxzZS5lcXVhbChJLmxlbmd0aCx0aGlzLmJs'@;
put 'b2NrU2l6ZSwiSW52YWxpZCBrZXkgbGVuZ3RoIik7dmFyIFI9di5yZWFkVUludDMyQkUoSSwwKSxFPXYucmVhZFVJbnQzMkJFKEksNCk7di5wYzEoUixFLEoudG1wLDApLFI9Si50bXBbMF0sRT1KLnRtcFsxXTtmb3IodmFyIHo9MDt6PEoua2V5cy5sZW5ndGg7eis9Mil7dmFyIGo9TFt6Pj4+'@;
put 'MV07Uj12LnIyOHNobChSLGopLEU9di5yMjhzaGwoRSxqKSx2LnBjMihSLEUsSi5rZXlzLHopfX0sQi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihKLEksUixFKXt2YXIgej10aGlzLl9kZXNTdGF0ZSxqPXYucmVhZFVJbnQzMkJFKEosSSksVj12LnJlYWRVSW50MzJCRShKLEkrNCk7di5p'@;
put 'cChqLFYsei50bXAsMCksaj16LnRtcFswXSxWPXoudG1wWzFdLCJlbmNyeXB0Ij09PXRoaXMudHlwZT90aGlzLl9lbmNyeXB0KHosaixWLHoudG1wLDApOnRoaXMuX2RlY3J5cHQoeixqLFYsei50bXAsMCksVj16LnRtcFsxXSx2LndyaXRlVUludDMyQkUoUixqPXoudG1wWzBdLEUpLHYud3Jp'@;
put 'dGVVSW50MzJCRShSLFYsRSs0KX0sQi5wcm90b3R5cGUuX3BhZD1mdW5jdGlvbihKLEkpe2lmKCExPT09dGhpcy5wYWRkaW5nKXJldHVybiExO2Zvcih2YXIgUj1KLmxlbmd0aC1JLEU9STtFPEoubGVuZ3RoO0UrKylKW0VdPVI7cmV0dXJuITB9LEIucHJvdG90eXBlLl91bnBhZD1mdW5jdGlv'@;
put 'bihKKXtpZighMT09PXRoaXMucGFkZGluZylyZXR1cm4gSjtmb3IodmFyIEk9SltKLmxlbmd0aC0xXSxSPUoubGVuZ3RoLUk7UjxKLmxlbmd0aDtSKyspc2UuZXF1YWwoSltSXSxJKTtyZXR1cm4gSi5zbGljZSgwLEoubGVuZ3RoLUkpfSxCLnByb3RvdHlwZS5fZW5jcnlwdD1mdW5jdGlvbihK'@;
put 'LEksUixFLHope2Zvcih2YXIgaj1JLFY9UixHPTA7RzxKLmtleXMubGVuZ3RoO0crPTIpe3ZhciBXPUoua2V5c1tHXSxVPUoua2V5c1tHKzFdO3YuZXhwYW5kKFYsSi50bXAsMCk7dmFyIHE9di5zdWJzdGl0dXRlKFdePUoudG1wWzBdLFVePUoudG1wWzFdKSxuZT1WO1Y9KGpedi5wZXJtdXRl'@;
put 'KHEpKT4+PjAsaj1uZX12LnJpcChWLGosRSx6KX0sQi5wcm90b3R5cGUuX2RlY3J5cHQ9ZnVuY3Rpb24oSixJLFIsRSx6KXtmb3IodmFyIGo9UixWPUksRz1KLmtleXMubGVuZ3RoLTI7Rz49MDtHLT0yKXt2YXIgVz1KLmtleXNbR10sVT1KLmtleXNbRysxXTt2LmV4cGFuZChqLEoudG1wLDAp'@;
put 'O3ZhciBxPXYuc3Vic3RpdHV0ZShXXj1KLnRtcFswXSxVXj1KLnRtcFsxXSksbmU9ajtqPShWXnYucGVybXV0ZShxKSk+Pj4wLFY9bmV9di5yaXAoaixWLEUseil9fSw1OTcxMDooV2UsemUsVCk9PnsidXNlIHN0cmljdCI7dmFyIHNlPVQoNTc3OTgpLGs9VCg2NjY5OCksdj1UKDI5NDg0KSxo'@;
put 'ZT1UKDE0Mzc0KTtmdW5jdGlvbiBIKEwsSyl7c2UuZXF1YWwoSy5sZW5ndGgsMjQsIkludmFsaWQga2V5IGxlbmd0aCIpO3ZhciBKPUsuc2xpY2UoMCw4KSxJPUsuc2xpY2UoOCwxNiksUj1LLnNsaWNlKDE2LDI0KTt0aGlzLmNpcGhlcnM9ImVuY3J5cHQiPT09TD9baGUuY3JlYXRlKHt0eXBl'@;
put 'OiJlbmNyeXB0IixrZXk6Sn0pLGhlLmNyZWF0ZSh7dHlwZToiZGVjcnlwdCIsa2V5Okl9KSxoZS5jcmVhdGUoe3R5cGU6ImVuY3J5cHQiLGtleTpSfSldOltoZS5jcmVhdGUoe3R5cGU6ImRlY3J5cHQiLGtleTpSfSksaGUuY3JlYXRlKHt0eXBlOiJlbmNyeXB0IixrZXk6SX0pLGhlLmNyZWF0'@;
put 'ZSh7dHlwZToiZGVjcnlwdCIsa2V5Okp9KV19ZnVuY3Rpb24gQihMKXt2LmNhbGwodGhpcyxMKTt2YXIgSz1uZXcgSCh0aGlzLnR5cGUsdGhpcy5vcHRpb25zLmtleSk7dGhpcy5fZWRlU3RhdGU9S31rKEIsdiksV2UuZXhwb3J0cz1CLEIuY3JlYXRlPWZ1bmN0aW9uKEspe3JldHVybiBuZXcg'@;
put 'QihLKX0sQi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihLLEosSSxSKXt2YXIgRT10aGlzLl9lZGVTdGF0ZTtFLmNpcGhlcnNbMF0uX3VwZGF0ZShLLEosSSxSKSxFLmNpcGhlcnNbMV0uX3VwZGF0ZShJLFIsSSxSKSxFLmNpcGhlcnNbMl0uX3VwZGF0ZShJLFIsSSxSKX0sQi5wcm90b3R5'@;
put 'cGUuX3BhZD1oZS5wcm90b3R5cGUuX3BhZCxCLnByb3RvdHlwZS5fdW5wYWQ9aGUucHJvdG90eXBlLl91bnBhZH0sNTIyOTQ6KFdlLHplKT0+eyJ1c2Ugc3RyaWN0Ijt6ZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24oaGUsSCl7cmV0dXJuKGhlWzArSF08PDI0fGhlWzErSF08PDE2fGhlWzIrSF08'@;
put 'PDh8aGVbMytIXSk+Pj4wfSx6ZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKGhlLEgsQil7aGVbMCtCXT1IPj4+MjQsaGVbMStCXT1IPj4+MTYmMjU1LGhlWzIrQl09SD4+PjgmMjU1LGhlWzMrQl09MjU1Jkh9LHplLmlwPWZ1bmN0aW9uKGhlLEgsQixMKXtmb3IodmFyIEs9MCxKPTAsST02O0k+'@;
put 'PTA7SS09Mil7Zm9yKHZhciBSPTA7Ujw9MjQ7Uis9OClLPDw9MSxLfD1IPj4+UitJJjE7Zm9yKFI9MDtSPD0yNDtSKz04KUs8PD0xLEt8PWhlPj4+UitJJjF9Zm9yKEk9NjtJPj0wO0ktPTIpe2ZvcihSPTE7Ujw9MjU7Uis9OClKPDw9MSxKfD1IPj4+UitJJjE7Zm9yKFI9MTtSPD0yNTtSKz04'@;
put 'KUo8PD0xLEp8PWhlPj4+UitJJjF9QltMKzBdPUs+Pj4wLEJbTCsxXT1KPj4+MH0semUucmlwPWZ1bmN0aW9uKGhlLEgsQixMKXtmb3IodmFyIEs9MCxKPTAsST0wO0k8NDtJKyspZm9yKHZhciBSPTI0O1I+PTA7Ui09OClLPDw9MSxLfD1IPj4+UitJJjEsSzw8PTEsS3w9aGU+Pj5SK0kmMTtm'@;
put 'b3IoST00O0k8ODtJKyspZm9yKFI9MjQ7Uj49MDtSLT04KUo8PD0xLEp8PUg+Pj5SK0kmMSxKPDw9MSxKfD1oZT4+PlIrSSYxO0JbTCswXT1LPj4+MCxCW0wrMV09Sj4+PjB9LHplLnBjMT1mdW5jdGlvbihoZSxILEIsTCl7Zm9yKHZhciBLPTAsSj0wLEk9NztJPj01O0ktLSl7Zm9yKHZhciBS'@;
put 'PTA7Ujw9MjQ7Uis9OClLPDw9MSxLfD1IPj5SK0kmMTtmb3IoUj0wO1I8PTI0O1IrPTgpSzw8PTEsS3w9aGU+PlIrSSYxfWZvcihSPTA7Ujw9MjQ7Uis9OClLPDw9MSxLfD1IPj5SK0kmMTtmb3IoST0xO0k8PTM7SSsrKXtmb3IoUj0wO1I8PTI0O1IrPTgpSjw8PTEsSnw9SD4+UitJJjE7Zm9y'@;
put 'KFI9MDtSPD0yNDtSKz04KUo8PD0xLEp8PWhlPj5SK0kmMX1mb3IoUj0wO1I8PTI0O1IrPTgpSjw8PTEsSnw9aGU+PlIrSSYxO0JbTCswXT1LPj4+MCxCW0wrMV09Sj4+PjB9LHplLnIyOHNobD1mdW5jdGlvbihoZSxIKXtyZXR1cm4gaGU8PEgmMjY4NDM1NDU1fGhlPj4+MjgtSH07dmFyIFQ9'@;
put 'WzE0LDExLDE3LDQsMjcsMjMsMjUsMCwxMywyMiw3LDE4LDUsOSwxNiwyNCwyLDIwLDEyLDIxLDEsOCwxNSwyNiwxNSw0LDI1LDE5LDksMSwyNiwxNiw1LDExLDIzLDgsMTIsNywxNywwLDIyLDMsMTAsMTQsNiwyMCwyNywyNF07emUucGMyPWZ1bmN0aW9uKGhlLEgsQixMKXtmb3IodmFyIEs9'@;
put 'MCxKPTAsST1ULmxlbmd0aD4+PjEsUj0wO1I8STtSKyspSzw8PTEsS3w9aGU+Pj5UW1JdJjE7Zm9yKFI9STtSPFQubGVuZ3RoO1IrKylKPDw9MSxKfD1IPj4+VFtSXSYxO0JbTCswXT1LPj4+MCxCW0wrMV09Sj4+PjB9LHplLmV4cGFuZD1mdW5jdGlvbihoZSxILEIpe3ZhciBMPTAsSz0wO0w9'@;
put 'KDEmaGUpPDw1fGhlPj4+Mjc7Zm9yKHZhciBKPTIzO0o+PTE1O0otPTQpTDw8PTYsTHw9aGU+Pj5KJjYzO2ZvcihKPTExO0o+PTM7Si09NClLfD1oZT4+PkomNjMsSzw8PTY7S3w9KDMxJmhlKTw8MXxoZT4+PjMxLEhbQiswXT1MPj4+MCxIW0IrMV09Sz4+PjB9O3ZhciBzZT1bMTQsMCw0LDE1'@;
put 'LDEzLDcsMSw0LDIsMTQsMTUsMiwxMSwxMyw4LDEsMywxMCwxMCw2LDYsMTIsMTIsMTEsNSw5LDksNSwwLDMsNyw4LDQsMTUsMSwxMiwxNCw4LDgsMiwxMyw0LDYsOSwyLDEsMTEsNywxNSw1LDEyLDExLDksMyw3LDE0LDMsMTAsMTAsMCw1LDYsMCwxMywxNSwzLDEsMTMsOCw0LDE0LDcsNiwx'@;
put 'NSwxMSwyLDMsOCw0LDE0LDksMTIsNywwLDIsMSwxMywxMCwxMiw2LDAsOSw1LDExLDEwLDUsMCwxMywxNCw4LDcsMTAsMTEsMSwxMCwzLDQsMTUsMTMsNCwxLDIsNSwxMSw4LDYsMTIsNyw2LDEyLDksMCwzLDUsMiwxNCwxNSw5LDEwLDEzLDAsNyw5LDAsMTQsOSw2LDMsMyw0LDE1LDYsNSwx'@;
put 'MCwxLDIsMTMsOCwxMiw1LDcsMTQsMTEsMTIsNCwxMSwyLDE1LDgsMSwxMywxLDYsMTAsNCwxMyw5LDAsOCw2LDE1LDksMyw4LDAsNywxMSw0LDEsMTUsMiwxNCwxMiwzLDUsMTEsMTAsNSwxNCwyLDcsMTIsNywxMywxMyw4LDE0LDExLDMsNSwwLDYsNiwxNSw5LDAsMTAsMywxLDQsMiw3LDgs'@;
put 'Miw1LDEyLDExLDEsMTIsMTAsNCwxNCwxNSw5LDEwLDMsNiwxNSw5LDAsMCw2LDEyLDEwLDExLDEsNywxMywxMyw4LDE1LDksMSw0LDMsNSwxNCwxMSw1LDEyLDIsNyw4LDIsNCwxNCwyLDE0LDEyLDExLDQsMiwxLDEyLDcsNCwxMCw3LDExLDEzLDYsMSw4LDUsNSwwLDMsMTUsMTUsMTAsMTMs'@;
put 'MywwLDksMTQsOCw5LDYsNCwxMSwyLDgsMSwxMiwxMSw3LDEwLDEsMTMsMTQsNywyLDgsMTMsMTUsNiw5LDE1LDEyLDAsNSw5LDYsMTAsMyw0LDAsNSwxNCwzLDEyLDEwLDEsMTUsMTAsNCwxNSwyLDksNywyLDEyLDYsOSw4LDUsMCw2LDEzLDEsMywxMyw0LDE0LDE0LDAsNywxMSw1LDMsMTEs'@;
put 'OCw5LDQsMTQsMywxNSwyLDUsMTIsMiw5LDgsNSwxMiwxNSwzLDEwLDcsMTEsMCwxNCw0LDEsMTAsNywxLDYsMTMsMCwxMSw4LDYsMTMsNCwxMywxMSwwLDIsMTEsMTQsNywxNSw0LDAsOSw4LDEsMTMsMTAsMywxNCwxMiwzLDksNSw3LDEyLDUsMiwxMCwxNSw2LDgsMSw2LDEsNiw0LDExLDEx'@;
put 'LDEzLDEzLDgsMTIsMSwzLDQsNywxMCwxNCw3LDEwLDksMTUsNSw2LDAsOCwxNSwwLDE0LDUsMiw5LDMsMiwxMiwxMywxLDIsMTUsOCwxMyw0LDgsNiwxMCwxNSwzLDExLDcsMSw0LDEwLDEyLDksNSwzLDYsMTQsMTEsNSwwLDAsMTQsMTIsOSw3LDIsNywyLDExLDEsNCwxNCwxLDcsOSw0LDEy'@;
put 'LDEwLDE0LDgsMiwxMywwLDE1LDYsMTIsMTAsOSwxMywwLDE1LDMsMyw1LDUsNiw4LDExXTt6ZS5zdWJzdGl0dXRlPWZ1bmN0aW9uKGhlLEgpe2Zvcih2YXIgQj0wLEw9MDtMPDQ7TCsrKUI8PD00LEJ8PXNlWzY0KkwrKGhlPj4+MTgtNipMJjYzKV07Zm9yKEw9MDtMPDQ7TCsrKUI8PD00LEJ8'@;
put 'PXNlWzI1Nis2NCpMKyhIPj4+MTgtNipMJjYzKV07cmV0dXJuIEI+Pj4wfTt2YXIgaz1bMTYsMjUsMTIsMTEsMywyMCw0LDE1LDMxLDE3LDksNiwyNywxNCwxLDIyLDMwLDI0LDgsMTgsMCw1LDI5LDIzLDEzLDE5LDIsMjYsMTAsMjEsMjgsN107emUucGVybXV0ZT1mdW5jdGlvbihoZSl7Zm9y'@;
put 'KHZhciBIPTAsQj0wO0I8ay5sZW5ndGg7QisrKUg8PD0xLEh8PWhlPj4+a1tCXSYxO3JldHVybiBIPj4+MH0semUucGFkU3BsaXQ9ZnVuY3Rpb24oaGUsSCxCKXtmb3IodmFyIEw9aGUudG9TdHJpbmcoMik7TC5sZW5ndGg8SDspTD0iMCIrTDtmb3IodmFyIEs9W10sSj0wO0o8SDtKKz1CKUsu'@;
put 'cHVzaChMLnNsaWNlKEosSitCKSk7cmV0dXJuIEsuam9pbigiICIpfX0sNDUxNDQ6KFdlLHplLFQpPT57dmFyIHNlPVQoNzEwOTYpLGs9VCgyOTc5OSksdj1UKDk1NTgwKSxIPXtiaW5hcnk6ITAsaGV4OiEwLGJhc2U2NDohMH07emUuRGlmZmllSGVsbG1hbkdyb3VwPXplLmNyZWF0ZURpZmZp'@;
put 'ZUhlbGxtYW5Hcm91cD16ZS5nZXREaWZmaWVIZWxsbWFuPWZ1bmN0aW9uIGhlKEwpe3ZhciBLPW5ldyBCdWZmZXIoa1tMXS5wcmltZSwiaGV4IiksSj1uZXcgQnVmZmVyKGtbTF0uZ2VuLCJoZXgiKTtyZXR1cm4gbmV3IHYoSyxKKX0semUuY3JlYXRlRGlmZmllSGVsbG1hbj16ZS5EaWZmaWVI'@;
put 'ZWxsbWFuPWZ1bmN0aW9uIEIoTCxLLEosSSl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihLKXx8dm9pZCAwPT09SFtLXT9CKEwsImJpbmFyeSIsSyxKKTooSz1LfHwiYmluYXJ5IixJPUl8fCJiaW5hcnkiLEo9Snx8bmV3IEJ1ZmZlcihbMl0pLEJ1ZmZlci5pc0J1ZmZlcihKKXx8KEo9bmV3IEJ1'@;
put 'ZmZlcihKLEkpKSwibnVtYmVyIj09dHlwZW9mIEw/bmV3IHYoc2UoTCxKKSxKLCEwKTooQnVmZmVyLmlzQnVmZmVyKEwpfHwoTD1uZXcgQnVmZmVyKEwsSykpLG5ldyB2KEwsSiwhMCkpKX19LDk1NTgwOihXZSx6ZSxUKT0+e3ZhciBzZT1UKDg3MzAxKSx2PW5ldyhUKDQ4NjA2KSksaGU9bmV3'@;
put 'IHNlKDI0KSxIPW5ldyBzZSgxMSksQj1uZXcgc2UoMTApLEw9bmV3IHNlKDMpLEs9bmV3IHNlKDcpLEo9VCg3MTA5NiksST1UKDQ0MDE5KTtmdW5jdGlvbiBSKFcsVSl7cmV0dXJuIFU9VXx8InV0ZjgiLEJ1ZmZlci5pc0J1ZmZlcihXKXx8KFc9bmV3IEJ1ZmZlcihXLFUpKSx0aGlzLl9wdWI9'@;
put 'bmV3IHNlKFcpLHRoaXN9ZnVuY3Rpb24gRShXLFUpe3JldHVybiBVPVV8fCJ1dGY4IixCdWZmZXIuaXNCdWZmZXIoVyl8fChXPW5ldyBCdWZmZXIoVyxVKSksdGhpcy5fcHJpdj1uZXcgc2UoVyksdGhpc31XZS5leHBvcnRzPVY7dmFyIHo9e307ZnVuY3Rpb24gVihXLFUscSl7dGhpcy5zZXRH'@;
put 'ZW5lcmF0b3IoVSksdGhpcy5fX3ByaW1lPW5ldyBzZShXKSx0aGlzLl9wcmltZT1zZS5tb250KHRoaXMuX19wcmltZSksdGhpcy5fcHJpbWVMZW49Vy5sZW5ndGgsdGhpcy5fcHViPXZvaWQgMCx0aGlzLl9wcml2PXZvaWQgMCx0aGlzLl9wcmltZUNvZGU9dm9pZCAwLHE/KHRoaXMuc2V0UHVi'@;
put 'bGljS2V5PVIsdGhpcy5zZXRQcml2YXRlS2V5PUUpOnRoaXMuX3ByaW1lQ29kZT04fWZ1bmN0aW9uIEcoVyxVKXt2YXIgcT1uZXcgQnVmZmVyKFcudG9BcnJheSgpKTtyZXR1cm4gVT9xLnRvU3RyaW5nKFUpOnF9T2JqZWN0LmRlZmluZVByb3BlcnR5KFYucHJvdG90eXBlLCJ2ZXJpZnlFcnJv'@;
put 'ciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIm51bWJlciIhPXR5cGVvZiB0aGlzLl9wcmltZUNvZGUmJih0aGlzLl9wcmltZUNvZGU9ZnVuY3Rpb24gaihXLFUpe3ZhciBxPVUudG9TdHJpbmcoImhleCIpLHRlPVtxLFcudG9TdHJpbmcoMTYpXS5qb2luKCJfIik7aWYo'@;
put 'dGUgaW4geilyZXR1cm4gelt0ZV07dmFyIGllLG5lPTA7aWYoVy5pc0V2ZW4oKXx8IUouc2ltcGxlU2lldmV8fCFKLmZlcm1hdFRlc3QoVyl8fCF2LnRlc3QoVykpcmV0dXJuIG5lKz0xLHpbdGVdPW5lKz0iMDIiPT09cXx8IjA1Ij09PXE/ODo0LG5lO3N3aXRjaCh2LnRlc3QoVy5zaHJuKDEp'@;
put 'KXx8KG5lKz0yKSxxKXtjYXNlIjAyIjpXLm1vZChoZSkuY21wKEgpJiYobmUrPTgpO2JyZWFrO2Nhc2UiMDUiOihpZT1XLm1vZChCKSkuY21wKEwpJiZpZS5jbXAoSykmJihuZSs9OCk7YnJlYWs7ZGVmYXVsdDpuZSs9NH1yZXR1cm4gelt0ZV09bmUsbmV9KHRoaXMuX19wcmltZSx0aGlzLl9f'@;
put 'Z2VuKSksdGhpcy5fcHJpbWVDb2RlfX0pLFYucHJvdG90eXBlLmdlbmVyYXRlS2V5cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2fHwodGhpcy5fcHJpdj1uZXcgc2UoSSh0aGlzLl9wcmltZUxlbikpKSx0aGlzLl9wdWI9dGhpcy5fZ2VuLnRvUmVkKHRoaXMuX3ByaW1lKS5yZWRQb3co'@;
put 'dGhpcy5fcHJpdikuZnJvbVJlZCgpLHRoaXMuZ2V0UHVibGljS2V5KCl9LFYucHJvdG90eXBlLmNvbXB1dGVTZWNyZXQ9ZnVuY3Rpb24oVyl7dmFyIFU9KFc9KFc9bmV3IHNlKFcpKS50b1JlZCh0aGlzLl9wcmltZSkpLnJlZFBvdyh0aGlzLl9wcml2KS5mcm9tUmVkKCkscT1uZXcgQnVmZmVy'@;
put 'KFUudG9BcnJheSgpKSx0ZT10aGlzLmdldFByaW1lKCk7aWYocS5sZW5ndGg8dGUubGVuZ3RoKXt2YXIgbmU9bmV3IEJ1ZmZlcih0ZS5sZW5ndGgtcS5sZW5ndGgpO25lLmZpbGwoMCkscT1CdWZmZXIuY29uY2F0KFtuZSxxXSl9cmV0dXJuIHF9LFYucHJvdG90eXBlLmdldFB1YmxpY0tleT1m'@;
put 'dW5jdGlvbihVKXtyZXR1cm4gRyh0aGlzLl9wdWIsVSl9LFYucHJvdG90eXBlLmdldFByaXZhdGVLZXk9ZnVuY3Rpb24oVSl7cmV0dXJuIEcodGhpcy5fcHJpdixVKX0sVi5wcm90b3R5cGUuZ2V0UHJpbWU9ZnVuY3Rpb24oVyl7cmV0dXJuIEcodGhpcy5fX3ByaW1lLFcpfSxWLnByb3RvdHlw'@;
put 'ZS5nZXRHZW5lcmF0b3I9ZnVuY3Rpb24oVyl7cmV0dXJuIEcodGhpcy5fZ2VuLFcpfSxWLnByb3RvdHlwZS5zZXRHZW5lcmF0b3I9ZnVuY3Rpb24oVyxVKXtyZXR1cm4gVT1VfHwidXRmOCIsQnVmZmVyLmlzQnVmZmVyKFcpfHwoVz1uZXcgQnVmZmVyKFcsVSkpLHRoaXMuX19nZW49Vyx0aGlz'@;
put 'Ll9nZW49bmV3IHNlKFcpLHRoaXN9fSw3MTA5NjooV2UsemUsVCk9Pnt2YXIgc2U9VCg0NDAxOSk7V2UuZXhwb3J0cz1uZSxuZS5zaW1wbGVTaWV2ZT1xLG5lLmZlcm1hdFRlc3Q9dGU7dmFyIGs9VCg4NzMwMSksdj1uZXcgaygyNCksSD1uZXcoVCg0ODYwNikpLEI9bmV3IGsoMSksTD1uZXcg'@;
put 'aygyKSxLPW5ldyBrKDUpLFI9KG5ldyBrKDE2KSxuZXcgayg4KSxuZXcgaygxMCkpLEU9bmV3IGsoMyksaj0obmV3IGsoNyksbmV3IGsoMTEpKSxWPW5ldyBrKDQpLFc9KG5ldyBrKDEyKSxudWxsKTtmdW5jdGlvbiBxKGllKXtmb3IodmFyIGxlPWZ1bmN0aW9uIFUoKXtpZihudWxsIT09Vyly'@;
put 'ZXR1cm4gVzt2YXIgbGU9W107bGVbMF09Mjtmb3IodmFyIGRlPTEsdWU9Mzt1ZTwxMDQ4NTc2O3VlKz0yKXtmb3IodmFyIGNlPU1hdGguY2VpbChNYXRoLnNxcnQodWUpKSxZPTA7WTxkZSYmbGVbWV08PWNlJiZ1ZSVsZVtZXSE9MDtZKyspO2RlIT09WSYmbGVbWV08PWNlfHwobGVbZGUrK109'@;
put 'dWUpfXJldHVybiBXPWxlLGxlfSgpLGRlPTA7ZGU8bGUubGVuZ3RoO2RlKyspaWYoMD09PWllLm1vZG4obGVbZGVdKSlyZXR1cm4gMD09PWllLmNtcG4obGVbZGVdKTtyZXR1cm4hMH1mdW5jdGlvbiB0ZShpZSl7dmFyIGxlPWsubW9udChpZSk7cmV0dXJuIDA9PT1MLnRvUmVkKGxlKS5yZWRQ'@;
put 'b3coaWUuc3VibigxKSkuZnJvbVJlZCgpLmNtcG4oMSl9ZnVuY3Rpb24gbmUoaWUsbGUpe2lmKGllPDE2KXJldHVybiBuZXcgaygyPT09bGV8fDU9PT1sZT9bMTQwLDEyM106WzE0MCwzOV0pO2xlPW5ldyBrKGxlKTtmb3IodmFyIGRlLHVlOzspe2ZvcihkZT1uZXcgayhzZShNYXRoLmNlaWwo'@;
put 'aWUvOCkpKTtkZS5iaXRMZW5ndGgoKT5pZTspZGUuaXNocm4oMSk7aWYoZGUuaXNFdmVuKCkmJmRlLmlhZGQoQiksZGUudGVzdG4oMSl8fGRlLmlhZGQoTCksbGUuY21wKEwpKXtpZighbGUuY21wKEspKWZvcig7ZGUubW9kKFIpLmNtcChFKTspZGUuaWFkZChWKX1lbHNlIGZvcig7ZGUubW9k'@;
put 'KHYpLmNtcChqKTspZGUuaWFkZChWKTtpZihxKHVlPWRlLnNocm4oMSkpJiZxKGRlKSYmdGUodWUpJiZ0ZShkZSkmJkgudGVzdCh1ZSkmJkgudGVzdChkZSkpcmV0dXJuIGRlfX19LDg3MzAxOmZ1bmN0aW9uKFdlLHplLFQpeyFmdW5jdGlvbihzZSxrKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24g'@;
put 'dihZLGIpe2lmKCFZKXRocm93IG5ldyBFcnJvcihifHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIGhlKFksYil7WS5zdXBlcl89Yjt2YXIgeD1mdW5jdGlvbigpe307eC5wcm90b3R5cGU9Yi5wcm90b3R5cGUsWS5wcm90b3R5cGU9bmV3IHgsWS5wcm90b3R5cGUuY29uc3RydWN0b3I9'@;
put 'WX1mdW5jdGlvbiBIKFksYix4KXtpZihILmlzQk4oWSkpcmV0dXJuIFk7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PVkmJigoImxlIj09PWJ8fCJiZSI9PT1iKSYmKHg9YixiPTEwKSx0aGlzLl9pbml0KFl8fDAsYnx8'@;
put 'MTAseHx8ImJlIikpfXZhciBCOyJvYmplY3QiPT10eXBlb2Ygc2U/c2UuZXhwb3J0cz1IOmsuQk49SCxILkJOPUgsSC53b3JkU2l6ZT0yNjt0cnl7Qj10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6VCg3NzQ4KS5CdWZmZXJ9Y2F0Y2h7'@;
put 'fWZ1bmN0aW9uIEwoWSxiKXt2YXIgeD1ZLmNoYXJDb2RlQXQoYik7cmV0dXJuIHg+PTY1JiZ4PD03MD94LTU1Ong+PTk3JiZ4PD0xMDI/eC04Nzp4LTQ4JjE1fWZ1bmN0aW9uIEsoWSxiLHgpe3ZhciBOPUwoWSx4KTtyZXR1cm4geC0xPj1iJiYoTnw9TChZLHgtMSk8PDQpLE59ZnVuY3Rpb24g'@;
put 'SihZLGIseCxOKXtmb3IodmFyIEY9MCxnPU1hdGgubWluKFkubGVuZ3RoLHgpLEM9YjtDPGc7QysrKXt2YXIgTT1ZLmNoYXJDb2RlQXQoQyktNDg7Rio9TixGKz1NPj00OT9NLTQ5KzEwOk0+PTE3P00tMTcrMTA6TX1yZXR1cm4gRn1ILmlzQk49ZnVuY3Rpb24oYil7cmV0dXJuIGIgaW5zdGFu'@;
put 'Y2VvZiBIfHxudWxsIT09YiYmIm9iamVjdCI9PXR5cGVvZiBiJiZiLmNvbnN0cnVjdG9yLndvcmRTaXplPT09SC53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShiLndvcmRzKX0sSC5tYXg9ZnVuY3Rpb24oYix4KXtyZXR1cm4gYi5jbXAoeCk+MD9iOnh9LEgubWluPWZ1bmN0aW9uKGIseCl7cmV0'@;
put 'dXJuIGIuY21wKHgpPDA/Yjp4fSxILnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihiLHgsTil7aWYoIm51bWJlciI9PXR5cGVvZiBiKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKGIseCxOKTtpZigib2JqZWN0Ij09dHlwZW9mIGIpcmV0dXJuIHRoaXMuX2luaXRBcnJheShiLHgsTik7ImhleCI9'@;
put 'PT14JiYoeD0xNiksdih4PT09KDB8eCkmJng+PTImJng8PTM2KTt2YXIgRj0wOyItIj09PShiPWIudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoRisrLHRoaXMubmVnYXRpdmU9MSksRjxiLmxlbmd0aCYmKDE2PT09eD90aGlzLl9wYXJzZUhleChiLEYsTik6KHRoaXMuX3Bh'@;
put 'cnNlQmFzZShiLHgsRiksImxlIj09PU4mJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSx4LE4pKSl9LEgucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKGIseCxOKXtiPDAmJih0aGlzLm5lZ2F0aXZlPTEsYj0tYiksYjw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMm'@;
put 'Yl0sdGhpcy5sZW5ndGg9MSk6Yjw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZiLGIvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOih2KGI8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmYixiLzY3MTA4ODY0JjY3MTA4ODYzLDFd'@;
put 'LHRoaXMubGVuZ3RoPTMpLCJsZSI9PT1OJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCkseCxOKX0sSC5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihiLHgsTil7aWYodigibnVtYmVyIj09dHlwZW9mIGIubGVuZ3RoKSxiLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1b'@;
put 'MF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChiLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBGPTA7Rjx0aGlzLmxlbmd0aDtGKyspdGhpcy53b3Jkc1tGXT0wO3ZhciBnLEMsTT0wO2lmKCJiZSI9PT1OKWZvcihG'@;
put 'PWIubGVuZ3RoLTEsZz0wO0Y+PTA7Ri09Myl0aGlzLndvcmRzW2ddfD0oQz1iW0ZdfGJbRi0xXTw8OHxiW0YtMl08PDE2KTw8TSY2NzEwODg2Myx0aGlzLndvcmRzW2crMV09Qz4+PjI2LU0mNjcxMDg4NjMsKE0rPTI0KT49MjYmJihNLT0yNixnKyspO2Vsc2UgaWYoImxlIj09PU4pZm9yKEY9'@;
put 'MCxnPTA7RjxiLmxlbmd0aDtGKz0zKXRoaXMud29yZHNbZ118PShDPWJbRl18YltGKzFdPDw4fGJbRisyXTw8MTYpPDxNJjY3MTA4ODYzLHRoaXMud29yZHNbZysxXT1DPj4+MjYtTSY2NzEwODg2MywoTSs9MjQpPj0yNiYmKE0tPTI2LGcrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sSC5wcm90'@;
put 'b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKGIseCxOKXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKGIubGVuZ3RoLXgpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEY9MDtGPHRoaXMubGVuZ3RoO0YrKyl0aGlzLndvcmRzW0ZdPTA7dmFyIE0sZz0wLEM9MDtp'@;
put 'ZigiYmUiPT09Tilmb3IoRj1iLmxlbmd0aC0xO0Y+PXg7Ri09MilNPUsoYix4LEYpPDxnLHRoaXMud29yZHNbQ118PTY3MTA4ODYzJk0sZz49MTg/KGctPTE4LHRoaXMud29yZHNbQys9MV18PU0+Pj4yNik6Zys9ODtlbHNlIGZvcihGPShiLmxlbmd0aC14KSUyPT0wP3grMTp4O0Y8Yi5sZW5n'@;
put 'dGg7Ris9MilNPUsoYix4LEYpPDxnLHRoaXMud29yZHNbQ118PTY3MTA4ODYzJk0sZz49MTg/KGctPTE4LHRoaXMud29yZHNbQys9MV18PU0+Pj4yNik6Zys9ODt0aGlzLnN0cmlwKCl9LEgucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oYix4LE4pe3RoaXMud29yZHM9WzBdLHRoaXMu'@;
put 'bGVuZ3RoPTE7Zm9yKHZhciBGPTAsZz0xO2c8PTY3MTA4ODYzO2cqPXgpRisrO0YtLSxnPWcveHwwO2Zvcih2YXIgQz1iLmxlbmd0aC1OLE09QyVGLHk9TWF0aC5taW4oQyxDLU0pK04scD0wLFM9TjtTPHk7Uys9RilwPUooYixTLFMrRix4KSx0aGlzLmltdWxuKGcpLHRoaXMud29yZHNbMF0r'@;
put 'cDw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1wOnRoaXMuX2lhZGRuKHApO2lmKDAhPT1NKXt2YXIgUT0xO2ZvcihwPUooYixTLGIubGVuZ3RoLHgpLFM9MDtTPE07UysrKVEqPXg7dGhpcy5pbXVsbihRKSx0aGlzLndvcmRzWzBdK3A8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9cDp0aGlzLl9p'@;
put 'YWRkbihwKX10aGlzLnN0cmlwKCl9LEgucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYil7Yi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgeD0wO3g8dGhpcy5sZW5ndGg7eCsrKWIud29yZHNbeF09dGhpcy53b3Jkc1t4XTtiLmxlbmd0aD10aGlzLmxlbmd0aCxiLm5lZ2F0'@;
put 'aXZlPXRoaXMubmVnYXRpdmUsYi5yZWQ9dGhpcy5yZWR9LEgucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGI9bmV3IEgobnVsbCk7cmV0dXJuIHRoaXMuY29weShiKSxifSxILnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKGIpe2Zvcig7dGhpcy5sZW5ndGg8YjspdGhpcy53b3Jk'@;
put 'c1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxILnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LEgucHJvdG90eXBlLl9u'@;
put 'b3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSxILnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5n'@;
put 'KDE2KSsiPiJ9O3ZhciBJPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAw'@;
put 'IiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAw'@;
put 'MDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLFI9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUs'@;
put 'NSw1LDUsNV0sRT1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3'@;
put 'MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBqKFksYix4'@;
put 'KXt4Lm5lZ2F0aXZlPWIubmVnYXRpdmVeWS5uZWdhdGl2ZTt2YXIgTj1ZLmxlbmd0aCtiLmxlbmd0aHwwO3gubGVuZ3RoPU4sTj1OLTF8MDt2YXIgRj0wfFkud29yZHNbMF0sZz0wfGIud29yZHNbMF0sQz1GKmcseT1DLzY3MTA4ODY0fDA7eC53b3Jkc1swXT02NzEwODg2MyZDO2Zvcih2YXIg'@;
put 'cD0xO3A8TjtwKyspe2Zvcih2YXIgUz15Pj4+MjYsUT02NzEwODg2MyZ5LHJlPU1hdGgubWluKHAsYi5sZW5ndGgtMSksZmU9TWF0aC5tYXgoMCxwLVkubGVuZ3RoKzEpO2ZlPD1yZTtmZSsrKVMrPShDPShGPTB8WS53b3Jkc1twLWZlfDBdKSooZz0wfGIud29yZHNbZmVdKStRKS82NzEwODg2'@;
put 'NHwwLFE9NjcxMDg4NjMmQzt4LndvcmRzW3BdPTB8USx5PTB8U31yZXR1cm4gMCE9PXk/eC53b3Jkc1twXT0wfHk6eC5sZW5ndGgtLSx4LnN0cmlwKCl9SC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oYix4KXt2YXIgTjtpZih4PTB8eHx8MSwxNj09PShiPWJ8fDEwKXx8ImhleCI9PT1i'@;
put 'KXtOPSIiO2Zvcih2YXIgRj0wLGc9MCxDPTA7Qzx0aGlzLmxlbmd0aDtDKyspe3ZhciBNPXRoaXMud29yZHNbQ10seT0oMTY3NzcyMTUmKE08PEZ8ZykpLnRvU3RyaW5nKDE2KTtOPTAhPShnPU0+Pj4yNC1GJjE2Nzc3MjE1KXx8QyE9PXRoaXMubGVuZ3RoLTE/SVs2LXkubGVuZ3RoXSt5K046'@;
put 'eStOLChGKz0yKT49MjYmJihGLT0yNixDLS0pfWZvcigwIT09ZyYmKE49Zy50b1N0cmluZygxNikrTik7Ti5sZW5ndGgleCE9MDspTj0iMCIrTjtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihOPSItIitOKSxOfWlmKGI9PT0oMHxiKSYmYj49MiYmYjw9MzYpe3ZhciBwPVJbYl0sUz1FW2Jd'@;
put 'O049IiI7dmFyIFE9dGhpcy5jbG9uZSgpO2ZvcihRLm5lZ2F0aXZlPTA7IVEuaXNaZXJvKCk7KXt2YXIgcmU9US5tb2RuKFMpLnRvU3RyaW5nKGIpO049KFE9US5pZGl2bihTKSkuaXNaZXJvKCk/cmUrTjpJW3AtcmUubGVuZ3RoXStyZStOfWZvcih0aGlzLmlzWmVybygpJiYoTj0iMCIrTik7'@;
put 'Ti5sZW5ndGgleCE9MDspTj0iMCIrTjtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihOPSItIitOKSxOfXYoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sSC5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLndvcmRzWzBdO3JldHVybiAyPT09'@;
put 'dGhpcy5sZW5ndGg/Yis9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2IrPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZ2KCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3Jl'@;
put 'IHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tYjpifSxILnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LEgucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKGIseCl7cmV0dXJuIHYodHlwZW9mIEI8InUiKSx0aGlzLnRvQXJy'@;
put 'YXlMaWtlKEIsYix4KX0sSC5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihiLHgpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGIseCl9LEgucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKGIseCxOKXt2YXIgRj10aGlzLmJ5dGVMZW5ndGgoKSxnPU58fE1hdGgubWF4KDEs'@;
put 'Rik7dihGPD1nLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksdihnPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgeSxwLEM9ImxlIj09PXgsTT1uZXcgYihnKSxTPXRoaXMuY2xvbmUoKTtpZihDKXtmb3IocD0wOyFTLmlz'@;
put 'WmVybygpO3ArKyl5PVMuYW5kbG4oMjU1KSxTLml1c2hybig4KSxNW3BdPXk7Zm9yKDtwPGc7cCsrKU1bcF09MH1lbHNle2ZvcihwPTA7cDxnLUY7cCsrKU1bcF09MDtmb3IocD0wOyFTLmlzWmVybygpO3ArKyl5PVMuYW5kbG4oMjU1KSxTLml1c2hybig4KSxNW2ctcC0xXT15fXJldHVybiBN'@;
put 'fSxILnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oYil7cmV0dXJuIDMyLU1hdGguY2x6MzIoYil9OmZ1bmN0aW9uKGIpe3ZhciB4PWIsTj0wO3JldHVybiB4Pj00MDk2JiYoTis9MTMseD4+Pj0xMykseD49NjQmJihOKz03LHg+Pj49NykseD49OCYmKE4rPTQseD4+'@;
put 'Pj00KSx4Pj0yJiYoTis9Mix4Pj4+PTIpLE4reH0sSC5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGIpe2lmKDA9PT1iKXJldHVybiAyNjt2YXIgeD1iLE49MDtyZXR1cm4gODE5MSZ4fHwoTis9MTMseD4+Pj0xMyksMTI3Jnh8fChOKz03LHg+Pj49NyksMTUmeHx8KE4rPTQseD4+Pj00'@;
put 'KSwzJnh8fChOKz0yLHg+Pj49MiksMSZ4fHxOKyssTn0sSC5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIHg9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkreH0sSC5wcm90b3R5cGUuemVyb0JpdHM9'@;
put 'ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgYj0wLHg9MDt4PHRoaXMubGVuZ3RoO3grKyl7dmFyIE49dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1t4XSk7aWYoYis9TiwyNiE9PU4pYnJlYWt9cmV0dXJuIGJ9LEgucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LEgucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihiKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihiKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LEgucHJvdG90eXBlLmZyb21Ud29z'@;
put 'PWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnRlc3RuKGItMSk/dGhpcy5ub3RuKGIpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LEgucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxILnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sSC5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sSC5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihiKXtmb3IoO3RoaXMubGVuZ3RoPGIubGVuZ3RoOyl0aGlzLndvcmRz'@;
put 'W3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciB4PTA7eDxiLmxlbmd0aDt4KyspdGhpcy53b3Jkc1t4XT10aGlzLndvcmRzW3hdfGIud29yZHNbeF07cmV0dXJuIHRoaXMuc3RyaXAoKX0sSC5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKGIpe3JldHVybiB2KDA9PSh0aGlzLm5lZ2F0aXZlfGIubmVn'@;
put 'YXRpdmUpKSx0aGlzLml1b3IoYil9LEgucHJvdG90eXBlLm9yPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKGIpOmIuY2xvbmUoKS5pb3IodGhpcyl9LEgucHJvdG90eXBlLnVvcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+'@;
put 'Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoYik6Yi5jbG9uZSgpLml1b3IodGhpcyl9LEgucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKGIpe3ZhciB4O3g9dGhpcy5sZW5ndGg+Yi5sZW5ndGg/Yjp0aGlzO2Zvcih2YXIgTj0wO048eC5sZW5ndGg7TisrKXRoaXMud29yZHNbTl09dGhpcy53'@;
put 'b3Jkc1tOXSZiLndvcmRzW05dO3JldHVybiB0aGlzLmxlbmd0aD14Lmxlbmd0aCx0aGlzLnN0cmlwKCl9LEgucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oYil7cmV0dXJuIHYoMD09KHRoaXMubmVnYXRpdmV8Yi5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoYil9LEgucHJvdG90eXBlLmFuZD1mdW5j'@;
put 'dGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoYik6Yi5jbG9uZSgpLmlhbmQodGhpcyl9LEgucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChiKTpiLmNsb25l'@;
put 'KCkuaXVhbmQodGhpcyl9LEgucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKGIpe3ZhciB4LE47dGhpcy5sZW5ndGg+Yi5sZW5ndGg/KHg9dGhpcyxOPWIpOih4PWIsTj10aGlzKTtmb3IodmFyIEY9MDtGPE4ubGVuZ3RoO0YrKyl0aGlzLndvcmRzW0ZdPXgud29yZHNbRl1eTi53b3Jkc1tGXTtp'@;
put 'Zih0aGlzIT09eClmb3IoO0Y8eC5sZW5ndGg7RisrKXRoaXMud29yZHNbRl09eC53b3Jkc1tGXTtyZXR1cm4gdGhpcy5sZW5ndGg9eC5sZW5ndGgsdGhpcy5zdHJpcCgpfSxILnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKGIpe3JldHVybiB2KDA9PSh0aGlzLm5lZ2F0aXZlfGIubmVnYXRpdmUp'@;
put 'KSx0aGlzLml1eG9yKGIpfSxILnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKGIpOmIuY2xvbmUoKS5peG9yKHRoaXMpfSxILnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5i'@;
put 'Lmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IoYik6Yi5jbG9uZSgpLml1eG9yKHRoaXMpfSxILnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihiKXt2KCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFyIHg9MHxNYXRoLmNlaWwoYi8yNiksTj1iJTI2O3RoaXMuX2V4cGFuZCh4KSxOPjAmJngt'@;
put 'LTtmb3IodmFyIEY9MDtGPHg7RisrKXRoaXMud29yZHNbRl09NjcxMDg4NjMmfnRoaXMud29yZHNbRl07cmV0dXJuIE4+MCYmKHRoaXMud29yZHNbRl09fnRoaXMud29yZHNbRl0mNjcxMDg4NjM+PjI2LU4pLHRoaXMuc3RyaXAoKX0sSC5wcm90b3R5cGUubm90bj1mdW5jdGlvbihiKXtyZXR1'@;
put 'cm4gdGhpcy5jbG9uZSgpLmlub3RuKGIpfSxILnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKGIseCl7digibnVtYmVyIj09dHlwZW9mIGImJmI+PTApO3ZhciBOPWIvMjZ8MCxGPWIlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZChOKzEpLHRoaXMud29yZHNbTl09eD90aGlzLndvcmRzW05dfDE8PEY6'@;
put 'dGhpcy53b3Jkc1tOXSZ+KDE8PEYpLHRoaXMuc3RyaXAoKX0sSC5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihiKXt2YXIgeCxOLEY7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1iLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAseD10aGlzLmlzdWIoYiksdGhpcy5uZWdhdGl2ZV49'@;
put 'MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Yi5uZWdhdGl2ZSlyZXR1cm4gYi5uZWdhdGl2ZT0wLHg9dGhpcy5pc3ViKGIpLGIubmVnYXRpdmU9MSx4Ll9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPmIubGVuZ3RoPyhOPXRoaXMsRj1iKTooTj1iLEY9dGhpcyk7'@;
put 'Zm9yKHZhciBnPTAsQz0wO0M8Ri5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmKHg9KDB8Ti53b3Jkc1tDXSkrKDB8Ri53b3Jkc1tDXSkrZyksZz14Pj4+MjY7Zm9yKDswIT09ZyYmQzxOLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyYoeD0oMHxOLndvcmRzW0Nd'@;
put 'KStnKSxnPXg+Pj4yNjtpZih0aGlzLmxlbmd0aD1OLmxlbmd0aCwwIT09Zyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1nLHRoaXMubGVuZ3RoKys7ZWxzZSBpZihOIT09dGhpcylmb3IoO0M8Ti5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109Ti53b3Jkc1tDXTtyZXR1cm4gdGhpc30sSC5wcm90'@;
put 'b3R5cGUuYWRkPWZ1bmN0aW9uKGIpe3ZhciB4O3JldHVybiAwIT09Yi5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KGIubmVnYXRpdmU9MCx4PXRoaXMuc3ViKGIpLGIubmVnYXRpdmVePTEseCk6MD09PWIubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAs'@;
put 'eD1iLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEseCk6dGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQoYik6Yi5jbG9uZSgpLmlhZGQodGhpcyl9LEgucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oYil7aWYoMCE9PWIubmVnYXRpdmUpe2IubmVnYXRpdmU9MDt2YXIgeD10'@;
put 'aGlzLmlhZGQoYik7cmV0dXJuIGIubmVnYXRpdmU9MSx4Ll9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKGIpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBGLGcsTj10aGlzLmNtcChiKTtpZigwPT09'@;
put 'TilyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7Tj4wPyhGPXRoaXMsZz1iKTooRj1iLGc9dGhpcyk7Zm9yKHZhciBDPTAsTT0wO008Zy5sZW5ndGg7TSsrKUM9KHg9KDB8Ri53b3Jkc1tNXSktKDB8Zy53b3Jkc1tNXSkrQyk+PjI2LHRo'@;
put 'aXMud29yZHNbTV09NjcxMDg4NjMmeDtmb3IoOzAhPT1DJiZNPEYubGVuZ3RoO00rKylDPSh4PSgwfEYud29yZHNbTV0pK0MpPj4yNix0aGlzLndvcmRzW01dPTY3MTA4ODYzJng7aWYoMD09PUMmJk08Ri5sZW5ndGgmJkYhPT10aGlzKWZvcig7TTxGLmxlbmd0aDtNKyspdGhpcy53b3Jkc1tN'@;
put 'XT1GLndvcmRzW01dO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxNKSxGIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSxILnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKGIpfTt2YXIgVj1mdW5j'@;
put 'dGlvbihiLHgsTil7dmFyIHkscCxTLEY9Yi53b3JkcyxnPXgud29yZHMsQz1OLndvcmRzLE09MCxRPTB8RlswXSxyZT04MTkxJlEsZmU9UT4+PjEzLG1lPTB8RlsxXSxrZT04MTkxJm1lLFRlPW1lPj4+MTMsUGU9MHxGWzJdLEZlPTgxOTEmUGUsTmU9UGU+Pj4xMyxMZT0wfEZbM10sQmU9ODE5'@;
put 'MSZMZSxIZT1MZT4+PjEzLFFlPTB8Rls0XSxtdD04MTkxJlFlLEtlPVFlPj4+MTMsd2U9MHxGWzVdLEllPTgxOTEmd2UsT2U9d2U+Pj4xMyxldD0wfEZbNl0sbnQ9ODE5MSZldCxxZT1ldD4+PjEzLGh0PTB8Rls3XSxFZT04MTkxJmh0LERlPWh0Pj4+MTMsJGU9MHxGWzhdLGF0PTgxOTEmJGUs'@;
put 'Y3Q9JGU+Pj4xMyxPdD0wfEZbOV0sUHQ9ODE5MSZPdCxBdD1PdD4+PjEzLEp0PTB8Z1swXSxtbj04MTkxJkp0LE50PUp0Pj4+MTMsYm49MHxnWzFdLEduPTgxOTEmYm4sb249Ym4+Pj4xMywkbj0wfGdbMl0sTm49ODE5MSYkbixwdD0kbj4+PjEzLHBuPTB8Z1szXSxobj04MTkxJnBuLEN0PXBu'@;
put 'Pj4+MTMsZW49MHxnWzRdLF90PTgxOTEmZW4sVnQ9ZW4+Pj4xMyxfbj0wfGdbNV0sb3Q9ODE5MSZfbixJdD1fbj4+PjEzLG5uPTB8Z1s2XSxEdD04MTkxJm5uLHZ0PW5uPj4+MTMsR3Q9MHxnWzddLExuPTgxOTEmR3QsenQ9R3Q+Pj4xMyxNbj0wfGdbOF0sVG49ODE5MSZNbixzbj1Nbj4+PjEz'@;
put 'LEJuPTB8Z1s5XSxGbj04MTkxJkJuLHF0PUJuPj4+MTM7Ti5uZWdhdGl2ZT1iLm5lZ2F0aXZlXngubmVnYXRpdmUsTi5sZW5ndGg9MTk7dmFyIEhuPShNKyh5PU1hdGguaW11bChyZSxtbikpfDApKygoODE5MSYocD0ocD1NYXRoLmltdWwocmUsTnQpKStNYXRoLmltdWwoZmUsbW4pfDApKTw8'@;
put 'MTMpfDA7TT0oKFM9TWF0aC5pbXVsKGZlLE50KSkrKHA+Pj4xMyl8MCkrKEhuPj4+MjYpfDAsSG4mPTY3MTA4ODYzLHk9TWF0aC5pbXVsKGtlLG1uKSxwPShwPU1hdGguaW11bChrZSxOdCkpK01hdGguaW11bChUZSxtbil8MCxTPU1hdGguaW11bChUZSxOdCk7dmFyIGlpPShNKyh5PXkrTWF0'@;
put 'aC5pbXVsKHJlLEduKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwocmUsb24pfDApK01hdGguaW11bChmZSxHbil8MCkpPDwxMyl8MDtNPSgoUz1TK01hdGguaW11bChmZSxvbil8MCkrKHA+Pj4xMyl8MCkrKGlpPj4+MjYpfDAsaWkmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKEZlLG1u'@;
put 'KSxwPShwPU1hdGguaW11bChGZSxOdCkpK01hdGguaW11bChOZSxtbil8MCxTPU1hdGguaW11bChOZSxOdCkseT15K01hdGguaW11bChrZSxHbil8MCxwPShwPXArTWF0aC5pbXVsKGtlLG9uKXwwKStNYXRoLmltdWwoVGUsR24pfDAsUz1TK01hdGguaW11bChUZSxvbil8MDt2YXIgY249KE0r'@;
put 'KHk9eStNYXRoLmltdWwocmUsTm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChyZSxwdCl8MCkrTWF0aC5pbXVsKGZlLE5uKXwwKSk8PDEzKXwwO009KChTPVMrTWF0aC5pbXVsKGZlLHB0KXwwKSsocD4+PjEzKXwwKSsoY24+Pj4yNil8MCxjbiY9NjcxMDg4NjMseT1NYXRoLmlt'@;
put 'dWwoQmUsbW4pLHA9KHA9TWF0aC5pbXVsKEJlLE50KSkrTWF0aC5pbXVsKEhlLG1uKXwwLFM9TWF0aC5pbXVsKEhlLE50KSx5PXkrTWF0aC5pbXVsKEZlLEduKXwwLHA9KHA9cCtNYXRoLmltdWwoRmUsb24pfDApK01hdGguaW11bChOZSxHbil8MCxTPVMrTWF0aC5pbXVsKE5lLG9uKXwwLHk9'@;
put 'eStNYXRoLmltdWwoa2UsTm4pfDAscD0ocD1wK01hdGguaW11bChrZSxwdCl8MCkrTWF0aC5pbXVsKFRlLE5uKXwwLFM9UytNYXRoLmltdWwoVGUscHQpfDA7dmFyIGpuPShNKyh5PXkrTWF0aC5pbXVsKHJlLGhuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwocmUsQ3QpfDApK01h'@;
put 'dGguaW11bChmZSxobil8MCkpPDwxMyl8MDtNPSgoUz1TK01hdGguaW11bChmZSxDdCl8MCkrKHA+Pj4xMyl8MCkrKGpuPj4+MjYpfDAsam4mPTY3MTA4ODYzLHk9TWF0aC5pbXVsKG10LG1uKSxwPShwPU1hdGguaW11bChtdCxOdCkpK01hdGguaW11bChLZSxtbil8MCxTPU1hdGguaW11bChL'@;
put 'ZSxOdCkseT15K01hdGguaW11bChCZSxHbil8MCxwPShwPXArTWF0aC5pbXVsKEJlLG9uKXwwKStNYXRoLmltdWwoSGUsR24pfDAsUz1TK01hdGguaW11bChIZSxvbil8MCx5PXkrTWF0aC5pbXVsKEZlLE5uKXwwLHA9KHA9cCtNYXRoLmltdWwoRmUscHQpfDApK01hdGguaW11bChOZSxObil8'@;
put 'MCxTPVMrTWF0aC5pbXVsKE5lLHB0KXwwLHk9eStNYXRoLmltdWwoa2UsaG4pfDAscD0ocD1wK01hdGguaW11bChrZSxDdCl8MCkrTWF0aC5pbXVsKFRlLGhuKXwwLFM9UytNYXRoLmltdWwoVGUsQ3QpfDA7dmFyIFhyPShNKyh5PXkrTWF0aC5pbXVsKHJlLF90KXwwKXwwKSsoKDgxOTEmKHA9'@;
put 'KHA9cCtNYXRoLmltdWwocmUsVnQpfDApK01hdGguaW11bChmZSxfdCl8MCkpPDwxMyl8MDtNPSgoUz1TK01hdGguaW11bChmZSxWdCl8MCkrKHA+Pj4xMyl8MCkrKFhyPj4+MjYpfDAsWHImPTY3MTA4ODYzLHk9TWF0aC5pbXVsKEllLG1uKSxwPShwPU1hdGguaW11bChJZSxOdCkpK01hdGgu'@;
put 'aW11bChPZSxtbil8MCxTPU1hdGguaW11bChPZSxOdCkseT15K01hdGguaW11bChtdCxHbil8MCxwPShwPXArTWF0aC5pbXVsKG10LG9uKXwwKStNYXRoLmltdWwoS2UsR24pfDAsUz1TK01hdGguaW11bChLZSxvbil8MCx5PXkrTWF0aC5pbXVsKEJlLE5uKXwwLHA9KHA9cCtNYXRoLmltdWwo'@;
put 'QmUscHQpfDApK01hdGguaW11bChIZSxObil8MCxTPVMrTWF0aC5pbXVsKEhlLHB0KXwwLHk9eStNYXRoLmltdWwoRmUsaG4pfDAscD0ocD1wK01hdGguaW11bChGZSxDdCl8MCkrTWF0aC5pbXVsKE5lLGhuKXwwLFM9UytNYXRoLmltdWwoTmUsQ3QpfDAseT15K01hdGguaW11bChrZSxfdCl8'@;
put 'MCxwPShwPXArTWF0aC5pbXVsKGtlLFZ0KXwwKStNYXRoLmltdWwoVGUsX3QpfDAsUz1TK01hdGguaW11bChUZSxWdCl8MDt2YXIgdmk9KE0rKHk9eStNYXRoLmltdWwocmUsb3QpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChyZSxJdCl8MCkrTWF0aC5pbXVsKGZlLG90KXwwKSk8'@;
put 'PDEzKXwwO009KChTPVMrTWF0aC5pbXVsKGZlLEl0KXwwKSsocD4+PjEzKXwwKSsodmk+Pj4yNil8MCx2aSY9NjcxMDg4NjMseT1NYXRoLmltdWwobnQsbW4pLHA9KHA9TWF0aC5pbXVsKG50LE50KSkrTWF0aC5pbXVsKHFlLG1uKXwwLFM9TWF0aC5pbXVsKHFlLE50KSx5PXkrTWF0aC5pbXVs'@;
put 'KEllLEduKXwwLHA9KHA9cCtNYXRoLmltdWwoSWUsb24pfDApK01hdGguaW11bChPZSxHbil8MCxTPVMrTWF0aC5pbXVsKE9lLG9uKXwwLHk9eStNYXRoLmltdWwobXQsTm4pfDAscD0ocD1wK01hdGguaW11bChtdCxwdCl8MCkrTWF0aC5pbXVsKEtlLE5uKXwwLFM9UytNYXRoLmltdWwoS2Us'@;
put 'cHQpfDAseT15K01hdGguaW11bChCZSxobil8MCxwPShwPXArTWF0aC5pbXVsKEJlLEN0KXwwKStNYXRoLmltdWwoSGUsaG4pfDAsUz1TK01hdGguaW11bChIZSxDdCl8MCx5PXkrTWF0aC5pbXVsKEZlLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoRmUsVnQpfDApK01hdGguaW11bChOZSxfdCl8'@;
put 'MCxTPVMrTWF0aC5pbXVsKE5lLFZ0KXwwLHk9eStNYXRoLmltdWwoa2Usb3QpfDAscD0ocD1wK01hdGguaW11bChrZSxJdCl8MCkrTWF0aC5pbXVsKFRlLG90KXwwLFM9UytNYXRoLmltdWwoVGUsSXQpfDA7dmFyIEVyPShNKyh5PXkrTWF0aC5pbXVsKHJlLER0KXwwKXwwKSsoKDgxOTEmKHA9'@;
put 'KHA9cCtNYXRoLmltdWwocmUsdnQpfDApK01hdGguaW11bChmZSxEdCl8MCkpPDwxMyl8MDtNPSgoUz1TK01hdGguaW11bChmZSx2dCl8MCkrKHA+Pj4xMyl8MCkrKEVyPj4+MjYpfDAsRXImPTY3MTA4ODYzLHk9TWF0aC5pbXVsKEVlLG1uKSxwPShwPU1hdGguaW11bChFZSxOdCkpK01hdGgu'@;
put 'aW11bChEZSxtbil8MCxTPU1hdGguaW11bChEZSxOdCkseT15K01hdGguaW11bChudCxHbil8MCxwPShwPXArTWF0aC5pbXVsKG50LG9uKXwwKStNYXRoLmltdWwocWUsR24pfDAsUz1TK01hdGguaW11bChxZSxvbil8MCx5PXkrTWF0aC5pbXVsKEllLE5uKXwwLHA9KHA9cCtNYXRoLmltdWwo'@;
put 'SWUscHQpfDApK01hdGguaW11bChPZSxObil8MCxTPVMrTWF0aC5pbXVsKE9lLHB0KXwwLHk9eStNYXRoLmltdWwobXQsaG4pfDAscD0ocD1wK01hdGguaW11bChtdCxDdCl8MCkrTWF0aC5pbXVsKEtlLGhuKXwwLFM9UytNYXRoLmltdWwoS2UsQ3QpfDAseT15K01hdGguaW11bChCZSxfdCl8'@;
put 'MCxwPShwPXArTWF0aC5pbXVsKEJlLFZ0KXwwKStNYXRoLmltdWwoSGUsX3QpfDAsUz1TK01hdGguaW11bChIZSxWdCl8MCx5PXkrTWF0aC5pbXVsKEZlLG90KXwwLHA9KHA9cCtNYXRoLmltdWwoRmUsSXQpfDApK01hdGguaW11bChOZSxvdCl8MCxTPVMrTWF0aC5pbXVsKE5lLEl0KXwwLHk9'@;
put 'eStNYXRoLmltdWwoa2UsRHQpfDAscD0ocD1wK01hdGguaW11bChrZSx2dCl8MCkrTWF0aC5pbXVsKFRlLER0KXwwLFM9UytNYXRoLmltdWwoVGUsdnQpfDA7dmFyIFlpPShNKyh5PXkrTWF0aC5pbXVsKHJlLExuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwocmUsenQpfDApK01h'@;
put 'dGguaW11bChmZSxMbil8MCkpPDwxMyl8MDtNPSgoUz1TK01hdGguaW11bChmZSx6dCl8MCkrKHA+Pj4xMyl8MCkrKFlpPj4+MjYpfDAsWWkmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKGF0LG1uKSxwPShwPU1hdGguaW11bChhdCxOdCkpK01hdGguaW11bChjdCxtbil8MCxTPU1hdGguaW11bChj'@;
put 'dCxOdCkseT15K01hdGguaW11bChFZSxHbil8MCxwPShwPXArTWF0aC5pbXVsKEVlLG9uKXwwKStNYXRoLmltdWwoRGUsR24pfDAsUz1TK01hdGguaW11bChEZSxvbil8MCx5PXkrTWF0aC5pbXVsKG50LE5uKXwwLHA9KHA9cCtNYXRoLmltdWwobnQscHQpfDApK01hdGguaW11bChxZSxObil8'@;
put 'MCxTPVMrTWF0aC5pbXVsKHFlLHB0KXwwLHk9eStNYXRoLmltdWwoSWUsaG4pfDAscD0ocD1wK01hdGguaW11bChJZSxDdCl8MCkrTWF0aC5pbXVsKE9lLGhuKXwwLFM9UytNYXRoLmltdWwoT2UsQ3QpfDAseT15K01hdGguaW11bChtdCxfdCl8MCxwPShwPXArTWF0aC5pbXVsKG10LFZ0KXww'@;
put 'KStNYXRoLmltdWwoS2UsX3QpfDAsUz1TK01hdGguaW11bChLZSxWdCl8MCx5PXkrTWF0aC5pbXVsKEJlLG90KXwwLHA9KHA9cCtNYXRoLmltdWwoQmUsSXQpfDApK01hdGguaW11bChIZSxvdCl8MCxTPVMrTWF0aC5pbXVsKEhlLEl0KXwwLHk9eStNYXRoLmltdWwoRmUsRHQpfDAscD0ocD1w'@;
put 'K01hdGguaW11bChGZSx2dCl8MCkrTWF0aC5pbXVsKE5lLER0KXwwLFM9UytNYXRoLmltdWwoTmUsdnQpfDAseT15K01hdGguaW11bChrZSxMbil8MCxwPShwPXArTWF0aC5pbXVsKGtlLHp0KXwwKStNYXRoLmltdWwoVGUsTG4pfDAsUz1TK01hdGguaW11bChUZSx6dCl8MDt2YXIgSnI9KE0r'@;
put 'KHk9eStNYXRoLmltdWwocmUsVG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChyZSxzbil8MCkrTWF0aC5pbXVsKGZlLFRuKXwwKSk8PDEzKXwwO009KChTPVMrTWF0aC5pbXVsKGZlLHNuKXwwKSsocD4+PjEzKXwwKSsoSnI+Pj4yNil8MCxKciY9NjcxMDg4NjMseT1NYXRoLmlt'@;
put 'dWwoUHQsbW4pLHA9KHA9TWF0aC5pbXVsKFB0LE50KSkrTWF0aC5pbXVsKEF0LG1uKXwwLFM9TWF0aC5pbXVsKEF0LE50KSx5PXkrTWF0aC5pbXVsKGF0LEduKXwwLHA9KHA9cCtNYXRoLmltdWwoYXQsb24pfDApK01hdGguaW11bChjdCxHbil8MCxTPVMrTWF0aC5pbXVsKGN0LG9uKXwwLHk9'@;
put 'eStNYXRoLmltdWwoRWUsTm4pfDAscD0ocD1wK01hdGguaW11bChFZSxwdCl8MCkrTWF0aC5pbXVsKERlLE5uKXwwLFM9UytNYXRoLmltdWwoRGUscHQpfDAseT15K01hdGguaW11bChudCxobil8MCxwPShwPXArTWF0aC5pbXVsKG50LEN0KXwwKStNYXRoLmltdWwocWUsaG4pfDAsUz1TK01h'@;
put 'dGguaW11bChxZSxDdCl8MCx5PXkrTWF0aC5pbXVsKEllLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoSWUsVnQpfDApK01hdGguaW11bChPZSxfdCl8MCxTPVMrTWF0aC5pbXVsKE9lLFZ0KXwwLHk9eStNYXRoLmltdWwobXQsb3QpfDAscD0ocD1wK01hdGguaW11bChtdCxJdCl8MCkrTWF0aC5p'@;
put 'bXVsKEtlLG90KXwwLFM9UytNYXRoLmltdWwoS2UsSXQpfDAseT15K01hdGguaW11bChCZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKEJlLHZ0KXwwKStNYXRoLmltdWwoSGUsRHQpfDAsUz1TK01hdGguaW11bChIZSx2dCl8MCx5PXkrTWF0aC5pbXVsKEZlLExuKXwwLHA9KHA9cCtNYXRoLmlt'@;
put 'dWwoRmUsenQpfDApK01hdGguaW11bChOZSxMbil8MCxTPVMrTWF0aC5pbXVsKE5lLHp0KXwwLHk9eStNYXRoLmltdWwoa2UsVG4pfDAscD0ocD1wK01hdGguaW11bChrZSxzbil8MCkrTWF0aC5pbXVsKFRlLFRuKXwwLFM9UytNYXRoLmltdWwoVGUsc24pfDA7dmFyIGFvPShNKyh5PXkrTWF0'@;
put 'aC5pbXVsKHJlLEZuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwocmUscXQpfDApK01hdGguaW11bChmZSxGbil8MCkpPDwxMyl8MDtNPSgoUz1TK01hdGguaW11bChmZSxxdCl8MCkrKHA+Pj4xMyl8MCkrKGFvPj4+MjYpfDAsYW8mPTY3MTA4ODYzLHk9TWF0aC5pbXVsKFB0LEdu'@;
put 'KSxwPShwPU1hdGguaW11bChQdCxvbikpK01hdGguaW11bChBdCxHbil8MCxTPU1hdGguaW11bChBdCxvbikseT15K01hdGguaW11bChhdCxObil8MCxwPShwPXArTWF0aC5pbXVsKGF0LHB0KXwwKStNYXRoLmltdWwoY3QsTm4pfDAsUz1TK01hdGguaW11bChjdCxwdCl8MCx5PXkrTWF0aC5p'@;
put 'bXVsKEVlLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoRWUsQ3QpfDApK01hdGguaW11bChEZSxobil8MCxTPVMrTWF0aC5pbXVsKERlLEN0KXwwLHk9eStNYXRoLmltdWwobnQsX3QpfDAscD0ocD1wK01hdGguaW11bChudCxWdCl8MCkrTWF0aC5pbXVsKHFlLF90KXwwLFM9UytNYXRoLmltdWwo'@;
put 'cWUsVnQpfDAseT15K01hdGguaW11bChJZSxvdCl8MCxwPShwPXArTWF0aC5pbXVsKEllLEl0KXwwKStNYXRoLmltdWwoT2Usb3QpfDAsUz1TK01hdGguaW11bChPZSxJdCl8MCx5PXkrTWF0aC5pbXVsKG10LER0KXwwLHA9KHA9cCtNYXRoLmltdWwobXQsdnQpfDApK01hdGguaW11bChLZSxE'@;
put 'dCl8MCxTPVMrTWF0aC5pbXVsKEtlLHZ0KXwwLHk9eStNYXRoLmltdWwoQmUsTG4pfDAscD0ocD1wK01hdGguaW11bChCZSx6dCl8MCkrTWF0aC5pbXVsKEhlLExuKXwwLFM9UytNYXRoLmltdWwoSGUsenQpfDAseT15K01hdGguaW11bChGZSxUbil8MCxwPShwPXArTWF0aC5pbXVsKEZlLHNu'@;
put 'KXwwKStNYXRoLmltdWwoTmUsVG4pfDAsUz1TK01hdGguaW11bChOZSxzbil8MDt2YXIgQnI9KE0rKHk9eStNYXRoLmltdWwoa2UsRm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChrZSxxdCl8MCkrTWF0aC5pbXVsKFRlLEZuKXwwKSk8PDEzKXwwO009KChTPVMrTWF0aC5pbXVs'@;
put 'KFRlLHF0KXwwKSsocD4+PjEzKXwwKSsoQnI+Pj4yNil8MCxCciY9NjcxMDg4NjMseT1NYXRoLmltdWwoUHQsTm4pLHA9KHA9TWF0aC5pbXVsKFB0LHB0KSkrTWF0aC5pbXVsKEF0LE5uKXwwLFM9TWF0aC5pbXVsKEF0LHB0KSx5PXkrTWF0aC5pbXVsKGF0LGhuKXwwLHA9KHA9cCtNYXRoLmlt'@;
put 'dWwoYXQsQ3QpfDApK01hdGguaW11bChjdCxobil8MCxTPVMrTWF0aC5pbXVsKGN0LEN0KXwwLHk9eStNYXRoLmltdWwoRWUsX3QpfDAscD0ocD1wK01hdGguaW11bChFZSxWdCl8MCkrTWF0aC5pbXVsKERlLF90KXwwLFM9UytNYXRoLmltdWwoRGUsVnQpfDAseT15K01hdGguaW11bChudCxv'@;
put 'dCl8MCxwPShwPXArTWF0aC5pbXVsKG50LEl0KXwwKStNYXRoLmltdWwocWUsb3QpfDAsUz1TK01hdGguaW11bChxZSxJdCl8MCx5PXkrTWF0aC5pbXVsKEllLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoSWUsdnQpfDApK01hdGguaW11bChPZSxEdCl8MCxTPVMrTWF0aC5pbXVsKE9lLHZ0KXww'@;
put 'LHk9eStNYXRoLmltdWwobXQsTG4pfDAscD0ocD1wK01hdGguaW11bChtdCx6dCl8MCkrTWF0aC5pbXVsKEtlLExuKXwwLFM9UytNYXRoLmltdWwoS2UsenQpfDAseT15K01hdGguaW11bChCZSxUbil8MCxwPShwPXArTWF0aC5pbXVsKEJlLHNuKXwwKStNYXRoLmltdWwoSGUsVG4pfDAsUz1T'@;
put 'K01hdGguaW11bChIZSxzbil8MDt2YXIgSmk9KE0rKHk9eStNYXRoLmltdWwoRmUsRm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChGZSxxdCl8MCkrTWF0aC5pbXVsKE5lLEZuKXwwKSk8PDEzKXwwO009KChTPVMrTWF0aC5pbXVsKE5lLHF0KXwwKSsocD4+PjEzKXwwKSsoSmk+'@;
put 'Pj4yNil8MCxKaSY9NjcxMDg4NjMseT1NYXRoLmltdWwoUHQsaG4pLHA9KHA9TWF0aC5pbXVsKFB0LEN0KSkrTWF0aC5pbXVsKEF0LGhuKXwwLFM9TWF0aC5pbXVsKEF0LEN0KSx5PXkrTWF0aC5pbXVsKGF0LF90KXwwLHA9KHA9cCtNYXRoLmltdWwoYXQsVnQpfDApK01hdGguaW11bChjdCxf'@;
put 'dCl8MCxTPVMrTWF0aC5pbXVsKGN0LFZ0KXwwLHk9eStNYXRoLmltdWwoRWUsb3QpfDAscD0ocD1wK01hdGguaW11bChFZSxJdCl8MCkrTWF0aC5pbXVsKERlLG90KXwwLFM9UytNYXRoLmltdWwoRGUsSXQpfDAseT15K01hdGguaW11bChudCxEdCl8MCxwPShwPXArTWF0aC5pbXVsKG50LHZ0'@;
put 'KXwwKStNYXRoLmltdWwocWUsRHQpfDAsUz1TK01hdGguaW11bChxZSx2dCl8MCx5PXkrTWF0aC5pbXVsKEllLExuKXwwLHA9KHA9cCtNYXRoLmltdWwoSWUsenQpfDApK01hdGguaW11bChPZSxMbil8MCxTPVMrTWF0aC5pbXVsKE9lLHp0KXwwLHk9eStNYXRoLmltdWwobXQsVG4pfDAscD0o'@;
put 'cD1wK01hdGguaW11bChtdCxzbil8MCkrTWF0aC5pbXVsKEtlLFRuKXwwLFM9UytNYXRoLmltdWwoS2Usc24pfDA7dmFyIHRvPShNKyh5PXkrTWF0aC5pbXVsKEJlLEZuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoQmUscXQpfDApK01hdGguaW11bChIZSxGbil8MCkpPDwxMyl8'@;
put 'MDtNPSgoUz1TK01hdGguaW11bChIZSxxdCl8MCkrKHA+Pj4xMyl8MCkrKHRvPj4+MjYpfDAsdG8mPTY3MTA4ODYzLHk9TWF0aC5pbXVsKFB0LF90KSxwPShwPU1hdGguaW11bChQdCxWdCkpK01hdGguaW11bChBdCxfdCl8MCxTPU1hdGguaW11bChBdCxWdCkseT15K01hdGguaW11bChhdCxv'@;
put 'dCl8MCxwPShwPXArTWF0aC5pbXVsKGF0LEl0KXwwKStNYXRoLmltdWwoY3Qsb3QpfDAsUz1TK01hdGguaW11bChjdCxJdCl8MCx5PXkrTWF0aC5pbXVsKEVlLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoRWUsdnQpfDApK01hdGguaW11bChEZSxEdCl8MCxTPVMrTWF0aC5pbXVsKERlLHZ0KXww'@;
put 'LHk9eStNYXRoLmltdWwobnQsTG4pfDAscD0ocD1wK01hdGguaW11bChudCx6dCl8MCkrTWF0aC5pbXVsKHFlLExuKXwwLFM9UytNYXRoLmltdWwocWUsenQpfDAseT15K01hdGguaW11bChJZSxUbil8MCxwPShwPXArTWF0aC5pbXVsKEllLHNuKXwwKStNYXRoLmltdWwoT2UsVG4pfDAsUz1T'@;
put 'K01hdGguaW11bChPZSxzbil8MDt2YXIgY289KE0rKHk9eStNYXRoLmltdWwobXQsRm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChtdCxxdCl8MCkrTWF0aC5pbXVsKEtlLEZuKXwwKSk8PDEzKXwwO009KChTPVMrTWF0aC5pbXVsKEtlLHF0KXwwKSsocD4+PjEzKXwwKSsoY28+'@;
put 'Pj4yNil8MCxjbyY9NjcxMDg4NjMseT1NYXRoLmltdWwoUHQsb3QpLHA9KHA9TWF0aC5pbXVsKFB0LEl0KSkrTWF0aC5pbXVsKEF0LG90KXwwLFM9TWF0aC5pbXVsKEF0LEl0KSx5PXkrTWF0aC5pbXVsKGF0LER0KXwwLHA9KHA9cCtNYXRoLmltdWwoYXQsdnQpfDApK01hdGguaW11bChjdCxE'@;
put 'dCl8MCxTPVMrTWF0aC5pbXVsKGN0LHZ0KXwwLHk9eStNYXRoLmltdWwoRWUsTG4pfDAscD0ocD1wK01hdGguaW11bChFZSx6dCl8MCkrTWF0aC5pbXVsKERlLExuKXwwLFM9UytNYXRoLmltdWwoRGUsenQpfDAseT15K01hdGguaW11bChudCxUbil8MCxwPShwPXArTWF0aC5pbXVsKG50LHNu'@;
put 'KXwwKStNYXRoLmltdWwocWUsVG4pfDAsUz1TK01hdGguaW11bChxZSxzbil8MDt2YXIgbG89KE0rKHk9eStNYXRoLmltdWwoSWUsRm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChJZSxxdCl8MCkrTWF0aC5pbXVsKE9lLEZuKXwwKSk8PDEzKXwwO009KChTPVMrTWF0aC5pbXVs'@;
put 'KE9lLHF0KXwwKSsocD4+PjEzKXwwKSsobG8+Pj4yNil8MCxsbyY9NjcxMDg4NjMseT1NYXRoLmltdWwoUHQsRHQpLHA9KHA9TWF0aC5pbXVsKFB0LHZ0KSkrTWF0aC5pbXVsKEF0LER0KXwwLFM9TWF0aC5pbXVsKEF0LHZ0KSx5PXkrTWF0aC5pbXVsKGF0LExuKXwwLHA9KHA9cCtNYXRoLmlt'@;
put 'dWwoYXQsenQpfDApK01hdGguaW11bChjdCxMbil8MCxTPVMrTWF0aC5pbXVsKGN0LHp0KXwwLHk9eStNYXRoLmltdWwoRWUsVG4pfDAscD0ocD1wK01hdGguaW11bChFZSxzbil8MCkrTWF0aC5pbXVsKERlLFRuKXwwLFM9UytNYXRoLmltdWwoRGUsc24pfDA7dmFyIHNvPShNKyh5PXkrTWF0'@;
put 'aC5pbXVsKG50LEZuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobnQscXQpfDApK01hdGguaW11bChxZSxGbil8MCkpPDwxMyl8MDtNPSgoUz1TK01hdGguaW11bChxZSxxdCl8MCkrKHA+Pj4xMyl8MCkrKHNvPj4+MjYpfDAsc28mPTY3MTA4ODYzLHk9TWF0aC5pbXVsKFB0LExu'@;
put 'KSxwPShwPU1hdGguaW11bChQdCx6dCkpK01hdGguaW11bChBdCxMbil8MCxTPU1hdGguaW11bChBdCx6dCkseT15K01hdGguaW11bChhdCxUbil8MCxwPShwPXArTWF0aC5pbXVsKGF0LHNuKXwwKStNYXRoLmltdWwoY3QsVG4pfDAsUz1TK01hdGguaW11bChjdCxzbil8MDt2YXIgWGk9KE0r'@;
put 'KHk9eStNYXRoLmltdWwoRWUsRm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChFZSxxdCl8MCkrTWF0aC5pbXVsKERlLEZuKXwwKSk8PDEzKXwwO009KChTPVMrTWF0aC5pbXVsKERlLHF0KXwwKSsocD4+PjEzKXwwKSsoWGk+Pj4yNil8MCxYaSY9NjcxMDg4NjMseT1NYXRoLmlt'@;
put 'dWwoUHQsVG4pLHA9KHA9TWF0aC5pbXVsKFB0LHNuKSkrTWF0aC5pbXVsKEF0LFRuKXwwLFM9TWF0aC5pbXVsKEF0LHNuKTt2YXIgcG89KE0rKHk9eStNYXRoLmltdWwoYXQsRm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChhdCxxdCl8MCkrTWF0aC5pbXVsKGN0LEZuKXwwKSk8'@;
put 'PDEzKXwwO009KChTPVMrTWF0aC5pbXVsKGN0LHF0KXwwKSsocD4+PjEzKXwwKSsocG8+Pj4yNil8MCxwbyY9NjcxMDg4NjM7dmFyIF9yPShNKyh5PU1hdGguaW11bChQdCxGbikpfDApKygoODE5MSYocD0ocD1NYXRoLmltdWwoUHQscXQpKStNYXRoLmltdWwoQXQsRm4pfDApKTw8MTMpfDA7'@;
put 'cmV0dXJuIE09KChTPU1hdGguaW11bChBdCxxdCkpKyhwPj4+MTMpfDApKyhfcj4+PjI2KXwwLF9yJj02NzEwODg2MyxDWzBdPUhuLENbMV09aWksQ1syXT1jbixDWzNdPWpuLENbNF09WHIsQ1s1XT12aSxDWzZdPUVyLENbN109WWksQ1s4XT1KcixDWzldPWFvLENbMTBdPUJyLENbMTFdPUpp'@;
put 'LENbMTJdPXRvLENbMTNdPWNvLENbMTRdPWxvLENbMTVdPXNvLENbMTZdPVhpLENbMTddPXBvLENbMThdPV9yLDAhPT1NJiYoQ1sxOV09TSxOLmxlbmd0aCsrKSxOfTtmdW5jdGlvbiBXKFksYix4KXtyZXR1cm4obmV3IFUpLm11bHAoWSxiLHgpfWZ1bmN0aW9uIFUoWSxiKXt0aGlzLng9WSx0'@;
put 'aGlzLnk9Yn1NYXRoLmltdWx8fChWPWopLEgucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKGIseCl7dmFyIE4sRj10aGlzLmxlbmd0aCtiLmxlbmd0aDtyZXR1cm4gTj0xMD09PXRoaXMubGVuZ3RoJiYxMD09PWIubGVuZ3RoP1YodGhpcyxiLHgpOkY8NjM/aih0aGlzLGIseCk6RjwxMDI0P2Z1'@;
put 'bmN0aW9uIEcoWSxiLHgpe3gubmVnYXRpdmU9Yi5uZWdhdGl2ZV5ZLm5lZ2F0aXZlLHgubGVuZ3RoPVkubGVuZ3RoK2IubGVuZ3RoO2Zvcih2YXIgTj0wLEY9MCxnPTA7Zzx4Lmxlbmd0aC0xO2crKyl7dmFyIEM9RjtGPTA7Zm9yKHZhciBNPTY3MTA4ODYzJk4seT1NYXRoLm1pbihnLGIubGVu'@;
put 'Z3RoLTEpLHA9TWF0aC5tYXgoMCxnLVkubGVuZ3RoKzEpO3A8PXk7cCsrKXt2YXIgZmU9KDB8WS53b3Jkc1tnLXBdKSooMHxiLndvcmRzW3BdKSxtZT02NzEwODg2MyZmZTtNPTY3MTA4ODYzJihtZT1tZStNfDApLEYrPShDPShDPUMrKGZlLzY3MTA4ODY0fDApfDApKyhtZT4+PjI2KXwwKT4+'@;
put 'PjI2LEMmPTY3MTA4ODYzfXgud29yZHNbZ109TSxOPUMsQz1GfXJldHVybiAwIT09Tj94LndvcmRzW2ddPU46eC5sZW5ndGgtLSx4LnN0cmlwKCl9KHRoaXMsYix4KTpXKHRoaXMsYix4KSxOfSxVLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKGIpe2Zvcih2YXIgeD1uZXcgQXJyYXkoYiks'@;
put 'Tj1ILnByb3RvdHlwZS5fY291bnRCaXRzKGIpLTEsRj0wO0Y8YjtGKyspeFtGXT10aGlzLnJldkJpbihGLE4sYik7cmV0dXJuIHh9LFUucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihiLHgsTil7aWYoMD09PWJ8fGI9PT1OLTEpcmV0dXJuIGI7Zm9yKHZhciBGPTAsZz0wO2c8eDtnKyspRnw9'@;
put 'KDEmYik8PHgtZy0xLGI+Pj0xO3JldHVybiBGfSxVLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKGIseCxOLEYsZyxDKXtmb3IodmFyIE09MDtNPEM7TSsrKUZbTV09eFtiW01dXSxnW01dPU5bYltNXV19LFUucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihiLHgsTixGLGcsQyl7dGhp'@;
put 'cy5wZXJtdXRlKEMsYix4LE4sRixnKTtmb3IodmFyIE09MTtNPGc7TTw8PTEpZm9yKHZhciB5PU08PDEscD1NYXRoLmNvcygyKk1hdGguUEkveSksUz1NYXRoLnNpbigyKk1hdGguUEkveSksUT0wO1E8ZztRKz15KWZvcih2YXIgcmU9cCxmZT1TLG1lPTA7bWU8TTttZSsrKXt2YXIga2U9TltR'@;
put 'K21lXSxUZT1GW1ErbWVdLFBlPU5bUSttZStNXSxGZT1GW1ErbWUrTV0sTmU9cmUqUGUtZmUqRmU7RmU9cmUqRmUrZmUqUGUsTltRK21lXT1rZSsoUGU9TmUpLEZbUSttZV09VGUrRmUsTltRK21lK01dPWtlLVBlLEZbUSttZStNXT1UZS1GZSxtZSE9PXkmJihOZT1wKnJlLVMqZmUsZmU9cCpm'@;
put 'ZStTKnJlLHJlPU5lKX19LFUucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKGIseCl7dmFyIE49MXxNYXRoLm1heCh4LGIpLEY9MSZOLGc9MDtmb3IoTj1OLzJ8MDtOO04+Pj49MSlnKys7cmV0dXJuIDE8PGcrMStGfSxVLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oYix4LE4p'@;
put 'e2lmKCEoTjw9MSkpZm9yKHZhciBGPTA7RjxOLzI7RisrKXt2YXIgZz1iW0ZdO2JbRl09YltOLUYtMV0sYltOLUYtMV09ZyxnPXhbRl0seFtGXT0teFtOLUYtMV0seFtOLUYtMV09LWd9fSxVLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oYix4KXtmb3IodmFyIE49MCxGPTA7Rjx4'@;
put 'LzI7RisrKXt2YXIgZz04MTkyKk1hdGgucm91bmQoYlsyKkYrMV0veCkrTWF0aC5yb3VuZChiWzIqRl0veCkrTjtiW0ZdPTY3MTA4ODYzJmcsTj1nPDY3MTA4ODY0PzA6Zy82NzEwODg2NHwwfXJldHVybiBifSxVLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKGIseCxOLEYpe2Zvcih2'@;
put 'YXIgZz0wLEM9MDtDPHg7QysrKU5bMipDXT04MTkxJihnKz0wfGJbQ10pLE5bMipDKzFdPTgxOTEmKGc+Pj49MTMpLGc+Pj49MTM7Zm9yKEM9Mip4O0M8RjsrK0MpTltDXT0wO3YoMD09PWcpLHYoMD09KC04MTkyJmcpKX0sVS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihiKXtmb3IodmFyIHg9'@;
put 'bmV3IEFycmF5KGIpLE49MDtOPGI7TisrKXhbTl09MDtyZXR1cm4geH0sVS5wcm90b3R5cGUubXVscD1mdW5jdGlvbihiLHgsTil7dmFyIEY9Mip0aGlzLmd1ZXNzTGVuMTNiKGIubGVuZ3RoLHgubGVuZ3RoKSxnPXRoaXMubWFrZVJCVChGKSxDPXRoaXMuc3R1YihGKSxNPW5ldyBBcnJheShG'@;
put 'KSx5PW5ldyBBcnJheShGKSxwPW5ldyBBcnJheShGKSxTPW5ldyBBcnJheShGKSxRPW5ldyBBcnJheShGKSxyZT1uZXcgQXJyYXkoRiksZmU9Ti53b3JkcztmZS5sZW5ndGg9Rix0aGlzLmNvbnZlcnQxM2IoYi53b3JkcyxiLmxlbmd0aCxNLEYpLHRoaXMuY29udmVydDEzYih4LndvcmRzLHgu'@;
put 'bGVuZ3RoLFMsRiksdGhpcy50cmFuc2Zvcm0oTSxDLHkscCxGLGcpLHRoaXMudHJhbnNmb3JtKFMsQyxRLHJlLEYsZyk7Zm9yKHZhciBtZT0wO21lPEY7bWUrKyl7dmFyIGtlPXlbbWVdKlFbbWVdLXBbbWVdKnJlW21lXTtwW21lXT15W21lXSpyZVttZV0rcFttZV0qUVttZV0seVttZV09a2V9'@;
put 'cmV0dXJuIHRoaXMuY29uanVnYXRlKHkscCxGKSx0aGlzLnRyYW5zZm9ybSh5LHAsZmUsQyxGLGcpLHRoaXMuY29uanVnYXRlKGZlLEMsRiksdGhpcy5ub3JtYWxpemUxM2IoZmUsRiksTi5uZWdhdGl2ZT1iLm5lZ2F0aXZlXngubmVnYXRpdmUsTi5sZW5ndGg9Yi5sZW5ndGgreC5sZW5ndGgs'@;
put 'Ti5zdHJpcCgpfSxILnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oYil7dmFyIHg9bmV3IEgobnVsbCk7cmV0dXJuIHgud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2IubGVuZ3RoKSx0aGlzLm11bFRvKGIseCl9LEgucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oYil7dmFyIHg9bmV3IEgobnVs'@;
put 'bCk7cmV0dXJuIHgud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2IubGVuZ3RoKSxXKHRoaXMsYix4KX0sSC5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKGIsdGhpcyl9LEgucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGIpe3YoIm51bWJl'@;
put 'ciI9PXR5cGVvZiBiKSx2KGI8NjcxMDg4NjQpO2Zvcih2YXIgeD0wLE49MDtOPHRoaXMubGVuZ3RoO04rKyl7dmFyIEY9KDB8dGhpcy53b3Jkc1tOXSkqYixnPSg2NzEwODg2MyZGKSsoNjcxMDg4NjMmeCk7eD4+PTI2LHgrPUYvNjcxMDg4NjR8MCx4Kz1nPj4+MjYsdGhpcy53b3Jkc1tOXT02'@;
put 'NzEwODg2MyZnfXJldHVybiAwIT09eCYmKHRoaXMud29yZHNbTl09eCx0aGlzLmxlbmd0aCsrKSx0aGlzfSxILnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oYil9LEgucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0'@;
put 'aGlzKX0sSC5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sSC5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGIpe3ZhciB4PWZ1bmN0aW9uIHooWSl7Zm9yKHZhciBiPW5ldyBBcnJheShZLmJpdExlbmd0aCgpKSx4PTA7eDxiLmxlbmd0aDt4'@;
put 'Kyspe3ZhciBGPXglMjY7Ylt4XT0oWS53b3Jkc1t4LzI2fDBdJjE8PEYpPj4+Rn1yZXR1cm4gYn0oYik7aWYoMD09PXgubGVuZ3RoKXJldHVybiBuZXcgSCgxKTtmb3IodmFyIE49dGhpcyxGPTA7Rjx4Lmxlbmd0aCYmMD09PXhbRl07RisrLE49Ti5zcXIoKSk7aWYoKytGPHgubGVuZ3RoKWZv'@;
put 'cih2YXIgZz1OLnNxcigpO0Y8eC5sZW5ndGg7RisrLGc9Zy5zcXIoKSkwIT09eFtGXSYmKE49Ti5tdWwoZykpO3JldHVybiBOfSxILnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oYil7digibnVtYmVyIj09dHlwZW9mIGImJmI+PTApO3ZhciBnLHg9YiUyNixOPShiLXgpLzI2LEY9NjcxMDg4'@;
put 'NjM+Pj4yNi14PDwyNi14O2lmKDAhPT14KXt2YXIgQz0wO2ZvcihnPTA7Zzx0aGlzLmxlbmd0aDtnKyspe3ZhciBNPXRoaXMud29yZHNbZ10mRjt0aGlzLndvcmRzW2ddPSgwfHRoaXMud29yZHNbZ10pLU08PHh8QyxDPU0+Pj4yNi14fUMmJih0aGlzLndvcmRzW2ddPUMsdGhpcy5sZW5ndGgr'@;
put 'Kyl9aWYoMCE9PU4pe2ZvcihnPXRoaXMubGVuZ3RoLTE7Zz49MDtnLS0pdGhpcy53b3Jkc1tnK05dPXRoaXMud29yZHNbZ107Zm9yKGc9MDtnPE47ZysrKXRoaXMud29yZHNbZ109MDt0aGlzLmxlbmd0aCs9Tn1yZXR1cm4gdGhpcy5zdHJpcCgpfSxILnByb3RvdHlwZS5pc2hsbj1mdW5jdGlv'@;
put 'bihiKXtyZXR1cm4gdigwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oYil9LEgucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihiLHgsTil7dmFyIEY7digibnVtYmVyIj09dHlwZW9mIGImJmI+PTApLEY9eD8oeC14JTI2KS8yNjowO3ZhciBnPWIlMjYsQz1NYXRoLm1pbigoYi1nKS8y'@;
put 'Nix0aGlzLmxlbmd0aCksTT02NzEwODg2M142NzEwODg2Mz4+Pmc8PGcseT1OO2lmKEYtPUMsRj1NYXRoLm1heCgwLEYpLHkpe2Zvcih2YXIgcD0wO3A8QztwKyspeS53b3Jkc1twXT10aGlzLndvcmRzW3BdO3kubGVuZ3RoPUN9aWYoMCE9PUMpaWYodGhpcy5sZW5ndGg+Qylmb3IodGhpcy5s'@;
put 'ZW5ndGgtPUMscD0wO3A8dGhpcy5sZW5ndGg7cCsrKXRoaXMud29yZHNbcF09dGhpcy53b3Jkc1twK0NdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIFM9MDtmb3IocD10aGlzLmxlbmd0aC0xO3A+PTAmJigwIT09U3x8cD49Rik7cC0tKXt2YXIgUT0wfHRoaXMud29y'@;
put 'ZHNbcF07dGhpcy53b3Jkc1twXT1TPDwyNi1nfFE+Pj5nLFM9USZNfXJldHVybiB5JiYwIT09UyYmKHkud29yZHNbeS5sZW5ndGgrK109UyksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sSC5wcm90b3R5cGUuaXNocm49ZnVu'@;
put 'Y3Rpb24oYix4LE4pe3JldHVybiB2KDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihiLHgsTil9LEgucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihiKX0sSC5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xv'@;
put 'bmUoKS5pdXNobG4oYil9LEgucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihiKX0sSC5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oYil9LEgucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKGIp'@;
put 'e3YoIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgeD1iJTI2LE49KGIteCkvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9Tnx8ISh0aGlzLndvcmRzW05dJjE8PHgpKX0sSC5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKGIpe3YoIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgeD1i'@;
put 'JTI2LE49KGIteCkvMjY7cmV0dXJuIHYoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD1OP3RoaXM6KDAhPT14JiZOKyssdGhpcy5sZW5ndGg9TWF0aC5taW4oTix0aGlzLmxlbmd0aCksMCE9PXgmJih0aGlz'@;
put 'LndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+Png8PHgpLHRoaXMuc3RyaXAoKSl9LEgucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGIpfSxILnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihiKXtyZXR1cm4gdigi'@;
put 'bnVtYmVyIj09dHlwZW9mIGIpLHYoYjw2NzEwODg2NCksYjwwP3RoaXMuaXN1Ym4oLWIpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8Yj8odGhpcy53b3Jkc1swXT1iLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToo'@;
put 'dGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oYiksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGIpfSxILnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oYil7dGhpcy53b3Jkc1swXSs9Yjtmb3IodmFyIHg9MDt4PHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW3hdPj02NzEwODg2'@;
put 'NDt4KyspdGhpcy53b3Jkc1t4XS09NjcxMDg4NjQseD09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1t4KzFdPTE6dGhpcy53b3Jkc1t4KzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLHgrMSksdGhpc30sSC5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oYil7'@;
put 'aWYodigibnVtYmVyIj09dHlwZW9mIGIpLHYoYjw2NzEwODg2NCksYjwwKXJldHVybiB0aGlzLmlhZGRuKC1iKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4oYiksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09Yiwx'@;
put 'PT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgeD0wO3g8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbeF08MDt4KyspdGhpcy53b3Jkc1t4XSs9NjcxMDg4NjQsdGhpcy53b3Jkc1t4'@;
put 'KzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LEgucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihiKX0sSC5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKGIpfSxILnByb3RvdHlwZS5pYWJzPWZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxILnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sSC5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKGIseCxOKXt2YXIgZzt0aGlzLl9leHBhbmQoYi5sZW5ndGgrTik7'@;
put 'dmFyIEMsTT0wO2ZvcihnPTA7ZzxiLmxlbmd0aDtnKyspe0M9KDB8dGhpcy53b3Jkc1tnK05dKStNO3ZhciB5PSgwfGIud29yZHNbZ10pKng7TT0oKEMtPTY3MTA4ODYzJnkpPj4yNiktKHkvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tnK05dPTY3MTA4ODYzJkN9Zm9yKDtnPHRoaXMubGVuZ3Ro'@;
put 'LU47ZysrKU09KEM9KDB8dGhpcy53b3Jkc1tnK05dKStNKT4+MjYsdGhpcy53b3Jkc1tnK05dPTY3MTA4ODYzJkM7aWYoMD09PU0pcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IodigtMT09PU0pLE09MCxnPTA7Zzx0aGlzLmxlbmd0aDtnKyspTT0oQz0tKDB8dGhpcy53b3Jkc1tnXSkrTSk+PjI2'@;
put 'LHRoaXMud29yZHNbZ109NjcxMDg4NjMmQztyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sSC5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oYix4KXt2YXIgTixGPXRoaXMuY2xvbmUoKSxnPWIsQz0wfGcud29yZHNbZy5sZW5ndGgtMV07MCE9KE49MjYtdGhpcy5fY291'@;
put 'bnRCaXRzKEMpKSYmKGc9Zy51c2hsbihOKSxGLml1c2hsbihOKSxDPTB8Zy53b3Jkc1tnLmxlbmd0aC0xXSk7dmFyIHAseT1GLmxlbmd0aC1nLmxlbmd0aDtpZigibW9kIiE9PXgpeyhwPW5ldyBIKG51bGwpKS5sZW5ndGg9eSsxLHAud29yZHM9bmV3IEFycmF5KHAubGVuZ3RoKTtmb3IodmFy'@;
put 'IFM9MDtTPHAubGVuZ3RoO1MrKylwLndvcmRzW1NdPTB9dmFyIFE9Ri5jbG9uZSgpLl9pc2hsbnN1Ym11bChnLDEseSk7MD09PVEubmVnYXRpdmUmJihGPVEscCYmKHAud29yZHNbeV09MSkpO2Zvcih2YXIgcmU9eS0xO3JlPj0wO3JlLS0pe3ZhciBmZT02NzEwODg2NCooMHxGLndvcmRzW2cu'@;
put 'bGVuZ3RoK3JlXSkrKDB8Ri53b3Jkc1tnLmxlbmd0aCtyZS0xXSk7Zm9yKGZlPU1hdGgubWluKGZlL0N8MCw2NzEwODg2MyksRi5faXNobG5zdWJtdWwoZyxmZSxyZSk7MCE9PUYubmVnYXRpdmU7KWZlLS0sRi5uZWdhdGl2ZT0wLEYuX2lzaGxuc3VibXVsKGcsMSxyZSksRi5pc1plcm8oKXx8'@;
put 'KEYubmVnYXRpdmVePTEpO3AmJihwLndvcmRzW3JlXT1mZSl9cmV0dXJuIHAmJnAuc3RyaXAoKSxGLnN0cmlwKCksImRpdiIhPT14JiYwIT09TiYmRi5pdXNocm4oTikse2RpdjpwfHxudWxsLG1vZDpGfX0sSC5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGIseCxOKXtyZXR1cm4gdighYi5p'@;
put 'c1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyBIKDApLG1vZDpuZXcgSCgwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1iLm5lZ2F0aXZlPyhDPXRoaXMubmVnKCkuZGl2bW9kKGIseCksIm1vZCIhPT14JiYoRj1DLmRpdi5uZWcoKSksImRpdiIhPT14JiYoZz1DLm1vZC5uZWcoKSxO'@;
put 'JiYwIT09Zy5uZWdhdGl2ZSYmZy5pYWRkKGIpKSx7ZGl2OkYsbW9kOmd9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWIubmVnYXRpdmU/KEM9dGhpcy5kaXZtb2QoYi5uZWcoKSx4KSwibW9kIiE9PXgmJihGPUMuZGl2Lm5lZygpKSx7ZGl2OkYsbW9kOkMubW9kfSk6dGhpcy5uZWdhdGl2ZSZi'@;
put 'Lm5lZ2F0aXZlPyhDPXRoaXMubmVnKCkuZGl2bW9kKGIubmVnKCkseCksImRpdiIhPT14JiYoZz1DLm1vZC5uZWcoKSxOJiYwIT09Zy5uZWdhdGl2ZSYmZy5pc3ViKGIpKSx7ZGl2OkMuZGl2LG1vZDpnfSk6Yi5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGIpPDA/e2RpdjpuZXcgSCgw'@;
put 'KSxtb2Q6dGhpc306MT09PWIubGVuZ3RoPyJkaXYiPT09eD97ZGl2OnRoaXMuZGl2bihiLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT14P3tkaXY6bnVsbCxtb2Q6bmV3IEgodGhpcy5tb2RuKGIud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oYi53b3Jkc1swXSksbW9kOm5ldyBIKHRo'@;
put 'aXMubW9kbihiLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoYix4KTt2YXIgRixnLEN9LEgucHJvdG90eXBlLmRpdj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5kaXZtb2QoYiwiZGl2IiwhMSkuZGl2fSxILnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuZGl2bW9kKGIs'@;
put 'Im1vZCIsITEpLm1vZH0sSC5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5kaXZtb2QoYiwibW9kIiwhMCkubW9kfSxILnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihiKXt2YXIgeD10aGlzLmRpdm1vZChiKTtpZih4Lm1vZC5pc1plcm8oKSlyZXR1cm4geC5kaXY7'@;
put 'dmFyIE49MCE9PXguZGl2Lm5lZ2F0aXZlP3gubW9kLmlzdWIoYik6eC5tb2QsRj1iLnVzaHJuKDEpLGc9Yi5hbmRsbigxKSxDPU4uY21wKEYpO3JldHVybiBDPDB8fDE9PT1nJiYwPT09Qz94LmRpdjowIT09eC5kaXYubmVnYXRpdmU/eC5kaXYuaXN1Ym4oMSk6eC5kaXYuaWFkZG4oMSl9LEgu'@;
put 'cHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oYil7dihiPD02NzEwODg2Myk7Zm9yKHZhciB4PSgxPDwyNiklYixOPTAsRj10aGlzLmxlbmd0aC0xO0Y+PTA7Ri0tKU49KHgqTisoMHx0aGlzLndvcmRzW0ZdKSklYjtyZXR1cm4gTn0sSC5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24oYil7dihiPD02'@;
put 'NzEwODg2Myk7Zm9yKHZhciB4PTAsTj10aGlzLmxlbmd0aC0xO04+PTA7Ti0tKXt2YXIgRj0oMHx0aGlzLndvcmRzW05dKSs2NzEwODg2NCp4O3RoaXMud29yZHNbTl09Ri9ifDAseD1GJWJ9cmV0dXJuIHRoaXMuc3RyaXAoKX0sSC5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihiKXtyZXR1cm4g'@;
put 'dGhpcy5jbG9uZSgpLmlkaXZuKGIpfSxILnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKGIpe3YoMD09PWIubmVnYXRpdmUpLHYoIWIuaXNaZXJvKCkpO3ZhciB4PXRoaXMsTj1iLmNsb25lKCk7eD0wIT09eC5uZWdhdGl2ZT94LnVtb2QoYik6eC5jbG9uZSgpO2Zvcih2YXIgRj1uZXcgSCgxKSxn'@;
put 'PW5ldyBIKDApLEM9bmV3IEgoMCksTT1uZXcgSCgxKSx5PTA7eC5pc0V2ZW4oKSYmTi5pc0V2ZW4oKTspeC5pdXNocm4oMSksTi5pdXNocm4oMSksKyt5O2Zvcih2YXIgcD1OLmNsb25lKCksUz14LmNsb25lKCk7IXguaXNaZXJvKCk7KXtmb3IodmFyIFE9MCxyZT0xOyEoeC53b3Jkc1swXSZy'@;
put 'ZSkmJlE8MjY7KytRLHJlPDw9MSk7aWYoUT4wKWZvcih4Lml1c2hybihRKTtRLS0gPjA7KShGLmlzT2RkKCl8fGcuaXNPZGQoKSkmJihGLmlhZGQocCksZy5pc3ViKFMpKSxGLml1c2hybigxKSxnLml1c2hybigxKTtmb3IodmFyIGZlPTAsbWU9MTshKE4ud29yZHNbMF0mbWUpJiZmZTwyNjsr'@;
put 'K2ZlLG1lPDw9MSk7aWYoZmU+MClmb3IoTi5pdXNocm4oZmUpO2ZlLS0gPjA7KShDLmlzT2RkKCl8fE0uaXNPZGQoKSkmJihDLmlhZGQocCksTS5pc3ViKFMpKSxDLml1c2hybigxKSxNLml1c2hybigxKTt4LmNtcChOKT49MD8oeC5pc3ViKE4pLEYuaXN1YihDKSxnLmlzdWIoTSkpOihOLmlz'@;
put 'dWIoeCksQy5pc3ViKEYpLE0uaXN1YihnKSl9cmV0dXJue2E6QyxiOk0sZ2NkOk4uaXVzaGxuKHkpfX0sSC5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKGIpe3YoMD09PWIubmVnYXRpdmUpLHYoIWIuaXNaZXJvKCkpO3ZhciBRLHg9dGhpcyxOPWIuY2xvbmUoKTt4PTAhPT14Lm5lZ2F0aXZl'@;
put 'P3gudW1vZChiKTp4LmNsb25lKCk7Zm9yKHZhciBGPW5ldyBIKDEpLGc9bmV3IEgoMCksQz1OLmNsb25lKCk7eC5jbXBuKDEpPjAmJk4uY21wbigxKT4wOyl7Zm9yKHZhciBNPTAseT0xOyEoeC53b3Jkc1swXSZ5KSYmTTwyNjsrK00seTw8PTEpO2lmKE0+MClmb3IoeC5pdXNocm4oTSk7TS0t'@;
put 'ID4wOylGLmlzT2RkKCkmJkYuaWFkZChDKSxGLml1c2hybigxKTtmb3IodmFyIHA9MCxTPTE7IShOLndvcmRzWzBdJlMpJiZwPDI2OysrcCxTPDw9MSk7aWYocD4wKWZvcihOLml1c2hybihwKTtwLS0gPjA7KWcuaXNPZGQoKSYmZy5pYWRkKEMpLGcuaXVzaHJuKDEpO3guY21wKE4pPj0wPyh4'@;
put 'LmlzdWIoTiksRi5pc3ViKGcpKTooTi5pc3ViKHgpLGcuaXN1YihGKSl9cmV0dXJuKFE9MD09PXguY21wbigxKT9GOmcpLmNtcG4oMCk8MCYmUS5pYWRkKGIpLFF9LEgucHJvdG90eXBlLmdjZD1mdW5jdGlvbihiKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBiLmFicygpO2lmKGIuaXNaZXJv'@;
put 'KCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIHg9dGhpcy5jbG9uZSgpLE49Yi5jbG9uZSgpO3gubmVnYXRpdmU9MCxOLm5lZ2F0aXZlPTA7Zm9yKHZhciBGPTA7eC5pc0V2ZW4oKSYmTi5pc0V2ZW4oKTtGKyspeC5pdXNocm4oMSksTi5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO3guaXNFdmVuKCk7'@;
put 'KXguaXVzaHJuKDEpO2Zvcig7Ti5pc0V2ZW4oKTspTi5pdXNocm4oMSk7dmFyIGc9eC5jbXAoTik7aWYoZzwwKXt2YXIgQz14O3g9TixOPUN9ZWxzZSBpZigwPT09Z3x8MD09PU4uY21wbigxKSlicmVhazt4LmlzdWIoTil9cmV0dXJuIE4uaXVzaGxuKEYpfSxILnByb3RvdHlwZS5pbnZtPWZ1'@;
put 'bmN0aW9uKGIpe3JldHVybiB0aGlzLmVnY2QoYikuYS51bW9kKGIpfSxILnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09KDEmdGhpcy53b3Jkc1swXSl9LEgucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PSgxJnRoaXMud29yZHNbMF0pfSxILnByb3Rv'@;
put 'dHlwZS5hbmRsbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZifSxILnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihiKXt2KCJudW1iZXIiPT10eXBlb2YgYik7dmFyIHg9YiUyNixOPShiLXgpLzI2LEY9MTw8eDtpZih0aGlzLmxlbmd0aDw9TilyZXR1cm4gdGhpcy5fZXhwYW5k'@;
put 'KE4rMSksdGhpcy53b3Jkc1tOXXw9Rix0aGlzO2Zvcih2YXIgZz1GLEM9TjswIT09ZyYmQzx0aGlzLmxlbmd0aDtDKyspe3ZhciBNPTB8dGhpcy53b3Jkc1tDXTtnPShNKz1nKT4+PjI2LHRoaXMud29yZHNbQ109TSY9NjcxMDg4NjN9cmV0dXJuIDAhPT1nJiYodGhpcy53b3Jkc1tDXT1nLHRo'@;
put 'aXMubGVuZ3RoKyspLHRoaXN9LEgucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxILnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKGIpe3ZhciBOLHg9YjwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYheClyZXR1cm4t'@;
put 'MTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmeClyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSlOPTE7ZWxzZXt4JiYoYj0tYiksdihiPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgRj0wfHRoaXMud29yZHNbMF07Tj1GPT09Yj8wOkY8Yj8tMToxfXJldHVy'@;
put 'biAwIT09dGhpcy5uZWdhdGl2ZT8wfC1OOk59LEgucHJvdG90eXBlLmNtcD1mdW5jdGlvbihiKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWIubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1iLm5lZ2F0aXZlKXJldHVybiAxO3ZhciB4PXRoaXMudWNtcChi'@;
put 'KTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwteDp4fSxILnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKGIpe2lmKHRoaXMubGVuZ3RoPmIubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPGIubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgeD0wLE49dGhpcy5sZW5ndGgtMTtOPj0wO04t'@;
put 'LSl7dmFyIEY9MHx0aGlzLndvcmRzW05dLGc9MHxiLndvcmRzW05dO2lmKEYhPT1nKXtGPGc/eD0tMTpGPmcmJih4PTEpO2JyZWFrfX1yZXR1cm4geH0sSC5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKGIpe3JldHVybiAxPT09dGhpcy5jbXBuKGIpfSxILnByb3RvdHlwZS5ndD1mdW5jdGlvbihi'@;
put 'KXtyZXR1cm4gMT09PXRoaXMuY21wKGIpfSxILnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNtcG4oYik+PTB9LEgucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbXAoYik+PTB9LEgucHJvdG90eXBlLmx0bj1mdW5jdGlvbihiKXtyZXR1cm4t'@;
put 'MT09PXRoaXMuY21wbihiKX0sSC5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oYil7cmV0dXJuLTE9PT10aGlzLmNtcChiKX0sSC5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbXBuKGIpPD0wfSxILnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY21w'@;
put 'KGIpPD0wfSxILnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oYil7cmV0dXJuIDA9PT10aGlzLmNtcG4oYil9LEgucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGIpe3JldHVybiAwPT09dGhpcy5jbXAoYil9LEgucmVkPWZ1bmN0aW9uKGIpe3JldHVybiBuZXcgdWUoYil9LEgucHJvdG90eXBlLnRvUmVk'@;
put 'PWZ1bmN0aW9uKGIpe3JldHVybiB2KCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHYoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksYi5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGIpfSxILnByb3Rv'@;
put 'dHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHYodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sSC5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKGIpe3JldHVy'@;
put 'biB0aGlzLnJlZD1iLHRoaXN9LEgucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKGIpe3JldHVybiB2KCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKGIpfSxILnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oYil7cmV0'@;
put 'dXJuIHYodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxiKX0sSC5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihiKXtyZXR1cm4gdih0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0'@;
put 'aGlzLnJlZC5pYWRkKHRoaXMsYil9LEgucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihiKXtyZXR1cm4gdih0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLGIpfSxILnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKGIpe3Jl'@;
put 'dHVybiB2KHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxiKX0sSC5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGIpe3JldHVybiB2KHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiks'@;
put 'dGhpcy5yZWQuc2hsKHRoaXMsYil9LEgucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihiKXtyZXR1cm4gdih0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsYiksdGhpcy5yZWQubXVsKHRoaXMsYil9LEgucHJvdG90'@;
put 'eXBlLnJlZElNdWw9ZnVuY3Rpb24oYil7cmV0dXJuIHYodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGIpLHRoaXMucmVkLmltdWwodGhpcyxiKX0sSC5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IHYodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LEgucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdih0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdp'@;
put 'dGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxILnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHYodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3Zlcmlm'@;
put 'eTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sSC5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiB2KHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LEgu'@;
put 'cHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiB2KHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxILnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oYil7cmV0dXJu'@;
put 'IHYodGhpcy5yZWQmJiFiLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxiKX07dmFyIHE9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiB0ZShZLGIpe3RoaXMubmFtZT1Z'@;
put 'LHRoaXMucD1uZXcgSChiLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgSCgxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gbmUoKXt0ZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBm'@;
put 'ZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIGllKCl7dGUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBs'@;
put 'ZSgpe3RlLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gZGUoKXt0ZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZm'@;
put 'ZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIHVlKFkpe2lmKCJzdHJpbmciPT10eXBlb2YgWSl7dmFyIGI9SC5fcHJpbWUoWSk7dGhpcy5tPWIucCx0aGlzLnByaW1lPWJ9ZWxzZSB2KFkuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09WSx0aGlz'@;
put 'LnByaW1lPW51bGx9ZnVuY3Rpb24gY2UoWSl7dWUuY2FsbCh0aGlzLFkpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IEgoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9'@;
put 'dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRo'@;
put 'aXMubWludil9dGUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgYj1uZXcgSChudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLGJ9LHRlLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKGIpe3ZhciBOLHg9Yjtkb3t0aGlzLnNwbGl0KHgs'@;
put 'dGhpcy50bXApLE49KHg9KHg9dGhpcy5pbXVsSyh4KSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKE4+dGhpcy5uKTt2YXIgRj1OPHRoaXMubj8tMTp4LnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PUY/KHgud29yZHNbMF09MCx4Lmxlbmd0aD0xKTpGPjA/eC5pc3ViKHRoaXMu'@;
put 'cCk6dm9pZCAwIT09eC5zdHJpcD94LnN0cmlwKCk6eC5fc3RyaXAoKSx4fSx0ZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oYix4KXtiLml1c2hybih0aGlzLm4sMCx4KX0sdGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGIpe3JldHVybiBiLmltdWwodGhpcy5rKX0saGUobmUsdGUpLG5l'@;
put 'LnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihiLHgpe2Zvcih2YXIgTj00MTk0MzAzLEY9TWF0aC5taW4oYi5sZW5ndGgsOSksZz0wO2c8RjtnKyspeC53b3Jkc1tnXT1iLndvcmRzW2ddO2lmKHgubGVuZ3RoPUYsYi5sZW5ndGg8PTkpcmV0dXJuIGIud29yZHNbMF09MCx2b2lkKGIubGVuZ3Ro'@;
put 'PTEpO3ZhciBDPWIud29yZHNbOV07Zm9yKHgud29yZHNbeC5sZW5ndGgrK109QyZOLGc9MTA7ZzxiLmxlbmd0aDtnKyspe3ZhciBNPTB8Yi53b3Jkc1tnXTtiLndvcmRzW2ctMTBdPShNJk4pPDw0fEM+Pj4yMixDPU19Yi53b3Jkc1tnLTEwXT1DPj4+PTIyLGIubGVuZ3RoLT0wPT09QyYmYi5s'@;
put 'ZW5ndGg+MTA/MTA6OX0sbmUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGIpe2Iud29yZHNbYi5sZW5ndGhdPTAsYi53b3Jkc1tiLmxlbmd0aCsxXT0wLGIubGVuZ3RoKz0yO2Zvcih2YXIgeD0wLE49MDtOPGIubGVuZ3RoO04rKyl7dmFyIEY9MHxiLndvcmRzW05dO2Iud29yZHNbTl09Njcx'@;
put 'MDg4NjMmKHgrPTk3NypGKSx4PTY0KkYrKHgvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1iLndvcmRzW2IubGVuZ3RoLTFdJiYoYi5sZW5ndGgtLSwwPT09Yi53b3Jkc1tiLmxlbmd0aC0xXSYmYi5sZW5ndGgtLSksYn0saGUoaWUsdGUpLGhlKGxlLHRlKSxoZShkZSx0ZSksZGUucHJvdG90eXBl'@;
put 'LmltdWxLPWZ1bmN0aW9uKGIpe2Zvcih2YXIgeD0wLE49MDtOPGIubGVuZ3RoO04rKyl7dmFyIEY9MTkqKDB8Yi53b3Jkc1tOXSkreCxnPTY3MTA4ODYzJkY7Rj4+Pj0yNixiLndvcmRzW05dPWcseD1GfXJldHVybiAwIT09eCYmKGIud29yZHNbYi5sZW5ndGgrK109eCksYn0sSC5fcHJpbWU9'@;
put 'ZnVuY3Rpb24oYil7aWYocVtiXSlyZXR1cm4gcVtiXTt2YXIgeDtpZigiazI1NiI9PT1iKXg9bmV3IG5lO2Vsc2UgaWYoInAyMjQiPT09Yil4PW5ldyBpZTtlbHNlIGlmKCJwMTkyIj09PWIpeD1uZXcgbGU7ZWxzZXtpZigicDI1NTE5IiE9PWIpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHBy'@;
put 'aW1lICIrYik7eD1uZXcgZGV9cmV0dXJuIHFbYl09eCx4fSx1ZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oYil7digwPT09Yi5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSx2KGIucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LHVl'@;
put 'LnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihiLHgpe3YoMD09KGIubmVnYXRpdmV8eC5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksdihiLnJlZCYmYi5yZWQ9PT14LnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSx1ZS5wcm90b3R5'@;
put 'cGUuaW1vZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoYikuX2ZvcmNlUmVkKHRoaXMpOmIudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sdWUucHJvdG90eXBlLm5lZz1mdW5jdGlvbihiKXtyZXR1cm4gYi5pc1plcm8oKT9iLmNsb25lKCk6'@;
put 'dGhpcy5tLnN1YihiKS5fZm9yY2VSZWQodGhpcyl9LHVlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYix4KXt0aGlzLl92ZXJpZnkyKGIseCk7dmFyIE49Yi5hZGQoeCk7cmV0dXJuIE4uY21wKHRoaXMubSk+PTAmJk4uaXN1Yih0aGlzLm0pLE4uX2ZvcmNlUmVkKHRoaXMpfSx1ZS5wcm90b3R5'@;
put 'cGUuaWFkZD1mdW5jdGlvbihiLHgpe3RoaXMuX3ZlcmlmeTIoYix4KTt2YXIgTj1iLmlhZGQoeCk7cmV0dXJuIE4uY21wKHRoaXMubSk+PTAmJk4uaXN1Yih0aGlzLm0pLE59LHVlLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oYix4KXt0aGlzLl92ZXJpZnkyKGIseCk7dmFyIE49Yi5zdWIoeCk7'@;
put 'cmV0dXJuIE4uY21wbigwKTwwJiZOLmlhZGQodGhpcy5tKSxOLl9mb3JjZVJlZCh0aGlzKX0sdWUucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oYix4KXt0aGlzLl92ZXJpZnkyKGIseCk7dmFyIE49Yi5pc3ViKHgpO3JldHVybiBOLmNtcG4oMCk8MCYmTi5pYWRkKHRoaXMubSksTn0sdWUucHJv'@;
put 'dG90eXBlLnNobD1mdW5jdGlvbihiLHgpe3JldHVybiB0aGlzLl92ZXJpZnkxKGIpLHRoaXMuaW1vZChiLnVzaGxuKHgpKX0sdWUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oYix4KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihiLHgpLHRoaXMuaW1vZChiLmltdWwoeCkpfSx1ZS5wcm90b3R5cGUu'@;
put 'bXVsPWZ1bmN0aW9uKGIseCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoYix4KSx0aGlzLmltb2QoYi5tdWwoeCkpfSx1ZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5pbXVsKGIsYi5jbG9uZSgpKX0sdWUucHJvdG90eXBlLnNxcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhp'@;
put 'cy5tdWwoYixiKX0sdWUucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oYil7aWYoYi5pc1plcm8oKSlyZXR1cm4gYi5jbG9uZSgpO3ZhciB4PXRoaXMubS5hbmRsbigzKTtpZih2KHglMj09MSksMz09PXgpe3ZhciBOPXRoaXMubS5hZGQobmV3IEgoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5w'@;
put 'b3coYixOKX1mb3IodmFyIEY9dGhpcy5tLnN1Ym4oMSksZz0wOyFGLmlzWmVybygpJiYwPT09Ri5hbmRsbigxKTspZysrLEYuaXVzaHJuKDEpO3YoIUYuaXNaZXJvKCkpO3ZhciBDPW5ldyBIKDEpLnRvUmVkKHRoaXMpLE09Qy5yZWROZWcoKSx5PXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxw'@;
put 'PXRoaXMubS5iaXRMZW5ndGgoKTtmb3IocD1uZXcgSCgyKnAqcCkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KHAseSkuY21wKE0pOylwLnJlZElBZGQoTSk7Zm9yKHZhciBTPXRoaXMucG93KHAsRiksUT10aGlzLnBvdyhiLEYuYWRkbigxKS5pdXNocm4oMSkpLHJlPXRoaXMucG93KGIsRiks'@;
put 'ZmU9ZzswIT09cmUuY21wKEMpOyl7Zm9yKHZhciBtZT1yZSxrZT0wOzAhPT1tZS5jbXAoQyk7a2UrKyltZT1tZS5yZWRTcXIoKTt2KGtlPGZlKTt2YXIgVGU9dGhpcy5wb3coUyxuZXcgSCgxKS5pdXNobG4oZmUta2UtMSkpO1E9US5yZWRNdWwoVGUpLFM9VGUucmVkU3FyKCkscmU9cmUucmVk'@;
put 'TXVsKFMpLGZlPWtlfXJldHVybiBRfSx1ZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihiKXt2YXIgeD1iLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09eC5uZWdhdGl2ZT8oeC5uZWdhdGl2ZT0wLHRoaXMuaW1vZCh4KS5yZWROZWcoKSk6dGhpcy5pbW9kKHgpfSx1ZS5wcm90b3R5cGUucG93'@;
put 'PWZ1bmN0aW9uKGIseCl7aWYoeC5pc1plcm8oKSlyZXR1cm4gbmV3IEgoMSkudG9SZWQodGhpcyk7aWYoMD09PXguY21wbigxKSlyZXR1cm4gYi5jbG9uZSgpO3ZhciBGPW5ldyBBcnJheSgxNik7RlswXT1uZXcgSCgxKS50b1JlZCh0aGlzKSxGWzFdPWI7Zm9yKHZhciBnPTI7ZzxGLmxlbmd0'@;
put 'aDtnKyspRltnXT10aGlzLm11bChGW2ctMV0sYik7dmFyIEM9RlswXSxNPTAseT0wLHA9eC5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PXAmJihwPTI2KSxnPXgubGVuZ3RoLTE7Zz49MDtnLS0pe2Zvcih2YXIgUz14LndvcmRzW2ddLFE9cC0xO1E+PTA7US0tKXt2YXIgcmU9Uz4+USYxO0MhPT1G'@;
put 'WzBdJiYoQz10aGlzLnNxcihDKSksMCE9PXJlfHwwIT09TT8oTTw8PTEsTXw9cmUsKDQ9PSsreXx8MD09PWcmJjA9PT1RKSYmKEM9dGhpcy5tdWwoQyxGW01dKSx5PTAsTT0wKSk6eT0wfXA9MjZ9cmV0dXJuIEN9LHVlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oYil7dmFyIHg9Yi51'@;
put 'bW9kKHRoaXMubSk7cmV0dXJuIHg9PT1iP3guY2xvbmUoKTp4fSx1ZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oYil7dmFyIHg9Yi5jbG9uZSgpO3JldHVybiB4LnJlZD1udWxsLHh9LEgubW9udD1mdW5jdGlvbihiKXtyZXR1cm4gbmV3IGNlKGIpfSxoZShjZSx1ZSksY2UucHJv'@;
put 'dG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5pbW9kKGIudXNobG4odGhpcy5zaGlmdCkpfSxjZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oYil7dmFyIHg9dGhpcy5pbW9kKGIubXVsKHRoaXMucmludikpO3JldHVybiB4LnJlZD1udWxsLHh9LGNlLnBy'@;
put 'b3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGIseCl7aWYoYi5pc1plcm8oKXx8eC5pc1plcm8oKSlyZXR1cm4gYi53b3Jkc1swXT0wLGIubGVuZ3RoPTEsYjt2YXIgTj1iLmltdWwoeCksRj1OLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhp'@;
put 'cy5tKSxnPU4uaXN1YihGKS5pdXNocm4odGhpcy5zaGlmdCksQz1nO3JldHVybiBnLmNtcCh0aGlzLm0pPj0wP0M9Zy5pc3ViKHRoaXMubSk6Zy5jbXBuKDApPDAmJihDPWcuaWFkZCh0aGlzLm0pKSxDLl9mb3JjZVJlZCh0aGlzKX0sY2UucHJvdG90eXBlLm11bD1mdW5jdGlvbihiLHgpe2lm'@;
put 'KGIuaXNaZXJvKCl8fHguaXNaZXJvKCkpcmV0dXJuIG5ldyBIKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgTj1iLm11bCh4KSxGPU4ubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGc9Ti5pc3ViKEYpLml1c2hybih0aGlzLnNo'@;
put 'aWZ0KSxDPWc7cmV0dXJuIGcuY21wKHRoaXMubSk+PTA/Qz1nLmlzdWIodGhpcy5tKTpnLmNtcG4oMCk8MCYmKEM9Zy5pYWRkKHRoaXMubSkpLEMuX2ZvcmNlUmVkKHRoaXMpfSxjZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5pbW9kKGIuX2ludm1wKHRoaXMubSku'@;
put 'bXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShXZT1ULm5tZChXZSksdGhpcyl9LDcwODk2OmZ1bmN0aW9uKFdlKXtXZS5leHBvcnRzPWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHplKEVlKXtyZXR1cm4oemU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJv'@;
put 'bCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oRGUpe3JldHVybiB0eXBlb2YgRGV9OmZ1bmN0aW9uKERlKXtyZXR1cm4gRGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJkRlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZEZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6'@;
put 'dHlwZW9mIERlfSkoRWUpfWZ1bmN0aW9uIFQoRWUsRGUpe3JldHVybihUPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oYXQsY3Qpe3JldHVybiBhdC5fX3Byb3RvX189Y3QsYXR9KShFZSxEZSl9ZnVuY3Rpb24gayhFZSxEZSwkZSl7cmV0dXJuKGs9ZnVuY3Rpb24gc2UoKXtpZih0'@;
put 'eXBlb2YgUmVmbGVjdD4idSJ8fCFSZWZsZWN0LmNvbnN0cnVjdHx8UmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1'@;
put 'Y3QoQm9vbGVhbixbXSxmdW5jdGlvbigpe30pKSwhMH1jYXRjaHtyZXR1cm4hMX19KCk/UmVmbGVjdC5jb25zdHJ1Y3Q6ZnVuY3Rpb24oY3QsT3QsUHQpe3ZhciBBdD1bbnVsbF07QXQucHVzaC5hcHBseShBdCxPdCk7dmFyIG1uPW5ldyhGdW5jdGlvbi5iaW5kLmFwcGx5KGN0LEF0KSk7cmV0'@;
put 'dXJuIFB0JiZUKG1uLFB0LnByb3RvdHlwZSksbW59KS5hcHBseShudWxsLGFyZ3VtZW50cyl9ZnVuY3Rpb24gdihFZSl7cmV0dXJuIGZ1bmN0aW9uIGhlKEVlKXtpZihBcnJheS5pc0FycmF5KEVlKSlyZXR1cm4gTChFZSl9KEVlKXx8ZnVuY3Rpb24gSChFZSl7aWYodHlwZW9mIFN5bWJvbDwi'@;
put 'dSImJm51bGwhPUVlW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPUVlWyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20oRWUpfShFZSl8fGZ1bmN0aW9uIEIoRWUsRGUpe2lmKEVlKXtpZigic3RyaW5nIj09dHlwZW9mIEVlKXJldHVybiBMKEVlLERlKTt2YXIgJGU9T2JqZWN0LnByb3Rv'@;
put 'dHlwZS50b1N0cmluZy5jYWxsKEVlKS5zbGljZSg4LC0xKTtpZigiT2JqZWN0Ij09PSRlJiZFZS5jb25zdHJ1Y3RvciYmKCRlPUVlLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09JGV8fCJTZXQiPT09JGUpcmV0dXJuIEFycmF5LmZyb20oRWUpO2lmKCJBcmd1bWVudHMiPT09JGV8fC9eKD86'@;
put 'VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KCRlKSlyZXR1cm4gTChFZSxEZSl9fShFZSl8fGZ1bmN0aW9uIEsoKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRv'@;
put 'IGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBMKEVlLERlKXsobnVsbD09RGV8fERlPkVlLmxlbmd0aCkmJihEZT1FZS5sZW5ndGgpO2Zvcih2YXIgJGU9MCxhdD1uZXcgQXJyYXkoRGUp'@;
put 'OyRlPERlOyRlKyspYXRbJGVdPUVlWyRlXTtyZXR1cm4gYXR9dmFyIEo9T2JqZWN0Lmhhc093blByb3BlcnR5LEk9T2JqZWN0LnNldFByb3RvdHlwZU9mLFI9T2JqZWN0LmlzRnJvemVuLEU9T2JqZWN0LmdldFByb3RvdHlwZU9mLHo9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixq'@;
put 'PU9iamVjdC5mcmVlemUsVj1PYmplY3Quc2VhbCxHPU9iamVjdC5jcmVhdGUsVz10eXBlb2YgUmVmbGVjdDwidSImJlJlZmxlY3QsVT1XLmFwcGx5LHE9Vy5jb25zdHJ1Y3Q7VXx8KFU9ZnVuY3Rpb24oRGUsJGUsYXQpe3JldHVybiBEZS5hcHBseSgkZSxhdCl9KSxqfHwoaj1mdW5jdGlvbihE'@;
put 'ZSl7cmV0dXJuIERlfSksVnx8KFY9ZnVuY3Rpb24oRGUpe3JldHVybiBEZX0pLHF8fChxPWZ1bmN0aW9uKERlLCRlKXtyZXR1cm4gayhEZSx2KCRlKSl9KTt2YXIgdGU9RihBcnJheS5wcm90b3R5cGUuZm9yRWFjaCksbmU9RihBcnJheS5wcm90b3R5cGUucG9wKSxpZT1GKEFycmF5LnByb3Rv'@;
put 'dHlwZS5wdXNoKSxsZT1GKFN0cmluZy5wcm90b3R5cGUudG9Mb3dlckNhc2UpLGRlPUYoU3RyaW5nLnByb3RvdHlwZS50b1N0cmluZyksdWU9RihTdHJpbmcucHJvdG90eXBlLm1hdGNoKSxjZT1GKFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSksWT1GKFN0cmluZy5wcm90b3R5cGUuaW5kZXhP'@;
put 'ZiksYj1GKFN0cmluZy5wcm90b3R5cGUudHJpbSkseD1GKFJlZ0V4cC5wcm90b3R5cGUudGVzdCksTj1mdW5jdGlvbiBnKEVlKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIERlPWFyZ3VtZW50cy5sZW5ndGgsJGU9bmV3IEFycmF5KERlKSxhdD0wO2F0PERlO2F0KyspJGVbYXRdPWFyZ3Vt'@;
put 'ZW50c1thdF07cmV0dXJuIHEoRWUsJGUpfX0oVHlwZUVycm9yKTtmdW5jdGlvbiBGKEVlKXtyZXR1cm4gZnVuY3Rpb24oRGUpe2Zvcih2YXIgJGU9YXJndW1lbnRzLmxlbmd0aCxhdD1uZXcgQXJyYXkoJGU+MT8kZS0xOjApLGN0PTE7Y3Q8JGU7Y3QrKylhdFtjdC0xXT1hcmd1bWVudHNbY3Rd'@;
put 'O3JldHVybiBVKEVlLERlLGF0KX19ZnVuY3Rpb24gQyhFZSxEZSwkZSl7dmFyIGF0OyRlPW51bGwhPT0oYXQ9JGUpJiZ2b2lkIDAhPT1hdD9hdDpsZSxJJiZJKEVlLG51bGwpO2Zvcih2YXIgY3Q9RGUubGVuZ3RoO2N0LS07KXt2YXIgT3Q9RGVbY3RdO2lmKCJzdHJpbmciPT10eXBlb2YgT3Qp'@;
put 'e3ZhciBQdD0kZShPdCk7UHQhPT1PdCYmKFIoRGUpfHwoRGVbY3RdPVB0KSxPdD1QdCl9RWVbT3RdPSEwfXJldHVybiBFZX1mdW5jdGlvbiBNKEVlKXt2YXIgJGUsRGU9RyhudWxsKTtmb3IoJGUgaW4gRWUpITA9PT1VKEosRWUsWyRlXSkmJihEZVskZV09RWVbJGVdKTtyZXR1cm4gRGV9ZnVu'@;
put 'Y3Rpb24geShFZSxEZSl7Zm9yKDtudWxsIT09RWU7KXt2YXIgJGU9eihFZSxEZSk7aWYoJGUpe2lmKCRlLmdldClyZXR1cm4gRigkZS5nZXQpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiAkZS52YWx1ZSlyZXR1cm4gRigkZS52YWx1ZSl9RWU9RShFZSl9cmV0dXJuIGZ1bmN0aW9uIGF0KGN0KXty'@;
put 'ZXR1cm4gY29uc29sZS53YXJuKCJmYWxsYmFjayB2YWx1ZSBmb3IiLGN0KSxudWxsfX12YXIgcD1qKFsiYSIsImFiYnIiLCJhY3JvbnltIiwiYWRkcmVzcyIsImFyZWEiLCJhcnRpY2xlIiwiYXNpZGUiLCJhdWRpbyIsImIiLCJiZGkiLCJiZG8iLCJiaWciLCJibGluayIsImJsb2NrcXVvdGUi'@;
put 'LCJib2R5IiwiYnIiLCJidXR0b24iLCJjYW52YXMiLCJjYXB0aW9uIiwiY2VudGVyIiwiY2l0ZSIsImNvZGUiLCJjb2wiLCJjb2xncm91cCIsImNvbnRlbnQiLCJkYXRhIiwiZGF0YWxpc3QiLCJkZCIsImRlY29yYXRvciIsImRlbCIsImRldGFpbHMiLCJkZm4iLCJkaWFsb2ciLCJkaXIiLCJk'@;
put 'aXYiLCJkbCIsImR0IiwiZWxlbWVudCIsImVtIiwiZmllbGRzZXQiLCJmaWdjYXB0aW9uIiwiZmlndXJlIiwiZm9udCIsImZvb3RlciIsImZvcm0iLCJoMSIsImgyIiwiaDMiLCJoNCIsImg1IiwiaDYiLCJoZWFkIiwiaGVhZGVyIiwiaGdyb3VwIiwiaHIiLCJodG1sIiwiaSIsImltZyIsImlu'@;
put 'cHV0IiwiaW5zIiwia2JkIiwibGFiZWwiLCJsZWdlbmQiLCJsaSIsIm1haW4iLCJtYXAiLCJtYXJrIiwibWFycXVlZSIsIm1lbnUiLCJtZW51aXRlbSIsIm1ldGVyIiwibmF2Iiwibm9iciIsIm9sIiwib3B0Z3JvdXAiLCJvcHRpb24iLCJvdXRwdXQiLCJwIiwicGljdHVyZSIsInByZSIsInBy'@;
put 'b2dyZXNzIiwicSIsInJwIiwicnQiLCJydWJ5IiwicyIsInNhbXAiLCJzZWN0aW9uIiwic2VsZWN0Iiwic2hhZG93Iiwic21hbGwiLCJzb3VyY2UiLCJzcGFjZXIiLCJzcGFuIiwic3RyaWtlIiwic3Ryb25nIiwic3R5bGUiLCJzdWIiLCJzdW1tYXJ5Iiwic3VwIiwidGFibGUiLCJ0Ym9keSIs'@;
put 'InRkIiwidGVtcGxhdGUiLCJ0ZXh0YXJlYSIsInRmb290IiwidGgiLCJ0aGVhZCIsInRpbWUiLCJ0ciIsInRyYWNrIiwidHQiLCJ1IiwidWwiLCJ2YXIiLCJ2aWRlbyIsIndiciJdKSxTPWooWyJzdmciLCJhIiwiYWx0Z2x5cGgiLCJhbHRnbHlwaGRlZiIsImFsdGdseXBoaXRlbSIsImFuaW1h'@;
put 'dGVjb2xvciIsImFuaW1hdGVtb3Rpb24iLCJhbmltYXRldHJhbnNmb3JtIiwiY2lyY2xlIiwiY2xpcHBhdGgiLCJkZWZzIiwiZGVzYyIsImVsbGlwc2UiLCJmaWx0ZXIiLCJmb250IiwiZyIsImdseXBoIiwiZ2x5cGhyZWYiLCJoa2VybiIsImltYWdlIiwibGluZSIsImxpbmVhcmdyYWRpZW50'@;
put 'IiwibWFya2VyIiwibWFzayIsIm1ldGFkYXRhIiwibXBhdGgiLCJwYXRoIiwicGF0dGVybiIsInBvbHlnb24iLCJwb2x5bGluZSIsInJhZGlhbGdyYWRpZW50IiwicmVjdCIsInN0b3AiLCJzdHlsZSIsInN3aXRjaCIsInN5bWJvbCIsInRleHQiLCJ0ZXh0cGF0aCIsInRpdGxlIiwidHJlZiIs'@;
put 'InRzcGFuIiwidmlldyIsInZrZXJuIl0pLFE9aihbImZlQmxlbmQiLCJmZUNvbG9yTWF0cml4IiwiZmVDb21wb25lbnRUcmFuc2ZlciIsImZlQ29tcG9zaXRlIiwiZmVDb252b2x2ZU1hdHJpeCIsImZlRGlmZnVzZUxpZ2h0aW5nIiwiZmVEaXNwbGFjZW1lbnRNYXAiLCJmZURpc3RhbnRMaWdo'@;
put 'dCIsImZlRmxvb2QiLCJmZUZ1bmNBIiwiZmVGdW5jQiIsImZlRnVuY0ciLCJmZUZ1bmNSIiwiZmVHYXVzc2lhbkJsdXIiLCJmZUltYWdlIiwiZmVNZXJnZSIsImZlTWVyZ2VOb2RlIiwiZmVNb3JwaG9sb2d5IiwiZmVPZmZzZXQiLCJmZVBvaW50TGlnaHQiLCJmZVNwZWN1bGFyTGlnaHRpbmci'@;
put 'LCJmZVNwb3RMaWdodCIsImZlVGlsZSIsImZlVHVyYnVsZW5jZSJdKSxyZT1qKFsiYW5pbWF0ZSIsImNvbG9yLXByb2ZpbGUiLCJjdXJzb3IiLCJkaXNjYXJkIiwiZmVkcm9wc2hhZG93IiwiZm9udC1mYWNlIiwiZm9udC1mYWNlLWZvcm1hdCIsImZvbnQtZmFjZS1uYW1lIiwiZm9udC1mYWNl'@;
put 'LXNyYyIsImZvbnQtZmFjZS11cmkiLCJmb3JlaWdub2JqZWN0IiwiaGF0Y2giLCJoYXRjaHBhdGgiLCJtZXNoIiwibWVzaGdyYWRpZW50IiwibWVzaHBhdGNoIiwibWVzaHJvdyIsIm1pc3NpbmctZ2x5cGgiLCJzY3JpcHQiLCJzZXQiLCJzb2xpZGNvbG9yIiwidW5rbm93biIsInVzZSJdKSxm'@;
put 'ZT1qKFsibWF0aCIsIm1lbmNsb3NlIiwibWVycm9yIiwibWZlbmNlZCIsIm1mcmFjIiwibWdseXBoIiwibWkiLCJtbGFiZWxlZHRyIiwibW11bHRpc2NyaXB0cyIsIm1uIiwibW8iLCJtb3ZlciIsIm1wYWRkZWQiLCJtcGhhbnRvbSIsIm1yb290IiwibXJvdyIsIm1zIiwibXNwYWNlIiwibXNx'@;
put 'cnQiLCJtc3R5bGUiLCJtc3ViIiwibXN1cCIsIm1zdWJzdXAiLCJtdGFibGUiLCJtdGQiLCJtdGV4dCIsIm10ciIsIm11bmRlciIsIm11bmRlcm92ZXIiXSksbWU9aihbIm1hY3Rpb24iLCJtYWxpZ25ncm91cCIsIm1hbGlnbm1hcmsiLCJtbG9uZ2RpdiIsIm1zY2FycmllcyIsIm1zY2Fycnki'@;
put 'LCJtc2dyb3VwIiwibXN0YWNrIiwibXNsaW5lIiwibXNyb3ciLCJzZW1hbnRpY3MiLCJhbm5vdGF0aW9uIiwiYW5ub3RhdGlvbi14bWwiLCJtcHJlc2NyaXB0cyIsIm5vbmUiXSksa2U9aihbIiN0ZXh0Il0pLFRlPWooWyJhY2NlcHQiLCJhY3Rpb24iLCJhbGlnbiIsImFsdCIsImF1dG9jYXBp'@;
put 'dGFsaXplIiwiYXV0b2NvbXBsZXRlIiwiYXV0b3BpY3R1cmVpbnBpY3R1cmUiLCJhdXRvcGxheSIsImJhY2tncm91bmQiLCJiZ2NvbG9yIiwiYm9yZGVyIiwiY2FwdHVyZSIsImNlbGxwYWRkaW5nIiwiY2VsbHNwYWNpbmciLCJjaGVja2VkIiwiY2l0ZSIsImNsYXNzIiwiY2xlYXIiLCJjb2xv'@;
put 'ciIsImNvbHMiLCJjb2xzcGFuIiwiY29udHJvbHMiLCJjb250cm9sc2xpc3QiLCJjb29yZHMiLCJjcm9zc29yaWdpbiIsImRhdGV0aW1lIiwiZGVjb2RpbmciLCJkZWZhdWx0IiwiZGlyIiwiZGlzYWJsZWQiLCJkaXNhYmxlcGljdHVyZWlucGljdHVyZSIsImRpc2FibGVyZW1vdGVwbGF5YmFj'@;
put 'ayIsImRvd25sb2FkIiwiZHJhZ2dhYmxlIiwiZW5jdHlwZSIsImVudGVya2V5aGludCIsImZhY2UiLCJmb3IiLCJoZWFkZXJzIiwiaGVpZ2h0IiwiaGlkZGVuIiwiaGlnaCIsImhyZWYiLCJocmVmbGFuZyIsImlkIiwiaW5wdXRtb2RlIiwiaW50ZWdyaXR5IiwiaXNtYXAiLCJraW5kIiwibGFi'@;
put 'ZWwiLCJsYW5nIiwibGlzdCIsImxvYWRpbmciLCJsb29wIiwibG93IiwibWF4IiwibWF4bGVuZ3RoIiwibWVkaWEiLCJtZXRob2QiLCJtaW4iLCJtaW5sZW5ndGgiLCJtdWx0aXBsZSIsIm11dGVkIiwibmFtZSIsIm5vbmNlIiwibm9zaGFkZSIsIm5vdmFsaWRhdGUiLCJub3dyYXAiLCJvcGVu'@;
put 'Iiwib3B0aW11bSIsInBhdHRlcm4iLCJwbGFjZWhvbGRlciIsInBsYXlzaW5saW5lIiwicG9zdGVyIiwicHJlbG9hZCIsInB1YmRhdGUiLCJyYWRpb2dyb3VwIiwicmVhZG9ubHkiLCJyZWwiLCJyZXF1aXJlZCIsInJldiIsInJldmVyc2VkIiwicm9sZSIsInJvd3MiLCJyb3dzcGFuIiwic3Bl'@;
put 'bGxjaGVjayIsInNjb3BlIiwic2VsZWN0ZWQiLCJzaGFwZSIsInNpemUiLCJzaXplcyIsInNwYW4iLCJzcmNsYW5nIiwic3RhcnQiLCJzcmMiLCJzcmNzZXQiLCJzdGVwIiwic3R5bGUiLCJzdW1tYXJ5IiwidGFiaW5kZXgiLCJ0aXRsZSIsInRyYW5zbGF0ZSIsInR5cGUiLCJ1c2VtYXAiLCJ2'@;
put 'YWxpZ24iLCJ2YWx1ZSIsIndpZHRoIiwieG1sbnMiLCJzbG90Il0pLFBlPWooWyJhY2NlbnQtaGVpZ2h0IiwiYWNjdW11bGF0ZSIsImFkZGl0aXZlIiwiYWxpZ25tZW50LWJhc2VsaW5lIiwiYXNjZW50IiwiYXR0cmlidXRlbmFtZSIsImF0dHJpYnV0ZXR5cGUiLCJhemltdXRoIiwiYmFzZWZy'@;
put 'ZXF1ZW5jeSIsImJhc2VsaW5lLXNoaWZ0IiwiYmVnaW4iLCJiaWFzIiwiYnkiLCJjbGFzcyIsImNsaXAiLCJjbGlwcGF0aHVuaXRzIiwiY2xpcC1wYXRoIiwiY2xpcC1ydWxlIiwiY29sb3IiLCJjb2xvci1pbnRlcnBvbGF0aW9uIiwiY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzIiwiY29s'@;
put 'b3ItcHJvZmlsZSIsImNvbG9yLXJlbmRlcmluZyIsImN4IiwiY3kiLCJkIiwiZHgiLCJkeSIsImRpZmZ1c2Vjb25zdGFudCIsImRpcmVjdGlvbiIsImRpc3BsYXkiLCJkaXZpc29yIiwiZHVyIiwiZWRnZW1vZGUiLCJlbGV2YXRpb24iLCJlbmQiLCJmaWxsIiwiZmlsbC1vcGFjaXR5IiwiZmls'@;
put 'bC1ydWxlIiwiZmlsdGVyIiwiZmlsdGVydW5pdHMiLCJmbG9vZC1jb2xvciIsImZsb29kLW9wYWNpdHkiLCJmb250LWZhbWlseSIsImZvbnQtc2l6ZSIsImZvbnQtc2l6ZS1hZGp1c3QiLCJmb250LXN0cmV0Y2giLCJmb250LXN0eWxlIiwiZm9udC12YXJpYW50IiwiZm9udC13ZWlnaHQiLCJm'@;
put 'eCIsImZ5IiwiZzEiLCJnMiIsImdseXBoLW5hbWUiLCJnbHlwaHJlZiIsImdyYWRpZW50dW5pdHMiLCJncmFkaWVudHRyYW5zZm9ybSIsImhlaWdodCIsImhyZWYiLCJpZCIsImltYWdlLXJlbmRlcmluZyIsImluIiwiaW4yIiwiayIsImsxIiwiazIiLCJrMyIsIms0Iiwia2VybmluZyIsImtl'@;
put 'eXBvaW50cyIsImtleXNwbGluZXMiLCJrZXl0aW1lcyIsImxhbmciLCJsZW5ndGhhZGp1c3QiLCJsZXR0ZXItc3BhY2luZyIsImtlcm5lbG1hdHJpeCIsImtlcm5lbHVuaXRsZW5ndGgiLCJsaWdodGluZy1jb2xvciIsImxvY2FsIiwibWFya2VyLWVuZCIsIm1hcmtlci1taWQiLCJtYXJrZXIt'@;
put 'c3RhcnQiLCJtYXJrZXJoZWlnaHQiLCJtYXJrZXJ1bml0cyIsIm1hcmtlcndpZHRoIiwibWFza2NvbnRlbnR1bml0cyIsIm1hc2t1bml0cyIsIm1heCIsIm1hc2siLCJtZWRpYSIsIm1ldGhvZCIsIm1vZGUiLCJtaW4iLCJuYW1lIiwibnVtb2N0YXZlcyIsIm9mZnNldCIsIm9wZXJhdG9yIiwi'@;
put 'b3BhY2l0eSIsIm9yZGVyIiwib3JpZW50Iiwib3JpZW50YXRpb24iLCJvcmlnaW4iLCJvdmVyZmxvdyIsInBhaW50LW9yZGVyIiwicGF0aCIsInBhdGhsZW5ndGgiLCJwYXR0ZXJuY29udGVudHVuaXRzIiwicGF0dGVybnRyYW5zZm9ybSIsInBhdHRlcm51bml0cyIsInBvaW50cyIsInByZXNl'@;
put 'cnZlYWxwaGEiLCJwcmVzZXJ2ZWFzcGVjdHJhdGlvIiwicHJpbWl0aXZldW5pdHMiLCJyIiwicngiLCJyeSIsInJhZGl1cyIsInJlZngiLCJyZWZ5IiwicmVwZWF0Y291bnQiLCJyZXBlYXRkdXIiLCJyZXN0YXJ0IiwicmVzdWx0Iiwicm90YXRlIiwic2NhbGUiLCJzZWVkIiwic2hhcGUtcmVu'@;
put 'ZGVyaW5nIiwic3BlY3VsYXJjb25zdGFudCIsInNwZWN1bGFyZXhwb25lbnQiLCJzcHJlYWRtZXRob2QiLCJzdGFydG9mZnNldCIsInN0ZGRldmlhdGlvbiIsInN0aXRjaHRpbGVzIiwic3RvcC1jb2xvciIsInN0b3Atb3BhY2l0eSIsInN0cm9rZS1kYXNoYXJyYXkiLCJzdHJva2UtZGFzaG9m'@;
put 'ZnNldCIsInN0cm9rZS1saW5lY2FwIiwic3Ryb2tlLWxpbmVqb2luIiwic3Ryb2tlLW1pdGVybGltaXQiLCJzdHJva2Utb3BhY2l0eSIsInN0cm9rZSIsInN0cm9rZS13aWR0aCIsInN0eWxlIiwic3VyZmFjZXNjYWxlIiwic3lzdGVtbGFuZ3VhZ2UiLCJ0YWJpbmRleCIsInRhcmdldHgiLCJ0'@;
put 'YXJnZXR5IiwidHJhbnNmb3JtIiwidHJhbnNmb3JtLW9yaWdpbiIsInRleHQtYW5jaG9yIiwidGV4dC1kZWNvcmF0aW9uIiwidGV4dC1yZW5kZXJpbmciLCJ0ZXh0bGVuZ3RoIiwidHlwZSIsInUxIiwidTIiLCJ1bmljb2RlIiwidmFsdWVzIiwidmlld2JveCIsInZpc2liaWxpdHkiLCJ2ZXJz'@;
put 'aW9uIiwidmVydC1hZHYteSIsInZlcnQtb3JpZ2luLXgiLCJ2ZXJ0LW9yaWdpbi15Iiwid2lkdGgiLCJ3b3JkLXNwYWNpbmciLCJ3cmFwIiwid3JpdGluZy1tb2RlIiwieGNoYW5uZWxzZWxlY3RvciIsInljaGFubmVsc2VsZWN0b3IiLCJ4IiwieDEiLCJ4MiIsInhtbG5zIiwieSIsInkxIiwi'@;
put 'eTIiLCJ6Iiwiem9vbWFuZHBhbiJdKSxGZT1qKFsiYWNjZW50IiwiYWNjZW50dW5kZXIiLCJhbGlnbiIsImJldmVsbGVkIiwiY2xvc2UiLCJjb2x1bW5zYWxpZ24iLCJjb2x1bW5saW5lcyIsImNvbHVtbnNwYW4iLCJkZW5vbWFsaWduIiwiZGVwdGgiLCJkaXIiLCJkaXNwbGF5IiwiZGlzcGxh'@;
put 'eXN0eWxlIiwiZW5jb2RpbmciLCJmZW5jZSIsImZyYW1lIiwiaGVpZ2h0IiwiaHJlZiIsImlkIiwibGFyZ2VvcCIsImxlbmd0aCIsImxpbmV0aGlja25lc3MiLCJsc3BhY2UiLCJscXVvdGUiLCJtYXRoYmFja2dyb3VuZCIsIm1hdGhjb2xvciIsIm1hdGhzaXplIiwibWF0aHZhcmlhbnQiLCJt'@;
put 'YXhzaXplIiwibWluc2l6ZSIsIm1vdmFibGVsaW1pdHMiLCJub3RhdGlvbiIsIm51bWFsaWduIiwib3BlbiIsInJvd2FsaWduIiwicm93bGluZXMiLCJyb3dzcGFjaW5nIiwicm93c3BhbiIsInJzcGFjZSIsInJxdW90ZSIsInNjcmlwdGxldmVsIiwic2NyaXB0bWluc2l6ZSIsInNjcmlwdHNp'@;
put 'emVtdWx0aXBsaWVyIiwic2VsZWN0aW9uIiwic2VwYXJhdG9yIiwic2VwYXJhdG9ycyIsInN0cmV0Y2h5Iiwic3Vic2NyaXB0c2hpZnQiLCJzdXBzY3JpcHRzaGlmdCIsInN5bW1ldHJpYyIsInZvZmZzZXQiLCJ3aWR0aCIsInhtbG5zIl0pLE5lPWooWyJ4bGluazpocmVmIiwieG1sOmlkIiwi'@;
put 'eGxpbms6dGl0bGUiLCJ4bWw6c3BhY2UiLCJ4bWxuczp4bGluayJdKSxMZT1WKC9ce1x7W1x3XFddKnxbXHdcV10qXH1cfS9nbSksQmU9VigvPCVbXHdcV10qfFtcd1xXXSolPi9nbSksSGU9VigvXCR7W1x3XFddKn0vZ20pLFFlPVYoL15kYXRhLVtcLVx3Llx1MDBCNy1cdUZGRkZdLyksbXQ9'@;
put 'VigvXmFyaWEtW1wtXHddKyQvKSxLZT1WKC9eKD86KD86KD86ZnxodCl0cHM/fG1haWx0b3x0ZWx8Y2FsbHRvfGNpZHx4bXBwKTp8W15hLXpdfFthLXorLlwtXSsoPzpbXmEteisuXC06XXwkKSkvaSksd2U9VigvXig/Olx3K3NjcmlwdHxkYXRhKTovaSksSWU9VigvW1x1MDAwMC1cdTAwMjBc'@;
put 'dTAwQTBcdTE2ODBcdTE4MEVcdTIwMDAtXHUyMDI5XHUyMDVGXHUzMDAwXS9nKSxPZT1WKC9eaHRtbCQvaSk7cmV0dXJuIGZ1bmN0aW9uIHFlKCl7dmFyIEVlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0eXBlb2Ygd2luZG93PiJ1Ij9u'@;
put 'dWxsOndpbmRvdyxEZT1mdW5jdGlvbihXbil7cmV0dXJuIHFlKFduKX07aWYoRGUudmVyc2lvbj0iMi40LjciLERlLnJlbW92ZWQ9W10sIUVlfHwhRWUuZG9jdW1lbnR8fDkhPT1FZS5kb2N1bWVudC5ub2RlVHlwZSlyZXR1cm4gRGUuaXNTdXBwb3J0ZWQ9ITEsRGU7dmFyICRlPUVlLmRvY3Vt'@;
put 'ZW50LGF0PUVlLmRvY3VtZW50LGN0PUVlLkRvY3VtZW50RnJhZ21lbnQsT3Q9RWUuSFRNTFRlbXBsYXRlRWxlbWVudCxQdD1FZS5Ob2RlLEF0PUVlLkVsZW1lbnQsSnQ9RWUuTm9kZUZpbHRlcixtbj1FZS5OYW1lZE5vZGVNYXAsTnQ9dm9pZCAwPT09bW4/RWUuTmFtZWROb2RlTWFwfHxFZS5N'@;
put 'b3pOYW1lZEF0dHJNYXA6bW4sYm49RWUuSFRNTEZvcm1FbGVtZW50LEduPUVlLkRPTVBhcnNlcixvbj1FZS50cnVzdGVkVHlwZXMsJG49QXQucHJvdG90eXBlLE5uPXkoJG4sImNsb25lTm9kZSIpLHB0PXkoJG4sIm5leHRTaWJsaW5nIikscG49eSgkbiwiY2hpbGROb2RlcyIpLGhuPXkoJG4s'@;
put 'InBhcmVudE5vZGUiKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgT3Qpe3ZhciBDdD1hdC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO0N0LmNvbnRlbnQmJkN0LmNvbnRlbnQub3duZXJEb2N1bWVudCYmKGF0PUN0LmNvbnRlbnQub3duZXJEb2N1bWVudCl9dmFyIGVuPWZ1bmN0aW9uKERlLCRl'@;
put 'KXtpZigib2JqZWN0IiE9PXplKERlKXx8ImZ1bmN0aW9uIiE9dHlwZW9mIERlLmNyZWF0ZVBvbGljeSlyZXR1cm4gbnVsbDt2YXIgYXQ9bnVsbCxjdD0iZGF0YS10dC1wb2xpY3ktc3VmZml4IjskZS5jdXJyZW50U2NyaXB0JiYkZS5jdXJyZW50U2NyaXB0Lmhhc0F0dHJpYnV0ZShjdCkmJihh'@;
put 'dD0kZS5jdXJyZW50U2NyaXB0LmdldEF0dHJpYnV0ZShjdCkpO3ZhciBPdD0iZG9tcHVyaWZ5IisoYXQ/IiMiK2F0OiIiKTt0cnl7cmV0dXJuIERlLmNyZWF0ZVBvbGljeShPdCx7Y3JlYXRlSFRNTDpmdW5jdGlvbihBdCl7cmV0dXJuIEF0fSxjcmVhdGVTY3JpcHRVUkw6ZnVuY3Rpb24oQXQp'@;
put 'e3JldHVybiBBdH19KX1jYXRjaHtyZXR1cm4gY29uc29sZS53YXJuKCJUcnVzdGVkVHlwZXMgcG9saWN5ICIrT3QrIiBjb3VsZCBub3QgYmUgY3JlYXRlZC4iKSxudWxsfX0ob24sJGUpLF90PWVuP2VuLmNyZWF0ZUhUTUwoIiIpOiIiLF9uPWF0LmltcGxlbWVudGF0aW9uLG90PWF0LmNyZWF0'@;
put 'ZU5vZGVJdGVyYXRvcixJdD1hdC5jcmVhdGVEb2N1bWVudEZyYWdtZW50LG5uPWF0LmdldEVsZW1lbnRzQnlUYWdOYW1lLER0PSRlLmltcG9ydE5vZGUsdnQ9e307dHJ5e3Z0PU0oYXQpLmRvY3VtZW50TW9kZT9hdC5kb2N1bWVudE1vZGU6e319Y2F0Y2h7fXZhciBHdD17fTtEZS5pc1N1cHBv'@;
put 'cnRlZD0iZnVuY3Rpb24iPT10eXBlb2YgaG4mJl9uJiZ2b2lkIDAhPT1fbi5jcmVhdGVIVE1MRG9jdW1lbnQmJjkhPT12dDt2YXIgbmwsJGwsTG49TGUsenQ9QmUsTW49SGUsVG49UWUsc249bXQsQm49d2UsRm49SWUscXQ9S2UsSG49bnVsbCxpaT1DKHt9LFtdLmNvbmNhdCh2KHApLHYoUyks'@;
put 'dihRKSx2KGZlKSx2KGtlKSkpLGNuPW51bGwsam49Qyh7fSxbXS5jb25jYXQodihUZSksdihQZSksdihGZSksdihOZSkpKSxYcj1PYmplY3Quc2VhbChPYmplY3QuY3JlYXRlKG51bGwse3RhZ05hbWVDaGVjazp7d3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsdmFs'@;
put 'dWU6bnVsbH0sYXR0cmlidXRlTmFtZUNoZWNrOnt3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCx2YWx1ZTpudWxsfSxhbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHM6e3dyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLHZhbHVlOiEx'@;
put 'fX0pKSx2aT1udWxsLEVyPW51bGwsWWk9ITAsSnI9ITAsYW89ITEsQnI9ITAsSmk9ITEsdG89ITEsY289ITEsbG89ITEsc289ITEsWGk9ITEscG89ITEsX3I9ITAsRmk9ITEsZ2E9ITAsbGE9ITEsVnU9e30sZ3M9bnVsbCxCdT1DKHt9LFsiYW5ub3RhdGlvbi14bWwiLCJhdWRpbyIsImNvbGdy'@;
put 'b3VwIiwiZGVzYyIsImZvcmVpZ25vYmplY3QiLCJoZWFkIiwiaWZyYW1lIiwibWF0aCIsIm1pIiwibW4iLCJtbyIsIm1zIiwibXRleHQiLCJub2VtYmVkIiwibm9mcmFtZXMiLCJub3NjcmlwdCIsInBsYWludGV4dCIsInNjcmlwdCIsInN0eWxlIiwic3ZnIiwidGVtcGxhdGUiLCJ0aGVhZCIs'@;
put 'InRpdGxlIiwidmlkZW8iLCJ4bXAiXSksWDA9bnVsbCxKMz1DKHt9LFsiYXVkaW8iLCJ2aWRlbyIsImltZyIsInNvdXJjZSIsImltYWdlIiwidHJhY2siXSksS2Q9bnVsbCxkMD1DKHt9LFsiYWx0IiwiY2xhc3MiLCJmb3IiLCJpZCIsImxhYmVsIiwibmFtZSIsInBhdHRlcm4iLCJwbGFjZWhv'@;
put 'bGRlciIsInJvbGUiLCJzdW1tYXJ5IiwidGl0bGUiLCJ2YWx1ZSIsInN0eWxlIiwieG1sbnMiXSksTGM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiLHZhPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsRmw9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLE1y'@;
put 'PUZsLHFkPSExLFEzPW51bGwscjI9Qyh7fSxbTGMsdmEsRmxdLGRlKSxzYT1bImFwcGxpY2F0aW9uL3hodG1sK3htbCIsInRleHQvaHRtbCJdLGgwPW51bGwsa2w9YXQuY3JlYXRlRWxlbWVudCgiZm9ybSIpLG8yPWZ1bmN0aW9uKFduKXtyZXR1cm4gV24gaW5zdGFuY2VvZiBSZWdFeHB8fFdu'@;
put 'IGluc3RhbmNlb2YgRnVuY3Rpb259LFBjPWZ1bmN0aW9uKFduKXtoMCYmaDA9PT1Xbnx8KCghV258fCJvYmplY3QiIT09emUoV24pKSYmKFduPXt9KSxXbj1NKFduKSxubD1ubD0tMT09PXNhLmluZGV4T2YoV24uUEFSU0VSX01FRElBX1RZUEUpPyJ0ZXh0L2h0bWwiOlduLlBBUlNFUl9NRURJ'@;
put 'QV9UWVBFLCRsPSJhcHBsaWNhdGlvbi94aHRtbCt4bWwiPT09bmw/ZGU6bGUsSG49IkFMTE9XRURfVEFHUyJpbiBXbj9DKHt9LFduLkFMTE9XRURfVEFHUywkbCk6aWksY249IkFMTE9XRURfQVRUUiJpbiBXbj9DKHt9LFduLkFMTE9XRURfQVRUUiwkbCk6am4sUTM9IkFMTE9XRURfTkFNRVNQ'@;
put 'QUNFUyJpbiBXbj9DKHt9LFduLkFMTE9XRURfTkFNRVNQQUNFUyxkZSk6cjIsS2Q9IkFERF9VUklfU0FGRV9BVFRSImluIFduP0MoTShkMCksV24uQUREX1VSSV9TQUZFX0FUVFIsJGwpOmQwLFgwPSJBRERfREFUQV9VUklfVEFHUyJpbiBXbj9DKE0oSjMpLFduLkFERF9EQVRBX1VSSV9UQUdT'@;
put 'LCRsKTpKMyxncz0iRk9SQklEX0NPTlRFTlRTImluIFduP0Moe30sV24uRk9SQklEX0NPTlRFTlRTLCRsKTpCdSx2aT0iRk9SQklEX1RBR1MiaW4gV24/Qyh7fSxXbi5GT1JCSURfVEFHUywkbCk6e30sRXI9IkZPUkJJRF9BVFRSImluIFduP0Moe30sV24uRk9SQklEX0FUVFIsJGwpOnt9LFZ1'@;
put 'PSJVU0VfUFJPRklMRVMiaW4gV24mJlduLlVTRV9QUk9GSUxFUyxZaT0hMSE9PVduLkFMTE9XX0FSSUFfQVRUUixKcj0hMSE9PVduLkFMTE9XX0RBVEFfQVRUUixhbz1Xbi5BTExPV19VTktOT1dOX1BST1RPQ09MU3x8ITEsQnI9ITEhPT1Xbi5BTExPV19TRUxGX0NMT1NFX0lOX0FUVFIsSmk9'@;
put 'V24uU0FGRV9GT1JfVEVNUExBVEVTfHwhMSx0bz1Xbi5XSE9MRV9ET0NVTUVOVHx8ITEsc289V24uUkVUVVJOX0RPTXx8ITEsWGk9V24uUkVUVVJOX0RPTV9GUkFHTUVOVHx8ITEscG89V24uUkVUVVJOX1RSVVNURURfVFlQRXx8ITEsbG89V24uRk9SQ0VfQk9EWXx8ITEsX3I9ITEhPT1Xbi5T'@;
put 'QU5JVElaRV9ET00sRmk9V24uU0FOSVRJWkVfTkFNRURfUFJPUFN8fCExLGdhPSExIT09V24uS0VFUF9DT05URU5ULGxhPVduLklOX1BMQUNFfHwhMSxxdD1Xbi5BTExPV0VEX1VSSV9SRUdFWFB8fHF0LE1yPVduLk5BTUVTUEFDRXx8RmwsWHI9V24uQ1VTVE9NX0VMRU1FTlRfSEFORExJTkd8'@;
put 'fHt9LFduLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HJiZvMihXbi5DVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2spJiYoWHIudGFnTmFtZUNoZWNrPVduLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayksV24uQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcmJm8y'@;
put 'KFduLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjaykmJihYci5hdHRyaWJ1dGVOYW1lQ2hlY2s9V24uQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrKSxXbi5DVVNUT01fRUxFTUVOVF9IQU5ETElORyYmImJvb2xlYW4iPT10eXBlb2Yg'@;
put 'V24uQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzJiYoWHIuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzPVduLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cyksSmkmJihKcj0hMSks'@;
put 'WGkmJihzbz0hMCksVnUmJihIbj1DKHt9LHYoa2UpKSxjbj1bXSwhMD09PVZ1Lmh0bWwmJihDKEhuLHApLEMoY24sVGUpKSwhMD09PVZ1LnN2ZyYmKEMoSG4sUyksQyhjbixQZSksQyhjbixOZSkpLCEwPT09VnUuc3ZnRmlsdGVycyYmKEMoSG4sUSksQyhjbixQZSksQyhjbixOZSkpLCEwPT09'@;
put 'VnUubWF0aE1sJiYoQyhIbixmZSksQyhjbixGZSksQyhjbixOZSkpKSxXbi5BRERfVEFHUyYmKEhuPT09aWkmJihIbj1NKEhuKSksQyhIbixXbi5BRERfVEFHUywkbCkpLFduLkFERF9BVFRSJiYoY249PT1qbiYmKGNuPU0oY24pKSxDKGNuLFduLkFERF9BVFRSLCRsKSksV24uQUREX1VSSV9T'@;
put 'QUZFX0FUVFImJkMoS2QsV24uQUREX1VSSV9TQUZFX0FUVFIsJGwpLFduLkZPUkJJRF9DT05URU5UUyYmKGdzPT09QnUmJihncz1NKGdzKSksQyhncyxXbi5GT1JCSURfQ09OVEVOVFMsJGwpKSxnYSYmKEhuWyIjdGV4dCJdPSEwKSx0byYmQyhIbixbImh0bWwiLCJoZWFkIiwiYm9keSJdKSxI'@;
put 'bi50YWJsZSYmKEMoSG4sWyJ0Ym9keSJdKSxkZWxldGUgdmkudGJvZHkpLGomJmooV24pLGgwPVduKX0sRGE9Qyh7fSxbIm1pIiwibW8iLCJtbiIsIm1zIiwibXRleHQiXSkscDA9Qyh7fSxbImZvcmVpZ25vYmplY3QiLCJkZXNjIiwidGl0bGUiLCJhbm5vdGF0aW9uLXhtbCJdKSxLbD1DKHt9'@;
put 'LFsidGl0bGUiLCJzdHlsZSIsImZvbnQiLCJhIiwic2NyaXB0Il0pLGt1PUMoe30sUyk7QyhrdSxRKSxDKGt1LHJlKTt2YXIgYTI9Qyh7fSxmZSk7QyhhMixtZSk7dmFyIENvPWZ1bmN0aW9uKFduKXtpZShEZS5yZW1vdmVkLHtlbGVtZW50OldufSk7dHJ5e1duLnBhcmVudE5vZGUucmVtb3Zl'@;
put 'Q2hpbGQoV24pfWNhdGNoe3RyeXtXbi5vdXRlckhUTUw9X3R9Y2F0Y2h7V24ucmVtb3ZlKCl9fX0sbTA9ZnVuY3Rpb24oV24sYmkpe3RyeXtpZShEZS5yZW1vdmVkLHthdHRyaWJ1dGU6YmkuZ2V0QXR0cmlidXRlTm9kZShXbiksZnJvbTpiaX0pfWNhdGNoe2llKERlLnJlbW92ZWQse2F0dHJp'@;
put 'YnV0ZTpudWxsLGZyb206Yml9KX1pZihiaS5yZW1vdmVBdHRyaWJ1dGUoV24pLCJpcyI9PT1XbiYmIWNuW1duXSlpZihzb3x8WGkpdHJ5e0NvKGJpKX1jYXRjaHt9ZWxzZSB0cnl7Ymkuc2V0QXR0cmlidXRlKFduLCIiKX1jYXRjaHt9fSxYZD1mdW5jdGlvbihXbil7dmFyIGJpLF9pO2lmKGxv'@;
put 'KVduPSI8cmVtb3ZlPjwvcmVtb3ZlPiIrV247ZWxzZXt2YXIgdWE9dWUoV24sL15bXHJcblx0IF0rLyk7X2k9dWEmJnVhWzBdfSJhcHBsaWNhdGlvbi94aHRtbCt4bWwiPT09bmwmJk1yPT09RmwmJihXbj0nPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPjxoZWFk'@;
pu